<?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>107414</bug_id>
          
          <creation_ts>2013-01-20 22:04:33 -0800</creation_ts>
          <short_desc>Refactor platform-specific code in SpeechSynthesis</short_desc>
          <delta_ts>2013-02-08 13:46:49 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Accessibility</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dominic Mazzoni">dmazzoni</reporter>
          <assigned_to name="chris fleizach">cfleizach</assigned_to>
          <cc>abarth</cc>
    
    <cc>cfleizach</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>811792</commentid>
    <comment_count>0</comment_count>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2013-01-20 22:04:33 -0800</bug_when>
    <thetext>See https://bugs.webkit.org/show_bug.cgi?id=107382 for discussion; the idea is to move platform-specific code to the platform directory.

Questions:
* Is it okay to have a method defined in a header file, but have the method implemented differently in different platform source files, without subclassing?
* If not, is there a preferred style for factory classes?
* What&apos;s a good example of a module that implements the cross-platform abstraction correctly, in terms of code style? Ideally, pick something that&apos;s NOT a core WebCore feature (i.e. some platforms might disable it) because core features tend to be much more complicated or have other requirements.

Finally, could we either document the best practices somewhere, or file bugs to refactor all of the modules that violate this rule? As it is, WebCore has several examples of both approaches so there&apos;s no way for a contributor to know that one style is preferred.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>811804</commentid>
    <comment_count>1</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-01-20 22:13:50 -0800</bug_when>
    <thetext>&gt; See https://bugs.webkit.org/show_bug.cgi?id=107382 for discussion; the idea is to move platform-specific code to the platform directory.
&gt; 
&gt; Questions:
&gt; * Is it okay to have a method defined in a header file, but have the method implemented differently in different platform source files, without subclassing?

Yes.  This is a common pattern we use to avoid introducing unnecessary virtual functions.

&gt; * If not, is there a preferred style for factory classes?

N/A

&gt; * What&apos;s a good example of a module that implements the cross-platform abstraction correctly, in terms of code style? Ideally, pick something that&apos;s NOT a core WebCore feature (i.e. some platforms might disable it) because core features tend to be much more complicated or have other requirements.

Sam might have some ideas here, but each feature has its own quirks, and I&apos;m not sure off-hand of one that&apos;s a particularly good showpiece.  One that we&apos;ve done relatively recently is MEDIA_STREAM.  Unfortunately, there aren&apos;t really non-Chromium implementations of MEDIA_STREAM, and that feature is likely slightly different from what you want because so much of the &quot;guts&quot; is in the WebRTC library.

WEB_AUDIO might be a good example.  I&apos;m pretty sure I know what Sam has in mind, and I&apos;m happy to help by reviewing patches.  Perhaps we can make SpeechSynthesis a good example for others to follow.

&gt; Finally, could we either document the best practices somewhere, or file bugs to refactor all of the modules that violate this rule? As it is, WebCore has several examples of both approaches so there&apos;s no way for a contributor to know that one style is preferred.

I would like to clean up all the features to use a consistent approach, but it&apos;s a big unsexy project and I haven&apos;t managed to convince anyone to do it (yet).  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>811808</commentid>
    <comment_count>2</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-01-20 22:19:32 -0800</bug_when>
    <thetext>The general approach is that SpeechSynthesis.cpp in Source/WebCore/Modules/speech/SpeedSynthesis.cpp should be implemented in terms of a PlatformSpeechSynthesis.h header from Source/WebCore/platform/PlatformSpeechSynthesis.h.  We&apos;d then have two cpp files that implement the PlatformSpeechSynthesis.h interface, SpeechSynthesisChromium.cpp and SpeechSynthesisMac.cpp (in the appropriate folder).

SpeechSynthesisChromium.cpp would implement the PlatformSpeechSynthesis API in terms of the Chromium WebKit API (i.e., in terms of an API we define in Source/Platform/chromium/public).  SpeechSynthesisMac.cpp would implement the PlatformSpeechSynthesis API in terms of Mac OS X APIs.  (Other ports could implement the PlatformSpeechSynthesis API in terms of facilities available on their platform.)

The idea behind this approach is that SpeechSynthesis.cpp should be in charge of the &quot;webby&quot; parts of the feature whereas PlatformSpeechSynthesis should be a simple abstraction over the multitude of libraries that you could use to implement the web feature.  I can be tricky to design a PlatformSpeechSynthesis that works for many platforms, but we try to do our best with the examples we have.

In general, I would recommend making the Chromium Platform API similar to the PlatformSpeechSynthesis API to make it as easy as possible to implement the latter in terms of the former.  I suspect we&apos;ll have less flexibility in the design of the Mac OS X API, so that often drives the design of the platform abstraction somewhat.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>814618</commentid>
    <comment_count>3</comment_count>
      <attachid>184309</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2013-01-23 14:16:35 -0800</bug_when>
    <thetext>Created attachment 184309
patch to check on whether this is the right approach</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>814620</commentid>
    <comment_count>4</comment_count>
      <attachid>184309</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2013-01-23 14:17:27 -0800</bug_when>
    <thetext>Comment on attachment 184309
patch to check on whether this is the right approach

Hi Adam, does this look like the right approach?
The platformObject will need to call back into the WebCore/SpeechSynthesis object in order to post notifications and such, hence the need to pass in the core object to the platform object</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>814630</commentid>
    <comment_count>5</comment_count>
      <attachid>184309</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-01-23 14:24:10 -0800</bug_when>
    <thetext>Comment on attachment 184309
patch to check on whether this is the right approach

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

&gt; Source/WebCore/Modules/speech/SpeechSynthesis.cpp:42
&gt; +    m_platformSpeechSynthesis = adoptRef(new PlatformSpeechSynthesis(this));

We should check with Sam, but my guess is that he won&apos;t be happy with passing |this| to the platform object because it introduces a dependency from WebCore/platform to the rest of WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>814636</commentid>
    <comment_count>6</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2013-01-23 14:26:57 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 184309 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=184309&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/speech/SpeechSynthesis.cpp:42
&gt; &gt; +    m_platformSpeechSynthesis = adoptRef(new PlatformSpeechSynthesis(this));
&gt; 
&gt; We should check with Sam, but my guess is that he won&apos;t be happy with passing |this| to the platform object because it introduces a dependency from WebCore/platform to the rest of WebCore.

That&apos;s one reason why I liked have one SpeechSynthesis object with certain methods implemented in the platform versions.

The issue is that when a speech job finishes, we need to inform SpeechSynthesis so that it can fire back the SpeechSynthesisEvent. 

Do you have any thoughts how that should be factored?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>814640</commentid>
    <comment_count>7</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-01-23 14:30:45 -0800</bug_when>
    <thetext>&gt; Do you have any thoughts how that should be factored?

I think we should get Sam&apos;s feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>814695</commentid>
    <comment_count>8</comment_count>
      <attachid>184309</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2013-01-23 14:57:18 -0800</bug_when>
    <thetext>Comment on attachment 184309
patch to check on whether this is the right approach

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

&gt;&gt;&gt; Source/WebCore/Modules/speech/SpeechSynthesis.cpp:42
&gt;&gt;&gt; +    m_platformSpeechSynthesis = adoptRef(new PlatformSpeechSynthesis(this));
&gt;&gt; 
&gt;&gt; We should check with Sam, but my guess is that he won&apos;t be happy with passing |this| to the platform object because it introduces a dependency from WebCore/platform to the rest of WebCore.
&gt; 
&gt; That&apos;s one reason why I liked have one SpeechSynthesis object with certain methods implemented in the platform versions.
&gt; 
&gt; The issue is that when a speech job finishes, we need to inform SpeechSynthesis so that it can fire back the SpeechSynthesisEvent. 
&gt; 
&gt; Do you have any thoughts how that should be factored?

Yes, this will definitely be a two-way API in other places too - for example, in the Chromium implementation, voices can be added and deleted dynamically, so the platform will need to be able to call a method on the WebCore SpeechSynthesis object to tell it to update its list of voices.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>816061</commentid>
    <comment_count>9</comment_count>
      <attachid>184630</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2013-01-24 18:16:58 -0800</bug_when>
    <thetext>Created attachment 184630
patch with header file</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817491</commentid>
    <comment_count>10</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-01-27 20:39:58 -0800</bug_when>
    <thetext>To do a better review of this, I&apos;d like to understand what parts that the underlying platform will be providing.  But without that, here&apos;s a sketch of a design that generally works:

in WebCore/platform/speech/

class PlatformSpeechSynthesisVoice {
public:
    ...
};

class PlatformSpeechSynthesizerClient {
public:
    virtual void voicesDidChange();
    ...
};

class  PlatformSpeechSynthesizer {
public:
     PlatformSpeechSynthesize(PlatformSpeechSynthesizerClient*);
    ...
}


in WebCore/Modules/speech

class SpeechSynthesis : PlatformSpeechSynthesizerClient, RefPtr&lt;SpeechSynthesis&gt; {
public:
    ...

private:
    PlatformSpeechSynthesizer m_platformSpeechSynthesizer;
};

class SpeechSynthesisVoice : RefCounted&lt;SpeechSynthesisVoice&gt; {
public:
    ....

private:
    PlatformSpeechSynthesisVoice m_platformVoice;
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817554</commentid>
    <comment_count>11</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2013-01-28 00:00:45 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; To do a better review of this, I&apos;d like to understand what parts that the underlying platform will be providing.  But without that, here&apos;s a sketch of a design that generally works:
&gt; 
&gt; in WebCore/platform/speech/
&gt; 
&gt; class PlatformSpeechSynthesisVoice {
&gt; public:
&gt;     ...
&gt; };
&gt; 
&gt; class PlatformSpeechSynthesizerClient {
&gt; public:
&gt;     virtual void voicesDidChange();
&gt;     ...
&gt; };
&gt; 
&gt; class  PlatformSpeechSynthesizer {
&gt; public:
&gt;      PlatformSpeechSynthesize(PlatformSpeechSynthesizerClient*);
&gt;     ...
&gt; }
&gt; 
&gt; 
&gt; in WebCore/Modules/speech
&gt; 
&gt; class SpeechSynthesis : PlatformSpeechSynthesizerClient, RefPtr&lt;SpeechSynthesis&gt; {
&gt; public:
&gt;     ...
&gt; 
&gt; private:
&gt;     PlatformSpeechSynthesizer m_platformSpeechSynthesizer;
&gt; };
&gt; 
&gt; class SpeechSynthesisVoice : RefCounted&lt;SpeechSynthesisVoice&gt; {
&gt; public:
&gt;     ....
&gt; 
&gt; private:
&gt;     PlatformSpeechSynthesisVoice m_platformVoice;
&gt; }

The platform needs to provide the data for each voice (name, identifier, etc). This information is static for the voice and doesn&apos;t really change. 
     (As such, I don&apos;t think it&apos;s necessary at this point to have a PlatformSpeechSyntVoice object because we can populate a SpeechSynthVoice object with all the necessary data.. On the mac, there&apos;s not a &apos;voice object&apos; either. )

The platform also needs to provide
    - a way to start, pause, resume, stop speaking
    - a way to query the state of whether speaking is happening or is paused
    - a way to set rate/pitch/volume

The platform will also provide callbacks for when things happen. These need to get turned into events
    - speaking job started/finished/had error
    - speaking job reached a certain mark (word, sentence)

re-org forthcoming...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817739</commentid>
    <comment_count>12</comment_count>
      <attachid>184981</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2013-01-28 07:32:56 -0800</bug_when>
    <thetext>Created attachment 184981
refactor idea

How does this look?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817779</commentid>
    <comment_count>13</comment_count>
      <attachid>184981</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2013-01-28 08:42:06 -0800</bug_when>
    <thetext>Comment on attachment 184981
refactor idea

My only question is what if a particular platform needs member variables - are we
planning to have platform-specific sections in PlatformSpeechSynthesizer with
ifdefs, or should those platforms subclass?

Other than that, the design looks fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817784</commentid>
    <comment_count>14</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2013-01-28 08:52:30 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 184981 [details])
&gt; My only question is what if a particular platform needs member variables - are we
&gt; planning to have platform-specific sections in PlatformSpeechSynthesizer with
&gt; ifdefs, or should those platforms subclass?
&gt; 
&gt; Other than that, the design looks fine.

I don&apos;t know the answer, but Accessibility related code has ifdefs for platform variables (as a point of reference)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822870</commentid>
    <comment_count>15</comment_count>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2013-02-01 09:31:09 -0800</bug_when>
    <thetext>Sam and Adam, any other thoughts on this? Let&apos;s go ahead with this refactoring if there are no objections, I&apos;d like to start the Chromium port. The only way to truly validate the design is to finish the code!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822872</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-01 09:32:14 -0800</bug_when>
    <thetext>Attachment 184981 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/Modules/speech/SpeechSynthesis.cpp&apos;, u&apos;Source/WebCore/Modules/speech/SpeechSynthesis.h&apos;, u&apos;Source/WebCore/Modules/speech/mac/SpeechSynthesisMac.mm&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/platform/PlatformSpeechSynthesizer.h&apos;, u&apos;Source/WebCore/platform/mac/PlatformSpeechSynthesizerMac.mm&apos;]&quot; exit_code: 1
Source/WebCore/platform/PlatformSpeechSynthesizer.h:36:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/Modules/speech/SpeechSynthesis.h:33:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 2 in 5 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>823028</commentid>
    <comment_count>17</comment_count>
      <attachid>184981</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-02-01 11:29:49 -0800</bug_when>
    <thetext>Comment on attachment 184981
refactor idea

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

&gt; Source/WebCore/platform/PlatformSpeechSynthesizer.h:41
&gt; +    virtual void didStartSpeaking(SpeechSynthesisUtterance*) = 0;
&gt; +    virtual void didFinishSpeaking(SpeechSynthesisUtterance*) = 0;
&gt; +    virtual void speakingErrorOccurred(SpeechSynthesisUtterance*) = 0;

These are still a layering violation.  Code in WebCore/platform is not allowed to depend on types outside of WebCore/platform.  Here, you&apos;ve got a dependency on http://trac.webkit.org/browser/trunk/Source/WebCore/Modules/speech/SpeechSynthesisUtterance.h which isn&apos;t part of the platform abstraction.

&gt; Source/WebCore/platform/PlatformSpeechSynthesizer.h:48
&gt; +    PlatformSpeechSynthesizer(PlatformSpeechSynthesizerClient*);

Please mark one-argument constructors &quot;explicit&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823048</commentid>
    <comment_count>18</comment_count>
      <attachid>184981</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2013-02-01 11:36:41 -0800</bug_when>
    <thetext>Comment on attachment 184981
refactor idea

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

&gt;&gt; Source/WebCore/platform/PlatformSpeechSynthesizer.h:41
&gt;&gt; +    virtual void speakingErrorOccurred(SpeechSynthesisUtterance*) = 0;
&gt; 
&gt; These are still a layering violation.  Code in WebCore/platform is not allowed to depend on types outside of WebCore/platform.  Here, you&apos;ve got a dependency on http://trac.webkit.org/browser/trunk/Source/WebCore/Modules/speech/SpeechSynthesisUtterance.h which isn&apos;t part of the platform abstraction.

Isn&apos;t this how other &quot;Client&quot; platform objects operate? like ScrollbarThemeClient.h for instance

Can you give a little more guidance how this should work? The platform code needs to tell the WebCore code that you started speaking, for instance.

Thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823075</commentid>
    <comment_count>19</comment_count>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2013-02-01 11:52:58 -0800</bug_when>
    <thetext>So if I understand correctly, we want a PlatformSpeechSynthesisUtterance that actually has the data fields. Each SpeechSynthesisUtterance will own a PlatformSpeechSynthesisUtterance and the getters/setters will just modify the owned PlatformSpeechSynthesisUtterance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823724</commentid>
    <comment_count>20</comment_count>
      <attachid>184981</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-02-02 16:08:38 -0800</bug_when>
    <thetext>Comment on attachment 184981
refactor idea

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

&gt;&gt;&gt; Source/WebCore/platform/PlatformSpeechSynthesizer.h:41
&gt;&gt;&gt; +    virtual void speakingErrorOccurred(SpeechSynthesisUtterance*) = 0;
&gt;&gt; 
&gt;&gt; These are still a layering violation.  Code in WebCore/platform is not allowed to depend on types outside of WebCore/platform.  Here, you&apos;ve got a dependency on http://trac.webkit.org/browser/trunk/Source/WebCore/Modules/speech/SpeechSynthesisUtterance.h which isn&apos;t part of the platform abstraction.
&gt; 
&gt; Isn&apos;t this how other &quot;Client&quot; platform objects operate? like ScrollbarThemeClient.h for instance
&gt; 
&gt; Can you give a little more guidance how this should work? The platform code needs to tell the WebCore code that you started speaking, for instance.
&gt; 
&gt; Thanks

You need to pass PlatformSpeechSynthesisUtterance* here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823725</commentid>
    <comment_count>21</comment_count>
      <attachid>184981</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-02-02 16:10:43 -0800</bug_when>
    <thetext>Comment on attachment 184981
refactor idea

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

&gt; Source/WebCore/platform/PlatformSpeechSynthesizer.h:50
&gt; +    void getVoiceList(Vector&lt;RefPtr&lt;SpeechSynthesisVoice&gt; &gt;&amp;);

This should be a Vector&lt;RefPtr&lt;PlatformSpeechSynthesisVoice&gt; &gt; and you just return it.  There shouldn&apos;t be a good reason to use the get() pattern here.

&gt; Source/WebCore/platform/PlatformSpeechSynthesizer.h:51
&gt; +    void speak(SpeechSynthesisUtterance*);

This should take a PlatformSpeechSynthesisUtterance

&gt; Source/WebCore/Modules/speech/SpeechSynthesis.cpp:69
&gt; +    m_platformSpeechSynthesizer.speak(utterance);

This should probably do something like.  

m_platformSpeechSynthesizer.speak(utterance.platformUtterence());</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824632</commentid>
    <comment_count>22</comment_count>
      <attachid>186430</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2013-02-04 12:12:52 -0800</bug_when>
    <thetext>Created attachment 186430
patch

I think this is more in line with what people were thinking. Once I started implementing, it became clear what Sam was trying to achieve with his comments in terms of layering abstraction</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824636</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-04 12:16:23 -0800</bug_when>
    <thetext>Attachment 186430 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/Modules/speech/DOMWindowSpeechSynthesis.cpp&apos;, u&apos;Source/WebCore/Modules/speech/SpeechSynthesis.cpp&apos;, u&apos;Source/WebCore/Modules/speech/SpeechSynthesis.h&apos;, u&apos;Source/WebCore/Modules/speech/SpeechSynthesisUtterance.cpp&apos;, u&apos;Source/WebCore/Modules/speech/SpeechSynthesisUtterance.h&apos;, u&apos;Source/WebCore/Modules/speech/SpeechSynthesisVoice.cpp&apos;, u&apos;Source/WebCore/Modules/speech/SpeechSynthesisVoice.h&apos;, u&apos;Source/WebCore/Modules/speech/mac/SpeechSynthesisMac.mm&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/platform/PlatformSpeechSynthesis.h&apos;, u&apos;Source/WebCore/platform/PlatformSpeechSynthesisUtterance.cpp&apos;, u&apos;Source/WebCore/platform/PlatformSpeechSynthesisUtterance.h&apos;, u&apos;Source/WebCore/platform/PlatformSpeechSynthesisVoice.cpp&apos;, u&apos;Source/WebCore/platform/PlatformSpeechSynthesisVoice.h&apos;, u&apos;Source/WebCore/platform/PlatformSpeechSynthesizer.cpp&apos;, u&apos;Source/WebCore/platform/PlatformSpeechSynthesizer.h&apos;, u&apos;Source/WebCore/platform/mac/PlatformSpeechSynthesisMac.mm&apos;, u&apos;Source/WebCore/platform/mac/PlatformSpeechSynthesizerMac.mm&apos;]&quot; exit_code: 1
Source/WebCore/Modules/speech/SpeechSynthesisUtterance.h:60:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/Modules/speech/SpeechSynthesis.h:33:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/Modules/speech/SpeechSynthesis.h:33:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/Modules/speech/SpeechSynthesis.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/platform/PlatformSpeechSynthesizer.h:37:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/Modules/speech/SpeechSynthesisVoice.h:40:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/Modules/speech/SpeechSynthesisVoice.h:49:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/platform/PlatformSpeechSynthesisVoice.cpp:46:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebCore/Modules/speech/SpeechSynthesisVoice.cpp:33:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/Modules/speech/SpeechSynthesisVoice.cpp:38:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/platform/PlatformSpeechSynthesisVoice.h:31:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 11 in 18 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824638</commentid>
    <comment_count>24</comment_count>
      <attachid>186432</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2013-02-04 12:20:28 -0800</bug_when>
    <thetext>Created attachment 186432
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827603</commentid>
    <comment_count>25</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2013-02-07 09:23:50 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; Created an attachment (id=186430) [details]
&gt; patch
&gt; 
&gt; I think this is more in line with what people were thinking. Once I started implementing, it became clear what Sam was trying to achieve with his comments in terms of layering abstraction

Any comments on this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827741</commentid>
    <comment_count>26</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-02-07 11:14:54 -0800</bug_when>
    <thetext>&gt; Any comments on this patch?

@Sam: ^^^</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>828746</commentid>
    <comment_count>27</comment_count>
      <attachid>186432</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-08 13:46:44 -0800</bug_when>
    <thetext>Comment on attachment 186432
patch

Clearing flags on attachment: 186432

Committed r142320: &lt;http://trac.webkit.org/changeset/142320&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>828747</commentid>
    <comment_count>28</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-08 13:46:49 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184309</attachid>
            <date>2013-01-23 14:16:35 -0800</date>
            <delta_ts>2013-01-24 18:16:58 -0800</delta_ts>
            <desc>patch to check on whether this is the right approach</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>17098</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybVNwZWVjaFN5bnRoZXNp
c01hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZv
cm1TcGVlY2hTeW50aGVzaXNNYWMubW0JKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvUGxhdGZvcm1TcGVlY2hTeW50aGVzaXNNYWMubW0JKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlBsYXRmb3JtU3BlZWNoU3ludGhlc2lzLmgiCisKKyNpbmNsdWRlICJTcGVlY2hT
eW50aGVzaXNWb2ljZS5oIgorI2luY2x1ZGUgIlNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZS5oIgor
I2luY2x1ZGUgPEFwcEtpdC9OU1NwZWVjaFN5bnRoZXNpemVyLmg+CisKKyNpZiBFTkFCTEUoU1BF
RUNIX1NZTlRIRVNJUykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPFBsYXRm
b3JtU3BlZWNoU3ludGhlc2lzPiBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpczo6Y3JlYXRlKFNwZWVj
aFN5bnRoZXNpcyogc3ludGhlc2lzKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGxhdGZv
cm1TcGVlY2hTeW50aGVzaXMoc3ludGhlc2lzKSk7Cit9CisKK1BsYXRmb3JtU3BlZWNoU3ludGhl
c2lzOjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpcyhTcGVlY2hTeW50aGVzaXMqIHN5bnRoZXNpcykK
KyAgICA6IG1fc3BlZWNoU3ludGhlc2lzKHN5bnRoZXNpcykKK3sKK30KKyAgICAKK3ZvaWQgUGxh
dGZvcm1TcGVlY2hTeW50aGVzaXM6OnBsYXRmb3JtU3BlYWsoU3BlZWNoU3ludGhlc2lzVXR0ZXJh
bmNlKikKK3sKK30KKyAgICAKK3ZvaWQgUGxhdGZvcm1TcGVlY2hTeW50aGVzaXM6OnBsYXRmb3Jt
SW5pdGlhbGl6ZVZvaWNlTGlzdChWZWN0b3I8UmVmUHRyPFNwZWVjaFN5bnRoZXNpc1ZvaWNlPiA+
JiB2b2ljZXMpOworeworICAgIE5TU3RyaW5nICpkZWZhdWx0Vm9pY2VVUkkgPSBbTlNTcGVlY2hT
eW50aGVzaXplciBkZWZhdWx0Vm9pY2VdOworICAgIE5TQXJyYXkgKmF2YWlsYWJsZVZvaWNlcyA9
IFtOU1NwZWVjaFN5bnRoZXNpemVyIGF2YWlsYWJsZVZvaWNlc107CisgICAgTlNVSW50ZWdlciBj
b3VudCA9IFthdmFpbGFibGVWb2ljZXMgY291bnRdOworICAgIGZvciAoTlNVSW50ZWdlciBrID0g
MDsgayA8IGNvdW50OyBrKyspIHsKKyAgICAgICAgTlNTdHJpbmcgKnZvaWNlTmFtZSA9IFthdmFp
bGFibGVWb2ljZXMgb2JqZWN0QXRJbmRleDprXTsKKyAgICAgICAgTlNEaWN0aW9uYXJ5ICphdHRy
aWJ1dGVzID0gW05TU3BlZWNoU3ludGhlc2l6ZXIgYXR0cmlidXRlc0ZvclZvaWNlOnZvaWNlTmFt
ZV07CisgICAgICAgIAorICAgICAgICBOU1N0cmluZyAqdm9pY2VVUkkgPSBbYXR0cmlidXRlcyBv
YmplY3RGb3JLZXk6TlNWb2ljZUlkZW50aWZpZXJdOworICAgICAgICBOU1N0cmluZyAqbmFtZSA9
IFthdHRyaWJ1dGVzIG9iamVjdEZvcktleTpOU1ZvaWNlTmFtZV07CisgICAgICAgIE5TU3RyaW5n
ICpsYW5ndWFnZSA9IFthdHRyaWJ1dGVzIG9iamVjdEZvcktleTpOU1ZvaWNlTG9jYWxlSWRlbnRp
Zmllcl07CisgICAgICAgIAorICAgICAgICAvLyBDaGFuZ2UgdG8gQkNQLTQ3IGZvcm1hdCBhcyBk
ZWZpbmVkIGJ5IHNwZWMuCisgICAgICAgIGxhbmd1YWdlID0gW2xhbmd1YWdlIHN0cmluZ0J5UmVw
bGFjaW5nT2NjdXJyZW5jZXNPZlN0cmluZzpAIl8iIHdpdGhTdHJpbmc6QCItIl07CisgICAgICAg
IAorICAgICAgICBib29sIGlzRGVmYXVsdCA9IFtkZWZhdWx0Vm9pY2VVUkkgaXNFcXVhbFRvU3Ry
aW5nOnZvaWNlVVJJXTsKKyAgICAgICAgCisgICAgICAgIHZvaWNlcy5hcHBlbmQoU3BlZWNoU3lu
dGhlc2lzVm9pY2U6OmNyZWF0ZSh2b2ljZVVSSSwgbmFtZSwgbGFuZ3VhZ2UsIHRydWUsIGlzRGVm
YXVsdCkpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNDA1ODYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTc3OCw2ICs3NzgsNyBAQAogCQkyOUNENjFERTE0NkQwMjg5MDA2OEU4MkEgLyogV2Vi
S2l0Q1NTU2hhZGVyVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUwQjQyMTU3MTQ2OTc2OTYwMDg3RTYwNCAvKiBXZWJLaXRDU1NTaGFkZXJWYWx1
ZS5oICovOyB9OwogCQkyOUQ3QkNGNjE0NDRBRjU4MDA3MDYxOUMgLyogQWNjZXNzaWJpbGl0eVNw
aW5CdXR0b24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMjlEN0JDRjUxNDQ0QUY1ODAwNzA2MTlDIC8qIEFjY2Vzc2liaWxpdHlTcGluQnV0dG9uLmNw
cCAqLzsgfTsKIAkJMjlEN0JDRkExNDQ0QUY3RDAwNzA2MTlDIC8qIEFjY2Vzc2liaWxpdHlTcGlu
QnV0dG9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
OUQ3QkNGOTE0NDRBRjdEMDA3MDYxOUMgLyogQWNjZXNzaWJpbGl0eVNwaW5CdXR0b24uaCAqLzsg
fTsKKwkJMjlFNEQ4RTIxNkIwOTU5ODAwQzg0NzA0IC8qIFBsYXRmb3JtU3BlZWNoU3ludGhlc2lz
TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjlF
NEQ4RTAxNkIwOTU5ODAwQzg0NzA0IC8qIFBsYXRmb3JtU3BlZWNoU3ludGhlc2lzTWFjLm1tICov
OyB9OwogCQkyQjM2NUM4NDE1MjUxMTlFMDA5MUQyN0IgLyogUmVuZGVyU1ZHRWxsaXBzZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkI0MjM1QTAxNTI1
MEY2MDAwREJCQ0Q4IC8qIFJlbmRlclNWR0VsbGlwc2UuaCAqLzsgfTsKIAkJMkJFOEUyQzcxMkE1
ODlFQzAwRkFENTUwIC8qIEhUTUxNZXRhQ2hhcnNldFBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkJFOEUyQzYxMkE1ODlFQzAwRkFENTUwIC8q
IEhUTUxNZXRhQ2hhcnNldFBhcnNlci5oICovOyB9OwogCQkyQkU4RTJDOTEyQTU4QTAxMDBGQUQ1
NTAgLyogSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJCRThFMkM4MTJBNThBMDEwMEZBRDU1MCAvKiBIVE1MTWV0
YUNoYXJzZXRQYXJzZXIuY3BwICovOyB9OwpAQCAtNDYyOCw3ICs0NjI5LDYgQEAKIAkJQUEyQTVB
RDUxNkE0ODYxNDAwOTc1QTI1IC8qIFNwZWVjaFN5bnRoZXNpcy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQTJBNUFCRDE2QTQ4NUQ1MDA5NzVBMjUg
LyogU3BlZWNoU3ludGhlc2lzLmNwcCAqLzsgfTsKIAkJQUEyQTVBRDYxNkE0ODYxNjAwOTc1QTI1
IC8qIERPTVdpbmRvd1NwZWVjaFN5bnRoZXNpcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQUEyQTVBQjkxNkE0ODVENTAwOTc1QTI1IC8qIERPTVdpbmRv
d1NwZWVjaFN5bnRoZXNpcy5oICovOyB9OwogCQlBQTJBNUFENzE2QTQ4NjFBMDA5NzVBMjUgLyog
RE9NV2luZG93U3BlZWNoU3ludGhlc2lzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEFBMkE1QUI4MTZBNDg1RDUwMDk3NUEyNSAvKiBET01XaW5kb3dT
cGVlY2hTeW50aGVzaXMuY3BwICovOyB9OwotCQlBQTJBNUFEODE2QTQ4NjFEMDA5NzVBMjUgLyog
U3BlZWNoU3ludGhlc2lzTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQUEyQTVBQkMxNkE0ODVENTAwOTc1QTI1IC8qIFNwZWVjaFN5bnRoZXNpc01h
Yy5tbSAqLzsgfTsKIAkJQUE0QzNBNzYwQjJCMTY3OTAwMjMzNEEyIC8qIFN0eWxlRWxlbWVudC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQTRDM0E3
NDBCMkIxNjc5MDAyMzM0QTIgLyogU3R5bGVFbGVtZW50LmNwcCAqLzsgfTsKIAkJQUE0QzNBNzcw
QjJCMTY3OTAwMjMzNEEyIC8qIFN0eWxlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUE0QzNBNzUwQjJCMTY3OTAwMjMzNEEyIC8qIFN0eWxl
RWxlbWVudC5oICovOyB9OwogCQlBQTczMTgzRTE1OTI1NUI5MDBBOTNFNkUgLyogSW5qZWN0ZWRT
Y3JpcHRDYW52YXNNb2R1bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQUE3MzE4M0MxNTkyNTVCOTAwQTkzRTZFIC8qIEluamVjdGVkU2NyaXB0Q2Fu
dmFzTW9kdWxlLmNwcCAqLzsgfTsKQEAgLTgwNTQsNiArODA1NCw4IEBACiAJCTI5QUNCMjEzMTQz
RTc0OTgwMDZCQ0E1RiAvKiBBY2Nlc3NpYmlsaXR5TW9ja09iamVjdC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBY2Nlc3NpYmlsaXR5TW9ja09iamVjdC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI5RDdCQ0Y1MTQ0NEFGNTgwMDcwNjE5QyAvKiBB
Y2Nlc3NpYmlsaXR5U3BpbkJ1dHRvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBBY2Nlc3NpYmlsaXR5U3BpbkJ1dHRvbi5jcHA7IHBhdGggPSBhY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlTcGluQnV0dG9uLmNwcDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9
OwogCQkyOUQ3QkNGOTE0NDRBRjdEMDA3MDYxOUMgLyogQWNjZXNzaWJpbGl0eVNwaW5CdXR0b24u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWNjZXNzaWJpbGl0eVNwaW5CdXR0
b24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjlFNEQ4REYxNkIwOTQwRjAwQzg0
NzA0IC8qIFBsYXRmb3JtU3BlZWNoU3ludGhlc2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3Jt
U3BlZWNoU3ludGhlc2lzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI5RTREOEUw
MTZCMDk1OTgwMEM4NDcwNCAvKiBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc01hYy5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBsYXRmb3JtU3BlZWNoU3ludGhlc2lz
TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQjQyMzU5RjE1MjUwRjYwMDBE
QkJDRDggLyogUmVuZGVyU1ZHRWxsaXBzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBSZW5kZXJTVkdFbGxpcHNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMkI0MjM1QTAxNTI1MEY2MDAwREJCQ0Q4IC8qIFJlbmRlclNWR0VsbGlwc2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHRWxsaXBzZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkyQkU4RTJDNjEyQTU4OUVDMDBGQUQ1NTAgLyogSFRNTE1l
dGFDaGFyc2V0UGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEhUTUxN
ZXRhQ2hhcnNldFBhcnNlci5oOyBwYXRoID0gcGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTE5MzQsNyArMTE5MzYsNiBAQAogCQlB
QTJBNUFCODE2QTQ4NUQ1MDA5NzVBMjUgLyogRE9NV2luZG93U3BlZWNoU3ludGhlc2lzLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERPTVdpbmRvd1NwZWVjaFN5bnRoZXNpcy5jcHA7IHBhdGggPSBN
b2R1bGVzL3NwZWVjaC9ET01XaW5kb3dTcGVlY2hTeW50aGVzaXMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBQTJBNUFCOTE2QTQ4NUQ1MDA5NzVBMjUgLyogRE9NV2luZG93U3Bl
ZWNoU3ludGhlc2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERPTVdpbmRvd1NwZWVjaFN5bnRoZXNpcy5o
OyBwYXRoID0gTW9kdWxlcy9zcGVlY2gvRE9NV2luZG93U3BlZWNoU3ludGhlc2lzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFBMkE1QUJBMTZBNDg1RDUwMDk3NUEyNSAvKiBET01X
aW5kb3dTcGVlY2hTeW50aGVzaXMuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IERPTVdpbmRvd1NwZWVjaFN5bnRoZXNpcy5p
ZGw7IHBhdGggPSBNb2R1bGVzL3NwZWVjaC9ET01XaW5kb3dTcGVlY2hTeW50aGVzaXMuaWRsOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBQTJBNUFCQzE2QTQ4NUQ1MDA5NzVBMjUgLyog
U3BlZWNoU3ludGhlc2lzTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxp
Y2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTcGVlY2hTeW50aGVz
aXNNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFBMkE1QUJEMTZBNDg1RDUw
MDk3NUEyNSAvKiBTcGVlY2hTeW50aGVzaXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU3BlZWNo
U3ludGhlc2lzLmNwcDsgcGF0aCA9IE1vZHVsZXMvc3BlZWNoL1NwZWVjaFN5bnRoZXNpcy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFBMkE1QUJFMTZBNDg1RDUwMDk3NUEyNSAv
KiBTcGVlY2hTeW50aGVzaXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU3BlZWNoU3ludGhlc2lzLmg7IHBh
dGggPSBNb2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50aGVzaXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQUEyQTVBQkYxNkE0ODVENTAwOTc1QTI1IC8qIFNwZWVjaFN5bnRoZXNpcy5p
ZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
OyBuYW1lID0gU3BlZWNoU3ludGhlc2lzLmlkbDsgcGF0aCA9IE1vZHVsZXMvc3BlZWNoL1NwZWVj
aFN5bnRoZXNpcy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjA4MCw2ICsx
NjA4MSw3IEBACiAJCQkJQkNBQTQ4NkQxNEEwNTI1MzAwODhGQUM0IC8qIFBsYXRmb3JtRXZlbnRG
YWN0b3J5TWFjLm1tICovLAogCQkJCUM1Rjc2NUJBMTRFMUVDRjQwMDZDODk5QiAvKiBQbGF0Zm9y
bVBhc3RlYm9hcmRNYWMubW0gKi8sCiAJCQkJQkM5NEQxMDcwQzI3NEY4ODAwNkJDNjE3IC8qIFBs
YXRmb3JtU2NyZWVuTWFjLm1tICovLAorCQkJCTI5RTREOEUwMTZCMDk1OTgwMEM4NDcwNCAvKiBQ
bGF0Zm9ybVNwZWVjaFN5bnRoZXNpc01hYy5tbSAqLywKIAkJCQlEMzlEMDA2QzExRjhFMzA4MDA2
MDQxRjIgLyogUG9wdXBNZW51TWFjLmggKi8sCiAJCQkJMDY2OEUxOEUwQUREOTY0MDAwNDEyOEUw
IC8qIFBvcHVwTWVudU1hYy5tbSAqLywKIAkJCQlFNEQ2ODc3NjBFRDdBRTNEMDA2RUE5NzggLyog
UHVyZ2VhYmxlQnVmZmVyTWFjLmNwcCAqLywKQEAgLTE5NjU5LDcgKzE5NjYxLDYgQEAKIAkJQUEy
QTVBQjcxNkE0ODVBNDAwOTc1QTI1IC8qIHNwZWVjaCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3Vw
OwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJQUEyQTVBQkIxNkE0ODVENTAwOTc1QTI1IC8qIG1hYyAq
LywKIAkJCQlBQTJBNUFCODE2QTQ4NUQ1MDA5NzVBMjUgLyogRE9NV2luZG93U3BlZWNoU3ludGhl
c2lzLmNwcCAqLywKIAkJCQlBQTJBNUFCOTE2QTQ4NUQ1MDA5NzVBMjUgLyogRE9NV2luZG93U3Bl
ZWNoU3ludGhlc2lzLmggKi8sCiAJCQkJQUEyQTVBQkExNkE0ODVENTAwOTc1QTI1IC8qIERPTVdp
bmRvd1NwZWVjaFN5bnRoZXNpcy5pZGwgKi8sCkBAIC0xOTY3OSwxNSArMTk2ODAsNiBAQAogCQkJ
bmFtZSA9IHNwZWVjaDsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07Ci0JCUFBMkE1
QUJCMTZBNDg1RDUwMDk3NUEyNSAvKiBtYWMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJ
CWNoaWxkcmVuID0gKAotCQkJCUFBMkE1QUJDMTZBNDg1RDUwMDk3NUEyNSAvKiBTcGVlY2hTeW50
aGVzaXNNYWMubW0gKi8sCi0JCQkpOwotCQkJbmFtZSA9IG1hYzsKLQkJCXBhdGggPSBNb2R1bGVz
L3NwZWVjaC9tYWM7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwogCQlBQTdGRUU5
QjE2QTQ5MUExMDA0QzBDMzMgLyogU3BlZWNoICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKQEAgLTIxMzg2LDYgKzIxMzc4LDcgQEAKIAkJCQk5MzVDNDc2NzA5QUM0
RDQzMDBBNkFBQjQgLyogUGxhdGZvcm1Nb3VzZUV2ZW50LmggKi8sCiAJCQkJQzVCQUMxNkYxNEUz
MEU0NzAwMDA4ODM3IC8qIFBsYXRmb3JtUGFzdGVib2FyZC5oICovLAogCQkJCUJDRUMwMUQ2MEMy
NzRFQjQwMDlGNEVDOSAvKiBQbGF0Zm9ybVNjcmVlbi5oICovLAorCQkJCTI5RTREOERGMTZCMDk0
MEYwMEM4NDcwNCAvKiBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpcy5oICovLAogCQkJCTFBRDhGODFB
MTFDQUI5RTkwMEU5M0U1NCAvKiBQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwICovLAogCQkJCTFBRDhG
ODE5MTFDQUI5RTkwMEU5M0U1NCAvKiBQbGF0Zm9ybVN0cmF0ZWdpZXMuaCAqLywKIAkJCQk5MzVD
NDc2QTA5QUM0RDRGMDBBNkFBQjQgLyogUGxhdGZvcm1XaGVlbEV2ZW50LmggKi8sCkBAIC0yODkx
NSw3ICsyODkwOCw2IEBACiAJCQkJNzU0MTVDMjkxMjlBOTkyMDAwM0FENjY5IC8qIFNwZWVjaElu
cHV0UmVzdWx0TGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBQTJBNUFENTE2QTQ4NjE0MDA5
NzVBMjUgLyogU3BlZWNoU3ludGhlc2lzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUFBMkE1QUQz
MTZBNDg2MEQwMDk3NUEyNSAvKiBTcGVlY2hTeW50aGVzaXNFdmVudC5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQlBQTJBNUFEODE2QTQ4NjFEMDA5NzVBMjUgLyogU3BlZWNoU3ludGhlc2lzTWFjLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJQUEyQTVBRDExNkE0ODYwNzAwOTc1QTI1IC8qIFNwZWVjaFN5
bnRoZXNpc1V0dGVyYW5jZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBQTJBNUFDRDE2QTQ4NUZB
MDA5NzVBMjUgLyogU3BlZWNoU3ludGhlc2lzVm9pY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTc4RkUxM0IxMjM2NkIxMDAwQUNFOEQwIC8qIFNwZWxsQ2hlY2tlci5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTI5NDE3LDYgKzI5NDA5LDcgQEAKIAkJCQlFMUJFNTEyRDBDRjZDNTEyMDAyRUE5NTkg
LyogWFNMVFVuaWNvZGVTb3J0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3N0UyRTBFMTJGMEZD
OUMwMEMxMzM3OSAvKiBYU1NBdWRpdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZENTM3MzUy
MTM3QjY1MTgwMDAwOERDRSAvKiBaZXJvUG9sZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyOUU0
RDhFMjE2QjA5NTk4MDBDODQ3MDQgLyogUGxhdGZvcm1TcGVlY2hTeW50aGVzaXNNYWMubW0gaW4g
U291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL21hYy9TcGVl
Y2hTeW50aGVzaXNNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9z
cGVlY2gvbWFjL1NwZWVjaFN5bnRoZXNpc01hYy5tbQkocmV2aXNpb24gMTQwNTg2KQorKysgU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvbWFjL1NwZWVjaFN5bnRoZXNpc01hYy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMSw5MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiU3BlZWNoU3ludGhlc2lzLmgiCi0KLSNpZiBFTkFCTEUoU1BFRUNIX1NZTlRI
RVNJUykKLQotI2luY2x1ZGUgIlNwZWVjaFN5bnRoZXNpc1ZvaWNlLmgiCi0jaW5jbHVkZSAiU3Bl
ZWNoU3ludGhlc2lzVXR0ZXJhbmNlLmgiCi0jaW5jbHVkZSA8QXBwS2l0L05TU3BlZWNoU3ludGhl
c2l6ZXIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAotdm9pZCBTcGVlY2hTeW50aGVz
aXM6OmluaXRpYWxpemVWb2ljZUxpc3QoKQotewotICAgIE5TU3RyaW5nICpkZWZhdWx0Vm9pY2VV
UkkgPSBbTlNTcGVlY2hTeW50aGVzaXplciBkZWZhdWx0Vm9pY2VdOwotICAgIE5TQXJyYXkgKmF2
YWlsYWJsZVZvaWNlcyA9IFtOU1NwZWVjaFN5bnRoZXNpemVyIGF2YWlsYWJsZVZvaWNlc107Ci0g
ICAgTlNVSW50ZWdlciBjb3VudCA9IFthdmFpbGFibGVWb2ljZXMgY291bnRdOwotICAgIGZvciAo
TlNVSW50ZWdlciBrID0gMDsgayA8IGNvdW50OyBrKyspIHsKLSAgICAgICAgTlNTdHJpbmcgKnZv
aWNlTmFtZSA9IFthdmFpbGFibGVWb2ljZXMgb2JqZWN0QXRJbmRleDprXTsKLSAgICAgICAgTlNE
aWN0aW9uYXJ5ICphdHRyaWJ1dGVzID0gW05TU3BlZWNoU3ludGhlc2l6ZXIgYXR0cmlidXRlc0Zv
clZvaWNlOnZvaWNlTmFtZV07Ci0gICAgICAgIAotICAgICAgICBOU1N0cmluZyAqdm9pY2VVUkkg
PSBbYXR0cmlidXRlcyBvYmplY3RGb3JLZXk6TlNWb2ljZUlkZW50aWZpZXJdOwotICAgICAgICBO
U1N0cmluZyAqbmFtZSA9IFthdHRyaWJ1dGVzIG9iamVjdEZvcktleTpOU1ZvaWNlTmFtZV07Ci0g
ICAgICAgIE5TU3RyaW5nICpsYW5ndWFnZSA9IFthdHRyaWJ1dGVzIG9iamVjdEZvcktleTpOU1Zv
aWNlTG9jYWxlSWRlbnRpZmllcl07Ci0KLSAgICAgICAgLy8gQ2hhbmdlIHRvIEJDUC00NyBmb3Jt
YXQgYXMgZGVmaW5lZCBieSBzcGVjLgotICAgICAgICBsYW5ndWFnZSA9IFtsYW5ndWFnZSBzdHJp
bmdCeVJlcGxhY2luZ09jY3VycmVuY2VzT2ZTdHJpbmc6QCJfIiB3aXRoU3RyaW5nOkAiLSJdOwot
ICAgICAgICAKLSAgICAgICAgYm9vbCBpc0RlZmF1bHQgPSBbZGVmYXVsdFZvaWNlVVJJIGlzRXF1
YWxUb1N0cmluZzp2b2ljZVVSSV07Ci0gICAgICAgIAotICAgICAgICBtX3ZvaWNlTGlzdC5hcHBl
bmQoU3BlZWNoU3ludGhlc2lzVm9pY2U6OmNyZWF0ZSh2b2ljZVVSSSwgbmFtZSwgbGFuZ3VhZ2Us
IHRydWUsIGlzRGVmYXVsdCkpOwotICAgIH0KLX0KLQotYm9vbCBTcGVlY2hTeW50aGVzaXM6OnBl
bmRpbmcoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBTcGVlY2hTeW50
aGVzaXM6OnNwZWFraW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wg
U3BlZWNoU3ludGhlc2lzOjpwYXVzZWQoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotdm9pZCBTcGVlY2hTeW50aGVzaXM6OnNwZWFrKFNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSop
Ci17Ci19Ci0KLXZvaWQgU3BlZWNoU3ludGhlc2lzOjpjYW5jZWwoKQotewotfQotCi12b2lkIFNw
ZWVjaFN5bnRoZXNpczo6cGF1c2UoKQotewotfQotCi12b2lkIFNwZWVjaFN5bnRoZXNpczo6cmVz
dW1lKCkKLXsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxF
KFNQRUVDSF9TWU5USEVTSVMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9T
cGVlY2hTeW50aGVzaXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
c3BlZWNoL1NwZWVjaFN5bnRoZXNpcy5jcHAJKHJldmlzaW9uIDE0MDU4NikKKysrIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFN5bnRoZXNpcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDYgKzI4LDggQEAKIAogI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQogCisjaW5j
bHVkZSAiUGxhdGZvcm1TcGVlY2hTeW50aGVzaXMuaCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgIAogUGFzc1JlZlB0cjxTcGVlY2hTeW50aGVzaXM+IFNwZWVjaFN5bnRoZXNpczo6Y3JlYXRl
KCkKQEAgLTM3LDkgKzM5LDQyIEBACiAgICAgCiBTcGVlY2hTeW50aGVzaXM6OlNwZWVjaFN5bnRo
ZXNpcygpCiB7Ci0gICAgaW5pdGlhbGl6ZVZvaWNlTGlzdCgpOworICAgIG1fcGxhdGZvcm1TcGVl
Y2hTeW50aGVzaXMgPSBhZG9wdFJlZihuZXcgUGxhdGZvcm1TcGVlY2hTeW50aGVzaXModGhpcykp
OworICAgIG1fcGxhdGZvcm1TcGVlY2hTeW50aGVzaXMtPmluaXRpYWxpemVWb2ljZUxpc3QobV92
b2ljZUxpc3QpOwogfQogCitib29sIFNwZWVjaFN5bnRoZXNpczo6cGVuZGluZygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFNwZWVjaFN5bnRoZXNpczo6c3BlYWtpbmco
KSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBTcGVlY2hTeW50aGVzaXM6
OnBhdXNlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFNwZWVjaFN5
bnRoZXNpczo6c3BlYWsoU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlKiB1dHRlcmFuY2UpCit7Cisg
ICAgbV9wbGF0Zm9ybVNwZWVjaFN5bnRoZXNpcy0+c3BlYWsodXR0ZXJhbmNlKTsKK30KKwordm9p
ZCBTcGVlY2hTeW50aGVzaXM6OmNhbmNlbCgpCit7Cit9CisKK3ZvaWQgU3BlZWNoU3ludGhlc2lz
OjpwYXVzZSgpCit7Cit9CisKK3ZvaWQgU3BlZWNoU3ludGhlc2lzOjpyZXN1bWUoKQoreworfQor
ICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOUFVUX1NQ
RUVDSCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFN5bnRoZXNp
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFN5
bnRoZXNpcy5oCShyZXZpc2lvbiAxNDA1ODYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3Nw
ZWVjaC9TcGVlY2hTeW50aGVzaXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTIgKzMwLDE0IEBA
CiAKICNpbmNsdWRlICJTcGVlY2hTeW50aGVzaXNWb2ljZS5oIgogCisjaW5jbHVkZSAiUGxhdGZv
cm1TcGVlY2hTeW50aGVzaXMuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgCitjbGFzcyBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpczsKIGNsYXNz
IFNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZTsKIGNsYXNzIFNwZWVjaFN5bnRoZXNpc1ZvaWNlOwog
ICAgIApAQCAtNTcsNyArNTksNyBAQAogcHJpdmF0ZToKICAgICBTcGVlY2hTeW50aGVzaXMoKTsK
ICAgICAKLSAgICB2b2lkIGluaXRpYWxpemVWb2ljZUxpc3QoKTsKKyAgICBSZWZQdHI8UGxhdGZv
cm1TcGVlY2hTeW50aGVzaXM+IG1fcGxhdGZvcm1TcGVlY2hTeW50aGVzaXM7CiAgICAgVmVjdG9y
PFJlZlB0cjxTcGVlY2hTeW50aGVzaXNWb2ljZT4gPiBtX3ZvaWNlTGlzdDsKIH07CiAgICAgCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184630</attachid>
            <date>2013-01-24 18:16:58 -0800</date>
            <delta_ts>2013-01-28 07:32:56 -0800</delta_ts>
            <desc>patch with header file</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>19531</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybVNwZWVjaFN5bnRoZXNp
c01hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZv
cm1TcGVlY2hTeW50aGVzaXNNYWMubW0JKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvUGxhdGZvcm1TcGVlY2hTeW50aGVzaXNNYWMubW0JKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlBsYXRmb3JtU3BlZWNoU3ludGhlc2lzLmgiCisKKyNpbmNsdWRlICJTcGVlY2hT
eW50aGVzaXNWb2ljZS5oIgorI2luY2x1ZGUgIlNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZS5oIgor
I2luY2x1ZGUgPEFwcEtpdC9OU1NwZWVjaFN5bnRoZXNpemVyLmg+CisKKyNpZiBFTkFCTEUoU1BF
RUNIX1NZTlRIRVNJUykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPFBsYXRm
b3JtU3BlZWNoU3ludGhlc2lzPiBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpczo6Y3JlYXRlKFNwZWVj
aFN5bnRoZXNpcyogc3ludGhlc2lzKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGxhdGZv
cm1TcGVlY2hTeW50aGVzaXMoc3ludGhlc2lzKSk7Cit9CisKK1BsYXRmb3JtU3BlZWNoU3ludGhl
c2lzOjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpcyhTcGVlY2hTeW50aGVzaXMqIHN5bnRoZXNpcykK
KyAgICA6IG1fc3BlZWNoU3ludGhlc2lzKHN5bnRoZXNpcykKK3sKK30KKyAgICAKK3ZvaWQgUGxh
dGZvcm1TcGVlY2hTeW50aGVzaXM6OnBsYXRmb3JtU3BlYWsoU3BlZWNoU3ludGhlc2lzVXR0ZXJh
bmNlKikKK3sKK30KKyAgICAKK3ZvaWQgUGxhdGZvcm1TcGVlY2hTeW50aGVzaXM6OnBsYXRmb3Jt
SW5pdGlhbGl6ZVZvaWNlTGlzdChWZWN0b3I8UmVmUHRyPFNwZWVjaFN5bnRoZXNpc1ZvaWNlPiA+
JiB2b2ljZXMpOworeworICAgIE5TU3RyaW5nICpkZWZhdWx0Vm9pY2VVUkkgPSBbTlNTcGVlY2hT
eW50aGVzaXplciBkZWZhdWx0Vm9pY2VdOworICAgIE5TQXJyYXkgKmF2YWlsYWJsZVZvaWNlcyA9
IFtOU1NwZWVjaFN5bnRoZXNpemVyIGF2YWlsYWJsZVZvaWNlc107CisgICAgTlNVSW50ZWdlciBj
b3VudCA9IFthdmFpbGFibGVWb2ljZXMgY291bnRdOworICAgIGZvciAoTlNVSW50ZWdlciBrID0g
MDsgayA8IGNvdW50OyBrKyspIHsKKyAgICAgICAgTlNTdHJpbmcgKnZvaWNlTmFtZSA9IFthdmFp
bGFibGVWb2ljZXMgb2JqZWN0QXRJbmRleDprXTsKKyAgICAgICAgTlNEaWN0aW9uYXJ5ICphdHRy
aWJ1dGVzID0gW05TU3BlZWNoU3ludGhlc2l6ZXIgYXR0cmlidXRlc0ZvclZvaWNlOnZvaWNlTmFt
ZV07CisgICAgICAgIAorICAgICAgICBOU1N0cmluZyAqdm9pY2VVUkkgPSBbYXR0cmlidXRlcyBv
YmplY3RGb3JLZXk6TlNWb2ljZUlkZW50aWZpZXJdOworICAgICAgICBOU1N0cmluZyAqbmFtZSA9
IFthdHRyaWJ1dGVzIG9iamVjdEZvcktleTpOU1ZvaWNlTmFtZV07CisgICAgICAgIE5TU3RyaW5n
ICpsYW5ndWFnZSA9IFthdHRyaWJ1dGVzIG9iamVjdEZvcktleTpOU1ZvaWNlTG9jYWxlSWRlbnRp
Zmllcl07CisgICAgICAgIAorICAgICAgICAvLyBDaGFuZ2UgdG8gQkNQLTQ3IGZvcm1hdCBhcyBk
ZWZpbmVkIGJ5IHNwZWMuCisgICAgICAgIGxhbmd1YWdlID0gW2xhbmd1YWdlIHN0cmluZ0J5UmVw
bGFjaW5nT2NjdXJyZW5jZXNPZlN0cmluZzpAIl8iIHdpdGhTdHJpbmc6QCItIl07CisgICAgICAg
IAorICAgICAgICBib29sIGlzRGVmYXVsdCA9IFtkZWZhdWx0Vm9pY2VVUkkgaXNFcXVhbFRvU3Ry
aW5nOnZvaWNlVVJJXTsKKyAgICAgICAgCisgICAgICAgIHZvaWNlcy5hcHBlbmQoU3BlZWNoU3lu
dGhlc2lzVm9pY2U6OmNyZWF0ZSh2b2ljZVVSSSwgbmFtZSwgbGFuZ3VhZ2UsIHRydWUsIGlzRGVm
YXVsdCkpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Q
bGF0Zm9ybVNwZWVjaFN5bnRoZXNpcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1BsYXRmb3JtU3BlZWNoU3ludGhlc2lzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVNwZWVjaFN5bnRoZXNpcy5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIENvbXB1dGVy
LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUGxhdGZvcm1TcGVl
Y2hTeW50aGVzaXNfaAorI2RlZmluZSBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc19oCisKKyNpZiBF
TkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKKworI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK2NsYXNzIFNwZWVjaFN5bnRoZXNpczsKK2NsYXNz
IFNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZTsKK2NsYXNzIFNwZWVjaFN5bnRoZXNpc1ZvaWNlOwor
ICAgIAorY2xhc3MgUGxhdGZvcm1TcGVlY2hTeW50aGVzaXMgOiBwdWJsaWMgUmVmQ291bnRlZDxQ
bGF0Zm9ybVNwZWVjaFN5bnRoZXNpcz4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFBsYXRmb3JtU3BlZWNoU3ludGhlc2lzPiBjcmVhdGUoU3BlZWNoU3ludGhlc2lzKik7CisgICAg
CisgICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemVWb2ljZUxpc3QoVmVjdG9yPFJlZlB0cjxTcGVl
Y2hTeW50aGVzaXNWb2ljZT4gPiYpOworICAgIHZvaWQgcGxhdGZvcm1TcGVhayhTcGVlY2hTeW50
aGVzaXNVdHRlcmFuY2UqKTsKKyAgICAKK3ByaXZhdGU6CisgICAgUGxhdGZvcm1TcGVlY2hTeW50
aGVzaXMoU3BlZWNoU3ludGhlc2lzKik7CisKKyAgICBTcGVlY2hTeW50aGVzaXMqIG1fc3BlZWNo
U3ludGhzaXM7Cit9OworICAgIAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCisKKyNlbmRpZiAvLyBQbGF0Zm9ybVNwZWVjaFN5bnRo
ZXNpc19oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNDA1OTcpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTc3OCw2ICs3Nzgs
NyBAQAogCQkyOUNENjFERTE0NkQwMjg5MDA2OEU4MkEgLyogV2ViS2l0Q1NTU2hhZGVyVmFsdWUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUwQjQyMTU3
MTQ2OTc2OTYwMDg3RTYwNCAvKiBXZWJLaXRDU1NTaGFkZXJWYWx1ZS5oICovOyB9OwogCQkyOUQ3
QkNGNjE0NDRBRjU4MDA3MDYxOUMgLyogQWNjZXNzaWJpbGl0eVNwaW5CdXR0b24uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjlEN0JDRjUxNDQ0QUY1
ODAwNzA2MTlDIC8qIEFjY2Vzc2liaWxpdHlTcGluQnV0dG9uLmNwcCAqLzsgfTsKIAkJMjlEN0JD
RkExNDQ0QUY3RDAwNzA2MTlDIC8qIEFjY2Vzc2liaWxpdHlTcGluQnV0dG9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyOUQ3QkNGOTE0NDRBRjdEMDA3
MDYxOUMgLyogQWNjZXNzaWJpbGl0eVNwaW5CdXR0b24uaCAqLzsgfTsKKwkJMjlFNEQ4RTIxNkIw
OTU5ODAwQzg0NzA0IC8qIFBsYXRmb3JtU3BlZWNoU3ludGhlc2lzTWFjLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjlFNEQ4RTAxNkIwOTU5ODAwQzg0
NzA0IC8qIFBsYXRmb3JtU3BlZWNoU3ludGhlc2lzTWFjLm1tICovOyB9OwogCQkyQjM2NUM4NDE1
MjUxMTlFMDA5MUQyN0IgLyogUmVuZGVyU1ZHRWxsaXBzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkI0MjM1QTAxNTI1MEY2MDAwREJCQ0Q4IC8qIFJl
bmRlclNWR0VsbGlwc2UuaCAqLzsgfTsKIAkJMkJFOEUyQzcxMkE1ODlFQzAwRkFENTUwIC8qIEhU
TUxNZXRhQ2hhcnNldFBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMkJFOEUyQzYxMkE1ODlFQzAwRkFENTUwIC8qIEhUTUxNZXRhQ2hhcnNldFBh
cnNlci5oICovOyB9OwogCQkyQkU4RTJDOTEyQTU4QTAxMDBGQUQ1NTAgLyogSFRNTE1ldGFDaGFy
c2V0UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDJCRThFMkM4MTJBNThBMDEwMEZBRDU1MCAvKiBIVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3Bw
ICovOyB9OwpAQCAtNDYyOCw3ICs0NjI5LDYgQEAKIAkJQUEyQTVBRDUxNkE0ODYxNDAwOTc1QTI1
IC8qIFNwZWVjaFN5bnRoZXNpcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBQTJBNUFCRDE2QTQ4NUQ1MDA5NzVBMjUgLyogU3BlZWNoU3ludGhlc2lz
LmNwcCAqLzsgfTsKIAkJQUEyQTVBRDYxNkE0ODYxNjAwOTc1QTI1IC8qIERPTVdpbmRvd1NwZWVj
aFN5bnRoZXNpcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQUEyQTVBQjkxNkE0ODVENTAwOTc1QTI1IC8qIERPTVdpbmRvd1NwZWVjaFN5bnRoZXNpcy5o
ICovOyB9OwogCQlBQTJBNUFENzE2QTQ4NjFBMDA5NzVBMjUgLyogRE9NV2luZG93U3BlZWNoU3lu
dGhlc2lzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEFBMkE1QUI4MTZBNDg1RDUwMDk3NUEyNSAvKiBET01XaW5kb3dTcGVlY2hTeW50aGVzaXMuY3Bw
ICovOyB9OwotCQlBQTJBNUFEODE2QTQ4NjFEMDA5NzVBMjUgLyogU3BlZWNoU3ludGhlc2lzTWFj
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUEyQTVB
QkMxNkE0ODVENTAwOTc1QTI1IC8qIFNwZWVjaFN5bnRoZXNpc01hYy5tbSAqLzsgfTsKIAkJQUE0
QzNBNzYwQjJCMTY3OTAwMjMzNEEyIC8qIFN0eWxlRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQTRDM0E3NDBCMkIxNjc5MDAyMzM0QTIg
LyogU3R5bGVFbGVtZW50LmNwcCAqLzsgfTsKIAkJQUE0QzNBNzcwQjJCMTY3OTAwMjMzNEEyIC8q
IFN0eWxlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQUE0QzNBNzUwQjJCMTY3OTAwMjMzNEEyIC8qIFN0eWxlRWxlbWVudC5oICovOyB9Owog
CQlBQTczMTgzRTE1OTI1NUI5MDBBOTNFNkUgLyogSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUE3MzE4
M0MxNTkyNTVCOTAwQTkzRTZFIC8qIEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlLmNwcCAqLzsg
fTsKQEAgLTgwNTQsNiArODA1NCw4IEBACiAJCTI5QUNCMjEzMTQzRTc0OTgwMDZCQ0E1RiAvKiBB
Y2Nlc3NpYmlsaXR5TW9ja09iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBBY2Nlc3NpYmlsaXR5TW9ja09iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTI5RDdCQ0Y1MTQ0NEFGNTgwMDcwNjE5QyAvKiBBY2Nlc3NpYmlsaXR5U3BpbkJ1
dHRvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBY2Nlc3NpYmls
aXR5U3BpbkJ1dHRvbi5jcHA7IHBhdGggPSBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTcGlu
QnV0dG9uLmNwcDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OwogCQkyOUQ3QkNGOTE0NDRB
RjdEMDA3MDYxOUMgLyogQWNjZXNzaWJpbGl0eVNwaW5CdXR0b24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQWNjZXNzaWJpbGl0eVNwaW5CdXR0b24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMjlFNEQ4REYxNkIwOTQwRjAwQzg0NzA0IC8qIFBsYXRmb3JtU3Bl
ZWNoU3ludGhlc2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtU3BlZWNoU3ludGhlc2lzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI5RTREOEUwMTZCMDk1OTgwMEM4NDcwNCAv
KiBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc01hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IFBsYXRmb3JtU3BlZWNoU3ludGhlc2lzTWFjLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkyQjQyMzU5RjE1MjUwRjYwMDBEQkJDRDggLyogUmVuZGVyU1ZH
RWxsaXBzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJT
VkdFbGxpcHNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkI0MjM1QTAxNTI1
MEY2MDAwREJCQ0Q4IC8qIFJlbmRlclNWR0VsbGlwc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVuZGVyU1ZHRWxsaXBzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkyQkU4RTJDNjEyQTU4OUVDMDBGQUQ1NTAgLyogSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEhUTUxNZXRhQ2hhcnNldFBhcnNlci5o
OyBwYXRoID0gcGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMTE5MzQsNyArMTE5MzYsNiBAQAogCQlBQTJBNUFCODE2QTQ4NUQ1MDA5
NzVBMjUgLyogRE9NV2luZG93U3BlZWNoU3ludGhlc2lzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IERPTVdpbmRvd1NwZWVjaFN5bnRoZXNpcy5jcHA7IHBhdGggPSBNb2R1bGVzL3NwZWVjaC9ET01X
aW5kb3dTcGVlY2hTeW50aGVzaXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
QTJBNUFCOTE2QTQ4NUQ1MDA5NzVBMjUgLyogRE9NV2luZG93U3BlZWNoU3ludGhlc2lzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERPTVdpbmRvd1NwZWVjaFN5bnRoZXNpcy5oOyBwYXRoID0gTW9kdWxlcy9z
cGVlY2gvRE9NV2luZG93U3BlZWNoU3ludGhlc2lzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUFBMkE1QUJBMTZBNDg1RDUwMDk3NUEyNSAvKiBET01XaW5kb3dTcGVlY2hTeW50aGVz
aXMuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgbmFtZSA9IERPTVdpbmRvd1NwZWVjaFN5bnRoZXNpcy5pZGw7IHBhdGggPSBNb2R1bGVz
L3NwZWVjaC9ET01XaW5kb3dTcGVlY2hTeW50aGVzaXMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlBQTJBNUFCQzE2QTQ4NUQ1MDA5NzVBMjUgLyogU3BlZWNoU3ludGhlc2lzTWFj
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTcGVlY2hTeW50aGVzaXNNYWMubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFBMkE1QUJEMTZBNDg1RDUwMDk3NUEyNSAvKiBTcGVlY2hT
eW50aGVzaXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU3BlZWNoU3ludGhlc2lzLmNwcDsgcGF0
aCA9IE1vZHVsZXMvc3BlZWNoL1NwZWVjaFN5bnRoZXNpcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUFBMkE1QUJFMTZBNDg1RDUwMDk3NUEyNSAvKiBTcGVlY2hTeW50aGVzaXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gU3BlZWNoU3ludGhlc2lzLmg7IHBhdGggPSBNb2R1bGVzL3NwZWVj
aC9TcGVlY2hTeW50aGVzaXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUEyQTVB
QkYxNkE0ODVENTAwOTc1QTI1IC8qIFNwZWVjaFN5bnRoZXNpcy5pZGwgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gU3BlZWNoU3lu
dGhlc2lzLmlkbDsgcGF0aCA9IE1vZHVsZXMvc3BlZWNoL1NwZWVjaFN5bnRoZXNpcy5pZGw7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjA4MCw2ICsxNjA4MSw3IEBACiAJCQkJQkNB
QTQ4NkQxNEEwNTI1MzAwODhGQUM0IC8qIFBsYXRmb3JtRXZlbnRGYWN0b3J5TWFjLm1tICovLAog
CQkJCUM1Rjc2NUJBMTRFMUVDRjQwMDZDODk5QiAvKiBQbGF0Zm9ybVBhc3RlYm9hcmRNYWMubW0g
Ki8sCiAJCQkJQkM5NEQxMDcwQzI3NEY4ODAwNkJDNjE3IC8qIFBsYXRmb3JtU2NyZWVuTWFjLm1t
ICovLAorCQkJCTI5RTREOEUwMTZCMDk1OTgwMEM4NDcwNCAvKiBQbGF0Zm9ybVNwZWVjaFN5bnRo
ZXNpc01hYy5tbSAqLywKIAkJCQlEMzlEMDA2QzExRjhFMzA4MDA2MDQxRjIgLyogUG9wdXBNZW51
TWFjLmggKi8sCiAJCQkJMDY2OEUxOEUwQUREOTY0MDAwNDEyOEUwIC8qIFBvcHVwTWVudU1hYy5t
bSAqLywKIAkJCQlFNEQ2ODc3NjBFRDdBRTNEMDA2RUE5NzggLyogUHVyZ2VhYmxlQnVmZmVyTWFj
LmNwcCAqLywKQEAgLTE5NjU5LDcgKzE5NjYxLDYgQEAKIAkJQUEyQTVBQjcxNkE0ODVBNDAwOTc1
QTI1IC8qIHNwZWVjaCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
Ci0JCQkJQUEyQTVBQkIxNkE0ODVENTAwOTc1QTI1IC8qIG1hYyAqLywKIAkJCQlBQTJBNUFCODE2
QTQ4NUQ1MDA5NzVBMjUgLyogRE9NV2luZG93U3BlZWNoU3ludGhlc2lzLmNwcCAqLywKIAkJCQlB
QTJBNUFCOTE2QTQ4NUQ1MDA5NzVBMjUgLyogRE9NV2luZG93U3BlZWNoU3ludGhlc2lzLmggKi8s
CiAJCQkJQUEyQTVBQkExNkE0ODVENTAwOTc1QTI1IC8qIERPTVdpbmRvd1NwZWVjaFN5bnRoZXNp
cy5pZGwgKi8sCkBAIC0xOTY3OSwxNSArMTk2ODAsNiBAQAogCQkJbmFtZSA9IHNwZWVjaDsKIAkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07Ci0JCUFBMkE1QUJCMTZBNDg1RDUwMDk3NUEy
NSAvKiBtYWMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJ
CUFBMkE1QUJDMTZBNDg1RDUwMDk3NUEyNSAvKiBTcGVlY2hTeW50aGVzaXNNYWMubW0gKi8sCi0J
CQkpOwotCQkJbmFtZSA9IG1hYzsKLQkJCXBhdGggPSBNb2R1bGVzL3NwZWVjaC9tYWM7Ci0JCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwogCQlBQTdGRUU5QjE2QTQ5MUExMDA0QzBDMzMg
LyogU3BlZWNoICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAg
LTIxMzg2LDYgKzIxMzc4LDcgQEAKIAkJCQk5MzVDNDc2NzA5QUM0RDQzMDBBNkFBQjQgLyogUGxh
dGZvcm1Nb3VzZUV2ZW50LmggKi8sCiAJCQkJQzVCQUMxNkYxNEUzMEU0NzAwMDA4ODM3IC8qIFBs
YXRmb3JtUGFzdGVib2FyZC5oICovLAogCQkJCUJDRUMwMUQ2MEMyNzRFQjQwMDlGNEVDOSAvKiBQ
bGF0Zm9ybVNjcmVlbi5oICovLAorCQkJCTI5RTREOERGMTZCMDk0MEYwMEM4NDcwNCAvKiBQbGF0
Zm9ybVNwZWVjaFN5bnRoZXNpcy5oICovLAogCQkJCTFBRDhGODFBMTFDQUI5RTkwMEU5M0U1NCAv
KiBQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwICovLAogCQkJCTFBRDhGODE5MTFDQUI5RTkwMEU5M0U1
NCAvKiBQbGF0Zm9ybVN0cmF0ZWdpZXMuaCAqLywKIAkJCQk5MzVDNDc2QTA5QUM0RDRGMDBBNkFB
QjQgLyogUGxhdGZvcm1XaGVlbEV2ZW50LmggKi8sCkBAIC0yODkxNSw3ICsyODkwOCw2IEBACiAJ
CQkJNzU0MTVDMjkxMjlBOTkyMDAwM0FENjY5IC8qIFNwZWVjaElucHV0UmVzdWx0TGlzdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBQTJBNUFENTE2QTQ4NjE0MDA5NzVBMjUgLyogU3BlZWNoU3lu
dGhlc2lzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUFBMkE1QUQzMTZBNDg2MEQwMDk3NUEyNSAv
KiBTcGVlY2hTeW50aGVzaXNFdmVudC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlBQTJBNUFEODE2
QTQ4NjFEMDA5NzVBMjUgLyogU3BlZWNoU3ludGhlc2lzTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQUEyQTVBRDExNkE0ODYwNzAwOTc1QTI1IC8qIFNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBQTJBNUFDRDE2QTQ4NUZBMDA5NzVBMjUgLyogU3BlZWNo
U3ludGhlc2lzVm9pY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc4RkUxM0IxMjM2NkIxMDAw
QUNFOEQwIC8qIFNwZWxsQ2hlY2tlci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI5NDE3LDYgKzI5
NDA5LDcgQEAKIAkJCQlFMUJFNTEyRDBDRjZDNTEyMDAyRUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3N0UyRTBFMTJGMEZDOUMwMEMxMzM3OSAvKiBYU1NB
dWRpdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZENTM3MzUyMTM3QjY1MTgwMDAwOERDRSAv
KiBaZXJvUG9sZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyOUU0RDhFMjE2QjA5NTk4MDBDODQ3
MDQgLyogUGxhdGZvcm1TcGVlY2hTeW50aGVzaXNNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCSk7
CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL21hYy9TcGVlY2hTeW50aGVzaXNNYWMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvbWFjL1NwZWVjaFN5
bnRoZXNpc01hYy5tbQkocmV2aXNpb24gMTQwNTk3KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9zcGVlY2gvbWFjL1NwZWVjaFN5bnRoZXNpc01hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw5
MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU3BlZWNo
U3ludGhlc2lzLmgiCi0KLSNpZiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKLQotI2luY2x1ZGUg
IlNwZWVjaFN5bnRoZXNpc1ZvaWNlLmgiCi0jaW5jbHVkZSAiU3BlZWNoU3ludGhlc2lzVXR0ZXJh
bmNlLmgiCi0jaW5jbHVkZSA8QXBwS2l0L05TU3BlZWNoU3ludGhlc2l6ZXIuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotICAgIAotdm9pZCBTcGVlY2hTeW50aGVzaXM6OmluaXRpYWxpemVWb2lj
ZUxpc3QoKQotewotICAgIE5TU3RyaW5nICpkZWZhdWx0Vm9pY2VVUkkgPSBbTlNTcGVlY2hTeW50
aGVzaXplciBkZWZhdWx0Vm9pY2VdOwotICAgIE5TQXJyYXkgKmF2YWlsYWJsZVZvaWNlcyA9IFtO
U1NwZWVjaFN5bnRoZXNpemVyIGF2YWlsYWJsZVZvaWNlc107Ci0gICAgTlNVSW50ZWdlciBjb3Vu
dCA9IFthdmFpbGFibGVWb2ljZXMgY291bnRdOwotICAgIGZvciAoTlNVSW50ZWdlciBrID0gMDsg
ayA8IGNvdW50OyBrKyspIHsKLSAgICAgICAgTlNTdHJpbmcgKnZvaWNlTmFtZSA9IFthdmFpbGFi
bGVWb2ljZXMgb2JqZWN0QXRJbmRleDprXTsKLSAgICAgICAgTlNEaWN0aW9uYXJ5ICphdHRyaWJ1
dGVzID0gW05TU3BlZWNoU3ludGhlc2l6ZXIgYXR0cmlidXRlc0ZvclZvaWNlOnZvaWNlTmFtZV07
Ci0gICAgICAgIAotICAgICAgICBOU1N0cmluZyAqdm9pY2VVUkkgPSBbYXR0cmlidXRlcyBvYmpl
Y3RGb3JLZXk6TlNWb2ljZUlkZW50aWZpZXJdOwotICAgICAgICBOU1N0cmluZyAqbmFtZSA9IFth
dHRyaWJ1dGVzIG9iamVjdEZvcktleTpOU1ZvaWNlTmFtZV07Ci0gICAgICAgIE5TU3RyaW5nICps
YW5ndWFnZSA9IFthdHRyaWJ1dGVzIG9iamVjdEZvcktleTpOU1ZvaWNlTG9jYWxlSWRlbnRpZmll
cl07Ci0KLSAgICAgICAgLy8gQ2hhbmdlIHRvIEJDUC00NyBmb3JtYXQgYXMgZGVmaW5lZCBieSBz
cGVjLgotICAgICAgICBsYW5ndWFnZSA9IFtsYW5ndWFnZSBzdHJpbmdCeVJlcGxhY2luZ09jY3Vy
cmVuY2VzT2ZTdHJpbmc6QCJfIiB3aXRoU3RyaW5nOkAiLSJdOwotICAgICAgICAKLSAgICAgICAg
Ym9vbCBpc0RlZmF1bHQgPSBbZGVmYXVsdFZvaWNlVVJJIGlzRXF1YWxUb1N0cmluZzp2b2ljZVVS
SV07Ci0gICAgICAgIAotICAgICAgICBtX3ZvaWNlTGlzdC5hcHBlbmQoU3BlZWNoU3ludGhlc2lz
Vm9pY2U6OmNyZWF0ZSh2b2ljZVVSSSwgbmFtZSwgbGFuZ3VhZ2UsIHRydWUsIGlzRGVmYXVsdCkp
OwotICAgIH0KLX0KLQotYm9vbCBTcGVlY2hTeW50aGVzaXM6OnBlbmRpbmcoKSBjb25zdAotewot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBTcGVlY2hTeW50aGVzaXM6OnNwZWFraW5nKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgU3BlZWNoU3ludGhlc2lzOjpw
YXVzZWQoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBTcGVlY2hTeW50
aGVzaXM6OnNwZWFrKFNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSopCi17Ci19Ci0KLXZvaWQgU3Bl
ZWNoU3ludGhlc2lzOjpjYW5jZWwoKQotewotfQotCi12b2lkIFNwZWVjaFN5bnRoZXNpczo6cGF1
c2UoKQotewotfQotCi12b2lkIFNwZWVjaFN5bnRoZXNpczo6cmVzdW1lKCkKLXsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50aGVzaXMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFN5bnRo
ZXNpcy5jcHAJKHJldmlzaW9uIDE0MDU5NykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3Bl
ZWNoL1NwZWVjaFN5bnRoZXNpcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDggQEAK
IAogI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQogCisjaW5jbHVkZSAiUGxhdGZvcm1TcGVl
Y2hTeW50aGVzaXMuaCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAogUGFzc1JlZlB0cjxT
cGVlY2hTeW50aGVzaXM+IFNwZWVjaFN5bnRoZXNpczo6Y3JlYXRlKCkKQEAgLTM3LDkgKzM5LDQy
IEBACiAgICAgCiBTcGVlY2hTeW50aGVzaXM6OlNwZWVjaFN5bnRoZXNpcygpCiB7Ci0gICAgaW5p
dGlhbGl6ZVZvaWNlTGlzdCgpOworICAgIG1fcGxhdGZvcm1TcGVlY2hTeW50aGVzaXMgPSBhZG9w
dFJlZihuZXcgUGxhdGZvcm1TcGVlY2hTeW50aGVzaXModGhpcykpOworICAgIG1fcGxhdGZvcm1T
cGVlY2hTeW50aGVzaXMtPmluaXRpYWxpemVWb2ljZUxpc3QobV92b2ljZUxpc3QpOwogfQogCiti
b29sIFNwZWVjaFN5bnRoZXNpczo6cGVuZGluZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCitib29sIFNwZWVjaFN5bnRoZXNpczo6c3BlYWtpbmcoKSBjb25zdAoreworICAgIHJl
dHVybiBmYWxzZTsKK30KKworYm9vbCBTcGVlY2hTeW50aGVzaXM6OnBhdXNlZCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFNwZWVjaFN5bnRoZXNpczo6c3BlYWsoU3Bl
ZWNoU3ludGhlc2lzVXR0ZXJhbmNlKiB1dHRlcmFuY2UpCit7CisgICAgbV9wbGF0Zm9ybVNwZWVj
aFN5bnRoZXNpcy0+c3BlYWsodXR0ZXJhbmNlKTsKK30KKwordm9pZCBTcGVlY2hTeW50aGVzaXM6
OmNhbmNlbCgpCit7Cit9CisKK3ZvaWQgU3BlZWNoU3ludGhlc2lzOjpwYXVzZSgpCit7Cit9CisK
K3ZvaWQgU3BlZWNoU3ludGhlc2lzOjpyZXN1bWUoKQoreworfQorICAgIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOUFVUX1NQRUVDSCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFN5bnRoZXNpcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFN5bnRoZXNpcy5oCShyZXZpc2lv
biAxNDA1OTcpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50aGVz
aXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTIgKzMwLDE0IEBACiAKICNpbmNsdWRlICJTcGVl
Y2hTeW50aGVzaXNWb2ljZS5oIgogCisjaW5jbHVkZSAiUGxhdGZvcm1TcGVlY2hTeW50aGVzaXMu
aCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
CitjbGFzcyBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpczsKIGNsYXNzIFNwZWVjaFN5bnRoZXNpc1V0
dGVyYW5jZTsKIGNsYXNzIFNwZWVjaFN5bnRoZXNpc1ZvaWNlOwogICAgIApAQCAtNTcsNyArNTks
NyBAQAogcHJpdmF0ZToKICAgICBTcGVlY2hTeW50aGVzaXMoKTsKICAgICAKLSAgICB2b2lkIGlu
aXRpYWxpemVWb2ljZUxpc3QoKTsKKyAgICBSZWZQdHI8UGxhdGZvcm1TcGVlY2hTeW50aGVzaXM+
IG1fcGxhdGZvcm1TcGVlY2hTeW50aGVzaXM7CiAgICAgVmVjdG9yPFJlZlB0cjxTcGVlY2hTeW50
aGVzaXNWb2ljZT4gPiBtX3ZvaWNlTGlzdDsKIH07CiAgICAgCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184981</attachid>
            <date>2013-01-28 07:32:56 -0800</date>
            <delta_ts>2013-02-04 12:12:52 -0800</delta_ts>
            <desc>refactor idea</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>18691</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVNwZWVjaFN5
bnRoZXNpemVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0
Zm9ybVNwZWVjaFN5bnRoZXNpemVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyX2gKKyNk
ZWZpbmUgUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplcl9oCisKKyNpZiBFTkFCTEUoU1BFRUNIX1NZ
TlRIRVNJUykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorY2xhc3MgU3BlZWNoU3ludGhl
c2lzOworY2xhc3MgU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlOworY2xhc3MgU3BlZWNoU3ludGhl
c2lzVm9pY2U7CisgICAKK2NsYXNzIFBsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXJDbGllbnQgewor
cHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBkaWRTdGFydFNwZWFraW5nKFNwZWVjaFN5bnRoZXNp
c1V0dGVyYW5jZSopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoU3BlYWtpbmcoU3Bl
ZWNoU3ludGhlc2lzVXR0ZXJhbmNlKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzcGVha2luZ0Vy
cm9yT2NjdXJyZWQoU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlKikgPSAwOworICAgIAorICAgIHZp
cnR1YWwgdm9pZCB2b2ljZXNEaWRDaGFuZ2UoKSA9IDA7Cit9OworICAgIAorY2xhc3MgUGxhdGZv
cm1TcGVlY2hTeW50aGVzaXplciB7CitwdWJsaWM6CisgICAgUGxhdGZvcm1TcGVlY2hTeW50aGVz
aXplcihQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyQ2xpZW50Kik7CisgICAgCisgICAgdm9pZCBn
ZXRWb2ljZUxpc3QoVmVjdG9yPFJlZlB0cjxTcGVlY2hTeW50aGVzaXNWb2ljZT4gPiYpOworICAg
IHZvaWQgc3BlYWsoU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlKik7CisgICAgCitwcml2YXRlOgor
CisgICAgUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplckNsaWVudCogbV9zcGVlY2hTeW50aGVzaXpl
ckNsaWVudDsKK307CisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKKworI2VuZGlmIC8vIFBsYXRmb3JtU3BlZWNoU3ludGhl
c2l6ZXJfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtU3BlZWNo
U3ludGhlc2l6ZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL1BsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXJNYWMubW0JKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplck1hYy5tbQko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplci5oIgorCisj
aW5jbHVkZSAiU3BlZWNoU3ludGhlc2lzVm9pY2UuaCIKKyNpbmNsdWRlICJTcGVlY2hTeW50aGVz
aXNVdHRlcmFuY2UuaCIKKyNpbmNsdWRlIDxBcHBLaXQvTlNTcGVlY2hTeW50aGVzaXplci5oPgor
CisjaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
UGxhdGZvcm1TcGVlY2hTeW50aGVzaXplcihQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyQ2xpZW50
KiBjbGllbnQpOworICAgIDogbV9zcGVlY2hTeW50aGVzaXplckNsaWVudChjbGllbnQpCit7Cit9
CisgICAgCit2b2lkIFBsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXI6OnNwZWFrKFNwZWVjaFN5bnRo
ZXNpc1V0dGVyYW5jZSopCit7Cit9CisgICAgCit2b2lkIFBsYXRmb3JtU3BlZWNoU3ludGhlc2l6
ZXI6OmdldFZvaWNlTGlzdChWZWN0b3I8UmVmUHRyPFNwZWVjaFN5bnRoZXNpc1ZvaWNlPiA+JiB2
b2ljZXMpOworeworICAgIE5TU3RyaW5nICpkZWZhdWx0Vm9pY2VVUkkgPSBbTlNTcGVlY2hTeW50
aGVzaXplciBkZWZhdWx0Vm9pY2VdOworICAgIE5TQXJyYXkgKmF2YWlsYWJsZVZvaWNlcyA9IFtO
U1NwZWVjaFN5bnRoZXNpemVyIGF2YWlsYWJsZVZvaWNlc107CisgICAgTlNVSW50ZWdlciBjb3Vu
dCA9IFthdmFpbGFibGVWb2ljZXMgY291bnRdOworICAgIGZvciAoTlNVSW50ZWdlciBrID0gMDsg
ayA8IGNvdW50OyBrKyspIHsKKyAgICAgICAgTlNTdHJpbmcgKnZvaWNlTmFtZSA9IFthdmFpbGFi
bGVWb2ljZXMgb2JqZWN0QXRJbmRleDprXTsKKyAgICAgICAgTlNEaWN0aW9uYXJ5ICphdHRyaWJ1
dGVzID0gW05TU3BlZWNoU3ludGhlc2l6ZXIgYXR0cmlidXRlc0ZvclZvaWNlOnZvaWNlTmFtZV07
CisgICAgICAgIAorICAgICAgICBOU1N0cmluZyAqdm9pY2VVUkkgPSBbYXR0cmlidXRlcyBvYmpl
Y3RGb3JLZXk6TlNWb2ljZUlkZW50aWZpZXJdOworICAgICAgICBOU1N0cmluZyAqbmFtZSA9IFth
dHRyaWJ1dGVzIG9iamVjdEZvcktleTpOU1ZvaWNlTmFtZV07CisgICAgICAgIE5TU3RyaW5nICps
YW5ndWFnZSA9IFthdHRyaWJ1dGVzIG9iamVjdEZvcktleTpOU1ZvaWNlTG9jYWxlSWRlbnRpZmll
cl07CisgICAgICAgIAorICAgICAgICAvLyBDaGFuZ2UgdG8gQkNQLTQ3IGZvcm1hdCBhcyBkZWZp
bmVkIGJ5IHNwZWMuCisgICAgICAgIGxhbmd1YWdlID0gW2xhbmd1YWdlIHN0cmluZ0J5UmVwbGFj
aW5nT2NjdXJyZW5jZXNPZlN0cmluZzpAIl8iIHdpdGhTdHJpbmc6QCItIl07CisgICAgICAgIAor
ICAgICAgICBib29sIGlzRGVmYXVsdCA9IFtkZWZhdWx0Vm9pY2VVUkkgaXNFcXVhbFRvU3RyaW5n
OnZvaWNlVVJJXTsKKyAgICAgICAgCisgICAgICAgIHZvaWNlcy5hcHBlbmQoU3BlZWNoU3ludGhl
c2lzVm9pY2U6OmNyZWF0ZSh2b2ljZVVSSSwgbmFtZSwgbGFuZ3VhZ2UsIHRydWUsIGlzRGVmYXVs
dCkpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKFNQRUVDSF9TWU5USEVTSVMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNDA5NDgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTQ2MzIsNyArNDYzMiw2IEBACiAJCUFBMkE1QUQ1MTZBNDg2MTQwMDk3NUEyNSAvKiBTcGVl
Y2hTeW50aGVzaXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQUEyQTVBQkQxNkE0ODVENTAwOTc1QTI1IC8qIFNwZWVjaFN5bnRoZXNpcy5jcHAgKi87
IH07CiAJCUFBMkE1QUQ2MTZBNDg2MTYwMDk3NUEyNSAvKiBET01XaW5kb3dTcGVlY2hTeW50aGVz
aXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFBMkE1
QUI5MTZBNDg1RDUwMDk3NUEyNSAvKiBET01XaW5kb3dTcGVlY2hTeW50aGVzaXMuaCAqLzsgfTsK
IAkJQUEyQTVBRDcxNkE0ODYxQTAwOTc1QTI1IC8qIERPTVdpbmRvd1NwZWVjaFN5bnRoZXNpcy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQTJBNUFC
ODE2QTQ4NUQ1MDA5NzVBMjUgLyogRE9NV2luZG93U3BlZWNoU3ludGhlc2lzLmNwcCAqLzsgfTsK
LQkJQUEyQTVBRDgxNkE0ODYxRDAwOTc1QTI1IC8qIFNwZWVjaFN5bnRoZXNpc01hYy5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFBMkE1QUJDMTZBNDg1
RDUwMDk3NUEyNSAvKiBTcGVlY2hTeW50aGVzaXNNYWMubW0gKi87IH07CiAJCUFBNEMzQTc2MEIy
QjE2NzkwMDIzMzRBMiAvKiBTdHlsZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUE0QzNBNzQwQjJCMTY3OTAwMjMzNEEyIC8qIFN0eWxl
RWxlbWVudC5jcHAgKi87IH07CiAJCUFBNEMzQTc3MEIyQjE2NzkwMDIzMzRBMiAvKiBTdHlsZUVs
ZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFB
NEMzQTc1MEIyQjE2NzkwMDIzMzRBMiAvKiBTdHlsZUVsZW1lbnQuaCAqLzsgfTsKIAkJQUE3MzE4
M0UxNTkyNTVCOTAwQTkzRTZFIC8qIEluamVjdGVkU2NyaXB0Q2FudmFzTW9kdWxlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFBNzMxODNDMTU5MjU1
QjkwMEE5M0U2RSAvKiBJbmplY3RlZFNjcmlwdENhbnZhc01vZHVsZS5jcHAgKi87IH07CkBAIC04
MDY1LDYgKzgwNjQsOCBAQAogCQkyOUFDQjIxMzE0M0U3NDk4MDA2QkNBNUYgLyogQWNjZXNzaWJp
bGl0eU1vY2tPYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
QWNjZXNzaWJpbGl0eU1vY2tPYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkyOUQ3QkNGNTE0NDRBRjU4MDA3MDYxOUMgLyogQWNjZXNzaWJpbGl0eVNwaW5CdXR0b24uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWNjZXNzaWJpbGl0eVNwaW5C
dXR0b24uY3BwOyBwYXRoID0gYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U3BpbkJ1dHRvbi5j
cHA7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKIAkJMjlEN0JDRjkxNDQ0QUY3RDAwNzA2
MTlDIC8qIEFjY2Vzc2liaWxpdHlTcGluQnV0dG9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEFjY2Vzc2liaWxpdHlTcGluQnV0dG9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTI5RTREOERGMTZCMDk0MEYwMEM4NDcwNCAvKiBQbGF0Zm9ybVNwZWVjaFN5bnRo
ZXNpemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjlFNEQ4RTAxNkIwOTU5ODAwQzg0NzA0IC8qIFBs
YXRmb3JtU3BlZWNoU3ludGhlc2l6ZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyTWFjLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkyQjQyMzU5RjE1MjUwRjYwMDBEQkJDRDggLyogUmVuZGVyU1ZH
RWxsaXBzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJT
VkdFbGxpcHNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkI0MjM1QTAxNTI1
MEY2MDAwREJCQ0Q4IC8qIFJlbmRlclNWR0VsbGlwc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVuZGVyU1ZHRWxsaXBzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkyQkU4RTJDNjEyQTU4OUVDMDBGQUQ1NTAgLyogSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEhUTUxNZXRhQ2hhcnNldFBhcnNlci5o
OyBwYXRoID0gcGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMTE5NDgsNyArMTE5NDksNiBAQAogCQlBQTJBNUFCODE2QTQ4NUQ1MDA5
NzVBMjUgLyogRE9NV2luZG93U3BlZWNoU3ludGhlc2lzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IERPTVdpbmRvd1NwZWVjaFN5bnRoZXNpcy5jcHA7IHBhdGggPSBNb2R1bGVzL3NwZWVjaC9ET01X
aW5kb3dTcGVlY2hTeW50aGVzaXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlB
QTJBNUFCOTE2QTQ4NUQ1MDA5NzVBMjUgLyogRE9NV2luZG93U3BlZWNoU3ludGhlc2lzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERPTVdpbmRvd1NwZWVjaFN5bnRoZXNpcy5oOyBwYXRoID0gTW9kdWxlcy9z
cGVlY2gvRE9NV2luZG93U3BlZWNoU3ludGhlc2lzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUFBMkE1QUJBMTZBNDg1RDUwMDk3NUEyNSAvKiBET01XaW5kb3dTcGVlY2hTeW50aGVz
aXMuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgbmFtZSA9IERPTVdpbmRvd1NwZWVjaFN5bnRoZXNpcy5pZGw7IHBhdGggPSBNb2R1bGVz
L3NwZWVjaC9ET01XaW5kb3dTcGVlY2hTeW50aGVzaXMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlBQTJBNUFCQzE2QTQ4NUQ1MDA5NzVBMjUgLyogU3BlZWNoU3ludGhlc2lzTWFj
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTcGVlY2hTeW50aGVzaXNNYWMubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFBMkE1QUJEMTZBNDg1RDUwMDk3NUEyNSAvKiBTcGVlY2hT
eW50aGVzaXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU3BlZWNoU3ludGhlc2lzLmNwcDsgcGF0
aCA9IE1vZHVsZXMvc3BlZWNoL1NwZWVjaFN5bnRoZXNpcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUFBMkE1QUJFMTZBNDg1RDUwMDk3NUEyNSAvKiBTcGVlY2hTeW50aGVzaXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gU3BlZWNoU3ludGhlc2lzLmg7IHBhdGggPSBNb2R1bGVzL3NwZWVj
aC9TcGVlY2hTeW50aGVzaXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUEyQTVB
QkYxNkE0ODVENTAwOTc1QTI1IC8qIFNwZWVjaFN5bnRoZXNpcy5pZGwgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gU3BlZWNoU3lu
dGhlc2lzLmlkbDsgcGF0aCA9IE1vZHVsZXMvc3BlZWNoL1NwZWVjaFN5bnRoZXNpcy5pZGw7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjEwNSw2ICsxNjEwNSw3IEBACiAJCQkJQkNB
QTQ4NkQxNEEwNTI1MzAwODhGQUM0IC8qIFBsYXRmb3JtRXZlbnRGYWN0b3J5TWFjLm1tICovLAog
CQkJCUM1Rjc2NUJBMTRFMUVDRjQwMDZDODk5QiAvKiBQbGF0Zm9ybVBhc3RlYm9hcmRNYWMubW0g
Ki8sCiAJCQkJQkM5NEQxMDcwQzI3NEY4ODAwNkJDNjE3IC8qIFBsYXRmb3JtU2NyZWVuTWFjLm1t
ICovLAorCQkJCTI5RTREOEUwMTZCMDk1OTgwMEM4NDcwNCAvKiBQbGF0Zm9ybVNwZWVjaFN5bnRo
ZXNpemVyTWFjLm1tICovLAogCQkJCUQzOUQwMDZDMTFGOEUzMDgwMDYwNDFGMiAvKiBQb3B1cE1l
bnVNYWMuaCAqLywKIAkJCQkwNjY4RTE4RTBBREQ5NjQwMDA0MTI4RTAgLyogUG9wdXBNZW51TWFj
Lm1tICovLAogCQkJCUU0RDY4Nzc2MEVEN0FFM0QwMDZFQTk3OCAvKiBQdXJnZWFibGVCdWZmZXJN
YWMuY3BwICovLApAQCAtMTk2ODgsNyArMTk2ODksNiBAQAogCQlBQTJBNUFCNzE2QTQ4NUE0MDA5
NzVBMjUgLyogc3BlZWNoICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9
ICgKLQkJCQlBQTJBNUFCQjE2QTQ4NUQ1MDA5NzVBMjUgLyogbWFjICovLAogCQkJCUFBMkE1QUI4
MTZBNDg1RDUwMDk3NUEyNSAvKiBET01XaW5kb3dTcGVlY2hTeW50aGVzaXMuY3BwICovLAogCQkJ
CUFBMkE1QUI5MTZBNDg1RDUwMDk3NUEyNSAvKiBET01XaW5kb3dTcGVlY2hTeW50aGVzaXMuaCAq
LywKIAkJCQlBQTJBNUFCQTE2QTQ4NUQ1MDA5NzVBMjUgLyogRE9NV2luZG93U3BlZWNoU3ludGhl
c2lzLmlkbCAqLywKQEAgLTE5NzA4LDE1ICsxOTcwOCw2IEBACiAJCQluYW1lID0gc3BlZWNoOwog
CQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKLQkJQUEyQTVBQkIxNkE0ODVENTAwOTc1
QTI1IC8qIG1hYyAqLyA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0J
CQkJQUEyQTVBQkMxNkE0ODVENTAwOTc1QTI1IC8qIFNwZWVjaFN5bnRoZXNpc01hYy5tbSAqLywK
LQkJCSk7Ci0JCQluYW1lID0gbWFjOwotCQkJcGF0aCA9IE1vZHVsZXMvc3BlZWNoL21hYzsKLQkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07CiAJCUFBN0ZFRTlCMTZBNDkxQTEwMDRDMEMz
MyAvKiBTcGVlY2ggKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApA
QCAtMjE0MTYsNiArMjE0MDcsNyBAQAogCQkJCTkzNUM0NzY3MDlBQzRENDMwMEE2QUFCNCAvKiBQ
bGF0Zm9ybU1vdXNlRXZlbnQuaCAqLywKIAkJCQlDNUJBQzE2RjE0RTMwRTQ3MDAwMDg4MzcgLyog
UGxhdGZvcm1QYXN0ZWJvYXJkLmggKi8sCiAJCQkJQkNFQzAxRDYwQzI3NEVCNDAwOUY0RUM5IC8q
IFBsYXRmb3JtU2NyZWVuLmggKi8sCisJCQkJMjlFNEQ4REYxNkIwOTQwRjAwQzg0NzA0IC8qIFBs
YXRmb3JtU3BlZWNoU3ludGhlc2l6ZXIuaCAqLywKIAkJCQkxQUQ4RjgxQTExQ0FCOUU5MDBFOTNF
NTQgLyogUGxhdGZvcm1TdHJhdGVnaWVzLmNwcCAqLywKIAkJCQkxQUQ4RjgxOTExQ0FCOUU5MDBF
OTNFNTQgLyogUGxhdGZvcm1TdHJhdGVnaWVzLmggKi8sCiAJCQkJOTM1QzQ3NkEwOUFDNEQ0RjAw
QTZBQUI0IC8qIFBsYXRmb3JtV2hlZWxFdmVudC5oICovLApAQCAtMjg5NTEsNyArMjg5NDMsNiBA
QAogCQkJCTc1NDE1QzI5MTI5QTk5MjAwMDNBRDY2OSAvKiBTcGVlY2hJbnB1dFJlc3VsdExpc3Qu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQUEyQTVBRDUxNkE0ODYxNDAwOTc1QTI1IC8qIFNwZWVj
aFN5bnRoZXNpcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBQTJBNUFEMzE2QTQ4NjBEMDA5NzVB
MjUgLyogU3BlZWNoU3ludGhlc2lzRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQUEyQTVB
RDgxNkE0ODYxRDAwOTc1QTI1IC8qIFNwZWVjaFN5bnRoZXNpc01hYy5tbSBpbiBTb3VyY2VzICov
LAogCQkJCUFBMkE1QUQxMTZBNDg2MDcwMDk3NUEyNSAvKiBTcGVlY2hTeW50aGVzaXNVdHRlcmFu
Y2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQUEyQTVBQ0QxNkE0ODVGQTAwOTc1QTI1IC8qIFNw
ZWVjaFN5bnRoZXNpc1ZvaWNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3OEZFMTNCMTIzNjZC
MTAwMEFDRThEMCAvKiBTcGVsbENoZWNrZXIuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9tYWMvU3BlZWNoU3ludGhlc2lzTWFjLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL21hYy9TcGVlY2hTeW50aGVz
aXNNYWMubW0JKHJldmlzaW9uIDE0MDk0OCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3Bl
ZWNoL21hYy9TcGVlY2hTeW50aGVzaXNNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEsOTIgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNwZWVjaFN5bnRo
ZXNpcy5oIgotCi0jaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCi0KLSNpbmNsdWRlICJTcGVl
Y2hTeW50aGVzaXNWb2ljZS5oIgotI2luY2x1ZGUgIlNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZS5o
IgotI2luY2x1ZGUgPEFwcEtpdC9OU1NwZWVjaFN5bnRoZXNpemVyLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLSAgICAKLXZvaWQgU3BlZWNoU3ludGhlc2lzOjppbml0aWFsaXplVm9pY2VMaXN0
KCkKLXsKLSAgICBOU1N0cmluZyAqZGVmYXVsdFZvaWNlVVJJID0gW05TU3BlZWNoU3ludGhlc2l6
ZXIgZGVmYXVsdFZvaWNlXTsKLSAgICBOU0FycmF5ICphdmFpbGFibGVWb2ljZXMgPSBbTlNTcGVl
Y2hTeW50aGVzaXplciBhdmFpbGFibGVWb2ljZXNdOwotICAgIE5TVUludGVnZXIgY291bnQgPSBb
YXZhaWxhYmxlVm9pY2VzIGNvdW50XTsKLSAgICBmb3IgKE5TVUludGVnZXIgayA9IDA7IGsgPCBj
b3VudDsgaysrKSB7Ci0gICAgICAgIE5TU3RyaW5nICp2b2ljZU5hbWUgPSBbYXZhaWxhYmxlVm9p
Y2VzIG9iamVjdEF0SW5kZXg6a107Ci0gICAgICAgIE5TRGljdGlvbmFyeSAqYXR0cmlidXRlcyA9
IFtOU1NwZWVjaFN5bnRoZXNpemVyIGF0dHJpYnV0ZXNGb3JWb2ljZTp2b2ljZU5hbWVdOwotICAg
ICAgICAKLSAgICAgICAgTlNTdHJpbmcgKnZvaWNlVVJJID0gW2F0dHJpYnV0ZXMgb2JqZWN0Rm9y
S2V5Ok5TVm9pY2VJZGVudGlmaWVyXTsKLSAgICAgICAgTlNTdHJpbmcgKm5hbWUgPSBbYXR0cmli
dXRlcyBvYmplY3RGb3JLZXk6TlNWb2ljZU5hbWVdOwotICAgICAgICBOU1N0cmluZyAqbGFuZ3Vh
Z2UgPSBbYXR0cmlidXRlcyBvYmplY3RGb3JLZXk6TlNWb2ljZUxvY2FsZUlkZW50aWZpZXJdOwot
Ci0gICAgICAgIC8vIENoYW5nZSB0byBCQ1AtNDcgZm9ybWF0IGFzIGRlZmluZWQgYnkgc3BlYy4K
LSAgICAgICAgbGFuZ3VhZ2UgPSBbbGFuZ3VhZ2Ugc3RyaW5nQnlSZXBsYWNpbmdPY2N1cnJlbmNl
c09mU3RyaW5nOkAiXyIgd2l0aFN0cmluZzpAIi0iXTsKLSAgICAgICAgCi0gICAgICAgIGJvb2wg
aXNEZWZhdWx0ID0gW2RlZmF1bHRWb2ljZVVSSSBpc0VxdWFsVG9TdHJpbmc6dm9pY2VVUkldOwot
ICAgICAgICAKLSAgICAgICAgbV92b2ljZUxpc3QuYXBwZW5kKFNwZWVjaFN5bnRoZXNpc1ZvaWNl
OjpjcmVhdGUodm9pY2VVUkksIG5hbWUsIGxhbmd1YWdlLCB0cnVlLCBpc0RlZmF1bHQpKTsKLSAg
ICB9Ci19Ci0KLWJvb2wgU3BlZWNoU3ludGhlc2lzOjpwZW5kaW5nKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgU3BlZWNoU3ludGhlc2lzOjpzcGVha2luZygpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFNwZWVjaFN5bnRoZXNpczo6cGF1c2Vk
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgU3BlZWNoU3ludGhlc2lz
OjpzcGVhayhTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UqKQotewotfQotCi12b2lkIFNwZWVjaFN5
bnRoZXNpczo6Y2FuY2VsKCkKLXsKLX0KLQotdm9pZCBTcGVlY2hTeW50aGVzaXM6OnBhdXNlKCkK
LXsKLX0KLQotdm9pZCBTcGVlY2hTeW50aGVzaXM6OnJlc3VtZSgpCi17Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoU3ludGhlc2lzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50aGVzaXMu
Y3BwCShyZXZpc2lvbiAxNDA5NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9T
cGVlY2hTeW50aGVzaXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw4IEBACiAKICNp
ZiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKIAorI2luY2x1ZGUgIlBsYXRmb3JtU3BlZWNoU3lu
dGhlc2lzLmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKIFBhc3NSZWZQdHI8U3BlZWNo
U3ludGhlc2lzPiBTcGVlY2hTeW50aGVzaXM6OmNyZWF0ZSgpCkBAIC0zNyw5ICszOSw0OCBAQAog
ICAgIAogU3BlZWNoU3ludGhlc2lzOjpTcGVlY2hTeW50aGVzaXMoKQogewotICAgIGluaXRpYWxp
emVWb2ljZUxpc3QoKTsKKyAgICBtX3BsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXIgPSBQbGF0Zm9y
bVNwZWVjaFN5bnRoZXNpemVyKCk7CisgICAgbV9wbGF0Zm9ybVNwZWVjaFN5bnRoZXNpcy5nZXRW
b2ljZUxpc3QobV92b2ljZUxpc3QpOwogfQorICAgIAordm9pZCBTcGVlY2hTeW50aGVzaXM6OnZv
aWNlc0RpZENoYW5nZSgpCit7CisgICAgbV92b2ljZUxpc3QuY2xlYXIoKQorICAgIG1fcGxhdGZv
cm1TcGVlY2hTeW50aGVzaXMuZ2V0Vm9pY2VMaXN0KG1fdm9pY2VMaXN0KTsKK30KKyAgICAKK2Jv
b2wgU3BlZWNoU3ludGhlc2lzOjpwZW5kaW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7
Cit9CiAKK2Jvb2wgU3BlZWNoU3ludGhlc2lzOjpzcGVha2luZygpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIFNwZWVjaFN5bnRoZXNpczo6cGF1c2VkKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgU3BlZWNoU3ludGhlc2lzOjpzcGVhayhTcGVl
Y2hTeW50aGVzaXNVdHRlcmFuY2UqIHV0dGVyYW5jZSkKK3sKKyAgICBtX3BsYXRmb3JtU3BlZWNo
U3ludGhlc2l6ZXIuc3BlYWsodXR0ZXJhbmNlKTsKK30KKwordm9pZCBTcGVlY2hTeW50aGVzaXM6
OmNhbmNlbCgpCit7Cit9CisKK3ZvaWQgU3BlZWNoU3ludGhlc2lzOjpwYXVzZSgpCit7Cit9CisK
K3ZvaWQgU3BlZWNoU3ludGhlc2lzOjpyZXN1bWUoKQoreworfQorICAgIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOUFVUX1NQRUVDSCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFN5bnRoZXNpcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFN5bnRoZXNpcy5oCShyZXZpc2lv
biAxNDA5NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50aGVz
aXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTYgKzMwLDE5IEBACiAKICNpbmNsdWRlICJTcGVl
Y2hTeW50aGVzaXNWb2ljZS5oIgogCisjaW5jbHVkZSAiUGxhdGZvcm1TcGVlY2hTeW50aGVzaXpl
ci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXJDbGllbnQuaCIKICNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCitjbGFzcyBQ
bGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyQ2xpZW50OwogY2xhc3MgU3BlZWNoU3ludGhlc2lzVXR0
ZXJhbmNlOwogY2xhc3MgU3BlZWNoU3ludGhlc2lzVm9pY2U7CiAgICAgCi1jbGFzcyBTcGVlY2hT
eW50aGVzaXMgOiBwdWJsaWMgUmVmQ291bnRlZDxTcGVlY2hTeW50aGVzaXM+IHsKK2NsYXNzIFNw
ZWVjaFN5bnRoZXNpcyA6IHB1YmxpYyBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyQ2xpZW50LCBw
dWJsaWMgUmVmQ291bnRlZDxTcGVlY2hTeW50aGVzaXM+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxTcGVlY2hTeW50aGVzaXM+IGNyZWF0ZSgpOwogICAgIApAQCAtNTcsNyArNjAs
MTIgQEAKIHByaXZhdGU6CiAgICAgU3BlZWNoU3ludGhlc2lzKCk7CiAgICAgCi0gICAgdm9pZCBp
bml0aWFsaXplVm9pY2VMaXN0KCk7CisgICAgdmlydHVhbCB2b2lkIHZvaWNlc0RpZENoYW5nZSgp
OworICAgIHZpcnR1YWwgdm9pZCBkaWRTdGFydFNwZWFraW5nKFNwZWVjaFN5bnRoZXNpc1V0dGVy
YW5jZSopIHsgfTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoU3BlYWtpbmcoU3BlZWNoU3lu
dGhlc2lzVXR0ZXJhbmNlKikgeyB9OworICAgIHZpcnR1YWwgdm9pZCBzcGVha2luZ0Vycm9yT2Nj
dXJyZWQoU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlKikgeyB9OworCisgICAgUGxhdGZvcm1TcGVl
Y2hTeW50aGVzaXplciBtX3BsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXI7CiAgICAgVmVjdG9yPFJl
ZlB0cjxTcGVlY2hTeW50aGVzaXNWb2ljZT4gPiBtX3ZvaWNlTGlzdDsKIH07CiAgICAgCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186430</attachid>
            <date>2013-02-04 12:12:52 -0800</date>
            <delta_ts>2013-02-04 12:20:28 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>59692</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MTc5MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExNSBAQAorMjAxMy0wMi0wNCAgQ2hyaXMg
RmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29tPgorCisgICAgICAgIFJlZmFjdG9yIHBsYXRm
b3JtLXNwZWNpZmljIGNvZGUgaW4gU3BlZWNoU3ludGhlc2lzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDc0MTQKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWZhY3RvciBXZWJTcGVlY2ggY29kZSB0byB1
c2UgYSBwbGF0Zm9ybSBtZWNoYW5pc20gdG8gcHJvdmlkZSBhY2Nlc3MgdG8gcGxhdGZvcm0gcmVz
b3VyY2VzLgorCisgICAgICAgICogTW9kdWxlcy9zcGVlY2gvRE9NV2luZG93U3BlZWNoU3ludGhl
c2lzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRvd1NwZWVjaFN5bnRoZXNpczo6ZnJv
bSk6CisgICAgICAgICogTW9kdWxlcy9zcGVlY2gvU3BlZWNoU3ludGhlc2lzLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNwZWVjaFN5bnRoZXNpczo6U3BlZWNoU3ludGhlc2lzKToKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzOjp2b2ljZXNEaWRD
aGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzOjpnZXRWb2ljZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzOjpwZW5kaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OlNwZWVjaFN5bnRoZXNpczo6c3BlYWtpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U3Bl
ZWNoU3ludGhlc2lzOjpwYXVzZWQpOgorICAgICAgICAoV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lz
OjpzcGVhayk6CisgICAgICAgIChXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXM6OmNhbmNlbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXM6OnBhdXNlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNwZWVjaFN5bnRoZXNpczo6cmVzdW1lKToKKyAgICAgICAgKiBNb2R1bGVzL3NwZWVjaC9T
cGVlY2hTeW50aGVzaXMuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoU3BlZWNoU3lu
dGhlc2lzKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWVjaFN5bnRoZXNpczo6ZGlkU3RhcnRTcGVh
a2luZyk6CisgICAgICAgIChXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXM6OmRpZEZpbmlzaFNwZWFr
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWVjaFN5bnRoZXNpczo6c3BlYWtpbmdFcnJvck9j
Y3VycmVkKToKKyAgICAgICAgKiBNb2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50aGVzaXNVdHRlcmFu
Y2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlOjpTcGVl
Y2hTeW50aGVzaXNVdHRlcmFuY2UpOgorICAgICAgICAqIE1vZHVsZXMvc3BlZWNoL1NwZWVjaFN5
bnRoZXNpc1V0dGVyYW5jZS5oOgorICAgICAgICAoV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzVXR0
ZXJhbmNlOjp0ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWVjaFN5bnRoZXNpc1V0dGVyYW5j
ZTo6c2V0VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2U6
OmxhbmcpOgorICAgICAgICAoV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlOjpzZXRM
YW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZTo6dm9pY2VV
UkkpOgorICAgICAgICAoV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlOjpzZXRWb2lj
ZVVSSSk6CisgICAgICAgIChXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2U6OnZvbHVt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2U6OnNldFZvbHVt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2U6OnJhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlOjpzZXRSYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZTo6cGl0Y2gpOgorICAgICAg
ICAoV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlOjpzZXRQaXRjaCk6CisgICAgICAg
IChTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6U3BlZWNoU3lu
dGhlc2lzVXR0ZXJhbmNlOjpwbGF0Zm9ybVV0dGVyYW5jZSk6CisgICAgICAgICogTW9kdWxlcy9z
cGVlY2gvU3BlZWNoU3ludGhlc2lzVm9pY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3BlZWNo
U3ludGhlc2lzVm9pY2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTcGVlY2hTeW50aGVz
aXNWb2ljZTo6U3BlZWNoU3ludGhlc2lzVm9pY2UpOgorICAgICAgICAqIE1vZHVsZXMvc3BlZWNo
L1NwZWVjaFN5bnRoZXNpc1ZvaWNlLmg6CisgICAgICAgIChTcGVlY2hTeW50aGVzaXNWb2ljZSk6
CisgICAgICAgIChXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXNWb2ljZTo6dm9pY2VVUkkpOgorICAg
ICAgICAoV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzVm9pY2U6Om5hbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6U3BlZWNoU3ludGhlc2lzVm9pY2U6OmxhbmcpOgorICAgICAgICAoV2ViQ29yZTo6U3Bl
ZWNoU3ludGhlc2lzVm9pY2U6OmxvY2FsU2VydmljZSk6CisgICAgICAgIChXZWJDb3JlOjpTcGVl
Y2hTeW50aGVzaXNWb2ljZTo6aXNEZWZhdWx0KToKKyAgICAgICAgKiBNb2R1bGVzL3NwZWVjaC9t
YWMvU3BlZWNoU3ludGhlc2lzTWFjLm1tOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9QbGF0Zm9ybVNwZWVjaFN5bnRoZXNp
cy5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoUGxhdGZvcm1TcGVlY2hT
eW50aGVzaXMpOgorICAgICAgICAqIHBsYXRmb3JtL1BsYXRmb3JtU3BlZWNoU3ludGhlc2lzVXR0
ZXJhbmNlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlOjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNp
c1V0dGVyYW5jZSk6CisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1TcGVlY2hTeW50aGVzaXNV
dHRlcmFuY2UuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFBsYXRmb3Jt
U3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlQ2xpZW50Ojp+UGxhdGZvcm1TcGVlY2hTeW50aGVz
aXNVdHRlcmFuY2VDbGllbnQpOgorICAgICAgICAoUGxhdGZvcm1TcGVlY2hTeW50aGVzaXNVdHRl
cmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1TcGVlY2hTeW50aGVzaXNVdHRlcmFu
Y2U6OnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1TcGVlY2hTeW50aGVzaXNVdHRl
cmFuY2U6OnNldFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1TcGVlY2hTeW50aGVz
aXNVdHRlcmFuY2U6OmxhbmcpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1TcGVlY2hTeW50
aGVzaXNVdHRlcmFuY2U6OnNldExhbmcpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1TcGVl
Y2hTeW50aGVzaXNVdHRlcmFuY2U6OnZvaWNlVVJJKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlOjpzZXRWb2ljZVVSSSk6CisgICAgICAgIChXZWJD
b3JlOjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZTo6dm9sdW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OlBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlOjpzZXRWb2x1bWUpOgor
ICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2U6OnJhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2U6OnNl
dFJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1TcGVlY2hTeW50aGVzaXNVdHRlcmFu
Y2U6OnBpdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVXR0
ZXJhbmNlOjpzZXRQaXRjaCk6CisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1TcGVlY2hTeW50
aGVzaXNWb2ljZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJD
b3JlOjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1ZvaWNlOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UGxhdGZvcm1TcGVlY2hTeW50aGVzaXNWb2ljZTo6UGxhdGZvcm1TcGVlY2hTeW50aGVz
aXNWb2ljZSk6CisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1TcGVlY2hTeW50aGVzaXNWb2lj
ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoUGxhdGZvcm1TcGVlY2hT
eW50aGVzaXNWb2ljZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNp
c1ZvaWNlOjp2b2ljZVVSSSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVNwZWVjaFN5bnRo
ZXNpc1ZvaWNlOjpuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtU3BlZWNoU3ludGhl
c2lzVm9pY2U6OmxhbmcpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1TcGVlY2hTeW50aGVz
aXNWb2ljZTo6bG9jYWxTZXJ2aWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtU3BlZWNo
U3ludGhlc2lzVm9pY2U6OmlzRGVmYXVsdCk6CisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1T
cGVlY2hTeW50aGVzaXplci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyOjpQbGF0Zm9ybVNwZWVjaFN5bnRo
ZXNpemVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9QbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyLmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChQbGF0Zm9ybVNwZWVjaFN5bnRo
ZXNpemVyQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtU3BlZWNoU3ludGhlc2l6
ZXJDbGllbnQ6On5QbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyQ2xpZW50KToKKyAgICAgICAgKFBs
YXRmb3JtU3BlZWNoU3ludGhlc2l6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1TcGVl
Y2hTeW50aGVzaXplcjo6dm9pY2VMaXN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvUGxhdGZv
cm1TcGVlY2hTeW50aGVzaXNNYWMubW06IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpczo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlBsYXRmb3JtU3BlZWNoU3ludGhlc2lzOjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNp
cyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpczo6cGxhdGZvcm1T
cGVhayk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1BsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXJN
YWMubW06IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0
Zm9ybVNwZWVjaFN5bnRoZXNpemVyOjppbml0aWFsaXplVm9pY2VMaXN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXI6OnNwZWFrKToKKwogMjAxMy0wMi0wNCAg
VG9tIFNlcGV6ICA8dHNlcGV6QGNocm9taWl1bS5vcmc+CiAKICAgICAgICAgWFNTIEF1ZGl0b3Ig
YnlwYXNzIHZpYSBzdmcgdGFncyBhbmQgeGxpbms6aHJlZgpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9zcGVlY2gvU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlLmgJ
KHJldmlzaW9uIDE0MTc5MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVj
aFN5bnRoZXNpc1V0dGVyYW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwzMyArMzAsMzQgQEAK
IAogI2luY2x1ZGUgIkNvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyLmgiCiAjaW5jbHVkZSAiRXZl
bnRUYXJnZXQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZS5o
IgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAotY2xhc3MgU3BlZWNoU3ludGhlc2lzVXR0
ZXJhbmNlIDogcHVibGljIFJlZkNvdW50ZWQ8U3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlPiwgcHVi
bGljIENvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyLCBwdWJsaWMgRXZlbnRUYXJnZXQgeworY2xh
c3MgU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlIDogcHVibGljIFBsYXRmb3JtU3BlZWNoU3ludGhl
c2lzVXR0ZXJhbmNlQ2xpZW50LCBwdWJsaWMgUmVmQ291bnRlZDxTcGVlY2hTeW50aGVzaXNVdHRl
cmFuY2U+LCBwdWJsaWMgQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIsIHB1YmxpYyBFdmVudFRh
cmdldCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3BlZWNoU3ludGhlc2lzVXR0
ZXJhbmNlPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYpOwog
ICAgIAotICAgIGNvbnN0IFN0cmluZyYgdGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dDsgfQot
ICAgIHZvaWQgc2V0VGV4dChjb25zdCBTdHJpbmcmIHRleHQpIHsgbV90ZXh0ID0gdGV4dDsgfQor
ICAgIGNvbnN0IFN0cmluZyYgdGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxhdGZvcm1VdHRlcmFu
Y2UudGV4dCgpOyB9CisgICAgdm9pZCBzZXRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCkgeyBtX3Bs
YXRmb3JtVXR0ZXJhbmNlLnNldFRleHQodGV4dCk7IH0KIAotICAgIGNvbnN0IFN0cmluZyYgbGFu
ZygpIGNvbnN0IHsgcmV0dXJuIG1fbGFuZzsgfQotICAgIHZvaWQgc2V0TGFuZyhjb25zdCBTdHJp
bmcmIGxhbmcpIHsgbV9sYW5nID0gbGFuZzsgfQorICAgIGNvbnN0IFN0cmluZyYgbGFuZygpIGNv
bnN0IHsgcmV0dXJuIG1fcGxhdGZvcm1VdHRlcmFuY2UubGFuZygpOyB9CisgICAgdm9pZCBzZXRM
YW5nKGNvbnN0IFN0cmluZyYgbGFuZykgeyBtX3BsYXRmb3JtVXR0ZXJhbmNlLnNldExhbmcobGFu
Zyk7IH0KIAotICAgIGNvbnN0IFN0cmluZyYgdm9pY2VVUkkoKSBjb25zdCB7IHJldHVybiBtX3Zv
aWNlVVJJOyB9Ci0gICAgdm9pZCBzZXRWb2ljZVVSSShjb25zdCBTdHJpbmcmIHZvaWNlVVJJKSB7
IG1fdm9pY2VVUkkgPSB2b2ljZVVSSTsgfQorICAgIGNvbnN0IFN0cmluZyYgdm9pY2VVUkkoKSBj
b25zdCB7IHJldHVybiBtX3BsYXRmb3JtVXR0ZXJhbmNlLnZvaWNlVVJJKCk7IH0KKyAgICB2b2lk
IHNldFZvaWNlVVJJKGNvbnN0IFN0cmluZyYgdm9pY2VVUkkpIHsgbV9wbGF0Zm9ybVV0dGVyYW5j
ZS5zZXRWb2ljZVVSSSh2b2ljZVVSSSk7IH0KIAotICAgIGZsb2F0IHZvbHVtZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdm9sdW1lOyB9Ci0gICAgdm9pZCBzZXRWb2x1bWUoZmxvYXQgdm9sdW1lKSB7IG1f
dm9sdW1lID0gdm9sdW1lOyB9CisgICAgZmxvYXQgdm9sdW1lKCkgY29uc3QgeyByZXR1cm4gbV9w
bGF0Zm9ybVV0dGVyYW5jZS52b2x1bWUoKTsgfQorICAgIHZvaWQgc2V0Vm9sdW1lKGZsb2F0IHZv
bHVtZSkgeyBtX3BsYXRmb3JtVXR0ZXJhbmNlLnNldFZvbHVtZSh2b2x1bWUpOyB9CiAKLSAgICBm
bG9hdCByYXRlKCkgY29uc3QgeyByZXR1cm4gbV9yYXRlOyB9Ci0gICAgdm9pZCBzZXRSYXRlKGZs
b2F0IHJhdGUpIHsgbV9yYXRlID0gcmF0ZTsgfQorICAgIGZsb2F0IHJhdGUoKSBjb25zdCB7IHJl
dHVybiBtX3BsYXRmb3JtVXR0ZXJhbmNlLnJhdGUoKTsgfQorICAgIHZvaWQgc2V0UmF0ZShmbG9h
dCByYXRlKSB7IG1fcGxhdGZvcm1VdHRlcmFuY2Uuc2V0UmF0ZShyYXRlKTsgfQogCi0gICAgZmxv
YXQgcGl0Y2goKSBjb25zdCB7IHJldHVybiBtX3BpdGNoOyB9Ci0gICAgdm9pZCBzZXRQaXRjaChm
bG9hdCBwaXRjaCkgeyBtX3BpdGNoID0gcGl0Y2g7IH0KLQorICAgIGZsb2F0IHBpdGNoKCkgY29u
c3QgeyByZXR1cm4gbV9wbGF0Zm9ybVV0dGVyYW5jZS5waXRjaCgpOyB9CisgICAgdm9pZCBzZXRQ
aXRjaChmbG9hdCBwaXRjaCkgeyBtX3BsYXRmb3JtVXR0ZXJhbmNlLnNldFBpdGNoKHBpdGNoKTsg
fQorICAgCiAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihzdGFydCk7CiAgICAg
REVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihlbmQpOwogICAgIERFRklORV9BVFRSSUJV
VEVfRVZFTlRfTElTVEVORVIoZXJyb3IpOwpAQCAtNzAsMTUgKzcxLDExIEBACiAKICAgICB2aXJ0
dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25z
dDsKIAorICAgIGNvbnN0IFBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlJiBwbGF0Zm9y
bVV0dGVyYW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGxhdGZvcm1VdHRlcmFuY2U7IH0KKwogcHJp
dmF0ZToKICAgICBTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIGNvbnN0IFN0cmluZyYpOwotCi0gICAgU3RyaW5nIG1fdGV4dDsKLSAgICBTdHJpbmcgbV9s
YW5nOwotICAgIFN0cmluZyBtX3ZvaWNlVVJJOwotICAgIGZsb2F0IG1fdm9sdW1lOwotICAgIGZs
b2F0IG1fcmF0ZTsKLSAgICBmbG9hdCBtX3BpdGNoOworICAgIFBsYXRmb3JtU3BlZWNoU3ludGhl
c2lzVXR0ZXJhbmNlIG1fcGxhdGZvcm1VdHRlcmFuY2U7CiAgICAgCiAgICAgLy8gRXZlbnRUYXJn
ZXQKICAgICBFdmVudFRhcmdldERhdGEgbV9ldmVudFRhcmdldERhdGE7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50aGVzaXNWb2ljZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoU3ludGhlc2lzVm9pY2Uu
Y3BwCShyZXZpc2lvbiAxNDE3OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9T
cGVlY2hTeW50aGVzaXNWb2ljZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDE3ICszMCwxMyBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCi1QYXNzUmVmUHRyPFNwZWVjaFN5bnRoZXNp
c1ZvaWNlPiBTcGVlY2hTeW50aGVzaXNWb2ljZTo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgdm9pY2VV
UkksIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBsYW5nLCBib29sIGxvY2FsU2Vy
dmljZSwgYm9vbCBpc0RlZmF1bHQpCitQYXNzUmVmUHRyPFNwZWVjaFN5bnRoZXNpc1ZvaWNlPiBT
cGVlY2hTeW50aGVzaXNWb2ljZTo6Y3JlYXRlKFJlZlB0cjxQbGF0Zm9ybVNwZWVjaFN5bnRoZXNp
c1ZvaWNlPiB2b2ljZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNwZWVjaFN5bnRoZXNp
c1ZvaWNlKHZvaWNlVVJJLCBuYW1lLCBsYW5nLCBsb2NhbFNlcnZpY2UsIGlzRGVmYXVsdCkpOwor
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3BlZWNoU3ludGhlc2lzVm9pY2Uodm9pY2UpKTsKIH0K
IAotU3BlZWNoU3ludGhlc2lzVm9pY2U6OlNwZWVjaFN5bnRoZXNpc1ZvaWNlKGNvbnN0IFN0cmlu
ZyYgdm9pY2VVUkksIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBsYW5nLCBib29s
IGxvY2FsU2VydmljZSwgYm9vbCBpc0RlZmF1bHQpCi0gICAgOiBtX3ZvaWNlVVJJKHZvaWNlVVJJ
KQotICAgICwgbV9uYW1lKG5hbWUpCi0gICAgLCBtX2xhbmcobGFuZykKLSAgICAsIG1fbG9jYWxT
ZXJ2aWNlKGxvY2FsU2VydmljZSkKLSAgICAsIG1fZGVmYXVsdChpc0RlZmF1bHQpCitTcGVlY2hT
eW50aGVzaXNWb2ljZTo6U3BlZWNoU3ludGhlc2lzVm9pY2UoUmVmUHRyPFBsYXRmb3JtU3BlZWNo
U3ludGhlc2lzVm9pY2U+IHZvaWNlKQorICAgIDogbV9wbGF0Zm9ybVZvaWNlKHZvaWNlKQogewog
fQogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvRE9NV2luZG93U3Bl
ZWNoU3ludGhlc2lzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3Nw
ZWVjaC9ET01XaW5kb3dTcGVlY2hTeW50aGVzaXMuY3BwCShyZXZpc2lvbiAxNDE3OTEpCisrKyBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9ET01XaW5kb3dTcGVlY2hTeW50aGVzaXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBACiAvLyBzdGF0aWMKIERPTVdpbmRvd1Nw
ZWVjaFN5bnRoZXNpcyogRE9NV2luZG93U3BlZWNoU3ludGhlc2lzOjpmcm9tKERPTVdpbmRvdyog
d2luZG93KQogewotICAgIERPTVdpbmRvd1NwZWVjaFN5bnRoZXNpcyogc3VwcGxlbWVudCA9IHN0
YXRpY19jYXN0PERPTVdpbmRvd1NwZWVjaFN5bnRoZXNpcyo+KFN1cHBsZW1lbnQ8RE9NV2luZG93
Pjo6ZnJvbSh3aW5kb3csIHVwcGxlbWVudE5hbWUoKSkpOworICAgIERPTVdpbmRvd1NwZWVjaFN5
bnRoZXNpcyogc3VwcGxlbWVudCA9IHN0YXRpY19jYXN0PERPTVdpbmRvd1NwZWVjaFN5bnRoZXNp
cyo+KFN1cHBsZW1lbnQ8RE9NV2luZG93Pjo6ZnJvbSh3aW5kb3csIHN1cHBsZW1lbnROYW1lKCkp
KTsKICAgICBpZiAoIXN1cHBsZW1lbnQpIHsKICAgICAgICAgc3VwcGxlbWVudCA9IG5ldyBET01X
aW5kb3dTcGVlY2hTeW50aGVzaXMod2luZG93KTsKICAgICAgICAgcHJvdmlkZVRvKHdpbmRvdywg
c3VwcGxlbWVudE5hbWUoKSwgYWRvcHRQdHIoc3VwcGxlbWVudCkpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9zcGVlY2gvbWFjL1NwZWVjaFN5bnRoZXNpc01hYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9tYWMvU3BlZWNoU3ludGhlc2lzTWFj
Lm1tCShyZXZpc2lvbiAxNDE3OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9t
YWMvU3BlZWNoU3ludGhlc2lzTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDkyICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTcGVlY2hTeW50aGVzaXMu
aCIKLQotI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQotCi0jaW5jbHVkZSAiU3BlZWNoU3lu
dGhlc2lzVm9pY2UuaCIKLSNpbmNsdWRlICJTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UuaCIKLSNp
bmNsdWRlIDxBcHBLaXQvTlNTcGVlY2hTeW50aGVzaXplci5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0gICAgCi12b2lkIFNwZWVjaFN5bnRoZXNpczo6aW5pdGlhbGl6ZVZvaWNlTGlzdCgpCi17
Ci0gICAgTlNTdHJpbmcgKmRlZmF1bHRWb2ljZVVSSSA9IFtOU1NwZWVjaFN5bnRoZXNpemVyIGRl
ZmF1bHRWb2ljZV07Ci0gICAgTlNBcnJheSAqYXZhaWxhYmxlVm9pY2VzID0gW05TU3BlZWNoU3lu
dGhlc2l6ZXIgYXZhaWxhYmxlVm9pY2VzXTsKLSAgICBOU1VJbnRlZ2VyIGNvdW50ID0gW2F2YWls
YWJsZVZvaWNlcyBjb3VudF07Ci0gICAgZm9yIChOU1VJbnRlZ2VyIGsgPSAwOyBrIDwgY291bnQ7
IGsrKykgewotICAgICAgICBOU1N0cmluZyAqdm9pY2VOYW1lID0gW2F2YWlsYWJsZVZvaWNlcyBv
YmplY3RBdEluZGV4OmtdOwotICAgICAgICBOU0RpY3Rpb25hcnkgKmF0dHJpYnV0ZXMgPSBbTlNT
cGVlY2hTeW50aGVzaXplciBhdHRyaWJ1dGVzRm9yVm9pY2U6dm9pY2VOYW1lXTsKLSAgICAgICAg
Ci0gICAgICAgIE5TU3RyaW5nICp2b2ljZVVSSSA9IFthdHRyaWJ1dGVzIG9iamVjdEZvcktleTpO
U1ZvaWNlSWRlbnRpZmllcl07Ci0gICAgICAgIE5TU3RyaW5nICpuYW1lID0gW2F0dHJpYnV0ZXMg
b2JqZWN0Rm9yS2V5Ok5TVm9pY2VOYW1lXTsKLSAgICAgICAgTlNTdHJpbmcgKmxhbmd1YWdlID0g
W2F0dHJpYnV0ZXMgb2JqZWN0Rm9yS2V5Ok5TVm9pY2VMb2NhbGVJZGVudGlmaWVyXTsKLQotICAg
ICAgICAvLyBDaGFuZ2UgdG8gQkNQLTQ3IGZvcm1hdCBhcyBkZWZpbmVkIGJ5IHNwZWMuCi0gICAg
ICAgIGxhbmd1YWdlID0gW2xhbmd1YWdlIHN0cmluZ0J5UmVwbGFjaW5nT2NjdXJyZW5jZXNPZlN0
cmluZzpAIl8iIHdpdGhTdHJpbmc6QCItIl07Ci0gICAgICAgIAotICAgICAgICBib29sIGlzRGVm
YXVsdCA9IFtkZWZhdWx0Vm9pY2VVUkkgaXNFcXVhbFRvU3RyaW5nOnZvaWNlVVJJXTsKLSAgICAg
ICAgCi0gICAgICAgIG1fdm9pY2VMaXN0LmFwcGVuZChTcGVlY2hTeW50aGVzaXNWb2ljZTo6Y3Jl
YXRlKHZvaWNlVVJJLCBuYW1lLCBsYW5ndWFnZSwgdHJ1ZSwgaXNEZWZhdWx0KSk7Ci0gICAgfQot
fQotCi1ib29sIFNwZWVjaFN5bnRoZXNpczo6cGVuZGluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1ib29sIFNwZWVjaFN5bnRoZXNpczo6c3BlYWtpbmcoKSBjb25zdAotewot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBTcGVlY2hTeW50aGVzaXM6OnBhdXNlZCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFNwZWVjaFN5bnRoZXNpczo6c3Bl
YWsoU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlKikKLXsKLX0KLQotdm9pZCBTcGVlY2hTeW50aGVz
aXM6OmNhbmNlbCgpCi17Ci19Ci0KLXZvaWQgU3BlZWNoU3ludGhlc2lzOjpwYXVzZSgpCi17Ci19
Ci0KLXZvaWQgU3BlZWNoU3ludGhlc2lzOjpyZXN1bWUoKQotewotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFN5bnRoZXNpcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoU3ludGhlc2lzLmNwcAko
cmV2aXNpb24gMTQxNzkxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNo
U3ludGhlc2lzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsMTAgQEAKIAogI2lmIEVO
QUJMRShTUEVFQ0hfU1lOVEhFU0lTKQogCisjaW5jbHVkZSAiU3BlZWNoU3ludGhlc2lzVXR0ZXJh
bmNlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TcGVlY2hTeW50aGVzaXMuaCIKKyNpbmNsdWRlICJQ
bGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1ZvaWNlLmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAKIFBhc3NSZWZQdHI8U3BlZWNoU3ludGhlc2lzPiBTcGVlY2hTeW50aGVzaXM6OmNyZWF0ZSgp
CkBAIC0zNiwxMCArNDAsNjEgQEAKIH0KICAgICAKIFNwZWVjaFN5bnRoZXNpczo6U3BlZWNoU3lu
dGhlc2lzKCkKKyAgICA6IG1fcGxhdGZvcm1TcGVlY2hTeW50aGVzaXplcihQbGF0Zm9ybVNwZWVj
aFN5bnRoZXNpemVyKHRoaXMpKQogewotICAgIGluaXRpYWxpemVWb2ljZUxpc3QoKTsKIH0KKyAg
ICAKK3ZvaWQgU3BlZWNoU3ludGhlc2lzOjp2b2ljZXNEaWRDaGFuZ2UoKQoreworICAgIG1fdm9p
Y2VMaXN0LmNsZWFyKCk7Cit9CisgICAgCitjb25zdCBWZWN0b3I8UmVmUHRyPFNwZWVjaFN5bnRo
ZXNpc1ZvaWNlPiA+JiBTcGVlY2hTeW50aGVzaXM6OmdldFZvaWNlcygpCit7CisgICAgaWYgKG1f
dm9pY2VMaXN0LnNpemUoKSkKKyAgICAgICAgcmV0dXJuIG1fdm9pY2VMaXN0OworICAgIAorICAg
IC8vIElmIHRoZSB2b2ljZUxpc3QgaXMgZW1wdHksIHRoYXQncyB0aGUgY3VlIHRvIGdldCB0aGUg
dm9pY2VzIGZyb20gdGhlIHBsYXRmb3JtIGFnYWluLgorICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8
UGxhdGZvcm1TcGVlY2hTeW50aGVzaXNWb2ljZT4gPiYgcGxhdGZvcm1Wb2ljZXMgPSBtX3BsYXRm
b3JtU3BlZWNoU3ludGhlc2l6ZXIudm9pY2VMaXN0KCk7CisgICAgc2l6ZV90IHZvaWNlQ291bnQg
PSBwbGF0Zm9ybVZvaWNlcy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgayA9IDA7IGsgPCB2b2lj
ZUNvdW50OyBrKyspCisgICAgICAgIG1fdm9pY2VMaXN0LmFwcGVuZChTcGVlY2hTeW50aGVzaXNW
b2ljZTo6Y3JlYXRlKHBsYXRmb3JtVm9pY2VzW2tdKSk7CiAKKyAgICByZXR1cm4gbV92b2ljZUxp
c3Q7Cit9CisKK2Jvb2wgU3BlZWNoU3ludGhlc2lzOjpwZW5kaW5nKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgU3BlZWNoU3ludGhlc2lzOjpzcGVha2luZygpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFNwZWVjaFN5bnRoZXNpczo6cGF1c2Vk
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgU3BlZWNoU3ludGhlc2lz
OjpzcGVhayhTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UqIHV0dGVyYW5jZSkKK3sKKyAgICBtX3Bs
YXRmb3JtU3BlZWNoU3ludGhlc2l6ZXIuc3BlYWsodXR0ZXJhbmNlLT5wbGF0Zm9ybVV0dGVyYW5j
ZSgpKTsKK30KKwordm9pZCBTcGVlY2hTeW50aGVzaXM6OmNhbmNlbCgpCit7Cit9CisKK3ZvaWQg
U3BlZWNoU3ludGhlc2lzOjpwYXVzZSgpCit7Cit9CisKK3ZvaWQgU3BlZWNoU3ludGhlc2lzOjpy
ZXN1bWUoKQoreworfQorICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8g
RU5BQkxFKElOUFVUX1NQRUVDSCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNo
L1NwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlLmNwcAkocmV2aXNpb24g
MTQxNzkxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoU3ludGhlc2lz
VXR0ZXJhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsOSBAQAogCiBTcGVlY2hT
eW50aGVzaXNVdHRlcmFuY2U6OlNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIHRleHQpCiAgICAgOiBDb250ZXh0RGVz
dHJ1Y3Rpb25PYnNlcnZlcihjb250ZXh0KQotICAgICwgbV90ZXh0KHRleHQpCisgICAgLCBtX3Bs
YXRmb3JtVXR0ZXJhbmNlKFBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlKHRoaXMpKQog
eworICAgIG1fcGxhdGZvcm1VdHRlcmFuY2Uuc2V0VGV4dCh0ZXh0KTsKIH0KICAgICAKIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIFNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZTo6c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9T
cGVlY2hTeW50aGVzaXNWb2ljZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvc3BlZWNoL1NwZWVjaFN5bnRoZXNpc1ZvaWNlLmgJKHJldmlzaW9uIDE0MTc5MSkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFN5bnRoZXNpc1ZvaWNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lT
KQogCisjaW5jbHVkZSAiUGxhdGZvcm1TcGVlY2hTeW50aGVzaXNWb2ljZS5oIgogI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTM2LDIyICszNywxOCBAQAogCiBjbGFzcyBTcGVl
Y2hTeW50aGVzaXNWb2ljZSA6IHB1YmxpYyBSZWZDb3VudGVkPFNwZWVjaFN5bnRoZXNpc1ZvaWNl
PiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U3BlZWNoU3ludGhlc2lzVm9pY2U+
IGNyZWF0ZShjb25zdCBTdHJpbmcmIHZvaWNlVVJJLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IFN0cmluZyYgbGFuZywgYm9vbCBsb2NhbFNlcnZpY2UsIGJvb2wgaXNEZWZhdWx0KTsKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxTcGVlY2hTeW50aGVzaXNWb2ljZT4gY3JlYXRlKFJlZlB0cjxQbGF0
Zm9ybVNwZWVjaFN5bnRoZXNpc1ZvaWNlPik7CiAgICAgCi0gICAgY29uc3QgU3RyaW5nJiB2b2lj
ZVVSSSgpIGNvbnN0IHsgcmV0dXJuIG1fdm9pY2VVUkk7IH0KLSAgICBjb25zdCBTdHJpbmcmIG5h
bWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KLSAgICBjb25zdCBTdHJpbmcmIGxhbmcoKSBj
b25zdCB7IHJldHVybiBtX2xhbmc7IH0KLSAgICBib29sIGxvY2FsU2VydmljZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbG9jYWxTZXJ2aWNlOyB9Ci0gICAgYm9vbCBpc0RlZmF1bHQoKSBjb25zdCB7IHJl
dHVybiBtX2RlZmF1bHQ7IH0KKyAgICBjb25zdCBTdHJpbmcmIHZvaWNlVVJJKCkgY29uc3QgeyBy
ZXR1cm4gbV9wbGF0Zm9ybVZvaWNlLT52b2ljZVVSSSgpOyB9CisgICAgY29uc3QgU3RyaW5nJiBu
YW1lKCkgY29uc3QgeyByZXR1cm4gbV9wbGF0Zm9ybVZvaWNlLT5uYW1lKCk7IH0KKyAgICBjb25z
dCBTdHJpbmcmIGxhbmcoKSBjb25zdCB7IHJldHVybiBtX3BsYXRmb3JtVm9pY2UtPmxhbmcoKTsg
fQorICAgIGJvb2wgbG9jYWxTZXJ2aWNlKCkgY29uc3QgeyByZXR1cm4gbV9wbGF0Zm9ybVZvaWNl
LT5sb2NhbFNlcnZpY2UoKTsgfQorICAgIGJvb2wgaXNEZWZhdWx0KCkgY29uc3QgeyByZXR1cm4g
bV9wbGF0Zm9ybVZvaWNlLT5pc0RlZmF1bHQoKTsgfQogICAgIAogcHJpdmF0ZToKLSAgICBTcGVl
Y2hTeW50aGVzaXNWb2ljZShjb25zdCBTdHJpbmcmIHZvaWNlVVJJLCBjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYgbGFuZywgYm9vbCBsb2NhbFNlcnZpY2UsIGJvb2wgaXNEZWZhdWx0
KTsKKyAgICBleHBsaWNpdCBTcGVlY2hTeW50aGVzaXNWb2ljZShSZWZQdHI8UGxhdGZvcm1TcGVl
Y2hTeW50aGVzaXNWb2ljZT4pOwogICAgIAotICAgIFN0cmluZyBtX3ZvaWNlVVJJOwotICAgIFN0
cmluZyBtX25hbWU7Ci0gICAgU3RyaW5nIG1fbGFuZzsKLSAgICBib29sIG1fbG9jYWxTZXJ2aWNl
OwotICAgIGJvb2wgbV9kZWZhdWx0OworICAgIFJlZlB0cjxQbGF0Zm9ybVNwZWVjaFN5bnRoZXNp
c1ZvaWNlPiBtX3BsYXRmb3JtVm9pY2U7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50aGVzaXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50aGVzaXMu
aAkocmV2aXNpb24gMTQxNzkxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3Bl
ZWNoU3ludGhlc2lzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDE2ICszMCwxOSBAQAogCiAjaW5j
bHVkZSAiU3BlZWNoU3ludGhlc2lzVm9pY2UuaCIKIAorI2luY2x1ZGUgIlBsYXRmb3JtU3BlZWNo
U3ludGhlc2l6ZXIuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5j
ZS5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAKK2NsYXNzIFBsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXJDbGllbnQ7CiBjbGFzcyBTcGVlY2hT
eW50aGVzaXNVdHRlcmFuY2U7CiBjbGFzcyBTcGVlY2hTeW50aGVzaXNWb2ljZTsKICAgICAKLWNs
YXNzIFNwZWVjaFN5bnRoZXNpcyA6IHB1YmxpYyBSZWZDb3VudGVkPFNwZWVjaFN5bnRoZXNpcz4g
eworY2xhc3MgU3BlZWNoU3ludGhlc2lzIDogcHVibGljIFBsYXRmb3JtU3BlZWNoU3ludGhlc2l6
ZXJDbGllbnQsIHB1YmxpYyBSZWZDb3VudGVkPFNwZWVjaFN5bnRoZXNpcz4gewogcHVibGljOgog
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNwZWVjaFN5bnRoZXNpcz4gY3JlYXRlKCk7CiAgICAgCkBA
IC01MiwxMiArNTUsMTcgQEAKICAgICB2b2lkIHBhdXNlKCk7CiAgICAgdm9pZCByZXN1bWUoKTsK
ICAgICAKLSAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFNwZWVjaFN5bnRoZXNpc1ZvaWNlPiA+JiBn
ZXRWb2ljZXMoKSB7IHJldHVybiBtX3ZvaWNlTGlzdDsgfTsKKyAgICBjb25zdCBWZWN0b3I8UmVm
UHRyPFNwZWVjaFN5bnRoZXNpc1ZvaWNlPiA+JiBnZXRWb2ljZXMoKTsKICAgICAKIHByaXZhdGU6
CiAgICAgU3BlZWNoU3ludGhlc2lzKCk7CiAgICAgCi0gICAgdm9pZCBpbml0aWFsaXplVm9pY2VM
aXN0KCk7CisgICAgdmlydHVhbCB2b2lkIHZvaWNlc0RpZENoYW5nZSgpOworICAgIHZpcnR1YWwg
dm9pZCBkaWRTdGFydFNwZWFraW5nKFBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlKikg
eyB9OworICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hTcGVha2luZyhQbGF0Zm9ybVNwZWVjaFN5
bnRoZXNpc1V0dGVyYW5jZSopIHsgfTsKKyAgICB2aXJ0dWFsIHZvaWQgc3BlYWtpbmdFcnJvck9j
Y3VycmVkKFBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlKikgeyB9OworCisgICAgUGxh
dGZvcm1TcGVlY2hTeW50aGVzaXplciBtX3BsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXI7CiAgICAg
VmVjdG9yPFJlZlB0cjxTcGVlY2hTeW50aGVzaXNWb2ljZT4gPiBtX3ZvaWNlTGlzdDsKIH07CiAg
ICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVNwZWVjaFN5bnRoZXNp
c1ZvaWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9y
bVNwZWVjaFN5bnRoZXNpc1ZvaWNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1BsYXRmb3JtU3BlZWNoU3ludGhlc2lzVm9pY2UuY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIENvbXB1dGVy
LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1ZvaWNlLmgiCisKKyNpZiBFTkFCTEUo
U1BFRUNIX1NZTlRIRVNJUykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPFBs
YXRmb3JtU3BlZWNoU3ludGhlc2lzVm9pY2U+IFBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVm9pY2U6
OmNyZWF0ZShjb25zdCBTdHJpbmcmIHZvaWNlVVJJLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IFN0cmluZyYgbGFuZywgYm9vbCBsb2NhbFNlcnZpY2UsIGJvb2wgaXNEZWZhdWx0KQoreworICAg
IHJldHVybiBhZG9wdFJlZihuZXcgUGxhdGZvcm1TcGVlY2hTeW50aGVzaXNWb2ljZSh2b2ljZVVS
SSwgbmFtZSwgbGFuZywgbG9jYWxTZXJ2aWNlLCBpc0RlZmF1bHQpKTsKK30KKyAgICAKK1BsYXRm
b3JtU3BlZWNoU3ludGhlc2lzVm9pY2U6OlBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVm9pY2UoY29u
c3QgU3RyaW5nJiB2b2ljZVVSSSwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGxh
bmcsIGJvb2wgbG9jYWxTZXJ2aWNlLCBib29sIGlzRGVmYXVsdCkKKyAgICA6IG1fdm9pY2VVUkko
dm9pY2VVUkkpCisgICAgLCBtX25hbWUobmFtZSkKKyAgICAsIG1fbGFuZyhsYW5nKQorICAgICwg
bV9sb2NhbFNlcnZpY2UobG9jYWxTZXJ2aWNlKQorICAgICwgbV9kZWZhdWx0KGlzRGVmYXVsdCkK
K3sKK30KKyAgICAgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoU1BFRUNIX1NZTlRIRVNJUykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRm
b3JtU3BlZWNoU3ludGhlc2l6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9QbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQbGF0Zm9ybVNw
ZWVjaFN5bnRoZXNpemVyX2gKKyNkZWZpbmUgUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplcl9oCisK
KyNpbmNsdWRlICJQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1ZvaWNlLmgiCisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorCisjaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKyAgICAKK2NsYXNzIFBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlOwor
ICAgCitjbGFzcyBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyQ2xpZW50IHsKK3B1YmxpYzoKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlkU3RhcnRTcGVha2luZyhQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1V0
dGVyYW5jZSopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoU3BlYWtpbmcoUGxhdGZv
cm1TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNwZWFr
aW5nRXJyb3JPY2N1cnJlZChQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSopID0gMDsK
KyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgdm9pY2VzRGlkQ2hhbmdlKCkgPSAwOworcHJvdGVjdGVk
OgorICAgIHZpcnR1YWwgflBsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXJDbGllbnQoKSB7IH0KK307
CisgICAgCitjbGFzcyBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyIHsKK3B1YmxpYzoKKyAgICBl
eHBsaWNpdCBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyKFBsYXRmb3JtU3BlZWNoU3ludGhlc2l6
ZXJDbGllbnQqKTsKKyAgICAKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFBsYXRmb3JtU3BlZWNo
U3ludGhlc2lzVm9pY2U+ID4mIHZvaWNlTGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fdm9pY2VMaXN0
OyB9CisgICAgdm9pZCBzcGVhayhjb25zdCBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5j
ZSYpOworICAgIAorcHJpdmF0ZToKKyAgICBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyQ2xpZW50
KiBtX3NwZWVjaFN5bnRoZXNpemVyQ2xpZW50OworICAgIFZlY3RvcjxSZWZQdHI8UGxhdGZvcm1T
cGVlY2hTeW50aGVzaXNWb2ljZT4gPiBtX3ZvaWNlTGlzdDsKKyAgICAKKyAgICB2b2lkIGluaXRp
YWxpemVWb2ljZUxpc3QoKTsKK307CisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKKworI2VuZGlmIC8vIFBsYXRmb3JtU3Bl
ZWNoU3ludGhlc2l6ZXJfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1T
cGVlY2hTeW50aGVzaXNVdHRlcmFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1BsYXRmb3JtU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtU3BlZWNoU3ludGhlc2lzVXR0
ZXJhbmNlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TcGVlY2hTeW50aGVz
aXNVdHRlcmFuY2UuaCIKKworI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisgICAgCitQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZTo6UGxh
dGZvcm1TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UoUGxhdGZvcm1TcGVlY2hTeW50aGVzaXNVdHRl
cmFuY2VDbGllbnQqIGNsaWVudCkKKyAgICA6IG1fY2xpZW50KGNsaWVudCkKK3sKK30KKyAgICAK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTUEVFQ0hfU1lOVEhF
U0lTKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtU3BlZWNoU3lu
dGhlc2l6ZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L1BsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXJNYWMubW0JKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplck1hYy5tbQkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplci5oIgorCisjaW5j
bHVkZSAiUGxhdGZvcm1TcGVlY2hTeW50aGVzaXNWb2ljZS5oIgorI2luY2x1ZGUgIlBsYXRmb3Jt
U3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlLmgiCisjaW5jbHVkZSA8QXBwS2l0L05TU3BlZWNoU3lu
dGhlc2l6ZXIuaD4KKworI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3ZvaWQgUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplcjo6aW5pdGlhbGl6ZVZv
aWNlTGlzdCgpCit7CisgICAgTlNTdHJpbmcgKmRlZmF1bHRWb2ljZVVSSSA9IFtOU1NwZWVjaFN5
bnRoZXNpemVyIGRlZmF1bHRWb2ljZV07CisgICAgTlNBcnJheSAqYXZhaWxhYmxlVm9pY2VzID0g
W05TU3BlZWNoU3ludGhlc2l6ZXIgYXZhaWxhYmxlVm9pY2VzXTsKKyAgICBOU1VJbnRlZ2VyIGNv
dW50ID0gW2F2YWlsYWJsZVZvaWNlcyBjb3VudF07CisgICAgZm9yIChOU1VJbnRlZ2VyIGsgPSAw
OyBrIDwgY291bnQ7IGsrKykgeworICAgICAgICBOU1N0cmluZyAqdm9pY2VOYW1lID0gW2F2YWls
YWJsZVZvaWNlcyBvYmplY3RBdEluZGV4OmtdOworICAgICAgICBOU0RpY3Rpb25hcnkgKmF0dHJp
YnV0ZXMgPSBbTlNTcGVlY2hTeW50aGVzaXplciBhdHRyaWJ1dGVzRm9yVm9pY2U6dm9pY2VOYW1l
XTsKKyAgICAgICAgCisgICAgICAgIE5TU3RyaW5nICp2b2ljZVVSSSA9IFthdHRyaWJ1dGVzIG9i
amVjdEZvcktleTpOU1ZvaWNlSWRlbnRpZmllcl07CisgICAgICAgIE5TU3RyaW5nICpuYW1lID0g
W2F0dHJpYnV0ZXMgb2JqZWN0Rm9yS2V5Ok5TVm9pY2VOYW1lXTsKKyAgICAgICAgTlNTdHJpbmcg
Kmxhbmd1YWdlID0gW2F0dHJpYnV0ZXMgb2JqZWN0Rm9yS2V5Ok5TVm9pY2VMb2NhbGVJZGVudGlm
aWVyXTsKKyAgICAgICAgCisgICAgICAgIC8vIENoYW5nZSB0byBCQ1AtNDcgZm9ybWF0IGFzIGRl
ZmluZWQgYnkgc3BlYy4KKyAgICAgICAgbGFuZ3VhZ2UgPSBbbGFuZ3VhZ2Ugc3RyaW5nQnlSZXBs
YWNpbmdPY2N1cnJlbmNlc09mU3RyaW5nOkAiXyIgd2l0aFN0cmluZzpAIi0iXTsKKyAgICAgICAg
CisgICAgICAgIGJvb2wgaXNEZWZhdWx0ID0gW2RlZmF1bHRWb2ljZVVSSSBpc0VxdWFsVG9TdHJp
bmc6dm9pY2VVUkldOworICAgICAgICAKKyAgICAgICAgbV92b2ljZUxpc3QuYXBwZW5kKFBsYXRm
b3JtU3BlZWNoU3ludGhlc2lzVm9pY2U6OmNyZWF0ZSh2b2ljZVVSSSwgbmFtZSwgbGFuZ3VhZ2Us
IHRydWUsIGlzRGVmYXVsdCkpOworICAgIH0KK30KKyAgICAKK3ZvaWQgUGxhdGZvcm1TcGVlY2hT
eW50aGVzaXplcjo6c3BlYWsoY29uc3QgUGxhdGZvcm1TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2Um
KQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1BF
RUNIX1NZTlRIRVNJUykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9y
bVNwZWVjaFN5bnRoZXNpc01hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvUGxhdGZvcm1TcGVlY2hTeW50aGVzaXNNYWMubW0JKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1TcGVlY2hTeW50aGVzaXNNYWMubW0J
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3BlZWNoU3ludGhlc2lzLmgiCisKKyNp
bmNsdWRlICJTcGVlY2hTeW50aGVzaXNWb2ljZS5oIgorI2luY2x1ZGUgIlNwZWVjaFN5bnRoZXNp
c1V0dGVyYW5jZS5oIgorI2luY2x1ZGUgPEFwcEtpdC9OU1NwZWVjaFN5bnRoZXNpemVyLmg+CisK
KyNpZiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQ
YXNzUmVmUHRyPFBsYXRmb3JtU3BlZWNoU3ludGhlc2lzPiBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNp
czo6Y3JlYXRlKFNwZWVjaFN5bnRoZXNpcyogc3ludGhlc2lzKQoreworICAgIHJldHVybiBhZG9w
dFJlZihuZXcgUGxhdGZvcm1TcGVlY2hTeW50aGVzaXMoc3ludGhlc2lzKSk7Cit9CisKK1BsYXRm
b3JtU3BlZWNoU3ludGhlc2lzOjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpcyhTcGVlY2hTeW50aGVz
aXMqIHN5bnRoZXNpcykKKyAgICA6IG1fc3BlZWNoU3ludGhlc2lzKHN5bnRoZXNpcykKK3sKK30K
KyAgICAKK3ZvaWQgUGxhdGZvcm1TcGVlY2hTeW50aGVzaXM6OnBsYXRmb3JtU3BlYWsoU3BlZWNo
U3ludGhlc2lzVXR0ZXJhbmNlKikKK3sKK30KKyAgICAKK3ZvaWQgUGxhdGZvcm1TcGVlY2hTeW50
aGVzaXM6OnBsYXRmb3JtSW5pdGlhbGl6ZVZvaWNlTGlzdChWZWN0b3I8UmVmUHRyPFNwZWVjaFN5
bnRoZXNpc1ZvaWNlPiA+JiB2b2ljZXMpOworeworICAgIE5TU3RyaW5nICpkZWZhdWx0Vm9pY2VV
UkkgPSBbTlNTcGVlY2hTeW50aGVzaXplciBkZWZhdWx0Vm9pY2VdOworICAgIE5TQXJyYXkgKmF2
YWlsYWJsZVZvaWNlcyA9IFtOU1NwZWVjaFN5bnRoZXNpemVyIGF2YWlsYWJsZVZvaWNlc107Cisg
ICAgTlNVSW50ZWdlciBjb3VudCA9IFthdmFpbGFibGVWb2ljZXMgY291bnRdOworICAgIGZvciAo
TlNVSW50ZWdlciBrID0gMDsgayA8IGNvdW50OyBrKyspIHsKKyAgICAgICAgTlNTdHJpbmcgKnZv
aWNlTmFtZSA9IFthdmFpbGFibGVWb2ljZXMgb2JqZWN0QXRJbmRleDprXTsKKyAgICAgICAgTlNE
aWN0aW9uYXJ5ICphdHRyaWJ1dGVzID0gW05TU3BlZWNoU3ludGhlc2l6ZXIgYXR0cmlidXRlc0Zv
clZvaWNlOnZvaWNlTmFtZV07CisgICAgICAgIAorICAgICAgICBOU1N0cmluZyAqdm9pY2VVUkkg
PSBbYXR0cmlidXRlcyBvYmplY3RGb3JLZXk6TlNWb2ljZUlkZW50aWZpZXJdOworICAgICAgICBO
U1N0cmluZyAqbmFtZSA9IFthdHRyaWJ1dGVzIG9iamVjdEZvcktleTpOU1ZvaWNlTmFtZV07Cisg
ICAgICAgIE5TU3RyaW5nICpsYW5ndWFnZSA9IFthdHRyaWJ1dGVzIG9iamVjdEZvcktleTpOU1Zv
aWNlTG9jYWxlSWRlbnRpZmllcl07CisgICAgICAgIAorICAgICAgICAvLyBDaGFuZ2UgdG8gQkNQ
LTQ3IGZvcm1hdCBhcyBkZWZpbmVkIGJ5IHNwZWMuCisgICAgICAgIGxhbmd1YWdlID0gW2xhbmd1
YWdlIHN0cmluZ0J5UmVwbGFjaW5nT2NjdXJyZW5jZXNPZlN0cmluZzpAIl8iIHdpdGhTdHJpbmc6
QCItIl07CisgICAgICAgIAorICAgICAgICBib29sIGlzRGVmYXVsdCA9IFtkZWZhdWx0Vm9pY2VV
UkkgaXNFcXVhbFRvU3RyaW5nOnZvaWNlVVJJXTsKKyAgICAgICAgCisgICAgICAgIHZvaWNlcy5h
cHBlbmQoU3BlZWNoU3ludGhlc2lzVm9pY2U6OmNyZWF0ZSh2b2ljZVVSSSwgbmFtZSwgbGFuZ3Vh
Z2UsIHRydWUsIGlzRGVmYXVsdCkpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtU3BlZWNoU3lu
dGhlc2l6ZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVNwZWVjaFN5bnRo
ZXNpemVyLmgiCisKKyNpZiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworICAgIAorUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplcjo6UGxhdGZvcm1TcGVlY2hT
eW50aGVzaXplcihQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyQ2xpZW50KiBjbGllbnQpCisgICAg
OiBtX3NwZWVjaFN5bnRoZXNpemVyQ2xpZW50KGNsaWVudCkKK3sKK30KKyAgICAKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1TcGVlY2hTeW50aGVzaXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVNwZWVjaFN5bnRoZXNp
cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1TcGVl
Y2hTeW50aGVzaXMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIFBsYXRmb3JtU3BlZWNoU3ludGhlc2lzX2gKKyNkZWZpbmUgUGxhdGZv
cm1TcGVlY2hTeW50aGVzaXNfaAorCisjaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCisKKyNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCitj
bGFzcyBTcGVlY2hTeW50aGVzaXM7CitjbGFzcyBTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2U7Citj
bGFzcyBTcGVlY2hTeW50aGVzaXNWb2ljZTsKKyAgICAKK2NsYXNzIFBsYXRmb3JtU3BlZWNoU3lu
dGhlc2lzIDogcHVibGljIFJlZkNvdW50ZWQ8UGxhdGZvcm1TcGVlY2hTeW50aGVzaXM+IHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpcz4gY3Jl
YXRlKFNwZWVjaFN5bnRoZXNpcyopOworICAgIAorICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFsaXpl
Vm9pY2VMaXN0KFZlY3RvcjxSZWZQdHI8U3BlZWNoU3ludGhlc2lzVm9pY2U+ID4mKTsKKyAgICB2
b2lkIHBsYXRmb3JtU3BlYWsoU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlKik7CisgICAgCitwcml2
YXRlOgorICAgIFBsYXRmb3JtU3BlZWNoU3ludGhlc2lzKFNwZWVjaFN5bnRoZXNpcyopOworCisg
ICAgU3BlZWNoU3ludGhlc2lzKiBtX3NwZWVjaFN5bnRoc2lzOworfTsKKyAgICAKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQorCisj
ZW5kaWYgLy8gUGxhdGZvcm1TcGVlY2hTeW50aGVzaXNfaApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vUGxhdGZvcm1TcGVlY2hTeW50aGVzaXNWb2ljZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtU3BlZWNoU3ludGhlc2lzVm9pY2UuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtU3BlZWNoU3ludGhl
c2lzVm9pY2UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIFBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVm9pY2VfaAorI2RlZmluZSBQbGF0
Zm9ybVNwZWVjaFN5bnRoZXNpc1ZvaWNlX2gKKworI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lT
KQorCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIFBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVm9pY2UgOiBwdWJsaWMgUmVmQ291
bnRlZDxQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1ZvaWNlPiB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8UGxhdGZvcm1TcGVlY2hTeW50aGVzaXNWb2ljZT4gY3JlYXRlKGNvbnN0IFN0
cmluZyYgdm9pY2VVUkksIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBsYW5nLCBi
b29sIGxvY2FsU2VydmljZSwgYm9vbCBpc0RlZmF1bHQpOworICAgIAorICAgIGNvbnN0IFN0cmlu
ZyYgdm9pY2VVUkkoKSBjb25zdCB7IHJldHVybiBtX3ZvaWNlVVJJOyB9CisgICAgY29uc3QgU3Ry
aW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CisgICAgY29uc3QgU3RyaW5nJiBs
YW5nKCkgY29uc3QgeyByZXR1cm4gbV9sYW5nOyB9CisgICAgYm9vbCBsb2NhbFNlcnZpY2UoKSBj
b25zdCB7IHJldHVybiBtX2xvY2FsU2VydmljZTsgfQorICAgIGJvb2wgaXNEZWZhdWx0KCkgY29u
c3QgeyByZXR1cm4gbV9kZWZhdWx0OyB9CisgICAgCitwcml2YXRlOgorICAgIFBsYXRmb3JtU3Bl
ZWNoU3ludGhlc2lzVm9pY2UoY29uc3QgU3RyaW5nJiB2b2ljZVVSSSwgY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBTdHJpbmcmIGxhbmcsIGJvb2wgbG9jYWxTZXJ2aWNlLCBib29sIGlzRGVmYXVs
dCk7CisKKyAgICBTdHJpbmcgbV92b2ljZVVSSTsKKyAgICBTdHJpbmcgbV9uYW1lOworICAgIFN0
cmluZyBtX2xhbmc7CisgICAgYm9vbCBtX2xvY2FsU2VydmljZTsKKyAgICBib29sIG1fZGVmYXVs
dDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTUEVF
Q0hfU1lOVEhFU0lTKQorCisjZW5kaWYgLy8gUGxhdGZvcm1TcGVlY2hTeW50aGVzaXNWb2ljZV9o
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1V0
dGVyYW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3Jt
U3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9QbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZS5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIENvbXB1
dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUGxhdGZvcm1T
cGVlY2hTeW50aGVzaXNVdHRlcmFuY2VfaAorI2RlZmluZSBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNp
c1V0dGVyYW5jZV9oCisKKyNpZiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKKworI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCitjbGFz
cyBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZUNsaWVudCB7CitwdWJsaWM6CisgICAg
Ly8gSW1wbGVtZW50IG1ldGhvZHMgYXMgbmVlZGVkLgorcHJvdGVjdGVkOgorICAgIHZpcnR1YWwg
flBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlQ2xpZW50KCkgeyB9Cit9OworICAgIAor
Y2xhc3MgUGxhdGZvcm1TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UgeworcHVibGljOgorICAgIGV4
cGxpY2l0IFBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlKFBsYXRmb3JtU3BlZWNoU3lu
dGhlc2lzVXR0ZXJhbmNlQ2xpZW50Kik7CisgICAgCisgICAgY29uc3QgU3RyaW5nJiB0ZXh0KCkg
Y29uc3QgeyByZXR1cm4gbV90ZXh0OyB9CisgICAgdm9pZCBzZXRUZXh0KGNvbnN0IFN0cmluZyYg
dGV4dCkgeyBtX3RleHQgPSB0ZXh0OyB9CisgICAgCisgICAgY29uc3QgU3RyaW5nJiBsYW5nKCkg
Y29uc3QgeyByZXR1cm4gbV9sYW5nOyB9CisgICAgdm9pZCBzZXRMYW5nKGNvbnN0IFN0cmluZyYg
bGFuZykgeyBtX2xhbmcgPSBsYW5nOyB9CisgICAgCisgICAgY29uc3QgU3RyaW5nJiB2b2ljZVVS
SSgpIGNvbnN0IHsgcmV0dXJuIG1fdm9pY2VVUkk7IH0KKyAgICB2b2lkIHNldFZvaWNlVVJJKGNv
bnN0IFN0cmluZyYgdm9pY2VVUkkpIHsgbV92b2ljZVVSSSA9IHZvaWNlVVJJOyB9CisgICAgCisg
ICAgZmxvYXQgdm9sdW1lKCkgY29uc3QgeyByZXR1cm4gbV92b2x1bWU7IH0KKyAgICB2b2lkIHNl
dFZvbHVtZShmbG9hdCB2b2x1bWUpIHsgbV92b2x1bWUgPSB2b2x1bWU7IH0KKyAgICAKKyAgICBm
bG9hdCByYXRlKCkgY29uc3QgeyByZXR1cm4gbV9yYXRlOyB9CisgICAgdm9pZCBzZXRSYXRlKGZs
b2F0IHJhdGUpIHsgbV9yYXRlID0gcmF0ZTsgfQorICAgIAorICAgIGZsb2F0IHBpdGNoKCkgY29u
c3QgeyByZXR1cm4gbV9waXRjaDsgfQorICAgIHZvaWQgc2V0UGl0Y2goZmxvYXQgcGl0Y2gpIHsg
bV9waXRjaCA9IHBpdGNoOyB9CisKK3ByaXZhdGU6CisgICAgUGxhdGZvcm1TcGVlY2hTeW50aGVz
aXNVdHRlcmFuY2VDbGllbnQqIG1fY2xpZW50OworICAgIFN0cmluZyBtX3RleHQ7CisgICAgU3Ry
aW5nIG1fbGFuZzsKKyAgICBTdHJpbmcgbV92b2ljZVVSSTsKKyAgICBmbG9hdCBtX3ZvbHVtZTsK
KyAgICBmbG9hdCBtX3JhdGU7CisgICAgZmxvYXQgbV9waXRjaDsKK307CisgICAgCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKKwor
I2VuZGlmIC8vIFBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlX2gKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDE0MTc5MSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNzQ5LDkgKzc0OSwxNiBAQAogCQkyOTE3QjU2NjE0
NzM0OTk1MDA1MkM5RDAgLyogTGF5ZXJGbHVzaFNjaGVkdWxlck1hYy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyOTE3QjU2NTE0NzM0OTk1MDA1MkM5
RDAgLyogTGF5ZXJGbHVzaFNjaGVkdWxlck1hYy5jcHAgKi87IH07CiAJCTI5MTlBMUU5MTZCMzM3
NjYwMDc4NzIxMyAvKiBDb250ZW50RmlsdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyOTE5QTFFODE2QjMzNzY2MDA3ODcyMTMgLyogQ29udGVudEZp
bHRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTI5MTlBMUVCMTZCMzM3ODkwMDc4NzIxMyAvKiBDb250ZW50RmlsdGVyTWFjLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjkxOUExRUExNkIzMzc4OTAw
Nzg3MjEzIC8qIENvbnRlbnRGaWx0ZXJNYWMubW0gKi87IH07CisJCTI5MzQ5NDBBMTZDMDJDMDcw
MDkwMTMxOCAvKiBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1ZvaWNlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1MjdDQzkzMTZCRjkyRUMwMDlEREFD
MCAvKiBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1ZvaWNlLmNwcCAqLzsgfTsKKwkJMjkzNDk0MEIx
NkMwMkMwQTAwOTAxMzE4IC8qIFBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1MjdDQzk1MTZC
Rjk1REQwMDlEREFDMCAvKiBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZS5jcHAgKi87
IH07CiAJCTI5M0VBRTFGMTM1NkIyRkUwMDY3QUNGOSAvKiBSdW50aW1lQXBwbGljYXRpb25DaGVj
a3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5M0VB
RTFFMTM1NkIyRkUwMDY3QUNGOSAvKiBSdW50aW1lQXBwbGljYXRpb25DaGVja3MuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyOTNFQUUyMTEzNTZC
MzJFMDA2N0FDRjkgLyogUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5M0VBRTIwMTM1NkIzMkUwMDY3QUNG
OSAvKiBSdW50aW1lQXBwbGljYXRpb25DaGVja3MuY3BwICovOyB9OwogCQkyOTQ4OUZDNzEyQzAw
RjAzMDBEODNGMEYgLyogQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5NDg5RkM1MTJDMDBGMDMwMEQ4M0YwRiAv
KiBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5oICovOyB9OworCQkyOTdCRTNENTE2QzAzQzA4MDAz
MzE2QkQgLyogUGxhdGZvcm1TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1MjdDQzkxMTZCRjhCQTEwMDlEREFD
MCAvKiBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZS5oICovOyB9OworCQkyOTdCRTNE
NjE2QzAzQzBCMDAzMzE2QkQgLyogUGxhdGZvcm1TcGVlY2hTeW50aGVzaXNWb2ljZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjUyN0NDOTIxNkJGOTBC
NDAwOUREQUMwIC8qIFBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVm9pY2UuaCAqLzsgfTsKKwkJMjk3
QkUzRDcxNkMwM0MwRTAwMzMxNkJEIC8qIFBsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5RTREOERGMTZCMDk0
MEYwMEM4NDcwNCAvKiBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyLmggKi87IH07CisJCTI5N0JF
M0Q4MTZDMDNDQ0UwMDMzMTZCRCAvKiBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyTWFjLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjlFNEQ4RTAxNkIw
OTU5ODAwQzg0NzA0IC8qIFBsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXJNYWMubW0gKi87IH07CisJ
CTI5N0JFM0RBMTZDMDQzRDgwMDMzMTZCRCAvKiBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5N0JFM0Q5
MTZDMDQzRDgwMDMzMTZCRCAvKiBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyLmNwcCAqLzsgfTsK
IAkJMjlBMzA5QUMxNTYxQzk5QjAwQkJEOEU1IC8qIFJ1bkxvb3BDRi5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyOUEzMDlBQjE1NjFDOTlCMDBCQkQ4
RTUgLyogUnVuTG9vcENGLmNwcCAqLzsgfTsKIAkJMjlBMzA5QjAxNTYxQ0FDNDAwQkJEOEU1IC8q
IFZpc2l0ZWRMaW5rcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyOUEzMDlBRTE1NjFDQUM0MDBCQkQ4RTUgLyogVmlzaXRlZExpbmtzLmNwcCAqLzsg
fTsKIAkJMjlBMzA5QjExNTYxQ0FDNDAwQkJEOEU1IC8qIFZpc2l0ZWRMaW5rcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjlBMzA5QUYxNTYxQ0FDNDAw
QkJEOEU1IC8qIFZpc2l0ZWRMaW5rcy5oICovOyB9OwpAQCAtNDY0Miw3ICs0NjQ5LDYgQEAKIAkJ
QUEyQTVBRDUxNkE0ODYxNDAwOTc1QTI1IC8qIFNwZWVjaFN5bnRoZXNpcy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBQTJBNUFCRDE2QTQ4NUQ1MDA5
NzVBMjUgLyogU3BlZWNoU3ludGhlc2lzLmNwcCAqLzsgfTsKIAkJQUEyQTVBRDYxNkE0ODYxNjAw
OTc1QTI1IC8qIERPTVdpbmRvd1NwZWVjaFN5bnRoZXNpcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUEyQTVBQjkxNkE0ODVENTAwOTc1QTI1IC8qIERP
TVdpbmRvd1NwZWVjaFN5bnRoZXNpcy5oICovOyB9OwogCQlBQTJBNUFENzE2QTQ4NjFBMDA5NzVB
MjUgLyogRE9NV2luZG93U3BlZWNoU3ludGhlc2lzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFBMkE1QUI4MTZBNDg1RDUwMDk3NUEyNSAvKiBET01X
aW5kb3dTcGVlY2hTeW50aGVzaXMuY3BwICovOyB9OwotCQlBQTJBNUFEODE2QTQ4NjFEMDA5NzVB
MjUgLyogU3BlZWNoU3ludGhlc2lzTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQUEyQTVBQkMxNkE0ODVENTAwOTc1QTI1IC8qIFNwZWVjaFN5bnRo
ZXNpc01hYy5tbSAqLzsgfTsKIAkJQUE0QzNBNzYwQjJCMTY3OTAwMjMzNEEyIC8qIFN0eWxlRWxl
bWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
QTRDM0E3NDBCMkIxNjc5MDAyMzM0QTIgLyogU3R5bGVFbGVtZW50LmNwcCAqLzsgfTsKIAkJQUE0
QzNBNzcwQjJCMTY3OTAwMjMzNEEyIC8qIFN0eWxlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUE0QzNBNzUwQjJCMTY3OTAwMjMzNEEyIC8q
IFN0eWxlRWxlbWVudC5oICovOyB9OwogCQlBQTczMTgzRTE1OTI1NUI5MDBBOTNFNkUgLyogSW5q
ZWN0ZWRTY3JpcHRDYW52YXNNb2R1bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQUE3MzE4M0MxNTkyNTVCOTAwQTkzRTZFIC8qIEluamVjdGVkU2Ny
aXB0Q2FudmFzTW9kdWxlLmNwcCAqLzsgfTsKQEAgLTgwMDYsNiArODAxMiwxMCBAQAogCQkyNEQ5
MTJCQzEzQ0E5QTk3MDBEMjE5MTUgLyogU1ZHR2x5cGhSZWZFbGVtZW50LmlkbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBTVkdHbHlwaFJlZkVsZW1lbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkyNEY1NEVBQTEwMUZFOTE0MDAwQUU3NDEgLyogQXBwbGljYXRpb25DYWNoZUhv
c3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXBwbGljYXRpb25D
YWNoZUhvc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNEY1NEVBQjEwMUZF
OTE0MDAwQUU3NDEgLyogQXBwbGljYXRpb25DYWNoZUhvc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQXBwbGljYXRpb25DYWNoZUhvc3QuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMjUyN0NDOTExNkJGOEJBMTAwOUREQUMwIC8qIFBsYXRmb3JtU3BlZWNoU3lu
dGhlc2lzVXR0ZXJhbmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtU3BlZWNoU3ludGhlc2lz
VXR0ZXJhbmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI1MjdDQzkyMTZCRjkw
QjQwMDlEREFDMCAvKiBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1ZvaWNlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVm9pY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMjUyN0NDOTMxNkJGOTJFQzAwOUREQUMwIC8qIFBsYXRmb3JtU3BlZWNoU3ludGhl
c2lzVm9pY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGxhdGZv
cm1TcGVlY2hTeW50aGVzaXNWb2ljZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTI1MjdDQzk1MTZCRjk1REQwMDlEREFDMCAvKiBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1V0dGVy
YW5jZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQbGF0Zm9ybVNw
ZWVjaFN5bnRoZXNpc1V0dGVyYW5jZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTI1NDJGNEQ4MTE2NkMyNUEwMEU4OUE4NiAvKiBVc2VyR2VzdHVyZUluZGljYXRvci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVc2VyR2VzdHVyZUluZGljYXRvci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI1NDJGNEQ5MTE2NkMyNUEwMEU4OUE4
NiAvKiBVc2VyR2VzdHVyZUluZGljYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBVc2VyR2VzdHVyZUluZGljYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkyNjU1NDEzNzE0ODk4MTFDMDAwREZDNUQgLyogS2V5RXZlbnRDb2Rlc0lPUy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBLZXlFdmVudENvZGVzSU9TLmg7IHBhdGggPSBpb3Mv
S2V5RXZlbnRDb2Rlc0lPUy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODAyOCw2
ICs4MDM4LDcgQEAKIAkJMjkzRUFFMUUxMzU2QjJGRTAwNjdBQ0Y5IC8qIFJ1bnRpbWVBcHBsaWNh
dGlvbkNoZWNrcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSdW50aW1lQXBw
bGljYXRpb25DaGVja3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjkzRUFFMjAx
MzU2QjMyRTAwNjdBQ0Y5IC8qIFJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSdW50aW1lQXBwbGljYXRpb25DaGVja3MuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyOTQ4OUZDNTEyQzAwRjAzMDBEODNGMEYg
LyogQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMjk3QkUzRDkxNkMwNDNEODAwMzMxNkJEIC8qIFBsYXRmb3JtU3BlZWNoU3ludGhlc2l6
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGxhdGZvcm1TcGVl
Y2hTeW50aGVzaXplci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI5ODFDQTlE
MTMxODIyRUMwMEQxMkYyQSAvKiBBY2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQWNjZXNzaWJpbGl0eUFSSUFHcmlkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMjk4MUNBOUUxMzE4MjJFQzAwRDEyRjJBIC8qIEFjY2Vzc2liaWxpdHlBUklBR3Jp
ZENlbGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI5ODFDQTlGMTMxODIyRUMwMEQxMkYy
QSAvKiBBY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQWNj
ZXNzaWJpbGl0eUFSSUFHcmlkUm93LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTgwNzUsNiArODA4Niw4IEBACiAJCTI5QUNCMjEzMTQzRTc0OTgwMDZCQ0E1RiAvKiBBY2Nlc3Np
YmlsaXR5TW9ja09iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBBY2Nlc3NpYmlsaXR5TW9ja09iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTI5RDdCQ0Y1MTQ0NEFGNTgwMDcwNjE5QyAvKiBBY2Nlc3NpYmlsaXR5U3BpbkJ1dHRvbi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBY2Nlc3NpYmlsaXR5U3Bp
bkJ1dHRvbi5jcHA7IHBhdGggPSBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTcGluQnV0dG9u
LmNwcDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OwogCQkyOUQ3QkNGOTE0NDRBRjdEMDA3
MDYxOUMgLyogQWNjZXNzaWJpbGl0eVNwaW5CdXR0b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQWNjZXNzaWJpbGl0eVNwaW5CdXR0b24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMjlFNEQ4REYxNkIwOTQwRjAwQzg0NzA0IC8qIFBsYXRmb3JtU3BlZWNoU3lu
dGhlc2l6ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyOUU0RDhFMDE2QjA5NTk4MDBDODQ3MDQgLyog
UGxhdGZvcm1TcGVlY2hTeW50aGVzaXplck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IFBsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXJNYWMubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJCNDIzNTlGMTUyNTBGNjAwMERCQkNEOCAvKiBSZW5kZXJT
VkdFbGxpcHNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRl
clNWR0VsbGlwc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQjQyMzVBMDE1
MjUwRjYwMDBEQkJDRDggLyogUmVuZGVyU1ZHRWxsaXBzZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdFbGxpcHNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTJCRThFMkM2MTJBNTg5RUMwMEZBRDU1MCAvKiBIVE1MTWV0YUNoYXJzZXRQYXJzZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSFRNTE1ldGFDaGFyc2V0UGFyc2Vy
Lmg7IHBhdGggPSBwYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xMTk2OCw3ICsxMTk4MSw2IEBACiAJCUFBMkE1QUI4MTZBNDg1RDUw
MDk3NUEyNSAvKiBET01XaW5kb3dTcGVlY2hTeW50aGVzaXMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gRE9NV2luZG93U3BlZWNoU3ludGhlc2lzLmNwcDsgcGF0aCA9IE1vZHVsZXMvc3BlZWNoL0RP
TVdpbmRvd1NwZWVjaFN5bnRoZXNpcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUFBMkE1QUI5MTZBNDg1RDUwMDk3NUEyNSAvKiBET01XaW5kb3dTcGVlY2hTeW50aGVzaXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gRE9NV2luZG93U3BlZWNoU3ludGhlc2lzLmg7IHBhdGggPSBNb2R1bGVz
L3NwZWVjaC9ET01XaW5kb3dTcGVlY2hTeW50aGVzaXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQUEyQTVBQkExNkE0ODVENTAwOTc1QTI1IC8qIERPTVdpbmRvd1NwZWVjaFN5bnRo
ZXNpcy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0OyBuYW1lID0gRE9NV2luZG93U3BlZWNoU3ludGhlc2lzLmlkbDsgcGF0aCA9IE1vZHVs
ZXMvc3BlZWNoL0RPTVdpbmRvd1NwZWVjaFN5bnRoZXNpcy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUFBMkE1QUJDMTZBNDg1RDUwMDk3NUEyNSAvKiBTcGVlY2hTeW50aGVzaXNN
YWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNwZWVjaFN5bnRoZXNpc01hYy5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUEyQTVBQkQxNkE0ODVENTAwOTc1QTI1IC8qIFNwZWVj
aFN5bnRoZXNpcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBTcGVlY2hTeW50aGVzaXMuY3BwOyBw
YXRoID0gTW9kdWxlcy9zcGVlY2gvU3BlZWNoU3ludGhlc2lzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQUEyQTVBQkUxNkE0ODVENTAwOTc1QTI1IC8qIFNwZWVjaFN5bnRoZXNp
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBTcGVlY2hTeW50aGVzaXMuaDsgcGF0aCA9IE1vZHVsZXMvc3Bl
ZWNoL1NwZWVjaFN5bnRoZXNpcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBQTJB
NUFCRjE2QTQ4NUQ1MDA5NzVBMjUgLyogU3BlZWNoU3ludGhlc2lzLmlkbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBTcGVlY2hT
eW50aGVzaXMuaWRsOyBwYXRoID0gTW9kdWxlcy9zcGVlY2gvU3BlZWNoU3ludGhlc2lzLmlkbDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2MTI2LDYgKzE2MTM4LDcgQEAKIAkJCQlC
Q0FBNDg2RDE0QTA1MjUzMDA4OEZBQzQgLyogUGxhdGZvcm1FdmVudEZhY3RvcnlNYWMubW0gKi8s
CiAJCQkJQzVGNzY1QkExNEUxRUNGNDAwNkM4OTlCIC8qIFBsYXRmb3JtUGFzdGVib2FyZE1hYy5t
bSAqLywKIAkJCQlCQzk0RDEwNzBDMjc0Rjg4MDA2QkM2MTcgLyogUGxhdGZvcm1TY3JlZW5NYWMu
bW0gKi8sCisJCQkJMjlFNEQ4RTAxNkIwOTU5ODAwQzg0NzA0IC8qIFBsYXRmb3JtU3BlZWNoU3lu
dGhlc2l6ZXJNYWMubW0gKi8sCiAJCQkJRDM5RDAwNkMxMUY4RTMwODAwNjA0MUYyIC8qIFBvcHVw
TWVudU1hYy5oICovLAogCQkJCTA2NjhFMThFMEFERDk2NDAwMDQxMjhFMCAvKiBQb3B1cE1lbnVN
YWMubW0gKi8sCiAJCQkJRTRENjg3NzYwRUQ3QUUzRDAwNkVBOTc4IC8qIFB1cmdlYWJsZUJ1ZmZl
ck1hYy5jcHAgKi8sCkBAIC0xOTcxMSw3ICsxOTcyNCw2IEBACiAJCUFBMkE1QUI3MTZBNDg1QTQw
MDk3NUEyNSAvKiBzcGVlY2ggKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVu
ID0gKAotCQkJCUFBMkE1QUJCMTZBNDg1RDUwMDk3NUEyNSAvKiBtYWMgKi8sCiAJCQkJQUEyQTVB
QjgxNkE0ODVENTAwOTc1QTI1IC8qIERPTVdpbmRvd1NwZWVjaFN5bnRoZXNpcy5jcHAgKi8sCiAJ
CQkJQUEyQTVBQjkxNkE0ODVENTAwOTc1QTI1IC8qIERPTVdpbmRvd1NwZWVjaFN5bnRoZXNpcy5o
ICovLAogCQkJCUFBMkE1QUJBMTZBNDg1RDUwMDk3NUEyNSAvKiBET01XaW5kb3dTcGVlY2hTeW50
aGVzaXMuaWRsICovLApAQCAtMTk3MzEsMTUgKzE5NzQzLDYgQEAKIAkJCW5hbWUgPSBzcGVlY2g7
CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OwotCQlBQTJBNUFCQjE2QTQ4NUQ1MDA5
NzVBMjUgLyogbWFjICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgK
LQkJCQlBQTJBNUFCQzE2QTQ4NUQ1MDA5NzVBMjUgLyogU3BlZWNoU3ludGhlc2lzTWFjLm1tICov
LAotCQkJKTsKLQkJCW5hbWUgPSBtYWM7Ci0JCQlwYXRoID0gTW9kdWxlcy9zcGVlY2gvbWFjOwot
CQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKIAkJQUE3RkVFOUIxNkE0OTFBMTAwNEMw
QzMzIC8qIFNwZWVjaCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
CkBAIC0yMTQzOSw2ICsyMTQ0MiwxMiBAQAogCQkJCTkzNUM0NzY3MDlBQzRENDMwMEE2QUFCNCAv
KiBQbGF0Zm9ybU1vdXNlRXZlbnQuaCAqLywKIAkJCQlDNUJBQzE2RjE0RTMwRTQ3MDAwMDg4Mzcg
LyogUGxhdGZvcm1QYXN0ZWJvYXJkLmggKi8sCiAJCQkJQkNFQzAxRDYwQzI3NEVCNDAwOUY0RUM5
IC8qIFBsYXRmb3JtU2NyZWVuLmggKi8sCisJCQkJMjk3QkUzRDkxNkMwNDNEODAwMzMxNkJEIC8q
IFBsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXIuY3BwICovLAorCQkJCTI5RTREOERGMTZCMDk0MEYw
MEM4NDcwNCAvKiBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyLmggKi8sCisJCQkJMjUyN0NDOTMx
NkJGOTJFQzAwOUREQUMwIC8qIFBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVm9pY2UuY3BwICovLAor
CQkJCTI1MjdDQzkyMTZCRjkwQjQwMDlEREFDMCAvKiBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1Zv
aWNlLmggKi8sCisJCQkJMjUyN0NDOTUxNkJGOTVERDAwOUREQUMwIC8qIFBsYXRmb3JtU3BlZWNo
U3ludGhlc2lzVXR0ZXJhbmNlLmNwcCAqLywKKwkJCQkyNTI3Q0M5MTE2QkY4QkExMDA5RERBQzAg
LyogUGxhdGZvcm1TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UuaCAqLywKIAkJCQkxQUQ4RjgxQTEx
Q0FCOUU5MDBFOTNFNTQgLyogUGxhdGZvcm1TdHJhdGVnaWVzLmNwcCAqLywKIAkJCQkxQUQ4Rjgx
OTExQ0FCOUU5MDBFOTNFNTQgLyogUGxhdGZvcm1TdHJhdGVnaWVzLmggKi8sCiAJCQkJOTM1QzQ3
NkEwOUFDNEQ0RjAwQTZBQUI0IC8qIFBsYXRmb3JtV2hlZWxFdmVudC5oICovLApAQCAtMjUzNDMs
NiArMjUzNTIsOSBAQAogCQkJCTkzNUM0NzY5MDlBQzRENDMwMEE2QUFCNCAvKiBQbGF0Zm9ybU1v
dXNlRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUM1OTg5MDU4MTRFOUMyOTkwMEU4RDE4QiAv
KiBQbGF0Zm9ybVBhc3RlYm9hcmQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRUMwMUQ3MEMyNzRF
QjQwMDlGNEVDOSAvKiBQbGF0Zm9ybVNjcmVlbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjk3QkUz
RDUxNkMwM0MwODAwMzMxNkJEIC8qIFBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkyOTdCRTNENjE2QzAzQzBCMDAzMzE2QkQgLyogUGxhdGZvcm1T
cGVlY2hTeW50aGVzaXNWb2ljZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMjk3QkUzRDcxNkMwM0Mw
RTAwMzMxNkJEIC8qIFBsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTFBRDhGODFCMTFDQUI5RTkwMEU5M0U1NCAvKiBQbGF0Zm9ybVN0cmF0ZWdpZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTkzNUM0NzZCMDlBQzRENEYwMEE2QUFCNCAvKiBQbGF0Zm9ybVdoZWVs
RXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxRDU5MUIzMTY2OTdBNkMwMEU2QkYwMiAvKiBQ
bHVnSW5DbGllbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjg2ODYsNiArMjg2OTgsMTAgQEAKIAkJ
CQk0MUJGNzAwRjBGRTg2RjYxMDA1RThERUMgLyogUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzU5ODkwMkUxNEU5QjBGODAwRThEMThCIC8qIFBsYXRm
b3JtUGFzdGVib2FyZE1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDOTREMTA4MEMyNzRGODgw
MDZCQzYxNyAvKiBQbGF0Zm9ybVNjcmVlbk1hYy5tbSBpbiBTb3VyY2VzICovLAorCQkJCTI5MzQ5
NDBBMTZDMDJDMDcwMDkwMTMxOCAvKiBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1ZvaWNlLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTI5MzQ5NDBCMTZDMDJDMEEwMDkwMTMxOCAvKiBQbGF0Zm9ybVNw
ZWVjaFN5bnRoZXNpc1V0dGVyYW5jZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyOTdCRTNEODE2
QzAzQ0NFMDAzMzE2QkQgLyogUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplck1hYy5tbSBpbiBTb3Vy
Y2VzICovLAorCQkJCTI5N0JFM0RBMTZDMDQzRDgwMDMzMTZCRCAvKiBQbGF0Zm9ybVNwZWVjaFN5
bnRoZXNpemVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBRDhGODFDMTFDQUI5RTkwMEU5M0U1
NCAvKiBQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTlDNkU0RjMw
RDc0NUU0ODAwNjQ0MkU5IC8qIFBsdWdpbkRhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTcy
MDVBQkIxMjM5MjkyNzAwQjE3MzgwIC8qIFBsdWdpbkRvY3VtZW50LmNwcCBpbiBTb3VyY2VzICov
LApAQCAtMjg5OTIsNyArMjkwMDgsNiBAQAogCQkJCTc1NDE1QzI5MTI5QTk5MjAwMDNBRDY2OSAv
KiBTcGVlY2hJbnB1dFJlc3VsdExpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQUEyQTVBRDUx
NkE0ODYxNDAwOTc1QTI1IC8qIFNwZWVjaFN5bnRoZXNpcy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBQTJBNUFEMzE2QTQ4NjBEMDA5NzVBMjUgLyogU3BlZWNoU3ludGhlc2lzRXZlbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJQUEyQTVBRDgxNkE0ODYxRDAwOTc1QTI1IC8qIFNwZWVjaFN5bnRo
ZXNpc01hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUFBMkE1QUQxMTZBNDg2MDcwMDk3NUEyNSAv
KiBTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQUEyQTVB
Q0QxNkE0ODVGQTAwOTc1QTI1IC8qIFNwZWVjaFN5bnRoZXNpc1ZvaWNlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE3OEZFMTNCMTIzNjZCMTAwMEFDRThEMCAvKiBTcGVsbENoZWNrZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186432</attachid>
            <date>2013-02-04 12:20:28 -0800</date>
            <delta_ts>2013-02-08 13:46:44 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>59679</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MTc5MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExNSBAQAorMjAxMy0wMi0wNCAgQ2hyaXMg
RmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29tPgorCisgICAgICAgIFJlZmFjdG9yIHBsYXRm
b3JtLXNwZWNpZmljIGNvZGUgaW4gU3BlZWNoU3ludGhlc2lzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDc0MTQKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWZhY3RvciBXZWJTcGVlY2ggY29kZSB0byB1
c2UgYSBwbGF0Zm9ybSBtZWNoYW5pc20gdG8gcHJvdmlkZSBhY2Nlc3MgdG8gcGxhdGZvcm0gcmVz
b3VyY2VzLgorCisgICAgICAgICogTW9kdWxlcy9zcGVlY2gvRE9NV2luZG93U3BlZWNoU3ludGhl
c2lzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRvd1NwZWVjaFN5bnRoZXNpczo6ZnJv
bSk6CisgICAgICAgICogTW9kdWxlcy9zcGVlY2gvU3BlZWNoU3ludGhlc2lzLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNwZWVjaFN5bnRoZXNpczo6U3BlZWNoU3ludGhlc2lzKToKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzOjp2b2ljZXNEaWRD
aGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzOjpnZXRWb2ljZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzOjpwZW5kaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OlNwZWVjaFN5bnRoZXNpczo6c3BlYWtpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U3Bl
ZWNoU3ludGhlc2lzOjpwYXVzZWQpOgorICAgICAgICAoV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lz
OjpzcGVhayk6CisgICAgICAgIChXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXM6OmNhbmNlbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXM6OnBhdXNlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNwZWVjaFN5bnRoZXNpczo6cmVzdW1lKToKKyAgICAgICAgKiBNb2R1bGVzL3NwZWVjaC9T
cGVlY2hTeW50aGVzaXMuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoU3BlZWNoU3lu
dGhlc2lzKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWVjaFN5bnRoZXNpczo6ZGlkU3RhcnRTcGVh
a2luZyk6CisgICAgICAgIChXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXM6OmRpZEZpbmlzaFNwZWFr
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWVjaFN5bnRoZXNpczo6c3BlYWtpbmdFcnJvck9j
Y3VycmVkKToKKyAgICAgICAgKiBNb2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50aGVzaXNVdHRlcmFu
Y2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlOjpTcGVl
Y2hTeW50aGVzaXNVdHRlcmFuY2UpOgorICAgICAgICAqIE1vZHVsZXMvc3BlZWNoL1NwZWVjaFN5
bnRoZXNpc1V0dGVyYW5jZS5oOgorICAgICAgICAoV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzVXR0
ZXJhbmNlOjp0ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWVjaFN5bnRoZXNpc1V0dGVyYW5j
ZTo6c2V0VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2U6
OmxhbmcpOgorICAgICAgICAoV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlOjpzZXRM
YW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZTo6dm9pY2VV
UkkpOgorICAgICAgICAoV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlOjpzZXRWb2lj
ZVVSSSk6CisgICAgICAgIChXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2U6OnZvbHVt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2U6OnNldFZvbHVt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2U6OnJhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlOjpzZXRSYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZTo6cGl0Y2gpOgorICAgICAg
ICAoV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlOjpzZXRQaXRjaCk6CisgICAgICAg
IChTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6U3BlZWNoU3lu
dGhlc2lzVXR0ZXJhbmNlOjpwbGF0Zm9ybVV0dGVyYW5jZSk6CisgICAgICAgICogTW9kdWxlcy9z
cGVlY2gvU3BlZWNoU3ludGhlc2lzVm9pY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3BlZWNo
U3ludGhlc2lzVm9pY2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTcGVlY2hTeW50aGVz
aXNWb2ljZTo6U3BlZWNoU3ludGhlc2lzVm9pY2UpOgorICAgICAgICAqIE1vZHVsZXMvc3BlZWNo
L1NwZWVjaFN5bnRoZXNpc1ZvaWNlLmg6CisgICAgICAgIChTcGVlY2hTeW50aGVzaXNWb2ljZSk6
CisgICAgICAgIChXZWJDb3JlOjpTcGVlY2hTeW50aGVzaXNWb2ljZTo6dm9pY2VVUkkpOgorICAg
ICAgICAoV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzVm9pY2U6Om5hbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6U3BlZWNoU3ludGhlc2lzVm9pY2U6OmxhbmcpOgorICAgICAgICAoV2ViQ29yZTo6U3Bl
ZWNoU3ludGhlc2lzVm9pY2U6OmxvY2FsU2VydmljZSk6CisgICAgICAgIChXZWJDb3JlOjpTcGVl
Y2hTeW50aGVzaXNWb2ljZTo6aXNEZWZhdWx0KToKKyAgICAgICAgKiBNb2R1bGVzL3NwZWVjaC9t
YWMvU3BlZWNoU3ludGhlc2lzTWFjLm1tOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9QbGF0Zm9ybVNwZWVjaFN5bnRoZXNp
cy5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoUGxhdGZvcm1TcGVlY2hT
eW50aGVzaXMpOgorICAgICAgICAqIHBsYXRmb3JtL1BsYXRmb3JtU3BlZWNoU3ludGhlc2lzVXR0
ZXJhbmNlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlOjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNp
c1V0dGVyYW5jZSk6CisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1TcGVlY2hTeW50aGVzaXNV
dHRlcmFuY2UuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFBsYXRmb3Jt
U3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlQ2xpZW50Ojp+UGxhdGZvcm1TcGVlY2hTeW50aGVz
aXNVdHRlcmFuY2VDbGllbnQpOgorICAgICAgICAoUGxhdGZvcm1TcGVlY2hTeW50aGVzaXNVdHRl
cmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1TcGVlY2hTeW50aGVzaXNVdHRlcmFu
Y2U6OnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1TcGVlY2hTeW50aGVzaXNVdHRl
cmFuY2U6OnNldFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1TcGVlY2hTeW50aGVz
aXNVdHRlcmFuY2U6OmxhbmcpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1TcGVlY2hTeW50
aGVzaXNVdHRlcmFuY2U6OnNldExhbmcpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1TcGVl
Y2hTeW50aGVzaXNVdHRlcmFuY2U6OnZvaWNlVVJJKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlOjpzZXRWb2ljZVVSSSk6CisgICAgICAgIChXZWJD
b3JlOjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZTo6dm9sdW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OlBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlOjpzZXRWb2x1bWUpOgor
ICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2U6OnJhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2U6OnNl
dFJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1TcGVlY2hTeW50aGVzaXNVdHRlcmFu
Y2U6OnBpdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVXR0
ZXJhbmNlOjpzZXRQaXRjaCk6CisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1TcGVlY2hTeW50
aGVzaXNWb2ljZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJD
b3JlOjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1ZvaWNlOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UGxhdGZvcm1TcGVlY2hTeW50aGVzaXNWb2ljZTo6UGxhdGZvcm1TcGVlY2hTeW50aGVz
aXNWb2ljZSk6CisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1TcGVlY2hTeW50aGVzaXNWb2lj
ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoUGxhdGZvcm1TcGVlY2hT
eW50aGVzaXNWb2ljZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNp
c1ZvaWNlOjp2b2ljZVVSSSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVNwZWVjaFN5bnRo
ZXNpc1ZvaWNlOjpuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtU3BlZWNoU3ludGhl
c2lzVm9pY2U6OmxhbmcpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1TcGVlY2hTeW50aGVz
aXNWb2ljZTo6bG9jYWxTZXJ2aWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtU3BlZWNo
U3ludGhlc2lzVm9pY2U6OmlzRGVmYXVsdCk6CisgICAgICAgICogcGxhdGZvcm0vUGxhdGZvcm1T
cGVlY2hTeW50aGVzaXplci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyOjpQbGF0Zm9ybVNwZWVjaFN5bnRo
ZXNpemVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9QbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyLmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChQbGF0Zm9ybVNwZWVjaFN5bnRo
ZXNpemVyQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtU3BlZWNoU3ludGhlc2l6
ZXJDbGllbnQ6On5QbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyQ2xpZW50KToKKyAgICAgICAgKFBs
YXRmb3JtU3BlZWNoU3ludGhlc2l6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1TcGVl
Y2hTeW50aGVzaXplcjo6dm9pY2VMaXN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvUGxhdGZv
cm1TcGVlY2hTeW50aGVzaXNNYWMubW06IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpczo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlBsYXRmb3JtU3BlZWNoU3ludGhlc2lzOjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNp
cyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpczo6cGxhdGZvcm1T
cGVhayk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1BsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXJN
YWMubW06IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0
Zm9ybVNwZWVjaFN5bnRoZXNpemVyOjppbml0aWFsaXplVm9pY2VMaXN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXI6OnNwZWFrKToKKwogMjAxMy0wMi0wNCAg
VG9tIFNlcGV6ICA8dHNlcGV6QGNocm9taWl1bS5vcmc+CiAKICAgICAgICAgWFNTIEF1ZGl0b3Ig
YnlwYXNzIHZpYSBzdmcgdGFncyBhbmQgeGxpbms6aHJlZgpJbmRleDogU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9zcGVlY2gvU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlLmgJ
KHJldmlzaW9uIDE0MTc5MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVj
aFN5bnRoZXNpc1V0dGVyYW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwzMiArMzAsMzMgQEAK
IAogI2luY2x1ZGUgIkNvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyLmgiCiAjaW5jbHVkZSAiRXZl
bnRUYXJnZXQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZS5o
IgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAotY2xhc3MgU3BlZWNoU3ludGhlc2lzVXR0
ZXJhbmNlIDogcHVibGljIFJlZkNvdW50ZWQ8U3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlPiwgcHVi
bGljIENvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyLCBwdWJsaWMgRXZlbnRUYXJnZXQgeworY2xh
c3MgU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlIDogcHVibGljIFBsYXRmb3JtU3BlZWNoU3ludGhl
c2lzVXR0ZXJhbmNlQ2xpZW50LCBwdWJsaWMgUmVmQ291bnRlZDxTcGVlY2hTeW50aGVzaXNVdHRl
cmFuY2U+LCBwdWJsaWMgQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIsIHB1YmxpYyBFdmVudFRh
cmdldCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3BlZWNoU3ludGhlc2lzVXR0
ZXJhbmNlPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYpOwog
ICAgIAotICAgIGNvbnN0IFN0cmluZyYgdGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dDsgfQot
ICAgIHZvaWQgc2V0VGV4dChjb25zdCBTdHJpbmcmIHRleHQpIHsgbV90ZXh0ID0gdGV4dDsgfQor
ICAgIGNvbnN0IFN0cmluZyYgdGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxhdGZvcm1VdHRlcmFu
Y2UudGV4dCgpOyB9CisgICAgdm9pZCBzZXRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCkgeyBtX3Bs
YXRmb3JtVXR0ZXJhbmNlLnNldFRleHQodGV4dCk7IH0KIAotICAgIGNvbnN0IFN0cmluZyYgbGFu
ZygpIGNvbnN0IHsgcmV0dXJuIG1fbGFuZzsgfQotICAgIHZvaWQgc2V0TGFuZyhjb25zdCBTdHJp
bmcmIGxhbmcpIHsgbV9sYW5nID0gbGFuZzsgfQorICAgIGNvbnN0IFN0cmluZyYgbGFuZygpIGNv
bnN0IHsgcmV0dXJuIG1fcGxhdGZvcm1VdHRlcmFuY2UubGFuZygpOyB9CisgICAgdm9pZCBzZXRM
YW5nKGNvbnN0IFN0cmluZyYgbGFuZykgeyBtX3BsYXRmb3JtVXR0ZXJhbmNlLnNldExhbmcobGFu
Zyk7IH0KIAotICAgIGNvbnN0IFN0cmluZyYgdm9pY2VVUkkoKSBjb25zdCB7IHJldHVybiBtX3Zv
aWNlVVJJOyB9Ci0gICAgdm9pZCBzZXRWb2ljZVVSSShjb25zdCBTdHJpbmcmIHZvaWNlVVJJKSB7
IG1fdm9pY2VVUkkgPSB2b2ljZVVSSTsgfQorICAgIGNvbnN0IFN0cmluZyYgdm9pY2VVUkkoKSBj
b25zdCB7IHJldHVybiBtX3BsYXRmb3JtVXR0ZXJhbmNlLnZvaWNlVVJJKCk7IH0KKyAgICB2b2lk
IHNldFZvaWNlVVJJKGNvbnN0IFN0cmluZyYgdm9pY2VVUkkpIHsgbV9wbGF0Zm9ybVV0dGVyYW5j
ZS5zZXRWb2ljZVVSSSh2b2ljZVVSSSk7IH0KIAotICAgIGZsb2F0IHZvbHVtZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdm9sdW1lOyB9Ci0gICAgdm9pZCBzZXRWb2x1bWUoZmxvYXQgdm9sdW1lKSB7IG1f
dm9sdW1lID0gdm9sdW1lOyB9CisgICAgZmxvYXQgdm9sdW1lKCkgY29uc3QgeyByZXR1cm4gbV9w
bGF0Zm9ybVV0dGVyYW5jZS52b2x1bWUoKTsgfQorICAgIHZvaWQgc2V0Vm9sdW1lKGZsb2F0IHZv
bHVtZSkgeyBtX3BsYXRmb3JtVXR0ZXJhbmNlLnNldFZvbHVtZSh2b2x1bWUpOyB9CiAKLSAgICBm
bG9hdCByYXRlKCkgY29uc3QgeyByZXR1cm4gbV9yYXRlOyB9Ci0gICAgdm9pZCBzZXRSYXRlKGZs
b2F0IHJhdGUpIHsgbV9yYXRlID0gcmF0ZTsgfQorICAgIGZsb2F0IHJhdGUoKSBjb25zdCB7IHJl
dHVybiBtX3BsYXRmb3JtVXR0ZXJhbmNlLnJhdGUoKTsgfQorICAgIHZvaWQgc2V0UmF0ZShmbG9h
dCByYXRlKSB7IG1fcGxhdGZvcm1VdHRlcmFuY2Uuc2V0UmF0ZShyYXRlKTsgfQogCi0gICAgZmxv
YXQgcGl0Y2goKSBjb25zdCB7IHJldHVybiBtX3BpdGNoOyB9Ci0gICAgdm9pZCBzZXRQaXRjaChm
bG9hdCBwaXRjaCkgeyBtX3BpdGNoID0gcGl0Y2g7IH0KKyAgICBmbG9hdCBwaXRjaCgpIGNvbnN0
IHsgcmV0dXJuIG1fcGxhdGZvcm1VdHRlcmFuY2UucGl0Y2goKTsgfQorICAgIHZvaWQgc2V0UGl0
Y2goZmxvYXQgcGl0Y2gpIHsgbV9wbGF0Zm9ybVV0dGVyYW5jZS5zZXRQaXRjaChwaXRjaCk7IH0K
IAogICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoc3RhcnQpOwogICAgIERFRklO
RV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoZW5kKTsKQEAgLTcwLDE1ICs3MSwxMSBAQAogCiAg
ICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0
KCkgY29uc3Q7CiAKKyAgICBjb25zdCBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSYg
cGxhdGZvcm1VdHRlcmFuY2UoKSBjb25zdCB7IHJldHVybiBtX3BsYXRmb3JtVXR0ZXJhbmNlOyB9
CisKIHByaXZhdGU6CiAgICAgU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBjb25zdCBTdHJpbmcmKTsKLQotICAgIFN0cmluZyBtX3RleHQ7Ci0gICAgU3Ry
aW5nIG1fbGFuZzsKLSAgICBTdHJpbmcgbV92b2ljZVVSSTsKLSAgICBmbG9hdCBtX3ZvbHVtZTsK
LSAgICBmbG9hdCBtX3JhdGU7Ci0gICAgZmxvYXQgbV9waXRjaDsKKyAgICBQbGF0Zm9ybVNwZWVj
aFN5bnRoZXNpc1V0dGVyYW5jZSBtX3BsYXRmb3JtVXR0ZXJhbmNlOwogICAgIAogICAgIC8vIEV2
ZW50VGFyZ2V0CiAgICAgRXZlbnRUYXJnZXREYXRhIG1fZXZlbnRUYXJnZXREYXRhOwpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoU3ludGhlc2lzVm9pY2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFN5bnRoZXNp
c1ZvaWNlLmNwcAkocmV2aXNpb24gMTQxNzkxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9z
cGVlY2gvU3BlZWNoU3ludGhlc2lzVm9pY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxNyAr
MzAsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAotUGFzc1JlZlB0cjxTcGVlY2hT
eW50aGVzaXNWb2ljZT4gU3BlZWNoU3ludGhlc2lzVm9pY2U6OmNyZWF0ZShjb25zdCBTdHJpbmcm
IHZvaWNlVVJJLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgbGFuZywgYm9vbCBs
b2NhbFNlcnZpY2UsIGJvb2wgaXNEZWZhdWx0KQorUGFzc1JlZlB0cjxTcGVlY2hTeW50aGVzaXNW
b2ljZT4gU3BlZWNoU3ludGhlc2lzVm9pY2U6OmNyZWF0ZShQYXNzUmVmUHRyPFBsYXRmb3JtU3Bl
ZWNoU3ludGhlc2lzVm9pY2U+IHZvaWNlKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3Bl
ZWNoU3ludGhlc2lzVm9pY2Uodm9pY2VVUkksIG5hbWUsIGxhbmcsIGxvY2FsU2VydmljZSwgaXNE
ZWZhdWx0KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTcGVlY2hTeW50aGVzaXNWb2ljZSh2
b2ljZSkpOwogfQogCi1TcGVlY2hTeW50aGVzaXNWb2ljZTo6U3BlZWNoU3ludGhlc2lzVm9pY2Uo
Y29uc3QgU3RyaW5nJiB2b2ljZVVSSSwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IGxhbmcsIGJvb2wgbG9jYWxTZXJ2aWNlLCBib29sIGlzRGVmYXVsdCkKLSAgICA6IG1fdm9pY2VV
Ukkodm9pY2VVUkkpCi0gICAgLCBtX25hbWUobmFtZSkKLSAgICAsIG1fbGFuZyhsYW5nKQotICAg
ICwgbV9sb2NhbFNlcnZpY2UobG9jYWxTZXJ2aWNlKQotICAgICwgbV9kZWZhdWx0KGlzRGVmYXVs
dCkKK1NwZWVjaFN5bnRoZXNpc1ZvaWNlOjpTcGVlY2hTeW50aGVzaXNWb2ljZShQYXNzUmVmUHRy
PFBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVm9pY2U+IHZvaWNlKQorICAgIDogbV9wbGF0Zm9ybVZv
aWNlKHZvaWNlKQogewogfQogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVl
Y2gvRE9NV2luZG93U3BlZWNoU3ludGhlc2lzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3NwZWVjaC9ET01XaW5kb3dTcGVlY2hTeW50aGVzaXMuY3BwCShyZXZpc2lv
biAxNDE3OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9ET01XaW5kb3dTcGVl
Y2hTeW50aGVzaXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBACiAvLyBzdGF0
aWMKIERPTVdpbmRvd1NwZWVjaFN5bnRoZXNpcyogRE9NV2luZG93U3BlZWNoU3ludGhlc2lzOjpm
cm9tKERPTVdpbmRvdyogd2luZG93KQogewotICAgIERPTVdpbmRvd1NwZWVjaFN5bnRoZXNpcyog
c3VwcGxlbWVudCA9IHN0YXRpY19jYXN0PERPTVdpbmRvd1NwZWVjaFN5bnRoZXNpcyo+KFN1cHBs
ZW1lbnQ8RE9NV2luZG93Pjo6ZnJvbSh3aW5kb3csIHVwcGxlbWVudE5hbWUoKSkpOworICAgIERP
TVdpbmRvd1NwZWVjaFN5bnRoZXNpcyogc3VwcGxlbWVudCA9IHN0YXRpY19jYXN0PERPTVdpbmRv
d1NwZWVjaFN5bnRoZXNpcyo+KFN1cHBsZW1lbnQ8RE9NV2luZG93Pjo6ZnJvbSh3aW5kb3csIHN1
cHBsZW1lbnROYW1lKCkpKTsKICAgICBpZiAoIXN1cHBsZW1lbnQpIHsKICAgICAgICAgc3VwcGxl
bWVudCA9IG5ldyBET01XaW5kb3dTcGVlY2hTeW50aGVzaXMod2luZG93KTsKICAgICAgICAgcHJv
dmlkZVRvKHdpbmRvdywgc3VwcGxlbWVudE5hbWUoKSwgYWRvcHRQdHIoc3VwcGxlbWVudCkpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvbWFjL1NwZWVjaFN5bnRoZXNpc01h
Yy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9tYWMvU3Bl
ZWNoU3ludGhlc2lzTWFjLm1tCShyZXZpc2lvbiAxNDE3OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3NwZWVjaC9tYWMvU3BlZWNoU3ludGhlc2lzTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDkyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJT
cGVlY2hTeW50aGVzaXMuaCIKLQotI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQotCi0jaW5j
bHVkZSAiU3BlZWNoU3ludGhlc2lzVm9pY2UuaCIKLSNpbmNsdWRlICJTcGVlY2hTeW50aGVzaXNV
dHRlcmFuY2UuaCIKLSNpbmNsdWRlIDxBcHBLaXQvTlNTcGVlY2hTeW50aGVzaXplci5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCi12b2lkIFNwZWVjaFN5bnRoZXNpczo6aW5pdGlhbGl6
ZVZvaWNlTGlzdCgpCi17Ci0gICAgTlNTdHJpbmcgKmRlZmF1bHRWb2ljZVVSSSA9IFtOU1NwZWVj
aFN5bnRoZXNpemVyIGRlZmF1bHRWb2ljZV07Ci0gICAgTlNBcnJheSAqYXZhaWxhYmxlVm9pY2Vz
ID0gW05TU3BlZWNoU3ludGhlc2l6ZXIgYXZhaWxhYmxlVm9pY2VzXTsKLSAgICBOU1VJbnRlZ2Vy
IGNvdW50ID0gW2F2YWlsYWJsZVZvaWNlcyBjb3VudF07Ci0gICAgZm9yIChOU1VJbnRlZ2VyIGsg
PSAwOyBrIDwgY291bnQ7IGsrKykgewotICAgICAgICBOU1N0cmluZyAqdm9pY2VOYW1lID0gW2F2
YWlsYWJsZVZvaWNlcyBvYmplY3RBdEluZGV4OmtdOwotICAgICAgICBOU0RpY3Rpb25hcnkgKmF0
dHJpYnV0ZXMgPSBbTlNTcGVlY2hTeW50aGVzaXplciBhdHRyaWJ1dGVzRm9yVm9pY2U6dm9pY2VO
YW1lXTsKLSAgICAgICAgCi0gICAgICAgIE5TU3RyaW5nICp2b2ljZVVSSSA9IFthdHRyaWJ1dGVz
IG9iamVjdEZvcktleTpOU1ZvaWNlSWRlbnRpZmllcl07Ci0gICAgICAgIE5TU3RyaW5nICpuYW1l
ID0gW2F0dHJpYnV0ZXMgb2JqZWN0Rm9yS2V5Ok5TVm9pY2VOYW1lXTsKLSAgICAgICAgTlNTdHJp
bmcgKmxhbmd1YWdlID0gW2F0dHJpYnV0ZXMgb2JqZWN0Rm9yS2V5Ok5TVm9pY2VMb2NhbGVJZGVu
dGlmaWVyXTsKLQotICAgICAgICAvLyBDaGFuZ2UgdG8gQkNQLTQ3IGZvcm1hdCBhcyBkZWZpbmVk
IGJ5IHNwZWMuCi0gICAgICAgIGxhbmd1YWdlID0gW2xhbmd1YWdlIHN0cmluZ0J5UmVwbGFjaW5n
T2NjdXJyZW5jZXNPZlN0cmluZzpAIl8iIHdpdGhTdHJpbmc6QCItIl07Ci0gICAgICAgIAotICAg
ICAgICBib29sIGlzRGVmYXVsdCA9IFtkZWZhdWx0Vm9pY2VVUkkgaXNFcXVhbFRvU3RyaW5nOnZv
aWNlVVJJXTsKLSAgICAgICAgCi0gICAgICAgIG1fdm9pY2VMaXN0LmFwcGVuZChTcGVlY2hTeW50
aGVzaXNWb2ljZTo6Y3JlYXRlKHZvaWNlVVJJLCBuYW1lLCBsYW5ndWFnZSwgdHJ1ZSwgaXNEZWZh
dWx0KSk7Ci0gICAgfQotfQotCi1ib29sIFNwZWVjaFN5bnRoZXNpczo6cGVuZGluZygpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFNwZWVjaFN5bnRoZXNpczo6c3BlYWtp
bmcoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBTcGVlY2hTeW50aGVz
aXM6OnBhdXNlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFNwZWVj
aFN5bnRoZXNpczo6c3BlYWsoU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlKikKLXsKLX0KLQotdm9p
ZCBTcGVlY2hTeW50aGVzaXM6OmNhbmNlbCgpCi17Ci19Ci0KLXZvaWQgU3BlZWNoU3ludGhlc2lz
OjpwYXVzZSgpCi17Ci19Ci0KLXZvaWQgU3BlZWNoU3ludGhlc2lzOjpyZXN1bWUoKQotewotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoU1BFRUNIX1NZTlRI
RVNJUykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFN5bnRoZXNp
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNo
U3ludGhlc2lzLmNwcAkocmV2aXNpb24gMTQxNzkxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9zcGVlY2gvU3BlZWNoU3ludGhlc2lzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgs
MTAgQEAKIAogI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQogCisjaW5jbHVkZSAiUGxhdGZv
cm1TcGVlY2hTeW50aGVzaXMuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1Zv
aWNlLmgiCisjaW5jbHVkZSAiU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlLmgiCisKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAKIFBhc3NSZWZQdHI8U3BlZWNoU3ludGhlc2lzPiBTcGVlY2hTeW50
aGVzaXM6OmNyZWF0ZSgpCkBAIC0zNiwxMCArNDAsNjEgQEAKIH0KICAgICAKIFNwZWVjaFN5bnRo
ZXNpczo6U3BlZWNoU3ludGhlc2lzKCkKKyAgICA6IG1fcGxhdGZvcm1TcGVlY2hTeW50aGVzaXpl
cihQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyKHRoaXMpKQogewotICAgIGluaXRpYWxpemVWb2lj
ZUxpc3QoKTsKIH0KKyAgICAKK3ZvaWQgU3BlZWNoU3ludGhlc2lzOjp2b2ljZXNEaWRDaGFuZ2Uo
KQoreworICAgIG1fdm9pY2VMaXN0LmNsZWFyKCk7Cit9CisgICAgCitjb25zdCBWZWN0b3I8UmVm
UHRyPFNwZWVjaFN5bnRoZXNpc1ZvaWNlPiA+JiBTcGVlY2hTeW50aGVzaXM6OmdldFZvaWNlcygp
Cit7CisgICAgaWYgKG1fdm9pY2VMaXN0LnNpemUoKSkKKyAgICAgICAgcmV0dXJuIG1fdm9pY2VM
aXN0OworICAgIAorICAgIC8vIElmIHRoZSB2b2ljZUxpc3QgaXMgZW1wdHksIHRoYXQncyB0aGUg
Y3VlIHRvIGdldCB0aGUgdm9pY2VzIGZyb20gdGhlIHBsYXRmb3JtIGFnYWluLgorICAgIGNvbnN0
IFZlY3RvcjxSZWZQdHI8UGxhdGZvcm1TcGVlY2hTeW50aGVzaXNWb2ljZT4gPiYgcGxhdGZvcm1W
b2ljZXMgPSBtX3BsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXIudm9pY2VMaXN0KCk7CisgICAgc2l6
ZV90IHZvaWNlQ291bnQgPSBwbGF0Zm9ybVZvaWNlcy5zaXplKCk7CisgICAgZm9yIChzaXplX3Qg
ayA9IDA7IGsgPCB2b2ljZUNvdW50OyBrKyspCisgICAgICAgIG1fdm9pY2VMaXN0LmFwcGVuZChT
cGVlY2hTeW50aGVzaXNWb2ljZTo6Y3JlYXRlKHBsYXRmb3JtVm9pY2VzW2tdKSk7CiAKKyAgICBy
ZXR1cm4gbV92b2ljZUxpc3Q7Cit9CisKK2Jvb2wgU3BlZWNoU3ludGhlc2lzOjpwZW5kaW5nKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgU3BlZWNoU3ludGhlc2lzOjpz
cGVha2luZygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFNwZWVjaFN5
bnRoZXNpczo6cGF1c2VkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQg
U3BlZWNoU3ludGhlc2lzOjpzcGVhayhTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UqIHV0dGVyYW5j
ZSkKK3sKKyAgICBtX3BsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXIuc3BlYWsodXR0ZXJhbmNlLT5w
bGF0Zm9ybVV0dGVyYW5jZSgpKTsKK30KKwordm9pZCBTcGVlY2hTeW50aGVzaXM6OmNhbmNlbCgp
Cit7Cit9CisKK3ZvaWQgU3BlZWNoU3ludGhlc2lzOjpwYXVzZSgpCit7Cit9CisKK3ZvaWQgU3Bl
ZWNoU3ludGhlc2lzOjpyZXN1bWUoKQoreworfQorICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOUFVUX1NQRUVDSCkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvc3BlZWNoL1NwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNl
LmNwcAkocmV2aXNpb24gMTQxNzkxKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gv
U3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcs
OSBAQAogCiBTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2U6OlNwZWVjaFN5bnRoZXNpc1V0dGVyYW5j
ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIHRleHQpCiAg
ICAgOiBDb250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlcihjb250ZXh0KQotICAgICwgbV90ZXh0KHRl
eHQpCisgICAgLCBtX3BsYXRmb3JtVXR0ZXJhbmNlKFBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVXR0
ZXJhbmNlKHRoaXMpKQogeworICAgIG1fcGxhdGZvcm1VdHRlcmFuY2Uuc2V0VGV4dCh0ZXh0KTsK
IH0KICAgICAKIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIFNwZWVjaFN5bnRoZXNpc1V0dGVyYW5j
ZTo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50aGVzaXNWb2ljZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFN5bnRoZXNpc1ZvaWNlLmgJKHJldmlzaW9u
IDE0MTc5MSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFN5bnRoZXNp
c1ZvaWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShT
UEVFQ0hfU1lOVEhFU0lTKQogCisjaW5jbHVkZSAiUGxhdGZvcm1TcGVlY2hTeW50aGVzaXNWb2lj
ZS5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTM2LDIyICszNywxOCBA
QAogCiBjbGFzcyBTcGVlY2hTeW50aGVzaXNWb2ljZSA6IHB1YmxpYyBSZWZDb3VudGVkPFNwZWVj
aFN5bnRoZXNpc1ZvaWNlPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U3BlZWNo
U3ludGhlc2lzVm9pY2U+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHZvaWNlVVJJLCBjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgbGFuZywgYm9vbCBsb2NhbFNlcnZpY2UsIGJvb2wgaXNE
ZWZhdWx0KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTcGVlY2hTeW50aGVzaXNWb2ljZT4gY3Jl
YXRlKFBhc3NSZWZQdHI8UGxhdGZvcm1TcGVlY2hTeW50aGVzaXNWb2ljZT4pOwogICAgIAotICAg
IGNvbnN0IFN0cmluZyYgdm9pY2VVUkkoKSBjb25zdCB7IHJldHVybiBtX3ZvaWNlVVJJOyB9Ci0g
ICAgY29uc3QgU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9Ci0gICAgY29u
c3QgU3RyaW5nJiBsYW5nKCkgY29uc3QgeyByZXR1cm4gbV9sYW5nOyB9Ci0gICAgYm9vbCBsb2Nh
bFNlcnZpY2UoKSBjb25zdCB7IHJldHVybiBtX2xvY2FsU2VydmljZTsgfQotICAgIGJvb2wgaXNE
ZWZhdWx0KCkgY29uc3QgeyByZXR1cm4gbV9kZWZhdWx0OyB9CisgICAgY29uc3QgU3RyaW5nJiB2
b2ljZVVSSSgpIGNvbnN0IHsgcmV0dXJuIG1fcGxhdGZvcm1Wb2ljZS0+dm9pY2VVUkkoKTsgfQor
ICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGxhdGZvcm1Wb2ljZS0+
bmFtZSgpOyB9CisgICAgY29uc3QgU3RyaW5nJiBsYW5nKCkgY29uc3QgeyByZXR1cm4gbV9wbGF0
Zm9ybVZvaWNlLT5sYW5nKCk7IH0KKyAgICBib29sIGxvY2FsU2VydmljZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcGxhdGZvcm1Wb2ljZS0+bG9jYWxTZXJ2aWNlKCk7IH0KKyAgICBib29sIGlzRGVmYXVs
dCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxhdGZvcm1Wb2ljZS0+aXNEZWZhdWx0KCk7IH0KICAgICAK
IHByaXZhdGU6Ci0gICAgU3BlZWNoU3ludGhlc2lzVm9pY2UoY29uc3QgU3RyaW5nJiB2b2ljZVVS
SSwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGxhbmcsIGJvb2wgbG9jYWxTZXJ2
aWNlLCBib29sIGlzRGVmYXVsdCk7CisgICAgZXhwbGljaXQgU3BlZWNoU3ludGhlc2lzVm9pY2Uo
UGFzc1JlZlB0cjxQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1ZvaWNlPik7CiAgICAgCi0gICAgU3Ry
aW5nIG1fdm9pY2VVUkk7Ci0gICAgU3RyaW5nIG1fbmFtZTsKLSAgICBTdHJpbmcgbV9sYW5nOwot
ICAgIGJvb2wgbV9sb2NhbFNlcnZpY2U7Ci0gICAgYm9vbCBtX2RlZmF1bHQ7CisgICAgUmVmUHRy
PFBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVm9pY2U+IG1fcGxhdGZvcm1Wb2ljZTsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNo
L1NwZWVjaFN5bnRoZXNpcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
c3BlZWNoL1NwZWVjaFN5bnRoZXNpcy5oCShyZXZpc2lvbiAxNDE3OTEpCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50aGVzaXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MjgsMTggKzI4LDIwIEBACiAKICNpZiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKIAorI2luY2x1
ZGUgIlBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlLmgiCisjaW5jbHVkZSAiUGxhdGZv
cm1TcGVlY2hTeW50aGVzaXplci5oIgogI2luY2x1ZGUgIlNwZWVjaFN5bnRoZXNpc1ZvaWNlLmgi
Ci0KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
CitjbGFzcyBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyQ2xpZW50OwogY2xhc3MgU3BlZWNoU3lu
dGhlc2lzVXR0ZXJhbmNlOwogY2xhc3MgU3BlZWNoU3ludGhlc2lzVm9pY2U7CiAgICAgCi1jbGFz
cyBTcGVlY2hTeW50aGVzaXMgOiBwdWJsaWMgUmVmQ291bnRlZDxTcGVlY2hTeW50aGVzaXM+IHsK
K2NsYXNzIFNwZWVjaFN5bnRoZXNpcyA6IHB1YmxpYyBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVy
Q2xpZW50LCBwdWJsaWMgUmVmQ291bnRlZDxTcGVlY2hTeW50aGVzaXM+IHsKIHB1YmxpYzoKICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTcGVlY2hTeW50aGVzaXM+IGNyZWF0ZSgpOwogICAgIApAQCAt
NTIsMTIgKzU0LDE3IEBACiAgICAgdm9pZCBwYXVzZSgpOwogICAgIHZvaWQgcmVzdW1lKCk7CiAg
ICAgCi0gICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTcGVlY2hTeW50aGVzaXNWb2ljZT4gPiYgZ2V0
Vm9pY2VzKCkgeyByZXR1cm4gbV92b2ljZUxpc3Q7IH07CisgICAgY29uc3QgVmVjdG9yPFJlZlB0
cjxTcGVlY2hTeW50aGVzaXNWb2ljZT4gPiYgZ2V0Vm9pY2VzKCk7CiAgICAgCiBwcml2YXRlOgog
ICAgIFNwZWVjaFN5bnRoZXNpcygpOwogICAgIAotICAgIHZvaWQgaW5pdGlhbGl6ZVZvaWNlTGlz
dCgpOworICAgIHZpcnR1YWwgdm9pZCB2b2ljZXNEaWRDaGFuZ2UoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZGlkU3RhcnRTcGVha2luZyhQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSopIHsg
fTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoU3BlYWtpbmcoUGxhdGZvcm1TcGVlY2hTeW50
aGVzaXNVdHRlcmFuY2UqKSB7IH07CisgICAgdmlydHVhbCB2b2lkIHNwZWFraW5nRXJyb3JPY2N1
cnJlZChQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSopIHsgfTsKKworICAgIFBsYXRm
b3JtU3BlZWNoU3ludGhlc2l6ZXIgbV9wbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyOwogICAgIFZl
Y3RvcjxSZWZQdHI8U3BlZWNoU3ludGhlc2lzVm9pY2U+ID4gbV92b2ljZUxpc3Q7CiB9OwogICAg
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1TcGVlY2hTeW50aGVzaXNW
b2ljZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1T
cGVlY2hTeW50aGVzaXNWb2ljZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9QbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1ZvaWNlLmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBDb21wdXRlciwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiUGxhdGZvcm1TcGVlY2hTeW50aGVzaXNWb2ljZS5oIgorCisjaWYgRU5BQkxFKFNQ
RUVDSF9TWU5USEVTSVMpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1JlZlB0cjxQbGF0
Zm9ybVNwZWVjaFN5bnRoZXNpc1ZvaWNlPiBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1ZvaWNlOjpj
cmVhdGUoY29uc3QgU3RyaW5nJiB2b2ljZVVSSSwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIGxhbmcsIGJvb2wgbG9jYWxTZXJ2aWNlLCBib29sIGlzRGVmYXVsdCkKK3sKKyAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVm9pY2Uodm9pY2VVUkks
IG5hbWUsIGxhbmcsIGxvY2FsU2VydmljZSwgaXNEZWZhdWx0KSk7Cit9CisgICAgCitQbGF0Zm9y
bVNwZWVjaFN5bnRoZXNpc1ZvaWNlOjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1ZvaWNlKGNvbnN0
IFN0cmluZyYgdm9pY2VVUkksIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBsYW5n
LCBib29sIGxvY2FsU2VydmljZSwgYm9vbCBpc0RlZmF1bHQpCisgICAgOiBtX3ZvaWNlVVJJKHZv
aWNlVVJJKQorICAgICwgbV9uYW1lKG5hbWUpCisgICAgLCBtX2xhbmcobGFuZykKKyAgICAsIG1f
bG9jYWxTZXJ2aWNlKGxvY2FsU2VydmljZSkKKyAgICAsIG1fZGVmYXVsdChpc0RlZmF1bHQpCit7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTUEVFQ0hf
U1lOVEhFU0lTKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1TcGVlY2hT
eW50aGVzaXplci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRm
b3JtU3BlZWNoU3ludGhlc2l6ZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1BsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBDb21wdXRlciwgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBsYXRmb3JtU3BlZWNoU3ludGhl
c2l6ZXJfaAorI2RlZmluZSBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyX2gKKworI2luY2x1ZGUg
IlBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVm9pY2UuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisKKyNpZiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
ICAgIAorY2xhc3MgUGxhdGZvcm1TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2U7CisKK2NsYXNzIFBs
YXRmb3JtU3BlZWNoU3ludGhlc2l6ZXJDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9p
ZCBkaWRTdGFydFNwZWFraW5nKFBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlKikgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hTcGVha2luZyhQbGF0Zm9ybVNwZWVjaFN5bnRo
ZXNpc1V0dGVyYW5jZSopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc3BlYWtpbmdFcnJvck9jY3Vy
cmVkKFBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlKikgPSAwOworICAgIAorICAgIHZp
cnR1YWwgdm9pZCB2b2ljZXNEaWRDaGFuZ2UoKSA9IDA7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVh
bCB+UGxhdGZvcm1TcGVlY2hTeW50aGVzaXplckNsaWVudCgpIHsgfQorfTsKKyAgICAKK2NsYXNz
IFBsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXIgeworcHVibGljOgorICAgIGV4cGxpY2l0IFBsYXRm
b3JtU3BlZWNoU3ludGhlc2l6ZXIoUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplckNsaWVudCopOwor
ICAgIAorICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8UGxhdGZvcm1TcGVlY2hTeW50aGVzaXNWb2lj
ZT4gPiYgdm9pY2VMaXN0KCkgY29uc3QgeyByZXR1cm4gbV92b2ljZUxpc3Q7IH0KKyAgICB2b2lk
IHNwZWFrKGNvbnN0IFBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlJik7CisgICAgCitw
cml2YXRlOgorICAgIFBsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXJDbGllbnQqIG1fc3BlZWNoU3lu
dGhlc2l6ZXJDbGllbnQ7CisgICAgVmVjdG9yPFJlZlB0cjxQbGF0Zm9ybVNwZWVjaFN5bnRoZXNp
c1ZvaWNlPiA+IG1fdm9pY2VMaXN0OworICAgIAorICAgIHZvaWQgaW5pdGlhbGl6ZVZvaWNlTGlz
dCgpOworfTsKKyAgICAKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShTUEVFQ0hfU1lOVEhFU0lTKQorCisjZW5kaWYgLy8gUGxhdGZvcm1TcGVlY2hTeW50aGVzaXpl
cl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVNwZWVjaFN5bnRoZXNp
c1V0dGVyYW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxh
dGZvcm1TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZS5o
IgorCisjaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KyAgICAKK1BsYXRmb3JtU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlOjpQbGF0Zm9ybVNwZWVjaFN5
bnRoZXNpc1V0dGVyYW5jZShQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZUNsaWVudCog
Y2xpZW50KQorICAgIDogbV9jbGllbnQoY2xpZW50KQoreworfQorICAgIAorfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplck1hYy5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1TcGVl
Y2hTeW50aGVzaXplck1hYy5tbQkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9QbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyTWFjLm1tCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIENvbXB1dGVyLCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyLmgiCisKKyNpbmNsdWRlICJQbGF0Zm9y
bVNwZWVjaFN5bnRoZXNpc1ZvaWNlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TcGVlY2hTeW50aGVz
aXNVdHRlcmFuY2UuaCIKKyNpbmNsdWRlIDxBcHBLaXQvTlNTcGVlY2hTeW50aGVzaXplci5oPgor
CisjaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
dm9pZCBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyOjppbml0aWFsaXplVm9pY2VMaXN0KCkKK3sK
KyAgICBOU1N0cmluZyAqZGVmYXVsdFZvaWNlVVJJID0gW05TU3BlZWNoU3ludGhlc2l6ZXIgZGVm
YXVsdFZvaWNlXTsKKyAgICBOU0FycmF5ICphdmFpbGFibGVWb2ljZXMgPSBbTlNTcGVlY2hTeW50
aGVzaXplciBhdmFpbGFibGVWb2ljZXNdOworICAgIE5TVUludGVnZXIgY291bnQgPSBbYXZhaWxh
YmxlVm9pY2VzIGNvdW50XTsKKyAgICBmb3IgKE5TVUludGVnZXIgayA9IDA7IGsgPCBjb3VudDsg
aysrKSB7CisgICAgICAgIE5TU3RyaW5nICp2b2ljZU5hbWUgPSBbYXZhaWxhYmxlVm9pY2VzIG9i
amVjdEF0SW5kZXg6a107CisgICAgICAgIE5TRGljdGlvbmFyeSAqYXR0cmlidXRlcyA9IFtOU1Nw
ZWVjaFN5bnRoZXNpemVyIGF0dHJpYnV0ZXNGb3JWb2ljZTp2b2ljZU5hbWVdOworICAgICAgICAK
KyAgICAgICAgTlNTdHJpbmcgKnZvaWNlVVJJID0gW2F0dHJpYnV0ZXMgb2JqZWN0Rm9yS2V5Ok5T
Vm9pY2VJZGVudGlmaWVyXTsKKyAgICAgICAgTlNTdHJpbmcgKm5hbWUgPSBbYXR0cmlidXRlcyBv
YmplY3RGb3JLZXk6TlNWb2ljZU5hbWVdOworICAgICAgICBOU1N0cmluZyAqbGFuZ3VhZ2UgPSBb
YXR0cmlidXRlcyBvYmplY3RGb3JLZXk6TlNWb2ljZUxvY2FsZUlkZW50aWZpZXJdOworICAgICAg
ICAKKyAgICAgICAgLy8gQ2hhbmdlIHRvIEJDUC00NyBmb3JtYXQgYXMgZGVmaW5lZCBieSBzcGVj
LgorICAgICAgICBsYW5ndWFnZSA9IFtsYW5ndWFnZSBzdHJpbmdCeVJlcGxhY2luZ09jY3VycmVu
Y2VzT2ZTdHJpbmc6QCJfIiB3aXRoU3RyaW5nOkAiLSJdOworICAgICAgICAKKyAgICAgICAgYm9v
bCBpc0RlZmF1bHQgPSBbZGVmYXVsdFZvaWNlVVJJIGlzRXF1YWxUb1N0cmluZzp2b2ljZVVSSV07
CisgICAgICAgIAorICAgICAgICBtX3ZvaWNlTGlzdC5hcHBlbmQoUGxhdGZvcm1TcGVlY2hTeW50
aGVzaXNWb2ljZTo6Y3JlYXRlKHZvaWNlVVJJLCBuYW1lLCBsYW5ndWFnZSwgdHJ1ZSwgaXNEZWZh
dWx0KSk7CisgICAgfQorfQorICAgIAordm9pZCBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyOjpz
cGVhayhjb25zdCBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSYpCit7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lT
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtU3BlZWNoU3ludGhl
c2lzTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0
Zm9ybVNwZWVjaFN5bnRoZXNpc01hYy5tbQkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9QbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc01hYy5tbQkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBDb21wdXRl
ciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiUGxhdGZvcm1TcGVlY2hTeW50aGVzaXMuaCIKKworI2luY2x1ZGUgIlNwZWVj
aFN5bnRoZXNpc1ZvaWNlLmgiCisjaW5jbHVkZSAiU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlLmgi
CisjaW5jbHVkZSA8QXBwS2l0L05TU3BlZWNoU3ludGhlc2l6ZXIuaD4KKworI2lmIEVOQUJMRShT
UEVFQ0hfU1lOVEhFU0lTKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NSZWZQdHI8UGxh
dGZvcm1TcGVlY2hTeW50aGVzaXM+IFBsYXRmb3JtU3BlZWNoU3ludGhlc2lzOjpjcmVhdGUoU3Bl
ZWNoU3ludGhlc2lzKiBzeW50aGVzaXMpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQbGF0
Zm9ybVNwZWVjaFN5bnRoZXNpcyhzeW50aGVzaXMpKTsKK30KKworUGxhdGZvcm1TcGVlY2hTeW50
aGVzaXM6OlBsYXRmb3JtU3BlZWNoU3ludGhlc2lzKFNwZWVjaFN5bnRoZXNpcyogc3ludGhlc2lz
KQorICAgIDogbV9zcGVlY2hTeW50aGVzaXMoc3ludGhlc2lzKQoreworfQorICAgIAordm9pZCBQ
bGF0Zm9ybVNwZWVjaFN5bnRoZXNpczo6cGxhdGZvcm1TcGVhayhTcGVlY2hTeW50aGVzaXNVdHRl
cmFuY2UqKQoreworfQorICAgIAordm9pZCBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpczo6cGxhdGZv
cm1Jbml0aWFsaXplVm9pY2VMaXN0KFZlY3RvcjxSZWZQdHI8U3BlZWNoU3ludGhlc2lzVm9pY2U+
ID4mIHZvaWNlcyk7Cit7CisgICAgTlNTdHJpbmcgKmRlZmF1bHRWb2ljZVVSSSA9IFtOU1NwZWVj
aFN5bnRoZXNpemVyIGRlZmF1bHRWb2ljZV07CisgICAgTlNBcnJheSAqYXZhaWxhYmxlVm9pY2Vz
ID0gW05TU3BlZWNoU3ludGhlc2l6ZXIgYXZhaWxhYmxlVm9pY2VzXTsKKyAgICBOU1VJbnRlZ2Vy
IGNvdW50ID0gW2F2YWlsYWJsZVZvaWNlcyBjb3VudF07CisgICAgZm9yIChOU1VJbnRlZ2VyIGsg
PSAwOyBrIDwgY291bnQ7IGsrKykgeworICAgICAgICBOU1N0cmluZyAqdm9pY2VOYW1lID0gW2F2
YWlsYWJsZVZvaWNlcyBvYmplY3RBdEluZGV4OmtdOworICAgICAgICBOU0RpY3Rpb25hcnkgKmF0
dHJpYnV0ZXMgPSBbTlNTcGVlY2hTeW50aGVzaXplciBhdHRyaWJ1dGVzRm9yVm9pY2U6dm9pY2VO
YW1lXTsKKyAgICAgICAgCisgICAgICAgIE5TU3RyaW5nICp2b2ljZVVSSSA9IFthdHRyaWJ1dGVz
IG9iamVjdEZvcktleTpOU1ZvaWNlSWRlbnRpZmllcl07CisgICAgICAgIE5TU3RyaW5nICpuYW1l
ID0gW2F0dHJpYnV0ZXMgb2JqZWN0Rm9yS2V5Ok5TVm9pY2VOYW1lXTsKKyAgICAgICAgTlNTdHJp
bmcgKmxhbmd1YWdlID0gW2F0dHJpYnV0ZXMgb2JqZWN0Rm9yS2V5Ok5TVm9pY2VMb2NhbGVJZGVu
dGlmaWVyXTsKKyAgICAgICAgCisgICAgICAgIC8vIENoYW5nZSB0byBCQ1AtNDcgZm9ybWF0IGFz
IGRlZmluZWQgYnkgc3BlYy4KKyAgICAgICAgbGFuZ3VhZ2UgPSBbbGFuZ3VhZ2Ugc3RyaW5nQnlS
ZXBsYWNpbmdPY2N1cnJlbmNlc09mU3RyaW5nOkAiXyIgd2l0aFN0cmluZzpAIi0iXTsKKyAgICAg
ICAgCisgICAgICAgIGJvb2wgaXNEZWZhdWx0ID0gW2RlZmF1bHRWb2ljZVVSSSBpc0VxdWFsVG9T
dHJpbmc6dm9pY2VVUkldOworICAgICAgICAKKyAgICAgICAgdm9pY2VzLmFwcGVuZChTcGVlY2hT
eW50aGVzaXNWb2ljZTo6Y3JlYXRlKHZvaWNlVVJJLCBuYW1lLCBsYW5ndWFnZSwgdHJ1ZSwgaXNE
ZWZhdWx0KSk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1BsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1BsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXIuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplci5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXIuaCIKKwor
I2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAg
CitQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyOjpQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyKFBs
YXRmb3JtU3BlZWNoU3ludGhlc2l6ZXJDbGllbnQqIGNsaWVudCkKKyAgICA6IG1fc3BlZWNoU3lu
dGhlc2l6ZXJDbGllbnQoY2xpZW50KQoreworfQorICAgIAorfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVNwZWVjaFN5bnRoZXNpcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtU3BlZWNoU3ludGhlc2lzLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVNwZWVjaFN5bnRoZXNpcy5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgUGxhdGZvcm1TcGVlY2hTeW50aGVzaXNfaAorI2RlZmluZSBQbGF0Zm9ybVNwZWVjaFN5bnRo
ZXNpc19oCisKKyNpZiBFTkFCTEUoU1BFRUNIX1NZTlRIRVNJUykKKworI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK2NsYXNzIFNwZWVjaFN5
bnRoZXNpczsKK2NsYXNzIFNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZTsKK2NsYXNzIFNwZWVjaFN5
bnRoZXNpc1ZvaWNlOworICAgIAorY2xhc3MgUGxhdGZvcm1TcGVlY2hTeW50aGVzaXMgOiBwdWJs
aWMgUmVmQ291bnRlZDxQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpcz4geworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFBsYXRmb3JtU3BlZWNoU3ludGhlc2lzPiBjcmVhdGUoU3BlZWNoU3lu
dGhlc2lzKik7CisgICAgCisgICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemVWb2ljZUxpc3QoVmVj
dG9yPFJlZlB0cjxTcGVlY2hTeW50aGVzaXNWb2ljZT4gPiYpOworICAgIHZvaWQgcGxhdGZvcm1T
cGVhayhTcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UqKTsKKyAgICAKK3ByaXZhdGU6CisgICAgUGxh
dGZvcm1TcGVlY2hTeW50aGVzaXMoU3BlZWNoU3ludGhlc2lzKik7CisKKyAgICBTcGVlY2hTeW50
aGVzaXMqIG1fc3BlZWNoU3ludGhzaXM7Cit9OworICAgIAorfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCisKKyNlbmRpZiAvLyBQbGF0
Zm9ybVNwZWVjaFN5bnRoZXNpc19oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0
Zm9ybVNwZWVjaFN5bnRoZXNpc1ZvaWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vUGxhdGZvcm1TcGVlY2hTeW50aGVzaXNWb2ljZS5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1TcGVlY2hTeW50aGVzaXNWb2ljZS5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
UGxhdGZvcm1TcGVlY2hTeW50aGVzaXNWb2ljZV9oCisjZGVmaW5lIFBsYXRmb3JtU3BlZWNoU3lu
dGhlc2lzVm9pY2VfaAorCisjaWYgRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMpCisKKyNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
UGxhdGZvcm1TcGVlY2hTeW50aGVzaXNWb2ljZSA6IHB1YmxpYyBSZWZDb3VudGVkPFBsYXRmb3Jt
U3BlZWNoU3ludGhlc2lzVm9pY2U+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxQ
bGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1ZvaWNlPiBjcmVhdGUoY29uc3QgU3RyaW5nJiB2b2ljZVVS
SSwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGxhbmcsIGJvb2wgbG9jYWxTZXJ2
aWNlLCBib29sIGlzRGVmYXVsdCk7CisgICAgCisgICAgY29uc3QgU3RyaW5nJiB2b2ljZVVSSSgp
IGNvbnN0IHsgcmV0dXJuIG1fdm9pY2VVUkk7IH0KKyAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSBj
b25zdCB7IHJldHVybiBtX25hbWU7IH0KKyAgICBjb25zdCBTdHJpbmcmIGxhbmcoKSBjb25zdCB7
IHJldHVybiBtX2xhbmc7IH0KKyAgICBib29sIGxvY2FsU2VydmljZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbG9jYWxTZXJ2aWNlOyB9CisgICAgYm9vbCBpc0RlZmF1bHQoKSBjb25zdCB7IHJldHVybiBt
X2RlZmF1bHQ7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgUGxhdGZvcm1TcGVlY2hTeW50aGVzaXNW
b2ljZShjb25zdCBTdHJpbmcmIHZvaWNlVVJJLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0
cmluZyYgbGFuZywgYm9vbCBsb2NhbFNlcnZpY2UsIGJvb2wgaXNEZWZhdWx0KTsKKworICAgIFN0
cmluZyBtX3ZvaWNlVVJJOworICAgIFN0cmluZyBtX25hbWU7CisgICAgU3RyaW5nIG1fbGFuZzsK
KyAgICBib29sIG1fbG9jYWxTZXJ2aWNlOworICAgIGJvb2wgbV9kZWZhdWx0OworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFNQRUVDSF9TWU5USEVTSVMp
CisKKyNlbmRpZiAvLyBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1ZvaWNlX2gKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1TcGVlY2hTeW50aGVz
aXNVdHRlcmFuY2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bs
YXRmb3JtU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNp
c1V0dGVyYW5jZV9oCisjZGVmaW5lIFBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlX2gK
KworI2lmIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQorCisjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK2NsYXNzIFBsYXRmb3JtU3Bl
ZWNoU3ludGhlc2lzVXR0ZXJhbmNlQ2xpZW50IHsKK3B1YmxpYzoKKyAgICAvLyBJbXBsZW1lbnQg
bWV0aG9kcyBhcyBuZWVkZWQuCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+UGxhdGZvcm1TcGVl
Y2hTeW50aGVzaXNVdHRlcmFuY2VDbGllbnQoKSB7IH0KK307CisgICAgCitjbGFzcyBQbGF0Zm9y
bVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZSB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgUGxhdGZv
cm1TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UoUGxhdGZvcm1TcGVlY2hTeW50aGVzaXNVdHRlcmFu
Y2VDbGllbnQqKTsKKyAgICAKKyAgICBjb25zdCBTdHJpbmcmIHRleHQoKSBjb25zdCB7IHJldHVy
biBtX3RleHQ7IH0KKyAgICB2b2lkIHNldFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0KSB7IG1fdGV4
dCA9IHRleHQ7IH0KKyAgICAKKyAgICBjb25zdCBTdHJpbmcmIGxhbmcoKSBjb25zdCB7IHJldHVy
biBtX2xhbmc7IH0KKyAgICB2b2lkIHNldExhbmcoY29uc3QgU3RyaW5nJiBsYW5nKSB7IG1fbGFu
ZyA9IGxhbmc7IH0KKyAgICAKKyAgICBjb25zdCBTdHJpbmcmIHZvaWNlVVJJKCkgY29uc3QgeyBy
ZXR1cm4gbV92b2ljZVVSSTsgfQorICAgIHZvaWQgc2V0Vm9pY2VVUkkoY29uc3QgU3RyaW5nJiB2
b2ljZVVSSSkgeyBtX3ZvaWNlVVJJID0gdm9pY2VVUkk7IH0KKyAgICAKKyAgICBmbG9hdCB2b2x1
bWUoKSBjb25zdCB7IHJldHVybiBtX3ZvbHVtZTsgfQorICAgIHZvaWQgc2V0Vm9sdW1lKGZsb2F0
IHZvbHVtZSkgeyBtX3ZvbHVtZSA9IHZvbHVtZTsgfQorICAgIAorICAgIGZsb2F0IHJhdGUoKSBj
b25zdCB7IHJldHVybiBtX3JhdGU7IH0KKyAgICB2b2lkIHNldFJhdGUoZmxvYXQgcmF0ZSkgeyBt
X3JhdGUgPSByYXRlOyB9CisgICAgCisgICAgZmxvYXQgcGl0Y2goKSBjb25zdCB7IHJldHVybiBt
X3BpdGNoOyB9CisgICAgdm9pZCBzZXRQaXRjaChmbG9hdCBwaXRjaCkgeyBtX3BpdGNoID0gcGl0
Y2g7IH0KKworcHJpdmF0ZToKKyAgICBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZUNs
aWVudCogbV9jbGllbnQ7CisgICAgU3RyaW5nIG1fdGV4dDsKKyAgICBTdHJpbmcgbV9sYW5nOwor
ICAgIFN0cmluZyBtX3ZvaWNlVVJJOworICAgIGZsb2F0IG1fdm9sdW1lOworICAgIGZsb2F0IG1f
cmF0ZTsKKyAgICBmbG9hdCBtX3BpdGNoOworfTsKKyAgICAKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRShTUEVFQ0hfU1lOVEhFU0lTKQorCisjZW5kaWYgLy8gUGxh
dGZvcm1TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2VfaApJbmRleDogU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTQxNzkxKQor
KysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC03NDksOSArNzQ5LDE2IEBACiAJCTI5MTdCNTY2MTQ3MzQ5OTUwMDUyQzlE
MCAvKiBMYXllckZsdXNoU2NoZWR1bGVyTWFjLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5MTdCNTY1MTQ3MzQ5OTUwMDUyQzlEMCAvKiBMYXllckZs
dXNoU2NoZWR1bGVyTWFjLmNwcCAqLzsgfTsKIAkJMjkxOUExRTkxNkIzMzc2NjAwNzg3MjEzIC8q
IENvbnRlbnRGaWx0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDI5MTlBMUU4MTZCMzM3NjYwMDc4NzIxMyAvKiBDb250ZW50RmlsdGVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMjkxOUExRUIxNkIz
Mzc4OTAwNzg3MjEzIC8qIENvbnRlbnRGaWx0ZXJNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyOTE5QTFFQTE2QjMzNzg5MDA3ODcyMTMgLyogQ29u
dGVudEZpbHRlck1hYy5tbSAqLzsgfTsKKwkJMjkzNDk0MEExNkMwMkMwNzAwOTAxMzE4IC8qIFBs
YXRmb3JtU3BlZWNoU3ludGhlc2lzVm9pY2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMjUyN0NDOTMxNkJGOTJFQzAwOUREQUMwIC8qIFBsYXRmb3Jt
U3BlZWNoU3ludGhlc2lzVm9pY2UuY3BwICovOyB9OworCQkyOTM0OTQwQjE2QzAyQzBBMDA5MDEz
MTggLyogUGxhdGZvcm1TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjUyN0NDOTUxNkJGOTVERDAwOUREQUMw
IC8qIFBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlLmNwcCAqLzsgfTsKIAkJMjkzRUFF
MUYxMzU2QjJGRTAwNjdBQ0Y5IC8qIFJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjkzRUFFMUUxMzU2QjJGRTAw
NjdBQ0Y5IC8qIFJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTI5M0VBRTIxMTM1NkIzMkUwMDY3QUNGOSAv
KiBSdW50aW1lQXBwbGljYXRpb25DaGVja3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMjkzRUFFMjAxMzU2QjMyRTAwNjdBQ0Y5IC8qIFJ1bnRpbWVB
cHBsaWNhdGlvbkNoZWNrcy5jcHAgKi87IH07CiAJCTI5NDg5RkM3MTJDMDBGMDMwMEQ4M0YwRiAv
KiBBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMjk0ODlGQzUxMkMwMEYwMzAwRDgzRjBGIC8qIEFjY2Vzc2liaWxp
dHlTY3JvbGxWaWV3LmggKi87IH07CisJCTI5N0JFM0Q1MTZDMDNDMDgwMDMzMTZCRCAvKiBQbGF0
Zm9ybVNwZWVjaFN5bnRoZXNpc1V0dGVyYW5jZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMjUyN0NDOTExNkJGOEJBMTAwOUREQUMwIC8qIFBsYXRmb3Jt
U3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlLmggKi87IH07CisJCTI5N0JFM0Q2MTZDMDNDMEIwMDMz
MTZCRCAvKiBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpc1ZvaWNlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTI3Q0M5MjE2QkY5MEI0MDA5RERBQzAgLyog
UGxhdGZvcm1TcGVlY2hTeW50aGVzaXNWb2ljZS5oICovOyB9OworCQkyOTdCRTNENzE2QzAzQzBF
MDAzMzE2QkQgLyogUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjlFNEQ4REYxNkIwOTQwRjAwQzg0NzA0IC8q
IFBsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXIuaCAqLzsgfTsKKwkJMjk3QkUzRDgxNkMwM0NDRTAw
MzMxNkJEIC8qIFBsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXJNYWMubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyOUU0RDhFMDE2QjA5NTk4MDBDODQ3MDQg
LyogUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplck1hYy5tbSAqLzsgfTsKKwkJMjk3QkUzREExNkMw
NDNEODAwMzMxNkJEIC8qIFBsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjk3QkUzRDkxNkMwNDNEODAwMzMx
NkJEIC8qIFBsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXIuY3BwICovOyB9OwogCQkyOUEzMDlBQzE1
NjFDOTlCMDBCQkQ4RTUgLyogUnVuTG9vcENGLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5QTMwOUFCMTU2MUM5OUIwMEJCRDhFNSAvKiBSdW5Mb29w
Q0YuY3BwICovOyB9OwogCQkyOUEzMDlCMDE1NjFDQUM0MDBCQkQ4RTUgLyogVmlzaXRlZExpbmtz
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5QTMw
OUFFMTU2MUNBQzQwMEJCRDhFNSAvKiBWaXNpdGVkTGlua3MuY3BwICovOyB9OwogCQkyOUEzMDlC
MTE1NjFDQUM0MDBCQkQ4RTUgLyogVmlzaXRlZExpbmtzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyOUEzMDlBRjE1NjFDQUM0MDBCQkQ4RTUgLyogVmlz
aXRlZExpbmtzLmggKi87IH07CkBAIC00NjQyLDcgKzQ2NDksNiBAQAogCQlBQTJBNUFENTE2QTQ4
NjE0MDA5NzVBMjUgLyogU3BlZWNoU3ludGhlc2lzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFBMkE1QUJEMTZBNDg1RDUwMDk3NUEyNSAvKiBTcGVl
Y2hTeW50aGVzaXMuY3BwICovOyB9OwogCQlBQTJBNUFENjE2QTQ4NjE2MDA5NzVBMjUgLyogRE9N
V2luZG93U3BlZWNoU3ludGhlc2lzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBQTJBNUFCOTE2QTQ4NUQ1MDA5NzVBMjUgLyogRE9NV2luZG93U3BlZWNo
U3ludGhlc2lzLmggKi87IH07CiAJCUFBMkE1QUQ3MTZBNDg2MUEwMDk3NUEyNSAvKiBET01XaW5k
b3dTcGVlY2hTeW50aGVzaXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQUEyQTVBQjgxNkE0ODVENTAwOTc1QTI1IC8qIERPTVdpbmRvd1NwZWVjaFN5
bnRoZXNpcy5jcHAgKi87IH07Ci0JCUFBMkE1QUQ4MTZBNDg2MUQwMDk3NUEyNSAvKiBTcGVlY2hT
eW50aGVzaXNNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBQTJBNUFCQzE2QTQ4NUQ1MDA5NzVBMjUgLyogU3BlZWNoU3ludGhlc2lzTWFjLm1tICov
OyB9OwogCQlBQTRDM0E3NjBCMkIxNjc5MDAyMzM0QTIgLyogU3R5bGVFbGVtZW50LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFBNEMzQTc0MEIyQjE2
NzkwMDIzMzRBMiAvKiBTdHlsZUVsZW1lbnQuY3BwICovOyB9OwogCQlBQTRDM0E3NzBCMkIxNjc5
MDAyMzM0QTIgLyogU3R5bGVFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBQTRDM0E3NTBCMkIxNjc5MDAyMzM0QTIgLyogU3R5bGVFbGVtZW50
LmggKi87IH07CiAJCUFBNzMxODNFMTU5MjU1QjkwMEE5M0U2RSAvKiBJbmplY3RlZFNjcmlwdENh
bnZhc01vZHVsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBQTczMTgzQzE1OTI1NUI5MDBBOTNFNkUgLyogSW5qZWN0ZWRTY3JpcHRDYW52YXNNb2R1
bGUuY3BwICovOyB9OwpAQCAtODAwNiw2ICs4MDEyLDEwIEBACiAJCTI0RDkxMkJDMTNDQTlBOTcw
MEQyMTkxNSAvKiBTVkdHbHlwaFJlZkVsZW1lbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IFNWR0dseXBoUmVmRWxlbWVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0
RjU0RUFBMTAxRkU5MTQwMDBBRTc0MSAvKiBBcHBsaWNhdGlvbkNhY2hlSG9zdC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcHBsaWNhdGlvbkNhY2hlSG9zdC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0RjU0RUFCMTAxRkU5MTQwMDBBRTc0MSAv
KiBBcHBsaWNhdGlvbkNhY2hlSG9zdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBcHBsaWNhdGlvbkNhY2hlSG9zdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQky
NTI3Q0M5MTE2QkY4QkExMDA5RERBQzAgLyogUGxhdGZvcm1TcGVlY2hTeW50aGVzaXNVdHRlcmFu
Y2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjUyN0NDOTIxNkJGOTBCNDAwOUREQUMwIC8q
IFBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVm9pY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1T
cGVlY2hTeW50aGVzaXNWb2ljZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNTI3
Q0M5MzE2QkY5MkVDMDA5RERBQzAgLyogUGxhdGZvcm1TcGVlY2hTeW50aGVzaXNWb2ljZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQbGF0Zm9ybVNwZWVjaFN5bnRo
ZXNpc1ZvaWNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjUyN0NDOTUxNkJG
OTVERDAwOUREQUMwIC8qIFBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVXR0ZXJhbmNlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBsYXRmb3JtU3BlZWNoU3ludGhlc2lz
VXR0ZXJhbmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjU0MkY0RDgxMTY2
QzI1QTAwRTg5QTg2IC8qIFVzZXJHZXN0dXJlSW5kaWNhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVzZXJHZXN0dXJlSW5kaWNhdG9yLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjU0MkY0RDkxMTY2QzI1QTAwRTg5QTg2IC8qIFVzZXJHZXN0
dXJlSW5kaWNhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVzZXJHZXN0
dXJlSW5kaWNhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI2NTU0MTM3MTQ4
OTgxMUMwMDBERkM1RCAvKiBLZXlFdmVudENvZGVzSU9TLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEtleUV2ZW50Q29kZXNJT1MuaDsgcGF0aCA9IGlvcy9LZXlFdmVudENvZGVz
SU9TLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04MDI4LDYgKzgwMzgsNyBAQAog
CQkyOTNFQUUxRTEzNTZCMkZFMDA2N0FDRjkgLyogUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNr
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyOTNFQUUyMDEzNTZCMzJFMDA2N0FD
RjkgLyogUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTI5NDg5RkM1MTJDMDBGMDMwMEQ4M0YwRiAvKiBBY2Nlc3NpYmls
aXR5U2Nyb2xsVmlldy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBY2Nlc3Np
YmlsaXR5U2Nyb2xsVmlldy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyOTdCRTNE
OTE2QzA0M0Q4MDAzMzE2QkQgLyogUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjk4MUNBOUQxMzE4MjJFQzAwRDEy
RjJBIC8qIEFjY2Vzc2liaWxpdHlBUklBR3JpZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBY2Nl
c3NpYmlsaXR5QVJJQUdyaWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyOTgx
Q0E5RTEzMTgyMkVDMDBEMTJGMkEgLyogQWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBBY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjk4MUNBOUYxMzE4MjJFQzAwRDEyRjJBIC8qIEFjY2Vzc2li
aWxpdHlBUklBR3JpZFJvdy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBY2Nlc3NpYmlsaXR5QVJJ
QUdyaWRSb3cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODA3NSw2ICs4MDg2
LDggQEAKIAkJMjlBQ0IyMTMxNDNFNzQ5ODAwNkJDQTVGIC8qIEFjY2Vzc2liaWxpdHlNb2NrT2Jq
ZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFjY2Vzc2liaWxp
dHlNb2NrT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjlEN0JDRjUx
NDQ0QUY1ODAwNzA2MTlDIC8qIEFjY2Vzc2liaWxpdHlTcGluQnV0dG9uLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFjY2Vzc2liaWxpdHlTcGluQnV0dG9uLmNwcDsg
cGF0aCA9IGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNwaW5CdXR0b24uY3BwOyBzb3VyY2VU
cmVlID0gU09VUkNFX1JPT1Q7IH07CiAJCTI5RDdCQ0Y5MTQ0NEFGN0QwMDcwNjE5QyAvKiBBY2Nl
c3NpYmlsaXR5U3BpbkJ1dHRvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBB
Y2Nlc3NpYmlsaXR5U3BpbkJ1dHRvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQky
OUU0RDhERjE2QjA5NDBGMDBDODQ3MDQgLyogUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTI5RTREOEUwMTZCMDk1OTgwMEM4NDcwNCAvKiBQbGF0Zm9ybVNwZWVj
aFN5bnRoZXNpemVyTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMkI0MjM1OUYxNTI1MEY2MDAwREJCQ0Q4IC8qIFJlbmRlclNWR0VsbGlwc2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyU1ZHRWxsaXBzZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJCNDIzNUEwMTUyNTBGNjAwMERCQkNE
OCAvKiBSZW5kZXJTVkdFbGxpcHNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJlbmRlclNWR0VsbGlwc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkJFOEUy
QzYxMkE1ODlFQzAwRkFENTUwIC8qIEhUTUxNZXRhQ2hhcnNldFBhcnNlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBIVE1MTWV0YUNoYXJzZXRQYXJzZXIuaDsgcGF0aCA9IHBh
cnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTExOTY4LDcgKzExOTgxLDYgQEAKIAkJQUEyQTVBQjgxNkE0ODVENTAwOTc1QTI1IC8qIERP
TVdpbmRvd1NwZWVjaFN5bnRoZXNpcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBET01XaW5kb3dT
cGVlY2hTeW50aGVzaXMuY3BwOyBwYXRoID0gTW9kdWxlcy9zcGVlY2gvRE9NV2luZG93U3BlZWNo
U3ludGhlc2lzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQUEyQTVBQjkxNkE0
ODVENTAwOTc1QTI1IC8qIERPTVdpbmRvd1NwZWVjaFN5bnRoZXNpcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBET01XaW5kb3dTcGVlY2hTeW50aGVzaXMuaDsgcGF0aCA9IE1vZHVsZXMvc3BlZWNoL0RPTVdp
bmRvd1NwZWVjaFN5bnRoZXNpcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBQTJB
NUFCQTE2QTQ4NUQ1MDA5NzVBMjUgLyogRE9NV2luZG93U3BlZWNoU3ludGhlc2lzLmlkbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUg
PSBET01XaW5kb3dTcGVlY2hTeW50aGVzaXMuaWRsOyBwYXRoID0gTW9kdWxlcy9zcGVlY2gvRE9N
V2luZG93U3BlZWNoU3ludGhlc2lzLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
QUEyQTVBQkMxNkE0ODVENTAwOTc1QTI1IC8qIFNwZWVjaFN5bnRoZXNpc01hYy5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gU3BlZWNoU3ludGhlc2lzTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBQTJBNUFCRDE2QTQ4NUQ1MDA5NzVBMjUgLyogU3BlZWNoU3ludGhlc2lzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFNwZWVjaFN5bnRoZXNpcy5jcHA7IHBhdGggPSBNb2R1bGVz
L3NwZWVjaC9TcGVlY2hTeW50aGVzaXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBQTJBNUFCRTE2QTQ4NUQ1MDA5NzVBMjUgLyogU3BlZWNoU3ludGhlc2lzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IFNwZWVjaFN5bnRoZXNpcy5oOyBwYXRoID0gTW9kdWxlcy9zcGVlY2gvU3BlZWNoU3lu
dGhlc2lzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFBMkE1QUJGMTZBNDg1RDUw
MDk3NUEyNSAvKiBTcGVlY2hTeW50aGVzaXMuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFNwZWVjaFN5bnRoZXNpcy5pZGw7
IHBhdGggPSBNb2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50aGVzaXMuaWRsOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTYxMjYsNiArMTYxMzgsNyBAQAogCQkJCUJDQUE0ODZEMTRBMDUy
NTMwMDg4RkFDNCAvKiBQbGF0Zm9ybUV2ZW50RmFjdG9yeU1hYy5tbSAqLywKIAkJCQlDNUY3NjVC
QTE0RTFFQ0Y0MDA2Qzg5OUIgLyogUGxhdGZvcm1QYXN0ZWJvYXJkTWFjLm1tICovLAogCQkJCUJD
OTREMTA3MEMyNzRGODgwMDZCQzYxNyAvKiBQbGF0Zm9ybVNjcmVlbk1hYy5tbSAqLywKKwkJCQky
OUU0RDhFMDE2QjA5NTk4MDBDODQ3MDQgLyogUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplck1hYy5t
bSAqLywKIAkJCQlEMzlEMDA2QzExRjhFMzA4MDA2MDQxRjIgLyogUG9wdXBNZW51TWFjLmggKi8s
CiAJCQkJMDY2OEUxOEUwQUREOTY0MDAwNDEyOEUwIC8qIFBvcHVwTWVudU1hYy5tbSAqLywKIAkJ
CQlFNEQ2ODc3NjBFRDdBRTNEMDA2RUE5NzggLyogUHVyZ2VhYmxlQnVmZmVyTWFjLmNwcCAqLywK
QEAgLTE5NzExLDcgKzE5NzI0LDYgQEAKIAkJQUEyQTVBQjcxNkE0ODVBNDAwOTc1QTI1IC8qIHNw
ZWVjaCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJQUEy
QTVBQkIxNkE0ODVENTAwOTc1QTI1IC8qIG1hYyAqLywKIAkJCQlBQTJBNUFCODE2QTQ4NUQ1MDA5
NzVBMjUgLyogRE9NV2luZG93U3BlZWNoU3ludGhlc2lzLmNwcCAqLywKIAkJCQlBQTJBNUFCOTE2
QTQ4NUQ1MDA5NzVBMjUgLyogRE9NV2luZG93U3BlZWNoU3ludGhlc2lzLmggKi8sCiAJCQkJQUEy
QTVBQkExNkE0ODVENTAwOTc1QTI1IC8qIERPTVdpbmRvd1NwZWVjaFN5bnRoZXNpcy5pZGwgKi8s
CkBAIC0xOTczMSwxNSArMTk3NDMsNiBAQAogCQkJbmFtZSA9IHNwZWVjaDsKIAkJCXNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7CiAJCX07Ci0JCUFBMkE1QUJCMTZBNDg1RDUwMDk3NUEyNSAvKiBtYWMg
Ki8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCUFBMkE1QUJD
MTZBNDg1RDUwMDk3NUEyNSAvKiBTcGVlY2hTeW50aGVzaXNNYWMubW0gKi8sCi0JCQkpOwotCQkJ
bmFtZSA9IG1hYzsKLQkJCXBhdGggPSBNb2R1bGVzL3NwZWVjaC9tYWM7Ci0JCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOwotCQl9OwogCQlBQTdGRUU5QjE2QTQ5MUExMDA0QzBDMzMgLyogU3BlZWNo
ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTIxNDM5LDYg
KzIxNDQyLDEyIEBACiAJCQkJOTM1QzQ3NjcwOUFDNEQ0MzAwQTZBQUI0IC8qIFBsYXRmb3JtTW91
c2VFdmVudC5oICovLAogCQkJCUM1QkFDMTZGMTRFMzBFNDcwMDAwODgzNyAvKiBQbGF0Zm9ybVBh
c3RlYm9hcmQuaCAqLywKIAkJCQlCQ0VDMDFENjBDMjc0RUI0MDA5RjRFQzkgLyogUGxhdGZvcm1T
Y3JlZW4uaCAqLywKKwkJCQkyOTdCRTNEOTE2QzA0M0Q4MDAzMzE2QkQgLyogUGxhdGZvcm1TcGVl
Y2hTeW50aGVzaXplci5jcHAgKi8sCisJCQkJMjlFNEQ4REYxNkIwOTQwRjAwQzg0NzA0IC8qIFBs
YXRmb3JtU3BlZWNoU3ludGhlc2l6ZXIuaCAqLywKKwkJCQkyNTI3Q0M5MzE2QkY5MkVDMDA5RERB
QzAgLyogUGxhdGZvcm1TcGVlY2hTeW50aGVzaXNWb2ljZS5jcHAgKi8sCisJCQkJMjUyN0NDOTIx
NkJGOTBCNDAwOUREQUMwIC8qIFBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVm9pY2UuaCAqLywKKwkJ
CQkyNTI3Q0M5NTE2QkY5NUREMDA5RERBQzAgLyogUGxhdGZvcm1TcGVlY2hTeW50aGVzaXNVdHRl
cmFuY2UuY3BwICovLAorCQkJCTI1MjdDQzkxMTZCRjhCQTEwMDlEREFDMCAvKiBQbGF0Zm9ybVNw
ZWVjaFN5bnRoZXNpc1V0dGVyYW5jZS5oICovLAogCQkJCTFBRDhGODFBMTFDQUI5RTkwMEU5M0U1
NCAvKiBQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwICovLAogCQkJCTFBRDhGODE5MTFDQUI5RTkwMEU5
M0U1NCAvKiBQbGF0Zm9ybVN0cmF0ZWdpZXMuaCAqLywKIAkJCQk5MzVDNDc2QTA5QUM0RDRGMDBB
NkFBQjQgLyogUGxhdGZvcm1XaGVlbEV2ZW50LmggKi8sCkBAIC0yNTM0Myw2ICsyNTM1Miw5IEBA
CiAJCQkJOTM1QzQ3NjkwOUFDNEQ0MzAwQTZBQUI0IC8qIFBsYXRmb3JtTW91c2VFdmVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQzU5ODkwNTgxNEU5QzI5OTAwRThEMThCIC8qIFBsYXRmb3JtUGFz
dGVib2FyZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFQzAxRDcwQzI3NEVCNDAwOUY0RUM5IC8q
IFBsYXRmb3JtU2NyZWVuLmggaW4gSGVhZGVycyAqLywKKwkJCQkyOTdCRTNENTE2QzAzQzA4MDAz
MzE2QkQgLyogUGxhdGZvcm1TcGVlY2hTeW50aGVzaXNVdHRlcmFuY2UuaCBpbiBIZWFkZXJzICov
LAorCQkJCTI5N0JFM0Q2MTZDMDNDMEIwMDMzMTZCRCAvKiBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNp
c1ZvaWNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkyOTdCRTNENzE2QzAzQzBFMDAzMzE2QkQgLyog
UGxhdGZvcm1TcGVlY2hTeW50aGVzaXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFEOEY4MUIx
MUNBQjlFOTAwRTkzRTU0IC8qIFBsYXRmb3JtU3RyYXRlZ2llcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTM1QzQ3NkIwOUFDNEQ0RjAwQTZBQUI0IC8qIFBsYXRmb3JtV2hlZWxFdmVudC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMzFENTkxQjMxNjY5N0E2QzAwRTZCRjAyIC8qIFBsdWdJbkNsaWVudC5o
IGluIEhlYWRlcnMgKi8sCkBAIC0yODY4Niw2ICsyODY5OCwxMCBAQAogCQkJCTQxQkY3MDBGMEZF
ODZGNjEwMDVFOERFQyAvKiBQbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlDNTk4OTAyRTE0RTlCMEY4MDBFOEQxOEIgLyogUGxhdGZvcm1QYXN0ZWJvYXJk
TWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM5NEQxMDgwQzI3NEY4ODAwNkJDNjE3IC8qIFBs
YXRmb3JtU2NyZWVuTWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMjkzNDk0MEExNkMwMkMwNzAw
OTAxMzE4IC8qIFBsYXRmb3JtU3BlZWNoU3ludGhlc2lzVm9pY2UuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMjkzNDk0MEIxNkMwMkMwQTAwOTAxMzE4IC8qIFBsYXRmb3JtU3BlZWNoU3ludGhlc2lz
VXR0ZXJhbmNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTI5N0JFM0Q4MTZDMDNDQ0UwMDMzMTZC
RCAvKiBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJ
Mjk3QkUzREExNkMwNDNEODAwMzMxNkJEIC8qIFBsYXRmb3JtU3BlZWNoU3ludGhlc2l6ZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMUFEOEY4MUMxMUNBQjlFOTAwRTkzRTU0IC8qIFBsYXRmb3Jt
U3RyYXRlZ2llcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOUM2RTRGMzBENzQ1RTQ4MDA2NDQy
RTkgLyogUGx1Z2luRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NzIwNUFCQjEyMzkyOTI3
MDBCMTczODAgLyogUGx1Z2luRG9jdW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yODk5Miw3
ICsyOTAwOCw2IEBACiAJCQkJNzU0MTVDMjkxMjlBOTkyMDAwM0FENjY5IC8qIFNwZWVjaElucHV0
UmVzdWx0TGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBQTJBNUFENTE2QTQ4NjE0MDA5NzVB
MjUgLyogU3BlZWNoU3ludGhlc2lzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUFBMkE1QUQzMTZB
NDg2MEQwMDk3NUEyNSAvKiBTcGVlY2hTeW50aGVzaXNFdmVudC5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQlBQTJBNUFEODE2QTQ4NjFEMDA5NzVBMjUgLyogU3BlZWNoU3ludGhlc2lzTWFjLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQUEyQTVBRDExNkE0ODYwNzAwOTc1QTI1IC8qIFNwZWVjaFN5bnRo
ZXNpc1V0dGVyYW5jZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBQTJBNUFDRDE2QTQ4NUZBMDA5
NzVBMjUgLyogU3BlZWNoU3ludGhlc2lzVm9pY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc4
RkUxM0IxMjM2NkIxMDAwQUNFOEQwIC8qIFNwZWxsQ2hlY2tlci5jcHAgaW4gU291cmNlcyAqLywK
</data>

          </attachment>
      

    </bug>

</bugzilla>