<?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>171865</bug_id>
          
          <creation_ts>2017-05-09 10:47:28 -0700</creation_ts>
          <short_desc>Use Mach exceptions instead of signals where possible</short_desc>
          <delta_ts>2017-05-13 13:31:47 -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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>REOPENED</bug_status>
          <resolution></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>172075</dependson>
          <blocked>172073</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Keith Miller">keith_miller</reporter>
          <assigned_to name="Keith Miller">keith_miller</assigned_to>
          <cc>andersca</cc>
    
    <cc>benjamin</cc>
    
    <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>jfbastien</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1306448</commentid>
    <comment_count>0</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-05-09 10:47:28 -0700</bug_when>
    <thetext>Use Mach exceptions instead of signals where possible</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1306449</commentid>
    <comment_count>1</comment_count>
      <attachid>309513</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-05-09 10:47:53 -0700</bug_when>
    <thetext>Created attachment 309513
WIP

Passes at least one test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1306459</commentid>
    <comment_count>2</comment_count>
      <attachid>309513</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-05-09 11:04:50 -0700</bug_when>
    <thetext>Comment on attachment 309513
WIP

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

&gt; Source/JavaScriptCore/runtime/VMTraps.cpp:75
&gt; -    mcontext_t&amp; mcontext;
&gt; +    PlatformRegisters&amp; context;

I think it&apos;s better to rename this to registers.

&gt; Source/JavaScriptCore/tools/SigillCrashAnalyzer.cpp:81
&gt; +    SignalContext(WTF::PlatformRegisters&amp; context)

Don&apos;t need the WTF:: qualifier.  And rename context to registers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307122</commentid>
    <comment_count>3</comment_count>
      <attachid>309673</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-05-10 18:41:05 -0700</bug_when>
    <thetext>Created attachment 309673
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307124</commentid>
    <comment_count>4</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-05-10 18:43:30 -0700</bug_when>
    <thetext>Attachment 309673 did not pass style-queue:


ERROR: Source/JavaScriptCore/API/tests/ExecutionTimeLimitTest.cpp:424:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/threads/Signals.cpp:38:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/wtf/threads/Signals.cpp:125:  catch_mach_exception_raise is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/threads/Signals.cpp:131:  catch_mach_exception_raise_state_identity is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/threads/Signals.cpp:137:  catch_mach_exception_raise_state is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 5 in 19 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>1307148</commentid>
    <comment_count>5</comment_count>
      <attachid>309680</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-05-10 20:05:56 -0700</bug_when>
    <thetext>Created attachment 309680
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307149</commentid>
    <comment_count>6</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-05-10 20:07:38 -0700</bug_when>
    <thetext>Attachment 309680 did not pass style-queue:


ERROR: Source/JavaScriptCore/API/tests/ExecutionTimeLimitTest.cpp:424:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/threads/Signals.cpp:38:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/wtf/threads/Signals.cpp:125:  catch_mach_exception_raise is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/threads/Signals.cpp:131:  catch_mach_exception_raise_state_identity is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/threads/Signals.cpp:137:  catch_mach_exception_raise_state is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 5 in 19 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>1307280</commentid>
    <comment_count>7</comment_count>
      <attachid>309715</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-05-11 09:26:27 -0700</bug_when>
    <thetext>Created attachment 309715
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307281</commentid>
    <comment_count>8</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-05-11 09:28:08 -0700</bug_when>
    <thetext>Attachment 309715 did not pass style-queue:


ERROR: Source/JavaScriptCore/API/tests/ExecutionTimeLimitTest.cpp:424:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/threads/Signals.cpp:38:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/wtf/threads/Signals.cpp:125:  catch_mach_exception_raise is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/threads/Signals.cpp:131:  catch_mach_exception_raise_state_identity is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/threads/Signals.cpp:137:  catch_mach_exception_raise_state is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 5 in 19 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>1307296</commentid>
    <comment_count>9</comment_count>
      <attachid>309715</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-05-11 09:58:08 -0700</bug_when>
    <thetext>Comment on attachment 309715
Patch

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

&gt; Source/JavaScriptCore/runtime/Options.cpp:490
&gt; +

Please remove.

&gt; Source/JavaScriptCore/runtime/Options.h:448
&gt; +    v(bool, useBBQTierUpChecks, true, Normal, &quot;Enables tier up checks for our BBQ code.&quot;) \

Is this meant for this patch?

&gt; Source/JavaScriptCore/wasm/WasmBBQPlan.cpp:245
&gt; +        TierUpCount* tierUp = Options::useBBQTierUpChecks() ? &amp;m_tierUpCounts[functionIndex] : nullptr;

Is this meant for this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307299</commentid>
    <comment_count>10</comment_count>
      <attachid>309715</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-05-11 10:01:21 -0700</bug_when>
    <thetext>Comment on attachment 309715
Patch

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

&gt; Source/JavaScriptCore/runtime/Options.h:423
&gt; +    v(bool, useMachForExceptions, true, Normal, &quot;Use mach exceptions rather than signals to handle faults and pass thread messages. (This does nothing on platforms without mach)&quot;) \

I think this is a bit misleading to be set to true all the time.  An alternate way to do this is to default to false, but to override it to true in overrideDefaults() for OS(DARWIN) only.  I think that that makes it clearer which platform uses this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307314</commentid>
    <comment_count>11</comment_count>
      <attachid>309722</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-05-11 10:43:45 -0700</bug_when>
    <thetext>Created attachment 309722
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307315</commentid>
    <comment_count>12</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-05-11 10:44:49 -0700</bug_when>
    <thetext>Attachment 309722 did not pass style-queue:


ERROR: Source/JavaScriptCore/API/tests/ExecutionTimeLimitTest.cpp:424:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/threads/Signals.cpp:38:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WTF/wtf/threads/Signals.cpp:125:  catch_mach_exception_raise is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/threads/Signals.cpp:131:  catch_mach_exception_raise_state_identity is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/threads/Signals.cpp:137:  catch_mach_exception_raise_state is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 5 in 21 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307317</commentid>
    <comment_count>13</comment_count>
      <attachid>309722</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-05-11 10:46:26 -0700</bug_when>
    <thetext>Comment on attachment 309722
Patch

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

&gt; Source/WTF/wtf/threads/Signals.cpp:33
&gt; +extern &quot;C&quot; {
&gt; +#include &quot;MachExceptionsServer.h&quot;
&gt; +};

Need #if OS(DARWIN)?

&gt; Source/WTF/wtf/threads/Signals.cpp:40
&gt; +#include &lt;mach/mach.h&gt;
&gt; +#include &lt;mach/thread_act.h&gt;

Need #if OS(DARWIN).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307324</commentid>
    <comment_count>14</comment_count>
      <attachid>309726</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-05-11 10:52:08 -0700</bug_when>
    <thetext>Created attachment 309726
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307325</commentid>
    <comment_count>15</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-05-11 10:52:44 -0700</bug_when>
    <thetext>(In reply to Mark Lam from comment #9)
&gt; Comment on attachment 309715 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=309715&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/Options.cpp:490
&gt; &gt; +
&gt; 
&gt; Please remove.
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/Options.h:448
&gt; &gt; +    v(bool, useBBQTierUpChecks, true, Normal, &quot;Enables tier up checks for our BBQ code.&quot;) \
&gt; 
&gt; Is this meant for this patch?

Yeah. 

&gt; 
&gt; &gt; Source/JavaScriptCore/wasm/WasmBBQPlan.cpp:245
&gt; &gt; +        TierUpCount* tierUp = Options::useBBQTierUpChecks() ? &amp;m_tierUpCounts[functionIndex] : nullptr;
&gt; 
&gt; Is this meant for this patch?

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307326</commentid>
    <comment_count>16</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-05-11 10:54:33 -0700</bug_when>
    <thetext>Attachment 309726 did not pass style-queue:


ERROR: Source/JavaScriptCore/API/tests/ExecutionTimeLimitTest.cpp:424:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/threads/Signals.cpp:129:  catch_mach_exception_raise is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/threads/Signals.cpp:135:  catch_mach_exception_raise_state_identity is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/threads/Signals.cpp:141:  catch_mach_exception_raise_state is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 4 in 21 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307348</commentid>
    <comment_count>17</comment_count>
      <attachid>309732</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-05-11 11:28:19 -0700</bug_when>
    <thetext>Created attachment 309732
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307352</commentid>
    <comment_count>18</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-05-11 11:30:52 -0700</bug_when>
    <thetext>Attachment 309732 did not pass style-queue:


ERROR: Source/JavaScriptCore/API/tests/ExecutionTimeLimitTest.cpp:424:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/threads/Signals.cpp:129:  catch_mach_exception_raise is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/threads/Signals.cpp:135:  catch_mach_exception_raise_state_identity is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/threads/Signals.cpp:141:  catch_mach_exception_raise_state is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 4 in 22 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>1307394</commentid>
    <comment_count>19</comment_count>
      <attachid>309751</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-05-11 12:31:51 -0700</bug_when>
    <thetext>Created attachment 309751
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307408</commentid>
    <comment_count>20</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-05-11 13:05:31 -0700</bug_when>
    <thetext>Attachment 309751 did not pass style-queue:


ERROR: Source/JavaScriptCore/API/tests/ExecutionTimeLimitTest.cpp:424:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/threads/Signals.cpp:129:  catch_mach_exception_raise is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/threads/Signals.cpp:135:  catch_mach_exception_raise_state_identity is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/threads/Signals.cpp:141:  catch_mach_exception_raise_state is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 4 in 23 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>1307415</commentid>
    <comment_count>21</comment_count>
      <attachid>309763</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-05-11 13:25:47 -0700</bug_when>
    <thetext>Created attachment 309763
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307417</commentid>
    <comment_count>22</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-05-11 13:28:27 -0700</bug_when>
    <thetext>Attachment 309763 did not pass style-queue:


ERROR: Source/JavaScriptCore/API/tests/ExecutionTimeLimitTest.cpp:424:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/threads/Signals.cpp:129:  catch_mach_exception_raise is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/threads/Signals.cpp:135:  catch_mach_exception_raise_state_identity is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/threads/Signals.cpp:141:  catch_mach_exception_raise_state is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 4 in 24 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>1307427</commentid>
    <comment_count>23</comment_count>
      <attachid>309768</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-05-11 13:36:59 -0700</bug_when>
    <thetext>Created attachment 309768
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307428</commentid>
    <comment_count>24</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-05-11 13:40:10 -0700</bug_when>
    <thetext>Attachment 309768 did not pass style-queue:


ERROR: Source/JavaScriptCore/API/tests/ExecutionTimeLimitTest.cpp:424:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/threads/Signals.cpp:129:  catch_mach_exception_raise is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/threads/Signals.cpp:135:  catch_mach_exception_raise_state_identity is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/threads/Signals.cpp:141:  catch_mach_exception_raise_state is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 4 in 24 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>1307429</commentid>
    <comment_count>25</comment_count>
      <attachid>309769</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-05-11 13:43:41 -0700</bug_when>
    <thetext>Created attachment 309769
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307431</commentid>
    <comment_count>26</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-05-11 13:46:58 -0700</bug_when>
    <thetext>Attachment 309769 did not pass style-queue:


ERROR: Source/JavaScriptCore/API/tests/ExecutionTimeLimitTest.cpp:424:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/threads/Signals.cpp:129:  catch_mach_exception_raise is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/threads/Signals.cpp:135:  catch_mach_exception_raise_state_identity is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/threads/Signals.cpp:141:  catch_mach_exception_raise_state is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 4 in 24 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>1307433</commentid>
    <comment_count>27</comment_count>
      <attachid>309772</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-05-11 13:51:19 -0700</bug_when>
    <thetext>Created attachment 309772
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307437</commentid>
    <comment_count>28</comment_count>
      <attachid>309774</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-05-11 13:52:57 -0700</bug_when>
    <thetext>Created attachment 309774
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307439</commentid>
    <comment_count>29</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-05-11 13:55:22 -0700</bug_when>
    <thetext>Attachment 309774 did not pass style-queue:


ERROR: Source/JavaScriptCore/API/tests/ExecutionTimeLimitTest.cpp:424:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/threads/Signals.cpp:129:  catch_mach_exception_raise is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/threads/Signals.cpp:135:  catch_mach_exception_raise_state_identity is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/threads/Signals.cpp:141:  catch_mach_exception_raise_state is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 4 in 24 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>1307440</commentid>
    <comment_count>30</comment_count>
      <attachid>309776</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-05-11 13:57:11 -0700</bug_when>
    <thetext>Created attachment 309776
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307442</commentid>
    <comment_count>31</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-05-11 13:59:11 -0700</bug_when>
    <thetext>Attachment 309776 did not pass style-queue:


ERROR: Source/JavaScriptCore/API/tests/ExecutionTimeLimitTest.cpp:424:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/threads/Signals.cpp:129:  catch_mach_exception_raise is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/threads/Signals.cpp:135:  catch_mach_exception_raise_state_identity is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/threads/Signals.cpp:141:  catch_mach_exception_raise_state is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 4 in 24 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>1307449</commentid>
    <comment_count>32</comment_count>
      <attachid>309780</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-05-11 14:06:10 -0700</bug_when>
    <thetext>Created attachment 309780
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307453</commentid>
    <comment_count>33</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-05-11 14:09:14 -0700</bug_when>
    <thetext>Attachment 309780 did not pass style-queue:


ERROR: Source/JavaScriptCore/API/tests/ExecutionTimeLimitTest.cpp:424:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/threads/Signals.cpp:129:  catch_mach_exception_raise is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/threads/Signals.cpp:135:  catch_mach_exception_raise_state_identity is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/threads/Signals.cpp:141:  catch_mach_exception_raise_state is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 4 in 24 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>1307490</commentid>
    <comment_count>34</comment_count>
      <attachid>309790</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-05-11 14:52:07 -0700</bug_when>
    <thetext>Created attachment 309790
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307491</commentid>
    <comment_count>35</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-05-11 14:54:56 -0700</bug_when>
    <thetext>Attachment 309790 did not pass style-queue:


ERROR: Source/JavaScriptCore/API/tests/ExecutionTimeLimitTest.cpp:424:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/threads/Signals.cpp:129:  catch_mach_exception_raise is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/threads/Signals.cpp:135:  catch_mach_exception_raise_state_identity is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/threads/Signals.cpp:141:  catch_mach_exception_raise_state is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 4 in 24 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>1307495</commentid>
    <comment_count>36</comment_count>
      <attachid>309790</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-05-11 15:03:13 -0700</bug_when>
    <thetext>Comment on attachment 309790
Patch

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

&gt; Source/JavaScriptCore/API/tests/ExecutionTimeLimitTest.cpp:35
&gt; +#include &lt;dispatch/dispatch.h&gt;

Needs #if OS(DARWIN).  You should also enclose the new test section in #if OS(DARWIN).  We need to keep the Windows build green.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307519</commentid>
    <comment_count>37</comment_count>
      <attachid>309790</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-05-11 15:34:00 -0700</bug_when>
    <thetext>Comment on attachment 309790
Patch

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

&gt; Source/JavaScriptCore/runtime/VMTraps.cpp:75
&gt; +    PlatformRegisters&amp; context;

Please rename &quot;context&quot; to &quot;registers&quot;.

&gt; Source/JavaScriptCore/runtime/VMTraps.cpp:137
&gt; +            dataLogLn(&quot;trapping pc: &quot;, RawPointer(context.trapPC), &quot; jit start: &quot;, startOfFixedExecutableMemoryPool, &quot; jit end: &quot;, endOfFixedExecutableMemoryPool);

This should be conditional on &quot;if (verbose)&quot;.  I don&apos;t think we want the signal handler logging stuff normally.

&gt; Source/JavaScriptCore/tools/SigillCrashAnalyzer.cpp:82
&gt; +    SignalContext(PlatformRegisters&amp; context)
&gt; +        : context(context)

Let&apos;s rename &quot;context&quot; to &quot;registers&quot;.

&gt; Source/JavaScriptCore/tools/SigillCrashAnalyzer.cpp:136
&gt; +    PlatformRegisters&amp; context;

Ditto.

&gt; Source/WTF/wtf/ThreadMessage.cpp:201
&gt; +void deliverMessagesUsingMach() { useMach = true; }

Please fix for Webkit style requirements.

&gt; Source/WTF/wtf/ThreadMessage.cpp:212
&gt; +    return MessageStatus::ThreadExited;

Unreachable code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307529</commentid>
    <comment_count>38</comment_count>
      <attachid>309790</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-05-11 15:49:21 -0700</bug_when>
    <thetext>Comment on attachment 309790
Patch

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

&gt;&gt; Source/JavaScriptCore/API/tests/ExecutionTimeLimitTest.cpp:35
&gt;&gt; +#include &lt;dispatch/dispatch.h&gt;
&gt; 
&gt; Needs #if OS(DARWIN).  You should also enclose the new test section in #if OS(DARWIN).  We need to keep the Windows build green.

I wrapped it in HAVE(MACH_EXCEPTIONS)

&gt;&gt; Source/JavaScriptCore/runtime/VMTraps.cpp:75
&gt;&gt; +    PlatformRegisters&amp; context;
&gt; 
&gt; Please rename &quot;context&quot; to &quot;registers&quot;.

Fixed.

&gt;&gt; Source/JavaScriptCore/runtime/VMTraps.cpp:137
&gt;&gt; +            dataLogLn(&quot;trapping pc: &quot;, RawPointer(context.trapPC), &quot; jit start: &quot;, startOfFixedExecutableMemoryPool, &quot; jit end: &quot;, endOfFixedExecutableMemoryPool);
&gt; 
&gt; This should be conditional on &quot;if (verbose)&quot;.  I don&apos;t think we want the signal handler logging stuff normally.

I removed it, that&apos;s old debugging code.

&gt;&gt; Source/JavaScriptCore/tools/SigillCrashAnalyzer.cpp:82
&gt;&gt; +        : context(context)
&gt; 
&gt; Let&apos;s rename &quot;context&quot; to &quot;registers&quot;.

fixed.

&gt;&gt; Source/JavaScriptCore/tools/SigillCrashAnalyzer.cpp:136
&gt;&gt; +    PlatformRegisters&amp; context;
&gt; 
&gt; Ditto.

fixed.

&gt;&gt; Source/WTF/wtf/ThreadMessage.cpp:201
&gt;&gt; +void deliverMessagesUsingMach() { useMach = true; }
&gt; 
&gt; Please fix for Webkit style requirements.

fixed.

&gt;&gt; Source/WTF/wtf/ThreadMessage.cpp:212
&gt;&gt; +    return MessageStatus::ThreadExited;
&gt; 
&gt; Unreachable code.

Whoops, fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307530</commentid>
    <comment_count>39</comment_count>
      <attachid>309803</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-05-11 15:49:32 -0700</bug_when>
    <thetext>Created attachment 309803
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307531</commentid>
    <comment_count>40</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-05-11 15:50:27 -0700</bug_when>
    <thetext>Attachment 309803 did not pass style-queue:


ERROR: Source/JavaScriptCore/API/tests/ExecutionTimeLimitTest.cpp:428:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/threads/Signals.cpp:129:  catch_mach_exception_raise is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/threads/Signals.cpp:135:  catch_mach_exception_raise_state_identity is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/threads/Signals.cpp:141:  catch_mach_exception_raise_state is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 4 in 24 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>1307602</commentid>
    <comment_count>41</comment_count>
      <attachid>309803</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-05-11 16:57:51 -0700</bug_when>
    <thetext>Comment on attachment 309803
Patch

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

Mostly LGTM, just a few comments/questions.

Also a suggestion for a test: Start 10-20 workers running Wasm, have each worker run for a few seconds, and just continually do OOB accesses such that we keep hitting the mach message handler.

&gt; Source/WTF/ChangeLog:22
&gt; +

I would add a link here to some of the overview you sent me.

&gt; Source/JavaScriptCore/runtime/Options.cpp:361
&gt; +#if HAVE(MACH_EXCEPTIONS)
&gt; +    Options::useMachForExceptions() = true;
&gt; +#endif

Why is this needed since this already defaults to true?

&gt; Source/WTF/wtf/Platform.h:666
&gt; +#if __has_include(&lt;mach/mach_exc.defs&gt;) &amp;&amp; !(PLATFORM(WATCHOS) || PLATFORM(APPLETV))

Is this true on iOS? What about EWS bots?

&gt; Source/WTF/wtf/ThreadMessage.cpp:168
&gt; +    auto result = thread.suspend();

Nit: a type here would be helpful

&gt; Source/WTF/wtf/ThreadMessage.cpp:194
&gt; +    thread_set_state(thread.machThread(), flavor, (thread_state_t)&amp;registers, userCount);

style nit: Please you static_cast here.

&gt; Source/WTF/wtf/threads/Signals.cpp:64
&gt; +static constexpr size_t maxMessageSize = 1 * KB;

This is scary. Can we make sure there is no number defined somewhere that is more precise?

&gt; Source/WTF/wtf/threads/Signals.cpp:66
&gt; +static void startMachExceptionHandlerThread()

suggestion: I think adding a link to some of the documentation/overview of mach ports would be helpful.

&gt; Source/WTF/wtf/threads/Signals.cpp:73
&gt; +        if (mach_port_insert_right(mach_task_self(), exceptionPort, exceptionPort, MACH_MSG_TYPE_MAKE_SEND)!= KERN_SUCCESS)

style nit: Need space around &quot;!=&quot;

&gt; Source/WTF/wtf/threads/Signals.cpp:76
&gt; +        // FIXME: This should use a dispatch queue.

please link a bug or remove.

&gt; Source/WTF/wtf/threads/Signals.cpp:77
&gt; +        (void)Thread::create(

Do we need this here because unused there is a compiler warning for unused?

&gt; Source/WTF/wtf/threads/Signals.cpp:95
&gt; +                        dataLogLn(&quot;Failed to receive mach message due to &quot;, mach_error_string(messageResult));

Do we ever expect this to happen?

&gt; Source/WTF/wtf/threads/Signals.cpp:155
&gt; +    dataLogLn(&quot;receivedSignal &quot;, exceptionType);
&gt; +    dataLogLn(&quot;Thread: &quot;, exceptionData[0]);

Remove.

&gt; Source/WTF/wtf/threads/Signals.cpp:159
&gt; +    *outStateCount = inStateCount;

what does this count mean?

&gt; Source/WTF/wtf/threads/Signals.cpp:178
&gt; +        info.faultingAddress = reinterpret_cast&lt;void*&gt;(exceptionData[1]);

Do we not care about this for SigIll?

&gt; Source/WTF/wtf/threads/Signals.cpp:184
&gt; +        dataLogLn(static_cast&lt;int&gt;(handlerResult));

remove

&gt; Source/WTF/wtf/threads/Signals.cpp:187
&gt; +            didHandle = true;

Do we want to bail out here now that it&apos;s handled?

&gt; Source/WTF/wtf/threads/Signals.cpp:252
&gt; +    if (signal == Signal::Bus &amp;&amp; useMach)

What about SegV?

&gt; Source/WTF/wtf/threads/Signals.cpp:254
&gt; +    ASSERT(!useMach || signal != Signal::Usr);

Why does this assertion hold given he above check?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307635</commentid>
    <comment_count>42</comment_count>
      <attachid>309803</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-05-11 17:47:19 -0700</bug_when>
    <thetext>Comment on attachment 309803
Patch

Attachment 309803 did not pass jsc-ews (mac):
Output: http://webkit-queues.webkit.org/results/3721774

New failing tests:
wasm.yaml/wasm/function-tests/trap-store.js.wasm-eager-jettison
wasm.yaml/wasm/function-tests/trap-store.js.wasm-no-call-ic
wasm.yaml/wasm/function-tests/trap-store.js.default-wasm</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307918</commentid>
    <comment_count>43</comment_count>
      <attachid>309908</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-05-12 10:18:26 -0700</bug_when>
    <thetext>Created attachment 309908
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1307920</commentid>
    <comment_count>44</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-05-12 10:19:56 -0700</bug_when>
    <thetext>Attachment 309908 did not pass style-queue:


ERROR: Source/JavaScriptCore/API/tests/ExecutionTimeLimitTest.cpp:428:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/WTF/wtf/threads/Signals.cpp:137:  catch_mach_exception_raise is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/threads/Signals.cpp:143:  catch_mach_exception_raise_state_identity is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/WTF/wtf/threads/Signals.cpp:149:  catch_mach_exception_raise_state is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 4 in 24 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>1308169</commentid>
    <comment_count>45</comment_count>
      <attachid>309908</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-05-12 17:20:10 -0700</bug_when>
    <thetext>Comment on attachment 309908
Patch

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

r=me with fixes.

&gt; Source/WTF/ChangeLog:11
&gt; +        that port in a thread. When another thread raises a exception (say

/a exception/an exception/

&gt; Source/WTF/ChangeLog:20
&gt; +        simply suspending the thread then running the message at that

/thread then/thread, and then/.

&gt; Source/WTF/ChangeLog:23
&gt; +        You can read more abount mach exceptions here:

/abount/about/

&gt; Source/JavaScriptCore/API/tests/ExecutionTimeLimitTest.cpp:93
&gt; +bool dispatchTerminateCallbackCalled = false;
&gt; +static bool dispatchTermitateCallback(JSContextRef, void*)
&gt; +{
&gt; +    dispatchTerminateCallbackCalled = true;
&gt; +    return true;
&gt; +}

You should enclose this in #if HAVE(MACH_EXCEPTIONS) too because the static function dispatchTermitateCallback is not used otherwise.  If we ever force HAVE(MACH_EXCEPTIONS) to be false for a test build, we&apos;ll get a build failure due to this.

&gt; Source/JavaScriptCore/runtime/Options.h:423
&gt; +    v(bool, useMachForExceptions, true, Normal, &quot;Use mach exceptions rather than signals to handle faults and pass thread messages. (This does nothing on platforms without mach)&quot;) \

Should default to false.  We override it to true only when HAVE(MACH_EXCEPTIONS) in overrideDefaults().

&gt; Source/WTF/wtf/ThreadMessage.cpp:94
&gt; +        installSignalHandler(signal, [] (Signal, SigInfo&amp;, PlatformRegisters&amp; context) {

Rename context to registers.

&gt; Source/WTF/wtf/ThreadMessage.cpp:104
&gt; +                data-&gt;message(context);

Ditto.

&gt; Source/WTF/wtf/ThreadMessage.cpp:214
&gt; +#if HAVE(MACH_EXCEPTIONS)
&gt; +    if (useMach)
&gt; +        return sendMessageMach(thread, message);
&gt; +#endif
&gt; +    return sendMessageSignal(thread, message);

suggestion: sendMessageViaMach instead of sendMessageMach, and sendMessageViaSignal instead of sendMessageSignal?

&gt; Source/WTF/wtf/threads/Signals.cpp:63
&gt; +// You can read more abount mach exceptions here:

typo: /abount/about/.

&gt; Source/WTF/wtf/threads/Signals.cpp:196
&gt; +        switch (handlerResult) {
&gt; +        case SignalAction::Handled:
&gt; +            didHandle = true;
&gt; +            break;
&gt; +        default:
&gt; +            break;
&gt; +        }

You can just say:
    didHandle = didHandle || (handlerResult == SignalAction::Handled);

&gt; Source/WTF/wtf/threads/Signals.cpp:232
&gt; +void registerThread(Thread* thread)

Let&apos;s name this &quot;registerThreadForMachExceptionHandling&quot; so that it adds some context in the client code on what the registration is for.

&gt; Source/WTF/wtf/threads/Signals.cpp:241
&gt; +void removeThread(Thread* thread)

small nit: I&apos;d prefer &quot;unregisterThread&quot; to match &quot;registerThread&quot; simply for symmetry.  So, let&apos;s name this &quot;unregisterThreadForMachExceptionHandling&quot;.

&gt; Source/WTF/wtf/threads/Signals.cpp:257
&gt; +    if (signal == Signal::Bus &amp;&amp; useMach)

We should get rid of Signal::Bus as an option that the client can select, and force the signal version to make the Signal::Segv handler handle SIGBUS as well.  For now, just add a FIXME with bug url to fix that later.  Maybe rename Signal::Segv to Signal::BadAccess.

&gt; Source/WTF/wtf/threads/Signals.h:107
&gt; +using WTF::SigInfo;

Somewhere below this, you should add:
#if HAVE(MACH_EXCEPTIONS)
using WTF::registerThreadForMachExceptionHandling;
using WTF::unregisterThreadForMachExceptionHandling;
#endif

The webkit way is to not have to qualify WTF APIs with WTF:: in the client code.  Also using more descriptive names make it clearer what the registration is for in client code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1308186</commentid>
    <comment_count>46</comment_count>
      <attachid>309908</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-05-12 17:48:20 -0700</bug_when>
    <thetext>Comment on attachment 309908
Patch

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

Thanks for the review!

&gt;&gt; Source/WTF/ChangeLog:11
&gt;&gt; +        that port in a thread. When another thread raises a exception (say
&gt; 
&gt; /a exception/an exception/

Fixed.

&gt;&gt; Source/WTF/ChangeLog:20
&gt;&gt; +        simply suspending the thread then running the message at that
&gt; 
&gt; /thread then/thread, and then/.

Fixed.

&gt;&gt; Source/WTF/ChangeLog:23
&gt;&gt; +        You can read more abount mach exceptions here:
&gt; 
&gt; /abount/about/

Fixed.

&gt;&gt; Source/JavaScriptCore/API/tests/ExecutionTimeLimitTest.cpp:93
&gt;&gt; +}
&gt; 
&gt; You should enclose this in #if HAVE(MACH_EXCEPTIONS) too because the static function dispatchTermitateCallback is not used otherwise.  If we ever force HAVE(MACH_EXCEPTIONS) to be false for a test build, we&apos;ll get a build failure due to this.

Fixed.

&gt;&gt; Source/JavaScriptCore/runtime/Options.h:423
&gt;&gt; +    v(bool, useMachForExceptions, true, Normal, &quot;Use mach exceptions rather than signals to handle faults and pass thread messages. (This does nothing on platforms without mach)&quot;) \
&gt; 
&gt; Should default to false.  We override it to true only when HAVE(MACH_EXCEPTIONS) in overrideDefaults().

I think it makes more sense to override to false when there is no Mach exception capability. Making it false here would make me think it&apos;s actually not running by default.

&gt;&gt; Source/WTF/wtf/ThreadMessage.cpp:94
&gt;&gt; +        installSignalHandler(signal, [] (Signal, SigInfo&amp;, PlatformRegisters&amp; context) {
&gt; 
&gt; Rename context to registers.

Fixed.

&gt;&gt; Source/WTF/wtf/ThreadMessage.cpp:104
&gt;&gt; +                data-&gt;message(context);
&gt; 
&gt; Ditto.

Fixed.

&gt;&gt; Source/WTF/wtf/ThreadMessage.cpp:214
&gt;&gt; +    return sendMessageSignal(thread, message);
&gt; 
&gt; suggestion: sendMessageViaMach instead of sendMessageMach, and sendMessageViaSignal instead of sendMessageSignal?

Fair enough. I changed it to sendMessageUsingMach/UsingSignal since that&apos;s more consistent with the naming I used elsewhere.

&gt;&gt; Source/WTF/wtf/threads/Signals.cpp:63
&gt;&gt; +// You can read more abount mach exceptions here:
&gt; 
&gt; typo: /abount/about/.

Fixed.

&gt;&gt; Source/WTF/wtf/threads/Signals.cpp:196
&gt;&gt; +        }
&gt; 
&gt; You can just say:
&gt;     didHandle = didHandle || (handlerResult == SignalAction::Handled);

Changed. I did |= though.

&gt;&gt; Source/WTF/wtf/threads/Signals.cpp:232
&gt;&gt; +void registerThread(Thread* thread)
&gt; 
&gt; Let&apos;s name this &quot;registerThreadForMachExceptionHandling&quot; so that it adds some context in the client code on what the registration is for.

Fair enough. Changed.

&gt;&gt; Source/WTF/wtf/threads/Signals.cpp:241
&gt;&gt; +void removeThread(Thread* thread)
&gt; 
&gt; small nit: I&apos;d prefer &quot;unregisterThread&quot; to match &quot;registerThread&quot; simply for symmetry.  So, let&apos;s name this &quot;unregisterThreadForMachExceptionHandling&quot;.

Sounds good.

&gt;&gt; Source/WTF/wtf/threads/Signals.cpp:257
&gt;&gt; +    if (signal == Signal::Bus &amp;&amp; useMach)
&gt; 
&gt; We should get rid of Signal::Bus as an option that the client can select, and force the signal version to make the Signal::Segv handler handle SIGBUS as well.  For now, just add a FIXME with bug url to fix that later.  Maybe rename Signal::Segv to Signal::BadAccess.

Done.

&gt;&gt; Source/WTF/wtf/threads/Signals.h:107
&gt;&gt; +using WTF::SigInfo;
&gt; 
&gt; Somewhere below this, you should add:
&gt; #if HAVE(MACH_EXCEPTIONS)
&gt; using WTF::registerThreadForMachExceptionHandling;
&gt; using WTF::unregisterThreadForMachExceptionHandling;
&gt; #endif
&gt; 
&gt; The webkit way is to not have to qualify WTF APIs with WTF:: in the client code.  Also using more descriptive names make it clearer what the registration is for in client code.

Changed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1308187</commentid>
    <comment_count>47</comment_count>
      <attachid>309977</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-05-12 17:48:43 -0700</bug_when>
    <thetext>Created attachment 309977
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1308191</commentid>
    <comment_count>48</comment_count>
      <attachid>309980</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-05-12 17:49:54 -0700</bug_when>
    <thetext>Created attachment 309980
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1308213</commentid>
    <comment_count>49</comment_count>
      <attachid>309980</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-05-12 18:30:17 -0700</bug_when>
    <thetext>Comment on attachment 309980
Patch for landing

Clearing flags on attachment: 309980

Committed r216808: &lt;http://trac.webkit.org/changeset/216808&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1308214</commentid>
    <comment_count>50</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-05-12 18:30:20 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1308300</commentid>
    <comment_count>51</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-05-13 09:31:33 -0700</bug_when>
    <thetext>(In reply to WebKit Commit Bot from comment #49)
&gt; Comment on attachment 309980 [details]
&gt; Patch for landing
&gt; 
&gt; Clearing flags on attachment: 309980
&gt; 
&gt; Committed r216808: &lt;http://trac.webkit.org/changeset/216808&gt;

Wooohooo!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1308314</commentid>
    <comment_count>52</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-05-13 11:50:03 -0700</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #51)
&gt; (In reply to WebKit Commit Bot from comment #49)
&gt; &gt; Comment on attachment 309980 [details]
&gt; &gt; Patch for landing
&gt; &gt; 
&gt; &gt; Clearing flags on attachment: 309980
&gt; &gt; 
&gt; &gt; Committed r216808: &lt;http://trac.webkit.org/changeset/216808&gt;
&gt; 
&gt; Wooohooo!

One question: Is it OK to execute the message in a different thread?
When using sendMessageUsingMach(), we execute the message handler in the sender thread instead of the target thread. It may change the behavior of TLS in the message handler.

And if the above thing is OK, I think we can make ThreadMessage more portable...
We can just implement ThreadMessage with Thread::suspend(), Thread::getRegisters(), Thread::setRegisters() (It can be implemented easily), and Thread::resume().
If we do so, we can implement ThreadMessage in Windows, which does not have signals.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1308333</commentid>
    <comment_count>53</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-05-13 13:30:51 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 172075</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1308336</commentid>
    <comment_count>54</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2017-05-13 13:31:47 -0700</bug_when>
    <thetext>This caused lldb to hang when debugging: rdar://problem/32178892</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309513</attachid>
            <date>2017-05-09 10:47:53 -0700</date>
            <delta_ts>2017-05-10 18:41:02 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-171865-20170509104750.patch</filename>
            <type>text/plain</type>
            <size>36319</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE2MTY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
MDcyZWVhOGJiODc4NzUzMmU1NGMyODRhYzA4OWNmZjIwYzdhM2EyLi42NmYxYmY1NjgzN2JlYzA2
OWE1YjIxNjYzNzkwNTEwODZjMzY2MDczIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyOSBAQAorMjAxNy0wNS0wOSAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBVc2UgTWFjaCBleGNlcHRpb25zIGluc3RlYWQgb2Ygc2lnbmFscyB3
aGVyZSBwb3NzaWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTcxODY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKyAgICAgICAgKiBydW50aW1lL1ZNVHJhcHMuY3Bw
OgorICAgICAgICAoSlNDOjpTaWduYWxDb250ZXh0OjpTaWduYWxDb250ZXh0KToKKyAgICAgICAg
KEpTQzo6U2lnbmFsQ29udGV4dDo6YWRqdXN0UENUb1BvaW50VG9UcmFwcGluZ0luc3RydWN0aW9u
KToKKyAgICAgICAgKEpTQzo6aW5zdGFsbFNpZ25hbEhhbmRsZXIpOgorICAgICAgICAoSlNDOjpW
TVRyYXBzOjpTaWduYWxTZW5kZXI6OnNlbmQpOgorICAgICAgICAqIHRvb2xzL1NpZ2lsbENyYXNo
QW5hbHl6ZXIuY3BwOgorICAgICAgICAoSlNDOjpTaWduYWxDb250ZXh0OjpTaWduYWxDb250ZXh0
KToKKyAgICAgICAgKEpTQzo6U2lnbmFsQ29udGV4dDo6ZHVtcCk6CisgICAgICAgIChKU0M6Omlu
c3RhbGxDcmFzaEhhbmRsZXIpOgorICAgICAgICAqIHdhc20vV2FzbUJCUVBsYW4uY3BwOgorICAg
ICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKToKKyAgICAgICAgKiB3
YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp0cmFw
SGFuZGxlcik6CisgICAgICAgIChKU0M6Oldhc206OmVuYWJsZUZhc3RNZW1vcnkpOgorICAgICAg
ICAqIHdhc20vV2FzbU1hY2hpbmVUaHJlYWRzLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6c3Rh
cnRUcmFja2luZ0N1cnJlbnRUaHJlYWQpOgorICAgICAgICAoSlNDOjpXYXNtOjpyZXNldEluc3Ry
dWN0aW9uQ2FjaGVPbkFsbFRocmVhZHMpOgorCiAyMDE3LTA1LTAzICBLZWl0aCBNaWxsZXIgIDxr
ZWl0aF9taWxsZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEFycmF5LnByb3RvdHlwZS5zb3J0IHNo
b3VsZCBhbHNvIGFsbG93IGEgbnVsbCBjb21wYXJhdG9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDFhY2VjZmE0MmE2MWZlNWM3
ODkwMzNiZDcyMTM1NWQ0YTJkZTg1NjguLmI4OGM2MTcxZGExYWJiNGVhOTgyMDAzMGRjMjA3ZjIz
MjhkZjY1ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
VEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTctMDUtMDkgIEtlaXRoIE1pbGxlciAg
PGtlaXRoX21pbGxlckBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIE1hY2ggZXhjZXB0aW9ucyBp
bnN0ZWFkIG9mIHNpZ25hbHMgd2hlcmUgcG9zc2libGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MTg2NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogd3RmL1RocmVhZE1lc3NhZ2UuY3BwOgorICAgICAgICAoV1RGOjpzZW5kTWVz
c2FnZVNjb3BlZCk6CisgICAgICAgICogd3RmL1RocmVhZE1lc3NhZ2UuaDoKKyAgICAgICAgKFdU
Rjo6c2VuZE1lc3NhZ2UpOgorICAgICAgICAqIHd0Zi9UaHJlYWRpbmcuaDoKKyAgICAgICAgKFdU
Rjo6VGhyZWFkOjptYWNoVGhyZWFkKToKKyAgICAgICAgKiB3dGYvVGhyZWFkaW5nUHRocmVhZHMu
Y3BwOgorICAgICAgICAoV1RGOjpUaHJlYWQ6OlRocmVhZCk6CisgICAgICAgIChXVEY6OlRocmVh
ZDo6flRocmVhZCk6CisgICAgICAgICogd3RmL21hYy9NYWNoRXhjZXB0aW9ucy5kZWZzOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV1RGL3d0Zi9UaHJlYWRNZXNzYWdlLmguCisgICAgICAgICogd3RmL3Ro
cmVhZHMvU2lnbmFscy5jcHA6CisgICAgICAgIChXVEY6OnN0YXJ0TWFjaEV4Y2VwdGlvbkhhbmRs
ZXJUaHJlYWQpOgorICAgICAgICAoV1RGOjpmcm9tTWFjaEV4Y2VwdGlvbik6CisgICAgICAgIChX
VEY6OnRvTWFjaE1hc2spOgorICAgICAgICAoV1RGOjpzZXRFeGNlcHRpb25Qb3J0cyk6CisgICAg
ICAgIChXVEY6OmFjdGl2ZVRocmVhZHMpOgorICAgICAgICAoV1RGOjpyZWdpc3RlclRocmVhZCk6
CisgICAgICAgIChXVEY6OnJlbW92ZVRocmVhZCk6CisgICAgICAgIChXVEY6Omluc3RhbGxTaWdu
YWxIYW5kbGVyKToKKyAgICAgICAgKFdURjo6anNjU2lnbmFsSGFuZGxlcik6IERlbGV0ZWQuCisg
ICAgICAgICogd3RmL3RocmVhZHMvU2lnbmFscy5oOgorCiAyMDE3LTA1LTAzICBNYXJrIExhbSAg
PG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBVc2UgdGhlIENMb29wIGZvciBDUFUoQVJN
NjRFKS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAppbmRleCBkNjcyNGM1
YTdjZDZjMGIzNTdjNDk5N2IzYWUyOWY1NWQ1ZGIzZjJiLi4yYTIwNmQyMGMzMzNkNWQyMmNjNjc4
M2FiMWQ5ODU5OWE5NmU0NzhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcHRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
cy5oCkBAIC00MzcsNiArNDM3LDcgQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7
CiAgICAgdih1bnNpZ25lZCwgd2ViQXNzZW1ibHlCQlFPcHRpbWl6YXRpb25MZXZlbCwgMSwgTm9y
bWFsLCAiQjMgT3B0aW1pemF0aW9uIGxldmVsIGZvciBCQlEgV2ViIEFzc2VtYmx5IG1vZHVsZSBj
b21waWxhdGlvbnMuIikgXAogICAgIHYodW5zaWduZWQsIHdlYkFzc2VtYmx5T01HT3B0aW1pemF0
aW9uTGV2ZWwsIE9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCksIE5vcm1hbCwgIkIzIE9wdGlt
aXphdGlvbiBsZXZlbCBmb3IgT01HIFdlYiBBc3NlbWJseSBtb2R1bGUgY29tcGlsYXRpb25zLiIp
IFwKICAgICBcCisgICAgdihib29sLCB1c2VCQlFUaWVyVXBDaGVja3MsIHRydWUsIE5vcm1hbCwg
IkVuYWJsZXMgdGllciB1cCBjaGVja3MgZm9yIG91ciBCQlEgY29kZS4iKSBcCiAgICAgdih1bnNp
Z25lZCwgd2ViQXNzZW1ibHlPTUdUaWVyVXBDb3VudCwgNTAwMCwgTm9ybWFsLCAiVGhlIGNvdW50
ZG93biBiZWZvcmUgd2UgdGllciB1cCBhIGZ1bmN0aW9uIHRvIE9NRy4iKSBcCiAgICAgdih1bnNp
Z25lZCwgd2ViQXNzZW1ibHlMb29wRGVjcmVtZW50LCAxNSwgTm9ybWFsLCAiVGhlIGFtb3VudCB0
aGUgdGllciB1cCBjb3VudGRvd24gaXMgZGVjcmVtZW50ZWQgb24gZWFjaCBsb29wIGJhY2tlZGdl
LiIpIFwKICAgICB2KHVuc2lnbmVkLCB3ZWJBc3NlbWJseUZ1bmN0aW9uRW50cnlEZWNyZW1lbnQs
IDEsIE5vcm1hbCwgIlRoZSBhbW91bnQgdGhlIHRpZXIgdXAgY291bnRkb3duIGlzIGRlY3JlbWVu
dGVkIG9uIGVhY2ggZnVuY3Rpb24gZW50cnkuIikgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTVRyYXBzLmNwcAppbmRleCAxYmFhY2U2MDQ0ZTY2MGE4ZTU0NDFmYmFkMDE4ZWE5MDkz
MWE0YzkxLi43ODZjZWRmMmE4M2ZlZGVlNTgwMjdkYzYwYTBlMDBlMjM5YjYwNDM0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcApAQCAtNTMsMTEgKzUzLDExIEBA
IEFMV0FZU19JTkxJTkUgVk0mIFZNVHJhcHM6OnZtKCkgY29uc3QKICNpZiBFTkFCTEUoU0lHTkFM
X0JBU0VEX1ZNX1RSQVBTKQogCiBzdHJ1Y3QgU2lnbmFsQ29udGV4dCB7Ci0gICAgU2lnbmFsQ29u
dGV4dChtY29udGV4dF90JiBtY29udGV4dCkKLSAgICAgICAgOiBtY29udGV4dChtY29udGV4dCkK
LSAgICAgICAgLCB0cmFwUEMoTWFjaGluZUNvbnRleHQ6Omluc3RydWN0aW9uUG9pbnRlcihtY29u
dGV4dCkpCi0gICAgICAgICwgc3RhY2tQb2ludGVyKE1hY2hpbmVDb250ZXh0OjpzdGFja1BvaW50
ZXIobWNvbnRleHQpKQotICAgICAgICAsIGZyYW1lUG9pbnRlcihNYWNoaW5lQ29udGV4dDo6ZnJh
bWVQb2ludGVyKG1jb250ZXh0KSkKKyAgICBTaWduYWxDb250ZXh0KFBsYXRmb3JtUmVnaXN0ZXJz
JiByZWdpc3RlcnMpCisgICAgICAgIDogY29udGV4dChyZWdpc3RlcnMpCisgICAgICAgICwgdHJh
cFBDKE1hY2hpbmVDb250ZXh0OjppbnN0cnVjdGlvblBvaW50ZXIoY29udGV4dCkpCisgICAgICAg
ICwgc3RhY2tQb2ludGVyKE1hY2hpbmVDb250ZXh0OjpzdGFja1BvaW50ZXIoY29udGV4dCkpCisg
ICAgICAgICwgZnJhbWVQb2ludGVyKE1hY2hpbmVDb250ZXh0OjpmcmFtZVBvaW50ZXIoY29udGV4
dCkpCiAgICAgewogI2lmIENQVShYODZfNjQpIHx8IENQVShYODYpCiAgICAgICAgIC8vIE9uIFg4
Nl82NCwgU0lHVFJBUCByZXBvcnRzIHRoZSBhZGRyZXNzIGFmdGVyIHRoZSB0cmFwcGluZyBQQy4g
U28sIGRlYyBieSAxLgpAQCAtNjgsMTEgKzY4LDExIEBAIHN0cnVjdCBTaWduYWxDb250ZXh0IHsK
ICAgICB2b2lkIGFkanVzdFBDVG9Qb2ludFRvVHJhcHBpbmdJbnN0cnVjdGlvbigpCiAgICAgewog
I2lmIENQVShYODZfNjQpIHx8IENQVShYODYpCi0gICAgICAgIE1hY2hpbmVDb250ZXh0OjppbnN0
cnVjdGlvblBvaW50ZXIobWNvbnRleHQpID0gdHJhcFBDOworICAgICAgICBNYWNoaW5lQ29udGV4
dDo6aW5zdHJ1Y3Rpb25Qb2ludGVyKGNvbnRleHQpID0gdHJhcFBDOwogI2VuZGlmCiAgICAgfQog
Ci0gICAgbWNvbnRleHRfdCYgbWNvbnRleHQ7CisgICAgUGxhdGZvcm1SZWdpc3RlcnMmIGNvbnRl
eHQ7CiAgICAgdm9pZCogdHJhcFBDOwogICAgIHZvaWQqIHN0YWNrUG9pbnRlcjsKICAgICB2b2lk
KiBmcmFtZVBvaW50ZXI7CkBAIC0xMzAsOCArMTMwLDggQEAgc3RhdGljIEV4cGVjdGVkPFZNQW5k
U3RhY2tCb3VuZHMsIFZNVHJhcHM6OkVycm9yPiBmaW5kQWN0aXZlVk1BbmRTdGFja0JvdW5kcyhT
aWcKIAogc3RhdGljIHZvaWQgaW5zdGFsbFNpZ25hbEhhbmRsZXIoKQogewotICAgIGluc3RhbGxT
aWduYWxIYW5kbGVyKFNpZ25hbDo6VHJhcCwgW10gKGludCwgc2lnaW5mb190Kiwgdm9pZCogdWFw
KSAtPiBTaWduYWxBY3Rpb24gewotICAgICAgICBTaWduYWxDb250ZXh0IGNvbnRleHQoc3RhdGlj
X2Nhc3Q8dWNvbnRleHRfdCo+KHVhcCktPnVjX21jb250ZXh0KTsKKyAgICBpbnN0YWxsU2lnbmFs
SGFuZGxlcihTaWduYWw6OlRyYXAsIFtdIChTaWduYWwsIFNpZ0luZm8mLCBQbGF0Zm9ybVJlZ2lz
dGVycyYgcmVnaXN0ZXJzKSAtPiBTaWduYWxBY3Rpb24geworICAgICAgICBTaWduYWxDb250ZXh0
IGNvbnRleHQocmVnaXN0ZXJzKTsKIAogICAgICAgICBpZiAoIWlzSklUUEMoY29udGV4dC50cmFw
UEMpKQogICAgICAgICAgICAgcmV0dXJuIFNpZ25hbEFjdGlvbjo6Tm90SGFuZGxlZDsKQEAgLTQw
NCw4ICs0MDQsOCBAQCB2b2lkIFZNVHJhcHM6OlNpZ25hbFNlbmRlcjo6c2VuZCgpCiAgICAgICAg
ICAgICBWTSYgdm0gPSAqbV92bTsKICAgICAgICAgICAgIGF1dG8gb3B0aW9uYWxPd25lclRocmVh
ZCA9IHZtLm93bmVyVGhyZWFkKCk7CiAgICAgICAgICAgICBpZiAob3B0aW9uYWxPd25lclRocmVh
ZCkgewotICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlKCpvcHRpb25hbE93bmVyVGhyZWFkLnZh
bHVlKCkuZ2V0KCksIFtdIChzaWdpbmZvX3QqLCB1Y29udGV4dF90KiB1Y29udGV4dCkgLT4gdm9p
ZCB7Ci0gICAgICAgICAgICAgICAgICAgIFNpZ25hbENvbnRleHQgY29udGV4dCh1Y29udGV4dC0+
dWNfbWNvbnRleHQpOworICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlKCpvcHRpb25hbE93bmVy
VGhyZWFkLnZhbHVlKCkuZ2V0KCksIFtdIChQbGF0Zm9ybVJlZ2lzdGVycyYgcmVnaXN0ZXJzKSAt
PiB2b2lkIHsKKyAgICAgICAgICAgICAgICAgICAgU2lnbmFsQ29udGV4dCBjb250ZXh0KHJlZ2lz
dGVycyk7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8gYWN0aXZlVk1BbmRTdGFja0JvdW5kcyA9
IGZpbmRBY3RpdmVWTUFuZFN0YWNrQm91bmRzKGNvbnRleHQpOwogICAgICAgICAgICAgICAgICAg
ICBpZiAoYWN0aXZlVk1BbmRTdGFja0JvdW5kcykgewogICAgICAgICAgICAgICAgICAgICAgICAg
Vk0qIHZtID0gYWN0aXZlVk1BbmRTdGFja0JvdW5kcy52YWx1ZSgpLnZtOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1NpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1NpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwCmluZGV4IDRh
ZGFlZmYxY2RhMmQxZmJjNmY5MDYxZjA2M2UxNGQyZTYzMzAwNDguLmQyMDc3NjgwNDIxYzEyNjI0
Y2Q4NTM0MmY3YmUwYTFhMDJiZmY3OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90b29scy9TaWdpbGxDcmFzaEFuYWx5emVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAKQEAgLTc4LDExICs3OCwxMSBAQCBwcml2
YXRlOgogI2VuZGlmIC8vIFVTRShPU19MT0cpCiAKIHN0cnVjdCBTaWduYWxDb250ZXh0IHsKLSAg
ICBTaWduYWxDb250ZXh0KG1jb250ZXh0X3QmIG1jb250ZXh0KQotICAgICAgICA6IG1jb250ZXh0
KG1jb250ZXh0KQotICAgICAgICAsIG1hY2hpbmVQQyhNYWNoaW5lQ29udGV4dDo6aW5zdHJ1Y3Rp
b25Qb2ludGVyKG1jb250ZXh0KSkKLSAgICAgICAgLCBzdGFja1BvaW50ZXIoTWFjaGluZUNvbnRl
eHQ6OnN0YWNrUG9pbnRlcihtY29udGV4dCkpCi0gICAgICAgICwgZnJhbWVQb2ludGVyKE1hY2hp
bmVDb250ZXh0OjpmcmFtZVBvaW50ZXIobWNvbnRleHQpKQorICAgIFNpZ25hbENvbnRleHQoV1RG
OjpQbGF0Zm9ybVJlZ2lzdGVycyYgY29udGV4dCkKKyAgICAgICAgOiBjb250ZXh0KGNvbnRleHQp
CisgICAgICAgICwgbWFjaGluZVBDKE1hY2hpbmVDb250ZXh0OjppbnN0cnVjdGlvblBvaW50ZXIo
Y29udGV4dCkpCisgICAgICAgICwgc3RhY2tQb2ludGVyKE1hY2hpbmVDb250ZXh0OjpzdGFja1Bv
aW50ZXIoY29udGV4dCkpCisgICAgICAgICwgZnJhbWVQb2ludGVyKE1hY2hpbmVDb250ZXh0Ojpm
cmFtZVBvaW50ZXIoY29udGV4dCkpCiAgICAgeyB9CiAKICAgICB2b2lkIGR1bXAoKQpAQCAtMTEy
LDcgKzExMiw3IEBAIHN0cnVjdCBTaWduYWxDb250ZXh0IHsKICAgICAgICAgdihncykKIAogI2Rl
ZmluZSBEVU1QX1JFR0lTVEVSKF9fcmVnKSBcCi0gICAgICAgIGxvZygiUmVnaXN0ZXIgIiAjX19y
ZWcgIjogJXAiLCByZWludGVycHJldF9jYXN0PHZvaWQqPihtY29udGV4dC0+X19zcy5fXyMjX19y
ZWcpKTsKKyAgICAgICAgbG9nKCJSZWdpc3RlciAiICNfX3JlZyAiOiAlcCIsIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KGNvbnRleHQuX18jI19fcmVnKSk7CiAgICAgICAgIEZPUl9FQUNIX1JFR0lT
VEVSKERVTVBfUkVHSVNURVIpCiAjdW5kZWYgRk9SX0VBQ0hfUkVHSVNURVIKIApAQCAtMTMzLDcg
KzEzMyw3IEBAIHN0cnVjdCBTaWduYWxDb250ZXh0IHsKICNlbmRpZgogICAgIH0KIAotICAgIG1j
b250ZXh0X3QmIG1jb250ZXh0OworICAgIFBsYXRmb3JtUmVnaXN0ZXJzJiBjb250ZXh0OwogICAg
IHZvaWQqIG1hY2hpbmVQQzsKICAgICB2b2lkKiBzdGFja1BvaW50ZXI7CiAgICAgdm9pZCogZnJh
bWVQb2ludGVyOwpAQCAtMTQyLDggKzE0Miw4IEBAIHN0cnVjdCBTaWduYWxDb250ZXh0IHsKIHN0
YXRpYyB2b2lkIGluc3RhbGxDcmFzaEhhbmRsZXIoKQogewogI2lmIENQVShYODZfNjQpIHx8IENQ
VShBUk02NCkKLSAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWw6OklsbCwgW10gKGludCwg
c2lnaW5mb190Kiwgdm9pZCogdWFwKSB7Ci0gICAgICAgIFNpZ25hbENvbnRleHQgY29udGV4dChz
dGF0aWNfY2FzdDx1Y29udGV4dF90Kj4odWFwKS0+dWNfbWNvbnRleHQpOworICAgIGluc3RhbGxT
aWduYWxIYW5kbGVyKFNpZ25hbDo6SWxsLCBbXSAoU2lnbmFsLCBTaWdJbmZvJiwgUGxhdGZvcm1S
ZWdpc3RlcnMmIHJlZ2lzdGVycykgeworICAgICAgICBTaWduYWxDb250ZXh0IGNvbnRleHQocmVn
aXN0ZXJzKTsKIAogICAgICAgICBpZiAoIWlzSklUUEMoY29udGV4dC5tYWNoaW5lUEMpKQogICAg
ICAgICAgICAgcmV0dXJuIFNpZ25hbEFjdGlvbjo6Tm90SGFuZGxlZDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAppbmRleCAxZGQwY2QxZDgzNWM2YzJmMjMxYjAw
Yjg4NmRkZTRhZjcyYzI2M2NlLi5iMWI1OThkMjBjNWMwMDc3ZDllOWQwOGUzNjhhZDVjYTE3ODMx
YmFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCkBAIC0y
NDIsNyArMjQyLDcgQEAgdm9pZCBCQlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKENvbXBpbGF0aW9u
RWZmb3J0IGVmZm9ydCkKICAgICAgICAgQVNTRVJUKHZhbGlkYXRlRnVuY3Rpb24oZnVuY3Rpb25T
dGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQo
KSkpOwogCiAgICAgICAgIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0g
PSBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4oKTsKLSAgICAgICAgVGllclVwQ291bnQq
IHRpZXJVcCA9ICZtX3RpZXJVcENvdW50c1tmdW5jdGlvbkluZGV4XTsKKyAgICAgICAgVGllclVw
Q291bnQqIHRpZXJVcCA9IE9wdGlvbnM6OnVzZUJCUVRpZXJVcENoZWNrcygpID8gJm1fdGllclVw
Q291bnRzW2Z1bmN0aW9uSW5kZXhdIDogbnVsbHB0cjsKICAgICAgICAgYXV0byBwYXJzZUFuZENv
bXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUobV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0
aW9uSW5kZXhdLCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBtX3Vu
bGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdLCBtX21vZHVsZUluZm9ybWF0aW9u
LmdldCgpLCBtX21vZGUsIENvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZSwgZnVuY3Rpb25JbmRleCwg
dGllclVwKTsKIAogICAgICAgICBpZiAoVU5MSUtFTFkoIXBhcnNlQW5kQ29tcGlsZVJlc3VsdCkp
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25h
bEhhbmRsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFs
SGFuZGxlci5jcHAKaW5kZXggMmUwYzk5YTM5YmViZDMxNzhiOTE0OGQ5NThmZTUzZTU3YTYyMjk3
ZS4uMjY0YzM0ZGU0NWRhMTc1YTVkNTE0MWMxNzFlZmU5NWUwNjNjNWUyNyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAK
QEAgLTUyLDkgKzUyLDggQEAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxIYXNoU2V0PHN0ZDo6
dHVwbGU8dm9pZCosIHZvaWQqPj4+IGNvZGVMb2NhdGlvbnM7IC8vICgKIAogc3RhdGljIGJvb2wg
ZmFzdEhhbmRsZXJJbnN0YWxsZWQgeyBmYWxzZSB9OwogCi1zdGF0aWMgU2lnbmFsQWN0aW9uIHRy
YXBIYW5kbGVyKGludCwgc2lnaW5mb190KiBzaWdJbmZvLCB2b2lkKiB1Y29udGV4dCkKK3N0YXRp
YyBTaWduYWxBY3Rpb24gdHJhcEhhbmRsZXIoU2lnbmFsLCBTaWdJbmZvJiBzaWdJbmZvLCBQbGF0
Zm9ybVJlZ2lzdGVycyYgY29udGV4dCkKIHsKLSAgICBtY29udGV4dF90JiBjb250ZXh0ID0gc3Rh
dGljX2Nhc3Q8dWNvbnRleHRfdCo+KHVjb250ZXh0KS0+dWNfbWNvbnRleHQ7CiAgICAgdm9pZCog
ZmF1bHRpbmdJbnN0cnVjdGlvbiA9IE1hY2hpbmVDb250ZXh0OjppbnN0cnVjdGlvblBvaW50ZXIo
Y29udGV4dCk7CiAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgInN0YXJ0aW5nIGhhbmRsZXIgZm9y
IGZhdWx0IGF0OiAiLCBSYXdQb2ludGVyKGZhdWx0aW5nSW5zdHJ1Y3Rpb24pKTsKIApAQCAtNjQs
NyArNjMsNyBAQCBzdGF0aWMgU2lnbmFsQWN0aW9uIHRyYXBIYW5kbGVyKGludCwgc2lnaW5mb190
KiBzaWdJbmZvLCB2b2lkKiB1Y29udGV4dCkKICAgICBpZiAoaXNKSVRQQyhmYXVsdGluZ0luc3Ry
dWN0aW9uKSkgewogICAgICAgICBib29sIGZhdWx0ZWRJbkFjdGl2ZUZhc3RNZW1vcnkgPSBmYWxz
ZTsKICAgICAgICAgewotICAgICAgICAgICAgdm9pZCogZmF1bHRpbmdBZGRyZXNzID0gc2lnSW5m
by0+c2lfYWRkcjsKKyAgICAgICAgICAgIHZvaWQqIGZhdWx0aW5nQWRkcmVzcyA9IHNpZ0luZm8u
ZmF1bHRpbmdBZGRyZXNzOwogICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgImNoZWNr
aW5nIGZhdWx0aW5nIGFkZHJlc3M6ICIsIFJhd1BvaW50ZXIoZmF1bHRpbmdBZGRyZXNzKSwgIiBp
cyBpbiBhbiBhY3RpdmUgZmFzdCBtZW1vcnkiKTsKICAgICAgICAgICAgIGZhdWx0ZWRJbkFjdGl2
ZUZhc3RNZW1vcnkgPSBXYXNtOjpNZW1vcnk6OmFkZHJlc3NJc0luQWN0aXZlRmFzdE1lbW9yeShm
YXVsdGluZ0FkZHJlc3MpOwogICAgICAgICB9CkBAIC0xMjQsMTEgKzEyMywxMSBAQCB2b2lkIGVu
YWJsZUZhc3RNZW1vcnkoKQogICAgICAgICAgICAgcmV0dXJuOwogCiAjaWYgRU5BQkxFKFdFQkFT
U0VNQkxZX0ZBU1RfTUVNT1JZKQotICAgICAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWw6
OkJ1cywgW10gKGludCBzaWduYWwsIHNpZ2luZm9fdCogc2lnSW5mbywgdm9pZCogdWNvbnRleHQp
IHsKKyAgICAgICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFsOjpCdXMsIFtdIChTaWduYWwg
c2lnbmFsLCBTaWdJbmZvJiBzaWdJbmZvLCBQbGF0Zm9ybVJlZ2lzdGVycyYgdWNvbnRleHQpIHsK
ICAgICAgICAgICAgIHJldHVybiB0cmFwSGFuZGxlcihzaWduYWwsIHNpZ0luZm8sIHVjb250ZXh0
KTsKICAgICAgICAgfSk7CiAKLSAgICAgICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFsOjpT
ZWdWLCBbXSAoaW50IHNpZ25hbCwgc2lnaW5mb190KiBzaWdJbmZvLCB2b2lkKiB1Y29udGV4dCkg
eworICAgICAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWw6OlNlZ1YsIFtdIChTaWduYWwg
c2lnbmFsLCBTaWdJbmZvJiBzaWdJbmZvLCBQbGF0Zm9ybVJlZ2lzdGVycyYgdWNvbnRleHQpIHsK
ICAgICAgICAgICAgIHJldHVybiB0cmFwSGFuZGxlcihzaWduYWwsIHNpZ0luZm8sIHVjb250ZXh0
KTsKICAgICAgICAgfSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21NYWNoaW5lVGhyZWFkcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TWFjaGluZVRocmVhZHMuY3BwCmluZGV4IDVhYWM4N2FjYjU3NDdjN2ZjYTJmOTM2ZWM5Y2Y2Nzhi
NDMxNzgxNzEuLmZlM2U0ZmRiNzBlODQ5ZjYzNTE1Nzk3MWUwNGRhZmFkYTA5YmIwNTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NYWNoaW5lVGhyZWFkcy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1hY2hpbmVUaHJlYWRzLmNwcApA
QCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIk1hY2hpbmVTdGFja01hcmtlci5oIgogI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRNZXNzYWdlLmg+
CisjaW5jbHVkZSA8d3RmL3RocmVhZHMvU2lnbmFscy5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIFdhc20gewogCkBAIC00OSw2ICs1MCw3IEBAIGlubGluZSBNYWNoaW5lVGhyZWFkcyYg
d2FzbVRocmVhZHMoKQogdm9pZCBzdGFydFRyYWNraW5nQ3VycmVudFRocmVhZCgpCiB7CiAgICAg
d2FzbVRocmVhZHMoKS5hZGRDdXJyZW50VGhyZWFkKCk7CisgICAgV1RGOjpyZWdpc3RlclRocmVh
ZCgmVGhyZWFkOjpjdXJyZW50KCkpOwogfQogCiB2b2lkIHJlc2V0SW5zdHJ1Y3Rpb25DYWNoZU9u
QWxsVGhyZWFkcygpCkBAIC01Nyw3ICs1OSw3IEBAIHZvaWQgcmVzZXRJbnN0cnVjdGlvbkNhY2hl
T25BbGxUaHJlYWRzKCkKIAogICAgIGNvbnN0IERvdWJseUxpbmtlZExpc3Q8TWFjaGluZVRocmVh
ZHM6Ok1hY2hpbmVUaHJlYWQ+JiB0aHJlYWRzID0gd2FzbVRocmVhZHMoKS50aHJlYWRzTGlzdEhl
YWQobG9ja2VyKTsKICAgICBmb3IgKGNvbnN0IGF1dG8qIHRocmVhZCA9IHRocmVhZHMuaGVhZCgp
OyB0aHJlYWQ7IHRocmVhZCA9IHRocmVhZC0+bmV4dCgpKSB7Ci0gICAgICAgIHNlbmRNZXNzYWdl
KHRocmVhZC0+bV90aHJlYWQuZ2V0KCksIFtdIChzaWdpbmZvX3QqLCB1Y29udGV4dF90Kikgewor
ICAgICAgICBzZW5kTWVzc2FnZSh0aHJlYWQtPm1fdGhyZWFkLmdldCgpLCBbXSAoUGxhdGZvcm1S
ZWdpc3RlcnMmKSB7CiAgICAgICAgICAgICAvLyBJdCdzIGxpa2VseSB0aGF0IHRoZSBzaWduYWwg
aGFuZGxlciB3aWxsIGFscmVhZHkgcmVzZXQgdGhlIGluc3RydWN0aW9uIGNhY2hlIGJ1dCB3ZSBt
aWdodCBhcyB3ZWxsIGJlIHN1cmUuCiAgICAgICAgICAgICBXVEY6OmNyb3NzTW9kaWZ5aW5nQ29k
ZUZlbmNlKCk7CiAgICAgICAgIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggNWY0NTI4N2Y2ZTNjNjg4NWIyMmJhMjc3NmNmYmM2YTMzMjNiZDA1Yi4uNTg1
NDRjY2I2MmNiMjIxMmJhZWU3NmY0ZDJhMDFlODliNmI3YjA5NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV1RGL1dURi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02NCw2ICs2NCw3IEBACiAJCTUyMTgzMDEyQzk5
RTQ3NkE4NEVFQkVBOCAvKiBTeW1ib2xJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY3MkJCREIxMDdGQTQyNDg4NjE3OEI5RSAvKiBTeW1ib2xJ
bXBsLmNwcCAqLzsgfTsKIAkJNTMxMUJENTMxRUE3MUNBRDAwNTI1MjgxIC8qIFNpZ25hbHMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMxMUJENTEx
RUE3MUNBRDAwNTI1MjgxIC8qIFNpZ25hbHMuY3BwICovOyB9OwogCQk1MzExQkQ1QzFFQTgyMkY5
MDA1MjUyODEgLyogVGhyZWFkTWVzc2FnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MzExQkQ1QjFFQTgyMkY5MDA1MjUyODEgLyogVGhyZWFkTWVz
c2FnZS5jcHAgKi87IH07CisJCTUzNTM0RjJBMUVDMEUxMEUwMDE0MUIyRiAvKiBNYWNoRXhjZXB0
aW9ucy5kZWZzIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTM1MzRGMjkxRUMwRTEwRTAwMTQxQjJGIC8qIE1hY2hFeGNlcHRpb25zLmRlZnMgKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoQ2xpZW50LCBTZXJ2ZXIsICk7IH07IH07CiAJCTcwQTk5M0ZF
MUFENzE1MTMwMEZBNjE1QiAvKiBTeW1ib2xSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MEE5OTNGQzFBRDcxNTEzMDBGQTYxNUIgLyog
U3ltYm9sUmVnaXN0cnkuY3BwICovOyB9OwogCQk3MEVDQTYwRDFCMDI0MjY4MDA0NDk3MzkgLyog
QXRvbWljU3RyaW5nSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3MEVDQTYwQTFCMDI0MjY4MDA0NDk3MzkgLyogQXRvbWljU3RyaW5nSW1wbC5j
cHAgKi87IH07CiAJCTdBRkVDNkIxMUVCMjJCNTkwMERBREUzNiAvKiBVVUlELmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBRkVDNkIwMUVCMjJCNTkw
MERBREUzNiAvKiBVVUlELmNwcCAqLzsgfTsKQEAgLTI5OSw2ICszMDAsNyBAQAogCQk1MzExQkQ1
NzFFQTdFMUExMDA1MjUyODEgLyogU2lnbmFscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTaWduYWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMTFCRDU5
MUVBODFBOTYwMDUyNTI4MSAvKiBUaHJlYWRNZXNzYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRocmVhZE1lc3NhZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTMxMUJENUIxRUE4MjJGOTAwNTI1MjgxIC8qIFRocmVhZE1lc3NhZ2UuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGhyZWFkTWVzc2FnZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzNTM0RjI5MUVDMEUxMEUwMDE0MUIyRiAvKiBNYWNoRXhj
ZXB0aW9ucy5kZWZzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5taWc7IHBhdGggPSBNYWNoRXhjZXB0
aW9ucy5kZWZzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzlFQjA2MjFENTUyODQy
MDBDODJFRjcgLyogTEVCRGVjb2Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBMRUJEZWNvZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRUMyNTNDMUU5
NUFEMzAwMDA4MzFCOSAvKiBQcmlvcml0eVF1ZXVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFByaW9yaXR5UXVldWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTUzMDcxQzkxQzQwNDI3MjAwMzg0ODk4IC8qIFRpbnlMUlVDYWNoZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBUaW55TFJVQ2FjaGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTEwMjMsNiArMTAyNSw3IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQkxQTQyOEI4
QjFDOEY4OUREMDA1MUU5RUIgLyogQXBwS2l0Q29tcGF0aWJpbGl0eURlY2xhcmF0aW9ucy5oICov
LAogCQkJCTFBQ0FERDgyMTg4NDQ4MDEwMEQ4QjcxRCAvKiBEZXByZWNhdGVkU3ltYm9sc1VzZWRC
eVNhZmFyaS5tbSAqLywKKwkJCQk1MzUzNEYyOTFFQzBFMTBFMDAxNDFCMkYgLyogTWFjaEV4Y2Vw
dGlvbnMuZGVmcyAqLywKIAkJCQlBOEE0NzJDNTE1MUE4MjVBMDA0MTIzRkYgLyogTWFpblRocmVh
ZE1hYy5tbSAqLywKIAkJCSk7CiAJCQlwYXRoID0gbWFjOwpAQCAtMTM0Niw2ICsxMzQ5LDcgQEAK
IAkJCQkxNDNGNjExRjE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBM0I3MjVFQzk4NzQ0NkFEOTNGMUE0NDAgLyogUmFuZG9tRGV2aWNlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE4QTQ3NDE0MTUxQTgyNUIwMDQxMjNGRiAvKiBSYW5kb21OdW1iZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTM1MzRGMkExRUMwRTEwRTAwMTQxQjJGIC8qIE1hY2hF
eGNlcHRpb25zLmRlZnMgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQxQTE1MUE4MjVCMDA0MTIz
RkYgLyogUmVmQ291bnRlZExlYWtDb3VudGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJDREVE
MEYzMTgxMTVDODUwMDREQkE3MCAvKiBSdW5Mb29wLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJD
REVEMEVGMTgxMTVDMzgwMDREQkE3MCAvKiBSdW5Mb29wQ0YuY3BwIGluIFNvdXJjZXMgKi8sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRNZXNzYWdlLmNwcCBiL1NvdXJjZS9XVEYv
d3RmL1RocmVhZE1lc3NhZ2UuY3BwCmluZGV4IGYxNGJjNDVkMzYxNGM3YzY2MzVlYjE3YWIwZTI3
MjgxNmExMzczZGQuLjJhYTkyNmQ5ODNlMGMzYWJhZjJjMWM3NDE2YzBkYzI0YjhlOTdhOGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZE1lc3NhZ2UuY3BwCisrKyBiL1NvdXJjZS9X
VEYvd3RmL1RocmVhZE1lc3NhZ2UuY3BwCkBAIC04OCw3ICs4OCw3IEBAIE1lc3NhZ2VTdGF0dXMg
c2VuZE1lc3NhZ2VTY29wZWQoVGhyZWFkJiB0aHJlYWQsIGNvbnN0IFRocmVhZE1lc3NhZ2UmIG1l
c3NhZ2UpCiAgICAgY29uc3RleHByIFNpZ25hbCBzaWduYWwgPSBTaWduYWw6OlVzcjsKICAgICBz
dGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZTsKICAgICBzdGQ6OmNhbGxfb25jZShvbmNlLCBbXSB7
Ci0gICAgICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKHNpZ25hbCwgW10gKGludCwgc2lnaW5mb190
KiBpbmZvLCB2b2lkKiB1YXApIHsKKyAgICAgICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoc2lnbmFs
LCBbXSAoU2lnbmFsLCBTaWdJbmZvJiwgUGxhdGZvcm1SZWdpc3RlcnMmIGNvbnRleHQpIHsKICAg
ICAgICAgICAgIFRocmVhZCogdGhyZWFkID0gVGhyZWFkOjpjdXJyZW50TWF5QmVOdWxsKCk7CiAK
ICAgICAgICAgICAgIGlmICghdGhyZWFkKSB7CkBAIC05OCw3ICs5OCw3IEBAIE1lc3NhZ2VTdGF0
dXMgc2VuZE1lc3NhZ2VTY29wZWQoVGhyZWFkJiB0aHJlYWQsIGNvbnN0IFRocmVhZE1lc3NhZ2Um
IG1lc3NhZ2UpCiAKICAgICAgICAgICAgIC8vIE5vZGUgc2hvdWxkIGJlIGRlbGV0ZWQgaW4gdGhl
IHNlbmRlciB0aHJlYWQuIERlbGV0aW5nIE5vZGVzIGluIHNpZ25hbCBoYW5kbGVyIGNhdXNlcyBk
ZWFkIGxvY2suCiAgICAgICAgICAgICB0aHJlYWQtPnRocmVhZE1lc3NhZ2VzKCkuY29uc3VtZUFs
bFdpdGhOb2RlKFsmXSAoVGhyZWFkTWVzc2FnZURhdGEqIGRhdGEsIE5vZGUqIG5vZGUpIHsKLSAg
ICAgICAgICAgICAgICBkYXRhLT5tZXNzYWdlKGluZm8sIHN0YXRpY19jYXN0PHVjb250ZXh0X3Qq
Pih1YXApKTsKKyAgICAgICAgICAgICAgICBkYXRhLT5tZXNzYWdlKGNvbnRleHQpOwogICAgICAg
ICAgICAgICAgIC8vIEJ5IHNldHRpbmcgcmFuIHZhcmlhYmxlLCAoMSkgdGhlIHNlbmRlciBhY2tu
b3dsZWRnZXMgdGhlIGNvbXBsZXRpb24gYW5kCiAgICAgICAgICAgICAgICAgLy8gKDIpIGdldHMg
dGhlIE5vZGUgdG8gYmUgZGVsZXRlZC4KICAgICAgICAgICAgICAgICBkYXRhLT5yYW4uc3RvcmUo
bm9kZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRNZXNzYWdlLmggYi9Tb3Vy
Y2UvV1RGL3d0Zi9UaHJlYWRNZXNzYWdlLmgKaW5kZXggOWFlNTNmMjljZjdlOGZiMDBlZjkyMTFk
MTZjZTJjZGVkNjAzZWMxYi4uMjczZjA0MGE2YzY2OWNiNjBiNTczZjU3NDc3MGIxNjA5MzE2OTU3
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5oCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL1RocmVhZE1lc3NhZ2UuaApAQCAtMzYsNyArMzYsNyBAQCBuYW1lc3BhY2UgV1RG
IHsKIHZvaWQgaW5pdGlhbGl6ZVRocmVhZE1lc3NhZ2VzKCk7CiAKIGNsYXNzIFRocmVhZE1lc3Nh
Z2VEYXRhOwotdXNpbmcgVGhyZWFkTWVzc2FnZSA9IFNjb3BlZExhbWJkYTx2b2lkKHNpZ2luZm9f
dCosIHVjb250ZXh0X3QqKT47Cit1c2luZyBUaHJlYWRNZXNzYWdlID0gU2NvcGVkTGFtYmRhPHZv
aWQoUGxhdGZvcm1SZWdpc3RlcnMmKT47CiAKIGVudW0gY2xhc3MgTWVzc2FnZVN0YXR1cyB7CiAg
ICAgTWVzc2FnZVJhbiwKQEAgLTUxLDcgKzUxLDcgQEAgTWVzc2FnZVN0YXR1cyBzZW5kTWVzc2Fn
ZVNjb3BlZChUaHJlYWQmLCBjb25zdCBUaHJlYWRNZXNzYWdlJik7CiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdG9yPgogTWVzc2FnZVN0YXR1cyBzZW5kTWVzc2FnZShUaHJlYWQmIHRhcmdldFRocmVh
ZCwgY29uc3QgRnVuY3RvciYgZnVuYykKIHsKLSAgICBhdXRvIGxhbWJkYSA9IHNjb3BlZExhbWJk
YVJlZjx2b2lkKHNpZ2luZm9fdCosIHVjb250ZXh0X3QqKT4oZnVuYyk7CisgICAgYXV0byBsYW1i
ZGEgPSBzY29wZWRMYW1iZGFSZWY8dm9pZChQbGF0Zm9ybVJlZ2lzdGVycyYpPihmdW5jKTsKICAg
ICByZXR1cm4gc2VuZE1lc3NhZ2VTY29wZWQodGFyZ2V0VGhyZWFkLCBsYW1iZGEpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaCBiL1NvdXJjZS9XVEYvd3RmL1Ro
cmVhZGluZy5oCmluZGV4IGQyZTUzNmRmN2E4Njk2ZDhlNmI5NWJhNDNlMTczZDNiNTUwYmYxNmEu
LjM1MTRlOGMwOWYwZmM5NGQ1MzRiZTJmM2I2ZTdjNDk1MGUwYmNmMDUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvd3RmL1RocmVhZGluZy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5o
CkBAIC0xMzgsNiArMTM4LDEwIEBAIHB1YmxpYzoKIAogI2lmIFVTRShQVEhSRUFEUykKICAgICBM
b2NrbGVzc0JhZzxUaHJlYWRNZXNzYWdlRGF0YSo+JiB0aHJlYWRNZXNzYWdlcygpIHsgcmV0dXJu
IG1fdGhyZWFkTWVzc2FnZXM7IH0KKworI2lmIE9TKERBUldJTikKKyAgICBtYWNoX3BvcnRfdCBt
YWNoVGhyZWFkKCkgeyByZXR1cm4gbV9wbGF0Zm9ybVRocmVhZDsgfQorI2VuZGlmCiAjZW5kaWYK
IAogcHJvdGVjdGVkOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nUHRocmVh
ZHMuY3BwIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwCmluZGV4IGQzNGQ3
OThmMjliZjg5OTAwNDJkYTUxOGE5Y2ZiN2ExNjNhODY4MmQuLjNjYzcwMWIxYWVkMjM3YTVhOWM5
OTZkOWM1NWNjZWVmNDU3NmY1OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGlu
Z1B0aHJlYWRzLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAK
QEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlIDx3dGYvVGhyZWFkRnVuY3Rpb25JbnZvY2F0aW9u
Lmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZEhvbGRlci5oPgogI2luY2x1ZGUgPHd0Zi9Xb3JkTG9j
ay5oPgorI2luY2x1ZGUgPHd0Zi90aHJlYWRzL1NpZ25hbHMuaD4KIAogI2lmIE9TKExJTlVYKQog
I2luY2x1ZGUgPHN5cy9wcmN0bC5oPgpAQCAtNTQsNiArNTUsMTAgQEAKICNpbmNsdWRlIDxzeXMv
dGltZS5oPgogI2VuZGlmCiAKKyNpZiBPUyhEQVJXSU4pCisjaW5jbHVkZSA8bWFjaC9leGNlcHRp
b24uaD4KKyNlbmRpZgorCiAjaWYgIU9TKERBUldJTikgJiYgT1MoVU5JWCkKIAogI2luY2x1ZGUg
PHN5cy9tbWFuLmg+CkBAIC03NSw2ICs4MCw3IEBAIG5hbWVzcGFjZSBXVEYgewogCiBUaHJlYWQ6
OlRocmVhZCgpCiB7CisgICAgcmVtb3ZlVGhyZWFkKHRoaXMpOwogI2lmICFPUyhEQVJXSU4pCiAg
ICAgc2VtX2luaXQoJm1fc2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZSwgLyogT25seSBhdmFpbGFi
bGUgaW4gdGhpcyBwcm9jZXNzLiAqLyAwLCAvKiBJbml0aWFsIHZhbHVlIGZvciB0aGUgc2VtYXBo
b3JlLiAqLyAwKTsKICNlbmRpZgpAQCAtODIsNiArODgsNyBAQCBUaHJlYWQ6OlRocmVhZCgpCiAK
IFRocmVhZDo6flRocmVhZCgpCiB7CisKICNpZiAhT1MoREFSV0lOKQogICAgIHNlbV9kZXN0cm95
KCZtX3NlbWFwaG9yZUZvclN1c3BlbmRSZXN1bWUpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9tYWMvTWFjaEV4Y2VwdGlvbnMuZGVmcyBiL1NvdXJjZS9XVEYvd3RmL21hYy9N
YWNoRXhjZXB0aW9ucy5kZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQyMDU3NDJhNGVkNTAwZjgwNjRmZWViNDk1
NWE3Yzk3MGQ5OWFmMGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9tYWMvTWFj
aEV4Y2VwdGlvbnMuZGVmcwpAQCAtMCwwICsxLDI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPG1hY2gvbWFjaF9leGMuZGVmcz4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RocmVhZHMvU2lnbmFscy5jcHAgYi9Tb3VyY2UvV1RG
L3d0Zi90aHJlYWRzL1NpZ25hbHMuY3BwCmluZGV4IDg1NWIyOGIzMTcyMTcyN2NmMWY0MzFhOTE4
YTI1MWRjMmU2YTNkZmMuLjdhMGUyODhmMjljNzM5OTQzMzA1MmJhODhmZjEyZTcwNGUzMTU0NDcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RocmVhZHMvU2lnbmFscy5jcHAKKysrIGIvU291
cmNlL1dURi93dGYvdGhyZWFkcy9TaWduYWxzLmNwcApAQCAtMzMsOTAgKzMzLDI3NyBAQAogI2lu
Y2x1ZGUgPHNpZ25hbC5oPgogI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CiAjaW5jbHVkZSA8d3Rm
L0RhdGFMb2cuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9Mb2Nr
bGVzc0JhZy5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KICNpbmNsdWRlIDx3dGYvTmV2
ZXJEZXN0cm95ZWQuaD4KIAorI2luY2x1ZGUgPG1hY2gvbWFjaC5oPgorI2luY2x1ZGUgPG1hY2gv
dGhyZWFkX2FjdC5oPgorCitleHRlcm4gIkMiIHsKKyNpbmNsdWRlICJNYWNoRXhjZXB0aW9uc1Nl
cnZlci5oIgorfTsKKwogbmFtZXNwYWNlIFdURiB7CiAKLXN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95
ZWQ8TG9ja2xlc3NCYWc8U2lnbmFsSGFuZGxlcj4+IGhhbmRsZXJzW3N0YXRpY19jYXN0PHNpemVf
dD4oU2lnbmFsOjpOdW1iZXJPZlNpZ25hbHMpXSA9IHsgfTsKLXN0YXRpYyBzdHJ1Y3Qgc2lnYWN0
aW9uIG9sZEFjdGlvbnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihTaWduYWw6Ok51bWJlck9mU2lnbmFs
cyldOwotc3RhdGljIHN0ZDo6b25jZV9mbGFnIGluaXRpYWxpemVPbmNlRmxhZ3Nbc3RhdGljX2Nh
c3Q8c2l6ZV90PihTaWduYWw6Ok51bWJlck9mU2lnbmFscyldOwotCi1zdGF0aWMgdm9pZCBqc2NT
aWduYWxIYW5kbGVyKGludCBzaWcsIHNpZ2luZm9fdCogaW5mbywgdm9pZCogbWNvbnRleHQpCi17
Ci0gICAgU2lnbmFsIHNpZ25hbCA9IGZyb21TeXN0ZW1TaWduYWwoc2lnKTsKLQotICAgIGF1dG8g
cmVzdG9yZURlZmF1bHQgPSBbJl0gewotICAgICAgICBzdHJ1Y3Qgc2lnYWN0aW9uIGRlZmF1bHRB
Y3Rpb247Ci0gICAgICAgIGRlZmF1bHRBY3Rpb24uc2FfaGFuZGxlciA9IFNJR19ERkw7Ci0gICAg
ICAgIHNpZ2ZpbGxzZXQoJmRlZmF1bHRBY3Rpb24uc2FfbWFzayk7Ci0gICAgICAgIGRlZmF1bHRB
Y3Rpb24uc2FfZmxhZ3MgPSAwOwotICAgICAgICBhdXRvIHJlc3VsdCA9IHNpZ2FjdGlvbihzaWcs
ICZkZWZhdWx0QWN0aW9uLCBudWxscHRyKTsKLSAgICAgICAgZGF0YUxvZ0xuSWYocmVzdWx0ID09
IC0xLCAiVW5hYmxlIHRvIHJlc3RvcmUgdGhlIGRlZmF1bHQgaGFuZGxlciB3aGlsZSBwcm9jY2Vz
c2luZyBzaWduYWwgIiwgc2lnLCAiIHRoZSBwcm9jZXNzIGlzIHByb2JhYmx5IGRlYWRsb2NrZWQu
IChlcnJubzogIiwgc3RyZXJyb3IoZXJybm8pLCAiKSIpOwotICAgIH07CisgICAgCisgICAgc3Rh
dGljIExhenlOZXZlckRlc3Ryb3llZDxMb2NrbGVzc0JhZzxTaWduYWxIYW5kbGVyPj4gaGFuZGxl
cnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihTaWduYWw6Ok51bWJlck9mU2lnbmFscyldID0geyB9Owor
ICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBpbml0aWFsaXplT25jZUZsYWdzW3N0YXRpY19jYXN0
PHNpemVfdD4oU2lnbmFsOjpOdW1iZXJPZlNpZ25hbHMpXTsKKy8vICAgIHN0YXRpYyBzdHJ1Y3Qg
c2lnYWN0aW9uIG9sZEFjdGlvbnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihTaWduYWw6Ok51bWJlck9m
U2lnbmFscyldOworCisgICAgc3RhdGljIG1hY2hfcG9ydF90IGV4Y2VwdGlvblBvcnQ7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbWF4TWVzc2FnZVNpemUgPSAxICogS0I7CisKKyAgICBz
dGF0aWMgdm9pZCBzdGFydE1hY2hFeGNlcHRpb25IYW5kbGVyVGhyZWFkKCkKKyAgICB7CisgICAg
ICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlOworICAgICAgICBzdGQ6OmNhbGxfb25jZShv
bmNlLCBbXSB7CisgICAgICAgICAgICBpZiAobWFjaF9wb3J0X2FsbG9jYXRlKG1hY2hfdGFza19z
ZWxmKCksIE1BQ0hfUE9SVF9SSUdIVF9SRUNFSVZFLCAmZXhjZXB0aW9uUG9ydCkgIT0gS0VSTl9T
VUNDRVNTKQorICAgICAgICAgICAgICAgIENSQVNIKCk7CisKKyAgICAgICAgICAgIGlmIChtYWNo
X3BvcnRfaW5zZXJ0X3JpZ2h0KG1hY2hfdGFza19zZWxmKCksIGV4Y2VwdGlvblBvcnQsIGV4Y2Vw
dGlvblBvcnQsIE1BQ0hfTVNHX1RZUEVfTUFLRV9TRU5EKSE9IEtFUk5fU1VDQ0VTUykKKyAgICAg
ICAgICAgICAgICBDUkFTSCgpOwogCi0gICAgLy8gVGhpcyBzaG91bGRuJ3QgaGFwcGVuIGJ1dCB3
ZSBtaWdodCBhcyB3ZWxsIGJlIGNhcmVmdWwuCi0gICAgaWYgKHNpZ25hbCA9PSBTaWduYWw6OlVu
a25vd24pIHsKLSAgICAgICAgZGF0YUxvZ0xuKCJXZSBzb21laG93IGdvdCBjYWxsZWQgZm9yIGFu
IHVua25vd24gc2lnbmFsICIsIHNpZywgIiwgaGFscC4iKTsKLSAgICAgICAgcmVzdG9yZURlZmF1
bHQoKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgKHZvaWQpVGhyZWFkOjpjcmVhdGUo
CisgICAgICAgICAgICAgICAgIldURiBNYWNoIEV4Y2VwdGlvbiBUaHJlYWQiLCBbXSAoKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHVuaW9uIE1lc3NhZ2UgeworICAgICAgICAgICAgICAgICAgICAg
ICAgbWFjaF9tc2dfaGVhZGVyX3QgaGVhZGVyOworICAgICAgICAgICAgICAgICAgICAgICAgY2hh
ciBkYXRhW21heE1lc3NhZ2VTaXplXTsKKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAg
ICAgICAgICAgICAgTWVzc2FnZSBtZXNzYWdlSGVhZGVySW47CisgICAgICAgICAgICAgICAgICAg
IE1lc3NhZ2UgbWVzc2FnZUhlYWRlck91dDsKKworICAgICAgICAgICAgICAgICAgICB3aGlsZSAo
dHJ1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAga2Vybl9yZXR1cm5fdCBtZXNzYWdlUmVz
dWx0ID0gbWFjaF9tc2coJm1lc3NhZ2VIZWFkZXJJbi5oZWFkZXIsIE1BQ0hfUkNWX01TRywgMCwg
bWF4TWVzc2FnZVNpemUsIGV4Y2VwdGlvblBvcnQsIE1BQ0hfTVNHX1RJTUVPVVRfTk9ORSwgTUFD
SF9QT1JUX05VTEwpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2VSZXN1bHQg
PT0gS0VSTl9TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtYWNo
X2V4Y19zZXJ2ZXIoJm1lc3NhZ2VIZWFkZXJJbi5oZWFkZXIsICZtZXNzYWdlSGVhZGVyT3V0Lmhl
YWRlcikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENSQVNIKCk7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlUmVzdWx0ID0gbWFjaF9tc2coJm1lc3NhZ2VI
ZWFkZXJPdXQuaGVhZGVyLCBNQUNIX1NFTkRfTVNHLCBtZXNzYWdlSGVhZGVyT3V0LmhlYWRlci5t
c2doX3NpemUsIDAsIG1lc3NhZ2VIZWFkZXJPdXQuaGVhZGVyLm1zZ2hfbG9jYWxfcG9ydCwgMCwg
TUFDSF9QT1JUX05VTEwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKG1lc3NhZ2VSZXN1bHQgPT0gS0VSTl9TVUNDRVNTKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiRmFpbGVk
IHRvIHJlY2VpdmUgbWFjaCBtZXNzYWdlIGR1ZSB0byAiLCBtYWNoX2Vycm9yX3N0cmluZyhtZXNz
YWdlUmVzdWx0KSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pLmxlYWtS
ZWYoKTsKKyAgICAgICAgfSk7CiAgICAgfQogCi0gICAgYm9vbCBkaWRIYW5kbGUgPSBmYWxzZTsK
LSAgICBib29sIHJlc3RvcmVEZWZhdWx0SGFuZGxlciA9IGZhbHNlOwotICAgIGhhbmRsZXJzW3N0
YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0tPml0ZXJhdGUoWyZdIChjb25zdCBTaWduYWxIYW5k
bGVyJiBoYW5kbGVyKSB7Ci0gICAgICAgIHN3aXRjaCAoaGFuZGxlcihzaWcsIGluZm8sIG1jb250
ZXh0KSkgewotICAgICAgICBjYXNlIFNpZ25hbEFjdGlvbjo6SGFuZGxlZDoKLSAgICAgICAgICAg
IGRpZEhhbmRsZSA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTaWdu
YWxBY3Rpb246OkZvcmNlRGVmYXVsdDoKLSAgICAgICAgICAgIHJlc3RvcmVEZWZhdWx0SGFuZGxl
ciA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIGJyZWFrOworICAgIHN0YXRpYyBTaWduYWwgZnJvbU1hY2hFeGNlcHRpb24oZXhjZXB0aW9u
X3R5cGVfdCB0eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgICAg
ICBjYXNlIEVYQ19CQURfQUNDRVNTOiByZXR1cm4gU2lnbmFsOjpTZWdWOworICAgICAgICAgICAg
Y2FzZSBFWENfQkFEX0lOU1RSVUNUSU9OOiByZXR1cm4gU2lnbmFsOjpJbGw7CisgICAgICAgICAg
ICBjYXNlIEVYQ19CUkVBS1BPSU5UOiByZXR1cm4gU2lnbmFsOjpUcmFwOworICAgICAgICAgICAg
ZGVmYXVsdDogYnJlYWs7CiAgICAgICAgIH0KLSAgICB9KTsKKyAgICAgICAgcmV0dXJuIFNpZ25h
bDo6VW5rbm93bjsKKyAgICB9CiAKLSAgICBpZiAocmVzdG9yZURlZmF1bHRIYW5kbGVyKSB7Ci0g
ICAgICAgIHJlc3RvcmVEZWZhdWx0KCk7Ci0gICAgICAgIHJldHVybjsKKyAgICBzdGF0aWMgZXhj
ZXB0aW9uX21hc2tfdCB0b01hY2hNYXNrKFNpZ25hbCBzaWduYWwpCisgICAgeworICAgICAgICBz
d2l0Y2ggKHNpZ25hbCkgeworICAgICAgICAgICAgY2FzZSBTaWduYWw6OlNlZ1Y6IHJldHVybiBF
WENfTUFTS19CQURfQUNDRVNTOworICAgICAgICAgICAgY2FzZSBTaWduYWw6OklsbDogcmV0dXJu
IEVYQ19NQVNLX0JBRF9JTlNUUlVDVElPTjsKKyAgICAgICAgICAgIGNhc2UgU2lnbmFsOjpUcmFw
OiByZXR1cm4gRVhDX01BU0tfQlJFQUtQT0lOVDsKKyAgICAgICAgICAgIGRlZmF1bHQ6IGJyZWFr
OworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
fQogCi0gICAgc3RydWN0IHNpZ2FjdGlvbiYgb2xkQWN0aW9uID0gb2xkQWN0aW9uc1tzdGF0aWNf
Y2FzdDxzaXplX3Q+KHNpZ25hbCldOwotICAgIGlmIChzaWduYWwgPT0gU2lnbmFsOjpVc3IpIHsK
LSAgICAgICAgaWYgKG9sZEFjdGlvbi5zYV9zaWdhY3Rpb24pCi0gICAgICAgICAgICBvbGRBY3Rp
b24uc2Ffc2lnYWN0aW9uKHNpZywgaW5mbywgbWNvbnRleHQpOwotICAgICAgICByZXR1cm47Cisg
ICAgZXh0ZXJuICJDIiB7CisKKyAgICAvLyBXZSBuZWVkIHRvIGltcGxlbWVudCBzdHVicyBmb3Ig
Y2F0Y2hfbWFjaF9leGNlcHRpb25fcmFpc2UgYW5kIGNhdGNoX21hY2hfZXhjZXB0aW9uX3JhaXNl
X3N0YXRlX2lkZW50aXR5LgorICAgIC8vIFRoZSBNaUcgZ2VuZXJhdGVkIGZpbGUgd2lsbCBmYWls
IHRvIGdlbmVyYXRlIG90aGVyd2lzZSwgZXZlbiB0aG91Z2ggd2UgZG9uJ3QgdXNlIHRoZSBmdW5j
dGlvbnMuIE9ubHkgdGhlCisgICAgLy8gY2F0Y2hfbWFjaF9leGNlcHRpb25fcmFpc2Vfc3RhdGVf
aWRlbnRpdHkgZnVuY3Rpb24gc2hvdWxkIGJlIHVzZWQgYmFzZWQgb24gdGhlIFRPRE8gZmlndXJl
IHRoaXMgb3V0LgorICAgIGtlcm5fcmV0dXJuX3QgY2F0Y2hfbWFjaF9leGNlcHRpb25fcmFpc2Uo
bWFjaF9wb3J0X3QsIG1hY2hfcG9ydF90LCBtYWNoX3BvcnRfdCwgZXhjZXB0aW9uX3R5cGVfdCwg
bWFjaF9leGNlcHRpb25fZGF0YV90LCBtYWNoX21zZ190eXBlX251bWJlcl90KQorICAgIHsKKyAg
ICAgICAgZGF0YUxvZ0xuKCJXZSBzaG91bGQgbm90IGhhdmUgY2FsbGVkIGNhdGNoX2V4Y2VwdGlv
bl9yYWlzZSgpLCBwbGVhc2UgZmlsZSBhIGJ1ZyBhdCBidWdzLndlYmtpdC5vcmciKTsKKyAgICAg
ICAgcmV0dXJuIEtFUk5fRkFJTFVSRTsKICAgICB9CiAKLSAgICBpZiAoIWRpZEhhbmRsZSkgewot
ICAgICAgICBpZiAob2xkQWN0aW9uLnNhX3NpZ2FjdGlvbikgewotICAgICAgICAgICAgb2xkQWN0
aW9uLnNhX3NpZ2FjdGlvbihzaWcsIGluZm8sIG1jb250ZXh0KTsKLSAgICAgICAgICAgIHJldHVy
bjsKKyAgICBrZXJuX3JldHVybl90IGNhdGNoX21hY2hfZXhjZXB0aW9uX3JhaXNlX3N0YXRlX2lk
ZW50aXR5KG1hY2hfcG9ydF90LCBtYWNoX3BvcnRfdCwgbWFjaF9wb3J0X3QsIGV4Y2VwdGlvbl90
eXBlX3QsIG1hY2hfZXhjZXB0aW9uX2RhdGFfdCwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCwgaW50
ICosIHRocmVhZF9zdGF0ZV90LCBtYWNoX21zZ190eXBlX251bWJlcl90ICx0aHJlYWRfc3RhdGVf
dCwgIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QgKikKKyAgICB7CisgICAgICAgIGRhdGFMb2dMbigi
V2Ugc2hvdWxkIG5vdCBoYXZlIGNhbGxlZCBjYXRjaF9tYWNoX2V4Y2VwdGlvbl9yYWlzZV9zdGF0
ZV9pZGVudGl0eSwgcGxlYXNlIGZpbGUgYSBidWcgYXQgYnVncy53ZWJraXQub3JnIik7CisgICAg
ICAgIHJldHVybiBLRVJOX0ZBSUxVUkU7CisgICAgfQorCisgICAga2Vybl9yZXR1cm5fdCBjYXRj
aF9tYWNoX2V4Y2VwdGlvbl9yYWlzZV9zdGF0ZSgKKyAgICAgICAgbWFjaF9wb3J0X3QsCisgICAg
ICAgIGV4Y2VwdGlvbl90eXBlX3QgZXhjZXB0aW9uX3R5cGUsCisgICAgICAgIGNvbnN0IG1hY2hf
ZXhjZXB0aW9uX2RhdGFfdCBleGNlcHRpb25fZGF0YSwKKyAgICAgICAgbWFjaF9tc2dfdHlwZV9u
dW1iZXJfdCBkYXRhX2NvdW50LAorICAgICAgICBpbnQqIHN0YXRlX2ZsYXZvciwKKyAgICAgICAg
Y29uc3QgdGhyZWFkX3N0YXRlX3QgaW5fc3RhdGUsCisgICAgICAgIG1hY2hfbXNnX3R5cGVfbnVt
YmVyX3QgaW5fc3RhdGVfY291bnQsCisgICAgICAgIHRocmVhZF9zdGF0ZV90IG91dF9zdGF0ZSwK
KyAgICAgICAgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCAqb3V0X3N0YXRlX2NvdW50KQorICAgIHsK
KyAgICAgICAgU2lnbmFsIHNpZ25hbCA9IGZyb21NYWNoRXhjZXB0aW9uKGV4Y2VwdGlvbl90eXBl
KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2lnbmFsICE9IFNpZ25hbDo6VW5rbm93bik7CisK
KyAgICAgICAgbWVtY3B5KG91dF9zdGF0ZSwgaW5fc3RhdGUsIGluX3N0YXRlX2NvdW50ICogc2l6
ZW9mKGluX3N0YXRlWzBdKSk7CisgICAgICAgICpvdXRfc3RhdGVfY291bnQgPSBpbl9zdGF0ZV9j
b3VudDsKKworI2lmIENQVShYODZfNjQpCisgICAgICAgIEFTU0VSVCgqc3RhdGVfZmxhdm9yID09
IHg4Nl9USFJFQURfU1RBVEUpOworICAgICAgICBQbGF0Zm9ybVJlZ2lzdGVycyYgcmVnaXN0ZXJz
ID0gcmVpbnRlcnByZXRfY2FzdDx4ODZfdGhyZWFkX3N0YXRlX3QqPihvdXRfc3RhdGUpLT51dHMu
dHM2NDsKKyNlbGlmIENQVShBUk02NCkKKworI2VuZGlmCisKKyAgICAgICAgU2lnSW5mbyBpbmZv
OworICAgICAgICBpZiAoc2lnbmFsID09IFNpZ25hbDo6U2VnVikgeworICAgICAgICAgICAgQVNT
RVJUX1VOVVNFRChkYXRhX2NvdW50LCBkYXRhX2NvdW50ID09IDIpOworICAgICAgICAgICAgaW5m
by5mYXVsdGluZ0FkZHJlc3MgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihleGNlcHRpb25fZGF0
YVsxXSk7CiAgICAgICAgIH0KIAotICAgICAgICByZXN0b3JlRGVmYXVsdCgpOwotICAgICAgICBy
ZXR1cm47CisgICAgICAgIGJvb2wgZGlkSGFuZGxlID0gZmFsc2U7CisgICAgICAgIGhhbmRsZXJz
W3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0tPml0ZXJhdGUoWyZdIChjb25zdCBTaWduYWxI
YW5kbGVyJiBoYW5kbGVyKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGhhbmRsZXIoc2lnbmFsLCBp
bmZvLCByZWdpc3RlcnMpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBTaWduYWxBY3Rpb246Okhh
bmRsZWQ6CisgICAgICAgICAgICAgICAgICAgIGRpZEhhbmRsZSA9IHRydWU7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAgICAgICBpZiAo
ZGlkSGFuZGxlKQorICAgICAgICAgICAgcmV0dXJuIEtFUk5fU1VDQ0VTUzsKKyAgICAgICAgcmV0
dXJuIEtFUk5fRkFJTFVSRTsKKyAgICB9CisKKyAgICB9OworCisgICAgc3RhdGljIFN0YXRpY0xv
Y2sgdGhyZWFkTG9jazsKKyAgICBleGNlcHRpb25fbWFza190IGFjdGl2ZUV4Y2VwdGlvbnMgeyAw
IH07CisKKyAgICBpbmxpbmUgdm9pZCBzZXRFeGNlcHRpb25Qb3J0cyhjb25zdCBBYnN0cmFjdExv
Y2tlciYsIFRocmVhZCogdGhyZWFkKQorICAgIHsKKyAgICAgICAga2Vybl9yZXR1cm5fdCByZXQg
PSBLRVJOX1NVQ0NFU1M7CisgICAgICAgIGlmICgocmV0ID0gdGhyZWFkX3NldF9leGNlcHRpb25f
cG9ydHModGhyZWFkLT5tYWNoVGhyZWFkKCksIGFjdGl2ZUV4Y2VwdGlvbnMsIGV4Y2VwdGlvblBv
cnQsIEVYQ0VQVElPTl9TVEFURSB8IE1BQ0hfRVhDRVBUSU9OX0NPREVTLCBNQUNISU5FX1RIUkVB
RF9TVEFURSkpICE9IEtFUk5fU1VDQ0VTUykKKyAgICAgICAgICAgIENSQVNIKCk7CiAgICAgfQot
fQotCi12b2lkIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbCBzaWduYWwsIFNpZ25hbEhhbmRs
ZXImJiBoYW5kbGVyKQotewotICAgIEFTU0VSVChzaWduYWwgPCBTaWduYWw6OlVua25vd24pOwot
ICAgIHN0ZDo6Y2FsbF9vbmNlKGluaXRpYWxpemVPbmNlRmxhZ3Nbc3RhdGljX2Nhc3Q8c2l6ZV90
PihzaWduYWwpXSwgWyZdIHsKLSAgICAgICAgaGFuZGxlcnNbc3RhdGljX2Nhc3Q8c2l6ZV90Pihz
aWduYWwpXS5jb25zdHJ1Y3QoKTsKLQotICAgICAgICBzdHJ1Y3Qgc2lnYWN0aW9uIGFjdGlvbjsK
LSAgICAgICAgYWN0aW9uLnNhX3NpZ2FjdGlvbiA9IGpzY1NpZ25hbEhhbmRsZXI7Ci0gICAgICAg
IGF1dG8gcmVzdWx0ID0gc2lnZmlsbHNldCgmYWN0aW9uLnNhX21hc2spOwotICAgICAgICBSRUxF
QVNFX0FTU0VSVCghcmVzdWx0KTsKLSAgICAgICAgYWN0aW9uLnNhX2ZsYWdzID0gU0FfU0lHSU5G
TzsKLSAgICAgICAgcmVzdWx0ID0gc2lnYWN0aW9uKHRvU3lzdGVtU2lnbmFsKHNpZ25hbCksICZh
Y3Rpb24sICZvbGRBY3Rpb25zW3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0pOwotICAgICAg
ICBSRUxFQVNFX0FTU0VSVCghcmVzdWx0KTsKLSAgICB9KTsKLQotICAgIGhhbmRsZXJzW3N0YXRp
Y19jYXN0PHNpemVfdD4oc2lnbmFsKV0tPmFkZChXVEZNb3ZlKGhhbmRsZXIpKTsKLX0KKworICAg
IGlubGluZSBIYXNoU2V0PFRocmVhZCo+JiBhY3RpdmVUaHJlYWRzKGNvbnN0IEFic3RyYWN0TG9j
a2VyJikKKyAgICB7CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PFRocmVh
ZCo+PiBhY3RpdmVUaHJlYWRzOworICAgICAgICByZXR1cm4gYWN0aXZlVGhyZWFkczsKKyAgICB9
CisKKyAgICB2b2lkIHJlZ2lzdGVyVGhyZWFkKFRocmVhZCogdGhyZWFkKQorICAgIHsKKyAgICAg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayh0aHJlYWRMb2NrKTsKKyAgICAgICAgYXV0byByZXN1
bHQgPSBhY3RpdmVUaHJlYWRzKGxvY2tlcikuYWRkKHRocmVhZCk7CisKKyAgICAgICAgaWYgKHJl
c3VsdC5pc05ld0VudHJ5KQorICAgICAgICAgICAgc2V0RXhjZXB0aW9uUG9ydHMobG9ja2VyLCB0
aHJlYWQpOworICAgIH0KKworICAgIHZvaWQgcmVtb3ZlVGhyZWFkKFRocmVhZCogdGhyZWFkKQor
ICAgIHsKKyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayh0aHJlYWRMb2NrKTsKKyAgICAg
ICAgYWN0aXZlVGhyZWFkcyhsb2NrZXIpLnJlbW92ZSh0aHJlYWQpOworICAgIH0KKworICAgIHZv
aWQgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFsIHNpZ25hbCwgU2lnbmFsSGFuZGxlciYmIGhh
bmRsZXIpCisgICAgeworICAgICAgICBBU1NFUlQoc2lnbmFsIDwgU2lnbmFsOjpVbmtub3duKTsK
KyAgICAgICAgaWYgKHNpZ25hbCA9PSBTaWduYWw6OkJ1cykKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBzdGFydE1hY2hFeGNlcHRpb25IYW5kbGVyVGhyZWFkKCk7CisKKyAgICAgICAg
c3RkOjpjYWxsX29uY2UoaW5pdGlhbGl6ZU9uY2VGbGFnc1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNp
Z25hbCldLCBbJl0geworCisgICAgICAgICAgICBoYW5kbGVyc1tzdGF0aWNfY2FzdDxzaXplX3Q+
KHNpZ25hbCldLmNvbnN0cnVjdCgpOworICAgICAgICB9KTsKKworICAgICAgICBoYW5kbGVyc1tz
dGF0aWNfY2FzdDxzaXplX3Q+KHNpZ25hbCldLT5hZGQoV1RGTW92ZShoYW5kbGVyKSk7CisKKyAg
ICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayh0aHJlYWRMb2NrKTsKKyAgICAgICAgYWN0aXZl
RXhjZXB0aW9ucyB8PSB0b01hY2hNYXNrKHNpZ25hbCk7CisKKyAgICAgICAgZm9yIChUaHJlYWQq
IHRocmVhZCA6IGFjdGl2ZVRocmVhZHMobG9ja2VyKSkKKyAgICAgICAgICAgIHNldEV4Y2VwdGlv
blBvcnRzKGxvY2tlciwgdGhyZWFkKTsKKyAgICB9CisKKy8vc3RhdGljIHZvaWQganNjU2lnbmFs
SGFuZGxlcihpbnQgc2lnLCBzaWdpbmZvX3QqIGluZm8sIHZvaWQqIG1jb250ZXh0KQorLy97Cisv
LyAgICBTaWduYWwgc2lnbmFsID0gZnJvbVN5c3RlbVNpZ25hbChzaWcpOworLy8KKy8vICAgIGF1
dG8gcmVzdG9yZURlZmF1bHQgPSBbJl0geworLy8gICAgICAgIHN0cnVjdCBzaWdhY3Rpb24gZGVm
YXVsdEFjdGlvbjsKKy8vICAgICAgICBkZWZhdWx0QWN0aW9uLnNhX2hhbmRsZXIgPSBTSUdfREZM
OworLy8gICAgICAgIHNpZ2ZpbGxzZXQoJmRlZmF1bHRBY3Rpb24uc2FfbWFzayk7CisvLyAgICAg
ICAgZGVmYXVsdEFjdGlvbi5zYV9mbGFncyA9IDA7CisvLyAgICAgICAgYXV0byByZXN1bHQgPSBz
aWdhY3Rpb24oc2lnLCAmZGVmYXVsdEFjdGlvbiwgbnVsbHB0cik7CisvLyAgICAgICAgZGF0YUxv
Z0xuSWYocmVzdWx0ID09IC0xLCAiVW5hYmxlIHRvIHJlc3RvcmUgdGhlIGRlZmF1bHQgaGFuZGxl
ciB3aGlsZSBwcm9jY2Vzc2luZyBzaWduYWwgIiwgc2lnLCAiIHRoZSBwcm9jZXNzIGlzIHByb2Jh
Ymx5IGRlYWRsb2NrZWQuIChlcnJubzogIiwgc3RyZXJyb3IoZXJybm8pLCAiKSIpOworLy8gICAg
fTsKKy8vCisvLyAgICAvLyBUaGlzIHNob3VsZG4ndCBoYXBwZW4gYnV0IHdlIG1pZ2h0IGFzIHdl
bGwgYmUgY2FyZWZ1bC4KKy8vICAgIGlmIChzaWduYWwgPT0gU2lnbmFsOjpVbmtub3duKSB7Cisv
LyAgICAgICAgZGF0YUxvZ0xuKCJXZSBzb21laG93IGdvdCBjYWxsZWQgZm9yIGFuIHVua25vd24g
c2lnbmFsICIsIHNpZywgIiwgaGFscC4iKTsKKy8vICAgICAgICByZXN0b3JlRGVmYXVsdCgpOwor
Ly8gICAgICAgIHJldHVybjsKKy8vICAgIH0KKy8vCisvLyAgICBib29sIGRpZEhhbmRsZSA9IGZh
bHNlOworLy8gICAgYm9vbCByZXN0b3JlRGVmYXVsdEhhbmRsZXIgPSBmYWxzZTsKKy8vICAgIGhh
bmRsZXJzW3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0tPml0ZXJhdGUoWyZdIChjb25zdCBT
aWduYWxIYW5kbGVyJiBoYW5kbGVyKSB7CisvLyAgICAgICAgc3dpdGNoIChoYW5kbGVyKHNpZywg
aW5mbywgbWNvbnRleHQpKSB7CisvLyAgICAgICAgY2FzZSBTaWduYWxBY3Rpb246OkhhbmRsZWQ6
CisvLyAgICAgICAgICAgIGRpZEhhbmRsZSA9IHRydWU7CisvLyAgICAgICAgICAgIGJyZWFrOwor
Ly8gICAgICAgIGNhc2UgU2lnbmFsQWN0aW9uOjpGb3JjZURlZmF1bHQ6CisvLyAgICAgICAgICAg
IHJlc3RvcmVEZWZhdWx0SGFuZGxlciA9IHRydWU7CisvLyAgICAgICAgICAgIGJyZWFrOworLy8g
ICAgICAgIGRlZmF1bHQ6CisvLyAgICAgICAgICAgIGJyZWFrOworLy8gICAgICAgIH0KKy8vICAg
IH0pOworLy8KKy8vICAgIGlmIChyZXN0b3JlRGVmYXVsdEhhbmRsZXIpIHsKKy8vICAgICAgICBy
ZXN0b3JlRGVmYXVsdCgpOworLy8gICAgICAgIHJldHVybjsKKy8vICAgIH0KKy8vCisvLyAgICBz
dHJ1Y3Qgc2lnYWN0aW9uJiBvbGRBY3Rpb24gPSBvbGRBY3Rpb25zW3N0YXRpY19jYXN0PHNpemVf
dD4oc2lnbmFsKV07CisvLyAgICBpZiAoc2lnbmFsID09IFNpZ25hbDo6VXNyKSB7CisvLyAgICAg
ICAgaWYgKG9sZEFjdGlvbi5zYV9zaWdhY3Rpb24pCisvLyAgICAgICAgICAgIG9sZEFjdGlvbi5z
YV9zaWdhY3Rpb24oc2lnLCBpbmZvLCBtY29udGV4dCk7CisvLyAgICAgICAgcmV0dXJuOworLy8g
ICAgfQorLy8KKy8vICAgIGlmICghZGlkSGFuZGxlKSB7CisvLyAgICAgICAgaWYgKG9sZEFjdGlv
bi5zYV9zaWdhY3Rpb24pIHsKKy8vICAgICAgICAgICAgb2xkQWN0aW9uLnNhX3NpZ2FjdGlvbihz
aWcsIGluZm8sIG1jb250ZXh0KTsKKy8vICAgICAgICAgICAgcmV0dXJuOworLy8gICAgICAgIH0K
Ky8vCisvLyAgICAgICAgcmVzdG9yZURlZmF1bHQoKTsKKy8vICAgICAgICByZXR1cm47CisvLyAg
ICB9CisvL30KKworLy92b2lkIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbCBzaWduYWwsIFNp
Z25hbEhhbmRsZXImJiBoYW5kbGVyKQorLy97CisvLyAgICBBU1NFUlQoc2lnbmFsIDwgU2lnbmFs
OjpVbmtub3duKTsKKy8vICAgIHN0ZDo6Y2FsbF9vbmNlKGluaXRpYWxpemVPbmNlRmxhZ3Nbc3Rh
dGljX2Nhc3Q8c2l6ZV90PihzaWduYWwpXSwgWyZdIHsKKy8vICAgICAgICBoYW5kbGVyc1tzdGF0
aWNfY2FzdDxzaXplX3Q+KHNpZ25hbCldLmNvbnN0cnVjdCgpOworLy8KKy8vICAgICAgICBzdHJ1
Y3Qgc2lnYWN0aW9uIGFjdGlvbjsKKy8vICAgICAgICBhY3Rpb24uc2Ffc2lnYWN0aW9uID0ganNj
U2lnbmFsSGFuZGxlcjsKKy8vICAgICAgICBhdXRvIHJlc3VsdCA9IHNpZ2ZpbGxzZXQoJmFjdGlv
bi5zYV9tYXNrKTsKKy8vICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmVzdWx0KTsKKy8vICAgICAg
ICBhY3Rpb24uc2FfZmxhZ3MgPSBTQV9TSUdJTkZPOworLy8gICAgICAgIHJlc3VsdCA9IHNpZ2Fj
dGlvbih0b1N5c3RlbVNpZ25hbChzaWduYWwpLCAmYWN0aW9uLCAmb2xkQWN0aW9uc1tzdGF0aWNf
Y2FzdDxzaXplX3Q+KHNpZ25hbCldKTsKKy8vICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmVzdWx0
KTsKKy8vICAgIH0pOworLy8KKy8vICAgIGhhbmRsZXJzW3N0YXRpY19jYXN0PHNpemVfdD4oc2ln
bmFsKV0tPmFkZChXVEZNb3ZlKGhhbmRsZXIpKTsKKy8vfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGhyZWFkcy9TaWduYWxzLmggYi9Tb3VyY2Uv
V1RGL3d0Zi90aHJlYWRzL1NpZ25hbHMuaAppbmRleCAxZTRlYjQ2ZWFhNzc0YTFlZTg5ZjZmYjJk
YWVmMzMyNjhjZTU2Nzc5Li5iMDcyYTkxNmVmMzAzMTg0ZTVmMGU3MTIwYWRmYjk5ZjEwZWFjYWZl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90aHJlYWRzL1NpZ25hbHMuaAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi90aHJlYWRzL1NpZ25hbHMuaApAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVk
ZSA8c2lnbmFsLmg+CiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1Bs
YXRmb3JtUmVnaXN0ZXJzLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCkBAIC03OSw3ICs4MCwxMSBA
QCBlbnVtIGNsYXNzIFNpZ25hbEFjdGlvbiB7CiAgICAgRm9yY2VEZWZhdWx0CiB9OwogCi11c2lu
ZyBTaWduYWxIYW5kbGVyID0gRnVuY3Rpb248U2lnbmFsQWN0aW9uKGludCwgc2lnaW5mb190Kiwg
dm9pZCopPjsKK3N0cnVjdCBTaWdJbmZvIHsKKyAgICB2b2lkKiBmYXVsdGluZ0FkZHJlc3MgeyAw
IH07Cit9OworCit1c2luZyBTaWduYWxIYW5kbGVyID0gRnVuY3Rpb248U2lnbmFsQWN0aW9uKFNp
Z25hbCwgU2lnSW5mbyYsIFBsYXRmb3JtUmVnaXN0ZXJzJik+OwogCiAvLyBDYWxsIHRoaXMgbWV0
aG9kIHdoZW5ldmVyIHlvdSB3YW50IHRvIGluc3RhbGwgYSBzaWduYWwgaGFuZGxlci4gSXQncyBv
ayB0byBjYWxsIHRoaXMgZnVuY3Rpb24gbGF6aWx5LgogLy8gTm90ZTogWW91ciBzaWduYWwgaGFu
ZGxlciB3aWxsIGJlIGNhbGxlZCBldmVyeSB0aW1lIHRoZSBoYW5kbGVyIGZvciB0aGUgZGVzaXJl
ZCBzaWduYWwgaXMgY2FsbGVkLgpAQCAtODcsOSArOTIsMTcgQEAgdXNpbmcgU2lnbmFsSGFuZGxl
ciA9IEZ1bmN0aW9uPFNpZ25hbEFjdGlvbihpbnQsIHNpZ2luZm9fdCosIHZvaWQqKT47CiAvLyBU
aGlzIGZ1bmN0aW9uIGlzIGN1cnJlbnRseSBhIG9uZSB3YXkgc3RyZWV0IGkuZS4gb25jZSBpbnN0
YWxsZWQsIGEgc2lnbmFsIGhhbmRsZXIgY2Fubm90IGJlIHVuaW5zdGFsbGVkLgogdm9pZCBpbnN0
YWxsU2lnbmFsSGFuZGxlcihTaWduYWwsIFNpZ25hbEhhbmRsZXImJik7CiAKKworI2lmIE9TKERB
UldJTikKK2NsYXNzIFRocmVhZDsKK3ZvaWQgcmVnaXN0ZXJUaHJlYWQoVGhyZWFkKik7Cit2b2lk
IHJlbW92ZVRocmVhZChUaHJlYWQqKTsKKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAog
dXNpbmcgV1RGOjpTaWduYWw7Cit1c2luZyBXVEY6OlNpZ0luZm87CiB1c2luZyBXVEY6OnRvU3lz
dGVtU2lnbmFsOwogdXNpbmcgV1RGOjpmcm9tU3lzdGVtU2lnbmFsOwogdXNpbmcgV1RGOjpTaWdu
YWxBY3Rpb247Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309673</attachid>
            <date>2017-05-10 18:41:05 -0700</date>
            <delta_ts>2017-05-10 20:05:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171865-20170510184104.patch</filename>
            <type>text/plain</type>
            <size>44064</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE2MTY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
MDcyZWVhOGJiODc4NzUzMmU1NGMyODRhYzA4OWNmZjIwYzdhM2EyLi43ZDYwYjA0MGFjMThlMjEw
NDEyNWQ4YjA2ZTI4MzFlZDZiZmFhNmMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzOSBAQAorMjAxNy0wNS0xMCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBVc2UgTWFjaCBleGNlcHRpb25zIGluc3RlYWQgb2Ygc2lnbmFscyB3
aGVyZSBwb3NzaWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTcxODY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhpcyBwYXRjaCBhZGRzIHNvbWUgbmV3IEpTQyBvcHRpb25zLiBUaGUgZmlyc3QgaXMg
YSBmdW5jdGlvbiB0aGF0CisgICAgICAgIGVuYWJsZXMgb3IgZGlzYWJsZXMgd2ViIGFzc2VtYmx5
IHRpZXIgdXAuIFRoZSBzZWNvbmQgY29udHJvbHMKKyAgICAgICAgd2hldGhlciBvciBub3Qgd2Ug
dXNlIG1hY2ggZXhjZXB0aW9ucyAod2hlcmUgYXZhaWxhYmxlKS4KKworICAgICAgICAqIEFQSS90
ZXN0cy9FeGVjdXRpb25UaW1lTGltaXRUZXN0LmNwcDoKKyAgICAgICAgKGRpc3BhdGNoVGVybWl0
YXRlQ2FsbGJhY2spOgorICAgICAgICAodGVzdEV4ZWN1dGlvblRpbWVMaW1pdCk6CisgICAgICAg
ICogcnVudGltZS9PcHRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6cmVjb21wdXRlRGVwZW5kZW50
T3B0aW9ucyk6CisgICAgICAgIChKU0M6Ok9wdGlvbnM6OmluaXRpYWxpemUpOgorICAgICAgICAq
IHJ1bnRpbWUvT3B0aW9ucy5oOgorICAgICAgICAqIHJ1bnRpbWUvVk1UcmFwcy5jcHA6CisgICAg
ICAgIChKU0M6OlNpZ25hbENvbnRleHQ6OlNpZ25hbENvbnRleHQpOgorICAgICAgICAoSlNDOjpT
aWduYWxDb250ZXh0OjphZGp1c3RQQ1RvUG9pbnRUb1RyYXBwaW5nSW5zdHJ1Y3Rpb24pOgorICAg
ICAgICAoSlNDOjppbnN0YWxsU2lnbmFsSGFuZGxlcik6CisgICAgICAgIChKU0M6OlZNVHJhcHM6
OlNpZ25hbFNlbmRlcjo6c2VuZCk6CisgICAgICAgICogdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXpl
ci5jcHA6CisgICAgICAgIChKU0M6OlNpZ25hbENvbnRleHQ6OlNpZ25hbENvbnRleHQpOgorICAg
ICAgICAoSlNDOjpTaWduYWxDb250ZXh0OjpkdW1wKToKKyAgICAgICAgKEpTQzo6aW5zdGFsbENy
YXNoSGFuZGxlcik6CisgICAgICAgICogd2FzbS9XYXNtQkJRUGxhbi5jcHA6CisgICAgICAgIChK
U0M6Oldhc206OkJCUVBsYW46OmNvbXBpbGVGdW5jdGlvbnMpOgorICAgICAgICAqIHdhc20vV2Fz
bUZhdWx0U2lnbmFsSGFuZGxlci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OnRyYXBIYW5kbGVy
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6ZW5hYmxlRmFzdE1lbW9yeSk6CisgICAgICAgICogd2Fz
bS9XYXNtTWFjaGluZVRocmVhZHMuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpzdGFydFRyYWNr
aW5nQ3VycmVudFRocmVhZCk6CisgICAgICAgIChKU0M6Oldhc206OnJlc2V0SW5zdHJ1Y3Rpb25D
YWNoZU9uQWxsVGhyZWFkcyk6CisKIDIwMTctMDUtMDMgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21p
bGxlckBhcHBsZS5jb20+CiAKICAgICAgICAgQXJyYXkucHJvdG90eXBlLnNvcnQgc2hvdWxkIGFs
c28gYWxsb3cgYSBudWxsIGNvbXBhcmF0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdl
TG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggMWFjZWNmYTQyYTYxZmU1Yzc4OTAzM2Jk
NzIxMzU1ZDRhMmRlODU2OC4uYjZiYzkxNWRlOGRkMTQ4ZjE2OTU2NzIyNTliZTU1ZTc2OWY5Njlm
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw1MyBAQAorMjAxNy0wNS0xMCAgS2VpdGggTWlsbGVyICA8a2VpdGhf
bWlsbGVyQGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgTWFjaCBleGNlcHRpb25zIGluc3RlYWQg
b2Ygc2lnbmFscyB3aGVyZSBwb3NzaWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTcxODY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBlbmFibGVzIHVzaW5nIG1hY2ggZXhjZXB0aW9u
cyBvbiBkYXJ3aW4uIFRoZSB3YXkgdGhlCisgICAgICAgIG1hY2ggZXhjZXB0aW9uIGFwaSB3b3Jr
cyBpcyB0aGF0IHdlIGNyZWF0ZSBhIG1hY2ggcG9ydCwgd2hpY2ggaXMKKyAgICAgICAgbGlrZSBh
IGZpbGUgZGVzY3JpcHRvci4gIFdlIHRoZW4gd2FpdCBmb3IgYSBtZXNzYWdlIHRvIGFycml2ZSBv
bgorICAgICAgICB0aGF0IHBvcnQgaW4gYSB0aHJlYWQuIFdoZW4gYW5vdGhlciB0aHJlYWQgcmFp
c2VzIGEgZXhjZXB0aW9uIChzYXkKKyAgICAgICAgZHVlIHRvIGEgYmFkIG1lbW9yeSBhY2Nlc3Mp
IHRoZSBPUyBzZW5kcyBvdXIgdGhyZWFkIGEgbWVzc2FnZS4gVGhlCisgICAgICAgIHBheWxvYWQg
b2YgdGhhdCBtZXNzYWdlIGlzIHRoZSByZWdpc3RlciBmaWxlIG9mIHRoZSBjcmFzaGluZworICAg
ICAgICB0aHJlYWQuIFdlIHRoZW4gY2FsbCBvdXIgY3VzdG9tIGhhbmRsZXJzIHRoYXQgY2hhbmdl
IHRoZSBzdGF0ZSBhcworICAgICAgICBuZWVkZWQuIEluIG9yZGVyIHRvIHJlc3RhcnQgdGhlIHRo
cmVhZCB3ZSBzZW5kIGEgcGF5bG9hZCBiYWNrIHRvCisgICAgICAgIHRoZSBPUyB3aXRoIGFuIHVw
ZGF0ZWQgcmVnaXN0ZXIgZmlsZSBhbG9uZyB3aXRoIGEgc3VjY2VzcyBtZXNzYWdlCisgICAgICAg
IGhlYWRlci4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gbWFrZXMgdGhyZWFkIG1lc3NhZ2Vz
IHdvcmsgd2l0aG91dCBzaWduYWxzIGJ5CisgICAgICAgIHNpbXBseSBzdXNwZW5kaW5nIHRoZSB0
aHJlYWQgdGhlbiBydW5uaW5nIHRoZSBtZXNzYWdlIGF0IHRoYXQKKyAgICAgICAgdGltZS4KKwor
ICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9T
dGFja0JvdW5kcy5oOgorICAgICAgICAoV1RGOjpTdGFja0JvdW5kczo6U3RhY2tCb3VuZHMpOgor
ICAgICAgICAqIHd0Zi9UaHJlYWRNZXNzYWdlLmNwcDoKKyAgICAgICAgKFdURjo6c2VuZE1lc3Nh
Z2VTaWduYWwpOgorICAgICAgICAoV1RGOjpzZW5kTWVzc2FnZU1hY2gpOgorICAgICAgICAoV1RG
OjpkZWxpdmVyTWVzc2FnZXNVc2luZ01hY2gpOgorICAgICAgICAoV1RGOjpzZW5kTWVzc2FnZVNj
b3BlZCk6CisgICAgICAgICogd3RmL1RocmVhZE1lc3NhZ2UuaDoKKyAgICAgICAgKFdURjo6c2Vu
ZE1lc3NhZ2UpOgorICAgICAgICAqIHd0Zi9UaHJlYWRpbmcuaDoKKyAgICAgICAgKFdURjo6VGhy
ZWFkOjptYWNoVGhyZWFkKToKKyAgICAgICAgKiB3dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwOgor
ICAgICAgICAoV1RGOjpUaHJlYWQ6On5UaHJlYWQpOgorICAgICAgICAqIHd0Zi9tYWMvTWFjaEV4
Y2VwdGlvbnMuZGVmczogQ29waWVkIGZyb20gU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5o
LgorICAgICAgICAqIHd0Zi90aHJlYWRzL1NpZ25hbHMuY3BwOgorICAgICAgICAoV1RGOjpzdGFy
dE1hY2hFeGNlcHRpb25IYW5kbGVyVGhyZWFkKToKKyAgICAgICAgKFdURjo6ZnJvbU1hY2hFeGNl
cHRpb24pOgorICAgICAgICAoV1RGOjp0b01hY2hNYXNrKToKKyAgICAgICAgKFdURjo6c2V0RXhj
ZXB0aW9uUG9ydHMpOgorICAgICAgICAoV1RGOjphY3RpdmVUaHJlYWRzKToKKyAgICAgICAgKFdU
Rjo6cmVnaXN0ZXJUaHJlYWQpOgorICAgICAgICAoV1RGOjpyZW1vdmVUaHJlYWQpOgorICAgICAg
ICAoV1RGOjpoYW5kbGVTaWduYWxzV2l0aE1hY2gpOgorICAgICAgICAoV1RGOjppbnN0YWxsU2ln
bmFsSGFuZGxlcik6CisgICAgICAgIChXVEY6OmpzY1NpZ25hbEhhbmRsZXIpOgorICAgICAgICAq
IHd0Zi90aHJlYWRzL1NpZ25hbHMuaDoKKwogMjAxNy0wNS0wMyAgTWFyayBMYW0gIDxtYXJrLmxh
bUBhcHBsZS5jb20+CiAKICAgICAgICAgVXNlIHRoZSBDTG9vcCBmb3IgQ1BVKEFSTTY0RSkuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0V4ZWN1dGlvblRpbWVM
aW1pdFRlc3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9FeGVjdXRpb25U
aW1lTGltaXRUZXN0LmNwcAppbmRleCBkNWU1MzI0M2I3OGRmNzUxMzQyYWQ4ZDM5MGE0YjA0MTNk
OWVlZjllLi43ZWFjMDczMDlkZGMzZjE2NDk0NTBiZDAzNzlkMmNhMThmMDE2OWFhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0V4ZWN1dGlvblRpbWVMaW1pdFRl
c3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvRXhlY3V0aW9uVGlt
ZUxpbWl0VGVzdC5jcHAKQEAgLTMwLDggKzMwLDEzIEBACiAjaW5jbHVkZSAiSlNDb250ZXh0UmVm
UHJpdmF0ZS5oIgogI2luY2x1ZGUgIkphdmFTY3JpcHRDb3JlLmgiCiAjaW5jbHVkZSAiT3B0aW9u
cy5oIgorCiAjaW5jbHVkZSA8Y2hyb25vPgorI2luY2x1ZGUgPGRpc3BhdGNoL2Rpc3BhdGNoLmg+
CisjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KKyNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+CiAj
aW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ6OmNo
cm9ubzsKQEAgLTc3LDYgKzgyLDEzIEBAIHN0YXRpYyBib29sIGV4dGVuZFRlcm1pbmF0ZUNhbGxi
YWNrKEpTQ29udGV4dFJlZiBjdHgsIHZvaWQqKQogICAgIHJldHVybiB0cnVlOwogfQogCitib29s
IGRpc3BhdGNoVGVybWluYXRlQ2FsbGJhY2tDYWxsZWQgPSBmYWxzZTsKK3N0YXRpYyBib29sIGRp
c3BhdGNoVGVybWl0YXRlQ2FsbGJhY2soSlNDb250ZXh0UmVmLCB2b2lkKikKK3sKKyAgICBkaXNw
YXRjaFRlcm1pbmF0ZUNhbGxiYWNrQ2FsbGVkID0gdHJ1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kwogc3RydWN0IFRpZXJPcHRpb25zIHsKICAgICBjb25zdCBjaGFyKiB0aWVyOwogICAgIHVuc2ln
bmVkIHRpbWVMaW1pdEFkanVzdG1lbnRNaWxsaXM7CkBAIC0zNjUsNiArMzc3LDYzIEBAIGludCB0
ZXN0RXhlY3V0aW9uVGltZUxpbWl0KCkKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCisgICAg
ICAgIC8qIFRlc3Qgc2NyaXB0IHRpbWVvdXQgZnJvbSBkaXNwYXRjaCBxdWV1ZTogKi8KKyAgICAg
ICAgdGltZUxpbWl0ID0gKDEwMCArIHRpZXJBZGp1c3RtZW50TWlsbGlzKSAvIDEwMDAuMDsKKyAg
ICAgICAgSlNDb250ZXh0R3JvdXBTZXRFeGVjdXRpb25UaW1lTGltaXQoY29udGV4dEdyb3VwLCB0
aW1lTGltaXQsIGRpc3BhdGNoVGVybWl0YXRlQ2FsbGJhY2ssIDApOworICAgICAgICB7CisgICAg
ICAgICAgICB1bnNpZ25lZCB0aW1lQWZ0ZXJXYXRjaGRvZ1Nob3VsZEhhdmVGaXJlZCA9IDMwMCAr
IHRpZXJBZGp1c3RtZW50TWlsbGlzOworCisgICAgICAgICAgICBTdHJpbmdCdWlsZGVyIHNjcmlw
dEJ1aWxkZXI7CisgICAgICAgICAgICBzY3JpcHRCdWlsZGVyLmFwcGVuZExpdGVyYWwoImZ1bmN0
aW9uIGZvbygpIHsgdmFyIHN0YXJ0VGltZSA9IGN1cnJlbnRDUFVUaW1lKCk7IHdoaWxlICh0cnVl
KSB7IGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDsgaSsrKTsgaWYgKGN1cnJlbnRDUFVUaW1lKCkg
LSBzdGFydFRpbWUgPiAiKTsKKyAgICAgICAgICAgIHNjcmlwdEJ1aWxkZXIuYXBwZW5kTnVtYmVy
KHRpbWVBZnRlcldhdGNoZG9nU2hvdWxkSGF2ZUZpcmVkIC8gMTAwMC4wKTsKKyAgICAgICAgICAg
IHNjcmlwdEJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiKSBicmVhazsgfSB9IGZvbygpOyIpOworCisg
ICAgICAgICAgICBKU1N0cmluZ1JlZiBzY3JpcHQgPSBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZyhzY3JpcHRCdWlsZGVyLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAg
ICBleGNlcHRpb24gPSBudWxscHRyOworICAgICAgICAgICAgZGlzcGF0Y2hUZXJtaW5hdGVDYWxs
YmFja0NhbGxlZCA9IGZhbHNlOworCisgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGRvIHRoaXMg
c2luY2UgYmxvY2tzIGNhbiBvbmx5IGNhcHR1cmUgdGhpbmdzIGFzIGNvbnN0LgorICAgICAgICAg
ICAgSlNHbG9iYWxDb250ZXh0UmVmJiBjb250ZXh0UmVmID0gY29udGV4dDsKKyAgICAgICAgICAg
IEpTU3RyaW5nUmVmJiBzY3JpcHRSZWYgPSBzY3JpcHQ7CisgICAgICAgICAgICBKU1ZhbHVlUmVm
JiBleGNlcHRpb25SZWYgPSBleGNlcHRpb247CisKKyAgICAgICAgICAgIExvY2sgc3luY0xvY2s7
CisgICAgICAgICAgICBMb2NrJiBzeW5jTG9ja1JlZiA9IHN5bmNMb2NrOworICAgICAgICAgICAg
Q29uZGl0aW9uIHN5bmNocm9uaXplOworICAgICAgICAgICAgQ29uZGl0aW9uJiBzeW5jaHJvbml6
ZVJlZiA9IHN5bmNocm9uaXplOworICAgICAgICAgICAgYm9vbCBkaWRTeW5jaHJvbml6ZSA9IGZh
bHNlOworICAgICAgICAgICAgYm9vbCYgZGlkU3luY2hyb25pemVSZWYgPSBkaWRTeW5jaHJvbml6
ZTsKKworICAgICAgICAgICAgc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcyBzdGFydFRpbWU7Cisg
ICAgICAgICAgICBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzIGVuZFRpbWU7CisKKyAgICAgICAg
ICAgIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMmIHN0YXJ0VGltZVJlZiA9IHN0YXJ0VGltZTsK
KyAgICAgICAgICAgIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMmIGVuZFRpbWVSZWYgPSBlbmRU
aW1lOworCisgICAgICAgICAgICBkaXNwYXRjaF9ncm91cF90IGdyb3VwID0gZGlzcGF0Y2hfZ3Jv
dXBfY3JlYXRlKCk7CisgICAgICAgICAgICBkaXNwYXRjaF9ncm91cF9hc3luYyhncm91cCwgZGlz
cGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZSgwLCAwKSwgXnsKKyAgICAgICAgICAgICAgICBzdGFydFRp
bWVSZWYgPSBjdXJyZW50Q1BVVGltZSgpOworICAgICAgICAgICAgICAgIEpTRXZhbHVhdGVTY3Jp
cHQoY29udGV4dFJlZiwgc2NyaXB0UmVmLCBudWxscHRyLCBudWxscHRyLCAxLCAmZXhjZXB0aW9u
UmVmKTsKKyAgICAgICAgICAgICAgICBlbmRUaW1lUmVmID0gY3VycmVudENQVVRpbWUoKTsKKyAg
ICAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IFdURjo6aG9sZExvY2soc3luY0xvY2tSZWYpOwor
ICAgICAgICAgICAgICAgIGRpZFN5bmNocm9uaXplUmVmID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICBzeW5jaHJvbml6ZVJlZi5ub3RpZnlBbGwoKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAg
ICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHN5bmNMb2NrKTsKKyAgICAgICAgICAgIHN5bmNo
cm9uaXplLndhaXQoc3luY0xvY2ssIFsmXSB7IHJldHVybiBkaWRTeW5jaHJvbml6ZTsgfSk7CisK
KyAgICAgICAgICAgIGlmICgoKGVuZFRpbWUgLSBzdGFydFRpbWUpIDwgbWlsbGlzZWNvbmRzKHRp
bWVBZnRlcldhdGNoZG9nU2hvdWxkSGF2ZUZpcmVkKSkgJiYgZGlzcGF0Y2hUZXJtaW5hdGVDYWxs
YmFja0NhbGxlZCkKKyAgICAgICAgICAgICAgICBwcmludGYoIlBBU1M6ICVzIHNjcmlwdCBvbiBk
aXNwYXRjaCBxdWV1ZSB0aW1lZCBvdXQgYXMgZXhwZWN0ZWQuXG4iLCB0aWVyT3B0aW9ucy50aWVy
KTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlmICgoZW5kVGltZSAtIHN0
YXJ0VGltZSkgPj0gbWlsbGlzZWNvbmRzKHRpbWVBZnRlcldhdGNoZG9nU2hvdWxkSGF2ZUZpcmVk
KSkKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJGQUlMOiAlcyBzY3JpcHQgb24gZGlzcGF0
Y2ggcXVldWUgZGlkIG5vdCB0aW1lIG91dCBhcyBleHBlY3RlZC5cbiIsIHRpZXJPcHRpb25zLnRp
ZXIpOworICAgICAgICAgICAgICAgIGlmICghc2hvdWxkVGVybWluYXRlQ2FsbGJhY2tXYXNDYWxs
ZWQpCisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiRkFJTDogJXMgc2NyaXB0IG9uIGRpc3Bh
dGNoIHF1ZXVlIHRpbWVvdXQgY2FsbGJhY2sgd2FzIG5vdCBjYWxsZWQuXG4iLCB0aWVyT3B0aW9u
cy50aWVyKTsKKyAgICAgICAgICAgICAgICBmYWlsZWQgPSB0cnVlOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKICAgICAgICAgSlNHbG9iYWxDb250ZXh0UmVsZWFzZShjb250ZXh0KTsKIAog
ICAgICAgICBPcHRpb25zOjpzZXRPcHRpb25zKHNhdmVkT3B0aW9uc0J1aWxkZXIudG9TdHJpbmco
KS5hc2NpaSgpLmRhdGEoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0xvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNw
cAppbmRleCBjMTc1YWUwYzQ4MmVkMjdiZDVmNmJkYzg3OTY4ZTc1ZDQ1YWY1MGVmLi5mNTcxZGRi
Y2NiYTk2MDFiZjZiMTE0YTdkNjJhYWNlNDYzY2I3ZDhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTG9jay5jcHAKQEAgLTMwLDYgKzMwLDggQEAKICNpbmNsdWRlICJTYW1wbGlu
Z1Byb2ZpbGVyLmgiCiAjaW5jbHVkZSAiV2FzbU1hY2hpbmVUaHJlYWRzLmgiCiAjaW5jbHVkZSA8
dGhyZWFkPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGhyZWFk
cy9TaWduYWxzLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0xNDgsNiArMTUwLDggQEAgdm9p
ZCBKU0xvY2s6OmRpZEFjcXVpcmVMb2NrKCkKICAgICBXYXNtOjpzdGFydFRyYWNraW5nQ3VycmVu
dFRocmVhZCgpOwogI2VuZGlmCiAKKyAgICBXVEY6OnJlZ2lzdGVyVGhyZWFkKCZUaHJlYWQ6OmN1
cnJlbnQoKSk7CisKICAgICBtX3ZtLT50cmFwcygpLm5vdGlmeUdyYWJBbGxMb2NrcygpOwogCiAj
aWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PcHRpb25zLmNwcAppbmRleCBiMDRkZTM1YTUzNjE1MDg0Mzg1NzVjMjI3YTUwMTRkZDBjNTFi
YWEyLi40MzEzZTI0NGNlOTBiMTJjYzMzNDZkN2I1ZWQzY2Y3OWMwMDRhZWE4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcApAQCAtNDMsNiArNDMsNyBAQAogI2lu
Y2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0Zi90aHJl
YWRzL1NpZ25hbHMuaD4KIAogI2lmIFBMQVRGT1JNKENPQ09BKQogI2luY2x1ZGUgPGNydF9leHRl
cm5zLmg+CkBAIC00ODYsNiArNDg3LDcgQEAgc3RhdGljIHZvaWQgcmVjb21wdXRlRGVwZW5kZW50
T3B0aW9ucygpCiAKICAgICBpZiAoT3B0aW9uczo6dXNlU2lnaWxsQ3Jhc2hBbmFseXplcigpKQog
ICAgICAgICBlbmFibGVTaWdpbGxDcmFzaEFuYWx5emVyKCk7CisKIH0KIAogdm9pZCBPcHRpb25z
Ojppbml0aWFsaXplKCkKQEAgLTU0NSw2ICs1NDcsOSBAQCB2b2lkIE9wdGlvbnM6OmluaXRpYWxp
emUoKQogCiAgICAgICAgICAgICBkdW1wT3B0aW9uc0lmTmVlZGVkKCk7CiAgICAgICAgICAgICBl
bnN1cmVPcHRpb25zQXJlQ29oZXJlbnQoKTsKKworICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnVz
ZU1hY2hGb3JFeGNlcHRpb25zKCkpCisgICAgICAgICAgICAgICAgV1RGOjpoYW5kbGVTaWduYWxz
V2l0aE1hY2goKTsKICAgICAgICAgfSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wdGlvbnMuaAppbmRleCBkNjcyNGM1YTdjZDZjMGIzNTdjNDk5N2IzYWUyOWY1NWQ1ZGIzZjJi
Li4zYmUxY2EzMTM5NDRlYzRhYWM2N2ZkNzRkZjAxMmQ1ZGRlMzczZjI3IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCkBAIC00MTQsNiArNDE0LDggQEAgdHlwZWRlZiBj
b25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAgdih1bnNpZ25lZCwgd2F0Y2hkb2csIDAsIE5v
cm1hbCwgIndhdGNoZG9nIHRpbWVvdXQgKDAgPSBEaXNhYmxlZCwgTiA9IGEgdGltZW91dCBwZXJp
b2Qgb2YgTiBtaWxsaXNlY29uZHMpIikgXAogICAgIHYoYm9vbCwgdXNlUG9sbGluZ1RyYXBzLCBm
YWxzZSwgTm9ybWFsLCAidXNlIHBvbGxpbmcgKGluc3RlYWQgb2Ygc2lnbmFsbGluZykgVk0gdHJh
cHMiKSBcCiAgICAgXAorICAgIHYoYm9vbCwgdXNlTWFjaEZvckV4Y2VwdGlvbnMsIHRydWUsIE5v
cm1hbCwgIlVzZSBtYWNoIGV4Y2VwdGlvbnMgcmF0aGVyIHRoYW4gc2lnbmFscyB0byBoYW5kbGUg
ZmF1bHRzIGFuZCBwYXNzIHRocmVhZCBtZXNzYWdlcy4gKFRoaXMgZG9lcyBub3RoaW5nIG9uIHBs
YXRmb3JtcyB3aXRob3V0IG1hY2gpIikgXAorICAgIFwKICAgICB2KGJvb2wsIHVzZUlDU3RhdHMs
IGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICBcCiAgICAgdih1bnNpZ25lZCwgcHJvdG90
eXBlSGl0Q291bnRGb3JMTEludENhY2hpbmcsIDIsIE5vcm1hbCwgIk51bWJlciBvZiBwcm90b3R5
cGUgcHJvcGVydHkgaGl0cyBiZWZvcmUgY2FjaGluZyBhIHByb3RvdHlwZSBpbiB0aGUgTExJbnQu
IEEgY291bnQgb2YgMCBtZWFucyBuZXZlciBjYWNoZS4iKSBcCkBAIC00MzcsNiArNDM5LDcgQEAg
dHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAgdih1bnNpZ25lZCwgd2ViQXNz
ZW1ibHlCQlFPcHRpbWl6YXRpb25MZXZlbCwgMSwgTm9ybWFsLCAiQjMgT3B0aW1pemF0aW9uIGxl
dmVsIGZvciBCQlEgV2ViIEFzc2VtYmx5IG1vZHVsZSBjb21waWxhdGlvbnMuIikgXAogICAgIHYo
dW5zaWduZWQsIHdlYkFzc2VtYmx5T01HT3B0aW1pemF0aW9uTGV2ZWwsIE9wdGlvbnM6OmRlZmF1
bHRCM09wdExldmVsKCksIE5vcm1hbCwgIkIzIE9wdGltaXphdGlvbiBsZXZlbCBmb3IgT01HIFdl
YiBBc3NlbWJseSBtb2R1bGUgY29tcGlsYXRpb25zLiIpIFwKICAgICBcCisgICAgdihib29sLCB1
c2VCQlFUaWVyVXBDaGVja3MsIHRydWUsIE5vcm1hbCwgIkVuYWJsZXMgdGllciB1cCBjaGVja3Mg
Zm9yIG91ciBCQlEgY29kZS4iKSBcCiAgICAgdih1bnNpZ25lZCwgd2ViQXNzZW1ibHlPTUdUaWVy
VXBDb3VudCwgNTAwMCwgTm9ybWFsLCAiVGhlIGNvdW50ZG93biBiZWZvcmUgd2UgdGllciB1cCBh
IGZ1bmN0aW9uIHRvIE9NRy4iKSBcCiAgICAgdih1bnNpZ25lZCwgd2ViQXNzZW1ibHlMb29wRGVj
cmVtZW50LCAxNSwgTm9ybWFsLCAiVGhlIGFtb3VudCB0aGUgdGllciB1cCBjb3VudGRvd24gaXMg
ZGVjcmVtZW50ZWQgb24gZWFjaCBsb29wIGJhY2tlZGdlLiIpIFwKICAgICB2KHVuc2lnbmVkLCB3
ZWJBc3NlbWJseUZ1bmN0aW9uRW50cnlEZWNyZW1lbnQsIDEsIE5vcm1hbCwgIlRoZSBhbW91bnQg
dGhlIHRpZXIgdXAgY291bnRkb3duIGlzIGRlY3JlbWVudGVkIG9uIGVhY2ggZnVuY3Rpb24gZW50
cnkuIikgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFw
cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcAppbmRleCAx
YmFhY2U2MDQ0ZTY2MGE4ZTU0NDFmYmFkMDE4ZWE5MDkzMWE0YzkxLi4xMGQ3ODJhOGRjNDlhNWVk
YTA4MWQ3M2Q2ODNkZmZlMTZmOGM4ZjQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTVRyYXBzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTVRyYXBzLmNwcApAQCAtNTMsMTEgKzUzLDExIEBAIEFMV0FZU19JTkxJTkUgVk0mIFZNVHJh
cHM6OnZtKCkgY29uc3QKICNpZiBFTkFCTEUoU0lHTkFMX0JBU0VEX1ZNX1RSQVBTKQogCiBzdHJ1
Y3QgU2lnbmFsQ29udGV4dCB7Ci0gICAgU2lnbmFsQ29udGV4dChtY29udGV4dF90JiBtY29udGV4
dCkKLSAgICAgICAgOiBtY29udGV4dChtY29udGV4dCkKLSAgICAgICAgLCB0cmFwUEMoTWFjaGlu
ZUNvbnRleHQ6Omluc3RydWN0aW9uUG9pbnRlcihtY29udGV4dCkpCi0gICAgICAgICwgc3RhY2tQ
b2ludGVyKE1hY2hpbmVDb250ZXh0OjpzdGFja1BvaW50ZXIobWNvbnRleHQpKQotICAgICAgICAs
IGZyYW1lUG9pbnRlcihNYWNoaW5lQ29udGV4dDo6ZnJhbWVQb2ludGVyKG1jb250ZXh0KSkKKyAg
ICBTaWduYWxDb250ZXh0KFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMpCisgICAgICAgIDog
Y29udGV4dChyZWdpc3RlcnMpCisgICAgICAgICwgdHJhcFBDKE1hY2hpbmVDb250ZXh0OjppbnN0
cnVjdGlvblBvaW50ZXIoY29udGV4dCkpCisgICAgICAgICwgc3RhY2tQb2ludGVyKE1hY2hpbmVD
b250ZXh0OjpzdGFja1BvaW50ZXIoY29udGV4dCkpCisgICAgICAgICwgZnJhbWVQb2ludGVyKE1h
Y2hpbmVDb250ZXh0OjpmcmFtZVBvaW50ZXIoY29udGV4dCkpCiAgICAgewogI2lmIENQVShYODZf
NjQpIHx8IENQVShYODYpCiAgICAgICAgIC8vIE9uIFg4Nl82NCwgU0lHVFJBUCByZXBvcnRzIHRo
ZSBhZGRyZXNzIGFmdGVyIHRoZSB0cmFwcGluZyBQQy4gU28sIGRlYyBieSAxLgpAQCAtNjgsMTEg
KzY4LDExIEBAIHN0cnVjdCBTaWduYWxDb250ZXh0IHsKICAgICB2b2lkIGFkanVzdFBDVG9Qb2lu
dFRvVHJhcHBpbmdJbnN0cnVjdGlvbigpCiAgICAgewogI2lmIENQVShYODZfNjQpIHx8IENQVShY
ODYpCi0gICAgICAgIE1hY2hpbmVDb250ZXh0OjppbnN0cnVjdGlvblBvaW50ZXIobWNvbnRleHQp
ID0gdHJhcFBDOworICAgICAgICBNYWNoaW5lQ29udGV4dDo6aW5zdHJ1Y3Rpb25Qb2ludGVyKGNv
bnRleHQpID0gdHJhcFBDOwogI2VuZGlmCiAgICAgfQogCi0gICAgbWNvbnRleHRfdCYgbWNvbnRl
eHQ7CisgICAgUGxhdGZvcm1SZWdpc3RlcnMmIGNvbnRleHQ7CiAgICAgdm9pZCogdHJhcFBDOwog
ICAgIHZvaWQqIHN0YWNrUG9pbnRlcjsKICAgICB2b2lkKiBmcmFtZVBvaW50ZXI7CkBAIC0xMzAs
MTEgKzEzMCwxMyBAQCBzdGF0aWMgRXhwZWN0ZWQ8Vk1BbmRTdGFja0JvdW5kcywgVk1UcmFwczo6
RXJyb3I+IGZpbmRBY3RpdmVWTUFuZFN0YWNrQm91bmRzKFNpZwogCiBzdGF0aWMgdm9pZCBpbnN0
YWxsU2lnbmFsSGFuZGxlcigpCiB7Ci0gICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFsOjpU
cmFwLCBbXSAoaW50LCBzaWdpbmZvX3QqLCB2b2lkKiB1YXApIC0+IFNpZ25hbEFjdGlvbiB7Ci0g
ICAgICAgIFNpZ25hbENvbnRleHQgY29udGV4dChzdGF0aWNfY2FzdDx1Y29udGV4dF90Kj4odWFw
KS0+dWNfbWNvbnRleHQpOworICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbDo6VHJhcCwg
W10gKFNpZ25hbCwgU2lnSW5mbyYsIFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMpIC0+IFNp
Z25hbEFjdGlvbiB7CisgICAgICAgIFNpZ25hbENvbnRleHQgY29udGV4dChyZWdpc3RlcnMpOwog
Ci0gICAgICAgIGlmICghaXNKSVRQQyhjb250ZXh0LnRyYXBQQykpCisgICAgICAgIGlmICghaXNK
SVRQQyhjb250ZXh0LnRyYXBQQykpIHsKKyAgICAgICAgICAgIGRhdGFMb2dMbigidHJhcHBpbmcg
cGM6ICIsIFJhd1BvaW50ZXIoY29udGV4dC50cmFwUEMpLCAiIGppdCBzdGFydDogIiwgc3RhcnRP
ZkZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2wsICIgaml0IGVuZDogIiwgZW5kT2ZGaXhlZEV4ZWN1
dGFibGVNZW1vcnlQb29sKTsKICAgICAgICAgICAgIHJldHVybiBTaWduYWxBY3Rpb246Ok5vdEhh
bmRsZWQ7CisgICAgICAgIH0KIAogICAgICAgICAvLyBGSVhNRTogVGhpcyBjdXJyZW50bHkgZWF0
cyBhbGwgdHJhcHMgaW5jbHVkaW5nIGppdCBhc3NlcnRzIHdlIHNob3VsZCBtYWtlIHN1cmUgdGhp
cwogICAgICAgICAvLyBhbHdheXMgd29ya3MuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzEwMzkKQEAgLTQwNCw4ICs0MDYsOCBAQCB2b2lkIFZNVHJhcHM6OlNpZ25h
bFNlbmRlcjo6c2VuZCgpCiAgICAgICAgICAgICBWTSYgdm0gPSAqbV92bTsKICAgICAgICAgICAg
IGF1dG8gb3B0aW9uYWxPd25lclRocmVhZCA9IHZtLm93bmVyVGhyZWFkKCk7CiAgICAgICAgICAg
ICBpZiAob3B0aW9uYWxPd25lclRocmVhZCkgewotICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdl
KCpvcHRpb25hbE93bmVyVGhyZWFkLnZhbHVlKCkuZ2V0KCksIFtdIChzaWdpbmZvX3QqLCB1Y29u
dGV4dF90KiB1Y29udGV4dCkgLT4gdm9pZCB7Ci0gICAgICAgICAgICAgICAgICAgIFNpZ25hbENv
bnRleHQgY29udGV4dCh1Y29udGV4dC0+dWNfbWNvbnRleHQpOworICAgICAgICAgICAgICAgIHNl
bmRNZXNzYWdlKCpvcHRpb25hbE93bmVyVGhyZWFkLnZhbHVlKCkuZ2V0KCksIFtdIChQbGF0Zm9y
bVJlZ2lzdGVycyYgcmVnaXN0ZXJzKSAtPiB2b2lkIHsKKyAgICAgICAgICAgICAgICAgICAgU2ln
bmFsQ29udGV4dCBjb250ZXh0KHJlZ2lzdGVycyk7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8g
YWN0aXZlVk1BbmRTdGFja0JvdW5kcyA9IGZpbmRBY3RpdmVWTUFuZFN0YWNrQm91bmRzKGNvbnRl
eHQpOwogICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aXZlVk1BbmRTdGFja0JvdW5kcykgewog
ICAgICAgICAgICAgICAgICAgICAgICAgVk0qIHZtID0gYWN0aXZlVk1BbmRTdGFja0JvdW5kcy52
YWx1ZSgpLnZtOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1NpZ2ls
bENyYXNoQW5hbHl6ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1NpZ2lsbENy
YXNoQW5hbHl6ZXIuY3BwCmluZGV4IDRhZGFlZmYxY2RhMmQxZmJjNmY5MDYxZjA2M2UxNGQyZTYz
MzAwNDguLjcwODY4Yjg2YWZkM2NkNWM3NGU2NTJjY2QwMDNlMjIwMjZkOWI1NTUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9TaWdpbGxDcmFzaEFuYWx5emVyLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAK
QEAgLTc4LDExICs3OCwxMSBAQCBwcml2YXRlOgogI2VuZGlmIC8vIFVTRShPU19MT0cpCiAKIHN0
cnVjdCBTaWduYWxDb250ZXh0IHsKLSAgICBTaWduYWxDb250ZXh0KG1jb250ZXh0X3QmIG1jb250
ZXh0KQotICAgICAgICA6IG1jb250ZXh0KG1jb250ZXh0KQotICAgICAgICAsIG1hY2hpbmVQQyhN
YWNoaW5lQ29udGV4dDo6aW5zdHJ1Y3Rpb25Qb2ludGVyKG1jb250ZXh0KSkKLSAgICAgICAgLCBz
dGFja1BvaW50ZXIoTWFjaGluZUNvbnRleHQ6OnN0YWNrUG9pbnRlcihtY29udGV4dCkpCi0gICAg
ICAgICwgZnJhbWVQb2ludGVyKE1hY2hpbmVDb250ZXh0OjpmcmFtZVBvaW50ZXIobWNvbnRleHQp
KQorICAgIFNpZ25hbENvbnRleHQoUGxhdGZvcm1SZWdpc3RlcnMmIGNvbnRleHQpCisgICAgICAg
IDogY29udGV4dChjb250ZXh0KQorICAgICAgICAsIG1hY2hpbmVQQyhNYWNoaW5lQ29udGV4dDo6
aW5zdHJ1Y3Rpb25Qb2ludGVyKGNvbnRleHQpKQorICAgICAgICAsIHN0YWNrUG9pbnRlcihNYWNo
aW5lQ29udGV4dDo6c3RhY2tQb2ludGVyKGNvbnRleHQpKQorICAgICAgICAsIGZyYW1lUG9pbnRl
cihNYWNoaW5lQ29udGV4dDo6ZnJhbWVQb2ludGVyKGNvbnRleHQpKQogICAgIHsgfQogCiAgICAg
dm9pZCBkdW1wKCkKQEAgLTExMiw3ICsxMTIsNyBAQCBzdHJ1Y3QgU2lnbmFsQ29udGV4dCB7CiAg
ICAgICAgIHYoZ3MpCiAKICNkZWZpbmUgRFVNUF9SRUdJU1RFUihfX3JlZykgXAotICAgICAgICBs
b2coIlJlZ2lzdGVyICIgI19fcmVnICI6ICVwIiwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obWNv
bnRleHQtPl9fc3MuX18jI19fcmVnKSk7CisgICAgICAgIGxvZygiUmVnaXN0ZXIgIiAjX19yZWcg
IjogJXAiLCByZWludGVycHJldF9jYXN0PHZvaWQqPihjb250ZXh0Ll9fIyNfX3JlZykpOwogICAg
ICAgICBGT1JfRUFDSF9SRUdJU1RFUihEVU1QX1JFR0lTVEVSKQogI3VuZGVmIEZPUl9FQUNIX1JF
R0lTVEVSCiAKQEAgLTEzMyw3ICsxMzMsNyBAQCBzdHJ1Y3QgU2lnbmFsQ29udGV4dCB7CiAjZW5k
aWYKICAgICB9CiAKLSAgICBtY29udGV4dF90JiBtY29udGV4dDsKKyAgICBQbGF0Zm9ybVJlZ2lz
dGVycyYgY29udGV4dDsKICAgICB2b2lkKiBtYWNoaW5lUEM7CiAgICAgdm9pZCogc3RhY2tQb2lu
dGVyOwogICAgIHZvaWQqIGZyYW1lUG9pbnRlcjsKQEAgLTE0Miw4ICsxNDIsOCBAQCBzdHJ1Y3Qg
U2lnbmFsQ29udGV4dCB7CiBzdGF0aWMgdm9pZCBpbnN0YWxsQ3Jhc2hIYW5kbGVyKCkKIHsKICNp
ZiBDUFUoWDg2XzY0KSB8fCBDUFUoQVJNNjQpCi0gICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2ln
bmFsOjpJbGwsIFtdIChpbnQsIHNpZ2luZm9fdCosIHZvaWQqIHVhcCkgewotICAgICAgICBTaWdu
YWxDb250ZXh0IGNvbnRleHQoc3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+KHVhcCktPnVjX21jb250
ZXh0KTsKKyAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWw6OklsbCwgW10gKFNpZ25hbCwg
U2lnSW5mbyYsIFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMpIHsKKyAgICAgICAgU2lnbmFs
Q29udGV4dCBjb250ZXh0KHJlZ2lzdGVycyk7CiAKICAgICAgICAgaWYgKCFpc0pJVFBDKGNvbnRl
eHQubWFjaGluZVBDKSkKICAgICAgICAgICAgIHJldHVybiBTaWduYWxBY3Rpb246Ok5vdEhhbmRs
ZWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAKaW5kZXggMWRk
MGNkMWQ4MzVjNmMyZjIzMWIwMGI4ODZkZGU0YWY3MmMyNjNjZS4uYjFiNTk4ZDIwYzVjMDA3N2Q5
ZTlkMDhlMzY4YWQ1Y2ExNzgzMWJhZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUJCUVBsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21CQlFQbGFuLmNwcApAQCAtMjQyLDcgKzI0Miw3IEBAIHZvaWQgQkJRUGxhbjo6Y29tcGlsZUZ1
bmN0aW9ucyhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAgICAgICAgIEFTU0VSVCh2YWxpZGF0
ZUZ1bmN0aW9uKGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIG1fbW9k
dWxlSW5mb3JtYXRpb24uZ2V0KCkpKTsKIAogICAgICAgICBtX3VubGlua2VkV2FzbVRvV2FzbUNh
bGxzW2Z1bmN0aW9uSW5kZXhdID0gVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KCk7Ci0g
ICAgICAgIFRpZXJVcENvdW50KiB0aWVyVXAgPSAmbV90aWVyVXBDb3VudHNbZnVuY3Rpb25JbmRl
eF07CisgICAgICAgIFRpZXJVcENvdW50KiB0aWVyVXAgPSBPcHRpb25zOjp1c2VCQlFUaWVyVXBD
aGVja3MoKSA/ICZtX3RpZXJVcENvdW50c1tmdW5jdGlvbkluZGV4XSA6IG51bGxwdHI7CiAgICAg
ICAgIGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlKG1fY29tcGls
YXRpb25Db250ZXh0c1tmdW5jdGlvbkluZGV4XSwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5n
dGgsIHNpZ25hdHVyZSwgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSwg
bV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21waWxhdGlvbk1vZGU6OkJCUU1v
ZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCk7CiAKICAgICAgICAgaWYgKFVOTElLRUxZKCFwYXJz
ZUFuZENvbXBpbGVSZXN1bHQpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwCmluZGV4IDJlMGM5OWEzOWJlYmQzMTc4Yjkx
NDhkOTU4ZmU1M2U1N2E2MjI5N2UuLjI2NGMzNGRlNDVkYTE3NWE1ZDUxNDFjMTcxZWZlOTVlMDYz
YzVlMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNp
Z25hbEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVs
dFNpZ25hbEhhbmRsZXIuY3BwCkBAIC01Miw5ICs1Miw4IEBAIHN0YXRpYyBMYXp5TmV2ZXJEZXN0
cm95ZWQ8SGFzaFNldDxzdGQ6OnR1cGxlPHZvaWQqLCB2b2lkKj4+PiBjb2RlTG9jYXRpb25zOyAv
LyAoCiAKIHN0YXRpYyBib29sIGZhc3RIYW5kbGVySW5zdGFsbGVkIHsgZmFsc2UgfTsKIAotc3Rh
dGljIFNpZ25hbEFjdGlvbiB0cmFwSGFuZGxlcihpbnQsIHNpZ2luZm9fdCogc2lnSW5mbywgdm9p
ZCogdWNvbnRleHQpCitzdGF0aWMgU2lnbmFsQWN0aW9uIHRyYXBIYW5kbGVyKFNpZ25hbCwgU2ln
SW5mbyYgc2lnSW5mbywgUGxhdGZvcm1SZWdpc3RlcnMmIGNvbnRleHQpCiB7Ci0gICAgbWNvbnRl
eHRfdCYgY29udGV4dCA9IHN0YXRpY19jYXN0PHVjb250ZXh0X3QqPih1Y29udGV4dCktPnVjX21j
b250ZXh0OwogICAgIHZvaWQqIGZhdWx0aW5nSW5zdHJ1Y3Rpb24gPSBNYWNoaW5lQ29udGV4dDo6
aW5zdHJ1Y3Rpb25Qb2ludGVyKGNvbnRleHQpOwogICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJz
dGFydGluZyBoYW5kbGVyIGZvciBmYXVsdCBhdDogIiwgUmF3UG9pbnRlcihmYXVsdGluZ0luc3Ry
dWN0aW9uKSk7CiAKQEAgLTY0LDcgKzYzLDcgQEAgc3RhdGljIFNpZ25hbEFjdGlvbiB0cmFwSGFu
ZGxlcihpbnQsIHNpZ2luZm9fdCogc2lnSW5mbywgdm9pZCogdWNvbnRleHQpCiAgICAgaWYgKGlz
SklUUEMoZmF1bHRpbmdJbnN0cnVjdGlvbikpIHsKICAgICAgICAgYm9vbCBmYXVsdGVkSW5BY3Rp
dmVGYXN0TWVtb3J5ID0gZmFsc2U7CiAgICAgICAgIHsKLSAgICAgICAgICAgIHZvaWQqIGZhdWx0
aW5nQWRkcmVzcyA9IHNpZ0luZm8tPnNpX2FkZHI7CisgICAgICAgICAgICB2b2lkKiBmYXVsdGlu
Z0FkZHJlc3MgPSBzaWdJbmZvLmZhdWx0aW5nQWRkcmVzczsKICAgICAgICAgICAgIGRhdGFMb2dM
bklmKHZlcmJvc2UsICJjaGVja2luZyBmYXVsdGluZyBhZGRyZXNzOiAiLCBSYXdQb2ludGVyKGZh
dWx0aW5nQWRkcmVzcyksICIgaXMgaW4gYW4gYWN0aXZlIGZhc3QgbWVtb3J5Iik7CiAgICAgICAg
ICAgICBmYXVsdGVkSW5BY3RpdmVGYXN0TWVtb3J5ID0gV2FzbTo6TWVtb3J5OjphZGRyZXNzSXNJ
bkFjdGl2ZUZhc3RNZW1vcnkoZmF1bHRpbmdBZGRyZXNzKTsKICAgICAgICAgfQpAQCAtMTI0LDEx
ICsxMjMsMTEgQEAgdm9pZCBlbmFibGVGYXN0TWVtb3J5KCkKICAgICAgICAgICAgIHJldHVybjsK
IAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWV9GQVNUX01FTU9SWSkKLSAgICAgICAgaW5zdGFsbFNp
Z25hbEhhbmRsZXIoU2lnbmFsOjpCdXMsIFtdIChpbnQgc2lnbmFsLCBzaWdpbmZvX3QqIHNpZ0lu
Zm8sIHZvaWQqIHVjb250ZXh0KSB7CisgICAgICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25h
bDo6QnVzLCBbXSAoU2lnbmFsIHNpZ25hbCwgU2lnSW5mbyYgc2lnSW5mbywgUGxhdGZvcm1SZWdp
c3RlcnMmIHVjb250ZXh0KSB7CiAgICAgICAgICAgICByZXR1cm4gdHJhcEhhbmRsZXIoc2lnbmFs
LCBzaWdJbmZvLCB1Y29udGV4dCk7CiAgICAgICAgIH0pOwogCi0gICAgICAgIGluc3RhbGxTaWdu
YWxIYW5kbGVyKFNpZ25hbDo6U2VnViwgW10gKGludCBzaWduYWwsIHNpZ2luZm9fdCogc2lnSW5m
bywgdm9pZCogdWNvbnRleHQpIHsKKyAgICAgICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFs
OjpTZWdWLCBbXSAoU2lnbmFsIHNpZ25hbCwgU2lnSW5mbyYgc2lnSW5mbywgUGxhdGZvcm1SZWdp
c3RlcnMmIHVjb250ZXh0KSB7CiAgICAgICAgICAgICByZXR1cm4gdHJhcEhhbmRsZXIoc2lnbmFs
LCBzaWdJbmZvLCB1Y29udGV4dCk7CiAgICAgICAgIH0pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWFjaGluZVRocmVhZHMuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbU1hY2hpbmVUaHJlYWRzLmNwcAppbmRleCA1YWFjODdhY2I1NzQ3
YzdmY2EyZjkzNmVjOWNmNjc4YjQzMTc4MTcxLi4wYTM2N2ZkNWUyMjUyN2U5YzNjODc1MzZlY2Zk
NzJiMTNkZjc5ZDViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TWFjaGluZVRocmVhZHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21N
YWNoaW5lVGhyZWFkcy5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJNYWNoaW5lU3Rh
Y2tNYXJrZXIuaCIKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3
dGYvVGhyZWFkTWVzc2FnZS5oPgorI2luY2x1ZGUgPHd0Zi90aHJlYWRzL1NpZ25hbHMuaD4KIAog
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIApAQCAtNTcsNyArNTgsNyBAQCB2b2lk
IHJlc2V0SW5zdHJ1Y3Rpb25DYWNoZU9uQWxsVGhyZWFkcygpCiAKICAgICBjb25zdCBEb3VibHlM
aW5rZWRMaXN0PE1hY2hpbmVUaHJlYWRzOjpNYWNoaW5lVGhyZWFkPiYgdGhyZWFkcyA9IHdhc21U
aHJlYWRzKCkudGhyZWFkc0xpc3RIZWFkKGxvY2tlcik7CiAgICAgZm9yIChjb25zdCBhdXRvKiB0
aHJlYWQgPSB0aHJlYWRzLmhlYWQoKTsgdGhyZWFkOyB0aHJlYWQgPSB0aHJlYWQtPm5leHQoKSkg
ewotICAgICAgICBzZW5kTWVzc2FnZSh0aHJlYWQtPm1fdGhyZWFkLmdldCgpLCBbXSAoc2lnaW5m
b190KiwgdWNvbnRleHRfdCopIHsKKyAgICAgICAgc2VuZE1lc3NhZ2UodGhyZWFkLT5tX3RocmVh
ZC5nZXQoKSwgW10gKGNvbnN0IFBsYXRmb3JtUmVnaXN0ZXJzJikgewogICAgICAgICAgICAgLy8g
SXQncyBsaWtlbHkgdGhhdCB0aGUgc2lnbmFsIGhhbmRsZXIgd2lsbCBhbHJlYWR5IHJlc2V0IHRo
ZSBpbnN0cnVjdGlvbiBjYWNoZSBidXQgd2UgbWlnaHQgYXMgd2VsbCBiZSBzdXJlLgogICAgICAg
ICAgICAgV1RGOjpjcm9zc01vZGlmeWluZ0NvZGVGZW5jZSgpOwogICAgICAgICB9KTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2Uv
V1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDVmNDUyODdmNmUzYzY4ODVi
MjJiYTI3NzZjZmJjNmEzMzIzYmQwNWIuLjU4NTQ0Y2NiNjJjYjIyMTJiYWVlNzZmNGQyYTAxZTg5
YjZiN2IwOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKKysrIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
NjQsNiArNjQsNyBAQAogCQk1MjE4MzAxMkM5OUU0NzZBODRFRUJFQTggLyogU3ltYm9sSW1wbC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNzJCQkRC
MTA3RkE0MjQ4ODYxNzhCOUUgLyogU3ltYm9sSW1wbC5jcHAgKi87IH07CiAJCTUzMTFCRDUzMUVB
NzFDQUQwMDUyNTI4MSAvKiBTaWduYWxzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUzMTFCRDUxMUVBNzFDQUQwMDUyNTI4MSAvKiBTaWduYWxzLmNw
cCAqLzsgfTsKIAkJNTMxMUJENUMxRUE4MjJGOTAwNTI1MjgxIC8qIFRocmVhZE1lc3NhZ2UuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMxMUJENUIx
RUE4MjJGOTAwNTI1MjgxIC8qIFRocmVhZE1lc3NhZ2UuY3BwICovOyB9OworCQk1MzUzNEYyQTFF
QzBFMTBFMDAxNDFCMkYgLyogTWFjaEV4Y2VwdGlvbnMuZGVmcyBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNTM0RjI5MUVDMEUxMEUwMDE0MUIyRiAvKiBN
YWNoRXhjZXB0aW9ucy5kZWZzICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKENsaWVudCwg
U2VydmVyLCApOyB9OyB9OwogCQk3MEE5OTNGRTFBRDcxNTEzMDBGQTYxNUIgLyogU3ltYm9sUmVn
aXN0cnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzBBOTkzRkMxQUQ3MTUxMzAwRkE2MTVCIC8qIFN5bWJvbFJlZ2lzdHJ5LmNwcCAqLzsgfTsKIAkJ
NzBFQ0E2MEQxQjAyNDI2ODAwNDQ5NzM5IC8qIEF0b21pY1N0cmluZ0ltcGwuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzBFQ0E2MEExQjAyNDI2ODAw
NDQ5NzM5IC8qIEF0b21pY1N0cmluZ0ltcGwuY3BwICovOyB9OwogCQk3QUZFQzZCMTFFQjIyQjU5
MDBEQURFMzYgLyogVVVJRC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3QUZFQzZCMDFFQjIyQjU5MDBEQURFMzYgLyogVVVJRC5jcHAgKi87IH07CkBA
IC0yOTksNiArMzAwLDcgQEAKIAkJNTMxMUJENTcxRUE3RTFBMTAwNTI1MjgxIC8qIFNpZ25hbHMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2lnbmFscy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MzExQkQ1OTFFQTgxQTk2MDA1MjUyODEgLyogVGhyZWFkTWVz
c2FnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRNZXNzYWdlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMTFCRDVCMUVBODIyRjkwMDUyNTI4MSAv
KiBUaHJlYWRNZXNzYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFRocmVhZE1lc3NhZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzUzNEYy
OTFFQzBFMTBFMDAxNDFCMkYgLyogTWFjaEV4Y2VwdGlvbnMuZGVmcyAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUubWlnOyBwYXRoID0gTWFjaEV4Y2VwdGlvbnMuZGVmczsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTM5RUIwNjIxRDU1Mjg0MjAwQzgyRUY3IC8qIExFQkRlY29kZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTEVCRGVjb2Rlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1M0VDMjUzQzFFOTVBRDMwMDAwODMxQjkgLyogUHJpb3JpdHlRdWV1
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcmlvcml0eVF1ZXVlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1MzA3MUM5MUM0MDQyNzIwMDM4NDg5OCAvKiBU
aW55TFJVQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGlueUxSVUNh
Y2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDIzLDYgKzEwMjUsNyBAQAog
CQkJY2hpbGRyZW4gPSAoCiAJCQkJMUE0MjhCOEIxQzhGODlERDAwNTFFOUVCIC8qIEFwcEtpdENv
bXBhdGliaWxpdHlEZWNsYXJhdGlvbnMuaCAqLywKIAkJCQkxQUNBREQ4MjE4ODQ0ODAxMDBEOEI3
MUQgLyogRGVwcmVjYXRlZFN5bWJvbHNVc2VkQnlTYWZhcmkubW0gKi8sCisJCQkJNTM1MzRGMjkx
RUMwRTEwRTAwMTQxQjJGIC8qIE1hY2hFeGNlcHRpb25zLmRlZnMgKi8sCiAJCQkJQThBNDcyQzUx
NTFBODI1QTAwNDEyM0ZGIC8qIE1haW5UaHJlYWRNYWMubW0gKi8sCiAJCQkpOwogCQkJcGF0aCA9
IG1hYzsKQEAgLTEzNDYsNiArMTM0OSw3IEBACiAJCQkJMTQzRjYxMUYxNTY1RjBGOTAwREI1MTRB
IC8qIFJBTVNpemUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTNCNzI1RUM5ODc0NDZBRDkzRjFB
NDQwIC8qIFJhbmRvbURldmljZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQxNDE1MUE4
MjVCMDA0MTIzRkYgLyogUmFuZG9tTnVtYmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUzNTM0
RjJBMUVDMEUxMEUwMDE0MUIyRiAvKiBNYWNoRXhjZXB0aW9ucy5kZWZzIGluIFNvdXJjZXMgKi8s
CiAJCQkJQThBNDc0MUExNTFBODI1QjAwNDEyM0ZGIC8qIFJlZkNvdW50ZWRMZWFrQ291bnRlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkyQ0RFRDBGMzE4MTE1Qzg1MDA0REJBNzAgLyogUnVuTG9v
cC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQ0RFRDBFRjE4MTE1QzM4MDA0REJBNzAgLyogUnVu
TG9vcENGLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvU3Rh
Y2tCb3VuZHMuaCBiL1NvdXJjZS9XVEYvd3RmL1N0YWNrQm91bmRzLmgKaW5kZXggNTU0NjA0ZjJh
YjQ4NGM3Y2Y3MWVlMzg2MzBjZWI0Yzc5YzMzZTk3Mi4uY2Q2MmMxNDhhNmM3ZWZjOTUxN2E4YjA5
YjhhMzJjN2ZlMTkwY2RlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvU3RhY2tCb3VuZHMu
aAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9TdGFja0JvdW5kcy5oCkBAIC01NCw3ICs1NCw2IEBAIHB1
YmxpYzoKICAgICAgICAgOiBtX29yaWdpbihvcmlnaW4pCiAgICAgICAgICwgbV9ib3VuZChlbmQp
CiAgICAgewotICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgfQogCiAgICAgdm9pZCog
b3JpZ2luKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZE1lc3NhZ2Uu
Y3BwIGIvU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5jcHAKaW5kZXggZjE0YmM0NWQzNjE0
YzdjNjYzNWViMTdhYjBlMjcyODE2YTEzNzNkZC4uYjA0MGE1YjcxZGMxY2JkNTUxNTM3M2U2ZGU2
OTNjOTRkMmI1NTA3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5j
cHAKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5jcHAKQEAgLTM2LDYgKzM2LDkg
QEAKICNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+CiAjaW5jbHVkZSA8d3RmL3RocmVhZHMvU2lnbmFs
cy5oPgogCisjaWYgT1MoREFSV0lOKQorI2luY2x1ZGUgPG1hY2gvdGhyZWFkX2FjdC5oPgorI2Vu
ZGlmCiAKIG5hbWVzcGFjZSBXVEYgewogCkBAIC04MywxMiArODYsMTIgQEAgdm9pZCBpbml0aWFs
aXplVGhyZWFkTWVzc2FnZXMoKQogfQogCiBTVVBQUkVTU19BU0FOCi1NZXNzYWdlU3RhdHVzIHNl
bmRNZXNzYWdlU2NvcGVkKFRocmVhZCYgdGhyZWFkLCBjb25zdCBUaHJlYWRNZXNzYWdlJiBtZXNz
YWdlKQorc3RhdGljIE1lc3NhZ2VTdGF0dXMgc2VuZE1lc3NhZ2VTaWduYWwoVGhyZWFkJiB0aHJl
YWQsIGNvbnN0IFRocmVhZE1lc3NhZ2UmIG1lc3NhZ2UpCiB7CiAgICAgY29uc3RleHByIFNpZ25h
bCBzaWduYWwgPSBTaWduYWw6OlVzcjsKICAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZTsK
ICAgICBzdGQ6OmNhbGxfb25jZShvbmNlLCBbXSB7Ci0gICAgICAgIGluc3RhbGxTaWduYWxIYW5k
bGVyKHNpZ25hbCwgW10gKGludCwgc2lnaW5mb190KiBpbmZvLCB2b2lkKiB1YXApIHsKKyAgICAg
ICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoc2lnbmFsLCBbXSAoU2lnbmFsLCBTaWdJbmZvJiwgUGxh
dGZvcm1SZWdpc3RlcnMmIGNvbnRleHQpIHsKICAgICAgICAgICAgIFRocmVhZCogdGhyZWFkID0g
VGhyZWFkOjpjdXJyZW50TWF5QmVOdWxsKCk7CiAKICAgICAgICAgICAgIGlmICghdGhyZWFkKSB7
CkBAIC05OCw3ICsxMDEsNyBAQCBNZXNzYWdlU3RhdHVzIHNlbmRNZXNzYWdlU2NvcGVkKFRocmVh
ZCYgdGhyZWFkLCBjb25zdCBUaHJlYWRNZXNzYWdlJiBtZXNzYWdlKQogCiAgICAgICAgICAgICAv
LyBOb2RlIHNob3VsZCBiZSBkZWxldGVkIGluIHRoZSBzZW5kZXIgdGhyZWFkLiBEZWxldGluZyBO
b2RlcyBpbiBzaWduYWwgaGFuZGxlciBjYXVzZXMgZGVhZCBsb2NrLgogICAgICAgICAgICAgdGhy
ZWFkLT50aHJlYWRNZXNzYWdlcygpLmNvbnN1bWVBbGxXaXRoTm9kZShbJl0gKFRocmVhZE1lc3Nh
Z2VEYXRhKiBkYXRhLCBOb2RlKiBub2RlKSB7Ci0gICAgICAgICAgICAgICAgZGF0YS0+bWVzc2Fn
ZShpbmZvLCBzdGF0aWNfY2FzdDx1Y29udGV4dF90Kj4odWFwKSk7CisgICAgICAgICAgICAgICAg
ZGF0YS0+bWVzc2FnZShjb250ZXh0KTsKICAgICAgICAgICAgICAgICAvLyBCeSBzZXR0aW5nIHJh
biB2YXJpYWJsZSwgKDEpIHRoZSBzZW5kZXIgYWNrbm93bGVkZ2VzIHRoZSBjb21wbGV0aW9uIGFu
ZAogICAgICAgICAgICAgICAgIC8vICgyKSBnZXRzIHRoZSBOb2RlIHRvIGJlIGRlbGV0ZWQuCiAg
ICAgICAgICAgICAgICAgZGF0YS0+cmFuLnN0b3JlKG5vZGUpOwpAQCAtMTU2LDYgKzE1OSw2MCBA
QCBNZXNzYWdlU3RhdHVzIHNlbmRNZXNzYWdlU2NvcGVkKFRocmVhZCYgdGhyZWFkLCBjb25zdCBU
aHJlYWRNZXNzYWdlJiBtZXNzYWdlKQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiB9CiAKKyNpZiBPUyhEQVJXSU4pCitzdGF0aWMgTWVzc2FnZVN0YXR1cyBzZW5kTWVzc2FnZU1h
Y2goVGhyZWFkJiB0aHJlYWQsIGNvbnN0IFRocmVhZE1lc3NhZ2UmIG1lc3NhZ2UpCit7CisgICAg
c3RhdGljIFN0YXRpY0xvY2sgbWVzc2FnZUxvY2s7CisgICAgYXV0byBsb2NraG9sZGVyID0gaG9s
ZExvY2sobWVzc2FnZUxvY2spOworCisgICAgYXV0byByZXN1bHQgPSB0aHJlYWQuc3VzcGVuZCgp
OworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gTWVzc2FnZVN0YXR1czo6VGhyZWFk
RXhpdGVkOworCisjaWYgQ1BVKFg4NikKKyAgICB1bnNpZ25lZCB1c2VyQ291bnQgPSBzaXplb2Yo
cmVnaXN0ZXJzKSAvIHNpemVvZihpbnQpOworICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2
b3IgPSBpMzg2X1RIUkVBRF9TVEFURTsKKyNlbGlmIENQVShYODZfNjQpCisgICAgdW5zaWduZWQg
dXNlckNvdW50ID0geDg2X1RIUkVBRF9TVEFURTY0X0NPVU5UOworICAgIHRocmVhZF9zdGF0ZV9m
bGF2b3JfdCBmbGF2b3IgPSB4ODZfVEhSRUFEX1NUQVRFNjQ7CisjZWxpZiBDUFUoQVJNKQorICAg
IHVuc2lnbmVkIHVzZXJDb3VudCA9IEFSTV9USFJFQURfU1RBVEVfQ09VTlQ7CisgICAgdGhyZWFk
X3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IEFSTV9USFJFQURfU1RBVEU7CisjZWxpZiBDUFUoQVJN
NjQpCisgICAgdW5zaWduZWQgdXNlckNvdW50ID0gQVJNX1RIUkVBRF9TVEFURTY0X0NPVU5UOwor
ICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSBBUk1fVEhSRUFEX1NUQVRFNjQ7Cisj
ZWxzZQorI2Vycm9yIFVua25vd24gQXJjaGl0ZWN0dXJlCisjZW5kaWYKKworICAgIFBsYXRmb3Jt
UmVnaXN0ZXJzIHJlZ2lzdGVyczsKKyAgICB0aHJlYWRfc3RhdGVfdCBzdGF0ZSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dGhyZWFkX3N0YXRlX3Q+KCZyZWdpc3RlcnMpOworICAgIHRocmVhZF9nZXRfc3Rh
dGUodGhyZWFkLm1hY2hUaHJlYWQoKSwgZmxhdm9yLCBzdGF0ZSwgJnVzZXJDb3VudCk7CisKKyAg
ICBtZXNzYWdlKHJlZ2lzdGVycyk7CisKKyAgICB0aHJlYWRfc2V0X3N0YXRlKHRocmVhZC5tYWNo
VGhyZWFkKCksIGZsYXZvciwgKHRocmVhZF9zdGF0ZV90KSZyZWdpc3RlcnMsIHVzZXJDb3VudCk7
CisKKyAgICB0aHJlYWQucmVzdW1lKCk7CisgICAgcmV0dXJuIE1lc3NhZ2VTdGF0dXM6Ok1lc3Nh
Z2VSYW47Cit9CisKK3N0YXRpYyBib29sIHVzZU1hY2ggPSBmYWxzZTsKK3ZvaWQgZGVsaXZlck1l
c3NhZ2VzVXNpbmdNYWNoKCkgeyB1c2VNYWNoID0gdHJ1ZTsgfQorCisjZW5kaWYKKworTWVzc2Fn
ZVN0YXR1cyBzZW5kTWVzc2FnZVNjb3BlZChUaHJlYWQmIHRocmVhZCwgY29uc3QgVGhyZWFkTWVz
c2FnZSYgbWVzc2FnZSkKK3sKKyNpZiBPUyhEQVJXSU4pCisgICAgaWYgKHVzZU1hY2gpCisgICAg
ICAgIHJldHVybiBzZW5kTWVzc2FnZU1hY2godGhyZWFkLCBtZXNzYWdlKTsKKyNlbmRpZgorICAg
IHJldHVybiBzZW5kTWVzc2FnZVNpZ25hbCh0aHJlYWQsIG1lc3NhZ2UpOworICAgIHJldHVybiBN
ZXNzYWdlU3RhdHVzOjpUaHJlYWRFeGl0ZWQ7Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAK
ICNlbmRpZiAvLyBVU0UoUFRIUkVBRFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJl
YWRNZXNzYWdlLmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRNZXNzYWdlLmgKaW5kZXggOWFlNTNm
MjljZjdlOGZiMDBlZjkyMTFkMTZjZTJjZGVkNjAzZWMxYi4uNzc0MmUxYWNiYzRiM2M4NWRkZjY2
MjgwMGM1YWNmMGFiMmFlMTQxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkTWVz
c2FnZS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZE1lc3NhZ2UuaApAQCAtMzYsNyArMzYs
NyBAQCBuYW1lc3BhY2UgV1RGIHsKIHZvaWQgaW5pdGlhbGl6ZVRocmVhZE1lc3NhZ2VzKCk7CiAK
IGNsYXNzIFRocmVhZE1lc3NhZ2VEYXRhOwotdXNpbmcgVGhyZWFkTWVzc2FnZSA9IFNjb3BlZExh
bWJkYTx2b2lkKHNpZ2luZm9fdCosIHVjb250ZXh0X3QqKT47Cit1c2luZyBUaHJlYWRNZXNzYWdl
ID0gU2NvcGVkTGFtYmRhPHZvaWQoUGxhdGZvcm1SZWdpc3RlcnMmKT47CiAKIGVudW0gY2xhc3Mg
TWVzc2FnZVN0YXR1cyB7CiAgICAgTWVzc2FnZVJhbiwKQEAgLTUxLDEwICs1MSwxNCBAQCBNZXNz
YWdlU3RhdHVzIHNlbmRNZXNzYWdlU2NvcGVkKFRocmVhZCYsIGNvbnN0IFRocmVhZE1lc3NhZ2Um
KTsKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CiBNZXNzYWdlU3RhdHVzIHNlbmRNZXNzYWdl
KFRocmVhZCYgdGFyZ2V0VGhyZWFkLCBjb25zdCBGdW5jdG9yJiBmdW5jKQogewotICAgIGF1dG8g
bGFtYmRhID0gc2NvcGVkTGFtYmRhUmVmPHZvaWQoc2lnaW5mb190KiwgdWNvbnRleHRfdCopPihm
dW5jKTsKKyAgICBhdXRvIGxhbWJkYSA9IHNjb3BlZExhbWJkYVJlZjx2b2lkKFBsYXRmb3JtUmVn
aXN0ZXJzJik+KGZ1bmMpOwogICAgIHJldHVybiBzZW5kTWVzc2FnZVNjb3BlZCh0YXJnZXRUaHJl
YWQsIGxhbWJkYSk7CiB9CiAKKyNpZiBPUyhEQVJXSU4pCit2b2lkIGRlbGl2ZXJNZXNzYWdlc1Vz
aW5nTWFjaCgpOworI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6OnNl
bmRNZXNzYWdlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmggYi9Tb3Vy
Y2UvV1RGL3d0Zi9UaHJlYWRpbmcuaAppbmRleCBkMmU1MzZkZjdhODY5NmQ4ZTZiOTViYTQzZTE3
M2QzYjU1MGJmMTZhLi4zNTE0ZThjMDlmMGZjOTRkNTM0YmUyZjNiNmU3YzQ5NTBlMGJjZjA1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi9UaHJlYWRpbmcuaApAQCAtMTM4LDYgKzEzOCwxMCBAQCBwdWJsaWM6CiAKICNpZiBVU0UoUFRI
UkVBRFMpCiAgICAgTG9ja2xlc3NCYWc8VGhyZWFkTWVzc2FnZURhdGEqPiYgdGhyZWFkTWVzc2Fn
ZXMoKSB7IHJldHVybiBtX3RocmVhZE1lc3NhZ2VzOyB9CisKKyNpZiBPUyhEQVJXSU4pCisgICAg
bWFjaF9wb3J0X3QgbWFjaFRocmVhZCgpIHsgcmV0dXJuIG1fcGxhdGZvcm1UaHJlYWQ7IH0KKyNl
bmRpZgogI2VuZGlmCiAKIHByb3RlY3RlZDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1Ro
cmVhZGluZ1B0aHJlYWRzLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNw
cAppbmRleCBkMzRkNzk4ZjI5YmY4OTkwMDQyZGE1MThhOWNmYjdhMTYzYTg2ODJkLi4yNWYwOTQx
ZjExNTg3MjExMzBlN2Y1MGExZGU4MmRjNjk5Nzg4Nzc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5n
UHRocmVhZHMuY3BwCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSA8d3RmL1RocmVhZEZ1bmN0
aW9uSW52b2NhdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRIb2xkZXIuaD4KICNpbmNsdWRl
IDx3dGYvV29yZExvY2suaD4KKyNpbmNsdWRlIDx3dGYvdGhyZWFkcy9TaWduYWxzLmg+CiAKICNp
ZiBPUyhMSU5VWCkKICNpbmNsdWRlIDxzeXMvcHJjdGwuaD4KQEAgLTU0LDYgKzU1LDEwIEBACiAj
aW5jbHVkZSA8c3lzL3RpbWUuaD4KICNlbmRpZgogCisjaWYgT1MoREFSV0lOKQorI2luY2x1ZGUg
PG1hY2gvZXhjZXB0aW9uLmg+CisjZW5kaWYKKwogI2lmICFPUyhEQVJXSU4pICYmIE9TKFVOSVgp
CiAKICNpbmNsdWRlIDxzeXMvbW1hbi5oPgpAQCAtODIsNiArODcsNyBAQCBUaHJlYWQ6OlRocmVh
ZCgpCiAKIFRocmVhZDo6flRocmVhZCgpCiB7CisgICAgcmVtb3ZlVGhyZWFkKHRoaXMpOwogI2lm
ICFPUyhEQVJXSU4pCiAgICAgc2VtX2Rlc3Ryb3koJm1fc2VtYXBob3JlRm9yU3VzcGVuZFJlc3Vt
ZSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL21hYy9NYWNoRXhjZXB0aW9u
cy5kZWZzIGIvU291cmNlL1dURi93dGYvbWFjL01hY2hFeGNlcHRpb25zLmRlZnMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNDIwNTc0MmE0ZWQ1MDBmODA2NGZlZWI0OTU1YTdjOTcwZDk5YWYwYgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XVEYvd3RmL21hYy9NYWNoRXhjZXB0aW9ucy5kZWZzCkBAIC0wLDAgKzEs
MjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSA8bWFjaC9tYWNoX2V4Yy5kZWZzPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGhy
ZWFkcy9TaWduYWxzLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3RocmVhZHMvU2lnbmFscy5jcHAKaW5k
ZXggODU1YjI4YjMxNzIxNzI3Y2YxZjQzMWE5MThhMjUxZGMyZTZhM2RmYy4uNmVmYjRmMDY0ZGM0
NjMyZWY5ZWU2M2JhYTdjN2ZmOGUyN2Q4NzA3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYv
dGhyZWFkcy9TaWduYWxzLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90aHJlYWRzL1NpZ25hbHMu
Y3BwCkBAIC0yOCwyMSArMjgsMjUzIEBACiAKICNpZiBVU0UoUFRIUkVBRFMpCiAKK2V4dGVybiAi
QyIgeworI2luY2x1ZGUgIk1hY2hFeGNlcHRpb25zU2VydmVyLmgiCit9OworCiAjaW5jbHVkZSA8
Y3N0ZGlvPgogI2luY2x1ZGUgPG11dGV4PgogI2luY2x1ZGUgPHNpZ25hbC5oPgorCisjaW5jbHVk
ZSA8bWFjaC9tYWNoLmg+CisjaW5jbHVkZSA8bWFjaC90aHJlYWRfYWN0Lmg+CisKICNpbmNsdWRl
IDx3dGYvQXRvbWljcy5oPgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisjaW5jbHVkZSA8d3Rm
L0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTG9ja2xlc3NCYWcuaD4KICNpbmNsdWRlIDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkTWVzc2FnZS5oPgorI2luY2x1
ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKwogCiBuYW1lc3BhY2UgV1RGIHsKIAorICAgIAogc3RhdGlj
IExhenlOZXZlckRlc3Ryb3llZDxMb2NrbGVzc0JhZzxTaWduYWxIYW5kbGVyPj4gaGFuZGxlcnNb
c3RhdGljX2Nhc3Q8c2l6ZV90PihTaWduYWw6Ok51bWJlck9mU2lnbmFscyldID0geyB9Owotc3Rh
dGljIHN0cnVjdCBzaWdhY3Rpb24gb2xkQWN0aW9uc1tzdGF0aWNfY2FzdDxzaXplX3Q+KFNpZ25h
bDo6TnVtYmVyT2ZTaWduYWxzKV07CiBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZU9u
Y2VGbGFnc1tzdGF0aWNfY2FzdDxzaXplX3Q+KFNpZ25hbDo6TnVtYmVyT2ZTaWduYWxzKV07Citz
dGF0aWMgc3RydWN0IHNpZ2FjdGlvbiBvbGRBY3Rpb25zW3N0YXRpY19jYXN0PHNpemVfdD4oU2ln
bmFsOjpOdW1iZXJPZlNpZ25hbHMpXTsKKworI2lmIE9TKERBUldJTikKK3N0YXRpYyBtYWNoX3Bv
cnRfdCBleGNlcHRpb25Qb3J0Oworc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbWF4TWVzc2FnZVNp
emUgPSAxICogS0I7CisKK3N0YXRpYyB2b2lkIHN0YXJ0TWFjaEV4Y2VwdGlvbkhhbmRsZXJUaHJl
YWQoKQoreworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlOworICAgIHN0ZDo6Y2FsbF9v
bmNlKG9uY2UsIFtdIHsKKyAgICAgICAgaWYgKG1hY2hfcG9ydF9hbGxvY2F0ZShtYWNoX3Rhc2tf
c2VsZigpLCBNQUNIX1BPUlRfUklHSFRfUkVDRUlWRSwgJmV4Y2VwdGlvblBvcnQpICE9IEtFUk5f
U1VDQ0VTUykKKyAgICAgICAgICAgIENSQVNIKCk7CisKKyAgICAgICAgaWYgKG1hY2hfcG9ydF9p
bnNlcnRfcmlnaHQobWFjaF90YXNrX3NlbGYoKSwgZXhjZXB0aW9uUG9ydCwgZXhjZXB0aW9uUG9y
dCwgTUFDSF9NU0dfVFlQRV9NQUtFX1NFTkQpIT0gS0VSTl9TVUNDRVNTKQorICAgICAgICAgICAg
Q1JBU0goKTsKKworICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIGEgZGlzcGF0Y2gg
cXVldWUuCisgICAgICAgICh2b2lkKVRocmVhZDo6Y3JlYXRlKAorICAgICAgICAgICAgIldURiBN
YWNoIEV4Y2VwdGlvbiBUaHJlYWQiLCBbXSAoKSB7CisgICAgICAgICAgICAgICAgdW5pb24gTWVz
c2FnZSB7CisgICAgICAgICAgICAgICAgICAgIG1hY2hfbXNnX2hlYWRlcl90IGhlYWRlcjsKKyAg
ICAgICAgICAgICAgICAgICAgY2hhciBkYXRhW21heE1lc3NhZ2VTaXplXTsKKyAgICAgICAgICAg
ICAgICB9OworICAgICAgICAgICAgICAgIE1lc3NhZ2UgbWVzc2FnZUhlYWRlckluOworICAgICAg
ICAgICAgICAgIE1lc3NhZ2UgbWVzc2FnZUhlYWRlck91dDsKKworICAgICAgICAgICAgICAgIHdo
aWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgICAgIGtlcm5fcmV0dXJuX3QgbWVzc2FnZVJl
c3VsdCA9IG1hY2hfbXNnKCZtZXNzYWdlSGVhZGVySW4uaGVhZGVyLCBNQUNIX1JDVl9NU0csIDAs
IG1heE1lc3NhZ2VTaXplLCBleGNlcHRpb25Qb3J0LCBNQUNIX01TR19USU1FT1VUX05PTkUsIE1B
Q0hfUE9SVF9OVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2VSZXN1bHQgPT0g
S0VSTl9TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1hY2hfZXhjX3Nl
cnZlcigmbWVzc2FnZUhlYWRlckluLmhlYWRlciwgJm1lc3NhZ2VIZWFkZXJPdXQuaGVhZGVyKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUkFTSCgpOworCisgICAgICAgICAgICAgICAg
ICAgICAgICBtZXNzYWdlUmVzdWx0ID0gbWFjaF9tc2coJm1lc3NhZ2VIZWFkZXJPdXQuaGVhZGVy
LCBNQUNIX1NFTkRfTVNHLCBtZXNzYWdlSGVhZGVyT3V0LmhlYWRlci5tc2doX3NpemUsIDAsIG1l
c3NhZ2VIZWFkZXJPdXQuaGVhZGVyLm1zZ2hfbG9jYWxfcG9ydCwgMCwgTUFDSF9QT1JUX05VTEwp
OworICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobWVzc2FnZVJlc3VsdCA9
PSBLRVJOX1NVQ0NFU1MpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2dMbigiRmFpbGVkIHRvIHJlY2VpdmUgbWFjaCBtZXNzYWdlIGR1
ZSB0byAiLCBtYWNoX2Vycm9yX3N0cmluZyhtZXNzYWdlUmVzdWx0KSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICB9KS5sZWFrUmVmKCk7CisgICAgfSk7Cit9CisKK3N0YXRpYyBTaWduYWwg
ZnJvbU1hY2hFeGNlcHRpb24oZXhjZXB0aW9uX3R5cGVfdCB0eXBlKQoreworICAgIHN3aXRjaCAo
dHlwZSkgeworICAgIGNhc2UgRVhDX0JBRF9BQ0NFU1M6IHJldHVybiBTaWduYWw6OlNlZ1Y7Cisg
ICAgY2FzZSBFWENfQkFEX0lOU1RSVUNUSU9OOiByZXR1cm4gU2lnbmFsOjpJbGw7CisgICAgY2Fz
ZSBFWENfQlJFQUtQT0lOVDogcmV0dXJuIFNpZ25hbDo6VHJhcDsKKyAgICBkZWZhdWx0OiBicmVh
azsKKyAgICB9CisgICAgcmV0dXJuIFNpZ25hbDo6VW5rbm93bjsKK30KKworc3RhdGljIGV4Y2Vw
dGlvbl9tYXNrX3QgdG9NYWNoTWFzayhTaWduYWwgc2lnbmFsKQoreworICAgIHN3aXRjaCAoc2ln
bmFsKSB7CisgICAgY2FzZSBTaWduYWw6OlNlZ1Y6IHJldHVybiBFWENfTUFTS19CQURfQUNDRVNT
OworICAgIGNhc2UgU2lnbmFsOjpJbGw6IHJldHVybiBFWENfTUFTS19CQURfSU5TVFJVQ1RJT047
CisgICAgY2FzZSBTaWduYWw6OlRyYXA6IHJldHVybiBFWENfTUFTS19CUkVBS1BPSU5UOworICAg
IGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCitleHRlcm4gIkMiIHsKKworLy8gV2UgbmVlZCB0byBpbXBsZW1lbnQgc3R1YnMgZm9y
IGNhdGNoX21hY2hfZXhjZXB0aW9uX3JhaXNlIGFuZCBjYXRjaF9tYWNoX2V4Y2VwdGlvbl9yYWlz
ZV9zdGF0ZV9pZGVudGl0eS4KKy8vIFRoZSBNaUcgZ2VuZXJhdGVkIGZpbGUgd2lsbCBmYWlsIHRv
IGxpbmsgb3RoZXJ3aXNlLCBldmVuIHRob3VnaCB3ZSBkb24ndCB1c2UgdGhlIGZ1bmN0aW9ucy4g
T25seSB0aGUKKy8vIGNhdGNoX21hY2hfZXhjZXB0aW9uX3JhaXNlX3N0YXRlIGZ1bmN0aW9uIHNo
b3VsZCBiZSBjYWxsZWQgYmVjYXVzZSB3ZSBwYXNzIEVYQ0VQVElPTl9TVEFURSB0bworLy8gdGhy
ZWFkX3NldF9leGNlcHRpb25fcG9ydHMuCitrZXJuX3JldHVybl90IGNhdGNoX21hY2hfZXhjZXB0
aW9uX3JhaXNlKG1hY2hfcG9ydF90LCBtYWNoX3BvcnRfdCwgbWFjaF9wb3J0X3QsIGV4Y2VwdGlv
bl90eXBlX3QsIG1hY2hfZXhjZXB0aW9uX2RhdGFfdCwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCkK
K3sKKyAgICBkYXRhTG9nTG4oIldlIHNob3VsZCBub3QgaGF2ZSBjYWxsZWQgY2F0Y2hfZXhjZXB0
aW9uX3JhaXNlKCksIHBsZWFzZSBmaWxlIGEgYnVnIGF0IGJ1Z3Mud2Via2l0Lm9yZyIpOworICAg
IHJldHVybiBLRVJOX0ZBSUxVUkU7Cit9CisKK2tlcm5fcmV0dXJuX3QgY2F0Y2hfbWFjaF9leGNl
cHRpb25fcmFpc2Vfc3RhdGVfaWRlbnRpdHkobWFjaF9wb3J0X3QsIG1hY2hfcG9ydF90LCBtYWNo
X3BvcnRfdCwgZXhjZXB0aW9uX3R5cGVfdCwgbWFjaF9leGNlcHRpb25fZGF0YV90LCBtYWNoX21z
Z190eXBlX251bWJlcl90LCBpbnQqLCB0aHJlYWRfc3RhdGVfdCwgbWFjaF9tc2dfdHlwZV9udW1i
ZXJfdCwgdGhyZWFkX3N0YXRlX3QsICBtYWNoX21zZ190eXBlX251bWJlcl90KikKK3sKKyAgICBk
YXRhTG9nTG4oIldlIHNob3VsZCBub3QgaGF2ZSBjYWxsZWQgY2F0Y2hfbWFjaF9leGNlcHRpb25f
cmFpc2Vfc3RhdGVfaWRlbnRpdHksIHBsZWFzZSBmaWxlIGEgYnVnIGF0IGJ1Z3Mud2Via2l0Lm9y
ZyIpOworICAgIHJldHVybiBLRVJOX0ZBSUxVUkU7Cit9CisKK2tlcm5fcmV0dXJuX3QgY2F0Y2hf
bWFjaF9leGNlcHRpb25fcmFpc2Vfc3RhdGUoCisgICAgbWFjaF9wb3J0X3QgcG9ydCwKKyAgICBl
eGNlcHRpb25fdHlwZV90IGV4Y2VwdGlvblR5cGUsCisgICAgY29uc3QgbWFjaF9leGNlcHRpb25f
ZGF0YV90IGV4Y2VwdGlvbkRhdGEsCisgICAgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCBkYXRhQ291
bnQsCisgICAgaW50KiBzdGF0ZUZsYXZvciwKKyAgICBjb25zdCB0aHJlYWRfc3RhdGVfdCBpblN0
YXRlLAorICAgIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QgaW5TdGF0ZUNvdW50LAorICAgIHRocmVh
ZF9zdGF0ZV90IG91dFN0YXRlLAorICAgIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QqIG91dFN0YXRl
Q291bnQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQocG9ydCA9PSBleGNlcHRpb25Qb3J0KTsKKyAg
ICBTaWduYWwgc2lnbmFsID0gZnJvbU1hY2hFeGNlcHRpb24oZXhjZXB0aW9uVHlwZSk7CisgICAg
ZGF0YUxvZ0xuKCJyZWNlaXZlZFNpZ25hbCAiLCBleGNlcHRpb25UeXBlKTsKKyAgICBkYXRhTG9n
TG4oIlRocmVhZDogIiwgZXhjZXB0aW9uRGF0YVswXSk7CisgICAgUkVMRUFTRV9BU1NFUlQoc2ln
bmFsICE9IFNpZ25hbDo6VW5rbm93bik7CisKKyAgICBtZW1jcHkob3V0U3RhdGUsIGluU3RhdGUs
IGluU3RhdGVDb3VudCAqIHNpemVvZihpblN0YXRlWzBdKSk7CisgICAgKm91dFN0YXRlQ291bnQg
PSBpblN0YXRlQ291bnQ7CisKKyNpZiBDUFUoWDg2XzY0KQorICAgIFJFTEVBU0VfQVNTRVJUKCpz
dGF0ZUZsYXZvciA9PSB4ODZfVEhSRUFEX1NUQVRFKTsKKyAgICBQbGF0Zm9ybVJlZ2lzdGVycyYg
cmVnaXN0ZXJzID0gcmVpbnRlcnByZXRfY2FzdDx4ODZfdGhyZWFkX3N0YXRlX3QqPihvdXRTdGF0
ZSktPnV0cy50czY0OworI2VsaWYgQ1BVKEFSTTY0KQorICAgIFJFTEVBU0VfQVNTRVJUKCpzdGF0
ZUZsYXZvciA9PSBBUk1fVEhSRUFEX1NUQVRFKTsKKyAgICBQbGF0Zm9ybVJlZ2lzdGVycyYgcmVn
aXN0ZXJzID0gcmVpbnRlcnByZXRfY2FzdDxhcm1fdW5pZmllZF90aHJlYWRfc3RhdGUqPihvdXRT
dGF0ZSktPnRzXzY0OworI2VuZGlmCisKKyAgICBTaWdJbmZvIGluZm87CisgICAgaWYgKHNpZ25h
bCA9PSBTaWduYWw6OlNlZ1YpIHsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChkYXRhQ291bnQsIGRh
dGFDb3VudCA9PSAyKTsKKyAgICAgICAgaW5mby5mYXVsdGluZ0FkZHJlc3MgPSByZWludGVycHJl
dF9jYXN0PHZvaWQqPihleGNlcHRpb25EYXRhWzFdKTsKKyAgICB9CisKKyAgICBib29sIGRpZEhh
bmRsZSA9IGZhbHNlOworICAgIGhhbmRsZXJzW3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0t
Pml0ZXJhdGUoWyZdIChjb25zdCBTaWduYWxIYW5kbGVyJiBoYW5kbGVyKSB7CisgICAgICAgIFNp
Z25hbEFjdGlvbiBoYW5kbGVyUmVzdWx0ID0gaGFuZGxlcihzaWduYWwsIGluZm8sIHJlZ2lzdGVy
cyk7CisgICAgICAgIGRhdGFMb2dMbihzdGF0aWNfY2FzdDxpbnQ+KGhhbmRsZXJSZXN1bHQpKTsK
KyAgICAgICAgc3dpdGNoIChoYW5kbGVyUmVzdWx0KSB7CisgICAgICAgIGNhc2UgU2lnbmFsQWN0
aW9uOjpIYW5kbGVkOgorICAgICAgICAgICAgZGlkSGFuZGxlID0gdHJ1ZTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9KTsKKworICAgIGlmIChkaWRIYW5kbGUpCisgICAgICAgIHJldHVybiBLRVJOX1NVQ0NF
U1M7CisgICAgcmV0dXJuIEtFUk5fRkFJTFVSRTsKK30KKworfTsKKworI2VuZGlmIC8vIE9TKERB
UldJTikKKworc3RhdGljIFN0YXRpY0xvY2sgdGhyZWFkTG9jazsKK2V4Y2VwdGlvbl9tYXNrX3Qg
YWN0aXZlRXhjZXB0aW9ucyB7IDAgfTsKIAotc3RhdGljIHZvaWQganNjU2lnbmFsSGFuZGxlcihp
bnQgc2lnLCBzaWdpbmZvX3QqIGluZm8sIHZvaWQqIG1jb250ZXh0KQoraW5saW5lIHZvaWQgc2V0
RXhjZXB0aW9uUG9ydHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBUaHJlYWQqIHRocmVhZCkKK3sK
KyAgICBrZXJuX3JldHVybl90IHJlc3VsdCA9IHRocmVhZF9zZXRfZXhjZXB0aW9uX3BvcnRzKHRo
cmVhZC0+bWFjaFRocmVhZCgpLCBhY3RpdmVFeGNlcHRpb25zLCBleGNlcHRpb25Qb3J0LCBFWENF
UFRJT05fU1RBVEUgfCBNQUNIX0VYQ0VQVElPTl9DT0RFUywgTUFDSElORV9USFJFQURfU1RBVEUp
OworICAgIGlmIChyZXN1bHQgIT0gS0VSTl9TVUNDRVNTKSB7CisgICAgICAgIGRhdGFMb2dMbigi
dGhyZWFkIHNldCBwb3J0IGZhaWxlZCBkdWUgdG8gIiwgbWFjaF9lcnJvcl9zdHJpbmcocmVzdWx0
KSk7CisgICAgICAgIENSQVNIKCk7CisgICAgfQorfQorCitpbmxpbmUgSGFzaFNldDxUaHJlYWQq
PiYgYWN0aXZlVGhyZWFkcyhjb25zdCBBYnN0cmFjdExvY2tlciYpCit7CisgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPEhhc2hTZXQ8VGhyZWFkKj4+IGFjdGl2ZVRocmVhZHM7CisgICAgcmV0dXJu
IGFjdGl2ZVRocmVhZHM7Cit9CisKK3ZvaWQgcmVnaXN0ZXJUaHJlYWQoVGhyZWFkKiB0aHJlYWQp
Cit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayh0aHJlYWRMb2NrKTsKKyAgICBhdXRvIHJl
c3VsdCA9IGFjdGl2ZVRocmVhZHMobG9ja2VyKS5hZGQodGhyZWFkKTsKKworICAgIGlmIChyZXN1
bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgc2V0RXhjZXB0aW9uUG9ydHMobG9ja2VyLCB0aHJlYWQp
OworfQorCit2b2lkIHJlbW92ZVRocmVhZChUaHJlYWQqIHRocmVhZCkKK3sKKyAgICBhdXRvIGxv
Y2tlciA9IGhvbGRMb2NrKHRocmVhZExvY2spOworICAgIGFjdGl2ZVRocmVhZHMobG9ja2VyKS5y
ZW1vdmUodGhyZWFkKTsKK30KKworc3RhdGljIGJvb2wgdXNlTWFjaCB7IGZhbHNlIH07Cit2b2lk
IGhhbmRsZVNpZ25hbHNXaXRoTWFjaCgpCit7CisjaWYgT1MoREFSV0lOKQorICAgIGRlbGl2ZXJN
ZXNzYWdlc1VzaW5nTWFjaCgpOworICAgIHVzZU1hY2ggPSB0cnVlOworI2VuZGlmCit9CisKK3N0
YXRpYyB2b2lkIGpzY1NpZ25hbEhhbmRsZXIoaW50LCBzaWdpbmZvX3QqLCB2b2lkKik7CisKK3Zv
aWQgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFsIHNpZ25hbCwgU2lnbmFsSGFuZGxlciYmIGhh
bmRsZXIpCit7CisgICAgQVNTRVJUKHNpZ25hbCA8IFNpZ25hbDo6VW5rbm93bik7CisgICAgaWYg
KHNpZ25hbCA9PSBTaWduYWw6OkJ1cyAmJiAhdXNlTWFjaCkKKyAgICAgICAgcmV0dXJuOworICAg
IEFTU0VSVCghdXNlTWFjaCB8fCBzaWduYWwgIT0gU2lnbmFsOjpVc3IpOworCisjaWYgT1MoREFS
V0lOKQorICAgIGlmICh1c2VNYWNoKQorICAgICAgICBzdGFydE1hY2hFeGNlcHRpb25IYW5kbGVy
VGhyZWFkKCk7CisjZW5kaWYKKworICAgIHN0ZDo6Y2FsbF9vbmNlKGluaXRpYWxpemVPbmNlRmxh
Z3Nbc3RhdGljX2Nhc3Q8c2l6ZV90PihzaWduYWwpXSwgWyZdIHsKKyAgICAgICAgaGFuZGxlcnNb
c3RhdGljX2Nhc3Q8c2l6ZV90PihzaWduYWwpXS5jb25zdHJ1Y3QoKTsKKworICAgICAgICBpZiAo
IXVzZU1hY2gpIHsKKyAgICAgICAgICAgIHN0cnVjdCBzaWdhY3Rpb24gYWN0aW9uOworICAgICAg
ICAgICAgYWN0aW9uLnNhX3NpZ2FjdGlvbiA9IGpzY1NpZ25hbEhhbmRsZXI7CisgICAgICAgICAg
ICBhdXRvIHJlc3VsdCA9IHNpZ2ZpbGxzZXQoJmFjdGlvbi5zYV9tYXNrKTsKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKCFyZXN1bHQpOworICAgICAgICAgICAgYWN0aW9uLnNhX2ZsYWdzID0g
U0FfU0lHSU5GTzsKKyAgICAgICAgICAgIHJlc3VsdCA9IHNpZ2FjdGlvbih0b1N5c3RlbVNpZ25h
bChzaWduYWwpLCAmYWN0aW9uLCAmb2xkQWN0aW9uc1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNpZ25h
bCldKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFyZXN1bHQpOworICAgICAgICB9CisK
KyAgICB9KTsKKworICAgIGhhbmRsZXJzW3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0tPmFk
ZChXVEZNb3ZlKGhhbmRsZXIpKTsKKworI2lmIE9TKERBUldJTikKKyAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKHRocmVhZExvY2spOworICAgIGlmICh1c2VNYWNoKSB7CisgICAgICAgIGFjdGl2
ZUV4Y2VwdGlvbnMgfD0gdG9NYWNoTWFzayhzaWduYWwpOworCisgICAgICAgIGZvciAoVGhyZWFk
KiB0aHJlYWQgOiBhY3RpdmVUaHJlYWRzKGxvY2tlcikpCisgICAgICAgICAgICBzZXRFeGNlcHRp
b25Qb3J0cyhsb2NrZXIsIHRocmVhZCk7CisgICAgfQorI2VuZGlmCit9CisKK3ZvaWQganNjU2ln
bmFsSGFuZGxlcihpbnQgc2lnLCBzaWdpbmZvX3QqIGluZm8sIHZvaWQqIG1jb250ZXh0KQogewog
ICAgIFNpZ25hbCBzaWduYWwgPSBmcm9tU3lzdGVtU2lnbmFsKHNpZyk7CiAKQEAgLTYyLDEwICsy
OTQsMTYgQEAgc3RhdGljIHZvaWQganNjU2lnbmFsSGFuZGxlcihpbnQgc2lnLCBzaWdpbmZvX3Qq
IGluZm8sIHZvaWQqIG1jb250ZXh0KQogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgU2ln
SW5mbyBzaWdJbmZvOworICAgIGlmIChzaWduYWwgPT0gU2lnbmFsOjpTZWdWIHx8IHNpZ25hbCA9
PSBTaWduYWw6OkJ1cykKKyAgICAgICAgc2lnSW5mby5mYXVsdGluZ0FkZHJlc3MgPSBpbmZvLT5z
aV9hZGRyOworCisgICAgUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVycyA9IHJlaW50ZXJwcmV0
X2Nhc3Q8bWNvbnRleHRfdD4obWNvbnRleHQpLT5fX3NzOworCiAgICAgYm9vbCBkaWRIYW5kbGUg
PSBmYWxzZTsKICAgICBib29sIHJlc3RvcmVEZWZhdWx0SGFuZGxlciA9IGZhbHNlOwogICAgIGhh
bmRsZXJzW3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0tPml0ZXJhdGUoWyZdIChjb25zdCBT
aWduYWxIYW5kbGVyJiBoYW5kbGVyKSB7Ci0gICAgICAgIHN3aXRjaCAoaGFuZGxlcihzaWcsIGlu
Zm8sIG1jb250ZXh0KSkgeworICAgICAgICBzd2l0Y2ggKGhhbmRsZXIoc2lnbmFsLCBzaWdJbmZv
LCByZWdpc3RlcnMpKSB7CiAgICAgICAgIGNhc2UgU2lnbmFsQWN0aW9uOjpIYW5kbGVkOgogICAg
ICAgICAgICAgZGlkSGFuZGxlID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTAwLDI0
ICszMzgsNiBAQCBzdGF0aWMgdm9pZCBqc2NTaWduYWxIYW5kbGVyKGludCBzaWcsIHNpZ2luZm9f
dCogaW5mbywgdm9pZCogbWNvbnRleHQpCiAgICAgfQogfQogCi12b2lkIGluc3RhbGxTaWduYWxI
YW5kbGVyKFNpZ25hbCBzaWduYWwsIFNpZ25hbEhhbmRsZXImJiBoYW5kbGVyKQotewotICAgIEFT
U0VSVChzaWduYWwgPCBTaWduYWw6OlVua25vd24pOwotICAgIHN0ZDo6Y2FsbF9vbmNlKGluaXRp
YWxpemVPbmNlRmxhZ3Nbc3RhdGljX2Nhc3Q8c2l6ZV90PihzaWduYWwpXSwgWyZdIHsKLSAgICAg
ICAgaGFuZGxlcnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzaWduYWwpXS5jb25zdHJ1Y3QoKTsKLQot
ICAgICAgICBzdHJ1Y3Qgc2lnYWN0aW9uIGFjdGlvbjsKLSAgICAgICAgYWN0aW9uLnNhX3NpZ2Fj
dGlvbiA9IGpzY1NpZ25hbEhhbmRsZXI7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gc2lnZmlsbHNl
dCgmYWN0aW9uLnNhX21hc2spOwotICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmVzdWx0KTsKLSAg
ICAgICAgYWN0aW9uLnNhX2ZsYWdzID0gU0FfU0lHSU5GTzsKLSAgICAgICAgcmVzdWx0ID0gc2ln
YWN0aW9uKHRvU3lzdGVtU2lnbmFsKHNpZ25hbCksICZhY3Rpb24sICZvbGRBY3Rpb25zW3N0YXRp
Y19jYXN0PHNpemVfdD4oc2lnbmFsKV0pOwotICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmVzdWx0
KTsKLSAgICB9KTsKLQotICAgIGhhbmRsZXJzW3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0t
PmFkZChXVEZNb3ZlKGhhbmRsZXIpKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV1RGCiAKICNlbmRp
ZiAvLyBVU0UoUFRIUkVBRFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90aHJlYWRzL1Np
Z25hbHMuaCBiL1NvdXJjZS9XVEYvd3RmL3RocmVhZHMvU2lnbmFscy5oCmluZGV4IDFlNGViNDZl
YWE3NzRhMWVlODlmNmZiMmRhZWYzMzI2OGNlNTY3NzkuLjgxYWIwMDQyNmQxMGZjZmQyZDJkNTJi
MzdiNWIxNzVjNTY2YWI4YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RocmVhZHMvU2ln
bmFscy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RocmVhZHMvU2lnbmFscy5oCkBAIC0yOSw2ICsy
OSw3IEBACiAKICNpbmNsdWRlIDxzaWduYWwuaD4KICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4K
KyNpbmNsdWRlIDx3dGYvUGxhdGZvcm1SZWdpc3RlcnMuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAK
QEAgLTc5LDcgKzgwLDExIEBAIGVudW0gY2xhc3MgU2lnbmFsQWN0aW9uIHsKICAgICBGb3JjZURl
ZmF1bHQKIH07CiAKLXVzaW5nIFNpZ25hbEhhbmRsZXIgPSBGdW5jdGlvbjxTaWduYWxBY3Rpb24o
aW50LCBzaWdpbmZvX3QqLCB2b2lkKik+Oworc3RydWN0IFNpZ0luZm8geworICAgIHZvaWQqIGZh
dWx0aW5nQWRkcmVzcyB7IDAgfTsKK307CisKK3VzaW5nIFNpZ25hbEhhbmRsZXIgPSBGdW5jdGlv
bjxTaWduYWxBY3Rpb24oU2lnbmFsLCBTaWdJbmZvJiwgUGxhdGZvcm1SZWdpc3RlcnMmKT47CiAK
IC8vIENhbGwgdGhpcyBtZXRob2Qgd2hlbmV2ZXIgeW91IHdhbnQgdG8gaW5zdGFsbCBhIHNpZ25h
bCBoYW5kbGVyLiBJdCdzIG9rIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBsYXppbHkuCiAvLyBOb3Rl
OiBZb3VyIHNpZ25hbCBoYW5kbGVyIHdpbGwgYmUgY2FsbGVkIGV2ZXJ5IHRpbWUgdGhlIGhhbmRs
ZXIgZm9yIHRoZSBkZXNpcmVkIHNpZ25hbCBpcyBjYWxsZWQuCkBAIC04Nyw5ICs5MiwxOSBAQCB1
c2luZyBTaWduYWxIYW5kbGVyID0gRnVuY3Rpb248U2lnbmFsQWN0aW9uKGludCwgc2lnaW5mb190
Kiwgdm9pZCopPjsKIC8vIFRoaXMgZnVuY3Rpb24gaXMgY3VycmVudGx5IGEgb25lIHdheSBzdHJl
ZXQgaS5lLiBvbmNlIGluc3RhbGxlZCwgYSBzaWduYWwgaGFuZGxlciBjYW5ub3QgYmUgdW5pbnN0
YWxsZWQuCiB2b2lkIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbCwgU2lnbmFsSGFuZGxlciYm
KTsKIAorCisjaWYgT1MoREFSV0lOKQorY2xhc3MgVGhyZWFkOwordm9pZCByZWdpc3RlclRocmVh
ZChUaHJlYWQqKTsKK3ZvaWQgcmVtb3ZlVGhyZWFkKFRocmVhZCopOworCit2b2lkIGhhbmRsZVNp
Z25hbHNXaXRoTWFjaCgpOworI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBX
VEY6OlNpZ25hbDsKK3VzaW5nIFdURjo6U2lnSW5mbzsKIHVzaW5nIFdURjo6dG9TeXN0ZW1TaWdu
YWw7CiB1c2luZyBXVEY6OmZyb21TeXN0ZW1TaWduYWw7CiB1c2luZyBXVEY6OlNpZ25hbEFjdGlv
bjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309680</attachid>
            <date>2017-05-10 20:05:56 -0700</date>
            <delta_ts>2017-05-11 09:26:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171865-20170510200556.patch</filename>
            <type>text/plain</type>
            <size>44955</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE2MTY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
MDcyZWVhOGJiODc4NzUzMmU1NGMyODRhYzA4OWNmZjIwYzdhM2EyLi43ZDYwYjA0MGFjMThlMjEw
NDEyNWQ4YjA2ZTI4MzFlZDZiZmFhNmMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzOSBAQAorMjAxNy0wNS0xMCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBVc2UgTWFjaCBleGNlcHRpb25zIGluc3RlYWQgb2Ygc2lnbmFscyB3
aGVyZSBwb3NzaWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTcxODY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhpcyBwYXRjaCBhZGRzIHNvbWUgbmV3IEpTQyBvcHRpb25zLiBUaGUgZmlyc3QgaXMg
YSBmdW5jdGlvbiB0aGF0CisgICAgICAgIGVuYWJsZXMgb3IgZGlzYWJsZXMgd2ViIGFzc2VtYmx5
IHRpZXIgdXAuIFRoZSBzZWNvbmQgY29udHJvbHMKKyAgICAgICAgd2hldGhlciBvciBub3Qgd2Ug
dXNlIG1hY2ggZXhjZXB0aW9ucyAod2hlcmUgYXZhaWxhYmxlKS4KKworICAgICAgICAqIEFQSS90
ZXN0cy9FeGVjdXRpb25UaW1lTGltaXRUZXN0LmNwcDoKKyAgICAgICAgKGRpc3BhdGNoVGVybWl0
YXRlQ2FsbGJhY2spOgorICAgICAgICAodGVzdEV4ZWN1dGlvblRpbWVMaW1pdCk6CisgICAgICAg
ICogcnVudGltZS9PcHRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6cmVjb21wdXRlRGVwZW5kZW50
T3B0aW9ucyk6CisgICAgICAgIChKU0M6Ok9wdGlvbnM6OmluaXRpYWxpemUpOgorICAgICAgICAq
IHJ1bnRpbWUvT3B0aW9ucy5oOgorICAgICAgICAqIHJ1bnRpbWUvVk1UcmFwcy5jcHA6CisgICAg
ICAgIChKU0M6OlNpZ25hbENvbnRleHQ6OlNpZ25hbENvbnRleHQpOgorICAgICAgICAoSlNDOjpT
aWduYWxDb250ZXh0OjphZGp1c3RQQ1RvUG9pbnRUb1RyYXBwaW5nSW5zdHJ1Y3Rpb24pOgorICAg
ICAgICAoSlNDOjppbnN0YWxsU2lnbmFsSGFuZGxlcik6CisgICAgICAgIChKU0M6OlZNVHJhcHM6
OlNpZ25hbFNlbmRlcjo6c2VuZCk6CisgICAgICAgICogdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXpl
ci5jcHA6CisgICAgICAgIChKU0M6OlNpZ25hbENvbnRleHQ6OlNpZ25hbENvbnRleHQpOgorICAg
ICAgICAoSlNDOjpTaWduYWxDb250ZXh0OjpkdW1wKToKKyAgICAgICAgKEpTQzo6aW5zdGFsbENy
YXNoSGFuZGxlcik6CisgICAgICAgICogd2FzbS9XYXNtQkJRUGxhbi5jcHA6CisgICAgICAgIChK
U0M6Oldhc206OkJCUVBsYW46OmNvbXBpbGVGdW5jdGlvbnMpOgorICAgICAgICAqIHdhc20vV2Fz
bUZhdWx0U2lnbmFsSGFuZGxlci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OnRyYXBIYW5kbGVy
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6ZW5hYmxlRmFzdE1lbW9yeSk6CisgICAgICAgICogd2Fz
bS9XYXNtTWFjaGluZVRocmVhZHMuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpzdGFydFRyYWNr
aW5nQ3VycmVudFRocmVhZCk6CisgICAgICAgIChKU0M6Oldhc206OnJlc2V0SW5zdHJ1Y3Rpb25D
YWNoZU9uQWxsVGhyZWFkcyk6CisKIDIwMTctMDUtMDMgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21p
bGxlckBhcHBsZS5jb20+CiAKICAgICAgICAgQXJyYXkucHJvdG90eXBlLnNvcnQgc2hvdWxkIGFs
c28gYWxsb3cgYSBudWxsIGNvbXBhcmF0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdl
TG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggMWFjZWNmYTQyYTYxZmU1Yzc4OTAzM2Jk
NzIxMzU1ZDRhMmRlODU2OC4uYjZiYzkxNWRlOGRkMTQ4ZjE2OTU2NzIyNTliZTU1ZTc2OWY5Njlm
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dURi9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw1MyBAQAorMjAxNy0wNS0xMCAgS2VpdGggTWlsbGVyICA8a2VpdGhf
bWlsbGVyQGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgTWFjaCBleGNlcHRpb25zIGluc3RlYWQg
b2Ygc2lnbmFscyB3aGVyZSBwb3NzaWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTcxODY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBlbmFibGVzIHVzaW5nIG1hY2ggZXhjZXB0aW9u
cyBvbiBkYXJ3aW4uIFRoZSB3YXkgdGhlCisgICAgICAgIG1hY2ggZXhjZXB0aW9uIGFwaSB3b3Jr
cyBpcyB0aGF0IHdlIGNyZWF0ZSBhIG1hY2ggcG9ydCwgd2hpY2ggaXMKKyAgICAgICAgbGlrZSBh
IGZpbGUgZGVzY3JpcHRvci4gIFdlIHRoZW4gd2FpdCBmb3IgYSBtZXNzYWdlIHRvIGFycml2ZSBv
bgorICAgICAgICB0aGF0IHBvcnQgaW4gYSB0aHJlYWQuIFdoZW4gYW5vdGhlciB0aHJlYWQgcmFp
c2VzIGEgZXhjZXB0aW9uIChzYXkKKyAgICAgICAgZHVlIHRvIGEgYmFkIG1lbW9yeSBhY2Nlc3Mp
IHRoZSBPUyBzZW5kcyBvdXIgdGhyZWFkIGEgbWVzc2FnZS4gVGhlCisgICAgICAgIHBheWxvYWQg
b2YgdGhhdCBtZXNzYWdlIGlzIHRoZSByZWdpc3RlciBmaWxlIG9mIHRoZSBjcmFzaGluZworICAg
ICAgICB0aHJlYWQuIFdlIHRoZW4gY2FsbCBvdXIgY3VzdG9tIGhhbmRsZXJzIHRoYXQgY2hhbmdl
IHRoZSBzdGF0ZSBhcworICAgICAgICBuZWVkZWQuIEluIG9yZGVyIHRvIHJlc3RhcnQgdGhlIHRo
cmVhZCB3ZSBzZW5kIGEgcGF5bG9hZCBiYWNrIHRvCisgICAgICAgIHRoZSBPUyB3aXRoIGFuIHVw
ZGF0ZWQgcmVnaXN0ZXIgZmlsZSBhbG9uZyB3aXRoIGEgc3VjY2VzcyBtZXNzYWdlCisgICAgICAg
IGhlYWRlci4KKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gbWFrZXMgdGhyZWFkIG1lc3NhZ2Vz
IHdvcmsgd2l0aG91dCBzaWduYWxzIGJ5CisgICAgICAgIHNpbXBseSBzdXNwZW5kaW5nIHRoZSB0
aHJlYWQgdGhlbiBydW5uaW5nIHRoZSBtZXNzYWdlIGF0IHRoYXQKKyAgICAgICAgdGltZS4KKwor
ICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9T
dGFja0JvdW5kcy5oOgorICAgICAgICAoV1RGOjpTdGFja0JvdW5kczo6U3RhY2tCb3VuZHMpOgor
ICAgICAgICAqIHd0Zi9UaHJlYWRNZXNzYWdlLmNwcDoKKyAgICAgICAgKFdURjo6c2VuZE1lc3Nh
Z2VTaWduYWwpOgorICAgICAgICAoV1RGOjpzZW5kTWVzc2FnZU1hY2gpOgorICAgICAgICAoV1RG
OjpkZWxpdmVyTWVzc2FnZXNVc2luZ01hY2gpOgorICAgICAgICAoV1RGOjpzZW5kTWVzc2FnZVNj
b3BlZCk6CisgICAgICAgICogd3RmL1RocmVhZE1lc3NhZ2UuaDoKKyAgICAgICAgKFdURjo6c2Vu
ZE1lc3NhZ2UpOgorICAgICAgICAqIHd0Zi9UaHJlYWRpbmcuaDoKKyAgICAgICAgKFdURjo6VGhy
ZWFkOjptYWNoVGhyZWFkKToKKyAgICAgICAgKiB3dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwOgor
ICAgICAgICAoV1RGOjpUaHJlYWQ6On5UaHJlYWQpOgorICAgICAgICAqIHd0Zi9tYWMvTWFjaEV4
Y2VwdGlvbnMuZGVmczogQ29waWVkIGZyb20gU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5o
LgorICAgICAgICAqIHd0Zi90aHJlYWRzL1NpZ25hbHMuY3BwOgorICAgICAgICAoV1RGOjpzdGFy
dE1hY2hFeGNlcHRpb25IYW5kbGVyVGhyZWFkKToKKyAgICAgICAgKFdURjo6ZnJvbU1hY2hFeGNl
cHRpb24pOgorICAgICAgICAoV1RGOjp0b01hY2hNYXNrKToKKyAgICAgICAgKFdURjo6c2V0RXhj
ZXB0aW9uUG9ydHMpOgorICAgICAgICAoV1RGOjphY3RpdmVUaHJlYWRzKToKKyAgICAgICAgKFdU
Rjo6cmVnaXN0ZXJUaHJlYWQpOgorICAgICAgICAoV1RGOjpyZW1vdmVUaHJlYWQpOgorICAgICAg
ICAoV1RGOjpoYW5kbGVTaWduYWxzV2l0aE1hY2gpOgorICAgICAgICAoV1RGOjppbnN0YWxsU2ln
bmFsSGFuZGxlcik6CisgICAgICAgIChXVEY6OmpzY1NpZ25hbEhhbmRsZXIpOgorICAgICAgICAq
IHd0Zi90aHJlYWRzL1NpZ25hbHMuaDoKKwogMjAxNy0wNS0wMyAgTWFyayBMYW0gIDxtYXJrLmxh
bUBhcHBsZS5jb20+CiAKICAgICAgICAgVXNlIHRoZSBDTG9vcCBmb3IgQ1BVKEFSTTY0RSkuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0V4ZWN1dGlvblRpbWVM
aW1pdFRlc3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9FeGVjdXRpb25U
aW1lTGltaXRUZXN0LmNwcAppbmRleCBkNWU1MzI0M2I3OGRmNzUxMzQyYWQ4ZDM5MGE0YjA0MTNk
OWVlZjllLi43ZWFjMDczMDlkZGMzZjE2NDk0NTBiZDAzNzlkMmNhMThmMDE2OWFhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0V4ZWN1dGlvblRpbWVMaW1pdFRl
c3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvRXhlY3V0aW9uVGlt
ZUxpbWl0VGVzdC5jcHAKQEAgLTMwLDggKzMwLDEzIEBACiAjaW5jbHVkZSAiSlNDb250ZXh0UmVm
UHJpdmF0ZS5oIgogI2luY2x1ZGUgIkphdmFTY3JpcHRDb3JlLmgiCiAjaW5jbHVkZSAiT3B0aW9u
cy5oIgorCiAjaW5jbHVkZSA8Y2hyb25vPgorI2luY2x1ZGUgPGRpc3BhdGNoL2Rpc3BhdGNoLmg+
CisjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KKyNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+CiAj
aW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ6OmNo
cm9ubzsKQEAgLTc3LDYgKzgyLDEzIEBAIHN0YXRpYyBib29sIGV4dGVuZFRlcm1pbmF0ZUNhbGxi
YWNrKEpTQ29udGV4dFJlZiBjdHgsIHZvaWQqKQogICAgIHJldHVybiB0cnVlOwogfQogCitib29s
IGRpc3BhdGNoVGVybWluYXRlQ2FsbGJhY2tDYWxsZWQgPSBmYWxzZTsKK3N0YXRpYyBib29sIGRp
c3BhdGNoVGVybWl0YXRlQ2FsbGJhY2soSlNDb250ZXh0UmVmLCB2b2lkKikKK3sKKyAgICBkaXNw
YXRjaFRlcm1pbmF0ZUNhbGxiYWNrQ2FsbGVkID0gdHJ1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kwogc3RydWN0IFRpZXJPcHRpb25zIHsKICAgICBjb25zdCBjaGFyKiB0aWVyOwogICAgIHVuc2ln
bmVkIHRpbWVMaW1pdEFkanVzdG1lbnRNaWxsaXM7CkBAIC0zNjUsNiArMzc3LDYzIEBAIGludCB0
ZXN0RXhlY3V0aW9uVGltZUxpbWl0KCkKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCisgICAg
ICAgIC8qIFRlc3Qgc2NyaXB0IHRpbWVvdXQgZnJvbSBkaXNwYXRjaCBxdWV1ZTogKi8KKyAgICAg
ICAgdGltZUxpbWl0ID0gKDEwMCArIHRpZXJBZGp1c3RtZW50TWlsbGlzKSAvIDEwMDAuMDsKKyAg
ICAgICAgSlNDb250ZXh0R3JvdXBTZXRFeGVjdXRpb25UaW1lTGltaXQoY29udGV4dEdyb3VwLCB0
aW1lTGltaXQsIGRpc3BhdGNoVGVybWl0YXRlQ2FsbGJhY2ssIDApOworICAgICAgICB7CisgICAg
ICAgICAgICB1bnNpZ25lZCB0aW1lQWZ0ZXJXYXRjaGRvZ1Nob3VsZEhhdmVGaXJlZCA9IDMwMCAr
IHRpZXJBZGp1c3RtZW50TWlsbGlzOworCisgICAgICAgICAgICBTdHJpbmdCdWlsZGVyIHNjcmlw
dEJ1aWxkZXI7CisgICAgICAgICAgICBzY3JpcHRCdWlsZGVyLmFwcGVuZExpdGVyYWwoImZ1bmN0
aW9uIGZvbygpIHsgdmFyIHN0YXJ0VGltZSA9IGN1cnJlbnRDUFVUaW1lKCk7IHdoaWxlICh0cnVl
KSB7IGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDsgaSsrKTsgaWYgKGN1cnJlbnRDUFVUaW1lKCkg
LSBzdGFydFRpbWUgPiAiKTsKKyAgICAgICAgICAgIHNjcmlwdEJ1aWxkZXIuYXBwZW5kTnVtYmVy
KHRpbWVBZnRlcldhdGNoZG9nU2hvdWxkSGF2ZUZpcmVkIC8gMTAwMC4wKTsKKyAgICAgICAgICAg
IHNjcmlwdEJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiKSBicmVhazsgfSB9IGZvbygpOyIpOworCisg
ICAgICAgICAgICBKU1N0cmluZ1JlZiBzY3JpcHQgPSBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZyhzY3JpcHRCdWlsZGVyLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAg
ICBleGNlcHRpb24gPSBudWxscHRyOworICAgICAgICAgICAgZGlzcGF0Y2hUZXJtaW5hdGVDYWxs
YmFja0NhbGxlZCA9IGZhbHNlOworCisgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGRvIHRoaXMg
c2luY2UgYmxvY2tzIGNhbiBvbmx5IGNhcHR1cmUgdGhpbmdzIGFzIGNvbnN0LgorICAgICAgICAg
ICAgSlNHbG9iYWxDb250ZXh0UmVmJiBjb250ZXh0UmVmID0gY29udGV4dDsKKyAgICAgICAgICAg
IEpTU3RyaW5nUmVmJiBzY3JpcHRSZWYgPSBzY3JpcHQ7CisgICAgICAgICAgICBKU1ZhbHVlUmVm
JiBleGNlcHRpb25SZWYgPSBleGNlcHRpb247CisKKyAgICAgICAgICAgIExvY2sgc3luY0xvY2s7
CisgICAgICAgICAgICBMb2NrJiBzeW5jTG9ja1JlZiA9IHN5bmNMb2NrOworICAgICAgICAgICAg
Q29uZGl0aW9uIHN5bmNocm9uaXplOworICAgICAgICAgICAgQ29uZGl0aW9uJiBzeW5jaHJvbml6
ZVJlZiA9IHN5bmNocm9uaXplOworICAgICAgICAgICAgYm9vbCBkaWRTeW5jaHJvbml6ZSA9IGZh
bHNlOworICAgICAgICAgICAgYm9vbCYgZGlkU3luY2hyb25pemVSZWYgPSBkaWRTeW5jaHJvbml6
ZTsKKworICAgICAgICAgICAgc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcyBzdGFydFRpbWU7Cisg
ICAgICAgICAgICBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzIGVuZFRpbWU7CisKKyAgICAgICAg
ICAgIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMmIHN0YXJ0VGltZVJlZiA9IHN0YXJ0VGltZTsK
KyAgICAgICAgICAgIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMmIGVuZFRpbWVSZWYgPSBlbmRU
aW1lOworCisgICAgICAgICAgICBkaXNwYXRjaF9ncm91cF90IGdyb3VwID0gZGlzcGF0Y2hfZ3Jv
dXBfY3JlYXRlKCk7CisgICAgICAgICAgICBkaXNwYXRjaF9ncm91cF9hc3luYyhncm91cCwgZGlz
cGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZSgwLCAwKSwgXnsKKyAgICAgICAgICAgICAgICBzdGFydFRp
bWVSZWYgPSBjdXJyZW50Q1BVVGltZSgpOworICAgICAgICAgICAgICAgIEpTRXZhbHVhdGVTY3Jp
cHQoY29udGV4dFJlZiwgc2NyaXB0UmVmLCBudWxscHRyLCBudWxscHRyLCAxLCAmZXhjZXB0aW9u
UmVmKTsKKyAgICAgICAgICAgICAgICBlbmRUaW1lUmVmID0gY3VycmVudENQVVRpbWUoKTsKKyAg
ICAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IFdURjo6aG9sZExvY2soc3luY0xvY2tSZWYpOwor
ICAgICAgICAgICAgICAgIGRpZFN5bmNocm9uaXplUmVmID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICBzeW5jaHJvbml6ZVJlZi5ub3RpZnlBbGwoKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAg
ICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHN5bmNMb2NrKTsKKyAgICAgICAgICAgIHN5bmNo
cm9uaXplLndhaXQoc3luY0xvY2ssIFsmXSB7IHJldHVybiBkaWRTeW5jaHJvbml6ZTsgfSk7CisK
KyAgICAgICAgICAgIGlmICgoKGVuZFRpbWUgLSBzdGFydFRpbWUpIDwgbWlsbGlzZWNvbmRzKHRp
bWVBZnRlcldhdGNoZG9nU2hvdWxkSGF2ZUZpcmVkKSkgJiYgZGlzcGF0Y2hUZXJtaW5hdGVDYWxs
YmFja0NhbGxlZCkKKyAgICAgICAgICAgICAgICBwcmludGYoIlBBU1M6ICVzIHNjcmlwdCBvbiBk
aXNwYXRjaCBxdWV1ZSB0aW1lZCBvdXQgYXMgZXhwZWN0ZWQuXG4iLCB0aWVyT3B0aW9ucy50aWVy
KTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlmICgoZW5kVGltZSAtIHN0
YXJ0VGltZSkgPj0gbWlsbGlzZWNvbmRzKHRpbWVBZnRlcldhdGNoZG9nU2hvdWxkSGF2ZUZpcmVk
KSkKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJGQUlMOiAlcyBzY3JpcHQgb24gZGlzcGF0
Y2ggcXVldWUgZGlkIG5vdCB0aW1lIG91dCBhcyBleHBlY3RlZC5cbiIsIHRpZXJPcHRpb25zLnRp
ZXIpOworICAgICAgICAgICAgICAgIGlmICghc2hvdWxkVGVybWluYXRlQ2FsbGJhY2tXYXNDYWxs
ZWQpCisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiRkFJTDogJXMgc2NyaXB0IG9uIGRpc3Bh
dGNoIHF1ZXVlIHRpbWVvdXQgY2FsbGJhY2sgd2FzIG5vdCBjYWxsZWQuXG4iLCB0aWVyT3B0aW9u
cy50aWVyKTsKKyAgICAgICAgICAgICAgICBmYWlsZWQgPSB0cnVlOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKICAgICAgICAgSlNHbG9iYWxDb250ZXh0UmVsZWFzZShjb250ZXh0KTsKIAog
ICAgICAgICBPcHRpb25zOjpzZXRPcHRpb25zKHNhdmVkT3B0aW9uc0J1aWxkZXIudG9TdHJpbmco
KS5hc2NpaSgpLmRhdGEoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0xvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNw
cAppbmRleCBjMTc1YWUwYzQ4MmVkMjdiZDVmNmJkYzg3OTY4ZTc1ZDQ1YWY1MGVmLi5mNTcxZGRi
Y2NiYTk2MDFiZjZiMTE0YTdkNjJhYWNlNDYzY2I3ZDhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTG9jay5jcHAKQEAgLTMwLDYgKzMwLDggQEAKICNpbmNsdWRlICJTYW1wbGlu
Z1Byb2ZpbGVyLmgiCiAjaW5jbHVkZSAiV2FzbU1hY2hpbmVUaHJlYWRzLmgiCiAjaW5jbHVkZSA8
dGhyZWFkPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGhyZWFk
cy9TaWduYWxzLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0xNDgsNiArMTUwLDggQEAgdm9p
ZCBKU0xvY2s6OmRpZEFjcXVpcmVMb2NrKCkKICAgICBXYXNtOjpzdGFydFRyYWNraW5nQ3VycmVu
dFRocmVhZCgpOwogI2VuZGlmCiAKKyAgICBXVEY6OnJlZ2lzdGVyVGhyZWFkKCZUaHJlYWQ6OmN1
cnJlbnQoKSk7CisKICAgICBtX3ZtLT50cmFwcygpLm5vdGlmeUdyYWJBbGxMb2NrcygpOwogCiAj
aWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9PcHRpb25zLmNwcAppbmRleCBiMDRkZTM1YTUzNjE1MDg0Mzg1NzVjMjI3YTUwMTRkZDBjNTFi
YWEyLi40MzEzZTI0NGNlOTBiMTJjYzMzNDZkN2I1ZWQzY2Y3OWMwMDRhZWE4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcApAQCAtNDMsNiArNDMsNyBAQAogI2lu
Y2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0Zi90aHJl
YWRzL1NpZ25hbHMuaD4KIAogI2lmIFBMQVRGT1JNKENPQ09BKQogI2luY2x1ZGUgPGNydF9leHRl
cm5zLmg+CkBAIC00ODYsNiArNDg3LDcgQEAgc3RhdGljIHZvaWQgcmVjb21wdXRlRGVwZW5kZW50
T3B0aW9ucygpCiAKICAgICBpZiAoT3B0aW9uczo6dXNlU2lnaWxsQ3Jhc2hBbmFseXplcigpKQog
ICAgICAgICBlbmFibGVTaWdpbGxDcmFzaEFuYWx5emVyKCk7CisKIH0KIAogdm9pZCBPcHRpb25z
Ojppbml0aWFsaXplKCkKQEAgLTU0NSw2ICs1NDcsOSBAQCB2b2lkIE9wdGlvbnM6OmluaXRpYWxp
emUoKQogCiAgICAgICAgICAgICBkdW1wT3B0aW9uc0lmTmVlZGVkKCk7CiAgICAgICAgICAgICBl
bnN1cmVPcHRpb25zQXJlQ29oZXJlbnQoKTsKKworICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnVz
ZU1hY2hGb3JFeGNlcHRpb25zKCkpCisgICAgICAgICAgICAgICAgV1RGOjpoYW5kbGVTaWduYWxz
V2l0aE1hY2goKTsKICAgICAgICAgfSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wdGlvbnMuaAppbmRleCBkNjcyNGM1YTdjZDZjMGIzNTdjNDk5N2IzYWUyOWY1NWQ1ZGIzZjJi
Li4zYmUxY2EzMTM5NDRlYzRhYWM2N2ZkNzRkZjAxMmQ1ZGRlMzczZjI3IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCkBAIC00MTQsNiArNDE0LDggQEAgdHlwZWRlZiBj
b25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAgdih1bnNpZ25lZCwgd2F0Y2hkb2csIDAsIE5v
cm1hbCwgIndhdGNoZG9nIHRpbWVvdXQgKDAgPSBEaXNhYmxlZCwgTiA9IGEgdGltZW91dCBwZXJp
b2Qgb2YgTiBtaWxsaXNlY29uZHMpIikgXAogICAgIHYoYm9vbCwgdXNlUG9sbGluZ1RyYXBzLCBm
YWxzZSwgTm9ybWFsLCAidXNlIHBvbGxpbmcgKGluc3RlYWQgb2Ygc2lnbmFsbGluZykgVk0gdHJh
cHMiKSBcCiAgICAgXAorICAgIHYoYm9vbCwgdXNlTWFjaEZvckV4Y2VwdGlvbnMsIHRydWUsIE5v
cm1hbCwgIlVzZSBtYWNoIGV4Y2VwdGlvbnMgcmF0aGVyIHRoYW4gc2lnbmFscyB0byBoYW5kbGUg
ZmF1bHRzIGFuZCBwYXNzIHRocmVhZCBtZXNzYWdlcy4gKFRoaXMgZG9lcyBub3RoaW5nIG9uIHBs
YXRmb3JtcyB3aXRob3V0IG1hY2gpIikgXAorICAgIFwKICAgICB2KGJvb2wsIHVzZUlDU3RhdHMs
IGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICBcCiAgICAgdih1bnNpZ25lZCwgcHJvdG90
eXBlSGl0Q291bnRGb3JMTEludENhY2hpbmcsIDIsIE5vcm1hbCwgIk51bWJlciBvZiBwcm90b3R5
cGUgcHJvcGVydHkgaGl0cyBiZWZvcmUgY2FjaGluZyBhIHByb3RvdHlwZSBpbiB0aGUgTExJbnQu
IEEgY291bnQgb2YgMCBtZWFucyBuZXZlciBjYWNoZS4iKSBcCkBAIC00MzcsNiArNDM5LDcgQEAg
dHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAgdih1bnNpZ25lZCwgd2ViQXNz
ZW1ibHlCQlFPcHRpbWl6YXRpb25MZXZlbCwgMSwgTm9ybWFsLCAiQjMgT3B0aW1pemF0aW9uIGxl
dmVsIGZvciBCQlEgV2ViIEFzc2VtYmx5IG1vZHVsZSBjb21waWxhdGlvbnMuIikgXAogICAgIHYo
dW5zaWduZWQsIHdlYkFzc2VtYmx5T01HT3B0aW1pemF0aW9uTGV2ZWwsIE9wdGlvbnM6OmRlZmF1
bHRCM09wdExldmVsKCksIE5vcm1hbCwgIkIzIE9wdGltaXphdGlvbiBsZXZlbCBmb3IgT01HIFdl
YiBBc3NlbWJseSBtb2R1bGUgY29tcGlsYXRpb25zLiIpIFwKICAgICBcCisgICAgdihib29sLCB1
c2VCQlFUaWVyVXBDaGVja3MsIHRydWUsIE5vcm1hbCwgIkVuYWJsZXMgdGllciB1cCBjaGVja3Mg
Zm9yIG91ciBCQlEgY29kZS4iKSBcCiAgICAgdih1bnNpZ25lZCwgd2ViQXNzZW1ibHlPTUdUaWVy
VXBDb3VudCwgNTAwMCwgTm9ybWFsLCAiVGhlIGNvdW50ZG93biBiZWZvcmUgd2UgdGllciB1cCBh
IGZ1bmN0aW9uIHRvIE9NRy4iKSBcCiAgICAgdih1bnNpZ25lZCwgd2ViQXNzZW1ibHlMb29wRGVj
cmVtZW50LCAxNSwgTm9ybWFsLCAiVGhlIGFtb3VudCB0aGUgdGllciB1cCBjb3VudGRvd24gaXMg
ZGVjcmVtZW50ZWQgb24gZWFjaCBsb29wIGJhY2tlZGdlLiIpIFwKICAgICB2KHVuc2lnbmVkLCB3
ZWJBc3NlbWJseUZ1bmN0aW9uRW50cnlEZWNyZW1lbnQsIDEsIE5vcm1hbCwgIlRoZSBhbW91bnQg
dGhlIHRpZXIgdXAgY291bnRkb3duIGlzIGRlY3JlbWVudGVkIG9uIGVhY2ggZnVuY3Rpb24gZW50
cnkuIikgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFw
cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcAppbmRleCAx
YmFhY2U2MDQ0ZTY2MGE4ZTU0NDFmYmFkMDE4ZWE5MDkzMWE0YzkxLi4xMGQ3ODJhOGRjNDlhNWVk
YTA4MWQ3M2Q2ODNkZmZlMTZmOGM4ZjQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTVRyYXBzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTVRyYXBzLmNwcApAQCAtNTMsMTEgKzUzLDExIEBAIEFMV0FZU19JTkxJTkUgVk0mIFZNVHJh
cHM6OnZtKCkgY29uc3QKICNpZiBFTkFCTEUoU0lHTkFMX0JBU0VEX1ZNX1RSQVBTKQogCiBzdHJ1
Y3QgU2lnbmFsQ29udGV4dCB7Ci0gICAgU2lnbmFsQ29udGV4dChtY29udGV4dF90JiBtY29udGV4
dCkKLSAgICAgICAgOiBtY29udGV4dChtY29udGV4dCkKLSAgICAgICAgLCB0cmFwUEMoTWFjaGlu
ZUNvbnRleHQ6Omluc3RydWN0aW9uUG9pbnRlcihtY29udGV4dCkpCi0gICAgICAgICwgc3RhY2tQ
b2ludGVyKE1hY2hpbmVDb250ZXh0OjpzdGFja1BvaW50ZXIobWNvbnRleHQpKQotICAgICAgICAs
IGZyYW1lUG9pbnRlcihNYWNoaW5lQ29udGV4dDo6ZnJhbWVQb2ludGVyKG1jb250ZXh0KSkKKyAg
ICBTaWduYWxDb250ZXh0KFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMpCisgICAgICAgIDog
Y29udGV4dChyZWdpc3RlcnMpCisgICAgICAgICwgdHJhcFBDKE1hY2hpbmVDb250ZXh0OjppbnN0
cnVjdGlvblBvaW50ZXIoY29udGV4dCkpCisgICAgICAgICwgc3RhY2tQb2ludGVyKE1hY2hpbmVD
b250ZXh0OjpzdGFja1BvaW50ZXIoY29udGV4dCkpCisgICAgICAgICwgZnJhbWVQb2ludGVyKE1h
Y2hpbmVDb250ZXh0OjpmcmFtZVBvaW50ZXIoY29udGV4dCkpCiAgICAgewogI2lmIENQVShYODZf
NjQpIHx8IENQVShYODYpCiAgICAgICAgIC8vIE9uIFg4Nl82NCwgU0lHVFJBUCByZXBvcnRzIHRo
ZSBhZGRyZXNzIGFmdGVyIHRoZSB0cmFwcGluZyBQQy4gU28sIGRlYyBieSAxLgpAQCAtNjgsMTEg
KzY4LDExIEBAIHN0cnVjdCBTaWduYWxDb250ZXh0IHsKICAgICB2b2lkIGFkanVzdFBDVG9Qb2lu
dFRvVHJhcHBpbmdJbnN0cnVjdGlvbigpCiAgICAgewogI2lmIENQVShYODZfNjQpIHx8IENQVShY
ODYpCi0gICAgICAgIE1hY2hpbmVDb250ZXh0OjppbnN0cnVjdGlvblBvaW50ZXIobWNvbnRleHQp
ID0gdHJhcFBDOworICAgICAgICBNYWNoaW5lQ29udGV4dDo6aW5zdHJ1Y3Rpb25Qb2ludGVyKGNv
bnRleHQpID0gdHJhcFBDOwogI2VuZGlmCiAgICAgfQogCi0gICAgbWNvbnRleHRfdCYgbWNvbnRl
eHQ7CisgICAgUGxhdGZvcm1SZWdpc3RlcnMmIGNvbnRleHQ7CiAgICAgdm9pZCogdHJhcFBDOwog
ICAgIHZvaWQqIHN0YWNrUG9pbnRlcjsKICAgICB2b2lkKiBmcmFtZVBvaW50ZXI7CkBAIC0xMzAs
MTEgKzEzMCwxMyBAQCBzdGF0aWMgRXhwZWN0ZWQ8Vk1BbmRTdGFja0JvdW5kcywgVk1UcmFwczo6
RXJyb3I+IGZpbmRBY3RpdmVWTUFuZFN0YWNrQm91bmRzKFNpZwogCiBzdGF0aWMgdm9pZCBpbnN0
YWxsU2lnbmFsSGFuZGxlcigpCiB7Ci0gICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFsOjpU
cmFwLCBbXSAoaW50LCBzaWdpbmZvX3QqLCB2b2lkKiB1YXApIC0+IFNpZ25hbEFjdGlvbiB7Ci0g
ICAgICAgIFNpZ25hbENvbnRleHQgY29udGV4dChzdGF0aWNfY2FzdDx1Y29udGV4dF90Kj4odWFw
KS0+dWNfbWNvbnRleHQpOworICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbDo6VHJhcCwg
W10gKFNpZ25hbCwgU2lnSW5mbyYsIFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMpIC0+IFNp
Z25hbEFjdGlvbiB7CisgICAgICAgIFNpZ25hbENvbnRleHQgY29udGV4dChyZWdpc3RlcnMpOwog
Ci0gICAgICAgIGlmICghaXNKSVRQQyhjb250ZXh0LnRyYXBQQykpCisgICAgICAgIGlmICghaXNK
SVRQQyhjb250ZXh0LnRyYXBQQykpIHsKKyAgICAgICAgICAgIGRhdGFMb2dMbigidHJhcHBpbmcg
cGM6ICIsIFJhd1BvaW50ZXIoY29udGV4dC50cmFwUEMpLCAiIGppdCBzdGFydDogIiwgc3RhcnRP
ZkZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2wsICIgaml0IGVuZDogIiwgZW5kT2ZGaXhlZEV4ZWN1
dGFibGVNZW1vcnlQb29sKTsKICAgICAgICAgICAgIHJldHVybiBTaWduYWxBY3Rpb246Ok5vdEhh
bmRsZWQ7CisgICAgICAgIH0KIAogICAgICAgICAvLyBGSVhNRTogVGhpcyBjdXJyZW50bHkgZWF0
cyBhbGwgdHJhcHMgaW5jbHVkaW5nIGppdCBhc3NlcnRzIHdlIHNob3VsZCBtYWtlIHN1cmUgdGhp
cwogICAgICAgICAvLyBhbHdheXMgd29ya3MuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzEwMzkKQEAgLTQwNCw4ICs0MDYsOCBAQCB2b2lkIFZNVHJhcHM6OlNpZ25h
bFNlbmRlcjo6c2VuZCgpCiAgICAgICAgICAgICBWTSYgdm0gPSAqbV92bTsKICAgICAgICAgICAg
IGF1dG8gb3B0aW9uYWxPd25lclRocmVhZCA9IHZtLm93bmVyVGhyZWFkKCk7CiAgICAgICAgICAg
ICBpZiAob3B0aW9uYWxPd25lclRocmVhZCkgewotICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdl
KCpvcHRpb25hbE93bmVyVGhyZWFkLnZhbHVlKCkuZ2V0KCksIFtdIChzaWdpbmZvX3QqLCB1Y29u
dGV4dF90KiB1Y29udGV4dCkgLT4gdm9pZCB7Ci0gICAgICAgICAgICAgICAgICAgIFNpZ25hbENv
bnRleHQgY29udGV4dCh1Y29udGV4dC0+dWNfbWNvbnRleHQpOworICAgICAgICAgICAgICAgIHNl
bmRNZXNzYWdlKCpvcHRpb25hbE93bmVyVGhyZWFkLnZhbHVlKCkuZ2V0KCksIFtdIChQbGF0Zm9y
bVJlZ2lzdGVycyYgcmVnaXN0ZXJzKSAtPiB2b2lkIHsKKyAgICAgICAgICAgICAgICAgICAgU2ln
bmFsQ29udGV4dCBjb250ZXh0KHJlZ2lzdGVycyk7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8g
YWN0aXZlVk1BbmRTdGFja0JvdW5kcyA9IGZpbmRBY3RpdmVWTUFuZFN0YWNrQm91bmRzKGNvbnRl
eHQpOwogICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aXZlVk1BbmRTdGFja0JvdW5kcykgewog
ICAgICAgICAgICAgICAgICAgICAgICAgVk0qIHZtID0gYWN0aXZlVk1BbmRTdGFja0JvdW5kcy52
YWx1ZSgpLnZtOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1NpZ2ls
bENyYXNoQW5hbHl6ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1NpZ2lsbENy
YXNoQW5hbHl6ZXIuY3BwCmluZGV4IDRhZGFlZmYxY2RhMmQxZmJjNmY5MDYxZjA2M2UxNGQyZTYz
MzAwNDguLmJiNDYwNWM2OTNlMTJkZGUwNTA4NGY3YTE3Y2QxZTQ0ZjdlOWU2NzUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9TaWdpbGxDcmFzaEFuYWx5emVyLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAK
QEAgLTc4LDExICs3OCwxMSBAQCBwcml2YXRlOgogI2VuZGlmIC8vIFVTRShPU19MT0cpCiAKIHN0
cnVjdCBTaWduYWxDb250ZXh0IHsKLSAgICBTaWduYWxDb250ZXh0KG1jb250ZXh0X3QmIG1jb250
ZXh0KQotICAgICAgICA6IG1jb250ZXh0KG1jb250ZXh0KQotICAgICAgICAsIG1hY2hpbmVQQyhN
YWNoaW5lQ29udGV4dDo6aW5zdHJ1Y3Rpb25Qb2ludGVyKG1jb250ZXh0KSkKLSAgICAgICAgLCBz
dGFja1BvaW50ZXIoTWFjaGluZUNvbnRleHQ6OnN0YWNrUG9pbnRlcihtY29udGV4dCkpCi0gICAg
ICAgICwgZnJhbWVQb2ludGVyKE1hY2hpbmVDb250ZXh0OjpmcmFtZVBvaW50ZXIobWNvbnRleHQp
KQorICAgIFNpZ25hbENvbnRleHQoUGxhdGZvcm1SZWdpc3RlcnMmIGNvbnRleHQpCisgICAgICAg
IDogY29udGV4dChjb250ZXh0KQorICAgICAgICAsIG1hY2hpbmVQQyhNYWNoaW5lQ29udGV4dDo6
aW5zdHJ1Y3Rpb25Qb2ludGVyKGNvbnRleHQpKQorICAgICAgICAsIHN0YWNrUG9pbnRlcihNYWNo
aW5lQ29udGV4dDo6c3RhY2tQb2ludGVyKGNvbnRleHQpKQorICAgICAgICAsIGZyYW1lUG9pbnRl
cihNYWNoaW5lQ29udGV4dDo6ZnJhbWVQb2ludGVyKGNvbnRleHQpKQogICAgIHsgfQogCiAgICAg
dm9pZCBkdW1wKCkKQEAgLTExMiw3ICsxMTIsNyBAQCBzdHJ1Y3QgU2lnbmFsQ29udGV4dCB7CiAg
ICAgICAgIHYoZ3MpCiAKICNkZWZpbmUgRFVNUF9SRUdJU1RFUihfX3JlZykgXAotICAgICAgICBs
b2coIlJlZ2lzdGVyICIgI19fcmVnICI6ICVwIiwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obWNv
bnRleHQtPl9fc3MuX18jI19fcmVnKSk7CisgICAgICAgIGxvZygiUmVnaXN0ZXIgIiAjX19yZWcg
IjogJXAiLCByZWludGVycHJldF9jYXN0PHZvaWQqPihjb250ZXh0Ll9fIyNfX3JlZykpOwogICAg
ICAgICBGT1JfRUFDSF9SRUdJU1RFUihEVU1QX1JFR0lTVEVSKQogI3VuZGVmIEZPUl9FQUNIX1JF
R0lTVEVSCiAKQEAgLTEyMCwyMCArMTIwLDIwIEBAIHN0cnVjdCBTaWduYWxDb250ZXh0IHsKICAg
ICAgICAgaW50IGk7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAyODsgaSArPSA0KSB7CiAgICAg
ICAgICAgICBsb2coInglZDogJTAxNmxseCB4JWQ6ICUwMTZsbHggeCVkOiAlMDE2bGx4IHglZDog
JTAxNmxseCIsCi0gICAgICAgICAgICAgICAgaSwgbWNvbnRleHQtPl9fc3MuX194W2ldLAotICAg
ICAgICAgICAgICAgIGkrMSwgbWNvbnRleHQtPl9fc3MuX194W2krMV0sCi0gICAgICAgICAgICAg
ICAgaSsyLCBtY29udGV4dC0+X19zcy5fX3hbaSsyXSwKLSAgICAgICAgICAgICAgICBpKzMsIG1j
b250ZXh0LT5fX3NzLl9feFtpKzNdKTsKKyAgICAgICAgICAgICAgICBpLCBjb250ZXh0Ll9feFtp
XSwKKyAgICAgICAgICAgICAgICBpKzEsIGNvbnRleHQuX194W2krMV0sCisgICAgICAgICAgICAg
ICAgaSsyLCBjb250ZXh0Ll9feFtpKzJdLAorICAgICAgICAgICAgICAgIGkrMywgY29udGV4dC5f
X3hbaSszXSk7CiAgICAgICAgIH0KICAgICAgICAgQVNTRVJUKGkgPCAyOSk7CiAgICAgICAgIGxv
ZygieCVkOiAlMDE2bGx4IGZwOiAlMDE2bGx4IGxyOiAlMDE2bGx4IiwKLSAgICAgICAgICAgIGks
IG1jb250ZXh0LT5fX3NzLl9feFtpXSwgbWNvbnRleHQtPl9fc3MuX19mcCwgbWNvbnRleHQtPl9f
c3MuX19scik7CisgICAgICAgICAgICBpLCBjb250ZXh0Ll9feFtpXSwgY29udGV4dC5fX2ZwLCBj
b250ZXh0Ll9fbHIpOwogICAgICAgICBsb2coInNwOiAlMDE2bGx4IHBjOiAlMDE2bGx4IGNwc3I6
ICUwOHgiLAotICAgICAgICAgICAgbWNvbnRleHQtPl9fc3MuX19zcCwgbWNvbnRleHQtPl9fc3Mu
X19wYywgbWNvbnRleHQtPl9fc3MuX19jcHNyKTsKKyAgICAgICAgICAgIGNvbnRleHQuX19zcCwg
Y29udGV4dC5fX3BjLCBjb250ZXh0Ll9fY3Bzcik7CiAjZW5kaWYKICAgICB9CiAKLSAgICBtY29u
dGV4dF90JiBtY29udGV4dDsKKyAgICBQbGF0Zm9ybVJlZ2lzdGVycyYgY29udGV4dDsKICAgICB2
b2lkKiBtYWNoaW5lUEM7CiAgICAgdm9pZCogc3RhY2tQb2ludGVyOwogICAgIHZvaWQqIGZyYW1l
UG9pbnRlcjsKQEAgLTE0Miw4ICsxNDIsOCBAQCBzdHJ1Y3QgU2lnbmFsQ29udGV4dCB7CiBzdGF0
aWMgdm9pZCBpbnN0YWxsQ3Jhc2hIYW5kbGVyKCkKIHsKICNpZiBDUFUoWDg2XzY0KSB8fCBDUFUo
QVJNNjQpCi0gICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFsOjpJbGwsIFtdIChpbnQsIHNp
Z2luZm9fdCosIHZvaWQqIHVhcCkgewotICAgICAgICBTaWduYWxDb250ZXh0IGNvbnRleHQoc3Rh
dGljX2Nhc3Q8dWNvbnRleHRfdCo+KHVhcCktPnVjX21jb250ZXh0KTsKKyAgICBpbnN0YWxsU2ln
bmFsSGFuZGxlcihTaWduYWw6OklsbCwgW10gKFNpZ25hbCwgU2lnSW5mbyYsIFBsYXRmb3JtUmVn
aXN0ZXJzJiByZWdpc3RlcnMpIHsKKyAgICAgICAgU2lnbmFsQ29udGV4dCBjb250ZXh0KHJlZ2lz
dGVycyk7CiAKICAgICAgICAgaWYgKCFpc0pJVFBDKGNvbnRleHQubWFjaGluZVBDKSkKICAgICAg
ICAgICAgIHJldHVybiBTaWduYWxBY3Rpb246Ok5vdEhhbmRsZWQ7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAKaW5kZXggMWRkMGNkMWQ4MzVjNmMyZjIzMWIwMGI4
ODZkZGU0YWY3MmMyNjNjZS4uYjFiNTk4ZDIwYzVjMDA3N2Q5ZTlkMDhlMzY4YWQ1Y2ExNzgzMWJh
ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcApAQCAtMjQy
LDcgKzI0Miw3IEBAIHZvaWQgQkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyhDb21waWxhdGlvbkVm
Zm9ydCBlZmZvcnQpCiAgICAgICAgIEFTU0VSVCh2YWxpZGF0ZUZ1bmN0aW9uKGZ1bmN0aW9uU3Rh
cnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCkp
KTsKIAogICAgICAgICBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdID0g
VmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KCk7Ci0gICAgICAgIFRpZXJVcENvdW50KiB0
aWVyVXAgPSAmbV90aWVyVXBDb3VudHNbZnVuY3Rpb25JbmRleF07CisgICAgICAgIFRpZXJVcENv
dW50KiB0aWVyVXAgPSBPcHRpb25zOjp1c2VCQlFUaWVyVXBDaGVja3MoKSA/ICZtX3RpZXJVcENv
dW50c1tmdW5jdGlvbkluZGV4XSA6IG51bGxwdHI7CiAgICAgICAgIGF1dG8gcGFyc2VBbmRDb21w
aWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlKG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5jdGlv
bkluZGV4XSwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgbV91bmxp
bmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5n
ZXQoKSwgbV9tb2RlLCBDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRp
ZXJVcCk7CiAKICAgICAgICAgaWYgKFVOTElLRUxZKCFwYXJzZUFuZENvbXBpbGVSZXN1bHQpKSB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxI
YW5kbGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhh
bmRsZXIuY3BwCmluZGV4IDJlMGM5OWEzOWJlYmQzMTc4YjkxNDhkOTU4ZmU1M2U1N2E2MjI5N2Uu
LjI2NGMzNGRlNDVkYTE3NWE1ZDUxNDFjMTcxZWZlOTVlMDYzYzVlMjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwCkBA
IC01Miw5ICs1Miw4IEBAIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxzdGQ6OnR1
cGxlPHZvaWQqLCB2b2lkKj4+PiBjb2RlTG9jYXRpb25zOyAvLyAoCiAKIHN0YXRpYyBib29sIGZh
c3RIYW5kbGVySW5zdGFsbGVkIHsgZmFsc2UgfTsKIAotc3RhdGljIFNpZ25hbEFjdGlvbiB0cmFw
SGFuZGxlcihpbnQsIHNpZ2luZm9fdCogc2lnSW5mbywgdm9pZCogdWNvbnRleHQpCitzdGF0aWMg
U2lnbmFsQWN0aW9uIHRyYXBIYW5kbGVyKFNpZ25hbCwgU2lnSW5mbyYgc2lnSW5mbywgUGxhdGZv
cm1SZWdpc3RlcnMmIGNvbnRleHQpCiB7Ci0gICAgbWNvbnRleHRfdCYgY29udGV4dCA9IHN0YXRp
Y19jYXN0PHVjb250ZXh0X3QqPih1Y29udGV4dCktPnVjX21jb250ZXh0OwogICAgIHZvaWQqIGZh
dWx0aW5nSW5zdHJ1Y3Rpb24gPSBNYWNoaW5lQ29udGV4dDo6aW5zdHJ1Y3Rpb25Qb2ludGVyKGNv
bnRleHQpOwogICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJzdGFydGluZyBoYW5kbGVyIGZvciBm
YXVsdCBhdDogIiwgUmF3UG9pbnRlcihmYXVsdGluZ0luc3RydWN0aW9uKSk7CiAKQEAgLTY0LDcg
KzYzLDcgQEAgc3RhdGljIFNpZ25hbEFjdGlvbiB0cmFwSGFuZGxlcihpbnQsIHNpZ2luZm9fdCog
c2lnSW5mbywgdm9pZCogdWNvbnRleHQpCiAgICAgaWYgKGlzSklUUEMoZmF1bHRpbmdJbnN0cnVj
dGlvbikpIHsKICAgICAgICAgYm9vbCBmYXVsdGVkSW5BY3RpdmVGYXN0TWVtb3J5ID0gZmFsc2U7
CiAgICAgICAgIHsKLSAgICAgICAgICAgIHZvaWQqIGZhdWx0aW5nQWRkcmVzcyA9IHNpZ0luZm8t
PnNpX2FkZHI7CisgICAgICAgICAgICB2b2lkKiBmYXVsdGluZ0FkZHJlc3MgPSBzaWdJbmZvLmZh
dWx0aW5nQWRkcmVzczsKICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJjaGVja2lu
ZyBmYXVsdGluZyBhZGRyZXNzOiAiLCBSYXdQb2ludGVyKGZhdWx0aW5nQWRkcmVzcyksICIgaXMg
aW4gYW4gYWN0aXZlIGZhc3QgbWVtb3J5Iik7CiAgICAgICAgICAgICBmYXVsdGVkSW5BY3RpdmVG
YXN0TWVtb3J5ID0gV2FzbTo6TWVtb3J5OjphZGRyZXNzSXNJbkFjdGl2ZUZhc3RNZW1vcnkoZmF1
bHRpbmdBZGRyZXNzKTsKICAgICAgICAgfQpAQCAtMTI0LDExICsxMjMsMTEgQEAgdm9pZCBlbmFi
bGVGYXN0TWVtb3J5KCkKICAgICAgICAgICAgIHJldHVybjsKIAogI2lmIEVOQUJMRShXRUJBU1NF
TUJMWV9GQVNUX01FTU9SWSkKLSAgICAgICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFsOjpC
dXMsIFtdIChpbnQgc2lnbmFsLCBzaWdpbmZvX3QqIHNpZ0luZm8sIHZvaWQqIHVjb250ZXh0KSB7
CisgICAgICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbDo6QnVzLCBbXSAoU2lnbmFsIHNp
Z25hbCwgU2lnSW5mbyYgc2lnSW5mbywgUGxhdGZvcm1SZWdpc3RlcnMmIHVjb250ZXh0KSB7CiAg
ICAgICAgICAgICByZXR1cm4gdHJhcEhhbmRsZXIoc2lnbmFsLCBzaWdJbmZvLCB1Y29udGV4dCk7
CiAgICAgICAgIH0pOwogCi0gICAgICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbDo6U2Vn
ViwgW10gKGludCBzaWduYWwsIHNpZ2luZm9fdCogc2lnSW5mbywgdm9pZCogdWNvbnRleHQpIHsK
KyAgICAgICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFsOjpTZWdWLCBbXSAoU2lnbmFsIHNp
Z25hbCwgU2lnSW5mbyYgc2lnSW5mbywgUGxhdGZvcm1SZWdpc3RlcnMmIHVjb250ZXh0KSB7CiAg
ICAgICAgICAgICByZXR1cm4gdHJhcEhhbmRsZXIoc2lnbmFsLCBzaWdJbmZvLCB1Y29udGV4dCk7
CiAgICAgICAgIH0pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTWFjaGluZVRocmVhZHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1h
Y2hpbmVUaHJlYWRzLmNwcAppbmRleCA1YWFjODdhY2I1NzQ3YzdmY2EyZjkzNmVjOWNmNjc4YjQz
MTc4MTcxLi4wYTM2N2ZkNWUyMjUyN2U5YzNjODc1MzZlY2ZkNzJiMTNkZjc5ZDViIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWFjaGluZVRocmVhZHMuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NYWNoaW5lVGhyZWFkcy5jcHAKQEAg
LTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJNYWNoaW5lU3RhY2tNYXJrZXIuaCIKICNpbmNsdWRl
IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkTWVzc2FnZS5oPgor
I2luY2x1ZGUgPHd0Zi90aHJlYWRzL1NpZ25hbHMuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBXYXNtIHsKIApAQCAtNTcsNyArNTgsNyBAQCB2b2lkIHJlc2V0SW5zdHJ1Y3Rpb25DYWNo
ZU9uQWxsVGhyZWFkcygpCiAKICAgICBjb25zdCBEb3VibHlMaW5rZWRMaXN0PE1hY2hpbmVUaHJl
YWRzOjpNYWNoaW5lVGhyZWFkPiYgdGhyZWFkcyA9IHdhc21UaHJlYWRzKCkudGhyZWFkc0xpc3RI
ZWFkKGxvY2tlcik7CiAgICAgZm9yIChjb25zdCBhdXRvKiB0aHJlYWQgPSB0aHJlYWRzLmhlYWQo
KTsgdGhyZWFkOyB0aHJlYWQgPSB0aHJlYWQtPm5leHQoKSkgewotICAgICAgICBzZW5kTWVzc2Fn
ZSh0aHJlYWQtPm1fdGhyZWFkLmdldCgpLCBbXSAoc2lnaW5mb190KiwgdWNvbnRleHRfdCopIHsK
KyAgICAgICAgc2VuZE1lc3NhZ2UodGhyZWFkLT5tX3RocmVhZC5nZXQoKSwgW10gKGNvbnN0IFBs
YXRmb3JtUmVnaXN0ZXJzJikgewogICAgICAgICAgICAgLy8gSXQncyBsaWtlbHkgdGhhdCB0aGUg
c2lnbmFsIGhhbmRsZXIgd2lsbCBhbHJlYWR5IHJlc2V0IHRoZSBpbnN0cnVjdGlvbiBjYWNoZSBi
dXQgd2UgbWlnaHQgYXMgd2VsbCBiZSBzdXJlLgogICAgICAgICAgICAgV1RGOjpjcm9zc01vZGlm
eWluZ0NvZGVGZW5jZSgpOwogICAgICAgICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RG
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IDVmNDUyODdmNmUzYzY4ODViMjJiYTI3NzZjZmJjNmEzMzIzYmQw
NWIuLjU4NTQ0Y2NiNjJjYjIyMTJiYWVlNzZmNGQyYTAxZTg5YjZiN2IwOTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dU
Ri9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjQsNiArNjQsNyBAQAogCQk1MjE4
MzAxMkM5OUU0NzZBODRFRUJFQTggLyogU3ltYm9sSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNzJCQkRCMTA3RkE0MjQ4ODYxNzhCOUUgLyog
U3ltYm9sSW1wbC5jcHAgKi87IH07CiAJCTUzMTFCRDUzMUVBNzFDQUQwMDUyNTI4MSAvKiBTaWdu
YWxzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUz
MTFCRDUxMUVBNzFDQUQwMDUyNTI4MSAvKiBTaWduYWxzLmNwcCAqLzsgfTsKIAkJNTMxMUJENUMx
RUE4MjJGOTAwNTI1MjgxIC8qIFRocmVhZE1lc3NhZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMxMUJENUIxRUE4MjJGOTAwNTI1MjgxIC8qIFRo
cmVhZE1lc3NhZ2UuY3BwICovOyB9OworCQk1MzUzNEYyQTFFQzBFMTBFMDAxNDFCMkYgLyogTWFj
aEV4Y2VwdGlvbnMuZGVmcyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUzNTM0RjI5MUVDMEUxMEUwMDE0MUIyRiAvKiBNYWNoRXhjZXB0aW9ucy5kZWZzICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKENsaWVudCwgU2VydmVyLCApOyB9OyB9OwogCQk3
MEE5OTNGRTFBRDcxNTEzMDBGQTYxNUIgLyogU3ltYm9sUmVnaXN0cnkuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzBBOTkzRkMxQUQ3MTUxMzAwRkE2
MTVCIC8qIFN5bWJvbFJlZ2lzdHJ5LmNwcCAqLzsgfTsKIAkJNzBFQ0E2MEQxQjAyNDI2ODAwNDQ5
NzM5IC8qIEF0b21pY1N0cmluZ0ltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzBFQ0E2MEExQjAyNDI2ODAwNDQ5NzM5IC8qIEF0b21pY1N0cmlu
Z0ltcGwuY3BwICovOyB9OwogCQk3QUZFQzZCMTFFQjIyQjU5MDBEQURFMzYgLyogVVVJRC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QUZFQzZCMDFF
QjIyQjU5MDBEQURFMzYgLyogVVVJRC5jcHAgKi87IH07CkBAIC0yOTksNiArMzAwLDcgQEAKIAkJ
NTMxMUJENTcxRUE3RTFBMTAwNTI1MjgxIC8qIFNpZ25hbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU2lnbmFscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MzExQkQ1OTFFQTgxQTk2MDA1MjUyODEgLyogVGhyZWFkTWVzc2FnZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRNZXNzYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUzMTFCRDVCMUVBODIyRjkwMDUyNTI4MSAvKiBUaHJlYWRNZXNzYWdlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRocmVhZE1lc3NhZ2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzUzNEYyOTFFQzBFMTBFMDAxNDFCMkYgLyog
TWFjaEV4Y2VwdGlvbnMuZGVmcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUubWlnOyBwYXRoID0gTWFj
aEV4Y2VwdGlvbnMuZGVmczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM5RUIwNjIx
RDU1Mjg0MjAwQzgyRUY3IC8qIExFQkRlY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTEVCRGVjb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0VD
MjUzQzFFOTVBRDMwMDAwODMxQjkgLyogUHJpb3JpdHlRdWV1ZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQcmlvcml0eVF1ZXVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTU1MzA3MUM5MUM0MDQyNzIwMDM4NDg5OCAvKiBUaW55TFJVQ2FjaGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGlueUxSVUNhY2hlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xMDIzLDYgKzEwMjUsNyBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJ
MUE0MjhCOEIxQzhGODlERDAwNTFFOUVCIC8qIEFwcEtpdENvbXBhdGliaWxpdHlEZWNsYXJhdGlv
bnMuaCAqLywKIAkJCQkxQUNBREQ4MjE4ODQ0ODAxMDBEOEI3MUQgLyogRGVwcmVjYXRlZFN5bWJv
bHNVc2VkQnlTYWZhcmkubW0gKi8sCisJCQkJNTM1MzRGMjkxRUMwRTEwRTAwMTQxQjJGIC8qIE1h
Y2hFeGNlcHRpb25zLmRlZnMgKi8sCiAJCQkJQThBNDcyQzUxNTFBODI1QTAwNDEyM0ZGIC8qIE1h
aW5UaHJlYWRNYWMubW0gKi8sCiAJCQkpOwogCQkJcGF0aCA9IG1hYzsKQEAgLTEzNDYsNiArMTM0
OSw3IEBACiAJCQkJMTQzRjYxMUYxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTNCNzI1RUM5ODc0NDZBRDkzRjFBNDQwIC8qIFJhbmRvbURldmljZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQxNDE1MUE4MjVCMDA0MTIzRkYgLyogUmFuZG9t
TnVtYmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUzNTM0RjJBMUVDMEUxMEUwMDE0MUIyRiAv
KiBNYWNoRXhjZXB0aW9ucy5kZWZzIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0MUExNTFBODI1
QjAwNDEyM0ZGIC8qIFJlZkNvdW50ZWRMZWFrQ291bnRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkyQ0RFRDBGMzE4MTE1Qzg1MDA0REJBNzAgLyogUnVuTG9vcC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkyQ0RFRDBFRjE4MTE1QzM4MDA0REJBNzAgLyogUnVuTG9vcENGLmNwcCBpbiBTb3VyY2Vz
ICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvU3RhY2tCb3VuZHMuaCBiL1NvdXJjZS9X
VEYvd3RmL1N0YWNrQm91bmRzLmgKaW5kZXggNTU0NjA0ZjJhYjQ4NGM3Y2Y3MWVlMzg2MzBjZWI0
Yzc5YzMzZTk3Mi4uY2Q2MmMxNDhhNmM3ZWZjOTUxN2E4YjA5YjhhMzJjN2ZlMTkwY2RlZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvU3RhY2tCb3VuZHMuaAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi9TdGFja0JvdW5kcy5oCkBAIC01NCw3ICs1NCw2IEBAIHB1YmxpYzoKICAgICAgICAgOiBtX29y
aWdpbihvcmlnaW4pCiAgICAgICAgICwgbV9ib3VuZChlbmQpCiAgICAgewotICAgICAgICBjaGVj
a0NvbnNpc3RlbmN5KCk7CiAgICAgfQogCiAgICAgdm9pZCogb3JpZ2luKCkgY29uc3QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZE1lc3NhZ2UuY3BwIGIvU291cmNlL1dURi93dGYv
VGhyZWFkTWVzc2FnZS5jcHAKaW5kZXggZjE0YmM0NWQzNjE0YzdjNjYzNWViMTdhYjBlMjcyODE2
YTEzNzNkZC4uYjA0MGE1YjcxZGMxY2JkNTUxNTM3M2U2ZGU2OTNjOTRkMmI1NTA3OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5jcHAKKysrIGIvU291cmNlL1dURi93
dGYvVGhyZWFkTWVzc2FnZS5jcHAKQEAgLTM2LDYgKzM2LDkgQEAKICNpbmNsdWRlIDx3dGYvTG9j
a2VyLmg+CiAjaW5jbHVkZSA8d3RmL3RocmVhZHMvU2lnbmFscy5oPgogCisjaWYgT1MoREFSV0lO
KQorI2luY2x1ZGUgPG1hY2gvdGhyZWFkX2FjdC5oPgorI2VuZGlmCiAKIG5hbWVzcGFjZSBXVEYg
ewogCkBAIC04MywxMiArODYsMTIgQEAgdm9pZCBpbml0aWFsaXplVGhyZWFkTWVzc2FnZXMoKQog
fQogCiBTVVBQUkVTU19BU0FOCi1NZXNzYWdlU3RhdHVzIHNlbmRNZXNzYWdlU2NvcGVkKFRocmVh
ZCYgdGhyZWFkLCBjb25zdCBUaHJlYWRNZXNzYWdlJiBtZXNzYWdlKQorc3RhdGljIE1lc3NhZ2VT
dGF0dXMgc2VuZE1lc3NhZ2VTaWduYWwoVGhyZWFkJiB0aHJlYWQsIGNvbnN0IFRocmVhZE1lc3Nh
Z2UmIG1lc3NhZ2UpCiB7CiAgICAgY29uc3RleHByIFNpZ25hbCBzaWduYWwgPSBTaWduYWw6OlVz
cjsKICAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZTsKICAgICBzdGQ6OmNhbGxfb25jZShv
bmNlLCBbXSB7Ci0gICAgICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKHNpZ25hbCwgW10gKGludCwg
c2lnaW5mb190KiBpbmZvLCB2b2lkKiB1YXApIHsKKyAgICAgICAgaW5zdGFsbFNpZ25hbEhhbmRs
ZXIoc2lnbmFsLCBbXSAoU2lnbmFsLCBTaWdJbmZvJiwgUGxhdGZvcm1SZWdpc3RlcnMmIGNvbnRl
eHQpIHsKICAgICAgICAgICAgIFRocmVhZCogdGhyZWFkID0gVGhyZWFkOjpjdXJyZW50TWF5QmVO
dWxsKCk7CiAKICAgICAgICAgICAgIGlmICghdGhyZWFkKSB7CkBAIC05OCw3ICsxMDEsNyBAQCBN
ZXNzYWdlU3RhdHVzIHNlbmRNZXNzYWdlU2NvcGVkKFRocmVhZCYgdGhyZWFkLCBjb25zdCBUaHJl
YWRNZXNzYWdlJiBtZXNzYWdlKQogCiAgICAgICAgICAgICAvLyBOb2RlIHNob3VsZCBiZSBkZWxl
dGVkIGluIHRoZSBzZW5kZXIgdGhyZWFkLiBEZWxldGluZyBOb2RlcyBpbiBzaWduYWwgaGFuZGxl
ciBjYXVzZXMgZGVhZCBsb2NrLgogICAgICAgICAgICAgdGhyZWFkLT50aHJlYWRNZXNzYWdlcygp
LmNvbnN1bWVBbGxXaXRoTm9kZShbJl0gKFRocmVhZE1lc3NhZ2VEYXRhKiBkYXRhLCBOb2RlKiBu
b2RlKSB7Ci0gICAgICAgICAgICAgICAgZGF0YS0+bWVzc2FnZShpbmZvLCBzdGF0aWNfY2FzdDx1
Y29udGV4dF90Kj4odWFwKSk7CisgICAgICAgICAgICAgICAgZGF0YS0+bWVzc2FnZShjb250ZXh0
KTsKICAgICAgICAgICAgICAgICAvLyBCeSBzZXR0aW5nIHJhbiB2YXJpYWJsZSwgKDEpIHRoZSBz
ZW5kZXIgYWNrbm93bGVkZ2VzIHRoZSBjb21wbGV0aW9uIGFuZAogICAgICAgICAgICAgICAgIC8v
ICgyKSBnZXRzIHRoZSBOb2RlIHRvIGJlIGRlbGV0ZWQuCiAgICAgICAgICAgICAgICAgZGF0YS0+
cmFuLnN0b3JlKG5vZGUpOwpAQCAtMTU2LDYgKzE1OSw2MCBAQCBNZXNzYWdlU3RhdHVzIHNlbmRN
ZXNzYWdlU2NvcGVkKFRocmVhZCYgdGhyZWFkLCBjb25zdCBUaHJlYWRNZXNzYWdlJiBtZXNzYWdl
KQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKKyNpZiBPUyhEQVJXSU4p
CitzdGF0aWMgTWVzc2FnZVN0YXR1cyBzZW5kTWVzc2FnZU1hY2goVGhyZWFkJiB0aHJlYWQsIGNv
bnN0IFRocmVhZE1lc3NhZ2UmIG1lc3NhZ2UpCit7CisgICAgc3RhdGljIFN0YXRpY0xvY2sgbWVz
c2FnZUxvY2s7CisgICAgYXV0byBsb2NraG9sZGVyID0gaG9sZExvY2sobWVzc2FnZUxvY2spOwor
CisgICAgYXV0byByZXN1bHQgPSB0aHJlYWQuc3VzcGVuZCgpOworICAgIGlmICghcmVzdWx0KQor
ICAgICAgICByZXR1cm4gTWVzc2FnZVN0YXR1czo6VGhyZWFkRXhpdGVkOworCisjaWYgQ1BVKFg4
NikKKyAgICB1bnNpZ25lZCB1c2VyQ291bnQgPSBzaXplb2YocmVnaXN0ZXJzKSAvIHNpemVvZihp
bnQpOworICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSBpMzg2X1RIUkVBRF9TVEFU
RTsKKyNlbGlmIENQVShYODZfNjQpCisgICAgdW5zaWduZWQgdXNlckNvdW50ID0geDg2X1RIUkVB
RF9TVEFURTY0X0NPVU5UOworICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSB4ODZf
VEhSRUFEX1NUQVRFNjQ7CisjZWxpZiBDUFUoQVJNKQorICAgIHVuc2lnbmVkIHVzZXJDb3VudCA9
IEFSTV9USFJFQURfU1RBVEVfQ09VTlQ7CisgICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZv
ciA9IEFSTV9USFJFQURfU1RBVEU7CisjZWxpZiBDUFUoQVJNNjQpCisgICAgdW5zaWduZWQgdXNl
ckNvdW50ID0gQVJNX1RIUkVBRF9TVEFURTY0X0NPVU5UOworICAgIHRocmVhZF9zdGF0ZV9mbGF2
b3JfdCBmbGF2b3IgPSBBUk1fVEhSRUFEX1NUQVRFNjQ7CisjZWxzZQorI2Vycm9yIFVua25vd24g
QXJjaGl0ZWN0dXJlCisjZW5kaWYKKworICAgIFBsYXRmb3JtUmVnaXN0ZXJzIHJlZ2lzdGVyczsK
KyAgICB0aHJlYWRfc3RhdGVfdCBzdGF0ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dGhyZWFkX3N0YXRl
X3Q+KCZyZWdpc3RlcnMpOworICAgIHRocmVhZF9nZXRfc3RhdGUodGhyZWFkLm1hY2hUaHJlYWQo
KSwgZmxhdm9yLCBzdGF0ZSwgJnVzZXJDb3VudCk7CisKKyAgICBtZXNzYWdlKHJlZ2lzdGVycyk7
CisKKyAgICB0aHJlYWRfc2V0X3N0YXRlKHRocmVhZC5tYWNoVGhyZWFkKCksIGZsYXZvciwgKHRo
cmVhZF9zdGF0ZV90KSZyZWdpc3RlcnMsIHVzZXJDb3VudCk7CisKKyAgICB0aHJlYWQucmVzdW1l
KCk7CisgICAgcmV0dXJuIE1lc3NhZ2VTdGF0dXM6Ok1lc3NhZ2VSYW47Cit9CisKK3N0YXRpYyBi
b29sIHVzZU1hY2ggPSBmYWxzZTsKK3ZvaWQgZGVsaXZlck1lc3NhZ2VzVXNpbmdNYWNoKCkgeyB1
c2VNYWNoID0gdHJ1ZTsgfQorCisjZW5kaWYKKworTWVzc2FnZVN0YXR1cyBzZW5kTWVzc2FnZVNj
b3BlZChUaHJlYWQmIHRocmVhZCwgY29uc3QgVGhyZWFkTWVzc2FnZSYgbWVzc2FnZSkKK3sKKyNp
ZiBPUyhEQVJXSU4pCisgICAgaWYgKHVzZU1hY2gpCisgICAgICAgIHJldHVybiBzZW5kTWVzc2Fn
ZU1hY2godGhyZWFkLCBtZXNzYWdlKTsKKyNlbmRpZgorICAgIHJldHVybiBzZW5kTWVzc2FnZVNp
Z25hbCh0aHJlYWQsIG1lc3NhZ2UpOworICAgIHJldHVybiBNZXNzYWdlU3RhdHVzOjpUaHJlYWRF
eGl0ZWQ7Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKICNlbmRpZiAvLyBVU0UoUFRIUkVB
RFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRNZXNzYWdlLmggYi9Tb3VyY2Uv
V1RGL3d0Zi9UaHJlYWRNZXNzYWdlLmgKaW5kZXggOWFlNTNmMjljZjdlOGZiMDBlZjkyMTFkMTZj
ZTJjZGVkNjAzZWMxYi4uNzc0MmUxYWNiYzRiM2M4NWRkZjY2MjgwMGM1YWNmMGFiMmFlMTQxOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5oCisrKyBiL1NvdXJjZS9X
VEYvd3RmL1RocmVhZE1lc3NhZ2UuaApAQCAtMzYsNyArMzYsNyBAQCBuYW1lc3BhY2UgV1RGIHsK
IHZvaWQgaW5pdGlhbGl6ZVRocmVhZE1lc3NhZ2VzKCk7CiAKIGNsYXNzIFRocmVhZE1lc3NhZ2VE
YXRhOwotdXNpbmcgVGhyZWFkTWVzc2FnZSA9IFNjb3BlZExhbWJkYTx2b2lkKHNpZ2luZm9fdCos
IHVjb250ZXh0X3QqKT47Cit1c2luZyBUaHJlYWRNZXNzYWdlID0gU2NvcGVkTGFtYmRhPHZvaWQo
UGxhdGZvcm1SZWdpc3RlcnMmKT47CiAKIGVudW0gY2xhc3MgTWVzc2FnZVN0YXR1cyB7CiAgICAg
TWVzc2FnZVJhbiwKQEAgLTUxLDEwICs1MSwxNCBAQCBNZXNzYWdlU3RhdHVzIHNlbmRNZXNzYWdl
U2NvcGVkKFRocmVhZCYsIGNvbnN0IFRocmVhZE1lc3NhZ2UmKTsKIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+CiBNZXNzYWdlU3RhdHVzIHNlbmRNZXNzYWdlKFRocmVhZCYgdGFyZ2V0VGhyZWFk
LCBjb25zdCBGdW5jdG9yJiBmdW5jKQogewotICAgIGF1dG8gbGFtYmRhID0gc2NvcGVkTGFtYmRh
UmVmPHZvaWQoc2lnaW5mb190KiwgdWNvbnRleHRfdCopPihmdW5jKTsKKyAgICBhdXRvIGxhbWJk
YSA9IHNjb3BlZExhbWJkYVJlZjx2b2lkKFBsYXRmb3JtUmVnaXN0ZXJzJik+KGZ1bmMpOwogICAg
IHJldHVybiBzZW5kTWVzc2FnZVNjb3BlZCh0YXJnZXRUaHJlYWQsIGxhbWJkYSk7CiB9CiAKKyNp
ZiBPUyhEQVJXSU4pCit2b2lkIGRlbGl2ZXJNZXNzYWdlc1VzaW5nTWFjaCgpOworI2VuZGlmCisK
IH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6OnNlbmRNZXNzYWdlOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcu
aAppbmRleCBkMmU1MzZkZjdhODY5NmQ4ZTZiOTViYTQzZTE3M2QzYjU1MGJmMTZhLi4zNTE0ZThj
MDlmMGZjOTRkNTM0YmUyZjNiNmU3YzQ5NTBlMGJjZjA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi9UaHJlYWRpbmcuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaApAQCAtMTM4
LDYgKzEzOCwxMCBAQCBwdWJsaWM6CiAKICNpZiBVU0UoUFRIUkVBRFMpCiAgICAgTG9ja2xlc3NC
YWc8VGhyZWFkTWVzc2FnZURhdGEqPiYgdGhyZWFkTWVzc2FnZXMoKSB7IHJldHVybiBtX3RocmVh
ZE1lc3NhZ2VzOyB9CisKKyNpZiBPUyhEQVJXSU4pCisgICAgbWFjaF9wb3J0X3QgbWFjaFRocmVh
ZCgpIHsgcmV0dXJuIG1fcGxhdGZvcm1UaHJlYWQ7IH0KKyNlbmRpZgogI2VuZGlmCiAKIHByb3Rl
Y3RlZDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcCBi
L1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcAppbmRleCBkMzRkNzk4ZjI5YmY4
OTkwMDQyZGE1MThhOWNmYjdhMTYzYTg2ODJkLi4yNWYwOTQxZjExNTg3MjExMzBlN2Y1MGExZGU4
MmRjNjk5Nzg4Nzc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmdQdGhyZWFk
cy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nUHRocmVhZHMuY3BwCkBAIC00Myw2
ICs0Myw3IEBACiAjaW5jbHVkZSA8d3RmL1RocmVhZEZ1bmN0aW9uSW52b2NhdGlvbi5oPgogI2lu
Y2x1ZGUgPHd0Zi9UaHJlYWRIb2xkZXIuaD4KICNpbmNsdWRlIDx3dGYvV29yZExvY2suaD4KKyNp
bmNsdWRlIDx3dGYvdGhyZWFkcy9TaWduYWxzLmg+CiAKICNpZiBPUyhMSU5VWCkKICNpbmNsdWRl
IDxzeXMvcHJjdGwuaD4KQEAgLTU0LDYgKzU1LDEwIEBACiAjaW5jbHVkZSA8c3lzL3RpbWUuaD4K
ICNlbmRpZgogCisjaWYgT1MoREFSV0lOKQorI2luY2x1ZGUgPG1hY2gvZXhjZXB0aW9uLmg+Cisj
ZW5kaWYKKwogI2lmICFPUyhEQVJXSU4pICYmIE9TKFVOSVgpCiAKICNpbmNsdWRlIDxzeXMvbW1h
bi5oPgpAQCAtODIsNiArODcsNyBAQCBUaHJlYWQ6OlRocmVhZCgpCiAKIFRocmVhZDo6flRocmVh
ZCgpCiB7CisgICAgcmVtb3ZlVGhyZWFkKHRoaXMpOwogI2lmICFPUyhEQVJXSU4pCiAgICAgc2Vt
X2Rlc3Ryb3koJm1fc2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZSk7CiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL21hYy9NYWNoRXhjZXB0aW9ucy5kZWZzIGIvU291cmNlL1dURi93
dGYvbWFjL01hY2hFeGNlcHRpb25zLmRlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDIwNTc0MmE0ZWQ1MDBmODA2
NGZlZWI0OTU1YTdjOTcwZDk5YWYwYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L21hYy9NYWNoRXhjZXB0aW9ucy5kZWZzCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8bWFjaC9tYWNoX2V4Yy5k
ZWZzPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGhyZWFkcy9TaWduYWxzLmNwcCBiL1Nv
dXJjZS9XVEYvd3RmL3RocmVhZHMvU2lnbmFscy5jcHAKaW5kZXggODU1YjI4YjMxNzIxNzI3Y2Yx
ZjQzMWE5MThhMjUxZGMyZTZhM2RmYy4uNmVmYjRmMDY0ZGM0NjMyZWY5ZWU2M2JhYTdjN2ZmOGUy
N2Q4NzA3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGhyZWFkcy9TaWduYWxzLmNwcAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi90aHJlYWRzL1NpZ25hbHMuY3BwCkBAIC0yOCwyMSArMjgsMjUz
IEBACiAKICNpZiBVU0UoUFRIUkVBRFMpCiAKK2V4dGVybiAiQyIgeworI2luY2x1ZGUgIk1hY2hF
eGNlcHRpb25zU2VydmVyLmgiCit9OworCiAjaW5jbHVkZSA8Y3N0ZGlvPgogI2luY2x1ZGUgPG11
dGV4PgogI2luY2x1ZGUgPHNpZ25hbC5oPgorCisjaW5jbHVkZSA8bWFjaC9tYWNoLmg+CisjaW5j
bHVkZSA8bWFjaC90aHJlYWRfYWN0Lmg+CisKICNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgogI2lu
Y2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRl
IDx3dGYvTG9ja2xlc3NCYWcuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNp
bmNsdWRlIDx3dGYvVGhyZWFkTWVzc2FnZS5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4K
KwogCiBuYW1lc3BhY2UgV1RGIHsKIAorICAgIAogc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxM
b2NrbGVzc0JhZzxTaWduYWxIYW5kbGVyPj4gaGFuZGxlcnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihT
aWduYWw6Ok51bWJlck9mU2lnbmFscyldID0geyB9Owotc3RhdGljIHN0cnVjdCBzaWdhY3Rpb24g
b2xkQWN0aW9uc1tzdGF0aWNfY2FzdDxzaXplX3Q+KFNpZ25hbDo6TnVtYmVyT2ZTaWduYWxzKV07
CiBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZU9uY2VGbGFnc1tzdGF0aWNfY2FzdDxz
aXplX3Q+KFNpZ25hbDo6TnVtYmVyT2ZTaWduYWxzKV07CitzdGF0aWMgc3RydWN0IHNpZ2FjdGlv
biBvbGRBY3Rpb25zW3N0YXRpY19jYXN0PHNpemVfdD4oU2lnbmFsOjpOdW1iZXJPZlNpZ25hbHMp
XTsKKworI2lmIE9TKERBUldJTikKK3N0YXRpYyBtYWNoX3BvcnRfdCBleGNlcHRpb25Qb3J0Owor
c3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbWF4TWVzc2FnZVNpemUgPSAxICogS0I7CisKK3N0YXRp
YyB2b2lkIHN0YXJ0TWFjaEV4Y2VwdGlvbkhhbmRsZXJUaHJlYWQoKQoreworICAgIHN0YXRpYyBz
dGQ6Om9uY2VfZmxhZyBvbmNlOworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2UsIFtdIHsKKyAgICAg
ICAgaWYgKG1hY2hfcG9ydF9hbGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigpLCBNQUNIX1BPUlRfUklH
SFRfUkVDRUlWRSwgJmV4Y2VwdGlvblBvcnQpICE9IEtFUk5fU1VDQ0VTUykKKyAgICAgICAgICAg
IENSQVNIKCk7CisKKyAgICAgICAgaWYgKG1hY2hfcG9ydF9pbnNlcnRfcmlnaHQobWFjaF90YXNr
X3NlbGYoKSwgZXhjZXB0aW9uUG9ydCwgZXhjZXB0aW9uUG9ydCwgTUFDSF9NU0dfVFlQRV9NQUtF
X1NFTkQpIT0gS0VSTl9TVUNDRVNTKQorICAgICAgICAgICAgQ1JBU0goKTsKKworICAgICAgICAv
LyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIGEgZGlzcGF0Y2ggcXVldWUuCisgICAgICAgICh2b2lk
KVRocmVhZDo6Y3JlYXRlKAorICAgICAgICAgICAgIldURiBNYWNoIEV4Y2VwdGlvbiBUaHJlYWQi
LCBbXSAoKSB7CisgICAgICAgICAgICAgICAgdW5pb24gTWVzc2FnZSB7CisgICAgICAgICAgICAg
ICAgICAgIG1hY2hfbXNnX2hlYWRlcl90IGhlYWRlcjsKKyAgICAgICAgICAgICAgICAgICAgY2hh
ciBkYXRhW21heE1lc3NhZ2VTaXplXTsKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAg
ICAgIE1lc3NhZ2UgbWVzc2FnZUhlYWRlckluOworICAgICAgICAgICAgICAgIE1lc3NhZ2UgbWVz
c2FnZUhlYWRlck91dDsKKworICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAg
ICAgICAgICAgICAgIGtlcm5fcmV0dXJuX3QgbWVzc2FnZVJlc3VsdCA9IG1hY2hfbXNnKCZtZXNz
YWdlSGVhZGVySW4uaGVhZGVyLCBNQUNIX1JDVl9NU0csIDAsIG1heE1lc3NhZ2VTaXplLCBleGNl
cHRpb25Qb3J0LCBNQUNIX01TR19USU1FT1VUX05PTkUsIE1BQ0hfUE9SVF9OVUxMKTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2VSZXN1bHQgPT0gS0VSTl9TVUNDRVNTKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIW1hY2hfZXhjX3NlcnZlcigmbWVzc2FnZUhlYWRlcklu
LmhlYWRlciwgJm1lc3NhZ2VIZWFkZXJPdXQuaGVhZGVyKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDUkFTSCgpOworCisgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlUmVzdWx0
ID0gbWFjaF9tc2coJm1lc3NhZ2VIZWFkZXJPdXQuaGVhZGVyLCBNQUNIX1NFTkRfTVNHLCBtZXNz
YWdlSGVhZGVyT3V0LmhlYWRlci5tc2doX3NpemUsIDAsIG1lc3NhZ2VIZWFkZXJPdXQuaGVhZGVy
Lm1zZ2hfbG9jYWxfcG9ydCwgMCwgTUFDSF9QT1JUX05VTEwpOworICAgICAgICAgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQobWVzc2FnZVJlc3VsdCA9PSBLRVJOX1NVQ0NFU1MpOworICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dM
bigiRmFpbGVkIHRvIHJlY2VpdmUgbWFjaCBtZXNzYWdlIGR1ZSB0byAiLCBtYWNoX2Vycm9yX3N0
cmluZyhtZXNzYWdlUmVzdWx0KSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9KS5sZWFr
UmVmKCk7CisgICAgfSk7Cit9CisKK3N0YXRpYyBTaWduYWwgZnJvbU1hY2hFeGNlcHRpb24oZXhj
ZXB0aW9uX3R5cGVfdCB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgRVhD
X0JBRF9BQ0NFU1M6IHJldHVybiBTaWduYWw6OlNlZ1Y7CisgICAgY2FzZSBFWENfQkFEX0lOU1RS
VUNUSU9OOiByZXR1cm4gU2lnbmFsOjpJbGw7CisgICAgY2FzZSBFWENfQlJFQUtQT0lOVDogcmV0
dXJuIFNpZ25hbDo6VHJhcDsKKyAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisgICAgcmV0dXJu
IFNpZ25hbDo6VW5rbm93bjsKK30KKworc3RhdGljIGV4Y2VwdGlvbl9tYXNrX3QgdG9NYWNoTWFz
ayhTaWduYWwgc2lnbmFsKQoreworICAgIHN3aXRjaCAoc2lnbmFsKSB7CisgICAgY2FzZSBTaWdu
YWw6OlNlZ1Y6IHJldHVybiBFWENfTUFTS19CQURfQUNDRVNTOworICAgIGNhc2UgU2lnbmFsOjpJ
bGw6IHJldHVybiBFWENfTUFTS19CQURfSU5TVFJVQ1RJT047CisgICAgY2FzZSBTaWduYWw6OlRy
YXA6IHJldHVybiBFWENfTUFTS19CUkVBS1BPSU5UOworICAgIGRlZmF1bHQ6IGJyZWFrOworICAg
IH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitleHRlcm4gIkMiIHsK
KworLy8gV2UgbmVlZCB0byBpbXBsZW1lbnQgc3R1YnMgZm9yIGNhdGNoX21hY2hfZXhjZXB0aW9u
X3JhaXNlIGFuZCBjYXRjaF9tYWNoX2V4Y2VwdGlvbl9yYWlzZV9zdGF0ZV9pZGVudGl0eS4KKy8v
IFRoZSBNaUcgZ2VuZXJhdGVkIGZpbGUgd2lsbCBmYWlsIHRvIGxpbmsgb3RoZXJ3aXNlLCBldmVu
IHRob3VnaCB3ZSBkb24ndCB1c2UgdGhlIGZ1bmN0aW9ucy4gT25seSB0aGUKKy8vIGNhdGNoX21h
Y2hfZXhjZXB0aW9uX3JhaXNlX3N0YXRlIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgYmVjYXVz
ZSB3ZSBwYXNzIEVYQ0VQVElPTl9TVEFURSB0bworLy8gdGhyZWFkX3NldF9leGNlcHRpb25fcG9y
dHMuCitrZXJuX3JldHVybl90IGNhdGNoX21hY2hfZXhjZXB0aW9uX3JhaXNlKG1hY2hfcG9ydF90
LCBtYWNoX3BvcnRfdCwgbWFjaF9wb3J0X3QsIGV4Y2VwdGlvbl90eXBlX3QsIG1hY2hfZXhjZXB0
aW9uX2RhdGFfdCwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCkKK3sKKyAgICBkYXRhTG9nTG4oIldl
IHNob3VsZCBub3QgaGF2ZSBjYWxsZWQgY2F0Y2hfZXhjZXB0aW9uX3JhaXNlKCksIHBsZWFzZSBm
aWxlIGEgYnVnIGF0IGJ1Z3Mud2Via2l0Lm9yZyIpOworICAgIHJldHVybiBLRVJOX0ZBSUxVUkU7
Cit9CisKK2tlcm5fcmV0dXJuX3QgY2F0Y2hfbWFjaF9leGNlcHRpb25fcmFpc2Vfc3RhdGVfaWRl
bnRpdHkobWFjaF9wb3J0X3QsIG1hY2hfcG9ydF90LCBtYWNoX3BvcnRfdCwgZXhjZXB0aW9uX3R5
cGVfdCwgbWFjaF9leGNlcHRpb25fZGF0YV90LCBtYWNoX21zZ190eXBlX251bWJlcl90LCBpbnQq
LCB0aHJlYWRfc3RhdGVfdCwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCwgdGhyZWFkX3N0YXRlX3Qs
ICBtYWNoX21zZ190eXBlX251bWJlcl90KikKK3sKKyAgICBkYXRhTG9nTG4oIldlIHNob3VsZCBu
b3QgaGF2ZSBjYWxsZWQgY2F0Y2hfbWFjaF9leGNlcHRpb25fcmFpc2Vfc3RhdGVfaWRlbnRpdHks
IHBsZWFzZSBmaWxlIGEgYnVnIGF0IGJ1Z3Mud2Via2l0Lm9yZyIpOworICAgIHJldHVybiBLRVJO
X0ZBSUxVUkU7Cit9CisKK2tlcm5fcmV0dXJuX3QgY2F0Y2hfbWFjaF9leGNlcHRpb25fcmFpc2Vf
c3RhdGUoCisgICAgbWFjaF9wb3J0X3QgcG9ydCwKKyAgICBleGNlcHRpb25fdHlwZV90IGV4Y2Vw
dGlvblR5cGUsCisgICAgY29uc3QgbWFjaF9leGNlcHRpb25fZGF0YV90IGV4Y2VwdGlvbkRhdGEs
CisgICAgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCBkYXRhQ291bnQsCisgICAgaW50KiBzdGF0ZUZs
YXZvciwKKyAgICBjb25zdCB0aHJlYWRfc3RhdGVfdCBpblN0YXRlLAorICAgIG1hY2hfbXNnX3R5
cGVfbnVtYmVyX3QgaW5TdGF0ZUNvdW50LAorICAgIHRocmVhZF9zdGF0ZV90IG91dFN0YXRlLAor
ICAgIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QqIG91dFN0YXRlQ291bnQpCit7CisgICAgUkVMRUFT
RV9BU1NFUlQocG9ydCA9PSBleGNlcHRpb25Qb3J0KTsKKyAgICBTaWduYWwgc2lnbmFsID0gZnJv
bU1hY2hFeGNlcHRpb24oZXhjZXB0aW9uVHlwZSk7CisgICAgZGF0YUxvZ0xuKCJyZWNlaXZlZFNp
Z25hbCAiLCBleGNlcHRpb25UeXBlKTsKKyAgICBkYXRhTG9nTG4oIlRocmVhZDogIiwgZXhjZXB0
aW9uRGF0YVswXSk7CisgICAgUkVMRUFTRV9BU1NFUlQoc2lnbmFsICE9IFNpZ25hbDo6VW5rbm93
bik7CisKKyAgICBtZW1jcHkob3V0U3RhdGUsIGluU3RhdGUsIGluU3RhdGVDb3VudCAqIHNpemVv
ZihpblN0YXRlWzBdKSk7CisgICAgKm91dFN0YXRlQ291bnQgPSBpblN0YXRlQ291bnQ7CisKKyNp
ZiBDUFUoWDg2XzY0KQorICAgIFJFTEVBU0VfQVNTRVJUKCpzdGF0ZUZsYXZvciA9PSB4ODZfVEhS
RUFEX1NUQVRFKTsKKyAgICBQbGF0Zm9ybVJlZ2lzdGVycyYgcmVnaXN0ZXJzID0gcmVpbnRlcnBy
ZXRfY2FzdDx4ODZfdGhyZWFkX3N0YXRlX3QqPihvdXRTdGF0ZSktPnV0cy50czY0OworI2VsaWYg
Q1BVKEFSTTY0KQorICAgIFJFTEVBU0VfQVNTRVJUKCpzdGF0ZUZsYXZvciA9PSBBUk1fVEhSRUFE
X1NUQVRFKTsKKyAgICBQbGF0Zm9ybVJlZ2lzdGVycyYgcmVnaXN0ZXJzID0gcmVpbnRlcnByZXRf
Y2FzdDxhcm1fdW5pZmllZF90aHJlYWRfc3RhdGUqPihvdXRTdGF0ZSktPnRzXzY0OworI2VuZGlm
CisKKyAgICBTaWdJbmZvIGluZm87CisgICAgaWYgKHNpZ25hbCA9PSBTaWduYWw6OlNlZ1YpIHsK
KyAgICAgICAgQVNTRVJUX1VOVVNFRChkYXRhQ291bnQsIGRhdGFDb3VudCA9PSAyKTsKKyAgICAg
ICAgaW5mby5mYXVsdGluZ0FkZHJlc3MgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihleGNlcHRp
b25EYXRhWzFdKTsKKyAgICB9CisKKyAgICBib29sIGRpZEhhbmRsZSA9IGZhbHNlOworICAgIGhh
bmRsZXJzW3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0tPml0ZXJhdGUoWyZdIChjb25zdCBT
aWduYWxIYW5kbGVyJiBoYW5kbGVyKSB7CisgICAgICAgIFNpZ25hbEFjdGlvbiBoYW5kbGVyUmVz
dWx0ID0gaGFuZGxlcihzaWduYWwsIGluZm8sIHJlZ2lzdGVycyk7CisgICAgICAgIGRhdGFMb2dM
bihzdGF0aWNfY2FzdDxpbnQ+KGhhbmRsZXJSZXN1bHQpKTsKKyAgICAgICAgc3dpdGNoIChoYW5k
bGVyUmVzdWx0KSB7CisgICAgICAgIGNhc2UgU2lnbmFsQWN0aW9uOjpIYW5kbGVkOgorICAgICAg
ICAgICAgZGlkSGFuZGxlID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIGlmIChk
aWRIYW5kbGUpCisgICAgICAgIHJldHVybiBLRVJOX1NVQ0NFU1M7CisgICAgcmV0dXJuIEtFUk5f
RkFJTFVSRTsKK30KKworfTsKKworI2VuZGlmIC8vIE9TKERBUldJTikKKworc3RhdGljIFN0YXRp
Y0xvY2sgdGhyZWFkTG9jazsKK2V4Y2VwdGlvbl9tYXNrX3QgYWN0aXZlRXhjZXB0aW9ucyB7IDAg
fTsKIAotc3RhdGljIHZvaWQganNjU2lnbmFsSGFuZGxlcihpbnQgc2lnLCBzaWdpbmZvX3QqIGlu
Zm8sIHZvaWQqIG1jb250ZXh0KQoraW5saW5lIHZvaWQgc2V0RXhjZXB0aW9uUG9ydHMoY29uc3Qg
QWJzdHJhY3RMb2NrZXImLCBUaHJlYWQqIHRocmVhZCkKK3sKKyAgICBrZXJuX3JldHVybl90IHJl
c3VsdCA9IHRocmVhZF9zZXRfZXhjZXB0aW9uX3BvcnRzKHRocmVhZC0+bWFjaFRocmVhZCgpLCBh
Y3RpdmVFeGNlcHRpb25zLCBleGNlcHRpb25Qb3J0LCBFWENFUFRJT05fU1RBVEUgfCBNQUNIX0VY
Q0VQVElPTl9DT0RFUywgTUFDSElORV9USFJFQURfU1RBVEUpOworICAgIGlmIChyZXN1bHQgIT0g
S0VSTl9TVUNDRVNTKSB7CisgICAgICAgIGRhdGFMb2dMbigidGhyZWFkIHNldCBwb3J0IGZhaWxl
ZCBkdWUgdG8gIiwgbWFjaF9lcnJvcl9zdHJpbmcocmVzdWx0KSk7CisgICAgICAgIENSQVNIKCk7
CisgICAgfQorfQorCitpbmxpbmUgSGFzaFNldDxUaHJlYWQqPiYgYWN0aXZlVGhyZWFkcyhjb25z
dCBBYnN0cmFjdExvY2tlciYpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8
VGhyZWFkKj4+IGFjdGl2ZVRocmVhZHM7CisgICAgcmV0dXJuIGFjdGl2ZVRocmVhZHM7Cit9CisK
K3ZvaWQgcmVnaXN0ZXJUaHJlYWQoVGhyZWFkKiB0aHJlYWQpCit7CisgICAgYXV0byBsb2NrZXIg
PSBob2xkTG9jayh0aHJlYWRMb2NrKTsKKyAgICBhdXRvIHJlc3VsdCA9IGFjdGl2ZVRocmVhZHMo
bG9ja2VyKS5hZGQodGhyZWFkKTsKKworICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAg
ICAgc2V0RXhjZXB0aW9uUG9ydHMobG9ja2VyLCB0aHJlYWQpOworfQorCit2b2lkIHJlbW92ZVRo
cmVhZChUaHJlYWQqIHRocmVhZCkKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHRocmVh
ZExvY2spOworICAgIGFjdGl2ZVRocmVhZHMobG9ja2VyKS5yZW1vdmUodGhyZWFkKTsKK30KKwor
c3RhdGljIGJvb2wgdXNlTWFjaCB7IGZhbHNlIH07Cit2b2lkIGhhbmRsZVNpZ25hbHNXaXRoTWFj
aCgpCit7CisjaWYgT1MoREFSV0lOKQorICAgIGRlbGl2ZXJNZXNzYWdlc1VzaW5nTWFjaCgpOwor
ICAgIHVzZU1hY2ggPSB0cnVlOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIGpzY1NpZ25hbEhh
bmRsZXIoaW50LCBzaWdpbmZvX3QqLCB2b2lkKik7CisKK3ZvaWQgaW5zdGFsbFNpZ25hbEhhbmRs
ZXIoU2lnbmFsIHNpZ25hbCwgU2lnbmFsSGFuZGxlciYmIGhhbmRsZXIpCit7CisgICAgQVNTRVJU
KHNpZ25hbCA8IFNpZ25hbDo6VW5rbm93bik7CisgICAgaWYgKHNpZ25hbCA9PSBTaWduYWw6OkJ1
cyAmJiAhdXNlTWFjaCkKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVCghdXNlTWFjaCB8fCBz
aWduYWwgIT0gU2lnbmFsOjpVc3IpOworCisjaWYgT1MoREFSV0lOKQorICAgIGlmICh1c2VNYWNo
KQorICAgICAgICBzdGFydE1hY2hFeGNlcHRpb25IYW5kbGVyVGhyZWFkKCk7CisjZW5kaWYKKwor
ICAgIHN0ZDo6Y2FsbF9vbmNlKGluaXRpYWxpemVPbmNlRmxhZ3Nbc3RhdGljX2Nhc3Q8c2l6ZV90
PihzaWduYWwpXSwgWyZdIHsKKyAgICAgICAgaGFuZGxlcnNbc3RhdGljX2Nhc3Q8c2l6ZV90Pihz
aWduYWwpXS5jb25zdHJ1Y3QoKTsKKworICAgICAgICBpZiAoIXVzZU1hY2gpIHsKKyAgICAgICAg
ICAgIHN0cnVjdCBzaWdhY3Rpb24gYWN0aW9uOworICAgICAgICAgICAgYWN0aW9uLnNhX3NpZ2Fj
dGlvbiA9IGpzY1NpZ25hbEhhbmRsZXI7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHNpZ2Zp
bGxzZXQoJmFjdGlvbi5zYV9tYXNrKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFyZXN1
bHQpOworICAgICAgICAgICAgYWN0aW9uLnNhX2ZsYWdzID0gU0FfU0lHSU5GTzsKKyAgICAgICAg
ICAgIHJlc3VsdCA9IHNpZ2FjdGlvbih0b1N5c3RlbVNpZ25hbChzaWduYWwpLCAmYWN0aW9uLCAm
b2xkQWN0aW9uc1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNpZ25hbCldKTsKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFyZXN1bHQpOworICAgICAgICB9CisKKyAgICB9KTsKKworICAgIGhhbmRs
ZXJzW3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0tPmFkZChXVEZNb3ZlKGhhbmRsZXIpKTsK
KworI2lmIE9TKERBUldJTikKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHRocmVhZExvY2sp
OworICAgIGlmICh1c2VNYWNoKSB7CisgICAgICAgIGFjdGl2ZUV4Y2VwdGlvbnMgfD0gdG9NYWNo
TWFzayhzaWduYWwpOworCisgICAgICAgIGZvciAoVGhyZWFkKiB0aHJlYWQgOiBhY3RpdmVUaHJl
YWRzKGxvY2tlcikpCisgICAgICAgICAgICBzZXRFeGNlcHRpb25Qb3J0cyhsb2NrZXIsIHRocmVh
ZCk7CisgICAgfQorI2VuZGlmCit9CisKK3ZvaWQganNjU2lnbmFsSGFuZGxlcihpbnQgc2lnLCBz
aWdpbmZvX3QqIGluZm8sIHZvaWQqIG1jb250ZXh0KQogewogICAgIFNpZ25hbCBzaWduYWwgPSBm
cm9tU3lzdGVtU2lnbmFsKHNpZyk7CiAKQEAgLTYyLDEwICsyOTQsMTYgQEAgc3RhdGljIHZvaWQg
anNjU2lnbmFsSGFuZGxlcihpbnQgc2lnLCBzaWdpbmZvX3QqIGluZm8sIHZvaWQqIG1jb250ZXh0
KQogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgU2lnSW5mbyBzaWdJbmZvOworICAgIGlm
IChzaWduYWwgPT0gU2lnbmFsOjpTZWdWIHx8IHNpZ25hbCA9PSBTaWduYWw6OkJ1cykKKyAgICAg
ICAgc2lnSW5mby5mYXVsdGluZ0FkZHJlc3MgPSBpbmZvLT5zaV9hZGRyOworCisgICAgUGxhdGZv
cm1SZWdpc3RlcnMmIHJlZ2lzdGVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8bWNvbnRleHRfdD4obWNv
bnRleHQpLT5fX3NzOworCiAgICAgYm9vbCBkaWRIYW5kbGUgPSBmYWxzZTsKICAgICBib29sIHJl
c3RvcmVEZWZhdWx0SGFuZGxlciA9IGZhbHNlOwogICAgIGhhbmRsZXJzW3N0YXRpY19jYXN0PHNp
emVfdD4oc2lnbmFsKV0tPml0ZXJhdGUoWyZdIChjb25zdCBTaWduYWxIYW5kbGVyJiBoYW5kbGVy
KSB7Ci0gICAgICAgIHN3aXRjaCAoaGFuZGxlcihzaWcsIGluZm8sIG1jb250ZXh0KSkgeworICAg
ICAgICBzd2l0Y2ggKGhhbmRsZXIoc2lnbmFsLCBzaWdJbmZvLCByZWdpc3RlcnMpKSB7CiAgICAg
ICAgIGNhc2UgU2lnbmFsQWN0aW9uOjpIYW5kbGVkOgogICAgICAgICAgICAgZGlkSGFuZGxlID0g
dHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTAwLDI0ICszMzgsNiBAQCBzdGF0aWMgdm9p
ZCBqc2NTaWduYWxIYW5kbGVyKGludCBzaWcsIHNpZ2luZm9fdCogaW5mbywgdm9pZCogbWNvbnRl
eHQpCiAgICAgfQogfQogCi12b2lkIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbCBzaWduYWws
IFNpZ25hbEhhbmRsZXImJiBoYW5kbGVyKQotewotICAgIEFTU0VSVChzaWduYWwgPCBTaWduYWw6
OlVua25vd24pOwotICAgIHN0ZDo6Y2FsbF9vbmNlKGluaXRpYWxpemVPbmNlRmxhZ3Nbc3RhdGlj
X2Nhc3Q8c2l6ZV90PihzaWduYWwpXSwgWyZdIHsKLSAgICAgICAgaGFuZGxlcnNbc3RhdGljX2Nh
c3Q8c2l6ZV90PihzaWduYWwpXS5jb25zdHJ1Y3QoKTsKLQotICAgICAgICBzdHJ1Y3Qgc2lnYWN0
aW9uIGFjdGlvbjsKLSAgICAgICAgYWN0aW9uLnNhX3NpZ2FjdGlvbiA9IGpzY1NpZ25hbEhhbmRs
ZXI7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gc2lnZmlsbHNldCgmYWN0aW9uLnNhX21hc2spOwot
ICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmVzdWx0KTsKLSAgICAgICAgYWN0aW9uLnNhX2ZsYWdz
ID0gU0FfU0lHSU5GTzsKLSAgICAgICAgcmVzdWx0ID0gc2lnYWN0aW9uKHRvU3lzdGVtU2lnbmFs
KHNpZ25hbCksICZhY3Rpb24sICZvbGRBY3Rpb25zW3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFs
KV0pOwotICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmVzdWx0KTsKLSAgICB9KTsKLQotICAgIGhh
bmRsZXJzW3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0tPmFkZChXVEZNb3ZlKGhhbmRsZXIp
KTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV1RGCiAKICNlbmRpZiAvLyBVU0UoUFRIUkVBRFMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90aHJlYWRzL1NpZ25hbHMuaCBiL1NvdXJjZS9XVEYv
d3RmL3RocmVhZHMvU2lnbmFscy5oCmluZGV4IDFlNGViNDZlYWE3NzRhMWVlODlmNmZiMmRhZWYz
MzI2OGNlNTY3NzkuLjgxYWIwMDQyNmQxMGZjZmQyZDJkNTJiMzdiNWIxNzVjNTY2YWI4YTIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RocmVhZHMvU2lnbmFscy5oCisrKyBiL1NvdXJjZS9X
VEYvd3RmL3RocmVhZHMvU2lnbmFscy5oCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlIDxz
aWduYWwuaD4KICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKyNpbmNsdWRlIDx3dGYvUGxhdGZv
cm1SZWdpc3RlcnMuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKQEAgLTc5LDcgKzgwLDExIEBAIGVu
dW0gY2xhc3MgU2lnbmFsQWN0aW9uIHsKICAgICBGb3JjZURlZmF1bHQKIH07CiAKLXVzaW5nIFNp
Z25hbEhhbmRsZXIgPSBGdW5jdGlvbjxTaWduYWxBY3Rpb24oaW50LCBzaWdpbmZvX3QqLCB2b2lk
Kik+Oworc3RydWN0IFNpZ0luZm8geworICAgIHZvaWQqIGZhdWx0aW5nQWRkcmVzcyB7IDAgfTsK
K307CisKK3VzaW5nIFNpZ25hbEhhbmRsZXIgPSBGdW5jdGlvbjxTaWduYWxBY3Rpb24oU2lnbmFs
LCBTaWdJbmZvJiwgUGxhdGZvcm1SZWdpc3RlcnMmKT47CiAKIC8vIENhbGwgdGhpcyBtZXRob2Qg
d2hlbmV2ZXIgeW91IHdhbnQgdG8gaW5zdGFsbCBhIHNpZ25hbCBoYW5kbGVyLiBJdCdzIG9rIHRv
IGNhbGwgdGhpcyBmdW5jdGlvbiBsYXppbHkuCiAvLyBOb3RlOiBZb3VyIHNpZ25hbCBoYW5kbGVy
IHdpbGwgYmUgY2FsbGVkIGV2ZXJ5IHRpbWUgdGhlIGhhbmRsZXIgZm9yIHRoZSBkZXNpcmVkIHNp
Z25hbCBpcyBjYWxsZWQuCkBAIC04Nyw5ICs5MiwxOSBAQCB1c2luZyBTaWduYWxIYW5kbGVyID0g
RnVuY3Rpb248U2lnbmFsQWN0aW9uKGludCwgc2lnaW5mb190Kiwgdm9pZCopPjsKIC8vIFRoaXMg
ZnVuY3Rpb24gaXMgY3VycmVudGx5IGEgb25lIHdheSBzdHJlZXQgaS5lLiBvbmNlIGluc3RhbGxl
ZCwgYSBzaWduYWwgaGFuZGxlciBjYW5ub3QgYmUgdW5pbnN0YWxsZWQuCiB2b2lkIGluc3RhbGxT
aWduYWxIYW5kbGVyKFNpZ25hbCwgU2lnbmFsSGFuZGxlciYmKTsKIAorCisjaWYgT1MoREFSV0lO
KQorY2xhc3MgVGhyZWFkOwordm9pZCByZWdpc3RlclRocmVhZChUaHJlYWQqKTsKK3ZvaWQgcmVt
b3ZlVGhyZWFkKFRocmVhZCopOworCit2b2lkIGhhbmRsZVNpZ25hbHNXaXRoTWFjaCgpOworI2Vu
ZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6OlNpZ25hbDsKK3VzaW5nIFdU
Rjo6U2lnSW5mbzsKIHVzaW5nIFdURjo6dG9TeXN0ZW1TaWduYWw7CiB1c2luZyBXVEY6OmZyb21T
eXN0ZW1TaWduYWw7CiB1c2luZyBXVEY6OlNpZ25hbEFjdGlvbjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309715</attachid>
            <date>2017-05-11 09:26:27 -0700</date>
            <delta_ts>2017-05-11 10:43:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171865-20170511092626.patch</filename>
            <type>text/plain</type>
            <size>44967</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE2Njc3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
YzIyOWE0ZjkxMDMxZGZlOTU1YTQxMGIyMDI0Njc2ZTFmM2NkZWIxLi43NDJhZGYzMzI0N2Q3Mjli
NmY4MWM2MTc2MzQ4ZDc4OTA4YTY1ZmFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzOSBAQAorMjAxNy0wNS0xMCAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBVc2UgTWFjaCBleGNlcHRpb25zIGluc3RlYWQgb2Ygc2lnbmFscyB3
aGVyZSBwb3NzaWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTcxODY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhpcyBwYXRjaCBhZGRzIHNvbWUgbmV3IEpTQyBvcHRpb25zLiBUaGUgZmlyc3QgaXMg
YSBmdW5jdGlvbiB0aGF0CisgICAgICAgIGVuYWJsZXMgb3IgZGlzYWJsZXMgd2ViIGFzc2VtYmx5
IHRpZXIgdXAuIFRoZSBzZWNvbmQgY29udHJvbHMKKyAgICAgICAgd2hldGhlciBvciBub3Qgd2Ug
dXNlIG1hY2ggZXhjZXB0aW9ucyAod2hlcmUgYXZhaWxhYmxlKS4KKworICAgICAgICAqIEFQSS90
ZXN0cy9FeGVjdXRpb25UaW1lTGltaXRUZXN0LmNwcDoKKyAgICAgICAgKGRpc3BhdGNoVGVybWl0
YXRlQ2FsbGJhY2spOgorICAgICAgICAodGVzdEV4ZWN1dGlvblRpbWVMaW1pdCk6CisgICAgICAg
ICogcnVudGltZS9PcHRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6cmVjb21wdXRlRGVwZW5kZW50
T3B0aW9ucyk6CisgICAgICAgIChKU0M6Ok9wdGlvbnM6OmluaXRpYWxpemUpOgorICAgICAgICAq
IHJ1bnRpbWUvT3B0aW9ucy5oOgorICAgICAgICAqIHJ1bnRpbWUvVk1UcmFwcy5jcHA6CisgICAg
ICAgIChKU0M6OlNpZ25hbENvbnRleHQ6OlNpZ25hbENvbnRleHQpOgorICAgICAgICAoSlNDOjpT
aWduYWxDb250ZXh0OjphZGp1c3RQQ1RvUG9pbnRUb1RyYXBwaW5nSW5zdHJ1Y3Rpb24pOgorICAg
ICAgICAoSlNDOjppbnN0YWxsU2lnbmFsSGFuZGxlcik6CisgICAgICAgIChKU0M6OlZNVHJhcHM6
OlNpZ25hbFNlbmRlcjo6c2VuZCk6CisgICAgICAgICogdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXpl
ci5jcHA6CisgICAgICAgIChKU0M6OlNpZ25hbENvbnRleHQ6OlNpZ25hbENvbnRleHQpOgorICAg
ICAgICAoSlNDOjpTaWduYWxDb250ZXh0OjpkdW1wKToKKyAgICAgICAgKEpTQzo6aW5zdGFsbENy
YXNoSGFuZGxlcik6CisgICAgICAgICogd2FzbS9XYXNtQkJRUGxhbi5jcHA6CisgICAgICAgIChK
U0M6Oldhc206OkJCUVBsYW46OmNvbXBpbGVGdW5jdGlvbnMpOgorICAgICAgICAqIHdhc20vV2Fz
bUZhdWx0U2lnbmFsSGFuZGxlci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OnRyYXBIYW5kbGVy
KToKKyAgICAgICAgKEpTQzo6V2FzbTo6ZW5hYmxlRmFzdE1lbW9yeSk6CisgICAgICAgICogd2Fz
bS9XYXNtTWFjaGluZVRocmVhZHMuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpzdGFydFRyYWNr
aW5nQ3VycmVudFRocmVhZCk6CisgICAgICAgIChKU0M6Oldhc206OnJlc2V0SW5zdHJ1Y3Rpb25D
YWNoZU9uQWxsVGhyZWFkcyk6CisKIDIwMTctMDUtMTEgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBw
bGUuY29tPgogCiAgICAgICAgIFdvcmtlclRocmVhZDo6c3RvcCgpIHNob3VsZCBjYWxsIHNjaGVk
dWxlRXhlY3V0aW9uVGVybWluYXRpb24oKSBsYXN0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCBlY2RkYjMzZmJlZDUyMTExYmMw
NzE5NWQ2YzA4ZmU0MDZiMmMxYTM1Li4xZjUxMGVkYzBmYWE3YzQ4YTEwMmFlZmFhODA1NzQ0YTYw
NjVmZWNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RG
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisyMDE3LTA1LTEwICBLZWl0aCBNaWxsZXIgIDxr
ZWl0aF9taWxsZXJAYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBNYWNoIGV4Y2VwdGlvbnMgaW5z
dGVhZCBvZiBzaWduYWxzIHdoZXJlIHBvc3NpYmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzE4NjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGVuYWJsZXMgdXNpbmcgbWFjaCBleGNl
cHRpb25zIG9uIGRhcndpbi4gVGhlIHdheSB0aGUKKyAgICAgICAgbWFjaCBleGNlcHRpb24gYXBp
IHdvcmtzIGlzIHRoYXQgd2UgY3JlYXRlIGEgbWFjaCBwb3J0LCB3aGljaCBpcworICAgICAgICBs
aWtlIGEgZmlsZSBkZXNjcmlwdG9yLiAgV2UgdGhlbiB3YWl0IGZvciBhIG1lc3NhZ2UgdG8gYXJy
aXZlIG9uCisgICAgICAgIHRoYXQgcG9ydCBpbiBhIHRocmVhZC4gV2hlbiBhbm90aGVyIHRocmVh
ZCByYWlzZXMgYSBleGNlcHRpb24gKHNheQorICAgICAgICBkdWUgdG8gYSBiYWQgbWVtb3J5IGFj
Y2VzcykgdGhlIE9TIHNlbmRzIG91ciB0aHJlYWQgYSBtZXNzYWdlLiBUaGUKKyAgICAgICAgcGF5
bG9hZCBvZiB0aGF0IG1lc3NhZ2UgaXMgdGhlIHJlZ2lzdGVyIGZpbGUgb2YgdGhlIGNyYXNoaW5n
CisgICAgICAgIHRocmVhZC4gV2UgdGhlbiBjYWxsIG91ciBjdXN0b20gaGFuZGxlcnMgdGhhdCBj
aGFuZ2UgdGhlIHN0YXRlIGFzCisgICAgICAgIG5lZWRlZC4gSW4gb3JkZXIgdG8gcmVzdGFydCB0
aGUgdGhyZWFkIHdlIHNlbmQgYSBwYXlsb2FkIGJhY2sgdG8KKyAgICAgICAgdGhlIE9TIHdpdGgg
YW4gdXBkYXRlZCByZWdpc3RlciBmaWxlIGFsb25nIHdpdGggYSBzdWNjZXNzIG1lc3NhZ2UKKyAg
ICAgICAgaGVhZGVyLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBtYWtlcyB0aHJlYWQgbWVz
c2FnZXMgd29yayB3aXRob3V0IHNpZ25hbHMgYnkKKyAgICAgICAgc2ltcGx5IHN1c3BlbmRpbmcg
dGhlIHRocmVhZCB0aGVuIHJ1bm5pbmcgdGhlIG1lc3NhZ2UgYXQgdGhhdAorICAgICAgICB0aW1l
LgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
d3RmL1N0YWNrQm91bmRzLmg6CisgICAgICAgIChXVEY6OlN0YWNrQm91bmRzOjpTdGFja0JvdW5k
cyk6CisgICAgICAgICogd3RmL1RocmVhZE1lc3NhZ2UuY3BwOgorICAgICAgICAoV1RGOjpzZW5k
TWVzc2FnZVNpZ25hbCk6CisgICAgICAgIChXVEY6OnNlbmRNZXNzYWdlTWFjaCk6CisgICAgICAg
IChXVEY6OmRlbGl2ZXJNZXNzYWdlc1VzaW5nTWFjaCk6CisgICAgICAgIChXVEY6OnNlbmRNZXNz
YWdlU2NvcGVkKToKKyAgICAgICAgKiB3dGYvVGhyZWFkTWVzc2FnZS5oOgorICAgICAgICAoV1RG
OjpzZW5kTWVzc2FnZSk6CisgICAgICAgICogd3RmL1RocmVhZGluZy5oOgorICAgICAgICAoV1RG
OjpUaHJlYWQ6Om1hY2hUaHJlYWQpOgorICAgICAgICAqIHd0Zi9UaHJlYWRpbmdQdGhyZWFkcy5j
cHA6CisgICAgICAgIChXVEY6OlRocmVhZDo6flRocmVhZCk6CisgICAgICAgICogd3RmL21hYy9N
YWNoRXhjZXB0aW9ucy5kZWZzOiBDb3BpZWQgZnJvbSBTb3VyY2UvV1RGL3d0Zi9UaHJlYWRNZXNz
YWdlLmguCisgICAgICAgICogd3RmL3RocmVhZHMvU2lnbmFscy5jcHA6CisgICAgICAgIChXVEY6
OnN0YXJ0TWFjaEV4Y2VwdGlvbkhhbmRsZXJUaHJlYWQpOgorICAgICAgICAoV1RGOjpmcm9tTWFj
aEV4Y2VwdGlvbik6CisgICAgICAgIChXVEY6OnRvTWFjaE1hc2spOgorICAgICAgICAoV1RGOjpz
ZXRFeGNlcHRpb25Qb3J0cyk6CisgICAgICAgIChXVEY6OmFjdGl2ZVRocmVhZHMpOgorICAgICAg
ICAoV1RGOjpyZWdpc3RlclRocmVhZCk6CisgICAgICAgIChXVEY6OnJlbW92ZVRocmVhZCk6Cisg
ICAgICAgIChXVEY6OmhhbmRsZVNpZ25hbHNXaXRoTWFjaCk6CisgICAgICAgIChXVEY6Omluc3Rh
bGxTaWduYWxIYW5kbGVyKToKKyAgICAgICAgKFdURjo6anNjU2lnbmFsSGFuZGxlcik6CisgICAg
ICAgICogd3RmL3RocmVhZHMvU2lnbmFscy5oOgorCiAyMDE3LTA1LTA5ICBTYW0gV2VpbmlnICA8
c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVtb3ZlIHN1cHBvcnQgZm9yIGxlZ2FjeSBOb3Rp
ZmljYXRpb25zCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0V4
ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0
cy9FeGVjdXRpb25UaW1lTGltaXRUZXN0LmNwcAppbmRleCBkNWU1MzI0M2I3OGRmNzUxMzQyYWQ4
ZDM5MGE0YjA0MTNkOWVlZjllLi43ZWFjMDczMDlkZGMzZjE2NDk0NTBiZDAzNzlkMmNhMThmMDE2
OWFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0V4ZWN1dGlv
blRpbWVMaW1pdFRlc3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMv
RXhlY3V0aW9uVGltZUxpbWl0VGVzdC5jcHAKQEAgLTMwLDggKzMwLDEzIEBACiAjaW5jbHVkZSAi
SlNDb250ZXh0UmVmUHJpdmF0ZS5oIgogI2luY2x1ZGUgIkphdmFTY3JpcHRDb3JlLmgiCiAjaW5j
bHVkZSAiT3B0aW9ucy5oIgorCiAjaW5jbHVkZSA8Y2hyb25vPgorI2luY2x1ZGUgPGRpc3BhdGNo
L2Rpc3BhdGNoLmg+CisjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KKyNpbmNsdWRlIDx3dGYvQ29u
ZGl0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5jbHVkZSA8d3RmL0xv
Y2suaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIHVzaW5nIG5hbWVz
cGFjZSBzdGQ6OmNocm9ubzsKQEAgLTc3LDYgKzgyLDEzIEBAIHN0YXRpYyBib29sIGV4dGVuZFRl
cm1pbmF0ZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjdHgsIHZvaWQqKQogICAgIHJldHVybiB0cnVl
OwogfQogCitib29sIGRpc3BhdGNoVGVybWluYXRlQ2FsbGJhY2tDYWxsZWQgPSBmYWxzZTsKK3N0
YXRpYyBib29sIGRpc3BhdGNoVGVybWl0YXRlQ2FsbGJhY2soSlNDb250ZXh0UmVmLCB2b2lkKikK
K3sKKyAgICBkaXNwYXRjaFRlcm1pbmF0ZUNhbGxiYWNrQ2FsbGVkID0gdHJ1ZTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwogc3RydWN0IFRpZXJPcHRpb25zIHsKICAgICBjb25zdCBjaGFyKiB0aWVy
OwogICAgIHVuc2lnbmVkIHRpbWVMaW1pdEFkanVzdG1lbnRNaWxsaXM7CkBAIC0zNjUsNiArMzc3
LDYzIEBAIGludCB0ZXN0RXhlY3V0aW9uVGltZUxpbWl0KCkKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogCisgICAgICAgIC8qIFRlc3Qgc2NyaXB0IHRpbWVvdXQgZnJvbSBkaXNwYXRjaCBxdWV1
ZTogKi8KKyAgICAgICAgdGltZUxpbWl0ID0gKDEwMCArIHRpZXJBZGp1c3RtZW50TWlsbGlzKSAv
IDEwMDAuMDsKKyAgICAgICAgSlNDb250ZXh0R3JvdXBTZXRFeGVjdXRpb25UaW1lTGltaXQoY29u
dGV4dEdyb3VwLCB0aW1lTGltaXQsIGRpc3BhdGNoVGVybWl0YXRlQ2FsbGJhY2ssIDApOworICAg
ICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCB0aW1lQWZ0ZXJXYXRjaGRvZ1Nob3VsZEhhdmVG
aXJlZCA9IDMwMCArIHRpZXJBZGp1c3RtZW50TWlsbGlzOworCisgICAgICAgICAgICBTdHJpbmdC
dWlsZGVyIHNjcmlwdEJ1aWxkZXI7CisgICAgICAgICAgICBzY3JpcHRCdWlsZGVyLmFwcGVuZExp
dGVyYWwoImZ1bmN0aW9uIGZvbygpIHsgdmFyIHN0YXJ0VGltZSA9IGN1cnJlbnRDUFVUaW1lKCk7
IHdoaWxlICh0cnVlKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDsgaSsrKTsgaWYgKGN1cnJl
bnRDUFVUaW1lKCkgLSBzdGFydFRpbWUgPiAiKTsKKyAgICAgICAgICAgIHNjcmlwdEJ1aWxkZXIu
YXBwZW5kTnVtYmVyKHRpbWVBZnRlcldhdGNoZG9nU2hvdWxkSGF2ZUZpcmVkIC8gMTAwMC4wKTsK
KyAgICAgICAgICAgIHNjcmlwdEJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiKSBicmVhazsgfSB9IGZv
bygpOyIpOworCisgICAgICAgICAgICBKU1N0cmluZ1JlZiBzY3JpcHQgPSBKU1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZyhzY3JpcHRCdWlsZGVyLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7
CisgICAgICAgICAgICBleGNlcHRpb24gPSBudWxscHRyOworICAgICAgICAgICAgZGlzcGF0Y2hU
ZXJtaW5hdGVDYWxsYmFja0NhbGxlZCA9IGZhbHNlOworCisgICAgICAgICAgICAvLyBXZSBoYXZl
IHRvIGRvIHRoaXMgc2luY2UgYmxvY2tzIGNhbiBvbmx5IGNhcHR1cmUgdGhpbmdzIGFzIGNvbnN0
LgorICAgICAgICAgICAgSlNHbG9iYWxDb250ZXh0UmVmJiBjb250ZXh0UmVmID0gY29udGV4dDsK
KyAgICAgICAgICAgIEpTU3RyaW5nUmVmJiBzY3JpcHRSZWYgPSBzY3JpcHQ7CisgICAgICAgICAg
ICBKU1ZhbHVlUmVmJiBleGNlcHRpb25SZWYgPSBleGNlcHRpb247CisKKyAgICAgICAgICAgIExv
Y2sgc3luY0xvY2s7CisgICAgICAgICAgICBMb2NrJiBzeW5jTG9ja1JlZiA9IHN5bmNMb2NrOwor
ICAgICAgICAgICAgQ29uZGl0aW9uIHN5bmNocm9uaXplOworICAgICAgICAgICAgQ29uZGl0aW9u
JiBzeW5jaHJvbml6ZVJlZiA9IHN5bmNocm9uaXplOworICAgICAgICAgICAgYm9vbCBkaWRTeW5j
aHJvbml6ZSA9IGZhbHNlOworICAgICAgICAgICAgYm9vbCYgZGlkU3luY2hyb25pemVSZWYgPSBk
aWRTeW5jaHJvbml6ZTsKKworICAgICAgICAgICAgc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcyBz
dGFydFRpbWU7CisgICAgICAgICAgICBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzIGVuZFRpbWU7
CisKKyAgICAgICAgICAgIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMmIHN0YXJ0VGltZVJlZiA9
IHN0YXJ0VGltZTsKKyAgICAgICAgICAgIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMmIGVuZFRp
bWVSZWYgPSBlbmRUaW1lOworCisgICAgICAgICAgICBkaXNwYXRjaF9ncm91cF90IGdyb3VwID0g
ZGlzcGF0Y2hfZ3JvdXBfY3JlYXRlKCk7CisgICAgICAgICAgICBkaXNwYXRjaF9ncm91cF9hc3lu
Yyhncm91cCwgZGlzcGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZSgwLCAwKSwgXnsKKyAgICAgICAgICAg
ICAgICBzdGFydFRpbWVSZWYgPSBjdXJyZW50Q1BVVGltZSgpOworICAgICAgICAgICAgICAgIEpT
RXZhbHVhdGVTY3JpcHQoY29udGV4dFJlZiwgc2NyaXB0UmVmLCBudWxscHRyLCBudWxscHRyLCAx
LCAmZXhjZXB0aW9uUmVmKTsKKyAgICAgICAgICAgICAgICBlbmRUaW1lUmVmID0gY3VycmVudENQ
VVRpbWUoKTsKKyAgICAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IFdURjo6aG9sZExvY2soc3lu
Y0xvY2tSZWYpOworICAgICAgICAgICAgICAgIGRpZFN5bmNocm9uaXplUmVmID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICBzeW5jaHJvbml6ZVJlZi5ub3RpZnlBbGwoKTsKKyAgICAgICAgICAgIH0p
OworCisgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHN5bmNMb2NrKTsKKyAgICAg
ICAgICAgIHN5bmNocm9uaXplLndhaXQoc3luY0xvY2ssIFsmXSB7IHJldHVybiBkaWRTeW5jaHJv
bml6ZTsgfSk7CisKKyAgICAgICAgICAgIGlmICgoKGVuZFRpbWUgLSBzdGFydFRpbWUpIDwgbWls
bGlzZWNvbmRzKHRpbWVBZnRlcldhdGNoZG9nU2hvdWxkSGF2ZUZpcmVkKSkgJiYgZGlzcGF0Y2hU
ZXJtaW5hdGVDYWxsYmFja0NhbGxlZCkKKyAgICAgICAgICAgICAgICBwcmludGYoIlBBU1M6ICVz
IHNjcmlwdCBvbiBkaXNwYXRjaCBxdWV1ZSB0aW1lZCBvdXQgYXMgZXhwZWN0ZWQuXG4iLCB0aWVy
T3B0aW9ucy50aWVyKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlmICgo
ZW5kVGltZSAtIHN0YXJ0VGltZSkgPj0gbWlsbGlzZWNvbmRzKHRpbWVBZnRlcldhdGNoZG9nU2hv
dWxkSGF2ZUZpcmVkKSkKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJGQUlMOiAlcyBzY3Jp
cHQgb24gZGlzcGF0Y2ggcXVldWUgZGlkIG5vdCB0aW1lIG91dCBhcyBleHBlY3RlZC5cbiIsIHRp
ZXJPcHRpb25zLnRpZXIpOworICAgICAgICAgICAgICAgIGlmICghc2hvdWxkVGVybWluYXRlQ2Fs
bGJhY2tXYXNDYWxsZWQpCisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiRkFJTDogJXMgc2Ny
aXB0IG9uIGRpc3BhdGNoIHF1ZXVlIHRpbWVvdXQgY2FsbGJhY2sgd2FzIG5vdCBjYWxsZWQuXG4i
LCB0aWVyT3B0aW9ucy50aWVyKTsKKyAgICAgICAgICAgICAgICBmYWlsZWQgPSB0cnVlOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKICAgICAgICAgSlNHbG9iYWxDb250ZXh0UmVsZWFzZShj
b250ZXh0KTsKIAogICAgICAgICBPcHRpb25zOjpzZXRPcHRpb25zKHNhdmVkT3B0aW9uc0J1aWxk
ZXIudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNMb2NrLmNwcAppbmRleCBjMTc1YWUwYzQ4MmVkMjdiZDVmNmJkYzg3OTY4ZTc1ZDQ1YWY1
MGVmLi5mNTcxZGRiY2NiYTk2MDFiZjZiMTE0YTdkNjJhYWNlNDYzY2I3ZDhiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAKQEAgLTMwLDYgKzMwLDggQEAKICNpbmNs
dWRlICJTYW1wbGluZ1Byb2ZpbGVyLmgiCiAjaW5jbHVkZSAiV2FzbU1hY2hpbmVUaHJlYWRzLmgi
CiAjaW5jbHVkZSA8dGhyZWFkPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRl
IDx3dGYvdGhyZWFkcy9TaWduYWxzLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0xNDgsNiAr
MTUwLDggQEAgdm9pZCBKU0xvY2s6OmRpZEFjcXVpcmVMb2NrKCkKICAgICBXYXNtOjpzdGFydFRy
YWNraW5nQ3VycmVudFRocmVhZCgpOwogI2VuZGlmCiAKKyAgICBXVEY6OnJlZ2lzdGVyVGhyZWFk
KCZUaHJlYWQ6OmN1cnJlbnQoKSk7CisKICAgICBtX3ZtLT50cmFwcygpLm5vdGlmeUdyYWJBbGxM
b2NrcygpOwogCiAjaWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zLmNwcAppbmRleCBiMDRkZTM1YTUzNjE1MDg0Mzg1NzVjMjI3
YTUwMTRkZDBjNTFiYWEyLi40MzEzZTI0NGNlOTBiMTJjYzMzNDZkN2I1ZWQzY2Y3OWMwMDRhZWE4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcApAQCAtNDMsNiAr
NDMsNyBAQAogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvU3Ry
aW5nRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorI2luY2x1
ZGUgPHd0Zi90aHJlYWRzL1NpZ25hbHMuaD4KIAogI2lmIFBMQVRGT1JNKENPQ09BKQogI2luY2x1
ZGUgPGNydF9leHRlcm5zLmg+CkBAIC00ODYsNiArNDg3LDcgQEAgc3RhdGljIHZvaWQgcmVjb21w
dXRlRGVwZW5kZW50T3B0aW9ucygpCiAKICAgICBpZiAoT3B0aW9uczo6dXNlU2lnaWxsQ3Jhc2hB
bmFseXplcigpKQogICAgICAgICBlbmFibGVTaWdpbGxDcmFzaEFuYWx5emVyKCk7CisKIH0KIAog
dm9pZCBPcHRpb25zOjppbml0aWFsaXplKCkKQEAgLTU0NSw2ICs1NDcsOSBAQCB2b2lkIE9wdGlv
bnM6OmluaXRpYWxpemUoKQogCiAgICAgICAgICAgICBkdW1wT3B0aW9uc0lmTmVlZGVkKCk7CiAg
ICAgICAgICAgICBlbnN1cmVPcHRpb25zQXJlQ29oZXJlbnQoKTsKKworICAgICAgICAgICAgaWYg
KE9wdGlvbnM6OnVzZU1hY2hGb3JFeGNlcHRpb25zKCkpCisgICAgICAgICAgICAgICAgV1RGOjpo
YW5kbGVTaWduYWxzV2l0aE1hY2goKTsKICAgICAgICAgfSk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09wdGlvbnMuaAppbmRleCBjZjlkYzJiMmE4MjU2OGVlMDdkYTA4ODllMzli
NmIyZjlkY2Q3OTc1Li4yMjc0ZDFjZGViMzMzNmUzN2FiNDQ3M2VhNDExNmVhMzIyOWU5MzdmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCkBAIC00MjAsNiArNDIwLDgg
QEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAgdih1bnNpZ25lZCwgd2F0
Y2hkb2csIDAsIE5vcm1hbCwgIndhdGNoZG9nIHRpbWVvdXQgKDAgPSBEaXNhYmxlZCwgTiA9IGEg
dGltZW91dCBwZXJpb2Qgb2YgTiBtaWxsaXNlY29uZHMpIikgXAogICAgIHYoYm9vbCwgdXNlUG9s
bGluZ1RyYXBzLCBmYWxzZSwgTm9ybWFsLCAidXNlIHBvbGxpbmcgKGluc3RlYWQgb2Ygc2lnbmFs
bGluZykgVk0gdHJhcHMiKSBcCiAgICAgXAorICAgIHYoYm9vbCwgdXNlTWFjaEZvckV4Y2VwdGlv
bnMsIHRydWUsIE5vcm1hbCwgIlVzZSBtYWNoIGV4Y2VwdGlvbnMgcmF0aGVyIHRoYW4gc2lnbmFs
cyB0byBoYW5kbGUgZmF1bHRzIGFuZCBwYXNzIHRocmVhZCBtZXNzYWdlcy4gKFRoaXMgZG9lcyBu
b3RoaW5nIG9uIHBsYXRmb3JtcyB3aXRob3V0IG1hY2gpIikgXAorICAgIFwKICAgICB2KGJvb2ws
IHVzZUlDU3RhdHMsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICBcCiAgICAgdih1bnNp
Z25lZCwgcHJvdG90eXBlSGl0Q291bnRGb3JMTEludENhY2hpbmcsIDIsIE5vcm1hbCwgIk51bWJl
ciBvZiBwcm90b3R5cGUgcHJvcGVydHkgaGl0cyBiZWZvcmUgY2FjaGluZyBhIHByb3RvdHlwZSBp
biB0aGUgTExJbnQuIEEgY291bnQgb2YgMCBtZWFucyBuZXZlciBjYWNoZS4iKSBcCkBAIC00NDMs
NiArNDQ1LDcgQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAgdih1bnNp
Z25lZCwgd2ViQXNzZW1ibHlCQlFPcHRpbWl6YXRpb25MZXZlbCwgMSwgTm9ybWFsLCAiQjMgT3B0
aW1pemF0aW9uIGxldmVsIGZvciBCQlEgV2ViIEFzc2VtYmx5IG1vZHVsZSBjb21waWxhdGlvbnMu
IikgXAogICAgIHYodW5zaWduZWQsIHdlYkFzc2VtYmx5T01HT3B0aW1pemF0aW9uTGV2ZWwsIE9w
dGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCksIE5vcm1hbCwgIkIzIE9wdGltaXphdGlvbiBsZXZl
bCBmb3IgT01HIFdlYiBBc3NlbWJseSBtb2R1bGUgY29tcGlsYXRpb25zLiIpIFwKICAgICBcCisg
ICAgdihib29sLCB1c2VCQlFUaWVyVXBDaGVja3MsIHRydWUsIE5vcm1hbCwgIkVuYWJsZXMgdGll
ciB1cCBjaGVja3MgZm9yIG91ciBCQlEgY29kZS4iKSBcCiAgICAgdih1bnNpZ25lZCwgd2ViQXNz
ZW1ibHlPTUdUaWVyVXBDb3VudCwgNTAwMCwgTm9ybWFsLCAiVGhlIGNvdW50ZG93biBiZWZvcmUg
d2UgdGllciB1cCBhIGZ1bmN0aW9uIHRvIE9NRy4iKSBcCiAgICAgdih1bnNpZ25lZCwgd2ViQXNz
ZW1ibHlMb29wRGVjcmVtZW50LCAxNSwgTm9ybWFsLCAiVGhlIGFtb3VudCB0aGUgdGllciB1cCBj
b3VudGRvd24gaXMgZGVjcmVtZW50ZWQgb24gZWFjaCBsb29wIGJhY2tlZGdlLiIpIFwKICAgICB2
KHVuc2lnbmVkLCB3ZWJBc3NlbWJseUZ1bmN0aW9uRW50cnlEZWNyZW1lbnQsIDEsIE5vcm1hbCwg
IlRoZSBhbW91bnQgdGhlIHRpZXIgdXAgY291bnRkb3duIGlzIGRlY3JlbWVudGVkIG9uIGVhY2gg
ZnVuY3Rpb24gZW50cnkuIikgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk1UcmFwcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBz
LmNwcAppbmRleCAxYmFhY2U2MDQ0ZTY2MGE4ZTU0NDFmYmFkMDE4ZWE5MDkzMWE0YzkxLi4xMGQ3
ODJhOGRjNDlhNWVkYTA4MWQ3M2Q2ODNkZmZlMTZmOGM4ZjQzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTVRyYXBzLmNwcApAQCAtNTMsMTEgKzUzLDExIEBAIEFMV0FZU19JTkxJ
TkUgVk0mIFZNVHJhcHM6OnZtKCkgY29uc3QKICNpZiBFTkFCTEUoU0lHTkFMX0JBU0VEX1ZNX1RS
QVBTKQogCiBzdHJ1Y3QgU2lnbmFsQ29udGV4dCB7Ci0gICAgU2lnbmFsQ29udGV4dChtY29udGV4
dF90JiBtY29udGV4dCkKLSAgICAgICAgOiBtY29udGV4dChtY29udGV4dCkKLSAgICAgICAgLCB0
cmFwUEMoTWFjaGluZUNvbnRleHQ6Omluc3RydWN0aW9uUG9pbnRlcihtY29udGV4dCkpCi0gICAg
ICAgICwgc3RhY2tQb2ludGVyKE1hY2hpbmVDb250ZXh0OjpzdGFja1BvaW50ZXIobWNvbnRleHQp
KQotICAgICAgICAsIGZyYW1lUG9pbnRlcihNYWNoaW5lQ29udGV4dDo6ZnJhbWVQb2ludGVyKG1j
b250ZXh0KSkKKyAgICBTaWduYWxDb250ZXh0KFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMp
CisgICAgICAgIDogY29udGV4dChyZWdpc3RlcnMpCisgICAgICAgICwgdHJhcFBDKE1hY2hpbmVD
b250ZXh0OjppbnN0cnVjdGlvblBvaW50ZXIoY29udGV4dCkpCisgICAgICAgICwgc3RhY2tQb2lu
dGVyKE1hY2hpbmVDb250ZXh0OjpzdGFja1BvaW50ZXIoY29udGV4dCkpCisgICAgICAgICwgZnJh
bWVQb2ludGVyKE1hY2hpbmVDb250ZXh0OjpmcmFtZVBvaW50ZXIoY29udGV4dCkpCiAgICAgewog
I2lmIENQVShYODZfNjQpIHx8IENQVShYODYpCiAgICAgICAgIC8vIE9uIFg4Nl82NCwgU0lHVFJB
UCByZXBvcnRzIHRoZSBhZGRyZXNzIGFmdGVyIHRoZSB0cmFwcGluZyBQQy4gU28sIGRlYyBieSAx
LgpAQCAtNjgsMTEgKzY4LDExIEBAIHN0cnVjdCBTaWduYWxDb250ZXh0IHsKICAgICB2b2lkIGFk
anVzdFBDVG9Qb2ludFRvVHJhcHBpbmdJbnN0cnVjdGlvbigpCiAgICAgewogI2lmIENQVShYODZf
NjQpIHx8IENQVShYODYpCi0gICAgICAgIE1hY2hpbmVDb250ZXh0OjppbnN0cnVjdGlvblBvaW50
ZXIobWNvbnRleHQpID0gdHJhcFBDOworICAgICAgICBNYWNoaW5lQ29udGV4dDo6aW5zdHJ1Y3Rp
b25Qb2ludGVyKGNvbnRleHQpID0gdHJhcFBDOwogI2VuZGlmCiAgICAgfQogCi0gICAgbWNvbnRl
eHRfdCYgbWNvbnRleHQ7CisgICAgUGxhdGZvcm1SZWdpc3RlcnMmIGNvbnRleHQ7CiAgICAgdm9p
ZCogdHJhcFBDOwogICAgIHZvaWQqIHN0YWNrUG9pbnRlcjsKICAgICB2b2lkKiBmcmFtZVBvaW50
ZXI7CkBAIC0xMzAsMTEgKzEzMCwxMyBAQCBzdGF0aWMgRXhwZWN0ZWQ8Vk1BbmRTdGFja0JvdW5k
cywgVk1UcmFwczo6RXJyb3I+IGZpbmRBY3RpdmVWTUFuZFN0YWNrQm91bmRzKFNpZwogCiBzdGF0
aWMgdm9pZCBpbnN0YWxsU2lnbmFsSGFuZGxlcigpCiB7Ci0gICAgaW5zdGFsbFNpZ25hbEhhbmRs
ZXIoU2lnbmFsOjpUcmFwLCBbXSAoaW50LCBzaWdpbmZvX3QqLCB2b2lkKiB1YXApIC0+IFNpZ25h
bEFjdGlvbiB7Ci0gICAgICAgIFNpZ25hbENvbnRleHQgY29udGV4dChzdGF0aWNfY2FzdDx1Y29u
dGV4dF90Kj4odWFwKS0+dWNfbWNvbnRleHQpOworICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKFNp
Z25hbDo6VHJhcCwgW10gKFNpZ25hbCwgU2lnSW5mbyYsIFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdp
c3RlcnMpIC0+IFNpZ25hbEFjdGlvbiB7CisgICAgICAgIFNpZ25hbENvbnRleHQgY29udGV4dChy
ZWdpc3RlcnMpOwogCi0gICAgICAgIGlmICghaXNKSVRQQyhjb250ZXh0LnRyYXBQQykpCisgICAg
ICAgIGlmICghaXNKSVRQQyhjb250ZXh0LnRyYXBQQykpIHsKKyAgICAgICAgICAgIGRhdGFMb2dM
bigidHJhcHBpbmcgcGM6ICIsIFJhd1BvaW50ZXIoY29udGV4dC50cmFwUEMpLCAiIGppdCBzdGFy
dDogIiwgc3RhcnRPZkZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2wsICIgaml0IGVuZDogIiwgZW5k
T2ZGaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sKTsKICAgICAgICAgICAgIHJldHVybiBTaWduYWxB
Y3Rpb246Ok5vdEhhbmRsZWQ7CisgICAgICAgIH0KIAogICAgICAgICAvLyBGSVhNRTogVGhpcyBj
dXJyZW50bHkgZWF0cyBhbGwgdHJhcHMgaW5jbHVkaW5nIGppdCBhc3NlcnRzIHdlIHNob3VsZCBt
YWtlIHN1cmUgdGhpcwogICAgICAgICAvLyBhbHdheXMgd29ya3MuIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzEwMzkKQEAgLTQwNCw4ICs0MDYsOCBAQCB2b2lkIFZN
VHJhcHM6OlNpZ25hbFNlbmRlcjo6c2VuZCgpCiAgICAgICAgICAgICBWTSYgdm0gPSAqbV92bTsK
ICAgICAgICAgICAgIGF1dG8gb3B0aW9uYWxPd25lclRocmVhZCA9IHZtLm93bmVyVGhyZWFkKCk7
CiAgICAgICAgICAgICBpZiAob3B0aW9uYWxPd25lclRocmVhZCkgewotICAgICAgICAgICAgICAg
IHNlbmRNZXNzYWdlKCpvcHRpb25hbE93bmVyVGhyZWFkLnZhbHVlKCkuZ2V0KCksIFtdIChzaWdp
bmZvX3QqLCB1Y29udGV4dF90KiB1Y29udGV4dCkgLT4gdm9pZCB7Ci0gICAgICAgICAgICAgICAg
ICAgIFNpZ25hbENvbnRleHQgY29udGV4dCh1Y29udGV4dC0+dWNfbWNvbnRleHQpOworICAgICAg
ICAgICAgICAgIHNlbmRNZXNzYWdlKCpvcHRpb25hbE93bmVyVGhyZWFkLnZhbHVlKCkuZ2V0KCks
IFtdIChQbGF0Zm9ybVJlZ2lzdGVycyYgcmVnaXN0ZXJzKSAtPiB2b2lkIHsKKyAgICAgICAgICAg
ICAgICAgICAgU2lnbmFsQ29udGV4dCBjb250ZXh0KHJlZ2lzdGVycyk7CiAgICAgICAgICAgICAg
ICAgICAgIGF1dG8gYWN0aXZlVk1BbmRTdGFja0JvdW5kcyA9IGZpbmRBY3RpdmVWTUFuZFN0YWNr
Qm91bmRzKGNvbnRleHQpOwogICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aXZlVk1BbmRTdGFj
a0JvdW5kcykgewogICAgICAgICAgICAgICAgICAgICAgICAgVk0qIHZtID0gYWN0aXZlVk1BbmRT
dGFja0JvdW5kcy52YWx1ZSgpLnZtOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rvb2xzL1NpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rv
b2xzL1NpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwCmluZGV4IDRhZGFlZmYxY2RhMmQxZmJjNmY5MDYx
ZjA2M2UxNGQyZTYzMzAwNDguLmJiNDYwNWM2OTNlMTJkZGUwNTA4NGY3YTE3Y2QxZTQ0ZjdlOWU2
NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9TaWdpbGxDcmFzaEFu
YWx5emVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvU2lnaWxsQ3Jhc2hB
bmFseXplci5jcHAKQEAgLTc4LDExICs3OCwxMSBAQCBwcml2YXRlOgogI2VuZGlmIC8vIFVTRShP
U19MT0cpCiAKIHN0cnVjdCBTaWduYWxDb250ZXh0IHsKLSAgICBTaWduYWxDb250ZXh0KG1jb250
ZXh0X3QmIG1jb250ZXh0KQotICAgICAgICA6IG1jb250ZXh0KG1jb250ZXh0KQotICAgICAgICAs
IG1hY2hpbmVQQyhNYWNoaW5lQ29udGV4dDo6aW5zdHJ1Y3Rpb25Qb2ludGVyKG1jb250ZXh0KSkK
LSAgICAgICAgLCBzdGFja1BvaW50ZXIoTWFjaGluZUNvbnRleHQ6OnN0YWNrUG9pbnRlcihtY29u
dGV4dCkpCi0gICAgICAgICwgZnJhbWVQb2ludGVyKE1hY2hpbmVDb250ZXh0OjpmcmFtZVBvaW50
ZXIobWNvbnRleHQpKQorICAgIFNpZ25hbENvbnRleHQoUGxhdGZvcm1SZWdpc3RlcnMmIGNvbnRl
eHQpCisgICAgICAgIDogY29udGV4dChjb250ZXh0KQorICAgICAgICAsIG1hY2hpbmVQQyhNYWNo
aW5lQ29udGV4dDo6aW5zdHJ1Y3Rpb25Qb2ludGVyKGNvbnRleHQpKQorICAgICAgICAsIHN0YWNr
UG9pbnRlcihNYWNoaW5lQ29udGV4dDo6c3RhY2tQb2ludGVyKGNvbnRleHQpKQorICAgICAgICAs
IGZyYW1lUG9pbnRlcihNYWNoaW5lQ29udGV4dDo6ZnJhbWVQb2ludGVyKGNvbnRleHQpKQogICAg
IHsgfQogCiAgICAgdm9pZCBkdW1wKCkKQEAgLTExMiw3ICsxMTIsNyBAQCBzdHJ1Y3QgU2lnbmFs
Q29udGV4dCB7CiAgICAgICAgIHYoZ3MpCiAKICNkZWZpbmUgRFVNUF9SRUdJU1RFUihfX3JlZykg
XAotICAgICAgICBsb2coIlJlZ2lzdGVyICIgI19fcmVnICI6ICVwIiwgcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4obWNvbnRleHQtPl9fc3MuX18jI19fcmVnKSk7CisgICAgICAgIGxvZygiUmVnaXN0
ZXIgIiAjX19yZWcgIjogJXAiLCByZWludGVycHJldF9jYXN0PHZvaWQqPihjb250ZXh0Ll9fIyNf
X3JlZykpOwogICAgICAgICBGT1JfRUFDSF9SRUdJU1RFUihEVU1QX1JFR0lTVEVSKQogI3VuZGVm
IEZPUl9FQUNIX1JFR0lTVEVSCiAKQEAgLTEyMCwyMCArMTIwLDIwIEBAIHN0cnVjdCBTaWduYWxD
b250ZXh0IHsKICAgICAgICAgaW50IGk7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAyODsgaSAr
PSA0KSB7CiAgICAgICAgICAgICBsb2coInglZDogJTAxNmxseCB4JWQ6ICUwMTZsbHggeCVkOiAl
MDE2bGx4IHglZDogJTAxNmxseCIsCi0gICAgICAgICAgICAgICAgaSwgbWNvbnRleHQtPl9fc3Mu
X194W2ldLAotICAgICAgICAgICAgICAgIGkrMSwgbWNvbnRleHQtPl9fc3MuX194W2krMV0sCi0g
ICAgICAgICAgICAgICAgaSsyLCBtY29udGV4dC0+X19zcy5fX3hbaSsyXSwKLSAgICAgICAgICAg
ICAgICBpKzMsIG1jb250ZXh0LT5fX3NzLl9feFtpKzNdKTsKKyAgICAgICAgICAgICAgICBpLCBj
b250ZXh0Ll9feFtpXSwKKyAgICAgICAgICAgICAgICBpKzEsIGNvbnRleHQuX194W2krMV0sCisg
ICAgICAgICAgICAgICAgaSsyLCBjb250ZXh0Ll9feFtpKzJdLAorICAgICAgICAgICAgICAgIGkr
MywgY29udGV4dC5fX3hbaSszXSk7CiAgICAgICAgIH0KICAgICAgICAgQVNTRVJUKGkgPCAyOSk7
CiAgICAgICAgIGxvZygieCVkOiAlMDE2bGx4IGZwOiAlMDE2bGx4IGxyOiAlMDE2bGx4IiwKLSAg
ICAgICAgICAgIGksIG1jb250ZXh0LT5fX3NzLl9feFtpXSwgbWNvbnRleHQtPl9fc3MuX19mcCwg
bWNvbnRleHQtPl9fc3MuX19scik7CisgICAgICAgICAgICBpLCBjb250ZXh0Ll9feFtpXSwgY29u
dGV4dC5fX2ZwLCBjb250ZXh0Ll9fbHIpOwogICAgICAgICBsb2coInNwOiAlMDE2bGx4IHBjOiAl
MDE2bGx4IGNwc3I6ICUwOHgiLAotICAgICAgICAgICAgbWNvbnRleHQtPl9fc3MuX19zcCwgbWNv
bnRleHQtPl9fc3MuX19wYywgbWNvbnRleHQtPl9fc3MuX19jcHNyKTsKKyAgICAgICAgICAgIGNv
bnRleHQuX19zcCwgY29udGV4dC5fX3BjLCBjb250ZXh0Ll9fY3Bzcik7CiAjZW5kaWYKICAgICB9
CiAKLSAgICBtY29udGV4dF90JiBtY29udGV4dDsKKyAgICBQbGF0Zm9ybVJlZ2lzdGVycyYgY29u
dGV4dDsKICAgICB2b2lkKiBtYWNoaW5lUEM7CiAgICAgdm9pZCogc3RhY2tQb2ludGVyOwogICAg
IHZvaWQqIGZyYW1lUG9pbnRlcjsKQEAgLTE0Miw4ICsxNDIsOCBAQCBzdHJ1Y3QgU2lnbmFsQ29u
dGV4dCB7CiBzdGF0aWMgdm9pZCBpbnN0YWxsQ3Jhc2hIYW5kbGVyKCkKIHsKICNpZiBDUFUoWDg2
XzY0KSB8fCBDUFUoQVJNNjQpCi0gICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFsOjpJbGws
IFtdIChpbnQsIHNpZ2luZm9fdCosIHZvaWQqIHVhcCkgewotICAgICAgICBTaWduYWxDb250ZXh0
IGNvbnRleHQoc3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+KHVhcCktPnVjX21jb250ZXh0KTsKKyAg
ICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWw6OklsbCwgW10gKFNpZ25hbCwgU2lnSW5mbyYs
IFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMpIHsKKyAgICAgICAgU2lnbmFsQ29udGV4dCBj
b250ZXh0KHJlZ2lzdGVycyk7CiAKICAgICAgICAgaWYgKCFpc0pJVFBDKGNvbnRleHQubWFjaGlu
ZVBDKSkKICAgICAgICAgICAgIHJldHVybiBTaWduYWxBY3Rpb246Ok5vdEhhbmRsZWQ7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAKaW5kZXggMWRkMGNkMWQ4MzVj
NmMyZjIzMWIwMGI4ODZkZGU0YWY3MmMyNjNjZS4uYjFiNTk4ZDIwYzVjMDA3N2Q5ZTlkMDhlMzY4
YWQ1Y2ExNzgzMWJhZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUJCUVBsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFu
LmNwcApAQCAtMjQyLDcgKzI0Miw3IEBAIHZvaWQgQkJRUGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyhD
b21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAgICAgICAgIEFTU0VSVCh2YWxpZGF0ZUZ1bmN0aW9u
KGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIG1fbW9kdWxlSW5mb3Jt
YXRpb24uZ2V0KCkpKTsKIAogICAgICAgICBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0
aW9uSW5kZXhdID0gVmVjdG9yPFVubGlua2VkV2FzbVRvV2FzbUNhbGw+KCk7Ci0gICAgICAgIFRp
ZXJVcENvdW50KiB0aWVyVXAgPSAmbV90aWVyVXBDb3VudHNbZnVuY3Rpb25JbmRleF07CisgICAg
ICAgIFRpZXJVcENvdW50KiB0aWVyVXAgPSBPcHRpb25zOjp1c2VCQlFUaWVyVXBDaGVja3MoKSA/
ICZtX3RpZXJVcENvdW50c1tmdW5jdGlvbkluZGV4XSA6IG51bGxwdHI7CiAgICAgICAgIGF1dG8g
cGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21waWxlKG1fY29tcGlsYXRpb25Db250
ZXh0c1tmdW5jdGlvbkluZGV4XSwgZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25h
dHVyZSwgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbkluZGV4XSwgbV9tb2R1bGVJ
bmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21waWxhdGlvbk1vZGU6OkJCUU1vZGUsIGZ1bmN0
aW9uSW5kZXgsIHRpZXJVcCk7CiAKICAgICAgICAgaWYgKFVOTElLRUxZKCFwYXJzZUFuZENvbXBp
bGVSZXN1bHQpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
RmF1bHRTaWduYWxIYW5kbGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21G
YXVsdFNpZ25hbEhhbmRsZXIuY3BwCmluZGV4IDJlMGM5OWEzOWJlYmQzMTc4YjkxNDhkOTU4ZmU1
M2U1N2E2MjI5N2UuLjI2NGMzNGRlNDVkYTE3NWE1ZDUxNDFjMTcxZWZlOTVlMDYzYzVlMjcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRs
ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhh
bmRsZXIuY3BwCkBAIC01Miw5ICs1Miw4IEBAIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8SGFz
aFNldDxzdGQ6OnR1cGxlPHZvaWQqLCB2b2lkKj4+PiBjb2RlTG9jYXRpb25zOyAvLyAoCiAKIHN0
YXRpYyBib29sIGZhc3RIYW5kbGVySW5zdGFsbGVkIHsgZmFsc2UgfTsKIAotc3RhdGljIFNpZ25h
bEFjdGlvbiB0cmFwSGFuZGxlcihpbnQsIHNpZ2luZm9fdCogc2lnSW5mbywgdm9pZCogdWNvbnRl
eHQpCitzdGF0aWMgU2lnbmFsQWN0aW9uIHRyYXBIYW5kbGVyKFNpZ25hbCwgU2lnSW5mbyYgc2ln
SW5mbywgUGxhdGZvcm1SZWdpc3RlcnMmIGNvbnRleHQpCiB7Ci0gICAgbWNvbnRleHRfdCYgY29u
dGV4dCA9IHN0YXRpY19jYXN0PHVjb250ZXh0X3QqPih1Y29udGV4dCktPnVjX21jb250ZXh0Owog
ICAgIHZvaWQqIGZhdWx0aW5nSW5zdHJ1Y3Rpb24gPSBNYWNoaW5lQ29udGV4dDo6aW5zdHJ1Y3Rp
b25Qb2ludGVyKGNvbnRleHQpOwogICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJzdGFydGluZyBo
YW5kbGVyIGZvciBmYXVsdCBhdDogIiwgUmF3UG9pbnRlcihmYXVsdGluZ0luc3RydWN0aW9uKSk7
CiAKQEAgLTY0LDcgKzYzLDcgQEAgc3RhdGljIFNpZ25hbEFjdGlvbiB0cmFwSGFuZGxlcihpbnQs
IHNpZ2luZm9fdCogc2lnSW5mbywgdm9pZCogdWNvbnRleHQpCiAgICAgaWYgKGlzSklUUEMoZmF1
bHRpbmdJbnN0cnVjdGlvbikpIHsKICAgICAgICAgYm9vbCBmYXVsdGVkSW5BY3RpdmVGYXN0TWVt
b3J5ID0gZmFsc2U7CiAgICAgICAgIHsKLSAgICAgICAgICAgIHZvaWQqIGZhdWx0aW5nQWRkcmVz
cyA9IHNpZ0luZm8tPnNpX2FkZHI7CisgICAgICAgICAgICB2b2lkKiBmYXVsdGluZ0FkZHJlc3Mg
PSBzaWdJbmZvLmZhdWx0aW5nQWRkcmVzczsKICAgICAgICAgICAgIGRhdGFMb2dMbklmKHZlcmJv
c2UsICJjaGVja2luZyBmYXVsdGluZyBhZGRyZXNzOiAiLCBSYXdQb2ludGVyKGZhdWx0aW5nQWRk
cmVzcyksICIgaXMgaW4gYW4gYWN0aXZlIGZhc3QgbWVtb3J5Iik7CiAgICAgICAgICAgICBmYXVs
dGVkSW5BY3RpdmVGYXN0TWVtb3J5ID0gV2FzbTo6TWVtb3J5OjphZGRyZXNzSXNJbkFjdGl2ZUZh
c3RNZW1vcnkoZmF1bHRpbmdBZGRyZXNzKTsKICAgICAgICAgfQpAQCAtMTI0LDExICsxMjMsMTEg
QEAgdm9pZCBlbmFibGVGYXN0TWVtb3J5KCkKICAgICAgICAgICAgIHJldHVybjsKIAogI2lmIEVO
QUJMRShXRUJBU1NFTUJMWV9GQVNUX01FTU9SWSkKLSAgICAgICAgaW5zdGFsbFNpZ25hbEhhbmRs
ZXIoU2lnbmFsOjpCdXMsIFtdIChpbnQgc2lnbmFsLCBzaWdpbmZvX3QqIHNpZ0luZm8sIHZvaWQq
IHVjb250ZXh0KSB7CisgICAgICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbDo6QnVzLCBb
XSAoU2lnbmFsIHNpZ25hbCwgU2lnSW5mbyYgc2lnSW5mbywgUGxhdGZvcm1SZWdpc3RlcnMmIHVj
b250ZXh0KSB7CiAgICAgICAgICAgICByZXR1cm4gdHJhcEhhbmRsZXIoc2lnbmFsLCBzaWdJbmZv
LCB1Y29udGV4dCk7CiAgICAgICAgIH0pOwogCi0gICAgICAgIGluc3RhbGxTaWduYWxIYW5kbGVy
KFNpZ25hbDo6U2VnViwgW10gKGludCBzaWduYWwsIHNpZ2luZm9fdCogc2lnSW5mbywgdm9pZCog
dWNvbnRleHQpIHsKKyAgICAgICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFsOjpTZWdWLCBb
XSAoU2lnbmFsIHNpZ25hbCwgU2lnSW5mbyYgc2lnSW5mbywgUGxhdGZvcm1SZWdpc3RlcnMmIHVj
b250ZXh0KSB7CiAgICAgICAgICAgICByZXR1cm4gdHJhcEhhbmRsZXIoc2lnbmFsLCBzaWdJbmZv
LCB1Y29udGV4dCk7CiAgICAgICAgIH0pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtTWFjaGluZVRocmVhZHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU1hY2hpbmVUaHJlYWRzLmNwcAppbmRleCA1YWFjODdhY2I1NzQ3YzdmY2EyZjkz
NmVjOWNmNjc4YjQzMTc4MTcxLi4wYTM2N2ZkNWUyMjUyN2U5YzNjODc1MzZlY2ZkNzJiMTNkZjc5
ZDViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWFjaGluZVRo
cmVhZHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NYWNoaW5lVGhy
ZWFkcy5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJNYWNoaW5lU3RhY2tNYXJrZXIu
aCIKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFk
TWVzc2FnZS5oPgorI2luY2x1ZGUgPHd0Zi90aHJlYWRzL1NpZ25hbHMuaD4KIAogbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIApAQCAtNTcsNyArNTgsNyBAQCB2b2lkIHJlc2V0SW5z
dHJ1Y3Rpb25DYWNoZU9uQWxsVGhyZWFkcygpCiAKICAgICBjb25zdCBEb3VibHlMaW5rZWRMaXN0
PE1hY2hpbmVUaHJlYWRzOjpNYWNoaW5lVGhyZWFkPiYgdGhyZWFkcyA9IHdhc21UaHJlYWRzKCku
dGhyZWFkc0xpc3RIZWFkKGxvY2tlcik7CiAgICAgZm9yIChjb25zdCBhdXRvKiB0aHJlYWQgPSB0
aHJlYWRzLmhlYWQoKTsgdGhyZWFkOyB0aHJlYWQgPSB0aHJlYWQtPm5leHQoKSkgewotICAgICAg
ICBzZW5kTWVzc2FnZSh0aHJlYWQtPm1fdGhyZWFkLmdldCgpLCBbXSAoc2lnaW5mb190KiwgdWNv
bnRleHRfdCopIHsKKyAgICAgICAgc2VuZE1lc3NhZ2UodGhyZWFkLT5tX3RocmVhZC5nZXQoKSwg
W10gKGNvbnN0IFBsYXRmb3JtUmVnaXN0ZXJzJikgewogICAgICAgICAgICAgLy8gSXQncyBsaWtl
bHkgdGhhdCB0aGUgc2lnbmFsIGhhbmRsZXIgd2lsbCBhbHJlYWR5IHJlc2V0IHRoZSBpbnN0cnVj
dGlvbiBjYWNoZSBidXQgd2UgbWlnaHQgYXMgd2VsbCBiZSBzdXJlLgogICAgICAgICAgICAgV1RG
Ojpjcm9zc01vZGlmeWluZ0NvZGVGZW5jZSgpOwogICAgICAgICB9KTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV1RGL1dURi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDVmNDUyODdmNmUzYzY4ODViMjJiYTI3NzZj
ZmJjNmEzMzIzYmQwNWIuLjU4NTQ0Y2NiNjJjYjIyMTJiYWVlNzZmNGQyYTAxZTg5YjZiN2IwOTQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjQsNiArNjQs
NyBAQAogCQk1MjE4MzAxMkM5OUU0NzZBODRFRUJFQTggLyogU3ltYm9sSW1wbC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGNzJCQkRCMTA3RkE0MjQ4
ODYxNzhCOUUgLyogU3ltYm9sSW1wbC5jcHAgKi87IH07CiAJCTUzMTFCRDUzMUVBNzFDQUQwMDUy
NTI4MSAvKiBTaWduYWxzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUzMTFCRDUxMUVBNzFDQUQwMDUyNTI4MSAvKiBTaWduYWxzLmNwcCAqLzsgfTsK
IAkJNTMxMUJENUMxRUE4MjJGOTAwNTI1MjgxIC8qIFRocmVhZE1lc3NhZ2UuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMxMUJENUIxRUE4MjJGOTAw
NTI1MjgxIC8qIFRocmVhZE1lc3NhZ2UuY3BwICovOyB9OworCQk1MzUzNEYyQTFFQzBFMTBFMDAx
NDFCMkYgLyogTWFjaEV4Y2VwdGlvbnMuZGVmcyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUzNTM0RjI5MUVDMEUxMEUwMDE0MUIyRiAvKiBNYWNoRXhjZXB0
aW9ucy5kZWZzICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKENsaWVudCwgU2VydmVyLCAp
OyB9OyB9OwogCQk3MEE5OTNGRTFBRDcxNTEzMDBGQTYxNUIgLyogU3ltYm9sUmVnaXN0cnkuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzBBOTkzRkMx
QUQ3MTUxMzAwRkE2MTVCIC8qIFN5bWJvbFJlZ2lzdHJ5LmNwcCAqLzsgfTsKIAkJNzBFQ0E2MEQx
QjAyNDI2ODAwNDQ5NzM5IC8qIEF0b21pY1N0cmluZ0ltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzBFQ0E2MEExQjAyNDI2ODAwNDQ5NzM5IC8q
IEF0b21pY1N0cmluZ0ltcGwuY3BwICovOyB9OwogCQk3QUZFQzZCMTFFQjIyQjU5MDBEQURFMzYg
LyogVVVJRC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3QUZFQzZCMDFFQjIyQjU5MDBEQURFMzYgLyogVVVJRC5jcHAgKi87IH07CkBAIC0yOTksNiAr
MzAwLDcgQEAKIAkJNTMxMUJENTcxRUE3RTFBMTAwNTI1MjgxIC8qIFNpZ25hbHMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2lnbmFscy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MzExQkQ1OTFFQTgxQTk2MDA1MjUyODEgLyogVGhyZWFkTWVzc2FnZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRNZXNzYWdlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMTFCRDVCMUVBODIyRjkwMDUyNTI4MSAvKiBUaHJlYWRN
ZXNzYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRocmVhZE1l
c3NhZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MzUzNEYyOTFFQzBFMTBF
MDAxNDFCMkYgLyogTWFjaEV4Y2VwdGlvbnMuZGVmcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUubWln
OyBwYXRoID0gTWFjaEV4Y2VwdGlvbnMuZGVmczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTM5RUIwNjIxRDU1Mjg0MjAwQzgyRUY3IC8qIExFQkRlY29kZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTEVCRGVjb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1M0VDMjUzQzFFOTVBRDMwMDAwODMxQjkgLyogUHJpb3JpdHlRdWV1ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcmlvcml0eVF1ZXVlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTU1MzA3MUM5MUM0MDQyNzIwMDM4NDg5OCAvKiBUaW55TFJVQ2Fj
aGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGlueUxSVUNhY2hlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDIzLDYgKzEwMjUsNyBAQAogCQkJY2hpbGRy
ZW4gPSAoCiAJCQkJMUE0MjhCOEIxQzhGODlERDAwNTFFOUVCIC8qIEFwcEtpdENvbXBhdGliaWxp
dHlEZWNsYXJhdGlvbnMuaCAqLywKIAkJCQkxQUNBREQ4MjE4ODQ0ODAxMDBEOEI3MUQgLyogRGVw
cmVjYXRlZFN5bWJvbHNVc2VkQnlTYWZhcmkubW0gKi8sCisJCQkJNTM1MzRGMjkxRUMwRTEwRTAw
MTQxQjJGIC8qIE1hY2hFeGNlcHRpb25zLmRlZnMgKi8sCiAJCQkJQThBNDcyQzUxNTFBODI1QTAw
NDEyM0ZGIC8qIE1haW5UaHJlYWRNYWMubW0gKi8sCiAJCQkpOwogCQkJcGF0aCA9IG1hYzsKQEAg
LTEzNDYsNiArMTM0OSw3IEBACiAJCQkJMTQzRjYxMUYxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNp
emUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTNCNzI1RUM5ODc0NDZBRDkzRjFBNDQwIC8qIFJh
bmRvbURldmljZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQxNDE1MUE4MjVCMDA0MTIz
RkYgLyogUmFuZG9tTnVtYmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUzNTM0RjJBMUVDMEUx
MEUwMDE0MUIyRiAvKiBNYWNoRXhjZXB0aW9ucy5kZWZzIGluIFNvdXJjZXMgKi8sCiAJCQkJQThB
NDc0MUExNTFBODI1QjAwNDEyM0ZGIC8qIFJlZkNvdW50ZWRMZWFrQ291bnRlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkyQ0RFRDBGMzE4MTE1Qzg1MDA0REJBNzAgLyogUnVuTG9vcC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkyQ0RFRDBFRjE4MTE1QzM4MDA0REJBNzAgLyogUnVuTG9vcENGLmNw
cCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvU3RhY2tCb3VuZHMu
aCBiL1NvdXJjZS9XVEYvd3RmL1N0YWNrQm91bmRzLmgKaW5kZXggNTU0NjA0ZjJhYjQ4NGM3Y2Y3
MWVlMzg2MzBjZWI0Yzc5YzMzZTk3Mi4uY2Q2MmMxNDhhNmM3ZWZjOTUxN2E4YjA5YjhhMzJjN2Zl
MTkwY2RlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvU3RhY2tCb3VuZHMuaAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9TdGFja0JvdW5kcy5oCkBAIC01NCw3ICs1NCw2IEBAIHB1YmxpYzoKICAg
ICAgICAgOiBtX29yaWdpbihvcmlnaW4pCiAgICAgICAgICwgbV9ib3VuZChlbmQpCiAgICAgewot
ICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgfQogCiAgICAgdm9pZCogb3JpZ2luKCkg
Y29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZE1lc3NhZ2UuY3BwIGIvU291
cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5jcHAKaW5kZXggZjE0YmM0NWQzNjE0YzdjNjYzNWVi
MTdhYjBlMjcyODE2YTEzNzNkZC4uYjA0MGE1YjcxZGMxY2JkNTUxNTM3M2U2ZGU2OTNjOTRkMmI1
NTA3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5jcHAKKysrIGIv
U291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5jcHAKQEAgLTM2LDYgKzM2LDkgQEAKICNpbmNs
dWRlIDx3dGYvTG9ja2VyLmg+CiAjaW5jbHVkZSA8d3RmL3RocmVhZHMvU2lnbmFscy5oPgogCisj
aWYgT1MoREFSV0lOKQorI2luY2x1ZGUgPG1hY2gvdGhyZWFkX2FjdC5oPgorI2VuZGlmCiAKIG5h
bWVzcGFjZSBXVEYgewogCkBAIC04MywxMiArODYsMTIgQEAgdm9pZCBpbml0aWFsaXplVGhyZWFk
TWVzc2FnZXMoKQogfQogCiBTVVBQUkVTU19BU0FOCi1NZXNzYWdlU3RhdHVzIHNlbmRNZXNzYWdl
U2NvcGVkKFRocmVhZCYgdGhyZWFkLCBjb25zdCBUaHJlYWRNZXNzYWdlJiBtZXNzYWdlKQorc3Rh
dGljIE1lc3NhZ2VTdGF0dXMgc2VuZE1lc3NhZ2VTaWduYWwoVGhyZWFkJiB0aHJlYWQsIGNvbnN0
IFRocmVhZE1lc3NhZ2UmIG1lc3NhZ2UpCiB7CiAgICAgY29uc3RleHByIFNpZ25hbCBzaWduYWwg
PSBTaWduYWw6OlVzcjsKICAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZTsKICAgICBzdGQ6
OmNhbGxfb25jZShvbmNlLCBbXSB7Ci0gICAgICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKHNpZ25h
bCwgW10gKGludCwgc2lnaW5mb190KiBpbmZvLCB2b2lkKiB1YXApIHsKKyAgICAgICAgaW5zdGFs
bFNpZ25hbEhhbmRsZXIoc2lnbmFsLCBbXSAoU2lnbmFsLCBTaWdJbmZvJiwgUGxhdGZvcm1SZWdp
c3RlcnMmIGNvbnRleHQpIHsKICAgICAgICAgICAgIFRocmVhZCogdGhyZWFkID0gVGhyZWFkOjpj
dXJyZW50TWF5QmVOdWxsKCk7CiAKICAgICAgICAgICAgIGlmICghdGhyZWFkKSB7CkBAIC05OCw3
ICsxMDEsNyBAQCBNZXNzYWdlU3RhdHVzIHNlbmRNZXNzYWdlU2NvcGVkKFRocmVhZCYgdGhyZWFk
LCBjb25zdCBUaHJlYWRNZXNzYWdlJiBtZXNzYWdlKQogCiAgICAgICAgICAgICAvLyBOb2RlIHNo
b3VsZCBiZSBkZWxldGVkIGluIHRoZSBzZW5kZXIgdGhyZWFkLiBEZWxldGluZyBOb2RlcyBpbiBz
aWduYWwgaGFuZGxlciBjYXVzZXMgZGVhZCBsb2NrLgogICAgICAgICAgICAgdGhyZWFkLT50aHJl
YWRNZXNzYWdlcygpLmNvbnN1bWVBbGxXaXRoTm9kZShbJl0gKFRocmVhZE1lc3NhZ2VEYXRhKiBk
YXRhLCBOb2RlKiBub2RlKSB7Ci0gICAgICAgICAgICAgICAgZGF0YS0+bWVzc2FnZShpbmZvLCBz
dGF0aWNfY2FzdDx1Y29udGV4dF90Kj4odWFwKSk7CisgICAgICAgICAgICAgICAgZGF0YS0+bWVz
c2FnZShjb250ZXh0KTsKICAgICAgICAgICAgICAgICAvLyBCeSBzZXR0aW5nIHJhbiB2YXJpYWJs
ZSwgKDEpIHRoZSBzZW5kZXIgYWNrbm93bGVkZ2VzIHRoZSBjb21wbGV0aW9uIGFuZAogICAgICAg
ICAgICAgICAgIC8vICgyKSBnZXRzIHRoZSBOb2RlIHRvIGJlIGRlbGV0ZWQuCiAgICAgICAgICAg
ICAgICAgZGF0YS0+cmFuLnN0b3JlKG5vZGUpOwpAQCAtMTU2LDYgKzE1OSw2MCBAQCBNZXNzYWdl
U3RhdHVzIHNlbmRNZXNzYWdlU2NvcGVkKFRocmVhZCYgdGhyZWFkLCBjb25zdCBUaHJlYWRNZXNz
YWdlJiBtZXNzYWdlKQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKKyNp
ZiBPUyhEQVJXSU4pCitzdGF0aWMgTWVzc2FnZVN0YXR1cyBzZW5kTWVzc2FnZU1hY2goVGhyZWFk
JiB0aHJlYWQsIGNvbnN0IFRocmVhZE1lc3NhZ2UmIG1lc3NhZ2UpCit7CisgICAgc3RhdGljIFN0
YXRpY0xvY2sgbWVzc2FnZUxvY2s7CisgICAgYXV0byBsb2NraG9sZGVyID0gaG9sZExvY2sobWVz
c2FnZUxvY2spOworCisgICAgYXV0byByZXN1bHQgPSB0aHJlYWQuc3VzcGVuZCgpOworICAgIGlm
ICghcmVzdWx0KQorICAgICAgICByZXR1cm4gTWVzc2FnZVN0YXR1czo6VGhyZWFkRXhpdGVkOwor
CisjaWYgQ1BVKFg4NikKKyAgICB1bnNpZ25lZCB1c2VyQ291bnQgPSBzaXplb2YocmVnaXN0ZXJz
KSAvIHNpemVvZihpbnQpOworICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSBpMzg2
X1RIUkVBRF9TVEFURTsKKyNlbGlmIENQVShYODZfNjQpCisgICAgdW5zaWduZWQgdXNlckNvdW50
ID0geDg2X1RIUkVBRF9TVEFURTY0X0NPVU5UOworICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBm
bGF2b3IgPSB4ODZfVEhSRUFEX1NUQVRFNjQ7CisjZWxpZiBDUFUoQVJNKQorICAgIHVuc2lnbmVk
IHVzZXJDb3VudCA9IEFSTV9USFJFQURfU1RBVEVfQ09VTlQ7CisgICAgdGhyZWFkX3N0YXRlX2Zs
YXZvcl90IGZsYXZvciA9IEFSTV9USFJFQURfU1RBVEU7CisjZWxpZiBDUFUoQVJNNjQpCisgICAg
dW5zaWduZWQgdXNlckNvdW50ID0gQVJNX1RIUkVBRF9TVEFURTY0X0NPVU5UOworICAgIHRocmVh
ZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSBBUk1fVEhSRUFEX1NUQVRFNjQ7CisjZWxzZQorI2Vy
cm9yIFVua25vd24gQXJjaGl0ZWN0dXJlCisjZW5kaWYKKworICAgIFBsYXRmb3JtUmVnaXN0ZXJz
IHJlZ2lzdGVyczsKKyAgICB0aHJlYWRfc3RhdGVfdCBzdGF0ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dGhyZWFkX3N0YXRlX3Q+KCZyZWdpc3RlcnMpOworICAgIHRocmVhZF9nZXRfc3RhdGUodGhyZWFk
Lm1hY2hUaHJlYWQoKSwgZmxhdm9yLCBzdGF0ZSwgJnVzZXJDb3VudCk7CisKKyAgICBtZXNzYWdl
KHJlZ2lzdGVycyk7CisKKyAgICB0aHJlYWRfc2V0X3N0YXRlKHRocmVhZC5tYWNoVGhyZWFkKCks
IGZsYXZvciwgKHRocmVhZF9zdGF0ZV90KSZyZWdpc3RlcnMsIHVzZXJDb3VudCk7CisKKyAgICB0
aHJlYWQucmVzdW1lKCk7CisgICAgcmV0dXJuIE1lc3NhZ2VTdGF0dXM6Ok1lc3NhZ2VSYW47Cit9
CisKK3N0YXRpYyBib29sIHVzZU1hY2ggPSBmYWxzZTsKK3ZvaWQgZGVsaXZlck1lc3NhZ2VzVXNp
bmdNYWNoKCkgeyB1c2VNYWNoID0gdHJ1ZTsgfQorCisjZW5kaWYKKworTWVzc2FnZVN0YXR1cyBz
ZW5kTWVzc2FnZVNjb3BlZChUaHJlYWQmIHRocmVhZCwgY29uc3QgVGhyZWFkTWVzc2FnZSYgbWVz
c2FnZSkKK3sKKyNpZiBPUyhEQVJXSU4pCisgICAgaWYgKHVzZU1hY2gpCisgICAgICAgIHJldHVy
biBzZW5kTWVzc2FnZU1hY2godGhyZWFkLCBtZXNzYWdlKTsKKyNlbmRpZgorICAgIHJldHVybiBz
ZW5kTWVzc2FnZVNpZ25hbCh0aHJlYWQsIG1lc3NhZ2UpOworICAgIHJldHVybiBNZXNzYWdlU3Rh
dHVzOjpUaHJlYWRFeGl0ZWQ7Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKICNlbmRpZiAv
LyBVU0UoUFRIUkVBRFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRNZXNzYWdl
LmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRNZXNzYWdlLmgKaW5kZXggOWFlNTNmMjljZjdlOGZi
MDBlZjkyMTFkMTZjZTJjZGVkNjAzZWMxYi4uNzc0MmUxYWNiYzRiM2M4NWRkZjY2MjgwMGM1YWNm
MGFiMmFlMTQxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5oCisr
KyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZE1lc3NhZ2UuaApAQCAtMzYsNyArMzYsNyBAQCBuYW1l
c3BhY2UgV1RGIHsKIHZvaWQgaW5pdGlhbGl6ZVRocmVhZE1lc3NhZ2VzKCk7CiAKIGNsYXNzIFRo
cmVhZE1lc3NhZ2VEYXRhOwotdXNpbmcgVGhyZWFkTWVzc2FnZSA9IFNjb3BlZExhbWJkYTx2b2lk
KHNpZ2luZm9fdCosIHVjb250ZXh0X3QqKT47Cit1c2luZyBUaHJlYWRNZXNzYWdlID0gU2NvcGVk
TGFtYmRhPHZvaWQoUGxhdGZvcm1SZWdpc3RlcnMmKT47CiAKIGVudW0gY2xhc3MgTWVzc2FnZVN0
YXR1cyB7CiAgICAgTWVzc2FnZVJhbiwKQEAgLTUxLDEwICs1MSwxNCBAQCBNZXNzYWdlU3RhdHVz
IHNlbmRNZXNzYWdlU2NvcGVkKFRocmVhZCYsIGNvbnN0IFRocmVhZE1lc3NhZ2UmKTsKIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CiBNZXNzYWdlU3RhdHVzIHNlbmRNZXNzYWdlKFRocmVhZCYg
dGFyZ2V0VGhyZWFkLCBjb25zdCBGdW5jdG9yJiBmdW5jKQogewotICAgIGF1dG8gbGFtYmRhID0g
c2NvcGVkTGFtYmRhUmVmPHZvaWQoc2lnaW5mb190KiwgdWNvbnRleHRfdCopPihmdW5jKTsKKyAg
ICBhdXRvIGxhbWJkYSA9IHNjb3BlZExhbWJkYVJlZjx2b2lkKFBsYXRmb3JtUmVnaXN0ZXJzJik+
KGZ1bmMpOwogICAgIHJldHVybiBzZW5kTWVzc2FnZVNjb3BlZCh0YXJnZXRUaHJlYWQsIGxhbWJk
YSk7CiB9CiAKKyNpZiBPUyhEQVJXSU4pCit2b2lkIGRlbGl2ZXJNZXNzYWdlc1VzaW5nTWFjaCgp
OworI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6OnNlbmRNZXNzYWdl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmggYi9Tb3VyY2UvV1RGL3d0
Zi9UaHJlYWRpbmcuaAppbmRleCBkMmU1MzZkZjdhODY5NmQ4ZTZiOTViYTQzZTE3M2QzYjU1MGJm
MTZhLi4zNTE0ZThjMDlmMGZjOTRkNTM0YmUyZjNiNmU3YzQ5NTBlMGJjZjA1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRp
bmcuaApAQCAtMTM4LDYgKzEzOCwxMCBAQCBwdWJsaWM6CiAKICNpZiBVU0UoUFRIUkVBRFMpCiAg
ICAgTG9ja2xlc3NCYWc8VGhyZWFkTWVzc2FnZURhdGEqPiYgdGhyZWFkTWVzc2FnZXMoKSB7IHJl
dHVybiBtX3RocmVhZE1lc3NhZ2VzOyB9CisKKyNpZiBPUyhEQVJXSU4pCisgICAgbWFjaF9wb3J0
X3QgbWFjaFRocmVhZCgpIHsgcmV0dXJuIG1fcGxhdGZvcm1UaHJlYWQ7IH0KKyNlbmRpZgogI2Vu
ZGlmCiAKIHByb3RlY3RlZDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1B0
aHJlYWRzLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1B0aHJlYWRzLmNwcAppbmRleCBk
MzRkNzk4ZjI5YmY4OTkwMDQyZGE1MThhOWNmYjdhMTYzYTg2ODJkLi4yNWYwOTQxZjExNTg3MjEx
MzBlN2Y1MGExZGU4MmRjNjk5Nzg4Nzc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJl
YWRpbmdQdGhyZWFkcy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nUHRocmVhZHMu
Y3BwCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSA8d3RmL1RocmVhZEZ1bmN0aW9uSW52b2Nh
dGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRIb2xkZXIuaD4KICNpbmNsdWRlIDx3dGYvV29y
ZExvY2suaD4KKyNpbmNsdWRlIDx3dGYvdGhyZWFkcy9TaWduYWxzLmg+CiAKICNpZiBPUyhMSU5V
WCkKICNpbmNsdWRlIDxzeXMvcHJjdGwuaD4KQEAgLTU0LDYgKzU1LDEwIEBACiAjaW5jbHVkZSA8
c3lzL3RpbWUuaD4KICNlbmRpZgogCisjaWYgT1MoREFSV0lOKQorI2luY2x1ZGUgPG1hY2gvZXhj
ZXB0aW9uLmg+CisjZW5kaWYKKwogI2lmICFPUyhEQVJXSU4pICYmIE9TKFVOSVgpCiAKICNpbmNs
dWRlIDxzeXMvbW1hbi5oPgpAQCAtODIsNiArODcsNyBAQCBUaHJlYWQ6OlRocmVhZCgpCiAKIFRo
cmVhZDo6flRocmVhZCgpCiB7CisgICAgcmVtb3ZlVGhyZWFkKHRoaXMpOwogI2lmICFPUyhEQVJX
SU4pCiAgICAgc2VtX2Rlc3Ryb3koJm1fc2VtYXBob3JlRm9yU3VzcGVuZFJlc3VtZSk7CiAjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL21hYy9NYWNoRXhjZXB0aW9ucy5kZWZzIGIv
U291cmNlL1dURi93dGYvbWFjL01hY2hFeGNlcHRpb25zLmRlZnMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDIwNTc0
MmE0ZWQ1MDBmODA2NGZlZWI0OTU1YTdjOTcwZDk5YWYwYgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL21hYy9NYWNoRXhjZXB0aW9ucy5kZWZzCkBAIC0wLDAgKzEsMjYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8bWFj
aC9tYWNoX2V4Yy5kZWZzPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGhyZWFkcy9TaWdu
YWxzLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3RocmVhZHMvU2lnbmFscy5jcHAKaW5kZXggODU1YjI4
YjMxNzIxNzI3Y2YxZjQzMWE5MThhMjUxZGMyZTZhM2RmYy4uNmVmYjRmMDY0ZGM0NjMyZWY5ZWU2
M2JhYTdjN2ZmOGUyN2Q4NzA3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGhyZWFkcy9T
aWduYWxzLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90aHJlYWRzL1NpZ25hbHMuY3BwCkBAIC0y
OCwyMSArMjgsMjUzIEBACiAKICNpZiBVU0UoUFRIUkVBRFMpCiAKK2V4dGVybiAiQyIgeworI2lu
Y2x1ZGUgIk1hY2hFeGNlcHRpb25zU2VydmVyLmgiCit9OworCiAjaW5jbHVkZSA8Y3N0ZGlvPgog
I2luY2x1ZGUgPG11dGV4PgogI2luY2x1ZGUgPHNpZ25hbC5oPgorCisjaW5jbHVkZSA8bWFjaC9t
YWNoLmg+CisjaW5jbHVkZSA8bWFjaC90aHJlYWRfYWN0Lmg+CisKICNpbmNsdWRlIDx3dGYvQXRv
bWljcy5oPgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQu
aD4KICNpbmNsdWRlIDx3dGYvTG9ja2xlc3NCYWcuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0
cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkTWVzc2FnZS5oPgorI2luY2x1ZGUgPHd0Zi9U
aHJlYWRpbmcuaD4KKwogCiBuYW1lc3BhY2UgV1RGIHsKIAorICAgIAogc3RhdGljIExhenlOZXZl
ckRlc3Ryb3llZDxMb2NrbGVzc0JhZzxTaWduYWxIYW5kbGVyPj4gaGFuZGxlcnNbc3RhdGljX2Nh
c3Q8c2l6ZV90PihTaWduYWw6Ok51bWJlck9mU2lnbmFscyldID0geyB9Owotc3RhdGljIHN0cnVj
dCBzaWdhY3Rpb24gb2xkQWN0aW9uc1tzdGF0aWNfY2FzdDxzaXplX3Q+KFNpZ25hbDo6TnVtYmVy
T2ZTaWduYWxzKV07CiBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZU9uY2VGbGFnc1tz
dGF0aWNfY2FzdDxzaXplX3Q+KFNpZ25hbDo6TnVtYmVyT2ZTaWduYWxzKV07CitzdGF0aWMgc3Ry
dWN0IHNpZ2FjdGlvbiBvbGRBY3Rpb25zW3N0YXRpY19jYXN0PHNpemVfdD4oU2lnbmFsOjpOdW1i
ZXJPZlNpZ25hbHMpXTsKKworI2lmIE9TKERBUldJTikKK3N0YXRpYyBtYWNoX3BvcnRfdCBleGNl
cHRpb25Qb3J0Oworc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbWF4TWVzc2FnZVNpemUgPSAxICog
S0I7CisKK3N0YXRpYyB2b2lkIHN0YXJ0TWFjaEV4Y2VwdGlvbkhhbmRsZXJUaHJlYWQoKQorewor
ICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlOworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2Us
IFtdIHsKKyAgICAgICAgaWYgKG1hY2hfcG9ydF9hbGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigpLCBN
QUNIX1BPUlRfUklHSFRfUkVDRUlWRSwgJmV4Y2VwdGlvblBvcnQpICE9IEtFUk5fU1VDQ0VTUykK
KyAgICAgICAgICAgIENSQVNIKCk7CisKKyAgICAgICAgaWYgKG1hY2hfcG9ydF9pbnNlcnRfcmln
aHQobWFjaF90YXNrX3NlbGYoKSwgZXhjZXB0aW9uUG9ydCwgZXhjZXB0aW9uUG9ydCwgTUFDSF9N
U0dfVFlQRV9NQUtFX1NFTkQpIT0gS0VSTl9TVUNDRVNTKQorICAgICAgICAgICAgQ1JBU0goKTsK
KworICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIGEgZGlzcGF0Y2ggcXVldWUuCisg
ICAgICAgICh2b2lkKVRocmVhZDo6Y3JlYXRlKAorICAgICAgICAgICAgIldURiBNYWNoIEV4Y2Vw
dGlvbiBUaHJlYWQiLCBbXSAoKSB7CisgICAgICAgICAgICAgICAgdW5pb24gTWVzc2FnZSB7Cisg
ICAgICAgICAgICAgICAgICAgIG1hY2hfbXNnX2hlYWRlcl90IGhlYWRlcjsKKyAgICAgICAgICAg
ICAgICAgICAgY2hhciBkYXRhW21heE1lc3NhZ2VTaXplXTsKKyAgICAgICAgICAgICAgICB9Owor
ICAgICAgICAgICAgICAgIE1lc3NhZ2UgbWVzc2FnZUhlYWRlckluOworICAgICAgICAgICAgICAg
IE1lc3NhZ2UgbWVzc2FnZUhlYWRlck91dDsKKworICAgICAgICAgICAgICAgIHdoaWxlICh0cnVl
KSB7CisgICAgICAgICAgICAgICAgICAgIGtlcm5fcmV0dXJuX3QgbWVzc2FnZVJlc3VsdCA9IG1h
Y2hfbXNnKCZtZXNzYWdlSGVhZGVySW4uaGVhZGVyLCBNQUNIX1JDVl9NU0csIDAsIG1heE1lc3Nh
Z2VTaXplLCBleGNlcHRpb25Qb3J0LCBNQUNIX01TR19USU1FT1VUX05PTkUsIE1BQ0hfUE9SVF9O
VUxMKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2VSZXN1bHQgPT0gS0VSTl9TVUND
RVNTKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1hY2hfZXhjX3NlcnZlcigmbWVz
c2FnZUhlYWRlckluLmhlYWRlciwgJm1lc3NhZ2VIZWFkZXJPdXQuaGVhZGVyKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDUkFTSCgpOworCisgICAgICAgICAgICAgICAgICAgICAgICBt
ZXNzYWdlUmVzdWx0ID0gbWFjaF9tc2coJm1lc3NhZ2VIZWFkZXJPdXQuaGVhZGVyLCBNQUNIX1NF
TkRfTVNHLCBtZXNzYWdlSGVhZGVyT3V0LmhlYWRlci5tc2doX3NpemUsIDAsIG1lc3NhZ2VIZWFk
ZXJPdXQuaGVhZGVyLm1zZ2hfbG9jYWxfcG9ydCwgMCwgTUFDSF9QT1JUX05VTEwpOworICAgICAg
ICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobWVzc2FnZVJlc3VsdCA9PSBLRVJOX1NV
Q0NFU1MpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2dMbigiRmFpbGVkIHRvIHJlY2VpdmUgbWFjaCBtZXNzYWdlIGR1ZSB0byAiLCBt
YWNoX2Vycm9yX3N0cmluZyhtZXNzYWdlUmVzdWx0KSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICB9KS5sZWFrUmVmKCk7CisgICAgfSk7Cit9CisKK3N0YXRpYyBTaWduYWwgZnJvbU1hY2hF
eGNlcHRpb24oZXhjZXB0aW9uX3R5cGVfdCB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgewor
ICAgIGNhc2UgRVhDX0JBRF9BQ0NFU1M6IHJldHVybiBTaWduYWw6OlNlZ1Y7CisgICAgY2FzZSBF
WENfQkFEX0lOU1RSVUNUSU9OOiByZXR1cm4gU2lnbmFsOjpJbGw7CisgICAgY2FzZSBFWENfQlJF
QUtQT0lOVDogcmV0dXJuIFNpZ25hbDo6VHJhcDsKKyAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9
CisgICAgcmV0dXJuIFNpZ25hbDo6VW5rbm93bjsKK30KKworc3RhdGljIGV4Y2VwdGlvbl9tYXNr
X3QgdG9NYWNoTWFzayhTaWduYWwgc2lnbmFsKQoreworICAgIHN3aXRjaCAoc2lnbmFsKSB7Cisg
ICAgY2FzZSBTaWduYWw6OlNlZ1Y6IHJldHVybiBFWENfTUFTS19CQURfQUNDRVNTOworICAgIGNh
c2UgU2lnbmFsOjpJbGw6IHJldHVybiBFWENfTUFTS19CQURfSU5TVFJVQ1RJT047CisgICAgY2Fz
ZSBTaWduYWw6OlRyYXA6IHJldHVybiBFWENfTUFTS19CUkVBS1BPSU5UOworICAgIGRlZmF1bHQ6
IGJyZWFrOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitl
eHRlcm4gIkMiIHsKKworLy8gV2UgbmVlZCB0byBpbXBsZW1lbnQgc3R1YnMgZm9yIGNhdGNoX21h
Y2hfZXhjZXB0aW9uX3JhaXNlIGFuZCBjYXRjaF9tYWNoX2V4Y2VwdGlvbl9yYWlzZV9zdGF0ZV9p
ZGVudGl0eS4KKy8vIFRoZSBNaUcgZ2VuZXJhdGVkIGZpbGUgd2lsbCBmYWlsIHRvIGxpbmsgb3Ro
ZXJ3aXNlLCBldmVuIHRob3VnaCB3ZSBkb24ndCB1c2UgdGhlIGZ1bmN0aW9ucy4gT25seSB0aGUK
Ky8vIGNhdGNoX21hY2hfZXhjZXB0aW9uX3JhaXNlX3N0YXRlIGZ1bmN0aW9uIHNob3VsZCBiZSBj
YWxsZWQgYmVjYXVzZSB3ZSBwYXNzIEVYQ0VQVElPTl9TVEFURSB0bworLy8gdGhyZWFkX3NldF9l
eGNlcHRpb25fcG9ydHMuCitrZXJuX3JldHVybl90IGNhdGNoX21hY2hfZXhjZXB0aW9uX3JhaXNl
KG1hY2hfcG9ydF90LCBtYWNoX3BvcnRfdCwgbWFjaF9wb3J0X3QsIGV4Y2VwdGlvbl90eXBlX3Qs
IG1hY2hfZXhjZXB0aW9uX2RhdGFfdCwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCkKK3sKKyAgICBk
YXRhTG9nTG4oIldlIHNob3VsZCBub3QgaGF2ZSBjYWxsZWQgY2F0Y2hfZXhjZXB0aW9uX3JhaXNl
KCksIHBsZWFzZSBmaWxlIGEgYnVnIGF0IGJ1Z3Mud2Via2l0Lm9yZyIpOworICAgIHJldHVybiBL
RVJOX0ZBSUxVUkU7Cit9CisKK2tlcm5fcmV0dXJuX3QgY2F0Y2hfbWFjaF9leGNlcHRpb25fcmFp
c2Vfc3RhdGVfaWRlbnRpdHkobWFjaF9wb3J0X3QsIG1hY2hfcG9ydF90LCBtYWNoX3BvcnRfdCwg
ZXhjZXB0aW9uX3R5cGVfdCwgbWFjaF9leGNlcHRpb25fZGF0YV90LCBtYWNoX21zZ190eXBlX251
bWJlcl90LCBpbnQqLCB0aHJlYWRfc3RhdGVfdCwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCwgdGhy
ZWFkX3N0YXRlX3QsICBtYWNoX21zZ190eXBlX251bWJlcl90KikKK3sKKyAgICBkYXRhTG9nTG4o
IldlIHNob3VsZCBub3QgaGF2ZSBjYWxsZWQgY2F0Y2hfbWFjaF9leGNlcHRpb25fcmFpc2Vfc3Rh
dGVfaWRlbnRpdHksIHBsZWFzZSBmaWxlIGEgYnVnIGF0IGJ1Z3Mud2Via2l0Lm9yZyIpOworICAg
IHJldHVybiBLRVJOX0ZBSUxVUkU7Cit9CisKK2tlcm5fcmV0dXJuX3QgY2F0Y2hfbWFjaF9leGNl
cHRpb25fcmFpc2Vfc3RhdGUoCisgICAgbWFjaF9wb3J0X3QgcG9ydCwKKyAgICBleGNlcHRpb25f
dHlwZV90IGV4Y2VwdGlvblR5cGUsCisgICAgY29uc3QgbWFjaF9leGNlcHRpb25fZGF0YV90IGV4
Y2VwdGlvbkRhdGEsCisgICAgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCBkYXRhQ291bnQsCisgICAg
aW50KiBzdGF0ZUZsYXZvciwKKyAgICBjb25zdCB0aHJlYWRfc3RhdGVfdCBpblN0YXRlLAorICAg
IG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QgaW5TdGF0ZUNvdW50LAorICAgIHRocmVhZF9zdGF0ZV90
IG91dFN0YXRlLAorICAgIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QqIG91dFN0YXRlQ291bnQpCit7
CisgICAgUkVMRUFTRV9BU1NFUlQocG9ydCA9PSBleGNlcHRpb25Qb3J0KTsKKyAgICBTaWduYWwg
c2lnbmFsID0gZnJvbU1hY2hFeGNlcHRpb24oZXhjZXB0aW9uVHlwZSk7CisgICAgZGF0YUxvZ0xu
KCJyZWNlaXZlZFNpZ25hbCAiLCBleGNlcHRpb25UeXBlKTsKKyAgICBkYXRhTG9nTG4oIlRocmVh
ZDogIiwgZXhjZXB0aW9uRGF0YVswXSk7CisgICAgUkVMRUFTRV9BU1NFUlQoc2lnbmFsICE9IFNp
Z25hbDo6VW5rbm93bik7CisKKyAgICBtZW1jcHkob3V0U3RhdGUsIGluU3RhdGUsIGluU3RhdGVD
b3VudCAqIHNpemVvZihpblN0YXRlWzBdKSk7CisgICAgKm91dFN0YXRlQ291bnQgPSBpblN0YXRl
Q291bnQ7CisKKyNpZiBDUFUoWDg2XzY0KQorICAgIFJFTEVBU0VfQVNTRVJUKCpzdGF0ZUZsYXZv
ciA9PSB4ODZfVEhSRUFEX1NUQVRFKTsKKyAgICBQbGF0Zm9ybVJlZ2lzdGVycyYgcmVnaXN0ZXJz
ID0gcmVpbnRlcnByZXRfY2FzdDx4ODZfdGhyZWFkX3N0YXRlX3QqPihvdXRTdGF0ZSktPnV0cy50
czY0OworI2VsaWYgQ1BVKEFSTTY0KQorICAgIFJFTEVBU0VfQVNTRVJUKCpzdGF0ZUZsYXZvciA9
PSBBUk1fVEhSRUFEX1NUQVRFKTsKKyAgICBQbGF0Zm9ybVJlZ2lzdGVycyYgcmVnaXN0ZXJzID0g
cmVpbnRlcnByZXRfY2FzdDxhcm1fdW5pZmllZF90aHJlYWRfc3RhdGUqPihvdXRTdGF0ZSktPnRz
XzY0OworI2VuZGlmCisKKyAgICBTaWdJbmZvIGluZm87CisgICAgaWYgKHNpZ25hbCA9PSBTaWdu
YWw6OlNlZ1YpIHsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChkYXRhQ291bnQsIGRhdGFDb3VudCA9
PSAyKTsKKyAgICAgICAgaW5mby5mYXVsdGluZ0FkZHJlc3MgPSByZWludGVycHJldF9jYXN0PHZv
aWQqPihleGNlcHRpb25EYXRhWzFdKTsKKyAgICB9CisKKyAgICBib29sIGRpZEhhbmRsZSA9IGZh
bHNlOworICAgIGhhbmRsZXJzW3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0tPml0ZXJhdGUo
WyZdIChjb25zdCBTaWduYWxIYW5kbGVyJiBoYW5kbGVyKSB7CisgICAgICAgIFNpZ25hbEFjdGlv
biBoYW5kbGVyUmVzdWx0ID0gaGFuZGxlcihzaWduYWwsIGluZm8sIHJlZ2lzdGVycyk7CisgICAg
ICAgIGRhdGFMb2dMbihzdGF0aWNfY2FzdDxpbnQ+KGhhbmRsZXJSZXN1bHQpKTsKKyAgICAgICAg
c3dpdGNoIChoYW5kbGVyUmVzdWx0KSB7CisgICAgICAgIGNhc2UgU2lnbmFsQWN0aW9uOjpIYW5k
bGVkOgorICAgICAgICAgICAgZGlkSGFuZGxlID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9KTsK
KworICAgIGlmIChkaWRIYW5kbGUpCisgICAgICAgIHJldHVybiBLRVJOX1NVQ0NFU1M7CisgICAg
cmV0dXJuIEtFUk5fRkFJTFVSRTsKK30KKworfTsKKworI2VuZGlmIC8vIE9TKERBUldJTikKKwor
c3RhdGljIFN0YXRpY0xvY2sgdGhyZWFkTG9jazsKK2V4Y2VwdGlvbl9tYXNrX3QgYWN0aXZlRXhj
ZXB0aW9ucyB7IDAgfTsKIAotc3RhdGljIHZvaWQganNjU2lnbmFsSGFuZGxlcihpbnQgc2lnLCBz
aWdpbmZvX3QqIGluZm8sIHZvaWQqIG1jb250ZXh0KQoraW5saW5lIHZvaWQgc2V0RXhjZXB0aW9u
UG9ydHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBUaHJlYWQqIHRocmVhZCkKK3sKKyAgICBrZXJu
X3JldHVybl90IHJlc3VsdCA9IHRocmVhZF9zZXRfZXhjZXB0aW9uX3BvcnRzKHRocmVhZC0+bWFj
aFRocmVhZCgpLCBhY3RpdmVFeGNlcHRpb25zLCBleGNlcHRpb25Qb3J0LCBFWENFUFRJT05fU1RB
VEUgfCBNQUNIX0VYQ0VQVElPTl9DT0RFUywgTUFDSElORV9USFJFQURfU1RBVEUpOworICAgIGlm
IChyZXN1bHQgIT0gS0VSTl9TVUNDRVNTKSB7CisgICAgICAgIGRhdGFMb2dMbigidGhyZWFkIHNl
dCBwb3J0IGZhaWxlZCBkdWUgdG8gIiwgbWFjaF9lcnJvcl9zdHJpbmcocmVzdWx0KSk7CisgICAg
ICAgIENSQVNIKCk7CisgICAgfQorfQorCitpbmxpbmUgSGFzaFNldDxUaHJlYWQqPiYgYWN0aXZl
VGhyZWFkcyhjb25zdCBBYnN0cmFjdExvY2tlciYpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPEhhc2hTZXQ8VGhyZWFkKj4+IGFjdGl2ZVRocmVhZHM7CisgICAgcmV0dXJuIGFjdGl2ZVRo
cmVhZHM7Cit9CisKK3ZvaWQgcmVnaXN0ZXJUaHJlYWQoVGhyZWFkKiB0aHJlYWQpCit7CisgICAg
YXV0byBsb2NrZXIgPSBob2xkTG9jayh0aHJlYWRMb2NrKTsKKyAgICBhdXRvIHJlc3VsdCA9IGFj
dGl2ZVRocmVhZHMobG9ja2VyKS5hZGQodGhyZWFkKTsKKworICAgIGlmIChyZXN1bHQuaXNOZXdF
bnRyeSkKKyAgICAgICAgc2V0RXhjZXB0aW9uUG9ydHMobG9ja2VyLCB0aHJlYWQpOworfQorCit2
b2lkIHJlbW92ZVRocmVhZChUaHJlYWQqIHRocmVhZCkKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhv
bGRMb2NrKHRocmVhZExvY2spOworICAgIGFjdGl2ZVRocmVhZHMobG9ja2VyKS5yZW1vdmUodGhy
ZWFkKTsKK30KKworc3RhdGljIGJvb2wgdXNlTWFjaCB7IGZhbHNlIH07Cit2b2lkIGhhbmRsZVNp
Z25hbHNXaXRoTWFjaCgpCit7CisjaWYgT1MoREFSV0lOKQorICAgIGRlbGl2ZXJNZXNzYWdlc1Vz
aW5nTWFjaCgpOworICAgIHVzZU1hY2ggPSB0cnVlOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lk
IGpzY1NpZ25hbEhhbmRsZXIoaW50LCBzaWdpbmZvX3QqLCB2b2lkKik7CisKK3ZvaWQgaW5zdGFs
bFNpZ25hbEhhbmRsZXIoU2lnbmFsIHNpZ25hbCwgU2lnbmFsSGFuZGxlciYmIGhhbmRsZXIpCit7
CisgICAgQVNTRVJUKHNpZ25hbCA8IFNpZ25hbDo6VW5rbm93bik7CisgICAgaWYgKHNpZ25hbCA9
PSBTaWduYWw6OkJ1cyAmJiAhdXNlTWFjaCkKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVCgh
dXNlTWFjaCB8fCBzaWduYWwgIT0gU2lnbmFsOjpVc3IpOworCisjaWYgT1MoREFSV0lOKQorICAg
IGlmICh1c2VNYWNoKQorICAgICAgICBzdGFydE1hY2hFeGNlcHRpb25IYW5kbGVyVGhyZWFkKCk7
CisjZW5kaWYKKworICAgIHN0ZDo6Y2FsbF9vbmNlKGluaXRpYWxpemVPbmNlRmxhZ3Nbc3RhdGlj
X2Nhc3Q8c2l6ZV90PihzaWduYWwpXSwgWyZdIHsKKyAgICAgICAgaGFuZGxlcnNbc3RhdGljX2Nh
c3Q8c2l6ZV90PihzaWduYWwpXS5jb25zdHJ1Y3QoKTsKKworICAgICAgICBpZiAoIXVzZU1hY2gp
IHsKKyAgICAgICAgICAgIHN0cnVjdCBzaWdhY3Rpb24gYWN0aW9uOworICAgICAgICAgICAgYWN0
aW9uLnNhX3NpZ2FjdGlvbiA9IGpzY1NpZ25hbEhhbmRsZXI7CisgICAgICAgICAgICBhdXRvIHJl
c3VsdCA9IHNpZ2ZpbGxzZXQoJmFjdGlvbi5zYV9tYXNrKTsKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKCFyZXN1bHQpOworICAgICAgICAgICAgYWN0aW9uLnNhX2ZsYWdzID0gU0FfU0lHSU5G
TzsKKyAgICAgICAgICAgIHJlc3VsdCA9IHNpZ2FjdGlvbih0b1N5c3RlbVNpZ25hbChzaWduYWwp
LCAmYWN0aW9uLCAmb2xkQWN0aW9uc1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNpZ25hbCldKTsKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFyZXN1bHQpOworICAgICAgICB9CisKKyAgICB9KTsK
KworICAgIGhhbmRsZXJzW3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0tPmFkZChXVEZNb3Zl
KGhhbmRsZXIpKTsKKworI2lmIE9TKERBUldJTikKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KHRocmVhZExvY2spOworICAgIGlmICh1c2VNYWNoKSB7CisgICAgICAgIGFjdGl2ZUV4Y2VwdGlv
bnMgfD0gdG9NYWNoTWFzayhzaWduYWwpOworCisgICAgICAgIGZvciAoVGhyZWFkKiB0aHJlYWQg
OiBhY3RpdmVUaHJlYWRzKGxvY2tlcikpCisgICAgICAgICAgICBzZXRFeGNlcHRpb25Qb3J0cyhs
b2NrZXIsIHRocmVhZCk7CisgICAgfQorI2VuZGlmCit9CisKK3ZvaWQganNjU2lnbmFsSGFuZGxl
cihpbnQgc2lnLCBzaWdpbmZvX3QqIGluZm8sIHZvaWQqIG1jb250ZXh0KQogewogICAgIFNpZ25h
bCBzaWduYWwgPSBmcm9tU3lzdGVtU2lnbmFsKHNpZyk7CiAKQEAgLTYyLDEwICsyOTQsMTYgQEAg
c3RhdGljIHZvaWQganNjU2lnbmFsSGFuZGxlcihpbnQgc2lnLCBzaWdpbmZvX3QqIGluZm8sIHZv
aWQqIG1jb250ZXh0KQogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgU2lnSW5mbyBzaWdJ
bmZvOworICAgIGlmIChzaWduYWwgPT0gU2lnbmFsOjpTZWdWIHx8IHNpZ25hbCA9PSBTaWduYWw6
OkJ1cykKKyAgICAgICAgc2lnSW5mby5mYXVsdGluZ0FkZHJlc3MgPSBpbmZvLT5zaV9hZGRyOwor
CisgICAgUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8bWNv
bnRleHRfdD4obWNvbnRleHQpLT5fX3NzOworCiAgICAgYm9vbCBkaWRIYW5kbGUgPSBmYWxzZTsK
ICAgICBib29sIHJlc3RvcmVEZWZhdWx0SGFuZGxlciA9IGZhbHNlOwogICAgIGhhbmRsZXJzW3N0
YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0tPml0ZXJhdGUoWyZdIChjb25zdCBTaWduYWxIYW5k
bGVyJiBoYW5kbGVyKSB7Ci0gICAgICAgIHN3aXRjaCAoaGFuZGxlcihzaWcsIGluZm8sIG1jb250
ZXh0KSkgeworICAgICAgICBzd2l0Y2ggKGhhbmRsZXIoc2lnbmFsLCBzaWdJbmZvLCByZWdpc3Rl
cnMpKSB7CiAgICAgICAgIGNhc2UgU2lnbmFsQWN0aW9uOjpIYW5kbGVkOgogICAgICAgICAgICAg
ZGlkSGFuZGxlID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTAwLDI0ICszMzgsNiBA
QCBzdGF0aWMgdm9pZCBqc2NTaWduYWxIYW5kbGVyKGludCBzaWcsIHNpZ2luZm9fdCogaW5mbywg
dm9pZCogbWNvbnRleHQpCiAgICAgfQogfQogCi12b2lkIGluc3RhbGxTaWduYWxIYW5kbGVyKFNp
Z25hbCBzaWduYWwsIFNpZ25hbEhhbmRsZXImJiBoYW5kbGVyKQotewotICAgIEFTU0VSVChzaWdu
YWwgPCBTaWduYWw6OlVua25vd24pOwotICAgIHN0ZDo6Y2FsbF9vbmNlKGluaXRpYWxpemVPbmNl
RmxhZ3Nbc3RhdGljX2Nhc3Q8c2l6ZV90PihzaWduYWwpXSwgWyZdIHsKLSAgICAgICAgaGFuZGxl
cnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzaWduYWwpXS5jb25zdHJ1Y3QoKTsKLQotICAgICAgICBz
dHJ1Y3Qgc2lnYWN0aW9uIGFjdGlvbjsKLSAgICAgICAgYWN0aW9uLnNhX3NpZ2FjdGlvbiA9IGpz
Y1NpZ25hbEhhbmRsZXI7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gc2lnZmlsbHNldCgmYWN0aW9u
LnNhX21hc2spOwotICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmVzdWx0KTsKLSAgICAgICAgYWN0
aW9uLnNhX2ZsYWdzID0gU0FfU0lHSU5GTzsKLSAgICAgICAgcmVzdWx0ID0gc2lnYWN0aW9uKHRv
U3lzdGVtU2lnbmFsKHNpZ25hbCksICZhY3Rpb24sICZvbGRBY3Rpb25zW3N0YXRpY19jYXN0PHNp
emVfdD4oc2lnbmFsKV0pOwotICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmVzdWx0KTsKLSAgICB9
KTsKLQotICAgIGhhbmRsZXJzW3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0tPmFkZChXVEZN
b3ZlKGhhbmRsZXIpKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV1RGCiAKICNlbmRpZiAvLyBVU0Uo
UFRIUkVBRFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90aHJlYWRzL1NpZ25hbHMuaCBi
L1NvdXJjZS9XVEYvd3RmL3RocmVhZHMvU2lnbmFscy5oCmluZGV4IDFlNGViNDZlYWE3NzRhMWVl
ODlmNmZiMmRhZWYzMzI2OGNlNTY3NzkuLjgxYWIwMDQyNmQxMGZjZmQyZDJkNTJiMzdiNWIxNzVj
NTY2YWI4YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RocmVhZHMvU2lnbmFscy5oCisr
KyBiL1NvdXJjZS9XVEYvd3RmL3RocmVhZHMvU2lnbmFscy5oCkBAIC0yOSw2ICsyOSw3IEBACiAK
ICNpbmNsdWRlIDxzaWduYWwuaD4KICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKyNpbmNsdWRl
IDx3dGYvUGxhdGZvcm1SZWdpc3RlcnMuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKQEAgLTc5LDcg
KzgwLDExIEBAIGVudW0gY2xhc3MgU2lnbmFsQWN0aW9uIHsKICAgICBGb3JjZURlZmF1bHQKIH07
CiAKLXVzaW5nIFNpZ25hbEhhbmRsZXIgPSBGdW5jdGlvbjxTaWduYWxBY3Rpb24oaW50LCBzaWdp
bmZvX3QqLCB2b2lkKik+Oworc3RydWN0IFNpZ0luZm8geworICAgIHZvaWQqIGZhdWx0aW5nQWRk
cmVzcyB7IDAgfTsKK307CisKK3VzaW5nIFNpZ25hbEhhbmRsZXIgPSBGdW5jdGlvbjxTaWduYWxB
Y3Rpb24oU2lnbmFsLCBTaWdJbmZvJiwgUGxhdGZvcm1SZWdpc3RlcnMmKT47CiAKIC8vIENhbGwg
dGhpcyBtZXRob2Qgd2hlbmV2ZXIgeW91IHdhbnQgdG8gaW5zdGFsbCBhIHNpZ25hbCBoYW5kbGVy
LiBJdCdzIG9rIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBsYXppbHkuCiAvLyBOb3RlOiBZb3VyIHNp
Z25hbCBoYW5kbGVyIHdpbGwgYmUgY2FsbGVkIGV2ZXJ5IHRpbWUgdGhlIGhhbmRsZXIgZm9yIHRo
ZSBkZXNpcmVkIHNpZ25hbCBpcyBjYWxsZWQuCkBAIC04Nyw5ICs5MiwxOSBAQCB1c2luZyBTaWdu
YWxIYW5kbGVyID0gRnVuY3Rpb248U2lnbmFsQWN0aW9uKGludCwgc2lnaW5mb190Kiwgdm9pZCop
PjsKIC8vIFRoaXMgZnVuY3Rpb24gaXMgY3VycmVudGx5IGEgb25lIHdheSBzdHJlZXQgaS5lLiBv
bmNlIGluc3RhbGxlZCwgYSBzaWduYWwgaGFuZGxlciBjYW5ub3QgYmUgdW5pbnN0YWxsZWQuCiB2
b2lkIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbCwgU2lnbmFsSGFuZGxlciYmKTsKIAorCisj
aWYgT1MoREFSV0lOKQorY2xhc3MgVGhyZWFkOwordm9pZCByZWdpc3RlclRocmVhZChUaHJlYWQq
KTsKK3ZvaWQgcmVtb3ZlVGhyZWFkKFRocmVhZCopOworCit2b2lkIGhhbmRsZVNpZ25hbHNXaXRo
TWFjaCgpOworI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6OlNpZ25h
bDsKK3VzaW5nIFdURjo6U2lnSW5mbzsKIHVzaW5nIFdURjo6dG9TeXN0ZW1TaWduYWw7CiB1c2lu
ZyBXVEY6OmZyb21TeXN0ZW1TaWduYWw7CiB1c2luZyBXVEY6OlNpZ25hbEFjdGlvbjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309722</attachid>
            <date>2017-05-11 10:43:45 -0700</date>
            <delta_ts>2017-05-11 10:52:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171865-20170511104344.patch</filename>
            <type>text/plain</type>
            <size>46847</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE2Njc3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
YzIyOWE0ZjkxMDMxZGZlOTU1YTQxMGIyMDI0Njc2ZTFmM2NkZWIxLi5lNzZkODk3ZjUzNjc3ZWI3
NTBiMjM0YTUxNGFmMzQ1YjI3OTI4YjEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MCBAQAorMjAxNy0wNS0xMSAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBVc2UgTWFjaCBleGNlcHRpb25zIGluc3RlYWQgb2Ygc2lnbmFscyB3
aGVyZSBwb3NzaWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTcxODY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhpcyBwYXRjaCBhZGRzIHNvbWUgbmV3IEpTQyBvcHRpb25zLiBUaGUgZmlyc3QgaXMg
YW4gb3B0aW9uIHRoYXQKKyAgICAgICAgZW5hYmxlcyBvciBkaXNhYmxlcyB3ZWIgYXNzZW1ibHkg
dGllciB1cC4gVGhlIHNlY29uZCBjb250cm9scworICAgICAgICB3aGV0aGVyIG9yIG5vdCB3ZSB1
c2UgbWFjaCBleGNlcHRpb25zICh3aGVyZSBhdmFpbGFibGUpLgorCisgICAgICAgICogQVBJL3Rl
c3RzL0V4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwOgorICAgICAgICAoZGlzcGF0Y2hUZXJtaXRh
dGVDYWxsYmFjayk6CisgICAgICAgICh0ZXN0RXhlY3V0aW9uVGltZUxpbWl0KToKKyAgICAgICAg
KiBydW50aW1lL0pTTG9jay5jcHA6CisgICAgICAgIChKU0M6OkpTTG9jazo6ZGlkQWNxdWlyZUxv
Y2spOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OnJlY29t
cHV0ZURlcGVuZGVudE9wdGlvbnMpOgorICAgICAgICAoSlNDOjpPcHRpb25zOjppbml0aWFsaXpl
KToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKyAgICAgICAgKiBydW50aW1lL1ZNVHJh
cHMuY3BwOgorICAgICAgICAoSlNDOjpTaWduYWxDb250ZXh0OjpTaWduYWxDb250ZXh0KToKKyAg
ICAgICAgKEpTQzo6U2lnbmFsQ29udGV4dDo6YWRqdXN0UENUb1BvaW50VG9UcmFwcGluZ0luc3Ry
dWN0aW9uKToKKyAgICAgICAgKEpTQzo6aW5zdGFsbFNpZ25hbEhhbmRsZXIpOgorICAgICAgICAo
SlNDOjpWTVRyYXBzOjpTaWduYWxTZW5kZXI6OnNlbmQpOgorICAgICAgICAqIHRvb2xzL1NpZ2ls
bENyYXNoQW5hbHl6ZXIuY3BwOgorICAgICAgICAoSlNDOjpTaWduYWxDb250ZXh0OjpTaWduYWxD
b250ZXh0KToKKyAgICAgICAgKEpTQzo6U2lnbmFsQ29udGV4dDo6ZHVtcCk6CisgICAgICAgIChK
U0M6Omluc3RhbGxDcmFzaEhhbmRsZXIpOgorICAgICAgICAqIHdhc20vV2FzbUJCUVBsYW4uY3Bw
OgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKToKKyAgICAg
ICAgKiB3YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwOgorICAgICAgICAoSlNDOjpXYXNt
Ojp0cmFwSGFuZGxlcik6CisgICAgICAgIChKU0M6Oldhc206OmVuYWJsZUZhc3RNZW1vcnkpOgor
ICAgICAgICAqIHdhc20vV2FzbU1hY2hpbmVUaHJlYWRzLmNwcDoKKyAgICAgICAgKEpTQzo6V2Fz
bTo6cmVzZXRJbnN0cnVjdGlvbkNhY2hlT25BbGxUaHJlYWRzKToKKwogMjAxNy0wNS0xMSAgTWFy
ayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgV29ya2VyVGhyZWFkOjpzdG9w
KCkgc2hvdWxkIGNhbGwgc2NoZWR1bGVFeGVjdXRpb25UZXJtaW5hdGlvbigpIGxhc3QuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4
IGVjZGRiMzNmYmVkNTIxMTFiYzA3MTk1ZDZjMDhmZTQwNmIyYzFhMzUuLjlkMGY4MzYzOTRmM2Q5
NjY1ZTU2MjBjNzkxMjdlYmEyYTI3YjUyOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTMgQEAKKzIwMTctMDUt
MTEgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CisKKyAgICAgICAgVXNl
IE1hY2ggZXhjZXB0aW9ucyBpbnN0ZWFkIG9mIHNpZ25hbHMgd2hlcmUgcG9zc2libGUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MTg2NQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZW5h
YmxlcyB1c2luZyBtYWNoIGV4Y2VwdGlvbnMgb24gZGFyd2luLiBUaGUgd2F5IHRoZQorICAgICAg
ICBtYWNoIGV4Y2VwdGlvbiBhcGkgd29ya3MgaXMgdGhhdCB3ZSBjcmVhdGUgYSBtYWNoIHBvcnQs
IHdoaWNoIGlzCisgICAgICAgIGxpa2UgYSBmaWxlIGRlc2NyaXB0b3IuICBXZSB0aGVuIHdhaXQg
Zm9yIGEgbWVzc2FnZSB0byBhcnJpdmUgb24KKyAgICAgICAgdGhhdCBwb3J0IGluIGEgdGhyZWFk
LiBXaGVuIGFub3RoZXIgdGhyZWFkIHJhaXNlcyBhIGV4Y2VwdGlvbiAoc2F5CisgICAgICAgIGR1
ZSB0byBhIGJhZCBtZW1vcnkgYWNjZXNzKSB0aGUgT1Mgc2VuZHMgb3VyIHRocmVhZCBhIG1lc3Nh
Z2UuIFRoZQorICAgICAgICBwYXlsb2FkIG9mIHRoYXQgbWVzc2FnZSBpcyB0aGUgcmVnaXN0ZXIg
ZmlsZSBvZiB0aGUgY3Jhc2hpbmcKKyAgICAgICAgdGhyZWFkLiBXZSB0aGVuIGNhbGwgb3VyIGN1
c3RvbSBoYW5kbGVycyB0aGF0IGNoYW5nZSB0aGUgc3RhdGUgYXMKKyAgICAgICAgbmVlZGVkLiBJ
biBvcmRlciB0byByZXN0YXJ0IHRoZSB0aHJlYWQgd2Ugc2VuZCBhIHBheWxvYWQgYmFjayB0bwor
ICAgICAgICB0aGUgT1Mgd2l0aCBhbiB1cGRhdGVkIHJlZ2lzdGVyIGZpbGUgYWxvbmcgd2l0aCBh
IHN1Y2Nlc3MgbWVzc2FnZQorICAgICAgICBoZWFkZXIuCisKKyAgICAgICAgVGhpcyBwYXRjaCBh
bHNvIG1ha2VzIHRocmVhZCBtZXNzYWdlcyB3b3JrIHdpdGhvdXQgc2lnbmFscyBieQorICAgICAg
ICBzaW1wbHkgc3VzcGVuZGluZyB0aGUgdGhyZWFkIHRoZW4gcnVubmluZyB0aGUgbWVzc2FnZSBh
dCB0aGF0CisgICAgICAgIHRpbWUuCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiB3dGYvU3RhY2tCb3VuZHMuaDoKKyAgICAgICAgKFdURjo6U3Rh
Y2tCb3VuZHM6OlN0YWNrQm91bmRzKToKKyAgICAgICAgKiB3dGYvVGhyZWFkSG9sZGVyLmNwcDoK
KyAgICAgICAgKFdURjo6VGhyZWFkSG9sZGVyOjp+VGhyZWFkSG9sZGVyKToKKyAgICAgICAgKiB3
dGYvVGhyZWFkTWVzc2FnZS5jcHA6CisgICAgICAgIChXVEY6OnNlbmRNZXNzYWdlU2lnbmFsKToK
KyAgICAgICAgKFdURjo6c2VuZE1lc3NhZ2VNYWNoKToKKyAgICAgICAgKFdURjo6ZGVsaXZlck1l
c3NhZ2VzVXNpbmdNYWNoKToKKyAgICAgICAgKFdURjo6c2VuZE1lc3NhZ2VTY29wZWQpOgorICAg
ICAgICAqIHd0Zi9UaHJlYWRNZXNzYWdlLmg6CisgICAgICAgIChXVEY6OnNlbmRNZXNzYWdlKToK
KyAgICAgICAgKiB3dGYvVGhyZWFkaW5nLmg6CisgICAgICAgIChXVEY6OlRocmVhZDo6bWFjaFRo
cmVhZCk6CisgICAgICAgICogd3RmL21hYy9NYWNoRXhjZXB0aW9ucy5kZWZzOiBDb3BpZWQgZnJv
bSBTb3VyY2UvV1RGL3d0Zi9UaHJlYWRNZXNzYWdlLmguCisgICAgICAgICogd3RmL3RocmVhZHMv
U2lnbmFscy5jcHA6CisgICAgICAgIChXVEY6OnN0YXJ0TWFjaEV4Y2VwdGlvbkhhbmRsZXJUaHJl
YWQpOgorICAgICAgICAoV1RGOjpmcm9tTWFjaEV4Y2VwdGlvbik6CisgICAgICAgIChXVEY6OnRv
TWFjaE1hc2spOgorICAgICAgICAoV1RGOjpzZXRFeGNlcHRpb25Qb3J0cyk6CisgICAgICAgIChX
VEY6OmFjdGl2ZVRocmVhZHMpOgorICAgICAgICAoV1RGOjpyZWdpc3RlclRocmVhZCk6CisgICAg
ICAgIChXVEY6OnJlbW92ZVRocmVhZCk6CisgICAgICAgIChXVEY6OmhhbmRsZVNpZ25hbHNXaXRo
TWFjaCk6CisgICAgICAgIChXVEY6Omluc3RhbGxTaWduYWxIYW5kbGVyKToKKyAgICAgICAgKFdU
Rjo6anNjU2lnbmFsSGFuZGxlcik6CisgICAgICAgICogd3RmL3RocmVhZHMvU2lnbmFscy5oOgor
CiAyMDE3LTA1LTA5ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVt
b3ZlIHN1cHBvcnQgZm9yIGxlZ2FjeSBOb3RpZmljYXRpb25zCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0V4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9FeGVjdXRpb25UaW1lTGltaXRUZXN0LmNwcApp
bmRleCBkNWU1MzI0M2I3OGRmNzUxMzQyYWQ4ZDM5MGE0YjA0MTNkOWVlZjllLi43ZWFjMDczMDlk
ZGMzZjE2NDk0NTBiZDAzNzlkMmNhMThmMDE2OWFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL3Rlc3RzL0V4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5jcHAKQEAg
LTMwLDggKzMwLDEzIEBACiAjaW5jbHVkZSAiSlNDb250ZXh0UmVmUHJpdmF0ZS5oIgogI2luY2x1
ZGUgIkphdmFTY3JpcHRDb3JlLmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5oIgorCiAjaW5jbHVkZSA8
Y2hyb25vPgorI2luY2x1ZGUgPGRpc3BhdGNoL2Rpc3BhdGNoLmg+CisjaW5jbHVkZSA8d3RmL0F0
b21pY3MuaD4KKyNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL0N1cnJl
bnRUaW1lLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdCdWlsZGVyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ6OmNocm9ubzsKQEAgLTc3LDYgKzgy
LDEzIEBAIHN0YXRpYyBib29sIGV4dGVuZFRlcm1pbmF0ZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBj
dHgsIHZvaWQqKQogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIGRpc3BhdGNoVGVybWluYXRl
Q2FsbGJhY2tDYWxsZWQgPSBmYWxzZTsKK3N0YXRpYyBib29sIGRpc3BhdGNoVGVybWl0YXRlQ2Fs
bGJhY2soSlNDb250ZXh0UmVmLCB2b2lkKikKK3sKKyAgICBkaXNwYXRjaFRlcm1pbmF0ZUNhbGxi
YWNrQ2FsbGVkID0gdHJ1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogc3RydWN0IFRpZXJPcHRp
b25zIHsKICAgICBjb25zdCBjaGFyKiB0aWVyOwogICAgIHVuc2lnbmVkIHRpbWVMaW1pdEFkanVz
dG1lbnRNaWxsaXM7CkBAIC0zNjUsNiArMzc3LDYzIEBAIGludCB0ZXN0RXhlY3V0aW9uVGltZUxp
bWl0KCkKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCisgICAgICAgIC8qIFRlc3Qgc2NyaXB0
IHRpbWVvdXQgZnJvbSBkaXNwYXRjaCBxdWV1ZTogKi8KKyAgICAgICAgdGltZUxpbWl0ID0gKDEw
MCArIHRpZXJBZGp1c3RtZW50TWlsbGlzKSAvIDEwMDAuMDsKKyAgICAgICAgSlNDb250ZXh0R3Jv
dXBTZXRFeGVjdXRpb25UaW1lTGltaXQoY29udGV4dEdyb3VwLCB0aW1lTGltaXQsIGRpc3BhdGNo
VGVybWl0YXRlQ2FsbGJhY2ssIDApOworICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCB0
aW1lQWZ0ZXJXYXRjaGRvZ1Nob3VsZEhhdmVGaXJlZCA9IDMwMCArIHRpZXJBZGp1c3RtZW50TWls
bGlzOworCisgICAgICAgICAgICBTdHJpbmdCdWlsZGVyIHNjcmlwdEJ1aWxkZXI7CisgICAgICAg
ICAgICBzY3JpcHRCdWlsZGVyLmFwcGVuZExpdGVyYWwoImZ1bmN0aW9uIGZvbygpIHsgdmFyIHN0
YXJ0VGltZSA9IGN1cnJlbnRDUFVUaW1lKCk7IHdoaWxlICh0cnVlKSB7IGZvciAodmFyIGkgPSAw
OyBpIDwgMTAwMDsgaSsrKTsgaWYgKGN1cnJlbnRDUFVUaW1lKCkgLSBzdGFydFRpbWUgPiAiKTsK
KyAgICAgICAgICAgIHNjcmlwdEJ1aWxkZXIuYXBwZW5kTnVtYmVyKHRpbWVBZnRlcldhdGNoZG9n
U2hvdWxkSGF2ZUZpcmVkIC8gMTAwMC4wKTsKKyAgICAgICAgICAgIHNjcmlwdEJ1aWxkZXIuYXBw
ZW5kTGl0ZXJhbCgiKSBicmVhazsgfSB9IGZvbygpOyIpOworCisgICAgICAgICAgICBKU1N0cmlu
Z1JlZiBzY3JpcHQgPSBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhzY3JpcHRCdWlsZGVy
LnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBleGNlcHRpb24gPSBudWxs
cHRyOworICAgICAgICAgICAgZGlzcGF0Y2hUZXJtaW5hdGVDYWxsYmFja0NhbGxlZCA9IGZhbHNl
OworCisgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGRvIHRoaXMgc2luY2UgYmxvY2tzIGNhbiBv
bmx5IGNhcHR1cmUgdGhpbmdzIGFzIGNvbnN0LgorICAgICAgICAgICAgSlNHbG9iYWxDb250ZXh0
UmVmJiBjb250ZXh0UmVmID0gY29udGV4dDsKKyAgICAgICAgICAgIEpTU3RyaW5nUmVmJiBzY3Jp
cHRSZWYgPSBzY3JpcHQ7CisgICAgICAgICAgICBKU1ZhbHVlUmVmJiBleGNlcHRpb25SZWYgPSBl
eGNlcHRpb247CisKKyAgICAgICAgICAgIExvY2sgc3luY0xvY2s7CisgICAgICAgICAgICBMb2Nr
JiBzeW5jTG9ja1JlZiA9IHN5bmNMb2NrOworICAgICAgICAgICAgQ29uZGl0aW9uIHN5bmNocm9u
aXplOworICAgICAgICAgICAgQ29uZGl0aW9uJiBzeW5jaHJvbml6ZVJlZiA9IHN5bmNocm9uaXpl
OworICAgICAgICAgICAgYm9vbCBkaWRTeW5jaHJvbml6ZSA9IGZhbHNlOworICAgICAgICAgICAg
Ym9vbCYgZGlkU3luY2hyb25pemVSZWYgPSBkaWRTeW5jaHJvbml6ZTsKKworICAgICAgICAgICAg
c3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcyBzdGFydFRpbWU7CisgICAgICAgICAgICBzdGQ6OmNo
cm9ubzo6bWljcm9zZWNvbmRzIGVuZFRpbWU7CisKKyAgICAgICAgICAgIHN0ZDo6Y2hyb25vOjpt
aWNyb3NlY29uZHMmIHN0YXJ0VGltZVJlZiA9IHN0YXJ0VGltZTsKKyAgICAgICAgICAgIHN0ZDo6
Y2hyb25vOjptaWNyb3NlY29uZHMmIGVuZFRpbWVSZWYgPSBlbmRUaW1lOworCisgICAgICAgICAg
ICBkaXNwYXRjaF9ncm91cF90IGdyb3VwID0gZGlzcGF0Y2hfZ3JvdXBfY3JlYXRlKCk7CisgICAg
ICAgICAgICBkaXNwYXRjaF9ncm91cF9hc3luYyhncm91cCwgZGlzcGF0Y2hfZ2V0X2dsb2JhbF9x
dWV1ZSgwLCAwKSwgXnsKKyAgICAgICAgICAgICAgICBzdGFydFRpbWVSZWYgPSBjdXJyZW50Q1BV
VGltZSgpOworICAgICAgICAgICAgICAgIEpTRXZhbHVhdGVTY3JpcHQoY29udGV4dFJlZiwgc2Ny
aXB0UmVmLCBudWxscHRyLCBudWxscHRyLCAxLCAmZXhjZXB0aW9uUmVmKTsKKyAgICAgICAgICAg
ICAgICBlbmRUaW1lUmVmID0gY3VycmVudENQVVRpbWUoKTsKKyAgICAgICAgICAgICAgICBhdXRv
IGxvY2tlciA9IFdURjo6aG9sZExvY2soc3luY0xvY2tSZWYpOworICAgICAgICAgICAgICAgIGRp
ZFN5bmNocm9uaXplUmVmID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZVJlZi5u
b3RpZnlBbGwoKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKHN5bmNMb2NrKTsKKyAgICAgICAgICAgIHN5bmNocm9uaXplLndhaXQoc3luY0xv
Y2ssIFsmXSB7IHJldHVybiBkaWRTeW5jaHJvbml6ZTsgfSk7CisKKyAgICAgICAgICAgIGlmICgo
KGVuZFRpbWUgLSBzdGFydFRpbWUpIDwgbWlsbGlzZWNvbmRzKHRpbWVBZnRlcldhdGNoZG9nU2hv
dWxkSGF2ZUZpcmVkKSkgJiYgZGlzcGF0Y2hUZXJtaW5hdGVDYWxsYmFja0NhbGxlZCkKKyAgICAg
ICAgICAgICAgICBwcmludGYoIlBBU1M6ICVzIHNjcmlwdCBvbiBkaXNwYXRjaCBxdWV1ZSB0aW1l
ZCBvdXQgYXMgZXhwZWN0ZWQuXG4iLCB0aWVyT3B0aW9ucy50aWVyKTsKKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgIGlmICgoZW5kVGltZSAtIHN0YXJ0VGltZSkgPj0gbWlsbGlz
ZWNvbmRzKHRpbWVBZnRlcldhdGNoZG9nU2hvdWxkSGF2ZUZpcmVkKSkKKyAgICAgICAgICAgICAg
ICAgICAgcHJpbnRmKCJGQUlMOiAlcyBzY3JpcHQgb24gZGlzcGF0Y2ggcXVldWUgZGlkIG5vdCB0
aW1lIG91dCBhcyBleHBlY3RlZC5cbiIsIHRpZXJPcHRpb25zLnRpZXIpOworICAgICAgICAgICAg
ICAgIGlmICghc2hvdWxkVGVybWluYXRlQ2FsbGJhY2tXYXNDYWxsZWQpCisgICAgICAgICAgICAg
ICAgICAgIHByaW50ZigiRkFJTDogJXMgc2NyaXB0IG9uIGRpc3BhdGNoIHF1ZXVlIHRpbWVvdXQg
Y2FsbGJhY2sgd2FzIG5vdCBjYWxsZWQuXG4iLCB0aWVyT3B0aW9ucy50aWVyKTsKKyAgICAgICAg
ICAgICAgICBmYWlsZWQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKICAgICAg
ICAgSlNHbG9iYWxDb250ZXh0UmVsZWFzZShjb250ZXh0KTsKIAogICAgICAgICBPcHRpb25zOjpz
ZXRPcHRpb25zKHNhdmVkT3B0aW9uc0J1aWxkZXIudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAppbmRleCBjMTc1YWUwYzQ4
MmVkMjdiZDVmNmJkYzg3OTY4ZTc1ZDQ1YWY1MGVmLi42MTI4N2M3MzQ3MjE2ZGEzNjAxZDM1NGUy
MTRiY2I5MjhlZWVhNmRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0xvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5j
cHAKQEAgLTMwLDYgKzMwLDggQEAKICNpbmNsdWRlICJTYW1wbGluZ1Byb2ZpbGVyLmgiCiAjaW5j
bHVkZSAiV2FzbU1hY2hpbmVUaHJlYWRzLmgiCiAjaW5jbHVkZSA8dGhyZWFkPgorI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGhyZWFkcy9TaWduYWxzLmg+CiAKIG5h
bWVzcGFjZSBKU0MgewogCkBAIC0xNDgsNiArMTUwLDEwIEBAIHZvaWQgSlNMb2NrOjpkaWRBY3F1
aXJlTG9jaygpCiAgICAgV2FzbTo6c3RhcnRUcmFja2luZ0N1cnJlbnRUaHJlYWQoKTsKICNlbmRp
ZgogCisjaWYgT1MoREFSV0lOKQorICAgIFdURjo6cmVnaXN0ZXJUaHJlYWQoJlRocmVhZDo6Y3Vy
cmVudCgpKTsKKyNlbmRpZgorCiAgICAgbV92bS0+dHJhcHMoKS5ub3RpZnlHcmFiQWxsTG9ja3Mo
KTsKIAogI2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3B0aW9ucy5jcHAKaW5kZXggYjA0ZGUzNWE1MzYxNTA4NDM4NTc1YzIyN2E1MDE0
ZGQwYzUxYmFhMi4uNDMxM2UyNDRjZTkwYjEyY2MzMzQ2ZDdiNWVkM2NmNzljMDA0YWVhOCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKQEAgLTQzLDYgKzQzLDcg
QEAKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ0V4
dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRlIDx3
dGYvdGhyZWFkcy9TaWduYWxzLmg+CiAKICNpZiBQTEFURk9STShDT0NPQSkKICNpbmNsdWRlIDxj
cnRfZXh0ZXJucy5oPgpAQCAtNDg2LDYgKzQ4Nyw3IEBAIHN0YXRpYyB2b2lkIHJlY29tcHV0ZURl
cGVuZGVudE9wdGlvbnMoKQogCiAgICAgaWYgKE9wdGlvbnM6OnVzZVNpZ2lsbENyYXNoQW5hbHl6
ZXIoKSkKICAgICAgICAgZW5hYmxlU2lnaWxsQ3Jhc2hBbmFseXplcigpOworCiB9CiAKIHZvaWQg
T3B0aW9uczo6aW5pdGlhbGl6ZSgpCkBAIC01NDUsNiArNTQ3LDkgQEAgdm9pZCBPcHRpb25zOjpp
bml0aWFsaXplKCkKIAogICAgICAgICAgICAgZHVtcE9wdGlvbnNJZk5lZWRlZCgpOwogICAgICAg
ICAgICAgZW5zdXJlT3B0aW9uc0FyZUNvaGVyZW50KCk7CisKKyAgICAgICAgICAgIGlmIChPcHRp
b25zOjp1c2VNYWNoRm9yRXhjZXB0aW9ucygpKQorICAgICAgICAgICAgICAgIFdURjo6aGFuZGxl
U2lnbmFsc1dpdGhNYWNoKCk7CiAgICAgICAgIH0pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zLmgKaW5kZXggY2Y5ZGMyYjJhODI1NjhlZTA3ZGEwODg5ZTM5YjZiMmY5
ZGNkNzk3NS4uMjI3NGQxY2RlYjMzMzZlMzdhYjQ0NzNlYTQxMTZlYTMyMjllOTM3ZiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaApAQCAtNDIwLDYgKzQyMCw4IEBAIHR5
cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYodW5zaWduZWQsIHdhdGNoZG9n
LCAwLCBOb3JtYWwsICJ3YXRjaGRvZyB0aW1lb3V0ICgwID0gRGlzYWJsZWQsIE4gPSBhIHRpbWVv
dXQgcGVyaW9kIG9mIE4gbWlsbGlzZWNvbmRzKSIpIFwKICAgICB2KGJvb2wsIHVzZVBvbGxpbmdU
cmFwcywgZmFsc2UsIE5vcm1hbCwgInVzZSBwb2xsaW5nIChpbnN0ZWFkIG9mIHNpZ25hbGxpbmcp
IFZNIHRyYXBzIikgXAogICAgIFwKKyAgICB2KGJvb2wsIHVzZU1hY2hGb3JFeGNlcHRpb25zLCB0
cnVlLCBOb3JtYWwsICJVc2UgbWFjaCBleGNlcHRpb25zIHJhdGhlciB0aGFuIHNpZ25hbHMgdG8g
aGFuZGxlIGZhdWx0cyBhbmQgcGFzcyB0aHJlYWQgbWVzc2FnZXMuIChUaGlzIGRvZXMgbm90aGlu
ZyBvbiBwbGF0Zm9ybXMgd2l0aG91dCBtYWNoKSIpIFwKKyAgICBcCiAgICAgdihib29sLCB1c2VJ
Q1N0YXRzLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgXAogICAgIHYodW5zaWduZWQs
IHByb3RvdHlwZUhpdENvdW50Rm9yTExJbnRDYWNoaW5nLCAyLCBOb3JtYWwsICJOdW1iZXIgb2Yg
cHJvdG90eXBlIHByb3BlcnR5IGhpdHMgYmVmb3JlIGNhY2hpbmcgYSBwcm90b3R5cGUgaW4gdGhl
IExMSW50LiBBIGNvdW50IG9mIDAgbWVhbnMgbmV2ZXIgY2FjaGUuIikgXApAQCAtNDQzLDYgKzQ0
NSw3IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYodW5zaWduZWQs
IHdlYkFzc2VtYmx5QkJRT3B0aW1pemF0aW9uTGV2ZWwsIDEsIE5vcm1hbCwgIkIzIE9wdGltaXph
dGlvbiBsZXZlbCBmb3IgQkJRIFdlYiBBc3NlbWJseSBtb2R1bGUgY29tcGlsYXRpb25zLiIpIFwK
ICAgICB2KHVuc2lnbmVkLCB3ZWJBc3NlbWJseU9NR09wdGltaXphdGlvbkxldmVsLCBPcHRpb25z
OjpkZWZhdWx0QjNPcHRMZXZlbCgpLCBOb3JtYWwsICJCMyBPcHRpbWl6YXRpb24gbGV2ZWwgZm9y
IE9NRyBXZWIgQXNzZW1ibHkgbW9kdWxlIGNvbXBpbGF0aW9ucy4iKSBcCiAgICAgXAorICAgIHYo
Ym9vbCwgdXNlQkJRVGllclVwQ2hlY2tzLCB0cnVlLCBOb3JtYWwsICJFbmFibGVzIHRpZXIgdXAg
Y2hlY2tzIGZvciBvdXIgQkJRIGNvZGUuIikgXAogICAgIHYodW5zaWduZWQsIHdlYkFzc2VtYmx5
T01HVGllclVwQ291bnQsIDUwMDAsIE5vcm1hbCwgIlRoZSBjb3VudGRvd24gYmVmb3JlIHdlIHRp
ZXIgdXAgYSBmdW5jdGlvbiB0byBPTUcuIikgXAogICAgIHYodW5zaWduZWQsIHdlYkFzc2VtYmx5
TG9vcERlY3JlbWVudCwgMTUsIE5vcm1hbCwgIlRoZSBhbW91bnQgdGhlIHRpZXIgdXAgY291bnRk
b3duIGlzIGRlY3JlbWVudGVkIG9uIGVhY2ggbG9vcCBiYWNrZWRnZS4iKSBcCiAgICAgdih1bnNp
Z25lZCwgd2ViQXNzZW1ibHlGdW5jdGlvbkVudHJ5RGVjcmVtZW50LCAxLCBOb3JtYWwsICJUaGUg
YW1vdW50IHRoZSB0aWVyIHVwIGNvdW50ZG93biBpcyBkZWNyZW1lbnRlZCBvbiBlYWNoIGZ1bmN0
aW9uIGVudHJ5LiIpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNVHJhcHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAK
aW5kZXggMWJhYWNlNjA0NGU2NjBhOGU1NDQxZmJhZDAxOGVhOTA5MzFhNGM5MS4uMTBkNzgyYThk
YzQ5YTVlZGEwODFkNzNkNjgzZGZmZTE2ZjhjOGY0MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk1UcmFwcy5jcHAKQEAgLTUzLDExICs1MywxMSBAQCBBTFdBWVNfSU5MSU5FIFZN
JiBWTVRyYXBzOjp2bSgpIGNvbnN0CiAjaWYgRU5BQkxFKFNJR05BTF9CQVNFRF9WTV9UUkFQUykK
IAogc3RydWN0IFNpZ25hbENvbnRleHQgewotICAgIFNpZ25hbENvbnRleHQobWNvbnRleHRfdCYg
bWNvbnRleHQpCi0gICAgICAgIDogbWNvbnRleHQobWNvbnRleHQpCi0gICAgICAgICwgdHJhcFBD
KE1hY2hpbmVDb250ZXh0OjppbnN0cnVjdGlvblBvaW50ZXIobWNvbnRleHQpKQotICAgICAgICAs
IHN0YWNrUG9pbnRlcihNYWNoaW5lQ29udGV4dDo6c3RhY2tQb2ludGVyKG1jb250ZXh0KSkKLSAg
ICAgICAgLCBmcmFtZVBvaW50ZXIoTWFjaGluZUNvbnRleHQ6OmZyYW1lUG9pbnRlcihtY29udGV4
dCkpCisgICAgU2lnbmFsQ29udGV4dChQbGF0Zm9ybVJlZ2lzdGVycyYgcmVnaXN0ZXJzKQorICAg
ICAgICA6IGNvbnRleHQocmVnaXN0ZXJzKQorICAgICAgICAsIHRyYXBQQyhNYWNoaW5lQ29udGV4
dDo6aW5zdHJ1Y3Rpb25Qb2ludGVyKGNvbnRleHQpKQorICAgICAgICAsIHN0YWNrUG9pbnRlcihN
YWNoaW5lQ29udGV4dDo6c3RhY2tQb2ludGVyKGNvbnRleHQpKQorICAgICAgICAsIGZyYW1lUG9p
bnRlcihNYWNoaW5lQ29udGV4dDo6ZnJhbWVQb2ludGVyKGNvbnRleHQpKQogICAgIHsKICNpZiBD
UFUoWDg2XzY0KSB8fCBDUFUoWDg2KQogICAgICAgICAvLyBPbiBYODZfNjQsIFNJR1RSQVAgcmVw
b3J0cyB0aGUgYWRkcmVzcyBhZnRlciB0aGUgdHJhcHBpbmcgUEMuIFNvLCBkZWMgYnkgMS4KQEAg
LTY4LDExICs2OCwxMSBAQCBzdHJ1Y3QgU2lnbmFsQ29udGV4dCB7CiAgICAgdm9pZCBhZGp1c3RQ
Q1RvUG9pbnRUb1RyYXBwaW5nSW5zdHJ1Y3Rpb24oKQogICAgIHsKICNpZiBDUFUoWDg2XzY0KSB8
fCBDUFUoWDg2KQotICAgICAgICBNYWNoaW5lQ29udGV4dDo6aW5zdHJ1Y3Rpb25Qb2ludGVyKG1j
b250ZXh0KSA9IHRyYXBQQzsKKyAgICAgICAgTWFjaGluZUNvbnRleHQ6Omluc3RydWN0aW9uUG9p
bnRlcihjb250ZXh0KSA9IHRyYXBQQzsKICNlbmRpZgogICAgIH0KIAotICAgIG1jb250ZXh0X3Qm
IG1jb250ZXh0OworICAgIFBsYXRmb3JtUmVnaXN0ZXJzJiBjb250ZXh0OwogICAgIHZvaWQqIHRy
YXBQQzsKICAgICB2b2lkKiBzdGFja1BvaW50ZXI7CiAgICAgdm9pZCogZnJhbWVQb2ludGVyOwpA
QCAtMTMwLDExICsxMzAsMTMgQEAgc3RhdGljIEV4cGVjdGVkPFZNQW5kU3RhY2tCb3VuZHMsIFZN
VHJhcHM6OkVycm9yPiBmaW5kQWN0aXZlVk1BbmRTdGFja0JvdW5kcyhTaWcKIAogc3RhdGljIHZv
aWQgaW5zdGFsbFNpZ25hbEhhbmRsZXIoKQogewotICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKFNp
Z25hbDo6VHJhcCwgW10gKGludCwgc2lnaW5mb190Kiwgdm9pZCogdWFwKSAtPiBTaWduYWxBY3Rp
b24gewotICAgICAgICBTaWduYWxDb250ZXh0IGNvbnRleHQoc3RhdGljX2Nhc3Q8dWNvbnRleHRf
dCo+KHVhcCktPnVjX21jb250ZXh0KTsKKyAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWw6
OlRyYXAsIFtdIChTaWduYWwsIFNpZ0luZm8mLCBQbGF0Zm9ybVJlZ2lzdGVycyYgcmVnaXN0ZXJz
KSAtPiBTaWduYWxBY3Rpb24geworICAgICAgICBTaWduYWxDb250ZXh0IGNvbnRleHQocmVnaXN0
ZXJzKTsKIAotICAgICAgICBpZiAoIWlzSklUUEMoY29udGV4dC50cmFwUEMpKQorICAgICAgICBp
ZiAoIWlzSklUUEMoY29udGV4dC50cmFwUEMpKSB7CisgICAgICAgICAgICBkYXRhTG9nTG4oInRy
YXBwaW5nIHBjOiAiLCBSYXdQb2ludGVyKGNvbnRleHQudHJhcFBDKSwgIiBqaXQgc3RhcnQ6ICIs
IHN0YXJ0T2ZGaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sLCAiIGppdCBlbmQ6ICIsIGVuZE9mRml4
ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbCk7CiAgICAgICAgICAgICByZXR1cm4gU2lnbmFsQWN0aW9u
OjpOb3RIYW5kbGVkOworICAgICAgICB9CiAKICAgICAgICAgLy8gRklYTUU6IFRoaXMgY3VycmVu
dGx5IGVhdHMgYWxsIHRyYXBzIGluY2x1ZGluZyBqaXQgYXNzZXJ0cyB3ZSBzaG91bGQgbWFrZSBz
dXJlIHRoaXMKICAgICAgICAgLy8gYWx3YXlzIHdvcmtzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTcxMDM5CkBAIC00MDQsOCArNDA2LDggQEAgdm9pZCBWTVRyYXBz
OjpTaWduYWxTZW5kZXI6OnNlbmQoKQogICAgICAgICAgICAgVk0mIHZtID0gKm1fdm07CiAgICAg
ICAgICAgICBhdXRvIG9wdGlvbmFsT3duZXJUaHJlYWQgPSB2bS5vd25lclRocmVhZCgpOwogICAg
ICAgICAgICAgaWYgKG9wdGlvbmFsT3duZXJUaHJlYWQpIHsKLSAgICAgICAgICAgICAgICBzZW5k
TWVzc2FnZSgqb3B0aW9uYWxPd25lclRocmVhZC52YWx1ZSgpLmdldCgpLCBbXSAoc2lnaW5mb190
KiwgdWNvbnRleHRfdCogdWNvbnRleHQpIC0+IHZvaWQgewotICAgICAgICAgICAgICAgICAgICBT
aWduYWxDb250ZXh0IGNvbnRleHQodWNvbnRleHQtPnVjX21jb250ZXh0KTsKKyAgICAgICAgICAg
ICAgICBzZW5kTWVzc2FnZSgqb3B0aW9uYWxPd25lclRocmVhZC52YWx1ZSgpLmdldCgpLCBbXSAo
UGxhdGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVycykgLT4gdm9pZCB7CisgICAgICAgICAgICAgICAg
ICAgIFNpZ25hbENvbnRleHQgY29udGV4dChyZWdpc3RlcnMpOwogICAgICAgICAgICAgICAgICAg
ICBhdXRvIGFjdGl2ZVZNQW5kU3RhY2tCb3VuZHMgPSBmaW5kQWN0aXZlVk1BbmRTdGFja0JvdW5k
cyhjb250ZXh0KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGl2ZVZNQW5kU3RhY2tCb3Vu
ZHMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFZNKiB2bSA9IGFjdGl2ZVZNQW5kU3RhY2tC
b3VuZHMudmFsdWUoKS52bTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29s
cy9TaWdpbGxDcmFzaEFuYWx5emVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9T
aWdpbGxDcmFzaEFuYWx5emVyLmNwcAppbmRleCA0YWRhZWZmMWNkYTJkMWZiYzZmOTA2MWYwNjNl
MTRkMmU2MzMwMDQ4Li5iYjQ2MDVjNjkzZTEyZGRlMDUwODRmN2ExN2NkMWU0NGY3ZTllNjc1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXpl
ci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1NpZ2lsbENyYXNoQW5hbHl6
ZXIuY3BwCkBAIC03OCwxMSArNzgsMTEgQEAgcHJpdmF0ZToKICNlbmRpZiAvLyBVU0UoT1NfTE9H
KQogCiBzdHJ1Y3QgU2lnbmFsQ29udGV4dCB7Ci0gICAgU2lnbmFsQ29udGV4dChtY29udGV4dF90
JiBtY29udGV4dCkKLSAgICAgICAgOiBtY29udGV4dChtY29udGV4dCkKLSAgICAgICAgLCBtYWNo
aW5lUEMoTWFjaGluZUNvbnRleHQ6Omluc3RydWN0aW9uUG9pbnRlcihtY29udGV4dCkpCi0gICAg
ICAgICwgc3RhY2tQb2ludGVyKE1hY2hpbmVDb250ZXh0OjpzdGFja1BvaW50ZXIobWNvbnRleHQp
KQotICAgICAgICAsIGZyYW1lUG9pbnRlcihNYWNoaW5lQ29udGV4dDo6ZnJhbWVQb2ludGVyKG1j
b250ZXh0KSkKKyAgICBTaWduYWxDb250ZXh0KFBsYXRmb3JtUmVnaXN0ZXJzJiBjb250ZXh0KQor
ICAgICAgICA6IGNvbnRleHQoY29udGV4dCkKKyAgICAgICAgLCBtYWNoaW5lUEMoTWFjaGluZUNv
bnRleHQ6Omluc3RydWN0aW9uUG9pbnRlcihjb250ZXh0KSkKKyAgICAgICAgLCBzdGFja1BvaW50
ZXIoTWFjaGluZUNvbnRleHQ6OnN0YWNrUG9pbnRlcihjb250ZXh0KSkKKyAgICAgICAgLCBmcmFt
ZVBvaW50ZXIoTWFjaGluZUNvbnRleHQ6OmZyYW1lUG9pbnRlcihjb250ZXh0KSkKICAgICB7IH0K
IAogICAgIHZvaWQgZHVtcCgpCkBAIC0xMTIsNyArMTEyLDcgQEAgc3RydWN0IFNpZ25hbENvbnRl
eHQgewogICAgICAgICB2KGdzKQogCiAjZGVmaW5lIERVTVBfUkVHSVNURVIoX19yZWcpIFwKLSAg
ICAgICAgbG9nKCJSZWdpc3RlciAiICNfX3JlZyAiOiAlcCIsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KG1jb250ZXh0LT5fX3NzLl9fIyNfX3JlZykpOworICAgICAgICBsb2coIlJlZ2lzdGVyICIg
I19fcmVnICI6ICVwIiwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY29udGV4dC5fXyMjX19yZWcp
KTsKICAgICAgICAgRk9SX0VBQ0hfUkVHSVNURVIoRFVNUF9SRUdJU1RFUikKICN1bmRlZiBGT1Jf
RUFDSF9SRUdJU1RFUgogCkBAIC0xMjAsMjAgKzEyMCwyMCBAQCBzdHJ1Y3QgU2lnbmFsQ29udGV4
dCB7CiAgICAgICAgIGludCBpOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjg7IGkgKz0gNCkg
ewogICAgICAgICAgICAgbG9nKCJ4JWQ6ICUwMTZsbHggeCVkOiAlMDE2bGx4IHglZDogJTAxNmxs
eCB4JWQ6ICUwMTZsbHgiLAotICAgICAgICAgICAgICAgIGksIG1jb250ZXh0LT5fX3NzLl9feFtp
XSwKLSAgICAgICAgICAgICAgICBpKzEsIG1jb250ZXh0LT5fX3NzLl9feFtpKzFdLAotICAgICAg
ICAgICAgICAgIGkrMiwgbWNvbnRleHQtPl9fc3MuX194W2krMl0sCi0gICAgICAgICAgICAgICAg
aSszLCBtY29udGV4dC0+X19zcy5fX3hbaSszXSk7CisgICAgICAgICAgICAgICAgaSwgY29udGV4
dC5fX3hbaV0sCisgICAgICAgICAgICAgICAgaSsxLCBjb250ZXh0Ll9feFtpKzFdLAorICAgICAg
ICAgICAgICAgIGkrMiwgY29udGV4dC5fX3hbaSsyXSwKKyAgICAgICAgICAgICAgICBpKzMsIGNv
bnRleHQuX194W2krM10pOwogICAgICAgICB9CiAgICAgICAgIEFTU0VSVChpIDwgMjkpOwogICAg
ICAgICBsb2coInglZDogJTAxNmxseCBmcDogJTAxNmxseCBscjogJTAxNmxseCIsCi0gICAgICAg
ICAgICBpLCBtY29udGV4dC0+X19zcy5fX3hbaV0sIG1jb250ZXh0LT5fX3NzLl9fZnAsIG1jb250
ZXh0LT5fX3NzLl9fbHIpOworICAgICAgICAgICAgaSwgY29udGV4dC5fX3hbaV0sIGNvbnRleHQu
X19mcCwgY29udGV4dC5fX2xyKTsKICAgICAgICAgbG9nKCJzcDogJTAxNmxseCBwYzogJTAxNmxs
eCBjcHNyOiAlMDh4IiwKLSAgICAgICAgICAgIG1jb250ZXh0LT5fX3NzLl9fc3AsIG1jb250ZXh0
LT5fX3NzLl9fcGMsIG1jb250ZXh0LT5fX3NzLl9fY3Bzcik7CisgICAgICAgICAgICBjb250ZXh0
Ll9fc3AsIGNvbnRleHQuX19wYywgY29udGV4dC5fX2Nwc3IpOwogI2VuZGlmCiAgICAgfQogCi0g
ICAgbWNvbnRleHRfdCYgbWNvbnRleHQ7CisgICAgUGxhdGZvcm1SZWdpc3RlcnMmIGNvbnRleHQ7
CiAgICAgdm9pZCogbWFjaGluZVBDOwogICAgIHZvaWQqIHN0YWNrUG9pbnRlcjsKICAgICB2b2lk
KiBmcmFtZVBvaW50ZXI7CkBAIC0xNDIsOCArMTQyLDggQEAgc3RydWN0IFNpZ25hbENvbnRleHQg
ewogc3RhdGljIHZvaWQgaW5zdGFsbENyYXNoSGFuZGxlcigpCiB7CiAjaWYgQ1BVKFg4Nl82NCkg
fHwgQ1BVKEFSTTY0KQotICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbDo6SWxsLCBbXSAo
aW50LCBzaWdpbmZvX3QqLCB2b2lkKiB1YXApIHsKLSAgICAgICAgU2lnbmFsQ29udGV4dCBjb250
ZXh0KHN0YXRpY19jYXN0PHVjb250ZXh0X3QqPih1YXApLT51Y19tY29udGV4dCk7CisgICAgaW5z
dGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFsOjpJbGwsIFtdIChTaWduYWwsIFNpZ0luZm8mLCBQbGF0
Zm9ybVJlZ2lzdGVycyYgcmVnaXN0ZXJzKSB7CisgICAgICAgIFNpZ25hbENvbnRleHQgY29udGV4
dChyZWdpc3RlcnMpOwogCiAgICAgICAgIGlmICghaXNKSVRQQyhjb250ZXh0Lm1hY2hpbmVQQykp
CiAgICAgICAgICAgICByZXR1cm4gU2lnbmFsQWN0aW9uOjpOb3RIYW5kbGVkOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCmluZGV4IDFkZDBjZDFkODM1YzZjMmYy
MzFiMDBiODg2ZGRlNGFmNzJjMjYzY2UuLmIxYjU5OGQyMGM1YzAwNzdkOWU5ZDA4ZTM2OGFkNWNh
MTc4MzFiYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQ
bGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAK
QEAgLTI0Miw3ICsyNDIsNyBAQCB2b2lkIEJCUVBsYW46OmNvbXBpbGVGdW5jdGlvbnMoQ29tcGls
YXRpb25FZmZvcnQgZWZmb3J0KQogICAgICAgICBBU1NFUlQodmFsaWRhdGVGdW5jdGlvbihmdW5j
dGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBtX21vZHVsZUluZm9ybWF0aW9u
LmdldCgpKSk7CiAKICAgICAgICAgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbklu
ZGV4XSA9IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPigpOwotICAgICAgICBUaWVyVXBD
b3VudCogdGllclVwID0gJm1fdGllclVwQ291bnRzW2Z1bmN0aW9uSW5kZXhdOworICAgICAgICBU
aWVyVXBDb3VudCogdGllclVwID0gT3B0aW9uczo6dXNlQkJRVGllclVwQ2hlY2tzKCkgPyAmbV90
aWVyVXBDb3VudHNbZnVuY3Rpb25JbmRleF0gOiBudWxscHRyOwogICAgICAgICBhdXRvIHBhcnNl
QW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZShtX2NvbXBpbGF0aW9uQ29udGV4dHNb
ZnVuY3Rpb25JbmRleF0sIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUs
IG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0sIG1fbW9kdWxlSW5mb3Jt
YXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlLCBmdW5jdGlvbklu
ZGV4LCB0aWVyVXApOwogCiAgICAgICAgIGlmIChVTkxJS0VMWSghcGFyc2VBbmRDb21waWxlUmVz
dWx0KSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0
U2lnbmFsSGFuZGxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRT
aWduYWxIYW5kbGVyLmNwcAppbmRleCAyZTBjOTlhMzliZWJkMzE3OGI5MTQ4ZDk1OGZlNTNlNTdh
NjIyOTdlLi4yNjRjMzRkZTQ1ZGExNzVhNWQ1MTQxYzE3MWVmZTk1ZTA2M2M1ZTI3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVy
LmNwcApAQCAtNTIsOSArNTIsOCBAQCBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8
c3RkOjp0dXBsZTx2b2lkKiwgdm9pZCo+Pj4gY29kZUxvY2F0aW9uczsgLy8gKAogCiBzdGF0aWMg
Ym9vbCBmYXN0SGFuZGxlckluc3RhbGxlZCB7IGZhbHNlIH07CiAKLXN0YXRpYyBTaWduYWxBY3Rp
b24gdHJhcEhhbmRsZXIoaW50LCBzaWdpbmZvX3QqIHNpZ0luZm8sIHZvaWQqIHVjb250ZXh0KQor
c3RhdGljIFNpZ25hbEFjdGlvbiB0cmFwSGFuZGxlcihTaWduYWwsIFNpZ0luZm8mIHNpZ0luZm8s
IFBsYXRmb3JtUmVnaXN0ZXJzJiBjb250ZXh0KQogewotICAgIG1jb250ZXh0X3QmIGNvbnRleHQg
PSBzdGF0aWNfY2FzdDx1Y29udGV4dF90Kj4odWNvbnRleHQpLT51Y19tY29udGV4dDsKICAgICB2
b2lkKiBmYXVsdGluZ0luc3RydWN0aW9uID0gTWFjaGluZUNvbnRleHQ6Omluc3RydWN0aW9uUG9p
bnRlcihjb250ZXh0KTsKICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAic3RhcnRpbmcgaGFuZGxl
ciBmb3IgZmF1bHQgYXQ6ICIsIFJhd1BvaW50ZXIoZmF1bHRpbmdJbnN0cnVjdGlvbikpOwogCkBA
IC02NCw3ICs2Myw3IEBAIHN0YXRpYyBTaWduYWxBY3Rpb24gdHJhcEhhbmRsZXIoaW50LCBzaWdp
bmZvX3QqIHNpZ0luZm8sIHZvaWQqIHVjb250ZXh0KQogICAgIGlmIChpc0pJVFBDKGZhdWx0aW5n
SW5zdHJ1Y3Rpb24pKSB7CiAgICAgICAgIGJvb2wgZmF1bHRlZEluQWN0aXZlRmFzdE1lbW9yeSA9
IGZhbHNlOwogICAgICAgICB7Ci0gICAgICAgICAgICB2b2lkKiBmYXVsdGluZ0FkZHJlc3MgPSBz
aWdJbmZvLT5zaV9hZGRyOworICAgICAgICAgICAgdm9pZCogZmF1bHRpbmdBZGRyZXNzID0gc2ln
SW5mby5mYXVsdGluZ0FkZHJlc3M7CiAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAi
Y2hlY2tpbmcgZmF1bHRpbmcgYWRkcmVzczogIiwgUmF3UG9pbnRlcihmYXVsdGluZ0FkZHJlc3Mp
LCAiIGlzIGluIGFuIGFjdGl2ZSBmYXN0IG1lbW9yeSIpOwogICAgICAgICAgICAgZmF1bHRlZElu
QWN0aXZlRmFzdE1lbW9yeSA9IFdhc206Ok1lbW9yeTo6YWRkcmVzc0lzSW5BY3RpdmVGYXN0TWVt
b3J5KGZhdWx0aW5nQWRkcmVzcyk7CiAgICAgICAgIH0KQEAgLTEyNCwxMSArMTIzLDExIEBAIHZv
aWQgZW5hYmxlRmFzdE1lbW9yeSgpCiAgICAgICAgICAgICByZXR1cm47CiAKICNpZiBFTkFCTEUo
V0VCQVNTRU1CTFlfRkFTVF9NRU1PUlkpCi0gICAgICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKFNp
Z25hbDo6QnVzLCBbXSAoaW50IHNpZ25hbCwgc2lnaW5mb190KiBzaWdJbmZvLCB2b2lkKiB1Y29u
dGV4dCkgeworICAgICAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWw6OkJ1cywgW10gKFNp
Z25hbCBzaWduYWwsIFNpZ0luZm8mIHNpZ0luZm8sIFBsYXRmb3JtUmVnaXN0ZXJzJiB1Y29udGV4
dCkgewogICAgICAgICAgICAgcmV0dXJuIHRyYXBIYW5kbGVyKHNpZ25hbCwgc2lnSW5mbywgdWNv
bnRleHQpOwogICAgICAgICB9KTsKIAotICAgICAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWdu
YWw6OlNlZ1YsIFtdIChpbnQgc2lnbmFsLCBzaWdpbmZvX3QqIHNpZ0luZm8sIHZvaWQqIHVjb250
ZXh0KSB7CisgICAgICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbDo6U2VnViwgW10gKFNp
Z25hbCBzaWduYWwsIFNpZ0luZm8mIHNpZ0luZm8sIFBsYXRmb3JtUmVnaXN0ZXJzJiB1Y29udGV4
dCkgewogICAgICAgICAgICAgcmV0dXJuIHRyYXBIYW5kbGVyKHNpZ25hbCwgc2lnSW5mbywgdWNv
bnRleHQpOwogICAgICAgICB9KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU1hY2hpbmVUaHJlYWRzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21NYWNoaW5lVGhyZWFkcy5jcHAKaW5kZXggNWFhYzg3YWNiNTc0N2M3ZmNhMmY5MzZlYzlj
ZjY3OGI0MzE3ODE3MS4uMGEzNjdmZDVlMjI1MjdlOWMzYzg3NTM2ZWNmZDcyYjEzZGY3OWQ1YiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1hY2hpbmVUaHJlYWRz
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWFjaGluZVRocmVhZHMu
Y3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiTWFjaGluZVN0YWNrTWFya2VyLmgiCiAj
aW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZE1lc3Nh
Z2UuaD4KKyNpbmNsdWRlIDx3dGYvdGhyZWFkcy9TaWduYWxzLmg+CiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgV2FzbSB7CiAKQEAgLTU3LDcgKzU4LDcgQEAgdm9pZCByZXNldEluc3RydWN0
aW9uQ2FjaGVPbkFsbFRocmVhZHMoKQogCiAgICAgY29uc3QgRG91Ymx5TGlua2VkTGlzdDxNYWNo
aW5lVGhyZWFkczo6TWFjaGluZVRocmVhZD4mIHRocmVhZHMgPSB3YXNtVGhyZWFkcygpLnRocmVh
ZHNMaXN0SGVhZChsb2NrZXIpOwogICAgIGZvciAoY29uc3QgYXV0byogdGhyZWFkID0gdGhyZWFk
cy5oZWFkKCk7IHRocmVhZDsgdGhyZWFkID0gdGhyZWFkLT5uZXh0KCkpIHsKLSAgICAgICAgc2Vu
ZE1lc3NhZ2UodGhyZWFkLT5tX3RocmVhZC5nZXQoKSwgW10gKHNpZ2luZm9fdCosIHVjb250ZXh0
X3QqKSB7CisgICAgICAgIHNlbmRNZXNzYWdlKHRocmVhZC0+bV90aHJlYWQuZ2V0KCksIFtdIChj
b25zdCBQbGF0Zm9ybVJlZ2lzdGVycyYpIHsKICAgICAgICAgICAgIC8vIEl0J3MgbGlrZWx5IHRo
YXQgdGhlIHNpZ25hbCBoYW5kbGVyIHdpbGwgYWxyZWFkeSByZXNldCB0aGUgaW5zdHJ1Y3Rpb24g
Y2FjaGUgYnV0IHdlIG1pZ2h0IGFzIHdlbGwgYmUgc3VyZS4KICAgICAgICAgICAgIFdURjo6Y3Jv
c3NNb2RpZnlpbmdDb2RlRmVuY2UoKTsKICAgICAgICAgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dURi9XVEYueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA1ZjQ1Mjg3ZjZlM2M2ODg1YjIyYmEyNzc2Y2ZiYzZh
MzMyM2JkMDViLi41ODU0NGNjYjYyY2IyMjEyYmFlZTc2ZjRkMmEwMWU4OWI2YjdiMDk0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTY0LDYgKzY0LDcgQEAK
IAkJNTIxODMwMTJDOTlFNDc2QTg0RUVCRUE4IC8qIFN5bWJvbEltcGwuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjcyQkJEQjEwN0ZBNDI0ODg2MTc4
QjlFIC8qIFN5bWJvbEltcGwuY3BwICovOyB9OwogCQk1MzExQkQ1MzFFQTcxQ0FEMDA1MjUyODEg
LyogU2lnbmFscy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MzExQkQ1MTFFQTcxQ0FEMDA1MjUyODEgLyogU2lnbmFscy5jcHAgKi87IH07CiAJCTUz
MTFCRDVDMUVBODIyRjkwMDUyNTI4MSAvKiBUaHJlYWRNZXNzYWdlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMTFCRDVCMUVBODIyRjkwMDUyNTI4
MSAvKiBUaHJlYWRNZXNzYWdlLmNwcCAqLzsgfTsKKwkJNTM1MzRGMkExRUMwRTEwRTAwMTQxQjJG
IC8qIE1hY2hFeGNlcHRpb25zLmRlZnMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MzUzNEYyOTFFQzBFMTBFMDAxNDFCMkYgLyogTWFjaEV4Y2VwdGlvbnMu
ZGVmcyAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChDbGllbnQsIFNlcnZlciwgKTsgfTsg
fTsKIAkJNzBBOTkzRkUxQUQ3MTUxMzAwRkE2MTVCIC8qIFN5bWJvbFJlZ2lzdHJ5LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcwQTk5M0ZDMUFENzE1
MTMwMEZBNjE1QiAvKiBTeW1ib2xSZWdpc3RyeS5jcHAgKi87IH07CiAJCTcwRUNBNjBEMUIwMjQy
NjgwMDQ0OTczOSAvKiBBdG9taWNTdHJpbmdJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcwRUNBNjBBMUIwMjQyNjgwMDQ0OTczOSAvKiBBdG9t
aWNTdHJpbmdJbXBsLmNwcCAqLzsgfTsKIAkJN0FGRUM2QjExRUIyMkI1OTAwREFERTM2IC8qIFVV
SUQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FG
RUM2QjAxRUIyMkI1OTAwREFERTM2IC8qIFVVSUQuY3BwICovOyB9OwpAQCAtMjk5LDYgKzMwMCw3
IEBACiAJCTUzMTFCRDU3MUVBN0UxQTEwMDUyNTI4MSAvKiBTaWduYWxzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpZ25hbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTMxMUJENTkxRUE4MUE5NjAwNTI1MjgxIC8qIFRocmVhZE1lc3NhZ2UuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGhyZWFkTWVzc2FnZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MzExQkQ1QjFFQTgyMkY5MDA1MjUyODEgLyogVGhyZWFkTWVzc2Fn
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaHJlYWRNZXNzYWdl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM1MzRGMjkxRUMwRTEwRTAwMTQx
QjJGIC8qIE1hY2hFeGNlcHRpb25zLmRlZnMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLm1pZzsgcGF0
aCA9IE1hY2hFeGNlcHRpb25zLmRlZnM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUz
OUVCMDYyMUQ1NTI4NDIwMEM4MkVGNyAvKiBMRUJEZWNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IExFQkRlY29kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTNFQzI1M0MxRTk1QUQzMDAwMDgzMUI5IC8qIFByaW9yaXR5UXVldWUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJpb3JpdHlRdWV1ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1NTMwNzFDOTFDNDA0MjcyMDAzODQ4OTggLyogVGlueUxSVUNhY2hlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpbnlMUlVDYWNoZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTAyMyw2ICsxMDI1LDcgQEAKIAkJCWNoaWxkcmVuID0g
KAogCQkJCTFBNDI4QjhCMUM4Rjg5REQwMDUxRTlFQiAvKiBBcHBLaXRDb21wYXRpYmlsaXR5RGVj
bGFyYXRpb25zLmggKi8sCiAJCQkJMUFDQUREODIxODg0NDgwMTAwRDhCNzFEIC8qIERlcHJlY2F0
ZWRTeW1ib2xzVXNlZEJ5U2FmYXJpLm1tICovLAorCQkJCTUzNTM0RjI5MUVDMEUxMEUwMDE0MUIy
RiAvKiBNYWNoRXhjZXB0aW9ucy5kZWZzICovLAogCQkJCUE4QTQ3MkM1MTUxQTgyNUEwMDQxMjNG
RiAvKiBNYWluVGhyZWFkTWFjLm1tICovLAogCQkJKTsKIAkJCXBhdGggPSBtYWM7CkBAIC0xMzQ2
LDYgKzEzNDksNyBAQAogCQkJCTE0M0Y2MTFGMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUEzQjcyNUVDOTg3NDQ2QUQ5M0YxQTQ0MCAvKiBSYW5kb21E
ZXZpY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0MTQxNTFBODI1QjAwNDEyM0ZGIC8q
IFJhbmRvbU51bWJlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MzUzNEYyQTFFQzBFMTBFMDAx
NDFCMkYgLyogTWFjaEV4Y2VwdGlvbnMuZGVmcyBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDFB
MTUxQTgyNUIwMDQxMjNGRiAvKiBSZWZDb3VudGVkTGVha0NvdW50ZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMkNERUQwRjMxODExNUM4NTAwNERCQTcwIC8qIFJ1bkxvb3AuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMkNERUQwRUYxODExNUMzODAwNERCQTcwIC8qIFJ1bkxvb3BDRi5jcHAgaW4g
U291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1N0YWNrQm91bmRzLmggYi9T
b3VyY2UvV1RGL3d0Zi9TdGFja0JvdW5kcy5oCmluZGV4IDU1NDYwNGYyYWI0ODRjN2NmNzFlZTM4
NjMwY2ViNGM3OWMzM2U5NzIuLmNkNjJjMTQ4YTZjN2VmYzk1MTdhOGIwOWI4YTMyYzdmZTE5MGNk
ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1N0YWNrQm91bmRzLmgKKysrIGIvU291cmNl
L1dURi93dGYvU3RhY2tCb3VuZHMuaApAQCAtNTQsNyArNTQsNiBAQCBwdWJsaWM6CiAgICAgICAg
IDogbV9vcmlnaW4ob3JpZ2luKQogICAgICAgICAsIG1fYm91bmQoZW5kKQogICAgIHsKLSAgICAg
ICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIH0KIAogICAgIHZvaWQqIG9yaWdpbigpIGNvbnN0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXIuY3BwIGIvU291cmNlL1dU
Ri93dGYvVGhyZWFkSG9sZGVyLmNwcAppbmRleCAzMGIyMjdjZGI4YWM1MjYwNzUwYjQ3ZDQ4MmFi
YzJkNTViZTNhYzk0Li4zYTcyZTM3YzcwMGRlM2FmNGYyZTcyNWNhN2M5YWVkMzk2YTgxNzhkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXIuY3BwCisrKyBiL1NvdXJjZS9X
VEYvd3RmL1RocmVhZEhvbGRlci5jcHAKQEAgLTM0LDEyICszNCwxNyBAQAogCiAjaW5jbHVkZSAi
VGhyZWFkaW5nLmgiCiAKKyNpbmNsdWRlIDx3dGYvdGhyZWFkcy9TaWduYWxzLmg+CisKIG5hbWVz
cGFjZSBXVEYgewogCiBUaHJlYWRTcGVjaWZpY0tleSBUaHJlYWRIb2xkZXI6Om1fa2V5ID0gSW52
YWxpZFRocmVhZFNwZWNpZmljS2V5OwogCiBUaHJlYWRIb2xkZXI6On5UaHJlYWRIb2xkZXIoKQog
eworI2lmIE9TKERBUldJTikKKyAgICByZW1vdmVUaHJlYWQoJm1fdGhyZWFkLmdldCgpKTsKKyNl
bmRpZgogICAgIG1fdGhyZWFkLT5kaWRFeGl0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL1RocmVhZE1lc3NhZ2UuY3BwIGIvU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5j
cHAKaW5kZXggZjE0YmM0NWQzNjE0YzdjNjYzNWViMTdhYjBlMjcyODE2YTEzNzNkZC4uYjA0MGE1
YjcxZGMxY2JkNTUxNTM3M2U2ZGU2OTNjOTRkMmI1NTA3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvVGhyZWFkTWVzc2FnZS5jcHAKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2Fn
ZS5jcHAKQEAgLTM2LDYgKzM2LDkgQEAKICNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+CiAjaW5jbHVk
ZSA8d3RmL3RocmVhZHMvU2lnbmFscy5oPgogCisjaWYgT1MoREFSV0lOKQorI2luY2x1ZGUgPG1h
Y2gvdGhyZWFkX2FjdC5oPgorI2VuZGlmCiAKIG5hbWVzcGFjZSBXVEYgewogCkBAIC04MywxMiAr
ODYsMTIgQEAgdm9pZCBpbml0aWFsaXplVGhyZWFkTWVzc2FnZXMoKQogfQogCiBTVVBQUkVTU19B
U0FOCi1NZXNzYWdlU3RhdHVzIHNlbmRNZXNzYWdlU2NvcGVkKFRocmVhZCYgdGhyZWFkLCBjb25z
dCBUaHJlYWRNZXNzYWdlJiBtZXNzYWdlKQorc3RhdGljIE1lc3NhZ2VTdGF0dXMgc2VuZE1lc3Nh
Z2VTaWduYWwoVGhyZWFkJiB0aHJlYWQsIGNvbnN0IFRocmVhZE1lc3NhZ2UmIG1lc3NhZ2UpCiB7
CiAgICAgY29uc3RleHByIFNpZ25hbCBzaWduYWwgPSBTaWduYWw6OlVzcjsKICAgICBzdGF0aWMg
c3RkOjpvbmNlX2ZsYWcgb25jZTsKICAgICBzdGQ6OmNhbGxfb25jZShvbmNlLCBbXSB7Ci0gICAg
ICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKHNpZ25hbCwgW10gKGludCwgc2lnaW5mb190KiBpbmZv
LCB2b2lkKiB1YXApIHsKKyAgICAgICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoc2lnbmFsLCBbXSAo
U2lnbmFsLCBTaWdJbmZvJiwgUGxhdGZvcm1SZWdpc3RlcnMmIGNvbnRleHQpIHsKICAgICAgICAg
ICAgIFRocmVhZCogdGhyZWFkID0gVGhyZWFkOjpjdXJyZW50TWF5QmVOdWxsKCk7CiAKICAgICAg
ICAgICAgIGlmICghdGhyZWFkKSB7CkBAIC05OCw3ICsxMDEsNyBAQCBNZXNzYWdlU3RhdHVzIHNl
bmRNZXNzYWdlU2NvcGVkKFRocmVhZCYgdGhyZWFkLCBjb25zdCBUaHJlYWRNZXNzYWdlJiBtZXNz
YWdlKQogCiAgICAgICAgICAgICAvLyBOb2RlIHNob3VsZCBiZSBkZWxldGVkIGluIHRoZSBzZW5k
ZXIgdGhyZWFkLiBEZWxldGluZyBOb2RlcyBpbiBzaWduYWwgaGFuZGxlciBjYXVzZXMgZGVhZCBs
b2NrLgogICAgICAgICAgICAgdGhyZWFkLT50aHJlYWRNZXNzYWdlcygpLmNvbnN1bWVBbGxXaXRo
Tm9kZShbJl0gKFRocmVhZE1lc3NhZ2VEYXRhKiBkYXRhLCBOb2RlKiBub2RlKSB7Ci0gICAgICAg
ICAgICAgICAgZGF0YS0+bWVzc2FnZShpbmZvLCBzdGF0aWNfY2FzdDx1Y29udGV4dF90Kj4odWFw
KSk7CisgICAgICAgICAgICAgICAgZGF0YS0+bWVzc2FnZShjb250ZXh0KTsKICAgICAgICAgICAg
ICAgICAvLyBCeSBzZXR0aW5nIHJhbiB2YXJpYWJsZSwgKDEpIHRoZSBzZW5kZXIgYWNrbm93bGVk
Z2VzIHRoZSBjb21wbGV0aW9uIGFuZAogICAgICAgICAgICAgICAgIC8vICgyKSBnZXRzIHRoZSBO
b2RlIHRvIGJlIGRlbGV0ZWQuCiAgICAgICAgICAgICAgICAgZGF0YS0+cmFuLnN0b3JlKG5vZGUp
OwpAQCAtMTU2LDYgKzE1OSw2MCBAQCBNZXNzYWdlU3RhdHVzIHNlbmRNZXNzYWdlU2NvcGVkKFRo
cmVhZCYgdGhyZWFkLCBjb25zdCBUaHJlYWRNZXNzYWdlJiBtZXNzYWdlKQogICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKKyNpZiBPUyhEQVJXSU4pCitzdGF0aWMgTWVzc2Fn
ZVN0YXR1cyBzZW5kTWVzc2FnZU1hY2goVGhyZWFkJiB0aHJlYWQsIGNvbnN0IFRocmVhZE1lc3Nh
Z2UmIG1lc3NhZ2UpCit7CisgICAgc3RhdGljIFN0YXRpY0xvY2sgbWVzc2FnZUxvY2s7CisgICAg
YXV0byBsb2NraG9sZGVyID0gaG9sZExvY2sobWVzc2FnZUxvY2spOworCisgICAgYXV0byByZXN1
bHQgPSB0aHJlYWQuc3VzcGVuZCgpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4g
TWVzc2FnZVN0YXR1czo6VGhyZWFkRXhpdGVkOworCisjaWYgQ1BVKFg4NikKKyAgICB1bnNpZ25l
ZCB1c2VyQ291bnQgPSBzaXplb2YocmVnaXN0ZXJzKSAvIHNpemVvZihpbnQpOworICAgIHRocmVh
ZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSBpMzg2X1RIUkVBRF9TVEFURTsKKyNlbGlmIENQVShY
ODZfNjQpCisgICAgdW5zaWduZWQgdXNlckNvdW50ID0geDg2X1RIUkVBRF9TVEFURTY0X0NPVU5U
OworICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSB4ODZfVEhSRUFEX1NUQVRFNjQ7
CisjZWxpZiBDUFUoQVJNKQorICAgIHVuc2lnbmVkIHVzZXJDb3VudCA9IEFSTV9USFJFQURfU1RB
VEVfQ09VTlQ7CisgICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IEFSTV9USFJFQURf
U1RBVEU7CisjZWxpZiBDUFUoQVJNNjQpCisgICAgdW5zaWduZWQgdXNlckNvdW50ID0gQVJNX1RI
UkVBRF9TVEFURTY0X0NPVU5UOworICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSBB
Uk1fVEhSRUFEX1NUQVRFNjQ7CisjZWxzZQorI2Vycm9yIFVua25vd24gQXJjaGl0ZWN0dXJlCisj
ZW5kaWYKKworICAgIFBsYXRmb3JtUmVnaXN0ZXJzIHJlZ2lzdGVyczsKKyAgICB0aHJlYWRfc3Rh
dGVfdCBzdGF0ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dGhyZWFkX3N0YXRlX3Q+KCZyZWdpc3RlcnMp
OworICAgIHRocmVhZF9nZXRfc3RhdGUodGhyZWFkLm1hY2hUaHJlYWQoKSwgZmxhdm9yLCBzdGF0
ZSwgJnVzZXJDb3VudCk7CisKKyAgICBtZXNzYWdlKHJlZ2lzdGVycyk7CisKKyAgICB0aHJlYWRf
c2V0X3N0YXRlKHRocmVhZC5tYWNoVGhyZWFkKCksIGZsYXZvciwgKHRocmVhZF9zdGF0ZV90KSZy
ZWdpc3RlcnMsIHVzZXJDb3VudCk7CisKKyAgICB0aHJlYWQucmVzdW1lKCk7CisgICAgcmV0dXJu
IE1lc3NhZ2VTdGF0dXM6Ok1lc3NhZ2VSYW47Cit9CisKK3N0YXRpYyBib29sIHVzZU1hY2ggPSBm
YWxzZTsKK3ZvaWQgZGVsaXZlck1lc3NhZ2VzVXNpbmdNYWNoKCkgeyB1c2VNYWNoID0gdHJ1ZTsg
fQorCisjZW5kaWYKKworTWVzc2FnZVN0YXR1cyBzZW5kTWVzc2FnZVNjb3BlZChUaHJlYWQmIHRo
cmVhZCwgY29uc3QgVGhyZWFkTWVzc2FnZSYgbWVzc2FnZSkKK3sKKyNpZiBPUyhEQVJXSU4pCisg
ICAgaWYgKHVzZU1hY2gpCisgICAgICAgIHJldHVybiBzZW5kTWVzc2FnZU1hY2godGhyZWFkLCBt
ZXNzYWdlKTsKKyNlbmRpZgorICAgIHJldHVybiBzZW5kTWVzc2FnZVNpZ25hbCh0aHJlYWQsIG1l
c3NhZ2UpOworICAgIHJldHVybiBNZXNzYWdlU3RhdHVzOjpUaHJlYWRFeGl0ZWQ7Cit9CisKKwog
fSAvLyBuYW1lc3BhY2UgV1RGCiAKICNlbmRpZiAvLyBVU0UoUFRIUkVBRFMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRNZXNzYWdlLmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRN
ZXNzYWdlLmgKaW5kZXggOWFlNTNmMjljZjdlOGZiMDBlZjkyMTFkMTZjZTJjZGVkNjAzZWMxYi4u
Nzc0MmUxYWNiYzRiM2M4NWRkZjY2MjgwMGM1YWNmMGFiMmFlMTQxOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZE1l
c3NhZ2UuaApAQCAtMzYsNyArMzYsNyBAQCBuYW1lc3BhY2UgV1RGIHsKIHZvaWQgaW5pdGlhbGl6
ZVRocmVhZE1lc3NhZ2VzKCk7CiAKIGNsYXNzIFRocmVhZE1lc3NhZ2VEYXRhOwotdXNpbmcgVGhy
ZWFkTWVzc2FnZSA9IFNjb3BlZExhbWJkYTx2b2lkKHNpZ2luZm9fdCosIHVjb250ZXh0X3QqKT47
Cit1c2luZyBUaHJlYWRNZXNzYWdlID0gU2NvcGVkTGFtYmRhPHZvaWQoUGxhdGZvcm1SZWdpc3Rl
cnMmKT47CiAKIGVudW0gY2xhc3MgTWVzc2FnZVN0YXR1cyB7CiAgICAgTWVzc2FnZVJhbiwKQEAg
LTUxLDEwICs1MSwxNCBAQCBNZXNzYWdlU3RhdHVzIHNlbmRNZXNzYWdlU2NvcGVkKFRocmVhZCYs
IGNvbnN0IFRocmVhZE1lc3NhZ2UmKTsKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CiBNZXNz
YWdlU3RhdHVzIHNlbmRNZXNzYWdlKFRocmVhZCYgdGFyZ2V0VGhyZWFkLCBjb25zdCBGdW5jdG9y
JiBmdW5jKQogewotICAgIGF1dG8gbGFtYmRhID0gc2NvcGVkTGFtYmRhUmVmPHZvaWQoc2lnaW5m
b190KiwgdWNvbnRleHRfdCopPihmdW5jKTsKKyAgICBhdXRvIGxhbWJkYSA9IHNjb3BlZExhbWJk
YVJlZjx2b2lkKFBsYXRmb3JtUmVnaXN0ZXJzJik+KGZ1bmMpOwogICAgIHJldHVybiBzZW5kTWVz
c2FnZVNjb3BlZCh0YXJnZXRUaHJlYWQsIGxhbWJkYSk7CiB9CiAKKyNpZiBPUyhEQVJXSU4pCit2
b2lkIGRlbGl2ZXJNZXNzYWdlc1VzaW5nTWFjaCgpOworI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNl
IFdURgogCiB1c2luZyBXVEY6OnNlbmRNZXNzYWdlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvVGhyZWFkaW5nLmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaAppbmRleCBkMmU1MzZk
ZjdhODY5NmQ4ZTZiOTViYTQzZTE3M2QzYjU1MGJmMTZhLi4zNTE0ZThjMDlmMGZjOTRkNTM0YmUy
ZjNiNmU3YzQ5NTBlMGJjZjA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcu
aAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaApAQCAtMTM4LDYgKzEzOCwxMCBAQCBw
dWJsaWM6CiAKICNpZiBVU0UoUFRIUkVBRFMpCiAgICAgTG9ja2xlc3NCYWc8VGhyZWFkTWVzc2Fn
ZURhdGEqPiYgdGhyZWFkTWVzc2FnZXMoKSB7IHJldHVybiBtX3RocmVhZE1lc3NhZ2VzOyB9CisK
KyNpZiBPUyhEQVJXSU4pCisgICAgbWFjaF9wb3J0X3QgbWFjaFRocmVhZCgpIHsgcmV0dXJuIG1f
cGxhdGZvcm1UaHJlYWQ7IH0KKyNlbmRpZgogI2VuZGlmCiAKIHByb3RlY3RlZDoKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL21hYy9NYWNoRXhjZXB0aW9ucy5kZWZzIGIvU291cmNlL1dURi93
dGYvbWFjL01hY2hFeGNlcHRpb25zLmRlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDIwNTc0MmE0ZWQ1MDBmODA2
NGZlZWI0OTU1YTdjOTcwZDk5YWYwYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L21hYy9NYWNoRXhjZXB0aW9ucy5kZWZzCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8bWFjaC9tYWNoX2V4Yy5k
ZWZzPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGhyZWFkcy9TaWduYWxzLmNwcCBiL1Nv
dXJjZS9XVEYvd3RmL3RocmVhZHMvU2lnbmFscy5jcHAKaW5kZXggODU1YjI4YjMxNzIxNzI3Y2Yx
ZjQzMWE5MThhMjUxZGMyZTZhM2RmYy4uNmVmYjRmMDY0ZGM0NjMyZWY5ZWU2M2JhYTdjN2ZmOGUy
N2Q4NzA3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGhyZWFkcy9TaWduYWxzLmNwcAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi90aHJlYWRzL1NpZ25hbHMuY3BwCkBAIC0yOCwyMSArMjgsMjUz
IEBACiAKICNpZiBVU0UoUFRIUkVBRFMpCiAKK2V4dGVybiAiQyIgeworI2luY2x1ZGUgIk1hY2hF
eGNlcHRpb25zU2VydmVyLmgiCit9OworCiAjaW5jbHVkZSA8Y3N0ZGlvPgogI2luY2x1ZGUgPG11
dGV4PgogI2luY2x1ZGUgPHNpZ25hbC5oPgorCisjaW5jbHVkZSA8bWFjaC9tYWNoLmg+CisjaW5j
bHVkZSA8bWFjaC90aHJlYWRfYWN0Lmg+CisKICNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgogI2lu
Y2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRl
IDx3dGYvTG9ja2xlc3NCYWcuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNp
bmNsdWRlIDx3dGYvVGhyZWFkTWVzc2FnZS5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4K
KwogCiBuYW1lc3BhY2UgV1RGIHsKIAorICAgIAogc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxM
b2NrbGVzc0JhZzxTaWduYWxIYW5kbGVyPj4gaGFuZGxlcnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihT
aWduYWw6Ok51bWJlck9mU2lnbmFscyldID0geyB9Owotc3RhdGljIHN0cnVjdCBzaWdhY3Rpb24g
b2xkQWN0aW9uc1tzdGF0aWNfY2FzdDxzaXplX3Q+KFNpZ25hbDo6TnVtYmVyT2ZTaWduYWxzKV07
CiBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZU9uY2VGbGFnc1tzdGF0aWNfY2FzdDxz
aXplX3Q+KFNpZ25hbDo6TnVtYmVyT2ZTaWduYWxzKV07CitzdGF0aWMgc3RydWN0IHNpZ2FjdGlv
biBvbGRBY3Rpb25zW3N0YXRpY19jYXN0PHNpemVfdD4oU2lnbmFsOjpOdW1iZXJPZlNpZ25hbHMp
XTsKKworI2lmIE9TKERBUldJTikKK3N0YXRpYyBtYWNoX3BvcnRfdCBleGNlcHRpb25Qb3J0Owor
c3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbWF4TWVzc2FnZVNpemUgPSAxICogS0I7CisKK3N0YXRp
YyB2b2lkIHN0YXJ0TWFjaEV4Y2VwdGlvbkhhbmRsZXJUaHJlYWQoKQoreworICAgIHN0YXRpYyBz
dGQ6Om9uY2VfZmxhZyBvbmNlOworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2UsIFtdIHsKKyAgICAg
ICAgaWYgKG1hY2hfcG9ydF9hbGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigpLCBNQUNIX1BPUlRfUklH
SFRfUkVDRUlWRSwgJmV4Y2VwdGlvblBvcnQpICE9IEtFUk5fU1VDQ0VTUykKKyAgICAgICAgICAg
IENSQVNIKCk7CisKKyAgICAgICAgaWYgKG1hY2hfcG9ydF9pbnNlcnRfcmlnaHQobWFjaF90YXNr
X3NlbGYoKSwgZXhjZXB0aW9uUG9ydCwgZXhjZXB0aW9uUG9ydCwgTUFDSF9NU0dfVFlQRV9NQUtF
X1NFTkQpIT0gS0VSTl9TVUNDRVNTKQorICAgICAgICAgICAgQ1JBU0goKTsKKworICAgICAgICAv
LyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIGEgZGlzcGF0Y2ggcXVldWUuCisgICAgICAgICh2b2lk
KVRocmVhZDo6Y3JlYXRlKAorICAgICAgICAgICAgIldURiBNYWNoIEV4Y2VwdGlvbiBUaHJlYWQi
LCBbXSAoKSB7CisgICAgICAgICAgICAgICAgdW5pb24gTWVzc2FnZSB7CisgICAgICAgICAgICAg
ICAgICAgIG1hY2hfbXNnX2hlYWRlcl90IGhlYWRlcjsKKyAgICAgICAgICAgICAgICAgICAgY2hh
ciBkYXRhW21heE1lc3NhZ2VTaXplXTsKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAg
ICAgIE1lc3NhZ2UgbWVzc2FnZUhlYWRlckluOworICAgICAgICAgICAgICAgIE1lc3NhZ2UgbWVz
c2FnZUhlYWRlck91dDsKKworICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAg
ICAgICAgICAgICAgIGtlcm5fcmV0dXJuX3QgbWVzc2FnZVJlc3VsdCA9IG1hY2hfbXNnKCZtZXNz
YWdlSGVhZGVySW4uaGVhZGVyLCBNQUNIX1JDVl9NU0csIDAsIG1heE1lc3NhZ2VTaXplLCBleGNl
cHRpb25Qb3J0LCBNQUNIX01TR19USU1FT1VUX05PTkUsIE1BQ0hfUE9SVF9OVUxMKTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2VSZXN1bHQgPT0gS0VSTl9TVUNDRVNTKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIW1hY2hfZXhjX3NlcnZlcigmbWVzc2FnZUhlYWRlcklu
LmhlYWRlciwgJm1lc3NhZ2VIZWFkZXJPdXQuaGVhZGVyKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDUkFTSCgpOworCisgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlUmVzdWx0
ID0gbWFjaF9tc2coJm1lc3NhZ2VIZWFkZXJPdXQuaGVhZGVyLCBNQUNIX1NFTkRfTVNHLCBtZXNz
YWdlSGVhZGVyT3V0LmhlYWRlci5tc2doX3NpemUsIDAsIG1lc3NhZ2VIZWFkZXJPdXQuaGVhZGVy
Lm1zZ2hfbG9jYWxfcG9ydCwgMCwgTUFDSF9QT1JUX05VTEwpOworICAgICAgICAgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQobWVzc2FnZVJlc3VsdCA9PSBLRVJOX1NVQ0NFU1MpOworICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dM
bigiRmFpbGVkIHRvIHJlY2VpdmUgbWFjaCBtZXNzYWdlIGR1ZSB0byAiLCBtYWNoX2Vycm9yX3N0
cmluZyhtZXNzYWdlUmVzdWx0KSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9KS5sZWFr
UmVmKCk7CisgICAgfSk7Cit9CisKK3N0YXRpYyBTaWduYWwgZnJvbU1hY2hFeGNlcHRpb24oZXhj
ZXB0aW9uX3R5cGVfdCB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgRVhD
X0JBRF9BQ0NFU1M6IHJldHVybiBTaWduYWw6OlNlZ1Y7CisgICAgY2FzZSBFWENfQkFEX0lOU1RS
VUNUSU9OOiByZXR1cm4gU2lnbmFsOjpJbGw7CisgICAgY2FzZSBFWENfQlJFQUtQT0lOVDogcmV0
dXJuIFNpZ25hbDo6VHJhcDsKKyAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisgICAgcmV0dXJu
IFNpZ25hbDo6VW5rbm93bjsKK30KKworc3RhdGljIGV4Y2VwdGlvbl9tYXNrX3QgdG9NYWNoTWFz
ayhTaWduYWwgc2lnbmFsKQoreworICAgIHN3aXRjaCAoc2lnbmFsKSB7CisgICAgY2FzZSBTaWdu
YWw6OlNlZ1Y6IHJldHVybiBFWENfTUFTS19CQURfQUNDRVNTOworICAgIGNhc2UgU2lnbmFsOjpJ
bGw6IHJldHVybiBFWENfTUFTS19CQURfSU5TVFJVQ1RJT047CisgICAgY2FzZSBTaWduYWw6OlRy
YXA6IHJldHVybiBFWENfTUFTS19CUkVBS1BPSU5UOworICAgIGRlZmF1bHQ6IGJyZWFrOworICAg
IH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitleHRlcm4gIkMiIHsK
KworLy8gV2UgbmVlZCB0byBpbXBsZW1lbnQgc3R1YnMgZm9yIGNhdGNoX21hY2hfZXhjZXB0aW9u
X3JhaXNlIGFuZCBjYXRjaF9tYWNoX2V4Y2VwdGlvbl9yYWlzZV9zdGF0ZV9pZGVudGl0eS4KKy8v
IFRoZSBNaUcgZ2VuZXJhdGVkIGZpbGUgd2lsbCBmYWlsIHRvIGxpbmsgb3RoZXJ3aXNlLCBldmVu
IHRob3VnaCB3ZSBkb24ndCB1c2UgdGhlIGZ1bmN0aW9ucy4gT25seSB0aGUKKy8vIGNhdGNoX21h
Y2hfZXhjZXB0aW9uX3JhaXNlX3N0YXRlIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgYmVjYXVz
ZSB3ZSBwYXNzIEVYQ0VQVElPTl9TVEFURSB0bworLy8gdGhyZWFkX3NldF9leGNlcHRpb25fcG9y
dHMuCitrZXJuX3JldHVybl90IGNhdGNoX21hY2hfZXhjZXB0aW9uX3JhaXNlKG1hY2hfcG9ydF90
LCBtYWNoX3BvcnRfdCwgbWFjaF9wb3J0X3QsIGV4Y2VwdGlvbl90eXBlX3QsIG1hY2hfZXhjZXB0
aW9uX2RhdGFfdCwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCkKK3sKKyAgICBkYXRhTG9nTG4oIldl
IHNob3VsZCBub3QgaGF2ZSBjYWxsZWQgY2F0Y2hfZXhjZXB0aW9uX3JhaXNlKCksIHBsZWFzZSBm
aWxlIGEgYnVnIGF0IGJ1Z3Mud2Via2l0Lm9yZyIpOworICAgIHJldHVybiBLRVJOX0ZBSUxVUkU7
Cit9CisKK2tlcm5fcmV0dXJuX3QgY2F0Y2hfbWFjaF9leGNlcHRpb25fcmFpc2Vfc3RhdGVfaWRl
bnRpdHkobWFjaF9wb3J0X3QsIG1hY2hfcG9ydF90LCBtYWNoX3BvcnRfdCwgZXhjZXB0aW9uX3R5
cGVfdCwgbWFjaF9leGNlcHRpb25fZGF0YV90LCBtYWNoX21zZ190eXBlX251bWJlcl90LCBpbnQq
LCB0aHJlYWRfc3RhdGVfdCwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCwgdGhyZWFkX3N0YXRlX3Qs
ICBtYWNoX21zZ190eXBlX251bWJlcl90KikKK3sKKyAgICBkYXRhTG9nTG4oIldlIHNob3VsZCBu
b3QgaGF2ZSBjYWxsZWQgY2F0Y2hfbWFjaF9leGNlcHRpb25fcmFpc2Vfc3RhdGVfaWRlbnRpdHks
IHBsZWFzZSBmaWxlIGEgYnVnIGF0IGJ1Z3Mud2Via2l0Lm9yZyIpOworICAgIHJldHVybiBLRVJO
X0ZBSUxVUkU7Cit9CisKK2tlcm5fcmV0dXJuX3QgY2F0Y2hfbWFjaF9leGNlcHRpb25fcmFpc2Vf
c3RhdGUoCisgICAgbWFjaF9wb3J0X3QgcG9ydCwKKyAgICBleGNlcHRpb25fdHlwZV90IGV4Y2Vw
dGlvblR5cGUsCisgICAgY29uc3QgbWFjaF9leGNlcHRpb25fZGF0YV90IGV4Y2VwdGlvbkRhdGEs
CisgICAgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCBkYXRhQ291bnQsCisgICAgaW50KiBzdGF0ZUZs
YXZvciwKKyAgICBjb25zdCB0aHJlYWRfc3RhdGVfdCBpblN0YXRlLAorICAgIG1hY2hfbXNnX3R5
cGVfbnVtYmVyX3QgaW5TdGF0ZUNvdW50LAorICAgIHRocmVhZF9zdGF0ZV90IG91dFN0YXRlLAor
ICAgIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QqIG91dFN0YXRlQ291bnQpCit7CisgICAgUkVMRUFT
RV9BU1NFUlQocG9ydCA9PSBleGNlcHRpb25Qb3J0KTsKKyAgICBTaWduYWwgc2lnbmFsID0gZnJv
bU1hY2hFeGNlcHRpb24oZXhjZXB0aW9uVHlwZSk7CisgICAgZGF0YUxvZ0xuKCJyZWNlaXZlZFNp
Z25hbCAiLCBleGNlcHRpb25UeXBlKTsKKyAgICBkYXRhTG9nTG4oIlRocmVhZDogIiwgZXhjZXB0
aW9uRGF0YVswXSk7CisgICAgUkVMRUFTRV9BU1NFUlQoc2lnbmFsICE9IFNpZ25hbDo6VW5rbm93
bik7CisKKyAgICBtZW1jcHkob3V0U3RhdGUsIGluU3RhdGUsIGluU3RhdGVDb3VudCAqIHNpemVv
ZihpblN0YXRlWzBdKSk7CisgICAgKm91dFN0YXRlQ291bnQgPSBpblN0YXRlQ291bnQ7CisKKyNp
ZiBDUFUoWDg2XzY0KQorICAgIFJFTEVBU0VfQVNTRVJUKCpzdGF0ZUZsYXZvciA9PSB4ODZfVEhS
RUFEX1NUQVRFKTsKKyAgICBQbGF0Zm9ybVJlZ2lzdGVycyYgcmVnaXN0ZXJzID0gcmVpbnRlcnBy
ZXRfY2FzdDx4ODZfdGhyZWFkX3N0YXRlX3QqPihvdXRTdGF0ZSktPnV0cy50czY0OworI2VsaWYg
Q1BVKEFSTTY0KQorICAgIFJFTEVBU0VfQVNTRVJUKCpzdGF0ZUZsYXZvciA9PSBBUk1fVEhSRUFE
X1NUQVRFKTsKKyAgICBQbGF0Zm9ybVJlZ2lzdGVycyYgcmVnaXN0ZXJzID0gcmVpbnRlcnByZXRf
Y2FzdDxhcm1fdW5pZmllZF90aHJlYWRfc3RhdGUqPihvdXRTdGF0ZSktPnRzXzY0OworI2VuZGlm
CisKKyAgICBTaWdJbmZvIGluZm87CisgICAgaWYgKHNpZ25hbCA9PSBTaWduYWw6OlNlZ1YpIHsK
KyAgICAgICAgQVNTRVJUX1VOVVNFRChkYXRhQ291bnQsIGRhdGFDb3VudCA9PSAyKTsKKyAgICAg
ICAgaW5mby5mYXVsdGluZ0FkZHJlc3MgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihleGNlcHRp
b25EYXRhWzFdKTsKKyAgICB9CisKKyAgICBib29sIGRpZEhhbmRsZSA9IGZhbHNlOworICAgIGhh
bmRsZXJzW3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0tPml0ZXJhdGUoWyZdIChjb25zdCBT
aWduYWxIYW5kbGVyJiBoYW5kbGVyKSB7CisgICAgICAgIFNpZ25hbEFjdGlvbiBoYW5kbGVyUmVz
dWx0ID0gaGFuZGxlcihzaWduYWwsIGluZm8sIHJlZ2lzdGVycyk7CisgICAgICAgIGRhdGFMb2dM
bihzdGF0aWNfY2FzdDxpbnQ+KGhhbmRsZXJSZXN1bHQpKTsKKyAgICAgICAgc3dpdGNoIChoYW5k
bGVyUmVzdWx0KSB7CisgICAgICAgIGNhc2UgU2lnbmFsQWN0aW9uOjpIYW5kbGVkOgorICAgICAg
ICAgICAgZGlkSGFuZGxlID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIGlmIChk
aWRIYW5kbGUpCisgICAgICAgIHJldHVybiBLRVJOX1NVQ0NFU1M7CisgICAgcmV0dXJuIEtFUk5f
RkFJTFVSRTsKK30KKworfTsKKworI2VuZGlmIC8vIE9TKERBUldJTikKKworc3RhdGljIFN0YXRp
Y0xvY2sgdGhyZWFkTG9jazsKK2V4Y2VwdGlvbl9tYXNrX3QgYWN0aXZlRXhjZXB0aW9ucyB7IDAg
fTsKIAotc3RhdGljIHZvaWQganNjU2lnbmFsSGFuZGxlcihpbnQgc2lnLCBzaWdpbmZvX3QqIGlu
Zm8sIHZvaWQqIG1jb250ZXh0KQoraW5saW5lIHZvaWQgc2V0RXhjZXB0aW9uUG9ydHMoY29uc3Qg
QWJzdHJhY3RMb2NrZXImLCBUaHJlYWQqIHRocmVhZCkKK3sKKyAgICBrZXJuX3JldHVybl90IHJl
c3VsdCA9IHRocmVhZF9zZXRfZXhjZXB0aW9uX3BvcnRzKHRocmVhZC0+bWFjaFRocmVhZCgpLCBh
Y3RpdmVFeGNlcHRpb25zLCBleGNlcHRpb25Qb3J0LCBFWENFUFRJT05fU1RBVEUgfCBNQUNIX0VY
Q0VQVElPTl9DT0RFUywgTUFDSElORV9USFJFQURfU1RBVEUpOworICAgIGlmIChyZXN1bHQgIT0g
S0VSTl9TVUNDRVNTKSB7CisgICAgICAgIGRhdGFMb2dMbigidGhyZWFkIHNldCBwb3J0IGZhaWxl
ZCBkdWUgdG8gIiwgbWFjaF9lcnJvcl9zdHJpbmcocmVzdWx0KSk7CisgICAgICAgIENSQVNIKCk7
CisgICAgfQorfQorCitpbmxpbmUgSGFzaFNldDxUaHJlYWQqPiYgYWN0aXZlVGhyZWFkcyhjb25z
dCBBYnN0cmFjdExvY2tlciYpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8
VGhyZWFkKj4+IGFjdGl2ZVRocmVhZHM7CisgICAgcmV0dXJuIGFjdGl2ZVRocmVhZHM7Cit9CisK
K3ZvaWQgcmVnaXN0ZXJUaHJlYWQoVGhyZWFkKiB0aHJlYWQpCit7CisgICAgYXV0byBsb2NrZXIg
PSBob2xkTG9jayh0aHJlYWRMb2NrKTsKKyAgICBhdXRvIHJlc3VsdCA9IGFjdGl2ZVRocmVhZHMo
bG9ja2VyKS5hZGQodGhyZWFkKTsKKworICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAg
ICAgc2V0RXhjZXB0aW9uUG9ydHMobG9ja2VyLCB0aHJlYWQpOworfQorCit2b2lkIHJlbW92ZVRo
cmVhZChUaHJlYWQqIHRocmVhZCkKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHRocmVh
ZExvY2spOworICAgIGFjdGl2ZVRocmVhZHMobG9ja2VyKS5yZW1vdmUodGhyZWFkKTsKK30KKwor
c3RhdGljIGJvb2wgdXNlTWFjaCB7IGZhbHNlIH07Cit2b2lkIGhhbmRsZVNpZ25hbHNXaXRoTWFj
aCgpCit7CisjaWYgT1MoREFSV0lOKQorICAgIGRlbGl2ZXJNZXNzYWdlc1VzaW5nTWFjaCgpOwor
ICAgIHVzZU1hY2ggPSB0cnVlOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIGpzY1NpZ25hbEhh
bmRsZXIoaW50LCBzaWdpbmZvX3QqLCB2b2lkKik7CisKK3ZvaWQgaW5zdGFsbFNpZ25hbEhhbmRs
ZXIoU2lnbmFsIHNpZ25hbCwgU2lnbmFsSGFuZGxlciYmIGhhbmRsZXIpCit7CisgICAgQVNTRVJU
KHNpZ25hbCA8IFNpZ25hbDo6VW5rbm93bik7CisgICAgaWYgKHNpZ25hbCA9PSBTaWduYWw6OkJ1
cyAmJiAhdXNlTWFjaCkKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVCghdXNlTWFjaCB8fCBz
aWduYWwgIT0gU2lnbmFsOjpVc3IpOworCisjaWYgT1MoREFSV0lOKQorICAgIGlmICh1c2VNYWNo
KQorICAgICAgICBzdGFydE1hY2hFeGNlcHRpb25IYW5kbGVyVGhyZWFkKCk7CisjZW5kaWYKKwor
ICAgIHN0ZDo6Y2FsbF9vbmNlKGluaXRpYWxpemVPbmNlRmxhZ3Nbc3RhdGljX2Nhc3Q8c2l6ZV90
PihzaWduYWwpXSwgWyZdIHsKKyAgICAgICAgaGFuZGxlcnNbc3RhdGljX2Nhc3Q8c2l6ZV90Pihz
aWduYWwpXS5jb25zdHJ1Y3QoKTsKKworICAgICAgICBpZiAoIXVzZU1hY2gpIHsKKyAgICAgICAg
ICAgIHN0cnVjdCBzaWdhY3Rpb24gYWN0aW9uOworICAgICAgICAgICAgYWN0aW9uLnNhX3NpZ2Fj
dGlvbiA9IGpzY1NpZ25hbEhhbmRsZXI7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHNpZ2Zp
bGxzZXQoJmFjdGlvbi5zYV9tYXNrKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFyZXN1
bHQpOworICAgICAgICAgICAgYWN0aW9uLnNhX2ZsYWdzID0gU0FfU0lHSU5GTzsKKyAgICAgICAg
ICAgIHJlc3VsdCA9IHNpZ2FjdGlvbih0b1N5c3RlbVNpZ25hbChzaWduYWwpLCAmYWN0aW9uLCAm
b2xkQWN0aW9uc1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNpZ25hbCldKTsKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFyZXN1bHQpOworICAgICAgICB9CisKKyAgICB9KTsKKworICAgIGhhbmRs
ZXJzW3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0tPmFkZChXVEZNb3ZlKGhhbmRsZXIpKTsK
KworI2lmIE9TKERBUldJTikKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHRocmVhZExvY2sp
OworICAgIGlmICh1c2VNYWNoKSB7CisgICAgICAgIGFjdGl2ZUV4Y2VwdGlvbnMgfD0gdG9NYWNo
TWFzayhzaWduYWwpOworCisgICAgICAgIGZvciAoVGhyZWFkKiB0aHJlYWQgOiBhY3RpdmVUaHJl
YWRzKGxvY2tlcikpCisgICAgICAgICAgICBzZXRFeGNlcHRpb25Qb3J0cyhsb2NrZXIsIHRocmVh
ZCk7CisgICAgfQorI2VuZGlmCit9CisKK3ZvaWQganNjU2lnbmFsSGFuZGxlcihpbnQgc2lnLCBz
aWdpbmZvX3QqIGluZm8sIHZvaWQqIG1jb250ZXh0KQogewogICAgIFNpZ25hbCBzaWduYWwgPSBm
cm9tU3lzdGVtU2lnbmFsKHNpZyk7CiAKQEAgLTYyLDEwICsyOTQsMTYgQEAgc3RhdGljIHZvaWQg
anNjU2lnbmFsSGFuZGxlcihpbnQgc2lnLCBzaWdpbmZvX3QqIGluZm8sIHZvaWQqIG1jb250ZXh0
KQogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgU2lnSW5mbyBzaWdJbmZvOworICAgIGlm
IChzaWduYWwgPT0gU2lnbmFsOjpTZWdWIHx8IHNpZ25hbCA9PSBTaWduYWw6OkJ1cykKKyAgICAg
ICAgc2lnSW5mby5mYXVsdGluZ0FkZHJlc3MgPSBpbmZvLT5zaV9hZGRyOworCisgICAgUGxhdGZv
cm1SZWdpc3RlcnMmIHJlZ2lzdGVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8bWNvbnRleHRfdD4obWNv
bnRleHQpLT5fX3NzOworCiAgICAgYm9vbCBkaWRIYW5kbGUgPSBmYWxzZTsKICAgICBib29sIHJl
c3RvcmVEZWZhdWx0SGFuZGxlciA9IGZhbHNlOwogICAgIGhhbmRsZXJzW3N0YXRpY19jYXN0PHNp
emVfdD4oc2lnbmFsKV0tPml0ZXJhdGUoWyZdIChjb25zdCBTaWduYWxIYW5kbGVyJiBoYW5kbGVy
KSB7Ci0gICAgICAgIHN3aXRjaCAoaGFuZGxlcihzaWcsIGluZm8sIG1jb250ZXh0KSkgeworICAg
ICAgICBzd2l0Y2ggKGhhbmRsZXIoc2lnbmFsLCBzaWdJbmZvLCByZWdpc3RlcnMpKSB7CiAgICAg
ICAgIGNhc2UgU2lnbmFsQWN0aW9uOjpIYW5kbGVkOgogICAgICAgICAgICAgZGlkSGFuZGxlID0g
dHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTAwLDI0ICszMzgsNiBAQCBzdGF0aWMgdm9p
ZCBqc2NTaWduYWxIYW5kbGVyKGludCBzaWcsIHNpZ2luZm9fdCogaW5mbywgdm9pZCogbWNvbnRl
eHQpCiAgICAgfQogfQogCi12b2lkIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbCBzaWduYWws
IFNpZ25hbEhhbmRsZXImJiBoYW5kbGVyKQotewotICAgIEFTU0VSVChzaWduYWwgPCBTaWduYWw6
OlVua25vd24pOwotICAgIHN0ZDo6Y2FsbF9vbmNlKGluaXRpYWxpemVPbmNlRmxhZ3Nbc3RhdGlj
X2Nhc3Q8c2l6ZV90PihzaWduYWwpXSwgWyZdIHsKLSAgICAgICAgaGFuZGxlcnNbc3RhdGljX2Nh
c3Q8c2l6ZV90PihzaWduYWwpXS5jb25zdHJ1Y3QoKTsKLQotICAgICAgICBzdHJ1Y3Qgc2lnYWN0
aW9uIGFjdGlvbjsKLSAgICAgICAgYWN0aW9uLnNhX3NpZ2FjdGlvbiA9IGpzY1NpZ25hbEhhbmRs
ZXI7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gc2lnZmlsbHNldCgmYWN0aW9uLnNhX21hc2spOwot
ICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmVzdWx0KTsKLSAgICAgICAgYWN0aW9uLnNhX2ZsYWdz
ID0gU0FfU0lHSU5GTzsKLSAgICAgICAgcmVzdWx0ID0gc2lnYWN0aW9uKHRvU3lzdGVtU2lnbmFs
KHNpZ25hbCksICZhY3Rpb24sICZvbGRBY3Rpb25zW3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFs
KV0pOwotICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmVzdWx0KTsKLSAgICB9KTsKLQotICAgIGhh
bmRsZXJzW3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0tPmFkZChXVEZNb3ZlKGhhbmRsZXIp
KTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV1RGCiAKICNlbmRpZiAvLyBVU0UoUFRIUkVBRFMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90aHJlYWRzL1NpZ25hbHMuaCBiL1NvdXJjZS9XVEYv
d3RmL3RocmVhZHMvU2lnbmFscy5oCmluZGV4IDFlNGViNDZlYWE3NzRhMWVlODlmNmZiMmRhZWYz
MzI2OGNlNTY3NzkuLjgxYWIwMDQyNmQxMGZjZmQyZDJkNTJiMzdiNWIxNzVjNTY2YWI4YTIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RocmVhZHMvU2lnbmFscy5oCisrKyBiL1NvdXJjZS9X
VEYvd3RmL3RocmVhZHMvU2lnbmFscy5oCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlIDxz
aWduYWwuaD4KICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKyNpbmNsdWRlIDx3dGYvUGxhdGZv
cm1SZWdpc3RlcnMuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKQEAgLTc5LDcgKzgwLDExIEBAIGVu
dW0gY2xhc3MgU2lnbmFsQWN0aW9uIHsKICAgICBGb3JjZURlZmF1bHQKIH07CiAKLXVzaW5nIFNp
Z25hbEhhbmRsZXIgPSBGdW5jdGlvbjxTaWduYWxBY3Rpb24oaW50LCBzaWdpbmZvX3QqLCB2b2lk
Kik+Oworc3RydWN0IFNpZ0luZm8geworICAgIHZvaWQqIGZhdWx0aW5nQWRkcmVzcyB7IDAgfTsK
K307CisKK3VzaW5nIFNpZ25hbEhhbmRsZXIgPSBGdW5jdGlvbjxTaWduYWxBY3Rpb24oU2lnbmFs
LCBTaWdJbmZvJiwgUGxhdGZvcm1SZWdpc3RlcnMmKT47CiAKIC8vIENhbGwgdGhpcyBtZXRob2Qg
d2hlbmV2ZXIgeW91IHdhbnQgdG8gaW5zdGFsbCBhIHNpZ25hbCBoYW5kbGVyLiBJdCdzIG9rIHRv
IGNhbGwgdGhpcyBmdW5jdGlvbiBsYXppbHkuCiAvLyBOb3RlOiBZb3VyIHNpZ25hbCBoYW5kbGVy
IHdpbGwgYmUgY2FsbGVkIGV2ZXJ5IHRpbWUgdGhlIGhhbmRsZXIgZm9yIHRoZSBkZXNpcmVkIHNp
Z25hbCBpcyBjYWxsZWQuCkBAIC04Nyw5ICs5MiwxOSBAQCB1c2luZyBTaWduYWxIYW5kbGVyID0g
RnVuY3Rpb248U2lnbmFsQWN0aW9uKGludCwgc2lnaW5mb190Kiwgdm9pZCopPjsKIC8vIFRoaXMg
ZnVuY3Rpb24gaXMgY3VycmVudGx5IGEgb25lIHdheSBzdHJlZXQgaS5lLiBvbmNlIGluc3RhbGxl
ZCwgYSBzaWduYWwgaGFuZGxlciBjYW5ub3QgYmUgdW5pbnN0YWxsZWQuCiB2b2lkIGluc3RhbGxT
aWduYWxIYW5kbGVyKFNpZ25hbCwgU2lnbmFsSGFuZGxlciYmKTsKIAorCisjaWYgT1MoREFSV0lO
KQorY2xhc3MgVGhyZWFkOwordm9pZCByZWdpc3RlclRocmVhZChUaHJlYWQqKTsKK3ZvaWQgcmVt
b3ZlVGhyZWFkKFRocmVhZCopOworCit2b2lkIGhhbmRsZVNpZ25hbHNXaXRoTWFjaCgpOworI2Vu
ZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6OlNpZ25hbDsKK3VzaW5nIFdU
Rjo6U2lnSW5mbzsKIHVzaW5nIFdURjo6dG9TeXN0ZW1TaWduYWw7CiB1c2luZyBXVEY6OmZyb21T
eXN0ZW1TaWduYWw7CiB1c2luZyBXVEY6OlNpZ25hbEFjdGlvbjsKZGlmZiAtLWdpdCBhL1Rvb2xz
L0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAxN2Y5ZjAxMTEzMTAyYThhNGIxN2Zj
ZTRhZjFkOTVlYjg2MDA2OWRiLi42Y2RhNDg0MTA2NWNlMDRhOTFiOGRiNWUyYjIwMjhjNDBlYzA1
YTZmIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTQgQEAKKzIwMTctMDUtMTEgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBh
cHBsZS5jb20+CisKKyAgICAgICAgVXNlIE1hY2ggZXhjZXB0aW9ucyBpbnN0ZWFkIG9mIHNpZ25h
bHMgd2hlcmUgcG9zc2libGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3MTg2NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVGhyZWFkTWVzc2FnZXMuY3BwOgor
ICAgICAgICAocnVuVGhyZWFkTWVzc2FnZVRlc3QpOgorICAgICAgICAoVEVTVCk6CisKIDIwMTct
MDUtMDkgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZW1vdmUgc3Vw
cG9ydCBmb3IgbGVnYWN5IE5vdGlmaWNhdGlvbnMKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV1RGL1RocmVhZE1lc3NhZ2VzLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV1RGL1RocmVhZE1lc3NhZ2VzLmNwcAppbmRleCBkNjNlOWJmMWU3NTA2OGI2YzFhN2U3
ZTZlOGI2N2M0ZWIwNTE1ODgyLi5lNmE1Nzg5NGJiNTE2ZmUxY2U3MTNkMDdiZjE4ZjA3MDZlZmE5
MzdjIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9UaHJlYWRNZXNz
YWdlcy5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVGhyZWFkTWVzc2Fn
ZXMuY3BwCkBAIC01MCw3ICs1MCw3IEBAIHN0YXRpYyB2b2lkIHJ1blRocmVhZE1lc3NhZ2VUZXN0
KHVuc2lnbmVkIG51bVNlbmRlcnMsIHVuc2lnbmVkIG51bU1lc3NhZ2VzKQogICAgIGZvciAodW5z
aWduZWQgc2VuZGVySUQgPSAwOyBzZW5kZXJJRCA8IG51bVNlbmRlcnM7ICsrc2VuZGVySUQpIHsK
ICAgICAgICAgc2VuZGVyVGhyZWFkc1tzZW5kZXJJRF0gPSBUaHJlYWQ6OmNyZWF0ZSgiVGhyZWFk
TWVzc2FnZSBzZW5kZXIiLCBbc2VuZGVySUQsIG51bU1lc3NhZ2VzLCByZWNlaXZlclRocmVhZCwg
Jm1lc3NhZ2VzUnVuLCAmaGFuZGxlcnNSdW5dICgpIHsKICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBudW1NZXNzYWdlczsgKytpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBy
ZXN1bHQgPSBzZW5kTWVzc2FnZSgqcmVjZWl2ZXJUaHJlYWQuZ2V0KCksIFtzZW5kZXJJRCwgJmhh
bmRsZXJzUnVuXSAoc2lnaW5mb190KiwgdWNvbnRleHRfdCopIHsKKyAgICAgICAgICAgICAgICBh
dXRvIHJlc3VsdCA9IHNlbmRNZXNzYWdlKCpyZWNlaXZlclRocmVhZC5nZXQoKSwgW3NlbmRlcklE
LCAmaGFuZGxlcnNSdW5dIChQbGF0Zm9ybVJlZ2lzdGVycyYpIHsKICAgICAgICAgICAgICAgICAg
ICAgaGFuZGxlcnNSdW5bc2VuZGVySURdKys7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAg
ICAgICAgICAgRVhQRUNUX1RSVUUocmVzdWx0ID09IFdURjo6TWVzc2FnZVN0YXR1czo6TWVzc2Fn
ZVJhbik7CkBAIC05NSw3ICs5NSw3IEBAIHB1YmxpYzoKIFRFU1QoVGhyZWFkTWVzc2FnZSwgU2ln
bmFsc1dvcmtPbkV4aXQpCiB7CiAgICAgc3RhdGljIGJvb2wgaGFuZGxlclJhbiA9IGZhbHNlOwot
ICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbDo6VXNyLCBbXSAoaW50LCBzaWdpbmZvX3Qq
LCB2b2lkKikgLT4gU2lnbmFsQWN0aW9uIHsKKyAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWdu
YWw6OlVzciwgW10gKFNpZ25hbCwgU2lnSW5mbyYsIFBsYXRmb3JtUmVnaXN0ZXJzJikgLT4gU2ln
bmFsQWN0aW9uIHsKICAgICAgICAgZGF0YUxvZ0xuKCJoZXJlIik7CiAgICAgICAgIGhhbmRsZXJS
YW4gPSB0cnVlOwogICAgICAgICByZXR1cm4gU2lnbmFsQWN0aW9uOjpIYW5kbGVkOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309726</attachid>
            <date>2017-05-11 10:52:08 -0700</date>
            <delta_ts>2017-05-11 11:28:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171865-20170511105207.patch</filename>
            <type>text/plain</type>
            <size>46895</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE2Njc3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
YzIyOWE0ZjkxMDMxZGZlOTU1YTQxMGIyMDI0Njc2ZTFmM2NkZWIxLi5lNzZkODk3ZjUzNjc3ZWI3
NTBiMjM0YTUxNGFmMzQ1YjI3OTI4YjEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MCBAQAorMjAxNy0wNS0xMSAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBVc2UgTWFjaCBleGNlcHRpb25zIGluc3RlYWQgb2Ygc2lnbmFscyB3
aGVyZSBwb3NzaWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTcxODY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhpcyBwYXRjaCBhZGRzIHNvbWUgbmV3IEpTQyBvcHRpb25zLiBUaGUgZmlyc3QgaXMg
YW4gb3B0aW9uIHRoYXQKKyAgICAgICAgZW5hYmxlcyBvciBkaXNhYmxlcyB3ZWIgYXNzZW1ibHkg
dGllciB1cC4gVGhlIHNlY29uZCBjb250cm9scworICAgICAgICB3aGV0aGVyIG9yIG5vdCB3ZSB1
c2UgbWFjaCBleGNlcHRpb25zICh3aGVyZSBhdmFpbGFibGUpLgorCisgICAgICAgICogQVBJL3Rl
c3RzL0V4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwOgorICAgICAgICAoZGlzcGF0Y2hUZXJtaXRh
dGVDYWxsYmFjayk6CisgICAgICAgICh0ZXN0RXhlY3V0aW9uVGltZUxpbWl0KToKKyAgICAgICAg
KiBydW50aW1lL0pTTG9jay5jcHA6CisgICAgICAgIChKU0M6OkpTTG9jazo6ZGlkQWNxdWlyZUxv
Y2spOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OnJlY29t
cHV0ZURlcGVuZGVudE9wdGlvbnMpOgorICAgICAgICAoSlNDOjpPcHRpb25zOjppbml0aWFsaXpl
KToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKyAgICAgICAgKiBydW50aW1lL1ZNVHJh
cHMuY3BwOgorICAgICAgICAoSlNDOjpTaWduYWxDb250ZXh0OjpTaWduYWxDb250ZXh0KToKKyAg
ICAgICAgKEpTQzo6U2lnbmFsQ29udGV4dDo6YWRqdXN0UENUb1BvaW50VG9UcmFwcGluZ0luc3Ry
dWN0aW9uKToKKyAgICAgICAgKEpTQzo6aW5zdGFsbFNpZ25hbEhhbmRsZXIpOgorICAgICAgICAo
SlNDOjpWTVRyYXBzOjpTaWduYWxTZW5kZXI6OnNlbmQpOgorICAgICAgICAqIHRvb2xzL1NpZ2ls
bENyYXNoQW5hbHl6ZXIuY3BwOgorICAgICAgICAoSlNDOjpTaWduYWxDb250ZXh0OjpTaWduYWxD
b250ZXh0KToKKyAgICAgICAgKEpTQzo6U2lnbmFsQ29udGV4dDo6ZHVtcCk6CisgICAgICAgIChK
U0M6Omluc3RhbGxDcmFzaEhhbmRsZXIpOgorICAgICAgICAqIHdhc20vV2FzbUJCUVBsYW4uY3Bw
OgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKToKKyAgICAg
ICAgKiB3YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwOgorICAgICAgICAoSlNDOjpXYXNt
Ojp0cmFwSGFuZGxlcik6CisgICAgICAgIChKU0M6Oldhc206OmVuYWJsZUZhc3RNZW1vcnkpOgor
ICAgICAgICAqIHdhc20vV2FzbU1hY2hpbmVUaHJlYWRzLmNwcDoKKyAgICAgICAgKEpTQzo6V2Fz
bTo6cmVzZXRJbnN0cnVjdGlvbkNhY2hlT25BbGxUaHJlYWRzKToKKwogMjAxNy0wNS0xMSAgTWFy
ayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgV29ya2VyVGhyZWFkOjpzdG9w
KCkgc2hvdWxkIGNhbGwgc2NoZWR1bGVFeGVjdXRpb25UZXJtaW5hdGlvbigpIGxhc3QuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4
IGVjZGRiMzNmYmVkNTIxMTFiYzA3MTk1ZDZjMDhmZTQwNmIyYzFhMzUuLjlkMGY4MzYzOTRmM2Q5
NjY1ZTU2MjBjNzkxMjdlYmEyYTI3YjUyOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTMgQEAKKzIwMTctMDUt
MTEgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CisKKyAgICAgICAgVXNl
IE1hY2ggZXhjZXB0aW9ucyBpbnN0ZWFkIG9mIHNpZ25hbHMgd2hlcmUgcG9zc2libGUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MTg2NQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZW5h
YmxlcyB1c2luZyBtYWNoIGV4Y2VwdGlvbnMgb24gZGFyd2luLiBUaGUgd2F5IHRoZQorICAgICAg
ICBtYWNoIGV4Y2VwdGlvbiBhcGkgd29ya3MgaXMgdGhhdCB3ZSBjcmVhdGUgYSBtYWNoIHBvcnQs
IHdoaWNoIGlzCisgICAgICAgIGxpa2UgYSBmaWxlIGRlc2NyaXB0b3IuICBXZSB0aGVuIHdhaXQg
Zm9yIGEgbWVzc2FnZSB0byBhcnJpdmUgb24KKyAgICAgICAgdGhhdCBwb3J0IGluIGEgdGhyZWFk
LiBXaGVuIGFub3RoZXIgdGhyZWFkIHJhaXNlcyBhIGV4Y2VwdGlvbiAoc2F5CisgICAgICAgIGR1
ZSB0byBhIGJhZCBtZW1vcnkgYWNjZXNzKSB0aGUgT1Mgc2VuZHMgb3VyIHRocmVhZCBhIG1lc3Nh
Z2UuIFRoZQorICAgICAgICBwYXlsb2FkIG9mIHRoYXQgbWVzc2FnZSBpcyB0aGUgcmVnaXN0ZXIg
ZmlsZSBvZiB0aGUgY3Jhc2hpbmcKKyAgICAgICAgdGhyZWFkLiBXZSB0aGVuIGNhbGwgb3VyIGN1
c3RvbSBoYW5kbGVycyB0aGF0IGNoYW5nZSB0aGUgc3RhdGUgYXMKKyAgICAgICAgbmVlZGVkLiBJ
biBvcmRlciB0byByZXN0YXJ0IHRoZSB0aHJlYWQgd2Ugc2VuZCBhIHBheWxvYWQgYmFjayB0bwor
ICAgICAgICB0aGUgT1Mgd2l0aCBhbiB1cGRhdGVkIHJlZ2lzdGVyIGZpbGUgYWxvbmcgd2l0aCBh
IHN1Y2Nlc3MgbWVzc2FnZQorICAgICAgICBoZWFkZXIuCisKKyAgICAgICAgVGhpcyBwYXRjaCBh
bHNvIG1ha2VzIHRocmVhZCBtZXNzYWdlcyB3b3JrIHdpdGhvdXQgc2lnbmFscyBieQorICAgICAg
ICBzaW1wbHkgc3VzcGVuZGluZyB0aGUgdGhyZWFkIHRoZW4gcnVubmluZyB0aGUgbWVzc2FnZSBh
dCB0aGF0CisgICAgICAgIHRpbWUuCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiB3dGYvU3RhY2tCb3VuZHMuaDoKKyAgICAgICAgKFdURjo6U3Rh
Y2tCb3VuZHM6OlN0YWNrQm91bmRzKToKKyAgICAgICAgKiB3dGYvVGhyZWFkSG9sZGVyLmNwcDoK
KyAgICAgICAgKFdURjo6VGhyZWFkSG9sZGVyOjp+VGhyZWFkSG9sZGVyKToKKyAgICAgICAgKiB3
dGYvVGhyZWFkTWVzc2FnZS5jcHA6CisgICAgICAgIChXVEY6OnNlbmRNZXNzYWdlU2lnbmFsKToK
KyAgICAgICAgKFdURjo6c2VuZE1lc3NhZ2VNYWNoKToKKyAgICAgICAgKFdURjo6ZGVsaXZlck1l
c3NhZ2VzVXNpbmdNYWNoKToKKyAgICAgICAgKFdURjo6c2VuZE1lc3NhZ2VTY29wZWQpOgorICAg
ICAgICAqIHd0Zi9UaHJlYWRNZXNzYWdlLmg6CisgICAgICAgIChXVEY6OnNlbmRNZXNzYWdlKToK
KyAgICAgICAgKiB3dGYvVGhyZWFkaW5nLmg6CisgICAgICAgIChXVEY6OlRocmVhZDo6bWFjaFRo
cmVhZCk6CisgICAgICAgICogd3RmL21hYy9NYWNoRXhjZXB0aW9ucy5kZWZzOiBDb3BpZWQgZnJv
bSBTb3VyY2UvV1RGL3d0Zi9UaHJlYWRNZXNzYWdlLmguCisgICAgICAgICogd3RmL3RocmVhZHMv
U2lnbmFscy5jcHA6CisgICAgICAgIChXVEY6OnN0YXJ0TWFjaEV4Y2VwdGlvbkhhbmRsZXJUaHJl
YWQpOgorICAgICAgICAoV1RGOjpmcm9tTWFjaEV4Y2VwdGlvbik6CisgICAgICAgIChXVEY6OnRv
TWFjaE1hc2spOgorICAgICAgICAoV1RGOjpzZXRFeGNlcHRpb25Qb3J0cyk6CisgICAgICAgIChX
VEY6OmFjdGl2ZVRocmVhZHMpOgorICAgICAgICAoV1RGOjpyZWdpc3RlclRocmVhZCk6CisgICAg
ICAgIChXVEY6OnJlbW92ZVRocmVhZCk6CisgICAgICAgIChXVEY6OmhhbmRsZVNpZ25hbHNXaXRo
TWFjaCk6CisgICAgICAgIChXVEY6Omluc3RhbGxTaWduYWxIYW5kbGVyKToKKyAgICAgICAgKFdU
Rjo6anNjU2lnbmFsSGFuZGxlcik6CisgICAgICAgICogd3RmL3RocmVhZHMvU2lnbmFscy5oOgor
CiAyMDE3LTA1LTA5ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVt
b3ZlIHN1cHBvcnQgZm9yIGxlZ2FjeSBOb3RpZmljYXRpb25zCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0V4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9FeGVjdXRpb25UaW1lTGltaXRUZXN0LmNwcApp
bmRleCBkNWU1MzI0M2I3OGRmNzUxMzQyYWQ4ZDM5MGE0YjA0MTNkOWVlZjllLi43ZWFjMDczMDlk
ZGMzZjE2NDk0NTBiZDAzNzlkMmNhMThmMDE2OWFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL3Rlc3RzL0V4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5jcHAKQEAg
LTMwLDggKzMwLDEzIEBACiAjaW5jbHVkZSAiSlNDb250ZXh0UmVmUHJpdmF0ZS5oIgogI2luY2x1
ZGUgIkphdmFTY3JpcHRDb3JlLmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5oIgorCiAjaW5jbHVkZSA8
Y2hyb25vPgorI2luY2x1ZGUgPGRpc3BhdGNoL2Rpc3BhdGNoLmg+CisjaW5jbHVkZSA8d3RmL0F0
b21pY3MuaD4KKyNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL0N1cnJl
bnRUaW1lLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdCdWlsZGVyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ6OmNocm9ubzsKQEAgLTc3LDYgKzgy
LDEzIEBAIHN0YXRpYyBib29sIGV4dGVuZFRlcm1pbmF0ZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBj
dHgsIHZvaWQqKQogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIGRpc3BhdGNoVGVybWluYXRl
Q2FsbGJhY2tDYWxsZWQgPSBmYWxzZTsKK3N0YXRpYyBib29sIGRpc3BhdGNoVGVybWl0YXRlQ2Fs
bGJhY2soSlNDb250ZXh0UmVmLCB2b2lkKikKK3sKKyAgICBkaXNwYXRjaFRlcm1pbmF0ZUNhbGxi
YWNrQ2FsbGVkID0gdHJ1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogc3RydWN0IFRpZXJPcHRp
b25zIHsKICAgICBjb25zdCBjaGFyKiB0aWVyOwogICAgIHVuc2lnbmVkIHRpbWVMaW1pdEFkanVz
dG1lbnRNaWxsaXM7CkBAIC0zNjUsNiArMzc3LDYzIEBAIGludCB0ZXN0RXhlY3V0aW9uVGltZUxp
bWl0KCkKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCisgICAgICAgIC8qIFRlc3Qgc2NyaXB0
IHRpbWVvdXQgZnJvbSBkaXNwYXRjaCBxdWV1ZTogKi8KKyAgICAgICAgdGltZUxpbWl0ID0gKDEw
MCArIHRpZXJBZGp1c3RtZW50TWlsbGlzKSAvIDEwMDAuMDsKKyAgICAgICAgSlNDb250ZXh0R3Jv
dXBTZXRFeGVjdXRpb25UaW1lTGltaXQoY29udGV4dEdyb3VwLCB0aW1lTGltaXQsIGRpc3BhdGNo
VGVybWl0YXRlQ2FsbGJhY2ssIDApOworICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCB0
aW1lQWZ0ZXJXYXRjaGRvZ1Nob3VsZEhhdmVGaXJlZCA9IDMwMCArIHRpZXJBZGp1c3RtZW50TWls
bGlzOworCisgICAgICAgICAgICBTdHJpbmdCdWlsZGVyIHNjcmlwdEJ1aWxkZXI7CisgICAgICAg
ICAgICBzY3JpcHRCdWlsZGVyLmFwcGVuZExpdGVyYWwoImZ1bmN0aW9uIGZvbygpIHsgdmFyIHN0
YXJ0VGltZSA9IGN1cnJlbnRDUFVUaW1lKCk7IHdoaWxlICh0cnVlKSB7IGZvciAodmFyIGkgPSAw
OyBpIDwgMTAwMDsgaSsrKTsgaWYgKGN1cnJlbnRDUFVUaW1lKCkgLSBzdGFydFRpbWUgPiAiKTsK
KyAgICAgICAgICAgIHNjcmlwdEJ1aWxkZXIuYXBwZW5kTnVtYmVyKHRpbWVBZnRlcldhdGNoZG9n
U2hvdWxkSGF2ZUZpcmVkIC8gMTAwMC4wKTsKKyAgICAgICAgICAgIHNjcmlwdEJ1aWxkZXIuYXBw
ZW5kTGl0ZXJhbCgiKSBicmVhazsgfSB9IGZvbygpOyIpOworCisgICAgICAgICAgICBKU1N0cmlu
Z1JlZiBzY3JpcHQgPSBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhzY3JpcHRCdWlsZGVy
LnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBleGNlcHRpb24gPSBudWxs
cHRyOworICAgICAgICAgICAgZGlzcGF0Y2hUZXJtaW5hdGVDYWxsYmFja0NhbGxlZCA9IGZhbHNl
OworCisgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGRvIHRoaXMgc2luY2UgYmxvY2tzIGNhbiBv
bmx5IGNhcHR1cmUgdGhpbmdzIGFzIGNvbnN0LgorICAgICAgICAgICAgSlNHbG9iYWxDb250ZXh0
UmVmJiBjb250ZXh0UmVmID0gY29udGV4dDsKKyAgICAgICAgICAgIEpTU3RyaW5nUmVmJiBzY3Jp
cHRSZWYgPSBzY3JpcHQ7CisgICAgICAgICAgICBKU1ZhbHVlUmVmJiBleGNlcHRpb25SZWYgPSBl
eGNlcHRpb247CisKKyAgICAgICAgICAgIExvY2sgc3luY0xvY2s7CisgICAgICAgICAgICBMb2Nr
JiBzeW5jTG9ja1JlZiA9IHN5bmNMb2NrOworICAgICAgICAgICAgQ29uZGl0aW9uIHN5bmNocm9u
aXplOworICAgICAgICAgICAgQ29uZGl0aW9uJiBzeW5jaHJvbml6ZVJlZiA9IHN5bmNocm9uaXpl
OworICAgICAgICAgICAgYm9vbCBkaWRTeW5jaHJvbml6ZSA9IGZhbHNlOworICAgICAgICAgICAg
Ym9vbCYgZGlkU3luY2hyb25pemVSZWYgPSBkaWRTeW5jaHJvbml6ZTsKKworICAgICAgICAgICAg
c3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcyBzdGFydFRpbWU7CisgICAgICAgICAgICBzdGQ6OmNo
cm9ubzo6bWljcm9zZWNvbmRzIGVuZFRpbWU7CisKKyAgICAgICAgICAgIHN0ZDo6Y2hyb25vOjpt
aWNyb3NlY29uZHMmIHN0YXJ0VGltZVJlZiA9IHN0YXJ0VGltZTsKKyAgICAgICAgICAgIHN0ZDo6
Y2hyb25vOjptaWNyb3NlY29uZHMmIGVuZFRpbWVSZWYgPSBlbmRUaW1lOworCisgICAgICAgICAg
ICBkaXNwYXRjaF9ncm91cF90IGdyb3VwID0gZGlzcGF0Y2hfZ3JvdXBfY3JlYXRlKCk7CisgICAg
ICAgICAgICBkaXNwYXRjaF9ncm91cF9hc3luYyhncm91cCwgZGlzcGF0Y2hfZ2V0X2dsb2JhbF9x
dWV1ZSgwLCAwKSwgXnsKKyAgICAgICAgICAgICAgICBzdGFydFRpbWVSZWYgPSBjdXJyZW50Q1BV
VGltZSgpOworICAgICAgICAgICAgICAgIEpTRXZhbHVhdGVTY3JpcHQoY29udGV4dFJlZiwgc2Ny
aXB0UmVmLCBudWxscHRyLCBudWxscHRyLCAxLCAmZXhjZXB0aW9uUmVmKTsKKyAgICAgICAgICAg
ICAgICBlbmRUaW1lUmVmID0gY3VycmVudENQVVRpbWUoKTsKKyAgICAgICAgICAgICAgICBhdXRv
IGxvY2tlciA9IFdURjo6aG9sZExvY2soc3luY0xvY2tSZWYpOworICAgICAgICAgICAgICAgIGRp
ZFN5bmNocm9uaXplUmVmID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZVJlZi5u
b3RpZnlBbGwoKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKHN5bmNMb2NrKTsKKyAgICAgICAgICAgIHN5bmNocm9uaXplLndhaXQoc3luY0xv
Y2ssIFsmXSB7IHJldHVybiBkaWRTeW5jaHJvbml6ZTsgfSk7CisKKyAgICAgICAgICAgIGlmICgo
KGVuZFRpbWUgLSBzdGFydFRpbWUpIDwgbWlsbGlzZWNvbmRzKHRpbWVBZnRlcldhdGNoZG9nU2hv
dWxkSGF2ZUZpcmVkKSkgJiYgZGlzcGF0Y2hUZXJtaW5hdGVDYWxsYmFja0NhbGxlZCkKKyAgICAg
ICAgICAgICAgICBwcmludGYoIlBBU1M6ICVzIHNjcmlwdCBvbiBkaXNwYXRjaCBxdWV1ZSB0aW1l
ZCBvdXQgYXMgZXhwZWN0ZWQuXG4iLCB0aWVyT3B0aW9ucy50aWVyKTsKKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgIGlmICgoZW5kVGltZSAtIHN0YXJ0VGltZSkgPj0gbWlsbGlz
ZWNvbmRzKHRpbWVBZnRlcldhdGNoZG9nU2hvdWxkSGF2ZUZpcmVkKSkKKyAgICAgICAgICAgICAg
ICAgICAgcHJpbnRmKCJGQUlMOiAlcyBzY3JpcHQgb24gZGlzcGF0Y2ggcXVldWUgZGlkIG5vdCB0
aW1lIG91dCBhcyBleHBlY3RlZC5cbiIsIHRpZXJPcHRpb25zLnRpZXIpOworICAgICAgICAgICAg
ICAgIGlmICghc2hvdWxkVGVybWluYXRlQ2FsbGJhY2tXYXNDYWxsZWQpCisgICAgICAgICAgICAg
ICAgICAgIHByaW50ZigiRkFJTDogJXMgc2NyaXB0IG9uIGRpc3BhdGNoIHF1ZXVlIHRpbWVvdXQg
Y2FsbGJhY2sgd2FzIG5vdCBjYWxsZWQuXG4iLCB0aWVyT3B0aW9ucy50aWVyKTsKKyAgICAgICAg
ICAgICAgICBmYWlsZWQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKICAgICAg
ICAgSlNHbG9iYWxDb250ZXh0UmVsZWFzZShjb250ZXh0KTsKIAogICAgICAgICBPcHRpb25zOjpz
ZXRPcHRpb25zKHNhdmVkT3B0aW9uc0J1aWxkZXIudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAppbmRleCBjMTc1YWUwYzQ4
MmVkMjdiZDVmNmJkYzg3OTY4ZTc1ZDQ1YWY1MGVmLi42MTI4N2M3MzQ3MjE2ZGEzNjAxZDM1NGUy
MTRiY2I5MjhlZWVhNmRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0xvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5j
cHAKQEAgLTMwLDYgKzMwLDggQEAKICNpbmNsdWRlICJTYW1wbGluZ1Byb2ZpbGVyLmgiCiAjaW5j
bHVkZSAiV2FzbU1hY2hpbmVUaHJlYWRzLmgiCiAjaW5jbHVkZSA8dGhyZWFkPgorI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGhyZWFkcy9TaWduYWxzLmg+CiAKIG5h
bWVzcGFjZSBKU0MgewogCkBAIC0xNDgsNiArMTUwLDEwIEBAIHZvaWQgSlNMb2NrOjpkaWRBY3F1
aXJlTG9jaygpCiAgICAgV2FzbTo6c3RhcnRUcmFja2luZ0N1cnJlbnRUaHJlYWQoKTsKICNlbmRp
ZgogCisjaWYgT1MoREFSV0lOKQorICAgIFdURjo6cmVnaXN0ZXJUaHJlYWQoJlRocmVhZDo6Y3Vy
cmVudCgpKTsKKyNlbmRpZgorCiAgICAgbV92bS0+dHJhcHMoKS5ub3RpZnlHcmFiQWxsTG9ja3Mo
KTsKIAogI2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3B0aW9ucy5jcHAKaW5kZXggYjA0ZGUzNWE1MzYxNTA4NDM4NTc1YzIyN2E1MDE0
ZGQwYzUxYmFhMi4uNDMxM2UyNDRjZTkwYjEyY2MzMzQ2ZDdiNWVkM2NmNzljMDA0YWVhOCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKQEAgLTQzLDYgKzQzLDcg
QEAKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ0V4
dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRlIDx3
dGYvdGhyZWFkcy9TaWduYWxzLmg+CiAKICNpZiBQTEFURk9STShDT0NPQSkKICNpbmNsdWRlIDxj
cnRfZXh0ZXJucy5oPgpAQCAtNDg2LDYgKzQ4Nyw3IEBAIHN0YXRpYyB2b2lkIHJlY29tcHV0ZURl
cGVuZGVudE9wdGlvbnMoKQogCiAgICAgaWYgKE9wdGlvbnM6OnVzZVNpZ2lsbENyYXNoQW5hbHl6
ZXIoKSkKICAgICAgICAgZW5hYmxlU2lnaWxsQ3Jhc2hBbmFseXplcigpOworCiB9CiAKIHZvaWQg
T3B0aW9uczo6aW5pdGlhbGl6ZSgpCkBAIC01NDUsNiArNTQ3LDkgQEAgdm9pZCBPcHRpb25zOjpp
bml0aWFsaXplKCkKIAogICAgICAgICAgICAgZHVtcE9wdGlvbnNJZk5lZWRlZCgpOwogICAgICAg
ICAgICAgZW5zdXJlT3B0aW9uc0FyZUNvaGVyZW50KCk7CisKKyAgICAgICAgICAgIGlmIChPcHRp
b25zOjp1c2VNYWNoRm9yRXhjZXB0aW9ucygpKQorICAgICAgICAgICAgICAgIFdURjo6aGFuZGxl
U2lnbmFsc1dpdGhNYWNoKCk7CiAgICAgICAgIH0pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zLmgKaW5kZXggY2Y5ZGMyYjJhODI1NjhlZTA3ZGEwODg5ZTM5YjZiMmY5
ZGNkNzk3NS4uMjI3NGQxY2RlYjMzMzZlMzdhYjQ0NzNlYTQxMTZlYTMyMjllOTM3ZiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaApAQCAtNDIwLDYgKzQyMCw4IEBAIHR5
cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYodW5zaWduZWQsIHdhdGNoZG9n
LCAwLCBOb3JtYWwsICJ3YXRjaGRvZyB0aW1lb3V0ICgwID0gRGlzYWJsZWQsIE4gPSBhIHRpbWVv
dXQgcGVyaW9kIG9mIE4gbWlsbGlzZWNvbmRzKSIpIFwKICAgICB2KGJvb2wsIHVzZVBvbGxpbmdU
cmFwcywgZmFsc2UsIE5vcm1hbCwgInVzZSBwb2xsaW5nIChpbnN0ZWFkIG9mIHNpZ25hbGxpbmcp
IFZNIHRyYXBzIikgXAogICAgIFwKKyAgICB2KGJvb2wsIHVzZU1hY2hGb3JFeGNlcHRpb25zLCB0
cnVlLCBOb3JtYWwsICJVc2UgbWFjaCBleGNlcHRpb25zIHJhdGhlciB0aGFuIHNpZ25hbHMgdG8g
aGFuZGxlIGZhdWx0cyBhbmQgcGFzcyB0aHJlYWQgbWVzc2FnZXMuIChUaGlzIGRvZXMgbm90aGlu
ZyBvbiBwbGF0Zm9ybXMgd2l0aG91dCBtYWNoKSIpIFwKKyAgICBcCiAgICAgdihib29sLCB1c2VJ
Q1N0YXRzLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgXAogICAgIHYodW5zaWduZWQs
IHByb3RvdHlwZUhpdENvdW50Rm9yTExJbnRDYWNoaW5nLCAyLCBOb3JtYWwsICJOdW1iZXIgb2Yg
cHJvdG90eXBlIHByb3BlcnR5IGhpdHMgYmVmb3JlIGNhY2hpbmcgYSBwcm90b3R5cGUgaW4gdGhl
IExMSW50LiBBIGNvdW50IG9mIDAgbWVhbnMgbmV2ZXIgY2FjaGUuIikgXApAQCAtNDQzLDYgKzQ0
NSw3IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYodW5zaWduZWQs
IHdlYkFzc2VtYmx5QkJRT3B0aW1pemF0aW9uTGV2ZWwsIDEsIE5vcm1hbCwgIkIzIE9wdGltaXph
dGlvbiBsZXZlbCBmb3IgQkJRIFdlYiBBc3NlbWJseSBtb2R1bGUgY29tcGlsYXRpb25zLiIpIFwK
ICAgICB2KHVuc2lnbmVkLCB3ZWJBc3NlbWJseU9NR09wdGltaXphdGlvbkxldmVsLCBPcHRpb25z
OjpkZWZhdWx0QjNPcHRMZXZlbCgpLCBOb3JtYWwsICJCMyBPcHRpbWl6YXRpb24gbGV2ZWwgZm9y
IE9NRyBXZWIgQXNzZW1ibHkgbW9kdWxlIGNvbXBpbGF0aW9ucy4iKSBcCiAgICAgXAorICAgIHYo
Ym9vbCwgdXNlQkJRVGllclVwQ2hlY2tzLCB0cnVlLCBOb3JtYWwsICJFbmFibGVzIHRpZXIgdXAg
Y2hlY2tzIGZvciBvdXIgQkJRIGNvZGUuIikgXAogICAgIHYodW5zaWduZWQsIHdlYkFzc2VtYmx5
T01HVGllclVwQ291bnQsIDUwMDAsIE5vcm1hbCwgIlRoZSBjb3VudGRvd24gYmVmb3JlIHdlIHRp
ZXIgdXAgYSBmdW5jdGlvbiB0byBPTUcuIikgXAogICAgIHYodW5zaWduZWQsIHdlYkFzc2VtYmx5
TG9vcERlY3JlbWVudCwgMTUsIE5vcm1hbCwgIlRoZSBhbW91bnQgdGhlIHRpZXIgdXAgY291bnRk
b3duIGlzIGRlY3JlbWVudGVkIG9uIGVhY2ggbG9vcCBiYWNrZWRnZS4iKSBcCiAgICAgdih1bnNp
Z25lZCwgd2ViQXNzZW1ibHlGdW5jdGlvbkVudHJ5RGVjcmVtZW50LCAxLCBOb3JtYWwsICJUaGUg
YW1vdW50IHRoZSB0aWVyIHVwIGNvdW50ZG93biBpcyBkZWNyZW1lbnRlZCBvbiBlYWNoIGZ1bmN0
aW9uIGVudHJ5LiIpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNVHJhcHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAK
aW5kZXggMWJhYWNlNjA0NGU2NjBhOGU1NDQxZmJhZDAxOGVhOTA5MzFhNGM5MS4uMTBkNzgyYThk
YzQ5YTVlZGEwODFkNzNkNjgzZGZmZTE2ZjhjOGY0MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk1UcmFwcy5jcHAKQEAgLTUzLDExICs1MywxMSBAQCBBTFdBWVNfSU5MSU5FIFZN
JiBWTVRyYXBzOjp2bSgpIGNvbnN0CiAjaWYgRU5BQkxFKFNJR05BTF9CQVNFRF9WTV9UUkFQUykK
IAogc3RydWN0IFNpZ25hbENvbnRleHQgewotICAgIFNpZ25hbENvbnRleHQobWNvbnRleHRfdCYg
bWNvbnRleHQpCi0gICAgICAgIDogbWNvbnRleHQobWNvbnRleHQpCi0gICAgICAgICwgdHJhcFBD
KE1hY2hpbmVDb250ZXh0OjppbnN0cnVjdGlvblBvaW50ZXIobWNvbnRleHQpKQotICAgICAgICAs
IHN0YWNrUG9pbnRlcihNYWNoaW5lQ29udGV4dDo6c3RhY2tQb2ludGVyKG1jb250ZXh0KSkKLSAg
ICAgICAgLCBmcmFtZVBvaW50ZXIoTWFjaGluZUNvbnRleHQ6OmZyYW1lUG9pbnRlcihtY29udGV4
dCkpCisgICAgU2lnbmFsQ29udGV4dChQbGF0Zm9ybVJlZ2lzdGVycyYgcmVnaXN0ZXJzKQorICAg
ICAgICA6IGNvbnRleHQocmVnaXN0ZXJzKQorICAgICAgICAsIHRyYXBQQyhNYWNoaW5lQ29udGV4
dDo6aW5zdHJ1Y3Rpb25Qb2ludGVyKGNvbnRleHQpKQorICAgICAgICAsIHN0YWNrUG9pbnRlcihN
YWNoaW5lQ29udGV4dDo6c3RhY2tQb2ludGVyKGNvbnRleHQpKQorICAgICAgICAsIGZyYW1lUG9p
bnRlcihNYWNoaW5lQ29udGV4dDo6ZnJhbWVQb2ludGVyKGNvbnRleHQpKQogICAgIHsKICNpZiBD
UFUoWDg2XzY0KSB8fCBDUFUoWDg2KQogICAgICAgICAvLyBPbiBYODZfNjQsIFNJR1RSQVAgcmVw
b3J0cyB0aGUgYWRkcmVzcyBhZnRlciB0aGUgdHJhcHBpbmcgUEMuIFNvLCBkZWMgYnkgMS4KQEAg
LTY4LDExICs2OCwxMSBAQCBzdHJ1Y3QgU2lnbmFsQ29udGV4dCB7CiAgICAgdm9pZCBhZGp1c3RQ
Q1RvUG9pbnRUb1RyYXBwaW5nSW5zdHJ1Y3Rpb24oKQogICAgIHsKICNpZiBDUFUoWDg2XzY0KSB8
fCBDUFUoWDg2KQotICAgICAgICBNYWNoaW5lQ29udGV4dDo6aW5zdHJ1Y3Rpb25Qb2ludGVyKG1j
b250ZXh0KSA9IHRyYXBQQzsKKyAgICAgICAgTWFjaGluZUNvbnRleHQ6Omluc3RydWN0aW9uUG9p
bnRlcihjb250ZXh0KSA9IHRyYXBQQzsKICNlbmRpZgogICAgIH0KIAotICAgIG1jb250ZXh0X3Qm
IG1jb250ZXh0OworICAgIFBsYXRmb3JtUmVnaXN0ZXJzJiBjb250ZXh0OwogICAgIHZvaWQqIHRy
YXBQQzsKICAgICB2b2lkKiBzdGFja1BvaW50ZXI7CiAgICAgdm9pZCogZnJhbWVQb2ludGVyOwpA
QCAtMTMwLDExICsxMzAsMTMgQEAgc3RhdGljIEV4cGVjdGVkPFZNQW5kU3RhY2tCb3VuZHMsIFZN
VHJhcHM6OkVycm9yPiBmaW5kQWN0aXZlVk1BbmRTdGFja0JvdW5kcyhTaWcKIAogc3RhdGljIHZv
aWQgaW5zdGFsbFNpZ25hbEhhbmRsZXIoKQogewotICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKFNp
Z25hbDo6VHJhcCwgW10gKGludCwgc2lnaW5mb190Kiwgdm9pZCogdWFwKSAtPiBTaWduYWxBY3Rp
b24gewotICAgICAgICBTaWduYWxDb250ZXh0IGNvbnRleHQoc3RhdGljX2Nhc3Q8dWNvbnRleHRf
dCo+KHVhcCktPnVjX21jb250ZXh0KTsKKyAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWw6
OlRyYXAsIFtdIChTaWduYWwsIFNpZ0luZm8mLCBQbGF0Zm9ybVJlZ2lzdGVycyYgcmVnaXN0ZXJz
KSAtPiBTaWduYWxBY3Rpb24geworICAgICAgICBTaWduYWxDb250ZXh0IGNvbnRleHQocmVnaXN0
ZXJzKTsKIAotICAgICAgICBpZiAoIWlzSklUUEMoY29udGV4dC50cmFwUEMpKQorICAgICAgICBp
ZiAoIWlzSklUUEMoY29udGV4dC50cmFwUEMpKSB7CisgICAgICAgICAgICBkYXRhTG9nTG4oInRy
YXBwaW5nIHBjOiAiLCBSYXdQb2ludGVyKGNvbnRleHQudHJhcFBDKSwgIiBqaXQgc3RhcnQ6ICIs
IHN0YXJ0T2ZGaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sLCAiIGppdCBlbmQ6ICIsIGVuZE9mRml4
ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbCk7CiAgICAgICAgICAgICByZXR1cm4gU2lnbmFsQWN0aW9u
OjpOb3RIYW5kbGVkOworICAgICAgICB9CiAKICAgICAgICAgLy8gRklYTUU6IFRoaXMgY3VycmVu
dGx5IGVhdHMgYWxsIHRyYXBzIGluY2x1ZGluZyBqaXQgYXNzZXJ0cyB3ZSBzaG91bGQgbWFrZSBz
dXJlIHRoaXMKICAgICAgICAgLy8gYWx3YXlzIHdvcmtzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTcxMDM5CkBAIC00MDQsOCArNDA2LDggQEAgdm9pZCBWTVRyYXBz
OjpTaWduYWxTZW5kZXI6OnNlbmQoKQogICAgICAgICAgICAgVk0mIHZtID0gKm1fdm07CiAgICAg
ICAgICAgICBhdXRvIG9wdGlvbmFsT3duZXJUaHJlYWQgPSB2bS5vd25lclRocmVhZCgpOwogICAg
ICAgICAgICAgaWYgKG9wdGlvbmFsT3duZXJUaHJlYWQpIHsKLSAgICAgICAgICAgICAgICBzZW5k
TWVzc2FnZSgqb3B0aW9uYWxPd25lclRocmVhZC52YWx1ZSgpLmdldCgpLCBbXSAoc2lnaW5mb190
KiwgdWNvbnRleHRfdCogdWNvbnRleHQpIC0+IHZvaWQgewotICAgICAgICAgICAgICAgICAgICBT
aWduYWxDb250ZXh0IGNvbnRleHQodWNvbnRleHQtPnVjX21jb250ZXh0KTsKKyAgICAgICAgICAg
ICAgICBzZW5kTWVzc2FnZSgqb3B0aW9uYWxPd25lclRocmVhZC52YWx1ZSgpLmdldCgpLCBbXSAo
UGxhdGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVycykgLT4gdm9pZCB7CisgICAgICAgICAgICAgICAg
ICAgIFNpZ25hbENvbnRleHQgY29udGV4dChyZWdpc3RlcnMpOwogICAgICAgICAgICAgICAgICAg
ICBhdXRvIGFjdGl2ZVZNQW5kU3RhY2tCb3VuZHMgPSBmaW5kQWN0aXZlVk1BbmRTdGFja0JvdW5k
cyhjb250ZXh0KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGl2ZVZNQW5kU3RhY2tCb3Vu
ZHMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFZNKiB2bSA9IGFjdGl2ZVZNQW5kU3RhY2tC
b3VuZHMudmFsdWUoKS52bTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29s
cy9TaWdpbGxDcmFzaEFuYWx5emVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9T
aWdpbGxDcmFzaEFuYWx5emVyLmNwcAppbmRleCA0YWRhZWZmMWNkYTJkMWZiYzZmOTA2MWYwNjNl
MTRkMmU2MzMwMDQ4Li5iYjQ2MDVjNjkzZTEyZGRlMDUwODRmN2ExN2NkMWU0NGY3ZTllNjc1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXpl
ci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1NpZ2lsbENyYXNoQW5hbHl6
ZXIuY3BwCkBAIC03OCwxMSArNzgsMTEgQEAgcHJpdmF0ZToKICNlbmRpZiAvLyBVU0UoT1NfTE9H
KQogCiBzdHJ1Y3QgU2lnbmFsQ29udGV4dCB7Ci0gICAgU2lnbmFsQ29udGV4dChtY29udGV4dF90
JiBtY29udGV4dCkKLSAgICAgICAgOiBtY29udGV4dChtY29udGV4dCkKLSAgICAgICAgLCBtYWNo
aW5lUEMoTWFjaGluZUNvbnRleHQ6Omluc3RydWN0aW9uUG9pbnRlcihtY29udGV4dCkpCi0gICAg
ICAgICwgc3RhY2tQb2ludGVyKE1hY2hpbmVDb250ZXh0OjpzdGFja1BvaW50ZXIobWNvbnRleHQp
KQotICAgICAgICAsIGZyYW1lUG9pbnRlcihNYWNoaW5lQ29udGV4dDo6ZnJhbWVQb2ludGVyKG1j
b250ZXh0KSkKKyAgICBTaWduYWxDb250ZXh0KFBsYXRmb3JtUmVnaXN0ZXJzJiBjb250ZXh0KQor
ICAgICAgICA6IGNvbnRleHQoY29udGV4dCkKKyAgICAgICAgLCBtYWNoaW5lUEMoTWFjaGluZUNv
bnRleHQ6Omluc3RydWN0aW9uUG9pbnRlcihjb250ZXh0KSkKKyAgICAgICAgLCBzdGFja1BvaW50
ZXIoTWFjaGluZUNvbnRleHQ6OnN0YWNrUG9pbnRlcihjb250ZXh0KSkKKyAgICAgICAgLCBmcmFt
ZVBvaW50ZXIoTWFjaGluZUNvbnRleHQ6OmZyYW1lUG9pbnRlcihjb250ZXh0KSkKICAgICB7IH0K
IAogICAgIHZvaWQgZHVtcCgpCkBAIC0xMTIsNyArMTEyLDcgQEAgc3RydWN0IFNpZ25hbENvbnRl
eHQgewogICAgICAgICB2KGdzKQogCiAjZGVmaW5lIERVTVBfUkVHSVNURVIoX19yZWcpIFwKLSAg
ICAgICAgbG9nKCJSZWdpc3RlciAiICNfX3JlZyAiOiAlcCIsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KG1jb250ZXh0LT5fX3NzLl9fIyNfX3JlZykpOworICAgICAgICBsb2coIlJlZ2lzdGVyICIg
I19fcmVnICI6ICVwIiwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY29udGV4dC5fXyMjX19yZWcp
KTsKICAgICAgICAgRk9SX0VBQ0hfUkVHSVNURVIoRFVNUF9SRUdJU1RFUikKICN1bmRlZiBGT1Jf
RUFDSF9SRUdJU1RFUgogCkBAIC0xMjAsMjAgKzEyMCwyMCBAQCBzdHJ1Y3QgU2lnbmFsQ29udGV4
dCB7CiAgICAgICAgIGludCBpOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjg7IGkgKz0gNCkg
ewogICAgICAgICAgICAgbG9nKCJ4JWQ6ICUwMTZsbHggeCVkOiAlMDE2bGx4IHglZDogJTAxNmxs
eCB4JWQ6ICUwMTZsbHgiLAotICAgICAgICAgICAgICAgIGksIG1jb250ZXh0LT5fX3NzLl9feFtp
XSwKLSAgICAgICAgICAgICAgICBpKzEsIG1jb250ZXh0LT5fX3NzLl9feFtpKzFdLAotICAgICAg
ICAgICAgICAgIGkrMiwgbWNvbnRleHQtPl9fc3MuX194W2krMl0sCi0gICAgICAgICAgICAgICAg
aSszLCBtY29udGV4dC0+X19zcy5fX3hbaSszXSk7CisgICAgICAgICAgICAgICAgaSwgY29udGV4
dC5fX3hbaV0sCisgICAgICAgICAgICAgICAgaSsxLCBjb250ZXh0Ll9feFtpKzFdLAorICAgICAg
ICAgICAgICAgIGkrMiwgY29udGV4dC5fX3hbaSsyXSwKKyAgICAgICAgICAgICAgICBpKzMsIGNv
bnRleHQuX194W2krM10pOwogICAgICAgICB9CiAgICAgICAgIEFTU0VSVChpIDwgMjkpOwogICAg
ICAgICBsb2coInglZDogJTAxNmxseCBmcDogJTAxNmxseCBscjogJTAxNmxseCIsCi0gICAgICAg
ICAgICBpLCBtY29udGV4dC0+X19zcy5fX3hbaV0sIG1jb250ZXh0LT5fX3NzLl9fZnAsIG1jb250
ZXh0LT5fX3NzLl9fbHIpOworICAgICAgICAgICAgaSwgY29udGV4dC5fX3hbaV0sIGNvbnRleHQu
X19mcCwgY29udGV4dC5fX2xyKTsKICAgICAgICAgbG9nKCJzcDogJTAxNmxseCBwYzogJTAxNmxs
eCBjcHNyOiAlMDh4IiwKLSAgICAgICAgICAgIG1jb250ZXh0LT5fX3NzLl9fc3AsIG1jb250ZXh0
LT5fX3NzLl9fcGMsIG1jb250ZXh0LT5fX3NzLl9fY3Bzcik7CisgICAgICAgICAgICBjb250ZXh0
Ll9fc3AsIGNvbnRleHQuX19wYywgY29udGV4dC5fX2Nwc3IpOwogI2VuZGlmCiAgICAgfQogCi0g
ICAgbWNvbnRleHRfdCYgbWNvbnRleHQ7CisgICAgUGxhdGZvcm1SZWdpc3RlcnMmIGNvbnRleHQ7
CiAgICAgdm9pZCogbWFjaGluZVBDOwogICAgIHZvaWQqIHN0YWNrUG9pbnRlcjsKICAgICB2b2lk
KiBmcmFtZVBvaW50ZXI7CkBAIC0xNDIsOCArMTQyLDggQEAgc3RydWN0IFNpZ25hbENvbnRleHQg
ewogc3RhdGljIHZvaWQgaW5zdGFsbENyYXNoSGFuZGxlcigpCiB7CiAjaWYgQ1BVKFg4Nl82NCkg
fHwgQ1BVKEFSTTY0KQotICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbDo6SWxsLCBbXSAo
aW50LCBzaWdpbmZvX3QqLCB2b2lkKiB1YXApIHsKLSAgICAgICAgU2lnbmFsQ29udGV4dCBjb250
ZXh0KHN0YXRpY19jYXN0PHVjb250ZXh0X3QqPih1YXApLT51Y19tY29udGV4dCk7CisgICAgaW5z
dGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFsOjpJbGwsIFtdIChTaWduYWwsIFNpZ0luZm8mLCBQbGF0
Zm9ybVJlZ2lzdGVycyYgcmVnaXN0ZXJzKSB7CisgICAgICAgIFNpZ25hbENvbnRleHQgY29udGV4
dChyZWdpc3RlcnMpOwogCiAgICAgICAgIGlmICghaXNKSVRQQyhjb250ZXh0Lm1hY2hpbmVQQykp
CiAgICAgICAgICAgICByZXR1cm4gU2lnbmFsQWN0aW9uOjpOb3RIYW5kbGVkOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCmluZGV4IDFkZDBjZDFkODM1YzZjMmYy
MzFiMDBiODg2ZGRlNGFmNzJjMjYzY2UuLmIxYjU5OGQyMGM1YzAwNzdkOWU5ZDA4ZTM2OGFkNWNh
MTc4MzFiYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQ
bGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAK
QEAgLTI0Miw3ICsyNDIsNyBAQCB2b2lkIEJCUVBsYW46OmNvbXBpbGVGdW5jdGlvbnMoQ29tcGls
YXRpb25FZmZvcnQgZWZmb3J0KQogICAgICAgICBBU1NFUlQodmFsaWRhdGVGdW5jdGlvbihmdW5j
dGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBtX21vZHVsZUluZm9ybWF0aW9u
LmdldCgpKSk7CiAKICAgICAgICAgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5jdGlvbklu
ZGV4XSA9IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPigpOwotICAgICAgICBUaWVyVXBD
b3VudCogdGllclVwID0gJm1fdGllclVwQ291bnRzW2Z1bmN0aW9uSW5kZXhdOworICAgICAgICBU
aWVyVXBDb3VudCogdGllclVwID0gT3B0aW9uczo6dXNlQkJRVGllclVwQ2hlY2tzKCkgPyAmbV90
aWVyVXBDb3VudHNbZnVuY3Rpb25JbmRleF0gOiBudWxscHRyOwogICAgICAgICBhdXRvIHBhcnNl
QW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZShtX2NvbXBpbGF0aW9uQ29udGV4dHNb
ZnVuY3Rpb25JbmRleF0sIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUs
IG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0sIG1fbW9kdWxlSW5mb3Jt
YXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpCQlFNb2RlLCBmdW5jdGlvbklu
ZGV4LCB0aWVyVXApOwogCiAgICAgICAgIGlmIChVTkxJS0VMWSghcGFyc2VBbmRDb21waWxlUmVz
dWx0KSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0
U2lnbmFsSGFuZGxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRT
aWduYWxIYW5kbGVyLmNwcAppbmRleCAyZTBjOTlhMzliZWJkMzE3OGI5MTQ4ZDk1OGZlNTNlNTdh
NjIyOTdlLi4yNjRjMzRkZTQ1ZGExNzVhNWQ1MTQxYzE3MWVmZTk1ZTA2M2M1ZTI3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVy
LmNwcApAQCAtNTIsOSArNTIsOCBAQCBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8
c3RkOjp0dXBsZTx2b2lkKiwgdm9pZCo+Pj4gY29kZUxvY2F0aW9uczsgLy8gKAogCiBzdGF0aWMg
Ym9vbCBmYXN0SGFuZGxlckluc3RhbGxlZCB7IGZhbHNlIH07CiAKLXN0YXRpYyBTaWduYWxBY3Rp
b24gdHJhcEhhbmRsZXIoaW50LCBzaWdpbmZvX3QqIHNpZ0luZm8sIHZvaWQqIHVjb250ZXh0KQor
c3RhdGljIFNpZ25hbEFjdGlvbiB0cmFwSGFuZGxlcihTaWduYWwsIFNpZ0luZm8mIHNpZ0luZm8s
IFBsYXRmb3JtUmVnaXN0ZXJzJiBjb250ZXh0KQogewotICAgIG1jb250ZXh0X3QmIGNvbnRleHQg
PSBzdGF0aWNfY2FzdDx1Y29udGV4dF90Kj4odWNvbnRleHQpLT51Y19tY29udGV4dDsKICAgICB2
b2lkKiBmYXVsdGluZ0luc3RydWN0aW9uID0gTWFjaGluZUNvbnRleHQ6Omluc3RydWN0aW9uUG9p
bnRlcihjb250ZXh0KTsKICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAic3RhcnRpbmcgaGFuZGxl
ciBmb3IgZmF1bHQgYXQ6ICIsIFJhd1BvaW50ZXIoZmF1bHRpbmdJbnN0cnVjdGlvbikpOwogCkBA
IC02NCw3ICs2Myw3IEBAIHN0YXRpYyBTaWduYWxBY3Rpb24gdHJhcEhhbmRsZXIoaW50LCBzaWdp
bmZvX3QqIHNpZ0luZm8sIHZvaWQqIHVjb250ZXh0KQogICAgIGlmIChpc0pJVFBDKGZhdWx0aW5n
SW5zdHJ1Y3Rpb24pKSB7CiAgICAgICAgIGJvb2wgZmF1bHRlZEluQWN0aXZlRmFzdE1lbW9yeSA9
IGZhbHNlOwogICAgICAgICB7Ci0gICAgICAgICAgICB2b2lkKiBmYXVsdGluZ0FkZHJlc3MgPSBz
aWdJbmZvLT5zaV9hZGRyOworICAgICAgICAgICAgdm9pZCogZmF1bHRpbmdBZGRyZXNzID0gc2ln
SW5mby5mYXVsdGluZ0FkZHJlc3M7CiAgICAgICAgICAgICBkYXRhTG9nTG5JZih2ZXJib3NlLCAi
Y2hlY2tpbmcgZmF1bHRpbmcgYWRkcmVzczogIiwgUmF3UG9pbnRlcihmYXVsdGluZ0FkZHJlc3Mp
LCAiIGlzIGluIGFuIGFjdGl2ZSBmYXN0IG1lbW9yeSIpOwogICAgICAgICAgICAgZmF1bHRlZElu
QWN0aXZlRmFzdE1lbW9yeSA9IFdhc206Ok1lbW9yeTo6YWRkcmVzc0lzSW5BY3RpdmVGYXN0TWVt
b3J5KGZhdWx0aW5nQWRkcmVzcyk7CiAgICAgICAgIH0KQEAgLTEyNCwxMSArMTIzLDExIEBAIHZv
aWQgZW5hYmxlRmFzdE1lbW9yeSgpCiAgICAgICAgICAgICByZXR1cm47CiAKICNpZiBFTkFCTEUo
V0VCQVNTRU1CTFlfRkFTVF9NRU1PUlkpCi0gICAgICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKFNp
Z25hbDo6QnVzLCBbXSAoaW50IHNpZ25hbCwgc2lnaW5mb190KiBzaWdJbmZvLCB2b2lkKiB1Y29u
dGV4dCkgeworICAgICAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWw6OkJ1cywgW10gKFNp
Z25hbCBzaWduYWwsIFNpZ0luZm8mIHNpZ0luZm8sIFBsYXRmb3JtUmVnaXN0ZXJzJiB1Y29udGV4
dCkgewogICAgICAgICAgICAgcmV0dXJuIHRyYXBIYW5kbGVyKHNpZ25hbCwgc2lnSW5mbywgdWNv
bnRleHQpOwogICAgICAgICB9KTsKIAotICAgICAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWdu
YWw6OlNlZ1YsIFtdIChpbnQgc2lnbmFsLCBzaWdpbmZvX3QqIHNpZ0luZm8sIHZvaWQqIHVjb250
ZXh0KSB7CisgICAgICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbDo6U2VnViwgW10gKFNp
Z25hbCBzaWduYWwsIFNpZ0luZm8mIHNpZ0luZm8sIFBsYXRmb3JtUmVnaXN0ZXJzJiB1Y29udGV4
dCkgewogICAgICAgICAgICAgcmV0dXJuIHRyYXBIYW5kbGVyKHNpZ25hbCwgc2lnSW5mbywgdWNv
bnRleHQpOwogICAgICAgICB9KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbU1hY2hpbmVUaHJlYWRzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21NYWNoaW5lVGhyZWFkcy5jcHAKaW5kZXggNWFhYzg3YWNiNTc0N2M3ZmNhMmY5MzZlYzlj
ZjY3OGI0MzE3ODE3MS4uMGEzNjdmZDVlMjI1MjdlOWMzYzg3NTM2ZWNmZDcyYjEzZGY3OWQ1YiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1hY2hpbmVUaHJlYWRz
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWFjaGluZVRocmVhZHMu
Y3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiTWFjaGluZVN0YWNrTWFya2VyLmgiCiAj
aW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZE1lc3Nh
Z2UuaD4KKyNpbmNsdWRlIDx3dGYvdGhyZWFkcy9TaWduYWxzLmg+CiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgV2FzbSB7CiAKQEAgLTU3LDcgKzU4LDcgQEAgdm9pZCByZXNldEluc3RydWN0
aW9uQ2FjaGVPbkFsbFRocmVhZHMoKQogCiAgICAgY29uc3QgRG91Ymx5TGlua2VkTGlzdDxNYWNo
aW5lVGhyZWFkczo6TWFjaGluZVRocmVhZD4mIHRocmVhZHMgPSB3YXNtVGhyZWFkcygpLnRocmVh
ZHNMaXN0SGVhZChsb2NrZXIpOwogICAgIGZvciAoY29uc3QgYXV0byogdGhyZWFkID0gdGhyZWFk
cy5oZWFkKCk7IHRocmVhZDsgdGhyZWFkID0gdGhyZWFkLT5uZXh0KCkpIHsKLSAgICAgICAgc2Vu
ZE1lc3NhZ2UodGhyZWFkLT5tX3RocmVhZC5nZXQoKSwgW10gKHNpZ2luZm9fdCosIHVjb250ZXh0
X3QqKSB7CisgICAgICAgIHNlbmRNZXNzYWdlKHRocmVhZC0+bV90aHJlYWQuZ2V0KCksIFtdIChj
b25zdCBQbGF0Zm9ybVJlZ2lzdGVycyYpIHsKICAgICAgICAgICAgIC8vIEl0J3MgbGlrZWx5IHRo
YXQgdGhlIHNpZ25hbCBoYW5kbGVyIHdpbGwgYWxyZWFkeSByZXNldCB0aGUgaW5zdHJ1Y3Rpb24g
Y2FjaGUgYnV0IHdlIG1pZ2h0IGFzIHdlbGwgYmUgc3VyZS4KICAgICAgICAgICAgIFdURjo6Y3Jv
c3NNb2RpZnlpbmdDb2RlRmVuY2UoKTsKICAgICAgICAgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dURi9XVEYueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA1ZjQ1Mjg3ZjZlM2M2ODg1YjIyYmEyNzc2Y2ZiYzZh
MzMyM2JkMDViLi41ODU0NGNjYjYyY2IyMjEyYmFlZTc2ZjRkMmEwMWU4OWI2YjdiMDk0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTY0LDYgKzY0LDcgQEAK
IAkJNTIxODMwMTJDOTlFNDc2QTg0RUVCRUE4IC8qIFN5bWJvbEltcGwuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjcyQkJEQjEwN0ZBNDI0ODg2MTc4
QjlFIC8qIFN5bWJvbEltcGwuY3BwICovOyB9OwogCQk1MzExQkQ1MzFFQTcxQ0FEMDA1MjUyODEg
LyogU2lnbmFscy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MzExQkQ1MTFFQTcxQ0FEMDA1MjUyODEgLyogU2lnbmFscy5jcHAgKi87IH07CiAJCTUz
MTFCRDVDMUVBODIyRjkwMDUyNTI4MSAvKiBUaHJlYWRNZXNzYWdlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMTFCRDVCMUVBODIyRjkwMDUyNTI4
MSAvKiBUaHJlYWRNZXNzYWdlLmNwcCAqLzsgfTsKKwkJNTM1MzRGMkExRUMwRTEwRTAwMTQxQjJG
IC8qIE1hY2hFeGNlcHRpb25zLmRlZnMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MzUzNEYyOTFFQzBFMTBFMDAxNDFCMkYgLyogTWFjaEV4Y2VwdGlvbnMu
ZGVmcyAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChDbGllbnQsIFNlcnZlciwgKTsgfTsg
fTsKIAkJNzBBOTkzRkUxQUQ3MTUxMzAwRkE2MTVCIC8qIFN5bWJvbFJlZ2lzdHJ5LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcwQTk5M0ZDMUFENzE1
MTMwMEZBNjE1QiAvKiBTeW1ib2xSZWdpc3RyeS5jcHAgKi87IH07CiAJCTcwRUNBNjBEMUIwMjQy
NjgwMDQ0OTczOSAvKiBBdG9taWNTdHJpbmdJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcwRUNBNjBBMUIwMjQyNjgwMDQ0OTczOSAvKiBBdG9t
aWNTdHJpbmdJbXBsLmNwcCAqLzsgfTsKIAkJN0FGRUM2QjExRUIyMkI1OTAwREFERTM2IC8qIFVV
SUQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FG
RUM2QjAxRUIyMkI1OTAwREFERTM2IC8qIFVVSUQuY3BwICovOyB9OwpAQCAtMjk5LDYgKzMwMCw3
IEBACiAJCTUzMTFCRDU3MUVBN0UxQTEwMDUyNTI4MSAvKiBTaWduYWxzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpZ25hbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTMxMUJENTkxRUE4MUE5NjAwNTI1MjgxIC8qIFRocmVhZE1lc3NhZ2UuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGhyZWFkTWVzc2FnZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MzExQkQ1QjFFQTgyMkY5MDA1MjUyODEgLyogVGhyZWFkTWVzc2Fn
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaHJlYWRNZXNzYWdl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM1MzRGMjkxRUMwRTEwRTAwMTQx
QjJGIC8qIE1hY2hFeGNlcHRpb25zLmRlZnMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLm1pZzsgcGF0
aCA9IE1hY2hFeGNlcHRpb25zLmRlZnM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUz
OUVCMDYyMUQ1NTI4NDIwMEM4MkVGNyAvKiBMRUJEZWNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IExFQkRlY29kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTNFQzI1M0MxRTk1QUQzMDAwMDgzMUI5IC8qIFByaW9yaXR5UXVldWUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJpb3JpdHlRdWV1ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1NTMwNzFDOTFDNDA0MjcyMDAzODQ4OTggLyogVGlueUxSVUNhY2hlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpbnlMUlVDYWNoZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTAyMyw2ICsxMDI1LDcgQEAKIAkJCWNoaWxkcmVuID0g
KAogCQkJCTFBNDI4QjhCMUM4Rjg5REQwMDUxRTlFQiAvKiBBcHBLaXRDb21wYXRpYmlsaXR5RGVj
bGFyYXRpb25zLmggKi8sCiAJCQkJMUFDQUREODIxODg0NDgwMTAwRDhCNzFEIC8qIERlcHJlY2F0
ZWRTeW1ib2xzVXNlZEJ5U2FmYXJpLm1tICovLAorCQkJCTUzNTM0RjI5MUVDMEUxMEUwMDE0MUIy
RiAvKiBNYWNoRXhjZXB0aW9ucy5kZWZzICovLAogCQkJCUE4QTQ3MkM1MTUxQTgyNUEwMDQxMjNG
RiAvKiBNYWluVGhyZWFkTWFjLm1tICovLAogCQkJKTsKIAkJCXBhdGggPSBtYWM7CkBAIC0xMzQ2
LDYgKzEzNDksNyBAQAogCQkJCTE0M0Y2MTFGMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUEzQjcyNUVDOTg3NDQ2QUQ5M0YxQTQ0MCAvKiBSYW5kb21E
ZXZpY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0MTQxNTFBODI1QjAwNDEyM0ZGIC8q
IFJhbmRvbU51bWJlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MzUzNEYyQTFFQzBFMTBFMDAx
NDFCMkYgLyogTWFjaEV4Y2VwdGlvbnMuZGVmcyBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDFB
MTUxQTgyNUIwMDQxMjNGRiAvKiBSZWZDb3VudGVkTGVha0NvdW50ZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMkNERUQwRjMxODExNUM4NTAwNERCQTcwIC8qIFJ1bkxvb3AuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMkNERUQwRUYxODExNUMzODAwNERCQTcwIC8qIFJ1bkxvb3BDRi5jcHAgaW4g
U291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1N0YWNrQm91bmRzLmggYi9T
b3VyY2UvV1RGL3d0Zi9TdGFja0JvdW5kcy5oCmluZGV4IDU1NDYwNGYyYWI0ODRjN2NmNzFlZTM4
NjMwY2ViNGM3OWMzM2U5NzIuLmNkNjJjMTQ4YTZjN2VmYzk1MTdhOGIwOWI4YTMyYzdmZTE5MGNk
ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1N0YWNrQm91bmRzLmgKKysrIGIvU291cmNl
L1dURi93dGYvU3RhY2tCb3VuZHMuaApAQCAtNTQsNyArNTQsNiBAQCBwdWJsaWM6CiAgICAgICAg
IDogbV9vcmlnaW4ob3JpZ2luKQogICAgICAgICAsIG1fYm91bmQoZW5kKQogICAgIHsKLSAgICAg
ICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIH0KIAogICAgIHZvaWQqIG9yaWdpbigpIGNvbnN0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXIuY3BwIGIvU291cmNlL1dU
Ri93dGYvVGhyZWFkSG9sZGVyLmNwcAppbmRleCAzMGIyMjdjZGI4YWM1MjYwNzUwYjQ3ZDQ4MmFi
YzJkNTViZTNhYzk0Li4zYTcyZTM3YzcwMGRlM2FmNGYyZTcyNWNhN2M5YWVkMzk2YTgxNzhkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXIuY3BwCisrKyBiL1NvdXJjZS9X
VEYvd3RmL1RocmVhZEhvbGRlci5jcHAKQEAgLTM0LDEyICszNCwxNyBAQAogCiAjaW5jbHVkZSAi
VGhyZWFkaW5nLmgiCiAKKyNpbmNsdWRlIDx3dGYvdGhyZWFkcy9TaWduYWxzLmg+CisKIG5hbWVz
cGFjZSBXVEYgewogCiBUaHJlYWRTcGVjaWZpY0tleSBUaHJlYWRIb2xkZXI6Om1fa2V5ID0gSW52
YWxpZFRocmVhZFNwZWNpZmljS2V5OwogCiBUaHJlYWRIb2xkZXI6On5UaHJlYWRIb2xkZXIoKQog
eworI2lmIE9TKERBUldJTikKKyAgICByZW1vdmVUaHJlYWQoJm1fdGhyZWFkLmdldCgpKTsKKyNl
bmRpZgogICAgIG1fdGhyZWFkLT5kaWRFeGl0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL1RocmVhZE1lc3NhZ2UuY3BwIGIvU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5j
cHAKaW5kZXggZjE0YmM0NWQzNjE0YzdjNjYzNWViMTdhYjBlMjcyODE2YTEzNzNkZC4uYjA0MGE1
YjcxZGMxY2JkNTUxNTM3M2U2ZGU2OTNjOTRkMmI1NTA3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvVGhyZWFkTWVzc2FnZS5jcHAKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2Fn
ZS5jcHAKQEAgLTM2LDYgKzM2LDkgQEAKICNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+CiAjaW5jbHVk
ZSA8d3RmL3RocmVhZHMvU2lnbmFscy5oPgogCisjaWYgT1MoREFSV0lOKQorI2luY2x1ZGUgPG1h
Y2gvdGhyZWFkX2FjdC5oPgorI2VuZGlmCiAKIG5hbWVzcGFjZSBXVEYgewogCkBAIC04MywxMiAr
ODYsMTIgQEAgdm9pZCBpbml0aWFsaXplVGhyZWFkTWVzc2FnZXMoKQogfQogCiBTVVBQUkVTU19B
U0FOCi1NZXNzYWdlU3RhdHVzIHNlbmRNZXNzYWdlU2NvcGVkKFRocmVhZCYgdGhyZWFkLCBjb25z
dCBUaHJlYWRNZXNzYWdlJiBtZXNzYWdlKQorc3RhdGljIE1lc3NhZ2VTdGF0dXMgc2VuZE1lc3Nh
Z2VTaWduYWwoVGhyZWFkJiB0aHJlYWQsIGNvbnN0IFRocmVhZE1lc3NhZ2UmIG1lc3NhZ2UpCiB7
CiAgICAgY29uc3RleHByIFNpZ25hbCBzaWduYWwgPSBTaWduYWw6OlVzcjsKICAgICBzdGF0aWMg
c3RkOjpvbmNlX2ZsYWcgb25jZTsKICAgICBzdGQ6OmNhbGxfb25jZShvbmNlLCBbXSB7Ci0gICAg
ICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKHNpZ25hbCwgW10gKGludCwgc2lnaW5mb190KiBpbmZv
LCB2b2lkKiB1YXApIHsKKyAgICAgICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoc2lnbmFsLCBbXSAo
U2lnbmFsLCBTaWdJbmZvJiwgUGxhdGZvcm1SZWdpc3RlcnMmIGNvbnRleHQpIHsKICAgICAgICAg
ICAgIFRocmVhZCogdGhyZWFkID0gVGhyZWFkOjpjdXJyZW50TWF5QmVOdWxsKCk7CiAKICAgICAg
ICAgICAgIGlmICghdGhyZWFkKSB7CkBAIC05OCw3ICsxMDEsNyBAQCBNZXNzYWdlU3RhdHVzIHNl
bmRNZXNzYWdlU2NvcGVkKFRocmVhZCYgdGhyZWFkLCBjb25zdCBUaHJlYWRNZXNzYWdlJiBtZXNz
YWdlKQogCiAgICAgICAgICAgICAvLyBOb2RlIHNob3VsZCBiZSBkZWxldGVkIGluIHRoZSBzZW5k
ZXIgdGhyZWFkLiBEZWxldGluZyBOb2RlcyBpbiBzaWduYWwgaGFuZGxlciBjYXVzZXMgZGVhZCBs
b2NrLgogICAgICAgICAgICAgdGhyZWFkLT50aHJlYWRNZXNzYWdlcygpLmNvbnN1bWVBbGxXaXRo
Tm9kZShbJl0gKFRocmVhZE1lc3NhZ2VEYXRhKiBkYXRhLCBOb2RlKiBub2RlKSB7Ci0gICAgICAg
ICAgICAgICAgZGF0YS0+bWVzc2FnZShpbmZvLCBzdGF0aWNfY2FzdDx1Y29udGV4dF90Kj4odWFw
KSk7CisgICAgICAgICAgICAgICAgZGF0YS0+bWVzc2FnZShjb250ZXh0KTsKICAgICAgICAgICAg
ICAgICAvLyBCeSBzZXR0aW5nIHJhbiB2YXJpYWJsZSwgKDEpIHRoZSBzZW5kZXIgYWNrbm93bGVk
Z2VzIHRoZSBjb21wbGV0aW9uIGFuZAogICAgICAgICAgICAgICAgIC8vICgyKSBnZXRzIHRoZSBO
b2RlIHRvIGJlIGRlbGV0ZWQuCiAgICAgICAgICAgICAgICAgZGF0YS0+cmFuLnN0b3JlKG5vZGUp
OwpAQCAtMTU2LDYgKzE1OSw2MCBAQCBNZXNzYWdlU3RhdHVzIHNlbmRNZXNzYWdlU2NvcGVkKFRo
cmVhZCYgdGhyZWFkLCBjb25zdCBUaHJlYWRNZXNzYWdlJiBtZXNzYWdlKQogICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKKyNpZiBPUyhEQVJXSU4pCitzdGF0aWMgTWVzc2Fn
ZVN0YXR1cyBzZW5kTWVzc2FnZU1hY2goVGhyZWFkJiB0aHJlYWQsIGNvbnN0IFRocmVhZE1lc3Nh
Z2UmIG1lc3NhZ2UpCit7CisgICAgc3RhdGljIFN0YXRpY0xvY2sgbWVzc2FnZUxvY2s7CisgICAg
YXV0byBsb2NraG9sZGVyID0gaG9sZExvY2sobWVzc2FnZUxvY2spOworCisgICAgYXV0byByZXN1
bHQgPSB0aHJlYWQuc3VzcGVuZCgpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4g
TWVzc2FnZVN0YXR1czo6VGhyZWFkRXhpdGVkOworCisjaWYgQ1BVKFg4NikKKyAgICB1bnNpZ25l
ZCB1c2VyQ291bnQgPSBzaXplb2YocmVnaXN0ZXJzKSAvIHNpemVvZihpbnQpOworICAgIHRocmVh
ZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSBpMzg2X1RIUkVBRF9TVEFURTsKKyNlbGlmIENQVShY
ODZfNjQpCisgICAgdW5zaWduZWQgdXNlckNvdW50ID0geDg2X1RIUkVBRF9TVEFURTY0X0NPVU5U
OworICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSB4ODZfVEhSRUFEX1NUQVRFNjQ7
CisjZWxpZiBDUFUoQVJNKQorICAgIHVuc2lnbmVkIHVzZXJDb3VudCA9IEFSTV9USFJFQURfU1RB
VEVfQ09VTlQ7CisgICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IEFSTV9USFJFQURf
U1RBVEU7CisjZWxpZiBDUFUoQVJNNjQpCisgICAgdW5zaWduZWQgdXNlckNvdW50ID0gQVJNX1RI
UkVBRF9TVEFURTY0X0NPVU5UOworICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSBB
Uk1fVEhSRUFEX1NUQVRFNjQ7CisjZWxzZQorI2Vycm9yIFVua25vd24gQXJjaGl0ZWN0dXJlCisj
ZW5kaWYKKworICAgIFBsYXRmb3JtUmVnaXN0ZXJzIHJlZ2lzdGVyczsKKyAgICB0aHJlYWRfc3Rh
dGVfdCBzdGF0ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dGhyZWFkX3N0YXRlX3Q+KCZyZWdpc3RlcnMp
OworICAgIHRocmVhZF9nZXRfc3RhdGUodGhyZWFkLm1hY2hUaHJlYWQoKSwgZmxhdm9yLCBzdGF0
ZSwgJnVzZXJDb3VudCk7CisKKyAgICBtZXNzYWdlKHJlZ2lzdGVycyk7CisKKyAgICB0aHJlYWRf
c2V0X3N0YXRlKHRocmVhZC5tYWNoVGhyZWFkKCksIGZsYXZvciwgKHRocmVhZF9zdGF0ZV90KSZy
ZWdpc3RlcnMsIHVzZXJDb3VudCk7CisKKyAgICB0aHJlYWQucmVzdW1lKCk7CisgICAgcmV0dXJu
IE1lc3NhZ2VTdGF0dXM6Ok1lc3NhZ2VSYW47Cit9CisKK3N0YXRpYyBib29sIHVzZU1hY2ggPSBm
YWxzZTsKK3ZvaWQgZGVsaXZlck1lc3NhZ2VzVXNpbmdNYWNoKCkgeyB1c2VNYWNoID0gdHJ1ZTsg
fQorCisjZW5kaWYKKworTWVzc2FnZVN0YXR1cyBzZW5kTWVzc2FnZVNjb3BlZChUaHJlYWQmIHRo
cmVhZCwgY29uc3QgVGhyZWFkTWVzc2FnZSYgbWVzc2FnZSkKK3sKKyNpZiBPUyhEQVJXSU4pCisg
ICAgaWYgKHVzZU1hY2gpCisgICAgICAgIHJldHVybiBzZW5kTWVzc2FnZU1hY2godGhyZWFkLCBt
ZXNzYWdlKTsKKyNlbmRpZgorICAgIHJldHVybiBzZW5kTWVzc2FnZVNpZ25hbCh0aHJlYWQsIG1l
c3NhZ2UpOworICAgIHJldHVybiBNZXNzYWdlU3RhdHVzOjpUaHJlYWRFeGl0ZWQ7Cit9CisKKwog
fSAvLyBuYW1lc3BhY2UgV1RGCiAKICNlbmRpZiAvLyBVU0UoUFRIUkVBRFMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRNZXNzYWdlLmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRN
ZXNzYWdlLmgKaW5kZXggOWFlNTNmMjljZjdlOGZiMDBlZjkyMTFkMTZjZTJjZGVkNjAzZWMxYi4u
Nzc0MmUxYWNiYzRiM2M4NWRkZjY2MjgwMGM1YWNmMGFiMmFlMTQxOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZE1l
c3NhZ2UuaApAQCAtMzYsNyArMzYsNyBAQCBuYW1lc3BhY2UgV1RGIHsKIHZvaWQgaW5pdGlhbGl6
ZVRocmVhZE1lc3NhZ2VzKCk7CiAKIGNsYXNzIFRocmVhZE1lc3NhZ2VEYXRhOwotdXNpbmcgVGhy
ZWFkTWVzc2FnZSA9IFNjb3BlZExhbWJkYTx2b2lkKHNpZ2luZm9fdCosIHVjb250ZXh0X3QqKT47
Cit1c2luZyBUaHJlYWRNZXNzYWdlID0gU2NvcGVkTGFtYmRhPHZvaWQoUGxhdGZvcm1SZWdpc3Rl
cnMmKT47CiAKIGVudW0gY2xhc3MgTWVzc2FnZVN0YXR1cyB7CiAgICAgTWVzc2FnZVJhbiwKQEAg
LTUxLDEwICs1MSwxNCBAQCBNZXNzYWdlU3RhdHVzIHNlbmRNZXNzYWdlU2NvcGVkKFRocmVhZCYs
IGNvbnN0IFRocmVhZE1lc3NhZ2UmKTsKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CiBNZXNz
YWdlU3RhdHVzIHNlbmRNZXNzYWdlKFRocmVhZCYgdGFyZ2V0VGhyZWFkLCBjb25zdCBGdW5jdG9y
JiBmdW5jKQogewotICAgIGF1dG8gbGFtYmRhID0gc2NvcGVkTGFtYmRhUmVmPHZvaWQoc2lnaW5m
b190KiwgdWNvbnRleHRfdCopPihmdW5jKTsKKyAgICBhdXRvIGxhbWJkYSA9IHNjb3BlZExhbWJk
YVJlZjx2b2lkKFBsYXRmb3JtUmVnaXN0ZXJzJik+KGZ1bmMpOwogICAgIHJldHVybiBzZW5kTWVz
c2FnZVNjb3BlZCh0YXJnZXRUaHJlYWQsIGxhbWJkYSk7CiB9CiAKKyNpZiBPUyhEQVJXSU4pCit2
b2lkIGRlbGl2ZXJNZXNzYWdlc1VzaW5nTWFjaCgpOworI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNl
IFdURgogCiB1c2luZyBXVEY6OnNlbmRNZXNzYWdlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvVGhyZWFkaW5nLmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaAppbmRleCBkMmU1MzZk
ZjdhODY5NmQ4ZTZiOTViYTQzZTE3M2QzYjU1MGJmMTZhLi4zNTE0ZThjMDlmMGZjOTRkNTM0YmUy
ZjNiNmU3YzQ5NTBlMGJjZjA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcu
aAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaApAQCAtMTM4LDYgKzEzOCwxMCBAQCBw
dWJsaWM6CiAKICNpZiBVU0UoUFRIUkVBRFMpCiAgICAgTG9ja2xlc3NCYWc8VGhyZWFkTWVzc2Fn
ZURhdGEqPiYgdGhyZWFkTWVzc2FnZXMoKSB7IHJldHVybiBtX3RocmVhZE1lc3NhZ2VzOyB9CisK
KyNpZiBPUyhEQVJXSU4pCisgICAgbWFjaF9wb3J0X3QgbWFjaFRocmVhZCgpIHsgcmV0dXJuIG1f
cGxhdGZvcm1UaHJlYWQ7IH0KKyNlbmRpZgogI2VuZGlmCiAKIHByb3RlY3RlZDoKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL21hYy9NYWNoRXhjZXB0aW9ucy5kZWZzIGIvU291cmNlL1dURi93
dGYvbWFjL01hY2hFeGNlcHRpb25zLmRlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDIwNTc0MmE0ZWQ1MDBmODA2
NGZlZWI0OTU1YTdjOTcwZDk5YWYwYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L21hYy9NYWNoRXhjZXB0aW9ucy5kZWZzCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8bWFjaC9tYWNoX2V4Yy5k
ZWZzPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGhyZWFkcy9TaWduYWxzLmNwcCBiL1Nv
dXJjZS9XVEYvd3RmL3RocmVhZHMvU2lnbmFscy5jcHAKaW5kZXggODU1YjI4YjMxNzIxNzI3Y2Yx
ZjQzMWE5MThhMjUxZGMyZTZhM2RmYy4uYmNlOTBhYjk1N2ZmNzdiNjkwMzk5NTM5YmMwNzAyYTU3
ZDZhZDk1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGhyZWFkcy9TaWduYWxzLmNwcAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi90aHJlYWRzL1NpZ25hbHMuY3BwCkBAIC0yOCwyMSArMjgsMjU3
IEBACiAKICNpZiBVU0UoUFRIUkVBRFMpCiAKKyNpZiBPUyhEQVJXSU4pCitleHRlcm4gIkMiIHsK
KyNpbmNsdWRlICJNYWNoRXhjZXB0aW9uc1NlcnZlci5oIgorfTsKKyNlbmRpZgorCiAjaW5jbHVk
ZSA8Y3N0ZGlvPgogI2luY2x1ZGUgPG11dGV4PgogI2luY2x1ZGUgPHNpZ25hbC5oPgorCisjaWYg
T1MoREFSV0lOKQorI2luY2x1ZGUgPG1hY2gvbWFjaC5oPgorI2luY2x1ZGUgPG1hY2gvdGhyZWFk
X2FjdC5oPgorI2VuZGlmCisKICNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgogI2luY2x1ZGUgPHd0
Zi9EYXRhTG9nLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTG9j
a2xlc3NCYWcuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3
dGYvVGhyZWFkTWVzc2FnZS5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKwogCiBuYW1l
c3BhY2UgV1RGIHsKIAorICAgIAogc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxMb2NrbGVzc0Jh
ZzxTaWduYWxIYW5kbGVyPj4gaGFuZGxlcnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihTaWduYWw6Ok51
bWJlck9mU2lnbmFscyldID0geyB9Owotc3RhdGljIHN0cnVjdCBzaWdhY3Rpb24gb2xkQWN0aW9u
c1tzdGF0aWNfY2FzdDxzaXplX3Q+KFNpZ25hbDo6TnVtYmVyT2ZTaWduYWxzKV07CiBzdGF0aWMg
c3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZU9uY2VGbGFnc1tzdGF0aWNfY2FzdDxzaXplX3Q+KFNp
Z25hbDo6TnVtYmVyT2ZTaWduYWxzKV07CitzdGF0aWMgc3RydWN0IHNpZ2FjdGlvbiBvbGRBY3Rp
b25zW3N0YXRpY19jYXN0PHNpemVfdD4oU2lnbmFsOjpOdW1iZXJPZlNpZ25hbHMpXTsKKworI2lm
IE9TKERBUldJTikKK3N0YXRpYyBtYWNoX3BvcnRfdCBleGNlcHRpb25Qb3J0Oworc3RhdGljIGNv
bnN0ZXhwciBzaXplX3QgbWF4TWVzc2FnZVNpemUgPSAxICogS0I7CisKK3N0YXRpYyB2b2lkIHN0
YXJ0TWFjaEV4Y2VwdGlvbkhhbmRsZXJUaHJlYWQoKQoreworICAgIHN0YXRpYyBzdGQ6Om9uY2Vf
ZmxhZyBvbmNlOworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2UsIFtdIHsKKyAgICAgICAgaWYgKG1h
Y2hfcG9ydF9hbGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigpLCBNQUNIX1BPUlRfUklHSFRfUkVDRUlW
RSwgJmV4Y2VwdGlvblBvcnQpICE9IEtFUk5fU1VDQ0VTUykKKyAgICAgICAgICAgIENSQVNIKCk7
CisKKyAgICAgICAgaWYgKG1hY2hfcG9ydF9pbnNlcnRfcmlnaHQobWFjaF90YXNrX3NlbGYoKSwg
ZXhjZXB0aW9uUG9ydCwgZXhjZXB0aW9uUG9ydCwgTUFDSF9NU0dfVFlQRV9NQUtFX1NFTkQpIT0g
S0VSTl9TVUNDRVNTKQorICAgICAgICAgICAgQ1JBU0goKTsKKworICAgICAgICAvLyBGSVhNRTog
VGhpcyBzaG91bGQgdXNlIGEgZGlzcGF0Y2ggcXVldWUuCisgICAgICAgICh2b2lkKVRocmVhZDo6
Y3JlYXRlKAorICAgICAgICAgICAgIldURiBNYWNoIEV4Y2VwdGlvbiBUaHJlYWQiLCBbXSAoKSB7
CisgICAgICAgICAgICAgICAgdW5pb24gTWVzc2FnZSB7CisgICAgICAgICAgICAgICAgICAgIG1h
Y2hfbXNnX2hlYWRlcl90IGhlYWRlcjsKKyAgICAgICAgICAgICAgICAgICAgY2hhciBkYXRhW21h
eE1lc3NhZ2VTaXplXTsKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIE1lc3Nh
Z2UgbWVzc2FnZUhlYWRlckluOworICAgICAgICAgICAgICAgIE1lc3NhZ2UgbWVzc2FnZUhlYWRl
ck91dDsKKworICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAg
ICAgIGtlcm5fcmV0dXJuX3QgbWVzc2FnZVJlc3VsdCA9IG1hY2hfbXNnKCZtZXNzYWdlSGVhZGVy
SW4uaGVhZGVyLCBNQUNIX1JDVl9NU0csIDAsIG1heE1lc3NhZ2VTaXplLCBleGNlcHRpb25Qb3J0
LCBNQUNIX01TR19USU1FT1VUX05PTkUsIE1BQ0hfUE9SVF9OVUxMKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKG1lc3NhZ2VSZXN1bHQgPT0gS0VSTl9TVUNDRVNTKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIW1hY2hfZXhjX3NlcnZlcigmbWVzc2FnZUhlYWRlckluLmhlYWRlciwg
Jm1lc3NhZ2VIZWFkZXJPdXQuaGVhZGVyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
UkFTSCgpOworCisgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlUmVzdWx0ID0gbWFjaF9t
c2coJm1lc3NhZ2VIZWFkZXJPdXQuaGVhZGVyLCBNQUNIX1NFTkRfTVNHLCBtZXNzYWdlSGVhZGVy
T3V0LmhlYWRlci5tc2doX3NpemUsIDAsIG1lc3NhZ2VIZWFkZXJPdXQuaGVhZGVyLm1zZ2hfbG9j
YWxfcG9ydCwgMCwgTUFDSF9QT1JUX05VTEwpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQobWVzc2FnZVJlc3VsdCA9PSBLRVJOX1NVQ0NFU1MpOworICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiRmFpbGVk
IHRvIHJlY2VpdmUgbWFjaCBtZXNzYWdlIGR1ZSB0byAiLCBtYWNoX2Vycm9yX3N0cmluZyhtZXNz
YWdlUmVzdWx0KSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9KS5sZWFrUmVmKCk7Cisg
ICAgfSk7Cit9CisKK3N0YXRpYyBTaWduYWwgZnJvbU1hY2hFeGNlcHRpb24oZXhjZXB0aW9uX3R5
cGVfdCB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgRVhDX0JBRF9BQ0NF
U1M6IHJldHVybiBTaWduYWw6OlNlZ1Y7CisgICAgY2FzZSBFWENfQkFEX0lOU1RSVUNUSU9OOiBy
ZXR1cm4gU2lnbmFsOjpJbGw7CisgICAgY2FzZSBFWENfQlJFQUtQT0lOVDogcmV0dXJuIFNpZ25h
bDo6VHJhcDsKKyAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIFNpZ25hbDo6
VW5rbm93bjsKK30KKworc3RhdGljIGV4Y2VwdGlvbl9tYXNrX3QgdG9NYWNoTWFzayhTaWduYWwg
c2lnbmFsKQoreworICAgIHN3aXRjaCAoc2lnbmFsKSB7CisgICAgY2FzZSBTaWduYWw6OlNlZ1Y6
IHJldHVybiBFWENfTUFTS19CQURfQUNDRVNTOworICAgIGNhc2UgU2lnbmFsOjpJbGw6IHJldHVy
biBFWENfTUFTS19CQURfSU5TVFJVQ1RJT047CisgICAgY2FzZSBTaWduYWw6OlRyYXA6IHJldHVy
biBFWENfTUFTS19CUkVBS1BPSU5UOworICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitleHRlcm4gIkMiIHsKKworLy8gV2Ug
bmVlZCB0byBpbXBsZW1lbnQgc3R1YnMgZm9yIGNhdGNoX21hY2hfZXhjZXB0aW9uX3JhaXNlIGFu
ZCBjYXRjaF9tYWNoX2V4Y2VwdGlvbl9yYWlzZV9zdGF0ZV9pZGVudGl0eS4KKy8vIFRoZSBNaUcg
Z2VuZXJhdGVkIGZpbGUgd2lsbCBmYWlsIHRvIGxpbmsgb3RoZXJ3aXNlLCBldmVuIHRob3VnaCB3
ZSBkb24ndCB1c2UgdGhlIGZ1bmN0aW9ucy4gT25seSB0aGUKKy8vIGNhdGNoX21hY2hfZXhjZXB0
aW9uX3JhaXNlX3N0YXRlIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgYmVjYXVzZSB3ZSBwYXNz
IEVYQ0VQVElPTl9TVEFURSB0bworLy8gdGhyZWFkX3NldF9leGNlcHRpb25fcG9ydHMuCitrZXJu
X3JldHVybl90IGNhdGNoX21hY2hfZXhjZXB0aW9uX3JhaXNlKG1hY2hfcG9ydF90LCBtYWNoX3Bv
cnRfdCwgbWFjaF9wb3J0X3QsIGV4Y2VwdGlvbl90eXBlX3QsIG1hY2hfZXhjZXB0aW9uX2RhdGFf
dCwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCkKK3sKKyAgICBkYXRhTG9nTG4oIldlIHNob3VsZCBu
b3QgaGF2ZSBjYWxsZWQgY2F0Y2hfZXhjZXB0aW9uX3JhaXNlKCksIHBsZWFzZSBmaWxlIGEgYnVn
IGF0IGJ1Z3Mud2Via2l0Lm9yZyIpOworICAgIHJldHVybiBLRVJOX0ZBSUxVUkU7Cit9CisKK2tl
cm5fcmV0dXJuX3QgY2F0Y2hfbWFjaF9leGNlcHRpb25fcmFpc2Vfc3RhdGVfaWRlbnRpdHkobWFj
aF9wb3J0X3QsIG1hY2hfcG9ydF90LCBtYWNoX3BvcnRfdCwgZXhjZXB0aW9uX3R5cGVfdCwgbWFj
aF9leGNlcHRpb25fZGF0YV90LCBtYWNoX21zZ190eXBlX251bWJlcl90LCBpbnQqLCB0aHJlYWRf
c3RhdGVfdCwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCwgdGhyZWFkX3N0YXRlX3QsICBtYWNoX21z
Z190eXBlX251bWJlcl90KikKK3sKKyAgICBkYXRhTG9nTG4oIldlIHNob3VsZCBub3QgaGF2ZSBj
YWxsZWQgY2F0Y2hfbWFjaF9leGNlcHRpb25fcmFpc2Vfc3RhdGVfaWRlbnRpdHksIHBsZWFzZSBm
aWxlIGEgYnVnIGF0IGJ1Z3Mud2Via2l0Lm9yZyIpOworICAgIHJldHVybiBLRVJOX0ZBSUxVUkU7
Cit9CisKK2tlcm5fcmV0dXJuX3QgY2F0Y2hfbWFjaF9leGNlcHRpb25fcmFpc2Vfc3RhdGUoCisg
ICAgbWFjaF9wb3J0X3QgcG9ydCwKKyAgICBleGNlcHRpb25fdHlwZV90IGV4Y2VwdGlvblR5cGUs
CisgICAgY29uc3QgbWFjaF9leGNlcHRpb25fZGF0YV90IGV4Y2VwdGlvbkRhdGEsCisgICAgbWFj
aF9tc2dfdHlwZV9udW1iZXJfdCBkYXRhQ291bnQsCisgICAgaW50KiBzdGF0ZUZsYXZvciwKKyAg
ICBjb25zdCB0aHJlYWRfc3RhdGVfdCBpblN0YXRlLAorICAgIG1hY2hfbXNnX3R5cGVfbnVtYmVy
X3QgaW5TdGF0ZUNvdW50LAorICAgIHRocmVhZF9zdGF0ZV90IG91dFN0YXRlLAorICAgIG1hY2hf
bXNnX3R5cGVfbnVtYmVyX3QqIG91dFN0YXRlQ291bnQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQo
cG9ydCA9PSBleGNlcHRpb25Qb3J0KTsKKyAgICBTaWduYWwgc2lnbmFsID0gZnJvbU1hY2hFeGNl
cHRpb24oZXhjZXB0aW9uVHlwZSk7CisgICAgZGF0YUxvZ0xuKCJyZWNlaXZlZFNpZ25hbCAiLCBl
eGNlcHRpb25UeXBlKTsKKyAgICBkYXRhTG9nTG4oIlRocmVhZDogIiwgZXhjZXB0aW9uRGF0YVsw
XSk7CisgICAgUkVMRUFTRV9BU1NFUlQoc2lnbmFsICE9IFNpZ25hbDo6VW5rbm93bik7CisKKyAg
ICBtZW1jcHkob3V0U3RhdGUsIGluU3RhdGUsIGluU3RhdGVDb3VudCAqIHNpemVvZihpblN0YXRl
WzBdKSk7CisgICAgKm91dFN0YXRlQ291bnQgPSBpblN0YXRlQ291bnQ7CisKKyNpZiBDUFUoWDg2
XzY0KQorICAgIFJFTEVBU0VfQVNTRVJUKCpzdGF0ZUZsYXZvciA9PSB4ODZfVEhSRUFEX1NUQVRF
KTsKKyAgICBQbGF0Zm9ybVJlZ2lzdGVycyYgcmVnaXN0ZXJzID0gcmVpbnRlcnByZXRfY2FzdDx4
ODZfdGhyZWFkX3N0YXRlX3QqPihvdXRTdGF0ZSktPnV0cy50czY0OworI2VsaWYgQ1BVKEFSTTY0
KQorICAgIFJFTEVBU0VfQVNTRVJUKCpzdGF0ZUZsYXZvciA9PSBBUk1fVEhSRUFEX1NUQVRFKTsK
KyAgICBQbGF0Zm9ybVJlZ2lzdGVycyYgcmVnaXN0ZXJzID0gcmVpbnRlcnByZXRfY2FzdDxhcm1f
dW5pZmllZF90aHJlYWRfc3RhdGUqPihvdXRTdGF0ZSktPnRzXzY0OworI2VuZGlmCisKKyAgICBT
aWdJbmZvIGluZm87CisgICAgaWYgKHNpZ25hbCA9PSBTaWduYWw6OlNlZ1YpIHsKKyAgICAgICAg
QVNTRVJUX1VOVVNFRChkYXRhQ291bnQsIGRhdGFDb3VudCA9PSAyKTsKKyAgICAgICAgaW5mby5m
YXVsdGluZ0FkZHJlc3MgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihleGNlcHRpb25EYXRhWzFd
KTsKKyAgICB9CisKKyAgICBib29sIGRpZEhhbmRsZSA9IGZhbHNlOworICAgIGhhbmRsZXJzW3N0
YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0tPml0ZXJhdGUoWyZdIChjb25zdCBTaWduYWxIYW5k
bGVyJiBoYW5kbGVyKSB7CisgICAgICAgIFNpZ25hbEFjdGlvbiBoYW5kbGVyUmVzdWx0ID0gaGFu
ZGxlcihzaWduYWwsIGluZm8sIHJlZ2lzdGVycyk7CisgICAgICAgIGRhdGFMb2dMbihzdGF0aWNf
Y2FzdDxpbnQ+KGhhbmRsZXJSZXN1bHQpKTsKKyAgICAgICAgc3dpdGNoIChoYW5kbGVyUmVzdWx0
KSB7CisgICAgICAgIGNhc2UgU2lnbmFsQWN0aW9uOjpIYW5kbGVkOgorICAgICAgICAgICAgZGlk
SGFuZGxlID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIGlmIChkaWRIYW5kbGUp
CisgICAgICAgIHJldHVybiBLRVJOX1NVQ0NFU1M7CisgICAgcmV0dXJuIEtFUk5fRkFJTFVSRTsK
K30KKworfTsKKworI2VuZGlmIC8vIE9TKERBUldJTikKKworc3RhdGljIFN0YXRpY0xvY2sgdGhy
ZWFkTG9jazsKK2V4Y2VwdGlvbl9tYXNrX3QgYWN0aXZlRXhjZXB0aW9ucyB7IDAgfTsKIAotc3Rh
dGljIHZvaWQganNjU2lnbmFsSGFuZGxlcihpbnQgc2lnLCBzaWdpbmZvX3QqIGluZm8sIHZvaWQq
IG1jb250ZXh0KQoraW5saW5lIHZvaWQgc2V0RXhjZXB0aW9uUG9ydHMoY29uc3QgQWJzdHJhY3RM
b2NrZXImLCBUaHJlYWQqIHRocmVhZCkKK3sKKyAgICBrZXJuX3JldHVybl90IHJlc3VsdCA9IHRo
cmVhZF9zZXRfZXhjZXB0aW9uX3BvcnRzKHRocmVhZC0+bWFjaFRocmVhZCgpLCBhY3RpdmVFeGNl
cHRpb25zLCBleGNlcHRpb25Qb3J0LCBFWENFUFRJT05fU1RBVEUgfCBNQUNIX0VYQ0VQVElPTl9D
T0RFUywgTUFDSElORV9USFJFQURfU1RBVEUpOworICAgIGlmIChyZXN1bHQgIT0gS0VSTl9TVUND
RVNTKSB7CisgICAgICAgIGRhdGFMb2dMbigidGhyZWFkIHNldCBwb3J0IGZhaWxlZCBkdWUgdG8g
IiwgbWFjaF9lcnJvcl9zdHJpbmcocmVzdWx0KSk7CisgICAgICAgIENSQVNIKCk7CisgICAgfQor
fQorCitpbmxpbmUgSGFzaFNldDxUaHJlYWQqPiYgYWN0aXZlVGhyZWFkcyhjb25zdCBBYnN0cmFj
dExvY2tlciYpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8VGhyZWFkKj4+
IGFjdGl2ZVRocmVhZHM7CisgICAgcmV0dXJuIGFjdGl2ZVRocmVhZHM7Cit9CisKK3ZvaWQgcmVn
aXN0ZXJUaHJlYWQoVGhyZWFkKiB0aHJlYWQpCit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9j
ayh0aHJlYWRMb2NrKTsKKyAgICBhdXRvIHJlc3VsdCA9IGFjdGl2ZVRocmVhZHMobG9ja2VyKS5h
ZGQodGhyZWFkKTsKKworICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgc2V0RXhj
ZXB0aW9uUG9ydHMobG9ja2VyLCB0aHJlYWQpOworfQorCit2b2lkIHJlbW92ZVRocmVhZChUaHJl
YWQqIHRocmVhZCkKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHRocmVhZExvY2spOwor
ICAgIGFjdGl2ZVRocmVhZHMobG9ja2VyKS5yZW1vdmUodGhyZWFkKTsKK30KKworc3RhdGljIGJv
b2wgdXNlTWFjaCB7IGZhbHNlIH07Cit2b2lkIGhhbmRsZVNpZ25hbHNXaXRoTWFjaCgpCit7Cisj
aWYgT1MoREFSV0lOKQorICAgIGRlbGl2ZXJNZXNzYWdlc1VzaW5nTWFjaCgpOworICAgIHVzZU1h
Y2ggPSB0cnVlOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIGpzY1NpZ25hbEhhbmRsZXIoaW50
LCBzaWdpbmZvX3QqLCB2b2lkKik7CisKK3ZvaWQgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFs
IHNpZ25hbCwgU2lnbmFsSGFuZGxlciYmIGhhbmRsZXIpCit7CisgICAgQVNTRVJUKHNpZ25hbCA8
IFNpZ25hbDo6VW5rbm93bik7CisgICAgaWYgKHNpZ25hbCA9PSBTaWduYWw6OkJ1cyAmJiAhdXNl
TWFjaCkKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVCghdXNlTWFjaCB8fCBzaWduYWwgIT0g
U2lnbmFsOjpVc3IpOworCisjaWYgT1MoREFSV0lOKQorICAgIGlmICh1c2VNYWNoKQorICAgICAg
ICBzdGFydE1hY2hFeGNlcHRpb25IYW5kbGVyVGhyZWFkKCk7CisjZW5kaWYKKworICAgIHN0ZDo6
Y2FsbF9vbmNlKGluaXRpYWxpemVPbmNlRmxhZ3Nbc3RhdGljX2Nhc3Q8c2l6ZV90PihzaWduYWwp
XSwgWyZdIHsKKyAgICAgICAgaGFuZGxlcnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzaWduYWwpXS5j
b25zdHJ1Y3QoKTsKKworICAgICAgICBpZiAoIXVzZU1hY2gpIHsKKyAgICAgICAgICAgIHN0cnVj
dCBzaWdhY3Rpb24gYWN0aW9uOworICAgICAgICAgICAgYWN0aW9uLnNhX3NpZ2FjdGlvbiA9IGpz
Y1NpZ25hbEhhbmRsZXI7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHNpZ2ZpbGxzZXQoJmFj
dGlvbi5zYV9tYXNrKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFyZXN1bHQpOworICAg
ICAgICAgICAgYWN0aW9uLnNhX2ZsYWdzID0gU0FfU0lHSU5GTzsKKyAgICAgICAgICAgIHJlc3Vs
dCA9IHNpZ2FjdGlvbih0b1N5c3RlbVNpZ25hbChzaWduYWwpLCAmYWN0aW9uLCAmb2xkQWN0aW9u
c1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNpZ25hbCldKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKCFyZXN1bHQpOworICAgICAgICB9CisKKyAgICB9KTsKKworICAgIGhhbmRsZXJzW3N0YXRp
Y19jYXN0PHNpemVfdD4oc2lnbmFsKV0tPmFkZChXVEZNb3ZlKGhhbmRsZXIpKTsKKworI2lmIE9T
KERBUldJTikKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHRocmVhZExvY2spOworICAgIGlm
ICh1c2VNYWNoKSB7CisgICAgICAgIGFjdGl2ZUV4Y2VwdGlvbnMgfD0gdG9NYWNoTWFzayhzaWdu
YWwpOworCisgICAgICAgIGZvciAoVGhyZWFkKiB0aHJlYWQgOiBhY3RpdmVUaHJlYWRzKGxvY2tl
cikpCisgICAgICAgICAgICBzZXRFeGNlcHRpb25Qb3J0cyhsb2NrZXIsIHRocmVhZCk7CisgICAg
fQorI2VuZGlmCit9CisKK3ZvaWQganNjU2lnbmFsSGFuZGxlcihpbnQgc2lnLCBzaWdpbmZvX3Qq
IGluZm8sIHZvaWQqIG1jb250ZXh0KQogewogICAgIFNpZ25hbCBzaWduYWwgPSBmcm9tU3lzdGVt
U2lnbmFsKHNpZyk7CiAKQEAgLTYyLDEwICsyOTgsMTYgQEAgc3RhdGljIHZvaWQganNjU2lnbmFs
SGFuZGxlcihpbnQgc2lnLCBzaWdpbmZvX3QqIGluZm8sIHZvaWQqIG1jb250ZXh0KQogICAgICAg
ICByZXR1cm47CiAgICAgfQogCisgICAgU2lnSW5mbyBzaWdJbmZvOworICAgIGlmIChzaWduYWwg
PT0gU2lnbmFsOjpTZWdWIHx8IHNpZ25hbCA9PSBTaWduYWw6OkJ1cykKKyAgICAgICAgc2lnSW5m
by5mYXVsdGluZ0FkZHJlc3MgPSBpbmZvLT5zaV9hZGRyOworCisgICAgUGxhdGZvcm1SZWdpc3Rl
cnMmIHJlZ2lzdGVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8bWNvbnRleHRfdD4obWNvbnRleHQpLT5f
X3NzOworCiAgICAgYm9vbCBkaWRIYW5kbGUgPSBmYWxzZTsKICAgICBib29sIHJlc3RvcmVEZWZh
dWx0SGFuZGxlciA9IGZhbHNlOwogICAgIGhhbmRsZXJzW3N0YXRpY19jYXN0PHNpemVfdD4oc2ln
bmFsKV0tPml0ZXJhdGUoWyZdIChjb25zdCBTaWduYWxIYW5kbGVyJiBoYW5kbGVyKSB7Ci0gICAg
ICAgIHN3aXRjaCAoaGFuZGxlcihzaWcsIGluZm8sIG1jb250ZXh0KSkgeworICAgICAgICBzd2l0
Y2ggKGhhbmRsZXIoc2lnbmFsLCBzaWdJbmZvLCByZWdpc3RlcnMpKSB7CiAgICAgICAgIGNhc2Ug
U2lnbmFsQWN0aW9uOjpIYW5kbGVkOgogICAgICAgICAgICAgZGlkSGFuZGxlID0gdHJ1ZTsKICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtMTAwLDI0ICszNDIsNiBAQCBzdGF0aWMgdm9pZCBqc2NTaWdu
YWxIYW5kbGVyKGludCBzaWcsIHNpZ2luZm9fdCogaW5mbywgdm9pZCogbWNvbnRleHQpCiAgICAg
fQogfQogCi12b2lkIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbCBzaWduYWwsIFNpZ25hbEhh
bmRsZXImJiBoYW5kbGVyKQotewotICAgIEFTU0VSVChzaWduYWwgPCBTaWduYWw6OlVua25vd24p
OwotICAgIHN0ZDo6Y2FsbF9vbmNlKGluaXRpYWxpemVPbmNlRmxhZ3Nbc3RhdGljX2Nhc3Q8c2l6
ZV90PihzaWduYWwpXSwgWyZdIHsKLSAgICAgICAgaGFuZGxlcnNbc3RhdGljX2Nhc3Q8c2l6ZV90
PihzaWduYWwpXS5jb25zdHJ1Y3QoKTsKLQotICAgICAgICBzdHJ1Y3Qgc2lnYWN0aW9uIGFjdGlv
bjsKLSAgICAgICAgYWN0aW9uLnNhX3NpZ2FjdGlvbiA9IGpzY1NpZ25hbEhhbmRsZXI7Ci0gICAg
ICAgIGF1dG8gcmVzdWx0ID0gc2lnZmlsbHNldCgmYWN0aW9uLnNhX21hc2spOwotICAgICAgICBS
RUxFQVNFX0FTU0VSVCghcmVzdWx0KTsKLSAgICAgICAgYWN0aW9uLnNhX2ZsYWdzID0gU0FfU0lH
SU5GTzsKLSAgICAgICAgcmVzdWx0ID0gc2lnYWN0aW9uKHRvU3lzdGVtU2lnbmFsKHNpZ25hbCks
ICZhY3Rpb24sICZvbGRBY3Rpb25zW3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0pOwotICAg
ICAgICBSRUxFQVNFX0FTU0VSVCghcmVzdWx0KTsKLSAgICB9KTsKLQotICAgIGhhbmRsZXJzW3N0
YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0tPmFkZChXVEZNb3ZlKGhhbmRsZXIpKTsKLX0KLQog
fSAvLyBuYW1lc3BhY2UgV1RGCiAKICNlbmRpZiAvLyBVU0UoUFRIUkVBRFMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi90aHJlYWRzL1NpZ25hbHMuaCBiL1NvdXJjZS9XVEYvd3RmL3RocmVh
ZHMvU2lnbmFscy5oCmluZGV4IDFlNGViNDZlYWE3NzRhMWVlODlmNmZiMmRhZWYzMzI2OGNlNTY3
NzkuLjgxYWIwMDQyNmQxMGZjZmQyZDJkNTJiMzdiNWIxNzVjNTY2YWI4YTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL3RocmVhZHMvU2lnbmFscy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3Ro
cmVhZHMvU2lnbmFscy5oCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlIDxzaWduYWwuaD4K
ICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm1SZWdpc3Rl
cnMuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKQEAgLTc5LDcgKzgwLDExIEBAIGVudW0gY2xhc3Mg
U2lnbmFsQWN0aW9uIHsKICAgICBGb3JjZURlZmF1bHQKIH07CiAKLXVzaW5nIFNpZ25hbEhhbmRs
ZXIgPSBGdW5jdGlvbjxTaWduYWxBY3Rpb24oaW50LCBzaWdpbmZvX3QqLCB2b2lkKik+Oworc3Ry
dWN0IFNpZ0luZm8geworICAgIHZvaWQqIGZhdWx0aW5nQWRkcmVzcyB7IDAgfTsKK307CisKK3Vz
aW5nIFNpZ25hbEhhbmRsZXIgPSBGdW5jdGlvbjxTaWduYWxBY3Rpb24oU2lnbmFsLCBTaWdJbmZv
JiwgUGxhdGZvcm1SZWdpc3RlcnMmKT47CiAKIC8vIENhbGwgdGhpcyBtZXRob2Qgd2hlbmV2ZXIg
eW91IHdhbnQgdG8gaW5zdGFsbCBhIHNpZ25hbCBoYW5kbGVyLiBJdCdzIG9rIHRvIGNhbGwgdGhp
cyBmdW5jdGlvbiBsYXppbHkuCiAvLyBOb3RlOiBZb3VyIHNpZ25hbCBoYW5kbGVyIHdpbGwgYmUg
Y2FsbGVkIGV2ZXJ5IHRpbWUgdGhlIGhhbmRsZXIgZm9yIHRoZSBkZXNpcmVkIHNpZ25hbCBpcyBj
YWxsZWQuCkBAIC04Nyw5ICs5MiwxOSBAQCB1c2luZyBTaWduYWxIYW5kbGVyID0gRnVuY3Rpb248
U2lnbmFsQWN0aW9uKGludCwgc2lnaW5mb190Kiwgdm9pZCopPjsKIC8vIFRoaXMgZnVuY3Rpb24g
aXMgY3VycmVudGx5IGEgb25lIHdheSBzdHJlZXQgaS5lLiBvbmNlIGluc3RhbGxlZCwgYSBzaWdu
YWwgaGFuZGxlciBjYW5ub3QgYmUgdW5pbnN0YWxsZWQuCiB2b2lkIGluc3RhbGxTaWduYWxIYW5k
bGVyKFNpZ25hbCwgU2lnbmFsSGFuZGxlciYmKTsKIAorCisjaWYgT1MoREFSV0lOKQorY2xhc3Mg
VGhyZWFkOwordm9pZCByZWdpc3RlclRocmVhZChUaHJlYWQqKTsKK3ZvaWQgcmVtb3ZlVGhyZWFk
KFRocmVhZCopOworCit2b2lkIGhhbmRsZVNpZ25hbHNXaXRoTWFjaCgpOworI2VuZGlmCisKIH0g
Ly8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6OlNpZ25hbDsKK3VzaW5nIFdURjo6U2lnSW5m
bzsKIHVzaW5nIFdURjo6dG9TeXN0ZW1TaWduYWw7CiB1c2luZyBXVEY6OmZyb21TeXN0ZW1TaWdu
YWw7CiB1c2luZyBXVEY6OlNpZ25hbEFjdGlvbjsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxv
ZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAxN2Y5ZjAxMTEzMTAyYThhNGIxN2ZjZTRhZjFkOTVl
Yjg2MDA2OWRiLi42Y2RhNDg0MTA2NWNlMDRhOTFiOGRiNWUyYjIwMjhjNDBlYzA1YTZmIDEwMDY0
NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTQgQEAKKzIwMTctMDUtMTEgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+
CisKKyAgICAgICAgVXNlIE1hY2ggZXhjZXB0aW9ucyBpbnN0ZWFkIG9mIHNpZ25hbHMgd2hlcmUg
cG9zc2libGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3MTg2NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVGhyZWFkTWVzc2FnZXMuY3BwOgorICAgICAgICAo
cnVuVGhyZWFkTWVzc2FnZVRlc3QpOgorICAgICAgICAoVEVTVCk6CisKIDIwMTctMDUtMDkgIFNh
bSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZW1vdmUgc3VwcG9ydCBmb3Ig
bGVnYWN5IE5vdGlmaWNhdGlvbnMKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV1RGL1RocmVhZE1lc3NhZ2VzLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RG
L1RocmVhZE1lc3NhZ2VzLmNwcAppbmRleCBkNjNlOWJmMWU3NTA2OGI2YzFhN2U3ZTZlOGI2N2M0
ZWIwNTE1ODgyLi5lNmE1Nzg5NGJiNTE2ZmUxY2U3MTNkMDdiZjE4ZjA3MDZlZmE5MzdjIDEwMDY0
NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9UaHJlYWRNZXNzYWdlcy5jcHAK
KysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVGhyZWFkTWVzc2FnZXMuY3BwCkBA
IC01MCw3ICs1MCw3IEBAIHN0YXRpYyB2b2lkIHJ1blRocmVhZE1lc3NhZ2VUZXN0KHVuc2lnbmVk
IG51bVNlbmRlcnMsIHVuc2lnbmVkIG51bU1lc3NhZ2VzKQogICAgIGZvciAodW5zaWduZWQgc2Vu
ZGVySUQgPSAwOyBzZW5kZXJJRCA8IG51bVNlbmRlcnM7ICsrc2VuZGVySUQpIHsKICAgICAgICAg
c2VuZGVyVGhyZWFkc1tzZW5kZXJJRF0gPSBUaHJlYWQ6OmNyZWF0ZSgiVGhyZWFkTWVzc2FnZSBz
ZW5kZXIiLCBbc2VuZGVySUQsIG51bU1lc3NhZ2VzLCByZWNlaXZlclRocmVhZCwgJm1lc3NhZ2Vz
UnVuLCAmaGFuZGxlcnNSdW5dICgpIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBudW1NZXNzYWdlczsgKytpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBz
ZW5kTWVzc2FnZSgqcmVjZWl2ZXJUaHJlYWQuZ2V0KCksIFtzZW5kZXJJRCwgJmhhbmRsZXJzUnVu
XSAoc2lnaW5mb190KiwgdWNvbnRleHRfdCopIHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3Vs
dCA9IHNlbmRNZXNzYWdlKCpyZWNlaXZlclRocmVhZC5nZXQoKSwgW3NlbmRlcklELCAmaGFuZGxl
cnNSdW5dIChQbGF0Zm9ybVJlZ2lzdGVycyYpIHsKICAgICAgICAgICAgICAgICAgICAgaGFuZGxl
cnNSdW5bc2VuZGVySURdKys7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAg
RVhQRUNUX1RSVUUocmVzdWx0ID09IFdURjo6TWVzc2FnZVN0YXR1czo6TWVzc2FnZVJhbik7CkBA
IC05NSw3ICs5NSw3IEBAIHB1YmxpYzoKIFRFU1QoVGhyZWFkTWVzc2FnZSwgU2lnbmFsc1dvcmtP
bkV4aXQpCiB7CiAgICAgc3RhdGljIGJvb2wgaGFuZGxlclJhbiA9IGZhbHNlOwotICAgIGluc3Rh
bGxTaWduYWxIYW5kbGVyKFNpZ25hbDo6VXNyLCBbXSAoaW50LCBzaWdpbmZvX3QqLCB2b2lkKikg
LT4gU2lnbmFsQWN0aW9uIHsKKyAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWw6OlVzciwg
W10gKFNpZ25hbCwgU2lnSW5mbyYsIFBsYXRmb3JtUmVnaXN0ZXJzJikgLT4gU2lnbmFsQWN0aW9u
IHsKICAgICAgICAgZGF0YUxvZ0xuKCJoZXJlIik7CiAgICAgICAgIGhhbmRsZXJSYW4gPSB0cnVl
OwogICAgICAgICByZXR1cm4gU2lnbmFsQWN0aW9uOjpIYW5kbGVkOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309732</attachid>
            <date>2017-05-11 11:28:19 -0700</date>
            <delta_ts>2017-05-11 12:31:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171865-20170511112818.patch</filename>
            <type>text/plain</type>
            <size>48486</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE2Njc3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
YzIyOWE0ZjkxMDMxZGZlOTU1YTQxMGIyMDI0Njc2ZTFmM2NkZWIxLi5lNzZkODk3ZjUzNjc3ZWI3
NTBiMjM0YTUxNGFmMzQ1YjI3OTI4YjEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MCBAQAorMjAxNy0wNS0xMSAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBVc2UgTWFjaCBleGNlcHRpb25zIGluc3RlYWQgb2Ygc2lnbmFscyB3
aGVyZSBwb3NzaWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTcxODY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhpcyBwYXRjaCBhZGRzIHNvbWUgbmV3IEpTQyBvcHRpb25zLiBUaGUgZmlyc3QgaXMg
YW4gb3B0aW9uIHRoYXQKKyAgICAgICAgZW5hYmxlcyBvciBkaXNhYmxlcyB3ZWIgYXNzZW1ibHkg
dGllciB1cC4gVGhlIHNlY29uZCBjb250cm9scworICAgICAgICB3aGV0aGVyIG9yIG5vdCB3ZSB1
c2UgbWFjaCBleGNlcHRpb25zICh3aGVyZSBhdmFpbGFibGUpLgorCisgICAgICAgICogQVBJL3Rl
c3RzL0V4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwOgorICAgICAgICAoZGlzcGF0Y2hUZXJtaXRh
dGVDYWxsYmFjayk6CisgICAgICAgICh0ZXN0RXhlY3V0aW9uVGltZUxpbWl0KToKKyAgICAgICAg
KiBydW50aW1lL0pTTG9jay5jcHA6CisgICAgICAgIChKU0M6OkpTTG9jazo6ZGlkQWNxdWlyZUxv
Y2spOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OnJlY29t
cHV0ZURlcGVuZGVudE9wdGlvbnMpOgorICAgICAgICAoSlNDOjpPcHRpb25zOjppbml0aWFsaXpl
KToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKyAgICAgICAgKiBydW50aW1lL1ZNVHJh
cHMuY3BwOgorICAgICAgICAoSlNDOjpTaWduYWxDb250ZXh0OjpTaWduYWxDb250ZXh0KToKKyAg
ICAgICAgKEpTQzo6U2lnbmFsQ29udGV4dDo6YWRqdXN0UENUb1BvaW50VG9UcmFwcGluZ0luc3Ry
dWN0aW9uKToKKyAgICAgICAgKEpTQzo6aW5zdGFsbFNpZ25hbEhhbmRsZXIpOgorICAgICAgICAo
SlNDOjpWTVRyYXBzOjpTaWduYWxTZW5kZXI6OnNlbmQpOgorICAgICAgICAqIHRvb2xzL1NpZ2ls
bENyYXNoQW5hbHl6ZXIuY3BwOgorICAgICAgICAoSlNDOjpTaWduYWxDb250ZXh0OjpTaWduYWxD
b250ZXh0KToKKyAgICAgICAgKEpTQzo6U2lnbmFsQ29udGV4dDo6ZHVtcCk6CisgICAgICAgIChK
U0M6Omluc3RhbGxDcmFzaEhhbmRsZXIpOgorICAgICAgICAqIHdhc20vV2FzbUJCUVBsYW4uY3Bw
OgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKToKKyAgICAg
ICAgKiB3YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwOgorICAgICAgICAoSlNDOjpXYXNt
Ojp0cmFwSGFuZGxlcik6CisgICAgICAgIChKU0M6Oldhc206OmVuYWJsZUZhc3RNZW1vcnkpOgor
ICAgICAgICAqIHdhc20vV2FzbU1hY2hpbmVUaHJlYWRzLmNwcDoKKyAgICAgICAgKEpTQzo6V2Fz
bTo6cmVzZXRJbnN0cnVjdGlvbkNhY2hlT25BbGxUaHJlYWRzKToKKwogMjAxNy0wNS0xMSAgTWFy
ayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgV29ya2VyVGhyZWFkOjpzdG9w
KCkgc2hvdWxkIGNhbGwgc2NoZWR1bGVFeGVjdXRpb25UZXJtaW5hdGlvbigpIGxhc3QuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4
IGVjZGRiMzNmYmVkNTIxMTFiYzA3MTk1ZDZjMDhmZTQwNmIyYzFhMzUuLjlkMGY4MzYzOTRmM2Q5
NjY1ZTU2MjBjNzkxMjdlYmEyYTI3YjUyOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTMgQEAKKzIwMTctMDUt
MTEgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CisKKyAgICAgICAgVXNl
IE1hY2ggZXhjZXB0aW9ucyBpbnN0ZWFkIG9mIHNpZ25hbHMgd2hlcmUgcG9zc2libGUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MTg2NQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZW5h
YmxlcyB1c2luZyBtYWNoIGV4Y2VwdGlvbnMgb24gZGFyd2luLiBUaGUgd2F5IHRoZQorICAgICAg
ICBtYWNoIGV4Y2VwdGlvbiBhcGkgd29ya3MgaXMgdGhhdCB3ZSBjcmVhdGUgYSBtYWNoIHBvcnQs
IHdoaWNoIGlzCisgICAgICAgIGxpa2UgYSBmaWxlIGRlc2NyaXB0b3IuICBXZSB0aGVuIHdhaXQg
Zm9yIGEgbWVzc2FnZSB0byBhcnJpdmUgb24KKyAgICAgICAgdGhhdCBwb3J0IGluIGEgdGhyZWFk
LiBXaGVuIGFub3RoZXIgdGhyZWFkIHJhaXNlcyBhIGV4Y2VwdGlvbiAoc2F5CisgICAgICAgIGR1
ZSB0byBhIGJhZCBtZW1vcnkgYWNjZXNzKSB0aGUgT1Mgc2VuZHMgb3VyIHRocmVhZCBhIG1lc3Nh
Z2UuIFRoZQorICAgICAgICBwYXlsb2FkIG9mIHRoYXQgbWVzc2FnZSBpcyB0aGUgcmVnaXN0ZXIg
ZmlsZSBvZiB0aGUgY3Jhc2hpbmcKKyAgICAgICAgdGhyZWFkLiBXZSB0aGVuIGNhbGwgb3VyIGN1
c3RvbSBoYW5kbGVycyB0aGF0IGNoYW5nZSB0aGUgc3RhdGUgYXMKKyAgICAgICAgbmVlZGVkLiBJ
biBvcmRlciB0byByZXN0YXJ0IHRoZSB0aHJlYWQgd2Ugc2VuZCBhIHBheWxvYWQgYmFjayB0bwor
ICAgICAgICB0aGUgT1Mgd2l0aCBhbiB1cGRhdGVkIHJlZ2lzdGVyIGZpbGUgYWxvbmcgd2l0aCBh
IHN1Y2Nlc3MgbWVzc2FnZQorICAgICAgICBoZWFkZXIuCisKKyAgICAgICAgVGhpcyBwYXRjaCBh
bHNvIG1ha2VzIHRocmVhZCBtZXNzYWdlcyB3b3JrIHdpdGhvdXQgc2lnbmFscyBieQorICAgICAg
ICBzaW1wbHkgc3VzcGVuZGluZyB0aGUgdGhyZWFkIHRoZW4gcnVubmluZyB0aGUgbWVzc2FnZSBh
dCB0aGF0CisgICAgICAgIHRpbWUuCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiB3dGYvU3RhY2tCb3VuZHMuaDoKKyAgICAgICAgKFdURjo6U3Rh
Y2tCb3VuZHM6OlN0YWNrQm91bmRzKToKKyAgICAgICAgKiB3dGYvVGhyZWFkSG9sZGVyLmNwcDoK
KyAgICAgICAgKFdURjo6VGhyZWFkSG9sZGVyOjp+VGhyZWFkSG9sZGVyKToKKyAgICAgICAgKiB3
dGYvVGhyZWFkTWVzc2FnZS5jcHA6CisgICAgICAgIChXVEY6OnNlbmRNZXNzYWdlU2lnbmFsKToK
KyAgICAgICAgKFdURjo6c2VuZE1lc3NhZ2VNYWNoKToKKyAgICAgICAgKFdURjo6ZGVsaXZlck1l
c3NhZ2VzVXNpbmdNYWNoKToKKyAgICAgICAgKFdURjo6c2VuZE1lc3NhZ2VTY29wZWQpOgorICAg
ICAgICAqIHd0Zi9UaHJlYWRNZXNzYWdlLmg6CisgICAgICAgIChXVEY6OnNlbmRNZXNzYWdlKToK
KyAgICAgICAgKiB3dGYvVGhyZWFkaW5nLmg6CisgICAgICAgIChXVEY6OlRocmVhZDo6bWFjaFRo
cmVhZCk6CisgICAgICAgICogd3RmL21hYy9NYWNoRXhjZXB0aW9ucy5kZWZzOiBDb3BpZWQgZnJv
bSBTb3VyY2UvV1RGL3d0Zi9UaHJlYWRNZXNzYWdlLmguCisgICAgICAgICogd3RmL3RocmVhZHMv
U2lnbmFscy5jcHA6CisgICAgICAgIChXVEY6OnN0YXJ0TWFjaEV4Y2VwdGlvbkhhbmRsZXJUaHJl
YWQpOgorICAgICAgICAoV1RGOjpmcm9tTWFjaEV4Y2VwdGlvbik6CisgICAgICAgIChXVEY6OnRv
TWFjaE1hc2spOgorICAgICAgICAoV1RGOjpzZXRFeGNlcHRpb25Qb3J0cyk6CisgICAgICAgIChX
VEY6OmFjdGl2ZVRocmVhZHMpOgorICAgICAgICAoV1RGOjpyZWdpc3RlclRocmVhZCk6CisgICAg
ICAgIChXVEY6OnJlbW92ZVRocmVhZCk6CisgICAgICAgIChXVEY6OmhhbmRsZVNpZ25hbHNXaXRo
TWFjaCk6CisgICAgICAgIChXVEY6Omluc3RhbGxTaWduYWxIYW5kbGVyKToKKyAgICAgICAgKFdU
Rjo6anNjU2lnbmFsSGFuZGxlcik6CisgICAgICAgICogd3RmL3RocmVhZHMvU2lnbmFscy5oOgor
CiAyMDE3LTA1LTA5ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVt
b3ZlIHN1cHBvcnQgZm9yIGxlZ2FjeSBOb3RpZmljYXRpb25zCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0V4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9FeGVjdXRpb25UaW1lTGltaXRUZXN0LmNwcApp
bmRleCBkNWU1MzI0M2I3OGRmNzUxMzQyYWQ4ZDM5MGE0YjA0MTNkOWVlZjllLi43ZWFjMDczMDlk
ZGMzZjE2NDk0NTBiZDAzNzlkMmNhMThmMDE2OWFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL3Rlc3RzL0V4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5jcHAKQEAg
LTMwLDggKzMwLDEzIEBACiAjaW5jbHVkZSAiSlNDb250ZXh0UmVmUHJpdmF0ZS5oIgogI2luY2x1
ZGUgIkphdmFTY3JpcHRDb3JlLmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5oIgorCiAjaW5jbHVkZSA8
Y2hyb25vPgorI2luY2x1ZGUgPGRpc3BhdGNoL2Rpc3BhdGNoLmg+CisjaW5jbHVkZSA8d3RmL0F0
b21pY3MuaD4KKyNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL0N1cnJl
bnRUaW1lLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdCdWlsZGVyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ6OmNocm9ubzsKQEAgLTc3LDYgKzgy
LDEzIEBAIHN0YXRpYyBib29sIGV4dGVuZFRlcm1pbmF0ZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBj
dHgsIHZvaWQqKQogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIGRpc3BhdGNoVGVybWluYXRl
Q2FsbGJhY2tDYWxsZWQgPSBmYWxzZTsKK3N0YXRpYyBib29sIGRpc3BhdGNoVGVybWl0YXRlQ2Fs
bGJhY2soSlNDb250ZXh0UmVmLCB2b2lkKikKK3sKKyAgICBkaXNwYXRjaFRlcm1pbmF0ZUNhbGxi
YWNrQ2FsbGVkID0gdHJ1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogc3RydWN0IFRpZXJPcHRp
b25zIHsKICAgICBjb25zdCBjaGFyKiB0aWVyOwogICAgIHVuc2lnbmVkIHRpbWVMaW1pdEFkanVz
dG1lbnRNaWxsaXM7CkBAIC0zNjUsNiArMzc3LDYzIEBAIGludCB0ZXN0RXhlY3V0aW9uVGltZUxp
bWl0KCkKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCisgICAgICAgIC8qIFRlc3Qgc2NyaXB0
IHRpbWVvdXQgZnJvbSBkaXNwYXRjaCBxdWV1ZTogKi8KKyAgICAgICAgdGltZUxpbWl0ID0gKDEw
MCArIHRpZXJBZGp1c3RtZW50TWlsbGlzKSAvIDEwMDAuMDsKKyAgICAgICAgSlNDb250ZXh0R3Jv
dXBTZXRFeGVjdXRpb25UaW1lTGltaXQoY29udGV4dEdyb3VwLCB0aW1lTGltaXQsIGRpc3BhdGNo
VGVybWl0YXRlQ2FsbGJhY2ssIDApOworICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCB0
aW1lQWZ0ZXJXYXRjaGRvZ1Nob3VsZEhhdmVGaXJlZCA9IDMwMCArIHRpZXJBZGp1c3RtZW50TWls
bGlzOworCisgICAgICAgICAgICBTdHJpbmdCdWlsZGVyIHNjcmlwdEJ1aWxkZXI7CisgICAgICAg
ICAgICBzY3JpcHRCdWlsZGVyLmFwcGVuZExpdGVyYWwoImZ1bmN0aW9uIGZvbygpIHsgdmFyIHN0
YXJ0VGltZSA9IGN1cnJlbnRDUFVUaW1lKCk7IHdoaWxlICh0cnVlKSB7IGZvciAodmFyIGkgPSAw
OyBpIDwgMTAwMDsgaSsrKTsgaWYgKGN1cnJlbnRDUFVUaW1lKCkgLSBzdGFydFRpbWUgPiAiKTsK
KyAgICAgICAgICAgIHNjcmlwdEJ1aWxkZXIuYXBwZW5kTnVtYmVyKHRpbWVBZnRlcldhdGNoZG9n
U2hvdWxkSGF2ZUZpcmVkIC8gMTAwMC4wKTsKKyAgICAgICAgICAgIHNjcmlwdEJ1aWxkZXIuYXBw
ZW5kTGl0ZXJhbCgiKSBicmVhazsgfSB9IGZvbygpOyIpOworCisgICAgICAgICAgICBKU1N0cmlu
Z1JlZiBzY3JpcHQgPSBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhzY3JpcHRCdWlsZGVy
LnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBleGNlcHRpb24gPSBudWxs
cHRyOworICAgICAgICAgICAgZGlzcGF0Y2hUZXJtaW5hdGVDYWxsYmFja0NhbGxlZCA9IGZhbHNl
OworCisgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGRvIHRoaXMgc2luY2UgYmxvY2tzIGNhbiBv
bmx5IGNhcHR1cmUgdGhpbmdzIGFzIGNvbnN0LgorICAgICAgICAgICAgSlNHbG9iYWxDb250ZXh0
UmVmJiBjb250ZXh0UmVmID0gY29udGV4dDsKKyAgICAgICAgICAgIEpTU3RyaW5nUmVmJiBzY3Jp
cHRSZWYgPSBzY3JpcHQ7CisgICAgICAgICAgICBKU1ZhbHVlUmVmJiBleGNlcHRpb25SZWYgPSBl
eGNlcHRpb247CisKKyAgICAgICAgICAgIExvY2sgc3luY0xvY2s7CisgICAgICAgICAgICBMb2Nr
JiBzeW5jTG9ja1JlZiA9IHN5bmNMb2NrOworICAgICAgICAgICAgQ29uZGl0aW9uIHN5bmNocm9u
aXplOworICAgICAgICAgICAgQ29uZGl0aW9uJiBzeW5jaHJvbml6ZVJlZiA9IHN5bmNocm9uaXpl
OworICAgICAgICAgICAgYm9vbCBkaWRTeW5jaHJvbml6ZSA9IGZhbHNlOworICAgICAgICAgICAg
Ym9vbCYgZGlkU3luY2hyb25pemVSZWYgPSBkaWRTeW5jaHJvbml6ZTsKKworICAgICAgICAgICAg
c3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcyBzdGFydFRpbWU7CisgICAgICAgICAgICBzdGQ6OmNo
cm9ubzo6bWljcm9zZWNvbmRzIGVuZFRpbWU7CisKKyAgICAgICAgICAgIHN0ZDo6Y2hyb25vOjpt
aWNyb3NlY29uZHMmIHN0YXJ0VGltZVJlZiA9IHN0YXJ0VGltZTsKKyAgICAgICAgICAgIHN0ZDo6
Y2hyb25vOjptaWNyb3NlY29uZHMmIGVuZFRpbWVSZWYgPSBlbmRUaW1lOworCisgICAgICAgICAg
ICBkaXNwYXRjaF9ncm91cF90IGdyb3VwID0gZGlzcGF0Y2hfZ3JvdXBfY3JlYXRlKCk7CisgICAg
ICAgICAgICBkaXNwYXRjaF9ncm91cF9hc3luYyhncm91cCwgZGlzcGF0Y2hfZ2V0X2dsb2JhbF9x
dWV1ZSgwLCAwKSwgXnsKKyAgICAgICAgICAgICAgICBzdGFydFRpbWVSZWYgPSBjdXJyZW50Q1BV
VGltZSgpOworICAgICAgICAgICAgICAgIEpTRXZhbHVhdGVTY3JpcHQoY29udGV4dFJlZiwgc2Ny
aXB0UmVmLCBudWxscHRyLCBudWxscHRyLCAxLCAmZXhjZXB0aW9uUmVmKTsKKyAgICAgICAgICAg
ICAgICBlbmRUaW1lUmVmID0gY3VycmVudENQVVRpbWUoKTsKKyAgICAgICAgICAgICAgICBhdXRv
IGxvY2tlciA9IFdURjo6aG9sZExvY2soc3luY0xvY2tSZWYpOworICAgICAgICAgICAgICAgIGRp
ZFN5bmNocm9uaXplUmVmID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZVJlZi5u
b3RpZnlBbGwoKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKHN5bmNMb2NrKTsKKyAgICAgICAgICAgIHN5bmNocm9uaXplLndhaXQoc3luY0xv
Y2ssIFsmXSB7IHJldHVybiBkaWRTeW5jaHJvbml6ZTsgfSk7CisKKyAgICAgICAgICAgIGlmICgo
KGVuZFRpbWUgLSBzdGFydFRpbWUpIDwgbWlsbGlzZWNvbmRzKHRpbWVBZnRlcldhdGNoZG9nU2hv
dWxkSGF2ZUZpcmVkKSkgJiYgZGlzcGF0Y2hUZXJtaW5hdGVDYWxsYmFja0NhbGxlZCkKKyAgICAg
ICAgICAgICAgICBwcmludGYoIlBBU1M6ICVzIHNjcmlwdCBvbiBkaXNwYXRjaCBxdWV1ZSB0aW1l
ZCBvdXQgYXMgZXhwZWN0ZWQuXG4iLCB0aWVyT3B0aW9ucy50aWVyKTsKKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgIGlmICgoZW5kVGltZSAtIHN0YXJ0VGltZSkgPj0gbWlsbGlz
ZWNvbmRzKHRpbWVBZnRlcldhdGNoZG9nU2hvdWxkSGF2ZUZpcmVkKSkKKyAgICAgICAgICAgICAg
ICAgICAgcHJpbnRmKCJGQUlMOiAlcyBzY3JpcHQgb24gZGlzcGF0Y2ggcXVldWUgZGlkIG5vdCB0
aW1lIG91dCBhcyBleHBlY3RlZC5cbiIsIHRpZXJPcHRpb25zLnRpZXIpOworICAgICAgICAgICAg
ICAgIGlmICghc2hvdWxkVGVybWluYXRlQ2FsbGJhY2tXYXNDYWxsZWQpCisgICAgICAgICAgICAg
ICAgICAgIHByaW50ZigiRkFJTDogJXMgc2NyaXB0IG9uIGRpc3BhdGNoIHF1ZXVlIHRpbWVvdXQg
Y2FsbGJhY2sgd2FzIG5vdCBjYWxsZWQuXG4iLCB0aWVyT3B0aW9ucy50aWVyKTsKKyAgICAgICAg
ICAgICAgICBmYWlsZWQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKICAgICAg
ICAgSlNHbG9iYWxDb250ZXh0UmVsZWFzZShjb250ZXh0KTsKIAogICAgICAgICBPcHRpb25zOjpz
ZXRPcHRpb25zKHNhdmVkT3B0aW9uc0J1aWxkZXIudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAppbmRleCBjMTc1YWUwYzQ4
MmVkMjdiZDVmNmJkYzg3OTY4ZTc1ZDQ1YWY1MGVmLi42MTI4N2M3MzQ3MjE2ZGEzNjAxZDM1NGUy
MTRiY2I5MjhlZWVhNmRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0xvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5j
cHAKQEAgLTMwLDYgKzMwLDggQEAKICNpbmNsdWRlICJTYW1wbGluZ1Byb2ZpbGVyLmgiCiAjaW5j
bHVkZSAiV2FzbU1hY2hpbmVUaHJlYWRzLmgiCiAjaW5jbHVkZSA8dGhyZWFkPgorI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGhyZWFkcy9TaWduYWxzLmg+CiAKIG5h
bWVzcGFjZSBKU0MgewogCkBAIC0xNDgsNiArMTUwLDEwIEBAIHZvaWQgSlNMb2NrOjpkaWRBY3F1
aXJlTG9jaygpCiAgICAgV2FzbTo6c3RhcnRUcmFja2luZ0N1cnJlbnRUaHJlYWQoKTsKICNlbmRp
ZgogCisjaWYgT1MoREFSV0lOKQorICAgIFdURjo6cmVnaXN0ZXJUaHJlYWQoJlRocmVhZDo6Y3Vy
cmVudCgpKTsKKyNlbmRpZgorCiAgICAgbV92bS0+dHJhcHMoKS5ub3RpZnlHcmFiQWxsTG9ja3Mo
KTsKIAogI2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3B0aW9ucy5jcHAKaW5kZXggYjA0ZGUzNWE1MzYxNTA4NDM4NTc1YzIyN2E1MDE0
ZGQwYzUxYmFhMi4uMDY1ZTQ0NDE3NTg4NTEwOGI3N2FmODVlMTFmNTkyYmI5YjE3YTBiNSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKQEAgLTQzLDYgKzQzLDcg
QEAKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ0V4
dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRlIDx3
dGYvdGhyZWFkcy9TaWduYWxzLmg+CiAKICNpZiBQTEFURk9STShDT0NPQSkKICNpbmNsdWRlIDxj
cnRfZXh0ZXJucy5oPgpAQCAtMzU0LDYgKzM1NSwxMCBAQCBzdGF0aWMgdm9pZCBvdmVycmlkZURl
ZmF1bHRzKCkKICNpZiAhRU5BQkxFKFdFQkFTU0VNQkxZX0ZBU1RfTUVNT1JZKQogICAgIE9wdGlv
bnM6OnVzZVdlYkFzc2VtYmx5RmFzdE1lbW9yeSgpID0gZmFsc2U7CiAjZW5kaWYKKworI2lmIE9T
KERBUldJTikKKyAgICBPcHRpb25zOjp1c2VNYWNoRm9yRXhjZXB0aW9ucygpID0gdHJ1ZTsKKyNl
bmRpZgogfQogCiBzdGF0aWMgdm9pZCByZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKCkKQEAgLTU0
NSw2ICs1NTAsOSBAQCB2b2lkIE9wdGlvbnM6OmluaXRpYWxpemUoKQogCiAgICAgICAgICAgICBk
dW1wT3B0aW9uc0lmTmVlZGVkKCk7CiAgICAgICAgICAgICBlbnN1cmVPcHRpb25zQXJlQ29oZXJl
bnQoKTsKKworICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZU1hY2hGb3JFeGNlcHRpb25zKCkp
CisgICAgICAgICAgICAgICAgV1RGOjpoYW5kbGVTaWduYWxzV2l0aE1hY2goKTsKICAgICAgICAg
fSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAppbmRleCBjZjlk
YzJiMmE4MjU2OGVlMDdkYTA4ODllMzliNmIyZjlkY2Q3OTc1Li4yMjc0ZDFjZGViMzMzNmUzN2Fi
NDQ3M2VhNDExNmVhMzIyOWU5MzdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0
aW9ucy5oCkBAIC00MjAsNiArNDIwLDggQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJp
bmc7CiAgICAgdih1bnNpZ25lZCwgd2F0Y2hkb2csIDAsIE5vcm1hbCwgIndhdGNoZG9nIHRpbWVv
dXQgKDAgPSBEaXNhYmxlZCwgTiA9IGEgdGltZW91dCBwZXJpb2Qgb2YgTiBtaWxsaXNlY29uZHMp
IikgXAogICAgIHYoYm9vbCwgdXNlUG9sbGluZ1RyYXBzLCBmYWxzZSwgTm9ybWFsLCAidXNlIHBv
bGxpbmcgKGluc3RlYWQgb2Ygc2lnbmFsbGluZykgVk0gdHJhcHMiKSBcCiAgICAgXAorICAgIHYo
Ym9vbCwgdXNlTWFjaEZvckV4Y2VwdGlvbnMsIHRydWUsIE5vcm1hbCwgIlVzZSBtYWNoIGV4Y2Vw
dGlvbnMgcmF0aGVyIHRoYW4gc2lnbmFscyB0byBoYW5kbGUgZmF1bHRzIGFuZCBwYXNzIHRocmVh
ZCBtZXNzYWdlcy4gKFRoaXMgZG9lcyBub3RoaW5nIG9uIHBsYXRmb3JtcyB3aXRob3V0IG1hY2gp
IikgXAorICAgIFwKICAgICB2KGJvb2wsIHVzZUlDU3RhdHMsIGZhbHNlLCBOb3JtYWwsIG51bGxw
dHIpIFwKICAgICBcCiAgICAgdih1bnNpZ25lZCwgcHJvdG90eXBlSGl0Q291bnRGb3JMTEludENh
Y2hpbmcsIDIsIE5vcm1hbCwgIk51bWJlciBvZiBwcm90b3R5cGUgcHJvcGVydHkgaGl0cyBiZWZv
cmUgY2FjaGluZyBhIHByb3RvdHlwZSBpbiB0aGUgTExJbnQuIEEgY291bnQgb2YgMCBtZWFucyBu
ZXZlciBjYWNoZS4iKSBcCkBAIC00NDMsNiArNDQ1LDcgQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBv
cHRpb25TdHJpbmc7CiAgICAgdih1bnNpZ25lZCwgd2ViQXNzZW1ibHlCQlFPcHRpbWl6YXRpb25M
ZXZlbCwgMSwgTm9ybWFsLCAiQjMgT3B0aW1pemF0aW9uIGxldmVsIGZvciBCQlEgV2ViIEFzc2Vt
Ymx5IG1vZHVsZSBjb21waWxhdGlvbnMuIikgXAogICAgIHYodW5zaWduZWQsIHdlYkFzc2VtYmx5
T01HT3B0aW1pemF0aW9uTGV2ZWwsIE9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCksIE5vcm1h
bCwgIkIzIE9wdGltaXphdGlvbiBsZXZlbCBmb3IgT01HIFdlYiBBc3NlbWJseSBtb2R1bGUgY29t
cGlsYXRpb25zLiIpIFwKICAgICBcCisgICAgdihib29sLCB1c2VCQlFUaWVyVXBDaGVja3MsIHRy
dWUsIE5vcm1hbCwgIkVuYWJsZXMgdGllciB1cCBjaGVja3MgZm9yIG91ciBCQlEgY29kZS4iKSBc
CiAgICAgdih1bnNpZ25lZCwgd2ViQXNzZW1ibHlPTUdUaWVyVXBDb3VudCwgNTAwMCwgTm9ybWFs
LCAiVGhlIGNvdW50ZG93biBiZWZvcmUgd2UgdGllciB1cCBhIGZ1bmN0aW9uIHRvIE9NRy4iKSBc
CiAgICAgdih1bnNpZ25lZCwgd2ViQXNzZW1ibHlMb29wRGVjcmVtZW50LCAxNSwgTm9ybWFsLCAi
VGhlIGFtb3VudCB0aGUgdGllciB1cCBjb3VudGRvd24gaXMgZGVjcmVtZW50ZWQgb24gZWFjaCBs
b29wIGJhY2tlZGdlLiIpIFwKICAgICB2KHVuc2lnbmVkLCB3ZWJBc3NlbWJseUZ1bmN0aW9uRW50
cnlEZWNyZW1lbnQsIDEsIE5vcm1hbCwgIlRoZSBhbW91bnQgdGhlIHRpZXIgdXAgY291bnRkb3du
IGlzIGRlY3JlbWVudGVkIG9uIGVhY2ggZnVuY3Rpb24gZW50cnkuIikgXApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcAppbmRleCAxYmFhY2U2MDQ0ZTY2MGE4ZTU0NDFm
YmFkMDE4ZWE5MDkzMWE0YzkxLi4xMGQ3ODJhOGRjNDlhNWVkYTA4MWQ3M2Q2ODNkZmZlMTZmOGM4
ZjQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcApAQCAtNTMs
MTEgKzUzLDExIEBAIEFMV0FZU19JTkxJTkUgVk0mIFZNVHJhcHM6OnZtKCkgY29uc3QKICNpZiBF
TkFCTEUoU0lHTkFMX0JBU0VEX1ZNX1RSQVBTKQogCiBzdHJ1Y3QgU2lnbmFsQ29udGV4dCB7Ci0g
ICAgU2lnbmFsQ29udGV4dChtY29udGV4dF90JiBtY29udGV4dCkKLSAgICAgICAgOiBtY29udGV4
dChtY29udGV4dCkKLSAgICAgICAgLCB0cmFwUEMoTWFjaGluZUNvbnRleHQ6Omluc3RydWN0aW9u
UG9pbnRlcihtY29udGV4dCkpCi0gICAgICAgICwgc3RhY2tQb2ludGVyKE1hY2hpbmVDb250ZXh0
OjpzdGFja1BvaW50ZXIobWNvbnRleHQpKQotICAgICAgICAsIGZyYW1lUG9pbnRlcihNYWNoaW5l
Q29udGV4dDo6ZnJhbWVQb2ludGVyKG1jb250ZXh0KSkKKyAgICBTaWduYWxDb250ZXh0KFBsYXRm
b3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMpCisgICAgICAgIDogY29udGV4dChyZWdpc3RlcnMpCisg
ICAgICAgICwgdHJhcFBDKE1hY2hpbmVDb250ZXh0OjppbnN0cnVjdGlvblBvaW50ZXIoY29udGV4
dCkpCisgICAgICAgICwgc3RhY2tQb2ludGVyKE1hY2hpbmVDb250ZXh0OjpzdGFja1BvaW50ZXIo
Y29udGV4dCkpCisgICAgICAgICwgZnJhbWVQb2ludGVyKE1hY2hpbmVDb250ZXh0OjpmcmFtZVBv
aW50ZXIoY29udGV4dCkpCiAgICAgewogI2lmIENQVShYODZfNjQpIHx8IENQVShYODYpCiAgICAg
ICAgIC8vIE9uIFg4Nl82NCwgU0lHVFJBUCByZXBvcnRzIHRoZSBhZGRyZXNzIGFmdGVyIHRoZSB0
cmFwcGluZyBQQy4gU28sIGRlYyBieSAxLgpAQCAtNjgsMTEgKzY4LDExIEBAIHN0cnVjdCBTaWdu
YWxDb250ZXh0IHsKICAgICB2b2lkIGFkanVzdFBDVG9Qb2ludFRvVHJhcHBpbmdJbnN0cnVjdGlv
bigpCiAgICAgewogI2lmIENQVShYODZfNjQpIHx8IENQVShYODYpCi0gICAgICAgIE1hY2hpbmVD
b250ZXh0OjppbnN0cnVjdGlvblBvaW50ZXIobWNvbnRleHQpID0gdHJhcFBDOworICAgICAgICBN
YWNoaW5lQ29udGV4dDo6aW5zdHJ1Y3Rpb25Qb2ludGVyKGNvbnRleHQpID0gdHJhcFBDOwogI2Vu
ZGlmCiAgICAgfQogCi0gICAgbWNvbnRleHRfdCYgbWNvbnRleHQ7CisgICAgUGxhdGZvcm1SZWdp
c3RlcnMmIGNvbnRleHQ7CiAgICAgdm9pZCogdHJhcFBDOwogICAgIHZvaWQqIHN0YWNrUG9pbnRl
cjsKICAgICB2b2lkKiBmcmFtZVBvaW50ZXI7CkBAIC0xMzAsMTEgKzEzMCwxMyBAQCBzdGF0aWMg
RXhwZWN0ZWQ8Vk1BbmRTdGFja0JvdW5kcywgVk1UcmFwczo6RXJyb3I+IGZpbmRBY3RpdmVWTUFu
ZFN0YWNrQm91bmRzKFNpZwogCiBzdGF0aWMgdm9pZCBpbnN0YWxsU2lnbmFsSGFuZGxlcigpCiB7
Ci0gICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFsOjpUcmFwLCBbXSAoaW50LCBzaWdpbmZv
X3QqLCB2b2lkKiB1YXApIC0+IFNpZ25hbEFjdGlvbiB7Ci0gICAgICAgIFNpZ25hbENvbnRleHQg
Y29udGV4dChzdGF0aWNfY2FzdDx1Y29udGV4dF90Kj4odWFwKS0+dWNfbWNvbnRleHQpOworICAg
IGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbDo6VHJhcCwgW10gKFNpZ25hbCwgU2lnSW5mbyYs
IFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMpIC0+IFNpZ25hbEFjdGlvbiB7CisgICAgICAg
IFNpZ25hbENvbnRleHQgY29udGV4dChyZWdpc3RlcnMpOwogCi0gICAgICAgIGlmICghaXNKSVRQ
Qyhjb250ZXh0LnRyYXBQQykpCisgICAgICAgIGlmICghaXNKSVRQQyhjb250ZXh0LnRyYXBQQykp
IHsKKyAgICAgICAgICAgIGRhdGFMb2dMbigidHJhcHBpbmcgcGM6ICIsIFJhd1BvaW50ZXIoY29u
dGV4dC50cmFwUEMpLCAiIGppdCBzdGFydDogIiwgc3RhcnRPZkZpeGVkRXhlY3V0YWJsZU1lbW9y
eVBvb2wsICIgaml0IGVuZDogIiwgZW5kT2ZGaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sKTsKICAg
ICAgICAgICAgIHJldHVybiBTaWduYWxBY3Rpb246Ok5vdEhhbmRsZWQ7CisgICAgICAgIH0KIAog
ICAgICAgICAvLyBGSVhNRTogVGhpcyBjdXJyZW50bHkgZWF0cyBhbGwgdHJhcHMgaW5jbHVkaW5n
IGppdCBhc3NlcnRzIHdlIHNob3VsZCBtYWtlIHN1cmUgdGhpcwogICAgICAgICAvLyBhbHdheXMg
d29ya3MuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzEwMzkKQEAg
LTQwNCw4ICs0MDYsOCBAQCB2b2lkIFZNVHJhcHM6OlNpZ25hbFNlbmRlcjo6c2VuZCgpCiAgICAg
ICAgICAgICBWTSYgdm0gPSAqbV92bTsKICAgICAgICAgICAgIGF1dG8gb3B0aW9uYWxPd25lclRo
cmVhZCA9IHZtLm93bmVyVGhyZWFkKCk7CiAgICAgICAgICAgICBpZiAob3B0aW9uYWxPd25lclRo
cmVhZCkgewotICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlKCpvcHRpb25hbE93bmVyVGhyZWFk
LnZhbHVlKCkuZ2V0KCksIFtdIChzaWdpbmZvX3QqLCB1Y29udGV4dF90KiB1Y29udGV4dCkgLT4g
dm9pZCB7Ci0gICAgICAgICAgICAgICAgICAgIFNpZ25hbENvbnRleHQgY29udGV4dCh1Y29udGV4
dC0+dWNfbWNvbnRleHQpOworICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlKCpvcHRpb25hbE93
bmVyVGhyZWFkLnZhbHVlKCkuZ2V0KCksIFtdIChQbGF0Zm9ybVJlZ2lzdGVycyYgcmVnaXN0ZXJz
KSAtPiB2b2lkIHsKKyAgICAgICAgICAgICAgICAgICAgU2lnbmFsQ29udGV4dCBjb250ZXh0KHJl
Z2lzdGVycyk7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8gYWN0aXZlVk1BbmRTdGFja0JvdW5k
cyA9IGZpbmRBY3RpdmVWTUFuZFN0YWNrQm91bmRzKGNvbnRleHQpOwogICAgICAgICAgICAgICAg
ICAgICBpZiAoYWN0aXZlVk1BbmRTdGFja0JvdW5kcykgewogICAgICAgICAgICAgICAgICAgICAg
ICAgVk0qIHZtID0gYWN0aXZlVk1BbmRTdGFja0JvdW5kcy52YWx1ZSgpLnZtOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1NpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1NpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwCmluZGV4
IDRhZGFlZmYxY2RhMmQxZmJjNmY5MDYxZjA2M2UxNGQyZTYzMzAwNDguLmJiNDYwNWM2OTNlMTJk
ZGUwNTA4NGY3YTE3Y2QxZTQ0ZjdlOWU2NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS90b29scy9TaWdpbGxDcmFzaEFuYWx5emVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAKQEAgLTc4LDExICs3OCwxMSBAQCBw
cml2YXRlOgogI2VuZGlmIC8vIFVTRShPU19MT0cpCiAKIHN0cnVjdCBTaWduYWxDb250ZXh0IHsK
LSAgICBTaWduYWxDb250ZXh0KG1jb250ZXh0X3QmIG1jb250ZXh0KQotICAgICAgICA6IG1jb250
ZXh0KG1jb250ZXh0KQotICAgICAgICAsIG1hY2hpbmVQQyhNYWNoaW5lQ29udGV4dDo6aW5zdHJ1
Y3Rpb25Qb2ludGVyKG1jb250ZXh0KSkKLSAgICAgICAgLCBzdGFja1BvaW50ZXIoTWFjaGluZUNv
bnRleHQ6OnN0YWNrUG9pbnRlcihtY29udGV4dCkpCi0gICAgICAgICwgZnJhbWVQb2ludGVyKE1h
Y2hpbmVDb250ZXh0OjpmcmFtZVBvaW50ZXIobWNvbnRleHQpKQorICAgIFNpZ25hbENvbnRleHQo
UGxhdGZvcm1SZWdpc3RlcnMmIGNvbnRleHQpCisgICAgICAgIDogY29udGV4dChjb250ZXh0KQor
ICAgICAgICAsIG1hY2hpbmVQQyhNYWNoaW5lQ29udGV4dDo6aW5zdHJ1Y3Rpb25Qb2ludGVyKGNv
bnRleHQpKQorICAgICAgICAsIHN0YWNrUG9pbnRlcihNYWNoaW5lQ29udGV4dDo6c3RhY2tQb2lu
dGVyKGNvbnRleHQpKQorICAgICAgICAsIGZyYW1lUG9pbnRlcihNYWNoaW5lQ29udGV4dDo6ZnJh
bWVQb2ludGVyKGNvbnRleHQpKQogICAgIHsgfQogCiAgICAgdm9pZCBkdW1wKCkKQEAgLTExMiw3
ICsxMTIsNyBAQCBzdHJ1Y3QgU2lnbmFsQ29udGV4dCB7CiAgICAgICAgIHYoZ3MpCiAKICNkZWZp
bmUgRFVNUF9SRUdJU1RFUihfX3JlZykgXAotICAgICAgICBsb2coIlJlZ2lzdGVyICIgI19fcmVn
ICI6ICVwIiwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obWNvbnRleHQtPl9fc3MuX18jI19fcmVn
KSk7CisgICAgICAgIGxvZygiUmVnaXN0ZXIgIiAjX19yZWcgIjogJXAiLCByZWludGVycHJldF9j
YXN0PHZvaWQqPihjb250ZXh0Ll9fIyNfX3JlZykpOwogICAgICAgICBGT1JfRUFDSF9SRUdJU1RF
UihEVU1QX1JFR0lTVEVSKQogI3VuZGVmIEZPUl9FQUNIX1JFR0lTVEVSCiAKQEAgLTEyMCwyMCAr
MTIwLDIwIEBAIHN0cnVjdCBTaWduYWxDb250ZXh0IHsKICAgICAgICAgaW50IGk7CiAgICAgICAg
IGZvciAoaSA9IDA7IGkgPCAyODsgaSArPSA0KSB7CiAgICAgICAgICAgICBsb2coInglZDogJTAx
NmxseCB4JWQ6ICUwMTZsbHggeCVkOiAlMDE2bGx4IHglZDogJTAxNmxseCIsCi0gICAgICAgICAg
ICAgICAgaSwgbWNvbnRleHQtPl9fc3MuX194W2ldLAotICAgICAgICAgICAgICAgIGkrMSwgbWNv
bnRleHQtPl9fc3MuX194W2krMV0sCi0gICAgICAgICAgICAgICAgaSsyLCBtY29udGV4dC0+X19z
cy5fX3hbaSsyXSwKLSAgICAgICAgICAgICAgICBpKzMsIG1jb250ZXh0LT5fX3NzLl9feFtpKzNd
KTsKKyAgICAgICAgICAgICAgICBpLCBjb250ZXh0Ll9feFtpXSwKKyAgICAgICAgICAgICAgICBp
KzEsIGNvbnRleHQuX194W2krMV0sCisgICAgICAgICAgICAgICAgaSsyLCBjb250ZXh0Ll9feFtp
KzJdLAorICAgICAgICAgICAgICAgIGkrMywgY29udGV4dC5fX3hbaSszXSk7CiAgICAgICAgIH0K
ICAgICAgICAgQVNTRVJUKGkgPCAyOSk7CiAgICAgICAgIGxvZygieCVkOiAlMDE2bGx4IGZwOiAl
MDE2bGx4IGxyOiAlMDE2bGx4IiwKLSAgICAgICAgICAgIGksIG1jb250ZXh0LT5fX3NzLl9feFtp
XSwgbWNvbnRleHQtPl9fc3MuX19mcCwgbWNvbnRleHQtPl9fc3MuX19scik7CisgICAgICAgICAg
ICBpLCBjb250ZXh0Ll9feFtpXSwgY29udGV4dC5fX2ZwLCBjb250ZXh0Ll9fbHIpOwogICAgICAg
ICBsb2coInNwOiAlMDE2bGx4IHBjOiAlMDE2bGx4IGNwc3I6ICUwOHgiLAotICAgICAgICAgICAg
bWNvbnRleHQtPl9fc3MuX19zcCwgbWNvbnRleHQtPl9fc3MuX19wYywgbWNvbnRleHQtPl9fc3Mu
X19jcHNyKTsKKyAgICAgICAgICAgIGNvbnRleHQuX19zcCwgY29udGV4dC5fX3BjLCBjb250ZXh0
Ll9fY3Bzcik7CiAjZW5kaWYKICAgICB9CiAKLSAgICBtY29udGV4dF90JiBtY29udGV4dDsKKyAg
ICBQbGF0Zm9ybVJlZ2lzdGVycyYgY29udGV4dDsKICAgICB2b2lkKiBtYWNoaW5lUEM7CiAgICAg
dm9pZCogc3RhY2tQb2ludGVyOwogICAgIHZvaWQqIGZyYW1lUG9pbnRlcjsKQEAgLTE0Miw4ICsx
NDIsOCBAQCBzdHJ1Y3QgU2lnbmFsQ29udGV4dCB7CiBzdGF0aWMgdm9pZCBpbnN0YWxsQ3Jhc2hI
YW5kbGVyKCkKIHsKICNpZiBDUFUoWDg2XzY0KSB8fCBDUFUoQVJNNjQpCi0gICAgaW5zdGFsbFNp
Z25hbEhhbmRsZXIoU2lnbmFsOjpJbGwsIFtdIChpbnQsIHNpZ2luZm9fdCosIHZvaWQqIHVhcCkg
ewotICAgICAgICBTaWduYWxDb250ZXh0IGNvbnRleHQoc3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+
KHVhcCktPnVjX21jb250ZXh0KTsKKyAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWw6Okls
bCwgW10gKFNpZ25hbCwgU2lnSW5mbyYsIFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMpIHsK
KyAgICAgICAgU2lnbmFsQ29udGV4dCBjb250ZXh0KHJlZ2lzdGVycyk7CiAKICAgICAgICAgaWYg
KCFpc0pJVFBDKGNvbnRleHQubWFjaGluZVBDKSkKICAgICAgICAgICAgIHJldHVybiBTaWduYWxB
Y3Rpb246Ok5vdEhhbmRsZWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQkJRUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxh
bi5jcHAKaW5kZXggMWRkMGNkMWQ4MzVjNmMyZjIzMWIwMGI4ODZkZGU0YWY3MmMyNjNjZS4uYjFi
NTk4ZDIwYzVjMDA3N2Q5ZTlkMDhlMzY4YWQ1Y2ExNzgzMWJhZiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcApAQCAtMjQyLDcgKzI0Miw3IEBAIHZvaWQgQkJR
UGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAgICAgICAg
IEFTU0VSVCh2YWxpZGF0ZUZ1bmN0aW9uKGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBz
aWduYXR1cmUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCkpKTsKIAogICAgICAgICBtX3VubGlu
a2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdID0gVmVjdG9yPFVubGlua2VkV2FzbVRv
V2FzbUNhbGw+KCk7Ci0gICAgICAgIFRpZXJVcENvdW50KiB0aWVyVXAgPSAmbV90aWVyVXBDb3Vu
dHNbZnVuY3Rpb25JbmRleF07CisgICAgICAgIFRpZXJVcENvdW50KiB0aWVyVXAgPSBPcHRpb25z
Ojp1c2VCQlFUaWVyVXBDaGVja3MoKSA/ICZtX3RpZXJVcENvdW50c1tmdW5jdGlvbkluZGV4XSA6
IG51bGxwdHI7CiAgICAgICAgIGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRD
b21waWxlKG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5jdGlvbkluZGV4XSwgZnVuY3Rpb25TdGFy
dCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tm
dW5jdGlvbkluZGV4XSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21waWxh
dGlvbk1vZGU6OkJCUU1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCk7CiAKICAgICAgICAgaWYg
KFVOTElLRUxZKCFwYXJzZUFuZENvbXBpbGVSZXN1bHQpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwCmluZGV4IDJlMGM5
OWEzOWJlYmQzMTc4YjkxNDhkOTU4ZmU1M2U1N2E2MjI5N2UuLjI2NGMzNGRlNDVkYTE3NWE1ZDUx
NDFjMTcxZWZlOTVlMDYzYzVlMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwCkBAIC01Miw5ICs1Miw4IEBAIHN0YXRp
YyBMYXp5TmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxzdGQ6OnR1cGxlPHZvaWQqLCB2b2lkKj4+PiBj
b2RlTG9jYXRpb25zOyAvLyAoCiAKIHN0YXRpYyBib29sIGZhc3RIYW5kbGVySW5zdGFsbGVkIHsg
ZmFsc2UgfTsKIAotc3RhdGljIFNpZ25hbEFjdGlvbiB0cmFwSGFuZGxlcihpbnQsIHNpZ2luZm9f
dCogc2lnSW5mbywgdm9pZCogdWNvbnRleHQpCitzdGF0aWMgU2lnbmFsQWN0aW9uIHRyYXBIYW5k
bGVyKFNpZ25hbCwgU2lnSW5mbyYgc2lnSW5mbywgUGxhdGZvcm1SZWdpc3RlcnMmIGNvbnRleHQp
CiB7Ci0gICAgbWNvbnRleHRfdCYgY29udGV4dCA9IHN0YXRpY19jYXN0PHVjb250ZXh0X3QqPih1
Y29udGV4dCktPnVjX21jb250ZXh0OwogICAgIHZvaWQqIGZhdWx0aW5nSW5zdHJ1Y3Rpb24gPSBN
YWNoaW5lQ29udGV4dDo6aW5zdHJ1Y3Rpb25Qb2ludGVyKGNvbnRleHQpOwogICAgIGRhdGFMb2dM
bklmKHZlcmJvc2UsICJzdGFydGluZyBoYW5kbGVyIGZvciBmYXVsdCBhdDogIiwgUmF3UG9pbnRl
cihmYXVsdGluZ0luc3RydWN0aW9uKSk7CiAKQEAgLTY0LDcgKzYzLDcgQEAgc3RhdGljIFNpZ25h
bEFjdGlvbiB0cmFwSGFuZGxlcihpbnQsIHNpZ2luZm9fdCogc2lnSW5mbywgdm9pZCogdWNvbnRl
eHQpCiAgICAgaWYgKGlzSklUUEMoZmF1bHRpbmdJbnN0cnVjdGlvbikpIHsKICAgICAgICAgYm9v
bCBmYXVsdGVkSW5BY3RpdmVGYXN0TWVtb3J5ID0gZmFsc2U7CiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHZvaWQqIGZhdWx0aW5nQWRkcmVzcyA9IHNpZ0luZm8tPnNpX2FkZHI7CisgICAgICAgICAg
ICB2b2lkKiBmYXVsdGluZ0FkZHJlc3MgPSBzaWdJbmZvLmZhdWx0aW5nQWRkcmVzczsKICAgICAg
ICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJjaGVja2luZyBmYXVsdGluZyBhZGRyZXNzOiAi
LCBSYXdQb2ludGVyKGZhdWx0aW5nQWRkcmVzcyksICIgaXMgaW4gYW4gYWN0aXZlIGZhc3QgbWVt
b3J5Iik7CiAgICAgICAgICAgICBmYXVsdGVkSW5BY3RpdmVGYXN0TWVtb3J5ID0gV2FzbTo6TWVt
b3J5OjphZGRyZXNzSXNJbkFjdGl2ZUZhc3RNZW1vcnkoZmF1bHRpbmdBZGRyZXNzKTsKICAgICAg
ICAgfQpAQCAtMTI0LDExICsxMjMsMTEgQEAgdm9pZCBlbmFibGVGYXN0TWVtb3J5KCkKICAgICAg
ICAgICAgIHJldHVybjsKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWV9GQVNUX01FTU9SWSkKLSAg
ICAgICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFsOjpCdXMsIFtdIChpbnQgc2lnbmFsLCBz
aWdpbmZvX3QqIHNpZ0luZm8sIHZvaWQqIHVjb250ZXh0KSB7CisgICAgICAgIGluc3RhbGxTaWdu
YWxIYW5kbGVyKFNpZ25hbDo6QnVzLCBbXSAoU2lnbmFsIHNpZ25hbCwgU2lnSW5mbyYgc2lnSW5m
bywgUGxhdGZvcm1SZWdpc3RlcnMmIHVjb250ZXh0KSB7CiAgICAgICAgICAgICByZXR1cm4gdHJh
cEhhbmRsZXIoc2lnbmFsLCBzaWdJbmZvLCB1Y29udGV4dCk7CiAgICAgICAgIH0pOwogCi0gICAg
ICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbDo6U2VnViwgW10gKGludCBzaWduYWwsIHNp
Z2luZm9fdCogc2lnSW5mbywgdm9pZCogdWNvbnRleHQpIHsKKyAgICAgICAgaW5zdGFsbFNpZ25h
bEhhbmRsZXIoU2lnbmFsOjpTZWdWLCBbXSAoU2lnbmFsIHNpZ25hbCwgU2lnSW5mbyYgc2lnSW5m
bywgUGxhdGZvcm1SZWdpc3RlcnMmIHVjb250ZXh0KSB7CiAgICAgICAgICAgICByZXR1cm4gdHJh
cEhhbmRsZXIoc2lnbmFsLCBzaWdJbmZvLCB1Y29udGV4dCk7CiAgICAgICAgIH0pOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWFjaGluZVRocmVhZHMuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1hY2hpbmVUaHJlYWRzLmNwcAppbmRl
eCA1YWFjODdhY2I1NzQ3YzdmY2EyZjkzNmVjOWNmNjc4YjQzMTc4MTcxLi4wYTM2N2ZkNWUyMjUy
N2U5YzNjODc1MzZlY2ZkNzJiMTNkZjc5ZDViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtTWFjaGluZVRocmVhZHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21NYWNoaW5lVGhyZWFkcy5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNs
dWRlICJNYWNoaW5lU3RhY2tNYXJrZXIuaCIKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkTWVzc2FnZS5oPgorI2luY2x1ZGUgPHd0Zi90aHJlYWRz
L1NpZ25hbHMuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIApAQCAtNTcs
NyArNTgsNyBAQCB2b2lkIHJlc2V0SW5zdHJ1Y3Rpb25DYWNoZU9uQWxsVGhyZWFkcygpCiAKICAg
ICBjb25zdCBEb3VibHlMaW5rZWRMaXN0PE1hY2hpbmVUaHJlYWRzOjpNYWNoaW5lVGhyZWFkPiYg
dGhyZWFkcyA9IHdhc21UaHJlYWRzKCkudGhyZWFkc0xpc3RIZWFkKGxvY2tlcik7CiAgICAgZm9y
IChjb25zdCBhdXRvKiB0aHJlYWQgPSB0aHJlYWRzLmhlYWQoKTsgdGhyZWFkOyB0aHJlYWQgPSB0
aHJlYWQtPm5leHQoKSkgewotICAgICAgICBzZW5kTWVzc2FnZSh0aHJlYWQtPm1fdGhyZWFkLmdl
dCgpLCBbXSAoc2lnaW5mb190KiwgdWNvbnRleHRfdCopIHsKKyAgICAgICAgc2VuZE1lc3NhZ2Uo
dGhyZWFkLT5tX3RocmVhZC5nZXQoKSwgW10gKGNvbnN0IFBsYXRmb3JtUmVnaXN0ZXJzJikgewog
ICAgICAgICAgICAgLy8gSXQncyBsaWtlbHkgdGhhdCB0aGUgc2lnbmFsIGhhbmRsZXIgd2lsbCBh
bHJlYWR5IHJlc2V0IHRoZSBpbnN0cnVjdGlvbiBjYWNoZSBidXQgd2UgbWlnaHQgYXMgd2VsbCBi
ZSBzdXJlLgogICAgICAgICAgICAgV1RGOjpjcm9zc01vZGlmeWluZ0NvZGVGZW5jZSgpOwogICAg
ICAgICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDVm
NDUyODdmNmUzYzY4ODViMjJiYTI3NzZjZmJjNmEzMzIzYmQwNWIuLjU4NTQ0Y2NiNjJjYjIyMTJi
YWVlNzZmNGQyYTAxZTg5YjZiN2IwOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtNjQsNiArNjQsNyBAQAogCQk1MjE4MzAxMkM5OUU0NzZBODRFRUJFQTgg
LyogU3ltYm9sSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGNzJCQkRCMTA3RkE0MjQ4ODYxNzhCOUUgLyogU3ltYm9sSW1wbC5jcHAgKi87IH07
CiAJCTUzMTFCRDUzMUVBNzFDQUQwMDUyNTI4MSAvKiBTaWduYWxzLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMTFCRDUxMUVBNzFDQUQwMDUyNTI4
MSAvKiBTaWduYWxzLmNwcCAqLzsgfTsKIAkJNTMxMUJENUMxRUE4MjJGOTAwNTI1MjgxIC8qIFRo
cmVhZE1lc3NhZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTMxMUJENUIxRUE4MjJGOTAwNTI1MjgxIC8qIFRocmVhZE1lc3NhZ2UuY3BwICovOyB9
OworCQk1MzUzNEYyQTFFQzBFMTBFMDAxNDFCMkYgLyogTWFjaEV4Y2VwdGlvbnMuZGVmcyBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNTM0RjI5MUVDMEUx
MEUwMDE0MUIyRiAvKiBNYWNoRXhjZXB0aW9ucy5kZWZzICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKENsaWVudCwgU2VydmVyLCApOyB9OyB9OwogCQk3MEE5OTNGRTFBRDcxNTEzMDBGQTYx
NUIgLyogU3ltYm9sUmVnaXN0cnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzBBOTkzRkMxQUQ3MTUxMzAwRkE2MTVCIC8qIFN5bWJvbFJlZ2lzdHJ5
LmNwcCAqLzsgfTsKIAkJNzBFQ0E2MEQxQjAyNDI2ODAwNDQ5NzM5IC8qIEF0b21pY1N0cmluZ0lt
cGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzBF
Q0E2MEExQjAyNDI2ODAwNDQ5NzM5IC8qIEF0b21pY1N0cmluZ0ltcGwuY3BwICovOyB9OwogCQk3
QUZFQzZCMTFFQjIyQjU5MDBEQURFMzYgLyogVVVJRC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QUZFQzZCMDFFQjIyQjU5MDBEQURFMzYgLyogVVVJ
RC5jcHAgKi87IH07CkBAIC0yOTksNiArMzAwLDcgQEAKIAkJNTMxMUJENTcxRUE3RTFBMTAwNTI1
MjgxIC8qIFNpZ25hbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2lnbmFs
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzExQkQ1OTFFQTgxQTk2MDA1MjUy
ODEgLyogVGhyZWFkTWVzc2FnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBU
aHJlYWRNZXNzYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMTFCRDVCMUVB
ODIyRjkwMDUyNTI4MSAvKiBUaHJlYWRNZXNzYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFRocmVhZE1lc3NhZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk1MzUzNEYyOTFFQzBFMTBFMDAxNDFCMkYgLyogTWFjaEV4Y2VwdGlvbnMuZGVmcyAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUubWlnOyBwYXRoID0gTWFjaEV4Y2VwdGlvbnMuZGVmczsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM5RUIwNjIxRDU1Mjg0MjAwQzgyRUY3IC8qIExF
QkRlY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTEVCRGVjb2Rlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0VDMjUzQzFFOTVBRDMwMDAwODMxQjkg
LyogUHJpb3JpdHlRdWV1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcmlv
cml0eVF1ZXVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1MzA3MUM5MUM0MDQy
NzIwMDM4NDg5OCAvKiBUaW55TFJVQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVGlueUxSVUNhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDIz
LDYgKzEwMjUsNyBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJMUE0MjhCOEIxQzhGODlERDAwNTFF
OUVCIC8qIEFwcEtpdENvbXBhdGliaWxpdHlEZWNsYXJhdGlvbnMuaCAqLywKIAkJCQkxQUNBREQ4
MjE4ODQ0ODAxMDBEOEI3MUQgLyogRGVwcmVjYXRlZFN5bWJvbHNVc2VkQnlTYWZhcmkubW0gKi8s
CisJCQkJNTM1MzRGMjkxRUMwRTEwRTAwMTQxQjJGIC8qIE1hY2hFeGNlcHRpb25zLmRlZnMgKi8s
CiAJCQkJQThBNDcyQzUxNTFBODI1QTAwNDEyM0ZGIC8qIE1haW5UaHJlYWRNYWMubW0gKi8sCiAJ
CQkpOwogCQkJcGF0aCA9IG1hYzsKQEAgLTEzNDYsNiArMTM0OSw3IEBACiAJCQkJMTQzRjYxMUYx
NTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTNCNzI1
RUM5ODc0NDZBRDkzRjFBNDQwIC8qIFJhbmRvbURldmljZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBOEE0NzQxNDE1MUE4MjVCMDA0MTIzRkYgLyogUmFuZG9tTnVtYmVyLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTUzNTM0RjJBMUVDMEUxMEUwMDE0MUIyRiAvKiBNYWNoRXhjZXB0aW9ucy5kZWZz
IGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0MUExNTFBODI1QjAwNDEyM0ZGIC8qIFJlZkNvdW50
ZWRMZWFrQ291bnRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQ0RFRDBGMzE4MTE1Qzg1MDA0
REJBNzAgLyogUnVuTG9vcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQ0RFRDBFRjE4MTE1QzM4
MDA0REJBNzAgLyogUnVuTG9vcENGLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvUGxhdGZvcm1SZWdpc3RlcnMuaCBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3Jt
UmVnaXN0ZXJzLmgKaW5kZXggZDViNWFiYzIyMWJiYWQ4Mjk3NjE5M2VjZTUxYzFjNzYxNzVkYjA2
ZC4uOTJhYWJiOWY5YzMxZDFjZDJmNDNiOTA1ZjY5YzYyNGNjZjI4ODY3MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvUGxhdGZvcm1SZWdpc3RlcnMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Q
bGF0Zm9ybVJlZ2lzdGVycy5oCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpZiBPUyhEQVJXSU4pCiAj
aW5jbHVkZSA8bWFjaC90aHJlYWRfYWN0Lmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CiAjZWxpZiBP
UyhXSU5ET1dTKQogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNlbHNlCkBAIC01NSw2ICs1NiwxMSBA
QCB0eXBlZGVmIGFybV90aHJlYWRfc3RhdGU2NF90IFBsYXRmb3JtUmVnaXN0ZXJzOwogI2Vycm9y
IFVua25vd24gQXJjaGl0ZWN0dXJlCiAjZW5kaWYKIAoraW5saW5lIFBsYXRmb3JtUmVnaXN0ZXJz
JiByZWdpc3RlcnNGcm9tVUNvbnRleHQodWNvbnRleHRfdCogdWNvbnRleHQpCit7CisgICAgcmV0
dXJuIHVjb250ZXh0LT51Y19tY29udGV4dC0+X19zczsKK30KKwogI2VsaWYgT1MoV0lORE9XUykK
IAogdXNpbmcgUGxhdGZvcm1SZWdpc3RlcnMgPSBDT05URVhUOwpAQCAtNjUsNiArNzEsMTEgQEAg
c3RydWN0IFBsYXRmb3JtUmVnaXN0ZXJzIHsKICAgICBtY29udGV4dF90IG1hY2hpbmVDb250ZXh0
OwogfTsKIAoraW5saW5lIFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnNGcm9tVUNvbnRleHQo
dWNvbnRleHRfdCogdWNvbnRleHQpCit7CisgICAgcmV0dXJuIHVjb250ZXh0LT51Y19tY29udGV4
dDsKK30KKwogI2Vsc2UKIAogc3RydWN0IFBsYXRmb3JtUmVnaXN0ZXJzIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL1N0YWNrQm91bmRzLmggYi9Tb3VyY2UvV1RGL3d0Zi9TdGFja0JvdW5k
cy5oCmluZGV4IDU1NDYwNGYyYWI0ODRjN2NmNzFlZTM4NjMwY2ViNGM3OWMzM2U5NzIuLmNkNjJj
MTQ4YTZjN2VmYzk1MTdhOGIwOWI4YTMyYzdmZTE5MGNkZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL1N0YWNrQm91bmRzLmgKKysrIGIvU291cmNlL1dURi93dGYvU3RhY2tCb3VuZHMuaApA
QCAtNTQsNyArNTQsNiBAQCBwdWJsaWM6CiAgICAgICAgIDogbV9vcmlnaW4ob3JpZ2luKQogICAg
ICAgICAsIG1fYm91bmQoZW5kKQogICAgIHsKLSAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwog
ICAgIH0KIAogICAgIHZvaWQqIG9yaWdpbigpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9UaHJlYWRIb2xkZXIuY3BwIGIvU291cmNlL1dURi93dGYvVGhyZWFkSG9sZGVyLmNwcApp
bmRleCAzMGIyMjdjZGI4YWM1MjYwNzUwYjQ3ZDQ4MmFiYzJkNTViZTNhYzk0Li4zYTcyZTM3Yzcw
MGRlM2FmNGYyZTcyNWNhN2M5YWVkMzk2YTgxNzhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9UaHJlYWRIb2xkZXIuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlci5jcHAK
QEAgLTM0LDEyICszNCwxNyBAQAogCiAjaW5jbHVkZSAiVGhyZWFkaW5nLmgiCiAKKyNpbmNsdWRl
IDx3dGYvdGhyZWFkcy9TaWduYWxzLmg+CisKIG5hbWVzcGFjZSBXVEYgewogCiBUaHJlYWRTcGVj
aWZpY0tleSBUaHJlYWRIb2xkZXI6Om1fa2V5ID0gSW52YWxpZFRocmVhZFNwZWNpZmljS2V5Owog
CiBUaHJlYWRIb2xkZXI6On5UaHJlYWRIb2xkZXIoKQogeworI2lmIE9TKERBUldJTikKKyAgICBy
ZW1vdmVUaHJlYWQoJm1fdGhyZWFkLmdldCgpKTsKKyNlbmRpZgogICAgIG1fdGhyZWFkLT5kaWRF
eGl0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZE1lc3NhZ2UuY3Bw
IGIvU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5jcHAKaW5kZXggZjE0YmM0NWQzNjE0Yzdj
NjYzNWViMTdhYjBlMjcyODE2YTEzNzNkZC4uYjA0MGE1YjcxZGMxY2JkNTUxNTM3M2U2ZGU2OTNj
OTRkMmI1NTA3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5jcHAK
KysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5jcHAKQEAgLTM2LDYgKzM2LDkgQEAK
ICNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+CiAjaW5jbHVkZSA8d3RmL3RocmVhZHMvU2lnbmFscy5o
PgogCisjaWYgT1MoREFSV0lOKQorI2luY2x1ZGUgPG1hY2gvdGhyZWFkX2FjdC5oPgorI2VuZGlm
CiAKIG5hbWVzcGFjZSBXVEYgewogCkBAIC04MywxMiArODYsMTIgQEAgdm9pZCBpbml0aWFsaXpl
VGhyZWFkTWVzc2FnZXMoKQogfQogCiBTVVBQUkVTU19BU0FOCi1NZXNzYWdlU3RhdHVzIHNlbmRN
ZXNzYWdlU2NvcGVkKFRocmVhZCYgdGhyZWFkLCBjb25zdCBUaHJlYWRNZXNzYWdlJiBtZXNzYWdl
KQorc3RhdGljIE1lc3NhZ2VTdGF0dXMgc2VuZE1lc3NhZ2VTaWduYWwoVGhyZWFkJiB0aHJlYWQs
IGNvbnN0IFRocmVhZE1lc3NhZ2UmIG1lc3NhZ2UpCiB7CiAgICAgY29uc3RleHByIFNpZ25hbCBz
aWduYWwgPSBTaWduYWw6OlVzcjsKICAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZTsKICAg
ICBzdGQ6OmNhbGxfb25jZShvbmNlLCBbXSB7Ci0gICAgICAgIGluc3RhbGxTaWduYWxIYW5kbGVy
KHNpZ25hbCwgW10gKGludCwgc2lnaW5mb190KiBpbmZvLCB2b2lkKiB1YXApIHsKKyAgICAgICAg
aW5zdGFsbFNpZ25hbEhhbmRsZXIoc2lnbmFsLCBbXSAoU2lnbmFsLCBTaWdJbmZvJiwgUGxhdGZv
cm1SZWdpc3RlcnMmIGNvbnRleHQpIHsKICAgICAgICAgICAgIFRocmVhZCogdGhyZWFkID0gVGhy
ZWFkOjpjdXJyZW50TWF5QmVOdWxsKCk7CiAKICAgICAgICAgICAgIGlmICghdGhyZWFkKSB7CkBA
IC05OCw3ICsxMDEsNyBAQCBNZXNzYWdlU3RhdHVzIHNlbmRNZXNzYWdlU2NvcGVkKFRocmVhZCYg
dGhyZWFkLCBjb25zdCBUaHJlYWRNZXNzYWdlJiBtZXNzYWdlKQogCiAgICAgICAgICAgICAvLyBO
b2RlIHNob3VsZCBiZSBkZWxldGVkIGluIHRoZSBzZW5kZXIgdGhyZWFkLiBEZWxldGluZyBOb2Rl
cyBpbiBzaWduYWwgaGFuZGxlciBjYXVzZXMgZGVhZCBsb2NrLgogICAgICAgICAgICAgdGhyZWFk
LT50aHJlYWRNZXNzYWdlcygpLmNvbnN1bWVBbGxXaXRoTm9kZShbJl0gKFRocmVhZE1lc3NhZ2VE
YXRhKiBkYXRhLCBOb2RlKiBub2RlKSB7Ci0gICAgICAgICAgICAgICAgZGF0YS0+bWVzc2FnZShp
bmZvLCBzdGF0aWNfY2FzdDx1Y29udGV4dF90Kj4odWFwKSk7CisgICAgICAgICAgICAgICAgZGF0
YS0+bWVzc2FnZShjb250ZXh0KTsKICAgICAgICAgICAgICAgICAvLyBCeSBzZXR0aW5nIHJhbiB2
YXJpYWJsZSwgKDEpIHRoZSBzZW5kZXIgYWNrbm93bGVkZ2VzIHRoZSBjb21wbGV0aW9uIGFuZAog
ICAgICAgICAgICAgICAgIC8vICgyKSBnZXRzIHRoZSBOb2RlIHRvIGJlIGRlbGV0ZWQuCiAgICAg
ICAgICAgICAgICAgZGF0YS0+cmFuLnN0b3JlKG5vZGUpOwpAQCAtMTU2LDYgKzE1OSw2MCBAQCBN
ZXNzYWdlU3RhdHVzIHNlbmRNZXNzYWdlU2NvcGVkKFRocmVhZCYgdGhyZWFkLCBjb25zdCBUaHJl
YWRNZXNzYWdlJiBtZXNzYWdlKQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9
CiAKKyNpZiBPUyhEQVJXSU4pCitzdGF0aWMgTWVzc2FnZVN0YXR1cyBzZW5kTWVzc2FnZU1hY2go
VGhyZWFkJiB0aHJlYWQsIGNvbnN0IFRocmVhZE1lc3NhZ2UmIG1lc3NhZ2UpCit7CisgICAgc3Rh
dGljIFN0YXRpY0xvY2sgbWVzc2FnZUxvY2s7CisgICAgYXV0byBsb2NraG9sZGVyID0gaG9sZExv
Y2sobWVzc2FnZUxvY2spOworCisgICAgYXV0byByZXN1bHQgPSB0aHJlYWQuc3VzcGVuZCgpOwor
ICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gTWVzc2FnZVN0YXR1czo6VGhyZWFkRXhp
dGVkOworCisjaWYgQ1BVKFg4NikKKyAgICB1bnNpZ25lZCB1c2VyQ291bnQgPSBzaXplb2YocmVn
aXN0ZXJzKSAvIHNpemVvZihpbnQpOworICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3Ig
PSBpMzg2X1RIUkVBRF9TVEFURTsKKyNlbGlmIENQVShYODZfNjQpCisgICAgdW5zaWduZWQgdXNl
ckNvdW50ID0geDg2X1RIUkVBRF9TVEFURTY0X0NPVU5UOworICAgIHRocmVhZF9zdGF0ZV9mbGF2
b3JfdCBmbGF2b3IgPSB4ODZfVEhSRUFEX1NUQVRFNjQ7CisjZWxpZiBDUFUoQVJNKQorICAgIHVu
c2lnbmVkIHVzZXJDb3VudCA9IEFSTV9USFJFQURfU1RBVEVfQ09VTlQ7CisgICAgdGhyZWFkX3N0
YXRlX2ZsYXZvcl90IGZsYXZvciA9IEFSTV9USFJFQURfU1RBVEU7CisjZWxpZiBDUFUoQVJNNjQp
CisgICAgdW5zaWduZWQgdXNlckNvdW50ID0gQVJNX1RIUkVBRF9TVEFURTY0X0NPVU5UOworICAg
IHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSBBUk1fVEhSRUFEX1NUQVRFNjQ7CisjZWxz
ZQorI2Vycm9yIFVua25vd24gQXJjaGl0ZWN0dXJlCisjZW5kaWYKKworICAgIFBsYXRmb3JtUmVn
aXN0ZXJzIHJlZ2lzdGVyczsKKyAgICB0aHJlYWRfc3RhdGVfdCBzdGF0ZSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dGhyZWFkX3N0YXRlX3Q+KCZyZWdpc3RlcnMpOworICAgIHRocmVhZF9nZXRfc3RhdGUo
dGhyZWFkLm1hY2hUaHJlYWQoKSwgZmxhdm9yLCBzdGF0ZSwgJnVzZXJDb3VudCk7CisKKyAgICBt
ZXNzYWdlKHJlZ2lzdGVycyk7CisKKyAgICB0aHJlYWRfc2V0X3N0YXRlKHRocmVhZC5tYWNoVGhy
ZWFkKCksIGZsYXZvciwgKHRocmVhZF9zdGF0ZV90KSZyZWdpc3RlcnMsIHVzZXJDb3VudCk7CisK
KyAgICB0aHJlYWQucmVzdW1lKCk7CisgICAgcmV0dXJuIE1lc3NhZ2VTdGF0dXM6Ok1lc3NhZ2VS
YW47Cit9CisKK3N0YXRpYyBib29sIHVzZU1hY2ggPSBmYWxzZTsKK3ZvaWQgZGVsaXZlck1lc3Nh
Z2VzVXNpbmdNYWNoKCkgeyB1c2VNYWNoID0gdHJ1ZTsgfQorCisjZW5kaWYKKworTWVzc2FnZVN0
YXR1cyBzZW5kTWVzc2FnZVNjb3BlZChUaHJlYWQmIHRocmVhZCwgY29uc3QgVGhyZWFkTWVzc2Fn
ZSYgbWVzc2FnZSkKK3sKKyNpZiBPUyhEQVJXSU4pCisgICAgaWYgKHVzZU1hY2gpCisgICAgICAg
IHJldHVybiBzZW5kTWVzc2FnZU1hY2godGhyZWFkLCBtZXNzYWdlKTsKKyNlbmRpZgorICAgIHJl
dHVybiBzZW5kTWVzc2FnZVNpZ25hbCh0aHJlYWQsIG1lc3NhZ2UpOworICAgIHJldHVybiBNZXNz
YWdlU3RhdHVzOjpUaHJlYWRFeGl0ZWQ7Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKICNl
bmRpZiAvLyBVU0UoUFRIUkVBRFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRN
ZXNzYWdlLmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRNZXNzYWdlLmgKaW5kZXggOWFlNTNmMjlj
ZjdlOGZiMDBlZjkyMTFkMTZjZTJjZGVkNjAzZWMxYi4uNzc0MmUxYWNiYzRiM2M4NWRkZjY2Mjgw
MGM1YWNmMGFiMmFlMTQxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2Fn
ZS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZE1lc3NhZ2UuaApAQCAtMzYsNyArMzYsNyBA
QCBuYW1lc3BhY2UgV1RGIHsKIHZvaWQgaW5pdGlhbGl6ZVRocmVhZE1lc3NhZ2VzKCk7CiAKIGNs
YXNzIFRocmVhZE1lc3NhZ2VEYXRhOwotdXNpbmcgVGhyZWFkTWVzc2FnZSA9IFNjb3BlZExhbWJk
YTx2b2lkKHNpZ2luZm9fdCosIHVjb250ZXh0X3QqKT47Cit1c2luZyBUaHJlYWRNZXNzYWdlID0g
U2NvcGVkTGFtYmRhPHZvaWQoUGxhdGZvcm1SZWdpc3RlcnMmKT47CiAKIGVudW0gY2xhc3MgTWVz
c2FnZVN0YXR1cyB7CiAgICAgTWVzc2FnZVJhbiwKQEAgLTUxLDEwICs1MSwxNCBAQCBNZXNzYWdl
U3RhdHVzIHNlbmRNZXNzYWdlU2NvcGVkKFRocmVhZCYsIGNvbnN0IFRocmVhZE1lc3NhZ2UmKTsK
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CiBNZXNzYWdlU3RhdHVzIHNlbmRNZXNzYWdlKFRo
cmVhZCYgdGFyZ2V0VGhyZWFkLCBjb25zdCBGdW5jdG9yJiBmdW5jKQogewotICAgIGF1dG8gbGFt
YmRhID0gc2NvcGVkTGFtYmRhUmVmPHZvaWQoc2lnaW5mb190KiwgdWNvbnRleHRfdCopPihmdW5j
KTsKKyAgICBhdXRvIGxhbWJkYSA9IHNjb3BlZExhbWJkYVJlZjx2b2lkKFBsYXRmb3JtUmVnaXN0
ZXJzJik+KGZ1bmMpOwogICAgIHJldHVybiBzZW5kTWVzc2FnZVNjb3BlZCh0YXJnZXRUaHJlYWQs
IGxhbWJkYSk7CiB9CiAKKyNpZiBPUyhEQVJXSU4pCit2b2lkIGRlbGl2ZXJNZXNzYWdlc1VzaW5n
TWFjaCgpOworI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6OnNlbmRN
ZXNzYWdlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmggYi9Tb3VyY2Uv
V1RGL3d0Zi9UaHJlYWRpbmcuaAppbmRleCBkMmU1MzZkZjdhODY5NmQ4ZTZiOTViYTQzZTE3M2Qz
YjU1MGJmMTZhLi4zNTE0ZThjMDlmMGZjOTRkNTM0YmUyZjNiNmU3YzQ5NTBlMGJjZjA1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9U
aHJlYWRpbmcuaApAQCAtMTM4LDYgKzEzOCwxMCBAQCBwdWJsaWM6CiAKICNpZiBVU0UoUFRIUkVB
RFMpCiAgICAgTG9ja2xlc3NCYWc8VGhyZWFkTWVzc2FnZURhdGEqPiYgdGhyZWFkTWVzc2FnZXMo
KSB7IHJldHVybiBtX3RocmVhZE1lc3NhZ2VzOyB9CisKKyNpZiBPUyhEQVJXSU4pCisgICAgbWFj
aF9wb3J0X3QgbWFjaFRocmVhZCgpIHsgcmV0dXJuIG1fcGxhdGZvcm1UaHJlYWQ7IH0KKyNlbmRp
ZgogI2VuZGlmCiAKIHByb3RlY3RlZDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL21hYy9N
YWNoRXhjZXB0aW9ucy5kZWZzIGIvU291cmNlL1dURi93dGYvbWFjL01hY2hFeGNlcHRpb25zLmRl
ZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNDIwNTc0MmE0ZWQ1MDBmODA2NGZlZWI0OTU1YTdjOTcwZDk5YWYwYgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL21hYy9NYWNoRXhjZXB0aW9ucy5kZWZz
CkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSA8bWFjaC9tYWNoX2V4Yy5kZWZzPgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvdGhyZWFkcy9TaWduYWxzLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3RocmVhZHMvU2ln
bmFscy5jcHAKaW5kZXggODU1YjI4YjMxNzIxNzI3Y2YxZjQzMWE5MThhMjUxZGMyZTZhM2RmYy4u
NTQ0NTdmNzUyNzI2ODdiZGI3YzUyMDgzYTM5YTBiZjkxZTNmODg4NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvdGhyZWFkcy9TaWduYWxzLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90aHJl
YWRzL1NpZ25hbHMuY3BwCkBAIC0yOCwyMSArMjgsMjU2IEBACiAKICNpZiBVU0UoUFRIUkVBRFMp
CiAKKyNpZiBPUyhEQVJXSU4pCitleHRlcm4gIkMiIHsKKyNpbmNsdWRlICJNYWNoRXhjZXB0aW9u
c1NlcnZlci5oIgorfTsKKyNlbmRpZgorCiAjaW5jbHVkZSA8Y3N0ZGlvPgogI2luY2x1ZGUgPG11
dGV4PgogI2luY2x1ZGUgPHNpZ25hbC5oPgorCisjaWYgT1MoREFSV0lOKQorI2luY2x1ZGUgPG1h
Y2gvbWFjaC5oPgorI2luY2x1ZGUgPG1hY2gvdGhyZWFkX2FjdC5oPgorI2VuZGlmCisKICNpbmNs
dWRlIDx3dGYvQXRvbWljcy5oPgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisjaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTG9ja2xlc3NCYWcuaD4KICNpbmNsdWRlIDx3
dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkTWVzc2FnZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKwogCiBuYW1lc3BhY2UgV1RGIHsKIAorICAgIAogc3Rh
dGljIExhenlOZXZlckRlc3Ryb3llZDxMb2NrbGVzc0JhZzxTaWduYWxIYW5kbGVyPj4gaGFuZGxl
cnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihTaWduYWw6Ok51bWJlck9mU2lnbmFscyldID0geyB9Owot
c3RhdGljIHN0cnVjdCBzaWdhY3Rpb24gb2xkQWN0aW9uc1tzdGF0aWNfY2FzdDxzaXplX3Q+KFNp
Z25hbDo6TnVtYmVyT2ZTaWduYWxzKV07CiBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6
ZU9uY2VGbGFnc1tzdGF0aWNfY2FzdDxzaXplX3Q+KFNpZ25hbDo6TnVtYmVyT2ZTaWduYWxzKV07
CitzdGF0aWMgc3RydWN0IHNpZ2FjdGlvbiBvbGRBY3Rpb25zW3N0YXRpY19jYXN0PHNpemVfdD4o
U2lnbmFsOjpOdW1iZXJPZlNpZ25hbHMpXTsKKworI2lmIE9TKERBUldJTikKK3N0YXRpYyBtYWNo
X3BvcnRfdCBleGNlcHRpb25Qb3J0Oworc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbWF4TWVzc2Fn
ZVNpemUgPSAxICogS0I7CisKK3N0YXRpYyB2b2lkIHN0YXJ0TWFjaEV4Y2VwdGlvbkhhbmRsZXJU
aHJlYWQoKQoreworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlOworICAgIHN0ZDo6Y2Fs
bF9vbmNlKG9uY2UsIFtdIHsKKyAgICAgICAgaWYgKG1hY2hfcG9ydF9hbGxvY2F0ZShtYWNoX3Rh
c2tfc2VsZigpLCBNQUNIX1BPUlRfUklHSFRfUkVDRUlWRSwgJmV4Y2VwdGlvblBvcnQpICE9IEtF
Uk5fU1VDQ0VTUykKKyAgICAgICAgICAgIENSQVNIKCk7CisKKyAgICAgICAgaWYgKG1hY2hfcG9y
dF9pbnNlcnRfcmlnaHQobWFjaF90YXNrX3NlbGYoKSwgZXhjZXB0aW9uUG9ydCwgZXhjZXB0aW9u
UG9ydCwgTUFDSF9NU0dfVFlQRV9NQUtFX1NFTkQpIT0gS0VSTl9TVUNDRVNTKQorICAgICAgICAg
ICAgQ1JBU0goKTsKKworICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIGEgZGlzcGF0
Y2ggcXVldWUuCisgICAgICAgICh2b2lkKVRocmVhZDo6Y3JlYXRlKAorICAgICAgICAgICAgIldU
RiBNYWNoIEV4Y2VwdGlvbiBUaHJlYWQiLCBbXSAoKSB7CisgICAgICAgICAgICAgICAgdW5pb24g
TWVzc2FnZSB7CisgICAgICAgICAgICAgICAgICAgIG1hY2hfbXNnX2hlYWRlcl90IGhlYWRlcjsK
KyAgICAgICAgICAgICAgICAgICAgY2hhciBkYXRhW21heE1lc3NhZ2VTaXplXTsKKyAgICAgICAg
ICAgICAgICB9OworICAgICAgICAgICAgICAgIE1lc3NhZ2UgbWVzc2FnZUhlYWRlckluOworICAg
ICAgICAgICAgICAgIE1lc3NhZ2UgbWVzc2FnZUhlYWRlck91dDsKKworICAgICAgICAgICAgICAg
IHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgICAgIGtlcm5fcmV0dXJuX3QgbWVzc2Fn
ZVJlc3VsdCA9IG1hY2hfbXNnKCZtZXNzYWdlSGVhZGVySW4uaGVhZGVyLCBNQUNIX1JDVl9NU0cs
IDAsIG1heE1lc3NhZ2VTaXplLCBleGNlcHRpb25Qb3J0LCBNQUNIX01TR19USU1FT1VUX05PTkUs
IE1BQ0hfUE9SVF9OVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2VSZXN1bHQg
PT0gS0VSTl9TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1hY2hfZXhj
X3NlcnZlcigmbWVzc2FnZUhlYWRlckluLmhlYWRlciwgJm1lc3NhZ2VIZWFkZXJPdXQuaGVhZGVy
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUkFTSCgpOworCisgICAgICAgICAgICAg
ICAgICAgICAgICBtZXNzYWdlUmVzdWx0ID0gbWFjaF9tc2coJm1lc3NhZ2VIZWFkZXJPdXQuaGVh
ZGVyLCBNQUNIX1NFTkRfTVNHLCBtZXNzYWdlSGVhZGVyT3V0LmhlYWRlci5tc2doX3NpemUsIDAs
IG1lc3NhZ2VIZWFkZXJPdXQuaGVhZGVyLm1zZ2hfbG9jYWxfcG9ydCwgMCwgTUFDSF9QT1JUX05V
TEwpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobWVzc2FnZVJlc3Vs
dCA9PSBLRVJOX1NVQ0NFU1MpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiRmFpbGVkIHRvIHJlY2VpdmUgbWFjaCBtZXNzYWdl
IGR1ZSB0byAiLCBtYWNoX2Vycm9yX3N0cmluZyhtZXNzYWdlUmVzdWx0KSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICB9KS5sZWFrUmVmKCk7CisgICAgfSk7Cit9CisKK3N0YXRpYyBTaWdu
YWwgZnJvbU1hY2hFeGNlcHRpb24oZXhjZXB0aW9uX3R5cGVfdCB0eXBlKQoreworICAgIHN3aXRj
aCAodHlwZSkgeworICAgIGNhc2UgRVhDX0JBRF9BQ0NFU1M6IHJldHVybiBTaWduYWw6OlNlZ1Y7
CisgICAgY2FzZSBFWENfQkFEX0lOU1RSVUNUSU9OOiByZXR1cm4gU2lnbmFsOjpJbGw7CisgICAg
Y2FzZSBFWENfQlJFQUtQT0lOVDogcmV0dXJuIFNpZ25hbDo6VHJhcDsKKyAgICBkZWZhdWx0OiBi
cmVhazsKKyAgICB9CisgICAgcmV0dXJuIFNpZ25hbDo6VW5rbm93bjsKK30KKworc3RhdGljIGV4
Y2VwdGlvbl9tYXNrX3QgdG9NYWNoTWFzayhTaWduYWwgc2lnbmFsKQoreworICAgIHN3aXRjaCAo
c2lnbmFsKSB7CisgICAgY2FzZSBTaWduYWw6OlNlZ1Y6IHJldHVybiBFWENfTUFTS19CQURfQUND
RVNTOworICAgIGNhc2UgU2lnbmFsOjpJbGw6IHJldHVybiBFWENfTUFTS19CQURfSU5TVFJVQ1RJ
T047CisgICAgY2FzZSBTaWduYWw6OlRyYXA6IHJldHVybiBFWENfTUFTS19CUkVBS1BPSU5UOwor
ICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworfQorCitleHRlcm4gIkMiIHsKKworLy8gV2UgbmVlZCB0byBpbXBsZW1lbnQgc3R1YnMg
Zm9yIGNhdGNoX21hY2hfZXhjZXB0aW9uX3JhaXNlIGFuZCBjYXRjaF9tYWNoX2V4Y2VwdGlvbl9y
YWlzZV9zdGF0ZV9pZGVudGl0eS4KKy8vIFRoZSBNaUcgZ2VuZXJhdGVkIGZpbGUgd2lsbCBmYWls
IHRvIGxpbmsgb3RoZXJ3aXNlLCBldmVuIHRob3VnaCB3ZSBkb24ndCB1c2UgdGhlIGZ1bmN0aW9u
cy4gT25seSB0aGUKKy8vIGNhdGNoX21hY2hfZXhjZXB0aW9uX3JhaXNlX3N0YXRlIGZ1bmN0aW9u
IHNob3VsZCBiZSBjYWxsZWQgYmVjYXVzZSB3ZSBwYXNzIEVYQ0VQVElPTl9TVEFURSB0bworLy8g
dGhyZWFkX3NldF9leGNlcHRpb25fcG9ydHMuCitrZXJuX3JldHVybl90IGNhdGNoX21hY2hfZXhj
ZXB0aW9uX3JhaXNlKG1hY2hfcG9ydF90LCBtYWNoX3BvcnRfdCwgbWFjaF9wb3J0X3QsIGV4Y2Vw
dGlvbl90eXBlX3QsIG1hY2hfZXhjZXB0aW9uX2RhdGFfdCwgbWFjaF9tc2dfdHlwZV9udW1iZXJf
dCkKK3sKKyAgICBkYXRhTG9nTG4oIldlIHNob3VsZCBub3QgaGF2ZSBjYWxsZWQgY2F0Y2hfZXhj
ZXB0aW9uX3JhaXNlKCksIHBsZWFzZSBmaWxlIGEgYnVnIGF0IGJ1Z3Mud2Via2l0Lm9yZyIpOwor
ICAgIHJldHVybiBLRVJOX0ZBSUxVUkU7Cit9CisKK2tlcm5fcmV0dXJuX3QgY2F0Y2hfbWFjaF9l
eGNlcHRpb25fcmFpc2Vfc3RhdGVfaWRlbnRpdHkobWFjaF9wb3J0X3QsIG1hY2hfcG9ydF90LCBt
YWNoX3BvcnRfdCwgZXhjZXB0aW9uX3R5cGVfdCwgbWFjaF9leGNlcHRpb25fZGF0YV90LCBtYWNo
X21zZ190eXBlX251bWJlcl90LCBpbnQqLCB0aHJlYWRfc3RhdGVfdCwgbWFjaF9tc2dfdHlwZV9u
dW1iZXJfdCwgdGhyZWFkX3N0YXRlX3QsICBtYWNoX21zZ190eXBlX251bWJlcl90KikKK3sKKyAg
ICBkYXRhTG9nTG4oIldlIHNob3VsZCBub3QgaGF2ZSBjYWxsZWQgY2F0Y2hfbWFjaF9leGNlcHRp
b25fcmFpc2Vfc3RhdGVfaWRlbnRpdHksIHBsZWFzZSBmaWxlIGEgYnVnIGF0IGJ1Z3Mud2Via2l0
Lm9yZyIpOworICAgIHJldHVybiBLRVJOX0ZBSUxVUkU7Cit9CisKK2tlcm5fcmV0dXJuX3QgY2F0
Y2hfbWFjaF9leGNlcHRpb25fcmFpc2Vfc3RhdGUoCisgICAgbWFjaF9wb3J0X3QgcG9ydCwKKyAg
ICBleGNlcHRpb25fdHlwZV90IGV4Y2VwdGlvblR5cGUsCisgICAgY29uc3QgbWFjaF9leGNlcHRp
b25fZGF0YV90IGV4Y2VwdGlvbkRhdGEsCisgICAgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCBkYXRh
Q291bnQsCisgICAgaW50KiBzdGF0ZUZsYXZvciwKKyAgICBjb25zdCB0aHJlYWRfc3RhdGVfdCBp
blN0YXRlLAorICAgIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QgaW5TdGF0ZUNvdW50LAorICAgIHRo
cmVhZF9zdGF0ZV90IG91dFN0YXRlLAorICAgIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QqIG91dFN0
YXRlQ291bnQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQocG9ydCA9PSBleGNlcHRpb25Qb3J0KTsK
KyAgICBTaWduYWwgc2lnbmFsID0gZnJvbU1hY2hFeGNlcHRpb24oZXhjZXB0aW9uVHlwZSk7Cisg
ICAgZGF0YUxvZ0xuKCJyZWNlaXZlZFNpZ25hbCAiLCBleGNlcHRpb25UeXBlKTsKKyAgICBkYXRh
TG9nTG4oIlRocmVhZDogIiwgZXhjZXB0aW9uRGF0YVswXSk7CisgICAgUkVMRUFTRV9BU1NFUlQo
c2lnbmFsICE9IFNpZ25hbDo6VW5rbm93bik7CisKKyAgICBtZW1jcHkob3V0U3RhdGUsIGluU3Rh
dGUsIGluU3RhdGVDb3VudCAqIHNpemVvZihpblN0YXRlWzBdKSk7CisgICAgKm91dFN0YXRlQ291
bnQgPSBpblN0YXRlQ291bnQ7CisKKyNpZiBDUFUoWDg2XzY0KQorICAgIFJFTEVBU0VfQVNTRVJU
KCpzdGF0ZUZsYXZvciA9PSB4ODZfVEhSRUFEX1NUQVRFKTsKKyAgICBQbGF0Zm9ybVJlZ2lzdGVy
cyYgcmVnaXN0ZXJzID0gcmVpbnRlcnByZXRfY2FzdDx4ODZfdGhyZWFkX3N0YXRlX3QqPihvdXRT
dGF0ZSktPnV0cy50czY0OworI2VsaWYgQ1BVKEFSTTY0KQorICAgIFJFTEVBU0VfQVNTRVJUKCpz
dGF0ZUZsYXZvciA9PSBBUk1fVEhSRUFEX1NUQVRFKTsKKyAgICBQbGF0Zm9ybVJlZ2lzdGVycyYg
cmVnaXN0ZXJzID0gcmVpbnRlcnByZXRfY2FzdDxhcm1fdW5pZmllZF90aHJlYWRfc3RhdGUqPihv
dXRTdGF0ZSktPnRzXzY0OworI2VuZGlmCisKKyAgICBTaWdJbmZvIGluZm87CisgICAgaWYgKHNp
Z25hbCA9PSBTaWduYWw6OlNlZ1YpIHsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChkYXRhQ291bnQs
IGRhdGFDb3VudCA9PSAyKTsKKyAgICAgICAgaW5mby5mYXVsdGluZ0FkZHJlc3MgPSByZWludGVy
cHJldF9jYXN0PHZvaWQqPihleGNlcHRpb25EYXRhWzFdKTsKKyAgICB9CisKKyAgICBib29sIGRp
ZEhhbmRsZSA9IGZhbHNlOworICAgIGhhbmRsZXJzW3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFs
KV0tPml0ZXJhdGUoWyZdIChjb25zdCBTaWduYWxIYW5kbGVyJiBoYW5kbGVyKSB7CisgICAgICAg
IFNpZ25hbEFjdGlvbiBoYW5kbGVyUmVzdWx0ID0gaGFuZGxlcihzaWduYWwsIGluZm8sIHJlZ2lz
dGVycyk7CisgICAgICAgIGRhdGFMb2dMbihzdGF0aWNfY2FzdDxpbnQ+KGhhbmRsZXJSZXN1bHQp
KTsKKyAgICAgICAgc3dpdGNoIChoYW5kbGVyUmVzdWx0KSB7CisgICAgICAgIGNhc2UgU2lnbmFs
QWN0aW9uOjpIYW5kbGVkOgorICAgICAgICAgICAgZGlkSGFuZGxlID0gdHJ1ZTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9KTsKKworICAgIGlmIChkaWRIYW5kbGUpCisgICAgICAgIHJldHVybiBLRVJOX1NV
Q0NFU1M7CisgICAgcmV0dXJuIEtFUk5fRkFJTFVSRTsKK30KKworfTsKKworc3RhdGljIGJvb2wg
dXNlTWFjaCB7IGZhbHNlIH07Cit2b2lkIGhhbmRsZVNpZ25hbHNXaXRoTWFjaCgpCit7CisgICAg
ZGVsaXZlck1lc3NhZ2VzVXNpbmdNYWNoKCk7CisgICAgdXNlTWFjaCA9IHRydWU7Cit9CisKKwor
c3RhdGljIFN0YXRpY0xvY2sgdGhyZWFkTG9jazsKK2V4Y2VwdGlvbl9tYXNrX3QgYWN0aXZlRXhj
ZXB0aW9ucyB7IDAgfTsKKworaW5saW5lIHZvaWQgc2V0RXhjZXB0aW9uUG9ydHMoY29uc3QgQWJz
dHJhY3RMb2NrZXImLCBUaHJlYWQqIHRocmVhZCkKK3sKKyAgICBrZXJuX3JldHVybl90IHJlc3Vs
dCA9IHRocmVhZF9zZXRfZXhjZXB0aW9uX3BvcnRzKHRocmVhZC0+bWFjaFRocmVhZCgpLCBhY3Rp
dmVFeGNlcHRpb25zLCBleGNlcHRpb25Qb3J0LCBFWENFUFRJT05fU1RBVEUgfCBNQUNIX0VYQ0VQ
VElPTl9DT0RFUywgTUFDSElORV9USFJFQURfU1RBVEUpOworICAgIGlmIChyZXN1bHQgIT0gS0VS
Tl9TVUNDRVNTKSB7CisgICAgICAgIGRhdGFMb2dMbigidGhyZWFkIHNldCBwb3J0IGZhaWxlZCBk
dWUgdG8gIiwgbWFjaF9lcnJvcl9zdHJpbmcocmVzdWx0KSk7CisgICAgICAgIENSQVNIKCk7Cisg
ICAgfQorfQorCitpbmxpbmUgSGFzaFNldDxUaHJlYWQqPiYgYWN0aXZlVGhyZWFkcyhjb25zdCBB
YnN0cmFjdExvY2tlciYpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8VGhy
ZWFkKj4+IGFjdGl2ZVRocmVhZHM7CisgICAgcmV0dXJuIGFjdGl2ZVRocmVhZHM7Cit9CisKK3Zv
aWQgcmVnaXN0ZXJUaHJlYWQoVGhyZWFkKiB0aHJlYWQpCit7CisgICAgYXV0byBsb2NrZXIgPSBo
b2xkTG9jayh0aHJlYWRMb2NrKTsKKyAgICBhdXRvIHJlc3VsdCA9IGFjdGl2ZVRocmVhZHMobG9j
a2VyKS5hZGQodGhyZWFkKTsKKworICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAg
c2V0RXhjZXB0aW9uUG9ydHMobG9ja2VyLCB0aHJlYWQpOworfQorCit2b2lkIHJlbW92ZVRocmVh
ZChUaHJlYWQqIHRocmVhZCkKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHRocmVhZExv
Y2spOworICAgIGFjdGl2ZVRocmVhZHMobG9ja2VyKS5yZW1vdmUodGhyZWFkKTsKK30KIAotc3Rh
dGljIHZvaWQganNjU2lnbmFsSGFuZGxlcihpbnQgc2lnLCBzaWdpbmZvX3QqIGluZm8sIHZvaWQq
IG1jb250ZXh0KQorI2VuZGlmIC8vIE9TKERBUldJTikKKworc3RhdGljIHZvaWQganNjU2lnbmFs
SGFuZGxlcihpbnQsIHNpZ2luZm9fdCosIHZvaWQqKTsKKwordm9pZCBpbnN0YWxsU2lnbmFsSGFu
ZGxlcihTaWduYWwgc2lnbmFsLCBTaWduYWxIYW5kbGVyJiYgaGFuZGxlcikKK3sKKyAgICBBU1NF
UlQoc2lnbmFsIDwgU2lnbmFsOjpVbmtub3duKTsKKyAgICBpZiAoc2lnbmFsID09IFNpZ25hbDo6
QnVzICYmICF1c2VNYWNoKQorICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKCF1c2VNYWNoIHx8
IHNpZ25hbCAhPSBTaWduYWw6OlVzcik7CisKKyNpZiBPUyhEQVJXSU4pCisgICAgaWYgKHVzZU1h
Y2gpCisgICAgICAgIHN0YXJ0TWFjaEV4Y2VwdGlvbkhhbmRsZXJUaHJlYWQoKTsKKyNlbmRpZgor
CisgICAgc3RkOjpjYWxsX29uY2UoaW5pdGlhbGl6ZU9uY2VGbGFnc1tzdGF0aWNfY2FzdDxzaXpl
X3Q+KHNpZ25hbCldLCBbJl0geworICAgICAgICBoYW5kbGVyc1tzdGF0aWNfY2FzdDxzaXplX3Q+
KHNpZ25hbCldLmNvbnN0cnVjdCgpOworCisgICAgICAgIGlmICghdXNlTWFjaCkgeworICAgICAg
ICAgICAgc3RydWN0IHNpZ2FjdGlvbiBhY3Rpb247CisgICAgICAgICAgICBhY3Rpb24uc2Ffc2ln
YWN0aW9uID0ganNjU2lnbmFsSGFuZGxlcjsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gc2ln
ZmlsbHNldCgmYWN0aW9uLnNhX21hc2spOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXJl
c3VsdCk7CisgICAgICAgICAgICBhY3Rpb24uc2FfZmxhZ3MgPSBTQV9TSUdJTkZPOworICAgICAg
ICAgICAgcmVzdWx0ID0gc2lnYWN0aW9uKHRvU3lzdGVtU2lnbmFsKHNpZ25hbCksICZhY3Rpb24s
ICZvbGRBY3Rpb25zW3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0pOworICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoIXJlc3VsdCk7CisgICAgICAgIH0KKworICAgIH0pOworCisgICAgaGFu
ZGxlcnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzaWduYWwpXS0+YWRkKFdURk1vdmUoaGFuZGxlcikp
OworCisjaWYgT1MoREFSV0lOKQorICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sodGhyZWFkTG9j
ayk7CisgICAgaWYgKHVzZU1hY2gpIHsKKyAgICAgICAgYWN0aXZlRXhjZXB0aW9ucyB8PSB0b01h
Y2hNYXNrKHNpZ25hbCk7CisKKyAgICAgICAgZm9yIChUaHJlYWQqIHRocmVhZCA6IGFjdGl2ZVRo
cmVhZHMobG9ja2VyKSkKKyAgICAgICAgICAgIHNldEV4Y2VwdGlvblBvcnRzKGxvY2tlciwgdGhy
ZWFkKTsKKyAgICB9CisjZW5kaWYKK30KKwordm9pZCBqc2NTaWduYWxIYW5kbGVyKGludCBzaWcs
IHNpZ2luZm9fdCogaW5mbywgdm9pZCogdWNvbnRleHQpCiB7CiAgICAgU2lnbmFsIHNpZ25hbCA9
IGZyb21TeXN0ZW1TaWduYWwoc2lnKTsKIApAQCAtNjIsMTAgKzI5NywxNiBAQCBzdGF0aWMgdm9p
ZCBqc2NTaWduYWxIYW5kbGVyKGludCBzaWcsIHNpZ2luZm9fdCogaW5mbywgdm9pZCogbWNvbnRl
eHQpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBTaWdJbmZvIHNpZ0luZm87CisgICAg
aWYgKHNpZ25hbCA9PSBTaWduYWw6OlNlZ1YgfHwgc2lnbmFsID09IFNpZ25hbDo6QnVzKQorICAg
ICAgICBzaWdJbmZvLmZhdWx0aW5nQWRkcmVzcyA9IGluZm8tPnNpX2FkZHI7CisKKyAgICBQbGF0
Zm9ybVJlZ2lzdGVycyYgcmVnaXN0ZXJzID0gcmVnaXN0ZXJzRnJvbVVDb250ZXh0KHJlaW50ZXJw
cmV0X2Nhc3Q8dWNvbnRleHRfdCo+KHVjb250ZXh0KSk7CisKICAgICBib29sIGRpZEhhbmRsZSA9
IGZhbHNlOwogICAgIGJvb2wgcmVzdG9yZURlZmF1bHRIYW5kbGVyID0gZmFsc2U7CiAgICAgaGFu
ZGxlcnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzaWduYWwpXS0+aXRlcmF0ZShbJl0gKGNvbnN0IFNp
Z25hbEhhbmRsZXImIGhhbmRsZXIpIHsKLSAgICAgICAgc3dpdGNoIChoYW5kbGVyKHNpZywgaW5m
bywgbWNvbnRleHQpKSB7CisgICAgICAgIHN3aXRjaCAoaGFuZGxlcihzaWduYWwsIHNpZ0luZm8s
IHJlZ2lzdGVycykpIHsKICAgICAgICAgY2FzZSBTaWduYWxBY3Rpb246OkhhbmRsZWQ6CiAgICAg
ICAgICAgICBkaWRIYW5kbGUgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CkBAIC04NSwxMyAr
MzI2LDEzIEBAIHN0YXRpYyB2b2lkIGpzY1NpZ25hbEhhbmRsZXIoaW50IHNpZywgc2lnaW5mb190
KiBpbmZvLCB2b2lkKiBtY29udGV4dCkKICAgICBzdHJ1Y3Qgc2lnYWN0aW9uJiBvbGRBY3Rpb24g
PSBvbGRBY3Rpb25zW3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV07CiAgICAgaWYgKHNpZ25h
bCA9PSBTaWduYWw6OlVzcikgewogICAgICAgICBpZiAob2xkQWN0aW9uLnNhX3NpZ2FjdGlvbikK
LSAgICAgICAgICAgIG9sZEFjdGlvbi5zYV9zaWdhY3Rpb24oc2lnLCBpbmZvLCBtY29udGV4dCk7
CisgICAgICAgICAgICBvbGRBY3Rpb24uc2Ffc2lnYWN0aW9uKHNpZywgaW5mbywgdWNvbnRleHQp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKCFkaWRIYW5kbGUpIHsKICAgICAg
ICAgaWYgKG9sZEFjdGlvbi5zYV9zaWdhY3Rpb24pIHsKLSAgICAgICAgICAgIG9sZEFjdGlvbi5z
YV9zaWdhY3Rpb24oc2lnLCBpbmZvLCBtY29udGV4dCk7CisgICAgICAgICAgICBvbGRBY3Rpb24u
c2Ffc2lnYWN0aW9uKHNpZywgaW5mbywgdWNvbnRleHQpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAKQEAgLTEwMCwyNCArMzQxLDYgQEAgc3RhdGljIHZvaWQganNjU2lnbmFsSGFu
ZGxlcihpbnQgc2lnLCBzaWdpbmZvX3QqIGluZm8sIHZvaWQqIG1jb250ZXh0KQogICAgIH0KIH0K
IAotdm9pZCBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWwgc2lnbmFsLCBTaWduYWxIYW5kbGVy
JiYgaGFuZGxlcikKLXsKLSAgICBBU1NFUlQoc2lnbmFsIDwgU2lnbmFsOjpVbmtub3duKTsKLSAg
ICBzdGQ6OmNhbGxfb25jZShpbml0aWFsaXplT25jZUZsYWdzW3N0YXRpY19jYXN0PHNpemVfdD4o
c2lnbmFsKV0sIFsmXSB7Ci0gICAgICAgIGhhbmRsZXJzW3N0YXRpY19jYXN0PHNpemVfdD4oc2ln
bmFsKV0uY29uc3RydWN0KCk7Ci0KLSAgICAgICAgc3RydWN0IHNpZ2FjdGlvbiBhY3Rpb247Ci0g
ICAgICAgIGFjdGlvbi5zYV9zaWdhY3Rpb24gPSBqc2NTaWduYWxIYW5kbGVyOwotICAgICAgICBh
dXRvIHJlc3VsdCA9IHNpZ2ZpbGxzZXQoJmFjdGlvbi5zYV9tYXNrKTsKLSAgICAgICAgUkVMRUFT
RV9BU1NFUlQoIXJlc3VsdCk7Ci0gICAgICAgIGFjdGlvbi5zYV9mbGFncyA9IFNBX1NJR0lORk87
Ci0gICAgICAgIHJlc3VsdCA9IHNpZ2FjdGlvbih0b1N5c3RlbVNpZ25hbChzaWduYWwpLCAmYWN0
aW9uLCAmb2xkQWN0aW9uc1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNpZ25hbCldKTsKLSAgICAgICAg
UkVMRUFTRV9BU1NFUlQoIXJlc3VsdCk7Ci0gICAgfSk7Ci0KLSAgICBoYW5kbGVyc1tzdGF0aWNf
Y2FzdDxzaXplX3Q+KHNpZ25hbCldLT5hZGQoV1RGTW92ZShoYW5kbGVyKSk7Ci19Ci0KIH0gLy8g
bmFtZXNwYWNlIFdURgogCiAjZW5kaWYgLy8gVVNFKFBUSFJFQURTKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvdGhyZWFkcy9TaWduYWxzLmggYi9Tb3VyY2UvV1RGL3d0Zi90aHJlYWRzL1Np
Z25hbHMuaAppbmRleCAxZTRlYjQ2ZWFhNzc0YTFlZTg5ZjZmYjJkYWVmMzMyNjhjZTU2Nzc5Li44
MWFiMDA0MjZkMTBmY2ZkMmQyZDUyYjM3YjViMTc1YzU2NmFiOGEyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi90aHJlYWRzL1NpZ25hbHMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90aHJlYWRz
L1NpZ25hbHMuaApAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSA8c2lnbmFsLmg+CiAjaW5j
bHVkZSA8d3RmL0Z1bmN0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtUmVnaXN0ZXJzLmg+
CiAKIG5hbWVzcGFjZSBXVEYgewogCkBAIC03OSw3ICs4MCwxMSBAQCBlbnVtIGNsYXNzIFNpZ25h
bEFjdGlvbiB7CiAgICAgRm9yY2VEZWZhdWx0CiB9OwogCi11c2luZyBTaWduYWxIYW5kbGVyID0g
RnVuY3Rpb248U2lnbmFsQWN0aW9uKGludCwgc2lnaW5mb190Kiwgdm9pZCopPjsKK3N0cnVjdCBT
aWdJbmZvIHsKKyAgICB2b2lkKiBmYXVsdGluZ0FkZHJlc3MgeyAwIH07Cit9OworCit1c2luZyBT
aWduYWxIYW5kbGVyID0gRnVuY3Rpb248U2lnbmFsQWN0aW9uKFNpZ25hbCwgU2lnSW5mbyYsIFBs
YXRmb3JtUmVnaXN0ZXJzJik+OwogCiAvLyBDYWxsIHRoaXMgbWV0aG9kIHdoZW5ldmVyIHlvdSB3
YW50IHRvIGluc3RhbGwgYSBzaWduYWwgaGFuZGxlci4gSXQncyBvayB0byBjYWxsIHRoaXMgZnVu
Y3Rpb24gbGF6aWx5LgogLy8gTm90ZTogWW91ciBzaWduYWwgaGFuZGxlciB3aWxsIGJlIGNhbGxl
ZCBldmVyeSB0aW1lIHRoZSBoYW5kbGVyIGZvciB0aGUgZGVzaXJlZCBzaWduYWwgaXMgY2FsbGVk
LgpAQCAtODcsOSArOTIsMTkgQEAgdXNpbmcgU2lnbmFsSGFuZGxlciA9IEZ1bmN0aW9uPFNpZ25h
bEFjdGlvbihpbnQsIHNpZ2luZm9fdCosIHZvaWQqKT47CiAvLyBUaGlzIGZ1bmN0aW9uIGlzIGN1
cnJlbnRseSBhIG9uZSB3YXkgc3RyZWV0IGkuZS4gb25jZSBpbnN0YWxsZWQsIGEgc2lnbmFsIGhh
bmRsZXIgY2Fubm90IGJlIHVuaW5zdGFsbGVkLgogdm9pZCBpbnN0YWxsU2lnbmFsSGFuZGxlcihT
aWduYWwsIFNpZ25hbEhhbmRsZXImJik7CiAKKworI2lmIE9TKERBUldJTikKK2NsYXNzIFRocmVh
ZDsKK3ZvaWQgcmVnaXN0ZXJUaHJlYWQoVGhyZWFkKik7Cit2b2lkIHJlbW92ZVRocmVhZChUaHJl
YWQqKTsKKwordm9pZCBoYW5kbGVTaWduYWxzV2l0aE1hY2goKTsKKyNlbmRpZgorCiB9IC8vIG5h
bWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjpTaWduYWw7Cit1c2luZyBXVEY6OlNpZ0luZm87CiB1
c2luZyBXVEY6OnRvU3lzdGVtU2lnbmFsOwogdXNpbmcgV1RGOjpmcm9tU3lzdGVtU2lnbmFsOwog
dXNpbmcgV1RGOjpTaWduYWxBY3Rpb247CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9U
b29scy9DaGFuZ2VMb2cKaW5kZXggMTdmOWYwMTExMzEwMmE4YTRiMTdmY2U0YWYxZDk1ZWI4NjAw
NjlkYi4uNmNkYTQ4NDEwNjVjZTA0YTkxYjhkYjVlMmIyMDI4YzQwZWMwNWE2ZiAxMDA2NDQKLS0t
IGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBA
CisyMDE3LTA1LTExICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgorCisg
ICAgICAgIFVzZSBNYWNoIGV4Y2VwdGlvbnMgaW5zdGVhZCBvZiBzaWduYWxzIHdoZXJlIHBvc3Np
YmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzE4
NjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV1RGL1RocmVhZE1lc3NhZ2VzLmNwcDoKKyAgICAgICAgKHJ1blRo
cmVhZE1lc3NhZ2VUZXN0KToKKyAgICAgICAgKFRFU1QpOgorCiAyMDE3LTA1LTA5ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVtb3ZlIHN1cHBvcnQgZm9yIGxlZ2Fj
eSBOb3RpZmljYXRpb25zCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dU
Ri9UaHJlYWRNZXNzYWdlcy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9UaHJl
YWRNZXNzYWdlcy5jcHAKaW5kZXggZDYzZTliZjFlNzUwNjhiNmMxYTdlN2U2ZThiNjdjNGViMDUx
NTg4Mi4uZTZhNTc4OTRiYjUxNmZlMWNlNzEzZDA3YmYxOGYwNzA2ZWZhOTM3YyAxMDA2NDQKLS0t
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVGhyZWFkTWVzc2FnZXMuY3BwCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1RocmVhZE1lc3NhZ2VzLmNwcApAQCAtNTAs
NyArNTAsNyBAQCBzdGF0aWMgdm9pZCBydW5UaHJlYWRNZXNzYWdlVGVzdCh1bnNpZ25lZCBudW1T
ZW5kZXJzLCB1bnNpZ25lZCBudW1NZXNzYWdlcykKICAgICBmb3IgKHVuc2lnbmVkIHNlbmRlcklE
ID0gMDsgc2VuZGVySUQgPCBudW1TZW5kZXJzOyArK3NlbmRlcklEKSB7CiAgICAgICAgIHNlbmRl
clRocmVhZHNbc2VuZGVySURdID0gVGhyZWFkOjpjcmVhdGUoIlRocmVhZE1lc3NhZ2Ugc2VuZGVy
IiwgW3NlbmRlcklELCBudW1NZXNzYWdlcywgcmVjZWl2ZXJUaHJlYWQsICZtZXNzYWdlc1J1biwg
JmhhbmRsZXJzUnVuXSAoKSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bnVtTWVzc2FnZXM7ICsraSkgewotICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gc2VuZE1l
c3NhZ2UoKnJlY2VpdmVyVGhyZWFkLmdldCgpLCBbc2VuZGVySUQsICZoYW5kbGVyc1J1bl0gKHNp
Z2luZm9fdCosIHVjb250ZXh0X3QqKSB7CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBz
ZW5kTWVzc2FnZSgqcmVjZWl2ZXJUaHJlYWQuZ2V0KCksIFtzZW5kZXJJRCwgJmhhbmRsZXJzUnVu
XSAoUGxhdGZvcm1SZWdpc3RlcnMmKSB7CiAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJzUnVu
W3NlbmRlcklEXSsrOwogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIEVYUEVD
VF9UUlVFKHJlc3VsdCA9PSBXVEY6Ok1lc3NhZ2VTdGF0dXM6Ok1lc3NhZ2VSYW4pOwpAQCAtOTUs
NyArOTUsNyBAQCBwdWJsaWM6CiBURVNUKFRocmVhZE1lc3NhZ2UsIFNpZ25hbHNXb3JrT25FeGl0
KQogewogICAgIHN0YXRpYyBib29sIGhhbmRsZXJSYW4gPSBmYWxzZTsKLSAgICBpbnN0YWxsU2ln
bmFsSGFuZGxlcihTaWduYWw6OlVzciwgW10gKGludCwgc2lnaW5mb190Kiwgdm9pZCopIC0+IFNp
Z25hbEFjdGlvbiB7CisgICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFsOjpVc3IsIFtdIChT
aWduYWwsIFNpZ0luZm8mLCBQbGF0Zm9ybVJlZ2lzdGVycyYpIC0+IFNpZ25hbEFjdGlvbiB7CiAg
ICAgICAgIGRhdGFMb2dMbigiaGVyZSIpOwogICAgICAgICBoYW5kbGVyUmFuID0gdHJ1ZTsKICAg
ICAgICAgcmV0dXJuIFNpZ25hbEFjdGlvbjo6SGFuZGxlZDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309751</attachid>
            <date>2017-05-11 12:31:51 -0700</date>
            <delta_ts>2017-05-11 13:25:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171865-20170511123150.patch</filename>
            <type>text/plain</type>
            <size>49333</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE2Njc3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
YzIyOWE0ZjkxMDMxZGZlOTU1YTQxMGIyMDI0Njc2ZTFmM2NkZWIxLi5lNzZkODk3ZjUzNjc3ZWI3
NTBiMjM0YTUxNGFmMzQ1YjI3OTI4YjEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MCBAQAorMjAxNy0wNS0xMSAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBVc2UgTWFjaCBleGNlcHRpb25zIGluc3RlYWQgb2Ygc2lnbmFscyB3
aGVyZSBwb3NzaWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTcxODY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhpcyBwYXRjaCBhZGRzIHNvbWUgbmV3IEpTQyBvcHRpb25zLiBUaGUgZmlyc3QgaXMg
YW4gb3B0aW9uIHRoYXQKKyAgICAgICAgZW5hYmxlcyBvciBkaXNhYmxlcyB3ZWIgYXNzZW1ibHkg
dGllciB1cC4gVGhlIHNlY29uZCBjb250cm9scworICAgICAgICB3aGV0aGVyIG9yIG5vdCB3ZSB1
c2UgbWFjaCBleGNlcHRpb25zICh3aGVyZSBhdmFpbGFibGUpLgorCisgICAgICAgICogQVBJL3Rl
c3RzL0V4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwOgorICAgICAgICAoZGlzcGF0Y2hUZXJtaXRh
dGVDYWxsYmFjayk6CisgICAgICAgICh0ZXN0RXhlY3V0aW9uVGltZUxpbWl0KToKKyAgICAgICAg
KiBydW50aW1lL0pTTG9jay5jcHA6CisgICAgICAgIChKU0M6OkpTTG9jazo6ZGlkQWNxdWlyZUxv
Y2spOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OnJlY29t
cHV0ZURlcGVuZGVudE9wdGlvbnMpOgorICAgICAgICAoSlNDOjpPcHRpb25zOjppbml0aWFsaXpl
KToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKyAgICAgICAgKiBydW50aW1lL1ZNVHJh
cHMuY3BwOgorICAgICAgICAoSlNDOjpTaWduYWxDb250ZXh0OjpTaWduYWxDb250ZXh0KToKKyAg
ICAgICAgKEpTQzo6U2lnbmFsQ29udGV4dDo6YWRqdXN0UENUb1BvaW50VG9UcmFwcGluZ0luc3Ry
dWN0aW9uKToKKyAgICAgICAgKEpTQzo6aW5zdGFsbFNpZ25hbEhhbmRsZXIpOgorICAgICAgICAo
SlNDOjpWTVRyYXBzOjpTaWduYWxTZW5kZXI6OnNlbmQpOgorICAgICAgICAqIHRvb2xzL1NpZ2ls
bENyYXNoQW5hbHl6ZXIuY3BwOgorICAgICAgICAoSlNDOjpTaWduYWxDb250ZXh0OjpTaWduYWxD
b250ZXh0KToKKyAgICAgICAgKEpTQzo6U2lnbmFsQ29udGV4dDo6ZHVtcCk6CisgICAgICAgIChK
U0M6Omluc3RhbGxDcmFzaEhhbmRsZXIpOgorICAgICAgICAqIHdhc20vV2FzbUJCUVBsYW4uY3Bw
OgorICAgICAgICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKToKKyAgICAg
ICAgKiB3YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwOgorICAgICAgICAoSlNDOjpXYXNt
Ojp0cmFwSGFuZGxlcik6CisgICAgICAgIChKU0M6Oldhc206OmVuYWJsZUZhc3RNZW1vcnkpOgor
ICAgICAgICAqIHdhc20vV2FzbU1hY2hpbmVUaHJlYWRzLmNwcDoKKyAgICAgICAgKEpTQzo6V2Fz
bTo6cmVzZXRJbnN0cnVjdGlvbkNhY2hlT25BbGxUaHJlYWRzKToKKwogMjAxNy0wNS0xMSAgTWFy
ayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgV29ya2VyVGhyZWFkOjpzdG9w
KCkgc2hvdWxkIGNhbGwgc2NoZWR1bGVFeGVjdXRpb25UZXJtaW5hdGlvbigpIGxhc3QuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4
IGVjZGRiMzNmYmVkNTIxMTFiYzA3MTk1ZDZjMDhmZTQwNmIyYzFhMzUuLjlkMGY4MzYzOTRmM2Q5
NjY1ZTU2MjBjNzkxMjdlYmEyYTI3YjUyOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTMgQEAKKzIwMTctMDUt
MTEgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CisKKyAgICAgICAgVXNl
IE1hY2ggZXhjZXB0aW9ucyBpbnN0ZWFkIG9mIHNpZ25hbHMgd2hlcmUgcG9zc2libGUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MTg2NQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZW5h
YmxlcyB1c2luZyBtYWNoIGV4Y2VwdGlvbnMgb24gZGFyd2luLiBUaGUgd2F5IHRoZQorICAgICAg
ICBtYWNoIGV4Y2VwdGlvbiBhcGkgd29ya3MgaXMgdGhhdCB3ZSBjcmVhdGUgYSBtYWNoIHBvcnQs
IHdoaWNoIGlzCisgICAgICAgIGxpa2UgYSBmaWxlIGRlc2NyaXB0b3IuICBXZSB0aGVuIHdhaXQg
Zm9yIGEgbWVzc2FnZSB0byBhcnJpdmUgb24KKyAgICAgICAgdGhhdCBwb3J0IGluIGEgdGhyZWFk
LiBXaGVuIGFub3RoZXIgdGhyZWFkIHJhaXNlcyBhIGV4Y2VwdGlvbiAoc2F5CisgICAgICAgIGR1
ZSB0byBhIGJhZCBtZW1vcnkgYWNjZXNzKSB0aGUgT1Mgc2VuZHMgb3VyIHRocmVhZCBhIG1lc3Nh
Z2UuIFRoZQorICAgICAgICBwYXlsb2FkIG9mIHRoYXQgbWVzc2FnZSBpcyB0aGUgcmVnaXN0ZXIg
ZmlsZSBvZiB0aGUgY3Jhc2hpbmcKKyAgICAgICAgdGhyZWFkLiBXZSB0aGVuIGNhbGwgb3VyIGN1
c3RvbSBoYW5kbGVycyB0aGF0IGNoYW5nZSB0aGUgc3RhdGUgYXMKKyAgICAgICAgbmVlZGVkLiBJ
biBvcmRlciB0byByZXN0YXJ0IHRoZSB0aHJlYWQgd2Ugc2VuZCBhIHBheWxvYWQgYmFjayB0bwor
ICAgICAgICB0aGUgT1Mgd2l0aCBhbiB1cGRhdGVkIHJlZ2lzdGVyIGZpbGUgYWxvbmcgd2l0aCBh
IHN1Y2Nlc3MgbWVzc2FnZQorICAgICAgICBoZWFkZXIuCisKKyAgICAgICAgVGhpcyBwYXRjaCBh
bHNvIG1ha2VzIHRocmVhZCBtZXNzYWdlcyB3b3JrIHdpdGhvdXQgc2lnbmFscyBieQorICAgICAg
ICBzaW1wbHkgc3VzcGVuZGluZyB0aGUgdGhyZWFkIHRoZW4gcnVubmluZyB0aGUgbWVzc2FnZSBh
dCB0aGF0CisgICAgICAgIHRpbWUuCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiB3dGYvU3RhY2tCb3VuZHMuaDoKKyAgICAgICAgKFdURjo6U3Rh
Y2tCb3VuZHM6OlN0YWNrQm91bmRzKToKKyAgICAgICAgKiB3dGYvVGhyZWFkSG9sZGVyLmNwcDoK
KyAgICAgICAgKFdURjo6VGhyZWFkSG9sZGVyOjp+VGhyZWFkSG9sZGVyKToKKyAgICAgICAgKiB3
dGYvVGhyZWFkTWVzc2FnZS5jcHA6CisgICAgICAgIChXVEY6OnNlbmRNZXNzYWdlU2lnbmFsKToK
KyAgICAgICAgKFdURjo6c2VuZE1lc3NhZ2VNYWNoKToKKyAgICAgICAgKFdURjo6ZGVsaXZlck1l
c3NhZ2VzVXNpbmdNYWNoKToKKyAgICAgICAgKFdURjo6c2VuZE1lc3NhZ2VTY29wZWQpOgorICAg
ICAgICAqIHd0Zi9UaHJlYWRNZXNzYWdlLmg6CisgICAgICAgIChXVEY6OnNlbmRNZXNzYWdlKToK
KyAgICAgICAgKiB3dGYvVGhyZWFkaW5nLmg6CisgICAgICAgIChXVEY6OlRocmVhZDo6bWFjaFRo
cmVhZCk6CisgICAgICAgICogd3RmL21hYy9NYWNoRXhjZXB0aW9ucy5kZWZzOiBDb3BpZWQgZnJv
bSBTb3VyY2UvV1RGL3d0Zi9UaHJlYWRNZXNzYWdlLmguCisgICAgICAgICogd3RmL3RocmVhZHMv
U2lnbmFscy5jcHA6CisgICAgICAgIChXVEY6OnN0YXJ0TWFjaEV4Y2VwdGlvbkhhbmRsZXJUaHJl
YWQpOgorICAgICAgICAoV1RGOjpmcm9tTWFjaEV4Y2VwdGlvbik6CisgICAgICAgIChXVEY6OnRv
TWFjaE1hc2spOgorICAgICAgICAoV1RGOjpzZXRFeGNlcHRpb25Qb3J0cyk6CisgICAgICAgIChX
VEY6OmFjdGl2ZVRocmVhZHMpOgorICAgICAgICAoV1RGOjpyZWdpc3RlclRocmVhZCk6CisgICAg
ICAgIChXVEY6OnJlbW92ZVRocmVhZCk6CisgICAgICAgIChXVEY6OmhhbmRsZVNpZ25hbHNXaXRo
TWFjaCk6CisgICAgICAgIChXVEY6Omluc3RhbGxTaWduYWxIYW5kbGVyKToKKyAgICAgICAgKFdU
Rjo6anNjU2lnbmFsSGFuZGxlcik6CisgICAgICAgICogd3RmL3RocmVhZHMvU2lnbmFscy5oOgor
CiAyMDE3LTA1LTA5ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVt
b3ZlIHN1cHBvcnQgZm9yIGxlZ2FjeSBOb3RpZmljYXRpb25zCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0V4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9FeGVjdXRpb25UaW1lTGltaXRUZXN0LmNwcApp
bmRleCBkNWU1MzI0M2I3OGRmNzUxMzQyYWQ4ZDM5MGE0YjA0MTNkOWVlZjllLi43ZWFjMDczMDlk
ZGMzZjE2NDk0NTBiZDAzNzlkMmNhMThmMDE2OWFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL3Rlc3RzL0V4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5jcHAKQEAg
LTMwLDggKzMwLDEzIEBACiAjaW5jbHVkZSAiSlNDb250ZXh0UmVmUHJpdmF0ZS5oIgogI2luY2x1
ZGUgIkphdmFTY3JpcHRDb3JlLmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5oIgorCiAjaW5jbHVkZSA8
Y2hyb25vPgorI2luY2x1ZGUgPGRpc3BhdGNoL2Rpc3BhdGNoLmg+CisjaW5jbHVkZSA8d3RmL0F0
b21pY3MuaD4KKyNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL0N1cnJl
bnRUaW1lLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdCdWlsZGVyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ6OmNocm9ubzsKQEAgLTc3LDYgKzgy
LDEzIEBAIHN0YXRpYyBib29sIGV4dGVuZFRlcm1pbmF0ZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBj
dHgsIHZvaWQqKQogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIGRpc3BhdGNoVGVybWluYXRl
Q2FsbGJhY2tDYWxsZWQgPSBmYWxzZTsKK3N0YXRpYyBib29sIGRpc3BhdGNoVGVybWl0YXRlQ2Fs
bGJhY2soSlNDb250ZXh0UmVmLCB2b2lkKikKK3sKKyAgICBkaXNwYXRjaFRlcm1pbmF0ZUNhbGxi
YWNrQ2FsbGVkID0gdHJ1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogc3RydWN0IFRpZXJPcHRp
b25zIHsKICAgICBjb25zdCBjaGFyKiB0aWVyOwogICAgIHVuc2lnbmVkIHRpbWVMaW1pdEFkanVz
dG1lbnRNaWxsaXM7CkBAIC0zNjUsNiArMzc3LDYzIEBAIGludCB0ZXN0RXhlY3V0aW9uVGltZUxp
bWl0KCkKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCisgICAgICAgIC8qIFRlc3Qgc2NyaXB0
IHRpbWVvdXQgZnJvbSBkaXNwYXRjaCBxdWV1ZTogKi8KKyAgICAgICAgdGltZUxpbWl0ID0gKDEw
MCArIHRpZXJBZGp1c3RtZW50TWlsbGlzKSAvIDEwMDAuMDsKKyAgICAgICAgSlNDb250ZXh0R3Jv
dXBTZXRFeGVjdXRpb25UaW1lTGltaXQoY29udGV4dEdyb3VwLCB0aW1lTGltaXQsIGRpc3BhdGNo
VGVybWl0YXRlQ2FsbGJhY2ssIDApOworICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCB0
aW1lQWZ0ZXJXYXRjaGRvZ1Nob3VsZEhhdmVGaXJlZCA9IDMwMCArIHRpZXJBZGp1c3RtZW50TWls
bGlzOworCisgICAgICAgICAgICBTdHJpbmdCdWlsZGVyIHNjcmlwdEJ1aWxkZXI7CisgICAgICAg
ICAgICBzY3JpcHRCdWlsZGVyLmFwcGVuZExpdGVyYWwoImZ1bmN0aW9uIGZvbygpIHsgdmFyIHN0
YXJ0VGltZSA9IGN1cnJlbnRDUFVUaW1lKCk7IHdoaWxlICh0cnVlKSB7IGZvciAodmFyIGkgPSAw
OyBpIDwgMTAwMDsgaSsrKTsgaWYgKGN1cnJlbnRDUFVUaW1lKCkgLSBzdGFydFRpbWUgPiAiKTsK
KyAgICAgICAgICAgIHNjcmlwdEJ1aWxkZXIuYXBwZW5kTnVtYmVyKHRpbWVBZnRlcldhdGNoZG9n
U2hvdWxkSGF2ZUZpcmVkIC8gMTAwMC4wKTsKKyAgICAgICAgICAgIHNjcmlwdEJ1aWxkZXIuYXBw
ZW5kTGl0ZXJhbCgiKSBicmVhazsgfSB9IGZvbygpOyIpOworCisgICAgICAgICAgICBKU1N0cmlu
Z1JlZiBzY3JpcHQgPSBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhzY3JpcHRCdWlsZGVy
LnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBleGNlcHRpb24gPSBudWxs
cHRyOworICAgICAgICAgICAgZGlzcGF0Y2hUZXJtaW5hdGVDYWxsYmFja0NhbGxlZCA9IGZhbHNl
OworCisgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGRvIHRoaXMgc2luY2UgYmxvY2tzIGNhbiBv
bmx5IGNhcHR1cmUgdGhpbmdzIGFzIGNvbnN0LgorICAgICAgICAgICAgSlNHbG9iYWxDb250ZXh0
UmVmJiBjb250ZXh0UmVmID0gY29udGV4dDsKKyAgICAgICAgICAgIEpTU3RyaW5nUmVmJiBzY3Jp
cHRSZWYgPSBzY3JpcHQ7CisgICAgICAgICAgICBKU1ZhbHVlUmVmJiBleGNlcHRpb25SZWYgPSBl
eGNlcHRpb247CisKKyAgICAgICAgICAgIExvY2sgc3luY0xvY2s7CisgICAgICAgICAgICBMb2Nr
JiBzeW5jTG9ja1JlZiA9IHN5bmNMb2NrOworICAgICAgICAgICAgQ29uZGl0aW9uIHN5bmNocm9u
aXplOworICAgICAgICAgICAgQ29uZGl0aW9uJiBzeW5jaHJvbml6ZVJlZiA9IHN5bmNocm9uaXpl
OworICAgICAgICAgICAgYm9vbCBkaWRTeW5jaHJvbml6ZSA9IGZhbHNlOworICAgICAgICAgICAg
Ym9vbCYgZGlkU3luY2hyb25pemVSZWYgPSBkaWRTeW5jaHJvbml6ZTsKKworICAgICAgICAgICAg
c3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcyBzdGFydFRpbWU7CisgICAgICAgICAgICBzdGQ6OmNo
cm9ubzo6bWljcm9zZWNvbmRzIGVuZFRpbWU7CisKKyAgICAgICAgICAgIHN0ZDo6Y2hyb25vOjpt
aWNyb3NlY29uZHMmIHN0YXJ0VGltZVJlZiA9IHN0YXJ0VGltZTsKKyAgICAgICAgICAgIHN0ZDo6
Y2hyb25vOjptaWNyb3NlY29uZHMmIGVuZFRpbWVSZWYgPSBlbmRUaW1lOworCisgICAgICAgICAg
ICBkaXNwYXRjaF9ncm91cF90IGdyb3VwID0gZGlzcGF0Y2hfZ3JvdXBfY3JlYXRlKCk7CisgICAg
ICAgICAgICBkaXNwYXRjaF9ncm91cF9hc3luYyhncm91cCwgZGlzcGF0Y2hfZ2V0X2dsb2JhbF9x
dWV1ZSgwLCAwKSwgXnsKKyAgICAgICAgICAgICAgICBzdGFydFRpbWVSZWYgPSBjdXJyZW50Q1BV
VGltZSgpOworICAgICAgICAgICAgICAgIEpTRXZhbHVhdGVTY3JpcHQoY29udGV4dFJlZiwgc2Ny
aXB0UmVmLCBudWxscHRyLCBudWxscHRyLCAxLCAmZXhjZXB0aW9uUmVmKTsKKyAgICAgICAgICAg
ICAgICBlbmRUaW1lUmVmID0gY3VycmVudENQVVRpbWUoKTsKKyAgICAgICAgICAgICAgICBhdXRv
IGxvY2tlciA9IFdURjo6aG9sZExvY2soc3luY0xvY2tSZWYpOworICAgICAgICAgICAgICAgIGRp
ZFN5bmNocm9uaXplUmVmID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZVJlZi5u
b3RpZnlBbGwoKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKHN5bmNMb2NrKTsKKyAgICAgICAgICAgIHN5bmNocm9uaXplLndhaXQoc3luY0xv
Y2ssIFsmXSB7IHJldHVybiBkaWRTeW5jaHJvbml6ZTsgfSk7CisKKyAgICAgICAgICAgIGlmICgo
KGVuZFRpbWUgLSBzdGFydFRpbWUpIDwgbWlsbGlzZWNvbmRzKHRpbWVBZnRlcldhdGNoZG9nU2hv
dWxkSGF2ZUZpcmVkKSkgJiYgZGlzcGF0Y2hUZXJtaW5hdGVDYWxsYmFja0NhbGxlZCkKKyAgICAg
ICAgICAgICAgICBwcmludGYoIlBBU1M6ICVzIHNjcmlwdCBvbiBkaXNwYXRjaCBxdWV1ZSB0aW1l
ZCBvdXQgYXMgZXhwZWN0ZWQuXG4iLCB0aWVyT3B0aW9ucy50aWVyKTsKKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgIGlmICgoZW5kVGltZSAtIHN0YXJ0VGltZSkgPj0gbWlsbGlz
ZWNvbmRzKHRpbWVBZnRlcldhdGNoZG9nU2hvdWxkSGF2ZUZpcmVkKSkKKyAgICAgICAgICAgICAg
ICAgICAgcHJpbnRmKCJGQUlMOiAlcyBzY3JpcHQgb24gZGlzcGF0Y2ggcXVldWUgZGlkIG5vdCB0
aW1lIG91dCBhcyBleHBlY3RlZC5cbiIsIHRpZXJPcHRpb25zLnRpZXIpOworICAgICAgICAgICAg
ICAgIGlmICghc2hvdWxkVGVybWluYXRlQ2FsbGJhY2tXYXNDYWxsZWQpCisgICAgICAgICAgICAg
ICAgICAgIHByaW50ZigiRkFJTDogJXMgc2NyaXB0IG9uIGRpc3BhdGNoIHF1ZXVlIHRpbWVvdXQg
Y2FsbGJhY2sgd2FzIG5vdCBjYWxsZWQuXG4iLCB0aWVyT3B0aW9ucy50aWVyKTsKKyAgICAgICAg
ICAgICAgICBmYWlsZWQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKICAgICAg
ICAgSlNHbG9iYWxDb250ZXh0UmVsZWFzZShjb250ZXh0KTsKIAogICAgICAgICBPcHRpb25zOjpz
ZXRPcHRpb25zKHNhdmVkT3B0aW9uc0J1aWxkZXIudG9TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAppbmRleCBjMTc1YWUwYzQ4
MmVkMjdiZDVmNmJkYzg3OTY4ZTc1ZDQ1YWY1MGVmLi42MTI4N2M3MzQ3MjE2ZGEzNjAxZDM1NGUy
MTRiY2I5MjhlZWVhNmRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0xvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5j
cHAKQEAgLTMwLDYgKzMwLDggQEAKICNpbmNsdWRlICJTYW1wbGluZ1Byb2ZpbGVyLmgiCiAjaW5j
bHVkZSAiV2FzbU1hY2hpbmVUaHJlYWRzLmgiCiAjaW5jbHVkZSA8dGhyZWFkPgorI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGhyZWFkcy9TaWduYWxzLmg+CiAKIG5h
bWVzcGFjZSBKU0MgewogCkBAIC0xNDgsNiArMTUwLDEwIEBAIHZvaWQgSlNMb2NrOjpkaWRBY3F1
aXJlTG9jaygpCiAgICAgV2FzbTo6c3RhcnRUcmFja2luZ0N1cnJlbnRUaHJlYWQoKTsKICNlbmRp
ZgogCisjaWYgT1MoREFSV0lOKQorICAgIFdURjo6cmVnaXN0ZXJUaHJlYWQoJlRocmVhZDo6Y3Vy
cmVudCgpKTsKKyNlbmRpZgorCiAgICAgbV92bS0+dHJhcHMoKS5ub3RpZnlHcmFiQWxsTG9ja3Mo
KTsKIAogI2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvT3B0aW9ucy5jcHAKaW5kZXggYjA0ZGUzNWE1MzYxNTA4NDM4NTc1YzIyN2E1MDE0
ZGQwYzUxYmFhMi4uMDY1ZTQ0NDE3NTg4NTEwOGI3N2FmODVlMTFmNTkyYmI5YjE3YTBiNSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKQEAgLTQzLDYgKzQzLDcg
QEAKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ0V4
dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRlIDx3
dGYvdGhyZWFkcy9TaWduYWxzLmg+CiAKICNpZiBQTEFURk9STShDT0NPQSkKICNpbmNsdWRlIDxj
cnRfZXh0ZXJucy5oPgpAQCAtMzU0LDYgKzM1NSwxMCBAQCBzdGF0aWMgdm9pZCBvdmVycmlkZURl
ZmF1bHRzKCkKICNpZiAhRU5BQkxFKFdFQkFTU0VNQkxZX0ZBU1RfTUVNT1JZKQogICAgIE9wdGlv
bnM6OnVzZVdlYkFzc2VtYmx5RmFzdE1lbW9yeSgpID0gZmFsc2U7CiAjZW5kaWYKKworI2lmIE9T
KERBUldJTikKKyAgICBPcHRpb25zOjp1c2VNYWNoRm9yRXhjZXB0aW9ucygpID0gdHJ1ZTsKKyNl
bmRpZgogfQogCiBzdGF0aWMgdm9pZCByZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKCkKQEAgLTU0
NSw2ICs1NTAsOSBAQCB2b2lkIE9wdGlvbnM6OmluaXRpYWxpemUoKQogCiAgICAgICAgICAgICBk
dW1wT3B0aW9uc0lmTmVlZGVkKCk7CiAgICAgICAgICAgICBlbnN1cmVPcHRpb25zQXJlQ29oZXJl
bnQoKTsKKworICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZU1hY2hGb3JFeGNlcHRpb25zKCkp
CisgICAgICAgICAgICAgICAgV1RGOjpoYW5kbGVTaWduYWxzV2l0aE1hY2goKTsKICAgICAgICAg
fSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAppbmRleCBjZjlk
YzJiMmE4MjU2OGVlMDdkYTA4ODllMzliNmIyZjlkY2Q3OTc1Li4yMjc0ZDFjZGViMzMzNmUzN2Fi
NDQ3M2VhNDExNmVhMzIyOWU5MzdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0
aW9ucy5oCkBAIC00MjAsNiArNDIwLDggQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJp
bmc7CiAgICAgdih1bnNpZ25lZCwgd2F0Y2hkb2csIDAsIE5vcm1hbCwgIndhdGNoZG9nIHRpbWVv
dXQgKDAgPSBEaXNhYmxlZCwgTiA9IGEgdGltZW91dCBwZXJpb2Qgb2YgTiBtaWxsaXNlY29uZHMp
IikgXAogICAgIHYoYm9vbCwgdXNlUG9sbGluZ1RyYXBzLCBmYWxzZSwgTm9ybWFsLCAidXNlIHBv
bGxpbmcgKGluc3RlYWQgb2Ygc2lnbmFsbGluZykgVk0gdHJhcHMiKSBcCiAgICAgXAorICAgIHYo
Ym9vbCwgdXNlTWFjaEZvckV4Y2VwdGlvbnMsIHRydWUsIE5vcm1hbCwgIlVzZSBtYWNoIGV4Y2Vw
dGlvbnMgcmF0aGVyIHRoYW4gc2lnbmFscyB0byBoYW5kbGUgZmF1bHRzIGFuZCBwYXNzIHRocmVh
ZCBtZXNzYWdlcy4gKFRoaXMgZG9lcyBub3RoaW5nIG9uIHBsYXRmb3JtcyB3aXRob3V0IG1hY2gp
IikgXAorICAgIFwKICAgICB2KGJvb2wsIHVzZUlDU3RhdHMsIGZhbHNlLCBOb3JtYWwsIG51bGxw
dHIpIFwKICAgICBcCiAgICAgdih1bnNpZ25lZCwgcHJvdG90eXBlSGl0Q291bnRGb3JMTEludENh
Y2hpbmcsIDIsIE5vcm1hbCwgIk51bWJlciBvZiBwcm90b3R5cGUgcHJvcGVydHkgaGl0cyBiZWZv
cmUgY2FjaGluZyBhIHByb3RvdHlwZSBpbiB0aGUgTExJbnQuIEEgY291bnQgb2YgMCBtZWFucyBu
ZXZlciBjYWNoZS4iKSBcCkBAIC00NDMsNiArNDQ1LDcgQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBv
cHRpb25TdHJpbmc7CiAgICAgdih1bnNpZ25lZCwgd2ViQXNzZW1ibHlCQlFPcHRpbWl6YXRpb25M
ZXZlbCwgMSwgTm9ybWFsLCAiQjMgT3B0aW1pemF0aW9uIGxldmVsIGZvciBCQlEgV2ViIEFzc2Vt
Ymx5IG1vZHVsZSBjb21waWxhdGlvbnMuIikgXAogICAgIHYodW5zaWduZWQsIHdlYkFzc2VtYmx5
T01HT3B0aW1pemF0aW9uTGV2ZWwsIE9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCksIE5vcm1h
bCwgIkIzIE9wdGltaXphdGlvbiBsZXZlbCBmb3IgT01HIFdlYiBBc3NlbWJseSBtb2R1bGUgY29t
cGlsYXRpb25zLiIpIFwKICAgICBcCisgICAgdihib29sLCB1c2VCQlFUaWVyVXBDaGVja3MsIHRy
dWUsIE5vcm1hbCwgIkVuYWJsZXMgdGllciB1cCBjaGVja3MgZm9yIG91ciBCQlEgY29kZS4iKSBc
CiAgICAgdih1bnNpZ25lZCwgd2ViQXNzZW1ibHlPTUdUaWVyVXBDb3VudCwgNTAwMCwgTm9ybWFs
LCAiVGhlIGNvdW50ZG93biBiZWZvcmUgd2UgdGllciB1cCBhIGZ1bmN0aW9uIHRvIE9NRy4iKSBc
CiAgICAgdih1bnNpZ25lZCwgd2ViQXNzZW1ibHlMb29wRGVjcmVtZW50LCAxNSwgTm9ybWFsLCAi
VGhlIGFtb3VudCB0aGUgdGllciB1cCBjb3VudGRvd24gaXMgZGVjcmVtZW50ZWQgb24gZWFjaCBs
b29wIGJhY2tlZGdlLiIpIFwKICAgICB2KHVuc2lnbmVkLCB3ZWJBc3NlbWJseUZ1bmN0aW9uRW50
cnlEZWNyZW1lbnQsIDEsIE5vcm1hbCwgIlRoZSBhbW91bnQgdGhlIHRpZXIgdXAgY291bnRkb3du
IGlzIGRlY3JlbWVudGVkIG9uIGVhY2ggZnVuY3Rpb24gZW50cnkuIikgXApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcAppbmRleCAxYmFhY2U2MDQ0ZTY2MGE4ZTU0NDFm
YmFkMDE4ZWE5MDkzMWE0YzkxLi4xMGQ3ODJhOGRjNDlhNWVkYTA4MWQ3M2Q2ODNkZmZlMTZmOGM4
ZjQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcApAQCAtNTMs
MTEgKzUzLDExIEBAIEFMV0FZU19JTkxJTkUgVk0mIFZNVHJhcHM6OnZtKCkgY29uc3QKICNpZiBF
TkFCTEUoU0lHTkFMX0JBU0VEX1ZNX1RSQVBTKQogCiBzdHJ1Y3QgU2lnbmFsQ29udGV4dCB7Ci0g
ICAgU2lnbmFsQ29udGV4dChtY29udGV4dF90JiBtY29udGV4dCkKLSAgICAgICAgOiBtY29udGV4
dChtY29udGV4dCkKLSAgICAgICAgLCB0cmFwUEMoTWFjaGluZUNvbnRleHQ6Omluc3RydWN0aW9u
UG9pbnRlcihtY29udGV4dCkpCi0gICAgICAgICwgc3RhY2tQb2ludGVyKE1hY2hpbmVDb250ZXh0
OjpzdGFja1BvaW50ZXIobWNvbnRleHQpKQotICAgICAgICAsIGZyYW1lUG9pbnRlcihNYWNoaW5l
Q29udGV4dDo6ZnJhbWVQb2ludGVyKG1jb250ZXh0KSkKKyAgICBTaWduYWxDb250ZXh0KFBsYXRm
b3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMpCisgICAgICAgIDogY29udGV4dChyZWdpc3RlcnMpCisg
ICAgICAgICwgdHJhcFBDKE1hY2hpbmVDb250ZXh0OjppbnN0cnVjdGlvblBvaW50ZXIoY29udGV4
dCkpCisgICAgICAgICwgc3RhY2tQb2ludGVyKE1hY2hpbmVDb250ZXh0OjpzdGFja1BvaW50ZXIo
Y29udGV4dCkpCisgICAgICAgICwgZnJhbWVQb2ludGVyKE1hY2hpbmVDb250ZXh0OjpmcmFtZVBv
aW50ZXIoY29udGV4dCkpCiAgICAgewogI2lmIENQVShYODZfNjQpIHx8IENQVShYODYpCiAgICAg
ICAgIC8vIE9uIFg4Nl82NCwgU0lHVFJBUCByZXBvcnRzIHRoZSBhZGRyZXNzIGFmdGVyIHRoZSB0
cmFwcGluZyBQQy4gU28sIGRlYyBieSAxLgpAQCAtNjgsMTEgKzY4LDExIEBAIHN0cnVjdCBTaWdu
YWxDb250ZXh0IHsKICAgICB2b2lkIGFkanVzdFBDVG9Qb2ludFRvVHJhcHBpbmdJbnN0cnVjdGlv
bigpCiAgICAgewogI2lmIENQVShYODZfNjQpIHx8IENQVShYODYpCi0gICAgICAgIE1hY2hpbmVD
b250ZXh0OjppbnN0cnVjdGlvblBvaW50ZXIobWNvbnRleHQpID0gdHJhcFBDOworICAgICAgICBN
YWNoaW5lQ29udGV4dDo6aW5zdHJ1Y3Rpb25Qb2ludGVyKGNvbnRleHQpID0gdHJhcFBDOwogI2Vu
ZGlmCiAgICAgfQogCi0gICAgbWNvbnRleHRfdCYgbWNvbnRleHQ7CisgICAgUGxhdGZvcm1SZWdp
c3RlcnMmIGNvbnRleHQ7CiAgICAgdm9pZCogdHJhcFBDOwogICAgIHZvaWQqIHN0YWNrUG9pbnRl
cjsKICAgICB2b2lkKiBmcmFtZVBvaW50ZXI7CkBAIC0xMzAsMTEgKzEzMCwxMyBAQCBzdGF0aWMg
RXhwZWN0ZWQ8Vk1BbmRTdGFja0JvdW5kcywgVk1UcmFwczo6RXJyb3I+IGZpbmRBY3RpdmVWTUFu
ZFN0YWNrQm91bmRzKFNpZwogCiBzdGF0aWMgdm9pZCBpbnN0YWxsU2lnbmFsSGFuZGxlcigpCiB7
Ci0gICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFsOjpUcmFwLCBbXSAoaW50LCBzaWdpbmZv
X3QqLCB2b2lkKiB1YXApIC0+IFNpZ25hbEFjdGlvbiB7Ci0gICAgICAgIFNpZ25hbENvbnRleHQg
Y29udGV4dChzdGF0aWNfY2FzdDx1Y29udGV4dF90Kj4odWFwKS0+dWNfbWNvbnRleHQpOworICAg
IGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbDo6VHJhcCwgW10gKFNpZ25hbCwgU2lnSW5mbyYs
IFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMpIC0+IFNpZ25hbEFjdGlvbiB7CisgICAgICAg
IFNpZ25hbENvbnRleHQgY29udGV4dChyZWdpc3RlcnMpOwogCi0gICAgICAgIGlmICghaXNKSVRQ
Qyhjb250ZXh0LnRyYXBQQykpCisgICAgICAgIGlmICghaXNKSVRQQyhjb250ZXh0LnRyYXBQQykp
IHsKKyAgICAgICAgICAgIGRhdGFMb2dMbigidHJhcHBpbmcgcGM6ICIsIFJhd1BvaW50ZXIoY29u
dGV4dC50cmFwUEMpLCAiIGppdCBzdGFydDogIiwgc3RhcnRPZkZpeGVkRXhlY3V0YWJsZU1lbW9y
eVBvb2wsICIgaml0IGVuZDogIiwgZW5kT2ZGaXhlZEV4ZWN1dGFibGVNZW1vcnlQb29sKTsKICAg
ICAgICAgICAgIHJldHVybiBTaWduYWxBY3Rpb246Ok5vdEhhbmRsZWQ7CisgICAgICAgIH0KIAog
ICAgICAgICAvLyBGSVhNRTogVGhpcyBjdXJyZW50bHkgZWF0cyBhbGwgdHJhcHMgaW5jbHVkaW5n
IGppdCBhc3NlcnRzIHdlIHNob3VsZCBtYWtlIHN1cmUgdGhpcwogICAgICAgICAvLyBhbHdheXMg
d29ya3MuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzEwMzkKQEAg
LTQwNCw4ICs0MDYsOCBAQCB2b2lkIFZNVHJhcHM6OlNpZ25hbFNlbmRlcjo6c2VuZCgpCiAgICAg
ICAgICAgICBWTSYgdm0gPSAqbV92bTsKICAgICAgICAgICAgIGF1dG8gb3B0aW9uYWxPd25lclRo
cmVhZCA9IHZtLm93bmVyVGhyZWFkKCk7CiAgICAgICAgICAgICBpZiAob3B0aW9uYWxPd25lclRo
cmVhZCkgewotICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlKCpvcHRpb25hbE93bmVyVGhyZWFk
LnZhbHVlKCkuZ2V0KCksIFtdIChzaWdpbmZvX3QqLCB1Y29udGV4dF90KiB1Y29udGV4dCkgLT4g
dm9pZCB7Ci0gICAgICAgICAgICAgICAgICAgIFNpZ25hbENvbnRleHQgY29udGV4dCh1Y29udGV4
dC0+dWNfbWNvbnRleHQpOworICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlKCpvcHRpb25hbE93
bmVyVGhyZWFkLnZhbHVlKCkuZ2V0KCksIFtdIChQbGF0Zm9ybVJlZ2lzdGVycyYgcmVnaXN0ZXJz
KSAtPiB2b2lkIHsKKyAgICAgICAgICAgICAgICAgICAgU2lnbmFsQ29udGV4dCBjb250ZXh0KHJl
Z2lzdGVycyk7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8gYWN0aXZlVk1BbmRTdGFja0JvdW5k
cyA9IGZpbmRBY3RpdmVWTUFuZFN0YWNrQm91bmRzKGNvbnRleHQpOwogICAgICAgICAgICAgICAg
ICAgICBpZiAoYWN0aXZlVk1BbmRTdGFja0JvdW5kcykgewogICAgICAgICAgICAgICAgICAgICAg
ICAgVk0qIHZtID0gYWN0aXZlVk1BbmRTdGFja0JvdW5kcy52YWx1ZSgpLnZtOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1NpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1NpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwCmluZGV4
IDRhZGFlZmYxY2RhMmQxZmJjNmY5MDYxZjA2M2UxNGQyZTYzMzAwNDguLmJiNDYwNWM2OTNlMTJk
ZGUwNTA4NGY3YTE3Y2QxZTQ0ZjdlOWU2NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS90b29scy9TaWdpbGxDcmFzaEFuYWx5emVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAKQEAgLTc4LDExICs3OCwxMSBAQCBw
cml2YXRlOgogI2VuZGlmIC8vIFVTRShPU19MT0cpCiAKIHN0cnVjdCBTaWduYWxDb250ZXh0IHsK
LSAgICBTaWduYWxDb250ZXh0KG1jb250ZXh0X3QmIG1jb250ZXh0KQotICAgICAgICA6IG1jb250
ZXh0KG1jb250ZXh0KQotICAgICAgICAsIG1hY2hpbmVQQyhNYWNoaW5lQ29udGV4dDo6aW5zdHJ1
Y3Rpb25Qb2ludGVyKG1jb250ZXh0KSkKLSAgICAgICAgLCBzdGFja1BvaW50ZXIoTWFjaGluZUNv
bnRleHQ6OnN0YWNrUG9pbnRlcihtY29udGV4dCkpCi0gICAgICAgICwgZnJhbWVQb2ludGVyKE1h
Y2hpbmVDb250ZXh0OjpmcmFtZVBvaW50ZXIobWNvbnRleHQpKQorICAgIFNpZ25hbENvbnRleHQo
UGxhdGZvcm1SZWdpc3RlcnMmIGNvbnRleHQpCisgICAgICAgIDogY29udGV4dChjb250ZXh0KQor
ICAgICAgICAsIG1hY2hpbmVQQyhNYWNoaW5lQ29udGV4dDo6aW5zdHJ1Y3Rpb25Qb2ludGVyKGNv
bnRleHQpKQorICAgICAgICAsIHN0YWNrUG9pbnRlcihNYWNoaW5lQ29udGV4dDo6c3RhY2tQb2lu
dGVyKGNvbnRleHQpKQorICAgICAgICAsIGZyYW1lUG9pbnRlcihNYWNoaW5lQ29udGV4dDo6ZnJh
bWVQb2ludGVyKGNvbnRleHQpKQogICAgIHsgfQogCiAgICAgdm9pZCBkdW1wKCkKQEAgLTExMiw3
ICsxMTIsNyBAQCBzdHJ1Y3QgU2lnbmFsQ29udGV4dCB7CiAgICAgICAgIHYoZ3MpCiAKICNkZWZp
bmUgRFVNUF9SRUdJU1RFUihfX3JlZykgXAotICAgICAgICBsb2coIlJlZ2lzdGVyICIgI19fcmVn
ICI6ICVwIiwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obWNvbnRleHQtPl9fc3MuX18jI19fcmVn
KSk7CisgICAgICAgIGxvZygiUmVnaXN0ZXIgIiAjX19yZWcgIjogJXAiLCByZWludGVycHJldF9j
YXN0PHZvaWQqPihjb250ZXh0Ll9fIyNfX3JlZykpOwogICAgICAgICBGT1JfRUFDSF9SRUdJU1RF
UihEVU1QX1JFR0lTVEVSKQogI3VuZGVmIEZPUl9FQUNIX1JFR0lTVEVSCiAKQEAgLTEyMCwyMCAr
MTIwLDIwIEBAIHN0cnVjdCBTaWduYWxDb250ZXh0IHsKICAgICAgICAgaW50IGk7CiAgICAgICAg
IGZvciAoaSA9IDA7IGkgPCAyODsgaSArPSA0KSB7CiAgICAgICAgICAgICBsb2coInglZDogJTAx
NmxseCB4JWQ6ICUwMTZsbHggeCVkOiAlMDE2bGx4IHglZDogJTAxNmxseCIsCi0gICAgICAgICAg
ICAgICAgaSwgbWNvbnRleHQtPl9fc3MuX194W2ldLAotICAgICAgICAgICAgICAgIGkrMSwgbWNv
bnRleHQtPl9fc3MuX194W2krMV0sCi0gICAgICAgICAgICAgICAgaSsyLCBtY29udGV4dC0+X19z
cy5fX3hbaSsyXSwKLSAgICAgICAgICAgICAgICBpKzMsIG1jb250ZXh0LT5fX3NzLl9feFtpKzNd
KTsKKyAgICAgICAgICAgICAgICBpLCBjb250ZXh0Ll9feFtpXSwKKyAgICAgICAgICAgICAgICBp
KzEsIGNvbnRleHQuX194W2krMV0sCisgICAgICAgICAgICAgICAgaSsyLCBjb250ZXh0Ll9feFtp
KzJdLAorICAgICAgICAgICAgICAgIGkrMywgY29udGV4dC5fX3hbaSszXSk7CiAgICAgICAgIH0K
ICAgICAgICAgQVNTRVJUKGkgPCAyOSk7CiAgICAgICAgIGxvZygieCVkOiAlMDE2bGx4IGZwOiAl
MDE2bGx4IGxyOiAlMDE2bGx4IiwKLSAgICAgICAgICAgIGksIG1jb250ZXh0LT5fX3NzLl9feFtp
XSwgbWNvbnRleHQtPl9fc3MuX19mcCwgbWNvbnRleHQtPl9fc3MuX19scik7CisgICAgICAgICAg
ICBpLCBjb250ZXh0Ll9feFtpXSwgY29udGV4dC5fX2ZwLCBjb250ZXh0Ll9fbHIpOwogICAgICAg
ICBsb2coInNwOiAlMDE2bGx4IHBjOiAlMDE2bGx4IGNwc3I6ICUwOHgiLAotICAgICAgICAgICAg
bWNvbnRleHQtPl9fc3MuX19zcCwgbWNvbnRleHQtPl9fc3MuX19wYywgbWNvbnRleHQtPl9fc3Mu
X19jcHNyKTsKKyAgICAgICAgICAgIGNvbnRleHQuX19zcCwgY29udGV4dC5fX3BjLCBjb250ZXh0
Ll9fY3Bzcik7CiAjZW5kaWYKICAgICB9CiAKLSAgICBtY29udGV4dF90JiBtY29udGV4dDsKKyAg
ICBQbGF0Zm9ybVJlZ2lzdGVycyYgY29udGV4dDsKICAgICB2b2lkKiBtYWNoaW5lUEM7CiAgICAg
dm9pZCogc3RhY2tQb2ludGVyOwogICAgIHZvaWQqIGZyYW1lUG9pbnRlcjsKQEAgLTE0Miw4ICsx
NDIsOCBAQCBzdHJ1Y3QgU2lnbmFsQ29udGV4dCB7CiBzdGF0aWMgdm9pZCBpbnN0YWxsQ3Jhc2hI
YW5kbGVyKCkKIHsKICNpZiBDUFUoWDg2XzY0KSB8fCBDUFUoQVJNNjQpCi0gICAgaW5zdGFsbFNp
Z25hbEhhbmRsZXIoU2lnbmFsOjpJbGwsIFtdIChpbnQsIHNpZ2luZm9fdCosIHZvaWQqIHVhcCkg
ewotICAgICAgICBTaWduYWxDb250ZXh0IGNvbnRleHQoc3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+
KHVhcCktPnVjX21jb250ZXh0KTsKKyAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWw6Okls
bCwgW10gKFNpZ25hbCwgU2lnSW5mbyYsIFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMpIHsK
KyAgICAgICAgU2lnbmFsQ29udGV4dCBjb250ZXh0KHJlZ2lzdGVycyk7CiAKICAgICAgICAgaWYg
KCFpc0pJVFBDKGNvbnRleHQubWFjaGluZVBDKSkKICAgICAgICAgICAgIHJldHVybiBTaWduYWxB
Y3Rpb246Ok5vdEhhbmRsZWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQkJRUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxh
bi5jcHAKaW5kZXggMWRkMGNkMWQ4MzVjNmMyZjIzMWIwMGI4ODZkZGU0YWY3MmMyNjNjZS4uYjFi
NTk4ZDIwYzVjMDA3N2Q5ZTlkMDhlMzY4YWQ1Y2ExNzgzMWJhZiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcApAQCAtMjQyLDcgKzI0Miw3IEBAIHZvaWQgQkJR
UGxhbjo6Y29tcGlsZUZ1bmN0aW9ucyhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAgICAgICAg
IEFTU0VSVCh2YWxpZGF0ZUZ1bmN0aW9uKGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBz
aWduYXR1cmUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCkpKTsKIAogICAgICAgICBtX3VubGlu
a2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdID0gVmVjdG9yPFVubGlua2VkV2FzbVRv
V2FzbUNhbGw+KCk7Ci0gICAgICAgIFRpZXJVcENvdW50KiB0aWVyVXAgPSAmbV90aWVyVXBDb3Vu
dHNbZnVuY3Rpb25JbmRleF07CisgICAgICAgIFRpZXJVcENvdW50KiB0aWVyVXAgPSBPcHRpb25z
Ojp1c2VCQlFUaWVyVXBDaGVja3MoKSA/ICZtX3RpZXJVcENvdW50c1tmdW5jdGlvbkluZGV4XSA6
IG51bGxwdHI7CiAgICAgICAgIGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRD
b21waWxlKG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5jdGlvbkluZGV4XSwgZnVuY3Rpb25TdGFy
dCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tm
dW5jdGlvbkluZGV4XSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21waWxh
dGlvbk1vZGU6OkJCUU1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCk7CiAKICAgICAgICAgaWYg
KFVOTElLRUxZKCFwYXJzZUFuZENvbXBpbGVSZXN1bHQpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwCmluZGV4IDJlMGM5
OWEzOWJlYmQzMTc4YjkxNDhkOTU4ZmU1M2U1N2E2MjI5N2UuLjI2NGMzNGRlNDVkYTE3NWE1ZDUx
NDFjMTcxZWZlOTVlMDYzYzVlMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwCkBAIC01Miw5ICs1Miw4IEBAIHN0YXRp
YyBMYXp5TmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxzdGQ6OnR1cGxlPHZvaWQqLCB2b2lkKj4+PiBj
b2RlTG9jYXRpb25zOyAvLyAoCiAKIHN0YXRpYyBib29sIGZhc3RIYW5kbGVySW5zdGFsbGVkIHsg
ZmFsc2UgfTsKIAotc3RhdGljIFNpZ25hbEFjdGlvbiB0cmFwSGFuZGxlcihpbnQsIHNpZ2luZm9f
dCogc2lnSW5mbywgdm9pZCogdWNvbnRleHQpCitzdGF0aWMgU2lnbmFsQWN0aW9uIHRyYXBIYW5k
bGVyKFNpZ25hbCwgU2lnSW5mbyYgc2lnSW5mbywgUGxhdGZvcm1SZWdpc3RlcnMmIGNvbnRleHQp
CiB7Ci0gICAgbWNvbnRleHRfdCYgY29udGV4dCA9IHN0YXRpY19jYXN0PHVjb250ZXh0X3QqPih1
Y29udGV4dCktPnVjX21jb250ZXh0OwogICAgIHZvaWQqIGZhdWx0aW5nSW5zdHJ1Y3Rpb24gPSBN
YWNoaW5lQ29udGV4dDo6aW5zdHJ1Y3Rpb25Qb2ludGVyKGNvbnRleHQpOwogICAgIGRhdGFMb2dM
bklmKHZlcmJvc2UsICJzdGFydGluZyBoYW5kbGVyIGZvciBmYXVsdCBhdDogIiwgUmF3UG9pbnRl
cihmYXVsdGluZ0luc3RydWN0aW9uKSk7CiAKQEAgLTY0LDcgKzYzLDcgQEAgc3RhdGljIFNpZ25h
bEFjdGlvbiB0cmFwSGFuZGxlcihpbnQsIHNpZ2luZm9fdCogc2lnSW5mbywgdm9pZCogdWNvbnRl
eHQpCiAgICAgaWYgKGlzSklUUEMoZmF1bHRpbmdJbnN0cnVjdGlvbikpIHsKICAgICAgICAgYm9v
bCBmYXVsdGVkSW5BY3RpdmVGYXN0TWVtb3J5ID0gZmFsc2U7CiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHZvaWQqIGZhdWx0aW5nQWRkcmVzcyA9IHNpZ0luZm8tPnNpX2FkZHI7CisgICAgICAgICAg
ICB2b2lkKiBmYXVsdGluZ0FkZHJlc3MgPSBzaWdJbmZvLmZhdWx0aW5nQWRkcmVzczsKICAgICAg
ICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJjaGVja2luZyBmYXVsdGluZyBhZGRyZXNzOiAi
LCBSYXdQb2ludGVyKGZhdWx0aW5nQWRkcmVzcyksICIgaXMgaW4gYW4gYWN0aXZlIGZhc3QgbWVt
b3J5Iik7CiAgICAgICAgICAgICBmYXVsdGVkSW5BY3RpdmVGYXN0TWVtb3J5ID0gV2FzbTo6TWVt
b3J5OjphZGRyZXNzSXNJbkFjdGl2ZUZhc3RNZW1vcnkoZmF1bHRpbmdBZGRyZXNzKTsKICAgICAg
ICAgfQpAQCAtMTI0LDExICsxMjMsMTEgQEAgdm9pZCBlbmFibGVGYXN0TWVtb3J5KCkKICAgICAg
ICAgICAgIHJldHVybjsKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWV9GQVNUX01FTU9SWSkKLSAg
ICAgICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFsOjpCdXMsIFtdIChpbnQgc2lnbmFsLCBz
aWdpbmZvX3QqIHNpZ0luZm8sIHZvaWQqIHVjb250ZXh0KSB7CisgICAgICAgIGluc3RhbGxTaWdu
YWxIYW5kbGVyKFNpZ25hbDo6QnVzLCBbXSAoU2lnbmFsIHNpZ25hbCwgU2lnSW5mbyYgc2lnSW5m
bywgUGxhdGZvcm1SZWdpc3RlcnMmIHVjb250ZXh0KSB7CiAgICAgICAgICAgICByZXR1cm4gdHJh
cEhhbmRsZXIoc2lnbmFsLCBzaWdJbmZvLCB1Y29udGV4dCk7CiAgICAgICAgIH0pOwogCi0gICAg
ICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbDo6U2VnViwgW10gKGludCBzaWduYWwsIHNp
Z2luZm9fdCogc2lnSW5mbywgdm9pZCogdWNvbnRleHQpIHsKKyAgICAgICAgaW5zdGFsbFNpZ25h
bEhhbmRsZXIoU2lnbmFsOjpTZWdWLCBbXSAoU2lnbmFsIHNpZ25hbCwgU2lnSW5mbyYgc2lnSW5m
bywgUGxhdGZvcm1SZWdpc3RlcnMmIHVjb250ZXh0KSB7CiAgICAgICAgICAgICByZXR1cm4gdHJh
cEhhbmRsZXIoc2lnbmFsLCBzaWdJbmZvLCB1Y29udGV4dCk7CiAgICAgICAgIH0pOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWFjaGluZVRocmVhZHMuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1hY2hpbmVUaHJlYWRzLmNwcAppbmRl
eCA1YWFjODdhY2I1NzQ3YzdmY2EyZjkzNmVjOWNmNjc4YjQzMTc4MTcxLi4wYTM2N2ZkNWUyMjUy
N2U5YzNjODc1MzZlY2ZkNzJiMTNkZjc5ZDViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XYXNtTWFjaGluZVRocmVhZHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21NYWNoaW5lVGhyZWFkcy5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNs
dWRlICJNYWNoaW5lU3RhY2tNYXJrZXIuaCIKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkTWVzc2FnZS5oPgorI2luY2x1ZGUgPHd0Zi90aHJlYWRz
L1NpZ25hbHMuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIApAQCAtNTcs
NyArNTgsNyBAQCB2b2lkIHJlc2V0SW5zdHJ1Y3Rpb25DYWNoZU9uQWxsVGhyZWFkcygpCiAKICAg
ICBjb25zdCBEb3VibHlMaW5rZWRMaXN0PE1hY2hpbmVUaHJlYWRzOjpNYWNoaW5lVGhyZWFkPiYg
dGhyZWFkcyA9IHdhc21UaHJlYWRzKCkudGhyZWFkc0xpc3RIZWFkKGxvY2tlcik7CiAgICAgZm9y
IChjb25zdCBhdXRvKiB0aHJlYWQgPSB0aHJlYWRzLmhlYWQoKTsgdGhyZWFkOyB0aHJlYWQgPSB0
aHJlYWQtPm5leHQoKSkgewotICAgICAgICBzZW5kTWVzc2FnZSh0aHJlYWQtPm1fdGhyZWFkLmdl
dCgpLCBbXSAoc2lnaW5mb190KiwgdWNvbnRleHRfdCopIHsKKyAgICAgICAgc2VuZE1lc3NhZ2Uo
dGhyZWFkLT5tX3RocmVhZC5nZXQoKSwgW10gKGNvbnN0IFBsYXRmb3JtUmVnaXN0ZXJzJikgewog
ICAgICAgICAgICAgLy8gSXQncyBsaWtlbHkgdGhhdCB0aGUgc2lnbmFsIGhhbmRsZXIgd2lsbCBh
bHJlYWR5IHJlc2V0IHRoZSBpbnN0cnVjdGlvbiBjYWNoZSBidXQgd2UgbWlnaHQgYXMgd2VsbCBi
ZSBzdXJlLgogICAgICAgICAgICAgV1RGOjpjcm9zc01vZGlmeWluZ0NvZGVGZW5jZSgpOwogICAg
ICAgICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ29uZmlndXJhdGlvbnMvV1RGLnhjY29u
ZmlnIGIvU291cmNlL1dURi9Db25maWd1cmF0aW9ucy9XVEYueGNjb25maWcKaW5kZXggNDIxZWZk
OTYxYzE0NjhjZDIwZGRjNWJiZjg4OTYyMGVlMWNmNThkYy4uODdhYTY0Zjg3YzY3ZWRjNWM4Y2I2
ZGQwOTMzYTgyODZmOTBkYTk2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9Db25maWd1cmF0aW9u
cy9XVEYueGNjb25maWcKKysrIGIvU291cmNlL1dURi9Db25maWd1cmF0aW9ucy9XVEYueGNjb25m
aWcKQEAgLTI3LDMgKzI3LDYgQEAgUFJPRFVDVF9OQU1FID0gV1RGOwogCiBHQ0NfU1lNQk9MU19Q
UklWQVRFX0VYVEVSTiA9IFlFUzsKIFNUUklQX0lOU1RBTExFRF9QUk9EVUNUID0gTk87CisKK0VY
Q0xVREVEX1NPVVJDRV9GSUxFX05BTUVTXyA9IE1hY2hFeGNlcHRpb25zLmRlZnMKK0VYQ0xVREVE
X1NPVVJDRV9GSUxFX05BTUVTID0gJChFWENMVURFRF9TT1VSQ0VfRklMRV9OQU1FU18kKFVTRV9J
TlRFUk5BTF9TREspKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggNWY0NTI4N2Y2ZTNjNjg4NWIyMmJhMjc3NmNmYmM2YTMzMjNiZDA1Yi4uNTg1NDRjY2I2MmNi
MjIxMmJhZWU3NmY0ZDJhMDFlODliNmI3YjA5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCkBAIC02NCw2ICs2NCw3IEBACiAJCTUyMTgzMDEyQzk5RTQ3NkE4NEVF
QkVBOCAvKiBTeW1ib2xJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEY3MkJCREIxMDdGQTQyNDg4NjE3OEI5RSAvKiBTeW1ib2xJbXBsLmNwcCAq
LzsgfTsKIAkJNTMxMUJENTMxRUE3MUNBRDAwNTI1MjgxIC8qIFNpZ25hbHMuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMxMUJENTExRUE3MUNBRDAw
NTI1MjgxIC8qIFNpZ25hbHMuY3BwICovOyB9OwogCQk1MzExQkQ1QzFFQTgyMkY5MDA1MjUyODEg
LyogVGhyZWFkTWVzc2FnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MzExQkQ1QjFFQTgyMkY5MDA1MjUyODEgLyogVGhyZWFkTWVzc2FnZS5jcHAg
Ki87IH07CisJCTUzNTM0RjJBMUVDMEUxMEUwMDE0MUIyRiAvKiBNYWNoRXhjZXB0aW9ucy5kZWZz
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTM1MzRGMjkx
RUMwRTEwRTAwMTQxQjJGIC8qIE1hY2hFeGNlcHRpb25zLmRlZnMgKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoQ2xpZW50LCBTZXJ2ZXIsICk7IH07IH07CiAJCTcwQTk5M0ZFMUFENzE1MTMw
MEZBNjE1QiAvKiBTeW1ib2xSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3MEE5OTNGQzFBRDcxNTEzMDBGQTYxNUIgLyogU3ltYm9sUmVn
aXN0cnkuY3BwICovOyB9OwogCQk3MEVDQTYwRDFCMDI0MjY4MDA0NDk3MzkgLyogQXRvbWljU3Ry
aW5nSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3MEVDQTYwQTFCMDI0MjY4MDA0NDk3MzkgLyogQXRvbWljU3RyaW5nSW1wbC5jcHAgKi87IH07
CiAJCTdBRkVDNkIxMUVCMjJCNTkwMERBREUzNiAvKiBVVUlELmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBRkVDNkIwMUVCMjJCNTkwMERBREUzNiAv
KiBVVUlELmNwcCAqLzsgfTsKQEAgLTI5OSw2ICszMDAsNyBAQAogCQk1MzExQkQ1NzFFQTdFMUEx
MDA1MjUyODEgLyogU2lnbmFscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
aWduYWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMTFCRDU5MUVBODFBOTYw
MDUyNTI4MSAvKiBUaHJlYWRNZXNzYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFRocmVhZE1lc3NhZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMxMUJE
NUIxRUE4MjJGOTAwNTI1MjgxIC8qIFRocmVhZE1lc3NhZ2UuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gVGhyZWFkTWVzc2FnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTUzNTM0RjI5MUVDMEUxMEUwMDE0MUIyRiAvKiBNYWNoRXhjZXB0aW9ucy5k
ZWZzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5taWc7IHBhdGggPSBNYWNoRXhjZXB0aW9ucy5kZWZz
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzlFQjA2MjFENTUyODQyMDBDODJFRjcg
LyogTEVCRGVjb2Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMRUJEZWNv
ZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRUMyNTNDMUU5NUFEMzAwMDA4
MzFCOSAvKiBQcmlvcml0eVF1ZXVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFByaW9yaXR5UXVldWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTUzMDcxQzkx
QzQwNDI3MjAwMzg0ODk4IC8qIFRpbnlMUlVDYWNoZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBUaW55TFJVQ2FjaGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTEwMjMsNiArMTAyNSw3IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQkxQTQyOEI4QjFDOEY4OURE
MDA1MUU5RUIgLyogQXBwS2l0Q29tcGF0aWJpbGl0eURlY2xhcmF0aW9ucy5oICovLAogCQkJCTFB
Q0FERDgyMTg4NDQ4MDEwMEQ4QjcxRCAvKiBEZXByZWNhdGVkU3ltYm9sc1VzZWRCeVNhZmFyaS5t
bSAqLywKKwkJCQk1MzUzNEYyOTFFQzBFMTBFMDAxNDFCMkYgLyogTWFjaEV4Y2VwdGlvbnMuZGVm
cyAqLywKIAkJCQlBOEE0NzJDNTE1MUE4MjVBMDA0MTIzRkYgLyogTWFpblRocmVhZE1hYy5tbSAq
LywKIAkJCSk7CiAJCQlwYXRoID0gbWFjOwpAQCAtMTM0Niw2ICsxMzQ5LDcgQEAKIAkJCQkxNDNG
NjExRjE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
M0I3MjVFQzk4NzQ0NkFEOTNGMUE0NDAgLyogUmFuZG9tRGV2aWNlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUE4QTQ3NDE0MTUxQTgyNUIwMDQxMjNGRiAvKiBSYW5kb21OdW1iZXIuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJNTM1MzRGMkExRUMwRTEwRTAwMTQxQjJGIC8qIE1hY2hFeGNlcHRpb25z
LmRlZnMgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQxQTE1MUE4MjVCMDA0MTIzRkYgLyogUmVm
Q291bnRlZExlYWtDb3VudGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJDREVEMEYzMTgxMTVD
ODUwMDREQkE3MCAvKiBSdW5Mb29wLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJDREVEMEVGMTgx
MTVDMzgwMDREQkE3MCAvKiBSdW5Mb29wQ0YuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVJlZ2lzdGVycy5oIGIvU291cmNlL1dURi93dGYvUGxh
dGZvcm1SZWdpc3RlcnMuaAppbmRleCBkNWI1YWJjMjIxYmJhZDgyOTc2MTkzZWNlNTFjMWM3NjE3
NWRiMDZkLi45MmFhYmI5ZjljMzFkMWNkMmY0M2I5MDVmNjljNjI0Y2NmMjg4NjcyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVJlZ2lzdGVycy5oCisrKyBiL1NvdXJjZS9XVEYv
d3RmL1BsYXRmb3JtUmVnaXN0ZXJzLmgKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2lmIE9TKERBUldJ
TikKICNpbmNsdWRlIDxtYWNoL3RocmVhZF9hY3QuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KICNl
bGlmIE9TKFdJTkRPV1MpCiAjaW5jbHVkZSA8d2luZG93cy5oPgogI2Vsc2UKQEAgLTU1LDYgKzU2
LDExIEBAIHR5cGVkZWYgYXJtX3RocmVhZF9zdGF0ZTY0X3QgUGxhdGZvcm1SZWdpc3RlcnM7CiAj
ZXJyb3IgVW5rbm93biBBcmNoaXRlY3R1cmUKICNlbmRpZgogCitpbmxpbmUgUGxhdGZvcm1SZWdp
c3RlcnMmIHJlZ2lzdGVyc0Zyb21VQ29udGV4dCh1Y29udGV4dF90KiB1Y29udGV4dCkKK3sKKyAg
ICByZXR1cm4gdWNvbnRleHQtPnVjX21jb250ZXh0LT5fX3NzOworfQorCiAjZWxpZiBPUyhXSU5E
T1dTKQogCiB1c2luZyBQbGF0Zm9ybVJlZ2lzdGVycyA9IENPTlRFWFQ7CkBAIC02NSw2ICs3MSwx
MSBAQCBzdHJ1Y3QgUGxhdGZvcm1SZWdpc3RlcnMgewogICAgIG1jb250ZXh0X3QgbWFjaGluZUNv
bnRleHQ7CiB9OwogCitpbmxpbmUgUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVyc0Zyb21VQ29u
dGV4dCh1Y29udGV4dF90KiB1Y29udGV4dCkKK3sKKyAgICByZXR1cm4gdWNvbnRleHQtPnVjX21j
b250ZXh0OworfQorCiAjZWxzZQogCiBzdHJ1Y3QgUGxhdGZvcm1SZWdpc3RlcnMgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvU3RhY2tCb3VuZHMuaCBiL1NvdXJjZS9XVEYvd3RmL1N0YWNr
Qm91bmRzLmgKaW5kZXggNTU0NjA0ZjJhYjQ4NGM3Y2Y3MWVlMzg2MzBjZWI0Yzc5YzMzZTk3Mi4u
Y2Q2MmMxNDhhNmM3ZWZjOTUxN2E4YjA5YjhhMzJjN2ZlMTkwY2RlZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvU3RhY2tCb3VuZHMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9TdGFja0JvdW5k
cy5oCkBAIC01NCw3ICs1NCw2IEBAIHB1YmxpYzoKICAgICAgICAgOiBtX29yaWdpbihvcmlnaW4p
CiAgICAgICAgICwgbV9ib3VuZChlbmQpCiAgICAgewotICAgICAgICBjaGVja0NvbnNpc3RlbmN5
KCk7CiAgICAgfQogCiAgICAgdm9pZCogb3JpZ2luKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvd3RmL1RocmVhZEhvbGRlci5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXIu
Y3BwCmluZGV4IDMwYjIyN2NkYjhhYzUyNjA3NTBiNDdkNDgyYWJjMmQ1NWJlM2FjOTQuLjNhNzJl
MzdjNzAwZGUzYWY0ZjJlNzI1Y2E3YzlhZWQzOTZhODE3OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL1RocmVhZEhvbGRlci5jcHAKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkSG9sZGVy
LmNwcApAQCAtMzQsMTIgKzM0LDE3IEBACiAKICNpbmNsdWRlICJUaHJlYWRpbmcuaCIKIAorI2lu
Y2x1ZGUgPHd0Zi90aHJlYWRzL1NpZ25hbHMuaD4KKwogbmFtZXNwYWNlIFdURiB7CiAKIFRocmVh
ZFNwZWNpZmljS2V5IFRocmVhZEhvbGRlcjo6bV9rZXkgPSBJbnZhbGlkVGhyZWFkU3BlY2lmaWNL
ZXk7CiAKIFRocmVhZEhvbGRlcjo6flRocmVhZEhvbGRlcigpCiB7CisjaWYgT1MoREFSV0lOKQor
ICAgIHJlbW92ZVRocmVhZCgmbV90aHJlYWQuZ2V0KCkpOworI2VuZGlmCiAgICAgbV90aHJlYWQt
PmRpZEV4aXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2Fn
ZS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRNZXNzYWdlLmNwcAppbmRleCBmMTRiYzQ1ZDM2
MTRjN2M2NjM1ZWIxN2FiMGUyNzI4MTZhMTM3M2RkLi5iMDQwYTViNzFkYzFjYmQ1NTE1MzczZTZk
ZTY5M2M5NGQyYjU1MDc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRNZXNzYWdl
LmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRNZXNzYWdlLmNwcApAQCAtMzYsNiArMzYs
OSBAQAogI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KICNpbmNsdWRlIDx3dGYvdGhyZWFkcy9TaWdu
YWxzLmg+CiAKKyNpZiBPUyhEQVJXSU4pCisjaW5jbHVkZSA8bWFjaC90aHJlYWRfYWN0Lmg+Cisj
ZW5kaWYKIAogbmFtZXNwYWNlIFdURiB7CiAKQEAgLTgzLDEyICs4NiwxMiBAQCB2b2lkIGluaXRp
YWxpemVUaHJlYWRNZXNzYWdlcygpCiB9CiAKIFNVUFBSRVNTX0FTQU4KLU1lc3NhZ2VTdGF0dXMg
c2VuZE1lc3NhZ2VTY29wZWQoVGhyZWFkJiB0aHJlYWQsIGNvbnN0IFRocmVhZE1lc3NhZ2UmIG1l
c3NhZ2UpCitzdGF0aWMgTWVzc2FnZVN0YXR1cyBzZW5kTWVzc2FnZVNpZ25hbChUaHJlYWQmIHRo
cmVhZCwgY29uc3QgVGhyZWFkTWVzc2FnZSYgbWVzc2FnZSkKIHsKICAgICBjb25zdGV4cHIgU2ln
bmFsIHNpZ25hbCA9IFNpZ25hbDo6VXNyOwogICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNl
OwogICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2UsIFtdIHsKLSAgICAgICAgaW5zdGFsbFNpZ25hbEhh
bmRsZXIoc2lnbmFsLCBbXSAoaW50LCBzaWdpbmZvX3QqIGluZm8sIHZvaWQqIHVhcCkgeworICAg
ICAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihzaWduYWwsIFtdIChTaWduYWwsIFNpZ0luZm8mLCBQ
bGF0Zm9ybVJlZ2lzdGVycyYgY29udGV4dCkgewogICAgICAgICAgICAgVGhyZWFkKiB0aHJlYWQg
PSBUaHJlYWQ6OmN1cnJlbnRNYXlCZU51bGwoKTsKIAogICAgICAgICAgICAgaWYgKCF0aHJlYWQp
IHsKQEAgLTk4LDcgKzEwMSw3IEBAIE1lc3NhZ2VTdGF0dXMgc2VuZE1lc3NhZ2VTY29wZWQoVGhy
ZWFkJiB0aHJlYWQsIGNvbnN0IFRocmVhZE1lc3NhZ2UmIG1lc3NhZ2UpCiAKICAgICAgICAgICAg
IC8vIE5vZGUgc2hvdWxkIGJlIGRlbGV0ZWQgaW4gdGhlIHNlbmRlciB0aHJlYWQuIERlbGV0aW5n
IE5vZGVzIGluIHNpZ25hbCBoYW5kbGVyIGNhdXNlcyBkZWFkIGxvY2suCiAgICAgICAgICAgICB0
aHJlYWQtPnRocmVhZE1lc3NhZ2VzKCkuY29uc3VtZUFsbFdpdGhOb2RlKFsmXSAoVGhyZWFkTWVz
c2FnZURhdGEqIGRhdGEsIE5vZGUqIG5vZGUpIHsKLSAgICAgICAgICAgICAgICBkYXRhLT5tZXNz
YWdlKGluZm8sIHN0YXRpY19jYXN0PHVjb250ZXh0X3QqPih1YXApKTsKKyAgICAgICAgICAgICAg
ICBkYXRhLT5tZXNzYWdlKGNvbnRleHQpOwogICAgICAgICAgICAgICAgIC8vIEJ5IHNldHRpbmcg
cmFuIHZhcmlhYmxlLCAoMSkgdGhlIHNlbmRlciBhY2tub3dsZWRnZXMgdGhlIGNvbXBsZXRpb24g
YW5kCiAgICAgICAgICAgICAgICAgLy8gKDIpIGdldHMgdGhlIE5vZGUgdG8gYmUgZGVsZXRlZC4K
ICAgICAgICAgICAgICAgICBkYXRhLT5yYW4uc3RvcmUobm9kZSk7CkBAIC0xNTYsNiArMTU5LDYw
IEBAIE1lc3NhZ2VTdGF0dXMgc2VuZE1lc3NhZ2VTY29wZWQoVGhyZWFkJiB0aHJlYWQsIGNvbnN0
IFRocmVhZE1lc3NhZ2UmIG1lc3NhZ2UpCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKIH0KIAorI2lmIE9TKERBUldJTikKK3N0YXRpYyBNZXNzYWdlU3RhdHVzIHNlbmRNZXNzYWdl
TWFjaChUaHJlYWQmIHRocmVhZCwgY29uc3QgVGhyZWFkTWVzc2FnZSYgbWVzc2FnZSkKK3sKKyAg
ICBzdGF0aWMgU3RhdGljTG9jayBtZXNzYWdlTG9jazsKKyAgICBhdXRvIGxvY2tob2xkZXIgPSBo
b2xkTG9jayhtZXNzYWdlTG9jayk7CisKKyAgICBhdXRvIHJlc3VsdCA9IHRocmVhZC5zdXNwZW5k
KCk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBNZXNzYWdlU3RhdHVzOjpUaHJl
YWRFeGl0ZWQ7CisKKyNpZiBDUFUoWDg2KQorICAgIHVuc2lnbmVkIHVzZXJDb3VudCA9IHNpemVv
ZihyZWdpc3RlcnMpIC8gc2l6ZW9mKGludCk7CisgICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZs
YXZvciA9IGkzODZfVEhSRUFEX1NUQVRFOworI2VsaWYgQ1BVKFg4Nl82NCkKKyAgICB1bnNpZ25l
ZCB1c2VyQ291bnQgPSB4ODZfVEhSRUFEX1NUQVRFNjRfQ09VTlQ7CisgICAgdGhyZWFkX3N0YXRl
X2ZsYXZvcl90IGZsYXZvciA9IHg4Nl9USFJFQURfU1RBVEU2NDsKKyNlbGlmIENQVShBUk0pCisg
ICAgdW5zaWduZWQgdXNlckNvdW50ID0gQVJNX1RIUkVBRF9TVEFURV9DT1VOVDsKKyAgICB0aHJl
YWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9yID0gQVJNX1RIUkVBRF9TVEFURTsKKyNlbGlmIENQVShB
Uk02NCkKKyAgICB1bnNpZ25lZCB1c2VyQ291bnQgPSBBUk1fVEhSRUFEX1NUQVRFNjRfQ09VTlQ7
CisgICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IEFSTV9USFJFQURfU1RBVEU2NDsK
KyNlbHNlCisjZXJyb3IgVW5rbm93biBBcmNoaXRlY3R1cmUKKyNlbmRpZgorCisgICAgUGxhdGZv
cm1SZWdpc3RlcnMgcmVnaXN0ZXJzOworICAgIHRocmVhZF9zdGF0ZV90IHN0YXRlID0gcmVpbnRl
cnByZXRfY2FzdDx0aHJlYWRfc3RhdGVfdD4oJnJlZ2lzdGVycyk7CisgICAgdGhyZWFkX2dldF9z
dGF0ZSh0aHJlYWQubWFjaFRocmVhZCgpLCBmbGF2b3IsIHN0YXRlLCAmdXNlckNvdW50KTsKKwor
ICAgIG1lc3NhZ2UocmVnaXN0ZXJzKTsKKworICAgIHRocmVhZF9zZXRfc3RhdGUodGhyZWFkLm1h
Y2hUaHJlYWQoKSwgZmxhdm9yLCAodGhyZWFkX3N0YXRlX3QpJnJlZ2lzdGVycywgdXNlckNvdW50
KTsKKworICAgIHRocmVhZC5yZXN1bWUoKTsKKyAgICByZXR1cm4gTWVzc2FnZVN0YXR1czo6TWVz
c2FnZVJhbjsKK30KKworc3RhdGljIGJvb2wgdXNlTWFjaCA9IGZhbHNlOwordm9pZCBkZWxpdmVy
TWVzc2FnZXNVc2luZ01hY2goKSB7IHVzZU1hY2ggPSB0cnVlOyB9CisKKyNlbmRpZgorCitNZXNz
YWdlU3RhdHVzIHNlbmRNZXNzYWdlU2NvcGVkKFRocmVhZCYgdGhyZWFkLCBjb25zdCBUaHJlYWRN
ZXNzYWdlJiBtZXNzYWdlKQoreworI2lmIE9TKERBUldJTikKKyAgICBpZiAodXNlTWFjaCkKKyAg
ICAgICAgcmV0dXJuIHNlbmRNZXNzYWdlTWFjaCh0aHJlYWQsIG1lc3NhZ2UpOworI2VuZGlmCisg
ICAgcmV0dXJuIHNlbmRNZXNzYWdlU2lnbmFsKHRocmVhZCwgbWVzc2FnZSk7CisgICAgcmV0dXJu
IE1lc3NhZ2VTdGF0dXM6OlRocmVhZEV4aXRlZDsKK30KKworCiB9IC8vIG5hbWVzcGFjZSBXVEYK
IAogI2VuZGlmIC8vIFVTRShQVEhSRUFEUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1Ro
cmVhZE1lc3NhZ2UuaCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZE1lc3NhZ2UuaAppbmRleCA5YWU1
M2YyOWNmN2U4ZmIwMGVmOTIxMWQxNmNlMmNkZWQ2MDNlYzFiLi43NzQyZTFhY2JjNGIzYzg1ZGRm
NjYyODAwYzVhY2YwYWIyYWUxNDE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRN
ZXNzYWdlLmgKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5oCkBAIC0zNiw3ICsz
Niw3IEBAIG5hbWVzcGFjZSBXVEYgewogdm9pZCBpbml0aWFsaXplVGhyZWFkTWVzc2FnZXMoKTsK
IAogY2xhc3MgVGhyZWFkTWVzc2FnZURhdGE7Ci11c2luZyBUaHJlYWRNZXNzYWdlID0gU2NvcGVk
TGFtYmRhPHZvaWQoc2lnaW5mb190KiwgdWNvbnRleHRfdCopPjsKK3VzaW5nIFRocmVhZE1lc3Nh
Z2UgPSBTY29wZWRMYW1iZGE8dm9pZChQbGF0Zm9ybVJlZ2lzdGVycyYpPjsKIAogZW51bSBjbGFz
cyBNZXNzYWdlU3RhdHVzIHsKICAgICBNZXNzYWdlUmFuLApAQCAtNTEsMTAgKzUxLDE0IEBAIE1l
c3NhZ2VTdGF0dXMgc2VuZE1lc3NhZ2VTY29wZWQoVGhyZWFkJiwgY29uc3QgVGhyZWFkTWVzc2Fn
ZSYpOwogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KIE1lc3NhZ2VTdGF0dXMgc2VuZE1lc3Nh
Z2UoVGhyZWFkJiB0YXJnZXRUaHJlYWQsIGNvbnN0IEZ1bmN0b3ImIGZ1bmMpCiB7Ci0gICAgYXV0
byBsYW1iZGEgPSBzY29wZWRMYW1iZGFSZWY8dm9pZChzaWdpbmZvX3QqLCB1Y29udGV4dF90Kik+
KGZ1bmMpOworICAgIGF1dG8gbGFtYmRhID0gc2NvcGVkTGFtYmRhUmVmPHZvaWQoUGxhdGZvcm1S
ZWdpc3RlcnMmKT4oZnVuYyk7CiAgICAgcmV0dXJuIHNlbmRNZXNzYWdlU2NvcGVkKHRhcmdldFRo
cmVhZCwgbGFtYmRhKTsKIH0KIAorI2lmIE9TKERBUldJTikKK3ZvaWQgZGVsaXZlck1lc3NhZ2Vz
VXNpbmdNYWNoKCk7CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6
c2VuZE1lc3NhZ2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaCBiL1Nv
dXJjZS9XVEYvd3RmL1RocmVhZGluZy5oCmluZGV4IGQyZTUzNmRmN2E4Njk2ZDhlNmI5NWJhNDNl
MTczZDNiNTUwYmYxNmEuLjM1MTRlOGMwOWYwZmM5NGQ1MzRiZTJmM2I2ZTdjNDk1MGUwYmNmMDUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5oCisrKyBiL1NvdXJjZS9XVEYv
d3RmL1RocmVhZGluZy5oCkBAIC0xMzgsNiArMTM4LDEwIEBAIHB1YmxpYzoKIAogI2lmIFVTRShQ
VEhSRUFEUykKICAgICBMb2NrbGVzc0JhZzxUaHJlYWRNZXNzYWdlRGF0YSo+JiB0aHJlYWRNZXNz
YWdlcygpIHsgcmV0dXJuIG1fdGhyZWFkTWVzc2FnZXM7IH0KKworI2lmIE9TKERBUldJTikKKyAg
ICBtYWNoX3BvcnRfdCBtYWNoVGhyZWFkKCkgeyByZXR1cm4gbV9wbGF0Zm9ybVRocmVhZDsgfQor
I2VuZGlmCiAjZW5kaWYKIAogcHJvdGVjdGVkOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
bWFjL01hY2hFeGNlcHRpb25zLmRlZnMgYi9Tb3VyY2UvV1RGL3d0Zi9tYWMvTWFjaEV4Y2VwdGlv
bnMuZGVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi40MjA1NzQyYTRlZDUwMGY4MDY0ZmVlYjQ5NTVhN2M5NzBkOTlh
ZjBiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvbWFjL01hY2hFeGNlcHRpb25z
LmRlZnMKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlIDxtYWNoL21hY2hfZXhjLmRlZnM+CmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi90aHJlYWRzL1NpZ25hbHMuY3BwIGIvU291cmNlL1dURi93dGYvdGhyZWFk
cy9TaWduYWxzLmNwcAppbmRleCA4NTViMjhiMzE3MjE3MjdjZjFmNDMxYTkxOGEyNTFkYzJlNmEz
ZGZjLi41ZDNmMTExNWNlM2VhNGJmN2VkN2FlMDQ4YTVkZTkyNzY3OTBmYzBlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi90aHJlYWRzL1NpZ25hbHMuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L3RocmVhZHMvU2lnbmFscy5jcHAKQEAgLTI4LDIxICsyOCwyNjIgQEAKIAogI2lmIFVTRShQVEhS
RUFEUykKIAorI2lmIE9TKERBUldJTikKK2V4dGVybiAiQyIgeworI2luY2x1ZGUgIk1hY2hFeGNl
cHRpb25zU2VydmVyLmgiCit9OworI2VuZGlmCisKICNpbmNsdWRlIDxjc3RkaW8+CiAjaW5jbHVk
ZSA8bXV0ZXg+CiAjaW5jbHVkZSA8c2lnbmFsLmg+CisKKyNpZiBPUyhEQVJXSU4pCisjaW5jbHVk
ZSA8bWFjaC9tYWNoLmg+CisjaW5jbHVkZSA8bWFjaC90aHJlYWRfYWN0Lmg+CisjZW5kaWYKKwog
I2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CiAjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KKyNpbmNs
dWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrbGVzc0JhZy5oPgogI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRNZXNzYWdlLmg+
CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCiAKIG5hbWVzcGFjZSBXVEYgewogCisgICAg
CiBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPExvY2tsZXNzQmFnPFNpZ25hbEhhbmRsZXI+PiBo
YW5kbGVyc1tzdGF0aWNfY2FzdDxzaXplX3Q+KFNpZ25hbDo6TnVtYmVyT2ZTaWduYWxzKV0gPSB7
IH07Ci1zdGF0aWMgc3RydWN0IHNpZ2FjdGlvbiBvbGRBY3Rpb25zW3N0YXRpY19jYXN0PHNpemVf
dD4oU2lnbmFsOjpOdW1iZXJPZlNpZ25hbHMpXTsKIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBpbml0
aWFsaXplT25jZUZsYWdzW3N0YXRpY19jYXN0PHNpemVfdD4oU2lnbmFsOjpOdW1iZXJPZlNpZ25h
bHMpXTsKK3N0YXRpYyBzdHJ1Y3Qgc2lnYWN0aW9uIG9sZEFjdGlvbnNbc3RhdGljX2Nhc3Q8c2l6
ZV90PihTaWduYWw6Ok51bWJlck9mU2lnbmFscyldOworCisjaWYgT1MoREFSV0lOKQorc3RhdGlj
IG1hY2hfcG9ydF90IGV4Y2VwdGlvblBvcnQ7CitzdGF0aWMgY29uc3RleHByIHNpemVfdCBtYXhN
ZXNzYWdlU2l6ZSA9IDEgKiBLQjsKKworc3RhdGljIHZvaWQgc3RhcnRNYWNoRXhjZXB0aW9uSGFu
ZGxlclRocmVhZCgpCit7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2U7CisgICAgc3Rk
OjpjYWxsX29uY2Uob25jZSwgW10geworICAgICAgICBpZiAobWFjaF9wb3J0X2FsbG9jYXRlKG1h
Y2hfdGFza19zZWxmKCksIE1BQ0hfUE9SVF9SSUdIVF9SRUNFSVZFLCAmZXhjZXB0aW9uUG9ydCkg
IT0gS0VSTl9TVUNDRVNTKQorICAgICAgICAgICAgQ1JBU0goKTsKKworICAgICAgICBpZiAobWFj
aF9wb3J0X2luc2VydF9yaWdodChtYWNoX3Rhc2tfc2VsZigpLCBleGNlcHRpb25Qb3J0LCBleGNl
cHRpb25Qb3J0LCBNQUNIX01TR19UWVBFX01BS0VfU0VORCkhPSBLRVJOX1NVQ0NFU1MpCisgICAg
ICAgICAgICBDUkFTSCgpOworCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgYSBk
aXNwYXRjaCBxdWV1ZS4KKyAgICAgICAgKHZvaWQpVGhyZWFkOjpjcmVhdGUoCisgICAgICAgICAg
ICAiV1RGIE1hY2ggRXhjZXB0aW9uIFRocmVhZCIsIFtdICgpIHsKKyAgICAgICAgICAgICAgICB1
bmlvbiBNZXNzYWdlIHsKKyAgICAgICAgICAgICAgICAgICAgbWFjaF9tc2dfaGVhZGVyX3QgaGVh
ZGVyOworICAgICAgICAgICAgICAgICAgICBjaGFyIGRhdGFbbWF4TWVzc2FnZVNpemVdOworICAg
ICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgTWVzc2FnZSBtZXNzYWdlSGVhZGVySW47
CisgICAgICAgICAgICAgICAgTWVzc2FnZSBtZXNzYWdlSGVhZGVyT3V0OworCisgICAgICAgICAg
ICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgICAgICAgICAga2Vybl9yZXR1cm5fdCBt
ZXNzYWdlUmVzdWx0ID0gbWFjaF9tc2coJm1lc3NhZ2VIZWFkZXJJbi5oZWFkZXIsIE1BQ0hfUkNW
X01TRywgMCwgbWF4TWVzc2FnZVNpemUsIGV4Y2VwdGlvblBvcnQsIE1BQ0hfTVNHX1RJTUVPVVRf
Tk9ORSwgTUFDSF9QT1JUX05VTEwpOworICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZVJl
c3VsdCA9PSBLRVJOX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWFj
aF9leGNfc2VydmVyKCZtZXNzYWdlSGVhZGVySW4uaGVhZGVyLCAmbWVzc2FnZUhlYWRlck91dC5o
ZWFkZXIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENSQVNIKCk7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1lc3NhZ2VSZXN1bHQgPSBtYWNoX21zZygmbWVzc2FnZUhlYWRlck91
dC5oZWFkZXIsIE1BQ0hfU0VORF9NU0csIG1lc3NhZ2VIZWFkZXJPdXQuaGVhZGVyLm1zZ2hfc2l6
ZSwgMCwgbWVzc2FnZUhlYWRlck91dC5oZWFkZXIubXNnaF9sb2NhbF9wb3J0LCAwLCBNQUNIX1BP
UlRfTlVMTCk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChtZXNzYWdl
UmVzdWx0ID09IEtFUk5fU1VDQ0VTUyk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJGYWlsZWQgdG8gcmVjZWl2ZSBtYWNoIG1l
c3NhZ2UgZHVlIHRvICIsIG1hY2hfZXJyb3Jfc3RyaW5nKG1lc3NhZ2VSZXN1bHQpKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgIH0pLmxlYWtSZWYoKTsKKyAgICB9KTsKK30KKworc3RhdGlj
IFNpZ25hbCBmcm9tTWFjaEV4Y2VwdGlvbihleGNlcHRpb25fdHlwZV90IHR5cGUpCit7CisgICAg
c3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBFWENfQkFEX0FDQ0VTUzogcmV0dXJuIFNpZ25hbDo6
U2VnVjsKKyAgICBjYXNlIEVYQ19CQURfSU5TVFJVQ1RJT046IHJldHVybiBTaWduYWw6OklsbDsK
KyAgICBjYXNlIEVYQ19CUkVBS1BPSU5UOiByZXR1cm4gU2lnbmFsOjpUcmFwOworICAgIGRlZmF1
bHQ6IGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gU2lnbmFsOjpVbmtub3duOworfQorCitzdGF0
aWMgZXhjZXB0aW9uX21hc2tfdCB0b01hY2hNYXNrKFNpZ25hbCBzaWduYWwpCit7CisgICAgc3dp
dGNoIChzaWduYWwpIHsKKyAgICBjYXNlIFNpZ25hbDo6U2VnVjogcmV0dXJuIEVYQ19NQVNLX0JB
RF9BQ0NFU1M7CisgICAgY2FzZSBTaWduYWw6OklsbDogcmV0dXJuIEVYQ19NQVNLX0JBRF9JTlNU
UlVDVElPTjsKKyAgICBjYXNlIFNpZ25hbDo6VHJhcDogcmV0dXJuIEVYQ19NQVNLX0JSRUFLUE9J
TlQ7CisgICAgZGVmYXVsdDogYnJlYWs7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Cit9CisKK2V4dGVybiAiQyIgeworCisvLyBXZSBuZWVkIHRvIGltcGxlbWVudCBz
dHVicyBmb3IgY2F0Y2hfbWFjaF9leGNlcHRpb25fcmFpc2UgYW5kIGNhdGNoX21hY2hfZXhjZXB0
aW9uX3JhaXNlX3N0YXRlX2lkZW50aXR5LgorLy8gVGhlIE1pRyBnZW5lcmF0ZWQgZmlsZSB3aWxs
IGZhaWwgdG8gbGluayBvdGhlcndpc2UsIGV2ZW4gdGhvdWdoIHdlIGRvbid0IHVzZSB0aGUgZnVu
Y3Rpb25zLiBPbmx5IHRoZQorLy8gY2F0Y2hfbWFjaF9leGNlcHRpb25fcmFpc2Vfc3RhdGUgZnVu
Y3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBiZWNhdXNlIHdlIHBhc3MgRVhDRVBUSU9OX1NUQVRFIHRv
CisvLyB0aHJlYWRfc2V0X2V4Y2VwdGlvbl9wb3J0cy4KK2tlcm5fcmV0dXJuX3QgY2F0Y2hfbWFj
aF9leGNlcHRpb25fcmFpc2UobWFjaF9wb3J0X3QsIG1hY2hfcG9ydF90LCBtYWNoX3BvcnRfdCwg
ZXhjZXB0aW9uX3R5cGVfdCwgbWFjaF9leGNlcHRpb25fZGF0YV90LCBtYWNoX21zZ190eXBlX251
bWJlcl90KQoreworICAgIGRhdGFMb2dMbigiV2Ugc2hvdWxkIG5vdCBoYXZlIGNhbGxlZCBjYXRj
aF9leGNlcHRpb25fcmFpc2UoKSwgcGxlYXNlIGZpbGUgYSBidWcgYXQgYnVncy53ZWJraXQub3Jn
Iik7CisgICAgcmV0dXJuIEtFUk5fRkFJTFVSRTsKK30KKwora2Vybl9yZXR1cm5fdCBjYXRjaF9t
YWNoX2V4Y2VwdGlvbl9yYWlzZV9zdGF0ZV9pZGVudGl0eShtYWNoX3BvcnRfdCwgbWFjaF9wb3J0
X3QsIG1hY2hfcG9ydF90LCBleGNlcHRpb25fdHlwZV90LCBtYWNoX2V4Y2VwdGlvbl9kYXRhX3Qs
IG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QsIGludCosIHRocmVhZF9zdGF0ZV90LCBtYWNoX21zZ190
eXBlX251bWJlcl90LCB0aHJlYWRfc3RhdGVfdCwgIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QqKQor
eworICAgIGRhdGFMb2dMbigiV2Ugc2hvdWxkIG5vdCBoYXZlIGNhbGxlZCBjYXRjaF9tYWNoX2V4
Y2VwdGlvbl9yYWlzZV9zdGF0ZV9pZGVudGl0eSwgcGxlYXNlIGZpbGUgYSBidWcgYXQgYnVncy53
ZWJraXQub3JnIik7CisgICAgcmV0dXJuIEtFUk5fRkFJTFVSRTsKK30KKwora2Vybl9yZXR1cm5f
dCBjYXRjaF9tYWNoX2V4Y2VwdGlvbl9yYWlzZV9zdGF0ZSgKKyAgICBtYWNoX3BvcnRfdCBwb3J0
LAorICAgIGV4Y2VwdGlvbl90eXBlX3QgZXhjZXB0aW9uVHlwZSwKKyAgICBjb25zdCBtYWNoX2V4
Y2VwdGlvbl9kYXRhX3QgZXhjZXB0aW9uRGF0YSwKKyAgICBtYWNoX21zZ190eXBlX251bWJlcl90
IGRhdGFDb3VudCwKKyAgICBpbnQqIHN0YXRlRmxhdm9yLAorICAgIGNvbnN0IHRocmVhZF9zdGF0
ZV90IGluU3RhdGUsCisgICAgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCBpblN0YXRlQ291bnQsCisg
ICAgdGhyZWFkX3N0YXRlX3Qgb3V0U3RhdGUsCisgICAgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCog
b3V0U3RhdGVDb3VudCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChwb3J0ID09IGV4Y2VwdGlvblBv
cnQpOworICAgIFNpZ25hbCBzaWduYWwgPSBmcm9tTWFjaEV4Y2VwdGlvbihleGNlcHRpb25UeXBl
KTsKKyAgICBkYXRhTG9nTG4oInJlY2VpdmVkU2lnbmFsICIsIGV4Y2VwdGlvblR5cGUpOworICAg
IGRhdGFMb2dMbigiVGhyZWFkOiAiLCBleGNlcHRpb25EYXRhWzBdKTsKKyAgICBSRUxFQVNFX0FT
U0VSVChzaWduYWwgIT0gU2lnbmFsOjpVbmtub3duKTsKKworICAgIG1lbWNweShvdXRTdGF0ZSwg
aW5TdGF0ZSwgaW5TdGF0ZUNvdW50ICogc2l6ZW9mKGluU3RhdGVbMF0pKTsKKyAgICAqb3V0U3Rh
dGVDb3VudCA9IGluU3RhdGVDb3VudDsKKworI2lmIENQVShYODZfNjQpCisgICAgUkVMRUFTRV9B
U1NFUlQoKnN0YXRlRmxhdm9yID09IHg4Nl9USFJFQURfU1RBVEUpOworICAgIFBsYXRmb3JtUmVn
aXN0ZXJzJiByZWdpc3RlcnMgPSByZWludGVycHJldF9jYXN0PHg4Nl90aHJlYWRfc3RhdGVfdCo+
KG91dFN0YXRlKS0+dHNfNjQ7CisjZWxpZiBDUFUoWDg2KQorICAgIFJFTEVBU0VfQVNTRVJUKCpz
dGF0ZUZsYXZvciA9PSB4ODZfVEhSRUFEX1NUQVRFKTsKKyAgICBQbGF0Zm9ybVJlZ2lzdGVycyYg
cmVnaXN0ZXJzID0gcmVpbnRlcnByZXRfY2FzdDx4ODZfdGhyZWFkX3N0YXRlX3QqPihvdXRTdGF0
ZSktPnRzXzMyOworI2VsaWYgQ1BVKEFSTTY0KQorICAgIFJFTEVBU0VfQVNTRVJUKCpzdGF0ZUZs
YXZvciA9PSBBUk1fVEhSRUFEX1NUQVRFKTsKKyAgICBQbGF0Zm9ybVJlZ2lzdGVycyYgcmVnaXN0
ZXJzID0gcmVpbnRlcnByZXRfY2FzdDxhcm1fdW5pZmllZF90aHJlYWRfc3RhdGUqPihvdXRTdGF0
ZSktPnRzXzY0OworI2VsaWYgQ1BVKEFSTSkKKyAgICBSRUxFQVNFX0FTU0VSVCgqc3RhdGVGbGF2
b3IgPT0gQVJNX1RIUkVBRF9TVEFURSk7CisgICAgUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVy
cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8YXJtX3VuaWZpZWRfdGhyZWFkX3N0YXRlKj4ob3V0U3RhdGUp
LT50c18zMjsKKyNlbmRpZgorCisgICAgU2lnSW5mbyBpbmZvOworICAgIGlmIChzaWduYWwgPT0g
U2lnbmFsOjpTZWdWKSB7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoZGF0YUNvdW50LCBkYXRhQ291
bnQgPT0gMik7CisgICAgICAgIGluZm8uZmF1bHRpbmdBZGRyZXNzID0gcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oZXhjZXB0aW9uRGF0YVsxXSk7CisgICAgfQorCisgICAgYm9vbCBkaWRIYW5kbGUg
PSBmYWxzZTsKKyAgICBoYW5kbGVyc1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNpZ25hbCldLT5pdGVy
YXRlKFsmXSAoY29uc3QgU2lnbmFsSGFuZGxlciYgaGFuZGxlcikgeworICAgICAgICBTaWduYWxB
Y3Rpb24gaGFuZGxlclJlc3VsdCA9IGhhbmRsZXIoc2lnbmFsLCBpbmZvLCByZWdpc3RlcnMpOwor
ICAgICAgICBkYXRhTG9nTG4oc3RhdGljX2Nhc3Q8aW50PihoYW5kbGVyUmVzdWx0KSk7CisgICAg
ICAgIHN3aXRjaCAoaGFuZGxlclJlc3VsdCkgeworICAgICAgICBjYXNlIFNpZ25hbEFjdGlvbjo6
SGFuZGxlZDoKKyAgICAgICAgICAgIGRpZEhhbmRsZSA9IHRydWU7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
fSk7CisKKyAgICBpZiAoZGlkSGFuZGxlKQorICAgICAgICByZXR1cm4gS0VSTl9TVUNDRVNTOwor
ICAgIHJldHVybiBLRVJOX0ZBSUxVUkU7Cit9CisKK307CisKK3N0YXRpYyBib29sIHVzZU1hY2gg
eyBmYWxzZSB9Owordm9pZCBoYW5kbGVTaWduYWxzV2l0aE1hY2goKQoreworICAgIGRlbGl2ZXJN
ZXNzYWdlc1VzaW5nTWFjaCgpOworICAgIHVzZU1hY2ggPSB0cnVlOworfQorCisKK3N0YXRpYyBT
dGF0aWNMb2NrIHRocmVhZExvY2s7CitleGNlcHRpb25fbWFza190IGFjdGl2ZUV4Y2VwdGlvbnMg
eyAwIH07CisKK2lubGluZSB2b2lkIHNldEV4Y2VwdGlvblBvcnRzKGNvbnN0IEFic3RyYWN0TG9j
a2VyJiwgVGhyZWFkKiB0aHJlYWQpCit7CisgICAga2Vybl9yZXR1cm5fdCByZXN1bHQgPSB0aHJl
YWRfc2V0X2V4Y2VwdGlvbl9wb3J0cyh0aHJlYWQtPm1hY2hUaHJlYWQoKSwgYWN0aXZlRXhjZXB0
aW9ucywgZXhjZXB0aW9uUG9ydCwgRVhDRVBUSU9OX1NUQVRFIHwgTUFDSF9FWENFUFRJT05fQ09E
RVMsIE1BQ0hJTkVfVEhSRUFEX1NUQVRFKTsKKyAgICBpZiAocmVzdWx0ICE9IEtFUk5fU1VDQ0VT
UykgeworICAgICAgICBkYXRhTG9nTG4oInRocmVhZCBzZXQgcG9ydCBmYWlsZWQgZHVlIHRvICIs
IG1hY2hfZXJyb3Jfc3RyaW5nKHJlc3VsdCkpOworICAgICAgICBDUkFTSCgpOworICAgIH0KK30K
KworaW5saW5lIEhhc2hTZXQ8VGhyZWFkKj4mIGFjdGl2ZVRocmVhZHMoY29uc3QgQWJzdHJhY3RM
b2NrZXImKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PFRocmVhZCo+PiBh
Y3RpdmVUaHJlYWRzOworICAgIHJldHVybiBhY3RpdmVUaHJlYWRzOworfQorCit2b2lkIHJlZ2lz
dGVyVGhyZWFkKFRocmVhZCogdGhyZWFkKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2so
dGhyZWFkTG9jayk7CisgICAgYXV0byByZXN1bHQgPSBhY3RpdmVUaHJlYWRzKGxvY2tlcikuYWRk
KHRocmVhZCk7CisKKyAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIHNldEV4Y2Vw
dGlvblBvcnRzKGxvY2tlciwgdGhyZWFkKTsKK30KKwordm9pZCByZW1vdmVUaHJlYWQoVGhyZWFk
KiB0aHJlYWQpCit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayh0aHJlYWRMb2NrKTsKKyAg
ICBhY3RpdmVUaHJlYWRzKGxvY2tlcikucmVtb3ZlKHRocmVhZCk7Cit9CiAKLXN0YXRpYyB2b2lk
IGpzY1NpZ25hbEhhbmRsZXIoaW50IHNpZywgc2lnaW5mb190KiBpbmZvLCB2b2lkKiBtY29udGV4
dCkKKyNlbmRpZiAvLyBPUyhEQVJXSU4pCisKK3N0YXRpYyB2b2lkIGpzY1NpZ25hbEhhbmRsZXIo
aW50LCBzaWdpbmZvX3QqLCB2b2lkKik7CisKK3ZvaWQgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2ln
bmFsIHNpZ25hbCwgU2lnbmFsSGFuZGxlciYmIGhhbmRsZXIpCit7CisgICAgQVNTRVJUKHNpZ25h
bCA8IFNpZ25hbDo6VW5rbm93bik7CisgICAgaWYgKHNpZ25hbCA9PSBTaWduYWw6OkJ1cyAmJiAh
dXNlTWFjaCkKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVCghdXNlTWFjaCB8fCBzaWduYWwg
IT0gU2lnbmFsOjpVc3IpOworCisjaWYgT1MoREFSV0lOKQorICAgIGlmICh1c2VNYWNoKQorICAg
ICAgICBzdGFydE1hY2hFeGNlcHRpb25IYW5kbGVyVGhyZWFkKCk7CisjZW5kaWYKKworICAgIHN0
ZDo6Y2FsbF9vbmNlKGluaXRpYWxpemVPbmNlRmxhZ3Nbc3RhdGljX2Nhc3Q8c2l6ZV90PihzaWdu
YWwpXSwgWyZdIHsKKyAgICAgICAgaGFuZGxlcnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzaWduYWwp
XS5jb25zdHJ1Y3QoKTsKKworICAgICAgICBpZiAoIXVzZU1hY2gpIHsKKyAgICAgICAgICAgIHN0
cnVjdCBzaWdhY3Rpb24gYWN0aW9uOworICAgICAgICAgICAgYWN0aW9uLnNhX3NpZ2FjdGlvbiA9
IGpzY1NpZ25hbEhhbmRsZXI7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHNpZ2ZpbGxzZXQo
JmFjdGlvbi5zYV9tYXNrKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFyZXN1bHQpOwor
ICAgICAgICAgICAgYWN0aW9uLnNhX2ZsYWdzID0gU0FfU0lHSU5GTzsKKyAgICAgICAgICAgIHJl
c3VsdCA9IHNpZ2FjdGlvbih0b1N5c3RlbVNpZ25hbChzaWduYWwpLCAmYWN0aW9uLCAmb2xkQWN0
aW9uc1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNpZ25hbCldKTsKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKCFyZXN1bHQpOworICAgICAgICB9CisKKyAgICB9KTsKKworICAgIGhhbmRsZXJzW3N0
YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0tPmFkZChXVEZNb3ZlKGhhbmRsZXIpKTsKKworI2lm
IE9TKERBUldJTikKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHRocmVhZExvY2spOworICAg
IGlmICh1c2VNYWNoKSB7CisgICAgICAgIGFjdGl2ZUV4Y2VwdGlvbnMgfD0gdG9NYWNoTWFzayhz
aWduYWwpOworCisgICAgICAgIGZvciAoVGhyZWFkKiB0aHJlYWQgOiBhY3RpdmVUaHJlYWRzKGxv
Y2tlcikpCisgICAgICAgICAgICBzZXRFeGNlcHRpb25Qb3J0cyhsb2NrZXIsIHRocmVhZCk7Cisg
ICAgfQorI2VuZGlmCit9CisKK3ZvaWQganNjU2lnbmFsSGFuZGxlcihpbnQgc2lnLCBzaWdpbmZv
X3QqIGluZm8sIHZvaWQqIHVjb250ZXh0KQogewogICAgIFNpZ25hbCBzaWduYWwgPSBmcm9tU3lz
dGVtU2lnbmFsKHNpZyk7CiAKQEAgLTYyLDEwICszMDMsMTYgQEAgc3RhdGljIHZvaWQganNjU2ln
bmFsSGFuZGxlcihpbnQgc2lnLCBzaWdpbmZvX3QqIGluZm8sIHZvaWQqIG1jb250ZXh0KQogICAg
ICAgICByZXR1cm47CiAgICAgfQogCisgICAgU2lnSW5mbyBzaWdJbmZvOworICAgIGlmIChzaWdu
YWwgPT0gU2lnbmFsOjpTZWdWIHx8IHNpZ25hbCA9PSBTaWduYWw6OkJ1cykKKyAgICAgICAgc2ln
SW5mby5mYXVsdGluZ0FkZHJlc3MgPSBpbmZvLT5zaV9hZGRyOworCisgICAgUGxhdGZvcm1SZWdp
c3RlcnMmIHJlZ2lzdGVycyA9IHJlZ2lzdGVyc0Zyb21VQ29udGV4dChyZWludGVycHJldF9jYXN0
PHVjb250ZXh0X3QqPih1Y29udGV4dCkpOworCiAgICAgYm9vbCBkaWRIYW5kbGUgPSBmYWxzZTsK
ICAgICBib29sIHJlc3RvcmVEZWZhdWx0SGFuZGxlciA9IGZhbHNlOwogICAgIGhhbmRsZXJzW3N0
YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0tPml0ZXJhdGUoWyZdIChjb25zdCBTaWduYWxIYW5k
bGVyJiBoYW5kbGVyKSB7Ci0gICAgICAgIHN3aXRjaCAoaGFuZGxlcihzaWcsIGluZm8sIG1jb250
ZXh0KSkgeworICAgICAgICBzd2l0Y2ggKGhhbmRsZXIoc2lnbmFsLCBzaWdJbmZvLCByZWdpc3Rl
cnMpKSB7CiAgICAgICAgIGNhc2UgU2lnbmFsQWN0aW9uOjpIYW5kbGVkOgogICAgICAgICAgICAg
ZGlkSGFuZGxlID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtODUsMTMgKzMzMiwxMyBA
QCBzdGF0aWMgdm9pZCBqc2NTaWduYWxIYW5kbGVyKGludCBzaWcsIHNpZ2luZm9fdCogaW5mbywg
dm9pZCogbWNvbnRleHQpCiAgICAgc3RydWN0IHNpZ2FjdGlvbiYgb2xkQWN0aW9uID0gb2xkQWN0
aW9uc1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNpZ25hbCldOwogICAgIGlmIChzaWduYWwgPT0gU2ln
bmFsOjpVc3IpIHsKICAgICAgICAgaWYgKG9sZEFjdGlvbi5zYV9zaWdhY3Rpb24pCi0gICAgICAg
ICAgICBvbGRBY3Rpb24uc2Ffc2lnYWN0aW9uKHNpZywgaW5mbywgbWNvbnRleHQpOworICAgICAg
ICAgICAgb2xkQWN0aW9uLnNhX3NpZ2FjdGlvbihzaWcsIGluZm8sIHVjb250ZXh0KTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmICghZGlkSGFuZGxlKSB7CiAgICAgICAgIGlmIChv
bGRBY3Rpb24uc2Ffc2lnYWN0aW9uKSB7Ci0gICAgICAgICAgICBvbGRBY3Rpb24uc2Ffc2lnYWN0
aW9uKHNpZywgaW5mbywgbWNvbnRleHQpOworICAgICAgICAgICAgb2xkQWN0aW9uLnNhX3NpZ2Fj
dGlvbihzaWcsIGluZm8sIHVjb250ZXh0KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogCkBAIC0xMDAsMjQgKzM0Nyw2IEBAIHN0YXRpYyB2b2lkIGpzY1NpZ25hbEhhbmRsZXIoaW50
IHNpZywgc2lnaW5mb190KiBpbmZvLCB2b2lkKiBtY29udGV4dCkKICAgICB9CiB9CiAKLXZvaWQg
aW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFsIHNpZ25hbCwgU2lnbmFsSGFuZGxlciYmIGhhbmRs
ZXIpCi17Ci0gICAgQVNTRVJUKHNpZ25hbCA8IFNpZ25hbDo6VW5rbm93bik7Ci0gICAgc3RkOjpj
YWxsX29uY2UoaW5pdGlhbGl6ZU9uY2VGbGFnc1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNpZ25hbCld
LCBbJl0gewotICAgICAgICBoYW5kbGVyc1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNpZ25hbCldLmNv
bnN0cnVjdCgpOwotCi0gICAgICAgIHN0cnVjdCBzaWdhY3Rpb24gYWN0aW9uOwotICAgICAgICBh
Y3Rpb24uc2Ffc2lnYWN0aW9uID0ganNjU2lnbmFsSGFuZGxlcjsKLSAgICAgICAgYXV0byByZXN1
bHQgPSBzaWdmaWxsc2V0KCZhY3Rpb24uc2FfbWFzayk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJU
KCFyZXN1bHQpOwotICAgICAgICBhY3Rpb24uc2FfZmxhZ3MgPSBTQV9TSUdJTkZPOwotICAgICAg
ICByZXN1bHQgPSBzaWdhY3Rpb24odG9TeXN0ZW1TaWduYWwoc2lnbmFsKSwgJmFjdGlvbiwgJm9s
ZEFjdGlvbnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzaWduYWwpXSk7Ci0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUKCFyZXN1bHQpOwotICAgIH0pOwotCi0gICAgaGFuZGxlcnNbc3RhdGljX2Nhc3Q8c2l6
ZV90PihzaWduYWwpXS0+YWRkKFdURk1vdmUoaGFuZGxlcikpOwotfQotCiB9IC8vIG5hbWVzcGFj
ZSBXVEYKIAogI2VuZGlmIC8vIFVTRShQVEhSRUFEUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL3RocmVhZHMvU2lnbmFscy5oIGIvU291cmNlL1dURi93dGYvdGhyZWFkcy9TaWduYWxzLmgK
aW5kZXggMWU0ZWI0NmVhYTc3NGExZWU4OWY2ZmIyZGFlZjMzMjY4Y2U1Njc3OS4uODFhYjAwNDI2
ZDEwZmNmZDJkMmQ1MmIzN2I1YjE3NWM1NjZhYjhhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvdGhyZWFkcy9TaWduYWxzLmgKKysrIGIvU291cmNlL1dURi93dGYvdGhyZWFkcy9TaWduYWxz
LmgKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgPHNpZ25hbC5oPgogI2luY2x1ZGUgPHd0
Zi9GdW5jdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybVJlZ2lzdGVycy5oPgogCiBuYW1l
c3BhY2UgV1RGIHsKIApAQCAtNzksNyArODAsMTEgQEAgZW51bSBjbGFzcyBTaWduYWxBY3Rpb24g
ewogICAgIEZvcmNlRGVmYXVsdAogfTsKIAotdXNpbmcgU2lnbmFsSGFuZGxlciA9IEZ1bmN0aW9u
PFNpZ25hbEFjdGlvbihpbnQsIHNpZ2luZm9fdCosIHZvaWQqKT47CitzdHJ1Y3QgU2lnSW5mbyB7
CisgICAgdm9pZCogZmF1bHRpbmdBZGRyZXNzIHsgMCB9OworfTsKKwordXNpbmcgU2lnbmFsSGFu
ZGxlciA9IEZ1bmN0aW9uPFNpZ25hbEFjdGlvbihTaWduYWwsIFNpZ0luZm8mLCBQbGF0Zm9ybVJl
Z2lzdGVycyYpPjsKIAogLy8gQ2FsbCB0aGlzIG1ldGhvZCB3aGVuZXZlciB5b3Ugd2FudCB0byBp
bnN0YWxsIGEgc2lnbmFsIGhhbmRsZXIuIEl0J3Mgb2sgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIGxh
emlseS4KIC8vIE5vdGU6IFlvdXIgc2lnbmFsIGhhbmRsZXIgd2lsbCBiZSBjYWxsZWQgZXZlcnkg
dGltZSB0aGUgaGFuZGxlciBmb3IgdGhlIGRlc2lyZWQgc2lnbmFsIGlzIGNhbGxlZC4KQEAgLTg3
LDkgKzkyLDE5IEBAIHVzaW5nIFNpZ25hbEhhbmRsZXIgPSBGdW5jdGlvbjxTaWduYWxBY3Rpb24o
aW50LCBzaWdpbmZvX3QqLCB2b2lkKik+OwogLy8gVGhpcyBmdW5jdGlvbiBpcyBjdXJyZW50bHkg
YSBvbmUgd2F5IHN0cmVldCBpLmUuIG9uY2UgaW5zdGFsbGVkLCBhIHNpZ25hbCBoYW5kbGVyIGNh
bm5vdCBiZSB1bmluc3RhbGxlZC4KIHZvaWQgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFsLCBT
aWduYWxIYW5kbGVyJiYpOwogCisKKyNpZiBPUyhEQVJXSU4pCitjbGFzcyBUaHJlYWQ7Cit2b2lk
IHJlZ2lzdGVyVGhyZWFkKFRocmVhZCopOwordm9pZCByZW1vdmVUaHJlYWQoVGhyZWFkKik7CisK
K3ZvaWQgaGFuZGxlU2lnbmFsc1dpdGhNYWNoKCk7CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2Ug
V1RGCiAKIHVzaW5nIFdURjo6U2lnbmFsOwordXNpbmcgV1RGOjpTaWdJbmZvOwogdXNpbmcgV1RG
Ojp0b1N5c3RlbVNpZ25hbDsKIHVzaW5nIFdURjo6ZnJvbVN5c3RlbVNpZ25hbDsKIHVzaW5nIFdU
Rjo6U2lnbmFsQWN0aW9uOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hh
bmdlTG9nCmluZGV4IDE3ZjlmMDExMTMxMDJhOGE0YjE3ZmNlNGFmMWQ5NWViODYwMDY5ZGIuLjZj
ZGE0ODQxMDY1Y2UwNGE5MWI4ZGI1ZTJiMjAyOGM0MGVjMDVhNmYgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxNy0w
NS0xMSAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KKworICAgICAgICBV
c2UgTWFjaCBleGNlcHRpb25zIGluc3RlYWQgb2Ygc2lnbmFscyB3aGVyZSBwb3NzaWJsZQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcxODY1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9UaHJlYWRNZXNzYWdlcy5jcHA6CisgICAgICAgIChydW5UaHJlYWRNZXNz
YWdlVGVzdCk6CisgICAgICAgIChURVNUKToKKwogMjAxNy0wNS0wOSAgU2FtIFdlaW5pZyAgPHNh
bUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJlbW92ZSBzdXBwb3J0IGZvciBsZWdhY3kgTm90aWZp
Y2F0aW9ucwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVGhyZWFk
TWVzc2FnZXMuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVGhyZWFkTWVzc2Fn
ZXMuY3BwCmluZGV4IGQ2M2U5YmYxZTc1MDY4YjZjMWE3ZTdlNmU4YjY3YzRlYjA1MTU4ODIuLmU2
YTU3ODk0YmI1MTZmZTFjZTcxM2QwN2JmMThmMDcwNmVmYTkzN2MgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1RocmVhZE1lc3NhZ2VzLmNwcAorKysgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9UaHJlYWRNZXNzYWdlcy5jcHAKQEAgLTUwLDcgKzUwLDcg
QEAgc3RhdGljIHZvaWQgcnVuVGhyZWFkTWVzc2FnZVRlc3QodW5zaWduZWQgbnVtU2VuZGVycywg
dW5zaWduZWQgbnVtTWVzc2FnZXMpCiAgICAgZm9yICh1bnNpZ25lZCBzZW5kZXJJRCA9IDA7IHNl
bmRlcklEIDwgbnVtU2VuZGVyczsgKytzZW5kZXJJRCkgewogICAgICAgICBzZW5kZXJUaHJlYWRz
W3NlbmRlcklEXSA9IFRocmVhZDo6Y3JlYXRlKCJUaHJlYWRNZXNzYWdlIHNlbmRlciIsIFtzZW5k
ZXJJRCwgbnVtTWVzc2FnZXMsIHJlY2VpdmVyVGhyZWFkLCAmbWVzc2FnZXNSdW4sICZoYW5kbGVy
c1J1bl0gKCkgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bU1lc3Nh
Z2VzOyArK2kpIHsKLSAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHNlbmRNZXNzYWdlKCpy
ZWNlaXZlclRocmVhZC5nZXQoKSwgW3NlbmRlcklELCAmaGFuZGxlcnNSdW5dIChzaWdpbmZvX3Qq
LCB1Y29udGV4dF90KikgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gc2VuZE1lc3Nh
Z2UoKnJlY2VpdmVyVGhyZWFkLmdldCgpLCBbc2VuZGVySUQsICZoYW5kbGVyc1J1bl0gKFBsYXRm
b3JtUmVnaXN0ZXJzJikgewogICAgICAgICAgICAgICAgICAgICBoYW5kbGVyc1J1bltzZW5kZXJJ
RF0rKzsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShy
ZXN1bHQgPT0gV1RGOjpNZXNzYWdlU3RhdHVzOjpNZXNzYWdlUmFuKTsKQEAgLTk1LDcgKzk1LDcg
QEAgcHVibGljOgogVEVTVChUaHJlYWRNZXNzYWdlLCBTaWduYWxzV29ya09uRXhpdCkKIHsKICAg
ICBzdGF0aWMgYm9vbCBoYW5kbGVyUmFuID0gZmFsc2U7Ci0gICAgaW5zdGFsbFNpZ25hbEhhbmRs
ZXIoU2lnbmFsOjpVc3IsIFtdIChpbnQsIHNpZ2luZm9fdCosIHZvaWQqKSAtPiBTaWduYWxBY3Rp
b24geworICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbDo6VXNyLCBbXSAoU2lnbmFsLCBT
aWdJbmZvJiwgUGxhdGZvcm1SZWdpc3RlcnMmKSAtPiBTaWduYWxBY3Rpb24gewogICAgICAgICBk
YXRhTG9nTG4oImhlcmUiKTsKICAgICAgICAgaGFuZGxlclJhbiA9IHRydWU7CiAgICAgICAgIHJl
dHVybiBTaWduYWxBY3Rpb246OkhhbmRsZWQ7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309763</attachid>
            <date>2017-05-11 13:25:47 -0700</date>
            <delta_ts>2017-05-11 13:36:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171865-20170511132546.patch</filename>
            <type>text/plain</type>
            <size>50161</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE2Njc3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
YzIyOWE0ZjkxMDMxZGZlOTU1YTQxMGIyMDI0Njc2ZTFmM2NkZWIxLi4yNWUzMDIyZWI5ZmY0ZDA1
M2E4ZWRiY2YxZTI2YmFkZTA1MTA4MWExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MCBAQAorMjAxNy0wNS0xMSAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBVc2UgTWFjaCBleGNlcHRpb25zIGluc3RlYWQgb2Ygc2lnbmFscyB3
aGVyZSBwb3NzaWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTcxODY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhpcyBwYXRjaCBhZGRzIHNvbWUgbmV3IEpTQyBvcHRpb25zLiBUaGUgZmlyc3QgaXMg
YW4gb3B0aW9uIHRoYXQKKyAgICAgICAgZW5hYmxlcyBvciBkaXNhYmxlcyB3ZWIgYXNzZW1ibHkg
dGllciB1cC4gVGhlIHNlY29uZCBjb250cm9scworICAgICAgICB3aGV0aGVyIG9yIG5vdCB3ZSB1
c2UgbWFjaCBleGNlcHRpb25zICh3aGVyZSBhdmFpbGFibGUpLgorCisgICAgICAgICogQVBJL3Rl
c3RzL0V4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwOgorICAgICAgICAoZGlzcGF0Y2hUZXJtaXRh
dGVDYWxsYmFjayk6CisgICAgICAgICh0ZXN0RXhlY3V0aW9uVGltZUxpbWl0KToKKyAgICAgICAg
KiBydW50aW1lL0pTTG9jay5jcHA6CisgICAgICAgIChKU0M6OkpTTG9jazo6ZGlkQWNxdWlyZUxv
Y2spOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5jcHA6CisgICAgICAgIChKU0M6Om92ZXJy
aWRlRGVmYXVsdHMpOgorICAgICAgICAoSlNDOjpPcHRpb25zOjppbml0aWFsaXplKToKKyAgICAg
ICAgKiBydW50aW1lL09wdGlvbnMuaDoKKyAgICAgICAgKiBydW50aW1lL1ZNVHJhcHMuY3BwOgor
ICAgICAgICAoSlNDOjpTaWduYWxDb250ZXh0OjpTaWduYWxDb250ZXh0KToKKyAgICAgICAgKEpT
Qzo6U2lnbmFsQ29udGV4dDo6YWRqdXN0UENUb1BvaW50VG9UcmFwcGluZ0luc3RydWN0aW9uKToK
KyAgICAgICAgKEpTQzo6aW5zdGFsbFNpZ25hbEhhbmRsZXIpOgorICAgICAgICAoSlNDOjpWTVRy
YXBzOjpTaWduYWxTZW5kZXI6OnNlbmQpOgorICAgICAgICAqIHRvb2xzL1NpZ2lsbENyYXNoQW5h
bHl6ZXIuY3BwOgorICAgICAgICAoSlNDOjpTaWduYWxDb250ZXh0OjpTaWduYWxDb250ZXh0KToK
KyAgICAgICAgKEpTQzo6U2lnbmFsQ29udGV4dDo6ZHVtcCk6CisgICAgICAgIChKU0M6Omluc3Rh
bGxDcmFzaEhhbmRsZXIpOgorICAgICAgICAqIHdhc20vV2FzbUJCUVBsYW4uY3BwOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKToKKyAgICAgICAgKiB3YXNt
L1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp0cmFwSGFu
ZGxlcik6CisgICAgICAgIChKU0M6Oldhc206OmVuYWJsZUZhc3RNZW1vcnkpOgorICAgICAgICAq
IHdhc20vV2FzbU1hY2hpbmVUaHJlYWRzLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6cmVzZXRJ
bnN0cnVjdGlvbkNhY2hlT25BbGxUaHJlYWRzKToKKwogMjAxNy0wNS0xMSAgTWFyayBMYW0gIDxt
YXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgV29ya2VyVGhyZWFkOjpzdG9wKCkgc2hvdWxk
IGNhbGwgc2NoZWR1bGVFeGVjdXRpb25UZXJtaW5hdGlvbigpIGxhc3QuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGVjZGRiMzNm
YmVkNTIxMTFiYzA3MTk1ZDZjMDhmZTQwNmIyYzFhMzUuLmE3MjBkMTAxZTIyMDVjZGYwZmEwNmRm
YzNjYTczNmY5YmE1ZmM2NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTcgQEAKKzIwMTctMDUtMTEgIEtlaXRo
IE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIE1hY2ggZXhj
ZXB0aW9ucyBpbnN0ZWFkIG9mIHNpZ25hbHMgd2hlcmUgcG9zc2libGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MTg2NQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZW5hYmxlcyB1c2lu
ZyBtYWNoIGV4Y2VwdGlvbnMgb24gZGFyd2luLiBUaGUgd2F5IHRoZQorICAgICAgICBtYWNoIGV4
Y2VwdGlvbiBhcGkgd29ya3MgaXMgdGhhdCB3ZSBjcmVhdGUgYSBtYWNoIHBvcnQsIHdoaWNoIGlz
CisgICAgICAgIGxpa2UgYSBmaWxlIGRlc2NyaXB0b3IuICBXZSB0aGVuIHdhaXQgZm9yIGEgbWVz
c2FnZSB0byBhcnJpdmUgb24KKyAgICAgICAgdGhhdCBwb3J0IGluIGEgdGhyZWFkLiBXaGVuIGFu
b3RoZXIgdGhyZWFkIHJhaXNlcyBhIGV4Y2VwdGlvbiAoc2F5CisgICAgICAgIGR1ZSB0byBhIGJh
ZCBtZW1vcnkgYWNjZXNzKSB0aGUgT1Mgc2VuZHMgb3VyIHRocmVhZCBhIG1lc3NhZ2UuIFRoZQor
ICAgICAgICBwYXlsb2FkIG9mIHRoYXQgbWVzc2FnZSBpcyB0aGUgcmVnaXN0ZXIgZmlsZSBvZiB0
aGUgY3Jhc2hpbmcKKyAgICAgICAgdGhyZWFkLiBXZSB0aGVuIGNhbGwgb3VyIGN1c3RvbSBoYW5k
bGVycyB0aGF0IGNoYW5nZSB0aGUgc3RhdGUgYXMKKyAgICAgICAgbmVlZGVkLiBJbiBvcmRlciB0
byByZXN0YXJ0IHRoZSB0aHJlYWQgd2Ugc2VuZCBhIHBheWxvYWQgYmFjayB0bworICAgICAgICB0
aGUgT1Mgd2l0aCBhbiB1cGRhdGVkIHJlZ2lzdGVyIGZpbGUgYWxvbmcgd2l0aCBhIHN1Y2Nlc3Mg
bWVzc2FnZQorICAgICAgICBoZWFkZXIuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIG1ha2Vz
IHRocmVhZCBtZXNzYWdlcyB3b3JrIHdpdGhvdXQgc2lnbmFscyBieQorICAgICAgICBzaW1wbHkg
c3VzcGVuZGluZyB0aGUgdGhyZWFkIHRoZW4gcnVubmluZyB0aGUgbWVzc2FnZSBhdCB0aGF0Cisg
ICAgICAgIHRpbWUuCisKKyAgICAgICAgKiBDb25maWd1cmF0aW9ucy9XVEYueGNjb25maWc6Cisg
ICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL1Bs
YXRmb3JtLmg6CisgICAgICAgICogd3RmL1BsYXRmb3JtUmVnaXN0ZXJzLmg6CisgICAgICAgIChX
VEY6OnJlZ2lzdGVyc0Zyb21VQ29udGV4dCk6CisgICAgICAgICogd3RmL1N0YWNrQm91bmRzLmg6
CisgICAgICAgIChXVEY6OlN0YWNrQm91bmRzOjpTdGFja0JvdW5kcyk6CisgICAgICAgICogd3Rm
L1RocmVhZEhvbGRlci5jcHA6CisgICAgICAgIChXVEY6OlRocmVhZEhvbGRlcjo6flRocmVhZEhv
bGRlcik6CisgICAgICAgICogd3RmL1RocmVhZE1lc3NhZ2UuY3BwOgorICAgICAgICAoV1RGOjpz
ZW5kTWVzc2FnZVNpZ25hbCk6CisgICAgICAgIChXVEY6OnNlbmRNZXNzYWdlTWFjaCk6CisgICAg
ICAgIChXVEY6OmRlbGl2ZXJNZXNzYWdlc1VzaW5nTWFjaCk6CisgICAgICAgIChXVEY6OnNlbmRN
ZXNzYWdlU2NvcGVkKToKKyAgICAgICAgKiB3dGYvVGhyZWFkTWVzc2FnZS5oOgorICAgICAgICAo
V1RGOjpzZW5kTWVzc2FnZSk6CisgICAgICAgICogd3RmL1RocmVhZGluZy5oOgorICAgICAgICAo
V1RGOjpUaHJlYWQ6Om1hY2hUaHJlYWQpOgorICAgICAgICAqIHd0Zi9tYWMvTWFjaEV4Y2VwdGlv
bnMuZGVmczogQ29waWVkIGZyb20gU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5oLgorICAg
ICAgICAqIHd0Zi90aHJlYWRzL1NpZ25hbHMuY3BwOgorICAgICAgICAoV1RGOjpzdGFydE1hY2hF
eGNlcHRpb25IYW5kbGVyVGhyZWFkKToKKyAgICAgICAgKFdURjo6ZnJvbU1hY2hFeGNlcHRpb24p
OgorICAgICAgICAoV1RGOjp0b01hY2hNYXNrKToKKyAgICAgICAgKFdURjo6aGFuZGxlU2lnbmFs
c1dpdGhNYWNoKToKKyAgICAgICAgKFdURjo6c2V0RXhjZXB0aW9uUG9ydHMpOgorICAgICAgICAo
V1RGOjphY3RpdmVUaHJlYWRzKToKKyAgICAgICAgKFdURjo6cmVnaXN0ZXJUaHJlYWQpOgorICAg
ICAgICAoV1RGOjpyZW1vdmVUaHJlYWQpOgorICAgICAgICAoV1RGOjppbnN0YWxsU2lnbmFsSGFu
ZGxlcik6CisgICAgICAgIChXVEY6OmpzY1NpZ25hbEhhbmRsZXIpOgorICAgICAgICAqIHd0Zi90
aHJlYWRzL1NpZ25hbHMuaDoKKwogMjAxNy0wNS0wOSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFJlbW92ZSBzdXBwb3J0IGZvciBsZWdhY3kgTm90aWZpY2F0aW9ucwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9FeGVjdXRpb25UaW1l
TGltaXRUZXN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvRXhlY3V0aW9u
VGltZUxpbWl0VGVzdC5jcHAKaW5kZXggZDVlNTMyNDNiNzhkZjc1MTM0MmFkOGQzOTBhNGIwNDEz
ZDllZWY5ZS4uN2VhYzA3MzA5ZGRjM2YxNjQ5NDUwYmQwMzc5ZDJjYTE4ZjAxNjlhYSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9FeGVjdXRpb25UaW1lTGltaXRU
ZXN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0V4ZWN1dGlvblRp
bWVMaW1pdFRlc3QuY3BwCkBAIC0zMCw4ICszMCwxMyBAQAogI2luY2x1ZGUgIkpTQ29udGV4dFJl
ZlByaXZhdGUuaCIKICNpbmNsdWRlICJKYXZhU2NyaXB0Q29yZS5oIgogI2luY2x1ZGUgIk9wdGlv
bnMuaCIKKwogI2luY2x1ZGUgPGNocm9ubz4KKyNpbmNsdWRlIDxkaXNwYXRjaC9kaXNwYXRjaC5o
PgorI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CisjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgog
I2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOjpj
aHJvbm87CkBAIC03Nyw2ICs4MiwxMyBAQCBzdGF0aWMgYm9vbCBleHRlbmRUZXJtaW5hdGVDYWxs
YmFjayhKU0NvbnRleHRSZWYgY3R4LCB2b2lkKikKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9v
bCBkaXNwYXRjaFRlcm1pbmF0ZUNhbGxiYWNrQ2FsbGVkID0gZmFsc2U7CitzdGF0aWMgYm9vbCBk
aXNwYXRjaFRlcm1pdGF0ZUNhbGxiYWNrKEpTQ29udGV4dFJlZiwgdm9pZCopCit7CisgICAgZGlz
cGF0Y2hUZXJtaW5hdGVDYWxsYmFja0NhbGxlZCA9IHRydWU7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKIHN0cnVjdCBUaWVyT3B0aW9ucyB7CiAgICAgY29uc3QgY2hhciogdGllcjsKICAgICB1bnNp
Z25lZCB0aW1lTGltaXRBZGp1c3RtZW50TWlsbGlzOwpAQCAtMzY1LDYgKzM3Nyw2MyBAQCBpbnQg
dGVzdEV4ZWN1dGlvblRpbWVMaW1pdCgpCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAorICAg
ICAgICAvKiBUZXN0IHNjcmlwdCB0aW1lb3V0IGZyb20gZGlzcGF0Y2ggcXVldWU6ICovCisgICAg
ICAgIHRpbWVMaW1pdCA9ICgxMDAgKyB0aWVyQWRqdXN0bWVudE1pbGxpcykgLyAxMDAwLjA7Cisg
ICAgICAgIEpTQ29udGV4dEdyb3VwU2V0RXhlY3V0aW9uVGltZUxpbWl0KGNvbnRleHRHcm91cCwg
dGltZUxpbWl0LCBkaXNwYXRjaFRlcm1pdGF0ZUNhbGxiYWNrLCAwKTsKKyAgICAgICAgeworICAg
ICAgICAgICAgdW5zaWduZWQgdGltZUFmdGVyV2F0Y2hkb2dTaG91bGRIYXZlRmlyZWQgPSAzMDAg
KyB0aWVyQWRqdXN0bWVudE1pbGxpczsKKworICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBzY3Jp
cHRCdWlsZGVyOworICAgICAgICAgICAgc2NyaXB0QnVpbGRlci5hcHBlbmRMaXRlcmFsKCJmdW5j
dGlvbiBmb28oKSB7IHZhciBzdGFydFRpbWUgPSBjdXJyZW50Q1BVVGltZSgpOyB3aGlsZSAodHJ1
ZSkgeyBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDA7IGkrKyk7IGlmIChjdXJyZW50Q1BVVGltZSgp
IC0gc3RhcnRUaW1lID4gIik7CisgICAgICAgICAgICBzY3JpcHRCdWlsZGVyLmFwcGVuZE51bWJl
cih0aW1lQWZ0ZXJXYXRjaGRvZ1Nob3VsZEhhdmVGaXJlZCAvIDEwMDAuMCk7CisgICAgICAgICAg
ICBzY3JpcHRCdWlsZGVyLmFwcGVuZExpdGVyYWwoIikgYnJlYWs7IH0gfSBmb28oKTsiKTsKKwor
ICAgICAgICAgICAgSlNTdHJpbmdSZWYgc2NyaXB0ID0gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoc2NyaXB0QnVpbGRlci50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAg
ICAgZXhjZXB0aW9uID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGRpc3BhdGNoVGVybWluYXRlQ2Fs
bGJhY2tDYWxsZWQgPSBmYWxzZTsKKworICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBkbyB0aGlz
IHNpbmNlIGJsb2NrcyBjYW4gb25seSBjYXB0dXJlIHRoaW5ncyBhcyBjb25zdC4KKyAgICAgICAg
ICAgIEpTR2xvYmFsQ29udGV4dFJlZiYgY29udGV4dFJlZiA9IGNvbnRleHQ7CisgICAgICAgICAg
ICBKU1N0cmluZ1JlZiYgc2NyaXB0UmVmID0gc2NyaXB0OworICAgICAgICAgICAgSlNWYWx1ZVJl
ZiYgZXhjZXB0aW9uUmVmID0gZXhjZXB0aW9uOworCisgICAgICAgICAgICBMb2NrIHN5bmNMb2Nr
OworICAgICAgICAgICAgTG9jayYgc3luY0xvY2tSZWYgPSBzeW5jTG9jazsKKyAgICAgICAgICAg
IENvbmRpdGlvbiBzeW5jaHJvbml6ZTsKKyAgICAgICAgICAgIENvbmRpdGlvbiYgc3luY2hyb25p
emVSZWYgPSBzeW5jaHJvbml6ZTsKKyAgICAgICAgICAgIGJvb2wgZGlkU3luY2hyb25pemUgPSBm
YWxzZTsKKyAgICAgICAgICAgIGJvb2wmIGRpZFN5bmNocm9uaXplUmVmID0gZGlkU3luY2hyb25p
emU7CisKKyAgICAgICAgICAgIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMgc3RhcnRUaW1lOwor
ICAgICAgICAgICAgc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcyBlbmRUaW1lOworCisgICAgICAg
ICAgICBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzJiBzdGFydFRpbWVSZWYgPSBzdGFydFRpbWU7
CisgICAgICAgICAgICBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzJiBlbmRUaW1lUmVmID0gZW5k
VGltZTsKKworICAgICAgICAgICAgZGlzcGF0Y2hfZ3JvdXBfdCBncm91cCA9IGRpc3BhdGNoX2dy
b3VwX2NyZWF0ZSgpOworICAgICAgICAgICAgZGlzcGF0Y2hfZ3JvdXBfYXN5bmMoZ3JvdXAsIGRp
c3BhdGNoX2dldF9nbG9iYWxfcXVldWUoMCwgMCksIF57CisgICAgICAgICAgICAgICAgc3RhcnRU
aW1lUmVmID0gY3VycmVudENQVVRpbWUoKTsKKyAgICAgICAgICAgICAgICBKU0V2YWx1YXRlU2Ny
aXB0KGNvbnRleHRSZWYsIHNjcmlwdFJlZiwgbnVsbHB0ciwgbnVsbHB0ciwgMSwgJmV4Y2VwdGlv
blJlZik7CisgICAgICAgICAgICAgICAgZW5kVGltZVJlZiA9IGN1cnJlbnRDUFVUaW1lKCk7Cisg
ICAgICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBXVEY6OmhvbGRMb2NrKHN5bmNMb2NrUmVmKTsK
KyAgICAgICAgICAgICAgICBkaWRTeW5jaHJvbml6ZVJlZiA9IHRydWU7CisgICAgICAgICAgICAg
ICAgc3luY2hyb25pemVSZWYubm90aWZ5QWxsKCk7CisgICAgICAgICAgICB9KTsKKworICAgICAg
ICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhzeW5jTG9jayk7CisgICAgICAgICAgICBzeW5j
aHJvbml6ZS53YWl0KHN5bmNMb2NrLCBbJl0geyByZXR1cm4gZGlkU3luY2hyb25pemU7IH0pOwor
CisgICAgICAgICAgICBpZiAoKChlbmRUaW1lIC0gc3RhcnRUaW1lKSA8IG1pbGxpc2Vjb25kcyh0
aW1lQWZ0ZXJXYXRjaGRvZ1Nob3VsZEhhdmVGaXJlZCkpICYmIGRpc3BhdGNoVGVybWluYXRlQ2Fs
bGJhY2tDYWxsZWQpCisgICAgICAgICAgICAgICAgcHJpbnRmKCJQQVNTOiAlcyBzY3JpcHQgb24g
ZGlzcGF0Y2ggcXVldWUgdGltZWQgb3V0IGFzIGV4cGVjdGVkLlxuIiwgdGllck9wdGlvbnMudGll
cik7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoKGVuZFRpbWUgLSBz
dGFydFRpbWUpID49IG1pbGxpc2Vjb25kcyh0aW1lQWZ0ZXJXYXRjaGRvZ1Nob3VsZEhhdmVGaXJl
ZCkpCisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiRkFJTDogJXMgc2NyaXB0IG9uIGRpc3Bh
dGNoIHF1ZXVlIGRpZCBub3QgdGltZSBvdXQgYXMgZXhwZWN0ZWQuXG4iLCB0aWVyT3B0aW9ucy50
aWVyKTsKKyAgICAgICAgICAgICAgICBpZiAoIXNob3VsZFRlcm1pbmF0ZUNhbGxiYWNrV2FzQ2Fs
bGVkKQorICAgICAgICAgICAgICAgICAgICBwcmludGYoIkZBSUw6ICVzIHNjcmlwdCBvbiBkaXNw
YXRjaCBxdWV1ZSB0aW1lb3V0IGNhbGxiYWNrIHdhcyBub3QgY2FsbGVkLlxuIiwgdGllck9wdGlv
bnMudGllcik7CisgICAgICAgICAgICAgICAgZmFpbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCiAgICAgICAgIEpTR2xvYmFsQ29udGV4dFJlbGVhc2UoY29udGV4dCk7CiAK
ICAgICAgICAgT3B0aW9uczo6c2V0T3B0aW9ucyhzYXZlZE9wdGlvbnNCdWlsZGVyLnRvU3RyaW5n
KCkuYXNjaWkoKS5kYXRhKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNMb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5j
cHAKaW5kZXggYzE3NWFlMGM0ODJlZDI3YmQ1ZjZiZGM4Nzk2OGU3NWQ0NWFmNTBlZi4uYmI3MGFh
YWVhMTVmZWQ1NDc3YjYxOTlmYTZkNGRjN2VhOTcxMDJjMiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0xvY2suY3BwCkBAIC0zMCw2ICszMCw4IEBACiAjaW5jbHVkZSAiU2FtcGxp
bmdQcm9maWxlci5oIgogI2luY2x1ZGUgIldhc21NYWNoaW5lVGhyZWFkcy5oIgogI2luY2x1ZGUg
PHRocmVhZD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RocmVh
ZHMvU2lnbmFscy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMTQ4LDYgKzE1MCwxMCBAQCB2
b2lkIEpTTG9jazo6ZGlkQWNxdWlyZUxvY2soKQogICAgIFdhc206OnN0YXJ0VHJhY2tpbmdDdXJy
ZW50VGhyZWFkKCk7CiAjZW5kaWYKIAorI2lmIEhBVkUoTUFDSF9FWENFUFRJT05TKQorICAgIFdU
Rjo6cmVnaXN0ZXJUaHJlYWQoJlRocmVhZDo6Y3VycmVudCgpKTsKKyNlbmRpZgorCiAgICAgbV92
bS0+dHJhcHMoKS5ub3RpZnlHcmFiQWxsTG9ja3MoKTsKIAogI2lmIEVOQUJMRShTQU1QTElOR19Q
Uk9GSUxFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKaW5kZXgg
YjA0ZGUzNWE1MzYxNTA4NDM4NTc1YzIyN2E1MDE0ZGQwYzUxYmFhMi4uOTZmOWZmNzQyNWJiOTU5
ZjEzN2E2MTRlYzNkYjY3NmM4YjE2ZGE5OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5jcHAKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0
cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGhyZWFkcy9TaWduYWxzLmg+CiAKICNp
ZiBQTEFURk9STShDT0NPQSkKICNpbmNsdWRlIDxjcnRfZXh0ZXJucy5oPgpAQCAtMzU0LDYgKzM1
NSwxMCBAQCBzdGF0aWMgdm9pZCBvdmVycmlkZURlZmF1bHRzKCkKICNpZiAhRU5BQkxFKFdFQkFT
U0VNQkxZX0ZBU1RfTUVNT1JZKQogICAgIE9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5RmFzdE1lbW9y
eSgpID0gZmFsc2U7CiAjZW5kaWYKKworI2lmIEhBVkUoTUFDSF9FWENFUFRJT05TKQorICAgIE9w
dGlvbnM6OnVzZU1hY2hGb3JFeGNlcHRpb25zKCkgPSB0cnVlOworI2VuZGlmCiB9CiAKIHN0YXRp
YyB2b2lkIHJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMoKQpAQCAtNTQ1LDYgKzU1MCw5IEBAIHZv
aWQgT3B0aW9uczo6aW5pdGlhbGl6ZSgpCiAKICAgICAgICAgICAgIGR1bXBPcHRpb25zSWZOZWVk
ZWQoKTsKICAgICAgICAgICAgIGVuc3VyZU9wdGlvbnNBcmVDb2hlcmVudCgpOworCisgICAgICAg
ICAgICBpZiAoT3B0aW9uczo6dXNlTWFjaEZvckV4Y2VwdGlvbnMoKSkKKyAgICAgICAgICAgICAg
ICBXVEY6OmhhbmRsZVNpZ25hbHNXaXRoTWFjaCgpOwogICAgICAgICB9KTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCmluZGV4IGNmOWRjMmIyYTgyNTY4ZWUwN2Rh
MDg4OWUzOWI2YjJmOWRjZDc5NzUuLjIyNzRkMWNkZWIzMzM2ZTM3YWI0NDczZWE0MTE2ZWEzMjI5
ZTkzN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKQEAgLTQyMCw2
ICs0MjAsOCBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICB2KHVuc2ln
bmVkLCB3YXRjaGRvZywgMCwgTm9ybWFsLCAid2F0Y2hkb2cgdGltZW91dCAoMCA9IERpc2FibGVk
LCBOID0gYSB0aW1lb3V0IHBlcmlvZCBvZiBOIG1pbGxpc2Vjb25kcykiKSBcCiAgICAgdihib29s
LCB1c2VQb2xsaW5nVHJhcHMsIGZhbHNlLCBOb3JtYWwsICJ1c2UgcG9sbGluZyAoaW5zdGVhZCBv
ZiBzaWduYWxsaW5nKSBWTSB0cmFwcyIpIFwKICAgICBcCisgICAgdihib29sLCB1c2VNYWNoRm9y
RXhjZXB0aW9ucywgdHJ1ZSwgTm9ybWFsLCAiVXNlIG1hY2ggZXhjZXB0aW9ucyByYXRoZXIgdGhh
biBzaWduYWxzIHRvIGhhbmRsZSBmYXVsdHMgYW5kIHBhc3MgdGhyZWFkIG1lc3NhZ2VzLiAoVGhp
cyBkb2VzIG5vdGhpbmcgb24gcGxhdGZvcm1zIHdpdGhvdXQgbWFjaCkiKSBcCisgICAgXAogICAg
IHYoYm9vbCwgdXNlSUNTdGF0cywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIFwKICAg
ICB2KHVuc2lnbmVkLCBwcm90b3R5cGVIaXRDb3VudEZvckxMSW50Q2FjaGluZywgMiwgTm9ybWFs
LCAiTnVtYmVyIG9mIHByb3RvdHlwZSBwcm9wZXJ0eSBoaXRzIGJlZm9yZSBjYWNoaW5nIGEgcHJv
dG90eXBlIGluIHRoZSBMTEludC4gQSBjb3VudCBvZiAwIG1lYW5zIG5ldmVyIGNhY2hlLiIpIFwK
QEAgLTQ0Myw2ICs0NDUsNyBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAg
ICB2KHVuc2lnbmVkLCB3ZWJBc3NlbWJseUJCUU9wdGltaXphdGlvbkxldmVsLCAxLCBOb3JtYWws
ICJCMyBPcHRpbWl6YXRpb24gbGV2ZWwgZm9yIEJCUSBXZWIgQXNzZW1ibHkgbW9kdWxlIGNvbXBp
bGF0aW9ucy4iKSBcCiAgICAgdih1bnNpZ25lZCwgd2ViQXNzZW1ibHlPTUdPcHRpbWl6YXRpb25M
ZXZlbCwgT3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSwgTm9ybWFsLCAiQjMgT3B0aW1pemF0
aW9uIGxldmVsIGZvciBPTUcgV2ViIEFzc2VtYmx5IG1vZHVsZSBjb21waWxhdGlvbnMuIikgXAog
ICAgIFwKKyAgICB2KGJvb2wsIHVzZUJCUVRpZXJVcENoZWNrcywgdHJ1ZSwgTm9ybWFsLCAiRW5h
YmxlcyB0aWVyIHVwIGNoZWNrcyBmb3Igb3VyIEJCUSBjb2RlLiIpIFwKICAgICB2KHVuc2lnbmVk
LCB3ZWJBc3NlbWJseU9NR1RpZXJVcENvdW50LCA1MDAwLCBOb3JtYWwsICJUaGUgY291bnRkb3du
IGJlZm9yZSB3ZSB0aWVyIHVwIGEgZnVuY3Rpb24gdG8gT01HLiIpIFwKICAgICB2KHVuc2lnbmVk
LCB3ZWJBc3NlbWJseUxvb3BEZWNyZW1lbnQsIDE1LCBOb3JtYWwsICJUaGUgYW1vdW50IHRoZSB0
aWVyIHVwIGNvdW50ZG93biBpcyBkZWNyZW1lbnRlZCBvbiBlYWNoIGxvb3AgYmFja2VkZ2UuIikg
XAogICAgIHYodW5zaWduZWQsIHdlYkFzc2VtYmx5RnVuY3Rpb25FbnRyeURlY3JlbWVudCwgMSwg
Tm9ybWFsLCAiVGhlIGFtb3VudCB0aGUgdGllciB1cCBjb3VudGRvd24gaXMgZGVjcmVtZW50ZWQg
b24gZWFjaCBmdW5jdGlvbiBlbnRyeS4iKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTVRyYXBzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNVHJhcHMuY3BwCmluZGV4IDFiYWFjZTYwNDRlNjYwYThlNTQ0MWZiYWQwMThlYTkwOTMxYTRj
OTEuLjEwZDc4MmE4ZGM0OWE1ZWRhMDgxZDczZDY4M2RmZmUxNmY4YzhmNDMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCkBAIC01MywxMSArNTMsMTEgQEAgQUxX
QVlTX0lOTElORSBWTSYgVk1UcmFwczo6dm0oKSBjb25zdAogI2lmIEVOQUJMRShTSUdOQUxfQkFT
RURfVk1fVFJBUFMpCiAKIHN0cnVjdCBTaWduYWxDb250ZXh0IHsKLSAgICBTaWduYWxDb250ZXh0
KG1jb250ZXh0X3QmIG1jb250ZXh0KQotICAgICAgICA6IG1jb250ZXh0KG1jb250ZXh0KQotICAg
ICAgICAsIHRyYXBQQyhNYWNoaW5lQ29udGV4dDo6aW5zdHJ1Y3Rpb25Qb2ludGVyKG1jb250ZXh0
KSkKLSAgICAgICAgLCBzdGFja1BvaW50ZXIoTWFjaGluZUNvbnRleHQ6OnN0YWNrUG9pbnRlciht
Y29udGV4dCkpCi0gICAgICAgICwgZnJhbWVQb2ludGVyKE1hY2hpbmVDb250ZXh0OjpmcmFtZVBv
aW50ZXIobWNvbnRleHQpKQorICAgIFNpZ25hbENvbnRleHQoUGxhdGZvcm1SZWdpc3RlcnMmIHJl
Z2lzdGVycykKKyAgICAgICAgOiBjb250ZXh0KHJlZ2lzdGVycykKKyAgICAgICAgLCB0cmFwUEMo
TWFjaGluZUNvbnRleHQ6Omluc3RydWN0aW9uUG9pbnRlcihjb250ZXh0KSkKKyAgICAgICAgLCBz
dGFja1BvaW50ZXIoTWFjaGluZUNvbnRleHQ6OnN0YWNrUG9pbnRlcihjb250ZXh0KSkKKyAgICAg
ICAgLCBmcmFtZVBvaW50ZXIoTWFjaGluZUNvbnRleHQ6OmZyYW1lUG9pbnRlcihjb250ZXh0KSkK
ICAgICB7CiAjaWYgQ1BVKFg4Nl82NCkgfHwgQ1BVKFg4NikKICAgICAgICAgLy8gT24gWDg2XzY0
LCBTSUdUUkFQIHJlcG9ydHMgdGhlIGFkZHJlc3MgYWZ0ZXIgdGhlIHRyYXBwaW5nIFBDLiBTbywg
ZGVjIGJ5IDEuCkBAIC02OCwxMSArNjgsMTEgQEAgc3RydWN0IFNpZ25hbENvbnRleHQgewogICAg
IHZvaWQgYWRqdXN0UENUb1BvaW50VG9UcmFwcGluZ0luc3RydWN0aW9uKCkKICAgICB7CiAjaWYg
Q1BVKFg4Nl82NCkgfHwgQ1BVKFg4NikKLSAgICAgICAgTWFjaGluZUNvbnRleHQ6Omluc3RydWN0
aW9uUG9pbnRlcihtY29udGV4dCkgPSB0cmFwUEM7CisgICAgICAgIE1hY2hpbmVDb250ZXh0Ojpp
bnN0cnVjdGlvblBvaW50ZXIoY29udGV4dCkgPSB0cmFwUEM7CiAjZW5kaWYKICAgICB9CiAKLSAg
ICBtY29udGV4dF90JiBtY29udGV4dDsKKyAgICBQbGF0Zm9ybVJlZ2lzdGVycyYgY29udGV4dDsK
ICAgICB2b2lkKiB0cmFwUEM7CiAgICAgdm9pZCogc3RhY2tQb2ludGVyOwogICAgIHZvaWQqIGZy
YW1lUG9pbnRlcjsKQEAgLTEzMCwxMSArMTMwLDEzIEBAIHN0YXRpYyBFeHBlY3RlZDxWTUFuZFN0
YWNrQm91bmRzLCBWTVRyYXBzOjpFcnJvcj4gZmluZEFjdGl2ZVZNQW5kU3RhY2tCb3VuZHMoU2ln
CiAKIHN0YXRpYyB2b2lkIGluc3RhbGxTaWduYWxIYW5kbGVyKCkKIHsKLSAgICBpbnN0YWxsU2ln
bmFsSGFuZGxlcihTaWduYWw6OlRyYXAsIFtdIChpbnQsIHNpZ2luZm9fdCosIHZvaWQqIHVhcCkg
LT4gU2lnbmFsQWN0aW9uIHsKLSAgICAgICAgU2lnbmFsQ29udGV4dCBjb250ZXh0KHN0YXRpY19j
YXN0PHVjb250ZXh0X3QqPih1YXApLT51Y19tY29udGV4dCk7CisgICAgaW5zdGFsbFNpZ25hbEhh
bmRsZXIoU2lnbmFsOjpUcmFwLCBbXSAoU2lnbmFsLCBTaWdJbmZvJiwgUGxhdGZvcm1SZWdpc3Rl
cnMmIHJlZ2lzdGVycykgLT4gU2lnbmFsQWN0aW9uIHsKKyAgICAgICAgU2lnbmFsQ29udGV4dCBj
b250ZXh0KHJlZ2lzdGVycyk7CiAKLSAgICAgICAgaWYgKCFpc0pJVFBDKGNvbnRleHQudHJhcFBD
KSkKKyAgICAgICAgaWYgKCFpc0pJVFBDKGNvbnRleHQudHJhcFBDKSkgeworICAgICAgICAgICAg
ZGF0YUxvZ0xuKCJ0cmFwcGluZyBwYzogIiwgUmF3UG9pbnRlcihjb250ZXh0LnRyYXBQQyksICIg
aml0IHN0YXJ0OiAiLCBzdGFydE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbCwgIiBqaXQgZW5k
OiAiLCBlbmRPZkZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2wpOwogICAgICAgICAgICAgcmV0dXJu
IFNpZ25hbEFjdGlvbjo6Tm90SGFuZGxlZDsKKyAgICAgICAgfQogCiAgICAgICAgIC8vIEZJWE1F
OiBUaGlzIGN1cnJlbnRseSBlYXRzIGFsbCB0cmFwcyBpbmNsdWRpbmcgaml0IGFzc2VydHMgd2Ug
c2hvdWxkIG1ha2Ugc3VyZSB0aGlzCiAgICAgICAgIC8vIGFsd2F5cyB3b3Jrcy4gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MTAzOQpAQCAtNDA0LDggKzQwNiw4IEBA
IHZvaWQgVk1UcmFwczo6U2lnbmFsU2VuZGVyOjpzZW5kKCkKICAgICAgICAgICAgIFZNJiB2bSA9
ICptX3ZtOwogICAgICAgICAgICAgYXV0byBvcHRpb25hbE93bmVyVGhyZWFkID0gdm0ub3duZXJU
aHJlYWQoKTsKICAgICAgICAgICAgIGlmIChvcHRpb25hbE93bmVyVGhyZWFkKSB7Ci0gICAgICAg
ICAgICAgICAgc2VuZE1lc3NhZ2UoKm9wdGlvbmFsT3duZXJUaHJlYWQudmFsdWUoKS5nZXQoKSwg
W10gKHNpZ2luZm9fdCosIHVjb250ZXh0X3QqIHVjb250ZXh0KSAtPiB2b2lkIHsKLSAgICAgICAg
ICAgICAgICAgICAgU2lnbmFsQ29udGV4dCBjb250ZXh0KHVjb250ZXh0LT51Y19tY29udGV4dCk7
CisgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoKm9wdGlvbmFsT3duZXJUaHJlYWQudmFsdWUo
KS5nZXQoKSwgW10gKFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMpIC0+IHZvaWQgeworICAg
ICAgICAgICAgICAgICAgICBTaWduYWxDb250ZXh0IGNvbnRleHQocmVnaXN0ZXJzKTsKICAgICAg
ICAgICAgICAgICAgICAgYXV0byBhY3RpdmVWTUFuZFN0YWNrQm91bmRzID0gZmluZEFjdGl2ZVZN
QW5kU3RhY2tCb3VuZHMoY29udGV4dCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChhY3RpdmVW
TUFuZFN0YWNrQm91bmRzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBWTSogdm0gPSBhY3Rp
dmVWTUFuZFN0YWNrQm91bmRzLnZhbHVlKCkudm07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAKaW5kZXggNGFkYWVmZjFjZGEyZDFm
YmM2ZjkwNjFmMDYzZTE0ZDJlNjMzMDA0OC4uYmI0NjA1YzY5M2UxMmRkZTA1MDg0ZjdhMTdjZDFl
NDRmN2U5ZTY3NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1NpZ2ls
bENyYXNoQW5hbHl6ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9TaWdp
bGxDcmFzaEFuYWx5emVyLmNwcApAQCAtNzgsMTEgKzc4LDExIEBAIHByaXZhdGU6CiAjZW5kaWYg
Ly8gVVNFKE9TX0xPRykKIAogc3RydWN0IFNpZ25hbENvbnRleHQgewotICAgIFNpZ25hbENvbnRl
eHQobWNvbnRleHRfdCYgbWNvbnRleHQpCi0gICAgICAgIDogbWNvbnRleHQobWNvbnRleHQpCi0g
ICAgICAgICwgbWFjaGluZVBDKE1hY2hpbmVDb250ZXh0OjppbnN0cnVjdGlvblBvaW50ZXIobWNv
bnRleHQpKQotICAgICAgICAsIHN0YWNrUG9pbnRlcihNYWNoaW5lQ29udGV4dDo6c3RhY2tQb2lu
dGVyKG1jb250ZXh0KSkKLSAgICAgICAgLCBmcmFtZVBvaW50ZXIoTWFjaGluZUNvbnRleHQ6OmZy
YW1lUG9pbnRlcihtY29udGV4dCkpCisgICAgU2lnbmFsQ29udGV4dChQbGF0Zm9ybVJlZ2lzdGVy
cyYgY29udGV4dCkKKyAgICAgICAgOiBjb250ZXh0KGNvbnRleHQpCisgICAgICAgICwgbWFjaGlu
ZVBDKE1hY2hpbmVDb250ZXh0OjppbnN0cnVjdGlvblBvaW50ZXIoY29udGV4dCkpCisgICAgICAg
ICwgc3RhY2tQb2ludGVyKE1hY2hpbmVDb250ZXh0OjpzdGFja1BvaW50ZXIoY29udGV4dCkpCisg
ICAgICAgICwgZnJhbWVQb2ludGVyKE1hY2hpbmVDb250ZXh0OjpmcmFtZVBvaW50ZXIoY29udGV4
dCkpCiAgICAgeyB9CiAKICAgICB2b2lkIGR1bXAoKQpAQCAtMTEyLDcgKzExMiw3IEBAIHN0cnVj
dCBTaWduYWxDb250ZXh0IHsKICAgICAgICAgdihncykKIAogI2RlZmluZSBEVU1QX1JFR0lTVEVS
KF9fcmVnKSBcCi0gICAgICAgIGxvZygiUmVnaXN0ZXIgIiAjX19yZWcgIjogJXAiLCByZWludGVy
cHJldF9jYXN0PHZvaWQqPihtY29udGV4dC0+X19zcy5fXyMjX19yZWcpKTsKKyAgICAgICAgbG9n
KCJSZWdpc3RlciAiICNfX3JlZyAiOiAlcCIsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNvbnRl
eHQuX18jI19fcmVnKSk7CiAgICAgICAgIEZPUl9FQUNIX1JFR0lTVEVSKERVTVBfUkVHSVNURVIp
CiAjdW5kZWYgRk9SX0VBQ0hfUkVHSVNURVIKIApAQCAtMTIwLDIwICsxMjAsMjAgQEAgc3RydWN0
IFNpZ25hbENvbnRleHQgewogICAgICAgICBpbnQgaTsKICAgICAgICAgZm9yIChpID0gMDsgaSA8
IDI4OyBpICs9IDQpIHsKICAgICAgICAgICAgIGxvZygieCVkOiAlMDE2bGx4IHglZDogJTAxNmxs
eCB4JWQ6ICUwMTZsbHggeCVkOiAlMDE2bGx4IiwKLSAgICAgICAgICAgICAgICBpLCBtY29udGV4
dC0+X19zcy5fX3hbaV0sCi0gICAgICAgICAgICAgICAgaSsxLCBtY29udGV4dC0+X19zcy5fX3hb
aSsxXSwKLSAgICAgICAgICAgICAgICBpKzIsIG1jb250ZXh0LT5fX3NzLl9feFtpKzJdLAotICAg
ICAgICAgICAgICAgIGkrMywgbWNvbnRleHQtPl9fc3MuX194W2krM10pOworICAgICAgICAgICAg
ICAgIGksIGNvbnRleHQuX194W2ldLAorICAgICAgICAgICAgICAgIGkrMSwgY29udGV4dC5fX3hb
aSsxXSwKKyAgICAgICAgICAgICAgICBpKzIsIGNvbnRleHQuX194W2krMl0sCisgICAgICAgICAg
ICAgICAgaSszLCBjb250ZXh0Ll9feFtpKzNdKTsKICAgICAgICAgfQogICAgICAgICBBU1NFUlQo
aSA8IDI5KTsKICAgICAgICAgbG9nKCJ4JWQ6ICUwMTZsbHggZnA6ICUwMTZsbHggbHI6ICUwMTZs
bHgiLAotICAgICAgICAgICAgaSwgbWNvbnRleHQtPl9fc3MuX194W2ldLCBtY29udGV4dC0+X19z
cy5fX2ZwLCBtY29udGV4dC0+X19zcy5fX2xyKTsKKyAgICAgICAgICAgIGksIGNvbnRleHQuX194
W2ldLCBjb250ZXh0Ll9fZnAsIGNvbnRleHQuX19scik7CiAgICAgICAgIGxvZygic3A6ICUwMTZs
bHggcGM6ICUwMTZsbHggY3BzcjogJTA4eCIsCi0gICAgICAgICAgICBtY29udGV4dC0+X19zcy5f
X3NwLCBtY29udGV4dC0+X19zcy5fX3BjLCBtY29udGV4dC0+X19zcy5fX2Nwc3IpOworICAgICAg
ICAgICAgY29udGV4dC5fX3NwLCBjb250ZXh0Ll9fcGMsIGNvbnRleHQuX19jcHNyKTsKICNlbmRp
ZgogICAgIH0KIAotICAgIG1jb250ZXh0X3QmIG1jb250ZXh0OworICAgIFBsYXRmb3JtUmVnaXN0
ZXJzJiBjb250ZXh0OwogICAgIHZvaWQqIG1hY2hpbmVQQzsKICAgICB2b2lkKiBzdGFja1BvaW50
ZXI7CiAgICAgdm9pZCogZnJhbWVQb2ludGVyOwpAQCAtMTQyLDggKzE0Miw4IEBAIHN0cnVjdCBT
aWduYWxDb250ZXh0IHsKIHN0YXRpYyB2b2lkIGluc3RhbGxDcmFzaEhhbmRsZXIoKQogewogI2lm
IENQVShYODZfNjQpIHx8IENQVShBUk02NCkKLSAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWdu
YWw6OklsbCwgW10gKGludCwgc2lnaW5mb190Kiwgdm9pZCogdWFwKSB7Ci0gICAgICAgIFNpZ25h
bENvbnRleHQgY29udGV4dChzdGF0aWNfY2FzdDx1Y29udGV4dF90Kj4odWFwKS0+dWNfbWNvbnRl
eHQpOworICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbDo6SWxsLCBbXSAoU2lnbmFsLCBT
aWdJbmZvJiwgUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVycykgeworICAgICAgICBTaWduYWxD
b250ZXh0IGNvbnRleHQocmVnaXN0ZXJzKTsKIAogICAgICAgICBpZiAoIWlzSklUUEMoY29udGV4
dC5tYWNoaW5lUEMpKQogICAgICAgICAgICAgcmV0dXJuIFNpZ25hbEFjdGlvbjo6Tm90SGFuZGxl
ZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAppbmRleCAxZGQw
Y2QxZDgzNWM2YzJmMjMxYjAwYjg4NmRkZTRhZjcyYzI2M2NlLi5iMWI1OThkMjBjNWMwMDc3ZDll
OWQwOGUzNjhhZDVjYTE3ODMxYmFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQkJRUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUJCUVBsYW4uY3BwCkBAIC0yNDIsNyArMjQyLDcgQEAgdm9pZCBCQlFQbGFuOjpjb21waWxlRnVu
Y3Rpb25zKENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKICAgICAgICAgQVNTRVJUKHZhbGlkYXRl
RnVuY3Rpb24oZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgbV9tb2R1
bGVJbmZvcm1hdGlvbi5nZXQoKSkpOwogCiAgICAgICAgIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bHNbZnVuY3Rpb25JbmRleF0gPSBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4oKTsKLSAg
ICAgICAgVGllclVwQ291bnQqIHRpZXJVcCA9ICZtX3RpZXJVcENvdW50c1tmdW5jdGlvbkluZGV4
XTsKKyAgICAgICAgVGllclVwQ291bnQqIHRpZXJVcCA9IE9wdGlvbnM6OnVzZUJCUVRpZXJVcENo
ZWNrcygpID8gJm1fdGllclVwQ291bnRzW2Z1bmN0aW9uSW5kZXhdIDogbnVsbHB0cjsKICAgICAg
ICAgYXV0byBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUobV9jb21waWxh
dGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdLCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0
aCwgc2lnbmF0dXJlLCBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdLCBt
X21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIENvbXBpbGF0aW9uTW9kZTo6QkJRTW9k
ZSwgZnVuY3Rpb25JbmRleCwgdGllclVwKTsKIAogICAgICAgICBpZiAoVU5MSUtFTFkoIXBhcnNl
QW5kQ29tcGlsZVJlc3VsdCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAKaW5kZXggMmUwYzk5YTM5YmViZDMxNzhiOTE0
OGQ5NThmZTUzZTU3YTYyMjk3ZS4uMjY0YzM0ZGU0NWRhMTc1YTVkNTE0MWMxNzFlZmU5NWUwNjNj
NWUyNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2ln
bmFsSGFuZGxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0
U2lnbmFsSGFuZGxlci5jcHAKQEAgLTUyLDkgKzUyLDggQEAgc3RhdGljIExhenlOZXZlckRlc3Ry
b3llZDxIYXNoU2V0PHN0ZDo6dHVwbGU8dm9pZCosIHZvaWQqPj4+IGNvZGVMb2NhdGlvbnM7IC8v
ICgKIAogc3RhdGljIGJvb2wgZmFzdEhhbmRsZXJJbnN0YWxsZWQgeyBmYWxzZSB9OwogCi1zdGF0
aWMgU2lnbmFsQWN0aW9uIHRyYXBIYW5kbGVyKGludCwgc2lnaW5mb190KiBzaWdJbmZvLCB2b2lk
KiB1Y29udGV4dCkKK3N0YXRpYyBTaWduYWxBY3Rpb24gdHJhcEhhbmRsZXIoU2lnbmFsLCBTaWdJ
bmZvJiBzaWdJbmZvLCBQbGF0Zm9ybVJlZ2lzdGVycyYgY29udGV4dCkKIHsKLSAgICBtY29udGV4
dF90JiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+KHVjb250ZXh0KS0+dWNfbWNv
bnRleHQ7CiAgICAgdm9pZCogZmF1bHRpbmdJbnN0cnVjdGlvbiA9IE1hY2hpbmVDb250ZXh0Ojpp
bnN0cnVjdGlvblBvaW50ZXIoY29udGV4dCk7CiAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgInN0
YXJ0aW5nIGhhbmRsZXIgZm9yIGZhdWx0IGF0OiAiLCBSYXdQb2ludGVyKGZhdWx0aW5nSW5zdHJ1
Y3Rpb24pKTsKIApAQCAtNjQsNyArNjMsNyBAQCBzdGF0aWMgU2lnbmFsQWN0aW9uIHRyYXBIYW5k
bGVyKGludCwgc2lnaW5mb190KiBzaWdJbmZvLCB2b2lkKiB1Y29udGV4dCkKICAgICBpZiAoaXNK
SVRQQyhmYXVsdGluZ0luc3RydWN0aW9uKSkgewogICAgICAgICBib29sIGZhdWx0ZWRJbkFjdGl2
ZUZhc3RNZW1vcnkgPSBmYWxzZTsKICAgICAgICAgewotICAgICAgICAgICAgdm9pZCogZmF1bHRp
bmdBZGRyZXNzID0gc2lnSW5mby0+c2lfYWRkcjsKKyAgICAgICAgICAgIHZvaWQqIGZhdWx0aW5n
QWRkcmVzcyA9IHNpZ0luZm8uZmF1bHRpbmdBZGRyZXNzOwogICAgICAgICAgICAgZGF0YUxvZ0xu
SWYodmVyYm9zZSwgImNoZWNraW5nIGZhdWx0aW5nIGFkZHJlc3M6ICIsIFJhd1BvaW50ZXIoZmF1
bHRpbmdBZGRyZXNzKSwgIiBpcyBpbiBhbiBhY3RpdmUgZmFzdCBtZW1vcnkiKTsKICAgICAgICAg
ICAgIGZhdWx0ZWRJbkFjdGl2ZUZhc3RNZW1vcnkgPSBXYXNtOjpNZW1vcnk6OmFkZHJlc3NJc0lu
QWN0aXZlRmFzdE1lbW9yeShmYXVsdGluZ0FkZHJlc3MpOwogICAgICAgICB9CkBAIC0xMjQsMTEg
KzEyMywxMSBAQCB2b2lkIGVuYWJsZUZhc3RNZW1vcnkoKQogICAgICAgICAgICAgcmV0dXJuOwog
CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZX0ZBU1RfTUVNT1JZKQotICAgICAgICBpbnN0YWxsU2ln
bmFsSGFuZGxlcihTaWduYWw6OkJ1cywgW10gKGludCBzaWduYWwsIHNpZ2luZm9fdCogc2lnSW5m
bywgdm9pZCogdWNvbnRleHQpIHsKKyAgICAgICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFs
OjpCdXMsIFtdIChTaWduYWwgc2lnbmFsLCBTaWdJbmZvJiBzaWdJbmZvLCBQbGF0Zm9ybVJlZ2lz
dGVycyYgdWNvbnRleHQpIHsKICAgICAgICAgICAgIHJldHVybiB0cmFwSGFuZGxlcihzaWduYWws
IHNpZ0luZm8sIHVjb250ZXh0KTsKICAgICAgICAgfSk7CiAKLSAgICAgICAgaW5zdGFsbFNpZ25h
bEhhbmRsZXIoU2lnbmFsOjpTZWdWLCBbXSAoaW50IHNpZ25hbCwgc2lnaW5mb190KiBzaWdJbmZv
LCB2b2lkKiB1Y29udGV4dCkgeworICAgICAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWw6
OlNlZ1YsIFtdIChTaWduYWwgc2lnbmFsLCBTaWdJbmZvJiBzaWdJbmZvLCBQbGF0Zm9ybVJlZ2lz
dGVycyYgdWNvbnRleHQpIHsKICAgICAgICAgICAgIHJldHVybiB0cmFwSGFuZGxlcihzaWduYWws
IHNpZ0luZm8sIHVjb250ZXh0KTsKICAgICAgICAgfSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21NYWNoaW5lVGhyZWFkcy5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTWFjaGluZVRocmVhZHMuY3BwCmluZGV4IDVhYWM4N2FjYjU3NDdj
N2ZjYTJmOTM2ZWM5Y2Y2NzhiNDMxNzgxNzEuLjBhMzY3ZmQ1ZTIyNTI3ZTljM2M4NzUzNmVjZmQ3
MmIxM2RmNzlkNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21N
YWNoaW5lVGhyZWFkcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1h
Y2hpbmVUaHJlYWRzLmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIk1hY2hpbmVTdGFj
a01hcmtlci5oIgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0
Zi9UaHJlYWRNZXNzYWdlLmg+CisjaW5jbHVkZSA8d3RmL3RocmVhZHMvU2lnbmFscy5oPgogCiBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCkBAIC01Nyw3ICs1OCw3IEBAIHZvaWQg
cmVzZXRJbnN0cnVjdGlvbkNhY2hlT25BbGxUaHJlYWRzKCkKIAogICAgIGNvbnN0IERvdWJseUxp
bmtlZExpc3Q8TWFjaGluZVRocmVhZHM6Ok1hY2hpbmVUaHJlYWQ+JiB0aHJlYWRzID0gd2FzbVRo
cmVhZHMoKS50aHJlYWRzTGlzdEhlYWQobG9ja2VyKTsKICAgICBmb3IgKGNvbnN0IGF1dG8qIHRo
cmVhZCA9IHRocmVhZHMuaGVhZCgpOyB0aHJlYWQ7IHRocmVhZCA9IHRocmVhZC0+bmV4dCgpKSB7
Ci0gICAgICAgIHNlbmRNZXNzYWdlKHRocmVhZC0+bV90aHJlYWQuZ2V0KCksIFtdIChzaWdpbmZv
X3QqLCB1Y29udGV4dF90KikgeworICAgICAgICBzZW5kTWVzc2FnZSh0aHJlYWQtPm1fdGhyZWFk
LmdldCgpLCBbXSAoY29uc3QgUGxhdGZvcm1SZWdpc3RlcnMmKSB7CiAgICAgICAgICAgICAvLyBJ
dCdzIGxpa2VseSB0aGF0IHRoZSBzaWduYWwgaGFuZGxlciB3aWxsIGFscmVhZHkgcmVzZXQgdGhl
IGluc3RydWN0aW9uIGNhY2hlIGJ1dCB3ZSBtaWdodCBhcyB3ZWxsIGJlIHN1cmUuCiAgICAgICAg
ICAgICBXVEY6OmNyb3NzTW9kaWZ5aW5nQ29kZUZlbmNlKCk7CiAgICAgICAgIH0pOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi9Db25maWd1cmF0aW9ucy9XVEYueGNjb25maWcgYi9Tb3VyY2UvV1RG
L0NvbmZpZ3VyYXRpb25zL1dURi54Y2NvbmZpZwppbmRleCA0MjFlZmQ5NjFjMTQ2OGNkMjBkZGM1
YmJmODg5NjIwZWUxY2Y1OGRjLi44N2FhNjRmODdjNjdlZGM1YzhjYjZkZDA5MzNhODI4NmY5MGRh
OTY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NvbmZpZ3VyYXRpb25zL1dURi54Y2NvbmZpZwor
KysgYi9Tb3VyY2UvV1RGL0NvbmZpZ3VyYXRpb25zL1dURi54Y2NvbmZpZwpAQCAtMjcsMyArMjcs
NiBAQCBQUk9EVUNUX05BTUUgPSBXVEY7CiAKIEdDQ19TWU1CT0xTX1BSSVZBVEVfRVhURVJOID0g
WUVTOwogU1RSSVBfSU5TVEFMTEVEX1BST0RVQ1QgPSBOTzsKKworRVhDTFVERURfU09VUkNFX0ZJ
TEVfTkFNRVNfID0gTWFjaEV4Y2VwdGlvbnMuZGVmcworRVhDTFVERURfU09VUkNFX0ZJTEVfTkFN
RVMgPSAkKEVYQ0xVREVEX1NPVVJDRV9GSUxFX05BTUVTXyQoVVNFX0lOVEVSTkFMX1NESykpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA1ZjQ1Mjg3ZjZlM2M2
ODg1YjIyYmEyNzc2Y2ZiYzZhMzMyM2JkMDViLi41ODU0NGNjYjYyY2IyMjEyYmFlZTc2ZjRkMmEw
MWU4OWI2YjdiMDk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTY0LDYgKzY0LDcgQEAKIAkJNTIxODMwMTJDOTlFNDc2QTg0RUVCRUE4IC8qIFN5bWJvbElt
cGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjcy
QkJEQjEwN0ZBNDI0ODg2MTc4QjlFIC8qIFN5bWJvbEltcGwuY3BwICovOyB9OwogCQk1MzExQkQ1
MzFFQTcxQ0FEMDA1MjUyODEgLyogU2lnbmFscy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzExQkQ1MTFFQTcxQ0FEMDA1MjUyODEgLyogU2lnbmFs
cy5jcHAgKi87IH07CiAJCTUzMTFCRDVDMUVBODIyRjkwMDUyNTI4MSAvKiBUaHJlYWRNZXNzYWdl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMTFC
RDVCMUVBODIyRjkwMDUyNTI4MSAvKiBUaHJlYWRNZXNzYWdlLmNwcCAqLzsgfTsKKwkJNTM1MzRG
MkExRUMwRTEwRTAwMTQxQjJGIC8qIE1hY2hFeGNlcHRpb25zLmRlZnMgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzUzNEYyOTFFQzBFMTBFMDAxNDFCMkYg
LyogTWFjaEV4Y2VwdGlvbnMuZGVmcyAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChDbGll
bnQsIFNlcnZlciwgKTsgfTsgfTsKIAkJNzBBOTkzRkUxQUQ3MTUxMzAwRkE2MTVCIC8qIFN5bWJv
bFJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDcwQTk5M0ZDMUFENzE1MTMwMEZBNjE1QiAvKiBTeW1ib2xSZWdpc3RyeS5jcHAgKi87IH07
CiAJCTcwRUNBNjBEMUIwMjQyNjgwMDQ0OTczOSAvKiBBdG9taWNTdHJpbmdJbXBsLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcwRUNBNjBBMUIwMjQy
NjgwMDQ0OTczOSAvKiBBdG9taWNTdHJpbmdJbXBsLmNwcCAqLzsgfTsKIAkJN0FGRUM2QjExRUIy
MkI1OTAwREFERTM2IC8qIFVVSUQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0FGRUM2QjAxRUIyMkI1OTAwREFERTM2IC8qIFVVSUQuY3BwICovOyB9
OwpAQCAtMjk5LDYgKzMwMCw3IEBACiAJCTUzMTFCRDU3MUVBN0UxQTEwMDUyNTI4MSAvKiBTaWdu
YWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpZ25hbHMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMxMUJENTkxRUE4MUE5NjAwNTI1MjgxIC8qIFRocmVh
ZE1lc3NhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGhyZWFkTWVzc2Fn
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzExQkQ1QjFFQTgyMkY5MDA1MjUy
ODEgLyogVGhyZWFkTWVzc2FnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBUaHJlYWRNZXNzYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM1
MzRGMjkxRUMwRTEwRTAwMTQxQjJGIC8qIE1hY2hFeGNlcHRpb25zLmRlZnMgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLm1pZzsgcGF0aCA9IE1hY2hFeGNlcHRpb25zLmRlZnM7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUzOUVCMDYyMUQ1NTI4NDIwMEM4MkVGNyAvKiBMRUJEZWNvZGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExFQkRlY29kZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNFQzI1M0MxRTk1QUQzMDAwMDgzMUI5IC8qIFByaW9yaXR5
UXVldWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJpb3JpdHlRdWV1ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NTMwNzFDOTFDNDA0MjcyMDAzODQ4OTgg
LyogVGlueUxSVUNhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpbnlM
UlVDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTAyMyw2ICsxMDI1LDcg
QEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTFBNDI4QjhCMUM4Rjg5REQwMDUxRTlFQiAvKiBBcHBL
aXRDb21wYXRpYmlsaXR5RGVjbGFyYXRpb25zLmggKi8sCiAJCQkJMUFDQUREODIxODg0NDgwMTAw
RDhCNzFEIC8qIERlcHJlY2F0ZWRTeW1ib2xzVXNlZEJ5U2FmYXJpLm1tICovLAorCQkJCTUzNTM0
RjI5MUVDMEUxMEUwMDE0MUIyRiAvKiBNYWNoRXhjZXB0aW9ucy5kZWZzICovLAogCQkJCUE4QTQ3
MkM1MTUxQTgyNUEwMDQxMjNGRiAvKiBNYWluVGhyZWFkTWFjLm1tICovLAogCQkJKTsKIAkJCXBh
dGggPSBtYWM7CkBAIC0xMzQ2LDYgKzEzNDksNyBAQAogCQkJCTE0M0Y2MTFGMTU2NUYwRjkwMERC
NTE0QSAvKiBSQU1TaXplLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEzQjcyNUVDOTg3NDQ2QUQ5
M0YxQTQ0MCAvKiBSYW5kb21EZXZpY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0MTQx
NTFBODI1QjAwNDEyM0ZGIC8qIFJhbmRvbU51bWJlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1
MzUzNEYyQTFFQzBFMTBFMDAxNDFCMkYgLyogTWFjaEV4Y2VwdGlvbnMuZGVmcyBpbiBTb3VyY2Vz
ICovLAogCQkJCUE4QTQ3NDFBMTUxQTgyNUIwMDQxMjNGRiAvKiBSZWZDb3VudGVkTGVha0NvdW50
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkNERUQwRjMxODExNUM4NTAwNERCQTcwIC8qIFJ1
bkxvb3AuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkNERUQwRUYxODExNUMzODAwNERCQTcwIC8q
IFJ1bkxvb3BDRi5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L1BsYXRmb3JtLmggYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCmluZGV4IDY4NTRhODFlMzk3
MjcwNjcwMzRkMDVkYjM5OGE0NzBjMTQyODQyNzYuLjM2Mzg4Mzk1ZDRmNDNiNDY1Mzg5ZWJjOTgw
MmZiYjRkOTBkMjRiN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKKysr
IGIvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaApAQCAtNjYzLDYgKzY2MywxMCBAQAogI2RlZmlu
ZSBIQVZFX1JFQURMSU5FIDEKICNkZWZpbmUgSEFWRV9TWVNfVElNRUJfSCAxCiAKKyNpZiBfX2hh
c19pbmNsdWRlKDxtYWNoL21hY2hfZXhjLmRlZnM+KSAmJiAhKFBMQVRGT1JNKFdBVENIT1MpIHx8
IFBMQVRGT1JNKEFQUExFVFYpKQorI2RlZmluZSBIQVZFX01BQ0hfRVhDRVBUSU9OUyAxCisjZW5k
aWYKKwogI2lmICFQTEFURk9STShHVEspCiAjZGVmaW5lIFVTRV9BQ0NFTEVSQVRFIDEKICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1SZWdpc3RlcnMuaCBiL1NvdXJj
ZS9XVEYvd3RmL1BsYXRmb3JtUmVnaXN0ZXJzLmgKaW5kZXggZDViNWFiYzIyMWJiYWQ4Mjk3NjE5
M2VjZTUxYzFjNzYxNzVkYjA2ZC4uOTJhYWJiOWY5YzMxZDFjZDJmNDNiOTA1ZjY5YzYyNGNjZjI4
ODY3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1SZWdpc3RlcnMuaAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVJlZ2lzdGVycy5oCkBAIC0yOSw2ICsyOSw3IEBACiAK
ICNpZiBPUyhEQVJXSU4pCiAjaW5jbHVkZSA8bWFjaC90aHJlYWRfYWN0Lmg+CisjaW5jbHVkZSA8
c2lnbmFsLmg+CiAjZWxpZiBPUyhXSU5ET1dTKQogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNlbHNl
CkBAIC01NSw2ICs1NiwxMSBAQCB0eXBlZGVmIGFybV90aHJlYWRfc3RhdGU2NF90IFBsYXRmb3Jt
UmVnaXN0ZXJzOwogI2Vycm9yIFVua25vd24gQXJjaGl0ZWN0dXJlCiAjZW5kaWYKIAoraW5saW5l
IFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnNGcm9tVUNvbnRleHQodWNvbnRleHRfdCogdWNv
bnRleHQpCit7CisgICAgcmV0dXJuIHVjb250ZXh0LT51Y19tY29udGV4dC0+X19zczsKK30KKwog
I2VsaWYgT1MoV0lORE9XUykKIAogdXNpbmcgUGxhdGZvcm1SZWdpc3RlcnMgPSBDT05URVhUOwpA
QCAtNjUsNiArNzEsMTEgQEAgc3RydWN0IFBsYXRmb3JtUmVnaXN0ZXJzIHsKICAgICBtY29udGV4
dF90IG1hY2hpbmVDb250ZXh0OwogfTsKIAoraW5saW5lIFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdp
c3RlcnNGcm9tVUNvbnRleHQodWNvbnRleHRfdCogdWNvbnRleHQpCit7CisgICAgcmV0dXJuIHVj
b250ZXh0LT51Y19tY29udGV4dDsKK30KKwogI2Vsc2UKIAogc3RydWN0IFBsYXRmb3JtUmVnaXN0
ZXJzIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1N0YWNrQm91bmRzLmggYi9Tb3VyY2Uv
V1RGL3d0Zi9TdGFja0JvdW5kcy5oCmluZGV4IDU1NDYwNGYyYWI0ODRjN2NmNzFlZTM4NjMwY2Vi
NGM3OWMzM2U5NzIuLmNkNjJjMTQ4YTZjN2VmYzk1MTdhOGIwOWI4YTMyYzdmZTE5MGNkZWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1N0YWNrQm91bmRzLmgKKysrIGIvU291cmNlL1dURi93
dGYvU3RhY2tCb3VuZHMuaApAQCAtNTQsNyArNTQsNiBAQCBwdWJsaWM6CiAgICAgICAgIDogbV9v
cmlnaW4ob3JpZ2luKQogICAgICAgICAsIG1fYm91bmQoZW5kKQogICAgIHsKLSAgICAgICAgY2hl
Y2tDb25zaXN0ZW5jeSgpOwogICAgIH0KIAogICAgIHZvaWQqIG9yaWdpbigpIGNvbnN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXIuY3BwIGIvU291cmNlL1dURi93dGYv
VGhyZWFkSG9sZGVyLmNwcAppbmRleCAzMGIyMjdjZGI4YWM1MjYwNzUwYjQ3ZDQ4MmFiYzJkNTVi
ZTNhYzk0Li45NmQ5MWI1Yjg3ZGRmOTc4ODA1ZGI2ZWIxZjYwZGMwMGUxNDlhNDg2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXIuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L1RocmVhZEhvbGRlci5jcHAKQEAgLTM0LDEyICszNCwxNyBAQAogCiAjaW5jbHVkZSAiVGhyZWFk
aW5nLmgiCiAKKyNpbmNsdWRlIDx3dGYvdGhyZWFkcy9TaWduYWxzLmg+CisKIG5hbWVzcGFjZSBX
VEYgewogCiBUaHJlYWRTcGVjaWZpY0tleSBUaHJlYWRIb2xkZXI6Om1fa2V5ID0gSW52YWxpZFRo
cmVhZFNwZWNpZmljS2V5OwogCiBUaHJlYWRIb2xkZXI6On5UaHJlYWRIb2xkZXIoKQogeworI2lm
IEhBVkUoTUFDSF9FWENFUFRJT05TKQorICAgIHJlbW92ZVRocmVhZCgmbV90aHJlYWQuZ2V0KCkp
OworI2VuZGlmCiAgICAgbV90aHJlYWQtPmRpZEV4aXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRNZXNz
YWdlLmNwcAppbmRleCBmMTRiYzQ1ZDM2MTRjN2M2NjM1ZWIxN2FiMGUyNzI4MTZhMTM3M2RkLi40
ZmYwMmEyNGM2Y2IxYzA5ZmE4MWUwNzhjNTAxODJlNDE5YzcxNDk0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi9UaHJlYWRNZXNzYWdlLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRN
ZXNzYWdlLmNwcApAQCAtMzYsNiArMzYsOSBAQAogI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KICNp
bmNsdWRlIDx3dGYvdGhyZWFkcy9TaWduYWxzLmg+CiAKKyNpZiBIQVZFKE1BQ0hfRVhDRVBUSU9O
UykKKyNpbmNsdWRlIDxtYWNoL3RocmVhZF9hY3QuaD4KKyNlbmRpZgogCiBuYW1lc3BhY2UgV1RG
IHsKIApAQCAtODMsMTIgKzg2LDEyIEBAIHZvaWQgaW5pdGlhbGl6ZVRocmVhZE1lc3NhZ2VzKCkK
IH0KIAogU1VQUFJFU1NfQVNBTgotTWVzc2FnZVN0YXR1cyBzZW5kTWVzc2FnZVNjb3BlZChUaHJl
YWQmIHRocmVhZCwgY29uc3QgVGhyZWFkTWVzc2FnZSYgbWVzc2FnZSkKK3N0YXRpYyBNZXNzYWdl
U3RhdHVzIHNlbmRNZXNzYWdlU2lnbmFsKFRocmVhZCYgdGhyZWFkLCBjb25zdCBUaHJlYWRNZXNz
YWdlJiBtZXNzYWdlKQogewogICAgIGNvbnN0ZXhwciBTaWduYWwgc2lnbmFsID0gU2lnbmFsOjpV
c3I7CiAgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2U7CiAgICAgc3RkOjpjYWxsX29uY2Uo
b25jZSwgW10gewotICAgICAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihzaWduYWwsIFtdIChpbnQs
IHNpZ2luZm9fdCogaW5mbywgdm9pZCogdWFwKSB7CisgICAgICAgIGluc3RhbGxTaWduYWxIYW5k
bGVyKHNpZ25hbCwgW10gKFNpZ25hbCwgU2lnSW5mbyYsIFBsYXRmb3JtUmVnaXN0ZXJzJiBjb250
ZXh0KSB7CiAgICAgICAgICAgICBUaHJlYWQqIHRocmVhZCA9IFRocmVhZDo6Y3VycmVudE1heUJl
TnVsbCgpOwogCiAgICAgICAgICAgICBpZiAoIXRocmVhZCkgewpAQCAtOTgsNyArMTAxLDcgQEAg
TWVzc2FnZVN0YXR1cyBzZW5kTWVzc2FnZVNjb3BlZChUaHJlYWQmIHRocmVhZCwgY29uc3QgVGhy
ZWFkTWVzc2FnZSYgbWVzc2FnZSkKIAogICAgICAgICAgICAgLy8gTm9kZSBzaG91bGQgYmUgZGVs
ZXRlZCBpbiB0aGUgc2VuZGVyIHRocmVhZC4gRGVsZXRpbmcgTm9kZXMgaW4gc2lnbmFsIGhhbmRs
ZXIgY2F1c2VzIGRlYWQgbG9jay4KICAgICAgICAgICAgIHRocmVhZC0+dGhyZWFkTWVzc2FnZXMo
KS5jb25zdW1lQWxsV2l0aE5vZGUoWyZdIChUaHJlYWRNZXNzYWdlRGF0YSogZGF0YSwgTm9kZSog
bm9kZSkgewotICAgICAgICAgICAgICAgIGRhdGEtPm1lc3NhZ2UoaW5mbywgc3RhdGljX2Nhc3Q8
dWNvbnRleHRfdCo+KHVhcCkpOworICAgICAgICAgICAgICAgIGRhdGEtPm1lc3NhZ2UoY29udGV4
dCk7CiAgICAgICAgICAgICAgICAgLy8gQnkgc2V0dGluZyByYW4gdmFyaWFibGUsICgxKSB0aGUg
c2VuZGVyIGFja25vd2xlZGdlcyB0aGUgY29tcGxldGlvbiBhbmQKICAgICAgICAgICAgICAgICAv
LyAoMikgZ2V0cyB0aGUgTm9kZSB0byBiZSBkZWxldGVkLgogICAgICAgICAgICAgICAgIGRhdGEt
PnJhbi5zdG9yZShub2RlKTsKQEAgLTE1Niw2ICsxNTksNjAgQEAgTWVzc2FnZVN0YXR1cyBzZW5k
TWVzc2FnZVNjb3BlZChUaHJlYWQmIHRocmVhZCwgY29uc3QgVGhyZWFkTWVzc2FnZSYgbWVzc2Fn
ZSkKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCisjaWYgSEFWRShNQUNI
X0VYQ0VQVElPTlMpCitzdGF0aWMgTWVzc2FnZVN0YXR1cyBzZW5kTWVzc2FnZU1hY2goVGhyZWFk
JiB0aHJlYWQsIGNvbnN0IFRocmVhZE1lc3NhZ2UmIG1lc3NhZ2UpCit7CisgICAgc3RhdGljIFN0
YXRpY0xvY2sgbWVzc2FnZUxvY2s7CisgICAgYXV0byBsb2NraG9sZGVyID0gaG9sZExvY2sobWVz
c2FnZUxvY2spOworCisgICAgYXV0byByZXN1bHQgPSB0aHJlYWQuc3VzcGVuZCgpOworICAgIGlm
ICghcmVzdWx0KQorICAgICAgICByZXR1cm4gTWVzc2FnZVN0YXR1czo6VGhyZWFkRXhpdGVkOwor
CisjaWYgQ1BVKFg4NikKKyAgICB1bnNpZ25lZCB1c2VyQ291bnQgPSBzaXplb2YocmVnaXN0ZXJz
KSAvIHNpemVvZihpbnQpOworICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSBpMzg2
X1RIUkVBRF9TVEFURTsKKyNlbGlmIENQVShYODZfNjQpCisgICAgdW5zaWduZWQgdXNlckNvdW50
ID0geDg2X1RIUkVBRF9TVEFURTY0X0NPVU5UOworICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBm
bGF2b3IgPSB4ODZfVEhSRUFEX1NUQVRFNjQ7CisjZWxpZiBDUFUoQVJNKQorICAgIHVuc2lnbmVk
IHVzZXJDb3VudCA9IEFSTV9USFJFQURfU1RBVEVfQ09VTlQ7CisgICAgdGhyZWFkX3N0YXRlX2Zs
YXZvcl90IGZsYXZvciA9IEFSTV9USFJFQURfU1RBVEU7CisjZWxpZiBDUFUoQVJNNjQpCisgICAg
dW5zaWduZWQgdXNlckNvdW50ID0gQVJNX1RIUkVBRF9TVEFURTY0X0NPVU5UOworICAgIHRocmVh
ZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSBBUk1fVEhSRUFEX1NUQVRFNjQ7CisjZWxzZQorI2Vy
cm9yIFVua25vd24gQXJjaGl0ZWN0dXJlCisjZW5kaWYKKworICAgIFBsYXRmb3JtUmVnaXN0ZXJz
IHJlZ2lzdGVyczsKKyAgICB0aHJlYWRfc3RhdGVfdCBzdGF0ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dGhyZWFkX3N0YXRlX3Q+KCZyZWdpc3RlcnMpOworICAgIHRocmVhZF9nZXRfc3RhdGUodGhyZWFk
Lm1hY2hUaHJlYWQoKSwgZmxhdm9yLCBzdGF0ZSwgJnVzZXJDb3VudCk7CisKKyAgICBtZXNzYWdl
KHJlZ2lzdGVycyk7CisKKyAgICB0aHJlYWRfc2V0X3N0YXRlKHRocmVhZC5tYWNoVGhyZWFkKCks
IGZsYXZvciwgKHRocmVhZF9zdGF0ZV90KSZyZWdpc3RlcnMsIHVzZXJDb3VudCk7CisKKyAgICB0
aHJlYWQucmVzdW1lKCk7CisgICAgcmV0dXJuIE1lc3NhZ2VTdGF0dXM6Ok1lc3NhZ2VSYW47Cit9
CisKK3N0YXRpYyBib29sIHVzZU1hY2ggPSBmYWxzZTsKK3ZvaWQgZGVsaXZlck1lc3NhZ2VzVXNp
bmdNYWNoKCkgeyB1c2VNYWNoID0gdHJ1ZTsgfQorCisjZW5kaWYgLy8gSEFWRShNQUNIX0VYQ0VQ
VElPTlMpCisKK01lc3NhZ2VTdGF0dXMgc2VuZE1lc3NhZ2VTY29wZWQoVGhyZWFkJiB0aHJlYWQs
IGNvbnN0IFRocmVhZE1lc3NhZ2UmIG1lc3NhZ2UpCit7CisjaWYgSEFWRShNQUNIX0VYQ0VQVElP
TlMpCisgICAgaWYgKHVzZU1hY2gpCisgICAgICAgIHJldHVybiBzZW5kTWVzc2FnZU1hY2godGhy
ZWFkLCBtZXNzYWdlKTsKKyNlbmRpZgorICAgIHJldHVybiBzZW5kTWVzc2FnZVNpZ25hbCh0aHJl
YWQsIG1lc3NhZ2UpOworICAgIHJldHVybiBNZXNzYWdlU3RhdHVzOjpUaHJlYWRFeGl0ZWQ7Cit9
CisKKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKICNlbmRpZiAvLyBVU0UoUFRIUkVBRFMpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRNZXNzYWdlLmggYi9Tb3VyY2UvV1RGL3d0Zi9U
aHJlYWRNZXNzYWdlLmgKaW5kZXggOWFlNTNmMjljZjdlOGZiMDBlZjkyMTFkMTZjZTJjZGVkNjAz
ZWMxYi4uMzAwNDcyYjNlNzFjNDJlYzg5ODc0YTNkZTBmZjM3NjFjYTk2OTEwYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1Ro
cmVhZE1lc3NhZ2UuaApAQCAtMzYsNyArMzYsNyBAQCBuYW1lc3BhY2UgV1RGIHsKIHZvaWQgaW5p
dGlhbGl6ZVRocmVhZE1lc3NhZ2VzKCk7CiAKIGNsYXNzIFRocmVhZE1lc3NhZ2VEYXRhOwotdXNp
bmcgVGhyZWFkTWVzc2FnZSA9IFNjb3BlZExhbWJkYTx2b2lkKHNpZ2luZm9fdCosIHVjb250ZXh0
X3QqKT47Cit1c2luZyBUaHJlYWRNZXNzYWdlID0gU2NvcGVkTGFtYmRhPHZvaWQoUGxhdGZvcm1S
ZWdpc3RlcnMmKT47CiAKIGVudW0gY2xhc3MgTWVzc2FnZVN0YXR1cyB7CiAgICAgTWVzc2FnZVJh
biwKQEAgLTUxLDEwICs1MSwxNCBAQCBNZXNzYWdlU3RhdHVzIHNlbmRNZXNzYWdlU2NvcGVkKFRo
cmVhZCYsIGNvbnN0IFRocmVhZE1lc3NhZ2UmKTsKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
CiBNZXNzYWdlU3RhdHVzIHNlbmRNZXNzYWdlKFRocmVhZCYgdGFyZ2V0VGhyZWFkLCBjb25zdCBG
dW5jdG9yJiBmdW5jKQogewotICAgIGF1dG8gbGFtYmRhID0gc2NvcGVkTGFtYmRhUmVmPHZvaWQo
c2lnaW5mb190KiwgdWNvbnRleHRfdCopPihmdW5jKTsKKyAgICBhdXRvIGxhbWJkYSA9IHNjb3Bl
ZExhbWJkYVJlZjx2b2lkKFBsYXRmb3JtUmVnaXN0ZXJzJik+KGZ1bmMpOwogICAgIHJldHVybiBz
ZW5kTWVzc2FnZVNjb3BlZCh0YXJnZXRUaHJlYWQsIGxhbWJkYSk7CiB9CiAKKyNpZiBIQVZFKE1B
Q0hfRVhDRVBUSU9OUykKK3ZvaWQgZGVsaXZlck1lc3NhZ2VzVXNpbmdNYWNoKCk7CisjZW5kaWYK
KwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6c2VuZE1lc3NhZ2U7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGlu
Zy5oCmluZGV4IGQyZTUzNmRmN2E4Njk2ZDhlNmI5NWJhNDNlMTczZDNiNTUwYmYxNmEuLjM1MTRl
OGMwOWYwZmM5NGQ1MzRiZTJmM2I2ZTdjNDk1MGUwYmNmMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL1RocmVhZGluZy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5oCkBAIC0x
MzgsNiArMTM4LDEwIEBAIHB1YmxpYzoKIAogI2lmIFVTRShQVEhSRUFEUykKICAgICBMb2NrbGVz
c0JhZzxUaHJlYWRNZXNzYWdlRGF0YSo+JiB0aHJlYWRNZXNzYWdlcygpIHsgcmV0dXJuIG1fdGhy
ZWFkTWVzc2FnZXM7IH0KKworI2lmIE9TKERBUldJTikKKyAgICBtYWNoX3BvcnRfdCBtYWNoVGhy
ZWFkKCkgeyByZXR1cm4gbV9wbGF0Zm9ybVRocmVhZDsgfQorI2VuZGlmCiAjZW5kaWYKIAogcHJv
dGVjdGVkOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvbWFjL01hY2hFeGNlcHRpb25zLmRl
ZnMgYi9Tb3VyY2UvV1RGL3d0Zi9tYWMvTWFjaEV4Y2VwdGlvbnMuZGVmcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40
MjA1NzQyYTRlZDUwMGY4MDY0ZmVlYjQ5NTVhN2M5NzBkOTlhZjBiCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dURi93dGYvbWFjL01hY2hFeGNlcHRpb25zLmRlZnMKQEAgLTAsMCArMSwyNiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
IDxtYWNoL21hY2hfZXhjLmRlZnM+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90aHJlYWRz
L1NpZ25hbHMuY3BwIGIvU291cmNlL1dURi93dGYvdGhyZWFkcy9TaWduYWxzLmNwcAppbmRleCA4
NTViMjhiMzE3MjE3MjdjZjFmNDMxYTkxOGEyNTFkYzJlNmEzZGZjLi4wNzIzODk3ZDhhYTU1NTA4
ZTQ5NDdhNTI2MmViZDc3MTI1MWJlMTI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90aHJl
YWRzL1NpZ25hbHMuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RocmVhZHMvU2lnbmFscy5jcHAK
QEAgLTI4LDIxICsyOCwyNjIgQEAKIAogI2lmIFVTRShQVEhSRUFEUykKIAorI2lmIEhBVkUoTUFD
SF9FWENFUFRJT05TKQorZXh0ZXJuICJDIiB7CisjaW5jbHVkZSAiTWFjaEV4Y2VwdGlvbnNTZXJ2
ZXIuaCIKK307CisjZW5kaWYKKwogI2luY2x1ZGUgPGNzdGRpbz4KICNpbmNsdWRlIDxtdXRleD4K
ICNpbmNsdWRlIDxzaWduYWwuaD4KKworI2lmIEhBVkUoTUFDSF9FWENFUFRJT05TKQorI2luY2x1
ZGUgPG1hY2gvbWFjaC5oPgorI2luY2x1ZGUgPG1hY2gvdGhyZWFkX2FjdC5oPgorI2VuZGlmCisK
ICNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisjaW5j
bHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTG9ja2xlc3NCYWcuaD4KICNpbmNs
dWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkTWVzc2FnZS5o
PgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKwogCiBuYW1lc3BhY2UgV1RGIHsKIAorICAg
IAogc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxMb2NrbGVzc0JhZzxTaWduYWxIYW5kbGVyPj4g
aGFuZGxlcnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihTaWduYWw6Ok51bWJlck9mU2lnbmFscyldID0g
eyB9Owotc3RhdGljIHN0cnVjdCBzaWdhY3Rpb24gb2xkQWN0aW9uc1tzdGF0aWNfY2FzdDxzaXpl
X3Q+KFNpZ25hbDo6TnVtYmVyT2ZTaWduYWxzKV07CiBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5p
dGlhbGl6ZU9uY2VGbGFnc1tzdGF0aWNfY2FzdDxzaXplX3Q+KFNpZ25hbDo6TnVtYmVyT2ZTaWdu
YWxzKV07CitzdGF0aWMgc3RydWN0IHNpZ2FjdGlvbiBvbGRBY3Rpb25zW3N0YXRpY19jYXN0PHNp
emVfdD4oU2lnbmFsOjpOdW1iZXJPZlNpZ25hbHMpXTsKKworI2lmIEhBVkUoTUFDSF9FWENFUFRJ
T05TKQorc3RhdGljIG1hY2hfcG9ydF90IGV4Y2VwdGlvblBvcnQ7CitzdGF0aWMgY29uc3RleHBy
IHNpemVfdCBtYXhNZXNzYWdlU2l6ZSA9IDEgKiBLQjsKKworc3RhdGljIHZvaWQgc3RhcnRNYWNo
RXhjZXB0aW9uSGFuZGxlclRocmVhZCgpCit7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9u
Y2U7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZSwgW10geworICAgICAgICBpZiAobWFjaF9wb3J0
X2FsbG9jYXRlKG1hY2hfdGFza19zZWxmKCksIE1BQ0hfUE9SVF9SSUdIVF9SRUNFSVZFLCAmZXhj
ZXB0aW9uUG9ydCkgIT0gS0VSTl9TVUNDRVNTKQorICAgICAgICAgICAgQ1JBU0goKTsKKworICAg
ICAgICBpZiAobWFjaF9wb3J0X2luc2VydF9yaWdodChtYWNoX3Rhc2tfc2VsZigpLCBleGNlcHRp
b25Qb3J0LCBleGNlcHRpb25Qb3J0LCBNQUNIX01TR19UWVBFX01BS0VfU0VORCkhPSBLRVJOX1NV
Q0NFU1MpCisgICAgICAgICAgICBDUkFTSCgpOworCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNo
b3VsZCB1c2UgYSBkaXNwYXRjaCBxdWV1ZS4KKyAgICAgICAgKHZvaWQpVGhyZWFkOjpjcmVhdGUo
CisgICAgICAgICAgICAiV1RGIE1hY2ggRXhjZXB0aW9uIFRocmVhZCIsIFtdICgpIHsKKyAgICAg
ICAgICAgICAgICB1bmlvbiBNZXNzYWdlIHsKKyAgICAgICAgICAgICAgICAgICAgbWFjaF9tc2df
aGVhZGVyX3QgaGVhZGVyOworICAgICAgICAgICAgICAgICAgICBjaGFyIGRhdGFbbWF4TWVzc2Fn
ZVNpemVdOworICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgTWVzc2FnZSBtZXNz
YWdlSGVhZGVySW47CisgICAgICAgICAgICAgICAgTWVzc2FnZSBtZXNzYWdlSGVhZGVyT3V0Owor
CisgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgICAgICAgICAga2Vy
bl9yZXR1cm5fdCBtZXNzYWdlUmVzdWx0ID0gbWFjaF9tc2coJm1lc3NhZ2VIZWFkZXJJbi5oZWFk
ZXIsIE1BQ0hfUkNWX01TRywgMCwgbWF4TWVzc2FnZVNpemUsIGV4Y2VwdGlvblBvcnQsIE1BQ0hf
TVNHX1RJTUVPVVRfTk9ORSwgTUFDSF9QT1JUX05VTEwpOworICAgICAgICAgICAgICAgICAgICBp
ZiAobWVzc2FnZVJlc3VsdCA9PSBLRVJOX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICghbWFjaF9leGNfc2VydmVyKCZtZXNzYWdlSGVhZGVySW4uaGVhZGVyLCAmbWVzc2Fn
ZUhlYWRlck91dC5oZWFkZXIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENSQVNIKCk7
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VSZXN1bHQgPSBtYWNoX21zZygmbWVz
c2FnZUhlYWRlck91dC5oZWFkZXIsIE1BQ0hfU0VORF9NU0csIG1lc3NhZ2VIZWFkZXJPdXQuaGVh
ZGVyLm1zZ2hfc2l6ZSwgMCwgbWVzc2FnZUhlYWRlck91dC5oZWFkZXIubXNnaF9sb2NhbF9wb3J0
LCAwLCBNQUNIX1BPUlRfTlVMTCk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChtZXNzYWdlUmVzdWx0ID09IEtFUk5fU1VDQ0VTUyk7CisgICAgICAgICAgICAgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJGYWlsZWQgdG8gcmVj
ZWl2ZSBtYWNoIG1lc3NhZ2UgZHVlIHRvICIsIG1hY2hfZXJyb3Jfc3RyaW5nKG1lc3NhZ2VSZXN1
bHQpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0pLmxlYWtSZWYoKTsKKyAgICB9KTsK
K30KKworc3RhdGljIFNpZ25hbCBmcm9tTWFjaEV4Y2VwdGlvbihleGNlcHRpb25fdHlwZV90IHR5
cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBFWENfQkFEX0FDQ0VTUzogcmV0
dXJuIFNpZ25hbDo6U2VnVjsKKyAgICBjYXNlIEVYQ19CQURfSU5TVFJVQ1RJT046IHJldHVybiBT
aWduYWw6OklsbDsKKyAgICBjYXNlIEVYQ19CUkVBS1BPSU5UOiByZXR1cm4gU2lnbmFsOjpUcmFw
OworICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gU2lnbmFsOjpVbmtub3du
OworfQorCitzdGF0aWMgZXhjZXB0aW9uX21hc2tfdCB0b01hY2hNYXNrKFNpZ25hbCBzaWduYWwp
Cit7CisgICAgc3dpdGNoIChzaWduYWwpIHsKKyAgICBjYXNlIFNpZ25hbDo6U2VnVjogcmV0dXJu
IEVYQ19NQVNLX0JBRF9BQ0NFU1M7CisgICAgY2FzZSBTaWduYWw6OklsbDogcmV0dXJuIEVYQ19N
QVNLX0JBRF9JTlNUUlVDVElPTjsKKyAgICBjYXNlIFNpZ25hbDo6VHJhcDogcmV0dXJuIEVYQ19N
QVNLX0JSRUFLUE9JTlQ7CisgICAgZGVmYXVsdDogYnJlYWs7CisgICAgfQorICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2V4dGVybiAiQyIgeworCisvLyBXZSBuZWVkIHRv
IGltcGxlbWVudCBzdHVicyBmb3IgY2F0Y2hfbWFjaF9leGNlcHRpb25fcmFpc2UgYW5kIGNhdGNo
X21hY2hfZXhjZXB0aW9uX3JhaXNlX3N0YXRlX2lkZW50aXR5LgorLy8gVGhlIE1pRyBnZW5lcmF0
ZWQgZmlsZSB3aWxsIGZhaWwgdG8gbGluayBvdGhlcndpc2UsIGV2ZW4gdGhvdWdoIHdlIGRvbid0
IHVzZSB0aGUgZnVuY3Rpb25zLiBPbmx5IHRoZQorLy8gY2F0Y2hfbWFjaF9leGNlcHRpb25fcmFp
c2Vfc3RhdGUgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBiZWNhdXNlIHdlIHBhc3MgRVhDRVBU
SU9OX1NUQVRFIHRvCisvLyB0aHJlYWRfc2V0X2V4Y2VwdGlvbl9wb3J0cy4KK2tlcm5fcmV0dXJu
X3QgY2F0Y2hfbWFjaF9leGNlcHRpb25fcmFpc2UobWFjaF9wb3J0X3QsIG1hY2hfcG9ydF90LCBt
YWNoX3BvcnRfdCwgZXhjZXB0aW9uX3R5cGVfdCwgbWFjaF9leGNlcHRpb25fZGF0YV90LCBtYWNo
X21zZ190eXBlX251bWJlcl90KQoreworICAgIGRhdGFMb2dMbigiV2Ugc2hvdWxkIG5vdCBoYXZl
IGNhbGxlZCBjYXRjaF9leGNlcHRpb25fcmFpc2UoKSwgcGxlYXNlIGZpbGUgYSBidWcgYXQgYnVn
cy53ZWJraXQub3JnIik7CisgICAgcmV0dXJuIEtFUk5fRkFJTFVSRTsKK30KKwora2Vybl9yZXR1
cm5fdCBjYXRjaF9tYWNoX2V4Y2VwdGlvbl9yYWlzZV9zdGF0ZV9pZGVudGl0eShtYWNoX3BvcnRf
dCwgbWFjaF9wb3J0X3QsIG1hY2hfcG9ydF90LCBleGNlcHRpb25fdHlwZV90LCBtYWNoX2V4Y2Vw
dGlvbl9kYXRhX3QsIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QsIGludCosIHRocmVhZF9zdGF0ZV90
LCBtYWNoX21zZ190eXBlX251bWJlcl90LCB0aHJlYWRfc3RhdGVfdCwgIG1hY2hfbXNnX3R5cGVf
bnVtYmVyX3QqKQoreworICAgIGRhdGFMb2dMbigiV2Ugc2hvdWxkIG5vdCBoYXZlIGNhbGxlZCBj
YXRjaF9tYWNoX2V4Y2VwdGlvbl9yYWlzZV9zdGF0ZV9pZGVudGl0eSwgcGxlYXNlIGZpbGUgYSBi
dWcgYXQgYnVncy53ZWJraXQub3JnIik7CisgICAgcmV0dXJuIEtFUk5fRkFJTFVSRTsKK30KKwor
a2Vybl9yZXR1cm5fdCBjYXRjaF9tYWNoX2V4Y2VwdGlvbl9yYWlzZV9zdGF0ZSgKKyAgICBtYWNo
X3BvcnRfdCBwb3J0LAorICAgIGV4Y2VwdGlvbl90eXBlX3QgZXhjZXB0aW9uVHlwZSwKKyAgICBj
b25zdCBtYWNoX2V4Y2VwdGlvbl9kYXRhX3QgZXhjZXB0aW9uRGF0YSwKKyAgICBtYWNoX21zZ190
eXBlX251bWJlcl90IGRhdGFDb3VudCwKKyAgICBpbnQqIHN0YXRlRmxhdm9yLAorICAgIGNvbnN0
IHRocmVhZF9zdGF0ZV90IGluU3RhdGUsCisgICAgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCBpblN0
YXRlQ291bnQsCisgICAgdGhyZWFkX3N0YXRlX3Qgb3V0U3RhdGUsCisgICAgbWFjaF9tc2dfdHlw
ZV9udW1iZXJfdCogb3V0U3RhdGVDb3VudCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChwb3J0ID09
IGV4Y2VwdGlvblBvcnQpOworICAgIFNpZ25hbCBzaWduYWwgPSBmcm9tTWFjaEV4Y2VwdGlvbihl
eGNlcHRpb25UeXBlKTsKKyAgICBkYXRhTG9nTG4oInJlY2VpdmVkU2lnbmFsICIsIGV4Y2VwdGlv
blR5cGUpOworICAgIGRhdGFMb2dMbigiVGhyZWFkOiAiLCBleGNlcHRpb25EYXRhWzBdKTsKKyAg
ICBSRUxFQVNFX0FTU0VSVChzaWduYWwgIT0gU2lnbmFsOjpVbmtub3duKTsKKworICAgIG1lbWNw
eShvdXRTdGF0ZSwgaW5TdGF0ZSwgaW5TdGF0ZUNvdW50ICogc2l6ZW9mKGluU3RhdGVbMF0pKTsK
KyAgICAqb3V0U3RhdGVDb3VudCA9IGluU3RhdGVDb3VudDsKKworI2lmIENQVShYODZfNjQpCisg
ICAgUkVMRUFTRV9BU1NFUlQoKnN0YXRlRmxhdm9yID09IHg4Nl9USFJFQURfU1RBVEUpOworICAg
IFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMgPSByZWludGVycHJldF9jYXN0PHg4Nl90aHJl
YWRfc3RhdGVfdCo+KG91dFN0YXRlKS0+dXRzLnRzNjQ7CisjZWxpZiBDUFUoWDg2KQorICAgIFJF
TEVBU0VfQVNTRVJUKCpzdGF0ZUZsYXZvciA9PSB4ODZfVEhSRUFEX1NUQVRFKTsKKyAgICBQbGF0
Zm9ybVJlZ2lzdGVycyYgcmVnaXN0ZXJzID0gcmVpbnRlcnByZXRfY2FzdDx4ODZfdGhyZWFkX3N0
YXRlX3QqPihvdXRTdGF0ZSktPnV0cy50czMyOworI2VsaWYgQ1BVKEFSTTY0KQorICAgIFJFTEVB
U0VfQVNTRVJUKCpzdGF0ZUZsYXZvciA9PSBBUk1fVEhSRUFEX1NUQVRFKTsKKyAgICBQbGF0Zm9y
bVJlZ2lzdGVycyYgcmVnaXN0ZXJzID0gcmVpbnRlcnByZXRfY2FzdDxhcm1fdW5pZmllZF90aHJl
YWRfc3RhdGUqPihvdXRTdGF0ZSktPnRzXzY0OworI2VsaWYgQ1BVKEFSTSkKKyAgICBSRUxFQVNF
X0FTU0VSVCgqc3RhdGVGbGF2b3IgPT0gQVJNX1RIUkVBRF9TVEFURSk7CisgICAgUGxhdGZvcm1S
ZWdpc3RlcnMmIHJlZ2lzdGVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8YXJtX3VuaWZpZWRfdGhyZWFk
X3N0YXRlKj4ob3V0U3RhdGUpLT50c18zMjsKKyNlbmRpZgorCisgICAgU2lnSW5mbyBpbmZvOwor
ICAgIGlmIChzaWduYWwgPT0gU2lnbmFsOjpTZWdWKSB7CisgICAgICAgIEFTU0VSVF9VTlVTRUQo
ZGF0YUNvdW50LCBkYXRhQ291bnQgPT0gMik7CisgICAgICAgIGluZm8uZmF1bHRpbmdBZGRyZXNz
ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZXhjZXB0aW9uRGF0YVsxXSk7CisgICAgfQorCisg
ICAgYm9vbCBkaWRIYW5kbGUgPSBmYWxzZTsKKyAgICBoYW5kbGVyc1tzdGF0aWNfY2FzdDxzaXpl
X3Q+KHNpZ25hbCldLT5pdGVyYXRlKFsmXSAoY29uc3QgU2lnbmFsSGFuZGxlciYgaGFuZGxlcikg
eworICAgICAgICBTaWduYWxBY3Rpb24gaGFuZGxlclJlc3VsdCA9IGhhbmRsZXIoc2lnbmFsLCBp
bmZvLCByZWdpc3RlcnMpOworICAgICAgICBkYXRhTG9nTG4oc3RhdGljX2Nhc3Q8aW50PihoYW5k
bGVyUmVzdWx0KSk7CisgICAgICAgIHN3aXRjaCAoaGFuZGxlclJlc3VsdCkgeworICAgICAgICBj
YXNlIFNpZ25hbEFjdGlvbjo6SGFuZGxlZDoKKyAgICAgICAgICAgIGRpZEhhbmRsZSA9IHRydWU7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgfSk7CisKKyAgICBpZiAoZGlkSGFuZGxlKQorICAgICAgICByZXR1
cm4gS0VSTl9TVUNDRVNTOworICAgIHJldHVybiBLRVJOX0ZBSUxVUkU7Cit9CisKK307CisKK3N0
YXRpYyBib29sIHVzZU1hY2ggeyBmYWxzZSB9Owordm9pZCBoYW5kbGVTaWduYWxzV2l0aE1hY2go
KQoreworICAgIGRlbGl2ZXJNZXNzYWdlc1VzaW5nTWFjaCgpOworICAgIHVzZU1hY2ggPSB0cnVl
OworfQorCisKK3N0YXRpYyBTdGF0aWNMb2NrIHRocmVhZExvY2s7CitleGNlcHRpb25fbWFza190
IGFjdGl2ZUV4Y2VwdGlvbnMgeyAwIH07CisKK2lubGluZSB2b2lkIHNldEV4Y2VwdGlvblBvcnRz
KGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgVGhyZWFkKiB0aHJlYWQpCit7CisgICAga2Vybl9yZXR1
cm5fdCByZXN1bHQgPSB0aHJlYWRfc2V0X2V4Y2VwdGlvbl9wb3J0cyh0aHJlYWQtPm1hY2hUaHJl
YWQoKSwgYWN0aXZlRXhjZXB0aW9ucywgZXhjZXB0aW9uUG9ydCwgRVhDRVBUSU9OX1NUQVRFIHwg
TUFDSF9FWENFUFRJT05fQ09ERVMsIE1BQ0hJTkVfVEhSRUFEX1NUQVRFKTsKKyAgICBpZiAocmVz
dWx0ICE9IEtFUk5fU1VDQ0VTUykgeworICAgICAgICBkYXRhTG9nTG4oInRocmVhZCBzZXQgcG9y
dCBmYWlsZWQgZHVlIHRvICIsIG1hY2hfZXJyb3Jfc3RyaW5nKHJlc3VsdCkpOworICAgICAgICBD
UkFTSCgpOworICAgIH0KK30KKworaW5saW5lIEhhc2hTZXQ8VGhyZWFkKj4mIGFjdGl2ZVRocmVh
ZHMoY29uc3QgQWJzdHJhY3RMb2NrZXImKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxI
YXNoU2V0PFRocmVhZCo+PiBhY3RpdmVUaHJlYWRzOworICAgIHJldHVybiBhY3RpdmVUaHJlYWRz
OworfQorCit2b2lkIHJlZ2lzdGVyVGhyZWFkKFRocmVhZCogdGhyZWFkKQoreworICAgIGF1dG8g
bG9ja2VyID0gaG9sZExvY2sodGhyZWFkTG9jayk7CisgICAgYXV0byByZXN1bHQgPSBhY3RpdmVU
aHJlYWRzKGxvY2tlcikuYWRkKHRocmVhZCk7CisKKyAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkp
CisgICAgICAgIHNldEV4Y2VwdGlvblBvcnRzKGxvY2tlciwgdGhyZWFkKTsKK30KKwordm9pZCBy
ZW1vdmVUaHJlYWQoVGhyZWFkKiB0aHJlYWQpCit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9j
ayh0aHJlYWRMb2NrKTsKKyAgICBhY3RpdmVUaHJlYWRzKGxvY2tlcikucmVtb3ZlKHRocmVhZCk7
Cit9CiAKLXN0YXRpYyB2b2lkIGpzY1NpZ25hbEhhbmRsZXIoaW50IHNpZywgc2lnaW5mb190KiBp
bmZvLCB2b2lkKiBtY29udGV4dCkKKyNlbmRpZiAvLyBIQVZFKE1BQ0hfRVhDRVBUSU9OUykKKwor
c3RhdGljIHZvaWQganNjU2lnbmFsSGFuZGxlcihpbnQsIHNpZ2luZm9fdCosIHZvaWQqKTsKKwor
dm9pZCBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWwgc2lnbmFsLCBTaWduYWxIYW5kbGVyJiYg
aGFuZGxlcikKK3sKKyAgICBBU1NFUlQoc2lnbmFsIDwgU2lnbmFsOjpVbmtub3duKTsKKyAgICBp
ZiAoc2lnbmFsID09IFNpZ25hbDo6QnVzICYmICF1c2VNYWNoKQorICAgICAgICByZXR1cm47Cisg
ICAgQVNTRVJUKCF1c2VNYWNoIHx8IHNpZ25hbCAhPSBTaWduYWw6OlVzcik7CisKKyNpZiBIQVZF
KE1BQ0hfRVhDRVBUSU9OUykKKyAgICBpZiAodXNlTWFjaCkKKyAgICAgICAgc3RhcnRNYWNoRXhj
ZXB0aW9uSGFuZGxlclRocmVhZCgpOworI2VuZGlmCisKKyAgICBzdGQ6OmNhbGxfb25jZShpbml0
aWFsaXplT25jZUZsYWdzW3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0sIFsmXSB7CisgICAg
ICAgIGhhbmRsZXJzW3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0uY29uc3RydWN0KCk7CisK
KyAgICAgICAgaWYgKCF1c2VNYWNoKSB7CisgICAgICAgICAgICBzdHJ1Y3Qgc2lnYWN0aW9uIGFj
dGlvbjsKKyAgICAgICAgICAgIGFjdGlvbi5zYV9zaWdhY3Rpb24gPSBqc2NTaWduYWxIYW5kbGVy
OworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBzaWdmaWxsc2V0KCZhY3Rpb24uc2FfbWFzayk7
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmVzdWx0KTsKKyAgICAgICAgICAgIGFjdGlv
bi5zYV9mbGFncyA9IFNBX1NJR0lORk87CisgICAgICAgICAgICByZXN1bHQgPSBzaWdhY3Rpb24o
dG9TeXN0ZW1TaWduYWwoc2lnbmFsKSwgJmFjdGlvbiwgJm9sZEFjdGlvbnNbc3RhdGljX2Nhc3Q8
c2l6ZV90PihzaWduYWwpXSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmVzdWx0KTsK
KyAgICAgICAgfQorCisgICAgfSk7CisKKyAgICBoYW5kbGVyc1tzdGF0aWNfY2FzdDxzaXplX3Q+
KHNpZ25hbCldLT5hZGQoV1RGTW92ZShoYW5kbGVyKSk7CisKKyNpZiBIQVZFKE1BQ0hfRVhDRVBU
SU9OUykKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHRocmVhZExvY2spOworICAgIGlmICh1
c2VNYWNoKSB7CisgICAgICAgIGFjdGl2ZUV4Y2VwdGlvbnMgfD0gdG9NYWNoTWFzayhzaWduYWwp
OworCisgICAgICAgIGZvciAoVGhyZWFkKiB0aHJlYWQgOiBhY3RpdmVUaHJlYWRzKGxvY2tlcikp
CisgICAgICAgICAgICBzZXRFeGNlcHRpb25Qb3J0cyhsb2NrZXIsIHRocmVhZCk7CisgICAgfQor
I2VuZGlmCit9CisKK3ZvaWQganNjU2lnbmFsSGFuZGxlcihpbnQgc2lnLCBzaWdpbmZvX3QqIGlu
Zm8sIHZvaWQqIHVjb250ZXh0KQogewogICAgIFNpZ25hbCBzaWduYWwgPSBmcm9tU3lzdGVtU2ln
bmFsKHNpZyk7CiAKQEAgLTYyLDEwICszMDMsMTYgQEAgc3RhdGljIHZvaWQganNjU2lnbmFsSGFu
ZGxlcihpbnQgc2lnLCBzaWdpbmZvX3QqIGluZm8sIHZvaWQqIG1jb250ZXh0KQogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCisgICAgU2lnSW5mbyBzaWdJbmZvOworICAgIGlmIChzaWduYWwgPT0g
U2lnbmFsOjpTZWdWIHx8IHNpZ25hbCA9PSBTaWduYWw6OkJ1cykKKyAgICAgICAgc2lnSW5mby5m
YXVsdGluZ0FkZHJlc3MgPSBpbmZvLT5zaV9hZGRyOworCisgICAgUGxhdGZvcm1SZWdpc3RlcnMm
IHJlZ2lzdGVycyA9IHJlZ2lzdGVyc0Zyb21VQ29udGV4dChyZWludGVycHJldF9jYXN0PHVjb250
ZXh0X3QqPih1Y29udGV4dCkpOworCiAgICAgYm9vbCBkaWRIYW5kbGUgPSBmYWxzZTsKICAgICBi
b29sIHJlc3RvcmVEZWZhdWx0SGFuZGxlciA9IGZhbHNlOwogICAgIGhhbmRsZXJzW3N0YXRpY19j
YXN0PHNpemVfdD4oc2lnbmFsKV0tPml0ZXJhdGUoWyZdIChjb25zdCBTaWduYWxIYW5kbGVyJiBo
YW5kbGVyKSB7Ci0gICAgICAgIHN3aXRjaCAoaGFuZGxlcihzaWcsIGluZm8sIG1jb250ZXh0KSkg
eworICAgICAgICBzd2l0Y2ggKGhhbmRsZXIoc2lnbmFsLCBzaWdJbmZvLCByZWdpc3RlcnMpKSB7
CiAgICAgICAgIGNhc2UgU2lnbmFsQWN0aW9uOjpIYW5kbGVkOgogICAgICAgICAgICAgZGlkSGFu
ZGxlID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtODUsMTMgKzMzMiwxMyBAQCBzdGF0
aWMgdm9pZCBqc2NTaWduYWxIYW5kbGVyKGludCBzaWcsIHNpZ2luZm9fdCogaW5mbywgdm9pZCog
bWNvbnRleHQpCiAgICAgc3RydWN0IHNpZ2FjdGlvbiYgb2xkQWN0aW9uID0gb2xkQWN0aW9uc1tz
dGF0aWNfY2FzdDxzaXplX3Q+KHNpZ25hbCldOwogICAgIGlmIChzaWduYWwgPT0gU2lnbmFsOjpV
c3IpIHsKICAgICAgICAgaWYgKG9sZEFjdGlvbi5zYV9zaWdhY3Rpb24pCi0gICAgICAgICAgICBv
bGRBY3Rpb24uc2Ffc2lnYWN0aW9uKHNpZywgaW5mbywgbWNvbnRleHQpOworICAgICAgICAgICAg
b2xkQWN0aW9uLnNhX3NpZ2FjdGlvbihzaWcsIGluZm8sIHVjb250ZXh0KTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAogICAgIGlmICghZGlkSGFuZGxlKSB7CiAgICAgICAgIGlmIChvbGRBY3Rp
b24uc2Ffc2lnYWN0aW9uKSB7Ci0gICAgICAgICAgICBvbGRBY3Rpb24uc2Ffc2lnYWN0aW9uKHNp
ZywgaW5mbywgbWNvbnRleHQpOworICAgICAgICAgICAgb2xkQWN0aW9uLnNhX3NpZ2FjdGlvbihz
aWcsIGluZm8sIHVjb250ZXh0KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBA
IC0xMDAsMjQgKzM0Nyw2IEBAIHN0YXRpYyB2b2lkIGpzY1NpZ25hbEhhbmRsZXIoaW50IHNpZywg
c2lnaW5mb190KiBpbmZvLCB2b2lkKiBtY29udGV4dCkKICAgICB9CiB9CiAKLXZvaWQgaW5zdGFs
bFNpZ25hbEhhbmRsZXIoU2lnbmFsIHNpZ25hbCwgU2lnbmFsSGFuZGxlciYmIGhhbmRsZXIpCi17
Ci0gICAgQVNTRVJUKHNpZ25hbCA8IFNpZ25hbDo6VW5rbm93bik7Ci0gICAgc3RkOjpjYWxsX29u
Y2UoaW5pdGlhbGl6ZU9uY2VGbGFnc1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNpZ25hbCldLCBbJl0g
ewotICAgICAgICBoYW5kbGVyc1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNpZ25hbCldLmNvbnN0cnVj
dCgpOwotCi0gICAgICAgIHN0cnVjdCBzaWdhY3Rpb24gYWN0aW9uOwotICAgICAgICBhY3Rpb24u
c2Ffc2lnYWN0aW9uID0ganNjU2lnbmFsSGFuZGxlcjsKLSAgICAgICAgYXV0byByZXN1bHQgPSBz
aWdmaWxsc2V0KCZhY3Rpb24uc2FfbWFzayk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFyZXN1
bHQpOwotICAgICAgICBhY3Rpb24uc2FfZmxhZ3MgPSBTQV9TSUdJTkZPOwotICAgICAgICByZXN1
bHQgPSBzaWdhY3Rpb24odG9TeXN0ZW1TaWduYWwoc2lnbmFsKSwgJmFjdGlvbiwgJm9sZEFjdGlv
bnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzaWduYWwpXSk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJU
KCFyZXN1bHQpOwotICAgIH0pOwotCi0gICAgaGFuZGxlcnNbc3RhdGljX2Nhc3Q8c2l6ZV90Pihz
aWduYWwpXS0+YWRkKFdURk1vdmUoaGFuZGxlcikpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXVEYK
IAogI2VuZGlmIC8vIFVTRShQVEhSRUFEUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3Ro
cmVhZHMvU2lnbmFscy5oIGIvU291cmNlL1dURi93dGYvdGhyZWFkcy9TaWduYWxzLmgKaW5kZXgg
MWU0ZWI0NmVhYTc3NGExZWU4OWY2ZmIyZGFlZjMzMjY4Y2U1Njc3OS4uYWNhNmIzNGY4MTZmMDE3
NjkzMDAzNmMxOGI4MjFjMjdhYmIwZTYwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGhy
ZWFkcy9TaWduYWxzLmgKKysrIGIvU291cmNlL1dURi93dGYvdGhyZWFkcy9TaWduYWxzLmgKQEAg
LTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgPHNpZ25hbC5oPgogI2luY2x1ZGUgPHd0Zi9GdW5j
dGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybVJlZ2lzdGVycy5oPgogCiBuYW1lc3BhY2Ug
V1RGIHsKIApAQCAtNzksNyArODAsMTEgQEAgZW51bSBjbGFzcyBTaWduYWxBY3Rpb24gewogICAg
IEZvcmNlRGVmYXVsdAogfTsKIAotdXNpbmcgU2lnbmFsSGFuZGxlciA9IEZ1bmN0aW9uPFNpZ25h
bEFjdGlvbihpbnQsIHNpZ2luZm9fdCosIHZvaWQqKT47CitzdHJ1Y3QgU2lnSW5mbyB7CisgICAg
dm9pZCogZmF1bHRpbmdBZGRyZXNzIHsgMCB9OworfTsKKwordXNpbmcgU2lnbmFsSGFuZGxlciA9
IEZ1bmN0aW9uPFNpZ25hbEFjdGlvbihTaWduYWwsIFNpZ0luZm8mLCBQbGF0Zm9ybVJlZ2lzdGVy
cyYpPjsKIAogLy8gQ2FsbCB0aGlzIG1ldGhvZCB3aGVuZXZlciB5b3Ugd2FudCB0byBpbnN0YWxs
IGEgc2lnbmFsIGhhbmRsZXIuIEl0J3Mgb2sgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIGxhemlseS4K
IC8vIE5vdGU6IFlvdXIgc2lnbmFsIGhhbmRsZXIgd2lsbCBiZSBjYWxsZWQgZXZlcnkgdGltZSB0
aGUgaGFuZGxlciBmb3IgdGhlIGRlc2lyZWQgc2lnbmFsIGlzIGNhbGxlZC4KQEAgLTg3LDkgKzky
LDE5IEBAIHVzaW5nIFNpZ25hbEhhbmRsZXIgPSBGdW5jdGlvbjxTaWduYWxBY3Rpb24oaW50LCBz
aWdpbmZvX3QqLCB2b2lkKik+OwogLy8gVGhpcyBmdW5jdGlvbiBpcyBjdXJyZW50bHkgYSBvbmUg
d2F5IHN0cmVldCBpLmUuIG9uY2UgaW5zdGFsbGVkLCBhIHNpZ25hbCBoYW5kbGVyIGNhbm5vdCBi
ZSB1bmluc3RhbGxlZC4KIHZvaWQgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFsLCBTaWduYWxI
YW5kbGVyJiYpOwogCisKKyNpZiBIQVZFKE1BQ0hfRVhDRVBUSU9OUykKK2NsYXNzIFRocmVhZDsK
K3ZvaWQgcmVnaXN0ZXJUaHJlYWQoVGhyZWFkKik7Cit2b2lkIHJlbW92ZVRocmVhZChUaHJlYWQq
KTsKKwordm9pZCBoYW5kbGVTaWduYWxzV2l0aE1hY2goKTsKKyNlbmRpZiAvLyBIQVZFKE1BQ0hf
RVhDRVBUSU9OUykKKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6U2lnbmFsOwor
dXNpbmcgV1RGOjpTaWdJbmZvOwogdXNpbmcgV1RGOjp0b1N5c3RlbVNpZ25hbDsKIHVzaW5nIFdU
Rjo6ZnJvbVN5c3RlbVNpZ25hbDsKIHVzaW5nIFdURjo6U2lnbmFsQWN0aW9uOwpkaWZmIC0tZ2l0
IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDE3ZjlmMDExMTMxMDJh
OGE0YjE3ZmNlNGFmMWQ5NWViODYwMDY5ZGIuLjZjZGE0ODQxMDY1Y2UwNGE5MWI4ZGI1ZTJiMjAy
OGM0MGVjMDVhNmYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxNy0wNS0xMSAgS2VpdGggTWlsbGVyICA8a2VpdGhf
bWlsbGVyQGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgTWFjaCBleGNlcHRpb25zIGluc3RlYWQg
b2Ygc2lnbmFscyB3aGVyZSBwb3NzaWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTcxODY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9UaHJlYWRNZXNzYWdl
cy5jcHA6CisgICAgICAgIChydW5UaHJlYWRNZXNzYWdlVGVzdCk6CisgICAgICAgIChURVNUKToK
KwogMjAxNy0wNS0wOSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJl
bW92ZSBzdXBwb3J0IGZvciBsZWdhY3kgTm90aWZpY2F0aW9ucwpkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVGhyZWFkTWVzc2FnZXMuY3BwIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XVEYvVGhyZWFkTWVzc2FnZXMuY3BwCmluZGV4IGQ2M2U5YmYxZTc1MDY4
YjZjMWE3ZTdlNmU4YjY3YzRlYjA1MTU4ODIuLmU2YTU3ODk0YmI1MTZmZTFjZTcxM2QwN2JmMThm
MDcwNmVmYTkzN2MgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1Ro
cmVhZE1lc3NhZ2VzLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9UaHJl
YWRNZXNzYWdlcy5jcHAKQEAgLTUwLDcgKzUwLDcgQEAgc3RhdGljIHZvaWQgcnVuVGhyZWFkTWVz
c2FnZVRlc3QodW5zaWduZWQgbnVtU2VuZGVycywgdW5zaWduZWQgbnVtTWVzc2FnZXMpCiAgICAg
Zm9yICh1bnNpZ25lZCBzZW5kZXJJRCA9IDA7IHNlbmRlcklEIDwgbnVtU2VuZGVyczsgKytzZW5k
ZXJJRCkgewogICAgICAgICBzZW5kZXJUaHJlYWRzW3NlbmRlcklEXSA9IFRocmVhZDo6Y3JlYXRl
KCJUaHJlYWRNZXNzYWdlIHNlbmRlciIsIFtzZW5kZXJJRCwgbnVtTWVzc2FnZXMsIHJlY2VpdmVy
VGhyZWFkLCAmbWVzc2FnZXNSdW4sICZoYW5kbGVyc1J1bl0gKCkgewogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bU1lc3NhZ2VzOyArK2kpIHsKLSAgICAgICAgICAgICAg
ICBhdXRvIHJlc3VsdCA9IHNlbmRNZXNzYWdlKCpyZWNlaXZlclRocmVhZC5nZXQoKSwgW3NlbmRl
cklELCAmaGFuZGxlcnNSdW5dIChzaWdpbmZvX3QqLCB1Y29udGV4dF90KikgeworICAgICAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gc2VuZE1lc3NhZ2UoKnJlY2VpdmVyVGhyZWFkLmdldCgpLCBb
c2VuZGVySUQsICZoYW5kbGVyc1J1bl0gKFBsYXRmb3JtUmVnaXN0ZXJzJikgewogICAgICAgICAg
ICAgICAgICAgICBoYW5kbGVyc1J1bltzZW5kZXJJRF0rKzsKICAgICAgICAgICAgICAgICB9KTsK
ICAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShyZXN1bHQgPT0gV1RGOjpNZXNzYWdlU3RhdHVz
OjpNZXNzYWdlUmFuKTsKQEAgLTk1LDcgKzk1LDcgQEAgcHVibGljOgogVEVTVChUaHJlYWRNZXNz
YWdlLCBTaWduYWxzV29ya09uRXhpdCkKIHsKICAgICBzdGF0aWMgYm9vbCBoYW5kbGVyUmFuID0g
ZmFsc2U7Ci0gICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFsOjpVc3IsIFtdIChpbnQsIHNp
Z2luZm9fdCosIHZvaWQqKSAtPiBTaWduYWxBY3Rpb24geworICAgIGluc3RhbGxTaWduYWxIYW5k
bGVyKFNpZ25hbDo6VXNyLCBbXSAoU2lnbmFsLCBTaWdJbmZvJiwgUGxhdGZvcm1SZWdpc3RlcnMm
KSAtPiBTaWduYWxBY3Rpb24gewogICAgICAgICBkYXRhTG9nTG4oImhlcmUiKTsKICAgICAgICAg
aGFuZGxlclJhbiA9IHRydWU7CiAgICAgICAgIHJldHVybiBTaWduYWxBY3Rpb246OkhhbmRsZWQ7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309768</attachid>
            <date>2017-05-11 13:36:59 -0700</date>
            <delta_ts>2017-05-11 13:43:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171865-20170511133658.patch</filename>
            <type>text/plain</type>
            <size>50278</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE2Njc3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
YzIyOWE0ZjkxMDMxZGZlOTU1YTQxMGIyMDI0Njc2ZTFmM2NkZWIxLi4yNWUzMDIyZWI5ZmY0ZDA1
M2E4ZWRiY2YxZTI2YmFkZTA1MTA4MWExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MCBAQAorMjAxNy0wNS0xMSAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBVc2UgTWFjaCBleGNlcHRpb25zIGluc3RlYWQgb2Ygc2lnbmFscyB3
aGVyZSBwb3NzaWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTcxODY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhpcyBwYXRjaCBhZGRzIHNvbWUgbmV3IEpTQyBvcHRpb25zLiBUaGUgZmlyc3QgaXMg
YW4gb3B0aW9uIHRoYXQKKyAgICAgICAgZW5hYmxlcyBvciBkaXNhYmxlcyB3ZWIgYXNzZW1ibHkg
dGllciB1cC4gVGhlIHNlY29uZCBjb250cm9scworICAgICAgICB3aGV0aGVyIG9yIG5vdCB3ZSB1
c2UgbWFjaCBleGNlcHRpb25zICh3aGVyZSBhdmFpbGFibGUpLgorCisgICAgICAgICogQVBJL3Rl
c3RzL0V4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwOgorICAgICAgICAoZGlzcGF0Y2hUZXJtaXRh
dGVDYWxsYmFjayk6CisgICAgICAgICh0ZXN0RXhlY3V0aW9uVGltZUxpbWl0KToKKyAgICAgICAg
KiBydW50aW1lL0pTTG9jay5jcHA6CisgICAgICAgIChKU0M6OkpTTG9jazo6ZGlkQWNxdWlyZUxv
Y2spOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5jcHA6CisgICAgICAgIChKU0M6Om92ZXJy
aWRlRGVmYXVsdHMpOgorICAgICAgICAoSlNDOjpPcHRpb25zOjppbml0aWFsaXplKToKKyAgICAg
ICAgKiBydW50aW1lL09wdGlvbnMuaDoKKyAgICAgICAgKiBydW50aW1lL1ZNVHJhcHMuY3BwOgor
ICAgICAgICAoSlNDOjpTaWduYWxDb250ZXh0OjpTaWduYWxDb250ZXh0KToKKyAgICAgICAgKEpT
Qzo6U2lnbmFsQ29udGV4dDo6YWRqdXN0UENUb1BvaW50VG9UcmFwcGluZ0luc3RydWN0aW9uKToK
KyAgICAgICAgKEpTQzo6aW5zdGFsbFNpZ25hbEhhbmRsZXIpOgorICAgICAgICAoSlNDOjpWTVRy
YXBzOjpTaWduYWxTZW5kZXI6OnNlbmQpOgorICAgICAgICAqIHRvb2xzL1NpZ2lsbENyYXNoQW5h
bHl6ZXIuY3BwOgorICAgICAgICAoSlNDOjpTaWduYWxDb250ZXh0OjpTaWduYWxDb250ZXh0KToK
KyAgICAgICAgKEpTQzo6U2lnbmFsQ29udGV4dDo6ZHVtcCk6CisgICAgICAgIChKU0M6Omluc3Rh
bGxDcmFzaEhhbmRsZXIpOgorICAgICAgICAqIHdhc20vV2FzbUJCUVBsYW4uY3BwOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKToKKyAgICAgICAgKiB3YXNt
L1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp0cmFwSGFu
ZGxlcik6CisgICAgICAgIChKU0M6Oldhc206OmVuYWJsZUZhc3RNZW1vcnkpOgorICAgICAgICAq
IHdhc20vV2FzbU1hY2hpbmVUaHJlYWRzLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6cmVzZXRJ
bnN0cnVjdGlvbkNhY2hlT25BbGxUaHJlYWRzKToKKwogMjAxNy0wNS0xMSAgTWFyayBMYW0gIDxt
YXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgV29ya2VyVGhyZWFkOjpzdG9wKCkgc2hvdWxk
IGNhbGwgc2NoZWR1bGVFeGVjdXRpb25UZXJtaW5hdGlvbigpIGxhc3QuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGVjZGRiMzNm
YmVkNTIxMTFiYzA3MTk1ZDZjMDhmZTQwNmIyYzFhMzUuLmE3MjBkMTAxZTIyMDVjZGYwZmEwNmRm
YzNjYTczNmY5YmE1ZmM2NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTcgQEAKKzIwMTctMDUtMTEgIEtlaXRo
IE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIE1hY2ggZXhj
ZXB0aW9ucyBpbnN0ZWFkIG9mIHNpZ25hbHMgd2hlcmUgcG9zc2libGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MTg2NQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZW5hYmxlcyB1c2lu
ZyBtYWNoIGV4Y2VwdGlvbnMgb24gZGFyd2luLiBUaGUgd2F5IHRoZQorICAgICAgICBtYWNoIGV4
Y2VwdGlvbiBhcGkgd29ya3MgaXMgdGhhdCB3ZSBjcmVhdGUgYSBtYWNoIHBvcnQsIHdoaWNoIGlz
CisgICAgICAgIGxpa2UgYSBmaWxlIGRlc2NyaXB0b3IuICBXZSB0aGVuIHdhaXQgZm9yIGEgbWVz
c2FnZSB0byBhcnJpdmUgb24KKyAgICAgICAgdGhhdCBwb3J0IGluIGEgdGhyZWFkLiBXaGVuIGFu
b3RoZXIgdGhyZWFkIHJhaXNlcyBhIGV4Y2VwdGlvbiAoc2F5CisgICAgICAgIGR1ZSB0byBhIGJh
ZCBtZW1vcnkgYWNjZXNzKSB0aGUgT1Mgc2VuZHMgb3VyIHRocmVhZCBhIG1lc3NhZ2UuIFRoZQor
ICAgICAgICBwYXlsb2FkIG9mIHRoYXQgbWVzc2FnZSBpcyB0aGUgcmVnaXN0ZXIgZmlsZSBvZiB0
aGUgY3Jhc2hpbmcKKyAgICAgICAgdGhyZWFkLiBXZSB0aGVuIGNhbGwgb3VyIGN1c3RvbSBoYW5k
bGVycyB0aGF0IGNoYW5nZSB0aGUgc3RhdGUgYXMKKyAgICAgICAgbmVlZGVkLiBJbiBvcmRlciB0
byByZXN0YXJ0IHRoZSB0aHJlYWQgd2Ugc2VuZCBhIHBheWxvYWQgYmFjayB0bworICAgICAgICB0
aGUgT1Mgd2l0aCBhbiB1cGRhdGVkIHJlZ2lzdGVyIGZpbGUgYWxvbmcgd2l0aCBhIHN1Y2Nlc3Mg
bWVzc2FnZQorICAgICAgICBoZWFkZXIuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIG1ha2Vz
IHRocmVhZCBtZXNzYWdlcyB3b3JrIHdpdGhvdXQgc2lnbmFscyBieQorICAgICAgICBzaW1wbHkg
c3VzcGVuZGluZyB0aGUgdGhyZWFkIHRoZW4gcnVubmluZyB0aGUgbWVzc2FnZSBhdCB0aGF0Cisg
ICAgICAgIHRpbWUuCisKKyAgICAgICAgKiBDb25maWd1cmF0aW9ucy9XVEYueGNjb25maWc6Cisg
ICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL1Bs
YXRmb3JtLmg6CisgICAgICAgICogd3RmL1BsYXRmb3JtUmVnaXN0ZXJzLmg6CisgICAgICAgIChX
VEY6OnJlZ2lzdGVyc0Zyb21VQ29udGV4dCk6CisgICAgICAgICogd3RmL1N0YWNrQm91bmRzLmg6
CisgICAgICAgIChXVEY6OlN0YWNrQm91bmRzOjpTdGFja0JvdW5kcyk6CisgICAgICAgICogd3Rm
L1RocmVhZEhvbGRlci5jcHA6CisgICAgICAgIChXVEY6OlRocmVhZEhvbGRlcjo6flRocmVhZEhv
bGRlcik6CisgICAgICAgICogd3RmL1RocmVhZE1lc3NhZ2UuY3BwOgorICAgICAgICAoV1RGOjpz
ZW5kTWVzc2FnZVNpZ25hbCk6CisgICAgICAgIChXVEY6OnNlbmRNZXNzYWdlTWFjaCk6CisgICAg
ICAgIChXVEY6OmRlbGl2ZXJNZXNzYWdlc1VzaW5nTWFjaCk6CisgICAgICAgIChXVEY6OnNlbmRN
ZXNzYWdlU2NvcGVkKToKKyAgICAgICAgKiB3dGYvVGhyZWFkTWVzc2FnZS5oOgorICAgICAgICAo
V1RGOjpzZW5kTWVzc2FnZSk6CisgICAgICAgICogd3RmL1RocmVhZGluZy5oOgorICAgICAgICAo
V1RGOjpUaHJlYWQ6Om1hY2hUaHJlYWQpOgorICAgICAgICAqIHd0Zi9tYWMvTWFjaEV4Y2VwdGlv
bnMuZGVmczogQ29waWVkIGZyb20gU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5oLgorICAg
ICAgICAqIHd0Zi90aHJlYWRzL1NpZ25hbHMuY3BwOgorICAgICAgICAoV1RGOjpzdGFydE1hY2hF
eGNlcHRpb25IYW5kbGVyVGhyZWFkKToKKyAgICAgICAgKFdURjo6ZnJvbU1hY2hFeGNlcHRpb24p
OgorICAgICAgICAoV1RGOjp0b01hY2hNYXNrKToKKyAgICAgICAgKFdURjo6aGFuZGxlU2lnbmFs
c1dpdGhNYWNoKToKKyAgICAgICAgKFdURjo6c2V0RXhjZXB0aW9uUG9ydHMpOgorICAgICAgICAo
V1RGOjphY3RpdmVUaHJlYWRzKToKKyAgICAgICAgKFdURjo6cmVnaXN0ZXJUaHJlYWQpOgorICAg
ICAgICAoV1RGOjpyZW1vdmVUaHJlYWQpOgorICAgICAgICAoV1RGOjppbnN0YWxsU2lnbmFsSGFu
ZGxlcik6CisgICAgICAgIChXVEY6OmpzY1NpZ25hbEhhbmRsZXIpOgorICAgICAgICAqIHd0Zi90
aHJlYWRzL1NpZ25hbHMuaDoKKwogMjAxNy0wNS0wOSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFJlbW92ZSBzdXBwb3J0IGZvciBsZWdhY3kgTm90aWZpY2F0aW9ucwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9FeGVjdXRpb25UaW1l
TGltaXRUZXN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvRXhlY3V0aW9u
VGltZUxpbWl0VGVzdC5jcHAKaW5kZXggZDVlNTMyNDNiNzhkZjc1MTM0MmFkOGQzOTBhNGIwNDEz
ZDllZWY5ZS4uN2VhYzA3MzA5ZGRjM2YxNjQ5NDUwYmQwMzc5ZDJjYTE4ZjAxNjlhYSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9FeGVjdXRpb25UaW1lTGltaXRU
ZXN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0V4ZWN1dGlvblRp
bWVMaW1pdFRlc3QuY3BwCkBAIC0zMCw4ICszMCwxMyBAQAogI2luY2x1ZGUgIkpTQ29udGV4dFJl
ZlByaXZhdGUuaCIKICNpbmNsdWRlICJKYXZhU2NyaXB0Q29yZS5oIgogI2luY2x1ZGUgIk9wdGlv
bnMuaCIKKwogI2luY2x1ZGUgPGNocm9ubz4KKyNpbmNsdWRlIDxkaXNwYXRjaC9kaXNwYXRjaC5o
PgorI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CisjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgog
I2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOjpj
aHJvbm87CkBAIC03Nyw2ICs4MiwxMyBAQCBzdGF0aWMgYm9vbCBleHRlbmRUZXJtaW5hdGVDYWxs
YmFjayhKU0NvbnRleHRSZWYgY3R4LCB2b2lkKikKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9v
bCBkaXNwYXRjaFRlcm1pbmF0ZUNhbGxiYWNrQ2FsbGVkID0gZmFsc2U7CitzdGF0aWMgYm9vbCBk
aXNwYXRjaFRlcm1pdGF0ZUNhbGxiYWNrKEpTQ29udGV4dFJlZiwgdm9pZCopCit7CisgICAgZGlz
cGF0Y2hUZXJtaW5hdGVDYWxsYmFja0NhbGxlZCA9IHRydWU7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKIHN0cnVjdCBUaWVyT3B0aW9ucyB7CiAgICAgY29uc3QgY2hhciogdGllcjsKICAgICB1bnNp
Z25lZCB0aW1lTGltaXRBZGp1c3RtZW50TWlsbGlzOwpAQCAtMzY1LDYgKzM3Nyw2MyBAQCBpbnQg
dGVzdEV4ZWN1dGlvblRpbWVMaW1pdCgpCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAorICAg
ICAgICAvKiBUZXN0IHNjcmlwdCB0aW1lb3V0IGZyb20gZGlzcGF0Y2ggcXVldWU6ICovCisgICAg
ICAgIHRpbWVMaW1pdCA9ICgxMDAgKyB0aWVyQWRqdXN0bWVudE1pbGxpcykgLyAxMDAwLjA7Cisg
ICAgICAgIEpTQ29udGV4dEdyb3VwU2V0RXhlY3V0aW9uVGltZUxpbWl0KGNvbnRleHRHcm91cCwg
dGltZUxpbWl0LCBkaXNwYXRjaFRlcm1pdGF0ZUNhbGxiYWNrLCAwKTsKKyAgICAgICAgeworICAg
ICAgICAgICAgdW5zaWduZWQgdGltZUFmdGVyV2F0Y2hkb2dTaG91bGRIYXZlRmlyZWQgPSAzMDAg
KyB0aWVyQWRqdXN0bWVudE1pbGxpczsKKworICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBzY3Jp
cHRCdWlsZGVyOworICAgICAgICAgICAgc2NyaXB0QnVpbGRlci5hcHBlbmRMaXRlcmFsKCJmdW5j
dGlvbiBmb28oKSB7IHZhciBzdGFydFRpbWUgPSBjdXJyZW50Q1BVVGltZSgpOyB3aGlsZSAodHJ1
ZSkgeyBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDA7IGkrKyk7IGlmIChjdXJyZW50Q1BVVGltZSgp
IC0gc3RhcnRUaW1lID4gIik7CisgICAgICAgICAgICBzY3JpcHRCdWlsZGVyLmFwcGVuZE51bWJl
cih0aW1lQWZ0ZXJXYXRjaGRvZ1Nob3VsZEhhdmVGaXJlZCAvIDEwMDAuMCk7CisgICAgICAgICAg
ICBzY3JpcHRCdWlsZGVyLmFwcGVuZExpdGVyYWwoIikgYnJlYWs7IH0gfSBmb28oKTsiKTsKKwor
ICAgICAgICAgICAgSlNTdHJpbmdSZWYgc2NyaXB0ID0gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoc2NyaXB0QnVpbGRlci50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAg
ICAgZXhjZXB0aW9uID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGRpc3BhdGNoVGVybWluYXRlQ2Fs
bGJhY2tDYWxsZWQgPSBmYWxzZTsKKworICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBkbyB0aGlz
IHNpbmNlIGJsb2NrcyBjYW4gb25seSBjYXB0dXJlIHRoaW5ncyBhcyBjb25zdC4KKyAgICAgICAg
ICAgIEpTR2xvYmFsQ29udGV4dFJlZiYgY29udGV4dFJlZiA9IGNvbnRleHQ7CisgICAgICAgICAg
ICBKU1N0cmluZ1JlZiYgc2NyaXB0UmVmID0gc2NyaXB0OworICAgICAgICAgICAgSlNWYWx1ZVJl
ZiYgZXhjZXB0aW9uUmVmID0gZXhjZXB0aW9uOworCisgICAgICAgICAgICBMb2NrIHN5bmNMb2Nr
OworICAgICAgICAgICAgTG9jayYgc3luY0xvY2tSZWYgPSBzeW5jTG9jazsKKyAgICAgICAgICAg
IENvbmRpdGlvbiBzeW5jaHJvbml6ZTsKKyAgICAgICAgICAgIENvbmRpdGlvbiYgc3luY2hyb25p
emVSZWYgPSBzeW5jaHJvbml6ZTsKKyAgICAgICAgICAgIGJvb2wgZGlkU3luY2hyb25pemUgPSBm
YWxzZTsKKyAgICAgICAgICAgIGJvb2wmIGRpZFN5bmNocm9uaXplUmVmID0gZGlkU3luY2hyb25p
emU7CisKKyAgICAgICAgICAgIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMgc3RhcnRUaW1lOwor
ICAgICAgICAgICAgc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcyBlbmRUaW1lOworCisgICAgICAg
ICAgICBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzJiBzdGFydFRpbWVSZWYgPSBzdGFydFRpbWU7
CisgICAgICAgICAgICBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzJiBlbmRUaW1lUmVmID0gZW5k
VGltZTsKKworICAgICAgICAgICAgZGlzcGF0Y2hfZ3JvdXBfdCBncm91cCA9IGRpc3BhdGNoX2dy
b3VwX2NyZWF0ZSgpOworICAgICAgICAgICAgZGlzcGF0Y2hfZ3JvdXBfYXN5bmMoZ3JvdXAsIGRp
c3BhdGNoX2dldF9nbG9iYWxfcXVldWUoMCwgMCksIF57CisgICAgICAgICAgICAgICAgc3RhcnRU
aW1lUmVmID0gY3VycmVudENQVVRpbWUoKTsKKyAgICAgICAgICAgICAgICBKU0V2YWx1YXRlU2Ny
aXB0KGNvbnRleHRSZWYsIHNjcmlwdFJlZiwgbnVsbHB0ciwgbnVsbHB0ciwgMSwgJmV4Y2VwdGlv
blJlZik7CisgICAgICAgICAgICAgICAgZW5kVGltZVJlZiA9IGN1cnJlbnRDUFVUaW1lKCk7Cisg
ICAgICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBXVEY6OmhvbGRMb2NrKHN5bmNMb2NrUmVmKTsK
KyAgICAgICAgICAgICAgICBkaWRTeW5jaHJvbml6ZVJlZiA9IHRydWU7CisgICAgICAgICAgICAg
ICAgc3luY2hyb25pemVSZWYubm90aWZ5QWxsKCk7CisgICAgICAgICAgICB9KTsKKworICAgICAg
ICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhzeW5jTG9jayk7CisgICAgICAgICAgICBzeW5j
aHJvbml6ZS53YWl0KHN5bmNMb2NrLCBbJl0geyByZXR1cm4gZGlkU3luY2hyb25pemU7IH0pOwor
CisgICAgICAgICAgICBpZiAoKChlbmRUaW1lIC0gc3RhcnRUaW1lKSA8IG1pbGxpc2Vjb25kcyh0
aW1lQWZ0ZXJXYXRjaGRvZ1Nob3VsZEhhdmVGaXJlZCkpICYmIGRpc3BhdGNoVGVybWluYXRlQ2Fs
bGJhY2tDYWxsZWQpCisgICAgICAgICAgICAgICAgcHJpbnRmKCJQQVNTOiAlcyBzY3JpcHQgb24g
ZGlzcGF0Y2ggcXVldWUgdGltZWQgb3V0IGFzIGV4cGVjdGVkLlxuIiwgdGllck9wdGlvbnMudGll
cik7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoKGVuZFRpbWUgLSBz
dGFydFRpbWUpID49IG1pbGxpc2Vjb25kcyh0aW1lQWZ0ZXJXYXRjaGRvZ1Nob3VsZEhhdmVGaXJl
ZCkpCisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiRkFJTDogJXMgc2NyaXB0IG9uIGRpc3Bh
dGNoIHF1ZXVlIGRpZCBub3QgdGltZSBvdXQgYXMgZXhwZWN0ZWQuXG4iLCB0aWVyT3B0aW9ucy50
aWVyKTsKKyAgICAgICAgICAgICAgICBpZiAoIXNob3VsZFRlcm1pbmF0ZUNhbGxiYWNrV2FzQ2Fs
bGVkKQorICAgICAgICAgICAgICAgICAgICBwcmludGYoIkZBSUw6ICVzIHNjcmlwdCBvbiBkaXNw
YXRjaCBxdWV1ZSB0aW1lb3V0IGNhbGxiYWNrIHdhcyBub3QgY2FsbGVkLlxuIiwgdGllck9wdGlv
bnMudGllcik7CisgICAgICAgICAgICAgICAgZmFpbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCiAgICAgICAgIEpTR2xvYmFsQ29udGV4dFJlbGVhc2UoY29udGV4dCk7CiAK
ICAgICAgICAgT3B0aW9uczo6c2V0T3B0aW9ucyhzYXZlZE9wdGlvbnNCdWlsZGVyLnRvU3RyaW5n
KCkuYXNjaWkoKS5kYXRhKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNMb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5j
cHAKaW5kZXggYzE3NWFlMGM0ODJlZDI3YmQ1ZjZiZGM4Nzk2OGU3NWQ0NWFmNTBlZi4uYmI3MGFh
YWVhMTVmZWQ1NDc3YjYxOTlmYTZkNGRjN2VhOTcxMDJjMiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0xvY2suY3BwCkBAIC0zMCw2ICszMCw4IEBACiAjaW5jbHVkZSAiU2FtcGxp
bmdQcm9maWxlci5oIgogI2luY2x1ZGUgIldhc21NYWNoaW5lVGhyZWFkcy5oIgogI2luY2x1ZGUg
PHRocmVhZD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RocmVh
ZHMvU2lnbmFscy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMTQ4LDYgKzE1MCwxMCBAQCB2
b2lkIEpTTG9jazo6ZGlkQWNxdWlyZUxvY2soKQogICAgIFdhc206OnN0YXJ0VHJhY2tpbmdDdXJy
ZW50VGhyZWFkKCk7CiAjZW5kaWYKIAorI2lmIEhBVkUoTUFDSF9FWENFUFRJT05TKQorICAgIFdU
Rjo6cmVnaXN0ZXJUaHJlYWQoJlRocmVhZDo6Y3VycmVudCgpKTsKKyNlbmRpZgorCiAgICAgbV92
bS0+dHJhcHMoKS5ub3RpZnlHcmFiQWxsTG9ja3MoKTsKIAogI2lmIEVOQUJMRShTQU1QTElOR19Q
Uk9GSUxFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKaW5kZXgg
YjA0ZGUzNWE1MzYxNTA4NDM4NTc1YzIyN2E1MDE0ZGQwYzUxYmFhMi4uOTZmOWZmNzQyNWJiOTU5
ZjEzN2E2MTRlYzNkYjY3NmM4YjE2ZGE5OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5jcHAKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0
cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGhyZWFkcy9TaWduYWxzLmg+CiAKICNp
ZiBQTEFURk9STShDT0NPQSkKICNpbmNsdWRlIDxjcnRfZXh0ZXJucy5oPgpAQCAtMzU0LDYgKzM1
NSwxMCBAQCBzdGF0aWMgdm9pZCBvdmVycmlkZURlZmF1bHRzKCkKICNpZiAhRU5BQkxFKFdFQkFT
U0VNQkxZX0ZBU1RfTUVNT1JZKQogICAgIE9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5RmFzdE1lbW9y
eSgpID0gZmFsc2U7CiAjZW5kaWYKKworI2lmIEhBVkUoTUFDSF9FWENFUFRJT05TKQorICAgIE9w
dGlvbnM6OnVzZU1hY2hGb3JFeGNlcHRpb25zKCkgPSB0cnVlOworI2VuZGlmCiB9CiAKIHN0YXRp
YyB2b2lkIHJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMoKQpAQCAtNTQ1LDYgKzU1MCw5IEBAIHZv
aWQgT3B0aW9uczo6aW5pdGlhbGl6ZSgpCiAKICAgICAgICAgICAgIGR1bXBPcHRpb25zSWZOZWVk
ZWQoKTsKICAgICAgICAgICAgIGVuc3VyZU9wdGlvbnNBcmVDb2hlcmVudCgpOworCisgICAgICAg
ICAgICBpZiAoT3B0aW9uczo6dXNlTWFjaEZvckV4Y2VwdGlvbnMoKSkKKyAgICAgICAgICAgICAg
ICBXVEY6OmhhbmRsZVNpZ25hbHNXaXRoTWFjaCgpOwogICAgICAgICB9KTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCmluZGV4IGNmOWRjMmIyYTgyNTY4ZWUwN2Rh
MDg4OWUzOWI2YjJmOWRjZDc5NzUuLjIyNzRkMWNkZWIzMzM2ZTM3YWI0NDczZWE0MTE2ZWEzMjI5
ZTkzN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKQEAgLTQyMCw2
ICs0MjAsOCBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICB2KHVuc2ln
bmVkLCB3YXRjaGRvZywgMCwgTm9ybWFsLCAid2F0Y2hkb2cgdGltZW91dCAoMCA9IERpc2FibGVk
LCBOID0gYSB0aW1lb3V0IHBlcmlvZCBvZiBOIG1pbGxpc2Vjb25kcykiKSBcCiAgICAgdihib29s
LCB1c2VQb2xsaW5nVHJhcHMsIGZhbHNlLCBOb3JtYWwsICJ1c2UgcG9sbGluZyAoaW5zdGVhZCBv
ZiBzaWduYWxsaW5nKSBWTSB0cmFwcyIpIFwKICAgICBcCisgICAgdihib29sLCB1c2VNYWNoRm9y
RXhjZXB0aW9ucywgdHJ1ZSwgTm9ybWFsLCAiVXNlIG1hY2ggZXhjZXB0aW9ucyByYXRoZXIgdGhh
biBzaWduYWxzIHRvIGhhbmRsZSBmYXVsdHMgYW5kIHBhc3MgdGhyZWFkIG1lc3NhZ2VzLiAoVGhp
cyBkb2VzIG5vdGhpbmcgb24gcGxhdGZvcm1zIHdpdGhvdXQgbWFjaCkiKSBcCisgICAgXAogICAg
IHYoYm9vbCwgdXNlSUNTdGF0cywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIFwKICAg
ICB2KHVuc2lnbmVkLCBwcm90b3R5cGVIaXRDb3VudEZvckxMSW50Q2FjaGluZywgMiwgTm9ybWFs
LCAiTnVtYmVyIG9mIHByb3RvdHlwZSBwcm9wZXJ0eSBoaXRzIGJlZm9yZSBjYWNoaW5nIGEgcHJv
dG90eXBlIGluIHRoZSBMTEludC4gQSBjb3VudCBvZiAwIG1lYW5zIG5ldmVyIGNhY2hlLiIpIFwK
QEAgLTQ0Myw2ICs0NDUsNyBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAg
ICB2KHVuc2lnbmVkLCB3ZWJBc3NlbWJseUJCUU9wdGltaXphdGlvbkxldmVsLCAxLCBOb3JtYWws
ICJCMyBPcHRpbWl6YXRpb24gbGV2ZWwgZm9yIEJCUSBXZWIgQXNzZW1ibHkgbW9kdWxlIGNvbXBp
bGF0aW9ucy4iKSBcCiAgICAgdih1bnNpZ25lZCwgd2ViQXNzZW1ibHlPTUdPcHRpbWl6YXRpb25M
ZXZlbCwgT3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSwgTm9ybWFsLCAiQjMgT3B0aW1pemF0
aW9uIGxldmVsIGZvciBPTUcgV2ViIEFzc2VtYmx5IG1vZHVsZSBjb21waWxhdGlvbnMuIikgXAog
ICAgIFwKKyAgICB2KGJvb2wsIHVzZUJCUVRpZXJVcENoZWNrcywgdHJ1ZSwgTm9ybWFsLCAiRW5h
YmxlcyB0aWVyIHVwIGNoZWNrcyBmb3Igb3VyIEJCUSBjb2RlLiIpIFwKICAgICB2KHVuc2lnbmVk
LCB3ZWJBc3NlbWJseU9NR1RpZXJVcENvdW50LCA1MDAwLCBOb3JtYWwsICJUaGUgY291bnRkb3du
IGJlZm9yZSB3ZSB0aWVyIHVwIGEgZnVuY3Rpb24gdG8gT01HLiIpIFwKICAgICB2KHVuc2lnbmVk
LCB3ZWJBc3NlbWJseUxvb3BEZWNyZW1lbnQsIDE1LCBOb3JtYWwsICJUaGUgYW1vdW50IHRoZSB0
aWVyIHVwIGNvdW50ZG93biBpcyBkZWNyZW1lbnRlZCBvbiBlYWNoIGxvb3AgYmFja2VkZ2UuIikg
XAogICAgIHYodW5zaWduZWQsIHdlYkFzc2VtYmx5RnVuY3Rpb25FbnRyeURlY3JlbWVudCwgMSwg
Tm9ybWFsLCAiVGhlIGFtb3VudCB0aGUgdGllciB1cCBjb3VudGRvd24gaXMgZGVjcmVtZW50ZWQg
b24gZWFjaCBmdW5jdGlvbiBlbnRyeS4iKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTVRyYXBzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNVHJhcHMuY3BwCmluZGV4IDFiYWFjZTYwNDRlNjYwYThlNTQ0MWZiYWQwMThlYTkwOTMxYTRj
OTEuLjEwZDc4MmE4ZGM0OWE1ZWRhMDgxZDczZDY4M2RmZmUxNmY4YzhmNDMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCkBAIC01MywxMSArNTMsMTEgQEAgQUxX
QVlTX0lOTElORSBWTSYgVk1UcmFwczo6dm0oKSBjb25zdAogI2lmIEVOQUJMRShTSUdOQUxfQkFT
RURfVk1fVFJBUFMpCiAKIHN0cnVjdCBTaWduYWxDb250ZXh0IHsKLSAgICBTaWduYWxDb250ZXh0
KG1jb250ZXh0X3QmIG1jb250ZXh0KQotICAgICAgICA6IG1jb250ZXh0KG1jb250ZXh0KQotICAg
ICAgICAsIHRyYXBQQyhNYWNoaW5lQ29udGV4dDo6aW5zdHJ1Y3Rpb25Qb2ludGVyKG1jb250ZXh0
KSkKLSAgICAgICAgLCBzdGFja1BvaW50ZXIoTWFjaGluZUNvbnRleHQ6OnN0YWNrUG9pbnRlciht
Y29udGV4dCkpCi0gICAgICAgICwgZnJhbWVQb2ludGVyKE1hY2hpbmVDb250ZXh0OjpmcmFtZVBv
aW50ZXIobWNvbnRleHQpKQorICAgIFNpZ25hbENvbnRleHQoUGxhdGZvcm1SZWdpc3RlcnMmIHJl
Z2lzdGVycykKKyAgICAgICAgOiBjb250ZXh0KHJlZ2lzdGVycykKKyAgICAgICAgLCB0cmFwUEMo
TWFjaGluZUNvbnRleHQ6Omluc3RydWN0aW9uUG9pbnRlcihjb250ZXh0KSkKKyAgICAgICAgLCBz
dGFja1BvaW50ZXIoTWFjaGluZUNvbnRleHQ6OnN0YWNrUG9pbnRlcihjb250ZXh0KSkKKyAgICAg
ICAgLCBmcmFtZVBvaW50ZXIoTWFjaGluZUNvbnRleHQ6OmZyYW1lUG9pbnRlcihjb250ZXh0KSkK
ICAgICB7CiAjaWYgQ1BVKFg4Nl82NCkgfHwgQ1BVKFg4NikKICAgICAgICAgLy8gT24gWDg2XzY0
LCBTSUdUUkFQIHJlcG9ydHMgdGhlIGFkZHJlc3MgYWZ0ZXIgdGhlIHRyYXBwaW5nIFBDLiBTbywg
ZGVjIGJ5IDEuCkBAIC02OCwxMSArNjgsMTEgQEAgc3RydWN0IFNpZ25hbENvbnRleHQgewogICAg
IHZvaWQgYWRqdXN0UENUb1BvaW50VG9UcmFwcGluZ0luc3RydWN0aW9uKCkKICAgICB7CiAjaWYg
Q1BVKFg4Nl82NCkgfHwgQ1BVKFg4NikKLSAgICAgICAgTWFjaGluZUNvbnRleHQ6Omluc3RydWN0
aW9uUG9pbnRlcihtY29udGV4dCkgPSB0cmFwUEM7CisgICAgICAgIE1hY2hpbmVDb250ZXh0Ojpp
bnN0cnVjdGlvblBvaW50ZXIoY29udGV4dCkgPSB0cmFwUEM7CiAjZW5kaWYKICAgICB9CiAKLSAg
ICBtY29udGV4dF90JiBtY29udGV4dDsKKyAgICBQbGF0Zm9ybVJlZ2lzdGVycyYgY29udGV4dDsK
ICAgICB2b2lkKiB0cmFwUEM7CiAgICAgdm9pZCogc3RhY2tQb2ludGVyOwogICAgIHZvaWQqIGZy
YW1lUG9pbnRlcjsKQEAgLTEzMCwxMSArMTMwLDEzIEBAIHN0YXRpYyBFeHBlY3RlZDxWTUFuZFN0
YWNrQm91bmRzLCBWTVRyYXBzOjpFcnJvcj4gZmluZEFjdGl2ZVZNQW5kU3RhY2tCb3VuZHMoU2ln
CiAKIHN0YXRpYyB2b2lkIGluc3RhbGxTaWduYWxIYW5kbGVyKCkKIHsKLSAgICBpbnN0YWxsU2ln
bmFsSGFuZGxlcihTaWduYWw6OlRyYXAsIFtdIChpbnQsIHNpZ2luZm9fdCosIHZvaWQqIHVhcCkg
LT4gU2lnbmFsQWN0aW9uIHsKLSAgICAgICAgU2lnbmFsQ29udGV4dCBjb250ZXh0KHN0YXRpY19j
YXN0PHVjb250ZXh0X3QqPih1YXApLT51Y19tY29udGV4dCk7CisgICAgaW5zdGFsbFNpZ25hbEhh
bmRsZXIoU2lnbmFsOjpUcmFwLCBbXSAoU2lnbmFsLCBTaWdJbmZvJiwgUGxhdGZvcm1SZWdpc3Rl
cnMmIHJlZ2lzdGVycykgLT4gU2lnbmFsQWN0aW9uIHsKKyAgICAgICAgU2lnbmFsQ29udGV4dCBj
b250ZXh0KHJlZ2lzdGVycyk7CiAKLSAgICAgICAgaWYgKCFpc0pJVFBDKGNvbnRleHQudHJhcFBD
KSkKKyAgICAgICAgaWYgKCFpc0pJVFBDKGNvbnRleHQudHJhcFBDKSkgeworICAgICAgICAgICAg
ZGF0YUxvZ0xuKCJ0cmFwcGluZyBwYzogIiwgUmF3UG9pbnRlcihjb250ZXh0LnRyYXBQQyksICIg
aml0IHN0YXJ0OiAiLCBzdGFydE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbCwgIiBqaXQgZW5k
OiAiLCBlbmRPZkZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2wpOwogICAgICAgICAgICAgcmV0dXJu
IFNpZ25hbEFjdGlvbjo6Tm90SGFuZGxlZDsKKyAgICAgICAgfQogCiAgICAgICAgIC8vIEZJWE1F
OiBUaGlzIGN1cnJlbnRseSBlYXRzIGFsbCB0cmFwcyBpbmNsdWRpbmcgaml0IGFzc2VydHMgd2Ug
c2hvdWxkIG1ha2Ugc3VyZSB0aGlzCiAgICAgICAgIC8vIGFsd2F5cyB3b3Jrcy4gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MTAzOQpAQCAtNDA0LDggKzQwNiw4IEBA
IHZvaWQgVk1UcmFwczo6U2lnbmFsU2VuZGVyOjpzZW5kKCkKICAgICAgICAgICAgIFZNJiB2bSA9
ICptX3ZtOwogICAgICAgICAgICAgYXV0byBvcHRpb25hbE93bmVyVGhyZWFkID0gdm0ub3duZXJU
aHJlYWQoKTsKICAgICAgICAgICAgIGlmIChvcHRpb25hbE93bmVyVGhyZWFkKSB7Ci0gICAgICAg
ICAgICAgICAgc2VuZE1lc3NhZ2UoKm9wdGlvbmFsT3duZXJUaHJlYWQudmFsdWUoKS5nZXQoKSwg
W10gKHNpZ2luZm9fdCosIHVjb250ZXh0X3QqIHVjb250ZXh0KSAtPiB2b2lkIHsKLSAgICAgICAg
ICAgICAgICAgICAgU2lnbmFsQ29udGV4dCBjb250ZXh0KHVjb250ZXh0LT51Y19tY29udGV4dCk7
CisgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoKm9wdGlvbmFsT3duZXJUaHJlYWQudmFsdWUo
KS5nZXQoKSwgW10gKFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMpIC0+IHZvaWQgeworICAg
ICAgICAgICAgICAgICAgICBTaWduYWxDb250ZXh0IGNvbnRleHQocmVnaXN0ZXJzKTsKICAgICAg
ICAgICAgICAgICAgICAgYXV0byBhY3RpdmVWTUFuZFN0YWNrQm91bmRzID0gZmluZEFjdGl2ZVZN
QW5kU3RhY2tCb3VuZHMoY29udGV4dCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChhY3RpdmVW
TUFuZFN0YWNrQm91bmRzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBWTSogdm0gPSBhY3Rp
dmVWTUFuZFN0YWNrQm91bmRzLnZhbHVlKCkudm07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAKaW5kZXggNGFkYWVmZjFjZGEyZDFm
YmM2ZjkwNjFmMDYzZTE0ZDJlNjMzMDA0OC4uYmI0NjA1YzY5M2UxMmRkZTA1MDg0ZjdhMTdjZDFl
NDRmN2U5ZTY3NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1NpZ2ls
bENyYXNoQW5hbHl6ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9TaWdp
bGxDcmFzaEFuYWx5emVyLmNwcApAQCAtNzgsMTEgKzc4LDExIEBAIHByaXZhdGU6CiAjZW5kaWYg
Ly8gVVNFKE9TX0xPRykKIAogc3RydWN0IFNpZ25hbENvbnRleHQgewotICAgIFNpZ25hbENvbnRl
eHQobWNvbnRleHRfdCYgbWNvbnRleHQpCi0gICAgICAgIDogbWNvbnRleHQobWNvbnRleHQpCi0g
ICAgICAgICwgbWFjaGluZVBDKE1hY2hpbmVDb250ZXh0OjppbnN0cnVjdGlvblBvaW50ZXIobWNv
bnRleHQpKQotICAgICAgICAsIHN0YWNrUG9pbnRlcihNYWNoaW5lQ29udGV4dDo6c3RhY2tQb2lu
dGVyKG1jb250ZXh0KSkKLSAgICAgICAgLCBmcmFtZVBvaW50ZXIoTWFjaGluZUNvbnRleHQ6OmZy
YW1lUG9pbnRlcihtY29udGV4dCkpCisgICAgU2lnbmFsQ29udGV4dChQbGF0Zm9ybVJlZ2lzdGVy
cyYgY29udGV4dCkKKyAgICAgICAgOiBjb250ZXh0KGNvbnRleHQpCisgICAgICAgICwgbWFjaGlu
ZVBDKE1hY2hpbmVDb250ZXh0OjppbnN0cnVjdGlvblBvaW50ZXIoY29udGV4dCkpCisgICAgICAg
ICwgc3RhY2tQb2ludGVyKE1hY2hpbmVDb250ZXh0OjpzdGFja1BvaW50ZXIoY29udGV4dCkpCisg
ICAgICAgICwgZnJhbWVQb2ludGVyKE1hY2hpbmVDb250ZXh0OjpmcmFtZVBvaW50ZXIoY29udGV4
dCkpCiAgICAgeyB9CiAKICAgICB2b2lkIGR1bXAoKQpAQCAtMTEyLDcgKzExMiw3IEBAIHN0cnVj
dCBTaWduYWxDb250ZXh0IHsKICAgICAgICAgdihncykKIAogI2RlZmluZSBEVU1QX1JFR0lTVEVS
KF9fcmVnKSBcCi0gICAgICAgIGxvZygiUmVnaXN0ZXIgIiAjX19yZWcgIjogJXAiLCByZWludGVy
cHJldF9jYXN0PHZvaWQqPihtY29udGV4dC0+X19zcy5fXyMjX19yZWcpKTsKKyAgICAgICAgbG9n
KCJSZWdpc3RlciAiICNfX3JlZyAiOiAlcCIsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNvbnRl
eHQuX18jI19fcmVnKSk7CiAgICAgICAgIEZPUl9FQUNIX1JFR0lTVEVSKERVTVBfUkVHSVNURVIp
CiAjdW5kZWYgRk9SX0VBQ0hfUkVHSVNURVIKIApAQCAtMTIwLDIwICsxMjAsMjAgQEAgc3RydWN0
IFNpZ25hbENvbnRleHQgewogICAgICAgICBpbnQgaTsKICAgICAgICAgZm9yIChpID0gMDsgaSA8
IDI4OyBpICs9IDQpIHsKICAgICAgICAgICAgIGxvZygieCVkOiAlMDE2bGx4IHglZDogJTAxNmxs
eCB4JWQ6ICUwMTZsbHggeCVkOiAlMDE2bGx4IiwKLSAgICAgICAgICAgICAgICBpLCBtY29udGV4
dC0+X19zcy5fX3hbaV0sCi0gICAgICAgICAgICAgICAgaSsxLCBtY29udGV4dC0+X19zcy5fX3hb
aSsxXSwKLSAgICAgICAgICAgICAgICBpKzIsIG1jb250ZXh0LT5fX3NzLl9feFtpKzJdLAotICAg
ICAgICAgICAgICAgIGkrMywgbWNvbnRleHQtPl9fc3MuX194W2krM10pOworICAgICAgICAgICAg
ICAgIGksIGNvbnRleHQuX194W2ldLAorICAgICAgICAgICAgICAgIGkrMSwgY29udGV4dC5fX3hb
aSsxXSwKKyAgICAgICAgICAgICAgICBpKzIsIGNvbnRleHQuX194W2krMl0sCisgICAgICAgICAg
ICAgICAgaSszLCBjb250ZXh0Ll9feFtpKzNdKTsKICAgICAgICAgfQogICAgICAgICBBU1NFUlQo
aSA8IDI5KTsKICAgICAgICAgbG9nKCJ4JWQ6ICUwMTZsbHggZnA6ICUwMTZsbHggbHI6ICUwMTZs
bHgiLAotICAgICAgICAgICAgaSwgbWNvbnRleHQtPl9fc3MuX194W2ldLCBtY29udGV4dC0+X19z
cy5fX2ZwLCBtY29udGV4dC0+X19zcy5fX2xyKTsKKyAgICAgICAgICAgIGksIGNvbnRleHQuX194
W2ldLCBjb250ZXh0Ll9fZnAsIGNvbnRleHQuX19scik7CiAgICAgICAgIGxvZygic3A6ICUwMTZs
bHggcGM6ICUwMTZsbHggY3BzcjogJTA4eCIsCi0gICAgICAgICAgICBtY29udGV4dC0+X19zcy5f
X3NwLCBtY29udGV4dC0+X19zcy5fX3BjLCBtY29udGV4dC0+X19zcy5fX2Nwc3IpOworICAgICAg
ICAgICAgY29udGV4dC5fX3NwLCBjb250ZXh0Ll9fcGMsIGNvbnRleHQuX19jcHNyKTsKICNlbmRp
ZgogICAgIH0KIAotICAgIG1jb250ZXh0X3QmIG1jb250ZXh0OworICAgIFBsYXRmb3JtUmVnaXN0
ZXJzJiBjb250ZXh0OwogICAgIHZvaWQqIG1hY2hpbmVQQzsKICAgICB2b2lkKiBzdGFja1BvaW50
ZXI7CiAgICAgdm9pZCogZnJhbWVQb2ludGVyOwpAQCAtMTQyLDggKzE0Miw4IEBAIHN0cnVjdCBT
aWduYWxDb250ZXh0IHsKIHN0YXRpYyB2b2lkIGluc3RhbGxDcmFzaEhhbmRsZXIoKQogewogI2lm
IENQVShYODZfNjQpIHx8IENQVShBUk02NCkKLSAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWdu
YWw6OklsbCwgW10gKGludCwgc2lnaW5mb190Kiwgdm9pZCogdWFwKSB7Ci0gICAgICAgIFNpZ25h
bENvbnRleHQgY29udGV4dChzdGF0aWNfY2FzdDx1Y29udGV4dF90Kj4odWFwKS0+dWNfbWNvbnRl
eHQpOworICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbDo6SWxsLCBbXSAoU2lnbmFsLCBT
aWdJbmZvJiwgUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVycykgeworICAgICAgICBTaWduYWxD
b250ZXh0IGNvbnRleHQocmVnaXN0ZXJzKTsKIAogICAgICAgICBpZiAoIWlzSklUUEMoY29udGV4
dC5tYWNoaW5lUEMpKQogICAgICAgICAgICAgcmV0dXJuIFNpZ25hbEFjdGlvbjo6Tm90SGFuZGxl
ZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAppbmRleCAxZGQw
Y2QxZDgzNWM2YzJmMjMxYjAwYjg4NmRkZTRhZjcyYzI2M2NlLi5iMWI1OThkMjBjNWMwMDc3ZDll
OWQwOGUzNjhhZDVjYTE3ODMxYmFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQkJRUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUJCUVBsYW4uY3BwCkBAIC0yNDIsNyArMjQyLDcgQEAgdm9pZCBCQlFQbGFuOjpjb21waWxlRnVu
Y3Rpb25zKENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKICAgICAgICAgQVNTRVJUKHZhbGlkYXRl
RnVuY3Rpb24oZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgbV9tb2R1
bGVJbmZvcm1hdGlvbi5nZXQoKSkpOwogCiAgICAgICAgIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bHNbZnVuY3Rpb25JbmRleF0gPSBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4oKTsKLSAg
ICAgICAgVGllclVwQ291bnQqIHRpZXJVcCA9ICZtX3RpZXJVcENvdW50c1tmdW5jdGlvbkluZGV4
XTsKKyAgICAgICAgVGllclVwQ291bnQqIHRpZXJVcCA9IE9wdGlvbnM6OnVzZUJCUVRpZXJVcENo
ZWNrcygpID8gJm1fdGllclVwQ291bnRzW2Z1bmN0aW9uSW5kZXhdIDogbnVsbHB0cjsKICAgICAg
ICAgYXV0byBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUobV9jb21waWxh
dGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdLCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0
aCwgc2lnbmF0dXJlLCBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdLCBt
X21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIENvbXBpbGF0aW9uTW9kZTo6QkJRTW9k
ZSwgZnVuY3Rpb25JbmRleCwgdGllclVwKTsKIAogICAgICAgICBpZiAoVU5MSUtFTFkoIXBhcnNl
QW5kQ29tcGlsZVJlc3VsdCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAKaW5kZXggMmUwYzk5YTM5YmViZDMxNzhiOTE0
OGQ5NThmZTUzZTU3YTYyMjk3ZS4uMjY0YzM0ZGU0NWRhMTc1YTVkNTE0MWMxNzFlZmU5NWUwNjNj
NWUyNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2ln
bmFsSGFuZGxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0
U2lnbmFsSGFuZGxlci5jcHAKQEAgLTUyLDkgKzUyLDggQEAgc3RhdGljIExhenlOZXZlckRlc3Ry
b3llZDxIYXNoU2V0PHN0ZDo6dHVwbGU8dm9pZCosIHZvaWQqPj4+IGNvZGVMb2NhdGlvbnM7IC8v
ICgKIAogc3RhdGljIGJvb2wgZmFzdEhhbmRsZXJJbnN0YWxsZWQgeyBmYWxzZSB9OwogCi1zdGF0
aWMgU2lnbmFsQWN0aW9uIHRyYXBIYW5kbGVyKGludCwgc2lnaW5mb190KiBzaWdJbmZvLCB2b2lk
KiB1Y29udGV4dCkKK3N0YXRpYyBTaWduYWxBY3Rpb24gdHJhcEhhbmRsZXIoU2lnbmFsLCBTaWdJ
bmZvJiBzaWdJbmZvLCBQbGF0Zm9ybVJlZ2lzdGVycyYgY29udGV4dCkKIHsKLSAgICBtY29udGV4
dF90JiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+KHVjb250ZXh0KS0+dWNfbWNv
bnRleHQ7CiAgICAgdm9pZCogZmF1bHRpbmdJbnN0cnVjdGlvbiA9IE1hY2hpbmVDb250ZXh0Ojpp
bnN0cnVjdGlvblBvaW50ZXIoY29udGV4dCk7CiAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgInN0
YXJ0aW5nIGhhbmRsZXIgZm9yIGZhdWx0IGF0OiAiLCBSYXdQb2ludGVyKGZhdWx0aW5nSW5zdHJ1
Y3Rpb24pKTsKIApAQCAtNjQsNyArNjMsNyBAQCBzdGF0aWMgU2lnbmFsQWN0aW9uIHRyYXBIYW5k
bGVyKGludCwgc2lnaW5mb190KiBzaWdJbmZvLCB2b2lkKiB1Y29udGV4dCkKICAgICBpZiAoaXNK
SVRQQyhmYXVsdGluZ0luc3RydWN0aW9uKSkgewogICAgICAgICBib29sIGZhdWx0ZWRJbkFjdGl2
ZUZhc3RNZW1vcnkgPSBmYWxzZTsKICAgICAgICAgewotICAgICAgICAgICAgdm9pZCogZmF1bHRp
bmdBZGRyZXNzID0gc2lnSW5mby0+c2lfYWRkcjsKKyAgICAgICAgICAgIHZvaWQqIGZhdWx0aW5n
QWRkcmVzcyA9IHNpZ0luZm8uZmF1bHRpbmdBZGRyZXNzOwogICAgICAgICAgICAgZGF0YUxvZ0xu
SWYodmVyYm9zZSwgImNoZWNraW5nIGZhdWx0aW5nIGFkZHJlc3M6ICIsIFJhd1BvaW50ZXIoZmF1
bHRpbmdBZGRyZXNzKSwgIiBpcyBpbiBhbiBhY3RpdmUgZmFzdCBtZW1vcnkiKTsKICAgICAgICAg
ICAgIGZhdWx0ZWRJbkFjdGl2ZUZhc3RNZW1vcnkgPSBXYXNtOjpNZW1vcnk6OmFkZHJlc3NJc0lu
QWN0aXZlRmFzdE1lbW9yeShmYXVsdGluZ0FkZHJlc3MpOwogICAgICAgICB9CkBAIC0xMjQsMTEg
KzEyMywxMSBAQCB2b2lkIGVuYWJsZUZhc3RNZW1vcnkoKQogICAgICAgICAgICAgcmV0dXJuOwog
CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZX0ZBU1RfTUVNT1JZKQotICAgICAgICBpbnN0YWxsU2ln
bmFsSGFuZGxlcihTaWduYWw6OkJ1cywgW10gKGludCBzaWduYWwsIHNpZ2luZm9fdCogc2lnSW5m
bywgdm9pZCogdWNvbnRleHQpIHsKKyAgICAgICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFs
OjpCdXMsIFtdIChTaWduYWwgc2lnbmFsLCBTaWdJbmZvJiBzaWdJbmZvLCBQbGF0Zm9ybVJlZ2lz
dGVycyYgdWNvbnRleHQpIHsKICAgICAgICAgICAgIHJldHVybiB0cmFwSGFuZGxlcihzaWduYWws
IHNpZ0luZm8sIHVjb250ZXh0KTsKICAgICAgICAgfSk7CiAKLSAgICAgICAgaW5zdGFsbFNpZ25h
bEhhbmRsZXIoU2lnbmFsOjpTZWdWLCBbXSAoaW50IHNpZ25hbCwgc2lnaW5mb190KiBzaWdJbmZv
LCB2b2lkKiB1Y29udGV4dCkgeworICAgICAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWw6
OlNlZ1YsIFtdIChTaWduYWwgc2lnbmFsLCBTaWdJbmZvJiBzaWdJbmZvLCBQbGF0Zm9ybVJlZ2lz
dGVycyYgdWNvbnRleHQpIHsKICAgICAgICAgICAgIHJldHVybiB0cmFwSGFuZGxlcihzaWduYWws
IHNpZ0luZm8sIHVjb250ZXh0KTsKICAgICAgICAgfSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21NYWNoaW5lVGhyZWFkcy5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTWFjaGluZVRocmVhZHMuY3BwCmluZGV4IDVhYWM4N2FjYjU3NDdj
N2ZjYTJmOTM2ZWM5Y2Y2NzhiNDMxNzgxNzEuLjBhMzY3ZmQ1ZTIyNTI3ZTljM2M4NzUzNmVjZmQ3
MmIxM2RmNzlkNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21N
YWNoaW5lVGhyZWFkcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1h
Y2hpbmVUaHJlYWRzLmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIk1hY2hpbmVTdGFj
a01hcmtlci5oIgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0
Zi9UaHJlYWRNZXNzYWdlLmg+CisjaW5jbHVkZSA8d3RmL3RocmVhZHMvU2lnbmFscy5oPgogCiBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCkBAIC01Nyw3ICs1OCw3IEBAIHZvaWQg
cmVzZXRJbnN0cnVjdGlvbkNhY2hlT25BbGxUaHJlYWRzKCkKIAogICAgIGNvbnN0IERvdWJseUxp
bmtlZExpc3Q8TWFjaGluZVRocmVhZHM6Ok1hY2hpbmVUaHJlYWQ+JiB0aHJlYWRzID0gd2FzbVRo
cmVhZHMoKS50aHJlYWRzTGlzdEhlYWQobG9ja2VyKTsKICAgICBmb3IgKGNvbnN0IGF1dG8qIHRo
cmVhZCA9IHRocmVhZHMuaGVhZCgpOyB0aHJlYWQ7IHRocmVhZCA9IHRocmVhZC0+bmV4dCgpKSB7
Ci0gICAgICAgIHNlbmRNZXNzYWdlKHRocmVhZC0+bV90aHJlYWQuZ2V0KCksIFtdIChzaWdpbmZv
X3QqLCB1Y29udGV4dF90KikgeworICAgICAgICBzZW5kTWVzc2FnZSh0aHJlYWQtPm1fdGhyZWFk
LmdldCgpLCBbXSAoY29uc3QgUGxhdGZvcm1SZWdpc3RlcnMmKSB7CiAgICAgICAgICAgICAvLyBJ
dCdzIGxpa2VseSB0aGF0IHRoZSBzaWduYWwgaGFuZGxlciB3aWxsIGFscmVhZHkgcmVzZXQgdGhl
IGluc3RydWN0aW9uIGNhY2hlIGJ1dCB3ZSBtaWdodCBhcyB3ZWxsIGJlIHN1cmUuCiAgICAgICAg
ICAgICBXVEY6OmNyb3NzTW9kaWZ5aW5nQ29kZUZlbmNlKCk7CiAgICAgICAgIH0pOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi9Db25maWd1cmF0aW9ucy9XVEYueGNjb25maWcgYi9Tb3VyY2UvV1RG
L0NvbmZpZ3VyYXRpb25zL1dURi54Y2NvbmZpZwppbmRleCA0MjFlZmQ5NjFjMTQ2OGNkMjBkZGM1
YmJmODg5NjIwZWUxY2Y1OGRjLi44N2FhNjRmODdjNjdlZGM1YzhjYjZkZDA5MzNhODI4NmY5MGRh
OTY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NvbmZpZ3VyYXRpb25zL1dURi54Y2NvbmZpZwor
KysgYi9Tb3VyY2UvV1RGL0NvbmZpZ3VyYXRpb25zL1dURi54Y2NvbmZpZwpAQCAtMjcsMyArMjcs
NiBAQCBQUk9EVUNUX05BTUUgPSBXVEY7CiAKIEdDQ19TWU1CT0xTX1BSSVZBVEVfRVhURVJOID0g
WUVTOwogU1RSSVBfSU5TVEFMTEVEX1BST0RVQ1QgPSBOTzsKKworRVhDTFVERURfU09VUkNFX0ZJ
TEVfTkFNRVNfID0gTWFjaEV4Y2VwdGlvbnMuZGVmcworRVhDTFVERURfU09VUkNFX0ZJTEVfTkFN
RVMgPSAkKEVYQ0xVREVEX1NPVVJDRV9GSUxFX05BTUVTXyQoVVNFX0lOVEVSTkFMX1NESykpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA1ZjQ1Mjg3ZjZlM2M2
ODg1YjIyYmEyNzc2Y2ZiYzZhMzMyM2JkMDViLi41ODU0NGNjYjYyY2IyMjEyYmFlZTc2ZjRkMmEw
MWU4OWI2YjdiMDk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTY0LDYgKzY0LDcgQEAKIAkJNTIxODMwMTJDOTlFNDc2QTg0RUVCRUE4IC8qIFN5bWJvbElt
cGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjcy
QkJEQjEwN0ZBNDI0ODg2MTc4QjlFIC8qIFN5bWJvbEltcGwuY3BwICovOyB9OwogCQk1MzExQkQ1
MzFFQTcxQ0FEMDA1MjUyODEgLyogU2lnbmFscy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzExQkQ1MTFFQTcxQ0FEMDA1MjUyODEgLyogU2lnbmFs
cy5jcHAgKi87IH07CiAJCTUzMTFCRDVDMUVBODIyRjkwMDUyNTI4MSAvKiBUaHJlYWRNZXNzYWdl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMTFC
RDVCMUVBODIyRjkwMDUyNTI4MSAvKiBUaHJlYWRNZXNzYWdlLmNwcCAqLzsgfTsKKwkJNTM1MzRG
MkExRUMwRTEwRTAwMTQxQjJGIC8qIE1hY2hFeGNlcHRpb25zLmRlZnMgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzUzNEYyOTFFQzBFMTBFMDAxNDFCMkYg
LyogTWFjaEV4Y2VwdGlvbnMuZGVmcyAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChDbGll
bnQsIFNlcnZlciwgKTsgfTsgfTsKIAkJNzBBOTkzRkUxQUQ3MTUxMzAwRkE2MTVCIC8qIFN5bWJv
bFJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDcwQTk5M0ZDMUFENzE1MTMwMEZBNjE1QiAvKiBTeW1ib2xSZWdpc3RyeS5jcHAgKi87IH07
CiAJCTcwRUNBNjBEMUIwMjQyNjgwMDQ0OTczOSAvKiBBdG9taWNTdHJpbmdJbXBsLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcwRUNBNjBBMUIwMjQy
NjgwMDQ0OTczOSAvKiBBdG9taWNTdHJpbmdJbXBsLmNwcCAqLzsgfTsKIAkJN0FGRUM2QjExRUIy
MkI1OTAwREFERTM2IC8qIFVVSUQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0FGRUM2QjAxRUIyMkI1OTAwREFERTM2IC8qIFVVSUQuY3BwICovOyB9
OwpAQCAtMjk5LDYgKzMwMCw3IEBACiAJCTUzMTFCRDU3MUVBN0UxQTEwMDUyNTI4MSAvKiBTaWdu
YWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpZ25hbHMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMxMUJENTkxRUE4MUE5NjAwNTI1MjgxIC8qIFRocmVh
ZE1lc3NhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGhyZWFkTWVzc2Fn
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzExQkQ1QjFFQTgyMkY5MDA1MjUy
ODEgLyogVGhyZWFkTWVzc2FnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBUaHJlYWRNZXNzYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM1
MzRGMjkxRUMwRTEwRTAwMTQxQjJGIC8qIE1hY2hFeGNlcHRpb25zLmRlZnMgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLm1pZzsgcGF0aCA9IE1hY2hFeGNlcHRpb25zLmRlZnM7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUzOUVCMDYyMUQ1NTI4NDIwMEM4MkVGNyAvKiBMRUJEZWNvZGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExFQkRlY29kZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNFQzI1M0MxRTk1QUQzMDAwMDgzMUI5IC8qIFByaW9yaXR5
UXVldWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJpb3JpdHlRdWV1ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NTMwNzFDOTFDNDA0MjcyMDAzODQ4OTgg
LyogVGlueUxSVUNhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpbnlM
UlVDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTAyMyw2ICsxMDI1LDcg
QEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTFBNDI4QjhCMUM4Rjg5REQwMDUxRTlFQiAvKiBBcHBL
aXRDb21wYXRpYmlsaXR5RGVjbGFyYXRpb25zLmggKi8sCiAJCQkJMUFDQUREODIxODg0NDgwMTAw
RDhCNzFEIC8qIERlcHJlY2F0ZWRTeW1ib2xzVXNlZEJ5U2FmYXJpLm1tICovLAorCQkJCTUzNTM0
RjI5MUVDMEUxMEUwMDE0MUIyRiAvKiBNYWNoRXhjZXB0aW9ucy5kZWZzICovLAogCQkJCUE4QTQ3
MkM1MTUxQTgyNUEwMDQxMjNGRiAvKiBNYWluVGhyZWFkTWFjLm1tICovLAogCQkJKTsKIAkJCXBh
dGggPSBtYWM7CkBAIC0xMzQ2LDYgKzEzNDksNyBAQAogCQkJCTE0M0Y2MTFGMTU2NUYwRjkwMERC
NTE0QSAvKiBSQU1TaXplLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEzQjcyNUVDOTg3NDQ2QUQ5
M0YxQTQ0MCAvKiBSYW5kb21EZXZpY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0MTQx
NTFBODI1QjAwNDEyM0ZGIC8qIFJhbmRvbU51bWJlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1
MzUzNEYyQTFFQzBFMTBFMDAxNDFCMkYgLyogTWFjaEV4Y2VwdGlvbnMuZGVmcyBpbiBTb3VyY2Vz
ICovLAogCQkJCUE4QTQ3NDFBMTUxQTgyNUIwMDQxMjNGRiAvKiBSZWZDb3VudGVkTGVha0NvdW50
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkNERUQwRjMxODExNUM4NTAwNERCQTcwIC8qIFJ1
bkxvb3AuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkNERUQwRUYxODExNUMzODAwNERCQTcwIC8q
IFJ1bkxvb3BDRi5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L1BsYXRmb3JtLmggYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCmluZGV4IDY4NTRhODFlMzk3
MjcwNjcwMzRkMDVkYjM5OGE0NzBjMTQyODQyNzYuLjM2Mzg4Mzk1ZDRmNDNiNDY1Mzg5ZWJjOTgw
MmZiYjRkOTBkMjRiN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKKysr
IGIvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaApAQCAtNjYzLDYgKzY2MywxMCBAQAogI2RlZmlu
ZSBIQVZFX1JFQURMSU5FIDEKICNkZWZpbmUgSEFWRV9TWVNfVElNRUJfSCAxCiAKKyNpZiBfX2hh
c19pbmNsdWRlKDxtYWNoL21hY2hfZXhjLmRlZnM+KSAmJiAhKFBMQVRGT1JNKFdBVENIT1MpIHx8
IFBMQVRGT1JNKEFQUExFVFYpKQorI2RlZmluZSBIQVZFX01BQ0hfRVhDRVBUSU9OUyAxCisjZW5k
aWYKKwogI2lmICFQTEFURk9STShHVEspCiAjZGVmaW5lIFVTRV9BQ0NFTEVSQVRFIDEKICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1SZWdpc3RlcnMuaCBiL1NvdXJj
ZS9XVEYvd3RmL1BsYXRmb3JtUmVnaXN0ZXJzLmgKaW5kZXggZDViNWFiYzIyMWJiYWQ4Mjk3NjE5
M2VjZTUxYzFjNzYxNzVkYjA2ZC4uZDkxNjU4MTI4ODcwZmYzYTIxMmY0NmE0MDE2MzAwOGI2ODNl
ZWZkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1SZWdpc3RlcnMuaAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVJlZ2lzdGVycy5oCkBAIC0yNiw5ICsyNiwxMSBAQAog
I3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKyNpbmNsdWRlIDx3dGYv
U3RkTGliRXh0cmFzLmg+CiAKICNpZiBPUyhEQVJXSU4pCiAjaW5jbHVkZSA8bWFjaC90aHJlYWRf
YWN0Lmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CiAjZWxpZiBPUyhXSU5ET1dTKQogI2luY2x1ZGUg
PHdpbmRvd3MuaD4KICNlbHNlCkBAIC01NSw2ICs1NywxMSBAQCB0eXBlZGVmIGFybV90aHJlYWRf
c3RhdGU2NF90IFBsYXRmb3JtUmVnaXN0ZXJzOwogI2Vycm9yIFVua25vd24gQXJjaGl0ZWN0dXJl
CiAjZW5kaWYKIAoraW5saW5lIFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnNGcm9tVUNvbnRl
eHQodWNvbnRleHRfdCogdWNvbnRleHQpCit7CisgICAgcmV0dXJuIHVjb250ZXh0LT51Y19tY29u
dGV4dC0+X19zczsKK30KKwogI2VsaWYgT1MoV0lORE9XUykKIAogdXNpbmcgUGxhdGZvcm1SZWdp
c3RlcnMgPSBDT05URVhUOwpAQCAtNjUsNiArNzIsMTEgQEAgc3RydWN0IFBsYXRmb3JtUmVnaXN0
ZXJzIHsKICAgICBtY29udGV4dF90IG1hY2hpbmVDb250ZXh0OwogfTsKIAoraW5saW5lIFBsYXRm
b3JtUmVnaXN0ZXJzJiByZWdpc3RlcnNGcm9tVUNvbnRleHQodWNvbnRleHRfdCogdWNvbnRleHQp
Cit7CisgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxQbGF0Zm9ybVJlZ2lzdGVycyY+KHVjb250ZXh0
LT51Y19tY29udGV4dCk7Cit9CisKICNlbHNlCiAKIHN0cnVjdCBQbGF0Zm9ybVJlZ2lzdGVycyB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9TdGFja0JvdW5kcy5oIGIvU291cmNlL1dURi93
dGYvU3RhY2tCb3VuZHMuaAppbmRleCA1NTQ2MDRmMmFiNDg0YzdjZjcxZWUzODYzMGNlYjRjNzlj
MzNlOTcyLi5jZDYyYzE0OGE2YzdlZmM5NTE3YThiMDliOGEzMmM3ZmUxOTBjZGVmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi9TdGFja0JvdW5kcy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1N0
YWNrQm91bmRzLmgKQEAgLTU0LDcgKzU0LDYgQEAgcHVibGljOgogICAgICAgICA6IG1fb3JpZ2lu
KG9yaWdpbikKICAgICAgICAgLCBtX2JvdW5kKGVuZCkKICAgICB7Ci0gICAgICAgIGNoZWNrQ29u
c2lzdGVuY3koKTsKICAgICB9CiAKICAgICB2b2lkKiBvcmlnaW4oKSBjb25zdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvVGhyZWFkSG9sZGVyLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVh
ZEhvbGRlci5jcHAKaW5kZXggMzBiMjI3Y2RiOGFjNTI2MDc1MGI0N2Q0ODJhYmMyZDU1YmUzYWM5
NC4uOTZkOTFiNWI4N2RkZjk3ODgwNWRiNmViMWY2MGRjMDBlMTQ5YTQ4NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvVGhyZWFkSG9sZGVyLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJl
YWRIb2xkZXIuY3BwCkBAIC0zNCwxMiArMzQsMTcgQEAKIAogI2luY2x1ZGUgIlRocmVhZGluZy5o
IgogCisjaW5jbHVkZSA8d3RmL3RocmVhZHMvU2lnbmFscy5oPgorCiBuYW1lc3BhY2UgV1RGIHsK
IAogVGhyZWFkU3BlY2lmaWNLZXkgVGhyZWFkSG9sZGVyOjptX2tleSA9IEludmFsaWRUaHJlYWRT
cGVjaWZpY0tleTsKIAogVGhyZWFkSG9sZGVyOjp+VGhyZWFkSG9sZGVyKCkKIHsKKyNpZiBIQVZF
KE1BQ0hfRVhDRVBUSU9OUykKKyAgICByZW1vdmVUaHJlYWQoJm1fdGhyZWFkLmdldCgpKTsKKyNl
bmRpZgogICAgIG1fdGhyZWFkLT5kaWRFeGl0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL1RocmVhZE1lc3NhZ2UuY3BwIGIvU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5j
cHAKaW5kZXggZjE0YmM0NWQzNjE0YzdjNjYzNWViMTdhYjBlMjcyODE2YTEzNzNkZC4uMDViM2I4
OWQ1ZGQ0YjNkOGU0MzdkNTJiYTkzMGE5MzA3M2IxMzhiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvVGhyZWFkTWVzc2FnZS5jcHAKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2Fn
ZS5jcHAKQEAgLTM2LDYgKzM2LDkgQEAKICNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+CiAjaW5jbHVk
ZSA8d3RmL3RocmVhZHMvU2lnbmFscy5oPgogCisjaWYgSEFWRShNQUNIX0VYQ0VQVElPTlMpCisj
aW5jbHVkZSA8bWFjaC90aHJlYWRfYWN0Lmg+CisjZW5kaWYKIAogbmFtZXNwYWNlIFdURiB7CiAK
QEAgLTgzLDEyICs4NiwxMiBAQCB2b2lkIGluaXRpYWxpemVUaHJlYWRNZXNzYWdlcygpCiB9CiAK
IFNVUFBSRVNTX0FTQU4KLU1lc3NhZ2VTdGF0dXMgc2VuZE1lc3NhZ2VTY29wZWQoVGhyZWFkJiB0
aHJlYWQsIGNvbnN0IFRocmVhZE1lc3NhZ2UmIG1lc3NhZ2UpCitzdGF0aWMgTWVzc2FnZVN0YXR1
cyBzZW5kTWVzc2FnZVNpZ25hbChUaHJlYWQmIHRocmVhZCwgY29uc3QgVGhyZWFkTWVzc2FnZSYg
bWVzc2FnZSkKIHsKICAgICBjb25zdGV4cHIgU2lnbmFsIHNpZ25hbCA9IFNpZ25hbDo6VXNyOwog
ICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlOwogICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2Us
IFtdIHsKLSAgICAgICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoc2lnbmFsLCBbXSAoaW50LCBzaWdp
bmZvX3QqIGluZm8sIHZvaWQqIHVhcCkgeworICAgICAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihz
aWduYWwsIFtdIChTaWduYWwsIFNpZ0luZm8mLCBQbGF0Zm9ybVJlZ2lzdGVycyYgY29udGV4dCkg
ewogICAgICAgICAgICAgVGhyZWFkKiB0aHJlYWQgPSBUaHJlYWQ6OmN1cnJlbnRNYXlCZU51bGwo
KTsKIAogICAgICAgICAgICAgaWYgKCF0aHJlYWQpIHsKQEAgLTk4LDcgKzEwMSw3IEBAIE1lc3Nh
Z2VTdGF0dXMgc2VuZE1lc3NhZ2VTY29wZWQoVGhyZWFkJiB0aHJlYWQsIGNvbnN0IFRocmVhZE1l
c3NhZ2UmIG1lc3NhZ2UpCiAKICAgICAgICAgICAgIC8vIE5vZGUgc2hvdWxkIGJlIGRlbGV0ZWQg
aW4gdGhlIHNlbmRlciB0aHJlYWQuIERlbGV0aW5nIE5vZGVzIGluIHNpZ25hbCBoYW5kbGVyIGNh
dXNlcyBkZWFkIGxvY2suCiAgICAgICAgICAgICB0aHJlYWQtPnRocmVhZE1lc3NhZ2VzKCkuY29u
c3VtZUFsbFdpdGhOb2RlKFsmXSAoVGhyZWFkTWVzc2FnZURhdGEqIGRhdGEsIE5vZGUqIG5vZGUp
IHsKLSAgICAgICAgICAgICAgICBkYXRhLT5tZXNzYWdlKGluZm8sIHN0YXRpY19jYXN0PHVjb250
ZXh0X3QqPih1YXApKTsKKyAgICAgICAgICAgICAgICBkYXRhLT5tZXNzYWdlKGNvbnRleHQpOwog
ICAgICAgICAgICAgICAgIC8vIEJ5IHNldHRpbmcgcmFuIHZhcmlhYmxlLCAoMSkgdGhlIHNlbmRl
ciBhY2tub3dsZWRnZXMgdGhlIGNvbXBsZXRpb24gYW5kCiAgICAgICAgICAgICAgICAgLy8gKDIp
IGdldHMgdGhlIE5vZGUgdG8gYmUgZGVsZXRlZC4KICAgICAgICAgICAgICAgICBkYXRhLT5yYW4u
c3RvcmUobm9kZSk7CkBAIC0xNTYsNiArMTU5LDYwIEBAIE1lc3NhZ2VTdGF0dXMgc2VuZE1lc3Nh
Z2VTY29wZWQoVGhyZWFkJiB0aHJlYWQsIGNvbnN0IFRocmVhZE1lc3NhZ2UmIG1lc3NhZ2UpCiAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAorI2lmIEhBVkUoTUFDSF9FWENF
UFRJT05TKQorc3RhdGljIE1lc3NhZ2VTdGF0dXMgc2VuZE1lc3NhZ2VNYWNoKFRocmVhZCYgdGhy
ZWFkLCBjb25zdCBUaHJlYWRNZXNzYWdlJiBtZXNzYWdlKQoreworICAgIHN0YXRpYyBTdGF0aWNM
b2NrIG1lc3NhZ2VMb2NrOworICAgIGF1dG8gbG9ja2hvbGRlciA9IGhvbGRMb2NrKG1lc3NhZ2VM
b2NrKTsKKworICAgIGF1dG8gcmVzdWx0ID0gdGhyZWFkLnN1c3BlbmQoKTsKKyAgICBpZiAoIXJl
c3VsdCkKKyAgICAgICAgcmV0dXJuIE1lc3NhZ2VTdGF0dXM6OlRocmVhZEV4aXRlZDsKKworI2lm
IENQVShYODYpCisgICAgdW5zaWduZWQgdXNlckNvdW50ID0gc2l6ZW9mKFBsYXRmb3JtUmVnaXN0
ZXJzKSAvIHNpemVvZihpbnQpOworICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSBp
Mzg2X1RIUkVBRF9TVEFURTsKKyNlbGlmIENQVShYODZfNjQpCisgICAgdW5zaWduZWQgdXNlckNv
dW50ID0geDg2X1RIUkVBRF9TVEFURTY0X0NPVU5UOworICAgIHRocmVhZF9zdGF0ZV9mbGF2b3Jf
dCBmbGF2b3IgPSB4ODZfVEhSRUFEX1NUQVRFNjQ7CisjZWxpZiBDUFUoQVJNKQorICAgIHVuc2ln
bmVkIHVzZXJDb3VudCA9IEFSTV9USFJFQURfU1RBVEVfQ09VTlQ7CisgICAgdGhyZWFkX3N0YXRl
X2ZsYXZvcl90IGZsYXZvciA9IEFSTV9USFJFQURfU1RBVEU7CisjZWxpZiBDUFUoQVJNNjQpCisg
ICAgdW5zaWduZWQgdXNlckNvdW50ID0gQVJNX1RIUkVBRF9TVEFURTY0X0NPVU5UOworICAgIHRo
cmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSBBUk1fVEhSRUFEX1NUQVRFNjQ7CisjZWxzZQor
I2Vycm9yIFVua25vd24gQXJjaGl0ZWN0dXJlCisjZW5kaWYKKworICAgIFBsYXRmb3JtUmVnaXN0
ZXJzIHJlZ2lzdGVyczsKKyAgICB0aHJlYWRfc3RhdGVfdCBzdGF0ZSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dGhyZWFkX3N0YXRlX3Q+KCZyZWdpc3RlcnMpOworICAgIHRocmVhZF9nZXRfc3RhdGUodGhy
ZWFkLm1hY2hUaHJlYWQoKSwgZmxhdm9yLCBzdGF0ZSwgJnVzZXJDb3VudCk7CisKKyAgICBtZXNz
YWdlKHJlZ2lzdGVycyk7CisKKyAgICB0aHJlYWRfc2V0X3N0YXRlKHRocmVhZC5tYWNoVGhyZWFk
KCksIGZsYXZvciwgKHRocmVhZF9zdGF0ZV90KSZyZWdpc3RlcnMsIHVzZXJDb3VudCk7CisKKyAg
ICB0aHJlYWQucmVzdW1lKCk7CisgICAgcmV0dXJuIE1lc3NhZ2VTdGF0dXM6Ok1lc3NhZ2VSYW47
Cit9CisKK3N0YXRpYyBib29sIHVzZU1hY2ggPSBmYWxzZTsKK3ZvaWQgZGVsaXZlck1lc3NhZ2Vz
VXNpbmdNYWNoKCkgeyB1c2VNYWNoID0gdHJ1ZTsgfQorCisjZW5kaWYgLy8gSEFWRShNQUNIX0VY
Q0VQVElPTlMpCisKK01lc3NhZ2VTdGF0dXMgc2VuZE1lc3NhZ2VTY29wZWQoVGhyZWFkJiB0aHJl
YWQsIGNvbnN0IFRocmVhZE1lc3NhZ2UmIG1lc3NhZ2UpCit7CisjaWYgSEFWRShNQUNIX0VYQ0VQ
VElPTlMpCisgICAgaWYgKHVzZU1hY2gpCisgICAgICAgIHJldHVybiBzZW5kTWVzc2FnZU1hY2go
dGhyZWFkLCBtZXNzYWdlKTsKKyNlbmRpZgorICAgIHJldHVybiBzZW5kTWVzc2FnZVNpZ25hbCh0
aHJlYWQsIG1lc3NhZ2UpOworICAgIHJldHVybiBNZXNzYWdlU3RhdHVzOjpUaHJlYWRFeGl0ZWQ7
Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKICNlbmRpZiAvLyBVU0UoUFRIUkVBRFMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRNZXNzYWdlLmggYi9Tb3VyY2UvV1RGL3d0
Zi9UaHJlYWRNZXNzYWdlLmgKaW5kZXggOWFlNTNmMjljZjdlOGZiMDBlZjkyMTFkMTZjZTJjZGVk
NjAzZWMxYi4uMzAwNDcyYjNlNzFjNDJlYzg5ODc0YTNkZTBmZjM3NjFjYTk2OTEwYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5oCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L1RocmVhZE1lc3NhZ2UuaApAQCAtMzYsNyArMzYsNyBAQCBuYW1lc3BhY2UgV1RGIHsKIHZvaWQg
aW5pdGlhbGl6ZVRocmVhZE1lc3NhZ2VzKCk7CiAKIGNsYXNzIFRocmVhZE1lc3NhZ2VEYXRhOwot
dXNpbmcgVGhyZWFkTWVzc2FnZSA9IFNjb3BlZExhbWJkYTx2b2lkKHNpZ2luZm9fdCosIHVjb250
ZXh0X3QqKT47Cit1c2luZyBUaHJlYWRNZXNzYWdlID0gU2NvcGVkTGFtYmRhPHZvaWQoUGxhdGZv
cm1SZWdpc3RlcnMmKT47CiAKIGVudW0gY2xhc3MgTWVzc2FnZVN0YXR1cyB7CiAgICAgTWVzc2Fn
ZVJhbiwKQEAgLTUxLDEwICs1MSwxNCBAQCBNZXNzYWdlU3RhdHVzIHNlbmRNZXNzYWdlU2NvcGVk
KFRocmVhZCYsIGNvbnN0IFRocmVhZE1lc3NhZ2UmKTsKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
b3I+CiBNZXNzYWdlU3RhdHVzIHNlbmRNZXNzYWdlKFRocmVhZCYgdGFyZ2V0VGhyZWFkLCBjb25z
dCBGdW5jdG9yJiBmdW5jKQogewotICAgIGF1dG8gbGFtYmRhID0gc2NvcGVkTGFtYmRhUmVmPHZv
aWQoc2lnaW5mb190KiwgdWNvbnRleHRfdCopPihmdW5jKTsKKyAgICBhdXRvIGxhbWJkYSA9IHNj
b3BlZExhbWJkYVJlZjx2b2lkKFBsYXRmb3JtUmVnaXN0ZXJzJik+KGZ1bmMpOwogICAgIHJldHVy
biBzZW5kTWVzc2FnZVNjb3BlZCh0YXJnZXRUaHJlYWQsIGxhbWJkYSk7CiB9CiAKKyNpZiBIQVZF
KE1BQ0hfRVhDRVBUSU9OUykKK3ZvaWQgZGVsaXZlck1lc3NhZ2VzVXNpbmdNYWNoKCk7CisjZW5k
aWYKKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6c2VuZE1lc3NhZ2U7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaCBiL1NvdXJjZS9XVEYvd3RmL1RocmVh
ZGluZy5oCmluZGV4IGQyZTUzNmRmN2E4Njk2ZDhlNmI5NWJhNDNlMTczZDNiNTUwYmYxNmEuLjM1
MTRlOGMwOWYwZmM5NGQ1MzRiZTJmM2I2ZTdjNDk1MGUwYmNmMDUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL1RocmVhZGluZy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5oCkBA
IC0xMzgsNiArMTM4LDEwIEBAIHB1YmxpYzoKIAogI2lmIFVTRShQVEhSRUFEUykKICAgICBMb2Nr
bGVzc0JhZzxUaHJlYWRNZXNzYWdlRGF0YSo+JiB0aHJlYWRNZXNzYWdlcygpIHsgcmV0dXJuIG1f
dGhyZWFkTWVzc2FnZXM7IH0KKworI2lmIE9TKERBUldJTikKKyAgICBtYWNoX3BvcnRfdCBtYWNo
VGhyZWFkKCkgeyByZXR1cm4gbV9wbGF0Zm9ybVRocmVhZDsgfQorI2VuZGlmCiAjZW5kaWYKIAog
cHJvdGVjdGVkOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvbWFjL01hY2hFeGNlcHRpb25z
LmRlZnMgYi9Tb3VyY2UvV1RGL3d0Zi9tYWMvTWFjaEV4Y2VwdGlvbnMuZGVmcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li40MjA1NzQyYTRlZDUwMGY4MDY0ZmVlYjQ5NTVhN2M5NzBkOTlhZjBiCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dURi93dGYvbWFjL01hY2hFeGNlcHRpb25zLmRlZnMKQEAgLTAsMCArMSwy
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlIDxtYWNoL21hY2hfZXhjLmRlZnM+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90aHJl
YWRzL1NpZ25hbHMuY3BwIGIvU291cmNlL1dURi93dGYvdGhyZWFkcy9TaWduYWxzLmNwcAppbmRl
eCA4NTViMjhiMzE3MjE3MjdjZjFmNDMxYTkxOGEyNTFkYzJlNmEzZGZjLi4wNzIzODk3ZDhhYTU1
NTA4ZTQ5NDdhNTI2MmViZDc3MTI1MWJlMTI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90
aHJlYWRzL1NpZ25hbHMuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RocmVhZHMvU2lnbmFscy5j
cHAKQEAgLTI4LDIxICsyOCwyNjIgQEAKIAogI2lmIFVTRShQVEhSRUFEUykKIAorI2lmIEhBVkUo
TUFDSF9FWENFUFRJT05TKQorZXh0ZXJuICJDIiB7CisjaW5jbHVkZSAiTWFjaEV4Y2VwdGlvbnNT
ZXJ2ZXIuaCIKK307CisjZW5kaWYKKwogI2luY2x1ZGUgPGNzdGRpbz4KICNpbmNsdWRlIDxtdXRl
eD4KICNpbmNsdWRlIDxzaWduYWwuaD4KKworI2lmIEhBVkUoTUFDSF9FWENFUFRJT05TKQorI2lu
Y2x1ZGUgPG1hY2gvbWFjaC5oPgorI2luY2x1ZGUgPG1hY2gvdGhyZWFkX2FjdC5oPgorI2VuZGlm
CisKICNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+Cisj
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTG9ja2xlc3NCYWcuaD4KICNp
bmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkTWVzc2Fn
ZS5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKwogCiBuYW1lc3BhY2UgV1RGIHsKIAor
ICAgIAogc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxMb2NrbGVzc0JhZzxTaWduYWxIYW5kbGVy
Pj4gaGFuZGxlcnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihTaWduYWw6Ok51bWJlck9mU2lnbmFscyld
ID0geyB9Owotc3RhdGljIHN0cnVjdCBzaWdhY3Rpb24gb2xkQWN0aW9uc1tzdGF0aWNfY2FzdDxz
aXplX3Q+KFNpZ25hbDo6TnVtYmVyT2ZTaWduYWxzKV07CiBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcg
aW5pdGlhbGl6ZU9uY2VGbGFnc1tzdGF0aWNfY2FzdDxzaXplX3Q+KFNpZ25hbDo6TnVtYmVyT2ZT
aWduYWxzKV07CitzdGF0aWMgc3RydWN0IHNpZ2FjdGlvbiBvbGRBY3Rpb25zW3N0YXRpY19jYXN0
PHNpemVfdD4oU2lnbmFsOjpOdW1iZXJPZlNpZ25hbHMpXTsKKworI2lmIEhBVkUoTUFDSF9FWENF
UFRJT05TKQorc3RhdGljIG1hY2hfcG9ydF90IGV4Y2VwdGlvblBvcnQ7CitzdGF0aWMgY29uc3Rl
eHByIHNpemVfdCBtYXhNZXNzYWdlU2l6ZSA9IDEgKiBLQjsKKworc3RhdGljIHZvaWQgc3RhcnRN
YWNoRXhjZXB0aW9uSGFuZGxlclRocmVhZCgpCit7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFn
IG9uY2U7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZSwgW10geworICAgICAgICBpZiAobWFjaF9w
b3J0X2FsbG9jYXRlKG1hY2hfdGFza19zZWxmKCksIE1BQ0hfUE9SVF9SSUdIVF9SRUNFSVZFLCAm
ZXhjZXB0aW9uUG9ydCkgIT0gS0VSTl9TVUNDRVNTKQorICAgICAgICAgICAgQ1JBU0goKTsKKwor
ICAgICAgICBpZiAobWFjaF9wb3J0X2luc2VydF9yaWdodChtYWNoX3Rhc2tfc2VsZigpLCBleGNl
cHRpb25Qb3J0LCBleGNlcHRpb25Qb3J0LCBNQUNIX01TR19UWVBFX01BS0VfU0VORCkhPSBLRVJO
X1NVQ0NFU1MpCisgICAgICAgICAgICBDUkFTSCgpOworCisgICAgICAgIC8vIEZJWE1FOiBUaGlz
IHNob3VsZCB1c2UgYSBkaXNwYXRjaCBxdWV1ZS4KKyAgICAgICAgKHZvaWQpVGhyZWFkOjpjcmVh
dGUoCisgICAgICAgICAgICAiV1RGIE1hY2ggRXhjZXB0aW9uIFRocmVhZCIsIFtdICgpIHsKKyAg
ICAgICAgICAgICAgICB1bmlvbiBNZXNzYWdlIHsKKyAgICAgICAgICAgICAgICAgICAgbWFjaF9t
c2dfaGVhZGVyX3QgaGVhZGVyOworICAgICAgICAgICAgICAgICAgICBjaGFyIGRhdGFbbWF4TWVz
c2FnZVNpemVdOworICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgTWVzc2FnZSBt
ZXNzYWdlSGVhZGVySW47CisgICAgICAgICAgICAgICAgTWVzc2FnZSBtZXNzYWdlSGVhZGVyT3V0
OworCisgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgICAgICAgICAg
a2Vybl9yZXR1cm5fdCBtZXNzYWdlUmVzdWx0ID0gbWFjaF9tc2coJm1lc3NhZ2VIZWFkZXJJbi5o
ZWFkZXIsIE1BQ0hfUkNWX01TRywgMCwgbWF4TWVzc2FnZVNpemUsIGV4Y2VwdGlvblBvcnQsIE1B
Q0hfTVNHX1RJTUVPVVRfTk9ORSwgTUFDSF9QT1JUX05VTEwpOworICAgICAgICAgICAgICAgICAg
ICBpZiAobWVzc2FnZVJlc3VsdCA9PSBLRVJOX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghbWFjaF9leGNfc2VydmVyKCZtZXNzYWdlSGVhZGVySW4uaGVhZGVyLCAmbWVz
c2FnZUhlYWRlck91dC5oZWFkZXIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENSQVNI
KCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VSZXN1bHQgPSBtYWNoX21zZygm
bWVzc2FnZUhlYWRlck91dC5oZWFkZXIsIE1BQ0hfU0VORF9NU0csIG1lc3NhZ2VIZWFkZXJPdXQu
aGVhZGVyLm1zZ2hfc2l6ZSwgMCwgbWVzc2FnZUhlYWRlck91dC5oZWFkZXIubXNnaF9sb2NhbF9w
b3J0LCAwLCBNQUNIX1BPUlRfTlVMTCk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChtZXNzYWdlUmVzdWx0ID09IEtFUk5fU1VDQ0VTUyk7CisgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJGYWlsZWQgdG8g
cmVjZWl2ZSBtYWNoIG1lc3NhZ2UgZHVlIHRvICIsIG1hY2hfZXJyb3Jfc3RyaW5nKG1lc3NhZ2VS
ZXN1bHQpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0pLmxlYWtSZWYoKTsKKyAgICB9
KTsKK30KKworc3RhdGljIFNpZ25hbCBmcm9tTWFjaEV4Y2VwdGlvbihleGNlcHRpb25fdHlwZV90
IHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBFWENfQkFEX0FDQ0VTUzog
cmV0dXJuIFNpZ25hbDo6U2VnVjsKKyAgICBjYXNlIEVYQ19CQURfSU5TVFJVQ1RJT046IHJldHVy
biBTaWduYWw6OklsbDsKKyAgICBjYXNlIEVYQ19CUkVBS1BPSU5UOiByZXR1cm4gU2lnbmFsOjpU
cmFwOworICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gU2lnbmFsOjpVbmtu
b3duOworfQorCitzdGF0aWMgZXhjZXB0aW9uX21hc2tfdCB0b01hY2hNYXNrKFNpZ25hbCBzaWdu
YWwpCit7CisgICAgc3dpdGNoIChzaWduYWwpIHsKKyAgICBjYXNlIFNpZ25hbDo6U2VnVjogcmV0
dXJuIEVYQ19NQVNLX0JBRF9BQ0NFU1M7CisgICAgY2FzZSBTaWduYWw6OklsbDogcmV0dXJuIEVY
Q19NQVNLX0JBRF9JTlNUUlVDVElPTjsKKyAgICBjYXNlIFNpZ25hbDo6VHJhcDogcmV0dXJuIEVY
Q19NQVNLX0JSRUFLUE9JTlQ7CisgICAgZGVmYXVsdDogYnJlYWs7CisgICAgfQorICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2V4dGVybiAiQyIgeworCisvLyBXZSBuZWVk
IHRvIGltcGxlbWVudCBzdHVicyBmb3IgY2F0Y2hfbWFjaF9leGNlcHRpb25fcmFpc2UgYW5kIGNh
dGNoX21hY2hfZXhjZXB0aW9uX3JhaXNlX3N0YXRlX2lkZW50aXR5LgorLy8gVGhlIE1pRyBnZW5l
cmF0ZWQgZmlsZSB3aWxsIGZhaWwgdG8gbGluayBvdGhlcndpc2UsIGV2ZW4gdGhvdWdoIHdlIGRv
bid0IHVzZSB0aGUgZnVuY3Rpb25zLiBPbmx5IHRoZQorLy8gY2F0Y2hfbWFjaF9leGNlcHRpb25f
cmFpc2Vfc3RhdGUgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBiZWNhdXNlIHdlIHBhc3MgRVhD
RVBUSU9OX1NUQVRFIHRvCisvLyB0aHJlYWRfc2V0X2V4Y2VwdGlvbl9wb3J0cy4KK2tlcm5fcmV0
dXJuX3QgY2F0Y2hfbWFjaF9leGNlcHRpb25fcmFpc2UobWFjaF9wb3J0X3QsIG1hY2hfcG9ydF90
LCBtYWNoX3BvcnRfdCwgZXhjZXB0aW9uX3R5cGVfdCwgbWFjaF9leGNlcHRpb25fZGF0YV90LCBt
YWNoX21zZ190eXBlX251bWJlcl90KQoreworICAgIGRhdGFMb2dMbigiV2Ugc2hvdWxkIG5vdCBo
YXZlIGNhbGxlZCBjYXRjaF9leGNlcHRpb25fcmFpc2UoKSwgcGxlYXNlIGZpbGUgYSBidWcgYXQg
YnVncy53ZWJraXQub3JnIik7CisgICAgcmV0dXJuIEtFUk5fRkFJTFVSRTsKK30KKwora2Vybl9y
ZXR1cm5fdCBjYXRjaF9tYWNoX2V4Y2VwdGlvbl9yYWlzZV9zdGF0ZV9pZGVudGl0eShtYWNoX3Bv
cnRfdCwgbWFjaF9wb3J0X3QsIG1hY2hfcG9ydF90LCBleGNlcHRpb25fdHlwZV90LCBtYWNoX2V4
Y2VwdGlvbl9kYXRhX3QsIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QsIGludCosIHRocmVhZF9zdGF0
ZV90LCBtYWNoX21zZ190eXBlX251bWJlcl90LCB0aHJlYWRfc3RhdGVfdCwgIG1hY2hfbXNnX3R5
cGVfbnVtYmVyX3QqKQoreworICAgIGRhdGFMb2dMbigiV2Ugc2hvdWxkIG5vdCBoYXZlIGNhbGxl
ZCBjYXRjaF9tYWNoX2V4Y2VwdGlvbl9yYWlzZV9zdGF0ZV9pZGVudGl0eSwgcGxlYXNlIGZpbGUg
YSBidWcgYXQgYnVncy53ZWJraXQub3JnIik7CisgICAgcmV0dXJuIEtFUk5fRkFJTFVSRTsKK30K
Kwora2Vybl9yZXR1cm5fdCBjYXRjaF9tYWNoX2V4Y2VwdGlvbl9yYWlzZV9zdGF0ZSgKKyAgICBt
YWNoX3BvcnRfdCBwb3J0LAorICAgIGV4Y2VwdGlvbl90eXBlX3QgZXhjZXB0aW9uVHlwZSwKKyAg
ICBjb25zdCBtYWNoX2V4Y2VwdGlvbl9kYXRhX3QgZXhjZXB0aW9uRGF0YSwKKyAgICBtYWNoX21z
Z190eXBlX251bWJlcl90IGRhdGFDb3VudCwKKyAgICBpbnQqIHN0YXRlRmxhdm9yLAorICAgIGNv
bnN0IHRocmVhZF9zdGF0ZV90IGluU3RhdGUsCisgICAgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCBp
blN0YXRlQ291bnQsCisgICAgdGhyZWFkX3N0YXRlX3Qgb3V0U3RhdGUsCisgICAgbWFjaF9tc2df
dHlwZV9udW1iZXJfdCogb3V0U3RhdGVDb3VudCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChwb3J0
ID09IGV4Y2VwdGlvblBvcnQpOworICAgIFNpZ25hbCBzaWduYWwgPSBmcm9tTWFjaEV4Y2VwdGlv
bihleGNlcHRpb25UeXBlKTsKKyAgICBkYXRhTG9nTG4oInJlY2VpdmVkU2lnbmFsICIsIGV4Y2Vw
dGlvblR5cGUpOworICAgIGRhdGFMb2dMbigiVGhyZWFkOiAiLCBleGNlcHRpb25EYXRhWzBdKTsK
KyAgICBSRUxFQVNFX0FTU0VSVChzaWduYWwgIT0gU2lnbmFsOjpVbmtub3duKTsKKworICAgIG1l
bWNweShvdXRTdGF0ZSwgaW5TdGF0ZSwgaW5TdGF0ZUNvdW50ICogc2l6ZW9mKGluU3RhdGVbMF0p
KTsKKyAgICAqb3V0U3RhdGVDb3VudCA9IGluU3RhdGVDb3VudDsKKworI2lmIENQVShYODZfNjQp
CisgICAgUkVMRUFTRV9BU1NFUlQoKnN0YXRlRmxhdm9yID09IHg4Nl9USFJFQURfU1RBVEUpOwor
ICAgIFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMgPSByZWludGVycHJldF9jYXN0PHg4Nl90
aHJlYWRfc3RhdGVfdCo+KG91dFN0YXRlKS0+dXRzLnRzNjQ7CisjZWxpZiBDUFUoWDg2KQorICAg
IFJFTEVBU0VfQVNTRVJUKCpzdGF0ZUZsYXZvciA9PSB4ODZfVEhSRUFEX1NUQVRFKTsKKyAgICBQ
bGF0Zm9ybVJlZ2lzdGVycyYgcmVnaXN0ZXJzID0gcmVpbnRlcnByZXRfY2FzdDx4ODZfdGhyZWFk
X3N0YXRlX3QqPihvdXRTdGF0ZSktPnV0cy50czMyOworI2VsaWYgQ1BVKEFSTTY0KQorICAgIFJF
TEVBU0VfQVNTRVJUKCpzdGF0ZUZsYXZvciA9PSBBUk1fVEhSRUFEX1NUQVRFKTsKKyAgICBQbGF0
Zm9ybVJlZ2lzdGVycyYgcmVnaXN0ZXJzID0gcmVpbnRlcnByZXRfY2FzdDxhcm1fdW5pZmllZF90
aHJlYWRfc3RhdGUqPihvdXRTdGF0ZSktPnRzXzY0OworI2VsaWYgQ1BVKEFSTSkKKyAgICBSRUxF
QVNFX0FTU0VSVCgqc3RhdGVGbGF2b3IgPT0gQVJNX1RIUkVBRF9TVEFURSk7CisgICAgUGxhdGZv
cm1SZWdpc3RlcnMmIHJlZ2lzdGVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8YXJtX3VuaWZpZWRfdGhy
ZWFkX3N0YXRlKj4ob3V0U3RhdGUpLT50c18zMjsKKyNlbmRpZgorCisgICAgU2lnSW5mbyBpbmZv
OworICAgIGlmIChzaWduYWwgPT0gU2lnbmFsOjpTZWdWKSB7CisgICAgICAgIEFTU0VSVF9VTlVT
RUQoZGF0YUNvdW50LCBkYXRhQ291bnQgPT0gMik7CisgICAgICAgIGluZm8uZmF1bHRpbmdBZGRy
ZXNzID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZXhjZXB0aW9uRGF0YVsxXSk7CisgICAgfQor
CisgICAgYm9vbCBkaWRIYW5kbGUgPSBmYWxzZTsKKyAgICBoYW5kbGVyc1tzdGF0aWNfY2FzdDxz
aXplX3Q+KHNpZ25hbCldLT5pdGVyYXRlKFsmXSAoY29uc3QgU2lnbmFsSGFuZGxlciYgaGFuZGxl
cikgeworICAgICAgICBTaWduYWxBY3Rpb24gaGFuZGxlclJlc3VsdCA9IGhhbmRsZXIoc2lnbmFs
LCBpbmZvLCByZWdpc3RlcnMpOworICAgICAgICBkYXRhTG9nTG4oc3RhdGljX2Nhc3Q8aW50Piho
YW5kbGVyUmVzdWx0KSk7CisgICAgICAgIHN3aXRjaCAoaGFuZGxlclJlc3VsdCkgeworICAgICAg
ICBjYXNlIFNpZ25hbEFjdGlvbjo6SGFuZGxlZDoKKyAgICAgICAgICAgIGRpZEhhbmRsZSA9IHRy
dWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfSk7CisKKyAgICBpZiAoZGlkSGFuZGxlKQorICAgICAgICBy
ZXR1cm4gS0VSTl9TVUNDRVNTOworICAgIHJldHVybiBLRVJOX0ZBSUxVUkU7Cit9CisKK307CisK
K3N0YXRpYyBib29sIHVzZU1hY2ggeyBmYWxzZSB9Owordm9pZCBoYW5kbGVTaWduYWxzV2l0aE1h
Y2goKQoreworICAgIGRlbGl2ZXJNZXNzYWdlc1VzaW5nTWFjaCgpOworICAgIHVzZU1hY2ggPSB0
cnVlOworfQorCisKK3N0YXRpYyBTdGF0aWNMb2NrIHRocmVhZExvY2s7CitleGNlcHRpb25fbWFz
a190IGFjdGl2ZUV4Y2VwdGlvbnMgeyAwIH07CisKK2lubGluZSB2b2lkIHNldEV4Y2VwdGlvblBv
cnRzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgVGhyZWFkKiB0aHJlYWQpCit7CisgICAga2Vybl9y
ZXR1cm5fdCByZXN1bHQgPSB0aHJlYWRfc2V0X2V4Y2VwdGlvbl9wb3J0cyh0aHJlYWQtPm1hY2hU
aHJlYWQoKSwgYWN0aXZlRXhjZXB0aW9ucywgZXhjZXB0aW9uUG9ydCwgRVhDRVBUSU9OX1NUQVRF
IHwgTUFDSF9FWENFUFRJT05fQ09ERVMsIE1BQ0hJTkVfVEhSRUFEX1NUQVRFKTsKKyAgICBpZiAo
cmVzdWx0ICE9IEtFUk5fU1VDQ0VTUykgeworICAgICAgICBkYXRhTG9nTG4oInRocmVhZCBzZXQg
cG9ydCBmYWlsZWQgZHVlIHRvICIsIG1hY2hfZXJyb3Jfc3RyaW5nKHJlc3VsdCkpOworICAgICAg
ICBDUkFTSCgpOworICAgIH0KK30KKworaW5saW5lIEhhc2hTZXQ8VGhyZWFkKj4mIGFjdGl2ZVRo
cmVhZHMoY29uc3QgQWJzdHJhY3RMb2NrZXImKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxIYXNoU2V0PFRocmVhZCo+PiBhY3RpdmVUaHJlYWRzOworICAgIHJldHVybiBhY3RpdmVUaHJl
YWRzOworfQorCit2b2lkIHJlZ2lzdGVyVGhyZWFkKFRocmVhZCogdGhyZWFkKQoreworICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2sodGhyZWFkTG9jayk7CisgICAgYXV0byByZXN1bHQgPSBhY3Rp
dmVUaHJlYWRzKGxvY2tlcikuYWRkKHRocmVhZCk7CisKKyAgICBpZiAocmVzdWx0LmlzTmV3RW50
cnkpCisgICAgICAgIHNldEV4Y2VwdGlvblBvcnRzKGxvY2tlciwgdGhyZWFkKTsKK30KKwordm9p
ZCByZW1vdmVUaHJlYWQoVGhyZWFkKiB0aHJlYWQpCit7CisgICAgYXV0byBsb2NrZXIgPSBob2xk
TG9jayh0aHJlYWRMb2NrKTsKKyAgICBhY3RpdmVUaHJlYWRzKGxvY2tlcikucmVtb3ZlKHRocmVh
ZCk7Cit9CiAKLXN0YXRpYyB2b2lkIGpzY1NpZ25hbEhhbmRsZXIoaW50IHNpZywgc2lnaW5mb190
KiBpbmZvLCB2b2lkKiBtY29udGV4dCkKKyNlbmRpZiAvLyBIQVZFKE1BQ0hfRVhDRVBUSU9OUykK
Kworc3RhdGljIHZvaWQganNjU2lnbmFsSGFuZGxlcihpbnQsIHNpZ2luZm9fdCosIHZvaWQqKTsK
Kwordm9pZCBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWwgc2lnbmFsLCBTaWduYWxIYW5kbGVy
JiYgaGFuZGxlcikKK3sKKyAgICBBU1NFUlQoc2lnbmFsIDwgU2lnbmFsOjpVbmtub3duKTsKKyAg
ICBpZiAoc2lnbmFsID09IFNpZ25hbDo6QnVzICYmICF1c2VNYWNoKQorICAgICAgICByZXR1cm47
CisgICAgQVNTRVJUKCF1c2VNYWNoIHx8IHNpZ25hbCAhPSBTaWduYWw6OlVzcik7CisKKyNpZiBI
QVZFKE1BQ0hfRVhDRVBUSU9OUykKKyAgICBpZiAodXNlTWFjaCkKKyAgICAgICAgc3RhcnRNYWNo
RXhjZXB0aW9uSGFuZGxlclRocmVhZCgpOworI2VuZGlmCisKKyAgICBzdGQ6OmNhbGxfb25jZShp
bml0aWFsaXplT25jZUZsYWdzW3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0sIFsmXSB7Cisg
ICAgICAgIGhhbmRsZXJzW3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0uY29uc3RydWN0KCk7
CisKKyAgICAgICAgaWYgKCF1c2VNYWNoKSB7CisgICAgICAgICAgICBzdHJ1Y3Qgc2lnYWN0aW9u
IGFjdGlvbjsKKyAgICAgICAgICAgIGFjdGlvbi5zYV9zaWdhY3Rpb24gPSBqc2NTaWduYWxIYW5k
bGVyOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBzaWdmaWxsc2V0KCZhY3Rpb24uc2FfbWFz
ayk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmVzdWx0KTsKKyAgICAgICAgICAgIGFj
dGlvbi5zYV9mbGFncyA9IFNBX1NJR0lORk87CisgICAgICAgICAgICByZXN1bHQgPSBzaWdhY3Rp
b24odG9TeXN0ZW1TaWduYWwoc2lnbmFsKSwgJmFjdGlvbiwgJm9sZEFjdGlvbnNbc3RhdGljX2Nh
c3Q8c2l6ZV90PihzaWduYWwpXSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmVzdWx0
KTsKKyAgICAgICAgfQorCisgICAgfSk7CisKKyAgICBoYW5kbGVyc1tzdGF0aWNfY2FzdDxzaXpl
X3Q+KHNpZ25hbCldLT5hZGQoV1RGTW92ZShoYW5kbGVyKSk7CisKKyNpZiBIQVZFKE1BQ0hfRVhD
RVBUSU9OUykKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHRocmVhZExvY2spOworICAgIGlm
ICh1c2VNYWNoKSB7CisgICAgICAgIGFjdGl2ZUV4Y2VwdGlvbnMgfD0gdG9NYWNoTWFzayhzaWdu
YWwpOworCisgICAgICAgIGZvciAoVGhyZWFkKiB0aHJlYWQgOiBhY3RpdmVUaHJlYWRzKGxvY2tl
cikpCisgICAgICAgICAgICBzZXRFeGNlcHRpb25Qb3J0cyhsb2NrZXIsIHRocmVhZCk7CisgICAg
fQorI2VuZGlmCit9CisKK3ZvaWQganNjU2lnbmFsSGFuZGxlcihpbnQgc2lnLCBzaWdpbmZvX3Qq
IGluZm8sIHZvaWQqIHVjb250ZXh0KQogewogICAgIFNpZ25hbCBzaWduYWwgPSBmcm9tU3lzdGVt
U2lnbmFsKHNpZyk7CiAKQEAgLTYyLDEwICszMDMsMTYgQEAgc3RhdGljIHZvaWQganNjU2lnbmFs
SGFuZGxlcihpbnQgc2lnLCBzaWdpbmZvX3QqIGluZm8sIHZvaWQqIG1jb250ZXh0KQogICAgICAg
ICByZXR1cm47CiAgICAgfQogCisgICAgU2lnSW5mbyBzaWdJbmZvOworICAgIGlmIChzaWduYWwg
PT0gU2lnbmFsOjpTZWdWIHx8IHNpZ25hbCA9PSBTaWduYWw6OkJ1cykKKyAgICAgICAgc2lnSW5m
by5mYXVsdGluZ0FkZHJlc3MgPSBpbmZvLT5zaV9hZGRyOworCisgICAgUGxhdGZvcm1SZWdpc3Rl
cnMmIHJlZ2lzdGVycyA9IHJlZ2lzdGVyc0Zyb21VQ29udGV4dChyZWludGVycHJldF9jYXN0PHVj
b250ZXh0X3QqPih1Y29udGV4dCkpOworCiAgICAgYm9vbCBkaWRIYW5kbGUgPSBmYWxzZTsKICAg
ICBib29sIHJlc3RvcmVEZWZhdWx0SGFuZGxlciA9IGZhbHNlOwogICAgIGhhbmRsZXJzW3N0YXRp
Y19jYXN0PHNpemVfdD4oc2lnbmFsKV0tPml0ZXJhdGUoWyZdIChjb25zdCBTaWduYWxIYW5kbGVy
JiBoYW5kbGVyKSB7Ci0gICAgICAgIHN3aXRjaCAoaGFuZGxlcihzaWcsIGluZm8sIG1jb250ZXh0
KSkgeworICAgICAgICBzd2l0Y2ggKGhhbmRsZXIoc2lnbmFsLCBzaWdJbmZvLCByZWdpc3RlcnMp
KSB7CiAgICAgICAgIGNhc2UgU2lnbmFsQWN0aW9uOjpIYW5kbGVkOgogICAgICAgICAgICAgZGlk
SGFuZGxlID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtODUsMTMgKzMzMiwxMyBAQCBz
dGF0aWMgdm9pZCBqc2NTaWduYWxIYW5kbGVyKGludCBzaWcsIHNpZ2luZm9fdCogaW5mbywgdm9p
ZCogbWNvbnRleHQpCiAgICAgc3RydWN0IHNpZ2FjdGlvbiYgb2xkQWN0aW9uID0gb2xkQWN0aW9u
c1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNpZ25hbCldOwogICAgIGlmIChzaWduYWwgPT0gU2lnbmFs
OjpVc3IpIHsKICAgICAgICAgaWYgKG9sZEFjdGlvbi5zYV9zaWdhY3Rpb24pCi0gICAgICAgICAg
ICBvbGRBY3Rpb24uc2Ffc2lnYWN0aW9uKHNpZywgaW5mbywgbWNvbnRleHQpOworICAgICAgICAg
ICAgb2xkQWN0aW9uLnNhX3NpZ2FjdGlvbihzaWcsIGluZm8sIHVjb250ZXh0KTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAogICAgIGlmICghZGlkSGFuZGxlKSB7CiAgICAgICAgIGlmIChvbGRB
Y3Rpb24uc2Ffc2lnYWN0aW9uKSB7Ci0gICAgICAgICAgICBvbGRBY3Rpb24uc2Ffc2lnYWN0aW9u
KHNpZywgaW5mbywgbWNvbnRleHQpOworICAgICAgICAgICAgb2xkQWN0aW9uLnNhX3NpZ2FjdGlv
bihzaWcsIGluZm8sIHVjb250ZXh0KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
CkBAIC0xMDAsMjQgKzM0Nyw2IEBAIHN0YXRpYyB2b2lkIGpzY1NpZ25hbEhhbmRsZXIoaW50IHNp
Zywgc2lnaW5mb190KiBpbmZvLCB2b2lkKiBtY29udGV4dCkKICAgICB9CiB9CiAKLXZvaWQgaW5z
dGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFsIHNpZ25hbCwgU2lnbmFsSGFuZGxlciYmIGhhbmRsZXIp
Ci17Ci0gICAgQVNTRVJUKHNpZ25hbCA8IFNpZ25hbDo6VW5rbm93bik7Ci0gICAgc3RkOjpjYWxs
X29uY2UoaW5pdGlhbGl6ZU9uY2VGbGFnc1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNpZ25hbCldLCBb
Jl0gewotICAgICAgICBoYW5kbGVyc1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNpZ25hbCldLmNvbnN0
cnVjdCgpOwotCi0gICAgICAgIHN0cnVjdCBzaWdhY3Rpb24gYWN0aW9uOwotICAgICAgICBhY3Rp
b24uc2Ffc2lnYWN0aW9uID0ganNjU2lnbmFsSGFuZGxlcjsKLSAgICAgICAgYXV0byByZXN1bHQg
PSBzaWdmaWxsc2V0KCZhY3Rpb24uc2FfbWFzayk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFy
ZXN1bHQpOwotICAgICAgICBhY3Rpb24uc2FfZmxhZ3MgPSBTQV9TSUdJTkZPOwotICAgICAgICBy
ZXN1bHQgPSBzaWdhY3Rpb24odG9TeXN0ZW1TaWduYWwoc2lnbmFsKSwgJmFjdGlvbiwgJm9sZEFj
dGlvbnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzaWduYWwpXSk7Ci0gICAgICAgIFJFTEVBU0VfQVNT
RVJUKCFyZXN1bHQpOwotICAgIH0pOwotCi0gICAgaGFuZGxlcnNbc3RhdGljX2Nhc3Q8c2l6ZV90
PihzaWduYWwpXS0+YWRkKFdURk1vdmUoaGFuZGxlcikpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBX
VEYKIAogI2VuZGlmIC8vIFVTRShQVEhSRUFEUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L3RocmVhZHMvU2lnbmFscy5oIGIvU291cmNlL1dURi93dGYvdGhyZWFkcy9TaWduYWxzLmgKaW5k
ZXggMWU0ZWI0NmVhYTc3NGExZWU4OWY2ZmIyZGFlZjMzMjY4Y2U1Njc3OS4uYWNhNmIzNGY4MTZm
MDE3NjkzMDAzNmMxOGI4MjFjMjdhYmIwZTYwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYv
dGhyZWFkcy9TaWduYWxzLmgKKysrIGIvU291cmNlL1dURi93dGYvdGhyZWFkcy9TaWduYWxzLmgK
QEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgPHNpZ25hbC5oPgogI2luY2x1ZGUgPHd0Zi9G
dW5jdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybVJlZ2lzdGVycy5oPgogCiBuYW1lc3Bh
Y2UgV1RGIHsKIApAQCAtNzksNyArODAsMTEgQEAgZW51bSBjbGFzcyBTaWduYWxBY3Rpb24gewog
ICAgIEZvcmNlRGVmYXVsdAogfTsKIAotdXNpbmcgU2lnbmFsSGFuZGxlciA9IEZ1bmN0aW9uPFNp
Z25hbEFjdGlvbihpbnQsIHNpZ2luZm9fdCosIHZvaWQqKT47CitzdHJ1Y3QgU2lnSW5mbyB7Cisg
ICAgdm9pZCogZmF1bHRpbmdBZGRyZXNzIHsgMCB9OworfTsKKwordXNpbmcgU2lnbmFsSGFuZGxl
ciA9IEZ1bmN0aW9uPFNpZ25hbEFjdGlvbihTaWduYWwsIFNpZ0luZm8mLCBQbGF0Zm9ybVJlZ2lz
dGVycyYpPjsKIAogLy8gQ2FsbCB0aGlzIG1ldGhvZCB3aGVuZXZlciB5b3Ugd2FudCB0byBpbnN0
YWxsIGEgc2lnbmFsIGhhbmRsZXIuIEl0J3Mgb2sgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIGxhemls
eS4KIC8vIE5vdGU6IFlvdXIgc2lnbmFsIGhhbmRsZXIgd2lsbCBiZSBjYWxsZWQgZXZlcnkgdGlt
ZSB0aGUgaGFuZGxlciBmb3IgdGhlIGRlc2lyZWQgc2lnbmFsIGlzIGNhbGxlZC4KQEAgLTg3LDkg
KzkyLDE5IEBAIHVzaW5nIFNpZ25hbEhhbmRsZXIgPSBGdW5jdGlvbjxTaWduYWxBY3Rpb24oaW50
LCBzaWdpbmZvX3QqLCB2b2lkKik+OwogLy8gVGhpcyBmdW5jdGlvbiBpcyBjdXJyZW50bHkgYSBv
bmUgd2F5IHN0cmVldCBpLmUuIG9uY2UgaW5zdGFsbGVkLCBhIHNpZ25hbCBoYW5kbGVyIGNhbm5v
dCBiZSB1bmluc3RhbGxlZC4KIHZvaWQgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFsLCBTaWdu
YWxIYW5kbGVyJiYpOwogCisKKyNpZiBIQVZFKE1BQ0hfRVhDRVBUSU9OUykKK2NsYXNzIFRocmVh
ZDsKK3ZvaWQgcmVnaXN0ZXJUaHJlYWQoVGhyZWFkKik7Cit2b2lkIHJlbW92ZVRocmVhZChUaHJl
YWQqKTsKKwordm9pZCBoYW5kbGVTaWduYWxzV2l0aE1hY2goKTsKKyNlbmRpZiAvLyBIQVZFKE1B
Q0hfRVhDRVBUSU9OUykKKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6U2lnbmFs
OwordXNpbmcgV1RGOjpTaWdJbmZvOwogdXNpbmcgV1RGOjp0b1N5c3RlbVNpZ25hbDsKIHVzaW5n
IFdURjo6ZnJvbVN5c3RlbVNpZ25hbDsKIHVzaW5nIFdURjo6U2lnbmFsQWN0aW9uOwpkaWZmIC0t
Z2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDE3ZjlmMDExMTMx
MDJhOGE0YjE3ZmNlNGFmMWQ5NWViODYwMDY5ZGIuLjZjZGE0ODQxMDY1Y2UwNGE5MWI4ZGI1ZTJi
MjAyOGM0MGVjMDVhNmYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxNy0wNS0xMSAgS2VpdGggTWlsbGVyICA8a2Vp
dGhfbWlsbGVyQGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgTWFjaCBleGNlcHRpb25zIGluc3Rl
YWQgb2Ygc2lnbmFscyB3aGVyZSBwb3NzaWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcxODY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9UaHJlYWRNZXNz
YWdlcy5jcHA6CisgICAgICAgIChydW5UaHJlYWRNZXNzYWdlVGVzdCk6CisgICAgICAgIChURVNU
KToKKwogMjAxNy0wNS0wOSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAg
IFJlbW92ZSBzdXBwb3J0IGZvciBsZWdhY3kgTm90aWZpY2F0aW9ucwpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVGhyZWFkTWVzc2FnZXMuY3BwIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XVEYvVGhyZWFkTWVzc2FnZXMuY3BwCmluZGV4IGQ2M2U5YmYxZTc1
MDY4YjZjMWE3ZTdlNmU4YjY3YzRlYjA1MTU4ODIuLmU2YTU3ODk0YmI1MTZmZTFjZTcxM2QwN2Jm
MThmMDcwNmVmYTkzN2MgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RG
L1RocmVhZE1lc3NhZ2VzLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9U
aHJlYWRNZXNzYWdlcy5jcHAKQEAgLTUwLDcgKzUwLDcgQEAgc3RhdGljIHZvaWQgcnVuVGhyZWFk
TWVzc2FnZVRlc3QodW5zaWduZWQgbnVtU2VuZGVycywgdW5zaWduZWQgbnVtTWVzc2FnZXMpCiAg
ICAgZm9yICh1bnNpZ25lZCBzZW5kZXJJRCA9IDA7IHNlbmRlcklEIDwgbnVtU2VuZGVyczsgKytz
ZW5kZXJJRCkgewogICAgICAgICBzZW5kZXJUaHJlYWRzW3NlbmRlcklEXSA9IFRocmVhZDo6Y3Jl
YXRlKCJUaHJlYWRNZXNzYWdlIHNlbmRlciIsIFtzZW5kZXJJRCwgbnVtTWVzc2FnZXMsIHJlY2Vp
dmVyVGhyZWFkLCAmbWVzc2FnZXNSdW4sICZoYW5kbGVyc1J1bl0gKCkgewogICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bU1lc3NhZ2VzOyArK2kpIHsKLSAgICAgICAgICAg
ICAgICBhdXRvIHJlc3VsdCA9IHNlbmRNZXNzYWdlKCpyZWNlaXZlclRocmVhZC5nZXQoKSwgW3Nl
bmRlcklELCAmaGFuZGxlcnNSdW5dIChzaWdpbmZvX3QqLCB1Y29udGV4dF90KikgeworICAgICAg
ICAgICAgICAgIGF1dG8gcmVzdWx0ID0gc2VuZE1lc3NhZ2UoKnJlY2VpdmVyVGhyZWFkLmdldCgp
LCBbc2VuZGVySUQsICZoYW5kbGVyc1J1bl0gKFBsYXRmb3JtUmVnaXN0ZXJzJikgewogICAgICAg
ICAgICAgICAgICAgICBoYW5kbGVyc1J1bltzZW5kZXJJRF0rKzsKICAgICAgICAgICAgICAgICB9
KTsKICAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShyZXN1bHQgPT0gV1RGOjpNZXNzYWdlU3Rh
dHVzOjpNZXNzYWdlUmFuKTsKQEAgLTk1LDcgKzk1LDcgQEAgcHVibGljOgogVEVTVChUaHJlYWRN
ZXNzYWdlLCBTaWduYWxzV29ya09uRXhpdCkKIHsKICAgICBzdGF0aWMgYm9vbCBoYW5kbGVyUmFu
ID0gZmFsc2U7Ci0gICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFsOjpVc3IsIFtdIChpbnQs
IHNpZ2luZm9fdCosIHZvaWQqKSAtPiBTaWduYWxBY3Rpb24geworICAgIGluc3RhbGxTaWduYWxI
YW5kbGVyKFNpZ25hbDo6VXNyLCBbXSAoU2lnbmFsLCBTaWdJbmZvJiwgUGxhdGZvcm1SZWdpc3Rl
cnMmKSAtPiBTaWduYWxBY3Rpb24gewogICAgICAgICBkYXRhTG9nTG4oImhlcmUiKTsKICAgICAg
ICAgaGFuZGxlclJhbiA9IHRydWU7CiAgICAgICAgIHJldHVybiBTaWduYWxBY3Rpb246OkhhbmRs
ZWQ7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309769</attachid>
            <date>2017-05-11 13:43:41 -0700</date>
            <delta_ts>2017-05-11 13:51:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171865-20170511134340.patch</filename>
            <type>text/plain</type>
            <size>50293</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE2Njc3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
YzIyOWE0ZjkxMDMxZGZlOTU1YTQxMGIyMDI0Njc2ZTFmM2NkZWIxLi4yNWUzMDIyZWI5ZmY0ZDA1
M2E4ZWRiY2YxZTI2YmFkZTA1MTA4MWExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MCBAQAorMjAxNy0wNS0xMSAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBVc2UgTWFjaCBleGNlcHRpb25zIGluc3RlYWQgb2Ygc2lnbmFscyB3
aGVyZSBwb3NzaWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTcxODY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhpcyBwYXRjaCBhZGRzIHNvbWUgbmV3IEpTQyBvcHRpb25zLiBUaGUgZmlyc3QgaXMg
YW4gb3B0aW9uIHRoYXQKKyAgICAgICAgZW5hYmxlcyBvciBkaXNhYmxlcyB3ZWIgYXNzZW1ibHkg
dGllciB1cC4gVGhlIHNlY29uZCBjb250cm9scworICAgICAgICB3aGV0aGVyIG9yIG5vdCB3ZSB1
c2UgbWFjaCBleGNlcHRpb25zICh3aGVyZSBhdmFpbGFibGUpLgorCisgICAgICAgICogQVBJL3Rl
c3RzL0V4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwOgorICAgICAgICAoZGlzcGF0Y2hUZXJtaXRh
dGVDYWxsYmFjayk6CisgICAgICAgICh0ZXN0RXhlY3V0aW9uVGltZUxpbWl0KToKKyAgICAgICAg
KiBydW50aW1lL0pTTG9jay5jcHA6CisgICAgICAgIChKU0M6OkpTTG9jazo6ZGlkQWNxdWlyZUxv
Y2spOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5jcHA6CisgICAgICAgIChKU0M6Om92ZXJy
aWRlRGVmYXVsdHMpOgorICAgICAgICAoSlNDOjpPcHRpb25zOjppbml0aWFsaXplKToKKyAgICAg
ICAgKiBydW50aW1lL09wdGlvbnMuaDoKKyAgICAgICAgKiBydW50aW1lL1ZNVHJhcHMuY3BwOgor
ICAgICAgICAoSlNDOjpTaWduYWxDb250ZXh0OjpTaWduYWxDb250ZXh0KToKKyAgICAgICAgKEpT
Qzo6U2lnbmFsQ29udGV4dDo6YWRqdXN0UENUb1BvaW50VG9UcmFwcGluZ0luc3RydWN0aW9uKToK
KyAgICAgICAgKEpTQzo6aW5zdGFsbFNpZ25hbEhhbmRsZXIpOgorICAgICAgICAoSlNDOjpWTVRy
YXBzOjpTaWduYWxTZW5kZXI6OnNlbmQpOgorICAgICAgICAqIHRvb2xzL1NpZ2lsbENyYXNoQW5h
bHl6ZXIuY3BwOgorICAgICAgICAoSlNDOjpTaWduYWxDb250ZXh0OjpTaWduYWxDb250ZXh0KToK
KyAgICAgICAgKEpTQzo6U2lnbmFsQ29udGV4dDo6ZHVtcCk6CisgICAgICAgIChKU0M6Omluc3Rh
bGxDcmFzaEhhbmRsZXIpOgorICAgICAgICAqIHdhc20vV2FzbUJCUVBsYW4uY3BwOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKToKKyAgICAgICAgKiB3YXNt
L1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp0cmFwSGFu
ZGxlcik6CisgICAgICAgIChKU0M6Oldhc206OmVuYWJsZUZhc3RNZW1vcnkpOgorICAgICAgICAq
IHdhc20vV2FzbU1hY2hpbmVUaHJlYWRzLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6cmVzZXRJ
bnN0cnVjdGlvbkNhY2hlT25BbGxUaHJlYWRzKToKKwogMjAxNy0wNS0xMSAgTWFyayBMYW0gIDxt
YXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgV29ya2VyVGhyZWFkOjpzdG9wKCkgc2hvdWxk
IGNhbGwgc2NoZWR1bGVFeGVjdXRpb25UZXJtaW5hdGlvbigpIGxhc3QuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGVjZGRiMzNm
YmVkNTIxMTFiYzA3MTk1ZDZjMDhmZTQwNmIyYzFhMzUuLmE3MjBkMTAxZTIyMDVjZGYwZmEwNmRm
YzNjYTczNmY5YmE1ZmM2NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTcgQEAKKzIwMTctMDUtMTEgIEtlaXRo
IE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIE1hY2ggZXhj
ZXB0aW9ucyBpbnN0ZWFkIG9mIHNpZ25hbHMgd2hlcmUgcG9zc2libGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MTg2NQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZW5hYmxlcyB1c2lu
ZyBtYWNoIGV4Y2VwdGlvbnMgb24gZGFyd2luLiBUaGUgd2F5IHRoZQorICAgICAgICBtYWNoIGV4
Y2VwdGlvbiBhcGkgd29ya3MgaXMgdGhhdCB3ZSBjcmVhdGUgYSBtYWNoIHBvcnQsIHdoaWNoIGlz
CisgICAgICAgIGxpa2UgYSBmaWxlIGRlc2NyaXB0b3IuICBXZSB0aGVuIHdhaXQgZm9yIGEgbWVz
c2FnZSB0byBhcnJpdmUgb24KKyAgICAgICAgdGhhdCBwb3J0IGluIGEgdGhyZWFkLiBXaGVuIGFu
b3RoZXIgdGhyZWFkIHJhaXNlcyBhIGV4Y2VwdGlvbiAoc2F5CisgICAgICAgIGR1ZSB0byBhIGJh
ZCBtZW1vcnkgYWNjZXNzKSB0aGUgT1Mgc2VuZHMgb3VyIHRocmVhZCBhIG1lc3NhZ2UuIFRoZQor
ICAgICAgICBwYXlsb2FkIG9mIHRoYXQgbWVzc2FnZSBpcyB0aGUgcmVnaXN0ZXIgZmlsZSBvZiB0
aGUgY3Jhc2hpbmcKKyAgICAgICAgdGhyZWFkLiBXZSB0aGVuIGNhbGwgb3VyIGN1c3RvbSBoYW5k
bGVycyB0aGF0IGNoYW5nZSB0aGUgc3RhdGUgYXMKKyAgICAgICAgbmVlZGVkLiBJbiBvcmRlciB0
byByZXN0YXJ0IHRoZSB0aHJlYWQgd2Ugc2VuZCBhIHBheWxvYWQgYmFjayB0bworICAgICAgICB0
aGUgT1Mgd2l0aCBhbiB1cGRhdGVkIHJlZ2lzdGVyIGZpbGUgYWxvbmcgd2l0aCBhIHN1Y2Nlc3Mg
bWVzc2FnZQorICAgICAgICBoZWFkZXIuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIG1ha2Vz
IHRocmVhZCBtZXNzYWdlcyB3b3JrIHdpdGhvdXQgc2lnbmFscyBieQorICAgICAgICBzaW1wbHkg
c3VzcGVuZGluZyB0aGUgdGhyZWFkIHRoZW4gcnVubmluZyB0aGUgbWVzc2FnZSBhdCB0aGF0Cisg
ICAgICAgIHRpbWUuCisKKyAgICAgICAgKiBDb25maWd1cmF0aW9ucy9XVEYueGNjb25maWc6Cisg
ICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL1Bs
YXRmb3JtLmg6CisgICAgICAgICogd3RmL1BsYXRmb3JtUmVnaXN0ZXJzLmg6CisgICAgICAgIChX
VEY6OnJlZ2lzdGVyc0Zyb21VQ29udGV4dCk6CisgICAgICAgICogd3RmL1N0YWNrQm91bmRzLmg6
CisgICAgICAgIChXVEY6OlN0YWNrQm91bmRzOjpTdGFja0JvdW5kcyk6CisgICAgICAgICogd3Rm
L1RocmVhZEhvbGRlci5jcHA6CisgICAgICAgIChXVEY6OlRocmVhZEhvbGRlcjo6flRocmVhZEhv
bGRlcik6CisgICAgICAgICogd3RmL1RocmVhZE1lc3NhZ2UuY3BwOgorICAgICAgICAoV1RGOjpz
ZW5kTWVzc2FnZVNpZ25hbCk6CisgICAgICAgIChXVEY6OnNlbmRNZXNzYWdlTWFjaCk6CisgICAg
ICAgIChXVEY6OmRlbGl2ZXJNZXNzYWdlc1VzaW5nTWFjaCk6CisgICAgICAgIChXVEY6OnNlbmRN
ZXNzYWdlU2NvcGVkKToKKyAgICAgICAgKiB3dGYvVGhyZWFkTWVzc2FnZS5oOgorICAgICAgICAo
V1RGOjpzZW5kTWVzc2FnZSk6CisgICAgICAgICogd3RmL1RocmVhZGluZy5oOgorICAgICAgICAo
V1RGOjpUaHJlYWQ6Om1hY2hUaHJlYWQpOgorICAgICAgICAqIHd0Zi9tYWMvTWFjaEV4Y2VwdGlv
bnMuZGVmczogQ29waWVkIGZyb20gU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5oLgorICAg
ICAgICAqIHd0Zi90aHJlYWRzL1NpZ25hbHMuY3BwOgorICAgICAgICAoV1RGOjpzdGFydE1hY2hF
eGNlcHRpb25IYW5kbGVyVGhyZWFkKToKKyAgICAgICAgKFdURjo6ZnJvbU1hY2hFeGNlcHRpb24p
OgorICAgICAgICAoV1RGOjp0b01hY2hNYXNrKToKKyAgICAgICAgKFdURjo6aGFuZGxlU2lnbmFs
c1dpdGhNYWNoKToKKyAgICAgICAgKFdURjo6c2V0RXhjZXB0aW9uUG9ydHMpOgorICAgICAgICAo
V1RGOjphY3RpdmVUaHJlYWRzKToKKyAgICAgICAgKFdURjo6cmVnaXN0ZXJUaHJlYWQpOgorICAg
ICAgICAoV1RGOjpyZW1vdmVUaHJlYWQpOgorICAgICAgICAoV1RGOjppbnN0YWxsU2lnbmFsSGFu
ZGxlcik6CisgICAgICAgIChXVEY6OmpzY1NpZ25hbEhhbmRsZXIpOgorICAgICAgICAqIHd0Zi90
aHJlYWRzL1NpZ25hbHMuaDoKKwogMjAxNy0wNS0wOSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFJlbW92ZSBzdXBwb3J0IGZvciBsZWdhY3kgTm90aWZpY2F0aW9ucwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9FeGVjdXRpb25UaW1l
TGltaXRUZXN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvRXhlY3V0aW9u
VGltZUxpbWl0VGVzdC5jcHAKaW5kZXggZDVlNTMyNDNiNzhkZjc1MTM0MmFkOGQzOTBhNGIwNDEz
ZDllZWY5ZS4uN2VhYzA3MzA5ZGRjM2YxNjQ5NDUwYmQwMzc5ZDJjYTE4ZjAxNjlhYSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9FeGVjdXRpb25UaW1lTGltaXRU
ZXN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0V4ZWN1dGlvblRp
bWVMaW1pdFRlc3QuY3BwCkBAIC0zMCw4ICszMCwxMyBAQAogI2luY2x1ZGUgIkpTQ29udGV4dFJl
ZlByaXZhdGUuaCIKICNpbmNsdWRlICJKYXZhU2NyaXB0Q29yZS5oIgogI2luY2x1ZGUgIk9wdGlv
bnMuaCIKKwogI2luY2x1ZGUgPGNocm9ubz4KKyNpbmNsdWRlIDxkaXNwYXRjaC9kaXNwYXRjaC5o
PgorI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CisjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgog
I2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOjpj
aHJvbm87CkBAIC03Nyw2ICs4MiwxMyBAQCBzdGF0aWMgYm9vbCBleHRlbmRUZXJtaW5hdGVDYWxs
YmFjayhKU0NvbnRleHRSZWYgY3R4LCB2b2lkKikKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9v
bCBkaXNwYXRjaFRlcm1pbmF0ZUNhbGxiYWNrQ2FsbGVkID0gZmFsc2U7CitzdGF0aWMgYm9vbCBk
aXNwYXRjaFRlcm1pdGF0ZUNhbGxiYWNrKEpTQ29udGV4dFJlZiwgdm9pZCopCit7CisgICAgZGlz
cGF0Y2hUZXJtaW5hdGVDYWxsYmFja0NhbGxlZCA9IHRydWU7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKIHN0cnVjdCBUaWVyT3B0aW9ucyB7CiAgICAgY29uc3QgY2hhciogdGllcjsKICAgICB1bnNp
Z25lZCB0aW1lTGltaXRBZGp1c3RtZW50TWlsbGlzOwpAQCAtMzY1LDYgKzM3Nyw2MyBAQCBpbnQg
dGVzdEV4ZWN1dGlvblRpbWVMaW1pdCgpCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAorICAg
ICAgICAvKiBUZXN0IHNjcmlwdCB0aW1lb3V0IGZyb20gZGlzcGF0Y2ggcXVldWU6ICovCisgICAg
ICAgIHRpbWVMaW1pdCA9ICgxMDAgKyB0aWVyQWRqdXN0bWVudE1pbGxpcykgLyAxMDAwLjA7Cisg
ICAgICAgIEpTQ29udGV4dEdyb3VwU2V0RXhlY3V0aW9uVGltZUxpbWl0KGNvbnRleHRHcm91cCwg
dGltZUxpbWl0LCBkaXNwYXRjaFRlcm1pdGF0ZUNhbGxiYWNrLCAwKTsKKyAgICAgICAgeworICAg
ICAgICAgICAgdW5zaWduZWQgdGltZUFmdGVyV2F0Y2hkb2dTaG91bGRIYXZlRmlyZWQgPSAzMDAg
KyB0aWVyQWRqdXN0bWVudE1pbGxpczsKKworICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBzY3Jp
cHRCdWlsZGVyOworICAgICAgICAgICAgc2NyaXB0QnVpbGRlci5hcHBlbmRMaXRlcmFsKCJmdW5j
dGlvbiBmb28oKSB7IHZhciBzdGFydFRpbWUgPSBjdXJyZW50Q1BVVGltZSgpOyB3aGlsZSAodHJ1
ZSkgeyBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDA7IGkrKyk7IGlmIChjdXJyZW50Q1BVVGltZSgp
IC0gc3RhcnRUaW1lID4gIik7CisgICAgICAgICAgICBzY3JpcHRCdWlsZGVyLmFwcGVuZE51bWJl
cih0aW1lQWZ0ZXJXYXRjaGRvZ1Nob3VsZEhhdmVGaXJlZCAvIDEwMDAuMCk7CisgICAgICAgICAg
ICBzY3JpcHRCdWlsZGVyLmFwcGVuZExpdGVyYWwoIikgYnJlYWs7IH0gfSBmb28oKTsiKTsKKwor
ICAgICAgICAgICAgSlNTdHJpbmdSZWYgc2NyaXB0ID0gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoc2NyaXB0QnVpbGRlci50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAg
ICAgZXhjZXB0aW9uID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGRpc3BhdGNoVGVybWluYXRlQ2Fs
bGJhY2tDYWxsZWQgPSBmYWxzZTsKKworICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBkbyB0aGlz
IHNpbmNlIGJsb2NrcyBjYW4gb25seSBjYXB0dXJlIHRoaW5ncyBhcyBjb25zdC4KKyAgICAgICAg
ICAgIEpTR2xvYmFsQ29udGV4dFJlZiYgY29udGV4dFJlZiA9IGNvbnRleHQ7CisgICAgICAgICAg
ICBKU1N0cmluZ1JlZiYgc2NyaXB0UmVmID0gc2NyaXB0OworICAgICAgICAgICAgSlNWYWx1ZVJl
ZiYgZXhjZXB0aW9uUmVmID0gZXhjZXB0aW9uOworCisgICAgICAgICAgICBMb2NrIHN5bmNMb2Nr
OworICAgICAgICAgICAgTG9jayYgc3luY0xvY2tSZWYgPSBzeW5jTG9jazsKKyAgICAgICAgICAg
IENvbmRpdGlvbiBzeW5jaHJvbml6ZTsKKyAgICAgICAgICAgIENvbmRpdGlvbiYgc3luY2hyb25p
emVSZWYgPSBzeW5jaHJvbml6ZTsKKyAgICAgICAgICAgIGJvb2wgZGlkU3luY2hyb25pemUgPSBm
YWxzZTsKKyAgICAgICAgICAgIGJvb2wmIGRpZFN5bmNocm9uaXplUmVmID0gZGlkU3luY2hyb25p
emU7CisKKyAgICAgICAgICAgIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMgc3RhcnRUaW1lOwor
ICAgICAgICAgICAgc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcyBlbmRUaW1lOworCisgICAgICAg
ICAgICBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzJiBzdGFydFRpbWVSZWYgPSBzdGFydFRpbWU7
CisgICAgICAgICAgICBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzJiBlbmRUaW1lUmVmID0gZW5k
VGltZTsKKworICAgICAgICAgICAgZGlzcGF0Y2hfZ3JvdXBfdCBncm91cCA9IGRpc3BhdGNoX2dy
b3VwX2NyZWF0ZSgpOworICAgICAgICAgICAgZGlzcGF0Y2hfZ3JvdXBfYXN5bmMoZ3JvdXAsIGRp
c3BhdGNoX2dldF9nbG9iYWxfcXVldWUoMCwgMCksIF57CisgICAgICAgICAgICAgICAgc3RhcnRU
aW1lUmVmID0gY3VycmVudENQVVRpbWUoKTsKKyAgICAgICAgICAgICAgICBKU0V2YWx1YXRlU2Ny
aXB0KGNvbnRleHRSZWYsIHNjcmlwdFJlZiwgbnVsbHB0ciwgbnVsbHB0ciwgMSwgJmV4Y2VwdGlv
blJlZik7CisgICAgICAgICAgICAgICAgZW5kVGltZVJlZiA9IGN1cnJlbnRDUFVUaW1lKCk7Cisg
ICAgICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBXVEY6OmhvbGRMb2NrKHN5bmNMb2NrUmVmKTsK
KyAgICAgICAgICAgICAgICBkaWRTeW5jaHJvbml6ZVJlZiA9IHRydWU7CisgICAgICAgICAgICAg
ICAgc3luY2hyb25pemVSZWYubm90aWZ5QWxsKCk7CisgICAgICAgICAgICB9KTsKKworICAgICAg
ICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhzeW5jTG9jayk7CisgICAgICAgICAgICBzeW5j
aHJvbml6ZS53YWl0KHN5bmNMb2NrLCBbJl0geyByZXR1cm4gZGlkU3luY2hyb25pemU7IH0pOwor
CisgICAgICAgICAgICBpZiAoKChlbmRUaW1lIC0gc3RhcnRUaW1lKSA8IG1pbGxpc2Vjb25kcyh0
aW1lQWZ0ZXJXYXRjaGRvZ1Nob3VsZEhhdmVGaXJlZCkpICYmIGRpc3BhdGNoVGVybWluYXRlQ2Fs
bGJhY2tDYWxsZWQpCisgICAgICAgICAgICAgICAgcHJpbnRmKCJQQVNTOiAlcyBzY3JpcHQgb24g
ZGlzcGF0Y2ggcXVldWUgdGltZWQgb3V0IGFzIGV4cGVjdGVkLlxuIiwgdGllck9wdGlvbnMudGll
cik7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoKGVuZFRpbWUgLSBz
dGFydFRpbWUpID49IG1pbGxpc2Vjb25kcyh0aW1lQWZ0ZXJXYXRjaGRvZ1Nob3VsZEhhdmVGaXJl
ZCkpCisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiRkFJTDogJXMgc2NyaXB0IG9uIGRpc3Bh
dGNoIHF1ZXVlIGRpZCBub3QgdGltZSBvdXQgYXMgZXhwZWN0ZWQuXG4iLCB0aWVyT3B0aW9ucy50
aWVyKTsKKyAgICAgICAgICAgICAgICBpZiAoIXNob3VsZFRlcm1pbmF0ZUNhbGxiYWNrV2FzQ2Fs
bGVkKQorICAgICAgICAgICAgICAgICAgICBwcmludGYoIkZBSUw6ICVzIHNjcmlwdCBvbiBkaXNw
YXRjaCBxdWV1ZSB0aW1lb3V0IGNhbGxiYWNrIHdhcyBub3QgY2FsbGVkLlxuIiwgdGllck9wdGlv
bnMudGllcik7CisgICAgICAgICAgICAgICAgZmFpbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCiAgICAgICAgIEpTR2xvYmFsQ29udGV4dFJlbGVhc2UoY29udGV4dCk7CiAK
ICAgICAgICAgT3B0aW9uczo6c2V0T3B0aW9ucyhzYXZlZE9wdGlvbnNCdWlsZGVyLnRvU3RyaW5n
KCkuYXNjaWkoKS5kYXRhKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNMb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5j
cHAKaW5kZXggYzE3NWFlMGM0ODJlZDI3YmQ1ZjZiZGM4Nzk2OGU3NWQ0NWFmNTBlZi4uYmI3MGFh
YWVhMTVmZWQ1NDc3YjYxOTlmYTZkNGRjN2VhOTcxMDJjMiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0xvY2suY3BwCkBAIC0zMCw2ICszMCw4IEBACiAjaW5jbHVkZSAiU2FtcGxp
bmdQcm9maWxlci5oIgogI2luY2x1ZGUgIldhc21NYWNoaW5lVGhyZWFkcy5oIgogI2luY2x1ZGUg
PHRocmVhZD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RocmVh
ZHMvU2lnbmFscy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMTQ4LDYgKzE1MCwxMCBAQCB2
b2lkIEpTTG9jazo6ZGlkQWNxdWlyZUxvY2soKQogICAgIFdhc206OnN0YXJ0VHJhY2tpbmdDdXJy
ZW50VGhyZWFkKCk7CiAjZW5kaWYKIAorI2lmIEhBVkUoTUFDSF9FWENFUFRJT05TKQorICAgIFdU
Rjo6cmVnaXN0ZXJUaHJlYWQoJlRocmVhZDo6Y3VycmVudCgpKTsKKyNlbmRpZgorCiAgICAgbV92
bS0+dHJhcHMoKS5ub3RpZnlHcmFiQWxsTG9ja3MoKTsKIAogI2lmIEVOQUJMRShTQU1QTElOR19Q
Uk9GSUxFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKaW5kZXgg
YjA0ZGUzNWE1MzYxNTA4NDM4NTc1YzIyN2E1MDE0ZGQwYzUxYmFhMi4uOTZmOWZmNzQyNWJiOTU5
ZjEzN2E2MTRlYzNkYjY3NmM4YjE2ZGE5OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5jcHAKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0
cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGhyZWFkcy9TaWduYWxzLmg+CiAKICNp
ZiBQTEFURk9STShDT0NPQSkKICNpbmNsdWRlIDxjcnRfZXh0ZXJucy5oPgpAQCAtMzU0LDYgKzM1
NSwxMCBAQCBzdGF0aWMgdm9pZCBvdmVycmlkZURlZmF1bHRzKCkKICNpZiAhRU5BQkxFKFdFQkFT
U0VNQkxZX0ZBU1RfTUVNT1JZKQogICAgIE9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5RmFzdE1lbW9y
eSgpID0gZmFsc2U7CiAjZW5kaWYKKworI2lmIEhBVkUoTUFDSF9FWENFUFRJT05TKQorICAgIE9w
dGlvbnM6OnVzZU1hY2hGb3JFeGNlcHRpb25zKCkgPSB0cnVlOworI2VuZGlmCiB9CiAKIHN0YXRp
YyB2b2lkIHJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMoKQpAQCAtNTQ1LDYgKzU1MCw5IEBAIHZv
aWQgT3B0aW9uczo6aW5pdGlhbGl6ZSgpCiAKICAgICAgICAgICAgIGR1bXBPcHRpb25zSWZOZWVk
ZWQoKTsKICAgICAgICAgICAgIGVuc3VyZU9wdGlvbnNBcmVDb2hlcmVudCgpOworCisgICAgICAg
ICAgICBpZiAoT3B0aW9uczo6dXNlTWFjaEZvckV4Y2VwdGlvbnMoKSkKKyAgICAgICAgICAgICAg
ICBXVEY6OmhhbmRsZVNpZ25hbHNXaXRoTWFjaCgpOwogICAgICAgICB9KTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCmluZGV4IGNmOWRjMmIyYTgyNTY4ZWUwN2Rh
MDg4OWUzOWI2YjJmOWRjZDc5NzUuLjIyNzRkMWNkZWIzMzM2ZTM3YWI0NDczZWE0MTE2ZWEzMjI5
ZTkzN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKQEAgLTQyMCw2
ICs0MjAsOCBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICB2KHVuc2ln
bmVkLCB3YXRjaGRvZywgMCwgTm9ybWFsLCAid2F0Y2hkb2cgdGltZW91dCAoMCA9IERpc2FibGVk
LCBOID0gYSB0aW1lb3V0IHBlcmlvZCBvZiBOIG1pbGxpc2Vjb25kcykiKSBcCiAgICAgdihib29s
LCB1c2VQb2xsaW5nVHJhcHMsIGZhbHNlLCBOb3JtYWwsICJ1c2UgcG9sbGluZyAoaW5zdGVhZCBv
ZiBzaWduYWxsaW5nKSBWTSB0cmFwcyIpIFwKICAgICBcCisgICAgdihib29sLCB1c2VNYWNoRm9y
RXhjZXB0aW9ucywgdHJ1ZSwgTm9ybWFsLCAiVXNlIG1hY2ggZXhjZXB0aW9ucyByYXRoZXIgdGhh
biBzaWduYWxzIHRvIGhhbmRsZSBmYXVsdHMgYW5kIHBhc3MgdGhyZWFkIG1lc3NhZ2VzLiAoVGhp
cyBkb2VzIG5vdGhpbmcgb24gcGxhdGZvcm1zIHdpdGhvdXQgbWFjaCkiKSBcCisgICAgXAogICAg
IHYoYm9vbCwgdXNlSUNTdGF0cywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIFwKICAg
ICB2KHVuc2lnbmVkLCBwcm90b3R5cGVIaXRDb3VudEZvckxMSW50Q2FjaGluZywgMiwgTm9ybWFs
LCAiTnVtYmVyIG9mIHByb3RvdHlwZSBwcm9wZXJ0eSBoaXRzIGJlZm9yZSBjYWNoaW5nIGEgcHJv
dG90eXBlIGluIHRoZSBMTEludC4gQSBjb3VudCBvZiAwIG1lYW5zIG5ldmVyIGNhY2hlLiIpIFwK
QEAgLTQ0Myw2ICs0NDUsNyBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAg
ICB2KHVuc2lnbmVkLCB3ZWJBc3NlbWJseUJCUU9wdGltaXphdGlvbkxldmVsLCAxLCBOb3JtYWws
ICJCMyBPcHRpbWl6YXRpb24gbGV2ZWwgZm9yIEJCUSBXZWIgQXNzZW1ibHkgbW9kdWxlIGNvbXBp
bGF0aW9ucy4iKSBcCiAgICAgdih1bnNpZ25lZCwgd2ViQXNzZW1ibHlPTUdPcHRpbWl6YXRpb25M
ZXZlbCwgT3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSwgTm9ybWFsLCAiQjMgT3B0aW1pemF0
aW9uIGxldmVsIGZvciBPTUcgV2ViIEFzc2VtYmx5IG1vZHVsZSBjb21waWxhdGlvbnMuIikgXAog
ICAgIFwKKyAgICB2KGJvb2wsIHVzZUJCUVRpZXJVcENoZWNrcywgdHJ1ZSwgTm9ybWFsLCAiRW5h
YmxlcyB0aWVyIHVwIGNoZWNrcyBmb3Igb3VyIEJCUSBjb2RlLiIpIFwKICAgICB2KHVuc2lnbmVk
LCB3ZWJBc3NlbWJseU9NR1RpZXJVcENvdW50LCA1MDAwLCBOb3JtYWwsICJUaGUgY291bnRkb3du
IGJlZm9yZSB3ZSB0aWVyIHVwIGEgZnVuY3Rpb24gdG8gT01HLiIpIFwKICAgICB2KHVuc2lnbmVk
LCB3ZWJBc3NlbWJseUxvb3BEZWNyZW1lbnQsIDE1LCBOb3JtYWwsICJUaGUgYW1vdW50IHRoZSB0
aWVyIHVwIGNvdW50ZG93biBpcyBkZWNyZW1lbnRlZCBvbiBlYWNoIGxvb3AgYmFja2VkZ2UuIikg
XAogICAgIHYodW5zaWduZWQsIHdlYkFzc2VtYmx5RnVuY3Rpb25FbnRyeURlY3JlbWVudCwgMSwg
Tm9ybWFsLCAiVGhlIGFtb3VudCB0aGUgdGllciB1cCBjb3VudGRvd24gaXMgZGVjcmVtZW50ZWQg
b24gZWFjaCBmdW5jdGlvbiBlbnRyeS4iKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTVRyYXBzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNVHJhcHMuY3BwCmluZGV4IDFiYWFjZTYwNDRlNjYwYThlNTQ0MWZiYWQwMThlYTkwOTMxYTRj
OTEuLjEwZDc4MmE4ZGM0OWE1ZWRhMDgxZDczZDY4M2RmZmUxNmY4YzhmNDMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCkBAIC01MywxMSArNTMsMTEgQEAgQUxX
QVlTX0lOTElORSBWTSYgVk1UcmFwczo6dm0oKSBjb25zdAogI2lmIEVOQUJMRShTSUdOQUxfQkFT
RURfVk1fVFJBUFMpCiAKIHN0cnVjdCBTaWduYWxDb250ZXh0IHsKLSAgICBTaWduYWxDb250ZXh0
KG1jb250ZXh0X3QmIG1jb250ZXh0KQotICAgICAgICA6IG1jb250ZXh0KG1jb250ZXh0KQotICAg
ICAgICAsIHRyYXBQQyhNYWNoaW5lQ29udGV4dDo6aW5zdHJ1Y3Rpb25Qb2ludGVyKG1jb250ZXh0
KSkKLSAgICAgICAgLCBzdGFja1BvaW50ZXIoTWFjaGluZUNvbnRleHQ6OnN0YWNrUG9pbnRlciht
Y29udGV4dCkpCi0gICAgICAgICwgZnJhbWVQb2ludGVyKE1hY2hpbmVDb250ZXh0OjpmcmFtZVBv
aW50ZXIobWNvbnRleHQpKQorICAgIFNpZ25hbENvbnRleHQoUGxhdGZvcm1SZWdpc3RlcnMmIHJl
Z2lzdGVycykKKyAgICAgICAgOiBjb250ZXh0KHJlZ2lzdGVycykKKyAgICAgICAgLCB0cmFwUEMo
TWFjaGluZUNvbnRleHQ6Omluc3RydWN0aW9uUG9pbnRlcihjb250ZXh0KSkKKyAgICAgICAgLCBz
dGFja1BvaW50ZXIoTWFjaGluZUNvbnRleHQ6OnN0YWNrUG9pbnRlcihjb250ZXh0KSkKKyAgICAg
ICAgLCBmcmFtZVBvaW50ZXIoTWFjaGluZUNvbnRleHQ6OmZyYW1lUG9pbnRlcihjb250ZXh0KSkK
ICAgICB7CiAjaWYgQ1BVKFg4Nl82NCkgfHwgQ1BVKFg4NikKICAgICAgICAgLy8gT24gWDg2XzY0
LCBTSUdUUkFQIHJlcG9ydHMgdGhlIGFkZHJlc3MgYWZ0ZXIgdGhlIHRyYXBwaW5nIFBDLiBTbywg
ZGVjIGJ5IDEuCkBAIC02OCwxMSArNjgsMTEgQEAgc3RydWN0IFNpZ25hbENvbnRleHQgewogICAg
IHZvaWQgYWRqdXN0UENUb1BvaW50VG9UcmFwcGluZ0luc3RydWN0aW9uKCkKICAgICB7CiAjaWYg
Q1BVKFg4Nl82NCkgfHwgQ1BVKFg4NikKLSAgICAgICAgTWFjaGluZUNvbnRleHQ6Omluc3RydWN0
aW9uUG9pbnRlcihtY29udGV4dCkgPSB0cmFwUEM7CisgICAgICAgIE1hY2hpbmVDb250ZXh0Ojpp
bnN0cnVjdGlvblBvaW50ZXIoY29udGV4dCkgPSB0cmFwUEM7CiAjZW5kaWYKICAgICB9CiAKLSAg
ICBtY29udGV4dF90JiBtY29udGV4dDsKKyAgICBQbGF0Zm9ybVJlZ2lzdGVycyYgY29udGV4dDsK
ICAgICB2b2lkKiB0cmFwUEM7CiAgICAgdm9pZCogc3RhY2tQb2ludGVyOwogICAgIHZvaWQqIGZy
YW1lUG9pbnRlcjsKQEAgLTEzMCwxMSArMTMwLDEzIEBAIHN0YXRpYyBFeHBlY3RlZDxWTUFuZFN0
YWNrQm91bmRzLCBWTVRyYXBzOjpFcnJvcj4gZmluZEFjdGl2ZVZNQW5kU3RhY2tCb3VuZHMoU2ln
CiAKIHN0YXRpYyB2b2lkIGluc3RhbGxTaWduYWxIYW5kbGVyKCkKIHsKLSAgICBpbnN0YWxsU2ln
bmFsSGFuZGxlcihTaWduYWw6OlRyYXAsIFtdIChpbnQsIHNpZ2luZm9fdCosIHZvaWQqIHVhcCkg
LT4gU2lnbmFsQWN0aW9uIHsKLSAgICAgICAgU2lnbmFsQ29udGV4dCBjb250ZXh0KHN0YXRpY19j
YXN0PHVjb250ZXh0X3QqPih1YXApLT51Y19tY29udGV4dCk7CisgICAgaW5zdGFsbFNpZ25hbEhh
bmRsZXIoU2lnbmFsOjpUcmFwLCBbXSAoU2lnbmFsLCBTaWdJbmZvJiwgUGxhdGZvcm1SZWdpc3Rl
cnMmIHJlZ2lzdGVycykgLT4gU2lnbmFsQWN0aW9uIHsKKyAgICAgICAgU2lnbmFsQ29udGV4dCBj
b250ZXh0KHJlZ2lzdGVycyk7CiAKLSAgICAgICAgaWYgKCFpc0pJVFBDKGNvbnRleHQudHJhcFBD
KSkKKyAgICAgICAgaWYgKCFpc0pJVFBDKGNvbnRleHQudHJhcFBDKSkgeworICAgICAgICAgICAg
ZGF0YUxvZ0xuKCJ0cmFwcGluZyBwYzogIiwgUmF3UG9pbnRlcihjb250ZXh0LnRyYXBQQyksICIg
aml0IHN0YXJ0OiAiLCBzdGFydE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbCwgIiBqaXQgZW5k
OiAiLCBlbmRPZkZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2wpOwogICAgICAgICAgICAgcmV0dXJu
IFNpZ25hbEFjdGlvbjo6Tm90SGFuZGxlZDsKKyAgICAgICAgfQogCiAgICAgICAgIC8vIEZJWE1F
OiBUaGlzIGN1cnJlbnRseSBlYXRzIGFsbCB0cmFwcyBpbmNsdWRpbmcgaml0IGFzc2VydHMgd2Ug
c2hvdWxkIG1ha2Ugc3VyZSB0aGlzCiAgICAgICAgIC8vIGFsd2F5cyB3b3Jrcy4gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MTAzOQpAQCAtNDA0LDggKzQwNiw4IEBA
IHZvaWQgVk1UcmFwczo6U2lnbmFsU2VuZGVyOjpzZW5kKCkKICAgICAgICAgICAgIFZNJiB2bSA9
ICptX3ZtOwogICAgICAgICAgICAgYXV0byBvcHRpb25hbE93bmVyVGhyZWFkID0gdm0ub3duZXJU
aHJlYWQoKTsKICAgICAgICAgICAgIGlmIChvcHRpb25hbE93bmVyVGhyZWFkKSB7Ci0gICAgICAg
ICAgICAgICAgc2VuZE1lc3NhZ2UoKm9wdGlvbmFsT3duZXJUaHJlYWQudmFsdWUoKS5nZXQoKSwg
W10gKHNpZ2luZm9fdCosIHVjb250ZXh0X3QqIHVjb250ZXh0KSAtPiB2b2lkIHsKLSAgICAgICAg
ICAgICAgICAgICAgU2lnbmFsQ29udGV4dCBjb250ZXh0KHVjb250ZXh0LT51Y19tY29udGV4dCk7
CisgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoKm9wdGlvbmFsT3duZXJUaHJlYWQudmFsdWUo
KS5nZXQoKSwgW10gKFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMpIC0+IHZvaWQgeworICAg
ICAgICAgICAgICAgICAgICBTaWduYWxDb250ZXh0IGNvbnRleHQocmVnaXN0ZXJzKTsKICAgICAg
ICAgICAgICAgICAgICAgYXV0byBhY3RpdmVWTUFuZFN0YWNrQm91bmRzID0gZmluZEFjdGl2ZVZN
QW5kU3RhY2tCb3VuZHMoY29udGV4dCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChhY3RpdmVW
TUFuZFN0YWNrQm91bmRzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBWTSogdm0gPSBhY3Rp
dmVWTUFuZFN0YWNrQm91bmRzLnZhbHVlKCkudm07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAKaW5kZXggNGFkYWVmZjFjZGEyZDFm
YmM2ZjkwNjFmMDYzZTE0ZDJlNjMzMDA0OC4uYmI0NjA1YzY5M2UxMmRkZTA1MDg0ZjdhMTdjZDFl
NDRmN2U5ZTY3NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1NpZ2ls
bENyYXNoQW5hbHl6ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9TaWdp
bGxDcmFzaEFuYWx5emVyLmNwcApAQCAtNzgsMTEgKzc4LDExIEBAIHByaXZhdGU6CiAjZW5kaWYg
Ly8gVVNFKE9TX0xPRykKIAogc3RydWN0IFNpZ25hbENvbnRleHQgewotICAgIFNpZ25hbENvbnRl
eHQobWNvbnRleHRfdCYgbWNvbnRleHQpCi0gICAgICAgIDogbWNvbnRleHQobWNvbnRleHQpCi0g
ICAgICAgICwgbWFjaGluZVBDKE1hY2hpbmVDb250ZXh0OjppbnN0cnVjdGlvblBvaW50ZXIobWNv
bnRleHQpKQotICAgICAgICAsIHN0YWNrUG9pbnRlcihNYWNoaW5lQ29udGV4dDo6c3RhY2tQb2lu
dGVyKG1jb250ZXh0KSkKLSAgICAgICAgLCBmcmFtZVBvaW50ZXIoTWFjaGluZUNvbnRleHQ6OmZy
YW1lUG9pbnRlcihtY29udGV4dCkpCisgICAgU2lnbmFsQ29udGV4dChQbGF0Zm9ybVJlZ2lzdGVy
cyYgY29udGV4dCkKKyAgICAgICAgOiBjb250ZXh0KGNvbnRleHQpCisgICAgICAgICwgbWFjaGlu
ZVBDKE1hY2hpbmVDb250ZXh0OjppbnN0cnVjdGlvblBvaW50ZXIoY29udGV4dCkpCisgICAgICAg
ICwgc3RhY2tQb2ludGVyKE1hY2hpbmVDb250ZXh0OjpzdGFja1BvaW50ZXIoY29udGV4dCkpCisg
ICAgICAgICwgZnJhbWVQb2ludGVyKE1hY2hpbmVDb250ZXh0OjpmcmFtZVBvaW50ZXIoY29udGV4
dCkpCiAgICAgeyB9CiAKICAgICB2b2lkIGR1bXAoKQpAQCAtMTEyLDcgKzExMiw3IEBAIHN0cnVj
dCBTaWduYWxDb250ZXh0IHsKICAgICAgICAgdihncykKIAogI2RlZmluZSBEVU1QX1JFR0lTVEVS
KF9fcmVnKSBcCi0gICAgICAgIGxvZygiUmVnaXN0ZXIgIiAjX19yZWcgIjogJXAiLCByZWludGVy
cHJldF9jYXN0PHZvaWQqPihtY29udGV4dC0+X19zcy5fXyMjX19yZWcpKTsKKyAgICAgICAgbG9n
KCJSZWdpc3RlciAiICNfX3JlZyAiOiAlcCIsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNvbnRl
eHQuX18jI19fcmVnKSk7CiAgICAgICAgIEZPUl9FQUNIX1JFR0lTVEVSKERVTVBfUkVHSVNURVIp
CiAjdW5kZWYgRk9SX0VBQ0hfUkVHSVNURVIKIApAQCAtMTIwLDIwICsxMjAsMjAgQEAgc3RydWN0
IFNpZ25hbENvbnRleHQgewogICAgICAgICBpbnQgaTsKICAgICAgICAgZm9yIChpID0gMDsgaSA8
IDI4OyBpICs9IDQpIHsKICAgICAgICAgICAgIGxvZygieCVkOiAlMDE2bGx4IHglZDogJTAxNmxs
eCB4JWQ6ICUwMTZsbHggeCVkOiAlMDE2bGx4IiwKLSAgICAgICAgICAgICAgICBpLCBtY29udGV4
dC0+X19zcy5fX3hbaV0sCi0gICAgICAgICAgICAgICAgaSsxLCBtY29udGV4dC0+X19zcy5fX3hb
aSsxXSwKLSAgICAgICAgICAgICAgICBpKzIsIG1jb250ZXh0LT5fX3NzLl9feFtpKzJdLAotICAg
ICAgICAgICAgICAgIGkrMywgbWNvbnRleHQtPl9fc3MuX194W2krM10pOworICAgICAgICAgICAg
ICAgIGksIGNvbnRleHQuX194W2ldLAorICAgICAgICAgICAgICAgIGkrMSwgY29udGV4dC5fX3hb
aSsxXSwKKyAgICAgICAgICAgICAgICBpKzIsIGNvbnRleHQuX194W2krMl0sCisgICAgICAgICAg
ICAgICAgaSszLCBjb250ZXh0Ll9feFtpKzNdKTsKICAgICAgICAgfQogICAgICAgICBBU1NFUlQo
aSA8IDI5KTsKICAgICAgICAgbG9nKCJ4JWQ6ICUwMTZsbHggZnA6ICUwMTZsbHggbHI6ICUwMTZs
bHgiLAotICAgICAgICAgICAgaSwgbWNvbnRleHQtPl9fc3MuX194W2ldLCBtY29udGV4dC0+X19z
cy5fX2ZwLCBtY29udGV4dC0+X19zcy5fX2xyKTsKKyAgICAgICAgICAgIGksIGNvbnRleHQuX194
W2ldLCBjb250ZXh0Ll9fZnAsIGNvbnRleHQuX19scik7CiAgICAgICAgIGxvZygic3A6ICUwMTZs
bHggcGM6ICUwMTZsbHggY3BzcjogJTA4eCIsCi0gICAgICAgICAgICBtY29udGV4dC0+X19zcy5f
X3NwLCBtY29udGV4dC0+X19zcy5fX3BjLCBtY29udGV4dC0+X19zcy5fX2Nwc3IpOworICAgICAg
ICAgICAgY29udGV4dC5fX3NwLCBjb250ZXh0Ll9fcGMsIGNvbnRleHQuX19jcHNyKTsKICNlbmRp
ZgogICAgIH0KIAotICAgIG1jb250ZXh0X3QmIG1jb250ZXh0OworICAgIFBsYXRmb3JtUmVnaXN0
ZXJzJiBjb250ZXh0OwogICAgIHZvaWQqIG1hY2hpbmVQQzsKICAgICB2b2lkKiBzdGFja1BvaW50
ZXI7CiAgICAgdm9pZCogZnJhbWVQb2ludGVyOwpAQCAtMTQyLDggKzE0Miw4IEBAIHN0cnVjdCBT
aWduYWxDb250ZXh0IHsKIHN0YXRpYyB2b2lkIGluc3RhbGxDcmFzaEhhbmRsZXIoKQogewogI2lm
IENQVShYODZfNjQpIHx8IENQVShBUk02NCkKLSAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWdu
YWw6OklsbCwgW10gKGludCwgc2lnaW5mb190Kiwgdm9pZCogdWFwKSB7Ci0gICAgICAgIFNpZ25h
bENvbnRleHQgY29udGV4dChzdGF0aWNfY2FzdDx1Y29udGV4dF90Kj4odWFwKS0+dWNfbWNvbnRl
eHQpOworICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbDo6SWxsLCBbXSAoU2lnbmFsLCBT
aWdJbmZvJiwgUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVycykgeworICAgICAgICBTaWduYWxD
b250ZXh0IGNvbnRleHQocmVnaXN0ZXJzKTsKIAogICAgICAgICBpZiAoIWlzSklUUEMoY29udGV4
dC5tYWNoaW5lUEMpKQogICAgICAgICAgICAgcmV0dXJuIFNpZ25hbEFjdGlvbjo6Tm90SGFuZGxl
ZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAppbmRleCAxZGQw
Y2QxZDgzNWM2YzJmMjMxYjAwYjg4NmRkZTRhZjcyYzI2M2NlLi5iMWI1OThkMjBjNWMwMDc3ZDll
OWQwOGUzNjhhZDVjYTE3ODMxYmFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQkJRUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUJCUVBsYW4uY3BwCkBAIC0yNDIsNyArMjQyLDcgQEAgdm9pZCBCQlFQbGFuOjpjb21waWxlRnVu
Y3Rpb25zKENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKICAgICAgICAgQVNTRVJUKHZhbGlkYXRl
RnVuY3Rpb24oZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgbV9tb2R1
bGVJbmZvcm1hdGlvbi5nZXQoKSkpOwogCiAgICAgICAgIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bHNbZnVuY3Rpb25JbmRleF0gPSBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4oKTsKLSAg
ICAgICAgVGllclVwQ291bnQqIHRpZXJVcCA9ICZtX3RpZXJVcENvdW50c1tmdW5jdGlvbkluZGV4
XTsKKyAgICAgICAgVGllclVwQ291bnQqIHRpZXJVcCA9IE9wdGlvbnM6OnVzZUJCUVRpZXJVcENo
ZWNrcygpID8gJm1fdGllclVwQ291bnRzW2Z1bmN0aW9uSW5kZXhdIDogbnVsbHB0cjsKICAgICAg
ICAgYXV0byBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUobV9jb21waWxh
dGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdLCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0
aCwgc2lnbmF0dXJlLCBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdLCBt
X21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIENvbXBpbGF0aW9uTW9kZTo6QkJRTW9k
ZSwgZnVuY3Rpb25JbmRleCwgdGllclVwKTsKIAogICAgICAgICBpZiAoVU5MSUtFTFkoIXBhcnNl
QW5kQ29tcGlsZVJlc3VsdCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAKaW5kZXggMmUwYzk5YTM5YmViZDMxNzhiOTE0
OGQ5NThmZTUzZTU3YTYyMjk3ZS4uMjY0YzM0ZGU0NWRhMTc1YTVkNTE0MWMxNzFlZmU5NWUwNjNj
NWUyNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2ln
bmFsSGFuZGxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0
U2lnbmFsSGFuZGxlci5jcHAKQEAgLTUyLDkgKzUyLDggQEAgc3RhdGljIExhenlOZXZlckRlc3Ry
b3llZDxIYXNoU2V0PHN0ZDo6dHVwbGU8dm9pZCosIHZvaWQqPj4+IGNvZGVMb2NhdGlvbnM7IC8v
ICgKIAogc3RhdGljIGJvb2wgZmFzdEhhbmRsZXJJbnN0YWxsZWQgeyBmYWxzZSB9OwogCi1zdGF0
aWMgU2lnbmFsQWN0aW9uIHRyYXBIYW5kbGVyKGludCwgc2lnaW5mb190KiBzaWdJbmZvLCB2b2lk
KiB1Y29udGV4dCkKK3N0YXRpYyBTaWduYWxBY3Rpb24gdHJhcEhhbmRsZXIoU2lnbmFsLCBTaWdJ
bmZvJiBzaWdJbmZvLCBQbGF0Zm9ybVJlZ2lzdGVycyYgY29udGV4dCkKIHsKLSAgICBtY29udGV4
dF90JiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+KHVjb250ZXh0KS0+dWNfbWNv
bnRleHQ7CiAgICAgdm9pZCogZmF1bHRpbmdJbnN0cnVjdGlvbiA9IE1hY2hpbmVDb250ZXh0Ojpp
bnN0cnVjdGlvblBvaW50ZXIoY29udGV4dCk7CiAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgInN0
YXJ0aW5nIGhhbmRsZXIgZm9yIGZhdWx0IGF0OiAiLCBSYXdQb2ludGVyKGZhdWx0aW5nSW5zdHJ1
Y3Rpb24pKTsKIApAQCAtNjQsNyArNjMsNyBAQCBzdGF0aWMgU2lnbmFsQWN0aW9uIHRyYXBIYW5k
bGVyKGludCwgc2lnaW5mb190KiBzaWdJbmZvLCB2b2lkKiB1Y29udGV4dCkKICAgICBpZiAoaXNK
SVRQQyhmYXVsdGluZ0luc3RydWN0aW9uKSkgewogICAgICAgICBib29sIGZhdWx0ZWRJbkFjdGl2
ZUZhc3RNZW1vcnkgPSBmYWxzZTsKICAgICAgICAgewotICAgICAgICAgICAgdm9pZCogZmF1bHRp
bmdBZGRyZXNzID0gc2lnSW5mby0+c2lfYWRkcjsKKyAgICAgICAgICAgIHZvaWQqIGZhdWx0aW5n
QWRkcmVzcyA9IHNpZ0luZm8uZmF1bHRpbmdBZGRyZXNzOwogICAgICAgICAgICAgZGF0YUxvZ0xu
SWYodmVyYm9zZSwgImNoZWNraW5nIGZhdWx0aW5nIGFkZHJlc3M6ICIsIFJhd1BvaW50ZXIoZmF1
bHRpbmdBZGRyZXNzKSwgIiBpcyBpbiBhbiBhY3RpdmUgZmFzdCBtZW1vcnkiKTsKICAgICAgICAg
ICAgIGZhdWx0ZWRJbkFjdGl2ZUZhc3RNZW1vcnkgPSBXYXNtOjpNZW1vcnk6OmFkZHJlc3NJc0lu
QWN0aXZlRmFzdE1lbW9yeShmYXVsdGluZ0FkZHJlc3MpOwogICAgICAgICB9CkBAIC0xMjQsMTEg
KzEyMywxMSBAQCB2b2lkIGVuYWJsZUZhc3RNZW1vcnkoKQogICAgICAgICAgICAgcmV0dXJuOwog
CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZX0ZBU1RfTUVNT1JZKQotICAgICAgICBpbnN0YWxsU2ln
bmFsSGFuZGxlcihTaWduYWw6OkJ1cywgW10gKGludCBzaWduYWwsIHNpZ2luZm9fdCogc2lnSW5m
bywgdm9pZCogdWNvbnRleHQpIHsKKyAgICAgICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFs
OjpCdXMsIFtdIChTaWduYWwgc2lnbmFsLCBTaWdJbmZvJiBzaWdJbmZvLCBQbGF0Zm9ybVJlZ2lz
dGVycyYgdWNvbnRleHQpIHsKICAgICAgICAgICAgIHJldHVybiB0cmFwSGFuZGxlcihzaWduYWws
IHNpZ0luZm8sIHVjb250ZXh0KTsKICAgICAgICAgfSk7CiAKLSAgICAgICAgaW5zdGFsbFNpZ25h
bEhhbmRsZXIoU2lnbmFsOjpTZWdWLCBbXSAoaW50IHNpZ25hbCwgc2lnaW5mb190KiBzaWdJbmZv
LCB2b2lkKiB1Y29udGV4dCkgeworICAgICAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWw6
OlNlZ1YsIFtdIChTaWduYWwgc2lnbmFsLCBTaWdJbmZvJiBzaWdJbmZvLCBQbGF0Zm9ybVJlZ2lz
dGVycyYgdWNvbnRleHQpIHsKICAgICAgICAgICAgIHJldHVybiB0cmFwSGFuZGxlcihzaWduYWws
IHNpZ0luZm8sIHVjb250ZXh0KTsKICAgICAgICAgfSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21NYWNoaW5lVGhyZWFkcy5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTWFjaGluZVRocmVhZHMuY3BwCmluZGV4IDVhYWM4N2FjYjU3NDdj
N2ZjYTJmOTM2ZWM5Y2Y2NzhiNDMxNzgxNzEuLjBhMzY3ZmQ1ZTIyNTI3ZTljM2M4NzUzNmVjZmQ3
MmIxM2RmNzlkNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21N
YWNoaW5lVGhyZWFkcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1h
Y2hpbmVUaHJlYWRzLmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIk1hY2hpbmVTdGFj
a01hcmtlci5oIgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0
Zi9UaHJlYWRNZXNzYWdlLmg+CisjaW5jbHVkZSA8d3RmL3RocmVhZHMvU2lnbmFscy5oPgogCiBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCkBAIC01Nyw3ICs1OCw3IEBAIHZvaWQg
cmVzZXRJbnN0cnVjdGlvbkNhY2hlT25BbGxUaHJlYWRzKCkKIAogICAgIGNvbnN0IERvdWJseUxp
bmtlZExpc3Q8TWFjaGluZVRocmVhZHM6Ok1hY2hpbmVUaHJlYWQ+JiB0aHJlYWRzID0gd2FzbVRo
cmVhZHMoKS50aHJlYWRzTGlzdEhlYWQobG9ja2VyKTsKICAgICBmb3IgKGNvbnN0IGF1dG8qIHRo
cmVhZCA9IHRocmVhZHMuaGVhZCgpOyB0aHJlYWQ7IHRocmVhZCA9IHRocmVhZC0+bmV4dCgpKSB7
Ci0gICAgICAgIHNlbmRNZXNzYWdlKHRocmVhZC0+bV90aHJlYWQuZ2V0KCksIFtdIChzaWdpbmZv
X3QqLCB1Y29udGV4dF90KikgeworICAgICAgICBzZW5kTWVzc2FnZSh0aHJlYWQtPm1fdGhyZWFk
LmdldCgpLCBbXSAoY29uc3QgUGxhdGZvcm1SZWdpc3RlcnMmKSB7CiAgICAgICAgICAgICAvLyBJ
dCdzIGxpa2VseSB0aGF0IHRoZSBzaWduYWwgaGFuZGxlciB3aWxsIGFscmVhZHkgcmVzZXQgdGhl
IGluc3RydWN0aW9uIGNhY2hlIGJ1dCB3ZSBtaWdodCBhcyB3ZWxsIGJlIHN1cmUuCiAgICAgICAg
ICAgICBXVEY6OmNyb3NzTW9kaWZ5aW5nQ29kZUZlbmNlKCk7CiAgICAgICAgIH0pOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi9Db25maWd1cmF0aW9ucy9XVEYueGNjb25maWcgYi9Tb3VyY2UvV1RG
L0NvbmZpZ3VyYXRpb25zL1dURi54Y2NvbmZpZwppbmRleCA0MjFlZmQ5NjFjMTQ2OGNkMjBkZGM1
YmJmODg5NjIwZWUxY2Y1OGRjLi5hZjE5OWNlYjk1MDZmODk1MGQzM2E5Y2U0ODA3YmE2ZGJiN2Iy
N2U1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NvbmZpZ3VyYXRpb25zL1dURi54Y2NvbmZpZwor
KysgYi9Tb3VyY2UvV1RGL0NvbmZpZ3VyYXRpb25zL1dURi54Y2NvbmZpZwpAQCAtMjcsMyArMjcs
NiBAQCBQUk9EVUNUX05BTUUgPSBXVEY7CiAKIEdDQ19TWU1CT0xTX1BSSVZBVEVfRVhURVJOID0g
WUVTOwogU1RSSVBfSU5TVEFMTEVEX1BST0RVQ1QgPSBOTzsKKworRVhDTFVERURfU09VUkNFX0ZJ
TEVfTkFNRVNfID0gTWFjaEV4Y2VwdGlvbnMuZGVmcworRVhDTFVERURfU09VUkNFX0ZJTEVfTkFN
RVNbc2RrPWlwaG9uZW9zKl0gPSAkKEVYQ0xVREVEX1NPVVJDRV9GSUxFX05BTUVTXyQoVVNFX0lO
VEVSTkFMX1NESykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCA1ZjQ1Mjg3ZjZlM2M2ODg1YjIyYmEyNzc2Y2ZiYzZhMzMyM2JkMDViLi41ODU0NGNjYjYyY2Iy
MjEyYmFlZTc2ZjRkMmEwMWU4OWI2YjdiMDk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTY0LDYgKzY0LDcgQEAKIAkJNTIxODMwMTJDOTlFNDc2QTg0RUVC
RUE4IC8qIFN5bWJvbEltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRjcyQkJEQjEwN0ZBNDI0ODg2MTc4QjlFIC8qIFN5bWJvbEltcGwuY3BwICov
OyB9OwogCQk1MzExQkQ1MzFFQTcxQ0FEMDA1MjUyODEgLyogU2lnbmFscy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzExQkQ1MTFFQTcxQ0FEMDA1
MjUyODEgLyogU2lnbmFscy5jcHAgKi87IH07CiAJCTUzMTFCRDVDMUVBODIyRjkwMDUyNTI4MSAv
KiBUaHJlYWRNZXNzYWdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUzMTFCRDVCMUVBODIyRjkwMDUyNTI4MSAvKiBUaHJlYWRNZXNzYWdlLmNwcCAq
LzsgfTsKKwkJNTM1MzRGMkExRUMwRTEwRTAwMTQxQjJGIC8qIE1hY2hFeGNlcHRpb25zLmRlZnMg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzUzNEYyOTFF
QzBFMTBFMDAxNDFCMkYgLyogTWFjaEV4Y2VwdGlvbnMuZGVmcyAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChDbGllbnQsIFNlcnZlciwgKTsgfTsgfTsKIAkJNzBBOTkzRkUxQUQ3MTUxMzAw
RkE2MTVCIC8qIFN5bWJvbFJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDcwQTk5M0ZDMUFENzE1MTMwMEZBNjE1QiAvKiBTeW1ib2xSZWdp
c3RyeS5jcHAgKi87IH07CiAJCTcwRUNBNjBEMUIwMjQyNjgwMDQ0OTczOSAvKiBBdG9taWNTdHJp
bmdJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDcwRUNBNjBBMUIwMjQyNjgwMDQ0OTczOSAvKiBBdG9taWNTdHJpbmdJbXBsLmNwcCAqLzsgfTsK
IAkJN0FGRUM2QjExRUIyMkI1OTAwREFERTM2IC8qIFVVSUQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FGRUM2QjAxRUIyMkI1OTAwREFERTM2IC8q
IFVVSUQuY3BwICovOyB9OwpAQCAtMjk5LDYgKzMwMCw3IEBACiAJCTUzMTFCRDU3MUVBN0UxQTEw
MDUyNTI4MSAvKiBTaWduYWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNp
Z25hbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMxMUJENTkxRUE4MUE5NjAw
NTI1MjgxIC8qIFRocmVhZE1lc3NhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVGhyZWFkTWVzc2FnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzExQkQ1
QjFFQTgyMkY5MDA1MjUyODEgLyogVGhyZWFkTWVzc2FnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUaHJlYWRNZXNzYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNTM1MzRGMjkxRUMwRTEwRTAwMTQxQjJGIC8qIE1hY2hFeGNlcHRpb25zLmRl
ZnMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLm1pZzsgcGF0aCA9IE1hY2hFeGNlcHRpb25zLmRlZnM7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzOUVCMDYyMUQ1NTI4NDIwMEM4MkVGNyAv
KiBMRUJEZWNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExFQkRlY29k
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNFQzI1M0MxRTk1QUQzMDAwMDgz
MUI5IC8qIFByaW9yaXR5UXVldWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UHJpb3JpdHlRdWV1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NTMwNzFDOTFD
NDA0MjcyMDAzODQ4OTggLyogVGlueUxSVUNhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFRpbnlMUlVDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MTAyMyw2ICsxMDI1LDcgQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTFBNDI4QjhCMUM4Rjg5REQw
MDUxRTlFQiAvKiBBcHBLaXRDb21wYXRpYmlsaXR5RGVjbGFyYXRpb25zLmggKi8sCiAJCQkJMUFD
QUREODIxODg0NDgwMTAwRDhCNzFEIC8qIERlcHJlY2F0ZWRTeW1ib2xzVXNlZEJ5U2FmYXJpLm1t
ICovLAorCQkJCTUzNTM0RjI5MUVDMEUxMEUwMDE0MUIyRiAvKiBNYWNoRXhjZXB0aW9ucy5kZWZz
ICovLAogCQkJCUE4QTQ3MkM1MTUxQTgyNUEwMDQxMjNGRiAvKiBNYWluVGhyZWFkTWFjLm1tICov
LAogCQkJKTsKIAkJCXBhdGggPSBtYWM7CkBAIC0xMzQ2LDYgKzEzNDksNyBAQAogCQkJCTE0M0Y2
MTFGMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEz
QjcyNUVDOTg3NDQ2QUQ5M0YxQTQ0MCAvKiBSYW5kb21EZXZpY2UuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQThBNDc0MTQxNTFBODI1QjAwNDEyM0ZGIC8qIFJhbmRvbU51bWJlci5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQk1MzUzNEYyQTFFQzBFMTBFMDAxNDFCMkYgLyogTWFjaEV4Y2VwdGlvbnMu
ZGVmcyBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDFBMTUxQTgyNUIwMDQxMjNGRiAvKiBSZWZD
b3VudGVkTGVha0NvdW50ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkNERUQwRjMxODExNUM4
NTAwNERCQTcwIC8qIFJ1bkxvb3AuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkNERUQwRUYxODEx
NUMzODAwNERCQTcwIC8qIFJ1bkxvb3BDRi5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmggYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCmlu
ZGV4IDY4NTRhODFlMzk3MjcwNjcwMzRkMDVkYjM5OGE0NzBjMTQyODQyNzYuLjM2Mzg4Mzk1ZDRm
NDNiNDY1Mzg5ZWJjOTgwMmZiYjRkOTBkMjRiN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3Rm
L1BsYXRmb3JtLmgKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaApAQCAtNjYzLDYgKzY2
MywxMCBAQAogI2RlZmluZSBIQVZFX1JFQURMSU5FIDEKICNkZWZpbmUgSEFWRV9TWVNfVElNRUJf
SCAxCiAKKyNpZiBfX2hhc19pbmNsdWRlKDxtYWNoL21hY2hfZXhjLmRlZnM+KSAmJiAhKFBMQVRG
T1JNKFdBVENIT1MpIHx8IFBMQVRGT1JNKEFQUExFVFYpKQorI2RlZmluZSBIQVZFX01BQ0hfRVhD
RVBUSU9OUyAxCisjZW5kaWYKKwogI2lmICFQTEFURk9STShHVEspCiAjZGVmaW5lIFVTRV9BQ0NF
TEVSQVRFIDEKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1SZWdp
c3RlcnMuaCBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtUmVnaXN0ZXJzLmgKaW5kZXggZDViNWFi
YzIyMWJiYWQ4Mjk3NjE5M2VjZTUxYzFjNzYxNzVkYjA2ZC4uZDkxNjU4MTI4ODcwZmYzYTIxMmY0
NmE0MDE2MzAwOGI2ODNlZWZkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1S
ZWdpc3RlcnMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVJlZ2lzdGVycy5oCkBAIC0y
Niw5ICsyNiwxMSBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4K
KyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKICNpZiBPUyhEQVJXSU4pCiAjaW5jbHVk
ZSA8bWFjaC90aHJlYWRfYWN0Lmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CiAjZWxpZiBPUyhXSU5E
T1dTKQogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNlbHNlCkBAIC01NSw2ICs1NywxMSBAQCB0eXBl
ZGVmIGFybV90aHJlYWRfc3RhdGU2NF90IFBsYXRmb3JtUmVnaXN0ZXJzOwogI2Vycm9yIFVua25v
d24gQXJjaGl0ZWN0dXJlCiAjZW5kaWYKIAoraW5saW5lIFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdp
c3RlcnNGcm9tVUNvbnRleHQodWNvbnRleHRfdCogdWNvbnRleHQpCit7CisgICAgcmV0dXJuIHVj
b250ZXh0LT51Y19tY29udGV4dC0+X19zczsKK30KKwogI2VsaWYgT1MoV0lORE9XUykKIAogdXNp
bmcgUGxhdGZvcm1SZWdpc3RlcnMgPSBDT05URVhUOwpAQCAtNjUsNiArNzIsMTEgQEAgc3RydWN0
IFBsYXRmb3JtUmVnaXN0ZXJzIHsKICAgICBtY29udGV4dF90IG1hY2hpbmVDb250ZXh0OwogfTsK
IAoraW5saW5lIFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnNGcm9tVUNvbnRleHQodWNvbnRl
eHRfdCogdWNvbnRleHQpCit7CisgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxQbGF0Zm9ybVJlZ2lz
dGVycyY+KHVjb250ZXh0LT51Y19tY29udGV4dCk7Cit9CisKICNlbHNlCiAKIHN0cnVjdCBQbGF0
Zm9ybVJlZ2lzdGVycyB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9TdGFja0JvdW5kcy5o
IGIvU291cmNlL1dURi93dGYvU3RhY2tCb3VuZHMuaAppbmRleCA1NTQ2MDRmMmFiNDg0YzdjZjcx
ZWUzODYzMGNlYjRjNzljMzNlOTcyLi5jZDYyYzE0OGE2YzdlZmM5NTE3YThiMDliOGEzMmM3ZmUx
OTBjZGVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9TdGFja0JvdW5kcy5oCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL1N0YWNrQm91bmRzLmgKQEAgLTU0LDcgKzU0LDYgQEAgcHVibGljOgogICAg
ICAgICA6IG1fb3JpZ2luKG9yaWdpbikKICAgICAgICAgLCBtX2JvdW5kKGVuZCkKICAgICB7Ci0g
ICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICB9CiAKICAgICB2b2lkKiBvcmlnaW4oKSBj
b25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkSG9sZGVyLmNwcCBiL1NvdXJj
ZS9XVEYvd3RmL1RocmVhZEhvbGRlci5jcHAKaW5kZXggMzBiMjI3Y2RiOGFjNTI2MDc1MGI0N2Q0
ODJhYmMyZDU1YmUzYWM5NC4uOTZkOTFiNWI4N2RkZjk3ODgwNWRiNmViMWY2MGRjMDBlMTQ5YTQ4
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkSG9sZGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXIuY3BwCkBAIC0zNCwxMiArMzQsMTcgQEAKIAogI2luY2x1
ZGUgIlRocmVhZGluZy5oIgogCisjaW5jbHVkZSA8d3RmL3RocmVhZHMvU2lnbmFscy5oPgorCiBu
YW1lc3BhY2UgV1RGIHsKIAogVGhyZWFkU3BlY2lmaWNLZXkgVGhyZWFkSG9sZGVyOjptX2tleSA9
IEludmFsaWRUaHJlYWRTcGVjaWZpY0tleTsKIAogVGhyZWFkSG9sZGVyOjp+VGhyZWFkSG9sZGVy
KCkKIHsKKyNpZiBIQVZFKE1BQ0hfRVhDRVBUSU9OUykKKyAgICByZW1vdmVUaHJlYWQoJm1fdGhy
ZWFkLmdldCgpKTsKKyNlbmRpZgogICAgIG1fdGhyZWFkLT5kaWRFeGl0KCk7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZE1lc3NhZ2UuY3BwIGIvU291cmNlL1dURi93dGYv
VGhyZWFkTWVzc2FnZS5jcHAKaW5kZXggZjE0YmM0NWQzNjE0YzdjNjYzNWViMTdhYjBlMjcyODE2
YTEzNzNkZC4uMDViM2I4OWQ1ZGQ0YjNkOGU0MzdkNTJiYTkzMGE5MzA3M2IxMzhiMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5jcHAKKysrIGIvU291cmNlL1dURi93
dGYvVGhyZWFkTWVzc2FnZS5jcHAKQEAgLTM2LDYgKzM2LDkgQEAKICNpbmNsdWRlIDx3dGYvTG9j
a2VyLmg+CiAjaW5jbHVkZSA8d3RmL3RocmVhZHMvU2lnbmFscy5oPgogCisjaWYgSEFWRShNQUNI
X0VYQ0VQVElPTlMpCisjaW5jbHVkZSA8bWFjaC90aHJlYWRfYWN0Lmg+CisjZW5kaWYKIAogbmFt
ZXNwYWNlIFdURiB7CiAKQEAgLTgzLDEyICs4NiwxMiBAQCB2b2lkIGluaXRpYWxpemVUaHJlYWRN
ZXNzYWdlcygpCiB9CiAKIFNVUFBSRVNTX0FTQU4KLU1lc3NhZ2VTdGF0dXMgc2VuZE1lc3NhZ2VT
Y29wZWQoVGhyZWFkJiB0aHJlYWQsIGNvbnN0IFRocmVhZE1lc3NhZ2UmIG1lc3NhZ2UpCitzdGF0
aWMgTWVzc2FnZVN0YXR1cyBzZW5kTWVzc2FnZVNpZ25hbChUaHJlYWQmIHRocmVhZCwgY29uc3Qg
VGhyZWFkTWVzc2FnZSYgbWVzc2FnZSkKIHsKICAgICBjb25zdGV4cHIgU2lnbmFsIHNpZ25hbCA9
IFNpZ25hbDo6VXNyOwogICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlOwogICAgIHN0ZDo6
Y2FsbF9vbmNlKG9uY2UsIFtdIHsKLSAgICAgICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoc2lnbmFs
LCBbXSAoaW50LCBzaWdpbmZvX3QqIGluZm8sIHZvaWQqIHVhcCkgeworICAgICAgICBpbnN0YWxs
U2lnbmFsSGFuZGxlcihzaWduYWwsIFtdIChTaWduYWwsIFNpZ0luZm8mLCBQbGF0Zm9ybVJlZ2lz
dGVycyYgY29udGV4dCkgewogICAgICAgICAgICAgVGhyZWFkKiB0aHJlYWQgPSBUaHJlYWQ6OmN1
cnJlbnRNYXlCZU51bGwoKTsKIAogICAgICAgICAgICAgaWYgKCF0aHJlYWQpIHsKQEAgLTk4LDcg
KzEwMSw3IEBAIE1lc3NhZ2VTdGF0dXMgc2VuZE1lc3NhZ2VTY29wZWQoVGhyZWFkJiB0aHJlYWQs
IGNvbnN0IFRocmVhZE1lc3NhZ2UmIG1lc3NhZ2UpCiAKICAgICAgICAgICAgIC8vIE5vZGUgc2hv
dWxkIGJlIGRlbGV0ZWQgaW4gdGhlIHNlbmRlciB0aHJlYWQuIERlbGV0aW5nIE5vZGVzIGluIHNp
Z25hbCBoYW5kbGVyIGNhdXNlcyBkZWFkIGxvY2suCiAgICAgICAgICAgICB0aHJlYWQtPnRocmVh
ZE1lc3NhZ2VzKCkuY29uc3VtZUFsbFdpdGhOb2RlKFsmXSAoVGhyZWFkTWVzc2FnZURhdGEqIGRh
dGEsIE5vZGUqIG5vZGUpIHsKLSAgICAgICAgICAgICAgICBkYXRhLT5tZXNzYWdlKGluZm8sIHN0
YXRpY19jYXN0PHVjb250ZXh0X3QqPih1YXApKTsKKyAgICAgICAgICAgICAgICBkYXRhLT5tZXNz
YWdlKGNvbnRleHQpOwogICAgICAgICAgICAgICAgIC8vIEJ5IHNldHRpbmcgcmFuIHZhcmlhYmxl
LCAoMSkgdGhlIHNlbmRlciBhY2tub3dsZWRnZXMgdGhlIGNvbXBsZXRpb24gYW5kCiAgICAgICAg
ICAgICAgICAgLy8gKDIpIGdldHMgdGhlIE5vZGUgdG8gYmUgZGVsZXRlZC4KICAgICAgICAgICAg
ICAgICBkYXRhLT5yYW4uc3RvcmUobm9kZSk7CkBAIC0xNTYsNiArMTU5LDYwIEBAIE1lc3NhZ2VT
dGF0dXMgc2VuZE1lc3NhZ2VTY29wZWQoVGhyZWFkJiB0aHJlYWQsIGNvbnN0IFRocmVhZE1lc3Nh
Z2UmIG1lc3NhZ2UpCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAorI2lm
IEhBVkUoTUFDSF9FWENFUFRJT05TKQorc3RhdGljIE1lc3NhZ2VTdGF0dXMgc2VuZE1lc3NhZ2VN
YWNoKFRocmVhZCYgdGhyZWFkLCBjb25zdCBUaHJlYWRNZXNzYWdlJiBtZXNzYWdlKQoreworICAg
IHN0YXRpYyBTdGF0aWNMb2NrIG1lc3NhZ2VMb2NrOworICAgIGF1dG8gbG9ja2hvbGRlciA9IGhv
bGRMb2NrKG1lc3NhZ2VMb2NrKTsKKworICAgIGF1dG8gcmVzdWx0ID0gdGhyZWFkLnN1c3BlbmQo
KTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIE1lc3NhZ2VTdGF0dXM6OlRocmVh
ZEV4aXRlZDsKKworI2lmIENQVShYODYpCisgICAgdW5zaWduZWQgdXNlckNvdW50ID0gc2l6ZW9m
KFBsYXRmb3JtUmVnaXN0ZXJzKSAvIHNpemVvZihpbnQpOworICAgIHRocmVhZF9zdGF0ZV9mbGF2
b3JfdCBmbGF2b3IgPSBpMzg2X1RIUkVBRF9TVEFURTsKKyNlbGlmIENQVShYODZfNjQpCisgICAg
dW5zaWduZWQgdXNlckNvdW50ID0geDg2X1RIUkVBRF9TVEFURTY0X0NPVU5UOworICAgIHRocmVh
ZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSB4ODZfVEhSRUFEX1NUQVRFNjQ7CisjZWxpZiBDUFUo
QVJNKQorICAgIHVuc2lnbmVkIHVzZXJDb3VudCA9IEFSTV9USFJFQURfU1RBVEVfQ09VTlQ7Cisg
ICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IEFSTV9USFJFQURfU1RBVEU7CisjZWxp
ZiBDUFUoQVJNNjQpCisgICAgdW5zaWduZWQgdXNlckNvdW50ID0gQVJNX1RIUkVBRF9TVEFURTY0
X0NPVU5UOworICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSBBUk1fVEhSRUFEX1NU
QVRFNjQ7CisjZWxzZQorI2Vycm9yIFVua25vd24gQXJjaGl0ZWN0dXJlCisjZW5kaWYKKworICAg
IFBsYXRmb3JtUmVnaXN0ZXJzIHJlZ2lzdGVyczsKKyAgICB0aHJlYWRfc3RhdGVfdCBzdGF0ZSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dGhyZWFkX3N0YXRlX3Q+KCZyZWdpc3RlcnMpOworICAgIHRocmVh
ZF9nZXRfc3RhdGUodGhyZWFkLm1hY2hUaHJlYWQoKSwgZmxhdm9yLCBzdGF0ZSwgJnVzZXJDb3Vu
dCk7CisKKyAgICBtZXNzYWdlKHJlZ2lzdGVycyk7CisKKyAgICB0aHJlYWRfc2V0X3N0YXRlKHRo
cmVhZC5tYWNoVGhyZWFkKCksIGZsYXZvciwgKHRocmVhZF9zdGF0ZV90KSZyZWdpc3RlcnMsIHVz
ZXJDb3VudCk7CisKKyAgICB0aHJlYWQucmVzdW1lKCk7CisgICAgcmV0dXJuIE1lc3NhZ2VTdGF0
dXM6Ok1lc3NhZ2VSYW47Cit9CisKK3N0YXRpYyBib29sIHVzZU1hY2ggPSBmYWxzZTsKK3ZvaWQg
ZGVsaXZlck1lc3NhZ2VzVXNpbmdNYWNoKCkgeyB1c2VNYWNoID0gdHJ1ZTsgfQorCisjZW5kaWYg
Ly8gSEFWRShNQUNIX0VYQ0VQVElPTlMpCisKK01lc3NhZ2VTdGF0dXMgc2VuZE1lc3NhZ2VTY29w
ZWQoVGhyZWFkJiB0aHJlYWQsIGNvbnN0IFRocmVhZE1lc3NhZ2UmIG1lc3NhZ2UpCit7CisjaWYg
SEFWRShNQUNIX0VYQ0VQVElPTlMpCisgICAgaWYgKHVzZU1hY2gpCisgICAgICAgIHJldHVybiBz
ZW5kTWVzc2FnZU1hY2godGhyZWFkLCBtZXNzYWdlKTsKKyNlbmRpZgorICAgIHJldHVybiBzZW5k
TWVzc2FnZVNpZ25hbCh0aHJlYWQsIG1lc3NhZ2UpOworICAgIHJldHVybiBNZXNzYWdlU3RhdHVz
OjpUaHJlYWRFeGl0ZWQ7Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKICNlbmRpZiAvLyBV
U0UoUFRIUkVBRFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRNZXNzYWdlLmgg
Yi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRNZXNzYWdlLmgKaW5kZXggOWFlNTNmMjljZjdlOGZiMDBl
ZjkyMTFkMTZjZTJjZGVkNjAzZWMxYi4uMzAwNDcyYjNlNzFjNDJlYzg5ODc0YTNkZTBmZjM3NjFj
YTk2OTEwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5oCisrKyBi
L1NvdXJjZS9XVEYvd3RmL1RocmVhZE1lc3NhZ2UuaApAQCAtMzYsNyArMzYsNyBAQCBuYW1lc3Bh
Y2UgV1RGIHsKIHZvaWQgaW5pdGlhbGl6ZVRocmVhZE1lc3NhZ2VzKCk7CiAKIGNsYXNzIFRocmVh
ZE1lc3NhZ2VEYXRhOwotdXNpbmcgVGhyZWFkTWVzc2FnZSA9IFNjb3BlZExhbWJkYTx2b2lkKHNp
Z2luZm9fdCosIHVjb250ZXh0X3QqKT47Cit1c2luZyBUaHJlYWRNZXNzYWdlID0gU2NvcGVkTGFt
YmRhPHZvaWQoUGxhdGZvcm1SZWdpc3RlcnMmKT47CiAKIGVudW0gY2xhc3MgTWVzc2FnZVN0YXR1
cyB7CiAgICAgTWVzc2FnZVJhbiwKQEAgLTUxLDEwICs1MSwxNCBAQCBNZXNzYWdlU3RhdHVzIHNl
bmRNZXNzYWdlU2NvcGVkKFRocmVhZCYsIGNvbnN0IFRocmVhZE1lc3NhZ2UmKTsKIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+CiBNZXNzYWdlU3RhdHVzIHNlbmRNZXNzYWdlKFRocmVhZCYgdGFy
Z2V0VGhyZWFkLCBjb25zdCBGdW5jdG9yJiBmdW5jKQogewotICAgIGF1dG8gbGFtYmRhID0gc2Nv
cGVkTGFtYmRhUmVmPHZvaWQoc2lnaW5mb190KiwgdWNvbnRleHRfdCopPihmdW5jKTsKKyAgICBh
dXRvIGxhbWJkYSA9IHNjb3BlZExhbWJkYVJlZjx2b2lkKFBsYXRmb3JtUmVnaXN0ZXJzJik+KGZ1
bmMpOwogICAgIHJldHVybiBzZW5kTWVzc2FnZVNjb3BlZCh0YXJnZXRUaHJlYWQsIGxhbWJkYSk7
CiB9CiAKKyNpZiBIQVZFKE1BQ0hfRVhDRVBUSU9OUykKK3ZvaWQgZGVsaXZlck1lc3NhZ2VzVXNp
bmdNYWNoKCk7CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6c2Vu
ZE1lc3NhZ2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaCBiL1NvdXJj
ZS9XVEYvd3RmL1RocmVhZGluZy5oCmluZGV4IGQyZTUzNmRmN2E4Njk2ZDhlNmI5NWJhNDNlMTcz
ZDNiNTUwYmYxNmEuLjM1MTRlOGMwOWYwZmM5NGQ1MzRiZTJmM2I2ZTdjNDk1MGUwYmNmMDUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5oCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L1RocmVhZGluZy5oCkBAIC0xMzgsNiArMTM4LDEwIEBAIHB1YmxpYzoKIAogI2lmIFVTRShQVEhS
RUFEUykKICAgICBMb2NrbGVzc0JhZzxUaHJlYWRNZXNzYWdlRGF0YSo+JiB0aHJlYWRNZXNzYWdl
cygpIHsgcmV0dXJuIG1fdGhyZWFkTWVzc2FnZXM7IH0KKworI2lmIE9TKERBUldJTikKKyAgICBt
YWNoX3BvcnRfdCBtYWNoVGhyZWFkKCkgeyByZXR1cm4gbV9wbGF0Zm9ybVRocmVhZDsgfQorI2Vu
ZGlmCiAjZW5kaWYKIAogcHJvdGVjdGVkOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvbWFj
L01hY2hFeGNlcHRpb25zLmRlZnMgYi9Tb3VyY2UvV1RGL3d0Zi9tYWMvTWFjaEV4Y2VwdGlvbnMu
ZGVmcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi40MjA1NzQyYTRlZDUwMGY4MDY0ZmVlYjQ5NTVhN2M5NzBkOTlhZjBi
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvbWFjL01hY2hFeGNlcHRpb25zLmRl
ZnMKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlIDxtYWNoL21hY2hfZXhjLmRlZnM+CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi90aHJlYWRzL1NpZ25hbHMuY3BwIGIvU291cmNlL1dURi93dGYvdGhyZWFkcy9T
aWduYWxzLmNwcAppbmRleCA4NTViMjhiMzE3MjE3MjdjZjFmNDMxYTkxOGEyNTFkYzJlNmEzZGZj
Li4wNzIzODk3ZDhhYTU1NTA4ZTQ5NDdhNTI2MmViZDc3MTI1MWJlMTI3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi90aHJlYWRzL1NpZ25hbHMuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3Ro
cmVhZHMvU2lnbmFscy5jcHAKQEAgLTI4LDIxICsyOCwyNjIgQEAKIAogI2lmIFVTRShQVEhSRUFE
UykKIAorI2lmIEhBVkUoTUFDSF9FWENFUFRJT05TKQorZXh0ZXJuICJDIiB7CisjaW5jbHVkZSAi
TWFjaEV4Y2VwdGlvbnNTZXJ2ZXIuaCIKK307CisjZW5kaWYKKwogI2luY2x1ZGUgPGNzdGRpbz4K
ICNpbmNsdWRlIDxtdXRleD4KICNpbmNsdWRlIDxzaWduYWwuaD4KKworI2lmIEhBVkUoTUFDSF9F
WENFUFRJT05TKQorI2luY2x1ZGUgPG1hY2gvbWFjaC5oPgorI2luY2x1ZGUgPG1hY2gvdGhyZWFk
X2FjdC5oPgorI2VuZGlmCisKICNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgogI2luY2x1ZGUgPHd0
Zi9EYXRhTG9nLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTG9j
a2xlc3NCYWcuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3
dGYvVGhyZWFkTWVzc2FnZS5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKwogCiBuYW1l
c3BhY2UgV1RGIHsKIAorICAgIAogc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxMb2NrbGVzc0Jh
ZzxTaWduYWxIYW5kbGVyPj4gaGFuZGxlcnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihTaWduYWw6Ok51
bWJlck9mU2lnbmFscyldID0geyB9Owotc3RhdGljIHN0cnVjdCBzaWdhY3Rpb24gb2xkQWN0aW9u
c1tzdGF0aWNfY2FzdDxzaXplX3Q+KFNpZ25hbDo6TnVtYmVyT2ZTaWduYWxzKV07CiBzdGF0aWMg
c3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZU9uY2VGbGFnc1tzdGF0aWNfY2FzdDxzaXplX3Q+KFNp
Z25hbDo6TnVtYmVyT2ZTaWduYWxzKV07CitzdGF0aWMgc3RydWN0IHNpZ2FjdGlvbiBvbGRBY3Rp
b25zW3N0YXRpY19jYXN0PHNpemVfdD4oU2lnbmFsOjpOdW1iZXJPZlNpZ25hbHMpXTsKKworI2lm
IEhBVkUoTUFDSF9FWENFUFRJT05TKQorc3RhdGljIG1hY2hfcG9ydF90IGV4Y2VwdGlvblBvcnQ7
CitzdGF0aWMgY29uc3RleHByIHNpemVfdCBtYXhNZXNzYWdlU2l6ZSA9IDEgKiBLQjsKKworc3Rh
dGljIHZvaWQgc3RhcnRNYWNoRXhjZXB0aW9uSGFuZGxlclRocmVhZCgpCit7CisgICAgc3RhdGlj
IHN0ZDo6b25jZV9mbGFnIG9uY2U7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZSwgW10geworICAg
ICAgICBpZiAobWFjaF9wb3J0X2FsbG9jYXRlKG1hY2hfdGFza19zZWxmKCksIE1BQ0hfUE9SVF9S
SUdIVF9SRUNFSVZFLCAmZXhjZXB0aW9uUG9ydCkgIT0gS0VSTl9TVUNDRVNTKQorICAgICAgICAg
ICAgQ1JBU0goKTsKKworICAgICAgICBpZiAobWFjaF9wb3J0X2luc2VydF9yaWdodChtYWNoX3Rh
c2tfc2VsZigpLCBleGNlcHRpb25Qb3J0LCBleGNlcHRpb25Qb3J0LCBNQUNIX01TR19UWVBFX01B
S0VfU0VORCkhPSBLRVJOX1NVQ0NFU1MpCisgICAgICAgICAgICBDUkFTSCgpOworCisgICAgICAg
IC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgYSBkaXNwYXRjaCBxdWV1ZS4KKyAgICAgICAgKHZv
aWQpVGhyZWFkOjpjcmVhdGUoCisgICAgICAgICAgICAiV1RGIE1hY2ggRXhjZXB0aW9uIFRocmVh
ZCIsIFtdICgpIHsKKyAgICAgICAgICAgICAgICB1bmlvbiBNZXNzYWdlIHsKKyAgICAgICAgICAg
ICAgICAgICAgbWFjaF9tc2dfaGVhZGVyX3QgaGVhZGVyOworICAgICAgICAgICAgICAgICAgICBj
aGFyIGRhdGFbbWF4TWVzc2FnZVNpemVdOworICAgICAgICAgICAgICAgIH07CisgICAgICAgICAg
ICAgICAgTWVzc2FnZSBtZXNzYWdlSGVhZGVySW47CisgICAgICAgICAgICAgICAgTWVzc2FnZSBt
ZXNzYWdlSGVhZGVyT3V0OworCisgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAg
ICAgICAgICAgICAgICAga2Vybl9yZXR1cm5fdCBtZXNzYWdlUmVzdWx0ID0gbWFjaF9tc2coJm1l
c3NhZ2VIZWFkZXJJbi5oZWFkZXIsIE1BQ0hfUkNWX01TRywgMCwgbWF4TWVzc2FnZVNpemUsIGV4
Y2VwdGlvblBvcnQsIE1BQ0hfTVNHX1RJTUVPVVRfTk9ORSwgTUFDSF9QT1JUX05VTEwpOworICAg
ICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZVJlc3VsdCA9PSBLRVJOX1NVQ0NFU1MpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghbWFjaF9leGNfc2VydmVyKCZtZXNzYWdlSGVhZGVy
SW4uaGVhZGVyLCAmbWVzc2FnZUhlYWRlck91dC5oZWFkZXIpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENSQVNIKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VSZXN1
bHQgPSBtYWNoX21zZygmbWVzc2FnZUhlYWRlck91dC5oZWFkZXIsIE1BQ0hfU0VORF9NU0csIG1l
c3NhZ2VIZWFkZXJPdXQuaGVhZGVyLm1zZ2hfc2l6ZSwgMCwgbWVzc2FnZUhlYWRlck91dC5oZWFk
ZXIubXNnaF9sb2NhbF9wb3J0LCAwLCBNQUNIX1BPUlRfTlVMTCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChtZXNzYWdlUmVzdWx0ID09IEtFUk5fU1VDQ0VTUyk7Cisg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxv
Z0xuKCJGYWlsZWQgdG8gcmVjZWl2ZSBtYWNoIG1lc3NhZ2UgZHVlIHRvICIsIG1hY2hfZXJyb3Jf
c3RyaW5nKG1lc3NhZ2VSZXN1bHQpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0pLmxl
YWtSZWYoKTsKKyAgICB9KTsKK30KKworc3RhdGljIFNpZ25hbCBmcm9tTWFjaEV4Y2VwdGlvbihl
eGNlcHRpb25fdHlwZV90IHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBF
WENfQkFEX0FDQ0VTUzogcmV0dXJuIFNpZ25hbDo6U2VnVjsKKyAgICBjYXNlIEVYQ19CQURfSU5T
VFJVQ1RJT046IHJldHVybiBTaWduYWw6OklsbDsKKyAgICBjYXNlIEVYQ19CUkVBS1BPSU5UOiBy
ZXR1cm4gU2lnbmFsOjpUcmFwOworICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKyAgICByZXR1
cm4gU2lnbmFsOjpVbmtub3duOworfQorCitzdGF0aWMgZXhjZXB0aW9uX21hc2tfdCB0b01hY2hN
YXNrKFNpZ25hbCBzaWduYWwpCit7CisgICAgc3dpdGNoIChzaWduYWwpIHsKKyAgICBjYXNlIFNp
Z25hbDo6U2VnVjogcmV0dXJuIEVYQ19NQVNLX0JBRF9BQ0NFU1M7CisgICAgY2FzZSBTaWduYWw6
OklsbDogcmV0dXJuIEVYQ19NQVNLX0JBRF9JTlNUUlVDVElPTjsKKyAgICBjYXNlIFNpZ25hbDo6
VHJhcDogcmV0dXJuIEVYQ19NQVNLX0JSRUFLUE9JTlQ7CisgICAgZGVmYXVsdDogYnJlYWs7Cisg
ICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2V4dGVybiAiQyIg
eworCisvLyBXZSBuZWVkIHRvIGltcGxlbWVudCBzdHVicyBmb3IgY2F0Y2hfbWFjaF9leGNlcHRp
b25fcmFpc2UgYW5kIGNhdGNoX21hY2hfZXhjZXB0aW9uX3JhaXNlX3N0YXRlX2lkZW50aXR5Lgor
Ly8gVGhlIE1pRyBnZW5lcmF0ZWQgZmlsZSB3aWxsIGZhaWwgdG8gbGluayBvdGhlcndpc2UsIGV2
ZW4gdGhvdWdoIHdlIGRvbid0IHVzZSB0aGUgZnVuY3Rpb25zLiBPbmx5IHRoZQorLy8gY2F0Y2hf
bWFjaF9leGNlcHRpb25fcmFpc2Vfc3RhdGUgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBiZWNh
dXNlIHdlIHBhc3MgRVhDRVBUSU9OX1NUQVRFIHRvCisvLyB0aHJlYWRfc2V0X2V4Y2VwdGlvbl9w
b3J0cy4KK2tlcm5fcmV0dXJuX3QgY2F0Y2hfbWFjaF9leGNlcHRpb25fcmFpc2UobWFjaF9wb3J0
X3QsIG1hY2hfcG9ydF90LCBtYWNoX3BvcnRfdCwgZXhjZXB0aW9uX3R5cGVfdCwgbWFjaF9leGNl
cHRpb25fZGF0YV90LCBtYWNoX21zZ190eXBlX251bWJlcl90KQoreworICAgIGRhdGFMb2dMbigi
V2Ugc2hvdWxkIG5vdCBoYXZlIGNhbGxlZCBjYXRjaF9leGNlcHRpb25fcmFpc2UoKSwgcGxlYXNl
IGZpbGUgYSBidWcgYXQgYnVncy53ZWJraXQub3JnIik7CisgICAgcmV0dXJuIEtFUk5fRkFJTFVS
RTsKK30KKwora2Vybl9yZXR1cm5fdCBjYXRjaF9tYWNoX2V4Y2VwdGlvbl9yYWlzZV9zdGF0ZV9p
ZGVudGl0eShtYWNoX3BvcnRfdCwgbWFjaF9wb3J0X3QsIG1hY2hfcG9ydF90LCBleGNlcHRpb25f
dHlwZV90LCBtYWNoX2V4Y2VwdGlvbl9kYXRhX3QsIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QsIGlu
dCosIHRocmVhZF9zdGF0ZV90LCBtYWNoX21zZ190eXBlX251bWJlcl90LCB0aHJlYWRfc3RhdGVf
dCwgIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QqKQoreworICAgIGRhdGFMb2dMbigiV2Ugc2hvdWxk
IG5vdCBoYXZlIGNhbGxlZCBjYXRjaF9tYWNoX2V4Y2VwdGlvbl9yYWlzZV9zdGF0ZV9pZGVudGl0
eSwgcGxlYXNlIGZpbGUgYSBidWcgYXQgYnVncy53ZWJraXQub3JnIik7CisgICAgcmV0dXJuIEtF
Uk5fRkFJTFVSRTsKK30KKwora2Vybl9yZXR1cm5fdCBjYXRjaF9tYWNoX2V4Y2VwdGlvbl9yYWlz
ZV9zdGF0ZSgKKyAgICBtYWNoX3BvcnRfdCBwb3J0LAorICAgIGV4Y2VwdGlvbl90eXBlX3QgZXhj
ZXB0aW9uVHlwZSwKKyAgICBjb25zdCBtYWNoX2V4Y2VwdGlvbl9kYXRhX3QgZXhjZXB0aW9uRGF0
YSwKKyAgICBtYWNoX21zZ190eXBlX251bWJlcl90IGRhdGFDb3VudCwKKyAgICBpbnQqIHN0YXRl
Rmxhdm9yLAorICAgIGNvbnN0IHRocmVhZF9zdGF0ZV90IGluU3RhdGUsCisgICAgbWFjaF9tc2df
dHlwZV9udW1iZXJfdCBpblN0YXRlQ291bnQsCisgICAgdGhyZWFkX3N0YXRlX3Qgb3V0U3RhdGUs
CisgICAgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCogb3V0U3RhdGVDb3VudCkKK3sKKyAgICBSRUxF
QVNFX0FTU0VSVChwb3J0ID09IGV4Y2VwdGlvblBvcnQpOworICAgIFNpZ25hbCBzaWduYWwgPSBm
cm9tTWFjaEV4Y2VwdGlvbihleGNlcHRpb25UeXBlKTsKKyAgICBkYXRhTG9nTG4oInJlY2VpdmVk
U2lnbmFsICIsIGV4Y2VwdGlvblR5cGUpOworICAgIGRhdGFMb2dMbigiVGhyZWFkOiAiLCBleGNl
cHRpb25EYXRhWzBdKTsKKyAgICBSRUxFQVNFX0FTU0VSVChzaWduYWwgIT0gU2lnbmFsOjpVbmtu
b3duKTsKKworICAgIG1lbWNweShvdXRTdGF0ZSwgaW5TdGF0ZSwgaW5TdGF0ZUNvdW50ICogc2l6
ZW9mKGluU3RhdGVbMF0pKTsKKyAgICAqb3V0U3RhdGVDb3VudCA9IGluU3RhdGVDb3VudDsKKwor
I2lmIENQVShYODZfNjQpCisgICAgUkVMRUFTRV9BU1NFUlQoKnN0YXRlRmxhdm9yID09IHg4Nl9U
SFJFQURfU1RBVEUpOworICAgIFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMgPSByZWludGVy
cHJldF9jYXN0PHg4Nl90aHJlYWRfc3RhdGVfdCo+KG91dFN0YXRlKS0+dXRzLnRzNjQ7CisjZWxp
ZiBDUFUoWDg2KQorICAgIFJFTEVBU0VfQVNTRVJUKCpzdGF0ZUZsYXZvciA9PSB4ODZfVEhSRUFE
X1NUQVRFKTsKKyAgICBQbGF0Zm9ybVJlZ2lzdGVycyYgcmVnaXN0ZXJzID0gcmVpbnRlcnByZXRf
Y2FzdDx4ODZfdGhyZWFkX3N0YXRlX3QqPihvdXRTdGF0ZSktPnV0cy50czMyOworI2VsaWYgQ1BV
KEFSTTY0KQorICAgIFJFTEVBU0VfQVNTRVJUKCpzdGF0ZUZsYXZvciA9PSBBUk1fVEhSRUFEX1NU
QVRFKTsKKyAgICBQbGF0Zm9ybVJlZ2lzdGVycyYgcmVnaXN0ZXJzID0gcmVpbnRlcnByZXRfY2Fz
dDxhcm1fdW5pZmllZF90aHJlYWRfc3RhdGUqPihvdXRTdGF0ZSktPnRzXzY0OworI2VsaWYgQ1BV
KEFSTSkKKyAgICBSRUxFQVNFX0FTU0VSVCgqc3RhdGVGbGF2b3IgPT0gQVJNX1RIUkVBRF9TVEFU
RSk7CisgICAgUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8
YXJtX3VuaWZpZWRfdGhyZWFkX3N0YXRlKj4ob3V0U3RhdGUpLT50c18zMjsKKyNlbmRpZgorCisg
ICAgU2lnSW5mbyBpbmZvOworICAgIGlmIChzaWduYWwgPT0gU2lnbmFsOjpTZWdWKSB7CisgICAg
ICAgIEFTU0VSVF9VTlVTRUQoZGF0YUNvdW50LCBkYXRhQ291bnQgPT0gMik7CisgICAgICAgIGlu
Zm8uZmF1bHRpbmdBZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZXhjZXB0aW9uRGF0
YVsxXSk7CisgICAgfQorCisgICAgYm9vbCBkaWRIYW5kbGUgPSBmYWxzZTsKKyAgICBoYW5kbGVy
c1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNpZ25hbCldLT5pdGVyYXRlKFsmXSAoY29uc3QgU2lnbmFs
SGFuZGxlciYgaGFuZGxlcikgeworICAgICAgICBTaWduYWxBY3Rpb24gaGFuZGxlclJlc3VsdCA9
IGhhbmRsZXIoc2lnbmFsLCBpbmZvLCByZWdpc3RlcnMpOworICAgICAgICBkYXRhTG9nTG4oc3Rh
dGljX2Nhc3Q8aW50PihoYW5kbGVyUmVzdWx0KSk7CisgICAgICAgIHN3aXRjaCAoaGFuZGxlclJl
c3VsdCkgeworICAgICAgICBjYXNlIFNpZ25hbEFjdGlvbjo6SGFuZGxlZDoKKyAgICAgICAgICAg
IGRpZEhhbmRsZSA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfSk7CisKKyAgICBpZiAoZGlkSGFu
ZGxlKQorICAgICAgICByZXR1cm4gS0VSTl9TVUNDRVNTOworICAgIHJldHVybiBLRVJOX0ZBSUxV
UkU7Cit9CisKK307CisKK3N0YXRpYyBib29sIHVzZU1hY2ggeyBmYWxzZSB9Owordm9pZCBoYW5k
bGVTaWduYWxzV2l0aE1hY2goKQoreworICAgIGRlbGl2ZXJNZXNzYWdlc1VzaW5nTWFjaCgpOwor
ICAgIHVzZU1hY2ggPSB0cnVlOworfQorCisKK3N0YXRpYyBTdGF0aWNMb2NrIHRocmVhZExvY2s7
CitleGNlcHRpb25fbWFza190IGFjdGl2ZUV4Y2VwdGlvbnMgeyAwIH07CisKK2lubGluZSB2b2lk
IHNldEV4Y2VwdGlvblBvcnRzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgVGhyZWFkKiB0aHJlYWQp
Cit7CisgICAga2Vybl9yZXR1cm5fdCByZXN1bHQgPSB0aHJlYWRfc2V0X2V4Y2VwdGlvbl9wb3J0
cyh0aHJlYWQtPm1hY2hUaHJlYWQoKSwgYWN0aXZlRXhjZXB0aW9ucywgZXhjZXB0aW9uUG9ydCwg
RVhDRVBUSU9OX1NUQVRFIHwgTUFDSF9FWENFUFRJT05fQ09ERVMsIE1BQ0hJTkVfVEhSRUFEX1NU
QVRFKTsKKyAgICBpZiAocmVzdWx0ICE9IEtFUk5fU1VDQ0VTUykgeworICAgICAgICBkYXRhTG9n
TG4oInRocmVhZCBzZXQgcG9ydCBmYWlsZWQgZHVlIHRvICIsIG1hY2hfZXJyb3Jfc3RyaW5nKHJl
c3VsdCkpOworICAgICAgICBDUkFTSCgpOworICAgIH0KK30KKworaW5saW5lIEhhc2hTZXQ8VGhy
ZWFkKj4mIGFjdGl2ZVRocmVhZHMoY29uc3QgQWJzdHJhY3RMb2NrZXImKQoreworICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PFRocmVhZCo+PiBhY3RpdmVUaHJlYWRzOworICAgIHJl
dHVybiBhY3RpdmVUaHJlYWRzOworfQorCit2b2lkIHJlZ2lzdGVyVGhyZWFkKFRocmVhZCogdGhy
ZWFkKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sodGhyZWFkTG9jayk7CisgICAgYXV0
byByZXN1bHQgPSBhY3RpdmVUaHJlYWRzKGxvY2tlcikuYWRkKHRocmVhZCk7CisKKyAgICBpZiAo
cmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIHNldEV4Y2VwdGlvblBvcnRzKGxvY2tlciwgdGhy
ZWFkKTsKK30KKwordm9pZCByZW1vdmVUaHJlYWQoVGhyZWFkKiB0aHJlYWQpCit7CisgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayh0aHJlYWRMb2NrKTsKKyAgICBhY3RpdmVUaHJlYWRzKGxvY2tl
cikucmVtb3ZlKHRocmVhZCk7Cit9CiAKLXN0YXRpYyB2b2lkIGpzY1NpZ25hbEhhbmRsZXIoaW50
IHNpZywgc2lnaW5mb190KiBpbmZvLCB2b2lkKiBtY29udGV4dCkKKyNlbmRpZiAvLyBIQVZFKE1B
Q0hfRVhDRVBUSU9OUykKKworc3RhdGljIHZvaWQganNjU2lnbmFsSGFuZGxlcihpbnQsIHNpZ2lu
Zm9fdCosIHZvaWQqKTsKKwordm9pZCBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWwgc2lnbmFs
LCBTaWduYWxIYW5kbGVyJiYgaGFuZGxlcikKK3sKKyAgICBBU1NFUlQoc2lnbmFsIDwgU2lnbmFs
OjpVbmtub3duKTsKKyAgICBpZiAoc2lnbmFsID09IFNpZ25hbDo6QnVzICYmICF1c2VNYWNoKQor
ICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKCF1c2VNYWNoIHx8IHNpZ25hbCAhPSBTaWduYWw6
OlVzcik7CisKKyNpZiBIQVZFKE1BQ0hfRVhDRVBUSU9OUykKKyAgICBpZiAodXNlTWFjaCkKKyAg
ICAgICAgc3RhcnRNYWNoRXhjZXB0aW9uSGFuZGxlclRocmVhZCgpOworI2VuZGlmCisKKyAgICBz
dGQ6OmNhbGxfb25jZShpbml0aWFsaXplT25jZUZsYWdzW3N0YXRpY19jYXN0PHNpemVfdD4oc2ln
bmFsKV0sIFsmXSB7CisgICAgICAgIGhhbmRsZXJzW3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFs
KV0uY29uc3RydWN0KCk7CisKKyAgICAgICAgaWYgKCF1c2VNYWNoKSB7CisgICAgICAgICAgICBz
dHJ1Y3Qgc2lnYWN0aW9uIGFjdGlvbjsKKyAgICAgICAgICAgIGFjdGlvbi5zYV9zaWdhY3Rpb24g
PSBqc2NTaWduYWxIYW5kbGVyOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBzaWdmaWxsc2V0
KCZhY3Rpb24uc2FfbWFzayk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmVzdWx0KTsK
KyAgICAgICAgICAgIGFjdGlvbi5zYV9mbGFncyA9IFNBX1NJR0lORk87CisgICAgICAgICAgICBy
ZXN1bHQgPSBzaWdhY3Rpb24odG9TeXN0ZW1TaWduYWwoc2lnbmFsKSwgJmFjdGlvbiwgJm9sZEFj
dGlvbnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzaWduYWwpXSk7CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVCghcmVzdWx0KTsKKyAgICAgICAgfQorCisgICAgfSk7CisKKyAgICBoYW5kbGVyc1tz
dGF0aWNfY2FzdDxzaXplX3Q+KHNpZ25hbCldLT5hZGQoV1RGTW92ZShoYW5kbGVyKSk7CisKKyNp
ZiBIQVZFKE1BQ0hfRVhDRVBUSU9OUykKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHRocmVh
ZExvY2spOworICAgIGlmICh1c2VNYWNoKSB7CisgICAgICAgIGFjdGl2ZUV4Y2VwdGlvbnMgfD0g
dG9NYWNoTWFzayhzaWduYWwpOworCisgICAgICAgIGZvciAoVGhyZWFkKiB0aHJlYWQgOiBhY3Rp
dmVUaHJlYWRzKGxvY2tlcikpCisgICAgICAgICAgICBzZXRFeGNlcHRpb25Qb3J0cyhsb2NrZXIs
IHRocmVhZCk7CisgICAgfQorI2VuZGlmCit9CisKK3ZvaWQganNjU2lnbmFsSGFuZGxlcihpbnQg
c2lnLCBzaWdpbmZvX3QqIGluZm8sIHZvaWQqIHVjb250ZXh0KQogewogICAgIFNpZ25hbCBzaWdu
YWwgPSBmcm9tU3lzdGVtU2lnbmFsKHNpZyk7CiAKQEAgLTYyLDEwICszMDMsMTYgQEAgc3RhdGlj
IHZvaWQganNjU2lnbmFsSGFuZGxlcihpbnQgc2lnLCBzaWdpbmZvX3QqIGluZm8sIHZvaWQqIG1j
b250ZXh0KQogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgU2lnSW5mbyBzaWdJbmZvOwor
ICAgIGlmIChzaWduYWwgPT0gU2lnbmFsOjpTZWdWIHx8IHNpZ25hbCA9PSBTaWduYWw6OkJ1cykK
KyAgICAgICAgc2lnSW5mby5mYXVsdGluZ0FkZHJlc3MgPSBpbmZvLT5zaV9hZGRyOworCisgICAg
UGxhdGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVycyA9IHJlZ2lzdGVyc0Zyb21VQ29udGV4dChyZWlu
dGVycHJldF9jYXN0PHVjb250ZXh0X3QqPih1Y29udGV4dCkpOworCiAgICAgYm9vbCBkaWRIYW5k
bGUgPSBmYWxzZTsKICAgICBib29sIHJlc3RvcmVEZWZhdWx0SGFuZGxlciA9IGZhbHNlOwogICAg
IGhhbmRsZXJzW3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0tPml0ZXJhdGUoWyZdIChjb25z
dCBTaWduYWxIYW5kbGVyJiBoYW5kbGVyKSB7Ci0gICAgICAgIHN3aXRjaCAoaGFuZGxlcihzaWcs
IGluZm8sIG1jb250ZXh0KSkgeworICAgICAgICBzd2l0Y2ggKGhhbmRsZXIoc2lnbmFsLCBzaWdJ
bmZvLCByZWdpc3RlcnMpKSB7CiAgICAgICAgIGNhc2UgU2lnbmFsQWN0aW9uOjpIYW5kbGVkOgog
ICAgICAgICAgICAgZGlkSGFuZGxlID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtODUs
MTMgKzMzMiwxMyBAQCBzdGF0aWMgdm9pZCBqc2NTaWduYWxIYW5kbGVyKGludCBzaWcsIHNpZ2lu
Zm9fdCogaW5mbywgdm9pZCogbWNvbnRleHQpCiAgICAgc3RydWN0IHNpZ2FjdGlvbiYgb2xkQWN0
aW9uID0gb2xkQWN0aW9uc1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNpZ25hbCldOwogICAgIGlmIChz
aWduYWwgPT0gU2lnbmFsOjpVc3IpIHsKICAgICAgICAgaWYgKG9sZEFjdGlvbi5zYV9zaWdhY3Rp
b24pCi0gICAgICAgICAgICBvbGRBY3Rpb24uc2Ffc2lnYWN0aW9uKHNpZywgaW5mbywgbWNvbnRl
eHQpOworICAgICAgICAgICAgb2xkQWN0aW9uLnNhX3NpZ2FjdGlvbihzaWcsIGluZm8sIHVjb250
ZXh0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmICghZGlkSGFuZGxlKSB7CiAg
ICAgICAgIGlmIChvbGRBY3Rpb24uc2Ffc2lnYWN0aW9uKSB7Ci0gICAgICAgICAgICBvbGRBY3Rp
b24uc2Ffc2lnYWN0aW9uKHNpZywgaW5mbywgbWNvbnRleHQpOworICAgICAgICAgICAgb2xkQWN0
aW9uLnNhX3NpZ2FjdGlvbihzaWcsIGluZm8sIHVjb250ZXh0KTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogCkBAIC0xMDAsMjQgKzM0Nyw2IEBAIHN0YXRpYyB2b2lkIGpzY1NpZ25h
bEhhbmRsZXIoaW50IHNpZywgc2lnaW5mb190KiBpbmZvLCB2b2lkKiBtY29udGV4dCkKICAgICB9
CiB9CiAKLXZvaWQgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFsIHNpZ25hbCwgU2lnbmFsSGFu
ZGxlciYmIGhhbmRsZXIpCi17Ci0gICAgQVNTRVJUKHNpZ25hbCA8IFNpZ25hbDo6VW5rbm93bik7
Ci0gICAgc3RkOjpjYWxsX29uY2UoaW5pdGlhbGl6ZU9uY2VGbGFnc1tzdGF0aWNfY2FzdDxzaXpl
X3Q+KHNpZ25hbCldLCBbJl0gewotICAgICAgICBoYW5kbGVyc1tzdGF0aWNfY2FzdDxzaXplX3Q+
KHNpZ25hbCldLmNvbnN0cnVjdCgpOwotCi0gICAgICAgIHN0cnVjdCBzaWdhY3Rpb24gYWN0aW9u
OwotICAgICAgICBhY3Rpb24uc2Ffc2lnYWN0aW9uID0ganNjU2lnbmFsSGFuZGxlcjsKLSAgICAg
ICAgYXV0byByZXN1bHQgPSBzaWdmaWxsc2V0KCZhY3Rpb24uc2FfbWFzayk7Ci0gICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFyZXN1bHQpOwotICAgICAgICBhY3Rpb24uc2FfZmxhZ3MgPSBTQV9TSUdJ
TkZPOwotICAgICAgICByZXN1bHQgPSBzaWdhY3Rpb24odG9TeXN0ZW1TaWduYWwoc2lnbmFsKSwg
JmFjdGlvbiwgJm9sZEFjdGlvbnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzaWduYWwpXSk7Ci0gICAg
ICAgIFJFTEVBU0VfQVNTRVJUKCFyZXN1bHQpOwotICAgIH0pOwotCi0gICAgaGFuZGxlcnNbc3Rh
dGljX2Nhc3Q8c2l6ZV90PihzaWduYWwpXS0+YWRkKFdURk1vdmUoaGFuZGxlcikpOwotfQotCiB9
IC8vIG5hbWVzcGFjZSBXVEYKIAogI2VuZGlmIC8vIFVTRShQVEhSRUFEUykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL3RocmVhZHMvU2lnbmFscy5oIGIvU291cmNlL1dURi93dGYvdGhyZWFk
cy9TaWduYWxzLmgKaW5kZXggMWU0ZWI0NmVhYTc3NGExZWU4OWY2ZmIyZGFlZjMzMjY4Y2U1Njc3
OS4uYWNhNmIzNGY4MTZmMDE3NjkzMDAzNmMxOGI4MjFjMjdhYmIwZTYwYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvdGhyZWFkcy9TaWduYWxzLmgKKysrIGIvU291cmNlL1dURi93dGYvdGhy
ZWFkcy9TaWduYWxzLmgKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgPHNpZ25hbC5oPgog
I2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybVJlZ2lzdGVy
cy5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIApAQCAtNzksNyArODAsMTEgQEAgZW51bSBjbGFzcyBT
aWduYWxBY3Rpb24gewogICAgIEZvcmNlRGVmYXVsdAogfTsKIAotdXNpbmcgU2lnbmFsSGFuZGxl
ciA9IEZ1bmN0aW9uPFNpZ25hbEFjdGlvbihpbnQsIHNpZ2luZm9fdCosIHZvaWQqKT47CitzdHJ1
Y3QgU2lnSW5mbyB7CisgICAgdm9pZCogZmF1bHRpbmdBZGRyZXNzIHsgMCB9OworfTsKKwordXNp
bmcgU2lnbmFsSGFuZGxlciA9IEZ1bmN0aW9uPFNpZ25hbEFjdGlvbihTaWduYWwsIFNpZ0luZm8m
LCBQbGF0Zm9ybVJlZ2lzdGVycyYpPjsKIAogLy8gQ2FsbCB0aGlzIG1ldGhvZCB3aGVuZXZlciB5
b3Ugd2FudCB0byBpbnN0YWxsIGEgc2lnbmFsIGhhbmRsZXIuIEl0J3Mgb2sgdG8gY2FsbCB0aGlz
IGZ1bmN0aW9uIGxhemlseS4KIC8vIE5vdGU6IFlvdXIgc2lnbmFsIGhhbmRsZXIgd2lsbCBiZSBj
YWxsZWQgZXZlcnkgdGltZSB0aGUgaGFuZGxlciBmb3IgdGhlIGRlc2lyZWQgc2lnbmFsIGlzIGNh
bGxlZC4KQEAgLTg3LDkgKzkyLDE5IEBAIHVzaW5nIFNpZ25hbEhhbmRsZXIgPSBGdW5jdGlvbjxT
aWduYWxBY3Rpb24oaW50LCBzaWdpbmZvX3QqLCB2b2lkKik+OwogLy8gVGhpcyBmdW5jdGlvbiBp
cyBjdXJyZW50bHkgYSBvbmUgd2F5IHN0cmVldCBpLmUuIG9uY2UgaW5zdGFsbGVkLCBhIHNpZ25h
bCBoYW5kbGVyIGNhbm5vdCBiZSB1bmluc3RhbGxlZC4KIHZvaWQgaW5zdGFsbFNpZ25hbEhhbmRs
ZXIoU2lnbmFsLCBTaWduYWxIYW5kbGVyJiYpOwogCisKKyNpZiBIQVZFKE1BQ0hfRVhDRVBUSU9O
UykKK2NsYXNzIFRocmVhZDsKK3ZvaWQgcmVnaXN0ZXJUaHJlYWQoVGhyZWFkKik7Cit2b2lkIHJl
bW92ZVRocmVhZChUaHJlYWQqKTsKKwordm9pZCBoYW5kbGVTaWduYWxzV2l0aE1hY2goKTsKKyNl
bmRpZiAvLyBIQVZFKE1BQ0hfRVhDRVBUSU9OUykKKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVz
aW5nIFdURjo6U2lnbmFsOwordXNpbmcgV1RGOjpTaWdJbmZvOwogdXNpbmcgV1RGOjp0b1N5c3Rl
bVNpZ25hbDsKIHVzaW5nIFdURjo6ZnJvbVN5c3RlbVNpZ25hbDsKIHVzaW5nIFdURjo6U2lnbmFs
QWN0aW9uOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmlu
ZGV4IDE3ZjlmMDExMTMxMDJhOGE0YjE3ZmNlNGFmMWQ5NWViODYwMDY5ZGIuLjZjZGE0ODQxMDY1
Y2UwNGE5MWI4ZGI1ZTJiMjAyOGM0MGVjMDVhNmYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxv
ZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxNy0wNS0xMSAgS2Vp
dGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgTWFjaCBl
eGNlcHRpb25zIGluc3RlYWQgb2Ygc2lnbmFscyB3aGVyZSBwb3NzaWJsZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcxODY1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dURi9UaHJlYWRNZXNzYWdlcy5jcHA6CisgICAgICAgIChydW5UaHJlYWRNZXNzYWdlVGVzdCk6
CisgICAgICAgIChURVNUKToKKwogMjAxNy0wNS0wOSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFJlbW92ZSBzdXBwb3J0IGZvciBsZWdhY3kgTm90aWZpY2F0aW9ucwpk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVGhyZWFkTWVzc2FnZXMu
Y3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVGhyZWFkTWVzc2FnZXMuY3BwCmlu
ZGV4IGQ2M2U5YmYxZTc1MDY4YjZjMWE3ZTdlNmU4YjY3YzRlYjA1MTU4ODIuLmU2YTU3ODk0YmI1
MTZmZTFjZTcxM2QwN2JmMThmMDcwNmVmYTkzN2MgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV1RGL1RocmVhZE1lc3NhZ2VzLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9UaHJlYWRNZXNzYWdlcy5jcHAKQEAgLTUwLDcgKzUwLDcgQEAgc3RhdGlj
IHZvaWQgcnVuVGhyZWFkTWVzc2FnZVRlc3QodW5zaWduZWQgbnVtU2VuZGVycywgdW5zaWduZWQg
bnVtTWVzc2FnZXMpCiAgICAgZm9yICh1bnNpZ25lZCBzZW5kZXJJRCA9IDA7IHNlbmRlcklEIDwg
bnVtU2VuZGVyczsgKytzZW5kZXJJRCkgewogICAgICAgICBzZW5kZXJUaHJlYWRzW3NlbmRlcklE
XSA9IFRocmVhZDo6Y3JlYXRlKCJUaHJlYWRNZXNzYWdlIHNlbmRlciIsIFtzZW5kZXJJRCwgbnVt
TWVzc2FnZXMsIHJlY2VpdmVyVGhyZWFkLCAmbWVzc2FnZXNSdW4sICZoYW5kbGVyc1J1bl0gKCkg
ewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bU1lc3NhZ2VzOyArK2kp
IHsKLSAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHNlbmRNZXNzYWdlKCpyZWNlaXZlclRo
cmVhZC5nZXQoKSwgW3NlbmRlcklELCAmaGFuZGxlcnNSdW5dIChzaWdpbmZvX3QqLCB1Y29udGV4
dF90KikgeworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gc2VuZE1lc3NhZ2UoKnJlY2Vp
dmVyVGhyZWFkLmdldCgpLCBbc2VuZGVySUQsICZoYW5kbGVyc1J1bl0gKFBsYXRmb3JtUmVnaXN0
ZXJzJikgewogICAgICAgICAgICAgICAgICAgICBoYW5kbGVyc1J1bltzZW5kZXJJRF0rKzsKICAg
ICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShyZXN1bHQgPT0g
V1RGOjpNZXNzYWdlU3RhdHVzOjpNZXNzYWdlUmFuKTsKQEAgLTk1LDcgKzk1LDcgQEAgcHVibGlj
OgogVEVTVChUaHJlYWRNZXNzYWdlLCBTaWduYWxzV29ya09uRXhpdCkKIHsKICAgICBzdGF0aWMg
Ym9vbCBoYW5kbGVyUmFuID0gZmFsc2U7Ci0gICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFs
OjpVc3IsIFtdIChpbnQsIHNpZ2luZm9fdCosIHZvaWQqKSAtPiBTaWduYWxBY3Rpb24geworICAg
IGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbDo6VXNyLCBbXSAoU2lnbmFsLCBTaWdJbmZvJiwg
UGxhdGZvcm1SZWdpc3RlcnMmKSAtPiBTaWduYWxBY3Rpb24gewogICAgICAgICBkYXRhTG9nTG4o
ImhlcmUiKTsKICAgICAgICAgaGFuZGxlclJhbiA9IHRydWU7CiAgICAgICAgIHJldHVybiBTaWdu
YWxBY3Rpb246OkhhbmRsZWQ7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309772</attachid>
            <date>2017-05-11 13:51:19 -0700</date>
            <delta_ts>2017-05-11 13:52:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171865-20170511135118.patch</filename>
            <type>text/plain</type>
            <size>50295</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE2Njc3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
YzIyOWE0ZjkxMDMxZGZlOTU1YTQxMGIyMDI0Njc2ZTFmM2NkZWIxLi4yNWUzMDIyZWI5ZmY0ZDA1
M2E4ZWRiY2YxZTI2YmFkZTA1MTA4MWExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MCBAQAorMjAxNy0wNS0xMSAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBVc2UgTWFjaCBleGNlcHRpb25zIGluc3RlYWQgb2Ygc2lnbmFscyB3
aGVyZSBwb3NzaWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTcxODY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhpcyBwYXRjaCBhZGRzIHNvbWUgbmV3IEpTQyBvcHRpb25zLiBUaGUgZmlyc3QgaXMg
YW4gb3B0aW9uIHRoYXQKKyAgICAgICAgZW5hYmxlcyBvciBkaXNhYmxlcyB3ZWIgYXNzZW1ibHkg
dGllciB1cC4gVGhlIHNlY29uZCBjb250cm9scworICAgICAgICB3aGV0aGVyIG9yIG5vdCB3ZSB1
c2UgbWFjaCBleGNlcHRpb25zICh3aGVyZSBhdmFpbGFibGUpLgorCisgICAgICAgICogQVBJL3Rl
c3RzL0V4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwOgorICAgICAgICAoZGlzcGF0Y2hUZXJtaXRh
dGVDYWxsYmFjayk6CisgICAgICAgICh0ZXN0RXhlY3V0aW9uVGltZUxpbWl0KToKKyAgICAgICAg
KiBydW50aW1lL0pTTG9jay5jcHA6CisgICAgICAgIChKU0M6OkpTTG9jazo6ZGlkQWNxdWlyZUxv
Y2spOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5jcHA6CisgICAgICAgIChKU0M6Om92ZXJy
aWRlRGVmYXVsdHMpOgorICAgICAgICAoSlNDOjpPcHRpb25zOjppbml0aWFsaXplKToKKyAgICAg
ICAgKiBydW50aW1lL09wdGlvbnMuaDoKKyAgICAgICAgKiBydW50aW1lL1ZNVHJhcHMuY3BwOgor
ICAgICAgICAoSlNDOjpTaWduYWxDb250ZXh0OjpTaWduYWxDb250ZXh0KToKKyAgICAgICAgKEpT
Qzo6U2lnbmFsQ29udGV4dDo6YWRqdXN0UENUb1BvaW50VG9UcmFwcGluZ0luc3RydWN0aW9uKToK
KyAgICAgICAgKEpTQzo6aW5zdGFsbFNpZ25hbEhhbmRsZXIpOgorICAgICAgICAoSlNDOjpWTVRy
YXBzOjpTaWduYWxTZW5kZXI6OnNlbmQpOgorICAgICAgICAqIHRvb2xzL1NpZ2lsbENyYXNoQW5h
bHl6ZXIuY3BwOgorICAgICAgICAoSlNDOjpTaWduYWxDb250ZXh0OjpTaWduYWxDb250ZXh0KToK
KyAgICAgICAgKEpTQzo6U2lnbmFsQ29udGV4dDo6ZHVtcCk6CisgICAgICAgIChKU0M6Omluc3Rh
bGxDcmFzaEhhbmRsZXIpOgorICAgICAgICAqIHdhc20vV2FzbUJCUVBsYW4uY3BwOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKToKKyAgICAgICAgKiB3YXNt
L1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp0cmFwSGFu
ZGxlcik6CisgICAgICAgIChKU0M6Oldhc206OmVuYWJsZUZhc3RNZW1vcnkpOgorICAgICAgICAq
IHdhc20vV2FzbU1hY2hpbmVUaHJlYWRzLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6cmVzZXRJ
bnN0cnVjdGlvbkNhY2hlT25BbGxUaHJlYWRzKToKKwogMjAxNy0wNS0xMSAgTWFyayBMYW0gIDxt
YXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgV29ya2VyVGhyZWFkOjpzdG9wKCkgc2hvdWxk
IGNhbGwgc2NoZWR1bGVFeGVjdXRpb25UZXJtaW5hdGlvbigpIGxhc3QuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGVjZGRiMzNm
YmVkNTIxMTFiYzA3MTk1ZDZjMDhmZTQwNmIyYzFhMzUuLmE3MjBkMTAxZTIyMDVjZGYwZmEwNmRm
YzNjYTczNmY5YmE1ZmM2NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTcgQEAKKzIwMTctMDUtMTEgIEtlaXRo
IE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIE1hY2ggZXhj
ZXB0aW9ucyBpbnN0ZWFkIG9mIHNpZ25hbHMgd2hlcmUgcG9zc2libGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MTg2NQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZW5hYmxlcyB1c2lu
ZyBtYWNoIGV4Y2VwdGlvbnMgb24gZGFyd2luLiBUaGUgd2F5IHRoZQorICAgICAgICBtYWNoIGV4
Y2VwdGlvbiBhcGkgd29ya3MgaXMgdGhhdCB3ZSBjcmVhdGUgYSBtYWNoIHBvcnQsIHdoaWNoIGlz
CisgICAgICAgIGxpa2UgYSBmaWxlIGRlc2NyaXB0b3IuICBXZSB0aGVuIHdhaXQgZm9yIGEgbWVz
c2FnZSB0byBhcnJpdmUgb24KKyAgICAgICAgdGhhdCBwb3J0IGluIGEgdGhyZWFkLiBXaGVuIGFu
b3RoZXIgdGhyZWFkIHJhaXNlcyBhIGV4Y2VwdGlvbiAoc2F5CisgICAgICAgIGR1ZSB0byBhIGJh
ZCBtZW1vcnkgYWNjZXNzKSB0aGUgT1Mgc2VuZHMgb3VyIHRocmVhZCBhIG1lc3NhZ2UuIFRoZQor
ICAgICAgICBwYXlsb2FkIG9mIHRoYXQgbWVzc2FnZSBpcyB0aGUgcmVnaXN0ZXIgZmlsZSBvZiB0
aGUgY3Jhc2hpbmcKKyAgICAgICAgdGhyZWFkLiBXZSB0aGVuIGNhbGwgb3VyIGN1c3RvbSBoYW5k
bGVycyB0aGF0IGNoYW5nZSB0aGUgc3RhdGUgYXMKKyAgICAgICAgbmVlZGVkLiBJbiBvcmRlciB0
byByZXN0YXJ0IHRoZSB0aHJlYWQgd2Ugc2VuZCBhIHBheWxvYWQgYmFjayB0bworICAgICAgICB0
aGUgT1Mgd2l0aCBhbiB1cGRhdGVkIHJlZ2lzdGVyIGZpbGUgYWxvbmcgd2l0aCBhIHN1Y2Nlc3Mg
bWVzc2FnZQorICAgICAgICBoZWFkZXIuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIG1ha2Vz
IHRocmVhZCBtZXNzYWdlcyB3b3JrIHdpdGhvdXQgc2lnbmFscyBieQorICAgICAgICBzaW1wbHkg
c3VzcGVuZGluZyB0aGUgdGhyZWFkIHRoZW4gcnVubmluZyB0aGUgbWVzc2FnZSBhdCB0aGF0Cisg
ICAgICAgIHRpbWUuCisKKyAgICAgICAgKiBDb25maWd1cmF0aW9ucy9XVEYueGNjb25maWc6Cisg
ICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL1Bs
YXRmb3JtLmg6CisgICAgICAgICogd3RmL1BsYXRmb3JtUmVnaXN0ZXJzLmg6CisgICAgICAgIChX
VEY6OnJlZ2lzdGVyc0Zyb21VQ29udGV4dCk6CisgICAgICAgICogd3RmL1N0YWNrQm91bmRzLmg6
CisgICAgICAgIChXVEY6OlN0YWNrQm91bmRzOjpTdGFja0JvdW5kcyk6CisgICAgICAgICogd3Rm
L1RocmVhZEhvbGRlci5jcHA6CisgICAgICAgIChXVEY6OlRocmVhZEhvbGRlcjo6flRocmVhZEhv
bGRlcik6CisgICAgICAgICogd3RmL1RocmVhZE1lc3NhZ2UuY3BwOgorICAgICAgICAoV1RGOjpz
ZW5kTWVzc2FnZVNpZ25hbCk6CisgICAgICAgIChXVEY6OnNlbmRNZXNzYWdlTWFjaCk6CisgICAg
ICAgIChXVEY6OmRlbGl2ZXJNZXNzYWdlc1VzaW5nTWFjaCk6CisgICAgICAgIChXVEY6OnNlbmRN
ZXNzYWdlU2NvcGVkKToKKyAgICAgICAgKiB3dGYvVGhyZWFkTWVzc2FnZS5oOgorICAgICAgICAo
V1RGOjpzZW5kTWVzc2FnZSk6CisgICAgICAgICogd3RmL1RocmVhZGluZy5oOgorICAgICAgICAo
V1RGOjpUaHJlYWQ6Om1hY2hUaHJlYWQpOgorICAgICAgICAqIHd0Zi9tYWMvTWFjaEV4Y2VwdGlv
bnMuZGVmczogQ29waWVkIGZyb20gU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5oLgorICAg
ICAgICAqIHd0Zi90aHJlYWRzL1NpZ25hbHMuY3BwOgorICAgICAgICAoV1RGOjpzdGFydE1hY2hF
eGNlcHRpb25IYW5kbGVyVGhyZWFkKToKKyAgICAgICAgKFdURjo6ZnJvbU1hY2hFeGNlcHRpb24p
OgorICAgICAgICAoV1RGOjp0b01hY2hNYXNrKToKKyAgICAgICAgKFdURjo6aGFuZGxlU2lnbmFs
c1dpdGhNYWNoKToKKyAgICAgICAgKFdURjo6c2V0RXhjZXB0aW9uUG9ydHMpOgorICAgICAgICAo
V1RGOjphY3RpdmVUaHJlYWRzKToKKyAgICAgICAgKFdURjo6cmVnaXN0ZXJUaHJlYWQpOgorICAg
ICAgICAoV1RGOjpyZW1vdmVUaHJlYWQpOgorICAgICAgICAoV1RGOjppbnN0YWxsU2lnbmFsSGFu
ZGxlcik6CisgICAgICAgIChXVEY6OmpzY1NpZ25hbEhhbmRsZXIpOgorICAgICAgICAqIHd0Zi90
aHJlYWRzL1NpZ25hbHMuaDoKKwogMjAxNy0wNS0wOSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFJlbW92ZSBzdXBwb3J0IGZvciBsZWdhY3kgTm90aWZpY2F0aW9ucwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9FeGVjdXRpb25UaW1l
TGltaXRUZXN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvRXhlY3V0aW9u
VGltZUxpbWl0VGVzdC5jcHAKaW5kZXggZDVlNTMyNDNiNzhkZjc1MTM0MmFkOGQzOTBhNGIwNDEz
ZDllZWY5ZS4uN2VhYzA3MzA5ZGRjM2YxNjQ5NDUwYmQwMzc5ZDJjYTE4ZjAxNjlhYSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9FeGVjdXRpb25UaW1lTGltaXRU
ZXN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0V4ZWN1dGlvblRp
bWVMaW1pdFRlc3QuY3BwCkBAIC0zMCw4ICszMCwxMyBAQAogI2luY2x1ZGUgIkpTQ29udGV4dFJl
ZlByaXZhdGUuaCIKICNpbmNsdWRlICJKYXZhU2NyaXB0Q29yZS5oIgogI2luY2x1ZGUgIk9wdGlv
bnMuaCIKKwogI2luY2x1ZGUgPGNocm9ubz4KKyNpbmNsdWRlIDxkaXNwYXRjaC9kaXNwYXRjaC5o
PgorI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CisjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgog
I2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOjpj
aHJvbm87CkBAIC03Nyw2ICs4MiwxMyBAQCBzdGF0aWMgYm9vbCBleHRlbmRUZXJtaW5hdGVDYWxs
YmFjayhKU0NvbnRleHRSZWYgY3R4LCB2b2lkKikKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9v
bCBkaXNwYXRjaFRlcm1pbmF0ZUNhbGxiYWNrQ2FsbGVkID0gZmFsc2U7CitzdGF0aWMgYm9vbCBk
aXNwYXRjaFRlcm1pdGF0ZUNhbGxiYWNrKEpTQ29udGV4dFJlZiwgdm9pZCopCit7CisgICAgZGlz
cGF0Y2hUZXJtaW5hdGVDYWxsYmFja0NhbGxlZCA9IHRydWU7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKIHN0cnVjdCBUaWVyT3B0aW9ucyB7CiAgICAgY29uc3QgY2hhciogdGllcjsKICAgICB1bnNp
Z25lZCB0aW1lTGltaXRBZGp1c3RtZW50TWlsbGlzOwpAQCAtMzY1LDYgKzM3Nyw2MyBAQCBpbnQg
dGVzdEV4ZWN1dGlvblRpbWVMaW1pdCgpCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAorICAg
ICAgICAvKiBUZXN0IHNjcmlwdCB0aW1lb3V0IGZyb20gZGlzcGF0Y2ggcXVldWU6ICovCisgICAg
ICAgIHRpbWVMaW1pdCA9ICgxMDAgKyB0aWVyQWRqdXN0bWVudE1pbGxpcykgLyAxMDAwLjA7Cisg
ICAgICAgIEpTQ29udGV4dEdyb3VwU2V0RXhlY3V0aW9uVGltZUxpbWl0KGNvbnRleHRHcm91cCwg
dGltZUxpbWl0LCBkaXNwYXRjaFRlcm1pdGF0ZUNhbGxiYWNrLCAwKTsKKyAgICAgICAgeworICAg
ICAgICAgICAgdW5zaWduZWQgdGltZUFmdGVyV2F0Y2hkb2dTaG91bGRIYXZlRmlyZWQgPSAzMDAg
KyB0aWVyQWRqdXN0bWVudE1pbGxpczsKKworICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBzY3Jp
cHRCdWlsZGVyOworICAgICAgICAgICAgc2NyaXB0QnVpbGRlci5hcHBlbmRMaXRlcmFsKCJmdW5j
dGlvbiBmb28oKSB7IHZhciBzdGFydFRpbWUgPSBjdXJyZW50Q1BVVGltZSgpOyB3aGlsZSAodHJ1
ZSkgeyBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDA7IGkrKyk7IGlmIChjdXJyZW50Q1BVVGltZSgp
IC0gc3RhcnRUaW1lID4gIik7CisgICAgICAgICAgICBzY3JpcHRCdWlsZGVyLmFwcGVuZE51bWJl
cih0aW1lQWZ0ZXJXYXRjaGRvZ1Nob3VsZEhhdmVGaXJlZCAvIDEwMDAuMCk7CisgICAgICAgICAg
ICBzY3JpcHRCdWlsZGVyLmFwcGVuZExpdGVyYWwoIikgYnJlYWs7IH0gfSBmb28oKTsiKTsKKwor
ICAgICAgICAgICAgSlNTdHJpbmdSZWYgc2NyaXB0ID0gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoc2NyaXB0QnVpbGRlci50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAg
ICAgZXhjZXB0aW9uID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGRpc3BhdGNoVGVybWluYXRlQ2Fs
bGJhY2tDYWxsZWQgPSBmYWxzZTsKKworICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBkbyB0aGlz
IHNpbmNlIGJsb2NrcyBjYW4gb25seSBjYXB0dXJlIHRoaW5ncyBhcyBjb25zdC4KKyAgICAgICAg
ICAgIEpTR2xvYmFsQ29udGV4dFJlZiYgY29udGV4dFJlZiA9IGNvbnRleHQ7CisgICAgICAgICAg
ICBKU1N0cmluZ1JlZiYgc2NyaXB0UmVmID0gc2NyaXB0OworICAgICAgICAgICAgSlNWYWx1ZVJl
ZiYgZXhjZXB0aW9uUmVmID0gZXhjZXB0aW9uOworCisgICAgICAgICAgICBMb2NrIHN5bmNMb2Nr
OworICAgICAgICAgICAgTG9jayYgc3luY0xvY2tSZWYgPSBzeW5jTG9jazsKKyAgICAgICAgICAg
IENvbmRpdGlvbiBzeW5jaHJvbml6ZTsKKyAgICAgICAgICAgIENvbmRpdGlvbiYgc3luY2hyb25p
emVSZWYgPSBzeW5jaHJvbml6ZTsKKyAgICAgICAgICAgIGJvb2wgZGlkU3luY2hyb25pemUgPSBm
YWxzZTsKKyAgICAgICAgICAgIGJvb2wmIGRpZFN5bmNocm9uaXplUmVmID0gZGlkU3luY2hyb25p
emU7CisKKyAgICAgICAgICAgIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMgc3RhcnRUaW1lOwor
ICAgICAgICAgICAgc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcyBlbmRUaW1lOworCisgICAgICAg
ICAgICBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzJiBzdGFydFRpbWVSZWYgPSBzdGFydFRpbWU7
CisgICAgICAgICAgICBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzJiBlbmRUaW1lUmVmID0gZW5k
VGltZTsKKworICAgICAgICAgICAgZGlzcGF0Y2hfZ3JvdXBfdCBncm91cCA9IGRpc3BhdGNoX2dy
b3VwX2NyZWF0ZSgpOworICAgICAgICAgICAgZGlzcGF0Y2hfZ3JvdXBfYXN5bmMoZ3JvdXAsIGRp
c3BhdGNoX2dldF9nbG9iYWxfcXVldWUoMCwgMCksIF57CisgICAgICAgICAgICAgICAgc3RhcnRU
aW1lUmVmID0gY3VycmVudENQVVRpbWUoKTsKKyAgICAgICAgICAgICAgICBKU0V2YWx1YXRlU2Ny
aXB0KGNvbnRleHRSZWYsIHNjcmlwdFJlZiwgbnVsbHB0ciwgbnVsbHB0ciwgMSwgJmV4Y2VwdGlv
blJlZik7CisgICAgICAgICAgICAgICAgZW5kVGltZVJlZiA9IGN1cnJlbnRDUFVUaW1lKCk7Cisg
ICAgICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBXVEY6OmhvbGRMb2NrKHN5bmNMb2NrUmVmKTsK
KyAgICAgICAgICAgICAgICBkaWRTeW5jaHJvbml6ZVJlZiA9IHRydWU7CisgICAgICAgICAgICAg
ICAgc3luY2hyb25pemVSZWYubm90aWZ5QWxsKCk7CisgICAgICAgICAgICB9KTsKKworICAgICAg
ICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhzeW5jTG9jayk7CisgICAgICAgICAgICBzeW5j
aHJvbml6ZS53YWl0KHN5bmNMb2NrLCBbJl0geyByZXR1cm4gZGlkU3luY2hyb25pemU7IH0pOwor
CisgICAgICAgICAgICBpZiAoKChlbmRUaW1lIC0gc3RhcnRUaW1lKSA8IG1pbGxpc2Vjb25kcyh0
aW1lQWZ0ZXJXYXRjaGRvZ1Nob3VsZEhhdmVGaXJlZCkpICYmIGRpc3BhdGNoVGVybWluYXRlQ2Fs
bGJhY2tDYWxsZWQpCisgICAgICAgICAgICAgICAgcHJpbnRmKCJQQVNTOiAlcyBzY3JpcHQgb24g
ZGlzcGF0Y2ggcXVldWUgdGltZWQgb3V0IGFzIGV4cGVjdGVkLlxuIiwgdGllck9wdGlvbnMudGll
cik7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoKGVuZFRpbWUgLSBz
dGFydFRpbWUpID49IG1pbGxpc2Vjb25kcyh0aW1lQWZ0ZXJXYXRjaGRvZ1Nob3VsZEhhdmVGaXJl
ZCkpCisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiRkFJTDogJXMgc2NyaXB0IG9uIGRpc3Bh
dGNoIHF1ZXVlIGRpZCBub3QgdGltZSBvdXQgYXMgZXhwZWN0ZWQuXG4iLCB0aWVyT3B0aW9ucy50
aWVyKTsKKyAgICAgICAgICAgICAgICBpZiAoIXNob3VsZFRlcm1pbmF0ZUNhbGxiYWNrV2FzQ2Fs
bGVkKQorICAgICAgICAgICAgICAgICAgICBwcmludGYoIkZBSUw6ICVzIHNjcmlwdCBvbiBkaXNw
YXRjaCBxdWV1ZSB0aW1lb3V0IGNhbGxiYWNrIHdhcyBub3QgY2FsbGVkLlxuIiwgdGllck9wdGlv
bnMudGllcik7CisgICAgICAgICAgICAgICAgZmFpbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCiAgICAgICAgIEpTR2xvYmFsQ29udGV4dFJlbGVhc2UoY29udGV4dCk7CiAK
ICAgICAgICAgT3B0aW9uczo6c2V0T3B0aW9ucyhzYXZlZE9wdGlvbnNCdWlsZGVyLnRvU3RyaW5n
KCkuYXNjaWkoKS5kYXRhKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNMb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5j
cHAKaW5kZXggYzE3NWFlMGM0ODJlZDI3YmQ1ZjZiZGM4Nzk2OGU3NWQ0NWFmNTBlZi4uYmI3MGFh
YWVhMTVmZWQ1NDc3YjYxOTlmYTZkNGRjN2VhOTcxMDJjMiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0xvY2suY3BwCkBAIC0zMCw2ICszMCw4IEBACiAjaW5jbHVkZSAiU2FtcGxp
bmdQcm9maWxlci5oIgogI2luY2x1ZGUgIldhc21NYWNoaW5lVGhyZWFkcy5oIgogI2luY2x1ZGUg
PHRocmVhZD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RocmVh
ZHMvU2lnbmFscy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMTQ4LDYgKzE1MCwxMCBAQCB2
b2lkIEpTTG9jazo6ZGlkQWNxdWlyZUxvY2soKQogICAgIFdhc206OnN0YXJ0VHJhY2tpbmdDdXJy
ZW50VGhyZWFkKCk7CiAjZW5kaWYKIAorI2lmIEhBVkUoTUFDSF9FWENFUFRJT05TKQorICAgIFdU
Rjo6cmVnaXN0ZXJUaHJlYWQoJlRocmVhZDo6Y3VycmVudCgpKTsKKyNlbmRpZgorCiAgICAgbV92
bS0+dHJhcHMoKS5ub3RpZnlHcmFiQWxsTG9ja3MoKTsKIAogI2lmIEVOQUJMRShTQU1QTElOR19Q
Uk9GSUxFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKaW5kZXgg
YjA0ZGUzNWE1MzYxNTA4NDM4NTc1YzIyN2E1MDE0ZGQwYzUxYmFhMi4uOTZmOWZmNzQyNWJiOTU5
ZjEzN2E2MTRlYzNkYjY3NmM4YjE2ZGE5OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5jcHAKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0
cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGhyZWFkcy9TaWduYWxzLmg+CiAKICNp
ZiBQTEFURk9STShDT0NPQSkKICNpbmNsdWRlIDxjcnRfZXh0ZXJucy5oPgpAQCAtMzU0LDYgKzM1
NSwxMCBAQCBzdGF0aWMgdm9pZCBvdmVycmlkZURlZmF1bHRzKCkKICNpZiAhRU5BQkxFKFdFQkFT
U0VNQkxZX0ZBU1RfTUVNT1JZKQogICAgIE9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5RmFzdE1lbW9y
eSgpID0gZmFsc2U7CiAjZW5kaWYKKworI2lmIEhBVkUoTUFDSF9FWENFUFRJT05TKQorICAgIE9w
dGlvbnM6OnVzZU1hY2hGb3JFeGNlcHRpb25zKCkgPSB0cnVlOworI2VuZGlmCiB9CiAKIHN0YXRp
YyB2b2lkIHJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMoKQpAQCAtNTQ1LDYgKzU1MCw5IEBAIHZv
aWQgT3B0aW9uczo6aW5pdGlhbGl6ZSgpCiAKICAgICAgICAgICAgIGR1bXBPcHRpb25zSWZOZWVk
ZWQoKTsKICAgICAgICAgICAgIGVuc3VyZU9wdGlvbnNBcmVDb2hlcmVudCgpOworCisgICAgICAg
ICAgICBpZiAoT3B0aW9uczo6dXNlTWFjaEZvckV4Y2VwdGlvbnMoKSkKKyAgICAgICAgICAgICAg
ICBXVEY6OmhhbmRsZVNpZ25hbHNXaXRoTWFjaCgpOwogICAgICAgICB9KTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCmluZGV4IGNmOWRjMmIyYTgyNTY4ZWUwN2Rh
MDg4OWUzOWI2YjJmOWRjZDc5NzUuLjIyNzRkMWNkZWIzMzM2ZTM3YWI0NDczZWE0MTE2ZWEzMjI5
ZTkzN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKQEAgLTQyMCw2
ICs0MjAsOCBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICB2KHVuc2ln
bmVkLCB3YXRjaGRvZywgMCwgTm9ybWFsLCAid2F0Y2hkb2cgdGltZW91dCAoMCA9IERpc2FibGVk
LCBOID0gYSB0aW1lb3V0IHBlcmlvZCBvZiBOIG1pbGxpc2Vjb25kcykiKSBcCiAgICAgdihib29s
LCB1c2VQb2xsaW5nVHJhcHMsIGZhbHNlLCBOb3JtYWwsICJ1c2UgcG9sbGluZyAoaW5zdGVhZCBv
ZiBzaWduYWxsaW5nKSBWTSB0cmFwcyIpIFwKICAgICBcCisgICAgdihib29sLCB1c2VNYWNoRm9y
RXhjZXB0aW9ucywgdHJ1ZSwgTm9ybWFsLCAiVXNlIG1hY2ggZXhjZXB0aW9ucyByYXRoZXIgdGhh
biBzaWduYWxzIHRvIGhhbmRsZSBmYXVsdHMgYW5kIHBhc3MgdGhyZWFkIG1lc3NhZ2VzLiAoVGhp
cyBkb2VzIG5vdGhpbmcgb24gcGxhdGZvcm1zIHdpdGhvdXQgbWFjaCkiKSBcCisgICAgXAogICAg
IHYoYm9vbCwgdXNlSUNTdGF0cywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIFwKICAg
ICB2KHVuc2lnbmVkLCBwcm90b3R5cGVIaXRDb3VudEZvckxMSW50Q2FjaGluZywgMiwgTm9ybWFs
LCAiTnVtYmVyIG9mIHByb3RvdHlwZSBwcm9wZXJ0eSBoaXRzIGJlZm9yZSBjYWNoaW5nIGEgcHJv
dG90eXBlIGluIHRoZSBMTEludC4gQSBjb3VudCBvZiAwIG1lYW5zIG5ldmVyIGNhY2hlLiIpIFwK
QEAgLTQ0Myw2ICs0NDUsNyBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAg
ICB2KHVuc2lnbmVkLCB3ZWJBc3NlbWJseUJCUU9wdGltaXphdGlvbkxldmVsLCAxLCBOb3JtYWws
ICJCMyBPcHRpbWl6YXRpb24gbGV2ZWwgZm9yIEJCUSBXZWIgQXNzZW1ibHkgbW9kdWxlIGNvbXBp
bGF0aW9ucy4iKSBcCiAgICAgdih1bnNpZ25lZCwgd2ViQXNzZW1ibHlPTUdPcHRpbWl6YXRpb25M
ZXZlbCwgT3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSwgTm9ybWFsLCAiQjMgT3B0aW1pemF0
aW9uIGxldmVsIGZvciBPTUcgV2ViIEFzc2VtYmx5IG1vZHVsZSBjb21waWxhdGlvbnMuIikgXAog
ICAgIFwKKyAgICB2KGJvb2wsIHVzZUJCUVRpZXJVcENoZWNrcywgdHJ1ZSwgTm9ybWFsLCAiRW5h
YmxlcyB0aWVyIHVwIGNoZWNrcyBmb3Igb3VyIEJCUSBjb2RlLiIpIFwKICAgICB2KHVuc2lnbmVk
LCB3ZWJBc3NlbWJseU9NR1RpZXJVcENvdW50LCA1MDAwLCBOb3JtYWwsICJUaGUgY291bnRkb3du
IGJlZm9yZSB3ZSB0aWVyIHVwIGEgZnVuY3Rpb24gdG8gT01HLiIpIFwKICAgICB2KHVuc2lnbmVk
LCB3ZWJBc3NlbWJseUxvb3BEZWNyZW1lbnQsIDE1LCBOb3JtYWwsICJUaGUgYW1vdW50IHRoZSB0
aWVyIHVwIGNvdW50ZG93biBpcyBkZWNyZW1lbnRlZCBvbiBlYWNoIGxvb3AgYmFja2VkZ2UuIikg
XAogICAgIHYodW5zaWduZWQsIHdlYkFzc2VtYmx5RnVuY3Rpb25FbnRyeURlY3JlbWVudCwgMSwg
Tm9ybWFsLCAiVGhlIGFtb3VudCB0aGUgdGllciB1cCBjb3VudGRvd24gaXMgZGVjcmVtZW50ZWQg
b24gZWFjaCBmdW5jdGlvbiBlbnRyeS4iKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTVRyYXBzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNVHJhcHMuY3BwCmluZGV4IDFiYWFjZTYwNDRlNjYwYThlNTQ0MWZiYWQwMThlYTkwOTMxYTRj
OTEuLjEwZDc4MmE4ZGM0OWE1ZWRhMDgxZDczZDY4M2RmZmUxNmY4YzhmNDMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCkBAIC01MywxMSArNTMsMTEgQEAgQUxX
QVlTX0lOTElORSBWTSYgVk1UcmFwczo6dm0oKSBjb25zdAogI2lmIEVOQUJMRShTSUdOQUxfQkFT
RURfVk1fVFJBUFMpCiAKIHN0cnVjdCBTaWduYWxDb250ZXh0IHsKLSAgICBTaWduYWxDb250ZXh0
KG1jb250ZXh0X3QmIG1jb250ZXh0KQotICAgICAgICA6IG1jb250ZXh0KG1jb250ZXh0KQotICAg
ICAgICAsIHRyYXBQQyhNYWNoaW5lQ29udGV4dDo6aW5zdHJ1Y3Rpb25Qb2ludGVyKG1jb250ZXh0
KSkKLSAgICAgICAgLCBzdGFja1BvaW50ZXIoTWFjaGluZUNvbnRleHQ6OnN0YWNrUG9pbnRlciht
Y29udGV4dCkpCi0gICAgICAgICwgZnJhbWVQb2ludGVyKE1hY2hpbmVDb250ZXh0OjpmcmFtZVBv
aW50ZXIobWNvbnRleHQpKQorICAgIFNpZ25hbENvbnRleHQoUGxhdGZvcm1SZWdpc3RlcnMmIHJl
Z2lzdGVycykKKyAgICAgICAgOiBjb250ZXh0KHJlZ2lzdGVycykKKyAgICAgICAgLCB0cmFwUEMo
TWFjaGluZUNvbnRleHQ6Omluc3RydWN0aW9uUG9pbnRlcihjb250ZXh0KSkKKyAgICAgICAgLCBz
dGFja1BvaW50ZXIoTWFjaGluZUNvbnRleHQ6OnN0YWNrUG9pbnRlcihjb250ZXh0KSkKKyAgICAg
ICAgLCBmcmFtZVBvaW50ZXIoTWFjaGluZUNvbnRleHQ6OmZyYW1lUG9pbnRlcihjb250ZXh0KSkK
ICAgICB7CiAjaWYgQ1BVKFg4Nl82NCkgfHwgQ1BVKFg4NikKICAgICAgICAgLy8gT24gWDg2XzY0
LCBTSUdUUkFQIHJlcG9ydHMgdGhlIGFkZHJlc3MgYWZ0ZXIgdGhlIHRyYXBwaW5nIFBDLiBTbywg
ZGVjIGJ5IDEuCkBAIC02OCwxMSArNjgsMTEgQEAgc3RydWN0IFNpZ25hbENvbnRleHQgewogICAg
IHZvaWQgYWRqdXN0UENUb1BvaW50VG9UcmFwcGluZ0luc3RydWN0aW9uKCkKICAgICB7CiAjaWYg
Q1BVKFg4Nl82NCkgfHwgQ1BVKFg4NikKLSAgICAgICAgTWFjaGluZUNvbnRleHQ6Omluc3RydWN0
aW9uUG9pbnRlcihtY29udGV4dCkgPSB0cmFwUEM7CisgICAgICAgIE1hY2hpbmVDb250ZXh0Ojpp
bnN0cnVjdGlvblBvaW50ZXIoY29udGV4dCkgPSB0cmFwUEM7CiAjZW5kaWYKICAgICB9CiAKLSAg
ICBtY29udGV4dF90JiBtY29udGV4dDsKKyAgICBQbGF0Zm9ybVJlZ2lzdGVycyYgY29udGV4dDsK
ICAgICB2b2lkKiB0cmFwUEM7CiAgICAgdm9pZCogc3RhY2tQb2ludGVyOwogICAgIHZvaWQqIGZy
YW1lUG9pbnRlcjsKQEAgLTEzMCwxMSArMTMwLDEzIEBAIHN0YXRpYyBFeHBlY3RlZDxWTUFuZFN0
YWNrQm91bmRzLCBWTVRyYXBzOjpFcnJvcj4gZmluZEFjdGl2ZVZNQW5kU3RhY2tCb3VuZHMoU2ln
CiAKIHN0YXRpYyB2b2lkIGluc3RhbGxTaWduYWxIYW5kbGVyKCkKIHsKLSAgICBpbnN0YWxsU2ln
bmFsSGFuZGxlcihTaWduYWw6OlRyYXAsIFtdIChpbnQsIHNpZ2luZm9fdCosIHZvaWQqIHVhcCkg
LT4gU2lnbmFsQWN0aW9uIHsKLSAgICAgICAgU2lnbmFsQ29udGV4dCBjb250ZXh0KHN0YXRpY19j
YXN0PHVjb250ZXh0X3QqPih1YXApLT51Y19tY29udGV4dCk7CisgICAgaW5zdGFsbFNpZ25hbEhh
bmRsZXIoU2lnbmFsOjpUcmFwLCBbXSAoU2lnbmFsLCBTaWdJbmZvJiwgUGxhdGZvcm1SZWdpc3Rl
cnMmIHJlZ2lzdGVycykgLT4gU2lnbmFsQWN0aW9uIHsKKyAgICAgICAgU2lnbmFsQ29udGV4dCBj
b250ZXh0KHJlZ2lzdGVycyk7CiAKLSAgICAgICAgaWYgKCFpc0pJVFBDKGNvbnRleHQudHJhcFBD
KSkKKyAgICAgICAgaWYgKCFpc0pJVFBDKGNvbnRleHQudHJhcFBDKSkgeworICAgICAgICAgICAg
ZGF0YUxvZ0xuKCJ0cmFwcGluZyBwYzogIiwgUmF3UG9pbnRlcihjb250ZXh0LnRyYXBQQyksICIg
aml0IHN0YXJ0OiAiLCBzdGFydE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbCwgIiBqaXQgZW5k
OiAiLCBlbmRPZkZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2wpOwogICAgICAgICAgICAgcmV0dXJu
IFNpZ25hbEFjdGlvbjo6Tm90SGFuZGxlZDsKKyAgICAgICAgfQogCiAgICAgICAgIC8vIEZJWE1F
OiBUaGlzIGN1cnJlbnRseSBlYXRzIGFsbCB0cmFwcyBpbmNsdWRpbmcgaml0IGFzc2VydHMgd2Ug
c2hvdWxkIG1ha2Ugc3VyZSB0aGlzCiAgICAgICAgIC8vIGFsd2F5cyB3b3Jrcy4gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MTAzOQpAQCAtNDA0LDggKzQwNiw4IEBA
IHZvaWQgVk1UcmFwczo6U2lnbmFsU2VuZGVyOjpzZW5kKCkKICAgICAgICAgICAgIFZNJiB2bSA9
ICptX3ZtOwogICAgICAgICAgICAgYXV0byBvcHRpb25hbE93bmVyVGhyZWFkID0gdm0ub3duZXJU
aHJlYWQoKTsKICAgICAgICAgICAgIGlmIChvcHRpb25hbE93bmVyVGhyZWFkKSB7Ci0gICAgICAg
ICAgICAgICAgc2VuZE1lc3NhZ2UoKm9wdGlvbmFsT3duZXJUaHJlYWQudmFsdWUoKS5nZXQoKSwg
W10gKHNpZ2luZm9fdCosIHVjb250ZXh0X3QqIHVjb250ZXh0KSAtPiB2b2lkIHsKLSAgICAgICAg
ICAgICAgICAgICAgU2lnbmFsQ29udGV4dCBjb250ZXh0KHVjb250ZXh0LT51Y19tY29udGV4dCk7
CisgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoKm9wdGlvbmFsT3duZXJUaHJlYWQudmFsdWUo
KS5nZXQoKSwgW10gKFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMpIC0+IHZvaWQgeworICAg
ICAgICAgICAgICAgICAgICBTaWduYWxDb250ZXh0IGNvbnRleHQocmVnaXN0ZXJzKTsKICAgICAg
ICAgICAgICAgICAgICAgYXV0byBhY3RpdmVWTUFuZFN0YWNrQm91bmRzID0gZmluZEFjdGl2ZVZN
QW5kU3RhY2tCb3VuZHMoY29udGV4dCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChhY3RpdmVW
TUFuZFN0YWNrQm91bmRzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBWTSogdm0gPSBhY3Rp
dmVWTUFuZFN0YWNrQm91bmRzLnZhbHVlKCkudm07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAKaW5kZXggNGFkYWVmZjFjZGEyZDFm
YmM2ZjkwNjFmMDYzZTE0ZDJlNjMzMDA0OC4uYmI0NjA1YzY5M2UxMmRkZTA1MDg0ZjdhMTdjZDFl
NDRmN2U5ZTY3NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1NpZ2ls
bENyYXNoQW5hbHl6ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9TaWdp
bGxDcmFzaEFuYWx5emVyLmNwcApAQCAtNzgsMTEgKzc4LDExIEBAIHByaXZhdGU6CiAjZW5kaWYg
Ly8gVVNFKE9TX0xPRykKIAogc3RydWN0IFNpZ25hbENvbnRleHQgewotICAgIFNpZ25hbENvbnRl
eHQobWNvbnRleHRfdCYgbWNvbnRleHQpCi0gICAgICAgIDogbWNvbnRleHQobWNvbnRleHQpCi0g
ICAgICAgICwgbWFjaGluZVBDKE1hY2hpbmVDb250ZXh0OjppbnN0cnVjdGlvblBvaW50ZXIobWNv
bnRleHQpKQotICAgICAgICAsIHN0YWNrUG9pbnRlcihNYWNoaW5lQ29udGV4dDo6c3RhY2tQb2lu
dGVyKG1jb250ZXh0KSkKLSAgICAgICAgLCBmcmFtZVBvaW50ZXIoTWFjaGluZUNvbnRleHQ6OmZy
YW1lUG9pbnRlcihtY29udGV4dCkpCisgICAgU2lnbmFsQ29udGV4dChQbGF0Zm9ybVJlZ2lzdGVy
cyYgY29udGV4dCkKKyAgICAgICAgOiBjb250ZXh0KGNvbnRleHQpCisgICAgICAgICwgbWFjaGlu
ZVBDKE1hY2hpbmVDb250ZXh0OjppbnN0cnVjdGlvblBvaW50ZXIoY29udGV4dCkpCisgICAgICAg
ICwgc3RhY2tQb2ludGVyKE1hY2hpbmVDb250ZXh0OjpzdGFja1BvaW50ZXIoY29udGV4dCkpCisg
ICAgICAgICwgZnJhbWVQb2ludGVyKE1hY2hpbmVDb250ZXh0OjpmcmFtZVBvaW50ZXIoY29udGV4
dCkpCiAgICAgeyB9CiAKICAgICB2b2lkIGR1bXAoKQpAQCAtMTEyLDcgKzExMiw3IEBAIHN0cnVj
dCBTaWduYWxDb250ZXh0IHsKICAgICAgICAgdihncykKIAogI2RlZmluZSBEVU1QX1JFR0lTVEVS
KF9fcmVnKSBcCi0gICAgICAgIGxvZygiUmVnaXN0ZXIgIiAjX19yZWcgIjogJXAiLCByZWludGVy
cHJldF9jYXN0PHZvaWQqPihtY29udGV4dC0+X19zcy5fXyMjX19yZWcpKTsKKyAgICAgICAgbG9n
KCJSZWdpc3RlciAiICNfX3JlZyAiOiAlcCIsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNvbnRl
eHQuX18jI19fcmVnKSk7CiAgICAgICAgIEZPUl9FQUNIX1JFR0lTVEVSKERVTVBfUkVHSVNURVIp
CiAjdW5kZWYgRk9SX0VBQ0hfUkVHSVNURVIKIApAQCAtMTIwLDIwICsxMjAsMjAgQEAgc3RydWN0
IFNpZ25hbENvbnRleHQgewogICAgICAgICBpbnQgaTsKICAgICAgICAgZm9yIChpID0gMDsgaSA8
IDI4OyBpICs9IDQpIHsKICAgICAgICAgICAgIGxvZygieCVkOiAlMDE2bGx4IHglZDogJTAxNmxs
eCB4JWQ6ICUwMTZsbHggeCVkOiAlMDE2bGx4IiwKLSAgICAgICAgICAgICAgICBpLCBtY29udGV4
dC0+X19zcy5fX3hbaV0sCi0gICAgICAgICAgICAgICAgaSsxLCBtY29udGV4dC0+X19zcy5fX3hb
aSsxXSwKLSAgICAgICAgICAgICAgICBpKzIsIG1jb250ZXh0LT5fX3NzLl9feFtpKzJdLAotICAg
ICAgICAgICAgICAgIGkrMywgbWNvbnRleHQtPl9fc3MuX194W2krM10pOworICAgICAgICAgICAg
ICAgIGksIGNvbnRleHQuX194W2ldLAorICAgICAgICAgICAgICAgIGkrMSwgY29udGV4dC5fX3hb
aSsxXSwKKyAgICAgICAgICAgICAgICBpKzIsIGNvbnRleHQuX194W2krMl0sCisgICAgICAgICAg
ICAgICAgaSszLCBjb250ZXh0Ll9feFtpKzNdKTsKICAgICAgICAgfQogICAgICAgICBBU1NFUlQo
aSA8IDI5KTsKICAgICAgICAgbG9nKCJ4JWQ6ICUwMTZsbHggZnA6ICUwMTZsbHggbHI6ICUwMTZs
bHgiLAotICAgICAgICAgICAgaSwgbWNvbnRleHQtPl9fc3MuX194W2ldLCBtY29udGV4dC0+X19z
cy5fX2ZwLCBtY29udGV4dC0+X19zcy5fX2xyKTsKKyAgICAgICAgICAgIGksIGNvbnRleHQuX194
W2ldLCBjb250ZXh0Ll9fZnAsIGNvbnRleHQuX19scik7CiAgICAgICAgIGxvZygic3A6ICUwMTZs
bHggcGM6ICUwMTZsbHggY3BzcjogJTA4eCIsCi0gICAgICAgICAgICBtY29udGV4dC0+X19zcy5f
X3NwLCBtY29udGV4dC0+X19zcy5fX3BjLCBtY29udGV4dC0+X19zcy5fX2Nwc3IpOworICAgICAg
ICAgICAgY29udGV4dC5fX3NwLCBjb250ZXh0Ll9fcGMsIGNvbnRleHQuX19jcHNyKTsKICNlbmRp
ZgogICAgIH0KIAotICAgIG1jb250ZXh0X3QmIG1jb250ZXh0OworICAgIFBsYXRmb3JtUmVnaXN0
ZXJzJiBjb250ZXh0OwogICAgIHZvaWQqIG1hY2hpbmVQQzsKICAgICB2b2lkKiBzdGFja1BvaW50
ZXI7CiAgICAgdm9pZCogZnJhbWVQb2ludGVyOwpAQCAtMTQyLDggKzE0Miw4IEBAIHN0cnVjdCBT
aWduYWxDb250ZXh0IHsKIHN0YXRpYyB2b2lkIGluc3RhbGxDcmFzaEhhbmRsZXIoKQogewogI2lm
IENQVShYODZfNjQpIHx8IENQVShBUk02NCkKLSAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWdu
YWw6OklsbCwgW10gKGludCwgc2lnaW5mb190Kiwgdm9pZCogdWFwKSB7Ci0gICAgICAgIFNpZ25h
bENvbnRleHQgY29udGV4dChzdGF0aWNfY2FzdDx1Y29udGV4dF90Kj4odWFwKS0+dWNfbWNvbnRl
eHQpOworICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbDo6SWxsLCBbXSAoU2lnbmFsLCBT
aWdJbmZvJiwgUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVycykgeworICAgICAgICBTaWduYWxD
b250ZXh0IGNvbnRleHQocmVnaXN0ZXJzKTsKIAogICAgICAgICBpZiAoIWlzSklUUEMoY29udGV4
dC5tYWNoaW5lUEMpKQogICAgICAgICAgICAgcmV0dXJuIFNpZ25hbEFjdGlvbjo6Tm90SGFuZGxl
ZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAppbmRleCAxZGQw
Y2QxZDgzNWM2YzJmMjMxYjAwYjg4NmRkZTRhZjcyYzI2M2NlLi5iMWI1OThkMjBjNWMwMDc3ZDll
OWQwOGUzNjhhZDVjYTE3ODMxYmFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQkJRUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUJCUVBsYW4uY3BwCkBAIC0yNDIsNyArMjQyLDcgQEAgdm9pZCBCQlFQbGFuOjpjb21waWxlRnVu
Y3Rpb25zKENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKICAgICAgICAgQVNTRVJUKHZhbGlkYXRl
RnVuY3Rpb24oZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgbV9tb2R1
bGVJbmZvcm1hdGlvbi5nZXQoKSkpOwogCiAgICAgICAgIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bHNbZnVuY3Rpb25JbmRleF0gPSBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4oKTsKLSAg
ICAgICAgVGllclVwQ291bnQqIHRpZXJVcCA9ICZtX3RpZXJVcENvdW50c1tmdW5jdGlvbkluZGV4
XTsKKyAgICAgICAgVGllclVwQ291bnQqIHRpZXJVcCA9IE9wdGlvbnM6OnVzZUJCUVRpZXJVcENo
ZWNrcygpID8gJm1fdGllclVwQ291bnRzW2Z1bmN0aW9uSW5kZXhdIDogbnVsbHB0cjsKICAgICAg
ICAgYXV0byBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUobV9jb21waWxh
dGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdLCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0
aCwgc2lnbmF0dXJlLCBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdLCBt
X21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIENvbXBpbGF0aW9uTW9kZTo6QkJRTW9k
ZSwgZnVuY3Rpb25JbmRleCwgdGllclVwKTsKIAogICAgICAgICBpZiAoVU5MSUtFTFkoIXBhcnNl
QW5kQ29tcGlsZVJlc3VsdCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAKaW5kZXggMmUwYzk5YTM5YmViZDMxNzhiOTE0
OGQ5NThmZTUzZTU3YTYyMjk3ZS4uMjY0YzM0ZGU0NWRhMTc1YTVkNTE0MWMxNzFlZmU5NWUwNjNj
NWUyNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2ln
bmFsSGFuZGxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0
U2lnbmFsSGFuZGxlci5jcHAKQEAgLTUyLDkgKzUyLDggQEAgc3RhdGljIExhenlOZXZlckRlc3Ry
b3llZDxIYXNoU2V0PHN0ZDo6dHVwbGU8dm9pZCosIHZvaWQqPj4+IGNvZGVMb2NhdGlvbnM7IC8v
ICgKIAogc3RhdGljIGJvb2wgZmFzdEhhbmRsZXJJbnN0YWxsZWQgeyBmYWxzZSB9OwogCi1zdGF0
aWMgU2lnbmFsQWN0aW9uIHRyYXBIYW5kbGVyKGludCwgc2lnaW5mb190KiBzaWdJbmZvLCB2b2lk
KiB1Y29udGV4dCkKK3N0YXRpYyBTaWduYWxBY3Rpb24gdHJhcEhhbmRsZXIoU2lnbmFsLCBTaWdJ
bmZvJiBzaWdJbmZvLCBQbGF0Zm9ybVJlZ2lzdGVycyYgY29udGV4dCkKIHsKLSAgICBtY29udGV4
dF90JiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+KHVjb250ZXh0KS0+dWNfbWNv
bnRleHQ7CiAgICAgdm9pZCogZmF1bHRpbmdJbnN0cnVjdGlvbiA9IE1hY2hpbmVDb250ZXh0Ojpp
bnN0cnVjdGlvblBvaW50ZXIoY29udGV4dCk7CiAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgInN0
YXJ0aW5nIGhhbmRsZXIgZm9yIGZhdWx0IGF0OiAiLCBSYXdQb2ludGVyKGZhdWx0aW5nSW5zdHJ1
Y3Rpb24pKTsKIApAQCAtNjQsNyArNjMsNyBAQCBzdGF0aWMgU2lnbmFsQWN0aW9uIHRyYXBIYW5k
bGVyKGludCwgc2lnaW5mb190KiBzaWdJbmZvLCB2b2lkKiB1Y29udGV4dCkKICAgICBpZiAoaXNK
SVRQQyhmYXVsdGluZ0luc3RydWN0aW9uKSkgewogICAgICAgICBib29sIGZhdWx0ZWRJbkFjdGl2
ZUZhc3RNZW1vcnkgPSBmYWxzZTsKICAgICAgICAgewotICAgICAgICAgICAgdm9pZCogZmF1bHRp
bmdBZGRyZXNzID0gc2lnSW5mby0+c2lfYWRkcjsKKyAgICAgICAgICAgIHZvaWQqIGZhdWx0aW5n
QWRkcmVzcyA9IHNpZ0luZm8uZmF1bHRpbmdBZGRyZXNzOwogICAgICAgICAgICAgZGF0YUxvZ0xu
SWYodmVyYm9zZSwgImNoZWNraW5nIGZhdWx0aW5nIGFkZHJlc3M6ICIsIFJhd1BvaW50ZXIoZmF1
bHRpbmdBZGRyZXNzKSwgIiBpcyBpbiBhbiBhY3RpdmUgZmFzdCBtZW1vcnkiKTsKICAgICAgICAg
ICAgIGZhdWx0ZWRJbkFjdGl2ZUZhc3RNZW1vcnkgPSBXYXNtOjpNZW1vcnk6OmFkZHJlc3NJc0lu
QWN0aXZlRmFzdE1lbW9yeShmYXVsdGluZ0FkZHJlc3MpOwogICAgICAgICB9CkBAIC0xMjQsMTEg
KzEyMywxMSBAQCB2b2lkIGVuYWJsZUZhc3RNZW1vcnkoKQogICAgICAgICAgICAgcmV0dXJuOwog
CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZX0ZBU1RfTUVNT1JZKQotICAgICAgICBpbnN0YWxsU2ln
bmFsSGFuZGxlcihTaWduYWw6OkJ1cywgW10gKGludCBzaWduYWwsIHNpZ2luZm9fdCogc2lnSW5m
bywgdm9pZCogdWNvbnRleHQpIHsKKyAgICAgICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFs
OjpCdXMsIFtdIChTaWduYWwgc2lnbmFsLCBTaWdJbmZvJiBzaWdJbmZvLCBQbGF0Zm9ybVJlZ2lz
dGVycyYgdWNvbnRleHQpIHsKICAgICAgICAgICAgIHJldHVybiB0cmFwSGFuZGxlcihzaWduYWws
IHNpZ0luZm8sIHVjb250ZXh0KTsKICAgICAgICAgfSk7CiAKLSAgICAgICAgaW5zdGFsbFNpZ25h
bEhhbmRsZXIoU2lnbmFsOjpTZWdWLCBbXSAoaW50IHNpZ25hbCwgc2lnaW5mb190KiBzaWdJbmZv
LCB2b2lkKiB1Y29udGV4dCkgeworICAgICAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWw6
OlNlZ1YsIFtdIChTaWduYWwgc2lnbmFsLCBTaWdJbmZvJiBzaWdJbmZvLCBQbGF0Zm9ybVJlZ2lz
dGVycyYgdWNvbnRleHQpIHsKICAgICAgICAgICAgIHJldHVybiB0cmFwSGFuZGxlcihzaWduYWws
IHNpZ0luZm8sIHVjb250ZXh0KTsKICAgICAgICAgfSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21NYWNoaW5lVGhyZWFkcy5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTWFjaGluZVRocmVhZHMuY3BwCmluZGV4IDVhYWM4N2FjYjU3NDdj
N2ZjYTJmOTM2ZWM5Y2Y2NzhiNDMxNzgxNzEuLjBhMzY3ZmQ1ZTIyNTI3ZTljM2M4NzUzNmVjZmQ3
MmIxM2RmNzlkNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21N
YWNoaW5lVGhyZWFkcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1h
Y2hpbmVUaHJlYWRzLmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIk1hY2hpbmVTdGFj
a01hcmtlci5oIgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0
Zi9UaHJlYWRNZXNzYWdlLmg+CisjaW5jbHVkZSA8d3RmL3RocmVhZHMvU2lnbmFscy5oPgogCiBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCkBAIC01Nyw3ICs1OCw3IEBAIHZvaWQg
cmVzZXRJbnN0cnVjdGlvbkNhY2hlT25BbGxUaHJlYWRzKCkKIAogICAgIGNvbnN0IERvdWJseUxp
bmtlZExpc3Q8TWFjaGluZVRocmVhZHM6Ok1hY2hpbmVUaHJlYWQ+JiB0aHJlYWRzID0gd2FzbVRo
cmVhZHMoKS50aHJlYWRzTGlzdEhlYWQobG9ja2VyKTsKICAgICBmb3IgKGNvbnN0IGF1dG8qIHRo
cmVhZCA9IHRocmVhZHMuaGVhZCgpOyB0aHJlYWQ7IHRocmVhZCA9IHRocmVhZC0+bmV4dCgpKSB7
Ci0gICAgICAgIHNlbmRNZXNzYWdlKHRocmVhZC0+bV90aHJlYWQuZ2V0KCksIFtdIChzaWdpbmZv
X3QqLCB1Y29udGV4dF90KikgeworICAgICAgICBzZW5kTWVzc2FnZSh0aHJlYWQtPm1fdGhyZWFk
LmdldCgpLCBbXSAoY29uc3QgUGxhdGZvcm1SZWdpc3RlcnMmKSB7CiAgICAgICAgICAgICAvLyBJ
dCdzIGxpa2VseSB0aGF0IHRoZSBzaWduYWwgaGFuZGxlciB3aWxsIGFscmVhZHkgcmVzZXQgdGhl
IGluc3RydWN0aW9uIGNhY2hlIGJ1dCB3ZSBtaWdodCBhcyB3ZWxsIGJlIHN1cmUuCiAgICAgICAg
ICAgICBXVEY6OmNyb3NzTW9kaWZ5aW5nQ29kZUZlbmNlKCk7CiAgICAgICAgIH0pOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi9Db25maWd1cmF0aW9ucy9XVEYueGNjb25maWcgYi9Tb3VyY2UvV1RG
L0NvbmZpZ3VyYXRpb25zL1dURi54Y2NvbmZpZwppbmRleCA0MjFlZmQ5NjFjMTQ2OGNkMjBkZGM1
YmJmODg5NjIwZWUxY2Y1OGRjLi5hZjE5OWNlYjk1MDZmODk1MGQzM2E5Y2U0ODA3YmE2ZGJiN2Iy
N2U1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NvbmZpZ3VyYXRpb25zL1dURi54Y2NvbmZpZwor
KysgYi9Tb3VyY2UvV1RGL0NvbmZpZ3VyYXRpb25zL1dURi54Y2NvbmZpZwpAQCAtMjcsMyArMjcs
NiBAQCBQUk9EVUNUX05BTUUgPSBXVEY7CiAKIEdDQ19TWU1CT0xTX1BSSVZBVEVfRVhURVJOID0g
WUVTOwogU1RSSVBfSU5TVEFMTEVEX1BST0RVQ1QgPSBOTzsKKworRVhDTFVERURfU09VUkNFX0ZJ
TEVfTkFNRVNfID0gTWFjaEV4Y2VwdGlvbnMuZGVmcworRVhDTFVERURfU09VUkNFX0ZJTEVfTkFN
RVNbc2RrPWlwaG9uZW9zKl0gPSAkKEVYQ0xVREVEX1NPVVJDRV9GSUxFX05BTUVTXyQoVVNFX0lO
VEVSTkFMX1NESykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCA1ZjQ1Mjg3ZjZlM2M2ODg1YjIyYmEyNzc2Y2ZiYzZhMzMyM2JkMDViLi41ODU0NGNjYjYyY2Iy
MjEyYmFlZTc2ZjRkMmEwMWU4OWI2YjdiMDk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTY0LDYgKzY0LDcgQEAKIAkJNTIxODMwMTJDOTlFNDc2QTg0RUVC
RUE4IC8qIFN5bWJvbEltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRjcyQkJEQjEwN0ZBNDI0ODg2MTc4QjlFIC8qIFN5bWJvbEltcGwuY3BwICov
OyB9OwogCQk1MzExQkQ1MzFFQTcxQ0FEMDA1MjUyODEgLyogU2lnbmFscy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzExQkQ1MTFFQTcxQ0FEMDA1
MjUyODEgLyogU2lnbmFscy5jcHAgKi87IH07CiAJCTUzMTFCRDVDMUVBODIyRjkwMDUyNTI4MSAv
KiBUaHJlYWRNZXNzYWdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUzMTFCRDVCMUVBODIyRjkwMDUyNTI4MSAvKiBUaHJlYWRNZXNzYWdlLmNwcCAq
LzsgfTsKKwkJNTM1MzRGMkExRUMwRTEwRTAwMTQxQjJGIC8qIE1hY2hFeGNlcHRpb25zLmRlZnMg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzUzNEYyOTFF
QzBFMTBFMDAxNDFCMkYgLyogTWFjaEV4Y2VwdGlvbnMuZGVmcyAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChDbGllbnQsIFNlcnZlciwgKTsgfTsgfTsKIAkJNzBBOTkzRkUxQUQ3MTUxMzAw
RkE2MTVCIC8qIFN5bWJvbFJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDcwQTk5M0ZDMUFENzE1MTMwMEZBNjE1QiAvKiBTeW1ib2xSZWdp
c3RyeS5jcHAgKi87IH07CiAJCTcwRUNBNjBEMUIwMjQyNjgwMDQ0OTczOSAvKiBBdG9taWNTdHJp
bmdJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDcwRUNBNjBBMUIwMjQyNjgwMDQ0OTczOSAvKiBBdG9taWNTdHJpbmdJbXBsLmNwcCAqLzsgfTsK
IAkJN0FGRUM2QjExRUIyMkI1OTAwREFERTM2IC8qIFVVSUQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FGRUM2QjAxRUIyMkI1OTAwREFERTM2IC8q
IFVVSUQuY3BwICovOyB9OwpAQCAtMjk5LDYgKzMwMCw3IEBACiAJCTUzMTFCRDU3MUVBN0UxQTEw
MDUyNTI4MSAvKiBTaWduYWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNp
Z25hbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMxMUJENTkxRUE4MUE5NjAw
NTI1MjgxIC8qIFRocmVhZE1lc3NhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVGhyZWFkTWVzc2FnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzExQkQ1
QjFFQTgyMkY5MDA1MjUyODEgLyogVGhyZWFkTWVzc2FnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUaHJlYWRNZXNzYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNTM1MzRGMjkxRUMwRTEwRTAwMTQxQjJGIC8qIE1hY2hFeGNlcHRpb25zLmRl
ZnMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLm1pZzsgcGF0aCA9IE1hY2hFeGNlcHRpb25zLmRlZnM7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzOUVCMDYyMUQ1NTI4NDIwMEM4MkVGNyAv
KiBMRUJEZWNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExFQkRlY29k
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNFQzI1M0MxRTk1QUQzMDAwMDgz
MUI5IC8qIFByaW9yaXR5UXVldWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UHJpb3JpdHlRdWV1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NTMwNzFDOTFD
NDA0MjcyMDAzODQ4OTggLyogVGlueUxSVUNhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFRpbnlMUlVDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MTAyMyw2ICsxMDI1LDcgQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTFBNDI4QjhCMUM4Rjg5REQw
MDUxRTlFQiAvKiBBcHBLaXRDb21wYXRpYmlsaXR5RGVjbGFyYXRpb25zLmggKi8sCiAJCQkJMUFD
QUREODIxODg0NDgwMTAwRDhCNzFEIC8qIERlcHJlY2F0ZWRTeW1ib2xzVXNlZEJ5U2FmYXJpLm1t
ICovLAorCQkJCTUzNTM0RjI5MUVDMEUxMEUwMDE0MUIyRiAvKiBNYWNoRXhjZXB0aW9ucy5kZWZz
ICovLAogCQkJCUE4QTQ3MkM1MTUxQTgyNUEwMDQxMjNGRiAvKiBNYWluVGhyZWFkTWFjLm1tICov
LAogCQkJKTsKIAkJCXBhdGggPSBtYWM7CkBAIC0xMzQ2LDYgKzEzNDksNyBAQAogCQkJCTE0M0Y2
MTFGMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEz
QjcyNUVDOTg3NDQ2QUQ5M0YxQTQ0MCAvKiBSYW5kb21EZXZpY2UuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQThBNDc0MTQxNTFBODI1QjAwNDEyM0ZGIC8qIFJhbmRvbU51bWJlci5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQk1MzUzNEYyQTFFQzBFMTBFMDAxNDFCMkYgLyogTWFjaEV4Y2VwdGlvbnMu
ZGVmcyBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDFBMTUxQTgyNUIwMDQxMjNGRiAvKiBSZWZD
b3VudGVkTGVha0NvdW50ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkNERUQwRjMxODExNUM4
NTAwNERCQTcwIC8qIFJ1bkxvb3AuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkNERUQwRUYxODEx
NUMzODAwNERCQTcwIC8qIFJ1bkxvb3BDRi5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmggYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCmlu
ZGV4IDY4NTRhODFlMzk3MjcwNjcwMzRkMDVkYjM5OGE0NzBjMTQyODQyNzYuLjM2Mzg4Mzk1ZDRm
NDNiNDY1Mzg5ZWJjOTgwMmZiYjRkOTBkMjRiN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3Rm
L1BsYXRmb3JtLmgKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaApAQCAtNjYzLDYgKzY2
MywxMCBAQAogI2RlZmluZSBIQVZFX1JFQURMSU5FIDEKICNkZWZpbmUgSEFWRV9TWVNfVElNRUJf
SCAxCiAKKyNpZiBfX2hhc19pbmNsdWRlKDxtYWNoL21hY2hfZXhjLmRlZnM+KSAmJiAhKFBMQVRG
T1JNKFdBVENIT1MpIHx8IFBMQVRGT1JNKEFQUExFVFYpKQorI2RlZmluZSBIQVZFX01BQ0hfRVhD
RVBUSU9OUyAxCisjZW5kaWYKKwogI2lmICFQTEFURk9STShHVEspCiAjZGVmaW5lIFVTRV9BQ0NF
TEVSQVRFIDEKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1SZWdp
c3RlcnMuaCBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtUmVnaXN0ZXJzLmgKaW5kZXggZDViNWFi
YzIyMWJiYWQ4Mjk3NjE5M2VjZTUxYzFjNzYxNzVkYjA2ZC4uODRiZDg5Mzc0OTlkYTk5ZWFhODZi
NzM2OTVmN2M1YjgxYWMyNjBjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1S
ZWdpc3RlcnMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVJlZ2lzdGVycy5oCkBAIC0y
Niw5ICsyNiwxMSBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4K
KyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKICNpZiBPUyhEQVJXSU4pCiAjaW5jbHVk
ZSA8bWFjaC90aHJlYWRfYWN0Lmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CiAjZWxpZiBPUyhXSU5E
T1dTKQogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNlbHNlCkBAIC01NSw2ICs1NywxMSBAQCB0eXBl
ZGVmIGFybV90aHJlYWRfc3RhdGU2NF90IFBsYXRmb3JtUmVnaXN0ZXJzOwogI2Vycm9yIFVua25v
d24gQXJjaGl0ZWN0dXJlCiAjZW5kaWYKIAoraW5saW5lIFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdp
c3RlcnNGcm9tVUNvbnRleHQodWNvbnRleHRfdCogdWNvbnRleHQpCit7CisgICAgcmV0dXJuIHVj
b250ZXh0LT51Y19tY29udGV4dC0+X19zczsKK30KKwogI2VsaWYgT1MoV0lORE9XUykKIAogdXNp
bmcgUGxhdGZvcm1SZWdpc3RlcnMgPSBDT05URVhUOwpAQCAtNjUsNiArNzIsMTEgQEAgc3RydWN0
IFBsYXRmb3JtUmVnaXN0ZXJzIHsKICAgICBtY29udGV4dF90IG1hY2hpbmVDb250ZXh0OwogfTsK
IAoraW5saW5lIFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnNGcm9tVUNvbnRleHQodWNvbnRl
eHRfdCogdWNvbnRleHQpCit7CisgICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8UGxhdGZvcm1SZWdp
c3RlcnMqPigmdWNvbnRleHQtPnVjX21jb250ZXh0KTsKK30KKwogI2Vsc2UKIAogc3RydWN0IFBs
YXRmb3JtUmVnaXN0ZXJzIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1N0YWNrQm91bmRz
LmggYi9Tb3VyY2UvV1RGL3d0Zi9TdGFja0JvdW5kcy5oCmluZGV4IDU1NDYwNGYyYWI0ODRjN2Nm
NzFlZTM4NjMwY2ViNGM3OWMzM2U5NzIuLmNkNjJjMTQ4YTZjN2VmYzk1MTdhOGIwOWI4YTMyYzdm
ZTE5MGNkZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1N0YWNrQm91bmRzLmgKKysrIGIv
U291cmNlL1dURi93dGYvU3RhY2tCb3VuZHMuaApAQCAtNTQsNyArNTQsNiBAQCBwdWJsaWM6CiAg
ICAgICAgIDogbV9vcmlnaW4ob3JpZ2luKQogICAgICAgICAsIG1fYm91bmQoZW5kKQogICAgIHsK
LSAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIH0KIAogICAgIHZvaWQqIG9yaWdpbigp
IGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXIuY3BwIGIvU291
cmNlL1dURi93dGYvVGhyZWFkSG9sZGVyLmNwcAppbmRleCAzMGIyMjdjZGI4YWM1MjYwNzUwYjQ3
ZDQ4MmFiYzJkNTViZTNhYzk0Li45NmQ5MWI1Yjg3ZGRmOTc4ODA1ZGI2ZWIxZjYwZGMwMGUxNDlh
NDg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXIuY3BwCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlci5jcHAKQEAgLTM0LDEyICszNCwxNyBAQAogCiAjaW5j
bHVkZSAiVGhyZWFkaW5nLmgiCiAKKyNpbmNsdWRlIDx3dGYvdGhyZWFkcy9TaWduYWxzLmg+CisK
IG5hbWVzcGFjZSBXVEYgewogCiBUaHJlYWRTcGVjaWZpY0tleSBUaHJlYWRIb2xkZXI6Om1fa2V5
ID0gSW52YWxpZFRocmVhZFNwZWNpZmljS2V5OwogCiBUaHJlYWRIb2xkZXI6On5UaHJlYWRIb2xk
ZXIoKQogeworI2lmIEhBVkUoTUFDSF9FWENFUFRJT05TKQorICAgIHJlbW92ZVRocmVhZCgmbV90
aHJlYWQuZ2V0KCkpOworI2VuZGlmCiAgICAgbV90aHJlYWQtPmRpZEV4aXQoKTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5jcHAgYi9Tb3VyY2UvV1RGL3d0
Zi9UaHJlYWRNZXNzYWdlLmNwcAppbmRleCBmMTRiYzQ1ZDM2MTRjN2M2NjM1ZWIxN2FiMGUyNzI4
MTZhMTM3M2RkLi4wNWIzYjg5ZDVkZDRiM2Q4ZTQzN2Q1MmJhOTMwYTkzMDczYjEzOGIyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRNZXNzYWdlLmNwcAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi9UaHJlYWRNZXNzYWdlLmNwcApAQCAtMzYsNiArMzYsOSBAQAogI2luY2x1ZGUgPHd0Zi9M
b2NrZXIuaD4KICNpbmNsdWRlIDx3dGYvdGhyZWFkcy9TaWduYWxzLmg+CiAKKyNpZiBIQVZFKE1B
Q0hfRVhDRVBUSU9OUykKKyNpbmNsdWRlIDxtYWNoL3RocmVhZF9hY3QuaD4KKyNlbmRpZgogCiBu
YW1lc3BhY2UgV1RGIHsKIApAQCAtODMsMTIgKzg2LDEyIEBAIHZvaWQgaW5pdGlhbGl6ZVRocmVh
ZE1lc3NhZ2VzKCkKIH0KIAogU1VQUFJFU1NfQVNBTgotTWVzc2FnZVN0YXR1cyBzZW5kTWVzc2Fn
ZVNjb3BlZChUaHJlYWQmIHRocmVhZCwgY29uc3QgVGhyZWFkTWVzc2FnZSYgbWVzc2FnZSkKK3N0
YXRpYyBNZXNzYWdlU3RhdHVzIHNlbmRNZXNzYWdlU2lnbmFsKFRocmVhZCYgdGhyZWFkLCBjb25z
dCBUaHJlYWRNZXNzYWdlJiBtZXNzYWdlKQogewogICAgIGNvbnN0ZXhwciBTaWduYWwgc2lnbmFs
ID0gU2lnbmFsOjpVc3I7CiAgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2U7CiAgICAgc3Rk
OjpjYWxsX29uY2Uob25jZSwgW10gewotICAgICAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihzaWdu
YWwsIFtdIChpbnQsIHNpZ2luZm9fdCogaW5mbywgdm9pZCogdWFwKSB7CisgICAgICAgIGluc3Rh
bGxTaWduYWxIYW5kbGVyKHNpZ25hbCwgW10gKFNpZ25hbCwgU2lnSW5mbyYsIFBsYXRmb3JtUmVn
aXN0ZXJzJiBjb250ZXh0KSB7CiAgICAgICAgICAgICBUaHJlYWQqIHRocmVhZCA9IFRocmVhZDo6
Y3VycmVudE1heUJlTnVsbCgpOwogCiAgICAgICAgICAgICBpZiAoIXRocmVhZCkgewpAQCAtOTgs
NyArMTAxLDcgQEAgTWVzc2FnZVN0YXR1cyBzZW5kTWVzc2FnZVNjb3BlZChUaHJlYWQmIHRocmVh
ZCwgY29uc3QgVGhyZWFkTWVzc2FnZSYgbWVzc2FnZSkKIAogICAgICAgICAgICAgLy8gTm9kZSBz
aG91bGQgYmUgZGVsZXRlZCBpbiB0aGUgc2VuZGVyIHRocmVhZC4gRGVsZXRpbmcgTm9kZXMgaW4g
c2lnbmFsIGhhbmRsZXIgY2F1c2VzIGRlYWQgbG9jay4KICAgICAgICAgICAgIHRocmVhZC0+dGhy
ZWFkTWVzc2FnZXMoKS5jb25zdW1lQWxsV2l0aE5vZGUoWyZdIChUaHJlYWRNZXNzYWdlRGF0YSog
ZGF0YSwgTm9kZSogbm9kZSkgewotICAgICAgICAgICAgICAgIGRhdGEtPm1lc3NhZ2UoaW5mbywg
c3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+KHVhcCkpOworICAgICAgICAgICAgICAgIGRhdGEtPm1l
c3NhZ2UoY29udGV4dCk7CiAgICAgICAgICAgICAgICAgLy8gQnkgc2V0dGluZyByYW4gdmFyaWFi
bGUsICgxKSB0aGUgc2VuZGVyIGFja25vd2xlZGdlcyB0aGUgY29tcGxldGlvbiBhbmQKICAgICAg
ICAgICAgICAgICAvLyAoMikgZ2V0cyB0aGUgTm9kZSB0byBiZSBkZWxldGVkLgogICAgICAgICAg
ICAgICAgIGRhdGEtPnJhbi5zdG9yZShub2RlKTsKQEAgLTE1Niw2ICsxNTksNjAgQEAgTWVzc2Fn
ZVN0YXR1cyBzZW5kTWVzc2FnZVNjb3BlZChUaHJlYWQmIHRocmVhZCwgY29uc3QgVGhyZWFkTWVz
c2FnZSYgbWVzc2FnZSkKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCisj
aWYgSEFWRShNQUNIX0VYQ0VQVElPTlMpCitzdGF0aWMgTWVzc2FnZVN0YXR1cyBzZW5kTWVzc2Fn
ZU1hY2goVGhyZWFkJiB0aHJlYWQsIGNvbnN0IFRocmVhZE1lc3NhZ2UmIG1lc3NhZ2UpCit7Cisg
ICAgc3RhdGljIFN0YXRpY0xvY2sgbWVzc2FnZUxvY2s7CisgICAgYXV0byBsb2NraG9sZGVyID0g
aG9sZExvY2sobWVzc2FnZUxvY2spOworCisgICAgYXV0byByZXN1bHQgPSB0aHJlYWQuc3VzcGVu
ZCgpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gTWVzc2FnZVN0YXR1czo6VGhy
ZWFkRXhpdGVkOworCisjaWYgQ1BVKFg4NikKKyAgICB1bnNpZ25lZCB1c2VyQ291bnQgPSBzaXpl
b2YoUGxhdGZvcm1SZWdpc3RlcnMpIC8gc2l6ZW9mKGludCk7CisgICAgdGhyZWFkX3N0YXRlX2Zs
YXZvcl90IGZsYXZvciA9IGkzODZfVEhSRUFEX1NUQVRFOworI2VsaWYgQ1BVKFg4Nl82NCkKKyAg
ICB1bnNpZ25lZCB1c2VyQ291bnQgPSB4ODZfVEhSRUFEX1NUQVRFNjRfQ09VTlQ7CisgICAgdGhy
ZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IHg4Nl9USFJFQURfU1RBVEU2NDsKKyNlbGlmIENQ
VShBUk0pCisgICAgdW5zaWduZWQgdXNlckNvdW50ID0gQVJNX1RIUkVBRF9TVEFURV9DT1VOVDsK
KyAgICB0aHJlYWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9yID0gQVJNX1RIUkVBRF9TVEFURTsKKyNl
bGlmIENQVShBUk02NCkKKyAgICB1bnNpZ25lZCB1c2VyQ291bnQgPSBBUk1fVEhSRUFEX1NUQVRF
NjRfQ09VTlQ7CisgICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IEFSTV9USFJFQURf
U1RBVEU2NDsKKyNlbHNlCisjZXJyb3IgVW5rbm93biBBcmNoaXRlY3R1cmUKKyNlbmRpZgorCisg
ICAgUGxhdGZvcm1SZWdpc3RlcnMgcmVnaXN0ZXJzOworICAgIHRocmVhZF9zdGF0ZV90IHN0YXRl
ID0gcmVpbnRlcnByZXRfY2FzdDx0aHJlYWRfc3RhdGVfdD4oJnJlZ2lzdGVycyk7CisgICAgdGhy
ZWFkX2dldF9zdGF0ZSh0aHJlYWQubWFjaFRocmVhZCgpLCBmbGF2b3IsIHN0YXRlLCAmdXNlckNv
dW50KTsKKworICAgIG1lc3NhZ2UocmVnaXN0ZXJzKTsKKworICAgIHRocmVhZF9zZXRfc3RhdGUo
dGhyZWFkLm1hY2hUaHJlYWQoKSwgZmxhdm9yLCAodGhyZWFkX3N0YXRlX3QpJnJlZ2lzdGVycywg
dXNlckNvdW50KTsKKworICAgIHRocmVhZC5yZXN1bWUoKTsKKyAgICByZXR1cm4gTWVzc2FnZVN0
YXR1czo6TWVzc2FnZVJhbjsKK30KKworc3RhdGljIGJvb2wgdXNlTWFjaCA9IGZhbHNlOwordm9p
ZCBkZWxpdmVyTWVzc2FnZXNVc2luZ01hY2goKSB7IHVzZU1hY2ggPSB0cnVlOyB9CisKKyNlbmRp
ZiAvLyBIQVZFKE1BQ0hfRVhDRVBUSU9OUykKKworTWVzc2FnZVN0YXR1cyBzZW5kTWVzc2FnZVNj
b3BlZChUaHJlYWQmIHRocmVhZCwgY29uc3QgVGhyZWFkTWVzc2FnZSYgbWVzc2FnZSkKK3sKKyNp
ZiBIQVZFKE1BQ0hfRVhDRVBUSU9OUykKKyAgICBpZiAodXNlTWFjaCkKKyAgICAgICAgcmV0dXJu
IHNlbmRNZXNzYWdlTWFjaCh0aHJlYWQsIG1lc3NhZ2UpOworI2VuZGlmCisgICAgcmV0dXJuIHNl
bmRNZXNzYWdlU2lnbmFsKHRocmVhZCwgbWVzc2FnZSk7CisgICAgcmV0dXJuIE1lc3NhZ2VTdGF0
dXM6OlRocmVhZEV4aXRlZDsKK30KKworCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogI2VuZGlmIC8v
IFVTRShQVEhSRUFEUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZE1lc3NhZ2Uu
aCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZE1lc3NhZ2UuaAppbmRleCA5YWU1M2YyOWNmN2U4ZmIw
MGVmOTIxMWQxNmNlMmNkZWQ2MDNlYzFiLi4zMDA0NzJiM2U3MWM0MmVjODk4NzRhM2RlMGZmMzc2
MWNhOTY5MTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRNZXNzYWdlLmgKKysr
IGIvU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5oCkBAIC0zNiw3ICszNiw3IEBAIG5hbWVz
cGFjZSBXVEYgewogdm9pZCBpbml0aWFsaXplVGhyZWFkTWVzc2FnZXMoKTsKIAogY2xhc3MgVGhy
ZWFkTWVzc2FnZURhdGE7Ci11c2luZyBUaHJlYWRNZXNzYWdlID0gU2NvcGVkTGFtYmRhPHZvaWQo
c2lnaW5mb190KiwgdWNvbnRleHRfdCopPjsKK3VzaW5nIFRocmVhZE1lc3NhZ2UgPSBTY29wZWRM
YW1iZGE8dm9pZChQbGF0Zm9ybVJlZ2lzdGVycyYpPjsKIAogZW51bSBjbGFzcyBNZXNzYWdlU3Rh
dHVzIHsKICAgICBNZXNzYWdlUmFuLApAQCAtNTEsMTAgKzUxLDE0IEBAIE1lc3NhZ2VTdGF0dXMg
c2VuZE1lc3NhZ2VTY29wZWQoVGhyZWFkJiwgY29uc3QgVGhyZWFkTWVzc2FnZSYpOwogdGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4KIE1lc3NhZ2VTdGF0dXMgc2VuZE1lc3NhZ2UoVGhyZWFkJiB0
YXJnZXRUaHJlYWQsIGNvbnN0IEZ1bmN0b3ImIGZ1bmMpCiB7Ci0gICAgYXV0byBsYW1iZGEgPSBz
Y29wZWRMYW1iZGFSZWY8dm9pZChzaWdpbmZvX3QqLCB1Y29udGV4dF90Kik+KGZ1bmMpOworICAg
IGF1dG8gbGFtYmRhID0gc2NvcGVkTGFtYmRhUmVmPHZvaWQoUGxhdGZvcm1SZWdpc3RlcnMmKT4o
ZnVuYyk7CiAgICAgcmV0dXJuIHNlbmRNZXNzYWdlU2NvcGVkKHRhcmdldFRocmVhZCwgbGFtYmRh
KTsKIH0KIAorI2lmIEhBVkUoTUFDSF9FWENFUFRJT05TKQordm9pZCBkZWxpdmVyTWVzc2FnZXNV
c2luZ01hY2goKTsKKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjpz
ZW5kTWVzc2FnZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5oIGIvU291
cmNlL1dURi93dGYvVGhyZWFkaW5nLmgKaW5kZXggZDJlNTM2ZGY3YTg2OTZkOGU2Yjk1YmE0M2Ux
NzNkM2I1NTBiZjE2YS4uMzUxNGU4YzA5ZjBmYzk0ZDUzNGJlMmYzYjZlN2M0OTUwZTBiY2YwNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmgKKysrIGIvU291cmNlL1dURi93
dGYvVGhyZWFkaW5nLmgKQEAgLTEzOCw2ICsxMzgsMTAgQEAgcHVibGljOgogCiAjaWYgVVNFKFBU
SFJFQURTKQogICAgIExvY2tsZXNzQmFnPFRocmVhZE1lc3NhZ2VEYXRhKj4mIHRocmVhZE1lc3Nh
Z2VzKCkgeyByZXR1cm4gbV90aHJlYWRNZXNzYWdlczsgfQorCisjaWYgT1MoREFSV0lOKQorICAg
IG1hY2hfcG9ydF90IG1hY2hUaHJlYWQoKSB7IHJldHVybiBtX3BsYXRmb3JtVGhyZWFkOyB9Cisj
ZW5kaWYKICNlbmRpZgogCiBwcm90ZWN0ZWQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9t
YWMvTWFjaEV4Y2VwdGlvbnMuZGVmcyBiL1NvdXJjZS9XVEYvd3RmL21hYy9NYWNoRXhjZXB0aW9u
cy5kZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjQyMDU3NDJhNGVkNTAwZjgwNjRmZWViNDk1NWE3Yzk3MGQ5OWFm
MGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9tYWMvTWFjaEV4Y2VwdGlvbnMu
ZGVmcwpAQCAtMCwwICsxLDI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgPG1hY2gvbWFjaF9leGMuZGVmcz4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL3RocmVhZHMvU2lnbmFscy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi90aHJlYWRz
L1NpZ25hbHMuY3BwCmluZGV4IDg1NWIyOGIzMTcyMTcyN2NmMWY0MzFhOTE4YTI1MWRjMmU2YTNk
ZmMuLjA3MjM4OTdkOGFhNTU1MDhlNDk0N2E1MjYyZWJkNzcxMjUxYmUxMjcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL3RocmVhZHMvU2lnbmFscy5jcHAKKysrIGIvU291cmNlL1dURi93dGYv
dGhyZWFkcy9TaWduYWxzLmNwcApAQCAtMjgsMjEgKzI4LDI2MiBAQAogCiAjaWYgVVNFKFBUSFJF
QURTKQogCisjaWYgSEFWRShNQUNIX0VYQ0VQVElPTlMpCitleHRlcm4gIkMiIHsKKyNpbmNsdWRl
ICJNYWNoRXhjZXB0aW9uc1NlcnZlci5oIgorfTsKKyNlbmRpZgorCiAjaW5jbHVkZSA8Y3N0ZGlv
PgogI2luY2x1ZGUgPG11dGV4PgogI2luY2x1ZGUgPHNpZ25hbC5oPgorCisjaWYgSEFWRShNQUNI
X0VYQ0VQVElPTlMpCisjaW5jbHVkZSA8bWFjaC9tYWNoLmg+CisjaW5jbHVkZSA8bWFjaC90aHJl
YWRfYWN0Lmg+CisjZW5kaWYKKwogI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CiAjaW5jbHVkZSA8
d3RmL0RhdGFMb2cuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9M
b2NrbGVzc0JhZy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUg
PHd0Zi9UaHJlYWRNZXNzYWdlLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCiAKIG5h
bWVzcGFjZSBXVEYgewogCisgICAgCiBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPExvY2tsZXNz
QmFnPFNpZ25hbEhhbmRsZXI+PiBoYW5kbGVyc1tzdGF0aWNfY2FzdDxzaXplX3Q+KFNpZ25hbDo6
TnVtYmVyT2ZTaWduYWxzKV0gPSB7IH07Ci1zdGF0aWMgc3RydWN0IHNpZ2FjdGlvbiBvbGRBY3Rp
b25zW3N0YXRpY19jYXN0PHNpemVfdD4oU2lnbmFsOjpOdW1iZXJPZlNpZ25hbHMpXTsKIHN0YXRp
YyBzdGQ6Om9uY2VfZmxhZyBpbml0aWFsaXplT25jZUZsYWdzW3N0YXRpY19jYXN0PHNpemVfdD4o
U2lnbmFsOjpOdW1iZXJPZlNpZ25hbHMpXTsKK3N0YXRpYyBzdHJ1Y3Qgc2lnYWN0aW9uIG9sZEFj
dGlvbnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihTaWduYWw6Ok51bWJlck9mU2lnbmFscyldOworCisj
aWYgSEFWRShNQUNIX0VYQ0VQVElPTlMpCitzdGF0aWMgbWFjaF9wb3J0X3QgZXhjZXB0aW9uUG9y
dDsKK3N0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG1heE1lc3NhZ2VTaXplID0gMSAqIEtCOworCitz
dGF0aWMgdm9pZCBzdGFydE1hY2hFeGNlcHRpb25IYW5kbGVyVGhyZWFkKCkKK3sKKyAgICBzdGF0
aWMgc3RkOjpvbmNlX2ZsYWcgb25jZTsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlLCBbXSB7Cisg
ICAgICAgIGlmIChtYWNoX3BvcnRfYWxsb2NhdGUobWFjaF90YXNrX3NlbGYoKSwgTUFDSF9QT1JU
X1JJR0hUX1JFQ0VJVkUsICZleGNlcHRpb25Qb3J0KSAhPSBLRVJOX1NVQ0NFU1MpCisgICAgICAg
ICAgICBDUkFTSCgpOworCisgICAgICAgIGlmIChtYWNoX3BvcnRfaW5zZXJ0X3JpZ2h0KG1hY2hf
dGFza19zZWxmKCksIGV4Y2VwdGlvblBvcnQsIGV4Y2VwdGlvblBvcnQsIE1BQ0hfTVNHX1RZUEVf
TUFLRV9TRU5EKSE9IEtFUk5fU1VDQ0VTUykKKyAgICAgICAgICAgIENSQVNIKCk7CisKKyAgICAg
ICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBhIGRpc3BhdGNoIHF1ZXVlLgorICAgICAgICAo
dm9pZClUaHJlYWQ6OmNyZWF0ZSgKKyAgICAgICAgICAgICJXVEYgTWFjaCBFeGNlcHRpb24gVGhy
ZWFkIiwgW10gKCkgeworICAgICAgICAgICAgICAgIHVuaW9uIE1lc3NhZ2UgeworICAgICAgICAg
ICAgICAgICAgICBtYWNoX21zZ19oZWFkZXJfdCBoZWFkZXI7CisgICAgICAgICAgICAgICAgICAg
IGNoYXIgZGF0YVttYXhNZXNzYWdlU2l6ZV07CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAg
ICAgICAgICBNZXNzYWdlIG1lc3NhZ2VIZWFkZXJJbjsKKyAgICAgICAgICAgICAgICBNZXNzYWdl
IG1lc3NhZ2VIZWFkZXJPdXQ7CisKKyAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAg
ICAgICAgICAgICAgICAgICBrZXJuX3JldHVybl90IG1lc3NhZ2VSZXN1bHQgPSBtYWNoX21zZygm
bWVzc2FnZUhlYWRlckluLmhlYWRlciwgTUFDSF9SQ1ZfTVNHLCAwLCBtYXhNZXNzYWdlU2l6ZSwg
ZXhjZXB0aW9uUG9ydCwgTUFDSF9NU0dfVElNRU9VVF9OT05FLCBNQUNIX1BPUlRfTlVMTCk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlUmVzdWx0ID09IEtFUk5fU1VDQ0VTUykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtYWNoX2V4Y19zZXJ2ZXIoJm1lc3NhZ2VIZWFk
ZXJJbi5oZWFkZXIsICZtZXNzYWdlSGVhZGVyT3V0LmhlYWRlcikpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ1JBU0goKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZVJl
c3VsdCA9IG1hY2hfbXNnKCZtZXNzYWdlSGVhZGVyT3V0LmhlYWRlciwgTUFDSF9TRU5EX01TRywg
bWVzc2FnZUhlYWRlck91dC5oZWFkZXIubXNnaF9zaXplLCAwLCBtZXNzYWdlSGVhZGVyT3V0Lmhl
YWRlci5tc2doX2xvY2FsX3BvcnQsIDAsIE1BQ0hfUE9SVF9OVUxMKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1lc3NhZ2VSZXN1bHQgPT0gS0VSTl9TVUNDRVNTKTsK
KyAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nTG4oIkZhaWxlZCB0byByZWNlaXZlIG1hY2ggbWVzc2FnZSBkdWUgdG8gIiwgbWFjaF9lcnJv
cl9zdHJpbmcobWVzc2FnZVJlc3VsdCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfSku
bGVha1JlZigpOworICAgIH0pOworfQorCitzdGF0aWMgU2lnbmFsIGZyb21NYWNoRXhjZXB0aW9u
KGV4Y2VwdGlvbl90eXBlX3QgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNl
IEVYQ19CQURfQUNDRVNTOiByZXR1cm4gU2lnbmFsOjpTZWdWOworICAgIGNhc2UgRVhDX0JBRF9J
TlNUUlVDVElPTjogcmV0dXJuIFNpZ25hbDo6SWxsOworICAgIGNhc2UgRVhDX0JSRUFLUE9JTlQ6
IHJldHVybiBTaWduYWw6OlRyYXA7CisgICAgZGVmYXVsdDogYnJlYWs7CisgICAgfQorICAgIHJl
dHVybiBTaWduYWw6OlVua25vd247Cit9CisKK3N0YXRpYyBleGNlcHRpb25fbWFza190IHRvTWFj
aE1hc2soU2lnbmFsIHNpZ25hbCkKK3sKKyAgICBzd2l0Y2ggKHNpZ25hbCkgeworICAgIGNhc2Ug
U2lnbmFsOjpTZWdWOiByZXR1cm4gRVhDX01BU0tfQkFEX0FDQ0VTUzsKKyAgICBjYXNlIFNpZ25h
bDo6SWxsOiByZXR1cm4gRVhDX01BU0tfQkFEX0lOU1RSVUNUSU9OOworICAgIGNhc2UgU2lnbmFs
OjpUcmFwOiByZXR1cm4gRVhDX01BU0tfQlJFQUtQT0lOVDsKKyAgICBkZWZhdWx0OiBicmVhazsK
KyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworZXh0ZXJuICJD
IiB7CisKKy8vIFdlIG5lZWQgdG8gaW1wbGVtZW50IHN0dWJzIGZvciBjYXRjaF9tYWNoX2V4Y2Vw
dGlvbl9yYWlzZSBhbmQgY2F0Y2hfbWFjaF9leGNlcHRpb25fcmFpc2Vfc3RhdGVfaWRlbnRpdHku
CisvLyBUaGUgTWlHIGdlbmVyYXRlZCBmaWxlIHdpbGwgZmFpbCB0byBsaW5rIG90aGVyd2lzZSwg
ZXZlbiB0aG91Z2ggd2UgZG9uJ3QgdXNlIHRoZSBmdW5jdGlvbnMuIE9ubHkgdGhlCisvLyBjYXRj
aF9tYWNoX2V4Y2VwdGlvbl9yYWlzZV9zdGF0ZSBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGJl
Y2F1c2Ugd2UgcGFzcyBFWENFUFRJT05fU1RBVEUgdG8KKy8vIHRocmVhZF9zZXRfZXhjZXB0aW9u
X3BvcnRzLgora2Vybl9yZXR1cm5fdCBjYXRjaF9tYWNoX2V4Y2VwdGlvbl9yYWlzZShtYWNoX3Bv
cnRfdCwgbWFjaF9wb3J0X3QsIG1hY2hfcG9ydF90LCBleGNlcHRpb25fdHlwZV90LCBtYWNoX2V4
Y2VwdGlvbl9kYXRhX3QsIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QpCit7CisgICAgZGF0YUxvZ0xu
KCJXZSBzaG91bGQgbm90IGhhdmUgY2FsbGVkIGNhdGNoX2V4Y2VwdGlvbl9yYWlzZSgpLCBwbGVh
c2UgZmlsZSBhIGJ1ZyBhdCBidWdzLndlYmtpdC5vcmciKTsKKyAgICByZXR1cm4gS0VSTl9GQUlM
VVJFOworfQorCitrZXJuX3JldHVybl90IGNhdGNoX21hY2hfZXhjZXB0aW9uX3JhaXNlX3N0YXRl
X2lkZW50aXR5KG1hY2hfcG9ydF90LCBtYWNoX3BvcnRfdCwgbWFjaF9wb3J0X3QsIGV4Y2VwdGlv
bl90eXBlX3QsIG1hY2hfZXhjZXB0aW9uX2RhdGFfdCwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCwg
aW50KiwgdGhyZWFkX3N0YXRlX3QsIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QsIHRocmVhZF9zdGF0
ZV90LCAgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCopCit7CisgICAgZGF0YUxvZ0xuKCJXZSBzaG91
bGQgbm90IGhhdmUgY2FsbGVkIGNhdGNoX21hY2hfZXhjZXB0aW9uX3JhaXNlX3N0YXRlX2lkZW50
aXR5LCBwbGVhc2UgZmlsZSBhIGJ1ZyBhdCBidWdzLndlYmtpdC5vcmciKTsKKyAgICByZXR1cm4g
S0VSTl9GQUlMVVJFOworfQorCitrZXJuX3JldHVybl90IGNhdGNoX21hY2hfZXhjZXB0aW9uX3Jh
aXNlX3N0YXRlKAorICAgIG1hY2hfcG9ydF90IHBvcnQsCisgICAgZXhjZXB0aW9uX3R5cGVfdCBl
eGNlcHRpb25UeXBlLAorICAgIGNvbnN0IG1hY2hfZXhjZXB0aW9uX2RhdGFfdCBleGNlcHRpb25E
YXRhLAorICAgIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QgZGF0YUNvdW50LAorICAgIGludCogc3Rh
dGVGbGF2b3IsCisgICAgY29uc3QgdGhyZWFkX3N0YXRlX3QgaW5TdGF0ZSwKKyAgICBtYWNoX21z
Z190eXBlX251bWJlcl90IGluU3RhdGVDb3VudCwKKyAgICB0aHJlYWRfc3RhdGVfdCBvdXRTdGF0
ZSwKKyAgICBtYWNoX21zZ190eXBlX251bWJlcl90KiBvdXRTdGF0ZUNvdW50KQoreworICAgIFJF
TEVBU0VfQVNTRVJUKHBvcnQgPT0gZXhjZXB0aW9uUG9ydCk7CisgICAgU2lnbmFsIHNpZ25hbCA9
IGZyb21NYWNoRXhjZXB0aW9uKGV4Y2VwdGlvblR5cGUpOworICAgIGRhdGFMb2dMbigicmVjZWl2
ZWRTaWduYWwgIiwgZXhjZXB0aW9uVHlwZSk7CisgICAgZGF0YUxvZ0xuKCJUaHJlYWQ6ICIsIGV4
Y2VwdGlvbkRhdGFbMF0pOworICAgIFJFTEVBU0VfQVNTRVJUKHNpZ25hbCAhPSBTaWduYWw6OlVu
a25vd24pOworCisgICAgbWVtY3B5KG91dFN0YXRlLCBpblN0YXRlLCBpblN0YXRlQ291bnQgKiBz
aXplb2YoaW5TdGF0ZVswXSkpOworICAgICpvdXRTdGF0ZUNvdW50ID0gaW5TdGF0ZUNvdW50Owor
CisjaWYgQ1BVKFg4Nl82NCkKKyAgICBSRUxFQVNFX0FTU0VSVCgqc3RhdGVGbGF2b3IgPT0geDg2
X1RIUkVBRF9TVEFURSk7CisgICAgUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVycyA9IHJlaW50
ZXJwcmV0X2Nhc3Q8eDg2X3RocmVhZF9zdGF0ZV90Kj4ob3V0U3RhdGUpLT51dHMudHM2NDsKKyNl
bGlmIENQVShYODYpCisgICAgUkVMRUFTRV9BU1NFUlQoKnN0YXRlRmxhdm9yID09IHg4Nl9USFJF
QURfU1RBVEUpOworICAgIFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMgPSByZWludGVycHJl
dF9jYXN0PHg4Nl90aHJlYWRfc3RhdGVfdCo+KG91dFN0YXRlKS0+dXRzLnRzMzI7CisjZWxpZiBD
UFUoQVJNNjQpCisgICAgUkVMRUFTRV9BU1NFUlQoKnN0YXRlRmxhdm9yID09IEFSTV9USFJFQURf
U1RBVEUpOworICAgIFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMgPSByZWludGVycHJldF9j
YXN0PGFybV91bmlmaWVkX3RocmVhZF9zdGF0ZSo+KG91dFN0YXRlKS0+dHNfNjQ7CisjZWxpZiBD
UFUoQVJNKQorICAgIFJFTEVBU0VfQVNTRVJUKCpzdGF0ZUZsYXZvciA9PSBBUk1fVEhSRUFEX1NU
QVRFKTsKKyAgICBQbGF0Zm9ybVJlZ2lzdGVycyYgcmVnaXN0ZXJzID0gcmVpbnRlcnByZXRfY2Fz
dDxhcm1fdW5pZmllZF90aHJlYWRfc3RhdGUqPihvdXRTdGF0ZSktPnRzXzMyOworI2VuZGlmCisK
KyAgICBTaWdJbmZvIGluZm87CisgICAgaWYgKHNpZ25hbCA9PSBTaWduYWw6OlNlZ1YpIHsKKyAg
ICAgICAgQVNTRVJUX1VOVVNFRChkYXRhQ291bnQsIGRhdGFDb3VudCA9PSAyKTsKKyAgICAgICAg
aW5mby5mYXVsdGluZ0FkZHJlc3MgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihleGNlcHRpb25E
YXRhWzFdKTsKKyAgICB9CisKKyAgICBib29sIGRpZEhhbmRsZSA9IGZhbHNlOworICAgIGhhbmRs
ZXJzW3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0tPml0ZXJhdGUoWyZdIChjb25zdCBTaWdu
YWxIYW5kbGVyJiBoYW5kbGVyKSB7CisgICAgICAgIFNpZ25hbEFjdGlvbiBoYW5kbGVyUmVzdWx0
ID0gaGFuZGxlcihzaWduYWwsIGluZm8sIHJlZ2lzdGVycyk7CisgICAgICAgIGRhdGFMb2dMbihz
dGF0aWNfY2FzdDxpbnQ+KGhhbmRsZXJSZXN1bHQpKTsKKyAgICAgICAgc3dpdGNoIChoYW5kbGVy
UmVzdWx0KSB7CisgICAgICAgIGNhc2UgU2lnbmFsQWN0aW9uOjpIYW5kbGVkOgorICAgICAgICAg
ICAgZGlkSGFuZGxlID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIGlmIChkaWRI
YW5kbGUpCisgICAgICAgIHJldHVybiBLRVJOX1NVQ0NFU1M7CisgICAgcmV0dXJuIEtFUk5fRkFJ
TFVSRTsKK30KKworfTsKKworc3RhdGljIGJvb2wgdXNlTWFjaCB7IGZhbHNlIH07Cit2b2lkIGhh
bmRsZVNpZ25hbHNXaXRoTWFjaCgpCit7CisgICAgZGVsaXZlck1lc3NhZ2VzVXNpbmdNYWNoKCk7
CisgICAgdXNlTWFjaCA9IHRydWU7Cit9CisKKworc3RhdGljIFN0YXRpY0xvY2sgdGhyZWFkTG9j
azsKK2V4Y2VwdGlvbl9tYXNrX3QgYWN0aXZlRXhjZXB0aW9ucyB7IDAgfTsKKworaW5saW5lIHZv
aWQgc2V0RXhjZXB0aW9uUG9ydHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBUaHJlYWQqIHRocmVh
ZCkKK3sKKyAgICBrZXJuX3JldHVybl90IHJlc3VsdCA9IHRocmVhZF9zZXRfZXhjZXB0aW9uX3Bv
cnRzKHRocmVhZC0+bWFjaFRocmVhZCgpLCBhY3RpdmVFeGNlcHRpb25zLCBleGNlcHRpb25Qb3J0
LCBFWENFUFRJT05fU1RBVEUgfCBNQUNIX0VYQ0VQVElPTl9DT0RFUywgTUFDSElORV9USFJFQURf
U1RBVEUpOworICAgIGlmIChyZXN1bHQgIT0gS0VSTl9TVUNDRVNTKSB7CisgICAgICAgIGRhdGFM
b2dMbigidGhyZWFkIHNldCBwb3J0IGZhaWxlZCBkdWUgdG8gIiwgbWFjaF9lcnJvcl9zdHJpbmco
cmVzdWx0KSk7CisgICAgICAgIENSQVNIKCk7CisgICAgfQorfQorCitpbmxpbmUgSGFzaFNldDxU
aHJlYWQqPiYgYWN0aXZlVGhyZWFkcyhjb25zdCBBYnN0cmFjdExvY2tlciYpCit7CisgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8VGhyZWFkKj4+IGFjdGl2ZVRocmVhZHM7CisgICAg
cmV0dXJuIGFjdGl2ZVRocmVhZHM7Cit9CisKK3ZvaWQgcmVnaXN0ZXJUaHJlYWQoVGhyZWFkKiB0
aHJlYWQpCit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayh0aHJlYWRMb2NrKTsKKyAgICBh
dXRvIHJlc3VsdCA9IGFjdGl2ZVRocmVhZHMobG9ja2VyKS5hZGQodGhyZWFkKTsKKworICAgIGlm
IChyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgc2V0RXhjZXB0aW9uUG9ydHMobG9ja2VyLCB0
aHJlYWQpOworfQorCit2b2lkIHJlbW92ZVRocmVhZChUaHJlYWQqIHRocmVhZCkKK3sKKyAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKHRocmVhZExvY2spOworICAgIGFjdGl2ZVRocmVhZHMobG9j
a2VyKS5yZW1vdmUodGhyZWFkKTsKK30KIAotc3RhdGljIHZvaWQganNjU2lnbmFsSGFuZGxlcihp
bnQgc2lnLCBzaWdpbmZvX3QqIGluZm8sIHZvaWQqIG1jb250ZXh0KQorI2VuZGlmIC8vIEhBVkUo
TUFDSF9FWENFUFRJT05TKQorCitzdGF0aWMgdm9pZCBqc2NTaWduYWxIYW5kbGVyKGludCwgc2ln
aW5mb190Kiwgdm9pZCopOworCit2b2lkIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbCBzaWdu
YWwsIFNpZ25hbEhhbmRsZXImJiBoYW5kbGVyKQoreworICAgIEFTU0VSVChzaWduYWwgPCBTaWdu
YWw6OlVua25vd24pOworICAgIGlmIChzaWduYWwgPT0gU2lnbmFsOjpCdXMgJiYgIXVzZU1hY2gp
CisgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQoIXVzZU1hY2ggfHwgc2lnbmFsICE9IFNpZ25h
bDo6VXNyKTsKKworI2lmIEhBVkUoTUFDSF9FWENFUFRJT05TKQorICAgIGlmICh1c2VNYWNoKQor
ICAgICAgICBzdGFydE1hY2hFeGNlcHRpb25IYW5kbGVyVGhyZWFkKCk7CisjZW5kaWYKKworICAg
IHN0ZDo6Y2FsbF9vbmNlKGluaXRpYWxpemVPbmNlRmxhZ3Nbc3RhdGljX2Nhc3Q8c2l6ZV90Pihz
aWduYWwpXSwgWyZdIHsKKyAgICAgICAgaGFuZGxlcnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzaWdu
YWwpXS5jb25zdHJ1Y3QoKTsKKworICAgICAgICBpZiAoIXVzZU1hY2gpIHsKKyAgICAgICAgICAg
IHN0cnVjdCBzaWdhY3Rpb24gYWN0aW9uOworICAgICAgICAgICAgYWN0aW9uLnNhX3NpZ2FjdGlv
biA9IGpzY1NpZ25hbEhhbmRsZXI7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHNpZ2ZpbGxz
ZXQoJmFjdGlvbi5zYV9tYXNrKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFyZXN1bHQp
OworICAgICAgICAgICAgYWN0aW9uLnNhX2ZsYWdzID0gU0FfU0lHSU5GTzsKKyAgICAgICAgICAg
IHJlc3VsdCA9IHNpZ2FjdGlvbih0b1N5c3RlbVNpZ25hbChzaWduYWwpLCAmYWN0aW9uLCAmb2xk
QWN0aW9uc1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNpZ25hbCldKTsKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKCFyZXN1bHQpOworICAgICAgICB9CisKKyAgICB9KTsKKworICAgIGhhbmRsZXJz
W3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0tPmFkZChXVEZNb3ZlKGhhbmRsZXIpKTsKKwor
I2lmIEhBVkUoTUFDSF9FWENFUFRJT05TKQorICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sodGhy
ZWFkTG9jayk7CisgICAgaWYgKHVzZU1hY2gpIHsKKyAgICAgICAgYWN0aXZlRXhjZXB0aW9ucyB8
PSB0b01hY2hNYXNrKHNpZ25hbCk7CisKKyAgICAgICAgZm9yIChUaHJlYWQqIHRocmVhZCA6IGFj
dGl2ZVRocmVhZHMobG9ja2VyKSkKKyAgICAgICAgICAgIHNldEV4Y2VwdGlvblBvcnRzKGxvY2tl
ciwgdGhyZWFkKTsKKyAgICB9CisjZW5kaWYKK30KKwordm9pZCBqc2NTaWduYWxIYW5kbGVyKGlu
dCBzaWcsIHNpZ2luZm9fdCogaW5mbywgdm9pZCogdWNvbnRleHQpCiB7CiAgICAgU2lnbmFsIHNp
Z25hbCA9IGZyb21TeXN0ZW1TaWduYWwoc2lnKTsKIApAQCAtNjIsMTAgKzMwMywxNiBAQCBzdGF0
aWMgdm9pZCBqc2NTaWduYWxIYW5kbGVyKGludCBzaWcsIHNpZ2luZm9fdCogaW5mbywgdm9pZCog
bWNvbnRleHQpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBTaWdJbmZvIHNpZ0luZm87
CisgICAgaWYgKHNpZ25hbCA9PSBTaWduYWw6OlNlZ1YgfHwgc2lnbmFsID09IFNpZ25hbDo6QnVz
KQorICAgICAgICBzaWdJbmZvLmZhdWx0aW5nQWRkcmVzcyA9IGluZm8tPnNpX2FkZHI7CisKKyAg
ICBQbGF0Zm9ybVJlZ2lzdGVycyYgcmVnaXN0ZXJzID0gcmVnaXN0ZXJzRnJvbVVDb250ZXh0KHJl
aW50ZXJwcmV0X2Nhc3Q8dWNvbnRleHRfdCo+KHVjb250ZXh0KSk7CisKICAgICBib29sIGRpZEhh
bmRsZSA9IGZhbHNlOwogICAgIGJvb2wgcmVzdG9yZURlZmF1bHRIYW5kbGVyID0gZmFsc2U7CiAg
ICAgaGFuZGxlcnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzaWduYWwpXS0+aXRlcmF0ZShbJl0gKGNv
bnN0IFNpZ25hbEhhbmRsZXImIGhhbmRsZXIpIHsKLSAgICAgICAgc3dpdGNoIChoYW5kbGVyKHNp
ZywgaW5mbywgbWNvbnRleHQpKSB7CisgICAgICAgIHN3aXRjaCAoaGFuZGxlcihzaWduYWwsIHNp
Z0luZm8sIHJlZ2lzdGVycykpIHsKICAgICAgICAgY2FzZSBTaWduYWxBY3Rpb246OkhhbmRsZWQ6
CiAgICAgICAgICAgICBkaWRIYW5kbGUgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CkBAIC04
NSwxMyArMzMyLDEzIEBAIHN0YXRpYyB2b2lkIGpzY1NpZ25hbEhhbmRsZXIoaW50IHNpZywgc2ln
aW5mb190KiBpbmZvLCB2b2lkKiBtY29udGV4dCkKICAgICBzdHJ1Y3Qgc2lnYWN0aW9uJiBvbGRB
Y3Rpb24gPSBvbGRBY3Rpb25zW3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV07CiAgICAgaWYg
KHNpZ25hbCA9PSBTaWduYWw6OlVzcikgewogICAgICAgICBpZiAob2xkQWN0aW9uLnNhX3NpZ2Fj
dGlvbikKLSAgICAgICAgICAgIG9sZEFjdGlvbi5zYV9zaWdhY3Rpb24oc2lnLCBpbmZvLCBtY29u
dGV4dCk7CisgICAgICAgICAgICBvbGRBY3Rpb24uc2Ffc2lnYWN0aW9uKHNpZywgaW5mbywgdWNv
bnRleHQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKCFkaWRIYW5kbGUpIHsK
ICAgICAgICAgaWYgKG9sZEFjdGlvbi5zYV9zaWdhY3Rpb24pIHsKLSAgICAgICAgICAgIG9sZEFj
dGlvbi5zYV9zaWdhY3Rpb24oc2lnLCBpbmZvLCBtY29udGV4dCk7CisgICAgICAgICAgICBvbGRB
Y3Rpb24uc2Ffc2lnYWN0aW9uKHNpZywgaW5mbywgdWNvbnRleHQpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAKQEAgLTEwMCwyNCArMzQ3LDYgQEAgc3RhdGljIHZvaWQganNjU2ln
bmFsSGFuZGxlcihpbnQgc2lnLCBzaWdpbmZvX3QqIGluZm8sIHZvaWQqIG1jb250ZXh0KQogICAg
IH0KIH0KIAotdm9pZCBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWwgc2lnbmFsLCBTaWduYWxI
YW5kbGVyJiYgaGFuZGxlcikKLXsKLSAgICBBU1NFUlQoc2lnbmFsIDwgU2lnbmFsOjpVbmtub3du
KTsKLSAgICBzdGQ6OmNhbGxfb25jZShpbml0aWFsaXplT25jZUZsYWdzW3N0YXRpY19jYXN0PHNp
emVfdD4oc2lnbmFsKV0sIFsmXSB7Ci0gICAgICAgIGhhbmRsZXJzW3N0YXRpY19jYXN0PHNpemVf
dD4oc2lnbmFsKV0uY29uc3RydWN0KCk7Ci0KLSAgICAgICAgc3RydWN0IHNpZ2FjdGlvbiBhY3Rp
b247Ci0gICAgICAgIGFjdGlvbi5zYV9zaWdhY3Rpb24gPSBqc2NTaWduYWxIYW5kbGVyOwotICAg
ICAgICBhdXRvIHJlc3VsdCA9IHNpZ2ZpbGxzZXQoJmFjdGlvbi5zYV9tYXNrKTsKLSAgICAgICAg
UkVMRUFTRV9BU1NFUlQoIXJlc3VsdCk7Ci0gICAgICAgIGFjdGlvbi5zYV9mbGFncyA9IFNBX1NJ
R0lORk87Ci0gICAgICAgIHJlc3VsdCA9IHNpZ2FjdGlvbih0b1N5c3RlbVNpZ25hbChzaWduYWwp
LCAmYWN0aW9uLCAmb2xkQWN0aW9uc1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNpZ25hbCldKTsKLSAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoIXJlc3VsdCk7Ci0gICAgfSk7Ci0KLSAgICBoYW5kbGVyc1tz
dGF0aWNfY2FzdDxzaXplX3Q+KHNpZ25hbCldLT5hZGQoV1RGTW92ZShoYW5kbGVyKSk7Ci19Ci0K
IH0gLy8gbmFtZXNwYWNlIFdURgogCiAjZW5kaWYgLy8gVVNFKFBUSFJFQURTKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvdGhyZWFkcy9TaWduYWxzLmggYi9Tb3VyY2UvV1RGL3d0Zi90aHJl
YWRzL1NpZ25hbHMuaAppbmRleCAxZTRlYjQ2ZWFhNzc0YTFlZTg5ZjZmYjJkYWVmMzMyNjhjZTU2
Nzc5Li5hY2E2YjM0ZjgxNmYwMTc2OTMwMDM2YzE4YjgyMWMyN2FiYjBlNjBjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi90aHJlYWRzL1NpZ25hbHMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90
aHJlYWRzL1NpZ25hbHMuaApAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSA8c2lnbmFsLmg+
CiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtUmVnaXN0
ZXJzLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCkBAIC03OSw3ICs4MCwxMSBAQCBlbnVtIGNsYXNz
IFNpZ25hbEFjdGlvbiB7CiAgICAgRm9yY2VEZWZhdWx0CiB9OwogCi11c2luZyBTaWduYWxIYW5k
bGVyID0gRnVuY3Rpb248U2lnbmFsQWN0aW9uKGludCwgc2lnaW5mb190Kiwgdm9pZCopPjsKK3N0
cnVjdCBTaWdJbmZvIHsKKyAgICB2b2lkKiBmYXVsdGluZ0FkZHJlc3MgeyAwIH07Cit9OworCit1
c2luZyBTaWduYWxIYW5kbGVyID0gRnVuY3Rpb248U2lnbmFsQWN0aW9uKFNpZ25hbCwgU2lnSW5m
byYsIFBsYXRmb3JtUmVnaXN0ZXJzJik+OwogCiAvLyBDYWxsIHRoaXMgbWV0aG9kIHdoZW5ldmVy
IHlvdSB3YW50IHRvIGluc3RhbGwgYSBzaWduYWwgaGFuZGxlci4gSXQncyBvayB0byBjYWxsIHRo
aXMgZnVuY3Rpb24gbGF6aWx5LgogLy8gTm90ZTogWW91ciBzaWduYWwgaGFuZGxlciB3aWxsIGJl
IGNhbGxlZCBldmVyeSB0aW1lIHRoZSBoYW5kbGVyIGZvciB0aGUgZGVzaXJlZCBzaWduYWwgaXMg
Y2FsbGVkLgpAQCAtODcsOSArOTIsMTkgQEAgdXNpbmcgU2lnbmFsSGFuZGxlciA9IEZ1bmN0aW9u
PFNpZ25hbEFjdGlvbihpbnQsIHNpZ2luZm9fdCosIHZvaWQqKT47CiAvLyBUaGlzIGZ1bmN0aW9u
IGlzIGN1cnJlbnRseSBhIG9uZSB3YXkgc3RyZWV0IGkuZS4gb25jZSBpbnN0YWxsZWQsIGEgc2ln
bmFsIGhhbmRsZXIgY2Fubm90IGJlIHVuaW5zdGFsbGVkLgogdm9pZCBpbnN0YWxsU2lnbmFsSGFu
ZGxlcihTaWduYWwsIFNpZ25hbEhhbmRsZXImJik7CiAKKworI2lmIEhBVkUoTUFDSF9FWENFUFRJ
T05TKQorY2xhc3MgVGhyZWFkOwordm9pZCByZWdpc3RlclRocmVhZChUaHJlYWQqKTsKK3ZvaWQg
cmVtb3ZlVGhyZWFkKFRocmVhZCopOworCit2b2lkIGhhbmRsZVNpZ25hbHNXaXRoTWFjaCgpOwor
I2VuZGlmIC8vIEhBVkUoTUFDSF9FWENFUFRJT05TKQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAog
dXNpbmcgV1RGOjpTaWduYWw7Cit1c2luZyBXVEY6OlNpZ0luZm87CiB1c2luZyBXVEY6OnRvU3lz
dGVtU2lnbmFsOwogdXNpbmcgV1RGOjpmcm9tU3lzdGVtU2lnbmFsOwogdXNpbmcgV1RGOjpTaWdu
YWxBY3Rpb247CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cK
aW5kZXggMTdmOWYwMTExMzEwMmE4YTRiMTdmY2U0YWYxZDk1ZWI4NjAwNjlkYi4uNmNkYTQ4NDEw
NjVjZTA0YTkxYjhkYjVlMmIyMDI4YzQwZWMwNWE2ZiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdl
TG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDE3LTA1LTExICBL
ZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBNYWNo
IGV4Y2VwdGlvbnMgaW5zdGVhZCBvZiBzaWduYWxzIHdoZXJlIHBvc3NpYmxlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzE4NjUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV1RGL1RocmVhZE1lc3NhZ2VzLmNwcDoKKyAgICAgICAgKHJ1blRocmVhZE1lc3NhZ2VUZXN0
KToKKyAgICAgICAgKFRFU1QpOgorCiAyMDE3LTA1LTA5ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgUmVtb3ZlIHN1cHBvcnQgZm9yIGxlZ2FjeSBOb3RpZmljYXRpb25z
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9UaHJlYWRNZXNzYWdl
cy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9UaHJlYWRNZXNzYWdlcy5jcHAK
aW5kZXggZDYzZTliZjFlNzUwNjhiNmMxYTdlN2U2ZThiNjdjNGViMDUxNTg4Mi4uZTZhNTc4OTRi
YjUxNmZlMWNlNzEzZDA3YmYxOGYwNzA2ZWZhOTM3YyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XVEYvVGhyZWFkTWVzc2FnZXMuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV1RGL1RocmVhZE1lc3NhZ2VzLmNwcApAQCAtNTAsNyArNTAsNyBAQCBzdGF0
aWMgdm9pZCBydW5UaHJlYWRNZXNzYWdlVGVzdCh1bnNpZ25lZCBudW1TZW5kZXJzLCB1bnNpZ25l
ZCBudW1NZXNzYWdlcykKICAgICBmb3IgKHVuc2lnbmVkIHNlbmRlcklEID0gMDsgc2VuZGVySUQg
PCBudW1TZW5kZXJzOyArK3NlbmRlcklEKSB7CiAgICAgICAgIHNlbmRlclRocmVhZHNbc2VuZGVy
SURdID0gVGhyZWFkOjpjcmVhdGUoIlRocmVhZE1lc3NhZ2Ugc2VuZGVyIiwgW3NlbmRlcklELCBu
dW1NZXNzYWdlcywgcmVjZWl2ZXJUaHJlYWQsICZtZXNzYWdlc1J1biwgJmhhbmRsZXJzUnVuXSAo
KSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtTWVzc2FnZXM7ICsr
aSkgewotICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gc2VuZE1lc3NhZ2UoKnJlY2VpdmVy
VGhyZWFkLmdldCgpLCBbc2VuZGVySUQsICZoYW5kbGVyc1J1bl0gKHNpZ2luZm9fdCosIHVjb250
ZXh0X3QqKSB7CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBzZW5kTWVzc2FnZSgqcmVj
ZWl2ZXJUaHJlYWQuZ2V0KCksIFtzZW5kZXJJRCwgJmhhbmRsZXJzUnVuXSAoUGxhdGZvcm1SZWdp
c3RlcnMmKSB7CiAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJzUnVuW3NlbmRlcklEXSsrOwog
ICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKHJlc3VsdCA9
PSBXVEY6Ok1lc3NhZ2VTdGF0dXM6Ok1lc3NhZ2VSYW4pOwpAQCAtOTUsNyArOTUsNyBAQCBwdWJs
aWM6CiBURVNUKFRocmVhZE1lc3NhZ2UsIFNpZ25hbHNXb3JrT25FeGl0KQogewogICAgIHN0YXRp
YyBib29sIGhhbmRsZXJSYW4gPSBmYWxzZTsKLSAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWdu
YWw6OlVzciwgW10gKGludCwgc2lnaW5mb190Kiwgdm9pZCopIC0+IFNpZ25hbEFjdGlvbiB7Cisg
ICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFsOjpVc3IsIFtdIChTaWduYWwsIFNpZ0luZm8m
LCBQbGF0Zm9ybVJlZ2lzdGVycyYpIC0+IFNpZ25hbEFjdGlvbiB7CiAgICAgICAgIGRhdGFMb2dM
bigiaGVyZSIpOwogICAgICAgICBoYW5kbGVyUmFuID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuIFNp
Z25hbEFjdGlvbjo6SGFuZGxlZDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309774</attachid>
            <date>2017-05-11 13:52:57 -0700</date>
            <delta_ts>2017-05-11 13:57:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171865-20170511135256.patch</filename>
            <type>text/plain</type>
            <size>50295</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE2Njc3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
YzIyOWE0ZjkxMDMxZGZlOTU1YTQxMGIyMDI0Njc2ZTFmM2NkZWIxLi4yNWUzMDIyZWI5ZmY0ZDA1
M2E4ZWRiY2YxZTI2YmFkZTA1MTA4MWExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MCBAQAorMjAxNy0wNS0xMSAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBVc2UgTWFjaCBleGNlcHRpb25zIGluc3RlYWQgb2Ygc2lnbmFscyB3
aGVyZSBwb3NzaWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTcxODY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhpcyBwYXRjaCBhZGRzIHNvbWUgbmV3IEpTQyBvcHRpb25zLiBUaGUgZmlyc3QgaXMg
YW4gb3B0aW9uIHRoYXQKKyAgICAgICAgZW5hYmxlcyBvciBkaXNhYmxlcyB3ZWIgYXNzZW1ibHkg
dGllciB1cC4gVGhlIHNlY29uZCBjb250cm9scworICAgICAgICB3aGV0aGVyIG9yIG5vdCB3ZSB1
c2UgbWFjaCBleGNlcHRpb25zICh3aGVyZSBhdmFpbGFibGUpLgorCisgICAgICAgICogQVBJL3Rl
c3RzL0V4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwOgorICAgICAgICAoZGlzcGF0Y2hUZXJtaXRh
dGVDYWxsYmFjayk6CisgICAgICAgICh0ZXN0RXhlY3V0aW9uVGltZUxpbWl0KToKKyAgICAgICAg
KiBydW50aW1lL0pTTG9jay5jcHA6CisgICAgICAgIChKU0M6OkpTTG9jazo6ZGlkQWNxdWlyZUxv
Y2spOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5jcHA6CisgICAgICAgIChKU0M6Om92ZXJy
aWRlRGVmYXVsdHMpOgorICAgICAgICAoSlNDOjpPcHRpb25zOjppbml0aWFsaXplKToKKyAgICAg
ICAgKiBydW50aW1lL09wdGlvbnMuaDoKKyAgICAgICAgKiBydW50aW1lL1ZNVHJhcHMuY3BwOgor
ICAgICAgICAoSlNDOjpTaWduYWxDb250ZXh0OjpTaWduYWxDb250ZXh0KToKKyAgICAgICAgKEpT
Qzo6U2lnbmFsQ29udGV4dDo6YWRqdXN0UENUb1BvaW50VG9UcmFwcGluZ0luc3RydWN0aW9uKToK
KyAgICAgICAgKEpTQzo6aW5zdGFsbFNpZ25hbEhhbmRsZXIpOgorICAgICAgICAoSlNDOjpWTVRy
YXBzOjpTaWduYWxTZW5kZXI6OnNlbmQpOgorICAgICAgICAqIHRvb2xzL1NpZ2lsbENyYXNoQW5h
bHl6ZXIuY3BwOgorICAgICAgICAoSlNDOjpTaWduYWxDb250ZXh0OjpTaWduYWxDb250ZXh0KToK
KyAgICAgICAgKEpTQzo6U2lnbmFsQ29udGV4dDo6ZHVtcCk6CisgICAgICAgIChKU0M6Omluc3Rh
bGxDcmFzaEhhbmRsZXIpOgorICAgICAgICAqIHdhc20vV2FzbUJCUVBsYW4uY3BwOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKToKKyAgICAgICAgKiB3YXNt
L1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp0cmFwSGFu
ZGxlcik6CisgICAgICAgIChKU0M6Oldhc206OmVuYWJsZUZhc3RNZW1vcnkpOgorICAgICAgICAq
IHdhc20vV2FzbU1hY2hpbmVUaHJlYWRzLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6cmVzZXRJ
bnN0cnVjdGlvbkNhY2hlT25BbGxUaHJlYWRzKToKKwogMjAxNy0wNS0xMSAgTWFyayBMYW0gIDxt
YXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgV29ya2VyVGhyZWFkOjpzdG9wKCkgc2hvdWxk
IGNhbGwgc2NoZWR1bGVFeGVjdXRpb25UZXJtaW5hdGlvbigpIGxhc3QuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGVjZGRiMzNm
YmVkNTIxMTFiYzA3MTk1ZDZjMDhmZTQwNmIyYzFhMzUuLmE3MjBkMTAxZTIyMDVjZGYwZmEwNmRm
YzNjYTczNmY5YmE1ZmM2NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTcgQEAKKzIwMTctMDUtMTEgIEtlaXRo
IE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIE1hY2ggZXhj
ZXB0aW9ucyBpbnN0ZWFkIG9mIHNpZ25hbHMgd2hlcmUgcG9zc2libGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MTg2NQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZW5hYmxlcyB1c2lu
ZyBtYWNoIGV4Y2VwdGlvbnMgb24gZGFyd2luLiBUaGUgd2F5IHRoZQorICAgICAgICBtYWNoIGV4
Y2VwdGlvbiBhcGkgd29ya3MgaXMgdGhhdCB3ZSBjcmVhdGUgYSBtYWNoIHBvcnQsIHdoaWNoIGlz
CisgICAgICAgIGxpa2UgYSBmaWxlIGRlc2NyaXB0b3IuICBXZSB0aGVuIHdhaXQgZm9yIGEgbWVz
c2FnZSB0byBhcnJpdmUgb24KKyAgICAgICAgdGhhdCBwb3J0IGluIGEgdGhyZWFkLiBXaGVuIGFu
b3RoZXIgdGhyZWFkIHJhaXNlcyBhIGV4Y2VwdGlvbiAoc2F5CisgICAgICAgIGR1ZSB0byBhIGJh
ZCBtZW1vcnkgYWNjZXNzKSB0aGUgT1Mgc2VuZHMgb3VyIHRocmVhZCBhIG1lc3NhZ2UuIFRoZQor
ICAgICAgICBwYXlsb2FkIG9mIHRoYXQgbWVzc2FnZSBpcyB0aGUgcmVnaXN0ZXIgZmlsZSBvZiB0
aGUgY3Jhc2hpbmcKKyAgICAgICAgdGhyZWFkLiBXZSB0aGVuIGNhbGwgb3VyIGN1c3RvbSBoYW5k
bGVycyB0aGF0IGNoYW5nZSB0aGUgc3RhdGUgYXMKKyAgICAgICAgbmVlZGVkLiBJbiBvcmRlciB0
byByZXN0YXJ0IHRoZSB0aHJlYWQgd2Ugc2VuZCBhIHBheWxvYWQgYmFjayB0bworICAgICAgICB0
aGUgT1Mgd2l0aCBhbiB1cGRhdGVkIHJlZ2lzdGVyIGZpbGUgYWxvbmcgd2l0aCBhIHN1Y2Nlc3Mg
bWVzc2FnZQorICAgICAgICBoZWFkZXIuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIG1ha2Vz
IHRocmVhZCBtZXNzYWdlcyB3b3JrIHdpdGhvdXQgc2lnbmFscyBieQorICAgICAgICBzaW1wbHkg
c3VzcGVuZGluZyB0aGUgdGhyZWFkIHRoZW4gcnVubmluZyB0aGUgbWVzc2FnZSBhdCB0aGF0Cisg
ICAgICAgIHRpbWUuCisKKyAgICAgICAgKiBDb25maWd1cmF0aW9ucy9XVEYueGNjb25maWc6Cisg
ICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL1Bs
YXRmb3JtLmg6CisgICAgICAgICogd3RmL1BsYXRmb3JtUmVnaXN0ZXJzLmg6CisgICAgICAgIChX
VEY6OnJlZ2lzdGVyc0Zyb21VQ29udGV4dCk6CisgICAgICAgICogd3RmL1N0YWNrQm91bmRzLmg6
CisgICAgICAgIChXVEY6OlN0YWNrQm91bmRzOjpTdGFja0JvdW5kcyk6CisgICAgICAgICogd3Rm
L1RocmVhZEhvbGRlci5jcHA6CisgICAgICAgIChXVEY6OlRocmVhZEhvbGRlcjo6flRocmVhZEhv
bGRlcik6CisgICAgICAgICogd3RmL1RocmVhZE1lc3NhZ2UuY3BwOgorICAgICAgICAoV1RGOjpz
ZW5kTWVzc2FnZVNpZ25hbCk6CisgICAgICAgIChXVEY6OnNlbmRNZXNzYWdlTWFjaCk6CisgICAg
ICAgIChXVEY6OmRlbGl2ZXJNZXNzYWdlc1VzaW5nTWFjaCk6CisgICAgICAgIChXVEY6OnNlbmRN
ZXNzYWdlU2NvcGVkKToKKyAgICAgICAgKiB3dGYvVGhyZWFkTWVzc2FnZS5oOgorICAgICAgICAo
V1RGOjpzZW5kTWVzc2FnZSk6CisgICAgICAgICogd3RmL1RocmVhZGluZy5oOgorICAgICAgICAo
V1RGOjpUaHJlYWQ6Om1hY2hUaHJlYWQpOgorICAgICAgICAqIHd0Zi9tYWMvTWFjaEV4Y2VwdGlv
bnMuZGVmczogQ29waWVkIGZyb20gU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5oLgorICAg
ICAgICAqIHd0Zi90aHJlYWRzL1NpZ25hbHMuY3BwOgorICAgICAgICAoV1RGOjpzdGFydE1hY2hF
eGNlcHRpb25IYW5kbGVyVGhyZWFkKToKKyAgICAgICAgKFdURjo6ZnJvbU1hY2hFeGNlcHRpb24p
OgorICAgICAgICAoV1RGOjp0b01hY2hNYXNrKToKKyAgICAgICAgKFdURjo6aGFuZGxlU2lnbmFs
c1dpdGhNYWNoKToKKyAgICAgICAgKFdURjo6c2V0RXhjZXB0aW9uUG9ydHMpOgorICAgICAgICAo
V1RGOjphY3RpdmVUaHJlYWRzKToKKyAgICAgICAgKFdURjo6cmVnaXN0ZXJUaHJlYWQpOgorICAg
ICAgICAoV1RGOjpyZW1vdmVUaHJlYWQpOgorICAgICAgICAoV1RGOjppbnN0YWxsU2lnbmFsSGFu
ZGxlcik6CisgICAgICAgIChXVEY6OmpzY1NpZ25hbEhhbmRsZXIpOgorICAgICAgICAqIHd0Zi90
aHJlYWRzL1NpZ25hbHMuaDoKKwogMjAxNy0wNS0wOSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFJlbW92ZSBzdXBwb3J0IGZvciBsZWdhY3kgTm90aWZpY2F0aW9ucwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9FeGVjdXRpb25UaW1l
TGltaXRUZXN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvRXhlY3V0aW9u
VGltZUxpbWl0VGVzdC5jcHAKaW5kZXggZDVlNTMyNDNiNzhkZjc1MTM0MmFkOGQzOTBhNGIwNDEz
ZDllZWY5ZS4uN2VhYzA3MzA5ZGRjM2YxNjQ5NDUwYmQwMzc5ZDJjYTE4ZjAxNjlhYSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9FeGVjdXRpb25UaW1lTGltaXRU
ZXN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0V4ZWN1dGlvblRp
bWVMaW1pdFRlc3QuY3BwCkBAIC0zMCw4ICszMCwxMyBAQAogI2luY2x1ZGUgIkpTQ29udGV4dFJl
ZlByaXZhdGUuaCIKICNpbmNsdWRlICJKYXZhU2NyaXB0Q29yZS5oIgogI2luY2x1ZGUgIk9wdGlv
bnMuaCIKKwogI2luY2x1ZGUgPGNocm9ubz4KKyNpbmNsdWRlIDxkaXNwYXRjaC9kaXNwYXRjaC5o
PgorI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CisjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgog
I2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOjpj
aHJvbm87CkBAIC03Nyw2ICs4MiwxMyBAQCBzdGF0aWMgYm9vbCBleHRlbmRUZXJtaW5hdGVDYWxs
YmFjayhKU0NvbnRleHRSZWYgY3R4LCB2b2lkKikKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9v
bCBkaXNwYXRjaFRlcm1pbmF0ZUNhbGxiYWNrQ2FsbGVkID0gZmFsc2U7CitzdGF0aWMgYm9vbCBk
aXNwYXRjaFRlcm1pdGF0ZUNhbGxiYWNrKEpTQ29udGV4dFJlZiwgdm9pZCopCit7CisgICAgZGlz
cGF0Y2hUZXJtaW5hdGVDYWxsYmFja0NhbGxlZCA9IHRydWU7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKIHN0cnVjdCBUaWVyT3B0aW9ucyB7CiAgICAgY29uc3QgY2hhciogdGllcjsKICAgICB1bnNp
Z25lZCB0aW1lTGltaXRBZGp1c3RtZW50TWlsbGlzOwpAQCAtMzY1LDYgKzM3Nyw2MyBAQCBpbnQg
dGVzdEV4ZWN1dGlvblRpbWVMaW1pdCgpCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAorICAg
ICAgICAvKiBUZXN0IHNjcmlwdCB0aW1lb3V0IGZyb20gZGlzcGF0Y2ggcXVldWU6ICovCisgICAg
ICAgIHRpbWVMaW1pdCA9ICgxMDAgKyB0aWVyQWRqdXN0bWVudE1pbGxpcykgLyAxMDAwLjA7Cisg
ICAgICAgIEpTQ29udGV4dEdyb3VwU2V0RXhlY3V0aW9uVGltZUxpbWl0KGNvbnRleHRHcm91cCwg
dGltZUxpbWl0LCBkaXNwYXRjaFRlcm1pdGF0ZUNhbGxiYWNrLCAwKTsKKyAgICAgICAgeworICAg
ICAgICAgICAgdW5zaWduZWQgdGltZUFmdGVyV2F0Y2hkb2dTaG91bGRIYXZlRmlyZWQgPSAzMDAg
KyB0aWVyQWRqdXN0bWVudE1pbGxpczsKKworICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBzY3Jp
cHRCdWlsZGVyOworICAgICAgICAgICAgc2NyaXB0QnVpbGRlci5hcHBlbmRMaXRlcmFsKCJmdW5j
dGlvbiBmb28oKSB7IHZhciBzdGFydFRpbWUgPSBjdXJyZW50Q1BVVGltZSgpOyB3aGlsZSAodHJ1
ZSkgeyBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDA7IGkrKyk7IGlmIChjdXJyZW50Q1BVVGltZSgp
IC0gc3RhcnRUaW1lID4gIik7CisgICAgICAgICAgICBzY3JpcHRCdWlsZGVyLmFwcGVuZE51bWJl
cih0aW1lQWZ0ZXJXYXRjaGRvZ1Nob3VsZEhhdmVGaXJlZCAvIDEwMDAuMCk7CisgICAgICAgICAg
ICBzY3JpcHRCdWlsZGVyLmFwcGVuZExpdGVyYWwoIikgYnJlYWs7IH0gfSBmb28oKTsiKTsKKwor
ICAgICAgICAgICAgSlNTdHJpbmdSZWYgc2NyaXB0ID0gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoc2NyaXB0QnVpbGRlci50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAg
ICAgZXhjZXB0aW9uID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGRpc3BhdGNoVGVybWluYXRlQ2Fs
bGJhY2tDYWxsZWQgPSBmYWxzZTsKKworICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBkbyB0aGlz
IHNpbmNlIGJsb2NrcyBjYW4gb25seSBjYXB0dXJlIHRoaW5ncyBhcyBjb25zdC4KKyAgICAgICAg
ICAgIEpTR2xvYmFsQ29udGV4dFJlZiYgY29udGV4dFJlZiA9IGNvbnRleHQ7CisgICAgICAgICAg
ICBKU1N0cmluZ1JlZiYgc2NyaXB0UmVmID0gc2NyaXB0OworICAgICAgICAgICAgSlNWYWx1ZVJl
ZiYgZXhjZXB0aW9uUmVmID0gZXhjZXB0aW9uOworCisgICAgICAgICAgICBMb2NrIHN5bmNMb2Nr
OworICAgICAgICAgICAgTG9jayYgc3luY0xvY2tSZWYgPSBzeW5jTG9jazsKKyAgICAgICAgICAg
IENvbmRpdGlvbiBzeW5jaHJvbml6ZTsKKyAgICAgICAgICAgIENvbmRpdGlvbiYgc3luY2hyb25p
emVSZWYgPSBzeW5jaHJvbml6ZTsKKyAgICAgICAgICAgIGJvb2wgZGlkU3luY2hyb25pemUgPSBm
YWxzZTsKKyAgICAgICAgICAgIGJvb2wmIGRpZFN5bmNocm9uaXplUmVmID0gZGlkU3luY2hyb25p
emU7CisKKyAgICAgICAgICAgIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMgc3RhcnRUaW1lOwor
ICAgICAgICAgICAgc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcyBlbmRUaW1lOworCisgICAgICAg
ICAgICBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzJiBzdGFydFRpbWVSZWYgPSBzdGFydFRpbWU7
CisgICAgICAgICAgICBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzJiBlbmRUaW1lUmVmID0gZW5k
VGltZTsKKworICAgICAgICAgICAgZGlzcGF0Y2hfZ3JvdXBfdCBncm91cCA9IGRpc3BhdGNoX2dy
b3VwX2NyZWF0ZSgpOworICAgICAgICAgICAgZGlzcGF0Y2hfZ3JvdXBfYXN5bmMoZ3JvdXAsIGRp
c3BhdGNoX2dldF9nbG9iYWxfcXVldWUoMCwgMCksIF57CisgICAgICAgICAgICAgICAgc3RhcnRU
aW1lUmVmID0gY3VycmVudENQVVRpbWUoKTsKKyAgICAgICAgICAgICAgICBKU0V2YWx1YXRlU2Ny
aXB0KGNvbnRleHRSZWYsIHNjcmlwdFJlZiwgbnVsbHB0ciwgbnVsbHB0ciwgMSwgJmV4Y2VwdGlv
blJlZik7CisgICAgICAgICAgICAgICAgZW5kVGltZVJlZiA9IGN1cnJlbnRDUFVUaW1lKCk7Cisg
ICAgICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBXVEY6OmhvbGRMb2NrKHN5bmNMb2NrUmVmKTsK
KyAgICAgICAgICAgICAgICBkaWRTeW5jaHJvbml6ZVJlZiA9IHRydWU7CisgICAgICAgICAgICAg
ICAgc3luY2hyb25pemVSZWYubm90aWZ5QWxsKCk7CisgICAgICAgICAgICB9KTsKKworICAgICAg
ICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhzeW5jTG9jayk7CisgICAgICAgICAgICBzeW5j
aHJvbml6ZS53YWl0KHN5bmNMb2NrLCBbJl0geyByZXR1cm4gZGlkU3luY2hyb25pemU7IH0pOwor
CisgICAgICAgICAgICBpZiAoKChlbmRUaW1lIC0gc3RhcnRUaW1lKSA8IG1pbGxpc2Vjb25kcyh0
aW1lQWZ0ZXJXYXRjaGRvZ1Nob3VsZEhhdmVGaXJlZCkpICYmIGRpc3BhdGNoVGVybWluYXRlQ2Fs
bGJhY2tDYWxsZWQpCisgICAgICAgICAgICAgICAgcHJpbnRmKCJQQVNTOiAlcyBzY3JpcHQgb24g
ZGlzcGF0Y2ggcXVldWUgdGltZWQgb3V0IGFzIGV4cGVjdGVkLlxuIiwgdGllck9wdGlvbnMudGll
cik7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoKGVuZFRpbWUgLSBz
dGFydFRpbWUpID49IG1pbGxpc2Vjb25kcyh0aW1lQWZ0ZXJXYXRjaGRvZ1Nob3VsZEhhdmVGaXJl
ZCkpCisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiRkFJTDogJXMgc2NyaXB0IG9uIGRpc3Bh
dGNoIHF1ZXVlIGRpZCBub3QgdGltZSBvdXQgYXMgZXhwZWN0ZWQuXG4iLCB0aWVyT3B0aW9ucy50
aWVyKTsKKyAgICAgICAgICAgICAgICBpZiAoIXNob3VsZFRlcm1pbmF0ZUNhbGxiYWNrV2FzQ2Fs
bGVkKQorICAgICAgICAgICAgICAgICAgICBwcmludGYoIkZBSUw6ICVzIHNjcmlwdCBvbiBkaXNw
YXRjaCBxdWV1ZSB0aW1lb3V0IGNhbGxiYWNrIHdhcyBub3QgY2FsbGVkLlxuIiwgdGllck9wdGlv
bnMudGllcik7CisgICAgICAgICAgICAgICAgZmFpbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCiAgICAgICAgIEpTR2xvYmFsQ29udGV4dFJlbGVhc2UoY29udGV4dCk7CiAK
ICAgICAgICAgT3B0aW9uczo6c2V0T3B0aW9ucyhzYXZlZE9wdGlvbnNCdWlsZGVyLnRvU3RyaW5n
KCkuYXNjaWkoKS5kYXRhKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNMb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5j
cHAKaW5kZXggYzE3NWFlMGM0ODJlZDI3YmQ1ZjZiZGM4Nzk2OGU3NWQ0NWFmNTBlZi4uYmI3MGFh
YWVhMTVmZWQ1NDc3YjYxOTlmYTZkNGRjN2VhOTcxMDJjMiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0xvY2suY3BwCkBAIC0zMCw2ICszMCw4IEBACiAjaW5jbHVkZSAiU2FtcGxp
bmdQcm9maWxlci5oIgogI2luY2x1ZGUgIldhc21NYWNoaW5lVGhyZWFkcy5oIgogI2luY2x1ZGUg
PHRocmVhZD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RocmVh
ZHMvU2lnbmFscy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMTQ4LDYgKzE1MCwxMCBAQCB2
b2lkIEpTTG9jazo6ZGlkQWNxdWlyZUxvY2soKQogICAgIFdhc206OnN0YXJ0VHJhY2tpbmdDdXJy
ZW50VGhyZWFkKCk7CiAjZW5kaWYKIAorI2lmIEhBVkUoTUFDSF9FWENFUFRJT05TKQorICAgIFdU
Rjo6cmVnaXN0ZXJUaHJlYWQoJlRocmVhZDo6Y3VycmVudCgpKTsKKyNlbmRpZgorCiAgICAgbV92
bS0+dHJhcHMoKS5ub3RpZnlHcmFiQWxsTG9ja3MoKTsKIAogI2lmIEVOQUJMRShTQU1QTElOR19Q
Uk9GSUxFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKaW5kZXgg
YjA0ZGUzNWE1MzYxNTA4NDM4NTc1YzIyN2E1MDE0ZGQwYzUxYmFhMi4uOTZmOWZmNzQyNWJiOTU5
ZjEzN2E2MTRlYzNkYjY3NmM4YjE2ZGE5OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5jcHAKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0
cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGhyZWFkcy9TaWduYWxzLmg+CiAKICNp
ZiBQTEFURk9STShDT0NPQSkKICNpbmNsdWRlIDxjcnRfZXh0ZXJucy5oPgpAQCAtMzU0LDYgKzM1
NSwxMCBAQCBzdGF0aWMgdm9pZCBvdmVycmlkZURlZmF1bHRzKCkKICNpZiAhRU5BQkxFKFdFQkFT
U0VNQkxZX0ZBU1RfTUVNT1JZKQogICAgIE9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5RmFzdE1lbW9y
eSgpID0gZmFsc2U7CiAjZW5kaWYKKworI2lmIEhBVkUoTUFDSF9FWENFUFRJT05TKQorICAgIE9w
dGlvbnM6OnVzZU1hY2hGb3JFeGNlcHRpb25zKCkgPSB0cnVlOworI2VuZGlmCiB9CiAKIHN0YXRp
YyB2b2lkIHJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMoKQpAQCAtNTQ1LDYgKzU1MCw5IEBAIHZv
aWQgT3B0aW9uczo6aW5pdGlhbGl6ZSgpCiAKICAgICAgICAgICAgIGR1bXBPcHRpb25zSWZOZWVk
ZWQoKTsKICAgICAgICAgICAgIGVuc3VyZU9wdGlvbnNBcmVDb2hlcmVudCgpOworCisgICAgICAg
ICAgICBpZiAoT3B0aW9uczo6dXNlTWFjaEZvckV4Y2VwdGlvbnMoKSkKKyAgICAgICAgICAgICAg
ICBXVEY6OmhhbmRsZVNpZ25hbHNXaXRoTWFjaCgpOwogICAgICAgICB9KTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCmluZGV4IGNmOWRjMmIyYTgyNTY4ZWUwN2Rh
MDg4OWUzOWI2YjJmOWRjZDc5NzUuLjIyNzRkMWNkZWIzMzM2ZTM3YWI0NDczZWE0MTE2ZWEzMjI5
ZTkzN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKQEAgLTQyMCw2
ICs0MjAsOCBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICB2KHVuc2ln
bmVkLCB3YXRjaGRvZywgMCwgTm9ybWFsLCAid2F0Y2hkb2cgdGltZW91dCAoMCA9IERpc2FibGVk
LCBOID0gYSB0aW1lb3V0IHBlcmlvZCBvZiBOIG1pbGxpc2Vjb25kcykiKSBcCiAgICAgdihib29s
LCB1c2VQb2xsaW5nVHJhcHMsIGZhbHNlLCBOb3JtYWwsICJ1c2UgcG9sbGluZyAoaW5zdGVhZCBv
ZiBzaWduYWxsaW5nKSBWTSB0cmFwcyIpIFwKICAgICBcCisgICAgdihib29sLCB1c2VNYWNoRm9y
RXhjZXB0aW9ucywgdHJ1ZSwgTm9ybWFsLCAiVXNlIG1hY2ggZXhjZXB0aW9ucyByYXRoZXIgdGhh
biBzaWduYWxzIHRvIGhhbmRsZSBmYXVsdHMgYW5kIHBhc3MgdGhyZWFkIG1lc3NhZ2VzLiAoVGhp
cyBkb2VzIG5vdGhpbmcgb24gcGxhdGZvcm1zIHdpdGhvdXQgbWFjaCkiKSBcCisgICAgXAogICAg
IHYoYm9vbCwgdXNlSUNTdGF0cywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIFwKICAg
ICB2KHVuc2lnbmVkLCBwcm90b3R5cGVIaXRDb3VudEZvckxMSW50Q2FjaGluZywgMiwgTm9ybWFs
LCAiTnVtYmVyIG9mIHByb3RvdHlwZSBwcm9wZXJ0eSBoaXRzIGJlZm9yZSBjYWNoaW5nIGEgcHJv
dG90eXBlIGluIHRoZSBMTEludC4gQSBjb3VudCBvZiAwIG1lYW5zIG5ldmVyIGNhY2hlLiIpIFwK
QEAgLTQ0Myw2ICs0NDUsNyBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAg
ICB2KHVuc2lnbmVkLCB3ZWJBc3NlbWJseUJCUU9wdGltaXphdGlvbkxldmVsLCAxLCBOb3JtYWws
ICJCMyBPcHRpbWl6YXRpb24gbGV2ZWwgZm9yIEJCUSBXZWIgQXNzZW1ibHkgbW9kdWxlIGNvbXBp
bGF0aW9ucy4iKSBcCiAgICAgdih1bnNpZ25lZCwgd2ViQXNzZW1ibHlPTUdPcHRpbWl6YXRpb25M
ZXZlbCwgT3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSwgTm9ybWFsLCAiQjMgT3B0aW1pemF0
aW9uIGxldmVsIGZvciBPTUcgV2ViIEFzc2VtYmx5IG1vZHVsZSBjb21waWxhdGlvbnMuIikgXAog
ICAgIFwKKyAgICB2KGJvb2wsIHVzZUJCUVRpZXJVcENoZWNrcywgdHJ1ZSwgTm9ybWFsLCAiRW5h
YmxlcyB0aWVyIHVwIGNoZWNrcyBmb3Igb3VyIEJCUSBjb2RlLiIpIFwKICAgICB2KHVuc2lnbmVk
LCB3ZWJBc3NlbWJseU9NR1RpZXJVcENvdW50LCA1MDAwLCBOb3JtYWwsICJUaGUgY291bnRkb3du
IGJlZm9yZSB3ZSB0aWVyIHVwIGEgZnVuY3Rpb24gdG8gT01HLiIpIFwKICAgICB2KHVuc2lnbmVk
LCB3ZWJBc3NlbWJseUxvb3BEZWNyZW1lbnQsIDE1LCBOb3JtYWwsICJUaGUgYW1vdW50IHRoZSB0
aWVyIHVwIGNvdW50ZG93biBpcyBkZWNyZW1lbnRlZCBvbiBlYWNoIGxvb3AgYmFja2VkZ2UuIikg
XAogICAgIHYodW5zaWduZWQsIHdlYkFzc2VtYmx5RnVuY3Rpb25FbnRyeURlY3JlbWVudCwgMSwg
Tm9ybWFsLCAiVGhlIGFtb3VudCB0aGUgdGllciB1cCBjb3VudGRvd24gaXMgZGVjcmVtZW50ZWQg
b24gZWFjaCBmdW5jdGlvbiBlbnRyeS4iKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTVRyYXBzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNVHJhcHMuY3BwCmluZGV4IDFiYWFjZTYwNDRlNjYwYThlNTQ0MWZiYWQwMThlYTkwOTMxYTRj
OTEuLjEwZDc4MmE4ZGM0OWE1ZWRhMDgxZDczZDY4M2RmZmUxNmY4YzhmNDMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCkBAIC01MywxMSArNTMsMTEgQEAgQUxX
QVlTX0lOTElORSBWTSYgVk1UcmFwczo6dm0oKSBjb25zdAogI2lmIEVOQUJMRShTSUdOQUxfQkFT
RURfVk1fVFJBUFMpCiAKIHN0cnVjdCBTaWduYWxDb250ZXh0IHsKLSAgICBTaWduYWxDb250ZXh0
KG1jb250ZXh0X3QmIG1jb250ZXh0KQotICAgICAgICA6IG1jb250ZXh0KG1jb250ZXh0KQotICAg
ICAgICAsIHRyYXBQQyhNYWNoaW5lQ29udGV4dDo6aW5zdHJ1Y3Rpb25Qb2ludGVyKG1jb250ZXh0
KSkKLSAgICAgICAgLCBzdGFja1BvaW50ZXIoTWFjaGluZUNvbnRleHQ6OnN0YWNrUG9pbnRlciht
Y29udGV4dCkpCi0gICAgICAgICwgZnJhbWVQb2ludGVyKE1hY2hpbmVDb250ZXh0OjpmcmFtZVBv
aW50ZXIobWNvbnRleHQpKQorICAgIFNpZ25hbENvbnRleHQoUGxhdGZvcm1SZWdpc3RlcnMmIHJl
Z2lzdGVycykKKyAgICAgICAgOiBjb250ZXh0KHJlZ2lzdGVycykKKyAgICAgICAgLCB0cmFwUEMo
TWFjaGluZUNvbnRleHQ6Omluc3RydWN0aW9uUG9pbnRlcihjb250ZXh0KSkKKyAgICAgICAgLCBz
dGFja1BvaW50ZXIoTWFjaGluZUNvbnRleHQ6OnN0YWNrUG9pbnRlcihjb250ZXh0KSkKKyAgICAg
ICAgLCBmcmFtZVBvaW50ZXIoTWFjaGluZUNvbnRleHQ6OmZyYW1lUG9pbnRlcihjb250ZXh0KSkK
ICAgICB7CiAjaWYgQ1BVKFg4Nl82NCkgfHwgQ1BVKFg4NikKICAgICAgICAgLy8gT24gWDg2XzY0
LCBTSUdUUkFQIHJlcG9ydHMgdGhlIGFkZHJlc3MgYWZ0ZXIgdGhlIHRyYXBwaW5nIFBDLiBTbywg
ZGVjIGJ5IDEuCkBAIC02OCwxMSArNjgsMTEgQEAgc3RydWN0IFNpZ25hbENvbnRleHQgewogICAg
IHZvaWQgYWRqdXN0UENUb1BvaW50VG9UcmFwcGluZ0luc3RydWN0aW9uKCkKICAgICB7CiAjaWYg
Q1BVKFg4Nl82NCkgfHwgQ1BVKFg4NikKLSAgICAgICAgTWFjaGluZUNvbnRleHQ6Omluc3RydWN0
aW9uUG9pbnRlcihtY29udGV4dCkgPSB0cmFwUEM7CisgICAgICAgIE1hY2hpbmVDb250ZXh0Ojpp
bnN0cnVjdGlvblBvaW50ZXIoY29udGV4dCkgPSB0cmFwUEM7CiAjZW5kaWYKICAgICB9CiAKLSAg
ICBtY29udGV4dF90JiBtY29udGV4dDsKKyAgICBQbGF0Zm9ybVJlZ2lzdGVycyYgY29udGV4dDsK
ICAgICB2b2lkKiB0cmFwUEM7CiAgICAgdm9pZCogc3RhY2tQb2ludGVyOwogICAgIHZvaWQqIGZy
YW1lUG9pbnRlcjsKQEAgLTEzMCwxMSArMTMwLDEzIEBAIHN0YXRpYyBFeHBlY3RlZDxWTUFuZFN0
YWNrQm91bmRzLCBWTVRyYXBzOjpFcnJvcj4gZmluZEFjdGl2ZVZNQW5kU3RhY2tCb3VuZHMoU2ln
CiAKIHN0YXRpYyB2b2lkIGluc3RhbGxTaWduYWxIYW5kbGVyKCkKIHsKLSAgICBpbnN0YWxsU2ln
bmFsSGFuZGxlcihTaWduYWw6OlRyYXAsIFtdIChpbnQsIHNpZ2luZm9fdCosIHZvaWQqIHVhcCkg
LT4gU2lnbmFsQWN0aW9uIHsKLSAgICAgICAgU2lnbmFsQ29udGV4dCBjb250ZXh0KHN0YXRpY19j
YXN0PHVjb250ZXh0X3QqPih1YXApLT51Y19tY29udGV4dCk7CisgICAgaW5zdGFsbFNpZ25hbEhh
bmRsZXIoU2lnbmFsOjpUcmFwLCBbXSAoU2lnbmFsLCBTaWdJbmZvJiwgUGxhdGZvcm1SZWdpc3Rl
cnMmIHJlZ2lzdGVycykgLT4gU2lnbmFsQWN0aW9uIHsKKyAgICAgICAgU2lnbmFsQ29udGV4dCBj
b250ZXh0KHJlZ2lzdGVycyk7CiAKLSAgICAgICAgaWYgKCFpc0pJVFBDKGNvbnRleHQudHJhcFBD
KSkKKyAgICAgICAgaWYgKCFpc0pJVFBDKGNvbnRleHQudHJhcFBDKSkgeworICAgICAgICAgICAg
ZGF0YUxvZ0xuKCJ0cmFwcGluZyBwYzogIiwgUmF3UG9pbnRlcihjb250ZXh0LnRyYXBQQyksICIg
aml0IHN0YXJ0OiAiLCBzdGFydE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbCwgIiBqaXQgZW5k
OiAiLCBlbmRPZkZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2wpOwogICAgICAgICAgICAgcmV0dXJu
IFNpZ25hbEFjdGlvbjo6Tm90SGFuZGxlZDsKKyAgICAgICAgfQogCiAgICAgICAgIC8vIEZJWE1F
OiBUaGlzIGN1cnJlbnRseSBlYXRzIGFsbCB0cmFwcyBpbmNsdWRpbmcgaml0IGFzc2VydHMgd2Ug
c2hvdWxkIG1ha2Ugc3VyZSB0aGlzCiAgICAgICAgIC8vIGFsd2F5cyB3b3Jrcy4gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MTAzOQpAQCAtNDA0LDggKzQwNiw4IEBA
IHZvaWQgVk1UcmFwczo6U2lnbmFsU2VuZGVyOjpzZW5kKCkKICAgICAgICAgICAgIFZNJiB2bSA9
ICptX3ZtOwogICAgICAgICAgICAgYXV0byBvcHRpb25hbE93bmVyVGhyZWFkID0gdm0ub3duZXJU
aHJlYWQoKTsKICAgICAgICAgICAgIGlmIChvcHRpb25hbE93bmVyVGhyZWFkKSB7Ci0gICAgICAg
ICAgICAgICAgc2VuZE1lc3NhZ2UoKm9wdGlvbmFsT3duZXJUaHJlYWQudmFsdWUoKS5nZXQoKSwg
W10gKHNpZ2luZm9fdCosIHVjb250ZXh0X3QqIHVjb250ZXh0KSAtPiB2b2lkIHsKLSAgICAgICAg
ICAgICAgICAgICAgU2lnbmFsQ29udGV4dCBjb250ZXh0KHVjb250ZXh0LT51Y19tY29udGV4dCk7
CisgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoKm9wdGlvbmFsT3duZXJUaHJlYWQudmFsdWUo
KS5nZXQoKSwgW10gKFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMpIC0+IHZvaWQgeworICAg
ICAgICAgICAgICAgICAgICBTaWduYWxDb250ZXh0IGNvbnRleHQocmVnaXN0ZXJzKTsKICAgICAg
ICAgICAgICAgICAgICAgYXV0byBhY3RpdmVWTUFuZFN0YWNrQm91bmRzID0gZmluZEFjdGl2ZVZN
QW5kU3RhY2tCb3VuZHMoY29udGV4dCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChhY3RpdmVW
TUFuZFN0YWNrQm91bmRzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBWTSogdm0gPSBhY3Rp
dmVWTUFuZFN0YWNrQm91bmRzLnZhbHVlKCkudm07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAKaW5kZXggNGFkYWVmZjFjZGEyZDFm
YmM2ZjkwNjFmMDYzZTE0ZDJlNjMzMDA0OC4uYmI0NjA1YzY5M2UxMmRkZTA1MDg0ZjdhMTdjZDFl
NDRmN2U5ZTY3NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1NpZ2ls
bENyYXNoQW5hbHl6ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9TaWdp
bGxDcmFzaEFuYWx5emVyLmNwcApAQCAtNzgsMTEgKzc4LDExIEBAIHByaXZhdGU6CiAjZW5kaWYg
Ly8gVVNFKE9TX0xPRykKIAogc3RydWN0IFNpZ25hbENvbnRleHQgewotICAgIFNpZ25hbENvbnRl
eHQobWNvbnRleHRfdCYgbWNvbnRleHQpCi0gICAgICAgIDogbWNvbnRleHQobWNvbnRleHQpCi0g
ICAgICAgICwgbWFjaGluZVBDKE1hY2hpbmVDb250ZXh0OjppbnN0cnVjdGlvblBvaW50ZXIobWNv
bnRleHQpKQotICAgICAgICAsIHN0YWNrUG9pbnRlcihNYWNoaW5lQ29udGV4dDo6c3RhY2tQb2lu
dGVyKG1jb250ZXh0KSkKLSAgICAgICAgLCBmcmFtZVBvaW50ZXIoTWFjaGluZUNvbnRleHQ6OmZy
YW1lUG9pbnRlcihtY29udGV4dCkpCisgICAgU2lnbmFsQ29udGV4dChQbGF0Zm9ybVJlZ2lzdGVy
cyYgY29udGV4dCkKKyAgICAgICAgOiBjb250ZXh0KGNvbnRleHQpCisgICAgICAgICwgbWFjaGlu
ZVBDKE1hY2hpbmVDb250ZXh0OjppbnN0cnVjdGlvblBvaW50ZXIoY29udGV4dCkpCisgICAgICAg
ICwgc3RhY2tQb2ludGVyKE1hY2hpbmVDb250ZXh0OjpzdGFja1BvaW50ZXIoY29udGV4dCkpCisg
ICAgICAgICwgZnJhbWVQb2ludGVyKE1hY2hpbmVDb250ZXh0OjpmcmFtZVBvaW50ZXIoY29udGV4
dCkpCiAgICAgeyB9CiAKICAgICB2b2lkIGR1bXAoKQpAQCAtMTEyLDcgKzExMiw3IEBAIHN0cnVj
dCBTaWduYWxDb250ZXh0IHsKICAgICAgICAgdihncykKIAogI2RlZmluZSBEVU1QX1JFR0lTVEVS
KF9fcmVnKSBcCi0gICAgICAgIGxvZygiUmVnaXN0ZXIgIiAjX19yZWcgIjogJXAiLCByZWludGVy
cHJldF9jYXN0PHZvaWQqPihtY29udGV4dC0+X19zcy5fXyMjX19yZWcpKTsKKyAgICAgICAgbG9n
KCJSZWdpc3RlciAiICNfX3JlZyAiOiAlcCIsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNvbnRl
eHQuX18jI19fcmVnKSk7CiAgICAgICAgIEZPUl9FQUNIX1JFR0lTVEVSKERVTVBfUkVHSVNURVIp
CiAjdW5kZWYgRk9SX0VBQ0hfUkVHSVNURVIKIApAQCAtMTIwLDIwICsxMjAsMjAgQEAgc3RydWN0
IFNpZ25hbENvbnRleHQgewogICAgICAgICBpbnQgaTsKICAgICAgICAgZm9yIChpID0gMDsgaSA8
IDI4OyBpICs9IDQpIHsKICAgICAgICAgICAgIGxvZygieCVkOiAlMDE2bGx4IHglZDogJTAxNmxs
eCB4JWQ6ICUwMTZsbHggeCVkOiAlMDE2bGx4IiwKLSAgICAgICAgICAgICAgICBpLCBtY29udGV4
dC0+X19zcy5fX3hbaV0sCi0gICAgICAgICAgICAgICAgaSsxLCBtY29udGV4dC0+X19zcy5fX3hb
aSsxXSwKLSAgICAgICAgICAgICAgICBpKzIsIG1jb250ZXh0LT5fX3NzLl9feFtpKzJdLAotICAg
ICAgICAgICAgICAgIGkrMywgbWNvbnRleHQtPl9fc3MuX194W2krM10pOworICAgICAgICAgICAg
ICAgIGksIGNvbnRleHQuX194W2ldLAorICAgICAgICAgICAgICAgIGkrMSwgY29udGV4dC5fX3hb
aSsxXSwKKyAgICAgICAgICAgICAgICBpKzIsIGNvbnRleHQuX194W2krMl0sCisgICAgICAgICAg
ICAgICAgaSszLCBjb250ZXh0Ll9feFtpKzNdKTsKICAgICAgICAgfQogICAgICAgICBBU1NFUlQo
aSA8IDI5KTsKICAgICAgICAgbG9nKCJ4JWQ6ICUwMTZsbHggZnA6ICUwMTZsbHggbHI6ICUwMTZs
bHgiLAotICAgICAgICAgICAgaSwgbWNvbnRleHQtPl9fc3MuX194W2ldLCBtY29udGV4dC0+X19z
cy5fX2ZwLCBtY29udGV4dC0+X19zcy5fX2xyKTsKKyAgICAgICAgICAgIGksIGNvbnRleHQuX194
W2ldLCBjb250ZXh0Ll9fZnAsIGNvbnRleHQuX19scik7CiAgICAgICAgIGxvZygic3A6ICUwMTZs
bHggcGM6ICUwMTZsbHggY3BzcjogJTA4eCIsCi0gICAgICAgICAgICBtY29udGV4dC0+X19zcy5f
X3NwLCBtY29udGV4dC0+X19zcy5fX3BjLCBtY29udGV4dC0+X19zcy5fX2Nwc3IpOworICAgICAg
ICAgICAgY29udGV4dC5fX3NwLCBjb250ZXh0Ll9fcGMsIGNvbnRleHQuX19jcHNyKTsKICNlbmRp
ZgogICAgIH0KIAotICAgIG1jb250ZXh0X3QmIG1jb250ZXh0OworICAgIFBsYXRmb3JtUmVnaXN0
ZXJzJiBjb250ZXh0OwogICAgIHZvaWQqIG1hY2hpbmVQQzsKICAgICB2b2lkKiBzdGFja1BvaW50
ZXI7CiAgICAgdm9pZCogZnJhbWVQb2ludGVyOwpAQCAtMTQyLDggKzE0Miw4IEBAIHN0cnVjdCBT
aWduYWxDb250ZXh0IHsKIHN0YXRpYyB2b2lkIGluc3RhbGxDcmFzaEhhbmRsZXIoKQogewogI2lm
IENQVShYODZfNjQpIHx8IENQVShBUk02NCkKLSAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWdu
YWw6OklsbCwgW10gKGludCwgc2lnaW5mb190Kiwgdm9pZCogdWFwKSB7Ci0gICAgICAgIFNpZ25h
bENvbnRleHQgY29udGV4dChzdGF0aWNfY2FzdDx1Y29udGV4dF90Kj4odWFwKS0+dWNfbWNvbnRl
eHQpOworICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbDo6SWxsLCBbXSAoU2lnbmFsLCBT
aWdJbmZvJiwgUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVycykgeworICAgICAgICBTaWduYWxD
b250ZXh0IGNvbnRleHQocmVnaXN0ZXJzKTsKIAogICAgICAgICBpZiAoIWlzSklUUEMoY29udGV4
dC5tYWNoaW5lUEMpKQogICAgICAgICAgICAgcmV0dXJuIFNpZ25hbEFjdGlvbjo6Tm90SGFuZGxl
ZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAppbmRleCAxZGQw
Y2QxZDgzNWM2YzJmMjMxYjAwYjg4NmRkZTRhZjcyYzI2M2NlLi5iMWI1OThkMjBjNWMwMDc3ZDll
OWQwOGUzNjhhZDVjYTE3ODMxYmFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQkJRUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUJCUVBsYW4uY3BwCkBAIC0yNDIsNyArMjQyLDcgQEAgdm9pZCBCQlFQbGFuOjpjb21waWxlRnVu
Y3Rpb25zKENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKICAgICAgICAgQVNTRVJUKHZhbGlkYXRl
RnVuY3Rpb24oZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgbV9tb2R1
bGVJbmZvcm1hdGlvbi5nZXQoKSkpOwogCiAgICAgICAgIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bHNbZnVuY3Rpb25JbmRleF0gPSBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4oKTsKLSAg
ICAgICAgVGllclVwQ291bnQqIHRpZXJVcCA9ICZtX3RpZXJVcENvdW50c1tmdW5jdGlvbkluZGV4
XTsKKyAgICAgICAgVGllclVwQ291bnQqIHRpZXJVcCA9IE9wdGlvbnM6OnVzZUJCUVRpZXJVcENo
ZWNrcygpID8gJm1fdGllclVwQ291bnRzW2Z1bmN0aW9uSW5kZXhdIDogbnVsbHB0cjsKICAgICAg
ICAgYXV0byBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUobV9jb21waWxh
dGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdLCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0
aCwgc2lnbmF0dXJlLCBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdLCBt
X21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIENvbXBpbGF0aW9uTW9kZTo6QkJRTW9k
ZSwgZnVuY3Rpb25JbmRleCwgdGllclVwKTsKIAogICAgICAgICBpZiAoVU5MSUtFTFkoIXBhcnNl
QW5kQ29tcGlsZVJlc3VsdCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAKaW5kZXggMmUwYzk5YTM5YmViZDMxNzhiOTE0
OGQ5NThmZTUzZTU3YTYyMjk3ZS4uMjY0YzM0ZGU0NWRhMTc1YTVkNTE0MWMxNzFlZmU5NWUwNjNj
NWUyNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2ln
bmFsSGFuZGxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0
U2lnbmFsSGFuZGxlci5jcHAKQEAgLTUyLDkgKzUyLDggQEAgc3RhdGljIExhenlOZXZlckRlc3Ry
b3llZDxIYXNoU2V0PHN0ZDo6dHVwbGU8dm9pZCosIHZvaWQqPj4+IGNvZGVMb2NhdGlvbnM7IC8v
ICgKIAogc3RhdGljIGJvb2wgZmFzdEhhbmRsZXJJbnN0YWxsZWQgeyBmYWxzZSB9OwogCi1zdGF0
aWMgU2lnbmFsQWN0aW9uIHRyYXBIYW5kbGVyKGludCwgc2lnaW5mb190KiBzaWdJbmZvLCB2b2lk
KiB1Y29udGV4dCkKK3N0YXRpYyBTaWduYWxBY3Rpb24gdHJhcEhhbmRsZXIoU2lnbmFsLCBTaWdJ
bmZvJiBzaWdJbmZvLCBQbGF0Zm9ybVJlZ2lzdGVycyYgY29udGV4dCkKIHsKLSAgICBtY29udGV4
dF90JiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+KHVjb250ZXh0KS0+dWNfbWNv
bnRleHQ7CiAgICAgdm9pZCogZmF1bHRpbmdJbnN0cnVjdGlvbiA9IE1hY2hpbmVDb250ZXh0Ojpp
bnN0cnVjdGlvblBvaW50ZXIoY29udGV4dCk7CiAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgInN0
YXJ0aW5nIGhhbmRsZXIgZm9yIGZhdWx0IGF0OiAiLCBSYXdQb2ludGVyKGZhdWx0aW5nSW5zdHJ1
Y3Rpb24pKTsKIApAQCAtNjQsNyArNjMsNyBAQCBzdGF0aWMgU2lnbmFsQWN0aW9uIHRyYXBIYW5k
bGVyKGludCwgc2lnaW5mb190KiBzaWdJbmZvLCB2b2lkKiB1Y29udGV4dCkKICAgICBpZiAoaXNK
SVRQQyhmYXVsdGluZ0luc3RydWN0aW9uKSkgewogICAgICAgICBib29sIGZhdWx0ZWRJbkFjdGl2
ZUZhc3RNZW1vcnkgPSBmYWxzZTsKICAgICAgICAgewotICAgICAgICAgICAgdm9pZCogZmF1bHRp
bmdBZGRyZXNzID0gc2lnSW5mby0+c2lfYWRkcjsKKyAgICAgICAgICAgIHZvaWQqIGZhdWx0aW5n
QWRkcmVzcyA9IHNpZ0luZm8uZmF1bHRpbmdBZGRyZXNzOwogICAgICAgICAgICAgZGF0YUxvZ0xu
SWYodmVyYm9zZSwgImNoZWNraW5nIGZhdWx0aW5nIGFkZHJlc3M6ICIsIFJhd1BvaW50ZXIoZmF1
bHRpbmdBZGRyZXNzKSwgIiBpcyBpbiBhbiBhY3RpdmUgZmFzdCBtZW1vcnkiKTsKICAgICAgICAg
ICAgIGZhdWx0ZWRJbkFjdGl2ZUZhc3RNZW1vcnkgPSBXYXNtOjpNZW1vcnk6OmFkZHJlc3NJc0lu
QWN0aXZlRmFzdE1lbW9yeShmYXVsdGluZ0FkZHJlc3MpOwogICAgICAgICB9CkBAIC0xMjQsMTEg
KzEyMywxMSBAQCB2b2lkIGVuYWJsZUZhc3RNZW1vcnkoKQogICAgICAgICAgICAgcmV0dXJuOwog
CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZX0ZBU1RfTUVNT1JZKQotICAgICAgICBpbnN0YWxsU2ln
bmFsSGFuZGxlcihTaWduYWw6OkJ1cywgW10gKGludCBzaWduYWwsIHNpZ2luZm9fdCogc2lnSW5m
bywgdm9pZCogdWNvbnRleHQpIHsKKyAgICAgICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFs
OjpCdXMsIFtdIChTaWduYWwgc2lnbmFsLCBTaWdJbmZvJiBzaWdJbmZvLCBQbGF0Zm9ybVJlZ2lz
dGVycyYgdWNvbnRleHQpIHsKICAgICAgICAgICAgIHJldHVybiB0cmFwSGFuZGxlcihzaWduYWws
IHNpZ0luZm8sIHVjb250ZXh0KTsKICAgICAgICAgfSk7CiAKLSAgICAgICAgaW5zdGFsbFNpZ25h
bEhhbmRsZXIoU2lnbmFsOjpTZWdWLCBbXSAoaW50IHNpZ25hbCwgc2lnaW5mb190KiBzaWdJbmZv
LCB2b2lkKiB1Y29udGV4dCkgeworICAgICAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWw6
OlNlZ1YsIFtdIChTaWduYWwgc2lnbmFsLCBTaWdJbmZvJiBzaWdJbmZvLCBQbGF0Zm9ybVJlZ2lz
dGVycyYgdWNvbnRleHQpIHsKICAgICAgICAgICAgIHJldHVybiB0cmFwSGFuZGxlcihzaWduYWws
IHNpZ0luZm8sIHVjb250ZXh0KTsKICAgICAgICAgfSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21NYWNoaW5lVGhyZWFkcy5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTWFjaGluZVRocmVhZHMuY3BwCmluZGV4IDVhYWM4N2FjYjU3NDdj
N2ZjYTJmOTM2ZWM5Y2Y2NzhiNDMxNzgxNzEuLjBhMzY3ZmQ1ZTIyNTI3ZTljM2M4NzUzNmVjZmQ3
MmIxM2RmNzlkNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21N
YWNoaW5lVGhyZWFkcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1h
Y2hpbmVUaHJlYWRzLmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIk1hY2hpbmVTdGFj
a01hcmtlci5oIgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0
Zi9UaHJlYWRNZXNzYWdlLmg+CisjaW5jbHVkZSA8d3RmL3RocmVhZHMvU2lnbmFscy5oPgogCiBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCkBAIC01Nyw3ICs1OCw3IEBAIHZvaWQg
cmVzZXRJbnN0cnVjdGlvbkNhY2hlT25BbGxUaHJlYWRzKCkKIAogICAgIGNvbnN0IERvdWJseUxp
bmtlZExpc3Q8TWFjaGluZVRocmVhZHM6Ok1hY2hpbmVUaHJlYWQ+JiB0aHJlYWRzID0gd2FzbVRo
cmVhZHMoKS50aHJlYWRzTGlzdEhlYWQobG9ja2VyKTsKICAgICBmb3IgKGNvbnN0IGF1dG8qIHRo
cmVhZCA9IHRocmVhZHMuaGVhZCgpOyB0aHJlYWQ7IHRocmVhZCA9IHRocmVhZC0+bmV4dCgpKSB7
Ci0gICAgICAgIHNlbmRNZXNzYWdlKHRocmVhZC0+bV90aHJlYWQuZ2V0KCksIFtdIChzaWdpbmZv
X3QqLCB1Y29udGV4dF90KikgeworICAgICAgICBzZW5kTWVzc2FnZSh0aHJlYWQtPm1fdGhyZWFk
LmdldCgpLCBbXSAoY29uc3QgUGxhdGZvcm1SZWdpc3RlcnMmKSB7CiAgICAgICAgICAgICAvLyBJ
dCdzIGxpa2VseSB0aGF0IHRoZSBzaWduYWwgaGFuZGxlciB3aWxsIGFscmVhZHkgcmVzZXQgdGhl
IGluc3RydWN0aW9uIGNhY2hlIGJ1dCB3ZSBtaWdodCBhcyB3ZWxsIGJlIHN1cmUuCiAgICAgICAg
ICAgICBXVEY6OmNyb3NzTW9kaWZ5aW5nQ29kZUZlbmNlKCk7CiAgICAgICAgIH0pOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi9Db25maWd1cmF0aW9ucy9XVEYueGNjb25maWcgYi9Tb3VyY2UvV1RG
L0NvbmZpZ3VyYXRpb25zL1dURi54Y2NvbmZpZwppbmRleCA0MjFlZmQ5NjFjMTQ2OGNkMjBkZGM1
YmJmODg5NjIwZWUxY2Y1OGRjLi5hZjE5OWNlYjk1MDZmODk1MGQzM2E5Y2U0ODA3YmE2ZGJiN2Iy
N2U1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NvbmZpZ3VyYXRpb25zL1dURi54Y2NvbmZpZwor
KysgYi9Tb3VyY2UvV1RGL0NvbmZpZ3VyYXRpb25zL1dURi54Y2NvbmZpZwpAQCAtMjcsMyArMjcs
NiBAQCBQUk9EVUNUX05BTUUgPSBXVEY7CiAKIEdDQ19TWU1CT0xTX1BSSVZBVEVfRVhURVJOID0g
WUVTOwogU1RSSVBfSU5TVEFMTEVEX1BST0RVQ1QgPSBOTzsKKworRVhDTFVERURfU09VUkNFX0ZJ
TEVfTkFNRVNfID0gTWFjaEV4Y2VwdGlvbnMuZGVmcworRVhDTFVERURfU09VUkNFX0ZJTEVfTkFN
RVNbc2RrPWlwaG9uZW9zKl0gPSAkKEVYQ0xVREVEX1NPVVJDRV9GSUxFX05BTUVTXyQoVVNFX0lO
VEVSTkFMX1NESykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCA1ZjQ1Mjg3ZjZlM2M2ODg1YjIyYmEyNzc2Y2ZiYzZhMzMyM2JkMDViLi41ODU0NGNjYjYyY2Iy
MjEyYmFlZTc2ZjRkMmEwMWU4OWI2YjdiMDk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTY0LDYgKzY0LDcgQEAKIAkJNTIxODMwMTJDOTlFNDc2QTg0RUVC
RUE4IC8qIFN5bWJvbEltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRjcyQkJEQjEwN0ZBNDI0ODg2MTc4QjlFIC8qIFN5bWJvbEltcGwuY3BwICov
OyB9OwogCQk1MzExQkQ1MzFFQTcxQ0FEMDA1MjUyODEgLyogU2lnbmFscy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzExQkQ1MTFFQTcxQ0FEMDA1
MjUyODEgLyogU2lnbmFscy5jcHAgKi87IH07CiAJCTUzMTFCRDVDMUVBODIyRjkwMDUyNTI4MSAv
KiBUaHJlYWRNZXNzYWdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUzMTFCRDVCMUVBODIyRjkwMDUyNTI4MSAvKiBUaHJlYWRNZXNzYWdlLmNwcCAq
LzsgfTsKKwkJNTM1MzRGMkExRUMwRTEwRTAwMTQxQjJGIC8qIE1hY2hFeGNlcHRpb25zLmRlZnMg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzUzNEYyOTFF
QzBFMTBFMDAxNDFCMkYgLyogTWFjaEV4Y2VwdGlvbnMuZGVmcyAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChDbGllbnQsIFNlcnZlciwgKTsgfTsgfTsKIAkJNzBBOTkzRkUxQUQ3MTUxMzAw
RkE2MTVCIC8qIFN5bWJvbFJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDcwQTk5M0ZDMUFENzE1MTMwMEZBNjE1QiAvKiBTeW1ib2xSZWdp
c3RyeS5jcHAgKi87IH07CiAJCTcwRUNBNjBEMUIwMjQyNjgwMDQ0OTczOSAvKiBBdG9taWNTdHJp
bmdJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDcwRUNBNjBBMUIwMjQyNjgwMDQ0OTczOSAvKiBBdG9taWNTdHJpbmdJbXBsLmNwcCAqLzsgfTsK
IAkJN0FGRUM2QjExRUIyMkI1OTAwREFERTM2IC8qIFVVSUQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FGRUM2QjAxRUIyMkI1OTAwREFERTM2IC8q
IFVVSUQuY3BwICovOyB9OwpAQCAtMjk5LDYgKzMwMCw3IEBACiAJCTUzMTFCRDU3MUVBN0UxQTEw
MDUyNTI4MSAvKiBTaWduYWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNp
Z25hbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMxMUJENTkxRUE4MUE5NjAw
NTI1MjgxIC8qIFRocmVhZE1lc3NhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVGhyZWFkTWVzc2FnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzExQkQ1
QjFFQTgyMkY5MDA1MjUyODEgLyogVGhyZWFkTWVzc2FnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUaHJlYWRNZXNzYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNTM1MzRGMjkxRUMwRTEwRTAwMTQxQjJGIC8qIE1hY2hFeGNlcHRpb25zLmRl
ZnMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLm1pZzsgcGF0aCA9IE1hY2hFeGNlcHRpb25zLmRlZnM7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzOUVCMDYyMUQ1NTI4NDIwMEM4MkVGNyAv
KiBMRUJEZWNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExFQkRlY29k
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNFQzI1M0MxRTk1QUQzMDAwMDgz
MUI5IC8qIFByaW9yaXR5UXVldWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UHJpb3JpdHlRdWV1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NTMwNzFDOTFD
NDA0MjcyMDAzODQ4OTggLyogVGlueUxSVUNhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFRpbnlMUlVDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MTAyMyw2ICsxMDI1LDcgQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTFBNDI4QjhCMUM4Rjg5REQw
MDUxRTlFQiAvKiBBcHBLaXRDb21wYXRpYmlsaXR5RGVjbGFyYXRpb25zLmggKi8sCiAJCQkJMUFD
QUREODIxODg0NDgwMTAwRDhCNzFEIC8qIERlcHJlY2F0ZWRTeW1ib2xzVXNlZEJ5U2FmYXJpLm1t
ICovLAorCQkJCTUzNTM0RjI5MUVDMEUxMEUwMDE0MUIyRiAvKiBNYWNoRXhjZXB0aW9ucy5kZWZz
ICovLAogCQkJCUE4QTQ3MkM1MTUxQTgyNUEwMDQxMjNGRiAvKiBNYWluVGhyZWFkTWFjLm1tICov
LAogCQkJKTsKIAkJCXBhdGggPSBtYWM7CkBAIC0xMzQ2LDYgKzEzNDksNyBAQAogCQkJCTE0M0Y2
MTFGMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEz
QjcyNUVDOTg3NDQ2QUQ5M0YxQTQ0MCAvKiBSYW5kb21EZXZpY2UuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQThBNDc0MTQxNTFBODI1QjAwNDEyM0ZGIC8qIFJhbmRvbU51bWJlci5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQk1MzUzNEYyQTFFQzBFMTBFMDAxNDFCMkYgLyogTWFjaEV4Y2VwdGlvbnMu
ZGVmcyBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDFBMTUxQTgyNUIwMDQxMjNGRiAvKiBSZWZD
b3VudGVkTGVha0NvdW50ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkNERUQwRjMxODExNUM4
NTAwNERCQTcwIC8qIFJ1bkxvb3AuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkNERUQwRUYxODEx
NUMzODAwNERCQTcwIC8qIFJ1bkxvb3BDRi5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmggYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCmlu
ZGV4IDY4NTRhODFlMzk3MjcwNjcwMzRkMDVkYjM5OGE0NzBjMTQyODQyNzYuLjM2Mzg4Mzk1ZDRm
NDNiNDY1Mzg5ZWJjOTgwMmZiYjRkOTBkMjRiN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3Rm
L1BsYXRmb3JtLmgKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaApAQCAtNjYzLDYgKzY2
MywxMCBAQAogI2RlZmluZSBIQVZFX1JFQURMSU5FIDEKICNkZWZpbmUgSEFWRV9TWVNfVElNRUJf
SCAxCiAKKyNpZiBfX2hhc19pbmNsdWRlKDxtYWNoL21hY2hfZXhjLmRlZnM+KSAmJiAhKFBMQVRG
T1JNKFdBVENIT1MpIHx8IFBMQVRGT1JNKEFQUExFVFYpKQorI2RlZmluZSBIQVZFX01BQ0hfRVhD
RVBUSU9OUyAxCisjZW5kaWYKKwogI2lmICFQTEFURk9STShHVEspCiAjZGVmaW5lIFVTRV9BQ0NF
TEVSQVRFIDEKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1SZWdp
c3RlcnMuaCBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtUmVnaXN0ZXJzLmgKaW5kZXggZDViNWFi
YzIyMWJiYWQ4Mjk3NjE5M2VjZTUxYzFjNzYxNzVkYjA2ZC4uODRiZDg5Mzc0OTlkYTk5ZWFhODZi
NzM2OTVmN2M1YjgxYWMyNjBjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1S
ZWdpc3RlcnMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVJlZ2lzdGVycy5oCkBAIC0y
Niw5ICsyNiwxMSBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4K
KyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKICNpZiBPUyhEQVJXSU4pCiAjaW5jbHVk
ZSA8bWFjaC90aHJlYWRfYWN0Lmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CiAjZWxpZiBPUyhXSU5E
T1dTKQogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNlbHNlCkBAIC01NSw2ICs1NywxMSBAQCB0eXBl
ZGVmIGFybV90aHJlYWRfc3RhdGU2NF90IFBsYXRmb3JtUmVnaXN0ZXJzOwogI2Vycm9yIFVua25v
d24gQXJjaGl0ZWN0dXJlCiAjZW5kaWYKIAoraW5saW5lIFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdp
c3RlcnNGcm9tVUNvbnRleHQodWNvbnRleHRfdCogdWNvbnRleHQpCit7CisgICAgcmV0dXJuIHVj
b250ZXh0LT51Y19tY29udGV4dC0+X19zczsKK30KKwogI2VsaWYgT1MoV0lORE9XUykKIAogdXNp
bmcgUGxhdGZvcm1SZWdpc3RlcnMgPSBDT05URVhUOwpAQCAtNjUsNiArNzIsMTEgQEAgc3RydWN0
IFBsYXRmb3JtUmVnaXN0ZXJzIHsKICAgICBtY29udGV4dF90IG1hY2hpbmVDb250ZXh0OwogfTsK
IAoraW5saW5lIFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnNGcm9tVUNvbnRleHQodWNvbnRl
eHRfdCogdWNvbnRleHQpCit7CisgICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8UGxhdGZvcm1SZWdp
c3RlcnMqPigmdWNvbnRleHQtPnVjX21jb250ZXh0KTsKK30KKwogI2Vsc2UKIAogc3RydWN0IFBs
YXRmb3JtUmVnaXN0ZXJzIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1N0YWNrQm91bmRz
LmggYi9Tb3VyY2UvV1RGL3d0Zi9TdGFja0JvdW5kcy5oCmluZGV4IDU1NDYwNGYyYWI0ODRjN2Nm
NzFlZTM4NjMwY2ViNGM3OWMzM2U5NzIuLmNkNjJjMTQ4YTZjN2VmYzk1MTdhOGIwOWI4YTMyYzdm
ZTE5MGNkZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1N0YWNrQm91bmRzLmgKKysrIGIv
U291cmNlL1dURi93dGYvU3RhY2tCb3VuZHMuaApAQCAtNTQsNyArNTQsNiBAQCBwdWJsaWM6CiAg
ICAgICAgIDogbV9vcmlnaW4ob3JpZ2luKQogICAgICAgICAsIG1fYm91bmQoZW5kKQogICAgIHsK
LSAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIH0KIAogICAgIHZvaWQqIG9yaWdpbigp
IGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXIuY3BwIGIvU291
cmNlL1dURi93dGYvVGhyZWFkSG9sZGVyLmNwcAppbmRleCAzMGIyMjdjZGI4YWM1MjYwNzUwYjQ3
ZDQ4MmFiYzJkNTViZTNhYzk0Li45NmQ5MWI1Yjg3ZGRmOTc4ODA1ZGI2ZWIxZjYwZGMwMGUxNDlh
NDg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXIuY3BwCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlci5jcHAKQEAgLTM0LDEyICszNCwxNyBAQAogCiAjaW5j
bHVkZSAiVGhyZWFkaW5nLmgiCiAKKyNpbmNsdWRlIDx3dGYvdGhyZWFkcy9TaWduYWxzLmg+CisK
IG5hbWVzcGFjZSBXVEYgewogCiBUaHJlYWRTcGVjaWZpY0tleSBUaHJlYWRIb2xkZXI6Om1fa2V5
ID0gSW52YWxpZFRocmVhZFNwZWNpZmljS2V5OwogCiBUaHJlYWRIb2xkZXI6On5UaHJlYWRIb2xk
ZXIoKQogeworI2lmIEhBVkUoTUFDSF9FWENFUFRJT05TKQorICAgIHJlbW92ZVRocmVhZCgmbV90
aHJlYWQuZ2V0KCkpOworI2VuZGlmCiAgICAgbV90aHJlYWQtPmRpZEV4aXQoKTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5jcHAgYi9Tb3VyY2UvV1RGL3d0
Zi9UaHJlYWRNZXNzYWdlLmNwcAppbmRleCBmMTRiYzQ1ZDM2MTRjN2M2NjM1ZWIxN2FiMGUyNzI4
MTZhMTM3M2RkLi4wNWIzYjg5ZDVkZDRiM2Q4ZTQzN2Q1MmJhOTMwYTkzMDczYjEzOGIyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRNZXNzYWdlLmNwcAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi9UaHJlYWRNZXNzYWdlLmNwcApAQCAtMzYsNiArMzYsOSBAQAogI2luY2x1ZGUgPHd0Zi9M
b2NrZXIuaD4KICNpbmNsdWRlIDx3dGYvdGhyZWFkcy9TaWduYWxzLmg+CiAKKyNpZiBIQVZFKE1B
Q0hfRVhDRVBUSU9OUykKKyNpbmNsdWRlIDxtYWNoL3RocmVhZF9hY3QuaD4KKyNlbmRpZgogCiBu
YW1lc3BhY2UgV1RGIHsKIApAQCAtODMsMTIgKzg2LDEyIEBAIHZvaWQgaW5pdGlhbGl6ZVRocmVh
ZE1lc3NhZ2VzKCkKIH0KIAogU1VQUFJFU1NfQVNBTgotTWVzc2FnZVN0YXR1cyBzZW5kTWVzc2Fn
ZVNjb3BlZChUaHJlYWQmIHRocmVhZCwgY29uc3QgVGhyZWFkTWVzc2FnZSYgbWVzc2FnZSkKK3N0
YXRpYyBNZXNzYWdlU3RhdHVzIHNlbmRNZXNzYWdlU2lnbmFsKFRocmVhZCYgdGhyZWFkLCBjb25z
dCBUaHJlYWRNZXNzYWdlJiBtZXNzYWdlKQogewogICAgIGNvbnN0ZXhwciBTaWduYWwgc2lnbmFs
ID0gU2lnbmFsOjpVc3I7CiAgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2U7CiAgICAgc3Rk
OjpjYWxsX29uY2Uob25jZSwgW10gewotICAgICAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihzaWdu
YWwsIFtdIChpbnQsIHNpZ2luZm9fdCogaW5mbywgdm9pZCogdWFwKSB7CisgICAgICAgIGluc3Rh
bGxTaWduYWxIYW5kbGVyKHNpZ25hbCwgW10gKFNpZ25hbCwgU2lnSW5mbyYsIFBsYXRmb3JtUmVn
aXN0ZXJzJiBjb250ZXh0KSB7CiAgICAgICAgICAgICBUaHJlYWQqIHRocmVhZCA9IFRocmVhZDo6
Y3VycmVudE1heUJlTnVsbCgpOwogCiAgICAgICAgICAgICBpZiAoIXRocmVhZCkgewpAQCAtOTgs
NyArMTAxLDcgQEAgTWVzc2FnZVN0YXR1cyBzZW5kTWVzc2FnZVNjb3BlZChUaHJlYWQmIHRocmVh
ZCwgY29uc3QgVGhyZWFkTWVzc2FnZSYgbWVzc2FnZSkKIAogICAgICAgICAgICAgLy8gTm9kZSBz
aG91bGQgYmUgZGVsZXRlZCBpbiB0aGUgc2VuZGVyIHRocmVhZC4gRGVsZXRpbmcgTm9kZXMgaW4g
c2lnbmFsIGhhbmRsZXIgY2F1c2VzIGRlYWQgbG9jay4KICAgICAgICAgICAgIHRocmVhZC0+dGhy
ZWFkTWVzc2FnZXMoKS5jb25zdW1lQWxsV2l0aE5vZGUoWyZdIChUaHJlYWRNZXNzYWdlRGF0YSog
ZGF0YSwgTm9kZSogbm9kZSkgewotICAgICAgICAgICAgICAgIGRhdGEtPm1lc3NhZ2UoaW5mbywg
c3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+KHVhcCkpOworICAgICAgICAgICAgICAgIGRhdGEtPm1l
c3NhZ2UoY29udGV4dCk7CiAgICAgICAgICAgICAgICAgLy8gQnkgc2V0dGluZyByYW4gdmFyaWFi
bGUsICgxKSB0aGUgc2VuZGVyIGFja25vd2xlZGdlcyB0aGUgY29tcGxldGlvbiBhbmQKICAgICAg
ICAgICAgICAgICAvLyAoMikgZ2V0cyB0aGUgTm9kZSB0byBiZSBkZWxldGVkLgogICAgICAgICAg
ICAgICAgIGRhdGEtPnJhbi5zdG9yZShub2RlKTsKQEAgLTE1Niw2ICsxNTksNjAgQEAgTWVzc2Fn
ZVN0YXR1cyBzZW5kTWVzc2FnZVNjb3BlZChUaHJlYWQmIHRocmVhZCwgY29uc3QgVGhyZWFkTWVz
c2FnZSYgbWVzc2FnZSkKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCisj
aWYgSEFWRShNQUNIX0VYQ0VQVElPTlMpCitzdGF0aWMgTWVzc2FnZVN0YXR1cyBzZW5kTWVzc2Fn
ZU1hY2goVGhyZWFkJiB0aHJlYWQsIGNvbnN0IFRocmVhZE1lc3NhZ2UmIG1lc3NhZ2UpCit7Cisg
ICAgc3RhdGljIFN0YXRpY0xvY2sgbWVzc2FnZUxvY2s7CisgICAgYXV0byBsb2NraG9sZGVyID0g
aG9sZExvY2sobWVzc2FnZUxvY2spOworCisgICAgYXV0byByZXN1bHQgPSB0aHJlYWQuc3VzcGVu
ZCgpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gTWVzc2FnZVN0YXR1czo6VGhy
ZWFkRXhpdGVkOworCisjaWYgQ1BVKFg4NikKKyAgICB1bnNpZ25lZCB1c2VyQ291bnQgPSBzaXpl
b2YoUGxhdGZvcm1SZWdpc3RlcnMpIC8gc2l6ZW9mKGludCk7CisgICAgdGhyZWFkX3N0YXRlX2Zs
YXZvcl90IGZsYXZvciA9IGkzODZfVEhSRUFEX1NUQVRFOworI2VsaWYgQ1BVKFg4Nl82NCkKKyAg
ICB1bnNpZ25lZCB1c2VyQ291bnQgPSB4ODZfVEhSRUFEX1NUQVRFNjRfQ09VTlQ7CisgICAgdGhy
ZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IHg4Nl9USFJFQURfU1RBVEU2NDsKKyNlbGlmIENQ
VShBUk0pCisgICAgdW5zaWduZWQgdXNlckNvdW50ID0gQVJNX1RIUkVBRF9TVEFURV9DT1VOVDsK
KyAgICB0aHJlYWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9yID0gQVJNX1RIUkVBRF9TVEFURTsKKyNl
bGlmIENQVShBUk02NCkKKyAgICB1bnNpZ25lZCB1c2VyQ291bnQgPSBBUk1fVEhSRUFEX1NUQVRF
NjRfQ09VTlQ7CisgICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IEFSTV9USFJFQURf
U1RBVEU2NDsKKyNlbHNlCisjZXJyb3IgVW5rbm93biBBcmNoaXRlY3R1cmUKKyNlbmRpZgorCisg
ICAgUGxhdGZvcm1SZWdpc3RlcnMgcmVnaXN0ZXJzOworICAgIHRocmVhZF9zdGF0ZV90IHN0YXRl
ID0gcmVpbnRlcnByZXRfY2FzdDx0aHJlYWRfc3RhdGVfdD4oJnJlZ2lzdGVycyk7CisgICAgdGhy
ZWFkX2dldF9zdGF0ZSh0aHJlYWQubWFjaFRocmVhZCgpLCBmbGF2b3IsIHN0YXRlLCAmdXNlckNv
dW50KTsKKworICAgIG1lc3NhZ2UocmVnaXN0ZXJzKTsKKworICAgIHRocmVhZF9zZXRfc3RhdGUo
dGhyZWFkLm1hY2hUaHJlYWQoKSwgZmxhdm9yLCAodGhyZWFkX3N0YXRlX3QpJnJlZ2lzdGVycywg
dXNlckNvdW50KTsKKworICAgIHRocmVhZC5yZXN1bWUoKTsKKyAgICByZXR1cm4gTWVzc2FnZVN0
YXR1czo6TWVzc2FnZVJhbjsKK30KKworc3RhdGljIGJvb2wgdXNlTWFjaCA9IGZhbHNlOwordm9p
ZCBkZWxpdmVyTWVzc2FnZXNVc2luZ01hY2goKSB7IHVzZU1hY2ggPSB0cnVlOyB9CisKKyNlbmRp
ZiAvLyBIQVZFKE1BQ0hfRVhDRVBUSU9OUykKKworTWVzc2FnZVN0YXR1cyBzZW5kTWVzc2FnZVNj
b3BlZChUaHJlYWQmIHRocmVhZCwgY29uc3QgVGhyZWFkTWVzc2FnZSYgbWVzc2FnZSkKK3sKKyNp
ZiBIQVZFKE1BQ0hfRVhDRVBUSU9OUykKKyAgICBpZiAodXNlTWFjaCkKKyAgICAgICAgcmV0dXJu
IHNlbmRNZXNzYWdlTWFjaCh0aHJlYWQsIG1lc3NhZ2UpOworI2VuZGlmCisgICAgcmV0dXJuIHNl
bmRNZXNzYWdlU2lnbmFsKHRocmVhZCwgbWVzc2FnZSk7CisgICAgcmV0dXJuIE1lc3NhZ2VTdGF0
dXM6OlRocmVhZEV4aXRlZDsKK30KKworCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogI2VuZGlmIC8v
IFVTRShQVEhSRUFEUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZE1lc3NhZ2Uu
aCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZE1lc3NhZ2UuaAppbmRleCA5YWU1M2YyOWNmN2U4ZmIw
MGVmOTIxMWQxNmNlMmNkZWQ2MDNlYzFiLi4zMDA0NzJiM2U3MWM0MmVjODk4NzRhM2RlMGZmMzc2
MWNhOTY5MTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRNZXNzYWdlLmgKKysr
IGIvU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5oCkBAIC0zNiw3ICszNiw3IEBAIG5hbWVz
cGFjZSBXVEYgewogdm9pZCBpbml0aWFsaXplVGhyZWFkTWVzc2FnZXMoKTsKIAogY2xhc3MgVGhy
ZWFkTWVzc2FnZURhdGE7Ci11c2luZyBUaHJlYWRNZXNzYWdlID0gU2NvcGVkTGFtYmRhPHZvaWQo
c2lnaW5mb190KiwgdWNvbnRleHRfdCopPjsKK3VzaW5nIFRocmVhZE1lc3NhZ2UgPSBTY29wZWRM
YW1iZGE8dm9pZChQbGF0Zm9ybVJlZ2lzdGVycyYpPjsKIAogZW51bSBjbGFzcyBNZXNzYWdlU3Rh
dHVzIHsKICAgICBNZXNzYWdlUmFuLApAQCAtNTEsMTAgKzUxLDE0IEBAIE1lc3NhZ2VTdGF0dXMg
c2VuZE1lc3NhZ2VTY29wZWQoVGhyZWFkJiwgY29uc3QgVGhyZWFkTWVzc2FnZSYpOwogdGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4KIE1lc3NhZ2VTdGF0dXMgc2VuZE1lc3NhZ2UoVGhyZWFkJiB0
YXJnZXRUaHJlYWQsIGNvbnN0IEZ1bmN0b3ImIGZ1bmMpCiB7Ci0gICAgYXV0byBsYW1iZGEgPSBz
Y29wZWRMYW1iZGFSZWY8dm9pZChzaWdpbmZvX3QqLCB1Y29udGV4dF90Kik+KGZ1bmMpOworICAg
IGF1dG8gbGFtYmRhID0gc2NvcGVkTGFtYmRhUmVmPHZvaWQoUGxhdGZvcm1SZWdpc3RlcnMmKT4o
ZnVuYyk7CiAgICAgcmV0dXJuIHNlbmRNZXNzYWdlU2NvcGVkKHRhcmdldFRocmVhZCwgbGFtYmRh
KTsKIH0KIAorI2lmIEhBVkUoTUFDSF9FWENFUFRJT05TKQordm9pZCBkZWxpdmVyTWVzc2FnZXNV
c2luZ01hY2goKTsKKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjpz
ZW5kTWVzc2FnZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5oIGIvU291
cmNlL1dURi93dGYvVGhyZWFkaW5nLmgKaW5kZXggZDJlNTM2ZGY3YTg2OTZkOGU2Yjk1YmE0M2Ux
NzNkM2I1NTBiZjE2YS4uMzUxNGU4YzA5ZjBmYzk0ZDUzNGJlMmYzYjZlN2M0OTUwZTBiY2YwNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmgKKysrIGIvU291cmNlL1dURi93
dGYvVGhyZWFkaW5nLmgKQEAgLTEzOCw2ICsxMzgsMTAgQEAgcHVibGljOgogCiAjaWYgVVNFKFBU
SFJFQURTKQogICAgIExvY2tsZXNzQmFnPFRocmVhZE1lc3NhZ2VEYXRhKj4mIHRocmVhZE1lc3Nh
Z2VzKCkgeyByZXR1cm4gbV90aHJlYWRNZXNzYWdlczsgfQorCisjaWYgT1MoREFSV0lOKQorICAg
IG1hY2hfcG9ydF90IG1hY2hUaHJlYWQoKSB7IHJldHVybiBtX3BsYXRmb3JtVGhyZWFkOyB9Cisj
ZW5kaWYKICNlbmRpZgogCiBwcm90ZWN0ZWQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9t
YWMvTWFjaEV4Y2VwdGlvbnMuZGVmcyBiL1NvdXJjZS9XVEYvd3RmL21hYy9NYWNoRXhjZXB0aW9u
cy5kZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjQyMDU3NDJhNGVkNTAwZjgwNjRmZWViNDk1NWE3Yzk3MGQ5OWFm
MGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9tYWMvTWFjaEV4Y2VwdGlvbnMu
ZGVmcwpAQCAtMCwwICsxLDI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgPG1hY2gvbWFjaF9leGMuZGVmcz4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL3RocmVhZHMvU2lnbmFscy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi90aHJlYWRz
L1NpZ25hbHMuY3BwCmluZGV4IDg1NWIyOGIzMTcyMTcyN2NmMWY0MzFhOTE4YTI1MWRjMmU2YTNk
ZmMuLmY2YjhhNDk5YjRkYzlkNWRmMWFjMDVlOTg2NTg4Njc4ZjE3ZjQxZjcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL3RocmVhZHMvU2lnbmFscy5jcHAKKysrIGIvU291cmNlL1dURi93dGYv
dGhyZWFkcy9TaWduYWxzLmNwcApAQCAtMjgsMjEgKzI4LDI2MiBAQAogCiAjaWYgVVNFKFBUSFJF
QURTKQogCisjaWYgSEFWRShNQUNIX0VYQ0VQVElPTlMpCitleHRlcm4gIkMiIHsKKyNpbmNsdWRl
ICJNYWNoRXhjZXB0aW9uc1NlcnZlci5oIgorfTsKKyNlbmRpZgorCiAjaW5jbHVkZSA8Y3N0ZGlv
PgogI2luY2x1ZGUgPG11dGV4PgogI2luY2x1ZGUgPHNpZ25hbC5oPgorCisjaWYgSEFWRShNQUNI
X0VYQ0VQVElPTlMpCisjaW5jbHVkZSA8bWFjaC9tYWNoLmg+CisjaW5jbHVkZSA8bWFjaC90aHJl
YWRfYWN0Lmg+CisjZW5kaWYKKwogI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CiAjaW5jbHVkZSA8
d3RmL0RhdGFMb2cuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9M
b2NrbGVzc0JhZy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUg
PHd0Zi9UaHJlYWRNZXNzYWdlLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCiAKIG5h
bWVzcGFjZSBXVEYgewogCisgICAgCiBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPExvY2tsZXNz
QmFnPFNpZ25hbEhhbmRsZXI+PiBoYW5kbGVyc1tzdGF0aWNfY2FzdDxzaXplX3Q+KFNpZ25hbDo6
TnVtYmVyT2ZTaWduYWxzKV0gPSB7IH07Ci1zdGF0aWMgc3RydWN0IHNpZ2FjdGlvbiBvbGRBY3Rp
b25zW3N0YXRpY19jYXN0PHNpemVfdD4oU2lnbmFsOjpOdW1iZXJPZlNpZ25hbHMpXTsKIHN0YXRp
YyBzdGQ6Om9uY2VfZmxhZyBpbml0aWFsaXplT25jZUZsYWdzW3N0YXRpY19jYXN0PHNpemVfdD4o
U2lnbmFsOjpOdW1iZXJPZlNpZ25hbHMpXTsKK3N0YXRpYyBzdHJ1Y3Qgc2lnYWN0aW9uIG9sZEFj
dGlvbnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihTaWduYWw6Ok51bWJlck9mU2lnbmFscyldOworCisj
aWYgSEFWRShNQUNIX0VYQ0VQVElPTlMpCitzdGF0aWMgbWFjaF9wb3J0X3QgZXhjZXB0aW9uUG9y
dDsKK3N0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG1heE1lc3NhZ2VTaXplID0gMSAqIEtCOworCitz
dGF0aWMgdm9pZCBzdGFydE1hY2hFeGNlcHRpb25IYW5kbGVyVGhyZWFkKCkKK3sKKyAgICBzdGF0
aWMgc3RkOjpvbmNlX2ZsYWcgb25jZTsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlLCBbXSB7Cisg
ICAgICAgIGlmIChtYWNoX3BvcnRfYWxsb2NhdGUobWFjaF90YXNrX3NlbGYoKSwgTUFDSF9QT1JU
X1JJR0hUX1JFQ0VJVkUsICZleGNlcHRpb25Qb3J0KSAhPSBLRVJOX1NVQ0NFU1MpCisgICAgICAg
ICAgICBDUkFTSCgpOworCisgICAgICAgIGlmIChtYWNoX3BvcnRfaW5zZXJ0X3JpZ2h0KG1hY2hf
dGFza19zZWxmKCksIGV4Y2VwdGlvblBvcnQsIGV4Y2VwdGlvblBvcnQsIE1BQ0hfTVNHX1RZUEVf
TUFLRV9TRU5EKSE9IEtFUk5fU1VDQ0VTUykKKyAgICAgICAgICAgIENSQVNIKCk7CisKKyAgICAg
ICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBhIGRpc3BhdGNoIHF1ZXVlLgorICAgICAgICAo
dm9pZClUaHJlYWQ6OmNyZWF0ZSgKKyAgICAgICAgICAgICJXVEYgTWFjaCBFeGNlcHRpb24gVGhy
ZWFkIiwgW10gKCkgeworICAgICAgICAgICAgICAgIHVuaW9uIE1lc3NhZ2UgeworICAgICAgICAg
ICAgICAgICAgICBtYWNoX21zZ19oZWFkZXJfdCBoZWFkZXI7CisgICAgICAgICAgICAgICAgICAg
IGNoYXIgZGF0YVttYXhNZXNzYWdlU2l6ZV07CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAg
ICAgICAgICBNZXNzYWdlIG1lc3NhZ2VIZWFkZXJJbjsKKyAgICAgICAgICAgICAgICBNZXNzYWdl
IG1lc3NhZ2VIZWFkZXJPdXQ7CisKKyAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAg
ICAgICAgICAgICAgICAgICBrZXJuX3JldHVybl90IG1lc3NhZ2VSZXN1bHQgPSBtYWNoX21zZygm
bWVzc2FnZUhlYWRlckluLmhlYWRlciwgTUFDSF9SQ1ZfTVNHLCAwLCBtYXhNZXNzYWdlU2l6ZSwg
ZXhjZXB0aW9uUG9ydCwgTUFDSF9NU0dfVElNRU9VVF9OT05FLCBNQUNIX1BPUlRfTlVMTCk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlUmVzdWx0ID09IEtFUk5fU1VDQ0VTUykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtYWNoX2V4Y19zZXJ2ZXIoJm1lc3NhZ2VIZWFk
ZXJJbi5oZWFkZXIsICZtZXNzYWdlSGVhZGVyT3V0LmhlYWRlcikpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ1JBU0goKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZVJl
c3VsdCA9IG1hY2hfbXNnKCZtZXNzYWdlSGVhZGVyT3V0LmhlYWRlciwgTUFDSF9TRU5EX01TRywg
bWVzc2FnZUhlYWRlck91dC5oZWFkZXIubXNnaF9zaXplLCAwLCBtZXNzYWdlSGVhZGVyT3V0Lmhl
YWRlci5tc2doX2xvY2FsX3BvcnQsIDAsIE1BQ0hfUE9SVF9OVUxMKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1lc3NhZ2VSZXN1bHQgPT0gS0VSTl9TVUNDRVNTKTsK
KyAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nTG4oIkZhaWxlZCB0byByZWNlaXZlIG1hY2ggbWVzc2FnZSBkdWUgdG8gIiwgbWFjaF9lcnJv
cl9zdHJpbmcobWVzc2FnZVJlc3VsdCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfSku
bGVha1JlZigpOworICAgIH0pOworfQorCitzdGF0aWMgU2lnbmFsIGZyb21NYWNoRXhjZXB0aW9u
KGV4Y2VwdGlvbl90eXBlX3QgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNl
IEVYQ19CQURfQUNDRVNTOiByZXR1cm4gU2lnbmFsOjpTZWdWOworICAgIGNhc2UgRVhDX0JBRF9J
TlNUUlVDVElPTjogcmV0dXJuIFNpZ25hbDo6SWxsOworICAgIGNhc2UgRVhDX0JSRUFLUE9JTlQ6
IHJldHVybiBTaWduYWw6OlRyYXA7CisgICAgZGVmYXVsdDogYnJlYWs7CisgICAgfQorICAgIHJl
dHVybiBTaWduYWw6OlVua25vd247Cit9CisKK3N0YXRpYyBleGNlcHRpb25fbWFza190IHRvTWFj
aE1hc2soU2lnbmFsIHNpZ25hbCkKK3sKKyAgICBzd2l0Y2ggKHNpZ25hbCkgeworICAgIGNhc2Ug
U2lnbmFsOjpTZWdWOiByZXR1cm4gRVhDX01BU0tfQkFEX0FDQ0VTUzsKKyAgICBjYXNlIFNpZ25h
bDo6SWxsOiByZXR1cm4gRVhDX01BU0tfQkFEX0lOU1RSVUNUSU9OOworICAgIGNhc2UgU2lnbmFs
OjpUcmFwOiByZXR1cm4gRVhDX01BU0tfQlJFQUtQT0lOVDsKKyAgICBkZWZhdWx0OiBicmVhazsK
KyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworZXh0ZXJuICJD
IiB7CisKKy8vIFdlIG5lZWQgdG8gaW1wbGVtZW50IHN0dWJzIGZvciBjYXRjaF9tYWNoX2V4Y2Vw
dGlvbl9yYWlzZSBhbmQgY2F0Y2hfbWFjaF9leGNlcHRpb25fcmFpc2Vfc3RhdGVfaWRlbnRpdHku
CisvLyBUaGUgTWlHIGdlbmVyYXRlZCBmaWxlIHdpbGwgZmFpbCB0byBsaW5rIG90aGVyd2lzZSwg
ZXZlbiB0aG91Z2ggd2UgZG9uJ3QgdXNlIHRoZSBmdW5jdGlvbnMuIE9ubHkgdGhlCisvLyBjYXRj
aF9tYWNoX2V4Y2VwdGlvbl9yYWlzZV9zdGF0ZSBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGJl
Y2F1c2Ugd2UgcGFzcyBFWENFUFRJT05fU1RBVEUgdG8KKy8vIHRocmVhZF9zZXRfZXhjZXB0aW9u
X3BvcnRzLgora2Vybl9yZXR1cm5fdCBjYXRjaF9tYWNoX2V4Y2VwdGlvbl9yYWlzZShtYWNoX3Bv
cnRfdCwgbWFjaF9wb3J0X3QsIG1hY2hfcG9ydF90LCBleGNlcHRpb25fdHlwZV90LCBtYWNoX2V4
Y2VwdGlvbl9kYXRhX3QsIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QpCit7CisgICAgZGF0YUxvZ0xu
KCJXZSBzaG91bGQgbm90IGhhdmUgY2FsbGVkIGNhdGNoX2V4Y2VwdGlvbl9yYWlzZSgpLCBwbGVh
c2UgZmlsZSBhIGJ1ZyBhdCBidWdzLndlYmtpdC5vcmciKTsKKyAgICByZXR1cm4gS0VSTl9GQUlM
VVJFOworfQorCitrZXJuX3JldHVybl90IGNhdGNoX21hY2hfZXhjZXB0aW9uX3JhaXNlX3N0YXRl
X2lkZW50aXR5KG1hY2hfcG9ydF90LCBtYWNoX3BvcnRfdCwgbWFjaF9wb3J0X3QsIGV4Y2VwdGlv
bl90eXBlX3QsIG1hY2hfZXhjZXB0aW9uX2RhdGFfdCwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCwg
aW50KiwgdGhyZWFkX3N0YXRlX3QsIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QsIHRocmVhZF9zdGF0
ZV90LCAgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCopCit7CisgICAgZGF0YUxvZ0xuKCJXZSBzaG91
bGQgbm90IGhhdmUgY2FsbGVkIGNhdGNoX21hY2hfZXhjZXB0aW9uX3JhaXNlX3N0YXRlX2lkZW50
aXR5LCBwbGVhc2UgZmlsZSBhIGJ1ZyBhdCBidWdzLndlYmtpdC5vcmciKTsKKyAgICByZXR1cm4g
S0VSTl9GQUlMVVJFOworfQorCitrZXJuX3JldHVybl90IGNhdGNoX21hY2hfZXhjZXB0aW9uX3Jh
aXNlX3N0YXRlKAorICAgIG1hY2hfcG9ydF90IHBvcnQsCisgICAgZXhjZXB0aW9uX3R5cGVfdCBl
eGNlcHRpb25UeXBlLAorICAgIGNvbnN0IG1hY2hfZXhjZXB0aW9uX2RhdGFfdCBleGNlcHRpb25E
YXRhLAorICAgIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QgZGF0YUNvdW50LAorICAgIGludCogc3Rh
dGVGbGF2b3IsCisgICAgY29uc3QgdGhyZWFkX3N0YXRlX3QgaW5TdGF0ZSwKKyAgICBtYWNoX21z
Z190eXBlX251bWJlcl90IGluU3RhdGVDb3VudCwKKyAgICB0aHJlYWRfc3RhdGVfdCBvdXRTdGF0
ZSwKKyAgICBtYWNoX21zZ190eXBlX251bWJlcl90KiBvdXRTdGF0ZUNvdW50KQoreworICAgIFJF
TEVBU0VfQVNTRVJUKHBvcnQgPT0gZXhjZXB0aW9uUG9ydCk7CisgICAgU2lnbmFsIHNpZ25hbCA9
IGZyb21NYWNoRXhjZXB0aW9uKGV4Y2VwdGlvblR5cGUpOworICAgIGRhdGFMb2dMbigicmVjZWl2
ZWRTaWduYWwgIiwgZXhjZXB0aW9uVHlwZSk7CisgICAgZGF0YUxvZ0xuKCJUaHJlYWQ6ICIsIGV4
Y2VwdGlvbkRhdGFbMF0pOworICAgIFJFTEVBU0VfQVNTRVJUKHNpZ25hbCAhPSBTaWduYWw6OlVu
a25vd24pOworCisgICAgbWVtY3B5KG91dFN0YXRlLCBpblN0YXRlLCBpblN0YXRlQ291bnQgKiBz
aXplb2YoaW5TdGF0ZVswXSkpOworICAgICpvdXRTdGF0ZUNvdW50ID0gaW5TdGF0ZUNvdW50Owor
CisjaWYgQ1BVKFg4Nl82NCkKKyAgICBSRUxFQVNFX0FTU0VSVCgqc3RhdGVGbGF2b3IgPT0geDg2
X1RIUkVBRF9TVEFURSk7CisgICAgUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVycyA9IHJlaW50
ZXJwcmV0X2Nhc3Q8eDg2X3RocmVhZF9zdGF0ZV90Kj4ob3V0U3RhdGUpLT51dHMudHM2NDsKKyNl
bGlmIENQVShYODYpCisgICAgUkVMRUFTRV9BU1NFUlQoKnN0YXRlRmxhdm9yID09IHg4Nl9USFJF
QURfU1RBVEUpOworICAgIFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMgPSByZWludGVycHJl
dF9jYXN0PHg4Nl90aHJlYWRfc3RhdGVfdCo+KG91dFN0YXRlKS0+dXRzLnRzMzI7CisjZWxpZiBD
UFUoQVJNNjQpCisgICAgUkVMRUFTRV9BU1NFUlQoKnN0YXRlRmxhdm9yID09IEFSTV9USFJFQURf
U1RBVEUpOworICAgIFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMgPSByZWludGVycHJldF9j
YXN0PGFybV91bmlmaWVkX3RocmVhZF9zdGF0ZSo+KG91dFN0YXRlKS0+dHNfNjQ7CisjZWxpZiBD
UFUoQVJNKQorICAgIFJFTEVBU0VfQVNTRVJUKCpzdGF0ZUZsYXZvciA9PSBBUk1fVEhSRUFEX1NU
QVRFKTsKKyAgICBQbGF0Zm9ybVJlZ2lzdGVycyYgcmVnaXN0ZXJzID0gcmVpbnRlcnByZXRfY2Fz
dDxhcm1fdW5pZmllZF90aHJlYWRfc3RhdGUqPihvdXRTdGF0ZSktPnRzXzMyOworI2VuZGlmCisK
KyAgICBTaWdJbmZvIGluZm87CisgICAgaWYgKHNpZ25hbCA9PSBTaWduYWw6OlNlZ1YpIHsKKyAg
ICAgICAgQVNTRVJUX1VOVVNFRChkYXRhQ291bnQsIGRhdGFDb3VudCA9PSAyKTsKKyAgICAgICAg
aW5mby5mYXVsdGluZ0FkZHJlc3MgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihleGNlcHRpb25E
YXRhWzFdKTsKKyAgICB9CisKKyAgICBib29sIGRpZEhhbmRsZSA9IGZhbHNlOworICAgIGhhbmRs
ZXJzW3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0tPml0ZXJhdGUoWyZdIChjb25zdCBTaWdu
YWxIYW5kbGVyJiBoYW5kbGVyKSB7CisgICAgICAgIFNpZ25hbEFjdGlvbiBoYW5kbGVyUmVzdWx0
ID0gaGFuZGxlcihzaWduYWwsIGluZm8sIHJlZ2lzdGVycyk7CisgICAgICAgIGRhdGFMb2dMbihz
dGF0aWNfY2FzdDxpbnQ+KGhhbmRsZXJSZXN1bHQpKTsKKyAgICAgICAgc3dpdGNoIChoYW5kbGVy
UmVzdWx0KSB7CisgICAgICAgIGNhc2UgU2lnbmFsQWN0aW9uOjpIYW5kbGVkOgorICAgICAgICAg
ICAgZGlkSGFuZGxlID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIGlmIChkaWRI
YW5kbGUpCisgICAgICAgIHJldHVybiBLRVJOX1NVQ0NFU1M7CisgICAgcmV0dXJuIEtFUk5fRkFJ
TFVSRTsKK30KKworfTsKKworc3RhdGljIGJvb2wgdXNlTWFjaCB7IGZhbHNlIH07Cit2b2lkIGhh
bmRsZVNpZ25hbHNXaXRoTWFjaCgpCit7CisgICAgZGVsaXZlck1lc3NhZ2VzVXNpbmdNYWNoKCk7
CisgICAgdXNlTWFjaCA9IHRydWU7Cit9CisKKworc3RhdGljIFN0YXRpY0xvY2sgdGhyZWFkTG9j
azsKK2V4Y2VwdGlvbl9tYXNrX3QgYWN0aXZlRXhjZXB0aW9ucyB7IDAgfTsKKworaW5saW5lIHZv
aWQgc2V0RXhjZXB0aW9uUG9ydHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBUaHJlYWQqIHRocmVh
ZCkKK3sKKyAgICBrZXJuX3JldHVybl90IHJlc3VsdCA9IHRocmVhZF9zZXRfZXhjZXB0aW9uX3Bv
cnRzKHRocmVhZC0+bWFjaFRocmVhZCgpLCBhY3RpdmVFeGNlcHRpb25zLCBleGNlcHRpb25Qb3J0
LCBFWENFUFRJT05fU1RBVEUgfCBNQUNIX0VYQ0VQVElPTl9DT0RFUywgTUFDSElORV9USFJFQURf
U1RBVEUpOworICAgIGlmIChyZXN1bHQgIT0gS0VSTl9TVUNDRVNTKSB7CisgICAgICAgIGRhdGFM
b2dMbigidGhyZWFkIHNldCBwb3J0IGZhaWxlZCBkdWUgdG8gIiwgbWFjaF9lcnJvcl9zdHJpbmco
cmVzdWx0KSk7CisgICAgICAgIENSQVNIKCk7CisgICAgfQorfQorCitpbmxpbmUgSGFzaFNldDxU
aHJlYWQqPiYgYWN0aXZlVGhyZWFkcyhjb25zdCBBYnN0cmFjdExvY2tlciYpCit7CisgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8VGhyZWFkKj4+IGFjdGl2ZVRocmVhZHM7CisgICAg
cmV0dXJuIGFjdGl2ZVRocmVhZHM7Cit9CisKK3ZvaWQgcmVnaXN0ZXJUaHJlYWQoVGhyZWFkKiB0
aHJlYWQpCit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayh0aHJlYWRMb2NrKTsKKyAgICBh
dXRvIHJlc3VsdCA9IGFjdGl2ZVRocmVhZHMobG9ja2VyKS5hZGQodGhyZWFkKTsKKworICAgIGlm
IChyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgc2V0RXhjZXB0aW9uUG9ydHMobG9ja2VyLCB0
aHJlYWQpOworfQorCit2b2lkIHJlbW92ZVRocmVhZChUaHJlYWQqIHRocmVhZCkKK3sKKyAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKHRocmVhZExvY2spOworICAgIGFjdGl2ZVRocmVhZHMobG9j
a2VyKS5yZW1vdmUodGhyZWFkKTsKK30KIAotc3RhdGljIHZvaWQganNjU2lnbmFsSGFuZGxlcihp
bnQgc2lnLCBzaWdpbmZvX3QqIGluZm8sIHZvaWQqIG1jb250ZXh0KQorI2VuZGlmIC8vIEhBVkUo
TUFDSF9FWENFUFRJT05TKQorCitzdGF0aWMgdm9pZCBqc2NTaWduYWxIYW5kbGVyKGludCwgc2ln
aW5mb190Kiwgdm9pZCopOworCit2b2lkIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbCBzaWdu
YWwsIFNpZ25hbEhhbmRsZXImJiBoYW5kbGVyKQoreworICAgIEFTU0VSVChzaWduYWwgPCBTaWdu
YWw6OlVua25vd24pOworI2lmIEhBVkUoTUFDSF9FWENFUFRJT05TKQorICAgIGlmIChzaWduYWwg
PT0gU2lnbmFsOjpCdXMgJiYgIXVzZU1hY2gpCisgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQo
IXVzZU1hY2ggfHwgc2lnbmFsICE9IFNpZ25hbDo6VXNyKTsKKworICAgIGlmICh1c2VNYWNoKQor
ICAgICAgICBzdGFydE1hY2hFeGNlcHRpb25IYW5kbGVyVGhyZWFkKCk7CisjZW5kaWYKKworICAg
IHN0ZDo6Y2FsbF9vbmNlKGluaXRpYWxpemVPbmNlRmxhZ3Nbc3RhdGljX2Nhc3Q8c2l6ZV90Pihz
aWduYWwpXSwgWyZdIHsKKyAgICAgICAgaGFuZGxlcnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzaWdu
YWwpXS5jb25zdHJ1Y3QoKTsKKworICAgICAgICBpZiAoIXVzZU1hY2gpIHsKKyAgICAgICAgICAg
IHN0cnVjdCBzaWdhY3Rpb24gYWN0aW9uOworICAgICAgICAgICAgYWN0aW9uLnNhX3NpZ2FjdGlv
biA9IGpzY1NpZ25hbEhhbmRsZXI7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHNpZ2ZpbGxz
ZXQoJmFjdGlvbi5zYV9tYXNrKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFyZXN1bHQp
OworICAgICAgICAgICAgYWN0aW9uLnNhX2ZsYWdzID0gU0FfU0lHSU5GTzsKKyAgICAgICAgICAg
IHJlc3VsdCA9IHNpZ2FjdGlvbih0b1N5c3RlbVNpZ25hbChzaWduYWwpLCAmYWN0aW9uLCAmb2xk
QWN0aW9uc1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNpZ25hbCldKTsKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKCFyZXN1bHQpOworICAgICAgICB9CisKKyAgICB9KTsKKworICAgIGhhbmRsZXJz
W3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0tPmFkZChXVEZNb3ZlKGhhbmRsZXIpKTsKKwor
I2lmIEhBVkUoTUFDSF9FWENFUFRJT05TKQorICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sodGhy
ZWFkTG9jayk7CisgICAgaWYgKHVzZU1hY2gpIHsKKyAgICAgICAgYWN0aXZlRXhjZXB0aW9ucyB8
PSB0b01hY2hNYXNrKHNpZ25hbCk7CisKKyAgICAgICAgZm9yIChUaHJlYWQqIHRocmVhZCA6IGFj
dGl2ZVRocmVhZHMobG9ja2VyKSkKKyAgICAgICAgICAgIHNldEV4Y2VwdGlvblBvcnRzKGxvY2tl
ciwgdGhyZWFkKTsKKyAgICB9CisjZW5kaWYKK30KKwordm9pZCBqc2NTaWduYWxIYW5kbGVyKGlu
dCBzaWcsIHNpZ2luZm9fdCogaW5mbywgdm9pZCogdWNvbnRleHQpCiB7CiAgICAgU2lnbmFsIHNp
Z25hbCA9IGZyb21TeXN0ZW1TaWduYWwoc2lnKTsKIApAQCAtNjIsMTAgKzMwMywxNiBAQCBzdGF0
aWMgdm9pZCBqc2NTaWduYWxIYW5kbGVyKGludCBzaWcsIHNpZ2luZm9fdCogaW5mbywgdm9pZCog
bWNvbnRleHQpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBTaWdJbmZvIHNpZ0luZm87
CisgICAgaWYgKHNpZ25hbCA9PSBTaWduYWw6OlNlZ1YgfHwgc2lnbmFsID09IFNpZ25hbDo6QnVz
KQorICAgICAgICBzaWdJbmZvLmZhdWx0aW5nQWRkcmVzcyA9IGluZm8tPnNpX2FkZHI7CisKKyAg
ICBQbGF0Zm9ybVJlZ2lzdGVycyYgcmVnaXN0ZXJzID0gcmVnaXN0ZXJzRnJvbVVDb250ZXh0KHJl
aW50ZXJwcmV0X2Nhc3Q8dWNvbnRleHRfdCo+KHVjb250ZXh0KSk7CisKICAgICBib29sIGRpZEhh
bmRsZSA9IGZhbHNlOwogICAgIGJvb2wgcmVzdG9yZURlZmF1bHRIYW5kbGVyID0gZmFsc2U7CiAg
ICAgaGFuZGxlcnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzaWduYWwpXS0+aXRlcmF0ZShbJl0gKGNv
bnN0IFNpZ25hbEhhbmRsZXImIGhhbmRsZXIpIHsKLSAgICAgICAgc3dpdGNoIChoYW5kbGVyKHNp
ZywgaW5mbywgbWNvbnRleHQpKSB7CisgICAgICAgIHN3aXRjaCAoaGFuZGxlcihzaWduYWwsIHNp
Z0luZm8sIHJlZ2lzdGVycykpIHsKICAgICAgICAgY2FzZSBTaWduYWxBY3Rpb246OkhhbmRsZWQ6
CiAgICAgICAgICAgICBkaWRIYW5kbGUgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CkBAIC04
NSwxMyArMzMyLDEzIEBAIHN0YXRpYyB2b2lkIGpzY1NpZ25hbEhhbmRsZXIoaW50IHNpZywgc2ln
aW5mb190KiBpbmZvLCB2b2lkKiBtY29udGV4dCkKICAgICBzdHJ1Y3Qgc2lnYWN0aW9uJiBvbGRB
Y3Rpb24gPSBvbGRBY3Rpb25zW3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV07CiAgICAgaWYg
KHNpZ25hbCA9PSBTaWduYWw6OlVzcikgewogICAgICAgICBpZiAob2xkQWN0aW9uLnNhX3NpZ2Fj
dGlvbikKLSAgICAgICAgICAgIG9sZEFjdGlvbi5zYV9zaWdhY3Rpb24oc2lnLCBpbmZvLCBtY29u
dGV4dCk7CisgICAgICAgICAgICBvbGRBY3Rpb24uc2Ffc2lnYWN0aW9uKHNpZywgaW5mbywgdWNv
bnRleHQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKCFkaWRIYW5kbGUpIHsK
ICAgICAgICAgaWYgKG9sZEFjdGlvbi5zYV9zaWdhY3Rpb24pIHsKLSAgICAgICAgICAgIG9sZEFj
dGlvbi5zYV9zaWdhY3Rpb24oc2lnLCBpbmZvLCBtY29udGV4dCk7CisgICAgICAgICAgICBvbGRB
Y3Rpb24uc2Ffc2lnYWN0aW9uKHNpZywgaW5mbywgdWNvbnRleHQpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAKQEAgLTEwMCwyNCArMzQ3LDYgQEAgc3RhdGljIHZvaWQganNjU2ln
bmFsSGFuZGxlcihpbnQgc2lnLCBzaWdpbmZvX3QqIGluZm8sIHZvaWQqIG1jb250ZXh0KQogICAg
IH0KIH0KIAotdm9pZCBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWwgc2lnbmFsLCBTaWduYWxI
YW5kbGVyJiYgaGFuZGxlcikKLXsKLSAgICBBU1NFUlQoc2lnbmFsIDwgU2lnbmFsOjpVbmtub3du
KTsKLSAgICBzdGQ6OmNhbGxfb25jZShpbml0aWFsaXplT25jZUZsYWdzW3N0YXRpY19jYXN0PHNp
emVfdD4oc2lnbmFsKV0sIFsmXSB7Ci0gICAgICAgIGhhbmRsZXJzW3N0YXRpY19jYXN0PHNpemVf
dD4oc2lnbmFsKV0uY29uc3RydWN0KCk7Ci0KLSAgICAgICAgc3RydWN0IHNpZ2FjdGlvbiBhY3Rp
b247Ci0gICAgICAgIGFjdGlvbi5zYV9zaWdhY3Rpb24gPSBqc2NTaWduYWxIYW5kbGVyOwotICAg
ICAgICBhdXRvIHJlc3VsdCA9IHNpZ2ZpbGxzZXQoJmFjdGlvbi5zYV9tYXNrKTsKLSAgICAgICAg
UkVMRUFTRV9BU1NFUlQoIXJlc3VsdCk7Ci0gICAgICAgIGFjdGlvbi5zYV9mbGFncyA9IFNBX1NJ
R0lORk87Ci0gICAgICAgIHJlc3VsdCA9IHNpZ2FjdGlvbih0b1N5c3RlbVNpZ25hbChzaWduYWwp
LCAmYWN0aW9uLCAmb2xkQWN0aW9uc1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNpZ25hbCldKTsKLSAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoIXJlc3VsdCk7Ci0gICAgfSk7Ci0KLSAgICBoYW5kbGVyc1tz
dGF0aWNfY2FzdDxzaXplX3Q+KHNpZ25hbCldLT5hZGQoV1RGTW92ZShoYW5kbGVyKSk7Ci19Ci0K
IH0gLy8gbmFtZXNwYWNlIFdURgogCiAjZW5kaWYgLy8gVVNFKFBUSFJFQURTKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvdGhyZWFkcy9TaWduYWxzLmggYi9Tb3VyY2UvV1RGL3d0Zi90aHJl
YWRzL1NpZ25hbHMuaAppbmRleCAxZTRlYjQ2ZWFhNzc0YTFlZTg5ZjZmYjJkYWVmMzMyNjhjZTU2
Nzc5Li5hY2E2YjM0ZjgxNmYwMTc2OTMwMDM2YzE4YjgyMWMyN2FiYjBlNjBjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi90aHJlYWRzL1NpZ25hbHMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90
aHJlYWRzL1NpZ25hbHMuaApAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSA8c2lnbmFsLmg+
CiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtUmVnaXN0
ZXJzLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCkBAIC03OSw3ICs4MCwxMSBAQCBlbnVtIGNsYXNz
IFNpZ25hbEFjdGlvbiB7CiAgICAgRm9yY2VEZWZhdWx0CiB9OwogCi11c2luZyBTaWduYWxIYW5k
bGVyID0gRnVuY3Rpb248U2lnbmFsQWN0aW9uKGludCwgc2lnaW5mb190Kiwgdm9pZCopPjsKK3N0
cnVjdCBTaWdJbmZvIHsKKyAgICB2b2lkKiBmYXVsdGluZ0FkZHJlc3MgeyAwIH07Cit9OworCit1
c2luZyBTaWduYWxIYW5kbGVyID0gRnVuY3Rpb248U2lnbmFsQWN0aW9uKFNpZ25hbCwgU2lnSW5m
byYsIFBsYXRmb3JtUmVnaXN0ZXJzJik+OwogCiAvLyBDYWxsIHRoaXMgbWV0aG9kIHdoZW5ldmVy
IHlvdSB3YW50IHRvIGluc3RhbGwgYSBzaWduYWwgaGFuZGxlci4gSXQncyBvayB0byBjYWxsIHRo
aXMgZnVuY3Rpb24gbGF6aWx5LgogLy8gTm90ZTogWW91ciBzaWduYWwgaGFuZGxlciB3aWxsIGJl
IGNhbGxlZCBldmVyeSB0aW1lIHRoZSBoYW5kbGVyIGZvciB0aGUgZGVzaXJlZCBzaWduYWwgaXMg
Y2FsbGVkLgpAQCAtODcsOSArOTIsMTkgQEAgdXNpbmcgU2lnbmFsSGFuZGxlciA9IEZ1bmN0aW9u
PFNpZ25hbEFjdGlvbihpbnQsIHNpZ2luZm9fdCosIHZvaWQqKT47CiAvLyBUaGlzIGZ1bmN0aW9u
IGlzIGN1cnJlbnRseSBhIG9uZSB3YXkgc3RyZWV0IGkuZS4gb25jZSBpbnN0YWxsZWQsIGEgc2ln
bmFsIGhhbmRsZXIgY2Fubm90IGJlIHVuaW5zdGFsbGVkLgogdm9pZCBpbnN0YWxsU2lnbmFsSGFu
ZGxlcihTaWduYWwsIFNpZ25hbEhhbmRsZXImJik7CiAKKworI2lmIEhBVkUoTUFDSF9FWENFUFRJ
T05TKQorY2xhc3MgVGhyZWFkOwordm9pZCByZWdpc3RlclRocmVhZChUaHJlYWQqKTsKK3ZvaWQg
cmVtb3ZlVGhyZWFkKFRocmVhZCopOworCit2b2lkIGhhbmRsZVNpZ25hbHNXaXRoTWFjaCgpOwor
I2VuZGlmIC8vIEhBVkUoTUFDSF9FWENFUFRJT05TKQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAog
dXNpbmcgV1RGOjpTaWduYWw7Cit1c2luZyBXVEY6OlNpZ0luZm87CiB1c2luZyBXVEY6OnRvU3lz
dGVtU2lnbmFsOwogdXNpbmcgV1RGOjpmcm9tU3lzdGVtU2lnbmFsOwogdXNpbmcgV1RGOjpTaWdu
YWxBY3Rpb247CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cK
aW5kZXggMTdmOWYwMTExMzEwMmE4YTRiMTdmY2U0YWYxZDk1ZWI4NjAwNjlkYi4uNmNkYTQ4NDEw
NjVjZTA0YTkxYjhkYjVlMmIyMDI4YzQwZWMwNWE2ZiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdl
TG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDE3LTA1LTExICBL
ZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBNYWNo
IGV4Y2VwdGlvbnMgaW5zdGVhZCBvZiBzaWduYWxzIHdoZXJlIHBvc3NpYmxlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzE4NjUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV1RGL1RocmVhZE1lc3NhZ2VzLmNwcDoKKyAgICAgICAgKHJ1blRocmVhZE1lc3NhZ2VUZXN0
KToKKyAgICAgICAgKFRFU1QpOgorCiAyMDE3LTA1LTA5ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgUmVtb3ZlIHN1cHBvcnQgZm9yIGxlZ2FjeSBOb3RpZmljYXRpb25z
CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9UaHJlYWRNZXNzYWdl
cy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9UaHJlYWRNZXNzYWdlcy5jcHAK
aW5kZXggZDYzZTliZjFlNzUwNjhiNmMxYTdlN2U2ZThiNjdjNGViMDUxNTg4Mi4uZTZhNTc4OTRi
YjUxNmZlMWNlNzEzZDA3YmYxOGYwNzA2ZWZhOTM3YyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XVEYvVGhyZWFkTWVzc2FnZXMuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV1RGL1RocmVhZE1lc3NhZ2VzLmNwcApAQCAtNTAsNyArNTAsNyBAQCBzdGF0
aWMgdm9pZCBydW5UaHJlYWRNZXNzYWdlVGVzdCh1bnNpZ25lZCBudW1TZW5kZXJzLCB1bnNpZ25l
ZCBudW1NZXNzYWdlcykKICAgICBmb3IgKHVuc2lnbmVkIHNlbmRlcklEID0gMDsgc2VuZGVySUQg
PCBudW1TZW5kZXJzOyArK3NlbmRlcklEKSB7CiAgICAgICAgIHNlbmRlclRocmVhZHNbc2VuZGVy
SURdID0gVGhyZWFkOjpjcmVhdGUoIlRocmVhZE1lc3NhZ2Ugc2VuZGVyIiwgW3NlbmRlcklELCBu
dW1NZXNzYWdlcywgcmVjZWl2ZXJUaHJlYWQsICZtZXNzYWdlc1J1biwgJmhhbmRsZXJzUnVuXSAo
KSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtTWVzc2FnZXM7ICsr
aSkgewotICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gc2VuZE1lc3NhZ2UoKnJlY2VpdmVy
VGhyZWFkLmdldCgpLCBbc2VuZGVySUQsICZoYW5kbGVyc1J1bl0gKHNpZ2luZm9fdCosIHVjb250
ZXh0X3QqKSB7CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBzZW5kTWVzc2FnZSgqcmVj
ZWl2ZXJUaHJlYWQuZ2V0KCksIFtzZW5kZXJJRCwgJmhhbmRsZXJzUnVuXSAoUGxhdGZvcm1SZWdp
c3RlcnMmKSB7CiAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJzUnVuW3NlbmRlcklEXSsrOwog
ICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKHJlc3VsdCA9
PSBXVEY6Ok1lc3NhZ2VTdGF0dXM6Ok1lc3NhZ2VSYW4pOwpAQCAtOTUsNyArOTUsNyBAQCBwdWJs
aWM6CiBURVNUKFRocmVhZE1lc3NhZ2UsIFNpZ25hbHNXb3JrT25FeGl0KQogewogICAgIHN0YXRp
YyBib29sIGhhbmRsZXJSYW4gPSBmYWxzZTsKLSAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWdu
YWw6OlVzciwgW10gKGludCwgc2lnaW5mb190Kiwgdm9pZCopIC0+IFNpZ25hbEFjdGlvbiB7Cisg
ICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFsOjpVc3IsIFtdIChTaWduYWwsIFNpZ0luZm8m
LCBQbGF0Zm9ybVJlZ2lzdGVycyYpIC0+IFNpZ25hbEFjdGlvbiB7CiAgICAgICAgIGRhdGFMb2dM
bigiaGVyZSIpOwogICAgICAgICBoYW5kbGVyUmFuID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuIFNp
Z25hbEFjdGlvbjo6SGFuZGxlZDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309776</attachid>
            <date>2017-05-11 13:57:11 -0700</date>
            <delta_ts>2017-05-11 14:06:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171865-20170511135710.patch</filename>
            <type>text/plain</type>
            <size>50342</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE2Njc3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
YzIyOWE0ZjkxMDMxZGZlOTU1YTQxMGIyMDI0Njc2ZTFmM2NkZWIxLi4yNWUzMDIyZWI5ZmY0ZDA1
M2E4ZWRiY2YxZTI2YmFkZTA1MTA4MWExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MCBAQAorMjAxNy0wNS0xMSAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBVc2UgTWFjaCBleGNlcHRpb25zIGluc3RlYWQgb2Ygc2lnbmFscyB3
aGVyZSBwb3NzaWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTcxODY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhpcyBwYXRjaCBhZGRzIHNvbWUgbmV3IEpTQyBvcHRpb25zLiBUaGUgZmlyc3QgaXMg
YW4gb3B0aW9uIHRoYXQKKyAgICAgICAgZW5hYmxlcyBvciBkaXNhYmxlcyB3ZWIgYXNzZW1ibHkg
dGllciB1cC4gVGhlIHNlY29uZCBjb250cm9scworICAgICAgICB3aGV0aGVyIG9yIG5vdCB3ZSB1
c2UgbWFjaCBleGNlcHRpb25zICh3aGVyZSBhdmFpbGFibGUpLgorCisgICAgICAgICogQVBJL3Rl
c3RzL0V4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwOgorICAgICAgICAoZGlzcGF0Y2hUZXJtaXRh
dGVDYWxsYmFjayk6CisgICAgICAgICh0ZXN0RXhlY3V0aW9uVGltZUxpbWl0KToKKyAgICAgICAg
KiBydW50aW1lL0pTTG9jay5jcHA6CisgICAgICAgIChKU0M6OkpTTG9jazo6ZGlkQWNxdWlyZUxv
Y2spOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5jcHA6CisgICAgICAgIChKU0M6Om92ZXJy
aWRlRGVmYXVsdHMpOgorICAgICAgICAoSlNDOjpPcHRpb25zOjppbml0aWFsaXplKToKKyAgICAg
ICAgKiBydW50aW1lL09wdGlvbnMuaDoKKyAgICAgICAgKiBydW50aW1lL1ZNVHJhcHMuY3BwOgor
ICAgICAgICAoSlNDOjpTaWduYWxDb250ZXh0OjpTaWduYWxDb250ZXh0KToKKyAgICAgICAgKEpT
Qzo6U2lnbmFsQ29udGV4dDo6YWRqdXN0UENUb1BvaW50VG9UcmFwcGluZ0luc3RydWN0aW9uKToK
KyAgICAgICAgKEpTQzo6aW5zdGFsbFNpZ25hbEhhbmRsZXIpOgorICAgICAgICAoSlNDOjpWTVRy
YXBzOjpTaWduYWxTZW5kZXI6OnNlbmQpOgorICAgICAgICAqIHRvb2xzL1NpZ2lsbENyYXNoQW5h
bHl6ZXIuY3BwOgorICAgICAgICAoSlNDOjpTaWduYWxDb250ZXh0OjpTaWduYWxDb250ZXh0KToK
KyAgICAgICAgKEpTQzo6U2lnbmFsQ29udGV4dDo6ZHVtcCk6CisgICAgICAgIChKU0M6Omluc3Rh
bGxDcmFzaEhhbmRsZXIpOgorICAgICAgICAqIHdhc20vV2FzbUJCUVBsYW4uY3BwOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKToKKyAgICAgICAgKiB3YXNt
L1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp0cmFwSGFu
ZGxlcik6CisgICAgICAgIChKU0M6Oldhc206OmVuYWJsZUZhc3RNZW1vcnkpOgorICAgICAgICAq
IHdhc20vV2FzbU1hY2hpbmVUaHJlYWRzLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6cmVzZXRJ
bnN0cnVjdGlvbkNhY2hlT25BbGxUaHJlYWRzKToKKwogMjAxNy0wNS0xMSAgTWFyayBMYW0gIDxt
YXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgV29ya2VyVGhyZWFkOjpzdG9wKCkgc2hvdWxk
IGNhbGwgc2NoZWR1bGVFeGVjdXRpb25UZXJtaW5hdGlvbigpIGxhc3QuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGVjZGRiMzNm
YmVkNTIxMTFiYzA3MTk1ZDZjMDhmZTQwNmIyYzFhMzUuLmE3MjBkMTAxZTIyMDVjZGYwZmEwNmRm
YzNjYTczNmY5YmE1ZmM2NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTcgQEAKKzIwMTctMDUtMTEgIEtlaXRo
IE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIE1hY2ggZXhj
ZXB0aW9ucyBpbnN0ZWFkIG9mIHNpZ25hbHMgd2hlcmUgcG9zc2libGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MTg2NQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZW5hYmxlcyB1c2lu
ZyBtYWNoIGV4Y2VwdGlvbnMgb24gZGFyd2luLiBUaGUgd2F5IHRoZQorICAgICAgICBtYWNoIGV4
Y2VwdGlvbiBhcGkgd29ya3MgaXMgdGhhdCB3ZSBjcmVhdGUgYSBtYWNoIHBvcnQsIHdoaWNoIGlz
CisgICAgICAgIGxpa2UgYSBmaWxlIGRlc2NyaXB0b3IuICBXZSB0aGVuIHdhaXQgZm9yIGEgbWVz
c2FnZSB0byBhcnJpdmUgb24KKyAgICAgICAgdGhhdCBwb3J0IGluIGEgdGhyZWFkLiBXaGVuIGFu
b3RoZXIgdGhyZWFkIHJhaXNlcyBhIGV4Y2VwdGlvbiAoc2F5CisgICAgICAgIGR1ZSB0byBhIGJh
ZCBtZW1vcnkgYWNjZXNzKSB0aGUgT1Mgc2VuZHMgb3VyIHRocmVhZCBhIG1lc3NhZ2UuIFRoZQor
ICAgICAgICBwYXlsb2FkIG9mIHRoYXQgbWVzc2FnZSBpcyB0aGUgcmVnaXN0ZXIgZmlsZSBvZiB0
aGUgY3Jhc2hpbmcKKyAgICAgICAgdGhyZWFkLiBXZSB0aGVuIGNhbGwgb3VyIGN1c3RvbSBoYW5k
bGVycyB0aGF0IGNoYW5nZSB0aGUgc3RhdGUgYXMKKyAgICAgICAgbmVlZGVkLiBJbiBvcmRlciB0
byByZXN0YXJ0IHRoZSB0aHJlYWQgd2Ugc2VuZCBhIHBheWxvYWQgYmFjayB0bworICAgICAgICB0
aGUgT1Mgd2l0aCBhbiB1cGRhdGVkIHJlZ2lzdGVyIGZpbGUgYWxvbmcgd2l0aCBhIHN1Y2Nlc3Mg
bWVzc2FnZQorICAgICAgICBoZWFkZXIuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIG1ha2Vz
IHRocmVhZCBtZXNzYWdlcyB3b3JrIHdpdGhvdXQgc2lnbmFscyBieQorICAgICAgICBzaW1wbHkg
c3VzcGVuZGluZyB0aGUgdGhyZWFkIHRoZW4gcnVubmluZyB0aGUgbWVzc2FnZSBhdCB0aGF0Cisg
ICAgICAgIHRpbWUuCisKKyAgICAgICAgKiBDb25maWd1cmF0aW9ucy9XVEYueGNjb25maWc6Cisg
ICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL1Bs
YXRmb3JtLmg6CisgICAgICAgICogd3RmL1BsYXRmb3JtUmVnaXN0ZXJzLmg6CisgICAgICAgIChX
VEY6OnJlZ2lzdGVyc0Zyb21VQ29udGV4dCk6CisgICAgICAgICogd3RmL1N0YWNrQm91bmRzLmg6
CisgICAgICAgIChXVEY6OlN0YWNrQm91bmRzOjpTdGFja0JvdW5kcyk6CisgICAgICAgICogd3Rm
L1RocmVhZEhvbGRlci5jcHA6CisgICAgICAgIChXVEY6OlRocmVhZEhvbGRlcjo6flRocmVhZEhv
bGRlcik6CisgICAgICAgICogd3RmL1RocmVhZE1lc3NhZ2UuY3BwOgorICAgICAgICAoV1RGOjpz
ZW5kTWVzc2FnZVNpZ25hbCk6CisgICAgICAgIChXVEY6OnNlbmRNZXNzYWdlTWFjaCk6CisgICAg
ICAgIChXVEY6OmRlbGl2ZXJNZXNzYWdlc1VzaW5nTWFjaCk6CisgICAgICAgIChXVEY6OnNlbmRN
ZXNzYWdlU2NvcGVkKToKKyAgICAgICAgKiB3dGYvVGhyZWFkTWVzc2FnZS5oOgorICAgICAgICAo
V1RGOjpzZW5kTWVzc2FnZSk6CisgICAgICAgICogd3RmL1RocmVhZGluZy5oOgorICAgICAgICAo
V1RGOjpUaHJlYWQ6Om1hY2hUaHJlYWQpOgorICAgICAgICAqIHd0Zi9tYWMvTWFjaEV4Y2VwdGlv
bnMuZGVmczogQ29waWVkIGZyb20gU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5oLgorICAg
ICAgICAqIHd0Zi90aHJlYWRzL1NpZ25hbHMuY3BwOgorICAgICAgICAoV1RGOjpzdGFydE1hY2hF
eGNlcHRpb25IYW5kbGVyVGhyZWFkKToKKyAgICAgICAgKFdURjo6ZnJvbU1hY2hFeGNlcHRpb24p
OgorICAgICAgICAoV1RGOjp0b01hY2hNYXNrKToKKyAgICAgICAgKFdURjo6aGFuZGxlU2lnbmFs
c1dpdGhNYWNoKToKKyAgICAgICAgKFdURjo6c2V0RXhjZXB0aW9uUG9ydHMpOgorICAgICAgICAo
V1RGOjphY3RpdmVUaHJlYWRzKToKKyAgICAgICAgKFdURjo6cmVnaXN0ZXJUaHJlYWQpOgorICAg
ICAgICAoV1RGOjpyZW1vdmVUaHJlYWQpOgorICAgICAgICAoV1RGOjppbnN0YWxsU2lnbmFsSGFu
ZGxlcik6CisgICAgICAgIChXVEY6OmpzY1NpZ25hbEhhbmRsZXIpOgorICAgICAgICAqIHd0Zi90
aHJlYWRzL1NpZ25hbHMuaDoKKwogMjAxNy0wNS0wOSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFJlbW92ZSBzdXBwb3J0IGZvciBsZWdhY3kgTm90aWZpY2F0aW9ucwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9FeGVjdXRpb25UaW1l
TGltaXRUZXN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvRXhlY3V0aW9u
VGltZUxpbWl0VGVzdC5jcHAKaW5kZXggZDVlNTMyNDNiNzhkZjc1MTM0MmFkOGQzOTBhNGIwNDEz
ZDllZWY5ZS4uN2VhYzA3MzA5ZGRjM2YxNjQ5NDUwYmQwMzc5ZDJjYTE4ZjAxNjlhYSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9FeGVjdXRpb25UaW1lTGltaXRU
ZXN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0V4ZWN1dGlvblRp
bWVMaW1pdFRlc3QuY3BwCkBAIC0zMCw4ICszMCwxMyBAQAogI2luY2x1ZGUgIkpTQ29udGV4dFJl
ZlByaXZhdGUuaCIKICNpbmNsdWRlICJKYXZhU2NyaXB0Q29yZS5oIgogI2luY2x1ZGUgIk9wdGlv
bnMuaCIKKwogI2luY2x1ZGUgPGNocm9ubz4KKyNpbmNsdWRlIDxkaXNwYXRjaC9kaXNwYXRjaC5o
PgorI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CisjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgog
I2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOjpj
aHJvbm87CkBAIC03Nyw2ICs4MiwxMyBAQCBzdGF0aWMgYm9vbCBleHRlbmRUZXJtaW5hdGVDYWxs
YmFjayhKU0NvbnRleHRSZWYgY3R4LCB2b2lkKikKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9v
bCBkaXNwYXRjaFRlcm1pbmF0ZUNhbGxiYWNrQ2FsbGVkID0gZmFsc2U7CitzdGF0aWMgYm9vbCBk
aXNwYXRjaFRlcm1pdGF0ZUNhbGxiYWNrKEpTQ29udGV4dFJlZiwgdm9pZCopCit7CisgICAgZGlz
cGF0Y2hUZXJtaW5hdGVDYWxsYmFja0NhbGxlZCA9IHRydWU7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKIHN0cnVjdCBUaWVyT3B0aW9ucyB7CiAgICAgY29uc3QgY2hhciogdGllcjsKICAgICB1bnNp
Z25lZCB0aW1lTGltaXRBZGp1c3RtZW50TWlsbGlzOwpAQCAtMzY1LDYgKzM3Nyw2MyBAQCBpbnQg
dGVzdEV4ZWN1dGlvblRpbWVMaW1pdCgpCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAorICAg
ICAgICAvKiBUZXN0IHNjcmlwdCB0aW1lb3V0IGZyb20gZGlzcGF0Y2ggcXVldWU6ICovCisgICAg
ICAgIHRpbWVMaW1pdCA9ICgxMDAgKyB0aWVyQWRqdXN0bWVudE1pbGxpcykgLyAxMDAwLjA7Cisg
ICAgICAgIEpTQ29udGV4dEdyb3VwU2V0RXhlY3V0aW9uVGltZUxpbWl0KGNvbnRleHRHcm91cCwg
dGltZUxpbWl0LCBkaXNwYXRjaFRlcm1pdGF0ZUNhbGxiYWNrLCAwKTsKKyAgICAgICAgeworICAg
ICAgICAgICAgdW5zaWduZWQgdGltZUFmdGVyV2F0Y2hkb2dTaG91bGRIYXZlRmlyZWQgPSAzMDAg
KyB0aWVyQWRqdXN0bWVudE1pbGxpczsKKworICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBzY3Jp
cHRCdWlsZGVyOworICAgICAgICAgICAgc2NyaXB0QnVpbGRlci5hcHBlbmRMaXRlcmFsKCJmdW5j
dGlvbiBmb28oKSB7IHZhciBzdGFydFRpbWUgPSBjdXJyZW50Q1BVVGltZSgpOyB3aGlsZSAodHJ1
ZSkgeyBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDA7IGkrKyk7IGlmIChjdXJyZW50Q1BVVGltZSgp
IC0gc3RhcnRUaW1lID4gIik7CisgICAgICAgICAgICBzY3JpcHRCdWlsZGVyLmFwcGVuZE51bWJl
cih0aW1lQWZ0ZXJXYXRjaGRvZ1Nob3VsZEhhdmVGaXJlZCAvIDEwMDAuMCk7CisgICAgICAgICAg
ICBzY3JpcHRCdWlsZGVyLmFwcGVuZExpdGVyYWwoIikgYnJlYWs7IH0gfSBmb28oKTsiKTsKKwor
ICAgICAgICAgICAgSlNTdHJpbmdSZWYgc2NyaXB0ID0gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoc2NyaXB0QnVpbGRlci50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAg
ICAgZXhjZXB0aW9uID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGRpc3BhdGNoVGVybWluYXRlQ2Fs
bGJhY2tDYWxsZWQgPSBmYWxzZTsKKworICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBkbyB0aGlz
IHNpbmNlIGJsb2NrcyBjYW4gb25seSBjYXB0dXJlIHRoaW5ncyBhcyBjb25zdC4KKyAgICAgICAg
ICAgIEpTR2xvYmFsQ29udGV4dFJlZiYgY29udGV4dFJlZiA9IGNvbnRleHQ7CisgICAgICAgICAg
ICBKU1N0cmluZ1JlZiYgc2NyaXB0UmVmID0gc2NyaXB0OworICAgICAgICAgICAgSlNWYWx1ZVJl
ZiYgZXhjZXB0aW9uUmVmID0gZXhjZXB0aW9uOworCisgICAgICAgICAgICBMb2NrIHN5bmNMb2Nr
OworICAgICAgICAgICAgTG9jayYgc3luY0xvY2tSZWYgPSBzeW5jTG9jazsKKyAgICAgICAgICAg
IENvbmRpdGlvbiBzeW5jaHJvbml6ZTsKKyAgICAgICAgICAgIENvbmRpdGlvbiYgc3luY2hyb25p
emVSZWYgPSBzeW5jaHJvbml6ZTsKKyAgICAgICAgICAgIGJvb2wgZGlkU3luY2hyb25pemUgPSBm
YWxzZTsKKyAgICAgICAgICAgIGJvb2wmIGRpZFN5bmNocm9uaXplUmVmID0gZGlkU3luY2hyb25p
emU7CisKKyAgICAgICAgICAgIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMgc3RhcnRUaW1lOwor
ICAgICAgICAgICAgc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcyBlbmRUaW1lOworCisgICAgICAg
ICAgICBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzJiBzdGFydFRpbWVSZWYgPSBzdGFydFRpbWU7
CisgICAgICAgICAgICBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzJiBlbmRUaW1lUmVmID0gZW5k
VGltZTsKKworICAgICAgICAgICAgZGlzcGF0Y2hfZ3JvdXBfdCBncm91cCA9IGRpc3BhdGNoX2dy
b3VwX2NyZWF0ZSgpOworICAgICAgICAgICAgZGlzcGF0Y2hfZ3JvdXBfYXN5bmMoZ3JvdXAsIGRp
c3BhdGNoX2dldF9nbG9iYWxfcXVldWUoMCwgMCksIF57CisgICAgICAgICAgICAgICAgc3RhcnRU
aW1lUmVmID0gY3VycmVudENQVVRpbWUoKTsKKyAgICAgICAgICAgICAgICBKU0V2YWx1YXRlU2Ny
aXB0KGNvbnRleHRSZWYsIHNjcmlwdFJlZiwgbnVsbHB0ciwgbnVsbHB0ciwgMSwgJmV4Y2VwdGlv
blJlZik7CisgICAgICAgICAgICAgICAgZW5kVGltZVJlZiA9IGN1cnJlbnRDUFVUaW1lKCk7Cisg
ICAgICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBXVEY6OmhvbGRMb2NrKHN5bmNMb2NrUmVmKTsK
KyAgICAgICAgICAgICAgICBkaWRTeW5jaHJvbml6ZVJlZiA9IHRydWU7CisgICAgICAgICAgICAg
ICAgc3luY2hyb25pemVSZWYubm90aWZ5QWxsKCk7CisgICAgICAgICAgICB9KTsKKworICAgICAg
ICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhzeW5jTG9jayk7CisgICAgICAgICAgICBzeW5j
aHJvbml6ZS53YWl0KHN5bmNMb2NrLCBbJl0geyByZXR1cm4gZGlkU3luY2hyb25pemU7IH0pOwor
CisgICAgICAgICAgICBpZiAoKChlbmRUaW1lIC0gc3RhcnRUaW1lKSA8IG1pbGxpc2Vjb25kcyh0
aW1lQWZ0ZXJXYXRjaGRvZ1Nob3VsZEhhdmVGaXJlZCkpICYmIGRpc3BhdGNoVGVybWluYXRlQ2Fs
bGJhY2tDYWxsZWQpCisgICAgICAgICAgICAgICAgcHJpbnRmKCJQQVNTOiAlcyBzY3JpcHQgb24g
ZGlzcGF0Y2ggcXVldWUgdGltZWQgb3V0IGFzIGV4cGVjdGVkLlxuIiwgdGllck9wdGlvbnMudGll
cik7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoKGVuZFRpbWUgLSBz
dGFydFRpbWUpID49IG1pbGxpc2Vjb25kcyh0aW1lQWZ0ZXJXYXRjaGRvZ1Nob3VsZEhhdmVGaXJl
ZCkpCisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiRkFJTDogJXMgc2NyaXB0IG9uIGRpc3Bh
dGNoIHF1ZXVlIGRpZCBub3QgdGltZSBvdXQgYXMgZXhwZWN0ZWQuXG4iLCB0aWVyT3B0aW9ucy50
aWVyKTsKKyAgICAgICAgICAgICAgICBpZiAoIXNob3VsZFRlcm1pbmF0ZUNhbGxiYWNrV2FzQ2Fs
bGVkKQorICAgICAgICAgICAgICAgICAgICBwcmludGYoIkZBSUw6ICVzIHNjcmlwdCBvbiBkaXNw
YXRjaCBxdWV1ZSB0aW1lb3V0IGNhbGxiYWNrIHdhcyBub3QgY2FsbGVkLlxuIiwgdGllck9wdGlv
bnMudGllcik7CisgICAgICAgICAgICAgICAgZmFpbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCiAgICAgICAgIEpTR2xvYmFsQ29udGV4dFJlbGVhc2UoY29udGV4dCk7CiAK
ICAgICAgICAgT3B0aW9uczo6c2V0T3B0aW9ucyhzYXZlZE9wdGlvbnNCdWlsZGVyLnRvU3RyaW5n
KCkuYXNjaWkoKS5kYXRhKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNMb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5j
cHAKaW5kZXggYzE3NWFlMGM0ODJlZDI3YmQ1ZjZiZGM4Nzk2OGU3NWQ0NWFmNTBlZi4uYmI3MGFh
YWVhMTVmZWQ1NDc3YjYxOTlmYTZkNGRjN2VhOTcxMDJjMiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0xvY2suY3BwCkBAIC0zMCw2ICszMCw4IEBACiAjaW5jbHVkZSAiU2FtcGxp
bmdQcm9maWxlci5oIgogI2luY2x1ZGUgIldhc21NYWNoaW5lVGhyZWFkcy5oIgogI2luY2x1ZGUg
PHRocmVhZD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RocmVh
ZHMvU2lnbmFscy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMTQ4LDYgKzE1MCwxMCBAQCB2
b2lkIEpTTG9jazo6ZGlkQWNxdWlyZUxvY2soKQogICAgIFdhc206OnN0YXJ0VHJhY2tpbmdDdXJy
ZW50VGhyZWFkKCk7CiAjZW5kaWYKIAorI2lmIEhBVkUoTUFDSF9FWENFUFRJT05TKQorICAgIFdU
Rjo6cmVnaXN0ZXJUaHJlYWQoJlRocmVhZDo6Y3VycmVudCgpKTsKKyNlbmRpZgorCiAgICAgbV92
bS0+dHJhcHMoKS5ub3RpZnlHcmFiQWxsTG9ja3MoKTsKIAogI2lmIEVOQUJMRShTQU1QTElOR19Q
Uk9GSUxFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKaW5kZXgg
YjA0ZGUzNWE1MzYxNTA4NDM4NTc1YzIyN2E1MDE0ZGQwYzUxYmFhMi4uOTZmOWZmNzQyNWJiOTU5
ZjEzN2E2MTRlYzNkYjY3NmM4YjE2ZGE5OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5jcHAKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0
cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGhyZWFkcy9TaWduYWxzLmg+CiAKICNp
ZiBQTEFURk9STShDT0NPQSkKICNpbmNsdWRlIDxjcnRfZXh0ZXJucy5oPgpAQCAtMzU0LDYgKzM1
NSwxMCBAQCBzdGF0aWMgdm9pZCBvdmVycmlkZURlZmF1bHRzKCkKICNpZiAhRU5BQkxFKFdFQkFT
U0VNQkxZX0ZBU1RfTUVNT1JZKQogICAgIE9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5RmFzdE1lbW9y
eSgpID0gZmFsc2U7CiAjZW5kaWYKKworI2lmIEhBVkUoTUFDSF9FWENFUFRJT05TKQorICAgIE9w
dGlvbnM6OnVzZU1hY2hGb3JFeGNlcHRpb25zKCkgPSB0cnVlOworI2VuZGlmCiB9CiAKIHN0YXRp
YyB2b2lkIHJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMoKQpAQCAtNTQ1LDYgKzU1MCw5IEBAIHZv
aWQgT3B0aW9uczo6aW5pdGlhbGl6ZSgpCiAKICAgICAgICAgICAgIGR1bXBPcHRpb25zSWZOZWVk
ZWQoKTsKICAgICAgICAgICAgIGVuc3VyZU9wdGlvbnNBcmVDb2hlcmVudCgpOworCisgICAgICAg
ICAgICBpZiAoT3B0aW9uczo6dXNlTWFjaEZvckV4Y2VwdGlvbnMoKSkKKyAgICAgICAgICAgICAg
ICBXVEY6OmhhbmRsZVNpZ25hbHNXaXRoTWFjaCgpOwogICAgICAgICB9KTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCmluZGV4IGNmOWRjMmIyYTgyNTY4ZWUwN2Rh
MDg4OWUzOWI2YjJmOWRjZDc5NzUuLjIyNzRkMWNkZWIzMzM2ZTM3YWI0NDczZWE0MTE2ZWEzMjI5
ZTkzN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKQEAgLTQyMCw2
ICs0MjAsOCBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICB2KHVuc2ln
bmVkLCB3YXRjaGRvZywgMCwgTm9ybWFsLCAid2F0Y2hkb2cgdGltZW91dCAoMCA9IERpc2FibGVk
LCBOID0gYSB0aW1lb3V0IHBlcmlvZCBvZiBOIG1pbGxpc2Vjb25kcykiKSBcCiAgICAgdihib29s
LCB1c2VQb2xsaW5nVHJhcHMsIGZhbHNlLCBOb3JtYWwsICJ1c2UgcG9sbGluZyAoaW5zdGVhZCBv
ZiBzaWduYWxsaW5nKSBWTSB0cmFwcyIpIFwKICAgICBcCisgICAgdihib29sLCB1c2VNYWNoRm9y
RXhjZXB0aW9ucywgdHJ1ZSwgTm9ybWFsLCAiVXNlIG1hY2ggZXhjZXB0aW9ucyByYXRoZXIgdGhh
biBzaWduYWxzIHRvIGhhbmRsZSBmYXVsdHMgYW5kIHBhc3MgdGhyZWFkIG1lc3NhZ2VzLiAoVGhp
cyBkb2VzIG5vdGhpbmcgb24gcGxhdGZvcm1zIHdpdGhvdXQgbWFjaCkiKSBcCisgICAgXAogICAg
IHYoYm9vbCwgdXNlSUNTdGF0cywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIFwKICAg
ICB2KHVuc2lnbmVkLCBwcm90b3R5cGVIaXRDb3VudEZvckxMSW50Q2FjaGluZywgMiwgTm9ybWFs
LCAiTnVtYmVyIG9mIHByb3RvdHlwZSBwcm9wZXJ0eSBoaXRzIGJlZm9yZSBjYWNoaW5nIGEgcHJv
dG90eXBlIGluIHRoZSBMTEludC4gQSBjb3VudCBvZiAwIG1lYW5zIG5ldmVyIGNhY2hlLiIpIFwK
QEAgLTQ0Myw2ICs0NDUsNyBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAg
ICB2KHVuc2lnbmVkLCB3ZWJBc3NlbWJseUJCUU9wdGltaXphdGlvbkxldmVsLCAxLCBOb3JtYWws
ICJCMyBPcHRpbWl6YXRpb24gbGV2ZWwgZm9yIEJCUSBXZWIgQXNzZW1ibHkgbW9kdWxlIGNvbXBp
bGF0aW9ucy4iKSBcCiAgICAgdih1bnNpZ25lZCwgd2ViQXNzZW1ibHlPTUdPcHRpbWl6YXRpb25M
ZXZlbCwgT3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSwgTm9ybWFsLCAiQjMgT3B0aW1pemF0
aW9uIGxldmVsIGZvciBPTUcgV2ViIEFzc2VtYmx5IG1vZHVsZSBjb21waWxhdGlvbnMuIikgXAog
ICAgIFwKKyAgICB2KGJvb2wsIHVzZUJCUVRpZXJVcENoZWNrcywgdHJ1ZSwgTm9ybWFsLCAiRW5h
YmxlcyB0aWVyIHVwIGNoZWNrcyBmb3Igb3VyIEJCUSBjb2RlLiIpIFwKICAgICB2KHVuc2lnbmVk
LCB3ZWJBc3NlbWJseU9NR1RpZXJVcENvdW50LCA1MDAwLCBOb3JtYWwsICJUaGUgY291bnRkb3du
IGJlZm9yZSB3ZSB0aWVyIHVwIGEgZnVuY3Rpb24gdG8gT01HLiIpIFwKICAgICB2KHVuc2lnbmVk
LCB3ZWJBc3NlbWJseUxvb3BEZWNyZW1lbnQsIDE1LCBOb3JtYWwsICJUaGUgYW1vdW50IHRoZSB0
aWVyIHVwIGNvdW50ZG93biBpcyBkZWNyZW1lbnRlZCBvbiBlYWNoIGxvb3AgYmFja2VkZ2UuIikg
XAogICAgIHYodW5zaWduZWQsIHdlYkFzc2VtYmx5RnVuY3Rpb25FbnRyeURlY3JlbWVudCwgMSwg
Tm9ybWFsLCAiVGhlIGFtb3VudCB0aGUgdGllciB1cCBjb3VudGRvd24gaXMgZGVjcmVtZW50ZWQg
b24gZWFjaCBmdW5jdGlvbiBlbnRyeS4iKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTVRyYXBzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNVHJhcHMuY3BwCmluZGV4IDFiYWFjZTYwNDRlNjYwYThlNTQ0MWZiYWQwMThlYTkwOTMxYTRj
OTEuLjEwZDc4MmE4ZGM0OWE1ZWRhMDgxZDczZDY4M2RmZmUxNmY4YzhmNDMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCkBAIC01MywxMSArNTMsMTEgQEAgQUxX
QVlTX0lOTElORSBWTSYgVk1UcmFwczo6dm0oKSBjb25zdAogI2lmIEVOQUJMRShTSUdOQUxfQkFT
RURfVk1fVFJBUFMpCiAKIHN0cnVjdCBTaWduYWxDb250ZXh0IHsKLSAgICBTaWduYWxDb250ZXh0
KG1jb250ZXh0X3QmIG1jb250ZXh0KQotICAgICAgICA6IG1jb250ZXh0KG1jb250ZXh0KQotICAg
ICAgICAsIHRyYXBQQyhNYWNoaW5lQ29udGV4dDo6aW5zdHJ1Y3Rpb25Qb2ludGVyKG1jb250ZXh0
KSkKLSAgICAgICAgLCBzdGFja1BvaW50ZXIoTWFjaGluZUNvbnRleHQ6OnN0YWNrUG9pbnRlciht
Y29udGV4dCkpCi0gICAgICAgICwgZnJhbWVQb2ludGVyKE1hY2hpbmVDb250ZXh0OjpmcmFtZVBv
aW50ZXIobWNvbnRleHQpKQorICAgIFNpZ25hbENvbnRleHQoUGxhdGZvcm1SZWdpc3RlcnMmIHJl
Z2lzdGVycykKKyAgICAgICAgOiBjb250ZXh0KHJlZ2lzdGVycykKKyAgICAgICAgLCB0cmFwUEMo
TWFjaGluZUNvbnRleHQ6Omluc3RydWN0aW9uUG9pbnRlcihjb250ZXh0KSkKKyAgICAgICAgLCBz
dGFja1BvaW50ZXIoTWFjaGluZUNvbnRleHQ6OnN0YWNrUG9pbnRlcihjb250ZXh0KSkKKyAgICAg
ICAgLCBmcmFtZVBvaW50ZXIoTWFjaGluZUNvbnRleHQ6OmZyYW1lUG9pbnRlcihjb250ZXh0KSkK
ICAgICB7CiAjaWYgQ1BVKFg4Nl82NCkgfHwgQ1BVKFg4NikKICAgICAgICAgLy8gT24gWDg2XzY0
LCBTSUdUUkFQIHJlcG9ydHMgdGhlIGFkZHJlc3MgYWZ0ZXIgdGhlIHRyYXBwaW5nIFBDLiBTbywg
ZGVjIGJ5IDEuCkBAIC02OCwxMSArNjgsMTEgQEAgc3RydWN0IFNpZ25hbENvbnRleHQgewogICAg
IHZvaWQgYWRqdXN0UENUb1BvaW50VG9UcmFwcGluZ0luc3RydWN0aW9uKCkKICAgICB7CiAjaWYg
Q1BVKFg4Nl82NCkgfHwgQ1BVKFg4NikKLSAgICAgICAgTWFjaGluZUNvbnRleHQ6Omluc3RydWN0
aW9uUG9pbnRlcihtY29udGV4dCkgPSB0cmFwUEM7CisgICAgICAgIE1hY2hpbmVDb250ZXh0Ojpp
bnN0cnVjdGlvblBvaW50ZXIoY29udGV4dCkgPSB0cmFwUEM7CiAjZW5kaWYKICAgICB9CiAKLSAg
ICBtY29udGV4dF90JiBtY29udGV4dDsKKyAgICBQbGF0Zm9ybVJlZ2lzdGVycyYgY29udGV4dDsK
ICAgICB2b2lkKiB0cmFwUEM7CiAgICAgdm9pZCogc3RhY2tQb2ludGVyOwogICAgIHZvaWQqIGZy
YW1lUG9pbnRlcjsKQEAgLTEzMCwxMSArMTMwLDEzIEBAIHN0YXRpYyBFeHBlY3RlZDxWTUFuZFN0
YWNrQm91bmRzLCBWTVRyYXBzOjpFcnJvcj4gZmluZEFjdGl2ZVZNQW5kU3RhY2tCb3VuZHMoU2ln
CiAKIHN0YXRpYyB2b2lkIGluc3RhbGxTaWduYWxIYW5kbGVyKCkKIHsKLSAgICBpbnN0YWxsU2ln
bmFsSGFuZGxlcihTaWduYWw6OlRyYXAsIFtdIChpbnQsIHNpZ2luZm9fdCosIHZvaWQqIHVhcCkg
LT4gU2lnbmFsQWN0aW9uIHsKLSAgICAgICAgU2lnbmFsQ29udGV4dCBjb250ZXh0KHN0YXRpY19j
YXN0PHVjb250ZXh0X3QqPih1YXApLT51Y19tY29udGV4dCk7CisgICAgaW5zdGFsbFNpZ25hbEhh
bmRsZXIoU2lnbmFsOjpUcmFwLCBbXSAoU2lnbmFsLCBTaWdJbmZvJiwgUGxhdGZvcm1SZWdpc3Rl
cnMmIHJlZ2lzdGVycykgLT4gU2lnbmFsQWN0aW9uIHsKKyAgICAgICAgU2lnbmFsQ29udGV4dCBj
b250ZXh0KHJlZ2lzdGVycyk7CiAKLSAgICAgICAgaWYgKCFpc0pJVFBDKGNvbnRleHQudHJhcFBD
KSkKKyAgICAgICAgaWYgKCFpc0pJVFBDKGNvbnRleHQudHJhcFBDKSkgeworICAgICAgICAgICAg
ZGF0YUxvZ0xuKCJ0cmFwcGluZyBwYzogIiwgUmF3UG9pbnRlcihjb250ZXh0LnRyYXBQQyksICIg
aml0IHN0YXJ0OiAiLCBzdGFydE9mRml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbCwgIiBqaXQgZW5k
OiAiLCBlbmRPZkZpeGVkRXhlY3V0YWJsZU1lbW9yeVBvb2wpOwogICAgICAgICAgICAgcmV0dXJu
IFNpZ25hbEFjdGlvbjo6Tm90SGFuZGxlZDsKKyAgICAgICAgfQogCiAgICAgICAgIC8vIEZJWE1F
OiBUaGlzIGN1cnJlbnRseSBlYXRzIGFsbCB0cmFwcyBpbmNsdWRpbmcgaml0IGFzc2VydHMgd2Ug
c2hvdWxkIG1ha2Ugc3VyZSB0aGlzCiAgICAgICAgIC8vIGFsd2F5cyB3b3Jrcy4gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MTAzOQpAQCAtNDA0LDggKzQwNiw4IEBA
IHZvaWQgVk1UcmFwczo6U2lnbmFsU2VuZGVyOjpzZW5kKCkKICAgICAgICAgICAgIFZNJiB2bSA9
ICptX3ZtOwogICAgICAgICAgICAgYXV0byBvcHRpb25hbE93bmVyVGhyZWFkID0gdm0ub3duZXJU
aHJlYWQoKTsKICAgICAgICAgICAgIGlmIChvcHRpb25hbE93bmVyVGhyZWFkKSB7Ci0gICAgICAg
ICAgICAgICAgc2VuZE1lc3NhZ2UoKm9wdGlvbmFsT3duZXJUaHJlYWQudmFsdWUoKS5nZXQoKSwg
W10gKHNpZ2luZm9fdCosIHVjb250ZXh0X3QqIHVjb250ZXh0KSAtPiB2b2lkIHsKLSAgICAgICAg
ICAgICAgICAgICAgU2lnbmFsQ29udGV4dCBjb250ZXh0KHVjb250ZXh0LT51Y19tY29udGV4dCk7
CisgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoKm9wdGlvbmFsT3duZXJUaHJlYWQudmFsdWUo
KS5nZXQoKSwgW10gKFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMpIC0+IHZvaWQgeworICAg
ICAgICAgICAgICAgICAgICBTaWduYWxDb250ZXh0IGNvbnRleHQocmVnaXN0ZXJzKTsKICAgICAg
ICAgICAgICAgICAgICAgYXV0byBhY3RpdmVWTUFuZFN0YWNrQm91bmRzID0gZmluZEFjdGl2ZVZN
QW5kU3RhY2tCb3VuZHMoY29udGV4dCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChhY3RpdmVW
TUFuZFN0YWNrQm91bmRzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBWTSogdm0gPSBhY3Rp
dmVWTUFuZFN0YWNrQm91bmRzLnZhbHVlKCkudm07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAKaW5kZXggNGFkYWVmZjFjZGEyZDFm
YmM2ZjkwNjFmMDYzZTE0ZDJlNjMzMDA0OC4uYmI0NjA1YzY5M2UxMmRkZTA1MDg0ZjdhMTdjZDFl
NDRmN2U5ZTY3NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1NpZ2ls
bENyYXNoQW5hbHl6ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9TaWdp
bGxDcmFzaEFuYWx5emVyLmNwcApAQCAtNzgsMTEgKzc4LDExIEBAIHByaXZhdGU6CiAjZW5kaWYg
Ly8gVVNFKE9TX0xPRykKIAogc3RydWN0IFNpZ25hbENvbnRleHQgewotICAgIFNpZ25hbENvbnRl
eHQobWNvbnRleHRfdCYgbWNvbnRleHQpCi0gICAgICAgIDogbWNvbnRleHQobWNvbnRleHQpCi0g
ICAgICAgICwgbWFjaGluZVBDKE1hY2hpbmVDb250ZXh0OjppbnN0cnVjdGlvblBvaW50ZXIobWNv
bnRleHQpKQotICAgICAgICAsIHN0YWNrUG9pbnRlcihNYWNoaW5lQ29udGV4dDo6c3RhY2tQb2lu
dGVyKG1jb250ZXh0KSkKLSAgICAgICAgLCBmcmFtZVBvaW50ZXIoTWFjaGluZUNvbnRleHQ6OmZy
YW1lUG9pbnRlcihtY29udGV4dCkpCisgICAgU2lnbmFsQ29udGV4dChQbGF0Zm9ybVJlZ2lzdGVy
cyYgY29udGV4dCkKKyAgICAgICAgOiBjb250ZXh0KGNvbnRleHQpCisgICAgICAgICwgbWFjaGlu
ZVBDKE1hY2hpbmVDb250ZXh0OjppbnN0cnVjdGlvblBvaW50ZXIoY29udGV4dCkpCisgICAgICAg
ICwgc3RhY2tQb2ludGVyKE1hY2hpbmVDb250ZXh0OjpzdGFja1BvaW50ZXIoY29udGV4dCkpCisg
ICAgICAgICwgZnJhbWVQb2ludGVyKE1hY2hpbmVDb250ZXh0OjpmcmFtZVBvaW50ZXIoY29udGV4
dCkpCiAgICAgeyB9CiAKICAgICB2b2lkIGR1bXAoKQpAQCAtMTEyLDcgKzExMiw3IEBAIHN0cnVj
dCBTaWduYWxDb250ZXh0IHsKICAgICAgICAgdihncykKIAogI2RlZmluZSBEVU1QX1JFR0lTVEVS
KF9fcmVnKSBcCi0gICAgICAgIGxvZygiUmVnaXN0ZXIgIiAjX19yZWcgIjogJXAiLCByZWludGVy
cHJldF9jYXN0PHZvaWQqPihtY29udGV4dC0+X19zcy5fXyMjX19yZWcpKTsKKyAgICAgICAgbG9n
KCJSZWdpc3RlciAiICNfX3JlZyAiOiAlcCIsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNvbnRl
eHQuX18jI19fcmVnKSk7CiAgICAgICAgIEZPUl9FQUNIX1JFR0lTVEVSKERVTVBfUkVHSVNURVIp
CiAjdW5kZWYgRk9SX0VBQ0hfUkVHSVNURVIKIApAQCAtMTIwLDIwICsxMjAsMjAgQEAgc3RydWN0
IFNpZ25hbENvbnRleHQgewogICAgICAgICBpbnQgaTsKICAgICAgICAgZm9yIChpID0gMDsgaSA8
IDI4OyBpICs9IDQpIHsKICAgICAgICAgICAgIGxvZygieCVkOiAlMDE2bGx4IHglZDogJTAxNmxs
eCB4JWQ6ICUwMTZsbHggeCVkOiAlMDE2bGx4IiwKLSAgICAgICAgICAgICAgICBpLCBtY29udGV4
dC0+X19zcy5fX3hbaV0sCi0gICAgICAgICAgICAgICAgaSsxLCBtY29udGV4dC0+X19zcy5fX3hb
aSsxXSwKLSAgICAgICAgICAgICAgICBpKzIsIG1jb250ZXh0LT5fX3NzLl9feFtpKzJdLAotICAg
ICAgICAgICAgICAgIGkrMywgbWNvbnRleHQtPl9fc3MuX194W2krM10pOworICAgICAgICAgICAg
ICAgIGksIGNvbnRleHQuX194W2ldLAorICAgICAgICAgICAgICAgIGkrMSwgY29udGV4dC5fX3hb
aSsxXSwKKyAgICAgICAgICAgICAgICBpKzIsIGNvbnRleHQuX194W2krMl0sCisgICAgICAgICAg
ICAgICAgaSszLCBjb250ZXh0Ll9feFtpKzNdKTsKICAgICAgICAgfQogICAgICAgICBBU1NFUlQo
aSA8IDI5KTsKICAgICAgICAgbG9nKCJ4JWQ6ICUwMTZsbHggZnA6ICUwMTZsbHggbHI6ICUwMTZs
bHgiLAotICAgICAgICAgICAgaSwgbWNvbnRleHQtPl9fc3MuX194W2ldLCBtY29udGV4dC0+X19z
cy5fX2ZwLCBtY29udGV4dC0+X19zcy5fX2xyKTsKKyAgICAgICAgICAgIGksIGNvbnRleHQuX194
W2ldLCBjb250ZXh0Ll9fZnAsIGNvbnRleHQuX19scik7CiAgICAgICAgIGxvZygic3A6ICUwMTZs
bHggcGM6ICUwMTZsbHggY3BzcjogJTA4eCIsCi0gICAgICAgICAgICBtY29udGV4dC0+X19zcy5f
X3NwLCBtY29udGV4dC0+X19zcy5fX3BjLCBtY29udGV4dC0+X19zcy5fX2Nwc3IpOworICAgICAg
ICAgICAgY29udGV4dC5fX3NwLCBjb250ZXh0Ll9fcGMsIGNvbnRleHQuX19jcHNyKTsKICNlbmRp
ZgogICAgIH0KIAotICAgIG1jb250ZXh0X3QmIG1jb250ZXh0OworICAgIFBsYXRmb3JtUmVnaXN0
ZXJzJiBjb250ZXh0OwogICAgIHZvaWQqIG1hY2hpbmVQQzsKICAgICB2b2lkKiBzdGFja1BvaW50
ZXI7CiAgICAgdm9pZCogZnJhbWVQb2ludGVyOwpAQCAtMTQyLDggKzE0Miw4IEBAIHN0cnVjdCBT
aWduYWxDb250ZXh0IHsKIHN0YXRpYyB2b2lkIGluc3RhbGxDcmFzaEhhbmRsZXIoKQogewogI2lm
IENQVShYODZfNjQpIHx8IENQVShBUk02NCkKLSAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWdu
YWw6OklsbCwgW10gKGludCwgc2lnaW5mb190Kiwgdm9pZCogdWFwKSB7Ci0gICAgICAgIFNpZ25h
bENvbnRleHQgY29udGV4dChzdGF0aWNfY2FzdDx1Y29udGV4dF90Kj4odWFwKS0+dWNfbWNvbnRl
eHQpOworICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbDo6SWxsLCBbXSAoU2lnbmFsLCBT
aWdJbmZvJiwgUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVycykgeworICAgICAgICBTaWduYWxD
b250ZXh0IGNvbnRleHQocmVnaXN0ZXJzKTsKIAogICAgICAgICBpZiAoIWlzSklUUEMoY29udGV4
dC5tYWNoaW5lUEMpKQogICAgICAgICAgICAgcmV0dXJuIFNpZ25hbEFjdGlvbjo6Tm90SGFuZGxl
ZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAppbmRleCAxZGQw
Y2QxZDgzNWM2YzJmMjMxYjAwYjg4NmRkZTRhZjcyYzI2M2NlLi5iMWI1OThkMjBjNWMwMDc3ZDll
OWQwOGUzNjhhZDVjYTE3ODMxYmFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQkJRUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUJCUVBsYW4uY3BwCkBAIC0yNDIsNyArMjQyLDcgQEAgdm9pZCBCQlFQbGFuOjpjb21waWxlRnVu
Y3Rpb25zKENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKICAgICAgICAgQVNTRVJUKHZhbGlkYXRl
RnVuY3Rpb24oZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgbV9tb2R1
bGVJbmZvcm1hdGlvbi5nZXQoKSkpOwogCiAgICAgICAgIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bHNbZnVuY3Rpb25JbmRleF0gPSBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4oKTsKLSAg
ICAgICAgVGllclVwQ291bnQqIHRpZXJVcCA9ICZtX3RpZXJVcENvdW50c1tmdW5jdGlvbkluZGV4
XTsKKyAgICAgICAgVGllclVwQ291bnQqIHRpZXJVcCA9IE9wdGlvbnM6OnVzZUJCUVRpZXJVcENo
ZWNrcygpID8gJm1fdGllclVwQ291bnRzW2Z1bmN0aW9uSW5kZXhdIDogbnVsbHB0cjsKICAgICAg
ICAgYXV0byBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUobV9jb21waWxh
dGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdLCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0
aCwgc2lnbmF0dXJlLCBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdLCBt
X21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIENvbXBpbGF0aW9uTW9kZTo6QkJRTW9k
ZSwgZnVuY3Rpb25JbmRleCwgdGllclVwKTsKIAogICAgICAgICBpZiAoVU5MSUtFTFkoIXBhcnNl
QW5kQ29tcGlsZVJlc3VsdCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAKaW5kZXggMmUwYzk5YTM5YmViZDMxNzhiOTE0
OGQ5NThmZTUzZTU3YTYyMjk3ZS4uMjY0YzM0ZGU0NWRhMTc1YTVkNTE0MWMxNzFlZmU5NWUwNjNj
NWUyNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2ln
bmFsSGFuZGxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0
U2lnbmFsSGFuZGxlci5jcHAKQEAgLTUyLDkgKzUyLDggQEAgc3RhdGljIExhenlOZXZlckRlc3Ry
b3llZDxIYXNoU2V0PHN0ZDo6dHVwbGU8dm9pZCosIHZvaWQqPj4+IGNvZGVMb2NhdGlvbnM7IC8v
ICgKIAogc3RhdGljIGJvb2wgZmFzdEhhbmRsZXJJbnN0YWxsZWQgeyBmYWxzZSB9OwogCi1zdGF0
aWMgU2lnbmFsQWN0aW9uIHRyYXBIYW5kbGVyKGludCwgc2lnaW5mb190KiBzaWdJbmZvLCB2b2lk
KiB1Y29udGV4dCkKK3N0YXRpYyBTaWduYWxBY3Rpb24gdHJhcEhhbmRsZXIoU2lnbmFsLCBTaWdJ
bmZvJiBzaWdJbmZvLCBQbGF0Zm9ybVJlZ2lzdGVycyYgY29udGV4dCkKIHsKLSAgICBtY29udGV4
dF90JiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+KHVjb250ZXh0KS0+dWNfbWNv
bnRleHQ7CiAgICAgdm9pZCogZmF1bHRpbmdJbnN0cnVjdGlvbiA9IE1hY2hpbmVDb250ZXh0Ojpp
bnN0cnVjdGlvblBvaW50ZXIoY29udGV4dCk7CiAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgInN0
YXJ0aW5nIGhhbmRsZXIgZm9yIGZhdWx0IGF0OiAiLCBSYXdQb2ludGVyKGZhdWx0aW5nSW5zdHJ1
Y3Rpb24pKTsKIApAQCAtNjQsNyArNjMsNyBAQCBzdGF0aWMgU2lnbmFsQWN0aW9uIHRyYXBIYW5k
bGVyKGludCwgc2lnaW5mb190KiBzaWdJbmZvLCB2b2lkKiB1Y29udGV4dCkKICAgICBpZiAoaXNK
SVRQQyhmYXVsdGluZ0luc3RydWN0aW9uKSkgewogICAgICAgICBib29sIGZhdWx0ZWRJbkFjdGl2
ZUZhc3RNZW1vcnkgPSBmYWxzZTsKICAgICAgICAgewotICAgICAgICAgICAgdm9pZCogZmF1bHRp
bmdBZGRyZXNzID0gc2lnSW5mby0+c2lfYWRkcjsKKyAgICAgICAgICAgIHZvaWQqIGZhdWx0aW5n
QWRkcmVzcyA9IHNpZ0luZm8uZmF1bHRpbmdBZGRyZXNzOwogICAgICAgICAgICAgZGF0YUxvZ0xu
SWYodmVyYm9zZSwgImNoZWNraW5nIGZhdWx0aW5nIGFkZHJlc3M6ICIsIFJhd1BvaW50ZXIoZmF1
bHRpbmdBZGRyZXNzKSwgIiBpcyBpbiBhbiBhY3RpdmUgZmFzdCBtZW1vcnkiKTsKICAgICAgICAg
ICAgIGZhdWx0ZWRJbkFjdGl2ZUZhc3RNZW1vcnkgPSBXYXNtOjpNZW1vcnk6OmFkZHJlc3NJc0lu
QWN0aXZlRmFzdE1lbW9yeShmYXVsdGluZ0FkZHJlc3MpOwogICAgICAgICB9CkBAIC0xMjQsMTEg
KzEyMywxMSBAQCB2b2lkIGVuYWJsZUZhc3RNZW1vcnkoKQogICAgICAgICAgICAgcmV0dXJuOwog
CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZX0ZBU1RfTUVNT1JZKQotICAgICAgICBpbnN0YWxsU2ln
bmFsSGFuZGxlcihTaWduYWw6OkJ1cywgW10gKGludCBzaWduYWwsIHNpZ2luZm9fdCogc2lnSW5m
bywgdm9pZCogdWNvbnRleHQpIHsKKyAgICAgICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFs
OjpCdXMsIFtdIChTaWduYWwgc2lnbmFsLCBTaWdJbmZvJiBzaWdJbmZvLCBQbGF0Zm9ybVJlZ2lz
dGVycyYgdWNvbnRleHQpIHsKICAgICAgICAgICAgIHJldHVybiB0cmFwSGFuZGxlcihzaWduYWws
IHNpZ0luZm8sIHVjb250ZXh0KTsKICAgICAgICAgfSk7CiAKLSAgICAgICAgaW5zdGFsbFNpZ25h
bEhhbmRsZXIoU2lnbmFsOjpTZWdWLCBbXSAoaW50IHNpZ25hbCwgc2lnaW5mb190KiBzaWdJbmZv
LCB2b2lkKiB1Y29udGV4dCkgeworICAgICAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWw6
OlNlZ1YsIFtdIChTaWduYWwgc2lnbmFsLCBTaWdJbmZvJiBzaWdJbmZvLCBQbGF0Zm9ybVJlZ2lz
dGVycyYgdWNvbnRleHQpIHsKICAgICAgICAgICAgIHJldHVybiB0cmFwSGFuZGxlcihzaWduYWws
IHNpZ0luZm8sIHVjb250ZXh0KTsKICAgICAgICAgfSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21NYWNoaW5lVGhyZWFkcy5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTWFjaGluZVRocmVhZHMuY3BwCmluZGV4IDVhYWM4N2FjYjU3NDdj
N2ZjYTJmOTM2ZWM5Y2Y2NzhiNDMxNzgxNzEuLjBhMzY3ZmQ1ZTIyNTI3ZTljM2M4NzUzNmVjZmQ3
MmIxM2RmNzlkNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21N
YWNoaW5lVGhyZWFkcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1h
Y2hpbmVUaHJlYWRzLmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIk1hY2hpbmVTdGFj
a01hcmtlci5oIgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0
Zi9UaHJlYWRNZXNzYWdlLmg+CisjaW5jbHVkZSA8d3RmL3RocmVhZHMvU2lnbmFscy5oPgogCiBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCkBAIC01Nyw3ICs1OCw3IEBAIHZvaWQg
cmVzZXRJbnN0cnVjdGlvbkNhY2hlT25BbGxUaHJlYWRzKCkKIAogICAgIGNvbnN0IERvdWJseUxp
bmtlZExpc3Q8TWFjaGluZVRocmVhZHM6Ok1hY2hpbmVUaHJlYWQ+JiB0aHJlYWRzID0gd2FzbVRo
cmVhZHMoKS50aHJlYWRzTGlzdEhlYWQobG9ja2VyKTsKICAgICBmb3IgKGNvbnN0IGF1dG8qIHRo
cmVhZCA9IHRocmVhZHMuaGVhZCgpOyB0aHJlYWQ7IHRocmVhZCA9IHRocmVhZC0+bmV4dCgpKSB7
Ci0gICAgICAgIHNlbmRNZXNzYWdlKHRocmVhZC0+bV90aHJlYWQuZ2V0KCksIFtdIChzaWdpbmZv
X3QqLCB1Y29udGV4dF90KikgeworICAgICAgICBzZW5kTWVzc2FnZSh0aHJlYWQtPm1fdGhyZWFk
LmdldCgpLCBbXSAoY29uc3QgUGxhdGZvcm1SZWdpc3RlcnMmKSB7CiAgICAgICAgICAgICAvLyBJ
dCdzIGxpa2VseSB0aGF0IHRoZSBzaWduYWwgaGFuZGxlciB3aWxsIGFscmVhZHkgcmVzZXQgdGhl
IGluc3RydWN0aW9uIGNhY2hlIGJ1dCB3ZSBtaWdodCBhcyB3ZWxsIGJlIHN1cmUuCiAgICAgICAg
ICAgICBXVEY6OmNyb3NzTW9kaWZ5aW5nQ29kZUZlbmNlKCk7CiAgICAgICAgIH0pOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi9Db25maWd1cmF0aW9ucy9XVEYueGNjb25maWcgYi9Tb3VyY2UvV1RG
L0NvbmZpZ3VyYXRpb25zL1dURi54Y2NvbmZpZwppbmRleCA0MjFlZmQ5NjFjMTQ2OGNkMjBkZGM1
YmJmODg5NjIwZWUxY2Y1OGRjLi5hZjE5OWNlYjk1MDZmODk1MGQzM2E5Y2U0ODA3YmE2ZGJiN2Iy
N2U1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NvbmZpZ3VyYXRpb25zL1dURi54Y2NvbmZpZwor
KysgYi9Tb3VyY2UvV1RGL0NvbmZpZ3VyYXRpb25zL1dURi54Y2NvbmZpZwpAQCAtMjcsMyArMjcs
NiBAQCBQUk9EVUNUX05BTUUgPSBXVEY7CiAKIEdDQ19TWU1CT0xTX1BSSVZBVEVfRVhURVJOID0g
WUVTOwogU1RSSVBfSU5TVEFMTEVEX1BST0RVQ1QgPSBOTzsKKworRVhDTFVERURfU09VUkNFX0ZJ
TEVfTkFNRVNfID0gTWFjaEV4Y2VwdGlvbnMuZGVmcworRVhDTFVERURfU09VUkNFX0ZJTEVfTkFN
RVNbc2RrPWlwaG9uZW9zKl0gPSAkKEVYQ0xVREVEX1NPVVJDRV9GSUxFX05BTUVTXyQoVVNFX0lO
VEVSTkFMX1NESykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCA1ZjQ1Mjg3ZjZlM2M2ODg1YjIyYmEyNzc2Y2ZiYzZhMzMyM2JkMDViLi41ODU0NGNjYjYyY2Iy
MjEyYmFlZTc2ZjRkMmEwMWU4OWI2YjdiMDk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTY0LDYgKzY0LDcgQEAKIAkJNTIxODMwMTJDOTlFNDc2QTg0RUVC
RUE4IC8qIFN5bWJvbEltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRjcyQkJEQjEwN0ZBNDI0ODg2MTc4QjlFIC8qIFN5bWJvbEltcGwuY3BwICov
OyB9OwogCQk1MzExQkQ1MzFFQTcxQ0FEMDA1MjUyODEgLyogU2lnbmFscy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzExQkQ1MTFFQTcxQ0FEMDA1
MjUyODEgLyogU2lnbmFscy5jcHAgKi87IH07CiAJCTUzMTFCRDVDMUVBODIyRjkwMDUyNTI4MSAv
KiBUaHJlYWRNZXNzYWdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUzMTFCRDVCMUVBODIyRjkwMDUyNTI4MSAvKiBUaHJlYWRNZXNzYWdlLmNwcCAq
LzsgfTsKKwkJNTM1MzRGMkExRUMwRTEwRTAwMTQxQjJGIC8qIE1hY2hFeGNlcHRpb25zLmRlZnMg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzUzNEYyOTFF
QzBFMTBFMDAxNDFCMkYgLyogTWFjaEV4Y2VwdGlvbnMuZGVmcyAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChDbGllbnQsIFNlcnZlciwgKTsgfTsgfTsKIAkJNzBBOTkzRkUxQUQ3MTUxMzAw
RkE2MTVCIC8qIFN5bWJvbFJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDcwQTk5M0ZDMUFENzE1MTMwMEZBNjE1QiAvKiBTeW1ib2xSZWdp
c3RyeS5jcHAgKi87IH07CiAJCTcwRUNBNjBEMUIwMjQyNjgwMDQ0OTczOSAvKiBBdG9taWNTdHJp
bmdJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDcwRUNBNjBBMUIwMjQyNjgwMDQ0OTczOSAvKiBBdG9taWNTdHJpbmdJbXBsLmNwcCAqLzsgfTsK
IAkJN0FGRUM2QjExRUIyMkI1OTAwREFERTM2IC8qIFVVSUQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FGRUM2QjAxRUIyMkI1OTAwREFERTM2IC8q
IFVVSUQuY3BwICovOyB9OwpAQCAtMjk5LDYgKzMwMCw3IEBACiAJCTUzMTFCRDU3MUVBN0UxQTEw
MDUyNTI4MSAvKiBTaWduYWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNp
Z25hbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMxMUJENTkxRUE4MUE5NjAw
NTI1MjgxIC8qIFRocmVhZE1lc3NhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVGhyZWFkTWVzc2FnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzExQkQ1
QjFFQTgyMkY5MDA1MjUyODEgLyogVGhyZWFkTWVzc2FnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUaHJlYWRNZXNzYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNTM1MzRGMjkxRUMwRTEwRTAwMTQxQjJGIC8qIE1hY2hFeGNlcHRpb25zLmRl
ZnMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLm1pZzsgcGF0aCA9IE1hY2hFeGNlcHRpb25zLmRlZnM7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzOUVCMDYyMUQ1NTI4NDIwMEM4MkVGNyAv
KiBMRUJEZWNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExFQkRlY29k
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNFQzI1M0MxRTk1QUQzMDAwMDgz
MUI5IC8qIFByaW9yaXR5UXVldWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UHJpb3JpdHlRdWV1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NTMwNzFDOTFD
NDA0MjcyMDAzODQ4OTggLyogVGlueUxSVUNhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFRpbnlMUlVDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MTAyMyw2ICsxMDI1LDcgQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTFBNDI4QjhCMUM4Rjg5REQw
MDUxRTlFQiAvKiBBcHBLaXRDb21wYXRpYmlsaXR5RGVjbGFyYXRpb25zLmggKi8sCiAJCQkJMUFD
QUREODIxODg0NDgwMTAwRDhCNzFEIC8qIERlcHJlY2F0ZWRTeW1ib2xzVXNlZEJ5U2FmYXJpLm1t
ICovLAorCQkJCTUzNTM0RjI5MUVDMEUxMEUwMDE0MUIyRiAvKiBNYWNoRXhjZXB0aW9ucy5kZWZz
ICovLAogCQkJCUE4QTQ3MkM1MTUxQTgyNUEwMDQxMjNGRiAvKiBNYWluVGhyZWFkTWFjLm1tICov
LAogCQkJKTsKIAkJCXBhdGggPSBtYWM7CkBAIC0xMzQ2LDYgKzEzNDksNyBAQAogCQkJCTE0M0Y2
MTFGMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEz
QjcyNUVDOTg3NDQ2QUQ5M0YxQTQ0MCAvKiBSYW5kb21EZXZpY2UuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQThBNDc0MTQxNTFBODI1QjAwNDEyM0ZGIC8qIFJhbmRvbU51bWJlci5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQk1MzUzNEYyQTFFQzBFMTBFMDAxNDFCMkYgLyogTWFjaEV4Y2VwdGlvbnMu
ZGVmcyBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDFBMTUxQTgyNUIwMDQxMjNGRiAvKiBSZWZD
b3VudGVkTGVha0NvdW50ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkNERUQwRjMxODExNUM4
NTAwNERCQTcwIC8qIFJ1bkxvb3AuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkNERUQwRUYxODEx
NUMzODAwNERCQTcwIC8qIFJ1bkxvb3BDRi5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmggYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCmlu
ZGV4IDY4NTRhODFlMzk3MjcwNjcwMzRkMDVkYjM5OGE0NzBjMTQyODQyNzYuLjM2Mzg4Mzk1ZDRm
NDNiNDY1Mzg5ZWJjOTgwMmZiYjRkOTBkMjRiN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3Rm
L1BsYXRmb3JtLmgKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaApAQCAtNjYzLDYgKzY2
MywxMCBAQAogI2RlZmluZSBIQVZFX1JFQURMSU5FIDEKICNkZWZpbmUgSEFWRV9TWVNfVElNRUJf
SCAxCiAKKyNpZiBfX2hhc19pbmNsdWRlKDxtYWNoL21hY2hfZXhjLmRlZnM+KSAmJiAhKFBMQVRG
T1JNKFdBVENIT1MpIHx8IFBMQVRGT1JNKEFQUExFVFYpKQorI2RlZmluZSBIQVZFX01BQ0hfRVhD
RVBUSU9OUyAxCisjZW5kaWYKKwogI2lmICFQTEFURk9STShHVEspCiAjZGVmaW5lIFVTRV9BQ0NF
TEVSQVRFIDEKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1SZWdp
c3RlcnMuaCBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtUmVnaXN0ZXJzLmgKaW5kZXggZDViNWFi
YzIyMWJiYWQ4Mjk3NjE5M2VjZTUxYzFjNzYxNzVkYjA2ZC4uODRiZDg5Mzc0OTlkYTk5ZWFhODZi
NzM2OTVmN2M1YjgxYWMyNjBjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1S
ZWdpc3RlcnMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVJlZ2lzdGVycy5oCkBAIC0y
Niw5ICsyNiwxMSBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4K
KyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKICNpZiBPUyhEQVJXSU4pCiAjaW5jbHVk
ZSA8bWFjaC90aHJlYWRfYWN0Lmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CiAjZWxpZiBPUyhXSU5E
T1dTKQogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNlbHNlCkBAIC01NSw2ICs1NywxMSBAQCB0eXBl
ZGVmIGFybV90aHJlYWRfc3RhdGU2NF90IFBsYXRmb3JtUmVnaXN0ZXJzOwogI2Vycm9yIFVua25v
d24gQXJjaGl0ZWN0dXJlCiAjZW5kaWYKIAoraW5saW5lIFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdp
c3RlcnNGcm9tVUNvbnRleHQodWNvbnRleHRfdCogdWNvbnRleHQpCit7CisgICAgcmV0dXJuIHVj
b250ZXh0LT51Y19tY29udGV4dC0+X19zczsKK30KKwogI2VsaWYgT1MoV0lORE9XUykKIAogdXNp
bmcgUGxhdGZvcm1SZWdpc3RlcnMgPSBDT05URVhUOwpAQCAtNjUsNiArNzIsMTEgQEAgc3RydWN0
IFBsYXRmb3JtUmVnaXN0ZXJzIHsKICAgICBtY29udGV4dF90IG1hY2hpbmVDb250ZXh0OwogfTsK
IAoraW5saW5lIFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnNGcm9tVUNvbnRleHQodWNvbnRl
eHRfdCogdWNvbnRleHQpCit7CisgICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8UGxhdGZvcm1SZWdp
c3RlcnMqPigmdWNvbnRleHQtPnVjX21jb250ZXh0KTsKK30KKwogI2Vsc2UKIAogc3RydWN0IFBs
YXRmb3JtUmVnaXN0ZXJzIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1N0YWNrQm91bmRz
LmggYi9Tb3VyY2UvV1RGL3d0Zi9TdGFja0JvdW5kcy5oCmluZGV4IDU1NDYwNGYyYWI0ODRjN2Nm
NzFlZTM4NjMwY2ViNGM3OWMzM2U5NzIuLmNkNjJjMTQ4YTZjN2VmYzk1MTdhOGIwOWI4YTMyYzdm
ZTE5MGNkZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1N0YWNrQm91bmRzLmgKKysrIGIv
U291cmNlL1dURi93dGYvU3RhY2tCb3VuZHMuaApAQCAtNTQsNyArNTQsNiBAQCBwdWJsaWM6CiAg
ICAgICAgIDogbV9vcmlnaW4ob3JpZ2luKQogICAgICAgICAsIG1fYm91bmQoZW5kKQogICAgIHsK
LSAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIH0KIAogICAgIHZvaWQqIG9yaWdpbigp
IGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXIuY3BwIGIvU291
cmNlL1dURi93dGYvVGhyZWFkSG9sZGVyLmNwcAppbmRleCAzMGIyMjdjZGI4YWM1MjYwNzUwYjQ3
ZDQ4MmFiYzJkNTViZTNhYzk0Li45NmQ5MWI1Yjg3ZGRmOTc4ODA1ZGI2ZWIxZjYwZGMwMGUxNDlh
NDg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXIuY3BwCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlci5jcHAKQEAgLTM0LDEyICszNCwxNyBAQAogCiAjaW5j
bHVkZSAiVGhyZWFkaW5nLmgiCiAKKyNpbmNsdWRlIDx3dGYvdGhyZWFkcy9TaWduYWxzLmg+CisK
IG5hbWVzcGFjZSBXVEYgewogCiBUaHJlYWRTcGVjaWZpY0tleSBUaHJlYWRIb2xkZXI6Om1fa2V5
ID0gSW52YWxpZFRocmVhZFNwZWNpZmljS2V5OwogCiBUaHJlYWRIb2xkZXI6On5UaHJlYWRIb2xk
ZXIoKQogeworI2lmIEhBVkUoTUFDSF9FWENFUFRJT05TKQorICAgIHJlbW92ZVRocmVhZCgmbV90
aHJlYWQuZ2V0KCkpOworI2VuZGlmCiAgICAgbV90aHJlYWQtPmRpZEV4aXQoKTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5jcHAgYi9Tb3VyY2UvV1RGL3d0
Zi9UaHJlYWRNZXNzYWdlLmNwcAppbmRleCBmMTRiYzQ1ZDM2MTRjN2M2NjM1ZWIxN2FiMGUyNzI4
MTZhMTM3M2RkLi4wNWIzYjg5ZDVkZDRiM2Q4ZTQzN2Q1MmJhOTMwYTkzMDczYjEzOGIyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRNZXNzYWdlLmNwcAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi9UaHJlYWRNZXNzYWdlLmNwcApAQCAtMzYsNiArMzYsOSBAQAogI2luY2x1ZGUgPHd0Zi9M
b2NrZXIuaD4KICNpbmNsdWRlIDx3dGYvdGhyZWFkcy9TaWduYWxzLmg+CiAKKyNpZiBIQVZFKE1B
Q0hfRVhDRVBUSU9OUykKKyNpbmNsdWRlIDxtYWNoL3RocmVhZF9hY3QuaD4KKyNlbmRpZgogCiBu
YW1lc3BhY2UgV1RGIHsKIApAQCAtODMsMTIgKzg2LDEyIEBAIHZvaWQgaW5pdGlhbGl6ZVRocmVh
ZE1lc3NhZ2VzKCkKIH0KIAogU1VQUFJFU1NfQVNBTgotTWVzc2FnZVN0YXR1cyBzZW5kTWVzc2Fn
ZVNjb3BlZChUaHJlYWQmIHRocmVhZCwgY29uc3QgVGhyZWFkTWVzc2FnZSYgbWVzc2FnZSkKK3N0
YXRpYyBNZXNzYWdlU3RhdHVzIHNlbmRNZXNzYWdlU2lnbmFsKFRocmVhZCYgdGhyZWFkLCBjb25z
dCBUaHJlYWRNZXNzYWdlJiBtZXNzYWdlKQogewogICAgIGNvbnN0ZXhwciBTaWduYWwgc2lnbmFs
ID0gU2lnbmFsOjpVc3I7CiAgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2U7CiAgICAgc3Rk
OjpjYWxsX29uY2Uob25jZSwgW10gewotICAgICAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihzaWdu
YWwsIFtdIChpbnQsIHNpZ2luZm9fdCogaW5mbywgdm9pZCogdWFwKSB7CisgICAgICAgIGluc3Rh
bGxTaWduYWxIYW5kbGVyKHNpZ25hbCwgW10gKFNpZ25hbCwgU2lnSW5mbyYsIFBsYXRmb3JtUmVn
aXN0ZXJzJiBjb250ZXh0KSB7CiAgICAgICAgICAgICBUaHJlYWQqIHRocmVhZCA9IFRocmVhZDo6
Y3VycmVudE1heUJlTnVsbCgpOwogCiAgICAgICAgICAgICBpZiAoIXRocmVhZCkgewpAQCAtOTgs
NyArMTAxLDcgQEAgTWVzc2FnZVN0YXR1cyBzZW5kTWVzc2FnZVNjb3BlZChUaHJlYWQmIHRocmVh
ZCwgY29uc3QgVGhyZWFkTWVzc2FnZSYgbWVzc2FnZSkKIAogICAgICAgICAgICAgLy8gTm9kZSBz
aG91bGQgYmUgZGVsZXRlZCBpbiB0aGUgc2VuZGVyIHRocmVhZC4gRGVsZXRpbmcgTm9kZXMgaW4g
c2lnbmFsIGhhbmRsZXIgY2F1c2VzIGRlYWQgbG9jay4KICAgICAgICAgICAgIHRocmVhZC0+dGhy
ZWFkTWVzc2FnZXMoKS5jb25zdW1lQWxsV2l0aE5vZGUoWyZdIChUaHJlYWRNZXNzYWdlRGF0YSog
ZGF0YSwgTm9kZSogbm9kZSkgewotICAgICAgICAgICAgICAgIGRhdGEtPm1lc3NhZ2UoaW5mbywg
c3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+KHVhcCkpOworICAgICAgICAgICAgICAgIGRhdGEtPm1l
c3NhZ2UoY29udGV4dCk7CiAgICAgICAgICAgICAgICAgLy8gQnkgc2V0dGluZyByYW4gdmFyaWFi
bGUsICgxKSB0aGUgc2VuZGVyIGFja25vd2xlZGdlcyB0aGUgY29tcGxldGlvbiBhbmQKICAgICAg
ICAgICAgICAgICAvLyAoMikgZ2V0cyB0aGUgTm9kZSB0byBiZSBkZWxldGVkLgogICAgICAgICAg
ICAgICAgIGRhdGEtPnJhbi5zdG9yZShub2RlKTsKQEAgLTE1Niw2ICsxNTksNjAgQEAgTWVzc2Fn
ZVN0YXR1cyBzZW5kTWVzc2FnZVNjb3BlZChUaHJlYWQmIHRocmVhZCwgY29uc3QgVGhyZWFkTWVz
c2FnZSYgbWVzc2FnZSkKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCisj
aWYgSEFWRShNQUNIX0VYQ0VQVElPTlMpCitzdGF0aWMgTWVzc2FnZVN0YXR1cyBzZW5kTWVzc2Fn
ZU1hY2goVGhyZWFkJiB0aHJlYWQsIGNvbnN0IFRocmVhZE1lc3NhZ2UmIG1lc3NhZ2UpCit7Cisg
ICAgc3RhdGljIFN0YXRpY0xvY2sgbWVzc2FnZUxvY2s7CisgICAgYXV0byBsb2NraG9sZGVyID0g
aG9sZExvY2sobWVzc2FnZUxvY2spOworCisgICAgYXV0byByZXN1bHQgPSB0aHJlYWQuc3VzcGVu
ZCgpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gTWVzc2FnZVN0YXR1czo6VGhy
ZWFkRXhpdGVkOworCisjaWYgQ1BVKFg4NikKKyAgICB1bnNpZ25lZCB1c2VyQ291bnQgPSBzaXpl
b2YoUGxhdGZvcm1SZWdpc3RlcnMpIC8gc2l6ZW9mKGludCk7CisgICAgdGhyZWFkX3N0YXRlX2Zs
YXZvcl90IGZsYXZvciA9IGkzODZfVEhSRUFEX1NUQVRFOworI2VsaWYgQ1BVKFg4Nl82NCkKKyAg
ICB1bnNpZ25lZCB1c2VyQ291bnQgPSB4ODZfVEhSRUFEX1NUQVRFNjRfQ09VTlQ7CisgICAgdGhy
ZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IHg4Nl9USFJFQURfU1RBVEU2NDsKKyNlbGlmIENQ
VShBUk0pCisgICAgdW5zaWduZWQgdXNlckNvdW50ID0gQVJNX1RIUkVBRF9TVEFURV9DT1VOVDsK
KyAgICB0aHJlYWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9yID0gQVJNX1RIUkVBRF9TVEFURTsKKyNl
bGlmIENQVShBUk02NCkKKyAgICB1bnNpZ25lZCB1c2VyQ291bnQgPSBBUk1fVEhSRUFEX1NUQVRF
NjRfQ09VTlQ7CisgICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IEFSTV9USFJFQURf
U1RBVEU2NDsKKyNlbHNlCisjZXJyb3IgVW5rbm93biBBcmNoaXRlY3R1cmUKKyNlbmRpZgorCisg
ICAgUGxhdGZvcm1SZWdpc3RlcnMgcmVnaXN0ZXJzOworICAgIHRocmVhZF9zdGF0ZV90IHN0YXRl
ID0gcmVpbnRlcnByZXRfY2FzdDx0aHJlYWRfc3RhdGVfdD4oJnJlZ2lzdGVycyk7CisgICAgdGhy
ZWFkX2dldF9zdGF0ZSh0aHJlYWQubWFjaFRocmVhZCgpLCBmbGF2b3IsIHN0YXRlLCAmdXNlckNv
dW50KTsKKworICAgIG1lc3NhZ2UocmVnaXN0ZXJzKTsKKworICAgIHRocmVhZF9zZXRfc3RhdGUo
dGhyZWFkLm1hY2hUaHJlYWQoKSwgZmxhdm9yLCAodGhyZWFkX3N0YXRlX3QpJnJlZ2lzdGVycywg
dXNlckNvdW50KTsKKworICAgIHRocmVhZC5yZXN1bWUoKTsKKyAgICByZXR1cm4gTWVzc2FnZVN0
YXR1czo6TWVzc2FnZVJhbjsKK30KKworc3RhdGljIGJvb2wgdXNlTWFjaCA9IGZhbHNlOwordm9p
ZCBkZWxpdmVyTWVzc2FnZXNVc2luZ01hY2goKSB7IHVzZU1hY2ggPSB0cnVlOyB9CisKKyNlbmRp
ZiAvLyBIQVZFKE1BQ0hfRVhDRVBUSU9OUykKKworTWVzc2FnZVN0YXR1cyBzZW5kTWVzc2FnZVNj
b3BlZChUaHJlYWQmIHRocmVhZCwgY29uc3QgVGhyZWFkTWVzc2FnZSYgbWVzc2FnZSkKK3sKKyNp
ZiBIQVZFKE1BQ0hfRVhDRVBUSU9OUykKKyAgICBpZiAodXNlTWFjaCkKKyAgICAgICAgcmV0dXJu
IHNlbmRNZXNzYWdlTWFjaCh0aHJlYWQsIG1lc3NhZ2UpOworI2VuZGlmCisgICAgcmV0dXJuIHNl
bmRNZXNzYWdlU2lnbmFsKHRocmVhZCwgbWVzc2FnZSk7CisgICAgcmV0dXJuIE1lc3NhZ2VTdGF0
dXM6OlRocmVhZEV4aXRlZDsKK30KKworCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogI2VuZGlmIC8v
IFVTRShQVEhSRUFEUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZE1lc3NhZ2Uu
aCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZE1lc3NhZ2UuaAppbmRleCA5YWU1M2YyOWNmN2U4ZmIw
MGVmOTIxMWQxNmNlMmNkZWQ2MDNlYzFiLi4zMDA0NzJiM2U3MWM0MmVjODk4NzRhM2RlMGZmMzc2
MWNhOTY5MTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRNZXNzYWdlLmgKKysr
IGIvU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5oCkBAIC0zNiw3ICszNiw3IEBAIG5hbWVz
cGFjZSBXVEYgewogdm9pZCBpbml0aWFsaXplVGhyZWFkTWVzc2FnZXMoKTsKIAogY2xhc3MgVGhy
ZWFkTWVzc2FnZURhdGE7Ci11c2luZyBUaHJlYWRNZXNzYWdlID0gU2NvcGVkTGFtYmRhPHZvaWQo
c2lnaW5mb190KiwgdWNvbnRleHRfdCopPjsKK3VzaW5nIFRocmVhZE1lc3NhZ2UgPSBTY29wZWRM
YW1iZGE8dm9pZChQbGF0Zm9ybVJlZ2lzdGVycyYpPjsKIAogZW51bSBjbGFzcyBNZXNzYWdlU3Rh
dHVzIHsKICAgICBNZXNzYWdlUmFuLApAQCAtNTEsMTAgKzUxLDE0IEBAIE1lc3NhZ2VTdGF0dXMg
c2VuZE1lc3NhZ2VTY29wZWQoVGhyZWFkJiwgY29uc3QgVGhyZWFkTWVzc2FnZSYpOwogdGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4KIE1lc3NhZ2VTdGF0dXMgc2VuZE1lc3NhZ2UoVGhyZWFkJiB0
YXJnZXRUaHJlYWQsIGNvbnN0IEZ1bmN0b3ImIGZ1bmMpCiB7Ci0gICAgYXV0byBsYW1iZGEgPSBz
Y29wZWRMYW1iZGFSZWY8dm9pZChzaWdpbmZvX3QqLCB1Y29udGV4dF90Kik+KGZ1bmMpOworICAg
IGF1dG8gbGFtYmRhID0gc2NvcGVkTGFtYmRhUmVmPHZvaWQoUGxhdGZvcm1SZWdpc3RlcnMmKT4o
ZnVuYyk7CiAgICAgcmV0dXJuIHNlbmRNZXNzYWdlU2NvcGVkKHRhcmdldFRocmVhZCwgbGFtYmRh
KTsKIH0KIAorI2lmIEhBVkUoTUFDSF9FWENFUFRJT05TKQordm9pZCBkZWxpdmVyTWVzc2FnZXNV
c2luZ01hY2goKTsKKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjpz
ZW5kTWVzc2FnZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5oIGIvU291
cmNlL1dURi93dGYvVGhyZWFkaW5nLmgKaW5kZXggZDJlNTM2ZGY3YTg2OTZkOGU2Yjk1YmE0M2Ux
NzNkM2I1NTBiZjE2YS4uMzUxNGU4YzA5ZjBmYzk0ZDUzNGJlMmYzYjZlN2M0OTUwZTBiY2YwNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmgKKysrIGIvU291cmNlL1dURi93
dGYvVGhyZWFkaW5nLmgKQEAgLTEzOCw2ICsxMzgsMTAgQEAgcHVibGljOgogCiAjaWYgVVNFKFBU
SFJFQURTKQogICAgIExvY2tsZXNzQmFnPFRocmVhZE1lc3NhZ2VEYXRhKj4mIHRocmVhZE1lc3Nh
Z2VzKCkgeyByZXR1cm4gbV90aHJlYWRNZXNzYWdlczsgfQorCisjaWYgT1MoREFSV0lOKQorICAg
IG1hY2hfcG9ydF90IG1hY2hUaHJlYWQoKSB7IHJldHVybiBtX3BsYXRmb3JtVGhyZWFkOyB9Cisj
ZW5kaWYKICNlbmRpZgogCiBwcm90ZWN0ZWQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9t
YWMvTWFjaEV4Y2VwdGlvbnMuZGVmcyBiL1NvdXJjZS9XVEYvd3RmL21hYy9NYWNoRXhjZXB0aW9u
cy5kZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjQyMDU3NDJhNGVkNTAwZjgwNjRmZWViNDk1NWE3Yzk3MGQ5OWFm
MGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9tYWMvTWFjaEV4Y2VwdGlvbnMu
ZGVmcwpAQCAtMCwwICsxLDI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgPG1hY2gvbWFjaF9leGMuZGVmcz4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL3RocmVhZHMvU2lnbmFscy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi90aHJlYWRz
L1NpZ25hbHMuY3BwCmluZGV4IDg1NWIyOGIzMTcyMTcyN2NmMWY0MzFhOTE4YTI1MWRjMmU2YTNk
ZmMuLjE3NjQ3M2I5OWJjMzRjMmVlY2Q3MjA3NmYxYTQ2YTIyY2NhY2UzNTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL3RocmVhZHMvU2lnbmFscy5jcHAKKysrIGIvU291cmNlL1dURi93dGYv
dGhyZWFkcy9TaWduYWxzLmNwcApAQCAtMjgsMjEgKzI4LDI2NCBAQAogCiAjaWYgVVNFKFBUSFJF
QURTKQogCisjaWYgSEFWRShNQUNIX0VYQ0VQVElPTlMpCitleHRlcm4gIkMiIHsKKyNpbmNsdWRl
ICJNYWNoRXhjZXB0aW9uc1NlcnZlci5oIgorfTsKKyNlbmRpZgorCiAjaW5jbHVkZSA8Y3N0ZGlv
PgogI2luY2x1ZGUgPG11dGV4PgogI2luY2x1ZGUgPHNpZ25hbC5oPgorCisjaWYgSEFWRShNQUNI
X0VYQ0VQVElPTlMpCisjaW5jbHVkZSA8bWFjaC9tYWNoLmg+CisjaW5jbHVkZSA8bWFjaC90aHJl
YWRfYWN0Lmg+CisjZW5kaWYKKwogI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CiAjaW5jbHVkZSA8
d3RmL0RhdGFMb2cuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9M
b2NrbGVzc0JhZy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUg
PHd0Zi9UaHJlYWRNZXNzYWdlLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCiAKIG5h
bWVzcGFjZSBXVEYgewogCisgICAgCiBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPExvY2tsZXNz
QmFnPFNpZ25hbEhhbmRsZXI+PiBoYW5kbGVyc1tzdGF0aWNfY2FzdDxzaXplX3Q+KFNpZ25hbDo6
TnVtYmVyT2ZTaWduYWxzKV0gPSB7IH07Ci1zdGF0aWMgc3RydWN0IHNpZ2FjdGlvbiBvbGRBY3Rp
b25zW3N0YXRpY19jYXN0PHNpemVfdD4oU2lnbmFsOjpOdW1iZXJPZlNpZ25hbHMpXTsKIHN0YXRp
YyBzdGQ6Om9uY2VfZmxhZyBpbml0aWFsaXplT25jZUZsYWdzW3N0YXRpY19jYXN0PHNpemVfdD4o
U2lnbmFsOjpOdW1iZXJPZlNpZ25hbHMpXTsKK3N0YXRpYyBzdHJ1Y3Qgc2lnYWN0aW9uIG9sZEFj
dGlvbnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihTaWduYWw6Ok51bWJlck9mU2lnbmFscyldOworCisj
aWYgSEFWRShNQUNIX0VYQ0VQVElPTlMpCitzdGF0aWMgbWFjaF9wb3J0X3QgZXhjZXB0aW9uUG9y
dDsKK3N0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG1heE1lc3NhZ2VTaXplID0gMSAqIEtCOworCitz
dGF0aWMgdm9pZCBzdGFydE1hY2hFeGNlcHRpb25IYW5kbGVyVGhyZWFkKCkKK3sKKyAgICBzdGF0
aWMgc3RkOjpvbmNlX2ZsYWcgb25jZTsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlLCBbXSB7Cisg
ICAgICAgIGlmIChtYWNoX3BvcnRfYWxsb2NhdGUobWFjaF90YXNrX3NlbGYoKSwgTUFDSF9QT1JU
X1JJR0hUX1JFQ0VJVkUsICZleGNlcHRpb25Qb3J0KSAhPSBLRVJOX1NVQ0NFU1MpCisgICAgICAg
ICAgICBDUkFTSCgpOworCisgICAgICAgIGlmIChtYWNoX3BvcnRfaW5zZXJ0X3JpZ2h0KG1hY2hf
dGFza19zZWxmKCksIGV4Y2VwdGlvblBvcnQsIGV4Y2VwdGlvblBvcnQsIE1BQ0hfTVNHX1RZUEVf
TUFLRV9TRU5EKSE9IEtFUk5fU1VDQ0VTUykKKyAgICAgICAgICAgIENSQVNIKCk7CisKKyAgICAg
ICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBhIGRpc3BhdGNoIHF1ZXVlLgorICAgICAgICAo
dm9pZClUaHJlYWQ6OmNyZWF0ZSgKKyAgICAgICAgICAgICJXVEYgTWFjaCBFeGNlcHRpb24gVGhy
ZWFkIiwgW10gKCkgeworICAgICAgICAgICAgICAgIHVuaW9uIE1lc3NhZ2UgeworICAgICAgICAg
ICAgICAgICAgICBtYWNoX21zZ19oZWFkZXJfdCBoZWFkZXI7CisgICAgICAgICAgICAgICAgICAg
IGNoYXIgZGF0YVttYXhNZXNzYWdlU2l6ZV07CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAg
ICAgICAgICBNZXNzYWdlIG1lc3NhZ2VIZWFkZXJJbjsKKyAgICAgICAgICAgICAgICBNZXNzYWdl
IG1lc3NhZ2VIZWFkZXJPdXQ7CisKKyAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAg
ICAgICAgICAgICAgICAgICBrZXJuX3JldHVybl90IG1lc3NhZ2VSZXN1bHQgPSBtYWNoX21zZygm
bWVzc2FnZUhlYWRlckluLmhlYWRlciwgTUFDSF9SQ1ZfTVNHLCAwLCBtYXhNZXNzYWdlU2l6ZSwg
ZXhjZXB0aW9uUG9ydCwgTUFDSF9NU0dfVElNRU9VVF9OT05FLCBNQUNIX1BPUlRfTlVMTCk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlUmVzdWx0ID09IEtFUk5fU1VDQ0VTUykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtYWNoX2V4Y19zZXJ2ZXIoJm1lc3NhZ2VIZWFk
ZXJJbi5oZWFkZXIsICZtZXNzYWdlSGVhZGVyT3V0LmhlYWRlcikpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ1JBU0goKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZVJl
c3VsdCA9IG1hY2hfbXNnKCZtZXNzYWdlSGVhZGVyT3V0LmhlYWRlciwgTUFDSF9TRU5EX01TRywg
bWVzc2FnZUhlYWRlck91dC5oZWFkZXIubXNnaF9zaXplLCAwLCBtZXNzYWdlSGVhZGVyT3V0Lmhl
YWRlci5tc2doX2xvY2FsX3BvcnQsIDAsIE1BQ0hfUE9SVF9OVUxMKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1lc3NhZ2VSZXN1bHQgPT0gS0VSTl9TVUNDRVNTKTsK
KyAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nTG4oIkZhaWxlZCB0byByZWNlaXZlIG1hY2ggbWVzc2FnZSBkdWUgdG8gIiwgbWFjaF9lcnJv
cl9zdHJpbmcobWVzc2FnZVJlc3VsdCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfSku
bGVha1JlZigpOworICAgIH0pOworfQorCitzdGF0aWMgU2lnbmFsIGZyb21NYWNoRXhjZXB0aW9u
KGV4Y2VwdGlvbl90eXBlX3QgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNl
IEVYQ19CQURfQUNDRVNTOiByZXR1cm4gU2lnbmFsOjpTZWdWOworICAgIGNhc2UgRVhDX0JBRF9J
TlNUUlVDVElPTjogcmV0dXJuIFNpZ25hbDo6SWxsOworICAgIGNhc2UgRVhDX0JSRUFLUE9JTlQ6
IHJldHVybiBTaWduYWw6OlRyYXA7CisgICAgZGVmYXVsdDogYnJlYWs7CisgICAgfQorICAgIHJl
dHVybiBTaWduYWw6OlVua25vd247Cit9CisKK3N0YXRpYyBleGNlcHRpb25fbWFza190IHRvTWFj
aE1hc2soU2lnbmFsIHNpZ25hbCkKK3sKKyAgICBzd2l0Y2ggKHNpZ25hbCkgeworICAgIGNhc2Ug
U2lnbmFsOjpTZWdWOiByZXR1cm4gRVhDX01BU0tfQkFEX0FDQ0VTUzsKKyAgICBjYXNlIFNpZ25h
bDo6SWxsOiByZXR1cm4gRVhDX01BU0tfQkFEX0lOU1RSVUNUSU9OOworICAgIGNhc2UgU2lnbmFs
OjpUcmFwOiByZXR1cm4gRVhDX01BU0tfQlJFQUtQT0lOVDsKKyAgICBkZWZhdWx0OiBicmVhazsK
KyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworZXh0ZXJuICJD
IiB7CisKKy8vIFdlIG5lZWQgdG8gaW1wbGVtZW50IHN0dWJzIGZvciBjYXRjaF9tYWNoX2V4Y2Vw
dGlvbl9yYWlzZSBhbmQgY2F0Y2hfbWFjaF9leGNlcHRpb25fcmFpc2Vfc3RhdGVfaWRlbnRpdHku
CisvLyBUaGUgTWlHIGdlbmVyYXRlZCBmaWxlIHdpbGwgZmFpbCB0byBsaW5rIG90aGVyd2lzZSwg
ZXZlbiB0aG91Z2ggd2UgZG9uJ3QgdXNlIHRoZSBmdW5jdGlvbnMuIE9ubHkgdGhlCisvLyBjYXRj
aF9tYWNoX2V4Y2VwdGlvbl9yYWlzZV9zdGF0ZSBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGJl
Y2F1c2Ugd2UgcGFzcyBFWENFUFRJT05fU1RBVEUgdG8KKy8vIHRocmVhZF9zZXRfZXhjZXB0aW9u
X3BvcnRzLgora2Vybl9yZXR1cm5fdCBjYXRjaF9tYWNoX2V4Y2VwdGlvbl9yYWlzZShtYWNoX3Bv
cnRfdCwgbWFjaF9wb3J0X3QsIG1hY2hfcG9ydF90LCBleGNlcHRpb25fdHlwZV90LCBtYWNoX2V4
Y2VwdGlvbl9kYXRhX3QsIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QpCit7CisgICAgZGF0YUxvZ0xu
KCJXZSBzaG91bGQgbm90IGhhdmUgY2FsbGVkIGNhdGNoX2V4Y2VwdGlvbl9yYWlzZSgpLCBwbGVh
c2UgZmlsZSBhIGJ1ZyBhdCBidWdzLndlYmtpdC5vcmciKTsKKyAgICByZXR1cm4gS0VSTl9GQUlM
VVJFOworfQorCitrZXJuX3JldHVybl90IGNhdGNoX21hY2hfZXhjZXB0aW9uX3JhaXNlX3N0YXRl
X2lkZW50aXR5KG1hY2hfcG9ydF90LCBtYWNoX3BvcnRfdCwgbWFjaF9wb3J0X3QsIGV4Y2VwdGlv
bl90eXBlX3QsIG1hY2hfZXhjZXB0aW9uX2RhdGFfdCwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCwg
aW50KiwgdGhyZWFkX3N0YXRlX3QsIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QsIHRocmVhZF9zdGF0
ZV90LCAgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCopCit7CisgICAgZGF0YUxvZ0xuKCJXZSBzaG91
bGQgbm90IGhhdmUgY2FsbGVkIGNhdGNoX21hY2hfZXhjZXB0aW9uX3JhaXNlX3N0YXRlX2lkZW50
aXR5LCBwbGVhc2UgZmlsZSBhIGJ1ZyBhdCBidWdzLndlYmtpdC5vcmciKTsKKyAgICByZXR1cm4g
S0VSTl9GQUlMVVJFOworfQorCitrZXJuX3JldHVybl90IGNhdGNoX21hY2hfZXhjZXB0aW9uX3Jh
aXNlX3N0YXRlKAorICAgIG1hY2hfcG9ydF90IHBvcnQsCisgICAgZXhjZXB0aW9uX3R5cGVfdCBl
eGNlcHRpb25UeXBlLAorICAgIGNvbnN0IG1hY2hfZXhjZXB0aW9uX2RhdGFfdCBleGNlcHRpb25E
YXRhLAorICAgIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QgZGF0YUNvdW50LAorICAgIGludCogc3Rh
dGVGbGF2b3IsCisgICAgY29uc3QgdGhyZWFkX3N0YXRlX3QgaW5TdGF0ZSwKKyAgICBtYWNoX21z
Z190eXBlX251bWJlcl90IGluU3RhdGVDb3VudCwKKyAgICB0aHJlYWRfc3RhdGVfdCBvdXRTdGF0
ZSwKKyAgICBtYWNoX21zZ190eXBlX251bWJlcl90KiBvdXRTdGF0ZUNvdW50KQoreworICAgIFJF
TEVBU0VfQVNTRVJUKHBvcnQgPT0gZXhjZXB0aW9uUG9ydCk7CisgICAgU2lnbmFsIHNpZ25hbCA9
IGZyb21NYWNoRXhjZXB0aW9uKGV4Y2VwdGlvblR5cGUpOworICAgIGRhdGFMb2dMbigicmVjZWl2
ZWRTaWduYWwgIiwgZXhjZXB0aW9uVHlwZSk7CisgICAgZGF0YUxvZ0xuKCJUaHJlYWQ6ICIsIGV4
Y2VwdGlvbkRhdGFbMF0pOworICAgIFJFTEVBU0VfQVNTRVJUKHNpZ25hbCAhPSBTaWduYWw6OlVu
a25vd24pOworCisgICAgbWVtY3B5KG91dFN0YXRlLCBpblN0YXRlLCBpblN0YXRlQ291bnQgKiBz
aXplb2YoaW5TdGF0ZVswXSkpOworICAgICpvdXRTdGF0ZUNvdW50ID0gaW5TdGF0ZUNvdW50Owor
CisjaWYgQ1BVKFg4Nl82NCkKKyAgICBSRUxFQVNFX0FTU0VSVCgqc3RhdGVGbGF2b3IgPT0geDg2
X1RIUkVBRF9TVEFURSk7CisgICAgUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVycyA9IHJlaW50
ZXJwcmV0X2Nhc3Q8eDg2X3RocmVhZF9zdGF0ZV90Kj4ob3V0U3RhdGUpLT51dHMudHM2NDsKKyNl
bGlmIENQVShYODYpCisgICAgUkVMRUFTRV9BU1NFUlQoKnN0YXRlRmxhdm9yID09IHg4Nl9USFJF
QURfU1RBVEUpOworICAgIFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMgPSByZWludGVycHJl
dF9jYXN0PHg4Nl90aHJlYWRfc3RhdGVfdCo+KG91dFN0YXRlKS0+dXRzLnRzMzI7CisjZWxpZiBD
UFUoQVJNNjQpCisgICAgUkVMRUFTRV9BU1NFUlQoKnN0YXRlRmxhdm9yID09IEFSTV9USFJFQURf
U1RBVEUpOworICAgIFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMgPSByZWludGVycHJldF9j
YXN0PGFybV91bmlmaWVkX3RocmVhZF9zdGF0ZSo+KG91dFN0YXRlKS0+dHNfNjQ7CisjZWxpZiBD
UFUoQVJNKQorICAgIFJFTEVBU0VfQVNTRVJUKCpzdGF0ZUZsYXZvciA9PSBBUk1fVEhSRUFEX1NU
QVRFKTsKKyAgICBQbGF0Zm9ybVJlZ2lzdGVycyYgcmVnaXN0ZXJzID0gcmVpbnRlcnByZXRfY2Fz
dDxhcm1fdW5pZmllZF90aHJlYWRfc3RhdGUqPihvdXRTdGF0ZSktPnRzXzMyOworI2VuZGlmCisK
KyAgICBTaWdJbmZvIGluZm87CisgICAgaWYgKHNpZ25hbCA9PSBTaWduYWw6OlNlZ1YpIHsKKyAg
ICAgICAgQVNTRVJUX1VOVVNFRChkYXRhQ291bnQsIGRhdGFDb3VudCA9PSAyKTsKKyAgICAgICAg
aW5mby5mYXVsdGluZ0FkZHJlc3MgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihleGNlcHRpb25E
YXRhWzFdKTsKKyAgICB9CisKKyAgICBib29sIGRpZEhhbmRsZSA9IGZhbHNlOworICAgIGhhbmRs
ZXJzW3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0tPml0ZXJhdGUoWyZdIChjb25zdCBTaWdu
YWxIYW5kbGVyJiBoYW5kbGVyKSB7CisgICAgICAgIFNpZ25hbEFjdGlvbiBoYW5kbGVyUmVzdWx0
ID0gaGFuZGxlcihzaWduYWwsIGluZm8sIHJlZ2lzdGVycyk7CisgICAgICAgIGRhdGFMb2dMbihz
dGF0aWNfY2FzdDxpbnQ+KGhhbmRsZXJSZXN1bHQpKTsKKyAgICAgICAgc3dpdGNoIChoYW5kbGVy
UmVzdWx0KSB7CisgICAgICAgIGNhc2UgU2lnbmFsQWN0aW9uOjpIYW5kbGVkOgorICAgICAgICAg
ICAgZGlkSGFuZGxlID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIGlmIChkaWRI
YW5kbGUpCisgICAgICAgIHJldHVybiBLRVJOX1NVQ0NFU1M7CisgICAgcmV0dXJuIEtFUk5fRkFJ
TFVSRTsKK30KKworfTsKKworc3RhdGljIGJvb2wgdXNlTWFjaCB7IGZhbHNlIH07Cit2b2lkIGhh
bmRsZVNpZ25hbHNXaXRoTWFjaCgpCit7CisgICAgZGVsaXZlck1lc3NhZ2VzVXNpbmdNYWNoKCk7
CisgICAgdXNlTWFjaCA9IHRydWU7Cit9CisKKworc3RhdGljIFN0YXRpY0xvY2sgdGhyZWFkTG9j
azsKK2V4Y2VwdGlvbl9tYXNrX3QgYWN0aXZlRXhjZXB0aW9ucyB7IDAgfTsKKworaW5saW5lIHZv
aWQgc2V0RXhjZXB0aW9uUG9ydHMoY29uc3QgQWJzdHJhY3RMb2NrZXImLCBUaHJlYWQqIHRocmVh
ZCkKK3sKKyAgICBrZXJuX3JldHVybl90IHJlc3VsdCA9IHRocmVhZF9zZXRfZXhjZXB0aW9uX3Bv
cnRzKHRocmVhZC0+bWFjaFRocmVhZCgpLCBhY3RpdmVFeGNlcHRpb25zLCBleGNlcHRpb25Qb3J0
LCBFWENFUFRJT05fU1RBVEUgfCBNQUNIX0VYQ0VQVElPTl9DT0RFUywgTUFDSElORV9USFJFQURf
U1RBVEUpOworICAgIGlmIChyZXN1bHQgIT0gS0VSTl9TVUNDRVNTKSB7CisgICAgICAgIGRhdGFM
b2dMbigidGhyZWFkIHNldCBwb3J0IGZhaWxlZCBkdWUgdG8gIiwgbWFjaF9lcnJvcl9zdHJpbmco
cmVzdWx0KSk7CisgICAgICAgIENSQVNIKCk7CisgICAgfQorfQorCitpbmxpbmUgSGFzaFNldDxU
aHJlYWQqPiYgYWN0aXZlVGhyZWFkcyhjb25zdCBBYnN0cmFjdExvY2tlciYpCit7CisgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPEhhc2hTZXQ8VGhyZWFkKj4+IGFjdGl2ZVRocmVhZHM7CisgICAg
cmV0dXJuIGFjdGl2ZVRocmVhZHM7Cit9CisKK3ZvaWQgcmVnaXN0ZXJUaHJlYWQoVGhyZWFkKiB0
aHJlYWQpCit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayh0aHJlYWRMb2NrKTsKKyAgICBh
dXRvIHJlc3VsdCA9IGFjdGl2ZVRocmVhZHMobG9ja2VyKS5hZGQodGhyZWFkKTsKKworICAgIGlm
IChyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgc2V0RXhjZXB0aW9uUG9ydHMobG9ja2VyLCB0
aHJlYWQpOworfQorCit2b2lkIHJlbW92ZVRocmVhZChUaHJlYWQqIHRocmVhZCkKK3sKKyAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKHRocmVhZExvY2spOworICAgIGFjdGl2ZVRocmVhZHMobG9j
a2VyKS5yZW1vdmUodGhyZWFkKTsKK30KIAotc3RhdGljIHZvaWQganNjU2lnbmFsSGFuZGxlcihp
bnQgc2lnLCBzaWdpbmZvX3QqIGluZm8sIHZvaWQqIG1jb250ZXh0KQorI2Vsc2UKK3N0YXRpYyBj
b25zdGV4cHIgYm9vbCB1c2VNYWNoID0gZmFsc2U7CisjZW5kaWYgLy8gSEFWRShNQUNIX0VYQ0VQ
VElPTlMpCisKK3N0YXRpYyB2b2lkIGpzY1NpZ25hbEhhbmRsZXIoaW50LCBzaWdpbmZvX3QqLCB2
b2lkKik7CisKK3ZvaWQgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFsIHNpZ25hbCwgU2lnbmFs
SGFuZGxlciYmIGhhbmRsZXIpCit7CisgICAgQVNTRVJUKHNpZ25hbCA8IFNpZ25hbDo6VW5rbm93
bik7CisjaWYgSEFWRShNQUNIX0VYQ0VQVElPTlMpCisgICAgaWYgKHNpZ25hbCA9PSBTaWduYWw6
OkJ1cyAmJiAhdXNlTWFjaCkKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVCghdXNlTWFjaCB8
fCBzaWduYWwgIT0gU2lnbmFsOjpVc3IpOworCisgICAgaWYgKHVzZU1hY2gpCisgICAgICAgIHN0
YXJ0TWFjaEV4Y2VwdGlvbkhhbmRsZXJUaHJlYWQoKTsKKyNlbmRpZgorCisgICAgc3RkOjpjYWxs
X29uY2UoaW5pdGlhbGl6ZU9uY2VGbGFnc1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNpZ25hbCldLCBb
Jl0geworICAgICAgICBoYW5kbGVyc1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNpZ25hbCldLmNvbnN0
cnVjdCgpOworCisgICAgICAgIGlmICghdXNlTWFjaCkgeworICAgICAgICAgICAgc3RydWN0IHNp
Z2FjdGlvbiBhY3Rpb247CisgICAgICAgICAgICBhY3Rpb24uc2Ffc2lnYWN0aW9uID0ganNjU2ln
bmFsSGFuZGxlcjsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gc2lnZmlsbHNldCgmYWN0aW9u
LnNhX21hc2spOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXJlc3VsdCk7CisgICAgICAg
ICAgICBhY3Rpb24uc2FfZmxhZ3MgPSBTQV9TSUdJTkZPOworICAgICAgICAgICAgcmVzdWx0ID0g
c2lnYWN0aW9uKHRvU3lzdGVtU2lnbmFsKHNpZ25hbCksICZhY3Rpb24sICZvbGRBY3Rpb25zW3N0
YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0pOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
IXJlc3VsdCk7CisgICAgICAgIH0KKworICAgIH0pOworCisgICAgaGFuZGxlcnNbc3RhdGljX2Nh
c3Q8c2l6ZV90PihzaWduYWwpXS0+YWRkKFdURk1vdmUoaGFuZGxlcikpOworCisjaWYgSEFWRShN
QUNIX0VYQ0VQVElPTlMpCisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayh0aHJlYWRMb2NrKTsK
KyAgICBpZiAodXNlTWFjaCkgeworICAgICAgICBhY3RpdmVFeGNlcHRpb25zIHw9IHRvTWFjaE1h
c2soc2lnbmFsKTsKKworICAgICAgICBmb3IgKFRocmVhZCogdGhyZWFkIDogYWN0aXZlVGhyZWFk
cyhsb2NrZXIpKQorICAgICAgICAgICAgc2V0RXhjZXB0aW9uUG9ydHMobG9ja2VyLCB0aHJlYWQp
OworICAgIH0KKyNlbmRpZgorfQorCit2b2lkIGpzY1NpZ25hbEhhbmRsZXIoaW50IHNpZywgc2ln
aW5mb190KiBpbmZvLCB2b2lkKiB1Y29udGV4dCkKIHsKICAgICBTaWduYWwgc2lnbmFsID0gZnJv
bVN5c3RlbVNpZ25hbChzaWcpOwogCkBAIC02MiwxMCArMzA1LDE2IEBAIHN0YXRpYyB2b2lkIGpz
Y1NpZ25hbEhhbmRsZXIoaW50IHNpZywgc2lnaW5mb190KiBpbmZvLCB2b2lkKiBtY29udGV4dCkK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIFNpZ0luZm8gc2lnSW5mbzsKKyAgICBpZiAo
c2lnbmFsID09IFNpZ25hbDo6U2VnViB8fCBzaWduYWwgPT0gU2lnbmFsOjpCdXMpCisgICAgICAg
IHNpZ0luZm8uZmF1bHRpbmdBZGRyZXNzID0gaW5mby0+c2lfYWRkcjsKKworICAgIFBsYXRmb3Jt
UmVnaXN0ZXJzJiByZWdpc3RlcnMgPSByZWdpc3RlcnNGcm9tVUNvbnRleHQocmVpbnRlcnByZXRf
Y2FzdDx1Y29udGV4dF90Kj4odWNvbnRleHQpKTsKKwogICAgIGJvb2wgZGlkSGFuZGxlID0gZmFs
c2U7CiAgICAgYm9vbCByZXN0b3JlRGVmYXVsdEhhbmRsZXIgPSBmYWxzZTsKICAgICBoYW5kbGVy
c1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNpZ25hbCldLT5pdGVyYXRlKFsmXSAoY29uc3QgU2lnbmFs
SGFuZGxlciYgaGFuZGxlcikgewotICAgICAgICBzd2l0Y2ggKGhhbmRsZXIoc2lnLCBpbmZvLCBt
Y29udGV4dCkpIHsKKyAgICAgICAgc3dpdGNoIChoYW5kbGVyKHNpZ25hbCwgc2lnSW5mbywgcmVn
aXN0ZXJzKSkgewogICAgICAgICBjYXNlIFNpZ25hbEFjdGlvbjo6SGFuZGxlZDoKICAgICAgICAg
ICAgIGRpZEhhbmRsZSA9IHRydWU7CiAgICAgICAgICAgICBicmVhazsKQEAgLTg1LDEzICszMzQs
MTMgQEAgc3RhdGljIHZvaWQganNjU2lnbmFsSGFuZGxlcihpbnQgc2lnLCBzaWdpbmZvX3QqIGlu
Zm8sIHZvaWQqIG1jb250ZXh0KQogICAgIHN0cnVjdCBzaWdhY3Rpb24mIG9sZEFjdGlvbiA9IG9s
ZEFjdGlvbnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzaWduYWwpXTsKICAgICBpZiAoc2lnbmFsID09
IFNpZ25hbDo6VXNyKSB7CiAgICAgICAgIGlmIChvbGRBY3Rpb24uc2Ffc2lnYWN0aW9uKQotICAg
ICAgICAgICAgb2xkQWN0aW9uLnNhX3NpZ2FjdGlvbihzaWcsIGluZm8sIG1jb250ZXh0KTsKKyAg
ICAgICAgICAgIG9sZEFjdGlvbi5zYV9zaWdhY3Rpb24oc2lnLCBpbmZvLCB1Y29udGV4dCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoIWRpZEhhbmRsZSkgewogICAgICAgICBp
ZiAob2xkQWN0aW9uLnNhX3NpZ2FjdGlvbikgewotICAgICAgICAgICAgb2xkQWN0aW9uLnNhX3Np
Z2FjdGlvbihzaWcsIGluZm8sIG1jb250ZXh0KTsKKyAgICAgICAgICAgIG9sZEFjdGlvbi5zYV9z
aWdhY3Rpb24oc2lnLCBpbmZvLCB1Y29udGV4dCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KIApAQCAtMTAwLDI0ICszNDksNiBAQCBzdGF0aWMgdm9pZCBqc2NTaWduYWxIYW5kbGVy
KGludCBzaWcsIHNpZ2luZm9fdCogaW5mbywgdm9pZCogbWNvbnRleHQpCiAgICAgfQogfQogCi12
b2lkIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbCBzaWduYWwsIFNpZ25hbEhhbmRsZXImJiBo
YW5kbGVyKQotewotICAgIEFTU0VSVChzaWduYWwgPCBTaWduYWw6OlVua25vd24pOwotICAgIHN0
ZDo6Y2FsbF9vbmNlKGluaXRpYWxpemVPbmNlRmxhZ3Nbc3RhdGljX2Nhc3Q8c2l6ZV90PihzaWdu
YWwpXSwgWyZdIHsKLSAgICAgICAgaGFuZGxlcnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzaWduYWwp
XS5jb25zdHJ1Y3QoKTsKLQotICAgICAgICBzdHJ1Y3Qgc2lnYWN0aW9uIGFjdGlvbjsKLSAgICAg
ICAgYWN0aW9uLnNhX3NpZ2FjdGlvbiA9IGpzY1NpZ25hbEhhbmRsZXI7Ci0gICAgICAgIGF1dG8g
cmVzdWx0ID0gc2lnZmlsbHNldCgmYWN0aW9uLnNhX21hc2spOwotICAgICAgICBSRUxFQVNFX0FT
U0VSVCghcmVzdWx0KTsKLSAgICAgICAgYWN0aW9uLnNhX2ZsYWdzID0gU0FfU0lHSU5GTzsKLSAg
ICAgICAgcmVzdWx0ID0gc2lnYWN0aW9uKHRvU3lzdGVtU2lnbmFsKHNpZ25hbCksICZhY3Rpb24s
ICZvbGRBY3Rpb25zW3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0pOwotICAgICAgICBSRUxF
QVNFX0FTU0VSVCghcmVzdWx0KTsKLSAgICB9KTsKLQotICAgIGhhbmRsZXJzW3N0YXRpY19jYXN0
PHNpemVfdD4oc2lnbmFsKV0tPmFkZChXVEZNb3ZlKGhhbmRsZXIpKTsKLX0KLQogfSAvLyBuYW1l
c3BhY2UgV1RGCiAKICNlbmRpZiAvLyBVU0UoUFRIUkVBRFMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi90aHJlYWRzL1NpZ25hbHMuaCBiL1NvdXJjZS9XVEYvd3RmL3RocmVhZHMvU2lnbmFs
cy5oCmluZGV4IDFlNGViNDZlYWE3NzRhMWVlODlmNmZiMmRhZWYzMzI2OGNlNTY3NzkuLmFjYTZi
MzRmODE2ZjAxNzY5MzAwMzZjMThiODIxYzI3YWJiMGU2MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvd3RmL3RocmVhZHMvU2lnbmFscy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RocmVhZHMvU2ln
bmFscy5oCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlIDxzaWduYWwuaD4KICNpbmNsdWRl
IDx3dGYvRnVuY3Rpb24uaD4KKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm1SZWdpc3RlcnMuaD4KIAog
bmFtZXNwYWNlIFdURiB7CiAKQEAgLTc5LDcgKzgwLDExIEBAIGVudW0gY2xhc3MgU2lnbmFsQWN0
aW9uIHsKICAgICBGb3JjZURlZmF1bHQKIH07CiAKLXVzaW5nIFNpZ25hbEhhbmRsZXIgPSBGdW5j
dGlvbjxTaWduYWxBY3Rpb24oaW50LCBzaWdpbmZvX3QqLCB2b2lkKik+Oworc3RydWN0IFNpZ0lu
Zm8geworICAgIHZvaWQqIGZhdWx0aW5nQWRkcmVzcyB7IDAgfTsKK307CisKK3VzaW5nIFNpZ25h
bEhhbmRsZXIgPSBGdW5jdGlvbjxTaWduYWxBY3Rpb24oU2lnbmFsLCBTaWdJbmZvJiwgUGxhdGZv
cm1SZWdpc3RlcnMmKT47CiAKIC8vIENhbGwgdGhpcyBtZXRob2Qgd2hlbmV2ZXIgeW91IHdhbnQg
dG8gaW5zdGFsbCBhIHNpZ25hbCBoYW5kbGVyLiBJdCdzIG9rIHRvIGNhbGwgdGhpcyBmdW5jdGlv
biBsYXppbHkuCiAvLyBOb3RlOiBZb3VyIHNpZ25hbCBoYW5kbGVyIHdpbGwgYmUgY2FsbGVkIGV2
ZXJ5IHRpbWUgdGhlIGhhbmRsZXIgZm9yIHRoZSBkZXNpcmVkIHNpZ25hbCBpcyBjYWxsZWQuCkBA
IC04Nyw5ICs5MiwxOSBAQCB1c2luZyBTaWduYWxIYW5kbGVyID0gRnVuY3Rpb248U2lnbmFsQWN0
aW9uKGludCwgc2lnaW5mb190Kiwgdm9pZCopPjsKIC8vIFRoaXMgZnVuY3Rpb24gaXMgY3VycmVu
dGx5IGEgb25lIHdheSBzdHJlZXQgaS5lLiBvbmNlIGluc3RhbGxlZCwgYSBzaWduYWwgaGFuZGxl
ciBjYW5ub3QgYmUgdW5pbnN0YWxsZWQuCiB2b2lkIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25h
bCwgU2lnbmFsSGFuZGxlciYmKTsKIAorCisjaWYgSEFWRShNQUNIX0VYQ0VQVElPTlMpCitjbGFz
cyBUaHJlYWQ7Cit2b2lkIHJlZ2lzdGVyVGhyZWFkKFRocmVhZCopOwordm9pZCByZW1vdmVUaHJl
YWQoVGhyZWFkKik7CisKK3ZvaWQgaGFuZGxlU2lnbmFsc1dpdGhNYWNoKCk7CisjZW5kaWYgLy8g
SEFWRShNQUNIX0VYQ0VQVElPTlMpCisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6
OlNpZ25hbDsKK3VzaW5nIFdURjo6U2lnSW5mbzsKIHVzaW5nIFdURjo6dG9TeXN0ZW1TaWduYWw7
CiB1c2luZyBXVEY6OmZyb21TeXN0ZW1TaWduYWw7CiB1c2luZyBXVEY6OlNpZ25hbEFjdGlvbjsK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAxN2Y5
ZjAxMTEzMTAyYThhNGIxN2ZjZTRhZjFkOTVlYjg2MDA2OWRiLi42Y2RhNDg0MTA2NWNlMDRhOTFi
OGRiNWUyYjIwMjhjNDBlYzA1YTZmIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTctMDUtMTEgIEtlaXRoIE1pbGxl
ciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIE1hY2ggZXhjZXB0aW9u
cyBpbnN0ZWFkIG9mIHNpZ25hbHMgd2hlcmUgcG9zc2libGUKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MTg2NQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVGhy
ZWFkTWVzc2FnZXMuY3BwOgorICAgICAgICAocnVuVGhyZWFkTWVzc2FnZVRlc3QpOgorICAgICAg
ICAoVEVTVCk6CisKIDIwMTctMDUtMDkgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAog
ICAgICAgICBSZW1vdmUgc3VwcG9ydCBmb3IgbGVnYWN5IE5vdGlmaWNhdGlvbnMKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1RocmVhZE1lc3NhZ2VzLmNwcCBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1RocmVhZE1lc3NhZ2VzLmNwcAppbmRleCBkNjNl
OWJmMWU3NTA2OGI2YzFhN2U3ZTZlOGI2N2M0ZWIwNTE1ODgyLi5lNmE1Nzg5NGJiNTE2ZmUxY2U3
MTNkMDdiZjE4ZjA3MDZlZmE5MzdjIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dURi9UaHJlYWRNZXNzYWdlcy5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XVEYvVGhyZWFkTWVzc2FnZXMuY3BwCkBAIC01MCw3ICs1MCw3IEBAIHN0YXRpYyB2b2lkIHJ1
blRocmVhZE1lc3NhZ2VUZXN0KHVuc2lnbmVkIG51bVNlbmRlcnMsIHVuc2lnbmVkIG51bU1lc3Nh
Z2VzKQogICAgIGZvciAodW5zaWduZWQgc2VuZGVySUQgPSAwOyBzZW5kZXJJRCA8IG51bVNlbmRl
cnM7ICsrc2VuZGVySUQpIHsKICAgICAgICAgc2VuZGVyVGhyZWFkc1tzZW5kZXJJRF0gPSBUaHJl
YWQ6OmNyZWF0ZSgiVGhyZWFkTWVzc2FnZSBzZW5kZXIiLCBbc2VuZGVySUQsIG51bU1lc3NhZ2Vz
LCByZWNlaXZlclRocmVhZCwgJm1lc3NhZ2VzUnVuLCAmaGFuZGxlcnNSdW5dICgpIHsKICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1NZXNzYWdlczsgKytpKSB7Ci0gICAg
ICAgICAgICAgICAgYXV0byByZXN1bHQgPSBzZW5kTWVzc2FnZSgqcmVjZWl2ZXJUaHJlYWQuZ2V0
KCksIFtzZW5kZXJJRCwgJmhhbmRsZXJzUnVuXSAoc2lnaW5mb190KiwgdWNvbnRleHRfdCopIHsK
KyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHNlbmRNZXNzYWdlKCpyZWNlaXZlclRocmVh
ZC5nZXQoKSwgW3NlbmRlcklELCAmaGFuZGxlcnNSdW5dIChQbGF0Zm9ybVJlZ2lzdGVycyYpIHsK
ICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcnNSdW5bc2VuZGVySURdKys7CiAgICAgICAgICAg
ICAgICAgfSk7CiAgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUocmVzdWx0ID09IFdURjo6TWVz
c2FnZVN0YXR1czo6TWVzc2FnZVJhbik7CkBAIC05NSw3ICs5NSw3IEBAIHB1YmxpYzoKIFRFU1Qo
VGhyZWFkTWVzc2FnZSwgU2lnbmFsc1dvcmtPbkV4aXQpCiB7CiAgICAgc3RhdGljIGJvb2wgaGFu
ZGxlclJhbiA9IGZhbHNlOwotICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbDo6VXNyLCBb
XSAoaW50LCBzaWdpbmZvX3QqLCB2b2lkKikgLT4gU2lnbmFsQWN0aW9uIHsKKyAgICBpbnN0YWxs
U2lnbmFsSGFuZGxlcihTaWduYWw6OlVzciwgW10gKFNpZ25hbCwgU2lnSW5mbyYsIFBsYXRmb3Jt
UmVnaXN0ZXJzJikgLT4gU2lnbmFsQWN0aW9uIHsKICAgICAgICAgZGF0YUxvZ0xuKCJoZXJlIik7
CiAgICAgICAgIGhhbmRsZXJSYW4gPSB0cnVlOwogICAgICAgICByZXR1cm4gU2lnbmFsQWN0aW9u
OjpIYW5kbGVkOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309780</attachid>
            <date>2017-05-11 14:06:10 -0700</date>
            <delta_ts>2017-05-11 14:52:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171865-20170511140609.patch</filename>
            <type>text/plain</type>
            <size>50378</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE2Njc3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
YzIyOWE0ZjkxMDMxZGZlOTU1YTQxMGIyMDI0Njc2ZTFmM2NkZWIxLi4yNWUzMDIyZWI5ZmY0ZDA1
M2E4ZWRiY2YxZTI2YmFkZTA1MTA4MWExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MCBAQAorMjAxNy0wNS0xMSAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBVc2UgTWFjaCBleGNlcHRpb25zIGluc3RlYWQgb2Ygc2lnbmFscyB3
aGVyZSBwb3NzaWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTcxODY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhpcyBwYXRjaCBhZGRzIHNvbWUgbmV3IEpTQyBvcHRpb25zLiBUaGUgZmlyc3QgaXMg
YW4gb3B0aW9uIHRoYXQKKyAgICAgICAgZW5hYmxlcyBvciBkaXNhYmxlcyB3ZWIgYXNzZW1ibHkg
dGllciB1cC4gVGhlIHNlY29uZCBjb250cm9scworICAgICAgICB3aGV0aGVyIG9yIG5vdCB3ZSB1
c2UgbWFjaCBleGNlcHRpb25zICh3aGVyZSBhdmFpbGFibGUpLgorCisgICAgICAgICogQVBJL3Rl
c3RzL0V4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwOgorICAgICAgICAoZGlzcGF0Y2hUZXJtaXRh
dGVDYWxsYmFjayk6CisgICAgICAgICh0ZXN0RXhlY3V0aW9uVGltZUxpbWl0KToKKyAgICAgICAg
KiBydW50aW1lL0pTTG9jay5jcHA6CisgICAgICAgIChKU0M6OkpTTG9jazo6ZGlkQWNxdWlyZUxv
Y2spOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5jcHA6CisgICAgICAgIChKU0M6Om92ZXJy
aWRlRGVmYXVsdHMpOgorICAgICAgICAoSlNDOjpPcHRpb25zOjppbml0aWFsaXplKToKKyAgICAg
ICAgKiBydW50aW1lL09wdGlvbnMuaDoKKyAgICAgICAgKiBydW50aW1lL1ZNVHJhcHMuY3BwOgor
ICAgICAgICAoSlNDOjpTaWduYWxDb250ZXh0OjpTaWduYWxDb250ZXh0KToKKyAgICAgICAgKEpT
Qzo6U2lnbmFsQ29udGV4dDo6YWRqdXN0UENUb1BvaW50VG9UcmFwcGluZ0luc3RydWN0aW9uKToK
KyAgICAgICAgKEpTQzo6aW5zdGFsbFNpZ25hbEhhbmRsZXIpOgorICAgICAgICAoSlNDOjpWTVRy
YXBzOjpTaWduYWxTZW5kZXI6OnNlbmQpOgorICAgICAgICAqIHRvb2xzL1NpZ2lsbENyYXNoQW5h
bHl6ZXIuY3BwOgorICAgICAgICAoSlNDOjpTaWduYWxDb250ZXh0OjpTaWduYWxDb250ZXh0KToK
KyAgICAgICAgKEpTQzo6U2lnbmFsQ29udGV4dDo6ZHVtcCk6CisgICAgICAgIChKU0M6Omluc3Rh
bGxDcmFzaEhhbmRsZXIpOgorICAgICAgICAqIHdhc20vV2FzbUJCUVBsYW4uY3BwOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKToKKyAgICAgICAgKiB3YXNt
L1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp0cmFwSGFu
ZGxlcik6CisgICAgICAgIChKU0M6Oldhc206OmVuYWJsZUZhc3RNZW1vcnkpOgorICAgICAgICAq
IHdhc20vV2FzbU1hY2hpbmVUaHJlYWRzLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6cmVzZXRJ
bnN0cnVjdGlvbkNhY2hlT25BbGxUaHJlYWRzKToKKwogMjAxNy0wNS0xMSAgTWFyayBMYW0gIDxt
YXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgV29ya2VyVGhyZWFkOjpzdG9wKCkgc2hvdWxk
IGNhbGwgc2NoZWR1bGVFeGVjdXRpb25UZXJtaW5hdGlvbigpIGxhc3QuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGVjZGRiMzNm
YmVkNTIxMTFiYzA3MTk1ZDZjMDhmZTQwNmIyYzFhMzUuLmE3MjBkMTAxZTIyMDVjZGYwZmEwNmRm
YzNjYTczNmY5YmE1ZmM2NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTcgQEAKKzIwMTctMDUtMTEgIEtlaXRo
IE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIE1hY2ggZXhj
ZXB0aW9ucyBpbnN0ZWFkIG9mIHNpZ25hbHMgd2hlcmUgcG9zc2libGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MTg2NQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZW5hYmxlcyB1c2lu
ZyBtYWNoIGV4Y2VwdGlvbnMgb24gZGFyd2luLiBUaGUgd2F5IHRoZQorICAgICAgICBtYWNoIGV4
Y2VwdGlvbiBhcGkgd29ya3MgaXMgdGhhdCB3ZSBjcmVhdGUgYSBtYWNoIHBvcnQsIHdoaWNoIGlz
CisgICAgICAgIGxpa2UgYSBmaWxlIGRlc2NyaXB0b3IuICBXZSB0aGVuIHdhaXQgZm9yIGEgbWVz
c2FnZSB0byBhcnJpdmUgb24KKyAgICAgICAgdGhhdCBwb3J0IGluIGEgdGhyZWFkLiBXaGVuIGFu
b3RoZXIgdGhyZWFkIHJhaXNlcyBhIGV4Y2VwdGlvbiAoc2F5CisgICAgICAgIGR1ZSB0byBhIGJh
ZCBtZW1vcnkgYWNjZXNzKSB0aGUgT1Mgc2VuZHMgb3VyIHRocmVhZCBhIG1lc3NhZ2UuIFRoZQor
ICAgICAgICBwYXlsb2FkIG9mIHRoYXQgbWVzc2FnZSBpcyB0aGUgcmVnaXN0ZXIgZmlsZSBvZiB0
aGUgY3Jhc2hpbmcKKyAgICAgICAgdGhyZWFkLiBXZSB0aGVuIGNhbGwgb3VyIGN1c3RvbSBoYW5k
bGVycyB0aGF0IGNoYW5nZSB0aGUgc3RhdGUgYXMKKyAgICAgICAgbmVlZGVkLiBJbiBvcmRlciB0
byByZXN0YXJ0IHRoZSB0aHJlYWQgd2Ugc2VuZCBhIHBheWxvYWQgYmFjayB0bworICAgICAgICB0
aGUgT1Mgd2l0aCBhbiB1cGRhdGVkIHJlZ2lzdGVyIGZpbGUgYWxvbmcgd2l0aCBhIHN1Y2Nlc3Mg
bWVzc2FnZQorICAgICAgICBoZWFkZXIuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIG1ha2Vz
IHRocmVhZCBtZXNzYWdlcyB3b3JrIHdpdGhvdXQgc2lnbmFscyBieQorICAgICAgICBzaW1wbHkg
c3VzcGVuZGluZyB0aGUgdGhyZWFkIHRoZW4gcnVubmluZyB0aGUgbWVzc2FnZSBhdCB0aGF0Cisg
ICAgICAgIHRpbWUuCisKKyAgICAgICAgKiBDb25maWd1cmF0aW9ucy9XVEYueGNjb25maWc6Cisg
ICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL1Bs
YXRmb3JtLmg6CisgICAgICAgICogd3RmL1BsYXRmb3JtUmVnaXN0ZXJzLmg6CisgICAgICAgIChX
VEY6OnJlZ2lzdGVyc0Zyb21VQ29udGV4dCk6CisgICAgICAgICogd3RmL1N0YWNrQm91bmRzLmg6
CisgICAgICAgIChXVEY6OlN0YWNrQm91bmRzOjpTdGFja0JvdW5kcyk6CisgICAgICAgICogd3Rm
L1RocmVhZEhvbGRlci5jcHA6CisgICAgICAgIChXVEY6OlRocmVhZEhvbGRlcjo6flRocmVhZEhv
bGRlcik6CisgICAgICAgICogd3RmL1RocmVhZE1lc3NhZ2UuY3BwOgorICAgICAgICAoV1RGOjpz
ZW5kTWVzc2FnZVNpZ25hbCk6CisgICAgICAgIChXVEY6OnNlbmRNZXNzYWdlTWFjaCk6CisgICAg
ICAgIChXVEY6OmRlbGl2ZXJNZXNzYWdlc1VzaW5nTWFjaCk6CisgICAgICAgIChXVEY6OnNlbmRN
ZXNzYWdlU2NvcGVkKToKKyAgICAgICAgKiB3dGYvVGhyZWFkTWVzc2FnZS5oOgorICAgICAgICAo
V1RGOjpzZW5kTWVzc2FnZSk6CisgICAgICAgICogd3RmL1RocmVhZGluZy5oOgorICAgICAgICAo
V1RGOjpUaHJlYWQ6Om1hY2hUaHJlYWQpOgorICAgICAgICAqIHd0Zi9tYWMvTWFjaEV4Y2VwdGlv
bnMuZGVmczogQ29waWVkIGZyb20gU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5oLgorICAg
ICAgICAqIHd0Zi90aHJlYWRzL1NpZ25hbHMuY3BwOgorICAgICAgICAoV1RGOjpzdGFydE1hY2hF
eGNlcHRpb25IYW5kbGVyVGhyZWFkKToKKyAgICAgICAgKFdURjo6ZnJvbU1hY2hFeGNlcHRpb24p
OgorICAgICAgICAoV1RGOjp0b01hY2hNYXNrKToKKyAgICAgICAgKFdURjo6aGFuZGxlU2lnbmFs
c1dpdGhNYWNoKToKKyAgICAgICAgKFdURjo6c2V0RXhjZXB0aW9uUG9ydHMpOgorICAgICAgICAo
V1RGOjphY3RpdmVUaHJlYWRzKToKKyAgICAgICAgKFdURjo6cmVnaXN0ZXJUaHJlYWQpOgorICAg
ICAgICAoV1RGOjpyZW1vdmVUaHJlYWQpOgorICAgICAgICAoV1RGOjppbnN0YWxsU2lnbmFsSGFu
ZGxlcik6CisgICAgICAgIChXVEY6OmpzY1NpZ25hbEhhbmRsZXIpOgorICAgICAgICAqIHd0Zi90
aHJlYWRzL1NpZ25hbHMuaDoKKwogMjAxNy0wNS0wOSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFJlbW92ZSBzdXBwb3J0IGZvciBsZWdhY3kgTm90aWZpY2F0aW9ucwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9FeGVjdXRpb25UaW1l
TGltaXRUZXN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvRXhlY3V0aW9u
VGltZUxpbWl0VGVzdC5jcHAKaW5kZXggZDVlNTMyNDNiNzhkZjc1MTM0MmFkOGQzOTBhNGIwNDEz
ZDllZWY5ZS4uN2VhYzA3MzA5ZGRjM2YxNjQ5NDUwYmQwMzc5ZDJjYTE4ZjAxNjlhYSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9FeGVjdXRpb25UaW1lTGltaXRU
ZXN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0V4ZWN1dGlvblRp
bWVMaW1pdFRlc3QuY3BwCkBAIC0zMCw4ICszMCwxMyBAQAogI2luY2x1ZGUgIkpTQ29udGV4dFJl
ZlByaXZhdGUuaCIKICNpbmNsdWRlICJKYXZhU2NyaXB0Q29yZS5oIgogI2luY2x1ZGUgIk9wdGlv
bnMuaCIKKwogI2luY2x1ZGUgPGNocm9ubz4KKyNpbmNsdWRlIDxkaXNwYXRjaC9kaXNwYXRjaC5o
PgorI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CisjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgog
I2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOjpj
aHJvbm87CkBAIC03Nyw2ICs4MiwxMyBAQCBzdGF0aWMgYm9vbCBleHRlbmRUZXJtaW5hdGVDYWxs
YmFjayhKU0NvbnRleHRSZWYgY3R4LCB2b2lkKikKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9v
bCBkaXNwYXRjaFRlcm1pbmF0ZUNhbGxiYWNrQ2FsbGVkID0gZmFsc2U7CitzdGF0aWMgYm9vbCBk
aXNwYXRjaFRlcm1pdGF0ZUNhbGxiYWNrKEpTQ29udGV4dFJlZiwgdm9pZCopCit7CisgICAgZGlz
cGF0Y2hUZXJtaW5hdGVDYWxsYmFja0NhbGxlZCA9IHRydWU7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKIHN0cnVjdCBUaWVyT3B0aW9ucyB7CiAgICAgY29uc3QgY2hhciogdGllcjsKICAgICB1bnNp
Z25lZCB0aW1lTGltaXRBZGp1c3RtZW50TWlsbGlzOwpAQCAtMzY1LDYgKzM3Nyw2MyBAQCBpbnQg
dGVzdEV4ZWN1dGlvblRpbWVMaW1pdCgpCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAorICAg
ICAgICAvKiBUZXN0IHNjcmlwdCB0aW1lb3V0IGZyb20gZGlzcGF0Y2ggcXVldWU6ICovCisgICAg
ICAgIHRpbWVMaW1pdCA9ICgxMDAgKyB0aWVyQWRqdXN0bWVudE1pbGxpcykgLyAxMDAwLjA7Cisg
ICAgICAgIEpTQ29udGV4dEdyb3VwU2V0RXhlY3V0aW9uVGltZUxpbWl0KGNvbnRleHRHcm91cCwg
dGltZUxpbWl0LCBkaXNwYXRjaFRlcm1pdGF0ZUNhbGxiYWNrLCAwKTsKKyAgICAgICAgeworICAg
ICAgICAgICAgdW5zaWduZWQgdGltZUFmdGVyV2F0Y2hkb2dTaG91bGRIYXZlRmlyZWQgPSAzMDAg
KyB0aWVyQWRqdXN0bWVudE1pbGxpczsKKworICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBzY3Jp
cHRCdWlsZGVyOworICAgICAgICAgICAgc2NyaXB0QnVpbGRlci5hcHBlbmRMaXRlcmFsKCJmdW5j
dGlvbiBmb28oKSB7IHZhciBzdGFydFRpbWUgPSBjdXJyZW50Q1BVVGltZSgpOyB3aGlsZSAodHJ1
ZSkgeyBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDA7IGkrKyk7IGlmIChjdXJyZW50Q1BVVGltZSgp
IC0gc3RhcnRUaW1lID4gIik7CisgICAgICAgICAgICBzY3JpcHRCdWlsZGVyLmFwcGVuZE51bWJl
cih0aW1lQWZ0ZXJXYXRjaGRvZ1Nob3VsZEhhdmVGaXJlZCAvIDEwMDAuMCk7CisgICAgICAgICAg
ICBzY3JpcHRCdWlsZGVyLmFwcGVuZExpdGVyYWwoIikgYnJlYWs7IH0gfSBmb28oKTsiKTsKKwor
ICAgICAgICAgICAgSlNTdHJpbmdSZWYgc2NyaXB0ID0gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoc2NyaXB0QnVpbGRlci50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAg
ICAgZXhjZXB0aW9uID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGRpc3BhdGNoVGVybWluYXRlQ2Fs
bGJhY2tDYWxsZWQgPSBmYWxzZTsKKworICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBkbyB0aGlz
IHNpbmNlIGJsb2NrcyBjYW4gb25seSBjYXB0dXJlIHRoaW5ncyBhcyBjb25zdC4KKyAgICAgICAg
ICAgIEpTR2xvYmFsQ29udGV4dFJlZiYgY29udGV4dFJlZiA9IGNvbnRleHQ7CisgICAgICAgICAg
ICBKU1N0cmluZ1JlZiYgc2NyaXB0UmVmID0gc2NyaXB0OworICAgICAgICAgICAgSlNWYWx1ZVJl
ZiYgZXhjZXB0aW9uUmVmID0gZXhjZXB0aW9uOworCisgICAgICAgICAgICBMb2NrIHN5bmNMb2Nr
OworICAgICAgICAgICAgTG9jayYgc3luY0xvY2tSZWYgPSBzeW5jTG9jazsKKyAgICAgICAgICAg
IENvbmRpdGlvbiBzeW5jaHJvbml6ZTsKKyAgICAgICAgICAgIENvbmRpdGlvbiYgc3luY2hyb25p
emVSZWYgPSBzeW5jaHJvbml6ZTsKKyAgICAgICAgICAgIGJvb2wgZGlkU3luY2hyb25pemUgPSBm
YWxzZTsKKyAgICAgICAgICAgIGJvb2wmIGRpZFN5bmNocm9uaXplUmVmID0gZGlkU3luY2hyb25p
emU7CisKKyAgICAgICAgICAgIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMgc3RhcnRUaW1lOwor
ICAgICAgICAgICAgc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcyBlbmRUaW1lOworCisgICAgICAg
ICAgICBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzJiBzdGFydFRpbWVSZWYgPSBzdGFydFRpbWU7
CisgICAgICAgICAgICBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzJiBlbmRUaW1lUmVmID0gZW5k
VGltZTsKKworICAgICAgICAgICAgZGlzcGF0Y2hfZ3JvdXBfdCBncm91cCA9IGRpc3BhdGNoX2dy
b3VwX2NyZWF0ZSgpOworICAgICAgICAgICAgZGlzcGF0Y2hfZ3JvdXBfYXN5bmMoZ3JvdXAsIGRp
c3BhdGNoX2dldF9nbG9iYWxfcXVldWUoMCwgMCksIF57CisgICAgICAgICAgICAgICAgc3RhcnRU
aW1lUmVmID0gY3VycmVudENQVVRpbWUoKTsKKyAgICAgICAgICAgICAgICBKU0V2YWx1YXRlU2Ny
aXB0KGNvbnRleHRSZWYsIHNjcmlwdFJlZiwgbnVsbHB0ciwgbnVsbHB0ciwgMSwgJmV4Y2VwdGlv
blJlZik7CisgICAgICAgICAgICAgICAgZW5kVGltZVJlZiA9IGN1cnJlbnRDUFVUaW1lKCk7Cisg
ICAgICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBXVEY6OmhvbGRMb2NrKHN5bmNMb2NrUmVmKTsK
KyAgICAgICAgICAgICAgICBkaWRTeW5jaHJvbml6ZVJlZiA9IHRydWU7CisgICAgICAgICAgICAg
ICAgc3luY2hyb25pemVSZWYubm90aWZ5QWxsKCk7CisgICAgICAgICAgICB9KTsKKworICAgICAg
ICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhzeW5jTG9jayk7CisgICAgICAgICAgICBzeW5j
aHJvbml6ZS53YWl0KHN5bmNMb2NrLCBbJl0geyByZXR1cm4gZGlkU3luY2hyb25pemU7IH0pOwor
CisgICAgICAgICAgICBpZiAoKChlbmRUaW1lIC0gc3RhcnRUaW1lKSA8IG1pbGxpc2Vjb25kcyh0
aW1lQWZ0ZXJXYXRjaGRvZ1Nob3VsZEhhdmVGaXJlZCkpICYmIGRpc3BhdGNoVGVybWluYXRlQ2Fs
bGJhY2tDYWxsZWQpCisgICAgICAgICAgICAgICAgcHJpbnRmKCJQQVNTOiAlcyBzY3JpcHQgb24g
ZGlzcGF0Y2ggcXVldWUgdGltZWQgb3V0IGFzIGV4cGVjdGVkLlxuIiwgdGllck9wdGlvbnMudGll
cik7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoKGVuZFRpbWUgLSBz
dGFydFRpbWUpID49IG1pbGxpc2Vjb25kcyh0aW1lQWZ0ZXJXYXRjaGRvZ1Nob3VsZEhhdmVGaXJl
ZCkpCisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiRkFJTDogJXMgc2NyaXB0IG9uIGRpc3Bh
dGNoIHF1ZXVlIGRpZCBub3QgdGltZSBvdXQgYXMgZXhwZWN0ZWQuXG4iLCB0aWVyT3B0aW9ucy50
aWVyKTsKKyAgICAgICAgICAgICAgICBpZiAoIXNob3VsZFRlcm1pbmF0ZUNhbGxiYWNrV2FzQ2Fs
bGVkKQorICAgICAgICAgICAgICAgICAgICBwcmludGYoIkZBSUw6ICVzIHNjcmlwdCBvbiBkaXNw
YXRjaCBxdWV1ZSB0aW1lb3V0IGNhbGxiYWNrIHdhcyBub3QgY2FsbGVkLlxuIiwgdGllck9wdGlv
bnMudGllcik7CisgICAgICAgICAgICAgICAgZmFpbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCiAgICAgICAgIEpTR2xvYmFsQ29udGV4dFJlbGVhc2UoY29udGV4dCk7CiAK
ICAgICAgICAgT3B0aW9uczo6c2V0T3B0aW9ucyhzYXZlZE9wdGlvbnNCdWlsZGVyLnRvU3RyaW5n
KCkuYXNjaWkoKS5kYXRhKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNMb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5j
cHAKaW5kZXggYzE3NWFlMGM0ODJlZDI3YmQ1ZjZiZGM4Nzk2OGU3NWQ0NWFmNTBlZi4uYmI3MGFh
YWVhMTVmZWQ1NDc3YjYxOTlmYTZkNGRjN2VhOTcxMDJjMiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0xvY2suY3BwCkBAIC0zMCw2ICszMCw4IEBACiAjaW5jbHVkZSAiU2FtcGxp
bmdQcm9maWxlci5oIgogI2luY2x1ZGUgIldhc21NYWNoaW5lVGhyZWFkcy5oIgogI2luY2x1ZGUg
PHRocmVhZD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RocmVh
ZHMvU2lnbmFscy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMTQ4LDYgKzE1MCwxMCBAQCB2
b2lkIEpTTG9jazo6ZGlkQWNxdWlyZUxvY2soKQogICAgIFdhc206OnN0YXJ0VHJhY2tpbmdDdXJy
ZW50VGhyZWFkKCk7CiAjZW5kaWYKIAorI2lmIEhBVkUoTUFDSF9FWENFUFRJT05TKQorICAgIFdU
Rjo6cmVnaXN0ZXJUaHJlYWQoJlRocmVhZDo6Y3VycmVudCgpKTsKKyNlbmRpZgorCiAgICAgbV92
bS0+dHJhcHMoKS5ub3RpZnlHcmFiQWxsTG9ja3MoKTsKIAogI2lmIEVOQUJMRShTQU1QTElOR19Q
Uk9GSUxFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKaW5kZXgg
YjA0ZGUzNWE1MzYxNTA4NDM4NTc1YzIyN2E1MDE0ZGQwYzUxYmFhMi4uODZlYTFiNjk1NjM0YTU0
ZjBlM2QyMGZhMjYzNzczOWVjOGI2MDRkZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5jcHAKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0
cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGhyZWFkcy9TaWduYWxzLmg+CiAKICNp
ZiBQTEFURk9STShDT0NPQSkKICNpbmNsdWRlIDxjcnRfZXh0ZXJucy5oPgpAQCAtMzU0LDYgKzM1
NSwxMCBAQCBzdGF0aWMgdm9pZCBvdmVycmlkZURlZmF1bHRzKCkKICNpZiAhRU5BQkxFKFdFQkFT
U0VNQkxZX0ZBU1RfTUVNT1JZKQogICAgIE9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5RmFzdE1lbW9y
eSgpID0gZmFsc2U7CiAjZW5kaWYKKworI2lmIEhBVkUoTUFDSF9FWENFUFRJT05TKQorICAgIE9w
dGlvbnM6OnVzZU1hY2hGb3JFeGNlcHRpb25zKCkgPSB0cnVlOworI2VuZGlmCiB9CiAKIHN0YXRp
YyB2b2lkIHJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMoKQpAQCAtNTQ1LDYgKzU1MCwxMSBAQCB2
b2lkIE9wdGlvbnM6OmluaXRpYWxpemUoKQogCiAgICAgICAgICAgICBkdW1wT3B0aW9uc0lmTmVl
ZGVkKCk7CiAgICAgICAgICAgICBlbnN1cmVPcHRpb25zQXJlQ29oZXJlbnQoKTsKKworI2lmIEhB
VkUoTUFDSF9FWENFUFRJT05TKQorICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZU1hY2hGb3JF
eGNlcHRpb25zKCkpCisgICAgICAgICAgICAgICAgV1RGOjpoYW5kbGVTaWduYWxzV2l0aE1hY2go
KTsKKyNlbmRpZgogICAgICAgICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9ucy5oCmluZGV4IGNmOWRjMmIyYTgyNTY4ZWUwN2RhMDg4OWUzOWI2YjJmOWRjZDc5NzUu
LjIyNzRkMWNkZWIzMzM2ZTM3YWI0NDczZWE0MTE2ZWEzMjI5ZTkzN2YgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKQEAgLTQyMCw2ICs0MjAsOCBAQCB0eXBlZGVmIGNv
bnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICB2KHVuc2lnbmVkLCB3YXRjaGRvZywgMCwgTm9y
bWFsLCAid2F0Y2hkb2cgdGltZW91dCAoMCA9IERpc2FibGVkLCBOID0gYSB0aW1lb3V0IHBlcmlv
ZCBvZiBOIG1pbGxpc2Vjb25kcykiKSBcCiAgICAgdihib29sLCB1c2VQb2xsaW5nVHJhcHMsIGZh
bHNlLCBOb3JtYWwsICJ1c2UgcG9sbGluZyAoaW5zdGVhZCBvZiBzaWduYWxsaW5nKSBWTSB0cmFw
cyIpIFwKICAgICBcCisgICAgdihib29sLCB1c2VNYWNoRm9yRXhjZXB0aW9ucywgdHJ1ZSwgTm9y
bWFsLCAiVXNlIG1hY2ggZXhjZXB0aW9ucyByYXRoZXIgdGhhbiBzaWduYWxzIHRvIGhhbmRsZSBm
YXVsdHMgYW5kIHBhc3MgdGhyZWFkIG1lc3NhZ2VzLiAoVGhpcyBkb2VzIG5vdGhpbmcgb24gcGxh
dGZvcm1zIHdpdGhvdXQgbWFjaCkiKSBcCisgICAgXAogICAgIHYoYm9vbCwgdXNlSUNTdGF0cywg
ZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIFwKICAgICB2KHVuc2lnbmVkLCBwcm90b3R5
cGVIaXRDb3VudEZvckxMSW50Q2FjaGluZywgMiwgTm9ybWFsLCAiTnVtYmVyIG9mIHByb3RvdHlw
ZSBwcm9wZXJ0eSBoaXRzIGJlZm9yZSBjYWNoaW5nIGEgcHJvdG90eXBlIGluIHRoZSBMTEludC4g
QSBjb3VudCBvZiAwIG1lYW5zIG5ldmVyIGNhY2hlLiIpIFwKQEAgLTQ0Myw2ICs0NDUsNyBAQCB0
eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICB2KHVuc2lnbmVkLCB3ZWJBc3Nl
bWJseUJCUU9wdGltaXphdGlvbkxldmVsLCAxLCBOb3JtYWwsICJCMyBPcHRpbWl6YXRpb24gbGV2
ZWwgZm9yIEJCUSBXZWIgQXNzZW1ibHkgbW9kdWxlIGNvbXBpbGF0aW9ucy4iKSBcCiAgICAgdih1
bnNpZ25lZCwgd2ViQXNzZW1ibHlPTUdPcHRpbWl6YXRpb25MZXZlbCwgT3B0aW9uczo6ZGVmYXVs
dEIzT3B0TGV2ZWwoKSwgTm9ybWFsLCAiQjMgT3B0aW1pemF0aW9uIGxldmVsIGZvciBPTUcgV2Vi
IEFzc2VtYmx5IG1vZHVsZSBjb21waWxhdGlvbnMuIikgXAogICAgIFwKKyAgICB2KGJvb2wsIHVz
ZUJCUVRpZXJVcENoZWNrcywgdHJ1ZSwgTm9ybWFsLCAiRW5hYmxlcyB0aWVyIHVwIGNoZWNrcyBm
b3Igb3VyIEJCUSBjb2RlLiIpIFwKICAgICB2KHVuc2lnbmVkLCB3ZWJBc3NlbWJseU9NR1RpZXJV
cENvdW50LCA1MDAwLCBOb3JtYWwsICJUaGUgY291bnRkb3duIGJlZm9yZSB3ZSB0aWVyIHVwIGEg
ZnVuY3Rpb24gdG8gT01HLiIpIFwKICAgICB2KHVuc2lnbmVkLCB3ZWJBc3NlbWJseUxvb3BEZWNy
ZW1lbnQsIDE1LCBOb3JtYWwsICJUaGUgYW1vdW50IHRoZSB0aWVyIHVwIGNvdW50ZG93biBpcyBk
ZWNyZW1lbnRlZCBvbiBlYWNoIGxvb3AgYmFja2VkZ2UuIikgXAogICAgIHYodW5zaWduZWQsIHdl
YkFzc2VtYmx5RnVuY3Rpb25FbnRyeURlY3JlbWVudCwgMSwgTm9ybWFsLCAiVGhlIGFtb3VudCB0
aGUgdGllciB1cCBjb3VudGRvd24gaXMgZGVjcmVtZW50ZWQgb24gZWFjaCBmdW5jdGlvbiBlbnRy
eS4iKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBz
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCmluZGV4IDFi
YWFjZTYwNDRlNjYwYThlNTQ0MWZiYWQwMThlYTkwOTMxYTRjOTEuLjEwZDc4MmE4ZGM0OWE1ZWRh
MDgxZDczZDY4M2RmZmUxNmY4YzhmNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNVHJhcHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNVHJhcHMuY3BwCkBAIC01MywxMSArNTMsMTEgQEAgQUxXQVlTX0lOTElORSBWTSYgVk1UcmFw
czo6dm0oKSBjb25zdAogI2lmIEVOQUJMRShTSUdOQUxfQkFTRURfVk1fVFJBUFMpCiAKIHN0cnVj
dCBTaWduYWxDb250ZXh0IHsKLSAgICBTaWduYWxDb250ZXh0KG1jb250ZXh0X3QmIG1jb250ZXh0
KQotICAgICAgICA6IG1jb250ZXh0KG1jb250ZXh0KQotICAgICAgICAsIHRyYXBQQyhNYWNoaW5l
Q29udGV4dDo6aW5zdHJ1Y3Rpb25Qb2ludGVyKG1jb250ZXh0KSkKLSAgICAgICAgLCBzdGFja1Bv
aW50ZXIoTWFjaGluZUNvbnRleHQ6OnN0YWNrUG9pbnRlcihtY29udGV4dCkpCi0gICAgICAgICwg
ZnJhbWVQb2ludGVyKE1hY2hpbmVDb250ZXh0OjpmcmFtZVBvaW50ZXIobWNvbnRleHQpKQorICAg
IFNpZ25hbENvbnRleHQoUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVycykKKyAgICAgICAgOiBj
b250ZXh0KHJlZ2lzdGVycykKKyAgICAgICAgLCB0cmFwUEMoTWFjaGluZUNvbnRleHQ6Omluc3Ry
dWN0aW9uUG9pbnRlcihjb250ZXh0KSkKKyAgICAgICAgLCBzdGFja1BvaW50ZXIoTWFjaGluZUNv
bnRleHQ6OnN0YWNrUG9pbnRlcihjb250ZXh0KSkKKyAgICAgICAgLCBmcmFtZVBvaW50ZXIoTWFj
aGluZUNvbnRleHQ6OmZyYW1lUG9pbnRlcihjb250ZXh0KSkKICAgICB7CiAjaWYgQ1BVKFg4Nl82
NCkgfHwgQ1BVKFg4NikKICAgICAgICAgLy8gT24gWDg2XzY0LCBTSUdUUkFQIHJlcG9ydHMgdGhl
IGFkZHJlc3MgYWZ0ZXIgdGhlIHRyYXBwaW5nIFBDLiBTbywgZGVjIGJ5IDEuCkBAIC02OCwxMSAr
NjgsMTEgQEAgc3RydWN0IFNpZ25hbENvbnRleHQgewogICAgIHZvaWQgYWRqdXN0UENUb1BvaW50
VG9UcmFwcGluZ0luc3RydWN0aW9uKCkKICAgICB7CiAjaWYgQ1BVKFg4Nl82NCkgfHwgQ1BVKFg4
NikKLSAgICAgICAgTWFjaGluZUNvbnRleHQ6Omluc3RydWN0aW9uUG9pbnRlcihtY29udGV4dCkg
PSB0cmFwUEM7CisgICAgICAgIE1hY2hpbmVDb250ZXh0OjppbnN0cnVjdGlvblBvaW50ZXIoY29u
dGV4dCkgPSB0cmFwUEM7CiAjZW5kaWYKICAgICB9CiAKLSAgICBtY29udGV4dF90JiBtY29udGV4
dDsKKyAgICBQbGF0Zm9ybVJlZ2lzdGVycyYgY29udGV4dDsKICAgICB2b2lkKiB0cmFwUEM7CiAg
ICAgdm9pZCogc3RhY2tQb2ludGVyOwogICAgIHZvaWQqIGZyYW1lUG9pbnRlcjsKQEAgLTEzMCwx
MSArMTMwLDEzIEBAIHN0YXRpYyBFeHBlY3RlZDxWTUFuZFN0YWNrQm91bmRzLCBWTVRyYXBzOjpF
cnJvcj4gZmluZEFjdGl2ZVZNQW5kU3RhY2tCb3VuZHMoU2lnCiAKIHN0YXRpYyB2b2lkIGluc3Rh
bGxTaWduYWxIYW5kbGVyKCkKIHsKLSAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWw6OlRy
YXAsIFtdIChpbnQsIHNpZ2luZm9fdCosIHZvaWQqIHVhcCkgLT4gU2lnbmFsQWN0aW9uIHsKLSAg
ICAgICAgU2lnbmFsQ29udGV4dCBjb250ZXh0KHN0YXRpY19jYXN0PHVjb250ZXh0X3QqPih1YXAp
LT51Y19tY29udGV4dCk7CisgICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFsOjpUcmFwLCBb
XSAoU2lnbmFsLCBTaWdJbmZvJiwgUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVycykgLT4gU2ln
bmFsQWN0aW9uIHsKKyAgICAgICAgU2lnbmFsQ29udGV4dCBjb250ZXh0KHJlZ2lzdGVycyk7CiAK
LSAgICAgICAgaWYgKCFpc0pJVFBDKGNvbnRleHQudHJhcFBDKSkKKyAgICAgICAgaWYgKCFpc0pJ
VFBDKGNvbnRleHQudHJhcFBDKSkgeworICAgICAgICAgICAgZGF0YUxvZ0xuKCJ0cmFwcGluZyBw
YzogIiwgUmF3UG9pbnRlcihjb250ZXh0LnRyYXBQQyksICIgaml0IHN0YXJ0OiAiLCBzdGFydE9m
Rml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbCwgIiBqaXQgZW5kOiAiLCBlbmRPZkZpeGVkRXhlY3V0
YWJsZU1lbW9yeVBvb2wpOwogICAgICAgICAgICAgcmV0dXJuIFNpZ25hbEFjdGlvbjo6Tm90SGFu
ZGxlZDsKKyAgICAgICAgfQogCiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGN1cnJlbnRseSBlYXRz
IGFsbCB0cmFwcyBpbmNsdWRpbmcgaml0IGFzc2VydHMgd2Ugc2hvdWxkIG1ha2Ugc3VyZSB0aGlz
CiAgICAgICAgIC8vIGFsd2F5cyB3b3Jrcy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3MTAzOQpAQCAtNDA0LDggKzQwNiw4IEBAIHZvaWQgVk1UcmFwczo6U2lnbmFs
U2VuZGVyOjpzZW5kKCkKICAgICAgICAgICAgIFZNJiB2bSA9ICptX3ZtOwogICAgICAgICAgICAg
YXV0byBvcHRpb25hbE93bmVyVGhyZWFkID0gdm0ub3duZXJUaHJlYWQoKTsKICAgICAgICAgICAg
IGlmIChvcHRpb25hbE93bmVyVGhyZWFkKSB7Ci0gICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2Uo
Km9wdGlvbmFsT3duZXJUaHJlYWQudmFsdWUoKS5nZXQoKSwgW10gKHNpZ2luZm9fdCosIHVjb250
ZXh0X3QqIHVjb250ZXh0KSAtPiB2b2lkIHsKLSAgICAgICAgICAgICAgICAgICAgU2lnbmFsQ29u
dGV4dCBjb250ZXh0KHVjb250ZXh0LT51Y19tY29udGV4dCk7CisgICAgICAgICAgICAgICAgc2Vu
ZE1lc3NhZ2UoKm9wdGlvbmFsT3duZXJUaHJlYWQudmFsdWUoKS5nZXQoKSwgW10gKFBsYXRmb3Jt
UmVnaXN0ZXJzJiByZWdpc3RlcnMpIC0+IHZvaWQgeworICAgICAgICAgICAgICAgICAgICBTaWdu
YWxDb250ZXh0IGNvbnRleHQocmVnaXN0ZXJzKTsKICAgICAgICAgICAgICAgICAgICAgYXV0byBh
Y3RpdmVWTUFuZFN0YWNrQm91bmRzID0gZmluZEFjdGl2ZVZNQW5kU3RhY2tCb3VuZHMoY29udGV4
dCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChhY3RpdmVWTUFuZFN0YWNrQm91bmRzKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBWTSogdm0gPSBhY3RpdmVWTUFuZFN0YWNrQm91bmRzLnZh
bHVlKCkudm07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvU2lnaWxs
Q3Jhc2hBbmFseXplci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvU2lnaWxsQ3Jh
c2hBbmFseXplci5jcHAKaW5kZXggNGFkYWVmZjFjZGEyZDFmYmM2ZjkwNjFmMDYzZTE0ZDJlNjMz
MDA0OC4uYmI0NjA1YzY5M2UxMmRkZTA1MDg0ZjdhMTdjZDFlNDRmN2U5ZTY3NSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1NpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9TaWdpbGxDcmFzaEFuYWx5emVyLmNwcApA
QCAtNzgsMTEgKzc4LDExIEBAIHByaXZhdGU6CiAjZW5kaWYgLy8gVVNFKE9TX0xPRykKIAogc3Ry
dWN0IFNpZ25hbENvbnRleHQgewotICAgIFNpZ25hbENvbnRleHQobWNvbnRleHRfdCYgbWNvbnRl
eHQpCi0gICAgICAgIDogbWNvbnRleHQobWNvbnRleHQpCi0gICAgICAgICwgbWFjaGluZVBDKE1h
Y2hpbmVDb250ZXh0OjppbnN0cnVjdGlvblBvaW50ZXIobWNvbnRleHQpKQotICAgICAgICAsIHN0
YWNrUG9pbnRlcihNYWNoaW5lQ29udGV4dDo6c3RhY2tQb2ludGVyKG1jb250ZXh0KSkKLSAgICAg
ICAgLCBmcmFtZVBvaW50ZXIoTWFjaGluZUNvbnRleHQ6OmZyYW1lUG9pbnRlcihtY29udGV4dCkp
CisgICAgU2lnbmFsQ29udGV4dChQbGF0Zm9ybVJlZ2lzdGVycyYgY29udGV4dCkKKyAgICAgICAg
OiBjb250ZXh0KGNvbnRleHQpCisgICAgICAgICwgbWFjaGluZVBDKE1hY2hpbmVDb250ZXh0Ojpp
bnN0cnVjdGlvblBvaW50ZXIoY29udGV4dCkpCisgICAgICAgICwgc3RhY2tQb2ludGVyKE1hY2hp
bmVDb250ZXh0OjpzdGFja1BvaW50ZXIoY29udGV4dCkpCisgICAgICAgICwgZnJhbWVQb2ludGVy
KE1hY2hpbmVDb250ZXh0OjpmcmFtZVBvaW50ZXIoY29udGV4dCkpCiAgICAgeyB9CiAKICAgICB2
b2lkIGR1bXAoKQpAQCAtMTEyLDcgKzExMiw3IEBAIHN0cnVjdCBTaWduYWxDb250ZXh0IHsKICAg
ICAgICAgdihncykKIAogI2RlZmluZSBEVU1QX1JFR0lTVEVSKF9fcmVnKSBcCi0gICAgICAgIGxv
ZygiUmVnaXN0ZXIgIiAjX19yZWcgIjogJXAiLCByZWludGVycHJldF9jYXN0PHZvaWQqPihtY29u
dGV4dC0+X19zcy5fXyMjX19yZWcpKTsKKyAgICAgICAgbG9nKCJSZWdpc3RlciAiICNfX3JlZyAi
OiAlcCIsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNvbnRleHQuX18jI19fcmVnKSk7CiAgICAg
ICAgIEZPUl9FQUNIX1JFR0lTVEVSKERVTVBfUkVHSVNURVIpCiAjdW5kZWYgRk9SX0VBQ0hfUkVH
SVNURVIKIApAQCAtMTIwLDIwICsxMjAsMjAgQEAgc3RydWN0IFNpZ25hbENvbnRleHQgewogICAg
ICAgICBpbnQgaTsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IDI4OyBpICs9IDQpIHsKICAgICAg
ICAgICAgIGxvZygieCVkOiAlMDE2bGx4IHglZDogJTAxNmxseCB4JWQ6ICUwMTZsbHggeCVkOiAl
MDE2bGx4IiwKLSAgICAgICAgICAgICAgICBpLCBtY29udGV4dC0+X19zcy5fX3hbaV0sCi0gICAg
ICAgICAgICAgICAgaSsxLCBtY29udGV4dC0+X19zcy5fX3hbaSsxXSwKLSAgICAgICAgICAgICAg
ICBpKzIsIG1jb250ZXh0LT5fX3NzLl9feFtpKzJdLAotICAgICAgICAgICAgICAgIGkrMywgbWNv
bnRleHQtPl9fc3MuX194W2krM10pOworICAgICAgICAgICAgICAgIGksIGNvbnRleHQuX194W2ld
LAorICAgICAgICAgICAgICAgIGkrMSwgY29udGV4dC5fX3hbaSsxXSwKKyAgICAgICAgICAgICAg
ICBpKzIsIGNvbnRleHQuX194W2krMl0sCisgICAgICAgICAgICAgICAgaSszLCBjb250ZXh0Ll9f
eFtpKzNdKTsKICAgICAgICAgfQogICAgICAgICBBU1NFUlQoaSA8IDI5KTsKICAgICAgICAgbG9n
KCJ4JWQ6ICUwMTZsbHggZnA6ICUwMTZsbHggbHI6ICUwMTZsbHgiLAotICAgICAgICAgICAgaSwg
bWNvbnRleHQtPl9fc3MuX194W2ldLCBtY29udGV4dC0+X19zcy5fX2ZwLCBtY29udGV4dC0+X19z
cy5fX2xyKTsKKyAgICAgICAgICAgIGksIGNvbnRleHQuX194W2ldLCBjb250ZXh0Ll9fZnAsIGNv
bnRleHQuX19scik7CiAgICAgICAgIGxvZygic3A6ICUwMTZsbHggcGM6ICUwMTZsbHggY3Bzcjog
JTA4eCIsCi0gICAgICAgICAgICBtY29udGV4dC0+X19zcy5fX3NwLCBtY29udGV4dC0+X19zcy5f
X3BjLCBtY29udGV4dC0+X19zcy5fX2Nwc3IpOworICAgICAgICAgICAgY29udGV4dC5fX3NwLCBj
b250ZXh0Ll9fcGMsIGNvbnRleHQuX19jcHNyKTsKICNlbmRpZgogICAgIH0KIAotICAgIG1jb250
ZXh0X3QmIG1jb250ZXh0OworICAgIFBsYXRmb3JtUmVnaXN0ZXJzJiBjb250ZXh0OwogICAgIHZv
aWQqIG1hY2hpbmVQQzsKICAgICB2b2lkKiBzdGFja1BvaW50ZXI7CiAgICAgdm9pZCogZnJhbWVQ
b2ludGVyOwpAQCAtMTQyLDggKzE0Miw4IEBAIHN0cnVjdCBTaWduYWxDb250ZXh0IHsKIHN0YXRp
YyB2b2lkIGluc3RhbGxDcmFzaEhhbmRsZXIoKQogewogI2lmIENQVShYODZfNjQpIHx8IENQVShB
Uk02NCkKLSAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWw6OklsbCwgW10gKGludCwgc2ln
aW5mb190Kiwgdm9pZCogdWFwKSB7Ci0gICAgICAgIFNpZ25hbENvbnRleHQgY29udGV4dChzdGF0
aWNfY2FzdDx1Y29udGV4dF90Kj4odWFwKS0+dWNfbWNvbnRleHQpOworICAgIGluc3RhbGxTaWdu
YWxIYW5kbGVyKFNpZ25hbDo6SWxsLCBbXSAoU2lnbmFsLCBTaWdJbmZvJiwgUGxhdGZvcm1SZWdp
c3RlcnMmIHJlZ2lzdGVycykgeworICAgICAgICBTaWduYWxDb250ZXh0IGNvbnRleHQocmVnaXN0
ZXJzKTsKIAogICAgICAgICBpZiAoIWlzSklUUEMoY29udGV4dC5tYWNoaW5lUEMpKQogICAgICAg
ICAgICAgcmV0dXJuIFNpZ25hbEFjdGlvbjo6Tm90SGFuZGxlZDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAppbmRleCAxZGQwY2QxZDgzNWM2YzJmMjMxYjAwYjg4
NmRkZTRhZjcyYzI2M2NlLi5iMWI1OThkMjBjNWMwMDc3ZDllOWQwOGUzNjhhZDVjYTE3ODMxYmFm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCkBAIC0yNDIs
NyArMjQyLDcgQEAgdm9pZCBCQlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKENvbXBpbGF0aW9uRWZm
b3J0IGVmZm9ydCkKICAgICAgICAgQVNTRVJUKHZhbGlkYXRlRnVuY3Rpb24oZnVuY3Rpb25TdGFy
dCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSkp
OwogCiAgICAgICAgIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0gPSBW
ZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4oKTsKLSAgICAgICAgVGllclVwQ291bnQqIHRp
ZXJVcCA9ICZtX3RpZXJVcENvdW50c1tmdW5jdGlvbkluZGV4XTsKKyAgICAgICAgVGllclVwQ291
bnQqIHRpZXJVcCA9IE9wdGlvbnM6OnVzZUJCUVRpZXJVcENoZWNrcygpID8gJm1fdGllclVwQ291
bnRzW2Z1bmN0aW9uSW5kZXhdIDogbnVsbHB0cjsKICAgICAgICAgYXV0byBwYXJzZUFuZENvbXBp
bGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUobV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9u
SW5kZXhdLCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBtX3VubGlu
a2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdLCBtX21vZHVsZUluZm9ybWF0aW9uLmdl
dCgpLCBtX21vZGUsIENvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZSwgZnVuY3Rpb25JbmRleCwgdGll
clVwKTsKIAogICAgICAgICBpZiAoVU5MSUtFTFkoIXBhcnNlQW5kQ29tcGlsZVJlc3VsdCkpIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhh
bmRsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFu
ZGxlci5jcHAKaW5kZXggMmUwYzk5YTM5YmViZDMxNzhiOTE0OGQ5NThmZTUzZTU3YTYyMjk3ZS4u
MjY0YzM0ZGU0NWRhMTc1YTVkNTE0MWMxNzFlZmU5NWUwNjNjNWUyNyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAKQEAg
LTUyLDkgKzUyLDggQEAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxIYXNoU2V0PHN0ZDo6dHVw
bGU8dm9pZCosIHZvaWQqPj4+IGNvZGVMb2NhdGlvbnM7IC8vICgKIAogc3RhdGljIGJvb2wgZmFz
dEhhbmRsZXJJbnN0YWxsZWQgeyBmYWxzZSB9OwogCi1zdGF0aWMgU2lnbmFsQWN0aW9uIHRyYXBI
YW5kbGVyKGludCwgc2lnaW5mb190KiBzaWdJbmZvLCB2b2lkKiB1Y29udGV4dCkKK3N0YXRpYyBT
aWduYWxBY3Rpb24gdHJhcEhhbmRsZXIoU2lnbmFsLCBTaWdJbmZvJiBzaWdJbmZvLCBQbGF0Zm9y
bVJlZ2lzdGVycyYgY29udGV4dCkKIHsKLSAgICBtY29udGV4dF90JiBjb250ZXh0ID0gc3RhdGlj
X2Nhc3Q8dWNvbnRleHRfdCo+KHVjb250ZXh0KS0+dWNfbWNvbnRleHQ7CiAgICAgdm9pZCogZmF1
bHRpbmdJbnN0cnVjdGlvbiA9IE1hY2hpbmVDb250ZXh0OjppbnN0cnVjdGlvblBvaW50ZXIoY29u
dGV4dCk7CiAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgInN0YXJ0aW5nIGhhbmRsZXIgZm9yIGZh
dWx0IGF0OiAiLCBSYXdQb2ludGVyKGZhdWx0aW5nSW5zdHJ1Y3Rpb24pKTsKIApAQCAtNjQsNyAr
NjMsNyBAQCBzdGF0aWMgU2lnbmFsQWN0aW9uIHRyYXBIYW5kbGVyKGludCwgc2lnaW5mb190KiBz
aWdJbmZvLCB2b2lkKiB1Y29udGV4dCkKICAgICBpZiAoaXNKSVRQQyhmYXVsdGluZ0luc3RydWN0
aW9uKSkgewogICAgICAgICBib29sIGZhdWx0ZWRJbkFjdGl2ZUZhc3RNZW1vcnkgPSBmYWxzZTsK
ICAgICAgICAgewotICAgICAgICAgICAgdm9pZCogZmF1bHRpbmdBZGRyZXNzID0gc2lnSW5mby0+
c2lfYWRkcjsKKyAgICAgICAgICAgIHZvaWQqIGZhdWx0aW5nQWRkcmVzcyA9IHNpZ0luZm8uZmF1
bHRpbmdBZGRyZXNzOwogICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgImNoZWNraW5n
IGZhdWx0aW5nIGFkZHJlc3M6ICIsIFJhd1BvaW50ZXIoZmF1bHRpbmdBZGRyZXNzKSwgIiBpcyBp
biBhbiBhY3RpdmUgZmFzdCBtZW1vcnkiKTsKICAgICAgICAgICAgIGZhdWx0ZWRJbkFjdGl2ZUZh
c3RNZW1vcnkgPSBXYXNtOjpNZW1vcnk6OmFkZHJlc3NJc0luQWN0aXZlRmFzdE1lbW9yeShmYXVs
dGluZ0FkZHJlc3MpOwogICAgICAgICB9CkBAIC0xMjQsMTEgKzEyMywxMSBAQCB2b2lkIGVuYWJs
ZUZhc3RNZW1vcnkoKQogICAgICAgICAgICAgcmV0dXJuOwogCiAjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZX0ZBU1RfTUVNT1JZKQotICAgICAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWw6OkJ1
cywgW10gKGludCBzaWduYWwsIHNpZ2luZm9fdCogc2lnSW5mbywgdm9pZCogdWNvbnRleHQpIHsK
KyAgICAgICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFsOjpCdXMsIFtdIChTaWduYWwgc2ln
bmFsLCBTaWdJbmZvJiBzaWdJbmZvLCBQbGF0Zm9ybVJlZ2lzdGVycyYgdWNvbnRleHQpIHsKICAg
ICAgICAgICAgIHJldHVybiB0cmFwSGFuZGxlcihzaWduYWwsIHNpZ0luZm8sIHVjb250ZXh0KTsK
ICAgICAgICAgfSk7CiAKLSAgICAgICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFsOjpTZWdW
LCBbXSAoaW50IHNpZ25hbCwgc2lnaW5mb190KiBzaWdJbmZvLCB2b2lkKiB1Y29udGV4dCkgewor
ICAgICAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWw6OlNlZ1YsIFtdIChTaWduYWwgc2ln
bmFsLCBTaWdJbmZvJiBzaWdJbmZvLCBQbGF0Zm9ybVJlZ2lzdGVycyYgdWNvbnRleHQpIHsKICAg
ICAgICAgICAgIHJldHVybiB0cmFwSGFuZGxlcihzaWduYWwsIHNpZ0luZm8sIHVjb250ZXh0KTsK
ICAgICAgICAgfSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21NYWNoaW5lVGhyZWFkcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWFj
aGluZVRocmVhZHMuY3BwCmluZGV4IDVhYWM4N2FjYjU3NDdjN2ZjYTJmOTM2ZWM5Y2Y2NzhiNDMx
NzgxNzEuLjBhMzY3ZmQ1ZTIyNTI3ZTljM2M4NzUzNmVjZmQ3MmIxM2RmNzlkNWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NYWNoaW5lVGhyZWFkcy5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1hY2hpbmVUaHJlYWRzLmNwcApAQCAt
MzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIk1hY2hpbmVTdGFja01hcmtlci5oIgogI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRNZXNzYWdlLmg+Cisj
aW5jbHVkZSA8d3RmL3RocmVhZHMvU2lnbmFscy5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIFdhc20gewogCkBAIC01Nyw3ICs1OCw3IEBAIHZvaWQgcmVzZXRJbnN0cnVjdGlvbkNhY2hl
T25BbGxUaHJlYWRzKCkKIAogICAgIGNvbnN0IERvdWJseUxpbmtlZExpc3Q8TWFjaGluZVRocmVh
ZHM6Ok1hY2hpbmVUaHJlYWQ+JiB0aHJlYWRzID0gd2FzbVRocmVhZHMoKS50aHJlYWRzTGlzdEhl
YWQobG9ja2VyKTsKICAgICBmb3IgKGNvbnN0IGF1dG8qIHRocmVhZCA9IHRocmVhZHMuaGVhZCgp
OyB0aHJlYWQ7IHRocmVhZCA9IHRocmVhZC0+bmV4dCgpKSB7Ci0gICAgICAgIHNlbmRNZXNzYWdl
KHRocmVhZC0+bV90aHJlYWQuZ2V0KCksIFtdIChzaWdpbmZvX3QqLCB1Y29udGV4dF90Kikgewor
ICAgICAgICBzZW5kTWVzc2FnZSh0aHJlYWQtPm1fdGhyZWFkLmdldCgpLCBbXSAoY29uc3QgUGxh
dGZvcm1SZWdpc3RlcnMmKSB7CiAgICAgICAgICAgICAvLyBJdCdzIGxpa2VseSB0aGF0IHRoZSBz
aWduYWwgaGFuZGxlciB3aWxsIGFscmVhZHkgcmVzZXQgdGhlIGluc3RydWN0aW9uIGNhY2hlIGJ1
dCB3ZSBtaWdodCBhcyB3ZWxsIGJlIHN1cmUuCiAgICAgICAgICAgICBXVEY6OmNyb3NzTW9kaWZ5
aW5nQ29kZUZlbmNlKCk7CiAgICAgICAgIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9Db25m
aWd1cmF0aW9ucy9XVEYueGNjb25maWcgYi9Tb3VyY2UvV1RGL0NvbmZpZ3VyYXRpb25zL1dURi54
Y2NvbmZpZwppbmRleCA0MjFlZmQ5NjFjMTQ2OGNkMjBkZGM1YmJmODg5NjIwZWUxY2Y1OGRjLi5h
ZjE5OWNlYjk1MDZmODk1MGQzM2E5Y2U0ODA3YmE2ZGJiN2IyN2U1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL0NvbmZpZ3VyYXRpb25zL1dURi54Y2NvbmZpZworKysgYi9Tb3VyY2UvV1RGL0NvbmZp
Z3VyYXRpb25zL1dURi54Y2NvbmZpZwpAQCAtMjcsMyArMjcsNiBAQCBQUk9EVUNUX05BTUUgPSBX
VEY7CiAKIEdDQ19TWU1CT0xTX1BSSVZBVEVfRVhURVJOID0gWUVTOwogU1RSSVBfSU5TVEFMTEVE
X1BST0RVQ1QgPSBOTzsKKworRVhDTFVERURfU09VUkNFX0ZJTEVfTkFNRVNfID0gTWFjaEV4Y2Vw
dGlvbnMuZGVmcworRVhDTFVERURfU09VUkNFX0ZJTEVfTkFNRVNbc2RrPWlwaG9uZW9zKl0gPSAk
KEVYQ0xVREVEX1NPVVJDRV9GSUxFX05BTUVTXyQoVVNFX0lOVEVSTkFMX1NESykpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dU
Ri9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA1ZjQ1Mjg3ZjZlM2M2ODg1YjIy
YmEyNzc2Y2ZiYzZhMzMyM2JkMDViLi41ODU0NGNjYjYyY2IyMjEyYmFlZTc2ZjRkMmEwMWU4OWI2
YjdiMDk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTY0
LDYgKzY0LDcgQEAKIAkJNTIxODMwMTJDOTlFNDc2QTg0RUVCRUE4IC8qIFN5bWJvbEltcGwuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjcyQkJEQjEw
N0ZBNDI0ODg2MTc4QjlFIC8qIFN5bWJvbEltcGwuY3BwICovOyB9OwogCQk1MzExQkQ1MzFFQTcx
Q0FEMDA1MjUyODEgLyogU2lnbmFscy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MzExQkQ1MTFFQTcxQ0FEMDA1MjUyODEgLyogU2lnbmFscy5jcHAg
Ki87IH07CiAJCTUzMTFCRDVDMUVBODIyRjkwMDUyNTI4MSAvKiBUaHJlYWRNZXNzYWdlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMTFCRDVCMUVB
ODIyRjkwMDUyNTI4MSAvKiBUaHJlYWRNZXNzYWdlLmNwcCAqLzsgfTsKKwkJNTM1MzRGMkExRUMw
RTEwRTAwMTQxQjJGIC8qIE1hY2hFeGNlcHRpb25zLmRlZnMgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzUzNEYyOTFFQzBFMTBFMDAxNDFCMkYgLyogTWFj
aEV4Y2VwdGlvbnMuZGVmcyAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChDbGllbnQsIFNl
cnZlciwgKTsgfTsgfTsKIAkJNzBBOTkzRkUxQUQ3MTUxMzAwRkE2MTVCIC8qIFN5bWJvbFJlZ2lz
dHJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcw
QTk5M0ZDMUFENzE1MTMwMEZBNjE1QiAvKiBTeW1ib2xSZWdpc3RyeS5jcHAgKi87IH07CiAJCTcw
RUNBNjBEMUIwMjQyNjgwMDQ0OTczOSAvKiBBdG9taWNTdHJpbmdJbXBsLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcwRUNBNjBBMUIwMjQyNjgwMDQ0
OTczOSAvKiBBdG9taWNTdHJpbmdJbXBsLmNwcCAqLzsgfTsKIAkJN0FGRUM2QjExRUIyMkI1OTAw
REFERTM2IC8qIFVVSUQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gN0FGRUM2QjAxRUIyMkI1OTAwREFERTM2IC8qIFVVSUQuY3BwICovOyB9OwpAQCAt
Mjk5LDYgKzMwMCw3IEBACiAJCTUzMTFCRDU3MUVBN0UxQTEwMDUyNTI4MSAvKiBTaWduYWxzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpZ25hbHMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTMxMUJENTkxRUE4MUE5NjAwNTI1MjgxIC8qIFRocmVhZE1lc3Nh
Z2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGhyZWFkTWVzc2FnZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzExQkQ1QjFFQTgyMkY5MDA1MjUyODEgLyog
VGhyZWFkTWVzc2FnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBU
aHJlYWRNZXNzYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM1MzRGMjkx
RUMwRTEwRTAwMTQxQjJGIC8qIE1hY2hFeGNlcHRpb25zLmRlZnMgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLm1pZzsgcGF0aCA9IE1hY2hFeGNlcHRpb25zLmRlZnM7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUzOUVCMDYyMUQ1NTI4NDIwMEM4MkVGNyAvKiBMRUJEZWNvZGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExFQkRlY29kZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTNFQzI1M0MxRTk1QUQzMDAwMDgzMUI5IC8qIFByaW9yaXR5UXVldWUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJpb3JpdHlRdWV1ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NTMwNzFDOTFDNDA0MjcyMDAzODQ4OTggLyogVGlu
eUxSVUNhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpbnlMUlVDYWNo
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTAyMyw2ICsxMDI1LDcgQEAKIAkJ
CWNoaWxkcmVuID0gKAogCQkJCTFBNDI4QjhCMUM4Rjg5REQwMDUxRTlFQiAvKiBBcHBLaXRDb21w
YXRpYmlsaXR5RGVjbGFyYXRpb25zLmggKi8sCiAJCQkJMUFDQUREODIxODg0NDgwMTAwRDhCNzFE
IC8qIERlcHJlY2F0ZWRTeW1ib2xzVXNlZEJ5U2FmYXJpLm1tICovLAorCQkJCTUzNTM0RjI5MUVD
MEUxMEUwMDE0MUIyRiAvKiBNYWNoRXhjZXB0aW9ucy5kZWZzICovLAogCQkJCUE4QTQ3MkM1MTUx
QTgyNUEwMDQxMjNGRiAvKiBNYWluVGhyZWFkTWFjLm1tICovLAogCQkJKTsKIAkJCXBhdGggPSBt
YWM7CkBAIC0xMzQ2LDYgKzEzNDksNyBAQAogCQkJCTE0M0Y2MTFGMTU2NUYwRjkwMERCNTE0QSAv
KiBSQU1TaXplLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEzQjcyNUVDOTg3NDQ2QUQ5M0YxQTQ0
MCAvKiBSYW5kb21EZXZpY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0MTQxNTFBODI1
QjAwNDEyM0ZGIC8qIFJhbmRvbU51bWJlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MzUzNEYy
QTFFQzBFMTBFMDAxNDFCMkYgLyogTWFjaEV4Y2VwdGlvbnMuZGVmcyBpbiBTb3VyY2VzICovLAog
CQkJCUE4QTQ3NDFBMTUxQTgyNUIwMDQxMjNGRiAvKiBSZWZDb3VudGVkTGVha0NvdW50ZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMkNERUQwRjMxODExNUM4NTAwNERCQTcwIC8qIFJ1bkxvb3Au
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkNERUQwRUYxODExNUMzODAwNERCQTcwIC8qIFJ1bkxv
b3BDRi5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRm
b3JtLmggYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCmluZGV4IDY4NTRhODFlMzk3MjcwNjcw
MzRkMDVkYjM5OGE0NzBjMTQyODQyNzYuLjM2Mzg4Mzk1ZDRmNDNiNDY1Mzg5ZWJjOTgwMmZiYjRk
OTBkMjRiN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKKysrIGIvU291
cmNlL1dURi93dGYvUGxhdGZvcm0uaApAQCAtNjYzLDYgKzY2MywxMCBAQAogI2RlZmluZSBIQVZF
X1JFQURMSU5FIDEKICNkZWZpbmUgSEFWRV9TWVNfVElNRUJfSCAxCiAKKyNpZiBfX2hhc19pbmNs
dWRlKDxtYWNoL21hY2hfZXhjLmRlZnM+KSAmJiAhKFBMQVRGT1JNKFdBVENIT1MpIHx8IFBMQVRG
T1JNKEFQUExFVFYpKQorI2RlZmluZSBIQVZFX01BQ0hfRVhDRVBUSU9OUyAxCisjZW5kaWYKKwog
I2lmICFQTEFURk9STShHVEspCiAjZGVmaW5lIFVTRV9BQ0NFTEVSQVRFIDEKICNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1SZWdpc3RlcnMuaCBiL1NvdXJjZS9XVEYv
d3RmL1BsYXRmb3JtUmVnaXN0ZXJzLmgKaW5kZXggZDViNWFiYzIyMWJiYWQ4Mjk3NjE5M2VjZTUx
YzFjNzYxNzVkYjA2ZC4uODRiZDg5Mzc0OTlkYTk5ZWFhODZiNzM2OTVmN2M1YjgxYWMyNjBjZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1SZWdpc3RlcnMuaAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi9QbGF0Zm9ybVJlZ2lzdGVycy5oCkBAIC0yNiw5ICsyNiwxMSBAQAogI3ByYWdt
YSBvbmNlCiAKICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGli
RXh0cmFzLmg+CiAKICNpZiBPUyhEQVJXSU4pCiAjaW5jbHVkZSA8bWFjaC90aHJlYWRfYWN0Lmg+
CisjaW5jbHVkZSA8c2lnbmFsLmg+CiAjZWxpZiBPUyhXSU5ET1dTKQogI2luY2x1ZGUgPHdpbmRv
d3MuaD4KICNlbHNlCkBAIC01NSw2ICs1NywxMSBAQCB0eXBlZGVmIGFybV90aHJlYWRfc3RhdGU2
NF90IFBsYXRmb3JtUmVnaXN0ZXJzOwogI2Vycm9yIFVua25vd24gQXJjaGl0ZWN0dXJlCiAjZW5k
aWYKIAoraW5saW5lIFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnNGcm9tVUNvbnRleHQodWNv
bnRleHRfdCogdWNvbnRleHQpCit7CisgICAgcmV0dXJuIHVjb250ZXh0LT51Y19tY29udGV4dC0+
X19zczsKK30KKwogI2VsaWYgT1MoV0lORE9XUykKIAogdXNpbmcgUGxhdGZvcm1SZWdpc3RlcnMg
PSBDT05URVhUOwpAQCAtNjUsNiArNzIsMTEgQEAgc3RydWN0IFBsYXRmb3JtUmVnaXN0ZXJzIHsK
ICAgICBtY29udGV4dF90IG1hY2hpbmVDb250ZXh0OwogfTsKIAoraW5saW5lIFBsYXRmb3JtUmVn
aXN0ZXJzJiByZWdpc3RlcnNGcm9tVUNvbnRleHQodWNvbnRleHRfdCogdWNvbnRleHQpCit7Cisg
ICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8UGxhdGZvcm1SZWdpc3RlcnMqPigmdWNvbnRleHQtPnVj
X21jb250ZXh0KTsKK30KKwogI2Vsc2UKIAogc3RydWN0IFBsYXRmb3JtUmVnaXN0ZXJzIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1N0YWNrQm91bmRzLmggYi9Tb3VyY2UvV1RGL3d0Zi9T
dGFja0JvdW5kcy5oCmluZGV4IDU1NDYwNGYyYWI0ODRjN2NmNzFlZTM4NjMwY2ViNGM3OWMzM2U5
NzIuLmNkNjJjMTQ4YTZjN2VmYzk1MTdhOGIwOWI4YTMyYzdmZTE5MGNkZWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL1N0YWNrQm91bmRzLmgKKysrIGIvU291cmNlL1dURi93dGYvU3RhY2tC
b3VuZHMuaApAQCAtNTQsNyArNTQsNiBAQCBwdWJsaWM6CiAgICAgICAgIDogbV9vcmlnaW4ob3Jp
Z2luKQogICAgICAgICAsIG1fYm91bmQoZW5kKQogICAgIHsKLSAgICAgICAgY2hlY2tDb25zaXN0
ZW5jeSgpOwogICAgIH0KIAogICAgIHZvaWQqIG9yaWdpbigpIGNvbnN0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXIuY3BwIGIvU291cmNlL1dURi93dGYvVGhyZWFkSG9s
ZGVyLmNwcAppbmRleCAzMGIyMjdjZGI4YWM1MjYwNzUwYjQ3ZDQ4MmFiYzJkNTViZTNhYzk0Li45
NmQ5MWI1Yjg3ZGRmOTc4ODA1ZGI2ZWIxZjYwZGMwMGUxNDlhNDg2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXIuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZEhv
bGRlci5jcHAKQEAgLTM0LDEyICszNCwxNyBAQAogCiAjaW5jbHVkZSAiVGhyZWFkaW5nLmgiCiAK
KyNpbmNsdWRlIDx3dGYvdGhyZWFkcy9TaWduYWxzLmg+CisKIG5hbWVzcGFjZSBXVEYgewogCiBU
aHJlYWRTcGVjaWZpY0tleSBUaHJlYWRIb2xkZXI6Om1fa2V5ID0gSW52YWxpZFRocmVhZFNwZWNp
ZmljS2V5OwogCiBUaHJlYWRIb2xkZXI6On5UaHJlYWRIb2xkZXIoKQogeworI2lmIEhBVkUoTUFD
SF9FWENFUFRJT05TKQorICAgIHJlbW92ZVRocmVhZCgmbV90aHJlYWQuZ2V0KCkpOworI2VuZGlm
CiAgICAgbV90aHJlYWQtPmRpZEV4aXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvVGhyZWFkTWVzc2FnZS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRNZXNzYWdlLmNwcApp
bmRleCBmMTRiYzQ1ZDM2MTRjN2M2NjM1ZWIxN2FiMGUyNzI4MTZhMTM3M2RkLi4wNWIzYjg5ZDVk
ZDRiM2Q4ZTQzN2Q1MmJhOTMwYTkzMDczYjEzOGIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9UaHJlYWRNZXNzYWdlLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRNZXNzYWdlLmNw
cApAQCAtMzYsNiArMzYsOSBAQAogI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KICNpbmNsdWRlIDx3
dGYvdGhyZWFkcy9TaWduYWxzLmg+CiAKKyNpZiBIQVZFKE1BQ0hfRVhDRVBUSU9OUykKKyNpbmNs
dWRlIDxtYWNoL3RocmVhZF9hY3QuaD4KKyNlbmRpZgogCiBuYW1lc3BhY2UgV1RGIHsKIApAQCAt
ODMsMTIgKzg2LDEyIEBAIHZvaWQgaW5pdGlhbGl6ZVRocmVhZE1lc3NhZ2VzKCkKIH0KIAogU1VQ
UFJFU1NfQVNBTgotTWVzc2FnZVN0YXR1cyBzZW5kTWVzc2FnZVNjb3BlZChUaHJlYWQmIHRocmVh
ZCwgY29uc3QgVGhyZWFkTWVzc2FnZSYgbWVzc2FnZSkKK3N0YXRpYyBNZXNzYWdlU3RhdHVzIHNl
bmRNZXNzYWdlU2lnbmFsKFRocmVhZCYgdGhyZWFkLCBjb25zdCBUaHJlYWRNZXNzYWdlJiBtZXNz
YWdlKQogewogICAgIGNvbnN0ZXhwciBTaWduYWwgc2lnbmFsID0gU2lnbmFsOjpVc3I7CiAgICAg
c3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2U7CiAgICAgc3RkOjpjYWxsX29uY2Uob25jZSwgW10g
ewotICAgICAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihzaWduYWwsIFtdIChpbnQsIHNpZ2luZm9f
dCogaW5mbywgdm9pZCogdWFwKSB7CisgICAgICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKHNpZ25h
bCwgW10gKFNpZ25hbCwgU2lnSW5mbyYsIFBsYXRmb3JtUmVnaXN0ZXJzJiBjb250ZXh0KSB7CiAg
ICAgICAgICAgICBUaHJlYWQqIHRocmVhZCA9IFRocmVhZDo6Y3VycmVudE1heUJlTnVsbCgpOwog
CiAgICAgICAgICAgICBpZiAoIXRocmVhZCkgewpAQCAtOTgsNyArMTAxLDcgQEAgTWVzc2FnZVN0
YXR1cyBzZW5kTWVzc2FnZVNjb3BlZChUaHJlYWQmIHRocmVhZCwgY29uc3QgVGhyZWFkTWVzc2Fn
ZSYgbWVzc2FnZSkKIAogICAgICAgICAgICAgLy8gTm9kZSBzaG91bGQgYmUgZGVsZXRlZCBpbiB0
aGUgc2VuZGVyIHRocmVhZC4gRGVsZXRpbmcgTm9kZXMgaW4gc2lnbmFsIGhhbmRsZXIgY2F1c2Vz
IGRlYWQgbG9jay4KICAgICAgICAgICAgIHRocmVhZC0+dGhyZWFkTWVzc2FnZXMoKS5jb25zdW1l
QWxsV2l0aE5vZGUoWyZdIChUaHJlYWRNZXNzYWdlRGF0YSogZGF0YSwgTm9kZSogbm9kZSkgewot
ICAgICAgICAgICAgICAgIGRhdGEtPm1lc3NhZ2UoaW5mbywgc3RhdGljX2Nhc3Q8dWNvbnRleHRf
dCo+KHVhcCkpOworICAgICAgICAgICAgICAgIGRhdGEtPm1lc3NhZ2UoY29udGV4dCk7CiAgICAg
ICAgICAgICAgICAgLy8gQnkgc2V0dGluZyByYW4gdmFyaWFibGUsICgxKSB0aGUgc2VuZGVyIGFj
a25vd2xlZGdlcyB0aGUgY29tcGxldGlvbiBhbmQKICAgICAgICAgICAgICAgICAvLyAoMikgZ2V0
cyB0aGUgTm9kZSB0byBiZSBkZWxldGVkLgogICAgICAgICAgICAgICAgIGRhdGEtPnJhbi5zdG9y
ZShub2RlKTsKQEAgLTE1Niw2ICsxNTksNjAgQEAgTWVzc2FnZVN0YXR1cyBzZW5kTWVzc2FnZVNj
b3BlZChUaHJlYWQmIHRocmVhZCwgY29uc3QgVGhyZWFkTWVzc2FnZSYgbWVzc2FnZSkKICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCisjaWYgSEFWRShNQUNIX0VYQ0VQVElP
TlMpCitzdGF0aWMgTWVzc2FnZVN0YXR1cyBzZW5kTWVzc2FnZU1hY2goVGhyZWFkJiB0aHJlYWQs
IGNvbnN0IFRocmVhZE1lc3NhZ2UmIG1lc3NhZ2UpCit7CisgICAgc3RhdGljIFN0YXRpY0xvY2sg
bWVzc2FnZUxvY2s7CisgICAgYXV0byBsb2NraG9sZGVyID0gaG9sZExvY2sobWVzc2FnZUxvY2sp
OworCisgICAgYXV0byByZXN1bHQgPSB0aHJlYWQuc3VzcGVuZCgpOworICAgIGlmICghcmVzdWx0
KQorICAgICAgICByZXR1cm4gTWVzc2FnZVN0YXR1czo6VGhyZWFkRXhpdGVkOworCisjaWYgQ1BV
KFg4NikKKyAgICB1bnNpZ25lZCB1c2VyQ291bnQgPSBzaXplb2YoUGxhdGZvcm1SZWdpc3RlcnMp
IC8gc2l6ZW9mKGludCk7CisgICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IGkzODZf
VEhSRUFEX1NUQVRFOworI2VsaWYgQ1BVKFg4Nl82NCkKKyAgICB1bnNpZ25lZCB1c2VyQ291bnQg
PSB4ODZfVEhSRUFEX1NUQVRFNjRfQ09VTlQ7CisgICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZs
YXZvciA9IHg4Nl9USFJFQURfU1RBVEU2NDsKKyNlbGlmIENQVShBUk0pCisgICAgdW5zaWduZWQg
dXNlckNvdW50ID0gQVJNX1RIUkVBRF9TVEFURV9DT1VOVDsKKyAgICB0aHJlYWRfc3RhdGVfZmxh
dm9yX3QgZmxhdm9yID0gQVJNX1RIUkVBRF9TVEFURTsKKyNlbGlmIENQVShBUk02NCkKKyAgICB1
bnNpZ25lZCB1c2VyQ291bnQgPSBBUk1fVEhSRUFEX1NUQVRFNjRfQ09VTlQ7CisgICAgdGhyZWFk
X3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IEFSTV9USFJFQURfU1RBVEU2NDsKKyNlbHNlCisjZXJy
b3IgVW5rbm93biBBcmNoaXRlY3R1cmUKKyNlbmRpZgorCisgICAgUGxhdGZvcm1SZWdpc3RlcnMg
cmVnaXN0ZXJzOworICAgIHRocmVhZF9zdGF0ZV90IHN0YXRlID0gcmVpbnRlcnByZXRfY2FzdDx0
aHJlYWRfc3RhdGVfdD4oJnJlZ2lzdGVycyk7CisgICAgdGhyZWFkX2dldF9zdGF0ZSh0aHJlYWQu
bWFjaFRocmVhZCgpLCBmbGF2b3IsIHN0YXRlLCAmdXNlckNvdW50KTsKKworICAgIG1lc3NhZ2Uo
cmVnaXN0ZXJzKTsKKworICAgIHRocmVhZF9zZXRfc3RhdGUodGhyZWFkLm1hY2hUaHJlYWQoKSwg
Zmxhdm9yLCAodGhyZWFkX3N0YXRlX3QpJnJlZ2lzdGVycywgdXNlckNvdW50KTsKKworICAgIHRo
cmVhZC5yZXN1bWUoKTsKKyAgICByZXR1cm4gTWVzc2FnZVN0YXR1czo6TWVzc2FnZVJhbjsKK30K
Kworc3RhdGljIGJvb2wgdXNlTWFjaCA9IGZhbHNlOwordm9pZCBkZWxpdmVyTWVzc2FnZXNVc2lu
Z01hY2goKSB7IHVzZU1hY2ggPSB0cnVlOyB9CisKKyNlbmRpZiAvLyBIQVZFKE1BQ0hfRVhDRVBU
SU9OUykKKworTWVzc2FnZVN0YXR1cyBzZW5kTWVzc2FnZVNjb3BlZChUaHJlYWQmIHRocmVhZCwg
Y29uc3QgVGhyZWFkTWVzc2FnZSYgbWVzc2FnZSkKK3sKKyNpZiBIQVZFKE1BQ0hfRVhDRVBUSU9O
UykKKyAgICBpZiAodXNlTWFjaCkKKyAgICAgICAgcmV0dXJuIHNlbmRNZXNzYWdlTWFjaCh0aHJl
YWQsIG1lc3NhZ2UpOworI2VuZGlmCisgICAgcmV0dXJuIHNlbmRNZXNzYWdlU2lnbmFsKHRocmVh
ZCwgbWVzc2FnZSk7CisgICAgcmV0dXJuIE1lc3NhZ2VTdGF0dXM6OlRocmVhZEV4aXRlZDsKK30K
KworCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogI2VuZGlmIC8vIFVTRShQVEhSRUFEUykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZE1lc3NhZ2UuaCBiL1NvdXJjZS9XVEYvd3RmL1Ro
cmVhZE1lc3NhZ2UuaAppbmRleCA5YWU1M2YyOWNmN2U4ZmIwMGVmOTIxMWQxNmNlMmNkZWQ2MDNl
YzFiLi4zMDA0NzJiM2U3MWM0MmVjODk4NzRhM2RlMGZmMzc2MWNhOTY5MTBjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRNZXNzYWdlLmgKKysrIGIvU291cmNlL1dURi93dGYvVGhy
ZWFkTWVzc2FnZS5oCkBAIC0zNiw3ICszNiw3IEBAIG5hbWVzcGFjZSBXVEYgewogdm9pZCBpbml0
aWFsaXplVGhyZWFkTWVzc2FnZXMoKTsKIAogY2xhc3MgVGhyZWFkTWVzc2FnZURhdGE7Ci11c2lu
ZyBUaHJlYWRNZXNzYWdlID0gU2NvcGVkTGFtYmRhPHZvaWQoc2lnaW5mb190KiwgdWNvbnRleHRf
dCopPjsKK3VzaW5nIFRocmVhZE1lc3NhZ2UgPSBTY29wZWRMYW1iZGE8dm9pZChQbGF0Zm9ybVJl
Z2lzdGVycyYpPjsKIAogZW51bSBjbGFzcyBNZXNzYWdlU3RhdHVzIHsKICAgICBNZXNzYWdlUmFu
LApAQCAtNTEsMTAgKzUxLDE0IEBAIE1lc3NhZ2VTdGF0dXMgc2VuZE1lc3NhZ2VTY29wZWQoVGhy
ZWFkJiwgY29uc3QgVGhyZWFkTWVzc2FnZSYpOwogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4K
IE1lc3NhZ2VTdGF0dXMgc2VuZE1lc3NhZ2UoVGhyZWFkJiB0YXJnZXRUaHJlYWQsIGNvbnN0IEZ1
bmN0b3ImIGZ1bmMpCiB7Ci0gICAgYXV0byBsYW1iZGEgPSBzY29wZWRMYW1iZGFSZWY8dm9pZChz
aWdpbmZvX3QqLCB1Y29udGV4dF90Kik+KGZ1bmMpOworICAgIGF1dG8gbGFtYmRhID0gc2NvcGVk
TGFtYmRhUmVmPHZvaWQoUGxhdGZvcm1SZWdpc3RlcnMmKT4oZnVuYyk7CiAgICAgcmV0dXJuIHNl
bmRNZXNzYWdlU2NvcGVkKHRhcmdldFRocmVhZCwgbGFtYmRhKTsKIH0KIAorI2lmIEhBVkUoTUFD
SF9FWENFUFRJT05TKQordm9pZCBkZWxpdmVyTWVzc2FnZXNVc2luZ01hY2goKTsKKyNlbmRpZgor
CiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjpzZW5kTWVzc2FnZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5oIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5n
LmgKaW5kZXggZDJlNTM2ZGY3YTg2OTZkOGU2Yjk1YmE0M2UxNzNkM2I1NTBiZjE2YS4uMzUxNGU4
YzA5ZjBmYzk0ZDUzNGJlMmYzYjZlN2M0OTUwZTBiY2YwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvVGhyZWFkaW5nLmgKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmgKQEAgLTEz
OCw2ICsxMzgsMTAgQEAgcHVibGljOgogCiAjaWYgVVNFKFBUSFJFQURTKQogICAgIExvY2tsZXNz
QmFnPFRocmVhZE1lc3NhZ2VEYXRhKj4mIHRocmVhZE1lc3NhZ2VzKCkgeyByZXR1cm4gbV90aHJl
YWRNZXNzYWdlczsgfQorCisjaWYgT1MoREFSV0lOKQorICAgIG1hY2hfcG9ydF90IG1hY2hUaHJl
YWQoKSB7IHJldHVybiBtX3BsYXRmb3JtVGhyZWFkOyB9CisjZW5kaWYKICNlbmRpZgogCiBwcm90
ZWN0ZWQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9tYWMvTWFjaEV4Y2VwdGlvbnMuZGVm
cyBiL1NvdXJjZS9XVEYvd3RmL21hYy9NYWNoRXhjZXB0aW9ucy5kZWZzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQy
MDU3NDJhNGVkNTAwZjgwNjRmZWViNDk1NWE3Yzk3MGQ5OWFmMGIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9tYWMvTWFjaEV4Y2VwdGlvbnMuZGVmcwpAQCAtMCwwICsxLDI2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
PG1hY2gvbWFjaF9leGMuZGVmcz4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RocmVhZHMv
U2lnbmFscy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi90aHJlYWRzL1NpZ25hbHMuY3BwCmluZGV4IDg1
NWIyOGIzMTcyMTcyN2NmMWY0MzFhOTE4YTI1MWRjMmU2YTNkZmMuLjE3NjQ3M2I5OWJjMzRjMmVl
Y2Q3MjA3NmYxYTQ2YTIyY2NhY2UzNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RocmVh
ZHMvU2lnbmFscy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdGhyZWFkcy9TaWduYWxzLmNwcApA
QCAtMjgsMjEgKzI4LDI2NCBAQAogCiAjaWYgVVNFKFBUSFJFQURTKQogCisjaWYgSEFWRShNQUNI
X0VYQ0VQVElPTlMpCitleHRlcm4gIkMiIHsKKyNpbmNsdWRlICJNYWNoRXhjZXB0aW9uc1NlcnZl
ci5oIgorfTsKKyNlbmRpZgorCiAjaW5jbHVkZSA8Y3N0ZGlvPgogI2luY2x1ZGUgPG11dGV4Pgog
I2luY2x1ZGUgPHNpZ25hbC5oPgorCisjaWYgSEFWRShNQUNIX0VYQ0VQVElPTlMpCisjaW5jbHVk
ZSA8bWFjaC9tYWNoLmg+CisjaW5jbHVkZSA8bWFjaC90aHJlYWRfYWN0Lmg+CisjZW5kaWYKKwog
I2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CiAjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KKyNpbmNs
dWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrbGVzc0JhZy5oPgogI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRNZXNzYWdlLmg+
CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCiAKIG5hbWVzcGFjZSBXVEYgewogCisgICAg
CiBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPExvY2tsZXNzQmFnPFNpZ25hbEhhbmRsZXI+PiBo
YW5kbGVyc1tzdGF0aWNfY2FzdDxzaXplX3Q+KFNpZ25hbDo6TnVtYmVyT2ZTaWduYWxzKV0gPSB7
IH07Ci1zdGF0aWMgc3RydWN0IHNpZ2FjdGlvbiBvbGRBY3Rpb25zW3N0YXRpY19jYXN0PHNpemVf
dD4oU2lnbmFsOjpOdW1iZXJPZlNpZ25hbHMpXTsKIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBpbml0
aWFsaXplT25jZUZsYWdzW3N0YXRpY19jYXN0PHNpemVfdD4oU2lnbmFsOjpOdW1iZXJPZlNpZ25h
bHMpXTsKK3N0YXRpYyBzdHJ1Y3Qgc2lnYWN0aW9uIG9sZEFjdGlvbnNbc3RhdGljX2Nhc3Q8c2l6
ZV90PihTaWduYWw6Ok51bWJlck9mU2lnbmFscyldOworCisjaWYgSEFWRShNQUNIX0VYQ0VQVElP
TlMpCitzdGF0aWMgbWFjaF9wb3J0X3QgZXhjZXB0aW9uUG9ydDsKK3N0YXRpYyBjb25zdGV4cHIg
c2l6ZV90IG1heE1lc3NhZ2VTaXplID0gMSAqIEtCOworCitzdGF0aWMgdm9pZCBzdGFydE1hY2hF
eGNlcHRpb25IYW5kbGVyVGhyZWFkKCkKK3sKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25j
ZTsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlLCBbXSB7CisgICAgICAgIGlmIChtYWNoX3BvcnRf
YWxsb2NhdGUobWFjaF90YXNrX3NlbGYoKSwgTUFDSF9QT1JUX1JJR0hUX1JFQ0VJVkUsICZleGNl
cHRpb25Qb3J0KSAhPSBLRVJOX1NVQ0NFU1MpCisgICAgICAgICAgICBDUkFTSCgpOworCisgICAg
ICAgIGlmIChtYWNoX3BvcnRfaW5zZXJ0X3JpZ2h0KG1hY2hfdGFza19zZWxmKCksIGV4Y2VwdGlv
blBvcnQsIGV4Y2VwdGlvblBvcnQsIE1BQ0hfTVNHX1RZUEVfTUFLRV9TRU5EKSE9IEtFUk5fU1VD
Q0VTUykKKyAgICAgICAgICAgIENSQVNIKCk7CisKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hv
dWxkIHVzZSBhIGRpc3BhdGNoIHF1ZXVlLgorICAgICAgICAodm9pZClUaHJlYWQ6OmNyZWF0ZSgK
KyAgICAgICAgICAgICJXVEYgTWFjaCBFeGNlcHRpb24gVGhyZWFkIiwgW10gKCkgeworICAgICAg
ICAgICAgICAgIHVuaW9uIE1lc3NhZ2UgeworICAgICAgICAgICAgICAgICAgICBtYWNoX21zZ19o
ZWFkZXJfdCBoZWFkZXI7CisgICAgICAgICAgICAgICAgICAgIGNoYXIgZGF0YVttYXhNZXNzYWdl
U2l6ZV07CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICBNZXNzYWdlIG1lc3Nh
Z2VIZWFkZXJJbjsKKyAgICAgICAgICAgICAgICBNZXNzYWdlIG1lc3NhZ2VIZWFkZXJPdXQ7CisK
KyAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgICAgICAgICBrZXJu
X3JldHVybl90IG1lc3NhZ2VSZXN1bHQgPSBtYWNoX21zZygmbWVzc2FnZUhlYWRlckluLmhlYWRl
ciwgTUFDSF9SQ1ZfTVNHLCAwLCBtYXhNZXNzYWdlU2l6ZSwgZXhjZXB0aW9uUG9ydCwgTUFDSF9N
U0dfVElNRU9VVF9OT05FLCBNQUNIX1BPUlRfTlVMTCk7CisgICAgICAgICAgICAgICAgICAgIGlm
IChtZXNzYWdlUmVzdWx0ID09IEtFUk5fU1VDQ0VTUykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFtYWNoX2V4Y19zZXJ2ZXIoJm1lc3NhZ2VIZWFkZXJJbi5oZWFkZXIsICZtZXNzYWdl
SGVhZGVyT3V0LmhlYWRlcikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1JBU0goKTsK
KworICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZVJlc3VsdCA9IG1hY2hfbXNnKCZtZXNz
YWdlSGVhZGVyT3V0LmhlYWRlciwgTUFDSF9TRU5EX01TRywgbWVzc2FnZUhlYWRlck91dC5oZWFk
ZXIubXNnaF9zaXplLCAwLCBtZXNzYWdlSGVhZGVyT3V0LmhlYWRlci5tc2doX2xvY2FsX3BvcnQs
IDAsIE1BQ0hfUE9SVF9OVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKG1lc3NhZ2VSZXN1bHQgPT0gS0VSTl9TVUNDRVNTKTsKKyAgICAgICAgICAgICAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkZhaWxlZCB0byByZWNl
aXZlIG1hY2ggbWVzc2FnZSBkdWUgdG8gIiwgbWFjaF9lcnJvcl9zdHJpbmcobWVzc2FnZVJlc3Vs
dCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfSkubGVha1JlZigpOworICAgIH0pOwor
fQorCitzdGF0aWMgU2lnbmFsIGZyb21NYWNoRXhjZXB0aW9uKGV4Y2VwdGlvbl90eXBlX3QgdHlw
ZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEVYQ19CQURfQUNDRVNTOiByZXR1
cm4gU2lnbmFsOjpTZWdWOworICAgIGNhc2UgRVhDX0JBRF9JTlNUUlVDVElPTjogcmV0dXJuIFNp
Z25hbDo6SWxsOworICAgIGNhc2UgRVhDX0JSRUFLUE9JTlQ6IHJldHVybiBTaWduYWw6OlRyYXA7
CisgICAgZGVmYXVsdDogYnJlYWs7CisgICAgfQorICAgIHJldHVybiBTaWduYWw6OlVua25vd247
Cit9CisKK3N0YXRpYyBleGNlcHRpb25fbWFza190IHRvTWFjaE1hc2soU2lnbmFsIHNpZ25hbCkK
K3sKKyAgICBzd2l0Y2ggKHNpZ25hbCkgeworICAgIGNhc2UgU2lnbmFsOjpTZWdWOiByZXR1cm4g
RVhDX01BU0tfQkFEX0FDQ0VTUzsKKyAgICBjYXNlIFNpZ25hbDo6SWxsOiByZXR1cm4gRVhDX01B
U0tfQkFEX0lOU1RSVUNUSU9OOworICAgIGNhc2UgU2lnbmFsOjpUcmFwOiByZXR1cm4gRVhDX01B
U0tfQlJFQUtQT0lOVDsKKyAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworZXh0ZXJuICJDIiB7CisKKy8vIFdlIG5lZWQgdG8g
aW1wbGVtZW50IHN0dWJzIGZvciBjYXRjaF9tYWNoX2V4Y2VwdGlvbl9yYWlzZSBhbmQgY2F0Y2hf
bWFjaF9leGNlcHRpb25fcmFpc2Vfc3RhdGVfaWRlbnRpdHkuCisvLyBUaGUgTWlHIGdlbmVyYXRl
ZCBmaWxlIHdpbGwgZmFpbCB0byBsaW5rIG90aGVyd2lzZSwgZXZlbiB0aG91Z2ggd2UgZG9uJ3Qg
dXNlIHRoZSBmdW5jdGlvbnMuIE9ubHkgdGhlCisvLyBjYXRjaF9tYWNoX2V4Y2VwdGlvbl9yYWlz
ZV9zdGF0ZSBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGJlY2F1c2Ugd2UgcGFzcyBFWENFUFRJ
T05fU1RBVEUgdG8KKy8vIHRocmVhZF9zZXRfZXhjZXB0aW9uX3BvcnRzLgora2Vybl9yZXR1cm5f
dCBjYXRjaF9tYWNoX2V4Y2VwdGlvbl9yYWlzZShtYWNoX3BvcnRfdCwgbWFjaF9wb3J0X3QsIG1h
Y2hfcG9ydF90LCBleGNlcHRpb25fdHlwZV90LCBtYWNoX2V4Y2VwdGlvbl9kYXRhX3QsIG1hY2hf
bXNnX3R5cGVfbnVtYmVyX3QpCit7CisgICAgZGF0YUxvZ0xuKCJXZSBzaG91bGQgbm90IGhhdmUg
Y2FsbGVkIGNhdGNoX2V4Y2VwdGlvbl9yYWlzZSgpLCBwbGVhc2UgZmlsZSBhIGJ1ZyBhdCBidWdz
LndlYmtpdC5vcmciKTsKKyAgICByZXR1cm4gS0VSTl9GQUlMVVJFOworfQorCitrZXJuX3JldHVy
bl90IGNhdGNoX21hY2hfZXhjZXB0aW9uX3JhaXNlX3N0YXRlX2lkZW50aXR5KG1hY2hfcG9ydF90
LCBtYWNoX3BvcnRfdCwgbWFjaF9wb3J0X3QsIGV4Y2VwdGlvbl90eXBlX3QsIG1hY2hfZXhjZXB0
aW9uX2RhdGFfdCwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCwgaW50KiwgdGhyZWFkX3N0YXRlX3Qs
IG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QsIHRocmVhZF9zdGF0ZV90LCAgbWFjaF9tc2dfdHlwZV9u
dW1iZXJfdCopCit7CisgICAgZGF0YUxvZ0xuKCJXZSBzaG91bGQgbm90IGhhdmUgY2FsbGVkIGNh
dGNoX21hY2hfZXhjZXB0aW9uX3JhaXNlX3N0YXRlX2lkZW50aXR5LCBwbGVhc2UgZmlsZSBhIGJ1
ZyBhdCBidWdzLndlYmtpdC5vcmciKTsKKyAgICByZXR1cm4gS0VSTl9GQUlMVVJFOworfQorCitr
ZXJuX3JldHVybl90IGNhdGNoX21hY2hfZXhjZXB0aW9uX3JhaXNlX3N0YXRlKAorICAgIG1hY2hf
cG9ydF90IHBvcnQsCisgICAgZXhjZXB0aW9uX3R5cGVfdCBleGNlcHRpb25UeXBlLAorICAgIGNv
bnN0IG1hY2hfZXhjZXB0aW9uX2RhdGFfdCBleGNlcHRpb25EYXRhLAorICAgIG1hY2hfbXNnX3R5
cGVfbnVtYmVyX3QgZGF0YUNvdW50LAorICAgIGludCogc3RhdGVGbGF2b3IsCisgICAgY29uc3Qg
dGhyZWFkX3N0YXRlX3QgaW5TdGF0ZSwKKyAgICBtYWNoX21zZ190eXBlX251bWJlcl90IGluU3Rh
dGVDb3VudCwKKyAgICB0aHJlYWRfc3RhdGVfdCBvdXRTdGF0ZSwKKyAgICBtYWNoX21zZ190eXBl
X251bWJlcl90KiBvdXRTdGF0ZUNvdW50KQoreworICAgIFJFTEVBU0VfQVNTRVJUKHBvcnQgPT0g
ZXhjZXB0aW9uUG9ydCk7CisgICAgU2lnbmFsIHNpZ25hbCA9IGZyb21NYWNoRXhjZXB0aW9uKGV4
Y2VwdGlvblR5cGUpOworICAgIGRhdGFMb2dMbigicmVjZWl2ZWRTaWduYWwgIiwgZXhjZXB0aW9u
VHlwZSk7CisgICAgZGF0YUxvZ0xuKCJUaHJlYWQ6ICIsIGV4Y2VwdGlvbkRhdGFbMF0pOworICAg
IFJFTEVBU0VfQVNTRVJUKHNpZ25hbCAhPSBTaWduYWw6OlVua25vd24pOworCisgICAgbWVtY3B5
KG91dFN0YXRlLCBpblN0YXRlLCBpblN0YXRlQ291bnQgKiBzaXplb2YoaW5TdGF0ZVswXSkpOwor
ICAgICpvdXRTdGF0ZUNvdW50ID0gaW5TdGF0ZUNvdW50OworCisjaWYgQ1BVKFg4Nl82NCkKKyAg
ICBSRUxFQVNFX0FTU0VSVCgqc3RhdGVGbGF2b3IgPT0geDg2X1RIUkVBRF9TVEFURSk7CisgICAg
UGxhdGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8eDg2X3RocmVh
ZF9zdGF0ZV90Kj4ob3V0U3RhdGUpLT51dHMudHM2NDsKKyNlbGlmIENQVShYODYpCisgICAgUkVM
RUFTRV9BU1NFUlQoKnN0YXRlRmxhdm9yID09IHg4Nl9USFJFQURfU1RBVEUpOworICAgIFBsYXRm
b3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMgPSByZWludGVycHJldF9jYXN0PHg4Nl90aHJlYWRfc3Rh
dGVfdCo+KG91dFN0YXRlKS0+dXRzLnRzMzI7CisjZWxpZiBDUFUoQVJNNjQpCisgICAgUkVMRUFT
RV9BU1NFUlQoKnN0YXRlRmxhdm9yID09IEFSTV9USFJFQURfU1RBVEUpOworICAgIFBsYXRmb3Jt
UmVnaXN0ZXJzJiByZWdpc3RlcnMgPSByZWludGVycHJldF9jYXN0PGFybV91bmlmaWVkX3RocmVh
ZF9zdGF0ZSo+KG91dFN0YXRlKS0+dHNfNjQ7CisjZWxpZiBDUFUoQVJNKQorICAgIFJFTEVBU0Vf
QVNTRVJUKCpzdGF0ZUZsYXZvciA9PSBBUk1fVEhSRUFEX1NUQVRFKTsKKyAgICBQbGF0Zm9ybVJl
Z2lzdGVycyYgcmVnaXN0ZXJzID0gcmVpbnRlcnByZXRfY2FzdDxhcm1fdW5pZmllZF90aHJlYWRf
c3RhdGUqPihvdXRTdGF0ZSktPnRzXzMyOworI2VuZGlmCisKKyAgICBTaWdJbmZvIGluZm87Cisg
ICAgaWYgKHNpZ25hbCA9PSBTaWduYWw6OlNlZ1YpIHsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChk
YXRhQ291bnQsIGRhdGFDb3VudCA9PSAyKTsKKyAgICAgICAgaW5mby5mYXVsdGluZ0FkZHJlc3Mg
PSByZWludGVycHJldF9jYXN0PHZvaWQqPihleGNlcHRpb25EYXRhWzFdKTsKKyAgICB9CisKKyAg
ICBib29sIGRpZEhhbmRsZSA9IGZhbHNlOworICAgIGhhbmRsZXJzW3N0YXRpY19jYXN0PHNpemVf
dD4oc2lnbmFsKV0tPml0ZXJhdGUoWyZdIChjb25zdCBTaWduYWxIYW5kbGVyJiBoYW5kbGVyKSB7
CisgICAgICAgIFNpZ25hbEFjdGlvbiBoYW5kbGVyUmVzdWx0ID0gaGFuZGxlcihzaWduYWwsIGlu
Zm8sIHJlZ2lzdGVycyk7CisgICAgICAgIGRhdGFMb2dMbihzdGF0aWNfY2FzdDxpbnQ+KGhhbmRs
ZXJSZXN1bHQpKTsKKyAgICAgICAgc3dpdGNoIChoYW5kbGVyUmVzdWx0KSB7CisgICAgICAgIGNh
c2UgU2lnbmFsQWN0aW9uOjpIYW5kbGVkOgorICAgICAgICAgICAgZGlkSGFuZGxlID0gdHJ1ZTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIGlmIChkaWRIYW5kbGUpCisgICAgICAgIHJldHVy
biBLRVJOX1NVQ0NFU1M7CisgICAgcmV0dXJuIEtFUk5fRkFJTFVSRTsKK30KKworfTsKKworc3Rh
dGljIGJvb2wgdXNlTWFjaCB7IGZhbHNlIH07Cit2b2lkIGhhbmRsZVNpZ25hbHNXaXRoTWFjaCgp
Cit7CisgICAgZGVsaXZlck1lc3NhZ2VzVXNpbmdNYWNoKCk7CisgICAgdXNlTWFjaCA9IHRydWU7
Cit9CisKKworc3RhdGljIFN0YXRpY0xvY2sgdGhyZWFkTG9jazsKK2V4Y2VwdGlvbl9tYXNrX3Qg
YWN0aXZlRXhjZXB0aW9ucyB7IDAgfTsKKworaW5saW5lIHZvaWQgc2V0RXhjZXB0aW9uUG9ydHMo
Y29uc3QgQWJzdHJhY3RMb2NrZXImLCBUaHJlYWQqIHRocmVhZCkKK3sKKyAgICBrZXJuX3JldHVy
bl90IHJlc3VsdCA9IHRocmVhZF9zZXRfZXhjZXB0aW9uX3BvcnRzKHRocmVhZC0+bWFjaFRocmVh
ZCgpLCBhY3RpdmVFeGNlcHRpb25zLCBleGNlcHRpb25Qb3J0LCBFWENFUFRJT05fU1RBVEUgfCBN
QUNIX0VYQ0VQVElPTl9DT0RFUywgTUFDSElORV9USFJFQURfU1RBVEUpOworICAgIGlmIChyZXN1
bHQgIT0gS0VSTl9TVUNDRVNTKSB7CisgICAgICAgIGRhdGFMb2dMbigidGhyZWFkIHNldCBwb3J0
IGZhaWxlZCBkdWUgdG8gIiwgbWFjaF9lcnJvcl9zdHJpbmcocmVzdWx0KSk7CisgICAgICAgIENS
QVNIKCk7CisgICAgfQorfQorCitpbmxpbmUgSGFzaFNldDxUaHJlYWQqPiYgYWN0aXZlVGhyZWFk
cyhjb25zdCBBYnN0cmFjdExvY2tlciYpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhh
c2hTZXQ8VGhyZWFkKj4+IGFjdGl2ZVRocmVhZHM7CisgICAgcmV0dXJuIGFjdGl2ZVRocmVhZHM7
Cit9CisKK3ZvaWQgcmVnaXN0ZXJUaHJlYWQoVGhyZWFkKiB0aHJlYWQpCit7CisgICAgYXV0byBs
b2NrZXIgPSBob2xkTG9jayh0aHJlYWRMb2NrKTsKKyAgICBhdXRvIHJlc3VsdCA9IGFjdGl2ZVRo
cmVhZHMobG9ja2VyKS5hZGQodGhyZWFkKTsKKworICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkK
KyAgICAgICAgc2V0RXhjZXB0aW9uUG9ydHMobG9ja2VyLCB0aHJlYWQpOworfQorCit2b2lkIHJl
bW92ZVRocmVhZChUaHJlYWQqIHRocmVhZCkKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KHRocmVhZExvY2spOworICAgIGFjdGl2ZVRocmVhZHMobG9ja2VyKS5yZW1vdmUodGhyZWFkKTsK
K30KIAotc3RhdGljIHZvaWQganNjU2lnbmFsSGFuZGxlcihpbnQgc2lnLCBzaWdpbmZvX3QqIGlu
Zm8sIHZvaWQqIG1jb250ZXh0KQorI2Vsc2UKK3N0YXRpYyBjb25zdGV4cHIgYm9vbCB1c2VNYWNo
ID0gZmFsc2U7CisjZW5kaWYgLy8gSEFWRShNQUNIX0VYQ0VQVElPTlMpCisKK3N0YXRpYyB2b2lk
IGpzY1NpZ25hbEhhbmRsZXIoaW50LCBzaWdpbmZvX3QqLCB2b2lkKik7CisKK3ZvaWQgaW5zdGFs
bFNpZ25hbEhhbmRsZXIoU2lnbmFsIHNpZ25hbCwgU2lnbmFsSGFuZGxlciYmIGhhbmRsZXIpCit7
CisgICAgQVNTRVJUKHNpZ25hbCA8IFNpZ25hbDo6VW5rbm93bik7CisjaWYgSEFWRShNQUNIX0VY
Q0VQVElPTlMpCisgICAgaWYgKHNpZ25hbCA9PSBTaWduYWw6OkJ1cyAmJiAhdXNlTWFjaCkKKyAg
ICAgICAgcmV0dXJuOworICAgIEFTU0VSVCghdXNlTWFjaCB8fCBzaWduYWwgIT0gU2lnbmFsOjpV
c3IpOworCisgICAgaWYgKHVzZU1hY2gpCisgICAgICAgIHN0YXJ0TWFjaEV4Y2VwdGlvbkhhbmRs
ZXJUaHJlYWQoKTsKKyNlbmRpZgorCisgICAgc3RkOjpjYWxsX29uY2UoaW5pdGlhbGl6ZU9uY2VG
bGFnc1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNpZ25hbCldLCBbJl0geworICAgICAgICBoYW5kbGVy
c1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNpZ25hbCldLmNvbnN0cnVjdCgpOworCisgICAgICAgIGlm
ICghdXNlTWFjaCkgeworICAgICAgICAgICAgc3RydWN0IHNpZ2FjdGlvbiBhY3Rpb247CisgICAg
ICAgICAgICBhY3Rpb24uc2Ffc2lnYWN0aW9uID0ganNjU2lnbmFsSGFuZGxlcjsKKyAgICAgICAg
ICAgIGF1dG8gcmVzdWx0ID0gc2lnZmlsbHNldCgmYWN0aW9uLnNhX21hc2spOworICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoIXJlc3VsdCk7CisgICAgICAgICAgICBhY3Rpb24uc2FfZmxhZ3Mg
PSBTQV9TSUdJTkZPOworICAgICAgICAgICAgcmVzdWx0ID0gc2lnYWN0aW9uKHRvU3lzdGVtU2ln
bmFsKHNpZ25hbCksICZhY3Rpb24sICZvbGRBY3Rpb25zW3N0YXRpY19jYXN0PHNpemVfdD4oc2ln
bmFsKV0pOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXJlc3VsdCk7CisgICAgICAgIH0K
KworICAgIH0pOworCisgICAgaGFuZGxlcnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzaWduYWwpXS0+
YWRkKFdURk1vdmUoaGFuZGxlcikpOworCisjaWYgSEFWRShNQUNIX0VYQ0VQVElPTlMpCisgICAg
YXV0byBsb2NrZXIgPSBob2xkTG9jayh0aHJlYWRMb2NrKTsKKyAgICBpZiAodXNlTWFjaCkgewor
ICAgICAgICBhY3RpdmVFeGNlcHRpb25zIHw9IHRvTWFjaE1hc2soc2lnbmFsKTsKKworICAgICAg
ICBmb3IgKFRocmVhZCogdGhyZWFkIDogYWN0aXZlVGhyZWFkcyhsb2NrZXIpKQorICAgICAgICAg
ICAgc2V0RXhjZXB0aW9uUG9ydHMobG9ja2VyLCB0aHJlYWQpOworICAgIH0KKyNlbmRpZgorfQor
Cit2b2lkIGpzY1NpZ25hbEhhbmRsZXIoaW50IHNpZywgc2lnaW5mb190KiBpbmZvLCB2b2lkKiB1
Y29udGV4dCkKIHsKICAgICBTaWduYWwgc2lnbmFsID0gZnJvbVN5c3RlbVNpZ25hbChzaWcpOwog
CkBAIC02MiwxMCArMzA1LDE2IEBAIHN0YXRpYyB2b2lkIGpzY1NpZ25hbEhhbmRsZXIoaW50IHNp
Zywgc2lnaW5mb190KiBpbmZvLCB2b2lkKiBtY29udGV4dCkKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAorICAgIFNpZ0luZm8gc2lnSW5mbzsKKyAgICBpZiAoc2lnbmFsID09IFNpZ25hbDo6U2Vn
ViB8fCBzaWduYWwgPT0gU2lnbmFsOjpCdXMpCisgICAgICAgIHNpZ0luZm8uZmF1bHRpbmdBZGRy
ZXNzID0gaW5mby0+c2lfYWRkcjsKKworICAgIFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMg
PSByZWdpc3RlcnNGcm9tVUNvbnRleHQocmVpbnRlcnByZXRfY2FzdDx1Y29udGV4dF90Kj4odWNv
bnRleHQpKTsKKwogICAgIGJvb2wgZGlkSGFuZGxlID0gZmFsc2U7CiAgICAgYm9vbCByZXN0b3Jl
RGVmYXVsdEhhbmRsZXIgPSBmYWxzZTsKICAgICBoYW5kbGVyc1tzdGF0aWNfY2FzdDxzaXplX3Q+
KHNpZ25hbCldLT5pdGVyYXRlKFsmXSAoY29uc3QgU2lnbmFsSGFuZGxlciYgaGFuZGxlcikgewot
ICAgICAgICBzd2l0Y2ggKGhhbmRsZXIoc2lnLCBpbmZvLCBtY29udGV4dCkpIHsKKyAgICAgICAg
c3dpdGNoIChoYW5kbGVyKHNpZ25hbCwgc2lnSW5mbywgcmVnaXN0ZXJzKSkgewogICAgICAgICBj
YXNlIFNpZ25hbEFjdGlvbjo6SGFuZGxlZDoKICAgICAgICAgICAgIGRpZEhhbmRsZSA9IHRydWU7
CiAgICAgICAgICAgICBicmVhazsKQEAgLTg1LDEzICszMzQsMTMgQEAgc3RhdGljIHZvaWQganNj
U2lnbmFsSGFuZGxlcihpbnQgc2lnLCBzaWdpbmZvX3QqIGluZm8sIHZvaWQqIG1jb250ZXh0KQog
ICAgIHN0cnVjdCBzaWdhY3Rpb24mIG9sZEFjdGlvbiA9IG9sZEFjdGlvbnNbc3RhdGljX2Nhc3Q8
c2l6ZV90PihzaWduYWwpXTsKICAgICBpZiAoc2lnbmFsID09IFNpZ25hbDo6VXNyKSB7CiAgICAg
ICAgIGlmIChvbGRBY3Rpb24uc2Ffc2lnYWN0aW9uKQotICAgICAgICAgICAgb2xkQWN0aW9uLnNh
X3NpZ2FjdGlvbihzaWcsIGluZm8sIG1jb250ZXh0KTsKKyAgICAgICAgICAgIG9sZEFjdGlvbi5z
YV9zaWdhY3Rpb24oc2lnLCBpbmZvLCB1Y29udGV4dCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICBpZiAoIWRpZEhhbmRsZSkgewogICAgICAgICBpZiAob2xkQWN0aW9uLnNhX3NpZ2Fj
dGlvbikgewotICAgICAgICAgICAgb2xkQWN0aW9uLnNhX3NpZ2FjdGlvbihzaWcsIGluZm8sIG1j
b250ZXh0KTsKKyAgICAgICAgICAgIG9sZEFjdGlvbi5zYV9zaWdhY3Rpb24oc2lnLCBpbmZvLCB1
Y29udGV4dCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMTAwLDI0ICsz
NDksNiBAQCBzdGF0aWMgdm9pZCBqc2NTaWduYWxIYW5kbGVyKGludCBzaWcsIHNpZ2luZm9fdCog
aW5mbywgdm9pZCogbWNvbnRleHQpCiAgICAgfQogfQogCi12b2lkIGluc3RhbGxTaWduYWxIYW5k
bGVyKFNpZ25hbCBzaWduYWwsIFNpZ25hbEhhbmRsZXImJiBoYW5kbGVyKQotewotICAgIEFTU0VS
VChzaWduYWwgPCBTaWduYWw6OlVua25vd24pOwotICAgIHN0ZDo6Y2FsbF9vbmNlKGluaXRpYWxp
emVPbmNlRmxhZ3Nbc3RhdGljX2Nhc3Q8c2l6ZV90PihzaWduYWwpXSwgWyZdIHsKLSAgICAgICAg
aGFuZGxlcnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzaWduYWwpXS5jb25zdHJ1Y3QoKTsKLQotICAg
ICAgICBzdHJ1Y3Qgc2lnYWN0aW9uIGFjdGlvbjsKLSAgICAgICAgYWN0aW9uLnNhX3NpZ2FjdGlv
biA9IGpzY1NpZ25hbEhhbmRsZXI7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gc2lnZmlsbHNldCgm
YWN0aW9uLnNhX21hc2spOwotICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmVzdWx0KTsKLSAgICAg
ICAgYWN0aW9uLnNhX2ZsYWdzID0gU0FfU0lHSU5GTzsKLSAgICAgICAgcmVzdWx0ID0gc2lnYWN0
aW9uKHRvU3lzdGVtU2lnbmFsKHNpZ25hbCksICZhY3Rpb24sICZvbGRBY3Rpb25zW3N0YXRpY19j
YXN0PHNpemVfdD4oc2lnbmFsKV0pOwotICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmVzdWx0KTsK
LSAgICB9KTsKLQotICAgIGhhbmRsZXJzW3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0tPmFk
ZChXVEZNb3ZlKGhhbmRsZXIpKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV1RGCiAKICNlbmRpZiAv
LyBVU0UoUFRIUkVBRFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90aHJlYWRzL1NpZ25h
bHMuaCBiL1NvdXJjZS9XVEYvd3RmL3RocmVhZHMvU2lnbmFscy5oCmluZGV4IDFlNGViNDZlYWE3
NzRhMWVlODlmNmZiMmRhZWYzMzI2OGNlNTY3NzkuLmFjYTZiMzRmODE2ZjAxNzY5MzAwMzZjMThi
ODIxYzI3YWJiMGU2MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RocmVhZHMvU2lnbmFs
cy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RocmVhZHMvU2lnbmFscy5oCkBAIC0yOSw2ICsyOSw3
IEBACiAKICNpbmNsdWRlIDxzaWduYWwuaD4KICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KKyNp
bmNsdWRlIDx3dGYvUGxhdGZvcm1SZWdpc3RlcnMuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKQEAg
LTc5LDcgKzgwLDExIEBAIGVudW0gY2xhc3MgU2lnbmFsQWN0aW9uIHsKICAgICBGb3JjZURlZmF1
bHQKIH07CiAKLXVzaW5nIFNpZ25hbEhhbmRsZXIgPSBGdW5jdGlvbjxTaWduYWxBY3Rpb24oaW50
LCBzaWdpbmZvX3QqLCB2b2lkKik+Oworc3RydWN0IFNpZ0luZm8geworICAgIHZvaWQqIGZhdWx0
aW5nQWRkcmVzcyB7IDAgfTsKK307CisKK3VzaW5nIFNpZ25hbEhhbmRsZXIgPSBGdW5jdGlvbjxT
aWduYWxBY3Rpb24oU2lnbmFsLCBTaWdJbmZvJiwgUGxhdGZvcm1SZWdpc3RlcnMmKT47CiAKIC8v
IENhbGwgdGhpcyBtZXRob2Qgd2hlbmV2ZXIgeW91IHdhbnQgdG8gaW5zdGFsbCBhIHNpZ25hbCBo
YW5kbGVyLiBJdCdzIG9rIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBsYXppbHkuCiAvLyBOb3RlOiBZ
b3VyIHNpZ25hbCBoYW5kbGVyIHdpbGwgYmUgY2FsbGVkIGV2ZXJ5IHRpbWUgdGhlIGhhbmRsZXIg
Zm9yIHRoZSBkZXNpcmVkIHNpZ25hbCBpcyBjYWxsZWQuCkBAIC04Nyw5ICs5MiwxOSBAQCB1c2lu
ZyBTaWduYWxIYW5kbGVyID0gRnVuY3Rpb248U2lnbmFsQWN0aW9uKGludCwgc2lnaW5mb190Kiwg
dm9pZCopPjsKIC8vIFRoaXMgZnVuY3Rpb24gaXMgY3VycmVudGx5IGEgb25lIHdheSBzdHJlZXQg
aS5lLiBvbmNlIGluc3RhbGxlZCwgYSBzaWduYWwgaGFuZGxlciBjYW5ub3QgYmUgdW5pbnN0YWxs
ZWQuCiB2b2lkIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbCwgU2lnbmFsSGFuZGxlciYmKTsK
IAorCisjaWYgSEFWRShNQUNIX0VYQ0VQVElPTlMpCitjbGFzcyBUaHJlYWQ7Cit2b2lkIHJlZ2lz
dGVyVGhyZWFkKFRocmVhZCopOwordm9pZCByZW1vdmVUaHJlYWQoVGhyZWFkKik7CisKK3ZvaWQg
aGFuZGxlU2lnbmFsc1dpdGhNYWNoKCk7CisjZW5kaWYgLy8gSEFWRShNQUNIX0VYQ0VQVElPTlMp
CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6OlNpZ25hbDsKK3VzaW5nIFdURjo6
U2lnSW5mbzsKIHVzaW5nIFdURjo6dG9TeXN0ZW1TaWduYWw7CiB1c2luZyBXVEY6OmZyb21TeXN0
ZW1TaWduYWw7CiB1c2luZyBXVEY6OlNpZ25hbEFjdGlvbjsKZGlmZiAtLWdpdCBhL1Rvb2xzL0No
YW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAxN2Y5ZjAxMTEzMTAyYThhNGIxN2ZjZTRh
ZjFkOTVlYjg2MDA2OWRiLi42Y2RhNDg0MTA2NWNlMDRhOTFiOGRiNWUyYjIwMjhjNDBlYzA1YTZm
IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTQgQEAKKzIwMTctMDUtMTEgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgVXNlIE1hY2ggZXhjZXB0aW9ucyBpbnN0ZWFkIG9mIHNpZ25hbHMg
d2hlcmUgcG9zc2libGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE3MTg2NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVGhyZWFkTWVzc2FnZXMuY3BwOgorICAg
ICAgICAocnVuVGhyZWFkTWVzc2FnZVRlc3QpOgorICAgICAgICAoVEVTVCk6CisKIDIwMTctMDUt
MDkgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZW1vdmUgc3VwcG9y
dCBmb3IgbGVnYWN5IE5vdGlmaWNhdGlvbnMKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV1RGL1RocmVhZE1lc3NhZ2VzLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV1RGL1RocmVhZE1lc3NhZ2VzLmNwcAppbmRleCBkNjNlOWJmMWU3NTA2OGI2YzFhN2U3ZTZl
OGI2N2M0ZWIwNTE1ODgyLi5lNmE1Nzg5NGJiNTE2ZmUxY2U3MTNkMDdiZjE4ZjA3MDZlZmE5Mzdj
IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9UaHJlYWRNZXNzYWdl
cy5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVGhyZWFkTWVzc2FnZXMu
Y3BwCkBAIC01MCw3ICs1MCw3IEBAIHN0YXRpYyB2b2lkIHJ1blRocmVhZE1lc3NhZ2VUZXN0KHVu
c2lnbmVkIG51bVNlbmRlcnMsIHVuc2lnbmVkIG51bU1lc3NhZ2VzKQogICAgIGZvciAodW5zaWdu
ZWQgc2VuZGVySUQgPSAwOyBzZW5kZXJJRCA8IG51bVNlbmRlcnM7ICsrc2VuZGVySUQpIHsKICAg
ICAgICAgc2VuZGVyVGhyZWFkc1tzZW5kZXJJRF0gPSBUaHJlYWQ6OmNyZWF0ZSgiVGhyZWFkTWVz
c2FnZSBzZW5kZXIiLCBbc2VuZGVySUQsIG51bU1lc3NhZ2VzLCByZWNlaXZlclRocmVhZCwgJm1l
c3NhZ2VzUnVuLCAmaGFuZGxlcnNSdW5dICgpIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBudW1NZXNzYWdlczsgKytpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byByZXN1
bHQgPSBzZW5kTWVzc2FnZSgqcmVjZWl2ZXJUaHJlYWQuZ2V0KCksIFtzZW5kZXJJRCwgJmhhbmRs
ZXJzUnVuXSAoc2lnaW5mb190KiwgdWNvbnRleHRfdCopIHsKKyAgICAgICAgICAgICAgICBhdXRv
IHJlc3VsdCA9IHNlbmRNZXNzYWdlKCpyZWNlaXZlclRocmVhZC5nZXQoKSwgW3NlbmRlcklELCAm
aGFuZGxlcnNSdW5dIChQbGF0Zm9ybVJlZ2lzdGVycyYpIHsKICAgICAgICAgICAgICAgICAgICAg
aGFuZGxlcnNSdW5bc2VuZGVySURdKys7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAg
ICAgICAgRVhQRUNUX1RSVUUocmVzdWx0ID09IFdURjo6TWVzc2FnZVN0YXR1czo6TWVzc2FnZVJh
bik7CkBAIC05NSw3ICs5NSw3IEBAIHB1YmxpYzoKIFRFU1QoVGhyZWFkTWVzc2FnZSwgU2lnbmFs
c1dvcmtPbkV4aXQpCiB7CiAgICAgc3RhdGljIGJvb2wgaGFuZGxlclJhbiA9IGZhbHNlOwotICAg
IGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbDo6VXNyLCBbXSAoaW50LCBzaWdpbmZvX3QqLCB2
b2lkKikgLT4gU2lnbmFsQWN0aW9uIHsKKyAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWw6
OlVzciwgW10gKFNpZ25hbCwgU2lnSW5mbyYsIFBsYXRmb3JtUmVnaXN0ZXJzJikgLT4gU2lnbmFs
QWN0aW9uIHsKICAgICAgICAgZGF0YUxvZ0xuKCJoZXJlIik7CiAgICAgICAgIGhhbmRsZXJSYW4g
PSB0cnVlOwogICAgICAgICByZXR1cm4gU2lnbmFsQWN0aW9uOjpIYW5kbGVkOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309790</attachid>
            <date>2017-05-11 14:52:07 -0700</date>
            <delta_ts>2017-05-11 15:49:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171865-20170511145206.patch</filename>
            <type>text/plain</type>
            <size>50377</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE2Njc3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
YzIyOWE0ZjkxMDMxZGZlOTU1YTQxMGIyMDI0Njc2ZTFmM2NkZWIxLi4yNWUzMDIyZWI5ZmY0ZDA1
M2E4ZWRiY2YxZTI2YmFkZTA1MTA4MWExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MCBAQAorMjAxNy0wNS0xMSAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBVc2UgTWFjaCBleGNlcHRpb25zIGluc3RlYWQgb2Ygc2lnbmFscyB3
aGVyZSBwb3NzaWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTcxODY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhpcyBwYXRjaCBhZGRzIHNvbWUgbmV3IEpTQyBvcHRpb25zLiBUaGUgZmlyc3QgaXMg
YW4gb3B0aW9uIHRoYXQKKyAgICAgICAgZW5hYmxlcyBvciBkaXNhYmxlcyB3ZWIgYXNzZW1ibHkg
dGllciB1cC4gVGhlIHNlY29uZCBjb250cm9scworICAgICAgICB3aGV0aGVyIG9yIG5vdCB3ZSB1
c2UgbWFjaCBleGNlcHRpb25zICh3aGVyZSBhdmFpbGFibGUpLgorCisgICAgICAgICogQVBJL3Rl
c3RzL0V4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwOgorICAgICAgICAoZGlzcGF0Y2hUZXJtaXRh
dGVDYWxsYmFjayk6CisgICAgICAgICh0ZXN0RXhlY3V0aW9uVGltZUxpbWl0KToKKyAgICAgICAg
KiBydW50aW1lL0pTTG9jay5jcHA6CisgICAgICAgIChKU0M6OkpTTG9jazo6ZGlkQWNxdWlyZUxv
Y2spOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5jcHA6CisgICAgICAgIChKU0M6Om92ZXJy
aWRlRGVmYXVsdHMpOgorICAgICAgICAoSlNDOjpPcHRpb25zOjppbml0aWFsaXplKToKKyAgICAg
ICAgKiBydW50aW1lL09wdGlvbnMuaDoKKyAgICAgICAgKiBydW50aW1lL1ZNVHJhcHMuY3BwOgor
ICAgICAgICAoSlNDOjpTaWduYWxDb250ZXh0OjpTaWduYWxDb250ZXh0KToKKyAgICAgICAgKEpT
Qzo6U2lnbmFsQ29udGV4dDo6YWRqdXN0UENUb1BvaW50VG9UcmFwcGluZ0luc3RydWN0aW9uKToK
KyAgICAgICAgKEpTQzo6aW5zdGFsbFNpZ25hbEhhbmRsZXIpOgorICAgICAgICAoSlNDOjpWTVRy
YXBzOjpTaWduYWxTZW5kZXI6OnNlbmQpOgorICAgICAgICAqIHRvb2xzL1NpZ2lsbENyYXNoQW5h
bHl6ZXIuY3BwOgorICAgICAgICAoSlNDOjpTaWduYWxDb250ZXh0OjpTaWduYWxDb250ZXh0KToK
KyAgICAgICAgKEpTQzo6U2lnbmFsQ29udGV4dDo6ZHVtcCk6CisgICAgICAgIChKU0M6Omluc3Rh
bGxDcmFzaEhhbmRsZXIpOgorICAgICAgICAqIHdhc20vV2FzbUJCUVBsYW4uY3BwOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKToKKyAgICAgICAgKiB3YXNt
L1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp0cmFwSGFu
ZGxlcik6CisgICAgICAgIChKU0M6Oldhc206OmVuYWJsZUZhc3RNZW1vcnkpOgorICAgICAgICAq
IHdhc20vV2FzbU1hY2hpbmVUaHJlYWRzLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6cmVzZXRJ
bnN0cnVjdGlvbkNhY2hlT25BbGxUaHJlYWRzKToKKwogMjAxNy0wNS0xMSAgTWFyayBMYW0gIDxt
YXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgV29ya2VyVGhyZWFkOjpzdG9wKCkgc2hvdWxk
IGNhbGwgc2NoZWR1bGVFeGVjdXRpb25UZXJtaW5hdGlvbigpIGxhc3QuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGVjZGRiMzNm
YmVkNTIxMTFiYzA3MTk1ZDZjMDhmZTQwNmIyYzFhMzUuLmE3MjBkMTAxZTIyMDVjZGYwZmEwNmRm
YzNjYTczNmY5YmE1ZmM2NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTcgQEAKKzIwMTctMDUtMTEgIEtlaXRo
IE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIE1hY2ggZXhj
ZXB0aW9ucyBpbnN0ZWFkIG9mIHNpZ25hbHMgd2hlcmUgcG9zc2libGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MTg2NQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZW5hYmxlcyB1c2lu
ZyBtYWNoIGV4Y2VwdGlvbnMgb24gZGFyd2luLiBUaGUgd2F5IHRoZQorICAgICAgICBtYWNoIGV4
Y2VwdGlvbiBhcGkgd29ya3MgaXMgdGhhdCB3ZSBjcmVhdGUgYSBtYWNoIHBvcnQsIHdoaWNoIGlz
CisgICAgICAgIGxpa2UgYSBmaWxlIGRlc2NyaXB0b3IuICBXZSB0aGVuIHdhaXQgZm9yIGEgbWVz
c2FnZSB0byBhcnJpdmUgb24KKyAgICAgICAgdGhhdCBwb3J0IGluIGEgdGhyZWFkLiBXaGVuIGFu
b3RoZXIgdGhyZWFkIHJhaXNlcyBhIGV4Y2VwdGlvbiAoc2F5CisgICAgICAgIGR1ZSB0byBhIGJh
ZCBtZW1vcnkgYWNjZXNzKSB0aGUgT1Mgc2VuZHMgb3VyIHRocmVhZCBhIG1lc3NhZ2UuIFRoZQor
ICAgICAgICBwYXlsb2FkIG9mIHRoYXQgbWVzc2FnZSBpcyB0aGUgcmVnaXN0ZXIgZmlsZSBvZiB0
aGUgY3Jhc2hpbmcKKyAgICAgICAgdGhyZWFkLiBXZSB0aGVuIGNhbGwgb3VyIGN1c3RvbSBoYW5k
bGVycyB0aGF0IGNoYW5nZSB0aGUgc3RhdGUgYXMKKyAgICAgICAgbmVlZGVkLiBJbiBvcmRlciB0
byByZXN0YXJ0IHRoZSB0aHJlYWQgd2Ugc2VuZCBhIHBheWxvYWQgYmFjayB0bworICAgICAgICB0
aGUgT1Mgd2l0aCBhbiB1cGRhdGVkIHJlZ2lzdGVyIGZpbGUgYWxvbmcgd2l0aCBhIHN1Y2Nlc3Mg
bWVzc2FnZQorICAgICAgICBoZWFkZXIuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIG1ha2Vz
IHRocmVhZCBtZXNzYWdlcyB3b3JrIHdpdGhvdXQgc2lnbmFscyBieQorICAgICAgICBzaW1wbHkg
c3VzcGVuZGluZyB0aGUgdGhyZWFkIHRoZW4gcnVubmluZyB0aGUgbWVzc2FnZSBhdCB0aGF0Cisg
ICAgICAgIHRpbWUuCisKKyAgICAgICAgKiBDb25maWd1cmF0aW9ucy9XVEYueGNjb25maWc6Cisg
ICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL1Bs
YXRmb3JtLmg6CisgICAgICAgICogd3RmL1BsYXRmb3JtUmVnaXN0ZXJzLmg6CisgICAgICAgIChX
VEY6OnJlZ2lzdGVyc0Zyb21VQ29udGV4dCk6CisgICAgICAgICogd3RmL1N0YWNrQm91bmRzLmg6
CisgICAgICAgIChXVEY6OlN0YWNrQm91bmRzOjpTdGFja0JvdW5kcyk6CisgICAgICAgICogd3Rm
L1RocmVhZEhvbGRlci5jcHA6CisgICAgICAgIChXVEY6OlRocmVhZEhvbGRlcjo6flRocmVhZEhv
bGRlcik6CisgICAgICAgICogd3RmL1RocmVhZE1lc3NhZ2UuY3BwOgorICAgICAgICAoV1RGOjpz
ZW5kTWVzc2FnZVNpZ25hbCk6CisgICAgICAgIChXVEY6OnNlbmRNZXNzYWdlTWFjaCk6CisgICAg
ICAgIChXVEY6OmRlbGl2ZXJNZXNzYWdlc1VzaW5nTWFjaCk6CisgICAgICAgIChXVEY6OnNlbmRN
ZXNzYWdlU2NvcGVkKToKKyAgICAgICAgKiB3dGYvVGhyZWFkTWVzc2FnZS5oOgorICAgICAgICAo
V1RGOjpzZW5kTWVzc2FnZSk6CisgICAgICAgICogd3RmL1RocmVhZGluZy5oOgorICAgICAgICAo
V1RGOjpUaHJlYWQ6Om1hY2hUaHJlYWQpOgorICAgICAgICAqIHd0Zi9tYWMvTWFjaEV4Y2VwdGlv
bnMuZGVmczogQ29waWVkIGZyb20gU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5oLgorICAg
ICAgICAqIHd0Zi90aHJlYWRzL1NpZ25hbHMuY3BwOgorICAgICAgICAoV1RGOjpzdGFydE1hY2hF
eGNlcHRpb25IYW5kbGVyVGhyZWFkKToKKyAgICAgICAgKFdURjo6ZnJvbU1hY2hFeGNlcHRpb24p
OgorICAgICAgICAoV1RGOjp0b01hY2hNYXNrKToKKyAgICAgICAgKFdURjo6aGFuZGxlU2lnbmFs
c1dpdGhNYWNoKToKKyAgICAgICAgKFdURjo6c2V0RXhjZXB0aW9uUG9ydHMpOgorICAgICAgICAo
V1RGOjphY3RpdmVUaHJlYWRzKToKKyAgICAgICAgKFdURjo6cmVnaXN0ZXJUaHJlYWQpOgorICAg
ICAgICAoV1RGOjpyZW1vdmVUaHJlYWQpOgorICAgICAgICAoV1RGOjppbnN0YWxsU2lnbmFsSGFu
ZGxlcik6CisgICAgICAgIChXVEY6OmpzY1NpZ25hbEhhbmRsZXIpOgorICAgICAgICAqIHd0Zi90
aHJlYWRzL1NpZ25hbHMuaDoKKwogMjAxNy0wNS0wOSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFJlbW92ZSBzdXBwb3J0IGZvciBsZWdhY3kgTm90aWZpY2F0aW9ucwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9FeGVjdXRpb25UaW1l
TGltaXRUZXN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvRXhlY3V0aW9u
VGltZUxpbWl0VGVzdC5jcHAKaW5kZXggZDVlNTMyNDNiNzhkZjc1MTM0MmFkOGQzOTBhNGIwNDEz
ZDllZWY5ZS4uN2VhYzA3MzA5ZGRjM2YxNjQ5NDUwYmQwMzc5ZDJjYTE4ZjAxNjlhYSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9FeGVjdXRpb25UaW1lTGltaXRU
ZXN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0V4ZWN1dGlvblRp
bWVMaW1pdFRlc3QuY3BwCkBAIC0zMCw4ICszMCwxMyBAQAogI2luY2x1ZGUgIkpTQ29udGV4dFJl
ZlByaXZhdGUuaCIKICNpbmNsdWRlICJKYXZhU2NyaXB0Q29yZS5oIgogI2luY2x1ZGUgIk9wdGlv
bnMuaCIKKwogI2luY2x1ZGUgPGNocm9ubz4KKyNpbmNsdWRlIDxkaXNwYXRjaC9kaXNwYXRjaC5o
PgorI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CisjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgog
I2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOjpj
aHJvbm87CkBAIC03Nyw2ICs4MiwxMyBAQCBzdGF0aWMgYm9vbCBleHRlbmRUZXJtaW5hdGVDYWxs
YmFjayhKU0NvbnRleHRSZWYgY3R4LCB2b2lkKikKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9v
bCBkaXNwYXRjaFRlcm1pbmF0ZUNhbGxiYWNrQ2FsbGVkID0gZmFsc2U7CitzdGF0aWMgYm9vbCBk
aXNwYXRjaFRlcm1pdGF0ZUNhbGxiYWNrKEpTQ29udGV4dFJlZiwgdm9pZCopCit7CisgICAgZGlz
cGF0Y2hUZXJtaW5hdGVDYWxsYmFja0NhbGxlZCA9IHRydWU7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKIHN0cnVjdCBUaWVyT3B0aW9ucyB7CiAgICAgY29uc3QgY2hhciogdGllcjsKICAgICB1bnNp
Z25lZCB0aW1lTGltaXRBZGp1c3RtZW50TWlsbGlzOwpAQCAtMzY1LDYgKzM3Nyw2MyBAQCBpbnQg
dGVzdEV4ZWN1dGlvblRpbWVMaW1pdCgpCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAorICAg
ICAgICAvKiBUZXN0IHNjcmlwdCB0aW1lb3V0IGZyb20gZGlzcGF0Y2ggcXVldWU6ICovCisgICAg
ICAgIHRpbWVMaW1pdCA9ICgxMDAgKyB0aWVyQWRqdXN0bWVudE1pbGxpcykgLyAxMDAwLjA7Cisg
ICAgICAgIEpTQ29udGV4dEdyb3VwU2V0RXhlY3V0aW9uVGltZUxpbWl0KGNvbnRleHRHcm91cCwg
dGltZUxpbWl0LCBkaXNwYXRjaFRlcm1pdGF0ZUNhbGxiYWNrLCAwKTsKKyAgICAgICAgeworICAg
ICAgICAgICAgdW5zaWduZWQgdGltZUFmdGVyV2F0Y2hkb2dTaG91bGRIYXZlRmlyZWQgPSAzMDAg
KyB0aWVyQWRqdXN0bWVudE1pbGxpczsKKworICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBzY3Jp
cHRCdWlsZGVyOworICAgICAgICAgICAgc2NyaXB0QnVpbGRlci5hcHBlbmRMaXRlcmFsKCJmdW5j
dGlvbiBmb28oKSB7IHZhciBzdGFydFRpbWUgPSBjdXJyZW50Q1BVVGltZSgpOyB3aGlsZSAodHJ1
ZSkgeyBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDA7IGkrKyk7IGlmIChjdXJyZW50Q1BVVGltZSgp
IC0gc3RhcnRUaW1lID4gIik7CisgICAgICAgICAgICBzY3JpcHRCdWlsZGVyLmFwcGVuZE51bWJl
cih0aW1lQWZ0ZXJXYXRjaGRvZ1Nob3VsZEhhdmVGaXJlZCAvIDEwMDAuMCk7CisgICAgICAgICAg
ICBzY3JpcHRCdWlsZGVyLmFwcGVuZExpdGVyYWwoIikgYnJlYWs7IH0gfSBmb28oKTsiKTsKKwor
ICAgICAgICAgICAgSlNTdHJpbmdSZWYgc2NyaXB0ID0gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoc2NyaXB0QnVpbGRlci50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAg
ICAgZXhjZXB0aW9uID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGRpc3BhdGNoVGVybWluYXRlQ2Fs
bGJhY2tDYWxsZWQgPSBmYWxzZTsKKworICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBkbyB0aGlz
IHNpbmNlIGJsb2NrcyBjYW4gb25seSBjYXB0dXJlIHRoaW5ncyBhcyBjb25zdC4KKyAgICAgICAg
ICAgIEpTR2xvYmFsQ29udGV4dFJlZiYgY29udGV4dFJlZiA9IGNvbnRleHQ7CisgICAgICAgICAg
ICBKU1N0cmluZ1JlZiYgc2NyaXB0UmVmID0gc2NyaXB0OworICAgICAgICAgICAgSlNWYWx1ZVJl
ZiYgZXhjZXB0aW9uUmVmID0gZXhjZXB0aW9uOworCisgICAgICAgICAgICBMb2NrIHN5bmNMb2Nr
OworICAgICAgICAgICAgTG9jayYgc3luY0xvY2tSZWYgPSBzeW5jTG9jazsKKyAgICAgICAgICAg
IENvbmRpdGlvbiBzeW5jaHJvbml6ZTsKKyAgICAgICAgICAgIENvbmRpdGlvbiYgc3luY2hyb25p
emVSZWYgPSBzeW5jaHJvbml6ZTsKKyAgICAgICAgICAgIGJvb2wgZGlkU3luY2hyb25pemUgPSBm
YWxzZTsKKyAgICAgICAgICAgIGJvb2wmIGRpZFN5bmNocm9uaXplUmVmID0gZGlkU3luY2hyb25p
emU7CisKKyAgICAgICAgICAgIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMgc3RhcnRUaW1lOwor
ICAgICAgICAgICAgc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcyBlbmRUaW1lOworCisgICAgICAg
ICAgICBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzJiBzdGFydFRpbWVSZWYgPSBzdGFydFRpbWU7
CisgICAgICAgICAgICBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzJiBlbmRUaW1lUmVmID0gZW5k
VGltZTsKKworICAgICAgICAgICAgZGlzcGF0Y2hfZ3JvdXBfdCBncm91cCA9IGRpc3BhdGNoX2dy
b3VwX2NyZWF0ZSgpOworICAgICAgICAgICAgZGlzcGF0Y2hfZ3JvdXBfYXN5bmMoZ3JvdXAsIGRp
c3BhdGNoX2dldF9nbG9iYWxfcXVldWUoMCwgMCksIF57CisgICAgICAgICAgICAgICAgc3RhcnRU
aW1lUmVmID0gY3VycmVudENQVVRpbWUoKTsKKyAgICAgICAgICAgICAgICBKU0V2YWx1YXRlU2Ny
aXB0KGNvbnRleHRSZWYsIHNjcmlwdFJlZiwgbnVsbHB0ciwgbnVsbHB0ciwgMSwgJmV4Y2VwdGlv
blJlZik7CisgICAgICAgICAgICAgICAgZW5kVGltZVJlZiA9IGN1cnJlbnRDUFVUaW1lKCk7Cisg
ICAgICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBXVEY6OmhvbGRMb2NrKHN5bmNMb2NrUmVmKTsK
KyAgICAgICAgICAgICAgICBkaWRTeW5jaHJvbml6ZVJlZiA9IHRydWU7CisgICAgICAgICAgICAg
ICAgc3luY2hyb25pemVSZWYubm90aWZ5QWxsKCk7CisgICAgICAgICAgICB9KTsKKworICAgICAg
ICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhzeW5jTG9jayk7CisgICAgICAgICAgICBzeW5j
aHJvbml6ZS53YWl0KHN5bmNMb2NrLCBbJl0geyByZXR1cm4gZGlkU3luY2hyb25pemU7IH0pOwor
CisgICAgICAgICAgICBpZiAoKChlbmRUaW1lIC0gc3RhcnRUaW1lKSA8IG1pbGxpc2Vjb25kcyh0
aW1lQWZ0ZXJXYXRjaGRvZ1Nob3VsZEhhdmVGaXJlZCkpICYmIGRpc3BhdGNoVGVybWluYXRlQ2Fs
bGJhY2tDYWxsZWQpCisgICAgICAgICAgICAgICAgcHJpbnRmKCJQQVNTOiAlcyBzY3JpcHQgb24g
ZGlzcGF0Y2ggcXVldWUgdGltZWQgb3V0IGFzIGV4cGVjdGVkLlxuIiwgdGllck9wdGlvbnMudGll
cik7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoKGVuZFRpbWUgLSBz
dGFydFRpbWUpID49IG1pbGxpc2Vjb25kcyh0aW1lQWZ0ZXJXYXRjaGRvZ1Nob3VsZEhhdmVGaXJl
ZCkpCisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiRkFJTDogJXMgc2NyaXB0IG9uIGRpc3Bh
dGNoIHF1ZXVlIGRpZCBub3QgdGltZSBvdXQgYXMgZXhwZWN0ZWQuXG4iLCB0aWVyT3B0aW9ucy50
aWVyKTsKKyAgICAgICAgICAgICAgICBpZiAoIXNob3VsZFRlcm1pbmF0ZUNhbGxiYWNrV2FzQ2Fs
bGVkKQorICAgICAgICAgICAgICAgICAgICBwcmludGYoIkZBSUw6ICVzIHNjcmlwdCBvbiBkaXNw
YXRjaCBxdWV1ZSB0aW1lb3V0IGNhbGxiYWNrIHdhcyBub3QgY2FsbGVkLlxuIiwgdGllck9wdGlv
bnMudGllcik7CisgICAgICAgICAgICAgICAgZmFpbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCiAgICAgICAgIEpTR2xvYmFsQ29udGV4dFJlbGVhc2UoY29udGV4dCk7CiAK
ICAgICAgICAgT3B0aW9uczo6c2V0T3B0aW9ucyhzYXZlZE9wdGlvbnNCdWlsZGVyLnRvU3RyaW5n
KCkuYXNjaWkoKS5kYXRhKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNMb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5j
cHAKaW5kZXggYzE3NWFlMGM0ODJlZDI3YmQ1ZjZiZGM4Nzk2OGU3NWQ0NWFmNTBlZi4uYmI3MGFh
YWVhMTVmZWQ1NDc3YjYxOTlmYTZkNGRjN2VhOTcxMDJjMiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0xvY2suY3BwCkBAIC0zMCw2ICszMCw4IEBACiAjaW5jbHVkZSAiU2FtcGxp
bmdQcm9maWxlci5oIgogI2luY2x1ZGUgIldhc21NYWNoaW5lVGhyZWFkcy5oIgogI2luY2x1ZGUg
PHRocmVhZD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RocmVh
ZHMvU2lnbmFscy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMTQ4LDYgKzE1MCwxMCBAQCB2
b2lkIEpTTG9jazo6ZGlkQWNxdWlyZUxvY2soKQogICAgIFdhc206OnN0YXJ0VHJhY2tpbmdDdXJy
ZW50VGhyZWFkKCk7CiAjZW5kaWYKIAorI2lmIEhBVkUoTUFDSF9FWENFUFRJT05TKQorICAgIFdU
Rjo6cmVnaXN0ZXJUaHJlYWQoJlRocmVhZDo6Y3VycmVudCgpKTsKKyNlbmRpZgorCiAgICAgbV92
bS0+dHJhcHMoKS5ub3RpZnlHcmFiQWxsTG9ja3MoKTsKIAogI2lmIEVOQUJMRShTQU1QTElOR19Q
Uk9GSUxFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKaW5kZXgg
YjA0ZGUzNWE1MzYxNTA4NDM4NTc1YzIyN2E1MDE0ZGQwYzUxYmFhMi4uODZlYTFiNjk1NjM0YTU0
ZjBlM2QyMGZhMjYzNzczOWVjOGI2MDRkZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5jcHAKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0
cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGhyZWFkcy9TaWduYWxzLmg+CiAKICNp
ZiBQTEFURk9STShDT0NPQSkKICNpbmNsdWRlIDxjcnRfZXh0ZXJucy5oPgpAQCAtMzU0LDYgKzM1
NSwxMCBAQCBzdGF0aWMgdm9pZCBvdmVycmlkZURlZmF1bHRzKCkKICNpZiAhRU5BQkxFKFdFQkFT
U0VNQkxZX0ZBU1RfTUVNT1JZKQogICAgIE9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5RmFzdE1lbW9y
eSgpID0gZmFsc2U7CiAjZW5kaWYKKworI2lmIEhBVkUoTUFDSF9FWENFUFRJT05TKQorICAgIE9w
dGlvbnM6OnVzZU1hY2hGb3JFeGNlcHRpb25zKCkgPSB0cnVlOworI2VuZGlmCiB9CiAKIHN0YXRp
YyB2b2lkIHJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMoKQpAQCAtNTQ1LDYgKzU1MCwxMSBAQCB2
b2lkIE9wdGlvbnM6OmluaXRpYWxpemUoKQogCiAgICAgICAgICAgICBkdW1wT3B0aW9uc0lmTmVl
ZGVkKCk7CiAgICAgICAgICAgICBlbnN1cmVPcHRpb25zQXJlQ29oZXJlbnQoKTsKKworI2lmIEhB
VkUoTUFDSF9FWENFUFRJT05TKQorICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZU1hY2hGb3JF
eGNlcHRpb25zKCkpCisgICAgICAgICAgICAgICAgV1RGOjpoYW5kbGVTaWduYWxzV2l0aE1hY2go
KTsKKyNlbmRpZgogICAgICAgICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9ucy5oCmluZGV4IGNmOWRjMmIyYTgyNTY4ZWUwN2RhMDg4OWUzOWI2YjJmOWRjZDc5NzUu
LjIyNzRkMWNkZWIzMzM2ZTM3YWI0NDczZWE0MTE2ZWEzMjI5ZTkzN2YgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKQEAgLTQyMCw2ICs0MjAsOCBAQCB0eXBlZGVmIGNv
bnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICB2KHVuc2lnbmVkLCB3YXRjaGRvZywgMCwgTm9y
bWFsLCAid2F0Y2hkb2cgdGltZW91dCAoMCA9IERpc2FibGVkLCBOID0gYSB0aW1lb3V0IHBlcmlv
ZCBvZiBOIG1pbGxpc2Vjb25kcykiKSBcCiAgICAgdihib29sLCB1c2VQb2xsaW5nVHJhcHMsIGZh
bHNlLCBOb3JtYWwsICJ1c2UgcG9sbGluZyAoaW5zdGVhZCBvZiBzaWduYWxsaW5nKSBWTSB0cmFw
cyIpIFwKICAgICBcCisgICAgdihib29sLCB1c2VNYWNoRm9yRXhjZXB0aW9ucywgdHJ1ZSwgTm9y
bWFsLCAiVXNlIG1hY2ggZXhjZXB0aW9ucyByYXRoZXIgdGhhbiBzaWduYWxzIHRvIGhhbmRsZSBm
YXVsdHMgYW5kIHBhc3MgdGhyZWFkIG1lc3NhZ2VzLiAoVGhpcyBkb2VzIG5vdGhpbmcgb24gcGxh
dGZvcm1zIHdpdGhvdXQgbWFjaCkiKSBcCisgICAgXAogICAgIHYoYm9vbCwgdXNlSUNTdGF0cywg
ZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIFwKICAgICB2KHVuc2lnbmVkLCBwcm90b3R5
cGVIaXRDb3VudEZvckxMSW50Q2FjaGluZywgMiwgTm9ybWFsLCAiTnVtYmVyIG9mIHByb3RvdHlw
ZSBwcm9wZXJ0eSBoaXRzIGJlZm9yZSBjYWNoaW5nIGEgcHJvdG90eXBlIGluIHRoZSBMTEludC4g
QSBjb3VudCBvZiAwIG1lYW5zIG5ldmVyIGNhY2hlLiIpIFwKQEAgLTQ0Myw2ICs0NDUsNyBAQCB0
eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICB2KHVuc2lnbmVkLCB3ZWJBc3Nl
bWJseUJCUU9wdGltaXphdGlvbkxldmVsLCAxLCBOb3JtYWwsICJCMyBPcHRpbWl6YXRpb24gbGV2
ZWwgZm9yIEJCUSBXZWIgQXNzZW1ibHkgbW9kdWxlIGNvbXBpbGF0aW9ucy4iKSBcCiAgICAgdih1
bnNpZ25lZCwgd2ViQXNzZW1ibHlPTUdPcHRpbWl6YXRpb25MZXZlbCwgT3B0aW9uczo6ZGVmYXVs
dEIzT3B0TGV2ZWwoKSwgTm9ybWFsLCAiQjMgT3B0aW1pemF0aW9uIGxldmVsIGZvciBPTUcgV2Vi
IEFzc2VtYmx5IG1vZHVsZSBjb21waWxhdGlvbnMuIikgXAogICAgIFwKKyAgICB2KGJvb2wsIHVz
ZUJCUVRpZXJVcENoZWNrcywgdHJ1ZSwgTm9ybWFsLCAiRW5hYmxlcyB0aWVyIHVwIGNoZWNrcyBm
b3Igb3VyIEJCUSBjb2RlLiIpIFwKICAgICB2KHVuc2lnbmVkLCB3ZWJBc3NlbWJseU9NR1RpZXJV
cENvdW50LCA1MDAwLCBOb3JtYWwsICJUaGUgY291bnRkb3duIGJlZm9yZSB3ZSB0aWVyIHVwIGEg
ZnVuY3Rpb24gdG8gT01HLiIpIFwKICAgICB2KHVuc2lnbmVkLCB3ZWJBc3NlbWJseUxvb3BEZWNy
ZW1lbnQsIDE1LCBOb3JtYWwsICJUaGUgYW1vdW50IHRoZSB0aWVyIHVwIGNvdW50ZG93biBpcyBk
ZWNyZW1lbnRlZCBvbiBlYWNoIGxvb3AgYmFja2VkZ2UuIikgXAogICAgIHYodW5zaWduZWQsIHdl
YkFzc2VtYmx5RnVuY3Rpb25FbnRyeURlY3JlbWVudCwgMSwgTm9ybWFsLCAiVGhlIGFtb3VudCB0
aGUgdGllciB1cCBjb3VudGRvd24gaXMgZGVjcmVtZW50ZWQgb24gZWFjaCBmdW5jdGlvbiBlbnRy
eS4iKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBz
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCmluZGV4IDFi
YWFjZTYwNDRlNjYwYThlNTQ0MWZiYWQwMThlYTkwOTMxYTRjOTEuLjEwZDc4MmE4ZGM0OWE1ZWRh
MDgxZDczZDY4M2RmZmUxNmY4YzhmNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNVHJhcHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNVHJhcHMuY3BwCkBAIC01MywxMSArNTMsMTEgQEAgQUxXQVlTX0lOTElORSBWTSYgVk1UcmFw
czo6dm0oKSBjb25zdAogI2lmIEVOQUJMRShTSUdOQUxfQkFTRURfVk1fVFJBUFMpCiAKIHN0cnVj
dCBTaWduYWxDb250ZXh0IHsKLSAgICBTaWduYWxDb250ZXh0KG1jb250ZXh0X3QmIG1jb250ZXh0
KQotICAgICAgICA6IG1jb250ZXh0KG1jb250ZXh0KQotICAgICAgICAsIHRyYXBQQyhNYWNoaW5l
Q29udGV4dDo6aW5zdHJ1Y3Rpb25Qb2ludGVyKG1jb250ZXh0KSkKLSAgICAgICAgLCBzdGFja1Bv
aW50ZXIoTWFjaGluZUNvbnRleHQ6OnN0YWNrUG9pbnRlcihtY29udGV4dCkpCi0gICAgICAgICwg
ZnJhbWVQb2ludGVyKE1hY2hpbmVDb250ZXh0OjpmcmFtZVBvaW50ZXIobWNvbnRleHQpKQorICAg
IFNpZ25hbENvbnRleHQoUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVycykKKyAgICAgICAgOiBj
b250ZXh0KHJlZ2lzdGVycykKKyAgICAgICAgLCB0cmFwUEMoTWFjaGluZUNvbnRleHQ6Omluc3Ry
dWN0aW9uUG9pbnRlcihjb250ZXh0KSkKKyAgICAgICAgLCBzdGFja1BvaW50ZXIoTWFjaGluZUNv
bnRleHQ6OnN0YWNrUG9pbnRlcihjb250ZXh0KSkKKyAgICAgICAgLCBmcmFtZVBvaW50ZXIoTWFj
aGluZUNvbnRleHQ6OmZyYW1lUG9pbnRlcihjb250ZXh0KSkKICAgICB7CiAjaWYgQ1BVKFg4Nl82
NCkgfHwgQ1BVKFg4NikKICAgICAgICAgLy8gT24gWDg2XzY0LCBTSUdUUkFQIHJlcG9ydHMgdGhl
IGFkZHJlc3MgYWZ0ZXIgdGhlIHRyYXBwaW5nIFBDLiBTbywgZGVjIGJ5IDEuCkBAIC02OCwxMSAr
NjgsMTEgQEAgc3RydWN0IFNpZ25hbENvbnRleHQgewogICAgIHZvaWQgYWRqdXN0UENUb1BvaW50
VG9UcmFwcGluZ0luc3RydWN0aW9uKCkKICAgICB7CiAjaWYgQ1BVKFg4Nl82NCkgfHwgQ1BVKFg4
NikKLSAgICAgICAgTWFjaGluZUNvbnRleHQ6Omluc3RydWN0aW9uUG9pbnRlcihtY29udGV4dCkg
PSB0cmFwUEM7CisgICAgICAgIE1hY2hpbmVDb250ZXh0OjppbnN0cnVjdGlvblBvaW50ZXIoY29u
dGV4dCkgPSB0cmFwUEM7CiAjZW5kaWYKICAgICB9CiAKLSAgICBtY29udGV4dF90JiBtY29udGV4
dDsKKyAgICBQbGF0Zm9ybVJlZ2lzdGVycyYgY29udGV4dDsKICAgICB2b2lkKiB0cmFwUEM7CiAg
ICAgdm9pZCogc3RhY2tQb2ludGVyOwogICAgIHZvaWQqIGZyYW1lUG9pbnRlcjsKQEAgLTEzMCwx
MSArMTMwLDEzIEBAIHN0YXRpYyBFeHBlY3RlZDxWTUFuZFN0YWNrQm91bmRzLCBWTVRyYXBzOjpF
cnJvcj4gZmluZEFjdGl2ZVZNQW5kU3RhY2tCb3VuZHMoU2lnCiAKIHN0YXRpYyB2b2lkIGluc3Rh
bGxTaWduYWxIYW5kbGVyKCkKIHsKLSAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWw6OlRy
YXAsIFtdIChpbnQsIHNpZ2luZm9fdCosIHZvaWQqIHVhcCkgLT4gU2lnbmFsQWN0aW9uIHsKLSAg
ICAgICAgU2lnbmFsQ29udGV4dCBjb250ZXh0KHN0YXRpY19jYXN0PHVjb250ZXh0X3QqPih1YXAp
LT51Y19tY29udGV4dCk7CisgICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFsOjpUcmFwLCBb
XSAoU2lnbmFsLCBTaWdJbmZvJiwgUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVycykgLT4gU2ln
bmFsQWN0aW9uIHsKKyAgICAgICAgU2lnbmFsQ29udGV4dCBjb250ZXh0KHJlZ2lzdGVycyk7CiAK
LSAgICAgICAgaWYgKCFpc0pJVFBDKGNvbnRleHQudHJhcFBDKSkKKyAgICAgICAgaWYgKCFpc0pJ
VFBDKGNvbnRleHQudHJhcFBDKSkgeworICAgICAgICAgICAgZGF0YUxvZ0xuKCJ0cmFwcGluZyBw
YzogIiwgUmF3UG9pbnRlcihjb250ZXh0LnRyYXBQQyksICIgaml0IHN0YXJ0OiAiLCBzdGFydE9m
Rml4ZWRFeGVjdXRhYmxlTWVtb3J5UG9vbCwgIiBqaXQgZW5kOiAiLCBlbmRPZkZpeGVkRXhlY3V0
YWJsZU1lbW9yeVBvb2wpOwogICAgICAgICAgICAgcmV0dXJuIFNpZ25hbEFjdGlvbjo6Tm90SGFu
ZGxlZDsKKyAgICAgICAgfQogCiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGN1cnJlbnRseSBlYXRz
IGFsbCB0cmFwcyBpbmNsdWRpbmcgaml0IGFzc2VydHMgd2Ugc2hvdWxkIG1ha2Ugc3VyZSB0aGlz
CiAgICAgICAgIC8vIGFsd2F5cyB3b3Jrcy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE3MTAzOQpAQCAtNDA0LDggKzQwNiw4IEBAIHZvaWQgVk1UcmFwczo6U2lnbmFs
U2VuZGVyOjpzZW5kKCkKICAgICAgICAgICAgIFZNJiB2bSA9ICptX3ZtOwogICAgICAgICAgICAg
YXV0byBvcHRpb25hbE93bmVyVGhyZWFkID0gdm0ub3duZXJUaHJlYWQoKTsKICAgICAgICAgICAg
IGlmIChvcHRpb25hbE93bmVyVGhyZWFkKSB7Ci0gICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2Uo
Km9wdGlvbmFsT3duZXJUaHJlYWQudmFsdWUoKS5nZXQoKSwgW10gKHNpZ2luZm9fdCosIHVjb250
ZXh0X3QqIHVjb250ZXh0KSAtPiB2b2lkIHsKLSAgICAgICAgICAgICAgICAgICAgU2lnbmFsQ29u
dGV4dCBjb250ZXh0KHVjb250ZXh0LT51Y19tY29udGV4dCk7CisgICAgICAgICAgICAgICAgc2Vu
ZE1lc3NhZ2UoKm9wdGlvbmFsT3duZXJUaHJlYWQudmFsdWUoKS5nZXQoKSwgW10gKFBsYXRmb3Jt
UmVnaXN0ZXJzJiByZWdpc3RlcnMpIC0+IHZvaWQgeworICAgICAgICAgICAgICAgICAgICBTaWdu
YWxDb250ZXh0IGNvbnRleHQocmVnaXN0ZXJzKTsKICAgICAgICAgICAgICAgICAgICAgYXV0byBh
Y3RpdmVWTUFuZFN0YWNrQm91bmRzID0gZmluZEFjdGl2ZVZNQW5kU3RhY2tCb3VuZHMoY29udGV4
dCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChhY3RpdmVWTUFuZFN0YWNrQm91bmRzKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBWTSogdm0gPSBhY3RpdmVWTUFuZFN0YWNrQm91bmRzLnZh
bHVlKCkudm07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvU2lnaWxs
Q3Jhc2hBbmFseXplci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvU2lnaWxsQ3Jh
c2hBbmFseXplci5jcHAKaW5kZXggNGFkYWVmZjFjZGEyZDFmYmM2ZjkwNjFmMDYzZTE0ZDJlNjMz
MDA0OC4uYmI0NjA1YzY5M2UxMmRkZTA1MDg0ZjdhMTdjZDFlNDRmN2U5ZTY3NSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1NpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9TaWdpbGxDcmFzaEFuYWx5emVyLmNwcApA
QCAtNzgsMTEgKzc4LDExIEBAIHByaXZhdGU6CiAjZW5kaWYgLy8gVVNFKE9TX0xPRykKIAogc3Ry
dWN0IFNpZ25hbENvbnRleHQgewotICAgIFNpZ25hbENvbnRleHQobWNvbnRleHRfdCYgbWNvbnRl
eHQpCi0gICAgICAgIDogbWNvbnRleHQobWNvbnRleHQpCi0gICAgICAgICwgbWFjaGluZVBDKE1h
Y2hpbmVDb250ZXh0OjppbnN0cnVjdGlvblBvaW50ZXIobWNvbnRleHQpKQotICAgICAgICAsIHN0
YWNrUG9pbnRlcihNYWNoaW5lQ29udGV4dDo6c3RhY2tQb2ludGVyKG1jb250ZXh0KSkKLSAgICAg
ICAgLCBmcmFtZVBvaW50ZXIoTWFjaGluZUNvbnRleHQ6OmZyYW1lUG9pbnRlcihtY29udGV4dCkp
CisgICAgU2lnbmFsQ29udGV4dChQbGF0Zm9ybVJlZ2lzdGVycyYgY29udGV4dCkKKyAgICAgICAg
OiBjb250ZXh0KGNvbnRleHQpCisgICAgICAgICwgbWFjaGluZVBDKE1hY2hpbmVDb250ZXh0Ojpp
bnN0cnVjdGlvblBvaW50ZXIoY29udGV4dCkpCisgICAgICAgICwgc3RhY2tQb2ludGVyKE1hY2hp
bmVDb250ZXh0OjpzdGFja1BvaW50ZXIoY29udGV4dCkpCisgICAgICAgICwgZnJhbWVQb2ludGVy
KE1hY2hpbmVDb250ZXh0OjpmcmFtZVBvaW50ZXIoY29udGV4dCkpCiAgICAgeyB9CiAKICAgICB2
b2lkIGR1bXAoKQpAQCAtMTEyLDcgKzExMiw3IEBAIHN0cnVjdCBTaWduYWxDb250ZXh0IHsKICAg
ICAgICAgdihncykKIAogI2RlZmluZSBEVU1QX1JFR0lTVEVSKF9fcmVnKSBcCi0gICAgICAgIGxv
ZygiUmVnaXN0ZXIgIiAjX19yZWcgIjogJXAiLCByZWludGVycHJldF9jYXN0PHZvaWQqPihtY29u
dGV4dC0+X19zcy5fXyMjX19yZWcpKTsKKyAgICAgICAgbG9nKCJSZWdpc3RlciAiICNfX3JlZyAi
OiAlcCIsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNvbnRleHQuX18jI19fcmVnKSk7CiAgICAg
ICAgIEZPUl9FQUNIX1JFR0lTVEVSKERVTVBfUkVHSVNURVIpCiAjdW5kZWYgRk9SX0VBQ0hfUkVH
SVNURVIKIApAQCAtMTIwLDIwICsxMjAsMjAgQEAgc3RydWN0IFNpZ25hbENvbnRleHQgewogICAg
ICAgICBpbnQgaTsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IDI4OyBpICs9IDQpIHsKICAgICAg
ICAgICAgIGxvZygieCVkOiAlMDE2bGx4IHglZDogJTAxNmxseCB4JWQ6ICUwMTZsbHggeCVkOiAl
MDE2bGx4IiwKLSAgICAgICAgICAgICAgICBpLCBtY29udGV4dC0+X19zcy5fX3hbaV0sCi0gICAg
ICAgICAgICAgICAgaSsxLCBtY29udGV4dC0+X19zcy5fX3hbaSsxXSwKLSAgICAgICAgICAgICAg
ICBpKzIsIG1jb250ZXh0LT5fX3NzLl9feFtpKzJdLAotICAgICAgICAgICAgICAgIGkrMywgbWNv
bnRleHQtPl9fc3MuX194W2krM10pOworICAgICAgICAgICAgICAgIGksIGNvbnRleHQuX194W2ld
LAorICAgICAgICAgICAgICAgIGkrMSwgY29udGV4dC5fX3hbaSsxXSwKKyAgICAgICAgICAgICAg
ICBpKzIsIGNvbnRleHQuX194W2krMl0sCisgICAgICAgICAgICAgICAgaSszLCBjb250ZXh0Ll9f
eFtpKzNdKTsKICAgICAgICAgfQogICAgICAgICBBU1NFUlQoaSA8IDI5KTsKICAgICAgICAgbG9n
KCJ4JWQ6ICUwMTZsbHggZnA6ICUwMTZsbHggbHI6ICUwMTZsbHgiLAotICAgICAgICAgICAgaSwg
bWNvbnRleHQtPl9fc3MuX194W2ldLCBtY29udGV4dC0+X19zcy5fX2ZwLCBtY29udGV4dC0+X19z
cy5fX2xyKTsKKyAgICAgICAgICAgIGksIGNvbnRleHQuX194W2ldLCBjb250ZXh0Ll9fZnAsIGNv
bnRleHQuX19scik7CiAgICAgICAgIGxvZygic3A6ICUwMTZsbHggcGM6ICUwMTZsbHggY3Bzcjog
JTA4eCIsCi0gICAgICAgICAgICBtY29udGV4dC0+X19zcy5fX3NwLCBtY29udGV4dC0+X19zcy5f
X3BjLCBtY29udGV4dC0+X19zcy5fX2Nwc3IpOworICAgICAgICAgICAgY29udGV4dC5fX3NwLCBj
b250ZXh0Ll9fcGMsIGNvbnRleHQuX19jcHNyKTsKICNlbmRpZgogICAgIH0KIAotICAgIG1jb250
ZXh0X3QmIG1jb250ZXh0OworICAgIFBsYXRmb3JtUmVnaXN0ZXJzJiBjb250ZXh0OwogICAgIHZv
aWQqIG1hY2hpbmVQQzsKICAgICB2b2lkKiBzdGFja1BvaW50ZXI7CiAgICAgdm9pZCogZnJhbWVQ
b2ludGVyOwpAQCAtMTQyLDggKzE0Miw4IEBAIHN0cnVjdCBTaWduYWxDb250ZXh0IHsKIHN0YXRp
YyB2b2lkIGluc3RhbGxDcmFzaEhhbmRsZXIoKQogewogI2lmIENQVShYODZfNjQpIHx8IENQVShB
Uk02NCkKLSAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWw6OklsbCwgW10gKGludCwgc2ln
aW5mb190Kiwgdm9pZCogdWFwKSB7Ci0gICAgICAgIFNpZ25hbENvbnRleHQgY29udGV4dChzdGF0
aWNfY2FzdDx1Y29udGV4dF90Kj4odWFwKS0+dWNfbWNvbnRleHQpOworICAgIGluc3RhbGxTaWdu
YWxIYW5kbGVyKFNpZ25hbDo6SWxsLCBbXSAoU2lnbmFsLCBTaWdJbmZvJiwgUGxhdGZvcm1SZWdp
c3RlcnMmIHJlZ2lzdGVycykgeworICAgICAgICBTaWduYWxDb250ZXh0IGNvbnRleHQocmVnaXN0
ZXJzKTsKIAogICAgICAgICBpZiAoIWlzSklUUEMoY29udGV4dC5tYWNoaW5lUEMpKQogICAgICAg
ICAgICAgcmV0dXJuIFNpZ25hbEFjdGlvbjo6Tm90SGFuZGxlZDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAppbmRleCAxZGQwY2QxZDgzNWM2YzJmMjMxYjAwYjg4
NmRkZTRhZjcyYzI2M2NlLi5iMWI1OThkMjBjNWMwMDc3ZDllOWQwOGUzNjhhZDVjYTE3ODMxYmFm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCkBAIC0yNDIs
NyArMjQyLDcgQEAgdm9pZCBCQlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKENvbXBpbGF0aW9uRWZm
b3J0IGVmZm9ydCkKICAgICAgICAgQVNTRVJUKHZhbGlkYXRlRnVuY3Rpb24oZnVuY3Rpb25TdGFy
dCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSkp
OwogCiAgICAgICAgIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0gPSBW
ZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4oKTsKLSAgICAgICAgVGllclVwQ291bnQqIHRp
ZXJVcCA9ICZtX3RpZXJVcENvdW50c1tmdW5jdGlvbkluZGV4XTsKKyAgICAgICAgVGllclVwQ291
bnQqIHRpZXJVcCA9IE9wdGlvbnM6OnVzZUJCUVRpZXJVcENoZWNrcygpID8gJm1fdGllclVwQ291
bnRzW2Z1bmN0aW9uSW5kZXhdIDogbnVsbHB0cjsKICAgICAgICAgYXV0byBwYXJzZUFuZENvbXBp
bGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUobV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9u
SW5kZXhdLCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBtX3VubGlu
a2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdLCBtX21vZHVsZUluZm9ybWF0aW9uLmdl
dCgpLCBtX21vZGUsIENvbXBpbGF0aW9uTW9kZTo6QkJRTW9kZSwgZnVuY3Rpb25JbmRleCwgdGll
clVwKTsKIAogICAgICAgICBpZiAoVU5MSUtFTFkoIXBhcnNlQW5kQ29tcGlsZVJlc3VsdCkpIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhh
bmRsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFu
ZGxlci5jcHAKaW5kZXggMmUwYzk5YTM5YmViZDMxNzhiOTE0OGQ5NThmZTUzZTU3YTYyMjk3ZS4u
MjY0YzM0ZGU0NWRhMTc1YTVkNTE0MWMxNzFlZmU5NWUwNjNjNWUyNyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAKQEAg
LTUyLDkgKzUyLDggQEAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxIYXNoU2V0PHN0ZDo6dHVw
bGU8dm9pZCosIHZvaWQqPj4+IGNvZGVMb2NhdGlvbnM7IC8vICgKIAogc3RhdGljIGJvb2wgZmFz
dEhhbmRsZXJJbnN0YWxsZWQgeyBmYWxzZSB9OwogCi1zdGF0aWMgU2lnbmFsQWN0aW9uIHRyYXBI
YW5kbGVyKGludCwgc2lnaW5mb190KiBzaWdJbmZvLCB2b2lkKiB1Y29udGV4dCkKK3N0YXRpYyBT
aWduYWxBY3Rpb24gdHJhcEhhbmRsZXIoU2lnbmFsLCBTaWdJbmZvJiBzaWdJbmZvLCBQbGF0Zm9y
bVJlZ2lzdGVycyYgY29udGV4dCkKIHsKLSAgICBtY29udGV4dF90JiBjb250ZXh0ID0gc3RhdGlj
X2Nhc3Q8dWNvbnRleHRfdCo+KHVjb250ZXh0KS0+dWNfbWNvbnRleHQ7CiAgICAgdm9pZCogZmF1
bHRpbmdJbnN0cnVjdGlvbiA9IE1hY2hpbmVDb250ZXh0OjppbnN0cnVjdGlvblBvaW50ZXIoY29u
dGV4dCk7CiAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgInN0YXJ0aW5nIGhhbmRsZXIgZm9yIGZh
dWx0IGF0OiAiLCBSYXdQb2ludGVyKGZhdWx0aW5nSW5zdHJ1Y3Rpb24pKTsKIApAQCAtNjQsNyAr
NjMsNyBAQCBzdGF0aWMgU2lnbmFsQWN0aW9uIHRyYXBIYW5kbGVyKGludCwgc2lnaW5mb190KiBz
aWdJbmZvLCB2b2lkKiB1Y29udGV4dCkKICAgICBpZiAoaXNKSVRQQyhmYXVsdGluZ0luc3RydWN0
aW9uKSkgewogICAgICAgICBib29sIGZhdWx0ZWRJbkFjdGl2ZUZhc3RNZW1vcnkgPSBmYWxzZTsK
ICAgICAgICAgewotICAgICAgICAgICAgdm9pZCogZmF1bHRpbmdBZGRyZXNzID0gc2lnSW5mby0+
c2lfYWRkcjsKKyAgICAgICAgICAgIHZvaWQqIGZhdWx0aW5nQWRkcmVzcyA9IHNpZ0luZm8uZmF1
bHRpbmdBZGRyZXNzOwogICAgICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgImNoZWNraW5n
IGZhdWx0aW5nIGFkZHJlc3M6ICIsIFJhd1BvaW50ZXIoZmF1bHRpbmdBZGRyZXNzKSwgIiBpcyBp
biBhbiBhY3RpdmUgZmFzdCBtZW1vcnkiKTsKICAgICAgICAgICAgIGZhdWx0ZWRJbkFjdGl2ZUZh
c3RNZW1vcnkgPSBXYXNtOjpNZW1vcnk6OmFkZHJlc3NJc0luQWN0aXZlRmFzdE1lbW9yeShmYXVs
dGluZ0FkZHJlc3MpOwogICAgICAgICB9CkBAIC0xMjQsMTEgKzEyMywxMSBAQCB2b2lkIGVuYWJs
ZUZhc3RNZW1vcnkoKQogICAgICAgICAgICAgcmV0dXJuOwogCiAjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZX0ZBU1RfTUVNT1JZKQotICAgICAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWw6OkJ1
cywgW10gKGludCBzaWduYWwsIHNpZ2luZm9fdCogc2lnSW5mbywgdm9pZCogdWNvbnRleHQpIHsK
KyAgICAgICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFsOjpCdXMsIFtdIChTaWduYWwgc2ln
bmFsLCBTaWdJbmZvJiBzaWdJbmZvLCBQbGF0Zm9ybVJlZ2lzdGVycyYgdWNvbnRleHQpIHsKICAg
ICAgICAgICAgIHJldHVybiB0cmFwSGFuZGxlcihzaWduYWwsIHNpZ0luZm8sIHVjb250ZXh0KTsK
ICAgICAgICAgfSk7CiAKLSAgICAgICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFsOjpTZWdW
LCBbXSAoaW50IHNpZ25hbCwgc2lnaW5mb190KiBzaWdJbmZvLCB2b2lkKiB1Y29udGV4dCkgewor
ICAgICAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWw6OlNlZ1YsIFtdIChTaWduYWwgc2ln
bmFsLCBTaWdJbmZvJiBzaWdJbmZvLCBQbGF0Zm9ybVJlZ2lzdGVycyYgdWNvbnRleHQpIHsKICAg
ICAgICAgICAgIHJldHVybiB0cmFwSGFuZGxlcihzaWduYWwsIHNpZ0luZm8sIHVjb250ZXh0KTsK
ICAgICAgICAgfSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21NYWNoaW5lVGhyZWFkcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWFj
aGluZVRocmVhZHMuY3BwCmluZGV4IDVhYWM4N2FjYjU3NDdjN2ZjYTJmOTM2ZWM5Y2Y2NzhiNDMx
NzgxNzEuLjBhMzY3ZmQ1ZTIyNTI3ZTljM2M4NzUzNmVjZmQ3MmIxM2RmNzlkNWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NYWNoaW5lVGhyZWFkcy5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1hY2hpbmVUaHJlYWRzLmNwcApAQCAt
MzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIk1hY2hpbmVTdGFja01hcmtlci5oIgogI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRNZXNzYWdlLmg+Cisj
aW5jbHVkZSA8d3RmL3RocmVhZHMvU2lnbmFscy5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIFdhc20gewogCkBAIC01Nyw3ICs1OCw3IEBAIHZvaWQgcmVzZXRJbnN0cnVjdGlvbkNhY2hl
T25BbGxUaHJlYWRzKCkKIAogICAgIGNvbnN0IERvdWJseUxpbmtlZExpc3Q8TWFjaGluZVRocmVh
ZHM6Ok1hY2hpbmVUaHJlYWQ+JiB0aHJlYWRzID0gd2FzbVRocmVhZHMoKS50aHJlYWRzTGlzdEhl
YWQobG9ja2VyKTsKICAgICBmb3IgKGNvbnN0IGF1dG8qIHRocmVhZCA9IHRocmVhZHMuaGVhZCgp
OyB0aHJlYWQ7IHRocmVhZCA9IHRocmVhZC0+bmV4dCgpKSB7Ci0gICAgICAgIHNlbmRNZXNzYWdl
KHRocmVhZC0+bV90aHJlYWQuZ2V0KCksIFtdIChzaWdpbmZvX3QqLCB1Y29udGV4dF90Kikgewor
ICAgICAgICBzZW5kTWVzc2FnZSh0aHJlYWQtPm1fdGhyZWFkLmdldCgpLCBbXSAoY29uc3QgUGxh
dGZvcm1SZWdpc3RlcnMmKSB7CiAgICAgICAgICAgICAvLyBJdCdzIGxpa2VseSB0aGF0IHRoZSBz
aWduYWwgaGFuZGxlciB3aWxsIGFscmVhZHkgcmVzZXQgdGhlIGluc3RydWN0aW9uIGNhY2hlIGJ1
dCB3ZSBtaWdodCBhcyB3ZWxsIGJlIHN1cmUuCiAgICAgICAgICAgICBXVEY6OmNyb3NzTW9kaWZ5
aW5nQ29kZUZlbmNlKCk7CiAgICAgICAgIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9Db25m
aWd1cmF0aW9ucy9XVEYueGNjb25maWcgYi9Tb3VyY2UvV1RGL0NvbmZpZ3VyYXRpb25zL1dURi54
Y2NvbmZpZwppbmRleCA0MjFlZmQ5NjFjMTQ2OGNkMjBkZGM1YmJmODg5NjIwZWUxY2Y1OGRjLi5h
ZjE5OWNlYjk1MDZmODk1MGQzM2E5Y2U0ODA3YmE2ZGJiN2IyN2U1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL0NvbmZpZ3VyYXRpb25zL1dURi54Y2NvbmZpZworKysgYi9Tb3VyY2UvV1RGL0NvbmZp
Z3VyYXRpb25zL1dURi54Y2NvbmZpZwpAQCAtMjcsMyArMjcsNiBAQCBQUk9EVUNUX05BTUUgPSBX
VEY7CiAKIEdDQ19TWU1CT0xTX1BSSVZBVEVfRVhURVJOID0gWUVTOwogU1RSSVBfSU5TVEFMTEVE
X1BST0RVQ1QgPSBOTzsKKworRVhDTFVERURfU09VUkNFX0ZJTEVfTkFNRVNfID0gTWFjaEV4Y2Vw
dGlvbnMuZGVmcworRVhDTFVERURfU09VUkNFX0ZJTEVfTkFNRVNbc2RrPWlwaG9uZW9zKl0gPSAk
KEVYQ0xVREVEX1NPVVJDRV9GSUxFX05BTUVTXyQoVVNFX0lOVEVSTkFMX1NESykpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dU
Ri9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA1ZjQ1Mjg3ZjZlM2M2ODg1YjIy
YmEyNzc2Y2ZiYzZhMzMyM2JkMDViLi41ODU0NGNjYjYyY2IyMjEyYmFlZTc2ZjRkMmEwMWU4OWI2
YjdiMDk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTY0
LDYgKzY0LDcgQEAKIAkJNTIxODMwMTJDOTlFNDc2QTg0RUVCRUE4IC8qIFN5bWJvbEltcGwuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjcyQkJEQjEw
N0ZBNDI0ODg2MTc4QjlFIC8qIFN5bWJvbEltcGwuY3BwICovOyB9OwogCQk1MzExQkQ1MzFFQTcx
Q0FEMDA1MjUyODEgLyogU2lnbmFscy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MzExQkQ1MTFFQTcxQ0FEMDA1MjUyODEgLyogU2lnbmFscy5jcHAg
Ki87IH07CiAJCTUzMTFCRDVDMUVBODIyRjkwMDUyNTI4MSAvKiBUaHJlYWRNZXNzYWdlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMTFCRDVCMUVB
ODIyRjkwMDUyNTI4MSAvKiBUaHJlYWRNZXNzYWdlLmNwcCAqLzsgfTsKKwkJNTM1MzRGMkExRUMw
RTEwRTAwMTQxQjJGIC8qIE1hY2hFeGNlcHRpb25zLmRlZnMgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzUzNEYyOTFFQzBFMTBFMDAxNDFCMkYgLyogTWFj
aEV4Y2VwdGlvbnMuZGVmcyAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChDbGllbnQsIFNl
cnZlciwgKTsgfTsgfTsKIAkJNzBBOTkzRkUxQUQ3MTUxMzAwRkE2MTVCIC8qIFN5bWJvbFJlZ2lz
dHJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcw
QTk5M0ZDMUFENzE1MTMwMEZBNjE1QiAvKiBTeW1ib2xSZWdpc3RyeS5jcHAgKi87IH07CiAJCTcw
RUNBNjBEMUIwMjQyNjgwMDQ0OTczOSAvKiBBdG9taWNTdHJpbmdJbXBsLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcwRUNBNjBBMUIwMjQyNjgwMDQ0
OTczOSAvKiBBdG9taWNTdHJpbmdJbXBsLmNwcCAqLzsgfTsKIAkJN0FGRUM2QjExRUIyMkI1OTAw
REFERTM2IC8qIFVVSUQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gN0FGRUM2QjAxRUIyMkI1OTAwREFERTM2IC8qIFVVSUQuY3BwICovOyB9OwpAQCAt
Mjk5LDYgKzMwMCw3IEBACiAJCTUzMTFCRDU3MUVBN0UxQTEwMDUyNTI4MSAvKiBTaWduYWxzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpZ25hbHMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTMxMUJENTkxRUE4MUE5NjAwNTI1MjgxIC8qIFRocmVhZE1lc3Nh
Z2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGhyZWFkTWVzc2FnZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzExQkQ1QjFFQTgyMkY5MDA1MjUyODEgLyog
VGhyZWFkTWVzc2FnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBU
aHJlYWRNZXNzYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM1MzRGMjkx
RUMwRTEwRTAwMTQxQjJGIC8qIE1hY2hFeGNlcHRpb25zLmRlZnMgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLm1pZzsgcGF0aCA9IE1hY2hFeGNlcHRpb25zLmRlZnM7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUzOUVCMDYyMUQ1NTI4NDIwMEM4MkVGNyAvKiBMRUJEZWNvZGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExFQkRlY29kZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTNFQzI1M0MxRTk1QUQzMDAwMDgzMUI5IC8qIFByaW9yaXR5UXVldWUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJpb3JpdHlRdWV1ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NTMwNzFDOTFDNDA0MjcyMDAzODQ4OTggLyogVGlu
eUxSVUNhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpbnlMUlVDYWNo
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTAyMyw2ICsxMDI1LDcgQEAKIAkJ
CWNoaWxkcmVuID0gKAogCQkJCTFBNDI4QjhCMUM4Rjg5REQwMDUxRTlFQiAvKiBBcHBLaXRDb21w
YXRpYmlsaXR5RGVjbGFyYXRpb25zLmggKi8sCiAJCQkJMUFDQUREODIxODg0NDgwMTAwRDhCNzFE
IC8qIERlcHJlY2F0ZWRTeW1ib2xzVXNlZEJ5U2FmYXJpLm1tICovLAorCQkJCTUzNTM0RjI5MUVD
MEUxMEUwMDE0MUIyRiAvKiBNYWNoRXhjZXB0aW9ucy5kZWZzICovLAogCQkJCUE4QTQ3MkM1MTUx
QTgyNUEwMDQxMjNGRiAvKiBNYWluVGhyZWFkTWFjLm1tICovLAogCQkJKTsKIAkJCXBhdGggPSBt
YWM7CkBAIC0xMzQ2LDYgKzEzNDksNyBAQAogCQkJCTE0M0Y2MTFGMTU2NUYwRjkwMERCNTE0QSAv
KiBSQU1TaXplLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEzQjcyNUVDOTg3NDQ2QUQ5M0YxQTQ0
MCAvKiBSYW5kb21EZXZpY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0MTQxNTFBODI1
QjAwNDEyM0ZGIC8qIFJhbmRvbU51bWJlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MzUzNEYy
QTFFQzBFMTBFMDAxNDFCMkYgLyogTWFjaEV4Y2VwdGlvbnMuZGVmcyBpbiBTb3VyY2VzICovLAog
CQkJCUE4QTQ3NDFBMTUxQTgyNUIwMDQxMjNGRiAvKiBSZWZDb3VudGVkTGVha0NvdW50ZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMkNERUQwRjMxODExNUM4NTAwNERCQTcwIC8qIFJ1bkxvb3Au
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkNERUQwRUYxODExNUMzODAwNERCQTcwIC8qIFJ1bkxv
b3BDRi5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRm
b3JtLmggYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCmluZGV4IDY4NTRhODFlMzk3MjcwNjcw
MzRkMDVkYjM5OGE0NzBjMTQyODQyNzYuLjM2Mzg4Mzk1ZDRmNDNiNDY1Mzg5ZWJjOTgwMmZiYjRk
OTBkMjRiN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKKysrIGIvU291
cmNlL1dURi93dGYvUGxhdGZvcm0uaApAQCAtNjYzLDYgKzY2MywxMCBAQAogI2RlZmluZSBIQVZF
X1JFQURMSU5FIDEKICNkZWZpbmUgSEFWRV9TWVNfVElNRUJfSCAxCiAKKyNpZiBfX2hhc19pbmNs
dWRlKDxtYWNoL21hY2hfZXhjLmRlZnM+KSAmJiAhKFBMQVRGT1JNKFdBVENIT1MpIHx8IFBMQVRG
T1JNKEFQUExFVFYpKQorI2RlZmluZSBIQVZFX01BQ0hfRVhDRVBUSU9OUyAxCisjZW5kaWYKKwog
I2lmICFQTEFURk9STShHVEspCiAjZGVmaW5lIFVTRV9BQ0NFTEVSQVRFIDEKICNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1SZWdpc3RlcnMuaCBiL1NvdXJjZS9XVEYv
d3RmL1BsYXRmb3JtUmVnaXN0ZXJzLmgKaW5kZXggZDViNWFiYzIyMWJiYWQ4Mjk3NjE5M2VjZTUx
YzFjNzYxNzVkYjA2ZC4uODRiZDg5Mzc0OTlkYTk5ZWFhODZiNzM2OTVmN2M1YjgxYWMyNjBjZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1SZWdpc3RlcnMuaAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi9QbGF0Zm9ybVJlZ2lzdGVycy5oCkBAIC0yNiw5ICsyNiwxMSBAQAogI3ByYWdt
YSBvbmNlCiAKICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGli
RXh0cmFzLmg+CiAKICNpZiBPUyhEQVJXSU4pCiAjaW5jbHVkZSA8bWFjaC90aHJlYWRfYWN0Lmg+
CisjaW5jbHVkZSA8c2lnbmFsLmg+CiAjZWxpZiBPUyhXSU5ET1dTKQogI2luY2x1ZGUgPHdpbmRv
d3MuaD4KICNlbHNlCkBAIC01NSw2ICs1NywxMSBAQCB0eXBlZGVmIGFybV90aHJlYWRfc3RhdGU2
NF90IFBsYXRmb3JtUmVnaXN0ZXJzOwogI2Vycm9yIFVua25vd24gQXJjaGl0ZWN0dXJlCiAjZW5k
aWYKIAoraW5saW5lIFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnNGcm9tVUNvbnRleHQodWNv
bnRleHRfdCogdWNvbnRleHQpCit7CisgICAgcmV0dXJuIHVjb250ZXh0LT51Y19tY29udGV4dC0+
X19zczsKK30KKwogI2VsaWYgT1MoV0lORE9XUykKIAogdXNpbmcgUGxhdGZvcm1SZWdpc3RlcnMg
PSBDT05URVhUOwpAQCAtNjUsNiArNzIsMTEgQEAgc3RydWN0IFBsYXRmb3JtUmVnaXN0ZXJzIHsK
ICAgICBtY29udGV4dF90IG1hY2hpbmVDb250ZXh0OwogfTsKIAoraW5saW5lIFBsYXRmb3JtUmVn
aXN0ZXJzJiByZWdpc3RlcnNGcm9tVUNvbnRleHQodWNvbnRleHRfdCogdWNvbnRleHQpCit7Cisg
ICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8UGxhdGZvcm1SZWdpc3RlcnMqPigmdWNvbnRleHQtPnVj
X21jb250ZXh0KTsKK30KKwogI2Vsc2UKIAogc3RydWN0IFBsYXRmb3JtUmVnaXN0ZXJzIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1N0YWNrQm91bmRzLmggYi9Tb3VyY2UvV1RGL3d0Zi9T
dGFja0JvdW5kcy5oCmluZGV4IDU1NDYwNGYyYWI0ODRjN2NmNzFlZTM4NjMwY2ViNGM3OWMzM2U5
NzIuLmNkNjJjMTQ4YTZjN2VmYzk1MTdhOGIwOWI4YTMyYzdmZTE5MGNkZWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL1N0YWNrQm91bmRzLmgKKysrIGIvU291cmNlL1dURi93dGYvU3RhY2tC
b3VuZHMuaApAQCAtNTQsNyArNTQsNiBAQCBwdWJsaWM6CiAgICAgICAgIDogbV9vcmlnaW4ob3Jp
Z2luKQogICAgICAgICAsIG1fYm91bmQoZW5kKQogICAgIHsKLSAgICAgICAgY2hlY2tDb25zaXN0
ZW5jeSgpOwogICAgIH0KIAogICAgIHZvaWQqIG9yaWdpbigpIGNvbnN0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXIuY3BwIGIvU291cmNlL1dURi93dGYvVGhyZWFkSG9s
ZGVyLmNwcAppbmRleCAzMGIyMjdjZGI4YWM1MjYwNzUwYjQ3ZDQ4MmFiYzJkNTViZTNhYzk0Li45
NmQ5MWI1Yjg3ZGRmOTc4ODA1ZGI2ZWIxZjYwZGMwMGUxNDlhNDg2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXIuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZEhv
bGRlci5jcHAKQEAgLTM0LDEyICszNCwxNyBAQAogCiAjaW5jbHVkZSAiVGhyZWFkaW5nLmgiCiAK
KyNpbmNsdWRlIDx3dGYvdGhyZWFkcy9TaWduYWxzLmg+CisKIG5hbWVzcGFjZSBXVEYgewogCiBU
aHJlYWRTcGVjaWZpY0tleSBUaHJlYWRIb2xkZXI6Om1fa2V5ID0gSW52YWxpZFRocmVhZFNwZWNp
ZmljS2V5OwogCiBUaHJlYWRIb2xkZXI6On5UaHJlYWRIb2xkZXIoKQogeworI2lmIEhBVkUoTUFD
SF9FWENFUFRJT05TKQorICAgIHJlbW92ZVRocmVhZCgmbV90aHJlYWQuZ2V0KCkpOworI2VuZGlm
CiAgICAgbV90aHJlYWQtPmRpZEV4aXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93
dGYvVGhyZWFkTWVzc2FnZS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRNZXNzYWdlLmNwcApp
bmRleCBmMTRiYzQ1ZDM2MTRjN2M2NjM1ZWIxN2FiMGUyNzI4MTZhMTM3M2RkLi4wNWIzYjg5ZDVk
ZDRiM2Q4ZTQzN2Q1MmJhOTMwYTkzMDczYjEzOGIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9UaHJlYWRNZXNzYWdlLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRNZXNzYWdlLmNw
cApAQCAtMzYsNiArMzYsOSBAQAogI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KICNpbmNsdWRlIDx3
dGYvdGhyZWFkcy9TaWduYWxzLmg+CiAKKyNpZiBIQVZFKE1BQ0hfRVhDRVBUSU9OUykKKyNpbmNs
dWRlIDxtYWNoL3RocmVhZF9hY3QuaD4KKyNlbmRpZgogCiBuYW1lc3BhY2UgV1RGIHsKIApAQCAt
ODMsMTIgKzg2LDEyIEBAIHZvaWQgaW5pdGlhbGl6ZVRocmVhZE1lc3NhZ2VzKCkKIH0KIAogU1VQ
UFJFU1NfQVNBTgotTWVzc2FnZVN0YXR1cyBzZW5kTWVzc2FnZVNjb3BlZChUaHJlYWQmIHRocmVh
ZCwgY29uc3QgVGhyZWFkTWVzc2FnZSYgbWVzc2FnZSkKK3N0YXRpYyBNZXNzYWdlU3RhdHVzIHNl
bmRNZXNzYWdlU2lnbmFsKFRocmVhZCYgdGhyZWFkLCBjb25zdCBUaHJlYWRNZXNzYWdlJiBtZXNz
YWdlKQogewogICAgIGNvbnN0ZXhwciBTaWduYWwgc2lnbmFsID0gU2lnbmFsOjpVc3I7CiAgICAg
c3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2U7CiAgICAgc3RkOjpjYWxsX29uY2Uob25jZSwgW10g
ewotICAgICAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihzaWduYWwsIFtdIChpbnQsIHNpZ2luZm9f
dCogaW5mbywgdm9pZCogdWFwKSB7CisgICAgICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKHNpZ25h
bCwgW10gKFNpZ25hbCwgU2lnSW5mbyYsIFBsYXRmb3JtUmVnaXN0ZXJzJiBjb250ZXh0KSB7CiAg
ICAgICAgICAgICBUaHJlYWQqIHRocmVhZCA9IFRocmVhZDo6Y3VycmVudE1heUJlTnVsbCgpOwog
CiAgICAgICAgICAgICBpZiAoIXRocmVhZCkgewpAQCAtOTgsNyArMTAxLDcgQEAgTWVzc2FnZVN0
YXR1cyBzZW5kTWVzc2FnZVNjb3BlZChUaHJlYWQmIHRocmVhZCwgY29uc3QgVGhyZWFkTWVzc2Fn
ZSYgbWVzc2FnZSkKIAogICAgICAgICAgICAgLy8gTm9kZSBzaG91bGQgYmUgZGVsZXRlZCBpbiB0
aGUgc2VuZGVyIHRocmVhZC4gRGVsZXRpbmcgTm9kZXMgaW4gc2lnbmFsIGhhbmRsZXIgY2F1c2Vz
IGRlYWQgbG9jay4KICAgICAgICAgICAgIHRocmVhZC0+dGhyZWFkTWVzc2FnZXMoKS5jb25zdW1l
QWxsV2l0aE5vZGUoWyZdIChUaHJlYWRNZXNzYWdlRGF0YSogZGF0YSwgTm9kZSogbm9kZSkgewot
ICAgICAgICAgICAgICAgIGRhdGEtPm1lc3NhZ2UoaW5mbywgc3RhdGljX2Nhc3Q8dWNvbnRleHRf
dCo+KHVhcCkpOworICAgICAgICAgICAgICAgIGRhdGEtPm1lc3NhZ2UoY29udGV4dCk7CiAgICAg
ICAgICAgICAgICAgLy8gQnkgc2V0dGluZyByYW4gdmFyaWFibGUsICgxKSB0aGUgc2VuZGVyIGFj
a25vd2xlZGdlcyB0aGUgY29tcGxldGlvbiBhbmQKICAgICAgICAgICAgICAgICAvLyAoMikgZ2V0
cyB0aGUgTm9kZSB0byBiZSBkZWxldGVkLgogICAgICAgICAgICAgICAgIGRhdGEtPnJhbi5zdG9y
ZShub2RlKTsKQEAgLTE1Niw2ICsxNTksNjAgQEAgTWVzc2FnZVN0YXR1cyBzZW5kTWVzc2FnZVNj
b3BlZChUaHJlYWQmIHRocmVhZCwgY29uc3QgVGhyZWFkTWVzc2FnZSYgbWVzc2FnZSkKICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCisjaWYgSEFWRShNQUNIX0VYQ0VQVElP
TlMpCitzdGF0aWMgTWVzc2FnZVN0YXR1cyBzZW5kTWVzc2FnZU1hY2goVGhyZWFkJiB0aHJlYWQs
IGNvbnN0IFRocmVhZE1lc3NhZ2UmIG1lc3NhZ2UpCit7CisgICAgc3RhdGljIFN0YXRpY0xvY2sg
bWVzc2FnZUxvY2s7CisgICAgYXV0byBsb2NraG9sZGVyID0gaG9sZExvY2sobWVzc2FnZUxvY2sp
OworCisgICAgYXV0byByZXN1bHQgPSB0aHJlYWQuc3VzcGVuZCgpOworICAgIGlmICghcmVzdWx0
KQorICAgICAgICByZXR1cm4gTWVzc2FnZVN0YXR1czo6VGhyZWFkRXhpdGVkOworCisjaWYgQ1BV
KFg4NikKKyAgICB1bnNpZ25lZCB1c2VyQ291bnQgPSBzaXplb2YoUGxhdGZvcm1SZWdpc3RlcnMp
IC8gc2l6ZW9mKGludCk7CisgICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IGkzODZf
VEhSRUFEX1NUQVRFOworI2VsaWYgQ1BVKFg4Nl82NCkKKyAgICB1bnNpZ25lZCB1c2VyQ291bnQg
PSB4ODZfVEhSRUFEX1NUQVRFNjRfQ09VTlQ7CisgICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZs
YXZvciA9IHg4Nl9USFJFQURfU1RBVEU2NDsKKyNlbGlmIENQVShBUk0pCisgICAgdW5zaWduZWQg
dXNlckNvdW50ID0gQVJNX1RIUkVBRF9TVEFURV9DT1VOVDsKKyAgICB0aHJlYWRfc3RhdGVfZmxh
dm9yX3QgZmxhdm9yID0gQVJNX1RIUkVBRF9TVEFURTsKKyNlbGlmIENQVShBUk02NCkKKyAgICB1
bnNpZ25lZCB1c2VyQ291bnQgPSBBUk1fVEhSRUFEX1NUQVRFNjRfQ09VTlQ7CisgICAgdGhyZWFk
X3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IEFSTV9USFJFQURfU1RBVEU2NDsKKyNlbHNlCisjZXJy
b3IgVW5rbm93biBBcmNoaXRlY3R1cmUKKyNlbmRpZgorCisgICAgUGxhdGZvcm1SZWdpc3RlcnMg
cmVnaXN0ZXJzOworICAgIHRocmVhZF9zdGF0ZV90IHN0YXRlID0gcmVpbnRlcnByZXRfY2FzdDx0
aHJlYWRfc3RhdGVfdD4oJnJlZ2lzdGVycyk7CisgICAgdGhyZWFkX2dldF9zdGF0ZSh0aHJlYWQu
bWFjaFRocmVhZCgpLCBmbGF2b3IsIHN0YXRlLCAmdXNlckNvdW50KTsKKworICAgIG1lc3NhZ2Uo
cmVnaXN0ZXJzKTsKKworICAgIHRocmVhZF9zZXRfc3RhdGUodGhyZWFkLm1hY2hUaHJlYWQoKSwg
Zmxhdm9yLCAodGhyZWFkX3N0YXRlX3QpJnJlZ2lzdGVycywgdXNlckNvdW50KTsKKworICAgIHRo
cmVhZC5yZXN1bWUoKTsKKyAgICByZXR1cm4gTWVzc2FnZVN0YXR1czo6TWVzc2FnZVJhbjsKK30K
Kworc3RhdGljIGJvb2wgdXNlTWFjaCA9IGZhbHNlOwordm9pZCBkZWxpdmVyTWVzc2FnZXNVc2lu
Z01hY2goKSB7IHVzZU1hY2ggPSB0cnVlOyB9CisKKyNlbmRpZiAvLyBIQVZFKE1BQ0hfRVhDRVBU
SU9OUykKKworTWVzc2FnZVN0YXR1cyBzZW5kTWVzc2FnZVNjb3BlZChUaHJlYWQmIHRocmVhZCwg
Y29uc3QgVGhyZWFkTWVzc2FnZSYgbWVzc2FnZSkKK3sKKyNpZiBIQVZFKE1BQ0hfRVhDRVBUSU9O
UykKKyAgICBpZiAodXNlTWFjaCkKKyAgICAgICAgcmV0dXJuIHNlbmRNZXNzYWdlTWFjaCh0aHJl
YWQsIG1lc3NhZ2UpOworI2VuZGlmCisgICAgcmV0dXJuIHNlbmRNZXNzYWdlU2lnbmFsKHRocmVh
ZCwgbWVzc2FnZSk7CisgICAgcmV0dXJuIE1lc3NhZ2VTdGF0dXM6OlRocmVhZEV4aXRlZDsKK30K
KworCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogI2VuZGlmIC8vIFVTRShQVEhSRUFEUykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZE1lc3NhZ2UuaCBiL1NvdXJjZS9XVEYvd3RmL1Ro
cmVhZE1lc3NhZ2UuaAppbmRleCA5YWU1M2YyOWNmN2U4ZmIwMGVmOTIxMWQxNmNlMmNkZWQ2MDNl
YzFiLi4zMDA0NzJiM2U3MWM0MmVjODk4NzRhM2RlMGZmMzc2MWNhOTY5MTBjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRNZXNzYWdlLmgKKysrIGIvU291cmNlL1dURi93dGYvVGhy
ZWFkTWVzc2FnZS5oCkBAIC0zNiw3ICszNiw3IEBAIG5hbWVzcGFjZSBXVEYgewogdm9pZCBpbml0
aWFsaXplVGhyZWFkTWVzc2FnZXMoKTsKIAogY2xhc3MgVGhyZWFkTWVzc2FnZURhdGE7Ci11c2lu
ZyBUaHJlYWRNZXNzYWdlID0gU2NvcGVkTGFtYmRhPHZvaWQoc2lnaW5mb190KiwgdWNvbnRleHRf
dCopPjsKK3VzaW5nIFRocmVhZE1lc3NhZ2UgPSBTY29wZWRMYW1iZGE8dm9pZChQbGF0Zm9ybVJl
Z2lzdGVycyYpPjsKIAogZW51bSBjbGFzcyBNZXNzYWdlU3RhdHVzIHsKICAgICBNZXNzYWdlUmFu
LApAQCAtNTEsMTAgKzUxLDE0IEBAIE1lc3NhZ2VTdGF0dXMgc2VuZE1lc3NhZ2VTY29wZWQoVGhy
ZWFkJiwgY29uc3QgVGhyZWFkTWVzc2FnZSYpOwogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4K
IE1lc3NhZ2VTdGF0dXMgc2VuZE1lc3NhZ2UoVGhyZWFkJiB0YXJnZXRUaHJlYWQsIGNvbnN0IEZ1
bmN0b3ImIGZ1bmMpCiB7Ci0gICAgYXV0byBsYW1iZGEgPSBzY29wZWRMYW1iZGFSZWY8dm9pZChz
aWdpbmZvX3QqLCB1Y29udGV4dF90Kik+KGZ1bmMpOworICAgIGF1dG8gbGFtYmRhID0gc2NvcGVk
TGFtYmRhUmVmPHZvaWQoUGxhdGZvcm1SZWdpc3RlcnMmKT4oZnVuYyk7CiAgICAgcmV0dXJuIHNl
bmRNZXNzYWdlU2NvcGVkKHRhcmdldFRocmVhZCwgbGFtYmRhKTsKIH0KIAorI2lmIEhBVkUoTUFD
SF9FWENFUFRJT05TKQordm9pZCBkZWxpdmVyTWVzc2FnZXNVc2luZ01hY2goKTsKKyNlbmRpZgor
CiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjpzZW5kTWVzc2FnZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5oIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5n
LmgKaW5kZXggZDJlNTM2ZGY3YTg2OTZkOGU2Yjk1YmE0M2UxNzNkM2I1NTBiZjE2YS4uMzUxNGU4
YzA5ZjBmYzk0ZDUzNGJlMmYzYjZlN2M0OTUwZTBiY2YwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvVGhyZWFkaW5nLmgKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmgKQEAgLTEz
OCw2ICsxMzgsMTAgQEAgcHVibGljOgogCiAjaWYgVVNFKFBUSFJFQURTKQogICAgIExvY2tsZXNz
QmFnPFRocmVhZE1lc3NhZ2VEYXRhKj4mIHRocmVhZE1lc3NhZ2VzKCkgeyByZXR1cm4gbV90aHJl
YWRNZXNzYWdlczsgfQorCisjaWYgT1MoREFSV0lOKQorICAgIG1hY2hfcG9ydF90IG1hY2hUaHJl
YWQoKSB7IHJldHVybiBtX3BsYXRmb3JtVGhyZWFkOyB9CisjZW5kaWYKICNlbmRpZgogCiBwcm90
ZWN0ZWQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9tYWMvTWFjaEV4Y2VwdGlvbnMuZGVm
cyBiL1NvdXJjZS9XVEYvd3RmL21hYy9NYWNoRXhjZXB0aW9ucy5kZWZzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQy
MDU3NDJhNGVkNTAwZjgwNjRmZWViNDk1NWE3Yzk3MGQ5OWFmMGIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9tYWMvTWFjaEV4Y2VwdGlvbnMuZGVmcwpAQCAtMCwwICsxLDI2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
PG1hY2gvbWFjaF9leGMuZGVmcz4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RocmVhZHMv
U2lnbmFscy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi90aHJlYWRzL1NpZ25hbHMuY3BwCmluZGV4IDg1
NWIyOGIzMTcyMTcyN2NmMWY0MzFhOTE4YTI1MWRjMmU2YTNkZmMuLjdmZWY2NTUyMGVjMzQ1MmU4
YjliOWI1YzNkMWQzMTg4YzY1OGJhMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RocmVh
ZHMvU2lnbmFscy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdGhyZWFkcy9TaWduYWxzLmNwcApA
QCAtMjgsMjEgKzI4LDI2NCBAQAogCiAjaWYgVVNFKFBUSFJFQURTKQogCisjaWYgSEFWRShNQUNI
X0VYQ0VQVElPTlMpCitleHRlcm4gIkMiIHsKKyNpbmNsdWRlICJNYWNoRXhjZXB0aW9uc1NlcnZl
ci5oIgorfTsKKyNlbmRpZgorCiAjaW5jbHVkZSA8Y3N0ZGlvPgogI2luY2x1ZGUgPG11dGV4Pgog
I2luY2x1ZGUgPHNpZ25hbC5oPgorCisjaWYgSEFWRShNQUNIX0VYQ0VQVElPTlMpCisjaW5jbHVk
ZSA8bWFjaC9tYWNoLmg+CisjaW5jbHVkZSA8bWFjaC90aHJlYWRfYWN0Lmg+CisjZW5kaWYKKwog
I2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CiAjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KKyNpbmNs
dWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9Mb2NrbGVzc0JhZy5oPgogI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRNZXNzYWdlLmg+
CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCiAKIG5hbWVzcGFjZSBXVEYgewogCisgICAg
CiBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPExvY2tsZXNzQmFnPFNpZ25hbEhhbmRsZXI+PiBo
YW5kbGVyc1tzdGF0aWNfY2FzdDxzaXplX3Q+KFNpZ25hbDo6TnVtYmVyT2ZTaWduYWxzKV0gPSB7
IH07Ci1zdGF0aWMgc3RydWN0IHNpZ2FjdGlvbiBvbGRBY3Rpb25zW3N0YXRpY19jYXN0PHNpemVf
dD4oU2lnbmFsOjpOdW1iZXJPZlNpZ25hbHMpXTsKIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBpbml0
aWFsaXplT25jZUZsYWdzW3N0YXRpY19jYXN0PHNpemVfdD4oU2lnbmFsOjpOdW1iZXJPZlNpZ25h
bHMpXTsKK3N0YXRpYyBzdHJ1Y3Qgc2lnYWN0aW9uIG9sZEFjdGlvbnNbc3RhdGljX2Nhc3Q8c2l6
ZV90PihTaWduYWw6Ok51bWJlck9mU2lnbmFscyldOworCisjaWYgSEFWRShNQUNIX0VYQ0VQVElP
TlMpCitzdGF0aWMgbWFjaF9wb3J0X3QgZXhjZXB0aW9uUG9ydDsKK3N0YXRpYyBjb25zdGV4cHIg
c2l6ZV90IG1heE1lc3NhZ2VTaXplID0gMSAqIEtCOworCitzdGF0aWMgdm9pZCBzdGFydE1hY2hF
eGNlcHRpb25IYW5kbGVyVGhyZWFkKCkKK3sKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25j
ZTsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlLCBbXSB7CisgICAgICAgIGlmIChtYWNoX3BvcnRf
YWxsb2NhdGUobWFjaF90YXNrX3NlbGYoKSwgTUFDSF9QT1JUX1JJR0hUX1JFQ0VJVkUsICZleGNl
cHRpb25Qb3J0KSAhPSBLRVJOX1NVQ0NFU1MpCisgICAgICAgICAgICBDUkFTSCgpOworCisgICAg
ICAgIGlmIChtYWNoX3BvcnRfaW5zZXJ0X3JpZ2h0KG1hY2hfdGFza19zZWxmKCksIGV4Y2VwdGlv
blBvcnQsIGV4Y2VwdGlvblBvcnQsIE1BQ0hfTVNHX1RZUEVfTUFLRV9TRU5EKSE9IEtFUk5fU1VD
Q0VTUykKKyAgICAgICAgICAgIENSQVNIKCk7CisKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hv
dWxkIHVzZSBhIGRpc3BhdGNoIHF1ZXVlLgorICAgICAgICAodm9pZClUaHJlYWQ6OmNyZWF0ZSgK
KyAgICAgICAgICAgICJXVEYgTWFjaCBFeGNlcHRpb24gVGhyZWFkIiwgW10gKCkgeworICAgICAg
ICAgICAgICAgIHVuaW9uIE1lc3NhZ2UgeworICAgICAgICAgICAgICAgICAgICBtYWNoX21zZ19o
ZWFkZXJfdCBoZWFkZXI7CisgICAgICAgICAgICAgICAgICAgIGNoYXIgZGF0YVttYXhNZXNzYWdl
U2l6ZV07CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICBNZXNzYWdlIG1lc3Nh
Z2VIZWFkZXJJbjsKKyAgICAgICAgICAgICAgICBNZXNzYWdlIG1lc3NhZ2VIZWFkZXJPdXQ7CisK
KyAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgICAgICAgICBrZXJu
X3JldHVybl90IG1lc3NhZ2VSZXN1bHQgPSBtYWNoX21zZygmbWVzc2FnZUhlYWRlckluLmhlYWRl
ciwgTUFDSF9SQ1ZfTVNHLCAwLCBtYXhNZXNzYWdlU2l6ZSwgZXhjZXB0aW9uUG9ydCwgTUFDSF9N
U0dfVElNRU9VVF9OT05FLCBNQUNIX1BPUlRfTlVMTCk7CisgICAgICAgICAgICAgICAgICAgIGlm
IChtZXNzYWdlUmVzdWx0ID09IEtFUk5fU1VDQ0VTUykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFtYWNoX2V4Y19zZXJ2ZXIoJm1lc3NhZ2VIZWFkZXJJbi5oZWFkZXIsICZtZXNzYWdl
SGVhZGVyT3V0LmhlYWRlcikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1JBU0goKTsK
KworICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZVJlc3VsdCA9IG1hY2hfbXNnKCZtZXNz
YWdlSGVhZGVyT3V0LmhlYWRlciwgTUFDSF9TRU5EX01TRywgbWVzc2FnZUhlYWRlck91dC5oZWFk
ZXIubXNnaF9zaXplLCAwLCBtZXNzYWdlSGVhZGVyT3V0LmhlYWRlci5tc2doX2xvY2FsX3BvcnQs
IDAsIE1BQ0hfUE9SVF9OVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKG1lc3NhZ2VSZXN1bHQgPT0gS0VSTl9TVUNDRVNTKTsKKyAgICAgICAgICAgICAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4oIkZhaWxlZCB0byByZWNl
aXZlIG1hY2ggbWVzc2FnZSBkdWUgdG8gIiwgbWFjaF9lcnJvcl9zdHJpbmcobWVzc2FnZVJlc3Vs
dCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfSkubGVha1JlZigpOworICAgIH0pOwor
fQorCitzdGF0aWMgU2lnbmFsIGZyb21NYWNoRXhjZXB0aW9uKGV4Y2VwdGlvbl90eXBlX3QgdHlw
ZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEVYQ19CQURfQUNDRVNTOiByZXR1
cm4gU2lnbmFsOjpTZWdWOworICAgIGNhc2UgRVhDX0JBRF9JTlNUUlVDVElPTjogcmV0dXJuIFNp
Z25hbDo6SWxsOworICAgIGNhc2UgRVhDX0JSRUFLUE9JTlQ6IHJldHVybiBTaWduYWw6OlRyYXA7
CisgICAgZGVmYXVsdDogYnJlYWs7CisgICAgfQorICAgIHJldHVybiBTaWduYWw6OlVua25vd247
Cit9CisKK3N0YXRpYyBleGNlcHRpb25fbWFza190IHRvTWFjaE1hc2soU2lnbmFsIHNpZ25hbCkK
K3sKKyAgICBzd2l0Y2ggKHNpZ25hbCkgeworICAgIGNhc2UgU2lnbmFsOjpTZWdWOiByZXR1cm4g
RVhDX01BU0tfQkFEX0FDQ0VTUzsKKyAgICBjYXNlIFNpZ25hbDo6SWxsOiByZXR1cm4gRVhDX01B
U0tfQkFEX0lOU1RSVUNUSU9OOworICAgIGNhc2UgU2lnbmFsOjpUcmFwOiByZXR1cm4gRVhDX01B
U0tfQlJFQUtQT0lOVDsKKyAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworZXh0ZXJuICJDIiB7CisKKy8vIFdlIG5lZWQgdG8g
aW1wbGVtZW50IHN0dWJzIGZvciBjYXRjaF9tYWNoX2V4Y2VwdGlvbl9yYWlzZSBhbmQgY2F0Y2hf
bWFjaF9leGNlcHRpb25fcmFpc2Vfc3RhdGVfaWRlbnRpdHkuCisvLyBUaGUgTWlHIGdlbmVyYXRl
ZCBmaWxlIHdpbGwgZmFpbCB0byBsaW5rIG90aGVyd2lzZSwgZXZlbiB0aG91Z2ggd2UgZG9uJ3Qg
dXNlIHRoZSBmdW5jdGlvbnMuIE9ubHkgdGhlCisvLyBjYXRjaF9tYWNoX2V4Y2VwdGlvbl9yYWlz
ZV9zdGF0ZSBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGJlY2F1c2Ugd2UgcGFzcyBFWENFUFRJ
T05fU1RBVEUgdG8KKy8vIHRocmVhZF9zZXRfZXhjZXB0aW9uX3BvcnRzLgora2Vybl9yZXR1cm5f
dCBjYXRjaF9tYWNoX2V4Y2VwdGlvbl9yYWlzZShtYWNoX3BvcnRfdCwgbWFjaF9wb3J0X3QsIG1h
Y2hfcG9ydF90LCBleGNlcHRpb25fdHlwZV90LCBtYWNoX2V4Y2VwdGlvbl9kYXRhX3QsIG1hY2hf
bXNnX3R5cGVfbnVtYmVyX3QpCit7CisgICAgZGF0YUxvZ0xuKCJXZSBzaG91bGQgbm90IGhhdmUg
Y2FsbGVkIGNhdGNoX2V4Y2VwdGlvbl9yYWlzZSgpLCBwbGVhc2UgZmlsZSBhIGJ1ZyBhdCBidWdz
LndlYmtpdC5vcmciKTsKKyAgICByZXR1cm4gS0VSTl9GQUlMVVJFOworfQorCitrZXJuX3JldHVy
bl90IGNhdGNoX21hY2hfZXhjZXB0aW9uX3JhaXNlX3N0YXRlX2lkZW50aXR5KG1hY2hfcG9ydF90
LCBtYWNoX3BvcnRfdCwgbWFjaF9wb3J0X3QsIGV4Y2VwdGlvbl90eXBlX3QsIG1hY2hfZXhjZXB0
aW9uX2RhdGFfdCwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCwgaW50KiwgdGhyZWFkX3N0YXRlX3Qs
IG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QsIHRocmVhZF9zdGF0ZV90LCAgbWFjaF9tc2dfdHlwZV9u
dW1iZXJfdCopCit7CisgICAgZGF0YUxvZ0xuKCJXZSBzaG91bGQgbm90IGhhdmUgY2FsbGVkIGNh
dGNoX21hY2hfZXhjZXB0aW9uX3JhaXNlX3N0YXRlX2lkZW50aXR5LCBwbGVhc2UgZmlsZSBhIGJ1
ZyBhdCBidWdzLndlYmtpdC5vcmciKTsKKyAgICByZXR1cm4gS0VSTl9GQUlMVVJFOworfQorCitr
ZXJuX3JldHVybl90IGNhdGNoX21hY2hfZXhjZXB0aW9uX3JhaXNlX3N0YXRlKAorICAgIG1hY2hf
cG9ydF90IHBvcnQsCisgICAgZXhjZXB0aW9uX3R5cGVfdCBleGNlcHRpb25UeXBlLAorICAgIGNv
bnN0IG1hY2hfZXhjZXB0aW9uX2RhdGFfdCBleGNlcHRpb25EYXRhLAorICAgIG1hY2hfbXNnX3R5
cGVfbnVtYmVyX3QgZGF0YUNvdW50LAorICAgIGludCogc3RhdGVGbGF2b3IsCisgICAgY29uc3Qg
dGhyZWFkX3N0YXRlX3QgaW5TdGF0ZSwKKyAgICBtYWNoX21zZ190eXBlX251bWJlcl90IGluU3Rh
dGVDb3VudCwKKyAgICB0aHJlYWRfc3RhdGVfdCBvdXRTdGF0ZSwKKyAgICBtYWNoX21zZ190eXBl
X251bWJlcl90KiBvdXRTdGF0ZUNvdW50KQoreworICAgIFJFTEVBU0VfQVNTRVJUKHBvcnQgPT0g
ZXhjZXB0aW9uUG9ydCk7CisgICAgU2lnbmFsIHNpZ25hbCA9IGZyb21NYWNoRXhjZXB0aW9uKGV4
Y2VwdGlvblR5cGUpOworICAgIGRhdGFMb2dMbigicmVjZWl2ZWRTaWduYWwgIiwgZXhjZXB0aW9u
VHlwZSk7CisgICAgZGF0YUxvZ0xuKCJUaHJlYWQ6ICIsIGV4Y2VwdGlvbkRhdGFbMF0pOworICAg
IFJFTEVBU0VfQVNTRVJUKHNpZ25hbCAhPSBTaWduYWw6OlVua25vd24pOworCisgICAgbWVtY3B5
KG91dFN0YXRlLCBpblN0YXRlLCBpblN0YXRlQ291bnQgKiBzaXplb2YoaW5TdGF0ZVswXSkpOwor
ICAgICpvdXRTdGF0ZUNvdW50ID0gaW5TdGF0ZUNvdW50OworCisjaWYgQ1BVKFg4Nl82NCkKKyAg
ICBSRUxFQVNFX0FTU0VSVCgqc3RhdGVGbGF2b3IgPT0geDg2X1RIUkVBRF9TVEFURSk7CisgICAg
UGxhdGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8eDg2X3RocmVh
ZF9zdGF0ZV90Kj4ob3V0U3RhdGUpLT51dHMudHM2NDsKKyNlbGlmIENQVShYODYpCisgICAgUkVM
RUFTRV9BU1NFUlQoKnN0YXRlRmxhdm9yID09IHg4Nl9USFJFQURfU1RBVEUpOworICAgIFBsYXRm
b3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMgPSByZWludGVycHJldF9jYXN0PHg4Nl90aHJlYWRfc3Rh
dGVfdCo+KG91dFN0YXRlKS0+dXRzLnRzMzI7CisjZWxpZiBDUFUoQVJNNjQpCisgICAgUkVMRUFT
RV9BU1NFUlQoKnN0YXRlRmxhdm9yID09IEFSTV9USFJFQURfU1RBVEUpOworICAgIFBsYXRmb3Jt
UmVnaXN0ZXJzJiByZWdpc3RlcnMgPSByZWludGVycHJldF9jYXN0PGFybV91bmlmaWVkX3RocmVh
ZF9zdGF0ZSo+KG91dFN0YXRlKS0+dHNfNjQ7CisjZWxpZiBDUFUoQVJNKQorICAgIFJFTEVBU0Vf
QVNTRVJUKCpzdGF0ZUZsYXZvciA9PSBBUk1fVEhSRUFEX1NUQVRFKTsKKyAgICBQbGF0Zm9ybVJl
Z2lzdGVycyYgcmVnaXN0ZXJzID0gcmVpbnRlcnByZXRfY2FzdDxhcm1fdW5pZmllZF90aHJlYWRf
c3RhdGUqPihvdXRTdGF0ZSktPnRzXzMyOworI2VuZGlmCisKKyAgICBTaWdJbmZvIGluZm87Cisg
ICAgaWYgKHNpZ25hbCA9PSBTaWduYWw6OlNlZ1YpIHsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChk
YXRhQ291bnQsIGRhdGFDb3VudCA9PSAyKTsKKyAgICAgICAgaW5mby5mYXVsdGluZ0FkZHJlc3Mg
PSByZWludGVycHJldF9jYXN0PHZvaWQqPihleGNlcHRpb25EYXRhWzFdKTsKKyAgICB9CisKKyAg
ICBib29sIGRpZEhhbmRsZSA9IGZhbHNlOworICAgIGhhbmRsZXJzW3N0YXRpY19jYXN0PHNpemVf
dD4oc2lnbmFsKV0tPml0ZXJhdGUoWyZdIChjb25zdCBTaWduYWxIYW5kbGVyJiBoYW5kbGVyKSB7
CisgICAgICAgIFNpZ25hbEFjdGlvbiBoYW5kbGVyUmVzdWx0ID0gaGFuZGxlcihzaWduYWwsIGlu
Zm8sIHJlZ2lzdGVycyk7CisgICAgICAgIGRhdGFMb2dMbihzdGF0aWNfY2FzdDxpbnQ+KGhhbmRs
ZXJSZXN1bHQpKTsKKyAgICAgICAgc3dpdGNoIChoYW5kbGVyUmVzdWx0KSB7CisgICAgICAgIGNh
c2UgU2lnbmFsQWN0aW9uOjpIYW5kbGVkOgorICAgICAgICAgICAgZGlkSGFuZGxlID0gdHJ1ZTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICB9KTsKKworICAgIGlmIChkaWRIYW5kbGUpCisgICAgICAgIHJldHVy
biBLRVJOX1NVQ0NFU1M7CisgICAgcmV0dXJuIEtFUk5fRkFJTFVSRTsKK30KKworfTsKKworc3Rh
dGljIGJvb2wgdXNlTWFjaCB7IGZhbHNlIH07Cit2b2lkIGhhbmRsZVNpZ25hbHNXaXRoTWFjaCgp
Cit7CisgICAgZGVsaXZlck1lc3NhZ2VzVXNpbmdNYWNoKCk7CisgICAgdXNlTWFjaCA9IHRydWU7
Cit9CisKKworc3RhdGljIFN0YXRpY0xvY2sgdGhyZWFkTG9jazsKK2V4Y2VwdGlvbl9tYXNrX3Qg
YWN0aXZlRXhjZXB0aW9ucyB7IDAgfTsKKworaW5saW5lIHZvaWQgc2V0RXhjZXB0aW9uUG9ydHMo
Y29uc3QgQWJzdHJhY3RMb2NrZXImLCBUaHJlYWQqIHRocmVhZCkKK3sKKyAgICBrZXJuX3JldHVy
bl90IHJlc3VsdCA9IHRocmVhZF9zZXRfZXhjZXB0aW9uX3BvcnRzKHRocmVhZC0+bWFjaFRocmVh
ZCgpLCBhY3RpdmVFeGNlcHRpb25zLCBleGNlcHRpb25Qb3J0LCBFWENFUFRJT05fU1RBVEUgfCBN
QUNIX0VYQ0VQVElPTl9DT0RFUywgTUFDSElORV9USFJFQURfU1RBVEUpOworICAgIGlmIChyZXN1
bHQgIT0gS0VSTl9TVUNDRVNTKSB7CisgICAgICAgIGRhdGFMb2dMbigidGhyZWFkIHNldCBwb3J0
IGZhaWxlZCBkdWUgdG8gIiwgbWFjaF9lcnJvcl9zdHJpbmcocmVzdWx0KSk7CisgICAgICAgIENS
QVNIKCk7CisgICAgfQorfQorCitpbmxpbmUgSGFzaFNldDxUaHJlYWQqPiYgYWN0aXZlVGhyZWFk
cyhjb25zdCBBYnN0cmFjdExvY2tlciYpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhh
c2hTZXQ8VGhyZWFkKj4+IGFjdGl2ZVRocmVhZHM7CisgICAgcmV0dXJuIGFjdGl2ZVRocmVhZHM7
Cit9CisKK3ZvaWQgcmVnaXN0ZXJUaHJlYWQoVGhyZWFkKiB0aHJlYWQpCit7CisgICAgYXV0byBs
b2NrZXIgPSBob2xkTG9jayh0aHJlYWRMb2NrKTsKKyAgICBhdXRvIHJlc3VsdCA9IGFjdGl2ZVRo
cmVhZHMobG9ja2VyKS5hZGQodGhyZWFkKTsKKworICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkK
KyAgICAgICAgc2V0RXhjZXB0aW9uUG9ydHMobG9ja2VyLCB0aHJlYWQpOworfQorCit2b2lkIHJl
bW92ZVRocmVhZChUaHJlYWQqIHRocmVhZCkKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KHRocmVhZExvY2spOworICAgIGFjdGl2ZVRocmVhZHMobG9ja2VyKS5yZW1vdmUodGhyZWFkKTsK
K30KIAotc3RhdGljIHZvaWQganNjU2lnbmFsSGFuZGxlcihpbnQgc2lnLCBzaWdpbmZvX3QqIGlu
Zm8sIHZvaWQqIG1jb250ZXh0KQorI2Vsc2UKK3N0YXRpYyBjb25zdGV4cHIgYm9vbCB1c2VNYWNo
ID0gZmFsc2U7CisjZW5kaWYgLy8gSEFWRShNQUNIX0VYQ0VQVElPTlMpCisKK3N0YXRpYyB2b2lk
IGpzY1NpZ25hbEhhbmRsZXIoaW50LCBzaWdpbmZvX3QqLCB2b2lkKik7CisKK3ZvaWQgaW5zdGFs
bFNpZ25hbEhhbmRsZXIoU2lnbmFsIHNpZ25hbCwgU2lnbmFsSGFuZGxlciYmIGhhbmRsZXIpCit7
CisgICAgQVNTRVJUKHNpZ25hbCA8IFNpZ25hbDo6VW5rbm93bik7CisjaWYgSEFWRShNQUNIX0VY
Q0VQVElPTlMpCisgICAgaWYgKHNpZ25hbCA9PSBTaWduYWw6OkJ1cyAmJiB1c2VNYWNoKQorICAg
ICAgICByZXR1cm47CisgICAgQVNTRVJUKCF1c2VNYWNoIHx8IHNpZ25hbCAhPSBTaWduYWw6OlVz
cik7CisKKyAgICBpZiAodXNlTWFjaCkKKyAgICAgICAgc3RhcnRNYWNoRXhjZXB0aW9uSGFuZGxl
clRocmVhZCgpOworI2VuZGlmCisKKyAgICBzdGQ6OmNhbGxfb25jZShpbml0aWFsaXplT25jZUZs
YWdzW3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0sIFsmXSB7CisgICAgICAgIGhhbmRsZXJz
W3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0uY29uc3RydWN0KCk7CisKKyAgICAgICAgaWYg
KCF1c2VNYWNoKSB7CisgICAgICAgICAgICBzdHJ1Y3Qgc2lnYWN0aW9uIGFjdGlvbjsKKyAgICAg
ICAgICAgIGFjdGlvbi5zYV9zaWdhY3Rpb24gPSBqc2NTaWduYWxIYW5kbGVyOworICAgICAgICAg
ICAgYXV0byByZXN1bHQgPSBzaWdmaWxsc2V0KCZhY3Rpb24uc2FfbWFzayk7CisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVCghcmVzdWx0KTsKKyAgICAgICAgICAgIGFjdGlvbi5zYV9mbGFncyA9
IFNBX1NJR0lORk87CisgICAgICAgICAgICByZXN1bHQgPSBzaWdhY3Rpb24odG9TeXN0ZW1TaWdu
YWwoc2lnbmFsKSwgJmFjdGlvbiwgJm9sZEFjdGlvbnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzaWdu
YWwpXSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmVzdWx0KTsKKyAgICAgICAgfQor
CisgICAgfSk7CisKKyAgICBoYW5kbGVyc1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNpZ25hbCldLT5h
ZGQoV1RGTW92ZShoYW5kbGVyKSk7CisKKyNpZiBIQVZFKE1BQ0hfRVhDRVBUSU9OUykKKyAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKHRocmVhZExvY2spOworICAgIGlmICh1c2VNYWNoKSB7Cisg
ICAgICAgIGFjdGl2ZUV4Y2VwdGlvbnMgfD0gdG9NYWNoTWFzayhzaWduYWwpOworCisgICAgICAg
IGZvciAoVGhyZWFkKiB0aHJlYWQgOiBhY3RpdmVUaHJlYWRzKGxvY2tlcikpCisgICAgICAgICAg
ICBzZXRFeGNlcHRpb25Qb3J0cyhsb2NrZXIsIHRocmVhZCk7CisgICAgfQorI2VuZGlmCit9CisK
K3ZvaWQganNjU2lnbmFsSGFuZGxlcihpbnQgc2lnLCBzaWdpbmZvX3QqIGluZm8sIHZvaWQqIHVj
b250ZXh0KQogewogICAgIFNpZ25hbCBzaWduYWwgPSBmcm9tU3lzdGVtU2lnbmFsKHNpZyk7CiAK
QEAgLTYyLDEwICszMDUsMTYgQEAgc3RhdGljIHZvaWQganNjU2lnbmFsSGFuZGxlcihpbnQgc2ln
LCBzaWdpbmZvX3QqIGluZm8sIHZvaWQqIG1jb250ZXh0KQogICAgICAgICByZXR1cm47CiAgICAg
fQogCisgICAgU2lnSW5mbyBzaWdJbmZvOworICAgIGlmIChzaWduYWwgPT0gU2lnbmFsOjpTZWdW
IHx8IHNpZ25hbCA9PSBTaWduYWw6OkJ1cykKKyAgICAgICAgc2lnSW5mby5mYXVsdGluZ0FkZHJl
c3MgPSBpbmZvLT5zaV9hZGRyOworCisgICAgUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVycyA9
IHJlZ2lzdGVyc0Zyb21VQ29udGV4dChyZWludGVycHJldF9jYXN0PHVjb250ZXh0X3QqPih1Y29u
dGV4dCkpOworCiAgICAgYm9vbCBkaWRIYW5kbGUgPSBmYWxzZTsKICAgICBib29sIHJlc3RvcmVE
ZWZhdWx0SGFuZGxlciA9IGZhbHNlOwogICAgIGhhbmRsZXJzW3N0YXRpY19jYXN0PHNpemVfdD4o
c2lnbmFsKV0tPml0ZXJhdGUoWyZdIChjb25zdCBTaWduYWxIYW5kbGVyJiBoYW5kbGVyKSB7Ci0g
ICAgICAgIHN3aXRjaCAoaGFuZGxlcihzaWcsIGluZm8sIG1jb250ZXh0KSkgeworICAgICAgICBz
d2l0Y2ggKGhhbmRsZXIoc2lnbmFsLCBzaWdJbmZvLCByZWdpc3RlcnMpKSB7CiAgICAgICAgIGNh
c2UgU2lnbmFsQWN0aW9uOjpIYW5kbGVkOgogICAgICAgICAgICAgZGlkSGFuZGxlID0gdHJ1ZTsK
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtODUsMTMgKzMzNCwxMyBAQCBzdGF0aWMgdm9pZCBqc2NT
aWduYWxIYW5kbGVyKGludCBzaWcsIHNpZ2luZm9fdCogaW5mbywgdm9pZCogbWNvbnRleHQpCiAg
ICAgc3RydWN0IHNpZ2FjdGlvbiYgb2xkQWN0aW9uID0gb2xkQWN0aW9uc1tzdGF0aWNfY2FzdDxz
aXplX3Q+KHNpZ25hbCldOwogICAgIGlmIChzaWduYWwgPT0gU2lnbmFsOjpVc3IpIHsKICAgICAg
ICAgaWYgKG9sZEFjdGlvbi5zYV9zaWdhY3Rpb24pCi0gICAgICAgICAgICBvbGRBY3Rpb24uc2Ff
c2lnYWN0aW9uKHNpZywgaW5mbywgbWNvbnRleHQpOworICAgICAgICAgICAgb2xkQWN0aW9uLnNh
X3NpZ2FjdGlvbihzaWcsIGluZm8sIHVjb250ZXh0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAogICAgIGlmICghZGlkSGFuZGxlKSB7CiAgICAgICAgIGlmIChvbGRBY3Rpb24uc2Ffc2lnYWN0
aW9uKSB7Ci0gICAgICAgICAgICBvbGRBY3Rpb24uc2Ffc2lnYWN0aW9uKHNpZywgaW5mbywgbWNv
bnRleHQpOworICAgICAgICAgICAgb2xkQWN0aW9uLnNhX3NpZ2FjdGlvbihzaWcsIGluZm8sIHVj
b250ZXh0KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0xMDAsMjQgKzM0
OSw2IEBAIHN0YXRpYyB2b2lkIGpzY1NpZ25hbEhhbmRsZXIoaW50IHNpZywgc2lnaW5mb190KiBp
bmZvLCB2b2lkKiBtY29udGV4dCkKICAgICB9CiB9CiAKLXZvaWQgaW5zdGFsbFNpZ25hbEhhbmRs
ZXIoU2lnbmFsIHNpZ25hbCwgU2lnbmFsSGFuZGxlciYmIGhhbmRsZXIpCi17Ci0gICAgQVNTRVJU
KHNpZ25hbCA8IFNpZ25hbDo6VW5rbm93bik7Ci0gICAgc3RkOjpjYWxsX29uY2UoaW5pdGlhbGl6
ZU9uY2VGbGFnc1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNpZ25hbCldLCBbJl0gewotICAgICAgICBo
YW5kbGVyc1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNpZ25hbCldLmNvbnN0cnVjdCgpOwotCi0gICAg
ICAgIHN0cnVjdCBzaWdhY3Rpb24gYWN0aW9uOwotICAgICAgICBhY3Rpb24uc2Ffc2lnYWN0aW9u
ID0ganNjU2lnbmFsSGFuZGxlcjsKLSAgICAgICAgYXV0byByZXN1bHQgPSBzaWdmaWxsc2V0KCZh
Y3Rpb24uc2FfbWFzayk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFyZXN1bHQpOwotICAgICAg
ICBhY3Rpb24uc2FfZmxhZ3MgPSBTQV9TSUdJTkZPOwotICAgICAgICByZXN1bHQgPSBzaWdhY3Rp
b24odG9TeXN0ZW1TaWduYWwoc2lnbmFsKSwgJmFjdGlvbiwgJm9sZEFjdGlvbnNbc3RhdGljX2Nh
c3Q8c2l6ZV90PihzaWduYWwpXSk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFyZXN1bHQpOwot
ICAgIH0pOwotCi0gICAgaGFuZGxlcnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzaWduYWwpXS0+YWRk
KFdURk1vdmUoaGFuZGxlcikpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogI2VuZGlmIC8v
IFVTRShQVEhSRUFEUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RocmVhZHMvU2lnbmFs
cy5oIGIvU291cmNlL1dURi93dGYvdGhyZWFkcy9TaWduYWxzLmgKaW5kZXggMWU0ZWI0NmVhYTc3
NGExZWU4OWY2ZmIyZGFlZjMzMjY4Y2U1Njc3OS4uYWNhNmIzNGY4MTZmMDE3NjkzMDAzNmMxOGI4
MjFjMjdhYmIwZTYwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGhyZWFkcy9TaWduYWxz
LmgKKysrIGIvU291cmNlL1dURi93dGYvdGhyZWFkcy9TaWduYWxzLmgKQEAgLTI5LDYgKzI5LDcg
QEAKIAogI2luY2x1ZGUgPHNpZ25hbC5oPgogI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgorI2lu
Y2x1ZGUgPHd0Zi9QbGF0Zm9ybVJlZ2lzdGVycy5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIApAQCAt
NzksNyArODAsMTEgQEAgZW51bSBjbGFzcyBTaWduYWxBY3Rpb24gewogICAgIEZvcmNlRGVmYXVs
dAogfTsKIAotdXNpbmcgU2lnbmFsSGFuZGxlciA9IEZ1bmN0aW9uPFNpZ25hbEFjdGlvbihpbnQs
IHNpZ2luZm9fdCosIHZvaWQqKT47CitzdHJ1Y3QgU2lnSW5mbyB7CisgICAgdm9pZCogZmF1bHRp
bmdBZGRyZXNzIHsgMCB9OworfTsKKwordXNpbmcgU2lnbmFsSGFuZGxlciA9IEZ1bmN0aW9uPFNp
Z25hbEFjdGlvbihTaWduYWwsIFNpZ0luZm8mLCBQbGF0Zm9ybVJlZ2lzdGVycyYpPjsKIAogLy8g
Q2FsbCB0aGlzIG1ldGhvZCB3aGVuZXZlciB5b3Ugd2FudCB0byBpbnN0YWxsIGEgc2lnbmFsIGhh
bmRsZXIuIEl0J3Mgb2sgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIGxhemlseS4KIC8vIE5vdGU6IFlv
dXIgc2lnbmFsIGhhbmRsZXIgd2lsbCBiZSBjYWxsZWQgZXZlcnkgdGltZSB0aGUgaGFuZGxlciBm
b3IgdGhlIGRlc2lyZWQgc2lnbmFsIGlzIGNhbGxlZC4KQEAgLTg3LDkgKzkyLDE5IEBAIHVzaW5n
IFNpZ25hbEhhbmRsZXIgPSBGdW5jdGlvbjxTaWduYWxBY3Rpb24oaW50LCBzaWdpbmZvX3QqLCB2
b2lkKik+OwogLy8gVGhpcyBmdW5jdGlvbiBpcyBjdXJyZW50bHkgYSBvbmUgd2F5IHN0cmVldCBp
LmUuIG9uY2UgaW5zdGFsbGVkLCBhIHNpZ25hbCBoYW5kbGVyIGNhbm5vdCBiZSB1bmluc3RhbGxl
ZC4KIHZvaWQgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFsLCBTaWduYWxIYW5kbGVyJiYpOwog
CisKKyNpZiBIQVZFKE1BQ0hfRVhDRVBUSU9OUykKK2NsYXNzIFRocmVhZDsKK3ZvaWQgcmVnaXN0
ZXJUaHJlYWQoVGhyZWFkKik7Cit2b2lkIHJlbW92ZVRocmVhZChUaHJlYWQqKTsKKwordm9pZCBo
YW5kbGVTaWduYWxzV2l0aE1hY2goKTsKKyNlbmRpZiAvLyBIQVZFKE1BQ0hfRVhDRVBUSU9OUykK
KwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIHVzaW5nIFdURjo6U2lnbmFsOwordXNpbmcgV1RGOjpT
aWdJbmZvOwogdXNpbmcgV1RGOjp0b1N5c3RlbVNpZ25hbDsKIHVzaW5nIFdURjo6ZnJvbVN5c3Rl
bVNpZ25hbDsKIHVzaW5nIFdURjo6U2lnbmFsQWN0aW9uOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hh
bmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDE3ZjlmMDExMTMxMDJhOGE0YjE3ZmNlNGFm
MWQ5NWViODYwMDY5ZGIuLjZjZGE0ODQxMDY1Y2UwNGE5MWI4ZGI1ZTJiMjAyOGM0MGVjMDVhNmYg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNCBAQAorMjAxNy0wNS0xMSAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBVc2UgTWFjaCBleGNlcHRpb25zIGluc3RlYWQgb2Ygc2lnbmFscyB3
aGVyZSBwb3NzaWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTcxODY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9UaHJlYWRNZXNzYWdlcy5jcHA6CisgICAg
ICAgIChydW5UaHJlYWRNZXNzYWdlVGVzdCk6CisgICAgICAgIChURVNUKToKKwogMjAxNy0wNS0w
OSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJlbW92ZSBzdXBwb3J0
IGZvciBsZWdhY3kgTm90aWZpY2F0aW9ucwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XVEYvVGhyZWFkTWVzc2FnZXMuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XVEYvVGhyZWFkTWVzc2FnZXMuY3BwCmluZGV4IGQ2M2U5YmYxZTc1MDY4YjZjMWE3ZTdlNmU4
YjY3YzRlYjA1MTU4ODIuLmU2YTU3ODk0YmI1MTZmZTFjZTcxM2QwN2JmMThmMDcwNmVmYTkzN2Mg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1RocmVhZE1lc3NhZ2Vz
LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9UaHJlYWRNZXNzYWdlcy5j
cHAKQEAgLTUwLDcgKzUwLDcgQEAgc3RhdGljIHZvaWQgcnVuVGhyZWFkTWVzc2FnZVRlc3QodW5z
aWduZWQgbnVtU2VuZGVycywgdW5zaWduZWQgbnVtTWVzc2FnZXMpCiAgICAgZm9yICh1bnNpZ25l
ZCBzZW5kZXJJRCA9IDA7IHNlbmRlcklEIDwgbnVtU2VuZGVyczsgKytzZW5kZXJJRCkgewogICAg
ICAgICBzZW5kZXJUaHJlYWRzW3NlbmRlcklEXSA9IFRocmVhZDo6Y3JlYXRlKCJUaHJlYWRNZXNz
YWdlIHNlbmRlciIsIFtzZW5kZXJJRCwgbnVtTWVzc2FnZXMsIHJlY2VpdmVyVGhyZWFkLCAmbWVz
c2FnZXNSdW4sICZoYW5kbGVyc1J1bl0gKCkgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG51bU1lc3NhZ2VzOyArK2kpIHsKLSAgICAgICAgICAgICAgICBhdXRvIHJlc3Vs
dCA9IHNlbmRNZXNzYWdlKCpyZWNlaXZlclRocmVhZC5nZXQoKSwgW3NlbmRlcklELCAmaGFuZGxl
cnNSdW5dIChzaWdpbmZvX3QqLCB1Y29udGV4dF90KikgeworICAgICAgICAgICAgICAgIGF1dG8g
cmVzdWx0ID0gc2VuZE1lc3NhZ2UoKnJlY2VpdmVyVGhyZWFkLmdldCgpLCBbc2VuZGVySUQsICZo
YW5kbGVyc1J1bl0gKFBsYXRmb3JtUmVnaXN0ZXJzJikgewogICAgICAgICAgICAgICAgICAgICBo
YW5kbGVyc1J1bltzZW5kZXJJRF0rKzsKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAg
ICAgICBFWFBFQ1RfVFJVRShyZXN1bHQgPT0gV1RGOjpNZXNzYWdlU3RhdHVzOjpNZXNzYWdlUmFu
KTsKQEAgLTk1LDcgKzk1LDcgQEAgcHVibGljOgogVEVTVChUaHJlYWRNZXNzYWdlLCBTaWduYWxz
V29ya09uRXhpdCkKIHsKICAgICBzdGF0aWMgYm9vbCBoYW5kbGVyUmFuID0gZmFsc2U7Ci0gICAg
aW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFsOjpVc3IsIFtdIChpbnQsIHNpZ2luZm9fdCosIHZv
aWQqKSAtPiBTaWduYWxBY3Rpb24geworICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbDo6
VXNyLCBbXSAoU2lnbmFsLCBTaWdJbmZvJiwgUGxhdGZvcm1SZWdpc3RlcnMmKSAtPiBTaWduYWxB
Y3Rpb24gewogICAgICAgICBkYXRhTG9nTG4oImhlcmUiKTsKICAgICAgICAgaGFuZGxlclJhbiA9
IHRydWU7CiAgICAgICAgIHJldHVybiBTaWduYWxBY3Rpb246OkhhbmRsZWQ7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309803</attachid>
            <date>2017-05-11 15:49:32 -0700</date>
            <delta_ts>2017-05-12 10:18:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171865-20170511154931.patch</filename>
            <type>text/plain</type>
            <size>50097</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE2Njc3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
YzIyOWE0ZjkxMDMxZGZlOTU1YTQxMGIyMDI0Njc2ZTFmM2NkZWIxLi4yNWUzMDIyZWI5ZmY0ZDA1
M2E4ZWRiY2YxZTI2YmFkZTA1MTA4MWExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MCBAQAorMjAxNy0wNS0xMSAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBVc2UgTWFjaCBleGNlcHRpb25zIGluc3RlYWQgb2Ygc2lnbmFscyB3
aGVyZSBwb3NzaWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTcxODY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhpcyBwYXRjaCBhZGRzIHNvbWUgbmV3IEpTQyBvcHRpb25zLiBUaGUgZmlyc3QgaXMg
YW4gb3B0aW9uIHRoYXQKKyAgICAgICAgZW5hYmxlcyBvciBkaXNhYmxlcyB3ZWIgYXNzZW1ibHkg
dGllciB1cC4gVGhlIHNlY29uZCBjb250cm9scworICAgICAgICB3aGV0aGVyIG9yIG5vdCB3ZSB1
c2UgbWFjaCBleGNlcHRpb25zICh3aGVyZSBhdmFpbGFibGUpLgorCisgICAgICAgICogQVBJL3Rl
c3RzL0V4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwOgorICAgICAgICAoZGlzcGF0Y2hUZXJtaXRh
dGVDYWxsYmFjayk6CisgICAgICAgICh0ZXN0RXhlY3V0aW9uVGltZUxpbWl0KToKKyAgICAgICAg
KiBydW50aW1lL0pTTG9jay5jcHA6CisgICAgICAgIChKU0M6OkpTTG9jazo6ZGlkQWNxdWlyZUxv
Y2spOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5jcHA6CisgICAgICAgIChKU0M6Om92ZXJy
aWRlRGVmYXVsdHMpOgorICAgICAgICAoSlNDOjpPcHRpb25zOjppbml0aWFsaXplKToKKyAgICAg
ICAgKiBydW50aW1lL09wdGlvbnMuaDoKKyAgICAgICAgKiBydW50aW1lL1ZNVHJhcHMuY3BwOgor
ICAgICAgICAoSlNDOjpTaWduYWxDb250ZXh0OjpTaWduYWxDb250ZXh0KToKKyAgICAgICAgKEpT
Qzo6U2lnbmFsQ29udGV4dDo6YWRqdXN0UENUb1BvaW50VG9UcmFwcGluZ0luc3RydWN0aW9uKToK
KyAgICAgICAgKEpTQzo6aW5zdGFsbFNpZ25hbEhhbmRsZXIpOgorICAgICAgICAoSlNDOjpWTVRy
YXBzOjpTaWduYWxTZW5kZXI6OnNlbmQpOgorICAgICAgICAqIHRvb2xzL1NpZ2lsbENyYXNoQW5h
bHl6ZXIuY3BwOgorICAgICAgICAoSlNDOjpTaWduYWxDb250ZXh0OjpTaWduYWxDb250ZXh0KToK
KyAgICAgICAgKEpTQzo6U2lnbmFsQ29udGV4dDo6ZHVtcCk6CisgICAgICAgIChKU0M6Omluc3Rh
bGxDcmFzaEhhbmRsZXIpOgorICAgICAgICAqIHdhc20vV2FzbUJCUVBsYW4uY3BwOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKToKKyAgICAgICAgKiB3YXNt
L1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp0cmFwSGFu
ZGxlcik6CisgICAgICAgIChKU0M6Oldhc206OmVuYWJsZUZhc3RNZW1vcnkpOgorICAgICAgICAq
IHdhc20vV2FzbU1hY2hpbmVUaHJlYWRzLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6cmVzZXRJ
bnN0cnVjdGlvbkNhY2hlT25BbGxUaHJlYWRzKToKKwogMjAxNy0wNS0xMSAgTWFyayBMYW0gIDxt
YXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgV29ya2VyVGhyZWFkOjpzdG9wKCkgc2hvdWxk
IGNhbGwgc2NoZWR1bGVFeGVjdXRpb25UZXJtaW5hdGlvbigpIGxhc3QuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGVjZGRiMzNm
YmVkNTIxMTFiYzA3MTk1ZDZjMDhmZTQwNmIyYzFhMzUuLmE3MjBkMTAxZTIyMDVjZGYwZmEwNmRm
YzNjYTczNmY5YmE1ZmM2NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTcgQEAKKzIwMTctMDUtMTEgIEtlaXRo
IE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIE1hY2ggZXhj
ZXB0aW9ucyBpbnN0ZWFkIG9mIHNpZ25hbHMgd2hlcmUgcG9zc2libGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MTg2NQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZW5hYmxlcyB1c2lu
ZyBtYWNoIGV4Y2VwdGlvbnMgb24gZGFyd2luLiBUaGUgd2F5IHRoZQorICAgICAgICBtYWNoIGV4
Y2VwdGlvbiBhcGkgd29ya3MgaXMgdGhhdCB3ZSBjcmVhdGUgYSBtYWNoIHBvcnQsIHdoaWNoIGlz
CisgICAgICAgIGxpa2UgYSBmaWxlIGRlc2NyaXB0b3IuICBXZSB0aGVuIHdhaXQgZm9yIGEgbWVz
c2FnZSB0byBhcnJpdmUgb24KKyAgICAgICAgdGhhdCBwb3J0IGluIGEgdGhyZWFkLiBXaGVuIGFu
b3RoZXIgdGhyZWFkIHJhaXNlcyBhIGV4Y2VwdGlvbiAoc2F5CisgICAgICAgIGR1ZSB0byBhIGJh
ZCBtZW1vcnkgYWNjZXNzKSB0aGUgT1Mgc2VuZHMgb3VyIHRocmVhZCBhIG1lc3NhZ2UuIFRoZQor
ICAgICAgICBwYXlsb2FkIG9mIHRoYXQgbWVzc2FnZSBpcyB0aGUgcmVnaXN0ZXIgZmlsZSBvZiB0
aGUgY3Jhc2hpbmcKKyAgICAgICAgdGhyZWFkLiBXZSB0aGVuIGNhbGwgb3VyIGN1c3RvbSBoYW5k
bGVycyB0aGF0IGNoYW5nZSB0aGUgc3RhdGUgYXMKKyAgICAgICAgbmVlZGVkLiBJbiBvcmRlciB0
byByZXN0YXJ0IHRoZSB0aHJlYWQgd2Ugc2VuZCBhIHBheWxvYWQgYmFjayB0bworICAgICAgICB0
aGUgT1Mgd2l0aCBhbiB1cGRhdGVkIHJlZ2lzdGVyIGZpbGUgYWxvbmcgd2l0aCBhIHN1Y2Nlc3Mg
bWVzc2FnZQorICAgICAgICBoZWFkZXIuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIG1ha2Vz
IHRocmVhZCBtZXNzYWdlcyB3b3JrIHdpdGhvdXQgc2lnbmFscyBieQorICAgICAgICBzaW1wbHkg
c3VzcGVuZGluZyB0aGUgdGhyZWFkIHRoZW4gcnVubmluZyB0aGUgbWVzc2FnZSBhdCB0aGF0Cisg
ICAgICAgIHRpbWUuCisKKyAgICAgICAgKiBDb25maWd1cmF0aW9ucy9XVEYueGNjb25maWc6Cisg
ICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL1Bs
YXRmb3JtLmg6CisgICAgICAgICogd3RmL1BsYXRmb3JtUmVnaXN0ZXJzLmg6CisgICAgICAgIChX
VEY6OnJlZ2lzdGVyc0Zyb21VQ29udGV4dCk6CisgICAgICAgICogd3RmL1N0YWNrQm91bmRzLmg6
CisgICAgICAgIChXVEY6OlN0YWNrQm91bmRzOjpTdGFja0JvdW5kcyk6CisgICAgICAgICogd3Rm
L1RocmVhZEhvbGRlci5jcHA6CisgICAgICAgIChXVEY6OlRocmVhZEhvbGRlcjo6flRocmVhZEhv
bGRlcik6CisgICAgICAgICogd3RmL1RocmVhZE1lc3NhZ2UuY3BwOgorICAgICAgICAoV1RGOjpz
ZW5kTWVzc2FnZVNpZ25hbCk6CisgICAgICAgIChXVEY6OnNlbmRNZXNzYWdlTWFjaCk6CisgICAg
ICAgIChXVEY6OmRlbGl2ZXJNZXNzYWdlc1VzaW5nTWFjaCk6CisgICAgICAgIChXVEY6OnNlbmRN
ZXNzYWdlU2NvcGVkKToKKyAgICAgICAgKiB3dGYvVGhyZWFkTWVzc2FnZS5oOgorICAgICAgICAo
V1RGOjpzZW5kTWVzc2FnZSk6CisgICAgICAgICogd3RmL1RocmVhZGluZy5oOgorICAgICAgICAo
V1RGOjpUaHJlYWQ6Om1hY2hUaHJlYWQpOgorICAgICAgICAqIHd0Zi9tYWMvTWFjaEV4Y2VwdGlv
bnMuZGVmczogQ29waWVkIGZyb20gU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5oLgorICAg
ICAgICAqIHd0Zi90aHJlYWRzL1NpZ25hbHMuY3BwOgorICAgICAgICAoV1RGOjpzdGFydE1hY2hF
eGNlcHRpb25IYW5kbGVyVGhyZWFkKToKKyAgICAgICAgKFdURjo6ZnJvbU1hY2hFeGNlcHRpb24p
OgorICAgICAgICAoV1RGOjp0b01hY2hNYXNrKToKKyAgICAgICAgKFdURjo6aGFuZGxlU2lnbmFs
c1dpdGhNYWNoKToKKyAgICAgICAgKFdURjo6c2V0RXhjZXB0aW9uUG9ydHMpOgorICAgICAgICAo
V1RGOjphY3RpdmVUaHJlYWRzKToKKyAgICAgICAgKFdURjo6cmVnaXN0ZXJUaHJlYWQpOgorICAg
ICAgICAoV1RGOjpyZW1vdmVUaHJlYWQpOgorICAgICAgICAoV1RGOjppbnN0YWxsU2lnbmFsSGFu
ZGxlcik6CisgICAgICAgIChXVEY6OmpzY1NpZ25hbEhhbmRsZXIpOgorICAgICAgICAqIHd0Zi90
aHJlYWRzL1NpZ25hbHMuaDoKKwogMjAxNy0wNS0wOSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFJlbW92ZSBzdXBwb3J0IGZvciBsZWdhY3kgTm90aWZpY2F0aW9ucwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9FeGVjdXRpb25UaW1l
TGltaXRUZXN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvRXhlY3V0aW9u
VGltZUxpbWl0VGVzdC5jcHAKaW5kZXggZDVlNTMyNDNiNzhkZjc1MTM0MmFkOGQzOTBhNGIwNDEz
ZDllZWY5ZS4uYTFiZjc1Y2U3NzU0ZGJiYzFhMDZlYjc3MTZlNTQ4ZTI3NTk4MzUzNCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9FeGVjdXRpb25UaW1lTGltaXRU
ZXN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0V4ZWN1dGlvblRp
bWVMaW1pdFRlc3QuY3BwCkBAIC0zMCwxMCArMzAsMTggQEAKICNpbmNsdWRlICJKU0NvbnRleHRS
ZWZQcml2YXRlLmgiCiAjaW5jbHVkZSAiSmF2YVNjcmlwdENvcmUuaCIKICNpbmNsdWRlICJPcHRp
b25zLmgiCisKICNpbmNsdWRlIDxjaHJvbm8+CisjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KKyNp
bmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Cisj
aW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+
CiAKKyNpZiBIQVZFKE1BQ0hfRVhDRVBUSU9OUykKKyNpbmNsdWRlIDxkaXNwYXRjaC9kaXNwYXRj
aC5oPgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBzdGQ6OmNocm9ubzsKIHVzaW5nIEpTQzo6
T3B0aW9uczsKIApAQCAtNzcsNiArODUsMTMgQEAgc3RhdGljIGJvb2wgZXh0ZW5kVGVybWluYXRl
Q2FsbGJhY2soSlNDb250ZXh0UmVmIGN0eCwgdm9pZCopCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
K2Jvb2wgZGlzcGF0Y2hUZXJtaW5hdGVDYWxsYmFja0NhbGxlZCA9IGZhbHNlOworc3RhdGljIGJv
b2wgZGlzcGF0Y2hUZXJtaXRhdGVDYWxsYmFjayhKU0NvbnRleHRSZWYsIHZvaWQqKQoreworICAg
IGRpc3BhdGNoVGVybWluYXRlQ2FsbGJhY2tDYWxsZWQgPSB0cnVlOworICAgIHJldHVybiB0cnVl
OworfQorCiBzdHJ1Y3QgVGllck9wdGlvbnMgewogICAgIGNvbnN0IGNoYXIqIHRpZXI7CiAgICAg
dW5zaWduZWQgdGltZUxpbWl0QWRqdXN0bWVudE1pbGxpczsKQEAgLTM2NSw2ICszODAsNjUgQEAg
aW50IHRlc3RFeGVjdXRpb25UaW1lTGltaXQoKQogICAgICAgICAgICAgfQogICAgICAgICB9CiAK
KyNpZiBIQVZFKE1BQ0hfRVhDRVBUSU9OUykKKyAgICAgICAgLyogVGVzdCBzY3JpcHQgdGltZW91
dCBmcm9tIGRpc3BhdGNoIHF1ZXVlOiAqLworICAgICAgICB0aW1lTGltaXQgPSAoMTAwICsgdGll
ckFkanVzdG1lbnRNaWxsaXMpIC8gMTAwMC4wOworICAgICAgICBKU0NvbnRleHRHcm91cFNldEV4
ZWN1dGlvblRpbWVMaW1pdChjb250ZXh0R3JvdXAsIHRpbWVMaW1pdCwgZGlzcGF0Y2hUZXJtaXRh
dGVDYWxsYmFjaywgMCk7CisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHRpbWVBZnRl
cldhdGNoZG9nU2hvdWxkSGF2ZUZpcmVkID0gMzAwICsgdGllckFkanVzdG1lbnRNaWxsaXM7CisK
KyAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgc2NyaXB0QnVpbGRlcjsKKyAgICAgICAgICAgIHNj
cmlwdEJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiZnVuY3Rpb24gZm9vKCkgeyB2YXIgc3RhcnRUaW1l
ID0gY3VycmVudENQVVRpbWUoKTsgd2hpbGUgKHRydWUpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCAx
MDAwOyBpKyspOyBpZiAoY3VycmVudENQVVRpbWUoKSAtIHN0YXJ0VGltZSA+ICIpOworICAgICAg
ICAgICAgc2NyaXB0QnVpbGRlci5hcHBlbmROdW1iZXIodGltZUFmdGVyV2F0Y2hkb2dTaG91bGRI
YXZlRmlyZWQgLyAxMDAwLjApOworICAgICAgICAgICAgc2NyaXB0QnVpbGRlci5hcHBlbmRMaXRl
cmFsKCIpIGJyZWFrOyB9IH0gZm9vKCk7Iik7CisKKyAgICAgICAgICAgIEpTU3RyaW5nUmVmIHNj
cmlwdCA9IEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHNjcmlwdEJ1aWxkZXIudG9TdHJp
bmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGV4Y2VwdGlvbiA9IG51bGxwdHI7Cisg
ICAgICAgICAgICBkaXNwYXRjaFRlcm1pbmF0ZUNhbGxiYWNrQ2FsbGVkID0gZmFsc2U7CisKKyAg
ICAgICAgICAgIC8vIFdlIGhhdmUgdG8gZG8gdGhpcyBzaW5jZSBibG9ja3MgY2FuIG9ubHkgY2Fw
dHVyZSB0aGluZ3MgYXMgY29uc3QuCisgICAgICAgICAgICBKU0dsb2JhbENvbnRleHRSZWYmIGNv
bnRleHRSZWYgPSBjb250ZXh0OworICAgICAgICAgICAgSlNTdHJpbmdSZWYmIHNjcmlwdFJlZiA9
IHNjcmlwdDsKKyAgICAgICAgICAgIEpTVmFsdWVSZWYmIGV4Y2VwdGlvblJlZiA9IGV4Y2VwdGlv
bjsKKworICAgICAgICAgICAgTG9jayBzeW5jTG9jazsKKyAgICAgICAgICAgIExvY2smIHN5bmNM
b2NrUmVmID0gc3luY0xvY2s7CisgICAgICAgICAgICBDb25kaXRpb24gc3luY2hyb25pemU7Cisg
ICAgICAgICAgICBDb25kaXRpb24mIHN5bmNocm9uaXplUmVmID0gc3luY2hyb25pemU7CisgICAg
ICAgICAgICBib29sIGRpZFN5bmNocm9uaXplID0gZmFsc2U7CisgICAgICAgICAgICBib29sJiBk
aWRTeW5jaHJvbml6ZVJlZiA9IGRpZFN5bmNocm9uaXplOworCisgICAgICAgICAgICBzdGQ6OmNo
cm9ubzo6bWljcm9zZWNvbmRzIHN0YXJ0VGltZTsKKyAgICAgICAgICAgIHN0ZDo6Y2hyb25vOjpt
aWNyb3NlY29uZHMgZW5kVGltZTsKKworICAgICAgICAgICAgc3RkOjpjaHJvbm86Om1pY3Jvc2Vj
b25kcyYgc3RhcnRUaW1lUmVmID0gc3RhcnRUaW1lOworICAgICAgICAgICAgc3RkOjpjaHJvbm86
Om1pY3Jvc2Vjb25kcyYgZW5kVGltZVJlZiA9IGVuZFRpbWU7CisKKyAgICAgICAgICAgIGRpc3Bh
dGNoX2dyb3VwX3QgZ3JvdXAgPSBkaXNwYXRjaF9ncm91cF9jcmVhdGUoKTsKKyAgICAgICAgICAg
IGRpc3BhdGNoX2dyb3VwX2FzeW5jKGdyb3VwLCBkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1ZXVlKDAs
IDApLCBeeworICAgICAgICAgICAgICAgIHN0YXJ0VGltZVJlZiA9IGN1cnJlbnRDUFVUaW1lKCk7
CisgICAgICAgICAgICAgICAgSlNFdmFsdWF0ZVNjcmlwdChjb250ZXh0UmVmLCBzY3JpcHRSZWYs
IG51bGxwdHIsIG51bGxwdHIsIDEsICZleGNlcHRpb25SZWYpOworICAgICAgICAgICAgICAgIGVu
ZFRpbWVSZWYgPSBjdXJyZW50Q1BVVGltZSgpOworICAgICAgICAgICAgICAgIGF1dG8gbG9ja2Vy
ID0gV1RGOjpob2xkTG9jayhzeW5jTG9ja1JlZik7CisgICAgICAgICAgICAgICAgZGlkU3luY2hy
b25pemVSZWYgPSB0cnVlOworICAgICAgICAgICAgICAgIHN5bmNocm9uaXplUmVmLm5vdGlmeUFs
bCgpOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2soc3luY0xvY2spOworICAgICAgICAgICAgc3luY2hyb25pemUud2FpdChzeW5jTG9jaywgWyZd
IHsgcmV0dXJuIGRpZFN5bmNocm9uaXplOyB9KTsKKworICAgICAgICAgICAgaWYgKCgoZW5kVGlt
ZSAtIHN0YXJ0VGltZSkgPCBtaWxsaXNlY29uZHModGltZUFmdGVyV2F0Y2hkb2dTaG91bGRIYXZl
RmlyZWQpKSAmJiBkaXNwYXRjaFRlcm1pbmF0ZUNhbGxiYWNrQ2FsbGVkKQorICAgICAgICAgICAg
ICAgIHByaW50ZigiUEFTUzogJXMgc2NyaXB0IG9uIGRpc3BhdGNoIHF1ZXVlIHRpbWVkIG91dCBh
cyBleHBlY3RlZC5cbiIsIHRpZXJPcHRpb25zLnRpZXIpOworICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgaWYgKChlbmRUaW1lIC0gc3RhcnRUaW1lKSA+PSBtaWxsaXNlY29uZHMo
dGltZUFmdGVyV2F0Y2hkb2dTaG91bGRIYXZlRmlyZWQpKQorICAgICAgICAgICAgICAgICAgICBw
cmludGYoIkZBSUw6ICVzIHNjcmlwdCBvbiBkaXNwYXRjaCBxdWV1ZSBkaWQgbm90IHRpbWUgb3V0
IGFzIGV4cGVjdGVkLlxuIiwgdGllck9wdGlvbnMudGllcik7CisgICAgICAgICAgICAgICAgaWYg
KCFzaG91bGRUZXJtaW5hdGVDYWxsYmFja1dhc0NhbGxlZCkKKyAgICAgICAgICAgICAgICAgICAg
cHJpbnRmKCJGQUlMOiAlcyBzY3JpcHQgb24gZGlzcGF0Y2ggcXVldWUgdGltZW91dCBjYWxsYmFj
ayB3YXMgbm90IGNhbGxlZC5cbiIsIHRpZXJPcHRpb25zLnRpZXIpOworICAgICAgICAgICAgICAg
IGZhaWxlZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNlbmRpZgorCiAgICAg
ICAgIEpTR2xvYmFsQ29udGV4dFJlbGVhc2UoY29udGV4dCk7CiAKICAgICAgICAgT3B0aW9uczo6
c2V0T3B0aW9ucyhzYXZlZE9wdGlvbnNCdWlsZGVyLnRvU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAKaW5kZXggYzE3NWFlMGM0
ODJlZDI3YmQ1ZjZiZGM4Nzk2OGU3NWQ0NWFmNTBlZi4uYmI3MGFhYWVhMTVmZWQ1NDc3YjYxOTlm
YTZkNGRjN2VhOTcxMDJjMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNMb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2su
Y3BwCkBAIC0zMCw2ICszMCw4IEBACiAjaW5jbHVkZSAiU2FtcGxpbmdQcm9maWxlci5oIgogI2lu
Y2x1ZGUgIldhc21NYWNoaW5lVGhyZWFkcy5oIgogI2luY2x1ZGUgPHRocmVhZD4KKyNpbmNsdWRl
IDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RocmVhZHMvU2lnbmFscy5oPgogCiBu
YW1lc3BhY2UgSlNDIHsKIApAQCAtMTQ4LDYgKzE1MCwxMCBAQCB2b2lkIEpTTG9jazo6ZGlkQWNx
dWlyZUxvY2soKQogICAgIFdhc206OnN0YXJ0VHJhY2tpbmdDdXJyZW50VGhyZWFkKCk7CiAjZW5k
aWYKIAorI2lmIEhBVkUoTUFDSF9FWENFUFRJT05TKQorICAgIFdURjo6cmVnaXN0ZXJUaHJlYWQo
JlRocmVhZDo6Y3VycmVudCgpKTsKKyNlbmRpZgorCiAgICAgbV92bS0+dHJhcHMoKS5ub3RpZnlH
cmFiQWxsTG9ja3MoKTsKIAogI2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKaW5kZXggYjA0ZGUzNWE1MzYxNTA4NDM4
NTc1YzIyN2E1MDE0ZGQwYzUxYmFhMi4uODZlYTFiNjk1NjM0YTU0ZjBlM2QyMGZhMjYzNzczOWVj
OGI2MDRkZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKQEAg
LTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8
d3RmL1N0cmluZ0V4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4K
KyNpbmNsdWRlIDx3dGYvdGhyZWFkcy9TaWduYWxzLmg+CiAKICNpZiBQTEFURk9STShDT0NPQSkK
ICNpbmNsdWRlIDxjcnRfZXh0ZXJucy5oPgpAQCAtMzU0LDYgKzM1NSwxMCBAQCBzdGF0aWMgdm9p
ZCBvdmVycmlkZURlZmF1bHRzKCkKICNpZiAhRU5BQkxFKFdFQkFTU0VNQkxZX0ZBU1RfTUVNT1JZ
KQogICAgIE9wdGlvbnM6OnVzZVdlYkFzc2VtYmx5RmFzdE1lbW9yeSgpID0gZmFsc2U7CiAjZW5k
aWYKKworI2lmIEhBVkUoTUFDSF9FWENFUFRJT05TKQorICAgIE9wdGlvbnM6OnVzZU1hY2hGb3JF
eGNlcHRpb25zKCkgPSB0cnVlOworI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkIHJlY29tcHV0ZURl
cGVuZGVudE9wdGlvbnMoKQpAQCAtNTQ1LDYgKzU1MCwxMSBAQCB2b2lkIE9wdGlvbnM6OmluaXRp
YWxpemUoKQogCiAgICAgICAgICAgICBkdW1wT3B0aW9uc0lmTmVlZGVkKCk7CiAgICAgICAgICAg
ICBlbnN1cmVPcHRpb25zQXJlQ29oZXJlbnQoKTsKKworI2lmIEhBVkUoTUFDSF9FWENFUFRJT05T
KQorICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnVzZU1hY2hGb3JFeGNlcHRpb25zKCkpCisgICAg
ICAgICAgICAgICAgV1RGOjpoYW5kbGVTaWduYWxzV2l0aE1hY2goKTsKKyNlbmRpZgogICAgICAg
ICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0
aW9ucy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCmluZGV4IGNm
OWRjMmIyYTgyNTY4ZWUwN2RhMDg4OWUzOWI2YjJmOWRjZDc5NzUuLjIyNzRkMWNkZWIzMzM2ZTM3
YWI0NDczZWE0MTE2ZWEzMjI5ZTkzN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zLmgKQEAgLTQyMCw2ICs0MjAsOCBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0
cmluZzsKICAgICB2KHVuc2lnbmVkLCB3YXRjaGRvZywgMCwgTm9ybWFsLCAid2F0Y2hkb2cgdGlt
ZW91dCAoMCA9IERpc2FibGVkLCBOID0gYSB0aW1lb3V0IHBlcmlvZCBvZiBOIG1pbGxpc2Vjb25k
cykiKSBcCiAgICAgdihib29sLCB1c2VQb2xsaW5nVHJhcHMsIGZhbHNlLCBOb3JtYWwsICJ1c2Ug
cG9sbGluZyAoaW5zdGVhZCBvZiBzaWduYWxsaW5nKSBWTSB0cmFwcyIpIFwKICAgICBcCisgICAg
dihib29sLCB1c2VNYWNoRm9yRXhjZXB0aW9ucywgdHJ1ZSwgTm9ybWFsLCAiVXNlIG1hY2ggZXhj
ZXB0aW9ucyByYXRoZXIgdGhhbiBzaWduYWxzIHRvIGhhbmRsZSBmYXVsdHMgYW5kIHBhc3MgdGhy
ZWFkIG1lc3NhZ2VzLiAoVGhpcyBkb2VzIG5vdGhpbmcgb24gcGxhdGZvcm1zIHdpdGhvdXQgbWFj
aCkiKSBcCisgICAgXAogICAgIHYoYm9vbCwgdXNlSUNTdGF0cywgZmFsc2UsIE5vcm1hbCwgbnVs
bHB0cikgXAogICAgIFwKICAgICB2KHVuc2lnbmVkLCBwcm90b3R5cGVIaXRDb3VudEZvckxMSW50
Q2FjaGluZywgMiwgTm9ybWFsLCAiTnVtYmVyIG9mIHByb3RvdHlwZSBwcm9wZXJ0eSBoaXRzIGJl
Zm9yZSBjYWNoaW5nIGEgcHJvdG90eXBlIGluIHRoZSBMTEludC4gQSBjb3VudCBvZiAwIG1lYW5z
IG5ldmVyIGNhY2hlLiIpIFwKQEAgLTQ0Myw2ICs0NDUsNyBAQCB0eXBlZGVmIGNvbnN0IGNoYXIq
IG9wdGlvblN0cmluZzsKICAgICB2KHVuc2lnbmVkLCB3ZWJBc3NlbWJseUJCUU9wdGltaXphdGlv
bkxldmVsLCAxLCBOb3JtYWwsICJCMyBPcHRpbWl6YXRpb24gbGV2ZWwgZm9yIEJCUSBXZWIgQXNz
ZW1ibHkgbW9kdWxlIGNvbXBpbGF0aW9ucy4iKSBcCiAgICAgdih1bnNpZ25lZCwgd2ViQXNzZW1i
bHlPTUdPcHRpbWl6YXRpb25MZXZlbCwgT3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSwgTm9y
bWFsLCAiQjMgT3B0aW1pemF0aW9uIGxldmVsIGZvciBPTUcgV2ViIEFzc2VtYmx5IG1vZHVsZSBj
b21waWxhdGlvbnMuIikgXAogICAgIFwKKyAgICB2KGJvb2wsIHVzZUJCUVRpZXJVcENoZWNrcywg
dHJ1ZSwgTm9ybWFsLCAiRW5hYmxlcyB0aWVyIHVwIGNoZWNrcyBmb3Igb3VyIEJCUSBjb2RlLiIp
IFwKICAgICB2KHVuc2lnbmVkLCB3ZWJBc3NlbWJseU9NR1RpZXJVcENvdW50LCA1MDAwLCBOb3Jt
YWwsICJUaGUgY291bnRkb3duIGJlZm9yZSB3ZSB0aWVyIHVwIGEgZnVuY3Rpb24gdG8gT01HLiIp
IFwKICAgICB2KHVuc2lnbmVkLCB3ZWJBc3NlbWJseUxvb3BEZWNyZW1lbnQsIDE1LCBOb3JtYWws
ICJUaGUgYW1vdW50IHRoZSB0aWVyIHVwIGNvdW50ZG93biBpcyBkZWNyZW1lbnRlZCBvbiBlYWNo
IGxvb3AgYmFja2VkZ2UuIikgXAogICAgIHYodW5zaWduZWQsIHdlYkFzc2VtYmx5RnVuY3Rpb25F
bnRyeURlY3JlbWVudCwgMSwgTm9ybWFsLCAiVGhlIGFtb3VudCB0aGUgdGllciB1cCBjb3VudGRv
d24gaXMgZGVjcmVtZW50ZWQgb24gZWFjaCBmdW5jdGlvbiBlbnRyeS4iKSBcCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCmluZGV4IDFiYWFjZTYwNDRlNjYwYThlNTQ0
MWZiYWQwMThlYTkwOTMxYTRjOTEuLjhjNTdjNDU2YWU0MzY4YWRmMjhlYTBhNjQ1OGU3YzAzOWE5
NzBlZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCkBAIC01
MywxMSArNTMsMTEgQEAgQUxXQVlTX0lOTElORSBWTSYgVk1UcmFwczo6dm0oKSBjb25zdAogI2lm
IEVOQUJMRShTSUdOQUxfQkFTRURfVk1fVFJBUFMpCiAKIHN0cnVjdCBTaWduYWxDb250ZXh0IHsK
LSAgICBTaWduYWxDb250ZXh0KG1jb250ZXh0X3QmIG1jb250ZXh0KQotICAgICAgICA6IG1jb250
ZXh0KG1jb250ZXh0KQotICAgICAgICAsIHRyYXBQQyhNYWNoaW5lQ29udGV4dDo6aW5zdHJ1Y3Rp
b25Qb2ludGVyKG1jb250ZXh0KSkKLSAgICAgICAgLCBzdGFja1BvaW50ZXIoTWFjaGluZUNvbnRl
eHQ6OnN0YWNrUG9pbnRlcihtY29udGV4dCkpCi0gICAgICAgICwgZnJhbWVQb2ludGVyKE1hY2hp
bmVDb250ZXh0OjpmcmFtZVBvaW50ZXIobWNvbnRleHQpKQorICAgIFNpZ25hbENvbnRleHQoUGxh
dGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVycykKKyAgICAgICAgOiByZWdpc3RlcnMocmVnaXN0ZXJz
KQorICAgICAgICAsIHRyYXBQQyhNYWNoaW5lQ29udGV4dDo6aW5zdHJ1Y3Rpb25Qb2ludGVyKHJl
Z2lzdGVycykpCisgICAgICAgICwgc3RhY2tQb2ludGVyKE1hY2hpbmVDb250ZXh0OjpzdGFja1Bv
aW50ZXIocmVnaXN0ZXJzKSkKKyAgICAgICAgLCBmcmFtZVBvaW50ZXIoTWFjaGluZUNvbnRleHQ6
OmZyYW1lUG9pbnRlcihyZWdpc3RlcnMpKQogICAgIHsKICNpZiBDUFUoWDg2XzY0KSB8fCBDUFUo
WDg2KQogICAgICAgICAvLyBPbiBYODZfNjQsIFNJR1RSQVAgcmVwb3J0cyB0aGUgYWRkcmVzcyBh
ZnRlciB0aGUgdHJhcHBpbmcgUEMuIFNvLCBkZWMgYnkgMS4KQEAgLTY4LDExICs2OCwxMSBAQCBz
dHJ1Y3QgU2lnbmFsQ29udGV4dCB7CiAgICAgdm9pZCBhZGp1c3RQQ1RvUG9pbnRUb1RyYXBwaW5n
SW5zdHJ1Y3Rpb24oKQogICAgIHsKICNpZiBDUFUoWDg2XzY0KSB8fCBDUFUoWDg2KQotICAgICAg
ICBNYWNoaW5lQ29udGV4dDo6aW5zdHJ1Y3Rpb25Qb2ludGVyKG1jb250ZXh0KSA9IHRyYXBQQzsK
KyAgICAgICAgTWFjaGluZUNvbnRleHQ6Omluc3RydWN0aW9uUG9pbnRlcihyZWdpc3RlcnMpID0g
dHJhcFBDOwogI2VuZGlmCiAgICAgfQogCi0gICAgbWNvbnRleHRfdCYgbWNvbnRleHQ7CisgICAg
UGxhdGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVyczsKICAgICB2b2lkKiB0cmFwUEM7CiAgICAgdm9p
ZCogc3RhY2tQb2ludGVyOwogICAgIHZvaWQqIGZyYW1lUG9pbnRlcjsKQEAgLTEzMCw4ICsxMzAs
OCBAQCBzdGF0aWMgRXhwZWN0ZWQ8Vk1BbmRTdGFja0JvdW5kcywgVk1UcmFwczo6RXJyb3I+IGZp
bmRBY3RpdmVWTUFuZFN0YWNrQm91bmRzKFNpZwogCiBzdGF0aWMgdm9pZCBpbnN0YWxsU2lnbmFs
SGFuZGxlcigpCiB7Ci0gICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFsOjpUcmFwLCBbXSAo
aW50LCBzaWdpbmZvX3QqLCB2b2lkKiB1YXApIC0+IFNpZ25hbEFjdGlvbiB7Ci0gICAgICAgIFNp
Z25hbENvbnRleHQgY29udGV4dChzdGF0aWNfY2FzdDx1Y29udGV4dF90Kj4odWFwKS0+dWNfbWNv
bnRleHQpOworICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbDo6VHJhcCwgW10gKFNpZ25h
bCwgU2lnSW5mbyYsIFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMpIC0+IFNpZ25hbEFjdGlv
biB7CisgICAgICAgIFNpZ25hbENvbnRleHQgY29udGV4dChyZWdpc3RlcnMpOwogCiAgICAgICAg
IGlmICghaXNKSVRQQyhjb250ZXh0LnRyYXBQQykpCiAgICAgICAgICAgICByZXR1cm4gU2lnbmFs
QWN0aW9uOjpOb3RIYW5kbGVkOwpAQCAtNDA0LDggKzQwNCw4IEBAIHZvaWQgVk1UcmFwczo6U2ln
bmFsU2VuZGVyOjpzZW5kKCkKICAgICAgICAgICAgIFZNJiB2bSA9ICptX3ZtOwogICAgICAgICAg
ICAgYXV0byBvcHRpb25hbE93bmVyVGhyZWFkID0gdm0ub3duZXJUaHJlYWQoKTsKICAgICAgICAg
ICAgIGlmIChvcHRpb25hbE93bmVyVGhyZWFkKSB7Ci0gICAgICAgICAgICAgICAgc2VuZE1lc3Nh
Z2UoKm9wdGlvbmFsT3duZXJUaHJlYWQudmFsdWUoKS5nZXQoKSwgW10gKHNpZ2luZm9fdCosIHVj
b250ZXh0X3QqIHVjb250ZXh0KSAtPiB2b2lkIHsKLSAgICAgICAgICAgICAgICAgICAgU2lnbmFs
Q29udGV4dCBjb250ZXh0KHVjb250ZXh0LT51Y19tY29udGV4dCk7CisgICAgICAgICAgICAgICAg
c2VuZE1lc3NhZ2UoKm9wdGlvbmFsT3duZXJUaHJlYWQudmFsdWUoKS5nZXQoKSwgW10gKFBsYXRm
b3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMpIC0+IHZvaWQgeworICAgICAgICAgICAgICAgICAgICBT
aWduYWxDb250ZXh0IGNvbnRleHQocmVnaXN0ZXJzKTsKICAgICAgICAgICAgICAgICAgICAgYXV0
byBhY3RpdmVWTUFuZFN0YWNrQm91bmRzID0gZmluZEFjdGl2ZVZNQW5kU3RhY2tCb3VuZHMoY29u
dGV4dCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChhY3RpdmVWTUFuZFN0YWNrQm91bmRzKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICBWTSogdm0gPSBhY3RpdmVWTUFuZFN0YWNrQm91bmRz
LnZhbHVlKCkudm07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvU2ln
aWxsQ3Jhc2hBbmFseXplci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvU2lnaWxs
Q3Jhc2hBbmFseXplci5jcHAKaW5kZXggNGFkYWVmZjFjZGEyZDFmYmM2ZjkwNjFmMDYzZTE0ZDJl
NjMzMDA0OC4uNzFhNmU0MjU1YzY0NWRkNmFmM2JkYjI1MGNjZjEzYWQ4YzFhOGE0NCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1NpZ2lsbENyYXNoQW5hbHl6ZXIuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9TaWdpbGxDcmFzaEFuYWx5emVyLmNw
cApAQCAtNzgsMTEgKzc4LDExIEBAIHByaXZhdGU6CiAjZW5kaWYgLy8gVVNFKE9TX0xPRykKIAog
c3RydWN0IFNpZ25hbENvbnRleHQgewotICAgIFNpZ25hbENvbnRleHQobWNvbnRleHRfdCYgbWNv
bnRleHQpCi0gICAgICAgIDogbWNvbnRleHQobWNvbnRleHQpCi0gICAgICAgICwgbWFjaGluZVBD
KE1hY2hpbmVDb250ZXh0OjppbnN0cnVjdGlvblBvaW50ZXIobWNvbnRleHQpKQotICAgICAgICAs
IHN0YWNrUG9pbnRlcihNYWNoaW5lQ29udGV4dDo6c3RhY2tQb2ludGVyKG1jb250ZXh0KSkKLSAg
ICAgICAgLCBmcmFtZVBvaW50ZXIoTWFjaGluZUNvbnRleHQ6OmZyYW1lUG9pbnRlcihtY29udGV4
dCkpCisgICAgU2lnbmFsQ29udGV4dChQbGF0Zm9ybVJlZ2lzdGVycyYgcmVnaXN0ZXJzKQorICAg
ICAgICA6IHJlZ2lzdGVycyhyZWdpc3RlcnMpCisgICAgICAgICwgbWFjaGluZVBDKE1hY2hpbmVD
b250ZXh0OjppbnN0cnVjdGlvblBvaW50ZXIocmVnaXN0ZXJzKSkKKyAgICAgICAgLCBzdGFja1Bv
aW50ZXIoTWFjaGluZUNvbnRleHQ6OnN0YWNrUG9pbnRlcihyZWdpc3RlcnMpKQorICAgICAgICAs
IGZyYW1lUG9pbnRlcihNYWNoaW5lQ29udGV4dDo6ZnJhbWVQb2ludGVyKHJlZ2lzdGVycykpCiAg
ICAgeyB9CiAKICAgICB2b2lkIGR1bXAoKQpAQCAtMTEyLDcgKzExMiw3IEBAIHN0cnVjdCBTaWdu
YWxDb250ZXh0IHsKICAgICAgICAgdihncykKIAogI2RlZmluZSBEVU1QX1JFR0lTVEVSKF9fcmVn
KSBcCi0gICAgICAgIGxvZygiUmVnaXN0ZXIgIiAjX19yZWcgIjogJXAiLCByZWludGVycHJldF9j
YXN0PHZvaWQqPihtY29udGV4dC0+X19zcy5fXyMjX19yZWcpKTsKKyAgICAgICAgbG9nKCJSZWdp
c3RlciAiICNfX3JlZyAiOiAlcCIsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlZ2lzdGVycy5f
XyMjX19yZWcpKTsKICAgICAgICAgRk9SX0VBQ0hfUkVHSVNURVIoRFVNUF9SRUdJU1RFUikKICN1
bmRlZiBGT1JfRUFDSF9SRUdJU1RFUgogCkBAIC0xMjAsMjAgKzEyMCwyMCBAQCBzdHJ1Y3QgU2ln
bmFsQ29udGV4dCB7CiAgICAgICAgIGludCBpOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjg7
IGkgKz0gNCkgewogICAgICAgICAgICAgbG9nKCJ4JWQ6ICUwMTZsbHggeCVkOiAlMDE2bGx4IHgl
ZDogJTAxNmxseCB4JWQ6ICUwMTZsbHgiLAotICAgICAgICAgICAgICAgIGksIG1jb250ZXh0LT5f
X3NzLl9feFtpXSwKLSAgICAgICAgICAgICAgICBpKzEsIG1jb250ZXh0LT5fX3NzLl9feFtpKzFd
LAotICAgICAgICAgICAgICAgIGkrMiwgbWNvbnRleHQtPl9fc3MuX194W2krMl0sCi0gICAgICAg
ICAgICAgICAgaSszLCBtY29udGV4dC0+X19zcy5fX3hbaSszXSk7CisgICAgICAgICAgICAgICAg
aSwgcmVnaXN0ZXJzLl9feFtpXSwKKyAgICAgICAgICAgICAgICBpKzEsIHJlZ2lzdGVycy5fX3hb
aSsxXSwKKyAgICAgICAgICAgICAgICBpKzIsIHJlZ2lzdGVycy5fX3hbaSsyXSwKKyAgICAgICAg
ICAgICAgICBpKzMsIHJlZ2lzdGVycy5fX3hbaSszXSk7CiAgICAgICAgIH0KICAgICAgICAgQVNT
RVJUKGkgPCAyOSk7CiAgICAgICAgIGxvZygieCVkOiAlMDE2bGx4IGZwOiAlMDE2bGx4IGxyOiAl
MDE2bGx4IiwKLSAgICAgICAgICAgIGksIG1jb250ZXh0LT5fX3NzLl9feFtpXSwgbWNvbnRleHQt
Pl9fc3MuX19mcCwgbWNvbnRleHQtPl9fc3MuX19scik7CisgICAgICAgICAgICBpLCByZWdpc3Rl
cnMuX194W2ldLCByZWdpc3RlcnMuX19mcCwgcmVnaXN0ZXJzLl9fbHIpOwogICAgICAgICBsb2co
InNwOiAlMDE2bGx4IHBjOiAlMDE2bGx4IGNwc3I6ICUwOHgiLAotICAgICAgICAgICAgbWNvbnRl
eHQtPl9fc3MuX19zcCwgbWNvbnRleHQtPl9fc3MuX19wYywgbWNvbnRleHQtPl9fc3MuX19jcHNy
KTsKKyAgICAgICAgICAgIHJlZ2lzdGVycy5fX3NwLCByZWdpc3RlcnMuX19wYywgcmVnaXN0ZXJz
Ll9fY3Bzcik7CiAjZW5kaWYKICAgICB9CiAKLSAgICBtY29udGV4dF90JiBtY29udGV4dDsKKyAg
ICBQbGF0Zm9ybVJlZ2lzdGVycyYgcmVnaXN0ZXJzOwogICAgIHZvaWQqIG1hY2hpbmVQQzsKICAg
ICB2b2lkKiBzdGFja1BvaW50ZXI7CiAgICAgdm9pZCogZnJhbWVQb2ludGVyOwpAQCAtMTQyLDgg
KzE0Miw4IEBAIHN0cnVjdCBTaWduYWxDb250ZXh0IHsKIHN0YXRpYyB2b2lkIGluc3RhbGxDcmFz
aEhhbmRsZXIoKQogewogI2lmIENQVShYODZfNjQpIHx8IENQVShBUk02NCkKLSAgICBpbnN0YWxs
U2lnbmFsSGFuZGxlcihTaWduYWw6OklsbCwgW10gKGludCwgc2lnaW5mb190Kiwgdm9pZCogdWFw
KSB7Ci0gICAgICAgIFNpZ25hbENvbnRleHQgY29udGV4dChzdGF0aWNfY2FzdDx1Y29udGV4dF90
Kj4odWFwKS0+dWNfbWNvbnRleHQpOworICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbDo6
SWxsLCBbXSAoU2lnbmFsLCBTaWdJbmZvJiwgUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVycykg
eworICAgICAgICBTaWduYWxDb250ZXh0IGNvbnRleHQocmVnaXN0ZXJzKTsKIAogICAgICAgICBp
ZiAoIWlzSklUUEMoY29udGV4dC5tYWNoaW5lUEMpKQogICAgICAgICAgICAgcmV0dXJuIFNpZ25h
bEFjdGlvbjo6Tm90SGFuZGxlZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21CQlFQbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQ
bGFuLmNwcAppbmRleCAxZGQwY2QxZDgzNWM2YzJmMjMxYjAwYjg4NmRkZTRhZjcyYzI2M2NlLi5i
MWI1OThkMjBjNWMwMDc3ZDllOWQwOGUzNjhhZDVjYTE3ODMxYmFmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCkBAIC0yNDIsNyArMjQyLDcgQEAgdm9pZCBC
QlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKICAgICAg
ICAgQVNTRVJUKHZhbGlkYXRlRnVuY3Rpb24oZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgs
IHNpZ25hdHVyZSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSkpOwogCiAgICAgICAgIG1fdW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRleF0gPSBWZWN0b3I8VW5saW5rZWRXYXNt
VG9XYXNtQ2FsbD4oKTsKLSAgICAgICAgVGllclVwQ291bnQqIHRpZXJVcCA9ICZtX3RpZXJVcENv
dW50c1tmdW5jdGlvbkluZGV4XTsKKyAgICAgICAgVGllclVwQ291bnQqIHRpZXJVcCA9IE9wdGlv
bnM6OnVzZUJCUVRpZXJVcENoZWNrcygpID8gJm1fdGllclVwQ291bnRzW2Z1bmN0aW9uSW5kZXhd
IDogbnVsbHB0cjsKICAgICAgICAgYXV0byBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFu
ZENvbXBpbGUobV9jb21waWxhdGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdLCBmdW5jdGlvblN0
YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxz
W2Z1bmN0aW9uSW5kZXhdLCBtX21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIENvbXBp
bGF0aW9uTW9kZTo6QkJRTW9kZSwgZnVuY3Rpb25JbmRleCwgdGllclVwKTsKIAogICAgICAgICBp
ZiAoVU5MSUtFTFkoIXBhcnNlQW5kQ29tcGlsZVJlc3VsdCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAKaW5kZXggMmUw
Yzk5YTM5YmViZDMxNzhiOTE0OGQ5NThmZTUzZTU3YTYyMjk3ZS4uMjY0YzM0ZGU0NWRhMTc1YTVk
NTE0MWMxNzFlZmU5NWUwNjNjNWUyNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAKQEAgLTUyLDkgKzUyLDggQEAgc3Rh
dGljIExhenlOZXZlckRlc3Ryb3llZDxIYXNoU2V0PHN0ZDo6dHVwbGU8dm9pZCosIHZvaWQqPj4+
IGNvZGVMb2NhdGlvbnM7IC8vICgKIAogc3RhdGljIGJvb2wgZmFzdEhhbmRsZXJJbnN0YWxsZWQg
eyBmYWxzZSB9OwogCi1zdGF0aWMgU2lnbmFsQWN0aW9uIHRyYXBIYW5kbGVyKGludCwgc2lnaW5m
b190KiBzaWdJbmZvLCB2b2lkKiB1Y29udGV4dCkKK3N0YXRpYyBTaWduYWxBY3Rpb24gdHJhcEhh
bmRsZXIoU2lnbmFsLCBTaWdJbmZvJiBzaWdJbmZvLCBQbGF0Zm9ybVJlZ2lzdGVycyYgY29udGV4
dCkKIHsKLSAgICBtY29udGV4dF90JiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+
KHVjb250ZXh0KS0+dWNfbWNvbnRleHQ7CiAgICAgdm9pZCogZmF1bHRpbmdJbnN0cnVjdGlvbiA9
IE1hY2hpbmVDb250ZXh0OjppbnN0cnVjdGlvblBvaW50ZXIoY29udGV4dCk7CiAgICAgZGF0YUxv
Z0xuSWYodmVyYm9zZSwgInN0YXJ0aW5nIGhhbmRsZXIgZm9yIGZhdWx0IGF0OiAiLCBSYXdQb2lu
dGVyKGZhdWx0aW5nSW5zdHJ1Y3Rpb24pKTsKIApAQCAtNjQsNyArNjMsNyBAQCBzdGF0aWMgU2ln
bmFsQWN0aW9uIHRyYXBIYW5kbGVyKGludCwgc2lnaW5mb190KiBzaWdJbmZvLCB2b2lkKiB1Y29u
dGV4dCkKICAgICBpZiAoaXNKSVRQQyhmYXVsdGluZ0luc3RydWN0aW9uKSkgewogICAgICAgICBi
b29sIGZhdWx0ZWRJbkFjdGl2ZUZhc3RNZW1vcnkgPSBmYWxzZTsKICAgICAgICAgewotICAgICAg
ICAgICAgdm9pZCogZmF1bHRpbmdBZGRyZXNzID0gc2lnSW5mby0+c2lfYWRkcjsKKyAgICAgICAg
ICAgIHZvaWQqIGZhdWx0aW5nQWRkcmVzcyA9IHNpZ0luZm8uZmF1bHRpbmdBZGRyZXNzOwogICAg
ICAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgImNoZWNraW5nIGZhdWx0aW5nIGFkZHJlc3M6
ICIsIFJhd1BvaW50ZXIoZmF1bHRpbmdBZGRyZXNzKSwgIiBpcyBpbiBhbiBhY3RpdmUgZmFzdCBt
ZW1vcnkiKTsKICAgICAgICAgICAgIGZhdWx0ZWRJbkFjdGl2ZUZhc3RNZW1vcnkgPSBXYXNtOjpN
ZW1vcnk6OmFkZHJlc3NJc0luQWN0aXZlRmFzdE1lbW9yeShmYXVsdGluZ0FkZHJlc3MpOwogICAg
ICAgICB9CkBAIC0xMjQsMTEgKzEyMywxMSBAQCB2b2lkIGVuYWJsZUZhc3RNZW1vcnkoKQogICAg
ICAgICAgICAgcmV0dXJuOwogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZX0ZBU1RfTUVNT1JZKQot
ICAgICAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWw6OkJ1cywgW10gKGludCBzaWduYWws
IHNpZ2luZm9fdCogc2lnSW5mbywgdm9pZCogdWNvbnRleHQpIHsKKyAgICAgICAgaW5zdGFsbFNp
Z25hbEhhbmRsZXIoU2lnbmFsOjpCdXMsIFtdIChTaWduYWwgc2lnbmFsLCBTaWdJbmZvJiBzaWdJ
bmZvLCBQbGF0Zm9ybVJlZ2lzdGVycyYgdWNvbnRleHQpIHsKICAgICAgICAgICAgIHJldHVybiB0
cmFwSGFuZGxlcihzaWduYWwsIHNpZ0luZm8sIHVjb250ZXh0KTsKICAgICAgICAgfSk7CiAKLSAg
ICAgICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFsOjpTZWdWLCBbXSAoaW50IHNpZ25hbCwg
c2lnaW5mb190KiBzaWdJbmZvLCB2b2lkKiB1Y29udGV4dCkgeworICAgICAgICBpbnN0YWxsU2ln
bmFsSGFuZGxlcihTaWduYWw6OlNlZ1YsIFtdIChTaWduYWwgc2lnbmFsLCBTaWdJbmZvJiBzaWdJ
bmZvLCBQbGF0Zm9ybVJlZ2lzdGVycyYgdWNvbnRleHQpIHsKICAgICAgICAgICAgIHJldHVybiB0
cmFwSGFuZGxlcihzaWduYWwsIHNpZ0luZm8sIHVjb250ZXh0KTsKICAgICAgICAgfSk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21NYWNoaW5lVGhyZWFkcy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWFjaGluZVRocmVhZHMuY3BwCmlu
ZGV4IDVhYWM4N2FjYjU3NDdjN2ZjYTJmOTM2ZWM5Y2Y2NzhiNDMxNzgxNzEuLjBhMzY3ZmQ1ZTIy
NTI3ZTljM2M4NzUzNmVjZmQ3MmIxM2RmNzlkNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21NYWNoaW5lVGhyZWFkcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbU1hY2hpbmVUaHJlYWRzLmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2lu
Y2x1ZGUgIk1hY2hpbmVTdGFja01hcmtlci5oIgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3ll
ZC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRNZXNzYWdlLmg+CisjaW5jbHVkZSA8d3RmL3RocmVh
ZHMvU2lnbmFscy5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCkBAIC01
Nyw3ICs1OCw3IEBAIHZvaWQgcmVzZXRJbnN0cnVjdGlvbkNhY2hlT25BbGxUaHJlYWRzKCkKIAog
ICAgIGNvbnN0IERvdWJseUxpbmtlZExpc3Q8TWFjaGluZVRocmVhZHM6Ok1hY2hpbmVUaHJlYWQ+
JiB0aHJlYWRzID0gd2FzbVRocmVhZHMoKS50aHJlYWRzTGlzdEhlYWQobG9ja2VyKTsKICAgICBm
b3IgKGNvbnN0IGF1dG8qIHRocmVhZCA9IHRocmVhZHMuaGVhZCgpOyB0aHJlYWQ7IHRocmVhZCA9
IHRocmVhZC0+bmV4dCgpKSB7Ci0gICAgICAgIHNlbmRNZXNzYWdlKHRocmVhZC0+bV90aHJlYWQu
Z2V0KCksIFtdIChzaWdpbmZvX3QqLCB1Y29udGV4dF90KikgeworICAgICAgICBzZW5kTWVzc2Fn
ZSh0aHJlYWQtPm1fdGhyZWFkLmdldCgpLCBbXSAoY29uc3QgUGxhdGZvcm1SZWdpc3RlcnMmKSB7
CiAgICAgICAgICAgICAvLyBJdCdzIGxpa2VseSB0aGF0IHRoZSBzaWduYWwgaGFuZGxlciB3aWxs
IGFscmVhZHkgcmVzZXQgdGhlIGluc3RydWN0aW9uIGNhY2hlIGJ1dCB3ZSBtaWdodCBhcyB3ZWxs
IGJlIHN1cmUuCiAgICAgICAgICAgICBXVEY6OmNyb3NzTW9kaWZ5aW5nQ29kZUZlbmNlKCk7CiAg
ICAgICAgIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9Db25maWd1cmF0aW9ucy9XVEYueGNj
b25maWcgYi9Tb3VyY2UvV1RGL0NvbmZpZ3VyYXRpb25zL1dURi54Y2NvbmZpZwppbmRleCA0MjFl
ZmQ5NjFjMTQ2OGNkMjBkZGM1YmJmODg5NjIwZWUxY2Y1OGRjLi5hZjE5OWNlYjk1MDZmODk1MGQz
M2E5Y2U0ODA3YmE2ZGJiN2IyN2U1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NvbmZpZ3VyYXRp
b25zL1dURi54Y2NvbmZpZworKysgYi9Tb3VyY2UvV1RGL0NvbmZpZ3VyYXRpb25zL1dURi54Y2Nv
bmZpZwpAQCAtMjcsMyArMjcsNiBAQCBQUk9EVUNUX05BTUUgPSBXVEY7CiAKIEdDQ19TWU1CT0xT
X1BSSVZBVEVfRVhURVJOID0gWUVTOwogU1RSSVBfSU5TVEFMTEVEX1BST0RVQ1QgPSBOTzsKKwor
RVhDTFVERURfU09VUkNFX0ZJTEVfTkFNRVNfID0gTWFjaEV4Y2VwdGlvbnMuZGVmcworRVhDTFVE
RURfU09VUkNFX0ZJTEVfTkFNRVNbc2RrPWlwaG9uZW9zKl0gPSAkKEVYQ0xVREVEX1NPVVJDRV9G
SUxFX05BTUVTXyQoVVNFX0lOVEVSTkFMX1NESykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL1dU
Ri54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCA1ZjQ1Mjg3ZjZlM2M2ODg1YjIyYmEyNzc2Y2ZiYzZhMzMyM2Jk
MDViLi41ODU0NGNjYjYyY2IyMjEyYmFlZTc2ZjRkMmEwMWU4OWI2YjdiMDk0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9X
VEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTY0LDYgKzY0LDcgQEAKIAkJNTIx
ODMwMTJDOTlFNDc2QTg0RUVCRUE4IC8qIFN5bWJvbEltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjcyQkJEQjEwN0ZBNDI0ODg2MTc4QjlFIC8q
IFN5bWJvbEltcGwuY3BwICovOyB9OwogCQk1MzExQkQ1MzFFQTcxQ0FEMDA1MjUyODEgLyogU2ln
bmFscy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MzExQkQ1MTFFQTcxQ0FEMDA1MjUyODEgLyogU2lnbmFscy5jcHAgKi87IH07CiAJCTUzMTFCRDVD
MUVBODIyRjkwMDUyNTI4MSAvKiBUaHJlYWRNZXNzYWdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMTFCRDVCMUVBODIyRjkwMDUyNTI4MSAvKiBU
aHJlYWRNZXNzYWdlLmNwcCAqLzsgfTsKKwkJNTM1MzRGMkExRUMwRTEwRTAwMTQxQjJGIC8qIE1h
Y2hFeGNlcHRpb25zLmRlZnMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MzUzNEYyOTFFQzBFMTBFMDAxNDFCMkYgLyogTWFjaEV4Y2VwdGlvbnMuZGVmcyAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChDbGllbnQsIFNlcnZlciwgKTsgfTsgfTsKIAkJ
NzBBOTkzRkUxQUQ3MTUxMzAwRkE2MTVCIC8qIFN5bWJvbFJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcwQTk5M0ZDMUFENzE1MTMwMEZB
NjE1QiAvKiBTeW1ib2xSZWdpc3RyeS5jcHAgKi87IH07CiAJCTcwRUNBNjBEMUIwMjQyNjgwMDQ0
OTczOSAvKiBBdG9taWNTdHJpbmdJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDcwRUNBNjBBMUIwMjQyNjgwMDQ0OTczOSAvKiBBdG9taWNTdHJp
bmdJbXBsLmNwcCAqLzsgfTsKIAkJN0FGRUM2QjExRUIyMkI1OTAwREFERTM2IC8qIFVVSUQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FGRUM2QjAx
RUIyMkI1OTAwREFERTM2IC8qIFVVSUQuY3BwICovOyB9OwpAQCAtMjk5LDYgKzMwMCw3IEBACiAJ
CTUzMTFCRDU3MUVBN0UxQTEwMDUyNTI4MSAvKiBTaWduYWxzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFNpZ25hbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTMxMUJENTkxRUE4MUE5NjAwNTI1MjgxIC8qIFRocmVhZE1lc3NhZ2UuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVGhyZWFkTWVzc2FnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MzExQkQ1QjFFQTgyMkY5MDA1MjUyODEgLyogVGhyZWFkTWVzc2FnZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaHJlYWRNZXNzYWdlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTM1MzRGMjkxRUMwRTEwRTAwMTQxQjJGIC8q
IE1hY2hFeGNlcHRpb25zLmRlZnMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLm1pZzsgcGF0aCA9IE1h
Y2hFeGNlcHRpb25zLmRlZnM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzOUVCMDYy
MUQ1NTI4NDIwMEM4MkVGNyAvKiBMRUJEZWNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IExFQkRlY29kZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNF
QzI1M0MxRTk1QUQzMDAwMDgzMUI5IC8qIFByaW9yaXR5UXVldWUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUHJpb3JpdHlRdWV1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1NTMwNzFDOTFDNDA0MjcyMDAzODQ4OTggLyogVGlueUxSVUNhY2hlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpbnlMUlVDYWNoZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTAyMyw2ICsxMDI1LDcgQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJ
CTFBNDI4QjhCMUM4Rjg5REQwMDUxRTlFQiAvKiBBcHBLaXRDb21wYXRpYmlsaXR5RGVjbGFyYXRp
b25zLmggKi8sCiAJCQkJMUFDQUREODIxODg0NDgwMTAwRDhCNzFEIC8qIERlcHJlY2F0ZWRTeW1i
b2xzVXNlZEJ5U2FmYXJpLm1tICovLAorCQkJCTUzNTM0RjI5MUVDMEUxMEUwMDE0MUIyRiAvKiBN
YWNoRXhjZXB0aW9ucy5kZWZzICovLAogCQkJCUE4QTQ3MkM1MTUxQTgyNUEwMDQxMjNGRiAvKiBN
YWluVGhyZWFkTWFjLm1tICovLAogCQkJKTsKIAkJCXBhdGggPSBtYWM7CkBAIC0xMzQ2LDYgKzEz
NDksNyBAQAogCQkJCTE0M0Y2MTFGMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUEzQjcyNUVDOTg3NDQ2QUQ5M0YxQTQ0MCAvKiBSYW5kb21EZXZpY2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0MTQxNTFBODI1QjAwNDEyM0ZGIC8qIFJhbmRv
bU51bWJlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MzUzNEYyQTFFQzBFMTBFMDAxNDFCMkYg
LyogTWFjaEV4Y2VwdGlvbnMuZGVmcyBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDFBMTUxQTgy
NUIwMDQxMjNGRiAvKiBSZWZDb3VudGVkTGVha0NvdW50ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMkNERUQwRjMxODExNUM4NTAwNERCQTcwIC8qIFJ1bkxvb3AuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMkNERUQwRUYxODExNUMzODAwNERCQTcwIC8qIFJ1bkxvb3BDRi5jcHAgaW4gU291cmNl
cyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmggYi9Tb3VyY2UvV1RG
L3d0Zi9QbGF0Zm9ybS5oCmluZGV4IDY4NTRhODFlMzk3MjcwNjcwMzRkMDVkYjM5OGE0NzBjMTQy
ODQyNzYuLjM2Mzg4Mzk1ZDRmNDNiNDY1Mzg5ZWJjOTgwMmZiYjRkOTBkMjRiN2IgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZv
cm0uaApAQCAtNjYzLDYgKzY2MywxMCBAQAogI2RlZmluZSBIQVZFX1JFQURMSU5FIDEKICNkZWZp
bmUgSEFWRV9TWVNfVElNRUJfSCAxCiAKKyNpZiBfX2hhc19pbmNsdWRlKDxtYWNoL21hY2hfZXhj
LmRlZnM+KSAmJiAhKFBMQVRGT1JNKFdBVENIT1MpIHx8IFBMQVRGT1JNKEFQUExFVFYpKQorI2Rl
ZmluZSBIQVZFX01BQ0hfRVhDRVBUSU9OUyAxCisjZW5kaWYKKwogI2lmICFQTEFURk9STShHVEsp
CiAjZGVmaW5lIFVTRV9BQ0NFTEVSQVRFIDEKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvUGxhdGZvcm1SZWdpc3RlcnMuaCBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtUmVnaXN0
ZXJzLmgKaW5kZXggZDViNWFiYzIyMWJiYWQ4Mjk3NjE5M2VjZTUxYzFjNzYxNzVkYjA2ZC4uODRi
ZDg5Mzc0OTlkYTk5ZWFhODZiNzM2OTVmN2M1YjgxYWMyNjBjZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvUGxhdGZvcm1SZWdpc3RlcnMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9y
bVJlZ2lzdGVycy5oCkBAIC0yNiw5ICsyNiwxMSBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRl
IDx3dGYvUGxhdGZvcm0uaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKICNpZiBP
UyhEQVJXSU4pCiAjaW5jbHVkZSA8bWFjaC90aHJlYWRfYWN0Lmg+CisjaW5jbHVkZSA8c2lnbmFs
Lmg+CiAjZWxpZiBPUyhXSU5ET1dTKQogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNlbHNlCkBAIC01
NSw2ICs1NywxMSBAQCB0eXBlZGVmIGFybV90aHJlYWRfc3RhdGU2NF90IFBsYXRmb3JtUmVnaXN0
ZXJzOwogI2Vycm9yIFVua25vd24gQXJjaGl0ZWN0dXJlCiAjZW5kaWYKIAoraW5saW5lIFBsYXRm
b3JtUmVnaXN0ZXJzJiByZWdpc3RlcnNGcm9tVUNvbnRleHQodWNvbnRleHRfdCogdWNvbnRleHQp
Cit7CisgICAgcmV0dXJuIHVjb250ZXh0LT51Y19tY29udGV4dC0+X19zczsKK30KKwogI2VsaWYg
T1MoV0lORE9XUykKIAogdXNpbmcgUGxhdGZvcm1SZWdpc3RlcnMgPSBDT05URVhUOwpAQCAtNjUs
NiArNzIsMTEgQEAgc3RydWN0IFBsYXRmb3JtUmVnaXN0ZXJzIHsKICAgICBtY29udGV4dF90IG1h
Y2hpbmVDb250ZXh0OwogfTsKIAoraW5saW5lIFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnNG
cm9tVUNvbnRleHQodWNvbnRleHRfdCogdWNvbnRleHQpCit7CisgICAgcmV0dXJuICpiaXR3aXNl
X2Nhc3Q8UGxhdGZvcm1SZWdpc3RlcnMqPigmdWNvbnRleHQtPnVjX21jb250ZXh0KTsKK30KKwog
I2Vsc2UKIAogc3RydWN0IFBsYXRmb3JtUmVnaXN0ZXJzIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL1N0YWNrQm91bmRzLmggYi9Tb3VyY2UvV1RGL3d0Zi9TdGFja0JvdW5kcy5oCmluZGV4
IDU1NDYwNGYyYWI0ODRjN2NmNzFlZTM4NjMwY2ViNGM3OWMzM2U5NzIuLmNkNjJjMTQ4YTZjN2Vm
Yzk1MTdhOGIwOWI4YTMyYzdmZTE5MGNkZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1N0
YWNrQm91bmRzLmgKKysrIGIvU291cmNlL1dURi93dGYvU3RhY2tCb3VuZHMuaApAQCAtNTQsNyAr
NTQsNiBAQCBwdWJsaWM6CiAgICAgICAgIDogbV9vcmlnaW4ob3JpZ2luKQogICAgICAgICAsIG1f
Ym91bmQoZW5kKQogICAgIHsKLSAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIH0KIAog
ICAgIHZvaWQqIG9yaWdpbigpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJl
YWRIb2xkZXIuY3BwIGIvU291cmNlL1dURi93dGYvVGhyZWFkSG9sZGVyLmNwcAppbmRleCAzMGIy
MjdjZGI4YWM1MjYwNzUwYjQ3ZDQ4MmFiYzJkNTViZTNhYzk0Li45NmQ5MWI1Yjg3ZGRmOTc4ODA1
ZGI2ZWIxZjYwZGMwMGUxNDlhNDg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRI
b2xkZXIuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlci5jcHAKQEAgLTM0LDEy
ICszNCwxNyBAQAogCiAjaW5jbHVkZSAiVGhyZWFkaW5nLmgiCiAKKyNpbmNsdWRlIDx3dGYvdGhy
ZWFkcy9TaWduYWxzLmg+CisKIG5hbWVzcGFjZSBXVEYgewogCiBUaHJlYWRTcGVjaWZpY0tleSBU
aHJlYWRIb2xkZXI6Om1fa2V5ID0gSW52YWxpZFRocmVhZFNwZWNpZmljS2V5OwogCiBUaHJlYWRI
b2xkZXI6On5UaHJlYWRIb2xkZXIoKQogeworI2lmIEhBVkUoTUFDSF9FWENFUFRJT05TKQorICAg
IHJlbW92ZVRocmVhZCgmbV90aHJlYWQuZ2V0KCkpOworI2VuZGlmCiAgICAgbV90aHJlYWQtPmRp
ZEV4aXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5j
cHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRNZXNzYWdlLmNwcAppbmRleCBmMTRiYzQ1ZDM2MTRj
N2M2NjM1ZWIxN2FiMGUyNzI4MTZhMTM3M2RkLi41YTVhZGE3NjUxNGViZjk2OWY1MjYyYzZmNDI2
ZGVkODkxNWJkZDc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRNZXNzYWdlLmNw
cAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRNZXNzYWdlLmNwcApAQCAtMzYsNiArMzYsOSBA
QAogI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KICNpbmNsdWRlIDx3dGYvdGhyZWFkcy9TaWduYWxz
Lmg+CiAKKyNpZiBIQVZFKE1BQ0hfRVhDRVBUSU9OUykKKyNpbmNsdWRlIDxtYWNoL3RocmVhZF9h
Y3QuaD4KKyNlbmRpZgogCiBuYW1lc3BhY2UgV1RGIHsKIApAQCAtODMsMTIgKzg2LDEyIEBAIHZv
aWQgaW5pdGlhbGl6ZVRocmVhZE1lc3NhZ2VzKCkKIH0KIAogU1VQUFJFU1NfQVNBTgotTWVzc2Fn
ZVN0YXR1cyBzZW5kTWVzc2FnZVNjb3BlZChUaHJlYWQmIHRocmVhZCwgY29uc3QgVGhyZWFkTWVz
c2FnZSYgbWVzc2FnZSkKK3N0YXRpYyBNZXNzYWdlU3RhdHVzIHNlbmRNZXNzYWdlU2lnbmFsKFRo
cmVhZCYgdGhyZWFkLCBjb25zdCBUaHJlYWRNZXNzYWdlJiBtZXNzYWdlKQogewogICAgIGNvbnN0
ZXhwciBTaWduYWwgc2lnbmFsID0gU2lnbmFsOjpVc3I7CiAgICAgc3RhdGljIHN0ZDo6b25jZV9m
bGFnIG9uY2U7CiAgICAgc3RkOjpjYWxsX29uY2Uob25jZSwgW10gewotICAgICAgICBpbnN0YWxs
U2lnbmFsSGFuZGxlcihzaWduYWwsIFtdIChpbnQsIHNpZ2luZm9fdCogaW5mbywgdm9pZCogdWFw
KSB7CisgICAgICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKHNpZ25hbCwgW10gKFNpZ25hbCwgU2ln
SW5mbyYsIFBsYXRmb3JtUmVnaXN0ZXJzJiBjb250ZXh0KSB7CiAgICAgICAgICAgICBUaHJlYWQq
IHRocmVhZCA9IFRocmVhZDo6Y3VycmVudE1heUJlTnVsbCgpOwogCiAgICAgICAgICAgICBpZiAo
IXRocmVhZCkgewpAQCAtOTgsNyArMTAxLDcgQEAgTWVzc2FnZVN0YXR1cyBzZW5kTWVzc2FnZVNj
b3BlZChUaHJlYWQmIHRocmVhZCwgY29uc3QgVGhyZWFkTWVzc2FnZSYgbWVzc2FnZSkKIAogICAg
ICAgICAgICAgLy8gTm9kZSBzaG91bGQgYmUgZGVsZXRlZCBpbiB0aGUgc2VuZGVyIHRocmVhZC4g
RGVsZXRpbmcgTm9kZXMgaW4gc2lnbmFsIGhhbmRsZXIgY2F1c2VzIGRlYWQgbG9jay4KICAgICAg
ICAgICAgIHRocmVhZC0+dGhyZWFkTWVzc2FnZXMoKS5jb25zdW1lQWxsV2l0aE5vZGUoWyZdIChU
aHJlYWRNZXNzYWdlRGF0YSogZGF0YSwgTm9kZSogbm9kZSkgewotICAgICAgICAgICAgICAgIGRh
dGEtPm1lc3NhZ2UoaW5mbywgc3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+KHVhcCkpOworICAgICAg
ICAgICAgICAgIGRhdGEtPm1lc3NhZ2UoY29udGV4dCk7CiAgICAgICAgICAgICAgICAgLy8gQnkg
c2V0dGluZyByYW4gdmFyaWFibGUsICgxKSB0aGUgc2VuZGVyIGFja25vd2xlZGdlcyB0aGUgY29t
cGxldGlvbiBhbmQKICAgICAgICAgICAgICAgICAvLyAoMikgZ2V0cyB0aGUgTm9kZSB0byBiZSBk
ZWxldGVkLgogICAgICAgICAgICAgICAgIGRhdGEtPnJhbi5zdG9yZShub2RlKTsKQEAgLTE1Niw2
ICsxNTksNjIgQEAgTWVzc2FnZVN0YXR1cyBzZW5kTWVzc2FnZVNjb3BlZChUaHJlYWQmIHRocmVh
ZCwgY29uc3QgVGhyZWFkTWVzc2FnZSYgbWVzc2FnZSkKICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogfQogCisjaWYgSEFWRShNQUNIX0VYQ0VQVElPTlMpCitzdGF0aWMgTWVzc2Fn
ZVN0YXR1cyBzZW5kTWVzc2FnZU1hY2goVGhyZWFkJiB0aHJlYWQsIGNvbnN0IFRocmVhZE1lc3Nh
Z2UmIG1lc3NhZ2UpCit7CisgICAgc3RhdGljIFN0YXRpY0xvY2sgbWVzc2FnZUxvY2s7CisgICAg
YXV0byBsb2NraG9sZGVyID0gaG9sZExvY2sobWVzc2FnZUxvY2spOworCisgICAgYXV0byByZXN1
bHQgPSB0aHJlYWQuc3VzcGVuZCgpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4g
TWVzc2FnZVN0YXR1czo6VGhyZWFkRXhpdGVkOworCisjaWYgQ1BVKFg4NikKKyAgICB1bnNpZ25l
ZCB1c2VyQ291bnQgPSBzaXplb2YoUGxhdGZvcm1SZWdpc3RlcnMpIC8gc2l6ZW9mKGludCk7Cisg
ICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IGkzODZfVEhSRUFEX1NUQVRFOworI2Vs
aWYgQ1BVKFg4Nl82NCkKKyAgICB1bnNpZ25lZCB1c2VyQ291bnQgPSB4ODZfVEhSRUFEX1NUQVRF
NjRfQ09VTlQ7CisgICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IHg4Nl9USFJFQURf
U1RBVEU2NDsKKyNlbGlmIENQVShBUk0pCisgICAgdW5zaWduZWQgdXNlckNvdW50ID0gQVJNX1RI
UkVBRF9TVEFURV9DT1VOVDsKKyAgICB0aHJlYWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9yID0gQVJN
X1RIUkVBRF9TVEFURTsKKyNlbGlmIENQVShBUk02NCkKKyAgICB1bnNpZ25lZCB1c2VyQ291bnQg
PSBBUk1fVEhSRUFEX1NUQVRFNjRfQ09VTlQ7CisgICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZs
YXZvciA9IEFSTV9USFJFQURfU1RBVEU2NDsKKyNlbHNlCisjZXJyb3IgVW5rbm93biBBcmNoaXRl
Y3R1cmUKKyNlbmRpZgorCisgICAgUGxhdGZvcm1SZWdpc3RlcnMgcmVnaXN0ZXJzOworICAgIHRo
cmVhZF9zdGF0ZV90IHN0YXRlID0gcmVpbnRlcnByZXRfY2FzdDx0aHJlYWRfc3RhdGVfdD4oJnJl
Z2lzdGVycyk7CisgICAgdGhyZWFkX2dldF9zdGF0ZSh0aHJlYWQubWFjaFRocmVhZCgpLCBmbGF2
b3IsIHN0YXRlLCAmdXNlckNvdW50KTsKKworICAgIG1lc3NhZ2UocmVnaXN0ZXJzKTsKKworICAg
IHRocmVhZF9zZXRfc3RhdGUodGhyZWFkLm1hY2hUaHJlYWQoKSwgZmxhdm9yLCAodGhyZWFkX3N0
YXRlX3QpJnJlZ2lzdGVycywgdXNlckNvdW50KTsKKworICAgIHRocmVhZC5yZXN1bWUoKTsKKyAg
ICByZXR1cm4gTWVzc2FnZVN0YXR1czo6TWVzc2FnZVJhbjsKK30KKworc3RhdGljIGJvb2wgdXNl
TWFjaCA9IGZhbHNlOwordm9pZCBkZWxpdmVyTWVzc2FnZXNVc2luZ01hY2goKQoreworICAgIHVz
ZU1hY2ggPSB0cnVlOworfQorCisjZW5kaWYgLy8gSEFWRShNQUNIX0VYQ0VQVElPTlMpCisKK01l
c3NhZ2VTdGF0dXMgc2VuZE1lc3NhZ2VTY29wZWQoVGhyZWFkJiB0aHJlYWQsIGNvbnN0IFRocmVh
ZE1lc3NhZ2UmIG1lc3NhZ2UpCit7CisjaWYgSEFWRShNQUNIX0VYQ0VQVElPTlMpCisgICAgaWYg
KHVzZU1hY2gpCisgICAgICAgIHJldHVybiBzZW5kTWVzc2FnZU1hY2godGhyZWFkLCBtZXNzYWdl
KTsKKyNlbmRpZgorICAgIHJldHVybiBzZW5kTWVzc2FnZVNpZ25hbCh0aHJlYWQsIG1lc3NhZ2Up
OworfQorCisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiAjZW5kaWYgLy8gVVNFKFBUSFJFQURTKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5oIGIvU291cmNlL1dURi93
dGYvVGhyZWFkTWVzc2FnZS5oCmluZGV4IDlhZTUzZjI5Y2Y3ZThmYjAwZWY5MjExZDE2Y2UyY2Rl
ZDYwM2VjMWIuLjMwMDQ3MmIzZTcxYzQyZWM4OTg3NGEzZGUwZmYzNzYxY2E5NjkxMGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZE1lc3NhZ2UuaAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi9UaHJlYWRNZXNzYWdlLmgKQEAgLTM2LDcgKzM2LDcgQEAgbmFtZXNwYWNlIFdURiB7CiB2b2lk
IGluaXRpYWxpemVUaHJlYWRNZXNzYWdlcygpOwogCiBjbGFzcyBUaHJlYWRNZXNzYWdlRGF0YTsK
LXVzaW5nIFRocmVhZE1lc3NhZ2UgPSBTY29wZWRMYW1iZGE8dm9pZChzaWdpbmZvX3QqLCB1Y29u
dGV4dF90Kik+OwordXNpbmcgVGhyZWFkTWVzc2FnZSA9IFNjb3BlZExhbWJkYTx2b2lkKFBsYXRm
b3JtUmVnaXN0ZXJzJik+OwogCiBlbnVtIGNsYXNzIE1lc3NhZ2VTdGF0dXMgewogICAgIE1lc3Nh
Z2VSYW4sCkBAIC01MSwxMCArNTEsMTQgQEAgTWVzc2FnZVN0YXR1cyBzZW5kTWVzc2FnZVNjb3Bl
ZChUaHJlYWQmLCBjb25zdCBUaHJlYWRNZXNzYWdlJik7CiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPgogTWVzc2FnZVN0YXR1cyBzZW5kTWVzc2FnZShUaHJlYWQmIHRhcmdldFRocmVhZCwgY29u
c3QgRnVuY3RvciYgZnVuYykKIHsKLSAgICBhdXRvIGxhbWJkYSA9IHNjb3BlZExhbWJkYVJlZjx2
b2lkKHNpZ2luZm9fdCosIHVjb250ZXh0X3QqKT4oZnVuYyk7CisgICAgYXV0byBsYW1iZGEgPSBz
Y29wZWRMYW1iZGFSZWY8dm9pZChQbGF0Zm9ybVJlZ2lzdGVycyYpPihmdW5jKTsKICAgICByZXR1
cm4gc2VuZE1lc3NhZ2VTY29wZWQodGFyZ2V0VGhyZWFkLCBsYW1iZGEpOwogfQogCisjaWYgSEFW
RShNQUNIX0VYQ0VQVElPTlMpCit2b2lkIGRlbGl2ZXJNZXNzYWdlc1VzaW5nTWFjaCgpOworI2Vu
ZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6OnNlbmRNZXNzYWdlOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmggYi9Tb3VyY2UvV1RGL3d0Zi9UaHJl
YWRpbmcuaAppbmRleCBkMmU1MzZkZjdhODY5NmQ4ZTZiOTViYTQzZTE3M2QzYjU1MGJmMTZhLi4z
NTE0ZThjMDlmMGZjOTRkNTM0YmUyZjNiNmU3YzQ5NTBlMGJjZjA1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi9UaHJlYWRpbmcuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaApA
QCAtMTM4LDYgKzEzOCwxMCBAQCBwdWJsaWM6CiAKICNpZiBVU0UoUFRIUkVBRFMpCiAgICAgTG9j
a2xlc3NCYWc8VGhyZWFkTWVzc2FnZURhdGEqPiYgdGhyZWFkTWVzc2FnZXMoKSB7IHJldHVybiBt
X3RocmVhZE1lc3NhZ2VzOyB9CisKKyNpZiBPUyhEQVJXSU4pCisgICAgbWFjaF9wb3J0X3QgbWFj
aFRocmVhZCgpIHsgcmV0dXJuIG1fcGxhdGZvcm1UaHJlYWQ7IH0KKyNlbmRpZgogI2VuZGlmCiAK
IHByb3RlY3RlZDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL21hYy9NYWNoRXhjZXB0aW9u
cy5kZWZzIGIvU291cmNlL1dURi93dGYvbWFjL01hY2hFeGNlcHRpb25zLmRlZnMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNDIwNTc0MmE0ZWQ1MDBmODA2NGZlZWI0OTU1YTdjOTcwZDk5YWYwYgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XVEYvd3RmL21hYy9NYWNoRXhjZXB0aW9ucy5kZWZzCkBAIC0wLDAgKzEs
MjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSA8bWFjaC9tYWNoX2V4Yy5kZWZzPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGhy
ZWFkcy9TaWduYWxzLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3RocmVhZHMvU2lnbmFscy5jcHAKaW5k
ZXggODU1YjI4YjMxNzIxNzI3Y2YxZjQzMWE5MThhMjUxZGMyZTZhM2RmYy4uN2ZlZjY1NTIwZWMz
NDUyZThiOWI5YjVjM2QxZDMxODhjNjU4YmEzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYv
dGhyZWFkcy9TaWduYWxzLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90aHJlYWRzL1NpZ25hbHMu
Y3BwCkBAIC0yOCwyMSArMjgsMjY0IEBACiAKICNpZiBVU0UoUFRIUkVBRFMpCiAKKyNpZiBIQVZF
KE1BQ0hfRVhDRVBUSU9OUykKK2V4dGVybiAiQyIgeworI2luY2x1ZGUgIk1hY2hFeGNlcHRpb25z
U2VydmVyLmgiCit9OworI2VuZGlmCisKICNpbmNsdWRlIDxjc3RkaW8+CiAjaW5jbHVkZSA8bXV0
ZXg+CiAjaW5jbHVkZSA8c2lnbmFsLmg+CisKKyNpZiBIQVZFKE1BQ0hfRVhDRVBUSU9OUykKKyNp
bmNsdWRlIDxtYWNoL21hY2guaD4KKyNpbmNsdWRlIDxtYWNoL3RocmVhZF9hY3QuaD4KKyNlbmRp
ZgorCiAjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgor
I2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL0xvY2tsZXNzQmFnLmg+CiAj
aW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZE1lc3Nh
Z2UuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKIAogbmFtZXNwYWNlIFdURiB7CiAK
KyAgICAKIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8TG9ja2xlc3NCYWc8U2lnbmFsSGFuZGxl
cj4+IGhhbmRsZXJzW3N0YXRpY19jYXN0PHNpemVfdD4oU2lnbmFsOjpOdW1iZXJPZlNpZ25hbHMp
XSA9IHsgfTsKLXN0YXRpYyBzdHJ1Y3Qgc2lnYWN0aW9uIG9sZEFjdGlvbnNbc3RhdGljX2Nhc3Q8
c2l6ZV90PihTaWduYWw6Ok51bWJlck9mU2lnbmFscyldOwogc3RhdGljIHN0ZDo6b25jZV9mbGFn
IGluaXRpYWxpemVPbmNlRmxhZ3Nbc3RhdGljX2Nhc3Q8c2l6ZV90PihTaWduYWw6Ok51bWJlck9m
U2lnbmFscyldOworc3RhdGljIHN0cnVjdCBzaWdhY3Rpb24gb2xkQWN0aW9uc1tzdGF0aWNfY2Fz
dDxzaXplX3Q+KFNpZ25hbDo6TnVtYmVyT2ZTaWduYWxzKV07CisKKyNpZiBIQVZFKE1BQ0hfRVhD
RVBUSU9OUykKK3N0YXRpYyBtYWNoX3BvcnRfdCBleGNlcHRpb25Qb3J0Oworc3RhdGljIGNvbnN0
ZXhwciBzaXplX3QgbWF4TWVzc2FnZVNpemUgPSAxICogS0I7CisKK3N0YXRpYyB2b2lkIHN0YXJ0
TWFjaEV4Y2VwdGlvbkhhbmRsZXJUaHJlYWQoKQoreworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxh
ZyBvbmNlOworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2UsIFtdIHsKKyAgICAgICAgaWYgKG1hY2hf
cG9ydF9hbGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigpLCBNQUNIX1BPUlRfUklHSFRfUkVDRUlWRSwg
JmV4Y2VwdGlvblBvcnQpICE9IEtFUk5fU1VDQ0VTUykKKyAgICAgICAgICAgIENSQVNIKCk7CisK
KyAgICAgICAgaWYgKG1hY2hfcG9ydF9pbnNlcnRfcmlnaHQobWFjaF90YXNrX3NlbGYoKSwgZXhj
ZXB0aW9uUG9ydCwgZXhjZXB0aW9uUG9ydCwgTUFDSF9NU0dfVFlQRV9NQUtFX1NFTkQpIT0gS0VS
Tl9TVUNDRVNTKQorICAgICAgICAgICAgQ1JBU0goKTsKKworICAgICAgICAvLyBGSVhNRTogVGhp
cyBzaG91bGQgdXNlIGEgZGlzcGF0Y2ggcXVldWUuCisgICAgICAgICh2b2lkKVRocmVhZDo6Y3Jl
YXRlKAorICAgICAgICAgICAgIldURiBNYWNoIEV4Y2VwdGlvbiBUaHJlYWQiLCBbXSAoKSB7Cisg
ICAgICAgICAgICAgICAgdW5pb24gTWVzc2FnZSB7CisgICAgICAgICAgICAgICAgICAgIG1hY2hf
bXNnX2hlYWRlcl90IGhlYWRlcjsKKyAgICAgICAgICAgICAgICAgICAgY2hhciBkYXRhW21heE1l
c3NhZ2VTaXplXTsKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIE1lc3NhZ2Ug
bWVzc2FnZUhlYWRlckluOworICAgICAgICAgICAgICAgIE1lc3NhZ2UgbWVzc2FnZUhlYWRlck91
dDsKKworICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgICAg
IGtlcm5fcmV0dXJuX3QgbWVzc2FnZVJlc3VsdCA9IG1hY2hfbXNnKCZtZXNzYWdlSGVhZGVySW4u
aGVhZGVyLCBNQUNIX1JDVl9NU0csIDAsIG1heE1lc3NhZ2VTaXplLCBleGNlcHRpb25Qb3J0LCBN
QUNIX01TR19USU1FT1VUX05PTkUsIE1BQ0hfUE9SVF9OVUxMKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKG1lc3NhZ2VSZXN1bHQgPT0gS0VSTl9TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIW1hY2hfZXhjX3NlcnZlcigmbWVzc2FnZUhlYWRlckluLmhlYWRlciwgJm1l
c3NhZ2VIZWFkZXJPdXQuaGVhZGVyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUkFT
SCgpOworCisgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlUmVzdWx0ID0gbWFjaF9tc2co
Jm1lc3NhZ2VIZWFkZXJPdXQuaGVhZGVyLCBNQUNIX1NFTkRfTVNHLCBtZXNzYWdlSGVhZGVyT3V0
LmhlYWRlci5tc2doX3NpemUsIDAsIG1lc3NhZ2VIZWFkZXJPdXQuaGVhZGVyLm1zZ2hfbG9jYWxf
cG9ydCwgMCwgTUFDSF9QT1JUX05VTEwpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQobWVzc2FnZVJlc3VsdCA9PSBLRVJOX1NVQ0NFU1MpOworICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiRmFpbGVkIHRv
IHJlY2VpdmUgbWFjaCBtZXNzYWdlIGR1ZSB0byAiLCBtYWNoX2Vycm9yX3N0cmluZyhtZXNzYWdl
UmVzdWx0KSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9KS5sZWFrUmVmKCk7CisgICAg
fSk7Cit9CisKK3N0YXRpYyBTaWduYWwgZnJvbU1hY2hFeGNlcHRpb24oZXhjZXB0aW9uX3R5cGVf
dCB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgRVhDX0JBRF9BQ0NFU1M6
IHJldHVybiBTaWduYWw6OlNlZ1Y7CisgICAgY2FzZSBFWENfQkFEX0lOU1RSVUNUSU9OOiByZXR1
cm4gU2lnbmFsOjpJbGw7CisgICAgY2FzZSBFWENfQlJFQUtQT0lOVDogcmV0dXJuIFNpZ25hbDo6
VHJhcDsKKyAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIFNpZ25hbDo6VW5r
bm93bjsKK30KKworc3RhdGljIGV4Y2VwdGlvbl9tYXNrX3QgdG9NYWNoTWFzayhTaWduYWwgc2ln
bmFsKQoreworICAgIHN3aXRjaCAoc2lnbmFsKSB7CisgICAgY2FzZSBTaWduYWw6OlNlZ1Y6IHJl
dHVybiBFWENfTUFTS19CQURfQUNDRVNTOworICAgIGNhc2UgU2lnbmFsOjpJbGw6IHJldHVybiBF
WENfTUFTS19CQURfSU5TVFJVQ1RJT047CisgICAgY2FzZSBTaWduYWw6OlRyYXA6IHJldHVybiBF
WENfTUFTS19CUkVBS1BPSU5UOworICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKyAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitleHRlcm4gIkMiIHsKKworLy8gV2UgbmVl
ZCB0byBpbXBsZW1lbnQgc3R1YnMgZm9yIGNhdGNoX21hY2hfZXhjZXB0aW9uX3JhaXNlIGFuZCBj
YXRjaF9tYWNoX2V4Y2VwdGlvbl9yYWlzZV9zdGF0ZV9pZGVudGl0eS4KKy8vIFRoZSBNaUcgZ2Vu
ZXJhdGVkIGZpbGUgd2lsbCBmYWlsIHRvIGxpbmsgb3RoZXJ3aXNlLCBldmVuIHRob3VnaCB3ZSBk
b24ndCB1c2UgdGhlIGZ1bmN0aW9ucy4gT25seSB0aGUKKy8vIGNhdGNoX21hY2hfZXhjZXB0aW9u
X3JhaXNlX3N0YXRlIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgYmVjYXVzZSB3ZSBwYXNzIEVY
Q0VQVElPTl9TVEFURSB0bworLy8gdGhyZWFkX3NldF9leGNlcHRpb25fcG9ydHMuCitrZXJuX3Jl
dHVybl90IGNhdGNoX21hY2hfZXhjZXB0aW9uX3JhaXNlKG1hY2hfcG9ydF90LCBtYWNoX3BvcnRf
dCwgbWFjaF9wb3J0X3QsIGV4Y2VwdGlvbl90eXBlX3QsIG1hY2hfZXhjZXB0aW9uX2RhdGFfdCwg
bWFjaF9tc2dfdHlwZV9udW1iZXJfdCkKK3sKKyAgICBkYXRhTG9nTG4oIldlIHNob3VsZCBub3Qg
aGF2ZSBjYWxsZWQgY2F0Y2hfZXhjZXB0aW9uX3JhaXNlKCksIHBsZWFzZSBmaWxlIGEgYnVnIGF0
IGJ1Z3Mud2Via2l0Lm9yZyIpOworICAgIHJldHVybiBLRVJOX0ZBSUxVUkU7Cit9CisKK2tlcm5f
cmV0dXJuX3QgY2F0Y2hfbWFjaF9leGNlcHRpb25fcmFpc2Vfc3RhdGVfaWRlbnRpdHkobWFjaF9w
b3J0X3QsIG1hY2hfcG9ydF90LCBtYWNoX3BvcnRfdCwgZXhjZXB0aW9uX3R5cGVfdCwgbWFjaF9l
eGNlcHRpb25fZGF0YV90LCBtYWNoX21zZ190eXBlX251bWJlcl90LCBpbnQqLCB0aHJlYWRfc3Rh
dGVfdCwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCwgdGhyZWFkX3N0YXRlX3QsICBtYWNoX21zZ190
eXBlX251bWJlcl90KikKK3sKKyAgICBkYXRhTG9nTG4oIldlIHNob3VsZCBub3QgaGF2ZSBjYWxs
ZWQgY2F0Y2hfbWFjaF9leGNlcHRpb25fcmFpc2Vfc3RhdGVfaWRlbnRpdHksIHBsZWFzZSBmaWxl
IGEgYnVnIGF0IGJ1Z3Mud2Via2l0Lm9yZyIpOworICAgIHJldHVybiBLRVJOX0ZBSUxVUkU7Cit9
CisKK2tlcm5fcmV0dXJuX3QgY2F0Y2hfbWFjaF9leGNlcHRpb25fcmFpc2Vfc3RhdGUoCisgICAg
bWFjaF9wb3J0X3QgcG9ydCwKKyAgICBleGNlcHRpb25fdHlwZV90IGV4Y2VwdGlvblR5cGUsCisg
ICAgY29uc3QgbWFjaF9leGNlcHRpb25fZGF0YV90IGV4Y2VwdGlvbkRhdGEsCisgICAgbWFjaF9t
c2dfdHlwZV9udW1iZXJfdCBkYXRhQ291bnQsCisgICAgaW50KiBzdGF0ZUZsYXZvciwKKyAgICBj
b25zdCB0aHJlYWRfc3RhdGVfdCBpblN0YXRlLAorICAgIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3Qg
aW5TdGF0ZUNvdW50LAorICAgIHRocmVhZF9zdGF0ZV90IG91dFN0YXRlLAorICAgIG1hY2hfbXNn
X3R5cGVfbnVtYmVyX3QqIG91dFN0YXRlQ291bnQpCit7CisgICAgUkVMRUFTRV9BU1NFUlQocG9y
dCA9PSBleGNlcHRpb25Qb3J0KTsKKyAgICBTaWduYWwgc2lnbmFsID0gZnJvbU1hY2hFeGNlcHRp
b24oZXhjZXB0aW9uVHlwZSk7CisgICAgZGF0YUxvZ0xuKCJyZWNlaXZlZFNpZ25hbCAiLCBleGNl
cHRpb25UeXBlKTsKKyAgICBkYXRhTG9nTG4oIlRocmVhZDogIiwgZXhjZXB0aW9uRGF0YVswXSk7
CisgICAgUkVMRUFTRV9BU1NFUlQoc2lnbmFsICE9IFNpZ25hbDo6VW5rbm93bik7CisKKyAgICBt
ZW1jcHkob3V0U3RhdGUsIGluU3RhdGUsIGluU3RhdGVDb3VudCAqIHNpemVvZihpblN0YXRlWzBd
KSk7CisgICAgKm91dFN0YXRlQ291bnQgPSBpblN0YXRlQ291bnQ7CisKKyNpZiBDUFUoWDg2XzY0
KQorICAgIFJFTEVBU0VfQVNTRVJUKCpzdGF0ZUZsYXZvciA9PSB4ODZfVEhSRUFEX1NUQVRFKTsK
KyAgICBQbGF0Zm9ybVJlZ2lzdGVycyYgcmVnaXN0ZXJzID0gcmVpbnRlcnByZXRfY2FzdDx4ODZf
dGhyZWFkX3N0YXRlX3QqPihvdXRTdGF0ZSktPnV0cy50czY0OworI2VsaWYgQ1BVKFg4NikKKyAg
ICBSRUxFQVNFX0FTU0VSVCgqc3RhdGVGbGF2b3IgPT0geDg2X1RIUkVBRF9TVEFURSk7CisgICAg
UGxhdGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8eDg2X3RocmVh
ZF9zdGF0ZV90Kj4ob3V0U3RhdGUpLT51dHMudHMzMjsKKyNlbGlmIENQVShBUk02NCkKKyAgICBS
RUxFQVNFX0FTU0VSVCgqc3RhdGVGbGF2b3IgPT0gQVJNX1RIUkVBRF9TVEFURSk7CisgICAgUGxh
dGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8YXJtX3VuaWZpZWRf
dGhyZWFkX3N0YXRlKj4ob3V0U3RhdGUpLT50c182NDsKKyNlbGlmIENQVShBUk0pCisgICAgUkVM
RUFTRV9BU1NFUlQoKnN0YXRlRmxhdm9yID09IEFSTV9USFJFQURfU1RBVEUpOworICAgIFBsYXRm
b3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMgPSByZWludGVycHJldF9jYXN0PGFybV91bmlmaWVkX3Ro
cmVhZF9zdGF0ZSo+KG91dFN0YXRlKS0+dHNfMzI7CisjZW5kaWYKKworICAgIFNpZ0luZm8gaW5m
bzsKKyAgICBpZiAoc2lnbmFsID09IFNpZ25hbDo6U2VnVikgeworICAgICAgICBBU1NFUlRfVU5V
U0VEKGRhdGFDb3VudCwgZGF0YUNvdW50ID09IDIpOworICAgICAgICBpbmZvLmZhdWx0aW5nQWRk
cmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGV4Y2VwdGlvbkRhdGFbMV0pOworICAgIH0K
KworICAgIGJvb2wgZGlkSGFuZGxlID0gZmFsc2U7CisgICAgaGFuZGxlcnNbc3RhdGljX2Nhc3Q8
c2l6ZV90PihzaWduYWwpXS0+aXRlcmF0ZShbJl0gKGNvbnN0IFNpZ25hbEhhbmRsZXImIGhhbmRs
ZXIpIHsKKyAgICAgICAgU2lnbmFsQWN0aW9uIGhhbmRsZXJSZXN1bHQgPSBoYW5kbGVyKHNpZ25h
bCwgaW5mbywgcmVnaXN0ZXJzKTsKKyAgICAgICAgZGF0YUxvZ0xuKHN0YXRpY19jYXN0PGludD4o
aGFuZGxlclJlc3VsdCkpOworICAgICAgICBzd2l0Y2ggKGhhbmRsZXJSZXN1bHQpIHsKKyAgICAg
ICAgY2FzZSBTaWduYWxBY3Rpb246OkhhbmRsZWQ6CisgICAgICAgICAgICBkaWRIYW5kbGUgPSB0
cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgIH0pOworCisgICAgaWYgKGRpZEhhbmRsZSkKKyAgICAgICAg
cmV0dXJuIEtFUk5fU1VDQ0VTUzsKKyAgICByZXR1cm4gS0VSTl9GQUlMVVJFOworfQorCit9Owor
CitzdGF0aWMgYm9vbCB1c2VNYWNoIHsgZmFsc2UgfTsKK3ZvaWQgaGFuZGxlU2lnbmFsc1dpdGhN
YWNoKCkKK3sKKyAgICBkZWxpdmVyTWVzc2FnZXNVc2luZ01hY2goKTsKKyAgICB1c2VNYWNoID0g
dHJ1ZTsKK30KKworCitzdGF0aWMgU3RhdGljTG9jayB0aHJlYWRMb2NrOworZXhjZXB0aW9uX21h
c2tfdCBhY3RpdmVFeGNlcHRpb25zIHsgMCB9OworCitpbmxpbmUgdm9pZCBzZXRFeGNlcHRpb25Q
b3J0cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIFRocmVhZCogdGhyZWFkKQoreworICAgIGtlcm5f
cmV0dXJuX3QgcmVzdWx0ID0gdGhyZWFkX3NldF9leGNlcHRpb25fcG9ydHModGhyZWFkLT5tYWNo
VGhyZWFkKCksIGFjdGl2ZUV4Y2VwdGlvbnMsIGV4Y2VwdGlvblBvcnQsIEVYQ0VQVElPTl9TVEFU
RSB8IE1BQ0hfRVhDRVBUSU9OX0NPREVTLCBNQUNISU5FX1RIUkVBRF9TVEFURSk7CisgICAgaWYg
KHJlc3VsdCAhPSBLRVJOX1NVQ0NFU1MpIHsKKyAgICAgICAgZGF0YUxvZ0xuKCJ0aHJlYWQgc2V0
IHBvcnQgZmFpbGVkIGR1ZSB0byAiLCBtYWNoX2Vycm9yX3N0cmluZyhyZXN1bHQpKTsKKyAgICAg
ICAgQ1JBU0goKTsKKyAgICB9Cit9CisKK2lubGluZSBIYXNoU2V0PFRocmVhZCo+JiBhY3RpdmVU
aHJlYWRzKGNvbnN0IEFic3RyYWN0TG9ja2VyJikKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8SGFzaFNldDxUaHJlYWQqPj4gYWN0aXZlVGhyZWFkczsKKyAgICByZXR1cm4gYWN0aXZlVGhy
ZWFkczsKK30KKwordm9pZCByZWdpc3RlclRocmVhZChUaHJlYWQqIHRocmVhZCkKK3sKKyAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKHRocmVhZExvY2spOworICAgIGF1dG8gcmVzdWx0ID0gYWN0
aXZlVGhyZWFkcyhsb2NrZXIpLmFkZCh0aHJlYWQpOworCisgICAgaWYgKHJlc3VsdC5pc05ld0Vu
dHJ5KQorICAgICAgICBzZXRFeGNlcHRpb25Qb3J0cyhsb2NrZXIsIHRocmVhZCk7Cit9CisKK3Zv
aWQgcmVtb3ZlVGhyZWFkKFRocmVhZCogdGhyZWFkKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9s
ZExvY2sodGhyZWFkTG9jayk7CisgICAgYWN0aXZlVGhyZWFkcyhsb2NrZXIpLnJlbW92ZSh0aHJl
YWQpOworfQogCi1zdGF0aWMgdm9pZCBqc2NTaWduYWxIYW5kbGVyKGludCBzaWcsIHNpZ2luZm9f
dCogaW5mbywgdm9pZCogbWNvbnRleHQpCisjZWxzZQorc3RhdGljIGNvbnN0ZXhwciBib29sIHVz
ZU1hY2ggPSBmYWxzZTsKKyNlbmRpZiAvLyBIQVZFKE1BQ0hfRVhDRVBUSU9OUykKKworc3RhdGlj
IHZvaWQganNjU2lnbmFsSGFuZGxlcihpbnQsIHNpZ2luZm9fdCosIHZvaWQqKTsKKwordm9pZCBp
bnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWwgc2lnbmFsLCBTaWduYWxIYW5kbGVyJiYgaGFuZGxl
cikKK3sKKyAgICBBU1NFUlQoc2lnbmFsIDwgU2lnbmFsOjpVbmtub3duKTsKKyNpZiBIQVZFKE1B
Q0hfRVhDRVBUSU9OUykKKyAgICBpZiAoc2lnbmFsID09IFNpZ25hbDo6QnVzICYmIHVzZU1hY2gp
CisgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQoIXVzZU1hY2ggfHwgc2lnbmFsICE9IFNpZ25h
bDo6VXNyKTsKKworICAgIGlmICh1c2VNYWNoKQorICAgICAgICBzdGFydE1hY2hFeGNlcHRpb25I
YW5kbGVyVGhyZWFkKCk7CisjZW5kaWYKKworICAgIHN0ZDo6Y2FsbF9vbmNlKGluaXRpYWxpemVP
bmNlRmxhZ3Nbc3RhdGljX2Nhc3Q8c2l6ZV90PihzaWduYWwpXSwgWyZdIHsKKyAgICAgICAgaGFu
ZGxlcnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzaWduYWwpXS5jb25zdHJ1Y3QoKTsKKworICAgICAg
ICBpZiAoIXVzZU1hY2gpIHsKKyAgICAgICAgICAgIHN0cnVjdCBzaWdhY3Rpb24gYWN0aW9uOwor
ICAgICAgICAgICAgYWN0aW9uLnNhX3NpZ2FjdGlvbiA9IGpzY1NpZ25hbEhhbmRsZXI7CisgICAg
ICAgICAgICBhdXRvIHJlc3VsdCA9IHNpZ2ZpbGxzZXQoJmFjdGlvbi5zYV9tYXNrKTsKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKCFyZXN1bHQpOworICAgICAgICAgICAgYWN0aW9uLnNhX2Zs
YWdzID0gU0FfU0lHSU5GTzsKKyAgICAgICAgICAgIHJlc3VsdCA9IHNpZ2FjdGlvbih0b1N5c3Rl
bVNpZ25hbChzaWduYWwpLCAmYWN0aW9uLCAmb2xkQWN0aW9uc1tzdGF0aWNfY2FzdDxzaXplX3Q+
KHNpZ25hbCldKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFyZXN1bHQpOworICAgICAg
ICB9CisKKyAgICB9KTsKKworICAgIGhhbmRsZXJzW3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFs
KV0tPmFkZChXVEZNb3ZlKGhhbmRsZXIpKTsKKworI2lmIEhBVkUoTUFDSF9FWENFUFRJT05TKQor
ICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sodGhyZWFkTG9jayk7CisgICAgaWYgKHVzZU1hY2gp
IHsKKyAgICAgICAgYWN0aXZlRXhjZXB0aW9ucyB8PSB0b01hY2hNYXNrKHNpZ25hbCk7CisKKyAg
ICAgICAgZm9yIChUaHJlYWQqIHRocmVhZCA6IGFjdGl2ZVRocmVhZHMobG9ja2VyKSkKKyAgICAg
ICAgICAgIHNldEV4Y2VwdGlvblBvcnRzKGxvY2tlciwgdGhyZWFkKTsKKyAgICB9CisjZW5kaWYK
K30KKwordm9pZCBqc2NTaWduYWxIYW5kbGVyKGludCBzaWcsIHNpZ2luZm9fdCogaW5mbywgdm9p
ZCogdWNvbnRleHQpCiB7CiAgICAgU2lnbmFsIHNpZ25hbCA9IGZyb21TeXN0ZW1TaWduYWwoc2ln
KTsKIApAQCAtNjIsMTAgKzMwNSwxNiBAQCBzdGF0aWMgdm9pZCBqc2NTaWduYWxIYW5kbGVyKGlu
dCBzaWcsIHNpZ2luZm9fdCogaW5mbywgdm9pZCogbWNvbnRleHQpCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKKyAgICBTaWdJbmZvIHNpZ0luZm87CisgICAgaWYgKHNpZ25hbCA9PSBTaWduYWw6
OlNlZ1YgfHwgc2lnbmFsID09IFNpZ25hbDo6QnVzKQorICAgICAgICBzaWdJbmZvLmZhdWx0aW5n
QWRkcmVzcyA9IGluZm8tPnNpX2FkZHI7CisKKyAgICBQbGF0Zm9ybVJlZ2lzdGVycyYgcmVnaXN0
ZXJzID0gcmVnaXN0ZXJzRnJvbVVDb250ZXh0KHJlaW50ZXJwcmV0X2Nhc3Q8dWNvbnRleHRfdCo+
KHVjb250ZXh0KSk7CisKICAgICBib29sIGRpZEhhbmRsZSA9IGZhbHNlOwogICAgIGJvb2wgcmVz
dG9yZURlZmF1bHRIYW5kbGVyID0gZmFsc2U7CiAgICAgaGFuZGxlcnNbc3RhdGljX2Nhc3Q8c2l6
ZV90PihzaWduYWwpXS0+aXRlcmF0ZShbJl0gKGNvbnN0IFNpZ25hbEhhbmRsZXImIGhhbmRsZXIp
IHsKLSAgICAgICAgc3dpdGNoIChoYW5kbGVyKHNpZywgaW5mbywgbWNvbnRleHQpKSB7CisgICAg
ICAgIHN3aXRjaCAoaGFuZGxlcihzaWduYWwsIHNpZ0luZm8sIHJlZ2lzdGVycykpIHsKICAgICAg
ICAgY2FzZSBTaWduYWxBY3Rpb246OkhhbmRsZWQ6CiAgICAgICAgICAgICBkaWRIYW5kbGUgPSB0
cnVlOwogICAgICAgICAgICAgYnJlYWs7CkBAIC04NSwxMyArMzM0LDEzIEBAIHN0YXRpYyB2b2lk
IGpzY1NpZ25hbEhhbmRsZXIoaW50IHNpZywgc2lnaW5mb190KiBpbmZvLCB2b2lkKiBtY29udGV4
dCkKICAgICBzdHJ1Y3Qgc2lnYWN0aW9uJiBvbGRBY3Rpb24gPSBvbGRBY3Rpb25zW3N0YXRpY19j
YXN0PHNpemVfdD4oc2lnbmFsKV07CiAgICAgaWYgKHNpZ25hbCA9PSBTaWduYWw6OlVzcikgewog
ICAgICAgICBpZiAob2xkQWN0aW9uLnNhX3NpZ2FjdGlvbikKLSAgICAgICAgICAgIG9sZEFjdGlv
bi5zYV9zaWdhY3Rpb24oc2lnLCBpbmZvLCBtY29udGV4dCk7CisgICAgICAgICAgICBvbGRBY3Rp
b24uc2Ffc2lnYWN0aW9uKHNpZywgaW5mbywgdWNvbnRleHQpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgaWYgKCFkaWRIYW5kbGUpIHsKICAgICAgICAgaWYgKG9sZEFjdGlvbi5zYV9z
aWdhY3Rpb24pIHsKLSAgICAgICAgICAgIG9sZEFjdGlvbi5zYV9zaWdhY3Rpb24oc2lnLCBpbmZv
LCBtY29udGV4dCk7CisgICAgICAgICAgICBvbGRBY3Rpb24uc2Ffc2lnYWN0aW9uKHNpZywgaW5m
bywgdWNvbnRleHQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTEwMCwy
NCArMzQ5LDYgQEAgc3RhdGljIHZvaWQganNjU2lnbmFsSGFuZGxlcihpbnQgc2lnLCBzaWdpbmZv
X3QqIGluZm8sIHZvaWQqIG1jb250ZXh0KQogICAgIH0KIH0KIAotdm9pZCBpbnN0YWxsU2lnbmFs
SGFuZGxlcihTaWduYWwgc2lnbmFsLCBTaWduYWxIYW5kbGVyJiYgaGFuZGxlcikKLXsKLSAgICBB
U1NFUlQoc2lnbmFsIDwgU2lnbmFsOjpVbmtub3duKTsKLSAgICBzdGQ6OmNhbGxfb25jZShpbml0
aWFsaXplT25jZUZsYWdzW3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0sIFsmXSB7Ci0gICAg
ICAgIGhhbmRsZXJzW3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0uY29uc3RydWN0KCk7Ci0K
LSAgICAgICAgc3RydWN0IHNpZ2FjdGlvbiBhY3Rpb247Ci0gICAgICAgIGFjdGlvbi5zYV9zaWdh
Y3Rpb24gPSBqc2NTaWduYWxIYW5kbGVyOwotICAgICAgICBhdXRvIHJlc3VsdCA9IHNpZ2ZpbGxz
ZXQoJmFjdGlvbi5zYV9tYXNrKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXJlc3VsdCk7Ci0g
ICAgICAgIGFjdGlvbi5zYV9mbGFncyA9IFNBX1NJR0lORk87Ci0gICAgICAgIHJlc3VsdCA9IHNp
Z2FjdGlvbih0b1N5c3RlbVNpZ25hbChzaWduYWwpLCAmYWN0aW9uLCAmb2xkQWN0aW9uc1tzdGF0
aWNfY2FzdDxzaXplX3Q+KHNpZ25hbCldKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXJlc3Vs
dCk7Ci0gICAgfSk7Ci0KLSAgICBoYW5kbGVyc1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNpZ25hbCld
LT5hZGQoV1RGTW92ZShoYW5kbGVyKSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdURgogCiAjZW5k
aWYgLy8gVVNFKFBUSFJFQURTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGhyZWFkcy9T
aWduYWxzLmggYi9Tb3VyY2UvV1RGL3d0Zi90aHJlYWRzL1NpZ25hbHMuaAppbmRleCAxZTRlYjQ2
ZWFhNzc0YTFlZTg5ZjZmYjJkYWVmMzMyNjhjZTU2Nzc5Li5hY2E2YjM0ZjgxNmYwMTc2OTMwMDM2
YzE4YjgyMWMyN2FiYjBlNjBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90aHJlYWRzL1Np
Z25hbHMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90aHJlYWRzL1NpZ25hbHMuaApAQCAtMjksNiAr
MjksNyBAQAogCiAjaW5jbHVkZSA8c2lnbmFsLmg+CiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+
CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtUmVnaXN0ZXJzLmg+CiAKIG5hbWVzcGFjZSBXVEYgewog
CkBAIC03OSw3ICs4MCwxMSBAQCBlbnVtIGNsYXNzIFNpZ25hbEFjdGlvbiB7CiAgICAgRm9yY2VE
ZWZhdWx0CiB9OwogCi11c2luZyBTaWduYWxIYW5kbGVyID0gRnVuY3Rpb248U2lnbmFsQWN0aW9u
KGludCwgc2lnaW5mb190Kiwgdm9pZCopPjsKK3N0cnVjdCBTaWdJbmZvIHsKKyAgICB2b2lkKiBm
YXVsdGluZ0FkZHJlc3MgeyAwIH07Cit9OworCit1c2luZyBTaWduYWxIYW5kbGVyID0gRnVuY3Rp
b248U2lnbmFsQWN0aW9uKFNpZ25hbCwgU2lnSW5mbyYsIFBsYXRmb3JtUmVnaXN0ZXJzJik+Owog
CiAvLyBDYWxsIHRoaXMgbWV0aG9kIHdoZW5ldmVyIHlvdSB3YW50IHRvIGluc3RhbGwgYSBzaWdu
YWwgaGFuZGxlci4gSXQncyBvayB0byBjYWxsIHRoaXMgZnVuY3Rpb24gbGF6aWx5LgogLy8gTm90
ZTogWW91ciBzaWduYWwgaGFuZGxlciB3aWxsIGJlIGNhbGxlZCBldmVyeSB0aW1lIHRoZSBoYW5k
bGVyIGZvciB0aGUgZGVzaXJlZCBzaWduYWwgaXMgY2FsbGVkLgpAQCAtODcsOSArOTIsMTkgQEAg
dXNpbmcgU2lnbmFsSGFuZGxlciA9IEZ1bmN0aW9uPFNpZ25hbEFjdGlvbihpbnQsIHNpZ2luZm9f
dCosIHZvaWQqKT47CiAvLyBUaGlzIGZ1bmN0aW9uIGlzIGN1cnJlbnRseSBhIG9uZSB3YXkgc3Ry
ZWV0IGkuZS4gb25jZSBpbnN0YWxsZWQsIGEgc2lnbmFsIGhhbmRsZXIgY2Fubm90IGJlIHVuaW5z
dGFsbGVkLgogdm9pZCBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWwsIFNpZ25hbEhhbmRsZXIm
Jik7CiAKKworI2lmIEhBVkUoTUFDSF9FWENFUFRJT05TKQorY2xhc3MgVGhyZWFkOwordm9pZCBy
ZWdpc3RlclRocmVhZChUaHJlYWQqKTsKK3ZvaWQgcmVtb3ZlVGhyZWFkKFRocmVhZCopOworCit2
b2lkIGhhbmRsZVNpZ25hbHNXaXRoTWFjaCgpOworI2VuZGlmIC8vIEhBVkUoTUFDSF9FWENFUFRJ
T05TKQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjpTaWduYWw7Cit1c2luZyBX
VEY6OlNpZ0luZm87CiB1c2luZyBXVEY6OnRvU3lzdGVtU2lnbmFsOwogdXNpbmcgV1RGOjpmcm9t
U3lzdGVtU2lnbmFsOwogdXNpbmcgV1RGOjpTaWduYWxBY3Rpb247CmRpZmYgLS1naXQgYS9Ub29s
cy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMTdmOWYwMTExMzEwMmE4YTRiMTdm
Y2U0YWYxZDk1ZWI4NjAwNjlkYi4uNmNkYTQ4NDEwNjVjZTA0YTkxYjhkYjVlMmIyMDI4YzQwZWMw
NWE2ZiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE0IEBACisyMDE3LTA1LTExICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJA
YXBwbGUuY29tPgorCisgICAgICAgIFVzZSBNYWNoIGV4Y2VwdGlvbnMgaW5zdGVhZCBvZiBzaWdu
YWxzIHdoZXJlIHBvc3NpYmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzE4NjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1RocmVhZE1lc3NhZ2VzLmNwcDoK
KyAgICAgICAgKHJ1blRocmVhZE1lc3NhZ2VUZXN0KToKKyAgICAgICAgKFRFU1QpOgorCiAyMDE3
LTA1LTA5ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVtb3ZlIHN1
cHBvcnQgZm9yIGxlZ2FjeSBOb3RpZmljYXRpb25zCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dURi9UaHJlYWRNZXNzYWdlcy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dURi9UaHJlYWRNZXNzYWdlcy5jcHAKaW5kZXggZDYzZTliZjFlNzUwNjhiNmMxYTdl
N2U2ZThiNjdjNGViMDUxNTg4Mi4uZTZhNTc4OTRiYjUxNmZlMWNlNzEzZDA3YmYxOGYwNzA2ZWZh
OTM3YyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVGhyZWFkTWVz
c2FnZXMuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1RocmVhZE1lc3Nh
Z2VzLmNwcApAQCAtNTAsNyArNTAsNyBAQCBzdGF0aWMgdm9pZCBydW5UaHJlYWRNZXNzYWdlVGVz
dCh1bnNpZ25lZCBudW1TZW5kZXJzLCB1bnNpZ25lZCBudW1NZXNzYWdlcykKICAgICBmb3IgKHVu
c2lnbmVkIHNlbmRlcklEID0gMDsgc2VuZGVySUQgPCBudW1TZW5kZXJzOyArK3NlbmRlcklEKSB7
CiAgICAgICAgIHNlbmRlclRocmVhZHNbc2VuZGVySURdID0gVGhyZWFkOjpjcmVhdGUoIlRocmVh
ZE1lc3NhZ2Ugc2VuZGVyIiwgW3NlbmRlcklELCBudW1NZXNzYWdlcywgcmVjZWl2ZXJUaHJlYWQs
ICZtZXNzYWdlc1J1biwgJmhhbmRsZXJzUnVuXSAoKSB7CiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbnVtTWVzc2FnZXM7ICsraSkgewotICAgICAgICAgICAgICAgIGF1dG8g
cmVzdWx0ID0gc2VuZE1lc3NhZ2UoKnJlY2VpdmVyVGhyZWFkLmdldCgpLCBbc2VuZGVySUQsICZo
YW5kbGVyc1J1bl0gKHNpZ2luZm9fdCosIHVjb250ZXh0X3QqKSB7CisgICAgICAgICAgICAgICAg
YXV0byByZXN1bHQgPSBzZW5kTWVzc2FnZSgqcmVjZWl2ZXJUaHJlYWQuZ2V0KCksIFtzZW5kZXJJ
RCwgJmhhbmRsZXJzUnVuXSAoUGxhdGZvcm1SZWdpc3RlcnMmKSB7CiAgICAgICAgICAgICAgICAg
ICAgIGhhbmRsZXJzUnVuW3NlbmRlcklEXSsrOwogICAgICAgICAgICAgICAgIH0pOwogICAgICAg
ICAgICAgICAgIEVYUEVDVF9UUlVFKHJlc3VsdCA9PSBXVEY6Ok1lc3NhZ2VTdGF0dXM6Ok1lc3Nh
Z2VSYW4pOwpAQCAtOTUsNyArOTUsNyBAQCBwdWJsaWM6CiBURVNUKFRocmVhZE1lc3NhZ2UsIFNp
Z25hbHNXb3JrT25FeGl0KQogewogICAgIHN0YXRpYyBib29sIGhhbmRsZXJSYW4gPSBmYWxzZTsK
LSAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWw6OlVzciwgW10gKGludCwgc2lnaW5mb190
Kiwgdm9pZCopIC0+IFNpZ25hbEFjdGlvbiB7CisgICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2ln
bmFsOjpVc3IsIFtdIChTaWduYWwsIFNpZ0luZm8mLCBQbGF0Zm9ybVJlZ2lzdGVycyYpIC0+IFNp
Z25hbEFjdGlvbiB7CiAgICAgICAgIGRhdGFMb2dMbigiaGVyZSIpOwogICAgICAgICBoYW5kbGVy
UmFuID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuIFNpZ25hbEFjdGlvbjo6SGFuZGxlZDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309908</attachid>
            <date>2017-05-12 10:18:26 -0700</date>
            <delta_ts>2017-05-12 17:48:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171865-20170512101824.patch</filename>
            <type>text/plain</type>
            <size>50612</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE2Njc3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
YzIyOWE0ZjkxMDMxZGZlOTU1YTQxMGIyMDI0Njc2ZTFmM2NkZWIxLi4yNWUzMDIyZWI5ZmY0ZDA1
M2E4ZWRiY2YxZTI2YmFkZTA1MTA4MWExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MCBAQAorMjAxNy0wNS0xMSAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBVc2UgTWFjaCBleGNlcHRpb25zIGluc3RlYWQgb2Ygc2lnbmFscyB3
aGVyZSBwb3NzaWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTcxODY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhpcyBwYXRjaCBhZGRzIHNvbWUgbmV3IEpTQyBvcHRpb25zLiBUaGUgZmlyc3QgaXMg
YW4gb3B0aW9uIHRoYXQKKyAgICAgICAgZW5hYmxlcyBvciBkaXNhYmxlcyB3ZWIgYXNzZW1ibHkg
dGllciB1cC4gVGhlIHNlY29uZCBjb250cm9scworICAgICAgICB3aGV0aGVyIG9yIG5vdCB3ZSB1
c2UgbWFjaCBleGNlcHRpb25zICh3aGVyZSBhdmFpbGFibGUpLgorCisgICAgICAgICogQVBJL3Rl
c3RzL0V4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwOgorICAgICAgICAoZGlzcGF0Y2hUZXJtaXRh
dGVDYWxsYmFjayk6CisgICAgICAgICh0ZXN0RXhlY3V0aW9uVGltZUxpbWl0KToKKyAgICAgICAg
KiBydW50aW1lL0pTTG9jay5jcHA6CisgICAgICAgIChKU0M6OkpTTG9jazo6ZGlkQWNxdWlyZUxv
Y2spOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5jcHA6CisgICAgICAgIChKU0M6Om92ZXJy
aWRlRGVmYXVsdHMpOgorICAgICAgICAoSlNDOjpPcHRpb25zOjppbml0aWFsaXplKToKKyAgICAg
ICAgKiBydW50aW1lL09wdGlvbnMuaDoKKyAgICAgICAgKiBydW50aW1lL1ZNVHJhcHMuY3BwOgor
ICAgICAgICAoSlNDOjpTaWduYWxDb250ZXh0OjpTaWduYWxDb250ZXh0KToKKyAgICAgICAgKEpT
Qzo6U2lnbmFsQ29udGV4dDo6YWRqdXN0UENUb1BvaW50VG9UcmFwcGluZ0luc3RydWN0aW9uKToK
KyAgICAgICAgKEpTQzo6aW5zdGFsbFNpZ25hbEhhbmRsZXIpOgorICAgICAgICAoSlNDOjpWTVRy
YXBzOjpTaWduYWxTZW5kZXI6OnNlbmQpOgorICAgICAgICAqIHRvb2xzL1NpZ2lsbENyYXNoQW5h
bHl6ZXIuY3BwOgorICAgICAgICAoSlNDOjpTaWduYWxDb250ZXh0OjpTaWduYWxDb250ZXh0KToK
KyAgICAgICAgKEpTQzo6U2lnbmFsQ29udGV4dDo6ZHVtcCk6CisgICAgICAgIChKU0M6Omluc3Rh
bGxDcmFzaEhhbmRsZXIpOgorICAgICAgICAqIHdhc20vV2FzbUJCUVBsYW4uY3BwOgorICAgICAg
ICAoSlNDOjpXYXNtOjpCQlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKToKKyAgICAgICAgKiB3YXNt
L1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp0cmFwSGFu
ZGxlcik6CisgICAgICAgIChKU0M6Oldhc206OmVuYWJsZUZhc3RNZW1vcnkpOgorICAgICAgICAq
IHdhc20vV2FzbU1hY2hpbmVUaHJlYWRzLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6cmVzZXRJ
bnN0cnVjdGlvbkNhY2hlT25BbGxUaHJlYWRzKToKKwogMjAxNy0wNS0xMSAgTWFyayBMYW0gIDxt
YXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgV29ya2VyVGhyZWFkOjpzdG9wKCkgc2hvdWxk
IGNhbGwgc2NoZWR1bGVFeGVjdXRpb25UZXJtaW5hdGlvbigpIGxhc3QuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGVjZGRiMzNm
YmVkNTIxMTFiYzA3MTk1ZDZjMDhmZTQwNmIyYzFhMzUuLmMxNDZiMjkyNDQ1NGZjMjgyOWUyZmNm
OWUxOTE2MTc4ZjAwZTAwZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjIgQEAKKzIwMTctMDUtMTEgIEtlaXRo
IE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIE1hY2ggZXhj
ZXB0aW9ucyBpbnN0ZWFkIG9mIHNpZ25hbHMgd2hlcmUgcG9zc2libGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MTg2NQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZW5hYmxlcyB1c2lu
ZyBtYWNoIGV4Y2VwdGlvbnMgb24gZGFyd2luLiBUaGUgd2F5IHRoZQorICAgICAgICBtYWNoIGV4
Y2VwdGlvbiBhcGkgd29ya3MgaXMgdGhhdCB3ZSBjcmVhdGUgYSBtYWNoIHBvcnQsIHdoaWNoIGlz
CisgICAgICAgIGxpa2UgYSBmaWxlIGRlc2NyaXB0b3IuICBXZSB0aGVuIHdhaXQgZm9yIGEgbWVz
c2FnZSB0byBhcnJpdmUgb24KKyAgICAgICAgdGhhdCBwb3J0IGluIGEgdGhyZWFkLiBXaGVuIGFu
b3RoZXIgdGhyZWFkIHJhaXNlcyBhIGV4Y2VwdGlvbiAoc2F5CisgICAgICAgIGR1ZSB0byBhIGJh
ZCBtZW1vcnkgYWNjZXNzKSB0aGUgT1Mgc2VuZHMgb3VyIHRocmVhZCBhIG1lc3NhZ2UuIFRoZQor
ICAgICAgICBwYXlsb2FkIG9mIHRoYXQgbWVzc2FnZSBpcyB0aGUgcmVnaXN0ZXIgZmlsZSBvZiB0
aGUgY3Jhc2hpbmcKKyAgICAgICAgdGhyZWFkLiBXZSB0aGVuIGNhbGwgb3VyIGN1c3RvbSBoYW5k
bGVycyB0aGF0IGNoYW5nZSB0aGUgc3RhdGUgYXMKKyAgICAgICAgbmVlZGVkLiBJbiBvcmRlciB0
byByZXN0YXJ0IHRoZSB0aHJlYWQgd2Ugc2VuZCBhIHBheWxvYWQgYmFjayB0bworICAgICAgICB0
aGUgT1Mgd2l0aCBhbiB1cGRhdGVkIHJlZ2lzdGVyIGZpbGUgYWxvbmcgd2l0aCBhIHN1Y2Nlc3Mg
bWVzc2FnZQorICAgICAgICBoZWFkZXIuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIG1ha2Vz
IHRocmVhZCBtZXNzYWdlcyB3b3JrIHdpdGhvdXQgc2lnbmFscyBieQorICAgICAgICBzaW1wbHkg
c3VzcGVuZGluZyB0aGUgdGhyZWFkIHRoZW4gcnVubmluZyB0aGUgbWVzc2FnZSBhdCB0aGF0Cisg
ICAgICAgIHRpbWUuCisKKyAgICAgICAgWW91IGNhbiByZWFkIG1vcmUgYWJvdW50IG1hY2ggZXhj
ZXB0aW9ucyBoZXJlOgorICAgICAgICBodHRwOi8vd3d3LmNzLmNtdS5lZHUvYWZzL2NzL3Byb2pl
Y3QvbWFjaC9wdWJsaWMvZG9jL3VucHVibGlzaGVkL2V4Y2VwdGlvbi5wcworICAgICAgICBhbmQg
dGhlIE1hY2ggaW50ZXJmYWNlIEdlbmVyYXRvciAoTWlHKSBoZXJlOgorICAgICAgICBodHRwOi8v
d3d3LmNzLmNtdS5lZHUvYWZzL2NzL3Byb2plY3QvbWFjaC9wdWJsaWMvZG9jL3VucHVibGlzaGVk
L21pZy5wcworCisgICAgICAgICogQ29uZmlndXJhdGlvbnMvV1RGLnhjY29uZmlnOgorICAgICAg
ICAqIFdURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9QbGF0Zm9y
bS5oOgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybVJlZ2lzdGVycy5oOgorICAgICAgICAoV1RGOjpy
ZWdpc3RlcnNGcm9tVUNvbnRleHQpOgorICAgICAgICAqIHd0Zi9TdGFja0JvdW5kcy5oOgorICAg
ICAgICAoV1RGOjpTdGFja0JvdW5kczo6U3RhY2tCb3VuZHMpOgorICAgICAgICAqIHd0Zi9UaHJl
YWRIb2xkZXIuY3BwOgorICAgICAgICAoV1RGOjpUaHJlYWRIb2xkZXI6On5UaHJlYWRIb2xkZXIp
OgorICAgICAgICAqIHd0Zi9UaHJlYWRNZXNzYWdlLmNwcDoKKyAgICAgICAgKFdURjo6c2VuZE1l
c3NhZ2VTaWduYWwpOgorICAgICAgICAoV1RGOjpzZW5kTWVzc2FnZU1hY2gpOgorICAgICAgICAo
V1RGOjpkZWxpdmVyTWVzc2FnZXNVc2luZ01hY2gpOgorICAgICAgICAoV1RGOjpzZW5kTWVzc2Fn
ZVNjb3BlZCk6CisgICAgICAgICogd3RmL1RocmVhZE1lc3NhZ2UuaDoKKyAgICAgICAgKFdURjo6
c2VuZE1lc3NhZ2UpOgorICAgICAgICAqIHd0Zi9UaHJlYWRpbmcuaDoKKyAgICAgICAgKFdURjo6
VGhyZWFkOjptYWNoVGhyZWFkKToKKyAgICAgICAgKiB3dGYvbWFjL01hY2hFeGNlcHRpb25zLmRl
ZnM6IENvcGllZCBmcm9tIFNvdXJjZS9XVEYvd3RmL1RocmVhZE1lc3NhZ2UuaC4KKyAgICAgICAg
KiB3dGYvdGhyZWFkcy9TaWduYWxzLmNwcDoKKyAgICAgICAgKFdURjo6c3RhcnRNYWNoRXhjZXB0
aW9uSGFuZGxlclRocmVhZCk6CisgICAgICAgIChXVEY6OmZyb21NYWNoRXhjZXB0aW9uKToKKyAg
ICAgICAgKFdURjo6dG9NYWNoTWFzayk6CisgICAgICAgIChXVEY6OmhhbmRsZVNpZ25hbHNXaXRo
TWFjaCk6CisgICAgICAgIChXVEY6OnNldEV4Y2VwdGlvblBvcnRzKToKKyAgICAgICAgKFdURjo6
YWN0aXZlVGhyZWFkcyk6CisgICAgICAgIChXVEY6OnJlZ2lzdGVyVGhyZWFkKToKKyAgICAgICAg
KFdURjo6cmVtb3ZlVGhyZWFkKToKKyAgICAgICAgKFdURjo6aW5zdGFsbFNpZ25hbEhhbmRsZXIp
OgorICAgICAgICAoV1RGOjpqc2NTaWduYWxIYW5kbGVyKToKKyAgICAgICAgKiB3dGYvdGhyZWFk
cy9TaWduYWxzLmg6CisKIDIwMTctMDUtMDkgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
IAogICAgICAgICBSZW1vdmUgc3VwcG9ydCBmb3IgbGVnYWN5IE5vdGlmaWNhdGlvbnMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvRXhlY3V0aW9uVGltZUxpbWl0
VGVzdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0V4ZWN1dGlvblRpbWVM
aW1pdFRlc3QuY3BwCmluZGV4IGQ1ZTUzMjQzYjc4ZGY3NTEzNDJhZDhkMzkwYTRiMDQxM2Q5ZWVm
OWUuLmExYmY3NWNlNzc1NGRiYmMxYTA2ZWI3NzE2ZTU0OGUyNzU5ODM1MzQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvRXhlY3V0aW9uVGltZUxpbWl0VGVzdC5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9FeGVjdXRpb25UaW1lTGlt
aXRUZXN0LmNwcApAQCAtMzAsMTAgKzMwLDE4IEBACiAjaW5jbHVkZSAiSlNDb250ZXh0UmVmUHJp
dmF0ZS5oIgogI2luY2x1ZGUgIkphdmFTY3JpcHRDb3JlLmgiCiAjaW5jbHVkZSAiT3B0aW9ucy5o
IgorCiAjaW5jbHVkZSA8Y2hyb25vPgorI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CisjaW5jbHVk
ZSA8d3RmL0NvbmRpdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorI2luY2x1
ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCisj
aWYgSEFWRShNQUNIX0VYQ0VQVElPTlMpCisjaW5jbHVkZSA8ZGlzcGF0Y2gvZGlzcGF0Y2guaD4K
KyNlbmRpZgorCiB1c2luZyBuYW1lc3BhY2Ugc3RkOjpjaHJvbm87CiB1c2luZyBKU0M6Ok9wdGlv
bnM7CiAKQEAgLTc3LDYgKzg1LDEzIEBAIHN0YXRpYyBib29sIGV4dGVuZFRlcm1pbmF0ZUNhbGxi
YWNrKEpTQ29udGV4dFJlZiBjdHgsIHZvaWQqKQogICAgIHJldHVybiB0cnVlOwogfQogCitib29s
IGRpc3BhdGNoVGVybWluYXRlQ2FsbGJhY2tDYWxsZWQgPSBmYWxzZTsKK3N0YXRpYyBib29sIGRp
c3BhdGNoVGVybWl0YXRlQ2FsbGJhY2soSlNDb250ZXh0UmVmLCB2b2lkKikKK3sKKyAgICBkaXNw
YXRjaFRlcm1pbmF0ZUNhbGxiYWNrQ2FsbGVkID0gdHJ1ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kwogc3RydWN0IFRpZXJPcHRpb25zIHsKICAgICBjb25zdCBjaGFyKiB0aWVyOwogICAgIHVuc2ln
bmVkIHRpbWVMaW1pdEFkanVzdG1lbnRNaWxsaXM7CkBAIC0zNjUsNiArMzgwLDY1IEBAIGludCB0
ZXN0RXhlY3V0aW9uVGltZUxpbWl0KCkKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCisjaWYg
SEFWRShNQUNIX0VYQ0VQVElPTlMpCisgICAgICAgIC8qIFRlc3Qgc2NyaXB0IHRpbWVvdXQgZnJv
bSBkaXNwYXRjaCBxdWV1ZTogKi8KKyAgICAgICAgdGltZUxpbWl0ID0gKDEwMCArIHRpZXJBZGp1
c3RtZW50TWlsbGlzKSAvIDEwMDAuMDsKKyAgICAgICAgSlNDb250ZXh0R3JvdXBTZXRFeGVjdXRp
b25UaW1lTGltaXQoY29udGV4dEdyb3VwLCB0aW1lTGltaXQsIGRpc3BhdGNoVGVybWl0YXRlQ2Fs
bGJhY2ssIDApOworICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCB0aW1lQWZ0ZXJXYXRj
aGRvZ1Nob3VsZEhhdmVGaXJlZCA9IDMwMCArIHRpZXJBZGp1c3RtZW50TWlsbGlzOworCisgICAg
ICAgICAgICBTdHJpbmdCdWlsZGVyIHNjcmlwdEJ1aWxkZXI7CisgICAgICAgICAgICBzY3JpcHRC
dWlsZGVyLmFwcGVuZExpdGVyYWwoImZ1bmN0aW9uIGZvbygpIHsgdmFyIHN0YXJ0VGltZSA9IGN1
cnJlbnRDUFVUaW1lKCk7IHdoaWxlICh0cnVlKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDsg
aSsrKTsgaWYgKGN1cnJlbnRDUFVUaW1lKCkgLSBzdGFydFRpbWUgPiAiKTsKKyAgICAgICAgICAg
IHNjcmlwdEJ1aWxkZXIuYXBwZW5kTnVtYmVyKHRpbWVBZnRlcldhdGNoZG9nU2hvdWxkSGF2ZUZp
cmVkIC8gMTAwMC4wKTsKKyAgICAgICAgICAgIHNjcmlwdEJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgi
KSBicmVhazsgfSB9IGZvbygpOyIpOworCisgICAgICAgICAgICBKU1N0cmluZ1JlZiBzY3JpcHQg
PSBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhzY3JpcHRCdWlsZGVyLnRvU3RyaW5nKCku
dXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICBleGNlcHRpb24gPSBudWxscHRyOworICAgICAg
ICAgICAgZGlzcGF0Y2hUZXJtaW5hdGVDYWxsYmFja0NhbGxlZCA9IGZhbHNlOworCisgICAgICAg
ICAgICAvLyBXZSBoYXZlIHRvIGRvIHRoaXMgc2luY2UgYmxvY2tzIGNhbiBvbmx5IGNhcHR1cmUg
dGhpbmdzIGFzIGNvbnN0LgorICAgICAgICAgICAgSlNHbG9iYWxDb250ZXh0UmVmJiBjb250ZXh0
UmVmID0gY29udGV4dDsKKyAgICAgICAgICAgIEpTU3RyaW5nUmVmJiBzY3JpcHRSZWYgPSBzY3Jp
cHQ7CisgICAgICAgICAgICBKU1ZhbHVlUmVmJiBleGNlcHRpb25SZWYgPSBleGNlcHRpb247CisK
KyAgICAgICAgICAgIExvY2sgc3luY0xvY2s7CisgICAgICAgICAgICBMb2NrJiBzeW5jTG9ja1Jl
ZiA9IHN5bmNMb2NrOworICAgICAgICAgICAgQ29uZGl0aW9uIHN5bmNocm9uaXplOworICAgICAg
ICAgICAgQ29uZGl0aW9uJiBzeW5jaHJvbml6ZVJlZiA9IHN5bmNocm9uaXplOworICAgICAgICAg
ICAgYm9vbCBkaWRTeW5jaHJvbml6ZSA9IGZhbHNlOworICAgICAgICAgICAgYm9vbCYgZGlkU3lu
Y2hyb25pemVSZWYgPSBkaWRTeW5jaHJvbml6ZTsKKworICAgICAgICAgICAgc3RkOjpjaHJvbm86
Om1pY3Jvc2Vjb25kcyBzdGFydFRpbWU7CisgICAgICAgICAgICBzdGQ6OmNocm9ubzo6bWljcm9z
ZWNvbmRzIGVuZFRpbWU7CisKKyAgICAgICAgICAgIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMm
IHN0YXJ0VGltZVJlZiA9IHN0YXJ0VGltZTsKKyAgICAgICAgICAgIHN0ZDo6Y2hyb25vOjptaWNy
b3NlY29uZHMmIGVuZFRpbWVSZWYgPSBlbmRUaW1lOworCisgICAgICAgICAgICBkaXNwYXRjaF9n
cm91cF90IGdyb3VwID0gZGlzcGF0Y2hfZ3JvdXBfY3JlYXRlKCk7CisgICAgICAgICAgICBkaXNw
YXRjaF9ncm91cF9hc3luYyhncm91cCwgZGlzcGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZSgwLCAwKSwg
XnsKKyAgICAgICAgICAgICAgICBzdGFydFRpbWVSZWYgPSBjdXJyZW50Q1BVVGltZSgpOworICAg
ICAgICAgICAgICAgIEpTRXZhbHVhdGVTY3JpcHQoY29udGV4dFJlZiwgc2NyaXB0UmVmLCBudWxs
cHRyLCBudWxscHRyLCAxLCAmZXhjZXB0aW9uUmVmKTsKKyAgICAgICAgICAgICAgICBlbmRUaW1l
UmVmID0gY3VycmVudENQVVRpbWUoKTsKKyAgICAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IFdU
Rjo6aG9sZExvY2soc3luY0xvY2tSZWYpOworICAgICAgICAgICAgICAgIGRpZFN5bmNocm9uaXpl
UmVmID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBzeW5jaHJvbml6ZVJlZi5ub3RpZnlBbGwoKTsK
KyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHN5
bmNMb2NrKTsKKyAgICAgICAgICAgIHN5bmNocm9uaXplLndhaXQoc3luY0xvY2ssIFsmXSB7IHJl
dHVybiBkaWRTeW5jaHJvbml6ZTsgfSk7CisKKyAgICAgICAgICAgIGlmICgoKGVuZFRpbWUgLSBz
dGFydFRpbWUpIDwgbWlsbGlzZWNvbmRzKHRpbWVBZnRlcldhdGNoZG9nU2hvdWxkSGF2ZUZpcmVk
KSkgJiYgZGlzcGF0Y2hUZXJtaW5hdGVDYWxsYmFja0NhbGxlZCkKKyAgICAgICAgICAgICAgICBw
cmludGYoIlBBU1M6ICVzIHNjcmlwdCBvbiBkaXNwYXRjaCBxdWV1ZSB0aW1lZCBvdXQgYXMgZXhw
ZWN0ZWQuXG4iLCB0aWVyT3B0aW9ucy50aWVyKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgICAgIGlmICgoZW5kVGltZSAtIHN0YXJ0VGltZSkgPj0gbWlsbGlzZWNvbmRzKHRpbWVB
ZnRlcldhdGNoZG9nU2hvdWxkSGF2ZUZpcmVkKSkKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRm
KCJGQUlMOiAlcyBzY3JpcHQgb24gZGlzcGF0Y2ggcXVldWUgZGlkIG5vdCB0aW1lIG91dCBhcyBl
eHBlY3RlZC5cbiIsIHRpZXJPcHRpb25zLnRpZXIpOworICAgICAgICAgICAgICAgIGlmICghc2hv
dWxkVGVybWluYXRlQ2FsbGJhY2tXYXNDYWxsZWQpCisgICAgICAgICAgICAgICAgICAgIHByaW50
ZigiRkFJTDogJXMgc2NyaXB0IG9uIGRpc3BhdGNoIHF1ZXVlIHRpbWVvdXQgY2FsbGJhY2sgd2Fz
IG5vdCBjYWxsZWQuXG4iLCB0aWVyT3B0aW9ucy50aWVyKTsKKyAgICAgICAgICAgICAgICBmYWls
ZWQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisjZW5kaWYKKwogICAgICAgICBK
U0dsb2JhbENvbnRleHRSZWxlYXNlKGNvbnRleHQpOwogCiAgICAgICAgIE9wdGlvbnM6OnNldE9w
dGlvbnMoc2F2ZWRPcHRpb25zQnVpbGRlci50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwCmluZGV4IGMxNzVhZTBjNDgyZWQy
N2JkNWY2YmRjODc5NjhlNzVkNDVhZjUwZWYuLmJiNzBhYWFlYTE1ZmVkNTQ3N2I2MTk5ZmE2ZDRk
YzdlYTk3MTAyYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TG9jay5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcApA
QCAtMzAsNiArMzAsOCBAQAogI2luY2x1ZGUgIlNhbXBsaW5nUHJvZmlsZXIuaCIKICNpbmNsdWRl
ICJXYXNtTWFjaGluZVRocmVhZHMuaCIKICNpbmNsdWRlIDx0aHJlYWQ+CisjaW5jbHVkZSA8d3Rm
L1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi90aHJlYWRzL1NpZ25hbHMuaD4KIAogbmFtZXNw
YWNlIEpTQyB7CiAKQEAgLTE0OCw2ICsxNTAsMTAgQEAgdm9pZCBKU0xvY2s6OmRpZEFjcXVpcmVM
b2NrKCkKICAgICBXYXNtOjpzdGFydFRyYWNraW5nQ3VycmVudFRocmVhZCgpOwogI2VuZGlmCiAK
KyNpZiBIQVZFKE1BQ0hfRVhDRVBUSU9OUykKKyAgICBXVEY6OnJlZ2lzdGVyVGhyZWFkKCZUaHJl
YWQ6OmN1cnJlbnQoKSk7CisjZW5kaWYKKwogICAgIG1fdm0tPnRyYXBzKCkubm90aWZ5R3JhYkFs
bExvY2tzKCk7CiAKICNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCmluZGV4IGIwNGRlMzVhNTM2MTUwODQzODU3NWMy
MjdhNTAxNGRkMGM1MWJhYTIuLjg2ZWExYjY5NTYzNGE1NGYwZTNkMjBmYTI2Mzc3MzllYzhiNjA0
ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCkBAIC00Myw2
ICs0Myw3IEBACiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9T
dHJpbmdFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW5j
bHVkZSA8d3RmL3RocmVhZHMvU2lnbmFscy5oPgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAjaW5j
bHVkZSA8Y3J0X2V4dGVybnMuaD4KQEAgLTM1NCw2ICszNTUsMTAgQEAgc3RhdGljIHZvaWQgb3Zl
cnJpZGVEZWZhdWx0cygpCiAjaWYgIUVOQUJMRShXRUJBU1NFTUJMWV9GQVNUX01FTU9SWSkKICAg
ICBPcHRpb25zOjp1c2VXZWJBc3NlbWJseUZhc3RNZW1vcnkoKSA9IGZhbHNlOwogI2VuZGlmCisK
KyNpZiBIQVZFKE1BQ0hfRVhDRVBUSU9OUykKKyAgICBPcHRpb25zOjp1c2VNYWNoRm9yRXhjZXB0
aW9ucygpID0gdHJ1ZTsKKyNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCByZWNvbXB1dGVEZXBlbmRl
bnRPcHRpb25zKCkKQEAgLTU0NSw2ICs1NTAsMTEgQEAgdm9pZCBPcHRpb25zOjppbml0aWFsaXpl
KCkKIAogICAgICAgICAgICAgZHVtcE9wdGlvbnNJZk5lZWRlZCgpOwogICAgICAgICAgICAgZW5z
dXJlT3B0aW9uc0FyZUNvaGVyZW50KCk7CisKKyNpZiBIQVZFKE1BQ0hfRVhDRVBUSU9OUykKKyAg
ICAgICAgICAgIGlmIChPcHRpb25zOjp1c2VNYWNoRm9yRXhjZXB0aW9ucygpKQorICAgICAgICAg
ICAgICAgIFdURjo6aGFuZGxlU2lnbmFsc1dpdGhNYWNoKCk7CisjZW5kaWYKICAgICAgICAgfSk7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAppbmRleCBjZjlkYzJi
MmE4MjU2OGVlMDdkYTA4ODllMzliNmIyZjlkY2Q3OTc1Li4yMjc0ZDFjZGViMzMzNmUzN2FiNDQ3
M2VhNDExNmVhMzIyOWU5MzdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcHRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
cy5oCkBAIC00MjAsNiArNDIwLDggQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7
CiAgICAgdih1bnNpZ25lZCwgd2F0Y2hkb2csIDAsIE5vcm1hbCwgIndhdGNoZG9nIHRpbWVvdXQg
KDAgPSBEaXNhYmxlZCwgTiA9IGEgdGltZW91dCBwZXJpb2Qgb2YgTiBtaWxsaXNlY29uZHMpIikg
XAogICAgIHYoYm9vbCwgdXNlUG9sbGluZ1RyYXBzLCBmYWxzZSwgTm9ybWFsLCAidXNlIHBvbGxp
bmcgKGluc3RlYWQgb2Ygc2lnbmFsbGluZykgVk0gdHJhcHMiKSBcCiAgICAgXAorICAgIHYoYm9v
bCwgdXNlTWFjaEZvckV4Y2VwdGlvbnMsIHRydWUsIE5vcm1hbCwgIlVzZSBtYWNoIGV4Y2VwdGlv
bnMgcmF0aGVyIHRoYW4gc2lnbmFscyB0byBoYW5kbGUgZmF1bHRzIGFuZCBwYXNzIHRocmVhZCBt
ZXNzYWdlcy4gKFRoaXMgZG9lcyBub3RoaW5nIG9uIHBsYXRmb3JtcyB3aXRob3V0IG1hY2gpIikg
XAorICAgIFwKICAgICB2KGJvb2wsIHVzZUlDU3RhdHMsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIp
IFwKICAgICBcCiAgICAgdih1bnNpZ25lZCwgcHJvdG90eXBlSGl0Q291bnRGb3JMTEludENhY2hp
bmcsIDIsIE5vcm1hbCwgIk51bWJlciBvZiBwcm90b3R5cGUgcHJvcGVydHkgaGl0cyBiZWZvcmUg
Y2FjaGluZyBhIHByb3RvdHlwZSBpbiB0aGUgTExJbnQuIEEgY291bnQgb2YgMCBtZWFucyBuZXZl
ciBjYWNoZS4iKSBcCkBAIC00NDMsNiArNDQ1LDcgQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRp
b25TdHJpbmc7CiAgICAgdih1bnNpZ25lZCwgd2ViQXNzZW1ibHlCQlFPcHRpbWl6YXRpb25MZXZl
bCwgMSwgTm9ybWFsLCAiQjMgT3B0aW1pemF0aW9uIGxldmVsIGZvciBCQlEgV2ViIEFzc2VtYmx5
IG1vZHVsZSBjb21waWxhdGlvbnMuIikgXAogICAgIHYodW5zaWduZWQsIHdlYkFzc2VtYmx5T01H
T3B0aW1pemF0aW9uTGV2ZWwsIE9wdGlvbnM6OmRlZmF1bHRCM09wdExldmVsKCksIE5vcm1hbCwg
IkIzIE9wdGltaXphdGlvbiBsZXZlbCBmb3IgT01HIFdlYiBBc3NlbWJseSBtb2R1bGUgY29tcGls
YXRpb25zLiIpIFwKICAgICBcCisgICAgdihib29sLCB1c2VCQlFUaWVyVXBDaGVja3MsIHRydWUs
IE5vcm1hbCwgIkVuYWJsZXMgdGllciB1cCBjaGVja3MgZm9yIG91ciBCQlEgY29kZS4iKSBcCiAg
ICAgdih1bnNpZ25lZCwgd2ViQXNzZW1ibHlPTUdUaWVyVXBDb3VudCwgNTAwMCwgTm9ybWFsLCAi
VGhlIGNvdW50ZG93biBiZWZvcmUgd2UgdGllciB1cCBhIGZ1bmN0aW9uIHRvIE9NRy4iKSBcCiAg
ICAgdih1bnNpZ25lZCwgd2ViQXNzZW1ibHlMb29wRGVjcmVtZW50LCAxNSwgTm9ybWFsLCAiVGhl
IGFtb3VudCB0aGUgdGllciB1cCBjb3VudGRvd24gaXMgZGVjcmVtZW50ZWQgb24gZWFjaCBsb29w
IGJhY2tlZGdlLiIpIFwKICAgICB2KHVuc2lnbmVkLCB3ZWJBc3NlbWJseUZ1bmN0aW9uRW50cnlE
ZWNyZW1lbnQsIDEsIE5vcm1hbCwgIlRoZSBhbW91bnQgdGhlIHRpZXIgdXAgY291bnRkb3duIGlz
IGRlY3JlbWVudGVkIG9uIGVhY2ggZnVuY3Rpb24gZW50cnkuIikgXApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTVRyYXBzLmNwcAppbmRleCAxYmFhY2U2MDQ0ZTY2MGE4ZTU0NDFmYmFk
MDE4ZWE5MDkzMWE0YzkxLi44YzU3YzQ1NmFlNDM2OGFkZjI4ZWEwYTY0NThlN2MwMzlhOTcwZWU5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTVRyYXBzLmNwcApAQCAtNTMsMTEg
KzUzLDExIEBAIEFMV0FZU19JTkxJTkUgVk0mIFZNVHJhcHM6OnZtKCkgY29uc3QKICNpZiBFTkFC
TEUoU0lHTkFMX0JBU0VEX1ZNX1RSQVBTKQogCiBzdHJ1Y3QgU2lnbmFsQ29udGV4dCB7Ci0gICAg
U2lnbmFsQ29udGV4dChtY29udGV4dF90JiBtY29udGV4dCkKLSAgICAgICAgOiBtY29udGV4dCht
Y29udGV4dCkKLSAgICAgICAgLCB0cmFwUEMoTWFjaGluZUNvbnRleHQ6Omluc3RydWN0aW9uUG9p
bnRlcihtY29udGV4dCkpCi0gICAgICAgICwgc3RhY2tQb2ludGVyKE1hY2hpbmVDb250ZXh0Ojpz
dGFja1BvaW50ZXIobWNvbnRleHQpKQotICAgICAgICAsIGZyYW1lUG9pbnRlcihNYWNoaW5lQ29u
dGV4dDo6ZnJhbWVQb2ludGVyKG1jb250ZXh0KSkKKyAgICBTaWduYWxDb250ZXh0KFBsYXRmb3Jt
UmVnaXN0ZXJzJiByZWdpc3RlcnMpCisgICAgICAgIDogcmVnaXN0ZXJzKHJlZ2lzdGVycykKKyAg
ICAgICAgLCB0cmFwUEMoTWFjaGluZUNvbnRleHQ6Omluc3RydWN0aW9uUG9pbnRlcihyZWdpc3Rl
cnMpKQorICAgICAgICAsIHN0YWNrUG9pbnRlcihNYWNoaW5lQ29udGV4dDo6c3RhY2tQb2ludGVy
KHJlZ2lzdGVycykpCisgICAgICAgICwgZnJhbWVQb2ludGVyKE1hY2hpbmVDb250ZXh0OjpmcmFt
ZVBvaW50ZXIocmVnaXN0ZXJzKSkKICAgICB7CiAjaWYgQ1BVKFg4Nl82NCkgfHwgQ1BVKFg4NikK
ICAgICAgICAgLy8gT24gWDg2XzY0LCBTSUdUUkFQIHJlcG9ydHMgdGhlIGFkZHJlc3MgYWZ0ZXIg
dGhlIHRyYXBwaW5nIFBDLiBTbywgZGVjIGJ5IDEuCkBAIC02OCwxMSArNjgsMTEgQEAgc3RydWN0
IFNpZ25hbENvbnRleHQgewogICAgIHZvaWQgYWRqdXN0UENUb1BvaW50VG9UcmFwcGluZ0luc3Ry
dWN0aW9uKCkKICAgICB7CiAjaWYgQ1BVKFg4Nl82NCkgfHwgQ1BVKFg4NikKLSAgICAgICAgTWFj
aGluZUNvbnRleHQ6Omluc3RydWN0aW9uUG9pbnRlcihtY29udGV4dCkgPSB0cmFwUEM7CisgICAg
ICAgIE1hY2hpbmVDb250ZXh0OjppbnN0cnVjdGlvblBvaW50ZXIocmVnaXN0ZXJzKSA9IHRyYXBQ
QzsKICNlbmRpZgogICAgIH0KIAotICAgIG1jb250ZXh0X3QmIG1jb250ZXh0OworICAgIFBsYXRm
b3JtUmVnaXN0ZXJzJiByZWdpc3RlcnM7CiAgICAgdm9pZCogdHJhcFBDOwogICAgIHZvaWQqIHN0
YWNrUG9pbnRlcjsKICAgICB2b2lkKiBmcmFtZVBvaW50ZXI7CkBAIC0xMzAsOCArMTMwLDggQEAg
c3RhdGljIEV4cGVjdGVkPFZNQW5kU3RhY2tCb3VuZHMsIFZNVHJhcHM6OkVycm9yPiBmaW5kQWN0
aXZlVk1BbmRTdGFja0JvdW5kcyhTaWcKIAogc3RhdGljIHZvaWQgaW5zdGFsbFNpZ25hbEhhbmRs
ZXIoKQogewotICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbDo6VHJhcCwgW10gKGludCwg
c2lnaW5mb190Kiwgdm9pZCogdWFwKSAtPiBTaWduYWxBY3Rpb24gewotICAgICAgICBTaWduYWxD
b250ZXh0IGNvbnRleHQoc3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+KHVhcCktPnVjX21jb250ZXh0
KTsKKyAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWw6OlRyYXAsIFtdIChTaWduYWwsIFNp
Z0luZm8mLCBQbGF0Zm9ybVJlZ2lzdGVycyYgcmVnaXN0ZXJzKSAtPiBTaWduYWxBY3Rpb24gewor
ICAgICAgICBTaWduYWxDb250ZXh0IGNvbnRleHQocmVnaXN0ZXJzKTsKIAogICAgICAgICBpZiAo
IWlzSklUUEMoY29udGV4dC50cmFwUEMpKQogICAgICAgICAgICAgcmV0dXJuIFNpZ25hbEFjdGlv
bjo6Tm90SGFuZGxlZDsKQEAgLTQwNCw4ICs0MDQsOCBAQCB2b2lkIFZNVHJhcHM6OlNpZ25hbFNl
bmRlcjo6c2VuZCgpCiAgICAgICAgICAgICBWTSYgdm0gPSAqbV92bTsKICAgICAgICAgICAgIGF1
dG8gb3B0aW9uYWxPd25lclRocmVhZCA9IHZtLm93bmVyVGhyZWFkKCk7CiAgICAgICAgICAgICBp
ZiAob3B0aW9uYWxPd25lclRocmVhZCkgewotICAgICAgICAgICAgICAgIHNlbmRNZXNzYWdlKCpv
cHRpb25hbE93bmVyVGhyZWFkLnZhbHVlKCkuZ2V0KCksIFtdIChzaWdpbmZvX3QqLCB1Y29udGV4
dF90KiB1Y29udGV4dCkgLT4gdm9pZCB7Ci0gICAgICAgICAgICAgICAgICAgIFNpZ25hbENvbnRl
eHQgY29udGV4dCh1Y29udGV4dC0+dWNfbWNvbnRleHQpOworICAgICAgICAgICAgICAgIHNlbmRN
ZXNzYWdlKCpvcHRpb25hbE93bmVyVGhyZWFkLnZhbHVlKCkuZ2V0KCksIFtdIChQbGF0Zm9ybVJl
Z2lzdGVycyYgcmVnaXN0ZXJzKSAtPiB2b2lkIHsKKyAgICAgICAgICAgICAgICAgICAgU2lnbmFs
Q29udGV4dCBjb250ZXh0KHJlZ2lzdGVycyk7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8gYWN0
aXZlVk1BbmRTdGFja0JvdW5kcyA9IGZpbmRBY3RpdmVWTUFuZFN0YWNrQm91bmRzKGNvbnRleHQp
OwogICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aXZlVk1BbmRTdGFja0JvdW5kcykgewogICAg
ICAgICAgICAgICAgICAgICAgICAgVk0qIHZtID0gYWN0aXZlVk1BbmRTdGFja0JvdW5kcy52YWx1
ZSgpLnZtOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1NpZ2lsbENy
YXNoQW5hbHl6ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1NpZ2lsbENyYXNo
QW5hbHl6ZXIuY3BwCmluZGV4IDRhZGFlZmYxY2RhMmQxZmJjNmY5MDYxZjA2M2UxNGQyZTYzMzAw
NDguLjcxYTZlNDI1NWM2NDVkZDZhZjNiZGIyNTBjY2YxM2FkOGMxYThhNDQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9TaWdpbGxDcmFzaEFuYWx5emVyLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAKQEAg
LTc4LDExICs3OCwxMSBAQCBwcml2YXRlOgogI2VuZGlmIC8vIFVTRShPU19MT0cpCiAKIHN0cnVj
dCBTaWduYWxDb250ZXh0IHsKLSAgICBTaWduYWxDb250ZXh0KG1jb250ZXh0X3QmIG1jb250ZXh0
KQotICAgICAgICA6IG1jb250ZXh0KG1jb250ZXh0KQotICAgICAgICAsIG1hY2hpbmVQQyhNYWNo
aW5lQ29udGV4dDo6aW5zdHJ1Y3Rpb25Qb2ludGVyKG1jb250ZXh0KSkKLSAgICAgICAgLCBzdGFj
a1BvaW50ZXIoTWFjaGluZUNvbnRleHQ6OnN0YWNrUG9pbnRlcihtY29udGV4dCkpCi0gICAgICAg
ICwgZnJhbWVQb2ludGVyKE1hY2hpbmVDb250ZXh0OjpmcmFtZVBvaW50ZXIobWNvbnRleHQpKQor
ICAgIFNpZ25hbENvbnRleHQoUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVycykKKyAgICAgICAg
OiByZWdpc3RlcnMocmVnaXN0ZXJzKQorICAgICAgICAsIG1hY2hpbmVQQyhNYWNoaW5lQ29udGV4
dDo6aW5zdHJ1Y3Rpb25Qb2ludGVyKHJlZ2lzdGVycykpCisgICAgICAgICwgc3RhY2tQb2ludGVy
KE1hY2hpbmVDb250ZXh0OjpzdGFja1BvaW50ZXIocmVnaXN0ZXJzKSkKKyAgICAgICAgLCBmcmFt
ZVBvaW50ZXIoTWFjaGluZUNvbnRleHQ6OmZyYW1lUG9pbnRlcihyZWdpc3RlcnMpKQogICAgIHsg
fQogCiAgICAgdm9pZCBkdW1wKCkKQEAgLTExMiw3ICsxMTIsNyBAQCBzdHJ1Y3QgU2lnbmFsQ29u
dGV4dCB7CiAgICAgICAgIHYoZ3MpCiAKICNkZWZpbmUgRFVNUF9SRUdJU1RFUihfX3JlZykgXAot
ICAgICAgICBsb2coIlJlZ2lzdGVyICIgI19fcmVnICI6ICVwIiwgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4obWNvbnRleHQtPl9fc3MuX18jI19fcmVnKSk7CisgICAgICAgIGxvZygiUmVnaXN0ZXIg
IiAjX19yZWcgIjogJXAiLCByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWdpc3RlcnMuX18jI19f
cmVnKSk7CiAgICAgICAgIEZPUl9FQUNIX1JFR0lTVEVSKERVTVBfUkVHSVNURVIpCiAjdW5kZWYg
Rk9SX0VBQ0hfUkVHSVNURVIKIApAQCAtMTIwLDIwICsxMjAsMjAgQEAgc3RydWN0IFNpZ25hbENv
bnRleHQgewogICAgICAgICBpbnQgaTsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IDI4OyBpICs9
IDQpIHsKICAgICAgICAgICAgIGxvZygieCVkOiAlMDE2bGx4IHglZDogJTAxNmxseCB4JWQ6ICUw
MTZsbHggeCVkOiAlMDE2bGx4IiwKLSAgICAgICAgICAgICAgICBpLCBtY29udGV4dC0+X19zcy5f
X3hbaV0sCi0gICAgICAgICAgICAgICAgaSsxLCBtY29udGV4dC0+X19zcy5fX3hbaSsxXSwKLSAg
ICAgICAgICAgICAgICBpKzIsIG1jb250ZXh0LT5fX3NzLl9feFtpKzJdLAotICAgICAgICAgICAg
ICAgIGkrMywgbWNvbnRleHQtPl9fc3MuX194W2krM10pOworICAgICAgICAgICAgICAgIGksIHJl
Z2lzdGVycy5fX3hbaV0sCisgICAgICAgICAgICAgICAgaSsxLCByZWdpc3RlcnMuX194W2krMV0s
CisgICAgICAgICAgICAgICAgaSsyLCByZWdpc3RlcnMuX194W2krMl0sCisgICAgICAgICAgICAg
ICAgaSszLCByZWdpc3RlcnMuX194W2krM10pOwogICAgICAgICB9CiAgICAgICAgIEFTU0VSVChp
IDwgMjkpOwogICAgICAgICBsb2coInglZDogJTAxNmxseCBmcDogJTAxNmxseCBscjogJTAxNmxs
eCIsCi0gICAgICAgICAgICBpLCBtY29udGV4dC0+X19zcy5fX3hbaV0sIG1jb250ZXh0LT5fX3Nz
Ll9fZnAsIG1jb250ZXh0LT5fX3NzLl9fbHIpOworICAgICAgICAgICAgaSwgcmVnaXN0ZXJzLl9f
eFtpXSwgcmVnaXN0ZXJzLl9fZnAsIHJlZ2lzdGVycy5fX2xyKTsKICAgICAgICAgbG9nKCJzcDog
JTAxNmxseCBwYzogJTAxNmxseCBjcHNyOiAlMDh4IiwKLSAgICAgICAgICAgIG1jb250ZXh0LT5f
X3NzLl9fc3AsIG1jb250ZXh0LT5fX3NzLl9fcGMsIG1jb250ZXh0LT5fX3NzLl9fY3Bzcik7Cisg
ICAgICAgICAgICByZWdpc3RlcnMuX19zcCwgcmVnaXN0ZXJzLl9fcGMsIHJlZ2lzdGVycy5fX2Nw
c3IpOwogI2VuZGlmCiAgICAgfQogCi0gICAgbWNvbnRleHRfdCYgbWNvbnRleHQ7CisgICAgUGxh
dGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVyczsKICAgICB2b2lkKiBtYWNoaW5lUEM7CiAgICAgdm9p
ZCogc3RhY2tQb2ludGVyOwogICAgIHZvaWQqIGZyYW1lUG9pbnRlcjsKQEAgLTE0Miw4ICsxNDIs
OCBAQCBzdHJ1Y3QgU2lnbmFsQ29udGV4dCB7CiBzdGF0aWMgdm9pZCBpbnN0YWxsQ3Jhc2hIYW5k
bGVyKCkKIHsKICNpZiBDUFUoWDg2XzY0KSB8fCBDUFUoQVJNNjQpCi0gICAgaW5zdGFsbFNpZ25h
bEhhbmRsZXIoU2lnbmFsOjpJbGwsIFtdIChpbnQsIHNpZ2luZm9fdCosIHZvaWQqIHVhcCkgewot
ICAgICAgICBTaWduYWxDb250ZXh0IGNvbnRleHQoc3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+KHVh
cCktPnVjX21jb250ZXh0KTsKKyAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWw6OklsbCwg
W10gKFNpZ25hbCwgU2lnSW5mbyYsIFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMpIHsKKyAg
ICAgICAgU2lnbmFsQ29udGV4dCBjb250ZXh0KHJlZ2lzdGVycyk7CiAKICAgICAgICAgaWYgKCFp
c0pJVFBDKGNvbnRleHQubWFjaGluZVBDKSkKICAgICAgICAgICAgIHJldHVybiBTaWduYWxBY3Rp
b246Ok5vdEhhbmRsZWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtQkJRUGxhbi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQkJRUGxhbi5j
cHAKaW5kZXggMWRkMGNkMWQ4MzVjNmMyZjIzMWIwMGI4ODZkZGU0YWY3MmMyNjNjZS4uYjFiNTk4
ZDIwYzVjMDA3N2Q5ZTlkMDhlMzY4YWQ1Y2ExNzgzMWJhZiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcApAQCAtMjQyLDcgKzI0Miw3IEBAIHZvaWQgQkJRUGxh
bjo6Y29tcGlsZUZ1bmN0aW9ucyhDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCiAgICAgICAgIEFT
U0VSVCh2YWxpZGF0ZUZ1bmN0aW9uKGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9uTGVuZ3RoLCBzaWdu
YXR1cmUsIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCkpKTsKIAogICAgICAgICBtX3VubGlua2Vk
V2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdID0gVmVjdG9yPFVubGlua2VkV2FzbVRvV2Fz
bUNhbGw+KCk7Ci0gICAgICAgIFRpZXJVcENvdW50KiB0aWVyVXAgPSAmbV90aWVyVXBDb3VudHNb
ZnVuY3Rpb25JbmRleF07CisgICAgICAgIFRpZXJVcENvdW50KiB0aWVyVXAgPSBPcHRpb25zOjp1
c2VCQlFUaWVyVXBDaGVja3MoKSA/ICZtX3RpZXJVcENvdW50c1tmdW5jdGlvbkluZGV4XSA6IG51
bGxwdHI7CiAgICAgICAgIGF1dG8gcGFyc2VBbmRDb21waWxlUmVzdWx0ID0gcGFyc2VBbmRDb21w
aWxlKG1fY29tcGlsYXRpb25Db250ZXh0c1tmdW5jdGlvbkluZGV4XSwgZnVuY3Rpb25TdGFydCwg
ZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgbV91bmxpbmtlZFdhc21Ub1dhc21DYWxsc1tmdW5j
dGlvbkluZGV4XSwgbV9tb2R1bGVJbmZvcm1hdGlvbi5nZXQoKSwgbV9tb2RlLCBDb21waWxhdGlv
bk1vZGU6OkJCUU1vZGUsIGZ1bmN0aW9uSW5kZXgsIHRpZXJVcCk7CiAKICAgICAgICAgaWYgKFVO
TElLRUxZKCFwYXJzZUFuZENvbXBpbGVSZXN1bHQpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwCmluZGV4IDJlMGM5OWEz
OWJlYmQzMTc4YjkxNDhkOTU4ZmU1M2U1N2E2MjI5N2UuLjI2NGMzNGRlNDVkYTE3NWE1ZDUxNDFj
MTcxZWZlOTVlMDYzYzVlMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwCkBAIC01Miw5ICs1Miw4IEBAIHN0YXRpYyBM
YXp5TmV2ZXJEZXN0cm95ZWQ8SGFzaFNldDxzdGQ6OnR1cGxlPHZvaWQqLCB2b2lkKj4+PiBjb2Rl
TG9jYXRpb25zOyAvLyAoCiAKIHN0YXRpYyBib29sIGZhc3RIYW5kbGVySW5zdGFsbGVkIHsgZmFs
c2UgfTsKIAotc3RhdGljIFNpZ25hbEFjdGlvbiB0cmFwSGFuZGxlcihpbnQsIHNpZ2luZm9fdCog
c2lnSW5mbywgdm9pZCogdWNvbnRleHQpCitzdGF0aWMgU2lnbmFsQWN0aW9uIHRyYXBIYW5kbGVy
KFNpZ25hbCwgU2lnSW5mbyYgc2lnSW5mbywgUGxhdGZvcm1SZWdpc3RlcnMmIGNvbnRleHQpCiB7
Ci0gICAgbWNvbnRleHRfdCYgY29udGV4dCA9IHN0YXRpY19jYXN0PHVjb250ZXh0X3QqPih1Y29u
dGV4dCktPnVjX21jb250ZXh0OwogICAgIHZvaWQqIGZhdWx0aW5nSW5zdHJ1Y3Rpb24gPSBNYWNo
aW5lQ29udGV4dDo6aW5zdHJ1Y3Rpb25Qb2ludGVyKGNvbnRleHQpOwogICAgIGRhdGFMb2dMbklm
KHZlcmJvc2UsICJzdGFydGluZyBoYW5kbGVyIGZvciBmYXVsdCBhdDogIiwgUmF3UG9pbnRlcihm
YXVsdGluZ0luc3RydWN0aW9uKSk7CiAKQEAgLTY0LDcgKzYzLDcgQEAgc3RhdGljIFNpZ25hbEFj
dGlvbiB0cmFwSGFuZGxlcihpbnQsIHNpZ2luZm9fdCogc2lnSW5mbywgdm9pZCogdWNvbnRleHQp
CiAgICAgaWYgKGlzSklUUEMoZmF1bHRpbmdJbnN0cnVjdGlvbikpIHsKICAgICAgICAgYm9vbCBm
YXVsdGVkSW5BY3RpdmVGYXN0TWVtb3J5ID0gZmFsc2U7CiAgICAgICAgIHsKLSAgICAgICAgICAg
IHZvaWQqIGZhdWx0aW5nQWRkcmVzcyA9IHNpZ0luZm8tPnNpX2FkZHI7CisgICAgICAgICAgICB2
b2lkKiBmYXVsdGluZ0FkZHJlc3MgPSBzaWdJbmZvLmZhdWx0aW5nQWRkcmVzczsKICAgICAgICAg
ICAgIGRhdGFMb2dMbklmKHZlcmJvc2UsICJjaGVja2luZyBmYXVsdGluZyBhZGRyZXNzOiAiLCBS
YXdQb2ludGVyKGZhdWx0aW5nQWRkcmVzcyksICIgaXMgaW4gYW4gYWN0aXZlIGZhc3QgbWVtb3J5
Iik7CiAgICAgICAgICAgICBmYXVsdGVkSW5BY3RpdmVGYXN0TWVtb3J5ID0gV2FzbTo6TWVtb3J5
OjphZGRyZXNzSXNJbkFjdGl2ZUZhc3RNZW1vcnkoZmF1bHRpbmdBZGRyZXNzKTsKICAgICAgICAg
fQpAQCAtMTI0LDExICsxMjMsMTEgQEAgdm9pZCBlbmFibGVGYXN0TWVtb3J5KCkKICAgICAgICAg
ICAgIHJldHVybjsKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWV9GQVNUX01FTU9SWSkKLSAgICAg
ICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFsOjpCdXMsIFtdIChpbnQgc2lnbmFsLCBzaWdp
bmZvX3QqIHNpZ0luZm8sIHZvaWQqIHVjb250ZXh0KSB7CisgICAgICAgIGluc3RhbGxTaWduYWxI
YW5kbGVyKFNpZ25hbDo6QnVzLCBbXSAoU2lnbmFsIHNpZ25hbCwgU2lnSW5mbyYgc2lnSW5mbywg
UGxhdGZvcm1SZWdpc3RlcnMmIHVjb250ZXh0KSB7CiAgICAgICAgICAgICByZXR1cm4gdHJhcEhh
bmRsZXIoc2lnbmFsLCBzaWdJbmZvLCB1Y29udGV4dCk7CiAgICAgICAgIH0pOwogCi0gICAgICAg
IGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbDo6U2VnViwgW10gKGludCBzaWduYWwsIHNpZ2lu
Zm9fdCogc2lnSW5mbywgdm9pZCogdWNvbnRleHQpIHsKKyAgICAgICAgaW5zdGFsbFNpZ25hbEhh
bmRsZXIoU2lnbmFsOjpTZWdWLCBbXSAoU2lnbmFsIHNpZ25hbCwgU2lnSW5mbyYgc2lnSW5mbywg
UGxhdGZvcm1SZWdpc3RlcnMmIHVjb250ZXh0KSB7CiAgICAgICAgICAgICByZXR1cm4gdHJhcEhh
bmRsZXIoc2lnbmFsLCBzaWdJbmZvLCB1Y29udGV4dCk7CiAgICAgICAgIH0pOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTWFjaGluZVRocmVhZHMuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1hY2hpbmVUaHJlYWRzLmNwcAppbmRleCA1
YWFjODdhY2I1NzQ3YzdmY2EyZjkzNmVjOWNmNjc4YjQzMTc4MTcxLi4wYTM2N2ZkNWUyMjUyN2U5
YzNjODc1MzZlY2ZkNzJiMTNkZjc5ZDViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtTWFjaGluZVRocmVhZHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dhc21NYWNoaW5lVGhyZWFkcy5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRl
ICJNYWNoaW5lU3RhY2tNYXJrZXIuaCIKICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4K
ICNpbmNsdWRlIDx3dGYvVGhyZWFkTWVzc2FnZS5oPgorI2luY2x1ZGUgPHd0Zi90aHJlYWRzL1Np
Z25hbHMuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsKIApAQCAtNTcsNyAr
NTgsNyBAQCB2b2lkIHJlc2V0SW5zdHJ1Y3Rpb25DYWNoZU9uQWxsVGhyZWFkcygpCiAKICAgICBj
b25zdCBEb3VibHlMaW5rZWRMaXN0PE1hY2hpbmVUaHJlYWRzOjpNYWNoaW5lVGhyZWFkPiYgdGhy
ZWFkcyA9IHdhc21UaHJlYWRzKCkudGhyZWFkc0xpc3RIZWFkKGxvY2tlcik7CiAgICAgZm9yIChj
b25zdCBhdXRvKiB0aHJlYWQgPSB0aHJlYWRzLmhlYWQoKTsgdGhyZWFkOyB0aHJlYWQgPSB0aHJl
YWQtPm5leHQoKSkgewotICAgICAgICBzZW5kTWVzc2FnZSh0aHJlYWQtPm1fdGhyZWFkLmdldCgp
LCBbXSAoc2lnaW5mb190KiwgdWNvbnRleHRfdCopIHsKKyAgICAgICAgc2VuZE1lc3NhZ2UodGhy
ZWFkLT5tX3RocmVhZC5nZXQoKSwgW10gKGNvbnN0IFBsYXRmb3JtUmVnaXN0ZXJzJikgewogICAg
ICAgICAgICAgLy8gSXQncyBsaWtlbHkgdGhhdCB0aGUgc2lnbmFsIGhhbmRsZXIgd2lsbCBhbHJl
YWR5IHJlc2V0IHRoZSBpbnN0cnVjdGlvbiBjYWNoZSBidXQgd2UgbWlnaHQgYXMgd2VsbCBiZSBz
dXJlLgogICAgICAgICAgICAgV1RGOjpjcm9zc01vZGlmeWluZ0NvZGVGZW5jZSgpOwogICAgICAg
ICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ29uZmlndXJhdGlvbnMvV1RGLnhjY29uZmln
IGIvU291cmNlL1dURi9Db25maWd1cmF0aW9ucy9XVEYueGNjb25maWcKaW5kZXggNDIxZWZkOTYx
YzE0NjhjZDIwZGRjNWJiZjg4OTYyMGVlMWNmNThkYy4uYWYxOTljZWI5NTA2Zjg5NTBkMzNhOWNl
NDgwN2JhNmRiYjdiMjdlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9Db25maWd1cmF0aW9ucy9X
VEYueGNjb25maWcKKysrIGIvU291cmNlL1dURi9Db25maWd1cmF0aW9ucy9XVEYueGNjb25maWcK
QEAgLTI3LDMgKzI3LDYgQEAgUFJPRFVDVF9OQU1FID0gV1RGOwogCiBHQ0NfU1lNQk9MU19QUklW
QVRFX0VYVEVSTiA9IFlFUzsKIFNUUklQX0lOU1RBTExFRF9QUk9EVUNUID0gTk87CisKK0VYQ0xV
REVEX1NPVVJDRV9GSUxFX05BTUVTXyA9IE1hY2hFeGNlcHRpb25zLmRlZnMKK0VYQ0xVREVEX1NP
VVJDRV9GSUxFX05BTUVTW3Nkaz1pcGhvbmVvcypdID0gJChFWENMVURFRF9TT1VSQ0VfRklMRV9O
QU1FU18kKFVTRV9JTlRFUk5BTF9TREspKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKaW5kZXggNWY0NTI4N2Y2ZTNjNjg4NWIyMmJhMjc3NmNmYmM2YTMzMjNiZDA1Yi4u
NTg1NDRjY2I2MmNiMjIxMmJhZWU3NmY0ZDJhMDFlODliNmI3YjA5NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV1RGL1dU
Ri54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02NCw2ICs2NCw3IEBACiAJCTUyMTgzMDEy
Qzk5RTQ3NkE4NEVFQkVBOCAvKiBTeW1ib2xJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY3MkJCREIxMDdGQTQyNDg4NjE3OEI5RSAvKiBTeW1i
b2xJbXBsLmNwcCAqLzsgfTsKIAkJNTMxMUJENTMxRUE3MUNBRDAwNTI1MjgxIC8qIFNpZ25hbHMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMxMUJE
NTExRUE3MUNBRDAwNTI1MjgxIC8qIFNpZ25hbHMuY3BwICovOyB9OwogCQk1MzExQkQ1QzFFQTgy
MkY5MDA1MjUyODEgLyogVGhyZWFkTWVzc2FnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzExQkQ1QjFFQTgyMkY5MDA1MjUyODEgLyogVGhyZWFk
TWVzc2FnZS5jcHAgKi87IH07CisJCTUzNTM0RjJBMUVDMEUxMEUwMDE0MUIyRiAvKiBNYWNoRXhj
ZXB0aW9ucy5kZWZzIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTM1MzRGMjkxRUMwRTEwRTAwMTQxQjJGIC8qIE1hY2hFeGNlcHRpb25zLmRlZnMgKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoQ2xpZW50LCBTZXJ2ZXIsICk7IH07IH07CiAJCTcwQTk5
M0ZFMUFENzE1MTMwMEZBNjE1QiAvKiBTeW1ib2xSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MEE5OTNGQzFBRDcxNTEzMDBGQTYxNUIg
LyogU3ltYm9sUmVnaXN0cnkuY3BwICovOyB9OwogCQk3MEVDQTYwRDFCMDI0MjY4MDA0NDk3Mzkg
LyogQXRvbWljU3RyaW5nSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3MEVDQTYwQTFCMDI0MjY4MDA0NDk3MzkgLyogQXRvbWljU3RyaW5nSW1w
bC5jcHAgKi87IH07CiAJCTdBRkVDNkIxMUVCMjJCNTkwMERBREUzNiAvKiBVVUlELmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBRkVDNkIwMUVCMjJC
NTkwMERBREUzNiAvKiBVVUlELmNwcCAqLzsgfTsKQEAgLTI5OSw2ICszMDAsNyBAQAogCQk1MzEx
QkQ1NzFFQTdFMUExMDA1MjUyODEgLyogU2lnbmFscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTaWduYWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMTFC
RDU5MUVBODFBOTYwMDUyNTI4MSAvKiBUaHJlYWRNZXNzYWdlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFRocmVhZE1lc3NhZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTMxMUJENUIxRUE4MjJGOTAwNTI1MjgxIC8qIFRocmVhZE1lc3NhZ2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGhyZWFkTWVzc2FnZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUzNTM0RjI5MUVDMEUxMEUwMDE0MUIyRiAvKiBNYWNo
RXhjZXB0aW9ucy5kZWZzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5taWc7IHBhdGggPSBNYWNoRXhj
ZXB0aW9ucy5kZWZzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzlFQjA2MjFENTUy
ODQyMDBDODJFRjcgLyogTEVCRGVjb2Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBMRUJEZWNvZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRUMyNTND
MUU5NUFEMzAwMDA4MzFCOSAvKiBQcmlvcml0eVF1ZXVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFByaW9yaXR5UXVldWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTUzMDcxQzkxQzQwNDI3MjAwMzg0ODk4IC8qIFRpbnlMUlVDYWNoZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBUaW55TFJVQ2FjaGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTEwMjMsNiArMTAyNSw3IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQkxQTQy
OEI4QjFDOEY4OUREMDA1MUU5RUIgLyogQXBwS2l0Q29tcGF0aWJpbGl0eURlY2xhcmF0aW9ucy5o
ICovLAogCQkJCTFBQ0FERDgyMTg4NDQ4MDEwMEQ4QjcxRCAvKiBEZXByZWNhdGVkU3ltYm9sc1Vz
ZWRCeVNhZmFyaS5tbSAqLywKKwkJCQk1MzUzNEYyOTFFQzBFMTBFMDAxNDFCMkYgLyogTWFjaEV4
Y2VwdGlvbnMuZGVmcyAqLywKIAkJCQlBOEE0NzJDNTE1MUE4MjVBMDA0MTIzRkYgLyogTWFpblRo
cmVhZE1hYy5tbSAqLywKIAkJCSk7CiAJCQlwYXRoID0gbWFjOwpAQCAtMTM0Niw2ICsxMzQ5LDcg
QEAKIAkJCQkxNDNGNjExRjE1NjVGMEY5MDBEQjUxNEEgLyogUkFNU2l6ZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBM0I3MjVFQzk4NzQ0NkFEOTNGMUE0NDAgLyogUmFuZG9tRGV2aWNlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDE0MTUxQTgyNUIwMDQxMjNGRiAvKiBSYW5kb21OdW1i
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTM1MzRGMkExRUMwRTEwRTAwMTQxQjJGIC8qIE1h
Y2hFeGNlcHRpb25zLmRlZnMgaW4gU291cmNlcyAqLywKIAkJCQlBOEE0NzQxQTE1MUE4MjVCMDA0
MTIzRkYgLyogUmVmQ291bnRlZExlYWtDb3VudGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJD
REVEMEYzMTgxMTVDODUwMDREQkE3MCAvKiBSdW5Mb29wLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTJDREVEMEVGMTgxMTVDMzgwMDREQkE3MCAvKiBSdW5Mb29wQ0YuY3BwIGluIFNvdXJjZXMgKi8s
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oIGIvU291cmNlL1dURi93dGYv
UGxhdGZvcm0uaAppbmRleCA2ODU0YTgxZTM5NzI3MDY3MDM0ZDA1ZGIzOThhNDcwYzE0Mjg0Mjc2
Li4zNjM4ODM5NWQ0ZjQzYjQ2NTM4OWViYzk4MDJmYmI0ZDkwZDI0YjdiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgK
QEAgLTY2Myw2ICs2NjMsMTAgQEAKICNkZWZpbmUgSEFWRV9SRUFETElORSAxCiAjZGVmaW5lIEhB
VkVfU1lTX1RJTUVCX0ggMQogCisjaWYgX19oYXNfaW5jbHVkZSg8bWFjaC9tYWNoX2V4Yy5kZWZz
PikgJiYgIShQTEFURk9STShXQVRDSE9TKSB8fCBQTEFURk9STShBUFBMRVRWKSkKKyNkZWZpbmUg
SEFWRV9NQUNIX0VYQ0VQVElPTlMgMQorI2VuZGlmCisKICNpZiAhUExBVEZPUk0oR1RLKQogI2Rl
ZmluZSBVU0VfQUNDRUxFUkFURSAxCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L1BsYXRmb3JtUmVnaXN0ZXJzLmggYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVJlZ2lzdGVycy5o
CmluZGV4IGQ1YjVhYmMyMjFiYmFkODI5NzYxOTNlY2U1MWMxYzc2MTc1ZGIwNmQuLjg0YmQ4OTM3
NDk5ZGE5OWVhYTg2YjczNjk1ZjdjNWI4MWFjMjYwY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL1BsYXRmb3JtUmVnaXN0ZXJzLmgKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1SZWdp
c3RlcnMuaApAQCAtMjYsOSArMjYsMTEgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8d3Rm
L1BsYXRmb3JtLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCiAjaWYgT1MoREFS
V0lOKQogI2luY2x1ZGUgPG1hY2gvdGhyZWFkX2FjdC5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgog
I2VsaWYgT1MoV0lORE9XUykKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjZWxzZQpAQCAtNTUsNiAr
NTcsMTEgQEAgdHlwZWRlZiBhcm1fdGhyZWFkX3N0YXRlNjRfdCBQbGF0Zm9ybVJlZ2lzdGVyczsK
ICNlcnJvciBVbmtub3duIEFyY2hpdGVjdHVyZQogI2VuZGlmCiAKK2lubGluZSBQbGF0Zm9ybVJl
Z2lzdGVycyYgcmVnaXN0ZXJzRnJvbVVDb250ZXh0KHVjb250ZXh0X3QqIHVjb250ZXh0KQorewor
ICAgIHJldHVybiB1Y29udGV4dC0+dWNfbWNvbnRleHQtPl9fc3M7Cit9CisKICNlbGlmIE9TKFdJ
TkRPV1MpCiAKIHVzaW5nIFBsYXRmb3JtUmVnaXN0ZXJzID0gQ09OVEVYVDsKQEAgLTY1LDYgKzcy
LDExIEBAIHN0cnVjdCBQbGF0Zm9ybVJlZ2lzdGVycyB7CiAgICAgbWNvbnRleHRfdCBtYWNoaW5l
Q29udGV4dDsKIH07CiAKK2lubGluZSBQbGF0Zm9ybVJlZ2lzdGVycyYgcmVnaXN0ZXJzRnJvbVVD
b250ZXh0KHVjb250ZXh0X3QqIHVjb250ZXh0KQoreworICAgIHJldHVybiAqYml0d2lzZV9jYXN0
PFBsYXRmb3JtUmVnaXN0ZXJzKj4oJnVjb250ZXh0LT51Y19tY29udGV4dCk7Cit9CisKICNlbHNl
CiAKIHN0cnVjdCBQbGF0Zm9ybVJlZ2lzdGVycyB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0
Zi9TdGFja0JvdW5kcy5oIGIvU291cmNlL1dURi93dGYvU3RhY2tCb3VuZHMuaAppbmRleCA1NTQ2
MDRmMmFiNDg0YzdjZjcxZWUzODYzMGNlYjRjNzljMzNlOTcyLi5jZDYyYzE0OGE2YzdlZmM5NTE3
YThiMDliOGEzMmM3ZmUxOTBjZGVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9TdGFja0Jv
dW5kcy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1N0YWNrQm91bmRzLmgKQEAgLTU0LDcgKzU0LDYg
QEAgcHVibGljOgogICAgICAgICA6IG1fb3JpZ2luKG9yaWdpbikKICAgICAgICAgLCBtX2JvdW5k
KGVuZCkKICAgICB7Ci0gICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICB9CiAKICAgICB2
b2lkKiBvcmlnaW4oKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkSG9s
ZGVyLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlci5jcHAKaW5kZXggMzBiMjI3Y2Ri
OGFjNTI2MDc1MGI0N2Q0ODJhYmMyZDU1YmUzYWM5NC4uOTZkOTFiNWI4N2RkZjk3ODgwNWRiNmVi
MWY2MGRjMDBlMTQ5YTQ4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkSG9sZGVy
LmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXIuY3BwCkBAIC0zNCwxMiArMzQs
MTcgQEAKIAogI2luY2x1ZGUgIlRocmVhZGluZy5oIgogCisjaW5jbHVkZSA8d3RmL3RocmVhZHMv
U2lnbmFscy5oPgorCiBuYW1lc3BhY2UgV1RGIHsKIAogVGhyZWFkU3BlY2lmaWNLZXkgVGhyZWFk
SG9sZGVyOjptX2tleSA9IEludmFsaWRUaHJlYWRTcGVjaWZpY0tleTsKIAogVGhyZWFkSG9sZGVy
Ojp+VGhyZWFkSG9sZGVyKCkKIHsKKyNpZiBIQVZFKE1BQ0hfRVhDRVBUSU9OUykKKyAgICByZW1v
dmVUaHJlYWQoJm1fdGhyZWFkLmdldCgpKTsKKyNlbmRpZgogICAgIG1fdGhyZWFkLT5kaWRFeGl0
KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZE1lc3NhZ2UuY3BwIGIv
U291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5jcHAKaW5kZXggZjE0YmM0NWQzNjE0YzdjNjYz
NWViMTdhYjBlMjcyODE2YTEzNzNkZC4uMzJmNzkzYjYzMzA5MTk4YzM0YTEwZWNjMmE3OTQ3MWNl
NjNjYjRlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5jcHAKKysr
IGIvU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5jcHAKQEAgLTM2LDYgKzM2LDkgQEAKICNp
bmNsdWRlIDx3dGYvTG9ja2VyLmg+CiAjaW5jbHVkZSA8d3RmL3RocmVhZHMvU2lnbmFscy5oPgog
CisjaWYgSEFWRShNQUNIX0VYQ0VQVElPTlMpCisjaW5jbHVkZSA8bWFjaC90aHJlYWRfYWN0Lmg+
CisjZW5kaWYKIAogbmFtZXNwYWNlIFdURiB7CiAKQEAgLTgzLDEyICs4NiwxMiBAQCB2b2lkIGlu
aXRpYWxpemVUaHJlYWRNZXNzYWdlcygpCiB9CiAKIFNVUFBSRVNTX0FTQU4KLU1lc3NhZ2VTdGF0
dXMgc2VuZE1lc3NhZ2VTY29wZWQoVGhyZWFkJiB0aHJlYWQsIGNvbnN0IFRocmVhZE1lc3NhZ2Um
IG1lc3NhZ2UpCitzdGF0aWMgTWVzc2FnZVN0YXR1cyBzZW5kTWVzc2FnZVNpZ25hbChUaHJlYWQm
IHRocmVhZCwgY29uc3QgVGhyZWFkTWVzc2FnZSYgbWVzc2FnZSkKIHsKICAgICBjb25zdGV4cHIg
U2lnbmFsIHNpZ25hbCA9IFNpZ25hbDo6VXNyOwogICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBv
bmNlOwogICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2UsIFtdIHsKLSAgICAgICAgaW5zdGFsbFNpZ25h
bEhhbmRsZXIoc2lnbmFsLCBbXSAoaW50LCBzaWdpbmZvX3QqIGluZm8sIHZvaWQqIHVhcCkgewor
ICAgICAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihzaWduYWwsIFtdIChTaWduYWwsIFNpZ0luZm8m
LCBQbGF0Zm9ybVJlZ2lzdGVycyYgY29udGV4dCkgewogICAgICAgICAgICAgVGhyZWFkKiB0aHJl
YWQgPSBUaHJlYWQ6OmN1cnJlbnRNYXlCZU51bGwoKTsKIAogICAgICAgICAgICAgaWYgKCF0aHJl
YWQpIHsKQEAgLTk4LDcgKzEwMSw3IEBAIE1lc3NhZ2VTdGF0dXMgc2VuZE1lc3NhZ2VTY29wZWQo
VGhyZWFkJiB0aHJlYWQsIGNvbnN0IFRocmVhZE1lc3NhZ2UmIG1lc3NhZ2UpCiAKICAgICAgICAg
ICAgIC8vIE5vZGUgc2hvdWxkIGJlIGRlbGV0ZWQgaW4gdGhlIHNlbmRlciB0aHJlYWQuIERlbGV0
aW5nIE5vZGVzIGluIHNpZ25hbCBoYW5kbGVyIGNhdXNlcyBkZWFkIGxvY2suCiAgICAgICAgICAg
ICB0aHJlYWQtPnRocmVhZE1lc3NhZ2VzKCkuY29uc3VtZUFsbFdpdGhOb2RlKFsmXSAoVGhyZWFk
TWVzc2FnZURhdGEqIGRhdGEsIE5vZGUqIG5vZGUpIHsKLSAgICAgICAgICAgICAgICBkYXRhLT5t
ZXNzYWdlKGluZm8sIHN0YXRpY19jYXN0PHVjb250ZXh0X3QqPih1YXApKTsKKyAgICAgICAgICAg
ICAgICBkYXRhLT5tZXNzYWdlKGNvbnRleHQpOwogICAgICAgICAgICAgICAgIC8vIEJ5IHNldHRp
bmcgcmFuIHZhcmlhYmxlLCAoMSkgdGhlIHNlbmRlciBhY2tub3dsZWRnZXMgdGhlIGNvbXBsZXRp
b24gYW5kCiAgICAgICAgICAgICAgICAgLy8gKDIpIGdldHMgdGhlIE5vZGUgdG8gYmUgZGVsZXRl
ZC4KICAgICAgICAgICAgICAgICBkYXRhLT5yYW4uc3RvcmUobm9kZSk7CkBAIC0xNTYsNiArMTU5
LDYyIEBAIE1lc3NhZ2VTdGF0dXMgc2VuZE1lc3NhZ2VTY29wZWQoVGhyZWFkJiB0aHJlYWQsIGNv
bnN0IFRocmVhZE1lc3NhZ2UmIG1lc3NhZ2UpCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKIH0KIAorI2lmIEhBVkUoTUFDSF9FWENFUFRJT05TKQorc3RhdGljIE1lc3NhZ2VTdGF0
dXMgc2VuZE1lc3NhZ2VNYWNoKFRocmVhZCYgdGhyZWFkLCBjb25zdCBUaHJlYWRNZXNzYWdlJiBt
ZXNzYWdlKQoreworICAgIHN0YXRpYyBTdGF0aWNMb2NrIG1lc3NhZ2VMb2NrOworICAgIGF1dG8g
bG9ja2hvbGRlciA9IGhvbGRMb2NrKG1lc3NhZ2VMb2NrKTsKKworICAgIGF1dG8gcmVzdWx0ID0g
dGhyZWFkLnN1c3BlbmQoKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIE1lc3Nh
Z2VTdGF0dXM6OlRocmVhZEV4aXRlZDsKKworI2lmIENQVShYODYpCisgICAgdW5zaWduZWQgdXNl
ckNvdW50ID0gc2l6ZW9mKFBsYXRmb3JtUmVnaXN0ZXJzKSAvIHNpemVvZihpbnQpOworICAgIHRo
cmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSBpMzg2X1RIUkVBRF9TVEFURTsKKyNlbGlmIENQ
VShYODZfNjQpCisgICAgdW5zaWduZWQgdXNlckNvdW50ID0geDg2X1RIUkVBRF9TVEFURTY0X0NP
VU5UOworICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSB4ODZfVEhSRUFEX1NUQVRF
NjQ7CisjZWxpZiBDUFUoQVJNKQorICAgIHVuc2lnbmVkIHVzZXJDb3VudCA9IEFSTV9USFJFQURf
U1RBVEVfQ09VTlQ7CisgICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IEFSTV9USFJF
QURfU1RBVEU7CisjZWxpZiBDUFUoQVJNNjQpCisgICAgdW5zaWduZWQgdXNlckNvdW50ID0gQVJN
X1RIUkVBRF9TVEFURTY0X0NPVU5UOworICAgIHRocmVhZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3Ig
PSBBUk1fVEhSRUFEX1NUQVRFNjQ7CisjZWxzZQorI2Vycm9yIFVua25vd24gQXJjaGl0ZWN0dXJl
CisjZW5kaWYKKworICAgIFBsYXRmb3JtUmVnaXN0ZXJzIHJlZ2lzdGVyczsKKyAgICB0aHJlYWRf
c3RhdGVfdCBzdGF0ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dGhyZWFkX3N0YXRlX3Q+KCZyZWdpc3Rl
cnMpOworICAgIHRocmVhZF9nZXRfc3RhdGUodGhyZWFkLm1hY2hUaHJlYWQoKSwgZmxhdm9yLCBz
dGF0ZSwgJnVzZXJDb3VudCk7CisKKyAgICBtZXNzYWdlKHJlZ2lzdGVycyk7CisKKyAgICB0aHJl
YWRfc2V0X3N0YXRlKHRocmVhZC5tYWNoVGhyZWFkKCksIGZsYXZvciwgc3RhdGUsIHVzZXJDb3Vu
dCk7CisKKyAgICB0aHJlYWQucmVzdW1lKCk7CisgICAgcmV0dXJuIE1lc3NhZ2VTdGF0dXM6Ok1l
c3NhZ2VSYW47Cit9CisKK3N0YXRpYyBib29sIHVzZU1hY2ggPSBmYWxzZTsKK3ZvaWQgZGVsaXZl
ck1lc3NhZ2VzVXNpbmdNYWNoKCkKK3sKKyAgICB1c2VNYWNoID0gdHJ1ZTsKK30KKworI2VuZGlm
IC8vIEhBVkUoTUFDSF9FWENFUFRJT05TKQorCitNZXNzYWdlU3RhdHVzIHNlbmRNZXNzYWdlU2Nv
cGVkKFRocmVhZCYgdGhyZWFkLCBjb25zdCBUaHJlYWRNZXNzYWdlJiBtZXNzYWdlKQoreworI2lm
IEhBVkUoTUFDSF9FWENFUFRJT05TKQorICAgIGlmICh1c2VNYWNoKQorICAgICAgICByZXR1cm4g
c2VuZE1lc3NhZ2VNYWNoKHRocmVhZCwgbWVzc2FnZSk7CisjZW5kaWYKKyAgICByZXR1cm4gc2Vu
ZE1lc3NhZ2VTaWduYWwodGhyZWFkLCBtZXNzYWdlKTsKK30KKworCiB9IC8vIG5hbWVzcGFjZSBX
VEYKIAogI2VuZGlmIC8vIFVTRShQVEhSRUFEUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L1RocmVhZE1lc3NhZ2UuaCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZE1lc3NhZ2UuaAppbmRleCA5
YWU1M2YyOWNmN2U4ZmIwMGVmOTIxMWQxNmNlMmNkZWQ2MDNlYzFiLi4zMDA0NzJiM2U3MWM0MmVj
ODk4NzRhM2RlMGZmMzc2MWNhOTY5MTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJl
YWRNZXNzYWdlLmgKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5oCkBAIC0zNiw3
ICszNiw3IEBAIG5hbWVzcGFjZSBXVEYgewogdm9pZCBpbml0aWFsaXplVGhyZWFkTWVzc2FnZXMo
KTsKIAogY2xhc3MgVGhyZWFkTWVzc2FnZURhdGE7Ci11c2luZyBUaHJlYWRNZXNzYWdlID0gU2Nv
cGVkTGFtYmRhPHZvaWQoc2lnaW5mb190KiwgdWNvbnRleHRfdCopPjsKK3VzaW5nIFRocmVhZE1l
c3NhZ2UgPSBTY29wZWRMYW1iZGE8dm9pZChQbGF0Zm9ybVJlZ2lzdGVycyYpPjsKIAogZW51bSBj
bGFzcyBNZXNzYWdlU3RhdHVzIHsKICAgICBNZXNzYWdlUmFuLApAQCAtNTEsMTAgKzUxLDE0IEBA
IE1lc3NhZ2VTdGF0dXMgc2VuZE1lc3NhZ2VTY29wZWQoVGhyZWFkJiwgY29uc3QgVGhyZWFkTWVz
c2FnZSYpOwogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KIE1lc3NhZ2VTdGF0dXMgc2VuZE1l
c3NhZ2UoVGhyZWFkJiB0YXJnZXRUaHJlYWQsIGNvbnN0IEZ1bmN0b3ImIGZ1bmMpCiB7Ci0gICAg
YXV0byBsYW1iZGEgPSBzY29wZWRMYW1iZGFSZWY8dm9pZChzaWdpbmZvX3QqLCB1Y29udGV4dF90
Kik+KGZ1bmMpOworICAgIGF1dG8gbGFtYmRhID0gc2NvcGVkTGFtYmRhUmVmPHZvaWQoUGxhdGZv
cm1SZWdpc3RlcnMmKT4oZnVuYyk7CiAgICAgcmV0dXJuIHNlbmRNZXNzYWdlU2NvcGVkKHRhcmdl
dFRocmVhZCwgbGFtYmRhKTsKIH0KIAorI2lmIEhBVkUoTUFDSF9FWENFUFRJT05TKQordm9pZCBk
ZWxpdmVyTWVzc2FnZXNVc2luZ01hY2goKTsKKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXVEYK
IAogdXNpbmcgV1RGOjpzZW5kTWVzc2FnZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1Ro
cmVhZGluZy5oIGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmgKaW5kZXggZDJlNTM2ZGY3YTg2
OTZkOGU2Yjk1YmE0M2UxNzNkM2I1NTBiZjE2YS4uMzUxNGU4YzA5ZjBmYzk0ZDUzNGJlMmYzYjZl
N2M0OTUwZTBiY2YwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmgKKysr
IGIvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmgKQEAgLTEzOCw2ICsxMzgsMTAgQEAgcHVibGlj
OgogCiAjaWYgVVNFKFBUSFJFQURTKQogICAgIExvY2tsZXNzQmFnPFRocmVhZE1lc3NhZ2VEYXRh
Kj4mIHRocmVhZE1lc3NhZ2VzKCkgeyByZXR1cm4gbV90aHJlYWRNZXNzYWdlczsgfQorCisjaWYg
T1MoREFSV0lOKQorICAgIG1hY2hfcG9ydF90IG1hY2hUaHJlYWQoKSB7IHJldHVybiBtX3BsYXRm
b3JtVGhyZWFkOyB9CisjZW5kaWYKICNlbmRpZgogCiBwcm90ZWN0ZWQ6CmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL3d0Zi9tYWMvTWFjaEV4Y2VwdGlvbnMuZGVmcyBiL1NvdXJjZS9XVEYvd3RmL21h
Yy9NYWNoRXhjZXB0aW9ucy5kZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQyMDU3NDJhNGVkNTAwZjgwNjRmZWVi
NDk1NWE3Yzk3MGQ5OWFmMGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9tYWMv
TWFjaEV4Y2VwdGlvbnMuZGVmcwpAQCAtMCwwICsxLDI2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPG1hY2gvbWFjaF9leGMuZGVmcz4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RocmVhZHMvU2lnbmFscy5jcHAgYi9Tb3VyY2Uv
V1RGL3d0Zi90aHJlYWRzL1NpZ25hbHMuY3BwCmluZGV4IDg1NWIyOGIzMTcyMTcyN2NmMWY0MzFh
OTE4YTI1MWRjMmU2YTNkZmMuLjVmODJhNGE0NTdlM2Q2NTljOGVhYTMzMzY4YmZmMDM3OTRjMjJk
NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RocmVhZHMvU2lnbmFscy5jcHAKKysrIGIv
U291cmNlL1dURi93dGYvdGhyZWFkcy9TaWduYWxzLmNwcApAQCAtMjgsMjEgKzI4LDI2OSBAQAog
CiAjaWYgVVNFKFBUSFJFQURTKQogCisjaWYgSEFWRShNQUNIX0VYQ0VQVElPTlMpCitleHRlcm4g
IkMiIHsKKyNpbmNsdWRlICJNYWNoRXhjZXB0aW9uc1NlcnZlci5oIgorfTsKKyNlbmRpZgorCiAj
aW5jbHVkZSA8Y3N0ZGlvPgogI2luY2x1ZGUgPG11dGV4PgogI2luY2x1ZGUgPHNpZ25hbC5oPgor
CisjaWYgSEFWRShNQUNIX0VYQ0VQVElPTlMpCisjaW5jbHVkZSA8bWFjaC9tYWNoLmg+CisjaW5j
bHVkZSA8bWFjaC90aHJlYWRfYWN0Lmg+CisjZW5kaWYKKwogI2luY2x1ZGUgPHd0Zi9BdG9taWNz
Lmg+CiAjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgog
I2luY2x1ZGUgPHd0Zi9Mb2NrbGVzc0JhZy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3ll
ZC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRNZXNzYWdlLmg+CisjaW5jbHVkZSA8d3RmL1RocmVh
ZGluZy5oPgorCiAKIG5hbWVzcGFjZSBXVEYgewogCisgICAgCiBzdGF0aWMgTGF6eU5ldmVyRGVz
dHJveWVkPExvY2tsZXNzQmFnPFNpZ25hbEhhbmRsZXI+PiBoYW5kbGVyc1tzdGF0aWNfY2FzdDxz
aXplX3Q+KFNpZ25hbDo6TnVtYmVyT2ZTaWduYWxzKV0gPSB7IH07Ci1zdGF0aWMgc3RydWN0IHNp
Z2FjdGlvbiBvbGRBY3Rpb25zW3N0YXRpY19jYXN0PHNpemVfdD4oU2lnbmFsOjpOdW1iZXJPZlNp
Z25hbHMpXTsKIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBpbml0aWFsaXplT25jZUZsYWdzW3N0YXRp
Y19jYXN0PHNpemVfdD4oU2lnbmFsOjpOdW1iZXJPZlNpZ25hbHMpXTsKK3N0YXRpYyBzdHJ1Y3Qg
c2lnYWN0aW9uIG9sZEFjdGlvbnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihTaWduYWw6Ok51bWJlck9m
U2lnbmFscyldOworCisjaWYgSEFWRShNQUNIX0VYQ0VQVElPTlMpCisvLyBZb3UgY2FuIHJlYWQg
bW9yZSBhYm91bnQgbWFjaCBleGNlcHRpb25zIGhlcmU6CisvLyBodHRwOi8vd3d3LmNzLmNtdS5l
ZHUvYWZzL2NzL3Byb2plY3QvbWFjaC9wdWJsaWMvZG9jL3VucHVibGlzaGVkL2V4Y2VwdGlvbi5w
cworLy8gYW5kIHRoZSBNYWNoIGludGVyZmFjZSBHZW5lcmF0b3IgKE1pRykgaGVyZToKKy8vIGh0
dHA6Ly93d3cuY3MuY211LmVkdS9hZnMvY3MvcHJvamVjdC9tYWNoL3B1YmxpYy9kb2MvdW5wdWJs
aXNoZWQvbWlnLnBzCisKK3N0YXRpYyBtYWNoX3BvcnRfdCBleGNlcHRpb25Qb3J0Oworc3RhdGlj
IGNvbnN0ZXhwciBzaXplX3QgbWF4TWVzc2FnZVNpemUgPSAxICogS0I7CisKK3N0YXRpYyB2b2lk
IHN0YXJ0TWFjaEV4Y2VwdGlvbkhhbmRsZXJUaHJlYWQoKQoreworICAgIHN0YXRpYyBzdGQ6Om9u
Y2VfZmxhZyBvbmNlOworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2UsIFtdIHsKKyAgICAgICAgaWYg
KG1hY2hfcG9ydF9hbGxvY2F0ZShtYWNoX3Rhc2tfc2VsZigpLCBNQUNIX1BPUlRfUklHSFRfUkVD
RUlWRSwgJmV4Y2VwdGlvblBvcnQpICE9IEtFUk5fU1VDQ0VTUykKKyAgICAgICAgICAgIENSQVNI
KCk7CisKKyAgICAgICAgaWYgKG1hY2hfcG9ydF9pbnNlcnRfcmlnaHQobWFjaF90YXNrX3NlbGYo
KSwgZXhjZXB0aW9uUG9ydCwgZXhjZXB0aW9uUG9ydCwgTUFDSF9NU0dfVFlQRV9NQUtFX1NFTkQp
ICE9IEtFUk5fU1VDQ0VTUykKKyAgICAgICAgICAgIENSQVNIKCk7CisKKyAgICAgICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkIHVzZSBhIGRpc3BhdGNoIHF1ZXVlLgorICAgICAgICAvLyBTZWU6IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzIwMDMKKyAgICAgICAgKHZv
aWQpVGhyZWFkOjpjcmVhdGUoCisgICAgICAgICAgICAiV1RGIE1hY2ggRXhjZXB0aW9uIFRocmVh
ZCIsIFtdICgpIHsKKyAgICAgICAgICAgICAgICB1bmlvbiBNZXNzYWdlIHsKKyAgICAgICAgICAg
ICAgICAgICAgbWFjaF9tc2dfaGVhZGVyX3QgaGVhZGVyOworICAgICAgICAgICAgICAgICAgICBj
aGFyIGRhdGFbbWF4TWVzc2FnZVNpemVdOworICAgICAgICAgICAgICAgIH07CisgICAgICAgICAg
ICAgICAgTWVzc2FnZSBtZXNzYWdlSGVhZGVySW47CisgICAgICAgICAgICAgICAgTWVzc2FnZSBt
ZXNzYWdlSGVhZGVyT3V0OworCisgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAg
ICAgICAgICAgICAgICAga2Vybl9yZXR1cm5fdCBtZXNzYWdlUmVzdWx0ID0gbWFjaF9tc2coJm1l
c3NhZ2VIZWFkZXJJbi5oZWFkZXIsIE1BQ0hfUkNWX01TRywgMCwgbWF4TWVzc2FnZVNpemUsIGV4
Y2VwdGlvblBvcnQsIE1BQ0hfTVNHX1RJTUVPVVRfTk9ORSwgTUFDSF9QT1JUX05VTEwpOworICAg
ICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZVJlc3VsdCA9PSBLRVJOX1NVQ0NFU1MpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghbWFjaF9leGNfc2VydmVyKCZtZXNzYWdlSGVhZGVy
SW4uaGVhZGVyLCAmbWVzc2FnZUhlYWRlck91dC5oZWFkZXIpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENSQVNIKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VSZXN1
bHQgPSBtYWNoX21zZygmbWVzc2FnZUhlYWRlck91dC5oZWFkZXIsIE1BQ0hfU0VORF9NU0csIG1l
c3NhZ2VIZWFkZXJPdXQuaGVhZGVyLm1zZ2hfc2l6ZSwgMCwgbWVzc2FnZUhlYWRlck91dC5oZWFk
ZXIubXNnaF9sb2NhbF9wb3J0LCAwLCBNQUNIX1BPUlRfTlVMTCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChtZXNzYWdlUmVzdWx0ID09IEtFUk5fU1VDQ0VTUyk7Cisg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nTG4oIkZhaWxlZCB0byByZWNlaXZlIG1hY2ggbWVzc2FnZSBkdWUgdG8gIiwgbWFjaF9lcnJv
cl9zdHJpbmcobWVzc2FnZVJlc3VsdCkpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgfSkubGVha1JlZigpOworICAgIH0pOworfQorCitzdGF0aWMgU2ln
bmFsIGZyb21NYWNoRXhjZXB0aW9uKGV4Y2VwdGlvbl90eXBlX3QgdHlwZSkKK3sKKyAgICBzd2l0
Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEVYQ19CQURfQUNDRVNTOiByZXR1cm4gU2lnbmFsOjpTZWdW
OworICAgIGNhc2UgRVhDX0JBRF9JTlNUUlVDVElPTjogcmV0dXJuIFNpZ25hbDo6SWxsOworICAg
IGNhc2UgRVhDX0JSRUFLUE9JTlQ6IHJldHVybiBTaWduYWw6OlRyYXA7CisgICAgZGVmYXVsdDog
YnJlYWs7CisgICAgfQorICAgIHJldHVybiBTaWduYWw6OlVua25vd247Cit9CisKK3N0YXRpYyBl
eGNlcHRpb25fbWFza190IHRvTWFjaE1hc2soU2lnbmFsIHNpZ25hbCkKK3sKKyAgICBzd2l0Y2gg
KHNpZ25hbCkgeworICAgIGNhc2UgU2lnbmFsOjpTZWdWOiByZXR1cm4gRVhDX01BU0tfQkFEX0FD
Q0VTUzsKKyAgICBjYXNlIFNpZ25hbDo6SWxsOiByZXR1cm4gRVhDX01BU0tfQkFEX0lOU1RSVUNU
SU9OOworICAgIGNhc2UgU2lnbmFsOjpUcmFwOiByZXR1cm4gRVhDX01BU0tfQlJFQUtQT0lOVDsK
KyAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKworZXh0ZXJuICJDIiB7CisKKy8vIFdlIG5lZWQgdG8gaW1wbGVtZW50IHN0dWJz
IGZvciBjYXRjaF9tYWNoX2V4Y2VwdGlvbl9yYWlzZSBhbmQgY2F0Y2hfbWFjaF9leGNlcHRpb25f
cmFpc2Vfc3RhdGVfaWRlbnRpdHkuCisvLyBUaGUgTWlHIGdlbmVyYXRlZCBmaWxlIHdpbGwgZmFp
bCB0byBsaW5rIG90aGVyd2lzZSwgZXZlbiB0aG91Z2ggd2UgZG9uJ3QgdXNlIHRoZSBmdW5jdGlv
bnMuIE9ubHkgdGhlCisvLyBjYXRjaF9tYWNoX2V4Y2VwdGlvbl9yYWlzZV9zdGF0ZSBmdW5jdGlv
biBzaG91bGQgYmUgY2FsbGVkIGJlY2F1c2Ugd2UgcGFzcyBFWENFUFRJT05fU1RBVEUgdG8KKy8v
IHRocmVhZF9zZXRfZXhjZXB0aW9uX3BvcnRzLgora2Vybl9yZXR1cm5fdCBjYXRjaF9tYWNoX2V4
Y2VwdGlvbl9yYWlzZShtYWNoX3BvcnRfdCwgbWFjaF9wb3J0X3QsIG1hY2hfcG9ydF90LCBleGNl
cHRpb25fdHlwZV90LCBtYWNoX2V4Y2VwdGlvbl9kYXRhX3QsIG1hY2hfbXNnX3R5cGVfbnVtYmVy
X3QpCit7CisgICAgZGF0YUxvZ0xuKCJXZSBzaG91bGQgbm90IGhhdmUgY2FsbGVkIGNhdGNoX2V4
Y2VwdGlvbl9yYWlzZSgpLCBwbGVhc2UgZmlsZSBhIGJ1ZyBhdCBidWdzLndlYmtpdC5vcmciKTsK
KyAgICByZXR1cm4gS0VSTl9GQUlMVVJFOworfQorCitrZXJuX3JldHVybl90IGNhdGNoX21hY2hf
ZXhjZXB0aW9uX3JhaXNlX3N0YXRlX2lkZW50aXR5KG1hY2hfcG9ydF90LCBtYWNoX3BvcnRfdCwg
bWFjaF9wb3J0X3QsIGV4Y2VwdGlvbl90eXBlX3QsIG1hY2hfZXhjZXB0aW9uX2RhdGFfdCwgbWFj
aF9tc2dfdHlwZV9udW1iZXJfdCwgaW50KiwgdGhyZWFkX3N0YXRlX3QsIG1hY2hfbXNnX3R5cGVf
bnVtYmVyX3QsIHRocmVhZF9zdGF0ZV90LCAgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCopCit7Cisg
ICAgZGF0YUxvZ0xuKCJXZSBzaG91bGQgbm90IGhhdmUgY2FsbGVkIGNhdGNoX21hY2hfZXhjZXB0
aW9uX3JhaXNlX3N0YXRlX2lkZW50aXR5LCBwbGVhc2UgZmlsZSBhIGJ1ZyBhdCBidWdzLndlYmtp
dC5vcmciKTsKKyAgICByZXR1cm4gS0VSTl9GQUlMVVJFOworfQorCitrZXJuX3JldHVybl90IGNh
dGNoX21hY2hfZXhjZXB0aW9uX3JhaXNlX3N0YXRlKAorICAgIG1hY2hfcG9ydF90IHBvcnQsCisg
ICAgZXhjZXB0aW9uX3R5cGVfdCBleGNlcHRpb25UeXBlLAorICAgIGNvbnN0IG1hY2hfZXhjZXB0
aW9uX2RhdGFfdCBleGNlcHRpb25EYXRhLAorICAgIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QgZGF0
YUNvdW50LAorICAgIGludCogc3RhdGVGbGF2b3IsCisgICAgY29uc3QgdGhyZWFkX3N0YXRlX3Qg
aW5TdGF0ZSwKKyAgICBtYWNoX21zZ190eXBlX251bWJlcl90IGluU3RhdGVDb3VudCwKKyAgICB0
aHJlYWRfc3RhdGVfdCBvdXRTdGF0ZSwKKyAgICBtYWNoX21zZ190eXBlX251bWJlcl90KiBvdXRT
dGF0ZUNvdW50KQoreworICAgIFJFTEVBU0VfQVNTRVJUKHBvcnQgPT0gZXhjZXB0aW9uUG9ydCk7
CisgICAgU2lnbmFsIHNpZ25hbCA9IGZyb21NYWNoRXhjZXB0aW9uKGV4Y2VwdGlvblR5cGUpOwor
ICAgIFJFTEVBU0VfQVNTRVJUKHNpZ25hbCAhPSBTaWduYWw6OlVua25vd24pOworCisgICAgbWVt
Y3B5KG91dFN0YXRlLCBpblN0YXRlLCBpblN0YXRlQ291bnQgKiBzaXplb2YoaW5TdGF0ZVswXSkp
OworICAgICpvdXRTdGF0ZUNvdW50ID0gaW5TdGF0ZUNvdW50OworCisjaWYgQ1BVKFg4Nl82NCkK
KyAgICBSRUxFQVNFX0FTU0VSVCgqc3RhdGVGbGF2b3IgPT0geDg2X1RIUkVBRF9TVEFURSk7Cisg
ICAgUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8eDg2X3Ro
cmVhZF9zdGF0ZV90Kj4ob3V0U3RhdGUpLT51dHMudHM2NDsKKyNlbGlmIENQVShYODYpCisgICAg
UkVMRUFTRV9BU1NFUlQoKnN0YXRlRmxhdm9yID09IHg4Nl9USFJFQURfU1RBVEUpOworICAgIFBs
YXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMgPSByZWludGVycHJldF9jYXN0PHg4Nl90aHJlYWRf
c3RhdGVfdCo+KG91dFN0YXRlKS0+dXRzLnRzMzI7CisjZWxpZiBDUFUoQVJNNjQpCisgICAgUkVM
RUFTRV9BU1NFUlQoKnN0YXRlRmxhdm9yID09IEFSTV9USFJFQURfU1RBVEUpOworICAgIFBsYXRm
b3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMgPSByZWludGVycHJldF9jYXN0PGFybV91bmlmaWVkX3Ro
cmVhZF9zdGF0ZSo+KG91dFN0YXRlKS0+dHNfNjQ7CisjZWxpZiBDUFUoQVJNKQorICAgIFJFTEVB
U0VfQVNTRVJUKCpzdGF0ZUZsYXZvciA9PSBBUk1fVEhSRUFEX1NUQVRFKTsKKyAgICBQbGF0Zm9y
bVJlZ2lzdGVycyYgcmVnaXN0ZXJzID0gcmVpbnRlcnByZXRfY2FzdDxhcm1fdW5pZmllZF90aHJl
YWRfc3RhdGUqPihvdXRTdGF0ZSktPnRzXzMyOworI2VuZGlmCisKKyAgICBTaWdJbmZvIGluZm87
CisgICAgaWYgKHNpZ25hbCA9PSBTaWduYWw6OlNlZ1YpIHsKKyAgICAgICAgQVNTRVJUX1VOVVNF
RChkYXRhQ291bnQsIGRhdGFDb3VudCA9PSAyKTsKKyAgICAgICAgaW5mby5mYXVsdGluZ0FkZHJl
c3MgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihleGNlcHRpb25EYXRhWzFdKTsKKyAgICB9CisK
KyAgICBib29sIGRpZEhhbmRsZSA9IGZhbHNlOworICAgIGhhbmRsZXJzW3N0YXRpY19jYXN0PHNp
emVfdD4oc2lnbmFsKV0tPml0ZXJhdGUoWyZdIChjb25zdCBTaWduYWxIYW5kbGVyJiBoYW5kbGVy
KSB7CisgICAgICAgIFNpZ25hbEFjdGlvbiBoYW5kbGVyUmVzdWx0ID0gaGFuZGxlcihzaWduYWws
IGluZm8sIHJlZ2lzdGVycyk7CisgICAgICAgIHN3aXRjaCAoaGFuZGxlclJlc3VsdCkgeworICAg
ICAgICBjYXNlIFNpZ25hbEFjdGlvbjo6SGFuZGxlZDoKKyAgICAgICAgICAgIGRpZEhhbmRsZSA9
IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfSk7CisKKyAgICBpZiAoZGlkSGFuZGxlKQorICAgICAg
ICByZXR1cm4gS0VSTl9TVUNDRVNTOworICAgIHJldHVybiBLRVJOX0ZBSUxVUkU7Cit9CiAKLXN0
YXRpYyB2b2lkIGpzY1NpZ25hbEhhbmRsZXIoaW50IHNpZywgc2lnaW5mb190KiBpbmZvLCB2b2lk
KiBtY29udGV4dCkKK307CisKK3N0YXRpYyBib29sIHVzZU1hY2ggeyBmYWxzZSB9Owordm9pZCBo
YW5kbGVTaWduYWxzV2l0aE1hY2goKQoreworICAgIGRlbGl2ZXJNZXNzYWdlc1VzaW5nTWFjaCgp
OworICAgIHVzZU1hY2ggPSB0cnVlOworfQorCisKK3N0YXRpYyBTdGF0aWNMb2NrIHRocmVhZExv
Y2s7CitleGNlcHRpb25fbWFza190IGFjdGl2ZUV4Y2VwdGlvbnMgeyAwIH07CisKK2lubGluZSB2
b2lkIHNldEV4Y2VwdGlvblBvcnRzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgVGhyZWFkKiB0aHJl
YWQpCit7CisgICAga2Vybl9yZXR1cm5fdCByZXN1bHQgPSB0aHJlYWRfc2V0X2V4Y2VwdGlvbl9w
b3J0cyh0aHJlYWQtPm1hY2hUaHJlYWQoKSwgYWN0aXZlRXhjZXB0aW9ucywgZXhjZXB0aW9uUG9y
dCwgRVhDRVBUSU9OX1NUQVRFIHwgTUFDSF9FWENFUFRJT05fQ09ERVMsIE1BQ0hJTkVfVEhSRUFE
X1NUQVRFKTsKKyAgICBpZiAocmVzdWx0ICE9IEtFUk5fU1VDQ0VTUykgeworICAgICAgICBkYXRh
TG9nTG4oInRocmVhZCBzZXQgcG9ydCBmYWlsZWQgZHVlIHRvICIsIG1hY2hfZXJyb3Jfc3RyaW5n
KHJlc3VsdCkpOworICAgICAgICBDUkFTSCgpOworICAgIH0KK30KKworaW5saW5lIEhhc2hTZXQ8
VGhyZWFkKj4mIGFjdGl2ZVRocmVhZHMoY29uc3QgQWJzdHJhY3RMb2NrZXImKQoreworICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoU2V0PFRocmVhZCo+PiBhY3RpdmVUaHJlYWRzOworICAg
IHJldHVybiBhY3RpdmVUaHJlYWRzOworfQorCit2b2lkIHJlZ2lzdGVyVGhyZWFkKFRocmVhZCog
dGhyZWFkKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sodGhyZWFkTG9jayk7CisgICAg
YXV0byByZXN1bHQgPSBhY3RpdmVUaHJlYWRzKGxvY2tlcikuYWRkKHRocmVhZCk7CisKKyAgICBp
ZiAocmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIHNldEV4Y2VwdGlvblBvcnRzKGxvY2tlciwg
dGhyZWFkKTsKK30KKwordm9pZCByZW1vdmVUaHJlYWQoVGhyZWFkKiB0aHJlYWQpCit7CisgICAg
YXV0byBsb2NrZXIgPSBob2xkTG9jayh0aHJlYWRMb2NrKTsKKyAgICBhY3RpdmVUaHJlYWRzKGxv
Y2tlcikucmVtb3ZlKHRocmVhZCk7Cit9CisKKyNlbHNlCitzdGF0aWMgY29uc3RleHByIGJvb2wg
dXNlTWFjaCA9IGZhbHNlOworI2VuZGlmIC8vIEhBVkUoTUFDSF9FWENFUFRJT05TKQorCitzdGF0
aWMgdm9pZCBqc2NTaWduYWxIYW5kbGVyKGludCwgc2lnaW5mb190Kiwgdm9pZCopOworCit2b2lk
IGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbCBzaWduYWwsIFNpZ25hbEhhbmRsZXImJiBoYW5k
bGVyKQoreworICAgIEFTU0VSVChzaWduYWwgPCBTaWduYWw6OlVua25vd24pOworI2lmIEhBVkUo
TUFDSF9FWENFUFRJT05TKQorICAgIGlmIChzaWduYWwgPT0gU2lnbmFsOjpCdXMgJiYgdXNlTWFj
aCkKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVCghdXNlTWFjaCB8fCBzaWduYWwgIT0gU2ln
bmFsOjpVc3IpOworCisgICAgaWYgKHVzZU1hY2gpCisgICAgICAgIHN0YXJ0TWFjaEV4Y2VwdGlv
bkhhbmRsZXJUaHJlYWQoKTsKKyNlbmRpZgorCisgICAgc3RkOjpjYWxsX29uY2UoaW5pdGlhbGl6
ZU9uY2VGbGFnc1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNpZ25hbCldLCBbJl0geworICAgICAgICBo
YW5kbGVyc1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNpZ25hbCldLmNvbnN0cnVjdCgpOworCisgICAg
ICAgIGlmICghdXNlTWFjaCkgeworICAgICAgICAgICAgc3RydWN0IHNpZ2FjdGlvbiBhY3Rpb247
CisgICAgICAgICAgICBhY3Rpb24uc2Ffc2lnYWN0aW9uID0ganNjU2lnbmFsSGFuZGxlcjsKKyAg
ICAgICAgICAgIGF1dG8gcmVzdWx0ID0gc2lnZmlsbHNldCgmYWN0aW9uLnNhX21hc2spOworICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXJlc3VsdCk7CisgICAgICAgICAgICBhY3Rpb24uc2Ff
ZmxhZ3MgPSBTQV9TSUdJTkZPOworICAgICAgICAgICAgcmVzdWx0ID0gc2lnYWN0aW9uKHRvU3lz
dGVtU2lnbmFsKHNpZ25hbCksICZhY3Rpb24sICZvbGRBY3Rpb25zW3N0YXRpY19jYXN0PHNpemVf
dD4oc2lnbmFsKV0pOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXJlc3VsdCk7CisgICAg
ICAgIH0KKworICAgIH0pOworCisgICAgaGFuZGxlcnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzaWdu
YWwpXS0+YWRkKFdURk1vdmUoaGFuZGxlcikpOworCisjaWYgSEFWRShNQUNIX0VYQ0VQVElPTlMp
CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayh0aHJlYWRMb2NrKTsKKyAgICBpZiAodXNlTWFj
aCkgeworICAgICAgICBhY3RpdmVFeGNlcHRpb25zIHw9IHRvTWFjaE1hc2soc2lnbmFsKTsKKwor
ICAgICAgICBmb3IgKFRocmVhZCogdGhyZWFkIDogYWN0aXZlVGhyZWFkcyhsb2NrZXIpKQorICAg
ICAgICAgICAgc2V0RXhjZXB0aW9uUG9ydHMobG9ja2VyLCB0aHJlYWQpOworICAgIH0KKyNlbmRp
ZgorfQorCit2b2lkIGpzY1NpZ25hbEhhbmRsZXIoaW50IHNpZywgc2lnaW5mb190KiBpbmZvLCB2
b2lkKiB1Y29udGV4dCkKIHsKICAgICBTaWduYWwgc2lnbmFsID0gZnJvbVN5c3RlbVNpZ25hbChz
aWcpOwogCkBAIC02MiwxMCArMzEwLDE2IEBAIHN0YXRpYyB2b2lkIGpzY1NpZ25hbEhhbmRsZXIo
aW50IHNpZywgc2lnaW5mb190KiBpbmZvLCB2b2lkKiBtY29udGV4dCkKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAorICAgIFNpZ0luZm8gc2lnSW5mbzsKKyAgICBpZiAoc2lnbmFsID09IFNpZ25h
bDo6U2VnViB8fCBzaWduYWwgPT0gU2lnbmFsOjpCdXMpCisgICAgICAgIHNpZ0luZm8uZmF1bHRp
bmdBZGRyZXNzID0gaW5mby0+c2lfYWRkcjsKKworICAgIFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdp
c3RlcnMgPSByZWdpc3RlcnNGcm9tVUNvbnRleHQocmVpbnRlcnByZXRfY2FzdDx1Y29udGV4dF90
Kj4odWNvbnRleHQpKTsKKwogICAgIGJvb2wgZGlkSGFuZGxlID0gZmFsc2U7CiAgICAgYm9vbCBy
ZXN0b3JlRGVmYXVsdEhhbmRsZXIgPSBmYWxzZTsKICAgICBoYW5kbGVyc1tzdGF0aWNfY2FzdDxz
aXplX3Q+KHNpZ25hbCldLT5pdGVyYXRlKFsmXSAoY29uc3QgU2lnbmFsSGFuZGxlciYgaGFuZGxl
cikgewotICAgICAgICBzd2l0Y2ggKGhhbmRsZXIoc2lnLCBpbmZvLCBtY29udGV4dCkpIHsKKyAg
ICAgICAgc3dpdGNoIChoYW5kbGVyKHNpZ25hbCwgc2lnSW5mbywgcmVnaXN0ZXJzKSkgewogICAg
ICAgICBjYXNlIFNpZ25hbEFjdGlvbjo6SGFuZGxlZDoKICAgICAgICAgICAgIGRpZEhhbmRsZSA9
IHRydWU7CiAgICAgICAgICAgICBicmVhazsKQEAgLTg1LDEzICszMzksMTMgQEAgc3RhdGljIHZv
aWQganNjU2lnbmFsSGFuZGxlcihpbnQgc2lnLCBzaWdpbmZvX3QqIGluZm8sIHZvaWQqIG1jb250
ZXh0KQogICAgIHN0cnVjdCBzaWdhY3Rpb24mIG9sZEFjdGlvbiA9IG9sZEFjdGlvbnNbc3RhdGlj
X2Nhc3Q8c2l6ZV90PihzaWduYWwpXTsKICAgICBpZiAoc2lnbmFsID09IFNpZ25hbDo6VXNyKSB7
CiAgICAgICAgIGlmIChvbGRBY3Rpb24uc2Ffc2lnYWN0aW9uKQotICAgICAgICAgICAgb2xkQWN0
aW9uLnNhX3NpZ2FjdGlvbihzaWcsIGluZm8sIG1jb250ZXh0KTsKKyAgICAgICAgICAgIG9sZEFj
dGlvbi5zYV9zaWdhY3Rpb24oc2lnLCBpbmZvLCB1Y29udGV4dCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKICAgICBpZiAoIWRpZEhhbmRsZSkgewogICAgICAgICBpZiAob2xkQWN0aW9uLnNh
X3NpZ2FjdGlvbikgewotICAgICAgICAgICAgb2xkQWN0aW9uLnNhX3NpZ2FjdGlvbihzaWcsIGlu
Zm8sIG1jb250ZXh0KTsKKyAgICAgICAgICAgIG9sZEFjdGlvbi5zYV9zaWdhY3Rpb24oc2lnLCBp
bmZvLCB1Y29udGV4dCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMTAw
LDI0ICszNTQsNiBAQCBzdGF0aWMgdm9pZCBqc2NTaWduYWxIYW5kbGVyKGludCBzaWcsIHNpZ2lu
Zm9fdCogaW5mbywgdm9pZCogbWNvbnRleHQpCiAgICAgfQogfQogCi12b2lkIGluc3RhbGxTaWdu
YWxIYW5kbGVyKFNpZ25hbCBzaWduYWwsIFNpZ25hbEhhbmRsZXImJiBoYW5kbGVyKQotewotICAg
IEFTU0VSVChzaWduYWwgPCBTaWduYWw6OlVua25vd24pOwotICAgIHN0ZDo6Y2FsbF9vbmNlKGlu
aXRpYWxpemVPbmNlRmxhZ3Nbc3RhdGljX2Nhc3Q8c2l6ZV90PihzaWduYWwpXSwgWyZdIHsKLSAg
ICAgICAgaGFuZGxlcnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzaWduYWwpXS5jb25zdHJ1Y3QoKTsK
LQotICAgICAgICBzdHJ1Y3Qgc2lnYWN0aW9uIGFjdGlvbjsKLSAgICAgICAgYWN0aW9uLnNhX3Np
Z2FjdGlvbiA9IGpzY1NpZ25hbEhhbmRsZXI7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gc2lnZmls
bHNldCgmYWN0aW9uLnNhX21hc2spOwotICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmVzdWx0KTsK
LSAgICAgICAgYWN0aW9uLnNhX2ZsYWdzID0gU0FfU0lHSU5GTzsKLSAgICAgICAgcmVzdWx0ID0g
c2lnYWN0aW9uKHRvU3lzdGVtU2lnbmFsKHNpZ25hbCksICZhY3Rpb24sICZvbGRBY3Rpb25zW3N0
YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0pOwotICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmVz
dWx0KTsKLSAgICB9KTsKLQotICAgIGhhbmRsZXJzW3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFs
KV0tPmFkZChXVEZNb3ZlKGhhbmRsZXIpKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV1RGCiAKICNl
bmRpZiAvLyBVU0UoUFRIUkVBRFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90aHJlYWRz
L1NpZ25hbHMuaCBiL1NvdXJjZS9XVEYvd3RmL3RocmVhZHMvU2lnbmFscy5oCmluZGV4IDFlNGVi
NDZlYWE3NzRhMWVlODlmNmZiMmRhZWYzMzI2OGNlNTY3NzkuLmFjYTZiMzRmODE2ZjAxNzY5MzAw
MzZjMThiODIxYzI3YWJiMGU2MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RocmVhZHMv
U2lnbmFscy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RocmVhZHMvU2lnbmFscy5oCkBAIC0yOSw2
ICsyOSw3IEBACiAKICNpbmNsdWRlIDxzaWduYWwuaD4KICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24u
aD4KKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm1SZWdpc3RlcnMuaD4KIAogbmFtZXNwYWNlIFdURiB7
CiAKQEAgLTc5LDcgKzgwLDExIEBAIGVudW0gY2xhc3MgU2lnbmFsQWN0aW9uIHsKICAgICBGb3Jj
ZURlZmF1bHQKIH07CiAKLXVzaW5nIFNpZ25hbEhhbmRsZXIgPSBGdW5jdGlvbjxTaWduYWxBY3Rp
b24oaW50LCBzaWdpbmZvX3QqLCB2b2lkKik+Oworc3RydWN0IFNpZ0luZm8geworICAgIHZvaWQq
IGZhdWx0aW5nQWRkcmVzcyB7IDAgfTsKK307CisKK3VzaW5nIFNpZ25hbEhhbmRsZXIgPSBGdW5j
dGlvbjxTaWduYWxBY3Rpb24oU2lnbmFsLCBTaWdJbmZvJiwgUGxhdGZvcm1SZWdpc3RlcnMmKT47
CiAKIC8vIENhbGwgdGhpcyBtZXRob2Qgd2hlbmV2ZXIgeW91IHdhbnQgdG8gaW5zdGFsbCBhIHNp
Z25hbCBoYW5kbGVyLiBJdCdzIG9rIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBsYXppbHkuCiAvLyBO
b3RlOiBZb3VyIHNpZ25hbCBoYW5kbGVyIHdpbGwgYmUgY2FsbGVkIGV2ZXJ5IHRpbWUgdGhlIGhh
bmRsZXIgZm9yIHRoZSBkZXNpcmVkIHNpZ25hbCBpcyBjYWxsZWQuCkBAIC04Nyw5ICs5MiwxOSBA
QCB1c2luZyBTaWduYWxIYW5kbGVyID0gRnVuY3Rpb248U2lnbmFsQWN0aW9uKGludCwgc2lnaW5m
b190Kiwgdm9pZCopPjsKIC8vIFRoaXMgZnVuY3Rpb24gaXMgY3VycmVudGx5IGEgb25lIHdheSBz
dHJlZXQgaS5lLiBvbmNlIGluc3RhbGxlZCwgYSBzaWduYWwgaGFuZGxlciBjYW5ub3QgYmUgdW5p
bnN0YWxsZWQuCiB2b2lkIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbCwgU2lnbmFsSGFuZGxl
ciYmKTsKIAorCisjaWYgSEFWRShNQUNIX0VYQ0VQVElPTlMpCitjbGFzcyBUaHJlYWQ7Cit2b2lk
IHJlZ2lzdGVyVGhyZWFkKFRocmVhZCopOwordm9pZCByZW1vdmVUaHJlYWQoVGhyZWFkKik7CisK
K3ZvaWQgaGFuZGxlU2lnbmFsc1dpdGhNYWNoKCk7CisjZW5kaWYgLy8gSEFWRShNQUNIX0VYQ0VQ
VElPTlMpCisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6OlNpZ25hbDsKK3VzaW5n
IFdURjo6U2lnSW5mbzsKIHVzaW5nIFdURjo6dG9TeXN0ZW1TaWduYWw7CiB1c2luZyBXVEY6OmZy
b21TeXN0ZW1TaWduYWw7CiB1c2luZyBXVEY6OlNpZ25hbEFjdGlvbjsKZGlmZiAtLWdpdCBhL1Rv
b2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAxN2Y5ZjAxMTEzMTAyYThhNGIx
N2ZjZTRhZjFkOTVlYjg2MDA2OWRiLi42Y2RhNDg0MTA2NWNlMDRhOTFiOGRiNWUyYjIwMjhjNDBl
YzA1YTZmIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTQgQEAKKzIwMTctMDUtMTEgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxl
ckBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIE1hY2ggZXhjZXB0aW9ucyBpbnN0ZWFkIG9mIHNp
Z25hbHMgd2hlcmUgcG9zc2libGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE3MTg2NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVGhyZWFkTWVzc2FnZXMuY3Bw
OgorICAgICAgICAocnVuVGhyZWFkTWVzc2FnZVRlc3QpOgorICAgICAgICAoVEVTVCk6CisKIDIw
MTctMDUtMDkgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZW1vdmUg
c3VwcG9ydCBmb3IgbGVnYWN5IE5vdGlmaWNhdGlvbnMKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV1RGL1RocmVhZE1lc3NhZ2VzLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV1RGL1RocmVhZE1lc3NhZ2VzLmNwcAppbmRleCBkNjNlOWJmMWU3NTA2OGI2YzFh
N2U3ZTZlOGI2N2M0ZWIwNTE1ODgyLi5lNmE1Nzg5NGJiNTE2ZmUxY2U3MTNkMDdiZjE4ZjA3MDZl
ZmE5MzdjIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9UaHJlYWRN
ZXNzYWdlcy5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVGhyZWFkTWVz
c2FnZXMuY3BwCkBAIC01MCw3ICs1MCw3IEBAIHN0YXRpYyB2b2lkIHJ1blRocmVhZE1lc3NhZ2VU
ZXN0KHVuc2lnbmVkIG51bVNlbmRlcnMsIHVuc2lnbmVkIG51bU1lc3NhZ2VzKQogICAgIGZvciAo
dW5zaWduZWQgc2VuZGVySUQgPSAwOyBzZW5kZXJJRCA8IG51bVNlbmRlcnM7ICsrc2VuZGVySUQp
IHsKICAgICAgICAgc2VuZGVyVGhyZWFkc1tzZW5kZXJJRF0gPSBUaHJlYWQ6OmNyZWF0ZSgiVGhy
ZWFkTWVzc2FnZSBzZW5kZXIiLCBbc2VuZGVySUQsIG51bU1lc3NhZ2VzLCByZWNlaXZlclRocmVh
ZCwgJm1lc3NhZ2VzUnVuLCAmaGFuZGxlcnNSdW5dICgpIHsKICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBudW1NZXNzYWdlczsgKytpKSB7Ci0gICAgICAgICAgICAgICAgYXV0
byByZXN1bHQgPSBzZW5kTWVzc2FnZSgqcmVjZWl2ZXJUaHJlYWQuZ2V0KCksIFtzZW5kZXJJRCwg
JmhhbmRsZXJzUnVuXSAoc2lnaW5mb190KiwgdWNvbnRleHRfdCopIHsKKyAgICAgICAgICAgICAg
ICBhdXRvIHJlc3VsdCA9IHNlbmRNZXNzYWdlKCpyZWNlaXZlclRocmVhZC5nZXQoKSwgW3NlbmRl
cklELCAmaGFuZGxlcnNSdW5dIChQbGF0Zm9ybVJlZ2lzdGVycyYpIHsKICAgICAgICAgICAgICAg
ICAgICAgaGFuZGxlcnNSdW5bc2VuZGVySURdKys7CiAgICAgICAgICAgICAgICAgfSk7CiAgICAg
ICAgICAgICAgICAgRVhQRUNUX1RSVUUocmVzdWx0ID09IFdURjo6TWVzc2FnZVN0YXR1czo6TWVz
c2FnZVJhbik7CkBAIC05NSw3ICs5NSw3IEBAIHB1YmxpYzoKIFRFU1QoVGhyZWFkTWVzc2FnZSwg
U2lnbmFsc1dvcmtPbkV4aXQpCiB7CiAgICAgc3RhdGljIGJvb2wgaGFuZGxlclJhbiA9IGZhbHNl
OwotICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbDo6VXNyLCBbXSAoaW50LCBzaWdpbmZv
X3QqLCB2b2lkKikgLT4gU2lnbmFsQWN0aW9uIHsKKyAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihT
aWduYWw6OlVzciwgW10gKFNpZ25hbCwgU2lnSW5mbyYsIFBsYXRmb3JtUmVnaXN0ZXJzJikgLT4g
U2lnbmFsQWN0aW9uIHsKICAgICAgICAgZGF0YUxvZ0xuKCJoZXJlIik7CiAgICAgICAgIGhhbmRs
ZXJSYW4gPSB0cnVlOwogICAgICAgICByZXR1cm4gU2lnbmFsQWN0aW9uOjpIYW5kbGVkOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309977</attachid>
            <date>2017-05-12 17:48:43 -0700</date>
            <delta_ts>2017-05-12 17:49:50 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-171865-20170512174841.patch</filename>
            <type>text/plain</type>
            <size>51195</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE2Njc3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
YzIyOWE0ZjkxMDMxZGZlOTU1YTQxMGIyMDI0Njc2ZTFmM2NkZWIxLi4yMmNiMGM0YzFiMjAxYzcz
YTFhM2E2Y2Y1ZmExMDQ0OGVkOGU5M2I2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MCBAQAorMjAxNy0wNS0xMSAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBVc2UgTWFjaCBleGNlcHRpb25zIGluc3RlYWQgb2Ygc2lnbmFscyB3
aGVyZSBwb3NzaWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTcxODY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTWFyayBMYW0uCisKKyAgICAgICAg
VGhpcyBwYXRjaCBhZGRzIHNvbWUgbmV3IEpTQyBvcHRpb25zLiBUaGUgZmlyc3QgaXMgYW4gb3B0
aW9uIHRoYXQKKyAgICAgICAgZW5hYmxlcyBvciBkaXNhYmxlcyB3ZWIgYXNzZW1ibHkgdGllciB1
cC4gVGhlIHNlY29uZCBjb250cm9scworICAgICAgICB3aGV0aGVyIG9yIG5vdCB3ZSB1c2UgbWFj
aCBleGNlcHRpb25zICh3aGVyZSBhdmFpbGFibGUpLgorCisgICAgICAgICogQVBJL3Rlc3RzL0V4
ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwOgorICAgICAgICAoZGlzcGF0Y2hUZXJtaXRhdGVDYWxs
YmFjayk6CisgICAgICAgICh0ZXN0RXhlY3V0aW9uVGltZUxpbWl0KToKKyAgICAgICAgKiBydW50
aW1lL0pTTG9jay5jcHA6CisgICAgICAgIChKU0M6OkpTTG9jazo6ZGlkQWNxdWlyZUxvY2spOgor
ICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5jcHA6CisgICAgICAgIChKU0M6Om92ZXJyaWRlRGVm
YXVsdHMpOgorICAgICAgICAoSlNDOjpPcHRpb25zOjppbml0aWFsaXplKToKKyAgICAgICAgKiBy
dW50aW1lL09wdGlvbnMuaDoKKyAgICAgICAgKiBydW50aW1lL1ZNVHJhcHMuY3BwOgorICAgICAg
ICAoSlNDOjpTaWduYWxDb250ZXh0OjpTaWduYWxDb250ZXh0KToKKyAgICAgICAgKEpTQzo6U2ln
bmFsQ29udGV4dDo6YWRqdXN0UENUb1BvaW50VG9UcmFwcGluZ0luc3RydWN0aW9uKToKKyAgICAg
ICAgKEpTQzo6aW5zdGFsbFNpZ25hbEhhbmRsZXIpOgorICAgICAgICAoSlNDOjpWTVRyYXBzOjpT
aWduYWxTZW5kZXI6OnNlbmQpOgorICAgICAgICAqIHRvb2xzL1NpZ2lsbENyYXNoQW5hbHl6ZXIu
Y3BwOgorICAgICAgICAoSlNDOjpTaWduYWxDb250ZXh0OjpTaWduYWxDb250ZXh0KToKKyAgICAg
ICAgKEpTQzo6U2lnbmFsQ29udGV4dDo6ZHVtcCk6CisgICAgICAgIChKU0M6Omluc3RhbGxDcmFz
aEhhbmRsZXIpOgorICAgICAgICAqIHdhc20vV2FzbUJCUVBsYW4uY3BwOgorICAgICAgICAoSlND
OjpXYXNtOjpCQlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKToKKyAgICAgICAgKiB3YXNtL1dhc21G
YXVsdFNpZ25hbEhhbmRsZXIuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp0cmFwSGFuZGxlcik6
CisgICAgICAgIChKU0M6Oldhc206OmVuYWJsZUZhc3RNZW1vcnkpOgorICAgICAgICAqIHdhc20v
V2FzbU1hY2hpbmVUaHJlYWRzLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6cmVzZXRJbnN0cnVj
dGlvbkNhY2hlT25BbGxUaHJlYWRzKToKKwogMjAxNy0wNS0xMSAgTWFyayBMYW0gIDxtYXJrLmxh
bUBhcHBsZS5jb20+CiAKICAgICAgICAgV29ya2VyVGhyZWFkOjpzdG9wKCkgc2hvdWxkIGNhbGwg
c2NoZWR1bGVFeGVjdXRpb25UZXJtaW5hdGlvbigpIGxhc3QuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGVjZGRiMzNmYmVkNTIx
MTFiYzA3MTk1ZDZjMDhmZTQwNmIyYzFhMzUuLmZiNjNlOTNiMTJjNmI0ZTk5MzYxNjQwY2JhOTM4
NmFlZWRiMzNiZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjIgQEAKKzIwMTctMDUtMTEgIEtlaXRoIE1pbGxl
ciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIE1hY2ggZXhjZXB0aW9u
cyBpbnN0ZWFkIG9mIHNpZ25hbHMgd2hlcmUgcG9zc2libGUKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MTg2NQorCisgICAgICAgIFJldmlld2VkIGJ5
IE1hcmsgTGFtLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZW5hYmxlcyB1c2luZyBtYWNoIGV4Y2Vw
dGlvbnMgb24gZGFyd2luLiBUaGUgd2F5IHRoZQorICAgICAgICBtYWNoIGV4Y2VwdGlvbiBhcGkg
d29ya3MgaXMgdGhhdCB3ZSBjcmVhdGUgYSBtYWNoIHBvcnQsIHdoaWNoIGlzCisgICAgICAgIGxp
a2UgYSBmaWxlIGRlc2NyaXB0b3IuICBXZSB0aGVuIHdhaXQgZm9yIGEgbWVzc2FnZSB0byBhcnJp
dmUgb24KKyAgICAgICAgdGhhdCBwb3J0IGluIGEgdGhyZWFkLiBXaGVuIGFub3RoZXIgdGhyZWFk
IHJhaXNlcyBhbiBleGNlcHRpb24gKHNheQorICAgICAgICBkdWUgdG8gYSBiYWQgbWVtb3J5IGFj
Y2VzcykgdGhlIE9TIHNlbmRzIG91ciB0aHJlYWQgYSBtZXNzYWdlLiBUaGUKKyAgICAgICAgcGF5
bG9hZCBvZiB0aGF0IG1lc3NhZ2UgaXMgdGhlIHJlZ2lzdGVyIGZpbGUgb2YgdGhlIGNyYXNoaW5n
CisgICAgICAgIHRocmVhZC4gV2UgdGhlbiBjYWxsIG91ciBjdXN0b20gaGFuZGxlcnMgdGhhdCBj
aGFuZ2UgdGhlIHN0YXRlIGFzCisgICAgICAgIG5lZWRlZC4gSW4gb3JkZXIgdG8gcmVzdGFydCB0
aGUgdGhyZWFkIHdlIHNlbmQgYSBwYXlsb2FkIGJhY2sgdG8KKyAgICAgICAgdGhlIE9TIHdpdGgg
YW4gdXBkYXRlZCByZWdpc3RlciBmaWxlIGFsb25nIHdpdGggYSBzdWNjZXNzIG1lc3NhZ2UKKyAg
ICAgICAgaGVhZGVyLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBtYWtlcyB0aHJlYWQgbWVz
c2FnZXMgd29yayB3aXRob3V0IHNpZ25hbHMgYnkKKyAgICAgICAgc2ltcGx5IHN1c3BlbmRpbmcg
dGhlIHRocmVhZCwgYW5kIHRoZW4gcnVubmluZyB0aGUgbWVzc2FnZSBhdCB0aGF0CisgICAgICAg
IHRpbWUuCisKKyAgICAgICAgWW91IGNhbiByZWFkIG1vcmUgYWJvdXQgbWFjaCBleGNlcHRpb25z
IGhlcmU6CisgICAgICAgIGh0dHA6Ly93d3cuY3MuY211LmVkdS9hZnMvY3MvcHJvamVjdC9tYWNo
L3B1YmxpYy9kb2MvdW5wdWJsaXNoZWQvZXhjZXB0aW9uLnBzCisgICAgICAgIGFuZCB0aGUgTWFj
aCBpbnRlcmZhY2UgR2VuZXJhdG9yIChNaUcpIGhlcmU6CisgICAgICAgIGh0dHA6Ly93d3cuY3Mu
Y211LmVkdS9hZnMvY3MvcHJvamVjdC9tYWNoL3B1YmxpYy9kb2MvdW5wdWJsaXNoZWQvbWlnLnBz
CisKKyAgICAgICAgKiBDb25maWd1cmF0aW9ucy9XVEYueGNjb25maWc6CisgICAgICAgICogV1RG
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6Cisg
ICAgICAgICogd3RmL1BsYXRmb3JtUmVnaXN0ZXJzLmg6CisgICAgICAgIChXVEY6OnJlZ2lzdGVy
c0Zyb21VQ29udGV4dCk6CisgICAgICAgICogd3RmL1N0YWNrQm91bmRzLmg6CisgICAgICAgIChX
VEY6OlN0YWNrQm91bmRzOjpTdGFja0JvdW5kcyk6CisgICAgICAgICogd3RmL1RocmVhZEhvbGRl
ci5jcHA6CisgICAgICAgIChXVEY6OlRocmVhZEhvbGRlcjo6flRocmVhZEhvbGRlcik6CisgICAg
ICAgICogd3RmL1RocmVhZE1lc3NhZ2UuY3BwOgorICAgICAgICAoV1RGOjpzZW5kTWVzc2FnZVNp
Z25hbCk6CisgICAgICAgIChXVEY6OnNlbmRNZXNzYWdlTWFjaCk6CisgICAgICAgIChXVEY6OmRl
bGl2ZXJNZXNzYWdlc1VzaW5nTWFjaCk6CisgICAgICAgIChXVEY6OnNlbmRNZXNzYWdlU2NvcGVk
KToKKyAgICAgICAgKiB3dGYvVGhyZWFkTWVzc2FnZS5oOgorICAgICAgICAoV1RGOjpzZW5kTWVz
c2FnZSk6CisgICAgICAgICogd3RmL1RocmVhZGluZy5oOgorICAgICAgICAoV1RGOjpUaHJlYWQ6
Om1hY2hUaHJlYWQpOgorICAgICAgICAqIHd0Zi9tYWMvTWFjaEV4Y2VwdGlvbnMuZGVmczogQ29w
aWVkIGZyb20gU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5oLgorICAgICAgICAqIHd0Zi90
aHJlYWRzL1NpZ25hbHMuY3BwOgorICAgICAgICAoV1RGOjpzdGFydE1hY2hFeGNlcHRpb25IYW5k
bGVyVGhyZWFkKToKKyAgICAgICAgKFdURjo6ZnJvbU1hY2hFeGNlcHRpb24pOgorICAgICAgICAo
V1RGOjp0b01hY2hNYXNrKToKKyAgICAgICAgKFdURjo6aGFuZGxlU2lnbmFsc1dpdGhNYWNoKToK
KyAgICAgICAgKFdURjo6c2V0RXhjZXB0aW9uUG9ydHMpOgorICAgICAgICAoV1RGOjphY3RpdmVU
aHJlYWRzKToKKyAgICAgICAgKFdURjo6cmVnaXN0ZXJUaHJlYWQpOgorICAgICAgICAoV1RGOjpy
ZW1vdmVUaHJlYWQpOgorICAgICAgICAoV1RGOjppbnN0YWxsU2lnbmFsSGFuZGxlcik6CisgICAg
ICAgIChXVEY6OmpzY1NpZ25hbEhhbmRsZXIpOgorICAgICAgICAqIHd0Zi90aHJlYWRzL1NpZ25h
bHMuaDoKKwogMjAxNy0wNS0wOSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAg
ICAgIFJlbW92ZSBzdXBwb3J0IGZvciBsZWdhY3kgTm90aWZpY2F0aW9ucwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9FeGVjdXRpb25UaW1lTGltaXRUZXN0LmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvRXhlY3V0aW9uVGltZUxpbWl0VGVz
dC5jcHAKaW5kZXggZDVlNTMyNDNiNzhkZjc1MTM0MmFkOGQzOTBhNGIwNDEzZDllZWY5ZS4uZTUw
MjU3YzkzM2YyYmZiMDM3NjExZDg0MDc0YmJmN2VkODE3M2IwNCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9FeGVjdXRpb25UaW1lTGltaXRUZXN0LmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0V4ZWN1dGlvblRpbWVMaW1pdFRlc3Qu
Y3BwCkBAIC0zMCwxMCArMzAsMTggQEAKICNpbmNsdWRlICJKU0NvbnRleHRSZWZQcml2YXRlLmgi
CiAjaW5jbHVkZSAiSmF2YVNjcmlwdENvcmUuaCIKICNpbmNsdWRlICJPcHRpb25zLmgiCisKICNp
bmNsdWRlIDxjaHJvbm8+CisjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KKyNpbmNsdWRlIDx3dGYv
Q29uZGl0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5jbHVkZSA8d3Rm
L0xvY2suaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKKyNpZiBIQVZF
KE1BQ0hfRVhDRVBUSU9OUykKKyNpbmNsdWRlIDxkaXNwYXRjaC9kaXNwYXRjaC5oPgorI2VuZGlm
CisKIHVzaW5nIG5hbWVzcGFjZSBzdGQ6OmNocm9ubzsKIHVzaW5nIEpTQzo6T3B0aW9uczsKIApA
QCAtNzcsNiArODUsMTUgQEAgc3RhdGljIGJvb2wgZXh0ZW5kVGVybWluYXRlQ2FsbGJhY2soSlND
b250ZXh0UmVmIGN0eCwgdm9pZCopCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKKyNpZiBIQVZFKE1B
Q0hfRVhDRVBUSU9OUykKK2Jvb2wgZGlzcGF0Y2hUZXJtaW5hdGVDYWxsYmFja0NhbGxlZCA9IGZh
bHNlOworc3RhdGljIGJvb2wgZGlzcGF0Y2hUZXJtaXRhdGVDYWxsYmFjayhKU0NvbnRleHRSZWYs
IHZvaWQqKQoreworICAgIGRpc3BhdGNoVGVybWluYXRlQ2FsbGJhY2tDYWxsZWQgPSB0cnVlOwor
ICAgIHJldHVybiB0cnVlOworfQorI2VuZGlmCisKIHN0cnVjdCBUaWVyT3B0aW9ucyB7CiAgICAg
Y29uc3QgY2hhciogdGllcjsKICAgICB1bnNpZ25lZCB0aW1lTGltaXRBZGp1c3RtZW50TWlsbGlz
OwpAQCAtMzY1LDYgKzM4Miw2NSBAQCBpbnQgdGVzdEV4ZWN1dGlvblRpbWVMaW1pdCgpCiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KIAorI2lmIEhBVkUoTUFDSF9FWENFUFRJT05TKQorICAgICAg
ICAvKiBUZXN0IHNjcmlwdCB0aW1lb3V0IGZyb20gZGlzcGF0Y2ggcXVldWU6ICovCisgICAgICAg
IHRpbWVMaW1pdCA9ICgxMDAgKyB0aWVyQWRqdXN0bWVudE1pbGxpcykgLyAxMDAwLjA7CisgICAg
ICAgIEpTQ29udGV4dEdyb3VwU2V0RXhlY3V0aW9uVGltZUxpbWl0KGNvbnRleHRHcm91cCwgdGlt
ZUxpbWl0LCBkaXNwYXRjaFRlcm1pdGF0ZUNhbGxiYWNrLCAwKTsKKyAgICAgICAgeworICAgICAg
ICAgICAgdW5zaWduZWQgdGltZUFmdGVyV2F0Y2hkb2dTaG91bGRIYXZlRmlyZWQgPSAzMDAgKyB0
aWVyQWRqdXN0bWVudE1pbGxpczsKKworICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBzY3JpcHRC
dWlsZGVyOworICAgICAgICAgICAgc2NyaXB0QnVpbGRlci5hcHBlbmRMaXRlcmFsKCJmdW5jdGlv
biBmb28oKSB7IHZhciBzdGFydFRpbWUgPSBjdXJyZW50Q1BVVGltZSgpOyB3aGlsZSAodHJ1ZSkg
eyBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDA7IGkrKyk7IGlmIChjdXJyZW50Q1BVVGltZSgpIC0g
c3RhcnRUaW1lID4gIik7CisgICAgICAgICAgICBzY3JpcHRCdWlsZGVyLmFwcGVuZE51bWJlcih0
aW1lQWZ0ZXJXYXRjaGRvZ1Nob3VsZEhhdmVGaXJlZCAvIDEwMDAuMCk7CisgICAgICAgICAgICBz
Y3JpcHRCdWlsZGVyLmFwcGVuZExpdGVyYWwoIikgYnJlYWs7IH0gfSBmb28oKTsiKTsKKworICAg
ICAgICAgICAgSlNTdHJpbmdSZWYgc2NyaXB0ID0gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoc2NyaXB0QnVpbGRlci50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAg
ZXhjZXB0aW9uID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGRpc3BhdGNoVGVybWluYXRlQ2FsbGJh
Y2tDYWxsZWQgPSBmYWxzZTsKKworICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBkbyB0aGlzIHNp
bmNlIGJsb2NrcyBjYW4gb25seSBjYXB0dXJlIHRoaW5ncyBhcyBjb25zdC4KKyAgICAgICAgICAg
IEpTR2xvYmFsQ29udGV4dFJlZiYgY29udGV4dFJlZiA9IGNvbnRleHQ7CisgICAgICAgICAgICBK
U1N0cmluZ1JlZiYgc2NyaXB0UmVmID0gc2NyaXB0OworICAgICAgICAgICAgSlNWYWx1ZVJlZiYg
ZXhjZXB0aW9uUmVmID0gZXhjZXB0aW9uOworCisgICAgICAgICAgICBMb2NrIHN5bmNMb2NrOwor
ICAgICAgICAgICAgTG9jayYgc3luY0xvY2tSZWYgPSBzeW5jTG9jazsKKyAgICAgICAgICAgIENv
bmRpdGlvbiBzeW5jaHJvbml6ZTsKKyAgICAgICAgICAgIENvbmRpdGlvbiYgc3luY2hyb25pemVS
ZWYgPSBzeW5jaHJvbml6ZTsKKyAgICAgICAgICAgIGJvb2wgZGlkU3luY2hyb25pemUgPSBmYWxz
ZTsKKyAgICAgICAgICAgIGJvb2wmIGRpZFN5bmNocm9uaXplUmVmID0gZGlkU3luY2hyb25pemU7
CisKKyAgICAgICAgICAgIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMgc3RhcnRUaW1lOworICAg
ICAgICAgICAgc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcyBlbmRUaW1lOworCisgICAgICAgICAg
ICBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzJiBzdGFydFRpbWVSZWYgPSBzdGFydFRpbWU7Cisg
ICAgICAgICAgICBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzJiBlbmRUaW1lUmVmID0gZW5kVGlt
ZTsKKworICAgICAgICAgICAgZGlzcGF0Y2hfZ3JvdXBfdCBncm91cCA9IGRpc3BhdGNoX2dyb3Vw
X2NyZWF0ZSgpOworICAgICAgICAgICAgZGlzcGF0Y2hfZ3JvdXBfYXN5bmMoZ3JvdXAsIGRpc3Bh
dGNoX2dldF9nbG9iYWxfcXVldWUoMCwgMCksIF57CisgICAgICAgICAgICAgICAgc3RhcnRUaW1l
UmVmID0gY3VycmVudENQVVRpbWUoKTsKKyAgICAgICAgICAgICAgICBKU0V2YWx1YXRlU2NyaXB0
KGNvbnRleHRSZWYsIHNjcmlwdFJlZiwgbnVsbHB0ciwgbnVsbHB0ciwgMSwgJmV4Y2VwdGlvblJl
Zik7CisgICAgICAgICAgICAgICAgZW5kVGltZVJlZiA9IGN1cnJlbnRDUFVUaW1lKCk7CisgICAg
ICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBXVEY6OmhvbGRMb2NrKHN5bmNMb2NrUmVmKTsKKyAg
ICAgICAgICAgICAgICBkaWRTeW5jaHJvbml6ZVJlZiA9IHRydWU7CisgICAgICAgICAgICAgICAg
c3luY2hyb25pemVSZWYubm90aWZ5QWxsKCk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhzeW5jTG9jayk7CisgICAgICAgICAgICBzeW5jaHJv
bml6ZS53YWl0KHN5bmNMb2NrLCBbJl0geyByZXR1cm4gZGlkU3luY2hyb25pemU7IH0pOworCisg
ICAgICAgICAgICBpZiAoKChlbmRUaW1lIC0gc3RhcnRUaW1lKSA8IG1pbGxpc2Vjb25kcyh0aW1l
QWZ0ZXJXYXRjaGRvZ1Nob3VsZEhhdmVGaXJlZCkpICYmIGRpc3BhdGNoVGVybWluYXRlQ2FsbGJh
Y2tDYWxsZWQpCisgICAgICAgICAgICAgICAgcHJpbnRmKCJQQVNTOiAlcyBzY3JpcHQgb24gZGlz
cGF0Y2ggcXVldWUgdGltZWQgb3V0IGFzIGV4cGVjdGVkLlxuIiwgdGllck9wdGlvbnMudGllcik7
CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoKGVuZFRpbWUgLSBzdGFy
dFRpbWUpID49IG1pbGxpc2Vjb25kcyh0aW1lQWZ0ZXJXYXRjaGRvZ1Nob3VsZEhhdmVGaXJlZCkp
CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiRkFJTDogJXMgc2NyaXB0IG9uIGRpc3BhdGNo
IHF1ZXVlIGRpZCBub3QgdGltZSBvdXQgYXMgZXhwZWN0ZWQuXG4iLCB0aWVyT3B0aW9ucy50aWVy
KTsKKyAgICAgICAgICAgICAgICBpZiAoIXNob3VsZFRlcm1pbmF0ZUNhbGxiYWNrV2FzQ2FsbGVk
KQorICAgICAgICAgICAgICAgICAgICBwcmludGYoIkZBSUw6ICVzIHNjcmlwdCBvbiBkaXNwYXRj
aCBxdWV1ZSB0aW1lb3V0IGNhbGxiYWNrIHdhcyBub3QgY2FsbGVkLlxuIiwgdGllck9wdGlvbnMu
dGllcik7CisgICAgICAgICAgICAgICAgZmFpbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorI2VuZGlmCisKICAgICAgICAgSlNHbG9iYWxDb250ZXh0UmVsZWFzZShjb250ZXh0
KTsKIAogICAgICAgICBPcHRpb25zOjpzZXRPcHRpb25zKHNhdmVkT3B0aW9uc0J1aWxkZXIudG9T
dHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0xvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNM
b2NrLmNwcAppbmRleCBjMTc1YWUwYzQ4MmVkMjdiZDVmNmJkYzg3OTY4ZTc1ZDQ1YWY1MGVmLi4z
MWUyZGI0MGIyMTZlYWEyYjExNDI0YjgwM2ZiN2Y5MWRkNGUyNjFmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAKQEAgLTMwLDYgKzMwLDggQEAKICNpbmNsdWRlICJT
YW1wbGluZ1Byb2ZpbGVyLmgiCiAjaW5jbHVkZSAiV2FzbU1hY2hpbmVUaHJlYWRzLmgiCiAjaW5j
bHVkZSA8dGhyZWFkPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYv
dGhyZWFkcy9TaWduYWxzLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0xNDgsNiArMTUwLDEw
IEBAIHZvaWQgSlNMb2NrOjpkaWRBY3F1aXJlTG9jaygpCiAgICAgV2FzbTo6c3RhcnRUcmFja2lu
Z0N1cnJlbnRUaHJlYWQoKTsKICNlbmRpZgogCisjaWYgSEFWRShNQUNIX0VYQ0VQVElPTlMpCisg
ICAgcmVnaXN0ZXJUaHJlYWRGb3JNYWNoRXhjZXB0aW9uSGFuZGxpbmcoJlRocmVhZDo6Y3VycmVu
dCgpKTsKKyNlbmRpZgorCiAgICAgbV92bS0+dHJhcHMoKS5ub3RpZnlHcmFiQWxsTG9ja3MoKTsK
IAogI2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9ucy5jcHAKaW5kZXggYjA0ZGUzNWE1MzYxNTA4NDM4NTc1YzIyN2E1MDE0ZGQw
YzUxYmFhMi4uMGU2ZGUwOWU4YzJiM2JlNmE1ODI2YmQ4NGE2M2M5ZGU1MDJjNTBlYyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAKQEAgLTQzLDYgKzQzLDcgQEAK
ICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJh
cy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYv
dGhyZWFkcy9TaWduYWxzLmg+CiAKICNpZiBQTEFURk9STShDT0NPQSkKICNpbmNsdWRlIDxjcnRf
ZXh0ZXJucy5oPgpAQCAtMzU0LDYgKzM1NSwxMCBAQCBzdGF0aWMgdm9pZCBvdmVycmlkZURlZmF1
bHRzKCkKICNpZiAhRU5BQkxFKFdFQkFTU0VNQkxZX0ZBU1RfTUVNT1JZKQogICAgIE9wdGlvbnM6
OnVzZVdlYkFzc2VtYmx5RmFzdE1lbW9yeSgpID0gZmFsc2U7CiAjZW5kaWYKKworI2lmICFIQVZF
KE1BQ0hfRVhDRVBUSU9OUykKKyAgICBPcHRpb25zOjp1c2VNYWNoRm9yRXhjZXB0aW9ucygpID0g
ZmFsc2U7CisjZW5kaWYKIH0KIAogc3RhdGljIHZvaWQgcmVjb21wdXRlRGVwZW5kZW50T3B0aW9u
cygpCkBAIC01NDUsNiArNTUwLDExIEBAIHZvaWQgT3B0aW9uczo6aW5pdGlhbGl6ZSgpCiAKICAg
ICAgICAgICAgIGR1bXBPcHRpb25zSWZOZWVkZWQoKTsKICAgICAgICAgICAgIGVuc3VyZU9wdGlv
bnNBcmVDb2hlcmVudCgpOworCisjaWYgSEFWRShNQUNIX0VYQ0VQVElPTlMpCisgICAgICAgICAg
ICBpZiAoT3B0aW9uczo6dXNlTWFjaEZvckV4Y2VwdGlvbnMoKSkKKyAgICAgICAgICAgICAgICBo
YW5kbGVTaWduYWxzV2l0aE1hY2goKTsKKyNlbmRpZgogICAgICAgICB9KTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCmluZGV4IGNmOWRjMmIyYTgyNTY4ZWUwN2Rh
MDg4OWUzOWI2YjJmOWRjZDc5NzUuLjIyNzRkMWNkZWIzMzM2ZTM3YWI0NDczZWE0MTE2ZWEzMjI5
ZTkzN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKQEAgLTQyMCw2
ICs0MjAsOCBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICB2KHVuc2ln
bmVkLCB3YXRjaGRvZywgMCwgTm9ybWFsLCAid2F0Y2hkb2cgdGltZW91dCAoMCA9IERpc2FibGVk
LCBOID0gYSB0aW1lb3V0IHBlcmlvZCBvZiBOIG1pbGxpc2Vjb25kcykiKSBcCiAgICAgdihib29s
LCB1c2VQb2xsaW5nVHJhcHMsIGZhbHNlLCBOb3JtYWwsICJ1c2UgcG9sbGluZyAoaW5zdGVhZCBv
ZiBzaWduYWxsaW5nKSBWTSB0cmFwcyIpIFwKICAgICBcCisgICAgdihib29sLCB1c2VNYWNoRm9y
RXhjZXB0aW9ucywgdHJ1ZSwgTm9ybWFsLCAiVXNlIG1hY2ggZXhjZXB0aW9ucyByYXRoZXIgdGhh
biBzaWduYWxzIHRvIGhhbmRsZSBmYXVsdHMgYW5kIHBhc3MgdGhyZWFkIG1lc3NhZ2VzLiAoVGhp
cyBkb2VzIG5vdGhpbmcgb24gcGxhdGZvcm1zIHdpdGhvdXQgbWFjaCkiKSBcCisgICAgXAogICAg
IHYoYm9vbCwgdXNlSUNTdGF0cywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIFwKICAg
ICB2KHVuc2lnbmVkLCBwcm90b3R5cGVIaXRDb3VudEZvckxMSW50Q2FjaGluZywgMiwgTm9ybWFs
LCAiTnVtYmVyIG9mIHByb3RvdHlwZSBwcm9wZXJ0eSBoaXRzIGJlZm9yZSBjYWNoaW5nIGEgcHJv
dG90eXBlIGluIHRoZSBMTEludC4gQSBjb3VudCBvZiAwIG1lYW5zIG5ldmVyIGNhY2hlLiIpIFwK
QEAgLTQ0Myw2ICs0NDUsNyBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAg
ICB2KHVuc2lnbmVkLCB3ZWJBc3NlbWJseUJCUU9wdGltaXphdGlvbkxldmVsLCAxLCBOb3JtYWws
ICJCMyBPcHRpbWl6YXRpb24gbGV2ZWwgZm9yIEJCUSBXZWIgQXNzZW1ibHkgbW9kdWxlIGNvbXBp
bGF0aW9ucy4iKSBcCiAgICAgdih1bnNpZ25lZCwgd2ViQXNzZW1ibHlPTUdPcHRpbWl6YXRpb25M
ZXZlbCwgT3B0aW9uczo6ZGVmYXVsdEIzT3B0TGV2ZWwoKSwgTm9ybWFsLCAiQjMgT3B0aW1pemF0
aW9uIGxldmVsIGZvciBPTUcgV2ViIEFzc2VtYmx5IG1vZHVsZSBjb21waWxhdGlvbnMuIikgXAog
ICAgIFwKKyAgICB2KGJvb2wsIHVzZUJCUVRpZXJVcENoZWNrcywgdHJ1ZSwgTm9ybWFsLCAiRW5h
YmxlcyB0aWVyIHVwIGNoZWNrcyBmb3Igb3VyIEJCUSBjb2RlLiIpIFwKICAgICB2KHVuc2lnbmVk
LCB3ZWJBc3NlbWJseU9NR1RpZXJVcENvdW50LCA1MDAwLCBOb3JtYWwsICJUaGUgY291bnRkb3du
IGJlZm9yZSB3ZSB0aWVyIHVwIGEgZnVuY3Rpb24gdG8gT01HLiIpIFwKICAgICB2KHVuc2lnbmVk
LCB3ZWJBc3NlbWJseUxvb3BEZWNyZW1lbnQsIDE1LCBOb3JtYWwsICJUaGUgYW1vdW50IHRoZSB0
aWVyIHVwIGNvdW50ZG93biBpcyBkZWNyZW1lbnRlZCBvbiBlYWNoIGxvb3AgYmFja2VkZ2UuIikg
XAogICAgIHYodW5zaWduZWQsIHdlYkFzc2VtYmx5RnVuY3Rpb25FbnRyeURlY3JlbWVudCwgMSwg
Tm9ybWFsLCAiVGhlIGFtb3VudCB0aGUgdGllciB1cCBjb3VudGRvd24gaXMgZGVjcmVtZW50ZWQg
b24gZWFjaCBmdW5jdGlvbiBlbnRyeS4iKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTVRyYXBzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNVHJhcHMuY3BwCmluZGV4IDFiYWFjZTYwNDRlNjYwYThlNTQ0MWZiYWQwMThlYTkwOTMxYTRj
OTEuLjhjNTdjNDU2YWU0MzY4YWRmMjhlYTBhNjQ1OGU3YzAzOWE5NzBlZTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwCkBAIC01MywxMSArNTMsMTEgQEAgQUxX
QVlTX0lOTElORSBWTSYgVk1UcmFwczo6dm0oKSBjb25zdAogI2lmIEVOQUJMRShTSUdOQUxfQkFT
RURfVk1fVFJBUFMpCiAKIHN0cnVjdCBTaWduYWxDb250ZXh0IHsKLSAgICBTaWduYWxDb250ZXh0
KG1jb250ZXh0X3QmIG1jb250ZXh0KQotICAgICAgICA6IG1jb250ZXh0KG1jb250ZXh0KQotICAg
ICAgICAsIHRyYXBQQyhNYWNoaW5lQ29udGV4dDo6aW5zdHJ1Y3Rpb25Qb2ludGVyKG1jb250ZXh0
KSkKLSAgICAgICAgLCBzdGFja1BvaW50ZXIoTWFjaGluZUNvbnRleHQ6OnN0YWNrUG9pbnRlciht
Y29udGV4dCkpCi0gICAgICAgICwgZnJhbWVQb2ludGVyKE1hY2hpbmVDb250ZXh0OjpmcmFtZVBv
aW50ZXIobWNvbnRleHQpKQorICAgIFNpZ25hbENvbnRleHQoUGxhdGZvcm1SZWdpc3RlcnMmIHJl
Z2lzdGVycykKKyAgICAgICAgOiByZWdpc3RlcnMocmVnaXN0ZXJzKQorICAgICAgICAsIHRyYXBQ
QyhNYWNoaW5lQ29udGV4dDo6aW5zdHJ1Y3Rpb25Qb2ludGVyKHJlZ2lzdGVycykpCisgICAgICAg
ICwgc3RhY2tQb2ludGVyKE1hY2hpbmVDb250ZXh0OjpzdGFja1BvaW50ZXIocmVnaXN0ZXJzKSkK
KyAgICAgICAgLCBmcmFtZVBvaW50ZXIoTWFjaGluZUNvbnRleHQ6OmZyYW1lUG9pbnRlcihyZWdp
c3RlcnMpKQogICAgIHsKICNpZiBDUFUoWDg2XzY0KSB8fCBDUFUoWDg2KQogICAgICAgICAvLyBP
biBYODZfNjQsIFNJR1RSQVAgcmVwb3J0cyB0aGUgYWRkcmVzcyBhZnRlciB0aGUgdHJhcHBpbmcg
UEMuIFNvLCBkZWMgYnkgMS4KQEAgLTY4LDExICs2OCwxMSBAQCBzdHJ1Y3QgU2lnbmFsQ29udGV4
dCB7CiAgICAgdm9pZCBhZGp1c3RQQ1RvUG9pbnRUb1RyYXBwaW5nSW5zdHJ1Y3Rpb24oKQogICAg
IHsKICNpZiBDUFUoWDg2XzY0KSB8fCBDUFUoWDg2KQotICAgICAgICBNYWNoaW5lQ29udGV4dDo6
aW5zdHJ1Y3Rpb25Qb2ludGVyKG1jb250ZXh0KSA9IHRyYXBQQzsKKyAgICAgICAgTWFjaGluZUNv
bnRleHQ6Omluc3RydWN0aW9uUG9pbnRlcihyZWdpc3RlcnMpID0gdHJhcFBDOwogI2VuZGlmCiAg
ICAgfQogCi0gICAgbWNvbnRleHRfdCYgbWNvbnRleHQ7CisgICAgUGxhdGZvcm1SZWdpc3RlcnMm
IHJlZ2lzdGVyczsKICAgICB2b2lkKiB0cmFwUEM7CiAgICAgdm9pZCogc3RhY2tQb2ludGVyOwog
ICAgIHZvaWQqIGZyYW1lUG9pbnRlcjsKQEAgLTEzMCw4ICsxMzAsOCBAQCBzdGF0aWMgRXhwZWN0
ZWQ8Vk1BbmRTdGFja0JvdW5kcywgVk1UcmFwczo6RXJyb3I+IGZpbmRBY3RpdmVWTUFuZFN0YWNr
Qm91bmRzKFNpZwogCiBzdGF0aWMgdm9pZCBpbnN0YWxsU2lnbmFsSGFuZGxlcigpCiB7Ci0gICAg
aW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFsOjpUcmFwLCBbXSAoaW50LCBzaWdpbmZvX3QqLCB2
b2lkKiB1YXApIC0+IFNpZ25hbEFjdGlvbiB7Ci0gICAgICAgIFNpZ25hbENvbnRleHQgY29udGV4
dChzdGF0aWNfY2FzdDx1Y29udGV4dF90Kj4odWFwKS0+dWNfbWNvbnRleHQpOworICAgIGluc3Rh
bGxTaWduYWxIYW5kbGVyKFNpZ25hbDo6VHJhcCwgW10gKFNpZ25hbCwgU2lnSW5mbyYsIFBsYXRm
b3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMpIC0+IFNpZ25hbEFjdGlvbiB7CisgICAgICAgIFNpZ25h
bENvbnRleHQgY29udGV4dChyZWdpc3RlcnMpOwogCiAgICAgICAgIGlmICghaXNKSVRQQyhjb250
ZXh0LnRyYXBQQykpCiAgICAgICAgICAgICByZXR1cm4gU2lnbmFsQWN0aW9uOjpOb3RIYW5kbGVk
OwpAQCAtNDA0LDggKzQwNCw4IEBAIHZvaWQgVk1UcmFwczo6U2lnbmFsU2VuZGVyOjpzZW5kKCkK
ICAgICAgICAgICAgIFZNJiB2bSA9ICptX3ZtOwogICAgICAgICAgICAgYXV0byBvcHRpb25hbE93
bmVyVGhyZWFkID0gdm0ub3duZXJUaHJlYWQoKTsKICAgICAgICAgICAgIGlmIChvcHRpb25hbE93
bmVyVGhyZWFkKSB7Ci0gICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoKm9wdGlvbmFsT3duZXJU
aHJlYWQudmFsdWUoKS5nZXQoKSwgW10gKHNpZ2luZm9fdCosIHVjb250ZXh0X3QqIHVjb250ZXh0
KSAtPiB2b2lkIHsKLSAgICAgICAgICAgICAgICAgICAgU2lnbmFsQ29udGV4dCBjb250ZXh0KHVj
b250ZXh0LT51Y19tY29udGV4dCk7CisgICAgICAgICAgICAgICAgc2VuZE1lc3NhZ2UoKm9wdGlv
bmFsT3duZXJUaHJlYWQudmFsdWUoKS5nZXQoKSwgW10gKFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdp
c3RlcnMpIC0+IHZvaWQgeworICAgICAgICAgICAgICAgICAgICBTaWduYWxDb250ZXh0IGNvbnRl
eHQocmVnaXN0ZXJzKTsKICAgICAgICAgICAgICAgICAgICAgYXV0byBhY3RpdmVWTUFuZFN0YWNr
Qm91bmRzID0gZmluZEFjdGl2ZVZNQW5kU3RhY2tCb3VuZHMoY29udGV4dCk7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChhY3RpdmVWTUFuZFN0YWNrQm91bmRzKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBWTSogdm0gPSBhY3RpdmVWTUFuZFN0YWNrQm91bmRzLnZhbHVlKCkudm07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAK
aW5kZXggNGFkYWVmZjFjZGEyZDFmYmM2ZjkwNjFmMDYzZTE0ZDJlNjMzMDA0OC4uNzFhNmU0MjU1
YzY0NWRkNmFmM2JkYjI1MGNjZjEzYWQ4YzFhOGE0NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rvb2xzL1NpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS90b29scy9TaWdpbGxDcmFzaEFuYWx5emVyLmNwcApAQCAtNzgsMTEgKzc4LDEx
IEBAIHByaXZhdGU6CiAjZW5kaWYgLy8gVVNFKE9TX0xPRykKIAogc3RydWN0IFNpZ25hbENvbnRl
eHQgewotICAgIFNpZ25hbENvbnRleHQobWNvbnRleHRfdCYgbWNvbnRleHQpCi0gICAgICAgIDog
bWNvbnRleHQobWNvbnRleHQpCi0gICAgICAgICwgbWFjaGluZVBDKE1hY2hpbmVDb250ZXh0Ojpp
bnN0cnVjdGlvblBvaW50ZXIobWNvbnRleHQpKQotICAgICAgICAsIHN0YWNrUG9pbnRlcihNYWNo
aW5lQ29udGV4dDo6c3RhY2tQb2ludGVyKG1jb250ZXh0KSkKLSAgICAgICAgLCBmcmFtZVBvaW50
ZXIoTWFjaGluZUNvbnRleHQ6OmZyYW1lUG9pbnRlcihtY29udGV4dCkpCisgICAgU2lnbmFsQ29u
dGV4dChQbGF0Zm9ybVJlZ2lzdGVycyYgcmVnaXN0ZXJzKQorICAgICAgICA6IHJlZ2lzdGVycyhy
ZWdpc3RlcnMpCisgICAgICAgICwgbWFjaGluZVBDKE1hY2hpbmVDb250ZXh0OjppbnN0cnVjdGlv
blBvaW50ZXIocmVnaXN0ZXJzKSkKKyAgICAgICAgLCBzdGFja1BvaW50ZXIoTWFjaGluZUNvbnRl
eHQ6OnN0YWNrUG9pbnRlcihyZWdpc3RlcnMpKQorICAgICAgICAsIGZyYW1lUG9pbnRlcihNYWNo
aW5lQ29udGV4dDo6ZnJhbWVQb2ludGVyKHJlZ2lzdGVycykpCiAgICAgeyB9CiAKICAgICB2b2lk
IGR1bXAoKQpAQCAtMTEyLDcgKzExMiw3IEBAIHN0cnVjdCBTaWduYWxDb250ZXh0IHsKICAgICAg
ICAgdihncykKIAogI2RlZmluZSBEVU1QX1JFR0lTVEVSKF9fcmVnKSBcCi0gICAgICAgIGxvZygi
UmVnaXN0ZXIgIiAjX19yZWcgIjogJXAiLCByZWludGVycHJldF9jYXN0PHZvaWQqPihtY29udGV4
dC0+X19zcy5fXyMjX19yZWcpKTsKKyAgICAgICAgbG9nKCJSZWdpc3RlciAiICNfX3JlZyAiOiAl
cCIsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlZ2lzdGVycy5fXyMjX19yZWcpKTsKICAgICAg
ICAgRk9SX0VBQ0hfUkVHSVNURVIoRFVNUF9SRUdJU1RFUikKICN1bmRlZiBGT1JfRUFDSF9SRUdJ
U1RFUgogCkBAIC0xMjAsMjAgKzEyMCwyMCBAQCBzdHJ1Y3QgU2lnbmFsQ29udGV4dCB7CiAgICAg
ICAgIGludCBpOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjg7IGkgKz0gNCkgewogICAgICAg
ICAgICAgbG9nKCJ4JWQ6ICUwMTZsbHggeCVkOiAlMDE2bGx4IHglZDogJTAxNmxseCB4JWQ6ICUw
MTZsbHgiLAotICAgICAgICAgICAgICAgIGksIG1jb250ZXh0LT5fX3NzLl9feFtpXSwKLSAgICAg
ICAgICAgICAgICBpKzEsIG1jb250ZXh0LT5fX3NzLl9feFtpKzFdLAotICAgICAgICAgICAgICAg
IGkrMiwgbWNvbnRleHQtPl9fc3MuX194W2krMl0sCi0gICAgICAgICAgICAgICAgaSszLCBtY29u
dGV4dC0+X19zcy5fX3hbaSszXSk7CisgICAgICAgICAgICAgICAgaSwgcmVnaXN0ZXJzLl9feFtp
XSwKKyAgICAgICAgICAgICAgICBpKzEsIHJlZ2lzdGVycy5fX3hbaSsxXSwKKyAgICAgICAgICAg
ICAgICBpKzIsIHJlZ2lzdGVycy5fX3hbaSsyXSwKKyAgICAgICAgICAgICAgICBpKzMsIHJlZ2lz
dGVycy5fX3hbaSszXSk7CiAgICAgICAgIH0KICAgICAgICAgQVNTRVJUKGkgPCAyOSk7CiAgICAg
ICAgIGxvZygieCVkOiAlMDE2bGx4IGZwOiAlMDE2bGx4IGxyOiAlMDE2bGx4IiwKLSAgICAgICAg
ICAgIGksIG1jb250ZXh0LT5fX3NzLl9feFtpXSwgbWNvbnRleHQtPl9fc3MuX19mcCwgbWNvbnRl
eHQtPl9fc3MuX19scik7CisgICAgICAgICAgICBpLCByZWdpc3RlcnMuX194W2ldLCByZWdpc3Rl
cnMuX19mcCwgcmVnaXN0ZXJzLl9fbHIpOwogICAgICAgICBsb2coInNwOiAlMDE2bGx4IHBjOiAl
MDE2bGx4IGNwc3I6ICUwOHgiLAotICAgICAgICAgICAgbWNvbnRleHQtPl9fc3MuX19zcCwgbWNv
bnRleHQtPl9fc3MuX19wYywgbWNvbnRleHQtPl9fc3MuX19jcHNyKTsKKyAgICAgICAgICAgIHJl
Z2lzdGVycy5fX3NwLCByZWdpc3RlcnMuX19wYywgcmVnaXN0ZXJzLl9fY3Bzcik7CiAjZW5kaWYK
ICAgICB9CiAKLSAgICBtY29udGV4dF90JiBtY29udGV4dDsKKyAgICBQbGF0Zm9ybVJlZ2lzdGVy
cyYgcmVnaXN0ZXJzOwogICAgIHZvaWQqIG1hY2hpbmVQQzsKICAgICB2b2lkKiBzdGFja1BvaW50
ZXI7CiAgICAgdm9pZCogZnJhbWVQb2ludGVyOwpAQCAtMTQyLDggKzE0Miw4IEBAIHN0cnVjdCBT
aWduYWxDb250ZXh0IHsKIHN0YXRpYyB2b2lkIGluc3RhbGxDcmFzaEhhbmRsZXIoKQogewogI2lm
IENQVShYODZfNjQpIHx8IENQVShBUk02NCkKLSAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWdu
YWw6OklsbCwgW10gKGludCwgc2lnaW5mb190Kiwgdm9pZCogdWFwKSB7Ci0gICAgICAgIFNpZ25h
bENvbnRleHQgY29udGV4dChzdGF0aWNfY2FzdDx1Y29udGV4dF90Kj4odWFwKS0+dWNfbWNvbnRl
eHQpOworICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbDo6SWxsLCBbXSAoU2lnbmFsLCBT
aWdJbmZvJiwgUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVycykgeworICAgICAgICBTaWduYWxD
b250ZXh0IGNvbnRleHQocmVnaXN0ZXJzKTsKIAogICAgICAgICBpZiAoIWlzSklUUEMoY29udGV4
dC5tYWNoaW5lUEMpKQogICAgICAgICAgICAgcmV0dXJuIFNpZ25hbEFjdGlvbjo6Tm90SGFuZGxl
ZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAppbmRleCAxZGQw
Y2QxZDgzNWM2YzJmMjMxYjAwYjg4NmRkZTRhZjcyYzI2M2NlLi5iMWI1OThkMjBjNWMwMDc3ZDll
OWQwOGUzNjhhZDVjYTE3ODMxYmFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtQkJRUGxhbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2Fz
bUJCUVBsYW4uY3BwCkBAIC0yNDIsNyArMjQyLDcgQEAgdm9pZCBCQlFQbGFuOjpjb21waWxlRnVu
Y3Rpb25zKENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKICAgICAgICAgQVNTRVJUKHZhbGlkYXRl
RnVuY3Rpb24oZnVuY3Rpb25TdGFydCwgZnVuY3Rpb25MZW5ndGgsIHNpZ25hdHVyZSwgbV9tb2R1
bGVJbmZvcm1hdGlvbi5nZXQoKSkpOwogCiAgICAgICAgIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2Fs
bHNbZnVuY3Rpb25JbmRleF0gPSBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4oKTsKLSAg
ICAgICAgVGllclVwQ291bnQqIHRpZXJVcCA9ICZtX3RpZXJVcENvdW50c1tmdW5jdGlvbkluZGV4
XTsKKyAgICAgICAgVGllclVwQ291bnQqIHRpZXJVcCA9IE9wdGlvbnM6OnVzZUJCUVRpZXJVcENo
ZWNrcygpID8gJm1fdGllclVwQ291bnRzW2Z1bmN0aW9uSW5kZXhdIDogbnVsbHB0cjsKICAgICAg
ICAgYXV0byBwYXJzZUFuZENvbXBpbGVSZXN1bHQgPSBwYXJzZUFuZENvbXBpbGUobV9jb21waWxh
dGlvbkNvbnRleHRzW2Z1bmN0aW9uSW5kZXhdLCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0
aCwgc2lnbmF0dXJlLCBtX3VubGlua2VkV2FzbVRvV2FzbUNhbGxzW2Z1bmN0aW9uSW5kZXhdLCBt
X21vZHVsZUluZm9ybWF0aW9uLmdldCgpLCBtX21vZGUsIENvbXBpbGF0aW9uTW9kZTo6QkJRTW9k
ZSwgZnVuY3Rpb25JbmRleCwgdGllclVwKTsKIAogICAgICAgICBpZiAoVU5MSUtFTFkoIXBhcnNl
QW5kQ29tcGlsZVJlc3VsdCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21GYXVsdFNpZ25hbEhhbmRsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAKaW5kZXggMmUwYzk5YTM5YmViZDMxNzhiOTE0
OGQ5NThmZTUzZTU3YTYyMjk3ZS4uMjY0YzM0ZGU0NWRhMTc1YTVkNTE0MWMxNzFlZmU5NWUwNjNj
NWUyNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0U2ln
bmFsSGFuZGxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZhdWx0
U2lnbmFsSGFuZGxlci5jcHAKQEAgLTUyLDkgKzUyLDggQEAgc3RhdGljIExhenlOZXZlckRlc3Ry
b3llZDxIYXNoU2V0PHN0ZDo6dHVwbGU8dm9pZCosIHZvaWQqPj4+IGNvZGVMb2NhdGlvbnM7IC8v
ICgKIAogc3RhdGljIGJvb2wgZmFzdEhhbmRsZXJJbnN0YWxsZWQgeyBmYWxzZSB9OwogCi1zdGF0
aWMgU2lnbmFsQWN0aW9uIHRyYXBIYW5kbGVyKGludCwgc2lnaW5mb190KiBzaWdJbmZvLCB2b2lk
KiB1Y29udGV4dCkKK3N0YXRpYyBTaWduYWxBY3Rpb24gdHJhcEhhbmRsZXIoU2lnbmFsLCBTaWdJ
bmZvJiBzaWdJbmZvLCBQbGF0Zm9ybVJlZ2lzdGVycyYgY29udGV4dCkKIHsKLSAgICBtY29udGV4
dF90JiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+KHVjb250ZXh0KS0+dWNfbWNv
bnRleHQ7CiAgICAgdm9pZCogZmF1bHRpbmdJbnN0cnVjdGlvbiA9IE1hY2hpbmVDb250ZXh0Ojpp
bnN0cnVjdGlvblBvaW50ZXIoY29udGV4dCk7CiAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZSwgInN0
YXJ0aW5nIGhhbmRsZXIgZm9yIGZhdWx0IGF0OiAiLCBSYXdQb2ludGVyKGZhdWx0aW5nSW5zdHJ1
Y3Rpb24pKTsKIApAQCAtNjQsNyArNjMsNyBAQCBzdGF0aWMgU2lnbmFsQWN0aW9uIHRyYXBIYW5k
bGVyKGludCwgc2lnaW5mb190KiBzaWdJbmZvLCB2b2lkKiB1Y29udGV4dCkKICAgICBpZiAoaXNK
SVRQQyhmYXVsdGluZ0luc3RydWN0aW9uKSkgewogICAgICAgICBib29sIGZhdWx0ZWRJbkFjdGl2
ZUZhc3RNZW1vcnkgPSBmYWxzZTsKICAgICAgICAgewotICAgICAgICAgICAgdm9pZCogZmF1bHRp
bmdBZGRyZXNzID0gc2lnSW5mby0+c2lfYWRkcjsKKyAgICAgICAgICAgIHZvaWQqIGZhdWx0aW5n
QWRkcmVzcyA9IHNpZ0luZm8uZmF1bHRpbmdBZGRyZXNzOwogICAgICAgICAgICAgZGF0YUxvZ0xu
SWYodmVyYm9zZSwgImNoZWNraW5nIGZhdWx0aW5nIGFkZHJlc3M6ICIsIFJhd1BvaW50ZXIoZmF1
bHRpbmdBZGRyZXNzKSwgIiBpcyBpbiBhbiBhY3RpdmUgZmFzdCBtZW1vcnkiKTsKICAgICAgICAg
ICAgIGZhdWx0ZWRJbkFjdGl2ZUZhc3RNZW1vcnkgPSBXYXNtOjpNZW1vcnk6OmFkZHJlc3NJc0lu
QWN0aXZlRmFzdE1lbW9yeShmYXVsdGluZ0FkZHJlc3MpOwogICAgICAgICB9CkBAIC0xMjQsMTEg
KzEyMywxMSBAQCB2b2lkIGVuYWJsZUZhc3RNZW1vcnkoKQogICAgICAgICAgICAgcmV0dXJuOwog
CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZX0ZBU1RfTUVNT1JZKQotICAgICAgICBpbnN0YWxsU2ln
bmFsSGFuZGxlcihTaWduYWw6OkJ1cywgW10gKGludCBzaWduYWwsIHNpZ2luZm9fdCogc2lnSW5m
bywgdm9pZCogdWNvbnRleHQpIHsKKyAgICAgICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFs
OjpCdXMsIFtdIChTaWduYWwgc2lnbmFsLCBTaWdJbmZvJiBzaWdJbmZvLCBQbGF0Zm9ybVJlZ2lz
dGVycyYgdWNvbnRleHQpIHsKICAgICAgICAgICAgIHJldHVybiB0cmFwSGFuZGxlcihzaWduYWws
IHNpZ0luZm8sIHVjb250ZXh0KTsKICAgICAgICAgfSk7CiAKLSAgICAgICAgaW5zdGFsbFNpZ25h
bEhhbmRsZXIoU2lnbmFsOjpTZWdWLCBbXSAoaW50IHNpZ25hbCwgc2lnaW5mb190KiBzaWdJbmZv
LCB2b2lkKiB1Y29udGV4dCkgeworICAgICAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWw6
OlNlZ1YsIFtdIChTaWduYWwgc2lnbmFsLCBTaWdJbmZvJiBzaWdJbmZvLCBQbGF0Zm9ybVJlZ2lz
dGVycyYgdWNvbnRleHQpIHsKICAgICAgICAgICAgIHJldHVybiB0cmFwSGFuZGxlcihzaWduYWws
IHNpZ0luZm8sIHVjb250ZXh0KTsKICAgICAgICAgfSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21NYWNoaW5lVGhyZWFkcy5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTWFjaGluZVRocmVhZHMuY3BwCmluZGV4IDVhYWM4N2FjYjU3NDdj
N2ZjYTJmOTM2ZWM5Y2Y2NzhiNDMxNzgxNzEuLjBhMzY3ZmQ1ZTIyNTI3ZTljM2M4NzUzNmVjZmQ3
MmIxM2RmNzlkNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21N
YWNoaW5lVGhyZWFkcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1h
Y2hpbmVUaHJlYWRzLmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIk1hY2hpbmVTdGFj
a01hcmtlci5oIgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0
Zi9UaHJlYWRNZXNzYWdlLmg+CisjaW5jbHVkZSA8d3RmL3RocmVhZHMvU2lnbmFscy5oPgogCiBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFdhc20gewogCkBAIC01Nyw3ICs1OCw3IEBAIHZvaWQg
cmVzZXRJbnN0cnVjdGlvbkNhY2hlT25BbGxUaHJlYWRzKCkKIAogICAgIGNvbnN0IERvdWJseUxp
bmtlZExpc3Q8TWFjaGluZVRocmVhZHM6Ok1hY2hpbmVUaHJlYWQ+JiB0aHJlYWRzID0gd2FzbVRo
cmVhZHMoKS50aHJlYWRzTGlzdEhlYWQobG9ja2VyKTsKICAgICBmb3IgKGNvbnN0IGF1dG8qIHRo
cmVhZCA9IHRocmVhZHMuaGVhZCgpOyB0aHJlYWQ7IHRocmVhZCA9IHRocmVhZC0+bmV4dCgpKSB7
Ci0gICAgICAgIHNlbmRNZXNzYWdlKHRocmVhZC0+bV90aHJlYWQuZ2V0KCksIFtdIChzaWdpbmZv
X3QqLCB1Y29udGV4dF90KikgeworICAgICAgICBzZW5kTWVzc2FnZSh0aHJlYWQtPm1fdGhyZWFk
LmdldCgpLCBbXSAoY29uc3QgUGxhdGZvcm1SZWdpc3RlcnMmKSB7CiAgICAgICAgICAgICAvLyBJ
dCdzIGxpa2VseSB0aGF0IHRoZSBzaWduYWwgaGFuZGxlciB3aWxsIGFscmVhZHkgcmVzZXQgdGhl
IGluc3RydWN0aW9uIGNhY2hlIGJ1dCB3ZSBtaWdodCBhcyB3ZWxsIGJlIHN1cmUuCiAgICAgICAg
ICAgICBXVEY6OmNyb3NzTW9kaWZ5aW5nQ29kZUZlbmNlKCk7CiAgICAgICAgIH0pOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi9Db25maWd1cmF0aW9ucy9XVEYueGNjb25maWcgYi9Tb3VyY2UvV1RG
L0NvbmZpZ3VyYXRpb25zL1dURi54Y2NvbmZpZwppbmRleCA0MjFlZmQ5NjFjMTQ2OGNkMjBkZGM1
YmJmODg5NjIwZWUxY2Y1OGRjLi5hZjE5OWNlYjk1MDZmODk1MGQzM2E5Y2U0ODA3YmE2ZGJiN2Iy
N2U1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NvbmZpZ3VyYXRpb25zL1dURi54Y2NvbmZpZwor
KysgYi9Tb3VyY2UvV1RGL0NvbmZpZ3VyYXRpb25zL1dURi54Y2NvbmZpZwpAQCAtMjcsMyArMjcs
NiBAQCBQUk9EVUNUX05BTUUgPSBXVEY7CiAKIEdDQ19TWU1CT0xTX1BSSVZBVEVfRVhURVJOID0g
WUVTOwogU1RSSVBfSU5TVEFMTEVEX1BST0RVQ1QgPSBOTzsKKworRVhDTFVERURfU09VUkNFX0ZJ
TEVfTkFNRVNfID0gTWFjaEV4Y2VwdGlvbnMuZGVmcworRVhDTFVERURfU09VUkNFX0ZJTEVfTkFN
RVNbc2RrPWlwaG9uZW9zKl0gPSAkKEVYQ0xVREVEX1NPVVJDRV9GSUxFX05BTUVTXyQoVVNFX0lO
VEVSTkFMX1NESykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCA1ZjQ1Mjg3ZjZlM2M2ODg1YjIyYmEyNzc2Y2ZiYzZhMzMyM2JkMDViLi41ODU0NGNjYjYyY2Iy
MjEyYmFlZTc2ZjRkMmEwMWU4OWI2YjdiMDk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTY0LDYgKzY0LDcgQEAKIAkJNTIxODMwMTJDOTlFNDc2QTg0RUVC
RUE4IC8qIFN5bWJvbEltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRjcyQkJEQjEwN0ZBNDI0ODg2MTc4QjlFIC8qIFN5bWJvbEltcGwuY3BwICov
OyB9OwogCQk1MzExQkQ1MzFFQTcxQ0FEMDA1MjUyODEgLyogU2lnbmFscy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzExQkQ1MTFFQTcxQ0FEMDA1
MjUyODEgLyogU2lnbmFscy5jcHAgKi87IH07CiAJCTUzMTFCRDVDMUVBODIyRjkwMDUyNTI4MSAv
KiBUaHJlYWRNZXNzYWdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUzMTFCRDVCMUVBODIyRjkwMDUyNTI4MSAvKiBUaHJlYWRNZXNzYWdlLmNwcCAq
LzsgfTsKKwkJNTM1MzRGMkExRUMwRTEwRTAwMTQxQjJGIC8qIE1hY2hFeGNlcHRpb25zLmRlZnMg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzUzNEYyOTFF
QzBFMTBFMDAxNDFCMkYgLyogTWFjaEV4Y2VwdGlvbnMuZGVmcyAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChDbGllbnQsIFNlcnZlciwgKTsgfTsgfTsKIAkJNzBBOTkzRkUxQUQ3MTUxMzAw
RkE2MTVCIC8qIFN5bWJvbFJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDcwQTk5M0ZDMUFENzE1MTMwMEZBNjE1QiAvKiBTeW1ib2xSZWdp
c3RyeS5jcHAgKi87IH07CiAJCTcwRUNBNjBEMUIwMjQyNjgwMDQ0OTczOSAvKiBBdG9taWNTdHJp
bmdJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDcwRUNBNjBBMUIwMjQyNjgwMDQ0OTczOSAvKiBBdG9taWNTdHJpbmdJbXBsLmNwcCAqLzsgfTsK
IAkJN0FGRUM2QjExRUIyMkI1OTAwREFERTM2IC8qIFVVSUQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FGRUM2QjAxRUIyMkI1OTAwREFERTM2IC8q
IFVVSUQuY3BwICovOyB9OwpAQCAtMjk5LDYgKzMwMCw3IEBACiAJCTUzMTFCRDU3MUVBN0UxQTEw
MDUyNTI4MSAvKiBTaWduYWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNp
Z25hbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTMxMUJENTkxRUE4MUE5NjAw
NTI1MjgxIC8qIFRocmVhZE1lc3NhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVGhyZWFkTWVzc2FnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzExQkQ1
QjFFQTgyMkY5MDA1MjUyODEgLyogVGhyZWFkTWVzc2FnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUaHJlYWRNZXNzYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNTM1MzRGMjkxRUMwRTEwRTAwMTQxQjJGIC8qIE1hY2hFeGNlcHRpb25zLmRl
ZnMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLm1pZzsgcGF0aCA9IE1hY2hFeGNlcHRpb25zLmRlZnM7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzOUVCMDYyMUQ1NTI4NDIwMEM4MkVGNyAv
KiBMRUJEZWNvZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExFQkRlY29k
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNFQzI1M0MxRTk1QUQzMDAwMDgz
MUI5IC8qIFByaW9yaXR5UXVldWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UHJpb3JpdHlRdWV1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NTMwNzFDOTFD
NDA0MjcyMDAzODQ4OTggLyogVGlueUxSVUNhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFRpbnlMUlVDYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MTAyMyw2ICsxMDI1LDcgQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTFBNDI4QjhCMUM4Rjg5REQw
MDUxRTlFQiAvKiBBcHBLaXRDb21wYXRpYmlsaXR5RGVjbGFyYXRpb25zLmggKi8sCiAJCQkJMUFD
QUREODIxODg0NDgwMTAwRDhCNzFEIC8qIERlcHJlY2F0ZWRTeW1ib2xzVXNlZEJ5U2FmYXJpLm1t
ICovLAorCQkJCTUzNTM0RjI5MUVDMEUxMEUwMDE0MUIyRiAvKiBNYWNoRXhjZXB0aW9ucy5kZWZz
ICovLAogCQkJCUE4QTQ3MkM1MTUxQTgyNUEwMDQxMjNGRiAvKiBNYWluVGhyZWFkTWFjLm1tICov
LAogCQkJKTsKIAkJCXBhdGggPSBtYWM7CkBAIC0xMzQ2LDYgKzEzNDksNyBAQAogCQkJCTE0M0Y2
MTFGMTU2NUYwRjkwMERCNTE0QSAvKiBSQU1TaXplLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEz
QjcyNUVDOTg3NDQ2QUQ5M0YxQTQ0MCAvKiBSYW5kb21EZXZpY2UuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQThBNDc0MTQxNTFBODI1QjAwNDEyM0ZGIC8qIFJhbmRvbU51bWJlci5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQk1MzUzNEYyQTFFQzBFMTBFMDAxNDFCMkYgLyogTWFjaEV4Y2VwdGlvbnMu
ZGVmcyBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDFBMTUxQTgyNUIwMDQxMjNGRiAvKiBSZWZD
b3VudGVkTGVha0NvdW50ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkNERUQwRjMxODExNUM4
NTAwNERCQTcwIC8qIFJ1bkxvb3AuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkNERUQwRUYxODEx
NUMzODAwNERCQTcwIC8qIFJ1bkxvb3BDRi5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmggYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCmlu
ZGV4IDY4NTRhODFlMzk3MjcwNjcwMzRkMDVkYjM5OGE0NzBjMTQyODQyNzYuLjM2Mzg4Mzk1ZDRm
NDNiNDY1Mzg5ZWJjOTgwMmZiYjRkOTBkMjRiN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3Rm
L1BsYXRmb3JtLmgKKysrIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaApAQCAtNjYzLDYgKzY2
MywxMCBAQAogI2RlZmluZSBIQVZFX1JFQURMSU5FIDEKICNkZWZpbmUgSEFWRV9TWVNfVElNRUJf
SCAxCiAKKyNpZiBfX2hhc19pbmNsdWRlKDxtYWNoL21hY2hfZXhjLmRlZnM+KSAmJiAhKFBMQVRG
T1JNKFdBVENIT1MpIHx8IFBMQVRGT1JNKEFQUExFVFYpKQorI2RlZmluZSBIQVZFX01BQ0hfRVhD
RVBUSU9OUyAxCisjZW5kaWYKKwogI2lmICFQTEFURk9STShHVEspCiAjZGVmaW5lIFVTRV9BQ0NF
TEVSQVRFIDEKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1SZWdp
c3RlcnMuaCBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtUmVnaXN0ZXJzLmgKaW5kZXggZDViNWFi
YzIyMWJiYWQ4Mjk3NjE5M2VjZTUxYzFjNzYxNzVkYjA2ZC4uODRiZDg5Mzc0OTlkYTk5ZWFhODZi
NzM2OTVmN2M1YjgxYWMyNjBjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1S
ZWdpc3RlcnMuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVJlZ2lzdGVycy5oCkBAIC0y
Niw5ICsyNiwxMSBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4K
KyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKICNpZiBPUyhEQVJXSU4pCiAjaW5jbHVk
ZSA8bWFjaC90aHJlYWRfYWN0Lmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CiAjZWxpZiBPUyhXSU5E
T1dTKQogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNlbHNlCkBAIC01NSw2ICs1NywxMSBAQCB0eXBl
ZGVmIGFybV90aHJlYWRfc3RhdGU2NF90IFBsYXRmb3JtUmVnaXN0ZXJzOwogI2Vycm9yIFVua25v
d24gQXJjaGl0ZWN0dXJlCiAjZW5kaWYKIAoraW5saW5lIFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdp
c3RlcnNGcm9tVUNvbnRleHQodWNvbnRleHRfdCogdWNvbnRleHQpCit7CisgICAgcmV0dXJuIHVj
b250ZXh0LT51Y19tY29udGV4dC0+X19zczsKK30KKwogI2VsaWYgT1MoV0lORE9XUykKIAogdXNp
bmcgUGxhdGZvcm1SZWdpc3RlcnMgPSBDT05URVhUOwpAQCAtNjUsNiArNzIsMTEgQEAgc3RydWN0
IFBsYXRmb3JtUmVnaXN0ZXJzIHsKICAgICBtY29udGV4dF90IG1hY2hpbmVDb250ZXh0OwogfTsK
IAoraW5saW5lIFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnNGcm9tVUNvbnRleHQodWNvbnRl
eHRfdCogdWNvbnRleHQpCit7CisgICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8UGxhdGZvcm1SZWdp
c3RlcnMqPigmdWNvbnRleHQtPnVjX21jb250ZXh0KTsKK30KKwogI2Vsc2UKIAogc3RydWN0IFBs
YXRmb3JtUmVnaXN0ZXJzIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1N0YWNrQm91bmRz
LmggYi9Tb3VyY2UvV1RGL3d0Zi9TdGFja0JvdW5kcy5oCmluZGV4IDU1NDYwNGYyYWI0ODRjN2Nm
NzFlZTM4NjMwY2ViNGM3OWMzM2U5NzIuLmNkNjJjMTQ4YTZjN2VmYzk1MTdhOGIwOWI4YTMyYzdm
ZTE5MGNkZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1N0YWNrQm91bmRzLmgKKysrIGIv
U291cmNlL1dURi93dGYvU3RhY2tCb3VuZHMuaApAQCAtNTQsNyArNTQsNiBAQCBwdWJsaWM6CiAg
ICAgICAgIDogbV9vcmlnaW4ob3JpZ2luKQogICAgICAgICAsIG1fYm91bmQoZW5kKQogICAgIHsK
LSAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIH0KIAogICAgIHZvaWQqIG9yaWdpbigp
IGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXIuY3BwIGIvU291
cmNlL1dURi93dGYvVGhyZWFkSG9sZGVyLmNwcAppbmRleCAzMGIyMjdjZGI4YWM1MjYwNzUwYjQ3
ZDQ4MmFiYzJkNTViZTNhYzk0Li41ZWFhNzIwZTg2ZWVjYjNlMzIxNDcxMjQ3ZDg5NTY4NDBkZjJl
ZWY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXIuY3BwCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlci5jcHAKQEAgLTM0LDEyICszNCwxNyBAQAogCiAjaW5j
bHVkZSAiVGhyZWFkaW5nLmgiCiAKKyNpbmNsdWRlIDx3dGYvdGhyZWFkcy9TaWduYWxzLmg+CisK
IG5hbWVzcGFjZSBXVEYgewogCiBUaHJlYWRTcGVjaWZpY0tleSBUaHJlYWRIb2xkZXI6Om1fa2V5
ID0gSW52YWxpZFRocmVhZFNwZWNpZmljS2V5OwogCiBUaHJlYWRIb2xkZXI6On5UaHJlYWRIb2xk
ZXIoKQogeworI2lmIEhBVkUoTUFDSF9FWENFUFRJT05TKQorICAgIHVucmVnaXN0ZXJUaHJlYWRG
b3JNYWNoRXhjZXB0aW9uSGFuZGxpbmcoJm1fdGhyZWFkLmdldCgpKTsKKyNlbmRpZgogICAgIG1f
dGhyZWFkLT5kaWRFeGl0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVh
ZE1lc3NhZ2UuY3BwIGIvU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5jcHAKaW5kZXggZjE0
YmM0NWQzNjE0YzdjNjYzNWViMTdhYjBlMjcyODE2YTEzNzNkZC4uYjk5NGNhY2Q2MjZkNGM2Y2Zk
NWMxNjgxMDliNTViNjlkZDIzYjk5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFk
TWVzc2FnZS5jcHAKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5jcHAKQEAgLTM2
LDYgKzM2LDkgQEAKICNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+CiAjaW5jbHVkZSA8d3RmL3RocmVh
ZHMvU2lnbmFscy5oPgogCisjaWYgSEFWRShNQUNIX0VYQ0VQVElPTlMpCisjaW5jbHVkZSA8bWFj
aC90aHJlYWRfYWN0Lmg+CisjZW5kaWYKIAogbmFtZXNwYWNlIFdURiB7CiAKQEAgLTgzLDEyICs4
NiwxMiBAQCB2b2lkIGluaXRpYWxpemVUaHJlYWRNZXNzYWdlcygpCiB9CiAKIFNVUFBSRVNTX0FT
QU4KLU1lc3NhZ2VTdGF0dXMgc2VuZE1lc3NhZ2VTY29wZWQoVGhyZWFkJiB0aHJlYWQsIGNvbnN0
IFRocmVhZE1lc3NhZ2UmIG1lc3NhZ2UpCitzdGF0aWMgTWVzc2FnZVN0YXR1cyBzZW5kTWVzc2Fn
ZVVzaW5nU2lnbmFsKFRocmVhZCYgdGhyZWFkLCBjb25zdCBUaHJlYWRNZXNzYWdlJiBtZXNzYWdl
KQogewogICAgIGNvbnN0ZXhwciBTaWduYWwgc2lnbmFsID0gU2lnbmFsOjpVc3I7CiAgICAgc3Rh
dGljIHN0ZDo6b25jZV9mbGFnIG9uY2U7CiAgICAgc3RkOjpjYWxsX29uY2Uob25jZSwgW10gewot
ICAgICAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihzaWduYWwsIFtdIChpbnQsIHNpZ2luZm9fdCog
aW5mbywgdm9pZCogdWFwKSB7CisgICAgICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKHNpZ25hbCwg
W10gKFNpZ25hbCwgU2lnSW5mbyYsIFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMpIHsKICAg
ICAgICAgICAgIFRocmVhZCogdGhyZWFkID0gVGhyZWFkOjpjdXJyZW50TWF5QmVOdWxsKCk7CiAK
ICAgICAgICAgICAgIGlmICghdGhyZWFkKSB7CkBAIC05OCw3ICsxMDEsNyBAQCBNZXNzYWdlU3Rh
dHVzIHNlbmRNZXNzYWdlU2NvcGVkKFRocmVhZCYgdGhyZWFkLCBjb25zdCBUaHJlYWRNZXNzYWdl
JiBtZXNzYWdlKQogCiAgICAgICAgICAgICAvLyBOb2RlIHNob3VsZCBiZSBkZWxldGVkIGluIHRo
ZSBzZW5kZXIgdGhyZWFkLiBEZWxldGluZyBOb2RlcyBpbiBzaWduYWwgaGFuZGxlciBjYXVzZXMg
ZGVhZCBsb2NrLgogICAgICAgICAgICAgdGhyZWFkLT50aHJlYWRNZXNzYWdlcygpLmNvbnN1bWVB
bGxXaXRoTm9kZShbJl0gKFRocmVhZE1lc3NhZ2VEYXRhKiBkYXRhLCBOb2RlKiBub2RlKSB7Ci0g
ICAgICAgICAgICAgICAgZGF0YS0+bWVzc2FnZShpbmZvLCBzdGF0aWNfY2FzdDx1Y29udGV4dF90
Kj4odWFwKSk7CisgICAgICAgICAgICAgICAgZGF0YS0+bWVzc2FnZShyZWdpc3RlcnMpOwogICAg
ICAgICAgICAgICAgIC8vIEJ5IHNldHRpbmcgcmFuIHZhcmlhYmxlLCAoMSkgdGhlIHNlbmRlciBh
Y2tub3dsZWRnZXMgdGhlIGNvbXBsZXRpb24gYW5kCiAgICAgICAgICAgICAgICAgLy8gKDIpIGdl
dHMgdGhlIE5vZGUgdG8gYmUgZGVsZXRlZC4KICAgICAgICAgICAgICAgICBkYXRhLT5yYW4uc3Rv
cmUobm9kZSk7CkBAIC0xNTYsNiArMTU5LDYyIEBAIE1lc3NhZ2VTdGF0dXMgc2VuZE1lc3NhZ2VT
Y29wZWQoVGhyZWFkJiB0aHJlYWQsIGNvbnN0IFRocmVhZE1lc3NhZ2UmIG1lc3NhZ2UpCiAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAorI2lmIEhBVkUoTUFDSF9FWENFUFRJ
T05TKQorc3RhdGljIE1lc3NhZ2VTdGF0dXMgc2VuZE1lc3NhZ2VVc2luZ01hY2goVGhyZWFkJiB0
aHJlYWQsIGNvbnN0IFRocmVhZE1lc3NhZ2UmIG1lc3NhZ2UpCit7CisgICAgc3RhdGljIFN0YXRp
Y0xvY2sgbWVzc2FnZUxvY2s7CisgICAgYXV0byBsb2NraG9sZGVyID0gaG9sZExvY2sobWVzc2Fn
ZUxvY2spOworCisgICAgYXV0byByZXN1bHQgPSB0aHJlYWQuc3VzcGVuZCgpOworICAgIGlmICgh
cmVzdWx0KQorICAgICAgICByZXR1cm4gTWVzc2FnZVN0YXR1czo6VGhyZWFkRXhpdGVkOworCisj
aWYgQ1BVKFg4NikKKyAgICB1bnNpZ25lZCB1c2VyQ291bnQgPSBzaXplb2YoUGxhdGZvcm1SZWdp
c3RlcnMpIC8gc2l6ZW9mKGludCk7CisgICAgdGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9
IGkzODZfVEhSRUFEX1NUQVRFOworI2VsaWYgQ1BVKFg4Nl82NCkKKyAgICB1bnNpZ25lZCB1c2Vy
Q291bnQgPSB4ODZfVEhSRUFEX1NUQVRFNjRfQ09VTlQ7CisgICAgdGhyZWFkX3N0YXRlX2ZsYXZv
cl90IGZsYXZvciA9IHg4Nl9USFJFQURfU1RBVEU2NDsKKyNlbGlmIENQVShBUk0pCisgICAgdW5z
aWduZWQgdXNlckNvdW50ID0gQVJNX1RIUkVBRF9TVEFURV9DT1VOVDsKKyAgICB0aHJlYWRfc3Rh
dGVfZmxhdm9yX3QgZmxhdm9yID0gQVJNX1RIUkVBRF9TVEFURTsKKyNlbGlmIENQVShBUk02NCkK
KyAgICB1bnNpZ25lZCB1c2VyQ291bnQgPSBBUk1fVEhSRUFEX1NUQVRFNjRfQ09VTlQ7CisgICAg
dGhyZWFkX3N0YXRlX2ZsYXZvcl90IGZsYXZvciA9IEFSTV9USFJFQURfU1RBVEU2NDsKKyNlbHNl
CisjZXJyb3IgVW5rbm93biBBcmNoaXRlY3R1cmUKKyNlbmRpZgorCisgICAgUGxhdGZvcm1SZWdp
c3RlcnMgcmVnaXN0ZXJzOworICAgIHRocmVhZF9zdGF0ZV90IHN0YXRlID0gcmVpbnRlcnByZXRf
Y2FzdDx0aHJlYWRfc3RhdGVfdD4oJnJlZ2lzdGVycyk7CisgICAgdGhyZWFkX2dldF9zdGF0ZSh0
aHJlYWQubWFjaFRocmVhZCgpLCBmbGF2b3IsIHN0YXRlLCAmdXNlckNvdW50KTsKKworICAgIG1l
c3NhZ2UocmVnaXN0ZXJzKTsKKworICAgIHRocmVhZF9zZXRfc3RhdGUodGhyZWFkLm1hY2hUaHJl
YWQoKSwgZmxhdm9yLCBzdGF0ZSwgdXNlckNvdW50KTsKKworICAgIHRocmVhZC5yZXN1bWUoKTsK
KyAgICByZXR1cm4gTWVzc2FnZVN0YXR1czo6TWVzc2FnZVJhbjsKK30KKworc3RhdGljIGJvb2wg
dXNlTWFjaCA9IGZhbHNlOwordm9pZCBkZWxpdmVyTWVzc2FnZXNVc2luZ01hY2goKQoreworICAg
IHVzZU1hY2ggPSB0cnVlOworfQorCisjZW5kaWYgLy8gSEFWRShNQUNIX0VYQ0VQVElPTlMpCisK
K01lc3NhZ2VTdGF0dXMgc2VuZE1lc3NhZ2VTY29wZWQoVGhyZWFkJiB0aHJlYWQsIGNvbnN0IFRo
cmVhZE1lc3NhZ2UmIG1lc3NhZ2UpCit7CisjaWYgSEFWRShNQUNIX0VYQ0VQVElPTlMpCisgICAg
aWYgKHVzZU1hY2gpCisgICAgICAgIHJldHVybiBzZW5kTWVzc2FnZVVzaW5nTWFjaCh0aHJlYWQs
IG1lc3NhZ2UpOworI2VuZGlmCisgICAgcmV0dXJuIHNlbmRNZXNzYWdlVXNpbmdTaWduYWwodGhy
ZWFkLCBtZXNzYWdlKTsKK30KKworCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogI2VuZGlmIC8vIFVT
RShQVEhSRUFEUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZE1lc3NhZ2UuaCBi
L1NvdXJjZS9XVEYvd3RmL1RocmVhZE1lc3NhZ2UuaAppbmRleCA5YWU1M2YyOWNmN2U4ZmIwMGVm
OTIxMWQxNmNlMmNkZWQ2MDNlYzFiLi4zMDA0NzJiM2U3MWM0MmVjODk4NzRhM2RlMGZmMzc2MWNh
OTY5MTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRNZXNzYWdlLmgKKysrIGIv
U291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5oCkBAIC0zNiw3ICszNiw3IEBAIG5hbWVzcGFj
ZSBXVEYgewogdm9pZCBpbml0aWFsaXplVGhyZWFkTWVzc2FnZXMoKTsKIAogY2xhc3MgVGhyZWFk
TWVzc2FnZURhdGE7Ci11c2luZyBUaHJlYWRNZXNzYWdlID0gU2NvcGVkTGFtYmRhPHZvaWQoc2ln
aW5mb190KiwgdWNvbnRleHRfdCopPjsKK3VzaW5nIFRocmVhZE1lc3NhZ2UgPSBTY29wZWRMYW1i
ZGE8dm9pZChQbGF0Zm9ybVJlZ2lzdGVycyYpPjsKIAogZW51bSBjbGFzcyBNZXNzYWdlU3RhdHVz
IHsKICAgICBNZXNzYWdlUmFuLApAQCAtNTEsMTAgKzUxLDE0IEBAIE1lc3NhZ2VTdGF0dXMgc2Vu
ZE1lc3NhZ2VTY29wZWQoVGhyZWFkJiwgY29uc3QgVGhyZWFkTWVzc2FnZSYpOwogdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4KIE1lc3NhZ2VTdGF0dXMgc2VuZE1lc3NhZ2UoVGhyZWFkJiB0YXJn
ZXRUaHJlYWQsIGNvbnN0IEZ1bmN0b3ImIGZ1bmMpCiB7Ci0gICAgYXV0byBsYW1iZGEgPSBzY29w
ZWRMYW1iZGFSZWY8dm9pZChzaWdpbmZvX3QqLCB1Y29udGV4dF90Kik+KGZ1bmMpOworICAgIGF1
dG8gbGFtYmRhID0gc2NvcGVkTGFtYmRhUmVmPHZvaWQoUGxhdGZvcm1SZWdpc3RlcnMmKT4oZnVu
Yyk7CiAgICAgcmV0dXJuIHNlbmRNZXNzYWdlU2NvcGVkKHRhcmdldFRocmVhZCwgbGFtYmRhKTsK
IH0KIAorI2lmIEhBVkUoTUFDSF9FWENFUFRJT05TKQordm9pZCBkZWxpdmVyTWVzc2FnZXNVc2lu
Z01hY2goKTsKKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogdXNpbmcgV1RGOjpzZW5k
TWVzc2FnZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZy5oIGIvU291cmNl
L1dURi93dGYvVGhyZWFkaW5nLmgKaW5kZXggZDJlNTM2ZGY3YTg2OTZkOGU2Yjk1YmE0M2UxNzNk
M2I1NTBiZjE2YS4uMzUxNGU4YzA5ZjBmYzk0ZDUzNGJlMmYzYjZlN2M0OTUwZTBiY2YwNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmgKKysrIGIvU291cmNlL1dURi93dGYv
VGhyZWFkaW5nLmgKQEAgLTEzOCw2ICsxMzgsMTAgQEAgcHVibGljOgogCiAjaWYgVVNFKFBUSFJF
QURTKQogICAgIExvY2tsZXNzQmFnPFRocmVhZE1lc3NhZ2VEYXRhKj4mIHRocmVhZE1lc3NhZ2Vz
KCkgeyByZXR1cm4gbV90aHJlYWRNZXNzYWdlczsgfQorCisjaWYgT1MoREFSV0lOKQorICAgIG1h
Y2hfcG9ydF90IG1hY2hUaHJlYWQoKSB7IHJldHVybiBtX3BsYXRmb3JtVGhyZWFkOyB9CisjZW5k
aWYKICNlbmRpZgogCiBwcm90ZWN0ZWQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9tYWMv
TWFjaEV4Y2VwdGlvbnMuZGVmcyBiL1NvdXJjZS9XVEYvd3RmL21hYy9NYWNoRXhjZXB0aW9ucy5k
ZWZzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjQyMDU3NDJhNGVkNTAwZjgwNjRmZWViNDk1NWE3Yzk3MGQ5OWFmMGIK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9tYWMvTWFjaEV4Y2VwdGlvbnMuZGVm
cwpAQCAtMCwwICsxLDI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgPG1hY2gvbWFjaF9leGMuZGVmcz4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvd3RmL3RocmVhZHMvU2lnbmFscy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi90aHJlYWRzL1Np
Z25hbHMuY3BwCmluZGV4IDg1NWIyOGIzMTcyMTcyN2NmMWY0MzFhOTE4YTI1MWRjMmU2YTNkZmMu
LjcwN2NhOWMyZDMyYTc2ODBhMzk4M2E4MmVjZjBiN2Q2YmZlZWVlY2EgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvd3RmL3RocmVhZHMvU2lnbmFscy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdGhy
ZWFkcy9TaWduYWxzLmNwcApAQCAtMjgsMjEgKzI4LDI2NyBAQAogCiAjaWYgVVNFKFBUSFJFQURT
KQogCisjaWYgSEFWRShNQUNIX0VYQ0VQVElPTlMpCitleHRlcm4gIkMiIHsKKyNpbmNsdWRlICJN
YWNoRXhjZXB0aW9uc1NlcnZlci5oIgorfTsKKyNlbmRpZgorCiAjaW5jbHVkZSA8Y3N0ZGlvPgog
I2luY2x1ZGUgPG11dGV4PgogI2luY2x1ZGUgPHNpZ25hbC5oPgorCisjaWYgSEFWRShNQUNIX0VY
Q0VQVElPTlMpCisjaW5jbHVkZSA8bWFjaC9tYWNoLmg+CisjaW5jbHVkZSA8bWFjaC90aHJlYWRf
YWN0Lmg+CisjZW5kaWYKKwogI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CiAjaW5jbHVkZSA8d3Rm
L0RhdGFMb2cuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9Mb2Nr
bGVzc0JhZy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0
Zi9UaHJlYWRNZXNzYWdlLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCiAKIG5hbWVz
cGFjZSBXVEYgewogCisgICAgCiBzdGF0aWMgTGF6eU5ldmVyRGVzdHJveWVkPExvY2tsZXNzQmFn
PFNpZ25hbEhhbmRsZXI+PiBoYW5kbGVyc1tzdGF0aWNfY2FzdDxzaXplX3Q+KFNpZ25hbDo6TnVt
YmVyT2ZTaWduYWxzKV0gPSB7IH07Ci1zdGF0aWMgc3RydWN0IHNpZ2FjdGlvbiBvbGRBY3Rpb25z
W3N0YXRpY19jYXN0PHNpemVfdD4oU2lnbmFsOjpOdW1iZXJPZlNpZ25hbHMpXTsKIHN0YXRpYyBz
dGQ6Om9uY2VfZmxhZyBpbml0aWFsaXplT25jZUZsYWdzW3N0YXRpY19jYXN0PHNpemVfdD4oU2ln
bmFsOjpOdW1iZXJPZlNpZ25hbHMpXTsKK3N0YXRpYyBzdHJ1Y3Qgc2lnYWN0aW9uIG9sZEFjdGlv
bnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihTaWduYWw6Ok51bWJlck9mU2lnbmFscyldOworCisjaWYg
SEFWRShNQUNIX0VYQ0VQVElPTlMpCisvLyBZb3UgY2FuIHJlYWQgbW9yZSBhYm91dCBtYWNoIGV4
Y2VwdGlvbnMgaGVyZToKKy8vIGh0dHA6Ly93d3cuY3MuY211LmVkdS9hZnMvY3MvcHJvamVjdC9t
YWNoL3B1YmxpYy9kb2MvdW5wdWJsaXNoZWQvZXhjZXB0aW9uLnBzCisvLyBhbmQgdGhlIE1hY2gg
aW50ZXJmYWNlIEdlbmVyYXRvciAoTWlHKSBoZXJlOgorLy8gaHR0cDovL3d3dy5jcy5jbXUuZWR1
L2Fmcy9jcy9wcm9qZWN0L21hY2gvcHVibGljL2RvYy91bnB1Ymxpc2hlZC9taWcucHMKKworc3Rh
dGljIG1hY2hfcG9ydF90IGV4Y2VwdGlvblBvcnQ7CitzdGF0aWMgY29uc3RleHByIHNpemVfdCBt
YXhNZXNzYWdlU2l6ZSA9IDEgKiBLQjsKKworc3RhdGljIHZvaWQgc3RhcnRNYWNoRXhjZXB0aW9u
SGFuZGxlclRocmVhZCgpCit7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2U7CisgICAg
c3RkOjpjYWxsX29uY2Uob25jZSwgW10geworICAgICAgICBpZiAobWFjaF9wb3J0X2FsbG9jYXRl
KG1hY2hfdGFza19zZWxmKCksIE1BQ0hfUE9SVF9SSUdIVF9SRUNFSVZFLCAmZXhjZXB0aW9uUG9y
dCkgIT0gS0VSTl9TVUNDRVNTKQorICAgICAgICAgICAgQ1JBU0goKTsKKworICAgICAgICBpZiAo
bWFjaF9wb3J0X2luc2VydF9yaWdodChtYWNoX3Rhc2tfc2VsZigpLCBleGNlcHRpb25Qb3J0LCBl
eGNlcHRpb25Qb3J0LCBNQUNIX01TR19UWVBFX01BS0VfU0VORCkgIT0gS0VSTl9TVUNDRVNTKQor
ICAgICAgICAgICAgQ1JBU0goKTsKKworICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNl
IGEgZGlzcGF0Y2ggcXVldWUuCisgICAgICAgIC8vIFNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3MjAwMworICAgICAgICAodm9pZClUaHJlYWQ6OmNyZWF0ZSgK
KyAgICAgICAgICAgICJXVEYgTWFjaCBFeGNlcHRpb24gVGhyZWFkIiwgW10gKCkgeworICAgICAg
ICAgICAgICAgIHVuaW9uIE1lc3NhZ2UgeworICAgICAgICAgICAgICAgICAgICBtYWNoX21zZ19o
ZWFkZXJfdCBoZWFkZXI7CisgICAgICAgICAgICAgICAgICAgIGNoYXIgZGF0YVttYXhNZXNzYWdl
U2l6ZV07CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICBNZXNzYWdlIG1lc3Nh
Z2VIZWFkZXJJbjsKKyAgICAgICAgICAgICAgICBNZXNzYWdlIG1lc3NhZ2VIZWFkZXJPdXQ7CisK
KyAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgICAgICAgICBrZXJu
X3JldHVybl90IG1lc3NhZ2VSZXN1bHQgPSBtYWNoX21zZygmbWVzc2FnZUhlYWRlckluLmhlYWRl
ciwgTUFDSF9SQ1ZfTVNHLCAwLCBtYXhNZXNzYWdlU2l6ZSwgZXhjZXB0aW9uUG9ydCwgTUFDSF9N
U0dfVElNRU9VVF9OT05FLCBNQUNIX1BPUlRfTlVMTCk7CisgICAgICAgICAgICAgICAgICAgIGlm
IChtZXNzYWdlUmVzdWx0ID09IEtFUk5fU1VDQ0VTUykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFtYWNoX2V4Y19zZXJ2ZXIoJm1lc3NhZ2VIZWFkZXJJbi5oZWFkZXIsICZtZXNzYWdl
SGVhZGVyT3V0LmhlYWRlcikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1JBU0goKTsK
KworICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZVJlc3VsdCA9IG1hY2hfbXNnKCZtZXNz
YWdlSGVhZGVyT3V0LmhlYWRlciwgTUFDSF9TRU5EX01TRywgbWVzc2FnZUhlYWRlck91dC5oZWFk
ZXIubXNnaF9zaXplLCAwLCBtZXNzYWdlSGVhZGVyT3V0LmhlYWRlci5tc2doX2xvY2FsX3BvcnQs
IDAsIE1BQ0hfUE9SVF9OVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKG1lc3NhZ2VSZXN1bHQgPT0gS0VSTl9TVUNDRVNTKTsKKyAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbigiRmFpbGVkIHRvIHJl
Y2VpdmUgbWFjaCBtZXNzYWdlIGR1ZSB0byAiLCBtYWNoX2Vycm9yX3N0cmluZyhtZXNzYWdlUmVz
dWx0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9
KS5sZWFrUmVmKCk7CisgICAgfSk7Cit9CisKK3N0YXRpYyBTaWduYWwgZnJvbU1hY2hFeGNlcHRp
b24oZXhjZXB0aW9uX3R5cGVfdCB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNh
c2UgRVhDX0JBRF9BQ0NFU1M6IHJldHVybiBTaWduYWw6OlNlZ1Y7CisgICAgY2FzZSBFWENfQkFE
X0lOU1RSVUNUSU9OOiByZXR1cm4gU2lnbmFsOjpJbGw7CisgICAgY2FzZSBFWENfQlJFQUtQT0lO
VDogcmV0dXJuIFNpZ25hbDo6VHJhcDsKKyAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisgICAg
cmV0dXJuIFNpZ25hbDo6VW5rbm93bjsKK30KKworc3RhdGljIGV4Y2VwdGlvbl9tYXNrX3QgdG9N
YWNoTWFzayhTaWduYWwgc2lnbmFsKQoreworICAgIHN3aXRjaCAoc2lnbmFsKSB7CisgICAgY2Fz
ZSBTaWduYWw6OlNlZ1Y6IHJldHVybiBFWENfTUFTS19CQURfQUNDRVNTOworICAgIGNhc2UgU2ln
bmFsOjpJbGw6IHJldHVybiBFWENfTUFTS19CQURfSU5TVFJVQ1RJT047CisgICAgY2FzZSBTaWdu
YWw6OlRyYXA6IHJldHVybiBFWENfTUFTS19CUkVBS1BPSU5UOworICAgIGRlZmF1bHQ6IGJyZWFr
OworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitleHRlcm4g
IkMiIHsKKworLy8gV2UgbmVlZCB0byBpbXBsZW1lbnQgc3R1YnMgZm9yIGNhdGNoX21hY2hfZXhj
ZXB0aW9uX3JhaXNlIGFuZCBjYXRjaF9tYWNoX2V4Y2VwdGlvbl9yYWlzZV9zdGF0ZV9pZGVudGl0
eS4KKy8vIFRoZSBNaUcgZ2VuZXJhdGVkIGZpbGUgd2lsbCBmYWlsIHRvIGxpbmsgb3RoZXJ3aXNl
LCBldmVuIHRob3VnaCB3ZSBkb24ndCB1c2UgdGhlIGZ1bmN0aW9ucy4gT25seSB0aGUKKy8vIGNh
dGNoX21hY2hfZXhjZXB0aW9uX3JhaXNlX3N0YXRlIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQg
YmVjYXVzZSB3ZSBwYXNzIEVYQ0VQVElPTl9TVEFURSB0bworLy8gdGhyZWFkX3NldF9leGNlcHRp
b25fcG9ydHMuCitrZXJuX3JldHVybl90IGNhdGNoX21hY2hfZXhjZXB0aW9uX3JhaXNlKG1hY2hf
cG9ydF90LCBtYWNoX3BvcnRfdCwgbWFjaF9wb3J0X3QsIGV4Y2VwdGlvbl90eXBlX3QsIG1hY2hf
ZXhjZXB0aW9uX2RhdGFfdCwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCkKK3sKKyAgICBkYXRhTG9n
TG4oIldlIHNob3VsZCBub3QgaGF2ZSBjYWxsZWQgY2F0Y2hfZXhjZXB0aW9uX3JhaXNlKCksIHBs
ZWFzZSBmaWxlIGEgYnVnIGF0IGJ1Z3Mud2Via2l0Lm9yZyIpOworICAgIHJldHVybiBLRVJOX0ZB
SUxVUkU7Cit9CisKK2tlcm5fcmV0dXJuX3QgY2F0Y2hfbWFjaF9leGNlcHRpb25fcmFpc2Vfc3Rh
dGVfaWRlbnRpdHkobWFjaF9wb3J0X3QsIG1hY2hfcG9ydF90LCBtYWNoX3BvcnRfdCwgZXhjZXB0
aW9uX3R5cGVfdCwgbWFjaF9leGNlcHRpb25fZGF0YV90LCBtYWNoX21zZ190eXBlX251bWJlcl90
LCBpbnQqLCB0aHJlYWRfc3RhdGVfdCwgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCwgdGhyZWFkX3N0
YXRlX3QsICBtYWNoX21zZ190eXBlX251bWJlcl90KikKK3sKKyAgICBkYXRhTG9nTG4oIldlIHNo
b3VsZCBub3QgaGF2ZSBjYWxsZWQgY2F0Y2hfbWFjaF9leGNlcHRpb25fcmFpc2Vfc3RhdGVfaWRl
bnRpdHksIHBsZWFzZSBmaWxlIGEgYnVnIGF0IGJ1Z3Mud2Via2l0Lm9yZyIpOworICAgIHJldHVy
biBLRVJOX0ZBSUxVUkU7Cit9CisKK2tlcm5fcmV0dXJuX3QgY2F0Y2hfbWFjaF9leGNlcHRpb25f
cmFpc2Vfc3RhdGUoCisgICAgbWFjaF9wb3J0X3QgcG9ydCwKKyAgICBleGNlcHRpb25fdHlwZV90
IGV4Y2VwdGlvblR5cGUsCisgICAgY29uc3QgbWFjaF9leGNlcHRpb25fZGF0YV90IGV4Y2VwdGlv
bkRhdGEsCisgICAgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCBkYXRhQ291bnQsCisgICAgaW50KiBz
dGF0ZUZsYXZvciwKKyAgICBjb25zdCB0aHJlYWRfc3RhdGVfdCBpblN0YXRlLAorICAgIG1hY2hf
bXNnX3R5cGVfbnVtYmVyX3QgaW5TdGF0ZUNvdW50LAorICAgIHRocmVhZF9zdGF0ZV90IG91dFN0
YXRlLAorICAgIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QqIG91dFN0YXRlQ291bnQpCit7CisgICAg
UkVMRUFTRV9BU1NFUlQocG9ydCA9PSBleGNlcHRpb25Qb3J0KTsKKyAgICBTaWduYWwgc2lnbmFs
ID0gZnJvbU1hY2hFeGNlcHRpb24oZXhjZXB0aW9uVHlwZSk7CisgICAgUkVMRUFTRV9BU1NFUlQo
c2lnbmFsICE9IFNpZ25hbDo6VW5rbm93bik7CisKKyAgICBtZW1jcHkob3V0U3RhdGUsIGluU3Rh
dGUsIGluU3RhdGVDb3VudCAqIHNpemVvZihpblN0YXRlWzBdKSk7CisgICAgKm91dFN0YXRlQ291
bnQgPSBpblN0YXRlQ291bnQ7CisKKyNpZiBDUFUoWDg2XzY0KQorICAgIFJFTEVBU0VfQVNTRVJU
KCpzdGF0ZUZsYXZvciA9PSB4ODZfVEhSRUFEX1NUQVRFKTsKKyAgICBQbGF0Zm9ybVJlZ2lzdGVy
cyYgcmVnaXN0ZXJzID0gcmVpbnRlcnByZXRfY2FzdDx4ODZfdGhyZWFkX3N0YXRlX3QqPihvdXRT
dGF0ZSktPnV0cy50czY0OworI2VsaWYgQ1BVKFg4NikKKyAgICBSRUxFQVNFX0FTU0VSVCgqc3Rh
dGVGbGF2b3IgPT0geDg2X1RIUkVBRF9TVEFURSk7CisgICAgUGxhdGZvcm1SZWdpc3RlcnMmIHJl
Z2lzdGVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8eDg2X3RocmVhZF9zdGF0ZV90Kj4ob3V0U3RhdGUp
LT51dHMudHMzMjsKKyNlbGlmIENQVShBUk02NCkKKyAgICBSRUxFQVNFX0FTU0VSVCgqc3RhdGVG
bGF2b3IgPT0gQVJNX1RIUkVBRF9TVEFURSk7CisgICAgUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ2lz
dGVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8YXJtX3VuaWZpZWRfdGhyZWFkX3N0YXRlKj4ob3V0U3Rh
dGUpLT50c182NDsKKyNlbGlmIENQVShBUk0pCisgICAgUkVMRUFTRV9BU1NFUlQoKnN0YXRlRmxh
dm9yID09IEFSTV9USFJFQURfU1RBVEUpOworICAgIFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3Rl
cnMgPSByZWludGVycHJldF9jYXN0PGFybV91bmlmaWVkX3RocmVhZF9zdGF0ZSo+KG91dFN0YXRl
KS0+dHNfMzI7CisjZW5kaWYKKworICAgIFNpZ0luZm8gaW5mbzsKKyAgICBpZiAoc2lnbmFsID09
IFNpZ25hbDo6U2VnVikgeworICAgICAgICBBU1NFUlRfVU5VU0VEKGRhdGFDb3VudCwgZGF0YUNv
dW50ID09IDIpOworICAgICAgICBpbmZvLmZhdWx0aW5nQWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KGV4Y2VwdGlvbkRhdGFbMV0pOworICAgIH0KKworICAgIGJvb2wgZGlkSGFuZGxl
ID0gZmFsc2U7CisgICAgaGFuZGxlcnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzaWduYWwpXS0+aXRl
cmF0ZShbJl0gKGNvbnN0IFNpZ25hbEhhbmRsZXImIGhhbmRsZXIpIHsKKyAgICAgICAgU2lnbmFs
QWN0aW9uIGhhbmRsZXJSZXN1bHQgPSBoYW5kbGVyKHNpZ25hbCwgaW5mbywgcmVnaXN0ZXJzKTsK
KyAgICAgICAgZGlkSGFuZGxlIHw9IGhhbmRsZXJSZXN1bHQgPT0gU2lnbmFsQWN0aW9uOjpIYW5k
bGVkOworICAgIH0pOworCisgICAgaWYgKGRpZEhhbmRsZSkKKyAgICAgICAgcmV0dXJuIEtFUk5f
U1VDQ0VTUzsKKyAgICByZXR1cm4gS0VSTl9GQUlMVVJFOworfQorCit9OworCitzdGF0aWMgYm9v
bCB1c2VNYWNoIHsgZmFsc2UgfTsKK3ZvaWQgaGFuZGxlU2lnbmFsc1dpdGhNYWNoKCkKK3sKKyAg
ICBkZWxpdmVyTWVzc2FnZXNVc2luZ01hY2goKTsKKyAgICB1c2VNYWNoID0gdHJ1ZTsKK30KKwor
CitzdGF0aWMgU3RhdGljTG9jayB0aHJlYWRMb2NrOworZXhjZXB0aW9uX21hc2tfdCBhY3RpdmVF
eGNlcHRpb25zIHsgMCB9OwogCi1zdGF0aWMgdm9pZCBqc2NTaWduYWxIYW5kbGVyKGludCBzaWcs
IHNpZ2luZm9fdCogaW5mbywgdm9pZCogbWNvbnRleHQpCitpbmxpbmUgdm9pZCBzZXRFeGNlcHRp
b25Qb3J0cyhjb25zdCBBYnN0cmFjdExvY2tlciYsIFRocmVhZCogdGhyZWFkKQoreworICAgIGtl
cm5fcmV0dXJuX3QgcmVzdWx0ID0gdGhyZWFkX3NldF9leGNlcHRpb25fcG9ydHModGhyZWFkLT5t
YWNoVGhyZWFkKCksIGFjdGl2ZUV4Y2VwdGlvbnMsIGV4Y2VwdGlvblBvcnQsIEVYQ0VQVElPTl9T
VEFURSB8IE1BQ0hfRVhDRVBUSU9OX0NPREVTLCBNQUNISU5FX1RIUkVBRF9TVEFURSk7CisgICAg
aWYgKHJlc3VsdCAhPSBLRVJOX1NVQ0NFU1MpIHsKKyAgICAgICAgZGF0YUxvZ0xuKCJ0aHJlYWQg
c2V0IHBvcnQgZmFpbGVkIGR1ZSB0byAiLCBtYWNoX2Vycm9yX3N0cmluZyhyZXN1bHQpKTsKKyAg
ICAgICAgQ1JBU0goKTsKKyAgICB9Cit9CisKK2lubGluZSBIYXNoU2V0PFRocmVhZCo+JiBhY3Rp
dmVUaHJlYWRzKGNvbnN0IEFic3RyYWN0TG9ja2VyJikKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8SGFzaFNldDxUaHJlYWQqPj4gYWN0aXZlVGhyZWFkczsKKyAgICByZXR1cm4gYWN0aXZl
VGhyZWFkczsKK30KKwordm9pZCByZWdpc3RlclRocmVhZEZvck1hY2hFeGNlcHRpb25IYW5kbGlu
ZyhUaHJlYWQqIHRocmVhZCkKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHRocmVhZExv
Y2spOworICAgIGF1dG8gcmVzdWx0ID0gYWN0aXZlVGhyZWFkcyhsb2NrZXIpLmFkZCh0aHJlYWQp
OworCisgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICBzZXRFeGNlcHRpb25Qb3J0
cyhsb2NrZXIsIHRocmVhZCk7Cit9CisKK3ZvaWQgdW5yZWdpc3RlclRocmVhZEZvck1hY2hFeGNl
cHRpb25IYW5kbGluZyhUaHJlYWQqIHRocmVhZCkKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRM
b2NrKHRocmVhZExvY2spOworICAgIGFjdGl2ZVRocmVhZHMobG9ja2VyKS5yZW1vdmUodGhyZWFk
KTsKK30KKworI2Vsc2UKK3N0YXRpYyBjb25zdGV4cHIgYm9vbCB1c2VNYWNoID0gZmFsc2U7Cisj
ZW5kaWYgLy8gSEFWRShNQUNIX0VYQ0VQVElPTlMpCisKK3N0YXRpYyB2b2lkIGpzY1NpZ25hbEhh
bmRsZXIoaW50LCBzaWdpbmZvX3QqLCB2b2lkKik7CisKK3ZvaWQgaW5zdGFsbFNpZ25hbEhhbmRs
ZXIoU2lnbmFsIHNpZ25hbCwgU2lnbmFsSGFuZGxlciYmIGhhbmRsZXIpCit7CisgICAgQVNTRVJU
KHNpZ25hbCA8IFNpZ25hbDo6VW5rbm93bik7CisjaWYgSEFWRShNQUNIX0VYQ0VQVElPTlMpCisg
ICAgLy8gU2luY2UgbWFjaCBvbmx5IGhhcyBFWENfQkFEX0FDQ0VTUywgd2hpY2ggY292ZXJzIGJv
dGggU2VnViBhbmQgQnVzLCB3ZSBhcmJpdGFyaWx5IGNob29zZSB0byBtYWtlCisgICAgLy8gbWFj
aCBFWENfQkFEX0FDQ0VTU2VzIG1hcCB0byBTZWdWLgorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
anVzdCB1c2UgYSBzaW5nbGUgU2lnbmFsOjpCYWRBY2Nlc3MgdmFsdWUgaW5zdGVhZCBvZiBTZWdW
L0J1cy4KKyAgICAvLyBTZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNzIwNjMKKyAgICBpZiAoc2lnbmFsID09IFNpZ25hbDo6QnVzICYmIHVzZU1hY2gpCisgICAg
ICAgIHJldHVybjsKKyAgICBBU1NFUlQoIXVzZU1hY2ggfHwgc2lnbmFsICE9IFNpZ25hbDo6VXNy
KTsKKworICAgIGlmICh1c2VNYWNoKQorICAgICAgICBzdGFydE1hY2hFeGNlcHRpb25IYW5kbGVy
VGhyZWFkKCk7CisjZW5kaWYKKworICAgIHN0ZDo6Y2FsbF9vbmNlKGluaXRpYWxpemVPbmNlRmxh
Z3Nbc3RhdGljX2Nhc3Q8c2l6ZV90PihzaWduYWwpXSwgWyZdIHsKKyAgICAgICAgaGFuZGxlcnNb
c3RhdGljX2Nhc3Q8c2l6ZV90PihzaWduYWwpXS5jb25zdHJ1Y3QoKTsKKworICAgICAgICBpZiAo
IXVzZU1hY2gpIHsKKyAgICAgICAgICAgIHN0cnVjdCBzaWdhY3Rpb24gYWN0aW9uOworICAgICAg
ICAgICAgYWN0aW9uLnNhX3NpZ2FjdGlvbiA9IGpzY1NpZ25hbEhhbmRsZXI7CisgICAgICAgICAg
ICBhdXRvIHJlc3VsdCA9IHNpZ2ZpbGxzZXQoJmFjdGlvbi5zYV9tYXNrKTsKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKCFyZXN1bHQpOworICAgICAgICAgICAgYWN0aW9uLnNhX2ZsYWdzID0g
U0FfU0lHSU5GTzsKKyAgICAgICAgICAgIHJlc3VsdCA9IHNpZ2FjdGlvbih0b1N5c3RlbVNpZ25h
bChzaWduYWwpLCAmYWN0aW9uLCAmb2xkQWN0aW9uc1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNpZ25h
bCldKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFyZXN1bHQpOworICAgICAgICB9CisK
KyAgICB9KTsKKworICAgIGhhbmRsZXJzW3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0tPmFk
ZChXVEZNb3ZlKGhhbmRsZXIpKTsKKworI2lmIEhBVkUoTUFDSF9FWENFUFRJT05TKQorICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2sodGhyZWFkTG9jayk7CisgICAgaWYgKHVzZU1hY2gpIHsKKyAg
ICAgICAgYWN0aXZlRXhjZXB0aW9ucyB8PSB0b01hY2hNYXNrKHNpZ25hbCk7CisKKyAgICAgICAg
Zm9yIChUaHJlYWQqIHRocmVhZCA6IGFjdGl2ZVRocmVhZHMobG9ja2VyKSkKKyAgICAgICAgICAg
IHNldEV4Y2VwdGlvblBvcnRzKGxvY2tlciwgdGhyZWFkKTsKKyAgICB9CisjZW5kaWYKK30KKwor
dm9pZCBqc2NTaWduYWxIYW5kbGVyKGludCBzaWcsIHNpZ2luZm9fdCogaW5mbywgdm9pZCogdWNv
bnRleHQpCiB7CiAgICAgU2lnbmFsIHNpZ25hbCA9IGZyb21TeXN0ZW1TaWduYWwoc2lnKTsKIApA
QCAtNjIsMTAgKzMwOCwxNiBAQCBzdGF0aWMgdm9pZCBqc2NTaWduYWxIYW5kbGVyKGludCBzaWcs
IHNpZ2luZm9fdCogaW5mbywgdm9pZCogbWNvbnRleHQpCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKKyAgICBTaWdJbmZvIHNpZ0luZm87CisgICAgaWYgKHNpZ25hbCA9PSBTaWduYWw6OlNlZ1Yg
fHwgc2lnbmFsID09IFNpZ25hbDo6QnVzKQorICAgICAgICBzaWdJbmZvLmZhdWx0aW5nQWRkcmVz
cyA9IGluZm8tPnNpX2FkZHI7CisKKyAgICBQbGF0Zm9ybVJlZ2lzdGVycyYgcmVnaXN0ZXJzID0g
cmVnaXN0ZXJzRnJvbVVDb250ZXh0KHJlaW50ZXJwcmV0X2Nhc3Q8dWNvbnRleHRfdCo+KHVjb250
ZXh0KSk7CisKICAgICBib29sIGRpZEhhbmRsZSA9IGZhbHNlOwogICAgIGJvb2wgcmVzdG9yZURl
ZmF1bHRIYW5kbGVyID0gZmFsc2U7CiAgICAgaGFuZGxlcnNbc3RhdGljX2Nhc3Q8c2l6ZV90Pihz
aWduYWwpXS0+aXRlcmF0ZShbJl0gKGNvbnN0IFNpZ25hbEhhbmRsZXImIGhhbmRsZXIpIHsKLSAg
ICAgICAgc3dpdGNoIChoYW5kbGVyKHNpZywgaW5mbywgbWNvbnRleHQpKSB7CisgICAgICAgIHN3
aXRjaCAoaGFuZGxlcihzaWduYWwsIHNpZ0luZm8sIHJlZ2lzdGVycykpIHsKICAgICAgICAgY2Fz
ZSBTaWduYWxBY3Rpb246OkhhbmRsZWQ6CiAgICAgICAgICAgICBkaWRIYW5kbGUgPSB0cnVlOwog
ICAgICAgICAgICAgYnJlYWs7CkBAIC04NSwxMyArMzM3LDEzIEBAIHN0YXRpYyB2b2lkIGpzY1Np
Z25hbEhhbmRsZXIoaW50IHNpZywgc2lnaW5mb190KiBpbmZvLCB2b2lkKiBtY29udGV4dCkKICAg
ICBzdHJ1Y3Qgc2lnYWN0aW9uJiBvbGRBY3Rpb24gPSBvbGRBY3Rpb25zW3N0YXRpY19jYXN0PHNp
emVfdD4oc2lnbmFsKV07CiAgICAgaWYgKHNpZ25hbCA9PSBTaWduYWw6OlVzcikgewogICAgICAg
ICBpZiAob2xkQWN0aW9uLnNhX3NpZ2FjdGlvbikKLSAgICAgICAgICAgIG9sZEFjdGlvbi5zYV9z
aWdhY3Rpb24oc2lnLCBpbmZvLCBtY29udGV4dCk7CisgICAgICAgICAgICBvbGRBY3Rpb24uc2Ff
c2lnYWN0aW9uKHNpZywgaW5mbywgdWNvbnRleHQpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CiAgICAgaWYgKCFkaWRIYW5kbGUpIHsKICAgICAgICAgaWYgKG9sZEFjdGlvbi5zYV9zaWdhY3Rp
b24pIHsKLSAgICAgICAgICAgIG9sZEFjdGlvbi5zYV9zaWdhY3Rpb24oc2lnLCBpbmZvLCBtY29u
dGV4dCk7CisgICAgICAgICAgICBvbGRBY3Rpb24uc2Ffc2lnYWN0aW9uKHNpZywgaW5mbywgdWNv
bnRleHQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTEwMCwyNCArMzUy
LDYgQEAgc3RhdGljIHZvaWQganNjU2lnbmFsSGFuZGxlcihpbnQgc2lnLCBzaWdpbmZvX3QqIGlu
Zm8sIHZvaWQqIG1jb250ZXh0KQogICAgIH0KIH0KIAotdm9pZCBpbnN0YWxsU2lnbmFsSGFuZGxl
cihTaWduYWwgc2lnbmFsLCBTaWduYWxIYW5kbGVyJiYgaGFuZGxlcikKLXsKLSAgICBBU1NFUlQo
c2lnbmFsIDwgU2lnbmFsOjpVbmtub3duKTsKLSAgICBzdGQ6OmNhbGxfb25jZShpbml0aWFsaXpl
T25jZUZsYWdzW3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0sIFsmXSB7Ci0gICAgICAgIGhh
bmRsZXJzW3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0uY29uc3RydWN0KCk7Ci0KLSAgICAg
ICAgc3RydWN0IHNpZ2FjdGlvbiBhY3Rpb247Ci0gICAgICAgIGFjdGlvbi5zYV9zaWdhY3Rpb24g
PSBqc2NTaWduYWxIYW5kbGVyOwotICAgICAgICBhdXRvIHJlc3VsdCA9IHNpZ2ZpbGxzZXQoJmFj
dGlvbi5zYV9tYXNrKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXJlc3VsdCk7Ci0gICAgICAg
IGFjdGlvbi5zYV9mbGFncyA9IFNBX1NJR0lORk87Ci0gICAgICAgIHJlc3VsdCA9IHNpZ2FjdGlv
bih0b1N5c3RlbVNpZ25hbChzaWduYWwpLCAmYWN0aW9uLCAmb2xkQWN0aW9uc1tzdGF0aWNfY2Fz
dDxzaXplX3Q+KHNpZ25hbCldKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXJlc3VsdCk7Ci0g
ICAgfSk7Ci0KLSAgICBoYW5kbGVyc1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNpZ25hbCldLT5hZGQo
V1RGTW92ZShoYW5kbGVyKSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdURgogCiAjZW5kaWYgLy8g
VVNFKFBUSFJFQURTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGhyZWFkcy9TaWduYWxz
LmggYi9Tb3VyY2UvV1RGL3d0Zi90aHJlYWRzL1NpZ25hbHMuaAppbmRleCAxZTRlYjQ2ZWFhNzc0
YTFlZTg5ZjZmYjJkYWVmMzMyNjhjZTU2Nzc5Li5hODE4ZTViNTIwZTcwZTlmM2JjZjdhYzE0NGNh
NTI4MjZjMjkyNGU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90aHJlYWRzL1NpZ25hbHMu
aAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90aHJlYWRzL1NpZ25hbHMuaApAQCAtMjksNiArMjksNyBA
QAogCiAjaW5jbHVkZSA8c2lnbmFsLmg+CiAjaW5jbHVkZSA8d3RmL0Z1bmN0aW9uLmg+CisjaW5j
bHVkZSA8d3RmL1BsYXRmb3JtUmVnaXN0ZXJzLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCkBAIC03
OSw3ICs4MCwxMSBAQCBlbnVtIGNsYXNzIFNpZ25hbEFjdGlvbiB7CiAgICAgRm9yY2VEZWZhdWx0
CiB9OwogCi11c2luZyBTaWduYWxIYW5kbGVyID0gRnVuY3Rpb248U2lnbmFsQWN0aW9uKGludCwg
c2lnaW5mb190Kiwgdm9pZCopPjsKK3N0cnVjdCBTaWdJbmZvIHsKKyAgICB2b2lkKiBmYXVsdGlu
Z0FkZHJlc3MgeyAwIH07Cit9OworCit1c2luZyBTaWduYWxIYW5kbGVyID0gRnVuY3Rpb248U2ln
bmFsQWN0aW9uKFNpZ25hbCwgU2lnSW5mbyYsIFBsYXRmb3JtUmVnaXN0ZXJzJik+OwogCiAvLyBD
YWxsIHRoaXMgbWV0aG9kIHdoZW5ldmVyIHlvdSB3YW50IHRvIGluc3RhbGwgYSBzaWduYWwgaGFu
ZGxlci4gSXQncyBvayB0byBjYWxsIHRoaXMgZnVuY3Rpb24gbGF6aWx5LgogLy8gTm90ZTogWW91
ciBzaWduYWwgaGFuZGxlciB3aWxsIGJlIGNhbGxlZCBldmVyeSB0aW1lIHRoZSBoYW5kbGVyIGZv
ciB0aGUgZGVzaXJlZCBzaWduYWwgaXMgY2FsbGVkLgpAQCAtODcsOSArOTIsMjUgQEAgdXNpbmcg
U2lnbmFsSGFuZGxlciA9IEZ1bmN0aW9uPFNpZ25hbEFjdGlvbihpbnQsIHNpZ2luZm9fdCosIHZv
aWQqKT47CiAvLyBUaGlzIGZ1bmN0aW9uIGlzIGN1cnJlbnRseSBhIG9uZSB3YXkgc3RyZWV0IGku
ZS4gb25jZSBpbnN0YWxsZWQsIGEgc2lnbmFsIGhhbmRsZXIgY2Fubm90IGJlIHVuaW5zdGFsbGVk
Lgogdm9pZCBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWwsIFNpZ25hbEhhbmRsZXImJik7CiAK
KworI2lmIEhBVkUoTUFDSF9FWENFUFRJT05TKQorY2xhc3MgVGhyZWFkOwordm9pZCByZWdpc3Rl
clRocmVhZEZvck1hY2hFeGNlcHRpb25IYW5kbGluZyhUaHJlYWQqKTsKK3ZvaWQgdW5yZWdpc3Rl
clRocmVhZEZvck1hY2hFeGNlcHRpb25IYW5kbGluZyhUaHJlYWQqKTsKKwordm9pZCBoYW5kbGVT
aWduYWxzV2l0aE1hY2goKTsKKyNlbmRpZiAvLyBIQVZFKE1BQ0hfRVhDRVBUSU9OUykKKwogfSAv
LyBuYW1lc3BhY2UgV1RGCiAKKyNpZiBIQVZFKE1BQ0hfRVhDRVBUSU9OUykKK3VzaW5nIFdURjo6
cmVnaXN0ZXJUaHJlYWRGb3JNYWNoRXhjZXB0aW9uSGFuZGxpbmc7Cit1c2luZyBXVEY6OnVucmVn
aXN0ZXJUaHJlYWRGb3JNYWNoRXhjZXB0aW9uSGFuZGxpbmc7Cit1c2luZyBXVEY6OmhhbmRsZVNp
Z25hbHNXaXRoTWFjaDsKKyNlbmRpZiAvLyBIQVZFKE1BQ0hfRVhDRVBUSU9OUykKKwogdXNpbmcg
V1RGOjpTaWduYWw7Cit1c2luZyBXVEY6OlNpZ0luZm87CiB1c2luZyBXVEY6OnRvU3lzdGVtU2ln
bmFsOwogdXNpbmcgV1RGOjpmcm9tU3lzdGVtU2lnbmFsOwogdXNpbmcgV1RGOjpTaWduYWxBY3Rp
b247CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXgg
MTdmOWYwMTExMzEwMmE4YTRiMTdmY2U0YWYxZDk1ZWI4NjAwNjlkYi4uMzU1MWQ3ZjIwNzA3NmZj
N2NlYTI1ZDIwNjI3MjI1OWRhNDQ3MjhhZiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisr
KyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDE3LTA1LTExICBLZWl0aCBN
aWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBNYWNoIGV4Y2Vw
dGlvbnMgaW5zdGVhZCBvZiBzaWduYWxzIHdoZXJlIHBvc3NpYmxlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzE4NjUKKworICAgICAgICBSZXZpZXdl
ZCBieSBNYXJrIExhbS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1RocmVh
ZE1lc3NhZ2VzLmNwcDoKKyAgICAgICAgKHJ1blRocmVhZE1lc3NhZ2VUZXN0KToKKyAgICAgICAg
KFRFU1QpOgorCiAyMDE3LTA1LTA5ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgUmVtb3ZlIHN1cHBvcnQgZm9yIGxlZ2FjeSBOb3RpZmljYXRpb25zCmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9UaHJlYWRNZXNzYWdlcy5jcHAgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9UaHJlYWRNZXNzYWdlcy5jcHAKaW5kZXggZDYzZTli
ZjFlNzUwNjhiNmMxYTdlN2U2ZThiNjdjNGViMDUxNTg4Mi4uZTZhNTc4OTRiYjUxNmZlMWNlNzEz
ZDA3YmYxOGYwNzA2ZWZhOTM3YyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XVEYvVGhyZWFkTWVzc2FnZXMuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V1RGL1RocmVhZE1lc3NhZ2VzLmNwcApAQCAtNTAsNyArNTAsNyBAQCBzdGF0aWMgdm9pZCBydW5U
aHJlYWRNZXNzYWdlVGVzdCh1bnNpZ25lZCBudW1TZW5kZXJzLCB1bnNpZ25lZCBudW1NZXNzYWdl
cykKICAgICBmb3IgKHVuc2lnbmVkIHNlbmRlcklEID0gMDsgc2VuZGVySUQgPCBudW1TZW5kZXJz
OyArK3NlbmRlcklEKSB7CiAgICAgICAgIHNlbmRlclRocmVhZHNbc2VuZGVySURdID0gVGhyZWFk
OjpjcmVhdGUoIlRocmVhZE1lc3NhZ2Ugc2VuZGVyIiwgW3NlbmRlcklELCBudW1NZXNzYWdlcywg
cmVjZWl2ZXJUaHJlYWQsICZtZXNzYWdlc1J1biwgJmhhbmRsZXJzUnVuXSAoKSB7CiAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtTWVzc2FnZXM7ICsraSkgewotICAgICAg
ICAgICAgICAgIGF1dG8gcmVzdWx0ID0gc2VuZE1lc3NhZ2UoKnJlY2VpdmVyVGhyZWFkLmdldCgp
LCBbc2VuZGVySUQsICZoYW5kbGVyc1J1bl0gKHNpZ2luZm9fdCosIHVjb250ZXh0X3QqKSB7Cisg
ICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBzZW5kTWVzc2FnZSgqcmVjZWl2ZXJUaHJlYWQu
Z2V0KCksIFtzZW5kZXJJRCwgJmhhbmRsZXJzUnVuXSAoUGxhdGZvcm1SZWdpc3RlcnMmKSB7CiAg
ICAgICAgICAgICAgICAgICAgIGhhbmRsZXJzUnVuW3NlbmRlcklEXSsrOwogICAgICAgICAgICAg
ICAgIH0pOwogICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKHJlc3VsdCA9PSBXVEY6Ok1lc3Nh
Z2VTdGF0dXM6Ok1lc3NhZ2VSYW4pOwpAQCAtOTUsNyArOTUsNyBAQCBwdWJsaWM6CiBURVNUKFRo
cmVhZE1lc3NhZ2UsIFNpZ25hbHNXb3JrT25FeGl0KQogewogICAgIHN0YXRpYyBib29sIGhhbmRs
ZXJSYW4gPSBmYWxzZTsKLSAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWw6OlVzciwgW10g
KGludCwgc2lnaW5mb190Kiwgdm9pZCopIC0+IFNpZ25hbEFjdGlvbiB7CisgICAgaW5zdGFsbFNp
Z25hbEhhbmRsZXIoU2lnbmFsOjpVc3IsIFtdIChTaWduYWwsIFNpZ0luZm8mLCBQbGF0Zm9ybVJl
Z2lzdGVycyYpIC0+IFNpZ25hbEFjdGlvbiB7CiAgICAgICAgIGRhdGFMb2dMbigiaGVyZSIpOwog
ICAgICAgICBoYW5kbGVyUmFuID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuIFNpZ25hbEFjdGlvbjo6
SGFuZGxlZDsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309980</attachid>
            <date>2017-05-12 17:49:54 -0700</date>
            <delta_ts>2017-05-12 18:30:17 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-171865-20170512174952.patch</filename>
            <type>text/plain</type>
            <size>51257</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE2Njc3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
YzIyOWE0ZjkxMDMxZGZlOTU1YTQxMGIyMDI0Njc2ZTFmM2NkZWIxLi5kOTRlMDUyODk0ZTQ5MDI0
NzE0YmIzNTUwYzkwMWNkNTZhNTNhMWUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MCBAQAorMjAxNy0wNS0xMiAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBVc2UgTWFjaCBleGNlcHRpb25zIGluc3RlYWQgb2Ygc2lnbmFscyB3
aGVyZSBwb3NzaWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTcxODY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTWFyayBMYW0uCisKKyAgICAgICAg
VGhpcyBwYXRjaCBhZGRzIHNvbWUgbmV3IEpTQyBvcHRpb25zLiBUaGUgZmlyc3QgaXMgYW4gb3B0
aW9uIHRoYXQKKyAgICAgICAgZW5hYmxlcyBvciBkaXNhYmxlcyB3ZWIgYXNzZW1ibHkgdGllciB1
cC4gVGhlIHNlY29uZCBjb250cm9scworICAgICAgICB3aGV0aGVyIG9yIG5vdCB3ZSB1c2UgbWFj
aCBleGNlcHRpb25zICh3aGVyZSBhdmFpbGFibGUpLgorCisgICAgICAgICogQVBJL3Rlc3RzL0V4
ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3BwOgorICAgICAgICAoZGlzcGF0Y2hUZXJtaXRhdGVDYWxs
YmFjayk6CisgICAgICAgICh0ZXN0RXhlY3V0aW9uVGltZUxpbWl0KToKKyAgICAgICAgKiBydW50
aW1lL0pTTG9jay5jcHA6CisgICAgICAgIChKU0M6OkpTTG9jazo6ZGlkQWNxdWlyZUxvY2spOgor
ICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5jcHA6CisgICAgICAgIChKU0M6Om92ZXJyaWRlRGVm
YXVsdHMpOgorICAgICAgICAoSlNDOjpPcHRpb25zOjppbml0aWFsaXplKToKKyAgICAgICAgKiBy
dW50aW1lL09wdGlvbnMuaDoKKyAgICAgICAgKiBydW50aW1lL1ZNVHJhcHMuY3BwOgorICAgICAg
ICAoSlNDOjpTaWduYWxDb250ZXh0OjpTaWduYWxDb250ZXh0KToKKyAgICAgICAgKEpTQzo6U2ln
bmFsQ29udGV4dDo6YWRqdXN0UENUb1BvaW50VG9UcmFwcGluZ0luc3RydWN0aW9uKToKKyAgICAg
ICAgKEpTQzo6aW5zdGFsbFNpZ25hbEhhbmRsZXIpOgorICAgICAgICAoSlNDOjpWTVRyYXBzOjpT
aWduYWxTZW5kZXI6OnNlbmQpOgorICAgICAgICAqIHRvb2xzL1NpZ2lsbENyYXNoQW5hbHl6ZXIu
Y3BwOgorICAgICAgICAoSlNDOjpTaWduYWxDb250ZXh0OjpTaWduYWxDb250ZXh0KToKKyAgICAg
ICAgKEpTQzo6U2lnbmFsQ29udGV4dDo6ZHVtcCk6CisgICAgICAgIChKU0M6Omluc3RhbGxDcmFz
aEhhbmRsZXIpOgorICAgICAgICAqIHdhc20vV2FzbUJCUVBsYW4uY3BwOgorICAgICAgICAoSlND
OjpXYXNtOjpCQlFQbGFuOjpjb21waWxlRnVuY3Rpb25zKToKKyAgICAgICAgKiB3YXNtL1dhc21G
YXVsdFNpZ25hbEhhbmRsZXIuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjp0cmFwSGFuZGxlcik6
CisgICAgICAgIChKU0M6Oldhc206OmVuYWJsZUZhc3RNZW1vcnkpOgorICAgICAgICAqIHdhc20v
V2FzbU1hY2hpbmVUaHJlYWRzLmNwcDoKKyAgICAgICAgKEpTQzo6V2FzbTo6cmVzZXRJbnN0cnVj
dGlvbkNhY2hlT25BbGxUaHJlYWRzKToKKwogMjAxNy0wNS0xMSAgTWFyayBMYW0gIDxtYXJrLmxh
bUBhcHBsZS5jb20+CiAKICAgICAgICAgV29ya2VyVGhyZWFkOjpzdG9wKCkgc2hvdWxkIGNhbGwg
c2NoZWR1bGVFeGVjdXRpb25UZXJtaW5hdGlvbigpIGxhc3QuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGVjZGRiMzNmYmVkNTIx
MTFiYzA3MTk1ZDZjMDhmZTQwNmIyYzFhMzUuLmYxNDUyMTA3MGI5YTY0NzZjMmI0ZDk0NGMxYTJi
Mzc2ZGIwMDg3NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjIgQEAKKzIwMTctMDUtMTIgIEtlaXRoIE1pbGxl
ciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIE1hY2ggZXhjZXB0aW9u
cyBpbnN0ZWFkIG9mIHNpZ25hbHMgd2hlcmUgcG9zc2libGUKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MTg2NQorCisgICAgICAgIFJldmlld2VkIGJ5
IE1hcmsgTGFtLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZW5hYmxlcyB1c2luZyBtYWNoIGV4Y2Vw
dGlvbnMgb24gZGFyd2luLiBUaGUgd2F5IHRoZQorICAgICAgICBtYWNoIGV4Y2VwdGlvbiBhcGkg
d29ya3MgaXMgdGhhdCB3ZSBjcmVhdGUgYSBtYWNoIHBvcnQsIHdoaWNoIGlzCisgICAgICAgIGxp
a2UgYSBmaWxlIGRlc2NyaXB0b3IuICBXZSB0aGVuIHdhaXQgZm9yIGEgbWVzc2FnZSB0byBhcnJp
dmUgb24KKyAgICAgICAgdGhhdCBwb3J0IGluIGEgdGhyZWFkLiBXaGVuIGFub3RoZXIgdGhyZWFk
IHJhaXNlcyBhbiBleGNlcHRpb24gKHNheQorICAgICAgICBkdWUgdG8gYSBiYWQgbWVtb3J5IGFj
Y2VzcykgdGhlIE9TIHNlbmRzIG91ciB0aHJlYWQgYSBtZXNzYWdlLiBUaGUKKyAgICAgICAgcGF5
bG9hZCBvZiB0aGF0IG1lc3NhZ2UgaXMgdGhlIHJlZ2lzdGVyIGZpbGUgb2YgdGhlIGNyYXNoaW5n
CisgICAgICAgIHRocmVhZC4gV2UgdGhlbiBjYWxsIG91ciBjdXN0b20gaGFuZGxlcnMgdGhhdCBj
aGFuZ2UgdGhlIHN0YXRlIGFzCisgICAgICAgIG5lZWRlZC4gSW4gb3JkZXIgdG8gcmVzdGFydCB0
aGUgdGhyZWFkIHdlIHNlbmQgYSBwYXlsb2FkIGJhY2sgdG8KKyAgICAgICAgdGhlIE9TIHdpdGgg
YW4gdXBkYXRlZCByZWdpc3RlciBmaWxlIGFsb25nIHdpdGggYSBzdWNjZXNzIG1lc3NhZ2UKKyAg
ICAgICAgaGVhZGVyLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBtYWtlcyB0aHJlYWQgbWVz
c2FnZXMgd29yayB3aXRob3V0IHNpZ25hbHMgYnkKKyAgICAgICAgc2ltcGx5IHN1c3BlbmRpbmcg
dGhlIHRocmVhZCwgYW5kIHRoZW4gcnVubmluZyB0aGUgbWVzc2FnZSBhdCB0aGF0CisgICAgICAg
IHRpbWUuCisKKyAgICAgICAgWW91IGNhbiByZWFkIG1vcmUgYWJvdXQgbWFjaCBleGNlcHRpb25z
IGhlcmU6CisgICAgICAgIGh0dHA6Ly93d3cuY3MuY211LmVkdS9hZnMvY3MvcHJvamVjdC9tYWNo
L3B1YmxpYy9kb2MvdW5wdWJsaXNoZWQvZXhjZXB0aW9uLnBzCisgICAgICAgIGFuZCB0aGUgTWFj
aCBpbnRlcmZhY2UgR2VuZXJhdG9yIChNaUcpIGhlcmU6CisgICAgICAgIGh0dHA6Ly93d3cuY3Mu
Y211LmVkdS9hZnMvY3MvcHJvamVjdC9tYWNoL3B1YmxpYy9kb2MvdW5wdWJsaXNoZWQvbWlnLnBz
CisKKyAgICAgICAgKiBDb25maWd1cmF0aW9ucy9XVEYueGNjb25maWc6CisgICAgICAgICogV1RG
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6Cisg
ICAgICAgICogd3RmL1BsYXRmb3JtUmVnaXN0ZXJzLmg6CisgICAgICAgIChXVEY6OnJlZ2lzdGVy
c0Zyb21VQ29udGV4dCk6CisgICAgICAgICogd3RmL1N0YWNrQm91bmRzLmg6CisgICAgICAgIChX
VEY6OlN0YWNrQm91bmRzOjpTdGFja0JvdW5kcyk6CisgICAgICAgICogd3RmL1RocmVhZEhvbGRl
ci5jcHA6CisgICAgICAgIChXVEY6OlRocmVhZEhvbGRlcjo6flRocmVhZEhvbGRlcik6CisgICAg
ICAgICogd3RmL1RocmVhZE1lc3NhZ2UuY3BwOgorICAgICAgICAoV1RGOjpzZW5kTWVzc2FnZVVz
aW5nU2lnbmFsKToKKyAgICAgICAgKFdURjo6c2VuZE1lc3NhZ2VVc2luZ01hY2gpOgorICAgICAg
ICAoV1RGOjpkZWxpdmVyTWVzc2FnZXNVc2luZ01hY2gpOgorICAgICAgICAoV1RGOjpzZW5kTWVz
c2FnZVNjb3BlZCk6CisgICAgICAgICogd3RmL1RocmVhZE1lc3NhZ2UuaDoKKyAgICAgICAgKFdU
Rjo6c2VuZE1lc3NhZ2UpOgorICAgICAgICAqIHd0Zi9UaHJlYWRpbmcuaDoKKyAgICAgICAgKFdU
Rjo6VGhyZWFkOjptYWNoVGhyZWFkKToKKyAgICAgICAgKiB3dGYvbWFjL01hY2hFeGNlcHRpb25z
LmRlZnM6IENvcGllZCBmcm9tIFNvdXJjZS9XVEYvd3RmL1RocmVhZE1lc3NhZ2UuaC4KKyAgICAg
ICAgKiB3dGYvdGhyZWFkcy9TaWduYWxzLmNwcDoKKyAgICAgICAgKFdURjo6c3RhcnRNYWNoRXhj
ZXB0aW9uSGFuZGxlclRocmVhZCk6CisgICAgICAgIChXVEY6OmZyb21NYWNoRXhjZXB0aW9uKToK
KyAgICAgICAgKFdURjo6dG9NYWNoTWFzayk6CisgICAgICAgIChXVEY6OmhhbmRsZVNpZ25hbHNX
aXRoTWFjaCk6CisgICAgICAgIChXVEY6OnNldEV4Y2VwdGlvblBvcnRzKToKKyAgICAgICAgKFdU
Rjo6YWN0aXZlVGhyZWFkcyk6CisgICAgICAgIChXVEY6OnJlZ2lzdGVyVGhyZWFkRm9yTWFjaEV4
Y2VwdGlvbkhhbmRsaW5nKToKKyAgICAgICAgKFdURjo6dW5yZWdpc3RlclRocmVhZEZvck1hY2hF
eGNlcHRpb25IYW5kbGluZyk6CisgICAgICAgIChXVEY6Omluc3RhbGxTaWduYWxIYW5kbGVyKToK
KyAgICAgICAgKFdURjo6anNjU2lnbmFsSGFuZGxlcik6CisgICAgICAgICogd3RmL3RocmVhZHMv
U2lnbmFscy5oOgorCiAyMDE3LTA1LTA5ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgUmVtb3ZlIHN1cHBvcnQgZm9yIGxlZ2FjeSBOb3RpZmljYXRpb25zCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0V4ZWN1dGlvblRpbWVMaW1pdFRl
c3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS90ZXN0cy9FeGVjdXRpb25UaW1lTGlt
aXRUZXN0LmNwcAppbmRleCBkNWU1MzI0M2I3OGRmNzUxMzQyYWQ4ZDM5MGE0YjA0MTNkOWVlZjll
Li5lNTAyNTdjOTMzZjJiZmIwMzc2MTFkODQwNzRiYmY3ZWQ4MTczYjA0IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL3Rlc3RzL0V4ZWN1dGlvblRpbWVMaW1pdFRlc3QuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvdGVzdHMvRXhlY3V0aW9uVGltZUxpbWl0
VGVzdC5jcHAKQEAgLTMwLDEwICszMCwxOCBAQAogI2luY2x1ZGUgIkpTQ29udGV4dFJlZlByaXZh
dGUuaCIKICNpbmNsdWRlICJKYXZhU2NyaXB0Q29yZS5oIgogI2luY2x1ZGUgIk9wdGlvbnMuaCIK
KwogI2luY2x1ZGUgPGNocm9ubz4KKyNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgorI2luY2x1ZGUg
PHd0Zi9Db25kaXRpb24uaD4KICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNsdWRl
IDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAorI2lm
IEhBVkUoTUFDSF9FWENFUFRJT05TKQorI2luY2x1ZGUgPGRpc3BhdGNoL2Rpc3BhdGNoLmg+Cisj
ZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIHN0ZDo6Y2hyb25vOwogdXNpbmcgSlNDOjpPcHRpb25z
OwogCkBAIC03Nyw2ICs4NSwxNSBAQCBzdGF0aWMgYm9vbCBleHRlbmRUZXJtaW5hdGVDYWxsYmFj
ayhKU0NvbnRleHRSZWYgY3R4LCB2b2lkKikKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorI2lmIEhB
VkUoTUFDSF9FWENFUFRJT05TKQorYm9vbCBkaXNwYXRjaFRlcm1pbmF0ZUNhbGxiYWNrQ2FsbGVk
ID0gZmFsc2U7CitzdGF0aWMgYm9vbCBkaXNwYXRjaFRlcm1pdGF0ZUNhbGxiYWNrKEpTQ29udGV4
dFJlZiwgdm9pZCopCit7CisgICAgZGlzcGF0Y2hUZXJtaW5hdGVDYWxsYmFja0NhbGxlZCA9IHRy
dWU7CisgICAgcmV0dXJuIHRydWU7Cit9CisjZW5kaWYKKwogc3RydWN0IFRpZXJPcHRpb25zIHsK
ICAgICBjb25zdCBjaGFyKiB0aWVyOwogICAgIHVuc2lnbmVkIHRpbWVMaW1pdEFkanVzdG1lbnRN
aWxsaXM7CkBAIC0zNjUsNiArMzgyLDY1IEBAIGludCB0ZXN0RXhlY3V0aW9uVGltZUxpbWl0KCkK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogCisjaWYgSEFWRShNQUNIX0VYQ0VQVElPTlMpCisg
ICAgICAgIC8qIFRlc3Qgc2NyaXB0IHRpbWVvdXQgZnJvbSBkaXNwYXRjaCBxdWV1ZTogKi8KKyAg
ICAgICAgdGltZUxpbWl0ID0gKDEwMCArIHRpZXJBZGp1c3RtZW50TWlsbGlzKSAvIDEwMDAuMDsK
KyAgICAgICAgSlNDb250ZXh0R3JvdXBTZXRFeGVjdXRpb25UaW1lTGltaXQoY29udGV4dEdyb3Vw
LCB0aW1lTGltaXQsIGRpc3BhdGNoVGVybWl0YXRlQ2FsbGJhY2ssIDApOworICAgICAgICB7Cisg
ICAgICAgICAgICB1bnNpZ25lZCB0aW1lQWZ0ZXJXYXRjaGRvZ1Nob3VsZEhhdmVGaXJlZCA9IDMw
MCArIHRpZXJBZGp1c3RtZW50TWlsbGlzOworCisgICAgICAgICAgICBTdHJpbmdCdWlsZGVyIHNj
cmlwdEJ1aWxkZXI7CisgICAgICAgICAgICBzY3JpcHRCdWlsZGVyLmFwcGVuZExpdGVyYWwoImZ1
bmN0aW9uIGZvbygpIHsgdmFyIHN0YXJ0VGltZSA9IGN1cnJlbnRDUFVUaW1lKCk7IHdoaWxlICh0
cnVlKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDsgaSsrKTsgaWYgKGN1cnJlbnRDUFVUaW1l
KCkgLSBzdGFydFRpbWUgPiAiKTsKKyAgICAgICAgICAgIHNjcmlwdEJ1aWxkZXIuYXBwZW5kTnVt
YmVyKHRpbWVBZnRlcldhdGNoZG9nU2hvdWxkSGF2ZUZpcmVkIC8gMTAwMC4wKTsKKyAgICAgICAg
ICAgIHNjcmlwdEJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiKSBicmVhazsgfSB9IGZvbygpOyIpOwor
CisgICAgICAgICAgICBKU1N0cmluZ1JlZiBzY3JpcHQgPSBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZyhzY3JpcHRCdWlsZGVyLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAg
ICAgICBleGNlcHRpb24gPSBudWxscHRyOworICAgICAgICAgICAgZGlzcGF0Y2hUZXJtaW5hdGVD
YWxsYmFja0NhbGxlZCA9IGZhbHNlOworCisgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGRvIHRo
aXMgc2luY2UgYmxvY2tzIGNhbiBvbmx5IGNhcHR1cmUgdGhpbmdzIGFzIGNvbnN0LgorICAgICAg
ICAgICAgSlNHbG9iYWxDb250ZXh0UmVmJiBjb250ZXh0UmVmID0gY29udGV4dDsKKyAgICAgICAg
ICAgIEpTU3RyaW5nUmVmJiBzY3JpcHRSZWYgPSBzY3JpcHQ7CisgICAgICAgICAgICBKU1ZhbHVl
UmVmJiBleGNlcHRpb25SZWYgPSBleGNlcHRpb247CisKKyAgICAgICAgICAgIExvY2sgc3luY0xv
Y2s7CisgICAgICAgICAgICBMb2NrJiBzeW5jTG9ja1JlZiA9IHN5bmNMb2NrOworICAgICAgICAg
ICAgQ29uZGl0aW9uIHN5bmNocm9uaXplOworICAgICAgICAgICAgQ29uZGl0aW9uJiBzeW5jaHJv
bml6ZVJlZiA9IHN5bmNocm9uaXplOworICAgICAgICAgICAgYm9vbCBkaWRTeW5jaHJvbml6ZSA9
IGZhbHNlOworICAgICAgICAgICAgYm9vbCYgZGlkU3luY2hyb25pemVSZWYgPSBkaWRTeW5jaHJv
bml6ZTsKKworICAgICAgICAgICAgc3RkOjpjaHJvbm86Om1pY3Jvc2Vjb25kcyBzdGFydFRpbWU7
CisgICAgICAgICAgICBzdGQ6OmNocm9ubzo6bWljcm9zZWNvbmRzIGVuZFRpbWU7CisKKyAgICAg
ICAgICAgIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMmIHN0YXJ0VGltZVJlZiA9IHN0YXJ0VGlt
ZTsKKyAgICAgICAgICAgIHN0ZDo6Y2hyb25vOjptaWNyb3NlY29uZHMmIGVuZFRpbWVSZWYgPSBl
bmRUaW1lOworCisgICAgICAgICAgICBkaXNwYXRjaF9ncm91cF90IGdyb3VwID0gZGlzcGF0Y2hf
Z3JvdXBfY3JlYXRlKCk7CisgICAgICAgICAgICBkaXNwYXRjaF9ncm91cF9hc3luYyhncm91cCwg
ZGlzcGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZSgwLCAwKSwgXnsKKyAgICAgICAgICAgICAgICBzdGFy
dFRpbWVSZWYgPSBjdXJyZW50Q1BVVGltZSgpOworICAgICAgICAgICAgICAgIEpTRXZhbHVhdGVT
Y3JpcHQoY29udGV4dFJlZiwgc2NyaXB0UmVmLCBudWxscHRyLCBudWxscHRyLCAxLCAmZXhjZXB0
aW9uUmVmKTsKKyAgICAgICAgICAgICAgICBlbmRUaW1lUmVmID0gY3VycmVudENQVVRpbWUoKTsK
KyAgICAgICAgICAgICAgICBhdXRvIGxvY2tlciA9IFdURjo6aG9sZExvY2soc3luY0xvY2tSZWYp
OworICAgICAgICAgICAgICAgIGRpZFN5bmNocm9uaXplUmVmID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICBzeW5jaHJvbml6ZVJlZi5ub3RpZnlBbGwoKTsKKyAgICAgICAgICAgIH0pOworCisgICAg
ICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKHN5bmNMb2NrKTsKKyAgICAgICAgICAgIHN5
bmNocm9uaXplLndhaXQoc3luY0xvY2ssIFsmXSB7IHJldHVybiBkaWRTeW5jaHJvbml6ZTsgfSk7
CisKKyAgICAgICAgICAgIGlmICgoKGVuZFRpbWUgLSBzdGFydFRpbWUpIDwgbWlsbGlzZWNvbmRz
KHRpbWVBZnRlcldhdGNoZG9nU2hvdWxkSGF2ZUZpcmVkKSkgJiYgZGlzcGF0Y2hUZXJtaW5hdGVD
YWxsYmFja0NhbGxlZCkKKyAgICAgICAgICAgICAgICBwcmludGYoIlBBU1M6ICVzIHNjcmlwdCBv
biBkaXNwYXRjaCBxdWV1ZSB0aW1lZCBvdXQgYXMgZXhwZWN0ZWQuXG4iLCB0aWVyT3B0aW9ucy50
aWVyKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlmICgoZW5kVGltZSAt
IHN0YXJ0VGltZSkgPj0gbWlsbGlzZWNvbmRzKHRpbWVBZnRlcldhdGNoZG9nU2hvdWxkSGF2ZUZp
cmVkKSkKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJGQUlMOiAlcyBzY3JpcHQgb24gZGlz
cGF0Y2ggcXVldWUgZGlkIG5vdCB0aW1lIG91dCBhcyBleHBlY3RlZC5cbiIsIHRpZXJPcHRpb25z
LnRpZXIpOworICAgICAgICAgICAgICAgIGlmICghc2hvdWxkVGVybWluYXRlQ2FsbGJhY2tXYXND
YWxsZWQpCisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiRkFJTDogJXMgc2NyaXB0IG9uIGRp
c3BhdGNoIHF1ZXVlIHRpbWVvdXQgY2FsbGJhY2sgd2FzIG5vdCBjYWxsZWQuXG4iLCB0aWVyT3B0
aW9ucy50aWVyKTsKKyAgICAgICAgICAgICAgICBmYWlsZWQgPSB0cnVlOworICAgICAgICAgICAg
fQorICAgICAgICB9CisjZW5kaWYKKwogICAgICAgICBKU0dsb2JhbENvbnRleHRSZWxlYXNlKGNv
bnRleHQpOwogCiAgICAgICAgIE9wdGlvbnM6OnNldE9wdGlvbnMoc2F2ZWRPcHRpb25zQnVpbGRl
ci50b1N0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0xvY2suY3BwCmluZGV4IGMxNzVhZTBjNDgyZWQyN2JkNWY2YmRjODc5NjhlNzVkNDVhZjUw
ZWYuLjMxZTJkYjQwYjIxNmVhYTJiMTE0MjRiODAzZmI3ZjkxZGQ0ZTI2MWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTG9jay5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMb2NrLmNwcApAQCAtMzAsNiArMzAsOCBAQAogI2luY2x1
ZGUgIlNhbXBsaW5nUHJvZmlsZXIuaCIKICNpbmNsdWRlICJXYXNtTWFjaGluZVRocmVhZHMuaCIK
ICNpbmNsdWRlIDx0aHJlYWQ+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUg
PHd0Zi90aHJlYWRzL1NpZ25hbHMuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTE0OCw2ICsx
NTAsMTAgQEAgdm9pZCBKU0xvY2s6OmRpZEFjcXVpcmVMb2NrKCkKICAgICBXYXNtOjpzdGFydFRy
YWNraW5nQ3VycmVudFRocmVhZCgpOwogI2VuZGlmCiAKKyNpZiBIQVZFKE1BQ0hfRVhDRVBUSU9O
UykKKyAgICByZWdpc3RlclRocmVhZEZvck1hY2hFeGNlcHRpb25IYW5kbGluZygmVGhyZWFkOjpj
dXJyZW50KCkpOworI2VuZGlmCisKICAgICBtX3ZtLT50cmFwcygpLm5vdGlmeUdyYWJBbGxMb2Nr
cygpOwogCiAjaWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zLmNwcAppbmRleCBiMDRkZTM1YTUzNjE1MDg0Mzg1NzVjMjI3YTUw
MTRkZDBjNTFiYWEyLi4wZTZkZTA5ZThjMmIzYmU2YTU4MjZiZDg0YTYzYzlkZTUwMmM1MGVjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcApAQCAtNDMsNiArNDMs
NyBAQAogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvU3RyaW5n
RXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorI2luY2x1ZGUg
PHd0Zi90aHJlYWRzL1NpZ25hbHMuaD4KIAogI2lmIFBMQVRGT1JNKENPQ09BKQogI2luY2x1ZGUg
PGNydF9leHRlcm5zLmg+CkBAIC0zNTQsNiArMzU1LDEwIEBAIHN0YXRpYyB2b2lkIG92ZXJyaWRl
RGVmYXVsdHMoKQogI2lmICFFTkFCTEUoV0VCQVNTRU1CTFlfRkFTVF9NRU1PUlkpCiAgICAgT3B0
aW9uczo6dXNlV2ViQXNzZW1ibHlGYXN0TWVtb3J5KCkgPSBmYWxzZTsKICNlbmRpZgorCisjaWYg
IUhBVkUoTUFDSF9FWENFUFRJT05TKQorICAgIE9wdGlvbnM6OnVzZU1hY2hGb3JFeGNlcHRpb25z
KCkgPSBmYWxzZTsKKyNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCByZWNvbXB1dGVEZXBlbmRlbnRP
cHRpb25zKCkKQEAgLTU0NSw2ICs1NTAsMTEgQEAgdm9pZCBPcHRpb25zOjppbml0aWFsaXplKCkK
IAogICAgICAgICAgICAgZHVtcE9wdGlvbnNJZk5lZWRlZCgpOwogICAgICAgICAgICAgZW5zdXJl
T3B0aW9uc0FyZUNvaGVyZW50KCk7CisKKyNpZiBIQVZFKE1BQ0hfRVhDRVBUSU9OUykKKyAgICAg
ICAgICAgIGlmIChPcHRpb25zOjp1c2VNYWNoRm9yRXhjZXB0aW9ucygpKQorICAgICAgICAgICAg
ICAgIGhhbmRsZVNpZ25hbHNXaXRoTWFjaCgpOworI2VuZGlmCiAgICAgICAgIH0pOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKaW5kZXggY2Y5ZGMyYjJhODI1Njhl
ZTA3ZGEwODg5ZTM5YjZiMmY5ZGNkNzk3NS4uMjI3NGQxY2RlYjMzMzZlMzdhYjQ0NzNlYTQxMTZl
YTMyMjllOTM3ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0
aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaApAQCAt
NDIwLDYgKzQyMCw4IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIHYo
dW5zaWduZWQsIHdhdGNoZG9nLCAwLCBOb3JtYWwsICJ3YXRjaGRvZyB0aW1lb3V0ICgwID0gRGlz
YWJsZWQsIE4gPSBhIHRpbWVvdXQgcGVyaW9kIG9mIE4gbWlsbGlzZWNvbmRzKSIpIFwKICAgICB2
KGJvb2wsIHVzZVBvbGxpbmdUcmFwcywgZmFsc2UsIE5vcm1hbCwgInVzZSBwb2xsaW5nIChpbnN0
ZWFkIG9mIHNpZ25hbGxpbmcpIFZNIHRyYXBzIikgXAogICAgIFwKKyAgICB2KGJvb2wsIHVzZU1h
Y2hGb3JFeGNlcHRpb25zLCB0cnVlLCBOb3JtYWwsICJVc2UgbWFjaCBleGNlcHRpb25zIHJhdGhl
ciB0aGFuIHNpZ25hbHMgdG8gaGFuZGxlIGZhdWx0cyBhbmQgcGFzcyB0aHJlYWQgbWVzc2FnZXMu
IChUaGlzIGRvZXMgbm90aGluZyBvbiBwbGF0Zm9ybXMgd2l0aG91dCBtYWNoKSIpIFwKKyAgICBc
CiAgICAgdihib29sLCB1c2VJQ1N0YXRzLCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAg
XAogICAgIHYodW5zaWduZWQsIHByb3RvdHlwZUhpdENvdW50Rm9yTExJbnRDYWNoaW5nLCAyLCBO
b3JtYWwsICJOdW1iZXIgb2YgcHJvdG90eXBlIHByb3BlcnR5IGhpdHMgYmVmb3JlIGNhY2hpbmcg
YSBwcm90b3R5cGUgaW4gdGhlIExMSW50LiBBIGNvdW50IG9mIDAgbWVhbnMgbmV2ZXIgY2FjaGUu
IikgXApAQCAtNDQzLDYgKzQ0NSw3IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5n
OwogICAgIHYodW5zaWduZWQsIHdlYkFzc2VtYmx5QkJRT3B0aW1pemF0aW9uTGV2ZWwsIDEsIE5v
cm1hbCwgIkIzIE9wdGltaXphdGlvbiBsZXZlbCBmb3IgQkJRIFdlYiBBc3NlbWJseSBtb2R1bGUg
Y29tcGlsYXRpb25zLiIpIFwKICAgICB2KHVuc2lnbmVkLCB3ZWJBc3NlbWJseU9NR09wdGltaXph
dGlvbkxldmVsLCBPcHRpb25zOjpkZWZhdWx0QjNPcHRMZXZlbCgpLCBOb3JtYWwsICJCMyBPcHRp
bWl6YXRpb24gbGV2ZWwgZm9yIE9NRyBXZWIgQXNzZW1ibHkgbW9kdWxlIGNvbXBpbGF0aW9ucy4i
KSBcCiAgICAgXAorICAgIHYoYm9vbCwgdXNlQkJRVGllclVwQ2hlY2tzLCB0cnVlLCBOb3JtYWws
ICJFbmFibGVzIHRpZXIgdXAgY2hlY2tzIGZvciBvdXIgQkJRIGNvZGUuIikgXAogICAgIHYodW5z
aWduZWQsIHdlYkFzc2VtYmx5T01HVGllclVwQ291bnQsIDUwMDAsIE5vcm1hbCwgIlRoZSBjb3Vu
dGRvd24gYmVmb3JlIHdlIHRpZXIgdXAgYSBmdW5jdGlvbiB0byBPTUcuIikgXAogICAgIHYodW5z
aWduZWQsIHdlYkFzc2VtYmx5TG9vcERlY3JlbWVudCwgMTUsIE5vcm1hbCwgIlRoZSBhbW91bnQg
dGhlIHRpZXIgdXAgY291bnRkb3duIGlzIGRlY3JlbWVudGVkIG9uIGVhY2ggbG9vcCBiYWNrZWRn
ZS4iKSBcCiAgICAgdih1bnNpZ25lZCwgd2ViQXNzZW1ibHlGdW5jdGlvbkVudHJ5RGVjcmVtZW50
LCAxLCBOb3JtYWwsICJUaGUgYW1vdW50IHRoZSB0aWVyIHVwIGNvdW50ZG93biBpcyBkZWNyZW1l
bnRlZCBvbiBlYWNoIGZ1bmN0aW9uIGVudHJ5LiIpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNVHJhcHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk1UcmFwcy5jcHAKaW5kZXggMWJhYWNlNjA0NGU2NjBhOGU1NDQxZmJhZDAxOGVhOTA5
MzFhNGM5MS4uOGM1N2M0NTZhZTQzNjhhZGYyOGVhMGE2NDU4ZTdjMDM5YTk3MGVlOSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk1UcmFwcy5jcHAKQEAgLTUzLDExICs1MywxMSBA
QCBBTFdBWVNfSU5MSU5FIFZNJiBWTVRyYXBzOjp2bSgpIGNvbnN0CiAjaWYgRU5BQkxFKFNJR05B
TF9CQVNFRF9WTV9UUkFQUykKIAogc3RydWN0IFNpZ25hbENvbnRleHQgewotICAgIFNpZ25hbENv
bnRleHQobWNvbnRleHRfdCYgbWNvbnRleHQpCi0gICAgICAgIDogbWNvbnRleHQobWNvbnRleHQp
Ci0gICAgICAgICwgdHJhcFBDKE1hY2hpbmVDb250ZXh0OjppbnN0cnVjdGlvblBvaW50ZXIobWNv
bnRleHQpKQotICAgICAgICAsIHN0YWNrUG9pbnRlcihNYWNoaW5lQ29udGV4dDo6c3RhY2tQb2lu
dGVyKG1jb250ZXh0KSkKLSAgICAgICAgLCBmcmFtZVBvaW50ZXIoTWFjaGluZUNvbnRleHQ6OmZy
YW1lUG9pbnRlcihtY29udGV4dCkpCisgICAgU2lnbmFsQ29udGV4dChQbGF0Zm9ybVJlZ2lzdGVy
cyYgcmVnaXN0ZXJzKQorICAgICAgICA6IHJlZ2lzdGVycyhyZWdpc3RlcnMpCisgICAgICAgICwg
dHJhcFBDKE1hY2hpbmVDb250ZXh0OjppbnN0cnVjdGlvblBvaW50ZXIocmVnaXN0ZXJzKSkKKyAg
ICAgICAgLCBzdGFja1BvaW50ZXIoTWFjaGluZUNvbnRleHQ6OnN0YWNrUG9pbnRlcihyZWdpc3Rl
cnMpKQorICAgICAgICAsIGZyYW1lUG9pbnRlcihNYWNoaW5lQ29udGV4dDo6ZnJhbWVQb2ludGVy
KHJlZ2lzdGVycykpCiAgICAgewogI2lmIENQVShYODZfNjQpIHx8IENQVShYODYpCiAgICAgICAg
IC8vIE9uIFg4Nl82NCwgU0lHVFJBUCByZXBvcnRzIHRoZSBhZGRyZXNzIGFmdGVyIHRoZSB0cmFw
cGluZyBQQy4gU28sIGRlYyBieSAxLgpAQCAtNjgsMTEgKzY4LDExIEBAIHN0cnVjdCBTaWduYWxD
b250ZXh0IHsKICAgICB2b2lkIGFkanVzdFBDVG9Qb2ludFRvVHJhcHBpbmdJbnN0cnVjdGlvbigp
CiAgICAgewogI2lmIENQVShYODZfNjQpIHx8IENQVShYODYpCi0gICAgICAgIE1hY2hpbmVDb250
ZXh0OjppbnN0cnVjdGlvblBvaW50ZXIobWNvbnRleHQpID0gdHJhcFBDOworICAgICAgICBNYWNo
aW5lQ29udGV4dDo6aW5zdHJ1Y3Rpb25Qb2ludGVyKHJlZ2lzdGVycykgPSB0cmFwUEM7CiAjZW5k
aWYKICAgICB9CiAKLSAgICBtY29udGV4dF90JiBtY29udGV4dDsKKyAgICBQbGF0Zm9ybVJlZ2lz
dGVycyYgcmVnaXN0ZXJzOwogICAgIHZvaWQqIHRyYXBQQzsKICAgICB2b2lkKiBzdGFja1BvaW50
ZXI7CiAgICAgdm9pZCogZnJhbWVQb2ludGVyOwpAQCAtMTMwLDggKzEzMCw4IEBAIHN0YXRpYyBF
eHBlY3RlZDxWTUFuZFN0YWNrQm91bmRzLCBWTVRyYXBzOjpFcnJvcj4gZmluZEFjdGl2ZVZNQW5k
U3RhY2tCb3VuZHMoU2lnCiAKIHN0YXRpYyB2b2lkIGluc3RhbGxTaWduYWxIYW5kbGVyKCkKIHsK
LSAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihTaWduYWw6OlRyYXAsIFtdIChpbnQsIHNpZ2luZm9f
dCosIHZvaWQqIHVhcCkgLT4gU2lnbmFsQWN0aW9uIHsKLSAgICAgICAgU2lnbmFsQ29udGV4dCBj
b250ZXh0KHN0YXRpY19jYXN0PHVjb250ZXh0X3QqPih1YXApLT51Y19tY29udGV4dCk7CisgICAg
aW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFsOjpUcmFwLCBbXSAoU2lnbmFsLCBTaWdJbmZvJiwg
UGxhdGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVycykgLT4gU2lnbmFsQWN0aW9uIHsKKyAgICAgICAg
U2lnbmFsQ29udGV4dCBjb250ZXh0KHJlZ2lzdGVycyk7CiAKICAgICAgICAgaWYgKCFpc0pJVFBD
KGNvbnRleHQudHJhcFBDKSkKICAgICAgICAgICAgIHJldHVybiBTaWduYWxBY3Rpb246Ok5vdEhh
bmRsZWQ7CkBAIC00MDQsOCArNDA0LDggQEAgdm9pZCBWTVRyYXBzOjpTaWduYWxTZW5kZXI6OnNl
bmQoKQogICAgICAgICAgICAgVk0mIHZtID0gKm1fdm07CiAgICAgICAgICAgICBhdXRvIG9wdGlv
bmFsT3duZXJUaHJlYWQgPSB2bS5vd25lclRocmVhZCgpOwogICAgICAgICAgICAgaWYgKG9wdGlv
bmFsT3duZXJUaHJlYWQpIHsKLSAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZSgqb3B0aW9uYWxP
d25lclRocmVhZC52YWx1ZSgpLmdldCgpLCBbXSAoc2lnaW5mb190KiwgdWNvbnRleHRfdCogdWNv
bnRleHQpIC0+IHZvaWQgewotICAgICAgICAgICAgICAgICAgICBTaWduYWxDb250ZXh0IGNvbnRl
eHQodWNvbnRleHQtPnVjX21jb250ZXh0KTsKKyAgICAgICAgICAgICAgICBzZW5kTWVzc2FnZSgq
b3B0aW9uYWxPd25lclRocmVhZC52YWx1ZSgpLmdldCgpLCBbXSAoUGxhdGZvcm1SZWdpc3RlcnMm
IHJlZ2lzdGVycykgLT4gdm9pZCB7CisgICAgICAgICAgICAgICAgICAgIFNpZ25hbENvbnRleHQg
Y29udGV4dChyZWdpc3RlcnMpOwogICAgICAgICAgICAgICAgICAgICBhdXRvIGFjdGl2ZVZNQW5k
U3RhY2tCb3VuZHMgPSBmaW5kQWN0aXZlVk1BbmRTdGFja0JvdW5kcyhjb250ZXh0KTsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKGFjdGl2ZVZNQW5kU3RhY2tCb3VuZHMpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIFZNKiB2bSA9IGFjdGl2ZVZNQW5kU3RhY2tCb3VuZHMudmFsdWUoKS52bTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9TaWdpbGxDcmFzaEFuYWx5
emVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9TaWdpbGxDcmFzaEFuYWx5emVy
LmNwcAppbmRleCA0YWRhZWZmMWNkYTJkMWZiYzZmOTA2MWYwNjNlMTRkMmU2MzMwMDQ4Li43MWE2
ZTQyNTVjNjQ1ZGQ2YWYzYmRiMjUwY2NmMTNhZDhjMWE4YTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rvb2xzL1NpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwCkBAIC03OCwxMSAr
NzgsMTEgQEAgcHJpdmF0ZToKICNlbmRpZiAvLyBVU0UoT1NfTE9HKQogCiBzdHJ1Y3QgU2lnbmFs
Q29udGV4dCB7Ci0gICAgU2lnbmFsQ29udGV4dChtY29udGV4dF90JiBtY29udGV4dCkKLSAgICAg
ICAgOiBtY29udGV4dChtY29udGV4dCkKLSAgICAgICAgLCBtYWNoaW5lUEMoTWFjaGluZUNvbnRl
eHQ6Omluc3RydWN0aW9uUG9pbnRlcihtY29udGV4dCkpCi0gICAgICAgICwgc3RhY2tQb2ludGVy
KE1hY2hpbmVDb250ZXh0OjpzdGFja1BvaW50ZXIobWNvbnRleHQpKQotICAgICAgICAsIGZyYW1l
UG9pbnRlcihNYWNoaW5lQ29udGV4dDo6ZnJhbWVQb2ludGVyKG1jb250ZXh0KSkKKyAgICBTaWdu
YWxDb250ZXh0KFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3RlcnMpCisgICAgICAgIDogcmVnaXN0
ZXJzKHJlZ2lzdGVycykKKyAgICAgICAgLCBtYWNoaW5lUEMoTWFjaGluZUNvbnRleHQ6Omluc3Ry
dWN0aW9uUG9pbnRlcihyZWdpc3RlcnMpKQorICAgICAgICAsIHN0YWNrUG9pbnRlcihNYWNoaW5l
Q29udGV4dDo6c3RhY2tQb2ludGVyKHJlZ2lzdGVycykpCisgICAgICAgICwgZnJhbWVQb2ludGVy
KE1hY2hpbmVDb250ZXh0OjpmcmFtZVBvaW50ZXIocmVnaXN0ZXJzKSkKICAgICB7IH0KIAogICAg
IHZvaWQgZHVtcCgpCkBAIC0xMTIsNyArMTEyLDcgQEAgc3RydWN0IFNpZ25hbENvbnRleHQgewog
ICAgICAgICB2KGdzKQogCiAjZGVmaW5lIERVTVBfUkVHSVNURVIoX19yZWcpIFwKLSAgICAgICAg
bG9nKCJSZWdpc3RlciAiICNfX3JlZyAiOiAlcCIsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1j
b250ZXh0LT5fX3NzLl9fIyNfX3JlZykpOworICAgICAgICBsb2coIlJlZ2lzdGVyICIgI19fcmVn
ICI6ICVwIiwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVnaXN0ZXJzLl9fIyNfX3JlZykpOwog
ICAgICAgICBGT1JfRUFDSF9SRUdJU1RFUihEVU1QX1JFR0lTVEVSKQogI3VuZGVmIEZPUl9FQUNI
X1JFR0lTVEVSCiAKQEAgLTEyMCwyMCArMTIwLDIwIEBAIHN0cnVjdCBTaWduYWxDb250ZXh0IHsK
ICAgICAgICAgaW50IGk7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAyODsgaSArPSA0KSB7CiAg
ICAgICAgICAgICBsb2coInglZDogJTAxNmxseCB4JWQ6ICUwMTZsbHggeCVkOiAlMDE2bGx4IHgl
ZDogJTAxNmxseCIsCi0gICAgICAgICAgICAgICAgaSwgbWNvbnRleHQtPl9fc3MuX194W2ldLAot
ICAgICAgICAgICAgICAgIGkrMSwgbWNvbnRleHQtPl9fc3MuX194W2krMV0sCi0gICAgICAgICAg
ICAgICAgaSsyLCBtY29udGV4dC0+X19zcy5fX3hbaSsyXSwKLSAgICAgICAgICAgICAgICBpKzMs
IG1jb250ZXh0LT5fX3NzLl9feFtpKzNdKTsKKyAgICAgICAgICAgICAgICBpLCByZWdpc3RlcnMu
X194W2ldLAorICAgICAgICAgICAgICAgIGkrMSwgcmVnaXN0ZXJzLl9feFtpKzFdLAorICAgICAg
ICAgICAgICAgIGkrMiwgcmVnaXN0ZXJzLl9feFtpKzJdLAorICAgICAgICAgICAgICAgIGkrMywg
cmVnaXN0ZXJzLl9feFtpKzNdKTsKICAgICAgICAgfQogICAgICAgICBBU1NFUlQoaSA8IDI5KTsK
ICAgICAgICAgbG9nKCJ4JWQ6ICUwMTZsbHggZnA6ICUwMTZsbHggbHI6ICUwMTZsbHgiLAotICAg
ICAgICAgICAgaSwgbWNvbnRleHQtPl9fc3MuX194W2ldLCBtY29udGV4dC0+X19zcy5fX2ZwLCBt
Y29udGV4dC0+X19zcy5fX2xyKTsKKyAgICAgICAgICAgIGksIHJlZ2lzdGVycy5fX3hbaV0sIHJl
Z2lzdGVycy5fX2ZwLCByZWdpc3RlcnMuX19scik7CiAgICAgICAgIGxvZygic3A6ICUwMTZsbHgg
cGM6ICUwMTZsbHggY3BzcjogJTA4eCIsCi0gICAgICAgICAgICBtY29udGV4dC0+X19zcy5fX3Nw
LCBtY29udGV4dC0+X19zcy5fX3BjLCBtY29udGV4dC0+X19zcy5fX2Nwc3IpOworICAgICAgICAg
ICAgcmVnaXN0ZXJzLl9fc3AsIHJlZ2lzdGVycy5fX3BjLCByZWdpc3RlcnMuX19jcHNyKTsKICNl
bmRpZgogICAgIH0KIAotICAgIG1jb250ZXh0X3QmIG1jb250ZXh0OworICAgIFBsYXRmb3JtUmVn
aXN0ZXJzJiByZWdpc3RlcnM7CiAgICAgdm9pZCogbWFjaGluZVBDOwogICAgIHZvaWQqIHN0YWNr
UG9pbnRlcjsKICAgICB2b2lkKiBmcmFtZVBvaW50ZXI7CkBAIC0xNDIsOCArMTQyLDggQEAgc3Ry
dWN0IFNpZ25hbENvbnRleHQgewogc3RhdGljIHZvaWQgaW5zdGFsbENyYXNoSGFuZGxlcigpCiB7
CiAjaWYgQ1BVKFg4Nl82NCkgfHwgQ1BVKEFSTTY0KQotICAgIGluc3RhbGxTaWduYWxIYW5kbGVy
KFNpZ25hbDo6SWxsLCBbXSAoaW50LCBzaWdpbmZvX3QqLCB2b2lkKiB1YXApIHsKLSAgICAgICAg
U2lnbmFsQ29udGV4dCBjb250ZXh0KHN0YXRpY19jYXN0PHVjb250ZXh0X3QqPih1YXApLT51Y19t
Y29udGV4dCk7CisgICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoU2lnbmFsOjpJbGwsIFtdIChTaWdu
YWwsIFNpZ0luZm8mLCBQbGF0Zm9ybVJlZ2lzdGVycyYgcmVnaXN0ZXJzKSB7CisgICAgICAgIFNp
Z25hbENvbnRleHQgY29udGV4dChyZWdpc3RlcnMpOwogCiAgICAgICAgIGlmICghaXNKSVRQQyhj
b250ZXh0Lm1hY2hpbmVQQykpCiAgICAgICAgICAgICByZXR1cm4gU2lnbmFsQWN0aW9uOjpOb3RI
YW5kbGVkOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBs
YW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUJCUVBsYW4uY3BwCmluZGV4
IDFkZDBjZDFkODM1YzZjMmYyMzFiMDBiODg2ZGRlNGFmNzJjMjYzY2UuLmIxYjU5OGQyMGM1YzAw
NzdkOWU5ZDA4ZTM2OGFkNWNhMTc4MzFiYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21CQlFQbGFuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XYXNtQkJRUGxhbi5jcHAKQEAgLTI0Miw3ICsyNDIsNyBAQCB2b2lkIEJCUVBsYW46OmNvbXBp
bGVGdW5jdGlvbnMoQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQogICAgICAgICBBU1NFUlQodmFs
aWRhdGVGdW5jdGlvbihmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgc2lnbmF0dXJlLCBt
X21vZHVsZUluZm9ybWF0aW9uLmdldCgpKSk7CiAKICAgICAgICAgbV91bmxpbmtlZFdhc21Ub1dh
c21DYWxsc1tmdW5jdGlvbkluZGV4XSA9IFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPigp
OwotICAgICAgICBUaWVyVXBDb3VudCogdGllclVwID0gJm1fdGllclVwQ291bnRzW2Z1bmN0aW9u
SW5kZXhdOworICAgICAgICBUaWVyVXBDb3VudCogdGllclVwID0gT3B0aW9uczo6dXNlQkJRVGll
clVwQ2hlY2tzKCkgPyAmbV90aWVyVXBDb3VudHNbZnVuY3Rpb25JbmRleF0gOiBudWxscHRyOwog
ICAgICAgICBhdXRvIHBhcnNlQW5kQ29tcGlsZVJlc3VsdCA9IHBhcnNlQW5kQ29tcGlsZShtX2Nv
bXBpbGF0aW9uQ29udGV4dHNbZnVuY3Rpb25JbmRleF0sIGZ1bmN0aW9uU3RhcnQsIGZ1bmN0aW9u
TGVuZ3RoLCBzaWduYXR1cmUsIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHNbZnVuY3Rpb25JbmRl
eF0sIG1fbW9kdWxlSW5mb3JtYXRpb24uZ2V0KCksIG1fbW9kZSwgQ29tcGlsYXRpb25Nb2RlOjpC
QlFNb2RlLCBmdW5jdGlvbkluZGV4LCB0aWVyVXApOwogCiAgICAgICAgIGlmIChVTkxJS0VMWSgh
cGFyc2VBbmRDb21waWxlUmVzdWx0KSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbUZhdWx0U2lnbmFsSGFuZGxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtRmF1bHRTaWduYWxIYW5kbGVyLmNwcAppbmRleCAyZTBjOTlhMzliZWJkMzE3
OGI5MTQ4ZDk1OGZlNTNlNTdhNjIyOTdlLi4yNjRjMzRkZTQ1ZGExNzVhNWQ1MTQxYzE3MWVmZTk1
ZTA2M2M1ZTI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRmF1
bHRTaWduYWxIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
RmF1bHRTaWduYWxIYW5kbGVyLmNwcApAQCAtNTIsOSArNTIsOCBAQCBzdGF0aWMgTGF6eU5ldmVy
RGVzdHJveWVkPEhhc2hTZXQ8c3RkOjp0dXBsZTx2b2lkKiwgdm9pZCo+Pj4gY29kZUxvY2F0aW9u
czsgLy8gKAogCiBzdGF0aWMgYm9vbCBmYXN0SGFuZGxlckluc3RhbGxlZCB7IGZhbHNlIH07CiAK
LXN0YXRpYyBTaWduYWxBY3Rpb24gdHJhcEhhbmRsZXIoaW50LCBzaWdpbmZvX3QqIHNpZ0luZm8s
IHZvaWQqIHVjb250ZXh0KQorc3RhdGljIFNpZ25hbEFjdGlvbiB0cmFwSGFuZGxlcihTaWduYWws
IFNpZ0luZm8mIHNpZ0luZm8sIFBsYXRmb3JtUmVnaXN0ZXJzJiBjb250ZXh0KQogewotICAgIG1j
b250ZXh0X3QmIGNvbnRleHQgPSBzdGF0aWNfY2FzdDx1Y29udGV4dF90Kj4odWNvbnRleHQpLT51
Y19tY29udGV4dDsKICAgICB2b2lkKiBmYXVsdGluZ0luc3RydWN0aW9uID0gTWFjaGluZUNvbnRl
eHQ6Omluc3RydWN0aW9uUG9pbnRlcihjb250ZXh0KTsKICAgICBkYXRhTG9nTG5JZih2ZXJib3Nl
LCAic3RhcnRpbmcgaGFuZGxlciBmb3IgZmF1bHQgYXQ6ICIsIFJhd1BvaW50ZXIoZmF1bHRpbmdJ
bnN0cnVjdGlvbikpOwogCkBAIC02NCw3ICs2Myw3IEBAIHN0YXRpYyBTaWduYWxBY3Rpb24gdHJh
cEhhbmRsZXIoaW50LCBzaWdpbmZvX3QqIHNpZ0luZm8sIHZvaWQqIHVjb250ZXh0KQogICAgIGlm
IChpc0pJVFBDKGZhdWx0aW5nSW5zdHJ1Y3Rpb24pKSB7CiAgICAgICAgIGJvb2wgZmF1bHRlZElu
QWN0aXZlRmFzdE1lbW9yeSA9IGZhbHNlOwogICAgICAgICB7Ci0gICAgICAgICAgICB2b2lkKiBm
YXVsdGluZ0FkZHJlc3MgPSBzaWdJbmZvLT5zaV9hZGRyOworICAgICAgICAgICAgdm9pZCogZmF1
bHRpbmdBZGRyZXNzID0gc2lnSW5mby5mYXVsdGluZ0FkZHJlc3M7CiAgICAgICAgICAgICBkYXRh
TG9nTG5JZih2ZXJib3NlLCAiY2hlY2tpbmcgZmF1bHRpbmcgYWRkcmVzczogIiwgUmF3UG9pbnRl
cihmYXVsdGluZ0FkZHJlc3MpLCAiIGlzIGluIGFuIGFjdGl2ZSBmYXN0IG1lbW9yeSIpOwogICAg
ICAgICAgICAgZmF1bHRlZEluQWN0aXZlRmFzdE1lbW9yeSA9IFdhc206Ok1lbW9yeTo6YWRkcmVz
c0lzSW5BY3RpdmVGYXN0TWVtb3J5KGZhdWx0aW5nQWRkcmVzcyk7CiAgICAgICAgIH0KQEAgLTEy
NCwxMSArMTIzLDExIEBAIHZvaWQgZW5hYmxlRmFzdE1lbW9yeSgpCiAgICAgICAgICAgICByZXR1
cm47CiAKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFlfRkFTVF9NRU1PUlkpCi0gICAgICAgIGluc3Rh
bGxTaWduYWxIYW5kbGVyKFNpZ25hbDo6QnVzLCBbXSAoaW50IHNpZ25hbCwgc2lnaW5mb190KiBz
aWdJbmZvLCB2b2lkKiB1Y29udGV4dCkgeworICAgICAgICBpbnN0YWxsU2lnbmFsSGFuZGxlcihT
aWduYWw6OkJ1cywgW10gKFNpZ25hbCBzaWduYWwsIFNpZ0luZm8mIHNpZ0luZm8sIFBsYXRmb3Jt
UmVnaXN0ZXJzJiB1Y29udGV4dCkgewogICAgICAgICAgICAgcmV0dXJuIHRyYXBIYW5kbGVyKHNp
Z25hbCwgc2lnSW5mbywgdWNvbnRleHQpOwogICAgICAgICB9KTsKIAotICAgICAgICBpbnN0YWxs
U2lnbmFsSGFuZGxlcihTaWduYWw6OlNlZ1YsIFtdIChpbnQgc2lnbmFsLCBzaWdpbmZvX3QqIHNp
Z0luZm8sIHZvaWQqIHVjb250ZXh0KSB7CisgICAgICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKFNp
Z25hbDo6U2VnViwgW10gKFNpZ25hbCBzaWduYWwsIFNpZ0luZm8mIHNpZ0luZm8sIFBsYXRmb3Jt
UmVnaXN0ZXJzJiB1Y29udGV4dCkgewogICAgICAgICAgICAgcmV0dXJuIHRyYXBIYW5kbGVyKHNp
Z25hbCwgc2lnSW5mbywgdWNvbnRleHQpOwogICAgICAgICB9KTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1hY2hpbmVUaHJlYWRzLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21NYWNoaW5lVGhyZWFkcy5jcHAKaW5kZXggNWFhYzg3YWNi
NTc0N2M3ZmNhMmY5MzZlYzljZjY3OGI0MzE3ODE3MS4uMGEzNjdmZDVlMjI1MjdlOWMzYzg3NTM2
ZWNmZDcyYjEzZGY3OWQ1YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU1hY2hpbmVUaHJlYWRzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9X
YXNtTWFjaGluZVRocmVhZHMuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiTWFjaGlu
ZVN0YWNrTWFya2VyLmgiCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVk
ZSA8d3RmL1RocmVhZE1lc3NhZ2UuaD4KKyNpbmNsdWRlIDx3dGYvdGhyZWFkcy9TaWduYWxzLmg+
CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgV2FzbSB7CiAKQEAgLTU3LDcgKzU4LDcgQEAg
dm9pZCByZXNldEluc3RydWN0aW9uQ2FjaGVPbkFsbFRocmVhZHMoKQogCiAgICAgY29uc3QgRG91
Ymx5TGlua2VkTGlzdDxNYWNoaW5lVGhyZWFkczo6TWFjaGluZVRocmVhZD4mIHRocmVhZHMgPSB3
YXNtVGhyZWFkcygpLnRocmVhZHNMaXN0SGVhZChsb2NrZXIpOwogICAgIGZvciAoY29uc3QgYXV0
byogdGhyZWFkID0gdGhyZWFkcy5oZWFkKCk7IHRocmVhZDsgdGhyZWFkID0gdGhyZWFkLT5uZXh0
KCkpIHsKLSAgICAgICAgc2VuZE1lc3NhZ2UodGhyZWFkLT5tX3RocmVhZC5nZXQoKSwgW10gKHNp
Z2luZm9fdCosIHVjb250ZXh0X3QqKSB7CisgICAgICAgIHNlbmRNZXNzYWdlKHRocmVhZC0+bV90
aHJlYWQuZ2V0KCksIFtdIChjb25zdCBQbGF0Zm9ybVJlZ2lzdGVycyYpIHsKICAgICAgICAgICAg
IC8vIEl0J3MgbGlrZWx5IHRoYXQgdGhlIHNpZ25hbCBoYW5kbGVyIHdpbGwgYWxyZWFkeSByZXNl
dCB0aGUgaW5zdHJ1Y3Rpb24gY2FjaGUgYnV0IHdlIG1pZ2h0IGFzIHdlbGwgYmUgc3VyZS4KICAg
ICAgICAgICAgIFdURjo6Y3Jvc3NNb2RpZnlpbmdDb2RlRmVuY2UoKTsKICAgICAgICAgfSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NvbmZpZ3VyYXRpb25zL1dURi54Y2NvbmZpZyBiL1NvdXJj
ZS9XVEYvQ29uZmlndXJhdGlvbnMvV1RGLnhjY29uZmlnCmluZGV4IDQyMWVmZDk2MWMxNDY4Y2Qy
MGRkYzViYmY4ODk2MjBlZTFjZjU4ZGMuLmFmMTk5Y2ViOTUwNmY4OTUwZDMzYTljZTQ4MDdiYTZk
YmI3YjI3ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ29uZmlndXJhdGlvbnMvV1RGLnhjY29u
ZmlnCisrKyBiL1NvdXJjZS9XVEYvQ29uZmlndXJhdGlvbnMvV1RGLnhjY29uZmlnCkBAIC0yNywz
ICsyNyw2IEBAIFBST0RVQ1RfTkFNRSA9IFdURjsKIAogR0NDX1NZTUJPTFNfUFJJVkFURV9FWFRF
Uk4gPSBZRVM7CiBTVFJJUF9JTlNUQUxMRURfUFJPRFVDVCA9IE5POworCitFWENMVURFRF9TT1VS
Q0VfRklMRV9OQU1FU18gPSBNYWNoRXhjZXB0aW9ucy5kZWZzCitFWENMVURFRF9TT1VSQ0VfRklM
RV9OQU1FU1tzZGs9aXBob25lb3MqXSA9ICQoRVhDTFVERURfU09VUkNFX0ZJTEVfTkFNRVNfJChV
U0VfSU5URVJOQUxfU0RLKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CmluZGV4IDVmNDUyODdmNmUzYzY4ODViMjJiYTI3NzZjZmJjNmEzMzIzYmQwNWIuLjU4NTQ0Y2Ni
NjJjYjIyMTJiYWVlNzZmNGQyYTAxZTg5YjZiN2IwOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
V1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dURi9XVEYueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjQsNiArNjQsNyBAQAogCQk1MjE4MzAxMkM5OUU0NzZB
ODRFRUJFQTggLyogU3ltYm9sSW1wbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGNzJCQkRCMTA3RkE0MjQ4ODYxNzhCOUUgLyogU3ltYm9sSW1wbC5j
cHAgKi87IH07CiAJCTUzMTFCRDUzMUVBNzFDQUQwMDUyNTI4MSAvKiBTaWduYWxzLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzMTFCRDUxMUVBNzFD
QUQwMDUyNTI4MSAvKiBTaWduYWxzLmNwcCAqLzsgfTsKIAkJNTMxMUJENUMxRUE4MjJGOTAwNTI1
MjgxIC8qIFRocmVhZE1lc3NhZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTMxMUJENUIxRUE4MjJGOTAwNTI1MjgxIC8qIFRocmVhZE1lc3NhZ2Uu
Y3BwICovOyB9OworCQk1MzUzNEYyQTFFQzBFMTBFMDAxNDFCMkYgLyogTWFjaEV4Y2VwdGlvbnMu
ZGVmcyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzNTM0
RjI5MUVDMEUxMEUwMDE0MUIyRiAvKiBNYWNoRXhjZXB0aW9ucy5kZWZzICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKENsaWVudCwgU2VydmVyLCApOyB9OyB9OwogCQk3MEE5OTNGRTFBRDcx
NTEzMDBGQTYxNUIgLyogU3ltYm9sUmVnaXN0cnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzBBOTkzRkMxQUQ3MTUxMzAwRkE2MTVCIC8qIFN5bWJv
bFJlZ2lzdHJ5LmNwcCAqLzsgfTsKIAkJNzBFQ0E2MEQxQjAyNDI2ODAwNDQ5NzM5IC8qIEF0b21p
Y1N0cmluZ0ltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNzBFQ0E2MEExQjAyNDI2ODAwNDQ5NzM5IC8qIEF0b21pY1N0cmluZ0ltcGwuY3BwICov
OyB9OwogCQk3QUZFQzZCMTFFQjIyQjU5MDBEQURFMzYgLyogVVVJRC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QUZFQzZCMDFFQjIyQjU5MDBEQURF
MzYgLyogVVVJRC5jcHAgKi87IH07CkBAIC0yOTksNiArMzAwLDcgQEAKIAkJNTMxMUJENTcxRUE3
RTFBMTAwNTI1MjgxIC8qIFNpZ25hbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU2lnbmFscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzExQkQ1OTFFQTgx
QTk2MDA1MjUyODEgLyogVGhyZWFkTWVzc2FnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBUaHJlYWRNZXNzYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUz
MTFCRDVCMUVBODIyRjkwMDUyNTI4MSAvKiBUaHJlYWRNZXNzYWdlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRocmVhZE1lc3NhZ2UuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1MzUzNEYyOTFFQzBFMTBFMDAxNDFCMkYgLyogTWFjaEV4Y2VwdGlv
bnMuZGVmcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUubWlnOyBwYXRoID0gTWFjaEV4Y2VwdGlvbnMu
ZGVmczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTM5RUIwNjIxRDU1Mjg0MjAwQzgy
RUY3IC8qIExFQkRlY29kZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTEVC
RGVjb2Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0VDMjUzQzFFOTVBRDMw
MDAwODMxQjkgLyogUHJpb3JpdHlRdWV1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBQcmlvcml0eVF1ZXVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1MzA3
MUM5MUM0MDQyNzIwMDM4NDg5OCAvKiBUaW55TFJVQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVGlueUxSVUNhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0xMDIzLDYgKzEwMjUsNyBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJMUE0MjhCOEIxQzhG
ODlERDAwNTFFOUVCIC8qIEFwcEtpdENvbXBhdGliaWxpdHlEZWNsYXJhdGlvbnMuaCAqLywKIAkJ
CQkxQUNBREQ4MjE4ODQ0ODAxMDBEOEI3MUQgLyogRGVwcmVjYXRlZFN5bWJvbHNVc2VkQnlTYWZh
cmkubW0gKi8sCisJCQkJNTM1MzRGMjkxRUMwRTEwRTAwMTQxQjJGIC8qIE1hY2hFeGNlcHRpb25z
LmRlZnMgKi8sCiAJCQkJQThBNDcyQzUxNTFBODI1QTAwNDEyM0ZGIC8qIE1haW5UaHJlYWRNYWMu
bW0gKi8sCiAJCQkpOwogCQkJcGF0aCA9IG1hYzsKQEAgLTEzNDYsNiArMTM0OSw3IEBACiAJCQkJ
MTQzRjYxMUYxNTY1RjBGOTAwREI1MTRBIC8qIFJBTVNpemUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTNCNzI1RUM5ODc0NDZBRDkzRjFBNDQwIC8qIFJhbmRvbURldmljZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBOEE0NzQxNDE1MUE4MjVCMDA0MTIzRkYgLyogUmFuZG9tTnVtYmVyLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTUzNTM0RjJBMUVDMEUxMEUwMDE0MUIyRiAvKiBNYWNoRXhjZXB0
aW9ucy5kZWZzIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0MUExNTFBODI1QjAwNDEyM0ZGIC8q
IFJlZkNvdW50ZWRMZWFrQ291bnRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQ0RFRDBGMzE4
MTE1Qzg1MDA0REJBNzAgLyogUnVuTG9vcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQ0RFRDBF
RjE4MTE1QzM4MDA0REJBNzAgLyogUnVuTG9vcENGLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaCBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3Jt
LmgKaW5kZXggNjg1NGE4MWUzOTcyNzA2NzAzNGQwNWRiMzk4YTQ3MGMxNDI4NDI3Ni4uMzYzODgz
OTVkNGY0M2I0NjUzODllYmM5ODAyZmJiNGQ5MGQyNGI3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvUGxhdGZvcm0uaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCkBAIC02NjMs
NiArNjYzLDEwIEBACiAjZGVmaW5lIEhBVkVfUkVBRExJTkUgMQogI2RlZmluZSBIQVZFX1NZU19U
SU1FQl9IIDEKIAorI2lmIF9faGFzX2luY2x1ZGUoPG1hY2gvbWFjaF9leGMuZGVmcz4pICYmICEo
UExBVEZPUk0oV0FUQ0hPUykgfHwgUExBVEZPUk0oQVBQTEVUVikpCisjZGVmaW5lIEhBVkVfTUFD
SF9FWENFUFRJT05TIDEKKyNlbmRpZgorCiAjaWYgIVBMQVRGT1JNKEdUSykKICNkZWZpbmUgVVNF
X0FDQ0VMRVJBVEUgMQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9y
bVJlZ2lzdGVycy5oIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm1SZWdpc3RlcnMuaAppbmRleCBk
NWI1YWJjMjIxYmJhZDgyOTc2MTkzZWNlNTFjMWM3NjE3NWRiMDZkLi44NGJkODkzNzQ5OWRhOTll
YWE4NmI3MzY5NWY3YzViODFhYzI2MGNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0
Zm9ybVJlZ2lzdGVycy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtUmVnaXN0ZXJzLmgK
QEAgLTI2LDkgKzI2LDExIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPHd0Zi9QbGF0Zm9y
bS5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogI2lmIE9TKERBUldJTikKICNp
bmNsdWRlIDxtYWNoL3RocmVhZF9hY3QuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KICNlbGlmIE9T
KFdJTkRPV1MpCiAjaW5jbHVkZSA8d2luZG93cy5oPgogI2Vsc2UKQEAgLTU1LDYgKzU3LDExIEBA
IHR5cGVkZWYgYXJtX3RocmVhZF9zdGF0ZTY0X3QgUGxhdGZvcm1SZWdpc3RlcnM7CiAjZXJyb3Ig
VW5rbm93biBBcmNoaXRlY3R1cmUKICNlbmRpZgogCitpbmxpbmUgUGxhdGZvcm1SZWdpc3RlcnMm
IHJlZ2lzdGVyc0Zyb21VQ29udGV4dCh1Y29udGV4dF90KiB1Y29udGV4dCkKK3sKKyAgICByZXR1
cm4gdWNvbnRleHQtPnVjX21jb250ZXh0LT5fX3NzOworfQorCiAjZWxpZiBPUyhXSU5ET1dTKQog
CiB1c2luZyBQbGF0Zm9ybVJlZ2lzdGVycyA9IENPTlRFWFQ7CkBAIC02NSw2ICs3MiwxMSBAQCBz
dHJ1Y3QgUGxhdGZvcm1SZWdpc3RlcnMgewogICAgIG1jb250ZXh0X3QgbWFjaGluZUNvbnRleHQ7
CiB9OwogCitpbmxpbmUgUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVyc0Zyb21VQ29udGV4dCh1
Y29udGV4dF90KiB1Y29udGV4dCkKK3sKKyAgICByZXR1cm4gKmJpdHdpc2VfY2FzdDxQbGF0Zm9y
bVJlZ2lzdGVycyo+KCZ1Y29udGV4dC0+dWNfbWNvbnRleHQpOworfQorCiAjZWxzZQogCiBzdHJ1
Y3QgUGxhdGZvcm1SZWdpc3RlcnMgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvU3RhY2tC
b3VuZHMuaCBiL1NvdXJjZS9XVEYvd3RmL1N0YWNrQm91bmRzLmgKaW5kZXggNTU0NjA0ZjJhYjQ4
NGM3Y2Y3MWVlMzg2MzBjZWI0Yzc5YzMzZTk3Mi4uY2Q2MmMxNDhhNmM3ZWZjOTUxN2E4YjA5Yjhh
MzJjN2ZlMTkwY2RlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvU3RhY2tCb3VuZHMuaAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9TdGFja0JvdW5kcy5oCkBAIC01NCw3ICs1NCw2IEBAIHB1Ymxp
YzoKICAgICAgICAgOiBtX29yaWdpbihvcmlnaW4pCiAgICAgICAgICwgbV9ib3VuZChlbmQpCiAg
ICAgewotICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgfQogCiAgICAgdm9pZCogb3Jp
Z2luKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlci5jcHAg
Yi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRIb2xkZXIuY3BwCmluZGV4IDMwYjIyN2NkYjhhYzUyNjA3
NTBiNDdkNDgyYWJjMmQ1NWJlM2FjOTQuLjVlYWE3MjBlODZlZWNiM2UzMjE0NzEyNDdkODk1Njg0
MGRmMmVlZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZEhvbGRlci5jcHAKKysr
IGIvU291cmNlL1dURi93dGYvVGhyZWFkSG9sZGVyLmNwcApAQCAtMzQsMTIgKzM0LDE3IEBACiAK
ICNpbmNsdWRlICJUaHJlYWRpbmcuaCIKIAorI2luY2x1ZGUgPHd0Zi90aHJlYWRzL1NpZ25hbHMu
aD4KKwogbmFtZXNwYWNlIFdURiB7CiAKIFRocmVhZFNwZWNpZmljS2V5IFRocmVhZEhvbGRlcjo6
bV9rZXkgPSBJbnZhbGlkVGhyZWFkU3BlY2lmaWNLZXk7CiAKIFRocmVhZEhvbGRlcjo6flRocmVh
ZEhvbGRlcigpCiB7CisjaWYgSEFWRShNQUNIX0VYQ0VQVElPTlMpCisgICAgdW5yZWdpc3RlclRo
cmVhZEZvck1hY2hFeGNlcHRpb25IYW5kbGluZygmbV90aHJlYWQuZ2V0KCkpOworI2VuZGlmCiAg
ICAgbV90aHJlYWQtPmRpZEV4aXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
VGhyZWFkTWVzc2FnZS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRNZXNzYWdlLmNwcAppbmRl
eCBmMTRiYzQ1ZDM2MTRjN2M2NjM1ZWIxN2FiMGUyNzI4MTZhMTM3M2RkLi5iOTk0Y2FjZDYyNmQ0
YzZjZmQ1YzE2ODEwOWI1NWI2OWRkMjNiOTk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9U
aHJlYWRNZXNzYWdlLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRNZXNzYWdlLmNwcApA
QCAtMzYsNiArMzYsOSBAQAogI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KICNpbmNsdWRlIDx3dGYv
dGhyZWFkcy9TaWduYWxzLmg+CiAKKyNpZiBIQVZFKE1BQ0hfRVhDRVBUSU9OUykKKyNpbmNsdWRl
IDxtYWNoL3RocmVhZF9hY3QuaD4KKyNlbmRpZgogCiBuYW1lc3BhY2UgV1RGIHsKIApAQCAtODMs
MTIgKzg2LDEyIEBAIHZvaWQgaW5pdGlhbGl6ZVRocmVhZE1lc3NhZ2VzKCkKIH0KIAogU1VQUFJF
U1NfQVNBTgotTWVzc2FnZVN0YXR1cyBzZW5kTWVzc2FnZVNjb3BlZChUaHJlYWQmIHRocmVhZCwg
Y29uc3QgVGhyZWFkTWVzc2FnZSYgbWVzc2FnZSkKK3N0YXRpYyBNZXNzYWdlU3RhdHVzIHNlbmRN
ZXNzYWdlVXNpbmdTaWduYWwoVGhyZWFkJiB0aHJlYWQsIGNvbnN0IFRocmVhZE1lc3NhZ2UmIG1l
c3NhZ2UpCiB7CiAgICAgY29uc3RleHByIFNpZ25hbCBzaWduYWwgPSBTaWduYWw6OlVzcjsKICAg
ICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZTsKICAgICBzdGQ6OmNhbGxfb25jZShvbmNlLCBb
XSB7Ci0gICAgICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKHNpZ25hbCwgW10gKGludCwgc2lnaW5m
b190KiBpbmZvLCB2b2lkKiB1YXApIHsKKyAgICAgICAgaW5zdGFsbFNpZ25hbEhhbmRsZXIoc2ln
bmFsLCBbXSAoU2lnbmFsLCBTaWdJbmZvJiwgUGxhdGZvcm1SZWdpc3RlcnMmIHJlZ2lzdGVycykg
ewogICAgICAgICAgICAgVGhyZWFkKiB0aHJlYWQgPSBUaHJlYWQ6OmN1cnJlbnRNYXlCZU51bGwo
KTsKIAogICAgICAgICAgICAgaWYgKCF0aHJlYWQpIHsKQEAgLTk4LDcgKzEwMSw3IEBAIE1lc3Nh
Z2VTdGF0dXMgc2VuZE1lc3NhZ2VTY29wZWQoVGhyZWFkJiB0aHJlYWQsIGNvbnN0IFRocmVhZE1l
c3NhZ2UmIG1lc3NhZ2UpCiAKICAgICAgICAgICAgIC8vIE5vZGUgc2hvdWxkIGJlIGRlbGV0ZWQg
aW4gdGhlIHNlbmRlciB0aHJlYWQuIERlbGV0aW5nIE5vZGVzIGluIHNpZ25hbCBoYW5kbGVyIGNh
dXNlcyBkZWFkIGxvY2suCiAgICAgICAgICAgICB0aHJlYWQtPnRocmVhZE1lc3NhZ2VzKCkuY29u
c3VtZUFsbFdpdGhOb2RlKFsmXSAoVGhyZWFkTWVzc2FnZURhdGEqIGRhdGEsIE5vZGUqIG5vZGUp
IHsKLSAgICAgICAgICAgICAgICBkYXRhLT5tZXNzYWdlKGluZm8sIHN0YXRpY19jYXN0PHVjb250
ZXh0X3QqPih1YXApKTsKKyAgICAgICAgICAgICAgICBkYXRhLT5tZXNzYWdlKHJlZ2lzdGVycyk7
CiAgICAgICAgICAgICAgICAgLy8gQnkgc2V0dGluZyByYW4gdmFyaWFibGUsICgxKSB0aGUgc2Vu
ZGVyIGFja25vd2xlZGdlcyB0aGUgY29tcGxldGlvbiBhbmQKICAgICAgICAgICAgICAgICAvLyAo
MikgZ2V0cyB0aGUgTm9kZSB0byBiZSBkZWxldGVkLgogICAgICAgICAgICAgICAgIGRhdGEtPnJh
bi5zdG9yZShub2RlKTsKQEAgLTE1Niw2ICsxNTksNjIgQEAgTWVzc2FnZVN0YXR1cyBzZW5kTWVz
c2FnZVNjb3BlZChUaHJlYWQmIHRocmVhZCwgY29uc3QgVGhyZWFkTWVzc2FnZSYgbWVzc2FnZSkK
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCisjaWYgSEFWRShNQUNIX0VY
Q0VQVElPTlMpCitzdGF0aWMgTWVzc2FnZVN0YXR1cyBzZW5kTWVzc2FnZVVzaW5nTWFjaChUaHJl
YWQmIHRocmVhZCwgY29uc3QgVGhyZWFkTWVzc2FnZSYgbWVzc2FnZSkKK3sKKyAgICBzdGF0aWMg
U3RhdGljTG9jayBtZXNzYWdlTG9jazsKKyAgICBhdXRvIGxvY2tob2xkZXIgPSBob2xkTG9jayht
ZXNzYWdlTG9jayk7CisKKyAgICBhdXRvIHJlc3VsdCA9IHRocmVhZC5zdXNwZW5kKCk7CisgICAg
aWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBNZXNzYWdlU3RhdHVzOjpUaHJlYWRFeGl0ZWQ7
CisKKyNpZiBDUFUoWDg2KQorICAgIHVuc2lnbmVkIHVzZXJDb3VudCA9IHNpemVvZihQbGF0Zm9y
bVJlZ2lzdGVycykgLyBzaXplb2YoaW50KTsKKyAgICB0aHJlYWRfc3RhdGVfZmxhdm9yX3QgZmxh
dm9yID0gaTM4Nl9USFJFQURfU1RBVEU7CisjZWxpZiBDUFUoWDg2XzY0KQorICAgIHVuc2lnbmVk
IHVzZXJDb3VudCA9IHg4Nl9USFJFQURfU1RBVEU2NF9DT1VOVDsKKyAgICB0aHJlYWRfc3RhdGVf
Zmxhdm9yX3QgZmxhdm9yID0geDg2X1RIUkVBRF9TVEFURTY0OworI2VsaWYgQ1BVKEFSTSkKKyAg
ICB1bnNpZ25lZCB1c2VyQ291bnQgPSBBUk1fVEhSRUFEX1NUQVRFX0NPVU5UOworICAgIHRocmVh
ZF9zdGF0ZV9mbGF2b3JfdCBmbGF2b3IgPSBBUk1fVEhSRUFEX1NUQVRFOworI2VsaWYgQ1BVKEFS
TTY0KQorICAgIHVuc2lnbmVkIHVzZXJDb3VudCA9IEFSTV9USFJFQURfU1RBVEU2NF9DT1VOVDsK
KyAgICB0aHJlYWRfc3RhdGVfZmxhdm9yX3QgZmxhdm9yID0gQVJNX1RIUkVBRF9TVEFURTY0Owor
I2Vsc2UKKyNlcnJvciBVbmtub3duIEFyY2hpdGVjdHVyZQorI2VuZGlmCisKKyAgICBQbGF0Zm9y
bVJlZ2lzdGVycyByZWdpc3RlcnM7CisgICAgdGhyZWFkX3N0YXRlX3Qgc3RhdGUgPSByZWludGVy
cHJldF9jYXN0PHRocmVhZF9zdGF0ZV90PigmcmVnaXN0ZXJzKTsKKyAgICB0aHJlYWRfZ2V0X3N0
YXRlKHRocmVhZC5tYWNoVGhyZWFkKCksIGZsYXZvciwgc3RhdGUsICZ1c2VyQ291bnQpOworCisg
ICAgbWVzc2FnZShyZWdpc3RlcnMpOworCisgICAgdGhyZWFkX3NldF9zdGF0ZSh0aHJlYWQubWFj
aFRocmVhZCgpLCBmbGF2b3IsIHN0YXRlLCB1c2VyQ291bnQpOworCisgICAgdGhyZWFkLnJlc3Vt
ZSgpOworICAgIHJldHVybiBNZXNzYWdlU3RhdHVzOjpNZXNzYWdlUmFuOworfQorCitzdGF0aWMg
Ym9vbCB1c2VNYWNoID0gZmFsc2U7Cit2b2lkIGRlbGl2ZXJNZXNzYWdlc1VzaW5nTWFjaCgpCit7
CisgICAgdXNlTWFjaCA9IHRydWU7Cit9CisKKyNlbmRpZiAvLyBIQVZFKE1BQ0hfRVhDRVBUSU9O
UykKKworTWVzc2FnZVN0YXR1cyBzZW5kTWVzc2FnZVNjb3BlZChUaHJlYWQmIHRocmVhZCwgY29u
c3QgVGhyZWFkTWVzc2FnZSYgbWVzc2FnZSkKK3sKKyNpZiBIQVZFKE1BQ0hfRVhDRVBUSU9OUykK
KyAgICBpZiAodXNlTWFjaCkKKyAgICAgICAgcmV0dXJuIHNlbmRNZXNzYWdlVXNpbmdNYWNoKHRo
cmVhZCwgbWVzc2FnZSk7CisjZW5kaWYKKyAgICByZXR1cm4gc2VuZE1lc3NhZ2VVc2luZ1NpZ25h
bCh0aHJlYWQsIG1lc3NhZ2UpOworfQorCisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiAjZW5kaWYg
Ly8gVVNFKFBUSFJFQURTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2Fn
ZS5oIGIvU291cmNlL1dURi93dGYvVGhyZWFkTWVzc2FnZS5oCmluZGV4IDlhZTUzZjI5Y2Y3ZThm
YjAwZWY5MjExZDE2Y2UyY2RlZDYwM2VjMWIuLjMwMDQ3MmIzZTcxYzQyZWM4OTg3NGEzZGUwZmYz
NzYxY2E5NjkxMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1RocmVhZE1lc3NhZ2UuaAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRNZXNzYWdlLmgKQEAgLTM2LDcgKzM2LDcgQEAgbmFt
ZXNwYWNlIFdURiB7CiB2b2lkIGluaXRpYWxpemVUaHJlYWRNZXNzYWdlcygpOwogCiBjbGFzcyBU
aHJlYWRNZXNzYWdlRGF0YTsKLXVzaW5nIFRocmVhZE1lc3NhZ2UgPSBTY29wZWRMYW1iZGE8dm9p
ZChzaWdpbmZvX3QqLCB1Y29udGV4dF90Kik+OwordXNpbmcgVGhyZWFkTWVzc2FnZSA9IFNjb3Bl
ZExhbWJkYTx2b2lkKFBsYXRmb3JtUmVnaXN0ZXJzJik+OwogCiBlbnVtIGNsYXNzIE1lc3NhZ2VT
dGF0dXMgewogICAgIE1lc3NhZ2VSYW4sCkBAIC01MSwxMCArNTEsMTQgQEAgTWVzc2FnZVN0YXR1
cyBzZW5kTWVzc2FnZVNjb3BlZChUaHJlYWQmLCBjb25zdCBUaHJlYWRNZXNzYWdlJik7CiB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgogTWVzc2FnZVN0YXR1cyBzZW5kTWVzc2FnZShUaHJlYWQm
IHRhcmdldFRocmVhZCwgY29uc3QgRnVuY3RvciYgZnVuYykKIHsKLSAgICBhdXRvIGxhbWJkYSA9
IHNjb3BlZExhbWJkYVJlZjx2b2lkKHNpZ2luZm9fdCosIHVjb250ZXh0X3QqKT4oZnVuYyk7Cisg
ICAgYXV0byBsYW1iZGEgPSBzY29wZWRMYW1iZGFSZWY8dm9pZChQbGF0Zm9ybVJlZ2lzdGVycyYp
PihmdW5jKTsKICAgICByZXR1cm4gc2VuZE1lc3NhZ2VTY29wZWQodGFyZ2V0VGhyZWFkLCBsYW1i
ZGEpOwogfQogCisjaWYgSEFWRShNQUNIX0VYQ0VQVElPTlMpCit2b2lkIGRlbGl2ZXJNZXNzYWdl
c1VzaW5nTWFjaCgpOworI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6
OnNlbmRNZXNzYWdlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVGhyZWFkaW5nLmggYi9T
b3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaAppbmRleCBkMmU1MzZkZjdhODY5NmQ4ZTZiOTViYTQz
ZTE3M2QzYjU1MGJmMTZhLi4zNTE0ZThjMDlmMGZjOTRkNTM0YmUyZjNiNmU3YzQ5NTBlMGJjZjA1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9UaHJlYWRpbmcuaAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi9UaHJlYWRpbmcuaApAQCAtMTM4LDYgKzEzOCwxMCBAQCBwdWJsaWM6CiAKICNpZiBVU0Uo
UFRIUkVBRFMpCiAgICAgTG9ja2xlc3NCYWc8VGhyZWFkTWVzc2FnZURhdGEqPiYgdGhyZWFkTWVz
c2FnZXMoKSB7IHJldHVybiBtX3RocmVhZE1lc3NhZ2VzOyB9CisKKyNpZiBPUyhEQVJXSU4pCisg
ICAgbWFjaF9wb3J0X3QgbWFjaFRocmVhZCgpIHsgcmV0dXJuIG1fcGxhdGZvcm1UaHJlYWQ7IH0K
KyNlbmRpZgogI2VuZGlmCiAKIHByb3RlY3RlZDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L21hYy9NYWNoRXhjZXB0aW9ucy5kZWZzIGIvU291cmNlL1dURi93dGYvbWFjL01hY2hFeGNlcHRp
b25zLmRlZnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNDIwNTc0MmE0ZWQ1MDBmODA2NGZlZWI0OTU1YTdjOTcwZDk5
YWYwYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL21hYy9NYWNoRXhjZXB0aW9u
cy5kZWZzCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSA8bWFjaC9tYWNoX2V4Yy5kZWZzPgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvdGhyZWFkcy9TaWduYWxzLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3RocmVh
ZHMvU2lnbmFscy5jcHAKaW5kZXggODU1YjI4YjMxNzIxNzI3Y2YxZjQzMWE5MThhMjUxZGMyZTZh
M2RmYy4uNzA3Y2E5YzJkMzJhNzY4MGEzOTgzYTgyZWNmMGI3ZDZiZmVlZWVjYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi93dGYvdGhyZWFkcy9TaWduYWxzLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi90aHJlYWRzL1NpZ25hbHMuY3BwCkBAIC0yOCwyMSArMjgsMjY3IEBACiAKICNpZiBVU0UoUFRI
UkVBRFMpCiAKKyNpZiBIQVZFKE1BQ0hfRVhDRVBUSU9OUykKK2V4dGVybiAiQyIgeworI2luY2x1
ZGUgIk1hY2hFeGNlcHRpb25zU2VydmVyLmgiCit9OworI2VuZGlmCisKICNpbmNsdWRlIDxjc3Rk
aW8+CiAjaW5jbHVkZSA8bXV0ZXg+CiAjaW5jbHVkZSA8c2lnbmFsLmg+CisKKyNpZiBIQVZFKE1B
Q0hfRVhDRVBUSU9OUykKKyNpbmNsdWRlIDxtYWNoL21hY2guaD4KKyNpbmNsdWRlIDxtYWNoL3Ro
cmVhZF9hY3QuaD4KKyNlbmRpZgorCiAjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KICNpbmNsdWRl
IDx3dGYvRGF0YUxvZy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3Rm
L0xvY2tsZXNzQmFnLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVk
ZSA8d3RmL1RocmVhZE1lc3NhZ2UuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKIAog
bmFtZXNwYWNlIFdURiB7CiAKKyAgICAKIHN0YXRpYyBMYXp5TmV2ZXJEZXN0cm95ZWQ8TG9ja2xl
c3NCYWc8U2lnbmFsSGFuZGxlcj4+IGhhbmRsZXJzW3N0YXRpY19jYXN0PHNpemVfdD4oU2lnbmFs
OjpOdW1iZXJPZlNpZ25hbHMpXSA9IHsgfTsKLXN0YXRpYyBzdHJ1Y3Qgc2lnYWN0aW9uIG9sZEFj
dGlvbnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihTaWduYWw6Ok51bWJlck9mU2lnbmFscyldOwogc3Rh
dGljIHN0ZDo6b25jZV9mbGFnIGluaXRpYWxpemVPbmNlRmxhZ3Nbc3RhdGljX2Nhc3Q8c2l6ZV90
PihTaWduYWw6Ok51bWJlck9mU2lnbmFscyldOworc3RhdGljIHN0cnVjdCBzaWdhY3Rpb24gb2xk
QWN0aW9uc1tzdGF0aWNfY2FzdDxzaXplX3Q+KFNpZ25hbDo6TnVtYmVyT2ZTaWduYWxzKV07CisK
KyNpZiBIQVZFKE1BQ0hfRVhDRVBUSU9OUykKKy8vIFlvdSBjYW4gcmVhZCBtb3JlIGFib3V0IG1h
Y2ggZXhjZXB0aW9ucyBoZXJlOgorLy8gaHR0cDovL3d3dy5jcy5jbXUuZWR1L2Fmcy9jcy9wcm9q
ZWN0L21hY2gvcHVibGljL2RvYy91bnB1Ymxpc2hlZC9leGNlcHRpb24ucHMKKy8vIGFuZCB0aGUg
TWFjaCBpbnRlcmZhY2UgR2VuZXJhdG9yIChNaUcpIGhlcmU6CisvLyBodHRwOi8vd3d3LmNzLmNt
dS5lZHUvYWZzL2NzL3Byb2plY3QvbWFjaC9wdWJsaWMvZG9jL3VucHVibGlzaGVkL21pZy5wcwor
CitzdGF0aWMgbWFjaF9wb3J0X3QgZXhjZXB0aW9uUG9ydDsKK3N0YXRpYyBjb25zdGV4cHIgc2l6
ZV90IG1heE1lc3NhZ2VTaXplID0gMSAqIEtCOworCitzdGF0aWMgdm9pZCBzdGFydE1hY2hFeGNl
cHRpb25IYW5kbGVyVGhyZWFkKCkKK3sKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZTsK
KyAgICBzdGQ6OmNhbGxfb25jZShvbmNlLCBbXSB7CisgICAgICAgIGlmIChtYWNoX3BvcnRfYWxs
b2NhdGUobWFjaF90YXNrX3NlbGYoKSwgTUFDSF9QT1JUX1JJR0hUX1JFQ0VJVkUsICZleGNlcHRp
b25Qb3J0KSAhPSBLRVJOX1NVQ0NFU1MpCisgICAgICAgICAgICBDUkFTSCgpOworCisgICAgICAg
IGlmIChtYWNoX3BvcnRfaW5zZXJ0X3JpZ2h0KG1hY2hfdGFza19zZWxmKCksIGV4Y2VwdGlvblBv
cnQsIGV4Y2VwdGlvblBvcnQsIE1BQ0hfTVNHX1RZUEVfTUFLRV9TRU5EKSAhPSBLRVJOX1NVQ0NF
U1MpCisgICAgICAgICAgICBDUkFTSCgpOworCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3Vs
ZCB1c2UgYSBkaXNwYXRjaCBxdWV1ZS4KKyAgICAgICAgLy8gU2VlOiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyMDAzCisgICAgICAgICh2b2lkKVRocmVhZDo6Y3Jl
YXRlKAorICAgICAgICAgICAgIldURiBNYWNoIEV4Y2VwdGlvbiBUaHJlYWQiLCBbXSAoKSB7Cisg
ICAgICAgICAgICAgICAgdW5pb24gTWVzc2FnZSB7CisgICAgICAgICAgICAgICAgICAgIG1hY2hf
bXNnX2hlYWRlcl90IGhlYWRlcjsKKyAgICAgICAgICAgICAgICAgICAgY2hhciBkYXRhW21heE1l
c3NhZ2VTaXplXTsKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIE1lc3NhZ2Ug
bWVzc2FnZUhlYWRlckluOworICAgICAgICAgICAgICAgIE1lc3NhZ2UgbWVzc2FnZUhlYWRlck91
dDsKKworICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgICAg
IGtlcm5fcmV0dXJuX3QgbWVzc2FnZVJlc3VsdCA9IG1hY2hfbXNnKCZtZXNzYWdlSGVhZGVySW4u
aGVhZGVyLCBNQUNIX1JDVl9NU0csIDAsIG1heE1lc3NhZ2VTaXplLCBleGNlcHRpb25Qb3J0LCBN
QUNIX01TR19USU1FT1VUX05PTkUsIE1BQ0hfUE9SVF9OVUxMKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKG1lc3NhZ2VSZXN1bHQgPT0gS0VSTl9TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIW1hY2hfZXhjX3NlcnZlcigmbWVzc2FnZUhlYWRlckluLmhlYWRlciwgJm1l
c3NhZ2VIZWFkZXJPdXQuaGVhZGVyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUkFT
SCgpOworCisgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlUmVzdWx0ID0gbWFjaF9tc2co
Jm1lc3NhZ2VIZWFkZXJPdXQuaGVhZGVyLCBNQUNIX1NFTkRfTVNHLCBtZXNzYWdlSGVhZGVyT3V0
LmhlYWRlci5tc2doX3NpemUsIDAsIG1lc3NhZ2VIZWFkZXJPdXQuaGVhZGVyLm1zZ2hfbG9jYWxf
cG9ydCwgMCwgTUFDSF9QT1JUX05VTEwpOworICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQobWVzc2FnZVJlc3VsdCA9PSBLRVJOX1NVQ0NFU1MpOworICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKCJGYWlsZWQg
dG8gcmVjZWl2ZSBtYWNoIG1lc3NhZ2UgZHVlIHRvICIsIG1hY2hfZXJyb3Jfc3RyaW5nKG1lc3Nh
Z2VSZXN1bHQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgIH0pLmxlYWtSZWYoKTsKKyAgICB9KTsKK30KKworc3RhdGljIFNpZ25hbCBmcm9tTWFjaEV4
Y2VwdGlvbihleGNlcHRpb25fdHlwZV90IHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7Cisg
ICAgY2FzZSBFWENfQkFEX0FDQ0VTUzogcmV0dXJuIFNpZ25hbDo6U2VnVjsKKyAgICBjYXNlIEVY
Q19CQURfSU5TVFJVQ1RJT046IHJldHVybiBTaWduYWw6OklsbDsKKyAgICBjYXNlIEVYQ19CUkVB
S1BPSU5UOiByZXR1cm4gU2lnbmFsOjpUcmFwOworICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0K
KyAgICByZXR1cm4gU2lnbmFsOjpVbmtub3duOworfQorCitzdGF0aWMgZXhjZXB0aW9uX21hc2tf
dCB0b01hY2hNYXNrKFNpZ25hbCBzaWduYWwpCit7CisgICAgc3dpdGNoIChzaWduYWwpIHsKKyAg
ICBjYXNlIFNpZ25hbDo6U2VnVjogcmV0dXJuIEVYQ19NQVNLX0JBRF9BQ0NFU1M7CisgICAgY2Fz
ZSBTaWduYWw6OklsbDogcmV0dXJuIEVYQ19NQVNLX0JBRF9JTlNUUlVDVElPTjsKKyAgICBjYXNl
IFNpZ25hbDo6VHJhcDogcmV0dXJuIEVYQ19NQVNLX0JSRUFLUE9JTlQ7CisgICAgZGVmYXVsdDog
YnJlYWs7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2V4
dGVybiAiQyIgeworCisvLyBXZSBuZWVkIHRvIGltcGxlbWVudCBzdHVicyBmb3IgY2F0Y2hfbWFj
aF9leGNlcHRpb25fcmFpc2UgYW5kIGNhdGNoX21hY2hfZXhjZXB0aW9uX3JhaXNlX3N0YXRlX2lk
ZW50aXR5LgorLy8gVGhlIE1pRyBnZW5lcmF0ZWQgZmlsZSB3aWxsIGZhaWwgdG8gbGluayBvdGhl
cndpc2UsIGV2ZW4gdGhvdWdoIHdlIGRvbid0IHVzZSB0aGUgZnVuY3Rpb25zLiBPbmx5IHRoZQor
Ly8gY2F0Y2hfbWFjaF9leGNlcHRpb25fcmFpc2Vfc3RhdGUgZnVuY3Rpb24gc2hvdWxkIGJlIGNh
bGxlZCBiZWNhdXNlIHdlIHBhc3MgRVhDRVBUSU9OX1NUQVRFIHRvCisvLyB0aHJlYWRfc2V0X2V4
Y2VwdGlvbl9wb3J0cy4KK2tlcm5fcmV0dXJuX3QgY2F0Y2hfbWFjaF9leGNlcHRpb25fcmFpc2Uo
bWFjaF9wb3J0X3QsIG1hY2hfcG9ydF90LCBtYWNoX3BvcnRfdCwgZXhjZXB0aW9uX3R5cGVfdCwg
bWFjaF9leGNlcHRpb25fZGF0YV90LCBtYWNoX21zZ190eXBlX251bWJlcl90KQoreworICAgIGRh
dGFMb2dMbigiV2Ugc2hvdWxkIG5vdCBoYXZlIGNhbGxlZCBjYXRjaF9leGNlcHRpb25fcmFpc2Uo
KSwgcGxlYXNlIGZpbGUgYSBidWcgYXQgYnVncy53ZWJraXQub3JnIik7CisgICAgcmV0dXJuIEtF
Uk5fRkFJTFVSRTsKK30KKwora2Vybl9yZXR1cm5fdCBjYXRjaF9tYWNoX2V4Y2VwdGlvbl9yYWlz
ZV9zdGF0ZV9pZGVudGl0eShtYWNoX3BvcnRfdCwgbWFjaF9wb3J0X3QsIG1hY2hfcG9ydF90LCBl
eGNlcHRpb25fdHlwZV90LCBtYWNoX2V4Y2VwdGlvbl9kYXRhX3QsIG1hY2hfbXNnX3R5cGVfbnVt
YmVyX3QsIGludCosIHRocmVhZF9zdGF0ZV90LCBtYWNoX21zZ190eXBlX251bWJlcl90LCB0aHJl
YWRfc3RhdGVfdCwgIG1hY2hfbXNnX3R5cGVfbnVtYmVyX3QqKQoreworICAgIGRhdGFMb2dMbigi
V2Ugc2hvdWxkIG5vdCBoYXZlIGNhbGxlZCBjYXRjaF9tYWNoX2V4Y2VwdGlvbl9yYWlzZV9zdGF0
ZV9pZGVudGl0eSwgcGxlYXNlIGZpbGUgYSBidWcgYXQgYnVncy53ZWJraXQub3JnIik7CisgICAg
cmV0dXJuIEtFUk5fRkFJTFVSRTsKK30KKwora2Vybl9yZXR1cm5fdCBjYXRjaF9tYWNoX2V4Y2Vw
dGlvbl9yYWlzZV9zdGF0ZSgKKyAgICBtYWNoX3BvcnRfdCBwb3J0LAorICAgIGV4Y2VwdGlvbl90
eXBlX3QgZXhjZXB0aW9uVHlwZSwKKyAgICBjb25zdCBtYWNoX2V4Y2VwdGlvbl9kYXRhX3QgZXhj
ZXB0aW9uRGF0YSwKKyAgICBtYWNoX21zZ190eXBlX251bWJlcl90IGRhdGFDb3VudCwKKyAgICBp
bnQqIHN0YXRlRmxhdm9yLAorICAgIGNvbnN0IHRocmVhZF9zdGF0ZV90IGluU3RhdGUsCisgICAg
bWFjaF9tc2dfdHlwZV9udW1iZXJfdCBpblN0YXRlQ291bnQsCisgICAgdGhyZWFkX3N0YXRlX3Qg
b3V0U3RhdGUsCisgICAgbWFjaF9tc2dfdHlwZV9udW1iZXJfdCogb3V0U3RhdGVDb3VudCkKK3sK
KyAgICBSRUxFQVNFX0FTU0VSVChwb3J0ID09IGV4Y2VwdGlvblBvcnQpOworICAgIFNpZ25hbCBz
aWduYWwgPSBmcm9tTWFjaEV4Y2VwdGlvbihleGNlcHRpb25UeXBlKTsKKyAgICBSRUxFQVNFX0FT
U0VSVChzaWduYWwgIT0gU2lnbmFsOjpVbmtub3duKTsKKworICAgIG1lbWNweShvdXRTdGF0ZSwg
aW5TdGF0ZSwgaW5TdGF0ZUNvdW50ICogc2l6ZW9mKGluU3RhdGVbMF0pKTsKKyAgICAqb3V0U3Rh
dGVDb3VudCA9IGluU3RhdGVDb3VudDsKKworI2lmIENQVShYODZfNjQpCisgICAgUkVMRUFTRV9B
U1NFUlQoKnN0YXRlRmxhdm9yID09IHg4Nl9USFJFQURfU1RBVEUpOworICAgIFBsYXRmb3JtUmVn
aXN0ZXJzJiByZWdpc3RlcnMgPSByZWludGVycHJldF9jYXN0PHg4Nl90aHJlYWRfc3RhdGVfdCo+
KG91dFN0YXRlKS0+dXRzLnRzNjQ7CisjZWxpZiBDUFUoWDg2KQorICAgIFJFTEVBU0VfQVNTRVJU
KCpzdGF0ZUZsYXZvciA9PSB4ODZfVEhSRUFEX1NUQVRFKTsKKyAgICBQbGF0Zm9ybVJlZ2lzdGVy
cyYgcmVnaXN0ZXJzID0gcmVpbnRlcnByZXRfY2FzdDx4ODZfdGhyZWFkX3N0YXRlX3QqPihvdXRT
dGF0ZSktPnV0cy50czMyOworI2VsaWYgQ1BVKEFSTTY0KQorICAgIFJFTEVBU0VfQVNTRVJUKCpz
dGF0ZUZsYXZvciA9PSBBUk1fVEhSRUFEX1NUQVRFKTsKKyAgICBQbGF0Zm9ybVJlZ2lzdGVycyYg
cmVnaXN0ZXJzID0gcmVpbnRlcnByZXRfY2FzdDxhcm1fdW5pZmllZF90aHJlYWRfc3RhdGUqPihv
dXRTdGF0ZSktPnRzXzY0OworI2VsaWYgQ1BVKEFSTSkKKyAgICBSRUxFQVNFX0FTU0VSVCgqc3Rh
dGVGbGF2b3IgPT0gQVJNX1RIUkVBRF9TVEFURSk7CisgICAgUGxhdGZvcm1SZWdpc3RlcnMmIHJl
Z2lzdGVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8YXJtX3VuaWZpZWRfdGhyZWFkX3N0YXRlKj4ob3V0
U3RhdGUpLT50c18zMjsKKyNlbmRpZgorCisgICAgU2lnSW5mbyBpbmZvOworICAgIGlmIChzaWdu
YWwgPT0gU2lnbmFsOjpTZWdWKSB7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoZGF0YUNvdW50LCBk
YXRhQ291bnQgPT0gMik7CisgICAgICAgIGluZm8uZmF1bHRpbmdBZGRyZXNzID0gcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oZXhjZXB0aW9uRGF0YVsxXSk7CisgICAgfQorCisgICAgYm9vbCBkaWRI
YW5kbGUgPSBmYWxzZTsKKyAgICBoYW5kbGVyc1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNpZ25hbCld
LT5pdGVyYXRlKFsmXSAoY29uc3QgU2lnbmFsSGFuZGxlciYgaGFuZGxlcikgeworICAgICAgICBT
aWduYWxBY3Rpb24gaGFuZGxlclJlc3VsdCA9IGhhbmRsZXIoc2lnbmFsLCBpbmZvLCByZWdpc3Rl
cnMpOworICAgICAgICBkaWRIYW5kbGUgfD0gaGFuZGxlclJlc3VsdCA9PSBTaWduYWxBY3Rpb246
OkhhbmRsZWQ7CisgICAgfSk7CisKKyAgICBpZiAoZGlkSGFuZGxlKQorICAgICAgICByZXR1cm4g
S0VSTl9TVUNDRVNTOworICAgIHJldHVybiBLRVJOX0ZBSUxVUkU7Cit9CisKK307CisKK3N0YXRp
YyBib29sIHVzZU1hY2ggeyBmYWxzZSB9Owordm9pZCBoYW5kbGVTaWduYWxzV2l0aE1hY2goKQor
eworICAgIGRlbGl2ZXJNZXNzYWdlc1VzaW5nTWFjaCgpOworICAgIHVzZU1hY2ggPSB0cnVlOwor
fQorCisKK3N0YXRpYyBTdGF0aWNMb2NrIHRocmVhZExvY2s7CitleGNlcHRpb25fbWFza190IGFj
dGl2ZUV4Y2VwdGlvbnMgeyAwIH07CiAKLXN0YXRpYyB2b2lkIGpzY1NpZ25hbEhhbmRsZXIoaW50
IHNpZywgc2lnaW5mb190KiBpbmZvLCB2b2lkKiBtY29udGV4dCkKK2lubGluZSB2b2lkIHNldEV4
Y2VwdGlvblBvcnRzKGNvbnN0IEFic3RyYWN0TG9ja2VyJiwgVGhyZWFkKiB0aHJlYWQpCit7Cisg
ICAga2Vybl9yZXR1cm5fdCByZXN1bHQgPSB0aHJlYWRfc2V0X2V4Y2VwdGlvbl9wb3J0cyh0aHJl
YWQtPm1hY2hUaHJlYWQoKSwgYWN0aXZlRXhjZXB0aW9ucywgZXhjZXB0aW9uUG9ydCwgRVhDRVBU
SU9OX1NUQVRFIHwgTUFDSF9FWENFUFRJT05fQ09ERVMsIE1BQ0hJTkVfVEhSRUFEX1NUQVRFKTsK
KyAgICBpZiAocmVzdWx0ICE9IEtFUk5fU1VDQ0VTUykgeworICAgICAgICBkYXRhTG9nTG4oInRo
cmVhZCBzZXQgcG9ydCBmYWlsZWQgZHVlIHRvICIsIG1hY2hfZXJyb3Jfc3RyaW5nKHJlc3VsdCkp
OworICAgICAgICBDUkFTSCgpOworICAgIH0KK30KKworaW5saW5lIEhhc2hTZXQ8VGhyZWFkKj4m
IGFjdGl2ZVRocmVhZHMoY29uc3QgQWJzdHJhY3RMb2NrZXImKQoreworICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxIYXNoU2V0PFRocmVhZCo+PiBhY3RpdmVUaHJlYWRzOworICAgIHJldHVybiBh
Y3RpdmVUaHJlYWRzOworfQorCit2b2lkIHJlZ2lzdGVyVGhyZWFkRm9yTWFjaEV4Y2VwdGlvbkhh
bmRsaW5nKFRocmVhZCogdGhyZWFkKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sodGhy
ZWFkTG9jayk7CisgICAgYXV0byByZXN1bHQgPSBhY3RpdmVUaHJlYWRzKGxvY2tlcikuYWRkKHRo
cmVhZCk7CisKKyAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIHNldEV4Y2VwdGlv
blBvcnRzKGxvY2tlciwgdGhyZWFkKTsKK30KKwordm9pZCB1bnJlZ2lzdGVyVGhyZWFkRm9yTWFj
aEV4Y2VwdGlvbkhhbmRsaW5nKFRocmVhZCogdGhyZWFkKQoreworICAgIGF1dG8gbG9ja2VyID0g
aG9sZExvY2sodGhyZWFkTG9jayk7CisgICAgYWN0aXZlVGhyZWFkcyhsb2NrZXIpLnJlbW92ZSh0
aHJlYWQpOworfQorCisjZWxzZQorc3RhdGljIGNvbnN0ZXhwciBib29sIHVzZU1hY2ggPSBmYWxz
ZTsKKyNlbmRpZiAvLyBIQVZFKE1BQ0hfRVhDRVBUSU9OUykKKworc3RhdGljIHZvaWQganNjU2ln
bmFsSGFuZGxlcihpbnQsIHNpZ2luZm9fdCosIHZvaWQqKTsKKwordm9pZCBpbnN0YWxsU2lnbmFs
SGFuZGxlcihTaWduYWwgc2lnbmFsLCBTaWduYWxIYW5kbGVyJiYgaGFuZGxlcikKK3sKKyAgICBB
U1NFUlQoc2lnbmFsIDwgU2lnbmFsOjpVbmtub3duKTsKKyNpZiBIQVZFKE1BQ0hfRVhDRVBUSU9O
UykKKyAgICAvLyBTaW5jZSBtYWNoIG9ubHkgaGFzIEVYQ19CQURfQUNDRVNTLCB3aGljaCBjb3Zl
cnMgYm90aCBTZWdWIGFuZCBCdXMsIHdlIGFyYml0YXJpbHkgY2hvb3NlIHRvIG1ha2UKKyAgICAv
LyBtYWNoIEVYQ19CQURfQUNDRVNTZXMgbWFwIHRvIFNlZ1YuCisgICAgLy8gRklYTUU6IFdlIHNo
b3VsZCBqdXN0IHVzZSBhIHNpbmdsZSBTaWduYWw6OkJhZEFjY2VzcyB2YWx1ZSBpbnN0ZWFkIG9m
IFNlZ1YvQnVzLgorICAgIC8vIFNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE3MjA2MworICAgIGlmIChzaWduYWwgPT0gU2lnbmFsOjpCdXMgJiYgdXNlTWFjaCkK
KyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVCghdXNlTWFjaCB8fCBzaWduYWwgIT0gU2lnbmFs
OjpVc3IpOworCisgICAgaWYgKHVzZU1hY2gpCisgICAgICAgIHN0YXJ0TWFjaEV4Y2VwdGlvbkhh
bmRsZXJUaHJlYWQoKTsKKyNlbmRpZgorCisgICAgc3RkOjpjYWxsX29uY2UoaW5pdGlhbGl6ZU9u
Y2VGbGFnc1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNpZ25hbCldLCBbJl0geworICAgICAgICBoYW5k
bGVyc1tzdGF0aWNfY2FzdDxzaXplX3Q+KHNpZ25hbCldLmNvbnN0cnVjdCgpOworCisgICAgICAg
IGlmICghdXNlTWFjaCkgeworICAgICAgICAgICAgc3RydWN0IHNpZ2FjdGlvbiBhY3Rpb247Cisg
ICAgICAgICAgICBhY3Rpb24uc2Ffc2lnYWN0aW9uID0ganNjU2lnbmFsSGFuZGxlcjsKKyAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gc2lnZmlsbHNldCgmYWN0aW9uLnNhX21hc2spOworICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoIXJlc3VsdCk7CisgICAgICAgICAgICBhY3Rpb24uc2FfZmxh
Z3MgPSBTQV9TSUdJTkZPOworICAgICAgICAgICAgcmVzdWx0ID0gc2lnYWN0aW9uKHRvU3lzdGVt
U2lnbmFsKHNpZ25hbCksICZhY3Rpb24sICZvbGRBY3Rpb25zW3N0YXRpY19jYXN0PHNpemVfdD4o
c2lnbmFsKV0pOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXJlc3VsdCk7CisgICAgICAg
IH0KKworICAgIH0pOworCisgICAgaGFuZGxlcnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzaWduYWwp
XS0+YWRkKFdURk1vdmUoaGFuZGxlcikpOworCisjaWYgSEFWRShNQUNIX0VYQ0VQVElPTlMpCisg
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayh0aHJlYWRMb2NrKTsKKyAgICBpZiAodXNlTWFjaCkg
eworICAgICAgICBhY3RpdmVFeGNlcHRpb25zIHw9IHRvTWFjaE1hc2soc2lnbmFsKTsKKworICAg
ICAgICBmb3IgKFRocmVhZCogdGhyZWFkIDogYWN0aXZlVGhyZWFkcyhsb2NrZXIpKQorICAgICAg
ICAgICAgc2V0RXhjZXB0aW9uUG9ydHMobG9ja2VyLCB0aHJlYWQpOworICAgIH0KKyNlbmRpZgor
fQorCit2b2lkIGpzY1NpZ25hbEhhbmRsZXIoaW50IHNpZywgc2lnaW5mb190KiBpbmZvLCB2b2lk
KiB1Y29udGV4dCkKIHsKICAgICBTaWduYWwgc2lnbmFsID0gZnJvbVN5c3RlbVNpZ25hbChzaWcp
OwogCkBAIC02MiwxMCArMzA4LDE2IEBAIHN0YXRpYyB2b2lkIGpzY1NpZ25hbEhhbmRsZXIoaW50
IHNpZywgc2lnaW5mb190KiBpbmZvLCB2b2lkKiBtY29udGV4dCkKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAorICAgIFNpZ0luZm8gc2lnSW5mbzsKKyAgICBpZiAoc2lnbmFsID09IFNpZ25hbDo6
U2VnViB8fCBzaWduYWwgPT0gU2lnbmFsOjpCdXMpCisgICAgICAgIHNpZ0luZm8uZmF1bHRpbmdB
ZGRyZXNzID0gaW5mby0+c2lfYWRkcjsKKworICAgIFBsYXRmb3JtUmVnaXN0ZXJzJiByZWdpc3Rl
cnMgPSByZWdpc3RlcnNGcm9tVUNvbnRleHQocmVpbnRlcnByZXRfY2FzdDx1Y29udGV4dF90Kj4o
dWNvbnRleHQpKTsKKwogICAgIGJvb2wgZGlkSGFuZGxlID0gZmFsc2U7CiAgICAgYm9vbCByZXN0
b3JlRGVmYXVsdEhhbmRsZXIgPSBmYWxzZTsKICAgICBoYW5kbGVyc1tzdGF0aWNfY2FzdDxzaXpl
X3Q+KHNpZ25hbCldLT5pdGVyYXRlKFsmXSAoY29uc3QgU2lnbmFsSGFuZGxlciYgaGFuZGxlcikg
ewotICAgICAgICBzd2l0Y2ggKGhhbmRsZXIoc2lnLCBpbmZvLCBtY29udGV4dCkpIHsKKyAgICAg
ICAgc3dpdGNoIChoYW5kbGVyKHNpZ25hbCwgc2lnSW5mbywgcmVnaXN0ZXJzKSkgewogICAgICAg
ICBjYXNlIFNpZ25hbEFjdGlvbjo6SGFuZGxlZDoKICAgICAgICAgICAgIGRpZEhhbmRsZSA9IHRy
dWU7CiAgICAgICAgICAgICBicmVhazsKQEAgLTg1LDEzICszMzcsMTMgQEAgc3RhdGljIHZvaWQg
anNjU2lnbmFsSGFuZGxlcihpbnQgc2lnLCBzaWdpbmZvX3QqIGluZm8sIHZvaWQqIG1jb250ZXh0
KQogICAgIHN0cnVjdCBzaWdhY3Rpb24mIG9sZEFjdGlvbiA9IG9sZEFjdGlvbnNbc3RhdGljX2Nh
c3Q8c2l6ZV90PihzaWduYWwpXTsKICAgICBpZiAoc2lnbmFsID09IFNpZ25hbDo6VXNyKSB7CiAg
ICAgICAgIGlmIChvbGRBY3Rpb24uc2Ffc2lnYWN0aW9uKQotICAgICAgICAgICAgb2xkQWN0aW9u
LnNhX3NpZ2FjdGlvbihzaWcsIGluZm8sIG1jb250ZXh0KTsKKyAgICAgICAgICAgIG9sZEFjdGlv
bi5zYV9zaWdhY3Rpb24oc2lnLCBpbmZvLCB1Y29udGV4dCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKICAgICBpZiAoIWRpZEhhbmRsZSkgewogICAgICAgICBpZiAob2xkQWN0aW9uLnNhX3Np
Z2FjdGlvbikgewotICAgICAgICAgICAgb2xkQWN0aW9uLnNhX3NpZ2FjdGlvbihzaWcsIGluZm8s
IG1jb250ZXh0KTsKKyAgICAgICAgICAgIG9sZEFjdGlvbi5zYV9zaWdhY3Rpb24oc2lnLCBpbmZv
LCB1Y29udGV4dCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMTAwLDI0
ICszNTIsNiBAQCBzdGF0aWMgdm9pZCBqc2NTaWduYWxIYW5kbGVyKGludCBzaWcsIHNpZ2luZm9f
dCogaW5mbywgdm9pZCogbWNvbnRleHQpCiAgICAgfQogfQogCi12b2lkIGluc3RhbGxTaWduYWxI
YW5kbGVyKFNpZ25hbCBzaWduYWwsIFNpZ25hbEhhbmRsZXImJiBoYW5kbGVyKQotewotICAgIEFT
U0VSVChzaWduYWwgPCBTaWduYWw6OlVua25vd24pOwotICAgIHN0ZDo6Y2FsbF9vbmNlKGluaXRp
YWxpemVPbmNlRmxhZ3Nbc3RhdGljX2Nhc3Q8c2l6ZV90PihzaWduYWwpXSwgWyZdIHsKLSAgICAg
ICAgaGFuZGxlcnNbc3RhdGljX2Nhc3Q8c2l6ZV90PihzaWduYWwpXS5jb25zdHJ1Y3QoKTsKLQot
ICAgICAgICBzdHJ1Y3Qgc2lnYWN0aW9uIGFjdGlvbjsKLSAgICAgICAgYWN0aW9uLnNhX3NpZ2Fj
dGlvbiA9IGpzY1NpZ25hbEhhbmRsZXI7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gc2lnZmlsbHNl
dCgmYWN0aW9uLnNhX21hc2spOwotICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmVzdWx0KTsKLSAg
ICAgICAgYWN0aW9uLnNhX2ZsYWdzID0gU0FfU0lHSU5GTzsKLSAgICAgICAgcmVzdWx0ID0gc2ln
YWN0aW9uKHRvU3lzdGVtU2lnbmFsKHNpZ25hbCksICZhY3Rpb24sICZvbGRBY3Rpb25zW3N0YXRp
Y19jYXN0PHNpemVfdD4oc2lnbmFsKV0pOwotICAgICAgICBSRUxFQVNFX0FTU0VSVCghcmVzdWx0
KTsKLSAgICB9KTsKLQotICAgIGhhbmRsZXJzW3N0YXRpY19jYXN0PHNpemVfdD4oc2lnbmFsKV0t
PmFkZChXVEZNb3ZlKGhhbmRsZXIpKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV1RGCiAKICNlbmRp
ZiAvLyBVU0UoUFRIUkVBRFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90aHJlYWRzL1Np
Z25hbHMuaCBiL1NvdXJjZS9XVEYvd3RmL3RocmVhZHMvU2lnbmFscy5oCmluZGV4IDFlNGViNDZl
YWE3NzRhMWVlODlmNmZiMmRhZWYzMzI2OGNlNTY3NzkuLmE4MThlNWI1MjBlNzBlOWYzYmNmN2Fj
MTQ0Y2E1MjgyNmMyOTI0ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RocmVhZHMvU2ln
bmFscy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RocmVhZHMvU2lnbmFscy5oCkBAIC0yOSw2ICsy
OSw3IEBACiAKICNpbmNsdWRlIDxzaWduYWwuaD4KICNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4K
KyNpbmNsdWRlIDx3dGYvUGxhdGZvcm1SZWdpc3RlcnMuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAK
QEAgLTc5LDcgKzgwLDExIEBAIGVudW0gY2xhc3MgU2lnbmFsQWN0aW9uIHsKICAgICBGb3JjZURl
ZmF1bHQKIH07CiAKLXVzaW5nIFNpZ25hbEhhbmRsZXIgPSBGdW5jdGlvbjxTaWduYWxBY3Rpb24o
aW50LCBzaWdpbmZvX3QqLCB2b2lkKik+Oworc3RydWN0IFNpZ0luZm8geworICAgIHZvaWQqIGZh
dWx0aW5nQWRkcmVzcyB7IDAgfTsKK307CisKK3VzaW5nIFNpZ25hbEhhbmRsZXIgPSBGdW5jdGlv
bjxTaWduYWxBY3Rpb24oU2lnbmFsLCBTaWdJbmZvJiwgUGxhdGZvcm1SZWdpc3RlcnMmKT47CiAK
IC8vIENhbGwgdGhpcyBtZXRob2Qgd2hlbmV2ZXIgeW91IHdhbnQgdG8gaW5zdGFsbCBhIHNpZ25h
bCBoYW5kbGVyLiBJdCdzIG9rIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBsYXppbHkuCiAvLyBOb3Rl
OiBZb3VyIHNpZ25hbCBoYW5kbGVyIHdpbGwgYmUgY2FsbGVkIGV2ZXJ5IHRpbWUgdGhlIGhhbmRs
ZXIgZm9yIHRoZSBkZXNpcmVkIHNpZ25hbCBpcyBjYWxsZWQuCkBAIC04Nyw5ICs5MiwyNSBAQCB1
c2luZyBTaWduYWxIYW5kbGVyID0gRnVuY3Rpb248U2lnbmFsQWN0aW9uKGludCwgc2lnaW5mb190
Kiwgdm9pZCopPjsKIC8vIFRoaXMgZnVuY3Rpb24gaXMgY3VycmVudGx5IGEgb25lIHdheSBzdHJl
ZXQgaS5lLiBvbmNlIGluc3RhbGxlZCwgYSBzaWduYWwgaGFuZGxlciBjYW5ub3QgYmUgdW5pbnN0
YWxsZWQuCiB2b2lkIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbCwgU2lnbmFsSGFuZGxlciYm
KTsKIAorCisjaWYgSEFWRShNQUNIX0VYQ0VQVElPTlMpCitjbGFzcyBUaHJlYWQ7Cit2b2lkIHJl
Z2lzdGVyVGhyZWFkRm9yTWFjaEV4Y2VwdGlvbkhhbmRsaW5nKFRocmVhZCopOwordm9pZCB1bnJl
Z2lzdGVyVGhyZWFkRm9yTWFjaEV4Y2VwdGlvbkhhbmRsaW5nKFRocmVhZCopOworCit2b2lkIGhh
bmRsZVNpZ25hbHNXaXRoTWFjaCgpOworI2VuZGlmIC8vIEhBVkUoTUFDSF9FWENFUFRJT05TKQor
CiB9IC8vIG5hbWVzcGFjZSBXVEYKIAorI2lmIEhBVkUoTUFDSF9FWENFUFRJT05TKQordXNpbmcg
V1RGOjpyZWdpc3RlclRocmVhZEZvck1hY2hFeGNlcHRpb25IYW5kbGluZzsKK3VzaW5nIFdURjo6
dW5yZWdpc3RlclRocmVhZEZvck1hY2hFeGNlcHRpb25IYW5kbGluZzsKK3VzaW5nIFdURjo6aGFu
ZGxlU2lnbmFsc1dpdGhNYWNoOworI2VuZGlmIC8vIEhBVkUoTUFDSF9FWENFUFRJT05TKQorCiB1
c2luZyBXVEY6OlNpZ25hbDsKK3VzaW5nIFdURjo6U2lnSW5mbzsKIHVzaW5nIFdURjo6dG9TeXN0
ZW1TaWduYWw7CiB1c2luZyBXVEY6OmZyb21TeXN0ZW1TaWduYWw7CiB1c2luZyBXVEY6OlNpZ25h
bEFjdGlvbjsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwpp
bmRleCAxN2Y5ZjAxMTEzMTAyYThhNGIxN2ZjZTRhZjFkOTVlYjg2MDA2OWRiLi5kNGJiNGIxY2Y4
Y2RlMjM3N2M0Yjc4MWNlNDYzNTkxZDBmYWZkMWY2IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VM
b2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTctMDUtMTIgIEtl
aXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIE1hY2gg
ZXhjZXB0aW9ucyBpbnN0ZWFkIG9mIHNpZ25hbHMgd2hlcmUgcG9zc2libGUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MTg2NQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE1hcmsgTGFtLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYv
VGhyZWFkTWVzc2FnZXMuY3BwOgorICAgICAgICAocnVuVGhyZWFkTWVzc2FnZVRlc3QpOgorICAg
ICAgICAoVEVTVCk6CisKIDIwMTctMDUtMDkgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
IAogICAgICAgICBSZW1vdmUgc3VwcG9ydCBmb3IgbGVnYWN5IE5vdGlmaWNhdGlvbnMKZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1RocmVhZE1lc3NhZ2VzLmNwcCBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1RocmVhZE1lc3NhZ2VzLmNwcAppbmRleCBk
NjNlOWJmMWU3NTA2OGI2YzFhN2U3ZTZlOGI2N2M0ZWIwNTE1ODgyLi5lNmE1Nzg5NGJiNTE2ZmUx
Y2U3MTNkMDdiZjE4ZjA3MDZlZmE5MzdjIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dURi9UaHJlYWRNZXNzYWdlcy5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XVEYvVGhyZWFkTWVzc2FnZXMuY3BwCkBAIC01MCw3ICs1MCw3IEBAIHN0YXRpYyB2b2lk
IHJ1blRocmVhZE1lc3NhZ2VUZXN0KHVuc2lnbmVkIG51bVNlbmRlcnMsIHVuc2lnbmVkIG51bU1l
c3NhZ2VzKQogICAgIGZvciAodW5zaWduZWQgc2VuZGVySUQgPSAwOyBzZW5kZXJJRCA8IG51bVNl
bmRlcnM7ICsrc2VuZGVySUQpIHsKICAgICAgICAgc2VuZGVyVGhyZWFkc1tzZW5kZXJJRF0gPSBU
aHJlYWQ6OmNyZWF0ZSgiVGhyZWFkTWVzc2FnZSBzZW5kZXIiLCBbc2VuZGVySUQsIG51bU1lc3Nh
Z2VzLCByZWNlaXZlclRocmVhZCwgJm1lc3NhZ2VzUnVuLCAmaGFuZGxlcnNSdW5dICgpIHsKICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1NZXNzYWdlczsgKytpKSB7Ci0g
ICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBzZW5kTWVzc2FnZSgqcmVjZWl2ZXJUaHJlYWQu
Z2V0KCksIFtzZW5kZXJJRCwgJmhhbmRsZXJzUnVuXSAoc2lnaW5mb190KiwgdWNvbnRleHRfdCop
IHsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHNlbmRNZXNzYWdlKCpyZWNlaXZlclRo
cmVhZC5nZXQoKSwgW3NlbmRlcklELCAmaGFuZGxlcnNSdW5dIChQbGF0Zm9ybVJlZ2lzdGVycyYp
IHsKICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcnNSdW5bc2VuZGVySURdKys7CiAgICAgICAg
ICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUocmVzdWx0ID09IFdURjo6
TWVzc2FnZVN0YXR1czo6TWVzc2FnZVJhbik7CkBAIC05NSw3ICs5NSw3IEBAIHB1YmxpYzoKIFRF
U1QoVGhyZWFkTWVzc2FnZSwgU2lnbmFsc1dvcmtPbkV4aXQpCiB7CiAgICAgc3RhdGljIGJvb2wg
aGFuZGxlclJhbiA9IGZhbHNlOwotICAgIGluc3RhbGxTaWduYWxIYW5kbGVyKFNpZ25hbDo6VXNy
LCBbXSAoaW50LCBzaWdpbmZvX3QqLCB2b2lkKikgLT4gU2lnbmFsQWN0aW9uIHsKKyAgICBpbnN0
YWxsU2lnbmFsSGFuZGxlcihTaWduYWw6OlVzciwgW10gKFNpZ25hbCwgU2lnSW5mbyYsIFBsYXRm
b3JtUmVnaXN0ZXJzJikgLT4gU2lnbmFsQWN0aW9uIHsKICAgICAgICAgZGF0YUxvZ0xuKCJoZXJl
Iik7CiAgICAgICAgIGhhbmRsZXJSYW4gPSB0cnVlOwogICAgICAgICByZXR1cm4gU2lnbmFsQWN0
aW9uOjpIYW5kbGVkOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>