<?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>120326</bug_id>
          
          <creation_ts>2013-08-26 14:56:49 -0700</creation_ts>
          <short_desc>CodeBlock compilation and installation should be simplified and rationalized</short_desc>
          <delta_ts>2013-08-29 11:24:55 -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>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>120477</dependson>
          <blocked>112838</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>abrhm</cc>
    
    <cc>barraclough</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>ggaren</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kadam</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>ossy</cc>
    
    <cc>rakuco</cc>
    
    <cc>rego+ews</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>zarvai</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>921179</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-26 14:56:49 -0700</bug_when>
    <thetext>We currently do a really bizarre dance when creating code blocks.  When compiling, we typically install the compiled code in Executable first and then in the CodeBlock - that&apos;s messed up.  We establish the Executable&lt;-&gt;CodeBlock relationship at random times depending on code path.  We have duplicated code between the LLInt initialization path, the baseline JIT compilation path, and the DFG/FTL compilation paths.  It&apos;s incredibly confusing.  This confusion makes it hard to do things like creating a custom temporary CodeBlock just for DFG-&gt;FTL OSR entry, or having the DFG trigger its own replacement compilation (i.e. DFG-&gt;FTL tier-up).

It also means that the DFG::Plan and DFG::Worklist have super-special knowledge of the CodeBlock&lt;-&gt;Executable relationship.  That makes it hard to establish new such relationships, for example for FTL code.

Instead we should have a simplified system of rules:

1) You can always ask an Executable for a new code block.  It will give you one, and you will own it for now.  You can hold onto it for as long as you like.

2) You can always ask an Executable to install a CodeBlock.  It will do all of the things needed to ensure that calls are redirected from the old one to the new one, and that the GC knows about the increased costs.

3) You can always ask a CodeBlock to prepare itself for execution - i.e. go from being just a thing that holds bytecode to being a thing that has proper entrypoints.  When you make such a request, you should be able to specify which execution engine to use, and the CodeBlock should figure it out.

4) Asking a CodeBlock to prepare for execution should have an optional asynchronous mode, in which case you should pass a callback describing what to do when compilation finishes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921180</commentid>
    <comment_count>1</comment_count>
      <attachid>209681</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-26 14:57:41 -0700</bug_when>
    <thetext>Created attachment 209681
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921649</commentid>
    <comment_count>2</comment_count>
      <attachid>209794</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-27 13:48:09 -0700</bug_when>
    <thetext>Created attachment 209794
almost there</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921654</commentid>
    <comment_count>3</comment_count>
      <attachid>209797</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-27 13:54:29 -0700</bug_when>
    <thetext>Created attachment 209797
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921787</commentid>
    <comment_count>4</comment_count>
      <attachid>209834</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-27 18:53:43 -0700</bug_when>
    <thetext>Created attachment 209834
almost compiles</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921794</commentid>
    <comment_count>5</comment_count>
      <attachid>209837</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-27 19:43:38 -0700</bug_when>
    <thetext>Created attachment 209837
almost

Almost done.  I think I just need to write some FTL glue to keep FTL builds working and then I&apos;ll be done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921795</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-08-27 19:45:49 -0700</bug_when>
    <thetext>Attachment 209837 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.h&apos;, u&apos;Source/JavaScriptCore/bytecode/DeferredCompilationCallback.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/DeferredCompilationCallback.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGDriver.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGDriver.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGFailedFinalizer.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGFailedFinalizer.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGFinalizer.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGJITFinalizer.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGJITFinalizer.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSRExitPreparation.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOperations.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGPlan.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGPlan.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGWorklist.cpp&apos;, u&apos;Source/JavaScriptCore/heap/Heap.h&apos;, u&apos;Source/JavaScriptCore/interpreter/Interpreter.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITDriver.h&apos;, u&apos;Source/JavaScriptCore/jit/JITStubs.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITToDFGDeferredCompilationCallback.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITToDFGDeferredCompilationCallback.h&apos;, u&apos;Source/JavaScriptCore/llint/LLIntEntrypoints.cpp&apos;, u&apos;Source/JavaScriptCore/llint/LLIntEntrypoints.h&apos;, u&apos;Source/JavaScriptCore/llint/LLIntSlowPaths.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/ArrayPrototype.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/CommonSlowPaths.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/CompilationResult.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/CompilationResult.h&apos;, u&apos;Source/JavaScriptCore/runtime/Executable.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/Executable.h&apos;, u&apos;Source/JavaScriptCore/runtime/ExecutionHarness.h&apos;]&quot; exit_code: 1
Source/JavaScriptCore/jit/JITStubs.cpp:1058:  The return type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/JavaScriptCore/dfg/DFGPlan.h:56:  The parameter name &quot;codeBlock&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 2 in 30 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>921796</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-27 19:49:56 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Attachment 209837 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.h&apos;, u&apos;Source/JavaScriptCore/bytecode/DeferredCompilationCallback.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/DeferredCompilationCallback.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGDriver.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGDriver.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGFailedFinalizer.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGFailedFinalizer.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGFinalizer.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGJITFinalizer.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGJITFinalizer.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSRExitPreparation.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOperations.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGPlan.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGPlan.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGWorklist.cpp&apos;, u&apos;Source/JavaScriptCore/heap/Heap.h&apos;, u&apos;Source/JavaScriptCore/interpreter/Interpreter.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITDriver.h&apos;, u&apos;Source/JavaScriptCore/jit/JITStubs.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITToDFGDeferredCompilationCallback.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITToDFGDeferredCompilationCallback.h&apos;, u&apos;Source/JavaScriptCore/llint/LLIntEntrypoints.cpp&apos;, u&apos;Source/JavaScriptCore/llint/LLIntEntrypoints.h&apos;, u&apos;Source/JavaScriptCore/llint/LLIntSlowPaths.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/ArrayPrototype.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/CommonSlowPaths.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/CompilationResult.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/CompilationResult.h&apos;, u&apos;Source/JavaScriptCore/runtime/Executable.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/Executable.h&apos;, u&apos;Source/JavaScriptCore/runtime/ExecutionHarness.h&apos;]&quot; exit_code: 1
&gt; Source/JavaScriptCore/jit/JITStubs.cpp:1058:  The return type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]

False.

&gt; Source/JavaScriptCore/dfg/DFGPlan.h:56:  The parameter name &quot;codeBlock&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]

Fixed.

&gt; Total errors found: 2 in 30 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921797</commentid>
    <comment_count>8</comment_count>
      <attachid>209837</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-08-27 19:51:19 -0700</bug_when>
    <thetext>Comment on attachment 209837
almost

Attachment 209837 did not pass qt-ews (qt):
Output: http://webkit-queues.appspot.com/results/1605112</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921798</commentid>
    <comment_count>9</comment_count>
      <attachid>209837</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-08-27 19:53:10 -0700</bug_when>
    <thetext>Comment on attachment 209837
almost

Attachment 209837 did not pass qt-wk2-ews (qt-wk2):
Output: http://webkit-queues.appspot.com/results/1625122</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921801</commentid>
    <comment_count>10</comment_count>
      <attachid>209837</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-08-27 20:02:29 -0700</bug_when>
    <thetext>Comment on attachment 209837
almost

Attachment 209837 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/1619121</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921802</commentid>
    <comment_count>11</comment_count>
      <attachid>209837</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-08-27 20:07:08 -0700</bug_when>
    <thetext>Comment on attachment 209837
almost

Attachment 209837 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/1628129</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921814</commentid>
    <comment_count>12</comment_count>
      <attachid>209837</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2013-08-27 20:47:23 -0700</bug_when>
    <thetext>Comment on attachment 209837
almost

Attachment 209837 did not pass gtk-ews (gtk):
Output: http://webkit-queues.appspot.com/results/1626109</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921823</commentid>
    <comment_count>13</comment_count>
      <attachid>209837</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-08-27 21:29:56 -0700</bug_when>
    <thetext>Comment on attachment 209837
almost

Attachment 209837 did not pass win-ews (win):
Output: http://webkit-queues.appspot.com/results/1623130</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921829</commentid>
    <comment_count>14</comment_count>
      <attachid>209845</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-27 21:46:03 -0700</bug_when>
    <thetext>Created attachment 209845
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921830</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-08-27 21:48:03 -0700</bug_when>
    <thetext>Attachment 209845 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/GNUmakefile.list.am&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/JavaScriptCore/Target.pri&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.h&apos;, u&apos;Source/JavaScriptCore/bytecode/DeferredCompilationCallback.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/DeferredCompilationCallback.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGDriver.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGDriver.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGFailedFinalizer.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGFailedFinalizer.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGFinalizer.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGJITFinalizer.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGJITFinalizer.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSRExitPreparation.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOperations.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGPlan.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGPlan.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGWorklist.cpp&apos;, u&apos;Source/JavaScriptCore/heap/Heap.h&apos;, u&apos;Source/JavaScriptCore/interpreter/Interpreter.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITDriver.h&apos;, u&apos;Source/JavaScriptCore/jit/JITStubs.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITToDFGDeferredCompilationCallback.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITToDFGDeferredCompilationCallback.h&apos;, u&apos;Source/JavaScriptCore/llint/LLIntEntrypoints.cpp&apos;, u&apos;Source/JavaScriptCore/llint/LLIntEntrypoints.h&apos;, u&apos;Source/JavaScriptCore/llint/LLIntSlowPaths.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/ArrayPrototype.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/CommonSlowPaths.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/CompilationResult.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/CompilationResult.h&apos;, u&apos;Source/JavaScriptCore/runtime/Executable.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/Executable.h&apos;, u&apos;Source/JavaScriptCore/runtime/ExecutionHarness.h&apos;]&quot; exit_code: 1
Source/JavaScriptCore/jit/JITStubs.cpp:1058:  The return type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 1 in 34 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>921832</commentid>
    <comment_count>16</comment_count>
      <attachid>209846</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-27 21:48:33 -0700</bug_when>
    <thetext>Created attachment 209846
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>921833</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-08-27 21:51:35 -0700</bug_when>
    <thetext>Attachment 209846 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/GNUmakefile.list.am&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/JavaScriptCore/Target.pri&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.h&apos;, u&apos;Source/JavaScriptCore/bytecode/DeferredCompilationCallback.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/DeferredCompilationCallback.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGDriver.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGDriver.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGFailedFinalizer.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGFailedFinalizer.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGFinalizer.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGJITFinalizer.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGJITFinalizer.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOSRExitPreparation.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGOperations.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGPlan.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGPlan.h&apos;, u&apos;Source/JavaScriptCore/dfg/DFGWorklist.cpp&apos;, u&apos;Source/JavaScriptCore/heap/Heap.h&apos;, u&apos;Source/JavaScriptCore/interpreter/Interpreter.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITDriver.h&apos;, u&apos;Source/JavaScriptCore/jit/JITStubs.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITToDFGDeferredCompilationCallback.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JITToDFGDeferredCompilationCallback.h&apos;, u&apos;Source/JavaScriptCore/llint/LLIntEntrypoints.cpp&apos;, u&apos;Source/JavaScriptCore/llint/LLIntEntrypoints.h&apos;, u&apos;Source/JavaScriptCore/llint/LLIntSlowPaths.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/ArrayPrototype.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/CommonSlowPaths.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/CompilationResult.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/CompilationResult.h&apos;, u&apos;Source/JavaScriptCore/runtime/Executable.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/Executable.h&apos;, u&apos;Source/JavaScriptCore/runtime/ExecutionHarness.h&apos;]&quot; exit_code: 1
Source/JavaScriptCore/jit/JITStubs.cpp:1058:  The return type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 1 in 34 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>922022</commentid>
    <comment_count>18</comment_count>
      <attachid>209846</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2013-08-28 08:39:47 -0700</bug_when>
    <thetext>Comment on attachment 209846
the patch

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

r=me if you switch to having create methods for the new refcounted classes

&gt; Source/JavaScriptCore/bytecode/DeferredCompilationCallback.h:38
&gt; +public:
&gt; +    DeferredCompilationCallback();

Can we give this a protected constructor and a public create method?

&gt; Source/JavaScriptCore/jit/JITToDFGDeferredCompilationCallback.h:37
&gt; +public:
&gt; +    JITToDFGDeferredCompilationCallback();

can we make the constructor private, and give this a PassRefPtr returning create() method?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>922167</commentid>
    <comment_count>19</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-28 13:21:59 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 209846 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=209846&amp;action=review
&gt; 
&gt; r=me if you switch to having create methods for the new refcounted classes
&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/DeferredCompilationCallback.h:38
&gt; &gt; +public:
&gt; &gt; +    DeferredCompilationCallback();
&gt; 
&gt; Can we give this a protected constructor and a public create method?

Protected constructor yes - but no need for a create method since it&apos;s an abstract base class.

&gt; 
&gt; &gt; Source/JavaScriptCore/jit/JITToDFGDeferredCompilationCallback.h:37
&gt; &gt; +public:
&gt; &gt; +    JITToDFGDeferredCompilationCallback();
&gt; 
&gt; can we make the constructor private, and give this a PassRefPtr returning create() method?

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>922340</commentid>
    <comment_count>20</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-28 21:02:22 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/154804</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>922500</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-08-29 09:35:52 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 120477</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>922565</commentid>
    <comment_count>22</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-08-29 11:24:55 -0700</bug_when>
    <thetext>Relanded in http://trac.webkit.org/changeset/154824</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>209681</attachid>
            <date>2013-08-26 14:57:41 -0700</date>
            <delta_ts>2013-08-27 13:48:09 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>31369</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAxNTQ2MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY4OSw2ICsyNjg5LDQ4IEBAIHZvaWQgQ29kZUJs
b2NrOjpjb3B5UG9zdFBhcnNlRGF0YUZyb21BbHQKICAgICBjb3B5UG9zdFBhcnNlRGF0YUZyb20o
bV9hbHRlcm5hdGl2ZS5nZXQoKSk7CiB9CiAKK0NvbXBpbGF0aW9uUmVzdWx0IENvZGVCbG9jazo6
cHJlcGFyZUZvckV4ZWN1dGlvbigKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIEpJVENvZGU6OkpJVFR5
cGUgaml0VHlwZSwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0LAorICAgIHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXgsIFBhc3NSZWZQdHI8RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPiBjYWxs
YmFjaykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIAorICAgIGlmIChqaXRUeXBl
ID09IEpJVENvZGU6OkludGVycHJldGVyVGh1bmspIHsKKyAgICAgICAgc3dpdGNoIChjb2RlVHlw
ZSgpKSB7CisgICAgICAgIGNhc2UgR2xvYmFsQ29kZToKKyAgICAgICAgICAgIExMSW50OjpnZXRF
bnRyeXBvaW50KHZtLCBzdGF0aWNfY2FzdDxHbG9iYWxDb2RlQmxvY2sqPih0aGlzKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFdmFsQ29kZToKKyAgICAgICAgICAgIExMSW50
OjpnZXRFbnRyeXBvaW50KHZtLCBzdGF0aWNfY2FzdDxFdmFsQ29kZUJsb2NrKj4odGhpcykpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRnVuY3Rpb25Db2RlOgorICAgICAgICAg
ICAgTExJbnQ6OmdldEZ1bmN0aW9uRW50cnlwb2ludCh2bSwgc3RhdGljX2Nhc3Q8RnVuY3Rpb25D
b2RlQmxvY2sqPih0aGlzKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gQ29tcGlsYXRpb25TdWNjZXNzZnVsOworICAgIH0KKyAgICAKKyNpZiBFTkFCTEUo
SklUKQorICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSkpIHsKKyAgICAg
ICAgQVNTRVJUKGVmZm9ydCA9PSBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgICAgICBDb21w
aWxhdGlvblJlc3VsdCByZXN1bHQgPSBERkc6OnRyeUNvbXBpbGUoZXhlYywgdGhpcywgYnl0ZWNv
ZGVJbmRleCwgY2FsbGJhY2spOworICAgICAgICBBU1NFUlQocmVzdWx0ICE9IENvbXBpbGF0aW9u
RGVmZXJyZWQgfHwgY2FsbGJhY2spOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAg
ICAKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgaml0Q29kZVdpdGhBcml0eUNoZWNrOworICAg
IFJlZlB0cjxKSVRDb2RlPiBqaXRDb2RlID0gSklUOjpjb21waWxlKCZ2bSwgdGhpcywgZWZmb3J0
LCAmaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKKyAgICBpZiAoIWppdENvZGUpCisgICAgICAgIHJl
dHVybiBDb21waWxhdGlvbkZhaWxlZDsKKyAgICBjb2RlQmxvY2stPnNldEpJVENvZGUoaml0Q29k
ZSwgaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKKyAgICByZXR1cm4gQ29tcGlsYXRpb25TdWNjZXNz
ZnVsOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZWZmb3J0KTsKKyAgICBVTlVTRURfUEFSQU0o
Ynl0ZWNvZGVJbmRleCk7CisgICAgcmV0dXJuIENvbXBpbGF0aW9uRmFpbGVkOworI2VuZGlmIC8v
IEVOQUJMRShKSVQpCit9CisKICNpZiBFTkFCTEUoSklUKQogdm9pZCBDb2RlQmxvY2s6OnJlb3B0
aW1pemUoKQogewpAQCAtMjcyNiwxMSArMjc2OCw2IEBAIEpTT2JqZWN0KiBQcm9ncmFtQ29kZUJs
b2NrOjpjb21waWxlT3B0aW0KICAgICByZXR1cm4gZXJyb3I7CiB9CiAKLUNvbXBpbGF0aW9uUmVz
dWx0IFByb2dyYW1Db2RlQmxvY2s6OnJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlKFBh
c3NSZWZQdHI8REZHOjpQbGFuPiBwbGFuKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxQcm9n
cmFtRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+cmVwbGFjZVdpdGhEZWZlcnJlZE9w
dGltaXplZENvZGUocGxhbik7Ci19Ci0KIEpTT2JqZWN0KiBFdmFsQ29kZUJsb2NrOjpjb21waWxl
T3B0aW1pemVkKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUsIENvbXBpbGF0aW9uUmVz
dWx0JiByZXN1bHQsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiB7CiAgICAgaWYgKEpJVENvZGU6
OmlzSGlnaGVyVGllcihyZXBsYWNlbWVudCgpLT5qaXRUeXBlKCksIGppdFR5cGUoKSkpIHsKQEAg
LTI3NDEsMTEgKzI3NzgsNiBAQCBKU09iamVjdCogRXZhbENvZGVCbG9jazo6Y29tcGlsZU9wdGlt
aXplCiAgICAgcmV0dXJuIGVycm9yOwogfQogCi1Db21waWxhdGlvblJlc3VsdCBFdmFsQ29kZUJs
b2NrOjpyZXBsYWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZShQYXNzUmVmUHRyPERGRzo6UGxh
bj4gcGxhbikKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihvd25l
ckV4ZWN1dGFibGUoKSktPnJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlKHBsYW4pOwot
fQotCiBKU09iamVjdCogRnVuY3Rpb25Db2RlQmxvY2s6OmNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0
YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSwgQ29tcGlsYXRpb25SZXN1bHQmIHJlc3VsdCwgdW5z
aWduZWQgYnl0ZWNvZGVJbmRleCkKIHsKICAgICBpZiAoSklUQ29kZTo6aXNIaWdoZXJUaWVyKHJl
cGxhY2VtZW50KCktPmppdFR5cGUoKSwgaml0VHlwZSgpKSkgewpAQCAtMjc1NSwxMSArMjc4Nyw2
IEBAIEpTT2JqZWN0KiBGdW5jdGlvbkNvZGVCbG9jazo6Y29tcGlsZU9wdGkKICAgICBKU09iamVj
dCogZXJyb3IgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFi
bGUoKSktPmNvbXBpbGVPcHRpbWl6ZWRGb3IoZXhlYywgc2NvcGUsIHJlc3VsdCwgYnl0ZWNvZGVJ
bmRleCwgbV9pc0NvbnN0cnVjdG9yID8gQ29kZUZvckNvbnN0cnVjdCA6IENvZGVGb3JDYWxsKTsK
ICAgICByZXR1cm4gZXJyb3I7CiB9Ci0KLUNvbXBpbGF0aW9uUmVzdWx0IEZ1bmN0aW9uQ29kZUJs
b2NrOjpyZXBsYWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZShQYXNzUmVmUHRyPERGRzo6UGxh
bj4gcGxhbikKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4o
b3duZXJFeGVjdXRhYmxlKCkpLT5yZXBsYWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZUZvcihw
bGFuLCBtX2lzQ29uc3RydWN0b3IgPyBDb2RlRm9yQ29uc3RydWN0IDogQ29kZUZvckNhbGwpOwot
fQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCiBERkc6OkNhcGFiaWxpdHlMZXZlbCBQcm9n
cmFtQ29kZUJsb2NrOjpjYXBhYmlsaXR5TGV2ZWxJbnRlcm5hbCgpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxNTQ2MzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJERkdPU1JFbnRyeS5oIgogI2luY2x1ZGUgIkRG
R09TUkV4aXQuaCIKICNpbmNsdWRlICJERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmgiCisjaW5jbHVk
ZSAiRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiRXZhbENvZGVDYWNo
ZS5oIgogI2luY2x1ZGUgIkV4ZWN1dGlvbkNvdW50ZXIuaCIKICNpbmNsdWRlICJFeHByZXNzaW9u
UmFuZ2VJbmZvLmgiCkBAIC0yOTIsMTcgKzI5Myw5IEBAIHB1YmxpYzoKICAgICB9CiAjaWYgRU5B
QkxFKERGR19KSVQpCiAgICAgdmlydHVhbCBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVj
U3RhdGUqLCBKU1Njb3BlKiwgQ29tcGlsYXRpb25SZXN1bHQmLCB1bnNpZ25lZCBieXRlY29kZUlu
ZGV4KSA9IDA7Ci0gICAgdmlydHVhbCBDb21waWxhdGlvblJlc3VsdCByZXBsYWNlV2l0aERlZmVy
cmVkT3B0aW1pemVkQ29kZShQYXNzUmVmUHRyPERGRzo6UGxhbj4pID0gMDsKICNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKICAgICB2b2lkIGpldHRpc29uKCk7Ci0gICAgQ29tcGlsYXRpb25SZXN1
bHQgaml0Q29tcGlsZShFeGVjU3RhdGUqIGV4ZWMpCi0gICAgewotICAgICAgICBpZiAoaml0VHlw
ZSgpICE9IEpJVENvZGU6OkludGVycHJldGVyVGh1bmspIHsKLSAgICAgICAgICAgIEFTU0VSVChq
aXRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOwotICAgICAgICAgICAgcmV0dXJuIENv
bXBpbGF0aW9uTm90TmVlZGVkOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBqaXRDb21waWxl
SW1wbChleGVjKTsKLSAgICB9CisgICAgQ29tcGlsYXRpb25SZXN1bHQgcHJlcGFyZUZvckV4ZWN1
dGlvbihFeGVjU3RhdGUqLCBKSVRDb2RlOjpKSVRUeXBlLCBKSVRDb21waWxhdGlvbkVmZm9ydCwg
dW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgUGFzc1JlZlB0cjxEZWZlcnJlZENvbXBpbGF0aW9uQ2Fs
bGJhY2s+ID0gMCk7CiAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCkgPSAwOwog
CiAgICAgdmlydHVhbCBERkc6OkNhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWxJbnRlcm5h
bCgpID0gMDsKQEAgLTExOTYsNyArMTE4OSw2IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICNpZiBF
TkFCTEUoREZHX0pJVCkKICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4
ZWNTdGF0ZSosIEpTU2NvcGUqLCBDb21waWxhdGlvblJlc3VsdCYsIHVuc2lnbmVkIGJ5dGVjb2Rl
SW5kZXgpOwotICAgIHZpcnR1YWwgQ29tcGlsYXRpb25SZXN1bHQgcmVwbGFjZVdpdGhEZWZlcnJl
ZE9wdGltaXplZENvZGUoUGFzc1JlZlB0cjxERkc6OlBsYW4+KTsKICNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKIAogICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNvbkltcGwoKTsKQEAgLTEyMjUsNyAr
MTIxNyw2IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICB2
aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBD
b21waWxhdGlvblJlc3VsdCYsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwotICAgIHZpcnR1YWwg
Q29tcGlsYXRpb25SZXN1bHQgcmVwbGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGUoUGFzc1Jl
ZlB0cjxERkc6OlBsYW4+KTsKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIAogICAgIHZpcnR1
YWwgdm9pZCBqZXR0aXNvbkltcGwoKTsKQEAgLTEyNTQsNyArMTI0NSw2IEBAIHB1YmxpYzoKIHBy
b3RlY3RlZDoKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21w
aWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBDb21waWxhdGlvblJlc3VsdCYsIHVu
c2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwotICAgIHZpcnR1YWwgQ29tcGlsYXRpb25SZXN1bHQgcmVw
bGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGUoUGFzc1JlZlB0cjxERkc6OlBsYW4+KTsKICNl
bmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIAogICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNvbkltcGwo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWZlcnJlZENvbXBpbGF0
aW9uQ2FsbGJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9EZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitEZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OkRlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaygpIHsg
fQorRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjp+RGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrKCkgeyB9CisKK30gLy8gSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9EZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFja19oCisjZGVmaW5lIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFj
a19oCisKKyNpbmNsdWRlICJDb21waWxhdGlvblJlc3VsdC5oIgorI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb2RlQmxvY2s7CisKK2NsYXNz
IERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjayA6IHB1YmxpYyBSZWZDb3VudGVkPERlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjaz4geworcHVibGljOgorICAgIERlZmVycmVkQ29tcGlsYXRpb25D
YWxsYmFjaygpOworICAgIHZpcnR1YWwgfkRlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaygpOwor
CisgICAgdmlydHVhbCB2b2lkIGNvbXBpbGF0aW9uRGlkQ29tcGxldGUoQ29kZUJsb2NrKiwgQ29t
cGlsYXRpb25SZXN1bHQpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYg
Ly8gRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAxNTQ2MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTksNiArMjk5LDggQEAg
Q29tcGlsYXRpb25SZXN1bHQgUGxhbjo6ZmluYWxpemUoUmVmUHRyPAogICAgIAogICAgIHJlYWxs
eUFkZChqaXRDb2RlLT5kZmdDb21tb24oKSk7CiAgICAgCisgICAgCisgICAgCiAgICAgcmV0dXJu
IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hl
YXAuaAkocmV2aXNpb24gMTU0NjMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODQsNiArMTg0LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIGNvbnN0IEpJVFN0dWJSb3V0aW5lU2V0JiBqaXRTdHViUm91dGluZXMoKSB7IHJldHVy
biBtX2ppdFN0dWJSb3V0aW5lczsgfQogICAgICAgICAKICAgICAgICAgdm9pZCBhZGRSZWZlcmVu
Y2UoSlNDZWxsKiwgQXJyYXlCdWZmZXIqKTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgaXNEZWZl
cnJlZCgpIGNvbnN0IHsgcmV0dXJuICEhbV9kZWZlcnJhbERlcHRoOyB9CiAKICAgICBwcml2YXRl
OgogICAgICAgICBmcmllbmQgY2xhc3MgQ29kZUJsb2NrOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDE1NDYzMikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDE5LDcgKzEwMTks
NyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZSkKICAgICAgICAgaWYgKE9w
dGlvbnM6OnZlcmJvc2VPU1IoKSkKICAgICAgICAgICAgIGRhdGFMb2coIkNvbnNpZGVyaW5nIE9T
UiAiLCAqY29kZUJsb2NrLCAiIC0+ICIsICpjb2RlQmxvY2stPnJlcGxhY2VtZW50KCksICIuXG4i
KTsKICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhbiBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQsIHRoZW4g
aXQgbXVzdCBiZSB0aGUgY2FzZSB0aGF0IHdlIGVudGVyZWQKLSAgICAgICAgLy8gY3RpX29wdGlt
aXplIGZyb20gYSBsb29wLiBUaGF0J3MgYmVjYXVzZSBpcyB0aGVyZSdzIGFuIG9wdGltaXplZCBy
ZXBsYWNlbWVudCwKKyAgICAgICAgLy8gY3RpX29wdGltaXplIGZyb20gYSBsb29wLiBUaGF0J3Mg
YmVjYXVzZSBpZiB0aGVyZSdzIGFuIG9wdGltaXplZCByZXBsYWNlbWVudCwKICAgICAgICAgLy8g
dGhlbiBhbGwgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbiB3aWxsIGJlIHJlbGlua2VkIHRvIHRoZSBy
ZXBsYWNlbWVudCBhbmQgc28KICAgICAgICAgLy8gdGhlIHByb2xvZ3VlIE9TUiB3aWxsIG5ldmVy
IGZpcmUuCiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
RW50cnlwb2ludHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludEVudHJ5cG9pbnRzLmNwcAkocmV2aXNpb24gMTU0NjMyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xMSW50RW50cnlwb2ludHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNyw1
MyArMzcsNjcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBMTEludCB7CiAKLXZvaWQg
Z2V0RnVuY3Rpb25FbnRyeXBvaW50KFZNJiB2bSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5k
LCBSZWZQdHI8SklUQ29kZT4mIGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgYXJpdHlD
aGVjaykKK3ZvaWQgZ2V0RnVuY3Rpb25FbnRyeXBvaW50KFZNJiB2bSwgRnVuY3Rpb25Db2RlQmxv
Y2sqIGNvZGVCbG9jaykKIHsKKyAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQgPSBjb2Rl
QmxvY2stPnNwZWNpYWxpemF0aW9uS2luZCgpOworICAgIAogICAgIGlmICghdm0uY2FuVXNlSklU
KCkpIHsKICAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpIHsKLSAgICAgICAgICAgIGpp
dENvZGUgPSBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZShNYWNyb0Fzc2VtYmxlckNvZGVSZWY6
OmNyZWF0ZUxMSW50Q29kZVJlZihsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9wcm9sb2d1ZSksIEpJ
VENvZGU6OkludGVycHJldGVyVGh1bmspKTsKLSAgICAgICAgICAgIGFyaXR5Q2hlY2sgPSBNYWNy
b0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUxMSW50Q29kZVB0cihsbGludF9mdW5jdGlvbl9mb3Jf
Y2FsbF9hcml0eV9jaGVjayk7CisgICAgICAgICAgICBjb2RlQmxvY2stPnNldEpJVENvZGUoCisg
ICAgICAgICAgICAgICAgYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUoTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfcHJvbG9n
dWUpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSksCisgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVMTEludENvZGVQdHIobGxpbnRfZnVuY3Rpb25fZm9yX2Nh
bGxfYXJpdHlfY2hlY2spKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAg
ICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOwotICAgICAgICBqaXRDb2RlID0g
YWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVM
TEludENvZGVSZWYobGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9wcm9sb2d1ZSksIEpJVENv
ZGU6OkludGVycHJldGVyVGh1bmspKTsKLSAgICAgICAgYXJpdHlDaGVjayA9IE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjo6Y3JlYXRlTExJbnRDb2RlUHRyKGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1
Y3RfYXJpdHlfY2hlY2spOworICAgICAgICBjb2RlQmxvY2stPnNldEpJVENvZGUoCisgICAgICAg
ICAgICBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZShNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNy
ZWF0ZUxMSW50Q29kZVJlZihsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X3Byb2xvZ3VlKSwg
SklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyOjpjcmVhdGVMTEludENvZGVQdHIobGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9h
cml0eV9jaGVjaykpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogI2lmIEVOQUJMRShK
SVQpCiAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpIHsKLSAgICAgICAgaml0Q29kZSA9IGFk
b3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKHZtLmdldENUSVN0dWIoZnVuY3Rpb25Gb3JDYWxsRW50
cnlUaHVua0dlbmVyYXRvciksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKTsKLSAgICAgICAg
YXJpdHlDaGVjayA9IHZtLmdldENUSVN0dWIoZnVuY3Rpb25Gb3JDYWxsQXJpdHlDaGVja1RodW5r
R2VuZXJhdG9yKS5jb2RlKCk7CisgICAgICAgIGNvZGVCbG9jay0+c2V0SklUQ29kZSgKKyAgICAg
ICAgICAgIGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKHZtLmdldENUSVN0dWIoZnVuY3Rpb25G
b3JDYWxsRW50cnlUaHVua0dlbmVyYXRvciksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSwK
KyAgICAgICAgICAgIHZtLmdldENUSVN0dWIoZnVuY3Rpb25Gb3JDYWxsQXJpdHlDaGVja1RodW5r
R2VuZXJhdG9yKS5jb2RlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgQVNTRVJU
KGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7Ci0gICAgaml0Q29kZSA9IGFkb3B0UmVmKG5ldyBE
aXJlY3RKSVRDb2RlKHZtLmdldENUSVN0dWIoZnVuY3Rpb25Gb3JDb25zdHJ1Y3RFbnRyeVRodW5r
R2VuZXJhdG9yKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpOwotICAgIGFyaXR5Q2hlY2sg
PSB2bS5nZXRDVElTdHViKGZ1bmN0aW9uRm9yQ29uc3RydWN0QXJpdHlDaGVja1RodW5rR2VuZXJh
dG9yKS5jb2RlKCk7CisgICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKAorICAgICAgICBhZG9wdFJl
ZihuZXcgRGlyZWN0SklUQ29kZSh2bS5nZXRDVElTdHViKGZ1bmN0aW9uRm9yQ29uc3RydWN0RW50
cnlUaHVua0dlbmVyYXRvciksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSwKKyAgICAgICAg
dm0uZ2V0Q1RJU3R1YihmdW5jdGlvbkZvckNvbnN0cnVjdEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRv
cikuY29kZSgpKTsKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogfQogCi12b2lkIGdldEV2YWxFbnRy
eXBvaW50KFZNJiB2bSwgUmVmUHRyPEpJVENvZGU+JiBqaXRDb2RlKQordm9pZCBnZXRFdmFsRW50
cnlwb2ludChWTSYgdm0sIEV2YWxDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBpZiAoIXZt
LmNhblVzZUpJVCgpKSB7Ci0gICAgICAgIGppdENvZGUgPSBhZG9wdFJlZihuZXcgRGlyZWN0SklU
Q29kZShNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZUxMSW50Q29kZVJlZihsbGludF9ldmFs
X3Byb2xvZ3VlKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpOworICAgICAgICBjb2RlQmxv
Y2stPnNldEpJVENvZGUoCisgICAgICAgICAgICBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZShN
YWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZUxMSW50Q29kZVJlZihsbGludF9ldmFsX3Byb2xv
Z3VlKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpLAorICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQotI2lmIEVOQUJMRShKSVQp
ICAgIAotICAgIGppdENvZGUgPSBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZSh2bS5nZXRDVElT
dHViKGV2YWxFbnRyeVRodW5rR2VuZXJhdG9yKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykp
OworI2lmIEVOQUJMRShKSVQpCisgICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKAorICAgICAgICBh
ZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZSh2bS5nZXRDVElTdHViKGV2YWxFbnRyeVRodW5rR2Vu
ZXJhdG9yKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpLAorICAgICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIoKSk7CiAjZW5kaWYKIH0KIAogdm9pZCBnZXRQcm9ncmFtRW50cnlwb2ludChW
TSYgdm0sIFJlZlB0cjxKSVRDb2RlPiYgaml0Q29kZSkKIHsKICAgICBpZiAoIXZtLmNhblVzZUpJ
VCgpKSB7Ci0gICAgICAgIGppdENvZGUgPSBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZShNYWNy
b0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZUxMSW50Q29kZVJlZihsbGludF9wcm9ncmFtX3Byb2xv
Z3VlKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpOworICAgICAgICBjb2RlQmxvY2stPnNl
dEpJVENvZGUoCisgICAgICAgICAgICBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZShNYWNyb0Fz
c2VtYmxlckNvZGVSZWY6OmNyZWF0ZUxMSW50Q29kZVJlZihsbGludF9wcm9ncmFtX3Byb2xvZ3Vl
KSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2lmIEVOQUJMRShKSVQpCi0g
ICAgaml0Q29kZSA9IGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKHZtLmdldENUSVN0dWIocHJv
Z3JhbUVudHJ5VGh1bmtHZW5lcmF0b3IpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSk7Cisg
ICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKAorICAgICAgICBhZG9wdFJlZihuZXcgRGlyZWN0SklU
Q29kZSh2bS5nZXRDVElTdHViKHByb2dyYW1FbnRyeVRodW5rR2VuZXJhdG9yKSwgSklUQ29kZTo6
SW50ZXJwcmV0ZXJUaHVuaykpLAorICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKSk7CiAj
ZW5kaWYKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RW50cnlw
b2ludHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRF
bnRyeXBvaW50cy5oCShyZXZpc2lvbiAxNTQ2MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnRFbnRyeXBvaW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NCwxOCArNDQsMTggQEAg
Y2xhc3MgUHJvZ3JhbUNvZGVCbG9jazsKIAogbmFtZXNwYWNlIExMSW50IHsKIAotdm9pZCBnZXRG
dW5jdGlvbkVudHJ5cG9pbnQoVk0mLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLCBSZWZQdHI8SklU
Q29kZT4mLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGFyaXR5Q2hlY2spOwotdm9pZCBnZXRFdmFs
RW50cnlwb2ludChWTSYsIFJlZlB0cjxKSVRDb2RlPiYpOwotdm9pZCBnZXRQcm9ncmFtRW50cnlw
b2ludChWTSYsIFJlZlB0cjxKSVRDb2RlPiYpOwordm9pZCBnZXRGdW5jdGlvbkVudHJ5cG9pbnQo
Vk0mLCBGdW5jdGlvbkNvZGVCbG9jayopOwordm9pZCBnZXRFdmFsRW50cnlwb2ludChWTSYsIEV2
YWxDb2RlQmxvY2sqKTsKK3ZvaWQgZ2V0UHJvZ3JhbUVudHJ5cG9pbnQoVk0mLCBQcm9ncmFtQ29k
ZUJsb2NrKik7CiAKLWlubGluZSB2b2lkIGdldEVudHJ5cG9pbnQoVk0mIHZtLCBFdmFsQ29kZUJs
b2NrKiwgUmVmUHRyPEpJVENvZGU+JiBqaXRDb2RlKQoraW5saW5lIHZvaWQgZ2V0RW50cnlwb2lu
dChWTSYgdm0sIEV2YWxDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKLSAgICBnZXRFdmFsRW50cnlw
b2ludCh2bSwgaml0Q29kZSk7CisgICAgZ2V0RXZhbEVudHJ5cG9pbnQodm0sIGNvZGVCbG9jayk7
CiB9CiAKLWlubGluZSB2b2lkIGdldEVudHJ5cG9pbnQoVk0mIHZtLCBQcm9ncmFtQ29kZUJsb2Nr
KiwgUmVmUHRyPEpJVENvZGU+JiBqaXRDb2RlKQoraW5saW5lIHZvaWQgZ2V0RW50cnlwb2ludChW
TSYgdm0sIFByb2dyYW1Db2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKLSAgICBnZXRQcm9ncmFtRW50
cnlwb2ludCh2bSwgaml0Q29kZSk7CisgICAgZ2V0UHJvZ3JhbUVudHJ5cG9pbnQodm0sIGNvZGVC
bG9jayk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpMTEludApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGlsYXRpb25SZXN1bHQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21waWxhdGlvblJlc3VsdC5oCShyZXZpc2lv
biAxNTQ2MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21waWxhdGlvblJl
c3VsdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCwyOSBAQAogCiBuYW1lc3BhY2UgSlND
IHsKIAotZW51bSBDb21waWxhdGlvblJlc3VsdCB7IENvbXBpbGF0aW9uRmFpbGVkLCBDb21waWxh
dGlvbkludmFsaWRhdGVkLCBDb21waWxhdGlvblN1Y2Nlc3NmdWwsIENvbXBpbGF0aW9uTm90TmVl
ZGVkLCBDb21waWxhdGlvbkRlZmVycmVkIH07CitlbnVtIENvbXBpbGF0aW9uUmVzdWx0IHsKKyAg
ICAvLyBXZSB0cmllZCB0byBjb21waWxlIHRoZSBjb2RlLCBidXQgd2UgY291bGRuJ3QgY29tcGls
ZSBpdC4gVGhpcyBjb3VsZCBiZQorICAgIC8vIGJlY2F1c2Ugd2UgcmFuIG91dCBvZiBtZW1vcnks
IG9yIGJlY2F1c2UgdGhlIGNvbXBpbGVyIGVuY291bnRlcmVkIGFuCisgICAgLy8gaW50ZXJuYWwg
ZXJyb3IgYW5kIGRlY2lkZWQgdG8gYmFpbCBvdXQgZ3JhY2VmdWxseS4gRWl0aGVyIHdheSwgdGhp
cyBpbXBsaWVzCisgICAgLy8gdGhhdCB3ZSBzaG91bGRuJ3QgdHJ5IHRvIGNvbXBpbGUgdGhpcyBj
b2RlIGJsb2NrIGFnYWluLgorICAgIENvbXBpbGF0aW9uRmFpbGVkLAorICAgIAorICAgIC8vIFRo
ZSBwcm9maWxpbmcgYXNzdW1wdGlvbnMgdGhhdCB3ZXJlIGZlZCBpbnRvIHRoZSBjb21waWxlciB3
ZXJlIGludmFsaWRhdGVkCisgICAgLy8gZXZlbiBiZWZvcmUgd2UgZmluaXNoZWQgY29tcGlsaW5n
LiBUaGlzIG1lYW5zIHdlIHNob3VsZCB0cnkgYWdhaW46IGluIHN1Y2gKKyAgICAvLyBjYXNlcyB0
aGUgcHJvZmlsaW5nIHdpbGwgbm93IGJlIHVwZGF0ZWQgYW5kIHRoZSBuZXh0IGNvbXBpbGF0aW9u
IHdvbid0CisgICAgLy8gZW5jb3VudGVyIHRoZSBzYW1lIHByb2JsZW0uIEJ1dCBpdCBkb2VzIG1l
YW4gdGhhdCB3ZSBzaG91bGQgZXhlcmNpc2UKKyAgICAvLyBleHBvbmVudGlhbCBiYWNrLW9mZiwg
dG8gZ2V0IGV2ZW4gbW9yZSBwcm9maWxpbmcgc28gdGhhdCBuZXcgcHJvZmlsaW5nCisgICAgLy8g
cGF0aG9sb2dpZXMgYXJlbid0IGVuY291bnRlcmVkLgorICAgIENvbXBpbGF0aW9uSW52YWxpZGF0
ZWQsCisgICAgCisgICAgLy8gVGhlIGNvbXBpbGF0aW9uIHN1Y2NlZWRlZCBhbmQgdGhlIGNvZGUg
YmxvY2sgbm93IGhhcyBKSVRDb2RlIGZvciB0aGUgbmV3bHkKKyAgICAvLyBjb21waWxlZCBjb2Rl
LgorICAgIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bCwKKyAgICAKKyAgICAvLyBXZSBkZWNpZGVkIHRv
IGRvIHRoZSBjb21waWxhdGlvbiBhc3luY2hyb25vdXNseS4gVGhpcyBtZWFucyB0aGF0IHdlIGhh
dmVuJ3QKKyAgICAvLyB5ZXQgY29tcGlsZWQgdGhlIGNvZGUuCisgICAgQ29tcGlsYXRpb25EZWZl
cnJlZAorfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAxNTQ2MzIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzUsNiArNzUsODEgQEAgSW50cmluc2ljIEV4ZWN1dGFibGVCYXNlOjppbnRyaW5zaWMoKSBj
bwogfQogI2VuZGlmCiAKK3ZvaWQgRXhlY3V0YWJsZUJhc2U6Omluc3RhbGxDb2RlKENvZGVCbG9j
ayogZ2VuZXJpY0NvZGVCbG9jaykKK3sKKyAgICBWTSYgdm0gPSAqZ2VuZXJpY0NvZGVCbG9jay0+
dm0oKTsKKyAgICAKKyAgICBBU1NFUlQodm0uaGVhcC5pc0RlZmVycmVkKCkpOworICAgIAorICAg
IGlmIChqaXRDb2RlKQorICAgICAgICB2bS5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29zdChzaXpl
b2YoQ29kZUJsb2NrKSArIGppdENvZGUtPnNpemUoKSk7CisgICAgZWxzZQorICAgICAgICB2bS5o
ZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29zdChzaXplb2YoQ29kZUJsb2NrKSk7CisgICAgCisgICAg
Q29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kID0gZ2VuZXJpY0NvZGVCbG9jay0+c3BlY2lhbGl6
YXRpb25LaW5kKCk7CisgICAgCisgICAgUmVmUHRyPENvZGVCbG9jaz4gb2xkQ29kZUJsb2NrOwor
ICAgIAorICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgQ29kZUZvckNhbGw6CisgICAgICAg
IG1faml0Q29kZUZvckNhbGwgPSBjb2RlQmxvY2stPmppdENvZGUoKTsKKyAgICAgICAgbV9qaXRD
b2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrID0gY29kZUJsb2NrLT5qaXRDb2RlV2l0aEFyaXR5Q2hl
Y2soKTsKKyAgICAgICAgbV9udW1QYXJhbWV0ZXJzRm9yQ2FsbCA9IGNvZGVCbG9jay0+bnVtUGFy
YW1ldGVycygpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvZGVGb3JDb25zdHJ1Y3Q6Cisg
ICAgICAgIG1faml0Q29kZUZvckNvbnN0cnVjdCA9IGNvZGVCbG9jay0+aml0Q29kZSgpOworICAg
ICAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjayA9IGNvZGVCbG9jay0+aml0
Q29kZVdpdGhBcml0eUNoZWNrKCk7CisgICAgICAgIG1fbnVtUGFyYW1ldGVyc0ZvckNvbnN0cnVj
dCA9IGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgCisgICAgc3dpdGNoIChnZW5lcmljQ29kZUJsb2NrLT5jb2RlVHlwZSgpKSB7CisgICAgY2Fz
ZSBHbG9iYWxDb2RlOiB7CisgICAgICAgIFByb2dyYW1FeGVjdXRhYmxlKiBleGVjdXRhYmUgPSBq
c0Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPih0aGlzKTsKKyAgICAgICAgR2xvYmFsQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBzdGF0aWNfY2FzdDxHbG9iYWxDb2RlQmxvY2sqPihnZW5lcmljQ29kZUJs
b2NrKTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVCghY29kZUJsb2NrLT5qaXRDb2RlV2l0aEFy
aXR5Q2hlY2soKSk7CisgICAgICAgIEFTU0VSVCghY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkp
OworICAgICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ2FsbCk7CisgICAgICAgIAorICAgICAg
ICBvbGRDb2RlQmxvY2sgPSBleGVjdXRhYmxlLT5tX3Byb2dyYW1Db2RlQmxvY2s7CisgICAgICAg
IGV4ZWN1dGFibGUtPm1fcHJvZ3JhbUNvZGVCbG9jayA9IGNvZGVCbG9jazsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEV2YWxDb2RlOiB7CisgICAgICAgIEV2YWxF
eGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PEV2YWxFeGVjdXRhYmxlKj4odGhpcyk7Cisg
ICAgICAgIEV2YWxDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHN0YXRpY19jYXN0PEV2YWxDb2RlQmxv
Y2sqPihnZW5lcmljQ29kZUJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVCghaml0Q29k
ZVdpdGhBcml0eUNoZWNrKTsKKyAgICAgICAgQVNTRVJUKCFjb2RlQmxvY2stPm51bVBhcmFtZXRl
cnMoKSk7CisgICAgICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDYWxsKTsKKyAgICAgICAgCisg
ICAgICAgIG9sZENvZGVCbG9jayA9IGV4ZWN1dGFibGUtPm1fZXZhbENvZGVCbG9jazsKKyAgICAg
ICAgZXhlY3V0YWJsZS0+bV9ldmFsQ29kZUJsb2NrID0gY29kZUJsb2NrOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgRnVuY3Rpb25Db2RlOiB7CisgICAgICAgIEZ1
bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUq
Pih0aGlzKTsKKyAgICAgICAgRnVuY3Rpb25Db2RlQmxvY2sqIGNvZGVCbG9jayA9IHN0YXRpY19j
YXN0PEZ1bmN0aW9uQ29kZUJsb2NrKj4oZ2VuZXJpY0NvZGVCbG9jayk7CisgICAgICAgIAorICAg
ICAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICAgICAgY2FzZSBDb2RlRm9yQ2FsbDoKKyAgICAgICAg
ICAgIG9sZENvZGVCbG9jayA9IGV4ZWN1dGFibGUtPm1fY29kZUJsb2NrRm9yQ2FsbDsKKyAgICAg
ICAgICAgIGV4ZWN1dGFibGUtPm1fY29kZUJsb2NrRm9yQ2FsbCA9IGNvZGVCbG9jazsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvZGVGb3JDb25zdHJ1Y3Q6CisgICAgICAgICAg
ICBvbGRDb2RlQmxvY2sgPSBleGVjdXRhYmxlLT5tX2NvZGVCbG9ja0ZvckNvbnN0cnVjdDsKKyAg
ICAgICAgICAgIGV4ZWN1dGFibGUtPm1fY29kZUJsb2NrRm9yQ29uc3RydWN0ID0gY29kZUJsb2Nr
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfSB9
CisKKyAgICBvbGRDb2RlQmxvY2stPnVubGlua0luY29taW5nQ2FsbHMoKTsKK30KKwogY29uc3Qg
Q2xhc3NJbmZvIE5hdGl2ZUV4ZWN1dGFibGU6OnNfaW5mbyA9IHsgIk5hdGl2ZUV4ZWN1dGFibGUi
LCAmRXhlY3V0YWJsZUJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShOYXRp
dmVFeGVjdXRhYmxlKSB9OwogCiAjaWYgRU5BQkxFKEpJVCkKQEAgLTI0MCwxNCArMzE1LDYgQEAg
SlNPYmplY3QqIEV2YWxFeGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYQogICAgIHJldHVybiAwOwog
fQogCi0jaWYgRU5BQkxFKERGR19KSVQpCi1Db21waWxhdGlvblJlc3VsdCBFdmFsRXhlY3V0YWJs
ZTo6cmVwbGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGUoUGFzc1JlZlB0cjxERkc6OlBsYW4+
IHBsYW4pCi17Ci0gICAgcmV0dXJuIEpTQzo6cmVwbGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENv
ZGUoCi0gICAgICAgIHBsYW4sIG1fZXZhbENvZGVCbG9jaywgbV9qaXRDb2RlRm9yQ2FsbCwgMCwg
MCk7Ci19Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0KICNpZiBFTkFCTEUoSklUKQogdm9p
ZCBFdmFsRXhlY3V0YWJsZTo6amV0dGlzb25PcHRpbWl6ZWRDb2RlKFZNJiB2bSkKIHsKQEAgLTM0
NCwxNCArNDExLDYgQEAgSlNPYmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjpjb21waWxlSW50ZQog
ICAgIHJldHVybiAwOwogfQogCi0jaWYgRU5BQkxFKERGR19KSVQpCi1Db21waWxhdGlvblJlc3Vs
dCBQcm9ncmFtRXhlY3V0YWJsZTo6cmVwbGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGUoUGFz
c1JlZlB0cjxERkc6OlBsYW4+IHBsYW4pCi17Ci0gICAgcmV0dXJuIEpTQzo6cmVwbGFjZVdpdGhE
ZWZlcnJlZE9wdGltaXplZENvZGUoCi0gICAgICAgIHBsYW4sIG1fcHJvZ3JhbUNvZGVCbG9jaywg
bV9qaXRDb2RlRm9yQ2FsbCwgMCwgMCk7Ci19Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0K
ICNpZiBFTkFCTEUoSklUKQogdm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6amV0dGlzb25PcHRpbWl6
ZWRDb2RlKFZNJiB2bSkKIHsKQEAgLTUzOCwxNSArNTk3LDYgQEAgSlNPYmplY3QqIEZ1bmN0aW9u
RXhlY3V0YWJsZTo6Y29tcGlsZUZvcgogICAgIHJldHVybiAwOwogfQogCi0jaWYgRU5BQkxFKERG
R19KSVQpCi1Db21waWxhdGlvblJlc3VsdCBGdW5jdGlvbkV4ZWN1dGFibGU6OnJlcGxhY2VXaXRo
RGVmZXJyZWRPcHRpbWl6ZWRDb2RlRm9yQ2FsbChQYXNzUmVmUHRyPERGRzo6UGxhbj4gcGxhbikK
LXsKLSAgICByZXR1cm4gSlNDOjpyZXBsYWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZSgKLSAg
ICAgICAgcGxhbiwgbV9jb2RlQmxvY2tGb3JDYWxsLCBtX2ppdENvZGVGb3JDYWxsLCAmbV9qaXRD
b2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrLAotICAgICAgICAmbV9udW1QYXJhbWV0ZXJzRm9yQ2Fs
bCk7Ci19Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0KIEpTT2JqZWN0KiBGdW5jdGlvbkV4
ZWN1dGFibGU6OmNvbXBpbGVGb3JDb25zdHJ1Y3RJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIEpT
U2NvcGUqIHNjb3BlLCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUsIENvbXBpbGF0aW9uUmVzdWx0
KiByZXN1bHQsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiB7CiAgICAgU2FtcGxpbmdSZWdpb24g
c2FtcGxpbmdSZWdpb24oc2FtcGxpbmdEZXNjcmlwdGlvbihqaXRUeXBlKSk7CkBAIC01NzAsMTUg
KzYyMCw2IEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3IKICAgICBy
ZXR1cm4gMDsKIH0KIAotI2lmIEVOQUJMRShERkdfSklUKQotQ29tcGlsYXRpb25SZXN1bHQgRnVu
Y3Rpb25FeGVjdXRhYmxlOjpyZXBsYWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZUZvckNvbnN0
cnVjdChQYXNzUmVmUHRyPERGRzo6UGxhbj4gcGxhbikKLXsKLSAgICByZXR1cm4gSlNDOjpyZXBs
YWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZSgKLSAgICAgICAgcGxhbiwgbV9jb2RlQmxvY2tG
b3JDb25zdHJ1Y3QsIG1faml0Q29kZUZvckNvbnN0cnVjdCwKLSAgICAgICAgJm1faml0Q29kZUZv
ckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrLCAmbV9udW1QYXJhbWV0ZXJzRm9yQ29uc3RydWN0KTsK
LX0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLQogI2lmIEVOQUJMRShKSVQpCiB2b2lkIEZ1
bmN0aW9uRXhlY3V0YWJsZTo6amV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ2FsbChWTSYgdm0pCiB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCShyZXZp
c2lvbiAxNTQ2MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0NCw4ICsyNDQsMTEgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gTExJbnQ6OkNMb29wOjpjYXRjaFJvdXRpbmVGb3IoY2F0Y2hQQ0ZvckludGVycHJldGVy
KTsKICNlbmRpZgogICAgIH0KKyAgICAKICNlbmRpZiAvLyBFTkFCTEUoSklUIHx8IEVOQUJMRShM
TElOVF9DX0xPT1ApCiAKKyAgICB2b2lkIGluc3RhbGxDb2RlKENvZGVCbG9jayosIFBhc3NSZWZQ
dHI8SklUQ29kZT4sIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ss
IENvZGVTcGVjaWFsaXphdGlvbktpbmQpOworCiBwcm90ZWN0ZWQ6CiAgICAgRXhlY3V0YWJsZUJh
c2UqIG1fcHJldjsKICAgICBFeGVjdXRhYmxlQmFzZSogbV9uZXh0OwpAQCAtNDQyLDcgKzQ0NSw2
IEBAIHB1YmxpYzoKICAgICAgICAgCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgSlNPYmplY3Qq
IGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgSlNTY29wZSosIENvbXBpbGF0aW9uUmVzdWx0
JiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7Ci0gICAgQ29tcGlsYXRpb25SZXN1bHQgcmVwbGFj
ZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGUoUGFzc1JlZlB0cjxERkc6OlBsYW4+KTsKICNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKICAgICAgICAgCiAjaWYgRU5BQkxFKEpJVCkKQEAgLTQ4MSw2
ICs0ODMsNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZGdW5jdGlvbkRlY2xzKCkg
eyByZXR1cm4gbV91bmxpbmtlZEV2YWxDb2RlQmxvY2stPm51bWJlck9mRnVuY3Rpb25EZWNscygp
OyB9CiAKIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEV4ZWN1dGFibGVCYXNlOwogICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRy
ZW4gfCBTY3JpcHRFeGVjdXRhYmxlOjpTdHJ1Y3R1cmVGbGFnczsKICAgICBFdmFsRXhlY3V0YWJs
ZShFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgYm9vbCk7CiAKQEAgLTUyMCw3ICs1MjMs
NiBAQCBwdWJsaWM6CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBKU09iamVjdCogY29tcGls
ZU9wdGltaXplZChFeGVjU3RhdGUqLCBKU1Njb3BlKiwgQ29tcGlsYXRpb25SZXN1bHQmLCB1bnNp
Z25lZCBieXRlY29kZUluZGV4KTsKLSAgICBDb21waWxhdGlvblJlc3VsdCByZXBsYWNlV2l0aERl
ZmVycmVkT3B0aW1pemVkQ29kZShQYXNzUmVmUHRyPERGRzo6UGxhbj4pOwogI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQogICAgICAgICAKICNpZiBFTkFCTEUoSklUKQpAQCAtNTU3LDYgKzU1OSw4
IEBAIHB1YmxpYzoKICAgICBFeGVjdXRhYmxlSW5mbyBleGVjdXRhYmxlSW5mbygpIGNvbnN0IHsg
cmV0dXJuIEV4ZWN1dGFibGVJbmZvKG5lZWRzQWN0aXZhdGlvbigpLCB1c2VzRXZhbCgpLCBpc1N0
cmljdE1vZGUoKSwgZmFsc2UpOyB9CiAKIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEV4ZWN1
dGFibGVCYXNlOworICAgIAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBTY3JpcHRFeGVjdXRhYmxlOjpTdHJ1Y3R1cmVG
bGFnczsKIAogICAgIFByb2dyYW1FeGVjdXRhYmxlKEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNv
ZGUmKTsKQEAgLTYxNCw3ICs2MTgsNiBAQCBwdWJsaWM6CiAKICNpZiBFTkFCTEUoREZHX0pJVCkK
ICAgICBKU09iamVjdCogY29tcGlsZU9wdGltaXplZEZvckNhbGwoRXhlY1N0YXRlKiwgSlNTY29w
ZSosIENvbXBpbGF0aW9uUmVzdWx0JiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7Ci0gICAgQ29t
cGlsYXRpb25SZXN1bHQgcmVwbGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGVGb3JDYWxsKFBh
c3NSZWZQdHI8REZHOjpQbGFuPik7CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAgICAgICAg
IAogI2lmIEVOQUJMRShKSVQpCkBAIC02NDUsNyArNjQ4LDYgQEAgcHVibGljOgogCiAjaWYgRU5B
QkxFKERGR19KSVQpCiAgICAgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWRGb3JDb25zdHJ1Y3Qo
RXhlY1N0YXRlKiwgSlNTY29wZSosIENvbXBpbGF0aW9uUmVzdWx0JiwgdW5zaWduZWQgYnl0ZWNv
ZGVJbmRleCk7Ci0gICAgQ29tcGlsYXRpb25SZXN1bHQgcmVwbGFjZVdpdGhEZWZlcnJlZE9wdGlt
aXplZENvZGVGb3JDb25zdHJ1Y3QoUGFzc1JlZlB0cjxERkc6OlBsYW4+KTsKICNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKICAgICAgICAgCiAjaWYgRU5BQkxFKEpJVCkKQEAgLTY4OSwxMiArNjkx
LDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gY29tcGlsZU9wdGltaXplZEZvckNvbnN0cnVj
dChleGVjLCBzY29wZSwgcmVzdWx0LCBieXRlY29kZUluZGV4KTsKICAgICB9CiAgICAgICAgIAot
ICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlRm9y
KFBhc3NSZWZQdHI8REZHOjpQbGFuPiBwbGFuLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQp
Ci0gICAgewotICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKLSAgICAgICAgICAgIHJl
dHVybiByZXBsYWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZUZvckNhbGwocGxhbik7Ci0gICAg
ICAgIHJldHVybiByZXBsYWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZUZvckNvbnN0cnVjdChw
bGFuKTsKLSAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAKICNpZiBFTkFCTEUoSklU
KQpAQCAtNzg2LDYgKzc4Miw4IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAKKyAgICBmcmllbmQgY2xhc3MgRXhlY3V0YWJsZUJhc2U7CisKICAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgU2Ny
aXB0RXhlY3V0YWJsZTo6U3RydWN0dXJlRmxhZ3M7CiAgICAgV3JpdGVCYXJyaWVyPFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlPiBtX3VubGlua2VkRXhlY3V0YWJsZTsKICAgICBSZWZQdHI8RnVu
Y3Rpb25Db2RlQmxvY2s+IG1fY29kZUJsb2NrRm9yQ2FsbDsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0V4ZWN1dGlvbkhhcm5lc3MuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRpb25IYXJuZXNzLmgJKHJldmlzaW9uIDE1NDYz
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGlvbkhhcm5lc3MuaAko
d29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBpbmxpbmUgQ29tcGlsYXRpb25SZXN1bHQg
cHJlcGFyZUZvckV4ZWN1CiAjaWYgRU5BQkxFKExMSU5UKQogICAgIGlmIChKSVRDb2RlOjppc0Jh
c2VsaW5lQ29kZShqaXRUeXBlKSkgewogICAgICAgICAvLyBTdGFydCBvZmYgaW4gdGhlIGxvdyBs
ZXZlbCBpbnRlcnByZXRlci4KLSAgICAgICAgTExJbnQ6OmdldEVudHJ5cG9pbnQoZXhlYy0+dm0o
KSwgY29kZUJsb2NrLCBqaXRDb2RlKTsKKyAgICAgICAgTExJbnQ6OmdldEVudHJ5cG9pbnQoZXhl
Yy0+dm0oKSwgY29kZUJsb2NrKTsKICAgICAgICAgaWYgKGV4ZWMtPnZtKCkubV9wZXJCeXRlY29k
ZVByb2ZpbGVyKQogICAgICAgICAgICAgZXhlYy0+dm0oKS5tX3BlckJ5dGVjb2RlUHJvZmlsZXIt
PmVuc3VyZUJ5dGVjb2Rlc0Zvcihjb2RlQmxvY2spOwogICAgICAgICByZXR1cm4gQ29tcGlsYXRp
b25TdWNjZXNzZnVsOwpAQCAtNzAsNyArNzAsNyBAQCBpbmxpbmUgQ29tcGlsYXRpb25SZXN1bHQg
cHJlcGFyZUZ1bmN0aW9uCiAjaWYgRU5BQkxFKExMSU5UKQogICAgIGlmIChKSVRDb2RlOjppc0Jh
c2VsaW5lQ29kZShqaXRUeXBlKSkgewogICAgICAgICAvLyBTdGFydCBvZmYgaW4gdGhlIGxvdyBs
ZXZlbCBpbnRlcnByZXRlci4KLSAgICAgICAgTExJbnQ6OmdldEZ1bmN0aW9uRW50cnlwb2ludChl
eGVjLT52bSgpLCBraW5kLCBqaXRDb2RlLCBqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOworICAgICAg
ICBMTEludDo6Z2V0RnVuY3Rpb25FbnRyeXBvaW50KGV4ZWMtPnZtKCksIGNvZGVCbG9jayk7CiAg
ICAgICAgIGlmIChleGVjLT52bSgpLm1fcGVyQnl0ZWNvZGVQcm9maWxlcikKICAgICAgICAgICAg
IGV4ZWMtPnZtKCkubV9wZXJCeXRlY29kZVByb2ZpbGVyLT5lbnN1cmVCeXRlY29kZXNGb3IoY29k
ZUJsb2NrKTsKICAgICAgICAgcmV0dXJuIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDsKQEAgLTg4LDQ0
ICs4OCwxNSBAQCBpbmxpbmUgQ29tcGlsYXRpb25SZXN1bHQgcHJlcGFyZUZ1bmN0aW9uCiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+Ci1pbmxpbmUgQ29tcGlsYXRpb25SZXN1
bHQgaW5zdGFsbE9wdGltaXplZENvZGUoCi0gICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0LCBS
ZWZQdHI8Q29kZUJsb2NrVHlwZT4mIHNpbmssIENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywKLSAg
ICBQYXNzUmVmUHRyPEpJVENvZGU+IGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBqaXRD
b2RlV2l0aEFyaXR5Q2hlY2ssCi0gICAgaW50KiBudW1QYXJhbWV0ZXJzKQotewotICAgIFVOVVNF
RF9QQVJBTShqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOwotICAgIGlmIChyZXN1bHQgIT0gQ29tcGls
YXRpb25TdWNjZXNzZnVsKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIAotI2lmIEVOQUJM
RShKSVQpCi0gICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKGppdENvZGUsIGppdENvZGVXaXRoQXJp
dHlDaGVjayk7Ci0jZW5kaWYKLQotICAgIHNpbmsgPSBjb2RlQmxvY2s7Ci0gICAgCi0gICAgaWYg
KG51bVBhcmFtZXRlcnMpCi0gICAgICAgICpudW1QYXJhbWV0ZXJzID0gY29kZUJsb2NrLT5udW1Q
YXJhbWV0ZXJzKCk7Ci0gICAgCi0gICAgaWYgKGppdENvZGUpCi0gICAgICAgIGNvZGVCbG9jay0+
dm0oKS0+aGVhcC5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qoc2l6ZW9mKCpjb2RlQmxvY2spICsgaml0
Q29kZS0+c2l6ZSgpKTsKLSAgICBlbHNlCi0gICAgICAgIGNvZGVCbG9jay0+dm0oKS0+aGVhcC5y
ZXBvcnRFeHRyYU1lbW9yeUNvc3Qoc2l6ZW9mKCpjb2RlQmxvY2spKTsKLSAgICAKLSAgICBpZiAo
c2luayAhPSBjb2RlQmxvY2spIHsKLSAgICAgICAgLy8gVGhpcyBjYW4gaGFwcGVuIGlmIHdlIEdD
IGFuZCBkZWNpZGUgdGhhdCB0aGUgY29kZSBpcyBpbnZhbGlkLgotICAgICAgICByZXR1cm4gQ29t
cGlsYXRpb25JbnZhbGlkYXRlZDsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KIGlubGluZSBDb21waWxhdGlvblJl
c3VsdCBwcmVwYXJlRm9yRXhlY3V0aW9uKAotICAgIEV4ZWNTdGF0ZSogZXhlYywgUmVmUHRyPENv
ZGVCbG9ja1R5cGU+JiBzaW5rLCBDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssCi0gICAgUmVmUHRy
PEpJVENvZGU+JiBqaXRDb2RlLCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUsIHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXgpCisgICAgRXhlY1N0YXRlKiBleGVjLCBFeGVjdXRhYmxlQmFzZSogZXhlY3V0
YWJsZSwgQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLAorICAgIEpJVENvZGU6OkpJVFR5cGUgaml0
VHlwZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKIHsKICAgICBDb21waWxhdGlvblJlc3VsdCBy
ZXN1bHQgPSBwcmVwYXJlRm9yRXhlY3V0aW9uSW1wbChleGVjLCBjb2RlQmxvY2ssIGppdENvZGUs
IGppdFR5cGUsIGJ5dGVjb2RlSW5kZXgpOwotICAgIHJldHVybiBpbnN0YWxsT3B0aW1pemVkQ29k
ZShyZXN1bHQsIHNpbmssIGNvZGVCbG9jaywgaml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
KCksIDApOworICAgIGlmIChyZXN1bHQgIT0gQ29tcGlsYXRpb25TdWNjZXNzZnVsKQorICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIGV4ZWN1dGFibGUtPmluc3RhbGxDb2RlKGNvZGVCbG9jayk7
CisgICAgcmV0dXJuIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDsKIH0KIAogaW5saW5lIENvbXBpbGF0
aW9uUmVzdWx0IHByZXBhcmVGdW5jdGlvbkZvckV4ZWN1dGlvbigKQEAgLTEzNiw3ICsxMDcsMTAg
QEAgaW5saW5lIENvbXBpbGF0aW9uUmVzdWx0IHByZXBhcmVGdW5jdGlvbgogewogICAgIENvbXBp
bGF0aW9uUmVzdWx0IHJlc3VsdCA9IHByZXBhcmVGdW5jdGlvbkZvckV4ZWN1dGlvbkltcGwoZXhl
YywgY29kZUJsb2NrLAogICAgICAgICBqaXRDb2RlLCBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ssIGpp
dFR5cGUsIGJ5dGVjb2RlSW5kZXgsIGtpbmQpOwotICAgIHJldHVybiBpbnN0YWxsT3B0aW1pemVk
Q29kZShyZXN1bHQsIHNpbmssIGNvZGVCbG9jaywgaml0Q29kZSwgaml0Q29kZVdpdGhBcml0eUNo
ZWNrLCAmbnVtUGFyYW1ldGVycyk7CisgICAgaWYgKHJlc3VsdCAhPSBDb21waWxhdGlvblN1Y2Nl
c3NmdWwpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgZXhlY3V0YWJsZS0+aW5zdGFsbENv
ZGUoY29kZUJsb2NrKTsKKyAgICByZXR1cm4gQ29tcGlsYXRpb25TdWNjZXNzZnVsOwogfQogCiAj
aWYgRU5BQkxFKERGR19KSVQpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>209794</attachid>
            <date>2013-08-27 13:48:09 -0700</date>
            <delta_ts>2013-08-27 13:54:29 -0700</delta_ts>
            <desc>almost there</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>60089</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAxNTQ2MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY4OSw2ICsyNjg5LDU0IEBAIHZvaWQgQ29kZUJs
b2NrOjpjb3B5UG9zdFBhcnNlRGF0YUZyb21BbHQKICAgICBjb3B5UG9zdFBhcnNlRGF0YUZyb20o
bV9hbHRlcm5hdGl2ZS5nZXQoKSk7CiB9CiAKK0NvbXBpbGF0aW9uUmVzdWx0IENvZGVCbG9jazo6
cHJlcGFyZUZvckV4ZWN1dGlvbigKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIEpJVENvZGU6OkpJVFR5
cGUgaml0VHlwZSwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0LAorICAgIHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXgsIFBhc3NSZWZQdHI8RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPiBjYWxs
YmFjaykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIAorICAgIGlmIChqaXRUeXBl
ID09IEpJVENvZGU6OkludGVycHJldGVyVGh1bmspIHsKKyAgICAgICAgc3dpdGNoIChjb2RlVHlw
ZSgpKSB7CisgICAgICAgIGNhc2UgR2xvYmFsQ29kZToKKyAgICAgICAgICAgIExMSW50OjpnZXRF
bnRyeXBvaW50KHZtLCBzdGF0aWNfY2FzdDxHbG9iYWxDb2RlQmxvY2sqPih0aGlzKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFdmFsQ29kZToKKyAgICAgICAgICAgIExMSW50
OjpnZXRFbnRyeXBvaW50KHZtLCBzdGF0aWNfY2FzdDxFdmFsQ29kZUJsb2NrKj4odGhpcykpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRnVuY3Rpb25Db2RlOgorICAgICAgICAg
ICAgTExJbnQ6OmdldEZ1bmN0aW9uRW50cnlwb2ludCh2bSwgc3RhdGljX2Nhc3Q8RnVuY3Rpb25D
b2RlQmxvY2sqPih0aGlzKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gQ29tcGlsYXRpb25TdWNjZXNzZnVsOworICAgIH0KKyAgICAKKyNpZiBFTkFCTEUo
SklUKQorICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSkpIHsKKyAgICAg
ICAgQVNTRVJUKGVmZm9ydCA9PSBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgICAgICBDb21w
aWxhdGlvblJlc3VsdCByZXN1bHQgPSBERkc6OnRyeUNvbXBpbGUoZXhlYywgdGhpcywgYnl0ZWNv
ZGVJbmRleCwgY2FsbGJhY2spOworICAgICAgICBBU1NFUlQocmVzdWx0ICE9IENvbXBpbGF0aW9u
RGVmZXJyZWQgfHwgY2FsbGJhY2spOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAg
ICAKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgaml0Q29kZVdpdGhBcml0eUNoZWNrOworICAg
IFJlZlB0cjxKSVRDb2RlPiBqaXRDb2RlID0gSklUOjpjb21waWxlKCZ2bSwgdGhpcywgZWZmb3J0
LCAmaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKKyAgICBpZiAoIWppdENvZGUpCisgICAgICAgIHJl
dHVybiBDb21waWxhdGlvbkZhaWxlZDsKKyAgICBjb2RlQmxvY2stPnNldEpJVENvZGUoaml0Q29k
ZSwgaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKKyAgICByZXR1cm4gQ29tcGlsYXRpb25TdWNjZXNz
ZnVsOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZWZmb3J0KTsKKyAgICBVTlVTRURfUEFSQU0o
Ynl0ZWNvZGVJbmRleCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxiYWNrKTsKKyAgICByZXR1cm4g
Q29tcGlsYXRpb25GYWlsZWQ7CisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKK30KKwordm9pZCBDb2Rl
QmxvY2s6Omluc3RhbGwoKQoreworICAgIG93bmVyRXhlY3V0YWJsZSgpLT5pbnN0YWxsQ29kZSh0
aGlzKTsKK30KKwogI2lmIEVOQUJMRShKSVQpCiB2b2lkIENvZGVCbG9jazo6cmVvcHRpbWl6ZSgp
CiB7CkBAIC0yNzI2LDExICsyNzc0LDYgQEAgSlNPYmplY3QqIFByb2dyYW1Db2RlQmxvY2s6OmNv
bXBpbGVPcHRpbQogICAgIHJldHVybiBlcnJvcjsKIH0KIAotQ29tcGlsYXRpb25SZXN1bHQgUHJv
Z3JhbUNvZGVCbG9jazo6cmVwbGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGUoUGFzc1JlZlB0
cjxERkc6OlBsYW4+IHBsYW4pCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFByb2dyYW1FeGVj
dXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5yZXBsYWNlV2l0aERlZmVycmVkT3B0aW1pemVk
Q29kZShwbGFuKTsKLX0KLQogSlNPYmplY3QqIEV2YWxDb2RlQmxvY2s6OmNvbXBpbGVPcHRpbWl6
ZWQoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSwgQ29tcGlsYXRpb25SZXN1bHQmIHJl
c3VsdCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKIHsKICAgICBpZiAoSklUQ29kZTo6aXNIaWdo
ZXJUaWVyKHJlcGxhY2VtZW50KCktPmppdFR5cGUoKSwgaml0VHlwZSgpKSkgewpAQCAtMjc0MSwx
MSArMjc4NCw2IEBAIEpTT2JqZWN0KiBFdmFsQ29kZUJsb2NrOjpjb21waWxlT3B0aW1pemUKICAg
ICByZXR1cm4gZXJyb3I7CiB9CiAKLUNvbXBpbGF0aW9uUmVzdWx0IEV2YWxDb2RlQmxvY2s6OnJl
cGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlKFBhc3NSZWZQdHI8REZHOjpQbGFuPiBwbGFu
KQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxFdmFsRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0
YWJsZSgpKS0+cmVwbGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGUocGxhbik7Ci19Ci0KIEpT
T2JqZWN0KiBGdW5jdGlvbkNvZGVCbG9jazo6Y29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqIGV4
ZWMsIEpTU2NvcGUqIHNjb3BlLCBDb21waWxhdGlvblJlc3VsdCYgcmVzdWx0LCB1bnNpZ25lZCBi
eXRlY29kZUluZGV4KQogewogICAgIGlmIChKSVRDb2RlOjppc0hpZ2hlclRpZXIocmVwbGFjZW1l
bnQoKS0+aml0VHlwZSgpLCBqaXRUeXBlKCkpKSB7CkBAIC0yNzU1LDExICsyNzkzLDYgQEAgSlNP
YmplY3QqIEZ1bmN0aW9uQ29kZUJsb2NrOjpjb21waWxlT3B0aQogICAgIEpTT2JqZWN0KiBlcnJv
ciA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+
Y29tcGlsZU9wdGltaXplZEZvcihleGVjLCBzY29wZSwgcmVzdWx0LCBieXRlY29kZUluZGV4LCBt
X2lzQ29uc3RydWN0b3IgPyBDb2RlRm9yQ29uc3RydWN0IDogQ29kZUZvckNhbGwpOwogICAgIHJl
dHVybiBlcnJvcjsKIH0KLQotQ29tcGlsYXRpb25SZXN1bHQgRnVuY3Rpb25Db2RlQmxvY2s6OnJl
cGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlKFBhc3NSZWZQdHI8REZHOjpQbGFuPiBwbGFu
KQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihvd25lckV4
ZWN1dGFibGUoKSktPnJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlRm9yKHBsYW4sIG1f
aXNDb25zdHJ1Y3RvciA/IENvZGVGb3JDb25zdHJ1Y3QgOiBDb2RlRm9yQ2FsbCk7Ci19CiAjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCiAKIERGRzo6Q2FwYWJpbGl0eUxldmVsIFByb2dyYW1Db2Rl
QmxvY2s6OmNhcGFiaWxpdHlMZXZlbEludGVybmFsKCkKQEAgLTI4MDQsMjcgKzI4MzcsNiBAQCB2
b2lkIEZ1bmN0aW9uQ29kZUJsb2NrOjpqZXR0aXNvbkltcGwoKQogewogICAgIHN0YXRpY19jYXN0
PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+amV0dGlzb25PcHRpbWl6
ZWRDb2RlRm9yKCp2bSgpLCBtX2lzQ29uc3RydWN0b3IgPyBDb2RlRm9yQ29uc3RydWN0IDogQ29k
ZUZvckNhbGwpOwogfQotCi1Db21waWxhdGlvblJlc3VsdCBQcm9ncmFtQ29kZUJsb2NrOjpqaXRD
b21waWxlSW1wbChFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgQVNTRVJUKGppdFR5cGUoKSA9PSBK
SVRDb2RlOjpJbnRlcnByZXRlclRodW5rKTsKLSAgICBBU1NFUlQodGhpcyA9PSByZXBsYWNlbWVu
dCgpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPihvd25lckV4
ZWN1dGFibGUoKSktPmppdENvbXBpbGUoZXhlYyk7Ci19Ci0KLUNvbXBpbGF0aW9uUmVzdWx0IEV2
YWxDb2RlQmxvY2s6OmppdENvbXBpbGVJbXBsKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBBU1NF
UlQoaml0VHlwZSgpID09IEpJVENvZGU6OkludGVycHJldGVyVGh1bmspOwotICAgIEFTU0VSVCh0
aGlzID09IHJlcGxhY2VtZW50KCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxFdmFsRXhlY3V0
YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+aml0Q29tcGlsZShleGVjKTsKLX0KLQotQ29tcGls
YXRpb25SZXN1bHQgRnVuY3Rpb25Db2RlQmxvY2s6OmppdENvbXBpbGVJbXBsKEV4ZWNTdGF0ZSog
ZXhlYykKLXsKLSAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVENvZGU6OkludGVycHJldGVyVGh1
bmspOwotICAgIEFTU0VSVCh0aGlzID09IHJlcGxhY2VtZW50KCkpOwotICAgIHJldHVybiBzdGF0
aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmppdENvbXBp
bGVGb3IoZXhlYywgbV9pc0NvbnN0cnVjdG9yID8gQ29kZUZvckNvbnN0cnVjdCA6IENvZGVGb3JD
YWxsKTsKLX0KICNlbmRpZgogCiBKU0dsb2JhbE9iamVjdCogQ29kZUJsb2NrOjpnbG9iYWxPYmpl
Y3RGb3IoQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTU0NjMyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0
OCw3IEBACiAjaW5jbHVkZSAiREZHT1NSRW50cnkuaCIKICNpbmNsdWRlICJERkdPU1JFeGl0Lmgi
CiAjaW5jbHVkZSAiREZHVmFyaWFibGVFdmVudFN0cmVhbS5oIgorI2luY2x1ZGUgIkRlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjay5oIgogI2luY2x1ZGUgIkV2YWxDb2RlQ2FjaGUuaCIKICNpbmNs
dWRlICJFeGVjdXRpb25Db3VudGVyLmgiCiAjaW5jbHVkZSAiRXhwcmVzc2lvblJhbmdlSW5mby5o
IgpAQCAtMjkyLDE3ICsyOTMsMTUgQEAgcHVibGljOgogICAgIH0KICNpZiBFTkFCTEUoREZHX0pJ
VCkKICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIEpT
U2NvcGUqLCBDb21waWxhdGlvblJlc3VsdCYsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpID0gMDsK
LSAgICB2aXJ0dWFsIENvbXBpbGF0aW9uUmVzdWx0IHJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6
ZWRDb2RlKFBhc3NSZWZQdHI8REZHOjpQbGFuPikgPSAwOwogI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQogICAgIHZvaWQgamV0dGlzb24oKTsKLSAgICBDb21waWxhdGlvblJlc3VsdCBqaXRDb21w
aWxlKEV4ZWNTdGF0ZSogZXhlYykKLSAgICB7Ci0gICAgICAgIGlmIChqaXRUeXBlKCkgIT0gSklU
Q29kZTo6SW50ZXJwcmV0ZXJUaHVuaykgewotICAgICAgICAgICAgQVNTRVJUKGppdFR5cGUoKSA9
PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7Ci0gICAgICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25O
b3ROZWVkZWQ7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGppdENvbXBpbGVJbXBsKGV4ZWMp
OwotICAgIH0KKyAgICBDb21waWxhdGlvblJlc3VsdCBwcmVwYXJlRm9yRXhlY3V0aW9uKAorICAg
ICAgICBFeGVjU3RhdGUqLCBKSVRDb2RlOjpKSVRUeXBlLAorICAgICAgICBKSVRDb21waWxhdGlv
bkVmZm9ydCA9IEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQsCisgICAgICAgIHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXggPSBVSU5UX01BWCwKKyAgICAgICAgUGFzc1JlZlB0cjxEZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2s+ID0gMCk7CisgICAgdm9pZCBpbnN0YWxsKCk7CisgICAgCiAgICAgdmly
dHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCkgPSAwOwogCiAgICAgdmlydHVhbCBERkc6OkNh
cGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWxJbnRlcm5hbCgpID0gMDsKQEAgLTk2OSw3ICs5
NjgsNiBAQCBwdWJsaWM6CiAgICAgCiBwcm90ZWN0ZWQ6CiAjaWYgRU5BQkxFKEpJVCkKLSAgICB2
aXJ0dWFsIENvbXBpbGF0aW9uUmVzdWx0IGppdENvbXBpbGVJbXBsKEV4ZWNTdGF0ZSopID0gMDsK
ICAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb25JbXBsKCkgPSAwOwogI2VuZGlmCiAgICAgdmlydHVh
bCB2b2lkIHZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImKTsKQEAgLTExOTYsMTEgKzEx
OTQsOSBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgdmly
dHVhbCBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBKU1Njb3BlKiwgQ29t
cGlsYXRpb25SZXN1bHQmLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKLSAgICB2aXJ0dWFsIENv
bXBpbGF0aW9uUmVzdWx0IHJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlKFBhc3NSZWZQ
dHI8REZHOjpQbGFuPik7CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAKICAgICB2aXJ0dWFs
IHZvaWQgamV0dGlzb25JbXBsKCk7Ci0gICAgdmlydHVhbCBDb21waWxhdGlvblJlc3VsdCBqaXRD
b21waWxlSW1wbChFeGVjU3RhdGUqKTsKICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1l
bnQoKTsKICAgICB2aXJ0dWFsIERGRzo6Q2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbElu
dGVybmFsKCk7CiAjZW5kaWYKQEAgLTEyMjUsMTEgKzEyMjEsOSBAQCBwdWJsaWM6CiBwcm90ZWN0
ZWQ6CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgdmlydHVhbCBKU09iamVjdCogY29tcGlsZU9w
dGltaXplZChFeGVjU3RhdGUqLCBKU1Njb3BlKiwgQ29tcGlsYXRpb25SZXN1bHQmLCB1bnNpZ25l
ZCBieXRlY29kZUluZGV4KTsKLSAgICB2aXJ0dWFsIENvbXBpbGF0aW9uUmVzdWx0IHJlcGxhY2VX
aXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlKFBhc3NSZWZQdHI8REZHOjpQbGFuPik7CiAjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCiAKICAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb25JbXBsKCk7Ci0g
ICAgdmlydHVhbCBDb21waWxhdGlvblJlc3VsdCBqaXRDb21waWxlSW1wbChFeGVjU3RhdGUqKTsK
ICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKTsKICAgICB2aXJ0dWFsIERGRzo6
Q2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbEludGVybmFsKCk7CiAjZW5kaWYKQEAgLTEy
NTQsMTEgKzEyNDgsOSBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAjaWYgRU5BQkxFKERGR19KSVQp
CiAgICAgdmlydHVhbCBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBKU1Nj
b3BlKiwgQ29tcGlsYXRpb25SZXN1bHQmLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKLSAgICB2
aXJ0dWFsIENvbXBpbGF0aW9uUmVzdWx0IHJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2Rl
KFBhc3NSZWZQdHI8REZHOjpQbGFuPik7CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAKICAg
ICB2aXJ0dWFsIHZvaWQgamV0dGlzb25JbXBsKCk7Ci0gICAgdmlydHVhbCBDb21waWxhdGlvblJl
c3VsdCBqaXRDb21waWxlSW1wbChFeGVjU3RhdGUqKTsKICAgICB2aXJ0dWFsIENvZGVCbG9jayog
cmVwbGFjZW1lbnQoKTsKICAgICB2aXJ0dWFsIERGRzo6Q2FwYWJpbGl0eUxldmVsIGNhcGFiaWxp
dHlMZXZlbEludGVybmFsKCk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9EZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2su
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlZmVy
cmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgiCisK
K25hbWVzcGFjZSBKU0MgeworCitEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OkRlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjaygpIHsgfQorRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjp+
RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrKCkgeyB9CisKK30gLy8gSlNDCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFja19oCisjZGVmaW5lIERl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFja19oCisKKyNpbmNsdWRlICJDb21waWxhdGlvblJlc3Vs
dC5oIgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitj
bGFzcyBDb2RlQmxvY2s7CisKK2NsYXNzIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjayA6IHB1
YmxpYyBSZWZDb3VudGVkPERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4geworcHVibGljOgor
ICAgIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaygpOworICAgIHZpcnR1YWwgfkRlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjaygpOworCisgICAgdmlydHVhbCB2b2lkIGNvbXBpbGF0aW9uRGlk
Q29tcGxldGUoQ29kZUJsb2NrKiwgQ29tcGlsYXRpb25SZXN1bHQpID0gMDsKK307CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkocmV2aXNpb24g
MTU0NjMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIHVuc2lnbmVkIGdldE51bUNvbXBpbGF0aW9ucygp
CiAgICAgcmV0dXJuIG51bUNvbXBpbGF0aW9uczsKIH0KIAotc3RhdGljIENvbXBpbGF0aW9uUmVz
dWx0IGNvbXBpbGUoQ29tcGlsZU1vZGUgY29tcGlsZU1vZGUsIEV4ZWNTdGF0ZSogZXhlYywgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIFJlZlB0cjxKU0M6OkpJVENvZGU+JiBqaXRDb2RlLCBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIqIGppdENvZGVXaXRoQXJpdHlDaGVjaywgdW5zaWduZWQgb3NyRW50cnlC
eXRlY29kZUluZGV4KQorQ29tcGlsYXRpb25SZXN1bHQgdHJ5Q29tcGlsZShFeGVjU3RhdGUqIGV4
ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgs
IFBhc3NSZWZQdHI8RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPiBjYWxsYmFjaykKIHsKICAg
ICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIENvbXBpbGF0aW9uIChEcml2ZXIp
Iik7CiAgICAgCkBAIC05OSw3ICs5OSw3IEBAIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21w
aWxlKENvbXBpbGUKICAgICBlbHNlCiAgICAgICAgIG51bVZhcnNXaXRoVmFsdWVzID0gMDsKICAg
ICBSZWZQdHI8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKAotICAgICAgICBuZXcgUGxhbihjb21waWxl
TW9kZSwgY29kZUJsb2NrLCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIG51bVZhcnNXaXRoVmFsdWVz
KSk7CisgICAgICAgIG5ldyBQbGFuKGNvZGVCbG9jaywgb3NyRW50cnlCeXRlY29kZUluZGV4LCBu
dW1WYXJzV2l0aFZhbHVlcykpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGxhbi0+bXVz
dEhhbmRsZVZhbHVlcy5zaXplKCk7ICsraSkgewogICAgICAgICBpbnQgb3BlcmFuZCA9IHBsYW4t
Pm11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOwogICAgICAgICBpZiAob3BlcmFu
ZElzQXJndW1lbnQob3BlcmFuZCkKQEAgLTExNSw3ICsxMTUsOCBAQCBzdGF0aWMgQ29tcGlsYXRp
b25SZXN1bHQgY29tcGlsZShDb21waWxlCiAgICAgICAgICAgICBwbGFuLT5tdXN0SGFuZGxlVmFs
dWVzW2ldID0gZXhlYy0+dW5jaGVja2VkUihvcGVyYW5kKS5qc1ZhbHVlKCk7CiAgICAgfQogICAg
IAotICAgIGlmIChlbmFibGVDb25jdXJyZW50SklUKCkpIHsKKyAgICBpZiAoZW5hYmxlQ29uY3Vy
cmVudEpJVCgpICYmIGNhbGxiYWNrKSB7CisgICAgICAgIHBsYW4tPmNhbGxiYWNrID0gY2FsbGJh
Y2s7CiAgICAgICAgIGlmICghdm0ud29ya2xpc3QpCiAgICAgICAgICAgICB2bS53b3JrbGlzdCA9
IGdsb2JhbFdvcmtsaXN0KCk7CiAgICAgICAgIGlmIChsb2dDb21waWxhdGlvbkNoYW5nZXMoKSkK
QEAgLTEyNSwyMiArMTI2LDcgQEAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGUoQ29t
cGlsZQogICAgIH0KICAgICAKICAgICBwbGFuLT5jb21waWxlSW5UaHJlYWQoKnZtLmRmZ1N0YXRl
KTsKLSAgICByZXR1cm4gcGxhbi0+ZmluYWxpemUoaml0Q29kZSwgaml0Q29kZVdpdGhBcml0eUNo
ZWNrKTsKLX0KLQotQ29tcGlsYXRpb25SZXN1bHQgdHJ5Q29tcGlsZShFeGVjU3RhdGUqIGV4ZWMs
IENvZGVCbG9jayogY29kZUJsb2NrLCBSZWZQdHI8SlNDOjpKSVRDb2RlPiYgaml0Q29kZSwgdW5z
aWduZWQgYnl0ZWNvZGVJbmRleCkKLXsKLSAgICByZXR1cm4gY29tcGlsZShDb21waWxlT3RoZXIs
IGV4ZWMsIGNvZGVCbG9jaywgaml0Q29kZSwgMCwgYnl0ZWNvZGVJbmRleCk7Ci19Ci0KLUNvbXBp
bGF0aW9uUmVzdWx0IHRyeUNvbXBpbGVGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9j
ayogY29kZUJsb2NrLCBSZWZQdHI8SlNDOjpKSVRDb2RlPiYgaml0Q29kZSwgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyJiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgp
Ci17Ci0gICAgcmV0dXJuIGNvbXBpbGUoQ29tcGlsZUZ1bmN0aW9uLCBleGVjLCBjb2RlQmxvY2ss
IGppdENvZGUsICZqaXRDb2RlV2l0aEFyaXR5Q2hlY2ssIGJ5dGVjb2RlSW5kZXgpOwotfQotCi1D
b21waWxhdGlvblJlc3VsdCB0cnlGaW5hbGl6ZVBsYW4oUGFzc1JlZlB0cjxQbGFuPiBwbGFuLCBS
ZWZQdHI8SlNDOjpKSVRDb2RlPiYgaml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKiBqaXRD
b2RlV2l0aEFyaXR5Q2hlY2spCi17Ci0gICAgcmV0dXJuIHBsYW4tPmZpbmFsaXplKGppdENvZGUs
IGppdENvZGVXaXRoQXJpdHlDaGVjayk7CisgICAgcmV0dXJuIHBsYW4tPmZpbmFsaXplV2l0aG91
dE5vdGlmeWluZ0NhbGxiYWNrKCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuaAkocmV2aXNpb24gMTU0NjMyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNDIsMTcgKzQyLDkgQEAgbmFtZXNwYWNlIERGRyB7CiBKU19FWFBPUlRfUFJJVkFURSB1bnNp
Z25lZCBnZXROdW1Db21waWxhdGlvbnMoKTsKIAogI2lmIEVOQUJMRShERkdfSklUKQotQ29tcGls
YXRpb25SZXN1bHQgdHJ5Q29tcGlsZShFeGVjU3RhdGUqLCBDb2RlQmxvY2sqLCBSZWZQdHI8SlND
OjpKSVRDb2RlPiYsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwotQ29tcGlsYXRpb25SZXN1bHQg
dHJ5Q29tcGlsZUZ1bmN0aW9uKEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIFJlZlB0cjxKU0M6OkpJ
VENvZGU+JiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ssIHVu
c2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwotQ29tcGlsYXRpb25SZXN1bHQgdHJ5RmluYWxpemVQbGFu
KFBhc3NSZWZQdHI8UGxhbj4sIFJlZlB0cjxKU0M6OkpJVENvZGU+JiwgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyKiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOworQ29tcGlsYXRpb25SZXN1bHQgdHJ5Q29t
cGlsZShFeGVjU3RhdGUqLCBDb2RlQmxvY2sqLCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5k
ZXgsIFBhc3NSZWZQdHI8RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPik7CiAjZWxzZQotaW5s
aW5lIENvbXBpbGF0aW9uUmVzdWx0IHRyeUNvbXBpbGUoRXhlY1N0YXRlKiwgQ29kZUJsb2NrKiwg
UmVmUHRyPEpTQzo6SklUQ29kZT4mLCB1bnNpZ25lZCkgeyByZXR1cm4gQ29tcGlsYXRpb25GYWls
ZWQ7IH0KLWlubGluZSBDb21waWxhdGlvblJlc3VsdCB0cnlDb21waWxlRnVuY3Rpb24oRXhlY1N0
YXRlKiwgQ29kZUJsb2NrKiwgUmVmUHRyPEpTQzo6SklUQ29kZT4mLCBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHImLCB1bnNpZ25lZCkgeyByZXR1cm4gQ29tcGlsYXRpb25GYWlsZWQ7IH0KLWlubGluZSBD
b21waWxhdGlvblJlc3VsdCB0cnlGaW5hbGl6ZVBsYW4oUGFzc1JlZlB0cjxQbGFuPiwgUmVmUHRy
PEpTQzo6SklUQ29kZT4mLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIqKQotewotICAgIFVOUkVBQ0hB
QkxFX0ZPUl9QTEFURk9STSgpOwotICAgIHJldHVybiBDb21waWxhdGlvbkZhaWxlZDsKLX0KK2lu
bGluZSBDb21waWxhdGlvblJlc3VsdCB0cnlDb21waWxlKEV4ZWNTdGF0ZSosIENvZGVCbG9jayos
IHVuc2lnbmVkLCBQYXNzUmVmUHRyPERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4pIHsgcmV0
dXJuIENvbXBpbGF0aW9uRmFpbGVkOyB9CiAjZW5kaWYKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklURmluYWxpemVy
LmNwcAkocmV2aXNpb24gMTU0NjMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdK
SVRGaW5hbGl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSwyMyArNDUsMjMgQEAgSklURmlu
YWxpemVyOjp+SklURmluYWxpemVyKCkKIHsKIH0KIAotYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFs
aXplKFJlZlB0cjxKU0M6OkpJVENvZGU+JiBlbnRyeSkKK2Jvb2wgSklURmluYWxpemVyOjpmaW5h
bGl6ZSgpCiB7CiAgICAgZmluYWxpemVDb21tb24oKTsKICAgICAKICAgICBtX2ppdENvZGUtPmlu
aXRpYWxpemVDb2RlUmVmKG1fbGlua0J1ZmZlci0+ZmluYWxpemVDb2RlV2l0aG91dERpc2Fzc2Vt
Ymx5KCkpOwotICAgIGVudHJ5ID0gbV9qaXRDb2RlOworICAgIG1fcGxhbi5jb2RlQmxvY2stPnNl
dEpJVENvZGUobV9qaXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKSk7CiAgICAgCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSklURmluYWxpemVyOjpmaW5hbGl6ZUZ1bmN0aW9uKFJl
ZlB0cjxKU0M6OkpJVENvZGU+JiBlbnRyeSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiB3aXRoQXJp
dHlDaGVjaykKK2Jvb2wgSklURmluYWxpemVyOjpmaW5hbGl6ZUZ1bmN0aW9uKCkKIHsKICAgICBm
aW5hbGl6ZUNvbW1vbigpOwogICAgIAotICAgIHdpdGhBcml0eUNoZWNrID0gbV9saW5rQnVmZmVy
LT5sb2NhdGlvbk9mKG1fYXJpdHlDaGVjayk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHdp
dGhBcml0eUNoZWNrID0gbV9saW5rQnVmZmVyLT5sb2NhdGlvbk9mKG1fYXJpdHlDaGVjayk7CiAg
ICAgbV9qaXRDb2RlLT5pbml0aWFsaXplQ29kZVJlZihtX2xpbmtCdWZmZXItPmZpbmFsaXplQ29k
ZVdpdGhvdXREaXNhc3NlbWJseSgpKTsKLSAgICBlbnRyeSA9IG1faml0Q29kZTsKKyAgICBtX3Bs
YW4uY29kZUJsb2NrLT5zZXRKSVRDb2RlKG1faml0Q29kZSwgd2l0aEFyaXR5Q2hlY2spOwogICAg
IAogICAgIHJldHVybiB0cnVlOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Bs
YW4uY3BwCShyZXZpc2lvbiAxNTQ2MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCwxMCArODAsOSBAQCBzdGF0aWMgdm9pZCBk
dW1wQW5kVmVyaWZ5R3JhcGgoR3JhcGgmIGdyCiB9CiAKIFBsYW46OlBsYW4oCi0gICAgQ29tcGls
ZU1vZGUgY29tcGlsZU1vZGUsIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBwYXNzZWRDb2RlQmxvY2ss
IHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwKKyAgICBQYXNzUmVmUHRyPENvZGVCbG9j
az4gcGFzc2VkQ29kZUJsb2NrLCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsCiAgICAg
dW5zaWduZWQgbnVtVmFyc1dpdGhWYWx1ZXMpCi0gICAgOiBjb21waWxlTW9kZShjb21waWxlTW9k
ZSkKLSAgICAsIHZtKCpwYXNzZWRDb2RlQmxvY2stPnZtKCkpCisgICAgOiB2bSgqcGFzc2VkQ29k
ZUJsb2NrLT52bSgpKQogICAgICwgY29kZUJsb2NrKHBhc3NlZENvZGVCbG9jaykKICAgICAsIG9z
ckVudHJ5Qnl0ZWNvZGVJbmRleChvc3JFbnRyeUJ5dGVjb2RlSW5kZXgpCiAgICAgLCBudW1WYXJz
V2l0aFZhbHVlcyhudW1WYXJzV2l0aFZhbHVlcykKQEAgLTIwOCw3ICsyMDcsNyBAQCBQbGFuOjpD
b21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAKICNpZiBFTkFCTEUoRlRMX0pJVCkK
ICAgICBpZiAoT3B0aW9uczo6dXNlRXhwZXJpbWVudGFsRlRMKCkKLSAgICAgICAgJiYgY29tcGls
ZU1vZGUgPT0gQ29tcGlsZUZ1bmN0aW9uCisgICAgICAgICYmIGNvZGVCbG9jay0+Y29kZVR5cGUo
KSA9PSBGdW5jdGlvbkNvZGUKICAgICAgICAgJiYgRlRMOjpjYW5Db21waWxlKGRmZykpIHsKICAg
ICAgICAgCiAgICAgICAgIHBlcmZvcm1Dcml0aWNhbEVkZ2VCcmVha2luZyhkZmcpOwpAQCAtMjU1
LDEyICsyNTQsMTAgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgog
ICAgIGR1bXBBbmRWZXJpZnlHcmFwaChkZmcsICJHcmFwaCBhZnRlciBvcHRpbWl6YXRpb246Iik7
CiAKICAgICBKSVRDb21waWxlciBkYXRhRmxvd0pJVChkZmcpOwotICAgIGlmIChjb21waWxlTW9k
ZSA9PSBDb21waWxlRnVuY3Rpb24pIHsKKyAgICBpZiAoY29kZUJsb2NrLT5jb2RlVHlwZSgpID09
IEZ1bmN0aW9uQ29kZSkgewogICAgICAgICBkYXRhRmxvd0pJVC5jb21waWxlRnVuY3Rpb24oKTsK
ICAgICAgICAgZGF0YUZsb3dKSVQubGlua0Z1bmN0aW9uKCk7CiAgICAgfSBlbHNlIHsKLSAgICAg
ICAgQVNTRVJUKGNvbXBpbGVNb2RlID09IENvbXBpbGVPdGhlcik7Ci0gICAgICAgIAogICAgICAg
ICBkYXRhRmxvd0pJVC5jb21waWxlKCk7CiAgICAgICAgIGRhdGFGbG93SklULmxpbmsoKTsKICAg
ICB9CkBAIC0yODMsMTYgKzI4MCwxNiBAQCB2b2lkIFBsYW46OnJlYWxseUFkZChDb21tb25EYXRh
KiBjb21tb25ECiAgICAgd3JpdGVCYXJyaWVycy50cmlnZ2VyKHZtKTsKIH0KIAotQ29tcGlsYXRp
b25SZXN1bHQgUGxhbjo6ZmluYWxpemUoUmVmUHRyPEpTQzo6SklUQ29kZT4mIGppdENvZGUsIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciogaml0Q29kZVdpdGhBcml0eUNoZWNrKQorQ29tcGlsYXRpb25S
ZXN1bHQgUGxhbjo6ZmluYWxpemVXaXRob3V0Tm90aWZ5aW5nQ2FsbGJhY2soKQogewogICAgIGlm
ICghaXNTdGlsbFZhbGlkKCkpCiAgICAgICAgIHJldHVybiBDb21waWxhdGlvbkludmFsaWRhdGVk
OwogICAgIAogICAgIGJvb2wgcmVzdWx0OwotICAgIGlmIChjb21waWxlTW9kZSA9PSBDb21waWxl
RnVuY3Rpb24pCi0gICAgICAgIHJlc3VsdCA9IGZpbmFsaXplci0+ZmluYWxpemVGdW5jdGlvbihq
aXRDb2RlLCAqaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKKyAgICBpZiAoY29kZUJsb2NrLT5jb2Rl
VHlwZSgpID09IEZ1bmN0aW9uQ29kZSkKKyAgICAgICAgcmVzdWx0ID0gZmluYWxpemVyLT5maW5h
bGl6ZUZ1bmN0aW9uKCk7CiAgICAgZWxzZQotICAgICAgICByZXN1bHQgPSBmaW5hbGl6ZXItPmZp
bmFsaXplKGppdENvZGUpOworICAgICAgICByZXN1bHQgPSBmaW5hbGl6ZXItPmZpbmFsaXplKCk7
CiAgICAgCiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBDb21waWxhdGlvbkZhaWxl
ZDsKQEAgLTMwMiw2ICsyOTksMTEgQEAgQ29tcGlsYXRpb25SZXN1bHQgUGxhbjo6ZmluYWxpemUo
UmVmUHRyPAogICAgIHJldHVybiBDb21waWxhdGlvblN1Y2Nlc3NmdWw7CiB9CiAKK3ZvaWQgUGxh
bjo6ZmluYWxpemVBbmROb3RpZnlDYWxsYmFjaygpCit7CisgICAgY2FsbGJhY2stPmNvbXBpbGF0
aW9uRGlkQ29tcGxldGUoY29kZUJsb2NrLCBmaW5hbGl6ZVdpdGhvdXROb3RpZnlpbmdDYWxsYmFj
aygpKTsKK30KKwogQ29kZUJsb2NrKiBQbGFuOjprZXkoKQogewogICAgIHJldHVybiBjb2RlQmxv
Y2stPmFsdGVybmF0aXZlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Bs
YW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAko
cmV2aXNpb24gMTU0NjMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ4LDIzICs0OCwyMSBAQCBuYW1lc3BhY2UgREZHIHsKIAogY2xh
c3MgTG9uZ0xpdmVkU3RhdGU7CiAKLWVudW0gQ29tcGlsZU1vZGUgeyBDb21waWxlRnVuY3Rpb24s
IENvbXBpbGVPdGhlciB9OwotCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKIHN0cnVjdCBQbGFuIDog
cHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFBsYW4+IHsKICAgICBQbGFuKAotICAgICAgICBD
b21waWxlTW9kZSBjb21waWxlTW9kZSwgUGFzc1JlZlB0cjxDb2RlQmxvY2s+IGNvZGVCbG9jaywK
LSAgICAgICAgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LCB1bnNpZ25lZCBudW1WYXJz
V2l0aFZhbHVlcyk7CisgICAgICAgIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBjb2RlQmxvY2ssIHVu
c2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwKKyAgICAgICAgdW5zaWduZWQgbnVtVmFyc1dp
dGhWYWx1ZXMpOwogICAgIH5QbGFuKCk7CiAgICAgCiAgICAgdm9pZCBjb21waWxlSW5UaHJlYWQo
TG9uZ0xpdmVkU3RhdGUmKTsKICAgICAKLSAgICBDb21waWxhdGlvblJlc3VsdCBmaW5hbGl6ZShS
ZWZQdHI8SlNDOjpKSVRDb2RlPiYgaml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKiBqaXRD
b2RlV2l0aEFyaXR5Q2hlY2spOworICAgIENvbXBpbGF0aW9uUmVzdWx0IGZpbmFsaXplV2l0aG91
dE5vdGlmeWluZ0NhbGxiYWNrKCk7CisgICAgdm9pZCBmaW5hbGl6ZUFuZE5vdGlmeUNhbGxiYWNr
KCk7CiAgICAgCiAgICAgQ29kZUJsb2NrKiBrZXkoKTsKICAgICAKLSAgICBjb25zdCBDb21waWxl
TW9kZSBjb21waWxlTW9kZTsKICAgICBWTSYgdm07CiAgICAgUmVmUHRyPENvZGVCbG9jaz4gY29k
ZUJsb2NrOwogICAgIGNvbnN0IHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleDsKQEAgLTg2
LDYgKzg0LDggQEAgc3RydWN0IFBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZQogICAg
IAogICAgIGJvb2wgaXNDb21waWxlZDsKIAorICAgIFJlZlB0cjxEZWZlcnJlZENvbXBpbGF0aW9u
Q2FsbGJhY2s+IGNhbGxiYWNrOworCiBwcml2YXRlOgogICAgIGVudW0gQ29tcGlsYXRpb25QYXRo
IHsgRmFpbFBhdGgsIERGR1BhdGgsIEZUTFBhdGggfTsKICAgICBDb21waWxhdGlvblBhdGggY29t
cGlsZUluVGhyZWFkSW1wbChMb25nTGl2ZWRTdGF0ZSYpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAJKHJldmlzaW9uIDE1NDYzMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjUs
MTAgKzE2NSw3IEBAIFdvcmtsaXN0OjpTdGF0ZSBXb3JrbGlzdDo6Y29tcGxldGVBbGxSZWEKICAg
ICAgICAgCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHBsYW4tPmlzQ29tcGlsZWQpOwogICAgICAg
ICAKLSAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsYXRpb25SZXN1bHQgPQotICAgICAg
ICAgICAgcHJvZmlsZWRCbG9jay0+cmVwbGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGUocGxh
bik7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbXBpbGF0aW9uUmVzdWx0ICE9IENvbXBpbGF0
aW9uRGVmZXJyZWQpOwotICAgICAgICBwcm9maWxlZEJsb2NrLT5zZXRPcHRpbWl6YXRpb25UaHJl
c2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoY29tcGlsYXRpb25SZXN1bHQpOworICAgICAg
ICBwbGFuLT5maW5hbGl6ZUFuZE5vdGlmeUNhbGxiYWNrKCk7CiAgICAgICAgIAogICAgICAgICBp
ZiAocHJvZmlsZWRCbG9jayA9PSByZXF1ZXN0ZWRQcm9maWxlZEJsb2NrKQogICAgICAgICAgICAg
cmVzdWx0aW5nU3RhdGUgPSBDb21waWxlZDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
LmgJKHJldmlzaW9uIDE1NDYzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
aAkod29ya2luZyBjb3B5KQpAQCAtMTg0LDYgKzE4NCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBjb25zdCBKSVRTdHViUm91dGluZVNldCYgaml0U3R1YlJvdXRpbmVzKCkgeyByZXR1cm4g
bV9qaXRTdHViUm91dGluZXM7IH0KICAgICAgICAgCiAgICAgICAgIHZvaWQgYWRkUmVmZXJlbmNl
KEpTQ2VsbCosIEFycmF5QnVmZmVyKik7CisgICAgICAgIAorICAgICAgICBib29sIGlzRGVmZXJy
ZWQoKSBjb25zdCB7IHJldHVybiAhIW1fZGVmZXJyYWxEZXB0aDsgfQogCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiAxNTQ2MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxOSw3ICsxMDE5LDcg
QEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemUpCiAgICAgICAgIGlmIChPcHRp
b25zOjp2ZXJib3NlT1NSKCkpCiAgICAgICAgICAgICBkYXRhTG9nKCJDb25zaWRlcmluZyBPU1Ig
IiwgKmNvZGVCbG9jaywgIiAtPiAiLCAqY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLCAiLlxuIik7
CiAgICAgICAgIC8vIElmIHdlIGhhdmUgYW4gb3B0aW1pemVkIHJlcGxhY2VtZW50LCB0aGVuIGl0
IG11c3QgYmUgdGhlIGNhc2UgdGhhdCB3ZSBlbnRlcmVkCi0gICAgICAgIC8vIGN0aV9vcHRpbWl6
ZSBmcm9tIGEgbG9vcC4gVGhhdCdzIGJlY2F1c2UgaXMgdGhlcmUncyBhbiBvcHRpbWl6ZWQgcmVw
bGFjZW1lbnQsCisgICAgICAgIC8vIGN0aV9vcHRpbWl6ZSBmcm9tIGEgbG9vcC4gVGhhdCdzIGJl
Y2F1c2UgaWYgdGhlcmUncyBhbiBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQsCiAgICAgICAgIC8vIHRo
ZW4gYWxsIGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSByZWxpbmtlZCB0byB0aGUgcmVw
bGFjZW1lbnQgYW5kIHNvCiAgICAgICAgIC8vIHRoZSBwcm9sb2d1ZSBPU1Igd2lsbCBuZXZlciBm
aXJlLgogICAgICAgICAKQEAgLTEwNTQsMTMgKzEwNTQsMTIgQEAgREVGSU5FX1NUVUJfRlVOQ1RJ
T04odm9pZCwgb3B0aW1pemUpCiAgICAgICAgICAgICBkYXRhTG9nKCJUcmlnZ2VyaW5nIG9wdGlt
aXplZCBjb21waWxhdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiXG4iKTsKICAgICAgICAgCiAgICAg
ICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT5zY29wZSgpOwotICAgICAgICBDb21waWxh
dGlvblJlc3VsdCByZXN1bHQ7Ci0gICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IGNvZGVCbG9jay0+
Y29tcGlsZU9wdGltaXplZChjYWxsRnJhbWUsIHNjb3BlLCByZXN1bHQsIGJ5dGVjb2RlSW5kZXgp
OwotICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CisgICAgICAgIFJlZlB0cjxE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+IGNhbGxiYWNrID0gYWRvcHRSZWYoCisgICAgICAg
ICAgICBuZXcgSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2soKSk7CisgICAgICAg
IENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IGNvZGVCbG9jay0+Y29tcGlsZU9wdGltaXplZCgK
KyAgICAgICAgICAgIGNhbGxGcmFtZSwgSklUQ29kZTo6REZHSklULCBKSVRDb21waWxhdGlvbkNh
bkZhaWwsIGJ5dGVjb2RlSW5kZXgsIGNhbGxiYWNrKTsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnZl
cmJvc2VPU1IoKSkKICAgICAgICAgICAgIGRhdGFMb2coIk9wdGltaXppbmcgY29tcGlsYXRpb24g
b2YgIiwgKmNvZGVCbG9jaywgIiByZXN1bHQ6ICIsIHJlc3VsdCwgIlxuIik7Ci0gICAgICAgICAg
ICBpZiAoZXJyb3IpCi0gICAgICAgICAgICAgICAgZGF0YUxvZygiV0FSTklORzogb3B0aW1pemVk
IGNvbXBpbGF0aW9uIGZhaWxlZCB3aXRoIGEgSlMgZXJyb3IuXG4iKTsKLSAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgY29kZUJsb2NrLT5zZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9u
Q29tcGlsYXRpb25SZXN1bHQocmVzdWx0KTsKICAgICAgICAgaWYgKHJlc3VsdCAhPSBDb21waWxh
dGlvblN1Y2Nlc3NmdWwpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRvREZH
RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVG9ERkdEZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
LmgiCisKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJFeGVjdXRhYmxlLmgiCisK
K25hbWVzcGFjZSBKU0MgeworCitKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6
SklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2soKSB7IH0KK0pJVFRvREZHRGVmZXJy
ZWRDb21waWxhdGlvbkNhbGxiYWNrOjp+SklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2soKSB7IH0KKwordm9pZCBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y29t
cGlsYXRpb25EaWRDb21wbGV0ZSgKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsYXRp
b25SZXN1bHQgcmVzdWx0KQoreworICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkt
PmppdFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CisgICAgCisgICAgaWYgKHJlc3Vs
dCA9PSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpCisgICAgICAgIGNvZGVCbG9jay0+aW5zdGFsbCgp
OworICAgIAorICAgIGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+c2V0T3B0aW1pemF0aW9uVGhy
ZXNob2xkQmFzZU9uQ29tcGlsYXRpb25SZXN1bHQocmVzdWx0KTsKK30KKworfSAvLyBKU0MKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
VG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2su
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0
aW9uQ2FsbGJhY2tfaAorI2RlZmluZSBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFj
a19oCisKKyNpbmNsdWRlICJEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK2NsYXNzIFNjcmlwdEV4ZWN1dGFibGU7CisKK2NsYXNzIEpJVFRvREZHRGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrIDogcHVibGljIERlZmVycmVkQ29tcGlsYXRpb25DYWxs
YmFjayB7CitwdWJsaWM6CisgICAgSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2so
KTsKKyAgICB2aXJ0dWFsIH5KSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaygpOwor
CisgICAgdmlydHVhbCB2b2lkIGNvbXBpbGF0aW9uRGlkQ29tcGxldGUoQ29kZUJsb2NrKiwgQ29t
cGlsYXRpb25SZXN1bHQpOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBK
SVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFja19oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludEVudHJ5cG9pbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFbnRyeXBvaW50cy5jcHAJKHJldmlzaW9uIDE1
NDYzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludEVudHJ5cG9pbnRzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEy
LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzcsNTMgKzM3LDY3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgTExJbnQgewogCi12b2lkIGdldEZ1bmN0aW9uRW50cnlwb2ludChWTSYgdm0sIENvZGVT
cGVjaWFsaXphdGlvbktpbmQga2luZCwgUmVmUHRyPEpJVENvZGU+JiBqaXRDb2RlLCBNYWNyb0Fz
c2VtYmxlckNvZGVQdHImIGFyaXR5Q2hlY2spCit2b2lkIGdldEZ1bmN0aW9uRW50cnlwb2ludChW
TSYgdm0sIEZ1bmN0aW9uQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CisgICAgQ29kZVNwZWNpYWxp
emF0aW9uS2luZCBraW5kID0gY29kZUJsb2NrLT5zcGVjaWFsaXphdGlvbktpbmQoKTsKKyAgICAK
ICAgICBpZiAoIXZtLmNhblVzZUpJVCgpKSB7CiAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JD
YWxsKSB7Ci0gICAgICAgICAgICBqaXRDb2RlID0gYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUo
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxpbnRfZnVuY3Rpb25f
Zm9yX2NhbGxfcHJvbG9ndWUpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSk7Ci0gICAgICAg
ICAgICBhcml0eUNoZWNrID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVMTEludENvZGVQ
dHIobGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hlY2spOworICAgICAgICAgICAgY29k
ZUJsb2NrLT5zZXRKSVRDb2RlKAorICAgICAgICAgICAgICAgIGFkb3B0UmVmKG5ldyBEaXJlY3RK
SVRDb2RlKE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlTExJbnRDb2RlUmVmKGxsaW50X2Z1
bmN0aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpLAor
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlTExJbnRDb2RlUHRy
KGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNrKSk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KIAogICAgICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0
KTsKLSAgICAgICAgaml0Q29kZSA9IGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjo6Y3JlYXRlTExJbnRDb2RlUmVmKGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25z
dHJ1Y3RfcHJvbG9ndWUpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSk7Ci0gICAgICAgIGFy
aXR5Q2hlY2sgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUxMSW50Q29kZVB0cihsbGlu
dF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5X2NoZWNrKTsKKyAgICAgICAgY29kZUJsb2Nr
LT5zZXRKSVRDb2RlKAorICAgICAgICAgICAgYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUoTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxpbnRfZnVuY3Rpb25fZm9y
X2NvbnN0cnVjdF9wcm9sb2d1ZSksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSwKKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlTExJbnRDb2RlUHRyKGxsaW50X2Z1
bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlfY2hlY2spKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICAKICNpZiBFTkFCTEUoSklUKQogICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKSB7
Ci0gICAgICAgIGppdENvZGUgPSBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZSh2bS5nZXRDVElT
dHViKGZ1bmN0aW9uRm9yQ2FsbEVudHJ5VGh1bmtHZW5lcmF0b3IpLCBKSVRDb2RlOjpJbnRlcnBy
ZXRlclRodW5rKSk7Ci0gICAgICAgIGFyaXR5Q2hlY2sgPSB2bS5nZXRDVElTdHViKGZ1bmN0aW9u
Rm9yQ2FsbEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcikuY29kZSgpOworICAgICAgICBjb2RlQmxv
Y2stPnNldEpJVENvZGUoCisgICAgICAgICAgICBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZSh2
bS5nZXRDVElTdHViKGZ1bmN0aW9uRm9yQ2FsbEVudHJ5VGh1bmtHZW5lcmF0b3IpLCBKSVRDb2Rl
OjpJbnRlcnByZXRlclRodW5rKSksCisgICAgICAgICAgICB2bS5nZXRDVElTdHViKGZ1bmN0aW9u
Rm9yQ2FsbEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcikuY29kZSgpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAogICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOwotICAgIGpp
dENvZGUgPSBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZSh2bS5nZXRDVElTdHViKGZ1bmN0aW9u
Rm9yQ29uc3RydWN0RW50cnlUaHVua0dlbmVyYXRvciksIEpJVENvZGU6OkludGVycHJldGVyVGh1
bmspKTsKLSAgICBhcml0eUNoZWNrID0gdm0uZ2V0Q1RJU3R1YihmdW5jdGlvbkZvckNvbnN0cnVj
dEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcikuY29kZSgpOworICAgIGNvZGVCbG9jay0+c2V0SklU
Q29kZSgKKyAgICAgICAgYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUodm0uZ2V0Q1RJU3R1Yihm
dW5jdGlvbkZvckNvbnN0cnVjdEVudHJ5VGh1bmtHZW5lcmF0b3IpLCBKSVRDb2RlOjpJbnRlcnBy
ZXRlclRodW5rKSksCisgICAgICAgIHZtLmdldENUSVN0dWIoZnVuY3Rpb25Gb3JDb25zdHJ1Y3RB
cml0eUNoZWNrVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkK
IH0KIAotdm9pZCBnZXRFdmFsRW50cnlwb2ludChWTSYgdm0sIFJlZlB0cjxKSVRDb2RlPiYgaml0
Q29kZSkKK3ZvaWQgZ2V0RXZhbEVudHJ5cG9pbnQoVk0mIHZtLCBFdmFsQ29kZUJsb2NrKiBjb2Rl
QmxvY2spCiB7CiAgICAgaWYgKCF2bS5jYW5Vc2VKSVQoKSkgewotICAgICAgICBqaXRDb2RlID0g
YWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVM
TEludENvZGVSZWYobGxpbnRfZXZhbF9wcm9sb2d1ZSksIEpJVENvZGU6OkludGVycHJldGVyVGh1
bmspKTsKKyAgICAgICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKAorICAgICAgICAgICAgYWRvcHRS
ZWYobmV3IERpcmVjdEpJVENvZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENv
ZGVSZWYobGxpbnRfZXZhbF9wcm9sb2d1ZSksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSwK
KyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KLSNpZiBFTkFCTEUoSklUKSAgICAKLSAgICBqaXRDb2RlID0gYWRvcHRSZWYobmV3IERp
cmVjdEpJVENvZGUodm0uZ2V0Q1RJU3R1YihldmFsRW50cnlUaHVua0dlbmVyYXRvciksIEpJVENv
ZGU6OkludGVycHJldGVyVGh1bmspKTsKKyNpZiBFTkFCTEUoSklUKQorICAgIGNvZGVCbG9jay0+
c2V0SklUQ29kZSgKKyAgICAgICAgYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUodm0uZ2V0Q1RJ
U3R1YihldmFsRW50cnlUaHVua0dlbmVyYXRvciksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmsp
KSwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCkpOwogI2VuZGlmCiB9CiAKIHZvaWQg
Z2V0UHJvZ3JhbUVudHJ5cG9pbnQoVk0mIHZtLCBSZWZQdHI8SklUQ29kZT4mIGppdENvZGUpCiB7
CiAgICAgaWYgKCF2bS5jYW5Vc2VKSVQoKSkgewotICAgICAgICBqaXRDb2RlID0gYWRvcHRSZWYo
bmV3IERpcmVjdEpJVENvZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENvZGVS
ZWYobGxpbnRfcHJvZ3JhbV9wcm9sb2d1ZSksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKTsK
KyAgICAgICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKAorICAgICAgICAgICAgYWRvcHRSZWYobmV3
IERpcmVjdEpJVENvZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYo
bGxpbnRfcHJvZ3JhbV9wcm9sb2d1ZSksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSwKKyAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICNpZiBFTkFCTEUoSklUKQotICAgIGppdENvZGUgPSBhZG9wdFJlZihuZXcgRGlyZWN0SklU
Q29kZSh2bS5nZXRDVElTdHViKHByb2dyYW1FbnRyeVRodW5rR2VuZXJhdG9yKSwgSklUQ29kZTo6
SW50ZXJwcmV0ZXJUaHVuaykpOworICAgIGNvZGVCbG9jay0+c2V0SklUQ29kZSgKKyAgICAgICAg
YWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUodm0uZ2V0Q1RJU3R1Yihwcm9ncmFtRW50cnlUaHVu
a0dlbmVyYXRvciksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSwKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyKCkpOwogI2VuZGlmCiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludEVudHJ5cG9pbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xMSW50RW50cnlwb2ludHMuaAkocmV2aXNpb24gMTU0NjMyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RW50cnlwb2ludHMuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNDQsMTggKzQ0LDE4IEBAIGNsYXNzIFByb2dyYW1Db2RlQmxvY2s7CiAKIG5hbWVzcGFj
ZSBMTEludCB7CiAKLXZvaWQgZ2V0RnVuY3Rpb25FbnRyeXBvaW50KFZNJiwgQ29kZVNwZWNpYWxp
emF0aW9uS2luZCwgUmVmUHRyPEpJVENvZGU+JiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBhcml0
eUNoZWNrKTsKLXZvaWQgZ2V0RXZhbEVudHJ5cG9pbnQoVk0mLCBSZWZQdHI8SklUQ29kZT4mKTsK
LXZvaWQgZ2V0UHJvZ3JhbUVudHJ5cG9pbnQoVk0mLCBSZWZQdHI8SklUQ29kZT4mKTsKK3ZvaWQg
Z2V0RnVuY3Rpb25FbnRyeXBvaW50KFZNJiwgRnVuY3Rpb25Db2RlQmxvY2sqKTsKK3ZvaWQgZ2V0
RXZhbEVudHJ5cG9pbnQoVk0mLCBFdmFsQ29kZUJsb2NrKik7Cit2b2lkIGdldFByb2dyYW1FbnRy
eXBvaW50KFZNJiwgUHJvZ3JhbUNvZGVCbG9jayopOwogCi1pbmxpbmUgdm9pZCBnZXRFbnRyeXBv
aW50KFZNJiB2bSwgRXZhbENvZGVCbG9jayosIFJlZlB0cjxKSVRDb2RlPiYgaml0Q29kZSkKK2lu
bGluZSB2b2lkIGdldEVudHJ5cG9pbnQoVk0mIHZtLCBFdmFsQ29kZUJsb2NrKiBjb2RlQmxvY2sp
CiB7Ci0gICAgZ2V0RXZhbEVudHJ5cG9pbnQodm0sIGppdENvZGUpOworICAgIGdldEV2YWxFbnRy
eXBvaW50KHZtLCBjb2RlQmxvY2spOwogfQogCi1pbmxpbmUgdm9pZCBnZXRFbnRyeXBvaW50KFZN
JiB2bSwgUHJvZ3JhbUNvZGVCbG9jayosIFJlZlB0cjxKSVRDb2RlPiYgaml0Q29kZSkKK2lubGlu
ZSB2b2lkIGdldEVudHJ5cG9pbnQoVk0mIHZtLCBQcm9ncmFtQ29kZUJsb2NrKiBjb2RlQmxvY2sp
CiB7Ci0gICAgZ2V0UHJvZ3JhbUVudHJ5cG9pbnQodm0sIGppdENvZGUpOworICAgIGdldFByb2dy
YW1FbnRyeXBvaW50KHZtLCBjb2RlQmxvY2spOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
TExJbnQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1Bh
dGhzLmNwcAkocmV2aXNpb24gMTU0NjMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg4LDIzICsyODgsMzMgQEAg
aW5saW5lIGJvb2wgaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MoQwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogICAgIAotICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IGNvZGVC
bG9jay0+aml0Q29tcGlsZShleGVjKTsKLSAgICBzd2l0Y2ggKHJlc3VsdCkgewotICAgIGNhc2Ug
Q29tcGlsYXRpb25Ob3ROZWVkZWQ6CisgICAgc3dpdGNoIChjb2RlQmxvY2stPmppdFR5cGUoKSkg
eworICAgIGNhc2UgSklUQ29kZTo6QmFzZWxpbmVKSVQ6IHsKICAgICAgICAgaWYgKE9wdGlvbnM6
OnZlcmJvc2VPU1IoKSkKICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgQ29kZSB3YXMgYWxyZWFk
eSBjb21waWxlZC5cbiIpOwogICAgICAgICBjb2RlQmxvY2stPmppdFNvb24oKTsKICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgY2FzZSBDb21waWxhdGlvbkZhaWxlZDoKLSAgICAgICAgaWYgKE9w
dGlvbnM6OnZlcmJvc2VPU1IoKSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgSklUIGNvbXBp
bGF0aW9uIGZhaWxlZC5cbiIpOwotICAgICAgICBjb2RlQmxvY2stPmRvbnRKSVRBbnl0aW1lU29v
bigpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY2FzZSBDb21waWxhdGlvblN1Y2Nlc3Nm
dWw6Ci0gICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCi0gICAgICAgICAgICBkYXRh
TG9nRigiICAgIEpJVCBjb21waWxhdGlvbiBzdWNjZXNzZnVsLlxuIik7Ci0gICAgICAgIGNvZGVC
bG9jay0+aml0U29vbigpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgY2FzZSBK
SVRDb2RlOjpJbnRlcnByZXRlclRodW5rOiB7CisgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IHJl
c3VsdCA9IGNvZGVCbG9jay0+cHJlcGFyZUZvckV4ZWN1dGlvbigKKyAgICAgICAgICAgIGV4ZWMs
IEpJVENvZGU6OkJhc2VsaW5lSklULCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgICAgICBz
d2l0Y2ggKHJlc3VsdCkgeworICAgICAgICBjYXNlIENvbXBpbGF0aW9uRmFpbGVkOgorICAgICAg
ICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAgICAgICBkYXRhTG9n
RigiICAgIEpJVCBjb21waWxhdGlvbiBmYWlsZWQuXG4iKTsKKyAgICAgICAgICAgIGNvZGVCbG9j
ay0+ZG9udEpJVEFueXRpbWVTb29uKCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGNhc2UgQ29tcGlsYXRpb25TdWNjZXNzZnVsOgorICAgICAgICAgICAgaWYgKE9wdGlvbnM6
OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAgIEpJVCBjb21waWxh
dGlvbiBzdWNjZXNzZnVsLlxuIik7CisgICAgICAgICAgICBjb2RlQmxvY2stPmluc3RhbGwoKTsK
KyAgICAgICAgICAgIGNvZGVCbG9jay0+aml0U29vbigpOworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQogICAg
IGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBp
bGF0aW9uUmVzdWx0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29tcGlsYXRpb25SZXN1bHQuaAkocmV2aXNpb24gMTU0NjMyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29tcGlsYXRpb25SZXN1bHQuaAkod29ya2luZyBjb3B5KQpAQCAt
MzAsNyArMzAsMjkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWVudW0gQ29tcGlsYXRpb25SZXN1
bHQgeyBDb21waWxhdGlvbkZhaWxlZCwgQ29tcGlsYXRpb25JbnZhbGlkYXRlZCwgQ29tcGlsYXRp
b25TdWNjZXNzZnVsLCBDb21waWxhdGlvbk5vdE5lZWRlZCwgQ29tcGlsYXRpb25EZWZlcnJlZCB9
OworZW51bSBDb21waWxhdGlvblJlc3VsdCB7CisgICAgLy8gV2UgdHJpZWQgdG8gY29tcGlsZSB0
aGUgY29kZSwgYnV0IHdlIGNvdWxkbid0IGNvbXBpbGUgaXQuIFRoaXMgY291bGQgYmUKKyAgICAv
LyBiZWNhdXNlIHdlIHJhbiBvdXQgb2YgbWVtb3J5LCBvciBiZWNhdXNlIHRoZSBjb21waWxlciBl
bmNvdW50ZXJlZCBhbgorICAgIC8vIGludGVybmFsIGVycm9yIGFuZCBkZWNpZGVkIHRvIGJhaWwg
b3V0IGdyYWNlZnVsbHkuIEVpdGhlciB3YXksIHRoaXMgaW1wbGllcworICAgIC8vIHRoYXQgd2Ug
c2hvdWxkbid0IHRyeSB0byBjb21waWxlIHRoaXMgY29kZSBibG9jayBhZ2Fpbi4KKyAgICBDb21w
aWxhdGlvbkZhaWxlZCwKKyAgICAKKyAgICAvLyBUaGUgcHJvZmlsaW5nIGFzc3VtcHRpb25zIHRo
YXQgd2VyZSBmZWQgaW50byB0aGUgY29tcGlsZXIgd2VyZSBpbnZhbGlkYXRlZAorICAgIC8vIGV2
ZW4gYmVmb3JlIHdlIGZpbmlzaGVkIGNvbXBpbGluZy4gVGhpcyBtZWFucyB3ZSBzaG91bGQgdHJ5
IGFnYWluOiBpbiBzdWNoCisgICAgLy8gY2FzZXMgdGhlIHByb2ZpbGluZyB3aWxsIG5vdyBiZSB1
cGRhdGVkIGFuZCB0aGUgbmV4dCBjb21waWxhdGlvbiB3b24ndAorICAgIC8vIGVuY291bnRlciB0
aGUgc2FtZSBwcm9ibGVtLiBCdXQgaXQgZG9lcyBtZWFuIHRoYXQgd2Ugc2hvdWxkIGV4ZXJjaXNl
CisgICAgLy8gZXhwb25lbnRpYWwgYmFjay1vZmYsIHRvIGdldCBldmVuIG1vcmUgcHJvZmlsaW5n
IHNvIHRoYXQgbmV3IHByb2ZpbGluZworICAgIC8vIHBhdGhvbG9naWVzIGFyZW4ndCBlbmNvdW50
ZXJlZC4KKyAgICBDb21waWxhdGlvbkludmFsaWRhdGVkLAorICAgIAorICAgIC8vIFRoZSBjb21w
aWxhdGlvbiBzdWNjZWVkZWQgYW5kIHRoZSBjb2RlIGJsb2NrIG5vdyBoYXMgSklUQ29kZSBmb3Ig
dGhlIG5ld2x5CisgICAgLy8gY29tcGlsZWQgY29kZS4KKyAgICBDb21waWxhdGlvblN1Y2Nlc3Nm
dWwsCisgICAgCisgICAgLy8gV2UgZGVjaWRlZCB0byBkbyB0aGUgY29tcGlsYXRpb24gYXN5bmNo
cm9ub3VzbHkuIFRoaXMgbWVhbnMgdGhhdCB3ZSBoYXZlbid0CisgICAgLy8geWV0IGNvbXBpbGVk
IHRoZSBjb2RlLgorICAgIENvbXBpbGF0aW9uRGVmZXJyZWQKK307CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxl
LmNwcAkocmV2aXNpb24gMTU0NjMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCw2ICsxMTQsMTgyIEBAIHZvaWQg
U2NyaXB0RXhlY3V0YWJsZTo6ZGVzdHJveShKU0NlbGwqIGMKIH0KICNlbmRpZgogCit2b2lkIFNj
cmlwdEV4ZWN1dGFibGU6Omluc3RhbGxDb2RlKENvZGVCbG9jayogZ2VuZXJpY0NvZGVCbG9jaykK
K3sKKyAgICBWTSYgdm0gPSAqZ2VuZXJpY0NvZGVCbG9jay0+dm0oKTsKKyAgICAKKyAgICBpZiAo
dm0ubV9wZXJCeXRlY29kZVByb2ZpbGVyKQorICAgICAgICB2bS5tX3BlckJ5dGVjb2RlUHJvZmls
ZXItPmVuc3VyZUJ5dGVjb2Rlc0ZvcihnZW5lcmljQ29kZUJsb2NrKTsKKyAgICAKKyAgICBBU1NF
UlQodm0uaGVhcC5pc0RlZmVycmVkKCkpOworICAgIAorICAgIGlmIChqaXRDb2RlKQorICAgICAg
ICB2bS5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29zdChzaXplb2YoQ29kZUJsb2NrKSArIGppdENv
ZGUtPnNpemUoKSk7CisgICAgZWxzZQorICAgICAgICB2bS5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5
Q29zdChzaXplb2YoQ29kZUJsb2NrKSk7CisgICAgCisgICAgQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCBraW5kID0gZ2VuZXJpY0NvZGVCbG9jay0+c3BlY2lhbGl6YXRpb25LaW5kKCk7CisgICAgCisg
ICAgUmVmUHRyPENvZGVCbG9jaz4gb2xkQ29kZUJsb2NrOworICAgIAorICAgIHN3aXRjaCAoa2lu
ZCkgeworICAgIGNhc2UgQ29kZUZvckNhbGw6CisgICAgICAgIG1faml0Q29kZUZvckNhbGwgPSBj
b2RlQmxvY2stPmppdENvZGUoKTsKKyAgICAgICAgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNo
ZWNrID0gY29kZUJsb2NrLT5qaXRDb2RlV2l0aEFyaXR5Q2hlY2soKTsKKyAgICAgICAgbV9udW1Q
YXJhbWV0ZXJzRm9yQ2FsbCA9IGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIENvZGVGb3JDb25zdHJ1Y3Q6CisgICAgICAgIG1faml0Q29kZUZvckNv
bnN0cnVjdCA9IGNvZGVCbG9jay0+aml0Q29kZSgpOworICAgICAgICBtX2ppdENvZGVGb3JDb25z
dHJ1Y3RXaXRoQXJpdHlDaGVjayA9IGNvZGVCbG9jay0+aml0Q29kZVdpdGhBcml0eUNoZWNrKCk7
CisgICAgICAgIG1fbnVtUGFyYW1ldGVyc0ZvckNvbnN0cnVjdCA9IGNvZGVCbG9jay0+bnVtUGFy
YW1ldGVycygpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgc3dpdGNoIChnZW5l
cmljQ29kZUJsb2NrLT5jb2RlVHlwZSgpKSB7CisgICAgY2FzZSBHbG9iYWxDb2RlOiB7CisgICAg
ICAgIFByb2dyYW1FeGVjdXRhYmxlKiBleGVjdXRhYmUgPSBqc0Nhc3Q8UHJvZ3JhbUV4ZWN1dGFi
bGUqPih0aGlzKTsKKyAgICAgICAgUHJvZ3JhbUNvZGVCbG9jayogY29kZUJsb2NrID0gc3RhdGlj
X2Nhc3Q8UHJvZ3JhbUNvZGVCbG9jayo+KGdlbmVyaWNDb2RlQmxvY2spOworICAgICAgICAKKyAg
ICAgICAgQVNTRVJUKCFjb2RlQmxvY2stPmppdENvZGVXaXRoQXJpdHlDaGVjaygpKTsKKyAgICAg
ICAgQVNTRVJUKCFjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSk7CisgICAgICAgIEFTU0VSVChr
aW5kID09IENvZGVGb3JDYWxsKTsKKyAgICAgICAgCisgICAgICAgIG9sZENvZGVCbG9jayA9IGV4
ZWN1dGFibGUtPm1fcHJvZ3JhbUNvZGVCbG9jazsKKyAgICAgICAgZXhlY3V0YWJsZS0+bV9wcm9n
cmFtQ29kZUJsb2NrID0gY29kZUJsb2NrOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAg
IAorICAgIGNhc2UgRXZhbENvZGU6IHsKKyAgICAgICAgRXZhbEV4ZWN1dGFibGUqIGV4ZWN1dGFi
bGUgPSBqc0Nhc3Q8RXZhbEV4ZWN1dGFibGUqPih0aGlzKTsKKyAgICAgICAgRXZhbENvZGVCbG9j
ayogY29kZUJsb2NrID0gc3RhdGljX2Nhc3Q8RXZhbENvZGVCbG9jayo+KGdlbmVyaWNDb2RlQmxv
Y2spOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKCFqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOwor
ICAgICAgICBBU1NFUlQoIWNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKTsKKyAgICAgICAgQVNT
RVJUKGtpbmQgPT0gQ29kZUZvckNhbGwpOworICAgICAgICAKKyAgICAgICAgb2xkQ29kZUJsb2Nr
ID0gZXhlY3V0YWJsZS0+bV9ldmFsQ29kZUJsb2NrOworICAgICAgICBleGVjdXRhYmxlLT5tX2V2
YWxDb2RlQmxvY2sgPSBjb2RlQmxvY2s7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAg
CisgICAgY2FzZSBGdW5jdGlvbkNvZGU6IHsKKyAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBl
eGVjdXRhYmxlID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KHRoaXMpOworICAgICAgICBG
dW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2NrID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25Db2RlQmxv
Y2sqPihnZW5lcmljQ29kZUJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAoa2luZCkg
eworICAgICAgICBjYXNlIENvZGVGb3JDYWxsOgorICAgICAgICAgICAgb2xkQ29kZUJsb2NrID0g
ZXhlY3V0YWJsZS0+bV9jb2RlQmxvY2tGb3JDYWxsOworICAgICAgICAgICAgZXhlY3V0YWJsZS0+
bV9jb2RlQmxvY2tGb3JDYWxsID0gY29kZUJsb2NrOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgQ29kZUZvckNvbnN0cnVjdDoKKyAgICAgICAgICAgIG9sZENvZGVCbG9jayA9IGV4
ZWN1dGFibGUtPm1fY29kZUJsb2NrRm9yQ29uc3RydWN0OworICAgICAgICAgICAgZXhlY3V0YWJs
ZS0+bV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QgPSBjb2RlQmxvY2s7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9IH0KKworICAgIGlmIChvbGRDb2Rl
QmxvY2spCisgICAgICAgIG9sZENvZGVCbG9jay0+dW5saW5rSW5jb21pbmdDYWxscygpOworfQor
CitQYXNzUmVmUHRyPENvZGVCbG9jaz4gU2NyaXB0RXhlY3V0YWJsZTo6bmV3Q29kZUJsb2NrRm9y
KAorICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgSlNTY29wZSogc2NvcGUsIEpTT2Jq
ZWN0KiYgZXhjZXB0aW9uKQoreworICAgIGlmIChjbGFzc0luZm8oKSA9PSBFdmFsRXhlY3V0YWJs
ZTo6aW5mbygpKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNhbGwp
OworICAgICAgICBSRUxFQVNFX0FTU0VSVCghZXhlY3V0YWJsZS0+bV9ldmFsQ29kZUJsb2NrKTsK
KyAgICAgICAgRXZhbEV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RXZhbEV4ZWN1dGFi
bGUqPih0aGlzKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBFdmFsQ29kZUJsb2NrKAor
ICAgICAgICAgICAgZXhlY3V0YWJsZSwgZXhlY3V0YWJsZS0+bV91bmxpbmtlZEV2YWxDb2RlQmxv
Y2suZ2V0KCksIHNjb3BlLAorICAgICAgICAgICAgZXhlY3V0YWJsZS0+c291cmNlKCkucHJvdmlk
ZXIoKSkpOworICAgIH0KKyAgICAKKyAgICBpZiAoY2xhc3NJbmZvKCkgPT0gUHJvZ3JhbUV4ZWN1
dGFibGU6OmluZm8oKSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChraW5kID09IENvZGVGb3JD
YWxsKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWV4ZWN1dGFibGUtPm1fcHJvZ3JhbUNvZGVC
bG9jayk7CisgICAgICAgIFByb2dyYW1FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PFBy
b2dyYW1FeGVjdXRhYmxlKj4odGhpcyk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUHJv
Z3JhbUNvZGVCbG9jaygKKyAgICAgICAgICAgIGV4ZWN1dGFibGUsIGV4ZWN1dGFibGUtPm1fdW5s
aW5rZWRQcm9ncmFtQ29kZUJsb2NrLmdldCgpLCBzY29wZSwKKyAgICAgICAgICAgIGV4ZWN1dGFi
bGUtPnNvdXJjZSgpLnByb3ZpZGVyKCksIGV4ZWN1dGFibGUtPnNvdXJjZSgpLnN0YXJ0Q29sdW1u
KCkpKTsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlQoY2xhc3NJbmZvKCkgPT0gRnVu
Y3Rpb25FeGVjdXRhYmxlOjppbmZvKCkpOworICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0
YWJsZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPih0aGlzKTsKKyAgICBSRUxFQVNFX0FT
U0VSVCghZXhlY3V0YWJsZS0+Y29kZUJsb2NrRm9yKGtpbmQpKTsKKyAgICBWTSogdm0gPSBzY29w
ZS0+dm0oKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NvcGUtPmdsb2Jh
bE9iamVjdCgpOworICAgIFBhcnNlRXJyb3IgZXJyb3I7CisgICAgRGVidWdnZXJNb2RlIGRlYnVn
Z2VyTW9kZSA9IGdsb2JhbE9iamVjdC0+aGFzRGVidWdnZXIoKSA/IERlYnVnZ2VyT24gOiBEZWJ1
Z2dlck9mZjsKKyAgICBQcm9maWxlck1vZGUgcHJvZmlsZXJNb2RlID0gZ2xvYmFsT2JqZWN0LT5o
YXNQcm9maWxlcigpID8gUHJvZmlsZXJPbiA6IFByb2ZpbGVyT2ZmOworICAgIFVubGlua2VkRnVu
Y3Rpb25Db2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrID0KKyAgICAgICAgZXhlY3V0YWJsZS0+
bV91bmxpbmtlZEV4ZWN1dGFibGUtPmNvZGVCbG9ja0ZvcigKKyAgICAgICAgICAgICp2bSwgZXhl
Y3V0YWJsZS0+bV9zb3VyY2UsIGtpbmQsIGRlYnVnZ2VyTW9kZSwgcHJvZmlsZXJNb2RlLCBlcnJv
cik7CisgICAgaWYgKCF1bmxpbmtlZENvZGVCbG9jaykgeworICAgICAgICBleGNlcHRpb24gPSBl
cnJvci50b0Vycm9yT2JqZWN0KGdsb2JhbE9iamVjdCwgZXhlY3V0YWJsZS0+bV9zb3VyY2UpOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgU291cmNlUHJvdmlkZXIqIHByb3Zp
ZGVyID0gZXhlY3V0YWJsZS0+c291cmNlKCkucHJvdmlkZXIoKTsKKyAgICB1bnNpZ25lZCBzb3Vy
Y2VPZmZzZXQgPSBleGVjdXRhYmxlLT5zb3VyY2UoKS5zdGFydE9mZnNldCgpOworICAgIHVuc2ln
bmVkIHN0YXJ0Q29sdW1uID0gZXhlY3V0YWJsZS0+c291cmNlKCkuc3RhcnRDb2x1bW4oKTsKKwor
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgRnVuY3Rpb25Db2RlQmxvY2soCisgICAgICAgIGV4ZWN1
dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSwgcHJvdmlkZXIsIHNvdXJjZU9mZnNldCwg
c3RhcnRDb2x1bW4pKTsKK30KKworUGFzc1JlZlB0cjxDb2RlQmxvY2s+IFNjcmlwdEV4ZWN1dGFi
bGU6Om5ld1JlcGxhY2VtZW50Q29kZUJsb2NrRm9yKAorICAgIENvZGVTcGVjaWFsaXphdGlvbktp
bmQga2luZCkKK3sKKyAgICBpZiAoY2xhc3NJbmZvKCkgPT0gRXZhbEV4ZWN1dGFibGU6OmluZm8o
KSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChraW5kID09IENvZGVGb3JDYWxsKTsKKyAgICAg
ICAgRXZhbEV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RXZhbEV4ZWN1dGFibGUqPih0
aGlzKTsKKyAgICAgICAgUmVmUHRyPEV2YWxDb2RlQmxvY2s+IHJlc3VsdCA9IGFkb3B0UmVmKG5l
dyBFdmFsQ29kZUJsb2NrKAorICAgICAgICAgICAgQ29kZUJsb2NrOjpDb3B5UGFyc2VkQmxvY2ss
ICpleGVjdXRhYmxlLT5tX2V2YWxDb2RlQmxvY2spKTsKKyAgICAgICAgcmVzdWx0LT5zZXRBbHRl
cm5hdGl2ZShleGVjdXRhYmxlLT5tX2V2YWxDb2RlQmxvY2spOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKyAgICAKKyAgICBpZiAoY2xhc3NJbmZvKCkgPT0gUHJvZ3JhbUV4ZWN1dGFi
bGU6OmluZm8oKSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChraW5kID09IENvZGVGb3JDYWxs
KTsKKyAgICAgICAgUHJvZ3JhbUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8UHJvZ3Jh
bUV4ZWN1dGFibGUqPih0aGlzKTsKKyAgICAgICAgUmVmUHRyPFByb2dyYW1Db2RlQmxvY2s+IHJl
c3VsdCA9IGFkb3B0UmVmKG5ldyBQcm9ncmFtQ29kZUJsb2NrKAorICAgICAgICAgICAgQ29kZUJs
b2NrOjpDb3B5UGFyc2VkQmxvY2ssICpleGVjdXRhYmxlLT5tX2V2YWxDb2RlQmxvY2spKTsKKyAg
ICAgICAgcmVzdWx0LT5zZXRBbHRlcm5hdGl2ZShleGVjdXRhYmxlLT5tX3Byb2dyYW1Db2RlQmxv
Y2spOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJU
KGNsYXNzSW5mbygpID09IEZ1bmN0aW9uRXhlY3V0YWJsZTo6aW5mbygpKTsKKyAgICBGdW5jdGlv
bkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4odGhp
cyk7CisgICAgUmVmUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiByZXN1bHQgPSBhZG9wdFJlZihuZXcg
RnVuY3Rpb25Db2RlQmxvY2soCisgICAgICAgIENvZGVCbG9jazo6Q29weVBhcnNlZEJsb2NrLCAq
ZXhlY3V0YWJsZS0+Y29kZUJsb2NrRm9yKGtpbmQpKSk7CisgICAgcmVzdWx0LT5zZXRBbHRlcm5h
dGl2ZShleGVjdXRhYmxlLT5jb2RlQmxvY2tGb3Ioa2luZCkpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK0pTT2JqZWN0KiBTY3JpcHRFeGVjdXRhYmxlOjpwcmVwYXJlRm9yRXhlY3V0aW9uSW1w
bCgKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCBDb2RlU3BlY2lhbGl6YXRp
b25LaW5kIGtpbmQpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU09iamVjdCog
ZXhjZXB0aW9uID0gMDsKKyAgICBSZWZQdHI8Q29kZUJsb2NrPiBjb2RlQmxvY2sgPSBuZXdDb2Rl
QmxvY2tGb3Ioa2luZCwgc2NvcGUsIGV4Y2VwdGlvbik7CisgICAgaWYgKCFjb2RlQmxvY2spIHsK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQoZXhjZXB0aW9uKTsKKyAgICAgICAgcmV0dXJuIGV4Y2Vw
dGlvbjsKKyAgICB9CisgICAgCisgICAgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlOworI2lmIEVO
QUJMRShMTElOVCkKKyAgICBqaXRUeXBlID0gSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuazsKKyNl
bHNlCisgICAgaml0VHlwZSA9IEpJVENvZGU6OkJhc2VsaW5lSklUOworI2VuZGlmCisgICAgY29k
ZUJsb2NrLT5wcmVwYXJlRm9yRXhlY3V0aW9uKGV4ZWMsIGppdFR5cGUpOworCisgICAgaW5zdGFs
bENvZGUoY29kZUJsb2NrLmdldCgpKTsKKyAgICByZXR1cm4gMDsKK30KKwogY29uc3QgQ2xhc3NJ
bmZvIEV2YWxFeGVjdXRhYmxlOjpzX2luZm8gPSB7ICJFdmFsRXhlY3V0YWJsZSIsICZTY3JpcHRF
eGVjdXRhYmxlOjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoRXZhbEV4ZWN1dGFi
bGUpIH07CiAKIEV2YWxFeGVjdXRhYmxlKiBFdmFsRXhlY3V0YWJsZTo6Y3JlYXRlKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBib29sIGlzSW5TdHJpY3RDb250ZXh0
KSAKQEAgLTI0MCwxNCArNDE2LDYgQEAgSlNPYmplY3QqIEV2YWxFeGVjdXRhYmxlOjpjb21waWxl
SW50ZXJuYQogICAgIHJldHVybiAwOwogfQogCi0jaWYgRU5BQkxFKERGR19KSVQpCi1Db21waWxh
dGlvblJlc3VsdCBFdmFsRXhlY3V0YWJsZTo6cmVwbGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENv
ZGUoUGFzc1JlZlB0cjxERkc6OlBsYW4+IHBsYW4pCi17Ci0gICAgcmV0dXJuIEpTQzo6cmVwbGFj
ZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGUoCi0gICAgICAgIHBsYW4sIG1fZXZhbENvZGVCbG9j
aywgbV9qaXRDb2RlRm9yQ2FsbCwgMCwgMCk7Ci19Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
Ci0KICNpZiBFTkFCTEUoSklUKQogdm9pZCBFdmFsRXhlY3V0YWJsZTo6amV0dGlzb25PcHRpbWl6
ZWRDb2RlKFZNJiB2bSkKIHsKQEAgLTM0NCwxNCArNTEyLDYgQEAgSlNPYmplY3QqIFByb2dyYW1F
eGVjdXRhYmxlOjpjb21waWxlSW50ZQogICAgIHJldHVybiAwOwogfQogCi0jaWYgRU5BQkxFKERG
R19KSVQpCi1Db21waWxhdGlvblJlc3VsdCBQcm9ncmFtRXhlY3V0YWJsZTo6cmVwbGFjZVdpdGhE
ZWZlcnJlZE9wdGltaXplZENvZGUoUGFzc1JlZlB0cjxERkc6OlBsYW4+IHBsYW4pCi17Ci0gICAg
cmV0dXJuIEpTQzo6cmVwbGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGUoCi0gICAgICAgIHBs
YW4sIG1fcHJvZ3JhbUNvZGVCbG9jaywgbV9qaXRDb2RlRm9yQ2FsbCwgMCwgMCk7Ci19Ci0jZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCi0KICNpZiBFTkFCTEUoSklUKQogdm9pZCBQcm9ncmFtRXhl
Y3V0YWJsZTo6amV0dGlzb25PcHRpbWl6ZWRDb2RlKFZNJiB2bSkKIHsKQEAgLTUzOCwxNSArNjk4
LDYgQEAgSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvcgogICAgIHJldHVy
biAwOwogfQogCi0jaWYgRU5BQkxFKERGR19KSVQpCi1Db21waWxhdGlvblJlc3VsdCBGdW5jdGlv
bkV4ZWN1dGFibGU6OnJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlRm9yQ2FsbChQYXNz
UmVmUHRyPERGRzo6UGxhbj4gcGxhbikKLXsKLSAgICByZXR1cm4gSlNDOjpyZXBsYWNlV2l0aERl
ZmVycmVkT3B0aW1pemVkQ29kZSgKLSAgICAgICAgcGxhbiwgbV9jb2RlQmxvY2tGb3JDYWxsLCBt
X2ppdENvZGVGb3JDYWxsLCAmbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrLAotICAgICAg
ICAmbV9udW1QYXJhbWV0ZXJzRm9yQ2FsbCk7Ci19Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
Ci0KIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDb25zdHJ1Y3RJbnRl
cm5hbChFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCBKSVRDb2RlOjpKSVRUeXBlIGpp
dFR5cGUsIENvbXBpbGF0aW9uUmVzdWx0KiByZXN1bHQsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgp
CiB7CiAgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oc2FtcGxpbmdEZXNjcmlwdGlv
bihqaXRUeXBlKSk7CkBAIC01NzAsMTUgKzcyMSw2IEBAIEpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1
dGFibGU6OmNvbXBpbGVGb3IKICAgICByZXR1cm4gMDsKIH0KIAotI2lmIEVOQUJMRShERkdfSklU
KQotQ29tcGlsYXRpb25SZXN1bHQgRnVuY3Rpb25FeGVjdXRhYmxlOjpyZXBsYWNlV2l0aERlZmVy
cmVkT3B0aW1pemVkQ29kZUZvckNvbnN0cnVjdChQYXNzUmVmUHRyPERGRzo6UGxhbj4gcGxhbikK
LXsKLSAgICByZXR1cm4gSlNDOjpyZXBsYWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZSgKLSAg
ICAgICAgcGxhbiwgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QsIG1faml0Q29kZUZvckNvbnN0cnVj
dCwKLSAgICAgICAgJm1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrLCAmbV9udW1Q
YXJhbWV0ZXJzRm9yQ29uc3RydWN0KTsKLX0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLQog
I2lmIEVOQUJMRShKSVQpCiB2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6amV0dGlzb25PcHRpbWl6
ZWRDb2RlRm9yQ2FsbChWTSYgdm0pCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAxNTQ2MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0NCw2ICsyNDQs
NyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBMTEludDo6Q0xvb3A6OmNhdGNoUm91dGluZUZv
cihjYXRjaFBDRm9ySW50ZXJwcmV0ZXIpOwogI2VuZGlmCiAgICAgfQorICAgIAogI2VuZGlmIC8v
IEVOQUJMRShKSVQgfHwgRU5BQkxFKExMSU5UX0NfTE9PUCkKIAogcHJvdGVjdGVkOgpAQCAtNDAy
LDYgKzQwMywyMCBAQCBwdWJsaWM6CiAgICAgICAgIG1fc3RhcnRDb2x1bW4gPSBzdGFydENvbHVt
bjsKICAgICB9CiAKKyAgICB2b2lkIGluc3RhbGxDb2RlKENvZGVCbG9jayopOworICAgIFBhc3NS
ZWZQdHI8Q29kZUJsb2NrPiBuZXdDb2RlQmxvY2tGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCwg
SlNTY29wZSosIEpTT2JqZWN0KiYgZXhjZXB0aW9uKTsKKyAgICBQYXNzUmVmUHRyPENvZGVCbG9j
az4gbmV3UmVwbGFjZW1lbnRDb2RlQmxvY2tGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7Cisg
ICAgCisgICAgSlNPYmplY3QqIHByZXBhcmVGb3JFeGVjdXRpb24oRXhlY1N0YXRlKiBleGVjLCBK
U1Njb3BlKiBzY29wZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQorICAgIHsKKyAgICAg
ICAgaWYgKGhhc0pJVENvZGVGb3Ioa2luZCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgcmV0dXJuIHByZXBhcmVGb3JFeGVjdXRpb25JbXBsKGV4ZWMsIHNjb3BlLCBraW5kKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgSlNPYmplY3QqIHByZXBhcmVGb3JFeGVjdXRpb25JbXBsKEV4
ZWNTdGF0ZSosIEpTU2NvcGUqLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKKwogcHJvdGVjdGVk
OgogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAgIHsKQEAgLTQzMCwyNCArNDQ1
LDggQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAotICAg
IEpTT2JqZWN0KiBjb21waWxlKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUpCi0gICAg
ewotICAgICAgICBSRUxFQVNFX0FTU0VSVChleGVjLT52bSgpLmR5bmFtaWNHbG9iYWxPYmplY3Qp
OwotICAgICAgICBKU09iamVjdCogZXJyb3IgPSAwOwotICAgICAgICBpZiAoIW1fZXZhbENvZGVC
bG9jaykKLSAgICAgICAgICAgIGVycm9yID0gY29tcGlsZUludGVybmFsKGV4ZWMsIHNjb3BlLCBK
SVRDb2RlOjpib3R0b21UaWVySklUKCkpOwotICAgICAgICBBU1NFUlQoIWVycm9yID09ICEhbV9l
dmFsQ29kZUJsb2NrKTsKLSAgICAgICAgcmV0dXJuIGVycm9yOwotICAgIH0KLSAgICAgICAgCi0j
aWYgRU5BQkxFKERGR19KSVQpCi0gICAgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0
YXRlKiwgSlNTY29wZSosIENvbXBpbGF0aW9uUmVzdWx0JiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRl
eCk7Ci0gICAgQ29tcGlsYXRpb25SZXN1bHQgcmVwbGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENv
ZGUoUGFzc1JlZlB0cjxERkc6OlBsYW4+KTsKLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLSAg
ICAgICAgCiAjaWYgRU5BQkxFKEpJVCkKICAgICB2b2lkIGpldHRpc29uT3B0aW1pemVkQ29kZShW
TSYpOwotICAgIENvbXBpbGF0aW9uUmVzdWx0IGppdENvbXBpbGUoRXhlY1N0YXRlKik7CiAjZW5k
aWYKIAogICAgIEV2YWxDb2RlQmxvY2smIGdlbmVyYXRlZEJ5dGVjb2RlKCkKQEAgLTQ4MSwxMCAr
NDgwLDEwIEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBudW1iZXJPZkZ1bmN0aW9uRGVjbHMoKSB7
IHJldHVybiBtX3VubGlua2VkRXZhbENvZGVCbG9jay0+bnVtYmVyT2ZGdW5jdGlvbkRlY2xzKCk7
IH0KIAogcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgU2NyaXB0RXhlY3V0YWJsZTsKICAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNWaXNpdENoaWxk
cmVuIHwgU2NyaXB0RXhlY3V0YWJsZTo6U3RydWN0dXJlRmxhZ3M7CiAgICAgRXZhbEV4ZWN1dGFi
bGUoRXhlY1N0YXRlKiwgY29uc3QgU291cmNlQ29kZSYsIGJvb2wpOwogCi0gICAgSlNPYmplY3Qq
IGNvbXBpbGVJbnRlcm5hbChFeGVjU3RhdGUqLCBKU1Njb3BlKiwgSklUQ29kZTo6SklUVHlwZSwg
Q29tcGlsYXRpb25SZXN1bHQqID0gMCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IFVJTlRfTUFY
KTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CiAKICAgICBSZWZQdHI8RXZhbENvZGVCbG9jaz4gbV9ldmFsQ29kZUJsb2NrOwpAQCAtNTA4LDI0
ICs1MDcsOCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwog
Ci0gICAgSlNPYmplY3QqIGNvbXBpbGUoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSkK
LSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMtPnZtKCkuZHluYW1pY0dsb2JhbE9i
amVjdCk7Ci0gICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IDA7Ci0gICAgICAgIGlmICghbV9wcm9n
cmFtQ29kZUJsb2NrKQotICAgICAgICAgICAgZXJyb3IgPSBjb21waWxlSW50ZXJuYWwoZXhlYywg
c2NvcGUsIEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSk7Ci0gICAgICAgIEFTU0VSVCghZXJyb3Ig
PT0gISFtX3Byb2dyYW1Db2RlQmxvY2spOwotICAgICAgICByZXR1cm4gZXJyb3I7Ci0gICAgfQot
Ci0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhl
Y1N0YXRlKiwgSlNTY29wZSosIENvbXBpbGF0aW9uUmVzdWx0JiwgdW5zaWduZWQgYnl0ZWNvZGVJ
bmRleCk7Ci0gICAgQ29tcGlsYXRpb25SZXN1bHQgcmVwbGFjZVdpdGhEZWZlcnJlZE9wdGltaXpl
ZENvZGUoUGFzc1JlZlB0cjxERkc6OlBsYW4+KTsKLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
LSAgICAgICAgCiAjaWYgRU5BQkxFKEpJVCkKICAgICB2b2lkIGpldHRpc29uT3B0aW1pemVkQ29k
ZShWTSYpOwotICAgIENvbXBpbGF0aW9uUmVzdWx0IGppdENvbXBpbGUoRXhlY1N0YXRlKik7CiAj
ZW5kaWYKIAogICAgIFByb2dyYW1Db2RlQmxvY2smIGdlbmVyYXRlZEJ5dGVjb2RlKCkKQEAgLTU1
NywxMSArNTQwLDEyIEBAIHB1YmxpYzoKICAgICBFeGVjdXRhYmxlSW5mbyBleGVjdXRhYmxlSW5m
bygpIGNvbnN0IHsgcmV0dXJuIEV4ZWN1dGFibGVJbmZvKG5lZWRzQWN0aXZhdGlvbigpLCB1c2Vz
RXZhbCgpLCBpc1N0cmljdE1vZGUoKSwgZmFsc2UpOyB9CiAKIHByaXZhdGU6CisgICAgZnJpZW5k
IGNsYXNzIFNjcmlwdEV4ZWN1dGFibGU7CisgICAgCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IFNjcmlwdEV4ZWN1dGFi
bGU6OlN0cnVjdHVyZUZsYWdzOwogCiAgICAgUHJvZ3JhbUV4ZWN1dGFibGUoRXhlY1N0YXRlKiwg
Y29uc3QgU291cmNlQ29kZSYpOwogCi0gICAgSlNPYmplY3QqIGNvbXBpbGVJbnRlcm5hbChFeGVj
U3RhdGUqLCBKU1Njb3BlKiwgSklUQ29kZTo6SklUVHlwZSwgQ29tcGlsYXRpb25SZXN1bHQqID0g
MCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IFVJTlRfTUFYKTsKICAgICBzdGF0aWMgdm9pZCB2
aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKICAgICBXcml0ZUJhcnJpZXI8
VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPiBtX3VubGlua2VkUHJvZ3JhbUNvZGVCbG9jazsKQEAg
LTYwMiwyNCArNTg2LDggQEAgcHVibGljOgogICAgICAgICAKICAgICBQYXNzUmVmUHRyPEZ1bmN0
aW9uQ29kZUJsb2NrPiBwcm9kdWNlQ29kZUJsb2NrRm9yKEpTU2NvcGUqLCBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kLCBKU09iamVjdComIGV4Y2VwdGlvbik7CiAKLSAgICBKU09iamVjdCogY29tcGls
ZUZvckNhbGwoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSkKLSAgICB7Ci0gICAgICAg
IFJFTEVBU0VfQVNTRVJUKGV4ZWMtPnZtKCkuZHluYW1pY0dsb2JhbE9iamVjdCk7Ci0gICAgICAg
IEpTT2JqZWN0KiBlcnJvciA9IDA7Ci0gICAgICAgIGlmICghbV9jb2RlQmxvY2tGb3JDYWxsKQot
ICAgICAgICAgICAgZXJyb3IgPSBjb21waWxlRm9yQ2FsbEludGVybmFsKGV4ZWMsIHNjb3BlLCBK
SVRDb2RlOjpib3R0b21UaWVySklUKCkpOwotICAgICAgICBBU1NFUlQoIWVycm9yID09ICEhbV9j
b2RlQmxvY2tGb3JDYWxsKTsKLSAgICAgICAgcmV0dXJuIGVycm9yOwotICAgIH0KLQotI2lmIEVO
QUJMRShERkdfSklUKQotICAgIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkRm9yQ2FsbChFeGVj
U3RhdGUqLCBKU1Njb3BlKiwgQ29tcGlsYXRpb25SZXN1bHQmLCB1bnNpZ25lZCBieXRlY29kZUlu
ZGV4KTsKLSAgICBDb21waWxhdGlvblJlc3VsdCByZXBsYWNlV2l0aERlZmVycmVkT3B0aW1pemVk
Q29kZUZvckNhbGwoUGFzc1JlZlB0cjxERkc6OlBsYW4+KTsKLSNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKLSAgICAgICAgCiAjaWYgRU5BQkxFKEpJVCkKICAgICB2b2lkIGpldHRpc29uT3B0aW1p
emVkQ29kZUZvckNhbGwoVk0mKTsKLSAgICBDb21waWxhdGlvblJlc3VsdCBqaXRDb21waWxlRm9y
Q2FsbChFeGVjU3RhdGUqKTsKICNlbmRpZgogCiAgICAgYm9vbCBpc0dlbmVyYXRlZEZvckNhbGwo
KSBjb25zdApAQCAtNjMzLDI0ICs2MDEsOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAqbV9j
b2RlQmxvY2tGb3JDYWxsOwogICAgIH0KIAotICAgIEpTT2JqZWN0KiBjb21waWxlRm9yQ29uc3Ry
dWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUpCi0gICAgewotICAgICAgICBSRUxF
QVNFX0FTU0VSVChleGVjLT52bSgpLmR5bmFtaWNHbG9iYWxPYmplY3QpOwotICAgICAgICBKU09i
amVjdCogZXJyb3IgPSAwOwotICAgICAgICBpZiAoIW1fY29kZUJsb2NrRm9yQ29uc3RydWN0KQot
ICAgICAgICAgICAgZXJyb3IgPSBjb21waWxlRm9yQ29uc3RydWN0SW50ZXJuYWwoZXhlYywgc2Nv
cGUsIEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSk7Ci0gICAgICAgIEFTU0VSVCghZXJyb3IgPT0g
ISFtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCk7Ci0gICAgICAgIHJldHVybiBlcnJvcjsKLSAgICB9
Ci0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBKU09iamVjdCogY29tcGlsZU9wdGltaXplZEZv
ckNvbnN0cnVjdChFeGVjU3RhdGUqLCBKU1Njb3BlKiwgQ29tcGlsYXRpb25SZXN1bHQmLCB1bnNp
Z25lZCBieXRlY29kZUluZGV4KTsKLSAgICBDb21waWxhdGlvblJlc3VsdCByZXBsYWNlV2l0aERl
ZmVycmVkT3B0aW1pemVkQ29kZUZvckNvbnN0cnVjdChQYXNzUmVmUHRyPERGRzo6UGxhbj4pOwot
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotICAgICAgICAKICNpZiBFTkFCTEUoSklUKQogICAg
IHZvaWQgamV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ29uc3RydWN0KFZNJik7Ci0gICAgQ29tcGls
YXRpb25SZXN1bHQgaml0Q29tcGlsZUZvckNvbnN0cnVjdChFeGVjU3RhdGUqKTsKICNlbmRpZgog
CiAgICAgYm9vbCBpc0dlbmVyYXRlZEZvckNvbnN0cnVjdCgpIGNvbnN0CkBAIC02NjQsMzkgKzYx
Niw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICptX2NvZGVCbG9ja0ZvckNvbnN0cnVjdDsK
ICAgICB9CiAgICAgICAgIAotICAgIEpTT2JqZWN0KiBjb21waWxlRm9yKEV4ZWNTdGF0ZSogZXhl
YywgSlNTY29wZSogc2NvcGUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChleGVjLT5jYWxsZWUoKSk7Ci0gICAgICAgIEFTU0VSVChleGVjLT5jYWxs
ZWUoKS0+aW5oZXJpdHMoSlNGdW5jdGlvbjo6aW5mbygpKSk7Ci0gICAgICAgIEFTU0VSVChqc0Nh
c3Q8SlNGdW5jdGlvbio+KGV4ZWMtPmNhbGxlZSgpKS0+anNFeGVjdXRhYmxlKCkgPT0gdGhpcyk7
Ci0KLSAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCi0gICAgICAgICAgICByZXR1cm4g
Y29tcGlsZUZvckNhbGwoZXhlYywgc2NvcGUpOwotICAgICAgICBBU1NFUlQoa2luZCA9PSBDb2Rl
Rm9yQ29uc3RydWN0KTsKLSAgICAgICAgcmV0dXJuIGNvbXBpbGVGb3JDb25zdHJ1Y3QoZXhlYywg
c2NvcGUpOwotICAgIH0KLSAgICAgICAgCi0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgSlNPYmpl
Y3QqIGNvbXBpbGVPcHRpbWl6ZWRGb3IoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSwg
Q29tcGlsYXRpb25SZXN1bHQmIHJlc3VsdCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCBraW5kKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGV4ZWMtPmNhbGxl
ZSgpKTsKLSAgICAgICAgQVNTRVJUKGV4ZWMtPmNhbGxlZSgpLT5pbmhlcml0cyhKU0Z1bmN0aW9u
OjppbmZvKCkpKTsKLSAgICAgICAgQVNTRVJUKGpzQ2FzdDxKU0Z1bmN0aW9uKj4oZXhlYy0+Y2Fs
bGVlKCkpLT5qc0V4ZWN1dGFibGUoKSA9PSB0aGlzKTsKLSAgICAgICAgICAgIAotICAgICAgICBp
ZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKLSAgICAgICAgICAgIHJldHVybiBjb21waWxlT3B0aW1p
emVkRm9yQ2FsbChleGVjLCBzY29wZSwgcmVzdWx0LCBieXRlY29kZUluZGV4KTsKLSAgICAgICAg
QVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7Ci0gICAgICAgIHJldHVybiBjb21waWxl
T3B0aW1pemVkRm9yQ29uc3RydWN0KGV4ZWMsIHNjb3BlLCByZXN1bHQsIGJ5dGVjb2RlSW5kZXgp
OwotICAgIH0KLSAgICAgICAgCi0gICAgQ29tcGlsYXRpb25SZXN1bHQgcmVwbGFjZVdpdGhEZWZl
cnJlZE9wdGltaXplZENvZGVGb3IoUGFzc1JlZlB0cjxERkc6OlBsYW4+IHBsYW4sIENvZGVTcGVj
aWFsaXphdGlvbktpbmQga2luZCkKLSAgICB7Ci0gICAgICAgIGlmIChraW5kID09IENvZGVGb3JD
YWxsKQotICAgICAgICAgICAgcmV0dXJuIHJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2Rl
Rm9yQ2FsbChwbGFuKTsKLSAgICAgICAgcmV0dXJuIHJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6
ZWRDb2RlRm9yQ29uc3RydWN0KHBsYW4pOwotICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKLQogI2lmIEVOQUJMRShKSVQpCiAgICAgdm9pZCBqZXR0aXNvbk9wdGltaXplZENvZGVGb3Io
Vk0mIHZtLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiAgICAgewpAQCAtNzA3LDE0ICs2
MjYsNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICBqZXR0aXNvbk9wdGltaXplZENvZGVGb3JDb25z
dHJ1Y3Qodm0pOwogICAgICAgICB9CiAgICAgfQotICAgICAgICAKLSAgICBDb21waWxhdGlvblJl
c3VsdCBqaXRDb21waWxlRm9yKEV4ZWNTdGF0ZSogZXhlYywgQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCBraW5kKQotICAgIHsKLSAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCi0gICAgICAg
ICAgICByZXR1cm4gaml0Q29tcGlsZUZvckNhbGwoZXhlYyk7Ci0gICAgICAgIEFTU0VSVChraW5k
ID09IENvZGVGb3JDb25zdHJ1Y3QpOwotICAgICAgICByZXR1cm4gaml0Q29tcGlsZUZvckNvbnN0
cnVjdChleGVjKTsKLSAgICB9CiAjZW5kaWYKICAgICAgICAgCiAgICAgYm9vbCBpc0dlbmVyYXRl
ZEZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCkBAIC03NjQsOSArNjc1LDYgQEAgcHVi
bGljOgogcHJpdmF0ZToKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUoVk0mLCBjb25zdCBTb3VyY2VD
b2RlJiwgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqLCB1bnNpZ25lZCBmaXJzdExpbmUsIHVu
c2lnbmVkIGxhc3RMaW5lLCB1bnNpZ25lZCBzdGFydENvbHVtbik7CiAKLSAgICBKU09iamVjdCog
Y29tcGlsZUZvckNhbGxJbnRlcm5hbChFeGVjU3RhdGUqLCBKU1Njb3BlKiwgSklUQ29kZTo6SklU
VHlwZSwgQ29tcGlsYXRpb25SZXN1bHQqID0gMCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCA9IFVJ
TlRfTUFYKTsKLSAgICBKU09iamVjdCogY29tcGlsZUZvckNvbnN0cnVjdEludGVybmFsKEV4ZWNT
dGF0ZSosIEpTU2NvcGUqLCBKSVRDb2RlOjpKSVRUeXBlLCBDb21waWxhdGlvblJlc3VsdCogPSAw
LCB1bnNpZ25lZCBieXRlY29kZUluZGV4ID0gVUlOVF9NQVgpOwotICAgICAgICAKICAgICBSZWZQ
dHI8RnVuY3Rpb25Db2RlQmxvY2s+JiBjb2RlQmxvY2tGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCBraW5kKQogICAgIHsKICAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCkBAIC03ODYs
NiArNjk0LDggQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAorICAg
IGZyaWVuZCBjbGFzcyBTY3JpcHRFeGVjdXRhYmxlOworCiAgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IFNjcmlwdEV4ZWN1
dGFibGU6OlN0cnVjdHVyZUZsYWdzOwogICAgIFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZT4gbV91bmxpbmtlZEV4ZWN1dGFibGU7CiAgICAgUmVmUHRyPEZ1bmN0aW9uQ29k
ZUJsb2NrPiBtX2NvZGVCbG9ja0ZvckNhbGw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FeGVjdXRpb25IYXJuZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhlY3V0aW9uSGFybmVzcy5oCShyZXZpc2lvbiAxNTQ2MzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRpb25IYXJuZXNzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ1LDcgKzQ1LDcgQEAgaW5saW5lIENvbXBpbGF0aW9uUmVzdWx0IHByZXBhcmVG
b3JFeGVjdQogI2lmIEVOQUJMRShMTElOVCkKICAgICBpZiAoSklUQ29kZTo6aXNCYXNlbGluZUNv
ZGUoaml0VHlwZSkpIHsKICAgICAgICAgLy8gU3RhcnQgb2ZmIGluIHRoZSBsb3cgbGV2ZWwgaW50
ZXJwcmV0ZXIuCi0gICAgICAgIExMSW50OjpnZXRFbnRyeXBvaW50KGV4ZWMtPnZtKCksIGNvZGVC
bG9jaywgaml0Q29kZSk7CisgICAgICAgIExMSW50OjpnZXRFbnRyeXBvaW50KGV4ZWMtPnZtKCks
IGNvZGVCbG9jayk7CiAgICAgICAgIGlmIChleGVjLT52bSgpLm1fcGVyQnl0ZWNvZGVQcm9maWxl
cikKICAgICAgICAgICAgIGV4ZWMtPnZtKCkubV9wZXJCeXRlY29kZVByb2ZpbGVyLT5lbnN1cmVC
eXRlY29kZXNGb3IoY29kZUJsb2NrKTsKICAgICAgICAgcmV0dXJuIENvbXBpbGF0aW9uU3VjY2Vz
c2Z1bDsKQEAgLTcwLDcgKzcwLDcgQEAgaW5saW5lIENvbXBpbGF0aW9uUmVzdWx0IHByZXBhcmVG
dW5jdGlvbgogI2lmIEVOQUJMRShMTElOVCkKICAgICBpZiAoSklUQ29kZTo6aXNCYXNlbGluZUNv
ZGUoaml0VHlwZSkpIHsKICAgICAgICAgLy8gU3RhcnQgb2ZmIGluIHRoZSBsb3cgbGV2ZWwgaW50
ZXJwcmV0ZXIuCi0gICAgICAgIExMSW50OjpnZXRGdW5jdGlvbkVudHJ5cG9pbnQoZXhlYy0+dm0o
KSwga2luZCwgaml0Q29kZSwgaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKKyAgICAgICAgTExJbnQ6
OmdldEZ1bmN0aW9uRW50cnlwb2ludChleGVjLT52bSgpLCBjb2RlQmxvY2spOwogICAgICAgICBp
ZiAoZXhlYy0+dm0oKS5tX3BlckJ5dGVjb2RlUHJvZmlsZXIpCiAgICAgICAgICAgICBleGVjLT52
bSgpLm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+ZW5zdXJlQnl0ZWNvZGVzRm9yKGNvZGVCbG9jayk7
CiAgICAgICAgIHJldHVybiBDb21waWxhdGlvblN1Y2Nlc3NmdWw7CkBAIC04OCw0NCArODgsMTUg
QEAgaW5saW5lIENvbXBpbGF0aW9uUmVzdWx0IHByZXBhcmVGdW5jdGlvbgogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgotaW5saW5lIENvbXBpbGF0aW9uUmVzdWx0IGluc3Rh
bGxPcHRpbWl6ZWRDb2RlKAotICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCwgUmVmUHRyPENv
ZGVCbG9ja1R5cGU+JiBzaW5rLCBDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssCi0gICAgUGFzc1Jl
ZlB0cjxKSVRDb2RlPiBqaXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgaml0Q29kZVdpdGhB
cml0eUNoZWNrLAotICAgIGludCogbnVtUGFyYW1ldGVycykKLXsKLSAgICBVTlVTRURfUEFSQU0o
aml0Q29kZVdpdGhBcml0eUNoZWNrKTsKLSAgICBpZiAocmVzdWx0ICE9IENvbXBpbGF0aW9uU3Vj
Y2Vzc2Z1bCkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAKLSNpZiBFTkFCTEUoSklUKQot
ICAgIGNvZGVCbG9jay0+c2V0SklUQ29kZShqaXRDb2RlLCBqaXRDb2RlV2l0aEFyaXR5Q2hlY2sp
OwotI2VuZGlmCi0KLSAgICBzaW5rID0gY29kZUJsb2NrOwotICAgIAotICAgIGlmIChudW1QYXJh
bWV0ZXJzKQotICAgICAgICAqbnVtUGFyYW1ldGVycyA9IGNvZGVCbG9jay0+bnVtUGFyYW1ldGVy
cygpOwotICAgIAotICAgIGlmIChqaXRDb2RlKQotICAgICAgICBjb2RlQmxvY2stPnZtKCktPmhl
YXAucmVwb3J0RXh0cmFNZW1vcnlDb3N0KHNpemVvZigqY29kZUJsb2NrKSArIGppdENvZGUtPnNp
emUoKSk7Ci0gICAgZWxzZQotICAgICAgICBjb2RlQmxvY2stPnZtKCktPmhlYXAucmVwb3J0RXh0
cmFNZW1vcnlDb3N0KHNpemVvZigqY29kZUJsb2NrKSk7Ci0gICAgCi0gICAgaWYgKHNpbmsgIT0g
Y29kZUJsb2NrKSB7Ci0gICAgICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBpZiB3ZSBHQyBhbmQgZGVj
aWRlIHRoYXQgdGhlIGNvZGUgaXMgaW52YWxpZC4KLSAgICAgICAgcmV0dXJuIENvbXBpbGF0aW9u
SW52YWxpZGF0ZWQ7Ci0gICAgfQotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXRlbXBs
YXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CiBpbmxpbmUgQ29tcGlsYXRpb25SZXN1bHQgcHJl
cGFyZUZvckV4ZWN1dGlvbigKLSAgICBFeGVjU3RhdGUqIGV4ZWMsIFJlZlB0cjxDb2RlQmxvY2tU
eXBlPiYgc2luaywgQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLAotICAgIFJlZlB0cjxKSVRDb2Rl
PiYgaml0Q29kZSwgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlLCB1bnNpZ25lZCBieXRlY29kZUlu
ZGV4KQorICAgIEV4ZWNTdGF0ZSogZXhlYywgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUsIENv
ZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywKKyAgICBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUsIHVu
c2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiB7CiAgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0g
cHJlcGFyZUZvckV4ZWN1dGlvbkltcGwoZXhlYywgY29kZUJsb2NrLCBqaXRDb2RlLCBqaXRUeXBl
LCBieXRlY29kZUluZGV4KTsKLSAgICByZXR1cm4gaW5zdGFsbE9wdGltaXplZENvZGUocmVzdWx0
LCBzaW5rLCBjb2RlQmxvY2ssIGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpLCAwKTsK
KyAgICBpZiAocmVzdWx0ICE9IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bCkKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICBleGVjdXRhYmxlLT5pbnN0YWxsQ29kZShjb2RlQmxvY2spOworICAgIHJl
dHVybiBDb21waWxhdGlvblN1Y2Nlc3NmdWw7CiB9CiAKIGlubGluZSBDb21waWxhdGlvblJlc3Vs
dCBwcmVwYXJlRnVuY3Rpb25Gb3JFeGVjdXRpb24oCkBAIC0xMzYsNyArMTA3LDEwIEBAIGlubGlu
ZSBDb21waWxhdGlvblJlc3VsdCBwcmVwYXJlRnVuY3Rpb24KIHsKICAgICBDb21waWxhdGlvblJl
c3VsdCByZXN1bHQgPSBwcmVwYXJlRnVuY3Rpb25Gb3JFeGVjdXRpb25JbXBsKGV4ZWMsIGNvZGVC
bG9jaywKICAgICAgICAgaml0Q29kZSwgaml0Q29kZVdpdGhBcml0eUNoZWNrLCBqaXRUeXBlLCBi
eXRlY29kZUluZGV4LCBraW5kKTsKLSAgICByZXR1cm4gaW5zdGFsbE9wdGltaXplZENvZGUocmVz
dWx0LCBzaW5rLCBjb2RlQmxvY2ssIGppdENvZGUsIGppdENvZGVXaXRoQXJpdHlDaGVjaywgJm51
bVBhcmFtZXRlcnMpOworICAgIGlmIChyZXN1bHQgIT0gQ29tcGlsYXRpb25TdWNjZXNzZnVsKQor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIGV4ZWN1dGFibGUtPmluc3RhbGxDb2RlKGNvZGVC
bG9jayk7CisgICAgcmV0dXJuIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDsKIH0KIAogI2lmIEVOQUJM
RShERkdfSklUKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>209797</attachid>
            <date>2013-08-27 13:54:29 -0700</date>
            <delta_ts>2013-08-27 18:53:43 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>83735</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTQ2MzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtODYsOCArODYsNiBAQAogCQkwRjFFM0E0NjE1MzRDQkFG
MDAwRjk0NTYgLyogREZHQXJndW1lbnRQb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRTNBNDMxNTM0Q0JBRDAwMEY5NDU2IC8qIERGR0Fy
Z3VtZW50UG9zaXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjFFM0E0NzE1MzRDQkI5MDAwRjk0NTYgLyogREZHRG91YmxlRm9ybWF0U3Rh
dGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUUz
QTQ0MTUzNENCQUQwMDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMUUzQTY3MTUzQTIxRTIw
MDBGOTQ1NiAvKiBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFFM0E2NTE1M0EyMURGMDAwRjk0NTYgLyog
REZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07Ci0JCTBGMjFDMjY4MTRCRTVGNjgwMEFEQzY0QiAvKiBKSVREcml2
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjFD
MjY2MTRCRTVGNUUwMEFEQzY0QiAvKiBKSVREcml2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjIxQzI3QzE0QkU3Mjc2MDBBREM2NEIgLyog
RXhlY3V0aW9uSGFybmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyMUMyN0ExNEJFNzI3MzAwQURDNjRCIC8qIEV4ZWN1dGlvbkhhcm5lc3MuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjIxQzI3
RDE0QkU3MjdBMDBBREM2NEIgLyogQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMUMyNzkxNEJFNzI3MzAwQURD
NjRCIC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjIxQzI3RjE0QkVBQTgyMDBBREM2NEIgLyogQnl0
ZWNvZGVDb252ZW50aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyMUMyN0UxNEJFQUE4MDAwQURDNjRCIC8qIEJ5dGVjb2RlQ29udmVudGlvbnMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjIz
NUJEMTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMQ0FyZ3VtZW50R2V0dGVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjM1QkJCMTcxNzhFMUMwMDY5
MEM3RiAvKiBGVExDQXJndW1lbnRHZXR0ZXIuY3BwICovOyB9OwpAQCAtMTI0Myw5ICsxMjQxLDcg
QEAKIAkJMEYxRTNBNDQxNTM0Q0JBRDAwMEY5NDU2IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0RvdWJsZUZvcm1hdFN0YXRlLmg7
IHBhdGggPSBkZmcvREZHRG91YmxlRm9ybWF0U3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEYxRTNBNTAxNTM3QzJDQjAwMEY5NDU2IC8qIERGR1Nsb3dQYXRoR2VuZXJhdG9y
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1Nsb3dQYXRoR2VuZXJhdG9y
Lmg7IHBhdGggPSBkZmcvREZHU2xvd1BhdGhHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEYxRTNBNjUxNTNBMjFERjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVy
U2F2ZVBsYW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU2lsZW50UmVn
aXN0ZXJTYXZlUGxhbi5oOyBwYXRoID0gZGZnL0RGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYyMUMyNjYxNEJFNUY1RTAwQURDNjRCIC8q
IEpJVERyaXZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVREcml2ZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyMUMyNzkxNEJFNzI3MzAwQURDNjRC
IC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkwRjIxQzI3QTE0QkU3MjczMDBBREM2NEIgLyogRXhlY3V0aW9uSGFybmVzcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeGVjdXRpb25IYXJuZXNzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjFDMjdFMTRCRUFBODAwMEFEQzY0QiAvKiBCeXRlY29k
ZUNvbnZlbnRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5dGVjb2Rl
Q29udmVudGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyMzVCQkIxNzE3
OEUxQzAwNjkwQzdGIC8qIEZUTENBcmd1bWVudEdldHRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBGVExDQXJndW1lbnRHZXR0ZXIuY3BwOyBwYXRoID0gZnRsL0ZU
TENBcmd1bWVudEdldHRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjM1
QkJDMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExDQXJndW1lbnRHZXR0ZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMQ0FyZ3VtZW50R2V0dGVyLmg7IHBhdGggPSBmdGwvRlRM
Q0FyZ3VtZW50R2V0dGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNjM2LDcg
KzI2MzIsNiBAQAogCQkJCTBGMDc3NkJEMTRGRjAwMjgwMDEwMjMzMiAvKiBKSVRDb21waWxhdGlv
bkVmZm9ydC5oICovLAogCQkJCTBGQUY3RUZBMTY1QkE5MTkwMDBDODQ1NSAvKiBKSVREaXNhc3Nl
bWJsZXIuY3BwICovLAogCQkJCTBGQUY3RUZCMTY1QkE5MTkwMDBDODQ1NSAvKiBKSVREaXNhc3Nl
bWJsZXIuaCAqLywKLQkJCQkwRjIxQzI2NjE0QkU1RjVFMDBBREM2NEIgLyogSklURHJpdmVyLmgg
Ki8sCiAJCQkJMEY0NjgwN0YxNEJBNTcyNzAwQkZFMjcyIC8qIEpJVEV4Y2VwdGlvbnMuY3BwICov
LAogCQkJCTBGNDY4MDgwMTRCQTU3MjcwMEJGRTI3MiAvKiBKSVRFeGNlcHRpb25zLmggKi8sCiAJ
CQkJODZDQzg1QTAwRUU3OUE0NzAwMjg4NjgyIC8qIEpJVElubGluZXMuaCAqLywKQEAgLTMwNDAs
NyArMzAzNSw2IEBACiAJCQkJQTcyNzAxQjMwREFERTk0OTAwRTU0OEQ3IC8qIEV4Y2VwdGlvbkhl
bHBlcnMuaCAqLywKIAkJCQk4NkNBMDMyRDEwMzhFODQ0MDAyOEE2MDkgLyogRXhlY3V0YWJsZS5j
cHAgKi8sCiAJCQkJODZDQUZFRTIxMDM1RERFNjAwMjhBNjA5IC8qIEV4ZWN1dGFibGUuaCAqLywK
LQkJCQkwRjIxQzI3QTE0QkU3MjczMDBBREM2NEIgLyogRXhlY3V0aW9uSGFybmVzcy5oICovLAog
CQkJCUE3QThBRjI5MTdBREI1RjMwMDVBQjE3NCAvKiBGbG9hdDMyQXJyYXkuaCAqLywKIAkJCQlB
N0E4QUYyQTE3QURCNUYzMDA1QUIxNzQgLyogRmxvYXQ2NEFycmF5LmggKi8sCiAJCQkJQkMyNjgw
QzAwRTE2RDRFOTAwQTA2RTkyIC8qIEZ1bmN0aW9uQ29uc3RydWN0b3IuY3BwICovLApAQCAtMzkz
Nyw3ICszOTMxLDYgQEAKIAkJCQk4NkNBRkVFMzEwMzVEREU2MDAyOEE2MDkgLyogRXhlY3V0YWJs
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc2NkI0NEYwRUU4RENEMTAwOTUxOENBIC8qIEV4ZWN1
dGFibGVBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTZBMUQzMTUwMDBGMzUwMDI5
OTJCMSAvKiBFeGVjdXRpb25Db3VudGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjIxQzI3QzE0
QkU3Mjc2MDBBREM2NEIgLyogRXhlY3V0aW9uSGFybmVzcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZCMTA1ODYxNjc1NDgxMjAwRjhBQjZFIC8qIEV4aXRLaW5kLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjBCODNBQjE0QkNGNUJCMDA4ODVCNEYgLyogRXhwcmVzc2lvblJhbmdlSW5mby5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTdBOEFGMzgxN0FEQjVGMzAwNUFCMTc0IC8qIEZsb2F0MzJBcnJheS5o
IGluIEhlYWRlcnMgKi8sCkBAIC00MDI2LDcgKzQwMTksNiBAQAogCQkJCTg2Q0NFRkRFMEY0MTNG
ODkwMEZEN0Y5RSAvKiBKSVRDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjA3NzZCRjE0RkYw
MDJCMDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGQUY3RUZFMTY1QkE5MUYwMDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTBGMjFDMjY4MTRCRTVGNjgwMEFEQzY0QiAvKiBKSVREcml2ZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGNDY4MDgyMTRCQTU3MkQwMEJGRTI3MiAvKiBKSVRFeGNlcHRpb25zLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NkNDODVBMTBFRTc5QTQ3MDAyODg2ODIgLyogSklUSW5saW5l
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTYwNjI2OTYwRkI4RUMwMjAwOTc5OEFCIC8qIEpJVFN0
dWJDYWxsLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxNTQ2MzIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY4OSw2
ICsyNjg5LDU0IEBAIHZvaWQgQ29kZUJsb2NrOjpjb3B5UG9zdFBhcnNlRGF0YUZyb21BbHQKICAg
ICBjb3B5UG9zdFBhcnNlRGF0YUZyb20obV9hbHRlcm5hdGl2ZS5nZXQoKSk7CiB9CiAKK0NvbXBp
bGF0aW9uUmVzdWx0IENvZGVCbG9jazo6cHJlcGFyZUZvckV4ZWN1dGlvbigKKyAgICBFeGVjU3Rh
dGUqIGV4ZWMsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSwgSklUQ29tcGlsYXRpb25FZmZvcnQg
ZWZmb3J0LAorICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIFBhc3NSZWZQdHI8RGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrPiBjYWxsYmFjaykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworICAgIAorICAgIGlmIChqaXRUeXBlID09IEpJVENvZGU6OkludGVycHJldGVyVGh1bmspIHsK
KyAgICAgICAgc3dpdGNoIChjb2RlVHlwZSgpKSB7CisgICAgICAgIGNhc2UgR2xvYmFsQ29kZToK
KyAgICAgICAgICAgIExMSW50OjpnZXRFbnRyeXBvaW50KHZtLCBzdGF0aWNfY2FzdDxHbG9iYWxD
b2RlQmxvY2sqPih0aGlzKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFdmFs
Q29kZToKKyAgICAgICAgICAgIExMSW50OjpnZXRFbnRyeXBvaW50KHZtLCBzdGF0aWNfY2FzdDxF
dmFsQ29kZUJsb2NrKj4odGhpcykpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
RnVuY3Rpb25Db2RlOgorICAgICAgICAgICAgTExJbnQ6OmdldEZ1bmN0aW9uRW50cnlwb2ludCh2
bSwgc3RhdGljX2Nhc3Q8RnVuY3Rpb25Db2RlQmxvY2sqPih0aGlzKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25TdWNjZXNzZnVsOwor
ICAgIH0KKyAgICAKKyNpZiBFTkFCTEUoSklUKQorICAgIGlmIChKSVRDb2RlOjppc09wdGltaXpp
bmdKSVQoaml0VHlwZSkpIHsKKyAgICAgICAgQVNTRVJUKGVmZm9ydCA9PSBKSVRDb21waWxhdGlv
bkNhbkZhaWwpOworICAgICAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBERkc6OnRyeUNv
bXBpbGUoZXhlYywgdGhpcywgYnl0ZWNvZGVJbmRleCwgY2FsbGJhY2spOworICAgICAgICBBU1NF
UlQocmVzdWx0ICE9IENvbXBpbGF0aW9uRGVmZXJyZWQgfHwgY2FsbGJhY2spOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgaml0
Q29kZVdpdGhBcml0eUNoZWNrOworICAgIFJlZlB0cjxKSVRDb2RlPiBqaXRDb2RlID0gSklUOjpj
b21waWxlKCZ2bSwgdGhpcywgZWZmb3J0LCAmaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKKyAgICBp
ZiAoIWppdENvZGUpCisgICAgICAgIHJldHVybiBDb21waWxhdGlvbkZhaWxlZDsKKyAgICBjb2Rl
QmxvY2stPnNldEpJVENvZGUoaml0Q29kZSwgaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKKyAgICBy
ZXR1cm4gQ29tcGlsYXRpb25TdWNjZXNzZnVsOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZWZm
b3J0KTsKKyAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVJbmRleCk7CisgICAgVU5VU0VEX1BBUkFN
KGNhbGxiYWNrKTsKKyAgICByZXR1cm4gQ29tcGlsYXRpb25GYWlsZWQ7CisjZW5kaWYgLy8gRU5B
QkxFKEpJVCkKK30KKwordm9pZCBDb2RlQmxvY2s6Omluc3RhbGwoKQoreworICAgIG93bmVyRXhl
Y3V0YWJsZSgpLT5pbnN0YWxsQ29kZSh0aGlzKTsKK30KKwogI2lmIEVOQUJMRShKSVQpCiB2b2lk
IENvZGVCbG9jazo6cmVvcHRpbWl6ZSgpCiB7CkBAIC0yNzI2LDExICsyNzc0LDYgQEAgSlNPYmpl
Y3QqIFByb2dyYW1Db2RlQmxvY2s6OmNvbXBpbGVPcHRpbQogICAgIHJldHVybiBlcnJvcjsKIH0K
IAotQ29tcGlsYXRpb25SZXN1bHQgUHJvZ3JhbUNvZGVCbG9jazo6cmVwbGFjZVdpdGhEZWZlcnJl
ZE9wdGltaXplZENvZGUoUGFzc1JlZlB0cjxERkc6OlBsYW4+IHBsYW4pCi17Ci0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5yZXBs
YWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZShwbGFuKTsKLX0KLQogSlNPYmplY3QqIEV2YWxD
b2RlQmxvY2s6OmNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29w
ZSwgQ29tcGlsYXRpb25SZXN1bHQmIHJlc3VsdCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKIHsK
ICAgICBpZiAoSklUQ29kZTo6aXNIaWdoZXJUaWVyKHJlcGxhY2VtZW50KCktPmppdFR5cGUoKSwg
aml0VHlwZSgpKSkgewpAQCAtMjc0MSwxMSArMjc4NCw2IEBAIEpTT2JqZWN0KiBFdmFsQ29kZUJs
b2NrOjpjb21waWxlT3B0aW1pemUKICAgICByZXR1cm4gZXJyb3I7CiB9CiAKLUNvbXBpbGF0aW9u
UmVzdWx0IEV2YWxDb2RlQmxvY2s6OnJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlKFBh
c3NSZWZQdHI8REZHOjpQbGFuPiBwbGFuKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxFdmFs
RXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+cmVwbGFjZVdpdGhEZWZlcnJlZE9wdGlt
aXplZENvZGUocGxhbik7Ci19Ci0KIEpTT2JqZWN0KiBGdW5jdGlvbkNvZGVCbG9jazo6Y29tcGls
ZU9wdGltaXplZChFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCBDb21waWxhdGlvblJl
c3VsdCYgcmVzdWx0LCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQogewogICAgIGlmIChKSVRDb2Rl
Ojppc0hpZ2hlclRpZXIocmVwbGFjZW1lbnQoKS0+aml0VHlwZSgpLCBqaXRUeXBlKCkpKSB7CkBA
IC0yNzU1LDExICsyNzkzLDYgQEAgSlNPYmplY3QqIEZ1bmN0aW9uQ29kZUJsb2NrOjpjb21waWxl
T3B0aQogICAgIEpTT2JqZWN0KiBlcnJvciA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJs
ZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+Y29tcGlsZU9wdGltaXplZEZvcihleGVjLCBzY29wZSwg
cmVzdWx0LCBieXRlY29kZUluZGV4LCBtX2lzQ29uc3RydWN0b3IgPyBDb2RlRm9yQ29uc3RydWN0
IDogQ29kZUZvckNhbGwpOwogICAgIHJldHVybiBlcnJvcjsKIH0KLQotQ29tcGlsYXRpb25SZXN1
bHQgRnVuY3Rpb25Db2RlQmxvY2s6OnJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlKFBh
c3NSZWZQdHI8REZHOjpQbGFuPiBwbGFuKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxGdW5j
dGlvbkV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPnJlcGxhY2VXaXRoRGVmZXJyZWRP
cHRpbWl6ZWRDb2RlRm9yKHBsYW4sIG1faXNDb25zdHJ1Y3RvciA/IENvZGVGb3JDb25zdHJ1Y3Qg
OiBDb2RlRm9yQ2FsbCk7Ci19CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAKIERGRzo6Q2Fw
YWJpbGl0eUxldmVsIFByb2dyYW1Db2RlQmxvY2s6OmNhcGFiaWxpdHlMZXZlbEludGVybmFsKCkK
QEAgLTI4MDQsMjcgKzI4MzcsNiBAQCB2b2lkIEZ1bmN0aW9uQ29kZUJsb2NrOjpqZXR0aXNvbklt
cGwoKQogewogICAgIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0
YWJsZSgpKS0+amV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yKCp2bSgpLCBtX2lzQ29uc3RydWN0b3Ig
PyBDb2RlRm9yQ29uc3RydWN0IDogQ29kZUZvckNhbGwpOwogfQotCi1Db21waWxhdGlvblJlc3Vs
dCBQcm9ncmFtQ29kZUJsb2NrOjpqaXRDb21waWxlSW1wbChFeGVjU3RhdGUqIGV4ZWMpCi17Ci0g
ICAgQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKTsKLSAgICBB
U1NFUlQodGhpcyA9PSByZXBsYWNlbWVudCgpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHJv
Z3JhbUV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmppdENvbXBpbGUoZXhlYyk7Ci19
Ci0KLUNvbXBpbGF0aW9uUmVzdWx0IEV2YWxDb2RlQmxvY2s6OmppdENvbXBpbGVJbXBsKEV4ZWNT
dGF0ZSogZXhlYykKLXsKLSAgICBBU1NFUlQoaml0VHlwZSgpID09IEpJVENvZGU6OkludGVycHJl
dGVyVGh1bmspOwotICAgIEFTU0VSVCh0aGlzID09IHJlcGxhY2VtZW50KCkpOwotICAgIHJldHVy
biBzdGF0aWNfY2FzdDxFdmFsRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+aml0Q29t
cGlsZShleGVjKTsKLX0KLQotQ29tcGlsYXRpb25SZXN1bHQgRnVuY3Rpb25Db2RlQmxvY2s6Ompp
dENvbXBpbGVJbXBsKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBBU1NFUlQoaml0VHlwZSgpID09
IEpJVENvZGU6OkludGVycHJldGVyVGh1bmspOwotICAgIEFTU0VSVCh0aGlzID09IHJlcGxhY2Vt
ZW50KCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihvd25l
ckV4ZWN1dGFibGUoKSktPmppdENvbXBpbGVGb3IoZXhlYywgbV9pc0NvbnN0cnVjdG9yID8gQ29k
ZUZvckNvbnN0cnVjdCA6IENvZGVGb3JDYWxsKTsKLX0KICNlbmRpZgogCiBKU0dsb2JhbE9iamVj
dCogQ29kZUJsb2NrOjpnbG9iYWxPYmplY3RGb3IoQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24g
MTU0NjMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBACiAjaW5jbHVkZSAiREZHT1NSRW50cnkuaCIK
ICNpbmNsdWRlICJERkdPU1JFeGl0LmgiCiAjaW5jbHVkZSAiREZHVmFyaWFibGVFdmVudFN0cmVh
bS5oIgorI2luY2x1ZGUgIkRlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIgogI2luY2x1ZGUg
IkV2YWxDb2RlQ2FjaGUuaCIKICNpbmNsdWRlICJFeGVjdXRpb25Db3VudGVyLmgiCiAjaW5jbHVk
ZSAiRXhwcmVzc2lvblJhbmdlSW5mby5oIgpAQCAtMjkyLDE3ICsyOTMsMTUgQEAgcHVibGljOgog
ICAgIH0KICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxl
T3B0aW1pemVkKEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBDb21waWxhdGlvblJlc3VsdCYsIHVuc2ln
bmVkIGJ5dGVjb2RlSW5kZXgpID0gMDsKLSAgICB2aXJ0dWFsIENvbXBpbGF0aW9uUmVzdWx0IHJl
cGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlKFBhc3NSZWZQdHI8REZHOjpQbGFuPikgPSAw
OwogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogICAgIHZvaWQgamV0dGlzb24oKTsKLSAgICBD
b21waWxhdGlvblJlc3VsdCBqaXRDb21waWxlKEV4ZWNTdGF0ZSogZXhlYykKLSAgICB7Ci0gICAg
ICAgIGlmIChqaXRUeXBlKCkgIT0gSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykgewotICAgICAg
ICAgICAgQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7Ci0gICAgICAg
ICAgICByZXR1cm4gQ29tcGlsYXRpb25Ob3ROZWVkZWQ7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIGppdENvbXBpbGVJbXBsKGV4ZWMpOwotICAgIH0KKyAgICBDb21waWxhdGlvblJlc3VsdCBw
cmVwYXJlRm9yRXhlY3V0aW9uKAorICAgICAgICBFeGVjU3RhdGUqLCBKSVRDb2RlOjpKSVRUeXBl
LAorICAgICAgICBKSVRDb21waWxhdGlvbkVmZm9ydCA9IEpJVENvbXBpbGF0aW9uTXVzdFN1Y2Nl
ZWQsCisgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBVSU5UX01BWCwKKyAgICAgICAg
UGFzc1JlZlB0cjxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+ID0gMCk7CisgICAgdm9pZCBp
bnN0YWxsKCk7CisgICAgCiAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCkgPSAw
OwogCiAgICAgdmlydHVhbCBERkc6OkNhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWxJbnRl
cm5hbCgpID0gMDsKQEAgLTk2OSw3ICs5NjgsNiBAQCBwdWJsaWM6CiAgICAgCiBwcm90ZWN0ZWQ6
CiAjaWYgRU5BQkxFKEpJVCkKLSAgICB2aXJ0dWFsIENvbXBpbGF0aW9uUmVzdWx0IGppdENvbXBp
bGVJbXBsKEV4ZWNTdGF0ZSopID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb25JbXBsKCkg
PSAwOwogI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIHZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZp
c2l0b3ImKTsKQEAgLTExOTYsMTEgKzExOTQsOSBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAjaWYg
RU5BQkxFKERGR19KSVQpCiAgICAgdmlydHVhbCBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChF
eGVjU3RhdGUqLCBKU1Njb3BlKiwgQ29tcGlsYXRpb25SZXN1bHQmLCB1bnNpZ25lZCBieXRlY29k
ZUluZGV4KTsKLSAgICB2aXJ0dWFsIENvbXBpbGF0aW9uUmVzdWx0IHJlcGxhY2VXaXRoRGVmZXJy
ZWRPcHRpbWl6ZWRDb2RlKFBhc3NSZWZQdHI8REZHOjpQbGFuPik7CiAjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCiAKICAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb25JbXBsKCk7Ci0gICAgdmlydHVh
bCBDb21waWxhdGlvblJlc3VsdCBqaXRDb21waWxlSW1wbChFeGVjU3RhdGUqKTsKICAgICB2aXJ0
dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKTsKICAgICB2aXJ0dWFsIERGRzo6Q2FwYWJpbGl0
eUxldmVsIGNhcGFiaWxpdHlMZXZlbEludGVybmFsKCk7CiAjZW5kaWYKQEAgLTEyMjUsMTEgKzEy
MjEsOSBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgdmly
dHVhbCBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBKU1Njb3BlKiwgQ29t
cGlsYXRpb25SZXN1bHQmLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKLSAgICB2aXJ0dWFsIENv
bXBpbGF0aW9uUmVzdWx0IHJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlKFBhc3NSZWZQ
dHI8REZHOjpQbGFuPik7CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAKICAgICB2aXJ0dWFs
IHZvaWQgamV0dGlzb25JbXBsKCk7Ci0gICAgdmlydHVhbCBDb21waWxhdGlvblJlc3VsdCBqaXRD
b21waWxlSW1wbChFeGVjU3RhdGUqKTsKICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1l
bnQoKTsKICAgICB2aXJ0dWFsIERGRzo6Q2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbElu
dGVybmFsKCk7CiAjZW5kaWYKQEAgLTEyNTQsMTEgKzEyNDgsOSBAQCBwdWJsaWM6CiBwcm90ZWN0
ZWQ6CiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgdmlydHVhbCBKU09iamVjdCogY29tcGlsZU9w
dGltaXplZChFeGVjU3RhdGUqLCBKU1Njb3BlKiwgQ29tcGlsYXRpb25SZXN1bHQmLCB1bnNpZ25l
ZCBieXRlY29kZUluZGV4KTsKLSAgICB2aXJ0dWFsIENvbXBpbGF0aW9uUmVzdWx0IHJlcGxhY2VX
aXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlKFBhc3NSZWZQdHI8REZHOjpQbGFuPik7CiAjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCiAKICAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb25JbXBsKCk7Ci0g
ICAgdmlydHVhbCBDb21waWxhdGlvblJlc3VsdCBqaXRDb21waWxlSW1wbChFeGVjU3RhdGUqKTsK
ICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKTsKICAgICB2aXJ0dWFsIERGRzo6
Q2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbEludGVybmFsKCk7CiAjZW5kaWYKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitEZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2s6OkRlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaygpIHsgfQorRGVmZXJy
ZWRDb21waWxhdGlvbkNhbGxiYWNrOjp+RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrKCkgeyB9
CisKK30gLy8gSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVmZXJyZWRDb21waWxhdGlvbkNh
bGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFja19oCisjZGVmaW5lIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFja19oCisKKyNp
bmNsdWRlICJDb21waWxhdGlvblJlc3VsdC5oIgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb2RlQmxvY2s7CisKK2NsYXNzIERlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjayA6IHB1YmxpYyBSZWZDb3VudGVkPERlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFjaz4geworcHVibGljOgorICAgIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaygp
OworICAgIHZpcnR1YWwgfkRlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaygpOworCisgICAgdmly
dHVhbCB2b2lkIGNvbXBpbGF0aW9uRGlkQ29tcGxldGUoQ29kZUJsb2NrKiwgQ29tcGlsYXRpb25S
ZXN1bHQpID0gMDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRGVmZXJy
ZWRDb21waWxhdGlvbkNhbGxiYWNrX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEcml2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRHJpdmVyLmNwcAkocmV2aXNpb24gMTU0NjMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEcml2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIHVuc2ln
bmVkIGdldE51bUNvbXBpbGF0aW9ucygpCiAgICAgcmV0dXJuIG51bUNvbXBpbGF0aW9uczsKIH0K
IAotc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGUoQ29tcGlsZU1vZGUgY29tcGlsZU1v
ZGUsIEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFJlZlB0cjxKU0M6OkpJ
VENvZGU+JiBqaXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIqIGppdENvZGVXaXRoQXJpdHlD
aGVjaywgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4KQorQ29tcGlsYXRpb25SZXN1bHQg
dHJ5Q29tcGlsZShFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25l
ZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIFBhc3NSZWZQdHI8RGVmZXJyZWRDb21waWxhdGlvbkNh
bGxiYWNrPiBjYWxsYmFjaykKIHsKICAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigi
REZHIENvbXBpbGF0aW9uIChEcml2ZXIpIik7CiAgICAgCkBAIC05OSw3ICs5OSw3IEBAIHN0YXRp
YyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlKENvbXBpbGUKICAgICBlbHNlCiAgICAgICAgIG51
bVZhcnNXaXRoVmFsdWVzID0gMDsKICAgICBSZWZQdHI8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKAot
ICAgICAgICBuZXcgUGxhbihjb21waWxlTW9kZSwgY29kZUJsb2NrLCBvc3JFbnRyeUJ5dGVjb2Rl
SW5kZXgsIG51bVZhcnNXaXRoVmFsdWVzKSk7CisgICAgICAgIG5ldyBQbGFuKGNvZGVCbG9jaywg
b3NyRW50cnlCeXRlY29kZUluZGV4LCBudW1WYXJzV2l0aFZhbHVlcykpOwogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgcGxhbi0+bXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7ICsraSkgewogICAg
ICAgICBpbnQgb3BlcmFuZCA9IHBsYW4tPm11c3RIYW5kbGVWYWx1ZXMub3BlcmFuZEZvckluZGV4
KGkpOwogICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkKQEAgLTExNSw3ICsx
MTUsOCBAQCBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZShDb21waWxlCiAgICAgICAg
ICAgICBwbGFuLT5tdXN0SGFuZGxlVmFsdWVzW2ldID0gZXhlYy0+dW5jaGVja2VkUihvcGVyYW5k
KS5qc1ZhbHVlKCk7CiAgICAgfQogICAgIAotICAgIGlmIChlbmFibGVDb25jdXJyZW50SklUKCkp
IHsKKyAgICBpZiAoZW5hYmxlQ29uY3VycmVudEpJVCgpICYmIGNhbGxiYWNrKSB7CisgICAgICAg
IHBsYW4tPmNhbGxiYWNrID0gY2FsbGJhY2s7CiAgICAgICAgIGlmICghdm0ud29ya2xpc3QpCiAg
ICAgICAgICAgICB2bS53b3JrbGlzdCA9IGdsb2JhbFdvcmtsaXN0KCk7CiAgICAgICAgIGlmIChs
b2dDb21waWxhdGlvbkNoYW5nZXMoKSkKQEAgLTEyNSwyMiArMTI2LDcgQEAgc3RhdGljIENvbXBp
bGF0aW9uUmVzdWx0IGNvbXBpbGUoQ29tcGlsZQogICAgIH0KICAgICAKICAgICBwbGFuLT5jb21w
aWxlSW5UaHJlYWQoKnZtLmRmZ1N0YXRlKTsKLSAgICByZXR1cm4gcGxhbi0+ZmluYWxpemUoaml0
Q29kZSwgaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKLX0KLQotQ29tcGlsYXRpb25SZXN1bHQgdHJ5
Q29tcGlsZShFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCBSZWZQdHI8SlND
OjpKSVRDb2RlPiYgaml0Q29kZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKLXsKLSAgICByZXR1
cm4gY29tcGlsZShDb21waWxlT3RoZXIsIGV4ZWMsIGNvZGVCbG9jaywgaml0Q29kZSwgMCwgYnl0
ZWNvZGVJbmRleCk7Ci19Ci0KLUNvbXBpbGF0aW9uUmVzdWx0IHRyeUNvbXBpbGVGdW5jdGlvbihF
eGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCBSZWZQdHI8SlNDOjpKSVRDb2Rl
PiYgaml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ss
IHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAgcmV0dXJuIGNvbXBpbGUoQ29tcGlsZUZ1
bmN0aW9uLCBleGVjLCBjb2RlQmxvY2ssIGppdENvZGUsICZqaXRDb2RlV2l0aEFyaXR5Q2hlY2ss
IGJ5dGVjb2RlSW5kZXgpOwotfQotCi1Db21waWxhdGlvblJlc3VsdCB0cnlGaW5hbGl6ZVBsYW4o
UGFzc1JlZlB0cjxQbGFuPiBwbGFuLCBSZWZQdHI8SlNDOjpKSVRDb2RlPiYgaml0Q29kZSwgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyKiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2spCi17Ci0gICAgcmV0dXJu
IHBsYW4tPmZpbmFsaXplKGppdENvZGUsIGppdENvZGVXaXRoQXJpdHlDaGVjayk7CisgICAgcmV0
dXJuIHBsYW4tPmZpbmFsaXplV2l0aG91dE5vdGlmeWluZ0NhbGxiYWNrKCk7CiB9CiAKIH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RHJpdmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2
ZXIuaAkocmV2aXNpb24gMTU0NjMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
cml2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTcgKzQyLDkgQEAgbmFtZXNwYWNlIERGRyB7
CiBKU19FWFBPUlRfUFJJVkFURSB1bnNpZ25lZCBnZXROdW1Db21waWxhdGlvbnMoKTsKIAogI2lm
IEVOQUJMRShERkdfSklUKQotQ29tcGlsYXRpb25SZXN1bHQgdHJ5Q29tcGlsZShFeGVjU3RhdGUq
LCBDb2RlQmxvY2sqLCBSZWZQdHI8SlNDOjpKSVRDb2RlPiYsIHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXgpOwotQ29tcGlsYXRpb25SZXN1bHQgdHJ5Q29tcGlsZUZ1bmN0aW9uKEV4ZWNTdGF0ZSosIENv
ZGVCbG9jayosIFJlZlB0cjxKU0M6OkpJVENvZGU+JiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBq
aXRDb2RlV2l0aEFyaXR5Q2hlY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwotQ29tcGlsYXRp
b25SZXN1bHQgdHJ5RmluYWxpemVQbGFuKFBhc3NSZWZQdHI8UGxhbj4sIFJlZlB0cjxKU0M6OkpJ
VENvZGU+JiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOwor
Q29tcGlsYXRpb25SZXN1bHQgdHJ5Q29tcGlsZShFeGVjU3RhdGUqLCBDb2RlQmxvY2sqLCB1bnNp
Z25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIFBhc3NSZWZQdHI8RGVmZXJyZWRDb21waWxhdGlv
bkNhbGxiYWNrPik7CiAjZWxzZQotaW5saW5lIENvbXBpbGF0aW9uUmVzdWx0IHRyeUNvbXBpbGUo
RXhlY1N0YXRlKiwgQ29kZUJsb2NrKiwgUmVmUHRyPEpTQzo6SklUQ29kZT4mLCB1bnNpZ25lZCkg
eyByZXR1cm4gQ29tcGlsYXRpb25GYWlsZWQ7IH0KLWlubGluZSBDb21waWxhdGlvblJlc3VsdCB0
cnlDb21waWxlRnVuY3Rpb24oRXhlY1N0YXRlKiwgQ29kZUJsb2NrKiwgUmVmUHRyPEpTQzo6SklU
Q29kZT4mLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImLCB1bnNpZ25lZCkgeyByZXR1cm4gQ29tcGls
YXRpb25GYWlsZWQ7IH0KLWlubGluZSBDb21waWxhdGlvblJlc3VsdCB0cnlGaW5hbGl6ZVBsYW4o
UGFzc1JlZlB0cjxQbGFuPiwgUmVmUHRyPEpTQzo6SklUQ29kZT4mLCBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIqKQotewotICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwotICAgIHJldHVybiBD
b21waWxhdGlvbkZhaWxlZDsKLX0KK2lubGluZSBDb21waWxhdGlvblJlc3VsdCB0cnlDb21waWxl
KEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIHVuc2lnbmVkLCBQYXNzUmVmUHRyPERlZmVycmVkQ29t
cGlsYXRpb25DYWxsYmFjaz4pIHsgcmV0dXJuIENvbXBpbGF0aW9uRmFpbGVkOyB9CiAjZW5kaWYK
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRGaW5hbGl6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklURmluYWxpemVyLmNwcAkocmV2aXNpb24gMTU0NjMyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NSwyMyArNDUsMjMgQEAgSklURmluYWxpemVyOjp+SklURmluYWxpemVyKCkKIHsKIH0KIAot
Ym9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplKFJlZlB0cjxKU0M6OkpJVENvZGU+JiBlbnRyeSkK
K2Jvb2wgSklURmluYWxpemVyOjpmaW5hbGl6ZSgpCiB7CiAgICAgZmluYWxpemVDb21tb24oKTsK
ICAgICAKICAgICBtX2ppdENvZGUtPmluaXRpYWxpemVDb2RlUmVmKG1fbGlua0J1ZmZlci0+Zmlu
YWxpemVDb2RlV2l0aG91dERpc2Fzc2VtYmx5KCkpOwotICAgIGVudHJ5ID0gbV9qaXRDb2RlOwor
ICAgIG1fcGxhbi5jb2RlQmxvY2stPnNldEpJVENvZGUobV9qaXRDb2RlLCBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIoKSk7CiAgICAgCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSklURmluYWxp
emVyOjpmaW5hbGl6ZUZ1bmN0aW9uKFJlZlB0cjxKU0M6OkpJVENvZGU+JiBlbnRyeSwgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyJiB3aXRoQXJpdHlDaGVjaykKK2Jvb2wgSklURmluYWxpemVyOjpmaW5h
bGl6ZUZ1bmN0aW9uKCkKIHsKICAgICBmaW5hbGl6ZUNvbW1vbigpOwogICAgIAotICAgIHdpdGhB
cml0eUNoZWNrID0gbV9saW5rQnVmZmVyLT5sb2NhdGlvbk9mKG1fYXJpdHlDaGVjayk7CisgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHdpdGhBcml0eUNoZWNrID0gbV9saW5rQnVmZmVyLT5sb2Nh
dGlvbk9mKG1fYXJpdHlDaGVjayk7CiAgICAgbV9qaXRDb2RlLT5pbml0aWFsaXplQ29kZVJlZiht
X2xpbmtCdWZmZXItPmZpbmFsaXplQ29kZVdpdGhvdXREaXNhc3NlbWJseSgpKTsKLSAgICBlbnRy
eSA9IG1faml0Q29kZTsKKyAgICBtX3BsYW4uY29kZUJsb2NrLT5zZXRKSVRDb2RlKG1faml0Q29k
ZSwgd2l0aEFyaXR5Q2hlY2spOwogICAgIAogICAgIHJldHVybiB0cnVlOwogfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAxNTQ2MzIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCwx
MCArODAsOSBAQCBzdGF0aWMgdm9pZCBkdW1wQW5kVmVyaWZ5R3JhcGgoR3JhcGgmIGdyCiB9CiAK
IFBsYW46OlBsYW4oCi0gICAgQ29tcGlsZU1vZGUgY29tcGlsZU1vZGUsIFBhc3NSZWZQdHI8Q29k
ZUJsb2NrPiBwYXNzZWRDb2RlQmxvY2ssIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwK
KyAgICBQYXNzUmVmUHRyPENvZGVCbG9jaz4gcGFzc2VkQ29kZUJsb2NrLCB1bnNpZ25lZCBvc3JF
bnRyeUJ5dGVjb2RlSW5kZXgsCiAgICAgdW5zaWduZWQgbnVtVmFyc1dpdGhWYWx1ZXMpCi0gICAg
OiBjb21waWxlTW9kZShjb21waWxlTW9kZSkKLSAgICAsIHZtKCpwYXNzZWRDb2RlQmxvY2stPnZt
KCkpCisgICAgOiB2bSgqcGFzc2VkQ29kZUJsb2NrLT52bSgpKQogICAgICwgY29kZUJsb2NrKHBh
c3NlZENvZGVCbG9jaykKICAgICAsIG9zckVudHJ5Qnl0ZWNvZGVJbmRleChvc3JFbnRyeUJ5dGVj
b2RlSW5kZXgpCiAgICAgLCBudW1WYXJzV2l0aFZhbHVlcyhudW1WYXJzV2l0aFZhbHVlcykKQEAg
LTIwOCw3ICsyMDcsNyBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhy
CiAKICNpZiBFTkFCTEUoRlRMX0pJVCkKICAgICBpZiAoT3B0aW9uczo6dXNlRXhwZXJpbWVudGFs
RlRMKCkKLSAgICAgICAgJiYgY29tcGlsZU1vZGUgPT0gQ29tcGlsZUZ1bmN0aW9uCisgICAgICAg
ICYmIGNvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUKICAgICAgICAgJiYgRlRM
OjpjYW5Db21waWxlKGRmZykpIHsKICAgICAgICAgCiAgICAgICAgIHBlcmZvcm1Dcml0aWNhbEVk
Z2VCcmVha2luZyhkZmcpOwpAQCAtMjU1LDEyICsyNTQsMTAgQEAgUGxhbjo6Q29tcGlsYXRpb25Q
YXRoIFBsYW46OmNvbXBpbGVJblRocgogICAgIGR1bXBBbmRWZXJpZnlHcmFwaChkZmcsICJHcmFw
aCBhZnRlciBvcHRpbWl6YXRpb246Iik7CiAKICAgICBKSVRDb21waWxlciBkYXRhRmxvd0pJVChk
ZmcpOwotICAgIGlmIChjb21waWxlTW9kZSA9PSBDb21waWxlRnVuY3Rpb24pIHsKKyAgICBpZiAo
Y29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkgewogICAgICAgICBkYXRhRmxv
d0pJVC5jb21waWxlRnVuY3Rpb24oKTsKICAgICAgICAgZGF0YUZsb3dKSVQubGlua0Z1bmN0aW9u
KCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJUKGNvbXBpbGVNb2RlID09IENvbXBpbGVP
dGhlcik7Ci0gICAgICAgIAogICAgICAgICBkYXRhRmxvd0pJVC5jb21waWxlKCk7CiAgICAgICAg
IGRhdGFGbG93SklULmxpbmsoKTsKICAgICB9CkBAIC0yODMsMTYgKzI4MCwxNiBAQCB2b2lkIFBs
YW46OnJlYWxseUFkZChDb21tb25EYXRhKiBjb21tb25ECiAgICAgd3JpdGVCYXJyaWVycy50cmln
Z2VyKHZtKTsKIH0KIAotQ29tcGlsYXRpb25SZXN1bHQgUGxhbjo6ZmluYWxpemUoUmVmUHRyPEpT
Qzo6SklUQ29kZT4mIGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciogaml0Q29kZVdpdGhB
cml0eUNoZWNrKQorQ29tcGlsYXRpb25SZXN1bHQgUGxhbjo6ZmluYWxpemVXaXRob3V0Tm90aWZ5
aW5nQ2FsbGJhY2soKQogewogICAgIGlmICghaXNTdGlsbFZhbGlkKCkpCiAgICAgICAgIHJldHVy
biBDb21waWxhdGlvbkludmFsaWRhdGVkOwogICAgIAogICAgIGJvb2wgcmVzdWx0OwotICAgIGlm
IChjb21waWxlTW9kZSA9PSBDb21waWxlRnVuY3Rpb24pCi0gICAgICAgIHJlc3VsdCA9IGZpbmFs
aXplci0+ZmluYWxpemVGdW5jdGlvbihqaXRDb2RlLCAqaml0Q29kZVdpdGhBcml0eUNoZWNrKTsK
KyAgICBpZiAoY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkKKyAgICAgICAg
cmVzdWx0ID0gZmluYWxpemVyLT5maW5hbGl6ZUZ1bmN0aW9uKCk7CiAgICAgZWxzZQotICAgICAg
ICByZXN1bHQgPSBmaW5hbGl6ZXItPmZpbmFsaXplKGppdENvZGUpOworICAgICAgICByZXN1bHQg
PSBmaW5hbGl6ZXItPmZpbmFsaXplKCk7CiAgICAgCiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAg
IHJldHVybiBDb21waWxhdGlvbkZhaWxlZDsKQEAgLTMwMiw2ICsyOTksMTEgQEAgQ29tcGlsYXRp
b25SZXN1bHQgUGxhbjo6ZmluYWxpemUoUmVmUHRyPAogICAgIHJldHVybiBDb21waWxhdGlvblN1
Y2Nlc3NmdWw7CiB9CiAKK3ZvaWQgUGxhbjo6ZmluYWxpemVBbmROb3RpZnlDYWxsYmFjaygpCit7
CisgICAgY2FsbGJhY2stPmNvbXBpbGF0aW9uRGlkQ29tcGxldGUoY29kZUJsb2NrLCBmaW5hbGl6
ZVdpdGhvdXROb3RpZnlpbmdDYWxsYmFjaygpKTsKK30KKwogQ29kZUJsb2NrKiBQbGFuOjprZXko
KQogewogICAgIHJldHVybiBjb2RlQmxvY2stPmFsdGVybmF0aXZlKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1BsYW4uaAkocmV2aXNpb24gMTU0NjMyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDIzICs0OCwyMSBA
QCBuYW1lc3BhY2UgREZHIHsKIAogY2xhc3MgTG9uZ0xpdmVkU3RhdGU7CiAKLWVudW0gQ29tcGls
ZU1vZGUgeyBDb21waWxlRnVuY3Rpb24sIENvbXBpbGVPdGhlciB9OwotCiAjaWYgRU5BQkxFKERG
R19KSVQpCiAKIHN0cnVjdCBQbGFuIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFBsYW4+
IHsKICAgICBQbGFuKAotICAgICAgICBDb21waWxlTW9kZSBjb21waWxlTW9kZSwgUGFzc1JlZlB0
cjxDb2RlQmxvY2s+IGNvZGVCbG9jaywKLSAgICAgICAgdW5zaWduZWQgb3NyRW50cnlCeXRlY29k
ZUluZGV4LCB1bnNpZ25lZCBudW1WYXJzV2l0aFZhbHVlcyk7CisgICAgICAgIFBhc3NSZWZQdHI8
Q29kZUJsb2NrPiBjb2RlQmxvY2ssIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwKKyAg
ICAgICAgdW5zaWduZWQgbnVtVmFyc1dpdGhWYWx1ZXMpOwogICAgIH5QbGFuKCk7CiAgICAgCiAg
ICAgdm9pZCBjb21waWxlSW5UaHJlYWQoTG9uZ0xpdmVkU3RhdGUmKTsKICAgICAKLSAgICBDb21w
aWxhdGlvblJlc3VsdCBmaW5hbGl6ZShSZWZQdHI8SlNDOjpKSVRDb2RlPiYgaml0Q29kZSwgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyKiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOworICAgIENvbXBpbGF0
aW9uUmVzdWx0IGZpbmFsaXplV2l0aG91dE5vdGlmeWluZ0NhbGxiYWNrKCk7CisgICAgdm9pZCBm
aW5hbGl6ZUFuZE5vdGlmeUNhbGxiYWNrKCk7CiAgICAgCiAgICAgQ29kZUJsb2NrKiBrZXkoKTsK
ICAgICAKLSAgICBjb25zdCBDb21waWxlTW9kZSBjb21waWxlTW9kZTsKICAgICBWTSYgdm07CiAg
ICAgUmVmUHRyPENvZGVCbG9jaz4gY29kZUJsb2NrOwogICAgIGNvbnN0IHVuc2lnbmVkIG9zckVu
dHJ5Qnl0ZWNvZGVJbmRleDsKQEAgLTg2LDYgKzg0LDggQEAgc3RydWN0IFBsYW4gOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZQogICAgIAogICAgIGJvb2wgaXNDb21waWxlZDsKIAorICAgIFJl
ZlB0cjxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+IGNhbGxiYWNrOworCiBwcml2YXRlOgog
ICAgIGVudW0gQ29tcGlsYXRpb25QYXRoIHsgRmFpbFBhdGgsIERGR1BhdGgsIEZUTFBhdGggfTsK
ICAgICBDb21waWxhdGlvblBhdGggY29tcGlsZUluVGhyZWFkSW1wbChMb25nTGl2ZWRTdGF0ZSYp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAJKHJldmlz
aW9uIDE1NDYzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNjUsMTAgKzE2NSw3IEBAIFdvcmtsaXN0OjpTdGF0ZSBXb3Jr
bGlzdDo6Y29tcGxldGVBbGxSZWEKICAgICAgICAgCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHBs
YW4tPmlzQ29tcGlsZWQpOwogICAgICAgICAKLSAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgY29t
cGlsYXRpb25SZXN1bHQgPQotICAgICAgICAgICAgcHJvZmlsZWRCbG9jay0+cmVwbGFjZVdpdGhE
ZWZlcnJlZE9wdGltaXplZENvZGUocGxhbik7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbXBp
bGF0aW9uUmVzdWx0ICE9IENvbXBpbGF0aW9uRGVmZXJyZWQpOwotICAgICAgICBwcm9maWxlZEJs
b2NrLT5zZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoY29t
cGlsYXRpb25SZXN1bHQpOworICAgICAgICBwbGFuLT5maW5hbGl6ZUFuZE5vdGlmeUNhbGxiYWNr
KCk7CiAgICAgICAgIAogICAgICAgICBpZiAocHJvZmlsZWRCbG9jayA9PSByZXF1ZXN0ZWRQcm9m
aWxlZEJsb2NrKQogICAgICAgICAgICAgcmVzdWx0aW5nU3RhdGUgPSBDb21waWxlZDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDE1NDYzMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTg0LDYgKzE4NCw4
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBjb25zdCBKSVRTdHViUm91dGluZVNldCYgaml0
U3R1YlJvdXRpbmVzKCkgeyByZXR1cm4gbV9qaXRTdHViUm91dGluZXM7IH0KICAgICAgICAgCiAg
ICAgICAgIHZvaWQgYWRkUmVmZXJlbmNlKEpTQ2VsbCosIEFycmF5QnVmZmVyKik7CisgICAgICAg
IAorICAgICAgICBib29sIGlzRGVmZXJyZWQoKSBjb25zdCB7IHJldHVybiAhIW1fZGVmZXJyYWxE
ZXB0aDsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURHJpdmVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVREcml2ZXIuaAkocmV2aXNpb24gMTU0NjMy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVREcml2ZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMSwxNTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEpJVERyaXZlcl9oCi0jZGVmaW5lIEpJVERyaXZlcl9o
Ci0KLSNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KLQotI2lmIEVOQUJMRShKSVQpCi0KLSNpbmNs
dWRlICJCeXRlY29kZUdlbmVyYXRvci5oIgotI2luY2x1ZGUgIkNvbXBpbGF0aW9uUmVzdWx0Lmgi
Ci0jaW5jbHVkZSAiREZHRHJpdmVyLmgiCi0jaW5jbHVkZSAiSklULmgiCi0jaW5jbHVkZSAiTExJ
bnRFbnRyeXBvaW50cy5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
Q29kZUJsb2NrVHlwZT4KLWlubGluZSBDb21waWxhdGlvblJlc3VsdCBqaXRDb21waWxlSWZBcHBy
b3ByaWF0ZUltcGwoCi0gICAgRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2tUeXBlKiBjb2RlQmxv
Y2ssIFJlZlB0cjxKSVRDb2RlPiYgaml0Q29kZSwKLSAgICBKSVRDb2RlOjpKSVRUeXBlIGppdFR5
cGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkK
LXsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIAotICAgIGlmIChqaXRUeXBlID09IGNv
ZGVCbG9jay0+aml0VHlwZSgpKQotICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25Ob3ROZWVkZWQ7
Ci0gICAgCi0gICAgaWYgKCF2bS5jYW5Vc2VKSVQoKSkKLSAgICAgICAgcmV0dXJuIENvbXBpbGF0
aW9uTm90TmVlZGVkOyAvLyBGSVhNRTogSW52ZXN0aWdhdGUgaWYgdGhpcyBpcyByaWdodC4gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNjI0NgotICAgIAotICAgIGNv
ZGVCbG9jay0+dW5saW5rSW5jb21pbmdDYWxscygpOwotICAgIAotICAgIFJlZlB0cjxKSVRDb2Rl
PiBvbGRKSVRDb2RlID0gaml0Q29kZTsKLSAgICAKLSAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6
aW5nSklUKGppdFR5cGUpKSB7Ci0gICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9Ci0g
ICAgICAgICAgICBERkc6OnRyeUNvbXBpbGUoZXhlYywgY29kZUJsb2NrLCBqaXRDb2RlLCBieXRl
Y29kZUluZGV4KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBDb21waWxhdGlvblN1Y2Nlc3NmdWwp
Ci0gICAgICAgICAgICBjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPnVubGlua0luY29taW5nQ2Fs
bHMoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQob2xkSklUQ29kZSA9PSBq
aXRDb2RlKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9IGVs
c2UgewotICAgICAgICBSZWZQdHI8SklUQ29kZT4gcmVzdWx0ID0gSklUOjpjb21waWxlKCZ2bSwg
Y29kZUJsb2NrLCBlZmZvcnQpOwotICAgICAgICBpZiAocmVzdWx0KQotICAgICAgICAgICAgaml0
Q29kZSA9IHJlc3VsdDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIENvbXBpbGF0
aW9uRmFpbGVkOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gQ29tcGlsYXRpb25TdWNjZXNzZnVs
OwotfQotCi1pbmxpbmUgQ29tcGlsYXRpb25SZXN1bHQgaml0Q29tcGlsZUZ1bmN0aW9uSWZBcHBy
b3ByaWF0ZUltcGwoCi0gICAgRXhlY1N0YXRlKiBleGVjLCBGdW5jdGlvbkNvZGVCbG9jayogY29k
ZUJsb2NrLCBSZWZQdHI8SklUQ29kZT4mIGppdENvZGUsCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyJiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ssIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSwKLSAg
ICB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCi17
Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICAKLSAgICBpZiAoaml0VHlwZSA9PSBjb2Rl
QmxvY2stPmppdFR5cGUoKSkKLSAgICAgICAgcmV0dXJuIENvbXBpbGF0aW9uTm90TmVlZGVkOwot
ICAgIAotICAgIGlmICghdm0uY2FuVXNlSklUKCkpCi0gICAgICAgIHJldHVybiBDb21waWxhdGlv
bk5vdE5lZWRlZDsgLy8gRklYTUU6IEludmVzdGlnYXRlIGlmIHRoaXMgaXMgcmlnaHQuIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTYyNDYKLSAgICAKLSAgICBjb2Rl
QmxvY2stPnVubGlua0luY29taW5nQ2FsbHMoKTsKLSAgICAKLSAgICBSZWZQdHI8SklUQ29kZT4g
b2xkSklUQ29kZSA9IGppdENvZGU7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIG9sZEpJVENv
ZGVXaXRoQXJpdHlDaGVjayA9IGppdENvZGVXaXRoQXJpdHlDaGVjazsKLSAgICAKLSAgICBpZiAo
SklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUpKSB7Ci0gICAgICAgIENvbXBpbGF0aW9u
UmVzdWx0IHJlc3VsdCA9IERGRzo6dHJ5Q29tcGlsZUZ1bmN0aW9uKAotICAgICAgICAgICAgZXhl
YywgY29kZUJsb2NrLCBqaXRDb2RlLCBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ssIGJ5dGVjb2RlSW5k
ZXgpOwotICAgICAgICBpZiAocmVzdWx0ID09IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bCkKLSAgICAg
ICAgICAgIGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+dW5saW5rSW5jb21pbmdDYWxscygpOwot
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChvbGRKSVRDb2RlID09IGppdENvZGUp
OwotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChvbGRKSVRDb2RlV2l0aEFyaXR5Q2hlY2ssIG9s
ZEpJVENvZGVXaXRoQXJpdHlDaGVjayA9PSBqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOwotICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIFJl
ZlB0cjxKSVRDb2RlPiByZXN1bHQgPQotICAgICAgICAgICAgSklUOjpjb21waWxlKCZ2bSwgY29k
ZUJsb2NrLCBlZmZvcnQsICZqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOwotICAgICAgICBpZiAocmVz
dWx0KQotICAgICAgICAgICAgaml0Q29kZSA9IHJlc3VsdDsKLSAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICBBU1NFUlRfVU5VU0VEKG9sZEpJVENvZGVXaXRoQXJpdHlDaGVjaywgb2xkSklUQ29k
ZVdpdGhBcml0eUNoZWNrID09IGppdENvZGVXaXRoQXJpdHlDaGVjayk7Ci0gICAgICAgICAgICBy
ZXR1cm4gQ29tcGlsYXRpb25GYWlsZWQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4g
Q29tcGlsYXRpb25TdWNjZXNzZnVsOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tU
eXBlPgotaW5saW5lIENvbXBpbGF0aW9uUmVzdWx0IGppdENvbXBpbGVJZkFwcHJvcHJpYXRlKAot
ICAgIEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBSZWZQdHI8SklU
Q29kZT4mIGppdENvZGUsCi0gICAgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlLCB1bnNpZ25lZCBi
eXRlY29kZUluZGV4LCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCi17Ci0gICAgQ29tcGls
YXRpb25SZXN1bHQgcmVzdWx0ID0gaml0Q29tcGlsZUlmQXBwcm9wcmlhdGVJbXBsKAotICAgICAg
ICBleGVjLCBjb2RlQmxvY2ssIGppdENvZGUsIGppdFR5cGUsIGJ5dGVjb2RlSW5kZXgsIGVmZm9y
dCk7Ci0gICAgaWYgKHJlc3VsdCA9PSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpIHsKLSAgICAgICAg
Y29kZUJsb2NrLT5zZXRKSVRDb2RlKGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpKTsK
LSAgICAgICAgY29kZUJsb2NrLT52bSgpLT5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29zdChqaXRD
b2RlLT5zaXplKCkpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfSAgICAKLQotaW5saW5l
IENvbXBpbGF0aW9uUmVzdWx0IGppdENvbXBpbGVGdW5jdGlvbklmQXBwcm9wcmlhdGUoCi0gICAg
RXhlY1N0YXRlKiBleGVjLCBGdW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2NrLCBSZWZQdHI8SklU
Q29kZT4mIGppdENvZGUsCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBqaXRDb2RlV2l0aEFy
aXR5Q2hlY2ssIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSwKLSAgICB1bnNpZ25lZCBieXRlY29k
ZUluZGV4LCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCi17Ci0gICAgQ29tcGlsYXRpb25S
ZXN1bHQgcmVzdWx0ID0gaml0Q29tcGlsZUZ1bmN0aW9uSWZBcHByb3ByaWF0ZUltcGwoCi0gICAg
ICAgIGV4ZWMsIGNvZGVCbG9jaywgaml0Q29kZSwgaml0Q29kZVdpdGhBcml0eUNoZWNrLCBqaXRU
eXBlLCBieXRlY29kZUluZGV4LCBlZmZvcnQpOwotICAgIGlmIChyZXN1bHQgPT0gQ29tcGlsYXRp
b25TdWNjZXNzZnVsKSB7Ci0gICAgICAgIGNvZGVCbG9jay0+c2V0SklUQ29kZShqaXRDb2RlLCBq
aXRDb2RlV2l0aEFyaXR5Q2hlY2spOwotICAgICAgICBjb2RlQmxvY2stPnZtKCktPmhlYXAucmVw
b3J0RXh0cmFNZW1vcnlDb3N0KGppdENvZGUtPnNpemUoKSk7Ci0gICAgfQotICAgIHJldHVybiBy
ZXN1bHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gRU5BQkxFKEpJVCkK
LQotI2VuZGlmIC8vIEpJVERyaXZlcl9oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUU3R1YnMuY3BwCShyZXZpc2lvbiAxNTQ2MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFN0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxOSw3ICsxMDE5LDcgQEAgREVG
SU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemUpCiAgICAgICAgIGlmIChPcHRpb25zOjp2
ZXJib3NlT1NSKCkpCiAgICAgICAgICAgICBkYXRhTG9nKCJDb25zaWRlcmluZyBPU1IgIiwgKmNv
ZGVCbG9jaywgIiAtPiAiLCAqY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLCAiLlxuIik7CiAgICAg
ICAgIC8vIElmIHdlIGhhdmUgYW4gb3B0aW1pemVkIHJlcGxhY2VtZW50LCB0aGVuIGl0IG11c3Qg
YmUgdGhlIGNhc2UgdGhhdCB3ZSBlbnRlcmVkCi0gICAgICAgIC8vIGN0aV9vcHRpbWl6ZSBmcm9t
IGEgbG9vcC4gVGhhdCdzIGJlY2F1c2UgaXMgdGhlcmUncyBhbiBvcHRpbWl6ZWQgcmVwbGFjZW1l
bnQsCisgICAgICAgIC8vIGN0aV9vcHRpbWl6ZSBmcm9tIGEgbG9vcC4gVGhhdCdzIGJlY2F1c2Ug
aWYgdGhlcmUncyBhbiBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQsCiAgICAgICAgIC8vIHRoZW4gYWxs
IGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSByZWxpbmtlZCB0byB0aGUgcmVwbGFjZW1l
bnQgYW5kIHNvCiAgICAgICAgIC8vIHRoZSBwcm9sb2d1ZSBPU1Igd2lsbCBuZXZlciBmaXJlLgog
ICAgICAgICAKQEAgLTEwNTQsMTMgKzEwNTQsMTIgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9p
ZCwgb3B0aW1pemUpCiAgICAgICAgICAgICBkYXRhTG9nKCJUcmlnZ2VyaW5nIG9wdGltaXplZCBj
b21waWxhdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiXG4iKTsKICAgICAgICAgCiAgICAgICAgIEpT
U2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT5zY29wZSgpOwotICAgICAgICBDb21waWxhdGlvblJl
c3VsdCByZXN1bHQ7Ci0gICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IGNvZGVCbG9jay0+Y29tcGls
ZU9wdGltaXplZChjYWxsRnJhbWUsIHNjb3BlLCByZXN1bHQsIGJ5dGVjb2RlSW5kZXgpOwotICAg
ICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CisgICAgICAgIFJlZlB0cjxEZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2s+IGNhbGxiYWNrID0gYWRvcHRSZWYoCisgICAgICAgICAgICBu
ZXcgSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2soKSk7CisgICAgICAgIENvbXBp
bGF0aW9uUmVzdWx0IHJlc3VsdCA9IGNvZGVCbG9jay0+Y29tcGlsZU9wdGltaXplZCgKKyAgICAg
ICAgICAgIGNhbGxGcmFtZSwgSklUQ29kZTo6REZHSklULCBKSVRDb21waWxhdGlvbkNhbkZhaWws
IGJ5dGVjb2RlSW5kZXgsIGNhbGxiYWNrKTsKKyAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VP
U1IoKSkKICAgICAgICAgICAgIGRhdGFMb2coIk9wdGltaXppbmcgY29tcGlsYXRpb24gb2YgIiwg
KmNvZGVCbG9jaywgIiByZXN1bHQ6ICIsIHJlc3VsdCwgIlxuIik7Ci0gICAgICAgICAgICBpZiAo
ZXJyb3IpCi0gICAgICAgICAgICAgICAgZGF0YUxvZygiV0FSTklORzogb3B0aW1pemVkIGNvbXBp
bGF0aW9uIGZhaWxlZCB3aXRoIGEgSlMgZXJyb3IuXG4iKTsKLSAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgY29kZUJsb2NrLT5zZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGls
YXRpb25SZXN1bHQocmVzdWx0KTsKICAgICAgICAgaWYgKHJlc3VsdCAhPSBDb21waWxhdGlvblN1
Y2Nlc3NmdWwpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRvREZHRGVmZXJy
ZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVG9ERkdEZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgiCisK
KyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJFeGVjdXRhYmxlLmgiCisKK25hbWVz
cGFjZSBKU0MgeworCitKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6SklUVG9E
RkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2soKSB7IH0KK0pJVFRvREZHRGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrOjp+SklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2soKSB7
IH0KKwordm9pZCBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y29tcGlsYXRp
b25EaWRDb21wbGV0ZSgKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsYXRpb25SZXN1
bHQgcmVzdWx0KQoreworICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5
cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CisgICAgCisgICAgaWYgKHJlc3VsdCA9PSBD
b21waWxhdGlvblN1Y2Nlc3NmdWwpCisgICAgICAgIGNvZGVCbG9jay0+aW5zdGFsbCgpOworICAg
IAorICAgIGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+c2V0T3B0aW1pemF0aW9uVGhyZXNob2xk
QmFzZU9uQ29tcGlsYXRpb25SZXN1bHQocmVzdWx0KTsKK30KKworfSAvLyBKU0MKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxs
YmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVG9ERkdE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2Fs
bGJhY2tfaAorI2RlZmluZSBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFja19oCisK
KyNpbmNsdWRlICJEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK2NsYXNzIFNjcmlwdEV4ZWN1dGFibGU7CisKK2NsYXNzIEpJVFRvREZHRGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrIDogcHVibGljIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjayB7
CitwdWJsaWM6CisgICAgSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2soKTsKKyAg
ICB2aXJ0dWFsIH5KSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaygpOworCisgICAg
dmlydHVhbCB2b2lkIGNvbXBpbGF0aW9uRGlkQ29tcGxldGUoQ29kZUJsb2NrKiwgQ29tcGlsYXRp
b25SZXN1bHQpOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKSVRUb0RG
R0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFja19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludEVudHJ5cG9pbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFbnRyeXBvaW50cy5jcHAJKHJldmlzaW9uIDE1NDYzMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludEVudHJ5cG9pbnRzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzcsNTMgKzM3LDY3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
TExJbnQgewogCi12b2lkIGdldEZ1bmN0aW9uRW50cnlwb2ludChWTSYgdm0sIENvZGVTcGVjaWFs
aXphdGlvbktpbmQga2luZCwgUmVmUHRyPEpJVENvZGU+JiBqaXRDb2RlLCBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHImIGFyaXR5Q2hlY2spCit2b2lkIGdldEZ1bmN0aW9uRW50cnlwb2ludChWTSYgdm0s
IEZ1bmN0aW9uQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CisgICAgQ29kZVNwZWNpYWxpemF0aW9u
S2luZCBraW5kID0gY29kZUJsb2NrLT5zcGVjaWFsaXphdGlvbktpbmQoKTsKKyAgICAKICAgICBp
ZiAoIXZtLmNhblVzZUpJVCgpKSB7CiAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKSB7
Ci0gICAgICAgICAgICBqaXRDb2RlID0gYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUoTWFjcm9B
c3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxpbnRfZnVuY3Rpb25fZm9yX2Nh
bGxfcHJvbG9ndWUpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSk7Ci0gICAgICAgICAgICBh
cml0eUNoZWNrID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVMTEludENvZGVQdHIobGxp
bnRfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hlY2spOworICAgICAgICAgICAgY29kZUJsb2Nr
LT5zZXRKSVRDb2RlKAorICAgICAgICAgICAgICAgIGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2Rl
KE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlTExJbnRDb2RlUmVmKGxsaW50X2Z1bmN0aW9u
X2Zvcl9jYWxsX3Byb2xvZ3VlKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpLAorICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlTExJbnRDb2RlUHRyKGxsaW50
X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNrKSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KIAogICAgICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKLSAg
ICAgICAgaml0Q29kZSA9IGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjo6Y3JlYXRlTExJbnRDb2RlUmVmKGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3Rf
cHJvbG9ndWUpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSk7Ci0gICAgICAgIGFyaXR5Q2hl
Y2sgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUxMSW50Q29kZVB0cihsbGludF9mdW5j
dGlvbl9mb3JfY29uc3RydWN0X2FyaXR5X2NoZWNrKTsKKyAgICAgICAgY29kZUJsb2NrLT5zZXRK
SVRDb2RlKAorICAgICAgICAgICAgYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUoTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0
cnVjdF9wcm9sb2d1ZSksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSwKKyAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlTExJbnRDb2RlUHRyKGxsaW50X2Z1bmN0aW9u
X2Zvcl9jb25zdHJ1Y3RfYXJpdHlfY2hlY2spKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICAKICNpZiBFTkFCTEUoSklUKQogICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKSB7Ci0gICAg
ICAgIGppdENvZGUgPSBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZSh2bS5nZXRDVElTdHViKGZ1
bmN0aW9uRm9yQ2FsbEVudHJ5VGh1bmtHZW5lcmF0b3IpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRo
dW5rKSk7Ci0gICAgICAgIGFyaXR5Q2hlY2sgPSB2bS5nZXRDVElTdHViKGZ1bmN0aW9uRm9yQ2Fs
bEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcikuY29kZSgpOworICAgICAgICBjb2RlQmxvY2stPnNl
dEpJVENvZGUoCisgICAgICAgICAgICBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZSh2bS5nZXRD
VElTdHViKGZ1bmN0aW9uRm9yQ2FsbEVudHJ5VGh1bmtHZW5lcmF0b3IpLCBKSVRDb2RlOjpJbnRl
cnByZXRlclRodW5rKSksCisgICAgICAgICAgICB2bS5nZXRDVElTdHViKGZ1bmN0aW9uRm9yQ2Fs
bEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcikuY29kZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAogICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOwotICAgIGppdENvZGUg
PSBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZSh2bS5nZXRDVElTdHViKGZ1bmN0aW9uRm9yQ29u
c3RydWN0RW50cnlUaHVua0dlbmVyYXRvciksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKTsK
LSAgICBhcml0eUNoZWNrID0gdm0uZ2V0Q1RJU3R1YihmdW5jdGlvbkZvckNvbnN0cnVjdEFyaXR5
Q2hlY2tUaHVua0dlbmVyYXRvcikuY29kZSgpOworICAgIGNvZGVCbG9jay0+c2V0SklUQ29kZSgK
KyAgICAgICAgYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUodm0uZ2V0Q1RJU3R1YihmdW5jdGlv
bkZvckNvbnN0cnVjdEVudHJ5VGh1bmtHZW5lcmF0b3IpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRo
dW5rKSksCisgICAgICAgIHZtLmdldENUSVN0dWIoZnVuY3Rpb25Gb3JDb25zdHJ1Y3RBcml0eUNo
ZWNrVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIH0KIAot
dm9pZCBnZXRFdmFsRW50cnlwb2ludChWTSYgdm0sIFJlZlB0cjxKSVRDb2RlPiYgaml0Q29kZSkK
K3ZvaWQgZ2V0RXZhbEVudHJ5cG9pbnQoVk0mIHZtLCBFdmFsQ29kZUJsb2NrKiBjb2RlQmxvY2sp
CiB7CiAgICAgaWYgKCF2bS5jYW5Vc2VKSVQoKSkgewotICAgICAgICBqaXRDb2RlID0gYWRvcHRS
ZWYobmV3IERpcmVjdEpJVENvZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENv
ZGVSZWYobGxpbnRfZXZhbF9wcm9sb2d1ZSksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKTsK
KyAgICAgICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKAorICAgICAgICAgICAgYWRvcHRSZWYobmV3
IERpcmVjdEpJVENvZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYo
bGxpbnRfZXZhbF9wcm9sb2d1ZSksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSwKKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSNpZiBFTkFCTEUoSklUKSAgICAKLSAgICBqaXRDb2RlID0gYWRvcHRSZWYobmV3IERpcmVjdEpJ
VENvZGUodm0uZ2V0Q1RJU3R1YihldmFsRW50cnlUaHVua0dlbmVyYXRvciksIEpJVENvZGU6Oklu
dGVycHJldGVyVGh1bmspKTsKKyNpZiBFTkFCTEUoSklUKQorICAgIGNvZGVCbG9jay0+c2V0SklU
Q29kZSgKKyAgICAgICAgYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUodm0uZ2V0Q1RJU3R1Yihl
dmFsRW50cnlUaHVua0dlbmVyYXRvciksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSwKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCkpOwogI2VuZGlmCiB9CiAKIHZvaWQgZ2V0UHJv
Z3JhbUVudHJ5cG9pbnQoVk0mIHZtLCBSZWZQdHI8SklUQ29kZT4mIGppdENvZGUpCiB7CiAgICAg
aWYgKCF2bS5jYW5Vc2VKSVQoKSkgewotICAgICAgICBqaXRDb2RlID0gYWRvcHRSZWYobmV3IERp
cmVjdEpJVENvZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxp
bnRfcHJvZ3JhbV9wcm9sb2d1ZSksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKTsKKyAgICAg
ICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKAorICAgICAgICAgICAgYWRvcHRSZWYobmV3IERpcmVj
dEpJVENvZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxpbnRf
cHJvZ3JhbV9wcm9sb2d1ZSksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSwKKyAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNp
ZiBFTkFCTEUoSklUKQotICAgIGppdENvZGUgPSBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZSh2
bS5nZXRDVElTdHViKHByb2dyYW1FbnRyeVRodW5rR2VuZXJhdG9yKSwgSklUQ29kZTo6SW50ZXJw
cmV0ZXJUaHVuaykpOworICAgIGNvZGVCbG9jay0+c2V0SklUQ29kZSgKKyAgICAgICAgYWRvcHRS
ZWYobmV3IERpcmVjdEpJVENvZGUodm0uZ2V0Q1RJU3R1Yihwcm9ncmFtRW50cnlUaHVua0dlbmVy
YXRvciksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSwKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyKCkpOwogI2VuZGlmCiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9MTEludEVudHJ5cG9pbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xMSW50RW50cnlwb2ludHMuaAkocmV2aXNpb24gMTU0NjMyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RW50cnlwb2ludHMuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NDQsMTggKzQ0LDE4IEBAIGNsYXNzIFByb2dyYW1Db2RlQmxvY2s7CiAKIG5hbWVzcGFjZSBMTElu
dCB7CiAKLXZvaWQgZ2V0RnVuY3Rpb25FbnRyeXBvaW50KFZNJiwgQ29kZVNwZWNpYWxpemF0aW9u
S2luZCwgUmVmUHRyPEpJVENvZGU+JiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBhcml0eUNoZWNr
KTsKLXZvaWQgZ2V0RXZhbEVudHJ5cG9pbnQoVk0mLCBSZWZQdHI8SklUQ29kZT4mKTsKLXZvaWQg
Z2V0UHJvZ3JhbUVudHJ5cG9pbnQoVk0mLCBSZWZQdHI8SklUQ29kZT4mKTsKK3ZvaWQgZ2V0RnVu
Y3Rpb25FbnRyeXBvaW50KFZNJiwgRnVuY3Rpb25Db2RlQmxvY2sqKTsKK3ZvaWQgZ2V0RXZhbEVu
dHJ5cG9pbnQoVk0mLCBFdmFsQ29kZUJsb2NrKik7Cit2b2lkIGdldFByb2dyYW1FbnRyeXBvaW50
KFZNJiwgUHJvZ3JhbUNvZGVCbG9jayopOwogCi1pbmxpbmUgdm9pZCBnZXRFbnRyeXBvaW50KFZN
JiB2bSwgRXZhbENvZGVCbG9jayosIFJlZlB0cjxKSVRDb2RlPiYgaml0Q29kZSkKK2lubGluZSB2
b2lkIGdldEVudHJ5cG9pbnQoVk0mIHZtLCBFdmFsQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7Ci0g
ICAgZ2V0RXZhbEVudHJ5cG9pbnQodm0sIGppdENvZGUpOworICAgIGdldEV2YWxFbnRyeXBvaW50
KHZtLCBjb2RlQmxvY2spOwogfQogCi1pbmxpbmUgdm9pZCBnZXRFbnRyeXBvaW50KFZNJiB2bSwg
UHJvZ3JhbUNvZGVCbG9jayosIFJlZlB0cjxKSVRDb2RlPiYgaml0Q29kZSkKK2lubGluZSB2b2lk
IGdldEVudHJ5cG9pbnQoVk0mIHZtLCBQcm9ncmFtQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7Ci0g
ICAgZ2V0UHJvZ3JhbUVudHJ5cG9pbnQodm0sIGppdENvZGUpOworICAgIGdldFByb2dyYW1FbnRy
eXBvaW50KHZtLCBjb2RlQmxvY2spOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6TExJbnQK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNw
cAkocmV2aXNpb24gMTU0NjMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg4LDIzICsyODgsMzMgQEAgaW5saW5l
IGJvb2wgaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MoQwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogICAgIAotICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IGNvZGVCbG9jay0+
aml0Q29tcGlsZShleGVjKTsKLSAgICBzd2l0Y2ggKHJlc3VsdCkgewotICAgIGNhc2UgQ29tcGls
YXRpb25Ob3ROZWVkZWQ6CisgICAgc3dpdGNoIChjb2RlQmxvY2stPmppdFR5cGUoKSkgeworICAg
IGNhc2UgSklUQ29kZTo6QmFzZWxpbmVKSVQ6IHsKICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJv
c2VPU1IoKSkKICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgQ29kZSB3YXMgYWxyZWFkeSBjb21w
aWxlZC5cbiIpOwogICAgICAgICBjb2RlQmxvY2stPmppdFNvb24oKTsKICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgY2FzZSBDb21waWxhdGlvbkZhaWxlZDoKLSAgICAgICAgaWYgKE9wdGlvbnM6
OnZlcmJvc2VPU1IoKSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgSklUIGNvbXBpbGF0aW9u
IGZhaWxlZC5cbiIpOwotICAgICAgICBjb2RlQmxvY2stPmRvbnRKSVRBbnl0aW1lU29vbigpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY2FzZSBDb21waWxhdGlvblN1Y2Nlc3NmdWw6Ci0g
ICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCi0gICAgICAgICAgICBkYXRhTG9nRigi
ICAgIEpJVCBjb21waWxhdGlvbiBzdWNjZXNzZnVsLlxuIik7Ci0gICAgICAgIGNvZGVCbG9jay0+
aml0U29vbigpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgY2FzZSBKSVRDb2Rl
OjpJbnRlcnByZXRlclRodW5rOiB7CisgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9
IGNvZGVCbG9jay0+cHJlcGFyZUZvckV4ZWN1dGlvbigKKyAgICAgICAgICAgIGV4ZWMsIEpJVENv
ZGU6OkJhc2VsaW5lSklULCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgICAgICBzd2l0Y2gg
KHJlc3VsdCkgeworICAgICAgICBjYXNlIENvbXBpbGF0aW9uRmFpbGVkOgorICAgICAgICAgICAg
aWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAg
IEpJVCBjb21waWxhdGlvbiBmYWlsZWQuXG4iKTsKKyAgICAgICAgICAgIGNvZGVCbG9jay0+ZG9u
dEpJVEFueXRpbWVTb29uKCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNh
c2UgQ29tcGlsYXRpb25TdWNjZXNzZnVsOgorICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJv
c2VPU1IoKSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAgIEpJVCBjb21waWxhdGlvbiBz
dWNjZXNzZnVsLlxuIik7CisgICAgICAgICAgICBjb2RlQmxvY2stPmluc3RhbGwoKTsKKyAgICAg
ICAgICAgIGNvZGVCbG9jay0+aml0U29vbigpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQogICAgIGRlZmF1
bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBpbGF0aW9u
UmVzdWx0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29t
cGlsYXRpb25SZXN1bHQuaAkocmV2aXNpb24gMTU0NjMyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29tcGlsYXRpb25SZXN1bHQuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyAr
MzAsMjkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWVudW0gQ29tcGlsYXRpb25SZXN1bHQgeyBD
b21waWxhdGlvbkZhaWxlZCwgQ29tcGlsYXRpb25JbnZhbGlkYXRlZCwgQ29tcGlsYXRpb25TdWNj
ZXNzZnVsLCBDb21waWxhdGlvbk5vdE5lZWRlZCwgQ29tcGlsYXRpb25EZWZlcnJlZCB9OworZW51
bSBDb21waWxhdGlvblJlc3VsdCB7CisgICAgLy8gV2UgdHJpZWQgdG8gY29tcGlsZSB0aGUgY29k
ZSwgYnV0IHdlIGNvdWxkbid0IGNvbXBpbGUgaXQuIFRoaXMgY291bGQgYmUKKyAgICAvLyBiZWNh
dXNlIHdlIHJhbiBvdXQgb2YgbWVtb3J5LCBvciBiZWNhdXNlIHRoZSBjb21waWxlciBlbmNvdW50
ZXJlZCBhbgorICAgIC8vIGludGVybmFsIGVycm9yIGFuZCBkZWNpZGVkIHRvIGJhaWwgb3V0IGdy
YWNlZnVsbHkuIEVpdGhlciB3YXksIHRoaXMgaW1wbGllcworICAgIC8vIHRoYXQgd2Ugc2hvdWxk
bid0IHRyeSB0byBjb21waWxlIHRoaXMgY29kZSBibG9jayBhZ2Fpbi4KKyAgICBDb21waWxhdGlv
bkZhaWxlZCwKKyAgICAKKyAgICAvLyBUaGUgcHJvZmlsaW5nIGFzc3VtcHRpb25zIHRoYXQgd2Vy
ZSBmZWQgaW50byB0aGUgY29tcGlsZXIgd2VyZSBpbnZhbGlkYXRlZAorICAgIC8vIGV2ZW4gYmVm
b3JlIHdlIGZpbmlzaGVkIGNvbXBpbGluZy4gVGhpcyBtZWFucyB3ZSBzaG91bGQgdHJ5IGFnYWlu
OiBpbiBzdWNoCisgICAgLy8gY2FzZXMgdGhlIHByb2ZpbGluZyB3aWxsIG5vdyBiZSB1cGRhdGVk
IGFuZCB0aGUgbmV4dCBjb21waWxhdGlvbiB3b24ndAorICAgIC8vIGVuY291bnRlciB0aGUgc2Ft
ZSBwcm9ibGVtLiBCdXQgaXQgZG9lcyBtZWFuIHRoYXQgd2Ugc2hvdWxkIGV4ZXJjaXNlCisgICAg
Ly8gZXhwb25lbnRpYWwgYmFjay1vZmYsIHRvIGdldCBldmVuIG1vcmUgcHJvZmlsaW5nIHNvIHRo
YXQgbmV3IHByb2ZpbGluZworICAgIC8vIHBhdGhvbG9naWVzIGFyZW4ndCBlbmNvdW50ZXJlZC4K
KyAgICBDb21waWxhdGlvbkludmFsaWRhdGVkLAorICAgIAorICAgIC8vIFRoZSBjb21waWxhdGlv
biBzdWNjZWVkZWQgYW5kIHRoZSBjb2RlIGJsb2NrIG5vdyBoYXMgSklUQ29kZSBmb3IgdGhlIG5l
d2x5CisgICAgLy8gY29tcGlsZWQgY29kZS4KKyAgICBDb21waWxhdGlvblN1Y2Nlc3NmdWwsCisg
ICAgCisgICAgLy8gV2UgZGVjaWRlZCB0byBkbyB0aGUgY29tcGlsYXRpb24gYXN5bmNocm9ub3Vz
bHkuIFRoaXMgbWVhbnMgdGhhdCB3ZSBoYXZlbid0CisgICAgLy8geWV0IGNvbXBpbGVkIHRoZSBj
b2RlLgorICAgIENvbXBpbGF0aW9uRGVmZXJyZWQKK307CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAko
cmV2aXNpb24gMTU0NjMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0
YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCw2ICsxMTQsMTgyIEBAIHZvaWQgU2NyaXB0
RXhlY3V0YWJsZTo6ZGVzdHJveShKU0NlbGwqIGMKIH0KICNlbmRpZgogCit2b2lkIFNjcmlwdEV4
ZWN1dGFibGU6Omluc3RhbGxDb2RlKENvZGVCbG9jayogZ2VuZXJpY0NvZGVCbG9jaykKK3sKKyAg
ICBWTSYgdm0gPSAqZ2VuZXJpY0NvZGVCbG9jay0+dm0oKTsKKyAgICAKKyAgICBpZiAodm0ubV9w
ZXJCeXRlY29kZVByb2ZpbGVyKQorICAgICAgICB2bS5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmVu
c3VyZUJ5dGVjb2Rlc0ZvcihnZW5lcmljQ29kZUJsb2NrKTsKKyAgICAKKyAgICBBU1NFUlQodm0u
aGVhcC5pc0RlZmVycmVkKCkpOworICAgIAorICAgIGlmIChqaXRDb2RlKQorICAgICAgICB2bS5o
ZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29zdChzaXplb2YoQ29kZUJsb2NrKSArIGppdENvZGUtPnNp
emUoKSk7CisgICAgZWxzZQorICAgICAgICB2bS5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29zdChz
aXplb2YoQ29kZUJsb2NrKSk7CisgICAgCisgICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5k
ID0gZ2VuZXJpY0NvZGVCbG9jay0+c3BlY2lhbGl6YXRpb25LaW5kKCk7CisgICAgCisgICAgUmVm
UHRyPENvZGVCbG9jaz4gb2xkQ29kZUJsb2NrOworICAgIAorICAgIHN3aXRjaCAoa2luZCkgewor
ICAgIGNhc2UgQ29kZUZvckNhbGw6CisgICAgICAgIG1faml0Q29kZUZvckNhbGwgPSBjb2RlQmxv
Y2stPmppdENvZGUoKTsKKyAgICAgICAgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrID0g
Y29kZUJsb2NrLT5qaXRDb2RlV2l0aEFyaXR5Q2hlY2soKTsKKyAgICAgICAgbV9udW1QYXJhbWV0
ZXJzRm9yQ2FsbCA9IGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIENvZGVGb3JDb25zdHJ1Y3Q6CisgICAgICAgIG1faml0Q29kZUZvckNvbnN0cnVj
dCA9IGNvZGVCbG9jay0+aml0Q29kZSgpOworICAgICAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3RX
aXRoQXJpdHlDaGVjayA9IGNvZGVCbG9jay0+aml0Q29kZVdpdGhBcml0eUNoZWNrKCk7CisgICAg
ICAgIG1fbnVtUGFyYW1ldGVyc0ZvckNvbnN0cnVjdCA9IGNvZGVCbG9jay0+bnVtUGFyYW1ldGVy
cygpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgc3dpdGNoIChnZW5lcmljQ29k
ZUJsb2NrLT5jb2RlVHlwZSgpKSB7CisgICAgY2FzZSBHbG9iYWxDb2RlOiB7CisgICAgICAgIFBy
b2dyYW1FeGVjdXRhYmxlKiBleGVjdXRhYmUgPSBqc0Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPih0
aGlzKTsKKyAgICAgICAgUHJvZ3JhbUNvZGVCbG9jayogY29kZUJsb2NrID0gc3RhdGljX2Nhc3Q8
UHJvZ3JhbUNvZGVCbG9jayo+KGdlbmVyaWNDb2RlQmxvY2spOworICAgICAgICAKKyAgICAgICAg
QVNTRVJUKCFjb2RlQmxvY2stPmppdENvZGVXaXRoQXJpdHlDaGVjaygpKTsKKyAgICAgICAgQVNT
RVJUKCFjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSk7CisgICAgICAgIEFTU0VSVChraW5kID09
IENvZGVGb3JDYWxsKTsKKyAgICAgICAgCisgICAgICAgIG9sZENvZGVCbG9jayA9IGV4ZWN1dGFi
bGUtPm1fcHJvZ3JhbUNvZGVCbG9jazsKKyAgICAgICAgZXhlY3V0YWJsZS0+bV9wcm9ncmFtQ29k
ZUJsb2NrID0gY29kZUJsb2NrOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAg
IGNhc2UgRXZhbENvZGU6IHsKKyAgICAgICAgRXZhbEV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBq
c0Nhc3Q8RXZhbEV4ZWN1dGFibGUqPih0aGlzKTsKKyAgICAgICAgRXZhbENvZGVCbG9jayogY29k
ZUJsb2NrID0gc3RhdGljX2Nhc3Q8RXZhbENvZGVCbG9jayo+KGdlbmVyaWNDb2RlQmxvY2spOwor
ICAgICAgICAKKyAgICAgICAgQVNTRVJUKCFqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOworICAgICAg
ICBBU1NFUlQoIWNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKTsKKyAgICAgICAgQVNTRVJUKGtp
bmQgPT0gQ29kZUZvckNhbGwpOworICAgICAgICAKKyAgICAgICAgb2xkQ29kZUJsb2NrID0gZXhl
Y3V0YWJsZS0+bV9ldmFsQ29kZUJsb2NrOworICAgICAgICBleGVjdXRhYmxlLT5tX2V2YWxDb2Rl
QmxvY2sgPSBjb2RlQmxvY2s7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAg
Y2FzZSBGdW5jdGlvbkNvZGU6IHsKKyAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRh
YmxlID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KHRoaXMpOworICAgICAgICBGdW5jdGlv
bkNvZGVCbG9jayogY29kZUJsb2NrID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25Db2RlQmxvY2sqPihn
ZW5lcmljQ29kZUJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAoa2luZCkgeworICAg
ICAgICBjYXNlIENvZGVGb3JDYWxsOgorICAgICAgICAgICAgb2xkQ29kZUJsb2NrID0gZXhlY3V0
YWJsZS0+bV9jb2RlQmxvY2tGb3JDYWxsOworICAgICAgICAgICAgZXhlY3V0YWJsZS0+bV9jb2Rl
QmxvY2tGb3JDYWxsID0gY29kZUJsb2NrOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgQ29kZUZvckNvbnN0cnVjdDoKKyAgICAgICAgICAgIG9sZENvZGVCbG9jayA9IGV4ZWN1dGFi
bGUtPm1fY29kZUJsb2NrRm9yQ29uc3RydWN0OworICAgICAgICAgICAgZXhlY3V0YWJsZS0+bV9j
b2RlQmxvY2tGb3JDb25zdHJ1Y3QgPSBjb2RlQmxvY2s7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9IH0KKworICAgIGlmIChvbGRDb2RlQmxvY2sp
CisgICAgICAgIG9sZENvZGVCbG9jay0+dW5saW5rSW5jb21pbmdDYWxscygpOworfQorCitQYXNz
UmVmUHRyPENvZGVCbG9jaz4gU2NyaXB0RXhlY3V0YWJsZTo6bmV3Q29kZUJsb2NrRm9yKAorICAg
IENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgSlNTY29wZSogc2NvcGUsIEpTT2JqZWN0KiYg
ZXhjZXB0aW9uKQoreworICAgIGlmIChjbGFzc0luZm8oKSA9PSBFdmFsRXhlY3V0YWJsZTo6aW5m
bygpKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNhbGwpOworICAg
ICAgICBSRUxFQVNFX0FTU0VSVCghZXhlY3V0YWJsZS0+bV9ldmFsQ29kZUJsb2NrKTsKKyAgICAg
ICAgRXZhbEV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RXZhbEV4ZWN1dGFibGUqPih0
aGlzKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBFdmFsQ29kZUJsb2NrKAorICAgICAg
ICAgICAgZXhlY3V0YWJsZSwgZXhlY3V0YWJsZS0+bV91bmxpbmtlZEV2YWxDb2RlQmxvY2suZ2V0
KCksIHNjb3BlLAorICAgICAgICAgICAgZXhlY3V0YWJsZS0+c291cmNlKCkucHJvdmlkZXIoKSkp
OworICAgIH0KKyAgICAKKyAgICBpZiAoY2xhc3NJbmZvKCkgPT0gUHJvZ3JhbUV4ZWN1dGFibGU6
OmluZm8oKSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChraW5kID09IENvZGVGb3JDYWxsKTsK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWV4ZWN1dGFibGUtPm1fcHJvZ3JhbUNvZGVCbG9jayk7
CisgICAgICAgIFByb2dyYW1FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PFByb2dyYW1F
eGVjdXRhYmxlKj4odGhpcyk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUHJvZ3JhbUNv
ZGVCbG9jaygKKyAgICAgICAgICAgIGV4ZWN1dGFibGUsIGV4ZWN1dGFibGUtPm1fdW5saW5rZWRQ
cm9ncmFtQ29kZUJsb2NrLmdldCgpLCBzY29wZSwKKyAgICAgICAgICAgIGV4ZWN1dGFibGUtPnNv
dXJjZSgpLnByb3ZpZGVyKCksIGV4ZWN1dGFibGUtPnNvdXJjZSgpLnN0YXJ0Q29sdW1uKCkpKTsK
KyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlQoY2xhc3NJbmZvKCkgPT0gRnVuY3Rpb25F
eGVjdXRhYmxlOjppbmZvKCkpOworICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9
IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPih0aGlzKTsKKyAgICBSRUxFQVNFX0FTU0VSVCgh
ZXhlY3V0YWJsZS0+Y29kZUJsb2NrRm9yKGtpbmQpKTsKKyAgICBWTSogdm0gPSBzY29wZS0+dm0o
KTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NvcGUtPmdsb2JhbE9iamVj
dCgpOworICAgIFBhcnNlRXJyb3IgZXJyb3I7CisgICAgRGVidWdnZXJNb2RlIGRlYnVnZ2VyTW9k
ZSA9IGdsb2JhbE9iamVjdC0+aGFzRGVidWdnZXIoKSA/IERlYnVnZ2VyT24gOiBEZWJ1Z2dlck9m
ZjsKKyAgICBQcm9maWxlck1vZGUgcHJvZmlsZXJNb2RlID0gZ2xvYmFsT2JqZWN0LT5oYXNQcm9m
aWxlcigpID8gUHJvZmlsZXJPbiA6IFByb2ZpbGVyT2ZmOworICAgIFVubGlua2VkRnVuY3Rpb25D
b2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrID0KKyAgICAgICAgZXhlY3V0YWJsZS0+bV91bmxp
bmtlZEV4ZWN1dGFibGUtPmNvZGVCbG9ja0ZvcigKKyAgICAgICAgICAgICp2bSwgZXhlY3V0YWJs
ZS0+bV9zb3VyY2UsIGtpbmQsIGRlYnVnZ2VyTW9kZSwgcHJvZmlsZXJNb2RlLCBlcnJvcik7Cisg
ICAgaWYgKCF1bmxpbmtlZENvZGVCbG9jaykgeworICAgICAgICBleGNlcHRpb24gPSBlcnJvci50
b0Vycm9yT2JqZWN0KGdsb2JhbE9iamVjdCwgZXhlY3V0YWJsZS0+bV9zb3VyY2UpOworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgU291cmNlUHJvdmlkZXIqIHByb3ZpZGVyID0g
ZXhlY3V0YWJsZS0+c291cmNlKCkucHJvdmlkZXIoKTsKKyAgICB1bnNpZ25lZCBzb3VyY2VPZmZz
ZXQgPSBleGVjdXRhYmxlLT5zb3VyY2UoKS5zdGFydE9mZnNldCgpOworICAgIHVuc2lnbmVkIHN0
YXJ0Q29sdW1uID0gZXhlY3V0YWJsZS0+c291cmNlKCkuc3RhcnRDb2x1bW4oKTsKKworICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgRnVuY3Rpb25Db2RlQmxvY2soCisgICAgICAgIGV4ZWN1dGFibGUs
IHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSwgcHJvdmlkZXIsIHNvdXJjZU9mZnNldCwgc3RhcnRD
b2x1bW4pKTsKK30KKworUGFzc1JlZlB0cjxDb2RlQmxvY2s+IFNjcmlwdEV4ZWN1dGFibGU6Om5l
d1JlcGxhY2VtZW50Q29kZUJsb2NrRm9yKAorICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2lu
ZCkKK3sKKyAgICBpZiAoY2xhc3NJbmZvKCkgPT0gRXZhbEV4ZWN1dGFibGU6OmluZm8oKSkgewor
ICAgICAgICBSRUxFQVNFX0FTU0VSVChraW5kID09IENvZGVGb3JDYWxsKTsKKyAgICAgICAgRXZh
bEV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RXZhbEV4ZWN1dGFibGUqPih0aGlzKTsK
KyAgICAgICAgUmVmUHRyPEV2YWxDb2RlQmxvY2s+IHJlc3VsdCA9IGFkb3B0UmVmKG5ldyBFdmFs
Q29kZUJsb2NrKAorICAgICAgICAgICAgQ29kZUJsb2NrOjpDb3B5UGFyc2VkQmxvY2ssICpleGVj
dXRhYmxlLT5tX2V2YWxDb2RlQmxvY2spKTsKKyAgICAgICAgcmVzdWx0LT5zZXRBbHRlcm5hdGl2
ZShleGVjdXRhYmxlLT5tX2V2YWxDb2RlQmxvY2spOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKyAgICAKKyAgICBpZiAoY2xhc3NJbmZvKCkgPT0gUHJvZ3JhbUV4ZWN1dGFibGU6Omlu
Zm8oKSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChraW5kID09IENvZGVGb3JDYWxsKTsKKyAg
ICAgICAgUHJvZ3JhbUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8UHJvZ3JhbUV4ZWN1
dGFibGUqPih0aGlzKTsKKyAgICAgICAgUmVmUHRyPFByb2dyYW1Db2RlQmxvY2s+IHJlc3VsdCA9
IGFkb3B0UmVmKG5ldyBQcm9ncmFtQ29kZUJsb2NrKAorICAgICAgICAgICAgQ29kZUJsb2NrOjpD
b3B5UGFyc2VkQmxvY2ssICpleGVjdXRhYmxlLT5tX2V2YWxDb2RlQmxvY2spKTsKKyAgICAgICAg
cmVzdWx0LT5zZXRBbHRlcm5hdGl2ZShleGVjdXRhYmxlLT5tX3Byb2dyYW1Db2RlQmxvY2spOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUKGNsYXNz
SW5mbygpID09IEZ1bmN0aW9uRXhlY3V0YWJsZTo6aW5mbygpKTsKKyAgICBGdW5jdGlvbkV4ZWN1
dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4odGhpcyk7Cisg
ICAgUmVmUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiByZXN1bHQgPSBhZG9wdFJlZihuZXcgRnVuY3Rp
b25Db2RlQmxvY2soCisgICAgICAgIENvZGVCbG9jazo6Q29weVBhcnNlZEJsb2NrLCAqZXhlY3V0
YWJsZS0+Y29kZUJsb2NrRm9yKGtpbmQpKSk7CisgICAgcmVzdWx0LT5zZXRBbHRlcm5hdGl2ZShl
eGVjdXRhYmxlLT5jb2RlQmxvY2tGb3Ioa2luZCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K0pTT2JqZWN0KiBTY3JpcHRFeGVjdXRhYmxlOjpwcmVwYXJlRm9yRXhlY3V0aW9uSW1wbCgKKyAg
ICBFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5k
IGtpbmQpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBKU09iamVjdCogZXhjZXB0
aW9uID0gMDsKKyAgICBSZWZQdHI8Q29kZUJsb2NrPiBjb2RlQmxvY2sgPSBuZXdDb2RlQmxvY2tG
b3Ioa2luZCwgc2NvcGUsIGV4Y2VwdGlvbik7CisgICAgaWYgKCFjb2RlQmxvY2spIHsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoZXhjZXB0aW9uKTsKKyAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsK
KyAgICB9CisgICAgCisgICAgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlOworI2lmIEVOQUJMRShM
TElOVCkKKyAgICBqaXRUeXBlID0gSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuazsKKyNlbHNlCisg
ICAgaml0VHlwZSA9IEpJVENvZGU6OkJhc2VsaW5lSklUOworI2VuZGlmCisgICAgY29kZUJsb2Nr
LT5wcmVwYXJlRm9yRXhlY3V0aW9uKGV4ZWMsIGppdFR5cGUpOworCisgICAgaW5zdGFsbENvZGUo
Y29kZUJsb2NrLmdldCgpKTsKKyAgICByZXR1cm4gMDsKK30KKwogY29uc3QgQ2xhc3NJbmZvIEV2
YWxFeGVjdXRhYmxlOjpzX2luZm8gPSB7ICJFdmFsRXhlY3V0YWJsZSIsICZTY3JpcHRFeGVjdXRh
YmxlOjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoRXZhbEV4ZWN1dGFibGUpIH07
CiAKIEV2YWxFeGVjdXRhYmxlKiBFdmFsRXhlY3V0YWJsZTo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBib29sIGlzSW5TdHJpY3RDb250ZXh0KSAKQEAg
LTE3NiwyOCArMzUyLDYgQEAgdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OmRlc3Ryb3koSlNDZWxs
KgogICAgIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNlbGwpLT5GdW5jdGlvbkV4
ZWN1dGFibGU6On5GdW5jdGlvbkV4ZWN1dGFibGUoKTsKIH0KIAotI2lmIEVOQUJMRShERkdfSklU
KQotSlNPYmplY3QqIEV2YWxFeGVjdXRhYmxlOjpjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSog
ZXhlYywgSlNTY29wZSogc2NvcGUsIENvbXBpbGF0aW9uUmVzdWx0JiByZXN1bHQsIHVuc2lnbmVk
IGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAgQVNTRVJUKGV4ZWMtPnZtKCkuZHluYW1pY0dsb2JhbE9i
amVjdCk7Ci0gICAgQVNTRVJUKCEhbV9ldmFsQ29kZUJsb2NrKTsKLSAgICBKU09iamVjdCogZXJy
b3IgPSAwOwotICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKG1fZXZhbENvZGVCbG9j
ay0+aml0VHlwZSgpKSkKLSAgICAgICAgZXJyb3IgPSBjb21waWxlSW50ZXJuYWwoZXhlYywgc2Nv
cGUsIEpJVENvZGU6Om5leHRUaWVySklUKG1fZXZhbENvZGVCbG9jay0+aml0VHlwZSgpKSwgJnJl
c3VsdCwgYnl0ZWNvZGVJbmRleCk7Ci0gICAgZWxzZQotICAgICAgICByZXN1bHQgPSBDb21waWxh
dGlvbk5vdE5lZWRlZDsKLSAgICBBU1NFUlQoISFtX2V2YWxDb2RlQmxvY2spOwotICAgIHJldHVy
biBlcnJvcjsKLX0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLQotI2lmIEVOQUJMRShKSVQp
Ci1Db21waWxhdGlvblJlc3VsdCBFdmFsRXhlY3V0YWJsZTo6aml0Q29tcGlsZShFeGVjU3RhdGUq
IGV4ZWMpCi17Ci0gICAgcmV0dXJuIGppdENvbXBpbGVJZkFwcHJvcHJpYXRlKGV4ZWMsIG1fZXZh
bENvZGVCbG9jay5nZXQoKSwgbV9qaXRDb2RlRm9yQ2FsbCwgSklUQ29kZTo6Ym90dG9tVGllckpJ
VCgpLCBVSU5UX01BWCwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKLX0KLSNlbmRpZgotCiBpbmxp
bmUgY29uc3QgY2hhciogc2FtcGxpbmdEZXNjcmlwdGlvbihKSVRDb2RlOjpKSVRUeXBlIGppdFR5
cGUpCiB7CiAgICAgc3dpdGNoIChqaXRUeXBlKSB7CkBAIC0yMTUsMzkgKzM2OSw2IEBAIGlubGlu
ZSBjb25zdCBjaGFyKiBzYW1wbGluZ0Rlc2NyaXB0aW9uKEoKICAgICB9CiB9CiAKLUpTT2JqZWN0
KiBFdmFsRXhlY3V0YWJsZTo6Y29tcGlsZUludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29w
ZSogc2NvcGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSwgQ29tcGlsYXRpb25SZXN1bHQqIHJl
c3VsdCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKLXsKLSAgICBTYW1wbGluZ1JlZ2lvbiBzYW1w
bGluZ1JlZ2lvbihzYW1wbGluZ0Rlc2NyaXB0aW9uKGppdFR5cGUpKTsKLSAgICAKLSAgICBpZiAo
cmVzdWx0KQotICAgICAgICAqcmVzdWx0ID0gQ29tcGlsYXRpb25GYWlsZWQ7Ci0gICAgCi0gICAg
UmVmUHRyPEV2YWxDb2RlQmxvY2s+IG5ld0NvZGVCbG9jazsKLSAgICAKLSAgICBpZiAoISFtX2V2
YWxDb2RlQmxvY2spIHsKLSAgICAgICAgbmV3Q29kZUJsb2NrID0gYWRvcHRSZWYobmV3IEV2YWxD
b2RlQmxvY2soQ29kZUJsb2NrOjpDb3B5UGFyc2VkQmxvY2ssICptX2V2YWxDb2RlQmxvY2spKTsK
LSAgICAgICAgbmV3Q29kZUJsb2NrLT5zZXRBbHRlcm5hdGl2ZShzdGF0aWNfcG9pbnRlcl9jYXN0
PENvZGVCbG9jaz4obV9ldmFsQ29kZUJsb2NrKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbmV3
Q29kZUJsb2NrID0gYWRvcHRSZWYobmV3IEV2YWxDb2RlQmxvY2sodGhpcywgbV91bmxpbmtlZEV2
YWxDb2RlQmxvY2suZ2V0KCksIHNjb3BlLCBzb3VyY2UoKS5wcm92aWRlcigpKSk7Ci0gICAgICAg
IEFTU0VSVCgoaml0VHlwZSA9PSBKSVRDb2RlOjpib3R0b21UaWVySklUKCkpID09ICFtX2V2YWxD
b2RlQmxvY2spOwotICAgIH0KLQotICAgIENvbXBpbGF0aW9uUmVzdWx0IHRoZVJlc3VsdCA9IHBy
ZXBhcmVGb3JFeGVjdXRpb24oCi0gICAgICAgIGV4ZWMsIG1fZXZhbENvZGVCbG9jaywgbmV3Q29k
ZUJsb2NrLmdldCgpLCBtX2ppdENvZGVGb3JDYWxsLCBqaXRUeXBlLCBieXRlY29kZUluZGV4KTsK
LSAgICBpZiAocmVzdWx0KQotICAgICAgICAqcmVzdWx0ID0gdGhlUmVzdWx0OwotCi0gICAgcmV0
dXJuIDA7Ci19Ci0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLUNvbXBpbGF0aW9uUmVzdWx0IEV2YWxF
eGVjdXRhYmxlOjpyZXBsYWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZShQYXNzUmVmUHRyPERG
Rzo6UGxhbj4gcGxhbikKLXsKLSAgICByZXR1cm4gSlNDOjpyZXBsYWNlV2l0aERlZmVycmVkT3B0
aW1pemVkQ29kZSgKLSAgICAgICAgcGxhbiwgbV9ldmFsQ29kZUJsb2NrLCBtX2ppdENvZGVGb3JD
YWxsLCAwLCAwKTsKLX0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLQogI2lmIEVOQUJMRShK
SVQpCiB2b2lkIEV2YWxFeGVjdXRhYmxlOjpqZXR0aXNvbk9wdGltaXplZENvZGUoVk0mIHZtKQog
ewpAQCAtMjk4LDYwICs0MTksNiBAQCBKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNoZWNr
U3ludGF4CiAgICAgcmV0dXJuIGVycm9yLnRvRXJyb3JPYmplY3QobGV4aWNhbEdsb2JhbE9iamVj
dCwgbV9zb3VyY2UpOwogfQogCi0jaWYgRU5BQkxFKERGR19KSVQpCi1KU09iamVjdCogUHJvZ3Jh
bUV4ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBz
Y29wZSwgQ29tcGlsYXRpb25SZXN1bHQmIHJlc3VsdCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkK
LXsKLSAgICBSRUxFQVNFX0FTU0VSVChleGVjLT52bSgpLmR5bmFtaWNHbG9iYWxPYmplY3QpOwot
ICAgIEFTU0VSVCghIW1fcHJvZ3JhbUNvZGVCbG9jayk7Ci0gICAgSlNPYmplY3QqIGVycm9yID0g
MDsKLSAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChtX3Byb2dyYW1Db2RlQmxvY2st
PmppdFR5cGUoKSkpCi0gICAgICAgIGVycm9yID0gY29tcGlsZUludGVybmFsKGV4ZWMsIHNjb3Bl
LCBKSVRDb2RlOjpuZXh0VGllckpJVChtX3Byb2dyYW1Db2RlQmxvY2stPmppdFR5cGUoKSksICZy
ZXN1bHQsIGJ5dGVjb2RlSW5kZXgpOwotICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gQ29tcGls
YXRpb25Ob3ROZWVkZWQ7Ci0gICAgQVNTRVJUKCEhbV9wcm9ncmFtQ29kZUJsb2NrKTsKLSAgICBy
ZXR1cm4gZXJyb3I7Ci19Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0KLSNpZiBFTkFCTEUo
SklUKQotQ29tcGlsYXRpb25SZXN1bHQgUHJvZ3JhbUV4ZWN1dGFibGU6OmppdENvbXBpbGUoRXhl
Y1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBqaXRDb21waWxlSWZBcHByb3ByaWF0ZShleGVj
LCBtX3Byb2dyYW1Db2RlQmxvY2suZ2V0KCksIG1faml0Q29kZUZvckNhbGwsIEpJVENvZGU6OmJv
dHRvbVRpZXJKSVQoKSwgVUlOVF9NQVgsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7Ci19Ci0jZW5k
aWYKLQotSlNPYmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYWwoRXhlY1N0
YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSwgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlLCBDb21w
aWxhdGlvblJlc3VsdCogcmVzdWx0LCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQotewotICAgIFNh
bXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKHNhbXBsaW5nRGVzY3JpcHRpb24oaml0VHlwZSkp
OwotICAgIAotICAgIGlmIChyZXN1bHQpCi0gICAgICAgICpyZXN1bHQgPSBDb21waWxhdGlvbkZh
aWxlZDsKLSAgICAKLSAgICBSZWZQdHI8UHJvZ3JhbUNvZGVCbG9jaz4gbmV3Q29kZUJsb2NrOwot
ICAgIAotICAgIGlmICghIW1fcHJvZ3JhbUNvZGVCbG9jaykgewotICAgICAgICBuZXdDb2RlQmxv
Y2sgPSBhZG9wdFJlZihuZXcgUHJvZ3JhbUNvZGVCbG9jayhDb2RlQmxvY2s6OkNvcHlQYXJzZWRC
bG9jaywgKm1fcHJvZ3JhbUNvZGVCbG9jaykpOwotICAgICAgICBuZXdDb2RlQmxvY2stPnNldEFs
dGVybmF0aXZlKHN0YXRpY19wb2ludGVyX2Nhc3Q8Q29kZUJsb2NrPihtX3Byb2dyYW1Db2RlQmxv
Y2spKTsKLSAgICB9IGVsc2UgewotICAgICAgICBuZXdDb2RlQmxvY2sgPSBhZG9wdFJlZihuZXcg
UHJvZ3JhbUNvZGVCbG9jayh0aGlzLCBtX3VubGlua2VkUHJvZ3JhbUNvZGVCbG9jay5nZXQoKSwg
c2NvcGUsIHNvdXJjZSgpLnByb3ZpZGVyKCksIHNvdXJjZSgpLnN0YXJ0Q29sdW1uKCkpKTsKLSAg
ICB9Ci0KLSAgICBDb21waWxhdGlvblJlc3VsdCB0aGVSZXN1bHQgPSBwcmVwYXJlRm9yRXhlY3V0
aW9uKAotICAgICAgICBleGVjLCBtX3Byb2dyYW1Db2RlQmxvY2ssIG5ld0NvZGVCbG9jay5nZXQo
KSwgbV9qaXRDb2RlRm9yQ2FsbCwgaml0VHlwZSwgYnl0ZWNvZGVJbmRleCk7Ci0gICAgaWYgKHJl
c3VsdCkKLSAgICAgICAgKnJlc3VsdCA9IHRoZVJlc3VsdDsKLQotICAgIHJldHVybiAwOwotfQot
Ci0jaWYgRU5BQkxFKERGR19KSVQpCi1Db21waWxhdGlvblJlc3VsdCBQcm9ncmFtRXhlY3V0YWJs
ZTo6cmVwbGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGUoUGFzc1JlZlB0cjxERkc6OlBsYW4+
IHBsYW4pCi17Ci0gICAgcmV0dXJuIEpTQzo6cmVwbGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENv
ZGUoCi0gICAgICAgIHBsYW4sIG1fcHJvZ3JhbUNvZGVCbG9jaywgbV9qaXRDb2RlRm9yQ2FsbCwg
MCwgMCk7Ci19Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0KICNpZiBFTkFCTEUoSklUKQog
dm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6amV0dGlzb25PcHRpbWl6ZWRDb2RlKFZNJiB2bSkKIHsK
QEAgLTQ0NCwxNDEgKzUxMSw2IEBAIEZ1bmN0aW9uQ29kZUJsb2NrKiBGdW5jdGlvbkV4ZWN1dGFi
bGU6OmIKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi0jaWYgRU5BQkxFKERGR19KSVQpCi1KU09i
amVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlT3B0aW1pemVkRm9yQ2FsbChFeGVjU3Rh
dGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCBDb21waWxhdGlvblJlc3VsdCYgcmVzdWx0LCB1bnNp
Z25lZCBieXRlY29kZUluZGV4KQotewotICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMtPnZtKCkuZHlu
YW1pY0dsb2JhbE9iamVjdCk7Ci0gICAgQVNTRVJUKCEhbV9jb2RlQmxvY2tGb3JDYWxsKTsKLSAg
ICBKU09iamVjdCogZXJyb3IgPSAwOwotICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklU
KG1fY29kZUJsb2NrRm9yQ2FsbC0+aml0VHlwZSgpKSkKLSAgICAgICAgZXJyb3IgPSBjb21waWxl
Rm9yQ2FsbEludGVybmFsKGV4ZWMsIHNjb3BlLCBKSVRDb2RlOjpuZXh0VGllckpJVChtX2NvZGVC
bG9ja0ZvckNhbGwtPmppdFR5cGUoKSksICZyZXN1bHQsIGJ5dGVjb2RlSW5kZXgpOwotICAgIGVs
c2UKLSAgICAgICAgcmVzdWx0ID0gQ29tcGlsYXRpb25Ob3ROZWVkZWQ7Ci0gICAgQVNTRVJUKCEh
bV9jb2RlQmxvY2tGb3JDYWxsKTsKLSAgICByZXR1cm4gZXJyb3I7Ci19Ci0KLUpTT2JqZWN0KiBG
dW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWRGb3JDb25zdHJ1Y3QoRXhlY1N0YXRl
KiBleGVjLCBKU1Njb3BlKiBzY29wZSwgQ29tcGlsYXRpb25SZXN1bHQmIHJlc3VsdCwgdW5zaWdu
ZWQgYnl0ZWNvZGVJbmRleCkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChleGVjLT52bSgpLmR5bmFt
aWNHbG9iYWxPYmplY3QpOwotICAgIEFTU0VSVCghIW1fY29kZUJsb2NrRm9yQ29uc3RydWN0KTsK
LSAgICBKU09iamVjdCogZXJyb3IgPSAwOwotICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5n
SklUKG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT5qaXRUeXBlKCkpKQotICAgICAgICBlcnJvciA9
IGNvbXBpbGVGb3JDb25zdHJ1Y3RJbnRlcm5hbChleGVjLCBzY29wZSwgSklUQ29kZTo6bmV4dFRp
ZXJKSVQobV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPmppdFR5cGUoKSksICZyZXN1bHQsIGJ5dGVj
b2RlSW5kZXgpOwotICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gQ29tcGlsYXRpb25Ob3ROZWVk
ZWQ7Ci0gICAgQVNTRVJUKCEhbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpOwotICAgIHJldHVybiBl
cnJvcjsKLX0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLQotI2lmIEVOQUJMRShKSVQpCi1D
b21waWxhdGlvblJlc3VsdCBGdW5jdGlvbkV4ZWN1dGFibGU6OmppdENvbXBpbGVGb3JDYWxsKEV4
ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gaml0Q29tcGlsZUZ1bmN0aW9uSWZBcHByb3By
aWF0ZShleGVjLCBtX2NvZGVCbG9ja0ZvckNhbGwuZ2V0KCksIG1faml0Q29kZUZvckNhbGwsIG1f
aml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjaywgSklUQ29kZTo6Ym90dG9tVGllckpJVCgpLCBV
SU5UX01BWCwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKLX0KLQotQ29tcGlsYXRpb25SZXN1bHQg
RnVuY3Rpb25FeGVjdXRhYmxlOjpqaXRDb21waWxlRm9yQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhl
YykKLXsKLSAgICByZXR1cm4gaml0Q29tcGlsZUZ1bmN0aW9uSWZBcHByb3ByaWF0ZShleGVjLCBt
X2NvZGVCbG9ja0ZvckNvbnN0cnVjdC5nZXQoKSwgbV9qaXRDb2RlRm9yQ29uc3RydWN0LCBtX2pp
dENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjaywgSklUQ29kZTo6Ym90dG9tVGllckpJVCgp
LCBVSU5UX01BWCwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKLX0KLSNlbmRpZgotCi1QYXNzUmVm
UHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBGdW5jdGlvbkV4ZWN1dGFibGU6OnByb2R1Y2VDb2RlQmxv
Y2tGb3IoSlNTY29wZSogc2NvcGUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6YXRp
b25LaW5kLCBKU09iamVjdComIGV4Y2VwdGlvbikKLXsKLSAgICBSZWZQdHI8RnVuY3Rpb25Db2Rl
QmxvY2s+IGFsdGVybmF0aXZlID0gY29kZUJsb2NrRm9yKHNwZWNpYWxpemF0aW9uS2luZCk7Ci0g
ICAgCi0gICAgaWYgKCEhYWx0ZXJuYXRpdmUpIHsKLSAgICAgICAgUmVmUHRyPEZ1bmN0aW9uQ29k
ZUJsb2NrPiByZXN1bHQgPSBhZG9wdFJlZihuZXcgRnVuY3Rpb25Db2RlQmxvY2soQ29kZUJsb2Nr
OjpDb3B5UGFyc2VkQmxvY2ssICpjb2RlQmxvY2tGb3Ioc3BlY2lhbGl6YXRpb25LaW5kKSkpOwot
ICAgICAgICByZXN1bHQtPnNldEFsdGVybmF0aXZlKGFsdGVybmF0aXZlKTsKLSAgICAgICAgcmV0
dXJuIHJlc3VsdC5yZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgVk0qIHZtID0gc2NvcGUtPnZtKCk7
Ci0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3BlLT5nbG9iYWxPYmplY3Qo
KTsKLSAgICBQYXJzZXJFcnJvciBlcnJvcjsKLSAgICBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2Rl
ID0gZ2xvYmFsT2JqZWN0LT5oYXNEZWJ1Z2dlcigpID8gRGVidWdnZXJPbiA6IERlYnVnZ2VyT2Zm
OwotICAgIFByb2ZpbGVyTW9kZSBwcm9maWxlck1vZGUgPSBnbG9iYWxPYmplY3QtPmhhc1Byb2Zp
bGVyKCkgPyBQcm9maWxlck9uIDogUHJvZmlsZXJPZmY7Ci0gICAgVW5saW5rZWRGdW5jdGlvbkNv
ZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2sgPSBtX3VubGlua2VkRXhlY3V0YWJsZS0+Y29kZUJs
b2NrRm9yKCp2bSwgbV9zb3VyY2UsIHNwZWNpYWxpemF0aW9uS2luZCwgZGVidWdnZXJNb2RlLCBw
cm9maWxlck1vZGUsIGVycm9yKTsKLSAgICByZWNvcmRQYXJzZShtX3VubGlua2VkRXhlY3V0YWJs
ZS0+ZmVhdHVyZXMoKSwgbV91bmxpbmtlZEV4ZWN1dGFibGUtPmhhc0NhcHR1cmVkVmFyaWFibGVz
KCksIGxpbmVObygpLCBsYXN0TGluZSgpLCBzdGFydENvbHVtbigpKTsKLQotICAgIGlmICghdW5s
aW5rZWRDb2RlQmxvY2spIHsKLSAgICAgICAgZXhjZXB0aW9uID0gZXJyb3IudG9FcnJvck9iamVj
dChnbG9iYWxPYmplY3QsIG1fc291cmNlKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0g
ICAgU291cmNlUHJvdmlkZXIqIHByb3ZpZGVyID0gc291cmNlKCkucHJvdmlkZXIoKTsKLSAgICB1
bnNpZ25lZCBzb3VyY2VPZmZzZXQgPSBzb3VyY2UoKS5zdGFydE9mZnNldCgpOwotICAgIHVuc2ln
bmVkIHN0YXJ0Q29sdW1uID0gc291cmNlKCkuc3RhcnRDb2x1bW4oKTsKLQotICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgRnVuY3Rpb25Db2RlQmxvY2sodGhpcywgdW5saW5rZWRDb2RlQmxvY2ssIHNj
b3BlLCBwcm92aWRlciwgc291cmNlT2Zmc2V0LCBzdGFydENvbHVtbikpOwotfQotCi0KLUpTT2Jq
ZWN0KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDYWxsSW50ZXJuYWwoRXhlY1N0YXRl
KiBleGVjLCBKU1Njb3BlKiBzY29wZSwgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlLCBDb21waWxh
dGlvblJlc3VsdCogcmVzdWx0LCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQotewotICAgIFNhbXBs
aW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKHNhbXBsaW5nRGVzY3JpcHRpb24oaml0VHlwZSkpOwot
ICAgIAotICAgIGlmIChyZXN1bHQpCi0gICAgICAgICpyZXN1bHQgPSBDb21waWxhdGlvbkZhaWxl
ZDsKLSAgICAKLSAgICBBU1NFUlQoKGppdFR5cGUgPT0gSklUQ29kZTo6Ym90dG9tVGllckpJVCgp
KSA9PSAhbV9jb2RlQmxvY2tGb3JDYWxsKTsKLSAgICBKU09iamVjdCogZXhjZXB0aW9uID0gMDsK
LSAgICAKLSAgICBSZWZQdHI8RnVuY3Rpb25Db2RlQmxvY2s+IG5ld0NvZGVCbG9jayA9IHByb2R1
Y2VDb2RlQmxvY2tGb3Ioc2NvcGUsIENvZGVGb3JDYWxsLCBleGNlcHRpb24pOwotICAgIGlmICgh
bmV3Q29kZUJsb2NrKQotICAgICAgICByZXR1cm4gZXhjZXB0aW9uOwotICAgIAotICAgIENvbXBp
bGF0aW9uUmVzdWx0IHRoZVJlc3VsdCA9IHByZXBhcmVGdW5jdGlvbkZvckV4ZWN1dGlvbigKLSAg
ICAgICAgZXhlYywgbV9jb2RlQmxvY2tGb3JDYWxsLCBuZXdDb2RlQmxvY2suZ2V0KCksIG1faml0
Q29kZUZvckNhbGwsCi0gICAgICAgIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjaywgbV9u
dW1QYXJhbWV0ZXJzRm9yQ2FsbCwgaml0VHlwZSwKLSAgICAgICAgYnl0ZWNvZGVJbmRleCwgQ29k
ZUZvckNhbGwpOwotICAgIGlmIChyZXN1bHQpCi0gICAgICAgICpyZXN1bHQgPSB0aGVSZXN1bHQ7
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLUNvbXBpbGF0aW9uUmVz
dWx0IEZ1bmN0aW9uRXhlY3V0YWJsZTo6cmVwbGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGVG
b3JDYWxsKFBhc3NSZWZQdHI8REZHOjpQbGFuPiBwbGFuKQotewotICAgIHJldHVybiBKU0M6OnJl
cGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlKAotICAgICAgICBwbGFuLCBtX2NvZGVCbG9j
a0ZvckNhbGwsIG1faml0Q29kZUZvckNhbGwsICZtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hl
Y2ssCi0gICAgICAgICZtX251bVBhcmFtZXRlcnNGb3JDYWxsKTsKLX0KLSNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKLQotSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNv
bnN0cnVjdEludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUsIEpJVENvZGU6
OkpJVFR5cGUgaml0VHlwZSwgQ29tcGlsYXRpb25SZXN1bHQqIHJlc3VsdCwgdW5zaWduZWQgYnl0
ZWNvZGVJbmRleCkKLXsKLSAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbihzYW1wbGlu
Z0Rlc2NyaXB0aW9uKGppdFR5cGUpKTsKLSAgICAKLSAgICBpZiAocmVzdWx0KQotICAgICAgICAq
cmVzdWx0ID0gQ29tcGlsYXRpb25GYWlsZWQ7Ci0gICAgCi0gICAgQVNTRVJUKChqaXRUeXBlID09
IEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSkgPT0gIW1fY29kZUJsb2NrRm9yQ29uc3RydWN0KTsK
LSAgICBKU09iamVjdCogZXhjZXB0aW9uID0gMDsKLSAgICBSZWZQdHI8RnVuY3Rpb25Db2RlQmxv
Y2s+IG5ld0NvZGVCbG9jayA9IHByb2R1Y2VDb2RlQmxvY2tGb3Ioc2NvcGUsIENvZGVGb3JDb25z
dHJ1Y3QsIGV4Y2VwdGlvbik7Ci0gICAgaWYgKCFuZXdDb2RlQmxvY2spCi0gICAgICAgIHJldHVy
biBleGNlcHRpb247Ci0KLSAgICBDb21waWxhdGlvblJlc3VsdCB0aGVSZXN1bHQgPSBwcmVwYXJl
RnVuY3Rpb25Gb3JFeGVjdXRpb24oCi0gICAgICAgIGV4ZWMsIG1fY29kZUJsb2NrRm9yQ29uc3Ry
dWN0LCBuZXdDb2RlQmxvY2suZ2V0KCksIG1faml0Q29kZUZvckNvbnN0cnVjdCwKLSAgICAgICAg
bV9qaXRDb2RlRm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2ssIG1fbnVtUGFyYW1ldGVyc0ZvckNv
bnN0cnVjdCwgaml0VHlwZSwKLSAgICAgICAgYnl0ZWNvZGVJbmRleCwgQ29kZUZvckNvbnN0cnVj
dCk7Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgKnJlc3VsdCA9IHRoZVJlc3VsdDsKLQotICAg
IHJldHVybiAwOwotfQotCi0jaWYgRU5BQkxFKERGR19KSVQpCi1Db21waWxhdGlvblJlc3VsdCBG
dW5jdGlvbkV4ZWN1dGFibGU6OnJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlRm9yQ29u
c3RydWN0KFBhc3NSZWZQdHI8REZHOjpQbGFuPiBwbGFuKQotewotICAgIHJldHVybiBKU0M6OnJl
cGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlKAotICAgICAgICBwbGFuLCBtX2NvZGVCbG9j
a0ZvckNvbnN0cnVjdCwgbV9qaXRDb2RlRm9yQ29uc3RydWN0LAotICAgICAgICAmbV9qaXRDb2Rl
Rm9yQ29uc3RydWN0V2l0aEFyaXR5Q2hlY2ssICZtX251bVBhcmFtZXRlcnNGb3JDb25zdHJ1Y3Qp
OwotfQotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotCiAjaWYgRU5BQkxFKEpJVCkKIHZvaWQg
RnVuY3Rpb25FeGVjdXRhYmxlOjpqZXR0aXNvbk9wdGltaXplZENvZGVGb3JDYWxsKFZNJiB2bSkK
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHJl
dmlzaW9uIDE1NDYzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFi
bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjQ0LDYgKzI0NCw3IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIExMSW50OjpDTG9vcDo6Y2F0Y2hSb3V0aW5lRm9yKGNhdGNoUENGb3JJbnRlcnByZXRl
cik7CiAjZW5kaWYKICAgICB9CisgICAgCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCB8fCBFTkFCTEUo
TExJTlRfQ19MT09QKQogCiBwcm90ZWN0ZWQ6CkBAIC00MDIsNiArNDAzLDIwIEBAIHB1YmxpYzoK
ICAgICAgICAgbV9zdGFydENvbHVtbiA9IHN0YXJ0Q29sdW1uOwogICAgIH0KIAorICAgIHZvaWQg
aW5zdGFsbENvZGUoQ29kZUJsb2NrKik7CisgICAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+IG5ld0Nv
ZGVCbG9ja0ZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kLCBKU1Njb3BlKiwgSlNPYmplY3QqJiBl
eGNlcHRpb24pOworICAgIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBuZXdSZXBsYWNlbWVudENvZGVC
bG9ja0ZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKKyAgICAKKyAgICBKU09iamVjdCogcHJl
cGFyZUZvckV4ZWN1dGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCBDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kIGtpbmQpCisgICAgeworICAgICAgICBpZiAoaGFzSklUQ29kZUZvcihr
aW5kKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gcHJlcGFyZUZvckV4
ZWN1dGlvbkltcGwoZXhlYywgc2NvcGUsIGtpbmQpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBK
U09iamVjdCogcHJlcGFyZUZvckV4ZWN1dGlvbkltcGwoRXhlY1N0YXRlKiwgSlNTY29wZSosIENv
ZGVTcGVjaWFsaXphdGlvbktpbmQpOworCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihWTSYgdm0pCiAgICAgewpAQCAtNDMwLDI0ICs0NDUsOCBAQCBwdWJsaWM6CiAKICAgICBz
dGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCi0gICAgSlNPYmplY3QqIGNvbXBpbGUoRXhl
Y1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSkKLSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNT
RVJUKGV4ZWMtPnZtKCkuZHluYW1pY0dsb2JhbE9iamVjdCk7Ci0gICAgICAgIEpTT2JqZWN0KiBl
cnJvciA9IDA7Ci0gICAgICAgIGlmICghbV9ldmFsQ29kZUJsb2NrKQotICAgICAgICAgICAgZXJy
b3IgPSBjb21waWxlSW50ZXJuYWwoZXhlYywgc2NvcGUsIEpJVENvZGU6OmJvdHRvbVRpZXJKSVQo
KSk7Ci0gICAgICAgIEFTU0VSVCghZXJyb3IgPT0gISFtX2V2YWxDb2RlQmxvY2spOwotICAgICAg
ICByZXR1cm4gZXJyb3I7Ci0gICAgfQotICAgICAgICAKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAg
ICBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBKU1Njb3BlKiwgQ29tcGls
YXRpb25SZXN1bHQmLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKLSAgICBDb21waWxhdGlvblJl
c3VsdCByZXBsYWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZShQYXNzUmVmUHRyPERGRzo6UGxh
bj4pOwotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotICAgICAgICAKICNpZiBFTkFCTEUoSklU
KQogICAgIHZvaWQgamV0dGlzb25PcHRpbWl6ZWRDb2RlKFZNJik7Ci0gICAgQ29tcGlsYXRpb25S
ZXN1bHQgaml0Q29tcGlsZShFeGVjU3RhdGUqKTsKICNlbmRpZgogCiAgICAgRXZhbENvZGVCbG9j
ayYgZ2VuZXJhdGVkQnl0ZWNvZGUoKQpAQCAtNDgxLDEwICs0ODAsMTAgQEAgcHVibGljOgogICAg
IHVuc2lnbmVkIG51bWJlck9mRnVuY3Rpb25EZWNscygpIHsgcmV0dXJuIG1fdW5saW5rZWRFdmFs
Q29kZUJsb2NrLT5udW1iZXJPZkZ1bmN0aW9uRGVjbHMoKTsgfQogCiBwcml2YXRlOgorICAgIGZy
aWVuZCBjbGFzcyBTY3JpcHRFeGVjdXRhYmxlOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBTY3JpcHRFeGVjdXRhYmxl
OjpTdHJ1Y3R1cmVGbGFnczsKICAgICBFdmFsRXhlY3V0YWJsZShFeGVjU3RhdGUqLCBjb25zdCBT
b3VyY2VDb2RlJiwgYm9vbCk7CiAKLSAgICBKU09iamVjdCogY29tcGlsZUludGVybmFsKEV4ZWNT
dGF0ZSosIEpTU2NvcGUqLCBKSVRDb2RlOjpKSVRUeXBlLCBDb21waWxhdGlvblJlc3VsdCogPSAw
LCB1bnNpZ25lZCBieXRlY29kZUluZGV4ID0gVUlOVF9NQVgpOwogICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogICAgIFJlZlB0cjxFdmFsQ29k
ZUJsb2NrPiBtX2V2YWxDb2RlQmxvY2s7CkBAIC01MDgsMjQgKzUwNyw4IEBAIHB1YmxpYzoKIAog
ICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKLSAgICBKU09iamVjdCogY29tcGls
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlKQotICAgIHsKLSAgICAgICAgUkVMRUFT
RV9BU1NFUlQoZXhlYy0+dm0oKS5keW5hbWljR2xvYmFsT2JqZWN0KTsKLSAgICAgICAgSlNPYmpl
Y3QqIGVycm9yID0gMDsKLSAgICAgICAgaWYgKCFtX3Byb2dyYW1Db2RlQmxvY2spCi0gICAgICAg
ICAgICBlcnJvciA9IGNvbXBpbGVJbnRlcm5hbChleGVjLCBzY29wZSwgSklUQ29kZTo6Ym90dG9t
VGllckpJVCgpKTsKLSAgICAgICAgQVNTRVJUKCFlcnJvciA9PSAhIW1fcHJvZ3JhbUNvZGVCbG9j
ayk7Ci0gICAgICAgIHJldHVybiBlcnJvcjsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoREZHX0pJVCkK
LSAgICBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBKU1Njb3BlKiwgQ29t
cGlsYXRpb25SZXN1bHQmLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKLSAgICBDb21waWxhdGlv
blJlc3VsdCByZXBsYWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZShQYXNzUmVmUHRyPERGRzo6
UGxhbj4pOwotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotICAgICAgICAKICNpZiBFTkFCTEUo
SklUKQogICAgIHZvaWQgamV0dGlzb25PcHRpbWl6ZWRDb2RlKFZNJik7Ci0gICAgQ29tcGlsYXRp
b25SZXN1bHQgaml0Q29tcGlsZShFeGVjU3RhdGUqKTsKICNlbmRpZgogCiAgICAgUHJvZ3JhbUNv
ZGVCbG9jayYgZ2VuZXJhdGVkQnl0ZWNvZGUoKQpAQCAtNTU3LDExICs1NDAsMTIgQEAgcHVibGlj
OgogICAgIEV4ZWN1dGFibGVJbmZvIGV4ZWN1dGFibGVJbmZvKCkgY29uc3QgeyByZXR1cm4gRXhl
Y3V0YWJsZUluZm8obmVlZHNBY3RpdmF0aW9uKCksIHVzZXNFdmFsKCksIGlzU3RyaWN0TW9kZSgp
LCBmYWxzZSk7IH0KIAogcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgU2NyaXB0RXhlY3V0YWJs
ZTsKKyAgICAKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVy
cmlkZXNWaXNpdENoaWxkcmVuIHwgU2NyaXB0RXhlY3V0YWJsZTo6U3RydWN0dXJlRmxhZ3M7CiAK
ICAgICBQcm9ncmFtRXhlY3V0YWJsZShFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2RlJik7CiAK
LSAgICBKU09iamVjdCogY29tcGlsZUludGVybmFsKEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBKSVRD
b2RlOjpKSVRUeXBlLCBDb21waWxhdGlvblJlc3VsdCogPSAwLCB1bnNpZ25lZCBieXRlY29kZUlu
ZGV4ID0gVUlOVF9NQVgpOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKIAogICAgIFdyaXRlQmFycmllcjxVbmxpbmtlZFByb2dyYW1Db2RlQmxv
Y2s+IG1fdW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOwpAQCAtNjAyLDI0ICs1ODYsOCBAQCBwdWJs
aWM6CiAgICAgICAgIAogICAgIFBhc3NSZWZQdHI8RnVuY3Rpb25Db2RlQmxvY2s+IHByb2R1Y2VD
b2RlQmxvY2tGb3IoSlNTY29wZSosIENvZGVTcGVjaWFsaXphdGlvbktpbmQsIEpTT2JqZWN0KiYg
ZXhjZXB0aW9uKTsKIAotICAgIEpTT2JqZWN0KiBjb21waWxlRm9yQ2FsbChFeGVjU3RhdGUqIGV4
ZWMsIEpTU2NvcGUqIHNjb3BlKQotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoZXhlYy0+
dm0oKS5keW5hbWljR2xvYmFsT2JqZWN0KTsKLSAgICAgICAgSlNPYmplY3QqIGVycm9yID0gMDsK
LSAgICAgICAgaWYgKCFtX2NvZGVCbG9ja0ZvckNhbGwpCi0gICAgICAgICAgICBlcnJvciA9IGNv
bXBpbGVGb3JDYWxsSW50ZXJuYWwoZXhlYywgc2NvcGUsIEpJVENvZGU6OmJvdHRvbVRpZXJKSVQo
KSk7Ci0gICAgICAgIEFTU0VSVCghZXJyb3IgPT0gISFtX2NvZGVCbG9ja0ZvckNhbGwpOwotICAg
ICAgICByZXR1cm4gZXJyb3I7Ci0gICAgfQotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgSlNP
YmplY3QqIGNvbXBpbGVPcHRpbWl6ZWRGb3JDYWxsKEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBDb21w
aWxhdGlvblJlc3VsdCYsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwotICAgIENvbXBpbGF0aW9u
UmVzdWx0IHJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlRm9yQ2FsbChQYXNzUmVmUHRy
PERGRzo6UGxhbj4pOwotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotICAgICAgICAKICNpZiBF
TkFCTEUoSklUKQogICAgIHZvaWQgamV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ2FsbChWTSYpOwot
ICAgIENvbXBpbGF0aW9uUmVzdWx0IGppdENvbXBpbGVGb3JDYWxsKEV4ZWNTdGF0ZSopOwogI2Vu
ZGlmCiAKICAgICBib29sIGlzR2VuZXJhdGVkRm9yQ2FsbCgpIGNvbnN0CkBAIC02MzMsMjQgKzYw
MSw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICptX2NvZGVCbG9ja0ZvckNhbGw7CiAgICAg
fQogCi0gICAgSlNPYmplY3QqIGNvbXBpbGVGb3JDb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjLCBK
U1Njb3BlKiBzY29wZSkKLSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMtPnZtKCku
ZHluYW1pY0dsb2JhbE9iamVjdCk7Ci0gICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IDA7Ci0gICAg
ICAgIGlmICghbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpCi0gICAgICAgICAgICBlcnJvciA9IGNv
bXBpbGVGb3JDb25zdHJ1Y3RJbnRlcm5hbChleGVjLCBzY29wZSwgSklUQ29kZTo6Ym90dG9tVGll
ckpJVCgpKTsKLSAgICAgICAgQVNTRVJUKCFlcnJvciA9PSAhIW1fY29kZUJsb2NrRm9yQ29uc3Ry
dWN0KTsKLSAgICAgICAgcmV0dXJuIGVycm9yOwotICAgIH0KLQotI2lmIEVOQUJMRShERkdfSklU
KQotICAgIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkRm9yQ29uc3RydWN0KEV4ZWNTdGF0ZSos
IEpTU2NvcGUqLCBDb21waWxhdGlvblJlc3VsdCYsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwot
ICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlRm9y
Q29uc3RydWN0KFBhc3NSZWZQdHI8REZHOjpQbGFuPik7Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCi0gICAgICAgIAogI2lmIEVOQUJMRShKSVQpCiAgICAgdm9pZCBqZXR0aXNvbk9wdGltaXpl
ZENvZGVGb3JDb25zdHJ1Y3QoVk0mKTsKLSAgICBDb21waWxhdGlvblJlc3VsdCBqaXRDb21waWxl
Rm9yQ29uc3RydWN0KEV4ZWNTdGF0ZSopOwogI2VuZGlmCiAKICAgICBib29sIGlzR2VuZXJhdGVk
Rm9yQ29uc3RydWN0KCkgY29uc3QKQEAgLTY2NCwzOSArNjE2LDYgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gKm1fY29kZUJsb2NrRm9yQ29uc3RydWN0OwogICAgIH0KICAgICAgICAgCi0gICAg
SlNPYmplY3QqIGNvbXBpbGVGb3IoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSwgQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGV4ZWMtPmNh
bGxlZSgpKTsKLSAgICAgICAgQVNTRVJUKGV4ZWMtPmNhbGxlZSgpLT5pbmhlcml0cyhKU0Z1bmN0
aW9uOjppbmZvKCkpKTsKLSAgICAgICAgQVNTRVJUKGpzQ2FzdDxKU0Z1bmN0aW9uKj4oZXhlYy0+
Y2FsbGVlKCkpLT5qc0V4ZWN1dGFibGUoKSA9PSB0aGlzKTsKLQotICAgICAgICBpZiAoa2luZCA9
PSBDb2RlRm9yQ2FsbCkKLSAgICAgICAgICAgIHJldHVybiBjb21waWxlRm9yQ2FsbChleGVjLCBz
Y29wZSk7Ci0gICAgICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOwotICAgICAg
ICByZXR1cm4gY29tcGlsZUZvckNvbnN0cnVjdChleGVjLCBzY29wZSk7Ci0gICAgfQotICAgICAg
ICAKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBKU09iamVjdCogY29tcGlsZU9wdGltaXplZEZv
cihFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCBDb21waWxhdGlvblJlc3VsdCYgcmVz
dWx0LCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQp
Ci0gICAgewotICAgICAgICBBU1NFUlQoZXhlYy0+Y2FsbGVlKCkpOwotICAgICAgICBBU1NFUlQo
ZXhlYy0+Y2FsbGVlKCktPmluaGVyaXRzKEpTRnVuY3Rpb246OmluZm8oKSkpOwotICAgICAgICBB
U1NFUlQoanNDYXN0PEpTRnVuY3Rpb24qPihleGVjLT5jYWxsZWUoKSktPmpzRXhlY3V0YWJsZSgp
ID09IHRoaXMpOwotICAgICAgICAgICAgCi0gICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxs
KQotICAgICAgICAgICAgcmV0dXJuIGNvbXBpbGVPcHRpbWl6ZWRGb3JDYWxsKGV4ZWMsIHNjb3Bl
LCByZXN1bHQsIGJ5dGVjb2RlSW5kZXgpOwotICAgICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9y
Q29uc3RydWN0KTsKLSAgICAgICAgcmV0dXJuIGNvbXBpbGVPcHRpbWl6ZWRGb3JDb25zdHJ1Y3Qo
ZXhlYywgc2NvcGUsIHJlc3VsdCwgYnl0ZWNvZGVJbmRleCk7Ci0gICAgfQotICAgICAgICAKLSAg
ICBDb21waWxhdGlvblJlc3VsdCByZXBsYWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZUZvcihQ
YXNzUmVmUHRyPERGRzo6UGxhbj4gcGxhbiwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQot
ICAgIHsKLSAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCi0gICAgICAgICAgICByZXR1
cm4gcmVwbGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGVGb3JDYWxsKHBsYW4pOwotICAgICAg
ICByZXR1cm4gcmVwbGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGVGb3JDb25zdHJ1Y3QocGxh
bik7Ci0gICAgfQotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotCiAjaWYgRU5BQkxFKEpJVCkK
ICAgICB2b2lkIGpldHRpc29uT3B0aW1pemVkQ29kZUZvcihWTSYgdm0sIENvZGVTcGVjaWFsaXph
dGlvbktpbmQga2luZCkKICAgICB7CkBAIC03MDcsMTQgKzYyNiw2IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIGpldHRpc29uT3B0aW1pemVkQ29kZUZvckNvbnN0cnVjdCh2bSk7CiAgICAgICAgIH0K
ICAgICB9Ci0gICAgICAgIAotICAgIENvbXBpbGF0aW9uUmVzdWx0IGppdENvbXBpbGVGb3IoRXhl
Y1N0YXRlKiBleGVjLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCi0gICAgewotICAgICAg
ICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKLSAgICAgICAgICAgIHJldHVybiBqaXRDb21waWxl
Rm9yQ2FsbChleGVjKTsKLSAgICAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7
Ci0gICAgICAgIHJldHVybiBqaXRDb21waWxlRm9yQ29uc3RydWN0KGV4ZWMpOwotICAgIH0KICNl
bmRpZgogICAgICAgICAKICAgICBib29sIGlzR2VuZXJhdGVkRm9yKENvZGVTcGVjaWFsaXphdGlv
bktpbmQga2luZCkKQEAgLTc2NCw5ICs2NzUsNiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEZ1
bmN0aW9uRXhlY3V0YWJsZShWTSYsIGNvbnN0IFNvdXJjZUNvZGUmLCBVbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZSosIHVuc2lnbmVkIGZpcnN0TGluZSwgdW5zaWduZWQgbGFzdExpbmUsIHVuc2ln
bmVkIHN0YXJ0Q29sdW1uKTsKIAotICAgIEpTT2JqZWN0KiBjb21waWxlRm9yQ2FsbEludGVybmFs
KEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBKSVRDb2RlOjpKSVRUeXBlLCBDb21waWxhdGlvblJlc3Vs
dCogPSAwLCB1bnNpZ25lZCBieXRlY29kZUluZGV4ID0gVUlOVF9NQVgpOwotICAgIEpTT2JqZWN0
KiBjb21waWxlRm9yQ29uc3RydWN0SW50ZXJuYWwoRXhlY1N0YXRlKiwgSlNTY29wZSosIEpJVENv
ZGU6OkpJVFR5cGUsIENvbXBpbGF0aW9uUmVzdWx0KiA9IDAsIHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXggPSBVSU5UX01BWCk7Ci0gICAgICAgIAogICAgIFJlZlB0cjxGdW5jdGlvbkNvZGVCbG9jaz4m
IGNvZGVCbG9ja0ZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiAgICAgewogICAgICAg
ICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKQEAgLTc4Niw2ICs2OTQsOCBAQCBwcml2YXRlOgog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCisgICAgZnJpZW5kIGNsYXNzIFNjcmlwdEV4
ZWN1dGFibGU7CisKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBP
dmVycmlkZXNWaXNpdENoaWxkcmVuIHwgU2NyaXB0RXhlY3V0YWJsZTo6U3RydWN0dXJlRmxhZ3M7
CiAgICAgV3JpdGVCYXJyaWVyPFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlPiBtX3VubGlua2Vk
RXhlY3V0YWJsZTsKICAgICBSZWZQdHI8RnVuY3Rpb25Db2RlQmxvY2s+IG1fY29kZUJsb2NrRm9y
Q2FsbDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGlvbkhhcm5l
c3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRp
b25IYXJuZXNzLmgJKHJldmlzaW9uIDE1NDYzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0V4ZWN1dGlvbkhhcm5lc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxNjcgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0j
aWZuZGVmIEV4ZWN1dGlvbkhhcm5lc3NfaAotI2RlZmluZSBFeGVjdXRpb25IYXJuZXNzX2gKLQot
I2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgotCi0jaW5jbHVkZSAiQ29tcGlsYXRpb25SZXN1bHQu
aCIKLSNpbmNsdWRlICJERkdEcml2ZXIuaCIKLSNpbmNsdWRlICJERkdQbGFuLmgiCi0jaW5jbHVk
ZSAiSklURHJpdmVyLmgiCi0jaW5jbHVkZSAiTExJbnRFbnRyeXBvaW50cy5oIgotCi1uYW1lc3Bh
Y2UgSlNDIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KLWlubGluZSBDb21w
aWxhdGlvblJlc3VsdCBwcmVwYXJlRm9yRXhlY3V0aW9uSW1wbCgKLSAgICBFeGVjU3RhdGUqIGV4
ZWMsIENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgUmVmUHRyPEpJVENvZGU+JiBqaXRDb2RlLAot
ICAgIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKLXsK
LSAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVJbmRleCk7Ci0jaWYgRU5BQkxFKExMSU5UKQotICAg
IGlmIChKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKSkgewotICAgICAgICAvLyBTdGFy
dCBvZmYgaW4gdGhlIGxvdyBsZXZlbCBpbnRlcnByZXRlci4KLSAgICAgICAgTExJbnQ6OmdldEVu
dHJ5cG9pbnQoZXhlYy0+dm0oKSwgY29kZUJsb2NrLCBqaXRDb2RlKTsKLSAgICAgICAgaWYgKGV4
ZWMtPnZtKCkubV9wZXJCeXRlY29kZVByb2ZpbGVyKQotICAgICAgICAgICAgZXhlYy0+dm0oKS5t
X3BlckJ5dGVjb2RlUHJvZmlsZXItPmVuc3VyZUJ5dGVjb2Rlc0Zvcihjb2RlQmxvY2spOwotICAg
ICAgICByZXR1cm4gQ29tcGlsYXRpb25TdWNjZXNzZnVsOwotICAgIH0KLSNlbmRpZiAvLyBFTkFC
TEUoTExJTlQpCi0jaWYgRU5BQkxFKEpJVCkKLSAgICByZXR1cm4gaml0Q29tcGlsZUlmQXBwcm9w
cmlhdGVJbXBsKAotICAgICAgICBleGVjLCBjb2RlQmxvY2ssIGppdENvZGUsIGppdFR5cGUsIGJ5
dGVjb2RlSW5kZXgsCi0gICAgICAgIEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGppdFR5cGUpID8g
SklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCA6IEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7Ci0jZW5k
aWYKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBDb21waWxh
dGlvbkZhaWxlZDsKLX0KLQotaW5saW5lIENvbXBpbGF0aW9uUmVzdWx0IHByZXBhcmVGdW5jdGlv
bkZvckV4ZWN1dGlvbkltcGwoCi0gICAgRXhlY1N0YXRlKiBleGVjLCBGdW5jdGlvbkNvZGVCbG9j
ayogY29kZUJsb2NrLCBSZWZQdHI8SklUQ29kZT4mIGppdENvZGUsCi0gICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyJiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ssIEpJVENvZGU6OkpJVFR5cGUgaml0VHlw
ZSwKLSAgICB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtp
bmQpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2RlSW5kZXgpOwotICAgIFVOVVNFRF9QQVJB
TShqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOwotI2lmIEVOQUJMRShMTElOVCkKLSAgICBpZiAoSklU
Q29kZTo6aXNCYXNlbGluZUNvZGUoaml0VHlwZSkpIHsKLSAgICAgICAgLy8gU3RhcnQgb2ZmIGlu
IHRoZSBsb3cgbGV2ZWwgaW50ZXJwcmV0ZXIuCi0gICAgICAgIExMSW50OjpnZXRGdW5jdGlvbkVu
dHJ5cG9pbnQoZXhlYy0+dm0oKSwga2luZCwgaml0Q29kZSwgaml0Q29kZVdpdGhBcml0eUNoZWNr
KTsKLSAgICAgICAgaWYgKGV4ZWMtPnZtKCkubV9wZXJCeXRlY29kZVByb2ZpbGVyKQotICAgICAg
ICAgICAgZXhlYy0+dm0oKS5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmVuc3VyZUJ5dGVjb2Rlc0Zv
cihjb2RlQmxvY2spOwotICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25TdWNjZXNzZnVsOwotICAg
IH0KLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGtpbmQpOwotI2VuZGlmIC8vIEVOQUJMRShMTElO
VCkKLSNpZiBFTkFCTEUoSklUKQotICAgIHJldHVybiBqaXRDb21waWxlRnVuY3Rpb25JZkFwcHJv
cHJpYXRlSW1wbCgKLSAgICAgICAgZXhlYywgY29kZUJsb2NrLCBqaXRDb2RlLCBqaXRDb2RlV2l0
aEFyaXR5Q2hlY2ssIGppdFR5cGUsIGJ5dGVjb2RlSW5kZXgsCi0gICAgICAgIEpJVENvZGU6Omlz
QmFzZWxpbmVDb2RlKGppdFR5cGUpID8gSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCA6IEpJVENv
bXBpbGF0aW9uQ2FuRmFpbCk7Ci0jZW5kaWYKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgIHJldHVybiBDb21waWxhdGlvbkZhaWxlZDsKLX0KLQotdGVtcGxhdGU8dHlwZW5h
bWUgQ29kZUJsb2NrVHlwZT4KLWlubGluZSBDb21waWxhdGlvblJlc3VsdCBpbnN0YWxsT3B0aW1p
emVkQ29kZSgKLSAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQsIFJlZlB0cjxDb2RlQmxvY2tU
eXBlPiYgc2luaywgQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLAotICAgIFBhc3NSZWZQdHI8SklU
Q29kZT4gaml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGppdENvZGVXaXRoQXJpdHlDaGVj
aywKLSAgICBpbnQqIG51bVBhcmFtZXRlcnMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGppdENvZGVX
aXRoQXJpdHlDaGVjayk7Ci0gICAgaWYgKHJlc3VsdCAhPSBDb21waWxhdGlvblN1Y2Nlc3NmdWwp
Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgCi0jaWYgRU5BQkxFKEpJVCkKLSAgICBjb2Rl
QmxvY2stPnNldEpJVENvZGUoaml0Q29kZSwgaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKLSNlbmRp
ZgotCi0gICAgc2luayA9IGNvZGVCbG9jazsKLSAgICAKLSAgICBpZiAobnVtUGFyYW1ldGVycykK
LSAgICAgICAgKm51bVBhcmFtZXRlcnMgPSBjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsKLSAg
ICAKLSAgICBpZiAoaml0Q29kZSkKLSAgICAgICAgY29kZUJsb2NrLT52bSgpLT5oZWFwLnJlcG9y
dEV4dHJhTWVtb3J5Q29zdChzaXplb2YoKmNvZGVCbG9jaykgKyBqaXRDb2RlLT5zaXplKCkpOwot
ICAgIGVsc2UKLSAgICAgICAgY29kZUJsb2NrLT52bSgpLT5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5
Q29zdChzaXplb2YoKmNvZGVCbG9jaykpOwotICAgIAotICAgIGlmIChzaW5rICE9IGNvZGVCbG9j
aykgewotICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgd2UgR0MgYW5kIGRlY2lkZSB0aGF0
IHRoZSBjb2RlIGlzIGludmFsaWQuCi0gICAgICAgIHJldHVybiBDb21waWxhdGlvbkludmFsaWRh
dGVkOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBDb2RlQmxvY2tUeXBlPgotaW5saW5lIENvbXBpbGF0aW9uUmVzdWx0IHByZXBhcmVGb3JF
eGVjdXRpb24oCi0gICAgRXhlY1N0YXRlKiBleGVjLCBSZWZQdHI8Q29kZUJsb2NrVHlwZT4mIHNp
bmssIENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywKLSAgICBSZWZQdHI8SklUQ29kZT4mIGppdENv
ZGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKLXsK
LSAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBwcmVwYXJlRm9yRXhlY3V0aW9uSW1wbChl
eGVjLCBjb2RlQmxvY2ssIGppdENvZGUsIGppdFR5cGUsIGJ5dGVjb2RlSW5kZXgpOwotICAgIHJl
dHVybiBpbnN0YWxsT3B0aW1pemVkQ29kZShyZXN1bHQsIHNpbmssIGNvZGVCbG9jaywgaml0Q29k
ZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCksIDApOwotfQotCi1pbmxpbmUgQ29tcGlsYXRpb25S
ZXN1bHQgcHJlcGFyZUZ1bmN0aW9uRm9yRXhlY3V0aW9uKAotICAgIEV4ZWNTdGF0ZSogZXhlYywg
UmVmUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiYgc2luaywgRnVuY3Rpb25Db2RlQmxvY2sqIGNvZGVC
bG9jaywKLSAgICBSZWZQdHI8SklUQ29kZT4mIGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciYgaml0Q29kZVdpdGhBcml0eUNoZWNrLAotICAgIGludCYgbnVtUGFyYW1ldGVycywgSklUQ29k
ZTo6SklUVHlwZSBqaXRUeXBlLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LAotICAgIENvZGVTcGVj
aWFsaXphdGlvbktpbmQga2luZCkKLXsKLSAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBw
cmVwYXJlRnVuY3Rpb25Gb3JFeGVjdXRpb25JbXBsKGV4ZWMsIGNvZGVCbG9jaywKLSAgICAgICAg
aml0Q29kZSwgaml0Q29kZVdpdGhBcml0eUNoZWNrLCBqaXRUeXBlLCBieXRlY29kZUluZGV4LCBr
aW5kKTsKLSAgICByZXR1cm4gaW5zdGFsbE9wdGltaXplZENvZGUocmVzdWx0LCBzaW5rLCBjb2Rl
QmxvY2ssIGppdENvZGUsIGppdENvZGVXaXRoQXJpdHlDaGVjaywgJm51bVBhcmFtZXRlcnMpOwot
fQotCi0jaWYgRU5BQkxFKERGR19KSVQpCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBl
PgotaW5saW5lIENvbXBpbGF0aW9uUmVzdWx0IHJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRD
b2RlKAotICAgIFBhc3NSZWZQdHI8REZHOjpQbGFuPiBwYXNzZWRQbGFuLCBSZWZQdHI8Q29kZUJs
b2NrVHlwZT4mIHNpbmssIFJlZlB0cjxKSVRDb2RlPiYgaml0Q29kZSwKLSAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIqIGppdENvZGVXaXRoQXJpdHlDaGVjaywgaW50KiBudW1QYXJhbWV0ZXJzKQot
ewotICAgIFJlZlB0cjxERkc6OlBsYW4+IHBsYW4gPSBwYXNzZWRQbGFuOwotICAgIENvbXBpbGF0
aW9uUmVzdWx0IHJlc3VsdCA9IERGRzo6dHJ5RmluYWxpemVQbGFuKHBsYW4sIGppdENvZGUsIGpp
dENvZGVXaXRoQXJpdHlDaGVjayk7Ci0gICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgewot
ICAgICAgICBkYXRhTG9nKAotICAgICAgICAgICAgIkRlZmVycmVkIG9wdGltaXppbmcgY29tcGls
YXRpb24gIiwgKnBsYW4tPmtleSgpLCAiIC0+ICIsICpwbGFuLT5jb2RlQmxvY2ssCi0gICAgICAg
ICAgICAiIHJlc3VsdDogIiwgcmVzdWx0LCAiXG4iKTsKLSAgICB9Ci0gICAgaWYgKHJlc3VsdCA9
PSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpCi0gICAgICAgIHBsYW4tPmNvZGVCbG9jay0+YWx0ZXJu
YXRpdmUoKS0+dW5saW5rSW5jb21pbmdDYWxscygpOwotICAgIHJldHVybiBpbnN0YWxsT3B0aW1p
emVkQ29kZSgKLSAgICAgICAgcmVzdWx0LCBzaW5rLCBzdGF0aWNfY2FzdDxDb2RlQmxvY2tUeXBl
Kj4ocGxhbi0+Y29kZUJsb2NrLmdldCgpKSwgaml0Q29kZSwKLSAgICAgICAgaml0Q29kZVdpdGhB
cml0eUNoZWNrID8gKmppdENvZGVXaXRoQXJpdHlDaGVjayA6IE1hY3JvQXNzZW1ibGVyQ29kZVB0
cigpLAotICAgICAgICBudW1QYXJhbWV0ZXJzKTsKLX0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBFeGVjdXRpb25IYXJuZXNzX2gK
LQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>209834</attachid>
            <date>2013-08-27 18:53:43 -0700</date>
            <delta_ts>2013-08-27 19:43:38 -0700</delta_ts>
            <desc>almost compiles</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>105782</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTQ2MzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtODYsOCArODYsNiBAQAogCQkwRjFFM0E0NjE1MzRDQkFG
MDAwRjk0NTYgLyogREZHQXJndW1lbnRQb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRTNBNDMxNTM0Q0JBRDAwMEY5NDU2IC8qIERGR0Fy
Z3VtZW50UG9zaXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjFFM0E0NzE1MzRDQkI5MDAwRjk0NTYgLyogREZHRG91YmxlRm9ybWF0U3Rh
dGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUUz
QTQ0MTUzNENCQUQwMDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMUUzQTY3MTUzQTIxRTIw
MDBGOTQ1NiAvKiBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFFM0E2NTE1M0EyMURGMDAwRjk0NTYgLyog
REZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07Ci0JCTBGMjFDMjY4MTRCRTVGNjgwMEFEQzY0QiAvKiBKSVREcml2
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjFD
MjY2MTRCRTVGNUUwMEFEQzY0QiAvKiBKSVREcml2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjIxQzI3QzE0QkU3Mjc2MDBBREM2NEIgLyog
RXhlY3V0aW9uSGFybmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyMUMyN0ExNEJFNzI3MzAwQURDNjRCIC8qIEV4ZWN1dGlvbkhhcm5lc3MuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjIxQzI3
RDE0QkU3MjdBMDBBREM2NEIgLyogQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMUMyNzkxNEJFNzI3MzAwQURD
NjRCIC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjIxQzI3RjE0QkVBQTgyMDBBREM2NEIgLyogQnl0
ZWNvZGVDb252ZW50aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyMUMyN0UxNEJFQUE4MDAwQURDNjRCIC8qIEJ5dGVjb2RlQ29udmVudGlvbnMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjIz
NUJEMTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMQ0FyZ3VtZW50R2V0dGVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjM1QkJCMTcxNzhFMUMwMDY5
MEM3RiAvKiBGVExDQXJndW1lbnRHZXR0ZXIuY3BwICovOyB9OwpAQCAtMzQ3LDYgKzM0NSwxMCBA
QAogCQkwRkMwOTc5MjE0NkE2RjczMDBDRjI0NDIgLyogREZHT1NSRXhpdENvbXBpbGVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzA5NzhGMTQ2
QTZGNjMwMENGMjQ0MiAvKiBERkdPU1JFeGl0Q29tcGlsZXIuY3BwICovOyB9OwogCQkwRkMwOTdB
MTE0NkIyOENBMDBDRjI0NDIgLyogREZHVGh1bmtzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzA5NzlGMTQ2QjI4QzcwMENGMjQ0MiAvKiBERkdU
aHVua3MuY3BwICovOyB9OwogCQkwRkMwOTdBMjE0NkIyOENDMDBDRjI0NDIgLyogREZHVGh1bmtz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkMwOTdB
MDE0NkIyOEM3MDBDRjI0NDIgLyogREZHVGh1bmtzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZDNzEyREUxN0NEODc3OTAwOENDOTNDIC8qIERl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM3MTJEQzE3Q0Q4Nzc4MDA4Q0M5M0MgLyogRGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrLmNwcCAqLzsgfTsKKwkJMEZDNzEyREYxN0NEODc3QzAwOENDOTND
IC8qIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDNzEyREQxN0NEODc3ODAwOENDOTNDIC8qIERlZmVy
cmVkQ29tcGlsYXRpb25DYWxsYmFjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTBGQzcxMkUyMTdDRDg3OTEwMDhDQzkzQyAvKiBKSVRUb0RGR0Rl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM3MTJFMDE3Q0Q4NzhGMDA4Q0M5M0MgLyogSklUVG9ERkdE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwICovOyB9OworCQkwRkM3MTJFMzE3Q0Q4Nzkz
MDA4Q0M5M0MgLyogSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzcxMkUxMTdDRDg3OEYw
MDhDQzkzQyAvKiBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQzgxNTBBMTQwNDNC
RjUwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM4MTUwOTE0MDQzQkQyMDBDRkE2MDMgLyogV3Jp
dGVCYXJyaWVyU3VwcG9ydC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGQzgxNTBCMTQwNDNDMEUwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBw
b3J0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
QzgxNTA4MTQwNDNCQ0EwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCAqLzsgfTsK
IAkJMEZDODE1MTUxNDA1MTE5QjAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM4MTUxNDE0MDUxMThEMDBD
RkE2MDMgLyogVlRhYmxlU3BlY3RydW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtMTI0Myw5ICsxMjQ1LDcgQEAKIAkJMEYxRTNBNDQxNTM0Q0JB
RDAwMEY5NDU2IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERGR0RvdWJsZUZvcm1hdFN0YXRlLmg7IHBhdGggPSBkZmcvREZHRG91Ymxl
Rm9ybWF0U3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxRTNBNTAxNTM3
QzJDQjAwMEY5NDU2IC8qIERGR1Nsb3dQYXRoR2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR1Nsb3dQYXRoR2VuZXJhdG9yLmg7IHBhdGggPSBkZmcvREZHU2xv
d1BhdGhHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxRTNBNjUx
NTNBMjFERjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oOyBwYXRo
ID0gZGZnL0RGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMEYyMUMyNjYxNEJFNUY1RTAwQURDNjRCIC8qIEpJVERyaXZlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVREcml2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEYyMUMyNzkxNEJFNzI3MzAwQURDNjRCIC8qIENvZGVTcGVjaWFsaXphdGlv
bktpbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZVNwZWNpYWxpemF0
aW9uS2luZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjIxQzI3QTE0QkU3Mjcz
MDBBREM2NEIgLyogRXhlY3V0aW9uSGFybmVzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBFeGVjdXRpb25IYXJuZXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGMjFDMjdFMTRCRUFBODAwMEFEQzY0QiAvKiBCeXRlY29kZUNvbnZlbnRpb25zLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5dGVjb2RlQ29udmVudGlvbnMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyMzVCQkIxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTENB
cmd1bWVudEdldHRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBG
VExDQXJndW1lbnRHZXR0ZXIuY3BwOyBwYXRoID0gZnRsL0ZUTENBcmd1bWVudEdldHRlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjM1QkJDMTcxNzhFMUMwMDY5MEM3RiAv
KiBGVExDQXJndW1lbnRHZXR0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
RlRMQ0FyZ3VtZW50R2V0dGVyLmg7IHBhdGggPSBmdGwvRlRMQ0FyZ3VtZW50R2V0dGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTE0LDYgKzE1MTQsMTAgQEAKIAkJMEZDMDk3
OEYxNDZBNkY2MzAwQ0YyNDQyIC8qIERGR09TUkV4aXRDb21waWxlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdPU1JFeGl0Q29tcGlsZXIuY3BwOyBwYXRoID0g
ZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGQzA5NzlGMTQ2QjI4QzcwMENGMjQ0MiAvKiBERkdUaHVua3MuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHVGh1bmtzLmNwcDsgcGF0aCA9IGRmZy9ERkdUaHVu
a3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkMwOTdBMDE0NkIyOEM3MDBD
RjI0NDIgLyogREZHVGh1bmtzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R1RodW5rcy5oOyBwYXRoID0gZGZnL0RGR1RodW5rcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkM3MTJEQzE3Q0Q4Nzc4MDA4Q0M5M0MgLyogRGVmZXJyZWRDb21waWxhdGlvbkNh
bGxiYWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFj
ay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQzcxMkREMTdDRDg3NzgwMDhD
QzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGQzcxMkUwMTdDRDg3OEYwMDhDQzkzQyAvKiBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25D
YWxsYmFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQzcxMkUxMTdD
RDg3OEYwMDhDQzkzQyAvKiBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkM4MTUwODE0MDQzQkNBMDBDRkE2MDMgLyogV3Jp
dGVCYXJyaWVyU3VwcG9ydC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXcml0ZUJhcnJpZXJTdXBwb3J0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZDODE1MDkxNDA0M0JEMjAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV3JpdGVCYXJyaWVyU3VwcG9ydC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkM4MTUxMjE0MDUxMTg2MDBDRkE2MDMgLyogVlRhYmxl
U3BlY3RydW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVlRhYmxl
U3BlY3RydW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjYzNiw3ICsyNjQw
LDYgQEAKIAkJCQkwRjA3NzZCRDE0RkYwMDI4MDAxMDIzMzIgLyogSklUQ29tcGlsYXRpb25FZmZv
cnQuaCAqLywKIAkJCQkwRkFGN0VGQTE2NUJBOTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVy
LmNwcCAqLywKIAkJCQkwRkFGN0VGQjE2NUJBOTE5MDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVy
LmggKi8sCi0JCQkJMEYyMUMyNjYxNEJFNUY1RTAwQURDNjRCIC8qIEpJVERyaXZlci5oICovLAog
CQkJCTBGNDY4MDdGMTRCQTU3MjcwMEJGRTI3MiAvKiBKSVRFeGNlcHRpb25zLmNwcCAqLywKIAkJ
CQkwRjQ2ODA4MDE0QkE1NzI3MDBCRkUyNzIgLyogSklURXhjZXB0aW9ucy5oICovLAogCQkJCTg2
Q0M4NUEwMEVFNzlBNDcwMDI4ODY4MiAvKiBKSVRJbmxpbmVzLmggKi8sCkBAIC0yNjU4LDYgKzI2
NjEsOCBAQAogCQkJCUE3QTRBRTBDMTc5NzNCNEQwMDU2MTJCMSAvKiBKSVRTdHVic1g4NkNvbW1v
bi5oICovLAogCQkJCTBGNUVGOTFCMTY4NzhGNzgwMDNFNUMyNSAvKiBKSVRUaHVua3MuY3BwICov
LAogCQkJCTBGNUVGOTFDMTY4NzhGNzgwMDNFNUMyNSAvKiBKSVRUaHVua3MuaCAqLywKKwkJCQkw
RkM3MTJFMDE3Q0Q4NzhGMDA4Q0M5M0MgLyogSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2Fs
bGJhY2suY3BwICovLAorCQkJCTBGQzcxMkUxMTdDRDg3OEYwMDhDQzkzQyAvKiBKSVRUb0RGR0Rl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oICovLAogCQkJCUE3NkY1NEEyMTNCMjhBQUIwMEVG
MkJDRSAvKiBKSVRXcml0ZUJhcnJpZXIuaCAqLywKIAkJCQlBNzZDNTE3NDExODI3NDhEMDA3MTVC
MDUgLyogSlNJbnRlcmZhY2VKSVQuaCAqLywKIAkJCQkwRjc2NkQzMjE1QUUyNTM1MDA4RjM2M0Ug
LyogSnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludC5jcHAgKi8sCkBAIC0zMDQwLDcgKzMwNDUsNiBA
QAogCQkJCUE3MjcwMUIzMERBREU5NDkwMEU1NDhENyAvKiBFeGNlcHRpb25IZWxwZXJzLmggKi8s
CiAJCQkJODZDQTAzMkQxMDM4RTg0NDAwMjhBNjA5IC8qIEV4ZWN1dGFibGUuY3BwICovLAogCQkJ
CTg2Q0FGRUUyMTAzNURERTYwMDI4QTYwOSAvKiBFeGVjdXRhYmxlLmggKi8sCi0JCQkJMEYyMUMy
N0ExNEJFNzI3MzAwQURDNjRCIC8qIEV4ZWN1dGlvbkhhcm5lc3MuaCAqLywKIAkJCQlBN0E4QUYy
OTE3QURCNUYzMDA1QUIxNzQgLyogRmxvYXQzMkFycmF5LmggKi8sCiAJCQkJQTdBOEFGMkExN0FE
QjVGMzAwNUFCMTc0IC8qIEZsb2F0NjRBcnJheS5oICovLAogCQkJCUJDMjY4MEMwMEUxNkQ0RTkw
MEEwNkU5MiAvKiBGdW5jdGlvbkNvbnN0cnVjdG9yLmNwcCAqLywKQEAgLTM2NDgsNiArMzY1Miw4
IEBACiAJCQkJMEY4Rjk0M0YxNjY3NjMyRDAwRDYxOTcxIC8qIENvZGVUeXBlLmNwcCAqLywKIAkJ
CQkwRjBCODNBNTE0QkNGNTA0MDA4ODVCNEYgLyogQ29kZVR5cGUuaCAqLywKIAkJCQkwRjQyNkE0
QTE0NjBDRDZCMDAxMzFGOEYgLyogRGF0YUZvcm1hdC5oICovLAorCQkJCTBGQzcxMkRDMTdDRDg3
NzgwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwICovLAorCQkJCTBG
QzcxMkREMTdDRDg3NzgwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAq
LywKIAkJCQkwRkJDMEFFNDE0OTZDN0MxMDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuY3BwICov
LAogCQkJCTBGQkMwQUU1MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5oICovLAog
CQkJCTk2OUEwNzkyMEVEMUQzQUUwMEYxRjY4MSAvKiBFdmFsQ29kZUNhY2hlLmggKi8sCkBAIC0z
Nzk2LDYgKzM4MDIsNyBAQAogCQkJCTVERTZFNUIzMEUxNzI4RUMwMDE4MDQwNyAvKiBjcmVhdGVf
aGFzaF90YWJsZSBpbiBIZWFkZXJzICovLAogCQkJCTBGNDI2QTRCMTQ2MENENkUwMDEzMUY4RiAv
KiBEYXRhRm9ybWF0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZERjE3QjZCNUFCMDBBN0FF
M0YgLyogRGF0YVZpZXcuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQzcxMkRGMTdDRDg3N0MwMDhD
QzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDRDIwMzRBMEUxNzEzNUUwMDJDN0U4MiAvKiBEYXRlQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTQxMzU5Q0YzMEZERDg5QUQwMDIwNjE4MCAvKiBEYXRlQ29udmVyc2lvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxMTY2MDIwRTE5OTdCNDAwODA2NkREIC8qIERhdGVJbnN0YW5j
ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zOTM3LDcgKzM5NDQsNiBAQAogCQkJCTg2Q0FGRUUzMTAz
NURERTYwMDI4QTYwOSAvKiBFeGVjdXRhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzY2QjQ0
RjBFRThEQ0QxMDA5NTE4Q0EgLyogRXhlY3V0YWJsZUFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY1NkExRDMxNTAwMEYzNTAwMjk5MkIxIC8qIEV4ZWN1dGlvbkNvdW50ZXIuaCBpbiBI
ZWFkZXJzICovLAotCQkJCTBGMjFDMjdDMTRCRTcyNzYwMEFEQzY0QiAvKiBFeGVjdXRpb25IYXJu
ZXNzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkIxMDU4NjE2NzU0ODEyMDBGOEFCNkUgLyogRXhp
dEtpbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEI4M0FCMTRCQ0Y1QkIwMDg4NUI0RiAvKiBF
eHByZXNzaW9uUmFuZ2VJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4QUYzODE3QURCNUYz
MDA1QUIxNzQgLyogRmxvYXQzMkFycmF5LmggaW4gSGVhZGVycyAqLywKQEAgLTQwMjYsNyArNDAz
Miw2IEBACiAJCQkJODZDQ0VGREUwRjQxM0Y4OTAwRkQ3RjlFIC8qIEpJVENvZGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMDc3NkJGMTRGRjAwMkIwMDEwMjMzMiAvKiBKSVRDb21waWxhdGlvbkVm
Zm9ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZBRjdFRkUxNjVCQTkxRjAwMEM4NDU1IC8qIEpJ
VERpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEYyMUMyNjgxNEJFNUY2ODAwQURD
NjRCIC8qIEpJVERyaXZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0NjgwODIxNEJBNTcyRDAw
QkZFMjcyIC8qIEpJVEV4Y2VwdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2Q0M4NUExMEVF
NzlBNDcwMDI4ODY4MiAvKiBKSVRJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NjA2MjY5
NjBGQjhFQzAyMDA5Nzk4QUIgLyogSklUU3R1YkNhbGwuaCBpbiBIZWFkZXJzICovLApAQCAtNDA5
Niw2ICs0MTAxLDcgQEAKIAkJCQlCQzE4QzQyNDBFMTZGNUNEMDBCMzQ0NjAgLyogSlNPYmplY3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDI1MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU09iamVj
dFJlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcyODBBMjgxMTU1N0UzMDAwRDU2OTU3IC8qIEpT
T2JqZWN0UmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZDNzEyRTMxN0NEODc5MzAw
OENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBN0Y5OTM1RjBGRDczMjUxMDBBMEIyRDAgLyogSlNPTk9iamVjdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkM4N0NEQjkxMDcxMkFENDAwMDYxNENGIC8qIEpTT05PYmplY3QubHV0
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NTM0QUFGQjBFNUI3QTk2MDBCOEE0NUIgLyogSlNQcm9m
aWxlclByaXZhdGUuaCBpbiBIZWFkZXJzICovLApAQCAtNTAwOSw2ICs1MDE1LDcgQEAKIAkJCQkw
RkUyMjhFRTE0MzZBQjJDMDAxOTZDNDggLyogT3B0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxNDhGMjFCQzEwN0VDNTREMDA0MkVDMkMgLyogUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTkzMDUyQzM0MEZCNzkyMTkwMDQ4RkRDMyAvKiBQYXJzZXJBcmVuYS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRkM3MTJFMjE3Q0Q4NzkxMDA4Q0M5M0MgLyogSklUVG9ERkdEZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5RkM4QzMxNEUxQjVG
RTAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEY5ODIwNjAxNkJGRTM4MTAwMjQwRDAyIC8qIFByZWNpc2VKdW1wVGFyZ2V0cy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk5NTc0MkY2NTBERDExRjVBMDAwOTE3RkIgLyogUHJvZmlsZS5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTUwODcsNiArNTA5NCw3IEBACiAJCQkJMTRFODRGOUUxNEVFMUFD
QzAwRDZENUQ0IC8qIFdlYWtCbG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEY3MjU2NTE0
RUUyNjVFMDBCMTY1MkIgLyogV2Vha0hhbmRsZU93bmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0RTg0RkEwMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrU2V0LmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTBGQzcxMkRFMTdDRDg3NzkwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2RTVDMTkxNzI0QUYzRDAwNUM1NzRGIC8qIFdl
YktpdExMVk1MaWJyYXJ5QW5jaG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzgxNTBCMTQw
NDNDMEUwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE3RTVBQjNBMTc5OUU0QjIwMEQyODMzRCAvKiBYODZEaXNhc3NlbWJsZXIuY3BwIGluIFNv
dXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkocmV2aXNpb24gMTU0NjMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNs
dWRlICJDYWxsTGlua1N0YXR1cy5oIgogI2luY2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5oIgogI2lu
Y2x1ZGUgIkRGR0NvbW1vbi5oIgorI2luY2x1ZGUgIkRGR0RyaXZlci5oIgogI2luY2x1ZGUgIkRG
R05vZGUuaCIKICNpbmNsdWRlICJERkdSZXBhdGNoLmgiCiAjaW5jbHVkZSAiREZHV29ya2xpc3Qu
aCIKQEAgLTQ1LDYgKzQ2LDcgQEAKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAjaW5jbHVkZSAi
SlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTTmFtZVNjb3BlLmgiCisjaW5jbHVkZSAiTExJbnRF
bnRyeXBvaW50cy5oIgogI2luY2x1ZGUgIkxvd0xldmVsSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRl
ICJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oIgpAQCAt
MjY4OSw2ICsyNjkxLDU5IEBAIHZvaWQgQ29kZUJsb2NrOjpjb3B5UG9zdFBhcnNlRGF0YUZyb21B
bHQKICAgICBjb3B5UG9zdFBhcnNlRGF0YUZyb20obV9hbHRlcm5hdGl2ZS5nZXQoKSk7CiB9CiAK
K0NvbXBpbGF0aW9uUmVzdWx0IENvZGVCbG9jazo6cHJlcGFyZUZvckV4ZWN1dGlvbigKKyAgICBF
eGVjU3RhdGUqIGV4ZWMsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSwgSklUQ29tcGlsYXRpb25F
ZmZvcnQgZWZmb3J0LAorICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIFBhc3NSZWZQdHI8RGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPiBjYWxsYmFjaykKK3sKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgIAorICAgIGlmIChqaXRUeXBlID09IEpJVENvZGU6OkludGVycHJldGVyVGh1
bmspIHsKKyAgICAgICAgc3dpdGNoIChjb2RlVHlwZSgpKSB7CisgICAgICAgIGNhc2UgR2xvYmFs
Q29kZToKKyAgICAgICAgICAgIExMSW50OjpzZXRQcm9ncmFtRW50cnlwb2ludCh2bSwgc3RhdGlj
X2Nhc3Q8UHJvZ3JhbUNvZGVCbG9jayo+KHRoaXMpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEV2YWxDb2RlOgorICAgICAgICAgICAgTExJbnQ6OnNldEV2YWxFbnRyeXBvaW50
KHZtLCBzdGF0aWNfY2FzdDxFdmFsQ29kZUJsb2NrKj4odGhpcykpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgRnVuY3Rpb25Db2RlOgorICAgICAgICAgICAgTExJbnQ6OnNldEZ1
bmN0aW9uRW50cnlwb2ludCh2bSwgc3RhdGljX2Nhc3Q8RnVuY3Rpb25Db2RlQmxvY2sqPih0aGlz
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gQ29tcGls
YXRpb25TdWNjZXNzZnVsOworICAgIH0KKyAgICAKKyNpZiBFTkFCTEUoSklUKQorICAgIGlmIChK
SVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSkpIHsKKyAgICAgICAgQVNTRVJUKGVmZm9y
dCA9PSBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgICAgICBDb21waWxhdGlvblJlc3VsdCBy
ZXN1bHQgPSBERkc6OnRyeUNvbXBpbGUoZXhlYywgdGhpcywgYnl0ZWNvZGVJbmRleCwgY2FsbGJh
Y2spOworICAgICAgICBBU1NFUlQocmVzdWx0ICE9IENvbXBpbGF0aW9uRGVmZXJyZWQgfHwgY2Fs
bGJhY2spOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIgaml0Q29kZVdpdGhBcml0eUNoZWNrOworICAgIFJlZlB0cjxKSVRDb2Rl
PiBqaXRDb2RlID0gSklUOjpjb21waWxlKCZ2bSwgdGhpcywgZWZmb3J0LCAmaml0Q29kZVdpdGhB
cml0eUNoZWNrKTsKKyAgICBpZiAoIWppdENvZGUpCisgICAgICAgIHJldHVybiBDb21waWxhdGlv
bkZhaWxlZDsKKyAgICBzZXRKSVRDb2RlKGppdENvZGUsIGppdENvZGVXaXRoQXJpdHlDaGVjayk7
CisgICAgcmV0dXJuIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDsKKyNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKGVmZm9ydCk7CisgICAgVU5VU0VEX1BBUkFNKGJ5dGVjb2RlSW5kZXgpOworICAgIFVOVVNF
RF9QQVJBTShjYWxsYmFjayk7CisgICAgcmV0dXJuIENvbXBpbGF0aW9uRmFpbGVkOworI2VuZGlm
IC8vIEVOQUJMRShKSVQpCit9CisKK3ZvaWQgQ29kZUJsb2NrOjppbnN0YWxsKCkKK3sKKyAgICBv
d25lckV4ZWN1dGFibGUoKS0+aW5zdGFsbENvZGUodGhpcyk7Cit9CisKK1Bhc3NSZWZQdHI8Q29k
ZUJsb2NrPiBDb2RlQmxvY2s6Om5ld1JlcGxhY2VtZW50KCkKK3sKKyAgICByZXR1cm4gb3duZXJF
eGVjdXRhYmxlKCktPm5ld1JlcGxhY2VtZW50Q29kZUJsb2NrRm9yKHNwZWNpYWxpemF0aW9uS2lu
ZCgpKTsKK30KKwogI2lmIEVOQUJMRShKSVQpCiB2b2lkIENvZGVCbG9jazo6cmVvcHRpbWl6ZSgp
CiB7CkBAIC0yNzE1LDUzICsyNzcwLDYgQEAgQ29kZUJsb2NrKiBGdW5jdGlvbkNvZGVCbG9jazo6
cmVwbGFjZW1lbgogICAgIHJldHVybiAmc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4o
b3duZXJFeGVjdXRhYmxlKCkpLT5nZW5lcmF0ZWRCeXRlY29kZUZvcihtX2lzQ29uc3RydWN0b3Ig
PyBDb2RlRm9yQ29uc3RydWN0IDogQ29kZUZvckNhbGwpOwogfQogCi0jaWYgRU5BQkxFKERGR19K
SVQpCi1KU09iamVjdCogUHJvZ3JhbUNvZGVCbG9jazo6Y29tcGlsZU9wdGltaXplZChFeGVjU3Rh
dGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCBDb21waWxhdGlvblJlc3VsdCYgcmVzdWx0LCB1bnNp
Z25lZCBieXRlY29kZUluZGV4KQotewotICAgIGlmIChKSVRDb2RlOjppc0hpZ2hlclRpZXIocmVw
bGFjZW1lbnQoKS0+aml0VHlwZSgpLCBqaXRUeXBlKCkpKSB7Ci0gICAgICAgIHJlc3VsdCA9IENv
bXBpbGF0aW9uTm90TmVlZGVkOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgSlNPYmpl
Y3QqIGVycm9yID0gc3RhdGljX2Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFi
bGUoKSktPmNvbXBpbGVPcHRpbWl6ZWQoZXhlYywgc2NvcGUsIHJlc3VsdCwgYnl0ZWNvZGVJbmRl
eCk7Ci0gICAgcmV0dXJuIGVycm9yOwotfQotCi1Db21waWxhdGlvblJlc3VsdCBQcm9ncmFtQ29k
ZUJsb2NrOjpyZXBsYWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZShQYXNzUmVmUHRyPERGRzo6
UGxhbj4gcGxhbikKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUq
Pihvd25lckV4ZWN1dGFibGUoKSktPnJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlKHBs
YW4pOwotfQotCi1KU09iamVjdCogRXZhbENvZGVCbG9jazo6Y29tcGlsZU9wdGltaXplZChFeGVj
U3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCBDb21waWxhdGlvblJlc3VsdCYgcmVzdWx0LCB1
bnNpZ25lZCBieXRlY29kZUluZGV4KQotewotICAgIGlmIChKSVRDb2RlOjppc0hpZ2hlclRpZXIo
cmVwbGFjZW1lbnQoKS0+aml0VHlwZSgpLCBqaXRUeXBlKCkpKSB7Ci0gICAgICAgIHJlc3VsdCA9
IENvbXBpbGF0aW9uTm90TmVlZGVkOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgSlNP
YmplY3QqIGVycm9yID0gc3RhdGljX2Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFi
bGUoKSktPmNvbXBpbGVPcHRpbWl6ZWQoZXhlYywgc2NvcGUsIHJlc3VsdCwgYnl0ZWNvZGVJbmRl
eCk7Ci0gICAgcmV0dXJuIGVycm9yOwotfQotCi1Db21waWxhdGlvblJlc3VsdCBFdmFsQ29kZUJs
b2NrOjpyZXBsYWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZShQYXNzUmVmUHRyPERGRzo6UGxh
bj4gcGxhbikKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihvd25l
ckV4ZWN1dGFibGUoKSktPnJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlKHBsYW4pOwot
fQotCi1KU09iamVjdCogRnVuY3Rpb25Db2RlQmxvY2s6OmNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0
YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSwgQ29tcGlsYXRpb25SZXN1bHQmIHJlc3VsdCwgdW5z
aWduZWQgYnl0ZWNvZGVJbmRleCkKLXsKLSAgICBpZiAoSklUQ29kZTo6aXNIaWdoZXJUaWVyKHJl
cGxhY2VtZW50KCktPmppdFR5cGUoKSwgaml0VHlwZSgpKSkgewotICAgICAgICByZXN1bHQgPSBD
b21waWxhdGlvbk5vdE5lZWRlZDsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIEpTT2Jq
ZWN0KiBlcnJvciA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0
YWJsZSgpKS0+Y29tcGlsZU9wdGltaXplZEZvcihleGVjLCBzY29wZSwgcmVzdWx0LCBieXRlY29k
ZUluZGV4LCBtX2lzQ29uc3RydWN0b3IgPyBDb2RlRm9yQ29uc3RydWN0IDogQ29kZUZvckNhbGwp
OwotICAgIHJldHVybiBlcnJvcjsKLX0KLQotQ29tcGlsYXRpb25SZXN1bHQgRnVuY3Rpb25Db2Rl
QmxvY2s6OnJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlKFBhc3NSZWZQdHI8REZHOjpQ
bGFuPiBwbGFuKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUq
Pihvd25lckV4ZWN1dGFibGUoKSktPnJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlRm9y
KHBsYW4sIG1faXNDb25zdHJ1Y3RvciA/IENvZGVGb3JDb25zdHJ1Y3QgOiBDb2RlRm9yQ2FsbCk7
Ci19Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0KIERGRzo6Q2FwYWJpbGl0eUxldmVsIFBy
b2dyYW1Db2RlQmxvY2s6OmNhcGFiaWxpdHlMZXZlbEludGVybmFsKCkKIHsKICAgICByZXR1cm4g
REZHOjpwcm9ncmFtQ2FwYWJpbGl0eUxldmVsKHRoaXMpOwpAQCAtMjgwNCwyNyArMjgxMiw2IEBA
IHZvaWQgRnVuY3Rpb25Db2RlQmxvY2s6OmpldHRpc29uSW1wbCgpCiB7CiAgICAgc3RhdGljX2Nh
c3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5qZXR0aXNvbk9wdGlt
aXplZENvZGVGb3IoKnZtKCksIG1faXNDb25zdHJ1Y3RvciA/IENvZGVGb3JDb25zdHJ1Y3QgOiBD
b2RlRm9yQ2FsbCk7CiB9Ci0KLUNvbXBpbGF0aW9uUmVzdWx0IFByb2dyYW1Db2RlQmxvY2s6Ompp
dENvbXBpbGVJbXBsKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBBU1NFUlQoaml0VHlwZSgpID09
IEpJVENvZGU6OkludGVycHJldGVyVGh1bmspOwotICAgIEFTU0VSVCh0aGlzID09IHJlcGxhY2Vt
ZW50KCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KG93bmVy
RXhlY3V0YWJsZSgpKS0+aml0Q29tcGlsZShleGVjKTsKLX0KLQotQ29tcGlsYXRpb25SZXN1bHQg
RXZhbENvZGVCbG9jazo6aml0Q29tcGlsZUltcGwoRXhlY1N0YXRlKiBleGVjKQotewotICAgIEFT
U0VSVChqaXRUeXBlKCkgPT0gSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuayk7Ci0gICAgQVNTRVJU
KHRoaXMgPT0gcmVwbGFjZW1lbnQoKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEV2YWxFeGVj
dXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5qaXRDb21waWxlKGV4ZWMpOwotfQotCi1Db21w
aWxhdGlvblJlc3VsdCBGdW5jdGlvbkNvZGVCbG9jazo6aml0Q29tcGlsZUltcGwoRXhlY1N0YXRl
KiBleGVjKQotewotICAgIEFTU0VSVChqaXRUeXBlKCkgPT0gSklUQ29kZTo6SW50ZXJwcmV0ZXJU
aHVuayk7Ci0gICAgQVNTRVJUKHRoaXMgPT0gcmVwbGFjZW1lbnQoKSk7Ci0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+aml0Q29t
cGlsZUZvcihleGVjLCBtX2lzQ29uc3RydWN0b3IgPyBDb2RlRm9yQ29uc3RydWN0IDogQ29kZUZv
ckNhbGwpOwotfQogI2VuZGlmCiAKIEpTR2xvYmFsT2JqZWN0KiBDb2RlQmxvY2s6Omdsb2JhbE9i
amVjdEZvcihDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxNTQ2MzIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYg
KzQ4LDcgQEAKICNpbmNsdWRlICJERkdPU1JFbnRyeS5oIgogI2luY2x1ZGUgIkRGR09TUkV4aXQu
aCIKICNpbmNsdWRlICJERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmgiCisjaW5jbHVkZSAiRGVmZXJy
ZWRDb21waWxhdGlvbkNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiRXZhbENvZGVDYWNoZS5oIgogI2lu
Y2x1ZGUgIkV4ZWN1dGlvbkNvdW50ZXIuaCIKICNpbmNsdWRlICJFeHByZXNzaW9uUmFuZ2VJbmZv
LmgiCkBAIC0yOTAsMTkgKzI5MSwxOSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4g
aml0VHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUOwogICAgIH0KLSNpZiBFTkFCTEUoREZH
X0pJVCkKLSAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSos
IEpTU2NvcGUqLCBDb21waWxhdGlvblJlc3VsdCYsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpID0g
MDsKLSAgICB2aXJ0dWFsIENvbXBpbGF0aW9uUmVzdWx0IHJlcGxhY2VXaXRoRGVmZXJyZWRPcHRp
bWl6ZWRDb2RlKFBhc3NSZWZQdHI8REZHOjpQbGFuPikgPSAwOwotI2VuZGlmIC8vIEVOQUJMRShE
RkdfSklUKQogICAgIHZvaWQgamV0dGlzb24oKTsKLSAgICBDb21waWxhdGlvblJlc3VsdCBqaXRD
b21waWxlKEV4ZWNTdGF0ZSogZXhlYykKLSAgICB7Ci0gICAgICAgIGlmIChqaXRUeXBlKCkgIT0g
SklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykgewotICAgICAgICAgICAgQVNTRVJUKGppdFR5cGUo
KSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7Ci0gICAgICAgICAgICByZXR1cm4gQ29tcGlsYXRp
b25Ob3ROZWVkZWQ7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGppdENvbXBpbGVJbXBsKGV4
ZWMpOwotICAgIH0KKyAgICBDb21waWxhdGlvblJlc3VsdCBwcmVwYXJlRm9yRXhlY3V0aW9uKAor
ICAgICAgICBFeGVjU3RhdGUqLCBKSVRDb2RlOjpKSVRUeXBlLAorICAgICAgICBKSVRDb21waWxh
dGlvbkVmZm9ydCA9IEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQsCisgICAgICAgIHVuc2lnbmVk
IGJ5dGVjb2RlSW5kZXggPSBVSU5UX01BWCwKKyAgICAgICAgUGFzc1JlZlB0cjxEZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2s+ID0gMCk7CisgICAgCisgICAgLy8gRXhhY3RseSBlcXVpdmFsZW50
IHRvIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmluc3RhbGxDb2RlKGNvZGVCbG9jayk7
CisgICAgdm9pZCBpbnN0YWxsKCk7CisgICAgCisgICAgLy8gRXhhY3RseSBlcXVpdmFsZW50IHRv
IGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPm5ld1JlcGxhY2VtZW50Q29kZUJsb2NrRm9y
KGNvZGVCbG9jay0+c3BlY2lhbGl6YXRpb25LaW5kKCkpCisgICAgUGFzc1JlZlB0cjxDb2RlQmxv
Y2s+IG5ld1JlcGxhY2VtZW50KCk7CisgICAgCiAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxh
Y2VtZW50KCkgPSAwOwogCiAgICAgdmlydHVhbCBERkc6OkNhcGFiaWxpdHlMZXZlbCBjYXBhYmls
aXR5TGV2ZWxJbnRlcm5hbCgpID0gMDsKQEAgLTk2OSw3ICs5NzAsNiBAQCBwdWJsaWM6CiAgICAg
CiBwcm90ZWN0ZWQ6CiAjaWYgRU5BQkxFKEpJVCkKLSAgICB2aXJ0dWFsIENvbXBpbGF0aW9uUmVz
dWx0IGppdENvbXBpbGVJbXBsKEV4ZWNTdGF0ZSopID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgamV0
dGlzb25JbXBsKCkgPSAwOwogI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIHZpc2l0V2Vha1JlZmVy
ZW5jZXMoU2xvdFZpc2l0b3ImKTsKQEAgLTExOTQsMTMgKzExOTQsNyBAQCBwdWJsaWM6CiAKICNp
ZiBFTkFCTEUoSklUKQogcHJvdGVjdGVkOgotI2lmIEVOQUJMRShERkdfSklUKQotICAgIHZpcnR1
YWwgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgSlNTY29wZSosIENvbXBp
bGF0aW9uUmVzdWx0JiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7Ci0gICAgdmlydHVhbCBDb21w
aWxhdGlvblJlc3VsdCByZXBsYWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZShQYXNzUmVmUHRy
PERGRzo6UGxhbj4pOwotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotCiAgICAgdmlydHVhbCB2
b2lkIGpldHRpc29uSW1wbCgpOwotICAgIHZpcnR1YWwgQ29tcGlsYXRpb25SZXN1bHQgaml0Q29t
cGlsZUltcGwoRXhlY1N0YXRlKik7CiAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50
KCk7CiAgICAgdmlydHVhbCBERkc6OkNhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWxJbnRl
cm5hbCgpOwogI2VuZGlmCkBAIC0xMjIzLDEzICsxMjE3LDcgQEAgcHVibGljOgogICAgIAogI2lm
IEVOQUJMRShKSVQpCiBwcm90ZWN0ZWQ6Ci0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgdmlydHVh
bCBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBKU1Njb3BlKiwgQ29tcGls
YXRpb25SZXN1bHQmLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKLSAgICB2aXJ0dWFsIENvbXBp
bGF0aW9uUmVzdWx0IHJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlKFBhc3NSZWZQdHI8
REZHOjpQbGFuPik7Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0KICAgICB2aXJ0dWFsIHZv
aWQgamV0dGlzb25JbXBsKCk7Ci0gICAgdmlydHVhbCBDb21waWxhdGlvblJlc3VsdCBqaXRDb21w
aWxlSW1wbChFeGVjU3RhdGUqKTsKICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQo
KTsKICAgICB2aXJ0dWFsIERGRzo6Q2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbEludGVy
bmFsKCk7CiAjZW5kaWYKQEAgLTEyNTIsMTMgKzEyNDAsNyBAQCBwdWJsaWM6CiAgICAgCiAjaWYg
RU5BQkxFKEpJVCkKIHByb3RlY3RlZDoKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICB2aXJ0dWFs
IEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBDb21waWxh
dGlvblJlc3VsdCYsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwotICAgIHZpcnR1YWwgQ29tcGls
YXRpb25SZXN1bHQgcmVwbGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGUoUGFzc1JlZlB0cjxE
Rkc6OlBsYW4+KTsKLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLQogICAgIHZpcnR1YWwgdm9p
ZCBqZXR0aXNvbkltcGwoKTsKLSAgICB2aXJ0dWFsIENvbXBpbGF0aW9uUmVzdWx0IGppdENvbXBp
bGVJbXBsKEV4ZWNTdGF0ZSopOwogICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVudCgp
OwogICAgIHZpcnR1YWwgREZHOjpDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsSW50ZXJu
YWwoKTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlZmVy
cmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVmZXJyZWRDb21waWxhdGlv
bkNhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6RGVmZXJyZWRDb21waWxhdGlvbkNh
bGxiYWNrKCkgeyB9CitEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6On5EZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2soKSB7IH0KKworfSAvLyBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWZlcnJlZENvbXBpbGF0aW9uQ2Fs
bGJhY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9E
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrX2gKKyNkZWZpbmUgRGVmZXJyZWRDb21waWxh
dGlvbkNhbGxiYWNrX2gKKworI2luY2x1ZGUgIkNvbXBpbGF0aW9uUmVzdWx0LmgiCisjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvZGVCbG9j
azsKKworY2xhc3MgRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrIDogcHVibGljIFJlZkNvdW50
ZWQ8RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPiB7CitwdWJsaWM6CisgICAgRGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrKCk7CisgICAgdmlydHVhbCB+RGVmZXJyZWRDb21waWxhdGlvbkNh
bGxiYWNrKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgY29tcGlsYXRpb25EaWRDb21wbGV0ZShDb2Rl
QmxvY2sqLCBDb21waWxhdGlvblJlc3VsdCkgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlND
CisKKyNlbmRpZiAvLyBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2tfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lvbiAxNTQ2MzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU1LDcgKzU1LDcgQEAgdW5zaWduZWQgZ2V0TnVtQ29tcGlsYXRpb25zKCkKICAgICByZXR1cm4g
bnVtQ29tcGlsYXRpb25zOwogfQogCi1zdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZShD
b21waWxlTW9kZSBjb21waWxlTW9kZSwgRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgUmVmUHRyPEpTQzo6SklUQ29kZT4mIGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciogaml0Q29kZVdpdGhBcml0eUNoZWNrLCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgp
CitDb21waWxhdGlvblJlc3VsdCB0cnlDb21waWxlKEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgUGFzc1JlZlB0cjxE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+IGNhbGxiYWNrKQogewogICAgIFNhbXBsaW5nUmVn
aW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgQ29tcGlsYXRpb24gKERyaXZlcikiKTsKICAgICAKQEAg
LTk5LDEyICs5OSwxMiBAQCBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZShDb21waWxl
CiAgICAgZWxzZQogICAgICAgICBudW1WYXJzV2l0aFZhbHVlcyA9IDA7CiAgICAgUmVmUHRyPFBs
YW4+IHBsYW4gPSBhZG9wdFJlZigKLSAgICAgICAgbmV3IFBsYW4oY29tcGlsZU1vZGUsIGNvZGVC
bG9jaywgb3NyRW50cnlCeXRlY29kZUluZGV4LCBudW1WYXJzV2l0aFZhbHVlcykpOworICAgICAg
ICBuZXcgUGxhbihjb2RlQmxvY2ssIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgbnVtVmFyc1dpdGhW
YWx1ZXMpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBsYW4tPm11c3RIYW5kbGVWYWx1
ZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgaW50IG9wZXJhbmQgPSBwbGFuLT5tdXN0SGFuZGxl
VmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKICAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50
KG9wZXJhbmQpCiAgICAgICAgICAgICAmJiAhb3BlcmFuZFRvQXJndW1lbnQob3BlcmFuZCkKLSAg
ICAgICAgICAgICYmIGNvbXBpbGVNb2RlID09IENvbXBpbGVGdW5jdGlvbgorICAgICAgICAgICAg
JiYgY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZQogICAgICAgICAgICAgJiYg
Y29kZUJsb2NrLT5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2RlRm9yQ29uc3RydWN0KSB7CiAg
ICAgICAgICAgICAvLyBVZ2guIElmIHdlJ3JlIGluIGEgY29uc3RydWN0b3IsIHRoZSAndGhpcycg
YXJndW1lbnQgbWF5IGhvbGQgZ2FyYmFnZS4gSXQgd2lsbAogICAgICAgICAgICAgLy8gYWxzbyBu
ZXZlciBiZSB1c2VkLiBJdCBkb2Vzbid0IG1hdHRlciB3aGF0IHdlIHB1dCBpbnRvIHRoZSB2YWx1
ZSBmb3IgdGhpcywKQEAgLTExNSw3ICsxMTUsOCBAQCBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQg
Y29tcGlsZShDb21waWxlCiAgICAgICAgICAgICBwbGFuLT5tdXN0SGFuZGxlVmFsdWVzW2ldID0g
ZXhlYy0+dW5jaGVja2VkUihvcGVyYW5kKS5qc1ZhbHVlKCk7CiAgICAgfQogICAgIAotICAgIGlm
IChlbmFibGVDb25jdXJyZW50SklUKCkpIHsKKyAgICBpZiAoZW5hYmxlQ29uY3VycmVudEpJVCgp
ICYmIGNhbGxiYWNrKSB7CisgICAgICAgIHBsYW4tPmNhbGxiYWNrID0gY2FsbGJhY2s7CiAgICAg
ICAgIGlmICghdm0ud29ya2xpc3QpCiAgICAgICAgICAgICB2bS53b3JrbGlzdCA9IGdsb2JhbFdv
cmtsaXN0KCk7CiAgICAgICAgIGlmIChsb2dDb21waWxhdGlvbkNoYW5nZXMoKSkKQEAgLTEyNSwy
MiArMTI2LDcgQEAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGUoQ29tcGlsZQogICAg
IH0KICAgICAKICAgICBwbGFuLT5jb21waWxlSW5UaHJlYWQoKnZtLmRmZ1N0YXRlKTsKLSAgICBy
ZXR1cm4gcGxhbi0+ZmluYWxpemUoaml0Q29kZSwgaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKLX0K
LQotQ29tcGlsYXRpb25SZXN1bHQgdHJ5Q29tcGlsZShFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9j
ayogY29kZUJsb2NrLCBSZWZQdHI8SlNDOjpKSVRDb2RlPiYgaml0Q29kZSwgdW5zaWduZWQgYnl0
ZWNvZGVJbmRleCkKLXsKLSAgICByZXR1cm4gY29tcGlsZShDb21waWxlT3RoZXIsIGV4ZWMsIGNv
ZGVCbG9jaywgaml0Q29kZSwgMCwgYnl0ZWNvZGVJbmRleCk7Ci19Ci0KLUNvbXBpbGF0aW9uUmVz
dWx0IHRyeUNvbXBpbGVGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJs
b2NrLCBSZWZQdHI8SlNDOjpKSVRDb2RlPiYgaml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
JiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAg
cmV0dXJuIGNvbXBpbGUoQ29tcGlsZUZ1bmN0aW9uLCBleGVjLCBjb2RlQmxvY2ssIGppdENvZGUs
ICZqaXRDb2RlV2l0aEFyaXR5Q2hlY2ssIGJ5dGVjb2RlSW5kZXgpOwotfQotCi1Db21waWxhdGlv
blJlc3VsdCB0cnlGaW5hbGl6ZVBsYW4oUGFzc1JlZlB0cjxQbGFuPiBwbGFuLCBSZWZQdHI8SlND
OjpKSVRDb2RlPiYgaml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKiBqaXRDb2RlV2l0aEFy
aXR5Q2hlY2spCi17Ci0gICAgcmV0dXJuIHBsYW4tPmZpbmFsaXplKGppdENvZGUsIGppdENvZGVX
aXRoQXJpdHlDaGVjayk7CisgICAgcmV0dXJuIHBsYW4tPmZpbmFsaXplV2l0aG91dE5vdGlmeWlu
Z0NhbGxiYWNrKCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuaAkocmV2aXNpb24gMTU0NjMyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTcg
KzQyLDkgQEAgbmFtZXNwYWNlIERGRyB7CiBKU19FWFBPUlRfUFJJVkFURSB1bnNpZ25lZCBnZXRO
dW1Db21waWxhdGlvbnMoKTsKIAogI2lmIEVOQUJMRShERkdfSklUKQotQ29tcGlsYXRpb25SZXN1
bHQgdHJ5Q29tcGlsZShFeGVjU3RhdGUqLCBDb2RlQmxvY2sqLCBSZWZQdHI8SlNDOjpKSVRDb2Rl
PiYsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwotQ29tcGlsYXRpb25SZXN1bHQgdHJ5Q29tcGls
ZUZ1bmN0aW9uKEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIFJlZlB0cjxKU0M6OkpJVENvZGU+Jiwg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ssIHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXgpOwotQ29tcGlsYXRpb25SZXN1bHQgdHJ5RmluYWxpemVQbGFuKFBhc3NSZWZQ
dHI8UGxhbj4sIFJlZlB0cjxKU0M6OkpJVENvZGU+JiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKiBq
aXRDb2RlV2l0aEFyaXR5Q2hlY2spOworQ29tcGlsYXRpb25SZXN1bHQgdHJ5Q29tcGlsZShFeGVj
U3RhdGUqLCBDb2RlQmxvY2sqLCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIFBhc3NS
ZWZQdHI8RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPik7CiAjZWxzZQotaW5saW5lIENvbXBp
bGF0aW9uUmVzdWx0IHRyeUNvbXBpbGUoRXhlY1N0YXRlKiwgQ29kZUJsb2NrKiwgUmVmUHRyPEpT
Qzo6SklUQ29kZT4mLCB1bnNpZ25lZCkgeyByZXR1cm4gQ29tcGlsYXRpb25GYWlsZWQ7IH0KLWlu
bGluZSBDb21waWxhdGlvblJlc3VsdCB0cnlDb21waWxlRnVuY3Rpb24oRXhlY1N0YXRlKiwgQ29k
ZUJsb2NrKiwgUmVmUHRyPEpTQzo6SklUQ29kZT4mLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImLCB1
bnNpZ25lZCkgeyByZXR1cm4gQ29tcGlsYXRpb25GYWlsZWQ7IH0KLWlubGluZSBDb21waWxhdGlv
blJlc3VsdCB0cnlGaW5hbGl6ZVBsYW4oUGFzc1JlZlB0cjxQbGFuPiwgUmVmUHRyPEpTQzo6SklU
Q29kZT4mLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIqKQotewotICAgIFVOUkVBQ0hBQkxFX0ZPUl9Q
TEFURk9STSgpOwotICAgIHJldHVybiBDb21waWxhdGlvbkZhaWxlZDsKLX0KK2lubGluZSBDb21w
aWxhdGlvblJlc3VsdCB0cnlDb21waWxlKEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIHVuc2lnbmVk
LCBQYXNzUmVmUHRyPERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4pIHsgcmV0dXJuIENvbXBp
bGF0aW9uRmFpbGVkOyB9CiAjZW5kaWYKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGYWlsZWRGaW5hbGl6ZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmFpbGVkRmluYWxpemVyLmNw
cAkocmV2aXNpb24gMTU0NjMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGYWls
ZWRGaW5hbGl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMiArMzksMTIgQEAgRmFpbGVk
RmluYWxpemVyOjp+RmFpbGVkRmluYWxpemVyKCkKIHsKIH0KIAotYm9vbCBGYWlsZWRGaW5hbGl6
ZXI6OmZpbmFsaXplKFJlZlB0cjxKU0M6OkpJVENvZGU+JikKK2Jvb2wgRmFpbGVkRmluYWxpemVy
OjpmaW5hbGl6ZSgpCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEZhaWxlZEZpbmFs
aXplcjo6ZmluYWxpemVGdW5jdGlvbihSZWZQdHI8SlNDOjpKSVRDb2RlPiYsIE1hY3JvQXNzZW1i
bGVyQ29kZVB0ciYpCitib29sIEZhaWxlZEZpbmFsaXplcjo6ZmluYWxpemVGdW5jdGlvbigpCiB7
CiAgICAgcmV0dXJuIGZhbHNlOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGYWlsZWRGaW5hbGl6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0ZhaWxlZEZpbmFsaXplci5oCShyZXZpc2lvbiAxNTQ2MzIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0ZhaWxlZEZpbmFsaXplci5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
OSw4ICszOSw4IEBAIHB1YmxpYzoKICAgICBGYWlsZWRGaW5hbGl6ZXIoUGxhbiYpOwogICAgIHZp
cnR1YWwgfkZhaWxlZEZpbmFsaXplcigpOwogICAgIAotICAgIGJvb2wgZmluYWxpemUoUmVmUHRy
PEpTQzo6SklUQ29kZT4mIGVudHJ5KTsKLSAgICBib29sIGZpbmFsaXplRnVuY3Rpb24oUmVmUHRy
PEpTQzo6SklUQ29kZT4mIGVudHJ5LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIHdpdGhBcml0eUNo
ZWNrKTsKKyAgICBib29sIGZpbmFsaXplKCk7CisgICAgYm9vbCBmaW5hbGl6ZUZ1bmN0aW9uKCk7
CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0ZpbmFsaXplci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRmluYWxpemVyLmgJKHJldmlzaW9uIDE1NDYzMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRmluYWxpemVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDggKzQ2
LDggQEAgcHVibGljOgogICAgIEZpbmFsaXplcihQbGFuJik7CiAgICAgdmlydHVhbCB+RmluYWxp
emVyKCk7CiAgICAgCi0gICAgdmlydHVhbCBib29sIGZpbmFsaXplKFJlZlB0cjxKU0M6OkpJVENv
ZGU+JiBlbnRyeSkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBmaW5hbGl6ZUZ1bmN0aW9uKFJlZlB0
cjxKU0M6OkpJVENvZGU+JiBlbnRyeSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiB3aXRoQXJpdHlD
aGVjaykgPSAwOworICAgIHZpcnR1YWwgYm9vbCBmaW5hbGl6ZSgpID0gMDsKKyAgICB2aXJ0dWFs
IGJvb2wgZmluYWxpemVGdW5jdGlvbigpID0gMDsKIAogcHJvdGVjdGVkOgogICAgIFBsYW4mIG1f
cGxhbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklURmluYWxpemVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXpl
ci5jcHAJKHJldmlzaW9uIDE1NDYzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklURmluYWxpemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYg
RU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJERkdD
b21tb24uaCIKICNpbmNsdWRlICJERkdQbGFuLmgiCiAKQEAgLTQ1LDIzICs0NiwyMyBAQCBKSVRG
aW5hbGl6ZXI6On5KSVRGaW5hbGl6ZXIoKQogewogfQogCi1ib29sIEpJVEZpbmFsaXplcjo6Zmlu
YWxpemUoUmVmUHRyPEpTQzo6SklUQ29kZT4mIGVudHJ5KQorYm9vbCBKSVRGaW5hbGl6ZXI6OmZp
bmFsaXplKCkKIHsKICAgICBmaW5hbGl6ZUNvbW1vbigpOwogICAgIAogICAgIG1faml0Q29kZS0+
aW5pdGlhbGl6ZUNvZGVSZWYobV9saW5rQnVmZmVyLT5maW5hbGl6ZUNvZGVXaXRob3V0RGlzYXNz
ZW1ibHkoKSk7Ci0gICAgZW50cnkgPSBtX2ppdENvZGU7CisgICAgbV9wbGFuLmNvZGVCbG9jay0+
c2V0SklUQ29kZShtX2ppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpKTsKICAgICAKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplRnVuY3Rpb24o
UmVmUHRyPEpTQzo6SklUQ29kZT4mIGVudHJ5LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIHdpdGhB
cml0eUNoZWNrKQorYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplRnVuY3Rpb24oKQogewogICAg
IGZpbmFsaXplQ29tbW9uKCk7CiAgICAgCi0gICAgd2l0aEFyaXR5Q2hlY2sgPSBtX2xpbmtCdWZm
ZXItPmxvY2F0aW9uT2YobV9hcml0eUNoZWNrKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIg
d2l0aEFyaXR5Q2hlY2sgPSBtX2xpbmtCdWZmZXItPmxvY2F0aW9uT2YobV9hcml0eUNoZWNrKTsK
ICAgICBtX2ppdENvZGUtPmluaXRpYWxpemVDb2RlUmVmKG1fbGlua0J1ZmZlci0+ZmluYWxpemVD
b2RlV2l0aG91dERpc2Fzc2VtYmx5KCkpOwotICAgIGVudHJ5ID0gbV9qaXRDb2RlOworICAgIG1f
cGxhbi5jb2RlQmxvY2stPnNldEpJVENvZGUobV9qaXRDb2RlLCB3aXRoQXJpdHlDaGVjayk7CiAg
ICAgCiAgICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVEZpbmFsaXplci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklURmluYWxpemVyLmgJKHJldmlzaW9uIDE1NDYzMikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklURmluYWxpemVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDggKzQy
LDggQEAgcHVibGljOgogICAgIEpJVEZpbmFsaXplcihQbGFuJiwgUGFzc1JlZlB0cjxKSVRDb2Rl
PiwgUGFzc093blB0cjxMaW5rQnVmZmVyPiwgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGFyaXR5Q2hl
Y2sgPSBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwoKSk7CiAgICAgdmlydHVhbCB+SklURmluYWxpemVy
KCk7CiAgICAgCi0gICAgYm9vbCBmaW5hbGl6ZShSZWZQdHI8SlNDOjpKSVRDb2RlPiYgZW50cnkp
OwotICAgIGJvb2wgZmluYWxpemVGdW5jdGlvbihSZWZQdHI8SlNDOjpKSVRDb2RlPiYgZW50cnks
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgd2l0aEFyaXR5Q2hlY2spOworICAgIGJvb2wgZmluYWxp
emUoKTsKKyAgICBib29sIGZpbmFsaXplRnVuY3Rpb24oKTsKIAogcHJpdmF0ZToKICAgICB2b2lk
IGZpbmFsaXplQ29tbW9uKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXRQcmVwYXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0UHJlcGFyYXRpb24uY3BwCShyZXZpc2lvbiAxNTQ2MzIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRQcmVwYXJhdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1
ZGUgIkV4ZWN1dGFibGUuaCIKKyNpbmNsdWRlICJKSVRDb2RlLmgiCiAjaW5jbHVkZSAiT3BlcmF0
aW9ucy5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CkBAIC00Miw3ICs0Mywx
MiBAQCB2b2lkIHByZXBhcmVDb2RlT3JpZ2luRm9yT1NSRXhpdChFeGVjU3RhCiAgICAgICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gZXhlY3V0YWJsZS0+YmFzZWxpbmVDb2RlQmxvY2tGb3IoCiAg
ICAgICAgICAgICBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+aXNDYWxsID8gQ29kZUZvckNh
bGwgOiBDb2RlRm9yQ29uc3RydWN0KTsKICAgICAgICAgCi0gICAgICAgIGNvZGVCbG9jay0+aml0
Q29tcGlsZShleGVjKTsKKyAgICAgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpTQzo6
SklUQ29kZTo6QmFzZWxpbmVKSVQpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgQVNT
RVJUKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpTQzo6SklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVu
ayk7CisgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IGNvZGVCbG9jay0+cHJlcGFy
ZUZvckV4ZWN1dGlvbigKKyAgICAgICAgICAgIGV4ZWMsIEpTQzo6SklUQ29kZTo6QmFzZWxpbmVK
SVQsIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHJl
c3VsdCwgcmVzdWx0ID09IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bCk7CiAgICAgfQogfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9u
IDE1NDYzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEyODEsNyArMTI4MSw3IEBAIGlubGluZSBjaGFyKiBsaW5rRm9y
KEV4ZWNTdGF0ZSogZXhlY0NhbGwKICAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmdlbmVy
YXRlZEpJVENvZGVGb3Ioa2luZCktPmFkZHJlc3NGb3JDYWxsKCk7CiAgICAgZWxzZSB7CiAgICAg
ICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8
RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7Ci0gICAgICAgIEpTT2JqZWN0KiBlcnJv
ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29tcGlsZUZvcihleGVjQ2FsbGVlLCBjYWxsZWUtPnNj
b3BlKCksIGtpbmQpOworICAgICAgICBKU09iamVjdCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFi
bGUtPnByZXBhcmVGb3JFeGVjdXRpb24oZXhlY0NhbGxlZSwgY2FsbGVlLT5zY29wZSgpLCBraW5k
KTsKICAgICAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgICAgICB2bS0+ZXhjZXB0aW9uID0gY3Jl
YXRlU3RhY2tPdmVyZmxvd0Vycm9yKGV4ZWMpOwogICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93
UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwpAQCAtMTMyNiw3ICsx
MzI2LDcgQEAgaW5saW5lIGNoYXIqIHZpcnR1YWxGb3JXaXRoRnVuY3Rpb24oRXhlYwogICAgIEV4
ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0gZnVuY3Rpb24tPmV4ZWN1dGFibGUoKTsKICAgICBp
ZiAoVU5MSUtFTFkoIWV4ZWN1dGFibGUtPmhhc0pJVENvZGVGb3Ioa2luZCkpKSB7CiAgICAgICAg
IEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVu
Y3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7Ci0gICAgICAgIEpTT2JqZWN0KiBlcnJvciA9
IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29tcGlsZUZvcihleGVjQ2FsbGVlLCBmdW5jdGlvbi0+c2Nv
cGUoKSwga2luZCk7CisgICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IGZ1bmN0aW9uRXhlY3V0YWJs
ZS0+cHJlcGFyZUZvckV4ZWN1dGlvbihleGVjQ2FsbGVlLCBmdW5jdGlvbi0+c2NvcGUoKSwga2lu
ZCk7CiAgICAgICAgIGlmIChlcnJvcikgewogICAgICAgICAgICAgZXhlYy0+dm0oKS5leGNlcHRp
b24gPSBlcnJvcjsKICAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPih2
bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNv
ZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQbGFuLmNwcAkocmV2aXNpb24gMTU0NjMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsMTAgKzgwLDkgQEAgc3RhdGljIHZv
aWQgZHVtcEFuZFZlcmlmeUdyYXBoKEdyYXBoJiBncgogfQogCiBQbGFuOjpQbGFuKAotICAgIENv
bXBpbGVNb2RlIGNvbXBpbGVNb2RlLCBQYXNzUmVmUHRyPENvZGVCbG9jaz4gcGFzc2VkQ29kZUJs
b2NrLCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsCisgICAgUGFzc1JlZlB0cjxDb2Rl
QmxvY2s+IHBhc3NlZENvZGVCbG9jaywgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LAog
ICAgIHVuc2lnbmVkIG51bVZhcnNXaXRoVmFsdWVzKQotICAgIDogY29tcGlsZU1vZGUoY29tcGls
ZU1vZGUpCi0gICAgLCB2bSgqcGFzc2VkQ29kZUJsb2NrLT52bSgpKQorICAgIDogdm0oKnBhc3Nl
ZENvZGVCbG9jay0+dm0oKSkKICAgICAsIGNvZGVCbG9jayhwYXNzZWRDb2RlQmxvY2spCiAgICAg
LCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgob3NyRW50cnlCeXRlY29kZUluZGV4KQogICAgICwgbnVt
VmFyc1dpdGhWYWx1ZXMobnVtVmFyc1dpdGhWYWx1ZXMpCkBAIC0yMDgsNyArMjA3LDcgQEAgUGxh
bjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgogCiAjaWYgRU5BQkxFKEZUTF9K
SVQpCiAgICAgaWYgKE9wdGlvbnM6OnVzZUV4cGVyaW1lbnRhbEZUTCgpCi0gICAgICAgICYmIGNv
bXBpbGVNb2RlID09IENvbXBpbGVGdW5jdGlvbgorICAgICAgICAmJiBjb2RlQmxvY2stPmNvZGVU
eXBlKCkgPT0gRnVuY3Rpb25Db2RlCiAgICAgICAgICYmIEZUTDo6Y2FuQ29tcGlsZShkZmcpKSB7
CiAgICAgICAgIAogICAgICAgICBwZXJmb3JtQ3JpdGljYWxFZGdlQnJlYWtpbmcoZGZnKTsKQEAg
LTI1NSwxMiArMjU0LDEwIEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5U
aHIKICAgICBkdW1wQW5kVmVyaWZ5R3JhcGgoZGZnLCAiR3JhcGggYWZ0ZXIgb3B0aW1pemF0aW9u
OiIpOwogCiAgICAgSklUQ29tcGlsZXIgZGF0YUZsb3dKSVQoZGZnKTsKLSAgICBpZiAoY29tcGls
ZU1vZGUgPT0gQ29tcGlsZUZ1bmN0aW9uKSB7CisgICAgaWYgKGNvZGVCbG9jay0+Y29kZVR5cGUo
KSA9PSBGdW5jdGlvbkNvZGUpIHsKICAgICAgICAgZGF0YUZsb3dKSVQuY29tcGlsZUZ1bmN0aW9u
KCk7CiAgICAgICAgIGRhdGFGbG93SklULmxpbmtGdW5jdGlvbigpOwogICAgIH0gZWxzZSB7Ci0g
ICAgICAgIEFTU0VSVChjb21waWxlTW9kZSA9PSBDb21waWxlT3RoZXIpOwotICAgICAgICAKICAg
ICAgICAgZGF0YUZsb3dKSVQuY29tcGlsZSgpOwogICAgICAgICBkYXRhRmxvd0pJVC5saW5rKCk7
CiAgICAgfQpAQCAtMjgzLDI1ICsyODAsMzAgQEAgdm9pZCBQbGFuOjpyZWFsbHlBZGQoQ29tbW9u
RGF0YSogY29tbW9uRAogICAgIHdyaXRlQmFycmllcnMudHJpZ2dlcih2bSk7CiB9CiAKLUNvbXBp
bGF0aW9uUmVzdWx0IFBsYW46OmZpbmFsaXplKFJlZlB0cjxKU0M6OkpJVENvZGU+JiBqaXRDb2Rl
LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIqIGppdENvZGVXaXRoQXJpdHlDaGVjaykKK0NvbXBpbGF0
aW9uUmVzdWx0IFBsYW46OmZpbmFsaXplV2l0aG91dE5vdGlmeWluZ0NhbGxiYWNrKCkKIHsKICAg
ICBpZiAoIWlzU3RpbGxWYWxpZCgpKQogICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25JbnZhbGlk
YXRlZDsKICAgICAKICAgICBib29sIHJlc3VsdDsKLSAgICBpZiAoY29tcGlsZU1vZGUgPT0gQ29t
cGlsZUZ1bmN0aW9uKQotICAgICAgICByZXN1bHQgPSBmaW5hbGl6ZXItPmZpbmFsaXplRnVuY3Rp
b24oaml0Q29kZSwgKmppdENvZGVXaXRoQXJpdHlDaGVjayk7CisgICAgaWYgKGNvZGVCbG9jay0+
Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpCisgICAgICAgIHJlc3VsdCA9IGZpbmFsaXplci0+
ZmluYWxpemVGdW5jdGlvbigpOwogICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gZmluYWxpemVy
LT5maW5hbGl6ZShqaXRDb2RlKTsKKyAgICAgICAgcmVzdWx0ID0gZmluYWxpemVyLT5maW5hbGl6
ZSgpOwogICAgIAogICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25G
YWlsZWQ7CiAgICAgCi0gICAgcmVhbGx5QWRkKGppdENvZGUtPmRmZ0NvbW1vbigpKTsKKyAgICBy
ZWFsbHlBZGQoY29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZ0NvbW1vbigpKTsKICAgICAKICAgICBy
ZXR1cm4gQ29tcGlsYXRpb25TdWNjZXNzZnVsOwogfQogCit2b2lkIFBsYW46OmZpbmFsaXplQW5k
Tm90aWZ5Q2FsbGJhY2soKQoreworICAgIGNhbGxiYWNrLT5jb21waWxhdGlvbkRpZENvbXBsZXRl
KGNvZGVCbG9jay5nZXQoKSwgZmluYWxpemVXaXRob3V0Tm90aWZ5aW5nQ2FsbGJhY2soKSk7Cit9
CisKIENvZGVCbG9jayogUGxhbjo6a2V5KCkKIHsKICAgICByZXR1cm4gY29kZUJsb2NrLT5hbHRl
cm5hdGl2ZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJKHJldmlzaW9u
IDE1NDYzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiREZHRGVzaXJlZFdlYWtSZWZlcmVu
Y2VzLmgiCiAjaW5jbHVkZSAiREZHRGVzaXJlZFdyaXRlQmFycmllcnMuaCIKICNpbmNsdWRlICJE
RkdGaW5hbGl6ZXIuaCIKKyNpbmNsdWRlICJEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCIK
ICNpbmNsdWRlICJPcGVyYW5kcy5oIgogI2luY2x1ZGUgIlByb2ZpbGVyQ29tcGlsYXRpb24uaCIK
ICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KQEAgLTQ4LDIzICs0OSwyMSBA
QCBuYW1lc3BhY2UgREZHIHsKIAogY2xhc3MgTG9uZ0xpdmVkU3RhdGU7CiAKLWVudW0gQ29tcGls
ZU1vZGUgeyBDb21waWxlRnVuY3Rpb24sIENvbXBpbGVPdGhlciB9OwotCiAjaWYgRU5BQkxFKERG
R19KSVQpCiAKIHN0cnVjdCBQbGFuIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFBsYW4+
IHsKICAgICBQbGFuKAotICAgICAgICBDb21waWxlTW9kZSBjb21waWxlTW9kZSwgUGFzc1JlZlB0
cjxDb2RlQmxvY2s+IGNvZGVCbG9jaywKLSAgICAgICAgdW5zaWduZWQgb3NyRW50cnlCeXRlY29k
ZUluZGV4LCB1bnNpZ25lZCBudW1WYXJzV2l0aFZhbHVlcyk7CisgICAgICAgIFBhc3NSZWZQdHI8
Q29kZUJsb2NrPiBjb2RlQmxvY2ssIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwKKyAg
ICAgICAgdW5zaWduZWQgbnVtVmFyc1dpdGhWYWx1ZXMpOwogICAgIH5QbGFuKCk7CiAgICAgCiAg
ICAgdm9pZCBjb21waWxlSW5UaHJlYWQoTG9uZ0xpdmVkU3RhdGUmKTsKICAgICAKLSAgICBDb21w
aWxhdGlvblJlc3VsdCBmaW5hbGl6ZShSZWZQdHI8SlNDOjpKSVRDb2RlPiYgaml0Q29kZSwgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyKiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOworICAgIENvbXBpbGF0
aW9uUmVzdWx0IGZpbmFsaXplV2l0aG91dE5vdGlmeWluZ0NhbGxiYWNrKCk7CisgICAgdm9pZCBm
aW5hbGl6ZUFuZE5vdGlmeUNhbGxiYWNrKCk7CiAgICAgCiAgICAgQ29kZUJsb2NrKiBrZXkoKTsK
ICAgICAKLSAgICBjb25zdCBDb21waWxlTW9kZSBjb21waWxlTW9kZTsKICAgICBWTSYgdm07CiAg
ICAgUmVmUHRyPENvZGVCbG9jaz4gY29kZUJsb2NrOwogICAgIGNvbnN0IHVuc2lnbmVkIG9zckVu
dHJ5Qnl0ZWNvZGVJbmRleDsKQEAgLTg2LDYgKzg1LDggQEAgc3RydWN0IFBsYW4gOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZQogICAgIAogICAgIGJvb2wgaXNDb21waWxlZDsKIAorICAgIFJl
ZlB0cjxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+IGNhbGxiYWNrOworCiBwcml2YXRlOgog
ICAgIGVudW0gQ29tcGlsYXRpb25QYXRoIHsgRmFpbFBhdGgsIERGR1BhdGgsIEZUTFBhdGggfTsK
ICAgICBDb21waWxhdGlvblBhdGggY29tcGlsZUluVGhyZWFkSW1wbChMb25nTGl2ZWRTdGF0ZSYp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAJKHJldmlz
aW9uIDE1NDYzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNjUsMTAgKzE2NSw3IEBAIFdvcmtsaXN0OjpTdGF0ZSBXb3Jr
bGlzdDo6Y29tcGxldGVBbGxSZWEKICAgICAgICAgCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHBs
YW4tPmlzQ29tcGlsZWQpOwogICAgICAgICAKLSAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgY29t
cGlsYXRpb25SZXN1bHQgPQotICAgICAgICAgICAgcHJvZmlsZWRCbG9jay0+cmVwbGFjZVdpdGhE
ZWZlcnJlZE9wdGltaXplZENvZGUocGxhbik7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbXBp
bGF0aW9uUmVzdWx0ICE9IENvbXBpbGF0aW9uRGVmZXJyZWQpOwotICAgICAgICBwcm9maWxlZEJs
b2NrLT5zZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoY29t
cGlsYXRpb25SZXN1bHQpOworICAgICAgICBwbGFuLT5maW5hbGl6ZUFuZE5vdGlmeUNhbGxiYWNr
KCk7CiAgICAgICAgIAogICAgICAgICBpZiAocHJvZmlsZWRCbG9jayA9PSByZXF1ZXN0ZWRQcm9m
aWxlZEJsb2NrKQogICAgICAgICAgICAgcmVzdWx0aW5nU3RhdGUgPSBDb21waWxlZDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDE1NDYzMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMTg0LDYgKzE4NCw4
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBjb25zdCBKSVRTdHViUm91dGluZVNldCYgaml0
U3R1YlJvdXRpbmVzKCkgeyByZXR1cm4gbV9qaXRTdHViUm91dGluZXM7IH0KICAgICAgICAgCiAg
ICAgICAgIHZvaWQgYWRkUmVmZXJlbmNlKEpTQ2VsbCosIEFycmF5QnVmZmVyKik7CisgICAgICAg
IAorICAgICAgICBib29sIGlzRGVmZXJyZWQoKSBjb25zdCB7IHJldHVybiAhIW1fZGVmZXJyYWxE
ZXB0aDsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5kIGNsYXNzIENvZGVCbG9jazsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJl
dGVyLmNwcAkocmV2aXNpb24gMTU0NjMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODE3LDcgKzgxNyw3IEBA
IGZhaWxlZEpTT05QOgogICAgIGlmIChKU09iamVjdCogZXJyb3IgPSBwcm9ncmFtLT5pbml0aWFs
aXplR2xvYmFsUHJvcGVydGllcyh2bSwgY2FsbEZyYW1lLCBzY29wZSkpCiAgICAgICAgIHJldHVy
biBjaGVja2VkUmV0dXJuKHRocm93RXJyb3IoY2FsbEZyYW1lLCBlcnJvcikpOwogCi0gICAgaWYg
KEpTT2JqZWN0KiBlcnJvciA9IHByb2dyYW0tPmNvbXBpbGUoY2FsbEZyYW1lLCBzY29wZSkpCisg
ICAgaWYgKEpTT2JqZWN0KiBlcnJvciA9IHByb2dyYW0tPnByZXBhcmVGb3JFeGVjdXRpb24oY2Fs
bEZyYW1lLCBzY29wZSwgQ29kZUZvckNhbGwpKQogICAgICAgICByZXR1cm4gY2hlY2tlZFJldHVy
bih0aHJvd0Vycm9yKGNhbGxGcmFtZSwgZXJyb3IpKTsKIAogICAgIFByb2dyYW1Db2RlQmxvY2sq
IGNvZGVCbG9jayA9ICZwcm9ncmFtLT5nZW5lcmF0ZWRCeXRlY29kZSgpOwpAQCAtODg2LDcgKzg4
Niw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDYWxsKENhbGxGcmEKIAogICAgIGlm
IChpc0pTQ2FsbCkgewogICAgICAgICAvLyBDb21waWxlIHRoZSBjYWxsZWU6Ci0gICAgICAgIEpT
T2JqZWN0KiBjb21waWxlRXJyb3IgPSBjYWxsRGF0YS5qcy5mdW5jdGlvbkV4ZWN1dGFibGUtPmNv
bXBpbGVGb3JDYWxsKGNhbGxGcmFtZSwgc2NvcGUpOworICAgICAgICBKU09iamVjdCogY29tcGls
ZUVycm9yID0gY2FsbERhdGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0
aW9uKGNhbGxGcmFtZSwgc2NvcGUsIENvZGVGb3JDYWxsKTsKICAgICAgICAgaWYgKFVOTElLRUxZ
KCEhY29tcGlsZUVycm9yKSkgewogICAgICAgICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4odGhy
b3dFcnJvcihjYWxsRnJhbWUsIGNvbXBpbGVFcnJvcikpOwogICAgICAgICB9CkBAIC05NjUsNyAr
OTY1LDcgQEAgSlNPYmplY3QqIEludGVycHJldGVyOjpleGVjdXRlQ29uc3RydWN0KAogCiAgICAg
aWYgKGlzSlNDb25zdHJ1Y3QpIHsKICAgICAgICAgLy8gQ29tcGlsZSB0aGUgY2FsbGVlOgotICAg
ICAgICBKU09iamVjdCogY29tcGlsZUVycm9yID0gY29uc3RydWN0RGF0YS5qcy5mdW5jdGlvbkV4
ZWN1dGFibGUtPmNvbXBpbGVGb3JDb25zdHJ1Y3QoY2FsbEZyYW1lLCBzY29wZSk7CisgICAgICAg
IEpTT2JqZWN0KiBjb21waWxlRXJyb3IgPSBjb25zdHJ1Y3REYXRhLmpzLmZ1bmN0aW9uRXhlY3V0
YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbihjYWxsRnJhbWUsIHNjb3BlLCBDb2RlRm9yQ29uc3Ry
dWN0KTsKICAgICAgICAgaWYgKFVOTElLRUxZKCEhY29tcGlsZUVycm9yKSkgewogICAgICAgICAg
ICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4odGhyb3dFcnJvcihjYWxsRnJhbWUsIGNvbXBpbGVFcnJv
cikpOwogICAgICAgICB9CkBAIC0xMDM5LDcgKzEwMzksNyBAQCBDYWxsRnJhbWVDbG9zdXJlIElu
dGVycHJldGVyOjpwcmVwYXJlRm9yCiAgICAgfQogCiAgICAgLy8gQ29tcGlsZSB0aGUgY2FsbGVl
OgotICAgIEpTT2JqZWN0KiBlcnJvciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29tcGlsZUZvckNh
bGwoY2FsbEZyYW1lLCBzY29wZSk7CisgICAgSlNPYmplY3QqIGVycm9yID0gZnVuY3Rpb25FeGVj
dXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uKGNhbGxGcmFtZSwgc2NvcGUsIENvZGVGb3JDYWxs
KTsKICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgdGhyb3dFcnJvcihjYWxsRnJhbWUsIGVycm9y
KTsKICAgICAgICAgcmV0dXJuIENhbGxGcmFtZUNsb3N1cmUoKTsKQEAgLTExNTUsNyArMTE1NSw3
IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGUoRXZhbEV4ZWN1dGEKICAgICAgICAgfQog
ICAgIH0KIAotICAgIEpTT2JqZWN0KiBjb21waWxlRXJyb3IgPSBldmFsLT5jb21waWxlKGNhbGxG
cmFtZSwgc2NvcGUpOworICAgIEpTT2JqZWN0KiBjb21waWxlRXJyb3IgPSBldmFsLT5wcmVwYXJl
Rm9yRXhlY3V0aW9uKGNhbGxGcmFtZSwgc2NvcGUsIENvZGVGb3JDYWxsKTsKICAgICBpZiAoVU5M
SUtFTFkoISFjb21waWxlRXJyb3IpKQogICAgICAgICByZXR1cm4gY2hlY2tlZFJldHVybih0aHJv
d0Vycm9yKGNhbGxGcmFtZSwgY29tcGlsZUVycm9yKSk7CiAgICAgRXZhbENvZGVCbG9jayogY29k
ZUJsb2NrID0gJmV2YWwtPmdlbmVyYXRlZEJ5dGVjb2RlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVERyaXZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklURHJpdmVyLmgJKHJldmlzaW9uIDE1NDYzMikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklURHJpdmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTUzICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lm
bmRlZiBKSVREcml2ZXJfaAotI2RlZmluZSBKSVREcml2ZXJfaAotCi0jaW5jbHVkZSA8d3RmL1Bs
YXRmb3JtLmg+Ci0KLSNpZiBFTkFCTEUoSklUKQotCi0jaW5jbHVkZSAiQnl0ZWNvZGVHZW5lcmF0
b3IuaCIKLSNpbmNsdWRlICJDb21waWxhdGlvblJlc3VsdC5oIgotI2luY2x1ZGUgIkRGR0RyaXZl
ci5oIgotI2luY2x1ZGUgIkpJVC5oIgotI2luY2x1ZGUgIkxMSW50RW50cnlwb2ludHMuaCIKLQot
bmFtZXNwYWNlIEpTQyB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+Ci1pbmxp
bmUgQ29tcGlsYXRpb25SZXN1bHQgaml0Q29tcGlsZUlmQXBwcm9wcmlhdGVJbXBsKAotICAgIEV4
ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBSZWZQdHI8SklUQ29kZT4m
IGppdENvZGUsCi0gICAgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlLCB1bnNpZ25lZCBieXRlY29k
ZUluZGV4LCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCi17Ci0gICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKLSAgICAKLSAgICBpZiAoaml0VHlwZSA9PSBjb2RlQmxvY2stPmppdFR5cGUoKSkK
LSAgICAgICAgcmV0dXJuIENvbXBpbGF0aW9uTm90TmVlZGVkOwotICAgIAotICAgIGlmICghdm0u
Y2FuVXNlSklUKCkpCi0gICAgICAgIHJldHVybiBDb21waWxhdGlvbk5vdE5lZWRlZDsgLy8gRklY
TUU6IEludmVzdGlnYXRlIGlmIHRoaXMgaXMgcmlnaHQuIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMTYyNDYKLSAgICAKLSAgICBjb2RlQmxvY2stPnVubGlua0luY29t
aW5nQ2FsbHMoKTsKLSAgICAKLSAgICBSZWZQdHI8SklUQ29kZT4gb2xkSklUQ29kZSA9IGppdENv
ZGU7Ci0gICAgCi0gICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKSkgewot
ICAgICAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPQotICAgICAgICAgICAgREZHOjp0cnlD
b21waWxlKGV4ZWMsIGNvZGVCbG9jaywgaml0Q29kZSwgYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAg
IGlmIChyZXN1bHQgPT0gQ29tcGlsYXRpb25TdWNjZXNzZnVsKQotICAgICAgICAgICAgY29kZUJs
b2NrLT5hbHRlcm5hdGl2ZSgpLT51bmxpbmtJbmNvbWluZ0NhbGxzKCk7Ci0gICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgQVNTRVJUKG9sZEpJVENvZGUgPT0gaml0Q29kZSk7Ci0gICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgUmVmUHRy
PEpJVENvZGU+IHJlc3VsdCA9IEpJVDo6Y29tcGlsZSgmdm0sIGNvZGVCbG9jaywgZWZmb3J0KTsK
LSAgICAgICAgaWYgKHJlc3VsdCkKLSAgICAgICAgICAgIGppdENvZGUgPSByZXN1bHQ7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBDb21waWxhdGlvbkZhaWxlZDsKLSAgICB9Ci0g
ICAgCi0gICAgcmV0dXJuIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDsKLX0KLQotaW5saW5lIENvbXBp
bGF0aW9uUmVzdWx0IGppdENvbXBpbGVGdW5jdGlvbklmQXBwcm9wcmlhdGVJbXBsKAotICAgIEV4
ZWNTdGF0ZSogZXhlYywgRnVuY3Rpb25Db2RlQmxvY2sqIGNvZGVCbG9jaywgUmVmUHRyPEpJVENv
ZGU+JiBqaXRDb2RlLAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgaml0Q29kZVdpdGhBcml0
eUNoZWNrLCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUsCi0gICAgdW5zaWduZWQgYnl0ZWNvZGVJ
bmRleCwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQotewotICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7Ci0gICAgCi0gICAgaWYgKGppdFR5cGUgPT0gY29kZUJsb2NrLT5qaXRUeXBlKCkpCi0g
ICAgICAgIHJldHVybiBDb21waWxhdGlvbk5vdE5lZWRlZDsKLSAgICAKLSAgICBpZiAoIXZtLmNh
blVzZUpJVCgpKQotICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25Ob3ROZWVkZWQ7IC8vIEZJWE1F
OiBJbnZlc3RpZ2F0ZSBpZiB0aGlzIGlzIHJpZ2h0LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTE2MjQ2Ci0gICAgCi0gICAgY29kZUJsb2NrLT51bmxpbmtJbmNvbWlu
Z0NhbGxzKCk7Ci0gICAgCi0gICAgUmVmUHRyPEpJVENvZGU+IG9sZEpJVENvZGUgPSBqaXRDb2Rl
OwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBvbGRKSVRDb2RlV2l0aEFyaXR5Q2hlY2sgPSBq
aXRDb2RlV2l0aEFyaXR5Q2hlY2s7Ci0gICAgCi0gICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemlu
Z0pJVChqaXRUeXBlKSkgewotICAgICAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBERkc6
OnRyeUNvbXBpbGVGdW5jdGlvbigKLSAgICAgICAgICAgIGV4ZWMsIGNvZGVCbG9jaywgaml0Q29k
ZSwgaml0Q29kZVdpdGhBcml0eUNoZWNrLCBieXRlY29kZUluZGV4KTsKLSAgICAgICAgaWYgKHJl
c3VsdCA9PSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpCi0gICAgICAgICAgICBjb2RlQmxvY2stPmFs
dGVybmF0aXZlKCktPnVubGlua0luY29taW5nQ2FsbHMoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICBBU1NFUlQob2xkSklUQ29kZSA9PSBqaXRDb2RlKTsKLSAgICAgICAgICAgIEFTU0VS
VF9VTlVTRUQob2xkSklUQ29kZVdpdGhBcml0eUNoZWNrLCBvbGRKSVRDb2RlV2l0aEFyaXR5Q2hl
Y2sgPT0gaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBSZWZQdHI8SklUQ29kZT4gcmVzdWx0
ID0KLSAgICAgICAgICAgIEpJVDo6Y29tcGlsZSgmdm0sIGNvZGVCbG9jaywgZWZmb3J0LCAmaml0
Q29kZVdpdGhBcml0eUNoZWNrKTsKLSAgICAgICAgaWYgKHJlc3VsdCkKLSAgICAgICAgICAgIGpp
dENvZGUgPSByZXN1bHQ7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgQVNTRVJUX1VOVVNF
RChvbGRKSVRDb2RlV2l0aEFyaXR5Q2hlY2ssIG9sZEpJVENvZGVXaXRoQXJpdHlDaGVjayA9PSBq
aXRDb2RlV2l0aEFyaXR5Q2hlY2spOwotICAgICAgICAgICAgcmV0dXJuIENvbXBpbGF0aW9uRmFp
bGVkOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIENvbXBpbGF0aW9uU3VjY2Vzc2Z1
bDsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KLWlubGluZSBDb21waWxh
dGlvblJlc3VsdCBqaXRDb21waWxlSWZBcHByb3ByaWF0ZSgKLSAgICBFeGVjU3RhdGUqIGV4ZWMs
IENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgUmVmUHRyPEpJVENvZGU+JiBqaXRDb2RlLAotICAg
IEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgSklUQ29t
cGlsYXRpb25FZmZvcnQgZWZmb3J0KQotewotICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9
IGppdENvbXBpbGVJZkFwcHJvcHJpYXRlSW1wbCgKLSAgICAgICAgZXhlYywgY29kZUJsb2NrLCBq
aXRDb2RlLCBqaXRUeXBlLCBieXRlY29kZUluZGV4LCBlZmZvcnQpOwotICAgIGlmIChyZXN1bHQg
PT0gQ29tcGlsYXRpb25TdWNjZXNzZnVsKSB7Ci0gICAgICAgIGNvZGVCbG9jay0+c2V0SklUQ29k
ZShqaXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKSk7Ci0gICAgICAgIGNvZGVCbG9jay0+
dm0oKS0+aGVhcC5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qoaml0Q29kZS0+c2l6ZSgpKTsKLSAgICB9
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0gICAgCi0KLWlubGluZSBDb21waWxhdGlvblJlc3VsdCBq
aXRDb21waWxlRnVuY3Rpb25JZkFwcHJvcHJpYXRlKAotICAgIEV4ZWNTdGF0ZSogZXhlYywgRnVu
Y3Rpb25Db2RlQmxvY2sqIGNvZGVCbG9jaywgUmVmUHRyPEpJVENvZGU+JiBqaXRDb2RlLAotICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgaml0Q29kZVdpdGhBcml0eUNoZWNrLCBKSVRDb2RlOjpK
SVRUeXBlIGppdFR5cGUsCi0gICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgSklUQ29tcGlsYXRp
b25FZmZvcnQgZWZmb3J0KQotewotICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IGppdENv
bXBpbGVGdW5jdGlvbklmQXBwcm9wcmlhdGVJbXBsKAotICAgICAgICBleGVjLCBjb2RlQmxvY2ss
IGppdENvZGUsIGppdENvZGVXaXRoQXJpdHlDaGVjaywgaml0VHlwZSwgYnl0ZWNvZGVJbmRleCwg
ZWZmb3J0KTsKLSAgICBpZiAocmVzdWx0ID09IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bCkgewotICAg
ICAgICBjb2RlQmxvY2stPnNldEpJVENvZGUoaml0Q29kZSwgaml0Q29kZVdpdGhBcml0eUNoZWNr
KTsKLSAgICAgICAgY29kZUJsb2NrLT52bSgpLT5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29zdChq
aXRDb2RlLT5zaXplKCkpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi19IC8vIG5h
bWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEVOQUJMRShKSVQpCi0KLSNlbmRpZiAvLyBKSVREcml2
ZXJfaAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNp
b24gMTU0NjMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAKICNpbmNsdWRlIDx3dGYvSW5saW5lQVNNLmg+
CiAjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiSklURXhjZXB0aW9ucy5oIgorI2luY2x1ZGUg
IkpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiSlNBY3Rp
dmF0aW9uLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIK
QEAgLTEwMTksNyArMTAyMCw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wdGltaXpl
KQogICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQogICAgICAgICAgICAgZGF0YUxv
ZygiQ29uc2lkZXJpbmcgT1NSICIsICpjb2RlQmxvY2ssICIgLT4gIiwgKmNvZGVCbG9jay0+cmVw
bGFjZW1lbnQoKSwgIi5cbiIpOwogICAgICAgICAvLyBJZiB3ZSBoYXZlIGFuIG9wdGltaXplZCBy
ZXBsYWNlbWVudCwgdGhlbiBpdCBtdXN0IGJlIHRoZSBjYXNlIHRoYXQgd2UgZW50ZXJlZAotICAg
ICAgICAvLyBjdGlfb3B0aW1pemUgZnJvbSBhIGxvb3AuIFRoYXQncyBiZWNhdXNlIGlzIHRoZXJl
J3MgYW4gb3B0aW1pemVkIHJlcGxhY2VtZW50LAorICAgICAgICAvLyBjdGlfb3B0aW1pemUgZnJv
bSBhIGxvb3AuIFRoYXQncyBiZWNhdXNlIGlmIHRoZXJlJ3MgYW4gb3B0aW1pemVkIHJlcGxhY2Vt
ZW50LAogICAgICAgICAvLyB0aGVuIGFsbCBjYWxscyB0byB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUg
cmVsaW5rZWQgdG8gdGhlIHJlcGxhY2VtZW50IGFuZCBzbwogICAgICAgICAvLyB0aGUgcHJvbG9n
dWUgT1NSIHdpbGwgbmV2ZXIgZmlyZS4KICAgICAgICAgCkBAIC0xMDUzLDE4ICsxMDU0LDE5IEBA
IERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wdGltaXplKQogICAgICAgICBpZiAoT3B0aW9u
czo6dmVyYm9zZU9TUigpKQogICAgICAgICAgICAgZGF0YUxvZygiVHJpZ2dlcmluZyBvcHRpbWl6
ZWQgY29tcGlsYXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIlxuIik7CiAgICAgICAgIAotICAgICAg
ICBKU1Njb3BlKiBzY29wZSA9IGNhbGxGcmFtZS0+c2NvcGUoKTsKLSAgICAgICAgQ29tcGlsYXRp
b25SZXN1bHQgcmVzdWx0OwotICAgICAgICBKU09iamVjdCogZXJyb3IgPSBjb2RlQmxvY2stPmNv
bXBpbGVPcHRpbWl6ZWQoY2FsbEZyYW1lLCBzY29wZSwgcmVzdWx0LCBieXRlY29kZUluZGV4KTsK
LSAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgeworICAgICAgICBSZWZQdHI8RGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPiBjYWxsYmFjayA9IGFkb3B0UmVmKAorICAgICAgICAg
ICAgbmV3IEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrKCkpOworICAgICAgICBS
ZWZQdHI8Q29kZUJsb2NrPiBuZXdDb2RlQmxvY2sgPSBjb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50
KCk7CisgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IG5ld0NvZGVCbG9jay0+cHJl
cGFyZUZvckV4ZWN1dGlvbigKKyAgICAgICAgICAgIGNhbGxGcmFtZSwgSklUQ29kZTo6REZHSklU
LCBKSVRDb21waWxhdGlvbkNhbkZhaWwsIGJ5dGVjb2RlSW5kZXgsIGNhbGxiYWNrKTsKKyAgICAg
ICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKICAgICAgICAgICAgIGRhdGFMb2coIk9wdGlt
aXppbmcgY29tcGlsYXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIiByZXN1bHQ6ICIsIHJlc3VsdCwg
IlxuIik7Ci0gICAgICAgICAgICBpZiAoZXJyb3IpCi0gICAgICAgICAgICAgICAgZGF0YUxvZygi
V0FSTklORzogb3B0aW1pemVkIGNvbXBpbGF0aW9uIGZhaWxlZCB3aXRoIGEgSlMgZXJyb3IuXG4i
KTsKLSAgICAgICAgfQogICAgICAgICAKICAgICAgICAgY29kZUJsb2NrLT5zZXRPcHRpbWl6YXRp
b25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQocmVzdWx0KTsKICAgICAgICAgaWYg
KHJlc3VsdCAhPSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpCiAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIAorICAgICAgICBuZXdDb2RlQmxvY2stPmluc3RhbGwoKTsKICAgICB9CiAgICAgCiAg
ICAgQ29kZUJsb2NrKiBvcHRpbWl6ZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2stPnJlcGxhY2VtZW50
KCk7CkBAIC0xMTg5LDcgKzExOTEsNyBAQCBpbmxpbmUgdm9pZCogaml0Q29tcGlsZUZvcihDYWxs
RnJhbWUqIGNhCiAgICAgQVNTRVJUKCFmdW5jdGlvbi0+aXNIb3N0RnVuY3Rpb24oKSk7CiAgICAg
RnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gZnVuY3Rpb24tPmpzRXhlY3V0YWJsZSgp
OwogICAgIEpTU2NvcGUqIGNhbGxEYXRhU2NvcGVDaGFpbiA9IGZ1bmN0aW9uLT5zY29wZSgpOwot
ICAgIEpTT2JqZWN0KiBlcnJvciA9IGV4ZWN1dGFibGUtPmNvbXBpbGVGb3IoY2FsbEZyYW1lLCBj
YWxsRGF0YVNjb3BlQ2hhaW4sIGtpbmQpOworICAgIEpTT2JqZWN0KiBlcnJvciA9IGV4ZWN1dGFi
bGUtPnByZXBhcmVGb3JFeGVjdXRpb24oY2FsbEZyYW1lLCBjYWxsRGF0YVNjb3BlQ2hhaW4sIGtp
bmQpOwogICAgIGlmICghZXJyb3IpCiAgICAgICAgIHJldHVybiBmdW5jdGlvbjsKICAgICBjYWxs
RnJhbWUtPnZtKCkuZXhjZXB0aW9uID0gZXJyb3I7CkBAIC0xMjg4LDcgKzEyOTAsNyBAQCBpbmxp
bmUgdm9pZCogbGF6eUxpbmtGb3IoQ2FsbEZyYW1lKiBjYWxsCiAgICAgICAgIGNvZGVQdHIgPSBl
eGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yKGtpbmQpLT5hZGRyZXNzRm9yQ2FsbCgpOwog
ICAgIGVsc2UgewogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJs
ZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwotICAgICAg
ICBpZiAoSlNPYmplY3QqIGVycm9yID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5jb21waWxlRm9yKGNh
bGxGcmFtZSwgY2FsbGVlLT5zY29wZSgpLCBraW5kKSkgeworICAgICAgICBpZiAoSlNPYmplY3Qq
IGVycm9yID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uKGNhbGxGcmFt
ZSwgY2FsbGVlLT5zY29wZSgpLCBraW5kKSkgewogICAgICAgICAgICAgY2FsbEZyYW1lLT52bSgp
LmV4Y2VwdGlvbiA9IGVycm9yOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KQEAg
LTEzNjUsNyArMTM2Nyw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQqLCB2bV9sYXp5TGlu
a0MKICAgICAgICAgCiAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRh
YmxlID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwogICAgICAgICBK
U1Njb3BlKiBzY29wZUNoYWluID0gY2FsbGVlLT5zY29wZSgpOwotICAgICAgICBKU09iamVjdCog
ZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvbXBpbGVGb3IoY2FsbEZyYW1lLCBzY29wZUNo
YWluLCBDb2RlRm9yQ2FsbCk7CisgICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IGZ1bmN0aW9uRXhl
Y3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbihjYWxsRnJhbWUsIHNjb3BlQ2hhaW4sIENvZGVG
b3JDYWxsKTsKICAgICAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgICAgICBjYWxsRnJhbWUtPnZt
KCkuZXhjZXB0aW9uID0gZXJyb3I7CiAgICAgICAgICAgICByZXR1cm4gMDsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVG9ERkdEZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSklUVG9E
RkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCIKKworI2luY2x1ZGUgIkNvZGVCbG9jay5o
IgorI2luY2x1ZGUgIkV4ZWN1dGFibGUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0pJVFRvREZH
RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25D
YWxsYmFjaygpIHsgfQorSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6On5KSVRU
b0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaygpIHsgfQorCit2b2lkIEpJVFRvREZHRGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjb21waWxhdGlvbkRpZENvbXBsZXRlKAorICAgIENv
ZGVCbG9jayogY29kZUJsb2NrLCBDb21waWxhdGlvblJlc3VsdCByZXN1bHQpCit7CisgICAgQVNT
RVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVENvZGU6OkJhc2Vs
aW5lSklUKTsKKyAgICAKKyAgICBpZiAocmVzdWx0ID09IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bCkK
KyAgICAgICAgY29kZUJsb2NrLT5pbnN0YWxsKCk7CisgICAgCisgICAgY29kZUJsb2NrLT5hbHRl
cm5hdGl2ZSgpLT5zZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1
bHQocmVzdWx0KTsKK30KKworfSAvLyBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2Fs
bGJhY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVG9E
RkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2tfaAorI2RlZmluZSBKSVRU
b0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFja19oCisKKyNpbmNsdWRlICJEZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2suaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFNjcmlwdEV4
ZWN1dGFibGU7CisKK2NsYXNzIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrIDog
cHVibGljIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjayB7CitwdWJsaWM6CisgICAgSklUVG9E
RkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2soKTsKKyAgICB2aXJ0dWFsIH5KSVRUb0RGR0Rl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaygpOworCisgICAgdmlydHVhbCB2b2lkIGNvbXBpbGF0
aW9uRGlkQ29tcGxldGUoQ29kZUJsb2NrKiwgQ29tcGlsYXRpb25SZXN1bHQpOworfTsKKworfSAv
LyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25D
YWxsYmFja19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludEVudHJ5
cG9pbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJ
bnRFbnRyeXBvaW50cy5jcHAJKHJldmlzaW9uIDE1NDYzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludEVudHJ5cG9pbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsNjIgKzI4
LDc3IEBACiAKICNpZiBFTkFCTEUoTExJTlQpCiAKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNp
bmNsdWRlICJKSVRDb2RlLmgiCi0jaW5jbHVkZSAiVk0uaCIKICNpbmNsdWRlICJKU09iamVjdC5o
IgogI2luY2x1ZGUgIkxMSW50VGh1bmtzLmgiCiAjaW5jbHVkZSAiTG93TGV2ZWxJbnRlcnByZXRl
ci5oIgorI2luY2x1ZGUgIlZNLmgiCiAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBMTElu
dCB7CiAKLXZvaWQgZ2V0RnVuY3Rpb25FbnRyeXBvaW50KFZNJiB2bSwgQ29kZVNwZWNpYWxpemF0
aW9uS2luZCBraW5kLCBSZWZQdHI8SklUQ29kZT4mIGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciYgYXJpdHlDaGVjaykKK3ZvaWQgc2V0RnVuY3Rpb25FbnRyeXBvaW50KFZNJiB2bSwgRnVu
Y3Rpb25Db2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKKyAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5k
IGtpbmQgPSBjb2RlQmxvY2stPnNwZWNpYWxpemF0aW9uS2luZCgpOworICAgIAogICAgIGlmICgh
dm0uY2FuVXNlSklUKCkpIHsKICAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpIHsKLSAg
ICAgICAgICAgIGppdENvZGUgPSBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZShNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY6OmNyZWF0ZUxMSW50Q29kZVJlZihsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9w
cm9sb2d1ZSksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKTsKLSAgICAgICAgICAgIGFyaXR5
Q2hlY2sgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUxMSW50Q29kZVB0cihsbGludF9m
dW5jdGlvbl9mb3JfY2FsbF9hcml0eV9jaGVjayk7CisgICAgICAgICAgICBjb2RlQmxvY2stPnNl
dEpJVENvZGUoCisgICAgICAgICAgICAgICAgYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUoTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxpbnRfZnVuY3Rpb25fZm9y
X2NhbGxfcHJvbG9ndWUpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSksCisgICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVMTEludENvZGVQdHIobGxpbnRfZnVu
Y3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hlY2spKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCiAgICAgICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOwotICAgICAg
ICBqaXRDb2RlID0gYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUoTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9wcm9s
b2d1ZSksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKTsKLSAgICAgICAgYXJpdHlDaGVjayA9
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlTExJbnRDb2RlUHRyKGxsaW50X2Z1bmN0aW9u
X2Zvcl9jb25zdHJ1Y3RfYXJpdHlfY2hlY2spOworICAgICAgICBjb2RlQmxvY2stPnNldEpJVENv
ZGUoCisgICAgICAgICAgICBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZShNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY6OmNyZWF0ZUxMSW50Q29kZVJlZihsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0
X3Byb2xvZ3VlKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpLAorICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVMTEludENvZGVQdHIobGxpbnRfZnVuY3Rpb25fZm9y
X2NvbnN0cnVjdF9hcml0eV9jaGVjaykpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAog
I2lmIEVOQUJMRShKSVQpCiAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpIHsKLSAgICAgICAg
aml0Q29kZSA9IGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKHZtLmdldENUSVN0dWIoZnVuY3Rp
b25Gb3JDYWxsRW50cnlUaHVua0dlbmVyYXRvciksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmsp
KTsKLSAgICAgICAgYXJpdHlDaGVjayA9IHZtLmdldENUSVN0dWIoZnVuY3Rpb25Gb3JDYWxsQXJp
dHlDaGVja1RodW5rR2VuZXJhdG9yKS5jb2RlKCk7CisgICAgICAgIGNvZGVCbG9jay0+c2V0SklU
Q29kZSgKKyAgICAgICAgICAgIGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKHZtLmdldENUSVN0
dWIoZnVuY3Rpb25Gb3JDYWxsRW50cnlUaHVua0dlbmVyYXRvciksIEpJVENvZGU6OkludGVycHJl
dGVyVGh1bmspKSwKKyAgICAgICAgICAgIHZtLmdldENUSVN0dWIoZnVuY3Rpb25Gb3JDYWxsQXJp
dHlDaGVja1RodW5rR2VuZXJhdG9yKS5jb2RlKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CiAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7Ci0gICAgaml0Q29kZSA9IGFk
b3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKHZtLmdldENUSVN0dWIoZnVuY3Rpb25Gb3JDb25zdHJ1
Y3RFbnRyeVRodW5rR2VuZXJhdG9yKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpOwotICAg
IGFyaXR5Q2hlY2sgPSB2bS5nZXRDVElTdHViKGZ1bmN0aW9uRm9yQ29uc3RydWN0QXJpdHlDaGVj
a1RodW5rR2VuZXJhdG9yKS5jb2RlKCk7CisgICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKAorICAg
ICAgICBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZSh2bS5nZXRDVElTdHViKGZ1bmN0aW9uRm9y
Q29uc3RydWN0RW50cnlUaHVua0dlbmVyYXRvciksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmsp
KSwKKyAgICAgICAgdm0uZ2V0Q1RJU3R1YihmdW5jdGlvbkZvckNvbnN0cnVjdEFyaXR5Q2hlY2tU
aHVua0dlbmVyYXRvcikuY29kZSgpKTsKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogfQogCi12b2lk
IGdldEV2YWxFbnRyeXBvaW50KFZNJiB2bSwgUmVmUHRyPEpJVENvZGU+JiBqaXRDb2RlKQordm9p
ZCBzZXRFdmFsRW50cnlwb2ludChWTSYgdm0sIEV2YWxDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsK
ICAgICBpZiAoIXZtLmNhblVzZUpJVCgpKSB7Ci0gICAgICAgIGppdENvZGUgPSBhZG9wdFJlZihu
ZXcgRGlyZWN0SklUQ29kZShNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZUxMSW50Q29kZVJl
ZihsbGludF9ldmFsX3Byb2xvZ3VlKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpOworICAg
ICAgICBjb2RlQmxvY2stPnNldEpJVENvZGUoCisgICAgICAgICAgICBhZG9wdFJlZihuZXcgRGly
ZWN0SklUQ29kZShNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZUxMSW50Q29kZVJlZihsbGlu
dF9ldmFsX3Byb2xvZ3VlKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpLAorICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQotI2lm
IEVOQUJMRShKSVQpICAgIAotICAgIGppdENvZGUgPSBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29k
ZSh2bS5nZXRDVElTdHViKGV2YWxFbnRyeVRodW5rR2VuZXJhdG9yKSwgSklUQ29kZTo6SW50ZXJw
cmV0ZXJUaHVuaykpOworI2lmIEVOQUJMRShKSVQpCisgICAgY29kZUJsb2NrLT5zZXRKSVRDb2Rl
KAorICAgICAgICBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZSh2bS5nZXRDVElTdHViKGV2YWxF
bnRyeVRodW5rR2VuZXJhdG9yKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpLAorICAgICAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKSk7CiAjZW5kaWYKIH0KIAotdm9pZCBnZXRQcm9ncmFt
RW50cnlwb2ludChWTSYgdm0sIFJlZlB0cjxKSVRDb2RlPiYgaml0Q29kZSkKK3ZvaWQgc2V0UHJv
Z3JhbUVudHJ5cG9pbnQoVk0mIHZtLCBQcm9ncmFtQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAg
ICAgaWYgKCF2bS5jYW5Vc2VKSVQoKSkgewotICAgICAgICBqaXRDb2RlID0gYWRvcHRSZWYobmV3
IERpcmVjdEpJVENvZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYo
bGxpbnRfcHJvZ3JhbV9wcm9sb2d1ZSksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKTsKKyAg
ICAgICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKAorICAgICAgICAgICAgYWRvcHRSZWYobmV3IERp
cmVjdEpJVENvZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxp
bnRfcHJvZ3JhbV9wcm9sb2d1ZSksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSwKKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICNpZiBFTkFCTEUoSklUKQotICAgIGppdENvZGUgPSBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29k
ZSh2bS5nZXRDVElTdHViKHByb2dyYW1FbnRyeVRodW5rR2VuZXJhdG9yKSwgSklUQ29kZTo6SW50
ZXJwcmV0ZXJUaHVuaykpOworICAgIGNvZGVCbG9jay0+c2V0SklUQ29kZSgKKyAgICAgICAgYWRv
cHRSZWYobmV3IERpcmVjdEpJVENvZGUodm0uZ2V0Q1RJU3R1Yihwcm9ncmFtRW50cnlUaHVua0dl
bmVyYXRvciksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSwKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyKCkpOwogI2VuZGlmCiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludEVudHJ5cG9pbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50RW50cnlwb2ludHMuaAkocmV2aXNpb24gMTU0NjMyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RW50cnlwb2ludHMuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzcsNiArMzcsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEV2YWxDb2RlQmxvY2s7
CitjbGFzcyBGdW5jdGlvbkNvZGVCbG9jazsKIGNsYXNzIFZNOwogY2xhc3MgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyOwogY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOwpAQCAtNDQsMTkgKzQ1LDkg
QEAgY2xhc3MgUHJvZ3JhbUNvZGVCbG9jazsKIAogbmFtZXNwYWNlIExMSW50IHsKIAotdm9pZCBn
ZXRGdW5jdGlvbkVudHJ5cG9pbnQoVk0mLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLCBSZWZQdHI8
SklUQ29kZT4mLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGFyaXR5Q2hlY2spOwotdm9pZCBnZXRF
dmFsRW50cnlwb2ludChWTSYsIFJlZlB0cjxKSVRDb2RlPiYpOwotdm9pZCBnZXRQcm9ncmFtRW50
cnlwb2ludChWTSYsIFJlZlB0cjxKSVRDb2RlPiYpOwotCi1pbmxpbmUgdm9pZCBnZXRFbnRyeXBv
aW50KFZNJiB2bSwgRXZhbENvZGVCbG9jayosIFJlZlB0cjxKSVRDb2RlPiYgaml0Q29kZSkKLXsK
LSAgICBnZXRFdmFsRW50cnlwb2ludCh2bSwgaml0Q29kZSk7Ci19Ci0KLWlubGluZSB2b2lkIGdl
dEVudHJ5cG9pbnQoVk0mIHZtLCBQcm9ncmFtQ29kZUJsb2NrKiwgUmVmUHRyPEpJVENvZGU+JiBq
aXRDb2RlKQotewotICAgIGdldFByb2dyYW1FbnRyeXBvaW50KHZtLCBqaXRDb2RlKTsKLX0KK3Zv
aWQgc2V0RnVuY3Rpb25FbnRyeXBvaW50KFZNJiwgRnVuY3Rpb25Db2RlQmxvY2sqKTsKK3ZvaWQg
c2V0RXZhbEVudHJ5cG9pbnQoVk0mLCBFdmFsQ29kZUJsb2NrKik7Cit2b2lkIHNldFByb2dyYW1F
bnRyeXBvaW50KFZNJiwgUHJvZ3JhbUNvZGVCbG9jayopOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6TExJbnQKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1Bh
dGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRT
bG93UGF0aHMuY3BwCShyZXZpc2lvbiAxNTQ2MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw2IEBA
CiAjaW5jbHVkZSAiSG9zdENhbGxSZXR1cm5WYWx1ZS5oIgogI2luY2x1ZGUgIkludGVycHJldGVy
LmgiCiAjaW5jbHVkZSAiSklULmgiCi0jaW5jbHVkZSAiSklURHJpdmVyLmgiCiAjaW5jbHVkZSAi
SlNBY3RpdmF0aW9uLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIkpTR2xv
YmFsT2JqZWN0RnVuY3Rpb25zLmgiCkBAIC0yODgsMjMgKzI4NywzMyBAQCBpbmxpbmUgYm9vbCBq
aXRDb21waWxlQW5kU2V0SGV1cmlzdGljcyhDCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAgICAgCi0gICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gY29kZUJsb2NrLT5qaXRDb21w
aWxlKGV4ZWMpOwotICAgIHN3aXRjaCAocmVzdWx0KSB7Ci0gICAgY2FzZSBDb21waWxhdGlvbk5v
dE5lZWRlZDoKKyAgICBzd2l0Y2ggKGNvZGVCbG9jay0+aml0VHlwZSgpKSB7CisgICAgY2FzZSBK
SVRDb2RlOjpCYXNlbGluZUpJVDogewogICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigp
KQogICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICBDb2RlIHdhcyBhbHJlYWR5IGNvbXBpbGVkLlxu
Iik7CiAgICAgICAgIGNvZGVCbG9jay0+aml0U29vbigpOwogICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICBjYXNlIENvbXBpbGF0aW9uRmFpbGVkOgotICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9z
ZU9TUigpKQotICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICBKSVQgY29tcGlsYXRpb24gZmFpbGVk
LlxuIik7Ci0gICAgICAgIGNvZGVCbG9jay0+ZG9udEpJVEFueXRpbWVTb29uKCk7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBjYXNlIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDoKLSAgICAgICAg
aWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgSklU
IGNvbXBpbGF0aW9uIHN1Y2Nlc3NmdWwuXG4iKTsKLSAgICAgICAgY29kZUJsb2NrLT5qaXRTb29u
KCk7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBjYXNlIEpJVENvZGU6OkludGVy
cHJldGVyVGh1bms6IHsKKyAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gY29kZUJs
b2NrLT5wcmVwYXJlRm9yRXhlY3V0aW9uKAorICAgICAgICAgICAgZXhlYywgSklUQ29kZTo6QmFz
ZWxpbmVKSVQsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgICAgIHN3aXRjaCAocmVzdWx0
KSB7CisgICAgICAgIGNhc2UgQ29tcGlsYXRpb25GYWlsZWQ6CisgICAgICAgICAgICBpZiAoT3B0
aW9uczo6dmVyYm9zZU9TUigpKQorICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgSklUIGNv
bXBpbGF0aW9uIGZhaWxlZC5cbiIpOworICAgICAgICAgICAgY29kZUJsb2NrLT5kb250SklUQW55
dGltZVNvb24oKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY2FzZSBDb21w
aWxhdGlvblN1Y2Nlc3NmdWw6CisgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigp
KQorICAgICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgSklUIGNvbXBpbGF0aW9uIHN1Y2Nlc3Nm
dWwuXG4iKTsKKyAgICAgICAgICAgIGNvZGVCbG9jay0+aW5zdGFsbCgpOworICAgICAgICAgICAg
Y29kZUJsb2NrLT5qaXRTb29uKCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CiAgICAgZGVmYXVsdDoKICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtMTAwNCw3ICsxMDEzLDcgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBzZXRVcENh
bGwoRXhlYwogICAgICAgICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+aG9zdENvZGVFbnRyeUZvcihr
aW5kKTsKICAgICBlbHNlIHsKICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4
ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsK
LSAgICAgICAgSlNPYmplY3QqIGVycm9yID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5jb21waWxlRm9y
KGV4ZWNDYWxsZWUsIGNhbGxlZS0+c2NvcGUoKSwga2luZCk7CisgICAgICAgIEpTT2JqZWN0KiBl
cnJvciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbihleGVjQ2FsbGVl
LCBjYWxsZWUtPnNjb3BlKCksIGtpbmQpOwogICAgICAgICBpZiAoZXJyb3IpCiAgICAgICAgICAg
ICBMTElOVF9DQUxMX1RIUk9XKGV4ZWNDYWxsZWUtPmNhbGxlckZyYW1lKCksIHBjLCBlcnJvcik7
CiAgICAgICAgIGNvZGVCbG9jayA9ICZmdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEJ5dGVj
b2RlRm9yKGtpbmQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQ
cm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FycmF5UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMTU0NjMyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3
ICs3OCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc051bWVyaWNDb21wYXJlRnVuY3QKIAogICAg
IEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGNhbGxEYXRhLmpzLmZ1bmN0aW9uRXhl
Y3V0YWJsZTsKIAotICAgIEpTT2JqZWN0KiBlcnJvciA9IGV4ZWN1dGFibGUtPmNvbXBpbGVGb3JD
YWxsKGV4ZWMsIGNhbGxEYXRhLmpzLnNjb3BlKTsKKyAgICBKU09iamVjdCogZXJyb3IgPSBleGVj
dXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uKGV4ZWMsIGNhbGxEYXRhLmpzLnNjb3BlLCBDb2Rl
Rm9yQ2FsbCk7CiAgICAgaWYgKGVycm9yKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNw
cAkocmV2aXNpb24gMTU0NjMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29t
bW9uU2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNiBAQAogI2luY2x1
ZGUgIkhvc3RDYWxsUmV0dXJuVmFsdWUuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2lu
Y2x1ZGUgIkpJVC5oIgotI2luY2x1ZGUgIkpJVERyaXZlci5oIgogI2luY2x1ZGUgIkpJVFN0dWJz
LmgiCiAjaW5jbHVkZSAiSlNBY3RpdmF0aW9uLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGlsYXRpb25SZXN1bHQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBpbGF0aW9u
UmVzdWx0LmNwcAkocmV2aXNpb24gMTU0NjMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29tcGlsYXRpb25SZXN1bHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw5ICs0Miw2
IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBDb20KICAgICBjYXNlIENv
bXBpbGF0aW9uU3VjY2Vzc2Z1bDoKICAgICAgICAgb3V0LnByaW50KCJDb21waWxhdGlvblN1Y2Nl
c3NmdWwiKTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgQ29tcGlsYXRpb25Ob3ROZWVkZWQ6
Ci0gICAgICAgIG91dC5wcmludCgiQ29tcGlsYXRpb25Ob3ROZWVkZWQiKTsKLSAgICAgICAgcmV0
dXJuOwogICAgIGNhc2UgQ29tcGlsYXRpb25EZWZlcnJlZDoKICAgICAgICAgb3V0LnByaW50KCJD
b21waWxhdGlvbkRlZmVycmVkIik7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbXBpbGF0aW9uUmVzdWx0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGlsYXRpb25SZXN1bHQuaAkocmV2aXNpb24g
MTU0NjMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGlsYXRpb25SZXN1
bHQuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsMjkgQEAKIAogbmFtZXNwYWNlIEpTQyB7
CiAKLWVudW0gQ29tcGlsYXRpb25SZXN1bHQgeyBDb21waWxhdGlvbkZhaWxlZCwgQ29tcGlsYXRp
b25JbnZhbGlkYXRlZCwgQ29tcGlsYXRpb25TdWNjZXNzZnVsLCBDb21waWxhdGlvbk5vdE5lZWRl
ZCwgQ29tcGlsYXRpb25EZWZlcnJlZCB9OworZW51bSBDb21waWxhdGlvblJlc3VsdCB7CisgICAg
Ly8gV2UgdHJpZWQgdG8gY29tcGlsZSB0aGUgY29kZSwgYnV0IHdlIGNvdWxkbid0IGNvbXBpbGUg
aXQuIFRoaXMgY291bGQgYmUKKyAgICAvLyBiZWNhdXNlIHdlIHJhbiBvdXQgb2YgbWVtb3J5LCBv
ciBiZWNhdXNlIHRoZSBjb21waWxlciBlbmNvdW50ZXJlZCBhbgorICAgIC8vIGludGVybmFsIGVy
cm9yIGFuZCBkZWNpZGVkIHRvIGJhaWwgb3V0IGdyYWNlZnVsbHkuIEVpdGhlciB3YXksIHRoaXMg
aW1wbGllcworICAgIC8vIHRoYXQgd2Ugc2hvdWxkbid0IHRyeSB0byBjb21waWxlIHRoaXMgY29k
ZSBibG9jayBhZ2Fpbi4KKyAgICBDb21waWxhdGlvbkZhaWxlZCwKKyAgICAKKyAgICAvLyBUaGUg
cHJvZmlsaW5nIGFzc3VtcHRpb25zIHRoYXQgd2VyZSBmZWQgaW50byB0aGUgY29tcGlsZXIgd2Vy
ZSBpbnZhbGlkYXRlZAorICAgIC8vIGV2ZW4gYmVmb3JlIHdlIGZpbmlzaGVkIGNvbXBpbGluZy4g
VGhpcyBtZWFucyB3ZSBzaG91bGQgdHJ5IGFnYWluOiBpbiBzdWNoCisgICAgLy8gY2FzZXMgdGhl
IHByb2ZpbGluZyB3aWxsIG5vdyBiZSB1cGRhdGVkIGFuZCB0aGUgbmV4dCBjb21waWxhdGlvbiB3
b24ndAorICAgIC8vIGVuY291bnRlciB0aGUgc2FtZSBwcm9ibGVtLiBCdXQgaXQgZG9lcyBtZWFu
IHRoYXQgd2Ugc2hvdWxkIGV4ZXJjaXNlCisgICAgLy8gZXhwb25lbnRpYWwgYmFjay1vZmYsIHRv
IGdldCBldmVuIG1vcmUgcHJvZmlsaW5nIHNvIHRoYXQgbmV3IHByb2ZpbGluZworICAgIC8vIHBh
dGhvbG9naWVzIGFyZW4ndCBlbmNvdW50ZXJlZC4KKyAgICBDb21waWxhdGlvbkludmFsaWRhdGVk
LAorICAgIAorICAgIC8vIFRoZSBjb21waWxhdGlvbiBzdWNjZWVkZWQgYW5kIHRoZSBjb2RlIGJs
b2NrIG5vdyBoYXMgSklUQ29kZSBmb3IgdGhlIG5ld2x5CisgICAgLy8gY29tcGlsZWQgY29kZS4K
KyAgICBDb21waWxhdGlvblN1Y2Nlc3NmdWwsCisgICAgCisgICAgLy8gV2UgZGVjaWRlZCB0byBk
byB0aGUgY29tcGlsYXRpb24gYXN5bmNocm9ub3VzbHkuIFRoaXMgbWVhbnMgdGhhdCB3ZSBoYXZl
bid0CisgICAgLy8geWV0IGNvbXBpbGVkIHRoZSBjb2RlLgorICAgIENvbXBpbGF0aW9uRGVmZXJy
ZWQKK307CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMTU0NjMyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDkgKzMwLDcgQEAKICNpbmNsdWRlICJCeXRlY29kZUdlbmVyYXRvci5oIgogI2luY2x1ZGUg
IkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkRGR0RyaXZlci5oIgotI2luY2x1ZGUgIkV4ZWN1dGlv
bkhhcm5lc3MuaCIKICNpbmNsdWRlICJKSVQuaCIKLSNpbmNsdWRlICJKSVREcml2ZXIuaCIKICNp
bmNsdWRlICJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiUGFyc2VyLmgiCiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgpAQCAtMTE0LDYgKzExMiwxODQgQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjpk
ZXN0cm95KEpTQ2VsbCogYwogfQogI2VuZGlmCiAKK3ZvaWQgU2NyaXB0RXhlY3V0YWJsZTo6aW5z
dGFsbENvZGUoQ29kZUJsb2NrKiBnZW5lcmljQ29kZUJsb2NrKQoreworICAgIFJFTEVBU0VfQVNT
RVJUKGdlbmVyaWNDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpID09IHRoaXMpOworICAgIAor
ICAgIFZNJiB2bSA9ICpnZW5lcmljQ29kZUJsb2NrLT52bSgpOworICAgIAorICAgIGlmICh2bS5t
X3BlckJ5dGVjb2RlUHJvZmlsZXIpCisgICAgICAgIHZtLm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+
ZW5zdXJlQnl0ZWNvZGVzRm9yKGdlbmVyaWNDb2RlQmxvY2spOworICAgIAorICAgIEFTU0VSVCh2
bS5oZWFwLmlzRGVmZXJyZWQoKSk7CisgICAgCisgICAgaWYgKEpJVENvZGU6OmlzSklUKGdlbmVy
aWNDb2RlQmxvY2stPmppdFR5cGUoKSkpIHsKKyAgICAgICAgdm0uaGVhcC5yZXBvcnRFeHRyYU1l
bW9yeUNvc3QoCisgICAgICAgICAgICBzaXplb2YoQ29kZUJsb2NrKSArIGdlbmVyaWNDb2RlQmxv
Y2stPmppdENvZGUoKS0+c2l6ZSgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgdm0uaGVhcC5yZXBv
cnRFeHRyYU1lbW9yeUNvc3Qoc2l6ZW9mKENvZGVCbG9jaykpOworICAgIAorICAgIENvZGVTcGVj
aWFsaXphdGlvbktpbmQga2luZCA9IGdlbmVyaWNDb2RlQmxvY2stPnNwZWNpYWxpemF0aW9uS2lu
ZCgpOworICAgIAorICAgIFJlZlB0cjxDb2RlQmxvY2s+IG9sZENvZGVCbG9jazsKKyAgICAKKyAg
ICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIENvZGVGb3JDYWxsOgorICAgICAgICBtX2ppdENv
ZGVGb3JDYWxsID0gZ2VuZXJpY0NvZGVCbG9jay0+aml0Q29kZSgpOworICAgICAgICBtX2ppdENv
ZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2sgPSBnZW5lcmljQ29kZUJsb2NrLT5qaXRDb2RlV2l0aEFy
aXR5Q2hlY2soKTsKKyAgICAgICAgbV9udW1QYXJhbWV0ZXJzRm9yQ2FsbCA9IGdlbmVyaWNDb2Rl
QmxvY2stPm51bVBhcmFtZXRlcnMoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb2RlRm9y
Q29uc3RydWN0OgorICAgICAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3QgPSBnZW5lcmljQ29kZUJs
b2NrLT5qaXRDb2RlKCk7CisgICAgICAgIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNo
ZWNrID0gZ2VuZXJpY0NvZGVCbG9jay0+aml0Q29kZVdpdGhBcml0eUNoZWNrKCk7CisgICAgICAg
IG1fbnVtUGFyYW1ldGVyc0ZvckNvbnN0cnVjdCA9IGdlbmVyaWNDb2RlQmxvY2stPm51bVBhcmFt
ZXRlcnMoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIHN3aXRjaCAoZ2VuZXJp
Y0NvZGVCbG9jay0+Y29kZVR5cGUoKSkgeworICAgIGNhc2UgR2xvYmFsQ29kZTogeworICAgICAg
ICBQcm9ncmFtRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxQcm9ncmFtRXhlY3V0YWJs
ZSo+KHRoaXMpOworICAgICAgICBQcm9ncmFtQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBzdGF0aWNf
Y2FzdDxQcm9ncmFtQ29kZUJsb2NrKj4oZ2VuZXJpY0NvZGVCbG9jayk7CisgICAgICAgIAorICAg
ICAgICBBU1NFUlQoIWNvZGVCbG9jay0+aml0Q29kZVdpdGhBcml0eUNoZWNrKCkpOworICAgICAg
ICBBU1NFUlQoIWNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKTsKKyAgICAgICAgQVNTRVJUKGtp
bmQgPT0gQ29kZUZvckNhbGwpOworICAgICAgICAKKyAgICAgICAgb2xkQ29kZUJsb2NrID0gZXhl
Y3V0YWJsZS0+bV9wcm9ncmFtQ29kZUJsb2NrOworICAgICAgICBleGVjdXRhYmxlLT5tX3Byb2dy
YW1Db2RlQmxvY2sgPSBjb2RlQmxvY2s7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAg
CisgICAgY2FzZSBFdmFsQ29kZTogeworICAgICAgICBFdmFsRXhlY3V0YWJsZSogZXhlY3V0YWJs
ZSA9IGpzQ2FzdDxFdmFsRXhlY3V0YWJsZSo+KHRoaXMpOworICAgICAgICBFdmFsQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBzdGF0aWNfY2FzdDxFdmFsQ29kZUJsb2NrKj4oZ2VuZXJpY0NvZGVCbG9j
ayk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQoIWNvZGVCbG9jay0+aml0Q29kZVdpdGhBcml0
eUNoZWNrKCkpOworICAgICAgICBBU1NFUlQoIWNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKTsK
KyAgICAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNhbGwpOworICAgICAgICAKKyAgICAgICAg
b2xkQ29kZUJsb2NrID0gZXhlY3V0YWJsZS0+bV9ldmFsQ29kZUJsb2NrOworICAgICAgICBleGVj
dXRhYmxlLT5tX2V2YWxDb2RlQmxvY2sgPSBjb2RlQmxvY2s7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICAgICAgCisgICAgY2FzZSBGdW5jdGlvbkNvZGU6IHsKKyAgICAgICAgRnVuY3Rpb25F
eGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KHRoaXMp
OworICAgICAgICBGdW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2NrID0gc3RhdGljX2Nhc3Q8RnVu
Y3Rpb25Db2RlQmxvY2sqPihnZW5lcmljQ29kZUJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIHN3
aXRjaCAoa2luZCkgeworICAgICAgICBjYXNlIENvZGVGb3JDYWxsOgorICAgICAgICAgICAgb2xk
Q29kZUJsb2NrID0gZXhlY3V0YWJsZS0+bV9jb2RlQmxvY2tGb3JDYWxsOworICAgICAgICAgICAg
ZXhlY3V0YWJsZS0+bV9jb2RlQmxvY2tGb3JDYWxsID0gY29kZUJsb2NrOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgQ29kZUZvckNvbnN0cnVjdDoKKyAgICAgICAgICAgIG9sZENv
ZGVCbG9jayA9IGV4ZWN1dGFibGUtPm1fY29kZUJsb2NrRm9yQ29uc3RydWN0OworICAgICAgICAg
ICAgZXhlY3V0YWJsZS0+bV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QgPSBjb2RlQmxvY2s7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9IH0KKworICAg
IGlmIChvbGRDb2RlQmxvY2spCisgICAgICAgIG9sZENvZGVCbG9jay0+dW5saW5rSW5jb21pbmdD
YWxscygpOworfQorCitQYXNzUmVmUHRyPENvZGVCbG9jaz4gU2NyaXB0RXhlY3V0YWJsZTo6bmV3
Q29kZUJsb2NrRm9yKAorICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgSlNTY29wZSog
c2NvcGUsIEpTT2JqZWN0KiYgZXhjZXB0aW9uKQoreworICAgIGlmIChjbGFzc0luZm8oKSA9PSBF
dmFsRXhlY3V0YWJsZTo6aW5mbygpKSB7CisgICAgICAgIEV2YWxFeGVjdXRhYmxlKiBleGVjdXRh
YmxlID0ganNDYXN0PEV2YWxFeGVjdXRhYmxlKj4odGhpcyk7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKGtpbmQgPT0gQ29kZUZvckNhbGwpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCghZXhlY3V0
YWJsZS0+bV9ldmFsQ29kZUJsb2NrKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBFdmFs
Q29kZUJsb2NrKAorICAgICAgICAgICAgZXhlY3V0YWJsZSwgZXhlY3V0YWJsZS0+bV91bmxpbmtl
ZEV2YWxDb2RlQmxvY2suZ2V0KCksIHNjb3BlLAorICAgICAgICAgICAgZXhlY3V0YWJsZS0+c291
cmNlKCkucHJvdmlkZXIoKSkpOworICAgIH0KKyAgICAKKyAgICBpZiAoY2xhc3NJbmZvKCkgPT0g
UHJvZ3JhbUV4ZWN1dGFibGU6OmluZm8oKSkgeworICAgICAgICBQcm9ncmFtRXhlY3V0YWJsZSog
ZXhlY3V0YWJsZSA9IGpzQ2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KHRoaXMpOworICAgICAgICBS
RUxFQVNFX0FTU0VSVChraW5kID09IENvZGVGb3JDYWxsKTsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIWV4ZWN1dGFibGUtPm1fcHJvZ3JhbUNvZGVCbG9jayk7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgUHJvZ3JhbUNvZGVCbG9jaygKKyAgICAgICAgICAgIGV4ZWN1dGFibGUsIGV4ZWN1
dGFibGUtPm1fdW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLmdldCgpLCBzY29wZSwKKyAgICAgICAg
ICAgIGV4ZWN1dGFibGUtPnNvdXJjZSgpLnByb3ZpZGVyKCksIGV4ZWN1dGFibGUtPnNvdXJjZSgp
LnN0YXJ0Q29sdW1uKCkpKTsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlQoY2xhc3NJ
bmZvKCkgPT0gRnVuY3Rpb25FeGVjdXRhYmxlOjppbmZvKCkpOworICAgIEZ1bmN0aW9uRXhlY3V0
YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPih0aGlzKTsKKyAg
ICBSRUxFQVNFX0FTU0VSVCghZXhlY3V0YWJsZS0+Y29kZUJsb2NrRm9yKGtpbmQpKTsKKyAgICBW
TSogdm0gPSBzY29wZS0+dm0oKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
c2NvcGUtPmdsb2JhbE9iamVjdCgpOworICAgIFBhcnNlckVycm9yIGVycm9yOworICAgIERlYnVn
Z2VyTW9kZSBkZWJ1Z2dlck1vZGUgPSBnbG9iYWxPYmplY3QtPmhhc0RlYnVnZ2VyKCkgPyBEZWJ1
Z2dlck9uIDogRGVidWdnZXJPZmY7CisgICAgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSA9IGds
b2JhbE9iamVjdC0+aGFzUHJvZmlsZXIoKSA/IFByb2ZpbGVyT24gOiBQcm9maWxlck9mZjsKKyAg
ICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jayA9CisgICAgICAg
IGV4ZWN1dGFibGUtPm1fdW5saW5rZWRFeGVjdXRhYmxlLT5jb2RlQmxvY2tGb3IoCisgICAgICAg
ICAgICAqdm0sIGV4ZWN1dGFibGUtPm1fc291cmNlLCBraW5kLCBkZWJ1Z2dlck1vZGUsIHByb2Zp
bGVyTW9kZSwgZXJyb3IpOworICAgIGlmICghdW5saW5rZWRDb2RlQmxvY2spIHsKKyAgICAgICAg
ZXhjZXB0aW9uID0gZXJyb3IudG9FcnJvck9iamVjdChnbG9iYWxPYmplY3QsIGV4ZWN1dGFibGUt
Pm1fc291cmNlKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAgIFNvdXJjZVBy
b3ZpZGVyKiBwcm92aWRlciA9IGV4ZWN1dGFibGUtPnNvdXJjZSgpLnByb3ZpZGVyKCk7CisgICAg
dW5zaWduZWQgc291cmNlT2Zmc2V0ID0gZXhlY3V0YWJsZS0+c291cmNlKCkuc3RhcnRPZmZzZXQo
KTsKKyAgICB1bnNpZ25lZCBzdGFydENvbHVtbiA9IGV4ZWN1dGFibGUtPnNvdXJjZSgpLnN0YXJ0
Q29sdW1uKCk7CisKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZ1bmN0aW9uQ29kZUJsb2NrKAor
ICAgICAgICBleGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUsIHByb3ZpZGVyLCBz
b3VyY2VPZmZzZXQsIHN0YXJ0Q29sdW1uKSk7Cit9CisKK1Bhc3NSZWZQdHI8Q29kZUJsb2NrPiBT
Y3JpcHRFeGVjdXRhYmxlOjpuZXdSZXBsYWNlbWVudENvZGVCbG9ja0ZvcigKKyAgICBDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kIGtpbmQpCit7CisgICAgaWYgKGNsYXNzSW5mbygpID09IEV2YWxFeGVj
dXRhYmxlOjppbmZvKCkpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoa2luZCA9PSBDb2RlRm9y
Q2FsbCk7CisgICAgICAgIEV2YWxFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PEV2YWxF
eGVjdXRhYmxlKj4odGhpcyk7CisgICAgICAgIFJlZlB0cjxFdmFsQ29kZUJsb2NrPiByZXN1bHQg
PSBhZG9wdFJlZihuZXcgRXZhbENvZGVCbG9jaygKKyAgICAgICAgICAgIENvZGVCbG9jazo6Q29w
eVBhcnNlZEJsb2NrLCAqZXhlY3V0YWJsZS0+bV9ldmFsQ29kZUJsb2NrKSk7CisgICAgICAgIHJl
c3VsdC0+c2V0QWx0ZXJuYXRpdmUoZXhlY3V0YWJsZS0+bV9ldmFsQ29kZUJsb2NrKTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgaWYgKGNsYXNzSW5mbygpID09IFBy
b2dyYW1FeGVjdXRhYmxlOjppbmZvKCkpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoa2luZCA9
PSBDb2RlRm9yQ2FsbCk7CisgICAgICAgIFByb2dyYW1FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0g
anNDYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4odGhpcyk7CisgICAgICAgIFJlZlB0cjxQcm9ncmFt
Q29kZUJsb2NrPiByZXN1bHQgPSBhZG9wdFJlZihuZXcgUHJvZ3JhbUNvZGVCbG9jaygKKyAgICAg
ICAgICAgIENvZGVCbG9jazo6Q29weVBhcnNlZEJsb2NrLCAqZXhlY3V0YWJsZS0+bV9wcm9ncmFt
Q29kZUJsb2NrKSk7CisgICAgICAgIHJlc3VsdC0+c2V0QWx0ZXJuYXRpdmUoZXhlY3V0YWJsZS0+
bV9wcm9ncmFtQ29kZUJsb2NrKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAg
ICBSRUxFQVNFX0FTU0VSVChjbGFzc0luZm8oKSA9PSBGdW5jdGlvbkV4ZWN1dGFibGU6OmluZm8o
KSk7CisgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PEZ1bmN0aW9u
RXhlY3V0YWJsZSo+KHRoaXMpOworICAgIFJlZlB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gcmVzdWx0
ID0gYWRvcHRSZWYobmV3IEZ1bmN0aW9uQ29kZUJsb2NrKAorICAgICAgICBDb2RlQmxvY2s6OkNv
cHlQYXJzZWRCbG9jaywgKmV4ZWN1dGFibGUtPmNvZGVCbG9ja0ZvcihraW5kKSkpOworICAgIHJl
c3VsdC0+c2V0QWx0ZXJuYXRpdmUoZXhlY3V0YWJsZS0+Y29kZUJsb2NrRm9yKGtpbmQpKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitKU09iamVjdCogU2NyaXB0RXhlY3V0YWJsZTo6cHJlcGFy
ZUZvckV4ZWN1dGlvbkltcGwoCisgICAgRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSwg
Q29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQoreworICAgIEpTT2JqZWN0KiBleGNlcHRpb24g
PSAwOworICAgIFJlZlB0cjxDb2RlQmxvY2s+IGNvZGVCbG9jayA9IG5ld0NvZGVCbG9ja0Zvcihr
aW5kLCBzY29wZSwgZXhjZXB0aW9uKTsKKyAgICBpZiAoIWNvZGVCbG9jaykgeworICAgICAgICBS
RUxFQVNFX0FTU0VSVChleGNlcHRpb24pOworICAgICAgICByZXR1cm4gZXhjZXB0aW9uOworICAg
IH0KKyAgICAKKyAgICBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGU7CisjaWYgRU5BQkxFKExMSU5U
KQorICAgIGppdFR5cGUgPSBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rOworI2Vsc2UKKyAgICBq
aXRUeXBlID0gSklUQ29kZTo6QmFzZWxpbmVKSVQ7CisjZW5kaWYKKyAgICBjb2RlQmxvY2stPnBy
ZXBhcmVGb3JFeGVjdXRpb24oZXhlYywgaml0VHlwZSk7CisKKyAgICBpbnN0YWxsQ29kZShjb2Rl
QmxvY2suZ2V0KCkpOworICAgIHJldHVybiAwOworfQorCiBjb25zdCBDbGFzc0luZm8gRXZhbEV4
ZWN1dGFibGU6OnNfaW5mbyA9IHsgIkV2YWxFeGVjdXRhYmxlIiwgJlNjcmlwdEV4ZWN1dGFibGU6
OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShFdmFsRXhlY3V0YWJsZSkgfTsKIAog
RXZhbEV4ZWN1dGFibGUqIEV2YWxFeGVjdXRhYmxlOjpjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIGJvb2wgaXNJblN0cmljdENvbnRleHQpIApAQCAtMTc2
LDI4ICszNTIsNiBAQCB2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZGVzdHJveShKU0NlbGwqCiAg
ICAgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oY2VsbCktPkZ1bmN0aW9uRXhlY3V0
YWJsZTo6fkZ1bmN0aW9uRXhlY3V0YWJsZSgpOwogfQogCi0jaWYgRU5BQkxFKERGR19KSVQpCi1K
U09iamVjdCogRXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiBleGVj
LCBKU1Njb3BlKiBzY29wZSwgQ29tcGlsYXRpb25SZXN1bHQmIHJlc3VsdCwgdW5zaWduZWQgYnl0
ZWNvZGVJbmRleCkKLXsKLSAgICBBU1NFUlQoZXhlYy0+dm0oKS5keW5hbWljR2xvYmFsT2JqZWN0
KTsKLSAgICBBU1NFUlQoISFtX2V2YWxDb2RlQmxvY2spOwotICAgIEpTT2JqZWN0KiBlcnJvciA9
IDA7Ci0gICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQobV9ldmFsQ29kZUJsb2NrLT5q
aXRUeXBlKCkpKQotICAgICAgICBlcnJvciA9IGNvbXBpbGVJbnRlcm5hbChleGVjLCBzY29wZSwg
SklUQ29kZTo6bmV4dFRpZXJKSVQobV9ldmFsQ29kZUJsb2NrLT5qaXRUeXBlKCkpLCAmcmVzdWx0
LCBieXRlY29kZUluZGV4KTsKLSAgICBlbHNlCi0gICAgICAgIHJlc3VsdCA9IENvbXBpbGF0aW9u
Tm90TmVlZGVkOwotICAgIEFTU0VSVCghIW1fZXZhbENvZGVCbG9jayk7Ci0gICAgcmV0dXJuIGVy
cm9yOwotfQotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotCi0jaWYgRU5BQkxFKEpJVCkKLUNv
bXBpbGF0aW9uUmVzdWx0IEV2YWxFeGVjdXRhYmxlOjpqaXRDb21waWxlKEV4ZWNTdGF0ZSogZXhl
YykKLXsKLSAgICByZXR1cm4gaml0Q29tcGlsZUlmQXBwcm9wcmlhdGUoZXhlYywgbV9ldmFsQ29k
ZUJsb2NrLmdldCgpLCBtX2ppdENvZGVGb3JDYWxsLCBKSVRDb2RlOjpib3R0b21UaWVySklUKCks
IFVJTlRfTUFYLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwotfQotI2VuZGlmCi0KIGlubGluZSBj
b25zdCBjaGFyKiBzYW1wbGluZ0Rlc2NyaXB0aW9uKEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSkK
IHsKICAgICBzd2l0Y2ggKGppdFR5cGUpIHsKQEAgLTIxNSwzOSArMzY5LDYgQEAgaW5saW5lIGNv
bnN0IGNoYXIqIHNhbXBsaW5nRGVzY3JpcHRpb24oSgogICAgIH0KIH0KIAotSlNPYmplY3QqIEV2
YWxFeGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBz
Y29wZSwgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlLCBDb21waWxhdGlvblJlc3VsdCogcmVzdWx0
LCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQotewotICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5n
UmVnaW9uKHNhbXBsaW5nRGVzY3JpcHRpb24oaml0VHlwZSkpOwotICAgIAotICAgIGlmIChyZXN1
bHQpCi0gICAgICAgICpyZXN1bHQgPSBDb21waWxhdGlvbkZhaWxlZDsKLSAgICAKLSAgICBSZWZQ
dHI8RXZhbENvZGVCbG9jaz4gbmV3Q29kZUJsb2NrOwotICAgIAotICAgIGlmICghIW1fZXZhbENv
ZGVCbG9jaykgewotICAgICAgICBuZXdDb2RlQmxvY2sgPSBhZG9wdFJlZihuZXcgRXZhbENvZGVC
bG9jayhDb2RlQmxvY2s6OkNvcHlQYXJzZWRCbG9jaywgKm1fZXZhbENvZGVCbG9jaykpOwotICAg
ICAgICBuZXdDb2RlQmxvY2stPnNldEFsdGVybmF0aXZlKHN0YXRpY19wb2ludGVyX2Nhc3Q8Q29k
ZUJsb2NrPihtX2V2YWxDb2RlQmxvY2spKTsKLSAgICB9IGVsc2UgewotICAgICAgICBuZXdDb2Rl
QmxvY2sgPSBhZG9wdFJlZihuZXcgRXZhbENvZGVCbG9jayh0aGlzLCBtX3VubGlua2VkRXZhbENv
ZGVCbG9jay5nZXQoKSwgc2NvcGUsIHNvdXJjZSgpLnByb3ZpZGVyKCkpKTsKLSAgICAgICAgQVNT
RVJUKChqaXRUeXBlID09IEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSkgPT0gIW1fZXZhbENvZGVC
bG9jayk7Ci0gICAgfQotCi0gICAgQ29tcGlsYXRpb25SZXN1bHQgdGhlUmVzdWx0ID0gcHJlcGFy
ZUZvckV4ZWN1dGlvbigKLSAgICAgICAgZXhlYywgbV9ldmFsQ29kZUJsb2NrLCBuZXdDb2RlQmxv
Y2suZ2V0KCksIG1faml0Q29kZUZvckNhbGwsIGppdFR5cGUsIGJ5dGVjb2RlSW5kZXgpOwotICAg
IGlmIChyZXN1bHQpCi0gICAgICAgICpyZXN1bHQgPSB0aGVSZXN1bHQ7Ci0KLSAgICByZXR1cm4g
MDsKLX0KLQotI2lmIEVOQUJMRShERkdfSklUKQotQ29tcGlsYXRpb25SZXN1bHQgRXZhbEV4ZWN1
dGFibGU6OnJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlKFBhc3NSZWZQdHI8REZHOjpQ
bGFuPiBwbGFuKQotewotICAgIHJldHVybiBKU0M6OnJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6
ZWRDb2RlKAotICAgICAgICBwbGFuLCBtX2V2YWxDb2RlQmxvY2ssIG1faml0Q29kZUZvckNhbGws
IDAsIDApOwotfQotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotCiAjaWYgRU5BQkxFKEpJVCkK
IHZvaWQgRXZhbEV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZShWTSYgdm0pCiB7CkBA
IC0yOTgsNjAgKzQxOSw2IEBAIEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6Y2hlY2tTeW50
YXgKICAgICByZXR1cm4gZXJyb3IudG9FcnJvck9iamVjdChsZXhpY2FsR2xvYmFsT2JqZWN0LCBt
X3NvdXJjZSk7CiB9CiAKLSNpZiBFTkFCTEUoREZHX0pJVCkKLUpTT2JqZWN0KiBQcm9ncmFtRXhl
Y3V0YWJsZTo6Y29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3Bl
LCBDb21waWxhdGlvblJlc3VsdCYgcmVzdWx0LCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQotewot
ICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMtPnZtKCkuZHluYW1pY0dsb2JhbE9iamVjdCk7Ci0gICAg
QVNTRVJUKCEhbV9wcm9ncmFtQ29kZUJsb2NrKTsKLSAgICBKU09iamVjdCogZXJyb3IgPSAwOwot
ICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKG1fcHJvZ3JhbUNvZGVCbG9jay0+aml0
VHlwZSgpKSkKLSAgICAgICAgZXJyb3IgPSBjb21waWxlSW50ZXJuYWwoZXhlYywgc2NvcGUsIEpJ
VENvZGU6Om5leHRUaWVySklUKG1fcHJvZ3JhbUNvZGVCbG9jay0+aml0VHlwZSgpKSwgJnJlc3Vs
dCwgYnl0ZWNvZGVJbmRleCk7Ci0gICAgZWxzZQotICAgICAgICByZXN1bHQgPSBDb21waWxhdGlv
bk5vdE5lZWRlZDsKLSAgICBBU1NFUlQoISFtX3Byb2dyYW1Db2RlQmxvY2spOwotICAgIHJldHVy
biBlcnJvcjsKLX0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLQotI2lmIEVOQUJMRShKSVQp
Ci1Db21waWxhdGlvblJlc3VsdCBQcm9ncmFtRXhlY3V0YWJsZTo6aml0Q29tcGlsZShFeGVjU3Rh
dGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGppdENvbXBpbGVJZkFwcHJvcHJpYXRlKGV4ZWMsIG1f
cHJvZ3JhbUNvZGVCbG9jay5nZXQoKSwgbV9qaXRDb2RlRm9yQ2FsbCwgSklUQ29kZTo6Ym90dG9t
VGllckpJVCgpLCBVSU5UX01BWCwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKLX0KLSNlbmRpZgot
Ci1KU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hbChFeGVjU3RhdGUq
IGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUsIENvbXBpbGF0
aW9uUmVzdWx0KiByZXN1bHQsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAgU2FtcGxp
bmdSZWdpb24gc2FtcGxpbmdSZWdpb24oc2FtcGxpbmdEZXNjcmlwdGlvbihqaXRUeXBlKSk7Ci0g
ICAgCi0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgKnJlc3VsdCA9IENvbXBpbGF0aW9uRmFpbGVk
OwotICAgIAotICAgIFJlZlB0cjxQcm9ncmFtQ29kZUJsb2NrPiBuZXdDb2RlQmxvY2s7Ci0gICAg
Ci0gICAgaWYgKCEhbV9wcm9ncmFtQ29kZUJsb2NrKSB7Ci0gICAgICAgIG5ld0NvZGVCbG9jayA9
IGFkb3B0UmVmKG5ldyBQcm9ncmFtQ29kZUJsb2NrKENvZGVCbG9jazo6Q29weVBhcnNlZEJsb2Nr
LCAqbV9wcm9ncmFtQ29kZUJsb2NrKSk7Ci0gICAgICAgIG5ld0NvZGVCbG9jay0+c2V0QWx0ZXJu
YXRpdmUoc3RhdGljX3BvaW50ZXJfY2FzdDxDb2RlQmxvY2s+KG1fcHJvZ3JhbUNvZGVCbG9jaykp
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG5ld0NvZGVCbG9jayA9IGFkb3B0UmVmKG5ldyBQcm9n
cmFtQ29kZUJsb2NrKHRoaXMsIG1fdW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLmdldCgpLCBzY29w
ZSwgc291cmNlKCkucHJvdmlkZXIoKSwgc291cmNlKCkuc3RhcnRDb2x1bW4oKSkpOwotICAgIH0K
LQotICAgIENvbXBpbGF0aW9uUmVzdWx0IHRoZVJlc3VsdCA9IHByZXBhcmVGb3JFeGVjdXRpb24o
Ci0gICAgICAgIGV4ZWMsIG1fcHJvZ3JhbUNvZGVCbG9jaywgbmV3Q29kZUJsb2NrLmdldCgpLCBt
X2ppdENvZGVGb3JDYWxsLCBqaXRUeXBlLCBieXRlY29kZUluZGV4KTsKLSAgICBpZiAocmVzdWx0
KQotICAgICAgICAqcmVzdWx0ID0gdGhlUmVzdWx0OwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLSNp
ZiBFTkFCTEUoREZHX0pJVCkKLUNvbXBpbGF0aW9uUmVzdWx0IFByb2dyYW1FeGVjdXRhYmxlOjpy
ZXBsYWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZShQYXNzUmVmUHRyPERGRzo6UGxhbj4gcGxh
bikKLXsKLSAgICByZXR1cm4gSlNDOjpyZXBsYWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZSgK
LSAgICAgICAgcGxhbiwgbV9wcm9ncmFtQ29kZUJsb2NrLCBtX2ppdENvZGVGb3JDYWxsLCAwLCAw
KTsKLX0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLQogI2lmIEVOQUJMRShKSVQpCiB2b2lk
IFByb2dyYW1FeGVjdXRhYmxlOjpqZXR0aXNvbk9wdGltaXplZENvZGUoVk0mIHZtKQogewpAQCAt
NDQ0LDE0MSArNTExLDYgQEAgRnVuY3Rpb25Db2RlQmxvY2sqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6
YgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLSNpZiBFTkFCTEUoREZHX0pJVCkKLUpTT2JqZWN0
KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWRGb3JDYWxsKEV4ZWNTdGF0ZSog
ZXhlYywgSlNTY29wZSogc2NvcGUsIENvbXBpbGF0aW9uUmVzdWx0JiByZXN1bHQsIHVuc2lnbmVk
IGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQoZXhlYy0+dm0oKS5keW5hbWlj
R2xvYmFsT2JqZWN0KTsKLSAgICBBU1NFUlQoISFtX2NvZGVCbG9ja0ZvckNhbGwpOwotICAgIEpT
T2JqZWN0KiBlcnJvciA9IDA7Ci0gICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQobV9j
b2RlQmxvY2tGb3JDYWxsLT5qaXRUeXBlKCkpKQotICAgICAgICBlcnJvciA9IGNvbXBpbGVGb3JD
YWxsSW50ZXJuYWwoZXhlYywgc2NvcGUsIEpJVENvZGU6Om5leHRUaWVySklUKG1fY29kZUJsb2Nr
Rm9yQ2FsbC0+aml0VHlwZSgpKSwgJnJlc3VsdCwgYnl0ZWNvZGVJbmRleCk7Ci0gICAgZWxzZQot
ICAgICAgICByZXN1bHQgPSBDb21waWxhdGlvbk5vdE5lZWRlZDsKLSAgICBBU1NFUlQoISFtX2Nv
ZGVCbG9ja0ZvckNhbGwpOwotICAgIHJldHVybiBlcnJvcjsKLX0KLQotSlNPYmplY3QqIEZ1bmN0
aW9uRXhlY3V0YWJsZTo6Y29tcGlsZU9wdGltaXplZEZvckNvbnN0cnVjdChFeGVjU3RhdGUqIGV4
ZWMsIEpTU2NvcGUqIHNjb3BlLCBDb21waWxhdGlvblJlc3VsdCYgcmVzdWx0LCB1bnNpZ25lZCBi
eXRlY29kZUluZGV4KQotewotICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMtPnZtKCkuZHluYW1pY0ds
b2JhbE9iamVjdCk7Ci0gICAgQVNTRVJUKCEhbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpOwotICAg
IEpTT2JqZWN0KiBlcnJvciA9IDA7Ci0gICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQo
bV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPmppdFR5cGUoKSkpCi0gICAgICAgIGVycm9yID0gY29t
cGlsZUZvckNvbnN0cnVjdEludGVybmFsKGV4ZWMsIHNjb3BlLCBKSVRDb2RlOjpuZXh0VGllckpJ
VChtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+aml0VHlwZSgpKSwgJnJlc3VsdCwgYnl0ZWNvZGVJ
bmRleCk7Ci0gICAgZWxzZQotICAgICAgICByZXN1bHQgPSBDb21waWxhdGlvbk5vdE5lZWRlZDsK
LSAgICBBU1NFUlQoISFtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCk7Ci0gICAgcmV0dXJuIGVycm9y
OwotfQotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotCi0jaWYgRU5BQkxFKEpJVCkKLUNvbXBp
bGF0aW9uUmVzdWx0IEZ1bmN0aW9uRXhlY3V0YWJsZTo6aml0Q29tcGlsZUZvckNhbGwoRXhlY1N0
YXRlKiBleGVjKQotewotICAgIHJldHVybiBqaXRDb21waWxlRnVuY3Rpb25JZkFwcHJvcHJpYXRl
KGV4ZWMsIG1fY29kZUJsb2NrRm9yQ2FsbC5nZXQoKSwgbV9qaXRDb2RlRm9yQ2FsbCwgbV9qaXRD
b2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrLCBKSVRDb2RlOjpib3R0b21UaWVySklUKCksIFVJTlRf
TUFYLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwotfQotCi1Db21waWxhdGlvblJlc3VsdCBGdW5j
dGlvbkV4ZWN1dGFibGU6OmppdENvbXBpbGVGb3JDb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjKQot
ewotICAgIHJldHVybiBqaXRDb21waWxlRnVuY3Rpb25JZkFwcHJvcHJpYXRlKGV4ZWMsIG1fY29k
ZUJsb2NrRm9yQ29uc3RydWN0LmdldCgpLCBtX2ppdENvZGVGb3JDb25zdHJ1Y3QsIG1faml0Q29k
ZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrLCBKSVRDb2RlOjpib3R0b21UaWVySklUKCksIFVJ
TlRfTUFYLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwotfQotI2VuZGlmCi0KLVBhc3NSZWZQdHI8
RnVuY3Rpb25Db2RlQmxvY2s+IEZ1bmN0aW9uRXhlY3V0YWJsZTo6cHJvZHVjZUNvZGVCbG9ja0Zv
cihKU1Njb3BlKiBzY29wZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBzcGVjaWFsaXphdGlvbktp
bmQsIEpTT2JqZWN0KiYgZXhjZXB0aW9uKQotewotICAgIFJlZlB0cjxGdW5jdGlvbkNvZGVCbG9j
az4gYWx0ZXJuYXRpdmUgPSBjb2RlQmxvY2tGb3Ioc3BlY2lhbGl6YXRpb25LaW5kKTsKLSAgICAK
LSAgICBpZiAoISFhbHRlcm5hdGl2ZSkgewotICAgICAgICBSZWZQdHI8RnVuY3Rpb25Db2RlQmxv
Y2s+IHJlc3VsdCA9IGFkb3B0UmVmKG5ldyBGdW5jdGlvbkNvZGVCbG9jayhDb2RlQmxvY2s6OkNv
cHlQYXJzZWRCbG9jaywgKmNvZGVCbG9ja0ZvcihzcGVjaWFsaXphdGlvbktpbmQpKSk7Ci0gICAg
ICAgIHJlc3VsdC0+c2V0QWx0ZXJuYXRpdmUoYWx0ZXJuYXRpdmUpOwotICAgICAgICByZXR1cm4g
cmVzdWx0LnJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICBWTSogdm0gPSBzY29wZS0+dm0oKTsKLSAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NvcGUtPmdsb2JhbE9iamVjdCgpOwot
ICAgIFBhcnNlckVycm9yIGVycm9yOwotICAgIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUgPSBn
bG9iYWxPYmplY3QtPmhhc0RlYnVnZ2VyKCkgPyBEZWJ1Z2dlck9uIDogRGVidWdnZXJPZmY7Ci0g
ICAgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSA9IGdsb2JhbE9iamVjdC0+aGFzUHJvZmlsZXIo
KSA/IFByb2ZpbGVyT24gOiBQcm9maWxlck9mZjsKLSAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJs
b2NrKiB1bmxpbmtlZENvZGVCbG9jayA9IG1fdW5saW5rZWRFeGVjdXRhYmxlLT5jb2RlQmxvY2tG
b3IoKnZtLCBtX3NvdXJjZSwgc3BlY2lhbGl6YXRpb25LaW5kLCBkZWJ1Z2dlck1vZGUsIHByb2Zp
bGVyTW9kZSwgZXJyb3IpOwotICAgIHJlY29yZFBhcnNlKG1fdW5saW5rZWRFeGVjdXRhYmxlLT5m
ZWF0dXJlcygpLCBtX3VubGlua2VkRXhlY3V0YWJsZS0+aGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSwg
bGluZU5vKCksIGxhc3RMaW5lKCksIHN0YXJ0Q29sdW1uKCkpOwotCi0gICAgaWYgKCF1bmxpbmtl
ZENvZGVCbG9jaykgewotICAgICAgICBleGNlcHRpb24gPSBlcnJvci50b0Vycm9yT2JqZWN0KGds
b2JhbE9iamVjdCwgbV9zb3VyY2UpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBT
b3VyY2VQcm92aWRlciogcHJvdmlkZXIgPSBzb3VyY2UoKS5wcm92aWRlcigpOwotICAgIHVuc2ln
bmVkIHNvdXJjZU9mZnNldCA9IHNvdXJjZSgpLnN0YXJ0T2Zmc2V0KCk7Ci0gICAgdW5zaWduZWQg
c3RhcnRDb2x1bW4gPSBzb3VyY2UoKS5zdGFydENvbHVtbigpOwotCi0gICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBGdW5jdGlvbkNvZGVCbG9jayh0aGlzLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUs
IHByb3ZpZGVyLCBzb3VyY2VPZmZzZXQsIHN0YXJ0Q29sdW1uKSk7Ci19Ci0KLQotSlNPYmplY3Qq
IEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNhbGxJbnRlcm5hbChFeGVjU3RhdGUqIGV4
ZWMsIEpTU2NvcGUqIHNjb3BlLCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUsIENvbXBpbGF0aW9u
UmVzdWx0KiByZXN1bHQsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAgU2FtcGxpbmdS
ZWdpb24gc2FtcGxpbmdSZWdpb24oc2FtcGxpbmdEZXNjcmlwdGlvbihqaXRUeXBlKSk7Ci0gICAg
Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgKnJlc3VsdCA9IENvbXBpbGF0aW9uRmFpbGVkOwot
ICAgIAotICAgIEFTU0VSVCgoaml0VHlwZSA9PSBKSVRDb2RlOjpib3R0b21UaWVySklUKCkpID09
ICFtX2NvZGVCbG9ja0ZvckNhbGwpOwotICAgIEpTT2JqZWN0KiBleGNlcHRpb24gPSAwOwotICAg
IAotICAgIFJlZlB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gbmV3Q29kZUJsb2NrID0gcHJvZHVjZUNv
ZGVCbG9ja0ZvcihzY29wZSwgQ29kZUZvckNhbGwsIGV4Y2VwdGlvbik7Ci0gICAgaWYgKCFuZXdD
b2RlQmxvY2spCi0gICAgICAgIHJldHVybiBleGNlcHRpb247Ci0gICAgCi0gICAgQ29tcGlsYXRp
b25SZXN1bHQgdGhlUmVzdWx0ID0gcHJlcGFyZUZ1bmN0aW9uRm9yRXhlY3V0aW9uKAotICAgICAg
ICBleGVjLCBtX2NvZGVCbG9ja0ZvckNhbGwsIG5ld0NvZGVCbG9jay5nZXQoKSwgbV9qaXRDb2Rl
Rm9yQ2FsbCwKLSAgICAgICAgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrLCBtX251bVBh
cmFtZXRlcnNGb3JDYWxsLCBqaXRUeXBlLAotICAgICAgICBieXRlY29kZUluZGV4LCBDb2RlRm9y
Q2FsbCk7Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgKnJlc3VsdCA9IHRoZVJlc3VsdDsKLSAg
ICByZXR1cm4gMDsKLX0KLQotI2lmIEVOQUJMRShERkdfSklUKQotQ29tcGlsYXRpb25SZXN1bHQg
RnVuY3Rpb25FeGVjdXRhYmxlOjpyZXBsYWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZUZvckNh
bGwoUGFzc1JlZlB0cjxERkc6OlBsYW4+IHBsYW4pCi17Ci0gICAgcmV0dXJuIEpTQzo6cmVwbGFj
ZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGUoCi0gICAgICAgIHBsYW4sIG1fY29kZUJsb2NrRm9y
Q2FsbCwgbV9qaXRDb2RlRm9yQ2FsbCwgJm1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjaywK
LSAgICAgICAgJm1fbnVtUGFyYW1ldGVyc0ZvckNhbGwpOwotfQotI2VuZGlmIC8vIEVOQUJMRShE
RkdfSklUKQotCi1KU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ29uc3Ry
dWN0SW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSwgSklUQ29kZTo6SklU
VHlwZSBqaXRUeXBlLCBDb21waWxhdGlvblJlc3VsdCogcmVzdWx0LCB1bnNpZ25lZCBieXRlY29k
ZUluZGV4KQotewotICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKHNhbXBsaW5nRGVz
Y3JpcHRpb24oaml0VHlwZSkpOwotICAgIAotICAgIGlmIChyZXN1bHQpCi0gICAgICAgICpyZXN1
bHQgPSBDb21waWxhdGlvbkZhaWxlZDsKLSAgICAKLSAgICBBU1NFUlQoKGppdFR5cGUgPT0gSklU
Q29kZTo6Ym90dG9tVGllckpJVCgpKSA9PSAhbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpOwotICAg
IEpTT2JqZWN0KiBleGNlcHRpb24gPSAwOwotICAgIFJlZlB0cjxGdW5jdGlvbkNvZGVCbG9jaz4g
bmV3Q29kZUJsb2NrID0gcHJvZHVjZUNvZGVCbG9ja0ZvcihzY29wZSwgQ29kZUZvckNvbnN0cnVj
dCwgZXhjZXB0aW9uKTsKLSAgICBpZiAoIW5ld0NvZGVCbG9jaykKLSAgICAgICAgcmV0dXJuIGV4
Y2VwdGlvbjsKLQotICAgIENvbXBpbGF0aW9uUmVzdWx0IHRoZVJlc3VsdCA9IHByZXBhcmVGdW5j
dGlvbkZvckV4ZWN1dGlvbigKLSAgICAgICAgZXhlYywgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Qs
IG5ld0NvZGVCbG9jay5nZXQoKSwgbV9qaXRDb2RlRm9yQ29uc3RydWN0LAotICAgICAgICBtX2pp
dENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjaywgbV9udW1QYXJhbWV0ZXJzRm9yQ29uc3Ry
dWN0LCBqaXRUeXBlLAotICAgICAgICBieXRlY29kZUluZGV4LCBDb2RlRm9yQ29uc3RydWN0KTsK
LSAgICBpZiAocmVzdWx0KQotICAgICAgICAqcmVzdWx0ID0gdGhlUmVzdWx0OwotCi0gICAgcmV0
dXJuIDA7Ci19Ci0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLUNvbXBpbGF0aW9uUmVzdWx0IEZ1bmN0
aW9uRXhlY3V0YWJsZTo6cmVwbGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGVGb3JDb25zdHJ1
Y3QoUGFzc1JlZlB0cjxERkc6OlBsYW4+IHBsYW4pCi17Ci0gICAgcmV0dXJuIEpTQzo6cmVwbGFj
ZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGUoCi0gICAgICAgIHBsYW4sIG1fY29kZUJsb2NrRm9y
Q29uc3RydWN0LCBtX2ppdENvZGVGb3JDb25zdHJ1Y3QsCi0gICAgICAgICZtX2ppdENvZGVGb3JD
b25zdHJ1Y3RXaXRoQXJpdHlDaGVjaywgJm1fbnVtUGFyYW1ldGVyc0ZvckNvbnN0cnVjdCk7Ci19
Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0KICNpZiBFTkFCTEUoSklUKQogdm9pZCBGdW5j
dGlvbkV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZUZvckNhbGwoVk0mIHZtKQogewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkocmV2aXNp
b24gMTU0NjMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNDQsNiArMjQ0LDcgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gTExJbnQ6OkNMb29wOjpjYXRjaFJvdXRpbmVGb3IoY2F0Y2hQQ0ZvckludGVycHJldGVyKTsK
ICNlbmRpZgogICAgIH0KKyAgICAKICNlbmRpZiAvLyBFTkFCTEUoSklUIHx8IEVOQUJMRShMTElO
VF9DX0xPT1ApCiAKIHByb3RlY3RlZDoKQEAgLTQwMiw2ICs0MDMsMjAgQEAgcHVibGljOgogICAg
ICAgICBtX3N0YXJ0Q29sdW1uID0gc3RhcnRDb2x1bW47CiAgICAgfQogCisgICAgdm9pZCBpbnN0
YWxsQ29kZShDb2RlQmxvY2sqKTsKKyAgICBQYXNzUmVmUHRyPENvZGVCbG9jaz4gbmV3Q29kZUJs
b2NrRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQsIEpTU2NvcGUqLCBKU09iamVjdComIGV4Y2Vw
dGlvbik7CisgICAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+IG5ld1JlcGxhY2VtZW50Q29kZUJsb2Nr
Rm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQpOworICAgIAorICAgIEpTT2JqZWN0KiBwcmVwYXJl
Rm9yRXhlY3V0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUsIENvZGVTcGVjaWFs
aXphdGlvbktpbmQga2luZCkKKyAgICB7CisgICAgICAgIGlmIChoYXNKSVRDb2RlRm9yKGtpbmQp
KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBwcmVwYXJlRm9yRXhlY3V0
aW9uSW1wbChleGVjLCBzY29wZSwga2luZCk7CisgICAgfQorCitwcml2YXRlOgorICAgIEpTT2Jq
ZWN0KiBwcmVwYXJlRm9yRXhlY3V0aW9uSW1wbChFeGVjU3RhdGUqLCBKU1Njb3BlKiwgQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCk7CisKIHByb3RlY3RlZDoKICAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KFZNJiB2bSkKICAgICB7CkBAIC00MzAsMjQgKzQ0NSw4IEBAIHB1YmxpYzoKIAogICAgIHN0YXRp
YyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKLSAgICBKU09iamVjdCogY29tcGlsZShFeGVjU3Rh
dGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlKQotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQo
ZXhlYy0+dm0oKS5keW5hbWljR2xvYmFsT2JqZWN0KTsKLSAgICAgICAgSlNPYmplY3QqIGVycm9y
ID0gMDsKLSAgICAgICAgaWYgKCFtX2V2YWxDb2RlQmxvY2spCi0gICAgICAgICAgICBlcnJvciA9
IGNvbXBpbGVJbnRlcm5hbChleGVjLCBzY29wZSwgSklUQ29kZTo6Ym90dG9tVGllckpJVCgpKTsK
LSAgICAgICAgQVNTRVJUKCFlcnJvciA9PSAhIW1fZXZhbENvZGVCbG9jayk7Ci0gICAgICAgIHJl
dHVybiBlcnJvcjsKLSAgICB9Ci0gICAgICAgIAotI2lmIEVOQUJMRShERkdfSklUKQotICAgIEpT
T2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBDb21waWxhdGlv
blJlc3VsdCYsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwotICAgIENvbXBpbGF0aW9uUmVzdWx0
IHJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlKFBhc3NSZWZQdHI8REZHOjpQbGFuPik7
Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0gICAgICAgIAogI2lmIEVOQUJMRShKSVQpCiAg
ICAgdm9pZCBqZXR0aXNvbk9wdGltaXplZENvZGUoVk0mKTsKLSAgICBDb21waWxhdGlvblJlc3Vs
dCBqaXRDb21waWxlKEV4ZWNTdGF0ZSopOwogI2VuZGlmCiAKICAgICBFdmFsQ29kZUJsb2NrJiBn
ZW5lcmF0ZWRCeXRlY29kZSgpCkBAIC00ODEsMTAgKzQ4MCwxMCBAQCBwdWJsaWM6CiAgICAgdW5z
aWduZWQgbnVtYmVyT2ZGdW5jdGlvbkRlY2xzKCkgeyByZXR1cm4gbV91bmxpbmtlZEV2YWxDb2Rl
QmxvY2stPm51bWJlck9mRnVuY3Rpb25EZWNscygpOyB9CiAKIHByaXZhdGU6CisgICAgZnJpZW5k
IGNsYXNzIFNjcmlwdEV4ZWN1dGFibGU7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IFNjcmlwdEV4ZWN1dGFibGU6OlN0
cnVjdHVyZUZsYWdzOwogICAgIEV2YWxFeGVjdXRhYmxlKEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJj
ZUNvZGUmLCBib29sKTsKIAotICAgIEpTT2JqZWN0KiBjb21waWxlSW50ZXJuYWwoRXhlY1N0YXRl
KiwgSlNTY29wZSosIEpJVENvZGU6OkpJVFR5cGUsIENvbXBpbGF0aW9uUmVzdWx0KiA9IDAsIHVu
c2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBVSU5UX01BWCk7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAgUmVmUHRyPEV2YWxDb2RlQmxv
Y2s+IG1fZXZhbENvZGVCbG9jazsKQEAgLTUwOCwyNCArNTA3LDggQEAgcHVibGljOgogCiAgICAg
c3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAotICAgIEpTT2JqZWN0KiBjb21waWxlKEV4
ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUpCi0gICAgewotICAgICAgICBSRUxFQVNFX0FT
U0VSVChleGVjLT52bSgpLmR5bmFtaWNHbG9iYWxPYmplY3QpOwotICAgICAgICBKU09iamVjdCog
ZXJyb3IgPSAwOwotICAgICAgICBpZiAoIW1fcHJvZ3JhbUNvZGVCbG9jaykKLSAgICAgICAgICAg
IGVycm9yID0gY29tcGlsZUludGVybmFsKGV4ZWMsIHNjb3BlLCBKSVRDb2RlOjpib3R0b21UaWVy
SklUKCkpOwotICAgICAgICBBU1NFUlQoIWVycm9yID09ICEhbV9wcm9ncmFtQ29kZUJsb2NrKTsK
LSAgICAgICAgcmV0dXJuIGVycm9yOwotICAgIH0KLQotI2lmIEVOQUJMRShERkdfSklUKQotICAg
IEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBDb21waWxh
dGlvblJlc3VsdCYsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwotICAgIENvbXBpbGF0aW9uUmVz
dWx0IHJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlKFBhc3NSZWZQdHI8REZHOjpQbGFu
Pik7Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0gICAgICAgIAogI2lmIEVOQUJMRShKSVQp
CiAgICAgdm9pZCBqZXR0aXNvbk9wdGltaXplZENvZGUoVk0mKTsKLSAgICBDb21waWxhdGlvblJl
c3VsdCBqaXRDb21waWxlKEV4ZWNTdGF0ZSopOwogI2VuZGlmCiAKICAgICBQcm9ncmFtQ29kZUJs
b2NrJiBnZW5lcmF0ZWRCeXRlY29kZSgpCkBAIC01NTcsMTEgKzU0MCwxMiBAQCBwdWJsaWM6CiAg
ICAgRXhlY3V0YWJsZUluZm8gZXhlY3V0YWJsZUluZm8oKSBjb25zdCB7IHJldHVybiBFeGVjdXRh
YmxlSW5mbyhuZWVkc0FjdGl2YXRpb24oKSwgdXNlc0V2YWwoKSwgaXNTdHJpY3RNb2RlKCksIGZh
bHNlKTsgfQogCiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBTY3JpcHRFeGVjdXRhYmxlOwor
ICAgIAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRl
c1Zpc2l0Q2hpbGRyZW4gfCBTY3JpcHRFeGVjdXRhYmxlOjpTdHJ1Y3R1cmVGbGFnczsKIAogICAg
IFByb2dyYW1FeGVjdXRhYmxlKEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmKTsKIAotICAg
IEpTT2JqZWN0KiBjb21waWxlSW50ZXJuYWwoRXhlY1N0YXRlKiwgSlNTY29wZSosIEpJVENvZGU6
OkpJVFR5cGUsIENvbXBpbGF0aW9uUmVzdWx0KiA9IDAsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgg
PSBVSU5UX01BWCk7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOwogCiAgICAgV3JpdGVCYXJyaWVyPFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jaz4g
bV91bmxpbmtlZFByb2dyYW1Db2RlQmxvY2s7CkBAIC02MDAsMjYgKzU4NCw4IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuICptX2NvZGVCbG9ja0ZvckNvbnN0cnVjdDsKICAgICB9CiAgICAgICAg
IAotICAgIFBhc3NSZWZQdHI8RnVuY3Rpb25Db2RlQmxvY2s+IHByb2R1Y2VDb2RlQmxvY2tGb3Io
SlNTY29wZSosIENvZGVTcGVjaWFsaXphdGlvbktpbmQsIEpTT2JqZWN0KiYgZXhjZXB0aW9uKTsK
LQotICAgIEpTT2JqZWN0KiBjb21waWxlRm9yQ2FsbChFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUq
IHNjb3BlKQotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoZXhlYy0+dm0oKS5keW5hbWlj
R2xvYmFsT2JqZWN0KTsKLSAgICAgICAgSlNPYmplY3QqIGVycm9yID0gMDsKLSAgICAgICAgaWYg
KCFtX2NvZGVCbG9ja0ZvckNhbGwpCi0gICAgICAgICAgICBlcnJvciA9IGNvbXBpbGVGb3JDYWxs
SW50ZXJuYWwoZXhlYywgc2NvcGUsIEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSk7Ci0gICAgICAg
IEFTU0VSVCghZXJyb3IgPT0gISFtX2NvZGVCbG9ja0ZvckNhbGwpOwotICAgICAgICByZXR1cm4g
ZXJyb3I7Ci0gICAgfQotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgSlNPYmplY3QqIGNvbXBp
bGVPcHRpbWl6ZWRGb3JDYWxsKEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBDb21waWxhdGlvblJlc3Vs
dCYsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwotICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlcGxh
Y2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlRm9yQ2FsbChQYXNzUmVmUHRyPERGRzo6UGxhbj4p
OwotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotICAgICAgICAKICNpZiBFTkFCTEUoSklUKQog
ICAgIHZvaWQgamV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ2FsbChWTSYpOwotICAgIENvbXBpbGF0
aW9uUmVzdWx0IGppdENvbXBpbGVGb3JDYWxsKEV4ZWNTdGF0ZSopOwogI2VuZGlmCiAKICAgICBi
b29sIGlzR2VuZXJhdGVkRm9yQ2FsbCgpIGNvbnN0CkBAIC02MzMsMjQgKzU5OSw4IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuICptX2NvZGVCbG9ja0ZvckNhbGw7CiAgICAgfQogCi0gICAgSlNP
YmplY3QqIGNvbXBpbGVGb3JDb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29w
ZSkKLSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMtPnZtKCkuZHluYW1pY0dsb2Jh
bE9iamVjdCk7Ci0gICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IDA7Ci0gICAgICAgIGlmICghbV9j
b2RlQmxvY2tGb3JDb25zdHJ1Y3QpCi0gICAgICAgICAgICBlcnJvciA9IGNvbXBpbGVGb3JDb25z
dHJ1Y3RJbnRlcm5hbChleGVjLCBzY29wZSwgSklUQ29kZTo6Ym90dG9tVGllckpJVCgpKTsKLSAg
ICAgICAgQVNTRVJUKCFlcnJvciA9PSAhIW1fY29kZUJsb2NrRm9yQ29uc3RydWN0KTsKLSAgICAg
ICAgcmV0dXJuIGVycm9yOwotICAgIH0KLQotI2lmIEVOQUJMRShERkdfSklUKQotICAgIEpTT2Jq
ZWN0KiBjb21waWxlT3B0aW1pemVkRm9yQ29uc3RydWN0KEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBD
b21waWxhdGlvblJlc3VsdCYsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwotICAgIENvbXBpbGF0
aW9uUmVzdWx0IHJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlRm9yQ29uc3RydWN0KFBh
c3NSZWZQdHI8REZHOjpQbGFuPik7Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0gICAgICAg
IAogI2lmIEVOQUJMRShKSVQpCiAgICAgdm9pZCBqZXR0aXNvbk9wdGltaXplZENvZGVGb3JDb25z
dHJ1Y3QoVk0mKTsKLSAgICBDb21waWxhdGlvblJlc3VsdCBqaXRDb21waWxlRm9yQ29uc3RydWN0
KEV4ZWNTdGF0ZSopOwogI2VuZGlmCiAKICAgICBib29sIGlzR2VuZXJhdGVkRm9yQ29uc3RydWN0
KCkgY29uc3QKQEAgLTY2NCwzOSArNjE0LDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gKm1f
Y29kZUJsb2NrRm9yQ29uc3RydWN0OwogICAgIH0KICAgICAgICAgCi0gICAgSlNPYmplY3QqIGNv
bXBpbGVGb3IoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSwgQ29kZVNwZWNpYWxpemF0
aW9uS2luZCBraW5kKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGV4ZWMtPmNhbGxlZSgpKTsKLSAg
ICAgICAgQVNTRVJUKGV4ZWMtPmNhbGxlZSgpLT5pbmhlcml0cyhKU0Z1bmN0aW9uOjppbmZvKCkp
KTsKLSAgICAgICAgQVNTRVJUKGpzQ2FzdDxKU0Z1bmN0aW9uKj4oZXhlYy0+Y2FsbGVlKCkpLT5q
c0V4ZWN1dGFibGUoKSA9PSB0aGlzKTsKLQotICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2Fs
bCkKLSAgICAgICAgICAgIHJldHVybiBjb21waWxlRm9yQ2FsbChleGVjLCBzY29wZSk7Ci0gICAg
ICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOwotICAgICAgICByZXR1cm4gY29t
cGlsZUZvckNvbnN0cnVjdChleGVjLCBzY29wZSk7Ci0gICAgfQotICAgICAgICAKLSNpZiBFTkFC
TEUoREZHX0pJVCkKLSAgICBKU09iamVjdCogY29tcGlsZU9wdGltaXplZEZvcihFeGVjU3RhdGUq
IGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCBDb21waWxhdGlvblJlc3VsdCYgcmVzdWx0LCB1bnNpZ25l
ZCBieXRlY29kZUluZGV4LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCi0gICAgewotICAg
ICAgICBBU1NFUlQoZXhlYy0+Y2FsbGVlKCkpOwotICAgICAgICBBU1NFUlQoZXhlYy0+Y2FsbGVl
KCktPmluaGVyaXRzKEpTRnVuY3Rpb246OmluZm8oKSkpOwotICAgICAgICBBU1NFUlQoanNDYXN0
PEpTRnVuY3Rpb24qPihleGVjLT5jYWxsZWUoKSktPmpzRXhlY3V0YWJsZSgpID09IHRoaXMpOwot
ICAgICAgICAgICAgCi0gICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQotICAgICAgICAg
ICAgcmV0dXJuIGNvbXBpbGVPcHRpbWl6ZWRGb3JDYWxsKGV4ZWMsIHNjb3BlLCByZXN1bHQsIGJ5
dGVjb2RlSW5kZXgpOwotICAgICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsK
LSAgICAgICAgcmV0dXJuIGNvbXBpbGVPcHRpbWl6ZWRGb3JDb25zdHJ1Y3QoZXhlYywgc2NvcGUs
IHJlc3VsdCwgYnl0ZWNvZGVJbmRleCk7Ci0gICAgfQotICAgICAgICAKLSAgICBDb21waWxhdGlv
blJlc3VsdCByZXBsYWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZUZvcihQYXNzUmVmUHRyPERG
Rzo6UGxhbj4gcGxhbiwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQotICAgIHsKLSAgICAg
ICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCi0gICAgICAgICAgICByZXR1cm4gcmVwbGFjZVdp
dGhEZWZlcnJlZE9wdGltaXplZENvZGVGb3JDYWxsKHBsYW4pOwotICAgICAgICByZXR1cm4gcmVw
bGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGVGb3JDb25zdHJ1Y3QocGxhbik7Ci0gICAgfQot
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotCiAjaWYgRU5BQkxFKEpJVCkKICAgICB2b2lkIGpl
dHRpc29uT3B0aW1pemVkQ29kZUZvcihWTSYgdm0sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2lu
ZCkKICAgICB7CkBAIC03MDcsMTQgKzYyNCw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGpldHRp
c29uT3B0aW1pemVkQ29kZUZvckNvbnN0cnVjdCh2bSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAg
ICAgIAotICAgIENvbXBpbGF0aW9uUmVzdWx0IGppdENvbXBpbGVGb3IoRXhlY1N0YXRlKiBleGVj
LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCi0gICAgewotICAgICAgICBpZiAoa2luZCA9
PSBDb2RlRm9yQ2FsbCkKLSAgICAgICAgICAgIHJldHVybiBqaXRDb21waWxlRm9yQ2FsbChleGVj
KTsKLSAgICAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7Ci0gICAgICAgIHJl
dHVybiBqaXRDb21waWxlRm9yQ29uc3RydWN0KGV4ZWMpOwotICAgIH0KICNlbmRpZgogICAgICAg
ICAKICAgICBib29sIGlzR2VuZXJhdGVkRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkK
QEAgLTc2NCw5ICs2NzMsNiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEZ1bmN0aW9uRXhlY3V0
YWJsZShWTSYsIGNvbnN0IFNvdXJjZUNvZGUmLCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSos
IHVuc2lnbmVkIGZpcnN0TGluZSwgdW5zaWduZWQgbGFzdExpbmUsIHVuc2lnbmVkIHN0YXJ0Q29s
dW1uKTsKIAotICAgIEpTT2JqZWN0KiBjb21waWxlRm9yQ2FsbEludGVybmFsKEV4ZWNTdGF0ZSos
IEpTU2NvcGUqLCBKSVRDb2RlOjpKSVRUeXBlLCBDb21waWxhdGlvblJlc3VsdCogPSAwLCB1bnNp
Z25lZCBieXRlY29kZUluZGV4ID0gVUlOVF9NQVgpOwotICAgIEpTT2JqZWN0KiBjb21waWxlRm9y
Q29uc3RydWN0SW50ZXJuYWwoRXhlY1N0YXRlKiwgSlNTY29wZSosIEpJVENvZGU6OkpJVFR5cGUs
IENvbXBpbGF0aW9uUmVzdWx0KiA9IDAsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBVSU5UX01B
WCk7Ci0gICAgICAgIAogICAgIFJlZlB0cjxGdW5jdGlvbkNvZGVCbG9jaz4mIGNvZGVCbG9ja0Zv
cihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiAgICAgewogICAgICAgICBpZiAoa2luZCA9
PSBDb2RlRm9yQ2FsbCkKQEAgLTc4Niw2ICs2OTIsOCBAQCBwcml2YXRlOgogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogCisgICAgZnJpZW5kIGNsYXNzIFNjcmlwdEV4ZWN1dGFibGU7CisK
ICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNWaXNp
dENoaWxkcmVuIHwgU2NyaXB0RXhlY3V0YWJsZTo6U3RydWN0dXJlRmxhZ3M7CiAgICAgV3JpdGVC
YXJyaWVyPFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlPiBtX3VubGlua2VkRXhlY3V0YWJsZTsK
ICAgICBSZWZQdHI8RnVuY3Rpb25Db2RlQmxvY2s+IG1fY29kZUJsb2NrRm9yQ2FsbDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGlvbkhhcm5lc3MuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRpb25IYXJuZXNzLmgJ
KHJldmlzaW9uIDE1NDYzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1
dGlvbkhhcm5lc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxNjcgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEV4ZWN1
dGlvbkhhcm5lc3NfaAotI2RlZmluZSBFeGVjdXRpb25IYXJuZXNzX2gKLQotI2luY2x1ZGUgPHd0
Zi9QbGF0Zm9ybS5oPgotCi0jaW5jbHVkZSAiQ29tcGlsYXRpb25SZXN1bHQuaCIKLSNpbmNsdWRl
ICJERkdEcml2ZXIuaCIKLSNpbmNsdWRlICJERkdQbGFuLmgiCi0jaW5jbHVkZSAiSklURHJpdmVy
LmgiCi0jaW5jbHVkZSAiTExJbnRFbnRyeXBvaW50cy5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KLWlubGluZSBDb21waWxhdGlvblJlc3Vs
dCBwcmVwYXJlRm9yRXhlY3V0aW9uSW1wbCgKLSAgICBFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9j
a1R5cGUqIGNvZGVCbG9jaywgUmVmUHRyPEpJVENvZGU+JiBqaXRDb2RlLAotICAgIEpJVENvZGU6
OkpJVFR5cGUgaml0VHlwZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKLXsKLSAgICBVTlVTRURf
UEFSQU0oYnl0ZWNvZGVJbmRleCk7Ci0jaWYgRU5BQkxFKExMSU5UKQotICAgIGlmIChKSVRDb2Rl
Ojppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKSkgewotICAgICAgICAvLyBTdGFydCBvZmYgaW4gdGhl
IGxvdyBsZXZlbCBpbnRlcnByZXRlci4KLSAgICAgICAgTExJbnQ6OmdldEVudHJ5cG9pbnQoZXhl
Yy0+dm0oKSwgY29kZUJsb2NrLCBqaXRDb2RlKTsKLSAgICAgICAgaWYgKGV4ZWMtPnZtKCkubV9w
ZXJCeXRlY29kZVByb2ZpbGVyKQotICAgICAgICAgICAgZXhlYy0+dm0oKS5tX3BlckJ5dGVjb2Rl
UHJvZmlsZXItPmVuc3VyZUJ5dGVjb2Rlc0Zvcihjb2RlQmxvY2spOwotICAgICAgICByZXR1cm4g
Q29tcGlsYXRpb25TdWNjZXNzZnVsOwotICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUoTExJTlQpCi0j
aWYgRU5BQkxFKEpJVCkKLSAgICByZXR1cm4gaml0Q29tcGlsZUlmQXBwcm9wcmlhdGVJbXBsKAot
ICAgICAgICBleGVjLCBjb2RlQmxvY2ssIGppdENvZGUsIGppdFR5cGUsIGJ5dGVjb2RlSW5kZXgs
Ci0gICAgICAgIEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGppdFR5cGUpID8gSklUQ29tcGlsYXRp
b25NdXN0U3VjY2VlZCA6IEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7Ci0jZW5kaWYKLSAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBDb21waWxhdGlvbkZhaWxlZDsK
LX0KLQotaW5saW5lIENvbXBpbGF0aW9uUmVzdWx0IHByZXBhcmVGdW5jdGlvbkZvckV4ZWN1dGlv
bkltcGwoCi0gICAgRXhlY1N0YXRlKiBleGVjLCBGdW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2Nr
LCBSZWZQdHI8SklUQ29kZT4mIGppdENvZGUsCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBq
aXRDb2RlV2l0aEFyaXR5Q2hlY2ssIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSwKLSAgICB1bnNp
Z25lZCBieXRlY29kZUluZGV4LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCi17Ci0gICAg
VU5VU0VEX1BBUkFNKGJ5dGVjb2RlSW5kZXgpOwotICAgIFVOVVNFRF9QQVJBTShqaXRDb2RlV2l0
aEFyaXR5Q2hlY2spOwotI2lmIEVOQUJMRShMTElOVCkKLSAgICBpZiAoSklUQ29kZTo6aXNCYXNl
bGluZUNvZGUoaml0VHlwZSkpIHsKLSAgICAgICAgLy8gU3RhcnQgb2ZmIGluIHRoZSBsb3cgbGV2
ZWwgaW50ZXJwcmV0ZXIuCi0gICAgICAgIExMSW50OjpnZXRGdW5jdGlvbkVudHJ5cG9pbnQoZXhl
Yy0+dm0oKSwga2luZCwgaml0Q29kZSwgaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKLSAgICAgICAg
aWYgKGV4ZWMtPnZtKCkubV9wZXJCeXRlY29kZVByb2ZpbGVyKQotICAgICAgICAgICAgZXhlYy0+
dm0oKS5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmVuc3VyZUJ5dGVjb2Rlc0Zvcihjb2RlQmxvY2sp
OwotICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25TdWNjZXNzZnVsOwotICAgIH0KLSNlbHNlCi0g
ICAgVU5VU0VEX1BBUkFNKGtpbmQpOwotI2VuZGlmIC8vIEVOQUJMRShMTElOVCkKLSNpZiBFTkFC
TEUoSklUKQotICAgIHJldHVybiBqaXRDb21waWxlRnVuY3Rpb25JZkFwcHJvcHJpYXRlSW1wbCgK
LSAgICAgICAgZXhlYywgY29kZUJsb2NrLCBqaXRDb2RlLCBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ss
IGppdFR5cGUsIGJ5dGVjb2RlSW5kZXgsCi0gICAgICAgIEpJVENvZGU6OmlzQmFzZWxpbmVDb2Rl
KGppdFR5cGUpID8gSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCA6IEpJVENvbXBpbGF0aW9uQ2Fu
RmFpbCk7Ci0jZW5kaWYKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJl
dHVybiBDb21waWxhdGlvbkZhaWxlZDsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2Nr
VHlwZT4KLWlubGluZSBDb21waWxhdGlvblJlc3VsdCBpbnN0YWxsT3B0aW1pemVkQ29kZSgKLSAg
ICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQsIFJlZlB0cjxDb2RlQmxvY2tUeXBlPiYgc2luaywg
Q29kZUJsb2NrVHlwZSogY29kZUJsb2NrLAotICAgIFBhc3NSZWZQdHI8SklUQ29kZT4gaml0Q29k
ZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGppdENvZGVXaXRoQXJpdHlDaGVjaywKLSAgICBpbnQq
IG51bVBhcmFtZXRlcnMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGppdENvZGVXaXRoQXJpdHlDaGVj
ayk7Ci0gICAgaWYgKHJlc3VsdCAhPSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpCi0gICAgICAgIHJl
dHVybiByZXN1bHQ7Ci0gICAgCi0jaWYgRU5BQkxFKEpJVCkKLSAgICBjb2RlQmxvY2stPnNldEpJ
VENvZGUoaml0Q29kZSwgaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKLSNlbmRpZgotCi0gICAgc2lu
ayA9IGNvZGVCbG9jazsKLSAgICAKLSAgICBpZiAobnVtUGFyYW1ldGVycykKLSAgICAgICAgKm51
bVBhcmFtZXRlcnMgPSBjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsKLSAgICAKLSAgICBpZiAo
aml0Q29kZSkKLSAgICAgICAgY29kZUJsb2NrLT52bSgpLT5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5
Q29zdChzaXplb2YoKmNvZGVCbG9jaykgKyBqaXRDb2RlLT5zaXplKCkpOwotICAgIGVsc2UKLSAg
ICAgICAgY29kZUJsb2NrLT52bSgpLT5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29zdChzaXplb2Yo
KmNvZGVCbG9jaykpOwotICAgIAotICAgIGlmIChzaW5rICE9IGNvZGVCbG9jaykgewotICAgICAg
ICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgd2UgR0MgYW5kIGRlY2lkZSB0aGF0IHRoZSBjb2RlIGlz
IGludmFsaWQuCi0gICAgICAgIHJldHVybiBDb21waWxhdGlvbkludmFsaWRhdGVkOwotICAgIH0K
LSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxv
Y2tUeXBlPgotaW5saW5lIENvbXBpbGF0aW9uUmVzdWx0IHByZXBhcmVGb3JFeGVjdXRpb24oCi0g
ICAgRXhlY1N0YXRlKiBleGVjLCBSZWZQdHI8Q29kZUJsb2NrVHlwZT4mIHNpbmssIENvZGVCbG9j
a1R5cGUqIGNvZGVCbG9jaywKLSAgICBSZWZQdHI8SklUQ29kZT4mIGppdENvZGUsIEpJVENvZGU6
OkpJVFR5cGUgaml0VHlwZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKLXsKLSAgICBDb21waWxh
dGlvblJlc3VsdCByZXN1bHQgPSBwcmVwYXJlRm9yRXhlY3V0aW9uSW1wbChleGVjLCBjb2RlQmxv
Y2ssIGppdENvZGUsIGppdFR5cGUsIGJ5dGVjb2RlSW5kZXgpOwotICAgIHJldHVybiBpbnN0YWxs
T3B0aW1pemVkQ29kZShyZXN1bHQsIHNpbmssIGNvZGVCbG9jaywgaml0Q29kZSwgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyKCksIDApOwotfQotCi1pbmxpbmUgQ29tcGlsYXRpb25SZXN1bHQgcHJlcGFy
ZUZ1bmN0aW9uRm9yRXhlY3V0aW9uKAotICAgIEV4ZWNTdGF0ZSogZXhlYywgUmVmUHRyPEZ1bmN0
aW9uQ29kZUJsb2NrPiYgc2luaywgRnVuY3Rpb25Db2RlQmxvY2sqIGNvZGVCbG9jaywKLSAgICBS
ZWZQdHI8SklUQ29kZT4mIGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgaml0Q29kZVdp
dGhBcml0eUNoZWNrLAotICAgIGludCYgbnVtUGFyYW1ldGVycywgSklUQ29kZTo6SklUVHlwZSBq
aXRUeXBlLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LAotICAgIENvZGVTcGVjaWFsaXphdGlvbktp
bmQga2luZCkKLXsKLSAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBwcmVwYXJlRnVuY3Rp
b25Gb3JFeGVjdXRpb25JbXBsKGV4ZWMsIGNvZGVCbG9jaywKLSAgICAgICAgaml0Q29kZSwgaml0
Q29kZVdpdGhBcml0eUNoZWNrLCBqaXRUeXBlLCBieXRlY29kZUluZGV4LCBraW5kKTsKLSAgICBy
ZXR1cm4gaW5zdGFsbE9wdGltaXplZENvZGUocmVzdWx0LCBzaW5rLCBjb2RlQmxvY2ssIGppdENv
ZGUsIGppdENvZGVXaXRoQXJpdHlDaGVjaywgJm51bVBhcmFtZXRlcnMpOwotfQotCi0jaWYgRU5B
QkxFKERGR19KSVQpCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgotaW5saW5lIENv
bXBpbGF0aW9uUmVzdWx0IHJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlKAotICAgIFBh
c3NSZWZQdHI8REZHOjpQbGFuPiBwYXNzZWRQbGFuLCBSZWZQdHI8Q29kZUJsb2NrVHlwZT4mIHNp
bmssIFJlZlB0cjxKSVRDb2RlPiYgaml0Q29kZSwKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIq
IGppdENvZGVXaXRoQXJpdHlDaGVjaywgaW50KiBudW1QYXJhbWV0ZXJzKQotewotICAgIFJlZlB0
cjxERkc6OlBsYW4+IHBsYW4gPSBwYXNzZWRQbGFuOwotICAgIENvbXBpbGF0aW9uUmVzdWx0IHJl
c3VsdCA9IERGRzo6dHJ5RmluYWxpemVQbGFuKHBsYW4sIGppdENvZGUsIGppdENvZGVXaXRoQXJp
dHlDaGVjayk7Ci0gICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgewotICAgICAgICBkYXRh
TG9nKAotICAgICAgICAgICAgIkRlZmVycmVkIG9wdGltaXppbmcgY29tcGlsYXRpb24gIiwgKnBs
YW4tPmtleSgpLCAiIC0+ICIsICpwbGFuLT5jb2RlQmxvY2ssCi0gICAgICAgICAgICAiIHJlc3Vs
dDogIiwgcmVzdWx0LCAiXG4iKTsKLSAgICB9Ci0gICAgaWYgKHJlc3VsdCA9PSBDb21waWxhdGlv
blN1Y2Nlc3NmdWwpCi0gICAgICAgIHBsYW4tPmNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+dW5s
aW5rSW5jb21pbmdDYWxscygpOwotICAgIHJldHVybiBpbnN0YWxsT3B0aW1pemVkQ29kZSgKLSAg
ICAgICAgcmVzdWx0LCBzaW5rLCBzdGF0aWNfY2FzdDxDb2RlQmxvY2tUeXBlKj4ocGxhbi0+Y29k
ZUJsb2NrLmdldCgpKSwgaml0Q29kZSwKLSAgICAgICAgaml0Q29kZVdpdGhBcml0eUNoZWNrID8g
KmppdENvZGVXaXRoQXJpdHlDaGVjayA6IE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpLAotICAgICAg
ICBudW1QYXJhbWV0ZXJzKTsKLX0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLQotfSAvLyBu
YW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBFeGVjdXRpb25IYXJuZXNzX2gKLQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>209837</attachid>
            <date>2013-08-27 19:43:38 -0700</date>
            <delta_ts>2013-08-27 21:46:03 -0700</delta_ts>
            <desc>almost</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>116604</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU0NzE4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3MCBA
QAorMjAxMy0wOC0yNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IENvZGVCbG9jayBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIHNob3VsZCBiZSBzaW1wbGlm
aWVkIGFuZCByYXRpb25hbGl6ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEyMDMyNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorICAgICAgICAKKyAgICAgICAgUHJldmlvdXNseSBFeGVjdXRhYmxlIG93bmVkIHRoZSBjb2Rl
IGZvciBnZW5lcmF0aW5nIEpJVCBjb2RlOyB5b3UgYWx3YXlzIGhhZAorICAgICAgICB0byBnbyB0
aHJvdWdoIEV4ZWN1dGFibGUuIEJ1dCBvZnRlbiB5b3UgYWxzbyBoYWQgdG8gZ28gdGhyb3VnaCBD
b2RlQmxvY2ssCisgICAgICAgIGJlY2F1c2UgU2NyaXB0RXhlY3V0YWJsZSBjb3VsZG4ndCBoYXZl
IHZpcnR1YWwgbWV0aG9kcywgYnV0IENvZGVCbG9jayBjb3VsZC4KKyAgICAgICAgU28geW91J2Qg
YXNrIENvZGVCbG9jayB0byBkbyBzb21ldGhpbmcsIHdoaWNoIHdvdWxkIGRpc3BhdGNoIHRocm91
Z2ggYQorICAgICAgICB2aXJ0dWFsIG1ldGhvZCB0aGF0IHdvdWxkIHNlbGVjdCB0aGUgYXBwcm9w
cmlhdGUgRXhlY3V0YWJsZSBzdWJ0eXBlJ3MgbWV0aG9kLgorICAgICAgICBUaGlzIGFsbCBtZWFu
dCB0aGF0IHRoZSBzYW1lIGNvZGUgd291bGQgb2Z0ZW4gYmUgZHVwbGljYXRlZCwgYmVjYXVzZSBt
b3N0IG9mCisgICAgICAgIHRoZSB3b3JrIG5lZWRlZCB0byBjb21waWxlIHNvbWV0aGluZyB3YXMg
aWRlbnRpY2FsIHJlZ2FyZGxlc3Mgb2YgY29kZSB0eXBlLgorICAgICAgICBCdXQgdGhlbiB3ZSB0
cmllZCB0byBmaXggdGhpcywgYnkgaGF2aW5nIHRlbXBsYXRpemVkIGhlbHBlcnMgaW4KKyAgICAg
ICAgRXhlY3V0aW9uSGFybmVzcy5oIGFuZCBKSVREcml2ZXIuaC4gVGhlIHJlc3VsdCB3YXMgdGhh
dCBpZiB5b3Ugd2FudGVkIHRvIGZpbmQKKyAgICAgICAgb3V0IHdoYXQgaGFwcGVuZWQgd2hlbiB5
b3UgYXNrZWQgZm9yIHNvbWV0aGluZyB0byBiZSBjb21waWxlZCwgeW91J2QgZ28gb24gYQorICAg
ICAgICB3aWxkIHJpZGUgdGhhdCBzdGFydGVkIHdpdGggQ29kZUJsb2NrLCB0b3VjaGVkIHVwb24g
RXhlY3V0YWJsZSwgYW5kIHRoZW4KKyAgICAgICAgcmljb2NoZXRlZCBpbnRvIGVpdGhlciBFeGVj
dXRpb25IYXJuZXNzIG9yIEpJVERyaXZlciAobGlrZWx5IGJvdGgpLgorICAgICAgICAKKyAgICAg
ICAgQW5vdGhlciBhd2t3YXJkbmVzcyB3YXMgdGhhdCBmb3IgY29uY3VycmVudCBjb21waWxlcywg
dGhlIERGRzo6V29ya2xpc3QgaGFkCisgICAgICAgIHN1cGVyLXNwZWNpYWwgaW5zaWRlIGtub3ds
ZWRnZSBvZiB3aGF0IEpJVFN0dWJzLmNwcCdzIGN0aV9vcHRpbWl6ZSB3b3VsZCBoYXZlCisgICAg
ICAgIGRvbmUgb25jZSB0aGUgY29tcGlsYXRpb24gZmluaXNoZWQuCisgICAgICAgIAorICAgICAg
ICBBbHNvLCBtb3N0IG9mIHRoZSBERkcgSklUIGRyaXZlcnMgYXNzdW1lZCB0aGF0IHRoZXkgY291
bGRuJ3QgaW5zdGFsbCB0aGUKKyAgICAgICAgSklUQ29kZSBpbnRvIHRoZSBDb2RlQmxvY2sgZGly
ZWN0bHkgLSBpbnN0ZWFkIHRoZXkgd291bGQgcmV0dXJuIGl0IHZpYSBhCisgICAgICAgIHJlZmVy
ZW5jZSwgd2hpY2ggaGFwcGVuZWQgdG8gYmUgYSByZWZlcmVuY2UgdG8gdGhlIEpJVENvZGUgcG9p
bnRlciBpbgorICAgICAgICBFeGVjdXRhYmxlLiBUaGlzIHdhcyBzdXBlciB3ZWlyZC4KKyAgICAg
ICAgCisgICAgICAgIEZpbmFsbHksIHRoZXJlIHdhcyBubyBub3Rpb24gb2YgY29tcGlsaW5nIGNv
ZGUgaW50byBhIHNwZWNpYWwgQ29kZUJsb2NrIHRoYXQKKyAgICAgICAgd2Fzbid0IHVzZWQgZm9y
IGhhbmRsaW5nIGNhbGxzIGludG8gYW4gRXhlY3V0YWJsZS4gSSdkIGxpa2UgdGhpcyBmb3IgRlRM
IE9TUgorICAgICAgICBlbnRyeS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggc29sdmVz
IHRoZXNlIHByb2JsZW1zIGJ5IHJlZHVjaW5nIGFsbCBvZiB0aGF0IGNvbXBsZXhpdHkgaW50byBq
dXN0CisgICAgICAgIHRocmVlIHByaW1pdGl2ZXM6CisgICAgICAgIAorICAgICAgICAtIEV4ZWN1
dGFibGU6Om5ld0NvZGVCbG9jaygpLiBUaGlzIGdpdmVzIHlvdSBhIG5ldyBjb2RlIGJsb2NrLCBl
aXRoZXIgZm9yIGNhbGwKKyAgICAgICAgICBvciBmb3IgY29uc3RydWN0LCBhbmQgZWl0aGVyIHRv
IHNlcnZlIGFzIHRoZSBiYXNlbGluZSBjb2RlIG9yIHRoZSBvcHRpbWl6ZWQKKyAgICAgICAgICBj
b2RlLiBUaGUgbmV3IGNvZGUgYmxvY2sgaXMgdGhlbiBvd25lZCBieSB0aGUgY2FsbGVyOyBFeGVj
dXRhYmxlIGRvZXNuJ3QKKyAgICAgICAgICByZWdpc3RlciBpdCBhbnl3aGVyZS4gVGhlIG5ldyBj
b2RlIGJsb2NrIGhhcyBubyBKSVRDb2RlIGFuZCBpc24ndCBjYWxsYWJsZSwKKyAgICAgICAgICBi
dXQgaXQgaGFzIGFsbCBvZiB0aGUgYnl0ZWNvZGUuCisgICAgICAgIAorICAgICAgICAtIENvZGVC
bG9jazo6cHJlcGFyZUZvckV4ZWN1dGlvbigpLiBUaGlzIHRha2VzIHRoZSBDb2RlQmxvY2sncyBi
eXRlY29kZSBhbmQKKyAgICAgICAgICBwcm9kdWNlcyBhIEpJVENvZGUsIGFuZCB0aGVuIGluc3Rh
bGxzIHRoZSBKSVRDb2RlIGludG8gdGhlIENvZGVCbG9jay4gVGhpcworICAgICAgICAgIG1ldGhv
ZCB0YWtlcyBhIEpJVFR5cGUsIGFuZCBhbHdheXMgY29tcGlsZXMgd2l0aCB0aGF0IEpJVC4gSWYg
eW91IGFzayBmb3IKKyAgICAgICAgICBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rIHRoZW4geW91
J2xsIGdldCBKSVRDb2RlIHRoYXQganVzdCBwb2ludHMgdG8gdGhlCisgICAgICAgICAgTExJbnQg
ZW50cnlwb2ludHMuIE9uY2UgdGhpcyByZXR1cm5zLCBpdCBpcyBwb3NzaWJsZSB0byBjYWxsIGlu
dG8gdGhlCisgICAgICAgICAgQ29kZUJsb2NrIGlmIHlvdSBkbyBzbyBtYW51YWxseSAtIGJ1dCB0
aGUgRXhlY3V0YWJsZSBzdGlsbCB3b24ndCBrbm93IGFib3V0CisgICAgICAgICAgaXQgc28gSlMg
Y2FsbHMgdG8gdGhhdCBFeGVjdXRhYmxlIHdpbGwgc3RpbGwgYmUgcm91dGVkIHRvIHdoYXRldmVy
IENvZGVCbG9jaworICAgICAgICAgIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgRXhlY3V0YWJsZS4K
KyAgICAgICAgCisgICAgICAgIC0gRXhlY3V0YWJsZTo6aW5zdGFsbENvZGUoKS4gVGhpcyB0YWtl
cyBhIENvZGVCbG9jayBhbmQgbWFrZXMgaXQgdGhlIGNvZGUtZm9yLQorICAgICAgICAgIGVudHJ5
IGZvciB0aGF0IEV4ZWN1dGFibGUuIFRoaXMgaW52b2x2ZXMgdW5saW5raW5nIHRoZSBFeGVjdXRh
YmxlJ3MgbGFzdAorICAgICAgICAgIENvZGVCbG9jaywgaWYgdGhlcmUgd2FzIG9uZS4gVGhpcyBh
bHNvIHRlbGxzIHRoZSBHQyBhYm91dCBhbnkgZWZmZWN0IG9uCisgICAgICAgICAgbWVtb3J5IHVz
YWdlIGFuZCBkb2VzIGEgYnVuY2ggb2Ygd2VpcmQgZGF0YSBzdHJ1Y3R1cmUgcmV3aXJpbmcsIHNp
bmNlCisgICAgICAgICAgRXhlY3V0YWJsZSBjYWNoZXMgc29tZSBvZiBDb2RlQmxvY2sncyBmaWVs
ZHMgZm9yIHRoZSBiZW5lZml0IG9mIHZpcnR1YWwgY2FsbAorICAgICAgICAgIGZhc3QgcGF0aHMu
CisgICAgICAgIAorICAgICAgICBUaGlzIGZ1bmN0aW9uYWxpdHkgaXMgdGhlbiB3cmFwcGVkIGFy
b3VuZCB0aHJlZSBjb252ZW5pZW5jZSBtZXRob2RzOgorICAgICAgICAKKyAgICAgICAgLSBFeGVj
dXRhYmxlOjpwcmVwYXJlRm9yRXhlY3V0aW9uKCkuIElmIHRoZXJlIGlzIG5vIGNvZGUgYmxvY2sg
Zm9yIHRoYXQKKyAgICAgICAgICBFeGVjdXRhYmxlLCB0aGVuIG9uZSBpcyBjcmVhdGVkIChuZXdD
b2RlQmxvY2soKSksIGNvbXBpbGVkCisgICAgICAgICAgKENvZGVCbG9jazo6cHJlcGFyZUZvckV4
ZWN1dGlvbigpKSBhbmQgaW5zdGFsbGVkIChpbnN0YWxsQ29kZSgpKS4KKyAgICAgICAgCisgICAg
ICAgIC0gQ29kZUJsb2NrOjpuZXdSZXBsYWNlbWVudCgpLiBBc2tzIHRoZSBFeGVjdXRhYmxlIGZv
ciBhIG5ldyBDb2RlQmxvY2sgdGhhdAorICAgICAgICAgIGNhbiBzZXJ2ZSBhcyBhbiBvcHRpbWl6
ZWQgcmVwbGFjZW1lbnQgb2YgdGhlIGN1cnJlbnQgb25lLgorICAgICAgICAKKyAgICAgICAgLSBD
b2RlQmxvY2s6Omluc3RhbGwoKS4gQXNrcyB0aGUgRXhlY3V0YWJsZSB0byBpbnN0YWxsIHRoaXMg
Y29kZSBibG9jay4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggYWxsb3dzIG1lIHRvIGtp
bGwgKmEgbG90KiBvZiBjb2RlIGFuZCB0byByZW1vdmUgYSBsb3Qgb2YKKyAgICAgICAgc3BlY2lh
bGl6YXRpb25zIGZvciBmdW5jdGlvbnMgdnMuIG5vdC1mdW5jdGlvbnMsIGFuZCBhIGxvdCBvZiBw
bGFjZXMgd2hlcmUgd2UKKyAgICAgICAgcGFzcyBhcm91bmQgSklUQ29kZSByZWZlcmVuY2VzIGFu
ZCBzdWNoLgorICAgICAgICAKKyAgICAgICAgSXQgYWxzbyBhbGxvd3MgbWUgdG8gd29yayBvbiBG
VEwgT1NSIGVudHJ5IGFuZCB0aWVyLXVwOgorICAgICAgICAKKyAgICAgICAgLSBGVEwgdGllci11
cDogdGhpcyB3aWxsIGludm9sdmUgREZHT3BlcmF0aW9ucy5jcHAgYXNraW5nIHRoZSBERkc6Oldv
cmtsaXN0CisgICAgICAgICAgdG8gZG8gc29tZSBjb21waWxhdGlvbiwgYnV0IGl0IHdpbGwgcmVx
dWlyZSB0aGUgREZHOjpXb3JrbGlzdCB0byBkbworICAgICAgICAgIHNvbWV0aGluZyBkaWZmZXJl
bnQgdGhhbiB3aGF0IEpJVFN0dWJzLmNwcCB3b3VsZCB3YW50LCBvbmNlIHRoZSBjb21waWxhdGlv
bgorICAgICAgICAgIGZpbmlzaGVzLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBjYWxsYmFjayBt
ZWNoYW5pc20gZm9yIHRoYXQgcHVycG9zZS4KKyAgICAgICAgCisgICAgICAgIC0gRlRMIE9TUiBl
bnRyeTogdGhpcyB3aWxsIGludm9sdmUgY3JlYXRpbmcgYSBzcGVjaWFsIGF1dG8tamV0dGlzb25l
ZAorICAgICAgICAgIENvZGVCbG9jayB0aGF0IGlzIHVzZWQgb25seSBmb3IgRlRMIE9TUiBlbnRy
eS4gVGhlIG5ldyBzZXQgb2YgcHJpbWl0aXZlcworICAgICAgICAgIGFsbG93cyBmb3IgdGhpczog
RXhlY3V0YWJsZSBjYW4gdmVuZCB5b3UgYSBmcmVzaCBuZXcgQ29kZUJsb2NrLCBhbmQgeW91IGNh
bgorICAgICAgICAgIGFzayB0aGF0IENvZGVCbG9jayB0byBjb21waWxlIGl0c2VsZiB3aXRoIGFu
eSBKSVQgb2YgeW91ciBjaG9vc2luZy4gT3IgeW91CisgICAgICAgICAgY2FuIHRha2UgdGhhdCBD
b2RlQmxvY2sgYW5kIGNvbXBpbGUgaXQgeW91cnNlbGYuIFByZXZpb3VzbHkgdGhlIGFjdCBvZgor
ICAgICAgICAgIHByb2R1Y2luZyBhIENvZGVCbG9jay1mb3Itb3B0aW1pemF0aW9uIGFuZCB0aGUg
YWN0IG9mIGNvbXBpbGluZyBjb2RlIGZvciBpdAorICAgICAgICAgIHdlcmUgdGlnaHRseSBjb3Vw
bGVkOyBub3cgeW91IGNhbiBzZXBhcmF0ZSB0aGVtIGFuZCB5b3UgY2FuIGNyZWF0ZSBzdWNoCisg
ICAgICAgICAgYXV0by1qZXR0aXNvbmVkIENvZGVCbG9ja3MgdGhhdCBhcmUgdXNlZCBmb3IgYSBv
bmUtc2hvdCBPU1IgZW50cnkuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6cHJlcGFyZUZvckV4ZWN1dGlvbik6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6aW5zdGFsbCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bmV3UmVwbGFj
ZW1lbnQpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNvZGVCbG9jazo6amV0dGlzb25JbXBsKToK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9u
Q29tcGlsYXRpb25SZXN1bHQpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6Omhhc0Jhc2VsaW5lSklUUHJvZmlsaW5nKToKKyAgICAgICAg
KiBieXRlY29kZS9EZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpEZWZlcnJlZENvbXBpbGF0aW9u
Q2FsbGJhY2spOgorICAgICAgICAoSlNDOjpEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6On5E
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2spOgorICAgICAgICAqIGJ5dGVjb2RlL0RlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjay5oOiBBZGRlZC4KKyAgICAgICAgKiBkZmcvREZHRHJpdmVyLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjp0cnlDb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHRHJp
dmVyLmg6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5Q29tcGlsZSk6CisgICAgICAgICogZGZnL0RG
R0ZhaWxlZEZpbmFsaXplci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6RmFpbGVkRmluYWxpemVy
OjpmaW5hbGl6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6RmFpbGVkRmluYWxpemVyOjpmaW5hbGl6
ZUZ1bmN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHRmFpbGVkRmluYWxpemVyLmg6CisgICAgICAg
ICogZGZnL0RGR0ZpbmFsaXplci5oOgorICAgICAgICAqIGRmZy9ERkdKSVRGaW5hbGl6ZXIuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkpJVEZpbmFsaXplcjo6ZmluYWxpemUpOgorICAgICAgICAo
SlNDOjpERkc6OkpJVEZpbmFsaXplcjo6ZmluYWxpemVGdW5jdGlvbik6CisgICAgICAgICogZGZn
L0RGR0pJVEZpbmFsaXplci5oOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0UHJlcGFyYXRpb24u
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OnByZXBhcmVDb2RlT3JpZ2luRm9yT1NSRXhpdCk6Cisg
ICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGRmZy9ERkdQbGFuLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpQbGFuKToKKyAgICAgICAgKEpTQzo6REZHOjpQ
bGFuOjpjb21waWxlSW5UaHJlYWRJbXBsKToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpmaW5h
bGl6ZVdpdGhvdXROb3RpZnlpbmdDYWxsYmFjayk6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6
ZmluYWxpemVBbmROb3RpZnlDYWxsYmFjayk6CisgICAgICAgICogZGZnL0RGR1BsYW4uaDoKKyAg
ICAgICAgKiBkZmcvREZHV29ya2xpc3QuY3BwOgorICAgICAgICAoSlNDOjpERkc6OldvcmtsaXN0
Ojpjb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSk6CisgICAgICAgICogaGVhcC9IZWFwLmg6Cisg
ICAgICAgIChKU0M6OkhlYXA6OmlzRGVmZXJyZWQpOgorICAgICAgICAqIGludGVycHJldGVyL0lu
dGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGUpOgorICAg
ICAgICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZUNhbGwpOgorICAgICAgICAoSlNDOjpJbnRl
cnByZXRlcjo6ZXhlY3V0ZUNvbnN0cnVjdCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpw
cmVwYXJlRm9yUmVwZWF0Q2FsbCk6CisgICAgICAgICogaml0L0pJVERyaXZlci5oOiBSZW1vdmVk
LgorICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAgIChKU0M6OkRFRklORV9TVFVC
X0ZVTkNUSU9OKToKKyAgICAgICAgKEpTQzo6aml0Q29tcGlsZUZvcik6CisgICAgICAgIChKU0M6
OmxhenlMaW5rRm9yKToKKyAgICAgICAgKiBqaXQvSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9u
Q2FsbGJhY2suY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SklUVG9ERkdEZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2s6OkpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrKToKKyAg
ICAgICAgKEpTQzo6SklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6On5KSVRUb0RG
R0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjayk6CisgICAgICAgIChKU0M6OkpJVFRvREZHRGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjb21waWxhdGlvbkRpZENvbXBsZXRlKToKKyAgICAg
ICAgKiBqaXQvSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaDogQWRkZWQuCisg
ICAgICAgICogbGxpbnQvTExJbnRFbnRyeXBvaW50cy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50
OjpzZXRGdW5jdGlvbkVudHJ5cG9pbnQpOgorICAgICAgICAoSlNDOjpMTEludDo6c2V0RXZhbEVu
dHJ5cG9pbnQpOgorICAgICAgICAoSlNDOjpMTEludDo6c2V0UHJvZ3JhbUVudHJ5cG9pbnQpOgor
ICAgICAgICAqIGxsaW50L0xMSW50RW50cnlwb2ludHMuaDoKKyAgICAgICAgKiBsbGludC9MTElu
dFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpqaXRDb21waWxlQW5kU2V0SGV1
cmlzdGljcyk6CisgICAgICAgIChKU0M6OkxMSW50OjpzZXRVcENhbGwpOgorICAgICAgICAqIHJ1
bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjppc051bWVyaWNDb21wYXJl
RnVuY3Rpb24pOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcDoKKyAgICAg
ICAgKiBydW50aW1lL0NvbXBpbGF0aW9uUmVzdWx0LmNwcDoKKyAgICAgICAgKFdURjo6cHJpbnRJ
bnRlcm5hbCk6CisgICAgICAgICogcnVudGltZS9Db21waWxhdGlvblJlc3VsdC5oOgorICAgICAg
ICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6OlNjcmlwdEV4ZWN1dGFi
bGU6Omluc3RhbGxDb2RlKToKKyAgICAgICAgKEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6bmV3Q29k
ZUJsb2NrRm9yKToKKyAgICAgICAgKEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6bmV3UmVwbGFjZW1l
bnRDb2RlQmxvY2tGb3IpOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjpwcmVwYXJl
Rm9yRXhlY3V0aW9uSW1wbCk6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmg6CisgICAg
ICAgIChKU0M6OlNjcmlwdEV4ZWN1dGFibGU6OnByZXBhcmVGb3JFeGVjdXRpb24pOgorICAgICAg
ICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZUZvcik6Cisg
ICAgICAgICogcnVudGltZS9FeGVjdXRpb25IYXJuZXNzLmg6IFJlbW92ZWQuCisKIDIwMTMtMDgt
MjMgIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBpc3N1ZXMg
Zm91bmQgYnkgdGhlIENsYW5nIFN0YXRpYyBBbmFseXplcgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDE1NDYzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC04Niw4ICs4Niw2IEBACiAJCTBGMUUzQTQ2MTUzNENCQUYwMDBGOTQ1NiAvKiBERkdBcmd1bWVu
dFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjFFM0E0MzE1MzRDQkFEMDAwRjk0NTYgLyogREZHQXJndW1lbnRQb3NpdGlvbi5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMUUzQTQ3MTUz
NENCQjkwMDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRTNBNDQxNTM0Q0JBRDAwMEY5NDU2IC8q
IERGR0RvdWJsZUZvcm1hdFN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEYxRTNBNjcxNTNBMjFFMjAwMEY5NDU2IC8qIERGR1NpbGVudFJl
Z2lzdGVyU2F2ZVBsYW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMUUzQTY1MTUzQTIxREYwMDBGOTQ1NiAvKiBERkdTaWxlbnRSZWdpc3RlclNhdmVQ
bGFuLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJ
MEYyMUMyNjgxNEJFNUY2ODAwQURDNjRCIC8qIEpJVERyaXZlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMUMyNjYxNEJFNUY1RTAwQURDNjRCIC8q
IEpJVERyaXZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07Ci0JCTBGMjFDMjdDMTRCRTcyNzYwMEFEQzY0QiAvKiBFeGVjdXRpb25IYXJuZXNzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIxQzI3QTE0QkU3
MjczMDBBREM2NEIgLyogRXhlY3V0aW9uSGFybmVzcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMjFDMjdEMTRCRTcyN0EwMEFEQzY0QiAvKiBD
b2RlU3BlY2lhbGl6YXRpb25LaW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjIxQzI3OTE0QkU3MjczMDBBREM2NEIgLyogQ29kZVNwZWNpYWxpemF0
aW9uS2luZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGMjFDMjdGMTRCRUFBODIwMEFEQzY0QiAvKiBCeXRlY29kZUNvbnZlbnRpb25zLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIxQzI3RTE0QkVB
QTgwMDBBREM2NEIgLyogQnl0ZWNvZGVDb252ZW50aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMjM1QkQxMTcxNzhFMUMwMDY5MEM3RiAv
KiBGVExDQXJndW1lbnRHZXR0ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyMzVCQkIxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTENBcmd1bWVudEdl
dHRlci5jcHAgKi87IH07CkBAIC0zNDcsNiArMzQ1LDEwIEBACiAJCTBGQzA5NzkyMTQ2QTZGNzMw
MENGMjQ0MiAvKiBERkdPU1JFeGl0Q29tcGlsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDMDk3OEYxNDZBNkY2MzAwQ0YyNDQyIC8qIERGR09T
UkV4aXRDb21waWxlci5jcHAgKi87IH07CiAJCTBGQzA5N0ExMTQ2QjI4Q0EwMENGMjQ0MiAvKiBE
RkdUaHVua3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZDMDk3OUYxNDZCMjhDNzAwQ0YyNDQyIC8qIERGR1RodW5rcy5jcHAgKi87IH07CiAJCTBG
QzA5N0EyMTQ2QjI4Q0MwMENGMjQ0MiAvKiBERkdUaHVua3MuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzA5N0EwMTQ2QjI4QzcwMENGMjQ0MiAvKiBE
RkdUaHVua3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQkwRkM3MTJERTE3Q0Q4Nzc5MDA4Q0M5M0MgLyogRGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
QzcxMkRDMTdDRDg3NzgwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3Bw
ICovOyB9OworCQkwRkM3MTJERjE3Q0Q4NzdDMDA4Q0M5M0MgLyogRGVmZXJyZWRDb21waWxhdGlv
bkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkM3MTJERDE3Q0Q4Nzc4MDA4Q0M5M0MgLyogRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZD
NzEyRTIxN0NEODc5MTAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
QzcxMkUwMTdDRDg3OEYwMDhDQzkzQyAvKiBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxs
YmFjay5jcHAgKi87IH07CisJCTBGQzcxMkUzMTdDRDg3OTMwMDhDQzkzQyAvKiBKSVRUb0RGR0Rl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZDNzEyRTExN0NEODc4RjAwOENDOTNDIC8qIEpJVFRvREZHRGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZDODE1MEExNDA0M0JGNTAwQ0ZBNjAzIC8qIFdyaXRlQmFy
cmllclN1cHBvcnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGQzgxNTA5MTQwNDNCRDIwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZDODE1MEIx
NDA0M0MwRTAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDODE1MDgxNDA0M0JDQTAwQ0ZBNjAz
IC8qIFdyaXRlQmFycmllclN1cHBvcnQuY3BwICovOyB9OwogCQkwRkM4MTUxNTE0MDUxMTlCMDBD
RkE2MDMgLyogVlRhYmxlU3BlY3RydW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGQzgxNTE0MTQwNTExOEQwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1
bS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0x
MjQzLDkgKzEyNDUsNyBAQAogCQkwRjFFM0E0NDE1MzRDQkFEMDAwRjk0NTYgLyogREZHRG91Ymxl
Rm9ybWF0U3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRG91Ymxl
Rm9ybWF0U3RhdGUuaDsgcGF0aCA9IGRmZy9ERkdEb3VibGVGb3JtYXRTdGF0ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjFFM0E1MDE1MzdDMkNCMDAwRjk0NTYgLyogREZHU2xv
d1BhdGhHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU2xv
d1BhdGhHZW5lcmF0b3IuaDsgcGF0aCA9IGRmZy9ERkdTbG93UGF0aEdlbmVyYXRvci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjFFM0E2NTE1M0EyMURGMDAwRjk0NTYgLyogREZH
U2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmg7IHBhdGggPSBkZmcvREZHU2lsZW50UmVnaXN0
ZXJTYXZlUGxhbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjIxQzI2NjE0QkU1
RjVFMDBBREM2NEIgLyogSklURHJpdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpJVERyaXZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjIxQzI3OTE0
QkU3MjczMDBBREM2NEIgLyogQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTBGMjFDMjdBMTRCRTcyNzMwMEFEQzY0QiAvKiBFeGVjdXRpb25I
YXJuZXNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4ZWN1dGlvbkhhcm5l
c3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyMUMyN0UxNEJFQUE4MDAwQURD
NjRCIC8qIEJ5dGVjb2RlQ29udmVudGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQnl0ZWNvZGVDb252ZW50aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjIzNUJCQjE3MTc4RTFDMDA2OTBDN0YgLyogRlRMQ0FyZ3VtZW50R2V0dGVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTENBcmd1bWVudEdldHRlci5jcHA7
IHBhdGggPSBmdGwvRlRMQ0FyZ3VtZW50R2V0dGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEYyMzVCQkMxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTENBcmd1bWVudEdldHRlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExDQXJndW1lbnRHZXR0ZXIuaDsg
cGF0aCA9IGZ0bC9GVExDQXJndW1lbnRHZXR0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTE1MTQsNiArMTUxNCwxMCBAQAogCQkwRkMwOTc4RjE0NkE2RjYzMDBDRjI0NDIgLyog
REZHT1NSRXhpdENvbXBpbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IERGR09TUkV4aXRDb21waWxlci5jcHA7IHBhdGggPSBkZmcvREZHT1NSRXhpdENvbXBpbGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDMDk3OUYxNDZCMjhDNzAwQ0Yy
NDQyIC8qIERGR1RodW5rcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBERkdUaHVua3MuY3BwOyBwYXRoID0gZGZnL0RGR1RodW5rcy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGQzA5N0EwMTQ2QjI4QzcwMENGMjQ0MiAvKiBERkdUaHVua3MuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVGh1bmtzLmg7IHBhdGggPSBkZmcv
REZHVGh1bmtzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQzcxMkRDMTdDRDg3
NzgwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZDNzEyREQxN0NEODc3ODAwOENDOTNDIC8qIERlZmVycmVkQ29tcGls
YXRpb25DYWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZDNzEyRTAxN0NEODc4RjAwOEND
OTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZDNzEyRTExN0NEODc4RjAwOENDOTNDIC8qIEpJVFRv
REZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFRvREZH
RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGQzgxNTA4MTQwNDNCQ0EwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdyaXRlQmFycmllclN1cHBvcnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkM4MTUwOTE0MDQzQkQyMDBDRkE2
MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXcml0ZUJhcnJpZXJTdXBwb3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGQzgxNTEyMTQwNTExODYwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWVGFibGVTcGVjdHJ1bS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNjM2LDcgKzI2NDAsNiBAQAogCQkJCTBGMDc3NkJEMTRG
RjAwMjgwMDEwMjMzMiAvKiBKSVRDb21waWxhdGlvbkVmZm9ydC5oICovLAogCQkJCTBGQUY3RUZB
MTY1QkE5MTkwMDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuY3BwICovLAogCQkJCTBGQUY3RUZC
MTY1QkE5MTkwMDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuaCAqLywKLQkJCQkwRjIxQzI2NjE0
QkU1RjVFMDBBREM2NEIgLyogSklURHJpdmVyLmggKi8sCiAJCQkJMEY0NjgwN0YxNEJBNTcyNzAw
QkZFMjcyIC8qIEpJVEV4Y2VwdGlvbnMuY3BwICovLAogCQkJCTBGNDY4MDgwMTRCQTU3MjcwMEJG
RTI3MiAvKiBKSVRFeGNlcHRpb25zLmggKi8sCiAJCQkJODZDQzg1QTAwRUU3OUE0NzAwMjg4Njgy
IC8qIEpJVElubGluZXMuaCAqLywKQEAgLTI2NTgsNiArMjY2MSw4IEBACiAJCQkJQTdBNEFFMEMx
Nzk3M0I0RDAwNTYxMkIxIC8qIEpJVFN0dWJzWDg2Q29tbW9uLmggKi8sCiAJCQkJMEY1RUY5MUIx
Njg3OEY3ODAwM0U1QzI1IC8qIEpJVFRodW5rcy5jcHAgKi8sCiAJCQkJMEY1RUY5MUMxNjg3OEY3
ODAwM0U1QzI1IC8qIEpJVFRodW5rcy5oICovLAorCQkJCTBGQzcxMkUwMTdDRDg3OEYwMDhDQzkz
QyAvKiBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgKi8sCisJCQkJMEZD
NzEyRTExN0NEODc4RjAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrLmggKi8sCiAJCQkJQTc2RjU0QTIxM0IyOEFBQjAwRUYyQkNFIC8qIEpJVFdyaXRlQmFycmll
ci5oICovLAogCQkJCUE3NkM1MTc0MTE4Mjc0OEQwMDcxNUIwNSAvKiBKU0ludGVyZmFjZUpJVC5o
ICovLAogCQkJCTBGNzY2RDMyMTVBRTI1MzUwMDhGMzYzRSAvKiBKdW1wUmVwbGFjZW1lbnRXYXRj
aHBvaW50LmNwcCAqLywKQEAgLTMwNDAsNyArMzA0NSw2IEBACiAJCQkJQTcyNzAxQjMwREFERTk0
OTAwRTU0OEQ3IC8qIEV4Y2VwdGlvbkhlbHBlcnMuaCAqLywKIAkJCQk4NkNBMDMyRDEwMzhFODQ0
MDAyOEE2MDkgLyogRXhlY3V0YWJsZS5jcHAgKi8sCiAJCQkJODZDQUZFRTIxMDM1RERFNjAwMjhB
NjA5IC8qIEV4ZWN1dGFibGUuaCAqLywKLQkJCQkwRjIxQzI3QTE0QkU3MjczMDBBREM2NEIgLyog
RXhlY3V0aW9uSGFybmVzcy5oICovLAogCQkJCUE3QThBRjI5MTdBREI1RjMwMDVBQjE3NCAvKiBG
bG9hdDMyQXJyYXkuaCAqLywKIAkJCQlBN0E4QUYyQTE3QURCNUYzMDA1QUIxNzQgLyogRmxvYXQ2
NEFycmF5LmggKi8sCiAJCQkJQkMyNjgwQzAwRTE2RDRFOTAwQTA2RTkyIC8qIEZ1bmN0aW9uQ29u
c3RydWN0b3IuY3BwICovLApAQCAtMzY0OCw2ICszNjUyLDggQEAKIAkJCQkwRjhGOTQzRjE2Njc2
MzJEMDBENjE5NzEgLyogQ29kZVR5cGUuY3BwICovLAogCQkJCTBGMEI4M0E1MTRCQ0Y1MDQwMDg4
NUI0RiAvKiBDb2RlVHlwZS5oICovLAogCQkJCTBGNDI2QTRBMTQ2MENENkIwMDEzMUY4RiAvKiBE
YXRhRm9ybWF0LmggKi8sCisJCQkJMEZDNzEyREMxN0NEODc3ODAwOENDOTNDIC8qIERlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjay5jcHAgKi8sCisJCQkJMEZDNzEyREQxN0NEODc3ODAwOENDOTND
IC8qIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oICovLAogCQkJCTBGQkMwQUU0MTQ5NkM3
QzEwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5jcHAgKi8sCiAJCQkJMEZCQzBBRTUxNDk2QzdD
MTAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmggKi8sCiAJCQkJOTY5QTA3OTIwRUQxRDNBRTAw
RjFGNjgxIC8qIEV2YWxDb2RlQ2FjaGUuaCAqLywKQEAgLTM3OTYsNiArMzgwMiw3IEBACiAJCQkJ
NURFNkU1QjMwRTE3MjhFQzAwMTgwNDA3IC8qIGNyZWF0ZV9oYXNoX3RhYmxlIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY0MjZBNEIxNDYwQ0Q2RTAwMTMxRjhGIC8qIERhdGFGb3JtYXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMkI2NkRGMTdCNkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEZDNzEyREYxN0NEODc3QzAwOENDOTNDIC8qIERlZmVycmVkQ29tcGls
YXRpb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAzNEEwRTE3MTM1RTAwMkM3
RTgyIC8qIERhdGVDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDEzNTlDRjMwRkRE
ODlBRDAwMjA2MTgwIC8qIERhdGVDb252ZXJzaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzEx
NjYwMjBFMTk5N0I0MDA4MDY2REQgLyogRGF0ZUluc3RhbmNlLmggaW4gSGVhZGVycyAqLywKQEAg
LTM5MzcsNyArMzk0NCw2IEBACiAJCQkJODZDQUZFRTMxMDM1RERFNjAwMjhBNjA5IC8qIEV4ZWN1
dGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NjZCNDRGMEVFOERDRDEwMDk1MThDQSAvKiBF
eGVjdXRhYmxlQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU2QTFEMzE1MDAwRjM1
MDAyOTkyQjEgLyogRXhlY3V0aW9uQ291bnRlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEYyMUMy
N0MxNEJFNzI3NjAwQURDNjRCIC8qIEV4ZWN1dGlvbkhhcm5lc3MuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGQjEwNTg2MTY3NTQ4MTIwMEY4QUI2RSAvKiBFeGl0S2luZC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYwQjgzQUIxNEJDRjVCQjAwODg1QjRGIC8qIEV4cHJlc3Npb25SYW5nZUluZm8uaCBp
biBIZWFkZXJzICovLAogCQkJCUE3QThBRjM4MTdBREI1RjMwMDVBQjE3NCAvKiBGbG9hdDMyQXJy
YXkuaCBpbiBIZWFkZXJzICovLApAQCAtNDAyNiw3ICs0MDMyLDYgQEAKIAkJCQk4NkNDRUZERTBG
NDEzRjg5MDBGRDdGOUUgLyogSklUQ29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwNzc2QkYx
NEZGMDAyQjAwMTAyMzMyIC8qIEpJVENvbXBpbGF0aW9uRWZmb3J0LmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkFGN0VGRTE2NUJBOTFGMDAwQzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmggaW4gSGVh
ZGVycyAqLywKLQkJCQkwRjIxQzI2ODE0QkU1RjY4MDBBREM2NEIgLyogSklURHJpdmVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjQ2ODA4MjE0QkE1NzJEMDBCRkUyNzIgLyogSklURXhjZXB0aW9u
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZDQzg1QTEwRUU3OUE0NzAwMjg4NjgyIC8qIEpJVElu
bGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2MDYyNjk2MEZCOEVDMDIwMDk3OThBQiAvKiBK
SVRTdHViQ2FsbC5oIGluIEhlYWRlcnMgKi8sCkBAIC00MDk2LDYgKzQxMDEsNyBAQAogCQkJCUJD
MThDNDI0MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU09iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMxOEM0MjUwRTE2RjVDRDAwQjM0NDYwIC8qIEpTT2JqZWN0UmVmLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNzI4MEEyODExNTU3RTMwMDBENTY5NTcgLyogSlNPYmplY3RSZWZQcml2YXRlLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRkM3MTJFMzE3Q0Q4NzkzMDA4Q0M5M0MgLyogSklUVG9ERkdEZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUE3Rjk5MzVGMEZE
NzMyNTEwMEEwQjJEMCAvKiBKU09OT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzg3Q0RC
OTEwNzEyQUQ0MDAwNjE0Q0YgLyogSlNPTk9iamVjdC5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTk1MzRBQUZCMEU1QjdBOTYwMEI4QTQ1QiAvKiBKU1Byb2ZpbGVyUHJpdmF0ZS5oIGluIEhlYWRl
cnMgKi8sCkBAIC01MDA5LDYgKzUwMTUsNyBAQAogCQkJCTBGRTIyOEVFMTQzNkFCMkMwMDE5NkM0
OCAvKiBPcHRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0OEYyMUJDMTA3RUM1NEQwMDQy
RUMyQyAvKiBQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMwNTJDMzQwRkI3OTIxOTAw
NDhGREMzIC8qIFBhcnNlckFyZW5hLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGQzcxMkUyMTdD
RDg3OTEwMDhDQzkzQyAvKiBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjlGQzhDMzE0RTFCNUZFMDBENTJBRTAgLyogUG9seW1vcnBo
aWNQdXRCeUlkTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjk4MjA2MDE2QkZFMzgxMDAy
NDBEMDIgLyogUHJlY2lzZUp1bXBUYXJnZXRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk1NzQy
RjY1MEREMTFGNUEwMDA5MTdGQiAvKiBQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNTA4
Nyw2ICs1MDk0LDcgQEAKIAkJCQkxNEU4NEY5RTE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0Jsb2Nr
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0RjcyNTY1MTRFRTI2NUUwMEIxNjUyQiAvKiBXZWFr
SGFuZGxlT3duZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRFODRGQTAxNEVFMUFDQzAwRDZE
NUQ0IC8qIFdlYWtTZXQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZDNzEyREUxN0NEODc3OTAw
OENDOTNDIC8qIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjZFNUMxOTE3MjRBRjNEMDA1QzU3NEYgLyogV2ViS2l0TExWTUxpYnJhcnlBbmNob3Iu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDODE1MEIxNDA0M0MwRTAwQ0ZBNjAzIC8qIFdyaXRl
QmFycmllclN1cHBvcnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdFNUFCM0ExNzk5RTRCMjAw
RDI4MzNEIC8qIFg4NkRpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxNTQ2
MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgi
CiAjaW5jbHVkZSAiREZHQ2FwYWJpbGl0aWVzLmgiCiAjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisj
aW5jbHVkZSAiREZHRHJpdmVyLmgiCiAjaW5jbHVkZSAiREZHTm9kZS5oIgogI2luY2x1ZGUgIkRG
R1JlcGF0Y2guaCIKICNpbmNsdWRlICJERkdXb3JrbGlzdC5oIgpAQCAtNDUsNiArNDYsNyBAQAog
I2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVk
ZSAiSlNOYW1lU2NvcGUuaCIKKyNpbmNsdWRlICJMTEludEVudHJ5cG9pbnRzLmgiCiAjaW5jbHVk
ZSAiTG93TGV2ZWxJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNs
dWRlICJQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgiCkBAIC0yNjg5LDYgKzI2OTEsNjAgQEAgdm9p
ZCBDb2RlQmxvY2s6OmNvcHlQb3N0UGFyc2VEYXRhRnJvbUFsdAogICAgIGNvcHlQb3N0UGFyc2VE
YXRhRnJvbShtX2FsdGVybmF0aXZlLmdldCgpKTsKIH0KIAorQ29tcGlsYXRpb25SZXN1bHQgQ29k
ZUJsb2NrOjpwcmVwYXJlRm9yRXhlY3V0aW9uKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgSklUQ29k
ZTo6SklUVHlwZSBqaXRUeXBlLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQsCisgICAgdW5z
aWduZWQgYnl0ZWNvZGVJbmRleCwgUGFzc1JlZlB0cjxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2s+IGNhbGxiYWNrKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgCisgICAgaWYg
KGppdFR5cGUgPT0gSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykgeworICAgICAgICBzd2l0Y2gg
KGNvZGVUeXBlKCkpIHsKKyAgICAgICAgY2FzZSBHbG9iYWxDb2RlOgorICAgICAgICAgICAgTExJ
bnQ6OnNldFByb2dyYW1FbnRyeXBvaW50KHZtLCBzdGF0aWNfY2FzdDxQcm9ncmFtQ29kZUJsb2Nr
Kj4odGhpcykpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRXZhbENvZGU6Cisg
ICAgICAgICAgICBMTEludDo6c2V0RXZhbEVudHJ5cG9pbnQodm0sIHN0YXRpY19jYXN0PEV2YWxD
b2RlQmxvY2sqPih0aGlzKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGdW5j
dGlvbkNvZGU6CisgICAgICAgICAgICBMTEludDo6c2V0RnVuY3Rpb25FbnRyeXBvaW50KHZtLCBz
dGF0aWNfY2FzdDxGdW5jdGlvbkNvZGVCbG9jayo+KHRoaXMpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBDb21waWxhdGlvblN1Y2Nlc3NmdWw7CisgICAg
fQorICAgIAorI2lmIEVOQUJMRShKSVQpCisgICAgaWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJ
VChqaXRUeXBlKSkgeworICAgICAgICBBU1NFUlQoZWZmb3J0ID09IEpJVENvbXBpbGF0aW9uQ2Fu
RmFpbCk7CisgICAgICAgIGJvb2wgaGFkQ2FsbGJhY2sgPSAhIWNhbGxiYWNrOworICAgICAgICBD
b21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBERkc6OnRyeUNvbXBpbGUoZXhlYywgdGhpcywgYnl0
ZWNvZGVJbmRleCwgY2FsbGJhY2spOworICAgICAgICBBU1NFUlRfVU5VU0VEKGhhZENhbGxiYWNr
LCByZXN1bHQgIT0gQ29tcGlsYXRpb25EZWZlcnJlZCB8fCBoYWRDYWxsYmFjayk7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBq
aXRDb2RlV2l0aEFyaXR5Q2hlY2s7CisgICAgUmVmUHRyPEpJVENvZGU+IGppdENvZGUgPSBKSVQ6
OmNvbXBpbGUoJnZtLCB0aGlzLCBlZmZvcnQsICZqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOworICAg
IGlmICghaml0Q29kZSkKKyAgICAgICAgcmV0dXJuIENvbXBpbGF0aW9uRmFpbGVkOworICAgIHNl
dEpJVENvZGUoaml0Q29kZSwgaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKKyAgICByZXR1cm4gQ29t
cGlsYXRpb25TdWNjZXNzZnVsOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZWZmb3J0KTsKKyAg
ICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVJbmRleCk7CisgICAgVU5VU0VEX1BBUkFNKGNhbGxiYWNr
KTsKKyAgICByZXR1cm4gQ29tcGlsYXRpb25GYWlsZWQ7CisjZW5kaWYgLy8gRU5BQkxFKEpJVCkK
K30KKwordm9pZCBDb2RlQmxvY2s6Omluc3RhbGwoKQoreworICAgIG93bmVyRXhlY3V0YWJsZSgp
LT5pbnN0YWxsQ29kZSh0aGlzKTsKK30KKworUGFzc1JlZlB0cjxDb2RlQmxvY2s+IENvZGVCbG9j
azo6bmV3UmVwbGFjZW1lbnQoKQoreworICAgIHJldHVybiBvd25lckV4ZWN1dGFibGUoKS0+bmV3
UmVwbGFjZW1lbnRDb2RlQmxvY2tGb3Ioc3BlY2lhbGl6YXRpb25LaW5kKCkpOworfQorCiAjaWYg
RU5BQkxFKEpJVCkKIHZvaWQgQ29kZUJsb2NrOjpyZW9wdGltaXplKCkKIHsKQEAgLTI3MTUsNTMg
KzI3NzEsNiBAQCBDb2RlQmxvY2sqIEZ1bmN0aW9uQ29kZUJsb2NrOjpyZXBsYWNlbWVuCiAgICAg
cmV0dXJuICZzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUo
KSktPmdlbmVyYXRlZEJ5dGVjb2RlRm9yKG1faXNDb25zdHJ1Y3RvciA/IENvZGVGb3JDb25zdHJ1
Y3QgOiBDb2RlRm9yQ2FsbCk7CiB9CiAKLSNpZiBFTkFCTEUoREZHX0pJVCkKLUpTT2JqZWN0KiBQ
cm9ncmFtQ29kZUJsb2NrOjpjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29w
ZSogc2NvcGUsIENvbXBpbGF0aW9uUmVzdWx0JiByZXN1bHQsIHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXgpCi17Ci0gICAgaWYgKEpJVENvZGU6OmlzSGlnaGVyVGllcihyZXBsYWNlbWVudCgpLT5qaXRU
eXBlKCksIGppdFR5cGUoKSkpIHsKLSAgICAgICAgcmVzdWx0ID0gQ29tcGlsYXRpb25Ob3ROZWVk
ZWQ7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBKU09iamVjdCogZXJyb3IgPSBzdGF0
aWNfY2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+Y29tcGlsZU9w
dGltaXplZChleGVjLCBzY29wZSwgcmVzdWx0LCBieXRlY29kZUluZGV4KTsKLSAgICByZXR1cm4g
ZXJyb3I7Ci19Ci0KLUNvbXBpbGF0aW9uUmVzdWx0IFByb2dyYW1Db2RlQmxvY2s6OnJlcGxhY2VX
aXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlKFBhc3NSZWZQdHI8REZHOjpQbGFuPiBwbGFuKQotewot
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJs
ZSgpKS0+cmVwbGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGUocGxhbik7Ci19Ci0KLUpTT2Jq
ZWN0KiBFdmFsQ29kZUJsb2NrOjpjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSogZXhlYywgSlNT
Y29wZSogc2NvcGUsIENvbXBpbGF0aW9uUmVzdWx0JiByZXN1bHQsIHVuc2lnbmVkIGJ5dGVjb2Rl
SW5kZXgpCi17Ci0gICAgaWYgKEpJVENvZGU6OmlzSGlnaGVyVGllcihyZXBsYWNlbWVudCgpLT5q
aXRUeXBlKCksIGppdFR5cGUoKSkpIHsKLSAgICAgICAgcmVzdWx0ID0gQ29tcGlsYXRpb25Ob3RO
ZWVkZWQ7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBKU09iamVjdCogZXJyb3IgPSBz
dGF0aWNfY2FzdDxFdmFsRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+Y29tcGlsZU9w
dGltaXplZChleGVjLCBzY29wZSwgcmVzdWx0LCBieXRlY29kZUluZGV4KTsKLSAgICByZXR1cm4g
ZXJyb3I7Ci19Ci0KLUNvbXBpbGF0aW9uUmVzdWx0IEV2YWxDb2RlQmxvY2s6OnJlcGxhY2VXaXRo
RGVmZXJyZWRPcHRpbWl6ZWRDb2RlKFBhc3NSZWZQdHI8REZHOjpQbGFuPiBwbGFuKQotewotICAg
IHJldHVybiBzdGF0aWNfY2FzdDxFdmFsRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+
cmVwbGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGUocGxhbik7Ci19Ci0KLUpTT2JqZWN0KiBG
dW5jdGlvbkNvZGVCbG9jazo6Y29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqIGV4ZWMsIEpTU2Nv
cGUqIHNjb3BlLCBDb21waWxhdGlvblJlc3VsdCYgcmVzdWx0LCB1bnNpZ25lZCBieXRlY29kZUlu
ZGV4KQotewotICAgIGlmIChKSVRDb2RlOjppc0hpZ2hlclRpZXIocmVwbGFjZW1lbnQoKS0+aml0
VHlwZSgpLCBqaXRUeXBlKCkpKSB7Ci0gICAgICAgIHJlc3VsdCA9IENvbXBpbGF0aW9uTm90TmVl
ZGVkOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgSlNPYmplY3QqIGVycm9yID0gc3Rh
dGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5jb21waWxl
T3B0aW1pemVkRm9yKGV4ZWMsIHNjb3BlLCByZXN1bHQsIGJ5dGVjb2RlSW5kZXgsIG1faXNDb25z
dHJ1Y3RvciA/IENvZGVGb3JDb25zdHJ1Y3QgOiBDb2RlRm9yQ2FsbCk7Ci0gICAgcmV0dXJuIGVy
cm9yOwotfQotCi1Db21waWxhdGlvblJlc3VsdCBGdW5jdGlvbkNvZGVCbG9jazo6cmVwbGFjZVdp
dGhEZWZlcnJlZE9wdGltaXplZENvZGUoUGFzc1JlZlB0cjxERkc6OlBsYW4+IHBsYW4pCi17Ci0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJs
ZSgpKS0+cmVwbGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGVGb3IocGxhbiwgbV9pc0NvbnN0
cnVjdG9yID8gQ29kZUZvckNvbnN0cnVjdCA6IENvZGVGb3JDYWxsKTsKLX0KLSNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKLQogREZHOjpDYXBhYmlsaXR5TGV2ZWwgUHJvZ3JhbUNvZGVCbG9jazo6
Y2FwYWJpbGl0eUxldmVsSW50ZXJuYWwoKQogewogICAgIHJldHVybiBERkc6OnByb2dyYW1DYXBh
YmlsaXR5TGV2ZWwodGhpcyk7CkBAIC0yODA0LDI3ICsyODEzLDYgQEAgdm9pZCBGdW5jdGlvbkNv
ZGVCbG9jazo6amV0dGlzb25JbXBsKCkKIHsKICAgICBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1
dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmpldHRpc29uT3B0aW1pemVkQ29kZUZvcigqdm0o
KSwgbV9pc0NvbnN0cnVjdG9yID8gQ29kZUZvckNvbnN0cnVjdCA6IENvZGVGb3JDYWxsKTsKIH0K
LQotQ29tcGlsYXRpb25SZXN1bHQgUHJvZ3JhbUNvZGVCbG9jazo6aml0Q29tcGlsZUltcGwoRXhl
Y1N0YXRlKiBleGVjKQotewotICAgIEFTU0VSVChqaXRUeXBlKCkgPT0gSklUQ29kZTo6SW50ZXJw
cmV0ZXJUaHVuayk7Ci0gICAgQVNTRVJUKHRoaXMgPT0gcmVwbGFjZW1lbnQoKSk7Ci0gICAgcmV0
dXJuIHN0YXRpY19jYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5q
aXRDb21waWxlKGV4ZWMpOwotfQotCi1Db21waWxhdGlvblJlc3VsdCBFdmFsQ29kZUJsb2NrOjpq
aXRDb21waWxlSW1wbChFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgQVNTRVJUKGppdFR5cGUoKSA9
PSBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKTsKLSAgICBBU1NFUlQodGhpcyA9PSByZXBsYWNl
bWVudCgpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihvd25lckV4
ZWN1dGFibGUoKSktPmppdENvbXBpbGUoZXhlYyk7Ci19Ci0KLUNvbXBpbGF0aW9uUmVzdWx0IEZ1
bmN0aW9uQ29kZUJsb2NrOjpqaXRDb21waWxlSW1wbChFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAg
QVNTRVJUKGppdFR5cGUoKSA9PSBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKTsKLSAgICBBU1NF
UlQodGhpcyA9PSByZXBsYWNlbWVudCgpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RnVuY3Rp
b25FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5qaXRDb21waWxlRm9yKGV4ZWMsIG1f
aXNDb25zdHJ1Y3RvciA/IENvZGVGb3JDb25zdHJ1Y3QgOiBDb2RlRm9yQ2FsbCk7Ci19CiAjZW5k
aWYKIAogSlNHbG9iYWxPYmplY3QqIENvZGVCbG9jazo6Z2xvYmFsT2JqZWN0Rm9yKENvZGVPcmln
aW4gY29kZU9yaWdpbikKQEAgLTMxMDYsMTAgKzMwOTQsOCBAQCB2b2lkIENvZGVCbG9jazo6Zm9y
Y2VPcHRpbWl6YXRpb25TbG93UGF0CiB2b2lkIENvZGVCbG9jazo6c2V0T3B0aW1pemF0aW9uVGhy
ZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCkK
IHsKICAgICBSRUxFQVNFX0FTU0VSVChqaXRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQp
OwotICAgIFJFTEVBU0VfQVNTRVJUKChyZXN1bHQgPT0gQ29tcGlsYXRpb25TdWNjZXNzZnVsKSA9
PSAocmVwbGFjZW1lbnQoKSAhPSB0aGlzKSk7CiAgICAgc3dpdGNoIChyZXN1bHQpIHsKICAgICBj
YXNlIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29k
ZTo6aXNPcHRpbWl6aW5nSklUKHJlcGxhY2VtZW50KCktPmppdFR5cGUoKSkpOwogICAgICAgICBv
cHRpbWl6ZU5leHRJbnZvY2F0aW9uKCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29tcGls
YXRpb25GYWlsZWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5oCShyZXZpc2lvbiAxNTQ2MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRl
ICJERkdPU1JFbnRyeS5oIgogI2luY2x1ZGUgIkRGR09TUkV4aXQuaCIKICNpbmNsdWRlICJERkdW
YXJpYWJsZUV2ZW50U3RyZWFtLmgiCisjaW5jbHVkZSAiRGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrLmgiCiAjaW5jbHVkZSAiRXZhbENvZGVDYWNoZS5oIgogI2luY2x1ZGUgIkV4ZWN1dGlvbkNv
dW50ZXIuaCIKICNpbmNsdWRlICJFeHByZXNzaW9uUmFuZ2VJbmZvLmgiCkBAIC0yOTAsMTkgKzI5
MSwxOSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gaml0VHlwZSgpID09IEpJVENv
ZGU6OkJhc2VsaW5lSklUOwogICAgIH0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICB2aXJ0dWFs
IEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBDb21waWxh
dGlvblJlc3VsdCYsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpID0gMDsKLSAgICB2aXJ0dWFsIENv
bXBpbGF0aW9uUmVzdWx0IHJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlKFBhc3NSZWZQ
dHI8REZHOjpQbGFuPikgPSAwOwotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogICAgIHZvaWQg
amV0dGlzb24oKTsKLSAgICBDb21waWxhdGlvblJlc3VsdCBqaXRDb21waWxlKEV4ZWNTdGF0ZSog
ZXhlYykKLSAgICB7Ci0gICAgICAgIGlmIChqaXRUeXBlKCkgIT0gSklUQ29kZTo6SW50ZXJwcmV0
ZXJUaHVuaykgewotICAgICAgICAgICAgQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNl
bGluZUpJVCk7Ci0gICAgICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25Ob3ROZWVkZWQ7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIGppdENvbXBpbGVJbXBsKGV4ZWMpOwotICAgIH0KKyAgICBD
b21waWxhdGlvblJlc3VsdCBwcmVwYXJlRm9yRXhlY3V0aW9uKAorICAgICAgICBFeGVjU3RhdGUq
LCBKSVRDb2RlOjpKSVRUeXBlLAorICAgICAgICBKSVRDb21waWxhdGlvbkVmZm9ydCA9IEpJVENv
bXBpbGF0aW9uTXVzdFN1Y2NlZWQsCisgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBV
SU5UX01BWCwKKyAgICAgICAgUGFzc1JlZlB0cjxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+
ID0gMCk7CisgICAgCisgICAgLy8gRXhhY3RseSBlcXVpdmFsZW50IHRvIGNvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCktPmluc3RhbGxDb2RlKGNvZGVCbG9jayk7CisgICAgdm9pZCBpbnN0YWxs
KCk7CisgICAgCisgICAgLy8gRXhhY3RseSBlcXVpdmFsZW50IHRvIGNvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCktPm5ld1JlcGxhY2VtZW50Q29kZUJsb2NrRm9yKGNvZGVCbG9jay0+c3BlY2lh
bGl6YXRpb25LaW5kKCkpCisgICAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+IG5ld1JlcGxhY2VtZW50
KCk7CisgICAgCiAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCkgPSAwOwogCiAg
ICAgdmlydHVhbCBERkc6OkNhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWxJbnRlcm5hbCgp
ID0gMDsKQEAgLTk2OSw3ICs5NzAsNiBAQCBwdWJsaWM6CiAgICAgCiBwcm90ZWN0ZWQ6CiAjaWYg
RU5BQkxFKEpJVCkKLSAgICB2aXJ0dWFsIENvbXBpbGF0aW9uUmVzdWx0IGppdENvbXBpbGVJbXBs
KEV4ZWNTdGF0ZSopID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb25JbXBsKCkgPSAwOwog
I2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIHZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3Im
KTsKQEAgLTExOTQsMTMgKzExOTQsNyBAQCBwdWJsaWM6CiAKICNpZiBFTkFCTEUoSklUKQogcHJv
dGVjdGVkOgotI2lmIEVOQUJMRShERkdfSklUKQotICAgIHZpcnR1YWwgSlNPYmplY3QqIGNvbXBp
bGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgSlNTY29wZSosIENvbXBpbGF0aW9uUmVzdWx0JiwgdW5z
aWduZWQgYnl0ZWNvZGVJbmRleCk7Ci0gICAgdmlydHVhbCBDb21waWxhdGlvblJlc3VsdCByZXBs
YWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZShQYXNzUmVmUHRyPERGRzo6UGxhbj4pOwotI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQotCiAgICAgdmlydHVhbCB2b2lkIGpldHRpc29uSW1wbCgp
OwotICAgIHZpcnR1YWwgQ29tcGlsYXRpb25SZXN1bHQgaml0Q29tcGlsZUltcGwoRXhlY1N0YXRl
Kik7CiAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCk7CiAgICAgdmlydHVhbCBE
Rkc6OkNhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWxJbnRlcm5hbCgpOwogI2VuZGlmCkBA
IC0xMjIzLDEzICsxMjE3LDcgQEAgcHVibGljOgogICAgIAogI2lmIEVOQUJMRShKSVQpCiBwcm90
ZWN0ZWQ6Ci0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgdmlydHVhbCBKU09iamVjdCogY29tcGls
ZU9wdGltaXplZChFeGVjU3RhdGUqLCBKU1Njb3BlKiwgQ29tcGlsYXRpb25SZXN1bHQmLCB1bnNp
Z25lZCBieXRlY29kZUluZGV4KTsKLSAgICB2aXJ0dWFsIENvbXBpbGF0aW9uUmVzdWx0IHJlcGxh
Y2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlKFBhc3NSZWZQdHI8REZHOjpQbGFuPik7Ci0jZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCi0KICAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb25JbXBsKCk7
Ci0gICAgdmlydHVhbCBDb21waWxhdGlvblJlc3VsdCBqaXRDb21waWxlSW1wbChFeGVjU3RhdGUq
KTsKICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKTsKICAgICB2aXJ0dWFsIERG
Rzo6Q2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbEludGVybmFsKCk7CiAjZW5kaWYKQEAg
LTEyNTIsMTMgKzEyNDAsNyBAQCBwdWJsaWM6CiAgICAgCiAjaWYgRU5BQkxFKEpJVCkKIHByb3Rl
Y3RlZDoKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxl
T3B0aW1pemVkKEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBDb21waWxhdGlvblJlc3VsdCYsIHVuc2ln
bmVkIGJ5dGVjb2RlSW5kZXgpOwotICAgIHZpcnR1YWwgQ29tcGlsYXRpb25SZXN1bHQgcmVwbGFj
ZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGUoUGFzc1JlZlB0cjxERkc6OlBsYW4+KTsKLSNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKLQogICAgIHZpcnR1YWwgdm9pZCBqZXR0aXNvbkltcGwoKTsK
LSAgICB2aXJ0dWFsIENvbXBpbGF0aW9uUmVzdWx0IGppdENvbXBpbGVJbXBsKEV4ZWNTdGF0ZSop
OwogICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVudCgpOwogICAgIHZpcnR1YWwgREZH
OjpDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsSW50ZXJuYWwoKTsKICNlbmRpZgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlZmVycmVkQ29tcGlsYXRpb25DYWxs
YmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Rl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2suaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0RlZmVycmVkQ29t
cGlsYXRpb25DYWxsYmFjazo6RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrKCkgeyB9CitEZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6On5EZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2soKSB7
IH0KKworfSAvLyBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Rl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9EZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWZlcnJlZENvbXBpbGF0aW9u
Q2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRGVmZXJyZWRDb21waWxh
dGlvbkNhbGxiYWNrX2gKKyNkZWZpbmUgRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrX2gKKwor
I2luY2x1ZGUgIkNvbXBpbGF0aW9uUmVzdWx0LmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvZGVCbG9jazsKKworY2xhc3MgRGVmZXJy
ZWRDb21waWxhdGlvbkNhbGxiYWNrIDogcHVibGljIFJlZkNvdW50ZWQ8RGVmZXJyZWRDb21waWxh
dGlvbkNhbGxiYWNrPiB7CitwdWJsaWM6CisgICAgRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
KCk7CisgICAgdmlydHVhbCB+RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrKCk7CisKKyAgICB2
aXJ0dWFsIHZvaWQgY29tcGlsYXRpb25EaWRDb21wbGV0ZShDb2RlQmxvY2sqLCBDb21waWxhdGlv
blJlc3VsdCkgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBEZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0RyaXZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEcml2ZXIuY3BwCShyZXZpc2lvbiAxNTQ2MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0RyaXZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAgdW5z
aWduZWQgZ2V0TnVtQ29tcGlsYXRpb25zKCkKICAgICByZXR1cm4gbnVtQ29tcGlsYXRpb25zOwog
fQogCi1zdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZShDb21waWxlTW9kZSBjb21waWxl
TW9kZSwgRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgUmVmUHRyPEpTQzo6
SklUQ29kZT4mIGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciogaml0Q29kZVdpdGhBcml0
eUNoZWNrLCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgpCitDb21waWxhdGlvblJlc3Vs
dCB0cnlDb21waWxlKEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2ln
bmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgUGFzc1JlZlB0cjxEZWZlcnJlZENvbXBpbGF0aW9u
Q2FsbGJhY2s+IGNhbGxiYWNrKQogewogICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9u
KCJERkcgQ29tcGlsYXRpb24gKERyaXZlcikiKTsKICAgICAKQEAgLTk5LDEyICs5OSwxMiBAQCBz
dGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZShDb21waWxlCiAgICAgZWxzZQogICAgICAg
ICBudW1WYXJzV2l0aFZhbHVlcyA9IDA7CiAgICAgUmVmUHRyPFBsYW4+IHBsYW4gPSBhZG9wdFJl
ZigKLSAgICAgICAgbmV3IFBsYW4oY29tcGlsZU1vZGUsIGNvZGVCbG9jaywgb3NyRW50cnlCeXRl
Y29kZUluZGV4LCBudW1WYXJzV2l0aFZhbHVlcykpOworICAgICAgICBuZXcgUGxhbihjb2RlQmxv
Y2ssIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgbnVtVmFyc1dpdGhWYWx1ZXMpKTsKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHBsYW4tPm11c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyArK2kpIHsK
ICAgICAgICAgaW50IG9wZXJhbmQgPSBwbGFuLT5tdXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJ
bmRleChpKTsKICAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpCiAgICAgICAg
ICAgICAmJiAhb3BlcmFuZFRvQXJndW1lbnQob3BlcmFuZCkKLSAgICAgICAgICAgICYmIGNvbXBp
bGVNb2RlID09IENvbXBpbGVGdW5jdGlvbgorICAgICAgICAgICAgJiYgY29kZUJsb2NrLT5jb2Rl
VHlwZSgpID09IEZ1bmN0aW9uQ29kZQogICAgICAgICAgICAgJiYgY29kZUJsb2NrLT5zcGVjaWFs
aXphdGlvbktpbmQoKSA9PSBDb2RlRm9yQ29uc3RydWN0KSB7CiAgICAgICAgICAgICAvLyBVZ2gu
IElmIHdlJ3JlIGluIGEgY29uc3RydWN0b3IsIHRoZSAndGhpcycgYXJndW1lbnQgbWF5IGhvbGQg
Z2FyYmFnZS4gSXQgd2lsbAogICAgICAgICAgICAgLy8gYWxzbyBuZXZlciBiZSB1c2VkLiBJdCBk
b2Vzbid0IG1hdHRlciB3aGF0IHdlIHB1dCBpbnRvIHRoZSB2YWx1ZSBmb3IgdGhpcywKQEAgLTEx
NSw3ICsxMTUsOCBAQCBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZShDb21waWxlCiAg
ICAgICAgICAgICBwbGFuLT5tdXN0SGFuZGxlVmFsdWVzW2ldID0gZXhlYy0+dW5jaGVja2VkUihv
cGVyYW5kKS5qc1ZhbHVlKCk7CiAgICAgfQogICAgIAotICAgIGlmIChlbmFibGVDb25jdXJyZW50
SklUKCkpIHsKKyAgICBpZiAoZW5hYmxlQ29uY3VycmVudEpJVCgpICYmIGNhbGxiYWNrKSB7Cisg
ICAgICAgIHBsYW4tPmNhbGxiYWNrID0gY2FsbGJhY2s7CiAgICAgICAgIGlmICghdm0ud29ya2xp
c3QpCiAgICAgICAgICAgICB2bS53b3JrbGlzdCA9IGdsb2JhbFdvcmtsaXN0KCk7CiAgICAgICAg
IGlmIChsb2dDb21waWxhdGlvbkNoYW5nZXMoKSkKQEAgLTEyNSwyMiArMTI2LDcgQEAgc3RhdGlj
IENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGUoQ29tcGlsZQogICAgIH0KICAgICAKICAgICBwbGFu
LT5jb21waWxlSW5UaHJlYWQoKnZtLmRmZ1N0YXRlKTsKLSAgICByZXR1cm4gcGxhbi0+ZmluYWxp
emUoaml0Q29kZSwgaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKLX0KLQotQ29tcGlsYXRpb25SZXN1
bHQgdHJ5Q29tcGlsZShFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCBSZWZQ
dHI8SlNDOjpKSVRDb2RlPiYgaml0Q29kZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKLXsKLSAg
ICByZXR1cm4gY29tcGlsZShDb21waWxlT3RoZXIsIGV4ZWMsIGNvZGVCbG9jaywgaml0Q29kZSwg
MCwgYnl0ZWNvZGVJbmRleCk7Ci19Ci0KLUNvbXBpbGF0aW9uUmVzdWx0IHRyeUNvbXBpbGVGdW5j
dGlvbihFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCBSZWZQdHI8SlNDOjpK
SVRDb2RlPiYgaml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBqaXRDb2RlV2l0aEFyaXR5
Q2hlY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAgcmV0dXJuIGNvbXBpbGUoQ29t
cGlsZUZ1bmN0aW9uLCBleGVjLCBjb2RlQmxvY2ssIGppdENvZGUsICZqaXRDb2RlV2l0aEFyaXR5
Q2hlY2ssIGJ5dGVjb2RlSW5kZXgpOwotfQotCi1Db21waWxhdGlvblJlc3VsdCB0cnlGaW5hbGl6
ZVBsYW4oUGFzc1JlZlB0cjxQbGFuPiBwbGFuLCBSZWZQdHI8SlNDOjpKSVRDb2RlPiYgaml0Q29k
ZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2spCi17Ci0gICAg
cmV0dXJuIHBsYW4tPmZpbmFsaXplKGppdENvZGUsIGppdENvZGVXaXRoQXJpdHlDaGVjayk7Cisg
ICAgcmV0dXJuIHBsYW4tPmZpbmFsaXplV2l0aG91dE5vdGlmeWluZ0NhbGxiYWNrKCk7CiB9CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRHJpdmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEcml2ZXIuaAkocmV2aXNpb24gMTU0NjMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEcml2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTcgKzQyLDkgQEAgbmFtZXNwYWNl
IERGRyB7CiBKU19FWFBPUlRfUFJJVkFURSB1bnNpZ25lZCBnZXROdW1Db21waWxhdGlvbnMoKTsK
IAogI2lmIEVOQUJMRShERkdfSklUKQotQ29tcGlsYXRpb25SZXN1bHQgdHJ5Q29tcGlsZShFeGVj
U3RhdGUqLCBDb2RlQmxvY2sqLCBSZWZQdHI8SlNDOjpKSVRDb2RlPiYsIHVuc2lnbmVkIGJ5dGVj
b2RlSW5kZXgpOwotQ29tcGlsYXRpb25SZXN1bHQgdHJ5Q29tcGlsZUZ1bmN0aW9uKEV4ZWNTdGF0
ZSosIENvZGVCbG9jayosIFJlZlB0cjxKU0M6OkpJVENvZGU+JiwgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyJiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwotQ29t
cGlsYXRpb25SZXN1bHQgdHJ5RmluYWxpemVQbGFuKFBhc3NSZWZQdHI8UGxhbj4sIFJlZlB0cjxK
U0M6OkpJVENvZGU+JiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKiBqaXRDb2RlV2l0aEFyaXR5Q2hl
Y2spOworQ29tcGlsYXRpb25SZXN1bHQgdHJ5Q29tcGlsZShFeGVjU3RhdGUqLCBDb2RlQmxvY2sq
LCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIFBhc3NSZWZQdHI8RGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrPik7CiAjZWxzZQotaW5saW5lIENvbXBpbGF0aW9uUmVzdWx0IHRyeUNv
bXBpbGUoRXhlY1N0YXRlKiwgQ29kZUJsb2NrKiwgUmVmUHRyPEpTQzo6SklUQ29kZT4mLCB1bnNp
Z25lZCkgeyByZXR1cm4gQ29tcGlsYXRpb25GYWlsZWQ7IH0KLWlubGluZSBDb21waWxhdGlvblJl
c3VsdCB0cnlDb21waWxlRnVuY3Rpb24oRXhlY1N0YXRlKiwgQ29kZUJsb2NrKiwgUmVmUHRyPEpT
Qzo6SklUQ29kZT4mLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImLCB1bnNpZ25lZCkgeyByZXR1cm4g
Q29tcGlsYXRpb25GYWlsZWQ7IH0KLWlubGluZSBDb21waWxhdGlvblJlc3VsdCB0cnlGaW5hbGl6
ZVBsYW4oUGFzc1JlZlB0cjxQbGFuPiwgUmVmUHRyPEpTQzo6SklUQ29kZT4mLCBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIqKQotewotICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwotICAgIHJl
dHVybiBDb21waWxhdGlvbkZhaWxlZDsKLX0KK2lubGluZSBDb21waWxhdGlvblJlc3VsdCB0cnlD
b21waWxlKEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIHVuc2lnbmVkLCBQYXNzUmVmUHRyPERlZmVy
cmVkQ29tcGlsYXRpb25DYWxsYmFjaz4pIHsgcmV0dXJuIENvbXBpbGF0aW9uRmFpbGVkOyB9CiAj
ZW5kaWYKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGYWlsZWRGaW5hbGl6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRmFpbGVkRmluYWxpemVyLmNwcAkocmV2aXNpb24gMTU0NjMy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGYWlsZWRGaW5hbGl6ZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zOSwxMiArMzksMTIgQEAgRmFpbGVkRmluYWxpemVyOjp+RmFpbGVk
RmluYWxpemVyKCkKIHsKIH0KIAotYm9vbCBGYWlsZWRGaW5hbGl6ZXI6OmZpbmFsaXplKFJlZlB0
cjxKU0M6OkpJVENvZGU+JikKK2Jvb2wgRmFpbGVkRmluYWxpemVyOjpmaW5hbGl6ZSgpCiB7CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEZhaWxlZEZpbmFsaXplcjo6ZmluYWxpemVGdW5j
dGlvbihSZWZQdHI8SlNDOjpKSVRDb2RlPiYsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYpCitib29s
IEZhaWxlZEZpbmFsaXplcjo6ZmluYWxpemVGdW5jdGlvbigpCiB7CiAgICAgcmV0dXJuIGZhbHNl
OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGYWlsZWRGaW5hbGl6ZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZhaWxlZEZpbmFs
aXplci5oCShyZXZpc2lvbiAxNTQ2MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZhaWxlZEZpbmFsaXplci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw4ICszOSw4IEBAIHB1Ymxp
YzoKICAgICBGYWlsZWRGaW5hbGl6ZXIoUGxhbiYpOwogICAgIHZpcnR1YWwgfkZhaWxlZEZpbmFs
aXplcigpOwogICAgIAotICAgIGJvb2wgZmluYWxpemUoUmVmUHRyPEpTQzo6SklUQ29kZT4mIGVu
dHJ5KTsKLSAgICBib29sIGZpbmFsaXplRnVuY3Rpb24oUmVmUHRyPEpTQzo6SklUQ29kZT4mIGVu
dHJ5LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIHdpdGhBcml0eUNoZWNrKTsKKyAgICBib29sIGZp
bmFsaXplKCk7CisgICAgYm9vbCBmaW5hbGl6ZUZ1bmN0aW9uKCk7CiB9OwogCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpbmFs
aXplci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmluYWxp
emVyLmgJKHJldmlzaW9uIDE1NDYzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RmluYWxpemVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDggKzQ2LDggQEAgcHVibGljOgogICAg
IEZpbmFsaXplcihQbGFuJik7CiAgICAgdmlydHVhbCB+RmluYWxpemVyKCk7CiAgICAgCi0gICAg
dmlydHVhbCBib29sIGZpbmFsaXplKFJlZlB0cjxKU0M6OkpJVENvZGU+JiBlbnRyeSkgPSAwOwot
ICAgIHZpcnR1YWwgYm9vbCBmaW5hbGl6ZUZ1bmN0aW9uKFJlZlB0cjxKU0M6OkpJVENvZGU+JiBl
bnRyeSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiB3aXRoQXJpdHlDaGVjaykgPSAwOworICAgIHZp
cnR1YWwgYm9vbCBmaW5hbGl6ZSgpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZmluYWxpemVGdW5j
dGlvbigpID0gMDsKIAogcHJvdGVjdGVkOgogICAgIFBsYW4mIG1fcGxhbjsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklURmluYWxpemVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5jcHAJKHJldmlzaW9uIDE1
NDYzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklURmluYWxpemVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAK
KyNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJERkdDb21tb24uaCIKICNpbmNsdWRl
ICJERkdQbGFuLmgiCiAKQEAgLTQ1LDIzICs0NiwyMyBAQCBKSVRGaW5hbGl6ZXI6On5KSVRGaW5h
bGl6ZXIoKQogewogfQogCi1ib29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemUoUmVmUHRyPEpTQzo6
SklUQ29kZT4mIGVudHJ5KQorYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplKCkKIHsKICAgICBm
aW5hbGl6ZUNvbW1vbigpOwogICAgIAogICAgIG1faml0Q29kZS0+aW5pdGlhbGl6ZUNvZGVSZWYo
bV9saW5rQnVmZmVyLT5maW5hbGl6ZUNvZGVXaXRob3V0RGlzYXNzZW1ibHkoKSk7Ci0gICAgZW50
cnkgPSBtX2ppdENvZGU7CisgICAgbV9wbGFuLmNvZGVCbG9jay0+c2V0SklUQ29kZShtX2ppdENv
ZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpKTsKICAgICAKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplRnVuY3Rpb24oUmVmUHRyPEpTQzo6SklUQ29k
ZT4mIGVudHJ5LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIHdpdGhBcml0eUNoZWNrKQorYm9vbCBK
SVRGaW5hbGl6ZXI6OmZpbmFsaXplRnVuY3Rpb24oKQogewogICAgIGZpbmFsaXplQ29tbW9uKCk7
CiAgICAgCi0gICAgd2l0aEFyaXR5Q2hlY2sgPSBtX2xpbmtCdWZmZXItPmxvY2F0aW9uT2YobV9h
cml0eUNoZWNrKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgd2l0aEFyaXR5Q2hlY2sgPSBt
X2xpbmtCdWZmZXItPmxvY2F0aW9uT2YobV9hcml0eUNoZWNrKTsKICAgICBtX2ppdENvZGUtPmlu
aXRpYWxpemVDb2RlUmVmKG1fbGlua0J1ZmZlci0+ZmluYWxpemVDb2RlV2l0aG91dERpc2Fzc2Vt
Ymx5KCkpOwotICAgIGVudHJ5ID0gbV9qaXRDb2RlOworICAgIG1fcGxhbi5jb2RlQmxvY2stPnNl
dEpJVENvZGUobV9qaXRDb2RlLCB3aXRoQXJpdHlDaGVjayk7CiAgICAgCiAgICAgcmV0dXJuIHRy
dWU7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklURmluYWxpemVy
LmgJKHJldmlzaW9uIDE1NDYzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
RmluYWxpemVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDggKzQyLDggQEAgcHVibGljOgogICAg
IEpJVEZpbmFsaXplcihQbGFuJiwgUGFzc1JlZlB0cjxKSVRDb2RlPiwgUGFzc093blB0cjxMaW5r
QnVmZmVyPiwgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGFyaXR5Q2hlY2sgPSBNYWNyb0Fzc2VtYmxl
cjo6TGFiZWwoKSk7CiAgICAgdmlydHVhbCB+SklURmluYWxpemVyKCk7CiAgICAgCi0gICAgYm9v
bCBmaW5hbGl6ZShSZWZQdHI8SlNDOjpKSVRDb2RlPiYgZW50cnkpOwotICAgIGJvb2wgZmluYWxp
emVGdW5jdGlvbihSZWZQdHI8SlNDOjpKSVRDb2RlPiYgZW50cnksIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciYgd2l0aEFyaXR5Q2hlY2spOworICAgIGJvb2wgZmluYWxpemUoKTsKKyAgICBib29sIGZp
bmFsaXplRnVuY3Rpb24oKTsKIAogcHJpdmF0ZToKICAgICB2b2lkIGZpbmFsaXplQ29tbW9uKCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRQcmVwYXJhdGlvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0UHJl
cGFyYXRpb24uY3BwCShyZXZpc2lvbiAxNTQ2MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkV4aXRQcmVwYXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDE5ICsz
MCwyOCBAQAogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiRXhlY3V0YWJsZS5o
IgorI2luY2x1ZGUgIkpJVENvZGUuaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogdm9pZCBwcmVwYXJlQ29kZU9yaWdpbkZvck9T
UkV4aXQoRXhlY1N0YXRlKiBleGVjLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiB7CisgICAgRGVm
ZXJHQyBkZWZlckdDKGV4ZWMtPnZtKCkuaGVhcCk7CisgICAgCiAgICAgZm9yICg7IGNvZGVPcmln
aW4uaW5saW5lQ2FsbEZyYW1lOyBjb2RlT3JpZ2luID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJh
bWUtPmNhbGxlcikgewogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPQog
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oY29kZU9yaWdpbi5p
bmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUuZ2V0KCkpOwogICAgICAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9IGV4ZWN1dGFibGUtPmJhc2VsaW5lQ29kZUJsb2NrRm9yKAogICAgICAgICAgICAg
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmlzQ2FsbCA/IENvZGVGb3JDYWxsIDogQ29kZUZv
ckNvbnN0cnVjdCk7CiAgICAgICAgIAotICAgICAgICBjb2RlQmxvY2stPmppdENvbXBpbGUoZXhl
Yyk7CisgICAgICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKU0M6OkpJVENvZGU6OkJh
c2VsaW5lSklUKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIEFTU0VSVChjb2RlQmxv
Y2stPmppdFR5cGUoKSA9PSBKU0M6OkpJVENvZGU6OkludGVycHJldGVyVGh1bmspOworICAgICAg
ICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBjb2RlQmxvY2stPnByZXBhcmVGb3JFeGVjdXRp
b24oCisgICAgICAgICAgICBleGVjLCBKU0M6OkpJVENvZGU6OkJhc2VsaW5lSklULCBKSVRDb21w
aWxhdGlvbk11c3RTdWNjZWVkKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3Vs
dCA9PSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpOworICAgICAgICBjb2RlQmxvY2stPmluc3RhbGwo
KTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0
aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmNwcAkocmV2aXNpb24gMTU0NjMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI4MSw3ICsxMjgxLDcgQEAg
aW5saW5lIGNoYXIqIGxpbmtGb3IoRXhlY1N0YXRlKiBleGVjQ2FsbAogICAgICAgICBjb2RlUHRy
ID0gZXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvcihraW5kKS0+YWRkcmVzc0ZvckNhbGwo
KTsKICAgICBlbHNlIHsKICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1
dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKLSAg
ICAgICAgSlNPYmplY3QqIGVycm9yID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5jb21waWxlRm9yKGV4
ZWNDYWxsZWUsIGNhbGxlZS0+c2NvcGUoKSwga2luZCk7CisgICAgICAgIEpTT2JqZWN0KiBlcnJv
ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbihleGVjQ2FsbGVlLCBj
YWxsZWUtPnNjb3BlKCksIGtpbmQpOwogICAgICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgICAg
IHZtLT5leGNlcHRpb24gPSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoZXhlYyk7CiAgICAgICAg
ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odm0tPmdldENUSVN0dWIodGhyb3dF
eGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJl
c3MoKSk7CkBAIC0xMzI2LDcgKzEzMjYsNyBAQCBpbmxpbmUgY2hhciogdmlydHVhbEZvcldpdGhG
dW5jdGlvbihFeGVjCiAgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBmdW5jdGlvbi0+
ZXhlY3V0YWJsZSgpOwogICAgIGlmIChVTkxJS0VMWSghZXhlY3V0YWJsZS0+aGFzSklUQ29kZUZv
cihraW5kKSkpIHsKICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFi
bGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKLSAgICAg
ICAgSlNPYmplY3QqIGVycm9yID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5jb21waWxlRm9yKGV4ZWND
YWxsZWUsIGZ1bmN0aW9uLT5zY29wZSgpLCBraW5kKTsKKyAgICAgICAgSlNPYmplY3QqIGVycm9y
ID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uKGV4ZWNDYWxsZWUsIGZ1
bmN0aW9uLT5zY29wZSgpLCBraW5kKTsKICAgICAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgICAg
ICBleGVjLT52bSgpLmV4Y2VwdGlvbiA9IGVycm9yOwogICAgICAgICAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxT
bG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAxNTQ2MzIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCwx
MCArODAsOSBAQCBzdGF0aWMgdm9pZCBkdW1wQW5kVmVyaWZ5R3JhcGgoR3JhcGgmIGdyCiB9CiAK
IFBsYW46OlBsYW4oCi0gICAgQ29tcGlsZU1vZGUgY29tcGlsZU1vZGUsIFBhc3NSZWZQdHI8Q29k
ZUJsb2NrPiBwYXNzZWRDb2RlQmxvY2ssIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwK
KyAgICBQYXNzUmVmUHRyPENvZGVCbG9jaz4gcGFzc2VkQ29kZUJsb2NrLCB1bnNpZ25lZCBvc3JF
bnRyeUJ5dGVjb2RlSW5kZXgsCiAgICAgdW5zaWduZWQgbnVtVmFyc1dpdGhWYWx1ZXMpCi0gICAg
OiBjb21waWxlTW9kZShjb21waWxlTW9kZSkKLSAgICAsIHZtKCpwYXNzZWRDb2RlQmxvY2stPnZt
KCkpCisgICAgOiB2bSgqcGFzc2VkQ29kZUJsb2NrLT52bSgpKQogICAgICwgY29kZUJsb2NrKHBh
c3NlZENvZGVCbG9jaykKICAgICAsIG9zckVudHJ5Qnl0ZWNvZGVJbmRleChvc3JFbnRyeUJ5dGVj
b2RlSW5kZXgpCiAgICAgLCBudW1WYXJzV2l0aFZhbHVlcyhudW1WYXJzV2l0aFZhbHVlcykKQEAg
LTIwOCw3ICsyMDcsNyBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhy
CiAKICNpZiBFTkFCTEUoRlRMX0pJVCkKICAgICBpZiAoT3B0aW9uczo6dXNlRXhwZXJpbWVudGFs
RlRMKCkKLSAgICAgICAgJiYgY29tcGlsZU1vZGUgPT0gQ29tcGlsZUZ1bmN0aW9uCisgICAgICAg
ICYmIGNvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUKICAgICAgICAgJiYgRlRM
OjpjYW5Db21waWxlKGRmZykpIHsKICAgICAgICAgCiAgICAgICAgIHBlcmZvcm1Dcml0aWNhbEVk
Z2VCcmVha2luZyhkZmcpOwpAQCAtMjU1LDEyICsyNTQsMTAgQEAgUGxhbjo6Q29tcGlsYXRpb25Q
YXRoIFBsYW46OmNvbXBpbGVJblRocgogICAgIGR1bXBBbmRWZXJpZnlHcmFwaChkZmcsICJHcmFw
aCBhZnRlciBvcHRpbWl6YXRpb246Iik7CiAKICAgICBKSVRDb21waWxlciBkYXRhRmxvd0pJVChk
ZmcpOwotICAgIGlmIChjb21waWxlTW9kZSA9PSBDb21waWxlRnVuY3Rpb24pIHsKKyAgICBpZiAo
Y29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkgewogICAgICAgICBkYXRhRmxv
d0pJVC5jb21waWxlRnVuY3Rpb24oKTsKICAgICAgICAgZGF0YUZsb3dKSVQubGlua0Z1bmN0aW9u
KCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJUKGNvbXBpbGVNb2RlID09IENvbXBpbGVP
dGhlcik7Ci0gICAgICAgIAogICAgICAgICBkYXRhRmxvd0pJVC5jb21waWxlKCk7CiAgICAgICAg
IGRhdGFGbG93SklULmxpbmsoKTsKICAgICB9CkBAIC0yODMsMjUgKzI4MCwzMCBAQCB2b2lkIFBs
YW46OnJlYWxseUFkZChDb21tb25EYXRhKiBjb21tb25ECiAgICAgd3JpdGVCYXJyaWVycy50cmln
Z2VyKHZtKTsKIH0KIAotQ29tcGlsYXRpb25SZXN1bHQgUGxhbjo6ZmluYWxpemUoUmVmUHRyPEpT
Qzo6SklUQ29kZT4mIGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciogaml0Q29kZVdpdGhB
cml0eUNoZWNrKQorQ29tcGlsYXRpb25SZXN1bHQgUGxhbjo6ZmluYWxpemVXaXRob3V0Tm90aWZ5
aW5nQ2FsbGJhY2soKQogewogICAgIGlmICghaXNTdGlsbFZhbGlkKCkpCiAgICAgICAgIHJldHVy
biBDb21waWxhdGlvbkludmFsaWRhdGVkOwogICAgIAogICAgIGJvb2wgcmVzdWx0OwotICAgIGlm
IChjb21waWxlTW9kZSA9PSBDb21waWxlRnVuY3Rpb24pCi0gICAgICAgIHJlc3VsdCA9IGZpbmFs
aXplci0+ZmluYWxpemVGdW5jdGlvbihqaXRDb2RlLCAqaml0Q29kZVdpdGhBcml0eUNoZWNrKTsK
KyAgICBpZiAoY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkKKyAgICAgICAg
cmVzdWx0ID0gZmluYWxpemVyLT5maW5hbGl6ZUZ1bmN0aW9uKCk7CiAgICAgZWxzZQotICAgICAg
ICByZXN1bHQgPSBmaW5hbGl6ZXItPmZpbmFsaXplKGppdENvZGUpOworICAgICAgICByZXN1bHQg
PSBmaW5hbGl6ZXItPmZpbmFsaXplKCk7CiAgICAgCiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAg
IHJldHVybiBDb21waWxhdGlvbkZhaWxlZDsKICAgICAKLSAgICByZWFsbHlBZGQoaml0Q29kZS0+
ZGZnQ29tbW9uKCkpOworICAgIHJlYWxseUFkZChjb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29t
bW9uKCkpOwogICAgIAogICAgIHJldHVybiBDb21waWxhdGlvblN1Y2Nlc3NmdWw7CiB9CiAKK3Zv
aWQgUGxhbjo6ZmluYWxpemVBbmROb3RpZnlDYWxsYmFjaygpCit7CisgICAgY2FsbGJhY2stPmNv
bXBpbGF0aW9uRGlkQ29tcGxldGUoY29kZUJsb2NrLmdldCgpLCBmaW5hbGl6ZVdpdGhvdXROb3Rp
ZnlpbmdDYWxsYmFjaygpKTsKK30KKwogQ29kZUJsb2NrKiBQbGFuOjprZXkoKQogewogICAgIHJl
dHVybiBjb2RlQmxvY2stPmFsdGVybmF0aXZlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1BsYW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1BsYW4uaAkocmV2aXNpb24gMTU0NjMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQbGFuLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJE
RkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuaCIKICNpbmNsdWRlICJERkdEZXNpcmVkV3JpdGVCYXJy
aWVycy5oIgogI2luY2x1ZGUgIkRGR0ZpbmFsaXplci5oIgorI2luY2x1ZGUgIkRlZmVycmVkQ29t
cGlsYXRpb25DYWxsYmFjay5oIgogI2luY2x1ZGUgIk9wZXJhbmRzLmgiCiAjaW5jbHVkZSAiUHJv
ZmlsZXJDb21waWxhdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5o
PgpAQCAtNDgsMjMgKzQ5LDIxIEBAIG5hbWVzcGFjZSBERkcgewogCiBjbGFzcyBMb25nTGl2ZWRT
dGF0ZTsKIAotZW51bSBDb21waWxlTW9kZSB7IENvbXBpbGVGdW5jdGlvbiwgQ29tcGlsZU90aGVy
IH07Ci0KICNpZiBFTkFCTEUoREZHX0pJVCkKIAogc3RydWN0IFBsYW4gOiBwdWJsaWMgVGhyZWFk
U2FmZVJlZkNvdW50ZWQ8UGxhbj4gewogICAgIFBsYW4oCi0gICAgICAgIENvbXBpbGVNb2RlIGNv
bXBpbGVNb2RlLCBQYXNzUmVmUHRyPENvZGVCbG9jaz4gY29kZUJsb2NrLAotICAgICAgICB1bnNp
Z25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIHVuc2lnbmVkIG51bVZhcnNXaXRoVmFsdWVzKTsK
KyAgICAgICAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+IGNvZGVCbG9jaywgdW5zaWduZWQgb3NyRW50
cnlCeXRlY29kZUluZGV4LAorICAgICAgICB1bnNpZ25lZCBudW1WYXJzV2l0aFZhbHVlcyk7CiAg
ICAgflBsYW4oKTsKICAgICAKICAgICB2b2lkIGNvbXBpbGVJblRocmVhZChMb25nTGl2ZWRTdGF0
ZSYpOwogICAgIAotICAgIENvbXBpbGF0aW9uUmVzdWx0IGZpbmFsaXplKFJlZlB0cjxKU0M6OkpJ
VENvZGU+JiBqaXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIqIGppdENvZGVXaXRoQXJpdHlD
aGVjayk7CisgICAgQ29tcGlsYXRpb25SZXN1bHQgZmluYWxpemVXaXRob3V0Tm90aWZ5aW5nQ2Fs
bGJhY2soKTsKKyAgICB2b2lkIGZpbmFsaXplQW5kTm90aWZ5Q2FsbGJhY2soKTsKICAgICAKICAg
ICBDb2RlQmxvY2sqIGtleSgpOwogICAgIAotICAgIGNvbnN0IENvbXBpbGVNb2RlIGNvbXBpbGVN
b2RlOwogICAgIFZNJiB2bTsKICAgICBSZWZQdHI8Q29kZUJsb2NrPiBjb2RlQmxvY2s7CiAgICAg
Y29uc3QgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4OwpAQCAtODYsNiArODUsOCBAQCBz
dHJ1Y3QgUGxhbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlCiAgICAgCiAgICAgYm9vbCBp
c0NvbXBpbGVkOwogCisgICAgUmVmUHRyPERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4gY2Fs
bGJhY2s7CisKIHByaXZhdGU6CiAgICAgZW51bSBDb21waWxhdGlvblBhdGggeyBGYWlsUGF0aCwg
REZHUGF0aCwgRlRMUGF0aCB9OwogICAgIENvbXBpbGF0aW9uUGF0aCBjb21waWxlSW5UaHJlYWRJ
bXBsKExvbmdMaXZlZFN0YXRlJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1dvcmtsaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1dvcmtsaXN0LmNwcAkocmV2aXNpb24gMTU0NjMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdXb3JrbGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NSwxMCArMTY1LDcgQEAg
V29ya2xpc3Q6OlN0YXRlIFdvcmtsaXN0Ojpjb21wbGV0ZUFsbFJlYQogICAgICAgICAKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQocGxhbi0+aXNDb21waWxlZCk7CiAgICAgICAgIAotICAgICAgICBD
b21waWxhdGlvblJlc3VsdCBjb21waWxhdGlvblJlc3VsdCA9Ci0gICAgICAgICAgICBwcm9maWxl
ZEJsb2NrLT5yZXBsYWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZShwbGFuKTsKLSAgICAgICAg
UkVMRUFTRV9BU1NFUlQoY29tcGlsYXRpb25SZXN1bHQgIT0gQ29tcGlsYXRpb25EZWZlcnJlZCk7
Ci0gICAgICAgIHByb2ZpbGVkQmxvY2stPnNldE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25D
b21waWxhdGlvblJlc3VsdChjb21waWxhdGlvblJlc3VsdCk7CisgICAgICAgIHBsYW4tPmZpbmFs
aXplQW5kTm90aWZ5Q2FsbGJhY2soKTsKICAgICAgICAgCiAgICAgICAgIGlmIChwcm9maWxlZEJs
b2NrID09IHJlcXVlc3RlZFByb2ZpbGVkQmxvY2spCiAgICAgICAgICAgICByZXN1bHRpbmdTdGF0
ZSA9IENvbXBpbGVkOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24g
MTU0NjMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xODQsNiArMTg0LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGNvbnN0IEpJ
VFN0dWJSb3V0aW5lU2V0JiBqaXRTdHViUm91dGluZXMoKSB7IHJldHVybiBtX2ppdFN0dWJSb3V0
aW5lczsgfQogICAgICAgICAKICAgICAgICAgdm9pZCBhZGRSZWZlcmVuY2UoSlNDZWxsKiwgQXJy
YXlCdWZmZXIqKTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgaXNEZWZlcnJlZCgpIGNvbnN0IHsg
cmV0dXJuICEhbV9kZWZlcnJhbERlcHRoOyB9CiAKICAgICBwcml2YXRlOgogICAgICAgICBmcmll
bmQgY2xhc3MgQ29kZUJsb2NrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAxNTQ2MzIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04MTcsNyArODE3LDcgQEAgZmFpbGVkSlNPTlA6CiAgICAgaWYgKEpTT2JqZWN0KiBlcnJv
ciA9IHByb2dyYW0tPmluaXRpYWxpemVHbG9iYWxQcm9wZXJ0aWVzKHZtLCBjYWxsRnJhbWUsIHNj
b3BlKSkKICAgICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4odGhyb3dFcnJvcihjYWxsRnJhbWUs
IGVycm9yKSk7CiAKLSAgICBpZiAoSlNPYmplY3QqIGVycm9yID0gcHJvZ3JhbS0+Y29tcGlsZShj
YWxsRnJhbWUsIHNjb3BlKSkKKyAgICBpZiAoSlNPYmplY3QqIGVycm9yID0gcHJvZ3JhbS0+cHJl
cGFyZUZvckV4ZWN1dGlvbihjYWxsRnJhbWUsIHNjb3BlLCBDb2RlRm9yQ2FsbCkpCiAgICAgICAg
IHJldHVybiBjaGVja2VkUmV0dXJuKHRocm93RXJyb3IoY2FsbEZyYW1lLCBlcnJvcikpOwogCiAg
ICAgUHJvZ3JhbUNvZGVCbG9jayogY29kZUJsb2NrID0gJnByb2dyYW0tPmdlbmVyYXRlZEJ5dGVj
b2RlKCk7CkBAIC04ODYsNyArODg2LDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNh
bGwoQ2FsbEZyYQogCiAgICAgaWYgKGlzSlNDYWxsKSB7CiAgICAgICAgIC8vIENvbXBpbGUgdGhl
IGNhbGxlZToKLSAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVFcnJvciA9IGNhbGxEYXRhLmpzLmZ1
bmN0aW9uRXhlY3V0YWJsZS0+Y29tcGlsZUZvckNhbGwoY2FsbEZyYW1lLCBzY29wZSk7CisgICAg
ICAgIEpTT2JqZWN0KiBjb21waWxlRXJyb3IgPSBjYWxsRGF0YS5qcy5mdW5jdGlvbkV4ZWN1dGFi
bGUtPnByZXBhcmVGb3JFeGVjdXRpb24oY2FsbEZyYW1lLCBzY29wZSwgQ29kZUZvckNhbGwpOwog
ICAgICAgICBpZiAoVU5MSUtFTFkoISFjb21waWxlRXJyb3IpKSB7CiAgICAgICAgICAgICByZXR1
cm4gY2hlY2tlZFJldHVybih0aHJvd0Vycm9yKGNhbGxGcmFtZSwgY29tcGlsZUVycm9yKSk7CiAg
ICAgICAgIH0KQEAgLTk2NSw3ICs5NjUsNyBAQCBKU09iamVjdCogSW50ZXJwcmV0ZXI6OmV4ZWN1
dGVDb25zdHJ1Y3QoCiAKICAgICBpZiAoaXNKU0NvbnN0cnVjdCkgewogICAgICAgICAvLyBDb21w
aWxlIHRoZSBjYWxsZWU6Ci0gICAgICAgIEpTT2JqZWN0KiBjb21waWxlRXJyb3IgPSBjb25zdHJ1
Y3REYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29tcGlsZUZvckNvbnN0cnVjdChjYWxsRnJh
bWUsIHNjb3BlKTsKKyAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVFcnJvciA9IGNvbnN0cnVjdERh
dGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uKGNhbGxGcmFtZSwg
c2NvcGUsIENvZGVGb3JDb25zdHJ1Y3QpOwogICAgICAgICBpZiAoVU5MSUtFTFkoISFjb21waWxl
RXJyb3IpKSB7CiAgICAgICAgICAgICByZXR1cm4gY2hlY2tlZFJldHVybih0aHJvd0Vycm9yKGNh
bGxGcmFtZSwgY29tcGlsZUVycm9yKSk7CiAgICAgICAgIH0KQEAgLTEwMzksNyArMTAzOSw3IEBA
IENhbGxGcmFtZUNsb3N1cmUgSW50ZXJwcmV0ZXI6OnByZXBhcmVGb3IKICAgICB9CiAKICAgICAv
LyBDb21waWxlIHRoZSBjYWxsZWU6Ci0gICAgSlNPYmplY3QqIGVycm9yID0gZnVuY3Rpb25FeGVj
dXRhYmxlLT5jb21waWxlRm9yQ2FsbChjYWxsRnJhbWUsIHNjb3BlKTsKKyAgICBKU09iamVjdCog
ZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb24oY2FsbEZyYW1l
LCBzY29wZSwgQ29kZUZvckNhbGwpOwogICAgIGlmIChlcnJvcikgewogICAgICAgICB0aHJvd0Vy
cm9yKGNhbGxGcmFtZSwgZXJyb3IpOwogICAgICAgICByZXR1cm4gQ2FsbEZyYW1lQ2xvc3VyZSgp
OwpAQCAtMTE1NSw3ICsxMTU1LDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFs
RXhlY3V0YQogICAgICAgICB9CiAgICAgfQogCi0gICAgSlNPYmplY3QqIGNvbXBpbGVFcnJvciA9
IGV2YWwtPmNvbXBpbGUoY2FsbEZyYW1lLCBzY29wZSk7CisgICAgSlNPYmplY3QqIGNvbXBpbGVF
cnJvciA9IGV2YWwtPnByZXBhcmVGb3JFeGVjdXRpb24oY2FsbEZyYW1lLCBzY29wZSwgQ29kZUZv
ckNhbGwpOwogICAgIGlmIChVTkxJS0VMWSghIWNvbXBpbGVFcnJvcikpCiAgICAgICAgIHJldHVy
biBjaGVja2VkUmV0dXJuKHRocm93RXJyb3IoY2FsbEZyYW1lLCBjb21waWxlRXJyb3IpKTsKICAg
ICBFdmFsQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSAmZXZhbC0+Z2VuZXJhdGVkQnl0ZWNvZGUoKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklURHJpdmVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVREcml2ZXIuaAkocmV2aXNpb24gMTU0NjMy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVREcml2ZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMSwxNTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEpJVERyaXZlcl9oCi0jZGVmaW5lIEpJVERyaXZlcl9o
Ci0KLSNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KLQotI2lmIEVOQUJMRShKSVQpCi0KLSNpbmNs
dWRlICJCeXRlY29kZUdlbmVyYXRvci5oIgotI2luY2x1ZGUgIkNvbXBpbGF0aW9uUmVzdWx0Lmgi
Ci0jaW5jbHVkZSAiREZHRHJpdmVyLmgiCi0jaW5jbHVkZSAiSklULmgiCi0jaW5jbHVkZSAiTExJ
bnRFbnRyeXBvaW50cy5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUg
Q29kZUJsb2NrVHlwZT4KLWlubGluZSBDb21waWxhdGlvblJlc3VsdCBqaXRDb21waWxlSWZBcHBy
b3ByaWF0ZUltcGwoCi0gICAgRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2tUeXBlKiBjb2RlQmxv
Y2ssIFJlZlB0cjxKSVRDb2RlPiYgaml0Q29kZSwKLSAgICBKSVRDb2RlOjpKSVRUeXBlIGppdFR5
cGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkK
LXsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIAotICAgIGlmIChqaXRUeXBlID09IGNv
ZGVCbG9jay0+aml0VHlwZSgpKQotICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25Ob3ROZWVkZWQ7
Ci0gICAgCi0gICAgaWYgKCF2bS5jYW5Vc2VKSVQoKSkKLSAgICAgICAgcmV0dXJuIENvbXBpbGF0
aW9uTm90TmVlZGVkOyAvLyBGSVhNRTogSW52ZXN0aWdhdGUgaWYgdGhpcyBpcyByaWdodC4gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNjI0NgotICAgIAotICAgIGNv
ZGVCbG9jay0+dW5saW5rSW5jb21pbmdDYWxscygpOwotICAgIAotICAgIFJlZlB0cjxKSVRDb2Rl
PiBvbGRKSVRDb2RlID0gaml0Q29kZTsKLSAgICAKLSAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6
aW5nSklUKGppdFR5cGUpKSB7Ci0gICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9Ci0g
ICAgICAgICAgICBERkc6OnRyeUNvbXBpbGUoZXhlYywgY29kZUJsb2NrLCBqaXRDb2RlLCBieXRl
Y29kZUluZGV4KTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBDb21waWxhdGlvblN1Y2Nlc3NmdWwp
Ci0gICAgICAgICAgICBjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPnVubGlua0luY29taW5nQ2Fs
bHMoKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQob2xkSklUQ29kZSA9PSBq
aXRDb2RlKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICB9IGVs
c2UgewotICAgICAgICBSZWZQdHI8SklUQ29kZT4gcmVzdWx0ID0gSklUOjpjb21waWxlKCZ2bSwg
Y29kZUJsb2NrLCBlZmZvcnQpOwotICAgICAgICBpZiAocmVzdWx0KQotICAgICAgICAgICAgaml0
Q29kZSA9IHJlc3VsdDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIENvbXBpbGF0
aW9uRmFpbGVkOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gQ29tcGlsYXRpb25TdWNjZXNzZnVs
OwotfQotCi1pbmxpbmUgQ29tcGlsYXRpb25SZXN1bHQgaml0Q29tcGlsZUZ1bmN0aW9uSWZBcHBy
b3ByaWF0ZUltcGwoCi0gICAgRXhlY1N0YXRlKiBleGVjLCBGdW5jdGlvbkNvZGVCbG9jayogY29k
ZUJsb2NrLCBSZWZQdHI8SklUQ29kZT4mIGppdENvZGUsCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyJiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ssIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSwKLSAg
ICB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCi17
Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICAKLSAgICBpZiAoaml0VHlwZSA9PSBjb2Rl
QmxvY2stPmppdFR5cGUoKSkKLSAgICAgICAgcmV0dXJuIENvbXBpbGF0aW9uTm90TmVlZGVkOwot
ICAgIAotICAgIGlmICghdm0uY2FuVXNlSklUKCkpCi0gICAgICAgIHJldHVybiBDb21waWxhdGlv
bk5vdE5lZWRlZDsgLy8gRklYTUU6IEludmVzdGlnYXRlIGlmIHRoaXMgaXMgcmlnaHQuIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTYyNDYKLSAgICAKLSAgICBjb2Rl
QmxvY2stPnVubGlua0luY29taW5nQ2FsbHMoKTsKLSAgICAKLSAgICBSZWZQdHI8SklUQ29kZT4g
b2xkSklUQ29kZSA9IGppdENvZGU7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIG9sZEpJVENv
ZGVXaXRoQXJpdHlDaGVjayA9IGppdENvZGVXaXRoQXJpdHlDaGVjazsKLSAgICAKLSAgICBpZiAo
SklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUpKSB7Ci0gICAgICAgIENvbXBpbGF0aW9u
UmVzdWx0IHJlc3VsdCA9IERGRzo6dHJ5Q29tcGlsZUZ1bmN0aW9uKAotICAgICAgICAgICAgZXhl
YywgY29kZUJsb2NrLCBqaXRDb2RlLCBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ssIGJ5dGVjb2RlSW5k
ZXgpOwotICAgICAgICBpZiAocmVzdWx0ID09IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bCkKLSAgICAg
ICAgICAgIGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+dW5saW5rSW5jb21pbmdDYWxscygpOwot
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChvbGRKSVRDb2RlID09IGppdENvZGUp
OwotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChvbGRKSVRDb2RlV2l0aEFyaXR5Q2hlY2ssIG9s
ZEpJVENvZGVXaXRoQXJpdHlDaGVjayA9PSBqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOwotICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIFJl
ZlB0cjxKSVRDb2RlPiByZXN1bHQgPQotICAgICAgICAgICAgSklUOjpjb21waWxlKCZ2bSwgY29k
ZUJsb2NrLCBlZmZvcnQsICZqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOwotICAgICAgICBpZiAocmVz
dWx0KQotICAgICAgICAgICAgaml0Q29kZSA9IHJlc3VsdDsKLSAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICBBU1NFUlRfVU5VU0VEKG9sZEpJVENvZGVXaXRoQXJpdHlDaGVjaywgb2xkSklUQ29k
ZVdpdGhBcml0eUNoZWNrID09IGppdENvZGVXaXRoQXJpdHlDaGVjayk7Ci0gICAgICAgICAgICBy
ZXR1cm4gQ29tcGlsYXRpb25GYWlsZWQ7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4g
Q29tcGlsYXRpb25TdWNjZXNzZnVsOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tU
eXBlPgotaW5saW5lIENvbXBpbGF0aW9uUmVzdWx0IGppdENvbXBpbGVJZkFwcHJvcHJpYXRlKAot
ICAgIEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBSZWZQdHI8SklU
Q29kZT4mIGppdENvZGUsCi0gICAgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlLCB1bnNpZ25lZCBi
eXRlY29kZUluZGV4LCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCi17Ci0gICAgQ29tcGls
YXRpb25SZXN1bHQgcmVzdWx0ID0gaml0Q29tcGlsZUlmQXBwcm9wcmlhdGVJbXBsKAotICAgICAg
ICBleGVjLCBjb2RlQmxvY2ssIGppdENvZGUsIGppdFR5cGUsIGJ5dGVjb2RlSW5kZXgsIGVmZm9y
dCk7Ci0gICAgaWYgKHJlc3VsdCA9PSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpIHsKLSAgICAgICAg
Y29kZUJsb2NrLT5zZXRKSVRDb2RlKGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpKTsK
LSAgICAgICAgY29kZUJsb2NrLT52bSgpLT5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29zdChqaXRD
b2RlLT5zaXplKCkpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfSAgICAKLQotaW5saW5l
IENvbXBpbGF0aW9uUmVzdWx0IGppdENvbXBpbGVGdW5jdGlvbklmQXBwcm9wcmlhdGUoCi0gICAg
RXhlY1N0YXRlKiBleGVjLCBGdW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2NrLCBSZWZQdHI8SklU
Q29kZT4mIGppdENvZGUsCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBqaXRDb2RlV2l0aEFy
aXR5Q2hlY2ssIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSwKLSAgICB1bnNpZ25lZCBieXRlY29k
ZUluZGV4LCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCi17Ci0gICAgQ29tcGlsYXRpb25S
ZXN1bHQgcmVzdWx0ID0gaml0Q29tcGlsZUZ1bmN0aW9uSWZBcHByb3ByaWF0ZUltcGwoCi0gICAg
ICAgIGV4ZWMsIGNvZGVCbG9jaywgaml0Q29kZSwgaml0Q29kZVdpdGhBcml0eUNoZWNrLCBqaXRU
eXBlLCBieXRlY29kZUluZGV4LCBlZmZvcnQpOwotICAgIGlmIChyZXN1bHQgPT0gQ29tcGlsYXRp
b25TdWNjZXNzZnVsKSB7Ci0gICAgICAgIGNvZGVCbG9jay0+c2V0SklUQ29kZShqaXRDb2RlLCBq
aXRDb2RlV2l0aEFyaXR5Q2hlY2spOwotICAgICAgICBjb2RlQmxvY2stPnZtKCktPmhlYXAucmVw
b3J0RXh0cmFNZW1vcnlDb3N0KGppdENvZGUtPnNpemUoKSk7Ci0gICAgfQotICAgIHJldHVybiBy
ZXN1bHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gRU5BQkxFKEpJVCkK
LQotI2VuZGlmIC8vIEpJVERyaXZlcl9oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUU3R1YnMuY3BwCShyZXZpc2lvbiAxNTQ2MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFN0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQAogI2luY2x1
ZGUgPHd0Zi9JbmxpbmVBU00uaD4KICNpbmNsdWRlICJKSVQuaCIKICNpbmNsdWRlICJKSVRFeGNl
cHRpb25zLmgiCisjaW5jbHVkZSAiSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2su
aCIKICNpbmNsdWRlICJKU0FjdGl2YXRpb24uaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5j
bHVkZSAiSlNGdW5jdGlvbi5oIgpAQCAtMTAxOSw3ICsxMDIwLDcgQEAgREVGSU5FX1NUVUJfRlVO
Q1RJT04odm9pZCwgb3B0aW1pemUpCiAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkp
CiAgICAgICAgICAgICBkYXRhTG9nKCJDb25zaWRlcmluZyBPU1IgIiwgKmNvZGVCbG9jaywgIiAt
PiAiLCAqY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpLCAiLlxuIik7CiAgICAgICAgIC8vIElmIHdl
IGhhdmUgYW4gb3B0aW1pemVkIHJlcGxhY2VtZW50LCB0aGVuIGl0IG11c3QgYmUgdGhlIGNhc2Ug
dGhhdCB3ZSBlbnRlcmVkCi0gICAgICAgIC8vIGN0aV9vcHRpbWl6ZSBmcm9tIGEgbG9vcC4gVGhh
dCdzIGJlY2F1c2UgaXMgdGhlcmUncyBhbiBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQsCisgICAgICAg
IC8vIGN0aV9vcHRpbWl6ZSBmcm9tIGEgbG9vcC4gVGhhdCdzIGJlY2F1c2UgaWYgdGhlcmUncyBh
biBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQsCiAgICAgICAgIC8vIHRoZW4gYWxsIGNhbGxzIHRvIHRo
aXMgZnVuY3Rpb24gd2lsbCBiZSByZWxpbmtlZCB0byB0aGUgcmVwbGFjZW1lbnQgYW5kIHNvCiAg
ICAgICAgIC8vIHRoZSBwcm9sb2d1ZSBPU1Igd2lsbCBuZXZlciBmaXJlLgogICAgICAgICAKQEAg
LTEwNTMsMTggKzEwNTQsMTkgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3B0aW1pemUp
CiAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCiAgICAgICAgICAgICBkYXRhTG9n
KCJUcmlnZ2VyaW5nIG9wdGltaXplZCBjb21waWxhdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiXG4i
KTsKICAgICAgICAgCi0gICAgICAgIEpTU2NvcGUqIHNjb3BlID0gY2FsbEZyYW1lLT5zY29wZSgp
OwotICAgICAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQ7Ci0gICAgICAgIEpTT2JqZWN0KiBl
cnJvciA9IGNvZGVCbG9jay0+Y29tcGlsZU9wdGltaXplZChjYWxsRnJhbWUsIHNjb3BlLCByZXN1
bHQsIGJ5dGVjb2RlSW5kZXgpOwotICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7
CisgICAgICAgIFJlZlB0cjxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+IGNhbGxiYWNrID0g
YWRvcHRSZWYoCisgICAgICAgICAgICBuZXcgSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2Fs
bGJhY2soKSk7CisgICAgICAgIFJlZlB0cjxDb2RlQmxvY2s+IG5ld0NvZGVCbG9jayA9IGNvZGVC
bG9jay0+bmV3UmVwbGFjZW1lbnQoKTsKKyAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0
ID0gbmV3Q29kZUJsb2NrLT5wcmVwYXJlRm9yRXhlY3V0aW9uKAorICAgICAgICAgICAgY2FsbEZy
YW1lLCBKSVRDb2RlOjpERkdKSVQsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCwgYnl0ZWNvZGVJbmRl
eCwgY2FsbGJhY2spOworICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQogICAgICAg
ICAgICAgZGF0YUxvZygiT3B0aW1pemluZyBjb21waWxhdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAi
IHJlc3VsdDogIiwgcmVzdWx0LCAiXG4iKTsKLSAgICAgICAgICAgIGlmIChlcnJvcikKLSAgICAg
ICAgICAgICAgICBkYXRhTG9nKCJXQVJOSU5HOiBvcHRpbWl6ZWQgY29tcGlsYXRpb24gZmFpbGVk
IHdpdGggYSBKUyBlcnJvci5cbiIpOwotICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBjb2Rl
QmxvY2stPnNldE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdChy
ZXN1bHQpOwogICAgICAgICBpZiAocmVzdWx0ICE9IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bCkKICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIG5ld0NvZGVCbG9jay0+aW5zdGFs
bCgpOwogICAgIH0KICAgICAKICAgICBDb2RlQmxvY2sqIG9wdGltaXplZENvZGVCbG9jayA9IGNv
ZGVCbG9jay0+cmVwbGFjZW1lbnQoKTsKQEAgLTExODksNyArMTE5MSw3IEBAIGlubGluZSB2b2lk
KiBqaXRDb21waWxlRm9yKENhbGxGcmFtZSogY2EKICAgICBBU1NFUlQoIWZ1bmN0aW9uLT5pc0hv
c3RGdW5jdGlvbigpKTsKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBmdW5j
dGlvbi0+anNFeGVjdXRhYmxlKCk7CiAgICAgSlNTY29wZSogY2FsbERhdGFTY29wZUNoYWluID0g
ZnVuY3Rpb24tPnNjb3BlKCk7Ci0gICAgSlNPYmplY3QqIGVycm9yID0gZXhlY3V0YWJsZS0+Y29t
cGlsZUZvcihjYWxsRnJhbWUsIGNhbGxEYXRhU2NvcGVDaGFpbiwga2luZCk7CisgICAgSlNPYmpl
Y3QqIGVycm9yID0gZXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbihjYWxsRnJhbWUsIGNh
bGxEYXRhU2NvcGVDaGFpbiwga2luZCk7CiAgICAgaWYgKCFlcnJvcikKICAgICAgICAgcmV0dXJu
IGZ1bmN0aW9uOwogICAgIGNhbGxGcmFtZS0+dm0oKS5leGNlcHRpb24gPSBlcnJvcjsKQEAgLTEy
ODgsNyArMTI5MCw3IEBAIGlubGluZSB2b2lkKiBsYXp5TGlua0ZvcihDYWxsRnJhbWUqIGNhbGwK
ICAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVGb3Ioa2luZCkt
PmFkZHJlc3NGb3JDYWxsKCk7CiAgICAgZWxzZSB7CiAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJs
ZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4o
ZXhlY3V0YWJsZSk7Ci0gICAgICAgIGlmIChKU09iamVjdCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1
dGFibGUtPmNvbXBpbGVGb3IoY2FsbEZyYW1lLCBjYWxsZWUtPnNjb3BlKCksIGtpbmQpKSB7Cisg
ICAgICAgIGlmIChKU09iamVjdCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVG
b3JFeGVjdXRpb24oY2FsbEZyYW1lLCBjYWxsZWUtPnNjb3BlKCksIGtpbmQpKSB7CiAgICAgICAg
ICAgICBjYWxsRnJhbWUtPnZtKCkuZXhjZXB0aW9uID0gZXJyb3I7CiAgICAgICAgICAgICByZXR1
cm4gMDsKICAgICAgICAgfQpAQCAtMTM2NSw3ICsxMzY3LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJ
T04odm9pZCosIHZtX2xhenlMaW5rQwogICAgICAgICAKICAgICAgICAgRnVuY3Rpb25FeGVjdXRh
YmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhl
Y3V0YWJsZSk7CiAgICAgICAgIEpTU2NvcGUqIHNjb3BlQ2hhaW4gPSBjYWxsZWUtPnNjb3BlKCk7
Ci0gICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+Y29tcGlsZUZv
cihjYWxsRnJhbWUsIHNjb3BlQ2hhaW4sIENvZGVGb3JDYWxsKTsKKyAgICAgICAgSlNPYmplY3Qq
IGVycm9yID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uKGNhbGxGcmFt
ZSwgc2NvcGVDaGFpbiwgQ29kZUZvckNhbGwpOwogICAgICAgICBpZiAoZXJyb3IpIHsKICAgICAg
ICAgICAgIGNhbGxGcmFtZS0+dm0oKS5leGNlcHRpb24gPSBlcnJvcjsKICAgICAgICAgICAgIHJl
dHVybiAwOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUb0RGR0RlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRvREZHRGVmZXJyZWRDb21waWxh
dGlvbkNhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIgorCisj
aW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiRXhlY3V0YWJsZS5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKworSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OkpJVFRvREZH
RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrKCkgeyB9CitKSVRUb0RGR0RlZmVycmVkQ29tcGls
YXRpb25DYWxsYmFjazo6fkpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrKCkgeyB9
CisKK3ZvaWQgSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNvbXBpbGF0aW9u
RGlkQ29tcGxldGUoCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGF0aW9uUmVzdWx0
IHJlc3VsdCkKK3sKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBl
KCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOworICAgIAorICAgIGlmIChyZXN1bHQgPT0gQ29t
cGlsYXRpb25TdWNjZXNzZnVsKQorICAgICAgICBjb2RlQmxvY2stPmluc3RhbGwoKTsKKyAgICAK
KyAgICBjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPnNldE9wdGltaXphdGlvblRocmVzaG9sZEJh
c2VkT25Db21waWxhdGlvblJlc3VsdChyZXN1bHQpOworfQorCit9IC8vIEpTQworCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUb0RGR0Rl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxs
YmFja19oCisjZGVmaW5lIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrX2gKKwor
I2luY2x1ZGUgIkRlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIgorCituYW1lc3BhY2UgSlND
IHsKKworY2xhc3MgU2NyaXB0RXhlY3V0YWJsZTsKKworY2xhc3MgSklUVG9ERkdEZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2sgOiBwdWJsaWMgRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrIHsK
K3B1YmxpYzoKKyAgICBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaygpOworICAg
IHZpcnR1YWwgfkpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrKCk7CisKKyAgICB2
aXJ0dWFsIHZvaWQgY29tcGlsYXRpb25EaWRDb21wbGV0ZShDb2RlQmxvY2sqLCBDb21waWxhdGlv
blJlc3VsdCk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpJVFRvREZH
RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xMSW50RW50cnlwb2ludHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludEVudHJ5cG9pbnRzLmNwcAkocmV2aXNpb24gMTU0NjMyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RW50cnlwb2ludHMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yOCw2MiArMjgsNzcgQEAKIAogI2lmIEVOQUJMRShMTElOVCkKIAorI2luY2x1
ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkpJVENvZGUuaCIKLSNpbmNsdWRlICJWTS5oIgog
I2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAjaW5jbHVkZSAiTExJbnRUaHVua3MuaCIKICNpbmNsdWRl
ICJMb3dMZXZlbEludGVycHJldGVyLmgiCisjaW5jbHVkZSAiVk0uaCIKIAogCiBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIExMSW50IHsKIAotdm9pZCBnZXRGdW5jdGlvbkVudHJ5cG9pbnQoVk0m
IHZtLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIFJlZlB0cjxKSVRDb2RlPiYgaml0Q29k
ZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBhcml0eUNoZWNrKQordm9pZCBzZXRGdW5jdGlvbkVu
dHJ5cG9pbnQoVk0mIHZtLCBGdW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2NrKQogeworICAgIENv
ZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCA9IGNvZGVCbG9jay0+c3BlY2lhbGl6YXRpb25LaW5k
KCk7CisgICAgCiAgICAgaWYgKCF2bS5jYW5Vc2VKSVQoKSkgewogICAgICAgICBpZiAoa2luZCA9
PSBDb2RlRm9yQ2FsbCkgewotICAgICAgICAgICAgaml0Q29kZSA9IGFkb3B0UmVmKG5ldyBEaXJl
Y3RKSVRDb2RlKE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlTExJbnRDb2RlUmVmKGxsaW50
X2Z1bmN0aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykp
OwotICAgICAgICAgICAgYXJpdHlDaGVjayA9IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRl
TExJbnRDb2RlUHRyKGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNrKTsKKyAgICAg
ICAgICAgIGNvZGVCbG9jay0+c2V0SklUQ29kZSgKKyAgICAgICAgICAgICAgICBhZG9wdFJlZihu
ZXcgRGlyZWN0SklUQ29kZShNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZUxMSW50Q29kZVJl
ZihsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9wcm9sb2d1ZSksIEpJVENvZGU6OkludGVycHJldGVy
VGh1bmspKSwKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUxM
SW50Q29kZVB0cihsbGludF9mdW5jdGlvbl9mb3JfY2FsbF9hcml0eV9jaGVjaykpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZv
ckNvbnN0cnVjdCk7Ci0gICAgICAgIGppdENvZGUgPSBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29k
ZShNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZUxMSW50Q29kZVJlZihsbGludF9mdW5jdGlv
bl9mb3JfY29uc3RydWN0X3Byb2xvZ3VlKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpOwot
ICAgICAgICBhcml0eUNoZWNrID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVMTEludENv
ZGVQdHIobGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9hcml0eV9jaGVjayk7CisgICAgICAg
IGNvZGVCbG9jay0+c2V0SklUQ29kZSgKKyAgICAgICAgICAgIGFkb3B0UmVmKG5ldyBEaXJlY3RK
SVRDb2RlKE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlTExJbnRDb2RlUmVmKGxsaW50X2Z1
bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfcHJvbG9ndWUpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5r
KSksCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUxMSW50Q29kZVB0
cihsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5X2NoZWNrKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgCiAjaWYgRU5BQkxFKEpJVCkKICAgICBpZiAoa2luZCA9PSBDb2Rl
Rm9yQ2FsbCkgewotICAgICAgICBqaXRDb2RlID0gYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUo
dm0uZ2V0Q1RJU3R1YihmdW5jdGlvbkZvckNhbGxFbnRyeVRodW5rR2VuZXJhdG9yKSwgSklUQ29k
ZTo6SW50ZXJwcmV0ZXJUaHVuaykpOwotICAgICAgICBhcml0eUNoZWNrID0gdm0uZ2V0Q1RJU3R1
YihmdW5jdGlvbkZvckNhbGxBcml0eUNoZWNrVGh1bmtHZW5lcmF0b3IpLmNvZGUoKTsKKyAgICAg
ICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKAorICAgICAgICAgICAgYWRvcHRSZWYobmV3IERpcmVj
dEpJVENvZGUodm0uZ2V0Q1RJU3R1YihmdW5jdGlvbkZvckNhbGxFbnRyeVRodW5rR2VuZXJhdG9y
KSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykpLAorICAgICAgICAgICAgdm0uZ2V0Q1RJU3R1
YihmdW5jdGlvbkZvckNhbGxBcml0eUNoZWNrVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0
KTsKLSAgICBqaXRDb2RlID0gYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUodm0uZ2V0Q1RJU3R1
YihmdW5jdGlvbkZvckNvbnN0cnVjdEVudHJ5VGh1bmtHZW5lcmF0b3IpLCBKSVRDb2RlOjpJbnRl
cnByZXRlclRodW5rKSk7Ci0gICAgYXJpdHlDaGVjayA9IHZtLmdldENUSVN0dWIoZnVuY3Rpb25G
b3JDb25zdHJ1Y3RBcml0eUNoZWNrVGh1bmtHZW5lcmF0b3IpLmNvZGUoKTsKKyAgICBjb2RlQmxv
Y2stPnNldEpJVENvZGUoCisgICAgICAgIGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKHZtLmdl
dENUSVN0dWIoZnVuY3Rpb25Gb3JDb25zdHJ1Y3RFbnRyeVRodW5rR2VuZXJhdG9yKSwgSklUQ29k
ZTo6SW50ZXJwcmV0ZXJUaHVuaykpLAorICAgICAgICB2bS5nZXRDVElTdHViKGZ1bmN0aW9uRm9y
Q29uc3RydWN0QXJpdHlDaGVja1RodW5rR2VuZXJhdG9yKS5jb2RlKCkpOwogI2VuZGlmIC8vIEVO
QUJMRShKSVQpCiB9CiAKLXZvaWQgZ2V0RXZhbEVudHJ5cG9pbnQoVk0mIHZtLCBSZWZQdHI8SklU
Q29kZT4mIGppdENvZGUpCit2b2lkIHNldEV2YWxFbnRyeXBvaW50KFZNJiB2bSwgRXZhbENvZGVC
bG9jayogY29kZUJsb2NrKQogewogICAgIGlmICghdm0uY2FuVXNlSklUKCkpIHsKLSAgICAgICAg
aml0Q29kZSA9IGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKE1hY3JvQXNzZW1ibGVyQ29kZVJl
Zjo6Y3JlYXRlTExJbnRDb2RlUmVmKGxsaW50X2V2YWxfcHJvbG9ndWUpLCBKSVRDb2RlOjpJbnRl
cnByZXRlclRodW5rKSk7CisgICAgICAgIGNvZGVCbG9jay0+c2V0SklUQ29kZSgKKyAgICAgICAg
ICAgIGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3Jl
YXRlTExJbnRDb2RlUmVmKGxsaW50X2V2YWxfcHJvbG9ndWUpLCBKSVRDb2RlOjpJbnRlcnByZXRl
clRodW5rKSksCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9Ci0jaWYgRU5BQkxFKEpJVCkgICAgCi0gICAgaml0Q29kZSA9IGFkb3B0
UmVmKG5ldyBEaXJlY3RKSVRDb2RlKHZtLmdldENUSVN0dWIoZXZhbEVudHJ5VGh1bmtHZW5lcmF0
b3IpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSk7CisjaWYgRU5BQkxFKEpJVCkKKyAgICBj
b2RlQmxvY2stPnNldEpJVENvZGUoCisgICAgICAgIGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2Rl
KHZtLmdldENUSVN0dWIoZXZhbEVudHJ5VGh1bmtHZW5lcmF0b3IpLCBKSVRDb2RlOjpJbnRlcnBy
ZXRlclRodW5rKSksCisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpKTsKICNlbmRpZgog
fQogCi12b2lkIGdldFByb2dyYW1FbnRyeXBvaW50KFZNJiB2bSwgUmVmUHRyPEpJVENvZGU+JiBq
aXRDb2RlKQordm9pZCBzZXRQcm9ncmFtRW50cnlwb2ludChWTSYgdm0sIFByb2dyYW1Db2RlQmxv
Y2sqIGNvZGVCbG9jaykKIHsKICAgICBpZiAoIXZtLmNhblVzZUpJVCgpKSB7Ci0gICAgICAgIGpp
dENvZGUgPSBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZShNYWNyb0Fzc2VtYmxlckNvZGVSZWY6
OmNyZWF0ZUxMSW50Q29kZVJlZihsbGludF9wcm9ncmFtX3Byb2xvZ3VlKSwgSklUQ29kZTo6SW50
ZXJwcmV0ZXJUaHVuaykpOworICAgICAgICBjb2RlQmxvY2stPnNldEpJVENvZGUoCisgICAgICAg
ICAgICBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZShNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNy
ZWF0ZUxMSW50Q29kZVJlZihsbGludF9wcm9ncmFtX3Byb2xvZ3VlKSwgSklUQ29kZTo6SW50ZXJw
cmV0ZXJUaHVuaykpLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogI2lmIEVOQUJMRShKSVQpCi0gICAgaml0Q29kZSA9IGFkb3B0
UmVmKG5ldyBEaXJlY3RKSVRDb2RlKHZtLmdldENUSVN0dWIocHJvZ3JhbUVudHJ5VGh1bmtHZW5l
cmF0b3IpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSk7CisgICAgY29kZUJsb2NrLT5zZXRK
SVRDb2RlKAorICAgICAgICBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZSh2bS5nZXRDVElTdHVi
KHByb2dyYW1FbnRyeVRodW5rR2VuZXJhdG9yKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykp
LAorICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKSk7CiAjZW5kaWYKIH0KIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RW50cnlwb2ludHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFbnRyeXBvaW50cy5oCShyZXZp
c2lvbiAxNTQ2MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFbnRyeXBv
aW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zNyw2ICszNyw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAog
Y2xhc3MgRXZhbENvZGVCbG9jazsKK2NsYXNzIEZ1bmN0aW9uQ29kZUJsb2NrOwogY2xhc3MgVk07
CiBjbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI7CiBjbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY7CkBAIC00NCwxOSArNDUsOSBAQCBjbGFzcyBQcm9ncmFtQ29kZUJsb2NrOwogCiBuYW1lc3Bh
Y2UgTExJbnQgewogCi12b2lkIGdldEZ1bmN0aW9uRW50cnlwb2ludChWTSYsIENvZGVTcGVjaWFs
aXphdGlvbktpbmQsIFJlZlB0cjxKSVRDb2RlPiYsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgYXJp
dHlDaGVjayk7Ci12b2lkIGdldEV2YWxFbnRyeXBvaW50KFZNJiwgUmVmUHRyPEpJVENvZGU+Jik7
Ci12b2lkIGdldFByb2dyYW1FbnRyeXBvaW50KFZNJiwgUmVmUHRyPEpJVENvZGU+Jik7Ci0KLWlu
bGluZSB2b2lkIGdldEVudHJ5cG9pbnQoVk0mIHZtLCBFdmFsQ29kZUJsb2NrKiwgUmVmUHRyPEpJ
VENvZGU+JiBqaXRDb2RlKQotewotICAgIGdldEV2YWxFbnRyeXBvaW50KHZtLCBqaXRDb2RlKTsK
LX0KLQotaW5saW5lIHZvaWQgZ2V0RW50cnlwb2ludChWTSYgdm0sIFByb2dyYW1Db2RlQmxvY2sq
LCBSZWZQdHI8SklUQ29kZT4mIGppdENvZGUpCi17Ci0gICAgZ2V0UHJvZ3JhbUVudHJ5cG9pbnQo
dm0sIGppdENvZGUpOwotfQordm9pZCBzZXRGdW5jdGlvbkVudHJ5cG9pbnQoVk0mLCBGdW5jdGlv
bkNvZGVCbG9jayopOwordm9pZCBzZXRFdmFsRW50cnlwb2ludChWTSYsIEV2YWxDb2RlQmxvY2sq
KTsKK3ZvaWQgc2V0UHJvZ3JhbUVudHJ5cG9pbnQoVk0mLCBQcm9ncmFtQ29kZUJsb2NrKik7CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpMTEludAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDE1NDYzMikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM3LDcgKzM3LDYgQEAKICNpbmNsdWRlICJIb3N0Q2FsbFJldHVyblZhbHVlLmgiCiAj
aW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKSVQuaCIKLSNpbmNsdWRlICJKSVRE
cml2ZXIuaCIKICNpbmNsdWRlICJKU0FjdGl2YXRpb24uaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVl
LmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaCIKQEAgLTI4MCw2ICsyNzks
OCBAQCBpbmxpbmUgYm9vbCBzaG91bGRKSVQoRXhlY1N0YXRlKiBleGVjKQogLy8gUmV0dXJucyB0
cnVlIGlmIHdlIHNob3VsZCB0cnkgdG8gT1NSLgogaW5saW5lIGJvb2wgaml0Q29tcGlsZUFuZFNl
dEhldXJpc3RpY3MoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEV4ZWNTdGF0ZSogZXhlYykKIHsKKyAg
ICBEZWZlckdDIGRlZmVyR0MoZXhlYy0+dm0oKS5oZWFwKTsKKyAgICAKICAgICBjb2RlQmxvY2st
PnVwZGF0ZUFsbFZhbHVlUHJvZmlsZVByZWRpY3Rpb25zKCk7CiAgICAgCiAgICAgaWYgKCFjb2Rl
QmxvY2stPmNoZWNrSWZKSVRUaHJlc2hvbGRSZWFjaGVkKCkpIHsKQEAgLTI4OCwyMyArMjg5LDMz
IEBAIGlubGluZSBib29sIGppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKEMKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KICAgICAKLSAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBj
b2RlQmxvY2stPmppdENvbXBpbGUoZXhlYyk7Ci0gICAgc3dpdGNoIChyZXN1bHQpIHsKLSAgICBj
YXNlIENvbXBpbGF0aW9uTm90TmVlZGVkOgorICAgIHN3aXRjaCAoY29kZUJsb2NrLT5qaXRUeXBl
KCkpIHsKKyAgICBjYXNlIEpJVENvZGU6OkJhc2VsaW5lSklUOiB7CiAgICAgICAgIGlmIChPcHRp
b25zOjp2ZXJib3NlT1NSKCkpCiAgICAgICAgICAgICBkYXRhTG9nRigiICAgIENvZGUgd2FzIGFs
cmVhZHkgY29tcGlsZWQuXG4iKTsKICAgICAgICAgY29kZUJsb2NrLT5qaXRTb29uKCk7CiAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgIGNhc2UgQ29tcGlsYXRpb25GYWlsZWQ6Ci0gICAgICAgIGlm
IChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCi0gICAgICAgICAgICBkYXRhTG9nRigiICAgIEpJVCBj
b21waWxhdGlvbiBmYWlsZWQuXG4iKTsKLSAgICAgICAgY29kZUJsb2NrLT5kb250SklUQW55dGlt
ZVNvb24oKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGNhc2UgQ29tcGlsYXRpb25TdWNj
ZXNzZnVsOgotICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQotICAgICAgICAgICAg
ZGF0YUxvZ0YoIiAgICBKSVQgY29tcGlsYXRpb24gc3VjY2Vzc2Z1bC5cbiIpOwotICAgICAgICBj
b2RlQmxvY2stPmppdFNvb24oKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGNh
c2UgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuazogeworICAgICAgICBDb21waWxhdGlvblJlc3Vs
dCByZXN1bHQgPSBjb2RlQmxvY2stPnByZXBhcmVGb3JFeGVjdXRpb24oCisgICAgICAgICAgICBl
eGVjLCBKSVRDb2RlOjpCYXNlbGluZUpJVCwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICAg
ICAgc3dpdGNoIChyZXN1bHQpIHsKKyAgICAgICAgY2FzZSBDb21waWxhdGlvbkZhaWxlZDoKKyAg
ICAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgICAgICAgICAgZGF0
YUxvZ0YoIiAgICBKSVQgY29tcGlsYXRpb24gZmFpbGVkLlxuIik7CisgICAgICAgICAgICBjb2Rl
QmxvY2stPmRvbnRKSVRBbnl0aW1lU29vbigpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBjYXNlIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDoKKyAgICAgICAgICAgIGlmIChPcHRp
b25zOjp2ZXJib3NlT1NSKCkpCisgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIiAgICBKSVQgY29t
cGlsYXRpb24gc3VjY2Vzc2Z1bC5cbiIpOworICAgICAgICAgICAgY29kZUJsb2NrLT5pbnN0YWxs
KCk7CisgICAgICAgICAgICBjb2RlQmxvY2stPmppdFNvb24oKTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
ICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMDA0LDcgKzEwMTUsNyBAQCBpbmxpbmUgU2xvd1BhdGhS
ZXR1cm5UeXBlIHNldFVwQ2FsbChFeGVjCiAgICAgICAgIGNvZGVQdHIgPSBleGVjdXRhYmxlLT5o
b3N0Q29kZUVudHJ5Rm9yKGtpbmQpOwogICAgIGVsc2UgewogICAgICAgICBGdW5jdGlvbkV4ZWN1
dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJs
ZSo+KGV4ZWN1dGFibGUpOwotICAgICAgICBKU09iamVjdCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1
dGFibGUtPmNvbXBpbGVGb3IoZXhlY0NhbGxlZSwgY2FsbGVlLT5zY29wZSgpLCBraW5kKTsKKyAg
ICAgICAgSlNPYmplY3QqIGVycm9yID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhl
Y3V0aW9uKGV4ZWNDYWxsZWUsIGNhbGxlZS0+c2NvcGUoKSwga2luZCk7CiAgICAgICAgIGlmIChl
cnJvcikKICAgICAgICAgICAgIExMSU5UX0NBTExfVEhST1coZXhlY0NhbGxlZS0+Y2FsbGVyRnJh
bWUoKSwgcGMsIGVycm9yKTsKICAgICAgICAgY29kZUJsb2NrID0gJmZ1bmN0aW9uRXhlY3V0YWJs
ZS0+Z2VuZXJhdGVkQnl0ZWNvZGVGb3Ioa2luZCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxNTQ2MzIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc4LDcgKzc4LDcgQEAgc3RhdGljIGlubGluZSBib29sIGlzTnVtZXJpY0Nv
bXBhcmVGdW5jdAogCiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gY2FsbERh
dGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlOwogCi0gICAgSlNPYmplY3QqIGVycm9yID0gZXhlY3V0
YWJsZS0+Y29tcGlsZUZvckNhbGwoZXhlYywgY2FsbERhdGEuanMuc2NvcGUpOworICAgIEpTT2Jq
ZWN0KiBlcnJvciA9IGV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb24oZXhlYywgY2FsbERh
dGEuanMuc2NvcGUsIENvZGVGb3JDYWxsKTsKICAgICBpZiAoZXJyb3IpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xv
d1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b21tb25TbG93UGF0aHMuY3BwCShyZXZpc2lvbiAxNTQ2MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3
ICszNyw2IEBACiAjaW5jbHVkZSAiSG9zdENhbGxSZXR1cm5WYWx1ZS5oIgogI2luY2x1ZGUgIklu
dGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSklULmgiCi0jaW5jbHVkZSAiSklURHJpdmVyLmgiCiAj
aW5jbHVkZSAiSklUU3R1YnMuaCIKICNpbmNsdWRlICJKU0FjdGl2YXRpb24uaCIKICNpbmNsdWRl
ICJKU0NKU1ZhbHVlLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21w
aWxhdGlvblJlc3VsdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29tcGlsYXRpb25SZXN1bHQuY3BwCShyZXZpc2lvbiAxNTQ2MzIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21waWxhdGlvblJlc3VsdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQyLDkgKzQyLDYgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQs
IENvbQogICAgIGNhc2UgQ29tcGlsYXRpb25TdWNjZXNzZnVsOgogICAgICAgICBvdXQucHJpbnQo
IkNvbXBpbGF0aW9uU3VjY2Vzc2Z1bCIpOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBDb21w
aWxhdGlvbk5vdE5lZWRlZDoKLSAgICAgICAgb3V0LnByaW50KCJDb21waWxhdGlvbk5vdE5lZWRl
ZCIpOwotICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDb21waWxhdGlvbkRlZmVycmVkOgogICAg
ICAgICBvdXQucHJpbnQoIkNvbXBpbGF0aW9uRGVmZXJyZWQiKTsKICAgICAgICAgcmV0dXJuOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tcGlsYXRpb25SZXN1bHQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21waWxhdGlvblJl
c3VsdC5oCShyZXZpc2lvbiAxNTQ2MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db21waWxhdGlvblJlc3VsdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCwzMiBAQAog
CiBuYW1lc3BhY2UgSlNDIHsKIAotZW51bSBDb21waWxhdGlvblJlc3VsdCB7IENvbXBpbGF0aW9u
RmFpbGVkLCBDb21waWxhdGlvbkludmFsaWRhdGVkLCBDb21waWxhdGlvblN1Y2Nlc3NmdWwsIENv
bXBpbGF0aW9uTm90TmVlZGVkLCBDb21waWxhdGlvbkRlZmVycmVkIH07CitlbnVtIENvbXBpbGF0
aW9uUmVzdWx0IHsKKyAgICAvLyBXZSB0cmllZCB0byBjb21waWxlIHRoZSBjb2RlLCBidXQgd2Ug
Y291bGRuJ3QgY29tcGlsZSBpdC4gVGhpcyBjb3VsZCBiZQorICAgIC8vIGJlY2F1c2Ugd2UgcmFu
IG91dCBvZiBtZW1vcnksIG9yIGJlY2F1c2UgdGhlIGNvbXBpbGVyIGVuY291bnRlcmVkIGFuCisg
ICAgLy8gaW50ZXJuYWwgZXJyb3IgYW5kIGRlY2lkZWQgdG8gYmFpbCBvdXQgZ3JhY2VmdWxseS4g
RWl0aGVyIHdheSwgdGhpcyBpbXBsaWVzCisgICAgLy8gdGhhdCB3ZSBzaG91bGRuJ3QgdHJ5IHRv
IGNvbXBpbGUgdGhpcyBjb2RlIGJsb2NrIGFnYWluLgorICAgIENvbXBpbGF0aW9uRmFpbGVkLAor
ICAgIAorICAgIC8vIFRoZSBwcm9maWxpbmcgYXNzdW1wdGlvbnMgdGhhdCB3ZXJlIGZlZCBpbnRv
IHRoZSBjb21waWxlciB3ZXJlIGludmFsaWRhdGVkCisgICAgLy8gZXZlbiBiZWZvcmUgd2UgZmlu
aXNoZWQgY29tcGlsaW5nLiBUaGlzIG1lYW5zIHdlIHNob3VsZCB0cnkgYWdhaW46IGluIHN1Y2gK
KyAgICAvLyBjYXNlcyB0aGUgcHJvZmlsaW5nIHdpbGwgbm93IGJlIHVwZGF0ZWQgYW5kIHRoZSBu
ZXh0IGNvbXBpbGF0aW9uIHdvbid0CisgICAgLy8gZW5jb3VudGVyIHRoZSBzYW1lIHByb2JsZW0u
IEJ1dCBpdCBkb2VzIG1lYW4gdGhhdCB3ZSBzaG91bGQgZXhlcmNpc2UKKyAgICAvLyBleHBvbmVu
dGlhbCBiYWNrLW9mZiwgdG8gZ2V0IGV2ZW4gbW9yZSBwcm9maWxpbmcgc28gdGhhdCBuZXcgcHJv
ZmlsaW5nCisgICAgLy8gcGF0aG9sb2dpZXMgYXJlbid0IGVuY291bnRlcmVkLgorICAgIENvbXBp
bGF0aW9uSW52YWxpZGF0ZWQsCisgICAgCisgICAgLy8gVGhlIGNvbXBpbGF0aW9uIHN1Y2NlZWRl
ZCBhbmQgdGhlIGNvZGUgYmxvY2sgbm93IGhhcyBKSVRDb2RlIGZvciB0aGUgbmV3bHkKKyAgICAv
LyBjb21waWxlZCBjb2RlLiBIb3dldmVyLCBjb21waWxhdGlvbiBzdWNjZXNzIGRvZXNuJ3QgbWVh
biB0aGF0IHRoZSBDb2RlQmxvY2sKKyAgICAvLyB3aWxsIGV4ZWN1dGUgeWV0OyB5b3UgdHlwaWNh
bGx5IGhhdmUgdG8gaW5zdGFsbCBpdCBmaXJzdCwgdW5sZXNzIHlvdSBwbGFuCisgICAgLy8gb24g
aW52b2tpbmcgaXQgbWFudWFsbHkgKHNvbWV0aGluZyB0aGF0ICpjb3VsZCogYmUgZG9uZSBmb3Ig
c29tZSBraW5kcyBvZgorICAgIC8vIE9TUiBlbnRyeSkuCisgICAgQ29tcGlsYXRpb25TdWNjZXNz
ZnVsLAorICAgIAorICAgIC8vIFdlIGRlY2lkZWQgdG8gZG8gdGhlIGNvbXBpbGF0aW9uIGFzeW5j
aHJvbm91c2x5LiBUaGlzIG1lYW5zIHRoYXQgd2UgaGF2ZW4ndAorICAgIC8vIHlldCBjb21waWxl
ZCB0aGUgY29kZS4KKyAgICBDb21waWxhdGlvbkRlZmVycmVkCit9OwogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJs
ZS5jcHAJKHJldmlzaW9uIDE1NDYzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0V4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw5ICszMCw3IEBACiAjaW5jbHVk
ZSAiQnl0ZWNvZGVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRl
ICJERkdEcml2ZXIuaCIKLSNpbmNsdWRlICJFeGVjdXRpb25IYXJuZXNzLmgiCiAjaW5jbHVkZSAi
SklULmgiCi0jaW5jbHVkZSAiSklURHJpdmVyLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgog
I2luY2x1ZGUgIlBhcnNlci5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTExNCw2ICsx
MTIsMTg4IEBAIHZvaWQgU2NyaXB0RXhlY3V0YWJsZTo6ZGVzdHJveShKU0NlbGwqIGMKIH0KICNl
bmRpZgogCit2b2lkIFNjcmlwdEV4ZWN1dGFibGU6Omluc3RhbGxDb2RlKENvZGVCbG9jayogZ2Vu
ZXJpY0NvZGVCbG9jaykKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChnZW5lcmljQ29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKSA9PSB0aGlzKTsKKyAgICAKKyAgICBWTSYgdm0gPSAqZ2VuZXJpY0Nv
ZGVCbG9jay0+dm0oKTsKKyAgICAKKyAgICBpZiAodm0ubV9wZXJCeXRlY29kZVByb2ZpbGVyKQor
ICAgICAgICB2bS5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmVuc3VyZUJ5dGVjb2Rlc0ZvcihnZW5l
cmljQ29kZUJsb2NrKTsKKyAgICAKKyAgICBBU1NFUlQodm0uaGVhcC5pc0RlZmVycmVkKCkpOwor
ICAgIAorICAgIGlmIChKSVRDb2RlOjppc0pJVChnZW5lcmljQ29kZUJsb2NrLT5qaXRUeXBlKCkp
KSB7CisgICAgICAgIHZtLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlDb3N0KAorICAgICAgICAgICAg
c2l6ZW9mKENvZGVCbG9jaykgKyBnZW5lcmljQ29kZUJsb2NrLT5qaXRDb2RlKCktPnNpemUoKSk7
CisgICAgfSBlbHNlCisgICAgICAgIHZtLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlDb3N0KHNpemVv
ZihDb2RlQmxvY2spKTsKKyAgICAKKyAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQgPSBn
ZW5lcmljQ29kZUJsb2NrLT5zcGVjaWFsaXphdGlvbktpbmQoKTsKKyAgICAKKyAgICBSZWZQdHI8
Q29kZUJsb2NrPiBvbGRDb2RlQmxvY2s7CisgICAgCisgICAgc3dpdGNoIChraW5kKSB7CisgICAg
Y2FzZSBDb2RlRm9yQ2FsbDoKKyAgICAgICAgbV9qaXRDb2RlRm9yQ2FsbCA9IGdlbmVyaWNDb2Rl
QmxvY2stPmppdENvZGUoKTsKKyAgICAgICAgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNr
ID0gZ2VuZXJpY0NvZGVCbG9jay0+aml0Q29kZVdpdGhBcml0eUNoZWNrKCk7CisgICAgICAgIG1f
bnVtUGFyYW1ldGVyc0ZvckNhbGwgPSBnZW5lcmljQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29kZUZvckNvbnN0cnVjdDoKKyAgICAgICAgbV9q
aXRDb2RlRm9yQ29uc3RydWN0ID0gZ2VuZXJpY0NvZGVCbG9jay0+aml0Q29kZSgpOworICAgICAg
ICBtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjayA9IGdlbmVyaWNDb2RlQmxvY2st
PmppdENvZGVXaXRoQXJpdHlDaGVjaygpOworICAgICAgICBtX251bVBhcmFtZXRlcnNGb3JDb25z
dHJ1Y3QgPSBnZW5lcmljQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICAKKyAgICBzd2l0Y2ggKGdlbmVyaWNDb2RlQmxvY2stPmNvZGVUeXBlKCkp
IHsKKyAgICBjYXNlIEdsb2JhbENvZGU6IHsKKyAgICAgICAgUHJvZ3JhbUV4ZWN1dGFibGUqIGV4
ZWN1dGFibGUgPSBqc0Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPih0aGlzKTsKKyAgICAgICAgUHJv
Z3JhbUNvZGVCbG9jayogY29kZUJsb2NrID0gc3RhdGljX2Nhc3Q8UHJvZ3JhbUNvZGVCbG9jayo+
KGdlbmVyaWNDb2RlQmxvY2spOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKCFjb2RlQmxvY2st
PmppdENvZGVXaXRoQXJpdHlDaGVjaygpKTsKKyAgICAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZv
ckNhbGwpOworICAgICAgICAKKyAgICAgICAgb2xkQ29kZUJsb2NrID0gZXhlY3V0YWJsZS0+bV9w
cm9ncmFtQ29kZUJsb2NrOworICAgICAgICBleGVjdXRhYmxlLT5tX3Byb2dyYW1Db2RlQmxvY2sg
PSBjb2RlQmxvY2s7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBF
dmFsQ29kZTogeworICAgICAgICBFdmFsRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxF
dmFsRXhlY3V0YWJsZSo+KHRoaXMpOworICAgICAgICBFdmFsQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBzdGF0aWNfY2FzdDxFdmFsQ29kZUJsb2NrKj4oZ2VuZXJpY0NvZGVCbG9jayk7CisgICAgICAg
IAorICAgICAgICBBU1NFUlQoIWNvZGVCbG9jay0+aml0Q29kZVdpdGhBcml0eUNoZWNrKCkpOwor
ICAgICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ2FsbCk7CisgICAgICAgIAorICAgICAgICBv
bGRDb2RlQmxvY2sgPSBleGVjdXRhYmxlLT5tX2V2YWxDb2RlQmxvY2s7CisgICAgICAgIGV4ZWN1
dGFibGUtPm1fZXZhbENvZGVCbG9jayA9IGNvZGVCbG9jazsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgICAgICAKKyAgICBjYXNlIEZ1bmN0aW9uQ29kZTogeworICAgICAgICBGdW5jdGlvbkV4
ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4odGhpcyk7
CisgICAgICAgIEZ1bmN0aW9uQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBzdGF0aWNfY2FzdDxGdW5j
dGlvbkNvZGVCbG9jayo+KGdlbmVyaWNDb2RlQmxvY2spOworICAgICAgICAKKyAgICAgICAgc3dp
dGNoIChraW5kKSB7CisgICAgICAgIGNhc2UgQ29kZUZvckNhbGw6CisgICAgICAgICAgICBvbGRD
b2RlQmxvY2sgPSBleGVjdXRhYmxlLT5tX2NvZGVCbG9ja0ZvckNhbGw7CisgICAgICAgICAgICBl
eGVjdXRhYmxlLT5tX2NvZGVCbG9ja0ZvckNhbGwgPSBjb2RlQmxvY2s7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBDb2RlRm9yQ29uc3RydWN0OgorICAgICAgICAgICAgb2xkQ29k
ZUJsb2NrID0gZXhlY3V0YWJsZS0+bV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Q7CisgICAgICAgICAg
ICBleGVjdXRhYmxlLT5tX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCA9IGNvZGVCbG9jazsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0gfQorCisgICAg
aWYgKG9sZENvZGVCbG9jaykKKyAgICAgICAgb2xkQ29kZUJsb2NrLT51bmxpbmtJbmNvbWluZ0Nh
bGxzKCk7Cit9CisKK1Bhc3NSZWZQdHI8Q29kZUJsb2NrPiBTY3JpcHRFeGVjdXRhYmxlOjpuZXdD
b2RlQmxvY2tGb3IoCisgICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBKU1Njb3BlKiBz
Y29wZSwgSlNPYmplY3QqJiBleGNlcHRpb24pCit7CisgICAgVk0qIHZtID0gc2NvcGUtPnZtKCk7
CisKKyAgICBBU1NFUlQodm0tPmhlYXAuaXNEZWZlcnJlZCgpKTsKKyAgICAKKyAgICBpZiAoY2xh
c3NJbmZvKCkgPT0gRXZhbEV4ZWN1dGFibGU6OmluZm8oKSkgeworICAgICAgICBFdmFsRXhlY3V0
YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxFdmFsRXhlY3V0YWJsZSo+KHRoaXMpOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChraW5kID09IENvZGVGb3JDYWxsKTsKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQoIWV4ZWN1dGFibGUtPm1fZXZhbENvZGVCbG9jayk7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgRXZhbENvZGVCbG9jaygKKyAgICAgICAgICAgIGV4ZWN1dGFibGUsIGV4ZWN1dGFi
bGUtPm1fdW5saW5rZWRFdmFsQ29kZUJsb2NrLmdldCgpLCBzY29wZSwKKyAgICAgICAgICAgIGV4
ZWN1dGFibGUtPnNvdXJjZSgpLnByb3ZpZGVyKCkpKTsKKyAgICB9CisgICAgCisgICAgaWYgKGNs
YXNzSW5mbygpID09IFByb2dyYW1FeGVjdXRhYmxlOjppbmZvKCkpIHsKKyAgICAgICAgUHJvZ3Jh
bUV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPih0aGlz
KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoa2luZCA9PSBDb2RlRm9yQ2FsbCk7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKCFleGVjdXRhYmxlLT5tX3Byb2dyYW1Db2RlQmxvY2spOworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFByb2dyYW1Db2RlQmxvY2soCisgICAgICAgICAgICBleGVj
dXRhYmxlLCBleGVjdXRhYmxlLT5tX3VubGlua2VkUHJvZ3JhbUNvZGVCbG9jay5nZXQoKSwgc2Nv
cGUsCisgICAgICAgICAgICBleGVjdXRhYmxlLT5zb3VyY2UoKS5wcm92aWRlcigpLCBleGVjdXRh
YmxlLT5zb3VyY2UoKS5zdGFydENvbHVtbigpKSk7CisgICAgfQorICAgIAorICAgIFJFTEVBU0Vf
QVNTRVJUKGNsYXNzSW5mbygpID09IEZ1bmN0aW9uRXhlY3V0YWJsZTo6aW5mbygpKTsKKyAgICBG
dW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxl
Kj4odGhpcyk7CisgICAgUkVMRUFTRV9BU1NFUlQoIWV4ZWN1dGFibGUtPmNvZGVCbG9ja0Zvcihr
aW5kKSk7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3BlLT5nbG9iYWxP
YmplY3QoKTsKKyAgICBQYXJzZXJFcnJvciBlcnJvcjsKKyAgICBEZWJ1Z2dlck1vZGUgZGVidWdn
ZXJNb2RlID0gZ2xvYmFsT2JqZWN0LT5oYXNEZWJ1Z2dlcigpID8gRGVidWdnZXJPbiA6IERlYnVn
Z2VyT2ZmOworICAgIFByb2ZpbGVyTW9kZSBwcm9maWxlck1vZGUgPSBnbG9iYWxPYmplY3QtPmhh
c1Byb2ZpbGVyKCkgPyBQcm9maWxlck9uIDogUHJvZmlsZXJPZmY7CisgICAgVW5saW5rZWRGdW5j
dGlvbkNvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2sgPQorICAgICAgICBleGVjdXRhYmxlLT5t
X3VubGlua2VkRXhlY3V0YWJsZS0+Y29kZUJsb2NrRm9yKAorICAgICAgICAgICAgKnZtLCBleGVj
dXRhYmxlLT5tX3NvdXJjZSwga2luZCwgZGVidWdnZXJNb2RlLCBwcm9maWxlck1vZGUsIGVycm9y
KTsKKyAgICBpZiAoIXVubGlua2VkQ29kZUJsb2NrKSB7CisgICAgICAgIGV4Y2VwdGlvbiA9IGVy
cm9yLnRvRXJyb3JPYmplY3QoZ2xvYmFsT2JqZWN0LCBleGVjdXRhYmxlLT5tX3NvdXJjZSk7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICBTb3VyY2VQcm92aWRlciogcHJvdmlk
ZXIgPSBleGVjdXRhYmxlLT5zb3VyY2UoKS5wcm92aWRlcigpOworICAgIHVuc2lnbmVkIHNvdXJj
ZU9mZnNldCA9IGV4ZWN1dGFibGUtPnNvdXJjZSgpLnN0YXJ0T2Zmc2V0KCk7CisgICAgdW5zaWdu
ZWQgc3RhcnRDb2x1bW4gPSBleGVjdXRhYmxlLT5zb3VyY2UoKS5zdGFydENvbHVtbigpOworCisg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGdW5jdGlvbkNvZGVCbG9jaygKKyAgICAgICAgZXhlY3V0
YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlLCBwcm92aWRlciwgc291cmNlT2Zmc2V0LCBz
dGFydENvbHVtbikpOworfQorCitQYXNzUmVmUHRyPENvZGVCbG9jaz4gU2NyaXB0RXhlY3V0YWJs
ZTo6bmV3UmVwbGFjZW1lbnRDb2RlQmxvY2tGb3IoCisgICAgQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCBraW5kKQoreworICAgIGlmIChjbGFzc0luZm8oKSA9PSBFdmFsRXhlY3V0YWJsZTo6aW5mbygp
KSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNhbGwpOworICAgICAg
ICBFdmFsRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxFdmFsRXhlY3V0YWJsZSo+KHRo
aXMpOworICAgICAgICBSZWZQdHI8RXZhbENvZGVCbG9jaz4gcmVzdWx0ID0gYWRvcHRSZWYobmV3
IEV2YWxDb2RlQmxvY2soCisgICAgICAgICAgICBDb2RlQmxvY2s6OkNvcHlQYXJzZWRCbG9jaywg
KmV4ZWN1dGFibGUtPm1fZXZhbENvZGVCbG9jaykpOworICAgICAgICByZXN1bHQtPnNldEFsdGVy
bmF0aXZlKGV4ZWN1dGFibGUtPm1fZXZhbENvZGVCbG9jayk7CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorICAgIAorICAgIGlmIChjbGFzc0luZm8oKSA9PSBQcm9ncmFtRXhlY3V0YWJs
ZTo6aW5mbygpKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNhbGwp
OworICAgICAgICBQcm9ncmFtRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxQcm9ncmFt
RXhlY3V0YWJsZSo+KHRoaXMpOworICAgICAgICBSZWZQdHI8UHJvZ3JhbUNvZGVCbG9jaz4gcmVz
dWx0ID0gYWRvcHRSZWYobmV3IFByb2dyYW1Db2RlQmxvY2soCisgICAgICAgICAgICBDb2RlQmxv
Y2s6OkNvcHlQYXJzZWRCbG9jaywgKmV4ZWN1dGFibGUtPm1fcHJvZ3JhbUNvZGVCbG9jaykpOwor
ICAgICAgICByZXN1bHQtPnNldEFsdGVybmF0aXZlKGV4ZWN1dGFibGUtPm1fcHJvZ3JhbUNvZGVC
bG9jayk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NF
UlQoY2xhc3NJbmZvKCkgPT0gRnVuY3Rpb25FeGVjdXRhYmxlOjppbmZvKCkpOworICAgIEZ1bmN0
aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPih0
aGlzKTsKKyAgICBSZWZQdHI8RnVuY3Rpb25Db2RlQmxvY2s+IHJlc3VsdCA9IGFkb3B0UmVmKG5l
dyBGdW5jdGlvbkNvZGVCbG9jaygKKyAgICAgICAgQ29kZUJsb2NrOjpDb3B5UGFyc2VkQmxvY2ss
ICpleGVjdXRhYmxlLT5jb2RlQmxvY2tGb3Ioa2luZCkpKTsKKyAgICByZXN1bHQtPnNldEFsdGVy
bmF0aXZlKGV4ZWN1dGFibGUtPmNvZGVCbG9ja0ZvcihraW5kKSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworSlNPYmplY3QqIFNjcmlwdEV4ZWN1dGFibGU6OnByZXBhcmVGb3JFeGVjdXRpb25J
bXBsKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUsIENvZGVTcGVjaWFsaXph
dGlvbktpbmQga2luZCkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIERlZmVyR0Mg
ZGVmZXJHQyh2bS5oZWFwKTsKKyAgICAKKyAgICBKU09iamVjdCogZXhjZXB0aW9uID0gMDsKKyAg
ICBSZWZQdHI8Q29kZUJsb2NrPiBjb2RlQmxvY2sgPSBuZXdDb2RlQmxvY2tGb3Ioa2luZCwgc2Nv
cGUsIGV4Y2VwdGlvbik7CisgICAgaWYgKCFjb2RlQmxvY2spIHsKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQoZXhjZXB0aW9uKTsKKyAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKKyAgICB9CisgICAg
CisgICAgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlOworI2lmIEVOQUJMRShMTElOVCkKKyAgICBq
aXRUeXBlID0gSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuazsKKyNlbHNlCisgICAgaml0VHlwZSA9
IEpJVENvZGU6OkJhc2VsaW5lSklUOworI2VuZGlmCisgICAgY29kZUJsb2NrLT5wcmVwYXJlRm9y
RXhlY3V0aW9uKGV4ZWMsIGppdFR5cGUpOworCisgICAgaW5zdGFsbENvZGUoY29kZUJsb2NrLmdl
dCgpKTsKKyAgICByZXR1cm4gMDsKK30KKwogY29uc3QgQ2xhc3NJbmZvIEV2YWxFeGVjdXRhYmxl
OjpzX2luZm8gPSB7ICJFdmFsRXhlY3V0YWJsZSIsICZTY3JpcHRFeGVjdXRhYmxlOjpzX2luZm8s
IDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoRXZhbEV4ZWN1dGFibGUpIH07CiAKIEV2YWxFeGVj
dXRhYmxlKiBFdmFsRXhlY3V0YWJsZTo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291
cmNlQ29kZSYgc291cmNlLCBib29sIGlzSW5TdHJpY3RDb250ZXh0KSAKQEAgLTE3NiwyOCArMzU2
LDYgQEAgdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OmRlc3Ryb3koSlNDZWxsKgogICAgIHN0YXRp
Y19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNlbGwpLT5GdW5jdGlvbkV4ZWN1dGFibGU6On5G
dW5jdGlvbkV4ZWN1dGFibGUoKTsKIH0KIAotI2lmIEVOQUJMRShERkdfSklUKQotSlNPYmplY3Qq
IEV2YWxFeGVjdXRhYmxlOjpjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29w
ZSogc2NvcGUsIENvbXBpbGF0aW9uUmVzdWx0JiByZXN1bHQsIHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXgpCi17Ci0gICAgQVNTRVJUKGV4ZWMtPnZtKCkuZHluYW1pY0dsb2JhbE9iamVjdCk7Ci0gICAg
QVNTRVJUKCEhbV9ldmFsQ29kZUJsb2NrKTsKLSAgICBKU09iamVjdCogZXJyb3IgPSAwOwotICAg
IGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKG1fZXZhbENvZGVCbG9jay0+aml0VHlwZSgp
KSkKLSAgICAgICAgZXJyb3IgPSBjb21waWxlSW50ZXJuYWwoZXhlYywgc2NvcGUsIEpJVENvZGU6
Om5leHRUaWVySklUKG1fZXZhbENvZGVCbG9jay0+aml0VHlwZSgpKSwgJnJlc3VsdCwgYnl0ZWNv
ZGVJbmRleCk7Ci0gICAgZWxzZQotICAgICAgICByZXN1bHQgPSBDb21waWxhdGlvbk5vdE5lZWRl
ZDsKLSAgICBBU1NFUlQoISFtX2V2YWxDb2RlQmxvY2spOwotICAgIHJldHVybiBlcnJvcjsKLX0K
LSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLQotI2lmIEVOQUJMRShKSVQpCi1Db21waWxhdGlv
blJlc3VsdCBFdmFsRXhlY3V0YWJsZTo6aml0Q29tcGlsZShFeGVjU3RhdGUqIGV4ZWMpCi17Ci0g
ICAgcmV0dXJuIGppdENvbXBpbGVJZkFwcHJvcHJpYXRlKGV4ZWMsIG1fZXZhbENvZGVCbG9jay5n
ZXQoKSwgbV9qaXRDb2RlRm9yQ2FsbCwgSklUQ29kZTo6Ym90dG9tVGllckpJVCgpLCBVSU5UX01B
WCwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKLX0KLSNlbmRpZgotCiBpbmxpbmUgY29uc3QgY2hh
ciogc2FtcGxpbmdEZXNjcmlwdGlvbihKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUpCiB7CiAgICAg
c3dpdGNoIChqaXRUeXBlKSB7CkBAIC0yMTUsMzkgKzM3Myw2IEBAIGlubGluZSBjb25zdCBjaGFy
KiBzYW1wbGluZ0Rlc2NyaXB0aW9uKEoKICAgICB9CiB9CiAKLUpTT2JqZWN0KiBFdmFsRXhlY3V0
YWJsZTo6Y29tcGlsZUludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUsIEpJ
VENvZGU6OkpJVFR5cGUgaml0VHlwZSwgQ29tcGlsYXRpb25SZXN1bHQqIHJlc3VsdCwgdW5zaWdu
ZWQgYnl0ZWNvZGVJbmRleCkKLXsKLSAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbihz
YW1wbGluZ0Rlc2NyaXB0aW9uKGppdFR5cGUpKTsKLSAgICAKLSAgICBpZiAocmVzdWx0KQotICAg
ICAgICAqcmVzdWx0ID0gQ29tcGlsYXRpb25GYWlsZWQ7Ci0gICAgCi0gICAgUmVmUHRyPEV2YWxD
b2RlQmxvY2s+IG5ld0NvZGVCbG9jazsKLSAgICAKLSAgICBpZiAoISFtX2V2YWxDb2RlQmxvY2sp
IHsKLSAgICAgICAgbmV3Q29kZUJsb2NrID0gYWRvcHRSZWYobmV3IEV2YWxDb2RlQmxvY2soQ29k
ZUJsb2NrOjpDb3B5UGFyc2VkQmxvY2ssICptX2V2YWxDb2RlQmxvY2spKTsKLSAgICAgICAgbmV3
Q29kZUJsb2NrLT5zZXRBbHRlcm5hdGl2ZShzdGF0aWNfcG9pbnRlcl9jYXN0PENvZGVCbG9jaz4o
bV9ldmFsQ29kZUJsb2NrKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbmV3Q29kZUJsb2NrID0g
YWRvcHRSZWYobmV3IEV2YWxDb2RlQmxvY2sodGhpcywgbV91bmxpbmtlZEV2YWxDb2RlQmxvY2su
Z2V0KCksIHNjb3BlLCBzb3VyY2UoKS5wcm92aWRlcigpKSk7Ci0gICAgICAgIEFTU0VSVCgoaml0
VHlwZSA9PSBKSVRDb2RlOjpib3R0b21UaWVySklUKCkpID09ICFtX2V2YWxDb2RlQmxvY2spOwot
ICAgIH0KLQotICAgIENvbXBpbGF0aW9uUmVzdWx0IHRoZVJlc3VsdCA9IHByZXBhcmVGb3JFeGVj
dXRpb24oCi0gICAgICAgIGV4ZWMsIG1fZXZhbENvZGVCbG9jaywgbmV3Q29kZUJsb2NrLmdldCgp
LCBtX2ppdENvZGVGb3JDYWxsLCBqaXRUeXBlLCBieXRlY29kZUluZGV4KTsKLSAgICBpZiAocmVz
dWx0KQotICAgICAgICAqcmVzdWx0ID0gdGhlUmVzdWx0OwotCi0gICAgcmV0dXJuIDA7Ci19Ci0K
LSNpZiBFTkFCTEUoREZHX0pJVCkKLUNvbXBpbGF0aW9uUmVzdWx0IEV2YWxFeGVjdXRhYmxlOjpy
ZXBsYWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZShQYXNzUmVmUHRyPERGRzo6UGxhbj4gcGxh
bikKLXsKLSAgICByZXR1cm4gSlNDOjpyZXBsYWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZSgK
LSAgICAgICAgcGxhbiwgbV9ldmFsQ29kZUJsb2NrLCBtX2ppdENvZGVGb3JDYWxsLCAwLCAwKTsK
LX0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLQogI2lmIEVOQUJMRShKSVQpCiB2b2lkIEV2
YWxFeGVjdXRhYmxlOjpqZXR0aXNvbk9wdGltaXplZENvZGUoVk0mIHZtKQogewpAQCAtMjk4LDYw
ICs0MjMsNiBAQCBKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNoZWNrU3ludGF4CiAgICAg
cmV0dXJuIGVycm9yLnRvRXJyb3JPYmplY3QobGV4aWNhbEdsb2JhbE9iamVjdCwgbV9zb3VyY2Up
OwogfQogCi0jaWYgRU5BQkxFKERGR19KSVQpCi1KU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6
OmNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSwgQ29tcGls
YXRpb25SZXN1bHQmIHJlc3VsdCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKLXsKLSAgICBSRUxF
QVNFX0FTU0VSVChleGVjLT52bSgpLmR5bmFtaWNHbG9iYWxPYmplY3QpOwotICAgIEFTU0VSVCgh
IW1fcHJvZ3JhbUNvZGVCbG9jayk7Ci0gICAgSlNPYmplY3QqIGVycm9yID0gMDsKLSAgICBpZiAo
IUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChtX3Byb2dyYW1Db2RlQmxvY2stPmppdFR5cGUoKSkp
Ci0gICAgICAgIGVycm9yID0gY29tcGlsZUludGVybmFsKGV4ZWMsIHNjb3BlLCBKSVRDb2RlOjpu
ZXh0VGllckpJVChtX3Byb2dyYW1Db2RlQmxvY2stPmppdFR5cGUoKSksICZyZXN1bHQsIGJ5dGVj
b2RlSW5kZXgpOwotICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gQ29tcGlsYXRpb25Ob3ROZWVk
ZWQ7Ci0gICAgQVNTRVJUKCEhbV9wcm9ncmFtQ29kZUJsb2NrKTsKLSAgICByZXR1cm4gZXJyb3I7
Ci19Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0KLSNpZiBFTkFCTEUoSklUKQotQ29tcGls
YXRpb25SZXN1bHQgUHJvZ3JhbUV4ZWN1dGFibGU6OmppdENvbXBpbGUoRXhlY1N0YXRlKiBleGVj
KQotewotICAgIHJldHVybiBqaXRDb21waWxlSWZBcHByb3ByaWF0ZShleGVjLCBtX3Byb2dyYW1D
b2RlQmxvY2suZ2V0KCksIG1faml0Q29kZUZvckNhbGwsIEpJVENvZGU6OmJvdHRvbVRpZXJKSVQo
KSwgVUlOVF9NQVgsIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7Ci19Ci0jZW5kaWYKLQotSlNPYmpl
Y3QqIFByb2dyYW1FeGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBK
U1Njb3BlKiBzY29wZSwgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlLCBDb21waWxhdGlvblJlc3Vs
dCogcmVzdWx0LCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQotewotICAgIFNhbXBsaW5nUmVnaW9u
IHNhbXBsaW5nUmVnaW9uKHNhbXBsaW5nRGVzY3JpcHRpb24oaml0VHlwZSkpOwotICAgIAotICAg
IGlmIChyZXN1bHQpCi0gICAgICAgICpyZXN1bHQgPSBDb21waWxhdGlvbkZhaWxlZDsKLSAgICAK
LSAgICBSZWZQdHI8UHJvZ3JhbUNvZGVCbG9jaz4gbmV3Q29kZUJsb2NrOwotICAgIAotICAgIGlm
ICghIW1fcHJvZ3JhbUNvZGVCbG9jaykgewotICAgICAgICBuZXdDb2RlQmxvY2sgPSBhZG9wdFJl
ZihuZXcgUHJvZ3JhbUNvZGVCbG9jayhDb2RlQmxvY2s6OkNvcHlQYXJzZWRCbG9jaywgKm1fcHJv
Z3JhbUNvZGVCbG9jaykpOwotICAgICAgICBuZXdDb2RlQmxvY2stPnNldEFsdGVybmF0aXZlKHN0
YXRpY19wb2ludGVyX2Nhc3Q8Q29kZUJsb2NrPihtX3Byb2dyYW1Db2RlQmxvY2spKTsKLSAgICB9
IGVsc2UgewotICAgICAgICBuZXdDb2RlQmxvY2sgPSBhZG9wdFJlZihuZXcgUHJvZ3JhbUNvZGVC
bG9jayh0aGlzLCBtX3VubGlua2VkUHJvZ3JhbUNvZGVCbG9jay5nZXQoKSwgc2NvcGUsIHNvdXJj
ZSgpLnByb3ZpZGVyKCksIHNvdXJjZSgpLnN0YXJ0Q29sdW1uKCkpKTsKLSAgICB9Ci0KLSAgICBD
b21waWxhdGlvblJlc3VsdCB0aGVSZXN1bHQgPSBwcmVwYXJlRm9yRXhlY3V0aW9uKAotICAgICAg
ICBleGVjLCBtX3Byb2dyYW1Db2RlQmxvY2ssIG5ld0NvZGVCbG9jay5nZXQoKSwgbV9qaXRDb2Rl
Rm9yQ2FsbCwgaml0VHlwZSwgYnl0ZWNvZGVJbmRleCk7Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAg
ICAgKnJlc3VsdCA9IHRoZVJlc3VsdDsKLQotICAgIHJldHVybiAwOwotfQotCi0jaWYgRU5BQkxF
KERGR19KSVQpCi1Db21waWxhdGlvblJlc3VsdCBQcm9ncmFtRXhlY3V0YWJsZTo6cmVwbGFjZVdp
dGhEZWZlcnJlZE9wdGltaXplZENvZGUoUGFzc1JlZlB0cjxERkc6OlBsYW4+IHBsYW4pCi17Ci0g
ICAgcmV0dXJuIEpTQzo6cmVwbGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGUoCi0gICAgICAg
IHBsYW4sIG1fcHJvZ3JhbUNvZGVCbG9jaywgbV9qaXRDb2RlRm9yQ2FsbCwgMCwgMCk7Ci19Ci0j
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0KICNpZiBFTkFCTEUoSklUKQogdm9pZCBQcm9ncmFt
RXhlY3V0YWJsZTo6amV0dGlzb25PcHRpbWl6ZWRDb2RlKFZNJiB2bSkKIHsKQEAgLTQ0NCwxNDEg
KzUxNSw2IEBAIEZ1bmN0aW9uQ29kZUJsb2NrKiBGdW5jdGlvbkV4ZWN1dGFibGU6OmIKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi0jaWYgRU5BQkxFKERGR19KSVQpCi1KU09iamVjdCogRnVuY3Rp
b25FeGVjdXRhYmxlOjpjb21waWxlT3B0aW1pemVkRm9yQ2FsbChFeGVjU3RhdGUqIGV4ZWMsIEpT
U2NvcGUqIHNjb3BlLCBDb21waWxhdGlvblJlc3VsdCYgcmVzdWx0LCB1bnNpZ25lZCBieXRlY29k
ZUluZGV4KQotewotICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMtPnZtKCkuZHluYW1pY0dsb2JhbE9i
amVjdCk7Ci0gICAgQVNTRVJUKCEhbV9jb2RlQmxvY2tGb3JDYWxsKTsKLSAgICBKU09iamVjdCog
ZXJyb3IgPSAwOwotICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKG1fY29kZUJsb2Nr
Rm9yQ2FsbC0+aml0VHlwZSgpKSkKLSAgICAgICAgZXJyb3IgPSBjb21waWxlRm9yQ2FsbEludGVy
bmFsKGV4ZWMsIHNjb3BlLCBKSVRDb2RlOjpuZXh0VGllckpJVChtX2NvZGVCbG9ja0ZvckNhbGwt
PmppdFR5cGUoKSksICZyZXN1bHQsIGJ5dGVjb2RlSW5kZXgpOwotICAgIGVsc2UKLSAgICAgICAg
cmVzdWx0ID0gQ29tcGlsYXRpb25Ob3ROZWVkZWQ7Ci0gICAgQVNTRVJUKCEhbV9jb2RlQmxvY2tG
b3JDYWxsKTsKLSAgICByZXR1cm4gZXJyb3I7Ci19Ci0KLUpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1
dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWRGb3JDb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjLCBKU1Nj
b3BlKiBzY29wZSwgQ29tcGlsYXRpb25SZXN1bHQmIHJlc3VsdCwgdW5zaWduZWQgYnl0ZWNvZGVJ
bmRleCkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChleGVjLT52bSgpLmR5bmFtaWNHbG9iYWxPYmpl
Y3QpOwotICAgIEFTU0VSVCghIW1fY29kZUJsb2NrRm9yQ29uc3RydWN0KTsKLSAgICBKU09iamVj
dCogZXJyb3IgPSAwOwotICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKG1fY29kZUJs
b2NrRm9yQ29uc3RydWN0LT5qaXRUeXBlKCkpKQotICAgICAgICBlcnJvciA9IGNvbXBpbGVGb3JD
b25zdHJ1Y3RJbnRlcm5hbChleGVjLCBzY29wZSwgSklUQ29kZTo6bmV4dFRpZXJKSVQobV9jb2Rl
QmxvY2tGb3JDb25zdHJ1Y3QtPmppdFR5cGUoKSksICZyZXN1bHQsIGJ5dGVjb2RlSW5kZXgpOwot
ICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gQ29tcGlsYXRpb25Ob3ROZWVkZWQ7Ci0gICAgQVNT
RVJUKCEhbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpOwotICAgIHJldHVybiBlcnJvcjsKLX0KLSNl
bmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLQotI2lmIEVOQUJMRShKSVQpCi1Db21waWxhdGlvblJl
c3VsdCBGdW5jdGlvbkV4ZWN1dGFibGU6OmppdENvbXBpbGVGb3JDYWxsKEV4ZWNTdGF0ZSogZXhl
YykKLXsKLSAgICByZXR1cm4gaml0Q29tcGlsZUZ1bmN0aW9uSWZBcHByb3ByaWF0ZShleGVjLCBt
X2NvZGVCbG9ja0ZvckNhbGwuZ2V0KCksIG1faml0Q29kZUZvckNhbGwsIG1faml0Q29kZUZvckNh
bGxXaXRoQXJpdHlDaGVjaywgSklUQ29kZTo6Ym90dG9tVGllckpJVCgpLCBVSU5UX01BWCwgSklU
Q29tcGlsYXRpb25DYW5GYWlsKTsKLX0KLQotQ29tcGlsYXRpb25SZXN1bHQgRnVuY3Rpb25FeGVj
dXRhYmxlOjpqaXRDb21waWxlRm9yQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBy
ZXR1cm4gaml0Q29tcGlsZUZ1bmN0aW9uSWZBcHByb3ByaWF0ZShleGVjLCBtX2NvZGVCbG9ja0Zv
ckNvbnN0cnVjdC5nZXQoKSwgbV9qaXRDb2RlRm9yQ29uc3RydWN0LCBtX2ppdENvZGVGb3JDb25z
dHJ1Y3RXaXRoQXJpdHlDaGVjaywgSklUQ29kZTo6Ym90dG9tVGllckpJVCgpLCBVSU5UX01BWCwg
SklUQ29tcGlsYXRpb25DYW5GYWlsKTsKLX0KLSNlbmRpZgotCi1QYXNzUmVmUHRyPEZ1bmN0aW9u
Q29kZUJsb2NrPiBGdW5jdGlvbkV4ZWN1dGFibGU6OnByb2R1Y2VDb2RlQmxvY2tGb3IoSlNTY29w
ZSogc2NvcGUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6YXRpb25LaW5kLCBKU09i
amVjdComIGV4Y2VwdGlvbikKLXsKLSAgICBSZWZQdHI8RnVuY3Rpb25Db2RlQmxvY2s+IGFsdGVy
bmF0aXZlID0gY29kZUJsb2NrRm9yKHNwZWNpYWxpemF0aW9uS2luZCk7Ci0gICAgCi0gICAgaWYg
KCEhYWx0ZXJuYXRpdmUpIHsKLSAgICAgICAgUmVmUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiByZXN1
bHQgPSBhZG9wdFJlZihuZXcgRnVuY3Rpb25Db2RlQmxvY2soQ29kZUJsb2NrOjpDb3B5UGFyc2Vk
QmxvY2ssICpjb2RlQmxvY2tGb3Ioc3BlY2lhbGl6YXRpb25LaW5kKSkpOwotICAgICAgICByZXN1
bHQtPnNldEFsdGVybmF0aXZlKGFsdGVybmF0aXZlKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5y
ZWxlYXNlKCk7Ci0gICAgfQotCi0gICAgVk0qIHZtID0gc2NvcGUtPnZtKCk7Ci0gICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHNjb3BlLT5nbG9iYWxPYmplY3QoKTsKLSAgICBQYXJz
ZXJFcnJvciBlcnJvcjsKLSAgICBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlID0gZ2xvYmFsT2Jq
ZWN0LT5oYXNEZWJ1Z2dlcigpID8gRGVidWdnZXJPbiA6IERlYnVnZ2VyT2ZmOwotICAgIFByb2Zp
bGVyTW9kZSBwcm9maWxlck1vZGUgPSBnbG9iYWxPYmplY3QtPmhhc1Byb2ZpbGVyKCkgPyBQcm9m
aWxlck9uIDogUHJvZmlsZXJPZmY7Ci0gICAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogdW5s
aW5rZWRDb2RlQmxvY2sgPSBtX3VubGlua2VkRXhlY3V0YWJsZS0+Y29kZUJsb2NrRm9yKCp2bSwg
bV9zb3VyY2UsIHNwZWNpYWxpemF0aW9uS2luZCwgZGVidWdnZXJNb2RlLCBwcm9maWxlck1vZGUs
IGVycm9yKTsKLSAgICByZWNvcmRQYXJzZShtX3VubGlua2VkRXhlY3V0YWJsZS0+ZmVhdHVyZXMo
KSwgbV91bmxpbmtlZEV4ZWN1dGFibGUtPmhhc0NhcHR1cmVkVmFyaWFibGVzKCksIGxpbmVObygp
LCBsYXN0TGluZSgpLCBzdGFydENvbHVtbigpKTsKLQotICAgIGlmICghdW5saW5rZWRDb2RlQmxv
Y2spIHsKLSAgICAgICAgZXhjZXB0aW9uID0gZXJyb3IudG9FcnJvck9iamVjdChnbG9iYWxPYmpl
Y3QsIG1fc291cmNlKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgU291cmNlUHJv
dmlkZXIqIHByb3ZpZGVyID0gc291cmNlKCkucHJvdmlkZXIoKTsKLSAgICB1bnNpZ25lZCBzb3Vy
Y2VPZmZzZXQgPSBzb3VyY2UoKS5zdGFydE9mZnNldCgpOwotICAgIHVuc2lnbmVkIHN0YXJ0Q29s
dW1uID0gc291cmNlKCkuc3RhcnRDb2x1bW4oKTsKLQotICAgIHJldHVybiBhZG9wdFJlZihuZXcg
RnVuY3Rpb25Db2RlQmxvY2sodGhpcywgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlLCBwcm92aWRl
ciwgc291cmNlT2Zmc2V0LCBzdGFydENvbHVtbikpOwotfQotCi0KLUpTT2JqZWN0KiBGdW5jdGlv
bkV4ZWN1dGFibGU6OmNvbXBpbGVGb3JDYWxsSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBKU1Nj
b3BlKiBzY29wZSwgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlLCBDb21waWxhdGlvblJlc3VsdCog
cmVzdWx0LCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQotewotICAgIFNhbXBsaW5nUmVnaW9uIHNh
bXBsaW5nUmVnaW9uKHNhbXBsaW5nRGVzY3JpcHRpb24oaml0VHlwZSkpOwotICAgIAotICAgIGlm
IChyZXN1bHQpCi0gICAgICAgICpyZXN1bHQgPSBDb21waWxhdGlvbkZhaWxlZDsKLSAgICAKLSAg
ICBBU1NFUlQoKGppdFR5cGUgPT0gSklUQ29kZTo6Ym90dG9tVGllckpJVCgpKSA9PSAhbV9jb2Rl
QmxvY2tGb3JDYWxsKTsKLSAgICBKU09iamVjdCogZXhjZXB0aW9uID0gMDsKLSAgICAKLSAgICBS
ZWZQdHI8RnVuY3Rpb25Db2RlQmxvY2s+IG5ld0NvZGVCbG9jayA9IHByb2R1Y2VDb2RlQmxvY2tG
b3Ioc2NvcGUsIENvZGVGb3JDYWxsLCBleGNlcHRpb24pOwotICAgIGlmICghbmV3Q29kZUJsb2Nr
KQotICAgICAgICByZXR1cm4gZXhjZXB0aW9uOwotICAgIAotICAgIENvbXBpbGF0aW9uUmVzdWx0
IHRoZVJlc3VsdCA9IHByZXBhcmVGdW5jdGlvbkZvckV4ZWN1dGlvbigKLSAgICAgICAgZXhlYywg
bV9jb2RlQmxvY2tGb3JDYWxsLCBuZXdDb2RlQmxvY2suZ2V0KCksIG1faml0Q29kZUZvckNhbGws
Ci0gICAgICAgIG1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjaywgbV9udW1QYXJhbWV0ZXJz
Rm9yQ2FsbCwgaml0VHlwZSwKLSAgICAgICAgYnl0ZWNvZGVJbmRleCwgQ29kZUZvckNhbGwpOwot
ICAgIGlmIChyZXN1bHQpCi0gICAgICAgICpyZXN1bHQgPSB0aGVSZXN1bHQ7Ci0gICAgcmV0dXJu
IDA7Ci19Ci0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLUNvbXBpbGF0aW9uUmVzdWx0IEZ1bmN0aW9u
RXhlY3V0YWJsZTo6cmVwbGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGVGb3JDYWxsKFBhc3NS
ZWZQdHI8REZHOjpQbGFuPiBwbGFuKQotewotICAgIHJldHVybiBKU0M6OnJlcGxhY2VXaXRoRGVm
ZXJyZWRPcHRpbWl6ZWRDb2RlKAotICAgICAgICBwbGFuLCBtX2NvZGVCbG9ja0ZvckNhbGwsIG1f
aml0Q29kZUZvckNhbGwsICZtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2ssCi0gICAgICAg
ICZtX251bVBhcmFtZXRlcnNGb3JDYWxsKTsKLX0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
LQotSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNvbnN0cnVjdEludGVy
bmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUsIEpJVENvZGU6OkpJVFR5cGUgaml0
VHlwZSwgQ29tcGlsYXRpb25SZXN1bHQqIHJlc3VsdCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkK
LXsKLSAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbihzYW1wbGluZ0Rlc2NyaXB0aW9u
KGppdFR5cGUpKTsKLSAgICAKLSAgICBpZiAocmVzdWx0KQotICAgICAgICAqcmVzdWx0ID0gQ29t
cGlsYXRpb25GYWlsZWQ7Ci0gICAgCi0gICAgQVNTRVJUKChqaXRUeXBlID09IEpJVENvZGU6OmJv
dHRvbVRpZXJKSVQoKSkgPT0gIW1fY29kZUJsb2NrRm9yQ29uc3RydWN0KTsKLSAgICBKU09iamVj
dCogZXhjZXB0aW9uID0gMDsKLSAgICBSZWZQdHI8RnVuY3Rpb25Db2RlQmxvY2s+IG5ld0NvZGVC
bG9jayA9IHByb2R1Y2VDb2RlQmxvY2tGb3Ioc2NvcGUsIENvZGVGb3JDb25zdHJ1Y3QsIGV4Y2Vw
dGlvbik7Ci0gICAgaWYgKCFuZXdDb2RlQmxvY2spCi0gICAgICAgIHJldHVybiBleGNlcHRpb247
Ci0KLSAgICBDb21waWxhdGlvblJlc3VsdCB0aGVSZXN1bHQgPSBwcmVwYXJlRnVuY3Rpb25Gb3JF
eGVjdXRpb24oCi0gICAgICAgIGV4ZWMsIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LCBuZXdDb2Rl
QmxvY2suZ2V0KCksIG1faml0Q29kZUZvckNvbnN0cnVjdCwKLSAgICAgICAgbV9qaXRDb2RlRm9y
Q29uc3RydWN0V2l0aEFyaXR5Q2hlY2ssIG1fbnVtUGFyYW1ldGVyc0ZvckNvbnN0cnVjdCwgaml0
VHlwZSwKLSAgICAgICAgYnl0ZWNvZGVJbmRleCwgQ29kZUZvckNvbnN0cnVjdCk7Ci0gICAgaWYg
KHJlc3VsdCkKLSAgICAgICAgKnJlc3VsdCA9IHRoZVJlc3VsdDsKLQotICAgIHJldHVybiAwOwot
fQotCi0jaWYgRU5BQkxFKERGR19KSVQpCi1Db21waWxhdGlvblJlc3VsdCBGdW5jdGlvbkV4ZWN1
dGFibGU6OnJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlRm9yQ29uc3RydWN0KFBhc3NS
ZWZQdHI8REZHOjpQbGFuPiBwbGFuKQotewotICAgIHJldHVybiBKU0M6OnJlcGxhY2VXaXRoRGVm
ZXJyZWRPcHRpbWl6ZWRDb2RlKAotICAgICAgICBwbGFuLCBtX2NvZGVCbG9ja0ZvckNvbnN0cnVj
dCwgbV9qaXRDb2RlRm9yQ29uc3RydWN0LAotICAgICAgICAmbV9qaXRDb2RlRm9yQ29uc3RydWN0
V2l0aEFyaXR5Q2hlY2ssICZtX251bVBhcmFtZXRlcnNGb3JDb25zdHJ1Y3QpOwotfQotI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQotCiAjaWYgRU5BQkxFKEpJVCkKIHZvaWQgRnVuY3Rpb25FeGVj
dXRhYmxlOjpqZXR0aXNvbk9wdGltaXplZENvZGVGb3JDYWxsKFZNJiB2bSkKIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDE1NDYz
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjQ0LDYgKzI0NCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIExMSW50
OjpDTG9vcDo6Y2F0Y2hSb3V0aW5lRm9yKGNhdGNoUENGb3JJbnRlcnByZXRlcik7CiAjZW5kaWYK
ICAgICB9CisgICAgCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCB8fCBFTkFCTEUoTExJTlRfQ19MT09Q
KQogCiBwcm90ZWN0ZWQ6CkBAIC00MDIsNiArNDAzLDIwIEBAIHB1YmxpYzoKICAgICAgICAgbV9z
dGFydENvbHVtbiA9IHN0YXJ0Q29sdW1uOwogICAgIH0KIAorICAgIHZvaWQgaW5zdGFsbENvZGUo
Q29kZUJsb2NrKik7CisgICAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+IG5ld0NvZGVCbG9ja0ZvcihD
b2RlU3BlY2lhbGl6YXRpb25LaW5kLCBKU1Njb3BlKiwgSlNPYmplY3QqJiBleGNlcHRpb24pOwor
ICAgIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBuZXdSZXBsYWNlbWVudENvZGVCbG9ja0ZvcihDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kKTsKKyAgICAKKyAgICBKU09iamVjdCogcHJlcGFyZUZvckV4ZWN1
dGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCBDb2RlU3BlY2lhbGl6YXRpb25L
aW5kIGtpbmQpCisgICAgeworICAgICAgICBpZiAoaGFzSklUQ29kZUZvcihraW5kKSkKKyAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gcHJlcGFyZUZvckV4ZWN1dGlvbkltcGwo
ZXhlYywgc2NvcGUsIGtpbmQpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBKU09iamVjdCogcHJl
cGFyZUZvckV4ZWN1dGlvbkltcGwoRXhlY1N0YXRlKiwgSlNTY29wZSosIENvZGVTcGVjaWFsaXph
dGlvbktpbmQpOworCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0p
CiAgICAgewpAQCAtNDMwLDI0ICs0NDUsOCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBk
ZXN0cm95KEpTQ2VsbCopOwogCi0gICAgSlNPYmplY3QqIGNvbXBpbGUoRXhlY1N0YXRlKiBleGVj
LCBKU1Njb3BlKiBzY29wZSkKLSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMtPnZt
KCkuZHluYW1pY0dsb2JhbE9iamVjdCk7Ci0gICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IDA7Ci0g
ICAgICAgIGlmICghbV9ldmFsQ29kZUJsb2NrKQotICAgICAgICAgICAgZXJyb3IgPSBjb21waWxl
SW50ZXJuYWwoZXhlYywgc2NvcGUsIEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSk7Ci0gICAgICAg
IEFTU0VSVCghZXJyb3IgPT0gISFtX2V2YWxDb2RlQmxvY2spOwotICAgICAgICByZXR1cm4gZXJy
b3I7Ci0gICAgfQotICAgICAgICAKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBKU09iamVjdCog
Y29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBKU1Njb3BlKiwgQ29tcGlsYXRpb25SZXN1bHQm
LCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKLSAgICBDb21waWxhdGlvblJlc3VsdCByZXBsYWNl
V2l0aERlZmVycmVkT3B0aW1pemVkQ29kZShQYXNzUmVmUHRyPERGRzo6UGxhbj4pOwotI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQotICAgICAgICAKICNpZiBFTkFCTEUoSklUKQogICAgIHZvaWQg
amV0dGlzb25PcHRpbWl6ZWRDb2RlKFZNJik7Ci0gICAgQ29tcGlsYXRpb25SZXN1bHQgaml0Q29t
cGlsZShFeGVjU3RhdGUqKTsKICNlbmRpZgogCiAgICAgRXZhbENvZGVCbG9jayYgZ2VuZXJhdGVk
Qnl0ZWNvZGUoKQpAQCAtNDgxLDEwICs0ODAsMTAgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIG51
bWJlck9mRnVuY3Rpb25EZWNscygpIHsgcmV0dXJuIG1fdW5saW5rZWRFdmFsQ29kZUJsb2NrLT5u
dW1iZXJPZkZ1bmN0aW9uRGVjbHMoKTsgfQogCiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBT
Y3JpcHRFeGVjdXRhYmxlOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBTY3JpcHRFeGVjdXRhYmxlOjpTdHJ1Y3R1cmVG
bGFnczsKICAgICBFdmFsRXhlY3V0YWJsZShFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2RlJiwg
Ym9vbCk7CiAKLSAgICBKU09iamVjdCogY29tcGlsZUludGVybmFsKEV4ZWNTdGF0ZSosIEpTU2Nv
cGUqLCBKSVRDb2RlOjpKSVRUeXBlLCBDb21waWxhdGlvblJlc3VsdCogPSAwLCB1bnNpZ25lZCBi
eXRlY29kZUluZGV4ID0gVUlOVF9NQVgpOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogICAgIFJlZlB0cjxFdmFsQ29kZUJsb2NrPiBtX2V2
YWxDb2RlQmxvY2s7CkBAIC01MDgsMjQgKzUwNyw4IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2
b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKLSAgICBKU09iamVjdCogY29tcGlsZShFeGVjU3RhdGUq
IGV4ZWMsIEpTU2NvcGUqIHNjb3BlKQotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoZXhl
Yy0+dm0oKS5keW5hbWljR2xvYmFsT2JqZWN0KTsKLSAgICAgICAgSlNPYmplY3QqIGVycm9yID0g
MDsKLSAgICAgICAgaWYgKCFtX3Byb2dyYW1Db2RlQmxvY2spCi0gICAgICAgICAgICBlcnJvciA9
IGNvbXBpbGVJbnRlcm5hbChleGVjLCBzY29wZSwgSklUQ29kZTo6Ym90dG9tVGllckpJVCgpKTsK
LSAgICAgICAgQVNTRVJUKCFlcnJvciA9PSAhIW1fcHJvZ3JhbUNvZGVCbG9jayk7Ci0gICAgICAg
IHJldHVybiBlcnJvcjsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBKU09iamVj
dCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBKU1Njb3BlKiwgQ29tcGlsYXRpb25SZXN1
bHQmLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKLSAgICBDb21waWxhdGlvblJlc3VsdCByZXBs
YWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZShQYXNzUmVmUHRyPERGRzo6UGxhbj4pOwotI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQotICAgICAgICAKICNpZiBFTkFCTEUoSklUKQogICAgIHZv
aWQgamV0dGlzb25PcHRpbWl6ZWRDb2RlKFZNJik7Ci0gICAgQ29tcGlsYXRpb25SZXN1bHQgaml0
Q29tcGlsZShFeGVjU3RhdGUqKTsKICNlbmRpZgogCiAgICAgUHJvZ3JhbUNvZGVCbG9jayYgZ2Vu
ZXJhdGVkQnl0ZWNvZGUoKQpAQCAtNTU3LDExICs1NDAsMTIgQEAgcHVibGljOgogICAgIEV4ZWN1
dGFibGVJbmZvIGV4ZWN1dGFibGVJbmZvKCkgY29uc3QgeyByZXR1cm4gRXhlY3V0YWJsZUluZm8o
bmVlZHNBY3RpdmF0aW9uKCksIHVzZXNFdmFsKCksIGlzU3RyaWN0TW9kZSgpLCBmYWxzZSk7IH0K
IAogcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgU2NyaXB0RXhlY3V0YWJsZTsKKyAgICAKICAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNWaXNpdENo
aWxkcmVuIHwgU2NyaXB0RXhlY3V0YWJsZTo6U3RydWN0dXJlRmxhZ3M7CiAKICAgICBQcm9ncmFt
RXhlY3V0YWJsZShFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2RlJik7CiAKLSAgICBKU09iamVj
dCogY29tcGlsZUludGVybmFsKEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBKSVRDb2RlOjpKSVRUeXBl
LCBDb21waWxhdGlvblJlc3VsdCogPSAwLCB1bnNpZ25lZCBieXRlY29kZUluZGV4ID0gVUlOVF9N
QVgpOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKIAogICAgIFdyaXRlQmFycmllcjxVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s+IG1fdW5saW5r
ZWRQcm9ncmFtQ29kZUJsb2NrOwpAQCAtNjAwLDI2ICs1ODQsOCBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiAqbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Q7CiAgICAgfQogICAgICAgICAKLSAgICBQ
YXNzUmVmUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBwcm9kdWNlQ29kZUJsb2NrRm9yKEpTU2NvcGUq
LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLCBKU09iamVjdComIGV4Y2VwdGlvbik7Ci0KLSAgICBK
U09iamVjdCogY29tcGlsZUZvckNhbGwoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSkK
LSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMtPnZtKCkuZHluYW1pY0dsb2JhbE9i
amVjdCk7Ci0gICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IDA7Ci0gICAgICAgIGlmICghbV9jb2Rl
QmxvY2tGb3JDYWxsKQotICAgICAgICAgICAgZXJyb3IgPSBjb21waWxlRm9yQ2FsbEludGVybmFs
KGV4ZWMsIHNjb3BlLCBKSVRDb2RlOjpib3R0b21UaWVySklUKCkpOwotICAgICAgICBBU1NFUlQo
IWVycm9yID09ICEhbV9jb2RlQmxvY2tGb3JDYWxsKTsKLSAgICAgICAgcmV0dXJuIGVycm9yOwot
ICAgIH0KLQotI2lmIEVOQUJMRShERkdfSklUKQotICAgIEpTT2JqZWN0KiBjb21waWxlT3B0aW1p
emVkRm9yQ2FsbChFeGVjU3RhdGUqLCBKU1Njb3BlKiwgQ29tcGlsYXRpb25SZXN1bHQmLCB1bnNp
Z25lZCBieXRlY29kZUluZGV4KTsKLSAgICBDb21waWxhdGlvblJlc3VsdCByZXBsYWNlV2l0aERl
ZmVycmVkT3B0aW1pemVkQ29kZUZvckNhbGwoUGFzc1JlZlB0cjxERkc6OlBsYW4+KTsKLSNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKLSAgICAgICAgCiAjaWYgRU5BQkxFKEpJVCkKICAgICB2b2lk
IGpldHRpc29uT3B0aW1pemVkQ29kZUZvckNhbGwoVk0mKTsKLSAgICBDb21waWxhdGlvblJlc3Vs
dCBqaXRDb21waWxlRm9yQ2FsbChFeGVjU3RhdGUqKTsKICNlbmRpZgogCiAgICAgYm9vbCBpc0dl
bmVyYXRlZEZvckNhbGwoKSBjb25zdApAQCAtNjMzLDI0ICs1OTksOCBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiAqbV9jb2RlQmxvY2tGb3JDYWxsOwogICAgIH0KIAotICAgIEpTT2JqZWN0KiBj
b21waWxlRm9yQ29uc3RydWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUpCi0gICAg
ewotICAgICAgICBSRUxFQVNFX0FTU0VSVChleGVjLT52bSgpLmR5bmFtaWNHbG9iYWxPYmplY3Qp
OwotICAgICAgICBKU09iamVjdCogZXJyb3IgPSAwOwotICAgICAgICBpZiAoIW1fY29kZUJsb2Nr
Rm9yQ29uc3RydWN0KQotICAgICAgICAgICAgZXJyb3IgPSBjb21waWxlRm9yQ29uc3RydWN0SW50
ZXJuYWwoZXhlYywgc2NvcGUsIEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSk7Ci0gICAgICAgIEFT
U0VSVCghZXJyb3IgPT0gISFtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCk7Ci0gICAgICAgIHJldHVy
biBlcnJvcjsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBKU09iamVjdCogY29t
cGlsZU9wdGltaXplZEZvckNvbnN0cnVjdChFeGVjU3RhdGUqLCBKU1Njb3BlKiwgQ29tcGlsYXRp
b25SZXN1bHQmLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKLSAgICBDb21waWxhdGlvblJlc3Vs
dCByZXBsYWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZUZvckNvbnN0cnVjdChQYXNzUmVmUHRy
PERGRzo6UGxhbj4pOwotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotICAgICAgICAKICNpZiBF
TkFCTEUoSklUKQogICAgIHZvaWQgamV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ29uc3RydWN0KFZN
Jik7Ci0gICAgQ29tcGlsYXRpb25SZXN1bHQgaml0Q29tcGlsZUZvckNvbnN0cnVjdChFeGVjU3Rh
dGUqKTsKICNlbmRpZgogCiAgICAgYm9vbCBpc0dlbmVyYXRlZEZvckNvbnN0cnVjdCgpIGNvbnN0
CkBAIC02NjQsMzkgKzYxNCw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICptX2NvZGVCbG9j
a0ZvckNvbnN0cnVjdDsKICAgICB9CiAgICAgICAgIAotICAgIEpTT2JqZWN0KiBjb21waWxlRm9y
KEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQg
a2luZCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChleGVjLT5jYWxsZWUoKSk7Ci0gICAgICAgIEFT
U0VSVChleGVjLT5jYWxsZWUoKS0+aW5oZXJpdHMoSlNGdW5jdGlvbjo6aW5mbygpKSk7Ci0gICAg
ICAgIEFTU0VSVChqc0Nhc3Q8SlNGdW5jdGlvbio+KGV4ZWMtPmNhbGxlZSgpKS0+anNFeGVjdXRh
YmxlKCkgPT0gdGhpcyk7Ci0KLSAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCi0gICAg
ICAgICAgICByZXR1cm4gY29tcGlsZUZvckNhbGwoZXhlYywgc2NvcGUpOwotICAgICAgICBBU1NF
UlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKLSAgICAgICAgcmV0dXJuIGNvbXBpbGVGb3JD
b25zdHJ1Y3QoZXhlYywgc2NvcGUpOwotICAgIH0KLSAgICAgICAgCi0jaWYgRU5BQkxFKERGR19K
SVQpCi0gICAgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWRGb3IoRXhlY1N0YXRlKiBleGVjLCBK
U1Njb3BlKiBzY29wZSwgQ29tcGlsYXRpb25SZXN1bHQmIHJlc3VsdCwgdW5zaWduZWQgYnl0ZWNv
ZGVJbmRleCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQotICAgIHsKLSAgICAgICAgQVNT
RVJUKGV4ZWMtPmNhbGxlZSgpKTsKLSAgICAgICAgQVNTRVJUKGV4ZWMtPmNhbGxlZSgpLT5pbmhl
cml0cyhKU0Z1bmN0aW9uOjppbmZvKCkpKTsKLSAgICAgICAgQVNTRVJUKGpzQ2FzdDxKU0Z1bmN0
aW9uKj4oZXhlYy0+Y2FsbGVlKCkpLT5qc0V4ZWN1dGFibGUoKSA9PSB0aGlzKTsKLSAgICAgICAg
ICAgIAotICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKLSAgICAgICAgICAgIHJldHVy
biBjb21waWxlT3B0aW1pemVkRm9yQ2FsbChleGVjLCBzY29wZSwgcmVzdWx0LCBieXRlY29kZUlu
ZGV4KTsKLSAgICAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7Ci0gICAgICAg
IHJldHVybiBjb21waWxlT3B0aW1pemVkRm9yQ29uc3RydWN0KGV4ZWMsIHNjb3BlLCByZXN1bHQs
IGJ5dGVjb2RlSW5kZXgpOwotICAgIH0KLSAgICAgICAgCi0gICAgQ29tcGlsYXRpb25SZXN1bHQg
cmVwbGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGVGb3IoUGFzc1JlZlB0cjxERkc6OlBsYW4+
IHBsYW4sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKLSAgICB7Ci0gICAgICAgIGlmIChr
aW5kID09IENvZGVGb3JDYWxsKQotICAgICAgICAgICAgcmV0dXJuIHJlcGxhY2VXaXRoRGVmZXJy
ZWRPcHRpbWl6ZWRDb2RlRm9yQ2FsbChwbGFuKTsKLSAgICAgICAgcmV0dXJuIHJlcGxhY2VXaXRo
RGVmZXJyZWRPcHRpbWl6ZWRDb2RlRm9yQ29uc3RydWN0KHBsYW4pOwotICAgIH0KLSNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKLQogI2lmIEVOQUJMRShKSVQpCiAgICAgdm9pZCBqZXR0aXNvbk9w
dGltaXplZENvZGVGb3IoVk0mIHZtLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiAgICAg
ewpAQCAtNzA3LDE0ICs2MjQsNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICBqZXR0aXNvbk9wdGlt
aXplZENvZGVGb3JDb25zdHJ1Y3Qodm0pOwogICAgICAgICB9CiAgICAgfQotICAgICAgICAKLSAg
ICBDb21waWxhdGlvblJlc3VsdCBqaXRDb21waWxlRm9yKEV4ZWNTdGF0ZSogZXhlYywgQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCBraW5kKQotICAgIHsKLSAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZv
ckNhbGwpCi0gICAgICAgICAgICByZXR1cm4gaml0Q29tcGlsZUZvckNhbGwoZXhlYyk7Ci0gICAg
ICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOwotICAgICAgICByZXR1cm4gaml0
Q29tcGlsZUZvckNvbnN0cnVjdChleGVjKTsKLSAgICB9CiAjZW5kaWYKICAgICAgICAgCiAgICAg
Ym9vbCBpc0dlbmVyYXRlZEZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCkBAIC03NjQs
OSArNjczLDYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUoVk0m
LCBjb25zdCBTb3VyY2VDb2RlJiwgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqLCB1bnNpZ25l
ZCBmaXJzdExpbmUsIHVuc2lnbmVkIGxhc3RMaW5lLCB1bnNpZ25lZCBzdGFydENvbHVtbik7CiAK
LSAgICBKU09iamVjdCogY29tcGlsZUZvckNhbGxJbnRlcm5hbChFeGVjU3RhdGUqLCBKU1Njb3Bl
KiwgSklUQ29kZTo6SklUVHlwZSwgQ29tcGlsYXRpb25SZXN1bHQqID0gMCwgdW5zaWduZWQgYnl0
ZWNvZGVJbmRleCA9IFVJTlRfTUFYKTsKLSAgICBKU09iamVjdCogY29tcGlsZUZvckNvbnN0cnVj
dEludGVybmFsKEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBKSVRDb2RlOjpKSVRUeXBlLCBDb21waWxh
dGlvblJlc3VsdCogPSAwLCB1bnNpZ25lZCBieXRlY29kZUluZGV4ID0gVUlOVF9NQVgpOwotICAg
ICAgICAKICAgICBSZWZQdHI8RnVuY3Rpb25Db2RlQmxvY2s+JiBjb2RlQmxvY2tGb3IoQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCBraW5kKQogICAgIHsKICAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZv
ckNhbGwpCkBAIC03ODYsNiArNjkyLDggQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KIAorICAgIGZyaWVuZCBjbGFzcyBTY3JpcHRFeGVjdXRhYmxlOworCiAgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJl
biB8IFNjcmlwdEV4ZWN1dGFibGU6OlN0cnVjdHVyZUZsYWdzOwogICAgIFdyaXRlQmFycmllcjxV
bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4gbV91bmxpbmtlZEV4ZWN1dGFibGU7CiAgICAgUmVm
UHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBtX2NvZGVCbG9ja0ZvckNhbGw7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRpb25IYXJuZXNzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0aW9uSGFybmVzcy5oCShyZXZpc2lv
biAxNTQ2MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRpb25IYXJu
ZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTY3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBFeGVjdXRpb25IYXJu
ZXNzX2gKLSNkZWZpbmUgRXhlY3V0aW9uSGFybmVzc19oCi0KLSNpbmNsdWRlIDx3dGYvUGxhdGZv
cm0uaD4KLQotI2luY2x1ZGUgIkNvbXBpbGF0aW9uUmVzdWx0LmgiCi0jaW5jbHVkZSAiREZHRHJp
dmVyLmgiCi0jaW5jbHVkZSAiREZHUGxhbi5oIgotI2luY2x1ZGUgIkpJVERyaXZlci5oIgotI2lu
Y2x1ZGUgIkxMSW50RW50cnlwb2ludHMuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+Ci1pbmxpbmUgQ29tcGlsYXRpb25SZXN1bHQgcHJlcGFy
ZUZvckV4ZWN1dGlvbkltcGwoCi0gICAgRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2tUeXBlKiBj
b2RlQmxvY2ssIFJlZlB0cjxKSVRDb2RlPiYgaml0Q29kZSwKLSAgICBKSVRDb2RlOjpKSVRUeXBl
IGppdFR5cGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGJ5
dGVjb2RlSW5kZXgpOwotI2lmIEVOQUJMRShMTElOVCkKLSAgICBpZiAoSklUQ29kZTo6aXNCYXNl
bGluZUNvZGUoaml0VHlwZSkpIHsKLSAgICAgICAgLy8gU3RhcnQgb2ZmIGluIHRoZSBsb3cgbGV2
ZWwgaW50ZXJwcmV0ZXIuCi0gICAgICAgIExMSW50OjpnZXRFbnRyeXBvaW50KGV4ZWMtPnZtKCks
IGNvZGVCbG9jaywgaml0Q29kZSk7Ci0gICAgICAgIGlmIChleGVjLT52bSgpLm1fcGVyQnl0ZWNv
ZGVQcm9maWxlcikKLSAgICAgICAgICAgIGV4ZWMtPnZtKCkubV9wZXJCeXRlY29kZVByb2ZpbGVy
LT5lbnN1cmVCeXRlY29kZXNGb3IoY29kZUJsb2NrKTsKLSAgICAgICAgcmV0dXJuIENvbXBpbGF0
aW9uU3VjY2Vzc2Z1bDsKLSAgICB9Ci0jZW5kaWYgLy8gRU5BQkxFKExMSU5UKQotI2lmIEVOQUJM
RShKSVQpCi0gICAgcmV0dXJuIGppdENvbXBpbGVJZkFwcHJvcHJpYXRlSW1wbCgKLSAgICAgICAg
ZXhlYywgY29kZUJsb2NrLCBqaXRDb2RlLCBqaXRUeXBlLCBieXRlY29kZUluZGV4LAotICAgICAg
ICBKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKSA/IEpJVENvbXBpbGF0aW9uTXVzdFN1
Y2NlZWQgOiBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwotI2VuZGlmCi0gICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gQ29tcGlsYXRpb25GYWlsZWQ7Ci19Ci0KLWlu
bGluZSBDb21waWxhdGlvblJlc3VsdCBwcmVwYXJlRnVuY3Rpb25Gb3JFeGVjdXRpb25JbXBsKAot
ICAgIEV4ZWNTdGF0ZSogZXhlYywgRnVuY3Rpb25Db2RlQmxvY2sqIGNvZGVCbG9jaywgUmVmUHRy
PEpJVENvZGU+JiBqaXRDb2RlLAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgaml0Q29kZVdp
dGhBcml0eUNoZWNrLCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUsCi0gICAgdW5zaWduZWQgYnl0
ZWNvZGVJbmRleCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQotewotICAgIFVOVVNFRF9Q
QVJBTShieXRlY29kZUluZGV4KTsKLSAgICBVTlVTRURfUEFSQU0oaml0Q29kZVdpdGhBcml0eUNo
ZWNrKTsKLSNpZiBFTkFCTEUoTExJTlQpCi0gICAgaWYgKEpJVENvZGU6OmlzQmFzZWxpbmVDb2Rl
KGppdFR5cGUpKSB7Ci0gICAgICAgIC8vIFN0YXJ0IG9mZiBpbiB0aGUgbG93IGxldmVsIGludGVy
cHJldGVyLgotICAgICAgICBMTEludDo6Z2V0RnVuY3Rpb25FbnRyeXBvaW50KGV4ZWMtPnZtKCks
IGtpbmQsIGppdENvZGUsIGppdENvZGVXaXRoQXJpdHlDaGVjayk7Ci0gICAgICAgIGlmIChleGVj
LT52bSgpLm1fcGVyQnl0ZWNvZGVQcm9maWxlcikKLSAgICAgICAgICAgIGV4ZWMtPnZtKCkubV9w
ZXJCeXRlY29kZVByb2ZpbGVyLT5lbnN1cmVCeXRlY29kZXNGb3IoY29kZUJsb2NrKTsKLSAgICAg
ICAgcmV0dXJuIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDsKLSAgICB9Ci0jZWxzZQotICAgIFVOVVNF
RF9QQVJBTShraW5kKTsKLSNlbmRpZiAvLyBFTkFCTEUoTExJTlQpCi0jaWYgRU5BQkxFKEpJVCkK
LSAgICByZXR1cm4gaml0Q29tcGlsZUZ1bmN0aW9uSWZBcHByb3ByaWF0ZUltcGwoCi0gICAgICAg
IGV4ZWMsIGNvZGVCbG9jaywgaml0Q29kZSwgaml0Q29kZVdpdGhBcml0eUNoZWNrLCBqaXRUeXBl
LCBieXRlY29kZUluZGV4LAotICAgICAgICBKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShqaXRUeXBl
KSA/IEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQgOiBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwot
I2VuZGlmCi0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gQ29t
cGlsYXRpb25GYWlsZWQ7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+Ci1p
bmxpbmUgQ29tcGlsYXRpb25SZXN1bHQgaW5zdGFsbE9wdGltaXplZENvZGUoCi0gICAgQ29tcGls
YXRpb25SZXN1bHQgcmVzdWx0LCBSZWZQdHI8Q29kZUJsb2NrVHlwZT4mIHNpbmssIENvZGVCbG9j
a1R5cGUqIGNvZGVCbG9jaywKLSAgICBQYXNzUmVmUHRyPEpJVENvZGU+IGppdENvZGUsIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ssCi0gICAgaW50KiBudW1QYXJh
bWV0ZXJzKQotewotICAgIFVOVVNFRF9QQVJBTShqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOwotICAg
IGlmIChyZXN1bHQgIT0gQ29tcGlsYXRpb25TdWNjZXNzZnVsKQotICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgIAotI2lmIEVOQUJMRShKSVQpCi0gICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKGpp
dENvZGUsIGppdENvZGVXaXRoQXJpdHlDaGVjayk7Ci0jZW5kaWYKLQotICAgIHNpbmsgPSBjb2Rl
QmxvY2s7Ci0gICAgCi0gICAgaWYgKG51bVBhcmFtZXRlcnMpCi0gICAgICAgICpudW1QYXJhbWV0
ZXJzID0gY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7Ci0gICAgCi0gICAgaWYgKGppdENvZGUp
Ci0gICAgICAgIGNvZGVCbG9jay0+dm0oKS0+aGVhcC5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qoc2l6
ZW9mKCpjb2RlQmxvY2spICsgaml0Q29kZS0+c2l6ZSgpKTsKLSAgICBlbHNlCi0gICAgICAgIGNv
ZGVCbG9jay0+dm0oKS0+aGVhcC5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qoc2l6ZW9mKCpjb2RlQmxv
Y2spKTsKLSAgICAKLSAgICBpZiAoc2luayAhPSBjb2RlQmxvY2spIHsKLSAgICAgICAgLy8gVGhp
cyBjYW4gaGFwcGVuIGlmIHdlIEdDIGFuZCBkZWNpZGUgdGhhdCB0aGUgY29kZSBpcyBpbnZhbGlk
LgotICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25JbnZhbGlkYXRlZDsKLSAgICB9Ci0gICAgCi0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4K
LWlubGluZSBDb21waWxhdGlvblJlc3VsdCBwcmVwYXJlRm9yRXhlY3V0aW9uKAotICAgIEV4ZWNT
dGF0ZSogZXhlYywgUmVmUHRyPENvZGVCbG9ja1R5cGU+JiBzaW5rLCBDb2RlQmxvY2tUeXBlKiBj
b2RlQmxvY2ssCi0gICAgUmVmUHRyPEpJVENvZGU+JiBqaXRDb2RlLCBKSVRDb2RlOjpKSVRUeXBl
IGppdFR5cGUsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAgQ29tcGlsYXRpb25SZXN1
bHQgcmVzdWx0ID0gcHJlcGFyZUZvckV4ZWN1dGlvbkltcGwoZXhlYywgY29kZUJsb2NrLCBqaXRD
b2RlLCBqaXRUeXBlLCBieXRlY29kZUluZGV4KTsKLSAgICByZXR1cm4gaW5zdGFsbE9wdGltaXpl
ZENvZGUocmVzdWx0LCBzaW5rLCBjb2RlQmxvY2ssIGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0cigpLCAwKTsKLX0KLQotaW5saW5lIENvbXBpbGF0aW9uUmVzdWx0IHByZXBhcmVGdW5jdGlv
bkZvckV4ZWN1dGlvbigKLSAgICBFeGVjU3RhdGUqIGV4ZWMsIFJlZlB0cjxGdW5jdGlvbkNvZGVC
bG9jaz4mIHNpbmssIEZ1bmN0aW9uQ29kZUJsb2NrKiBjb2RlQmxvY2ssCi0gICAgUmVmUHRyPEpJ
VENvZGU+JiBqaXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGppdENvZGVXaXRoQXJpdHlD
aGVjaywKLSAgICBpbnQmIG51bVBhcmFtZXRlcnMsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSwg
dW5zaWduZWQgYnl0ZWNvZGVJbmRleCwKLSAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQp
Ci17Ci0gICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gcHJlcGFyZUZ1bmN0aW9uRm9yRXhl
Y3V0aW9uSW1wbChleGVjLCBjb2RlQmxvY2ssCi0gICAgICAgIGppdENvZGUsIGppdENvZGVXaXRo
QXJpdHlDaGVjaywgaml0VHlwZSwgYnl0ZWNvZGVJbmRleCwga2luZCk7Ci0gICAgcmV0dXJuIGlu
c3RhbGxPcHRpbWl6ZWRDb2RlKHJlc3VsdCwgc2luaywgY29kZUJsb2NrLCBqaXRDb2RlLCBqaXRD
b2RlV2l0aEFyaXR5Q2hlY2ssICZudW1QYXJhbWV0ZXJzKTsKLX0KLQotI2lmIEVOQUJMRShERkdf
SklUKQotdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KLWlubGluZSBDb21waWxhdGlv
blJlc3VsdCByZXBsYWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZSgKLSAgICBQYXNzUmVmUHRy
PERGRzo6UGxhbj4gcGFzc2VkUGxhbiwgUmVmUHRyPENvZGVCbG9ja1R5cGU+JiBzaW5rLCBSZWZQ
dHI8SklUQ29kZT4mIGppdENvZGUsCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKiBqaXRDb2Rl
V2l0aEFyaXR5Q2hlY2ssIGludCogbnVtUGFyYW1ldGVycykKLXsKLSAgICBSZWZQdHI8REZHOjpQ
bGFuPiBwbGFuID0gcGFzc2VkUGxhbjsKLSAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBE
Rkc6OnRyeUZpbmFsaXplUGxhbihwbGFuLCBqaXRDb2RlLCBqaXRDb2RlV2l0aEFyaXR5Q2hlY2sp
OwotICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKLSAgICAgICAgZGF0YUxvZygKLSAg
ICAgICAgICAgICJEZWZlcnJlZCBvcHRpbWl6aW5nIGNvbXBpbGF0aW9uICIsICpwbGFuLT5rZXko
KSwgIiAtPiAiLCAqcGxhbi0+Y29kZUJsb2NrLAotICAgICAgICAgICAgIiByZXN1bHQ6ICIsIHJl
c3VsdCwgIlxuIik7Ci0gICAgfQotICAgIGlmIChyZXN1bHQgPT0gQ29tcGlsYXRpb25TdWNjZXNz
ZnVsKQotICAgICAgICBwbGFuLT5jb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPnVubGlua0luY29t
aW5nQ2FsbHMoKTsKLSAgICByZXR1cm4gaW5zdGFsbE9wdGltaXplZENvZGUoCi0gICAgICAgIHJl
c3VsdCwgc2luaywgc3RhdGljX2Nhc3Q8Q29kZUJsb2NrVHlwZSo+KHBsYW4tPmNvZGVCbG9jay5n
ZXQoKSksIGppdENvZGUsCi0gICAgICAgIGppdENvZGVXaXRoQXJpdHlDaGVjayA/ICpqaXRDb2Rl
V2l0aEFyaXR5Q2hlY2sgOiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKSwKLSAgICAgICAgbnVtUGFy
YW1ldGVycyk7Ci19Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0KLX0gLy8gbmFtZXNwYWNl
IEpTQwotCi0jZW5kaWYgLy8gRXhlY3V0aW9uSGFybmVzc19oCi0K
</data>
<flag name="commit-queue"
          id="231887"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>209845</attachid>
            <date>2013-08-27 21:46:03 -0700</date>
            <delta_ts>2013-08-27 21:48:33 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>121685</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU0NzIyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3NCBA
QAorMjAxMy0wOC0yNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IENvZGVCbG9jayBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIHNob3VsZCBiZSBzaW1wbGlm
aWVkIGFuZCByYXRpb25hbGl6ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEyMDMyNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorICAgICAgICAKKyAgICAgICAgUHJldmlvdXNseSBFeGVjdXRhYmxlIG93bmVkIHRoZSBjb2Rl
IGZvciBnZW5lcmF0aW5nIEpJVCBjb2RlOyB5b3UgYWx3YXlzIGhhZAorICAgICAgICB0byBnbyB0
aHJvdWdoIEV4ZWN1dGFibGUuIEJ1dCBvZnRlbiB5b3UgYWxzbyBoYWQgdG8gZ28gdGhyb3VnaCBD
b2RlQmxvY2ssCisgICAgICAgIGJlY2F1c2UgU2NyaXB0RXhlY3V0YWJsZSBjb3VsZG4ndCBoYXZl
IHZpcnR1YWwgbWV0aG9kcywgYnV0IENvZGVCbG9jayBjb3VsZC4KKyAgICAgICAgU28geW91J2Qg
YXNrIENvZGVCbG9jayB0byBkbyBzb21ldGhpbmcsIHdoaWNoIHdvdWxkIGRpc3BhdGNoIHRocm91
Z2ggYQorICAgICAgICB2aXJ0dWFsIG1ldGhvZCB0aGF0IHdvdWxkIHNlbGVjdCB0aGUgYXBwcm9w
cmlhdGUgRXhlY3V0YWJsZSBzdWJ0eXBlJ3MgbWV0aG9kLgorICAgICAgICBUaGlzIGFsbCBtZWFu
dCB0aGF0IHRoZSBzYW1lIGNvZGUgd291bGQgb2Z0ZW4gYmUgZHVwbGljYXRlZCwgYmVjYXVzZSBt
b3N0IG9mCisgICAgICAgIHRoZSB3b3JrIG5lZWRlZCB0byBjb21waWxlIHNvbWV0aGluZyB3YXMg
aWRlbnRpY2FsIHJlZ2FyZGxlc3Mgb2YgY29kZSB0eXBlLgorICAgICAgICBCdXQgdGhlbiB3ZSB0
cmllZCB0byBmaXggdGhpcywgYnkgaGF2aW5nIHRlbXBsYXRpemVkIGhlbHBlcnMgaW4KKyAgICAg
ICAgRXhlY3V0aW9uSGFybmVzcy5oIGFuZCBKSVREcml2ZXIuaC4gVGhlIHJlc3VsdCB3YXMgdGhh
dCBpZiB5b3Ugd2FudGVkIHRvIGZpbmQKKyAgICAgICAgb3V0IHdoYXQgaGFwcGVuZWQgd2hlbiB5
b3UgYXNrZWQgZm9yIHNvbWV0aGluZyB0byBiZSBjb21waWxlZCwgeW91J2QgZ28gb24gYQorICAg
ICAgICB3aWxkIHJpZGUgdGhhdCBzdGFydGVkIHdpdGggQ29kZUJsb2NrLCB0b3VjaGVkIHVwb24g
RXhlY3V0YWJsZSwgYW5kIHRoZW4KKyAgICAgICAgcmljb2NoZXRlZCBpbnRvIGVpdGhlciBFeGVj
dXRpb25IYXJuZXNzIG9yIEpJVERyaXZlciAobGlrZWx5IGJvdGgpLgorICAgICAgICAKKyAgICAg
ICAgQW5vdGhlciBhd2t3YXJkbmVzcyB3YXMgdGhhdCBmb3IgY29uY3VycmVudCBjb21waWxlcywg
dGhlIERGRzo6V29ya2xpc3QgaGFkCisgICAgICAgIHN1cGVyLXNwZWNpYWwgaW5zaWRlIGtub3ds
ZWRnZSBvZiB3aGF0IEpJVFN0dWJzLmNwcCdzIGN0aV9vcHRpbWl6ZSB3b3VsZCBoYXZlCisgICAg
ICAgIGRvbmUgb25jZSB0aGUgY29tcGlsYXRpb24gZmluaXNoZWQuCisgICAgICAgIAorICAgICAg
ICBBbHNvLCBtb3N0IG9mIHRoZSBERkcgSklUIGRyaXZlcnMgYXNzdW1lZCB0aGF0IHRoZXkgY291
bGRuJ3QgaW5zdGFsbCB0aGUKKyAgICAgICAgSklUQ29kZSBpbnRvIHRoZSBDb2RlQmxvY2sgZGly
ZWN0bHkgLSBpbnN0ZWFkIHRoZXkgd291bGQgcmV0dXJuIGl0IHZpYSBhCisgICAgICAgIHJlZmVy
ZW5jZSwgd2hpY2ggaGFwcGVuZWQgdG8gYmUgYSByZWZlcmVuY2UgdG8gdGhlIEpJVENvZGUgcG9p
bnRlciBpbgorICAgICAgICBFeGVjdXRhYmxlLiBUaGlzIHdhcyBzdXBlciB3ZWlyZC4KKyAgICAg
ICAgCisgICAgICAgIEZpbmFsbHksIHRoZXJlIHdhcyBubyBub3Rpb24gb2YgY29tcGlsaW5nIGNv
ZGUgaW50byBhIHNwZWNpYWwgQ29kZUJsb2NrIHRoYXQKKyAgICAgICAgd2Fzbid0IHVzZWQgZm9y
IGhhbmRsaW5nIGNhbGxzIGludG8gYW4gRXhlY3V0YWJsZS4gSSdkIGxpa2UgdGhpcyBmb3IgRlRM
IE9TUgorICAgICAgICBlbnRyeS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggc29sdmVz
IHRoZXNlIHByb2JsZW1zIGJ5IHJlZHVjaW5nIGFsbCBvZiB0aGF0IGNvbXBsZXhpdHkgaW50byBq
dXN0CisgICAgICAgIHRocmVlIHByaW1pdGl2ZXM6CisgICAgICAgIAorICAgICAgICAtIEV4ZWN1
dGFibGU6Om5ld0NvZGVCbG9jaygpLiBUaGlzIGdpdmVzIHlvdSBhIG5ldyBjb2RlIGJsb2NrLCBl
aXRoZXIgZm9yIGNhbGwKKyAgICAgICAgICBvciBmb3IgY29uc3RydWN0LCBhbmQgZWl0aGVyIHRv
IHNlcnZlIGFzIHRoZSBiYXNlbGluZSBjb2RlIG9yIHRoZSBvcHRpbWl6ZWQKKyAgICAgICAgICBj
b2RlLiBUaGUgbmV3IGNvZGUgYmxvY2sgaXMgdGhlbiBvd25lZCBieSB0aGUgY2FsbGVyOyBFeGVj
dXRhYmxlIGRvZXNuJ3QKKyAgICAgICAgICByZWdpc3RlciBpdCBhbnl3aGVyZS4gVGhlIG5ldyBj
b2RlIGJsb2NrIGhhcyBubyBKSVRDb2RlIGFuZCBpc24ndCBjYWxsYWJsZSwKKyAgICAgICAgICBi
dXQgaXQgaGFzIGFsbCBvZiB0aGUgYnl0ZWNvZGUuCisgICAgICAgIAorICAgICAgICAtIENvZGVC
bG9jazo6cHJlcGFyZUZvckV4ZWN1dGlvbigpLiBUaGlzIHRha2VzIHRoZSBDb2RlQmxvY2sncyBi
eXRlY29kZSBhbmQKKyAgICAgICAgICBwcm9kdWNlcyBhIEpJVENvZGUsIGFuZCB0aGVuIGluc3Rh
bGxzIHRoZSBKSVRDb2RlIGludG8gdGhlIENvZGVCbG9jay4gVGhpcworICAgICAgICAgIG1ldGhv
ZCB0YWtlcyBhIEpJVFR5cGUsIGFuZCBhbHdheXMgY29tcGlsZXMgd2l0aCB0aGF0IEpJVC4gSWYg
eW91IGFzayBmb3IKKyAgICAgICAgICBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rIHRoZW4geW91
J2xsIGdldCBKSVRDb2RlIHRoYXQganVzdCBwb2ludHMgdG8gdGhlCisgICAgICAgICAgTExJbnQg
ZW50cnlwb2ludHMuIE9uY2UgdGhpcyByZXR1cm5zLCBpdCBpcyBwb3NzaWJsZSB0byBjYWxsIGlu
dG8gdGhlCisgICAgICAgICAgQ29kZUJsb2NrIGlmIHlvdSBkbyBzbyBtYW51YWxseSAtIGJ1dCB0
aGUgRXhlY3V0YWJsZSBzdGlsbCB3b24ndCBrbm93IGFib3V0CisgICAgICAgICAgaXQgc28gSlMg
Y2FsbHMgdG8gdGhhdCBFeGVjdXRhYmxlIHdpbGwgc3RpbGwgYmUgcm91dGVkIHRvIHdoYXRldmVy
IENvZGVCbG9jaworICAgICAgICAgIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgRXhlY3V0YWJsZS4K
KyAgICAgICAgCisgICAgICAgIC0gRXhlY3V0YWJsZTo6aW5zdGFsbENvZGUoKS4gVGhpcyB0YWtl
cyBhIENvZGVCbG9jayBhbmQgbWFrZXMgaXQgdGhlIGNvZGUtZm9yLQorICAgICAgICAgIGVudHJ5
IGZvciB0aGF0IEV4ZWN1dGFibGUuIFRoaXMgaW52b2x2ZXMgdW5saW5raW5nIHRoZSBFeGVjdXRh
YmxlJ3MgbGFzdAorICAgICAgICAgIENvZGVCbG9jaywgaWYgdGhlcmUgd2FzIG9uZS4gVGhpcyBh
bHNvIHRlbGxzIHRoZSBHQyBhYm91dCBhbnkgZWZmZWN0IG9uCisgICAgICAgICAgbWVtb3J5IHVz
YWdlIGFuZCBkb2VzIGEgYnVuY2ggb2Ygd2VpcmQgZGF0YSBzdHJ1Y3R1cmUgcmV3aXJpbmcsIHNp
bmNlCisgICAgICAgICAgRXhlY3V0YWJsZSBjYWNoZXMgc29tZSBvZiBDb2RlQmxvY2sncyBmaWVs
ZHMgZm9yIHRoZSBiZW5lZml0IG9mIHZpcnR1YWwgY2FsbAorICAgICAgICAgIGZhc3QgcGF0aHMu
CisgICAgICAgIAorICAgICAgICBUaGlzIGZ1bmN0aW9uYWxpdHkgaXMgdGhlbiB3cmFwcGVkIGFy
b3VuZCB0aHJlZSBjb252ZW5pZW5jZSBtZXRob2RzOgorICAgICAgICAKKyAgICAgICAgLSBFeGVj
dXRhYmxlOjpwcmVwYXJlRm9yRXhlY3V0aW9uKCkuIElmIHRoZXJlIGlzIG5vIGNvZGUgYmxvY2sg
Zm9yIHRoYXQKKyAgICAgICAgICBFeGVjdXRhYmxlLCB0aGVuIG9uZSBpcyBjcmVhdGVkIChuZXdD
b2RlQmxvY2soKSksIGNvbXBpbGVkCisgICAgICAgICAgKENvZGVCbG9jazo6cHJlcGFyZUZvckV4
ZWN1dGlvbigpKSBhbmQgaW5zdGFsbGVkIChpbnN0YWxsQ29kZSgpKS4KKyAgICAgICAgCisgICAg
ICAgIC0gQ29kZUJsb2NrOjpuZXdSZXBsYWNlbWVudCgpLiBBc2tzIHRoZSBFeGVjdXRhYmxlIGZv
ciBhIG5ldyBDb2RlQmxvY2sgdGhhdAorICAgICAgICAgIGNhbiBzZXJ2ZSBhcyBhbiBvcHRpbWl6
ZWQgcmVwbGFjZW1lbnQgb2YgdGhlIGN1cnJlbnQgb25lLgorICAgICAgICAKKyAgICAgICAgLSBD
b2RlQmxvY2s6Omluc3RhbGwoKS4gQXNrcyB0aGUgRXhlY3V0YWJsZSB0byBpbnN0YWxsIHRoaXMg
Y29kZSBibG9jay4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggYWxsb3dzIG1lIHRvIGtp
bGwgKmEgbG90KiBvZiBjb2RlIGFuZCB0byByZW1vdmUgYSBsb3Qgb2YKKyAgICAgICAgc3BlY2lh
bGl6YXRpb25zIGZvciBmdW5jdGlvbnMgdnMuIG5vdC1mdW5jdGlvbnMsIGFuZCBhIGxvdCBvZiBw
bGFjZXMgd2hlcmUgd2UKKyAgICAgICAgcGFzcyBhcm91bmQgSklUQ29kZSByZWZlcmVuY2VzIGFu
ZCBzdWNoLgorICAgICAgICAKKyAgICAgICAgSXQgYWxzbyBhbGxvd3MgbWUgdG8gd29yayBvbiBG
VEwgT1NSIGVudHJ5IGFuZCB0aWVyLXVwOgorICAgICAgICAKKyAgICAgICAgLSBGVEwgdGllci11
cDogdGhpcyB3aWxsIGludm9sdmUgREZHT3BlcmF0aW9ucy5jcHAgYXNraW5nIHRoZSBERkc6Oldv
cmtsaXN0CisgICAgICAgICAgdG8gZG8gc29tZSBjb21waWxhdGlvbiwgYnV0IGl0IHdpbGwgcmVx
dWlyZSB0aGUgREZHOjpXb3JrbGlzdCB0byBkbworICAgICAgICAgIHNvbWV0aGluZyBkaWZmZXJl
bnQgdGhhbiB3aGF0IEpJVFN0dWJzLmNwcCB3b3VsZCB3YW50LCBvbmNlIHRoZSBjb21waWxhdGlv
bgorICAgICAgICAgIGZpbmlzaGVzLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBjYWxsYmFjayBt
ZWNoYW5pc20gZm9yIHRoYXQgcHVycG9zZS4KKyAgICAgICAgCisgICAgICAgIC0gRlRMIE9TUiBl
bnRyeTogdGhpcyB3aWxsIGludm9sdmUgY3JlYXRpbmcgYSBzcGVjaWFsIGF1dG8tamV0dGlzb25l
ZAorICAgICAgICAgIENvZGVCbG9jayB0aGF0IGlzIHVzZWQgb25seSBmb3IgRlRMIE9TUiBlbnRy
eS4gVGhlIG5ldyBzZXQgb2YgcHJpbWl0aXZlcworICAgICAgICAgIGFsbG93cyBmb3IgdGhpczog
RXhlY3V0YWJsZSBjYW4gdmVuZCB5b3UgYSBmcmVzaCBuZXcgQ29kZUJsb2NrLCBhbmQgeW91IGNh
bgorICAgICAgICAgIGFzayB0aGF0IENvZGVCbG9jayB0byBjb21waWxlIGl0c2VsZiB3aXRoIGFu
eSBKSVQgb2YgeW91ciBjaG9vc2luZy4gT3IgeW91CisgICAgICAgICAgY2FuIHRha2UgdGhhdCBD
b2RlQmxvY2sgYW5kIGNvbXBpbGUgaXQgeW91cnNlbGYuIFByZXZpb3VzbHkgdGhlIGFjdCBvZgor
ICAgICAgICAgIHByb2R1Y2luZyBhIENvZGVCbG9jay1mb3Itb3B0aW1pemF0aW9uIGFuZCB0aGUg
YWN0IG9mIGNvbXBpbGluZyBjb2RlIGZvciBpdAorICAgICAgICAgIHdlcmUgdGlnaHRseSBjb3Vw
bGVkOyBub3cgeW91IGNhbiBzZXBhcmF0ZSB0aGVtIGFuZCB5b3UgY2FuIGNyZWF0ZSBzdWNoCisg
ICAgICAgICAgYXV0by1qZXR0aXNvbmVkIENvZGVCbG9ja3MgdGhhdCBhcmUgdXNlZCBmb3IgYSBv
bmUtc2hvdCBPU1IgZW50cnkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAg
KiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ov
SmF2YVNjcmlwdENvcmUudmN4cHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwcmVwYXJlRm9y
RXhlY3V0aW9uKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppbnN0YWxsKToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpuZXdSZXBsYWNlbWVudCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9u
Q29kZUJsb2NrOjpqZXR0aXNvbkltcGwpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNldE9w
dGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdCk6CisgICAgICAgICog
Ynl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aGFzQmFzZWxp
bmVKSVRQcm9maWxpbmcpOgorICAgICAgICAqIGJ5dGVjb2RlL0RlZmVycmVkQ29tcGlsYXRpb25D
YWxsYmFjay5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpEZWZlcnJlZENvbXBpbGF0aW9uQ2Fs
bGJhY2s6OkRlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjayk6CisgICAgICAgIChKU0M6OkRlZmVy
cmVkQ29tcGlsYXRpb25DYWxsYmFjazo6fkRlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjayk6Cisg
ICAgICAgICogYnl0ZWNvZGUvRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmg6IEFkZGVkLgor
ICAgICAgICAqIGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnRyeUNvbXBp
bGUpOgorICAgICAgICAqIGRmZy9ERkdEcml2ZXIuaDoKKyAgICAgICAgKEpTQzo6REZHOjp0cnlD
b21waWxlKToKKyAgICAgICAgKiBkZmcvREZHRmFpbGVkRmluYWxpemVyLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpGYWlsZWRGaW5hbGl6ZXI6OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6REZH
OjpGYWlsZWRGaW5hbGl6ZXI6OmZpbmFsaXplRnVuY3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdG
YWlsZWRGaW5hbGl6ZXIuaDoKKyAgICAgICAgKiBkZmcvREZHRmluYWxpemVyLmg6CisgICAgICAg
ICogZGZnL0RGR0pJVEZpbmFsaXplci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklURmluYWxp
emVyOjpmaW5hbGl6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6SklURmluYWxpemVyOjpmaW5hbGl6
ZUZ1bmN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHSklURmluYWxpemVyLmg6CisgICAgICAgICog
ZGZnL0RGR09TUkV4aXRQcmVwYXJhdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cHJlcGFy
ZUNvZGVPcmlnaW5Gb3JPU1JFeGl0KToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6
CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OlBs
YW4pOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OmNvbXBpbGVJblRocmVhZEltcGwpOgorICAg
ICAgICAoSlNDOjpERkc6OlBsYW46OmZpbmFsaXplV2l0aG91dE5vdGlmeWluZ0NhbGxiYWNrKToK
KyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpmaW5hbGl6ZUFuZE5vdGlmeUNhbGxiYWNrKToKKyAg
ICAgICAgKiBkZmcvREZHUGxhbi5oOgorICAgICAgICAqIGRmZy9ERkdXb3JrbGlzdC5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6V29ya2xpc3Q6OmNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKToK
KyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAgICAgKEpTQzo6SGVhcDo6aXNEZWZlcnJlZCk6
CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpJ
bnRlcnByZXRlcjo6ZXhlY3V0ZSk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRl
Q2FsbCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRlQ29uc3RydWN0KToKKyAg
ICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnByZXBhcmVGb3JSZXBlYXRDYWxsKToKKyAgICAgICAg
KiBqaXQvSklURHJpdmVyLmg6IFJlbW92ZWQuCisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoK
KyAgICAgICAgKEpTQzo6REVGSU5FX1NUVUJfRlVOQ1RJT04pOgorICAgICAgICAoSlNDOjpqaXRD
b21waWxlRm9yKToKKyAgICAgICAgKEpTQzo6bGF6eUxpbmtGb3IpOgorICAgICAgICAqIGppdC9K
SVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHA6IEFkZGVkLgorICAgICAgICAo
SlNDOjpKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6SklUVG9ERkdEZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2spOgorICAgICAgICAoSlNDOjpKSVRUb0RGR0RlZmVycmVkQ29t
cGlsYXRpb25DYWxsYmFjazo6fkpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrKToK
KyAgICAgICAgKEpTQzo6SklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNvbXBp
bGF0aW9uRGlkQ29tcGxldGUpOgorICAgICAgICAqIGppdC9KSVRUb0RGR0RlZmVycmVkQ29tcGls
YXRpb25DYWxsYmFjay5oOiBBZGRlZC4KKyAgICAgICAgKiBsbGludC9MTEludEVudHJ5cG9pbnRz
LmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OnNldEZ1bmN0aW9uRW50cnlwb2ludCk6CisgICAg
ICAgIChKU0M6OkxMSW50OjpzZXRFdmFsRW50cnlwb2ludCk6CisgICAgICAgIChKU0M6OkxMSW50
OjpzZXRQcm9ncmFtRW50cnlwb2ludCk6CisgICAgICAgICogbGxpbnQvTExJbnRFbnRyeXBvaW50
cy5oOgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6
TExJbnQ6OmppdENvbXBpbGVBbmRTZXRIZXVyaXN0aWNzKToKKyAgICAgICAgKEpTQzo6TExJbnQ6
OnNldFVwQ2FsbCk6CisgICAgICAgICogcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHA6CisgICAg
ICAgIChKU0M6OmlzTnVtZXJpY0NvbXBhcmVGdW5jdGlvbik6CisgICAgICAgICogcnVudGltZS9D
b21tb25TbG93UGF0aHMuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvQ29tcGlsYXRpb25SZXN1bHQu
Y3BwOgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBydW50aW1lL0Nv
bXBpbGF0aW9uUmVzdWx0Lmg6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmNwcDoKKyAg
ICAgICAgKEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6aW5zdGFsbENvZGUpOgorICAgICAgICAoSlND
OjpTY3JpcHRFeGVjdXRhYmxlOjpuZXdDb2RlQmxvY2tGb3IpOgorICAgICAgICAoSlNDOjpTY3Jp
cHRFeGVjdXRhYmxlOjpuZXdSZXBsYWNlbWVudENvZGVCbG9ja0Zvcik6CisgICAgICAgIChKU0M6
OlNjcmlwdEV4ZWN1dGFibGU6OnByZXBhcmVGb3JFeGVjdXRpb25JbXBsKToKKyAgICAgICAgKiBy
dW50aW1lL0V4ZWN1dGFibGUuaDoKKyAgICAgICAgKEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6cHJl
cGFyZUZvckV4ZWN1dGlvbik6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6amV0
dGlzb25PcHRpbWl6ZWRDb2RlRm9yKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGlvbkhhcm5l
c3MuaDogUmVtb3ZlZC4KKwogMjAxMy0wOC0yMyAgQW5keSBFc3RlcyAgPGFlc3Rlc0BhcHBsZS5j
b20+CiAKICAgICAgICAgRml4IGlzc3VlcyBmb3VuZCBieSB0aGUgQ2xhbmcgU3RhdGljIEFuYWx5
emVyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNTQ3
MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTUzLDYgKzUzLDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBieXRl
Y29kZS9Db2RlT3JpZ2luLmNwcAogICAgIGJ5dGVjb2RlL0NvZGVUeXBlLmNwcAogICAgIGJ5dGVj
b2RlL0RGR0V4aXRQcm9maWxlLmNwcAorICAgIGJ5dGVjb2RlL0RlZmVycmVkQ29tcGlsYXRpb25D
YWxsYmFjay5jcHAKICAgICBieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNwcAogICAgIGJ5dGVj
b2RlL0V4aXRLaW5kLmNwcAogICAgIGJ5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCkBAIC0yNDMs
NiArMjQ0LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBqaXQvSklUU3R1YlJv
dXRpbmUuY3BwCiAgICAgaml0L0pJVFN0dWJzLmNwcAogICAgIGppdC9KSVRUaHVua3MuY3BwCisg
ICAgaml0L0pJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcAogICAgIGppdC9K
dW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LmNwcAogICAgIGppdC9UaHVua0dlbmVyYXRvcnMuY3Bw
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZp
c2lvbiAxNTQ3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5h
bQkod29ya2luZyBjb3B5KQpAQCAtMTEzLDkgKzExMywxMSBAQCBqYXZhc2NyaXB0Y29yZV9zb3Vy
Y2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrV2l0aEpJ
VFR5cGUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uY3Bw
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oIFwKLQlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGF0YUZvcm1hdC5oIFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvREZHRXhpdFByb2ZpbGUuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvREZHRXhpdFByb2ZpbGUuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0RhdGFGb3JtYXQuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9EZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0V2YWxDb2RlQ2FjaGUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0V4ZWN1dGlvbkNvdW50ZXIuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvRXhlY3V0aW9uQ291bnRlci5oIFwKQEAgLTU2OSw2ICs1NzEsOCBAQCBqYXZh
c2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0
dWJzWDg2Q29tbW9uLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmNw
cCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuaCBcCisJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAg
XAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9u
Q2FsbGJhY2suaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXcml0ZUJhcnJpZXIu
aCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0p1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQuY3BwIFwKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCShyZXZpc2lvbiAxNTQ3MTgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkod29ya2luZyBjb3B5KQpAQCAtNjEsNiArNjEsNyBA
QCBTT1VSQ0VTICs9IFwKICAgICBieXRlY29kZS9Db2RlT3JpZ2luLmNwcCBcCiAgICAgYnl0ZWNv
ZGUvQ29kZVR5cGUuY3BwIFwKICAgICBieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5jcHAgXAorICAg
IGJ5dGVjb2RlL0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgXAogICAgIGJ5dGVjb2Rl
L0V4ZWN1dGlvbkNvdW50ZXIuY3BwIFwKICAgICBieXRlY29kZS9FeGl0S2luZC5jcHAgXAogICAg
IGJ5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwIFwKQEAgLTIyMSw2ICsyMjIsNyBAQCBTT1VSQ0VT
ICs9IFwKICAgICBqaXQvSklUU3R1YlJvdXRpbmUuY3BwIFwKICAgICBqaXQvSklUU3R1YnMuY3Bw
IFwKICAgICBqaXQvSklUVGh1bmtzLmNwcCBcCisgICAgaml0L0pJVFRvREZHRGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrLmNwcCBcCiAgICAgaml0L0p1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQu
Y3BwIFwKICAgICBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcCBcCiAgICAgbGxpbnQvTExJbnRDTG9v
cC5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2ovSmF2YVNjcmlwdENvcmUudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZp
c2lvbiAxNTQ3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4
cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMDIsNiArMzAy
LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENvZGVCbG9ja0hhc2gu
Y3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENvZGVPcmlnaW4u
Y3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENvZGVUeXBlLmNw
cCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxEZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2suY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVj
b2RlXEV4ZWN1dGlvbkNvdW50ZXIuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGJ5dGVjb2RlXEV4aXRLaW5kLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxi
eXRlY29kZVxHZXRCeUlkU3RhdHVzLmNwcCIgLz4NCkBAIC0zNzcsNiArMzc4LDcgQEAKICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxKSVRTdHViUm91dGluZS5jcHAiIC8+DQogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEpJVFN0dWJzLmNwcCIgLz4NCiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxqaXRcSklUVGh1bmtzLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxqaXRcSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwIiAvPg0K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50
LmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcVGh1bmtHZW5lcmF0b3Jz
LmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxsbGludFxMTEludENMb29wLmNw
cCIgLz4NCkBAIC02MjMsNiArNjI1LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5
dGVjb2RlXENvZGVUeXBlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNv
ZGVcQ29tbWVudC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXERh
dGFGb3JtYXQuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxEZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxieXRlY29kZVxFdmFsQ29kZUNhY2hlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cYnl0ZWNvZGVcRXhlY3V0aW9uQ291bnRlci5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGJ5dGVjb2RlXEV4aXRLaW5kLmgiIC8+DQpAQCAtNzUwLDYgKzc1Myw3IEBACiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcSklUU3R1YnNYODZDb21tb24uaCIgLz4NCiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcSklUU3R1YnNYODZfNjQuaCIgLz4NCiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcSklUVGh1bmtzLmgiIC8+DQorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5caml0XEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgiIC8+
DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEpJVFdyaXRlQmFycmllci5oIiAvPg0K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxKU0ludGVyZmFjZUpJVC5oIiAvPg0KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50Lmgi
IC8+DQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE1NDcxOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC04Niw4ICs4Niw2IEBACiAJCTBGMUUzQTQ2MTUz
NENCQUYwMDBGOTQ1NiAvKiBERkdBcmd1bWVudFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFFM0E0MzE1MzRDQkFEMDAwRjk0NTYgLyog
REZHQXJndW1lbnRQb3NpdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGMUUzQTQ3MTUzNENCQjkwMDBGOTQ1NiAvKiBERkdEb3VibGVGb3Jt
YXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYxRTNBNDQxNTM0Q0JBRDAwMEY5NDU2IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYxRTNBNjcxNTNB
MjFFMjAwMEY5NDU2IC8qIERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUUzQTY1MTUzQTIxREYwMDBGOTQ1
NiAvKiBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEYyMUMyNjgxNEJFNUY2ODAwQURDNjRCIC8qIEpJ
VERyaXZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyMUMyNjYxNEJFNUY1RTAwQURDNjRCIC8qIEpJVERyaXZlci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBGMjFDMjdDMTRCRTcyNzYwMEFEQzY0
QiAvKiBFeGVjdXRpb25IYXJuZXNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjIxQzI3QTE0QkU3MjczMDBBREM2NEIgLyogRXhlY3V0aW9uSGFybmVz
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
MjFDMjdEMTRCRTcyN0EwMEFEQzY0QiAvKiBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIxQzI3OTE0QkU3Mjcz
MDBBREM2NEIgLyogQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMjFDMjdGMTRCRUFBODIwMEFEQzY0QiAv
KiBCeXRlY29kZUNvbnZlbnRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjIxQzI3RTE0QkVBQTgwMDBBREM2NEIgLyogQnl0ZWNvZGVDb252ZW50
aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGMjM1QkQxMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExDQXJndW1lbnRHZXR0ZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMzVCQkIxNzE3OEUx
QzAwNjkwQzdGIC8qIEZUTENBcmd1bWVudEdldHRlci5jcHAgKi87IH07CkBAIC0zNDcsNiArMzQ1
LDEwIEBACiAJCTBGQzA5NzkyMTQ2QTZGNzMwMENGMjQ0MiAvKiBERkdPU1JFeGl0Q29tcGlsZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDMDk3
OEYxNDZBNkY2MzAwQ0YyNDQyIC8qIERGR09TUkV4aXRDb21waWxlci5jcHAgKi87IH07CiAJCTBG
QzA5N0ExMTQ2QjI4Q0EwMENGMjQ0MiAvKiBERkdUaHVua3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDMDk3OUYxNDZCMjhDNzAwQ0YyNDQyIC8q
IERGR1RodW5rcy5jcHAgKi87IH07CiAJCTBGQzA5N0EyMTQ2QjI4Q0MwMENGMjQ0MiAvKiBERkdU
aHVua3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
QzA5N0EwMTQ2QjI4QzcwMENGMjQ0MiAvKiBERkdUaHVua3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkM3MTJERTE3Q0Q4Nzc5MDA4Q0M5M0Mg
LyogRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzcxMkRDMTdDRDg3NzgwMDhDQzkzQyAvKiBEZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwICovOyB9OworCQkwRkM3MTJERjE3Q0Q4NzdDMDA4
Q0M5M0MgLyogRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM3MTJERDE3Q0Q4Nzc4MDA4Q0M5M0MgLyog
RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZDNzEyRTIxN0NEODc5MTAwOENDOTNDIC8qIEpJVFRv
REZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzcxMkUwMTdDRDg3OEYwMDhDQzkzQyAvKiBKSVRU
b0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgKi87IH07CisJCTBGQzcxMkUzMTdD
RDg3OTMwMDhDQzkzQyAvKiBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDNzEyRTExN0NE
ODc4RjAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZDODE1MEEx
NDA0M0JGNTAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzgxNTA5MTQwNDNCRDIwMENGQTYwMyAv
KiBXcml0ZUJhcnJpZXJTdXBwb3J0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEZDODE1MEIxNDA0M0MwRTAwQ0ZBNjAzIC8qIFdyaXRlQmFycmll
clN1cHBvcnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZDODE1MDgxNDA0M0JDQTAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQuY3BwICov
OyB9OwogCQkwRkM4MTUxNTE0MDUxMTlCMDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzgxNTE0MTQwNTEx
OEQwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMjQzLDkgKzEyNDUsNyBAQAogCQkwRjFFM0E0NDE1
MzRDQkFEMDAwRjk0NTYgLyogREZHRG91YmxlRm9ybWF0U3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHRG91YmxlRm9ybWF0U3RhdGUuaDsgcGF0aCA9IGRmZy9ERkdE
b3VibGVGb3JtYXRTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjFFM0E1
MDE1MzdDMkNCMDAwRjk0NTYgLyogREZHU2xvd1BhdGhHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHU2xvd1BhdGhHZW5lcmF0b3IuaDsgcGF0aCA9IGRmZy9E
RkdTbG93UGF0aEdlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjFF
M0E2NTE1M0EyMURGMDAwRjk0NTYgLyogREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmg7
IHBhdGggPSBkZmcvREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkwRjIxQzI2NjE0QkU1RjVFMDBBREM2NEIgLyogSklURHJpdmVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVERyaXZlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjIxQzI3OTE0QkU3MjczMDBBREM2NEIgLyogQ29kZVNwZWNpYWxp
emF0aW9uS2luZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlU3BlY2lh
bGl6YXRpb25LaW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGMjFDMjdBMTRC
RTcyNzMwMEFEQzY0QiAvKiBFeGVjdXRpb25IYXJuZXNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEV4ZWN1dGlvbkhhcm5lc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYyMUMyN0UxNEJFQUE4MDAwQURDNjRCIC8qIEJ5dGVjb2RlQ29udmVudGlvbnMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnl0ZWNvZGVDb252ZW50aW9ucy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjIzNUJCQjE3MTc4RTFDMDA2OTBDN0YgLyog
RlRMQ0FyZ3VtZW50R2V0dGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEZUTENBcmd1bWVudEdldHRlci5jcHA7IHBhdGggPSBmdGwvRlRMQ0FyZ3VtZW50R2V0dGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyMzVCQkMxNzE3OEUxQzAwNjkw
QzdGIC8qIEZUTENBcmd1bWVudEdldHRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBGVExDQXJndW1lbnRHZXR0ZXIuaDsgcGF0aCA9IGZ0bC9GVExDQXJndW1lbnRHZXR0ZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1MTQsNiArMTUxNCwxMCBAQAogCQkw
RkMwOTc4RjE0NkE2RjYzMDBDRjI0NDIgLyogREZHT1NSRXhpdENvbXBpbGVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR09TUkV4aXRDb21waWxlci5jcHA7IHBh
dGggPSBkZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZDMDk3OUYxNDZCMjhDNzAwQ0YyNDQyIC8qIERGR1RodW5rcy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdUaHVua3MuY3BwOyBwYXRoID0gZGZnL0RG
R1RodW5rcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzA5N0EwMTQ2QjI4
QzcwMENGMjQ0MiAvKiBERkdUaHVua3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHVGh1bmtzLmg7IHBhdGggPSBkZmcvREZHVGh1bmtzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGQzcxMkRDMTdDRDg3NzgwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0
aW9uQ2FsbGJhY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVmZXJyZWRDb21waWxhdGlvbkNh
bGxiYWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZDNzEyREQxN0NEODc3
ODAwOENDOTNDIC8qIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZDNzEyRTAxN0NEODc4RjAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxh
dGlvbkNhbGxiYWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVFRvREZHRGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZDNzEy
RTExN0NEODc4RjAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzgxNTA4MTQwNDNCQ0EwMENGQTYwMyAv
KiBXcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFdyaXRlQmFycmllclN1cHBvcnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRkM4MTUwOTE0MDQzQkQyMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXcml0ZUJhcnJpZXJTdXBwb3J0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzgxNTEyMTQwNTExODYwMENGQTYwMyAvKiBW
VGFibGVTcGVjdHJ1bS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBW
VGFibGVTcGVjdHJ1bS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNjM2LDcg
KzI2NDAsNiBAQAogCQkJCTBGMDc3NkJEMTRGRjAwMjgwMDEwMjMzMiAvKiBKSVRDb21waWxhdGlv
bkVmZm9ydC5oICovLAogCQkJCTBGQUY3RUZBMTY1QkE5MTkwMDBDODQ1NSAvKiBKSVREaXNhc3Nl
bWJsZXIuY3BwICovLAogCQkJCTBGQUY3RUZCMTY1QkE5MTkwMDBDODQ1NSAvKiBKSVREaXNhc3Nl
bWJsZXIuaCAqLywKLQkJCQkwRjIxQzI2NjE0QkU1RjVFMDBBREM2NEIgLyogSklURHJpdmVyLmgg
Ki8sCiAJCQkJMEY0NjgwN0YxNEJBNTcyNzAwQkZFMjcyIC8qIEpJVEV4Y2VwdGlvbnMuY3BwICov
LAogCQkJCTBGNDY4MDgwMTRCQTU3MjcwMEJGRTI3MiAvKiBKSVRFeGNlcHRpb25zLmggKi8sCiAJ
CQkJODZDQzg1QTAwRUU3OUE0NzAwMjg4NjgyIC8qIEpJVElubGluZXMuaCAqLywKQEAgLTI2NTgs
NiArMjY2MSw4IEBACiAJCQkJQTdBNEFFMEMxNzk3M0I0RDAwNTYxMkIxIC8qIEpJVFN0dWJzWDg2
Q29tbW9uLmggKi8sCiAJCQkJMEY1RUY5MUIxNjg3OEY3ODAwM0U1QzI1IC8qIEpJVFRodW5rcy5j
cHAgKi8sCiAJCQkJMEY1RUY5MUMxNjg3OEY3ODAwM0U1QzI1IC8qIEpJVFRodW5rcy5oICovLAor
CQkJCTBGQzcxMkUwMTdDRDg3OEYwMDhDQzkzQyAvKiBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFjay5jcHAgKi8sCisJCQkJMEZDNzEyRTExN0NEODc4RjAwOENDOTNDIC8qIEpJVFRv
REZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggKi8sCiAJCQkJQTc2RjU0QTIxM0IyOEFB
QjAwRUYyQkNFIC8qIEpJVFdyaXRlQmFycmllci5oICovLAogCQkJCUE3NkM1MTc0MTE4Mjc0OEQw
MDcxNUIwNSAvKiBKU0ludGVyZmFjZUpJVC5oICovLAogCQkJCTBGNzY2RDMyMTVBRTI1MzUwMDhG
MzYzRSAvKiBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LmNwcCAqLywKQEAgLTMwNDAsNyArMzA0
NSw2IEBACiAJCQkJQTcyNzAxQjMwREFERTk0OTAwRTU0OEQ3IC8qIEV4Y2VwdGlvbkhlbHBlcnMu
aCAqLywKIAkJCQk4NkNBMDMyRDEwMzhFODQ0MDAyOEE2MDkgLyogRXhlY3V0YWJsZS5jcHAgKi8s
CiAJCQkJODZDQUZFRTIxMDM1RERFNjAwMjhBNjA5IC8qIEV4ZWN1dGFibGUuaCAqLywKLQkJCQkw
RjIxQzI3QTE0QkU3MjczMDBBREM2NEIgLyogRXhlY3V0aW9uSGFybmVzcy5oICovLAogCQkJCUE3
QThBRjI5MTdBREI1RjMwMDVBQjE3NCAvKiBGbG9hdDMyQXJyYXkuaCAqLywKIAkJCQlBN0E4QUYy
QTE3QURCNUYzMDA1QUIxNzQgLyogRmxvYXQ2NEFycmF5LmggKi8sCiAJCQkJQkMyNjgwQzAwRTE2
RDRFOTAwQTA2RTkyIC8qIEZ1bmN0aW9uQ29uc3RydWN0b3IuY3BwICovLApAQCAtMzY0OCw2ICsz
NjUyLDggQEAKIAkJCQkwRjhGOTQzRjE2Njc2MzJEMDBENjE5NzEgLyogQ29kZVR5cGUuY3BwICov
LAogCQkJCTBGMEI4M0E1MTRCQ0Y1MDQwMDg4NUI0RiAvKiBDb2RlVHlwZS5oICovLAogCQkJCTBG
NDI2QTRBMTQ2MENENkIwMDEzMUY4RiAvKiBEYXRhRm9ybWF0LmggKi8sCisJCQkJMEZDNzEyREMx
N0NEODc3ODAwOENDOTNDIC8qIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgKi8sCisJ
CQkJMEZDNzEyREQxN0NEODc3ODAwOENDOTNDIC8qIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFj
ay5oICovLAogCQkJCTBGQkMwQUU0MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5j
cHAgKi8sCiAJCQkJMEZCQzBBRTUxNDk2QzdDMTAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmgg
Ki8sCiAJCQkJOTY5QTA3OTIwRUQxRDNBRTAwRjFGNjgxIC8qIEV2YWxDb2RlQ2FjaGUuaCAqLywK
QEAgLTM3OTYsNiArMzgwMiw3IEBACiAJCQkJNURFNkU1QjMwRTE3MjhFQzAwMTgwNDA3IC8qIGNy
ZWF0ZV9oYXNoX3RhYmxlIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0MjZBNEIxNDYwQ0Q2RTAwMTMx
RjhGIC8qIERhdGFGb3JtYXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkRGMTdCNkI1QUIw
MEE3QUUzRiAvKiBEYXRhVmlldy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZDNzEyREYxN0NEODc3
QzAwOENDOTNDIC8qIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkNEMjAzNEEwRTE3MTM1RTAwMkM3RTgyIC8qIERhdGVDb25zdHJ1Y3Rvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNDEzNTlDRjMwRkREODlBRDAwMjA2MTgwIC8qIERhdGVDb252ZXJzaW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzExNjYwMjBFMTk5N0I0MDA4MDY2REQgLyogRGF0ZUlu
c3RhbmNlLmggaW4gSGVhZGVycyAqLywKQEAgLTM5MzcsNyArMzk0NCw2IEBACiAJCQkJODZDQUZF
RTMxMDM1RERFNjAwMjhBNjA5IC8qIEV4ZWN1dGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
NjZCNDRGMEVFOERDRDEwMDk1MThDQSAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjU2QTFEMzE1MDAwRjM1MDAyOTkyQjEgLyogRXhlY3V0aW9uQ291bnRlci5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJMEYyMUMyN0MxNEJFNzI3NjAwQURDNjRCIC8qIEV4ZWN1dGlv
bkhhcm5lc3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjEwNTg2MTY3NTQ4MTIwMEY4QUI2RSAv
KiBFeGl0S2luZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwQjgzQUIxNEJDRjVCQjAwODg1QjRG
IC8qIEV4cHJlc3Npb25SYW5nZUluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QThBRjM4MTdB
REI1RjMwMDVBQjE3NCAvKiBGbG9hdDMyQXJyYXkuaCBpbiBIZWFkZXJzICovLApAQCAtNDAyNiw3
ICs0MDMyLDYgQEAKIAkJCQk4NkNDRUZERTBGNDEzRjg5MDBGRDdGOUUgLyogSklUQ29kZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYwNzc2QkYxNEZGMDAyQjAwMTAyMzMyIC8qIEpJVENvbXBpbGF0
aW9uRWZmb3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkFGN0VGRTE2NUJBOTFGMDAwQzg0NTUg
LyogSklURGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjIxQzI2ODE0QkU1RjY4
MDBBREM2NEIgLyogSklURHJpdmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ2ODA4MjE0QkE1
NzJEMDBCRkUyNzIgLyogSklURXhjZXB0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZDQzg1
QTEwRUU3OUE0NzAwMjg4NjgyIC8qIEpJVElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2
MDYyNjk2MEZCOEVDMDIwMDk3OThBQiAvKiBKSVRTdHViQ2FsbC5oIGluIEhlYWRlcnMgKi8sCkBA
IC00MDk2LDYgKzQxMDEsNyBAQAogCQkJCUJDMThDNDI0MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU09i
amVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MjUwRTE2RjVDRDAwQjM0NDYwIC8qIEpT
T2JqZWN0UmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzI4MEEyODExNTU3RTMwMDBENTY5NTcg
LyogSlNPYmplY3RSZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkM3MTJFMzE3Q0Q4
NzkzMDA4Q0M5M0MgLyogSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3Rjk5MzVGMEZENzMyNTEwMEEwQjJEMCAvKiBKU09OT2JqZWN0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzg3Q0RCOTEwNzEyQUQ0MDAwNjE0Q0YgLyogSlNPTk9iamVj
dC5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk1MzRBQUZCMEU1QjdBOTYwMEI4QTQ1QiAvKiBK
U1Byb2ZpbGVyUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC01MDA5LDYgKzUwMTUsNyBAQAog
CQkJCTBGRTIyOEVFMTQzNkFCMkMwMDE5NkM0OCAvKiBPcHRpb25zLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTE0OEYyMUJDMTA3RUM1NEQwMDQyRUMyQyAvKiBQYXJzZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJOTMwNTJDMzQwRkI3OTIxOTAwNDhGREMzIC8qIFBhcnNlckFyZW5hLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGQzcxMkUyMTdDRDg3OTEwMDhDQzkzQyAvKiBKSVRUb0RGR0RlZmVy
cmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjlGQzhDMzE0
RTFCNUZFMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjk4MjA2MDE2QkZFMzgxMDAyNDBEMDIgLyogUHJlY2lzZUp1bXBUYXJnZXRzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTk1NzQyRjY1MEREMTFGNUEwMDA5MTdGQiAvKiBQcm9maWxl
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNTA4Nyw2ICs1MDk0LDcgQEAKIAkJCQkxNEU4NEY5RTE0
RUUxQUNDMDBENkQ1RDQgLyogV2Vha0Jsb2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0Rjcy
NTY1MTRFRTI2NUUwMEIxNjUyQiAvKiBXZWFrSGFuZGxlT3duZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMTRFODRGQTAxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtTZXQuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEZDNzEyREUxN0NEODc3OTAwOENDOTNDIC8qIERlZmVycmVkQ29tcGlsYXRpb25D
YWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjZFNUMxOTE3MjRBRjNEMDA1QzU3NEYg
LyogV2ViS2l0TExWTUxpYnJhcnlBbmNob3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDODE1
MEIxNDA0M0MwRTAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTdFNUFCM0ExNzk5RTRCMjAwRDI4MzNEIC8qIFg4NkRpc2Fzc2VtYmxlci5jcHAg
aW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suY3BwCShyZXZpc2lvbiAxNTQ3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAog
I2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCiAjaW5jbHVkZSAiREZHQ2FwYWJpbGl0aWVzLmgi
CiAjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisjaW5jbHVkZSAiREZHRHJpdmVyLmgiCiAjaW5jbHVk
ZSAiREZHTm9kZS5oIgogI2luY2x1ZGUgIkRGR1JlcGF0Y2guaCIKICNpbmNsdWRlICJERkdXb3Jr
bGlzdC5oIgpAQCAtNDUsNiArNDYsNyBAQAogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNs
dWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNOYW1lU2NvcGUuaCIKKyNpbmNsdWRlICJM
TEludEVudHJ5cG9pbnRzLmgiCiAjaW5jbHVkZSAiTG93TGV2ZWxJbnRlcnByZXRlci5oIgogI2lu
Y2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Lmgi
CkBAIC0yNjg5LDYgKzI2OTEsNjAgQEAgdm9pZCBDb2RlQmxvY2s6OmNvcHlQb3N0UGFyc2VEYXRh
RnJvbUFsdAogICAgIGNvcHlQb3N0UGFyc2VEYXRhRnJvbShtX2FsdGVybmF0aXZlLmdldCgpKTsK
IH0KIAorQ29tcGlsYXRpb25SZXN1bHQgQ29kZUJsb2NrOjpwcmVwYXJlRm9yRXhlY3V0aW9uKAor
ICAgIEV4ZWNTdGF0ZSogZXhlYywgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlLCBKSVRDb21waWxh
dGlvbkVmZm9ydCBlZmZvcnQsCisgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgUGFzc1JlZlB0
cjxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+IGNhbGxiYWNrKQoreworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgCisgICAgaWYgKGppdFR5cGUgPT0gSklUQ29kZTo6SW50ZXJwcmV0
ZXJUaHVuaykgeworICAgICAgICBzd2l0Y2ggKGNvZGVUeXBlKCkpIHsKKyAgICAgICAgY2FzZSBH
bG9iYWxDb2RlOgorICAgICAgICAgICAgTExJbnQ6OnNldFByb2dyYW1FbnRyeXBvaW50KHZtLCBz
dGF0aWNfY2FzdDxQcm9ncmFtQ29kZUJsb2NrKj4odGhpcykpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgRXZhbENvZGU6CisgICAgICAgICAgICBMTEludDo6c2V0RXZhbEVudHJ5
cG9pbnQodm0sIHN0YXRpY19jYXN0PEV2YWxDb2RlQmxvY2sqPih0aGlzKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBGdW5jdGlvbkNvZGU6CisgICAgICAgICAgICBMTEludDo6
c2V0RnVuY3Rpb25FbnRyeXBvaW50KHZtLCBzdGF0aWNfY2FzdDxGdW5jdGlvbkNvZGVCbG9jayo+
KHRoaXMpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJldHVybiBD
b21waWxhdGlvblN1Y2Nlc3NmdWw7CisgICAgfQorICAgIAorI2lmIEVOQUJMRShKSVQpCisgICAg
aWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKSkgeworICAgICAgICBBU1NFUlQo
ZWZmb3J0ID09IEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgICAgIGJvb2wgaGFkQ2FsbGJh
Y2sgPSAhIWNhbGxiYWNrOworICAgICAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBERkc6
OnRyeUNvbXBpbGUoZXhlYywgdGhpcywgYnl0ZWNvZGVJbmRleCwgY2FsbGJhY2spOworICAgICAg
ICBBU1NFUlRfVU5VU0VEKGhhZENhbGxiYWNrLCByZXN1bHQgIT0gQ29tcGlsYXRpb25EZWZlcnJl
ZCB8fCBoYWRDYWxsYmFjayk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAor
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBqaXRDb2RlV2l0aEFyaXR5Q2hlY2s7CisgICAgUmVm
UHRyPEpJVENvZGU+IGppdENvZGUgPSBKSVQ6OmNvbXBpbGUoJnZtLCB0aGlzLCBlZmZvcnQsICZq
aXRDb2RlV2l0aEFyaXR5Q2hlY2spOworICAgIGlmICghaml0Q29kZSkKKyAgICAgICAgcmV0dXJu
IENvbXBpbGF0aW9uRmFpbGVkOworICAgIHNldEpJVENvZGUoaml0Q29kZSwgaml0Q29kZVdpdGhB
cml0eUNoZWNrKTsKKyAgICByZXR1cm4gQ29tcGlsYXRpb25TdWNjZXNzZnVsOworI2Vsc2UKKyAg
ICBVTlVTRURfUEFSQU0oZWZmb3J0KTsKKyAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVJbmRleCk7
CisgICAgVU5VU0VEX1BBUkFNKGNhbGxiYWNrKTsKKyAgICByZXR1cm4gQ29tcGlsYXRpb25GYWls
ZWQ7CisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKK30KKwordm9pZCBDb2RlQmxvY2s6Omluc3RhbGwo
KQoreworICAgIG93bmVyRXhlY3V0YWJsZSgpLT5pbnN0YWxsQ29kZSh0aGlzKTsKK30KKworUGFz
c1JlZlB0cjxDb2RlQmxvY2s+IENvZGVCbG9jazo6bmV3UmVwbGFjZW1lbnQoKQoreworICAgIHJl
dHVybiBvd25lckV4ZWN1dGFibGUoKS0+bmV3UmVwbGFjZW1lbnRDb2RlQmxvY2tGb3Ioc3BlY2lh
bGl6YXRpb25LaW5kKCkpOworfQorCiAjaWYgRU5BQkxFKEpJVCkKIHZvaWQgQ29kZUJsb2NrOjpy
ZW9wdGltaXplKCkKIHsKQEAgLTI3MTUsNTMgKzI3NzEsNiBAQCBDb2RlQmxvY2sqIEZ1bmN0aW9u
Q29kZUJsb2NrOjpyZXBsYWNlbWVuCiAgICAgcmV0dXJuICZzdGF0aWNfY2FzdDxGdW5jdGlvbkV4
ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmdlbmVyYXRlZEJ5dGVjb2RlRm9yKG1faXND
b25zdHJ1Y3RvciA/IENvZGVGb3JDb25zdHJ1Y3QgOiBDb2RlRm9yQ2FsbCk7CiB9CiAKLSNpZiBF
TkFCTEUoREZHX0pJVCkKLUpTT2JqZWN0KiBQcm9ncmFtQ29kZUJsb2NrOjpjb21waWxlT3B0aW1p
emVkKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUsIENvbXBpbGF0aW9uUmVzdWx0JiBy
ZXN1bHQsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAgaWYgKEpJVENvZGU6OmlzSGln
aGVyVGllcihyZXBsYWNlbWVudCgpLT5qaXRUeXBlKCksIGppdFR5cGUoKSkpIHsKLSAgICAgICAg
cmVzdWx0ID0gQ29tcGlsYXRpb25Ob3ROZWVkZWQ7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0K
LSAgICBKU09iamVjdCogZXJyb3IgPSBzdGF0aWNfY2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KG93
bmVyRXhlY3V0YWJsZSgpKS0+Y29tcGlsZU9wdGltaXplZChleGVjLCBzY29wZSwgcmVzdWx0LCBi
eXRlY29kZUluZGV4KTsKLSAgICByZXR1cm4gZXJyb3I7Ci19Ci0KLUNvbXBpbGF0aW9uUmVzdWx0
IFByb2dyYW1Db2RlQmxvY2s6OnJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlKFBhc3NS
ZWZQdHI8REZHOjpQbGFuPiBwbGFuKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxQcm9ncmFt
RXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+cmVwbGFjZVdpdGhEZWZlcnJlZE9wdGlt
aXplZENvZGUocGxhbik7Ci19Ci0KLUpTT2JqZWN0KiBFdmFsQ29kZUJsb2NrOjpjb21waWxlT3B0
aW1pemVkKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUsIENvbXBpbGF0aW9uUmVzdWx0
JiByZXN1bHQsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAgaWYgKEpJVENvZGU6Omlz
SGlnaGVyVGllcihyZXBsYWNlbWVudCgpLT5qaXRUeXBlKCksIGppdFR5cGUoKSkpIHsKLSAgICAg
ICAgcmVzdWx0ID0gQ29tcGlsYXRpb25Ob3ROZWVkZWQ7Ci0gICAgICAgIHJldHVybiAwOwotICAg
IH0KLSAgICBKU09iamVjdCogZXJyb3IgPSBzdGF0aWNfY2FzdDxFdmFsRXhlY3V0YWJsZSo+KG93
bmVyRXhlY3V0YWJsZSgpKS0+Y29tcGlsZU9wdGltaXplZChleGVjLCBzY29wZSwgcmVzdWx0LCBi
eXRlY29kZUluZGV4KTsKLSAgICByZXR1cm4gZXJyb3I7Ci19Ci0KLUNvbXBpbGF0aW9uUmVzdWx0
IEV2YWxDb2RlQmxvY2s6OnJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlKFBhc3NSZWZQ
dHI8REZHOjpQbGFuPiBwbGFuKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxFdmFsRXhlY3V0
YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+cmVwbGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENv
ZGUocGxhbik7Ci19Ci0KLUpTT2JqZWN0KiBGdW5jdGlvbkNvZGVCbG9jazo6Y29tcGlsZU9wdGlt
aXplZChFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCBDb21waWxhdGlvblJlc3VsdCYg
cmVzdWx0LCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQotewotICAgIGlmIChKSVRDb2RlOjppc0hp
Z2hlclRpZXIocmVwbGFjZW1lbnQoKS0+aml0VHlwZSgpLCBqaXRUeXBlKCkpKSB7Ci0gICAgICAg
IHJlc3VsdCA9IENvbXBpbGF0aW9uTm90TmVlZGVkOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9
Ci0gICAgSlNPYmplY3QqIGVycm9yID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4o
b3duZXJFeGVjdXRhYmxlKCkpLT5jb21waWxlT3B0aW1pemVkRm9yKGV4ZWMsIHNjb3BlLCByZXN1
bHQsIGJ5dGVjb2RlSW5kZXgsIG1faXNDb25zdHJ1Y3RvciA/IENvZGVGb3JDb25zdHJ1Y3QgOiBD
b2RlRm9yQ2FsbCk7Ci0gICAgcmV0dXJuIGVycm9yOwotfQotCi1Db21waWxhdGlvblJlc3VsdCBG
dW5jdGlvbkNvZGVCbG9jazo6cmVwbGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGUoUGFzc1Jl
ZlB0cjxERkc6OlBsYW4+IHBsYW4pCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEZ1bmN0aW9u
RXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+cmVwbGFjZVdpdGhEZWZlcnJlZE9wdGlt
aXplZENvZGVGb3IocGxhbiwgbV9pc0NvbnN0cnVjdG9yID8gQ29kZUZvckNvbnN0cnVjdCA6IENv
ZGVGb3JDYWxsKTsKLX0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLQogREZHOjpDYXBhYmls
aXR5TGV2ZWwgUHJvZ3JhbUNvZGVCbG9jazo6Y2FwYWJpbGl0eUxldmVsSW50ZXJuYWwoKQogewog
ICAgIHJldHVybiBERkc6OnByb2dyYW1DYXBhYmlsaXR5TGV2ZWwodGhpcyk7CkBAIC0yODA0LDI3
ICsyODEzLDYgQEAgdm9pZCBGdW5jdGlvbkNvZGVCbG9jazo6amV0dGlzb25JbXBsKCkKIHsKICAg
ICBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmpl
dHRpc29uT3B0aW1pemVkQ29kZUZvcigqdm0oKSwgbV9pc0NvbnN0cnVjdG9yID8gQ29kZUZvckNv
bnN0cnVjdCA6IENvZGVGb3JDYWxsKTsKIH0KLQotQ29tcGlsYXRpb25SZXN1bHQgUHJvZ3JhbUNv
ZGVCbG9jazo6aml0Q29tcGlsZUltcGwoRXhlY1N0YXRlKiBleGVjKQotewotICAgIEFTU0VSVChq
aXRUeXBlKCkgPT0gSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuayk7Ci0gICAgQVNTRVJUKHRoaXMg
PT0gcmVwbGFjZW1lbnQoKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFByb2dyYW1FeGVjdXRh
YmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5qaXRDb21waWxlKGV4ZWMpOwotfQotCi1Db21waWxh
dGlvblJlc3VsdCBFdmFsQ29kZUJsb2NrOjpqaXRDb21waWxlSW1wbChFeGVjU3RhdGUqIGV4ZWMp
Ci17Ci0gICAgQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKTsK
LSAgICBBU1NFUlQodGhpcyA9PSByZXBsYWNlbWVudCgpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8RXZhbEV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmppdENvbXBpbGUoZXhlYyk7
Ci19Ci0KLUNvbXBpbGF0aW9uUmVzdWx0IEZ1bmN0aW9uQ29kZUJsb2NrOjpqaXRDb21waWxlSW1w
bChFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRDb2RlOjpJ
bnRlcnByZXRlclRodW5rKTsKLSAgICBBU1NFUlQodGhpcyA9PSByZXBsYWNlbWVudCgpKTsKLSAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxl
KCkpLT5qaXRDb21waWxlRm9yKGV4ZWMsIG1faXNDb25zdHJ1Y3RvciA/IENvZGVGb3JDb25zdHJ1
Y3QgOiBDb2RlRm9yQ2FsbCk7Ci19CiAjZW5kaWYKIAogSlNHbG9iYWxPYmplY3QqIENvZGVCbG9j
azo6Z2xvYmFsT2JqZWN0Rm9yKENvZGVPcmlnaW4gY29kZU9yaWdpbikKQEAgLTMxMDYsMTAgKzMw
OTQsOCBAQCB2b2lkIENvZGVCbG9jazo6Zm9yY2VPcHRpbWl6YXRpb25TbG93UGF0CiB2b2lkIENv
ZGVCbG9jazo6c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0
KENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChqaXRUeXBl
KCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOwotICAgIFJFTEVBU0VfQVNTRVJUKChyZXN1bHQg
PT0gQ29tcGlsYXRpb25TdWNjZXNzZnVsKSA9PSAocmVwbGFjZW1lbnQoKSAhPSB0aGlzKSk7CiAg
ICAgc3dpdGNoIChyZXN1bHQpIHsKICAgICBjYXNlIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDoKLSAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKHJlcGxhY2VtZW50
KCktPmppdFR5cGUoKSkpOwogICAgICAgICBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgQ29tcGlsYXRpb25GYWlsZWQ6CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxNTQ3MTgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJERkdPU1JFbnRyeS5oIgogI2luY2x1ZGUgIkRG
R09TUkV4aXQuaCIKICNpbmNsdWRlICJERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmgiCisjaW5jbHVk
ZSAiRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiRXZhbENvZGVDYWNo
ZS5oIgogI2luY2x1ZGUgIkV4ZWN1dGlvbkNvdW50ZXIuaCIKICNpbmNsdWRlICJFeHByZXNzaW9u
UmFuZ2VJbmZvLmgiCkBAIC0yOTAsMTkgKzI5MSwxOSBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICByZXR1cm4gaml0VHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUOwogICAgIH0KLSNpZiBF
TkFCTEUoREZHX0pJVCkKLSAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4
ZWNTdGF0ZSosIEpTU2NvcGUqLCBDb21waWxhdGlvblJlc3VsdCYsIHVuc2lnbmVkIGJ5dGVjb2Rl
SW5kZXgpID0gMDsKLSAgICB2aXJ0dWFsIENvbXBpbGF0aW9uUmVzdWx0IHJlcGxhY2VXaXRoRGVm
ZXJyZWRPcHRpbWl6ZWRDb2RlKFBhc3NSZWZQdHI8REZHOjpQbGFuPikgPSAwOwotI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQogICAgIHZvaWQgamV0dGlzb24oKTsKLSAgICBDb21waWxhdGlvblJl
c3VsdCBqaXRDb21waWxlKEV4ZWNTdGF0ZSogZXhlYykKLSAgICB7Ci0gICAgICAgIGlmIChqaXRU
eXBlKCkgIT0gSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykgewotICAgICAgICAgICAgQVNTRVJU
KGppdFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7Ci0gICAgICAgICAgICByZXR1cm4g
Q29tcGlsYXRpb25Ob3ROZWVkZWQ7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGppdENvbXBp
bGVJbXBsKGV4ZWMpOwotICAgIH0KKyAgICBDb21waWxhdGlvblJlc3VsdCBwcmVwYXJlRm9yRXhl
Y3V0aW9uKAorICAgICAgICBFeGVjU3RhdGUqLCBKSVRDb2RlOjpKSVRUeXBlLAorICAgICAgICBK
SVRDb21waWxhdGlvbkVmZm9ydCA9IEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQsCisgICAgICAg
IHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBVSU5UX01BWCwKKyAgICAgICAgUGFzc1JlZlB0cjxE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+ID0gMCk7CisgICAgCisgICAgLy8gRXhhY3RseSBl
cXVpdmFsZW50IHRvIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmluc3RhbGxDb2RlKGNv
ZGVCbG9jayk7CisgICAgdm9pZCBpbnN0YWxsKCk7CisgICAgCisgICAgLy8gRXhhY3RseSBlcXVp
dmFsZW50IHRvIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPm5ld1JlcGxhY2VtZW50Q29k
ZUJsb2NrRm9yKGNvZGVCbG9jay0+c3BlY2lhbGl6YXRpb25LaW5kKCkpCisgICAgUGFzc1JlZlB0
cjxDb2RlQmxvY2s+IG5ld1JlcGxhY2VtZW50KCk7CisgICAgCiAgICAgdmlydHVhbCBDb2RlQmxv
Y2sqIHJlcGxhY2VtZW50KCkgPSAwOwogCiAgICAgdmlydHVhbCBERkc6OkNhcGFiaWxpdHlMZXZl
bCBjYXBhYmlsaXR5TGV2ZWxJbnRlcm5hbCgpID0gMDsKQEAgLTk2OSw3ICs5NzAsNiBAQCBwdWJs
aWM6CiAgICAgCiBwcm90ZWN0ZWQ6CiAjaWYgRU5BQkxFKEpJVCkKLSAgICB2aXJ0dWFsIENvbXBp
bGF0aW9uUmVzdWx0IGppdENvbXBpbGVJbXBsKEV4ZWNTdGF0ZSopID0gMDsKICAgICB2aXJ0dWFs
IHZvaWQgamV0dGlzb25JbXBsKCkgPSAwOwogI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIHZpc2l0
V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImKTsKQEAgLTExOTQsMTMgKzExOTQsNyBAQCBwdWJs
aWM6CiAKICNpZiBFTkFCTEUoSklUKQogcHJvdGVjdGVkOgotI2lmIEVOQUJMRShERkdfSklUKQot
ICAgIHZpcnR1YWwgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgSlNTY29w
ZSosIENvbXBpbGF0aW9uUmVzdWx0JiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7Ci0gICAgdmly
dHVhbCBDb21waWxhdGlvblJlc3VsdCByZXBsYWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZShQ
YXNzUmVmUHRyPERGRzo6UGxhbj4pOwotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotCiAgICAg
dmlydHVhbCB2b2lkIGpldHRpc29uSW1wbCgpOwotICAgIHZpcnR1YWwgQ29tcGlsYXRpb25SZXN1
bHQgaml0Q29tcGlsZUltcGwoRXhlY1N0YXRlKik7CiAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJl
cGxhY2VtZW50KCk7CiAgICAgdmlydHVhbCBERkc6OkNhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5
TGV2ZWxJbnRlcm5hbCgpOwogI2VuZGlmCkBAIC0xMjIzLDEzICsxMjE3LDcgQEAgcHVibGljOgog
ICAgIAogI2lmIEVOQUJMRShKSVQpCiBwcm90ZWN0ZWQ6Ci0jaWYgRU5BQkxFKERGR19KSVQpCi0g
ICAgdmlydHVhbCBKU09iamVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBKU1Njb3Bl
KiwgQ29tcGlsYXRpb25SZXN1bHQmLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKLSAgICB2aXJ0
dWFsIENvbXBpbGF0aW9uUmVzdWx0IHJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlKFBh
c3NSZWZQdHI8REZHOjpQbGFuPik7Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0KICAgICB2
aXJ0dWFsIHZvaWQgamV0dGlzb25JbXBsKCk7Ci0gICAgdmlydHVhbCBDb21waWxhdGlvblJlc3Vs
dCBqaXRDb21waWxlSW1wbChFeGVjU3RhdGUqKTsKICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVw
bGFjZW1lbnQoKTsKICAgICB2aXJ0dWFsIERGRzo6Q2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlM
ZXZlbEludGVybmFsKCk7CiAjZW5kaWYKQEAgLTEyNTIsMTMgKzEyNDAsNyBAQCBwdWJsaWM6CiAg
ICAgCiAjaWYgRU5BQkxFKEpJVCkKIHByb3RlY3RlZDoKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAg
ICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIEpTU2NvcGUq
LCBDb21waWxhdGlvblJlc3VsdCYsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwotICAgIHZpcnR1
YWwgQ29tcGlsYXRpb25SZXN1bHQgcmVwbGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGUoUGFz
c1JlZlB0cjxERkc6OlBsYW4+KTsKLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLQogICAgIHZp
cnR1YWwgdm9pZCBqZXR0aXNvbkltcGwoKTsKLSAgICB2aXJ0dWFsIENvbXBpbGF0aW9uUmVzdWx0
IGppdENvbXBpbGVJbXBsKEV4ZWNTdGF0ZSopOwogICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBs
YWNlbWVudCgpOwogICAgIHZpcnR1YWwgREZHOjpDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxl
dmVsSW50ZXJuYWwoKTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6RGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrKCkgeyB9CitEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6On5EZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2soKSB7IH0KKworfSAvLyBKU0MKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9EZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrX2gKKyNkZWZpbmUgRGVmZXJy
ZWRDb21waWxhdGlvbkNhbGxiYWNrX2gKKworI2luY2x1ZGUgIkNvbXBpbGF0aW9uUmVzdWx0Lmgi
CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNz
IENvZGVCbG9jazsKKworY2xhc3MgRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrIDogcHVibGlj
IFJlZkNvdW50ZWQ8RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPiB7CitwdWJsaWM6CisgICAg
RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrKCk7CisgICAgdmlydHVhbCB+RGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgY29tcGlsYXRpb25EaWRDb21w
bGV0ZShDb2RlQmxvY2sqLCBDb21waWxhdGlvblJlc3VsdCkgPSAwOworfTsKKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKKyNlbmRpZiAvLyBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2tfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lvbiAxNTQ3
MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU1LDcgKzU1LDcgQEAgdW5zaWduZWQgZ2V0TnVtQ29tcGlsYXRpb25zKCkKICAg
ICByZXR1cm4gbnVtQ29tcGlsYXRpb25zOwogfQogCi1zdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQg
Y29tcGlsZShDb21waWxlTW9kZSBjb21waWxlTW9kZSwgRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgUmVmUHRyPEpTQzo6SklUQ29kZT4mIGppdENvZGUsIE1hY3JvQXNzZW1i
bGVyQ29kZVB0ciogaml0Q29kZVdpdGhBcml0eUNoZWNrLCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVj
b2RlSW5kZXgpCitDb21waWxhdGlvblJlc3VsdCB0cnlDb21waWxlKEV4ZWNTdGF0ZSogZXhlYywg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgUGFz
c1JlZlB0cjxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+IGNhbGxiYWNrKQogewogICAgIFNh
bXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgQ29tcGlsYXRpb24gKERyaXZlcikiKTsK
ICAgICAKQEAgLTk5LDEyICs5OSwxMiBAQCBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGls
ZShDb21waWxlCiAgICAgZWxzZQogICAgICAgICBudW1WYXJzV2l0aFZhbHVlcyA9IDA7CiAgICAg
UmVmUHRyPFBsYW4+IHBsYW4gPSBhZG9wdFJlZigKLSAgICAgICAgbmV3IFBsYW4oY29tcGlsZU1v
ZGUsIGNvZGVCbG9jaywgb3NyRW50cnlCeXRlY29kZUluZGV4LCBudW1WYXJzV2l0aFZhbHVlcykp
OworICAgICAgICBuZXcgUGxhbihjb2RlQmxvY2ssIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgbnVt
VmFyc1dpdGhWYWx1ZXMpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBsYW4tPm11c3RI
YW5kbGVWYWx1ZXMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgaW50IG9wZXJhbmQgPSBwbGFuLT5t
dXN0SGFuZGxlVmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKICAgICAgICAgaWYgKG9wZXJhbmRJ
c0FyZ3VtZW50KG9wZXJhbmQpCiAgICAgICAgICAgICAmJiAhb3BlcmFuZFRvQXJndW1lbnQob3Bl
cmFuZCkKLSAgICAgICAgICAgICYmIGNvbXBpbGVNb2RlID09IENvbXBpbGVGdW5jdGlvbgorICAg
ICAgICAgICAgJiYgY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZQogICAgICAg
ICAgICAgJiYgY29kZUJsb2NrLT5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2RlRm9yQ29uc3Ry
dWN0KSB7CiAgICAgICAgICAgICAvLyBVZ2guIElmIHdlJ3JlIGluIGEgY29uc3RydWN0b3IsIHRo
ZSAndGhpcycgYXJndW1lbnQgbWF5IGhvbGQgZ2FyYmFnZS4gSXQgd2lsbAogICAgICAgICAgICAg
Ly8gYWxzbyBuZXZlciBiZSB1c2VkLiBJdCBkb2Vzbid0IG1hdHRlciB3aGF0IHdlIHB1dCBpbnRv
IHRoZSB2YWx1ZSBmb3IgdGhpcywKQEAgLTExNSw3ICsxMTUsOCBAQCBzdGF0aWMgQ29tcGlsYXRp
b25SZXN1bHQgY29tcGlsZShDb21waWxlCiAgICAgICAgICAgICBwbGFuLT5tdXN0SGFuZGxlVmFs
dWVzW2ldID0gZXhlYy0+dW5jaGVja2VkUihvcGVyYW5kKS5qc1ZhbHVlKCk7CiAgICAgfQogICAg
IAotICAgIGlmIChlbmFibGVDb25jdXJyZW50SklUKCkpIHsKKyAgICBpZiAoZW5hYmxlQ29uY3Vy
cmVudEpJVCgpICYmIGNhbGxiYWNrKSB7CisgICAgICAgIHBsYW4tPmNhbGxiYWNrID0gY2FsbGJh
Y2s7CiAgICAgICAgIGlmICghdm0ud29ya2xpc3QpCiAgICAgICAgICAgICB2bS53b3JrbGlzdCA9
IGdsb2JhbFdvcmtsaXN0KCk7CiAgICAgICAgIGlmIChsb2dDb21waWxhdGlvbkNoYW5nZXMoKSkK
QEAgLTEyNSwyMiArMTI2LDcgQEAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGUoQ29t
cGlsZQogICAgIH0KICAgICAKICAgICBwbGFuLT5jb21waWxlSW5UaHJlYWQoKnZtLmRmZ1N0YXRl
KTsKLSAgICByZXR1cm4gcGxhbi0+ZmluYWxpemUoaml0Q29kZSwgaml0Q29kZVdpdGhBcml0eUNo
ZWNrKTsKLX0KLQotQ29tcGlsYXRpb25SZXN1bHQgdHJ5Q29tcGlsZShFeGVjU3RhdGUqIGV4ZWMs
IENvZGVCbG9jayogY29kZUJsb2NrLCBSZWZQdHI8SlNDOjpKSVRDb2RlPiYgaml0Q29kZSwgdW5z
aWduZWQgYnl0ZWNvZGVJbmRleCkKLXsKLSAgICByZXR1cm4gY29tcGlsZShDb21waWxlT3RoZXIs
IGV4ZWMsIGNvZGVCbG9jaywgaml0Q29kZSwgMCwgYnl0ZWNvZGVJbmRleCk7Ci19Ci0KLUNvbXBp
bGF0aW9uUmVzdWx0IHRyeUNvbXBpbGVGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9j
ayogY29kZUJsb2NrLCBSZWZQdHI8SlNDOjpKSVRDb2RlPiYgaml0Q29kZSwgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyJiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgp
Ci17Ci0gICAgcmV0dXJuIGNvbXBpbGUoQ29tcGlsZUZ1bmN0aW9uLCBleGVjLCBjb2RlQmxvY2ss
IGppdENvZGUsICZqaXRDb2RlV2l0aEFyaXR5Q2hlY2ssIGJ5dGVjb2RlSW5kZXgpOwotfQotCi1D
b21waWxhdGlvblJlc3VsdCB0cnlGaW5hbGl6ZVBsYW4oUGFzc1JlZlB0cjxQbGFuPiBwbGFuLCBS
ZWZQdHI8SlNDOjpKSVRDb2RlPiYgaml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKiBqaXRD
b2RlV2l0aEFyaXR5Q2hlY2spCi17Ci0gICAgcmV0dXJuIHBsYW4tPmZpbmFsaXplKGppdENvZGUs
IGppdENvZGVXaXRoQXJpdHlDaGVjayk7CisgICAgcmV0dXJuIHBsYW4tPmZpbmFsaXplV2l0aG91
dE5vdGlmeWluZ0NhbGxiYWNrKCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuaAkocmV2aXNpb24gMTU0NzE4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNDIsMTcgKzQyLDkgQEAgbmFtZXNwYWNlIERGRyB7CiBKU19FWFBPUlRfUFJJVkFURSB1bnNp
Z25lZCBnZXROdW1Db21waWxhdGlvbnMoKTsKIAogI2lmIEVOQUJMRShERkdfSklUKQotQ29tcGls
YXRpb25SZXN1bHQgdHJ5Q29tcGlsZShFeGVjU3RhdGUqLCBDb2RlQmxvY2sqLCBSZWZQdHI8SlND
OjpKSVRDb2RlPiYsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwotQ29tcGlsYXRpb25SZXN1bHQg
dHJ5Q29tcGlsZUZ1bmN0aW9uKEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIFJlZlB0cjxKU0M6OkpJ
VENvZGU+JiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ssIHVu
c2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwotQ29tcGlsYXRpb25SZXN1bHQgdHJ5RmluYWxpemVQbGFu
KFBhc3NSZWZQdHI8UGxhbj4sIFJlZlB0cjxKU0M6OkpJVENvZGU+JiwgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyKiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOworQ29tcGlsYXRpb25SZXN1bHQgdHJ5Q29t
cGlsZShFeGVjU3RhdGUqLCBDb2RlQmxvY2sqLCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5k
ZXgsIFBhc3NSZWZQdHI8RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPik7CiAjZWxzZQotaW5s
aW5lIENvbXBpbGF0aW9uUmVzdWx0IHRyeUNvbXBpbGUoRXhlY1N0YXRlKiwgQ29kZUJsb2NrKiwg
UmVmUHRyPEpTQzo6SklUQ29kZT4mLCB1bnNpZ25lZCkgeyByZXR1cm4gQ29tcGlsYXRpb25GYWls
ZWQ7IH0KLWlubGluZSBDb21waWxhdGlvblJlc3VsdCB0cnlDb21waWxlRnVuY3Rpb24oRXhlY1N0
YXRlKiwgQ29kZUJsb2NrKiwgUmVmUHRyPEpTQzo6SklUQ29kZT4mLCBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHImLCB1bnNpZ25lZCkgeyByZXR1cm4gQ29tcGlsYXRpb25GYWlsZWQ7IH0KLWlubGluZSBD
b21waWxhdGlvblJlc3VsdCB0cnlGaW5hbGl6ZVBsYW4oUGFzc1JlZlB0cjxQbGFuPiwgUmVmUHRy
PEpTQzo6SklUQ29kZT4mLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIqKQotewotICAgIFVOUkVBQ0hB
QkxFX0ZPUl9QTEFURk9STSgpOwotICAgIHJldHVybiBDb21waWxhdGlvbkZhaWxlZDsKLX0KK2lu
bGluZSBDb21waWxhdGlvblJlc3VsdCB0cnlDb21waWxlKEV4ZWNTdGF0ZSosIENvZGVCbG9jayos
IHVuc2lnbmVkLCBQYXNzUmVmUHRyPERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4pIHsgcmV0
dXJuIENvbXBpbGF0aW9uRmFpbGVkOyB9CiAjZW5kaWYKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGYWlsZWRGaW5hbGl6ZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmFpbGVkRmlu
YWxpemVyLmNwcAkocmV2aXNpb24gMTU0NzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdGYWlsZWRGaW5hbGl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMiArMzksMTIg
QEAgRmFpbGVkRmluYWxpemVyOjp+RmFpbGVkRmluYWxpemVyKCkKIHsKIH0KIAotYm9vbCBGYWls
ZWRGaW5hbGl6ZXI6OmZpbmFsaXplKFJlZlB0cjxKU0M6OkpJVENvZGU+JikKK2Jvb2wgRmFpbGVk
RmluYWxpemVyOjpmaW5hbGl6ZSgpCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEZh
aWxlZEZpbmFsaXplcjo6ZmluYWxpemVGdW5jdGlvbihSZWZQdHI8SlNDOjpKSVRDb2RlPiYsIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciYpCitib29sIEZhaWxlZEZpbmFsaXplcjo6ZmluYWxpemVGdW5j
dGlvbigpCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdGYWlsZWRGaW5hbGl6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0ZhaWxlZEZpbmFsaXplci5oCShyZXZpc2lvbiAxNTQ3MTgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZhaWxlZEZpbmFsaXplci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zOSw4ICszOSw4IEBAIHB1YmxpYzoKICAgICBGYWlsZWRGaW5hbGl6ZXIoUGxhbiYp
OwogICAgIHZpcnR1YWwgfkZhaWxlZEZpbmFsaXplcigpOwogICAgIAotICAgIGJvb2wgZmluYWxp
emUoUmVmUHRyPEpTQzo6SklUQ29kZT4mIGVudHJ5KTsKLSAgICBib29sIGZpbmFsaXplRnVuY3Rp
b24oUmVmUHRyPEpTQzo6SklUQ29kZT4mIGVudHJ5LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIHdp
dGhBcml0eUNoZWNrKTsKKyAgICBib29sIGZpbmFsaXplKCk7CisgICAgYm9vbCBmaW5hbGl6ZUZ1
bmN0aW9uKCk7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpbmFsaXplci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRmluYWxpemVyLmgJKHJldmlzaW9uIDE1NDcxOCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmluYWxpemVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ2LDggKzQ2LDggQEAgcHVibGljOgogICAgIEZpbmFsaXplcihQbGFuJik7CiAgICAgdmlydHVh
bCB+RmluYWxpemVyKCk7CiAgICAgCi0gICAgdmlydHVhbCBib29sIGZpbmFsaXplKFJlZlB0cjxK
U0M6OkpJVENvZGU+JiBlbnRyeSkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBmaW5hbGl6ZUZ1bmN0
aW9uKFJlZlB0cjxKU0M6OkpJVENvZGU+JiBlbnRyeSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiB3
aXRoQXJpdHlDaGVjaykgPSAwOworICAgIHZpcnR1YWwgYm9vbCBmaW5hbGl6ZSgpID0gMDsKKyAg
ICB2aXJ0dWFsIGJvb2wgZmluYWxpemVGdW5jdGlvbigpID0gMDsKIAogcHJvdGVjdGVkOgogICAg
IFBsYW4mIG1fcGxhbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklURmlu
YWxpemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VEZpbmFsaXplci5jcHAJKHJldmlzaW9uIDE1NDcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklURmluYWxpemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBA
QAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNs
dWRlICJERkdDb21tb24uaCIKICNpbmNsdWRlICJERkdQbGFuLmgiCiAKQEAgLTQ1LDIzICs0Niwy
MyBAQCBKSVRGaW5hbGl6ZXI6On5KSVRGaW5hbGl6ZXIoKQogewogfQogCi1ib29sIEpJVEZpbmFs
aXplcjo6ZmluYWxpemUoUmVmUHRyPEpTQzo6SklUQ29kZT4mIGVudHJ5KQorYm9vbCBKSVRGaW5h
bGl6ZXI6OmZpbmFsaXplKCkKIHsKICAgICBmaW5hbGl6ZUNvbW1vbigpOwogICAgIAogICAgIG1f
aml0Q29kZS0+aW5pdGlhbGl6ZUNvZGVSZWYobV9saW5rQnVmZmVyLT5maW5hbGl6ZUNvZGVXaXRo
b3V0RGlzYXNzZW1ibHkoKSk7Ci0gICAgZW50cnkgPSBtX2ppdENvZGU7CisgICAgbV9wbGFuLmNv
ZGVCbG9jay0+c2V0SklUQ29kZShtX2ppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpKTsK
ICAgICAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXpl
RnVuY3Rpb24oUmVmUHRyPEpTQzo6SklUQ29kZT4mIGVudHJ5LCBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHImIHdpdGhBcml0eUNoZWNrKQorYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplRnVuY3Rpb24o
KQogewogICAgIGZpbmFsaXplQ29tbW9uKCk7CiAgICAgCi0gICAgd2l0aEFyaXR5Q2hlY2sgPSBt
X2xpbmtCdWZmZXItPmxvY2F0aW9uT2YobV9hcml0eUNoZWNrKTsKKyAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgd2l0aEFyaXR5Q2hlY2sgPSBtX2xpbmtCdWZmZXItPmxvY2F0aW9uT2YobV9hcml0
eUNoZWNrKTsKICAgICBtX2ppdENvZGUtPmluaXRpYWxpemVDb2RlUmVmKG1fbGlua0J1ZmZlci0+
ZmluYWxpemVDb2RlV2l0aG91dERpc2Fzc2VtYmx5KCkpOwotICAgIGVudHJ5ID0gbV9qaXRDb2Rl
OworICAgIG1fcGxhbi5jb2RlQmxvY2stPnNldEpJVENvZGUobV9qaXRDb2RlLCB3aXRoQXJpdHlD
aGVjayk7CiAgICAgCiAgICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklURmluYWxpemVyLmgJKHJldmlzaW9uIDE1NDcxOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklURmluYWxpemVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQyLDggKzQyLDggQEAgcHVibGljOgogICAgIEpJVEZpbmFsaXplcihQbGFuJiwgUGFzc1JlZlB0
cjxKSVRDb2RlPiwgUGFzc093blB0cjxMaW5rQnVmZmVyPiwgTWFjcm9Bc3NlbWJsZXI6OkxhYmVs
IGFyaXR5Q2hlY2sgPSBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwoKSk7CiAgICAgdmlydHVhbCB+SklU
RmluYWxpemVyKCk7CiAgICAgCi0gICAgYm9vbCBmaW5hbGl6ZShSZWZQdHI8SlNDOjpKSVRDb2Rl
PiYgZW50cnkpOwotICAgIGJvb2wgZmluYWxpemVGdW5jdGlvbihSZWZQdHI8SlNDOjpKSVRDb2Rl
PiYgZW50cnksIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgd2l0aEFyaXR5Q2hlY2spOworICAgIGJv
b2wgZmluYWxpemUoKTsKKyAgICBib29sIGZpbmFsaXplRnVuY3Rpb24oKTsKIAogcHJpdmF0ZToK
ICAgICB2b2lkIGZpbmFsaXplQ29tbW9uKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkV4aXRQcmVwYXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0UHJlcGFyYXRpb24uY3BwCShyZXZpc2lvbiAxNTQ3MTgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRQcmVwYXJhdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDE5ICszMCwyOCBAQAogCiAjaW5jbHVkZSAiQ29kZUJsb2Nr
LmgiCiAjaW5jbHVkZSAiRXhlY3V0YWJsZS5oIgorI2luY2x1ZGUgIkpJVENvZGUuaCIKICNpbmNs
dWRlICJPcGVyYXRpb25zLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAog
dm9pZCBwcmVwYXJlQ29kZU9yaWdpbkZvck9TUkV4aXQoRXhlY1N0YXRlKiBleGVjLCBDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4pCiB7CisgICAgRGVmZXJHQyBkZWZlckdDKGV4ZWMtPnZtKCkuaGVhcCk7
CisgICAgCiAgICAgZm9yICg7IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lOyBjb2RlT3JpZ2lu
ID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmNhbGxlcikgewogICAgICAgICBGdW5jdGlv
bkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPQogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RnVuY3Rp
b25FeGVjdXRhYmxlKj4oY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUuZ2V0
KCkpOwogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWN1dGFibGUtPmJhc2VsaW5l
Q29kZUJsb2NrRm9yKAogICAgICAgICAgICAgY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmlz
Q2FsbCA/IENvZGVGb3JDYWxsIDogQ29kZUZvckNvbnN0cnVjdCk7CiAgICAgICAgIAotICAgICAg
ICBjb2RlQmxvY2stPmppdENvbXBpbGUoZXhlYyk7CisgICAgICAgIGlmIChjb2RlQmxvY2stPmpp
dFR5cGUoKSA9PSBKU0M6OkpJVENvZGU6OkJhc2VsaW5lSklUKQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIEFTU0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKU0M6OkpJVENvZGU6
OkludGVycHJldGVyVGh1bmspOworICAgICAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBj
b2RlQmxvY2stPnByZXBhcmVGb3JFeGVjdXRpb24oCisgICAgICAgICAgICBleGVjLCBKU0M6OkpJ
VENvZGU6OkJhc2VsaW5lSklULCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkKTsKKyAgICAgICAg
QVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdCA9PSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpOwor
ICAgICAgICBjb2RlQmxvY2stPmluc3RhbGwoKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTU0NzE4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTI4MSw3ICsxMjgxLDcgQEAgaW5saW5lIGNoYXIqIGxpbmtGb3IoRXhlY1N0YXRl
KiBleGVjQ2FsbAogICAgICAgICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29k
ZUZvcihraW5kKS0+YWRkcmVzc0ZvckNhbGwoKTsKICAgICBlbHNlIHsKICAgICAgICAgRnVuY3Rp
b25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4
ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKLSAgICAgICAgSlNPYmplY3QqIGVycm9yID0gZnVuY3Rp
b25FeGVjdXRhYmxlLT5jb21waWxlRm9yKGV4ZWNDYWxsZWUsIGNhbGxlZS0+c2NvcGUoKSwga2lu
ZCk7CisgICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFy
ZUZvckV4ZWN1dGlvbihleGVjQ2FsbGVlLCBjYWxsZWUtPnNjb3BlKCksIGtpbmQpOwogICAgICAg
ICBpZiAoZXJyb3IpIHsKICAgICAgICAgICAgIHZtLT5leGNlcHRpb24gPSBjcmVhdGVTdGFja092
ZXJmbG93RXJyb3IoZXhlYyk7CiAgICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4odm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJh
dG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CkBAIC0xMzI2LDcgKzEzMjYsNyBAQCBp
bmxpbmUgY2hhciogdmlydHVhbEZvcldpdGhGdW5jdGlvbihFeGVjCiAgICAgRXhlY3V0YWJsZUJh
c2UqIGV4ZWN1dGFibGUgPSBmdW5jdGlvbi0+ZXhlY3V0YWJsZSgpOwogICAgIGlmIChVTkxJS0VM
WSghZXhlY3V0YWJsZS0+aGFzSklUQ29kZUZvcihraW5kKSkpIHsKICAgICAgICAgRnVuY3Rpb25F
eGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1
dGFibGUqPihleGVjdXRhYmxlKTsKLSAgICAgICAgSlNPYmplY3QqIGVycm9yID0gZnVuY3Rpb25F
eGVjdXRhYmxlLT5jb21waWxlRm9yKGV4ZWNDYWxsZWUsIGZ1bmN0aW9uLT5zY29wZSgpLCBraW5k
KTsKKyAgICAgICAgSlNPYmplY3QqIGVycm9yID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJl
Rm9yRXhlY3V0aW9uKGV4ZWNDYWxsZWUsIGZ1bmN0aW9uLT5zY29wZSgpLCBraW5kKTsKICAgICAg
ICAgaWYgKGVycm9yKSB7CiAgICAgICAgICAgICBleGVjLT52bSgpLmV4Y2VwdGlvbiA9IGVycm9y
OwogICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHZtLT5nZXRDVElT
dHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1
dGFibGVBZGRyZXNzKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFu
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3Bw
CShyZXZpc2lvbiAxNTQ3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCwxMCArODAsOSBAQCBzdGF0aWMgdm9pZCBkdW1wQW5k
VmVyaWZ5R3JhcGgoR3JhcGgmIGdyCiB9CiAKIFBsYW46OlBsYW4oCi0gICAgQ29tcGlsZU1vZGUg
Y29tcGlsZU1vZGUsIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBwYXNzZWRDb2RlQmxvY2ssIHVuc2ln
bmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwKKyAgICBQYXNzUmVmUHRyPENvZGVCbG9jaz4gcGFz
c2VkQ29kZUJsb2NrLCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsCiAgICAgdW5zaWdu
ZWQgbnVtVmFyc1dpdGhWYWx1ZXMpCi0gICAgOiBjb21waWxlTW9kZShjb21waWxlTW9kZSkKLSAg
ICAsIHZtKCpwYXNzZWRDb2RlQmxvY2stPnZtKCkpCisgICAgOiB2bSgqcGFzc2VkQ29kZUJsb2Nr
LT52bSgpKQogICAgICwgY29kZUJsb2NrKHBhc3NlZENvZGVCbG9jaykKICAgICAsIG9zckVudHJ5
Qnl0ZWNvZGVJbmRleChvc3JFbnRyeUJ5dGVjb2RlSW5kZXgpCiAgICAgLCBudW1WYXJzV2l0aFZh
bHVlcyhudW1WYXJzV2l0aFZhbHVlcykKQEAgLTIwOCw3ICsyMDcsNyBAQCBQbGFuOjpDb21waWxh
dGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAKICNpZiBFTkFCTEUoRlRMX0pJVCkKICAgICBp
ZiAoT3B0aW9uczo6dXNlRXhwZXJpbWVudGFsRlRMKCkKLSAgICAgICAgJiYgY29tcGlsZU1vZGUg
PT0gQ29tcGlsZUZ1bmN0aW9uCisgICAgICAgICYmIGNvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBG
dW5jdGlvbkNvZGUKICAgICAgICAgJiYgRlRMOjpjYW5Db21waWxlKGRmZykpIHsKICAgICAgICAg
CiAgICAgICAgIHBlcmZvcm1Dcml0aWNhbEVkZ2VCcmVha2luZyhkZmcpOwpAQCAtMjU1LDEyICsy
NTQsMTAgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgogICAgIGR1
bXBBbmRWZXJpZnlHcmFwaChkZmcsICJHcmFwaCBhZnRlciBvcHRpbWl6YXRpb246Iik7CiAKICAg
ICBKSVRDb21waWxlciBkYXRhRmxvd0pJVChkZmcpOwotICAgIGlmIChjb21waWxlTW9kZSA9PSBD
b21waWxlRnVuY3Rpb24pIHsKKyAgICBpZiAoY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0
aW9uQ29kZSkgewogICAgICAgICBkYXRhRmxvd0pJVC5jb21waWxlRnVuY3Rpb24oKTsKICAgICAg
ICAgZGF0YUZsb3dKSVQubGlua0Z1bmN0aW9uKCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgQVNT
RVJUKGNvbXBpbGVNb2RlID09IENvbXBpbGVPdGhlcik7Ci0gICAgICAgIAogICAgICAgICBkYXRh
Rmxvd0pJVC5jb21waWxlKCk7CiAgICAgICAgIGRhdGFGbG93SklULmxpbmsoKTsKICAgICB9CkBA
IC0yODMsMjUgKzI4MCwzMCBAQCB2b2lkIFBsYW46OnJlYWxseUFkZChDb21tb25EYXRhKiBjb21t
b25ECiAgICAgd3JpdGVCYXJyaWVycy50cmlnZ2VyKHZtKTsKIH0KIAotQ29tcGlsYXRpb25SZXN1
bHQgUGxhbjo6ZmluYWxpemUoUmVmUHRyPEpTQzo6SklUQ29kZT4mIGppdENvZGUsIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0ciogaml0Q29kZVdpdGhBcml0eUNoZWNrKQorQ29tcGlsYXRpb25SZXN1bHQg
UGxhbjo6ZmluYWxpemVXaXRob3V0Tm90aWZ5aW5nQ2FsbGJhY2soKQogewogICAgIGlmICghaXNT
dGlsbFZhbGlkKCkpCiAgICAgICAgIHJldHVybiBDb21waWxhdGlvbkludmFsaWRhdGVkOwogICAg
IAogICAgIGJvb2wgcmVzdWx0OwotICAgIGlmIChjb21waWxlTW9kZSA9PSBDb21waWxlRnVuY3Rp
b24pCi0gICAgICAgIHJlc3VsdCA9IGZpbmFsaXplci0+ZmluYWxpemVGdW5jdGlvbihqaXRDb2Rl
LCAqaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKKyAgICBpZiAoY29kZUJsb2NrLT5jb2RlVHlwZSgp
ID09IEZ1bmN0aW9uQ29kZSkKKyAgICAgICAgcmVzdWx0ID0gZmluYWxpemVyLT5maW5hbGl6ZUZ1
bmN0aW9uKCk7CiAgICAgZWxzZQotICAgICAgICByZXN1bHQgPSBmaW5hbGl6ZXItPmZpbmFsaXpl
KGppdENvZGUpOworICAgICAgICByZXN1bHQgPSBmaW5hbGl6ZXItPmZpbmFsaXplKCk7CiAgICAg
CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBDb21waWxhdGlvbkZhaWxlZDsKICAg
ICAKLSAgICByZWFsbHlBZGQoaml0Q29kZS0+ZGZnQ29tbW9uKCkpOworICAgIHJlYWxseUFkZChj
b2RlQmxvY2stPmppdENvZGUoKS0+ZGZnQ29tbW9uKCkpOwogICAgIAogICAgIHJldHVybiBDb21w
aWxhdGlvblN1Y2Nlc3NmdWw7CiB9CiAKK3ZvaWQgUGxhbjo6ZmluYWxpemVBbmROb3RpZnlDYWxs
YmFjaygpCit7CisgICAgY2FsbGJhY2stPmNvbXBpbGF0aW9uRGlkQ29tcGxldGUoY29kZUJsb2Nr
LmdldCgpLCBmaW5hbGl6ZVdpdGhvdXROb3RpZnlpbmdDYWxsYmFjaygpKTsKK30KKwogQ29kZUJs
b2NrKiBQbGFuOjprZXkoKQogewogICAgIHJldHVybiBjb2RlQmxvY2stPmFsdGVybmF0aXZlKCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAkocmV2aXNpb24gMTU0NzE4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuaCIKICNp
bmNsdWRlICJERkdEZXNpcmVkV3JpdGVCYXJyaWVycy5oIgogI2luY2x1ZGUgIkRGR0ZpbmFsaXpl
ci5oIgorI2luY2x1ZGUgIkRlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIgogI2luY2x1ZGUg
Ik9wZXJhbmRzLmgiCiAjaW5jbHVkZSAiUHJvZmlsZXJDb21waWxhdGlvbi5oIgogI2luY2x1ZGUg
PHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgpAQCAtNDgsMjMgKzQ5LDIwIEBAIG5hbWVzcGFj
ZSBERkcgewogCiBjbGFzcyBMb25nTGl2ZWRTdGF0ZTsKIAotZW51bSBDb21waWxlTW9kZSB7IENv
bXBpbGVGdW5jdGlvbiwgQ29tcGlsZU90aGVyIH07Ci0KICNpZiBFTkFCTEUoREZHX0pJVCkKIAog
c3RydWN0IFBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8UGxhbj4gewogICAgIFBs
YW4oCi0gICAgICAgIENvbXBpbGVNb2RlIGNvbXBpbGVNb2RlLCBQYXNzUmVmUHRyPENvZGVCbG9j
az4gY29kZUJsb2NrLAotICAgICAgICB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIHVu
c2lnbmVkIG51bVZhcnNXaXRoVmFsdWVzKTsKKyAgICAgICAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+
LCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIHVuc2lnbmVkIG51bVZhcnNXaXRoVmFs
dWVzKTsKICAgICB+UGxhbigpOwogICAgIAogICAgIHZvaWQgY29tcGlsZUluVGhyZWFkKExvbmdM
aXZlZFN0YXRlJik7CiAgICAgCi0gICAgQ29tcGlsYXRpb25SZXN1bHQgZmluYWxpemUoUmVmUHRy
PEpTQzo6SklUQ29kZT4mIGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciogaml0Q29kZVdp
dGhBcml0eUNoZWNrKTsKKyAgICBDb21waWxhdGlvblJlc3VsdCBmaW5hbGl6ZVdpdGhvdXROb3Rp
ZnlpbmdDYWxsYmFjaygpOworICAgIHZvaWQgZmluYWxpemVBbmROb3RpZnlDYWxsYmFjaygpOwog
ICAgIAogICAgIENvZGVCbG9jayoga2V5KCk7CiAgICAgCi0gICAgY29uc3QgQ29tcGlsZU1vZGUg
Y29tcGlsZU1vZGU7CiAgICAgVk0mIHZtOwogICAgIFJlZlB0cjxDb2RlQmxvY2s+IGNvZGVCbG9j
azsKICAgICBjb25zdCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXg7CkBAIC04Niw2ICs4
NCw4IEBAIHN0cnVjdCBQbGFuIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGUKICAgICAKICAg
ICBib29sIGlzQ29tcGlsZWQ7CiAKKyAgICBSZWZQdHI8RGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrPiBjYWxsYmFjazsKKwogcHJpdmF0ZToKICAgICBlbnVtIENvbXBpbGF0aW9uUGF0aCB7IEZh
aWxQYXRoLCBERkdQYXRoLCBGVExQYXRoIH07CiAgICAgQ29tcGlsYXRpb25QYXRoIGNvbXBpbGVJ
blRocmVhZEltcGwoTG9uZ0xpdmVkU3RhdGUmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHV29ya2xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHV29ya2xpc3QuY3BwCShyZXZpc2lvbiAxNTQ3MTgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY1LDEwICsx
NjUsNyBAQCBXb3JrbGlzdDo6U3RhdGUgV29ya2xpc3Q6OmNvbXBsZXRlQWxsUmVhCiAgICAgICAg
IAogICAgICAgICBSRUxFQVNFX0FTU0VSVChwbGFuLT5pc0NvbXBpbGVkKTsKICAgICAgICAgCi0g
ICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGF0aW9uUmVzdWx0ID0KLSAgICAgICAgICAg
IHByb2ZpbGVkQmxvY2stPnJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlKHBsYW4pOwot
ICAgICAgICBSRUxFQVNFX0FTU0VSVChjb21waWxhdGlvblJlc3VsdCAhPSBDb21waWxhdGlvbkRl
ZmVycmVkKTsKLSAgICAgICAgcHJvZmlsZWRCbG9jay0+c2V0T3B0aW1pemF0aW9uVGhyZXNob2xk
QmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KGNvbXBpbGF0aW9uUmVzdWx0KTsKKyAgICAgICAgcGxh
bi0+ZmluYWxpemVBbmROb3RpZnlDYWxsYmFjaygpOwogICAgICAgICAKICAgICAgICAgaWYgKHBy
b2ZpbGVkQmxvY2sgPT0gcmVxdWVzdGVkUHJvZmlsZWRCbG9jaykKICAgICAgICAgICAgIHJlc3Vs
dGluZ1N0YXRlID0gQ29tcGlsZWQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9I
ZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShy
ZXZpc2lvbiAxNTQ3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE4NCw2ICsxODQsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
Y29uc3QgSklUU3R1YlJvdXRpbmVTZXQmIGppdFN0dWJSb3V0aW5lcygpIHsgcmV0dXJuIG1faml0
U3R1YlJvdXRpbmVzOyB9CiAgICAgICAgIAogICAgICAgICB2b2lkIGFkZFJlZmVyZW5jZShKU0Nl
bGwqLCBBcnJheUJ1ZmZlciopOworICAgICAgICAKKyAgICAgICAgYm9vbCBpc0RlZmVycmVkKCkg
Y29uc3QgeyByZXR1cm4gISFtX2RlZmVycmFsRGVwdGg7IH0KIAogICAgIHByaXZhdGU6CiAgICAg
ICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDE1NDcxOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTgxNyw3ICs4MTcsNyBAQCBmYWlsZWRKU09OUDoKICAgICBpZiAoSlNPYmpl
Y3QqIGVycm9yID0gcHJvZ3JhbS0+aW5pdGlhbGl6ZUdsb2JhbFByb3BlcnRpZXModm0sIGNhbGxG
cmFtZSwgc2NvcGUpKQogICAgICAgICByZXR1cm4gY2hlY2tlZFJldHVybih0aHJvd0Vycm9yKGNh
bGxGcmFtZSwgZXJyb3IpKTsKIAotICAgIGlmIChKU09iamVjdCogZXJyb3IgPSBwcm9ncmFtLT5j
b21waWxlKGNhbGxGcmFtZSwgc2NvcGUpKQorICAgIGlmIChKU09iamVjdCogZXJyb3IgPSBwcm9n
cmFtLT5wcmVwYXJlRm9yRXhlY3V0aW9uKGNhbGxGcmFtZSwgc2NvcGUsIENvZGVGb3JDYWxsKSkK
ICAgICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4odGhyb3dFcnJvcihjYWxsRnJhbWUsIGVycm9y
KSk7CiAKICAgICBQcm9ncmFtQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSAmcHJvZ3JhbS0+Z2VuZXJh
dGVkQnl0ZWNvZGUoKTsKQEAgLTg4Niw3ICs4ODYsNyBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpl
eGVjdXRlQ2FsbChDYWxsRnJhCiAKICAgICBpZiAoaXNKU0NhbGwpIHsKICAgICAgICAgLy8gQ29t
cGlsZSB0aGUgY2FsbGVlOgotICAgICAgICBKU09iamVjdCogY29tcGlsZUVycm9yID0gY2FsbERh
dGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlLT5jb21waWxlRm9yQ2FsbChjYWxsRnJhbWUsIHNjb3Bl
KTsKKyAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVFcnJvciA9IGNhbGxEYXRhLmpzLmZ1bmN0aW9u
RXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbihjYWxsRnJhbWUsIHNjb3BlLCBDb2RlRm9y
Q2FsbCk7CiAgICAgICAgIGlmIChVTkxJS0VMWSghIWNvbXBpbGVFcnJvcikpIHsKICAgICAgICAg
ICAgIHJldHVybiBjaGVja2VkUmV0dXJuKHRocm93RXJyb3IoY2FsbEZyYW1lLCBjb21waWxlRXJy
b3IpKTsKICAgICAgICAgfQpAQCAtOTY1LDcgKzk2NSw3IEBAIEpTT2JqZWN0KiBJbnRlcnByZXRl
cjo6ZXhlY3V0ZUNvbnN0cnVjdCgKIAogICAgIGlmIChpc0pTQ29uc3RydWN0KSB7CiAgICAgICAg
IC8vIENvbXBpbGUgdGhlIGNhbGxlZToKLSAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVFcnJvciA9
IGNvbnN0cnVjdERhdGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlLT5jb21waWxlRm9yQ29uc3RydWN0
KGNhbGxGcmFtZSwgc2NvcGUpOworICAgICAgICBKU09iamVjdCogY29tcGlsZUVycm9yID0gY29u
c3RydWN0RGF0YS5qcy5mdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb24oY2Fs
bEZyYW1lLCBzY29wZSwgQ29kZUZvckNvbnN0cnVjdCk7CiAgICAgICAgIGlmIChVTkxJS0VMWSgh
IWNvbXBpbGVFcnJvcikpIHsKICAgICAgICAgICAgIHJldHVybiBjaGVja2VkUmV0dXJuKHRocm93
RXJyb3IoY2FsbEZyYW1lLCBjb21waWxlRXJyb3IpKTsKICAgICAgICAgfQpAQCAtMTAzOSw3ICsx
MDM5LDcgQEAgQ2FsbEZyYW1lQ2xvc3VyZSBJbnRlcnByZXRlcjo6cHJlcGFyZUZvcgogICAgIH0K
IAogICAgIC8vIENvbXBpbGUgdGhlIGNhbGxlZToKLSAgICBKU09iamVjdCogZXJyb3IgPSBmdW5j
dGlvbkV4ZWN1dGFibGUtPmNvbXBpbGVGb3JDYWxsKGNhbGxGcmFtZSwgc2NvcGUpOworICAgIEpT
T2JqZWN0KiBlcnJvciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbihj
YWxsRnJhbWUsIHNjb3BlLCBDb2RlRm9yQ2FsbCk7CiAgICAgaWYgKGVycm9yKSB7CiAgICAgICAg
IHRocm93RXJyb3IoY2FsbEZyYW1lLCBlcnJvcik7CiAgICAgICAgIHJldHVybiBDYWxsRnJhbWVD
bG9zdXJlKCk7CkBAIC0xMTU1LDcgKzExNTUsNyBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVj
dXRlKEV2YWxFeGVjdXRhCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBKU09iamVjdCogY29tcGls
ZUVycm9yID0gZXZhbC0+Y29tcGlsZShjYWxsRnJhbWUsIHNjb3BlKTsKKyAgICBKU09iamVjdCog
Y29tcGlsZUVycm9yID0gZXZhbC0+cHJlcGFyZUZvckV4ZWN1dGlvbihjYWxsRnJhbWUsIHNjb3Bl
LCBDb2RlRm9yQ2FsbCk7CiAgICAgaWYgKFVOTElLRUxZKCEhY29tcGlsZUVycm9yKSkKICAgICAg
ICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4odGhyb3dFcnJvcihjYWxsRnJhbWUsIGNvbXBpbGVFcnJv
cikpOwogICAgIEV2YWxDb2RlQmxvY2sqIGNvZGVCbG9jayA9ICZldmFsLT5nZW5lcmF0ZWRCeXRl
Y29kZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVREcml2ZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVERyaXZlci5oCShyZXZpc2lv
biAxNTQ3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVERyaXZlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDE1MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgSklURHJpdmVyX2gKLSNkZWZpbmUgSklU
RHJpdmVyX2gKLQotI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgotCi0jaWYgRU5BQkxFKEpJVCkK
LQotI2luY2x1ZGUgIkJ5dGVjb2RlR2VuZXJhdG9yLmgiCi0jaW5jbHVkZSAiQ29tcGlsYXRpb25S
ZXN1bHQuaCIKLSNpbmNsdWRlICJERkdEcml2ZXIuaCIKLSNpbmNsdWRlICJKSVQuaCIKLSNpbmNs
dWRlICJMTEludEVudHJ5cG9pbnRzLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgotaW5saW5lIENvbXBpbGF0aW9uUmVzdWx0IGppdENvbXBp
bGVJZkFwcHJvcHJpYXRlSW1wbCgKLSAgICBFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9ja1R5cGUq
IGNvZGVCbG9jaywgUmVmUHRyPEpJVENvZGU+JiBqaXRDb2RlLAotICAgIEpJVENvZGU6OkpJVFR5
cGUgaml0VHlwZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgSklUQ29tcGlsYXRpb25FZmZvcnQg
ZWZmb3J0KQotewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgCi0gICAgaWYgKGppdFR5
cGUgPT0gY29kZUJsb2NrLT5qaXRUeXBlKCkpCi0gICAgICAgIHJldHVybiBDb21waWxhdGlvbk5v
dE5lZWRlZDsKLSAgICAKLSAgICBpZiAoIXZtLmNhblVzZUpJVCgpKQotICAgICAgICByZXR1cm4g
Q29tcGlsYXRpb25Ob3ROZWVkZWQ7IC8vIEZJWE1FOiBJbnZlc3RpZ2F0ZSBpZiB0aGlzIGlzIHJp
Z2h0LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE2MjQ2Ci0gICAg
Ci0gICAgY29kZUJsb2NrLT51bmxpbmtJbmNvbWluZ0NhbGxzKCk7Ci0gICAgCi0gICAgUmVmUHRy
PEpJVENvZGU+IG9sZEpJVENvZGUgPSBqaXRDb2RlOwotICAgIAotICAgIGlmIChKSVRDb2RlOjpp
c09wdGltaXppbmdKSVQoaml0VHlwZSkpIHsKLSAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVz
dWx0ID0KLSAgICAgICAgICAgIERGRzo6dHJ5Q29tcGlsZShleGVjLCBjb2RlQmxvY2ssIGppdENv
ZGUsIGJ5dGVjb2RlSW5kZXgpOwotICAgICAgICBpZiAocmVzdWx0ID09IENvbXBpbGF0aW9uU3Vj
Y2Vzc2Z1bCkKLSAgICAgICAgICAgIGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+dW5saW5rSW5j
b21pbmdDYWxscygpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChvbGRKSVRD
b2RlID09IGppdENvZGUpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIFJlZlB0cjxKSVRDb2RlPiByZXN1bHQgPSBKSVQ6OmNvbXBp
bGUoJnZtLCBjb2RlQmxvY2ssIGVmZm9ydCk7Ci0gICAgICAgIGlmIChyZXN1bHQpCi0gICAgICAg
ICAgICBqaXRDb2RlID0gcmVzdWx0OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4g
Q29tcGlsYXRpb25GYWlsZWQ7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBDb21waWxhdGlvblN1
Y2Nlc3NmdWw7Ci19Ci0KLWlubGluZSBDb21waWxhdGlvblJlc3VsdCBqaXRDb21waWxlRnVuY3Rp
b25JZkFwcHJvcHJpYXRlSW1wbCgKLSAgICBFeGVjU3RhdGUqIGV4ZWMsIEZ1bmN0aW9uQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFJlZlB0cjxKSVRDb2RlPiYgaml0Q29kZSwKLSAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHImIGppdENvZGVXaXRoQXJpdHlDaGVjaywgSklUQ29kZTo6SklUVHlwZSBqaXRU
eXBlLAotICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVm
Zm9ydCkKLXsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIAotICAgIGlmIChqaXRUeXBl
ID09IGNvZGVCbG9jay0+aml0VHlwZSgpKQotICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25Ob3RO
ZWVkZWQ7Ci0gICAgCi0gICAgaWYgKCF2bS5jYW5Vc2VKSVQoKSkKLSAgICAgICAgcmV0dXJuIENv
bXBpbGF0aW9uTm90TmVlZGVkOyAvLyBGSVhNRTogSW52ZXN0aWdhdGUgaWYgdGhpcyBpcyByaWdo
dC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNjI0NgotICAgIAot
ICAgIGNvZGVCbG9jay0+dW5saW5rSW5jb21pbmdDYWxscygpOwotICAgIAotICAgIFJlZlB0cjxK
SVRDb2RlPiBvbGRKSVRDb2RlID0gaml0Q29kZTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIg
b2xkSklUQ29kZVdpdGhBcml0eUNoZWNrID0gaml0Q29kZVdpdGhBcml0eUNoZWNrOwotICAgIAot
ICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSkpIHsKLSAgICAgICAgQ29t
cGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gREZHOjp0cnlDb21waWxlRnVuY3Rpb24oCi0gICAgICAg
ICAgICBleGVjLCBjb2RlQmxvY2ssIGppdENvZGUsIGppdENvZGVXaXRoQXJpdHlDaGVjaywgYnl0
ZWNvZGVJbmRleCk7Ci0gICAgICAgIGlmIChyZXN1bHQgPT0gQ29tcGlsYXRpb25TdWNjZXNzZnVs
KQotICAgICAgICAgICAgY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT51bmxpbmtJbmNvbWluZ0Nh
bGxzKCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKG9sZEpJVENvZGUgPT0g
aml0Q29kZSk7Ci0gICAgICAgICAgICBBU1NFUlRfVU5VU0VEKG9sZEpJVENvZGVXaXRoQXJpdHlD
aGVjaywgb2xkSklUQ29kZVdpdGhBcml0eUNoZWNrID09IGppdENvZGVXaXRoQXJpdHlDaGVjayk7
Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgUmVmUHRyPEpJVENvZGU+IHJlc3VsdCA9Ci0gICAgICAgICAgICBKSVQ6OmNvbXBpbGUo
JnZtLCBjb2RlQmxvY2ssIGVmZm9ydCwgJmppdENvZGVXaXRoQXJpdHlDaGVjayk7Ci0gICAgICAg
IGlmIChyZXN1bHQpCi0gICAgICAgICAgICBqaXRDb2RlID0gcmVzdWx0OwotICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQob2xkSklUQ29kZVdpdGhBcml0eUNoZWNrLCBv
bGRKSVRDb2RlV2l0aEFyaXR5Q2hlY2sgPT0gaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKLSAgICAg
ICAgICAgIHJldHVybiBDb21waWxhdGlvbkZhaWxlZDsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IHJldHVybiBDb21waWxhdGlvblN1Y2Nlc3NmdWw7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIENv
ZGVCbG9ja1R5cGU+Ci1pbmxpbmUgQ29tcGlsYXRpb25SZXN1bHQgaml0Q29tcGlsZUlmQXBwcm9w
cmlhdGUoCi0gICAgRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIFJl
ZlB0cjxKSVRDb2RlPiYgaml0Q29kZSwKLSAgICBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUsIHVu
c2lnbmVkIGJ5dGVjb2RlSW5kZXgsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKLXsKLSAg
ICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBqaXRDb21waWxlSWZBcHByb3ByaWF0ZUltcGwo
Ci0gICAgICAgIGV4ZWMsIGNvZGVCbG9jaywgaml0Q29kZSwgaml0VHlwZSwgYnl0ZWNvZGVJbmRl
eCwgZWZmb3J0KTsKLSAgICBpZiAocmVzdWx0ID09IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bCkgewot
ICAgICAgICBjb2RlQmxvY2stPnNldEpJVENvZGUoaml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyKCkpOwotICAgICAgICBjb2RlQmxvY2stPnZtKCktPmhlYXAucmVwb3J0RXh0cmFNZW1vcnlD
b3N0KGppdENvZGUtPnNpemUoKSk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19ICAgIAot
Ci1pbmxpbmUgQ29tcGlsYXRpb25SZXN1bHQgaml0Q29tcGlsZUZ1bmN0aW9uSWZBcHByb3ByaWF0
ZSgKLSAgICBFeGVjU3RhdGUqIGV4ZWMsIEZ1bmN0aW9uQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFJl
ZlB0cjxKSVRDb2RlPiYgaml0Q29kZSwKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGppdENv
ZGVXaXRoQXJpdHlDaGVjaywgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlLAotICAgIHVuc2lnbmVk
IGJ5dGVjb2RlSW5kZXgsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKLXsKLSAgICBDb21w
aWxhdGlvblJlc3VsdCByZXN1bHQgPSBqaXRDb21waWxlRnVuY3Rpb25JZkFwcHJvcHJpYXRlSW1w
bCgKLSAgICAgICAgZXhlYywgY29kZUJsb2NrLCBqaXRDb2RlLCBqaXRDb2RlV2l0aEFyaXR5Q2hl
Y2ssIGppdFR5cGUsIGJ5dGVjb2RlSW5kZXgsIGVmZm9ydCk7Ci0gICAgaWYgKHJlc3VsdCA9PSBD
b21waWxhdGlvblN1Y2Nlc3NmdWwpIHsKLSAgICAgICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKGpp
dENvZGUsIGppdENvZGVXaXRoQXJpdHlDaGVjayk7Ci0gICAgICAgIGNvZGVCbG9jay0+dm0oKS0+
aGVhcC5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qoaml0Q29kZS0+c2l6ZSgpKTsKLSAgICB9Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBFTkFC
TEUoSklUKQotCi0jZW5kaWYgLy8gSklURHJpdmVyX2gKLQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDE1NDcxOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBA
CiAjaW5jbHVkZSA8d3RmL0lubGluZUFTTS5oPgogI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUg
IkpJVEV4Y2VwdGlvbnMuaCIKKyNpbmNsdWRlICJKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25D
YWxsYmFjay5oIgogI2luY2x1ZGUgIkpTQWN0aXZhdGlvbi5oIgogI2luY2x1ZGUgIkpTQXJyYXku
aCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCkBAIC0xMDE5LDcgKzEwMjAsNyBAQCBERUZJTkVf
U1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZSkKICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJv
c2VPU1IoKSkKICAgICAgICAgICAgIGRhdGFMb2coIkNvbnNpZGVyaW5nIE9TUiAiLCAqY29kZUJs
b2NrLCAiIC0+ICIsICpjb2RlQmxvY2stPnJlcGxhY2VtZW50KCksICIuXG4iKTsKICAgICAgICAg
Ly8gSWYgd2UgaGF2ZSBhbiBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQsIHRoZW4gaXQgbXVzdCBiZSB0
aGUgY2FzZSB0aGF0IHdlIGVudGVyZWQKLSAgICAgICAgLy8gY3RpX29wdGltaXplIGZyb20gYSBs
b29wLiBUaGF0J3MgYmVjYXVzZSBpcyB0aGVyZSdzIGFuIG9wdGltaXplZCByZXBsYWNlbWVudCwK
KyAgICAgICAgLy8gY3RpX29wdGltaXplIGZyb20gYSBsb29wLiBUaGF0J3MgYmVjYXVzZSBpZiB0
aGVyZSdzIGFuIG9wdGltaXplZCByZXBsYWNlbWVudCwKICAgICAgICAgLy8gdGhlbiBhbGwgY2Fs
bHMgdG8gdGhpcyBmdW5jdGlvbiB3aWxsIGJlIHJlbGlua2VkIHRvIHRoZSByZXBsYWNlbWVudCBh
bmQgc28KICAgICAgICAgLy8gdGhlIHByb2xvZ3VlIE9TUiB3aWxsIG5ldmVyIGZpcmUuCiAgICAg
ICAgIApAQCAtMTA1MywxOCArMTA1NCwxOSBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBv
cHRpbWl6ZSkKICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKICAgICAgICAgICAg
IGRhdGFMb2coIlRyaWdnZXJpbmcgb3B0aW1pemVkIGNvbXBpbGF0aW9uIG9mICIsICpjb2RlQmxv
Y2ssICJcbiIpOwogICAgICAgICAKLSAgICAgICAgSlNTY29wZSogc2NvcGUgPSBjYWxsRnJhbWUt
PnNjb3BlKCk7Ci0gICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdDsKLSAgICAgICAgSlNP
YmplY3QqIGVycm9yID0gY29kZUJsb2NrLT5jb21waWxlT3B0aW1pemVkKGNhbGxGcmFtZSwgc2Nv
cGUsIHJlc3VsdCwgYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3Nl
T1NSKCkpIHsKKyAgICAgICAgUmVmUHRyPERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4gY2Fs
bGJhY2sgPSBhZG9wdFJlZigKKyAgICAgICAgICAgIG5ldyBKSVRUb0RGR0RlZmVycmVkQ29tcGls
YXRpb25DYWxsYmFjaygpKTsKKyAgICAgICAgUmVmUHRyPENvZGVCbG9jaz4gbmV3Q29kZUJsb2Nr
ID0gY29kZUJsb2NrLT5uZXdSZXBsYWNlbWVudCgpOworICAgICAgICBDb21waWxhdGlvblJlc3Vs
dCByZXN1bHQgPSBuZXdDb2RlQmxvY2stPnByZXBhcmVGb3JFeGVjdXRpb24oCisgICAgICAgICAg
ICBjYWxsRnJhbWUsIEpJVENvZGU6OkRGR0pJVCwgSklUQ29tcGlsYXRpb25DYW5GYWlsLCBieXRl
Y29kZUluZGV4LCBjYWxsYmFjayk7CisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkp
CiAgICAgICAgICAgICBkYXRhTG9nKCJPcHRpbWl6aW5nIGNvbXBpbGF0aW9uIG9mICIsICpjb2Rl
QmxvY2ssICIgcmVzdWx0OiAiLCByZXN1bHQsICJcbiIpOwotICAgICAgICAgICAgaWYgKGVycm9y
KQotICAgICAgICAgICAgICAgIGRhdGFMb2coIldBUk5JTkc6IG9wdGltaXplZCBjb21waWxhdGlv
biBmYWlsZWQgd2l0aCBhIEpTIGVycm9yLlxuIik7Ci0gICAgICAgIH0KICAgICAgICAgCiAgICAg
ICAgIGNvZGVCbG9jay0+c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9u
UmVzdWx0KHJlc3VsdCk7CiAgICAgICAgIGlmIChyZXN1bHQgIT0gQ29tcGlsYXRpb25TdWNjZXNz
ZnVsKQogICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgbmV3Q29kZUJsb2Nr
LT5pbnN0YWxsKCk7CiAgICAgfQogICAgIAogICAgIENvZGVCbG9jayogb3B0aW1pemVkQ29kZUJs
b2NrID0gY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpOwpAQCAtMTE4OSw3ICsxMTkxLDcgQEAgaW5s
aW5lIHZvaWQqIGppdENvbXBpbGVGb3IoQ2FsbEZyYW1lKiBjYQogICAgIEFTU0VSVCghZnVuY3Rp
b24tPmlzSG9zdEZ1bmN0aW9uKCkpOwogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJs
ZSA9IGZ1bmN0aW9uLT5qc0V4ZWN1dGFibGUoKTsKICAgICBKU1Njb3BlKiBjYWxsRGF0YVNjb3Bl
Q2hhaW4gPSBmdW5jdGlvbi0+c2NvcGUoKTsKLSAgICBKU09iamVjdCogZXJyb3IgPSBleGVjdXRh
YmxlLT5jb21waWxlRm9yKGNhbGxGcmFtZSwgY2FsbERhdGFTY29wZUNoYWluLCBraW5kKTsKKyAg
ICBKU09iamVjdCogZXJyb3IgPSBleGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uKGNhbGxG
cmFtZSwgY2FsbERhdGFTY29wZUNoYWluLCBraW5kKTsKICAgICBpZiAoIWVycm9yKQogICAgICAg
ICByZXR1cm4gZnVuY3Rpb247CiAgICAgY2FsbEZyYW1lLT52bSgpLmV4Y2VwdGlvbiA9IGVycm9y
OwpAQCAtMTI4OCw3ICsxMjkwLDcgQEAgaW5saW5lIHZvaWQqIGxhenlMaW5rRm9yKENhbGxGcmFt
ZSogY2FsbAogICAgICAgICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZv
cihraW5kKS0+YWRkcmVzc0ZvckNhbGwoKTsKICAgICBlbHNlIHsKICAgICAgICAgRnVuY3Rpb25F
eGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1
dGFibGUqPihleGVjdXRhYmxlKTsKLSAgICAgICAgaWYgKEpTT2JqZWN0KiBlcnJvciA9IGZ1bmN0
aW9uRXhlY3V0YWJsZS0+Y29tcGlsZUZvcihjYWxsRnJhbWUsIGNhbGxlZS0+c2NvcGUoKSwga2lu
ZCkpIHsKKyAgICAgICAgaWYgKEpTT2JqZWN0KiBlcnJvciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+
cHJlcGFyZUZvckV4ZWN1dGlvbihjYWxsRnJhbWUsIGNhbGxlZS0+c2NvcGUoKSwga2luZCkpIHsK
ICAgICAgICAgICAgIGNhbGxGcmFtZS0+dm0oKS5leGNlcHRpb24gPSBlcnJvcjsKICAgICAgICAg
ICAgIHJldHVybiAwOwogICAgICAgICB9CkBAIC0xMzY1LDcgKzEzNjcsNyBAQCBERUZJTkVfU1RV
Ql9GVU5DVElPTih2b2lkKiwgdm1fbGF6eUxpbmtDCiAgICAgICAgIAogICAgICAgICBGdW5jdGlv
bkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFi
bGUqPihleGVjdXRhYmxlKTsKICAgICAgICAgSlNTY29wZSogc2NvcGVDaGFpbiA9IGNhbGxlZS0+
c2NvcGUoKTsKLSAgICAgICAgSlNPYmplY3QqIGVycm9yID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5j
b21waWxlRm9yKGNhbGxGcmFtZSwgc2NvcGVDaGFpbiwgQ29kZUZvckNhbGwpOworICAgICAgICBK
U09iamVjdCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb24o
Y2FsbEZyYW1lLCBzY29wZUNoYWluLCBDb2RlRm9yQ2FsbCk7CiAgICAgICAgIGlmIChlcnJvcikg
ewogICAgICAgICAgICAgY2FsbEZyYW1lLT52bSgpLmV4Y2VwdGlvbiA9IGVycm9yOwogICAgICAg
ICAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRvREZH
RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVG9ERkdEZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
LmgiCisKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJFeGVjdXRhYmxlLmgiCisK
K25hbWVzcGFjZSBKU0MgeworCitKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6
SklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2soKSB7IH0KK0pJVFRvREZHRGVmZXJy
ZWRDb21waWxhdGlvbkNhbGxiYWNrOjp+SklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2soKSB7IH0KKwordm9pZCBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y29t
cGlsYXRpb25EaWRDb21wbGV0ZSgKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsYXRp
b25SZXN1bHQgcmVzdWx0KQoreworICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkt
PmppdFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CisgICAgCisgICAgaWYgKHJlc3Vs
dCA9PSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpCisgICAgICAgIGNvZGVCbG9jay0+aW5zdGFsbCgp
OworICAgIAorICAgIGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+c2V0T3B0aW1pemF0aW9uVGhy
ZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KHJlc3VsdCk7Cit9CisKK30gLy8gSlNDCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0
aW9uQ2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpJVFRvREZHRGVmZXJyZWRDb21waWxh
dGlvbkNhbGxiYWNrX2gKKyNkZWZpbmUgSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2tfaAorCisjaW5jbHVkZSAiRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgiCisKK25hbWVz
cGFjZSBKU0MgeworCitjbGFzcyBTY3JpcHRFeGVjdXRhYmxlOworCitjbGFzcyBKSVRUb0RGR0Rl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjayA6IHB1YmxpYyBEZWZlcnJlZENvbXBpbGF0aW9uQ2Fs
bGJhY2sgeworcHVibGljOgorICAgIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
KCk7CisgICAgdmlydHVhbCB+SklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2soKTsK
KworICAgIHZpcnR1YWwgdm9pZCBjb21waWxhdGlvbkRpZENvbXBsZXRlKENvZGVCbG9jayosIENv
bXBpbGF0aW9uUmVzdWx0KTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8g
SklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFbnRyeXBvaW50cy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RW50cnlwb2ludHMuY3BwCShyZXZpc2lvbiAx
NTQ3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFbnRyeXBvaW50cy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDYyICsyOCw3NyBAQAogCiAjaWYgRU5BQkxFKExMSU5UKQog
CisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiSklUQ29kZS5oIgotI2luY2x1ZGUg
IlZNLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKICNpbmNsdWRlICJMTEludFRodW5rcy5oIgog
I2luY2x1ZGUgIkxvd0xldmVsSW50ZXJwcmV0ZXIuaCIKKyNpbmNsdWRlICJWTS5oIgogCiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgTExJbnQgewogCi12b2lkIGdldEZ1bmN0aW9uRW50cnlw
b2ludChWTSYgdm0sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgUmVmUHRyPEpJVENvZGU+
JiBqaXRDb2RlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGFyaXR5Q2hlY2spCit2b2lkIHNldEZ1
bmN0aW9uRW50cnlwb2ludChWTSYgdm0sIEZ1bmN0aW9uQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7
CisgICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kID0gY29kZUJsb2NrLT5zcGVjaWFsaXph
dGlvbktpbmQoKTsKKyAgICAKICAgICBpZiAoIXZtLmNhblVzZUpJVCgpKSB7CiAgICAgICAgIGlm
IChraW5kID09IENvZGVGb3JDYWxsKSB7Ci0gICAgICAgICAgICBqaXRDb2RlID0gYWRvcHRSZWYo
bmV3IERpcmVjdEpJVENvZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENvZGVS
ZWYobGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfcHJvbG9ndWUpLCBKSVRDb2RlOjpJbnRlcnByZXRl
clRodW5rKSk7Ci0gICAgICAgICAgICBhcml0eUNoZWNrID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
OjpjcmVhdGVMTEludENvZGVQdHIobGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hlY2sp
OworICAgICAgICAgICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKAorICAgICAgICAgICAgICAgIGFk
b3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlTExJ
bnRDb2RlUmVmKGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlKSwgSklUQ29kZTo6SW50
ZXJwcmV0ZXJUaHVuaykpLAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6
Y3JlYXRlTExJbnRDb2RlUHRyKGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNrKSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBBU1NFUlQoa2luZCA9
PSBDb2RlRm9yQ29uc3RydWN0KTsKLSAgICAgICAgaml0Q29kZSA9IGFkb3B0UmVmKG5ldyBEaXJl
Y3RKSVRDb2RlKE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlTExJbnRDb2RlUmVmKGxsaW50
X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfcHJvbG9ndWUpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRo
dW5rKSk7Ci0gICAgICAgIGFyaXR5Q2hlY2sgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0
ZUxMSW50Q29kZVB0cihsbGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5X2NoZWNrKTsK
KyAgICAgICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKAorICAgICAgICAgICAgYWRvcHRSZWYobmV3
IERpcmVjdEpJVENvZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYo
bGxpbnRfZnVuY3Rpb25fZm9yX2NvbnN0cnVjdF9wcm9sb2d1ZSksIEpJVENvZGU6OkludGVycHJl
dGVyVGh1bmspKSwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlTExJ
bnRDb2RlUHRyKGxsaW50X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlfY2hlY2spKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICNpZiBFTkFCTEUoSklUKQogICAgIGlmIChraW5k
ID09IENvZGVGb3JDYWxsKSB7Ci0gICAgICAgIGppdENvZGUgPSBhZG9wdFJlZihuZXcgRGlyZWN0
SklUQ29kZSh2bS5nZXRDVElTdHViKGZ1bmN0aW9uRm9yQ2FsbEVudHJ5VGh1bmtHZW5lcmF0b3Ip
LCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSk7Ci0gICAgICAgIGFyaXR5Q2hlY2sgPSB2bS5n
ZXRDVElTdHViKGZ1bmN0aW9uRm9yQ2FsbEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcikuY29kZSgp
OworICAgICAgICBjb2RlQmxvY2stPnNldEpJVENvZGUoCisgICAgICAgICAgICBhZG9wdFJlZihu
ZXcgRGlyZWN0SklUQ29kZSh2bS5nZXRDVElTdHViKGZ1bmN0aW9uRm9yQ2FsbEVudHJ5VGh1bmtH
ZW5lcmF0b3IpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSksCisgICAgICAgICAgICB2bS5n
ZXRDVElTdHViKGZ1bmN0aW9uRm9yQ2FsbEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcikuY29kZSgp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIEFTU0VSVChraW5kID09IENvZGVGb3JD
b25zdHJ1Y3QpOwotICAgIGppdENvZGUgPSBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZSh2bS5n
ZXRDVElTdHViKGZ1bmN0aW9uRm9yQ29uc3RydWN0RW50cnlUaHVua0dlbmVyYXRvciksIEpJVENv
ZGU6OkludGVycHJldGVyVGh1bmspKTsKLSAgICBhcml0eUNoZWNrID0gdm0uZ2V0Q1RJU3R1Yihm
dW5jdGlvbkZvckNvbnN0cnVjdEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcikuY29kZSgpOworICAg
IGNvZGVCbG9jay0+c2V0SklUQ29kZSgKKyAgICAgICAgYWRvcHRSZWYobmV3IERpcmVjdEpJVENv
ZGUodm0uZ2V0Q1RJU3R1YihmdW5jdGlvbkZvckNvbnN0cnVjdEVudHJ5VGh1bmtHZW5lcmF0b3Ip
LCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSksCisgICAgICAgIHZtLmdldENUSVN0dWIoZnVu
Y3Rpb25Gb3JDb25zdHJ1Y3RBcml0eUNoZWNrVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSk7CiAjZW5k
aWYgLy8gRU5BQkxFKEpJVCkKIH0KIAotdm9pZCBnZXRFdmFsRW50cnlwb2ludChWTSYgdm0sIFJl
ZlB0cjxKSVRDb2RlPiYgaml0Q29kZSkKK3ZvaWQgc2V0RXZhbEVudHJ5cG9pbnQoVk0mIHZtLCBF
dmFsQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgaWYgKCF2bS5jYW5Vc2VKSVQoKSkgewot
ICAgICAgICBqaXRDb2RlID0gYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUoTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxpbnRfZXZhbF9wcm9sb2d1ZSksIEpJVENv
ZGU6OkludGVycHJldGVyVGh1bmspKTsKKyAgICAgICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKAor
ICAgICAgICAgICAgYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUoTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxpbnRfZXZhbF9wcm9sb2d1ZSksIEpJVENvZGU6Oklu
dGVycHJldGVyVGh1bmspKSwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLSNpZiBFTkFCTEUoSklUKSAgICAKLSAgICBqaXRDb2Rl
ID0gYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUodm0uZ2V0Q1RJU3R1YihldmFsRW50cnlUaHVu
a0dlbmVyYXRvciksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKTsKKyNpZiBFTkFCTEUoSklU
KQorICAgIGNvZGVCbG9jay0+c2V0SklUQ29kZSgKKyAgICAgICAgYWRvcHRSZWYobmV3IERpcmVj
dEpJVENvZGUodm0uZ2V0Q1RJU3R1YihldmFsRW50cnlUaHVua0dlbmVyYXRvciksIEpJVENvZGU6
OkludGVycHJldGVyVGh1bmspKSwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCkpOwog
I2VuZGlmCiB9CiAKLXZvaWQgZ2V0UHJvZ3JhbUVudHJ5cG9pbnQoVk0mIHZtLCBSZWZQdHI8SklU
Q29kZT4mIGppdENvZGUpCit2b2lkIHNldFByb2dyYW1FbnRyeXBvaW50KFZNJiB2bSwgUHJvZ3Jh
bUNvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIGlmICghdm0uY2FuVXNlSklUKCkpIHsKLSAg
ICAgICAgaml0Q29kZSA9IGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjo6Y3JlYXRlTExJbnRDb2RlUmVmKGxsaW50X3Byb2dyYW1fcHJvbG9ndWUpLCBKSVRD
b2RlOjpJbnRlcnByZXRlclRodW5rKSk7CisgICAgICAgIGNvZGVCbG9jay0+c2V0SklUQ29kZSgK
KyAgICAgICAgICAgIGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjo6Y3JlYXRlTExJbnRDb2RlUmVmKGxsaW50X3Byb2dyYW1fcHJvbG9ndWUpLCBKSVRDb2Rl
OjpJbnRlcnByZXRlclRodW5rKSksCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIo
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjaWYgRU5BQkxFKEpJVCkKLSAgICBqaXRDb2Rl
ID0gYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUodm0uZ2V0Q1RJU3R1Yihwcm9ncmFtRW50cnlU
aHVua0dlbmVyYXRvciksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKTsKKyAgICBjb2RlQmxv
Y2stPnNldEpJVENvZGUoCisgICAgICAgIGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKHZtLmdl
dENUSVN0dWIocHJvZ3JhbUVudHJ5VGh1bmtHZW5lcmF0b3IpLCBKSVRDb2RlOjpJbnRlcnByZXRl
clRodW5rKSksCisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpKTsKICNlbmRpZgogfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFbnRyeXBvaW50cy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludEVudHJ5cG9pbnRz
LmgJKHJldmlzaW9uIDE1NDcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dEVudHJ5cG9pbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDYgKzM3LDcgQEAKIG5hbWVzcGFjZSBK
U0MgewogCiBjbGFzcyBFdmFsQ29kZUJsb2NrOworY2xhc3MgRnVuY3Rpb25Db2RlQmxvY2s7CiBj
bGFzcyBWTTsKIGNsYXNzIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjsKIGNsYXNzIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjsKQEAgLTQ0LDE5ICs0NSw5IEBAIGNsYXNzIFByb2dyYW1Db2RlQmxvY2s7CiAK
IG5hbWVzcGFjZSBMTEludCB7CiAKLXZvaWQgZ2V0RnVuY3Rpb25FbnRyeXBvaW50KFZNJiwgQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCwgUmVmUHRyPEpJVENvZGU+JiwgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyJiBhcml0eUNoZWNrKTsKLXZvaWQgZ2V0RXZhbEVudHJ5cG9pbnQoVk0mLCBSZWZQdHI8SklU
Q29kZT4mKTsKLXZvaWQgZ2V0UHJvZ3JhbUVudHJ5cG9pbnQoVk0mLCBSZWZQdHI8SklUQ29kZT4m
KTsKLQotaW5saW5lIHZvaWQgZ2V0RW50cnlwb2ludChWTSYgdm0sIEV2YWxDb2RlQmxvY2sqLCBS
ZWZQdHI8SklUQ29kZT4mIGppdENvZGUpCi17Ci0gICAgZ2V0RXZhbEVudHJ5cG9pbnQodm0sIGpp
dENvZGUpOwotfQotCi1pbmxpbmUgdm9pZCBnZXRFbnRyeXBvaW50KFZNJiB2bSwgUHJvZ3JhbUNv
ZGVCbG9jayosIFJlZlB0cjxKSVRDb2RlPiYgaml0Q29kZSkKLXsKLSAgICBnZXRQcm9ncmFtRW50
cnlwb2ludCh2bSwgaml0Q29kZSk7Ci19Cit2b2lkIHNldEZ1bmN0aW9uRW50cnlwb2ludChWTSYs
IEZ1bmN0aW9uQ29kZUJsb2NrKik7Cit2b2lkIHNldEV2YWxFbnRyeXBvaW50KFZNJiwgRXZhbENv
ZGVCbG9jayopOwordm9pZCBzZXRQcm9ncmFtRW50cnlwb2ludChWTSYsIFByb2dyYW1Db2RlQmxv
Y2sqKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkxMSW50CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTU0NzE4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNiBAQAogI2luY2x1ZGUgIkhvc3RDYWxsUmV0dXJuVmFs
dWUuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpJVC5oIgotI2luY2x1
ZGUgIkpJVERyaXZlci5oIgogI2luY2x1ZGUgIkpTQWN0aXZhdGlvbi5oIgogI2luY2x1ZGUgIkpT
Q0pTVmFsdWUuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5oIgpAQCAtMjgw
LDYgKzI3OSw4IEBAIGlubGluZSBib29sIHNob3VsZEpJVChFeGVjU3RhdGUqIGV4ZWMpCiAvLyBS
ZXR1cm5zIHRydWUgaWYgd2Ugc2hvdWxkIHRyeSB0byBPU1IuCiBpbmxpbmUgYm9vbCBqaXRDb21w
aWxlQW5kU2V0SGV1cmlzdGljcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgRXhlY1N0YXRlKiBleGVj
KQogeworICAgIERlZmVyR0MgZGVmZXJHQyhleGVjLT52bSgpLmhlYXApOworICAgIAogICAgIGNv
ZGVCbG9jay0+dXBkYXRlQWxsVmFsdWVQcm9maWxlUHJlZGljdGlvbnMoKTsKICAgICAKICAgICBp
ZiAoIWNvZGVCbG9jay0+Y2hlY2tJZkpJVFRocmVzaG9sZFJlYWNoZWQoKSkgewpAQCAtMjg4LDIz
ICsyODksMzMgQEAgaW5saW5lIGJvb2wgaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MoQwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIENvbXBpbGF0aW9uUmVzdWx0IHJl
c3VsdCA9IGNvZGVCbG9jay0+aml0Q29tcGlsZShleGVjKTsKLSAgICBzd2l0Y2ggKHJlc3VsdCkg
ewotICAgIGNhc2UgQ29tcGlsYXRpb25Ob3ROZWVkZWQ6CisgICAgc3dpdGNoIChjb2RlQmxvY2st
PmppdFR5cGUoKSkgeworICAgIGNhc2UgSklUQ29kZTo6QmFzZWxpbmVKSVQ6IHsKICAgICAgICAg
aWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgQ29k
ZSB3YXMgYWxyZWFkeSBjb21waWxlZC5cbiIpOwogICAgICAgICBjb2RlQmxvY2stPmppdFNvb24o
KTsKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBDb21waWxhdGlvbkZhaWxlZDoKLSAg
ICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCIg
ICAgSklUIGNvbXBpbGF0aW9uIGZhaWxlZC5cbiIpOwotICAgICAgICBjb2RlQmxvY2stPmRvbnRK
SVRBbnl0aW1lU29vbigpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY2FzZSBDb21waWxh
dGlvblN1Y2Nlc3NmdWw6Ci0gICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCi0gICAg
ICAgICAgICBkYXRhTG9nRigiICAgIEpJVCBjb21waWxhdGlvbiBzdWNjZXNzZnVsLlxuIik7Ci0g
ICAgICAgIGNvZGVCbG9jay0+aml0U29vbigpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgY2FzZSBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rOiB7CisgICAgICAgIENvbXBpbGF0
aW9uUmVzdWx0IHJlc3VsdCA9IGNvZGVCbG9jay0+cHJlcGFyZUZvckV4ZWN1dGlvbigKKyAgICAg
ICAgICAgIGV4ZWMsIEpJVENvZGU6OkJhc2VsaW5lSklULCBKSVRDb21waWxhdGlvbkNhbkZhaWwp
OworICAgICAgICBzd2l0Y2ggKHJlc3VsdCkgeworICAgICAgICBjYXNlIENvbXBpbGF0aW9uRmFp
bGVkOgorICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAg
ICAgICBkYXRhTG9nRigiICAgIEpJVCBjb21waWxhdGlvbiBmYWlsZWQuXG4iKTsKKyAgICAgICAg
ICAgIGNvZGVCbG9jay0+ZG9udEpJVEFueXRpbWVTb29uKCk7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGNhc2UgQ29tcGlsYXRpb25TdWNjZXNzZnVsOgorICAgICAgICAgICAg
aWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAg
IEpJVCBjb21waWxhdGlvbiBzdWNjZXNzZnVsLlxuIik7CisgICAgICAgICAgICBjb2RlQmxvY2st
Pmluc3RhbGwoKTsKKyAgICAgICAgICAgIGNvZGVCbG9jay0+aml0U29vbigpOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgfQogICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEwMDQsNyArMTAxNSw3IEBAIGlubGluZSBT
bG93UGF0aFJldHVyblR5cGUgc2V0VXBDYWxsKEV4ZWMKICAgICAgICAgY29kZVB0ciA9IGV4ZWN1
dGFibGUtPmhvc3RDb2RlRW50cnlGb3Ioa2luZCk7CiAgICAgZWxzZSB7CiAgICAgICAgIEZ1bmN0
aW9uRXhlY3V0YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25F
eGVjdXRhYmxlKj4oZXhlY3V0YWJsZSk7Ci0gICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IGZ1bmN0
aW9uRXhlY3V0YWJsZS0+Y29tcGlsZUZvcihleGVjQ2FsbGVlLCBjYWxsZWUtPnNjb3BlKCksIGtp
bmQpOworICAgICAgICBKU09iamVjdCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBh
cmVGb3JFeGVjdXRpb24oZXhlY0NhbGxlZSwgY2FsbGVlLT5zY29wZSgpLCBraW5kKTsKICAgICAg
ICAgaWYgKGVycm9yKQogICAgICAgICAgICAgTExJTlRfQ0FMTF9USFJPVyhleGVjQ2FsbGVlLT5j
YWxsZXJGcmFtZSgpLCBwYywgZXJyb3IpOwogICAgICAgICBjb2RlQmxvY2sgPSAmZnVuY3Rpb25F
eGVjdXRhYmxlLT5nZW5lcmF0ZWRCeXRlY29kZUZvcihraW5kKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDE1
NDcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNO
dW1lcmljQ29tcGFyZUZ1bmN0CiAKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUg
PSBjYWxsRGF0YS5qcy5mdW5jdGlvbkV4ZWN1dGFibGU7CiAKLSAgICBKU09iamVjdCogZXJyb3Ig
PSBleGVjdXRhYmxlLT5jb21waWxlRm9yQ2FsbChleGVjLCBjYWxsRGF0YS5qcy5zY29wZSk7Cisg
ICAgSlNPYmplY3QqIGVycm9yID0gZXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbihleGVj
LCBjYWxsRGF0YS5qcy5zY29wZSwgQ29kZUZvckNhbGwpOwogICAgIGlmIChlcnJvcikKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDE1NDcxOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM3LDcgKzM3LDYgQEAKICNpbmNsdWRlICJIb3N0Q2FsbFJldHVyblZhbHVlLmgiCiAjaW5j
bHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKSVQuaCIKLSNpbmNsdWRlICJKSVREcml2
ZXIuaCIKICNpbmNsdWRlICJKSVRTdHVicy5oIgogI2luY2x1ZGUgIkpTQWN0aXZhdGlvbi5oIgog
I2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbXBpbGF0aW9uUmVzdWx0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Db21waWxhdGlvblJlc3VsdC5jcHAJKHJldmlzaW9uIDE1NDcxOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBpbGF0aW9uUmVzdWx0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDIsOSArNDIsNiBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJl
YW0mIG91dCwgQ29tCiAgICAgY2FzZSBDb21waWxhdGlvblN1Y2Nlc3NmdWw6CiAgICAgICAgIG91
dC5wcmludCgiQ29tcGlsYXRpb25TdWNjZXNzZnVsIik7CiAgICAgICAgIHJldHVybjsKLSAgICBj
YXNlIENvbXBpbGF0aW9uTm90TmVlZGVkOgotICAgICAgICBvdXQucHJpbnQoIkNvbXBpbGF0aW9u
Tm90TmVlZGVkIik7Ci0gICAgICAgIHJldHVybjsKICAgICBjYXNlIENvbXBpbGF0aW9uRGVmZXJy
ZWQ6CiAgICAgICAgIG91dC5wcmludCgiQ29tcGlsYXRpb25EZWZlcnJlZCIpOwogICAgICAgICBy
ZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21waWxhdGlvblJl
c3VsdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBp
bGF0aW9uUmVzdWx0LmgJKHJldmlzaW9uIDE1NDcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbXBpbGF0aW9uUmVzdWx0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMw
LDMyIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1lbnVtIENvbXBpbGF0aW9uUmVzdWx0IHsgQ29t
cGlsYXRpb25GYWlsZWQsIENvbXBpbGF0aW9uSW52YWxpZGF0ZWQsIENvbXBpbGF0aW9uU3VjY2Vz
c2Z1bCwgQ29tcGlsYXRpb25Ob3ROZWVkZWQsIENvbXBpbGF0aW9uRGVmZXJyZWQgfTsKK2VudW0g
Q29tcGlsYXRpb25SZXN1bHQgeworICAgIC8vIFdlIHRyaWVkIHRvIGNvbXBpbGUgdGhlIGNvZGUs
IGJ1dCB3ZSBjb3VsZG4ndCBjb21waWxlIGl0LiBUaGlzIGNvdWxkIGJlCisgICAgLy8gYmVjYXVz
ZSB3ZSByYW4gb3V0IG9mIG1lbW9yeSwgb3IgYmVjYXVzZSB0aGUgY29tcGlsZXIgZW5jb3VudGVy
ZWQgYW4KKyAgICAvLyBpbnRlcm5hbCBlcnJvciBhbmQgZGVjaWRlZCB0byBiYWlsIG91dCBncmFj
ZWZ1bGx5LiBFaXRoZXIgd2F5LCB0aGlzIGltcGxpZXMKKyAgICAvLyB0aGF0IHdlIHNob3VsZG4n
dCB0cnkgdG8gY29tcGlsZSB0aGlzIGNvZGUgYmxvY2sgYWdhaW4uCisgICAgQ29tcGlsYXRpb25G
YWlsZWQsCisgICAgCisgICAgLy8gVGhlIHByb2ZpbGluZyBhc3N1bXB0aW9ucyB0aGF0IHdlcmUg
ZmVkIGludG8gdGhlIGNvbXBpbGVyIHdlcmUgaW52YWxpZGF0ZWQKKyAgICAvLyBldmVuIGJlZm9y
ZSB3ZSBmaW5pc2hlZCBjb21waWxpbmcuIFRoaXMgbWVhbnMgd2Ugc2hvdWxkIHRyeSBhZ2Fpbjog
aW4gc3VjaAorICAgIC8vIGNhc2VzIHRoZSBwcm9maWxpbmcgd2lsbCBub3cgYmUgdXBkYXRlZCBh
bmQgdGhlIG5leHQgY29tcGlsYXRpb24gd29uJ3QKKyAgICAvLyBlbmNvdW50ZXIgdGhlIHNhbWUg
cHJvYmxlbS4gQnV0IGl0IGRvZXMgbWVhbiB0aGF0IHdlIHNob3VsZCBleGVyY2lzZQorICAgIC8v
IGV4cG9uZW50aWFsIGJhY2stb2ZmLCB0byBnZXQgZXZlbiBtb3JlIHByb2ZpbGluZyBzbyB0aGF0
IG5ldyBwcm9maWxpbmcKKyAgICAvLyBwYXRob2xvZ2llcyBhcmVuJ3QgZW5jb3VudGVyZWQuCisg
ICAgQ29tcGlsYXRpb25JbnZhbGlkYXRlZCwKKyAgICAKKyAgICAvLyBUaGUgY29tcGlsYXRpb24g
c3VjY2VlZGVkIGFuZCB0aGUgY29kZSBibG9jayBub3cgaGFzIEpJVENvZGUgZm9yIHRoZSBuZXds
eQorICAgIC8vIGNvbXBpbGVkIGNvZGUuIEhvd2V2ZXIsIGNvbXBpbGF0aW9uIHN1Y2Nlc3MgZG9l
c24ndCBtZWFuIHRoYXQgdGhlIENvZGVCbG9jaworICAgIC8vIHdpbGwgZXhlY3V0ZSB5ZXQ7IHlv
dSB0eXBpY2FsbHkgaGF2ZSB0byBpbnN0YWxsIGl0IGZpcnN0LCB1bmxlc3MgeW91IHBsYW4KKyAg
ICAvLyBvbiBpbnZva2luZyBpdCBtYW51YWxseSAoc29tZXRoaW5nIHRoYXQgKmNvdWxkKiBiZSBk
b25lIGZvciBzb21lIGtpbmRzIG9mCisgICAgLy8gT1NSIGVudHJ5KS4KKyAgICBDb21waWxhdGlv
blN1Y2Nlc3NmdWwsCisgICAgCisgICAgLy8gV2UgZGVjaWRlZCB0byBkbyB0aGUgY29tcGlsYXRp
b24gYXN5bmNocm9ub3VzbHkuIFRoaXMgbWVhbnMgdGhhdCB3ZSBoYXZlbid0CisgICAgLy8geWV0
IGNvbXBpbGVkIHRoZSBjb2RlLgorICAgIENvbXBpbGF0aW9uRGVmZXJyZWQKK307CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVj
dXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
eGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMTU0NzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDkgKzMwLDcgQEAK
ICNpbmNsdWRlICJCeXRlY29kZUdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgog
I2luY2x1ZGUgIkRGR0RyaXZlci5oIgotI2luY2x1ZGUgIkV4ZWN1dGlvbkhhcm5lc3MuaCIKICNp
bmNsdWRlICJKSVQuaCIKLSNpbmNsdWRlICJKSVREcml2ZXIuaCIKICNpbmNsdWRlICJPcGVyYXRp
b25zLmgiCiAjaW5jbHVkZSAiUGFyc2VyLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAt
MTE0LDYgKzExMiwxODggQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjpkZXN0cm95KEpTQ2VsbCog
YwogfQogI2VuZGlmCiAKK3ZvaWQgU2NyaXB0RXhlY3V0YWJsZTo6aW5zdGFsbENvZGUoQ29kZUJs
b2NrKiBnZW5lcmljQ29kZUJsb2NrKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGdlbmVyaWNDb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpID09IHRoaXMpOworICAgIAorICAgIFZNJiB2bSA9ICpn
ZW5lcmljQ29kZUJsb2NrLT52bSgpOworICAgIAorICAgIGlmICh2bS5tX3BlckJ5dGVjb2RlUHJv
ZmlsZXIpCisgICAgICAgIHZtLm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+ZW5zdXJlQnl0ZWNvZGVz
Rm9yKGdlbmVyaWNDb2RlQmxvY2spOworICAgIAorICAgIEFTU0VSVCh2bS5oZWFwLmlzRGVmZXJy
ZWQoKSk7CisgICAgCisgICAgaWYgKEpJVENvZGU6OmlzSklUKGdlbmVyaWNDb2RlQmxvY2stPmpp
dFR5cGUoKSkpIHsKKyAgICAgICAgdm0uaGVhcC5yZXBvcnRFeHRyYU1lbW9yeUNvc3QoCisgICAg
ICAgICAgICBzaXplb2YoQ29kZUJsb2NrKSArIGdlbmVyaWNDb2RlQmxvY2stPmppdENvZGUoKS0+
c2l6ZSgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgdm0uaGVhcC5yZXBvcnRFeHRyYU1lbW9yeUNv
c3Qoc2l6ZW9mKENvZGVCbG9jaykpOworICAgIAorICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQg
a2luZCA9IGdlbmVyaWNDb2RlQmxvY2stPnNwZWNpYWxpemF0aW9uS2luZCgpOworICAgIAorICAg
IFJlZlB0cjxDb2RlQmxvY2s+IG9sZENvZGVCbG9jazsKKyAgICAKKyAgICBzd2l0Y2ggKGtpbmQp
IHsKKyAgICBjYXNlIENvZGVGb3JDYWxsOgorICAgICAgICBtX2ppdENvZGVGb3JDYWxsID0gZ2Vu
ZXJpY0NvZGVCbG9jay0+aml0Q29kZSgpOworICAgICAgICBtX2ppdENvZGVGb3JDYWxsV2l0aEFy
aXR5Q2hlY2sgPSBnZW5lcmljQ29kZUJsb2NrLT5qaXRDb2RlV2l0aEFyaXR5Q2hlY2soKTsKKyAg
ICAgICAgbV9udW1QYXJhbWV0ZXJzRm9yQ2FsbCA9IGdlbmVyaWNDb2RlQmxvY2stPm51bVBhcmFt
ZXRlcnMoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb2RlRm9yQ29uc3RydWN0OgorICAg
ICAgICBtX2ppdENvZGVGb3JDb25zdHJ1Y3QgPSBnZW5lcmljQ29kZUJsb2NrLT5qaXRDb2RlKCk7
CisgICAgICAgIG1faml0Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrID0gZ2VuZXJpY0Nv
ZGVCbG9jay0+aml0Q29kZVdpdGhBcml0eUNoZWNrKCk7CisgICAgICAgIG1fbnVtUGFyYW1ldGVy
c0ZvckNvbnN0cnVjdCA9IGdlbmVyaWNDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIHN3aXRjaCAoZ2VuZXJpY0NvZGVCbG9jay0+Y29k
ZVR5cGUoKSkgeworICAgIGNhc2UgR2xvYmFsQ29kZTogeworICAgICAgICBQcm9ncmFtRXhlY3V0
YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KHRoaXMpOworICAg
ICAgICBQcm9ncmFtQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBzdGF0aWNfY2FzdDxQcm9ncmFtQ29k
ZUJsb2NrKj4oZ2VuZXJpY0NvZGVCbG9jayk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQoIWNv
ZGVCbG9jay0+aml0Q29kZVdpdGhBcml0eUNoZWNrKCkpOworICAgICAgICBBU1NFUlQoa2luZCA9
PSBDb2RlRm9yQ2FsbCk7CisgICAgICAgIAorICAgICAgICBvbGRDb2RlQmxvY2sgPSBleGVjdXRh
YmxlLT5tX3Byb2dyYW1Db2RlQmxvY2s7CisgICAgICAgIGV4ZWN1dGFibGUtPm1fcHJvZ3JhbUNv
ZGVCbG9jayA9IGNvZGVCbG9jazsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAg
ICBjYXNlIEV2YWxDb2RlOiB7CisgICAgICAgIEV2YWxFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0g
anNDYXN0PEV2YWxFeGVjdXRhYmxlKj4odGhpcyk7CisgICAgICAgIEV2YWxDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9IHN0YXRpY19jYXN0PEV2YWxDb2RlQmxvY2sqPihnZW5lcmljQ29kZUJsb2NrKTsK
KyAgICAgICAgCisgICAgICAgIEFTU0VSVCghY29kZUJsb2NrLT5qaXRDb2RlV2l0aEFyaXR5Q2hl
Y2soKSk7CisgICAgICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDYWxsKTsKKyAgICAgICAgCisg
ICAgICAgIG9sZENvZGVCbG9jayA9IGV4ZWN1dGFibGUtPm1fZXZhbENvZGVCbG9jazsKKyAgICAg
ICAgZXhlY3V0YWJsZS0+bV9ldmFsQ29kZUJsb2NrID0gY29kZUJsb2NrOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgRnVuY3Rpb25Db2RlOiB7CisgICAgICAgIEZ1
bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUq
Pih0aGlzKTsKKyAgICAgICAgRnVuY3Rpb25Db2RlQmxvY2sqIGNvZGVCbG9jayA9IHN0YXRpY19j
YXN0PEZ1bmN0aW9uQ29kZUJsb2NrKj4oZ2VuZXJpY0NvZGVCbG9jayk7CisgICAgICAgIAorICAg
ICAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICAgICAgY2FzZSBDb2RlRm9yQ2FsbDoKKyAgICAgICAg
ICAgIG9sZENvZGVCbG9jayA9IGV4ZWN1dGFibGUtPm1fY29kZUJsb2NrRm9yQ2FsbDsKKyAgICAg
ICAgICAgIGV4ZWN1dGFibGUtPm1fY29kZUJsb2NrRm9yQ2FsbCA9IGNvZGVCbG9jazsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvZGVGb3JDb25zdHJ1Y3Q6CisgICAgICAgICAg
ICBvbGRDb2RlQmxvY2sgPSBleGVjdXRhYmxlLT5tX2NvZGVCbG9ja0ZvckNvbnN0cnVjdDsKKyAg
ICAgICAgICAgIGV4ZWN1dGFibGUtPm1fY29kZUJsb2NrRm9yQ29uc3RydWN0ID0gY29kZUJsb2Nr
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfSB9
CisKKyAgICBpZiAob2xkQ29kZUJsb2NrKQorICAgICAgICBvbGRDb2RlQmxvY2stPnVubGlua0lu
Y29taW5nQ2FsbHMoKTsKK30KKworUGFzc1JlZlB0cjxDb2RlQmxvY2s+IFNjcmlwdEV4ZWN1dGFi
bGU6Om5ld0NvZGVCbG9ja0ZvcigKKyAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIEpT
U2NvcGUqIHNjb3BlLCBKU09iamVjdComIGV4Y2VwdGlvbikKK3sKKyAgICBWTSogdm0gPSBzY29w
ZS0+dm0oKTsKKworICAgIEFTU0VSVCh2bS0+aGVhcC5pc0RlZmVycmVkKCkpOworICAgIAorICAg
IGlmIChjbGFzc0luZm8oKSA9PSBFdmFsRXhlY3V0YWJsZTo6aW5mbygpKSB7CisgICAgICAgIEV2
YWxFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PEV2YWxFeGVjdXRhYmxlKj4odGhpcyk7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNhbGwpOworICAgICAgICBS
RUxFQVNFX0FTU0VSVCghZXhlY3V0YWJsZS0+bV9ldmFsQ29kZUJsb2NrKTsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBFdmFsQ29kZUJsb2NrKAorICAgICAgICAgICAgZXhlY3V0YWJsZSwg
ZXhlY3V0YWJsZS0+bV91bmxpbmtlZEV2YWxDb2RlQmxvY2suZ2V0KCksIHNjb3BlLAorICAgICAg
ICAgICAgZXhlY3V0YWJsZS0+c291cmNlKCkucHJvdmlkZXIoKSkpOworICAgIH0KKyAgICAKKyAg
ICBpZiAoY2xhc3NJbmZvKCkgPT0gUHJvZ3JhbUV4ZWN1dGFibGU6OmluZm8oKSkgeworICAgICAg
ICBQcm9ncmFtRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxQcm9ncmFtRXhlY3V0YWJs
ZSo+KHRoaXMpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChraW5kID09IENvZGVGb3JDYWxsKTsK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWV4ZWN1dGFibGUtPm1fcHJvZ3JhbUNvZGVCbG9jayk7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUHJvZ3JhbUNvZGVCbG9jaygKKyAgICAgICAg
ICAgIGV4ZWN1dGFibGUsIGV4ZWN1dGFibGUtPm1fdW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLmdl
dCgpLCBzY29wZSwKKyAgICAgICAgICAgIGV4ZWN1dGFibGUtPnNvdXJjZSgpLnByb3ZpZGVyKCks
IGV4ZWN1dGFibGUtPnNvdXJjZSgpLnN0YXJ0Q29sdW1uKCkpKTsKKyAgICB9CisgICAgCisgICAg
UkVMRUFTRV9BU1NFUlQoY2xhc3NJbmZvKCkgPT0gRnVuY3Rpb25FeGVjdXRhYmxlOjppbmZvKCkp
OworICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxGdW5jdGlvbkV4
ZWN1dGFibGUqPih0aGlzKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghZXhlY3V0YWJsZS0+Y29kZUJs
b2NrRm9yKGtpbmQpKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NvcGUt
Pmdsb2JhbE9iamVjdCgpOworICAgIFBhcnNlckVycm9yIGVycm9yOworICAgIERlYnVnZ2VyTW9k
ZSBkZWJ1Z2dlck1vZGUgPSBnbG9iYWxPYmplY3QtPmhhc0RlYnVnZ2VyKCkgPyBEZWJ1Z2dlck9u
IDogRGVidWdnZXJPZmY7CisgICAgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSA9IGdsb2JhbE9i
amVjdC0+aGFzUHJvZmlsZXIoKSA/IFByb2ZpbGVyT24gOiBQcm9maWxlck9mZjsKKyAgICBVbmxp
bmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jayA9CisgICAgICAgIGV4ZWN1
dGFibGUtPm1fdW5saW5rZWRFeGVjdXRhYmxlLT5jb2RlQmxvY2tGb3IoCisgICAgICAgICAgICAq
dm0sIGV4ZWN1dGFibGUtPm1fc291cmNlLCBraW5kLCBkZWJ1Z2dlck1vZGUsIHByb2ZpbGVyTW9k
ZSwgZXJyb3IpOworICAgIGlmICghdW5saW5rZWRDb2RlQmxvY2spIHsKKyAgICAgICAgZXhjZXB0
aW9uID0gZXJyb3IudG9FcnJvck9iamVjdChnbG9iYWxPYmplY3QsIGV4ZWN1dGFibGUtPm1fc291
cmNlKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAgIFNvdXJjZVByb3ZpZGVy
KiBwcm92aWRlciA9IGV4ZWN1dGFibGUtPnNvdXJjZSgpLnByb3ZpZGVyKCk7CisgICAgdW5zaWdu
ZWQgc291cmNlT2Zmc2V0ID0gZXhlY3V0YWJsZS0+c291cmNlKCkuc3RhcnRPZmZzZXQoKTsKKyAg
ICB1bnNpZ25lZCBzdGFydENvbHVtbiA9IGV4ZWN1dGFibGUtPnNvdXJjZSgpLnN0YXJ0Q29sdW1u
KCk7CisKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZ1bmN0aW9uQ29kZUJsb2NrKAorICAgICAg
ICBleGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUsIHByb3ZpZGVyLCBzb3VyY2VP
ZmZzZXQsIHN0YXJ0Q29sdW1uKSk7Cit9CisKK1Bhc3NSZWZQdHI8Q29kZUJsb2NrPiBTY3JpcHRF
eGVjdXRhYmxlOjpuZXdSZXBsYWNlbWVudENvZGVCbG9ja0ZvcigKKyAgICBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kIGtpbmQpCit7CisgICAgaWYgKGNsYXNzSW5mbygpID09IEV2YWxFeGVjdXRhYmxl
OjppbmZvKCkpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoa2luZCA9PSBDb2RlRm9yQ2FsbCk7
CisgICAgICAgIEV2YWxFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PEV2YWxFeGVjdXRh
YmxlKj4odGhpcyk7CisgICAgICAgIFJlZlB0cjxFdmFsQ29kZUJsb2NrPiByZXN1bHQgPSBhZG9w
dFJlZihuZXcgRXZhbENvZGVCbG9jaygKKyAgICAgICAgICAgIENvZGVCbG9jazo6Q29weVBhcnNl
ZEJsb2NrLCAqZXhlY3V0YWJsZS0+bV9ldmFsQ29kZUJsb2NrKSk7CisgICAgICAgIHJlc3VsdC0+
c2V0QWx0ZXJuYXRpdmUoZXhlY3V0YWJsZS0+bV9ldmFsQ29kZUJsb2NrKTsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgaWYgKGNsYXNzSW5mbygpID09IFByb2dyYW1F
eGVjdXRhYmxlOjppbmZvKCkpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoa2luZCA9PSBDb2Rl
Rm9yQ2FsbCk7CisgICAgICAgIFByb2dyYW1FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0
PFByb2dyYW1FeGVjdXRhYmxlKj4odGhpcyk7CisgICAgICAgIFJlZlB0cjxQcm9ncmFtQ29kZUJs
b2NrPiByZXN1bHQgPSBhZG9wdFJlZihuZXcgUHJvZ3JhbUNvZGVCbG9jaygKKyAgICAgICAgICAg
IENvZGVCbG9jazo6Q29weVBhcnNlZEJsb2NrLCAqZXhlY3V0YWJsZS0+bV9wcm9ncmFtQ29kZUJs
b2NrKSk7CisgICAgICAgIHJlc3VsdC0+c2V0QWx0ZXJuYXRpdmUoZXhlY3V0YWJsZS0+bV9wcm9n
cmFtQ29kZUJsb2NrKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBSRUxF
QVNFX0FTU0VSVChjbGFzc0luZm8oKSA9PSBGdW5jdGlvbkV4ZWN1dGFibGU6OmluZm8oKSk7Cisg
ICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0
YWJsZSo+KHRoaXMpOworICAgIFJlZlB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gcmVzdWx0ID0gYWRv
cHRSZWYobmV3IEZ1bmN0aW9uQ29kZUJsb2NrKAorICAgICAgICBDb2RlQmxvY2s6OkNvcHlQYXJz
ZWRCbG9jaywgKmV4ZWN1dGFibGUtPmNvZGVCbG9ja0ZvcihraW5kKSkpOworICAgIHJlc3VsdC0+
c2V0QWx0ZXJuYXRpdmUoZXhlY3V0YWJsZS0+Y29kZUJsb2NrRm9yKGtpbmQpKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitKU09iamVjdCogU2NyaXB0RXhlY3V0YWJsZTo6cHJlcGFyZUZvckV4
ZWN1dGlvbkltcGwoCisgICAgRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSwgQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCBraW5kKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
RGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOworICAgIAorICAgIEpTT2JqZWN0KiBleGNlcHRpb24g
PSAwOworICAgIFJlZlB0cjxDb2RlQmxvY2s+IGNvZGVCbG9jayA9IG5ld0NvZGVCbG9ja0Zvcihr
aW5kLCBzY29wZSwgZXhjZXB0aW9uKTsKKyAgICBpZiAoIWNvZGVCbG9jaykgeworICAgICAgICBS
RUxFQVNFX0FTU0VSVChleGNlcHRpb24pOworICAgICAgICByZXR1cm4gZXhjZXB0aW9uOworICAg
IH0KKyAgICAKKyAgICBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGU7CisjaWYgRU5BQkxFKExMSU5U
KQorICAgIGppdFR5cGUgPSBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rOworI2Vsc2UKKyAgICBq
aXRUeXBlID0gSklUQ29kZTo6QmFzZWxpbmVKSVQ7CisjZW5kaWYKKyAgICBjb2RlQmxvY2stPnBy
ZXBhcmVGb3JFeGVjdXRpb24oZXhlYywgaml0VHlwZSk7CisKKyAgICBpbnN0YWxsQ29kZShjb2Rl
QmxvY2suZ2V0KCkpOworICAgIHJldHVybiAwOworfQorCiBjb25zdCBDbGFzc0luZm8gRXZhbEV4
ZWN1dGFibGU6OnNfaW5mbyA9IHsgIkV2YWxFeGVjdXRhYmxlIiwgJlNjcmlwdEV4ZWN1dGFibGU6
OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShFdmFsRXhlY3V0YWJsZSkgfTsKIAog
RXZhbEV4ZWN1dGFibGUqIEV2YWxFeGVjdXRhYmxlOjpjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIGJvb2wgaXNJblN0cmljdENvbnRleHQpIApAQCAtMTc2
LDI4ICszNTYsNiBAQCB2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZGVzdHJveShKU0NlbGwqCiAg
ICAgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oY2VsbCktPkZ1bmN0aW9uRXhlY3V0
YWJsZTo6fkZ1bmN0aW9uRXhlY3V0YWJsZSgpOwogfQogCi0jaWYgRU5BQkxFKERGR19KSVQpCi1K
U09iamVjdCogRXZhbEV4ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiBleGVj
LCBKU1Njb3BlKiBzY29wZSwgQ29tcGlsYXRpb25SZXN1bHQmIHJlc3VsdCwgdW5zaWduZWQgYnl0
ZWNvZGVJbmRleCkKLXsKLSAgICBBU1NFUlQoZXhlYy0+dm0oKS5keW5hbWljR2xvYmFsT2JqZWN0
KTsKLSAgICBBU1NFUlQoISFtX2V2YWxDb2RlQmxvY2spOwotICAgIEpTT2JqZWN0KiBlcnJvciA9
IDA7Ci0gICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQobV9ldmFsQ29kZUJsb2NrLT5q
aXRUeXBlKCkpKQotICAgICAgICBlcnJvciA9IGNvbXBpbGVJbnRlcm5hbChleGVjLCBzY29wZSwg
SklUQ29kZTo6bmV4dFRpZXJKSVQobV9ldmFsQ29kZUJsb2NrLT5qaXRUeXBlKCkpLCAmcmVzdWx0
LCBieXRlY29kZUluZGV4KTsKLSAgICBlbHNlCi0gICAgICAgIHJlc3VsdCA9IENvbXBpbGF0aW9u
Tm90TmVlZGVkOwotICAgIEFTU0VSVCghIW1fZXZhbENvZGVCbG9jayk7Ci0gICAgcmV0dXJuIGVy
cm9yOwotfQotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotCi0jaWYgRU5BQkxFKEpJVCkKLUNv
bXBpbGF0aW9uUmVzdWx0IEV2YWxFeGVjdXRhYmxlOjpqaXRDb21waWxlKEV4ZWNTdGF0ZSogZXhl
YykKLXsKLSAgICByZXR1cm4gaml0Q29tcGlsZUlmQXBwcm9wcmlhdGUoZXhlYywgbV9ldmFsQ29k
ZUJsb2NrLmdldCgpLCBtX2ppdENvZGVGb3JDYWxsLCBKSVRDb2RlOjpib3R0b21UaWVySklUKCks
IFVJTlRfTUFYLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwotfQotI2VuZGlmCi0KIGlubGluZSBj
b25zdCBjaGFyKiBzYW1wbGluZ0Rlc2NyaXB0aW9uKEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSkK
IHsKICAgICBzd2l0Y2ggKGppdFR5cGUpIHsKQEAgLTIxNSwzOSArMzczLDYgQEAgaW5saW5lIGNv
bnN0IGNoYXIqIHNhbXBsaW5nRGVzY3JpcHRpb24oSgogICAgIH0KIH0KIAotSlNPYmplY3QqIEV2
YWxFeGVjdXRhYmxlOjpjb21waWxlSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBz
Y29wZSwgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlLCBDb21waWxhdGlvblJlc3VsdCogcmVzdWx0
LCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQotewotICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5n
UmVnaW9uKHNhbXBsaW5nRGVzY3JpcHRpb24oaml0VHlwZSkpOwotICAgIAotICAgIGlmIChyZXN1
bHQpCi0gICAgICAgICpyZXN1bHQgPSBDb21waWxhdGlvbkZhaWxlZDsKLSAgICAKLSAgICBSZWZQ
dHI8RXZhbENvZGVCbG9jaz4gbmV3Q29kZUJsb2NrOwotICAgIAotICAgIGlmICghIW1fZXZhbENv
ZGVCbG9jaykgewotICAgICAgICBuZXdDb2RlQmxvY2sgPSBhZG9wdFJlZihuZXcgRXZhbENvZGVC
bG9jayhDb2RlQmxvY2s6OkNvcHlQYXJzZWRCbG9jaywgKm1fZXZhbENvZGVCbG9jaykpOwotICAg
ICAgICBuZXdDb2RlQmxvY2stPnNldEFsdGVybmF0aXZlKHN0YXRpY19wb2ludGVyX2Nhc3Q8Q29k
ZUJsb2NrPihtX2V2YWxDb2RlQmxvY2spKTsKLSAgICB9IGVsc2UgewotICAgICAgICBuZXdDb2Rl
QmxvY2sgPSBhZG9wdFJlZihuZXcgRXZhbENvZGVCbG9jayh0aGlzLCBtX3VubGlua2VkRXZhbENv
ZGVCbG9jay5nZXQoKSwgc2NvcGUsIHNvdXJjZSgpLnByb3ZpZGVyKCkpKTsKLSAgICAgICAgQVNT
RVJUKChqaXRUeXBlID09IEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSkgPT0gIW1fZXZhbENvZGVC
bG9jayk7Ci0gICAgfQotCi0gICAgQ29tcGlsYXRpb25SZXN1bHQgdGhlUmVzdWx0ID0gcHJlcGFy
ZUZvckV4ZWN1dGlvbigKLSAgICAgICAgZXhlYywgbV9ldmFsQ29kZUJsb2NrLCBuZXdDb2RlQmxv
Y2suZ2V0KCksIG1faml0Q29kZUZvckNhbGwsIGppdFR5cGUsIGJ5dGVjb2RlSW5kZXgpOwotICAg
IGlmIChyZXN1bHQpCi0gICAgICAgICpyZXN1bHQgPSB0aGVSZXN1bHQ7Ci0KLSAgICByZXR1cm4g
MDsKLX0KLQotI2lmIEVOQUJMRShERkdfSklUKQotQ29tcGlsYXRpb25SZXN1bHQgRXZhbEV4ZWN1
dGFibGU6OnJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlKFBhc3NSZWZQdHI8REZHOjpQ
bGFuPiBwbGFuKQotewotICAgIHJldHVybiBKU0M6OnJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6
ZWRDb2RlKAotICAgICAgICBwbGFuLCBtX2V2YWxDb2RlQmxvY2ssIG1faml0Q29kZUZvckNhbGws
IDAsIDApOwotfQotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotCiAjaWYgRU5BQkxFKEpJVCkK
IHZvaWQgRXZhbEV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZShWTSYgdm0pCiB7CkBA
IC0yOTgsNjAgKzQyMyw2IEBAIEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6Y2hlY2tTeW50
YXgKICAgICByZXR1cm4gZXJyb3IudG9FcnJvck9iamVjdChsZXhpY2FsR2xvYmFsT2JqZWN0LCBt
X3NvdXJjZSk7CiB9CiAKLSNpZiBFTkFCTEUoREZHX0pJVCkKLUpTT2JqZWN0KiBQcm9ncmFtRXhl
Y3V0YWJsZTo6Y29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3Bl
LCBDb21waWxhdGlvblJlc3VsdCYgcmVzdWx0LCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQotewot
ICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMtPnZtKCkuZHluYW1pY0dsb2JhbE9iamVjdCk7Ci0gICAg
QVNTRVJUKCEhbV9wcm9ncmFtQ29kZUJsb2NrKTsKLSAgICBKU09iamVjdCogZXJyb3IgPSAwOwot
ICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKG1fcHJvZ3JhbUNvZGVCbG9jay0+aml0
VHlwZSgpKSkKLSAgICAgICAgZXJyb3IgPSBjb21waWxlSW50ZXJuYWwoZXhlYywgc2NvcGUsIEpJ
VENvZGU6Om5leHRUaWVySklUKG1fcHJvZ3JhbUNvZGVCbG9jay0+aml0VHlwZSgpKSwgJnJlc3Vs
dCwgYnl0ZWNvZGVJbmRleCk7Ci0gICAgZWxzZQotICAgICAgICByZXN1bHQgPSBDb21waWxhdGlv
bk5vdE5lZWRlZDsKLSAgICBBU1NFUlQoISFtX3Byb2dyYW1Db2RlQmxvY2spOwotICAgIHJldHVy
biBlcnJvcjsKLX0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLQotI2lmIEVOQUJMRShKSVQp
Ci1Db21waWxhdGlvblJlc3VsdCBQcm9ncmFtRXhlY3V0YWJsZTo6aml0Q29tcGlsZShFeGVjU3Rh
dGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGppdENvbXBpbGVJZkFwcHJvcHJpYXRlKGV4ZWMsIG1f
cHJvZ3JhbUNvZGVCbG9jay5nZXQoKSwgbV9qaXRDb2RlRm9yQ2FsbCwgSklUQ29kZTo6Ym90dG9t
VGllckpJVCgpLCBVSU5UX01BWCwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKLX0KLSNlbmRpZgot
Ci1KU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hbChFeGVjU3RhdGUq
IGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUsIENvbXBpbGF0
aW9uUmVzdWx0KiByZXN1bHQsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAgU2FtcGxp
bmdSZWdpb24gc2FtcGxpbmdSZWdpb24oc2FtcGxpbmdEZXNjcmlwdGlvbihqaXRUeXBlKSk7Ci0g
ICAgCi0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgKnJlc3VsdCA9IENvbXBpbGF0aW9uRmFpbGVk
OwotICAgIAotICAgIFJlZlB0cjxQcm9ncmFtQ29kZUJsb2NrPiBuZXdDb2RlQmxvY2s7Ci0gICAg
Ci0gICAgaWYgKCEhbV9wcm9ncmFtQ29kZUJsb2NrKSB7Ci0gICAgICAgIG5ld0NvZGVCbG9jayA9
IGFkb3B0UmVmKG5ldyBQcm9ncmFtQ29kZUJsb2NrKENvZGVCbG9jazo6Q29weVBhcnNlZEJsb2Nr
LCAqbV9wcm9ncmFtQ29kZUJsb2NrKSk7Ci0gICAgICAgIG5ld0NvZGVCbG9jay0+c2V0QWx0ZXJu
YXRpdmUoc3RhdGljX3BvaW50ZXJfY2FzdDxDb2RlQmxvY2s+KG1fcHJvZ3JhbUNvZGVCbG9jaykp
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG5ld0NvZGVCbG9jayA9IGFkb3B0UmVmKG5ldyBQcm9n
cmFtQ29kZUJsb2NrKHRoaXMsIG1fdW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLmdldCgpLCBzY29w
ZSwgc291cmNlKCkucHJvdmlkZXIoKSwgc291cmNlKCkuc3RhcnRDb2x1bW4oKSkpOwotICAgIH0K
LQotICAgIENvbXBpbGF0aW9uUmVzdWx0IHRoZVJlc3VsdCA9IHByZXBhcmVGb3JFeGVjdXRpb24o
Ci0gICAgICAgIGV4ZWMsIG1fcHJvZ3JhbUNvZGVCbG9jaywgbmV3Q29kZUJsb2NrLmdldCgpLCBt
X2ppdENvZGVGb3JDYWxsLCBqaXRUeXBlLCBieXRlY29kZUluZGV4KTsKLSAgICBpZiAocmVzdWx0
KQotICAgICAgICAqcmVzdWx0ID0gdGhlUmVzdWx0OwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLSNp
ZiBFTkFCTEUoREZHX0pJVCkKLUNvbXBpbGF0aW9uUmVzdWx0IFByb2dyYW1FeGVjdXRhYmxlOjpy
ZXBsYWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZShQYXNzUmVmUHRyPERGRzo6UGxhbj4gcGxh
bikKLXsKLSAgICByZXR1cm4gSlNDOjpyZXBsYWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZSgK
LSAgICAgICAgcGxhbiwgbV9wcm9ncmFtQ29kZUJsb2NrLCBtX2ppdENvZGVGb3JDYWxsLCAwLCAw
KTsKLX0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLQogI2lmIEVOQUJMRShKSVQpCiB2b2lk
IFByb2dyYW1FeGVjdXRhYmxlOjpqZXR0aXNvbk9wdGltaXplZENvZGUoVk0mIHZtKQogewpAQCAt
NDQ0LDE0MSArNTE1LDYgQEAgRnVuY3Rpb25Db2RlQmxvY2sqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6
YgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLSNpZiBFTkFCTEUoREZHX0pJVCkKLUpTT2JqZWN0
KiBGdW5jdGlvbkV4ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWRGb3JDYWxsKEV4ZWNTdGF0ZSog
ZXhlYywgSlNTY29wZSogc2NvcGUsIENvbXBpbGF0aW9uUmVzdWx0JiByZXN1bHQsIHVuc2lnbmVk
IGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAgUkVMRUFTRV9BU1NFUlQoZXhlYy0+dm0oKS5keW5hbWlj
R2xvYmFsT2JqZWN0KTsKLSAgICBBU1NFUlQoISFtX2NvZGVCbG9ja0ZvckNhbGwpOwotICAgIEpT
T2JqZWN0KiBlcnJvciA9IDA7Ci0gICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQobV9j
b2RlQmxvY2tGb3JDYWxsLT5qaXRUeXBlKCkpKQotICAgICAgICBlcnJvciA9IGNvbXBpbGVGb3JD
YWxsSW50ZXJuYWwoZXhlYywgc2NvcGUsIEpJVENvZGU6Om5leHRUaWVySklUKG1fY29kZUJsb2Nr
Rm9yQ2FsbC0+aml0VHlwZSgpKSwgJnJlc3VsdCwgYnl0ZWNvZGVJbmRleCk7Ci0gICAgZWxzZQot
ICAgICAgICByZXN1bHQgPSBDb21waWxhdGlvbk5vdE5lZWRlZDsKLSAgICBBU1NFUlQoISFtX2Nv
ZGVCbG9ja0ZvckNhbGwpOwotICAgIHJldHVybiBlcnJvcjsKLX0KLQotSlNPYmplY3QqIEZ1bmN0
aW9uRXhlY3V0YWJsZTo6Y29tcGlsZU9wdGltaXplZEZvckNvbnN0cnVjdChFeGVjU3RhdGUqIGV4
ZWMsIEpTU2NvcGUqIHNjb3BlLCBDb21waWxhdGlvblJlc3VsdCYgcmVzdWx0LCB1bnNpZ25lZCBi
eXRlY29kZUluZGV4KQotewotICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMtPnZtKCkuZHluYW1pY0ds
b2JhbE9iamVjdCk7Ci0gICAgQVNTRVJUKCEhbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpOwotICAg
IEpTT2JqZWN0KiBlcnJvciA9IDA7Ci0gICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQo
bV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPmppdFR5cGUoKSkpCi0gICAgICAgIGVycm9yID0gY29t
cGlsZUZvckNvbnN0cnVjdEludGVybmFsKGV4ZWMsIHNjb3BlLCBKSVRDb2RlOjpuZXh0VGllckpJ
VChtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+aml0VHlwZSgpKSwgJnJlc3VsdCwgYnl0ZWNvZGVJ
bmRleCk7Ci0gICAgZWxzZQotICAgICAgICByZXN1bHQgPSBDb21waWxhdGlvbk5vdE5lZWRlZDsK
LSAgICBBU1NFUlQoISFtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCk7Ci0gICAgcmV0dXJuIGVycm9y
OwotfQotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotCi0jaWYgRU5BQkxFKEpJVCkKLUNvbXBp
bGF0aW9uUmVzdWx0IEZ1bmN0aW9uRXhlY3V0YWJsZTo6aml0Q29tcGlsZUZvckNhbGwoRXhlY1N0
YXRlKiBleGVjKQotewotICAgIHJldHVybiBqaXRDb21waWxlRnVuY3Rpb25JZkFwcHJvcHJpYXRl
KGV4ZWMsIG1fY29kZUJsb2NrRm9yQ2FsbC5nZXQoKSwgbV9qaXRDb2RlRm9yQ2FsbCwgbV9qaXRD
b2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrLCBKSVRDb2RlOjpib3R0b21UaWVySklUKCksIFVJTlRf
TUFYLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwotfQotCi1Db21waWxhdGlvblJlc3VsdCBGdW5j
dGlvbkV4ZWN1dGFibGU6OmppdENvbXBpbGVGb3JDb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjKQot
ewotICAgIHJldHVybiBqaXRDb21waWxlRnVuY3Rpb25JZkFwcHJvcHJpYXRlKGV4ZWMsIG1fY29k
ZUJsb2NrRm9yQ29uc3RydWN0LmdldCgpLCBtX2ppdENvZGVGb3JDb25zdHJ1Y3QsIG1faml0Q29k
ZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrLCBKSVRDb2RlOjpib3R0b21UaWVySklUKCksIFVJ
TlRfTUFYLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwotfQotI2VuZGlmCi0KLVBhc3NSZWZQdHI8
RnVuY3Rpb25Db2RlQmxvY2s+IEZ1bmN0aW9uRXhlY3V0YWJsZTo6cHJvZHVjZUNvZGVCbG9ja0Zv
cihKU1Njb3BlKiBzY29wZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBzcGVjaWFsaXphdGlvbktp
bmQsIEpTT2JqZWN0KiYgZXhjZXB0aW9uKQotewotICAgIFJlZlB0cjxGdW5jdGlvbkNvZGVCbG9j
az4gYWx0ZXJuYXRpdmUgPSBjb2RlQmxvY2tGb3Ioc3BlY2lhbGl6YXRpb25LaW5kKTsKLSAgICAK
LSAgICBpZiAoISFhbHRlcm5hdGl2ZSkgewotICAgICAgICBSZWZQdHI8RnVuY3Rpb25Db2RlQmxv
Y2s+IHJlc3VsdCA9IGFkb3B0UmVmKG5ldyBGdW5jdGlvbkNvZGVCbG9jayhDb2RlQmxvY2s6OkNv
cHlQYXJzZWRCbG9jaywgKmNvZGVCbG9ja0ZvcihzcGVjaWFsaXphdGlvbktpbmQpKSk7Ci0gICAg
ICAgIHJlc3VsdC0+c2V0QWx0ZXJuYXRpdmUoYWx0ZXJuYXRpdmUpOwotICAgICAgICByZXR1cm4g
cmVzdWx0LnJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICBWTSogdm0gPSBzY29wZS0+dm0oKTsKLSAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NvcGUtPmdsb2JhbE9iamVjdCgpOwot
ICAgIFBhcnNlckVycm9yIGVycm9yOwotICAgIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUgPSBn
bG9iYWxPYmplY3QtPmhhc0RlYnVnZ2VyKCkgPyBEZWJ1Z2dlck9uIDogRGVidWdnZXJPZmY7Ci0g
ICAgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSA9IGdsb2JhbE9iamVjdC0+aGFzUHJvZmlsZXIo
KSA/IFByb2ZpbGVyT24gOiBQcm9maWxlck9mZjsKLSAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJs
b2NrKiB1bmxpbmtlZENvZGVCbG9jayA9IG1fdW5saW5rZWRFeGVjdXRhYmxlLT5jb2RlQmxvY2tG
b3IoKnZtLCBtX3NvdXJjZSwgc3BlY2lhbGl6YXRpb25LaW5kLCBkZWJ1Z2dlck1vZGUsIHByb2Zp
bGVyTW9kZSwgZXJyb3IpOwotICAgIHJlY29yZFBhcnNlKG1fdW5saW5rZWRFeGVjdXRhYmxlLT5m
ZWF0dXJlcygpLCBtX3VubGlua2VkRXhlY3V0YWJsZS0+aGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSwg
bGluZU5vKCksIGxhc3RMaW5lKCksIHN0YXJ0Q29sdW1uKCkpOwotCi0gICAgaWYgKCF1bmxpbmtl
ZENvZGVCbG9jaykgewotICAgICAgICBleGNlcHRpb24gPSBlcnJvci50b0Vycm9yT2JqZWN0KGds
b2JhbE9iamVjdCwgbV9zb3VyY2UpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBT
b3VyY2VQcm92aWRlciogcHJvdmlkZXIgPSBzb3VyY2UoKS5wcm92aWRlcigpOwotICAgIHVuc2ln
bmVkIHNvdXJjZU9mZnNldCA9IHNvdXJjZSgpLnN0YXJ0T2Zmc2V0KCk7Ci0gICAgdW5zaWduZWQg
c3RhcnRDb2x1bW4gPSBzb3VyY2UoKS5zdGFydENvbHVtbigpOwotCi0gICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBGdW5jdGlvbkNvZGVCbG9jayh0aGlzLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUs
IHByb3ZpZGVyLCBzb3VyY2VPZmZzZXQsIHN0YXJ0Q29sdW1uKSk7Ci19Ci0KLQotSlNPYmplY3Qq
IEZ1bmN0aW9uRXhlY3V0YWJsZTo6Y29tcGlsZUZvckNhbGxJbnRlcm5hbChFeGVjU3RhdGUqIGV4
ZWMsIEpTU2NvcGUqIHNjb3BlLCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUsIENvbXBpbGF0aW9u
UmVzdWx0KiByZXN1bHQsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAgU2FtcGxpbmdS
ZWdpb24gc2FtcGxpbmdSZWdpb24oc2FtcGxpbmdEZXNjcmlwdGlvbihqaXRUeXBlKSk7Ci0gICAg
Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgKnJlc3VsdCA9IENvbXBpbGF0aW9uRmFpbGVkOwot
ICAgIAotICAgIEFTU0VSVCgoaml0VHlwZSA9PSBKSVRDb2RlOjpib3R0b21UaWVySklUKCkpID09
ICFtX2NvZGVCbG9ja0ZvckNhbGwpOwotICAgIEpTT2JqZWN0KiBleGNlcHRpb24gPSAwOwotICAg
IAotICAgIFJlZlB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gbmV3Q29kZUJsb2NrID0gcHJvZHVjZUNv
ZGVCbG9ja0ZvcihzY29wZSwgQ29kZUZvckNhbGwsIGV4Y2VwdGlvbik7Ci0gICAgaWYgKCFuZXdD
b2RlQmxvY2spCi0gICAgICAgIHJldHVybiBleGNlcHRpb247Ci0gICAgCi0gICAgQ29tcGlsYXRp
b25SZXN1bHQgdGhlUmVzdWx0ID0gcHJlcGFyZUZ1bmN0aW9uRm9yRXhlY3V0aW9uKAotICAgICAg
ICBleGVjLCBtX2NvZGVCbG9ja0ZvckNhbGwsIG5ld0NvZGVCbG9jay5nZXQoKSwgbV9qaXRDb2Rl
Rm9yQ2FsbCwKLSAgICAgICAgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrLCBtX251bVBh
cmFtZXRlcnNGb3JDYWxsLCBqaXRUeXBlLAotICAgICAgICBieXRlY29kZUluZGV4LCBDb2RlRm9y
Q2FsbCk7Ci0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgKnJlc3VsdCA9IHRoZVJlc3VsdDsKLSAg
ICByZXR1cm4gMDsKLX0KLQotI2lmIEVOQUJMRShERkdfSklUKQotQ29tcGlsYXRpb25SZXN1bHQg
RnVuY3Rpb25FeGVjdXRhYmxlOjpyZXBsYWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZUZvckNh
bGwoUGFzc1JlZlB0cjxERkc6OlBsYW4+IHBsYW4pCi17Ci0gICAgcmV0dXJuIEpTQzo6cmVwbGFj
ZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGUoCi0gICAgICAgIHBsYW4sIG1fY29kZUJsb2NrRm9y
Q2FsbCwgbV9qaXRDb2RlRm9yQ2FsbCwgJm1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjaywK
LSAgICAgICAgJm1fbnVtUGFyYW1ldGVyc0ZvckNhbGwpOwotfQotI2VuZGlmIC8vIEVOQUJMRShE
RkdfSklUKQotCi1KU09iamVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ29uc3Ry
dWN0SW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSwgSklUQ29kZTo6SklU
VHlwZSBqaXRUeXBlLCBDb21waWxhdGlvblJlc3VsdCogcmVzdWx0LCB1bnNpZ25lZCBieXRlY29k
ZUluZGV4KQotewotICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKHNhbXBsaW5nRGVz
Y3JpcHRpb24oaml0VHlwZSkpOwotICAgIAotICAgIGlmIChyZXN1bHQpCi0gICAgICAgICpyZXN1
bHQgPSBDb21waWxhdGlvbkZhaWxlZDsKLSAgICAKLSAgICBBU1NFUlQoKGppdFR5cGUgPT0gSklU
Q29kZTo6Ym90dG9tVGllckpJVCgpKSA9PSAhbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpOwotICAg
IEpTT2JqZWN0KiBleGNlcHRpb24gPSAwOwotICAgIFJlZlB0cjxGdW5jdGlvbkNvZGVCbG9jaz4g
bmV3Q29kZUJsb2NrID0gcHJvZHVjZUNvZGVCbG9ja0ZvcihzY29wZSwgQ29kZUZvckNvbnN0cnVj
dCwgZXhjZXB0aW9uKTsKLSAgICBpZiAoIW5ld0NvZGVCbG9jaykKLSAgICAgICAgcmV0dXJuIGV4
Y2VwdGlvbjsKLQotICAgIENvbXBpbGF0aW9uUmVzdWx0IHRoZVJlc3VsdCA9IHByZXBhcmVGdW5j
dGlvbkZvckV4ZWN1dGlvbigKLSAgICAgICAgZXhlYywgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Qs
IG5ld0NvZGVCbG9jay5nZXQoKSwgbV9qaXRDb2RlRm9yQ29uc3RydWN0LAotICAgICAgICBtX2pp
dENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJpdHlDaGVjaywgbV9udW1QYXJhbWV0ZXJzRm9yQ29uc3Ry
dWN0LCBqaXRUeXBlLAotICAgICAgICBieXRlY29kZUluZGV4LCBDb2RlRm9yQ29uc3RydWN0KTsK
LSAgICBpZiAocmVzdWx0KQotICAgICAgICAqcmVzdWx0ID0gdGhlUmVzdWx0OwotCi0gICAgcmV0
dXJuIDA7Ci19Ci0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLUNvbXBpbGF0aW9uUmVzdWx0IEZ1bmN0
aW9uRXhlY3V0YWJsZTo6cmVwbGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGVGb3JDb25zdHJ1
Y3QoUGFzc1JlZlB0cjxERkc6OlBsYW4+IHBsYW4pCi17Ci0gICAgcmV0dXJuIEpTQzo6cmVwbGFj
ZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGUoCi0gICAgICAgIHBsYW4sIG1fY29kZUJsb2NrRm9y
Q29uc3RydWN0LCBtX2ppdENvZGVGb3JDb25zdHJ1Y3QsCi0gICAgICAgICZtX2ppdENvZGVGb3JD
b25zdHJ1Y3RXaXRoQXJpdHlDaGVjaywgJm1fbnVtUGFyYW1ldGVyc0ZvckNvbnN0cnVjdCk7Ci19
Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0KICNpZiBFTkFCTEUoSklUKQogdm9pZCBGdW5j
dGlvbkV4ZWN1dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZUZvckNhbGwoVk0mIHZtKQogewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkocmV2aXNp
b24gMTU0NzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNDQsNiArMjQ0LDcgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gTExJbnQ6OkNMb29wOjpjYXRjaFJvdXRpbmVGb3IoY2F0Y2hQQ0ZvckludGVycHJldGVyKTsK
ICNlbmRpZgogICAgIH0KKyAgICAKICNlbmRpZiAvLyBFTkFCTEUoSklUIHx8IEVOQUJMRShMTElO
VF9DX0xPT1ApCiAKIHByb3RlY3RlZDoKQEAgLTQwMiw2ICs0MDMsMjAgQEAgcHVibGljOgogICAg
ICAgICBtX3N0YXJ0Q29sdW1uID0gc3RhcnRDb2x1bW47CiAgICAgfQogCisgICAgdm9pZCBpbnN0
YWxsQ29kZShDb2RlQmxvY2sqKTsKKyAgICBQYXNzUmVmUHRyPENvZGVCbG9jaz4gbmV3Q29kZUJs
b2NrRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQsIEpTU2NvcGUqLCBKU09iamVjdComIGV4Y2Vw
dGlvbik7CisgICAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+IG5ld1JlcGxhY2VtZW50Q29kZUJsb2Nr
Rm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQpOworICAgIAorICAgIEpTT2JqZWN0KiBwcmVwYXJl
Rm9yRXhlY3V0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUsIENvZGVTcGVjaWFs
aXphdGlvbktpbmQga2luZCkKKyAgICB7CisgICAgICAgIGlmIChoYXNKSVRDb2RlRm9yKGtpbmQp
KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBwcmVwYXJlRm9yRXhlY3V0
aW9uSW1wbChleGVjLCBzY29wZSwga2luZCk7CisgICAgfQorCitwcml2YXRlOgorICAgIEpTT2Jq
ZWN0KiBwcmVwYXJlRm9yRXhlY3V0aW9uSW1wbChFeGVjU3RhdGUqLCBKU1Njb3BlKiwgQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCk7CisKIHByb3RlY3RlZDoKICAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KFZNJiB2bSkKICAgICB7CkBAIC00MzAsMjQgKzQ0NSw4IEBAIHB1YmxpYzoKIAogICAgIHN0YXRp
YyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKLSAgICBKU09iamVjdCogY29tcGlsZShFeGVjU3Rh
dGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlKQotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQo
ZXhlYy0+dm0oKS5keW5hbWljR2xvYmFsT2JqZWN0KTsKLSAgICAgICAgSlNPYmplY3QqIGVycm9y
ID0gMDsKLSAgICAgICAgaWYgKCFtX2V2YWxDb2RlQmxvY2spCi0gICAgICAgICAgICBlcnJvciA9
IGNvbXBpbGVJbnRlcm5hbChleGVjLCBzY29wZSwgSklUQ29kZTo6Ym90dG9tVGllckpJVCgpKTsK
LSAgICAgICAgQVNTRVJUKCFlcnJvciA9PSAhIW1fZXZhbENvZGVCbG9jayk7Ci0gICAgICAgIHJl
dHVybiBlcnJvcjsKLSAgICB9Ci0gICAgICAgIAotI2lmIEVOQUJMRShERkdfSklUKQotICAgIEpT
T2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBDb21waWxhdGlv
blJlc3VsdCYsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwotICAgIENvbXBpbGF0aW9uUmVzdWx0
IHJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlKFBhc3NSZWZQdHI8REZHOjpQbGFuPik7
Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0gICAgICAgIAogI2lmIEVOQUJMRShKSVQpCiAg
ICAgdm9pZCBqZXR0aXNvbk9wdGltaXplZENvZGUoVk0mKTsKLSAgICBDb21waWxhdGlvblJlc3Vs
dCBqaXRDb21waWxlKEV4ZWNTdGF0ZSopOwogI2VuZGlmCiAKICAgICBFdmFsQ29kZUJsb2NrJiBn
ZW5lcmF0ZWRCeXRlY29kZSgpCkBAIC00ODEsMTAgKzQ4MCwxMCBAQCBwdWJsaWM6CiAgICAgdW5z
aWduZWQgbnVtYmVyT2ZGdW5jdGlvbkRlY2xzKCkgeyByZXR1cm4gbV91bmxpbmtlZEV2YWxDb2Rl
QmxvY2stPm51bWJlck9mRnVuY3Rpb25EZWNscygpOyB9CiAKIHByaXZhdGU6CisgICAgZnJpZW5k
IGNsYXNzIFNjcmlwdEV4ZWN1dGFibGU7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IFNjcmlwdEV4ZWN1dGFibGU6OlN0
cnVjdHVyZUZsYWdzOwogICAgIEV2YWxFeGVjdXRhYmxlKEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJj
ZUNvZGUmLCBib29sKTsKIAotICAgIEpTT2JqZWN0KiBjb21waWxlSW50ZXJuYWwoRXhlY1N0YXRl
KiwgSlNTY29wZSosIEpJVENvZGU6OkpJVFR5cGUsIENvbXBpbGF0aW9uUmVzdWx0KiA9IDAsIHVu
c2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBVSU5UX01BWCk7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAgUmVmUHRyPEV2YWxDb2RlQmxv
Y2s+IG1fZXZhbENvZGVCbG9jazsKQEAgLTUwOCwyNCArNTA3LDggQEAgcHVibGljOgogCiAgICAg
c3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAotICAgIEpTT2JqZWN0KiBjb21waWxlKEV4
ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUpCi0gICAgewotICAgICAgICBSRUxFQVNFX0FT
U0VSVChleGVjLT52bSgpLmR5bmFtaWNHbG9iYWxPYmplY3QpOwotICAgICAgICBKU09iamVjdCog
ZXJyb3IgPSAwOwotICAgICAgICBpZiAoIW1fcHJvZ3JhbUNvZGVCbG9jaykKLSAgICAgICAgICAg
IGVycm9yID0gY29tcGlsZUludGVybmFsKGV4ZWMsIHNjb3BlLCBKSVRDb2RlOjpib3R0b21UaWVy
SklUKCkpOwotICAgICAgICBBU1NFUlQoIWVycm9yID09ICEhbV9wcm9ncmFtQ29kZUJsb2NrKTsK
LSAgICAgICAgcmV0dXJuIGVycm9yOwotICAgIH0KLQotI2lmIEVOQUJMRShERkdfSklUKQotICAg
IEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBDb21waWxh
dGlvblJlc3VsdCYsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwotICAgIENvbXBpbGF0aW9uUmVz
dWx0IHJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlKFBhc3NSZWZQdHI8REZHOjpQbGFu
Pik7Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0gICAgICAgIAogI2lmIEVOQUJMRShKSVQp
CiAgICAgdm9pZCBqZXR0aXNvbk9wdGltaXplZENvZGUoVk0mKTsKLSAgICBDb21waWxhdGlvblJl
c3VsdCBqaXRDb21waWxlKEV4ZWNTdGF0ZSopOwogI2VuZGlmCiAKICAgICBQcm9ncmFtQ29kZUJs
b2NrJiBnZW5lcmF0ZWRCeXRlY29kZSgpCkBAIC01NTcsMTEgKzU0MCwxMiBAQCBwdWJsaWM6CiAg
ICAgRXhlY3V0YWJsZUluZm8gZXhlY3V0YWJsZUluZm8oKSBjb25zdCB7IHJldHVybiBFeGVjdXRh
YmxlSW5mbyhuZWVkc0FjdGl2YXRpb24oKSwgdXNlc0V2YWwoKSwgaXNTdHJpY3RNb2RlKCksIGZh
bHNlKTsgfQogCiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBTY3JpcHRFeGVjdXRhYmxlOwor
ICAgIAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRl
c1Zpc2l0Q2hpbGRyZW4gfCBTY3JpcHRFeGVjdXRhYmxlOjpTdHJ1Y3R1cmVGbGFnczsKIAogICAg
IFByb2dyYW1FeGVjdXRhYmxlKEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmKTsKIAotICAg
IEpTT2JqZWN0KiBjb21waWxlSW50ZXJuYWwoRXhlY1N0YXRlKiwgSlNTY29wZSosIEpJVENvZGU6
OkpJVFR5cGUsIENvbXBpbGF0aW9uUmVzdWx0KiA9IDAsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgg
PSBVSU5UX01BWCk7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOwogCiAgICAgV3JpdGVCYXJyaWVyPFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jaz4g
bV91bmxpbmtlZFByb2dyYW1Db2RlQmxvY2s7CkBAIC02MDAsMjYgKzU4NCw4IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuICptX2NvZGVCbG9ja0ZvckNvbnN0cnVjdDsKICAgICB9CiAgICAgICAg
IAotICAgIFBhc3NSZWZQdHI8RnVuY3Rpb25Db2RlQmxvY2s+IHByb2R1Y2VDb2RlQmxvY2tGb3Io
SlNTY29wZSosIENvZGVTcGVjaWFsaXphdGlvbktpbmQsIEpTT2JqZWN0KiYgZXhjZXB0aW9uKTsK
LQotICAgIEpTT2JqZWN0KiBjb21waWxlRm9yQ2FsbChFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUq
IHNjb3BlKQotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoZXhlYy0+dm0oKS5keW5hbWlj
R2xvYmFsT2JqZWN0KTsKLSAgICAgICAgSlNPYmplY3QqIGVycm9yID0gMDsKLSAgICAgICAgaWYg
KCFtX2NvZGVCbG9ja0ZvckNhbGwpCi0gICAgICAgICAgICBlcnJvciA9IGNvbXBpbGVGb3JDYWxs
SW50ZXJuYWwoZXhlYywgc2NvcGUsIEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSk7Ci0gICAgICAg
IEFTU0VSVCghZXJyb3IgPT0gISFtX2NvZGVCbG9ja0ZvckNhbGwpOwotICAgICAgICByZXR1cm4g
ZXJyb3I7Ci0gICAgfQotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgSlNPYmplY3QqIGNvbXBp
bGVPcHRpbWl6ZWRGb3JDYWxsKEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBDb21waWxhdGlvblJlc3Vs
dCYsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwotICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlcGxh
Y2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlRm9yQ2FsbChQYXNzUmVmUHRyPERGRzo6UGxhbj4p
OwotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotICAgICAgICAKICNpZiBFTkFCTEUoSklUKQog
ICAgIHZvaWQgamV0dGlzb25PcHRpbWl6ZWRDb2RlRm9yQ2FsbChWTSYpOwotICAgIENvbXBpbGF0
aW9uUmVzdWx0IGppdENvbXBpbGVGb3JDYWxsKEV4ZWNTdGF0ZSopOwogI2VuZGlmCiAKICAgICBi
b29sIGlzR2VuZXJhdGVkRm9yQ2FsbCgpIGNvbnN0CkBAIC02MzMsMjQgKzU5OSw4IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuICptX2NvZGVCbG9ja0ZvckNhbGw7CiAgICAgfQogCi0gICAgSlNP
YmplY3QqIGNvbXBpbGVGb3JDb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29w
ZSkKLSAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMtPnZtKCkuZHluYW1pY0dsb2Jh
bE9iamVjdCk7Ci0gICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IDA7Ci0gICAgICAgIGlmICghbV9j
b2RlQmxvY2tGb3JDb25zdHJ1Y3QpCi0gICAgICAgICAgICBlcnJvciA9IGNvbXBpbGVGb3JDb25z
dHJ1Y3RJbnRlcm5hbChleGVjLCBzY29wZSwgSklUQ29kZTo6Ym90dG9tVGllckpJVCgpKTsKLSAg
ICAgICAgQVNTRVJUKCFlcnJvciA9PSAhIW1fY29kZUJsb2NrRm9yQ29uc3RydWN0KTsKLSAgICAg
ICAgcmV0dXJuIGVycm9yOwotICAgIH0KLQotI2lmIEVOQUJMRShERkdfSklUKQotICAgIEpTT2Jq
ZWN0KiBjb21waWxlT3B0aW1pemVkRm9yQ29uc3RydWN0KEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBD
b21waWxhdGlvblJlc3VsdCYsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwotICAgIENvbXBpbGF0
aW9uUmVzdWx0IHJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlRm9yQ29uc3RydWN0KFBh
c3NSZWZQdHI8REZHOjpQbGFuPik7Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0gICAgICAg
IAogI2lmIEVOQUJMRShKSVQpCiAgICAgdm9pZCBqZXR0aXNvbk9wdGltaXplZENvZGVGb3JDb25z
dHJ1Y3QoVk0mKTsKLSAgICBDb21waWxhdGlvblJlc3VsdCBqaXRDb21waWxlRm9yQ29uc3RydWN0
KEV4ZWNTdGF0ZSopOwogI2VuZGlmCiAKICAgICBib29sIGlzR2VuZXJhdGVkRm9yQ29uc3RydWN0
KCkgY29uc3QKQEAgLTY2NCwzOSArNjE0LDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gKm1f
Y29kZUJsb2NrRm9yQ29uc3RydWN0OwogICAgIH0KICAgICAgICAgCi0gICAgSlNPYmplY3QqIGNv
bXBpbGVGb3IoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSwgQ29kZVNwZWNpYWxpemF0
aW9uS2luZCBraW5kKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGV4ZWMtPmNhbGxlZSgpKTsKLSAg
ICAgICAgQVNTRVJUKGV4ZWMtPmNhbGxlZSgpLT5pbmhlcml0cyhKU0Z1bmN0aW9uOjppbmZvKCkp
KTsKLSAgICAgICAgQVNTRVJUKGpzQ2FzdDxKU0Z1bmN0aW9uKj4oZXhlYy0+Y2FsbGVlKCkpLT5q
c0V4ZWN1dGFibGUoKSA9PSB0aGlzKTsKLQotICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2Fs
bCkKLSAgICAgICAgICAgIHJldHVybiBjb21waWxlRm9yQ2FsbChleGVjLCBzY29wZSk7Ci0gICAg
ICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOwotICAgICAgICByZXR1cm4gY29t
cGlsZUZvckNvbnN0cnVjdChleGVjLCBzY29wZSk7Ci0gICAgfQotICAgICAgICAKLSNpZiBFTkFC
TEUoREZHX0pJVCkKLSAgICBKU09iamVjdCogY29tcGlsZU9wdGltaXplZEZvcihFeGVjU3RhdGUq
IGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCBDb21waWxhdGlvblJlc3VsdCYgcmVzdWx0LCB1bnNpZ25l
ZCBieXRlY29kZUluZGV4LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCi0gICAgewotICAg
ICAgICBBU1NFUlQoZXhlYy0+Y2FsbGVlKCkpOwotICAgICAgICBBU1NFUlQoZXhlYy0+Y2FsbGVl
KCktPmluaGVyaXRzKEpTRnVuY3Rpb246OmluZm8oKSkpOwotICAgICAgICBBU1NFUlQoanNDYXN0
PEpTRnVuY3Rpb24qPihleGVjLT5jYWxsZWUoKSktPmpzRXhlY3V0YWJsZSgpID09IHRoaXMpOwot
ICAgICAgICAgICAgCi0gICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQotICAgICAgICAg
ICAgcmV0dXJuIGNvbXBpbGVPcHRpbWl6ZWRGb3JDYWxsKGV4ZWMsIHNjb3BlLCByZXN1bHQsIGJ5
dGVjb2RlSW5kZXgpOwotICAgICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsK
LSAgICAgICAgcmV0dXJuIGNvbXBpbGVPcHRpbWl6ZWRGb3JDb25zdHJ1Y3QoZXhlYywgc2NvcGUs
IHJlc3VsdCwgYnl0ZWNvZGVJbmRleCk7Ci0gICAgfQotICAgICAgICAKLSAgICBDb21waWxhdGlv
blJlc3VsdCByZXBsYWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZUZvcihQYXNzUmVmUHRyPERG
Rzo6UGxhbj4gcGxhbiwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQotICAgIHsKLSAgICAg
ICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCi0gICAgICAgICAgICByZXR1cm4gcmVwbGFjZVdp
dGhEZWZlcnJlZE9wdGltaXplZENvZGVGb3JDYWxsKHBsYW4pOwotICAgICAgICByZXR1cm4gcmVw
bGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGVGb3JDb25zdHJ1Y3QocGxhbik7Ci0gICAgfQot
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotCiAjaWYgRU5BQkxFKEpJVCkKICAgICB2b2lkIGpl
dHRpc29uT3B0aW1pemVkQ29kZUZvcihWTSYgdm0sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2lu
ZCkKICAgICB7CkBAIC03MDcsMTQgKzYyNCw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGpldHRp
c29uT3B0aW1pemVkQ29kZUZvckNvbnN0cnVjdCh2bSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAg
ICAgIAotICAgIENvbXBpbGF0aW9uUmVzdWx0IGppdENvbXBpbGVGb3IoRXhlY1N0YXRlKiBleGVj
LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCi0gICAgewotICAgICAgICBpZiAoa2luZCA9
PSBDb2RlRm9yQ2FsbCkKLSAgICAgICAgICAgIHJldHVybiBqaXRDb21waWxlRm9yQ2FsbChleGVj
KTsKLSAgICAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7Ci0gICAgICAgIHJl
dHVybiBqaXRDb21waWxlRm9yQ29uc3RydWN0KGV4ZWMpOwotICAgIH0KICNlbmRpZgogICAgICAg
ICAKICAgICBib29sIGlzR2VuZXJhdGVkRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkK
QEAgLTc2NCw5ICs2NzMsNiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEZ1bmN0aW9uRXhlY3V0
YWJsZShWTSYsIGNvbnN0IFNvdXJjZUNvZGUmLCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSos
IHVuc2lnbmVkIGZpcnN0TGluZSwgdW5zaWduZWQgbGFzdExpbmUsIHVuc2lnbmVkIHN0YXJ0Q29s
dW1uKTsKIAotICAgIEpTT2JqZWN0KiBjb21waWxlRm9yQ2FsbEludGVybmFsKEV4ZWNTdGF0ZSos
IEpTU2NvcGUqLCBKSVRDb2RlOjpKSVRUeXBlLCBDb21waWxhdGlvblJlc3VsdCogPSAwLCB1bnNp
Z25lZCBieXRlY29kZUluZGV4ID0gVUlOVF9NQVgpOwotICAgIEpTT2JqZWN0KiBjb21waWxlRm9y
Q29uc3RydWN0SW50ZXJuYWwoRXhlY1N0YXRlKiwgSlNTY29wZSosIEpJVENvZGU6OkpJVFR5cGUs
IENvbXBpbGF0aW9uUmVzdWx0KiA9IDAsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBVSU5UX01B
WCk7Ci0gICAgICAgIAogICAgIFJlZlB0cjxGdW5jdGlvbkNvZGVCbG9jaz4mIGNvZGVCbG9ja0Zv
cihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiAgICAgewogICAgICAgICBpZiAoa2luZCA9
PSBDb2RlRm9yQ2FsbCkKQEAgLTc4Niw2ICs2OTIsOCBAQCBwcml2YXRlOgogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogCisgICAgZnJpZW5kIGNsYXNzIFNjcmlwdEV4ZWN1dGFibGU7CisK
ICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNWaXNp
dENoaWxkcmVuIHwgU2NyaXB0RXhlY3V0YWJsZTo6U3RydWN0dXJlRmxhZ3M7CiAgICAgV3JpdGVC
YXJyaWVyPFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlPiBtX3VubGlua2VkRXhlY3V0YWJsZTsK
ICAgICBSZWZQdHI8RnVuY3Rpb25Db2RlQmxvY2s+IG1fY29kZUJsb2NrRm9yQ2FsbDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGlvbkhhcm5lc3MuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRpb25IYXJuZXNzLmgJ
KHJldmlzaW9uIDE1NDcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1
dGlvbkhhcm5lc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxNjcgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEV4ZWN1
dGlvbkhhcm5lc3NfaAotI2RlZmluZSBFeGVjdXRpb25IYXJuZXNzX2gKLQotI2luY2x1ZGUgPHd0
Zi9QbGF0Zm9ybS5oPgotCi0jaW5jbHVkZSAiQ29tcGlsYXRpb25SZXN1bHQuaCIKLSNpbmNsdWRl
ICJERkdEcml2ZXIuaCIKLSNpbmNsdWRlICJERkdQbGFuLmgiCi0jaW5jbHVkZSAiSklURHJpdmVy
LmgiCi0jaW5jbHVkZSAiTExJbnRFbnRyeXBvaW50cy5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KLWlubGluZSBDb21waWxhdGlvblJlc3Vs
dCBwcmVwYXJlRm9yRXhlY3V0aW9uSW1wbCgKLSAgICBFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9j
a1R5cGUqIGNvZGVCbG9jaywgUmVmUHRyPEpJVENvZGU+JiBqaXRDb2RlLAotICAgIEpJVENvZGU6
OkpJVFR5cGUgaml0VHlwZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKLXsKLSAgICBVTlVTRURf
UEFSQU0oYnl0ZWNvZGVJbmRleCk7Ci0jaWYgRU5BQkxFKExMSU5UKQotICAgIGlmIChKSVRDb2Rl
Ojppc0Jhc2VsaW5lQ29kZShqaXRUeXBlKSkgewotICAgICAgICAvLyBTdGFydCBvZmYgaW4gdGhl
IGxvdyBsZXZlbCBpbnRlcnByZXRlci4KLSAgICAgICAgTExJbnQ6OmdldEVudHJ5cG9pbnQoZXhl
Yy0+dm0oKSwgY29kZUJsb2NrLCBqaXRDb2RlKTsKLSAgICAgICAgaWYgKGV4ZWMtPnZtKCkubV9w
ZXJCeXRlY29kZVByb2ZpbGVyKQotICAgICAgICAgICAgZXhlYy0+dm0oKS5tX3BlckJ5dGVjb2Rl
UHJvZmlsZXItPmVuc3VyZUJ5dGVjb2Rlc0Zvcihjb2RlQmxvY2spOwotICAgICAgICByZXR1cm4g
Q29tcGlsYXRpb25TdWNjZXNzZnVsOwotICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUoTExJTlQpCi0j
aWYgRU5BQkxFKEpJVCkKLSAgICByZXR1cm4gaml0Q29tcGlsZUlmQXBwcm9wcmlhdGVJbXBsKAot
ICAgICAgICBleGVjLCBjb2RlQmxvY2ssIGppdENvZGUsIGppdFR5cGUsIGJ5dGVjb2RlSW5kZXgs
Ci0gICAgICAgIEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGppdFR5cGUpID8gSklUQ29tcGlsYXRp
b25NdXN0U3VjY2VlZCA6IEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7Ci0jZW5kaWYKLSAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBDb21waWxhdGlvbkZhaWxlZDsK
LX0KLQotaW5saW5lIENvbXBpbGF0aW9uUmVzdWx0IHByZXBhcmVGdW5jdGlvbkZvckV4ZWN1dGlv
bkltcGwoCi0gICAgRXhlY1N0YXRlKiBleGVjLCBGdW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2Nr
LCBSZWZQdHI8SklUQ29kZT4mIGppdENvZGUsCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBq
aXRDb2RlV2l0aEFyaXR5Q2hlY2ssIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSwKLSAgICB1bnNp
Z25lZCBieXRlY29kZUluZGV4LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCi17Ci0gICAg
VU5VU0VEX1BBUkFNKGJ5dGVjb2RlSW5kZXgpOwotICAgIFVOVVNFRF9QQVJBTShqaXRDb2RlV2l0
aEFyaXR5Q2hlY2spOwotI2lmIEVOQUJMRShMTElOVCkKLSAgICBpZiAoSklUQ29kZTo6aXNCYXNl
bGluZUNvZGUoaml0VHlwZSkpIHsKLSAgICAgICAgLy8gU3RhcnQgb2ZmIGluIHRoZSBsb3cgbGV2
ZWwgaW50ZXJwcmV0ZXIuCi0gICAgICAgIExMSW50OjpnZXRGdW5jdGlvbkVudHJ5cG9pbnQoZXhl
Yy0+dm0oKSwga2luZCwgaml0Q29kZSwgaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKLSAgICAgICAg
aWYgKGV4ZWMtPnZtKCkubV9wZXJCeXRlY29kZVByb2ZpbGVyKQotICAgICAgICAgICAgZXhlYy0+
dm0oKS5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmVuc3VyZUJ5dGVjb2Rlc0Zvcihjb2RlQmxvY2sp
OwotICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25TdWNjZXNzZnVsOwotICAgIH0KLSNlbHNlCi0g
ICAgVU5VU0VEX1BBUkFNKGtpbmQpOwotI2VuZGlmIC8vIEVOQUJMRShMTElOVCkKLSNpZiBFTkFC
TEUoSklUKQotICAgIHJldHVybiBqaXRDb21waWxlRnVuY3Rpb25JZkFwcHJvcHJpYXRlSW1wbCgK
LSAgICAgICAgZXhlYywgY29kZUJsb2NrLCBqaXRDb2RlLCBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ss
IGppdFR5cGUsIGJ5dGVjb2RlSW5kZXgsCi0gICAgICAgIEpJVENvZGU6OmlzQmFzZWxpbmVDb2Rl
KGppdFR5cGUpID8gSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCA6IEpJVENvbXBpbGF0aW9uQ2Fu
RmFpbCk7Ci0jZW5kaWYKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJl
dHVybiBDb21waWxhdGlvbkZhaWxlZDsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2Nr
VHlwZT4KLWlubGluZSBDb21waWxhdGlvblJlc3VsdCBpbnN0YWxsT3B0aW1pemVkQ29kZSgKLSAg
ICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQsIFJlZlB0cjxDb2RlQmxvY2tUeXBlPiYgc2luaywg
Q29kZUJsb2NrVHlwZSogY29kZUJsb2NrLAotICAgIFBhc3NSZWZQdHI8SklUQ29kZT4gaml0Q29k
ZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGppdENvZGVXaXRoQXJpdHlDaGVjaywKLSAgICBpbnQq
IG51bVBhcmFtZXRlcnMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGppdENvZGVXaXRoQXJpdHlDaGVj
ayk7Ci0gICAgaWYgKHJlc3VsdCAhPSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpCi0gICAgICAgIHJl
dHVybiByZXN1bHQ7Ci0gICAgCi0jaWYgRU5BQkxFKEpJVCkKLSAgICBjb2RlQmxvY2stPnNldEpJ
VENvZGUoaml0Q29kZSwgaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKLSNlbmRpZgotCi0gICAgc2lu
ayA9IGNvZGVCbG9jazsKLSAgICAKLSAgICBpZiAobnVtUGFyYW1ldGVycykKLSAgICAgICAgKm51
bVBhcmFtZXRlcnMgPSBjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsKLSAgICAKLSAgICBpZiAo
aml0Q29kZSkKLSAgICAgICAgY29kZUJsb2NrLT52bSgpLT5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5
Q29zdChzaXplb2YoKmNvZGVCbG9jaykgKyBqaXRDb2RlLT5zaXplKCkpOwotICAgIGVsc2UKLSAg
ICAgICAgY29kZUJsb2NrLT52bSgpLT5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29zdChzaXplb2Yo
KmNvZGVCbG9jaykpOwotICAgIAotICAgIGlmIChzaW5rICE9IGNvZGVCbG9jaykgewotICAgICAg
ICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgd2UgR0MgYW5kIGRlY2lkZSB0aGF0IHRoZSBjb2RlIGlz
IGludmFsaWQuCi0gICAgICAgIHJldHVybiBDb21waWxhdGlvbkludmFsaWRhdGVkOwotICAgIH0K
LSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxv
Y2tUeXBlPgotaW5saW5lIENvbXBpbGF0aW9uUmVzdWx0IHByZXBhcmVGb3JFeGVjdXRpb24oCi0g
ICAgRXhlY1N0YXRlKiBleGVjLCBSZWZQdHI8Q29kZUJsb2NrVHlwZT4mIHNpbmssIENvZGVCbG9j
a1R5cGUqIGNvZGVCbG9jaywKLSAgICBSZWZQdHI8SklUQ29kZT4mIGppdENvZGUsIEpJVENvZGU6
OkpJVFR5cGUgaml0VHlwZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKLXsKLSAgICBDb21waWxh
dGlvblJlc3VsdCByZXN1bHQgPSBwcmVwYXJlRm9yRXhlY3V0aW9uSW1wbChleGVjLCBjb2RlQmxv
Y2ssIGppdENvZGUsIGppdFR5cGUsIGJ5dGVjb2RlSW5kZXgpOwotICAgIHJldHVybiBpbnN0YWxs
T3B0aW1pemVkQ29kZShyZXN1bHQsIHNpbmssIGNvZGVCbG9jaywgaml0Q29kZSwgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyKCksIDApOwotfQotCi1pbmxpbmUgQ29tcGlsYXRpb25SZXN1bHQgcHJlcGFy
ZUZ1bmN0aW9uRm9yRXhlY3V0aW9uKAotICAgIEV4ZWNTdGF0ZSogZXhlYywgUmVmUHRyPEZ1bmN0
aW9uQ29kZUJsb2NrPiYgc2luaywgRnVuY3Rpb25Db2RlQmxvY2sqIGNvZGVCbG9jaywKLSAgICBS
ZWZQdHI8SklUQ29kZT4mIGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgaml0Q29kZVdp
dGhBcml0eUNoZWNrLAotICAgIGludCYgbnVtUGFyYW1ldGVycywgSklUQ29kZTo6SklUVHlwZSBq
aXRUeXBlLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LAotICAgIENvZGVTcGVjaWFsaXphdGlvbktp
bmQga2luZCkKLXsKLSAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBwcmVwYXJlRnVuY3Rp
b25Gb3JFeGVjdXRpb25JbXBsKGV4ZWMsIGNvZGVCbG9jaywKLSAgICAgICAgaml0Q29kZSwgaml0
Q29kZVdpdGhBcml0eUNoZWNrLCBqaXRUeXBlLCBieXRlY29kZUluZGV4LCBraW5kKTsKLSAgICBy
ZXR1cm4gaW5zdGFsbE9wdGltaXplZENvZGUocmVzdWx0LCBzaW5rLCBjb2RlQmxvY2ssIGppdENv
ZGUsIGppdENvZGVXaXRoQXJpdHlDaGVjaywgJm51bVBhcmFtZXRlcnMpOwotfQotCi0jaWYgRU5B
QkxFKERGR19KSVQpCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgotaW5saW5lIENv
bXBpbGF0aW9uUmVzdWx0IHJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlKAotICAgIFBh
c3NSZWZQdHI8REZHOjpQbGFuPiBwYXNzZWRQbGFuLCBSZWZQdHI8Q29kZUJsb2NrVHlwZT4mIHNp
bmssIFJlZlB0cjxKSVRDb2RlPiYgaml0Q29kZSwKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIq
IGppdENvZGVXaXRoQXJpdHlDaGVjaywgaW50KiBudW1QYXJhbWV0ZXJzKQotewotICAgIFJlZlB0
cjxERkc6OlBsYW4+IHBsYW4gPSBwYXNzZWRQbGFuOwotICAgIENvbXBpbGF0aW9uUmVzdWx0IHJl
c3VsdCA9IERGRzo6dHJ5RmluYWxpemVQbGFuKHBsYW4sIGppdENvZGUsIGppdENvZGVXaXRoQXJp
dHlDaGVjayk7Ci0gICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgewotICAgICAgICBkYXRh
TG9nKAotICAgICAgICAgICAgIkRlZmVycmVkIG9wdGltaXppbmcgY29tcGlsYXRpb24gIiwgKnBs
YW4tPmtleSgpLCAiIC0+ICIsICpwbGFuLT5jb2RlQmxvY2ssCi0gICAgICAgICAgICAiIHJlc3Vs
dDogIiwgcmVzdWx0LCAiXG4iKTsKLSAgICB9Ci0gICAgaWYgKHJlc3VsdCA9PSBDb21waWxhdGlv
blN1Y2Nlc3NmdWwpCi0gICAgICAgIHBsYW4tPmNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+dW5s
aW5rSW5jb21pbmdDYWxscygpOwotICAgIHJldHVybiBpbnN0YWxsT3B0aW1pemVkQ29kZSgKLSAg
ICAgICAgcmVzdWx0LCBzaW5rLCBzdGF0aWNfY2FzdDxDb2RlQmxvY2tUeXBlKj4ocGxhbi0+Y29k
ZUJsb2NrLmdldCgpKSwgaml0Q29kZSwKLSAgICAgICAgaml0Q29kZVdpdGhBcml0eUNoZWNrID8g
KmppdENvZGVXaXRoQXJpdHlDaGVjayA6IE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpLAotICAgICAg
ICBudW1QYXJhbWV0ZXJzKTsKLX0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLQotfSAvLyBu
YW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBFeGVjdXRpb25IYXJuZXNzX2gKLQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>209846</attachid>
            <date>2013-08-27 21:48:33 -0700</date>
            <delta_ts>2013-08-28 08:39:46 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>121784</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU0NzIyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3NSBA
QAorMjAxMy0wOC0yNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IENvZGVCbG9jayBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIHNob3VsZCBiZSBzaW1wbGlm
aWVkIGFuZCByYXRpb25hbGl6ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEyMDMyNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorICAgICAgICAKKyAgICAgICAgUHJldmlvdXNseSBFeGVjdXRhYmxlIG93bmVkIHRoZSBjb2Rl
IGZvciBnZW5lcmF0aW5nIEpJVCBjb2RlOyB5b3UgYWx3YXlzIGhhZAorICAgICAgICB0byBnbyB0
aHJvdWdoIEV4ZWN1dGFibGUuIEJ1dCBvZnRlbiB5b3UgYWxzbyBoYWQgdG8gZ28gdGhyb3VnaCBD
b2RlQmxvY2ssCisgICAgICAgIGJlY2F1c2UgU2NyaXB0RXhlY3V0YWJsZSBjb3VsZG4ndCBoYXZl
IHZpcnR1YWwgbWV0aG9kcywgYnV0IENvZGVCbG9jayBjb3VsZC4KKyAgICAgICAgU28geW91J2Qg
YXNrIENvZGVCbG9jayB0byBkbyBzb21ldGhpbmcsIHdoaWNoIHdvdWxkIGRpc3BhdGNoIHRocm91
Z2ggYQorICAgICAgICB2aXJ0dWFsIG1ldGhvZCB0aGF0IHdvdWxkIHNlbGVjdCB0aGUgYXBwcm9w
cmlhdGUgRXhlY3V0YWJsZSBzdWJ0eXBlJ3MgbWV0aG9kLgorICAgICAgICBUaGlzIGFsbCBtZWFu
dCB0aGF0IHRoZSBzYW1lIGNvZGUgd291bGQgb2Z0ZW4gYmUgZHVwbGljYXRlZCwgYmVjYXVzZSBt
b3N0IG9mCisgICAgICAgIHRoZSB3b3JrIG5lZWRlZCB0byBjb21waWxlIHNvbWV0aGluZyB3YXMg
aWRlbnRpY2FsIHJlZ2FyZGxlc3Mgb2YgY29kZSB0eXBlLgorICAgICAgICBCdXQgdGhlbiB3ZSB0
cmllZCB0byBmaXggdGhpcywgYnkgaGF2aW5nIHRlbXBsYXRpemVkIGhlbHBlcnMgaW4KKyAgICAg
ICAgRXhlY3V0aW9uSGFybmVzcy5oIGFuZCBKSVREcml2ZXIuaC4gVGhlIHJlc3VsdCB3YXMgdGhh
dCBpZiB5b3Ugd2FudGVkIHRvIGZpbmQKKyAgICAgICAgb3V0IHdoYXQgaGFwcGVuZWQgd2hlbiB5
b3UgYXNrZWQgZm9yIHNvbWV0aGluZyB0byBiZSBjb21waWxlZCwgeW91J2QgZ28gb24gYQorICAg
ICAgICB3aWxkIHJpZGUgdGhhdCBzdGFydGVkIHdpdGggQ29kZUJsb2NrLCB0b3VjaGVkIHVwb24g
RXhlY3V0YWJsZSwgYW5kIHRoZW4KKyAgICAgICAgcmljb2NoZXRlZCBpbnRvIGVpdGhlciBFeGVj
dXRpb25IYXJuZXNzIG9yIEpJVERyaXZlciAobGlrZWx5IGJvdGgpLgorICAgICAgICAKKyAgICAg
ICAgQW5vdGhlciBhd2t3YXJkbmVzcyB3YXMgdGhhdCBmb3IgY29uY3VycmVudCBjb21waWxlcywg
dGhlIERGRzo6V29ya2xpc3QgaGFkCisgICAgICAgIHN1cGVyLXNwZWNpYWwgaW5zaWRlIGtub3ds
ZWRnZSBvZiB3aGF0IEpJVFN0dWJzLmNwcCdzIGN0aV9vcHRpbWl6ZSB3b3VsZCBoYXZlCisgICAg
ICAgIGRvbmUgb25jZSB0aGUgY29tcGlsYXRpb24gZmluaXNoZWQuCisgICAgICAgIAorICAgICAg
ICBBbHNvLCBtb3N0IG9mIHRoZSBERkcgSklUIGRyaXZlcnMgYXNzdW1lZCB0aGF0IHRoZXkgY291
bGRuJ3QgaW5zdGFsbCB0aGUKKyAgICAgICAgSklUQ29kZSBpbnRvIHRoZSBDb2RlQmxvY2sgZGly
ZWN0bHkgLSBpbnN0ZWFkIHRoZXkgd291bGQgcmV0dXJuIGl0IHZpYSBhCisgICAgICAgIHJlZmVy
ZW5jZSwgd2hpY2ggaGFwcGVuZWQgdG8gYmUgYSByZWZlcmVuY2UgdG8gdGhlIEpJVENvZGUgcG9p
bnRlciBpbgorICAgICAgICBFeGVjdXRhYmxlLiBUaGlzIHdhcyBzdXBlciB3ZWlyZC4KKyAgICAg
ICAgCisgICAgICAgIEZpbmFsbHksIHRoZXJlIHdhcyBubyBub3Rpb24gb2YgY29tcGlsaW5nIGNv
ZGUgaW50byBhIHNwZWNpYWwgQ29kZUJsb2NrIHRoYXQKKyAgICAgICAgd2Fzbid0IHVzZWQgZm9y
IGhhbmRsaW5nIGNhbGxzIGludG8gYW4gRXhlY3V0YWJsZS4gSSdkIGxpa2UgdGhpcyBmb3IgRlRM
IE9TUgorICAgICAgICBlbnRyeS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggc29sdmVz
IHRoZXNlIHByb2JsZW1zIGJ5IHJlZHVjaW5nIGFsbCBvZiB0aGF0IGNvbXBsZXhpdHkgaW50byBq
dXN0CisgICAgICAgIHRocmVlIHByaW1pdGl2ZXM6CisgICAgICAgIAorICAgICAgICAtIEV4ZWN1
dGFibGU6Om5ld0NvZGVCbG9jaygpLiBUaGlzIGdpdmVzIHlvdSBhIG5ldyBjb2RlIGJsb2NrLCBl
aXRoZXIgZm9yIGNhbGwKKyAgICAgICAgICBvciBmb3IgY29uc3RydWN0LCBhbmQgZWl0aGVyIHRv
IHNlcnZlIGFzIHRoZSBiYXNlbGluZSBjb2RlIG9yIHRoZSBvcHRpbWl6ZWQKKyAgICAgICAgICBj
b2RlLiBUaGUgbmV3IGNvZGUgYmxvY2sgaXMgdGhlbiBvd25lZCBieSB0aGUgY2FsbGVyOyBFeGVj
dXRhYmxlIGRvZXNuJ3QKKyAgICAgICAgICByZWdpc3RlciBpdCBhbnl3aGVyZS4gVGhlIG5ldyBj
b2RlIGJsb2NrIGhhcyBubyBKSVRDb2RlIGFuZCBpc24ndCBjYWxsYWJsZSwKKyAgICAgICAgICBi
dXQgaXQgaGFzIGFsbCBvZiB0aGUgYnl0ZWNvZGUuCisgICAgICAgIAorICAgICAgICAtIENvZGVC
bG9jazo6cHJlcGFyZUZvckV4ZWN1dGlvbigpLiBUaGlzIHRha2VzIHRoZSBDb2RlQmxvY2sncyBi
eXRlY29kZSBhbmQKKyAgICAgICAgICBwcm9kdWNlcyBhIEpJVENvZGUsIGFuZCB0aGVuIGluc3Rh
bGxzIHRoZSBKSVRDb2RlIGludG8gdGhlIENvZGVCbG9jay4gVGhpcworICAgICAgICAgIG1ldGhv
ZCB0YWtlcyBhIEpJVFR5cGUsIGFuZCBhbHdheXMgY29tcGlsZXMgd2l0aCB0aGF0IEpJVC4gSWYg
eW91IGFzayBmb3IKKyAgICAgICAgICBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rIHRoZW4geW91
J2xsIGdldCBKSVRDb2RlIHRoYXQganVzdCBwb2ludHMgdG8gdGhlCisgICAgICAgICAgTExJbnQg
ZW50cnlwb2ludHMuIE9uY2UgdGhpcyByZXR1cm5zLCBpdCBpcyBwb3NzaWJsZSB0byBjYWxsIGlu
dG8gdGhlCisgICAgICAgICAgQ29kZUJsb2NrIGlmIHlvdSBkbyBzbyBtYW51YWxseSAtIGJ1dCB0
aGUgRXhlY3V0YWJsZSBzdGlsbCB3b24ndCBrbm93IGFib3V0CisgICAgICAgICAgaXQgc28gSlMg
Y2FsbHMgdG8gdGhhdCBFeGVjdXRhYmxlIHdpbGwgc3RpbGwgYmUgcm91dGVkIHRvIHdoYXRldmVy
IENvZGVCbG9jaworICAgICAgICAgIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgRXhlY3V0YWJsZS4K
KyAgICAgICAgCisgICAgICAgIC0gRXhlY3V0YWJsZTo6aW5zdGFsbENvZGUoKS4gVGhpcyB0YWtl
cyBhIENvZGVCbG9jayBhbmQgbWFrZXMgaXQgdGhlIGNvZGUtZm9yLQorICAgICAgICAgIGVudHJ5
IGZvciB0aGF0IEV4ZWN1dGFibGUuIFRoaXMgaW52b2x2ZXMgdW5saW5raW5nIHRoZSBFeGVjdXRh
YmxlJ3MgbGFzdAorICAgICAgICAgIENvZGVCbG9jaywgaWYgdGhlcmUgd2FzIG9uZS4gVGhpcyBh
bHNvIHRlbGxzIHRoZSBHQyBhYm91dCBhbnkgZWZmZWN0IG9uCisgICAgICAgICAgbWVtb3J5IHVz
YWdlIGFuZCBkb2VzIGEgYnVuY2ggb2Ygd2VpcmQgZGF0YSBzdHJ1Y3R1cmUgcmV3aXJpbmcsIHNp
bmNlCisgICAgICAgICAgRXhlY3V0YWJsZSBjYWNoZXMgc29tZSBvZiBDb2RlQmxvY2sncyBmaWVs
ZHMgZm9yIHRoZSBiZW5lZml0IG9mIHZpcnR1YWwgY2FsbAorICAgICAgICAgIGZhc3QgcGF0aHMu
CisgICAgICAgIAorICAgICAgICBUaGlzIGZ1bmN0aW9uYWxpdHkgaXMgdGhlbiB3cmFwcGVkIGFy
b3VuZCB0aHJlZSBjb252ZW5pZW5jZSBtZXRob2RzOgorICAgICAgICAKKyAgICAgICAgLSBFeGVj
dXRhYmxlOjpwcmVwYXJlRm9yRXhlY3V0aW9uKCkuIElmIHRoZXJlIGlzIG5vIGNvZGUgYmxvY2sg
Zm9yIHRoYXQKKyAgICAgICAgICBFeGVjdXRhYmxlLCB0aGVuIG9uZSBpcyBjcmVhdGVkIChuZXdD
b2RlQmxvY2soKSksIGNvbXBpbGVkCisgICAgICAgICAgKENvZGVCbG9jazo6cHJlcGFyZUZvckV4
ZWN1dGlvbigpKSBhbmQgaW5zdGFsbGVkIChpbnN0YWxsQ29kZSgpKS4KKyAgICAgICAgCisgICAg
ICAgIC0gQ29kZUJsb2NrOjpuZXdSZXBsYWNlbWVudCgpLiBBc2tzIHRoZSBFeGVjdXRhYmxlIGZv
ciBhIG5ldyBDb2RlQmxvY2sgdGhhdAorICAgICAgICAgIGNhbiBzZXJ2ZSBhcyBhbiBvcHRpbWl6
ZWQgcmVwbGFjZW1lbnQgb2YgdGhlIGN1cnJlbnQgb25lLgorICAgICAgICAKKyAgICAgICAgLSBD
b2RlQmxvY2s6Omluc3RhbGwoKS4gQXNrcyB0aGUgRXhlY3V0YWJsZSB0byBpbnN0YWxsIHRoaXMg
Y29kZSBibG9jay4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2ggYWxsb3dzIG1lIHRvIGtp
bGwgKmEgbG90KiBvZiBjb2RlIGFuZCB0byByZW1vdmUgYSBsb3Qgb2YKKyAgICAgICAgc3BlY2lh
bGl6YXRpb25zIGZvciBmdW5jdGlvbnMgdnMuIG5vdC1mdW5jdGlvbnMsIGFuZCBhIGxvdCBvZiBw
bGFjZXMgd2hlcmUgd2UKKyAgICAgICAgcGFzcyBhcm91bmQgSklUQ29kZSByZWZlcmVuY2VzIGFu
ZCBzdWNoLiBFeGVjdXRpb25IYXJuZXNzIGFuZCBKSVREcml2ZXIgYXJlCisgICAgICAgIGJvdGgg
Z29uZS4gT3ZlcmFsbCB0aGlzIHBhdGNoIGhhcyBtb3JlIHJlZCB0aGFuIGdyZWVuLgorICAgICAg
ICAKKyAgICAgICAgSXQgYWxzbyBhbGxvd3MgbWUgdG8gd29yayBvbiBGVEwgT1NSIGVudHJ5IGFu
ZCB0aWVyLXVwOgorICAgICAgICAKKyAgICAgICAgLSBGVEwgdGllci11cDogdGhpcyB3aWxsIGlu
dm9sdmUgREZHT3BlcmF0aW9ucy5jcHAgYXNraW5nIHRoZSBERkc6OldvcmtsaXN0CisgICAgICAg
ICAgdG8gZG8gc29tZSBjb21waWxhdGlvbiwgYnV0IGl0IHdpbGwgcmVxdWlyZSB0aGUgREZHOjpX
b3JrbGlzdCB0byBkbworICAgICAgICAgIHNvbWV0aGluZyBkaWZmZXJlbnQgdGhhbiB3aGF0IEpJ
VFN0dWJzLmNwcCB3b3VsZCB3YW50LCBvbmNlIHRoZSBjb21waWxhdGlvbgorICAgICAgICAgIGZp
bmlzaGVzLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgYSBjYWxsYmFjayBtZWNoYW5pc20gZm9yIHRo
YXQgcHVycG9zZS4KKyAgICAgICAgCisgICAgICAgIC0gRlRMIE9TUiBlbnRyeTogdGhpcyB3aWxs
IGludm9sdmUgY3JlYXRpbmcgYSBzcGVjaWFsIGF1dG8tamV0dGlzb25lZAorICAgICAgICAgIENv
ZGVCbG9jayB0aGF0IGlzIHVzZWQgb25seSBmb3IgRlRMIE9TUiBlbnRyeS4gVGhlIG5ldyBzZXQg
b2YgcHJpbWl0aXZlcworICAgICAgICAgIGFsbG93cyBmb3IgdGhpczogRXhlY3V0YWJsZSBjYW4g
dmVuZCB5b3UgYSBmcmVzaCBuZXcgQ29kZUJsb2NrLCBhbmQgeW91IGNhbgorICAgICAgICAgIGFz
ayB0aGF0IENvZGVCbG9jayB0byBjb21waWxlIGl0c2VsZiB3aXRoIGFueSBKSVQgb2YgeW91ciBj
aG9vc2luZy4gT3IgeW91CisgICAgICAgICAgY2FuIHRha2UgdGhhdCBDb2RlQmxvY2sgYW5kIGNv
bXBpbGUgaXQgeW91cnNlbGYuIFByZXZpb3VzbHkgdGhlIGFjdCBvZgorICAgICAgICAgIHByb2R1
Y2luZyBhIENvZGVCbG9jay1mb3Itb3B0aW1pemF0aW9uIGFuZCB0aGUgYWN0IG9mIGNvbXBpbGlu
ZyBjb2RlIGZvciBpdAorICAgICAgICAgIHdlcmUgdGlnaHRseSBjb3VwbGVkOyBub3cgeW91IGNh
biBzZXBhcmF0ZSB0aGVtIGFuZCB5b3UgY2FuIGNyZWF0ZSBzdWNoCisgICAgICAgICAgYXV0by1q
ZXR0aXNvbmVkIENvZGVCbG9ja3MgdGhhdCBhcmUgdXNlZCBmb3IgYSBvbmUtc2hvdCBPU1IgZW50
cnkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5s
aXN0LmFtOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUu
dmN4cHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpwcmVwYXJlRm9yRXhlY3V0aW9uKToKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjppbnN0YWxsKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpuZXdSZXBsYWNlbWVudCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ29kZUJsb2NrOjpqZXR0
aXNvbkltcGwpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNldE9wdGltaXphdGlvblRocmVz
aG9sZEJhc2VkT25Db21waWxhdGlvblJlc3VsdCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJs
b2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6aGFzQmFzZWxpbmVKSVRQcm9maWxpbmcp
OgorICAgICAgICAqIGJ5dGVjb2RlL0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHA6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OkRlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjayk6CisgICAgICAgIChKU0M6OkRlZmVycmVkQ29tcGlsYXRpb25D
YWxsYmFjazo6fkRlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjayk6CisgICAgICAgICogYnl0ZWNv
ZGUvRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmg6IEFkZGVkLgorICAgICAgICAqIGRmZy9E
RkdEcml2ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnRyeUNvbXBpbGUpOgorICAgICAgICAq
IGRmZy9ERkdEcml2ZXIuaDoKKyAgICAgICAgKEpTQzo6REZHOjp0cnlDb21waWxlKToKKyAgICAg
ICAgKiBkZmcvREZHRmFpbGVkRmluYWxpemVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGYWls
ZWRGaW5hbGl6ZXI6OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6REZHOjpGYWlsZWRGaW5hbGl6
ZXI6OmZpbmFsaXplRnVuY3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdGYWlsZWRGaW5hbGl6ZXIu
aDoKKyAgICAgICAgKiBkZmcvREZHRmluYWxpemVyLmg6CisgICAgICAgICogZGZnL0RGR0pJVEZp
bmFsaXplci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklURmluYWxpemVyOjpmaW5hbGl6ZSk6
CisgICAgICAgIChKU0M6OkRGRzo6SklURmluYWxpemVyOjpmaW5hbGl6ZUZ1bmN0aW9uKToKKyAg
ICAgICAgKiBkZmcvREZHSklURmluYWxpemVyLmg6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRQ
cmVwYXJhdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cHJlcGFyZUNvZGVPcmlnaW5Gb3JP
U1JFeGl0KToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogZGZn
L0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBsYW46OlBsYW4pOgorICAgICAgICAo
SlNDOjpERkc6OlBsYW46OmNvbXBpbGVJblRocmVhZEltcGwpOgorICAgICAgICAoSlNDOjpERkc6
OlBsYW46OmZpbmFsaXplV2l0aG91dE5vdGlmeWluZ0NhbGxiYWNrKToKKyAgICAgICAgKEpTQzo6
REZHOjpQbGFuOjpmaW5hbGl6ZUFuZE5vdGlmeUNhbGxiYWNrKToKKyAgICAgICAgKiBkZmcvREZH
UGxhbi5oOgorICAgICAgICAqIGRmZy9ERkdXb3JrbGlzdC5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6V29ya2xpc3Q6OmNvbXBsZXRlQWxsUmVhZHlQbGFuc0ZvclZNKToKKyAgICAgICAgKiBoZWFw
L0hlYXAuaDoKKyAgICAgICAgKEpTQzo6SGVhcDo6aXNEZWZlcnJlZCk6CisgICAgICAgICogaW50
ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhl
Y3V0ZSk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRlQ2FsbCk6CisgICAgICAg
IChKU0M6OkludGVycHJldGVyOjpleGVjdXRlQ29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6SW50
ZXJwcmV0ZXI6OnByZXBhcmVGb3JSZXBlYXRDYWxsKToKKyAgICAgICAgKiBqaXQvSklURHJpdmVy
Lmg6IFJlbW92ZWQuCisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6
REVGSU5FX1NUVUJfRlVOQ1RJT04pOgorICAgICAgICAoSlNDOjpqaXRDb21waWxlRm9yKToKKyAg
ICAgICAgKEpTQzo6bGF6eUxpbmtGb3IpOgorICAgICAgICAqIGppdC9KSVRUb0RGR0RlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjay5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpKSVRUb0RGR0Rl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6SklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2Fs
bGJhY2spOgorICAgICAgICAoSlNDOjpKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFj
azo6fkpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKEpTQzo6
SklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNvbXBpbGF0aW9uRGlkQ29tcGxl
dGUpOgorICAgICAgICAqIGppdC9KSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5o
OiBBZGRlZC4KKyAgICAgICAgKiBsbGludC9MTEludEVudHJ5cG9pbnRzLmNwcDoKKyAgICAgICAg
KEpTQzo6TExJbnQ6OnNldEZ1bmN0aW9uRW50cnlwb2ludCk6CisgICAgICAgIChKU0M6OkxMSW50
OjpzZXRFdmFsRW50cnlwb2ludCk6CisgICAgICAgIChKU0M6OkxMSW50OjpzZXRQcm9ncmFtRW50
cnlwb2ludCk6CisgICAgICAgICogbGxpbnQvTExJbnRFbnRyeXBvaW50cy5oOgorICAgICAgICAq
IGxsaW50L0xMSW50U2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OmppdENvbXBp
bGVBbmRTZXRIZXVyaXN0aWNzKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OnNldFVwQ2FsbCk6Cisg
ICAgICAgICogcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OmlzTnVt
ZXJpY0NvbXBhcmVGdW5jdGlvbik6CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMu
Y3BwOgorICAgICAgICAqIHJ1bnRpbWUvQ29tcGlsYXRpb25SZXN1bHQuY3BwOgorICAgICAgICAo
V1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBydW50aW1lL0NvbXBpbGF0aW9uUmVzdWx0
Lmg6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6U2Ny
aXB0RXhlY3V0YWJsZTo6aW5zdGFsbENvZGUpOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRh
YmxlOjpuZXdDb2RlQmxvY2tGb3IpOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjpu
ZXdSZXBsYWNlbWVudENvZGVCbG9ja0Zvcik6CisgICAgICAgIChKU0M6OlNjcmlwdEV4ZWN1dGFi
bGU6OnByZXBhcmVGb3JFeGVjdXRpb25JbXBsKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFi
bGUuaDoKKyAgICAgICAgKEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6cHJlcGFyZUZvckV4ZWN1dGlv
bik6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6amV0dGlzb25PcHRpbWl6ZWRD
b2RlRm9yKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGlvbkhhcm5lc3MuaDogUmVtb3ZlZC4K
KwogMjAxMy0wOC0yMyAgQW5keSBFc3RlcyAgPGFlc3Rlc0BhcHBsZS5jb20+CiAKICAgICAgICAg
Rml4IGlzc3VlcyBmb3VuZCBieSB0aGUgQ2xhbmcgU3RhdGljIEFuYWx5emVyCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNTQ3MTgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUz
LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBieXRlY29kZS9Db2RlT3JpZ2lu
LmNwcAogICAgIGJ5dGVjb2RlL0NvZGVUeXBlLmNwcAogICAgIGJ5dGVjb2RlL0RGR0V4aXRQcm9m
aWxlLmNwcAorICAgIGJ5dGVjb2RlL0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAKICAg
ICBieXRlY29kZS9FeGVjdXRpb25Db3VudGVyLmNwcAogICAgIGJ5dGVjb2RlL0V4aXRLaW5kLmNw
cAogICAgIGJ5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCkBAIC0yNDMsNiArMjQ0LDcgQEAgc2V0
KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBqaXQvSklUU3R1YlJvdXRpbmUuY3BwCiAgICAg
aml0L0pJVFN0dWJzLmNwcAogICAgIGppdC9KSVRUaHVua3MuY3BwCisgICAgaml0L0pJVFRvREZH
RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcAogICAgIGppdC9KdW1wUmVwbGFjZW1lbnRX
YXRjaHBvaW50LmNwcAogICAgIGppdC9UaHVua0dlbmVyYXRvcnMuY3BwCiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxNTQ3MTgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5
KQpAQCAtMTEzLDkgKzExMywxMSBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uY3BwIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oIFwKLQlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvRGF0YUZvcm1hdC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvREZHRXhpdFByb2ZpbGUuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
REZHRXhpdFByb2ZpbGUuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RhdGFG
b3JtYXQuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlZmVycmVkQ29tcGls
YXRpb25DYWxsYmFjay5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0V2YWxDb2RlQ2FjaGUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4
ZWN1dGlvbkNvdW50ZXIuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhl
Y3V0aW9uQ291bnRlci5oIFwKQEAgLTU2OSw2ICs1NzEsOCBAQCBqYXZhc2NyaXB0Y29yZV9zb3Vy
Y2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzWDg2Q29tbW9uLmgg
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVGh1bmtzLmNwcCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRUaHVua3MuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgXAorCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRXcml0ZUJhcnJpZXIuaCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KU0ludGVyZmFjZUpJVC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0p1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQuY3BwIFwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9UYXJnZXQucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9UYXJnZXQucHJpCShyZXZpc2lvbiAxNTQ3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
VGFyZ2V0LnByaQkod29ya2luZyBjb3B5KQpAQCAtNjEsNiArNjEsNyBAQCBTT1VSQ0VTICs9IFwK
ICAgICBieXRlY29kZS9Db2RlT3JpZ2luLmNwcCBcCiAgICAgYnl0ZWNvZGUvQ29kZVR5cGUuY3Bw
IFwKICAgICBieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5jcHAgXAorICAgIGJ5dGVjb2RlL0RlZmVy
cmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgXAogICAgIGJ5dGVjb2RlL0V4ZWN1dGlvbkNvdW50
ZXIuY3BwIFwKICAgICBieXRlY29kZS9FeGl0S2luZC5jcHAgXAogICAgIGJ5dGVjb2RlL0dldEJ5
SWRTdGF0dXMuY3BwIFwKQEAgLTIyMSw2ICsyMjIsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBqaXQv
SklUU3R1YlJvdXRpbmUuY3BwIFwKICAgICBqaXQvSklUU3R1YnMuY3BwIFwKICAgICBqaXQvSklU
VGh1bmtzLmNwcCBcCisgICAgaml0L0pJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
LmNwcCBcCiAgICAgaml0L0p1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQuY3BwIFwKICAgICBqaXQv
VGh1bmtHZW5lcmF0b3JzLmNwcCBcCiAgICAgbGxpbnQvTExJbnRDTG9vcC5jcHAgXApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENv
cmUudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZpc2lvbiAxNTQ3MTgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMDIsNiArMzAyLDcgQEAKICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENvZGVCbG9ja0hhc2guY3BwIiAvPg0KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENvZGVPcmlnaW4uY3BwIiAvPg0KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENvZGVUeXBlLmNwcCIgLz4NCisgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2su
Y3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEV4ZWN1dGlvbkNv
dW50ZXIuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEV4aXRL
aW5kLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxHZXRCeUlk
U3RhdHVzLmNwcCIgLz4NCkBAIC0zNzcsNiArMzc4LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGppdFxKSVRTdHViUm91dGluZS5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5caml0XEpJVFN0dWJzLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxq
aXRcSklUVGh1bmtzLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcSklU
VG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwIiAvPg0KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGppdFxKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LmNwcCIgLz4NCiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcVGh1bmtHZW5lcmF0b3JzLmNwcCIgLz4NCiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxsbGludFxMTEludENMb29wLmNwcCIgLz4NCkBAIC02MjMs
NiArNjI1LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENvZGVUeXBl
LmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQ29tbWVudC5oIiAv
Pg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXERhdGFGb3JtYXQuaCIgLz4N
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxEZWZlcnJlZENvbXBpbGF0aW9u
Q2FsbGJhY2suaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxFdmFs
Q29kZUNhY2hlLmgiIC8+DQogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcRXhl
Y3V0aW9uQ291bnRlci5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2Rl
XEV4aXRLaW5kLmgiIC8+DQpAQCAtNzUwLDYgKzc1Myw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxqaXRcSklUU3R1YnNYODZDb21tb24uaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxqaXRcSklUU3R1YnNYODZfNjQuaCIgLz4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxqaXRcSklUVGh1bmtzLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0
XEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgiIC8+DQogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5caml0XEpJVFdyaXRlQmFycmllci5oIiAvPg0KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGppdFxKU0ludGVyZmFjZUpJVC5oIiAvPg0KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGppdFxKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LmgiIC8+DQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE1NDcxOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC04Niw4ICs4Niw2IEBACiAJCTBGMUUzQTQ2MTUzNENCQUYwMDBGOTQ1NiAv
KiBERkdBcmd1bWVudFBvc2l0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjFFM0E0MzE1MzRDQkFEMDAwRjk0NTYgLyogREZHQXJndW1lbnRQb3Np
dGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGMUUzQTQ3MTUzNENCQjkwMDBGOTQ1NiAvKiBERkdEb3VibGVGb3JtYXRTdGF0ZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxRTNBNDQxNTM0Q0JB
RDAwMEY5NDU2IC8qIERGR0RvdWJsZUZvcm1hdFN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYxRTNBNjcxNTNBMjFFMjAwMEY5NDU2IC8q
IERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMUUzQTY1MTUzQTIxREYwMDBGOTQ1NiAvKiBERkdTaWxlbnRS
ZWdpc3RlclNhdmVQbGFuLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKLQkJMEYyMUMyNjgxNEJFNUY2ODAwQURDNjRCIC8qIEpJVERyaXZlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMUMyNjYxNEJFNUY1
RTAwQURDNjRCIC8qIEpJVERyaXZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07Ci0JCTBGMjFDMjdDMTRCRTcyNzYwMEFEQzY0QiAvKiBFeGVjdXRpb25I
YXJuZXNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjIxQzI3QTE0QkU3MjczMDBBREM2NEIgLyogRXhlY3V0aW9uSGFybmVzcy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMjFDMjdEMTRCRTcyN0Ew
MEFEQzY0QiAvKiBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIxQzI3OTE0QkU3MjczMDBBREM2NEIgLyogQ29k
ZVNwZWNpYWxpemF0aW9uS2luZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGMjFDMjdGMTRCRUFBODIwMEFEQzY0QiAvKiBCeXRlY29kZUNvbnZl
bnRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjIxQzI3RTE0QkVBQTgwMDBBREM2NEIgLyogQnl0ZWNvZGVDb252ZW50aW9ucy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMjM1QkQxMTcxNzhF
MUMwMDY5MEM3RiAvKiBGVExDQXJndW1lbnRHZXR0ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMzVCQkIxNzE3OEUxQzAwNjkwQzdGIC8qIEZU
TENBcmd1bWVudEdldHRlci5jcHAgKi87IH07CkBAIC0zNDcsNiArMzQ1LDEwIEBACiAJCTBGQzA5
NzkyMTQ2QTZGNzMwMENGMjQ0MiAvKiBERkdPU1JFeGl0Q29tcGlsZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDMDk3OEYxNDZBNkY2MzAwQ0Yy
NDQyIC8qIERGR09TUkV4aXRDb21waWxlci5jcHAgKi87IH07CiAJCTBGQzA5N0ExMTQ2QjI4Q0Ew
MENGMjQ0MiAvKiBERkdUaHVua3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZDMDk3OUYxNDZCMjhDNzAwQ0YyNDQyIC8qIERGR1RodW5rcy5jcHAg
Ki87IH07CiAJCTBGQzA5N0EyMTQ2QjI4Q0MwMENGMjQ0MiAvKiBERkdUaHVua3MuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzA5N0EwMTQ2QjI4Qzcw
MENGMjQ0MiAvKiBERkdUaHVua3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkwRkM3MTJERTE3Q0Q4Nzc5MDA4Q0M5M0MgLyogRGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGQzcxMkRDMTdDRDg3NzgwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0aW9u
Q2FsbGJhY2suY3BwICovOyB9OworCQkwRkM3MTJERjE3Q0Q4NzdDMDA4Q0M5M0MgLyogRGVmZXJy
ZWRDb21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkM3MTJERDE3Q0Q4Nzc4MDA4Q0M5M0MgLyogRGVmZXJyZWRDb21waWxh
dGlvbkNhbGxiYWNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJMEZDNzEyRTIxN0NEODc5MTAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGQzcxMkUwMTdDRDg3OEYwMDhDQzkzQyAvKiBKSVRUb0RGR0RlZmVycmVkQ29t
cGlsYXRpb25DYWxsYmFjay5jcHAgKi87IH07CisJCTBGQzcxMkUzMTdDRDg3OTMwMDhDQzkzQyAv
KiBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDNzEyRTExN0NEODc4RjAwOENDOTNDIC8q
IEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZDODE1MEExNDA0M0JGNTAwQ0ZBNjAz
IC8qIFdyaXRlQmFycmllclN1cHBvcnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGQzgxNTA5MTQwNDNCRDIwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJT
dXBwb3J0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEZDODE1MEIxNDA0M0MwRTAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDODE1MDgxNDA0
M0JDQTAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQuY3BwICovOyB9OwogCQkwRkM4MTUx
NTE0MDUxMTlCMDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzgxNTE0MTQwNTExOEQwMENGQTYwMyAvKiBW
VGFibGVTcGVjdHJ1bS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC0xMjQzLDkgKzEyNDUsNyBAQAogCQkwRjFFM0E0NDE1MzRDQkFEMDAwRjk0NTYg
LyogREZHRG91YmxlRm9ybWF0U3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHRG91YmxlRm9ybWF0U3RhdGUuaDsgcGF0aCA9IGRmZy9ERkdEb3VibGVGb3JtYXRTdGF0
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjFFM0E1MDE1MzdDMkNCMDAwRjk0
NTYgLyogREZHU2xvd1BhdGhHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHU2xvd1BhdGhHZW5lcmF0b3IuaDsgcGF0aCA9IGRmZy9ERkdTbG93UGF0aEdlbmVy
YXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjFFM0E2NTE1M0EyMURGMDAw
Rjk0NTYgLyogREZHU2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdTaWxlbnRSZWdpc3RlclNhdmVQbGFuLmg7IHBhdGggPSBkZmcvREZH
U2lsZW50UmVnaXN0ZXJTYXZlUGxhbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkw
RjIxQzI2NjE0QkU1RjVFMDBBREM2NEIgLyogSklURHJpdmVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpJVERyaXZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjIxQzI3OTE0QkU3MjczMDBBREM2NEIgLyogQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGMjFDMjdBMTRCRTcyNzMwMEFEQzY0QiAv
KiBFeGVjdXRpb25IYXJuZXNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4
ZWN1dGlvbkhhcm5lc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyMUMyN0Ux
NEJFQUE4MDAwQURDNjRCIC8qIEJ5dGVjb2RlQ29udmVudGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQnl0ZWNvZGVDb252ZW50aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjIzNUJCQjE3MTc4RTFDMDA2OTBDN0YgLyogRlRMQ0FyZ3VtZW50R2V0
dGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTENBcmd1bWVu
dEdldHRlci5jcHA7IHBhdGggPSBmdGwvRlRMQ0FyZ3VtZW50R2V0dGVyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyMzVCQkMxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTENBcmd1
bWVudEdldHRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExDQXJndW1l
bnRHZXR0ZXIuaDsgcGF0aCA9IGZ0bC9GVExDQXJndW1lbnRHZXR0ZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTE1MTQsNiArMTUxNCwxMCBAQAogCQkwRkMwOTc4RjE0NkE2RjYz
MDBDRjI0NDIgLyogREZHT1NSRXhpdENvbXBpbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IERGR09TUkV4aXRDb21waWxlci5jcHA7IHBhdGggPSBkZmcvREZHT1NS
RXhpdENvbXBpbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDMDk3OUYx
NDZCMjhDNzAwQ0YyNDQyIC8qIERGR1RodW5rcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBERkdUaHVua3MuY3BwOyBwYXRoID0gZGZnL0RGR1RodW5rcy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzA5N0EwMTQ2QjI4QzcwMENGMjQ0MiAvKiBE
RkdUaHVua3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVGh1bmtzLmg7
IHBhdGggPSBkZmcvREZHVGh1bmtzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
QzcxMkRDMTdDRDg3NzgwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZDNzEyREQxN0NEODc3ODAwOENDOTNDIC8qIERl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZDNzEyRTAx
N0NEODc4RjAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZDNzEyRTExN0NEODc4RjAwOEND
OTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGQzgxNTA4MTQwNDNCQ0EwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJT
dXBwb3J0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdyaXRlQmFy
cmllclN1cHBvcnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkM4MTUwOTE0
MDQzQkQyMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXcml0ZUJhcnJpZXJTdXBwb3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGQzgxNTEyMTQwNTExODYwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWVGFibGVTcGVjdHJ1bS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNjM2LDcgKzI2NDAsNiBAQAogCQkJ
CTBGMDc3NkJEMTRGRjAwMjgwMDEwMjMzMiAvKiBKSVRDb21waWxhdGlvbkVmZm9ydC5oICovLAog
CQkJCTBGQUY3RUZBMTY1QkE5MTkwMDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuY3BwICovLAog
CQkJCTBGQUY3RUZCMTY1QkE5MTkwMDBDODQ1NSAvKiBKSVREaXNhc3NlbWJsZXIuaCAqLywKLQkJ
CQkwRjIxQzI2NjE0QkU1RjVFMDBBREM2NEIgLyogSklURHJpdmVyLmggKi8sCiAJCQkJMEY0Njgw
N0YxNEJBNTcyNzAwQkZFMjcyIC8qIEpJVEV4Y2VwdGlvbnMuY3BwICovLAogCQkJCTBGNDY4MDgw
MTRCQTU3MjcwMEJGRTI3MiAvKiBKSVRFeGNlcHRpb25zLmggKi8sCiAJCQkJODZDQzg1QTAwRUU3
OUE0NzAwMjg4NjgyIC8qIEpJVElubGluZXMuaCAqLywKQEAgLTI2NTgsNiArMjY2MSw4IEBACiAJ
CQkJQTdBNEFFMEMxNzk3M0I0RDAwNTYxMkIxIC8qIEpJVFN0dWJzWDg2Q29tbW9uLmggKi8sCiAJ
CQkJMEY1RUY5MUIxNjg3OEY3ODAwM0U1QzI1IC8qIEpJVFRodW5rcy5jcHAgKi8sCiAJCQkJMEY1
RUY5MUMxNjg3OEY3ODAwM0U1QzI1IC8qIEpJVFRodW5rcy5oICovLAorCQkJCTBGQzcxMkUwMTdD
RDg3OEYwMDhDQzkzQyAvKiBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAg
Ki8sCisJCQkJMEZDNzEyRTExN0NEODc4RjAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrLmggKi8sCiAJCQkJQTc2RjU0QTIxM0IyOEFBQjAwRUYyQkNFIC8qIEpJ
VFdyaXRlQmFycmllci5oICovLAogCQkJCUE3NkM1MTc0MTE4Mjc0OEQwMDcxNUIwNSAvKiBKU0lu
dGVyZmFjZUpJVC5oICovLAogCQkJCTBGNzY2RDMyMTVBRTI1MzUwMDhGMzYzRSAvKiBKdW1wUmVw
bGFjZW1lbnRXYXRjaHBvaW50LmNwcCAqLywKQEAgLTMwNDAsNyArMzA0NSw2IEBACiAJCQkJQTcy
NzAxQjMwREFERTk0OTAwRTU0OEQ3IC8qIEV4Y2VwdGlvbkhlbHBlcnMuaCAqLywKIAkJCQk4NkNB
MDMyRDEwMzhFODQ0MDAyOEE2MDkgLyogRXhlY3V0YWJsZS5jcHAgKi8sCiAJCQkJODZDQUZFRTIx
MDM1RERFNjAwMjhBNjA5IC8qIEV4ZWN1dGFibGUuaCAqLywKLQkJCQkwRjIxQzI3QTE0QkU3Mjcz
MDBBREM2NEIgLyogRXhlY3V0aW9uSGFybmVzcy5oICovLAogCQkJCUE3QThBRjI5MTdBREI1RjMw
MDVBQjE3NCAvKiBGbG9hdDMyQXJyYXkuaCAqLywKIAkJCQlBN0E4QUYyQTE3QURCNUYzMDA1QUIx
NzQgLyogRmxvYXQ2NEFycmF5LmggKi8sCiAJCQkJQkMyNjgwQzAwRTE2RDRFOTAwQTA2RTkyIC8q
IEZ1bmN0aW9uQ29uc3RydWN0b3IuY3BwICovLApAQCAtMzY0OCw2ICszNjUyLDggQEAKIAkJCQkw
RjhGOTQzRjE2Njc2MzJEMDBENjE5NzEgLyogQ29kZVR5cGUuY3BwICovLAogCQkJCTBGMEI4M0E1
MTRCQ0Y1MDQwMDg4NUI0RiAvKiBDb2RlVHlwZS5oICovLAogCQkJCTBGNDI2QTRBMTQ2MENENkIw
MDEzMUY4RiAvKiBEYXRhRm9ybWF0LmggKi8sCisJCQkJMEZDNzEyREMxN0NEODc3ODAwOENDOTND
IC8qIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgKi8sCisJCQkJMEZDNzEyREQxN0NE
ODc3ODAwOENDOTNDIC8qIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oICovLAogCQkJCTBG
QkMwQUU0MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5jcHAgKi8sCiAJCQkJMEZC
QzBBRTUxNDk2QzdDMTAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmggKi8sCiAJCQkJOTY5QTA3
OTIwRUQxRDNBRTAwRjFGNjgxIC8qIEV2YWxDb2RlQ2FjaGUuaCAqLywKQEAgLTM3OTYsNiArMzgw
Miw3IEBACiAJCQkJNURFNkU1QjMwRTE3MjhFQzAwMTgwNDA3IC8qIGNyZWF0ZV9oYXNoX3RhYmxl
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0MjZBNEIxNDYwQ0Q2RTAwMTMxRjhGIC8qIERhdGFGb3Jt
YXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkRGMTdCNkI1QUIwMEE3QUUzRiAvKiBEYXRh
Vmlldy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZDNzEyREYxN0NEODc3QzAwOENDOTNDIC8qIERl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAzNEEw
RTE3MTM1RTAwMkM3RTgyIC8qIERhdGVDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NDEzNTlDRjMwRkREODlBRDAwMjA2MTgwIC8qIERhdGVDb252ZXJzaW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzExNjYwMjBFMTk5N0I0MDA4MDY2REQgLyogRGF0ZUluc3RhbmNlLmggaW4gSGVh
ZGVycyAqLywKQEAgLTM5MzcsNyArMzk0NCw2IEBACiAJCQkJODZDQUZFRTMxMDM1RERFNjAwMjhB
NjA5IC8qIEV4ZWN1dGFibGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NjZCNDRGMEVFOERDRDEw
MDk1MThDQSAvKiBFeGVjdXRhYmxlQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU2
QTFEMzE1MDAwRjM1MDAyOTkyQjEgLyogRXhlY3V0aW9uQ291bnRlci5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJMEYyMUMyN0MxNEJFNzI3NjAwQURDNjRCIC8qIEV4ZWN1dGlvbkhhcm5lc3MuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGQjEwNTg2MTY3NTQ4MTIwMEY4QUI2RSAvKiBFeGl0S2luZC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYwQjgzQUIxNEJDRjVCQjAwODg1QjRGIC8qIEV4cHJlc3Npb25S
YW5nZUluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QThBRjM4MTdBREI1RjMwMDVBQjE3NCAv
KiBGbG9hdDMyQXJyYXkuaCBpbiBIZWFkZXJzICovLApAQCAtNDAyNiw3ICs0MDMyLDYgQEAKIAkJ
CQk4NkNDRUZERTBGNDEzRjg5MDBGRDdGOUUgLyogSklUQ29kZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYwNzc2QkYxNEZGMDAyQjAwMTAyMzMyIC8qIEpJVENvbXBpbGF0aW9uRWZmb3J0LmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkFGN0VGRTE2NUJBOTFGMDAwQzg0NTUgLyogSklURGlzYXNzZW1i
bGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjIxQzI2ODE0QkU1RjY4MDBBREM2NEIgLyogSklU
RHJpdmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ2ODA4MjE0QkE1NzJEMDBCRkUyNzIgLyog
SklURXhjZXB0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZDQzg1QTEwRUU3OUE0NzAwMjg4
NjgyIC8qIEpJVElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2MDYyNjk2MEZCOEVDMDIw
MDk3OThBQiAvKiBKSVRTdHViQ2FsbC5oIGluIEhlYWRlcnMgKi8sCkBAIC00MDk2LDYgKzQxMDEs
NyBAQAogCQkJCUJDMThDNDI0MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU09iamVjdC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0MjUwRTE2RjVDRDAwQjM0NDYwIC8qIEpTT2JqZWN0UmVmLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNzI4MEEyODExNTU3RTMwMDBENTY5NTcgLyogSlNPYmplY3RSZWZQ
cml2YXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkM3MTJFMzE3Q0Q4NzkzMDA4Q0M5M0MgLyog
SklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3Rjk5MzVGMEZENzMyNTEwMEEwQjJEMCAvKiBKU09OT2JqZWN0LmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzg3Q0RCOTEwNzEyQUQ0MDAwNjE0Q0YgLyogSlNPTk9iamVjdC5sdXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTk1MzRBQUZCMEU1QjdBOTYwMEI4QTQ1QiAvKiBKU1Byb2ZpbGVyUHJpdmF0
ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC01MDA5LDYgKzUwMTUsNyBAQAogCQkJCTBGRTIyOEVFMTQz
NkFCMkMwMDE5NkM0OCAvKiBPcHRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0OEYyMUJD
MTA3RUM1NEQwMDQyRUMyQyAvKiBQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTMwNTJD
MzQwRkI3OTIxOTAwNDhGREMzIC8qIFBhcnNlckFyZW5hLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTBGQzcxMkUyMTdDRDg3OTEwMDhDQzkzQyAvKiBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25D
YWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjlGQzhDMzE0RTFCNUZFMDBENTJBRTAg
LyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjk4MjA2
MDE2QkZFMzgxMDAyNDBEMDIgLyogUHJlY2lzZUp1bXBUYXJnZXRzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTk1NzQyRjY1MEREMTFGNUEwMDA5MTdGQiAvKiBQcm9maWxlLmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtNTA4Nyw2ICs1MDk0LDcgQEAKIAkJCQkxNEU4NEY5RTE0RUUxQUNDMDBENkQ1RDQg
LyogV2Vha0Jsb2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0RjcyNTY1MTRFRTI2NUUwMEIx
NjUyQiAvKiBXZWFrSGFuZGxlT3duZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRFODRGQTAx
NEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtTZXQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZDNzEy
REUxN0NEODc3OTAwOENDOTNDIC8qIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjZFNUMxOTE3MjRBRjNEMDA1QzU3NEYgLyogV2ViS2l0TExWTUxp
YnJhcnlBbmNob3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDODE1MEIxNDA0M0MwRTAwQ0ZB
NjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdFNUFC
M0ExNzk5RTRCMjAwRDI4MzNEIC8qIFg4NkRpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLywK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAxNTQ3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkNhbGxM
aW5rU3RhdHVzLmgiCiAjaW5jbHVkZSAiREZHQ2FwYWJpbGl0aWVzLmgiCiAjaW5jbHVkZSAiREZH
Q29tbW9uLmgiCisjaW5jbHVkZSAiREZHRHJpdmVyLmgiCiAjaW5jbHVkZSAiREZHTm9kZS5oIgog
I2luY2x1ZGUgIkRGR1JlcGF0Y2guaCIKICNpbmNsdWRlICJERkdXb3JrbGlzdC5oIgpAQCAtNDUs
NiArNDYsNyBAQAogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9u
LmgiCiAjaW5jbHVkZSAiSlNOYW1lU2NvcGUuaCIKKyNpbmNsdWRlICJMTEludEVudHJ5cG9pbnRz
LmgiCiAjaW5jbHVkZSAiTG93TGV2ZWxJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIk9wZXJhdGlv
bnMuaCIKICNpbmNsdWRlICJQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmgiCkBAIC0yNjg5LDYgKzI2
OTEsNjAgQEAgdm9pZCBDb2RlQmxvY2s6OmNvcHlQb3N0UGFyc2VEYXRhRnJvbUFsdAogICAgIGNv
cHlQb3N0UGFyc2VEYXRhRnJvbShtX2FsdGVybmF0aXZlLmdldCgpKTsKIH0KIAorQ29tcGlsYXRp
b25SZXN1bHQgQ29kZUJsb2NrOjpwcmVwYXJlRm9yRXhlY3V0aW9uKAorICAgIEV4ZWNTdGF0ZSog
ZXhlYywgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlLCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZv
cnQsCisgICAgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgUGFzc1JlZlB0cjxEZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2s+IGNhbGxiYWNrKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgCisgICAgaWYgKGppdFR5cGUgPT0gSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykgeworICAg
ICAgICBzd2l0Y2ggKGNvZGVUeXBlKCkpIHsKKyAgICAgICAgY2FzZSBHbG9iYWxDb2RlOgorICAg
ICAgICAgICAgTExJbnQ6OnNldFByb2dyYW1FbnRyeXBvaW50KHZtLCBzdGF0aWNfY2FzdDxQcm9n
cmFtQ29kZUJsb2NrKj4odGhpcykpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
RXZhbENvZGU6CisgICAgICAgICAgICBMTEludDo6c2V0RXZhbEVudHJ5cG9pbnQodm0sIHN0YXRp
Y19jYXN0PEV2YWxDb2RlQmxvY2sqPih0aGlzKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBGdW5jdGlvbkNvZGU6CisgICAgICAgICAgICBMTEludDo6c2V0RnVuY3Rpb25FbnRy
eXBvaW50KHZtLCBzdGF0aWNfY2FzdDxGdW5jdGlvbkNvZGVCbG9jayo+KHRoaXMpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJldHVybiBDb21waWxhdGlvblN1Y2Nl
c3NmdWw7CisgICAgfQorICAgIAorI2lmIEVOQUJMRShKSVQpCisgICAgaWYgKEpJVENvZGU6Omlz
T3B0aW1pemluZ0pJVChqaXRUeXBlKSkgeworICAgICAgICBBU1NFUlQoZWZmb3J0ID09IEpJVENv
bXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgICAgIGJvb2wgaGFkQ2FsbGJhY2sgPSAhIWNhbGxiYWNr
OworICAgICAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBERkc6OnRyeUNvbXBpbGUoZXhl
YywgdGhpcywgYnl0ZWNvZGVJbmRleCwgY2FsbGJhY2spOworICAgICAgICBBU1NFUlRfVU5VU0VE
KGhhZENhbGxiYWNrLCByZXN1bHQgIT0gQ29tcGlsYXRpb25EZWZlcnJlZCB8fCBoYWRDYWxsYmFj
ayk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0ciBqaXRDb2RlV2l0aEFyaXR5Q2hlY2s7CisgICAgUmVmUHRyPEpJVENvZGU+IGpp
dENvZGUgPSBKSVQ6OmNvbXBpbGUoJnZtLCB0aGlzLCBlZmZvcnQsICZqaXRDb2RlV2l0aEFyaXR5
Q2hlY2spOworICAgIGlmICghaml0Q29kZSkKKyAgICAgICAgcmV0dXJuIENvbXBpbGF0aW9uRmFp
bGVkOworICAgIHNldEpJVENvZGUoaml0Q29kZSwgaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKKyAg
ICByZXR1cm4gQ29tcGlsYXRpb25TdWNjZXNzZnVsOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0o
ZWZmb3J0KTsKKyAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVJbmRleCk7CisgICAgVU5VU0VEX1BB
UkFNKGNhbGxiYWNrKTsKKyAgICByZXR1cm4gQ29tcGlsYXRpb25GYWlsZWQ7CisjZW5kaWYgLy8g
RU5BQkxFKEpJVCkKK30KKwordm9pZCBDb2RlQmxvY2s6Omluc3RhbGwoKQoreworICAgIG93bmVy
RXhlY3V0YWJsZSgpLT5pbnN0YWxsQ29kZSh0aGlzKTsKK30KKworUGFzc1JlZlB0cjxDb2RlQmxv
Y2s+IENvZGVCbG9jazo6bmV3UmVwbGFjZW1lbnQoKQoreworICAgIHJldHVybiBvd25lckV4ZWN1
dGFibGUoKS0+bmV3UmVwbGFjZW1lbnRDb2RlQmxvY2tGb3Ioc3BlY2lhbGl6YXRpb25LaW5kKCkp
OworfQorCiAjaWYgRU5BQkxFKEpJVCkKIHZvaWQgQ29kZUJsb2NrOjpyZW9wdGltaXplKCkKIHsK
QEAgLTI3MTUsNTMgKzI3NzEsNiBAQCBDb2RlQmxvY2sqIEZ1bmN0aW9uQ29kZUJsb2NrOjpyZXBs
YWNlbWVuCiAgICAgcmV0dXJuICZzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihvd25l
ckV4ZWN1dGFibGUoKSktPmdlbmVyYXRlZEJ5dGVjb2RlRm9yKG1faXNDb25zdHJ1Y3RvciA/IENv
ZGVGb3JDb25zdHJ1Y3QgOiBDb2RlRm9yQ2FsbCk7CiB9CiAKLSNpZiBFTkFCTEUoREZHX0pJVCkK
LUpTT2JqZWN0KiBQcm9ncmFtQ29kZUJsb2NrOjpjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSog
ZXhlYywgSlNTY29wZSogc2NvcGUsIENvbXBpbGF0aW9uUmVzdWx0JiByZXN1bHQsIHVuc2lnbmVk
IGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAgaWYgKEpJVENvZGU6OmlzSGlnaGVyVGllcihyZXBsYWNl
bWVudCgpLT5qaXRUeXBlKCksIGppdFR5cGUoKSkpIHsKLSAgICAgICAgcmVzdWx0ID0gQ29tcGls
YXRpb25Ob3ROZWVkZWQ7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBKU09iamVjdCog
ZXJyb3IgPSBzdGF0aWNfY2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgp
KS0+Y29tcGlsZU9wdGltaXplZChleGVjLCBzY29wZSwgcmVzdWx0LCBieXRlY29kZUluZGV4KTsK
LSAgICByZXR1cm4gZXJyb3I7Ci19Ci0KLUNvbXBpbGF0aW9uUmVzdWx0IFByb2dyYW1Db2RlQmxv
Y2s6OnJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlKFBhc3NSZWZQdHI8REZHOjpQbGFu
PiBwbGFuKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KG93
bmVyRXhlY3V0YWJsZSgpKS0+cmVwbGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGUocGxhbik7
Ci19Ci0KLUpTT2JqZWN0KiBFdmFsQ29kZUJsb2NrOjpjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0
ZSogZXhlYywgSlNTY29wZSogc2NvcGUsIENvbXBpbGF0aW9uUmVzdWx0JiByZXN1bHQsIHVuc2ln
bmVkIGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAgaWYgKEpJVENvZGU6OmlzSGlnaGVyVGllcihyZXBs
YWNlbWVudCgpLT5qaXRUeXBlKCksIGppdFR5cGUoKSkpIHsKLSAgICAgICAgcmVzdWx0ID0gQ29t
cGlsYXRpb25Ob3ROZWVkZWQ7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBKU09iamVj
dCogZXJyb3IgPSBzdGF0aWNfY2FzdDxFdmFsRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgp
KS0+Y29tcGlsZU9wdGltaXplZChleGVjLCBzY29wZSwgcmVzdWx0LCBieXRlY29kZUluZGV4KTsK
LSAgICByZXR1cm4gZXJyb3I7Ci19Ci0KLUNvbXBpbGF0aW9uUmVzdWx0IEV2YWxDb2RlQmxvY2s6
OnJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlKFBhc3NSZWZQdHI8REZHOjpQbGFuPiBw
bGFuKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxFdmFsRXhlY3V0YWJsZSo+KG93bmVyRXhl
Y3V0YWJsZSgpKS0+cmVwbGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGUocGxhbik7Ci19Ci0K
LUpTT2JqZWN0KiBGdW5jdGlvbkNvZGVCbG9jazo6Y29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUq
IGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCBDb21waWxhdGlvblJlc3VsdCYgcmVzdWx0LCB1bnNpZ25l
ZCBieXRlY29kZUluZGV4KQotewotICAgIGlmIChKSVRDb2RlOjppc0hpZ2hlclRpZXIocmVwbGFj
ZW1lbnQoKS0+aml0VHlwZSgpLCBqaXRUeXBlKCkpKSB7Ci0gICAgICAgIHJlc3VsdCA9IENvbXBp
bGF0aW9uTm90TmVlZGVkOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgSlNPYmplY3Qq
IGVycm9yID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxl
KCkpLT5jb21waWxlT3B0aW1pemVkRm9yKGV4ZWMsIHNjb3BlLCByZXN1bHQsIGJ5dGVjb2RlSW5k
ZXgsIG1faXNDb25zdHJ1Y3RvciA/IENvZGVGb3JDb25zdHJ1Y3QgOiBDb2RlRm9yQ2FsbCk7Ci0g
ICAgcmV0dXJuIGVycm9yOwotfQotCi1Db21waWxhdGlvblJlc3VsdCBGdW5jdGlvbkNvZGVCbG9j
azo6cmVwbGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGUoUGFzc1JlZlB0cjxERkc6OlBsYW4+
IHBsYW4pCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KG93
bmVyRXhlY3V0YWJsZSgpKS0+cmVwbGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGVGb3IocGxh
biwgbV9pc0NvbnN0cnVjdG9yID8gQ29kZUZvckNvbnN0cnVjdCA6IENvZGVGb3JDYWxsKTsKLX0K
LSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLQogREZHOjpDYXBhYmlsaXR5TGV2ZWwgUHJvZ3Jh
bUNvZGVCbG9jazo6Y2FwYWJpbGl0eUxldmVsSW50ZXJuYWwoKQogewogICAgIHJldHVybiBERkc6
OnByb2dyYW1DYXBhYmlsaXR5TGV2ZWwodGhpcyk7CkBAIC0yODA0LDI3ICsyODEzLDYgQEAgdm9p
ZCBGdW5jdGlvbkNvZGVCbG9jazo6amV0dGlzb25JbXBsKCkKIHsKICAgICBzdGF0aWNfY2FzdDxG
dW5jdGlvbkV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmpldHRpc29uT3B0aW1pemVk
Q29kZUZvcigqdm0oKSwgbV9pc0NvbnN0cnVjdG9yID8gQ29kZUZvckNvbnN0cnVjdCA6IENvZGVG
b3JDYWxsKTsKIH0KLQotQ29tcGlsYXRpb25SZXN1bHQgUHJvZ3JhbUNvZGVCbG9jazo6aml0Q29t
cGlsZUltcGwoRXhlY1N0YXRlKiBleGVjKQotewotICAgIEFTU0VSVChqaXRUeXBlKCkgPT0gSklU
Q29kZTo6SW50ZXJwcmV0ZXJUaHVuayk7Ci0gICAgQVNTRVJUKHRoaXMgPT0gcmVwbGFjZW1lbnQo
KSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFByb2dyYW1FeGVjdXRhYmxlKj4ob3duZXJFeGVj
dXRhYmxlKCkpLT5qaXRDb21waWxlKGV4ZWMpOwotfQotCi1Db21waWxhdGlvblJlc3VsdCBFdmFs
Q29kZUJsb2NrOjpqaXRDb21waWxlSW1wbChFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgQVNTRVJU
KGppdFR5cGUoKSA9PSBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKTsKLSAgICBBU1NFUlQodGhp
cyA9PSByZXBsYWNlbWVudCgpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RXZhbEV4ZWN1dGFi
bGUqPihvd25lckV4ZWN1dGFibGUoKSktPmppdENvbXBpbGUoZXhlYyk7Ci19Ci0KLUNvbXBpbGF0
aW9uUmVzdWx0IEZ1bmN0aW9uQ29kZUJsb2NrOjpqaXRDb21waWxlSW1wbChFeGVjU3RhdGUqIGV4
ZWMpCi17Ci0gICAgQVNTRVJUKGppdFR5cGUoKSA9PSBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5r
KTsKLSAgICBBU1NFUlQodGhpcyA9PSByZXBsYWNlbWVudCgpKTsKLSAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5qaXRDb21waWxl
Rm9yKGV4ZWMsIG1faXNDb25zdHJ1Y3RvciA/IENvZGVGb3JDb25zdHJ1Y3QgOiBDb2RlRm9yQ2Fs
bCk7Ci19CiAjZW5kaWYKIAogSlNHbG9iYWxPYmplY3QqIENvZGVCbG9jazo6Z2xvYmFsT2JqZWN0
Rm9yKENvZGVPcmlnaW4gY29kZU9yaWdpbikKQEAgLTMxMDYsMTAgKzMwOTQsOCBAQCB2b2lkIENv
ZGVCbG9jazo6Zm9yY2VPcHRpbWl6YXRpb25TbG93UGF0CiB2b2lkIENvZGVCbG9jazo6c2V0T3B0
aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KENvbXBpbGF0aW9uUmVz
dWx0IHJlc3VsdCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChqaXRUeXBlKCkgPT0gSklUQ29kZTo6
QmFzZWxpbmVKSVQpOwotICAgIFJFTEVBU0VfQVNTRVJUKChyZXN1bHQgPT0gQ29tcGlsYXRpb25T
dWNjZXNzZnVsKSA9PSAocmVwbGFjZW1lbnQoKSAhPSB0aGlzKSk7CiAgICAgc3dpdGNoIChyZXN1
bHQpIHsKICAgICBjYXNlIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDoKLSAgICAgICAgUkVMRUFTRV9B
U1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKHJlcGxhY2VtZW50KCktPmppdFR5cGUoKSkp
OwogICAgICAgICBvcHRpbWl6ZU5leHRJbnZvY2F0aW9uKCk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgQ29tcGlsYXRpb25GYWlsZWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxNTQ3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcg
QEAKICNpbmNsdWRlICJERkdPU1JFbnRyeS5oIgogI2luY2x1ZGUgIkRGR09TUkV4aXQuaCIKICNp
bmNsdWRlICJERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmgiCisjaW5jbHVkZSAiRGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiRXZhbENvZGVDYWNoZS5oIgogI2luY2x1ZGUg
IkV4ZWN1dGlvbkNvdW50ZXIuaCIKICNpbmNsdWRlICJFeHByZXNzaW9uUmFuZ2VJbmZvLmgiCkBA
IC0yOTAsMTkgKzI5MSwxOSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gaml0VHlw
ZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUOwogICAgIH0KLSNpZiBFTkFCTEUoREZHX0pJVCkK
LSAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIEpTU2Nv
cGUqLCBDb21waWxhdGlvblJlc3VsdCYsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpID0gMDsKLSAg
ICB2aXJ0dWFsIENvbXBpbGF0aW9uUmVzdWx0IHJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRD
b2RlKFBhc3NSZWZQdHI8REZHOjpQbGFuPikgPSAwOwotI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQogICAgIHZvaWQgamV0dGlzb24oKTsKLSAgICBDb21waWxhdGlvblJlc3VsdCBqaXRDb21waWxl
KEV4ZWNTdGF0ZSogZXhlYykKLSAgICB7Ci0gICAgICAgIGlmIChqaXRUeXBlKCkgIT0gSklUQ29k
ZTo6SW50ZXJwcmV0ZXJUaHVuaykgewotICAgICAgICAgICAgQVNTRVJUKGppdFR5cGUoKSA9PSBK
SVRDb2RlOjpCYXNlbGluZUpJVCk7Ci0gICAgICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25Ob3RO
ZWVkZWQ7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGppdENvbXBpbGVJbXBsKGV4ZWMpOwot
ICAgIH0KKyAgICBDb21waWxhdGlvblJlc3VsdCBwcmVwYXJlRm9yRXhlY3V0aW9uKAorICAgICAg
ICBFeGVjU3RhdGUqLCBKSVRDb2RlOjpKSVRUeXBlLAorICAgICAgICBKSVRDb21waWxhdGlvbkVm
Zm9ydCA9IEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQsCisgICAgICAgIHVuc2lnbmVkIGJ5dGVj
b2RlSW5kZXggPSBVSU5UX01BWCwKKyAgICAgICAgUGFzc1JlZlB0cjxEZWZlcnJlZENvbXBpbGF0
aW9uQ2FsbGJhY2s+ID0gMCk7CisgICAgCisgICAgLy8gRXhhY3RseSBlcXVpdmFsZW50IHRvIGNv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPmluc3RhbGxDb2RlKGNvZGVCbG9jayk7CisgICAg
dm9pZCBpbnN0YWxsKCk7CisgICAgCisgICAgLy8gRXhhY3RseSBlcXVpdmFsZW50IHRvIGNvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCktPm5ld1JlcGxhY2VtZW50Q29kZUJsb2NrRm9yKGNvZGVC
bG9jay0+c3BlY2lhbGl6YXRpb25LaW5kKCkpCisgICAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+IG5l
d1JlcGxhY2VtZW50KCk7CisgICAgCiAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50
KCkgPSAwOwogCiAgICAgdmlydHVhbCBERkc6OkNhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2
ZWxJbnRlcm5hbCgpID0gMDsKQEAgLTk2OSw3ICs5NzAsNiBAQCBwdWJsaWM6CiAgICAgCiBwcm90
ZWN0ZWQ6CiAjaWYgRU5BQkxFKEpJVCkKLSAgICB2aXJ0dWFsIENvbXBpbGF0aW9uUmVzdWx0IGpp
dENvbXBpbGVJbXBsKEV4ZWNTdGF0ZSopID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgamV0dGlzb25J
bXBsKCkgPSAwOwogI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIHZpc2l0V2Vha1JlZmVyZW5jZXMo
U2xvdFZpc2l0b3ImKTsKQEAgLTExOTQsMTMgKzExOTQsNyBAQCBwdWJsaWM6CiAKICNpZiBFTkFC
TEUoSklUKQogcHJvdGVjdGVkOgotI2lmIEVOQUJMRShERkdfSklUKQotICAgIHZpcnR1YWwgSlNP
YmplY3QqIGNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiwgSlNTY29wZSosIENvbXBpbGF0aW9u
UmVzdWx0JiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7Ci0gICAgdmlydHVhbCBDb21waWxhdGlv
blJlc3VsdCByZXBsYWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZShQYXNzUmVmUHRyPERGRzo6
UGxhbj4pOwotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotCiAgICAgdmlydHVhbCB2b2lkIGpl
dHRpc29uSW1wbCgpOwotICAgIHZpcnR1YWwgQ29tcGlsYXRpb25SZXN1bHQgaml0Q29tcGlsZUlt
cGwoRXhlY1N0YXRlKik7CiAgICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCk7CiAg
ICAgdmlydHVhbCBERkc6OkNhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWxJbnRlcm5hbCgp
OwogI2VuZGlmCkBAIC0xMjIzLDEzICsxMjE3LDcgQEAgcHVibGljOgogICAgIAogI2lmIEVOQUJM
RShKSVQpCiBwcm90ZWN0ZWQ6Ci0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgdmlydHVhbCBKU09i
amVjdCogY29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqLCBKU1Njb3BlKiwgQ29tcGlsYXRpb25S
ZXN1bHQmLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKLSAgICB2aXJ0dWFsIENvbXBpbGF0aW9u
UmVzdWx0IHJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlKFBhc3NSZWZQdHI8REZHOjpQ
bGFuPik7Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0KICAgICB2aXJ0dWFsIHZvaWQgamV0
dGlzb25JbXBsKCk7Ci0gICAgdmlydHVhbCBDb21waWxhdGlvblJlc3VsdCBqaXRDb21waWxlSW1w
bChFeGVjU3RhdGUqKTsKICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKTsKICAg
ICB2aXJ0dWFsIERGRzo6Q2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbEludGVybmFsKCk7
CiAjZW5kaWYKQEAgLTEyNTIsMTMgKzEyNDAsNyBAQCBwdWJsaWM6CiAgICAgCiAjaWYgRU5BQkxF
KEpJVCkKIHByb3RlY3RlZDoKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICB2aXJ0dWFsIEpTT2Jq
ZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBDb21waWxhdGlvblJl
c3VsdCYsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwotICAgIHZpcnR1YWwgQ29tcGlsYXRpb25S
ZXN1bHQgcmVwbGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGUoUGFzc1JlZlB0cjxERkc6OlBs
YW4+KTsKLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLQogICAgIHZpcnR1YWwgdm9pZCBqZXR0
aXNvbkltcGwoKTsKLSAgICB2aXJ0dWFsIENvbXBpbGF0aW9uUmVzdWx0IGppdENvbXBpbGVJbXBs
KEV4ZWNTdGF0ZSopOwogICAgIHZpcnR1YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVudCgpOwogICAg
IHZpcnR1YWwgREZHOjpDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsSW50ZXJuYWwoKTsK
ICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlZmVycmVkQ29t
cGlsYXRpb25DYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
K0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
KCkgeyB9CitEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6On5EZWZlcnJlZENvbXBpbGF0aW9u
Q2FsbGJhY2soKSB7IH0KKworfSAvLyBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2su
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrX2gKKyNkZWZpbmUgRGVmZXJyZWRDb21waWxhdGlvbkNh
bGxiYWNrX2gKKworI2luY2x1ZGUgIkNvbXBpbGF0aW9uUmVzdWx0LmgiCisjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvZGVCbG9jazsKKwor
Y2xhc3MgRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrIDogcHVibGljIFJlZkNvdW50ZWQ8RGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPiB7CitwdWJsaWM6CisgICAgRGVmZXJyZWRDb21waWxh
dGlvbkNhbGxiYWNrKCk7CisgICAgdmlydHVhbCB+RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgY29tcGlsYXRpb25EaWRDb21wbGV0ZShDb2RlQmxvY2sq
LCBDb21waWxhdGlvblJlc3VsdCkgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNl
bmRpZiAvLyBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lvbiAxNTQ3MTgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcg
KzU1LDcgQEAgdW5zaWduZWQgZ2V0TnVtQ29tcGlsYXRpb25zKCkKICAgICByZXR1cm4gbnVtQ29t
cGlsYXRpb25zOwogfQogCi1zdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZShDb21waWxl
TW9kZSBjb21waWxlTW9kZSwgRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
UmVmUHRyPEpTQzo6SklUQ29kZT4mIGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciogaml0
Q29kZVdpdGhBcml0eUNoZWNrLCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgpCitDb21w
aWxhdGlvblJlc3VsdCB0cnlDb21waWxlKEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgUGFzc1JlZlB0cjxEZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2s+IGNhbGxiYWNrKQogewogICAgIFNhbXBsaW5nUmVnaW9uIHNh
bXBsaW5nUmVnaW9uKCJERkcgQ29tcGlsYXRpb24gKERyaXZlcikiKTsKICAgICAKQEAgLTk5LDEy
ICs5OSwxMiBAQCBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZShDb21waWxlCiAgICAg
ZWxzZQogICAgICAgICBudW1WYXJzV2l0aFZhbHVlcyA9IDA7CiAgICAgUmVmUHRyPFBsYW4+IHBs
YW4gPSBhZG9wdFJlZigKLSAgICAgICAgbmV3IFBsYW4oY29tcGlsZU1vZGUsIGNvZGVCbG9jaywg
b3NyRW50cnlCeXRlY29kZUluZGV4LCBudW1WYXJzV2l0aFZhbHVlcykpOworICAgICAgICBuZXcg
UGxhbihjb2RlQmxvY2ssIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgbnVtVmFyc1dpdGhWYWx1ZXMp
KTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBsYW4tPm11c3RIYW5kbGVWYWx1ZXMuc2l6
ZSgpOyArK2kpIHsKICAgICAgICAgaW50IG9wZXJhbmQgPSBwbGFuLT5tdXN0SGFuZGxlVmFsdWVz
Lm9wZXJhbmRGb3JJbmRleChpKTsKICAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJh
bmQpCiAgICAgICAgICAgICAmJiAhb3BlcmFuZFRvQXJndW1lbnQob3BlcmFuZCkKLSAgICAgICAg
ICAgICYmIGNvbXBpbGVNb2RlID09IENvbXBpbGVGdW5jdGlvbgorICAgICAgICAgICAgJiYgY29k
ZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZQogICAgICAgICAgICAgJiYgY29kZUJs
b2NrLT5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBDb2RlRm9yQ29uc3RydWN0KSB7CiAgICAgICAg
ICAgICAvLyBVZ2guIElmIHdlJ3JlIGluIGEgY29uc3RydWN0b3IsIHRoZSAndGhpcycgYXJndW1l
bnQgbWF5IGhvbGQgZ2FyYmFnZS4gSXQgd2lsbAogICAgICAgICAgICAgLy8gYWxzbyBuZXZlciBi
ZSB1c2VkLiBJdCBkb2Vzbid0IG1hdHRlciB3aGF0IHdlIHB1dCBpbnRvIHRoZSB2YWx1ZSBmb3Ig
dGhpcywKQEAgLTExNSw3ICsxMTUsOCBAQCBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGls
ZShDb21waWxlCiAgICAgICAgICAgICBwbGFuLT5tdXN0SGFuZGxlVmFsdWVzW2ldID0gZXhlYy0+
dW5jaGVja2VkUihvcGVyYW5kKS5qc1ZhbHVlKCk7CiAgICAgfQogICAgIAotICAgIGlmIChlbmFi
bGVDb25jdXJyZW50SklUKCkpIHsKKyAgICBpZiAoZW5hYmxlQ29uY3VycmVudEpJVCgpICYmIGNh
bGxiYWNrKSB7CisgICAgICAgIHBsYW4tPmNhbGxiYWNrID0gY2FsbGJhY2s7CiAgICAgICAgIGlm
ICghdm0ud29ya2xpc3QpCiAgICAgICAgICAgICB2bS53b3JrbGlzdCA9IGdsb2JhbFdvcmtsaXN0
KCk7CiAgICAgICAgIGlmIChsb2dDb21waWxhdGlvbkNoYW5nZXMoKSkKQEAgLTEyNSwyMiArMTI2
LDcgQEAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGUoQ29tcGlsZQogICAgIH0KICAg
ICAKICAgICBwbGFuLT5jb21waWxlSW5UaHJlYWQoKnZtLmRmZ1N0YXRlKTsKLSAgICByZXR1cm4g
cGxhbi0+ZmluYWxpemUoaml0Q29kZSwgaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKLX0KLQotQ29t
cGlsYXRpb25SZXN1bHQgdHJ5Q29tcGlsZShFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29k
ZUJsb2NrLCBSZWZQdHI8SlNDOjpKSVRDb2RlPiYgaml0Q29kZSwgdW5zaWduZWQgYnl0ZWNvZGVJ
bmRleCkKLXsKLSAgICByZXR1cm4gY29tcGlsZShDb21waWxlT3RoZXIsIGV4ZWMsIGNvZGVCbG9j
aywgaml0Q29kZSwgMCwgYnl0ZWNvZGVJbmRleCk7Ci19Ci0KLUNvbXBpbGF0aW9uUmVzdWx0IHRy
eUNvbXBpbGVGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCBS
ZWZQdHI8SlNDOjpKSVRDb2RlPiYgaml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBqaXRD
b2RlV2l0aEFyaXR5Q2hlY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAgcmV0dXJu
IGNvbXBpbGUoQ29tcGlsZUZ1bmN0aW9uLCBleGVjLCBjb2RlQmxvY2ssIGppdENvZGUsICZqaXRD
b2RlV2l0aEFyaXR5Q2hlY2ssIGJ5dGVjb2RlSW5kZXgpOwotfQotCi1Db21waWxhdGlvblJlc3Vs
dCB0cnlGaW5hbGl6ZVBsYW4oUGFzc1JlZlB0cjxQbGFuPiBwbGFuLCBSZWZQdHI8SlNDOjpKSVRD
b2RlPiYgaml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKiBqaXRDb2RlV2l0aEFyaXR5Q2hl
Y2spCi17Ci0gICAgcmV0dXJuIHBsYW4tPmZpbmFsaXplKGppdENvZGUsIGppdENvZGVXaXRoQXJp
dHlDaGVjayk7CisgICAgcmV0dXJuIHBsYW4tPmZpbmFsaXplV2l0aG91dE5vdGlmeWluZ0NhbGxi
YWNrKCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEcml2ZXIuaAkocmV2aXNpb24gMTU0NzE4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTcgKzQyLDkg
QEAgbmFtZXNwYWNlIERGRyB7CiBKU19FWFBPUlRfUFJJVkFURSB1bnNpZ25lZCBnZXROdW1Db21w
aWxhdGlvbnMoKTsKIAogI2lmIEVOQUJMRShERkdfSklUKQotQ29tcGlsYXRpb25SZXN1bHQgdHJ5
Q29tcGlsZShFeGVjU3RhdGUqLCBDb2RlQmxvY2sqLCBSZWZQdHI8SlNDOjpKSVRDb2RlPiYsIHVu
c2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwotQ29tcGlsYXRpb25SZXN1bHQgdHJ5Q29tcGlsZUZ1bmN0
aW9uKEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIFJlZlB0cjxKU0M6OkpJVENvZGU+JiwgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyJiBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ssIHVuc2lnbmVkIGJ5dGVjb2Rl
SW5kZXgpOwotQ29tcGlsYXRpb25SZXN1bHQgdHJ5RmluYWxpemVQbGFuKFBhc3NSZWZQdHI8UGxh
bj4sIFJlZlB0cjxKU0M6OkpJVENvZGU+JiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKiBqaXRDb2Rl
V2l0aEFyaXR5Q2hlY2spOworQ29tcGlsYXRpb25SZXN1bHQgdHJ5Q29tcGlsZShFeGVjU3RhdGUq
LCBDb2RlQmxvY2sqLCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIFBhc3NSZWZQdHI8
RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPik7CiAjZWxzZQotaW5saW5lIENvbXBpbGF0aW9u
UmVzdWx0IHRyeUNvbXBpbGUoRXhlY1N0YXRlKiwgQ29kZUJsb2NrKiwgUmVmUHRyPEpTQzo6SklU
Q29kZT4mLCB1bnNpZ25lZCkgeyByZXR1cm4gQ29tcGlsYXRpb25GYWlsZWQ7IH0KLWlubGluZSBD
b21waWxhdGlvblJlc3VsdCB0cnlDb21waWxlRnVuY3Rpb24oRXhlY1N0YXRlKiwgQ29kZUJsb2Nr
KiwgUmVmUHRyPEpTQzo6SklUQ29kZT4mLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImLCB1bnNpZ25l
ZCkgeyByZXR1cm4gQ29tcGlsYXRpb25GYWlsZWQ7IH0KLWlubGluZSBDb21waWxhdGlvblJlc3Vs
dCB0cnlGaW5hbGl6ZVBsYW4oUGFzc1JlZlB0cjxQbGFuPiwgUmVmUHRyPEpTQzo6SklUQ29kZT4m
LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIqKQotewotICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9S
TSgpOwotICAgIHJldHVybiBDb21waWxhdGlvbkZhaWxlZDsKLX0KK2lubGluZSBDb21waWxhdGlv
blJlc3VsdCB0cnlDb21waWxlKEV4ZWNTdGF0ZSosIENvZGVCbG9jayosIHVuc2lnbmVkLCBQYXNz
UmVmUHRyPERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4pIHsgcmV0dXJuIENvbXBpbGF0aW9u
RmFpbGVkOyB9CiAjZW5kaWYKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGYWlsZWRGaW5hbGl6ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmFpbGVkRmluYWxpemVyLmNwcAkocmV2
aXNpb24gMTU0NzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGYWlsZWRGaW5h
bGl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMiArMzksMTIgQEAgRmFpbGVkRmluYWxp
emVyOjp+RmFpbGVkRmluYWxpemVyKCkKIHsKIH0KIAotYm9vbCBGYWlsZWRGaW5hbGl6ZXI6OmZp
bmFsaXplKFJlZlB0cjxKU0M6OkpJVENvZGU+JikKK2Jvb2wgRmFpbGVkRmluYWxpemVyOjpmaW5h
bGl6ZSgpCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEZhaWxlZEZpbmFsaXplcjo6
ZmluYWxpemVGdW5jdGlvbihSZWZQdHI8SlNDOjpKSVRDb2RlPiYsIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciYpCitib29sIEZhaWxlZEZpbmFsaXplcjo6ZmluYWxpemVGdW5jdGlvbigpCiB7CiAgICAg
cmV0dXJuIGZhbHNlOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGYWls
ZWRGaW5hbGl6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZhaWxlZEZpbmFsaXplci5oCShyZXZpc2lvbiAxNTQ3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0ZhaWxlZEZpbmFsaXplci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw4ICsz
OSw4IEBAIHB1YmxpYzoKICAgICBGYWlsZWRGaW5hbGl6ZXIoUGxhbiYpOwogICAgIHZpcnR1YWwg
fkZhaWxlZEZpbmFsaXplcigpOwogICAgIAotICAgIGJvb2wgZmluYWxpemUoUmVmUHRyPEpTQzo6
SklUQ29kZT4mIGVudHJ5KTsKLSAgICBib29sIGZpbmFsaXplRnVuY3Rpb24oUmVmUHRyPEpTQzo6
SklUQ29kZT4mIGVudHJ5LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIHdpdGhBcml0eUNoZWNrKTsK
KyAgICBib29sIGZpbmFsaXplKCk7CisgICAgYm9vbCBmaW5hbGl6ZUZ1bmN0aW9uKCk7CiB9Owog
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0ZpbmFsaXplci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRmluYWxpemVyLmgJKHJldmlzaW9uIDE1NDcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRmluYWxpemVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDggKzQ2LDggQEAg
cHVibGljOgogICAgIEZpbmFsaXplcihQbGFuJik7CiAgICAgdmlydHVhbCB+RmluYWxpemVyKCk7
CiAgICAgCi0gICAgdmlydHVhbCBib29sIGZpbmFsaXplKFJlZlB0cjxKU0M6OkpJVENvZGU+JiBl
bnRyeSkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBmaW5hbGl6ZUZ1bmN0aW9uKFJlZlB0cjxKU0M6
OkpJVENvZGU+JiBlbnRyeSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiB3aXRoQXJpdHlDaGVjaykg
PSAwOworICAgIHZpcnR1YWwgYm9vbCBmaW5hbGl6ZSgpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wg
ZmluYWxpemVGdW5jdGlvbigpID0gMDsKIAogcHJvdGVjdGVkOgogICAgIFBsYW4mIG1fcGxhbjsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklURmluYWxpemVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5jcHAJ
KHJldmlzaW9uIDE1NDcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklURmlu
YWxpemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxF
KERGR19KSVQpCiAKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJERkdDb21tb24u
aCIKICNpbmNsdWRlICJERkdQbGFuLmgiCiAKQEAgLTQ1LDIzICs0NiwyMyBAQCBKSVRGaW5hbGl6
ZXI6On5KSVRGaW5hbGl6ZXIoKQogewogfQogCi1ib29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemUo
UmVmUHRyPEpTQzo6SklUQ29kZT4mIGVudHJ5KQorYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXpl
KCkKIHsKICAgICBmaW5hbGl6ZUNvbW1vbigpOwogICAgIAogICAgIG1faml0Q29kZS0+aW5pdGlh
bGl6ZUNvZGVSZWYobV9saW5rQnVmZmVyLT5maW5hbGl6ZUNvZGVXaXRob3V0RGlzYXNzZW1ibHko
KSk7Ci0gICAgZW50cnkgPSBtX2ppdENvZGU7CisgICAgbV9wbGFuLmNvZGVCbG9jay0+c2V0SklU
Q29kZShtX2ppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpKTsKICAgICAKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplRnVuY3Rpb24oUmVmUHRy
PEpTQzo6SklUQ29kZT4mIGVudHJ5LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIHdpdGhBcml0eUNo
ZWNrKQorYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplRnVuY3Rpb24oKQogewogICAgIGZpbmFs
aXplQ29tbW9uKCk7CiAgICAgCi0gICAgd2l0aEFyaXR5Q2hlY2sgPSBtX2xpbmtCdWZmZXItPmxv
Y2F0aW9uT2YobV9hcml0eUNoZWNrKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgd2l0aEFy
aXR5Q2hlY2sgPSBtX2xpbmtCdWZmZXItPmxvY2F0aW9uT2YobV9hcml0eUNoZWNrKTsKICAgICBt
X2ppdENvZGUtPmluaXRpYWxpemVDb2RlUmVmKG1fbGlua0J1ZmZlci0+ZmluYWxpemVDb2RlV2l0
aG91dERpc2Fzc2VtYmx5KCkpOwotICAgIGVudHJ5ID0gbV9qaXRDb2RlOworICAgIG1fcGxhbi5j
b2RlQmxvY2stPnNldEpJVENvZGUobV9qaXRDb2RlLCB3aXRoQXJpdHlDaGVjayk7CiAgICAgCiAg
ICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VEZpbmFsaXplci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklURmluYWxpemVyLmgJKHJldmlzaW9uIDE1NDcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklURmluYWxpemVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDggKzQyLDggQEAg
cHVibGljOgogICAgIEpJVEZpbmFsaXplcihQbGFuJiwgUGFzc1JlZlB0cjxKSVRDb2RlPiwgUGFz
c093blB0cjxMaW5rQnVmZmVyPiwgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGFyaXR5Q2hlY2sgPSBN
YWNyb0Fzc2VtYmxlcjo6TGFiZWwoKSk7CiAgICAgdmlydHVhbCB+SklURmluYWxpemVyKCk7CiAg
ICAgCi0gICAgYm9vbCBmaW5hbGl6ZShSZWZQdHI8SlNDOjpKSVRDb2RlPiYgZW50cnkpOwotICAg
IGJvb2wgZmluYWxpemVGdW5jdGlvbihSZWZQdHI8SlNDOjpKSVRDb2RlPiYgZW50cnksIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciYgd2l0aEFyaXR5Q2hlY2spOworICAgIGJvb2wgZmluYWxpemUoKTsK
KyAgICBib29sIGZpbmFsaXplRnVuY3Rpb24oKTsKIAogcHJpdmF0ZToKICAgICB2b2lkIGZpbmFs
aXplQ29tbW9uKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRQ
cmVwYXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFeGl0UHJlcGFyYXRpb24uY3BwCShyZXZpc2lvbiAxNTQ3MTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRQcmVwYXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDE5ICszMCwyOCBAQAogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAi
RXhlY3V0YWJsZS5oIgorI2luY2x1ZGUgIkpJVENvZGUuaCIKICNpbmNsdWRlICJPcGVyYXRpb25z
LmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogdm9pZCBwcmVwYXJlQ29k
ZU9yaWdpbkZvck9TUkV4aXQoRXhlY1N0YXRlKiBleGVjLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4p
CiB7CisgICAgRGVmZXJHQyBkZWZlckdDKGV4ZWMtPnZtKCkuaGVhcCk7CisgICAgCiAgICAgZm9y
ICg7IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lOyBjb2RlT3JpZ2luID0gY29kZU9yaWdpbi5p
bmxpbmVDYWxsRnJhbWUtPmNhbGxlcikgewogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4
ZWN1dGFibGUgPQogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4o
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUuZ2V0KCkpOwogICAgICAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWN1dGFibGUtPmJhc2VsaW5lQ29kZUJsb2NrRm9yKAog
ICAgICAgICAgICAgY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmlzQ2FsbCA/IENvZGVGb3JD
YWxsIDogQ29kZUZvckNvbnN0cnVjdCk7CiAgICAgICAgIAotICAgICAgICBjb2RlQmxvY2stPmpp
dENvbXBpbGUoZXhlYyk7CisgICAgICAgIGlmIChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKU0M6
OkpJVENvZGU6OkJhc2VsaW5lSklUKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIEFT
U0VSVChjb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKU0M6OkpJVENvZGU6OkludGVycHJldGVyVGh1
bmspOworICAgICAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBjb2RlQmxvY2stPnByZXBh
cmVGb3JFeGVjdXRpb24oCisgICAgICAgICAgICBleGVjLCBKU0M6OkpJVENvZGU6OkJhc2VsaW5l
SklULCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChy
ZXN1bHQsIHJlc3VsdCA9PSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpOworICAgICAgICBjb2RlQmxv
Y2stPmluc3RhbGwoKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTU0NzE4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI4MSw3
ICsxMjgxLDcgQEAgaW5saW5lIGNoYXIqIGxpbmtGb3IoRXhlY1N0YXRlKiBleGVjQ2FsbAogICAg
ICAgICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvcihraW5kKS0+YWRk
cmVzc0ZvckNhbGwoKTsKICAgICBlbHNlIHsKICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBm
dW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVj
dXRhYmxlKTsKLSAgICAgICAgSlNPYmplY3QqIGVycm9yID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5j
b21waWxlRm9yKGV4ZWNDYWxsZWUsIGNhbGxlZS0+c2NvcGUoKSwga2luZCk7CisgICAgICAgIEpT
T2JqZWN0KiBlcnJvciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbihl
eGVjQ2FsbGVlLCBjYWxsZWUtPnNjb3BlKCksIGtpbmQpOwogICAgICAgICBpZiAoZXJyb3IpIHsK
ICAgICAgICAgICAgIHZtLT5leGNlcHRpb24gPSBjcmVhdGVTdGFja092ZXJmbG93RXJyb3IoZXhl
Yyk7CiAgICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odm0tPmdldENU
SVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKSk7CkBAIC0xMzI2LDcgKzEzMjYsNyBAQCBpbmxpbmUgY2hhciogdmly
dHVhbEZvcldpdGhGdW5jdGlvbihFeGVjCiAgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUg
PSBmdW5jdGlvbi0+ZXhlY3V0YWJsZSgpOwogICAgIGlmIChVTkxJS0VMWSghZXhlY3V0YWJsZS0+
aGFzSklUQ29kZUZvcihraW5kKSkpIHsKICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5j
dGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRh
YmxlKTsKLSAgICAgICAgSlNPYmplY3QqIGVycm9yID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5jb21w
aWxlRm9yKGV4ZWNDYWxsZWUsIGZ1bmN0aW9uLT5zY29wZSgpLCBraW5kKTsKKyAgICAgICAgSlNP
YmplY3QqIGVycm9yID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uKGV4
ZWNDYWxsZWUsIGZ1bmN0aW9uLT5zY29wZSgpLCBraW5kKTsKICAgICAgICAgaWYgKGVycm9yKSB7
CiAgICAgICAgICAgICBleGVjLT52bSgpLmV4Y2VwdGlvbiA9IGVycm9yOwogICAgICAgICAgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0
aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAxNTQ3
MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04MCwxMCArODAsOSBAQCBzdGF0aWMgdm9pZCBkdW1wQW5kVmVyaWZ5R3JhcGgoR3Jh
cGgmIGdyCiB9CiAKIFBsYW46OlBsYW4oCi0gICAgQ29tcGlsZU1vZGUgY29tcGlsZU1vZGUsIFBh
c3NSZWZQdHI8Q29kZUJsb2NrPiBwYXNzZWRDb2RlQmxvY2ssIHVuc2lnbmVkIG9zckVudHJ5Qnl0
ZWNvZGVJbmRleCwKKyAgICBQYXNzUmVmUHRyPENvZGVCbG9jaz4gcGFzc2VkQ29kZUJsb2NrLCB1
bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsCiAgICAgdW5zaWduZWQgbnVtVmFyc1dpdGhW
YWx1ZXMpCi0gICAgOiBjb21waWxlTW9kZShjb21waWxlTW9kZSkKLSAgICAsIHZtKCpwYXNzZWRD
b2RlQmxvY2stPnZtKCkpCisgICAgOiB2bSgqcGFzc2VkQ29kZUJsb2NrLT52bSgpKQogICAgICwg
Y29kZUJsb2NrKHBhc3NlZENvZGVCbG9jaykKICAgICAsIG9zckVudHJ5Qnl0ZWNvZGVJbmRleChv
c3JFbnRyeUJ5dGVjb2RlSW5kZXgpCiAgICAgLCBudW1WYXJzV2l0aFZhbHVlcyhudW1WYXJzV2l0
aFZhbHVlcykKQEAgLTIwOCw3ICsyMDcsNyBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6
Y29tcGlsZUluVGhyCiAKICNpZiBFTkFCTEUoRlRMX0pJVCkKICAgICBpZiAoT3B0aW9uczo6dXNl
RXhwZXJpbWVudGFsRlRMKCkKLSAgICAgICAgJiYgY29tcGlsZU1vZGUgPT0gQ29tcGlsZUZ1bmN0
aW9uCisgICAgICAgICYmIGNvZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUKICAg
ICAgICAgJiYgRlRMOjpjYW5Db21waWxlKGRmZykpIHsKICAgICAgICAgCiAgICAgICAgIHBlcmZv
cm1Dcml0aWNhbEVkZ2VCcmVha2luZyhkZmcpOwpAQCAtMjU1LDEyICsyNTQsMTAgQEAgUGxhbjo6
Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgogICAgIGR1bXBBbmRWZXJpZnlHcmFw
aChkZmcsICJHcmFwaCBhZnRlciBvcHRpbWl6YXRpb246Iik7CiAKICAgICBKSVRDb21waWxlciBk
YXRhRmxvd0pJVChkZmcpOwotICAgIGlmIChjb21waWxlTW9kZSA9PSBDb21waWxlRnVuY3Rpb24p
IHsKKyAgICBpZiAoY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkgewogICAg
ICAgICBkYXRhRmxvd0pJVC5jb21waWxlRnVuY3Rpb24oKTsKICAgICAgICAgZGF0YUZsb3dKSVQu
bGlua0Z1bmN0aW9uKCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJUKGNvbXBpbGVNb2Rl
ID09IENvbXBpbGVPdGhlcik7Ci0gICAgICAgIAogICAgICAgICBkYXRhRmxvd0pJVC5jb21waWxl
KCk7CiAgICAgICAgIGRhdGFGbG93SklULmxpbmsoKTsKICAgICB9CkBAIC0yODMsMjUgKzI4MCwz
MCBAQCB2b2lkIFBsYW46OnJlYWxseUFkZChDb21tb25EYXRhKiBjb21tb25ECiAgICAgd3JpdGVC
YXJyaWVycy50cmlnZ2VyKHZtKTsKIH0KIAotQ29tcGlsYXRpb25SZXN1bHQgUGxhbjo6ZmluYWxp
emUoUmVmUHRyPEpTQzo6SklUQ29kZT4mIGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciog
aml0Q29kZVdpdGhBcml0eUNoZWNrKQorQ29tcGlsYXRpb25SZXN1bHQgUGxhbjo6ZmluYWxpemVX
aXRob3V0Tm90aWZ5aW5nQ2FsbGJhY2soKQogewogICAgIGlmICghaXNTdGlsbFZhbGlkKCkpCiAg
ICAgICAgIHJldHVybiBDb21waWxhdGlvbkludmFsaWRhdGVkOwogICAgIAogICAgIGJvb2wgcmVz
dWx0OwotICAgIGlmIChjb21waWxlTW9kZSA9PSBDb21waWxlRnVuY3Rpb24pCi0gICAgICAgIHJl
c3VsdCA9IGZpbmFsaXplci0+ZmluYWxpemVGdW5jdGlvbihqaXRDb2RlLCAqaml0Q29kZVdpdGhB
cml0eUNoZWNrKTsKKyAgICBpZiAoY29kZUJsb2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29k
ZSkKKyAgICAgICAgcmVzdWx0ID0gZmluYWxpemVyLT5maW5hbGl6ZUZ1bmN0aW9uKCk7CiAgICAg
ZWxzZQotICAgICAgICByZXN1bHQgPSBmaW5hbGl6ZXItPmZpbmFsaXplKGppdENvZGUpOworICAg
ICAgICByZXN1bHQgPSBmaW5hbGl6ZXItPmZpbmFsaXplKCk7CiAgICAgCiAgICAgaWYgKCFyZXN1
bHQpCiAgICAgICAgIHJldHVybiBDb21waWxhdGlvbkZhaWxlZDsKICAgICAKLSAgICByZWFsbHlB
ZGQoaml0Q29kZS0+ZGZnQ29tbW9uKCkpOworICAgIHJlYWxseUFkZChjb2RlQmxvY2stPmppdENv
ZGUoKS0+ZGZnQ29tbW9uKCkpOwogICAgIAogICAgIHJldHVybiBDb21waWxhdGlvblN1Y2Nlc3Nm
dWw7CiB9CiAKK3ZvaWQgUGxhbjo6ZmluYWxpemVBbmROb3RpZnlDYWxsYmFjaygpCit7CisgICAg
Y2FsbGJhY2stPmNvbXBpbGF0aW9uRGlkQ29tcGxldGUoY29kZUJsb2NrLmdldCgpLCBmaW5hbGl6
ZVdpdGhvdXROb3RpZnlpbmdDYWxsYmFjaygpKTsKK30KKwogQ29kZUJsb2NrKiBQbGFuOjprZXko
KQogewogICAgIHJldHVybiBjb2RlQmxvY2stPmFsdGVybmF0aXZlKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1BsYW4uaAkocmV2aXNpb24gMTU0NzE4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAK
ICNpbmNsdWRlICJERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuaCIKICNpbmNsdWRlICJERkdEZXNp
cmVkV3JpdGVCYXJyaWVycy5oIgogI2luY2x1ZGUgIkRGR0ZpbmFsaXplci5oIgorI2luY2x1ZGUg
IkRlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIgogI2luY2x1ZGUgIk9wZXJhbmRzLmgiCiAj
aW5jbHVkZSAiUHJvZmlsZXJDb21waWxhdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZl
UmVmQ291bnRlZC5oPgpAQCAtNDgsMjMgKzQ5LDIwIEBAIG5hbWVzcGFjZSBERkcgewogCiBjbGFz
cyBMb25nTGl2ZWRTdGF0ZTsKIAotZW51bSBDb21waWxlTW9kZSB7IENvbXBpbGVGdW5jdGlvbiwg
Q29tcGlsZU90aGVyIH07Ci0KICNpZiBFTkFCTEUoREZHX0pJVCkKIAogc3RydWN0IFBsYW4gOiBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8UGxhbj4gewogICAgIFBsYW4oCi0gICAgICAgIENv
bXBpbGVNb2RlIGNvbXBpbGVNb2RlLCBQYXNzUmVmUHRyPENvZGVCbG9jaz4gY29kZUJsb2NrLAot
ICAgICAgICB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIHVuc2lnbmVkIG51bVZhcnNX
aXRoVmFsdWVzKTsKKyAgICAgICAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+LCB1bnNpZ25lZCBvc3JF
bnRyeUJ5dGVjb2RlSW5kZXgsIHVuc2lnbmVkIG51bVZhcnNXaXRoVmFsdWVzKTsKICAgICB+UGxh
bigpOwogICAgIAogICAgIHZvaWQgY29tcGlsZUluVGhyZWFkKExvbmdMaXZlZFN0YXRlJik7CiAg
ICAgCi0gICAgQ29tcGlsYXRpb25SZXN1bHQgZmluYWxpemUoUmVmUHRyPEpTQzo6SklUQ29kZT4m
IGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciogaml0Q29kZVdpdGhBcml0eUNoZWNrKTsK
KyAgICBDb21waWxhdGlvblJlc3VsdCBmaW5hbGl6ZVdpdGhvdXROb3RpZnlpbmdDYWxsYmFjaygp
OworICAgIHZvaWQgZmluYWxpemVBbmROb3RpZnlDYWxsYmFjaygpOwogICAgIAogICAgIENvZGVC
bG9jayoga2V5KCk7CiAgICAgCi0gICAgY29uc3QgQ29tcGlsZU1vZGUgY29tcGlsZU1vZGU7CiAg
ICAgVk0mIHZtOwogICAgIFJlZlB0cjxDb2RlQmxvY2s+IGNvZGVCbG9jazsKICAgICBjb25zdCB1
bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXg7CkBAIC04Niw2ICs4NCw4IEBAIHN0cnVjdCBQ
bGFuIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGUKICAgICAKICAgICBib29sIGlzQ29tcGls
ZWQ7CiAKKyAgICBSZWZQdHI8RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPiBjYWxsYmFjazsK
KwogcHJpdmF0ZToKICAgICBlbnVtIENvbXBpbGF0aW9uUGF0aCB7IEZhaWxQYXRoLCBERkdQYXRo
LCBGVExQYXRoIH07CiAgICAgQ29tcGlsYXRpb25QYXRoIGNvbXBpbGVJblRocmVhZEltcGwoTG9u
Z0xpdmVkU3RhdGUmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xp
c3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xp
c3QuY3BwCShyZXZpc2lvbiAxNTQ3MTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1dvcmtsaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY1LDEwICsxNjUsNyBAQCBXb3JrbGlz
dDo6U3RhdGUgV29ya2xpc3Q6OmNvbXBsZXRlQWxsUmVhCiAgICAgICAgIAogICAgICAgICBSRUxF
QVNFX0FTU0VSVChwbGFuLT5pc0NvbXBpbGVkKTsKICAgICAgICAgCi0gICAgICAgIENvbXBpbGF0
aW9uUmVzdWx0IGNvbXBpbGF0aW9uUmVzdWx0ID0KLSAgICAgICAgICAgIHByb2ZpbGVkQmxvY2st
PnJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlKHBsYW4pOwotICAgICAgICBSRUxFQVNF
X0FTU0VSVChjb21waWxhdGlvblJlc3VsdCAhPSBDb21waWxhdGlvbkRlZmVycmVkKTsKLSAgICAg
ICAgcHJvZmlsZWRCbG9jay0+c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0
aW9uUmVzdWx0KGNvbXBpbGF0aW9uUmVzdWx0KTsKKyAgICAgICAgcGxhbi0+ZmluYWxpemVBbmRO
b3RpZnlDYWxsYmFjaygpOwogICAgICAgICAKICAgICAgICAgaWYgKHByb2ZpbGVkQmxvY2sgPT0g
cmVxdWVzdGVkUHJvZmlsZWRCbG9jaykKICAgICAgICAgICAgIHJlc3VsdGluZ1N0YXRlID0gQ29t
cGlsZWQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCShyZXZpc2lvbiAxNTQ3MTgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE4NCw2ICsxODQsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgY29uc3QgSklUU3R1YlJv
dXRpbmVTZXQmIGppdFN0dWJSb3V0aW5lcygpIHsgcmV0dXJuIG1faml0U3R1YlJvdXRpbmVzOyB9
CiAgICAgICAgIAogICAgICAgICB2b2lkIGFkZFJlZmVyZW5jZShKU0NlbGwqLCBBcnJheUJ1ZmZl
ciopOworICAgICAgICAKKyAgICAgICAgYm9vbCBpc0RlZmVycmVkKCkgY29uc3QgeyByZXR1cm4g
ISFtX2RlZmVycmFsRGVwdGg7IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFz
cyBDb2RlQmxvY2s7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDE1NDcxOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgx
Nyw3ICs4MTcsNyBAQCBmYWlsZWRKU09OUDoKICAgICBpZiAoSlNPYmplY3QqIGVycm9yID0gcHJv
Z3JhbS0+aW5pdGlhbGl6ZUdsb2JhbFByb3BlcnRpZXModm0sIGNhbGxGcmFtZSwgc2NvcGUpKQog
ICAgICAgICByZXR1cm4gY2hlY2tlZFJldHVybih0aHJvd0Vycm9yKGNhbGxGcmFtZSwgZXJyb3Ip
KTsKIAotICAgIGlmIChKU09iamVjdCogZXJyb3IgPSBwcm9ncmFtLT5jb21waWxlKGNhbGxGcmFt
ZSwgc2NvcGUpKQorICAgIGlmIChKU09iamVjdCogZXJyb3IgPSBwcm9ncmFtLT5wcmVwYXJlRm9y
RXhlY3V0aW9uKGNhbGxGcmFtZSwgc2NvcGUsIENvZGVGb3JDYWxsKSkKICAgICAgICAgcmV0dXJu
IGNoZWNrZWRSZXR1cm4odGhyb3dFcnJvcihjYWxsRnJhbWUsIGVycm9yKSk7CiAKICAgICBQcm9n
cmFtQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSAmcHJvZ3JhbS0+Z2VuZXJhdGVkQnl0ZWNvZGUoKTsK
QEAgLTg4Niw3ICs4ODYsNyBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlQ2FsbChDYWxs
RnJhCiAKICAgICBpZiAoaXNKU0NhbGwpIHsKICAgICAgICAgLy8gQ29tcGlsZSB0aGUgY2FsbGVl
OgotICAgICAgICBKU09iamVjdCogY29tcGlsZUVycm9yID0gY2FsbERhdGEuanMuZnVuY3Rpb25F
eGVjdXRhYmxlLT5jb21waWxlRm9yQ2FsbChjYWxsRnJhbWUsIHNjb3BlKTsKKyAgICAgICAgSlNP
YmplY3QqIGNvbXBpbGVFcnJvciA9IGNhbGxEYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJl
cGFyZUZvckV4ZWN1dGlvbihjYWxsRnJhbWUsIHNjb3BlLCBDb2RlRm9yQ2FsbCk7CiAgICAgICAg
IGlmIChVTkxJS0VMWSghIWNvbXBpbGVFcnJvcikpIHsKICAgICAgICAgICAgIHJldHVybiBjaGVj
a2VkUmV0dXJuKHRocm93RXJyb3IoY2FsbEZyYW1lLCBjb21waWxlRXJyb3IpKTsKICAgICAgICAg
fQpAQCAtOTY1LDcgKzk2NSw3IEBAIEpTT2JqZWN0KiBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNvbnN0
cnVjdCgKIAogICAgIGlmIChpc0pTQ29uc3RydWN0KSB7CiAgICAgICAgIC8vIENvbXBpbGUgdGhl
IGNhbGxlZToKLSAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVFcnJvciA9IGNvbnN0cnVjdERhdGEu
anMuZnVuY3Rpb25FeGVjdXRhYmxlLT5jb21waWxlRm9yQ29uc3RydWN0KGNhbGxGcmFtZSwgc2Nv
cGUpOworICAgICAgICBKU09iamVjdCogY29tcGlsZUVycm9yID0gY29uc3RydWN0RGF0YS5qcy5m
dW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb24oY2FsbEZyYW1lLCBzY29wZSwg
Q29kZUZvckNvbnN0cnVjdCk7CiAgICAgICAgIGlmIChVTkxJS0VMWSghIWNvbXBpbGVFcnJvcikp
IHsKICAgICAgICAgICAgIHJldHVybiBjaGVja2VkUmV0dXJuKHRocm93RXJyb3IoY2FsbEZyYW1l
LCBjb21waWxlRXJyb3IpKTsKICAgICAgICAgfQpAQCAtMTAzOSw3ICsxMDM5LDcgQEAgQ2FsbEZy
YW1lQ2xvc3VyZSBJbnRlcnByZXRlcjo6cHJlcGFyZUZvcgogICAgIH0KIAogICAgIC8vIENvbXBp
bGUgdGhlIGNhbGxlZToKLSAgICBKU09iamVjdCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUt
PmNvbXBpbGVGb3JDYWxsKGNhbGxGcmFtZSwgc2NvcGUpOworICAgIEpTT2JqZWN0KiBlcnJvciA9
IGZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbihjYWxsRnJhbWUsIHNjb3Bl
LCBDb2RlRm9yQ2FsbCk7CiAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgIHRocm93RXJyb3IoY2Fs
bEZyYW1lLCBlcnJvcik7CiAgICAgICAgIHJldHVybiBDYWxsRnJhbWVDbG9zdXJlKCk7CkBAIC0x
MTU1LDcgKzExNTUsNyBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlKEV2YWxFeGVjdXRh
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBKU09iamVjdCogY29tcGlsZUVycm9yID0gZXZhbC0+
Y29tcGlsZShjYWxsRnJhbWUsIHNjb3BlKTsKKyAgICBKU09iamVjdCogY29tcGlsZUVycm9yID0g
ZXZhbC0+cHJlcGFyZUZvckV4ZWN1dGlvbihjYWxsRnJhbWUsIHNjb3BlLCBDb2RlRm9yQ2FsbCk7
CiAgICAgaWYgKFVOTElLRUxZKCEhY29tcGlsZUVycm9yKSkKICAgICAgICAgcmV0dXJuIGNoZWNr
ZWRSZXR1cm4odGhyb3dFcnJvcihjYWxsRnJhbWUsIGNvbXBpbGVFcnJvcikpOwogICAgIEV2YWxD
b2RlQmxvY2sqIGNvZGVCbG9jayA9ICZldmFsLT5nZW5lcmF0ZWRCeXRlY29kZSgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVREcml2ZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVERyaXZlci5oCShyZXZpc2lvbiAxNTQ3MTgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVERyaXZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDE1MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICovCi0KLSNpZm5kZWYgSklURHJpdmVyX2gKLSNkZWZpbmUgSklURHJpdmVyX2gKLQotI2lu
Y2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgotCi0jaWYgRU5BQkxFKEpJVCkKLQotI2luY2x1ZGUgIkJ5
dGVjb2RlR2VuZXJhdG9yLmgiCi0jaW5jbHVkZSAiQ29tcGlsYXRpb25SZXN1bHQuaCIKLSNpbmNs
dWRlICJERkdEcml2ZXIuaCIKLSNpbmNsdWRlICJKSVQuaCIKLSNpbmNsdWRlICJMTEludEVudHJ5
cG9pbnRzLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxv
Y2tUeXBlPgotaW5saW5lIENvbXBpbGF0aW9uUmVzdWx0IGppdENvbXBpbGVJZkFwcHJvcHJpYXRl
SW1wbCgKLSAgICBFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9ja1R5cGUqIGNvZGVCbG9jaywgUmVm
UHRyPEpJVENvZGU+JiBqaXRDb2RlLAotICAgIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSwgdW5z
aWduZWQgYnl0ZWNvZGVJbmRleCwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQotewotICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgCi0gICAgaWYgKGppdFR5cGUgPT0gY29kZUJsb2Nr
LT5qaXRUeXBlKCkpCi0gICAgICAgIHJldHVybiBDb21waWxhdGlvbk5vdE5lZWRlZDsKLSAgICAK
LSAgICBpZiAoIXZtLmNhblVzZUpJVCgpKQotICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25Ob3RO
ZWVkZWQ7IC8vIEZJWE1FOiBJbnZlc3RpZ2F0ZSBpZiB0aGlzIGlzIHJpZ2h0LiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE2MjQ2Ci0gICAgCi0gICAgY29kZUJsb2Nr
LT51bmxpbmtJbmNvbWluZ0NhbGxzKCk7Ci0gICAgCi0gICAgUmVmUHRyPEpJVENvZGU+IG9sZEpJ
VENvZGUgPSBqaXRDb2RlOwotICAgIAotICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQo
aml0VHlwZSkpIHsKLSAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0KLSAgICAgICAg
ICAgIERGRzo6dHJ5Q29tcGlsZShleGVjLCBjb2RlQmxvY2ssIGppdENvZGUsIGJ5dGVjb2RlSW5k
ZXgpOwotICAgICAgICBpZiAocmVzdWx0ID09IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bCkKLSAgICAg
ICAgICAgIGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+dW5saW5rSW5jb21pbmdDYWxscygpOwot
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChvbGRKSVRDb2RlID09IGppdENvZGUp
OwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIFJlZlB0cjxKSVRDb2RlPiByZXN1bHQgPSBKSVQ6OmNvbXBpbGUoJnZtLCBjb2RlQmxv
Y2ssIGVmZm9ydCk7Ci0gICAgICAgIGlmIChyZXN1bHQpCi0gICAgICAgICAgICBqaXRDb2RlID0g
cmVzdWx0OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25GYWls
ZWQ7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBDb21waWxhdGlvblN1Y2Nlc3NmdWw7Ci19Ci0K
LWlubGluZSBDb21waWxhdGlvblJlc3VsdCBqaXRDb21waWxlRnVuY3Rpb25JZkFwcHJvcHJpYXRl
SW1wbCgKLSAgICBFeGVjU3RhdGUqIGV4ZWMsIEZ1bmN0aW9uQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IFJlZlB0cjxKSVRDb2RlPiYgaml0Q29kZSwKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGpp
dENvZGVXaXRoQXJpdHlDaGVjaywgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlLAotICAgIHVuc2ln
bmVkIGJ5dGVjb2RlSW5kZXgsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKLXsKLSAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwotICAgIAotICAgIGlmIChqaXRUeXBlID09IGNvZGVCbG9jay0+
aml0VHlwZSgpKQotICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25Ob3ROZWVkZWQ7Ci0gICAgCi0g
ICAgaWYgKCF2bS5jYW5Vc2VKSVQoKSkKLSAgICAgICAgcmV0dXJuIENvbXBpbGF0aW9uTm90TmVl
ZGVkOyAvLyBGSVhNRTogSW52ZXN0aWdhdGUgaWYgdGhpcyBpcyByaWdodC4gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNjI0NgotICAgIAotICAgIGNvZGVCbG9jay0+
dW5saW5rSW5jb21pbmdDYWxscygpOwotICAgIAotICAgIFJlZlB0cjxKSVRDb2RlPiBvbGRKSVRD
b2RlID0gaml0Q29kZTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgb2xkSklUQ29kZVdpdGhB
cml0eUNoZWNrID0gaml0Q29kZVdpdGhBcml0eUNoZWNrOwotICAgIAotICAgIGlmIChKSVRDb2Rl
Ojppc09wdGltaXppbmdKSVQoaml0VHlwZSkpIHsKLSAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQg
cmVzdWx0ID0gREZHOjp0cnlDb21waWxlRnVuY3Rpb24oCi0gICAgICAgICAgICBleGVjLCBjb2Rl
QmxvY2ssIGppdENvZGUsIGppdENvZGVXaXRoQXJpdHlDaGVjaywgYnl0ZWNvZGVJbmRleCk7Ci0g
ICAgICAgIGlmIChyZXN1bHQgPT0gQ29tcGlsYXRpb25TdWNjZXNzZnVsKQotICAgICAgICAgICAg
Y29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT51bmxpbmtJbmNvbWluZ0NhbGxzKCk7Ci0gICAgICAg
IGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKG9sZEpJVENvZGUgPT0gaml0Q29kZSk7Ci0gICAg
ICAgICAgICBBU1NFUlRfVU5VU0VEKG9sZEpJVENvZGVXaXRoQXJpdHlDaGVjaywgb2xkSklUQ29k
ZVdpdGhBcml0eUNoZWNrID09IGppdENvZGVXaXRoQXJpdHlDaGVjayk7Ci0gICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgUmVmUHRyPEpJ
VENvZGU+IHJlc3VsdCA9Ci0gICAgICAgICAgICBKSVQ6OmNvbXBpbGUoJnZtLCBjb2RlQmxvY2ss
IGVmZm9ydCwgJmppdENvZGVXaXRoQXJpdHlDaGVjayk7Ci0gICAgICAgIGlmIChyZXN1bHQpCi0g
ICAgICAgICAgICBqaXRDb2RlID0gcmVzdWx0OwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IEFTU0VSVF9VTlVTRUQob2xkSklUQ29kZVdpdGhBcml0eUNoZWNrLCBvbGRKSVRDb2RlV2l0aEFy
aXR5Q2hlY2sgPT0gaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKLSAgICAgICAgICAgIHJldHVybiBD
b21waWxhdGlvbkZhaWxlZDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBDb21waWxh
dGlvblN1Y2Nlc3NmdWw7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+Ci1p
bmxpbmUgQ29tcGlsYXRpb25SZXN1bHQgaml0Q29tcGlsZUlmQXBwcm9wcmlhdGUoCi0gICAgRXhl
Y1N0YXRlKiBleGVjLCBDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIFJlZlB0cjxKSVRDb2RlPiYg
aml0Q29kZSwKLSAgICBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUsIHVuc2lnbmVkIGJ5dGVjb2Rl
SW5kZXgsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKLXsKLSAgICBDb21waWxhdGlvblJl
c3VsdCByZXN1bHQgPSBqaXRDb21waWxlSWZBcHByb3ByaWF0ZUltcGwoCi0gICAgICAgIGV4ZWMs
IGNvZGVCbG9jaywgaml0Q29kZSwgaml0VHlwZSwgYnl0ZWNvZGVJbmRleCwgZWZmb3J0KTsKLSAg
ICBpZiAocmVzdWx0ID09IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bCkgewotICAgICAgICBjb2RlQmxv
Y2stPnNldEpJVENvZGUoaml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCkpOwotICAgICAg
ICBjb2RlQmxvY2stPnZtKCktPmhlYXAucmVwb3J0RXh0cmFNZW1vcnlDb3N0KGppdENvZGUtPnNp
emUoKSk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19ICAgIAotCi1pbmxpbmUgQ29tcGls
YXRpb25SZXN1bHQgaml0Q29tcGlsZUZ1bmN0aW9uSWZBcHByb3ByaWF0ZSgKLSAgICBFeGVjU3Rh
dGUqIGV4ZWMsIEZ1bmN0aW9uQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFJlZlB0cjxKSVRDb2RlPiYg
aml0Q29kZSwKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGppdENvZGVXaXRoQXJpdHlDaGVj
aywgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlLAotICAgIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgs
IEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKLXsKLSAgICBDb21waWxhdGlvblJlc3VsdCBy
ZXN1bHQgPSBqaXRDb21waWxlRnVuY3Rpb25JZkFwcHJvcHJpYXRlSW1wbCgKLSAgICAgICAgZXhl
YywgY29kZUJsb2NrLCBqaXRDb2RlLCBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ssIGppdFR5cGUsIGJ5
dGVjb2RlSW5kZXgsIGVmZm9ydCk7Ci0gICAgaWYgKHJlc3VsdCA9PSBDb21waWxhdGlvblN1Y2Nl
c3NmdWwpIHsKLSAgICAgICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKGppdENvZGUsIGppdENvZGVX
aXRoQXJpdHlDaGVjayk7Ci0gICAgICAgIGNvZGVCbG9jay0+dm0oKS0+aGVhcC5yZXBvcnRFeHRy
YU1lbW9yeUNvc3Qoaml0Q29kZS0+c2l6ZSgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUoSklUKQotCi0jZW5k
aWYgLy8gSklURHJpdmVyX2gKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRT
dHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVi
cy5jcHAJKHJldmlzaW9uIDE1NDcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
U3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBACiAjaW5jbHVkZSA8d3Rm
L0lubGluZUFTTS5oPgogI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIkpJVEV4Y2VwdGlvbnMu
aCIKKyNpbmNsdWRlICJKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIgogI2lu
Y2x1ZGUgIkpTQWN0aXZhdGlvbi5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJK
U0Z1bmN0aW9uLmgiCkBAIC0xMDE5LDcgKzEwMjAsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2
b2lkLCBvcHRpbWl6ZSkKICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKICAgICAg
ICAgICAgIGRhdGFMb2coIkNvbnNpZGVyaW5nIE9TUiAiLCAqY29kZUJsb2NrLCAiIC0+ICIsICpj
b2RlQmxvY2stPnJlcGxhY2VtZW50KCksICIuXG4iKTsKICAgICAgICAgLy8gSWYgd2UgaGF2ZSBh
biBvcHRpbWl6ZWQgcmVwbGFjZW1lbnQsIHRoZW4gaXQgbXVzdCBiZSB0aGUgY2FzZSB0aGF0IHdl
IGVudGVyZWQKLSAgICAgICAgLy8gY3RpX29wdGltaXplIGZyb20gYSBsb29wLiBUaGF0J3MgYmVj
YXVzZSBpcyB0aGVyZSdzIGFuIG9wdGltaXplZCByZXBsYWNlbWVudCwKKyAgICAgICAgLy8gY3Rp
X29wdGltaXplIGZyb20gYSBsb29wLiBUaGF0J3MgYmVjYXVzZSBpZiB0aGVyZSdzIGFuIG9wdGlt
aXplZCByZXBsYWNlbWVudCwKICAgICAgICAgLy8gdGhlbiBhbGwgY2FsbHMgdG8gdGhpcyBmdW5j
dGlvbiB3aWxsIGJlIHJlbGlua2VkIHRvIHRoZSByZXBsYWNlbWVudCBhbmQgc28KICAgICAgICAg
Ly8gdGhlIHByb2xvZ3VlIE9TUiB3aWxsIG5ldmVyIGZpcmUuCiAgICAgICAgIApAQCAtMTA1Mywx
OCArMTA1NCwxOSBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZSkKICAgICAg
ICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKICAgICAgICAgICAgIGRhdGFMb2coIlRyaWdn
ZXJpbmcgb3B0aW1pemVkIGNvbXBpbGF0aW9uIG9mICIsICpjb2RlQmxvY2ssICJcbiIpOwogICAg
ICAgICAKLSAgICAgICAgSlNTY29wZSogc2NvcGUgPSBjYWxsRnJhbWUtPnNjb3BlKCk7Ci0gICAg
ICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdDsKLSAgICAgICAgSlNPYmplY3QqIGVycm9yID0g
Y29kZUJsb2NrLT5jb21waWxlT3B0aW1pemVkKGNhbGxGcmFtZSwgc2NvcGUsIHJlc3VsdCwgYnl0
ZWNvZGVJbmRleCk7Ci0gICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKKyAgICAg
ICAgUmVmUHRyPERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4gY2FsbGJhY2sgPSBhZG9wdFJl
ZigKKyAgICAgICAgICAgIG5ldyBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaygp
KTsKKyAgICAgICAgUmVmUHRyPENvZGVCbG9jaz4gbmV3Q29kZUJsb2NrID0gY29kZUJsb2NrLT5u
ZXdSZXBsYWNlbWVudCgpOworICAgICAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBuZXdD
b2RlQmxvY2stPnByZXBhcmVGb3JFeGVjdXRpb24oCisgICAgICAgICAgICBjYWxsRnJhbWUsIEpJ
VENvZGU6OkRGR0pJVCwgSklUQ29tcGlsYXRpb25DYW5GYWlsLCBieXRlY29kZUluZGV4LCBjYWxs
YmFjayk7CisgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCiAgICAgICAgICAgICBk
YXRhTG9nKCJPcHRpbWl6aW5nIGNvbXBpbGF0aW9uIG9mICIsICpjb2RlQmxvY2ssICIgcmVzdWx0
OiAiLCByZXN1bHQsICJcbiIpOwotICAgICAgICAgICAgaWYgKGVycm9yKQotICAgICAgICAgICAg
ICAgIGRhdGFMb2coIldBUk5JTkc6IG9wdGltaXplZCBjb21waWxhdGlvbiBmYWlsZWQgd2l0aCBh
IEpTIGVycm9yLlxuIik7Ci0gICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGNvZGVCbG9jay0+
c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KHJlc3VsdCk7
CiAgICAgICAgIGlmIChyZXN1bHQgIT0gQ29tcGlsYXRpb25TdWNjZXNzZnVsKQogICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgbmV3Q29kZUJsb2NrLT5pbnN0YWxsKCk7CiAg
ICAgfQogICAgIAogICAgIENvZGVCbG9jayogb3B0aW1pemVkQ29kZUJsb2NrID0gY29kZUJsb2Nr
LT5yZXBsYWNlbWVudCgpOwpAQCAtMTE4OSw3ICsxMTkxLDcgQEAgaW5saW5lIHZvaWQqIGppdENv
bXBpbGVGb3IoQ2FsbEZyYW1lKiBjYQogICAgIEFTU0VSVCghZnVuY3Rpb24tPmlzSG9zdEZ1bmN0
aW9uKCkpOwogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGZ1bmN0aW9uLT5q
c0V4ZWN1dGFibGUoKTsKICAgICBKU1Njb3BlKiBjYWxsRGF0YVNjb3BlQ2hhaW4gPSBmdW5jdGlv
bi0+c2NvcGUoKTsKLSAgICBKU09iamVjdCogZXJyb3IgPSBleGVjdXRhYmxlLT5jb21waWxlRm9y
KGNhbGxGcmFtZSwgY2FsbERhdGFTY29wZUNoYWluLCBraW5kKTsKKyAgICBKU09iamVjdCogZXJy
b3IgPSBleGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uKGNhbGxGcmFtZSwgY2FsbERhdGFT
Y29wZUNoYWluLCBraW5kKTsKICAgICBpZiAoIWVycm9yKQogICAgICAgICByZXR1cm4gZnVuY3Rp
b247CiAgICAgY2FsbEZyYW1lLT52bSgpLmV4Y2VwdGlvbiA9IGVycm9yOwpAQCAtMTI4OCw3ICsx
MjkwLDcgQEAgaW5saW5lIHZvaWQqIGxhenlMaW5rRm9yKENhbGxGcmFtZSogY2FsbAogICAgICAg
ICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvcihraW5kKS0+YWRkcmVz
c0ZvckNhbGwoKTsKICAgICBlbHNlIHsKICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5j
dGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRh
YmxlKTsKLSAgICAgICAgaWYgKEpTT2JqZWN0KiBlcnJvciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+
Y29tcGlsZUZvcihjYWxsRnJhbWUsIGNhbGxlZS0+c2NvcGUoKSwga2luZCkpIHsKKyAgICAgICAg
aWYgKEpTT2JqZWN0KiBlcnJvciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1
dGlvbihjYWxsRnJhbWUsIGNhbGxlZS0+c2NvcGUoKSwga2luZCkpIHsKICAgICAgICAgICAgIGNh
bGxGcmFtZS0+dm0oKS5leGNlcHRpb24gPSBlcnJvcjsKICAgICAgICAgICAgIHJldHVybiAwOwog
ICAgICAgICB9CkBAIC0xMzY1LDcgKzEzNjcsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lk
Kiwgdm1fbGF6eUxpbmtDCiAgICAgICAgIAogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1
bmN0aW9uRXhlY3V0YWJsZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxl
KTsKICAgICAgICAgSlNTY29wZSogc2NvcGVDaGFpbiA9IGNhbGxlZS0+c2NvcGUoKTsKLSAgICAg
ICAgSlNPYmplY3QqIGVycm9yID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5jb21waWxlRm9yKGNhbGxG
cmFtZSwgc2NvcGVDaGFpbiwgQ29kZUZvckNhbGwpOworICAgICAgICBKU09iamVjdCogZXJyb3Ig
PSBmdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb24oY2FsbEZyYW1lLCBzY29w
ZUNoYWluLCBDb2RlRm9yQ2FsbCk7CiAgICAgICAgIGlmIChlcnJvcikgewogICAgICAgICAgICAg
Y2FsbEZyYW1lLT52bSgpLmV4Y2VwdGlvbiA9IGVycm9yOwogICAgICAgICAgICAgcmV0dXJuIDA7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRvREZHRGVmZXJyZWRDb21waWxh
dGlvbkNhbGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2Fs
bGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgiCisKKyNpbmNsdWRl
ICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJFeGVjdXRhYmxlLmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCitKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6SklUVG9ERkdEZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2soKSB7IH0KK0pJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNh
bGxiYWNrOjp+SklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2soKSB7IH0KKwordm9p
ZCBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y29tcGlsYXRpb25EaWRDb21w
bGV0ZSgKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0
KQoreworICAgIEFTU0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBK
SVRDb2RlOjpCYXNlbGluZUpJVCk7CisgICAgCisgICAgaWYgKHJlc3VsdCA9PSBDb21waWxhdGlv
blN1Y2Nlc3NmdWwpCisgICAgICAgIGNvZGVCbG9jay0+aW5zdGFsbCgpOworICAgIAorICAgIGNv
ZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNv
bXBpbGF0aW9uUmVzdWx0KHJlc3VsdCk7Cit9CisKK30gLy8gSlNDCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRvREZHRGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrX2gK
KyNkZWZpbmUgSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2tfaAorCisjaW5jbHVk
ZSAiRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitj
bGFzcyBTY3JpcHRFeGVjdXRhYmxlOworCitjbGFzcyBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFjayA6IHB1YmxpYyBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2sgeworcHVibGlj
OgorICAgIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrKCk7CisgICAgdmlydHVh
bCB+SklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2soKTsKKworICAgIHZpcnR1YWwg
dm9pZCBjb21waWxhdGlvbkRpZENvbXBsZXRlKENvZGVCbG9jayosIENvbXBpbGF0aW9uUmVzdWx0
KTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSklUVG9ERkdEZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnRFbnRyeXBvaW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xMSW50RW50cnlwb2ludHMuY3BwCShyZXZpc2lvbiAxNTQ3MTgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFbnRyeXBvaW50cy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTI4LDYyICsyOCw3NyBAQAogCiAjaWYgRU5BQkxFKExMSU5UKQogCisjaW5jbHVkZSAiQ29k
ZUJsb2NrLmgiCiAjaW5jbHVkZSAiSklUQ29kZS5oIgotI2luY2x1ZGUgIlZNLmgiCiAjaW5jbHVk
ZSAiSlNPYmplY3QuaCIKICNpbmNsdWRlICJMTEludFRodW5rcy5oIgogI2luY2x1ZGUgIkxvd0xl
dmVsSW50ZXJwcmV0ZXIuaCIKKyNpbmNsdWRlICJWTS5oIgogCiAKIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgTExJbnQgewogCi12b2lkIGdldEZ1bmN0aW9uRW50cnlwb2ludChWTSYgdm0sIENv
ZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgUmVmUHRyPEpJVENvZGU+JiBqaXRDb2RlLCBNYWNy
b0Fzc2VtYmxlckNvZGVQdHImIGFyaXR5Q2hlY2spCit2b2lkIHNldEZ1bmN0aW9uRW50cnlwb2lu
dChWTSYgdm0sIEZ1bmN0aW9uQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7CisgICAgQ29kZVNwZWNp
YWxpemF0aW9uS2luZCBraW5kID0gY29kZUJsb2NrLT5zcGVjaWFsaXphdGlvbktpbmQoKTsKKyAg
ICAKICAgICBpZiAoIXZtLmNhblVzZUpJVCgpKSB7CiAgICAgICAgIGlmIChraW5kID09IENvZGVG
b3JDYWxsKSB7Ci0gICAgICAgICAgICBqaXRDb2RlID0gYWRvcHRSZWYobmV3IERpcmVjdEpJVENv
ZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxpbnRfZnVuY3Rp
b25fZm9yX2NhbGxfcHJvbG9ndWUpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSk7Ci0gICAg
ICAgICAgICBhcml0eUNoZWNrID0gTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVMTEludENv
ZGVQdHIobGxpbnRfZnVuY3Rpb25fZm9yX2NhbGxfYXJpdHlfY2hlY2spOworICAgICAgICAgICAg
Y29kZUJsb2NrLT5zZXRKSVRDb2RlKAorICAgICAgICAgICAgICAgIGFkb3B0UmVmKG5ldyBEaXJl
Y3RKSVRDb2RlKE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlTExJbnRDb2RlUmVmKGxsaW50
X2Z1bmN0aW9uX2Zvcl9jYWxsX3Byb2xvZ3VlKSwgSklUQ29kZTo6SW50ZXJwcmV0ZXJUaHVuaykp
LAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlTExJbnRDb2Rl
UHRyKGxsaW50X2Z1bmN0aW9uX2Zvcl9jYWxsX2FyaXR5X2NoZWNrKSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3Ry
dWN0KTsKLSAgICAgICAgaml0Q29kZSA9IGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlTExJbnRDb2RlUmVmKGxsaW50X2Z1bmN0aW9uX2Zvcl9j
b25zdHJ1Y3RfcHJvbG9ndWUpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSk7Ci0gICAgICAg
IGFyaXR5Q2hlY2sgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUxMSW50Q29kZVB0cihs
bGludF9mdW5jdGlvbl9mb3JfY29uc3RydWN0X2FyaXR5X2NoZWNrKTsKKyAgICAgICAgY29kZUJs
b2NrLT5zZXRKSVRDb2RlKAorICAgICAgICAgICAgYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUo
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVMTEludENvZGVSZWYobGxpbnRfZnVuY3Rpb25f
Zm9yX2NvbnN0cnVjdF9wcm9sb2d1ZSksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKSwKKyAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlTExJbnRDb2RlUHRyKGxsaW50
X2Z1bmN0aW9uX2Zvcl9jb25zdHJ1Y3RfYXJpdHlfY2hlY2spKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICAKICNpZiBFTkFCTEUoSklUKQogICAgIGlmIChraW5kID09IENvZGVGb3JDYWxs
KSB7Ci0gICAgICAgIGppdENvZGUgPSBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZSh2bS5nZXRD
VElTdHViKGZ1bmN0aW9uRm9yQ2FsbEVudHJ5VGh1bmtHZW5lcmF0b3IpLCBKSVRDb2RlOjpJbnRl
cnByZXRlclRodW5rKSk7Ci0gICAgICAgIGFyaXR5Q2hlY2sgPSB2bS5nZXRDVElTdHViKGZ1bmN0
aW9uRm9yQ2FsbEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcikuY29kZSgpOworICAgICAgICBjb2Rl
QmxvY2stPnNldEpJVENvZGUoCisgICAgICAgICAgICBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29k
ZSh2bS5nZXRDVElTdHViKGZ1bmN0aW9uRm9yQ2FsbEVudHJ5VGh1bmtHZW5lcmF0b3IpLCBKSVRD
b2RlOjpJbnRlcnByZXRlclRodW5rKSksCisgICAgICAgICAgICB2bS5nZXRDVElTdHViKGZ1bmN0
aW9uRm9yQ2FsbEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcikuY29kZSgpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAogICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpOwotICAg
IGppdENvZGUgPSBhZG9wdFJlZihuZXcgRGlyZWN0SklUQ29kZSh2bS5nZXRDVElTdHViKGZ1bmN0
aW9uRm9yQ29uc3RydWN0RW50cnlUaHVua0dlbmVyYXRvciksIEpJVENvZGU6OkludGVycHJldGVy
VGh1bmspKTsKLSAgICBhcml0eUNoZWNrID0gdm0uZ2V0Q1RJU3R1YihmdW5jdGlvbkZvckNvbnN0
cnVjdEFyaXR5Q2hlY2tUaHVua0dlbmVyYXRvcikuY29kZSgpOworICAgIGNvZGVCbG9jay0+c2V0
SklUQ29kZSgKKyAgICAgICAgYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUodm0uZ2V0Q1RJU3R1
YihmdW5jdGlvbkZvckNvbnN0cnVjdEVudHJ5VGh1bmtHZW5lcmF0b3IpLCBKSVRDb2RlOjpJbnRl
cnByZXRlclRodW5rKSksCisgICAgICAgIHZtLmdldENUSVN0dWIoZnVuY3Rpb25Gb3JDb25zdHJ1
Y3RBcml0eUNoZWNrVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSk7CiAjZW5kaWYgLy8gRU5BQkxFKEpJ
VCkKIH0KIAotdm9pZCBnZXRFdmFsRW50cnlwb2ludChWTSYgdm0sIFJlZlB0cjxKSVRDb2RlPiYg
aml0Q29kZSkKK3ZvaWQgc2V0RXZhbEVudHJ5cG9pbnQoVk0mIHZtLCBFdmFsQ29kZUJsb2NrKiBj
b2RlQmxvY2spCiB7CiAgICAgaWYgKCF2bS5jYW5Vc2VKSVQoKSkgewotICAgICAgICBqaXRDb2Rl
ID0gYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVh
dGVMTEludENvZGVSZWYobGxpbnRfZXZhbF9wcm9sb2d1ZSksIEpJVENvZGU6OkludGVycHJldGVy
VGh1bmspKTsKKyAgICAgICAgY29kZUJsb2NrLT5zZXRKSVRDb2RlKAorICAgICAgICAgICAgYWRv
cHRSZWYobmV3IERpcmVjdEpJVENvZGUoTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVMTElu
dENvZGVSZWYobGxpbnRfZXZhbF9wcm9sb2d1ZSksIEpJVENvZGU6OkludGVycHJldGVyVGh1bmsp
KSwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KLSNpZiBFTkFCTEUoSklUKSAgICAKLSAgICBqaXRDb2RlID0gYWRvcHRSZWYobmV3
IERpcmVjdEpJVENvZGUodm0uZ2V0Q1RJU3R1YihldmFsRW50cnlUaHVua0dlbmVyYXRvciksIEpJ
VENvZGU6OkludGVycHJldGVyVGh1bmspKTsKKyNpZiBFTkFCTEUoSklUKQorICAgIGNvZGVCbG9j
ay0+c2V0SklUQ29kZSgKKyAgICAgICAgYWRvcHRSZWYobmV3IERpcmVjdEpJVENvZGUodm0uZ2V0
Q1RJU3R1YihldmFsRW50cnlUaHVua0dlbmVyYXRvciksIEpJVENvZGU6OkludGVycHJldGVyVGh1
bmspKSwKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCkpOwogI2VuZGlmCiB9CiAKLXZv
aWQgZ2V0UHJvZ3JhbUVudHJ5cG9pbnQoVk0mIHZtLCBSZWZQdHI8SklUQ29kZT4mIGppdENvZGUp
Cit2b2lkIHNldFByb2dyYW1FbnRyeXBvaW50KFZNJiB2bSwgUHJvZ3JhbUNvZGVCbG9jayogY29k
ZUJsb2NrKQogewogICAgIGlmICghdm0uY2FuVXNlSklUKCkpIHsKLSAgICAgICAgaml0Q29kZSA9
IGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRl
TExJbnRDb2RlUmVmKGxsaW50X3Byb2dyYW1fcHJvbG9ndWUpLCBKSVRDb2RlOjpJbnRlcnByZXRl
clRodW5rKSk7CisgICAgICAgIGNvZGVCbG9jay0+c2V0SklUQ29kZSgKKyAgICAgICAgICAgIGFk
b3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlTExJ
bnRDb2RlUmVmKGxsaW50X3Byb2dyYW1fcHJvbG9ndWUpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRo
dW5rKSksCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAjaWYgRU5BQkxFKEpJVCkKLSAgICBqaXRDb2RlID0gYWRvcHRSZWYobmV3
IERpcmVjdEpJVENvZGUodm0uZ2V0Q1RJU3R1Yihwcm9ncmFtRW50cnlUaHVua0dlbmVyYXRvciks
IEpJVENvZGU6OkludGVycHJldGVyVGh1bmspKTsKKyAgICBjb2RlQmxvY2stPnNldEpJVENvZGUo
CisgICAgICAgIGFkb3B0UmVmKG5ldyBEaXJlY3RKSVRDb2RlKHZtLmdldENUSVN0dWIocHJvZ3Jh
bUVudHJ5VGh1bmtHZW5lcmF0b3IpLCBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rKSksCisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpKTsKICNlbmRpZgogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRFbnRyeXBvaW50cy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludEVudHJ5cG9pbnRzLmgJKHJldmlzaW9uIDE1
NDcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludEVudHJ5cG9pbnRzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTM3LDYgKzM3LDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBF
dmFsQ29kZUJsb2NrOworY2xhc3MgRnVuY3Rpb25Db2RlQmxvY2s7CiBjbGFzcyBWTTsKIGNsYXNz
IE1hY3JvQXNzZW1ibGVyQ29kZVB0cjsKIGNsYXNzIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjsKQEAg
LTQ0LDE5ICs0NSw5IEBAIGNsYXNzIFByb2dyYW1Db2RlQmxvY2s7CiAKIG5hbWVzcGFjZSBMTElu
dCB7CiAKLXZvaWQgZ2V0RnVuY3Rpb25FbnRyeXBvaW50KFZNJiwgQ29kZVNwZWNpYWxpemF0aW9u
S2luZCwgUmVmUHRyPEpJVENvZGU+JiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBhcml0eUNoZWNr
KTsKLXZvaWQgZ2V0RXZhbEVudHJ5cG9pbnQoVk0mLCBSZWZQdHI8SklUQ29kZT4mKTsKLXZvaWQg
Z2V0UHJvZ3JhbUVudHJ5cG9pbnQoVk0mLCBSZWZQdHI8SklUQ29kZT4mKTsKLQotaW5saW5lIHZv
aWQgZ2V0RW50cnlwb2ludChWTSYgdm0sIEV2YWxDb2RlQmxvY2sqLCBSZWZQdHI8SklUQ29kZT4m
IGppdENvZGUpCi17Ci0gICAgZ2V0RXZhbEVudHJ5cG9pbnQodm0sIGppdENvZGUpOwotfQotCi1p
bmxpbmUgdm9pZCBnZXRFbnRyeXBvaW50KFZNJiB2bSwgUHJvZ3JhbUNvZGVCbG9jayosIFJlZlB0
cjxKSVRDb2RlPiYgaml0Q29kZSkKLXsKLSAgICBnZXRQcm9ncmFtRW50cnlwb2ludCh2bSwgaml0
Q29kZSk7Ci19Cit2b2lkIHNldEZ1bmN0aW9uRW50cnlwb2ludChWTSYsIEZ1bmN0aW9uQ29kZUJs
b2NrKik7Cit2b2lkIHNldEV2YWxFbnRyeXBvaW50KFZNJiwgRXZhbENvZGVCbG9jayopOwordm9p
ZCBzZXRQcm9ncmFtRW50cnlwb2ludChWTSYsIFByb2dyYW1Db2RlQmxvY2sqKTsKIAogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkxMSW50CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTU0NzE4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzcsNyArMzcsNiBAQAogI2luY2x1ZGUgIkhvc3RDYWxsUmV0dXJuVmFsdWUuaCIKICNpbmNsdWRl
ICJJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkpJVC5oIgotI2luY2x1ZGUgIkpJVERyaXZlci5o
IgogI2luY2x1ZGUgIkpTQWN0aXZhdGlvbi5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNp
bmNsdWRlICJKU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5oIgpAQCAtMjgwLDYgKzI3OSw4IEBAIGlu
bGluZSBib29sIHNob3VsZEpJVChFeGVjU3RhdGUqIGV4ZWMpCiAvLyBSZXR1cm5zIHRydWUgaWYg
d2Ugc2hvdWxkIHRyeSB0byBPU1IuCiBpbmxpbmUgYm9vbCBqaXRDb21waWxlQW5kU2V0SGV1cmlz
dGljcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgRXhlY1N0YXRlKiBleGVjKQogeworICAgIERlZmVy
R0MgZGVmZXJHQyhleGVjLT52bSgpLmhlYXApOworICAgIAogICAgIGNvZGVCbG9jay0+dXBkYXRl
QWxsVmFsdWVQcm9maWxlUHJlZGljdGlvbnMoKTsKICAgICAKICAgICBpZiAoIWNvZGVCbG9jay0+
Y2hlY2tJZkpJVFRocmVzaG9sZFJlYWNoZWQoKSkgewpAQCAtMjg4LDIzICsyODksMzMgQEAgaW5s
aW5lIGJvb2wgaml0Q29tcGlsZUFuZFNldEhldXJpc3RpY3MoQwogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogICAgIAotICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IGNvZGVCbG9j
ay0+aml0Q29tcGlsZShleGVjKTsKLSAgICBzd2l0Y2ggKHJlc3VsdCkgewotICAgIGNhc2UgQ29t
cGlsYXRpb25Ob3ROZWVkZWQ6CisgICAgc3dpdGNoIChjb2RlQmxvY2stPmppdFR5cGUoKSkgewor
ICAgIGNhc2UgSklUQ29kZTo6QmFzZWxpbmVKSVQ6IHsKICAgICAgICAgaWYgKE9wdGlvbnM6OnZl
cmJvc2VPU1IoKSkKICAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgQ29kZSB3YXMgYWxyZWFkeSBj
b21waWxlZC5cbiIpOwogICAgICAgICBjb2RlQmxvY2stPmppdFNvb24oKTsKICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgY2FzZSBDb21waWxhdGlvbkZhaWxlZDoKLSAgICAgICAgaWYgKE9wdGlv
bnM6OnZlcmJvc2VPU1IoKSkKLSAgICAgICAgICAgIGRhdGFMb2dGKCIgICAgSklUIGNvbXBpbGF0
aW9uIGZhaWxlZC5cbiIpOwotICAgICAgICBjb2RlQmxvY2stPmRvbnRKSVRBbnl0aW1lU29vbigp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY2FzZSBDb21waWxhdGlvblN1Y2Nlc3NmdWw6
Ci0gICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCi0gICAgICAgICAgICBkYXRhTG9n
RigiICAgIEpJVCBjb21waWxhdGlvbiBzdWNjZXNzZnVsLlxuIik7Ci0gICAgICAgIGNvZGVCbG9j
ay0+aml0U29vbigpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgY2FzZSBKSVRD
b2RlOjpJbnRlcnByZXRlclRodW5rOiB7CisgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3Vs
dCA9IGNvZGVCbG9jay0+cHJlcGFyZUZvckV4ZWN1dGlvbigKKyAgICAgICAgICAgIGV4ZWMsIEpJ
VENvZGU6OkJhc2VsaW5lSklULCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgICAgICBzd2l0
Y2ggKHJlc3VsdCkgeworICAgICAgICBjYXNlIENvbXBpbGF0aW9uRmFpbGVkOgorICAgICAgICAg
ICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nRigi
ICAgIEpJVCBjb21waWxhdGlvbiBmYWlsZWQuXG4iKTsKKyAgICAgICAgICAgIGNvZGVCbG9jay0+
ZG9udEpJVEFueXRpbWVTb29uKCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IGNhc2UgQ29tcGlsYXRpb25TdWNjZXNzZnVsOgorICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZl
cmJvc2VPU1IoKSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nRigiICAgIEpJVCBjb21waWxhdGlv
biBzdWNjZXNzZnVsLlxuIik7CisgICAgICAgICAgICBjb2RlQmxvY2stPmluc3RhbGwoKTsKKyAg
ICAgICAgICAgIGNvZGVCbG9jay0+aml0U29vbigpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQogICAgIGRl
ZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJl
dHVybiBmYWxzZTsKQEAgLTEwMDQsNyArMTAxNSw3IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5
cGUgc2V0VXBDYWxsKEV4ZWMKICAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmhvc3RDb2Rl
RW50cnlGb3Ioa2luZCk7CiAgICAgZWxzZSB7CiAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSog
ZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhl
Y3V0YWJsZSk7Ci0gICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+
Y29tcGlsZUZvcihleGVjQ2FsbGVlLCBjYWxsZWUtPnNjb3BlKCksIGtpbmQpOworICAgICAgICBK
U09iamVjdCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb24o
ZXhlY0NhbGxlZSwgY2FsbGVlLT5zY29wZSgpLCBraW5kKTsKICAgICAgICAgaWYgKGVycm9yKQog
ICAgICAgICAgICAgTExJTlRfQ0FMTF9USFJPVyhleGVjQ2FsbGVlLT5jYWxsZXJGcmFtZSgpLCBw
YywgZXJyb3IpOwogICAgICAgICBjb2RlQmxvY2sgPSAmZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5l
cmF0ZWRCeXRlY29kZUZvcihraW5kKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FycmF5UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDE1NDcxOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzgsNyArNzgsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNOdW1lcmljQ29tcGFyZUZ1
bmN0CiAKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBjYWxsRGF0YS5qcy5m
dW5jdGlvbkV4ZWN1dGFibGU7CiAKLSAgICBKU09iamVjdCogZXJyb3IgPSBleGVjdXRhYmxlLT5j
b21waWxlRm9yQ2FsbChleGVjLCBjYWxsRGF0YS5qcy5zY29wZSk7CisgICAgSlNPYmplY3QqIGVy
cm9yID0gZXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbihleGVjLCBjYWxsRGF0YS5qcy5z
Y29wZSwgQ29kZUZvckNhbGwpOwogICAgIGlmIChlcnJvcikKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNs
b3dQYXRocy5jcHAJKHJldmlzaW9uIDE1NDcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDYg
QEAKICNpbmNsdWRlICJIb3N0Q2FsbFJldHVyblZhbHVlLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0
ZXIuaCIKICNpbmNsdWRlICJKSVQuaCIKLSNpbmNsdWRlICJKSVREcml2ZXIuaCIKICNpbmNsdWRl
ICJKSVRTdHVicy5oIgogI2luY2x1ZGUgIkpTQWN0aXZhdGlvbi5oIgogI2luY2x1ZGUgIkpTQ0pT
VmFsdWUuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBpbGF0aW9u
UmVzdWx0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b21waWxhdGlvblJlc3VsdC5jcHAJKHJldmlzaW9uIDE1NDcxOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbXBpbGF0aW9uUmVzdWx0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDIsOSArNDIsNiBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQ29tCiAg
ICAgY2FzZSBDb21waWxhdGlvblN1Y2Nlc3NmdWw6CiAgICAgICAgIG91dC5wcmludCgiQ29tcGls
YXRpb25TdWNjZXNzZnVsIik7CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIENvbXBpbGF0aW9u
Tm90TmVlZGVkOgotICAgICAgICBvdXQucHJpbnQoIkNvbXBpbGF0aW9uTm90TmVlZGVkIik7Ci0g
ICAgICAgIHJldHVybjsKICAgICBjYXNlIENvbXBpbGF0aW9uRGVmZXJyZWQ6CiAgICAgICAgIG91
dC5wcmludCgiQ29tcGlsYXRpb25EZWZlcnJlZCIpOwogICAgICAgICByZXR1cm47CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21waWxhdGlvblJlc3VsdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBpbGF0aW9uUmVzdWx0LmgJ
KHJldmlzaW9uIDE1NDcxOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbXBp
bGF0aW9uUmVzdWx0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDMyIEBACiAKIG5hbWVz
cGFjZSBKU0MgewogCi1lbnVtIENvbXBpbGF0aW9uUmVzdWx0IHsgQ29tcGlsYXRpb25GYWlsZWQs
IENvbXBpbGF0aW9uSW52YWxpZGF0ZWQsIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bCwgQ29tcGlsYXRp
b25Ob3ROZWVkZWQsIENvbXBpbGF0aW9uRGVmZXJyZWQgfTsKK2VudW0gQ29tcGlsYXRpb25SZXN1
bHQgeworICAgIC8vIFdlIHRyaWVkIHRvIGNvbXBpbGUgdGhlIGNvZGUsIGJ1dCB3ZSBjb3VsZG4n
dCBjb21waWxlIGl0LiBUaGlzIGNvdWxkIGJlCisgICAgLy8gYmVjYXVzZSB3ZSByYW4gb3V0IG9m
IG1lbW9yeSwgb3IgYmVjYXVzZSB0aGUgY29tcGlsZXIgZW5jb3VudGVyZWQgYW4KKyAgICAvLyBp
bnRlcm5hbCBlcnJvciBhbmQgZGVjaWRlZCB0byBiYWlsIG91dCBncmFjZWZ1bGx5LiBFaXRoZXIg
d2F5LCB0aGlzIGltcGxpZXMKKyAgICAvLyB0aGF0IHdlIHNob3VsZG4ndCB0cnkgdG8gY29tcGls
ZSB0aGlzIGNvZGUgYmxvY2sgYWdhaW4uCisgICAgQ29tcGlsYXRpb25GYWlsZWQsCisgICAgCisg
ICAgLy8gVGhlIHByb2ZpbGluZyBhc3N1bXB0aW9ucyB0aGF0IHdlcmUgZmVkIGludG8gdGhlIGNv
bXBpbGVyIHdlcmUgaW52YWxpZGF0ZWQKKyAgICAvLyBldmVuIGJlZm9yZSB3ZSBmaW5pc2hlZCBj
b21waWxpbmcuIFRoaXMgbWVhbnMgd2Ugc2hvdWxkIHRyeSBhZ2FpbjogaW4gc3VjaAorICAgIC8v
IGNhc2VzIHRoZSBwcm9maWxpbmcgd2lsbCBub3cgYmUgdXBkYXRlZCBhbmQgdGhlIG5leHQgY29t
cGlsYXRpb24gd29uJ3QKKyAgICAvLyBlbmNvdW50ZXIgdGhlIHNhbWUgcHJvYmxlbS4gQnV0IGl0
IGRvZXMgbWVhbiB0aGF0IHdlIHNob3VsZCBleGVyY2lzZQorICAgIC8vIGV4cG9uZW50aWFsIGJh
Y2stb2ZmLCB0byBnZXQgZXZlbiBtb3JlIHByb2ZpbGluZyBzbyB0aGF0IG5ldyBwcm9maWxpbmcK
KyAgICAvLyBwYXRob2xvZ2llcyBhcmVuJ3QgZW5jb3VudGVyZWQuCisgICAgQ29tcGlsYXRpb25J
bnZhbGlkYXRlZCwKKyAgICAKKyAgICAvLyBUaGUgY29tcGlsYXRpb24gc3VjY2VlZGVkIGFuZCB0
aGUgY29kZSBibG9jayBub3cgaGFzIEpJVENvZGUgZm9yIHRoZSBuZXdseQorICAgIC8vIGNvbXBp
bGVkIGNvZGUuIEhvd2V2ZXIsIGNvbXBpbGF0aW9uIHN1Y2Nlc3MgZG9lc24ndCBtZWFuIHRoYXQg
dGhlIENvZGVCbG9jaworICAgIC8vIHdpbGwgZXhlY3V0ZSB5ZXQ7IHlvdSB0eXBpY2FsbHkgaGF2
ZSB0byBpbnN0YWxsIGl0IGZpcnN0LCB1bmxlc3MgeW91IHBsYW4KKyAgICAvLyBvbiBpbnZva2lu
ZyBpdCBtYW51YWxseSAoc29tZXRoaW5nIHRoYXQgKmNvdWxkKiBiZSBkb25lIGZvciBzb21lIGtp
bmRzIG9mCisgICAgLy8gT1NSIGVudHJ5KS4KKyAgICBDb21waWxhdGlvblN1Y2Nlc3NmdWwsCisg
ICAgCisgICAgLy8gV2UgZGVjaWRlZCB0byBkbyB0aGUgY29tcGlsYXRpb24gYXN5bmNocm9ub3Vz
bHkuIFRoaXMgbWVhbnMgdGhhdCB3ZSBoYXZlbid0CisgICAgLy8geWV0IGNvbXBpbGVkIHRoZSBj
b2RlLgorICAgIENvbXBpbGF0aW9uRGVmZXJyZWQKK307CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAko
cmV2aXNpb24gMTU0NzE4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0
YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDkgKzMwLDcgQEAKICNpbmNsdWRlICJCeXRl
Y29kZUdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkRGR0Ry
aXZlci5oIgotI2luY2x1ZGUgIkV4ZWN1dGlvbkhhcm5lc3MuaCIKICNpbmNsdWRlICJKSVQuaCIK
LSNpbmNsdWRlICJKSVREcml2ZXIuaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAjaW5jbHVk
ZSAiUGFyc2VyLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtMTE0LDYgKzExMiwxODgg
QEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjpkZXN0cm95KEpTQ2VsbCogYwogfQogI2VuZGlmCiAK
K3ZvaWQgU2NyaXB0RXhlY3V0YWJsZTo6aW5zdGFsbENvZGUoQ29kZUJsb2NrKiBnZW5lcmljQ29k
ZUJsb2NrKQoreworICAgIFJFTEVBU0VfQVNTRVJUKGdlbmVyaWNDb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpID09IHRoaXMpOworICAgIAorICAgIFZNJiB2bSA9ICpnZW5lcmljQ29kZUJsb2Nr
LT52bSgpOworICAgIAorICAgIGlmICh2bS5tX3BlckJ5dGVjb2RlUHJvZmlsZXIpCisgICAgICAg
IHZtLm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+ZW5zdXJlQnl0ZWNvZGVzRm9yKGdlbmVyaWNDb2Rl
QmxvY2spOworICAgIAorICAgIEFTU0VSVCh2bS5oZWFwLmlzRGVmZXJyZWQoKSk7CisgICAgCisg
ICAgaWYgKEpJVENvZGU6OmlzSklUKGdlbmVyaWNDb2RlQmxvY2stPmppdFR5cGUoKSkpIHsKKyAg
ICAgICAgdm0uaGVhcC5yZXBvcnRFeHRyYU1lbW9yeUNvc3QoCisgICAgICAgICAgICBzaXplb2Yo
Q29kZUJsb2NrKSArIGdlbmVyaWNDb2RlQmxvY2stPmppdENvZGUoKS0+c2l6ZSgpKTsKKyAgICB9
IGVsc2UKKyAgICAgICAgdm0uaGVhcC5yZXBvcnRFeHRyYU1lbW9yeUNvc3Qoc2l6ZW9mKENvZGVC
bG9jaykpOworICAgIAorICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCA9IGdlbmVyaWND
b2RlQmxvY2stPnNwZWNpYWxpemF0aW9uS2luZCgpOworICAgIAorICAgIFJlZlB0cjxDb2RlQmxv
Y2s+IG9sZENvZGVCbG9jazsKKyAgICAKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIENv
ZGVGb3JDYWxsOgorICAgICAgICBtX2ppdENvZGVGb3JDYWxsID0gZ2VuZXJpY0NvZGVCbG9jay0+
aml0Q29kZSgpOworICAgICAgICBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5Q2hlY2sgPSBnZW5l
cmljQ29kZUJsb2NrLT5qaXRDb2RlV2l0aEFyaXR5Q2hlY2soKTsKKyAgICAgICAgbV9udW1QYXJh
bWV0ZXJzRm9yQ2FsbCA9IGdlbmVyaWNDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBDb2RlRm9yQ29uc3RydWN0OgorICAgICAgICBtX2ppdENvZGVG
b3JDb25zdHJ1Y3QgPSBnZW5lcmljQ29kZUJsb2NrLT5qaXRDb2RlKCk7CisgICAgICAgIG1faml0
Q29kZUZvckNvbnN0cnVjdFdpdGhBcml0eUNoZWNrID0gZ2VuZXJpY0NvZGVCbG9jay0+aml0Q29k
ZVdpdGhBcml0eUNoZWNrKCk7CisgICAgICAgIG1fbnVtUGFyYW1ldGVyc0ZvckNvbnN0cnVjdCA9
IGdlbmVyaWNDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIAorICAgIHN3aXRjaCAoZ2VuZXJpY0NvZGVCbG9jay0+Y29kZVR5cGUoKSkgeworICAg
IGNhc2UgR2xvYmFsQ29kZTogeworICAgICAgICBQcm9ncmFtRXhlY3V0YWJsZSogZXhlY3V0YWJs
ZSA9IGpzQ2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KHRoaXMpOworICAgICAgICBQcm9ncmFtQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBzdGF0aWNfY2FzdDxQcm9ncmFtQ29kZUJsb2NrKj4oZ2VuZXJp
Y0NvZGVCbG9jayk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQoIWNvZGVCbG9jay0+aml0Q29k
ZVdpdGhBcml0eUNoZWNrKCkpOworICAgICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ2FsbCk7
CisgICAgICAgIAorICAgICAgICBvbGRDb2RlQmxvY2sgPSBleGVjdXRhYmxlLT5tX3Byb2dyYW1D
b2RlQmxvY2s7CisgICAgICAgIGV4ZWN1dGFibGUtPm1fcHJvZ3JhbUNvZGVCbG9jayA9IGNvZGVC
bG9jazsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEV2YWxDb2Rl
OiB7CisgICAgICAgIEV2YWxFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PEV2YWxFeGVj
dXRhYmxlKj4odGhpcyk7CisgICAgICAgIEV2YWxDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHN0YXRp
Y19jYXN0PEV2YWxDb2RlQmxvY2sqPihnZW5lcmljQ29kZUJsb2NrKTsKKyAgICAgICAgCisgICAg
ICAgIEFTU0VSVCghY29kZUJsb2NrLT5qaXRDb2RlV2l0aEFyaXR5Q2hlY2soKSk7CisgICAgICAg
IEFTU0VSVChraW5kID09IENvZGVGb3JDYWxsKTsKKyAgICAgICAgCisgICAgICAgIG9sZENvZGVC
bG9jayA9IGV4ZWN1dGFibGUtPm1fZXZhbENvZGVCbG9jazsKKyAgICAgICAgZXhlY3V0YWJsZS0+
bV9ldmFsQ29kZUJsb2NrID0gY29kZUJsb2NrOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
ICAgIAorICAgIGNhc2UgRnVuY3Rpb25Db2RlOiB7CisgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJs
ZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPih0aGlzKTsKKyAgICAg
ICAgRnVuY3Rpb25Db2RlQmxvY2sqIGNvZGVCbG9jayA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uQ29k
ZUJsb2NrKj4oZ2VuZXJpY0NvZGVCbG9jayk7CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKGtp
bmQpIHsKKyAgICAgICAgY2FzZSBDb2RlRm9yQ2FsbDoKKyAgICAgICAgICAgIG9sZENvZGVCbG9j
ayA9IGV4ZWN1dGFibGUtPm1fY29kZUJsb2NrRm9yQ2FsbDsKKyAgICAgICAgICAgIGV4ZWN1dGFi
bGUtPm1fY29kZUJsb2NrRm9yQ2FsbCA9IGNvZGVCbG9jazsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIENvZGVGb3JDb25zdHJ1Y3Q6CisgICAgICAgICAgICBvbGRDb2RlQmxvY2sg
PSBleGVjdXRhYmxlLT5tX2NvZGVCbG9ja0ZvckNvbnN0cnVjdDsKKyAgICAgICAgICAgIGV4ZWN1
dGFibGUtPm1fY29kZUJsb2NrRm9yQ29uc3RydWN0ID0gY29kZUJsb2NrOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfSB9CisKKyAgICBpZiAob2xk
Q29kZUJsb2NrKQorICAgICAgICBvbGRDb2RlQmxvY2stPnVubGlua0luY29taW5nQ2FsbHMoKTsK
K30KKworUGFzc1JlZlB0cjxDb2RlQmxvY2s+IFNjcmlwdEV4ZWN1dGFibGU6Om5ld0NvZGVCbG9j
a0ZvcigKKyAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIEpTU2NvcGUqIHNjb3BlLCBK
U09iamVjdComIGV4Y2VwdGlvbikKK3sKKyAgICBWTSogdm0gPSBzY29wZS0+dm0oKTsKKworICAg
IEFTU0VSVCh2bS0+aGVhcC5pc0RlZmVycmVkKCkpOworICAgIAorICAgIGlmIChjbGFzc0luZm8o
KSA9PSBFdmFsRXhlY3V0YWJsZTo6aW5mbygpKSB7CisgICAgICAgIEV2YWxFeGVjdXRhYmxlKiBl
eGVjdXRhYmxlID0ganNDYXN0PEV2YWxFeGVjdXRhYmxlKj4odGhpcyk7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNhbGwpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCgh
ZXhlY3V0YWJsZS0+bV9ldmFsQ29kZUJsb2NrKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBFdmFsQ29kZUJsb2NrKAorICAgICAgICAgICAgZXhlY3V0YWJsZSwgZXhlY3V0YWJsZS0+bV91
bmxpbmtlZEV2YWxDb2RlQmxvY2suZ2V0KCksIHNjb3BlLAorICAgICAgICAgICAgZXhlY3V0YWJs
ZS0+c291cmNlKCkucHJvdmlkZXIoKSkpOworICAgIH0KKyAgICAKKyAgICBpZiAoY2xhc3NJbmZv
KCkgPT0gUHJvZ3JhbUV4ZWN1dGFibGU6OmluZm8oKSkgeworICAgICAgICBQcm9ncmFtRXhlY3V0
YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KHRoaXMpOworICAg
ICAgICBSRUxFQVNFX0FTU0VSVChraW5kID09IENvZGVGb3JDYWxsKTsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQoIWV4ZWN1dGFibGUtPm1fcHJvZ3JhbUNvZGVCbG9jayk7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgUHJvZ3JhbUNvZGVCbG9jaygKKyAgICAgICAgICAgIGV4ZWN1dGFibGUs
IGV4ZWN1dGFibGUtPm1fdW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLmdldCgpLCBzY29wZSwKKyAg
ICAgICAgICAgIGV4ZWN1dGFibGUtPnNvdXJjZSgpLnByb3ZpZGVyKCksIGV4ZWN1dGFibGUtPnNv
dXJjZSgpLnN0YXJ0Q29sdW1uKCkpKTsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlQo
Y2xhc3NJbmZvKCkgPT0gRnVuY3Rpb25FeGVjdXRhYmxlOjppbmZvKCkpOworICAgIEZ1bmN0aW9u
RXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPih0aGlz
KTsKKyAgICBSRUxFQVNFX0FTU0VSVCghZXhlY3V0YWJsZS0+Y29kZUJsb2NrRm9yKGtpbmQpKTsK
KyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NvcGUtPmdsb2JhbE9iamVjdCgp
OworICAgIFBhcnNlckVycm9yIGVycm9yOworICAgIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUg
PSBnbG9iYWxPYmplY3QtPmhhc0RlYnVnZ2VyKCkgPyBEZWJ1Z2dlck9uIDogRGVidWdnZXJPZmY7
CisgICAgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSA9IGdsb2JhbE9iamVjdC0+aGFzUHJvZmls
ZXIoKSA/IFByb2ZpbGVyT24gOiBQcm9maWxlck9mZjsKKyAgICBVbmxpbmtlZEZ1bmN0aW9uQ29k
ZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jayA9CisgICAgICAgIGV4ZWN1dGFibGUtPm1fdW5saW5r
ZWRFeGVjdXRhYmxlLT5jb2RlQmxvY2tGb3IoCisgICAgICAgICAgICAqdm0sIGV4ZWN1dGFibGUt
Pm1fc291cmNlLCBraW5kLCBkZWJ1Z2dlck1vZGUsIHByb2ZpbGVyTW9kZSwgZXJyb3IpOworICAg
IGlmICghdW5saW5rZWRDb2RlQmxvY2spIHsKKyAgICAgICAgZXhjZXB0aW9uID0gZXJyb3IudG9F
cnJvck9iamVjdChnbG9iYWxPYmplY3QsIGV4ZWN1dGFibGUtPm1fc291cmNlKTsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorICAgIAorICAgIFNvdXJjZVByb3ZpZGVyKiBwcm92aWRlciA9IGV4
ZWN1dGFibGUtPnNvdXJjZSgpLnByb3ZpZGVyKCk7CisgICAgdW5zaWduZWQgc291cmNlT2Zmc2V0
ID0gZXhlY3V0YWJsZS0+c291cmNlKCkuc3RhcnRPZmZzZXQoKTsKKyAgICB1bnNpZ25lZCBzdGFy
dENvbHVtbiA9IGV4ZWN1dGFibGUtPnNvdXJjZSgpLnN0YXJ0Q29sdW1uKCk7CisKKyAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEZ1bmN0aW9uQ29kZUJsb2NrKAorICAgICAgICBleGVjdXRhYmxlLCB1
bmxpbmtlZENvZGVCbG9jaywgc2NvcGUsIHByb3ZpZGVyLCBzb3VyY2VPZmZzZXQsIHN0YXJ0Q29s
dW1uKSk7Cit9CisKK1Bhc3NSZWZQdHI8Q29kZUJsb2NrPiBTY3JpcHRFeGVjdXRhYmxlOjpuZXdS
ZXBsYWNlbWVudENvZGVCbG9ja0ZvcigKKyAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQp
Cit7CisgICAgaWYgKGNsYXNzSW5mbygpID09IEV2YWxFeGVjdXRhYmxlOjppbmZvKCkpIHsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoa2luZCA9PSBDb2RlRm9yQ2FsbCk7CisgICAgICAgIEV2YWxF
eGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PEV2YWxFeGVjdXRhYmxlKj4odGhpcyk7Cisg
ICAgICAgIFJlZlB0cjxFdmFsQ29kZUJsb2NrPiByZXN1bHQgPSBhZG9wdFJlZihuZXcgRXZhbENv
ZGVCbG9jaygKKyAgICAgICAgICAgIENvZGVCbG9jazo6Q29weVBhcnNlZEJsb2NrLCAqZXhlY3V0
YWJsZS0+bV9ldmFsQ29kZUJsb2NrKSk7CisgICAgICAgIHJlc3VsdC0+c2V0QWx0ZXJuYXRpdmUo
ZXhlY3V0YWJsZS0+bV9ldmFsQ29kZUJsb2NrKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisgICAgCisgICAgaWYgKGNsYXNzSW5mbygpID09IFByb2dyYW1FeGVjdXRhYmxlOjppbmZv
KCkpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoa2luZCA9PSBDb2RlRm9yQ2FsbCk7CisgICAg
ICAgIFByb2dyYW1FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PFByb2dyYW1FeGVjdXRh
YmxlKj4odGhpcyk7CisgICAgICAgIFJlZlB0cjxQcm9ncmFtQ29kZUJsb2NrPiByZXN1bHQgPSBh
ZG9wdFJlZihuZXcgUHJvZ3JhbUNvZGVCbG9jaygKKyAgICAgICAgICAgIENvZGVCbG9jazo6Q29w
eVBhcnNlZEJsb2NrLCAqZXhlY3V0YWJsZS0+bV9wcm9ncmFtQ29kZUJsb2NrKSk7CisgICAgICAg
IHJlc3VsdC0+c2V0QWx0ZXJuYXRpdmUoZXhlY3V0YWJsZS0+bV9wcm9ncmFtQ29kZUJsb2NrKTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVChjbGFz
c0luZm8oKSA9PSBGdW5jdGlvbkV4ZWN1dGFibGU6OmluZm8oKSk7CisgICAgRnVuY3Rpb25FeGVj
dXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KHRoaXMpOwor
ICAgIFJlZlB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gcmVzdWx0ID0gYWRvcHRSZWYobmV3IEZ1bmN0
aW9uQ29kZUJsb2NrKAorICAgICAgICBDb2RlQmxvY2s6OkNvcHlQYXJzZWRCbG9jaywgKmV4ZWN1
dGFibGUtPmNvZGVCbG9ja0ZvcihraW5kKSkpOworICAgIHJlc3VsdC0+c2V0QWx0ZXJuYXRpdmUo
ZXhlY3V0YWJsZS0+Y29kZUJsb2NrRm9yKGtpbmQpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitKU09iamVjdCogU2NyaXB0RXhlY3V0YWJsZTo6cHJlcGFyZUZvckV4ZWN1dGlvbkltcGwoCisg
ICAgRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSwgQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCBraW5kKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgRGVmZXJHQyBkZWZlckdD
KHZtLmhlYXApOworICAgIAorICAgIEpTT2JqZWN0KiBleGNlcHRpb24gPSAwOworICAgIFJlZlB0
cjxDb2RlQmxvY2s+IGNvZGVCbG9jayA9IG5ld0NvZGVCbG9ja0ZvcihraW5kLCBzY29wZSwgZXhj
ZXB0aW9uKTsKKyAgICBpZiAoIWNvZGVCbG9jaykgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChl
eGNlcHRpb24pOworICAgICAgICByZXR1cm4gZXhjZXB0aW9uOworICAgIH0KKyAgICAKKyAgICBK
SVRDb2RlOjpKSVRUeXBlIGppdFR5cGU7CisjaWYgRU5BQkxFKExMSU5UKQorICAgIGppdFR5cGUg
PSBKSVRDb2RlOjpJbnRlcnByZXRlclRodW5rOworI2Vsc2UKKyAgICBqaXRUeXBlID0gSklUQ29k
ZTo6QmFzZWxpbmVKSVQ7CisjZW5kaWYKKyAgICBjb2RlQmxvY2stPnByZXBhcmVGb3JFeGVjdXRp
b24oZXhlYywgaml0VHlwZSk7CisKKyAgICBpbnN0YWxsQ29kZShjb2RlQmxvY2suZ2V0KCkpOwor
ICAgIHJldHVybiAwOworfQorCiBjb25zdCBDbGFzc0luZm8gRXZhbEV4ZWN1dGFibGU6OnNfaW5m
byA9IHsgIkV2YWxFeGVjdXRhYmxlIiwgJlNjcmlwdEV4ZWN1dGFibGU6OnNfaW5mbywgMCwgMCwg
Q1JFQVRFX01FVEhPRF9UQUJMRShFdmFsRXhlY3V0YWJsZSkgfTsKIAogRXZhbEV4ZWN1dGFibGUq
IEV2YWxFeGVjdXRhYmxlOjpjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VDb2Rl
JiBzb3VyY2UsIGJvb2wgaXNJblN0cmljdENvbnRleHQpIApAQCAtMTc2LDI4ICszNTYsNiBAQCB2
b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZGVzdHJveShKU0NlbGwqCiAgICAgc3RhdGljX2Nhc3Q8
RnVuY3Rpb25FeGVjdXRhYmxlKj4oY2VsbCktPkZ1bmN0aW9uRXhlY3V0YWJsZTo6fkZ1bmN0aW9u
RXhlY3V0YWJsZSgpOwogfQogCi0jaWYgRU5BQkxFKERGR19KSVQpCi1KU09iamVjdCogRXZhbEV4
ZWN1dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWQoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29w
ZSwgQ29tcGlsYXRpb25SZXN1bHQmIHJlc3VsdCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKLXsK
LSAgICBBU1NFUlQoZXhlYy0+dm0oKS5keW5hbWljR2xvYmFsT2JqZWN0KTsKLSAgICBBU1NFUlQo
ISFtX2V2YWxDb2RlQmxvY2spOwotICAgIEpTT2JqZWN0KiBlcnJvciA9IDA7Ci0gICAgaWYgKCFK
SVRDb2RlOjppc09wdGltaXppbmdKSVQobV9ldmFsQ29kZUJsb2NrLT5qaXRUeXBlKCkpKQotICAg
ICAgICBlcnJvciA9IGNvbXBpbGVJbnRlcm5hbChleGVjLCBzY29wZSwgSklUQ29kZTo6bmV4dFRp
ZXJKSVQobV9ldmFsQ29kZUJsb2NrLT5qaXRUeXBlKCkpLCAmcmVzdWx0LCBieXRlY29kZUluZGV4
KTsKLSAgICBlbHNlCi0gICAgICAgIHJlc3VsdCA9IENvbXBpbGF0aW9uTm90TmVlZGVkOwotICAg
IEFTU0VSVCghIW1fZXZhbENvZGVCbG9jayk7Ci0gICAgcmV0dXJuIGVycm9yOwotfQotI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQotCi0jaWYgRU5BQkxFKEpJVCkKLUNvbXBpbGF0aW9uUmVzdWx0
IEV2YWxFeGVjdXRhYmxlOjpqaXRDb21waWxlKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1
cm4gaml0Q29tcGlsZUlmQXBwcm9wcmlhdGUoZXhlYywgbV9ldmFsQ29kZUJsb2NrLmdldCgpLCBt
X2ppdENvZGVGb3JDYWxsLCBKSVRDb2RlOjpib3R0b21UaWVySklUKCksIFVJTlRfTUFYLCBKSVRD
b21waWxhdGlvbkNhbkZhaWwpOwotfQotI2VuZGlmCi0KIGlubGluZSBjb25zdCBjaGFyKiBzYW1w
bGluZ0Rlc2NyaXB0aW9uKEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSkKIHsKICAgICBzd2l0Y2gg
KGppdFR5cGUpIHsKQEAgLTIxNSwzOSArMzczLDYgQEAgaW5saW5lIGNvbnN0IGNoYXIqIHNhbXBs
aW5nRGVzY3JpcHRpb24oSgogICAgIH0KIH0KIAotSlNPYmplY3QqIEV2YWxFeGVjdXRhYmxlOjpj
b21waWxlSW50ZXJuYWwoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSwgSklUQ29kZTo6
SklUVHlwZSBqaXRUeXBlLCBDb21waWxhdGlvblJlc3VsdCogcmVzdWx0LCB1bnNpZ25lZCBieXRl
Y29kZUluZGV4KQotewotICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKHNhbXBsaW5n
RGVzY3JpcHRpb24oaml0VHlwZSkpOwotICAgIAotICAgIGlmIChyZXN1bHQpCi0gICAgICAgICpy
ZXN1bHQgPSBDb21waWxhdGlvbkZhaWxlZDsKLSAgICAKLSAgICBSZWZQdHI8RXZhbENvZGVCbG9j
az4gbmV3Q29kZUJsb2NrOwotICAgIAotICAgIGlmICghIW1fZXZhbENvZGVCbG9jaykgewotICAg
ICAgICBuZXdDb2RlQmxvY2sgPSBhZG9wdFJlZihuZXcgRXZhbENvZGVCbG9jayhDb2RlQmxvY2s6
OkNvcHlQYXJzZWRCbG9jaywgKm1fZXZhbENvZGVCbG9jaykpOwotICAgICAgICBuZXdDb2RlQmxv
Y2stPnNldEFsdGVybmF0aXZlKHN0YXRpY19wb2ludGVyX2Nhc3Q8Q29kZUJsb2NrPihtX2V2YWxD
b2RlQmxvY2spKTsKLSAgICB9IGVsc2UgewotICAgICAgICBuZXdDb2RlQmxvY2sgPSBhZG9wdFJl
ZihuZXcgRXZhbENvZGVCbG9jayh0aGlzLCBtX3VubGlua2VkRXZhbENvZGVCbG9jay5nZXQoKSwg
c2NvcGUsIHNvdXJjZSgpLnByb3ZpZGVyKCkpKTsKLSAgICAgICAgQVNTRVJUKChqaXRUeXBlID09
IEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSkgPT0gIW1fZXZhbENvZGVCbG9jayk7Ci0gICAgfQot
Ci0gICAgQ29tcGlsYXRpb25SZXN1bHQgdGhlUmVzdWx0ID0gcHJlcGFyZUZvckV4ZWN1dGlvbigK
LSAgICAgICAgZXhlYywgbV9ldmFsQ29kZUJsb2NrLCBuZXdDb2RlQmxvY2suZ2V0KCksIG1faml0
Q29kZUZvckNhbGwsIGppdFR5cGUsIGJ5dGVjb2RlSW5kZXgpOwotICAgIGlmIChyZXN1bHQpCi0g
ICAgICAgICpyZXN1bHQgPSB0aGVSZXN1bHQ7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotI2lmIEVO
QUJMRShERkdfSklUKQotQ29tcGlsYXRpb25SZXN1bHQgRXZhbEV4ZWN1dGFibGU6OnJlcGxhY2VX
aXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlKFBhc3NSZWZQdHI8REZHOjpQbGFuPiBwbGFuKQotewot
ICAgIHJldHVybiBKU0M6OnJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlKAotICAgICAg
ICBwbGFuLCBtX2V2YWxDb2RlQmxvY2ssIG1faml0Q29kZUZvckNhbGwsIDAsIDApOwotfQotI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQotCiAjaWYgRU5BQkxFKEpJVCkKIHZvaWQgRXZhbEV4ZWN1
dGFibGU6OmpldHRpc29uT3B0aW1pemVkQ29kZShWTSYgdm0pCiB7CkBAIC0yOTgsNjAgKzQyMyw2
IEBAIEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6Y2hlY2tTeW50YXgKICAgICByZXR1cm4g
ZXJyb3IudG9FcnJvck9iamVjdChsZXhpY2FsR2xvYmFsT2JqZWN0LCBtX3NvdXJjZSk7CiB9CiAK
LSNpZiBFTkFCTEUoREZHX0pJVCkKLUpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6Y29tcGls
ZU9wdGltaXplZChFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCBDb21waWxhdGlvblJl
c3VsdCYgcmVzdWx0LCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQotewotICAgIFJFTEVBU0VfQVNT
RVJUKGV4ZWMtPnZtKCkuZHluYW1pY0dsb2JhbE9iamVjdCk7Ci0gICAgQVNTRVJUKCEhbV9wcm9n
cmFtQ29kZUJsb2NrKTsKLSAgICBKU09iamVjdCogZXJyb3IgPSAwOwotICAgIGlmICghSklUQ29k
ZTo6aXNPcHRpbWl6aW5nSklUKG1fcHJvZ3JhbUNvZGVCbG9jay0+aml0VHlwZSgpKSkKLSAgICAg
ICAgZXJyb3IgPSBjb21waWxlSW50ZXJuYWwoZXhlYywgc2NvcGUsIEpJVENvZGU6Om5leHRUaWVy
SklUKG1fcHJvZ3JhbUNvZGVCbG9jay0+aml0VHlwZSgpKSwgJnJlc3VsdCwgYnl0ZWNvZGVJbmRl
eCk7Ci0gICAgZWxzZQotICAgICAgICByZXN1bHQgPSBDb21waWxhdGlvbk5vdE5lZWRlZDsKLSAg
ICBBU1NFUlQoISFtX3Byb2dyYW1Db2RlQmxvY2spOwotICAgIHJldHVybiBlcnJvcjsKLX0KLSNl
bmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLQotI2lmIEVOQUJMRShKSVQpCi1Db21waWxhdGlvblJl
c3VsdCBQcm9ncmFtRXhlY3V0YWJsZTo6aml0Q29tcGlsZShFeGVjU3RhdGUqIGV4ZWMpCi17Ci0g
ICAgcmV0dXJuIGppdENvbXBpbGVJZkFwcHJvcHJpYXRlKGV4ZWMsIG1fcHJvZ3JhbUNvZGVCbG9j
ay5nZXQoKSwgbV9qaXRDb2RlRm9yQ2FsbCwgSklUQ29kZTo6Ym90dG9tVGllckpJVCgpLCBVSU5U
X01BWCwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKLX0KLSNlbmRpZgotCi1KU09iamVjdCogUHJv
Z3JhbUV4ZWN1dGFibGU6OmNvbXBpbGVJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUq
IHNjb3BlLCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUsIENvbXBpbGF0aW9uUmVzdWx0KiByZXN1
bHQsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAgU2FtcGxpbmdSZWdpb24gc2FtcGxp
bmdSZWdpb24oc2FtcGxpbmdEZXNjcmlwdGlvbihqaXRUeXBlKSk7Ci0gICAgCi0gICAgaWYgKHJl
c3VsdCkKLSAgICAgICAgKnJlc3VsdCA9IENvbXBpbGF0aW9uRmFpbGVkOwotICAgIAotICAgIFJl
ZlB0cjxQcm9ncmFtQ29kZUJsb2NrPiBuZXdDb2RlQmxvY2s7Ci0gICAgCi0gICAgaWYgKCEhbV9w
cm9ncmFtQ29kZUJsb2NrKSB7Ci0gICAgICAgIG5ld0NvZGVCbG9jayA9IGFkb3B0UmVmKG5ldyBQ
cm9ncmFtQ29kZUJsb2NrKENvZGVCbG9jazo6Q29weVBhcnNlZEJsb2NrLCAqbV9wcm9ncmFtQ29k
ZUJsb2NrKSk7Ci0gICAgICAgIG5ld0NvZGVCbG9jay0+c2V0QWx0ZXJuYXRpdmUoc3RhdGljX3Bv
aW50ZXJfY2FzdDxDb2RlQmxvY2s+KG1fcHJvZ3JhbUNvZGVCbG9jaykpOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIG5ld0NvZGVCbG9jayA9IGFkb3B0UmVmKG5ldyBQcm9ncmFtQ29kZUJsb2NrKHRo
aXMsIG1fdW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLmdldCgpLCBzY29wZSwgc291cmNlKCkucHJv
dmlkZXIoKSwgc291cmNlKCkuc3RhcnRDb2x1bW4oKSkpOwotICAgIH0KLQotICAgIENvbXBpbGF0
aW9uUmVzdWx0IHRoZVJlc3VsdCA9IHByZXBhcmVGb3JFeGVjdXRpb24oCi0gICAgICAgIGV4ZWMs
IG1fcHJvZ3JhbUNvZGVCbG9jaywgbmV3Q29kZUJsb2NrLmdldCgpLCBtX2ppdENvZGVGb3JDYWxs
LCBqaXRUeXBlLCBieXRlY29kZUluZGV4KTsKLSAgICBpZiAocmVzdWx0KQotICAgICAgICAqcmVz
dWx0ID0gdGhlUmVzdWx0OwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLSNpZiBFTkFCTEUoREZHX0pJ
VCkKLUNvbXBpbGF0aW9uUmVzdWx0IFByb2dyYW1FeGVjdXRhYmxlOjpyZXBsYWNlV2l0aERlZmVy
cmVkT3B0aW1pemVkQ29kZShQYXNzUmVmUHRyPERGRzo6UGxhbj4gcGxhbikKLXsKLSAgICByZXR1
cm4gSlNDOjpyZXBsYWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZSgKLSAgICAgICAgcGxhbiwg
bV9wcm9ncmFtQ29kZUJsb2NrLCBtX2ppdENvZGVGb3JDYWxsLCAwLCAwKTsKLX0KLSNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKLQogI2lmIEVOQUJMRShKSVQpCiB2b2lkIFByb2dyYW1FeGVjdXRh
YmxlOjpqZXR0aXNvbk9wdGltaXplZENvZGUoVk0mIHZtKQogewpAQCAtNDQ0LDE0MSArNTE1LDYg
QEAgRnVuY3Rpb25Db2RlQmxvY2sqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6YgogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLSNpZiBFTkFCTEUoREZHX0pJVCkKLUpTT2JqZWN0KiBGdW5jdGlvbkV4ZWN1
dGFibGU6OmNvbXBpbGVPcHRpbWl6ZWRGb3JDYWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSog
c2NvcGUsIENvbXBpbGF0aW9uUmVzdWx0JiByZXN1bHQsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgp
Ci17Ci0gICAgUkVMRUFTRV9BU1NFUlQoZXhlYy0+dm0oKS5keW5hbWljR2xvYmFsT2JqZWN0KTsK
LSAgICBBU1NFUlQoISFtX2NvZGVCbG9ja0ZvckNhbGwpOwotICAgIEpTT2JqZWN0KiBlcnJvciA9
IDA7Ci0gICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQobV9jb2RlQmxvY2tGb3JDYWxs
LT5qaXRUeXBlKCkpKQotICAgICAgICBlcnJvciA9IGNvbXBpbGVGb3JDYWxsSW50ZXJuYWwoZXhl
Yywgc2NvcGUsIEpJVENvZGU6Om5leHRUaWVySklUKG1fY29kZUJsb2NrRm9yQ2FsbC0+aml0VHlw
ZSgpKSwgJnJlc3VsdCwgYnl0ZWNvZGVJbmRleCk7Ci0gICAgZWxzZQotICAgICAgICByZXN1bHQg
PSBDb21waWxhdGlvbk5vdE5lZWRlZDsKLSAgICBBU1NFUlQoISFtX2NvZGVCbG9ja0ZvckNhbGwp
OwotICAgIHJldHVybiBlcnJvcjsKLX0KLQotSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6
Y29tcGlsZU9wdGltaXplZEZvckNvbnN0cnVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNj
b3BlLCBDb21waWxhdGlvblJlc3VsdCYgcmVzdWx0LCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQot
ewotICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMtPnZtKCkuZHluYW1pY0dsb2JhbE9iamVjdCk7Ci0g
ICAgQVNTRVJUKCEhbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpOwotICAgIEpTT2JqZWN0KiBlcnJv
ciA9IDA7Ci0gICAgaWYgKCFKSVRDb2RlOjppc09wdGltaXppbmdKSVQobV9jb2RlQmxvY2tGb3JD
b25zdHJ1Y3QtPmppdFR5cGUoKSkpCi0gICAgICAgIGVycm9yID0gY29tcGlsZUZvckNvbnN0cnVj
dEludGVybmFsKGV4ZWMsIHNjb3BlLCBKSVRDb2RlOjpuZXh0VGllckpJVChtX2NvZGVCbG9ja0Zv
ckNvbnN0cnVjdC0+aml0VHlwZSgpKSwgJnJlc3VsdCwgYnl0ZWNvZGVJbmRleCk7Ci0gICAgZWxz
ZQotICAgICAgICByZXN1bHQgPSBDb21waWxhdGlvbk5vdE5lZWRlZDsKLSAgICBBU1NFUlQoISFt
X2NvZGVCbG9ja0ZvckNvbnN0cnVjdCk7Ci0gICAgcmV0dXJuIGVycm9yOwotfQotI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQotCi0jaWYgRU5BQkxFKEpJVCkKLUNvbXBpbGF0aW9uUmVzdWx0IEZ1
bmN0aW9uRXhlY3V0YWJsZTo6aml0Q29tcGlsZUZvckNhbGwoRXhlY1N0YXRlKiBleGVjKQotewot
ICAgIHJldHVybiBqaXRDb21waWxlRnVuY3Rpb25JZkFwcHJvcHJpYXRlKGV4ZWMsIG1fY29kZUJs
b2NrRm9yQ2FsbC5nZXQoKSwgbV9qaXRDb2RlRm9yQ2FsbCwgbV9qaXRDb2RlRm9yQ2FsbFdpdGhB
cml0eUNoZWNrLCBKSVRDb2RlOjpib3R0b21UaWVySklUKCksIFVJTlRfTUFYLCBKSVRDb21waWxh
dGlvbkNhbkZhaWwpOwotfQotCi1Db21waWxhdGlvblJlc3VsdCBGdW5jdGlvbkV4ZWN1dGFibGU6
OmppdENvbXBpbGVGb3JDb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBq
aXRDb21waWxlRnVuY3Rpb25JZkFwcHJvcHJpYXRlKGV4ZWMsIG1fY29kZUJsb2NrRm9yQ29uc3Ry
dWN0LmdldCgpLCBtX2ppdENvZGVGb3JDb25zdHJ1Y3QsIG1faml0Q29kZUZvckNvbnN0cnVjdFdp
dGhBcml0eUNoZWNrLCBKSVRDb2RlOjpib3R0b21UaWVySklUKCksIFVJTlRfTUFYLCBKSVRDb21w
aWxhdGlvbkNhbkZhaWwpOwotfQotI2VuZGlmCi0KLVBhc3NSZWZQdHI8RnVuY3Rpb25Db2RlQmxv
Y2s+IEZ1bmN0aW9uRXhlY3V0YWJsZTo6cHJvZHVjZUNvZGVCbG9ja0ZvcihKU1Njb3BlKiBzY29w
ZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBzcGVjaWFsaXphdGlvbktpbmQsIEpTT2JqZWN0KiYg
ZXhjZXB0aW9uKQotewotICAgIFJlZlB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gYWx0ZXJuYXRpdmUg
PSBjb2RlQmxvY2tGb3Ioc3BlY2lhbGl6YXRpb25LaW5kKTsKLSAgICAKLSAgICBpZiAoISFhbHRl
cm5hdGl2ZSkgewotICAgICAgICBSZWZQdHI8RnVuY3Rpb25Db2RlQmxvY2s+IHJlc3VsdCA9IGFk
b3B0UmVmKG5ldyBGdW5jdGlvbkNvZGVCbG9jayhDb2RlQmxvY2s6OkNvcHlQYXJzZWRCbG9jaywg
KmNvZGVCbG9ja0ZvcihzcGVjaWFsaXphdGlvbktpbmQpKSk7Ci0gICAgICAgIHJlc3VsdC0+c2V0
QWx0ZXJuYXRpdmUoYWx0ZXJuYXRpdmUpOwotICAgICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2Uo
KTsKLSAgICB9Ci0KLSAgICBWTSogdm0gPSBzY29wZS0+dm0oKTsKLSAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gc2NvcGUtPmdsb2JhbE9iamVjdCgpOwotICAgIFBhcnNlckVycm9y
IGVycm9yOwotICAgIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUgPSBnbG9iYWxPYmplY3QtPmhh
c0RlYnVnZ2VyKCkgPyBEZWJ1Z2dlck9uIDogRGVidWdnZXJPZmY7Ci0gICAgUHJvZmlsZXJNb2Rl
IHByb2ZpbGVyTW9kZSA9IGdsb2JhbE9iamVjdC0+aGFzUHJvZmlsZXIoKSA/IFByb2ZpbGVyT24g
OiBQcm9maWxlck9mZjsKLSAgICBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiB1bmxpbmtlZENv
ZGVCbG9jayA9IG1fdW5saW5rZWRFeGVjdXRhYmxlLT5jb2RlQmxvY2tGb3IoKnZtLCBtX3NvdXJj
ZSwgc3BlY2lhbGl6YXRpb25LaW5kLCBkZWJ1Z2dlck1vZGUsIHByb2ZpbGVyTW9kZSwgZXJyb3Ip
OwotICAgIHJlY29yZFBhcnNlKG1fdW5saW5rZWRFeGVjdXRhYmxlLT5mZWF0dXJlcygpLCBtX3Vu
bGlua2VkRXhlY3V0YWJsZS0+aGFzQ2FwdHVyZWRWYXJpYWJsZXMoKSwgbGluZU5vKCksIGxhc3RM
aW5lKCksIHN0YXJ0Q29sdW1uKCkpOwotCi0gICAgaWYgKCF1bmxpbmtlZENvZGVCbG9jaykgewot
ICAgICAgICBleGNlcHRpb24gPSBlcnJvci50b0Vycm9yT2JqZWN0KGdsb2JhbE9iamVjdCwgbV9z
b3VyY2UpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBTb3VyY2VQcm92aWRlciog
cHJvdmlkZXIgPSBzb3VyY2UoKS5wcm92aWRlcigpOwotICAgIHVuc2lnbmVkIHNvdXJjZU9mZnNl
dCA9IHNvdXJjZSgpLnN0YXJ0T2Zmc2V0KCk7Ci0gICAgdW5zaWduZWQgc3RhcnRDb2x1bW4gPSBz
b3VyY2UoKS5zdGFydENvbHVtbigpOwotCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGdW5jdGlv
bkNvZGVCbG9jayh0aGlzLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUsIHByb3ZpZGVyLCBzb3Vy
Y2VPZmZzZXQsIHN0YXJ0Q29sdW1uKSk7Ci19Ci0KLQotSlNPYmplY3QqIEZ1bmN0aW9uRXhlY3V0
YWJsZTo6Y29tcGlsZUZvckNhbGxJbnRlcm5hbChFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNj
b3BlLCBKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUsIENvbXBpbGF0aW9uUmVzdWx0KiByZXN1bHQs
IHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCi17Ci0gICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdS
ZWdpb24oc2FtcGxpbmdEZXNjcmlwdGlvbihqaXRUeXBlKSk7Ci0gICAgCi0gICAgaWYgKHJlc3Vs
dCkKLSAgICAgICAgKnJlc3VsdCA9IENvbXBpbGF0aW9uRmFpbGVkOwotICAgIAotICAgIEFTU0VS
VCgoaml0VHlwZSA9PSBKSVRDb2RlOjpib3R0b21UaWVySklUKCkpID09ICFtX2NvZGVCbG9ja0Zv
ckNhbGwpOwotICAgIEpTT2JqZWN0KiBleGNlcHRpb24gPSAwOwotICAgIAotICAgIFJlZlB0cjxG
dW5jdGlvbkNvZGVCbG9jaz4gbmV3Q29kZUJsb2NrID0gcHJvZHVjZUNvZGVCbG9ja0ZvcihzY29w
ZSwgQ29kZUZvckNhbGwsIGV4Y2VwdGlvbik7Ci0gICAgaWYgKCFuZXdDb2RlQmxvY2spCi0gICAg
ICAgIHJldHVybiBleGNlcHRpb247Ci0gICAgCi0gICAgQ29tcGlsYXRpb25SZXN1bHQgdGhlUmVz
dWx0ID0gcHJlcGFyZUZ1bmN0aW9uRm9yRXhlY3V0aW9uKAotICAgICAgICBleGVjLCBtX2NvZGVC
bG9ja0ZvckNhbGwsIG5ld0NvZGVCbG9jay5nZXQoKSwgbV9qaXRDb2RlRm9yQ2FsbCwKLSAgICAg
ICAgbV9qaXRDb2RlRm9yQ2FsbFdpdGhBcml0eUNoZWNrLCBtX251bVBhcmFtZXRlcnNGb3JDYWxs
LCBqaXRUeXBlLAotICAgICAgICBieXRlY29kZUluZGV4LCBDb2RlRm9yQ2FsbCk7Ci0gICAgaWYg
KHJlc3VsdCkKLSAgICAgICAgKnJlc3VsdCA9IHRoZVJlc3VsdDsKLSAgICByZXR1cm4gMDsKLX0K
LQotI2lmIEVOQUJMRShERkdfSklUKQotQ29tcGlsYXRpb25SZXN1bHQgRnVuY3Rpb25FeGVjdXRh
YmxlOjpyZXBsYWNlV2l0aERlZmVycmVkT3B0aW1pemVkQ29kZUZvckNhbGwoUGFzc1JlZlB0cjxE
Rkc6OlBsYW4+IHBsYW4pCi17Ci0gICAgcmV0dXJuIEpTQzo6cmVwbGFjZVdpdGhEZWZlcnJlZE9w
dGltaXplZENvZGUoCi0gICAgICAgIHBsYW4sIG1fY29kZUJsb2NrRm9yQ2FsbCwgbV9qaXRDb2Rl
Rm9yQ2FsbCwgJm1faml0Q29kZUZvckNhbGxXaXRoQXJpdHlDaGVjaywKLSAgICAgICAgJm1fbnVt
UGFyYW1ldGVyc0ZvckNhbGwpOwotfQotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotCi1KU09i
amVjdCogRnVuY3Rpb25FeGVjdXRhYmxlOjpjb21waWxlRm9yQ29uc3RydWN0SW50ZXJuYWwoRXhl
Y1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSwgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlLCBD
b21waWxhdGlvblJlc3VsdCogcmVzdWx0LCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQotewotICAg
IFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKHNhbXBsaW5nRGVzY3JpcHRpb24oaml0VHlw
ZSkpOwotICAgIAotICAgIGlmIChyZXN1bHQpCi0gICAgICAgICpyZXN1bHQgPSBDb21waWxhdGlv
bkZhaWxlZDsKLSAgICAKLSAgICBBU1NFUlQoKGppdFR5cGUgPT0gSklUQ29kZTo6Ym90dG9tVGll
ckpJVCgpKSA9PSAhbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpOwotICAgIEpTT2JqZWN0KiBleGNl
cHRpb24gPSAwOwotICAgIFJlZlB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gbmV3Q29kZUJsb2NrID0g
cHJvZHVjZUNvZGVCbG9ja0ZvcihzY29wZSwgQ29kZUZvckNvbnN0cnVjdCwgZXhjZXB0aW9uKTsK
LSAgICBpZiAoIW5ld0NvZGVCbG9jaykKLSAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKLQotICAg
IENvbXBpbGF0aW9uUmVzdWx0IHRoZVJlc3VsdCA9IHByZXBhcmVGdW5jdGlvbkZvckV4ZWN1dGlv
bigKLSAgICAgICAgZXhlYywgbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QsIG5ld0NvZGVCbG9jay5n
ZXQoKSwgbV9qaXRDb2RlRm9yQ29uc3RydWN0LAotICAgICAgICBtX2ppdENvZGVGb3JDb25zdHJ1
Y3RXaXRoQXJpdHlDaGVjaywgbV9udW1QYXJhbWV0ZXJzRm9yQ29uc3RydWN0LCBqaXRUeXBlLAot
ICAgICAgICBieXRlY29kZUluZGV4LCBDb2RlRm9yQ29uc3RydWN0KTsKLSAgICBpZiAocmVzdWx0
KQotICAgICAgICAqcmVzdWx0ID0gdGhlUmVzdWx0OwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLSNp
ZiBFTkFCTEUoREZHX0pJVCkKLUNvbXBpbGF0aW9uUmVzdWx0IEZ1bmN0aW9uRXhlY3V0YWJsZTo6
cmVwbGFjZVdpdGhEZWZlcnJlZE9wdGltaXplZENvZGVGb3JDb25zdHJ1Y3QoUGFzc1JlZlB0cjxE
Rkc6OlBsYW4+IHBsYW4pCi17Ci0gICAgcmV0dXJuIEpTQzo6cmVwbGFjZVdpdGhEZWZlcnJlZE9w
dGltaXplZENvZGUoCi0gICAgICAgIHBsYW4sIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0LCBtX2pp
dENvZGVGb3JDb25zdHJ1Y3QsCi0gICAgICAgICZtX2ppdENvZGVGb3JDb25zdHJ1Y3RXaXRoQXJp
dHlDaGVjaywgJm1fbnVtUGFyYW1ldGVyc0ZvckNvbnN0cnVjdCk7Ci19Ci0jZW5kaWYgLy8gRU5B
QkxFKERGR19KSVQpCi0KICNpZiBFTkFCTEUoSklUKQogdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6
OmpldHRpc29uT3B0aW1pemVkQ29kZUZvckNhbGwoVk0mIHZtKQogewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkocmV2aXNpb24gMTU0NzE4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNDQsNiArMjQ0LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gTExJbnQ6OkNMb29w
OjpjYXRjaFJvdXRpbmVGb3IoY2F0Y2hQQ0ZvckludGVycHJldGVyKTsKICNlbmRpZgogICAgIH0K
KyAgICAKICNlbmRpZiAvLyBFTkFCTEUoSklUIHx8IEVOQUJMRShMTElOVF9DX0xPT1ApCiAKIHBy
b3RlY3RlZDoKQEAgLTQwMiw2ICs0MDMsMjAgQEAgcHVibGljOgogICAgICAgICBtX3N0YXJ0Q29s
dW1uID0gc3RhcnRDb2x1bW47CiAgICAgfQogCisgICAgdm9pZCBpbnN0YWxsQ29kZShDb2RlQmxv
Y2sqKTsKKyAgICBQYXNzUmVmUHRyPENvZGVCbG9jaz4gbmV3Q29kZUJsb2NrRm9yKENvZGVTcGVj
aWFsaXphdGlvbktpbmQsIEpTU2NvcGUqLCBKU09iamVjdComIGV4Y2VwdGlvbik7CisgICAgUGFz
c1JlZlB0cjxDb2RlQmxvY2s+IG5ld1JlcGxhY2VtZW50Q29kZUJsb2NrRm9yKENvZGVTcGVjaWFs
aXphdGlvbktpbmQpOworICAgIAorICAgIEpTT2JqZWN0KiBwcmVwYXJlRm9yRXhlY3V0aW9uKEV4
ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2lu
ZCkKKyAgICB7CisgICAgICAgIGlmIChoYXNKSVRDb2RlRm9yKGtpbmQpKQorICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgIHJldHVybiBwcmVwYXJlRm9yRXhlY3V0aW9uSW1wbChleGVjLCBz
Y29wZSwga2luZCk7CisgICAgfQorCitwcml2YXRlOgorICAgIEpTT2JqZWN0KiBwcmVwYXJlRm9y
RXhlY3V0aW9uSW1wbChFeGVjU3RhdGUqLCBKU1Njb3BlKiwgQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCk7CisKIHByb3RlY3RlZDoKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiB2bSkKICAgICB7
CkBAIC00MzAsMjQgKzQ0NSw4IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3ko
SlNDZWxsKik7CiAKLSAgICBKU09iamVjdCogY29tcGlsZShFeGVjU3RhdGUqIGV4ZWMsIEpTU2Nv
cGUqIHNjb3BlKQotICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoZXhlYy0+dm0oKS5keW5h
bWljR2xvYmFsT2JqZWN0KTsKLSAgICAgICAgSlNPYmplY3QqIGVycm9yID0gMDsKLSAgICAgICAg
aWYgKCFtX2V2YWxDb2RlQmxvY2spCi0gICAgICAgICAgICBlcnJvciA9IGNvbXBpbGVJbnRlcm5h
bChleGVjLCBzY29wZSwgSklUQ29kZTo6Ym90dG9tVGllckpJVCgpKTsKLSAgICAgICAgQVNTRVJU
KCFlcnJvciA9PSAhIW1fZXZhbENvZGVCbG9jayk7Ci0gICAgICAgIHJldHVybiBlcnJvcjsKLSAg
ICB9Ci0gICAgICAgIAotI2lmIEVOQUJMRShERkdfSklUKQotICAgIEpTT2JqZWN0KiBjb21waWxl
T3B0aW1pemVkKEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBDb21waWxhdGlvblJlc3VsdCYsIHVuc2ln
bmVkIGJ5dGVjb2RlSW5kZXgpOwotICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlcGxhY2VXaXRoRGVm
ZXJyZWRPcHRpbWl6ZWRDb2RlKFBhc3NSZWZQdHI8REZHOjpQbGFuPik7Ci0jZW5kaWYgLy8gRU5B
QkxFKERGR19KSVQpCi0gICAgICAgIAogI2lmIEVOQUJMRShKSVQpCiAgICAgdm9pZCBqZXR0aXNv
bk9wdGltaXplZENvZGUoVk0mKTsKLSAgICBDb21waWxhdGlvblJlc3VsdCBqaXRDb21waWxlKEV4
ZWNTdGF0ZSopOwogI2VuZGlmCiAKICAgICBFdmFsQ29kZUJsb2NrJiBnZW5lcmF0ZWRCeXRlY29k
ZSgpCkBAIC00ODEsMTAgKzQ4MCwxMCBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZG
dW5jdGlvbkRlY2xzKCkgeyByZXR1cm4gbV91bmxpbmtlZEV2YWxDb2RlQmxvY2stPm51bWJlck9m
RnVuY3Rpb25EZWNscygpOyB9CiAKIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFNjcmlwdEV4
ZWN1dGFibGU7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3Zl
cnJpZGVzVmlzaXRDaGlsZHJlbiB8IFNjcmlwdEV4ZWN1dGFibGU6OlN0cnVjdHVyZUZsYWdzOwog
ICAgIEV2YWxFeGVjdXRhYmxlKEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBib29sKTsK
IAotICAgIEpTT2JqZWN0KiBjb21waWxlSW50ZXJuYWwoRXhlY1N0YXRlKiwgSlNTY29wZSosIEpJ
VENvZGU6OkpJVFR5cGUsIENvbXBpbGF0aW9uUmVzdWx0KiA9IDAsIHVuc2lnbmVkIGJ5dGVjb2Rl
SW5kZXggPSBVSU5UX01BWCk7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOwogCiAgICAgUmVmUHRyPEV2YWxDb2RlQmxvY2s+IG1fZXZhbENvZGVC
bG9jazsKQEAgLTUwOCwyNCArNTA3LDggQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgZGVz
dHJveShKU0NlbGwqKTsKIAotICAgIEpTT2JqZWN0KiBjb21waWxlKEV4ZWNTdGF0ZSogZXhlYywg
SlNTY29wZSogc2NvcGUpCi0gICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChleGVjLT52bSgp
LmR5bmFtaWNHbG9iYWxPYmplY3QpOwotICAgICAgICBKU09iamVjdCogZXJyb3IgPSAwOwotICAg
ICAgICBpZiAoIW1fcHJvZ3JhbUNvZGVCbG9jaykKLSAgICAgICAgICAgIGVycm9yID0gY29tcGls
ZUludGVybmFsKGV4ZWMsIHNjb3BlLCBKSVRDb2RlOjpib3R0b21UaWVySklUKCkpOwotICAgICAg
ICBBU1NFUlQoIWVycm9yID09ICEhbV9wcm9ncmFtQ29kZUJsb2NrKTsKLSAgICAgICAgcmV0dXJu
IGVycm9yOwotICAgIH0KLQotI2lmIEVOQUJMRShERkdfSklUKQotICAgIEpTT2JqZWN0KiBjb21w
aWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBDb21waWxhdGlvblJlc3VsdCYsIHVu
c2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwotICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlcGxhY2VXaXRo
RGVmZXJyZWRPcHRpbWl6ZWRDb2RlKFBhc3NSZWZQdHI8REZHOjpQbGFuPik7Ci0jZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCi0gICAgICAgIAogI2lmIEVOQUJMRShKSVQpCiAgICAgdm9pZCBqZXR0
aXNvbk9wdGltaXplZENvZGUoVk0mKTsKLSAgICBDb21waWxhdGlvblJlc3VsdCBqaXRDb21waWxl
KEV4ZWNTdGF0ZSopOwogI2VuZGlmCiAKICAgICBQcm9ncmFtQ29kZUJsb2NrJiBnZW5lcmF0ZWRC
eXRlY29kZSgpCkBAIC01NTcsMTEgKzU0MCwxMiBAQCBwdWJsaWM6CiAgICAgRXhlY3V0YWJsZUlu
Zm8gZXhlY3V0YWJsZUluZm8oKSBjb25zdCB7IHJldHVybiBFeGVjdXRhYmxlSW5mbyhuZWVkc0Fj
dGl2YXRpb24oKSwgdXNlc0V2YWwoKSwgaXNTdHJpY3RNb2RlKCksIGZhbHNlKTsgfQogCiBwcml2
YXRlOgorICAgIGZyaWVuZCBjbGFzcyBTY3JpcHRFeGVjdXRhYmxlOworICAgIAogICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4g
fCBTY3JpcHRFeGVjdXRhYmxlOjpTdHJ1Y3R1cmVGbGFnczsKIAogICAgIFByb2dyYW1FeGVjdXRh
YmxlKEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmKTsKIAotICAgIEpTT2JqZWN0KiBjb21w
aWxlSW50ZXJuYWwoRXhlY1N0YXRlKiwgSlNTY29wZSosIEpJVENvZGU6OkpJVFR5cGUsIENvbXBp
bGF0aW9uUmVzdWx0KiA9IDAsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBVSU5UX01BWCk7CiAg
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAg
ICAgV3JpdGVCYXJyaWVyPFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jaz4gbV91bmxpbmtlZFByb2dy
YW1Db2RlQmxvY2s7CkBAIC02MDAsMjYgKzU4NCw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
ICptX2NvZGVCbG9ja0ZvckNvbnN0cnVjdDsKICAgICB9CiAgICAgICAgIAotICAgIFBhc3NSZWZQ
dHI8RnVuY3Rpb25Db2RlQmxvY2s+IHByb2R1Y2VDb2RlQmxvY2tGb3IoSlNTY29wZSosIENvZGVT
cGVjaWFsaXphdGlvbktpbmQsIEpTT2JqZWN0KiYgZXhjZXB0aW9uKTsKLQotICAgIEpTT2JqZWN0
KiBjb21waWxlRm9yQ2FsbChFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlKQotICAgIHsK
LSAgICAgICAgUkVMRUFTRV9BU1NFUlQoZXhlYy0+dm0oKS5keW5hbWljR2xvYmFsT2JqZWN0KTsK
LSAgICAgICAgSlNPYmplY3QqIGVycm9yID0gMDsKLSAgICAgICAgaWYgKCFtX2NvZGVCbG9ja0Zv
ckNhbGwpCi0gICAgICAgICAgICBlcnJvciA9IGNvbXBpbGVGb3JDYWxsSW50ZXJuYWwoZXhlYywg
c2NvcGUsIEpJVENvZGU6OmJvdHRvbVRpZXJKSVQoKSk7Ci0gICAgICAgIEFTU0VSVCghZXJyb3Ig
PT0gISFtX2NvZGVCbG9ja0ZvckNhbGwpOwotICAgICAgICByZXR1cm4gZXJyb3I7Ci0gICAgfQot
Ci0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgSlNPYmplY3QqIGNvbXBpbGVPcHRpbWl6ZWRGb3JD
YWxsKEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBDb21waWxhdGlvblJlc3VsdCYsIHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXgpOwotICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlcGxhY2VXaXRoRGVmZXJyZWRP
cHRpbWl6ZWRDb2RlRm9yQ2FsbChQYXNzUmVmUHRyPERGRzo6UGxhbj4pOwotI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQotICAgICAgICAKICNpZiBFTkFCTEUoSklUKQogICAgIHZvaWQgamV0dGlz
b25PcHRpbWl6ZWRDb2RlRm9yQ2FsbChWTSYpOwotICAgIENvbXBpbGF0aW9uUmVzdWx0IGppdENv
bXBpbGVGb3JDYWxsKEV4ZWNTdGF0ZSopOwogI2VuZGlmCiAKICAgICBib29sIGlzR2VuZXJhdGVk
Rm9yQ2FsbCgpIGNvbnN0CkBAIC02MzMsMjQgKzU5OSw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuICptX2NvZGVCbG9ja0ZvckNhbGw7CiAgICAgfQogCi0gICAgSlNPYmplY3QqIGNvbXBpbGVG
b3JDb25zdHJ1Y3QoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSkKLSAgICB7Ci0gICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGV4ZWMtPnZtKCkuZHluYW1pY0dsb2JhbE9iamVjdCk7Ci0gICAg
ICAgIEpTT2JqZWN0KiBlcnJvciA9IDA7Ci0gICAgICAgIGlmICghbV9jb2RlQmxvY2tGb3JDb25z
dHJ1Y3QpCi0gICAgICAgICAgICBlcnJvciA9IGNvbXBpbGVGb3JDb25zdHJ1Y3RJbnRlcm5hbChl
eGVjLCBzY29wZSwgSklUQ29kZTo6Ym90dG9tVGllckpJVCgpKTsKLSAgICAgICAgQVNTRVJUKCFl
cnJvciA9PSAhIW1fY29kZUJsb2NrRm9yQ29uc3RydWN0KTsKLSAgICAgICAgcmV0dXJuIGVycm9y
OwotICAgIH0KLQotI2lmIEVOQUJMRShERkdfSklUKQotICAgIEpTT2JqZWN0KiBjb21waWxlT3B0
aW1pemVkRm9yQ29uc3RydWN0KEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBDb21waWxhdGlvblJlc3Vs
dCYsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwotICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlcGxh
Y2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlRm9yQ29uc3RydWN0KFBhc3NSZWZQdHI8REZHOjpQ
bGFuPik7Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0gICAgICAgIAogI2lmIEVOQUJMRShK
SVQpCiAgICAgdm9pZCBqZXR0aXNvbk9wdGltaXplZENvZGVGb3JDb25zdHJ1Y3QoVk0mKTsKLSAg
ICBDb21waWxhdGlvblJlc3VsdCBqaXRDb21waWxlRm9yQ29uc3RydWN0KEV4ZWNTdGF0ZSopOwog
I2VuZGlmCiAKICAgICBib29sIGlzR2VuZXJhdGVkRm9yQ29uc3RydWN0KCkgY29uc3QKQEAgLTY2
NCwzOSArNjE0LDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gKm1fY29kZUJsb2NrRm9yQ29u
c3RydWN0OwogICAgIH0KICAgICAgICAgCi0gICAgSlNPYmplY3QqIGNvbXBpbGVGb3IoRXhlY1N0
YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQot
ICAgIHsKLSAgICAgICAgQVNTRVJUKGV4ZWMtPmNhbGxlZSgpKTsKLSAgICAgICAgQVNTRVJUKGV4
ZWMtPmNhbGxlZSgpLT5pbmhlcml0cyhKU0Z1bmN0aW9uOjppbmZvKCkpKTsKLSAgICAgICAgQVNT
RVJUKGpzQ2FzdDxKU0Z1bmN0aW9uKj4oZXhlYy0+Y2FsbGVlKCkpLT5qc0V4ZWN1dGFibGUoKSA9
PSB0aGlzKTsKLQotICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkKLSAgICAgICAgICAg
IHJldHVybiBjb21waWxlRm9yQ2FsbChleGVjLCBzY29wZSk7Ci0gICAgICAgIEFTU0VSVChraW5k
ID09IENvZGVGb3JDb25zdHJ1Y3QpOwotICAgICAgICByZXR1cm4gY29tcGlsZUZvckNvbnN0cnVj
dChleGVjLCBzY29wZSk7Ci0gICAgfQotICAgICAgICAKLSNpZiBFTkFCTEUoREZHX0pJVCkKLSAg
ICBKU09iamVjdCogY29tcGlsZU9wdGltaXplZEZvcihFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUq
IHNjb3BlLCBDb21waWxhdGlvblJlc3VsdCYgcmVzdWx0LCB1bnNpZ25lZCBieXRlY29kZUluZGV4
LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCi0gICAgewotICAgICAgICBBU1NFUlQoZXhl
Yy0+Y2FsbGVlKCkpOwotICAgICAgICBBU1NFUlQoZXhlYy0+Y2FsbGVlKCktPmluaGVyaXRzKEpT
RnVuY3Rpb246OmluZm8oKSkpOwotICAgICAgICBBU1NFUlQoanNDYXN0PEpTRnVuY3Rpb24qPihl
eGVjLT5jYWxsZWUoKSktPmpzRXhlY3V0YWJsZSgpID09IHRoaXMpOwotICAgICAgICAgICAgCi0g
ICAgICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKQotICAgICAgICAgICAgcmV0dXJuIGNvbXBp
bGVPcHRpbWl6ZWRGb3JDYWxsKGV4ZWMsIHNjb3BlLCByZXN1bHQsIGJ5dGVjb2RlSW5kZXgpOwot
ICAgICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ29uc3RydWN0KTsKLSAgICAgICAgcmV0dXJu
IGNvbXBpbGVPcHRpbWl6ZWRGb3JDb25zdHJ1Y3QoZXhlYywgc2NvcGUsIHJlc3VsdCwgYnl0ZWNv
ZGVJbmRleCk7Ci0gICAgfQotICAgICAgICAKLSAgICBDb21waWxhdGlvblJlc3VsdCByZXBsYWNl
V2l0aERlZmVycmVkT3B0aW1pemVkQ29kZUZvcihQYXNzUmVmUHRyPERGRzo6UGxhbj4gcGxhbiwg
Q29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQotICAgIHsKLSAgICAgICAgaWYgKGtpbmQgPT0g
Q29kZUZvckNhbGwpCi0gICAgICAgICAgICByZXR1cm4gcmVwbGFjZVdpdGhEZWZlcnJlZE9wdGlt
aXplZENvZGVGb3JDYWxsKHBsYW4pOwotICAgICAgICByZXR1cm4gcmVwbGFjZVdpdGhEZWZlcnJl
ZE9wdGltaXplZENvZGVGb3JDb25zdHJ1Y3QocGxhbik7Ci0gICAgfQotI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQotCiAjaWYgRU5BQkxFKEpJVCkKICAgICB2b2lkIGpldHRpc29uT3B0aW1pemVk
Q29kZUZvcihWTSYgdm0sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKICAgICB7CkBAIC03
MDcsMTQgKzYyNCw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGpldHRpc29uT3B0aW1pemVkQ29k
ZUZvckNvbnN0cnVjdCh2bSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgICAgIAotICAgIENvbXBp
bGF0aW9uUmVzdWx0IGppdENvbXBpbGVGb3IoRXhlY1N0YXRlKiBleGVjLCBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kIGtpbmQpCi0gICAgewotICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkK
LSAgICAgICAgICAgIHJldHVybiBqaXRDb21waWxlRm9yQ2FsbChleGVjKTsKLSAgICAgICAgQVNT
RVJUKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCk7Ci0gICAgICAgIHJldHVybiBqaXRDb21waWxl
Rm9yQ29uc3RydWN0KGV4ZWMpOwotICAgIH0KICNlbmRpZgogICAgICAgICAKICAgICBib29sIGlz
R2VuZXJhdGVkRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKQEAgLTc2NCw5ICs2NzMs
NiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZShWTSYsIGNvbnN0
IFNvdXJjZUNvZGUmLCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSosIHVuc2lnbmVkIGZpcnN0
TGluZSwgdW5zaWduZWQgbGFzdExpbmUsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uKTsKIAotICAgIEpT
T2JqZWN0KiBjb21waWxlRm9yQ2FsbEludGVybmFsKEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBKSVRD
b2RlOjpKSVRUeXBlLCBDb21waWxhdGlvblJlc3VsdCogPSAwLCB1bnNpZ25lZCBieXRlY29kZUlu
ZGV4ID0gVUlOVF9NQVgpOwotICAgIEpTT2JqZWN0KiBjb21waWxlRm9yQ29uc3RydWN0SW50ZXJu
YWwoRXhlY1N0YXRlKiwgSlNTY29wZSosIEpJVENvZGU6OkpJVFR5cGUsIENvbXBpbGF0aW9uUmVz
dWx0KiA9IDAsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXggPSBVSU5UX01BWCk7Ci0gICAgICAgIAog
ICAgIFJlZlB0cjxGdW5jdGlvbkNvZGVCbG9jaz4mIGNvZGVCbG9ja0ZvcihDb2RlU3BlY2lhbGl6
YXRpb25LaW5kIGtpbmQpCiAgICAgewogICAgICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkK
QEAgLTc4Niw2ICs2OTIsOCBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogCisgICAgZnJpZW5kIGNsYXNzIFNjcmlwdEV4ZWN1dGFibGU7CisKICAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgU2Ny
aXB0RXhlY3V0YWJsZTo6U3RydWN0dXJlRmxhZ3M7CiAgICAgV3JpdGVCYXJyaWVyPFVubGlua2Vk
RnVuY3Rpb25FeGVjdXRhYmxlPiBtX3VubGlua2VkRXhlY3V0YWJsZTsKICAgICBSZWZQdHI8RnVu
Y3Rpb25Db2RlQmxvY2s+IG1fY29kZUJsb2NrRm9yQ2FsbDsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0V4ZWN1dGlvbkhhcm5lc3MuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRpb25IYXJuZXNzLmgJKHJldmlzaW9uIDE1NDcx
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGlvbkhhcm5lc3MuaAko
d29ya2luZyBjb3B5KQpAQCAtMSwxNjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEV4ZWN1dGlvbkhhcm5lc3NfaAot
I2RlZmluZSBFeGVjdXRpb25IYXJuZXNzX2gKLQotI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgot
Ci0jaW5jbHVkZSAiQ29tcGlsYXRpb25SZXN1bHQuaCIKLSNpbmNsdWRlICJERkdEcml2ZXIuaCIK
LSNpbmNsdWRlICJERkdQbGFuLmgiCi0jaW5jbHVkZSAiSklURHJpdmVyLmgiCi0jaW5jbHVkZSAi
TExJbnRFbnRyeXBvaW50cy5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgQ29kZUJsb2NrVHlwZT4KLWlubGluZSBDb21waWxhdGlvblJlc3VsdCBwcmVwYXJlRm9yRXhl
Y3V0aW9uSW1wbCgKLSAgICBFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9ja1R5cGUqIGNvZGVCbG9j
aywgUmVmUHRyPEpJVENvZGU+JiBqaXRDb2RlLAotICAgIEpJVENvZGU6OkpJVFR5cGUgaml0VHlw
ZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKLXsKLSAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVJ
bmRleCk7Ci0jaWYgRU5BQkxFKExMSU5UKQotICAgIGlmIChKSVRDb2RlOjppc0Jhc2VsaW5lQ29k
ZShqaXRUeXBlKSkgewotICAgICAgICAvLyBTdGFydCBvZmYgaW4gdGhlIGxvdyBsZXZlbCBpbnRl
cnByZXRlci4KLSAgICAgICAgTExJbnQ6OmdldEVudHJ5cG9pbnQoZXhlYy0+dm0oKSwgY29kZUJs
b2NrLCBqaXRDb2RlKTsKLSAgICAgICAgaWYgKGV4ZWMtPnZtKCkubV9wZXJCeXRlY29kZVByb2Zp
bGVyKQotICAgICAgICAgICAgZXhlYy0+dm0oKS5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmVuc3Vy
ZUJ5dGVjb2Rlc0Zvcihjb2RlQmxvY2spOwotICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25TdWNj
ZXNzZnVsOwotICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUoTExJTlQpCi0jaWYgRU5BQkxFKEpJVCkK
LSAgICByZXR1cm4gaml0Q29tcGlsZUlmQXBwcm9wcmlhdGVJbXBsKAotICAgICAgICBleGVjLCBj
b2RlQmxvY2ssIGppdENvZGUsIGppdFR5cGUsIGJ5dGVjb2RlSW5kZXgsCi0gICAgICAgIEpJVENv
ZGU6OmlzQmFzZWxpbmVDb2RlKGppdFR5cGUpID8gSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCA6
IEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7Ci0jZW5kaWYKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIHJldHVybiBDb21waWxhdGlvbkZhaWxlZDsKLX0KLQotaW5saW5lIENv
bXBpbGF0aW9uUmVzdWx0IHByZXBhcmVGdW5jdGlvbkZvckV4ZWN1dGlvbkltcGwoCi0gICAgRXhl
Y1N0YXRlKiBleGVjLCBGdW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2NrLCBSZWZQdHI8SklUQ29k
ZT4mIGppdENvZGUsCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBqaXRDb2RlV2l0aEFyaXR5
Q2hlY2ssIEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSwKLSAgICB1bnNpZ25lZCBieXRlY29kZUlu
ZGV4LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGJ5
dGVjb2RlSW5kZXgpOwotICAgIFVOVVNFRF9QQVJBTShqaXRDb2RlV2l0aEFyaXR5Q2hlY2spOwot
I2lmIEVOQUJMRShMTElOVCkKLSAgICBpZiAoSklUQ29kZTo6aXNCYXNlbGluZUNvZGUoaml0VHlw
ZSkpIHsKLSAgICAgICAgLy8gU3RhcnQgb2ZmIGluIHRoZSBsb3cgbGV2ZWwgaW50ZXJwcmV0ZXIu
Ci0gICAgICAgIExMSW50OjpnZXRGdW5jdGlvbkVudHJ5cG9pbnQoZXhlYy0+dm0oKSwga2luZCwg
aml0Q29kZSwgaml0Q29kZVdpdGhBcml0eUNoZWNrKTsKLSAgICAgICAgaWYgKGV4ZWMtPnZtKCku
bV9wZXJCeXRlY29kZVByb2ZpbGVyKQotICAgICAgICAgICAgZXhlYy0+dm0oKS5tX3BlckJ5dGVj
b2RlUHJvZmlsZXItPmVuc3VyZUJ5dGVjb2Rlc0Zvcihjb2RlQmxvY2spOwotICAgICAgICByZXR1
cm4gQ29tcGlsYXRpb25TdWNjZXNzZnVsOwotICAgIH0KLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFN
KGtpbmQpOwotI2VuZGlmIC8vIEVOQUJMRShMTElOVCkKLSNpZiBFTkFCTEUoSklUKQotICAgIHJl
dHVybiBqaXRDb21waWxlRnVuY3Rpb25JZkFwcHJvcHJpYXRlSW1wbCgKLSAgICAgICAgZXhlYywg
Y29kZUJsb2NrLCBqaXRDb2RlLCBqaXRDb2RlV2l0aEFyaXR5Q2hlY2ssIGppdFR5cGUsIGJ5dGVj
b2RlSW5kZXgsCi0gICAgICAgIEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKGppdFR5cGUpID8gSklU
Q29tcGlsYXRpb25NdXN0U3VjY2VlZCA6IEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7Ci0jZW5kaWYK
LSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBDb21waWxhdGlv
bkZhaWxlZDsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZT4KLWlubGluZSBD
b21waWxhdGlvblJlc3VsdCBpbnN0YWxsT3B0aW1pemVkQ29kZSgKLSAgICBDb21waWxhdGlvblJl
c3VsdCByZXN1bHQsIFJlZlB0cjxDb2RlQmxvY2tUeXBlPiYgc2luaywgQ29kZUJsb2NrVHlwZSog
Y29kZUJsb2NrLAotICAgIFBhc3NSZWZQdHI8SklUQ29kZT4gaml0Q29kZSwgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIGppdENvZGVXaXRoQXJpdHlDaGVjaywKLSAgICBpbnQqIG51bVBhcmFtZXRlcnMp
Ci17Ci0gICAgVU5VU0VEX1BBUkFNKGppdENvZGVXaXRoQXJpdHlDaGVjayk7Ci0gICAgaWYgKHJl
c3VsdCAhPSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgCi0jaWYgRU5BQkxFKEpJVCkKLSAgICBjb2RlQmxvY2stPnNldEpJVENvZGUoaml0Q29kZSwg
aml0Q29kZVdpdGhBcml0eUNoZWNrKTsKLSNlbmRpZgotCi0gICAgc2luayA9IGNvZGVCbG9jazsK
LSAgICAKLSAgICBpZiAobnVtUGFyYW1ldGVycykKLSAgICAgICAgKm51bVBhcmFtZXRlcnMgPSBj
b2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsKLSAgICAKLSAgICBpZiAoaml0Q29kZSkKLSAgICAg
ICAgY29kZUJsb2NrLT52bSgpLT5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29zdChzaXplb2YoKmNv
ZGVCbG9jaykgKyBqaXRDb2RlLT5zaXplKCkpOwotICAgIGVsc2UKLSAgICAgICAgY29kZUJsb2Nr
LT52bSgpLT5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5Q29zdChzaXplb2YoKmNvZGVCbG9jaykpOwot
ICAgIAotICAgIGlmIChzaW5rICE9IGNvZGVCbG9jaykgewotICAgICAgICAvLyBUaGlzIGNhbiBo
YXBwZW4gaWYgd2UgR0MgYW5kIGRlY2lkZSB0aGF0IHRoZSBjb2RlIGlzIGludmFsaWQuCi0gICAg
ICAgIHJldHVybiBDb21waWxhdGlvbkludmFsaWRhdGVkOwotICAgIH0KLSAgICAKLSAgICByZXR1
cm4gcmVzdWx0OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgotaW5saW5l
IENvbXBpbGF0aW9uUmVzdWx0IHByZXBhcmVGb3JFeGVjdXRpb24oCi0gICAgRXhlY1N0YXRlKiBl
eGVjLCBSZWZQdHI8Q29kZUJsb2NrVHlwZT4mIHNpbmssIENvZGVCbG9ja1R5cGUqIGNvZGVCbG9j
aywKLSAgICBSZWZQdHI8SklUQ29kZT4mIGppdENvZGUsIEpJVENvZGU6OkpJVFR5cGUgaml0VHlw
ZSwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKLXsKLSAgICBDb21waWxhdGlvblJlc3VsdCByZXN1
bHQgPSBwcmVwYXJlRm9yRXhlY3V0aW9uSW1wbChleGVjLCBjb2RlQmxvY2ssIGppdENvZGUsIGpp
dFR5cGUsIGJ5dGVjb2RlSW5kZXgpOwotICAgIHJldHVybiBpbnN0YWxsT3B0aW1pemVkQ29kZShy
ZXN1bHQsIHNpbmssIGNvZGVCbG9jaywgaml0Q29kZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCks
IDApOwotfQotCi1pbmxpbmUgQ29tcGlsYXRpb25SZXN1bHQgcHJlcGFyZUZ1bmN0aW9uRm9yRXhl
Y3V0aW9uKAotICAgIEV4ZWNTdGF0ZSogZXhlYywgUmVmUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiYg
c2luaywgRnVuY3Rpb25Db2RlQmxvY2sqIGNvZGVCbG9jaywKLSAgICBSZWZQdHI8SklUQ29kZT4m
IGppdENvZGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciYgaml0Q29kZVdpdGhBcml0eUNoZWNrLAot
ICAgIGludCYgbnVtUGFyYW1ldGVycywgSklUQ29kZTo6SklUVHlwZSBqaXRUeXBlLCB1bnNpZ25l
ZCBieXRlY29kZUluZGV4LAotICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKLXsKLSAg
ICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBwcmVwYXJlRnVuY3Rpb25Gb3JFeGVjdXRpb25J
bXBsKGV4ZWMsIGNvZGVCbG9jaywKLSAgICAgICAgaml0Q29kZSwgaml0Q29kZVdpdGhBcml0eUNo
ZWNrLCBqaXRUeXBlLCBieXRlY29kZUluZGV4LCBraW5kKTsKLSAgICByZXR1cm4gaW5zdGFsbE9w
dGltaXplZENvZGUocmVzdWx0LCBzaW5rLCBjb2RlQmxvY2ssIGppdENvZGUsIGppdENvZGVXaXRo
QXJpdHlDaGVjaywgJm51bVBhcmFtZXRlcnMpOwotfQotCi0jaWYgRU5BQkxFKERGR19KSVQpCi10
ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgotaW5saW5lIENvbXBpbGF0aW9uUmVzdWx0
IHJlcGxhY2VXaXRoRGVmZXJyZWRPcHRpbWl6ZWRDb2RlKAotICAgIFBhc3NSZWZQdHI8REZHOjpQ
bGFuPiBwYXNzZWRQbGFuLCBSZWZQdHI8Q29kZUJsb2NrVHlwZT4mIHNpbmssIFJlZlB0cjxKSVRD
b2RlPiYgaml0Q29kZSwKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIqIGppdENvZGVXaXRoQXJp
dHlDaGVjaywgaW50KiBudW1QYXJhbWV0ZXJzKQotewotICAgIFJlZlB0cjxERkc6OlBsYW4+IHBs
YW4gPSBwYXNzZWRQbGFuOwotICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IERGRzo6dHJ5
RmluYWxpemVQbGFuKHBsYW4sIGppdENvZGUsIGppdENvZGVXaXRoQXJpdHlDaGVjayk7Ci0gICAg
aWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgewotICAgICAgICBkYXRhTG9nKAotICAgICAgICAg
ICAgIkRlZmVycmVkIG9wdGltaXppbmcgY29tcGlsYXRpb24gIiwgKnBsYW4tPmtleSgpLCAiIC0+
ICIsICpwbGFuLT5jb2RlQmxvY2ssCi0gICAgICAgICAgICAiIHJlc3VsdDogIiwgcmVzdWx0LCAi
XG4iKTsKLSAgICB9Ci0gICAgaWYgKHJlc3VsdCA9PSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpCi0g
ICAgICAgIHBsYW4tPmNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+dW5saW5rSW5jb21pbmdDYWxs
cygpOwotICAgIHJldHVybiBpbnN0YWxsT3B0aW1pemVkQ29kZSgKLSAgICAgICAgcmVzdWx0LCBz
aW5rLCBzdGF0aWNfY2FzdDxDb2RlQmxvY2tUeXBlKj4ocGxhbi0+Y29kZUJsb2NrLmdldCgpKSwg
aml0Q29kZSwKLSAgICAgICAgaml0Q29kZVdpdGhBcml0eUNoZWNrID8gKmppdENvZGVXaXRoQXJp
dHlDaGVjayA6IE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpLAotICAgICAgICBudW1QYXJhbWV0ZXJz
KTsKLX0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0K
LSNlbmRpZiAvLyBFeGVjdXRpb25IYXJuZXNzX2gKLQo=
</data>
<flag name="review"
          id="231898"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>