<?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>120570</bug_id>
          
          <creation_ts>2013-08-31 22:13:11 -0700</creation_ts>
          <short_desc>Consider adding a reference-flavored smart pointer.</short_desc>
          <delta_ts>2013-09-06 12:38:01 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Template Framework</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="Andreas Kling">kling</reporter>
          <assigned_to name="Andreas Kling">kling</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>mikhail.pozdnyakov</cc>
    
    <cc>ossy</cc>
    
    <cc>rakuco</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>923393</commentid>
    <comment_count>0</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-08-31 22:13:11 -0700</bug_when>
    <thetext>Consider adding a reference-flavored smart pointer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923395</commentid>
    <comment_count>1</comment_count>
      <attachid>210226</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-08-31 22:16:19 -0700</bug_when>
    <thetext>Created attachment 210226
Patch idea</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923396</commentid>
    <comment_count>2</comment_count>
      <attachid>210227</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-08-31 22:18:58 -0700</bug_when>
    <thetext>Created attachment 210227
Patch + various examples of use in WebCore</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923409</commentid>
    <comment_count>3</comment_count>
      <attachid>210226</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-08-31 22:54:29 -0700</bug_when>
    <thetext>Comment on attachment 210226
Patch idea

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

We might want a move constructor for this class. We can’t make one of these null, because that will invalidate its invariant, but perhaps we can still do a move when the other Ref is falling out of scope? Anders would know for sure.

&gt; Source/WTF/wtf/Ref.h:38
&gt; +    Ref(const T&amp;);

This should not be needed. If we want to do a Ref for something that&apos;s const, the const can be part of the T.

&gt; Source/WTF/wtf/Ref.h:41
&gt; +    template&lt;typename U&gt; Ref(U&amp;);

Given this function template, it’s not clear we need Ref(T&amp;) at all. We should try just leaving it out.

&gt; Source/WTF/wtf/Ref.h:43
&gt; +    // These two will incur the cost of a null-check to guarantee that Ref always points at something.

Is the CRASH() really what we want here? I worry that we’ll be seeing this way too much. Why not require that people use a * and just leave this “convenience” out entirely?

What’s so special about RefPtr and PassRefPtr? Why not also do this for raw pointers?

&gt; Source/WTF/wtf/Ref.h:49
&gt; +    T&amp; get() const { return *m_ptr; }

So you always have to say get(). when using one of these? That’s kinda ugly. Uses of RefPtr look good because of -&gt;, but I can see how that’s not sensible here, so maybe we just have to live with this. Wish there was something better than get().

&gt; Source/WTF/wtf/Ref.h:51
&gt; +    void swap(Ref&amp;);

You can’t swap a real reference, so why do we need to swap these? Put another way, if we can’t assign these I see no reason we need to swap them.

&gt; Source/WTF/wtf/Ref.h:53
&gt; +    static T* hashTableDeletedValue() { return reinterpret_cast&lt;T*&gt;(-1); }

Not sure this is helpful on its own. We also need a hash table empty value, and since this has no null, no idea what that would be. Leave this out unless you have a solution to that problem.

&gt; Source/WTF/wtf/Ref.h:56
&gt; +    Ref&amp; operator=(const Ref&lt;T&gt;&amp;);

Why is this private? Just because real references can’t be assigned? If private, then I think we want to delete it too.

&gt; Source/WTF/wtf/Ref.h:77
&gt; +    : m_ptr(&amp;o.get())

I think this should be o.m_ptr, not &amp;o.get().

&gt; Source/WTF/wtf/Ref.h:84
&gt; +    : m_ptr(&amp;o.get())

Hmm, maybe this shows why it needs to be &amp;o.get(), since we can’t get at o’s private members.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923410</commentid>
    <comment_count>4</comment_count>
      <attachid>210226</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-08-31 22:55:23 -0700</bug_when>
    <thetext>Comment on attachment 210226
Patch idea

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

&gt; Source/WTF/wtf/Ref.h:123
&gt; +template&lt;typename T, typename U&gt; inline bool operator==(const Ref&lt;T&gt;&amp; a, const Ref&lt;U&gt;&amp; b)

These == and != operators don’t seem right. You can’t compare real references, so why do we need to compare these? If we’re not doing assignment I don’t think we need to do comparison either.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923415</commentid>
    <comment_count>5</comment_count>
      <attachid>210226</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-08-31 23:27:49 -0700</bug_when>
    <thetext>Comment on attachment 210226
Patch idea

Back to the drawin&apos; board.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923464</commentid>
    <comment_count>6</comment_count>
      <attachid>210241</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-09-01 07:48:22 -0700</bug_when>
    <thetext>Created attachment 210241
Simplified version for stack guarding

Okay, here&apos;s how I think we can start: let&apos;s just support the stack guard use case at first.
Then we can add more capabilities as we go along.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923465</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-09-01 07:50:03 -0700</bug_when>
    <thetext>Attachment 210241 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/WTF.pro&apos;, u&apos;Source/WTF/WTF.vcxproj/WTF.vcxproj.filters&apos;, u&apos;Source/WTF/WTF.xcodeproj/project.pbxproj&apos;, u&apos;Source/WTF/wtf/CMakeLists.txt&apos;, u&apos;Source/WTF/wtf/Forward.h&apos;, u&apos;Source/WTF/wtf/Ref.h&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/Modules/geolocation/Geolocation.cpp&apos;, u&apos;Source/WebCore/Modules/webaudio/AudioContext.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSCustomSQLStatementErrorCallback.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSCustomXPathNSResolver.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSDOMGlobalObjectTask.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSErrorHandler.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSEventListener.cpp&apos;, u&apos;Source/WebCore/bindings/js/JSEventListener.h&apos;, u&apos;Source/WebCore/bridge/runtime_root.cpp&apos;, u&apos;Source/WebCore/css/CSSFontSelector.cpp&apos;, u&apos;Source/WebCore/css/StyleSheetContents.cpp&apos;, u&apos;Source/WebCore/dom/CharacterData.cpp&apos;, u&apos;Source/WebCore/dom/ContainerNode.cpp&apos;, u&apos;Source/WebCore/dom/ContainerNodeAlgorithms.h&apos;, u&apos;Source/WebCore/dom/Document.cpp&apos;, u&apos;Source/WebCore/dom/DocumentEventQueue.cpp&apos;, u&apos;Source/WebCore/dom/EventTarget.cpp&apos;, u&apos;Source/WebCore/dom/Node.cpp&apos;, u&apos;Source/WebCore/dom/ScriptExecutionContext.cpp&apos;, u&apos;Source/WebCore/dom/ScriptedAnimationController.cpp&apos;, u&apos;Source/WebCore/html/HTMLEmbedElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLFormControlElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLFormElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLFrameOwnerElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLInputElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLLinkElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLMediaElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLObjectElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLOptionElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLScriptElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLTableElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLTextAreaElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLTitleElement.cpp&apos;, u&apos;Source/WebCore/html/parser/HTMLDocumentParser.cpp&apos;, u&apos;Source/WebCore/html/shadow/SpinButtonElement.cpp&apos;, u&apos;Source/WebCore/html/shadow/TextControlInnerElements.cpp&apos;, u&apos;Source/WebCore/inspector/InspectorCSSAgent.cpp&apos;, u&apos;Source/WebCore/loader/DocumentLoader.cpp&apos;, u&apos;Source/WebCore/loader/DocumentThreadableLoader.cpp&apos;, u&apos;Source/WebCore/loader/DocumentWriter.cpp&apos;, u&apos;Source/WebCore/loader/FrameLoader.cpp&apos;, u&apos;Source/WebCore/loader/NavigationScheduler.cpp&apos;, u&apos;Source/WebCore/loader/NetscapePlugInStreamLoader.cpp&apos;, u&apos;Source/WebCore/loader/ResourceLoader.cpp&apos;, u&apos;Source/WebCore/loader/SubresourceLoader.cpp&apos;, u&apos;Source/WebCore/loader/cf/SubresourceLoaderCF.cpp&apos;, u&apos;Source/WebCore/page/DOMWindow.cpp&apos;, u&apos;Source/WebCore/page/DOMWindowExtension.cpp&apos;, u&apos;Source/WebCore/page/FocusController.cpp&apos;, u&apos;Source/WebCore/page/FrameView.cpp&apos;, u&apos;Source/WebCore/page/animation/AnimationBase.cpp&apos;, u&apos;Source/WebCore/platform/graphics/DisplayRefreshMonitor.cpp&apos;, u&apos;Source/WebCore/platform/mac/WidgetMac.mm&apos;, u&apos;Source/WebCore/platform/network/BlobResourceHandle.cpp&apos;, u&apos;Source/WebCore/platform/network/cf/ResourceHandleCFNet.cpp&apos;, u&apos;Source/WebCore/platform/network/mac/ResourceHandleMac.mm&apos;, u&apos;Source/WebCore/rendering/RenderWidget.cpp&apos;, u&apos;Source/WebCore/workers/WorkerScriptLoader.cpp&apos;, u&apos;Source/WebCore/xml/XMLHttpRequest.cpp&apos;, u&apos;Source/WebCore/xml/parser/XMLDocumentParser.cpp&apos;, u&apos;Source/WebCore/xml/parser/XMLDocumentParserLibxml2.cpp&apos;]&quot; exit_code: 1
Source/WebCore/rendering/RenderWidget.cpp:36:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/xml/parser/XMLDocumentParserLibxml2.cpp:65:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 2 in 69 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>923488</commentid>
    <comment_count>8</comment_count>
      <attachid>210241</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-09-01 09:25:53 -0700</bug_when>
    <thetext>Comment on attachment 210241
Simplified version for stack guarding

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

&gt; Source/WTF/wtf/Ref.h:38
&gt; +    ALWAYS_INLINE T&amp; get() const { return *m_ptr; }

How about having operator* and operator-&gt; instead and sticking with pointer-like semantics?  Getting reference-like semantics right seem impossible since there is no operator.() etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923489</commentid>
    <comment_count>9</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-09-01 09:31:05 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 210241 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=210241&amp;action=review
&gt; 
&gt; &gt; Source/WTF/wtf/Ref.h:38
&gt; &gt; +    ALWAYS_INLINE T&amp; get() const { return *m_ptr; }
&gt; 
&gt; How about having operator* and operator-&gt; instead and sticking with pointer-like semantics?  Getting reference-like semantics right seem impossible since there is no operator.() etc.

* and -&gt; make me nervous now, I don&apos;t want to go back. :|

I agree that .get() is srsly ugly. I originally thought that we could reduce aesthetic damage by using accessors instead of poking at the Ref directly.

Maybe it&apos;s not so bad. Let me just go through the 7 stages.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923495</commentid>
    <comment_count>10</comment_count>
      <attachid>210241</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-09-01 09:48:44 -0700</bug_when>
    <thetext>Comment on attachment 210241
Simplified version for stack guarding

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

&gt;&gt;&gt; Source/WTF/wtf/Ref.h:38
&gt;&gt;&gt; +    ALWAYS_INLINE T&amp; get() const { return *m_ptr; }
&gt;&gt; 
&gt;&gt; How about having operator* and operator-&gt; instead and sticking with pointer-like semantics?  Getting reference-like semantics right seem impossible since there is no operator.() etc.
&gt; 
&gt; * and -&gt; make me nervous now, I don&apos;t want to go back. :|
&gt; 
&gt; I agree that .get() is srsly ugly. I originally thought that we could reduce aesthetic damage by using accessors instead of poking at the Ref directly.
&gt; 
&gt; Maybe it&apos;s not so bad. Let me just go through the 7 stages.

Could we also get correct const?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923536</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-09-01 12:12:19 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 210241 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=210241&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WTF/wtf/Ref.h:38
&gt; &gt;&gt;&gt; +    ALWAYS_INLINE T&amp; get() const { return *m_ptr; }
&gt; &gt;&gt; 
&gt; &gt;&gt; How about having operator* and operator-&gt; instead and sticking with pointer-like semantics?  Getting reference-like semantics right seem impossible since there is no operator.() etc.
&gt; &gt; 
&gt; &gt; * and -&gt; make me nervous now, I don&apos;t want to go back. :|
&gt; &gt; 
&gt; &gt; I agree that .get() is srsly ugly. I originally thought that we could reduce aesthetic damage by using accessors instead of poking at the Ref directly.
&gt; &gt; 
&gt; &gt; Maybe it&apos;s not so bad. Let me just go through the 7 stages.
&gt; 
&gt; Could we also get correct const?

I didn’t see incorrect const here. A Ref that itself is const does not mean the referred-to object is const. The const for the referred-to object would be inside the T type.

Or maybe you were talking about something else?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923768</commentid>
    <comment_count>12</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-09-02 10:51:08 -0700</bug_when>
    <thetext>&gt; I didn’t see incorrect const here. A Ref that itself is const does not mean the referred-to object is const. The const for the referred-to object would be inside the T type.
&gt; 
&gt; Or maybe you were talking about something else?

struct Foo {
   void changeInternalStateFromConstFunction() const;
   Ref&lt;Bar&gt; m_bar;
}

voi Foo::changeInternalStateFromConstFunction() const
{
   // Implicit const_cast
   Bar&amp; constFreeBar = m_bar.get();
   constFreeBar.goCrazy();
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923772</commentid>
    <comment_count>13</comment_count>
      <attachid>210241</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-09-02 11:06:20 -0700</bug_when>
    <thetext>Comment on attachment 210241
Simplified version for stack guarding

I think i&apos;m fine with .get(). Please fix the constness with separate const and non-const versions. I know RefPtr does this but it is equally wrong there too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923783</commentid>
    <comment_count>14</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-09-02 11:49:09 -0700</bug_when>
    <thetext>Committed r154962: &lt;http://trac.webkit.org/changeset/154962&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923790</commentid>
    <comment_count>15</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2013-09-02 12:10:42 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; Committed r154962: &lt;http://trac.webkit.org/changeset/154962&gt;
It broke the build everywhere,please land the new Ref.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923797</commentid>
    <comment_count>16</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2013-09-02 12:40:15 -0700</bug_when>
    <thetext>ping</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923802</commentid>
    <comment_count>17</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-09-02 13:08:40 -0700</bug_when>
    <thetext>Added Ref.h in &lt;http://trac.webkit.org/changeset/154964&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923849</commentid>
    <comment_count>18</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-09-02 22:50:50 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; &gt; I didn’t see incorrect const here. A Ref that itself is const does not mean the referred-to object is const. The const for the referred-to object would be inside the T type.
&gt; &gt; 
&gt; &gt; Or maybe you were talking about something else?
&gt; 
&gt; struct Foo {
&gt;    void changeInternalStateFromConstFunction() const;
&gt;    Ref&lt;Bar&gt; m_bar;
&gt; }
&gt; 
&gt; voi Foo::changeInternalStateFromConstFunction() const
&gt; {
&gt;    // Implicit const_cast
&gt;    Bar&amp; constFreeBar = m_bar.get();
&gt;    constFreeBar.goCrazy();
&gt; }

Exactly, that’s just like a reference:

    struct Foo {
        void changeInternalStateFromConstFunction() const;
        Bar&amp; m_bar;
    }

    void Foo::changeInternalStateFromConstFunction() const
    {
        // m_bar is not part of Foo, it&apos;s a separate object, so the const-ness of Foo is not relevant
        Bar&amp; constFreeBar = m_bar;
        constFreeBar.goCrazy();
    }

Or a pointer:

    struct Foo {
        void changeInternalStateFromConstFunction() const;
        Bar* m_bar;
    }

    void Foo::changeInternalStateFromConstFunction() const
    {
        // m_bar is not part of Foo, it&apos;s a separate object, so the const-ness of Foo is not relevant
        Bar&amp; constFreeBar = *m_bar;
        constFreeBar.goCrazy();
    }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>923897</commentid>
    <comment_count>19</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-09-03 01:20:45 -0700</bug_when>
    <thetext>&gt;     void Foo::changeInternalStateFromConstFunction() const
&gt;     {
&gt;         // m_bar is not part of Foo, it&apos;s a separate object, so the const-ness of Foo is not relevant
&gt;         Bar&amp; constFreeBar = *m_bar;
&gt;         constFreeBar.goCrazy();
&gt;     }

I think it might be appropriate for Refs to enforce stronger constness than raw references/pointers. They imply and implement (shared) ownership. An owned object can be considered part of the containers state.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>924057</commentid>
    <comment_count>20</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-09-03 10:03:37 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; I think it might be appropriate for Refs to enforce stronger constness than raw references/pointers.

OK. While it’s not traditional for smart pointers to do this type of thing, I’m OK with it, then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>925594</commentid>
    <comment_count>21</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-09-06 07:26:20 -0700</bug_when>
    <thetext>As far as I see Ref is a an analogue of RefPtr but it enforces that m_ptr!=0.
My question is: should not we introduce PassRef class as well? So far the API is supposed to accept/return references to the object, however it&apos;s quite unclear for the client whether the obtained reference is from RefCounted object pointer and hence whether Ref class should be used for storing it. Introducing of RefPass would solve the problem. (Another solution is to provide move semantics for Ref and pass Ref instances)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>925775</commentid>
    <comment_count>22</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-09-06 12:38:01 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; My question is: should not we introduce PassRef class as well?

We are probably going to be able to get rid of PassRefPtr and use RefPtr instead soon, taking advantage of C++11 move semantics instead of our own home-grown equivalent.

If we find this is not going to happen, then we can add a PassRef, but if it does, we should just start using Ref this new way instead of adding PassRef.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>210226</attachid>
            <date>2013-08-31 22:16:19 -0700</date>
            <delta_ts>2013-09-01 07:48:22 -0700</delta_ts>
            <desc>Patch idea</desc>
            <filename>bug-120570.diff</filename>
            <type>text/plain</type>
            <size>11797</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggYmJiYWVhNy4uMTEwM2JjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAxMy0wOS0wMSAg
QW5kcmVhcyBLbGluZyAgPGFrbGluZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUmVmOiBBIHNtYXJ0
IHBvaW50ZXIgZm9yIHRoZSByZWZlcmVuY2UgYWdlLgorICAgICAgICA8aHR0cHM6Ly93ZWJraXQu
b3JnL2IvMTIwNTcwPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEFkZCBhIFJlZjxUPiBzbWFydCBwb2ludGVyIGNsYXNzIHRoYXQgaXMgbmV2ZXIgbnVs
bC4KKworICAgICAgICBJdCdzIGluaXRpYWxpemVkIGNvc3QtZnJlZSBieSBwYXNzaW5nIGEgVCYg
dG8gdGhlIGNvbnN0cnVjdG9yLCB0aG91Z2ggaXQgYWxzbyBzdXBwb3J0cworICAgICAgICBpbml0
aWFsaXphdGlvbiBmcm9tIFJlZlB0cjxUPiBhbmQgUGFzc1JlZlB0cjxUPiB3aXRoIHRoZSBhZGRl
ZCBjb3N0IG9mIGEgbnVsbCBjaGVjay4KKworICAgICAgICBvcGVyYXRvci0+IGlzIG5vdCBvdmVy
bG9hZGVkLCB0byBwcmV2ZW50IHVuc2FmZS1sb29raW5nIGNvZGUuCisgICAgICAgIFRoZSB2YWx1
ZSBpcyBleHRyYWN0ZWQgYnkgIlQmIGdldCgpIiwgc2luY2UgQysrIGRvZXMgbm90IGxldCB5b3Ug
b3ZlcnJpZGUgb3BlcmF0b3IuKCkKKworICAgICAgICBCYXNlZCBvbiBCZW5qYW1pbidzIE5ldmVy
TnVsbFJlZlB0ciBoYXguCisKKyAgICAgICAgKiB3dGYvUmVmLmg6CisKIDIwMTMtMDgtMzAgIE9s
aXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIEpTVmFsdWUgYm9v
bCBjb252ZXJzaW9uIGxlc3MgZGFuZ2Vyb3VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL1dURi5w
cm8gYi9Tb3VyY2UvV1RGL1dURi5wcm8KaW5kZXggMDBiOTUyYS4uMThiNzNlNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi9XVEYucHJvCisrKyBiL1NvdXJjZS9XVEYvV1RGLnBybwpAQCAtODUsNiAr
ODUsNyBAQCBIRUFERVJTICs9IFwKICAgICBNZXNzYWdlUXVldWUuaCBcCiAgICAgTWV0YUFsbG9j
YXRvci5oIFwKICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlLmggXAorICAgIFJlZi5oIFwKICAgICBO
b25jb3B5YWJsZS5oIFwKICAgICBOb25Db3B5aW5nU29ydC5oIFwKICAgICBOb3RGb3VuZC5oIFwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnZjeHByb2ovV1RGLnZjeHByb2ouZmlsdGVycyBi
L1NvdXJjZS9XVEYvV1RGLnZjeHByb2ovV1RGLnZjeHByb2ouZmlsdGVycwppbmRleCBhMWFjYjUw
Li5hNWIxMGQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi52Y3hwcm9qL1dURi52Y3hwcm9q
LmZpbHRlcnMKKysrIGIvU291cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvai5maWx0ZXJz
CkBAIC00OTQsNiArNDk0LDkgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxOZXZl
ckRlc3Ryb3llZC5oIj4NCiAgICAgICA8RmlsdGVyPnd0ZjwvRmlsdGVyPg0KICAgICA8L0NsSW5j
bHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcUmVmLmgiPg0KKyAgICAgIDxG
aWx0ZXI+d3RmPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHd0ZlxOb25jb3B5YWJsZS5oIj4NCiAgICAgICA8RmlsdGVyPnd0ZjwvRmlsdGVy
Pg0KICAgICA8L0NsSW5jbHVkZT4NCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL1dURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCBjM2M5ODNiLi45MDA4NmY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTU0LDYgKzU0LDggQEAKIAkJMUZBNDdDOEExNTI1MDJEQTAwNTY4
RDFCIC8qIFdlYkNvcmVUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUZBNDdDODgxNTI1MDJEQTAwNTY4RDFCIC8qIFdlYkNvcmVUaHJlYWQu
Y3BwICovOyB9OwogCQkxRkE0N0M4QjE1MjUwMkRBMDA1NjhEMUIgLyogV2ViQ29yZVRocmVhZC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUZBNDdDODkx
NTI1MDJEQTAwNTY4RDFCIC8qIFdlYkNvcmVUaHJlYWQuaCAqLzsgfTsKIAkJMjYxNDdCMEExNURE
Q0NEQzAwRERCOTA3IC8qIEludGVnZXJUb1N0cmluZ0NvbnZlcnNpb24uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2MTQ3QjA4MTVERENDREMwMEREQjkw
NyAvKiBJbnRlZ2VyVG9TdHJpbmdDb252ZXJzaW9uLmggKi87IH07CisJCTI2Mjk5QjZFMTdBOUU1
QjgwMEFERUJFNSAvKiBSZWYuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDI2Mjk5QjZEMTdBOUU1QjgwMEFERUJFNSAvKiBSZWYuaCAqLzsgfTsKKwkJMjZB
NzA1MjYxNzQ0NUE1RjAwMTE4QUNBIC8qIFJlZi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMjZBNzA1MjUxNzQ0NUE1RjAwMTE4QUNBIC8qIFJlZi5oICov
OyB9OwogCQkyQzA1Mzg1NDE1QkM4MTkwMDBGMjFCOTYgLyogR3JlZ29yaWFuRGF0ZVRpbWUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJDMDUzODUzMTVC
QzgxOTAwMEYyMUI5NiAvKiBHcmVnb3JpYW5EYXRlVGltZS5oICovOyB9OwogCQkyQ0NEODkyQTE1
QzAzOTAyMDAyODUwODMgLyogR3JlZ29yaWFuRGF0ZVRpbWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkNDRDg5MjkxNUMwMzkwMjAwMjg1MDgzIC8q
IEdyZWdvcmlhbkRhdGVUaW1lLmNwcCAqLzsgfTsKIAkJNDRGNjYwMDgxNzFBRkFFNjAwRTRBRDE5
IC8qIEVudW1DbGFzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDRGNjYwMDcxNzFBRkFBOTAwRTRBRDE5IC8qIEVudW1DbGFzcy5oICovOyB9OwpAQCAt
MzIwLDYgKzMyMiw4IEBACiAJCTFGQTQ3Qzg4MTUyNTAyREEwMDU2OEQxQiAvKiBXZWJDb3JlVGhy
ZWFkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkNvcmVUaHJl
YWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxRkE0N0M4OTE1MjUwMkRBMDA1
NjhEMUIgLyogV2ViQ29yZVRocmVhZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXZWJDb3JlVGhyZWFkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI2MTQ3QjA4
MTVERENDREMwMEREQjkwNyAvKiBJbnRlZ2VyVG9TdHJpbmdDb252ZXJzaW9uLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludGVnZXJUb1N0cmluZ0NvbnZlcnNpb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjYyOTlCNkQxN0E5RTVCODAwQURFQkU1IC8qIFJl
Zi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWYuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMjZBNzA1MjUxNzQ0NUE1RjAwMTE4QUNBIC8qIFJlZi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMkMwNTM4NTMxNUJDODE5MDAwRjIxQjk2IC8qIEdyZWdvcmlhbkRhdGVUaW1lLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyZWdvcmlhbkRhdGVUaW1lLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJDQ0Q4OTI5MTVDMDM5MDIwMDI4NTA4MyAvKiBH
cmVnb3JpYW5EYXRlVGltZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBHcmVnb3JpYW5EYXRlVGltZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0
REVFNzRBMTUyMjc0QkIwMEM2RUMzNyAvKiBpT1MueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lnhj
Y29uZmlnOyBwYXRoID0gaU9TLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtNzA4LDYgKzcxMiw3IEBACiAJCQkJQThBNDcyQ0UxNTFBODI1QjAwNDEyM0ZGIC8qIE1ldGFB
bGxvY2F0b3IuaCAqLywKIAkJCQlBOEE0NzJDRjE1MUE4MjVCMDA0MTIzRkYgLyogTWV0YUFsbG9j
YXRvckhhbmRsZS5oICovLAogCQkJCTFBM0Y2QkU2MTc0QURBMjEwMEIyRUVBNyAvKiBOZXZlckRl
c3Ryb3llZC5oICovLAorCQkJCTI2Mjk5QjZEMTdBOUU1QjgwMEFERUJFNSAvKiBSZWYuaCAqLywK
IAkJCQkwRjBEODVCMzE3MjM0Q0IxMDAzMzgyMTAgLyogTm9Mb2NrLmggKi8sCiAJCQkJQThBNDcy
RDAxNTFBODI1QjAwNDEyM0ZGIC8qIE5vbmNvcHlhYmxlLmggKi8sCiAJCQkJQThBNDcyRDExNTFB
ODI1QjAwNDEyM0ZGIC8qIE5vbkNvcHlpbmdTb3J0LmggKi8sCkBAIC0xMDAxLDYgKzEwMDYsNyBA
QAogCQkJCUE4QTQ3M0RBMTUxQTgyNUIwMDQxMjNGRiAvKiBIYXNoVHJhaXRzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBOEE0NzNEQjE1MUE4MjVCMDA0MTIzRkYgLyogSGV4TnVtYmVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBOEE0NzNEQzE1MUE4MjVCMDA0MTIzRkYgLyogSW5saW5lQVNNLmggaW4g
SGVhZGVycyAqLywKKwkJCQkyNjI5OUI2RTE3QTlFNUI4MDBBREVCRTUgLyogUmVmLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBNzBEQTA4NDE3OTlGMDREMDA1MjlBOUIgLyogSW5zZXJ0aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQkyNjE0N0IwQTE1RERDQ0RDMDBEREI5MDcgLyogSW50ZWdlclRvU3Ry
aW5nQ29udmVyc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwREEwODUxNzk5RjA0RDAwNTI5
QTlCIC8qIExpc3REdW1wLmggaW4gSGVhZGVycyAqLywKQEAgLTEwNjMsNiArMTA2OSw3IEBACiAJ
CQkJQThBNDc0MjQxNTFBODI1QjAwNDEyM0ZGIC8qIFNpbmdseUxpbmtlZExpc3QuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE3NDg3NDUzMTdBMEJEQUUwMEZBMDRDQiAvKiBTaXhDaGFyYWN0ZXJIYXNo
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQyNjE1MUE4MjVCMDA0MTIzRkYgLyogU3BlY3Ry
dW0uaCBpbiBIZWFkZXJzICovLAorCQkJCTI2QTcwNTI2MTc0NDVBNUYwMDExOEFDQSAvKiBSZWYu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDI4MTUxQTgyNUIwMDQxMjNGRiAvKiBTdGFja0Jv
dW5kcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkVEQUNEM0UxNjMwRjgzRjAwQzY5NjM0IC8qIFN0
YWNrU3RhdHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDI5MTUxQTgyNUIwMDQxMjNGRiAv
KiBTdGF0aWNDb25zdHJ1Y3RvcnMuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dApp
bmRleCA5YTU5MTg2Li42YjM2N2NiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxp
c3RzLnR4dAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dApAQCAtNTUsNiArNTUs
NyBAQCBzZXQoV1RGX0hFQURFUlMKICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlLmgKICAgICBOb25D
b3B5aW5nU29ydC5oCiAgICAgVGhyZWFkUmVzdHJpY3Rpb25WZXJpZmllci5oCisgICAgUmVmLmgK
ICAgICBOb25jb3B5YWJsZS5oCiAgICAgTm90Rm91bmQuaAogICAgIE51bGxQdHIuaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvRm9yd2FyZC5oIGIvU291cmNlL1dURi93dGYvRm9yd2FyZC5o
CmluZGV4IDJhNDc1MDMuLjU5YTVkYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0Zvcndh
cmQuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmgKQEAgLTMyLDYgKzMyLDcgQEAgbmFt
ZXNwYWNlIFdURiB7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgUGFzc093blB0cjsK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBQYXNzUmVmUHRyOwogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IGNsYXNzIFJlZlB0cjsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFz
cyBSZWY7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0
eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+IGNsYXNzIFZlY3RvcjsKIAogICAgIGNsYXNzIEF0b21p
Y1N0cmluZzsKQEAgLTU1LDYgKzU2LDcgQEAgdXNpbmcgV1RGOjpQYXNzT3duQXJyYXlQdHI7CiB1
c2luZyBXVEY6OlBhc3NPd25QdHI7CiB1c2luZyBXVEY6OlBhc3NSZWZQdHI7CiB1c2luZyBXVEY6
OlJlZlB0cjsKK3VzaW5nIFdURjo6UmVmOwogdXNpbmcgV1RGOjpWZWN0b3I7CiAKIHVzaW5nIFdU
Rjo6QXRvbWljU3RyaW5nOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUmVmLmggYi9Tb3Vy
Y2UvV1RGL3d0Zi9SZWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGI1
MjhkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvUmVmLmgKQEAgLTAsMCArMSwx
NzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdURl9SZWZfaAorI2RlZmluZSBXVEZfUmVmX2gK
KworI2luY2x1ZGUgPHd0Zi9GYXN0QWxsb2NCYXNlLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBSZWYgeworcHVibGljOgorICAgIFJlZihUJik7CisgICAg
UmVmKGNvbnN0IFQmKTsKKyAgICBSZWYoY29uc3QgUmVmPFQ+Jik7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVT4gUmVmKGNvbnN0IFJlZjxVPiYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IFJl
ZihVJik7CisKKyAgICAvLyBUaGVzZSB0d28gd2lsbCBpbmN1ciB0aGUgY29zdCBvZiBhIG51bGwt
Y2hlY2sgdG8gZ3VhcmFudGVlIHRoYXQgUmVmIGFsd2F5cyBwb2ludHMgYXQgc29tZXRoaW5nLgor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IFJlZihjb25zdCBSZWZQdHI8VT4mKTsKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBVPiBSZWYoY29uc3QgUGFzc1JlZlB0cjxVPiYpOworCisgICAgQUxXQVlT
X0lOTElORSB+UmVmKCkgeyBtX3B0ci0+ZGVyZWYoKTsgfQorCisgICAgVCYgZ2V0KCkgY29uc3Qg
eyByZXR1cm4gKm1fcHRyOyB9CisKKyAgICB2b2lkIHN3YXAoUmVmJik7CisKKyAgICBzdGF0aWMg
VCogaGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4o
LTEpOyB9CisKK3ByaXZhdGU6CisgICAgUmVmJiBvcGVyYXRvcj0oY29uc3QgUmVmPFQ+Jik7CisK
KyAgICBUKiBtX3B0cjsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitBTFdBWVNfSU5MSU5F
IFJlZjxUPjo6UmVmKFQmIG9iamVjdCkKKyAgICA6IG1fcHRyKCZvYmplY3QpCit7CisgICAgbV9w
dHItPnJlZigpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorQUxXQVlTX0lOTElORSBSZWY8
VD46OlJlZihjb25zdCBUJiBvYmplY3QpCisgICAgOiBtX3B0cigmY29uc3RfY2FzdDxUJj4ob2Jq
ZWN0KSkKK3sKKyAgICBtX3B0ci0+cmVmKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitB
TFdBWVNfSU5MSU5FIFJlZjxUPjo6UmVmKGNvbnN0IFJlZjxUPiYgbykKKyAgICA6IG1fcHRyKCZv
LmdldCgpKQoreworICAgIG1fcHRyLT5yZWYoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
dGVtcGxhdGU8dHlwZW5hbWUgVT4KK0FMV0FZU19JTkxJTkUgUmVmPFQ+OjpSZWYoY29uc3QgUmVm
PFU+JiBvKQorICAgIDogbV9wdHIoJm8uZ2V0KCkpCit7CisgICAgbV9wdHItPnJlZigpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorQUxXQVlTX0lOTElO
RSBSZWY8VD46OlJlZihVJiBvYmplY3QpCisgICAgOiBtX3B0cigmb2JqZWN0KQoreworICAgIG1f
cHRyLT5yZWYoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdGVtcGxhdGU8dHlwZW5hbWUg
VT4KK0FMV0FZU19JTkxJTkUgUmVmPFQ+OjpSZWYoY29uc3QgUmVmUHRyPFU+JiBvKQorICAgIDog
bV9wdHIoby5nZXQoKSkKK3sKKyAgICBpZiAoVU5MSUtFTFkoIW1fcHRyKSkKKyAgICAgICAgQ1JB
U0goKTsKKyAgICBtX3B0ci0+cmVmKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHRlbXBs
YXRlPHR5cGVuYW1lIFU+CitBTFdBWVNfSU5MSU5FIFJlZjxUPjo6UmVmKGNvbnN0IFBhc3NSZWZQ
dHI8VT4mIG8pCisgICAgOiBtX3B0cihvLmxlYWtSZWYoKSkKK3sKKyAgICBpZiAoVU5MSUtFTFko
IW1fcHRyKSkKKyAgICAgICAgQ1JBU0goKTsKK30KKwordGVtcGxhdGU8Y2xhc3MgVD4gaW5saW5l
IHZvaWQgUmVmPFQ+Ojpzd2FwKFJlZjxUPiYgbykKK3sKKyAgICBzdGQ6OnN3YXAobV9wdHIsIG8u
bV9wdHIpOworfQorCit0ZW1wbGF0ZTxjbGFzcyBUPiBpbmxpbmUgdm9pZCBzd2FwKFJlZjxUPiYg
YSwgUmVmPFQ+JiBiKQoreworICAgIGEuc3dhcChiKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZWY8VD4mIGEsIGNv
bnN0IFJlZjxVPiYgYikKK3sKKyAgICByZXR1cm4gJmEuZ2V0KCkgPT0gJmIuZ2V0KCk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBib29sIG9wZXJhdG9yPT0o
Y29uc3QgUmVmPFQ+JiBhLCBVKiBiKQoreworICAgIHJldHVybiAmYS5nZXQoKSA9PSBiOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09
KFQqIGEsIGNvbnN0IFJlZjxVPiYgYikKK3sKKyAgICByZXR1cm4gYSA9PSAmYi5nZXQoKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBSZWY8VD4mIGEsIGNvbnN0IFJlZlB0cjxVPiYgYikKK3sKKyAgICByZXR1cm4gJmEu
Z2V0KCkgPT0gYi5nZXQoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4g
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZWZQdHI8VD4mIGEsIGNvbnN0IFJlZjxVPiYg
YikKK3sKKyAgICByZXR1cm4gYS5nZXQoKSA9PSAmYi5nZXQoKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBSZWY8VD4m
IGEsIGNvbnN0IFJlZjxVPiYgYikKK3sKKyAgICByZXR1cm4gJmEuZ2V0KCkgIT0gJmIuZ2V0KCk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBib29sIG9wZXJh
dG9yIT0oY29uc3QgUmVmPFQ+JiBhLCBVKiBiKQoreworICAgIHJldHVybiAmYS5nZXQoKSAhPSBi
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgYm9vbCBvcGVy
YXRvciE9KFQqIGEsIGNvbnN0IFJlZjxVPiYgYikKK3sKKyAgICByZXR1cm4gYSAhPSAmYi5nZXQo
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBSZWY8VD4mIGEsIGNvbnN0IFJlZlB0cjxVPiYgYikKK3sKKyAgICByZXR1
cm4gJmEuZ2V0KCkgIT0gYi5nZXQoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBSZWZQdHI8VD4mIGEsIGNvbnN0IFJl
ZjxVPiYgYikKK3sKKyAgICByZXR1cm4gYS5nZXQoKSAhPSAmYi5nZXQoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6UmVmOworCisjZW5kaWYgLy8gV1RGX1JlZl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>210227</attachid>
            <date>2013-08-31 22:18:58 -0700</date>
            <delta_ts>2013-08-31 22:20:31 -0700</delta_ts>
            <desc>Patch + various examples of use in WebCore</desc>
            <filename>example-120570.diff</filename>
            <type>text/plain</type>
            <size>50361</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggYmJiYWVhNy4uMTEwM2JjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAxMy0wOS0wMSAg
QW5kcmVhcyBLbGluZyAgPGFrbGluZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUmVmOiBBIHNtYXJ0
IHBvaW50ZXIgZm9yIHRoZSByZWZlcmVuY2UgYWdlLgorICAgICAgICA8aHR0cHM6Ly93ZWJraXQu
b3JnL2IvMTIwNTcwPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEFkZCBhIFJlZjxUPiBzbWFydCBwb2ludGVyIGNsYXNzIHRoYXQgaXMgbmV2ZXIgbnVs
bC4KKworICAgICAgICBJdCdzIGluaXRpYWxpemVkIGNvc3QtZnJlZSBieSBwYXNzaW5nIGEgVCYg
dG8gdGhlIGNvbnN0cnVjdG9yLCB0aG91Z2ggaXQgYWxzbyBzdXBwb3J0cworICAgICAgICBpbml0
aWFsaXphdGlvbiBmcm9tIFJlZlB0cjxUPiBhbmQgUGFzc1JlZlB0cjxUPiB3aXRoIHRoZSBhZGRl
ZCBjb3N0IG9mIGEgbnVsbCBjaGVjay4KKworICAgICAgICBvcGVyYXRvci0+IGlzIG5vdCBvdmVy
bG9hZGVkLCB0byBwcmV2ZW50IHVuc2FmZS1sb29raW5nIGNvZGUuCisgICAgICAgIFRoZSB2YWx1
ZSBpcyBleHRyYWN0ZWQgYnkgIlQmIGdldCgpIiwgc2luY2UgQysrIGRvZXMgbm90IGxldCB5b3Ug
b3ZlcnJpZGUgb3BlcmF0b3IuKCkKKworICAgICAgICBCYXNlZCBvbiBCZW5qYW1pbidzIE5ldmVy
TnVsbFJlZlB0ciBoYXguCisKKyAgICAgICAgKiB3dGYvUmVmLmg6CisKIDIwMTMtMDgtMzAgIE9s
aXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIEpTVmFsdWUgYm9v
bCBjb252ZXJzaW9uIGxlc3MgZGFuZ2Vyb3VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL1dURi5w
cm8gYi9Tb3VyY2UvV1RGL1dURi5wcm8KaW5kZXggMDBiOTUyYS4uMThiNzNlNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dURi9XVEYucHJvCisrKyBiL1NvdXJjZS9XVEYvV1RGLnBybwpAQCAtODUsNiAr
ODUsNyBAQCBIRUFERVJTICs9IFwKICAgICBNZXNzYWdlUXVldWUuaCBcCiAgICAgTWV0YUFsbG9j
YXRvci5oIFwKICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlLmggXAorICAgIFJlZi5oIFwKICAgICBO
b25jb3B5YWJsZS5oIFwKICAgICBOb25Db3B5aW5nU29ydC5oIFwKICAgICBOb3RGb3VuZC5oIFwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnZjeHByb2ovV1RGLnZjeHByb2ouZmlsdGVycyBi
L1NvdXJjZS9XVEYvV1RGLnZjeHByb2ovV1RGLnZjeHByb2ouZmlsdGVycwppbmRleCBhMWFjYjUw
Li5hNWIxMGQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi52Y3hwcm9qL1dURi52Y3hwcm9q
LmZpbHRlcnMKKysrIGIvU291cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvai5maWx0ZXJz
CkBAIC00OTQsNiArNDk0LDkgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxOZXZl
ckRlc3Ryb3llZC5oIj4NCiAgICAgICA8RmlsdGVyPnd0ZjwvRmlsdGVyPg0KICAgICA8L0NsSW5j
bHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcUmVmLmgiPg0KKyAgICAgIDxG
aWx0ZXI+d3RmPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHd0ZlxOb25jb3B5YWJsZS5oIj4NCiAgICAgICA8RmlsdGVyPnd0ZjwvRmlsdGVy
Pg0KICAgICA8L0NsSW5jbHVkZT4NCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL1dURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCBjM2M5ODNiLi45MDA4NmY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTU0LDYgKzU0LDggQEAKIAkJMUZBNDdDOEExNTI1MDJEQTAwNTY4
RDFCIC8qIFdlYkNvcmVUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUZBNDdDODgxNTI1MDJEQTAwNTY4RDFCIC8qIFdlYkNvcmVUaHJlYWQu
Y3BwICovOyB9OwogCQkxRkE0N0M4QjE1MjUwMkRBMDA1NjhEMUIgLyogV2ViQ29yZVRocmVhZC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUZBNDdDODkx
NTI1MDJEQTAwNTY4RDFCIC8qIFdlYkNvcmVUaHJlYWQuaCAqLzsgfTsKIAkJMjYxNDdCMEExNURE
Q0NEQzAwRERCOTA3IC8qIEludGVnZXJUb1N0cmluZ0NvbnZlcnNpb24uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI2MTQ3QjA4MTVERENDREMwMEREQjkw
NyAvKiBJbnRlZ2VyVG9TdHJpbmdDb252ZXJzaW9uLmggKi87IH07CisJCTI2Mjk5QjZFMTdBOUU1
QjgwMEFERUJFNSAvKiBSZWYuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDI2Mjk5QjZEMTdBOUU1QjgwMEFERUJFNSAvKiBSZWYuaCAqLzsgfTsKKwkJMjZB
NzA1MjYxNzQ0NUE1RjAwMTE4QUNBIC8qIFJlZi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMjZBNzA1MjUxNzQ0NUE1RjAwMTE4QUNBIC8qIFJlZi5oICov
OyB9OwogCQkyQzA1Mzg1NDE1QkM4MTkwMDBGMjFCOTYgLyogR3JlZ29yaWFuRGF0ZVRpbWUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJDMDUzODUzMTVC
QzgxOTAwMEYyMUI5NiAvKiBHcmVnb3JpYW5EYXRlVGltZS5oICovOyB9OwogCQkyQ0NEODkyQTE1
QzAzOTAyMDAyODUwODMgLyogR3JlZ29yaWFuRGF0ZVRpbWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkNDRDg5MjkxNUMwMzkwMjAwMjg1MDgzIC8q
IEdyZWdvcmlhbkRhdGVUaW1lLmNwcCAqLzsgfTsKIAkJNDRGNjYwMDgxNzFBRkFFNjAwRTRBRDE5
IC8qIEVudW1DbGFzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDRGNjYwMDcxNzFBRkFBOTAwRTRBRDE5IC8qIEVudW1DbGFzcy5oICovOyB9OwpAQCAt
MzIwLDYgKzMyMiw4IEBACiAJCTFGQTQ3Qzg4MTUyNTAyREEwMDU2OEQxQiAvKiBXZWJDb3JlVGhy
ZWFkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYkNvcmVUaHJl
YWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxRkE0N0M4OTE1MjUwMkRBMDA1
NjhEMUIgLyogV2ViQ29yZVRocmVhZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXZWJDb3JlVGhyZWFkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI2MTQ3QjA4
MTVERENDREMwMEREQjkwNyAvKiBJbnRlZ2VyVG9TdHJpbmdDb252ZXJzaW9uLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEludGVnZXJUb1N0cmluZ0NvbnZlcnNpb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjYyOTlCNkQxN0E5RTVCODAwQURFQkU1IC8qIFJl
Zi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWYuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMjZBNzA1MjUxNzQ0NUE1RjAwMTE4QUNBIC8qIFJlZi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMkMwNTM4NTMxNUJDODE5MDAwRjIxQjk2IC8qIEdyZWdvcmlhbkRhdGVUaW1lLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyZWdvcmlhbkRhdGVUaW1lLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJDQ0Q4OTI5MTVDMDM5MDIwMDI4NTA4MyAvKiBH
cmVnb3JpYW5EYXRlVGltZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBHcmVnb3JpYW5EYXRlVGltZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0
REVFNzRBMTUyMjc0QkIwMEM2RUMzNyAvKiBpT1MueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lnhj
Y29uZmlnOyBwYXRoID0gaU9TLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtNzA4LDYgKzcxMiw3IEBACiAJCQkJQThBNDcyQ0UxNTFBODI1QjAwNDEyM0ZGIC8qIE1ldGFB
bGxvY2F0b3IuaCAqLywKIAkJCQlBOEE0NzJDRjE1MUE4MjVCMDA0MTIzRkYgLyogTWV0YUFsbG9j
YXRvckhhbmRsZS5oICovLAogCQkJCTFBM0Y2QkU2MTc0QURBMjEwMEIyRUVBNyAvKiBOZXZlckRl
c3Ryb3llZC5oICovLAorCQkJCTI2Mjk5QjZEMTdBOUU1QjgwMEFERUJFNSAvKiBSZWYuaCAqLywK
IAkJCQkwRjBEODVCMzE3MjM0Q0IxMDAzMzgyMTAgLyogTm9Mb2NrLmggKi8sCiAJCQkJQThBNDcy
RDAxNTFBODI1QjAwNDEyM0ZGIC8qIE5vbmNvcHlhYmxlLmggKi8sCiAJCQkJQThBNDcyRDExNTFB
ODI1QjAwNDEyM0ZGIC8qIE5vbkNvcHlpbmdTb3J0LmggKi8sCkBAIC0xMDAxLDYgKzEwMDYsNyBA
QAogCQkJCUE4QTQ3M0RBMTUxQTgyNUIwMDQxMjNGRiAvKiBIYXNoVHJhaXRzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBOEE0NzNEQjE1MUE4MjVCMDA0MTIzRkYgLyogSGV4TnVtYmVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBOEE0NzNEQzE1MUE4MjVCMDA0MTIzRkYgLyogSW5saW5lQVNNLmggaW4g
SGVhZGVycyAqLywKKwkJCQkyNjI5OUI2RTE3QTlFNUI4MDBBREVCRTUgLyogUmVmLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBNzBEQTA4NDE3OTlGMDREMDA1MjlBOUIgLyogSW5zZXJ0aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQkyNjE0N0IwQTE1RERDQ0RDMDBEREI5MDcgLyogSW50ZWdlclRvU3Ry
aW5nQ29udmVyc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwREEwODUxNzk5RjA0RDAwNTI5
QTlCIC8qIExpc3REdW1wLmggaW4gSGVhZGVycyAqLywKQEAgLTEwNjMsNiArMTA2OSw3IEBACiAJ
CQkJQThBNDc0MjQxNTFBODI1QjAwNDEyM0ZGIC8qIFNpbmdseUxpbmtlZExpc3QuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE3NDg3NDUzMTdBMEJEQUUwMEZBMDRDQiAvKiBTaXhDaGFyYWN0ZXJIYXNo
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQyNjE1MUE4MjVCMDA0MTIzRkYgLyogU3BlY3Ry
dW0uaCBpbiBIZWFkZXJzICovLAorCQkJCTI2QTcwNTI2MTc0NDVBNUYwMDExOEFDQSAvKiBSZWYu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDI4MTUxQTgyNUIwMDQxMjNGRiAvKiBTdGFja0Jv
dW5kcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkVEQUNEM0UxNjMwRjgzRjAwQzY5NjM0IC8qIFN0
YWNrU3RhdHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDI5MTUxQTgyNUIwMDQxMjNGRiAv
KiBTdGF0aWNDb25zdHJ1Y3RvcnMuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dURi93dGYvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dApp
bmRleCA5YTU5MTg2Li42YjM2N2NiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxp
c3RzLnR4dAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dApAQCAtNTUsNiArNTUs
NyBAQCBzZXQoV1RGX0hFQURFUlMKICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlLmgKICAgICBOb25D
b3B5aW5nU29ydC5oCiAgICAgVGhyZWFkUmVzdHJpY3Rpb25WZXJpZmllci5oCisgICAgUmVmLmgK
ICAgICBOb25jb3B5YWJsZS5oCiAgICAgTm90Rm91bmQuaAogICAgIE51bGxQdHIuaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvRm9yd2FyZC5oIGIvU291cmNlL1dURi93dGYvRm9yd2FyZC5o
CmluZGV4IDJhNDc1MDMuLjU5YTVkYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0Zvcndh
cmQuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmgKQEAgLTMyLDYgKzMyLDcgQEAgbmFt
ZXNwYWNlIFdURiB7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgUGFzc093blB0cjsK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBQYXNzUmVmUHRyOwogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IGNsYXNzIFJlZlB0cjsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFz
cyBSZWY7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5LCB0
eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXI+IGNsYXNzIFZlY3RvcjsKIAogICAgIGNsYXNzIEF0b21p
Y1N0cmluZzsKQEAgLTU1LDYgKzU2LDcgQEAgdXNpbmcgV1RGOjpQYXNzT3duQXJyYXlQdHI7CiB1
c2luZyBXVEY6OlBhc3NPd25QdHI7CiB1c2luZyBXVEY6OlBhc3NSZWZQdHI7CiB1c2luZyBXVEY6
OlJlZlB0cjsKK3VzaW5nIFdURjo6UmVmOwogdXNpbmcgV1RGOjpWZWN0b3I7CiAKIHVzaW5nIFdU
Rjo6QXRvbWljU3RyaW5nOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUmVmLmggYi9Tb3Vy
Y2UvV1RGL3d0Zi9SZWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGI1
MjhkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvUmVmLmgKQEAgLTAsMCArMSwx
NzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdURl9SZWZfaAorI2RlZmluZSBXVEZfUmVmX2gK
KworI2luY2x1ZGUgPHd0Zi9GYXN0QWxsb2NCYXNlLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBSZWYgeworcHVibGljOgorICAgIFJlZihUJik7CisgICAg
UmVmKGNvbnN0IFQmKTsKKyAgICBSZWYoY29uc3QgUmVmPFQ+Jik7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVT4gUmVmKGNvbnN0IFJlZjxVPiYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IFJl
ZihVJik7CisKKyAgICAvLyBUaGVzZSB0d28gd2lsbCBpbmN1ciB0aGUgY29zdCBvZiBhIG51bGwt
Y2hlY2sgdG8gZ3VhcmFudGVlIHRoYXQgUmVmIGFsd2F5cyBwb2ludHMgYXQgc29tZXRoaW5nLgor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IFJlZihjb25zdCBSZWZQdHI8VT4mKTsKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBVPiBSZWYoY29uc3QgUGFzc1JlZlB0cjxVPiYpOworCisgICAgQUxXQVlT
X0lOTElORSB+UmVmKCkgeyBtX3B0ci0+ZGVyZWYoKTsgfQorCisgICAgVCYgZ2V0KCkgY29uc3Qg
eyByZXR1cm4gKm1fcHRyOyB9CisKKyAgICB2b2lkIHN3YXAoUmVmJik7CisKKyAgICBzdGF0aWMg
VCogaGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4o
LTEpOyB9CisKK3ByaXZhdGU6CisgICAgUmVmJiBvcGVyYXRvcj0oY29uc3QgUmVmPFQ+Jik7CisK
KyAgICBUKiBtX3B0cjsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitBTFdBWVNfSU5MSU5F
IFJlZjxUPjo6UmVmKFQmIG9iamVjdCkKKyAgICA6IG1fcHRyKCZvYmplY3QpCit7CisgICAgbV9w
dHItPnJlZigpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorQUxXQVlTX0lOTElORSBSZWY8
VD46OlJlZihjb25zdCBUJiBvYmplY3QpCisgICAgOiBtX3B0cigmY29uc3RfY2FzdDxUJj4ob2Jq
ZWN0KSkKK3sKKyAgICBtX3B0ci0+cmVmKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitB
TFdBWVNfSU5MSU5FIFJlZjxUPjo6UmVmKGNvbnN0IFJlZjxUPiYgbykKKyAgICA6IG1fcHRyKCZv
LmdldCgpKQoreworICAgIG1fcHRyLT5yZWYoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
dGVtcGxhdGU8dHlwZW5hbWUgVT4KK0FMV0FZU19JTkxJTkUgUmVmPFQ+OjpSZWYoY29uc3QgUmVm
PFU+JiBvKQorICAgIDogbV9wdHIoJm8uZ2V0KCkpCit7CisgICAgbV9wdHItPnJlZigpOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorQUxXQVlTX0lOTElO
RSBSZWY8VD46OlJlZihVJiBvYmplY3QpCisgICAgOiBtX3B0cigmb2JqZWN0KQoreworICAgIG1f
cHRyLT5yZWYoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gdGVtcGxhdGU8dHlwZW5hbWUg
VT4KK0FMV0FZU19JTkxJTkUgUmVmPFQ+OjpSZWYoY29uc3QgUmVmUHRyPFU+JiBvKQorICAgIDog
bV9wdHIoby5nZXQoKSkKK3sKKyAgICBpZiAoVU5MSUtFTFkoIW1fcHRyKSkKKyAgICAgICAgQ1JB
U0goKTsKKyAgICBtX3B0ci0+cmVmKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHRlbXBs
YXRlPHR5cGVuYW1lIFU+CitBTFdBWVNfSU5MSU5FIFJlZjxUPjo6UmVmKGNvbnN0IFBhc3NSZWZQ
dHI8VT4mIG8pCisgICAgOiBtX3B0cihvLmxlYWtSZWYoKSkKK3sKKyAgICBpZiAoVU5MSUtFTFko
IW1fcHRyKSkKKyAgICAgICAgQ1JBU0goKTsKK30KKwordGVtcGxhdGU8Y2xhc3MgVD4gaW5saW5l
IHZvaWQgUmVmPFQ+Ojpzd2FwKFJlZjxUPiYgbykKK3sKKyAgICBzdGQ6OnN3YXAobV9wdHIsIG8u
bV9wdHIpOworfQorCit0ZW1wbGF0ZTxjbGFzcyBUPiBpbmxpbmUgdm9pZCBzd2FwKFJlZjxUPiYg
YSwgUmVmPFQ+JiBiKQoreworICAgIGEuc3dhcChiKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZWY8VD4mIGEsIGNv
bnN0IFJlZjxVPiYgYikKK3sKKyAgICByZXR1cm4gJmEuZ2V0KCkgPT0gJmIuZ2V0KCk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBib29sIG9wZXJhdG9yPT0o
Y29uc3QgUmVmPFQ+JiBhLCBVKiBiKQoreworICAgIHJldHVybiAmYS5nZXQoKSA9PSBiOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09
KFQqIGEsIGNvbnN0IFJlZjxVPiYgYikKK3sKKyAgICByZXR1cm4gYSA9PSAmYi5nZXQoKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBSZWY8VD4mIGEsIGNvbnN0IFJlZlB0cjxVPiYgYikKK3sKKyAgICByZXR1cm4gJmEu
Z2V0KCkgPT0gYi5nZXQoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4g
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZWZQdHI8VD4mIGEsIGNvbnN0IFJlZjxVPiYg
YikKK3sKKyAgICByZXR1cm4gYS5nZXQoKSA9PSAmYi5nZXQoKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBSZWY8VD4m
IGEsIGNvbnN0IFJlZjxVPiYgYikKK3sKKyAgICByZXR1cm4gJmEuZ2V0KCkgIT0gJmIuZ2V0KCk7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBib29sIG9wZXJh
dG9yIT0oY29uc3QgUmVmPFQ+JiBhLCBVKiBiKQoreworICAgIHJldHVybiAmYS5nZXQoKSAhPSBi
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgYm9vbCBvcGVy
YXRvciE9KFQqIGEsIGNvbnN0IFJlZjxVPiYgYikKK3sKKyAgICByZXR1cm4gYSAhPSAmYi5nZXQo
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBSZWY8VD4mIGEsIGNvbnN0IFJlZlB0cjxVPiYgYikKK3sKKyAgICByZXR1
cm4gJmEuZ2V0KCkgIT0gYi5nZXQoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVT4gaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBSZWZQdHI8VD4mIGEsIGNvbnN0IFJl
ZjxVPiYgYikKK3sKKyAgICByZXR1cm4gYS5nZXQoKSAhPSAmYi5nZXQoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6UmVmOworCisjZW5kaWYgLy8gV1RGX1JlZl9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCA3MjJkMTAwLi42ODAwYmUyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5jcHAKQEAgLTIzNzUsNyArMjM3NSw3IEBAIHZvaWQgRG9jdW1lbnQ6OmltcGxpY2l0
Q2xvc2UoKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBDYWxsIHRvIGRpc3BhdGNoV2luZG93
TG9hZEV2ZW50IGNhbiBibG93IHVzIGZyb20gdW5kZXJuZWF0aC4KLSAgICBSZWZQdHI8RG9jdW1l
bnQ+IHByb3RlY3QodGhpcyk7CisgICAgUmVmPERvY3VtZW50PiBwcm90ZWN0KCp0aGlzKTsKIAog
ICAgIG1fcHJvY2Vzc2luZ0xvYWRFdmVudCA9IHRydWU7CiAKQEAgLTUzMjUsNyArNTMyNSw3IEBA
IHZvaWQgRG9jdW1lbnQ6OmZ1bGxTY3JlZW5DaGFuZ2VEZWxheVRpbWVyRmlyZWQoVGltZXI8RG9j
dW1lbnQ+KikKICAgICAvLyBTaW5jZSB3ZSBkaXNwYXRjaCBldmVudHMgaW4gdGhpcyBmdW5jdGlv
biwgaXQncyBwb3NzaWJsZSB0aGF0IHRoZQogICAgIC8vIGRvY3VtZW50IHdpbGwgYmUgZGV0YWNo
ZWQgYW5kIEdDJ2QuIFdlIHByb3RlY3QgaXQgaGVyZSB0byBtYWtlIHN1cmUgd2UKICAgICAvLyBj
YW4gZmluaXNoIHRoZSBmdW5jdGlvbiBzdWNjZXNzZnVsbHkuCi0gICAgUmVmUHRyPERvY3VtZW50
PiBwcm90ZWN0RG9jdW1lbnQodGhpcyk7CisgICAgUmVmPERvY3VtZW50PiBwcm90ZWN0KCp0aGlz
KTsKICAgICBEZXF1ZTxSZWZQdHI8Tm9kZT4gPiBjaGFuZ2VRdWV1ZTsKICAgICBtX2Z1bGxTY3Jl
ZW5DaGFuZ2VFdmVudFRhcmdldFF1ZXVlLnN3YXAoY2hhbmdlUXVldWUpOwogICAgIERlcXVlPFJl
ZlB0cjxOb2RlPiA+IGVycm9yUXVldWU7CkBAIC01ODI5LDggKzU4MjksOCBAQCB2b2lkIERvY3Vt
ZW50Ojp1cGRhdGVIb3ZlckFjdGl2ZVN0YXRlKGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0
LCBFbGVtZW50KiBpbgogICAgIC8vIExvY2F0ZSB0aGUgY29tbW9uIGFuY2VzdG9yIHJlbmRlciBv
YmplY3QgZm9yIHRoZSB0d28gcmVuZGVyZXJzLgogICAgIFJlbmRlck9iamVjdCogYW5jZXN0b3Ig
PSBuZWFyZXN0Q29tbW9uSG92ZXJBbmNlc3RvcihvbGRIb3Zlck9iaiwgbmV3SG92ZXJPYmopOwog
Ci0gICAgVmVjdG9yPFJlZlB0cjxOb2RlPiwgMzI+IG5vZGVzVG9SZW1vdmVGcm9tQ2hhaW47Ci0g
ICAgVmVjdG9yPFJlZlB0cjxOb2RlPiwgMzI+IG5vZGVzVG9BZGRUb0NoYWluOworICAgIFZlY3Rv
cjxSZWY8Tm9kZT4sIDMyPiBub2Rlc1RvUmVtb3ZlRnJvbUNoYWluOworICAgIFZlY3RvcjxSZWY8
Tm9kZT4sIDMyPiBub2Rlc1RvQWRkVG9DaGFpbjsKIAogICAgIC8vIG1vdXNlZW50ZXIgYW5kIG1v
dXNlbGVhdmUgZXZlbnRzIGFyZSBvbmx5IGRpc3BhdGNoZWQgaWYgdGhlcmUgaXMgYSBjYXB0dXJp
bmcgZXZlbnRoYW5kbGVyIG9uIGFuIGFuY2VzdG9yCiAgICAgLy8gb3IgYSBub3JtYWwgZXZlbnRo
YW5kbGVyIG9uIHRoZSBlbGVtZW50IGl0c2VsZiAodGhleSBkb24ndCBidWJibGUpLgpAQCAtNTg1
OSw3ICs1ODU5LDcgQEAgdm9pZCBEb2N1bWVudDo6dXBkYXRlSG92ZXJBY3RpdmVTdGF0ZShjb25z
dCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgRWxlbWVudCogaW4KICAgICAgICAgaWYgKG9sZEhv
dmVyZWRFbGVtZW50ICYmICFvbGRIb3Zlck9iaikgewogICAgICAgICAgICAgZm9yIChOb2RlKiBu
b2RlID0gb2xkSG92ZXJlZEVsZW1lbnQuZ2V0KCk7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnRO
b2RlKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoIW11c3RCZUluQWN0aXZlQ2hhaW4gfHwgKG5v
ZGUtPmlzRWxlbWVudE5vZGUoKSAmJiB0b0VsZW1lbnQobm9kZSktPmluQWN0aXZlQ2hhaW4oKSkp
Ci0gICAgICAgICAgICAgICAgICAgIG5vZGVzVG9SZW1vdmVGcm9tQ2hhaW4uYXBwZW5kKG5vZGUp
OworICAgICAgICAgICAgICAgICAgICBub2Rlc1RvUmVtb3ZlRnJvbUNoYWluLmFwcGVuZCgqbm9k
ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtNTg2OCw3ICs1ODY4LDcgQEAgdm9p
ZCBEb2N1bWVudDo6dXBkYXRlSG92ZXJBY3RpdmVTdGF0ZShjb25zdCBIaXRUZXN0UmVxdWVzdCYg
cmVxdWVzdCwgRWxlbWVudCogaW4KICAgICAgICAgICAgIGlmICghY3Vyci0+bm9kZSgpIHx8IGN1
cnItPmlzVGV4dCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYg
KCFtdXN0QmVJbkFjdGl2ZUNoYWluIHx8IChjdXJyLT5ub2RlKCktPmlzRWxlbWVudE5vZGUoKSAm
JiB0b0VsZW1lbnQoY3Vyci0+bm9kZSgpKS0+aW5BY3RpdmVDaGFpbigpKSkKLSAgICAgICAgICAg
ICAgICBub2Rlc1RvUmVtb3ZlRnJvbUNoYWluLmFwcGVuZChjdXJyLT5ub2RlKCkpOworICAgICAg
ICAgICAgICAgIG5vZGVzVG9SZW1vdmVGcm9tQ2hhaW4uYXBwZW5kKCpjdXJyLT5ub2RlKCkpOwog
ICAgICAgICB9CiAgICAgICAgIC8vIFVuc2V0IGhvdmVyZWQgbm9kZXMgaW4gc3ViIGZyYW1lIGRv
Y3VtZW50cyBpZiB0aGUgb2xkIGhvdmVyZWQgbm9kZSB3YXMgYSBmcmFtZSBvd25lci4KICAgICAg
ICAgaWYgKG9sZEhvdmVyZWRFbGVtZW50ICYmIG9sZEhvdmVyZWRFbGVtZW50LT5pc0ZyYW1lT3du
ZXJFbGVtZW50KCkpIHsKQEAgLTU4ODIsMzAgKzU4ODIsMzIgQEAgdm9pZCBEb2N1bWVudDo6dXBk
YXRlSG92ZXJBY3RpdmVTdGF0ZShjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgRWxlbWVu
dCogaW4KICAgICAgICAgaWYgKCFjdXJyLT5ub2RlKCkgfHwgY3Vyci0+aXNUZXh0KCkpCiAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKCFtdXN0QmVJbkFjdGl2ZUNoYWluIHx8IChj
dXJyLT5ub2RlKCktPmlzRWxlbWVudE5vZGUoKSAmJiB0b0VsZW1lbnQoY3Vyci0+bm9kZSgpKS0+
aW5BY3RpdmVDaGFpbigpKSkKLSAgICAgICAgICAgIG5vZGVzVG9BZGRUb0NoYWluLmFwcGVuZChj
dXJyLT5ub2RlKCkpOworICAgICAgICAgICAgbm9kZXNUb0FkZFRvQ2hhaW4uYXBwZW5kKCpjdXJy
LT5ub2RlKCkpOwogICAgIH0KIAogICAgIHNpemVfdCByZW1vdmVDb3VudCA9IG5vZGVzVG9SZW1v
dmVGcm9tQ2hhaW4uc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVtb3ZlQ291
bnQ7ICsraSkgewotICAgICAgICBpZiAobm9kZXNUb1JlbW92ZUZyb21DaGFpbltpXS0+aXNFbGVt
ZW50Tm9kZSgpKQotICAgICAgICAgICAgdG9FbGVtZW50KG5vZGVzVG9SZW1vdmVGcm9tQ2hhaW5b
aV0uZ2V0KCkpLT5zZXRIb3ZlcmVkKGZhbHNlKTsKLSAgICAgICAgaWYgKGV2ZW50ICYmIChoYXND
YXB0dXJpbmdNb3VzZUxlYXZlTGlzdGVuZXIgfHwgbm9kZXNUb1JlbW92ZUZyb21DaGFpbltpXS0+
aGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1lcygpLm1vdXNlbGVhdmVFdmVudCkpKQotICAgICAg
ICAgICAgbm9kZXNUb1JlbW92ZUZyb21DaGFpbltpXS0+ZGlzcGF0Y2hNb3VzZUV2ZW50KCpldmVu
dCwgZXZlbnROYW1lcygpLm1vdXNlbGVhdmVFdmVudCwgMCwgbmV3SG92ZXJlZEVsZW1lbnQpOwor
ICAgICAgICBOb2RlJiBub2RlID0gbm9kZXNUb1JlbW92ZUZyb21DaGFpbltpXS5nZXQoKTsKKyAg
ICAgICAgaWYgKG5vZGUuaXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAgICAgdG9FbGVtZW50KCZu
b2RlKS0+c2V0SG92ZXJlZChmYWxzZSk7CisgICAgICAgIGlmIChldmVudCAmJiAoaGFzQ2FwdHVy
aW5nTW91c2VMZWF2ZUxpc3RlbmVyIHx8IG5vZGUuaGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1l
cygpLm1vdXNlbGVhdmVFdmVudCkpKQorICAgICAgICAgICAgbm9kZS5kaXNwYXRjaE1vdXNlRXZl
bnQoKmV2ZW50LCBldmVudE5hbWVzKCkubW91c2VsZWF2ZUV2ZW50LCAwLCBuZXdIb3ZlcmVkRWxl
bWVudCk7CiAgICAgfQogCiAgICAgYm9vbCBzYXdDb21tb25BbmNlc3RvciA9IGZhbHNlOwogICAg
IHNpemVfdCBhZGRDb3VudCA9IG5vZGVzVG9BZGRUb0NoYWluLnNpemUoKTsKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGFkZENvdW50OyArK2kpIHsKLSAgICAgICAgaWYgKGFsbG93QWN0aXZl
Q2hhbmdlcyAmJiBub2Rlc1RvQWRkVG9DaGFpbltpXS0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAg
ICAgICAgdG9FbGVtZW50KG5vZGVzVG9BZGRUb0NoYWluW2ldLmdldCgpKS0+c2V0QWN0aXZlKHRy
dWUpOwotICAgICAgICBpZiAoYW5jZXN0b3IgJiYgbm9kZXNUb0FkZFRvQ2hhaW5baV0gPT0gYW5j
ZXN0b3ItPm5vZGUoKSkKKyAgICAgICAgTm9kZSYgbm9kZSA9IG5vZGVzVG9BZGRUb0NoYWluW2ld
LmdldCgpOworICAgICAgICBpZiAoYWxsb3dBY3RpdmVDaGFuZ2VzICYmIG5vZGUuaXNFbGVtZW50
Tm9kZSgpKQorICAgICAgICAgICAgdG9FbGVtZW50KCZub2RlKS0+c2V0QWN0aXZlKHRydWUpOwor
ICAgICAgICBpZiAoYW5jZXN0b3IgJiYgJm5vZGUgPT0gYW5jZXN0b3ItPm5vZGUoKSkKICAgICAg
ICAgICAgIHNhd0NvbW1vbkFuY2VzdG9yID0gdHJ1ZTsKICAgICAgICAgaWYgKCFzYXdDb21tb25B
bmNlc3RvcikgewogICAgICAgICAgICAgLy8gRWxlbWVudHMgYWZ0ZXIgdGhlIGNvbW1vbiBob3Zl
ciBhbmNlc3RvciBkb2VzIG5vdCBjaGFuZ2UgaG92ZXIgc3RhdGUsIGJ1dCBhcmUgaXRlcmF0ZWQg
b3ZlciBiZWNhdXNlIHRoZXkgbWF5IGNoYW5nZSBhY3RpdmUgc3RhdGUuCi0gICAgICAgICAgICBp
ZiAobm9kZXNUb0FkZFRvQ2hhaW5baV0tPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgICAgICAg
ICB0b0VsZW1lbnQobm9kZXNUb0FkZFRvQ2hhaW5baV0uZ2V0KCkpLT5zZXRIb3ZlcmVkKHRydWUp
OwotICAgICAgICAgICAgaWYgKGV2ZW50ICYmIChoYXNDYXB0dXJpbmdNb3VzZUVudGVyTGlzdGVu
ZXIgfHwgbm9kZXNUb0FkZFRvQ2hhaW5baV0tPmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMo
KS5tb3VzZWVudGVyRXZlbnQpKSkKLSAgICAgICAgICAgICAgICBub2Rlc1RvQWRkVG9DaGFpbltp
XS0+ZGlzcGF0Y2hNb3VzZUV2ZW50KCpldmVudCwgZXZlbnROYW1lcygpLm1vdXNlZW50ZXJFdmVu
dCwgMCwgb2xkSG92ZXJlZEVsZW1lbnQuZ2V0KCkpOworICAgICAgICAgICAgaWYgKG5vZGUuaXNF
bGVtZW50Tm9kZSgpKQorICAgICAgICAgICAgICAgIHRvRWxlbWVudCgmbm9kZSktPnNldEhvdmVy
ZWQodHJ1ZSk7CisgICAgICAgICAgICBpZiAoZXZlbnQgJiYgKGhhc0NhcHR1cmluZ01vdXNlRW50
ZXJMaXN0ZW5lciB8fCBub2RlLmhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS5tb3VzZWVu
dGVyRXZlbnQpKSkKKyAgICAgICAgICAgICAgICBub2RlLmRpc3BhdGNoTW91c2VFdmVudCgqZXZl
bnQsIGV2ZW50TmFtZXMoKS5tb3VzZWVudGVyRXZlbnQsIDAsIG9sZEhvdmVyZWRFbGVtZW50Lmdl
dCgpKTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L05vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCmluZGV4IGMxOGU0OGIuLjhj
NTM1N2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKQEAgLTIxODAsMTAgKzIxODAsMTAgQEAgYm9vbCBOb2Rl
OjpkaXNwYXRjaEJlZm9yZUxvYWRFdmVudChjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKICAgICBp
ZiAoIWRvY3VtZW50KCkuaGFzTGlzdGVuZXJUeXBlKERvY3VtZW50OjpCRUZPUkVMT0FEX0xJU1RF
TkVSKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBSZWZQdHI8Tm9kZT4gcHJvdGVjdG9y
KHRoaXMpOwotICAgIFJlZlB0cjxCZWZvcmVMb2FkRXZlbnQ+IGJlZm9yZUxvYWRFdmVudCA9IEJl
Zm9yZUxvYWRFdmVudDo6Y3JlYXRlKHNvdXJjZVVSTCk7Ci0gICAgZGlzcGF0Y2hFdmVudChiZWZv
cmVMb2FkRXZlbnQuZ2V0KCkpOwotICAgIHJldHVybiAhYmVmb3JlTG9hZEV2ZW50LT5kZWZhdWx0
UHJldmVudGVkKCk7CisgICAgUmVmPE5vZGU+IHByb3RlY3RvcigqdGhpcyk7CisgICAgUmVmPEJl
Zm9yZUxvYWRFdmVudD4gYmVmb3JlTG9hZEV2ZW50ID0gQmVmb3JlTG9hZEV2ZW50OjpjcmVhdGUo
c291cmNlVVJMKTsKKyAgICBkaXNwYXRjaEV2ZW50KCZiZWZvcmVMb2FkRXZlbnQuZ2V0KCkpOwor
ICAgIHJldHVybiAhYmVmb3JlTG9hZEV2ZW50LmdldCgpLmRlZmF1bHRQcmV2ZW50ZWQoKTsKIH0K
IAogYm9vbCBOb2RlOjpkaXNwYXRjaFdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50
JiBldmVudCkKQEAgLTIzMjMsOSArMjMyMyw5IEBAIHZvaWQgTm9kZTo6cmVtb3ZlZExhc3RSZWYo
KQogCiB2b2lkIE5vZGU6OnRleHRSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzKSBjb25zdAog
ewotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCZkb2N1bWVudCgpKTsK
LSAgICByYW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKGNvbnN0X2Nhc3Q8Tm9kZSo+KHRoaXMpLCBJ
R05PUkVfRVhDRVBUSU9OKTsKLSAgICByYW5nZS0+dGV4dFJlY3RzKHJlY3RzKTsKKyAgICBSZWY8
UmFuZ2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgmZG9jdW1lbnQoKSk7CisgICAgcmFuZ2UuZ2V0
KCkuc2VsZWN0Tm9kZUNvbnRlbnRzKGNvbnN0X2Nhc3Q8Tm9kZSo+KHRoaXMpLCBJR05PUkVfRVhD
RVBUSU9OKTsKKyAgICByYW5nZS5nZXQoKS50ZXh0UmVjdHMocmVjdHMpOwogfQogCiB1bnNpZ25l
ZCBOb2RlOjpjb25uZWN0ZWRTdWJmcmFtZUNvdW50KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCmluZGV4IGRiMjA2MjQuLjAxNzc0YzQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcApA
QCAtNDEzLDggKzQxMyw4IEBAIGJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6Y2hlY2tWYWxp
ZGl0eShWZWN0b3I8UmVmUHRyPEZvcm1Bc3NvY2lhdGVkRWxlbWVudD4KICAgICBpZiAoIXdpbGxW
YWxpZGF0ZSgpIHx8IGlzVmFsaWRGb3JtQ29udHJvbEVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgLy8gQW4gZXZlbnQgaGFuZGxlciBjYW4gZGVyZWYgdGhpcyBvYmplY3QuCi0g
ICAgUmVmUHRyPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+IHByb3RlY3Rvcih0aGlzKTsKLSAgICBS
ZWZQdHI8RG9jdW1lbnQ+IG9yaWdpbmFsRG9jdW1lbnQoJmRvY3VtZW50KCkpOworICAgIFJlZjxI
VE1MRm9ybUNvbnRyb2xFbGVtZW50PiBwcm90ZWN0b3IoKnRoaXMpOworICAgIFJlZjxEb2N1bWVu
dD4gb3JpZ2luYWxEb2N1bWVudChkb2N1bWVudCgpKTsKICAgICBib29sIG5lZWRzRGVmYXVsdEFj
dGlvbiA9IGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuaW52YWxpZEV2
ZW50LCBmYWxzZSwgdHJ1ZSkpOwogICAgIGlmIChuZWVkc0RlZmF1bHRBY3Rpb24gJiYgdW5oYW5k
bGVkSW52YWxpZENvbnRyb2xzICYmIGluRG9jdW1lbnQoKSAmJiBvcmlnaW5hbERvY3VtZW50ID09
ICZkb2N1bWVudCgpKQogICAgICAgICB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMtPmFwcGVuZCh0
aGlzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCmluZGV4IDEwOGFh
MDEuLjllMzVmYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcApA
QCAtMTAzNCw3ICsxMDM0LDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRWYWx1ZShjb25z
dCBTdHJpbmcmIHZhbHVlLCBUZXh0RmllbGRFdmVudEJlaGF2aW9yIGV2ZW4KICAgICBpZiAoIW1f
aW5wdXRUeXBlLT5jYW5TZXRWYWx1ZSh2YWx1ZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJl
ZlB0cjxIVE1MSW5wdXRFbGVtZW50PiBwcm90ZWN0b3IodGhpcyk7CisgICAgUmVmPEhUTUxJbnB1
dEVsZW1lbnQ+IHByb3RlY3RvcigqdGhpcyk7CiAgICAgRXZlbnRRdWV1ZVNjb3BlIHNjb3BlOwog
ICAgIFN0cmluZyBzYW5pdGl6ZWRWYWx1ZSA9IHNhbml0aXplVmFsdWUodmFsdWUpOwogICAgIGJv
b2wgdmFsdWVDaGFuZ2VkID0gc2FuaXRpemVkVmFsdWUgIT0gdGhpcy0+dmFsdWUoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5jcHAKaW5kZXggMTgyNjIwZC4uM2ZiNjZi
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5jcHAKQEAgLTMwLDYg
KzMwLDcgQEAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJTY3JpcHRFdmVudExp
c3RlbmVyLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC03OSw3ICs4MCw3IEBAIE5vZGU6Okluc2VydGlvbk5vdGlm
aWNhdGlvblJlcXVlc3QgSFRNTFNjcmlwdEVsZW1lbnQ6Omluc2VydGVkSW50byhDb250YWluZXJO
b2RlCiAKIHZvaWQgSFRNTFNjcmlwdEVsZW1lbnQ6OnNldFRleHQoY29uc3QgU3RyaW5nICZ2YWx1
ZSkKIHsKLSAgICBSZWZQdHI8Tm9kZT4gcHJvdGVjdEZyb21NdXRhdGlvbkV2ZW50cyh0aGlzKTsK
KyAgICBSZWY8Tm9kZT4gcHJvdGVjdEZyb21NdXRhdGlvbkV2ZW50cygqdGhpcyk7CiAKICAgICBp
bnQgbnVtQ2hpbGRyZW4gPSBjaGlsZE5vZGVDb3VudCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAppbmRleCA2YTNiYTk1Li43NzE5M2ViIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKQEAgLTQwNiwxNiArNDA2
LDE2IEBAIFN0cmluZyBIVE1MVGV4dEFyZWFFbGVtZW50OjpkZWZhdWx0VmFsdWUoKSBjb25zdAog
CiB2b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OnNldERlZmF1bHRWYWx1ZShjb25zdCBTdHJpbmcm
IGRlZmF1bHRWYWx1ZSkKIHsKLSAgICBSZWZQdHI8Tm9kZT4gcHJvdGVjdEZyb21NdXRhdGlvbkV2
ZW50cyh0aGlzKTsKKyAgICBSZWY8Tm9kZT4gcHJvdGVjdEZyb21NdXRhdGlvbkV2ZW50cygqdGhp
cyk7CiAKICAgICAvLyBUbyBwcmVzZXJ2ZSBjb21tZW50cywgcmVtb3ZlIG9ubHkgdGhlIHRleHQg
bm9kZXMsIHRoZW4gYWRkIGEgc2luZ2xlIHRleHQgbm9kZS4KLSAgICBWZWN0b3I8UmVmUHRyPFRl
eHQ+PiB0ZXh0Tm9kZXM7CisgICAgVmVjdG9yPFJlZjxUZXh0Pj4gdGV4dE5vZGVzOwogICAgIGZv
ciAoVGV4dCogdGV4dE5vZGUgPSBUZXh0Tm9kZVRyYXZlcnNhbDo6Zmlyc3RDaGlsZCh0aGlzKTsg
dGV4dE5vZGU7IHRleHROb2RlID0gVGV4dE5vZGVUcmF2ZXJzYWw6Om5leHRTaWJsaW5nKHRleHRO
b2RlKSkKLSAgICAgICAgdGV4dE5vZGVzLmFwcGVuZCh0ZXh0Tm9kZSk7CisgICAgICAgIHRleHRO
b2Rlcy5hcHBlbmQoKnRleHROb2RlKTsKIAogICAgIHNpemVfdCBzaXplID0gdGV4dE5vZGVzLnNp
emUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgcmVt
b3ZlQ2hpbGQodGV4dE5vZGVzW2ldLmdldCgpLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICAgICAg
cmVtb3ZlQ2hpbGQoJnRleHROb2Rlc1tpXS5nZXQoKSwgSUdOT1JFX0VYQ0VQVElPTik7CiAKICAg
ICAvLyBOb3JtYWxpemUgbGluZSBlbmRpbmdzLgogICAgIFN0cmluZyB2YWx1ZSA9IGRlZmF1bHRW
YWx1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCmluZGV4IDM2ZDg4ZDQuLmYy
MWUwZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcApAQCAtMjMxOCwxNCAr
MjMxOCwxMiBAQCB2b2lkIEZyYW1lTG9hZGVyOjpmcmFtZUxvYWRDb21wbGV0ZWQoKQogCiB2b2lk
IEZyYW1lTG9hZGVyOjpkZXRhY2hDaGlsZHJlbigpCiB7Ci0gICAgdHlwZWRlZiBWZWN0b3I8UmVm
UHRyPEZyYW1lPiA+IEZyYW1lVmVjdG9yOwotICAgIEZyYW1lVmVjdG9yIGNoaWxkcmVuVG9EZXRh
Y2g7CisgICAgVmVjdG9yPFJlZjxGcmFtZT4sIDE2PiBjaGlsZHJlblRvRGV0YWNoOwogICAgIGNo
aWxkcmVuVG9EZXRhY2gucmVzZXJ2ZUNhcGFjaXR5KG1fZnJhbWUudHJlZSgpLmNoaWxkQ291bnQo
KSk7CiAgICAgZm9yIChGcmFtZSogY2hpbGQgPSBtX2ZyYW1lLnRyZWUoKS5sYXN0Q2hpbGQoKTsg
Y2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUoKS5wcmV2aW91c1NpYmxpbmcoKSkKLSAgICAgICAg
Y2hpbGRyZW5Ub0RldGFjaC5hcHBlbmQoY2hpbGQpOwotICAgIEZyYW1lVmVjdG9yOjppdGVyYXRv
ciBlbmQgPSBjaGlsZHJlblRvRGV0YWNoLmVuZCgpOwotICAgIGZvciAoRnJhbWVWZWN0b3I6Oml0
ZXJhdG9yIGl0ID0gY2hpbGRyZW5Ub0RldGFjaC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0g
ICAgICAgICgqaXQpLT5sb2FkZXIoKS5kZXRhY2hGcm9tUGFyZW50KCk7CisgICAgICAgIGNoaWxk
cmVuVG9EZXRhY2gudW5jaGVja2VkQXBwZW5kKCpjaGlsZCk7CisgICAgZm9yIChhdXRvIGl0ID0g
Y2hpbGRyZW5Ub0RldGFjaC5iZWdpbigpLCBlbmQgPSBjaGlsZHJlblRvRGV0YWNoLmVuZCgpOyBp
dCAhPSBlbmQ7ICsraXQpCisgICAgICAgIGl0LT5nZXQoKS5sb2FkZXIoKS5kZXRhY2hGcm9tUGFy
ZW50KCk7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXI6OmNsb3NlQW5kUmVtb3ZlQ2hpbGQoRnJhbWUq
IGNoaWxkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCmluZGV4IDVmZmFmZjQuLjJmMTBlZjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKQEAgLTI0NSwyNSArMjQ1LDI1IEBAIGJvb2wg
RE9NV2luZG93OjpkaXNwYXRjaEFsbFBlbmRpbmdCZWZvcmVVbmxvYWRFdmVudHMoKQogICAgIGlm
IChhbHJlYWR5RGlzcGF0Y2hlZCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBWZWN0b3I8
UmVmUHRyPERPTVdpbmRvdz4gPiB3aW5kb3dzOworICAgIFZlY3RvcjxSZWY8RE9NV2luZG93Pj4g
d2luZG93czsKICAgICBET01XaW5kb3dTZXQ6Oml0ZXJhdG9yIGVuZCA9IHNldC5lbmQoKTsKICAg
ICBmb3IgKERPTVdpbmRvd1NldDo6aXRlcmF0b3IgaXQgPSBzZXQuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQotICAgICAgICB3aW5kb3dzLmFwcGVuZChpdC0+a2V5KTsKKyAgICAgICAgd2luZG93
cy5hcHBlbmQoKml0LT5rZXkpOwogCiAgICAgc2l6ZV90IHNpemUgPSB3aW5kb3dzLnNpemUoKTsK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBET01XaW5k
b3cqIHdpbmRvdyA9IHdpbmRvd3NbaV0uZ2V0KCk7Ci0gICAgICAgIGlmICghc2V0LmNvbnRhaW5z
KHdpbmRvdykpCisgICAgICAgIERPTVdpbmRvdyYgd2luZG93ID0gd2luZG93c1tpXS5nZXQoKTsK
KyAgICAgICAgaWYgKCFzZXQuY29udGFpbnMoJndpbmRvdykpCiAgICAgICAgICAgICBjb250aW51
ZTsKIAotICAgICAgICBGcmFtZSogZnJhbWUgPSB3aW5kb3ctPmZyYW1lKCk7CisgICAgICAgIEZy
YW1lKiBmcmFtZSA9IHdpbmRvdy5mcmFtZSgpOwogICAgICAgICBpZiAoIWZyYW1lKQogICAgICAg
ICAgICAgY29udGludWU7CiAKICAgICAgICAgaWYgKCFmcmFtZS0+bG9hZGVyKCkuc2hvdWxkQ2xv
c2UoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICB3aW5kb3ctPmVuYWJs
ZVN1ZGRlblRlcm1pbmF0aW9uKCk7CisgICAgICAgIHdpbmRvdy5lbmFibGVTdWRkZW5UZXJtaW5h
dGlvbigpOwogICAgIH0KIAogICAgIGFscmVhZHlEaXNwYXRjaGVkID0gdHJ1ZTsKQEAgLTI4Niwy
MSArMjg2LDIxIEBAIHZvaWQgRE9NV2luZG93OjpkaXNwYXRjaEFsbFBlbmRpbmdVbmxvYWRFdmVu
dHMoKQogICAgIGlmIChhbHJlYWR5RGlzcGF0Y2hlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
VmVjdG9yPFJlZlB0cjxET01XaW5kb3c+ID4gd2luZG93czsKKyAgICBWZWN0b3I8UmVmPERPTVdp
bmRvdz4+IHdpbmRvd3M7CiAgICAgRE9NV2luZG93U2V0OjppdGVyYXRvciBlbmQgPSBzZXQuZW5k
KCk7CiAgICAgZm9yIChET01XaW5kb3dTZXQ6Oml0ZXJhdG9yIGl0ID0gc2V0LmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkKLSAgICAgICAgd2luZG93cy5hcHBlbmQoaXQtPmtleSk7CisgICAgICAg
IHdpbmRvd3MuYXBwZW5kKCppdC0+a2V5KTsKIAogICAgIHNpemVfdCBzaXplID0gd2luZG93cy5z
aXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAg
RE9NV2luZG93KiB3aW5kb3cgPSB3aW5kb3dzW2ldLmdldCgpOwotICAgICAgICBpZiAoIXNldC5j
b250YWlucyh3aW5kb3cpKQorICAgICAgICBET01XaW5kb3cmIHdpbmRvdyA9IHdpbmRvd3NbaV0u
Z2V0KCk7CisgICAgICAgIGlmICghc2V0LmNvbnRhaW5zKCZ3aW5kb3cpKQogICAgICAgICAgICAg
Y29udGludWU7CiAKLSAgICAgICAgd2luZG93LT5kaXNwYXRjaEV2ZW50KFBhZ2VUcmFuc2l0aW9u
RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkucGFnZWhpZGVFdmVudCwgZmFsc2UpLCB3aW5kb3ct
PmRvY3VtZW50KCkpOwotICAgICAgICB3aW5kb3ctPmRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0
ZShldmVudE5hbWVzKCkudW5sb2FkRXZlbnQsIGZhbHNlLCBmYWxzZSksIHdpbmRvdy0+ZG9jdW1l
bnQoKSk7CisgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KFBhZ2VUcmFuc2l0aW9uRXZlbnQ6
OmNyZWF0ZShldmVudE5hbWVzKCkucGFnZWhpZGVFdmVudCwgZmFsc2UpLCB3aW5kb3cuZG9jdW1l
bnQoKSk7CisgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnRO
YW1lcygpLnVubG9hZEV2ZW50LCBmYWxzZSwgZmFsc2UpLCB3aW5kb3cuZG9jdW1lbnQoKSk7CiAK
LSAgICAgICAgd2luZG93LT5lbmFibGVTdWRkZW5UZXJtaW5hdGlvbigpOworICAgICAgICB3aW5k
b3cuZW5hYmxlU3VkZGVuVGVybWluYXRpb24oKTsKICAgICB9CiAKICAgICBhbHJlYWR5RGlzcGF0
Y2hlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCmluZGV4IDczZGE5NGUuLjRjMWE2NDAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWUuY3BwCkBAIC0xNTIsNyArMTUyLDcgQEAgc3RhdGljIGlubGluZSBmbG9h
dCBwYXJlbnRUZXh0Wm9vbUZhY3RvcihGcmFtZSogZnJhbWUpCiAKIGlubGluZSBGcmFtZTo6RnJh
bWUoUGFnZSogcGFnZSwgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQsIEZyYW1l
TG9hZGVyQ2xpZW50KiBmcmFtZUxvYWRlckNsaWVudCkKICAgICA6IG1fcGFnZShwYWdlKQotICAg
ICwgbV9zZXR0aW5ncygmcGFnZS0+c2V0dGluZ3MoKSkKKyAgICAsIG1fc2V0dGluZ3MocGFnZS0+
c2V0dGluZ3MoKSkKICAgICAsIG1fdHJlZU5vZGUodGhpcywgcGFyZW50RnJvbU93bmVyRWxlbWVu
dChvd25lckVsZW1lbnQpKQogICAgICwgbV9sb2FkZXIoKnRoaXMsICpmcmFtZUxvYWRlckNsaWVu
dCkKICAgICAsIG1fbmF2aWdhdGlvblNjaGVkdWxlcih0aGlzKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5oCmluZGV4
IDg5NmJiMDIuLmJjMjJmYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmgKQEAgLTM2LDYgKzM2LDcgQEAKICNp
bmNsdWRlICJOYXZpZ2F0aW9uU2NoZWR1bGVyLmgiCiAjaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIK
ICNpbmNsdWRlICJVc2VyU2NyaXB0VHlwZXMuaCIKKyNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogI2lmIFBMQVRGT1JNKFdJTikKQEAgLTE5OCw3ICsx
OTksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEhhc2hTZXQ8RnJhbWVEZXN0cnVj
dGlvbk9ic2VydmVyKj4gbV9kZXN0cnVjdGlvbk9ic2VydmVyczsKIAogICAgICAgICBQYWdlKiBt
X3BhZ2U7Ci0gICAgICAgIGNvbnN0IFJlZlB0cjxTZXR0aW5ncz4gbV9zZXR0aW5nczsKKyAgICAg
ICAgUmVmPFNldHRpbmdzPiBtX3NldHRpbmdzOwogICAgICAgICBtdXRhYmxlIEZyYW1lVHJlZSBt
X3RyZWVOb2RlOwogICAgICAgICBtdXRhYmxlIEZyYW1lTG9hZGVyIG1fbG9hZGVyOwogICAgICAg
ICBtdXRhYmxlIE5hdmlnYXRpb25TY2hlZHVsZXIgbV9uYXZpZ2F0aW9uU2NoZWR1bGVyOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4IGY5MzRjMTAuLjNiYmZhZjcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5jcHAKQEAgLTE3MCw3ICsxNzAsNyBAQCBQYWdpbmF0aW9uOjpNb2RlIHBh
Z2luYXRpb25Nb2RlRm9yUmVuZGVyU3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlKQogfQogCiBGcmFt
ZVZpZXc6OkZyYW1lVmlldyhGcmFtZSogZnJhbWUpCi0gICAgOiBtX2ZyYW1lKGZyYW1lKQorICAg
IDogbV9mcmFtZSgqZnJhbWUpCiAgICAgLCBtX2NhbkhhdmVTY3JvbGxiYXJzKHRydWUpCiAgICAg
LCBtX2xheW91dFRpbWVyKHRoaXMsICZGcmFtZVZpZXc6OmxheW91dFRpbWVyRmlyZWQpCiAgICAg
LCBtX2xheW91dFJvb3QoMCkKQEAgLTk1NSw3ICs5NTUsNyBAQCBib29sIEZyYW1lVmlldzo6aGFz
Q29tcG9zaXRlZENvbnRlbnQoKSBjb25zdAogYm9vbCBGcmFtZVZpZXc6Omhhc0NvbXBvc2l0ZWRD
b250ZW50SW5jbHVkaW5nRGVzY2VuZGFudHMoKSBjb25zdAogewogI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1fZnJhbWUuZ2V0KCk7IGZy
YW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KG1fZnJhbWUuZ2V0KCkpKSB7
CisgICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbV9mcmFtZS5nZXQoKTsgZnJhbWU7IGZyYW1lID0g
ZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoJm1fZnJhbWUuZ2V0KCkpKSB7CiAgICAgICAgIFJl
bmRlclZpZXcqIHJlbmRlclZpZXcgPSBmcmFtZS0+Y29udGVudFJlbmRlcmVyKCk7CiAgICAgICAg
IGlmIChSZW5kZXJMYXllckNvbXBvc2l0b3IqIGNvbXBvc2l0b3IgPSByZW5kZXJWaWV3ID8gJnJl
bmRlclZpZXctPmNvbXBvc2l0b3IoKSA6IDApIHsKICAgICAgICAgICAgIGlmIChjb21wb3NpdG9y
LT5pbkNvbXBvc2l0aW5nTW9kZSgpKQpAQCAtMTQ4MSw3ICsxNDgxLDcgQEAgYm9vbCBGcmFtZVZp
ZXc6OnVzZVNsb3dSZXBhaW50c0lmTm90T3ZlcmxhcHBlZCgpIGNvbnN0CiAKIHZvaWQgRnJhbWVW
aWV3Ojp1cGRhdGVDYW5CbGl0T25TY3JvbGxSZWN1cnNpdmVseSgpCiB7Ci0gICAgZm9yIChGcmFt
ZSogZnJhbWUgPSBtX2ZyYW1lLmdldCgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRy
YXZlcnNlTmV4dChtX2ZyYW1lLmdldCgpKSkgeworICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1f
ZnJhbWUuZ2V0KCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCZt
X2ZyYW1lLmdldCgpKSkgewogICAgICAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUtPnZp
ZXcoKSkKICAgICAgICAgICAgIHZpZXctPnNldENhbkJsaXRPblNjcm9sbCghdmlldy0+dXNlU2xv
d1JlcGFpbnRzKCkpOwogICAgIH0KQEAgLTE3ODksNyArMTc4OSw3IEBAIHZvaWQgRnJhbWVWaWV3
OjpzZXRJc092ZXJsYXBwZWQoYm9vbCBpc092ZXJsYXBwZWQpCiAgICAgICAgIGlmIChSZW5kZXJM
YXllckNvbXBvc2l0b3I6OmFsbG93c0luZGVwZW5kZW50bHlDb21wb3NpdGVkRnJhbWVzKHRoaXMp
KSB7CiAgICAgICAgICAgICAvLyBXZSBhbHNvIG5lZWQgdG8gdHJpZ2dlciByZWV2YWx1YXRpb24g
Zm9yIHRoaXMgYW5kIGFsbCBkZXNjZW5kYW50IGZyYW1lcywKICAgICAgICAgICAgIC8vIHNpbmNl
IGEgZnJhbWUgdXNlcyBjb21wb3NpdGluZyBpZiBhbnkgYW5jZXN0b3IgaXMgY29tcG9zaXRpbmcu
Ci0gICAgICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1fZnJhbWUuZ2V0KCk7IGZyYW1lOyBm
cmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KG1fZnJhbWUuZ2V0KCkpKSB7CisgICAg
ICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtX2ZyYW1lLmdldCgpOyBmcmFtZTsgZnJhbWUg
PSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgmbV9mcmFtZS5nZXQoKSkpIHsKICAgICAgICAg
ICAgICAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IGZyYW1lLT5jb250ZW50UmVuZGVyZXIoKSkg
ewogICAgICAgICAgICAgICAgICAgICBSZW5kZXJMYXllckNvbXBvc2l0b3ImIGNvbXBvc2l0b3Ig
PSB2aWV3LT5jb21wb3NpdG9yKCk7CiAgICAgICAgICAgICAgICAgICAgIGNvbXBvc2l0b3Iuc2V0
Q29tcG9zaXRpbmdMYXllcnNOZWVkUmVidWlsZCgpOwpAQCAtMjM0NSw3ICsyMzQ1LDcgQEAgdm9p
ZCBGcmFtZVZpZXc6OnVwZGF0ZUxheWVyRmx1c2hUaHJvdHRsaW5nSW5BbGxGcmFtZXMoKQogewog
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBib29sIGlzTWFpbkxvYWRQcm9n
cmVzc2luZyA9IGZyYW1lKCkucGFnZSgpLT5wcm9ncmVzcygpLmlzTWFpbkxvYWRQcm9ncmVzc2lu
ZygpOwotICAgIGZvciAoRnJhbWUqIGZyYW1lID0gbV9mcmFtZS5nZXQoKTsgZnJhbWU7IGZyYW1l
ID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQobV9mcmFtZS5nZXQoKSkpIHsKKyAgICBmb3Ig
KEZyYW1lKiBmcmFtZSA9ICZtX2ZyYW1lLmdldCgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJl
ZSgpLnRyYXZlcnNlTmV4dCgmbV9mcmFtZS5nZXQoKSkpIHsKICAgICAgICAgaWYgKFJlbmRlclZp
ZXcqIHJlbmRlclZpZXcgPSBmcmFtZS0+Y29udGVudFJlbmRlcmVyKCkpCiAgICAgICAgICAgICBy
ZW5kZXJWaWV3LT5jb21wb3NpdG9yKCkuc2V0TGF5ZXJGbHVzaFRocm90dGxpbmdFbmFibGVkKGlz
TWFpbkxvYWRQcm9ncmVzc2luZyk7CiAgICAgfQpAQCAtMjUwNCwxMyArMjUwNCwxMyBAQCB2b2lk
IEZyYW1lVmlldzo6dW5zY2hlZHVsZVJlbGF5b3V0KCkKICNpZiBFTkFCTEUoUkVRVUVTVF9BTklN
QVRJT05fRlJBTUUpCiB2b2lkIEZyYW1lVmlldzo6c2VydmljZVNjcmlwdGVkQW5pbWF0aW9ucyhk
b3VibGUgbW9ub3RvbmljQW5pbWF0aW9uU3RhcnRUaW1lKQogewotICAgIGZvciAoRnJhbWUqIGZy
YW1lID0gbV9mcmFtZS5nZXQoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJz
ZU5leHQoKSkgeworICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1fZnJhbWUuZ2V0KCk7IGZyYW1l
OyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKICAgICAgICAgZnJhbWUt
PnZpZXcoKS0+c2VydmljZVNjcm9sbEFuaW1hdGlvbnMoKTsKICAgICAgICAgZnJhbWUtPmFuaW1h
dGlvbigpLnNlcnZpY2VBbmltYXRpb25zKCk7CiAgICAgfQogCiAgICAgVmVjdG9yPFJlZlB0cjxE
b2N1bWVudD4gPiBkb2N1bWVudHM7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSBtX2ZyYW1lLmdl
dCgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKQorICAgIGZv
ciAoRnJhbWUqIGZyYW1lID0gJm1fZnJhbWUuZ2V0KCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50
cmVlKCkudHJhdmVyc2VOZXh0KCkpCiAgICAgICAgIGRvY3VtZW50cy5hcHBlbmQoZnJhbWUtPmRv
Y3VtZW50KCkpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkb2N1bWVudHMuc2l6ZSgp
OyArK2kpCkBAIC0yNTUwLDcgKzI1NTAsNyBAQCB2b2lkIEZyYW1lVmlldzo6c2V0QmFzZUJhY2tn
cm91bmRDb2xvcihjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKQogCiB2b2lkIEZyYW1lVmll
dzo6dXBkYXRlQmFja2dyb3VuZFJlY3Vyc2l2ZWx5KGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29s
b3IsIGJvb2wgdHJhbnNwYXJlbnQpCiB7Ci0gICAgZm9yIChGcmFtZSogZnJhbWUgPSBtX2ZyYW1l
LmdldCgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dChtX2ZyYW1l
LmdldCgpKSkgeworICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1fZnJhbWUuZ2V0KCk7IGZyYW1l
OyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCZtX2ZyYW1lLmdldCgpKSkgewog
ICAgICAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUtPnZpZXcoKSkgewogICAgICAgICAg
ICAgdmlldy0+c2V0VHJhbnNwYXJlbnQodHJhbnNwYXJlbnQpOwogICAgICAgICAgICAgdmlldy0+
c2V0QmFzZUJhY2tncm91bmRDb2xvcihiYWNrZ3JvdW5kQ29sb3IpOwpAQCAtMzYyMyw3ICszNjIz
LDcgQEAgdm9pZCBGcmFtZVZpZXc6OnBhaW50Q29udGVudHNGb3JTbmFwc2hvdChHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QKICAgICAvLyBpbiB0aGUgcmVuZGVyIHRyZWUg
b25seS4gVGhpcyB3aWxsIGFsbG93IHVzIHRvIHJlc3RvcmUgdGhlIHNlbGVjdGlvbiBmcm9tIHRo
ZSBET00KICAgICAvLyBhZnRlciB3ZSBwYWludCB0aGUgc25hcHNob3QuCiAgICAgaWYgKHNob3Vs
ZFBhaW50U2VsZWN0aW9uID09IEV4Y2x1ZGVTZWxlY3Rpb24pIHsKLSAgICAgICAgZm9yIChGcmFt
ZSogZnJhbWUgPSBtX2ZyYW1lLmdldCgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRy
YXZlcnNlTmV4dChtX2ZyYW1lLmdldCgpKSkgeworICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9
ICZtX2ZyYW1lLmdldCgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4
dCgmbV9mcmFtZS5nZXQoKSkpIHsKICAgICAgICAgICAgIGlmIChSZW5kZXJWaWV3KiByb290ID0g
ZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpKQogICAgICAgICAgICAgICAgIHJvb3QtPmNsZWFyU2Vs
ZWN0aW9uKCk7CiAgICAgICAgIH0KQEAgLTM2MzksNyArMzYzOSw3IEBAIHZvaWQgRnJhbWVWaWV3
OjpwYWludENvbnRlbnRzRm9yU25hcHNob3QoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBJbnRSZWN0CiAKICAgICAvLyBSZXN0b3JlIHNlbGVjdGlvbi4KICAgICBpZiAoc2hvdWxkUGFp
bnRTZWxlY3Rpb24gPT0gRXhjbHVkZVNlbGVjdGlvbikgewotICAgICAgICBmb3IgKEZyYW1lKiBm
cmFtZSA9IG1fZnJhbWUuZ2V0KCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVy
c2VOZXh0KG1fZnJhbWUuZ2V0KCkpKQorICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtX2Zy
YW1lLmdldCgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgmbV9m
cmFtZS5nZXQoKSkpCiAgICAgICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCkudXBkYXRlQXBwZWFy
YW5jZSgpOwogICAgIH0KIApAQCAtNDAxNiw3ICs0MDE2LDcgQEAgdm9pZCBGcmFtZVZpZXc6OnNl
dFRyYWNrc1JlcGFpbnRzKGJvb2wgdHJhY2tSZXBhaW50cykKICAgICB9CiAKICNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgZm9yIChGcmFtZSogZnJhbWUgPSBtX2ZyYW1lLT50
cmVlKCkudG9wKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkp
IHsKKyAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCkudHJlZSgpLnRvcCgpOyBm
cmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7CiAgICAgICAgIGlm
IChSZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0gZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpKQogICAg
ICAgICAgICAgcmVuZGVyVmlldy0+Y29tcG9zaXRvcigpLnNldFRyYWNrc1JlcGFpbnRzKHRyYWNr
UmVwYWludHMpOwogICAgIH0KQEAgLTQxNDUsNyArNDE0NSw3IEBAIGJvb2wgRnJhbWVWaWV3Ojpp
c0ZsaXBwZWREb2N1bWVudCgpIGNvbnN0CiAKIHZvaWQgRnJhbWVWaWV3Ojpub3RpZnlXaWRnZXRz
SW5BbGxGcmFtZXMoV2lkZ2V0Tm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvbikKIHsKLSAgICBmb3Ig
KEZyYW1lKiBmcmFtZSA9IG1fZnJhbWUuZ2V0KCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVl
KCkudHJhdmVyc2VOZXh0KG1fZnJhbWUuZ2V0KCkpKSB7CisgICAgZm9yIChGcmFtZSogZnJhbWUg
PSAmbV9mcmFtZS5nZXQoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5l
eHQoJm1fZnJhbWUuZ2V0KCkpKSB7CiAgICAgICAgIGlmIChSZW5kZXJWaWV3KiByb290ID0gZnJh
bWUtPmNvbnRlbnRSZW5kZXJlcigpKQogICAgICAgICAgICAgcm9vdC0+bm90aWZ5V2lkZ2V0cyhu
b3RpZmljYXRpb24pOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWVWaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCmluZGV4IGYyMzAyMDcu
LjFhZDZmZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaApAQCAtNzYsNyArNzYsNyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBib29sIHNjaGVkdWxlQW5pbWF0aW9uKCk7CiAjZW5kaWYKIAotICAg
IEZyYW1lJiBmcmFtZSgpIGNvbnN0IHsgcmV0dXJuICptX2ZyYW1lOyB9CisgICAgRnJhbWUmIGZy
YW1lKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZS5nZXQoKTsgfQogCiAgICAgUmVuZGVyVmlldyog
cmVuZGVyVmlldygpIGNvbnN0IHsgcmV0dXJuIGZyYW1lKCkuY29udGVudFJlbmRlcmVyKCk7IH0K
IApAQCAtNTUzLDcgKzU1Myw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdHlwZWRlZiBIYXNoU2V0
PFJlbmRlck9iamVjdCo+IFJlbmRlck9iamVjdFNldDsKICAgICBPd25QdHI8UmVuZGVyT2JqZWN0
U2V0PiBtX3dpZGdldFVwZGF0ZVNldDsKLSAgICBjb25zdCBSZWZQdHI8RnJhbWU+IG1fZnJhbWU7
CisgICAgUmVmPEZyYW1lPiBtX2ZyYW1lOwogCiAgICAgT3duUHRyPFJlbmRlck9iamVjdFNldD4g
bV9zbG93UmVwYWludE9iamVjdHM7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IDg5MDhlMDYuLjBh
MzUyZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcApAQCAtOTgsMTkgKzk4LDE5IEBAIERFRklORV9ERUJV
R19PTkxZX0dMT0JBTChXVEY6OlJlZkNvdW50ZWRMZWFrQ291bnRlciwgcGFnZUNvdW50ZXIsICgi
UGFnZSIpKTsKIAogc3RhdGljIHZvaWQgbmV0d29ya1N0YXRlQ2hhbmdlZChib29sIGlzT25MaW5l
KQogewotICAgIFZlY3RvcjxSZWZQdHI8RnJhbWU+ID4gZnJhbWVzOworICAgIFZlY3RvcjxSZWY8
RnJhbWU+PiBmcmFtZXM7CiAgICAgCiAgICAgLy8gR2V0IGFsbCB0aGUgZnJhbWVzIG9mIGFsbCB0
aGUgcGFnZXMgaW4gYWxsIHRoZSBwYWdlIGdyb3VwcwogICAgIEhhc2hTZXQ8UGFnZSo+OjppdGVy
YXRvciBlbmQgPSBhbGxQYWdlcy0+ZW5kKCk7CiAgICAgZm9yIChIYXNoU2V0PFBhZ2UqPjo6aXRl
cmF0b3IgaXQgPSBhbGxQYWdlcy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAg
IGZvciAoRnJhbWUqIGZyYW1lID0gJigqaXQpLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0g
ZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkKLSAgICAgICAgICAgIGZyYW1lcy5hcHBlbmQo
ZnJhbWUpOworICAgICAgICAgICAgZnJhbWVzLmFwcGVuZCgqZnJhbWUpOwogICAgICAgICBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb246Om5ldHdvcmtTdGF0ZUNoYW5nZWQoKml0KTsKICAgICB9CiAK
ICAgICBBdG9taWNTdHJpbmcgZXZlbnROYW1lID0gaXNPbkxpbmUgPyBldmVudE5hbWVzKCkub25s
aW5lRXZlbnQgOiBldmVudE5hbWVzKCkub2ZmbGluZUV2ZW50OwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBmcmFtZXMuc2l6ZSgpOyBpKyspCi0gICAgICAgIGZyYW1lc1tpXS0+ZG9jdW1l
bnQoKS0+ZGlzcGF0Y2hXaW5kb3dFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZSwgZmFsc2Us
IGZhbHNlKSk7CisgICAgICAgIGZyYW1lc1tpXS5nZXQoKS5kb2N1bWVudCgpLT5kaXNwYXRjaFdp
bmRvd0V2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lLCBmYWxzZSwgZmFsc2UpKTsKIH0KIAog
ZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IoRnJhbWUqIGZyYW1lKQpAQCAtMjA4LDcgKzIwOCw3IEBA
IFBhZ2U6OlBhZ2UoUGFnZUNsaWVudHMmIHBhZ2VDbGllbnRzKQogCiBQYWdlOjp+UGFnZSgpCiB7
Ci0gICAgbV9tYWluRnJhbWUtPnNldFZpZXcoMCk7CisgICAgbWFpbkZyYW1lKCkuc2V0Vmlldygw
KTsKICAgICBzZXRHcm91cE5hbWUoU3RyaW5nKCkpOwogICAgIGFsbFBhZ2VzLT5yZW1vdmUodGhp
cyk7CiAgICAgCkBAIC0yNjAsNyArMjYwLDcgQEAgVmlld3BvcnRBcmd1bWVudHMgUGFnZTo6dmll
d3BvcnRBcmd1bWVudHMoKSBjb25zdAogCiBTY3JvbGxpbmdDb29yZGluYXRvciogUGFnZTo6c2Ny
b2xsaW5nQ29vcmRpbmF0b3IoKQogewotICAgIGlmICghbV9zY3JvbGxpbmdDb29yZGluYXRvciAm
JiBtX3NldHRpbmdzLT5zY3JvbGxpbmdDb29yZGluYXRvckVuYWJsZWQoKSkKKyAgICBpZiAoIW1f
c2Nyb2xsaW5nQ29vcmRpbmF0b3IgJiYgKCptX3NldHRpbmdzKS5zY3JvbGxpbmdDb29yZGluYXRv
ckVuYWJsZWQoKSkKICAgICAgICAgbV9zY3JvbGxpbmdDb29yZGluYXRvciA9IFNjcm9sbGluZ0Nv
b3JkaW5hdG9yOjpjcmVhdGUodGhpcyk7CiAKICAgICByZXR1cm4gbV9zY3JvbGxpbmdDb29yZGlu
YXRvci5nZXQoKTsKQEAgLTI2OCw3ICsyNjgsNyBAQCBTY3JvbGxpbmdDb29yZGluYXRvciogUGFn
ZTo6c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKQogCiBTdHJpbmcgUGFnZTo6c2Nyb2xsaW5nU3RhdGVU
cmVlQXNUZXh0KCkKIHsKLSAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9tYWluRnJhbWUt
PmRvY3VtZW50KCkpCisgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9ICgqbV9tYWluRnJhbWUp
LmRvY3VtZW50KCkpCiAgICAgICAgIGRvY3VtZW50LT51cGRhdGVMYXlvdXQoKTsKIAogICAgIGlm
IChTY3JvbGxpbmdDb29yZGluYXRvciogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSB0aGlzLT5zY3Jv
bGxpbmdDb29yZGluYXRvcigpKQpAQCAtMjc5LDcgKzI3OSw3IEBAIFN0cmluZyBQYWdlOjpzY3Jv
bGxpbmdTdGF0ZVRyZWVBc1RleHQoKQogCiBTdHJpbmcgUGFnZTo6bWFpblRocmVhZFNjcm9sbGlu
Z1JlYXNvbnNBc1RleHQoKQogewotICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBtX21haW5G
cmFtZS0+ZG9jdW1lbnQoKSkKKyAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0gKCptX21haW5G
cmFtZSkuZG9jdW1lbnQoKSkKICAgICAgICAgZG9jdW1lbnQtPnVwZGF0ZUxheW91dCgpOwogCiAg
ICAgaWYgKFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHRoaXMt
PnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCkBAIC0yOTAsNyArMjkwLDcgQEAgU3RyaW5nIFBhZ2U6
Om1haW5UaHJlYWRTY3JvbGxpbmdSZWFzb25zQXNUZXh0KCkKIAogUGFzc1JlZlB0cjxDbGllbnRS
ZWN0TGlzdD4gUGFnZTo6bm9uRmFzdFNjcm9sbGFibGVSZWN0cyhjb25zdCBGcmFtZSogZnJhbWUp
CiB7Ci0gICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IG1fbWFpbkZyYW1lLT5kb2N1bWVudCgp
KQorICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSAoKm1fbWFpbkZyYW1lKS5kb2N1bWVudCgp
KQogICAgICAgICBkb2N1bWVudC0+dXBkYXRlTGF5b3V0KCk7CiAKICAgICBWZWN0b3I8SW50UmVj
dD4gcmVjdHM7CkBAIC00MjAsMTAgKzQyMCwxMCBAQCB2b2lkIFBhZ2U6OmdvVG9JdGVtKEhpc3Rv
cnlJdGVtKiBpdGVtLCBGcmFtZUxvYWRUeXBlIHR5cGUpCiAgICAgLy8gYmVpbmcgZGVyZWYoKS1l
ZC4gTWFrZSBzdXJlIHdlIGNhbiBzdGlsbCB1c2UgaXQgd2l0aCBIaXN0b3J5Q29udHJvbGxlcjo6
Z29Ub0l0ZW0gbGF0ZXIuCiAgICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBwcm90ZWN0b3IoaXRlbSk7
CiAKLSAgICBpZiAobV9tYWluRnJhbWUtPmxvYWRlcigpLmhpc3RvcnkoKS5zaG91bGRTdG9wTG9h
ZGluZ0Zvckhpc3RvcnlJdGVtKGl0ZW0pKQotICAgICAgICBtX21haW5GcmFtZS0+bG9hZGVyKCku
c3RvcEFsbExvYWRlcnMoKTsKKyAgICBpZiAobWFpbkZyYW1lKCkubG9hZGVyKCkuaGlzdG9yeSgp
LnNob3VsZFN0b3BMb2FkaW5nRm9ySGlzdG9yeUl0ZW0oaXRlbSkpCisgICAgICAgIG1haW5GcmFt
ZSgpLmxvYWRlcigpLnN0b3BBbGxMb2FkZXJzKCk7CiAKLSAgICBtX21haW5GcmFtZS0+bG9hZGVy
KCkuaGlzdG9yeSgpLmdvVG9JdGVtKGl0ZW0sIHR5cGUpOworICAgIG1haW5GcmFtZSgpLmxvYWRl
cigpLmhpc3RvcnkoKS5nb1RvSXRlbShpdGVtLCB0eXBlKTsKIH0KIAogaW50IFBhZ2U6OmdldEhp
c3RvcnlMZW5ndGgoKQpAQCAtNDkyLDcgKzQ5Miw3IEBAIHZvaWQgUGFnZTo6cmVmcmVzaFBsdWdp
bnMoYm9vbCByZWxvYWQpCiAKICAgICBQbHVnaW5EYXRhOjpyZWZyZXNoKCk7CiAKLSAgICBWZWN0
b3I8UmVmUHRyPEZyYW1lPiA+IGZyYW1lc05lZWRpbmdSZWxvYWQ7CisgICAgVmVjdG9yPFJlZjxG
cmFtZT4+IGZyYW1lc05lZWRpbmdSZWxvYWQ7CiAKICAgICBIYXNoU2V0PFBhZ2UqPjo6aXRlcmF0
b3IgZW5kID0gYWxsUGFnZXMtPmVuZCgpOwogICAgIGZvciAoSGFzaFNldDxQYWdlKj46Oml0ZXJh
dG9yIGl0ID0gYWxsUGFnZXMtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewpAQCAtNTA3LDEy
ICs1MDcsMTIgQEAgdm9pZCBQYWdlOjpyZWZyZXNoUGx1Z2lucyhib29sIHJlbG9hZCkKICAgICAg
ICAgCiAgICAgICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJigqaXQpLT5tYWluRnJhbWUoKTsgZnJh
bWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewogICAgICAgICAgICAg
aWYgKGZyYW1lLT5sb2FkZXIoKS5zdWJmcmFtZUxvYWRlcigpLT5jb250YWluc1BsdWdpbnMoKSkK
LSAgICAgICAgICAgICAgICBmcmFtZXNOZWVkaW5nUmVsb2FkLmFwcGVuZChmcmFtZSk7CisgICAg
ICAgICAgICAgICAgZnJhbWVzTmVlZGluZ1JlbG9hZC5hcHBlbmQoKmZyYW1lKTsKICAgICAgICAg
fQogICAgIH0KIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnJhbWVzTmVlZGluZ1JlbG9h
ZC5zaXplKCk7ICsraSkKLSAgICAgICAgZnJhbWVzTmVlZGluZ1JlbG9hZFtpXS0+bG9hZGVyKCku
cmVsb2FkKCk7CisgICAgICAgICgqZnJhbWVzTmVlZGluZ1JlbG9hZFtpXSkubG9hZGVyKCkucmVs
b2FkKCk7CiB9CiAKIFBsdWdpbkRhdGEmIFBhZ2U6OnBsdWdpbkRhdGEoKSBjb25zdApAQCAtNzAx
LDEwICs3MDEsMTAgQEAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgUGFnZTo6c2VsZWN0aW9uKCkg
Y29uc3QKIAogdm9pZCBQYWdlOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgZGVmZXJzKQogewotICAg
IGlmICghbV9zZXR0aW5ncy0+bG9hZERlZmVycmluZ0VuYWJsZWQoKSkKKyAgICBpZiAoKCptX3Nl
dHRpbmdzKS5sb2FkRGVmZXJyaW5nRW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBp
ZiAobV9zZXR0aW5ncy0+d2FudHNCYWxhbmNlZFNldERlZmVyc0xvYWRpbmdCZWhhdmlvcigpKSB7
CisgICAgaWYgKCgqbV9zZXR0aW5ncykud2FudHNCYWxhbmNlZFNldERlZmVyc0xvYWRpbmdCZWhh
dmlvcigpKSB7CiAgICAgICAgIEFTU0VSVChkZWZlcnMgfHwgbV9kZWZlcnNMb2FkaW5nQ2FsbENv
dW50KTsKICAgICAgICAgaWYgKGRlZmVycyAmJiArK21fZGVmZXJzTG9hZGluZ0NhbGxDb3VudCA+
IDEpCiAgICAgICAgICAgICByZXR1cm47CkBAIC03NTcsNyArNzU3LDcgQEAgdm9pZCBQYWdlOjpz
ZXRQYWdlU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGUsIGNvbnN0IEludFBvaW50JiBvcmlnaW4pCiAK
ICAgICBpZiAoc2NhbGUgPT0gbV9wYWdlU2NhbGVGYWN0b3IpIHsKICAgICAgICAgaWYgKHZpZXcg
JiYgKHZpZXctPnNjcm9sbFBvc2l0aW9uKCkgIT0gb3JpZ2luIHx8IHZpZXctPmRlbGVnYXRlc1Nj
cm9sbGluZygpKSkgewotICAgICAgICAgICAgaWYgKCFtX3NldHRpbmdzLT5hcHBseVBhZ2VTY2Fs
ZUZhY3RvckluQ29tcG9zaXRvcigpKQorICAgICAgICAgICAgaWYgKCFzZXR0aW5ncygpLmFwcGx5
UGFnZVNjYWxlRmFjdG9ySW5Db21wb3NpdG9yKCkpCiAgICAgICAgICAgICAgICAgZG9jdW1lbnQt
PnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogICAgICAgICAgICAgdmll
dy0+c2V0U2Nyb2xsUG9zaXRpb24ob3JpZ2luKTsKICAgICAgICAgfQpAQCAtNzY2LDcgKzc2Niw3
IEBAIHZvaWQgUGFnZTo6c2V0UGFnZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlLCBjb25zdCBJbnRQ
b2ludCYgb3JpZ2luKQogCiAgICAgbV9wYWdlU2NhbGVGYWN0b3IgPSBzY2FsZTsKIAotICAgIGlm
ICghbV9zZXR0aW5ncy0+YXBwbHlQYWdlU2NhbGVGYWN0b3JJbkNvbXBvc2l0b3IoKSkgeworICAg
IGlmICghc2V0dGluZ3MoKS5hcHBseVBhZ2VTY2FsZUZhY3RvckluQ29tcG9zaXRvcigpKSB7CiAg
ICAgICAgIGlmIChkb2N1bWVudC0+cmVuZGVyZXIoKSkKICAgICAgICAgICAgIGRvY3VtZW50LT5y
ZW5kZXJlcigpLT5zZXROZWVkc0xheW91dCh0cnVlKTsKIApAQCAtNzg0LDcgKzc4NCw3IEBAIHZv
aWQgUGFnZTo6c2V0UGFnZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlLCBjb25zdCBJbnRQb2ludCYg
b3JpZ2luKQogICAgICAgICB2aWV3LT5zZXRWaWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0c05lZWRM
YXlvdXQoKTsKIAogICAgIGlmICh2aWV3ICYmIHZpZXctPnNjcm9sbFBvc2l0aW9uKCkgIT0gb3Jp
Z2luKSB7Ci0gICAgICAgIGlmICghbV9zZXR0aW5ncy0+YXBwbHlQYWdlU2NhbGVGYWN0b3JJbkNv
bXBvc2l0b3IoKSAmJiBkb2N1bWVudC0+cmVuZGVyZXIoKSAmJiBkb2N1bWVudC0+cmVuZGVyZXIo
KS0+bmVlZHNMYXlvdXQoKSAmJiB2aWV3LT5kaWRGaXJzdExheW91dCgpKQorICAgICAgICBpZiAo
IXNldHRpbmdzKCkuYXBwbHlQYWdlU2NhbGVGYWN0b3JJbkNvbXBvc2l0b3IoKSAmJiBkb2N1bWVu
dC0+cmVuZGVyZXIoKSAmJiBkb2N1bWVudC0+cmVuZGVyZXIoKS0+bmVlZHNMYXlvdXQoKSAmJiB2
aWV3LT5kaWRGaXJzdExheW91dCgpKQogICAgICAgICAgICAgdmlldy0+bGF5b3V0KCk7CiAgICAg
ICAgIHZpZXctPnNldFNjcm9sbFBvc2l0aW9uKG9yaWdpbik7CiAgICAgfQpAQCAtOTY1LDcgKzk2
NSw3IEBAIHZvaWQgUGFnZTo6dXNlclN0eWxlU2hlZXRMb2NhdGlvbkNoYW5nZWQoKQogewogICAg
IC8vIEZJWE1FOiBFdmVudHVhbGx5IHdlIHdpbGwgbW92ZSB0byBhIG1vZGVsIG9mIGp1c3QgYmVp
bmcgaGFuZGVkIHRoZSBzaGVldAogICAgIC8vIHRleHQgaW5zdGVhZCBvZiBsb2FkaW5nIHRoZSBV
Ukwgb3Vyc2VsdmVzLgotICAgIEtVUkwgdXJsID0gbV9zZXR0aW5ncy0+dXNlclN0eWxlU2hlZXRM
b2NhdGlvbigpOworICAgIEtVUkwgdXJsID0gc2V0dGluZ3MoKS51c2VyU3R5bGVTaGVldExvY2F0
aW9uKCk7CiAgICAgCiAgICAgLy8gQWxsb3cgYW55IGxvY2FsIGZpbGUgVVJMIHNjaGVtZSB0byBi
ZSBsb2FkZWQuCiAgICAgaWYgKFNjaGVtZVJlZ2lzdHJ5OjpzaG91bGRUcmVhdFVSTFNjaGVtZUFz
TG9jYWwodXJsLnByb3RvY29sKCkpKQpAQCAtMTAyNyw5ICsxMDI3LDkgQEAgY29uc3QgU3RyaW5n
JiBQYWdlOjp1c2VyU3R5bGVTaGVldCgpIGNvbnN0CiAgICAgaWYgKCFkYXRhKQogICAgICAgICBy
ZXR1cm4gbV91c2VyU3R5bGVTaGVldDsKIAotICAgIFJlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVy
PiBkZWNvZGVyID0gVGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKCJ0ZXh0L2NzcyIpOwotICAg
IG1fdXNlclN0eWxlU2hlZXQgPSBkZWNvZGVyLT5kZWNvZGUoZGF0YS0+ZGF0YSgpLCBkYXRhLT5z
aXplKCkpOwotICAgIG1fdXNlclN0eWxlU2hlZXQuYXBwZW5kKGRlY29kZXItPmZsdXNoKCkpOwor
ICAgIFJlZjxUZXh0UmVzb3VyY2VEZWNvZGVyPiBkZWNvZGVyID0gVGV4dFJlc291cmNlRGVjb2Rl
cjo6Y3JlYXRlKCJ0ZXh0L2NzcyIpOworICAgIG1fdXNlclN0eWxlU2hlZXQgPSBkZWNvZGVyLmdl
dCgpLmRlY29kZShkYXRhLT5kYXRhKCksIGRhdGEtPnNpemUoKSk7CisgICAgbV91c2VyU3R5bGVT
aGVldC5hcHBlbmQoZGVjb2Rlci5nZXQoKS5mbHVzaCgpKTsKIAogICAgIHJldHVybiBtX3VzZXJT
dHlsZVNoZWV0OwogfQpAQCAtMTA2MCw3ICsxMDYwLDcgQEAgdm9pZCBQYWdlOjphbGxWaXNpdGVk
U3RhdGVDaGFuZ2VkKFBhZ2VHcm91cCogZ3JvdXApCiAgICAgICAgIFBhZ2UqIHBhZ2UgPSAqaXQ7
CiAgICAgICAgIGlmIChwYWdlLT5tX2dyb3VwICE9IGdyb3VwKQogICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIGZvciAoRnJhbWUqIGZyYW1lID0gcGFnZS0+bV9tYWluRnJhbWUuZ2V0KCk7
IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpCisgICAgICAgIGZv
ciAoRnJhbWUqIGZyYW1lID0gJnBhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFt
ZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKQogICAgICAgICAgICAgZnJhbWUtPmRvY3VtZW50KCkt
PnZpc2l0ZWRMaW5rU3RhdGUoKS5pbnZhbGlkYXRlU3R5bGVGb3JBbGxMaW5rcygpOwogICAgIH0K
IH0KQEAgLTEwNzYsNyArMTA3Niw3IEBAIHZvaWQgUGFnZTo6dmlzaXRlZFN0YXRlQ2hhbmdlZChQ
YWdlR3JvdXAqIGdyb3VwLCBMaW5rSGFzaCBsaW5rSGFzaCkKICAgICAgICAgUGFnZSogcGFnZSA9
ICppdDsKICAgICAgICAgaWYgKHBhZ2UtPm1fZ3JvdXAgIT0gZ3JvdXApCiAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgZm9yIChGcmFtZSogZnJhbWUgPSBwYWdlLT5tX21haW5GcmFtZS5n
ZXQoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkKKyAgICAg
ICAgZm9yIChGcmFtZSogZnJhbWUgPSAmcGFnZS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9
IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpCiAgICAgICAgICAgICBmcmFtZS0+ZG9jdW1l
bnQoKS0+dmlzaXRlZExpbmtTdGF0ZSgpLmludmFsaWRhdGVTdHlsZUZvckxpbmsobGlua0hhc2gp
OwogICAgIH0KIH0KQEAgLTEwOTcsNyArMTA5Nyw3IEBAIHZvaWQgUGFnZTo6c2V0RGVidWdnZXIo
SlNDOjpEZWJ1Z2dlciogZGVidWdnZXIpCiAKICAgICBtX2RlYnVnZ2VyID0gZGVidWdnZXI7CiAK
LSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1fbWFpbkZyYW1lLmdldCgpOyBmcmFtZTsgZnJhbWUg
PSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKQorICAgIGZvciAoRnJhbWUqIGZyYW1lID0g
Jm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgp
KQogICAgICAgICBmcmFtZS0+c2NyaXB0KCkuYXR0YWNoRGVidWdnZXIobV9kZWJ1Z2dlcik7CiB9
CiAKQEAgLTEyMTgsNyArMTIxOCw3IEBAIHZvaWQgUGFnZTo6c3RvcmFnZUJsb2NraW5nU3RhdGVD
aGFuZ2VkKCkKIAogdm9pZCBQYWdlOjpwcml2YXRlQnJvd3NpbmdTdGF0ZUNoYW5nZWQoKQogewot
ICAgIGJvb2wgcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCA9IG1fc2V0dGluZ3MtPnByaXZhdGVCcm93
c2luZ0VuYWJsZWQoKTsKKyAgICBib29sIHByaXZhdGVCcm93c2luZ0VuYWJsZWQgPSBzZXR0aW5n
cygpLnByaXZhdGVCcm93c2luZ0VuYWJsZWQoKTsKIAogICAgIGZvciAoRnJhbWUqIGZyYW1lID0g
Jm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgp
KQogICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+cHJpdmF0ZUJyb3dzaW5nU3RhdGVEaWRDaGFu
Z2UoKTsKQEAgLTEyNDgsNyArMTI0OCw3IEBAIHZvaWQgUGFnZTo6Y2hlY2tTdWJmcmFtZUNvdW50
Q29uc2lzdGVuY3koKSBjb25zdAogdm9pZCBQYWdlOjp0aHJvdHRsZVRpbWVycygpCiB7CiAjaWYg
RU5BQkxFKEhJRERFTl9QQUdFX0RPTV9USU1FUl9USFJPVFRMSU5HKQotICAgIGlmIChtX3NldHRp
bmdzLT5oaWRkZW5QYWdlRE9NVGltZXJUaHJvdHRsaW5nRW5hYmxlZCgpKQorICAgIGlmIChzZXR0
aW5ncygpLmhpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdFbmFibGVkKCkpCiAgICAgICAgIHNl
dFRpbWVyQWxpZ25tZW50SW50ZXJ2YWwoU2V0dGluZ3M6OmhpZGRlblBhZ2VET01UaW1lckFsaWdu
bWVudEludGVydmFsKCkpOwogI2VuZGlmCiB9CkBAIC0xMjU2LDcgKzEyNTYsNyBAQCB2b2lkIFBh
Z2U6OnRocm90dGxlVGltZXJzKCkKIHZvaWQgUGFnZTo6dW50aHJvdHRsZVRpbWVycygpCiB7CiAj
aWYgRU5BQkxFKEhJRERFTl9QQUdFX0RPTV9USU1FUl9USFJPVFRMSU5HKQotICAgIGlmIChtX3Nl
dHRpbmdzLT5oaWRkZW5QYWdlRE9NVGltZXJUaHJvdHRsaW5nRW5hYmxlZCgpKQorICAgIGlmIChz
ZXR0aW5ncygpLmhpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdFbmFibGVkKCkpCiAgICAgICAg
IHNldFRpbWVyQWxpZ25tZW50SW50ZXJ2YWwoU2V0dGluZ3M6OmRlZmF1bHRET01UaW1lckFsaWdu
bWVudEludGVydmFsKCkpOwogI2VuZGlmCiB9CkBAIC0xMjc2LDcgKzEyNzYsNyBAQCB2b2lkIFBh
Z2U6OnNldFZpc2liaWxpdHlTdGF0ZShQYWdlVmlzaWJpbGl0eVN0YXRlIHZpc2liaWxpdHlTdGF0
ZSwgYm9vbCBpc0luaXRpYQogCiAgICAgaWYgKCFpc0luaXRpYWxTdGF0ZSkgewogICAgICAgICBW
ZWN0b3I8UmVmUHRyPERvY3VtZW50Pj4gZG9jdW1lbnRzOwotICAgICAgICBmb3IgKEZyYW1lKiBm
cmFtZSA9IG1fbWFpbkZyYW1lLmdldCgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRy
YXZlcnNlTmV4dCgpKQorICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtYWluRnJhbWUoKTsg
ZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkKICAgICAgICAgICAg
IGRvY3VtZW50cy5hcHBlbmQoZnJhbWUtPmRvY3VtZW50KCkpOwogICAgICAgICBmb3IgKHNpemVf
dCBpID0gMCwgc2l6ZSA9IGRvY3VtZW50cy5zaXplKCk7IGkgPCBzaXplOyArK2kpCiAgICAgICAg
ICAgICBkb2N1bWVudHNbaV0tPmRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVz
KCkudmlzaWJpbGl0eWNoYW5nZUV2ZW50LCBmYWxzZSwgZmFsc2UpKTsKQEAgLTEyODYsMTEgKzEy
ODYsMTEgQEAgdm9pZCBQYWdlOjpzZXRWaXNpYmlsaXR5U3RhdGUoUGFnZVZpc2liaWxpdHlTdGF0
ZSB2aXNpYmlsaXR5U3RhdGUsIGJvb2wgaXNJbml0aWEKICAgICBpZiAodmlzaWJpbGl0eVN0YXRl
ID09IFdlYkNvcmU6OlBhZ2VWaXNpYmlsaXR5U3RhdGVIaWRkZW4pIHsKICAgICAgICAgaWYgKG1f
cGFnZVRocm90dGxlci0+c2hvdWxkVGhyb3R0bGVUaW1lcnMoKSkKICAgICAgICAgICAgIHRocm90
dGxlVGltZXJzKCk7Ci0gICAgICAgIGlmIChtX3NldHRpbmdzLT5oaWRkZW5QYWdlQ1NTQW5pbWF0
aW9uU3VzcGVuc2lvbkVuYWJsZWQoKSkKKyAgICAgICAgaWYgKHNldHRpbmdzKCkuaGlkZGVuUGFn
ZUNTU0FuaW1hdGlvblN1c3BlbnNpb25FbmFibGVkKCkpCiAgICAgICAgICAgICBtYWluRnJhbWUo
KS5hbmltYXRpb24oKS5zdXNwZW5kQW5pbWF0aW9ucygpOwogICAgIH0gZWxzZSB7CiAgICAgICAg
IHVudGhyb3R0bGVUaW1lcnMoKTsKLSAgICAgICAgaWYgKG1fc2V0dGluZ3MtPmhpZGRlblBhZ2VD
U1NBbmltYXRpb25TdXNwZW5zaW9uRW5hYmxlZCgpKQorICAgICAgICBpZiAoc2V0dGluZ3MoKS5o
aWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3VzcGVuc2lvbkVuYWJsZWQoKSkKICAgICAgICAgICAgIG1h
aW5GcmFtZSgpLmFuaW1hdGlvbigpLnJlc3VtZUFuaW1hdGlvbnMoKTsKICAgICB9CiB9CkBAIC0x
NTI4LDcgKzE1MjgsNyBAQCBQYXNzT3duUHRyPFBhZ2VBY3Rpdml0eUFzc2VydGlvblRva2VuPiBQ
YWdlOjpjcmVhdGVBY3Rpdml0eVRva2VuKCkKICNpZiBFTkFCTEUoSElEREVOX1BBR0VfRE9NX1RJ
TUVSX1RIUk9UVExJTkcpCiB2b2lkIFBhZ2U6OmhpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdT
dGF0ZUNoYW5nZWQoKQogewotICAgIGlmIChtX3NldHRpbmdzLT5oaWRkZW5QYWdlRE9NVGltZXJU
aHJvdHRsaW5nRW5hYmxlZCgpKSB7CisgICAgaWYgKHNldHRpbmdzKCkuaGlkZGVuUGFnZURPTVRp
bWVyVGhyb3R0bGluZ0VuYWJsZWQoKSkgewogI2lmIEVOQUJMRShQQUdFX1ZJU0lCSUxJVFlfQVBJ
KQogICAgICAgICBpZiAobV9wYWdlVGhyb3R0bGVyLT5zaG91bGRUaHJvdHRsZVRpbWVycygpKQog
ICAgICAgICAgICAgc2V0VGltZXJBbGlnbm1lbnRJbnRlcnZhbChTZXR0aW5nczo6aGlkZGVuUGFn
ZURPTVRpbWVyQWxpZ25tZW50SW50ZXJ2YWwoKSk7CkBAIC0xNTQyLDcgKzE1NDIsNyBAQCB2b2lk
IFBhZ2U6OmhpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdTdGF0ZUNoYW5nZWQoKQogdm9pZCBQ
YWdlOjpoaWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3VzcGVuc2lvblN0YXRlQ2hhbmdlZCgpCiB7CiAg
ICAgaWYgKG1fdmlzaWJpbGl0eVN0YXRlID09IFdlYkNvcmU6OlBhZ2VWaXNpYmlsaXR5U3RhdGVI
aWRkZW4pIHsKLSAgICAgICAgaWYgKG1fc2V0dGluZ3MtPmhpZGRlblBhZ2VDU1NBbmltYXRpb25T
dXNwZW5zaW9uRW5hYmxlZCgpKQorICAgICAgICBpZiAoc2V0dGluZ3MoKS5oaWRkZW5QYWdlQ1NT
QW5pbWF0aW9uU3VzcGVuc2lvbkVuYWJsZWQoKSkKICAgICAgICAgICAgIG1haW5GcmFtZSgpLmFu
aW1hdGlvbigpLnN1c3BlbmRBbmltYXRpb25zKCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAg
IG1haW5GcmFtZSgpLmFuaW1hdGlvbigpLnJlc3VtZUFuaW1hdGlvbnMoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgK
aW5kZXggOTE2ZDk0My4uZDY0MGFhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9Q
YWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKQEAgLTM2LDYgKzM2LDcgQEAK
ICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5j
bHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1JlZi5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAg
LTE2MSw3ICsxNjIsNyBAQCBwdWJsaWM6CiAgICAgUGx1Z0luQ2xpZW50KiBwbHVnSW5DbGllbnQo
KSBjb25zdCB7IHJldHVybiBtX3BsdWdJbkNsaWVudDsgfQogCiAgICAgRnJhbWUmIG1haW5GcmFt
ZSgpIGNvbnN0IHsgcmV0dXJuICptX21haW5GcmFtZTsgfQotICAgIGJvb2wgZnJhbWVJc01haW5G
cmFtZShjb25zdCBGcmFtZSogZnJhbWUpIHsgcmV0dXJuIGZyYW1lID09IG1fbWFpbkZyYW1lLmdl
dCgpOyB9CisgICAgYm9vbCBmcmFtZUlzTWFpbkZyYW1lKGNvbnN0IEZyYW1lKiBmcmFtZSkgeyBy
ZXR1cm4gZnJhbWUgPT0gbV9tYWluRnJhbWU7IH0KIAogICAgIGJvb2wgb3BlbmVkQnlET00oKSBj
b25zdDsKICAgICB2b2lkIHNldE9wZW5lZEJ5RE9NKCk7CkBAIC0yMDksNyArMjEwLDcgQEAgcHVi
bGljOgogICAgIFN0cmluZyBtYWluVGhyZWFkU2Nyb2xsaW5nUmVhc29uc0FzVGV4dCgpOwogICAg
IFBhc3NSZWZQdHI8Q2xpZW50UmVjdExpc3Q+IG5vbkZhc3RTY3JvbGxhYmxlUmVjdHMoY29uc3Qg
RnJhbWUqKTsKIAotICAgIFNldHRpbmdzJiBzZXR0aW5ncygpIGNvbnN0IHsgcmV0dXJuICptX3Nl
dHRpbmdzOyB9CisgICAgU2V0dGluZ3MmIHNldHRpbmdzKCkgY29uc3QgeyByZXR1cm4gbV9zZXR0
aW5ncy5nZXQoKTsgfQogICAgIFByb2dyZXNzVHJhY2tlciYgcHJvZ3Jlc3MoKSBjb25zdCB7IHJl
dHVybiAqbV9wcm9ncmVzczsgfQogICAgIEJhY2tGb3J3YXJkQ29udHJvbGxlciogYmFja0Zvcndh
cmQoKSBjb25zdCB7IHJldHVybiBtX2JhY2tGb3J3YXJkQ29udHJvbGxlci5nZXQoKTsgfQogCkBA
IC00NTksMTEgKzQ2MCwxMSBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAgUmVmUHRyPFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yPiBtX3Njcm9sbGluZ0Nvb3JkaW5hdG9yOwogCi0gICAgY29uc3QgUmVmUHRy
PFNldHRpbmdzPiBtX3NldHRpbmdzOworICAgIFJlZjxTZXR0aW5ncz4gbV9zZXR0aW5nczsKICAg
ICBjb25zdCBPd25QdHI8UHJvZ3Jlc3NUcmFja2VyPiBtX3Byb2dyZXNzOwogCiAgICAgT3duUHRy
PEJhY2tGb3J3YXJkQ29udHJvbGxlcj4gbV9iYWNrRm9yd2FyZENvbnRyb2xsZXI7Ci0gICAgY29u
c3QgUmVmUHRyPEZyYW1lPiBtX21haW5GcmFtZTsKKyAgICBSZWY8RnJhbWU+IG1fbWFpbkZyYW1l
OwogCiAgICAgbXV0YWJsZSBSZWZQdHI8UGx1Z2luRGF0YT4gbV9wbHVnaW5EYXRhOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9QYWdlTWFjLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvbWFjL1BhZ2VNYWMuY3BwCmluZGV4IGZiZDllZGYuLjI2ZWQzZWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1BhZ2VNYWMuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvbWFjL1BhZ2VNYWMuY3BwCkBAIC00Myw3ICs0Myw3IEBAIHZvaWQgUGFnZTo6YWRk
U2NoZWR1bGVQYWlyKFBhc3NSZWZQdHI8U2NoZWR1bGVQYWlyPiBwcnBQYWlyKQogICAgICAgICBt
X3NjaGVkdWxlZFJ1bkxvb3BQYWlycyA9IGFkb3B0UHRyKG5ldyBTY2hlZHVsZVBhaXJIYXNoU2V0
KTsKICAgICBtX3NjaGVkdWxlZFJ1bkxvb3BQYWlycy0+YWRkKHBhaXIpOwogCi0gICAgZm9yIChG
cmFtZSogZnJhbWUgPSBtX21haW5GcmFtZS5nZXQoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRy
ZWUoKS50cmF2ZXJzZU5leHQoKSkgeworICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1haW5GcmFt
ZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7CiAgICAg
ICAgIGlmIChEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBmcmFtZS0+bG9hZGVyKCku
ZG9jdW1lbnRMb2FkZXIoKSkKICAgICAgICAgICAgIGRvY3VtZW50TG9hZGVyLT5zY2hlZHVsZShw
YWlyLmdldCgpKTsKICAgICAgICAgaWYgKERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciA9
IGZyYW1lLT5sb2FkZXIoKS5wcm92aXNpb25hbERvY3VtZW50TG9hZGVyKCkpCkBAIC02Miw3ICs2
Miw3IEBAIHZvaWQgUGFnZTo6cmVtb3ZlU2NoZWR1bGVQYWlyKFBhc3NSZWZQdHI8U2NoZWR1bGVQ
YWlyPiBwcnBQYWlyKQogICAgIFJlZlB0cjxTY2hlZHVsZVBhaXI+IHBhaXIgPSBwcnBQYWlyOwog
ICAgIG1fc2NoZWR1bGVkUnVuTG9vcFBhaXJzLT5yZW1vdmUocGFpcik7CiAKLSAgICBmb3IgKEZy
YW1lKiBmcmFtZSA9IG1fbWFpbkZyYW1lLmdldCgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJl
ZSgpLnRyYXZlcnNlTmV4dCgpKSB7CisgICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbWFpbkZyYW1l
KCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKICAgICAg
ICAgaWYgKERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciA9IGZyYW1lLT5sb2FkZXIoKS5k
b2N1bWVudExvYWRlcigpKQogICAgICAgICAgICAgZG9jdW1lbnRMb2FkZXItPnVuc2NoZWR1bGUo
cGFpci5nZXQoKSk7CiAgICAgICAgIGlmIChEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIg
PSBmcmFtZS0+bG9hZGVyKCkucHJvdmlzaW9uYWxEb2N1bWVudExvYWRlcigpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKaW5kZXggZjNmMTcyMC4u
MWU0ZjFkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fj
aGUuY3BwCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiV2ViS2l0Rm9udEZhbWlseU5hbWVz
LmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZ0hhc2guaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdIYXNoLmg+CkBAIC01MzUsMTYgKzUzNiwxNSBAQCB2b2lkIEZvbnRDYWNoZTo6aW52
YWxpZGF0ZSgpCiAKICAgICBnR2VuZXJhdGlvbisrOwogCi0gICAgVmVjdG9yPFJlZlB0cjxGb250
U2VsZWN0b3I+ID4gY2xpZW50czsKKyAgICBWZWN0b3I8UmVmPEZvbnRTZWxlY3Rvcj4+IGNsaWVu
dHM7CiAgICAgc2l6ZV90IG51bUNsaWVudHMgPSBnQ2xpZW50cy0+c2l6ZSgpOwotICAgIGNsaWVu
dHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1DbGllbnRzKTsKLSAgICBIYXNoU2V0PEZvbnRT
ZWxlY3Rvcio+OjppdGVyYXRvciBlbmQgPSBnQ2xpZW50cy0+ZW5kKCk7Ci0gICAgZm9yIChIYXNo
U2V0PEZvbnRTZWxlY3Rvcio+OjppdGVyYXRvciBpdCA9IGdDbGllbnRzLT5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCi0gICAgICAgIGNsaWVudHMuYXBwZW5kKCppdCk7CisgICAgY2xpZW50cy5y
ZXNlcnZlQ2FwYWNpdHkobnVtQ2xpZW50cyk7CisgICAgZm9yIChhdXRvIGl0ID0gZ0NsaWVudHMt
PmJlZ2luKCksIGVuZCA9IGdDbGllbnRzLT5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAg
ICBjbGllbnRzLnVuY2hlY2tlZEFwcGVuZCgqKml0KTsKIAogICAgIEFTU0VSVChudW1DbGllbnRz
ID09IGNsaWVudHMuc2l6ZSgpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUNsaWVu
dHM7ICsraSkKLSAgICAgICAgY2xpZW50c1tpXS0+Zm9udENhY2hlSW52YWxpZGF0ZWQoKTsKKyAg
ICAgICAgY2xpZW50c1tpXS5nZXQoKS5mb250Q2FjaGVJbnZhbGlkYXRlZCgpOwogCiAgICAgcHVy
Z2VJbmFjdGl2ZUZvbnREYXRhKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94bWwv
WE1MSHR0cFJlcXVlc3QuY3BwIGIvU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNw
cAppbmRleCBjODEwNTM2Li41MDdiZWVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwv
WE1MSHR0cFJlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVz
dC5jcHAKQEAgLTgyMiw3ICs4MjIsNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpjcmVhdGVSZXF1
ZXN0KEV4Y2VwdGlvbkNvZGUmIGVjKQogdm9pZCBYTUxIdHRwUmVxdWVzdDo6YWJvcnQoKQogewog
ICAgIC8vIGludGVybmFsQWJvcnQoKSBjYWxscyBkcm9wUHJvdGVjdGlvbigpLCB3aGljaCBtYXkg
cmVsZWFzZSB0aGUgbGFzdCByZWZlcmVuY2UuCi0gICAgUmVmUHRyPFhNTEh0dHBSZXF1ZXN0PiBw
cm90ZWN0KHRoaXMpOworICAgIFJlZjxYTUxIdHRwUmVxdWVzdD4gcHJvdGVjdCgqdGhpcyk7CiAK
ICAgICBib29sIHNlbmRGbGFnID0gbV9sb2FkZXI7CiAKQEAgLTEyNDEsNyArMTI0MSw3IEBAIHZv
aWQgWE1MSHR0cFJlcXVlc3Q6OmRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBs
ZW4pCiB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaWRUaW1lb3V0KCkKIHsKICAgICAvLyBpbnRlcm5h
bEFib3J0KCkgY2FsbHMgZHJvcFByb3RlY3Rpb24oKSwgd2hpY2ggbWF5IHJlbGVhc2UgdGhlIGxh
c3QgcmVmZXJlbmNlLgotICAgIFJlZlB0cjxYTUxIdHRwUmVxdWVzdD4gcHJvdGVjdCh0aGlzKTsK
KyAgICBSZWY8WE1MSHR0cFJlcXVlc3Q+IHByb3RlY3QoKnRoaXMpOwogICAgIGludGVybmFsQWJv
cnQoKTsKIAogICAgIGNsZWFyUmVzcG9uc2UoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>210241</attachid>
            <date>2013-09-01 07:48:22 -0700</date>
            <delta_ts>2013-09-02 11:06:20 -0700</delta_ts>
            <desc>Simplified version for stack guarding</desc>
            <filename>bug-120570.diff</filename>
            <type>text/plain</type>
            <size>87408</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggYmJiYWVhNy4uNjllNzNiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMy0wOS0wMSAg
QW5kcmVhcyBLbGluZyAgPGFrbGluZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUmVmOiBBIHNtYXJ0
IHBvaW50ZXIgZm9yIHRoZSByZWZlcmVuY2UgYWdlLgorICAgICAgICA8aHR0cHM6Ly93ZWJraXQu
b3JnL2IvMTIwNTcwPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEFkZCBhIHZlcnkgc2ltcGxlIHNpbXBsZSBSZWY8VD4gc21hcnQgcG9pbnRlciBjbGFz
cyB0aGF0IGlzIG5ldmVyIG51bGwuCisgICAgICAgIEl0J3MgaW5pdGlhbGl6ZWQgYnkgcGFzc2lu
ZyBhIFQmIHRvIHRoZSBjb25zdHJ1Y3RvciBhbmQgY2Fubm90IGJlIGFzc2lnbmVkIHRvLgorCisg
ICAgICAgIG9wZXJhdG9yLT4gaXMgbm90IG92ZXJsb2FkZWQsIHRvIHByZXZlbnQgdW5zYWZlLWxv
b2tpbmcgY29kZS4KKyAgICAgICAgVGhlIHZhbHVlIGlzIGV4dHJhY3RlZCBieSAiVCYgZ2V0KCki
LCBzaW5jZSBDKysgZG9lcyBub3QgbGV0IHlvdSBvdmVycmlkZSBvcGVyYXRvci4oKQorCisgICAg
ICAgICogd3RmL1JlZi5oOgorCiAyMDEzLTA4LTMwICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBs
ZS5jb20+CiAKICAgICAgICAgTWFrZSBKU1ZhbHVlIGJvb2wgY29udmVyc2lvbiBsZXNzIGRhbmdl
cm91cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYucHJvIGIvU291cmNlL1dURi9XVEYucHJv
CmluZGV4IDAwYjk1MmEuLjE4YjczZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnBybwor
KysgYi9Tb3VyY2UvV1RGL1dURi5wcm8KQEAgLTg1LDYgKzg1LDcgQEAgSEVBREVSUyArPSBcCiAg
ICAgTWVzc2FnZVF1ZXVlLmggXAogICAgIE1ldGFBbGxvY2F0b3IuaCBcCiAgICAgTWV0YUFsbG9j
YXRvckhhbmRsZS5oIFwKKyAgICBSZWYuaCBcCiAgICAgTm9uY29weWFibGUuaCBcCiAgICAgTm9u
Q29weWluZ1NvcnQuaCBcCiAgICAgTm90Rm91bmQuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L1dURi52Y3hwcm9qL1dURi52Y3hwcm9qLmZpbHRlcnMgYi9Tb3VyY2UvV1RGL1dURi52Y3hwcm9q
L1dURi52Y3hwcm9qLmZpbHRlcnMKaW5kZXggYTFhY2I1MC4uYTViMTBkOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi9XVEYudmN4cHJvai9XVEYudmN4cHJvai5maWx0ZXJzCisrKyBiL1NvdXJjZS9X
VEYvV1RGLnZjeHByb2ovV1RGLnZjeHByb2ouZmlsdGVycwpAQCAtNDk0LDYgKzQ5NCw5IEBACiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcTmV2ZXJEZXN0cm95ZWQuaCI+DQogICAgICAg
PEZpbHRlcj53dGY8L0ZpbHRlcj4NCiAgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cd3RmXFJlZi5oIj4NCisgICAgICA8RmlsdGVyPnd0ZjwvRmlsdGVyPg0KKyAg
ICA8L0NsSW5jbHVkZT4NCiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcTm9uY29weWFi
bGUuaCI+DQogICAgICAgPEZpbHRlcj53dGY8L0ZpbHRlcj4NCiAgICAgPC9DbEluY2x1ZGU+DQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Nv
dXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYzNjOTgzYi4uZThm
YTIxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agorKysgYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC01NCw2
ICs1NCw3IEBACiAJCTFGQTQ3QzhBMTUyNTAyREEwMDU2OEQxQiAvKiBXZWJDb3JlVGhyZWFkLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFGQTQ3Qzg4
MTUyNTAyREEwMDU2OEQxQiAvKiBXZWJDb3JlVGhyZWFkLmNwcCAqLzsgfTsKIAkJMUZBNDdDOEIx
NTI1MDJEQTAwNTY4RDFCIC8qIFdlYkNvcmVUaHJlYWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFGQTQ3Qzg5MTUyNTAyREEwMDU2OEQxQiAvKiBXZWJD
b3JlVGhyZWFkLmggKi87IH07CiAJCTI2MTQ3QjBBMTVERENDREMwMEREQjkwNyAvKiBJbnRlZ2Vy
VG9TdHJpbmdDb252ZXJzaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyNjE0N0IwODE1RERDQ0RDMDBEREI5MDcgLyogSW50ZWdlclRvU3RyaW5nQ29u
dmVyc2lvbi5oICovOyB9OworCQkyNjI5OUI2RTE3QTlFNUI4MDBBREVCRTUgLyogUmVmLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNjI5OUI2RDE3QTlF
NUI4MDBBREVCRTUgLyogUmVmLmggKi87IH07CiAJCTJDMDUzODU0MTVCQzgxOTAwMEYyMUI5NiAv
KiBHcmVnb3JpYW5EYXRlVGltZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMkMwNTM4NTMxNUJDODE5MDAwRjIxQjk2IC8qIEdyZWdvcmlhbkRhdGVUaW1l
LmggKi87IH07CiAJCTJDQ0Q4OTJBMTVDMDM5MDIwMDI4NTA4MyAvKiBHcmVnb3JpYW5EYXRlVGlt
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyQ0NE
ODkyOTE1QzAzOTAyMDAyODUwODMgLyogR3JlZ29yaWFuRGF0ZVRpbWUuY3BwICovOyB9OwogCQk0
NEY2NjAwODE3MUFGQUU2MDBFNEFEMTkgLyogRW51bUNsYXNzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NEY2NjAwNzE3MUFGQUE5MDBFNEFEMTkgLyog
RW51bUNsYXNzLmggKi87IH07CkBAIC0zMjAsNiArMzIxLDcgQEAKIAkJMUZBNDdDODgxNTI1MDJE
QTAwNTY4RDFCIC8qIFdlYkNvcmVUaHJlYWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV2ViQ29yZVRocmVhZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTFGQTQ3Qzg5MTUyNTAyREEwMDU2OEQxQiAvKiBXZWJDb3JlVGhyZWFkLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvcmVUaHJlYWQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMjYxNDdCMDgxNUREQ0NEQzAwRERCOTA3IC8qIEludGVnZXJUb1N0cmlu
Z0NvbnZlcnNpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50ZWdlclRv
U3RyaW5nQ29udmVyc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyNjI5OUI2
RDE3QTlFNUI4MDBBREVCRTUgLyogUmVmLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFJlZi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyQzA1Mzg1MzE1QkM4MTkw
MDBGMjFCOTYgLyogR3JlZ29yaWFuRGF0ZVRpbWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gR3JlZ29yaWFuRGF0ZVRpbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMkNDRDg5MjkxNUMwMzkwMjAwMjg1MDgzIC8qIEdyZWdvcmlhbkRhdGVUaW1lLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyZWdvcmlhbkRhdGVUaW1lLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDRERUU3NEExNTIyNzRCQjAwQzZFQzM3IC8q
IGlPUy54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBpT1MueGNjb25m
aWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MDgsNiArNzEwLDcgQEAKIAkJCQlB
OEE0NzJDRTE1MUE4MjVCMDA0MTIzRkYgLyogTWV0YUFsbG9jYXRvci5oICovLAogCQkJCUE4QTQ3
MkNGMTUxQTgyNUIwMDQxMjNGRiAvKiBNZXRhQWxsb2NhdG9ySGFuZGxlLmggKi8sCiAJCQkJMUEz
RjZCRTYxNzRBREEyMTAwQjJFRUE3IC8qIE5ldmVyRGVzdHJveWVkLmggKi8sCisJCQkJMjYyOTlC
NkQxN0E5RTVCODAwQURFQkU1IC8qIFJlZi5oICovLAogCQkJCTBGMEQ4NUIzMTcyMzRDQjEwMDMz
ODIxMCAvKiBOb0xvY2suaCAqLywKIAkJCQlBOEE0NzJEMDE1MUE4MjVCMDA0MTIzRkYgLyogTm9u
Y29weWFibGUuaCAqLywKIAkJCQlBOEE0NzJEMTE1MUE4MjVCMDA0MTIzRkYgLyogTm9uQ29weWlu
Z1NvcnQuaCAqLywKQEAgLTEwMDEsNiArMTAwNCw3IEBACiAJCQkJQThBNDczREExNTFBODI1QjAw
NDEyM0ZGIC8qIEhhc2hUcmFpdHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0RCMTUxQTgy
NUIwMDQxMjNGRiAvKiBIZXhOdW1iZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0RDMTUx
QTgyNUIwMDQxMjNGRiAvKiBJbmxpbmVBU00uaCBpbiBIZWFkZXJzICovLAorCQkJCTI2Mjk5QjZF
MTdBOUU1QjgwMEFERUJFNSAvKiBSZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MERBMDg0MTc5
OUYwNEQwMDUyOUE5QiAvKiBJbnNlcnRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTI2MTQ3QjBB
MTVERENDREMwMEREQjkwNyAvKiBJbnRlZ2VyVG9TdHJpbmdDb252ZXJzaW9uLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNzBEQTA4NTE3OTlGMDREMDA1MjlBOUIgLyogTGlzdER1bXAuaCBpbiBIZWFk
ZXJzICovLApAQCAtMTA2Myw2ICsxMDY3LDcgQEAKIAkJCQlBOEE0NzQyNDE1MUE4MjVCMDA0MTIz
RkYgLyogU2luZ2x5TGlua2VkTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0ODc0NTMxN0Ew
QkRBRTAwRkEwNENCIC8qIFNpeENoYXJhY3Rlckhhc2guaCBpbiBIZWFkZXJzICovLAogCQkJCUE4
QTQ3NDI2MTUxQTgyNUIwMDQxMjNGRiAvKiBTcGVjdHJ1bS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MjZBNzA1MjYxNzQ0NUE1RjAwMTE4QUNBIC8qIFJlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThB
NDc0MjgxNTFBODI1QjAwNDEyM0ZGIC8qIFN0YWNrQm91bmRzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlGRURBQ0QzRTE2MzBGODNGMDBDNjk2MzQgLyogU3RhY2tTdGF0cy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQThBNDc0MjkxNTFBODI1QjAwNDEyM0ZGIC8qIFN0YXRpY0NvbnN0cnVjdG9ycy5oIGlu
IEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dCBi
L1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CmluZGV4IDlhNTkxODYuLjZiMzY3Y2IgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XVEYv
d3RmL0NNYWtlTGlzdHMudHh0CkBAIC01NSw2ICs1NSw3IEBAIHNldChXVEZfSEVBREVSUwogICAg
IE1ldGFBbGxvY2F0b3JIYW5kbGUuaAogICAgIE5vbkNvcHlpbmdTb3J0LmgKICAgICBUaHJlYWRS
ZXN0cmljdGlvblZlcmlmaWVyLmgKKyAgICBSZWYuaAogICAgIE5vbmNvcHlhYmxlLmgKICAgICBO
b3RGb3VuZC5oCiAgICAgTnVsbFB0ci5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9Gb3J3
YXJkLmggYi9Tb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmgKaW5kZXggMmE0NzUwMy4uNTlhNWRjMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvRm9yd2FyZC5oCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L0ZvcndhcmQuaApAQCAtMzIsNiArMzIsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBjbGFzcyBQYXNzT3duUHRyOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IGNsYXNzIFBhc3NSZWZQdHI7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgUmVmUHRy
OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFJlZjsKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHksIHR5cGVuYW1lIE92ZXJmbG93SGFuZGxlcj4g
Y2xhc3MgVmVjdG9yOwogCiAgICAgY2xhc3MgQXRvbWljU3RyaW5nOwpAQCAtNTUsNiArNTYsNyBA
QCB1c2luZyBXVEY6OlBhc3NPd25BcnJheVB0cjsKIHVzaW5nIFdURjo6UGFzc093blB0cjsKIHVz
aW5nIFdURjo6UGFzc1JlZlB0cjsKIHVzaW5nIFdURjo6UmVmUHRyOwordXNpbmcgV1RGOjpSZWY7
CiB1c2luZyBXVEY6OlZlY3RvcjsKIAogdXNpbmcgV1RGOjpBdG9taWNTdHJpbmc7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL3d0Zi9SZWYuaCBiL1NvdXJjZS9XVEYvd3RmL1JlZi5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhYTdiMmQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9SZWYuaApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBXVEZfUmVmX2gKKyNkZWZpbmUgV1RGX1JlZl9oCisKKyNpbmNsdWRlIDx3dGYvQ29tcGlsZXIu
aD4KKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFJlZiB7
CitwdWJsaWM6CisgICAgQUxXQVlTX0lOTElORSBSZWYoVCYgb2JqZWN0KSA6IG1fcHRyKCZvYmpl
Y3QpIHsgbV9wdHItPnJlZigpOyB9CisgICAgQUxXQVlTX0lOTElORSB+UmVmKCkgeyBtX3B0ci0+
ZGVyZWYoKTsgfQorCisgICAgQUxXQVlTX0lOTElORSBUJiBnZXQoKSBjb25zdCB7IHJldHVybiAq
bV9wdHI7IH0KKworcHJpdmF0ZToKKyAgICBSZWYoY29uc3QgUmVmJik7CisgICAgUmVmJiBvcGVy
YXRvcj0oY29uc3QgUmVmPFQ+Jik7CisKKyAgICBUKiBtX3B0cjsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdURgorCit1c2luZyBXVEY6OlJlZjsKKworI2VuZGlmIC8vIFdURl9SZWZfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CmluZGV4IDk1MmVjMzI5Li5lZmY4N2UzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIw
MTMtMDktMDEgIEFuZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgorCisgICAgICAgIFJl
ZjogQSBzbWFydCBwb2ludGVyIGZvciB0aGUgcmVmZXJlbmNlIGFnZS4KKyAgICAgICAgPGh0dHBz
Oi8vd2Via2l0Lm9yZy9iLzEyMDU3MD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBVc2UgUmVmPFQ+IGZvciB2YXJpb3VzIHN0YWNrIGd1YXJkcyB3aGVy
ZSBudWxsIGNoZWNraW5nIGlzbid0IG5lZWRlZC4KKwogMjAxMy0wOC0zMSAgQW5kcmVhcyBLbGlu
ZyAgPGFrbGluZ0BhcHBsZS5jb20+CiAKICAgICAgICAgRWRpdENvbW1hbmQgY29uc3RydWN0b3Jz
IHNob3VsZCB0YWtlIERvY3VtZW50Ji4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvZ2VvbG9jYXRpb24vR2VvbG9jYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9n
ZW9sb2NhdGlvbi9HZW9sb2NhdGlvbi5jcHAKaW5kZXggYzdhNjVjNy4uYzU5Njg2NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nZW9sb2NhdGlvbi9HZW9sb2NhdGlvbi5jcHAK
QEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJHZW9wb3NpdGlvbi5oIgogI2luY2x1ZGUgIlBh
Z2UuaCIKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+
CiAKICNpbmNsdWRlICJDb29yZGluYXRlcy5oIgogI2luY2x1ZGUgIkdlb2xvY2F0aW9uQ29udHJv
bGxlci5oIgpAQCAtMTQ3LDcgKzE0OCw3IEBAIHZvaWQgR2VvbG9jYXRpb246Okdlb05vdGlmaWVy
Ojp0aW1lckZpcmVkKFRpbWVyPEdlb05vdGlmaWVyPiopCiAKICAgICAvLyBQcm90ZWN0IHRoaXMg
R2VvTm90aWZpZXIgb2JqZWN0LCBzaW5jZSBpdAogICAgIC8vIGNvdWxkIGJlIGRlbGV0ZWQgYnkg
YSBjYWxsIHRvIGNsZWFyV2F0Y2ggaW4gYSBjYWxsYmFjay4KLSAgICBSZWZQdHI8R2VvTm90aWZp
ZXI+IHByb3RlY3QodGhpcyk7CisgICAgUmVmPEdlb05vdGlmaWVyPiBwcm90ZWN0KCp0aGlzKTsK
IAogICAgIC8vIFRlc3QgZm9yIGZhdGFsIGVycm9yIGZpcnN0LiBUaGlzIGlzIHJlcXVpcmVkIGZv
ciB0aGUgY2FzZSB3aGVyZSB0aGUgRnJhbWUgaXMKICAgICAvLyBkaXNjb25uZWN0ZWQgYW5kIHJl
cXVlc3RzIGFyZSBjYW5jZWxsZWQuCkBAIC00MzMsNyArNDM0LDcgQEAgdm9pZCBHZW9sb2NhdGlv
bjo6Y2xlYXJXYXRjaChpbnQgd2F0Y2hJRCkKIHZvaWQgR2VvbG9jYXRpb246OnNldElzQWxsb3dl
ZChib29sIGFsbG93ZWQpCiB7CiAgICAgLy8gUHJvdGVjdCB0aGUgR2VvbG9jYXRpb24gb2JqZWN0
IGZyb20gZ2FyYmFnZSBjb2xsZWN0aW9uIGR1cmluZyBhIGNhbGxiYWNrLgotICAgIFJlZlB0cjxH
ZW9sb2NhdGlvbj4gcHJvdGVjdCh0aGlzKTsKKyAgICBSZWY8R2VvbG9jYXRpb24+IHByb3RlY3Qo
KnRoaXMpOwogCiAgICAgLy8gVGhpcyBtYXkgYmUgZHVlIHRvIGVpdGhlciBhIG5ldyBwb3NpdGlv
biBmcm9tIHRoZSBzZXJ2aWNlLCBvciBhIGNhY2hlZAogICAgIC8vIHBvc2l0aW9uLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwCmluZGV4IDhh
MGU4ZDUuLjM5NzlmYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vQXVkaW9Db250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L0F1ZGlvQ29udGV4dC5jcHAKQEAgLTg0LDYgKzg0LDcgQEAKICNpbmNsdWRlIDx3dGYvTWFpblRo
cmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC04NDMsNyArODQ0LDcgQEAgdm9p
ZCBBdWRpb0NvbnRleHQ6OmRlbGV0ZU1hcmtlZE5vZGVzKCkKICAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwogCiAgICAgLy8gUHJvdGVjdCB0aGlzIG9iamVjdCBmcm9tIGJlaW5nIGRlbGV0ZWQg
YmVmb3JlIHdlIHJlbGVhc2UgdGhlIG11dGV4IGxvY2tlZCBieSBBdXRvTG9ja2VyLgotICAgIFJl
ZlB0cjxBdWRpb0NvbnRleHQ+IHByb3RlY3QodGhpcyk7CisgICAgUmVmPEF1ZGlvQ29udGV4dD4g
cHJvdGVjdCgqdGhpcyk7CiAgICAgewogICAgICAgICBBdXRvTG9ja2VyIGxvY2tlcih0aGlzKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21TUUxTdGF0
ZW1lbnRFcnJvckNhbGxiYWNrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3Vz
dG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHAKaW5kZXggOTZkM2M5MC4uYjRlMzE1ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDdXN0b21TUUxTdGF0ZW1l
bnRFcnJvckNhbGxiYWNrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0N1
c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwCkBAIC0zNiw2ICszNiw3IEBACiAjaW5j
bHVkZSAiSlNTUUxUcmFuc2FjdGlvbi5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuaCIKICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Niw3ICs0Nyw3IEBAIGJvb2wgSlNTUUxTdGF0
ZW1lbnRFcnJvckNhbGxiYWNrOjpoYW5kbGVFdmVudChTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rp
b24sIFNRTEVyCiAgICAgaWYgKCFtX2RhdGEgfHwgIW1fZGF0YS0+Z2xvYmFsT2JqZWN0KCkgfHwg
IWNhbkludm9rZUNhbGxiYWNrKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgUmVmUHRy
PEpTU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaz4gcHJvdGVjdCh0aGlzKTsKKyAgICBSZWY8SlNT
UUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrPiBwcm90ZWN0KCp0aGlzKTsKIAogICAgIEpTQzo6SlNM
b2NrSG9sZGVyIGxvY2sobV9kYXRhLT5nbG9iYWxPYmplY3QoKS0+dm0oKSk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyLmNw
cAppbmRleCAxMjViOTFlLi44NGU3MTFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0N1c3RvbVhQYXRoTlNSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNDdXN0b21YUGF0aE5TUmVzb2x2ZXIuY3BwCkBAIC0zNSw2ICszNSw3IEBA
CiAjaW5jbHVkZSAiUGFnZUNvbnNvbGUuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgog
I2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+CisjaW5jbHVkZSA8d3RmL1JlZi5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKQEAgLTg2LDcgKzg3LDcgQEAgU3RyaW5nIEpTQ3VzdG9tWFBhdGhO
U1Jlc29sdmVyOjpsb29rdXBOYW1lc3BhY2VVUkkoY29uc3QgU3RyaW5nJiBwcmVmaXgpCiAgICAg
ICAgIGZ1bmN0aW9uID0gbV9jdXN0b21SZXNvbHZlci5nZXQoKTsKICAgICB9CiAKLSAgICBSZWZQ
dHI8SlNDdXN0b21YUGF0aE5TUmVzb2x2ZXI+IHNlbGZQcm90ZWN0b3IodGhpcyk7CisgICAgUmVm
PEpTQ3VzdG9tWFBhdGhOU1Jlc29sdmVyPiBzZWxmUHJvdGVjdG9yKCp0aGlzKTsKIAogICAgIE1h
cmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7CiAgICAgYXJncy5hcHBlbmQoanNTdHJpbmdXaXRoQ2Fj
aGUoZXhlYywgcHJlZml4KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUdsb2JhbE9iamVjdFRhc2suY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01HbG9iYWxPYmplY3RUYXNrLmNwcAppbmRleCA5M2VlMTZkLi4yNDFhZDI3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdFRhc2suY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NR2xvYmFsT2JqZWN0VGFzay5j
cHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJBY3RpdmVET01DYWxsYmFjay5oIgogI2lu
Y2x1ZGUgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIgogI2luY2x1ZGUgPGhlYXAvU3Ryb25nSW5s
aW5lcy5oPgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApA
QCAtNDYsNyArNDcsNyBAQCBwdWJsaWM6CiAgICAgICAgIGlmICghY2FuSW52b2tlQ2FsbGJhY2so
KSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBSZWZQdHI8SlNHbG9iYWxPYmplY3RD
YWxsYmFjaz4gcHJvdGVjdCh0aGlzKTsKKyAgICAgICAgUmVmPEpTR2xvYmFsT2JqZWN0Q2FsbGJh
Y2s+IHByb3RlY3QoKnRoaXMpOwogICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhtX2dsb2JhbE9i
amVjdC0+dm0oKSk7CiAKICAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gbV9nbG9iYWxPYmplY3Qt
Pmdsb2JhbEV4ZWMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RXJyb3JIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JIYW5k
bGVyLmNwcAppbmRleCBmMjhmNmI1Li5jNjhhYWE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0Vycm9ySGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNFcnJvckhhbmRsZXIuY3BwCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAi
SlNFdmVudC5oIgogI2luY2x1ZGUgIkpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oIgogI2luY2x1ZGUg
PHJ1bnRpbWUvSlNMb2NrLmg+CisjaW5jbHVkZSA8d3RmL1JlZi5oPgogCiB1c2luZyBuYW1lc3Bh
Y2UgSlNDOwogCkBAIC03OSw3ICs4MCw3IEBAIHZvaWQgSlNFcnJvckhhbmRsZXI6OmhhbmRsZUV2
ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsCiAgICAg
Q2FsbFR5cGUgY2FsbFR5cGUgPSBqc0Z1bmN0aW9uLT5tZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0
YShqc0Z1bmN0aW9uLCBjYWxsRGF0YSk7CiAKICAgICBpZiAoY2FsbFR5cGUgIT0gQ2FsbFR5cGVO
b25lKSB7Ci0gICAgICAgIFJlZlB0cjxKU0Vycm9ySGFuZGxlcj4gcHJvdGVjdGVkY3Rvcih0aGlz
KTsKKyAgICAgICAgUmVmPEpTRXJyb3JIYW5kbGVyPiBwcm90ZWN0ZWRjdG9yKCp0aGlzKTsKIAog
ICAgICAgICBFdmVudCogc2F2ZWRFdmVudCA9IGdsb2JhbE9iamVjdC0+Y3VycmVudEV2ZW50KCk7
CiAgICAgICAgIGdsb2JhbE9iamVjdC0+c2V0Q3VycmVudEV2ZW50KGV2ZW50KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwCmluZGV4IDgwY2YzMjAu
LmEzZjg0NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRM
aXN0ZW5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3Rl
bmVyLmNwcApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIldvcmtlckdsb2JhbFNjb3BlLmgi
CiAjaW5jbHVkZSA8cnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmg+CiAjaW5jbHVkZSA8cnVudGlt
ZS9KU0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWRMZWFrQ291bnRlci5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwpAQCAtMTExLDcgKzExMiw3
IEBAIHZvaWQgSlNFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0CiAgICAgfQogCiAgICAgaWYgKGNhbGxUeXBlICE9
IENhbGxUeXBlTm9uZSkgewotICAgICAgICBSZWZQdHI8SlNFdmVudExpc3RlbmVyPiBwcm90ZWN0
KHRoaXMpOworICAgICAgICBSZWY8SlNFdmVudExpc3RlbmVyPiBwcm90ZWN0KCp0aGlzKTsKIAog
ICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwogICAgICAgICBhcmdzLmFwcGVuZCh0
b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgZXZlbnQpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNFdmVudExpc3RlbmVyLmgKaW5kZXggYzk5NTVhYS4uM2VjMTY3YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmgKQEAgLTI2LDYgKzI2LDcg
QEAKICNpbmNsdWRlIDxoZWFwL1N0cm9uZ0lubGluZXMuaD4KICNpbmNsdWRlIDxoZWFwL1dlYWsu
aD4KICNpbmNsdWRlIDxoZWFwL1dlYWtJbmxpbmVzLmg+CisjaW5jbHVkZSA8d3RmL1JlZi5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTc5LDcgKzgwLDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgIHsKICAgICAgICAgLy8gaW5pdGlhbGl6ZUpTRnVuY3Rpb24gY2FuIHRyaWdnZXIg
Y29kZSB0aGF0IGRlbGV0ZXMgdGhpcyBldmVudCBsaXN0ZW5lcgogICAgICAgICAvLyBiZWZvcmUg
d2UncmUgZG9uZS4gSXQgc2hvdWxkIGFsd2F5cyByZXR1cm4gMCBpbiB0aGlzIGNhc2UuCi0gICAg
ICAgIFJlZlB0cjxKU0V2ZW50TGlzdGVuZXI+IHByb3RlY3QoY29uc3RfY2FzdDxKU0V2ZW50TGlz
dGVuZXIqPih0aGlzKSk7CisgICAgICAgIFJlZjxKU0V2ZW50TGlzdGVuZXI+IHByb3RlY3QoY29u
c3RfY2FzdDxKU0V2ZW50TGlzdGVuZXImPigqdGhpcykpOwogICAgICAgICBKU0M6OlN0cm9uZzxK
U0M6OkpTT2JqZWN0PiB3cmFwcGVyKCptX2lzb2xhdGVkV29ybGQtPnZtKCksIG1fd3JhcHBlci5n
ZXQoKSk7CiAKICAgICAgICAgaWYgKCFtX2pzRnVuY3Rpb24pIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX3Jvb3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYnJpZGdl
L3J1bnRpbWVfcm9vdC5jcHAKaW5kZXggNzM5MWQxMy4uZTg2NTQ5ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfcm9vdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YnJpZGdlL3J1bnRpbWVfcm9vdC5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDxydW50
aW1lL0pTR2xvYmFsT2JqZWN0Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+CiAj
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8
d3RmL1N0ZExpYkV4dHJhcy5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEJpbmRpbmdz
IHsKQEAgLTIwMSw3ICsyMDIsNyBAQCB2b2lkIFJvb3RPYmplY3Q6OmZpbmFsaXplKEpTQzo6SGFu
ZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKikKIHsKICAgICBSdW50aW1lT2JqZWN0KiBv
YmplY3QgPSBzdGF0aWNfY2FzdDxSdW50aW1lT2JqZWN0Kj4oaGFuZGxlLmdldCgpLmFzQ2VsbCgp
KTsKIAotICAgIFJlZlB0cjxSb290T2JqZWN0PiBwcm90ZWN0KHRoaXMpOworICAgIFJlZjxSb290
T2JqZWN0PiBwcm90ZWN0KCp0aGlzKTsKICAgICBvYmplY3QtPmludmFsaWRhdGUoKTsKICAgICB3
ZWFrUmVtb3ZlKG1fcnVudGltZU9iamVjdHMsIG9iamVjdCwgb2JqZWN0KTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250U2VsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKaW5kZXggMjhkZTdhOC4uZjk4YmQ0MiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKQEAgLTUwLDYgKzUwLDcgQEAKICNpbmNs
dWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiU3R5bGVSdWxlLmgiCiAjaW5jbHVkZSAi
V2ViS2l0Rm9udEZhbWlseU5hbWVzLmgiCisjaW5jbHVkZSA8d3RmL1JlZi5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKFNWRykKQEAgLTU5OCw3ICs1
OTksNyBAQCB2b2lkIENTU0ZvbnRTZWxlY3Rvcjo6YmVnaW5Mb2FkVGltZXJGaXJlZChUaW1lcjxX
ZWJDb3JlOjpDU1NGb250U2VsZWN0b3I+KikKICAgICBmb250c1RvQmVnaW5Mb2FkaW5nLnN3YXAo
bV9mb250c1RvQmVnaW5Mb2FkaW5nKTsKIAogICAgIC8vIENTU0ZvbnRTZWxlY3RvciBjb3VsZCBn
ZXQgZGVsZXRlZCB2aWEgYmVnaW5Mb2FkSWZOZWVkZWQoKSBvciBsb2FkRG9uZSgpIHVubGVzcyBw
cm90ZWN0ZWQuCi0gICAgUmVmUHRyPENTU0ZvbnRTZWxlY3Rvcj4gcHJvdGVjdCh0aGlzKTsKKyAg
ICBSZWY8Q1NTRm9udFNlbGVjdG9yPiBwcm90ZWN0KCp0aGlzKTsKIAogICAgIENhY2hlZFJlc291
cmNlTG9hZGVyKiBjYWNoZWRSZXNvdXJjZUxvYWRlciA9IG1fZG9jdW1lbnQtPmNhY2hlZFJlc291
cmNlTG9hZGVyKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmb250c1RvQmVnaW5Mb2Fk
aW5nLnNpemUoKTsgKytpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVT
aGVldENvbnRlbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMu
Y3BwCmluZGV4IDcxYTJkZWYuLjU0NzNmMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVNoZWV0Q29udGVudHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNo
ZWV0Q29udGVudHMuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiU3R5bGVSdWxlLmgi
CiAjaW5jbHVkZSAiU3R5bGVSdWxlSW1wb3J0LmgiCiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZi5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM0MSwxMiAr
MzQyLDEwIEBAIHZvaWQgU3R5bGVTaGVldENvbnRlbnRzOjpjaGVja0xvYWRlZCgpCiAgICAgaWYg
KGlzTG9hZGluZygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8U3R5bGVTaGVldENv
bnRlbnRzPiBwcm90ZWN0KHRoaXMpOwotCiAgICAgLy8gQXZvaWQgfHRoaXN8IGJlaW5nIGRlbGV0
ZWQgYnkgc2NyaXB0cyB0aGF0IHJ1biB2aWEKICAgICAvLyBTY3JpcHRhYmxlRG9jdW1lbnRQYXJz
ZXI6OmV4ZWN1dGVTY3JpcHRzV2FpdGluZ0ZvclN0eWxlc2hlZXRzKCkuCiAgICAgLy8gU2VlIDxy
ZGFyOi8vcHJvYmxlbS82NjIyMzAwPi4KLSAgICBSZWZQdHI8U3R5bGVTaGVldENvbnRlbnRzPiBw
cm90ZWN0b3IodGhpcyk7CisgICAgUmVmPFN0eWxlU2hlZXRDb250ZW50cz4gcHJvdGVjdG9yKCp0
aGlzKTsKICAgICBTdHlsZVNoZWV0Q29udGVudHMqIHBhcmVudFNoZWV0ID0gcGFyZW50U3R5bGVT
aGVldCgpOwogICAgIGlmIChwYXJlbnRTaGVldCkgewogICAgICAgICBwYXJlbnRTaGVldC0+Y2hl
Y2tMb2FkZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRh
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmNwcAppbmRleCAwOGYwMDQ3
Li44ODQ0N2M3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuY3BwCkBAIC0zNCw2ICsz
NCw3IEBACiAjaW5jbHVkZSAiU3R5bGVJbmhlcml0ZWREYXRhLmgiCiAjaW5jbHVkZSAiVGV4dC5o
IgogI2luY2x1ZGUgIlRleHRCcmVha0l0ZXJhdG9yLmgiCisjaW5jbHVkZSA8d3RmL1JlZi5oPgog
CiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCkBAIC00NSw3ICs0Niw3IEBAIHZvaWQgQ2hhcmFjdGVy
RGF0YTo6c2V0RGF0YShjb25zdCBTdHJpbmcmIGRhdGEsIEV4Y2VwdGlvbkNvZGUmKQogICAgIGlm
IChtX2RhdGEgPT0gbm9uTnVsbERhdGEpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxD
aGFyYWN0ZXJEYXRhPiBwcm90ZWN0ID0gdGhpczsKKyAgICBSZWY8Q2hhcmFjdGVyRGF0YT4gcHJv
dGVjdCgqdGhpcyk7CiAKICAgICB1bnNpZ25lZCBvbGRMZW5ndGggPSBsZW5ndGgoKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCmluZGV4IGM3YTQ3OTguLjQ4ZDA0OTIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAKQEAgLTU0LDYgKzU0LDcgQEAKICNpbmNsdWRl
ICJUZW1wbGF0ZUNvbnRlbnREb2N1bWVudEZyYWdtZW50LmgiCiAjaW5jbHVkZSAiVGV4dC5oIgog
I2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KICNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CiAKICNpZiBFTkFCTEUoREVMRVRJT05fVUkpCkBAIC0yNjIsNyAr
MjYzLDcgQEAgYm9vbCBDb250YWluZXJOb2RlOjppbnNlcnRCZWZvcmUoUGFzc1JlZlB0cjxOb2Rl
PiBuZXdDaGlsZCwgTm9kZSogcmVmQ2hpbGQsIEV4Y2UKICAgICAvLyBJZiBpdCBpcywgaXQgY2Fu
IGJlIGRlbGV0ZWQgYXMgYSBzaWRlIGVmZmVjdCBvZiBzZW5kaW5nIG11dGF0aW9uIGV2ZW50cy4K
ICAgICBBU1NFUlQocmVmQ291bnQoKSB8fCBwYXJlbnRPclNoYWRvd0hvc3ROb2RlKCkpOwogCi0g
ICAgUmVmUHRyPE5vZGU+IHByb3RlY3QodGhpcyk7CisgICAgUmVmPE5vZGU+IHByb3RlY3QoKnRo
aXMpOwogCiAgICAgZWMgPSAwOwogCkBAIC0zODAsNyArMzgxLDcgQEAgYm9vbCBDb250YWluZXJO
b2RlOjpyZXBsYWNlQ2hpbGQoUGFzc1JlZlB0cjxOb2RlPiBuZXdDaGlsZCwgTm9kZSogb2xkQ2hp
bGQsIEV4Y2UKICAgICAvLyBJZiBpdCBpcywgaXQgY2FuIGJlIGRlbGV0ZWQgYXMgYSBzaWRlIGVm
ZmVjdCBvZiBzZW5kaW5nIG11dGF0aW9uIGV2ZW50cy4KICAgICBBU1NFUlQocmVmQ291bnQoKSB8
fCBwYXJlbnRPclNoYWRvd0hvc3ROb2RlKCkpOwogCi0gICAgUmVmUHRyPE5vZGU+IHByb3RlY3Qo
dGhpcyk7CisgICAgUmVmPE5vZGU+IHByb3RlY3QoKnRoaXMpOwogCiAgICAgZWMgPSAwOwogCkBA
IC01MDMsNyArNTA0LDcgQEAgYm9vbCBDb250YWluZXJOb2RlOjpyZW1vdmVDaGlsZChOb2RlKiBv
bGRDaGlsZCwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgLy8gSWYgaXQgaXMsIGl0IGNhbiBiZSBk
ZWxldGVkIGFzIGEgc2lkZSBlZmZlY3Qgb2Ygc2VuZGluZyBtdXRhdGlvbiBldmVudHMuCiAgICAg
QVNTRVJUKHJlZkNvdW50KCkgfHwgcGFyZW50T3JTaGFkb3dIb3N0Tm9kZSgpKTsKIAotICAgIFJl
ZlB0cjxOb2RlPiBwcm90ZWN0KHRoaXMpOworICAgIFJlZjxOb2RlPiBwcm90ZWN0KCp0aGlzKTsK
IAogICAgIGVjID0gMDsKIApAQCAtNjExLDcgKzYxMiw3IEBAIHZvaWQgQ29udGFpbmVyTm9kZTo6
cmVtb3ZlQ2hpbGRyZW4oKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBUaGUgY29udGFpbmVy
IG5vZGUgY2FuIGJlIHJlbW92ZWQgZnJvbSBldmVudCBoYW5kbGVycy4KLSAgICBSZWZQdHI8Q29u
dGFpbmVyTm9kZT4gcHJvdGVjdCh0aGlzKTsKKyAgICBSZWY8Q29udGFpbmVyTm9kZT4gcHJvdGVj
dCgqdGhpcyk7CiAKICAgICAvLyBleGNsdWRlIHRoaXMgbm9kZSB3aGVuIGxvb2tpbmcgZm9yIHJl
bW92ZWQgZm9jdXNlZE5vZGUgc2luY2Ugb25seSBjaGlsZHJlbiB3aWxsIGJlIHJlbW92ZWQKICAg
ICBkb2N1bWVudCgpLnJlbW92ZUZvY3VzZWROb2RlT2ZTdWJ0cmVlKHRoaXMsIHRydWUpOwpAQCAt
NjIyLDcgKzYyMyw3IEBAIHZvaWQgQ29udGFpbmVyTm9kZTo6cmVtb3ZlQ2hpbGRyZW4oKQogCiAg
ICAgLy8gRG8gYW55IHByZXAgd29yayBuZWVkZWQgYmVmb3JlIGFjdHVhbGx5IHN0YXJ0aW5nIHRv
IGRldGFjaAogICAgIC8vIGFuZCByZW1vdmUuLi4gZS5nLiBzdG9wIGxvYWRpbmcgZnJhbWVzLCBm
aXJlIHVubG9hZCBldmVudHMuCi0gICAgd2lsbFJlbW92ZUNoaWxkcmVuKHByb3RlY3QuZ2V0KCkp
OworICAgIHdpbGxSZW1vdmVDaGlsZHJlbih0aGlzKTsKIAogICAgIE5vZGVWZWN0b3IgcmVtb3Zl
ZENoaWxkcmVuOwogICAgIHsKQEAgLTY0Nyw3ICs2NDgsNyBAQCB2b2lkIENvbnRhaW5lck5vZGU6
OnJlbW92ZUNoaWxkcmVuKCkKIAogYm9vbCBDb250YWluZXJOb2RlOjphcHBlbmRDaGlsZChQYXNz
UmVmUHRyPE5vZGU+IG5ld0NoaWxkLCBFeGNlcHRpb25Db2RlJiBlYywgQXR0YWNoQmVoYXZpb3Ig
YXR0YWNoQmVoYXZpb3IpCiB7Ci0gICAgUmVmUHRyPENvbnRhaW5lck5vZGU+IHByb3RlY3QodGhp
cyk7CisgICAgUmVmPENvbnRhaW5lck5vZGU+IHByb3RlY3QoKnRoaXMpOwogCiAgICAgLy8gQ2hl
Y2sgdGhhdCB0aGlzIG5vZGUgaXMgbm90ICJmbG9hdGluZyIuCiAgICAgLy8gSWYgaXQgaXMsIGl0
IGNhbiBiZSBkZWxldGVkIGFzIGEgc2lkZSBlZmZlY3Qgb2Ygc2VuZGluZyBtdXRhdGlvbiBldmVu
dHMuCkBAIC03NTAsNyArNzUxLDcgQEAgdm9pZCBDb250YWluZXJOb2RlOjpzdXNwZW5kUG9zdEF0
dGFjaENhbGxiYWNrcygpCiB2b2lkIENvbnRhaW5lck5vZGU6OnJlc3VtZVBvc3RBdHRhY2hDYWxs
YmFja3MoKQogewogICAgIGlmIChzX2F0dGFjaERlcHRoID09IDEpIHsKLSAgICAgICAgUmVmUHRy
PENvbnRhaW5lck5vZGU+IHByb3RlY3QodGhpcyk7CisgICAgICAgIFJlZjxDb250YWluZXJOb2Rl
PiBwcm90ZWN0KCp0aGlzKTsKIAogICAgICAgICBpZiAoc19wb3N0QXR0YWNoQ2FsbGJhY2tRdWV1
ZSkKICAgICAgICAgICAgIGRpc3BhdGNoUG9zdEF0dGFjaENhbGxiYWNrcygpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmggYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuaAppbmRleCBiNzMzNmM4Li4xNTFi
M2YyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZUFsZ29yaXRo
bXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuaApA
QCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJT
aGFkb3dSb290LmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTgzLDcgKzE4NCw3IEBAIG5hbWVz
cGFjZSBQcml2YXRlIHsKIAogICAgICAgICAgICAgICAgIHRhaWwgPSBuOwogICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8R2VuZXJpY05vZGU+IHByb3RlY3Qobik7
IC8vIHJlbW92ZWRGcm9tRG9jdW1lbnQgbWF5IHJlbW92ZSByZW1vdmUgYWxsIHJlZmVyZW5jZXMg
dG8gdGhpcyBub2RlLgorICAgICAgICAgICAgICAgIFJlZjxHZW5lcmljTm9kZT4gcHJvdGVjdCgq
bik7IC8vIHJlbW92ZWRGcm9tRG9jdW1lbnQgbWF5IHJlbW92ZSByZW1vdmUgYWxsIHJlZmVyZW5j
ZXMgdG8gdGhpcyBub2RlLgogICAgICAgICAgICAgICAgIE5vZGVSZW1vdmFsRGlzcGF0Y2hlcjxH
ZW5lcmljTm9kZSwgR2VuZXJpY05vZGVDb250YWluZXIsIFNob3VsZERpc3BhdGNoUmVtb3ZhbE5v
dGlmaWNhdGlvbjxHZW5lcmljTm9kZT46OnZhbHVlPjo6ZGlzcGF0Y2gobiwgY29udGFpbmVyKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTk2LDcgKzE5Nyw3IEBAIG5hbWVzcGFjZSBQ
cml2YXRlIHsKIGlubGluZSB2b2lkIENoaWxkTm9kZUluc2VydGlvbk5vdGlmaWVyOjpub3RpZnlO
b2RlSW5zZXJ0ZWRJbnRvRG9jdW1lbnQoTm9kZSogbm9kZSkKIHsKICAgICBBU1NFUlQobV9pbnNl
cnRpb25Qb2ludC0+aW5Eb2N1bWVudCgpKTsKLSAgICBSZWZQdHI8Tm9kZT4gcHJvdGVjdChub2Rl
KTsKKyAgICBSZWY8Tm9kZT4gcHJvdGVjdCgqbm9kZSk7CiAgICAgaWYgKE5vZGU6Okluc2VydGlv
blNob3VsZENhbGxEaWROb3RpZnlTdWJ0cmVlSW5zZXJ0aW9ucyA9PSBub2RlLT5pbnNlcnRlZElu
dG8obV9pbnNlcnRpb25Qb2ludCkpCiAgICAgICAgIG1fcG9zdEluc2VydGlvbk5vdGlmaWNhdGlv
blRhcmdldHMuYXBwZW5kKG5vZGUpOwogICAgIGlmIChub2RlLT5pc0NvbnRhaW5lck5vZGUoKSkK
QEAgLTIyMSw4ICsyMjIsOCBAQCBpbmxpbmUgdm9pZCBDaGlsZE5vZGVJbnNlcnRpb25Ob3RpZmll
cjo6bm90aWZ5KE5vZGUqIG5vZGUpCiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRJ
bnNlcnRET01Ob2RlKCZub2RlLT5kb2N1bWVudCgpLCBub2RlKTsKICNlbmRpZgogCi0gICAgUmVm
UHRyPERvY3VtZW50PiBwcm90ZWN0RG9jdW1lbnQoJm5vZGUtPmRvY3VtZW50KCkpOwotICAgIFJl
ZlB0cjxOb2RlPiBwcm90ZWN0Tm9kZShub2RlKTsKKyAgICBSZWY8RG9jdW1lbnQ+IHByb3RlY3RE
b2N1bWVudChub2RlLT5kb2N1bWVudCgpKTsKKyAgICBSZWY8Tm9kZT4gcHJvdGVjdE5vZGUoKm5v
ZGUpOwogCiAgICAgaWYgKG1faW5zZXJ0aW9uUG9pbnQtPmluRG9jdW1lbnQoKSkKICAgICAgICAg
bm90aWZ5Tm9kZUluc2VydGVkSW50b0RvY3VtZW50KG5vZGUpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAKaW5kZXggOTQyZjllOTUuLmFmNDVhOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAt
MTY1LDYgKzE2NSw3IEBACiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8
d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9SZWYuaD4KICNpbmNsdWRlIDx3dGYvVGVtcG9yYXJ5Q2hhbmdlLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVmZmVyLmg+CiAKQEAgLTIzNzEsNyArMjM3Miw3IEBAIHZvaWQgRG9j
dW1lbnQ6OmltcGxpY2l0Q2xvc2UoKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBDYWxsIHRv
IGRpc3BhdGNoV2luZG93TG9hZEV2ZW50IGNhbiBibG93IHVzIGZyb20gdW5kZXJuZWF0aC4KLSAg
ICBSZWZQdHI8RG9jdW1lbnQ+IHByb3RlY3QodGhpcyk7CisgICAgUmVmPERvY3VtZW50PiBwcm90
ZWN0KCp0aGlzKTsKIAogICAgIG1fcHJvY2Vzc2luZ0xvYWRFdmVudCA9IHRydWU7CiAKQEAgLTUz
MjEsNyArNTMyMiw3IEBAIHZvaWQgRG9jdW1lbnQ6OmZ1bGxTY3JlZW5DaGFuZ2VEZWxheVRpbWVy
RmlyZWQoVGltZXI8RG9jdW1lbnQ+KikKICAgICAvLyBTaW5jZSB3ZSBkaXNwYXRjaCBldmVudHMg
aW4gdGhpcyBmdW5jdGlvbiwgaXQncyBwb3NzaWJsZSB0aGF0IHRoZQogICAgIC8vIGRvY3VtZW50
IHdpbGwgYmUgZGV0YWNoZWQgYW5kIEdDJ2QuIFdlIHByb3RlY3QgaXQgaGVyZSB0byBtYWtlIHN1
cmUgd2UKICAgICAvLyBjYW4gZmluaXNoIHRoZSBmdW5jdGlvbiBzdWNjZXNzZnVsbHkuCi0gICAg
UmVmUHRyPERvY3VtZW50PiBwcm90ZWN0RG9jdW1lbnQodGhpcyk7CisgICAgUmVmPERvY3VtZW50
PiBwcm90ZWN0KCp0aGlzKTsKICAgICBEZXF1ZTxSZWZQdHI8Tm9kZT4gPiBjaGFuZ2VRdWV1ZTsK
ICAgICBtX2Z1bGxTY3JlZW5DaGFuZ2VFdmVudFRhcmdldFF1ZXVlLnN3YXAoY2hhbmdlUXVldWUp
OwogICAgIERlcXVlPFJlZlB0cjxOb2RlPiA+IGVycm9yUXVldWU7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnRFdmVudFF1ZXVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudEV2ZW50UXVldWUuY3BwCmluZGV4IDlkMDdlZjIuLjQ3NjA5YjEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudEV2ZW50UXVldWUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudEV2ZW50UXVldWUuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAj
aW5jbHVkZSAiUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIlN1c3BlbmRhYmxlVGltZXIuaCIKKyNpbmNsdWRl
IDx3dGYvUmVmLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKQEAgLTEzNSw3ICsxMzYs
NyBAQCB2b2lkIERvY3VtZW50RXZlbnRRdWV1ZTo6cGVuZGluZ0V2ZW50VGltZXJGaXJlZCgpCiAg
ICAgYm9vbCB3YXNBZGRlZCA9IG1fcXVldWVkRXZlbnRzLmFkZCgwKS5pc05ld0VudHJ5OwogICAg
IEFTU0VSVF9VTlVTRUQod2FzQWRkZWQsIHdhc0FkZGVkKTsgLy8gSXQgc2hvdWxkIG5vdCBoYXZl
IGFscmVhZHkgYmVlbiBpbiB0aGUgbGlzdC4KIAotICAgIFJlZlB0cjxEb2N1bWVudEV2ZW50UXVl
dWU+IHByb3RlY3Rvcih0aGlzKTsKKyAgICBSZWY8RG9jdW1lbnRFdmVudFF1ZXVlPiBwcm90ZWN0
b3IoKnRoaXMpOwogCiAgICAgd2hpbGUgKCFtX3F1ZXVlZEV2ZW50cy5pc0VtcHR5KCkpIHsKICAg
ICAgICAgTGlzdEhhc2hTZXQ8UmVmUHRyPEV2ZW50PiwgMTY+OjppdGVyYXRvciBpdGVyID0gbV9x
dWV1ZWRFdmVudHMuYmVnaW4oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVu
dFRhcmdldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwCmluZGV4IDU5
ZDEwOTQuLmYxMjBhYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdl
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNwcApAQCAtMzgsNiAr
MzgsNyBAQAogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJXZWJLaXRU
cmFuc2l0aW9uRXZlbnQuaCIKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUg
PHd0Zi9SZWYuaD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogCkBAIC0yNDAsNyArMjQxLDcgQEAgYm9vbCBFdmVudFRhcmdldDo6ZmlyZUV2
ZW50TGlzdGVuZXJzKEV2ZW50KiBldmVudCkKICAgICAgICAgCiB2b2lkIEV2ZW50VGFyZ2V0Ojpm
aXJlRXZlbnRMaXN0ZW5lcnMoRXZlbnQqIGV2ZW50LCBFdmVudFRhcmdldERhdGEqIGQsIEV2ZW50
TGlzdGVuZXJWZWN0b3ImIGVudHJ5KQogewotICAgIFJlZlB0cjxFdmVudFRhcmdldD4gcHJvdGVj
dCA9IHRoaXM7CisgICAgUmVmPEV2ZW50VGFyZ2V0PiBwcm90ZWN0KCp0aGlzKTsKIAogICAgIC8v
IEZpcmUgYWxsIGxpc3RlbmVycyByZWdpc3RlcmVkIGZvciB0aGlzIGV2ZW50LiBEb24ndCBmaXJl
IGxpc3RlbmVycyByZW1vdmVkIGR1cmluZyBldmVudCBkaXNwYXRjaC4KICAgICAvLyBBbHNvLCBk
b24ndCBmaXJlIGV2ZW50IGxpc3RlbmVycyBhZGRlZCBkdXJpbmcgZXZlbnQgZGlzcGF0Y2guIENv
bnZlbmllbnRseSwgYWxsIG5ldyBldmVudCBsaXN0ZW5lcnMgd2lsbCBiZSBhZGRlZApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL05v
ZGUuY3BwCmluZGV4IGMxOGU0OGIuLjliMGNkMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKQEAgLTIxODAs
NyArMjE4MCw3IEBAIGJvb2wgTm9kZTo6ZGlzcGF0Y2hCZWZvcmVMb2FkRXZlbnQoY29uc3QgU3Ry
aW5nJiBzb3VyY2VVUkwpCiAgICAgaWYgKCFkb2N1bWVudCgpLmhhc0xpc3RlbmVyVHlwZShEb2N1
bWVudDo6QkVGT1JFTE9BRF9MSVNURU5FUikpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAg
UmVmUHRyPE5vZGU+IHByb3RlY3Rvcih0aGlzKTsKKyAgICBSZWY8Tm9kZT4gcHJvdGVjdG9yKCp0
aGlzKTsKICAgICBSZWZQdHI8QmVmb3JlTG9hZEV2ZW50PiBiZWZvcmVMb2FkRXZlbnQgPSBCZWZv
cmVMb2FkRXZlbnQ6OmNyZWF0ZShzb3VyY2VVUkwpOwogICAgIGRpc3BhdGNoRXZlbnQoYmVmb3Jl
TG9hZEV2ZW50LmdldCgpKTsKICAgICByZXR1cm4gIWJlZm9yZUxvYWRFdmVudC0+ZGVmYXVsdFBy
ZXZlbnRlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlv
bkNvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQu
Y3BwCmluZGV4IDc1ZmRjNmMuLjJmY2FjM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9TY3JpcHRFeGVjdXRpb25Db250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC5jcHAKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJXb3Jr
ZXJHbG9iYWxTY29wZS5oIgogI2luY2x1ZGUgIldvcmtlclRocmVhZC5oIgogI2luY2x1ZGUgPHd0
Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL1JlZi5oPgogCiAvLyBGSVhNRTogVGhpcyBp
cyBhIGxheWVyaW5nIHZpb2xhdGlvbi4KICNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgpAQCAtMTIz
LDcgKzEyNCw3IEBAIHZvaWQgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6cHJvY2Vzc01lc3NhZ2VQ
b3J0TWVzc2FnZXNTb29uKCkKIAogdm9pZCBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpkaXNwYXRj
aE1lc3NhZ2VQb3J0RXZlbnRzKCkKIHsKLSAgICBSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4
dD4gcHJvdGVjdCh0aGlzKTsKKyAgICBSZWY8U2NyaXB0RXhlY3V0aW9uQ29udGV4dD4gcHJvdGVj
dCgqdGhpcyk7CiAKICAgICAvLyBNYWtlIGEgZnJvemVuIGNvcHkuCiAgICAgVmVjdG9yPE1lc3Nh
Z2VQb3J0Kj4gcG9ydHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0ZWRB
bmltYXRpb25Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRlZEFuaW1h
dGlvbkNvbnRyb2xsZXIuY3BwCmluZGV4IGE1MjEwZTIuLjJiNTZlNGUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCkBAIC0zNCw2
ICszNCw3IEBACiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVk
ZSAiUmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2suaCIKICNpbmNsdWRlICJTZXR0aW5ncy5o
IgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KIAogI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFN
RV9USU1FUikKICNpbmNsdWRlIDxhbGdvcml0aG0+CkBAIC0xNDAsNyArMTQxLDcgQEAgdm9pZCBT
Y3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXI6OnNlcnZpY2VTY3JpcHRlZEFuaW1hdGlvbnMoZG91
YmxlIG1vbm90b25pY1RpbWUKIAogICAgIC8vIEludm9raW5nIGNhbGxiYWNrcyBtYXkgZGV0YWNo
IGVsZW1lbnRzIGZyb20gb3VyIGRvY3VtZW50LCB3aGljaCBjbGVhcnMgdGhlIGRvY3VtZW50J3MK
ICAgICAvLyByZWZlcmVuY2UgdG8gdXMsIHNvIHRha2UgYSBkZWZlbnNpdmUgcmVmZXJlbmNlLgot
ICAgIFJlZlB0cjxTY3JpcHRlZEFuaW1hdGlvbkNvbnRyb2xsZXI+IHByb3RlY3Rvcih0aGlzKTsK
KyAgICBSZWY8U2NyaXB0ZWRBbmltYXRpb25Db250cm9sbGVyPiBwcm90ZWN0b3IoKnRoaXMpOwog
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjYWxsYmFja3Muc2l6ZSgpOyArK2kpIHsKICAg
ICAgICAgUmVxdWVzdEFuaW1hdGlvbkZyYW1lQ2FsbGJhY2sqIGNhbGxiYWNrID0gY2FsbGJhY2tz
W2ldLmdldCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHAKaW5kZXgg
NTAzNjFjYS4uZTAwNjg3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRW1i
ZWRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQu
Y3BwCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiUmVuZGVyRW1iZWRkZWRPYmplY3QuaCIK
ICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1
ZGUgPHd0Zi9SZWYuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xNTQsNyArMTU1LDcg
QEAgdm9pZCBIVE1MRW1iZWRFbGVtZW50Ojp1cGRhdGVXaWRnZXQoUGx1Z2luQ3JlYXRpb25PcHRp
b24gcGx1Z2luQ3JlYXRpb25PcHRpb24pCiAgICAgVmVjdG9yPFN0cmluZz4gcGFyYW1WYWx1ZXM7
CiAgICAgcGFyYW1ldGVyc0ZvclBsdWdpbihwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcyk7CiAKLSAg
ICBSZWZQdHI8SFRNTEVtYmVkRWxlbWVudD4gcHJvdGVjdCh0aGlzKTsgLy8gTG9hZGluZyB0aGUg
cGx1Z2luIG1pZ2h0IHJlbW92ZSB1cyBmcm9tIHRoZSBkb2N1bWVudC4KKyAgICBSZWY8SFRNTEVt
YmVkRWxlbWVudD4gcHJvdGVjdCgqdGhpcyk7IC8vIExvYWRpbmcgdGhlIHBsdWdpbiBtaWdodCBy
ZW1vdmUgdXMgZnJvbSB0aGUgZG9jdW1lbnQuCiAgICAgYm9vbCBiZWZvcmVMb2FkQWxsb3dlZExv
YWQgPSBndWFyZGVkRGlzcGF0Y2hCZWZvcmVMb2FkRXZlbnQobV91cmwpOwogICAgIGlmICghYmVm
b3JlTG9hZEFsbG93ZWRMb2FkKSB7CiAgICAgICAgIGlmIChkb2N1bWVudCgpLmlzUGx1Z2luRG9j
dW1lbnQoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRy
b2xFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVu
dC5jcHAKaW5kZXggZGIyMDYyNC4uNzQ2ODY0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAi
U2NyaXB0RXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIlZhbGlkYXRpb25NZXNzYWdlLmgiCiAj
aW5jbHVkZSAiVmFsaWRpdHlTdGF0ZS5oIgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQxMywxMCArNDE0LDEw
IEBAIGJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6Y2hlY2tWYWxpZGl0eShWZWN0b3I8UmVm
UHRyPEZvcm1Bc3NvY2lhdGVkRWxlbWVudD4KICAgICBpZiAoIXdpbGxWYWxpZGF0ZSgpIHx8IGlz
VmFsaWRGb3JtQ29udHJvbEVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgLy8g
QW4gZXZlbnQgaGFuZGxlciBjYW4gZGVyZWYgdGhpcyBvYmplY3QuCi0gICAgUmVmUHRyPEhUTUxG
b3JtQ29udHJvbEVsZW1lbnQ+IHByb3RlY3Rvcih0aGlzKTsKLSAgICBSZWZQdHI8RG9jdW1lbnQ+
IG9yaWdpbmFsRG9jdW1lbnQoJmRvY3VtZW50KCkpOworICAgIFJlZjxIVE1MRm9ybUNvbnRyb2xF
bGVtZW50PiBwcm90ZWN0b3IoKnRoaXMpOworICAgIFJlZjxEb2N1bWVudD4gb3JpZ2luYWxEb2N1
bWVudChkb2N1bWVudCgpKTsKICAgICBib29sIG5lZWRzRGVmYXVsdEFjdGlvbiA9IGRpc3BhdGNo
RXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuaW52YWxpZEV2ZW50LCBmYWxzZSwgdHJ1
ZSkpOwotICAgIGlmIChuZWVkc0RlZmF1bHRBY3Rpb24gJiYgdW5oYW5kbGVkSW52YWxpZENvbnRy
b2xzICYmIGluRG9jdW1lbnQoKSAmJiBvcmlnaW5hbERvY3VtZW50ID09ICZkb2N1bWVudCgpKQor
ICAgIGlmIChuZWVkc0RlZmF1bHRBY3Rpb24gJiYgdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzICYm
IGluRG9jdW1lbnQoKSAmJiAmb3JpZ2luYWxEb2N1bWVudC5nZXQoKSA9PSAmZG9jdW1lbnQoKSkK
ICAgICAgICAgdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzLT5hcHBlbmQodGhpcyk7CiAgICAgcmV0
dXJuIGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCmluZGV4
IDVjNjlhM2IuLmJlMzdhZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZv
cm1FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5j
cHAKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlICJTY3JpcHRFdmVudExpc3RlbmVyLmgiCiAj
aW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlIDxsaW1pdHM+CisjaW5jbHVkZSA8d3RmL1Jl
Zi5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCkBAIC0yMjcsNyArMjI4LDcgQEAgYm9vbCBI
VE1MRm9ybUVsZW1lbnQ6OnZhbGlkYXRlSW50ZXJhY3RpdmVseShFdmVudCogZXZlbnQpCiAgICAg
Ly8gaGFzICFyZW5kZXJlcigpLT5uZWVkc0xheW91dCgpIGFzc2VydGlvbi4KICAgICBkb2N1bWVu
dCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogCi0gICAgUmVmUHRy
PEhUTUxGb3JtRWxlbWVudD4gcHJvdGVjdG9yKHRoaXMpOworICAgIFJlZjxIVE1MRm9ybUVsZW1l
bnQ+IHByb3RlY3RvcigqdGhpcyk7CiAgICAgLy8gRm9jdXMgb24gdGhlIGZpcnN0IGZvY3VzYWJs
ZSBjb250cm9sIGFuZCBzaG93IGEgdmFsaWRhdGlvbiBtZXNzYWdlLgogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMuc2l6ZSgpOyArK2kpIHsKICAg
ICAgICAgRm9ybUFzc29jaWF0ZWRFbGVtZW50KiB1bmhhbmRsZWRBc3NvY2lhdGVkRWxlbWVudCA9
IHVuaGFuZGxlZEludmFsaWRDb250cm9sc1tpXS5nZXQoKTsKQEAgLTU5NSw3ICs1OTYsNyBAQCBi
b29sIEhUTUxGb3JtRWxlbWVudDo6Y2hlY2tWYWxpZGl0eSgpCiAKIGJvb2wgSFRNTEZvcm1FbGVt
ZW50OjpjaGVja0ludmFsaWRDb250cm9sc0FuZENvbGxlY3RVbmhhbmRsZWQoVmVjdG9yPFJlZlB0
cjxGb3JtQXNzb2NpYXRlZEVsZW1lbnQ+ID4mIHVuaGFuZGxlZEludmFsaWRDb250cm9scykKIHsK
LSAgICBSZWZQdHI8SFRNTEZvcm1FbGVtZW50PiBwcm90ZWN0b3IodGhpcyk7CisgICAgUmVmPEhU
TUxGb3JtRWxlbWVudD4gcHJvdGVjdG9yKCp0aGlzKTsKICAgICAvLyBDb3B5IG1fYXNzb2NpYXRl
ZEVsZW1lbnRzIGJlY2F1c2UgZXZlbnQgaGFuZGxlcnMgY2FsbGVkIGZyb20KICAgICAvLyBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50OjpjaGVja1ZhbGlkaXR5KCkgbWlnaHQgY2hhbmdlIG1fYXNzb2Np
YXRlZEVsZW1lbnRzLgogICAgIFZlY3RvcjxSZWZQdHI8Rm9ybUFzc29jaWF0ZWRFbGVtZW50PiA+
IGVsZW1lbnRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVPd25l
ckVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQu
Y3BwCmluZGV4IDJmOTUwNGYuLjg3MDVjZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxGcmFtZU93bmVyRWxlbWVudC5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJGcmFt
ZUxvYWRlci5oIgogI2luY2x1ZGUgIlJlbmRlclBhcnQuaCIKICNpbmNsdWRlICJTaGFkb3dSb290
LmgiCisjaW5jbHVkZSA8d3RmL1JlZi5oPgogCiAjaWYgRU5BQkxFKFNWRykKICNpbmNsdWRlICJF
eGNlcHRpb25Db2RlLmgiCkBAIC04MSw3ICs4Miw3IEBAIHZvaWQgSFRNTEZyYW1lT3duZXJFbGVt
ZW50OjpkaXNjb25uZWN0Q29udGVudEZyYW1lKCkKICAgICAvLyByZWFjaCB1cCBpbnRvIHRoaXMg
ZG9jdW1lbnQgYW5kIHRoZW4gYXR0ZW1wdCB0byBsb29rIGJhY2sgZG93bi4gV2Ugc2hvdWxkCiAg
ICAgLy8gc2VlIGlmIHRoaXMgYmVoYXZpb3IgaXMgcmVhbGx5IG5lZWRlZCBhcyBHZWNrbyBkb2Vz
IG5vdCBhbGxvdyB0aGlzLgogICAgIGlmIChGcmFtZSogZnJhbWUgPSBjb250ZW50RnJhbWUoKSkg
ewotICAgICAgICBSZWZQdHI8RnJhbWU+IHByb3RlY3QoZnJhbWUpOworICAgICAgICBSZWY8RnJh
bWU+IHByb3RlY3QoKmZyYW1lKTsKICAgICAgICAgZnJhbWUtPmxvYWRlcigpLmZyYW1lRGV0YWNo
ZWQoKTsKICAgICAgICAgZnJhbWUtPmRpc2Nvbm5lY3RPd25lckVsZW1lbnQoKTsKICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAppbmRleCAxMDhhYTAxLi42MTRi
ZTZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKQEAgLTY4LDYg
KzY4LDcgQEAKICNpbmNsdWRlICJTY3JpcHRFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiU3R5
bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZi5oPgogCiAjaWYgRU5BQkxFKElOUFVUX1RZUEVfQ09MT1IpCiAjaW5jbHVkZSAiQ29sb3JJ
bnB1dFR5cGUuaCIKQEAgLTEwMzQsNyArMTAzNSw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6
c2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSwgVGV4dEZpZWxkRXZlbnRCZWhhdmlvciBldmVu
CiAgICAgaWYgKCFtX2lucHV0VHlwZS0+Y2FuU2V0VmFsdWUodmFsdWUpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBSZWZQdHI8SFRNTElucHV0RWxlbWVudD4gcHJvdGVjdG9yKHRoaXMpOworICAg
IFJlZjxIVE1MSW5wdXRFbGVtZW50PiBwcm90ZWN0b3IoKnRoaXMpOwogICAgIEV2ZW50UXVldWVT
Y29wZSBzY29wZTsKICAgICBTdHJpbmcgc2FuaXRpemVkVmFsdWUgPSBzYW5pdGl6ZVZhbHVlKHZh
bHVlKTsKICAgICBib29sIHZhbHVlQ2hhbmdlZCA9IHNhbml0aXplZFZhbHVlICE9IHRoaXMtPnZh
bHVlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAKaW5kZXggY2QzNzVl
My4uYTk1MWQxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmNwcApAQCAt
NTEsNiArNTEsNyBAQAogI2luY2x1ZGUgIlN0eWxlSW5oZXJpdGVkRGF0YS5oIgogI2luY2x1ZGUg
IlN0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldENvbnRlbnRz
LmgiCisjaW5jbHVkZSA8d3RmL1JlZi5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMjk4LDcgKzI5OSw3IEBAIHZvaWQgSFRNTExpbmtF
bGVtZW50OjpzZXRDU1NTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgaHJlZiwgY29uc3QgS1VSTCYg
YmFzZVVSTCwKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAvLyBDb21wbGV0aW5nIHRoZSBz
aGVldCBsb2FkIG1heSBjYXVzZSBzY3JpcHRzIHRvIGV4ZWN1dGUuCi0gICAgUmVmUHRyPE5vZGU+
IHByb3RlY3Rvcih0aGlzKTsKKyAgICBSZWY8Tm9kZT4gcHJvdGVjdG9yKCp0aGlzKTsKIAogICAg
IENTU1BhcnNlckNvbnRleHQgcGFyc2VyQ29udGV4dCgmZG9jdW1lbnQoKSwgYmFzZVVSTCwgY2hh
cnNldCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCmluZGV4IGIy
YjM4MGMuLmIxZjJlZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlh
RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNw
cApAQCAtODMsNiArODMsNyBAQAogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1
ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL05vbkNvcHlpbmdTb3J0Lmg+Cisj
aW5jbHVkZSA8d3RmL1JlZi5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKQEAgLTcwOCw3ICs3MDksNyBAQCB2b2lkIEhU
TUxNZWRpYUVsZW1lbnQ6OnNjaGVkdWxlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudE5h
bWUpCiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bG9hZFRpbWVyRmlyZWQoVGltZXI8SFRNTE1l
ZGlhRWxlbWVudD4qKQogewotICAgIFJlZlB0cjxIVE1MTWVkaWFFbGVtZW50PiBwcm90ZWN0KHRo
aXMpOyAvLyBsb2FkTmV4dFNvdXJjZUNoaWxkIG1heSBmaXJlICdiZWZvcmVsb2FkJywgd2hpY2gg
Y2FuIG1ha2UgYXJiaXRyYXJ5IERPTSBtdXRhdGlvbnMuCisgICAgUmVmPEhUTUxNZWRpYUVsZW1l
bnQ+IHByb3RlY3QoKnRoaXMpOyAvLyBsb2FkTmV4dFNvdXJjZUNoaWxkIG1heSBmaXJlICdiZWZv
cmVsb2FkJywgd2hpY2ggY2FuIG1ha2UgYXJiaXRyYXJ5IERPTSBtdXRhdGlvbnMuCiAKICNpZiBF
TkFCTEUoVklERU9fVFJBQ0spCiAgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OndlYmtp
dFZpZGVvVHJhY2tFbmFibGVkKCkgJiYgKG1fcGVuZGluZ0FjdGlvbkZsYWdzICYgQ29uZmlndXJl
VGV4dFRyYWNrcykpCkBAIC03NzEsNyArNzcyLDcgQEAgU3RyaW5nIEhUTUxNZWRpYUVsZW1lbnQ6
OmNhblBsYXlUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFN0cmluZyYga2V5U3kK
IAogdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpsb2FkKCkKIHsKLSAgICBSZWZQdHI8SFRNTE1lZGlh
RWxlbWVudD4gcHJvdGVjdCh0aGlzKTsgLy8gbG9hZEludGVybmFsIG1heSByZXN1bHQgaW4gYSAn
YmVmb3JlbG9hZCcgZXZlbnQsIHdoaWNoIGNhbiBtYWtlIGFyYml0cmFyeSBET00gbXV0YXRpb25z
LgorICAgIFJlZjxIVE1MTWVkaWFFbGVtZW50PiBwcm90ZWN0KCp0aGlzKTsgLy8gbG9hZEludGVy
bmFsIG1heSByZXN1bHQgaW4gYSAnYmVmb3JlbG9hZCcgZXZlbnQsIHdoaWNoIGNhbiBtYWtlIGFy
Yml0cmFyeSBET00gbXV0YXRpb25zLgogICAgIAogICAgIExPRyhNZWRpYSwgIkhUTUxNZWRpYUVs
ZW1lbnQ6OmxvYWQoKSIpOwogICAgIApAQCAtNDMwOCw3ICs0MzA5LDcgQEAgdm9pZCBIVE1MTWVk
aWFFbGVtZW50OjpzZXRNZWRpYVBsYXllclByb3h5KFdlYk1lZGlhUGxheWVyUHJveHkqIHByb3h5
KQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmdldFBsdWdpblByb3h5UGFyYW1zKEtVUkwmIHVy
bCwgVmVjdG9yPFN0cmluZz4mIG5hbWVzLCBWZWN0b3I8U3RyaW5nPiYgdmFsdWVzKQogewotICAg
IFJlZlB0cjxIVE1MTWVkaWFFbGVtZW50PiBwcm90ZWN0KHRoaXMpOyAvLyBzZWxlY3ROZXh0U291
cmNlQ2hpbGQgbWF5IGZpcmUgJ2JlZm9yZWxvYWQnLCB3aGljaCBjYW4gbWFrZSBhcmJpdHJhcnkg
RE9NIG11dGF0aW9ucy4KKyAgICBSZWY8SFRNTE1lZGlhRWxlbWVudD4gcHJvdGVjdCgqdGhpcyk7
IC8vIHNlbGVjdE5leHRTb3VyY2VDaGlsZCBtYXkgZmlyZSAnYmVmb3JlbG9hZCcsIHdoaWNoIGNh
biBtYWtlIGFyYml0cmFyeSBET00gbXV0YXRpb25zLgogCiAgICAgRnJhbWUqIGZyYW1lID0gZG9j
dW1lbnQoKS5mcmFtZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxP
YmplY3RFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQu
Y3BwCmluZGV4IDBlY2JlMmMuLmZhZGI2ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9i
amVjdEVsZW1lbnQuY3BwCkBAIC01Miw2ICs1Miw3IEBACiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIK
ICNpbmNsdWRlICJUZXh0LmgiCiAjaW5jbHVkZSAiV2lkZ2V0LmgiCisjaW5jbHVkZSA8d3RmL1Jl
Zi5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTMxMCw3ICszMTEsNyBAQCB2b2lkIEhU
TUxPYmplY3RFbGVtZW50Ojp1cGRhdGVXaWRnZXQoUGx1Z2luQ3JlYXRpb25PcHRpb24gcGx1Z2lu
Q3JlYXRpb25PcHRpb24pCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8SFRN
TE9iamVjdEVsZW1lbnQ+IHByb3RlY3QodGhpcyk7IC8vIGJlZm9yZWxvYWQgYW5kIHBsdWdpbiBs
b2FkaW5nIGNhbiBtYWtlIGFyYml0cmFyeSBET00gbXV0YXRpb25zLgorICAgIFJlZjxIVE1MT2Jq
ZWN0RWxlbWVudD4gcHJvdGVjdCgqdGhpcyk7IC8vIGJlZm9yZWxvYWQgYW5kIHBsdWdpbiBsb2Fk
aW5nIGNhbiBtYWtlIGFyYml0cmFyeSBET00gbXV0YXRpb25zLgogICAgIGJvb2wgYmVmb3JlTG9h
ZEFsbG93ZWRMb2FkID0gZ3VhcmRlZERpc3BhdGNoQmVmb3JlTG9hZEV2ZW50KHVybCk7CiAgICAg
aWYgKCFyZW5kZXJlcigpKSAvLyBEbyBub3QgbG9hZCB0aGUgcGx1Z2luIGlmIGJlZm9yZWxvYWQg
cmVtb3ZlZCB0aGlzIGVsZW1lbnQgb3IgaXRzIHJlbmRlcmVyLgogICAgICAgICByZXR1cm47CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwCmluZGV4IGNkZjQ3ZDUuLjVj
MzY5MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwCkBAIC00
Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAiU2NyaXB0RWxlbWVudC5oIgogI2luY2x1ZGUgIlN0eWxl
UmVzb2x2ZXIuaCIKICNpbmNsdWRlICJUZXh0LmgiCisjaW5jbHVkZSA8d3RmL1JlZi5oPgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+
CiAKQEAgLTEzMCw3ICsxMzEsNyBAQCBTdHJpbmcgSFRNTE9wdGlvbkVsZW1lbnQ6OnRleHQoKSBj
b25zdAogCiB2b2lkIEhUTUxPcHRpb25FbGVtZW50OjpzZXRUZXh0KGNvbnN0IFN0cmluZyAmdGV4
dCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgUmVmUHRyPE5vZGU+IHByb3RlY3RGcm9tTXV0
YXRpb25FdmVudHModGhpcyk7CisgICAgUmVmPE5vZGU+IHByb3RlY3RGcm9tTXV0YXRpb25FdmVu
dHMoKnRoaXMpOwogCiAgICAgLy8gQ2hhbmdpbmcgdGhlIHRleHQgY2F1c2VzIGEgcmVjYWxjIG9m
IGEgc2VsZWN0J3MgaXRlbXMsIHdoaWNoIHdpbGwgcmVzZXQgdGhlIHNlbGVjdGVkCiAgICAgLy8g
aW5kZXggdG8gdGhlIGZpcnN0IGl0ZW0gaWYgdGhlIHNlbGVjdCBpcyBzaW5nbGUgc2VsZWN0aW9u
IHdpdGggYSBtZW51IGxpc3QuIFdlIGF0dGVtcHQgdG8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
U2NyaXB0RWxlbWVudC5jcHAKaW5kZXggMTgyNjIwZC4uM2ZiNjZiZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJTY3JpcHRFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVk
ZSAiVGV4dC5oIgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC03OSw3ICs4MCw3IEBAIE5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgSFRN
TFNjcmlwdEVsZW1lbnQ6Omluc2VydGVkSW50byhDb250YWluZXJOb2RlCiAKIHZvaWQgSFRNTFNj
cmlwdEVsZW1lbnQ6OnNldFRleHQoY29uc3QgU3RyaW5nICZ2YWx1ZSkKIHsKLSAgICBSZWZQdHI8
Tm9kZT4gcHJvdGVjdEZyb21NdXRhdGlvbkV2ZW50cyh0aGlzKTsKKyAgICBSZWY8Tm9kZT4gcHJv
dGVjdEZyb21NdXRhdGlvbkV2ZW50cygqdGhpcyk7CiAKICAgICBpbnQgbnVtQ2hpbGRyZW4gPSBj
aGlsZE5vZGVDb3VudCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxU
YWJsZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVFbGVtZW50LmNw
cAppbmRleCBlZGJkZGQyLi4zNmZkNDc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxUYWJsZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxl
RWxlbWVudC5jcHAKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlICJIVE1MVGFibGVTZWN0aW9u
RWxlbWVudC5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlLmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9w
ZXJ0eVNldC5oIgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC0xODksNyArMTkwLDcgQEAgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gSFRNTFRhYmxlRWxl
bWVudDo6aW5zZXJ0Um93KGludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgfQogCi0gICAgUmVmUHRyPE5vZGU+IHByb3RlY3RGcm9tTXV0YXRpb25FdmVu
dHModGhpcyk7CisgICAgUmVmPE5vZGU+IHByb3RlY3RGcm9tTXV0YXRpb25FdmVudHMoKnRoaXMp
OwogCiAgICAgUmVmUHRyPEhUTUxUYWJsZVJvd0VsZW1lbnQ+IGxhc3RSb3cgPSAwOwogICAgIFJl
ZlB0cjxIVE1MVGFibGVSb3dFbGVtZW50PiByb3cgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFRleHRBcmVhRWxlbWVudC5jcHAKaW5kZXggNmEzYmE5NS4uY2Q0NzJkZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCkBAIC00OCw2ICs0OCw3IEBA
CiAjaW5jbHVkZSAiVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgiCiAjaW5jbHVkZSAiVGV4dEl0
ZXJhdG9yLmgiCiAjaW5jbHVkZSAiVGV4dE5vZGVUcmF2ZXJzYWwuaCIKKyNpbmNsdWRlIDx3dGYv
UmVmLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KIApAQCAtNDA2LDcgKzQwNyw3IEBAIFN0cmluZyBIVE1MVGV4dEFy
ZWFFbGVtZW50OjpkZWZhdWx0VmFsdWUoKSBjb25zdAogCiB2b2lkIEhUTUxUZXh0QXJlYUVsZW1l
bnQ6OnNldERlZmF1bHRWYWx1ZShjb25zdCBTdHJpbmcmIGRlZmF1bHRWYWx1ZSkKIHsKLSAgICBS
ZWZQdHI8Tm9kZT4gcHJvdGVjdEZyb21NdXRhdGlvbkV2ZW50cyh0aGlzKTsKKyAgICBSZWY8Tm9k
ZT4gcHJvdGVjdEZyb21NdXRhdGlvbkV2ZW50cygqdGhpcyk7CiAKICAgICAvLyBUbyBwcmVzZXJ2
ZSBjb21tZW50cywgcmVtb3ZlIG9ubHkgdGhlIHRleHQgbm9kZXMsIHRoZW4gYWRkIGEgc2luZ2xl
IHRleHQgbm9kZS4KICAgICBWZWN0b3I8UmVmUHRyPFRleHQ+PiB0ZXh0Tm9kZXM7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUaXRsZUVsZW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MVGl0bGVFbGVtZW50LmNwcAppbmRleCAyYzljZmQ0Li41NTEyZmU3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUaXRsZUVsZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRpdGxlRWxlbWVudC5jcHAKQEAgLTI5LDYgKzI5LDcg
QEAKICNpbmNsdWRlICJTdHlsZUluaGVyaXRlZERhdGEuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAj
aW5jbHVkZSAiVGV4dE5vZGVUcmF2ZXJzYWwuaCIKKyNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC05MCw3ICs5MSw3IEBAIFN0cmluZ1dpdGhEaXJlY3Rpb24gSFRNTFRpdGxlRWxlbWVudDo6dGV4
dFdpdGhEaXJlY3Rpb24oKQogCiB2b2lkIEhUTUxUaXRsZUVsZW1lbnQ6OnNldFRleHQoY29uc3Qg
U3RyaW5nICZ2YWx1ZSkKIHsKLSAgICBSZWZQdHI8Tm9kZT4gcHJvdGVjdEZyb21NdXRhdGlvbkV2
ZW50cyh0aGlzKTsKKyAgICBSZWY8Tm9kZT4gcHJvdGVjdEZyb21NdXRhdGlvbkV2ZW50cygqdGhp
cyk7CiAKICAgICBpbnQgbnVtQ2hpbGRyZW4gPSBjaGlsZE5vZGVDb3VudCgpOwogICAgIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHAKaW5k
ZXggZDNjOWRjNC4uYjBlMDhkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSAiTmVz
dGluZ0xldmVsSW5jcmVtZW50ZXIuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUg
PHd0Zi9GdW5jdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1JlZi5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKQEAgLTE4MSw3ICsxODIsNyBAQCB2b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6cHJl
cGFyZVRvU3RvcFBhcnNpbmcoKQogCiAgICAgLy8gcHVtcFRva2VuaXplciBjYW4gY2F1c2UgdGhp
cyBwYXJzZXIgdG8gYmUgZGV0YWNoZWQgZnJvbSB0aGUgRG9jdW1lbnQsCiAgICAgLy8gYnV0IHdl
IG5lZWQgdG8gZW5zdXJlIGl0IGlzbid0IGRlbGV0ZWQgeWV0LgotICAgIFJlZlB0cjxIVE1MRG9j
dW1lbnRQYXJzZXI+IHByb3RlY3QodGhpcyk7CisgICAgUmVmPEhUTUxEb2N1bWVudFBhcnNlcj4g
cHJvdGVjdCgqdGhpcyk7CiAKICAgICAvLyBOT1RFOiBUaGlzIHB1bXAgc2hvdWxkIG9ubHkgZXZl
ciBlbWl0IGJ1ZmZlcmVkIGNoYXJhY3RlciB0b2tlbnMsCiAgICAgLy8gc28gRm9yY2VTeW5jaHJv
bm91cyB2cy4gQWxsb3dZaWVsZCBzaG91bGQgYmUgbWVhbmluZ2xlc3MuCkBAIC0yNDUsNyArMjQ2
LDcgQEAgdm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6OnJlc3VtZVBhcnNpbmdBZnRlcllpZWxkKCkK
IHsKICAgICAvLyBwdW1wVG9rZW5pemVyIGNhbiBjYXVzZSB0aGlzIHBhcnNlciB0byBiZSBkZXRh
Y2hlZCBmcm9tIHRoZSBEb2N1bWVudCwKICAgICAvLyBidXQgd2UgbmVlZCB0byBlbnN1cmUgaXQg
aXNuJ3QgZGVsZXRlZCB5ZXQuCi0gICAgUmVmUHRyPEhUTUxEb2N1bWVudFBhcnNlcj4gcHJvdGVj
dCh0aGlzKTsKKyAgICBSZWY8SFRNTERvY3VtZW50UGFyc2VyPiBwcm90ZWN0KCp0aGlzKTsKIAog
I2lmIEVOQUJMRShUSFJFQURFRF9IVE1MX1BBUlNFUikKICAgICBpZiAobV9oYXZlQmFja2dyb3Vu
ZFBhcnNlcikgewpAQCAtMzIwLDcgKzMyMSw3IEBAIHZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjpk
aWRSZWNlaXZlUGFyc2VkQ2h1bmtGcm9tQmFja2dyb3VuZFBhcnNlcihQYXNzT3duUHRyPFBhCiAK
ICAgICAvLyBwcm9jZXNzUGFyc2VkQ2h1bmtGcm9tQmFja2dyb3VuZFBhcnNlciBjYW4gY2F1c2Ug
dGhpcyBwYXJzZXIgdG8gYmUgZGV0YWNoZWQgZnJvbSB0aGUgRG9jdW1lbnQsCiAgICAgLy8gYnV0
IHdlIG5lZWQgdG8gZW5zdXJlIGl0IGlzbid0IGRlbGV0ZWQgeWV0LgotICAgIFJlZlB0cjxIVE1M
RG9jdW1lbnRQYXJzZXI+IHByb3RlY3QodGhpcyk7CisgICAgUmVmPEhUTUxEb2N1bWVudFBhcnNl
cj4gcHJvdGVjdCgqdGhpcyk7CiAKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29raWUg
Y29va2llID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsV3JpdGVIVE1MKGRvY3VtZW50
KCksIGxpbmVOdW1iZXIoKS56ZXJvQmFzZWRJbnQoKSk7CiAKQEAgLTYyOSw3ICs2MzAsNyBAQCB2
b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6aW5zZXJ0KGNvbnN0IFNlZ21lbnRlZFN0cmluZyYgc291
cmNlKQogCiAgICAgLy8gcHVtcFRva2VuaXplciBjYW4gY2F1c2UgdGhpcyBwYXJzZXIgdG8gYmUg
ZGV0YWNoZWQgZnJvbSB0aGUgRG9jdW1lbnQsCiAgICAgLy8gYnV0IHdlIG5lZWQgdG8gZW5zdXJl
IGl0IGlzbid0IGRlbGV0ZWQgeWV0LgotICAgIFJlZlB0cjxIVE1MRG9jdW1lbnRQYXJzZXI+IHBy
b3RlY3QodGhpcyk7CisgICAgUmVmPEhUTUxEb2N1bWVudFBhcnNlcj4gcHJvdGVjdCgqdGhpcyk7
CiAKICNpZiBFTkFCTEUoVEhSRUFERURfSFRNTF9QQVJTRVIpCiAgICAgaWYgKCFtX3Rva2VuaXpl
cikgewpAQCAtNzIwLDcgKzcyMSw3IEBAIHZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjphcHBlbmQo
UGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBpbnB1dFNvdXJjZSkKIAogICAgIC8vIHB1bXBUb2tlbml6
ZXIgY2FuIGNhdXNlIHRoaXMgcGFyc2VyIHRvIGJlIGRldGFjaGVkIGZyb20gdGhlIERvY3VtZW50
LAogICAgIC8vIGJ1dCB3ZSBuZWVkIHRvIGVuc3VyZSBpdCBpc24ndCBkZWxldGVkIHlldC4KLSAg
ICBSZWZQdHI8SFRNTERvY3VtZW50UGFyc2VyPiBwcm90ZWN0KHRoaXMpOworICAgIFJlZjxIVE1M
RG9jdW1lbnRQYXJzZXI+IHByb3RlY3QoKnRoaXMpOwogICAgIFN0cmluZyBzb3VyY2UoaW5wdXRT
b3VyY2UpOwogCiAgICAgaWYgKG1fcHJlbG9hZFNjYW5uZXIpIHsKQEAgLTg5Myw3ICs4OTQsNyBA
QCB2b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6cmVzdW1lUGFyc2luZ0FmdGVyU2NyaXB0RXhlY3V0
aW9uKCkKICAgICAgICAgQVNTRVJUKCFtX2xhc3RDaHVua0JlZm9yZVNjcmlwdCk7CiAgICAgICAg
IC8vIHByb2Nlc3NQYXJzZWRDaHVua0Zyb21CYWNrZ3JvdW5kUGFyc2VyIGNhbiBjYXVzZSB0aGlz
IHBhcnNlciB0byBiZSBkZXRhY2hlZCBmcm9tIHRoZSBEb2N1bWVudCwKICAgICAgICAgLy8gYnV0
IHdlIG5lZWQgdG8gZW5zdXJlIGl0IGlzbid0IGRlbGV0ZWQgeWV0LgotICAgICAgICBSZWZQdHI8
SFRNTERvY3VtZW50UGFyc2VyPiBwcm90ZWN0KHRoaXMpOworICAgICAgICBSZWY8SFRNTERvY3Vt
ZW50UGFyc2VyPiBwcm90ZWN0KCp0aGlzKTsKICAgICAgICAgcHVtcFBlbmRpbmdTcGVjdWxhdGlv
bnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTkyOSw3ICs5MzAsNyBAQCB2b2lkIEhU
TUxEb2N1bWVudFBhcnNlcjo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJl
c291cmNlKQogewogICAgIC8vIHB1bXBUb2tlbml6ZXIgY2FuIGNhdXNlIHRoaXMgcGFyc2VyIHRv
IGJlIGRldGFjaGVkIGZyb20gdGhlIERvY3VtZW50LAogICAgIC8vIGJ1dCB3ZSBuZWVkIHRvIGVu
c3VyZSBpdCBpc24ndCBkZWxldGVkIHlldC4KLSAgICBSZWZQdHI8SFRNTERvY3VtZW50UGFyc2Vy
PiBwcm90ZWN0KHRoaXMpOworICAgIFJlZjxIVE1MRG9jdW1lbnRQYXJzZXI+IHByb3RlY3QoKnRo
aXMpOwogCiAgICAgQVNTRVJUKG1fc2NyaXB0UnVubmVyKTsKICAgICBBU1NFUlQoIWlzRXhlY3V0
aW5nU2NyaXB0KCkpOwpAQCAtOTU2LDcgKzk1Nyw3IEBAIHZvaWQgSFRNTERvY3VtZW50UGFyc2Vy
OjpleGVjdXRlU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0cygpCiAKICAgICAvLyBwdW1wVG9r
ZW5pemVyIGNhbiBjYXVzZSB0aGlzIHBhcnNlciB0byBiZSBkZXRhY2hlZCBmcm9tIHRoZSBEb2N1
bWVudCwKICAgICAvLyBidXQgd2UgbmVlZCB0byBlbnN1cmUgaXQgaXNuJ3QgZGVsZXRlZCB5ZXQu
Ci0gICAgUmVmUHRyPEhUTUxEb2N1bWVudFBhcnNlcj4gcHJvdGVjdCh0aGlzKTsKKyAgICBSZWY8
SFRNTERvY3VtZW50UGFyc2VyPiBwcm90ZWN0KCp0aGlzKTsKICAgICBtX3NjcmlwdFJ1bm5lci0+
ZXhlY3V0ZVNjcmlwdHNXYWl0aW5nRm9yU3R5bGVzaGVldHMoKTsKICAgICBpZiAoIWlzV2FpdGlu
Z0ZvclNjcmlwdHMoKSkKICAgICAgICAgcmVzdW1lUGFyc2luZ0FmdGVyU2NyaXB0RXhlY3V0aW9u
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9TcGluQnV0dG9uRWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9TcGluQnV0dG9uRWxlbWVudC5j
cHAKaW5kZXggZWI3NzcwMy4uZTMyODk3MzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvc2hhZG93L1NwaW5CdXR0b25FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9TcGluQnV0dG9uRWxlbWVudC5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRl
ICJSZW5kZXJCb3guaCIKICNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgogI2luY2x1ZGUgIldo
ZWVsRXZlbnQuaCIKKyNpbmNsdWRlIDx3dGYvUmVmLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApAQCAtOTcsNyArOTgsNyBAQCB2b2lkIFNwaW5CdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRI
YW5kbGVyKEV2ZW50KiBldmVudCkKICAgICAgICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgZnVuY3Rp
b25zIG9mIEhUTUxJbnB1dEVsZW1lbnQgbWF5IHJ1biBKYXZhU2NyaXB0CiAgICAgICAgICAgICAv
LyBjb2RlIHdoaWNoIGRldGFjaGVzIHRoaXMgc2hhZG93IG5vZGUuIFdlIG5lZWQgdG8gdGFrZSBh
IHJlZmVyZW5jZQogICAgICAgICAgICAgLy8gYW5kIGNoZWNrIHJlbmRlcmVyKCkgYWZ0ZXIgc3Vj
aCBmdW5jdGlvbiBjYWxscy4KLSAgICAgICAgICAgIFJlZlB0cjxOb2RlPiBwcm90ZWN0b3IodGhp
cyk7CisgICAgICAgICAgICBSZWY8U3BpbkJ1dHRvbkVsZW1lbnQ+IHByb3RlY3RvcigqdGhpcyk7
CiAgICAgICAgICAgICBpZiAobV9zcGluQnV0dG9uT3duZXIpCiAgICAgICAgICAgICAgICAgbV9z
cGluQnV0dG9uT3duZXItPmZvY3VzQW5kU2VsZWN0U3BpbkJ1dHRvbk93bmVyKCk7CiAgICAgICAg
ICAgICBpZiAocmVuZGVyZXIoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
c2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAKaW5kZXggYTVhNzg5ZS4uM2JhNzJi
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5l
ckVsZW1lbnRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJv
bElubmVyRWxlbWVudHMuY3BwCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAiU3BlZWNoSW5w
dXRFdmVudC5oIgogI2luY2x1ZGUgIlRleHRFdmVudC5oIgogI2luY2x1ZGUgIlRleHRFdmVudElu
cHV0VHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC0zMDgsNyArMzA5LDcgQEAgdm9pZCBJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudDo6
ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAgICAgICAgICAgICAgICAgbV9jYXB0
dXJpbmcgPSB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxJ
bnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudD4gaG9sZFJlZkJ1dHRvbih0aGlzKTsKKyAgICAg
ICAgUmVmPElucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50PiBwcm90ZWN0KCp0aGlzKTsKICAg
ICAgICAgaW5wdXQtPmZvY3VzKCk7CiAgICAgICAgIGlucHV0LT5zZWxlY3QoKTsKICAgICAgICAg
ZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CkBAIC0zODUsNyArMzg2LDcgQEAgdm9pZCBJbnB1
dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVudDo6c2V0UmVjb2duaXRpb25SZXN1bHQoaW50LCBjb25z
dCBTcGVlY2hJbnB1dFIKICAgICBpZiAoIWlucHV0IHx8IGlucHV0LT5pc0Rpc2FibGVkT3JSZWFk
T25seSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8SW5wdXRGaWVsZFNwZWVjaEJ1
dHRvbkVsZW1lbnQ+IGhvbGRSZWZCdXR0b24odGhpcyk7CisgICAgUmVmPElucHV0RmllbGRTcGVl
Y2hCdXR0b25FbGVtZW50PiBwcm90ZWN0KCp0aGlzKTsKICAgICBpZiAoZG9jdW1lbnQoKS5kb21X
aW5kb3coKSkgewogICAgICAgICAvLyBDYWxsIHNlbGVjdGlvbkNoYW5nZWQsIGNhdXNpbmcgdGhl
IGVsZW1lbnQgdG8gY2FjaGUgdGhlIHNlbGVjdGlvbiwKICAgICAgICAgLy8gc28gdGhhdCB0aGUg
dGV4dCBldmVudCBpbnNlcnRzIHRoZSB0ZXh0IGluIHRoaXMgZWxlbWVudCBldmVuIGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAppbmRleCA0MGFi
NTg1Li4xN2YxNDQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ1NTQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
U1NBZ2VudC5jcHAKQEAgLTYxLDYgKzYxLDcgQEAKIAogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGlt
ZS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1JlZi5oPgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaD4KQEAgLTc0Nyw3ICs3NDgsNyBAQCB2
b2lkIEluc3BlY3RvckNTU0FnZW50OjpyZWdpb25MYXlvdXRVcGRhdGVkKFdlYktpdE5hbWVkRmxv
dyogbmFtZWRGbG93LCBpbnQgZG9jdQogICAgICAgICByZXR1cm47CiAKICAgICBFcnJvclN0cmlu
ZyBlcnJvclN0cmluZzsKLSAgICBSZWZQdHI8V2ViS2l0TmFtZWRGbG93PiBwcm90ZWN0b3IobmFt
ZWRGbG93KTsKKyAgICBSZWY8V2ViS2l0TmFtZWRGbG93PiBwcm90ZWN0b3IoKm5hbWVkRmxvdyk7
CiAKICAgICBtX2Zyb250ZW5kLT5yZWdpb25MYXlvdXRVcGRhdGVkKGJ1aWxkT2JqZWN0Rm9yTmFt
ZWRGbG93KCZlcnJvclN0cmluZywgbmFtZWRGbG93LCBkb2N1bWVudE5vZGVJZCkpOwogfQpAQCAt
NzY5LDcgKzc3MCw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnJlZ2lvbk92ZXJzZXRDaGFu
Z2VkKFdlYktpdE5hbWVkRmxvdyogbmFtZWRGbG93LCBpbnQgZG9jCiAgICAgICAgIHJldHVybjsK
ICAgICAKICAgICBFcnJvclN0cmluZyBlcnJvclN0cmluZzsKLSAgICBSZWZQdHI8V2ViS2l0TmFt
ZWRGbG93PiBwcm90ZWN0b3IobmFtZWRGbG93KTsKKyAgICBSZWY8V2ViS2l0TmFtZWRGbG93PiBw
cm90ZWN0b3IoKm5hbWVkRmxvdyk7CiAgICAgCiAgICAgbV9mcm9udGVuZC0+cmVnaW9uT3ZlcnNl
dENoYW5nZWQoYnVpbGRPYmplY3RGb3JOYW1lZEZsb3coJmVycm9yU3RyaW5nLCBuYW1lZEZsb3cs
IGRvY3VtZW50Tm9kZUlkKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
RG9jdW1lbnRMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50TG9hZGVy
LmNwcAppbmRleCA4ZGYyNWFlLi5hNmQ5YTFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvRG9jdW1lbnRMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1
bWVudExvYWRlci5jcHAKQEAgLTYyLDYgKzYyLDcgQEAKICNpbmNsdWRlICJTdWJyZXNvdXJjZUxv
YWRlci5oIgogI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKICNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3Rm
L3VuaWNvZGUvVW5pY29kZS5oPgpAQCAtMjQ5LDcgKzI1MCw3IEBAIHZvaWQgRG9jdW1lbnRMb2Fk
ZXI6Om1haW5SZWNlaXZlZEVycm9yKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQogdm9pZCBE
b2N1bWVudExvYWRlcjo6c3RvcExvYWRpbmcoKQogewogICAgIFJlZlB0cjxGcmFtZT4gcHJvdGVj
dEZyYW1lKG1fZnJhbWUpOwotICAgIFJlZlB0cjxEb2N1bWVudExvYWRlcj4gcHJvdGVjdExvYWRl
cih0aGlzKTsKKyAgICBSZWY8RG9jdW1lbnRMb2FkZXI+IHByb3RlY3RMb2FkZXIoKnRoaXMpOwog
CiAgICAgLy8gSW4gc29tZSByYXJlIGNhc2VzLCBjYWxsaW5nIEZyYW1lTG9hZGVyOjpzdG9wTG9h
ZGluZyBjb3VsZCBjYXVzZSBpc0xvYWRpbmcoKSB0byByZXR1cm4gZmFsc2UuCiAgICAgLy8gKFRo
aXMgY2FuIGhhcHBlbiB3aGVuIHRoZXJlJ3MgYSBzaW5nbGUgWE1MSHR0cFJlcXVlc3QgY3VycmVu
dGx5IGxvYWRpbmcgYW5kIHN0b3BMb2FkaW5nIGNhdXNlcyBpdApAQCAtMzYxLDcgKzM2Miw3IEBA
IHZvaWQgRG9jdW1lbnRMb2FkZXI6OmZpbmlzaGVkTG9hZGluZyhkb3VibGUgZmluaXNoVGltZSkK
ICAgICBBU1NFUlQoIW1fZnJhbWUtPnBhZ2UoKS0+ZGVmZXJzTG9hZGluZygpIHx8IEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbjo6aXNEZWJ1Z2dlclBhdXNlZChtX2ZyYW1lKSk7CiAjZW5kaWYKIAot
ICAgIFJlZlB0cjxEb2N1bWVudExvYWRlcj4gcHJvdGVjdCh0aGlzKTsKKyAgICBSZWY8RG9jdW1l
bnRMb2FkZXI+IHByb3RlY3QoKnRoaXMpOwogCiAgICAgaWYgKG1faWRlbnRpZmllckZvckxvYWRX
aXRob3V0UmVzb3VyY2VMb2FkZXIpIHsKICAgICAgICAgLy8gQSBkaWRGaW5pc2hMb2FkaW5nIGRl
bGVnYXRlIG1pZ2h0IHRyeSB0byBjYW5jZWwgdGhlIGxvYWQgKGRlc3BpdGUgaXQKQEAgLTU2MSw3
ICs1NjIsNyBAQCB2b2lkIERvY3VtZW50TG9hZGVyOjpjb250aW51ZUFmdGVyTmF2aWdhdGlvblBv
bGljeShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBib29sCiB2b2lkIERvY3VtZW50TG9hZGVyOjpy
ZXNwb25zZVJlY2VpdmVkKENhY2hlZFJlc291cmNlKiByZXNvdXJjZSwgY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYgcmVzcG9uc2UpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChyZXNvdXJjZSwgbV9tYWlu
UmVzb3VyY2UgPT0gcmVzb3VyY2UpOwotICAgIFJlZlB0cjxEb2N1bWVudExvYWRlcj4gcHJvdGVj
dCh0aGlzKTsKKyAgICBSZWY8RG9jdW1lbnRMb2FkZXI+IHByb3RlY3QoKnRoaXMpOwogICAgIGJv
b2wgd2lsbExvYWRGYWxsYmFjayA9IG1fYXBwbGljYXRpb25DYWNoZUhvc3QtPm1heWJlTG9hZEZh
bGxiYWNrRm9yTWFpblJlc3BvbnNlKHJlcXVlc3QoKSwgcmVzcG9uc2UpOwogCiAgICAgLy8gVGhl
IG1lbW9yeSBjYWNoZSBkb2Vzbid0IHVuZGVyc3RhbmQgdGhlIGFwcGxpY2F0aW9uIGNhY2hlIG9y
IGl0cyBjYWNoaW5nIHJ1bGVzLiBTbyBpZiBhIG1haW4gcmVzb3VyY2UgaXMgc2VydmVkCkBAIC03
MzEsNyArNzMyLDcgQEAgdm9pZCBEb2N1bWVudExvYWRlcjo6Y29tbWl0TG9hZChjb25zdCBjaGFy
KiBkYXRhLCBpbnQgbGVuZ3RoKQogICAgIC8vIEJvdGggdW5sb2FkaW5nIHRoZSBvbGQgcGFnZSBh
bmQgcGFyc2luZyB0aGUgbmV3IHBhZ2UgbWF5IGV4ZWN1dGUgSmF2YVNjcmlwdCB3aGljaCBkZXN0
cm95cyB0aGUgZGF0YXNvdXJjZQogICAgIC8vIGJ5IHN0YXJ0aW5nIGEgbmV3IGxvYWQsIHNvIHJl
dGFpbiB0ZW1wb3JhcmlseS4KICAgICBSZWZQdHI8RnJhbWU+IHByb3RlY3RGcmFtZShtX2ZyYW1l
KTsKLSAgICBSZWZQdHI8RG9jdW1lbnRMb2FkZXI+IHByb3RlY3RMb2FkZXIodGhpcyk7CisgICAg
UmVmPERvY3VtZW50TG9hZGVyPiBwcm90ZWN0TG9hZGVyKCp0aGlzKTsKIAogICAgIGNvbW1pdElm
UmVhZHkoKTsKICAgICBGcmFtZUxvYWRlciogZnJhbWVMb2FkZXIgPSBEb2N1bWVudExvYWRlcjo6
ZnJhbWVMb2FkZXIoKTsKQEAgLTkxNCw3ICs5MTUsNyBAQCB2b2lkIERvY3VtZW50TG9hZGVyOjpk
ZXRhY2hGcm9tRnJhbWUoKQogewogICAgIEFTU0VSVChtX2ZyYW1lKTsKICAgICBSZWZQdHI8RnJh
bWU+IHByb3RlY3RGcmFtZShtX2ZyYW1lKTsKLSAgICBSZWZQdHI8RG9jdW1lbnRMb2FkZXI+IHBy
b3RlY3RMb2FkZXIodGhpcyk7CisgICAgUmVmPERvY3VtZW50TG9hZGVyPiBwcm90ZWN0TG9hZGVy
KCp0aGlzKTsKIAogICAgIC8vIEl0IG5ldmVyIG1ha2VzIHNlbnNlIHRvIGhhdmUgYSBkb2N1bWVu
dCBsb2FkZXIgdGhhdCBpcyBkZXRhY2hlZCBmcm9tIGl0cwogICAgIC8vIGZyYW1lIGhhdmUgYW55
IGxvYWRzIGFjdGl2ZSwgc28gZ28gYWhlYWQgYW5kIGtpbGwgYWxsIHRoZSBsb2Fkcy4KQEAgLTE0
MTksNyArMTQyMCw3IEBAIHZvaWQgRG9jdW1lbnRMb2FkZXI6OnN0YXJ0TG9hZGluZ01haW5SZXNv
dXJjZSgpCiAKIHZvaWQgRG9jdW1lbnRMb2FkZXI6OmNhbmNlbE1haW5SZXNvdXJjZUxvYWQoY29u
c3QgUmVzb3VyY2VFcnJvciYgcmVzb3VyY2VFcnJvcikKIHsKLSAgICBSZWZQdHI8RG9jdW1lbnRM
b2FkZXI+IHByb3RlY3QodGhpcyk7CisgICAgUmVmPERvY3VtZW50TG9hZGVyPiBwcm90ZWN0KCp0
aGlzKTsKICAgICBSZXNvdXJjZUVycm9yIGVycm9yID0gcmVzb3VyY2VFcnJvci5pc051bGwoKSA/
IGZyYW1lTG9hZGVyKCktPmNhbmNlbGxlZEVycm9yKG1fcmVxdWVzdCkgOiByZXNvdXJjZUVycm9y
OwogCiAgICAgbV9kYXRhTG9hZFRpbWVyLnN0b3AoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAKaW5kZXggYzkyNDg1My4uM2ZlNTZm
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxv
YWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxv
YWRlci5jcHAKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJTdWJyZXNvdXJjZUxvYWRlci5o
IgogI2luY2x1ZGUgIlRocmVhZGFibGVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1Ip
CiAjaW5jbHVkZSAiUHJvZ3Jlc3NUcmFja2VyLmgiCkBAIC0xNDQsNyArMTQ1LDcgQEAgRG9jdW1l
bnRUaHJlYWRhYmxlTG9hZGVyOjp+RG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyKCkKIAogdm9pZCBE
b2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmNhbmNlbCgpCiB7Ci0gICAgUmVmUHRyPERvY3VtZW50
VGhyZWFkYWJsZUxvYWRlcj4gcHJvdGVjdCh0aGlzKTsKKyAgICBSZWY8RG9jdW1lbnRUaHJlYWRh
YmxlTG9hZGVyPiBwcm90ZWN0KCp0aGlzKTsKIAogICAgIC8vIENhbmNlbCBjYW4gcmUtZW50ZXIg
YW5kIG1fcmVzb3VyY2UgbWlnaHQgYmUgbnVsbCBoZXJlIGFzIGEgcmVzdWx0LgogICAgIGlmICht
X2NsaWVudCAmJiBtX3Jlc291cmNlKSB7CkBAIC0xODAsNyArMTgxLDcgQEAgdm9pZCBEb2N1bWVu
dFRocmVhZGFibGVMb2FkZXI6OnJlZGlyZWN0UmVjZWl2ZWQoQ2FjaGVkUmVzb3VyY2UqIHJlc291
cmNlLCBSZXNvdXIKICAgICBBU1NFUlQobV9jbGllbnQpOwogICAgIEFTU0VSVF9VTlVTRUQocmVz
b3VyY2UsIHJlc291cmNlID09IG1fcmVzb3VyY2UpOwogCi0gICAgUmVmUHRyPERvY3VtZW50VGhy
ZWFkYWJsZUxvYWRlcj4gcHJvdGVjdCh0aGlzKTsKKyAgICBSZWY8RG9jdW1lbnRUaHJlYWRhYmxl
TG9hZGVyPiBwcm90ZWN0KCp0aGlzKTsKICAgICAvLyBBbGxvdyBzYW1lIG9yaWdpbiByZXF1ZXN0
cyB0byBjb250aW51ZSBhZnRlciBhbGxvd2luZyBjbGllbnRzIHRvIGF1ZGl0IHRoZSByZWRpcmVj
dC4KICAgICBpZiAoaXNBbGxvd2VkUmVkaXJlY3QocmVxdWVzdC51cmwoKSkpIHsKICAgICAgICAg
aWYgKG1fY2xpZW50LT5pc0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlckNsaWVudCgpKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50V3JpdGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9Eb2N1bWVudFdyaXRlci5jcHAKaW5kZXggNDYzMWM3OC4uNzFlNDk4MyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50V3JpdGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRXcml0ZXIuY3BwCkBAIC00Niw2ICs0Niw3
IEBACiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTaW5rRG9jdW1lbnQuaCIKICNp
bmNsdWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCisjaW5jbHVkZSA8d3RmL1JlZi5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTIzMyw3ICsyMzQsNyBAQCB2b2lkIERvY3VtZW50V3Jp
dGVyOjplbmQoKQogICAgIC8vIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEwODU0CiAgICAgLy8gVGhlIGZyYW1lJ3MgbGFzdCByZWYgbWF5IGJlIHJlbW92ZWQgYW5kIGl0
IGNhbiBiZSBkZWxldGVkIGJ5IGNoZWNrQ29tcGxldGVkKCksIAogICAgIC8vIHNvIHdlJ2xsIGFk
ZCBhIHByb3RlY3RpdmUgcmVmY291bnQKLSAgICBSZWZQdHI8RnJhbWU+IHByb3RlY3RvcihtX2Zy
YW1lKTsKKyAgICBSZWY8RnJhbWU+IHByb3RlY3RvcigqbV9mcmFtZSk7CiAKICAgICBpZiAoIW1f
cGFyc2VyKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvRnJhbWVMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNw
cAppbmRleCAzNmQ4OGQ0Li5hZTA1MGJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvRnJhbWVMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRl
ci5jcHAKQEAgLTEwOCw2ICsxMDgsNyBAQAogI2luY2x1ZGUgIldpbmRvd0ZlYXR1cmVzLmgiCiAj
aW5jbHVkZSAiWE1MRG9jdW1lbnRQYXJzZXIuaCIKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KQEAgLTMwMyw3ICszMDQsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjp1cmxTZWxlY3RlZChj
b25zdCBGcmFtZUxvYWRSZXF1ZXN0JiBwYXNzZWRSZXF1ZXN0LCBQYXNzUmVmUHRyPAogewogICAg
IEFTU0VSVCghbV9zdXBwcmVzc09wZW5lckluTmV3RnJhbWUpOwogCi0gICAgUmVmUHRyPEZyYW1l
PiBwcm90ZWN0KCZtX2ZyYW1lKTsKKyAgICBSZWY8RnJhbWU+IHByb3RlY3QobV9mcmFtZSk7CiAg
ICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZVJlcXVlc3QocGFzc2VkUmVxdWVzdCk7CiAKICAgICBp
ZiAobV9mcmFtZS5zY3JpcHQoKS5leGVjdXRlSWZKYXZhU2NyaXB0VVJMKGZyYW1lUmVxdWVzdC5y
ZXNvdXJjZVJlcXVlc3QoKS51cmwoKSwgc2hvdWxkUmVwbGFjZURvY3VtZW50SWZKYXZhU2NyaXB0
VVJMKSkKQEAgLTQ3Niw3ICs0NzcsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpzdG9wKCkKIHsKICAg
ICAvLyBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDg1NAogICAgIC8v
IFRoZSBmcmFtZSdzIGxhc3QgcmVmIG1heSBiZSByZW1vdmVkIGFuZCBpdCB3aWxsIGJlIGRlbGV0
ZWQgYnkgY2hlY2tDb21wbGV0ZWQoKS4KLSAgICBSZWZQdHI8RnJhbWU+IHByb3RlY3RvcigmbV9m
cmFtZSk7CisgICAgUmVmPEZyYW1lPiBwcm90ZWN0KG1fZnJhbWUpOwogCiAgICAgaWYgKERvY3Vt
ZW50UGFyc2VyKiBwYXJzZXIgPSBtX2ZyYW1lLmRvY3VtZW50KCktPnBhcnNlcigpKSB7CiAgICAg
ICAgIHBhcnNlci0+c3RvcFBhcnNpbmcoKTsKQEAgLTc1Nyw3ICs3NTgsNyBAQCBib29sIEZyYW1l
TG9hZGVyOjphbGxBbmNlc3RvcnNBcmVDb21wbGV0ZSgpIGNvbnN0CiAKIHZvaWQgRnJhbWVMb2Fk
ZXI6OmNoZWNrQ29tcGxldGVkKCkKIHsKLSAgICBSZWZQdHI8RnJhbWU+IHByb3RlY3QoJm1fZnJh
bWUpOworICAgIFJlZjxGcmFtZT4gcHJvdGVjdChtX2ZyYW1lKTsKICAgICBtX3Nob3VsZENhbGxD
aGVja0NvbXBsZXRlZCA9IGZhbHNlOwogCiAgICAgaWYgKG1fZnJhbWUudmlldygpKQpAQCAtODAy
LDcgKzgwMyw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNoZWNrQ29tcGxldGVkKCkKIAogdm9pZCBG
cmFtZUxvYWRlcjo6Y2hlY2tUaW1lckZpcmVkKFRpbWVyPEZyYW1lTG9hZGVyPiopCiB7Ci0gICAg
UmVmUHRyPEZyYW1lPiBwcm90ZWN0KCZtX2ZyYW1lKTsKKyAgICBSZWY8RnJhbWU+IHByb3RlY3Qo
bV9mcmFtZSk7CiAKICAgICBpZiAoUGFnZSogcGFnZSA9IG1fZnJhbWUucGFnZSgpKSB7CiAgICAg
ICAgIGlmIChwYWdlLT5kZWZlcnNMb2FkaW5nKCkpCkBAIC0xMDg5LDcgKzEwOTAsNyBAQCBib29s
IEZyYW1lTG9hZGVyOjppc0NvbXBsZXRlKCkgY29uc3QKIAogdm9pZCBGcmFtZUxvYWRlcjo6Y29t
cGxldGVkKCkKIHsKLSAgICBSZWZQdHI8RnJhbWU+IHByb3RlY3QoJm1fZnJhbWUpOworICAgIFJl
ZjxGcmFtZT4gcHJvdGVjdChtX2ZyYW1lKTsKIAogICAgIGZvciAoRnJhbWUqIGRlc2NlbmRhbnQg
PSBtX2ZyYW1lLnRyZWUoKS50cmF2ZXJzZU5leHQoJm1fZnJhbWUpOyBkZXNjZW5kYW50OyBkZXNj
ZW5kYW50ID0gZGVzY2VuZGFudC0+dHJlZSgpLnRyYXZlcnNlTmV4dCgmbV9mcmFtZSkpCiAgICAg
ICAgIGRlc2NlbmRhbnQtPm5hdmlnYXRpb25TY2hlZHVsZXIoKS5zdGFydFRpbWVyKCk7CkBAIC0x
MTU0LDcgKzExNTUsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpsb2FkRnJhbWVSZXF1ZXN0KGNvbnN0
IEZyYW1lTG9hZFJlcXVlc3QmIHJlcXVlc3QsIGJvb2wgbG9ja0hpcwogICAgIFBhc3NSZWZQdHI8
RXZlbnQ+IGV2ZW50LCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4gZm9ybVN0YXRlLCBTaG91bGRTZW5k
UmVmZXJyZXIgc2hvdWxkU2VuZFJlZmVycmVyKQogeyAgICAKICAgICAvLyBQcm90ZWN0IGZyYW1l
IGZyb20gZ2V0dGluZyBibG93biBhd2F5IGluc2lkZSBkaXNwYXRjaEJlZm9yZUxvYWRFdmVudCBp
biBsb2FkV2l0aERvY3VtZW50TG9hZGVyLgotICAgIFJlZlB0cjxGcmFtZT4gcHJvdGVjdCgmbV9m
cmFtZSk7CisgICAgUmVmPEZyYW1lPiBwcm90ZWN0KG1fZnJhbWUpOwogCiAgICAgS1VSTCB1cmwg
PSByZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLnVybCgpOwogCkBAIC0xMzY1LDcgKzEzNjYsNyBA
QCB2b2lkIEZyYW1lTG9hZGVyOjpsb2FkKERvY3VtZW50TG9hZGVyKiBuZXdEb2N1bWVudExvYWRl
cikKIHZvaWQgRnJhbWVMb2FkZXI6OmxvYWRXaXRoRG9jdW1lbnRMb2FkZXIoRG9jdW1lbnRMb2Fk
ZXIqIGxvYWRlciwgRnJhbWVMb2FkVHlwZSB0eXBlLCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4gcHJw
Rm9ybVN0YXRlKQogewogICAgIC8vIFJldGFpbiBiZWNhdXNlIGRpc3BhdGNoQmVmb3JlTG9hZEV2
ZW50IG1heSByZWxlYXNlIHRoZSBsYXN0IHJlZmVyZW5jZSB0byBpdC4KLSAgICBSZWZQdHI8RnJh
bWU+IHByb3RlY3QoJm1fZnJhbWUpOworICAgIFJlZjxGcmFtZT4gcHJvdGVjdChtX2ZyYW1lKTsK
IAogICAgIEFTU0VSVChtX2NsaWVudC5oYXNXZWJWaWV3KCkpOwogCkBAIC0xNTYyLDcgKzE1NjMs
NyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpzdG9wQWxsTG9hZGVycyhDbGVhclByb3Zpc2lvbmFsSXRl
bVBvbGljeSBjbGVhclByb3Zpc2lvbmFsSXRlbQogICAgIAogICAgIC8vIENhbGxpbmcgc3RvcExv
YWRpbmcoKSBvbiB0aGUgcHJvdmlzaW9uYWwgZG9jdW1lbnQgbG9hZGVyIGNhbiBibG93IGF3YXkK
ICAgICAvLyB0aGUgZnJhbWUgZnJvbSB1bmRlcm5lYXRoLgotICAgIFJlZlB0cjxGcmFtZT4gcHJv
dGVjdCgmbV9mcmFtZSk7CisgICAgUmVmPEZyYW1lPiBwcm90ZWN0KG1fZnJhbWUpOwogCiAgICAg
bV9pblN0b3BBbGxMb2FkZXJzID0gdHJ1ZTsKIApAQCAtMTcwMCw3ICsxNzAxLDcgQEAgdm9pZCBG
cmFtZUxvYWRlcjo6Y29tbWl0UHJvdmlzaW9uYWxMb2FkKCkKIHsKICAgICBSZWZQdHI8Q2FjaGVk
UGFnZT4gY2FjaGVkUGFnZSA9IG1fbG9hZGluZ0Zyb21DYWNoZWRQYWdlID8gcGFnZUNhY2hlKCkt
PmdldChoaXN0b3J5KCkucHJvdmlzaW9uYWxJdGVtKCkpIDogMDsKICAgICBSZWZQdHI8RG9jdW1l
bnRMb2FkZXI+IHBkbCA9IG1fcHJvdmlzaW9uYWxEb2N1bWVudExvYWRlcjsKLSAgICBSZWZQdHI8
RnJhbWU+IHByb3RlY3QoJm1fZnJhbWUpOworICAgIFJlZjxGcmFtZT4gcHJvdGVjdChtX2ZyYW1l
KTsKIAogICAgIExPRyhQYWdlQ2FjaGUsICJXZWJDb3JlTG9hZGluZyAlczogQWJvdXQgdG8gY29t
bWl0IHByb3Zpc2lvbmFsIGxvYWQgZnJvbSBwcmV2aW91cyBVUkwgJyVzJyB0byBuZXcgVVJMICcl
cyciLCBtX2ZyYW1lLnRyZWUoKS51bmlxdWVOYW1lKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwK
ICAgICAgICAgbV9mcmFtZS5kb2N1bWVudCgpID8gbV9mcmFtZS5kb2N1bWVudCgpLT51cmwoKS5z
dHJpbmdDZW50ZXJFbGxpcHNpemVkVG9MZW5ndGgoKS51dGY4KCkuZGF0YSgpIDogIiIsCkBAIC0y
NjE0LDcgKzI2MTUsNyBAQCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIEZyYW1lTG9hZGVyOjpvcmln
aW5hbFJlcXVlc3QoKSBjb25zdAogdm9pZCBGcmFtZUxvYWRlcjo6cmVjZWl2ZWRNYWluUmVzb3Vy
Y2VFcnJvcihjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKIHsKICAgICAvLyBSZXRhaW4gYmVj
YXVzZSB0aGUgc3RvcCBtYXkgcmVsZWFzZSB0aGUgbGFzdCByZWZlcmVuY2UgdG8gaXQuCi0gICAg
UmVmUHRyPEZyYW1lPiBwcm90ZWN0KCZtX2ZyYW1lKTsKKyAgICBSZWY8RnJhbWU+IHByb3RlY3Qo
bV9mcmFtZSk7CiAKICAgICBSZWZQdHI8RG9jdW1lbnRMb2FkZXI+IGxvYWRlciA9IGFjdGl2ZURv
Y3VtZW50TG9hZGVyKCk7CiAgICAgLy8gRklYTUU6IERvbid0IHdhbnQgdG8gZG8gdGhpcyBpZiBh
biBlbnRpcmVseSBuZXcgbG9hZCBpcyBnb2luZywgc28gc2hvdWxkIGNoZWNrCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvTmF2aWdhdGlvblNjaGVkdWxlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvTmF2aWdhdGlvblNjaGVkdWxlci5jcHAKaW5kZXggY2UyZmNhMS4uODA4
NzdjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL05hdmlnYXRpb25TY2hlZHVs
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9OYXZpZ2F0aW9uU2NoZWR1bGVyLmNw
cApAQCAtNTAsNiArNTAsNyBAQAogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKICNpbmNs
dWRlICJVc2VyR2VzdHVyZUluZGljYXRvci5oIgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5o
PgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MjAs
NyArNDIxLDcgQEAgdm9pZCBOYXZpZ2F0aW9uU2NoZWR1bGVyOjp0aW1lckZpcmVkKFRpbWVyPE5h
dmlnYXRpb25TY2hlZHVsZXI+KikKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0
cjxGcmFtZT4gcHJvdGVjdChtX2ZyYW1lKTsKKyAgICBSZWY8RnJhbWU+IHByb3RlY3QoKm1fZnJh
bWUpOwogCiAgICAgT3duUHRyPFNjaGVkdWxlZE5hdmlnYXRpb24+IHJlZGlyZWN0KG1fcmVkaXJl
Y3QucmVsZWFzZSgpKTsKICAgICByZWRpcmVjdC0+ZmlyZShtX2ZyYW1lKTsKQEAgLTQzMSw3ICs0
MzIsNyBAQCB2b2lkIE5hdmlnYXRpb25TY2hlZHVsZXI6OnNjaGVkdWxlKFBhc3NPd25QdHI8U2No
ZWR1bGVkTmF2aWdhdGlvbj4gcmVkaXJlY3QpCiB7CiAgICAgQVNTRVJUKG1fZnJhbWUtPnBhZ2Uo
KSk7CiAKLSAgICBSZWZQdHI8RnJhbWU+IHByb3RlY3QobV9mcmFtZSk7CisgICAgUmVmPEZyYW1l
PiBwcm90ZWN0KCptX2ZyYW1lKTsKIAogICAgIC8vIElmIGEgcmVkaXJlY3Qgd2FzIHNjaGVkdWxl
ZCBkdXJpbmcgYSBsb2FkLCB0aGVuIHN0b3AgdGhlIGN1cnJlbnQgbG9hZC4KICAgICAvLyBPdGhl
cndpc2Ugd2hlbiB0aGUgY3VycmVudCBsb2FkIHRyYW5zaXRpb25zIGZyb20gYSBwcm92aXNpb25h
bCB0byBhIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL05ldHNjYXBlUGx1Z0lu
U3RyZWFtTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9OZXRzY2FwZVBsdWdJblN0
cmVhbUxvYWRlci5jcHAKaW5kZXggOTUyNWJhZS4uN2E3Y2YzNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvbG9hZGVyL05ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvTmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXIuY3BwCkBAIC0zMiw2
ICszMiw3IEBACiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZUxv
YWRlci5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCisjaW5jbHVkZSA8d3RmL1Jl
Zi5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTY4LDcgKzY5LDcgQEAgdm9pZCBOZXRz
Y2FwZVBsdWdJblN0cmVhbUxvYWRlcjo6cmVsZWFzZVJlc291cmNlcygpCiAKIHZvaWQgTmV0c2Nh
cGVQbHVnSW5TdHJlYW1Mb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJiByZXNwb25zZSkKIHsKLSAgICBSZWZQdHI8TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2Fk
ZXI+IHByb3RlY3QodGhpcyk7CisgICAgUmVmPE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyPiBw
cm90ZWN0KCp0aGlzKTsKIAogICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UodGhpcywg
cmVzcG9uc2UpOwogCkBAIC0xMDUsNyArMTA2LDcgQEAgdm9pZCBOZXRzY2FwZVBsdWdJblN0cmVh
bUxvYWRlcjo6ZGlkUmVjZWl2ZUJ1ZmZlcihQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmUK
IAogdm9pZCBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcjo6ZGlkUmVjZWl2ZURhdGFPckJ1ZmZl
cihjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4g
YnVmZmVyLCBsb25nIGxvbmcgZW5jb2RlZERhdGFMZW5ndGgsIERhdGFQYXlsb2FkVHlwZSBkYXRh
UGF5bG9hZFR5cGUpCiB7Ci0gICAgUmVmUHRyPE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyPiBw
cm90ZWN0KHRoaXMpOworICAgIFJlZjxOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcj4gcHJvdGVj
dCgqdGhpcyk7CiAgICAgCiAgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVEYXRhKHRoaXMsIGJ1ZmZl
ciA/IGJ1ZmZlci0+ZGF0YSgpIDogZGF0YSwgYnVmZmVyID8gYnVmZmVyLT5zaXplKCkgOiBsZW5n
dGgpOwogCkBAIC0xMTQsNyArMTE1LDcgQEAgdm9pZCBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRl
cjo6ZGlkUmVjZWl2ZURhdGFPckJ1ZmZlcihjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGUKIAogdm9p
ZCBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyhkb3VibGUgZmlu
aXNoVGltZSkKIHsKLSAgICBSZWZQdHI8TmV0c2NhcGVQbHVnSW5TdHJlYW1Mb2FkZXI+IHByb3Rl
Y3QodGhpcyk7CisgICAgUmVmPE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyPiBwcm90ZWN0KCp0
aGlzKTsKIAogICAgIG1fZG9jdW1lbnRMb2FkZXItPnJlbW92ZVBsdWdJblN0cmVhbUxvYWRlcih0
aGlzKTsKICAgICBtX2NsaWVudC0+ZGlkRmluaXNoTG9hZGluZyh0aGlzKTsKQEAgLTEyMyw3ICsx
MjQsNyBAQCB2b2lkIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5n
KGRvdWJsZSBmaW5pc2hUaW1lKQogCiB2b2lkIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyOjpk
aWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQogewotICAgIFJlZlB0cjxOZXRzY2Fw
ZVBsdWdJblN0cmVhbUxvYWRlcj4gcHJvdGVjdCh0aGlzKTsKKyAgICBSZWY8TmV0c2NhcGVQbHVn
SW5TdHJlYW1Mb2FkZXI+IHByb3RlY3QoKnRoaXMpOwogCiAgICAgbV9kb2N1bWVudExvYWRlci0+
cmVtb3ZlUGx1Z0luU3RyZWFtTG9hZGVyKHRoaXMpOwogICAgIG1fY2xpZW50LT5kaWRGYWlsKHRo
aXMsIGVycm9yKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxv
YWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwCmluZGV4
IDc5MTYzNzUuLmQ2ZjZiMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNv
dXJjZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVy
LmNwcApAQCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5j
bHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDx3
dGYvUmVmLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNzcsNyArNzgsNyBAQCB2b2lk
IFJlc291cmNlTG9hZGVyOjpyZWxlYXNlUmVzb3VyY2VzKCkKICAgICAvLyBkZWFsbG9jYXRlZCBh
bmQgcmVsZWFzZSB0aGUgbGFzdCByZWZlcmVuY2UgdG8gdGhpcyBvYmplY3QuCiAgICAgLy8gV2Ug
bmVlZCB0byByZXRhaW4gdG8gYXZvaWQgYWNjZXNzaW5nIHRoZSBvYmplY3QgYWZ0ZXIgaXQKICAg
ICAvLyBoYXMgYmVlbiBkZWFsbG9jYXRlZCBhbmQgYWxzbyB0byBhdm9pZCByZWVudGVyaW5nIHRo
aXMgbWV0aG9kLgotICAgIFJlZlB0cjxSZXNvdXJjZUxvYWRlcj4gcHJvdGVjdG9yKHRoaXMpOwor
ICAgIFJlZjxSZXNvdXJjZUxvYWRlcj4gcHJvdGVjdG9yKCp0aGlzKTsKIAogICAgIG1fZnJhbWUg
PSAwOwogICAgIG1fZG9jdW1lbnRMb2FkZXIgPSAwOwpAQCAtMjI0LDcgKzIyNSw3IEBAIHZvaWQg
UmVzb3VyY2VMb2FkZXI6OndpbGxTZW5kUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qs
IGNvbnN0IFJlc291cmNlUmVzCiB7CiAgICAgLy8gUHJvdGVjdCB0aGlzIGluIHRoaXMgZGVsZWdh
dGUgbWV0aG9kIHNpbmNlIHRoZSBhZGRpdGlvbmFsIHByb2Nlc3NpbmcgY2FuIGRvCiAgICAgLy8g
YW55dGhpbmcgaW5jbHVkaW5nIHBvc3NpYmx5IGRlcmVmaW5nIHRoaXM7IG9uZSBleGFtcGxlIG9m
IHRoaXMgaXMgUmFkYXIgMzI2NjIxNi4KLSAgICBSZWZQdHI8UmVzb3VyY2VMb2FkZXI+IHByb3Rl
Y3Rvcih0aGlzKTsKKyAgICBSZWY8UmVzb3VyY2VMb2FkZXI+IHByb3RlY3RvcigqdGhpcyk7CiAK
ICAgICBBU1NFUlQoIW1fcmVhY2hlZFRlcm1pbmFsU3RhdGUpOwogCkBAIC0yNjUsNyArMjY2LDcg
QEAgdm9pZCBSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmIHIpCiAKICAgICAvLyBQcm90ZWN0IHRoaXMgaW4gdGhpcyBkZWxlZ2F0ZSBtZXRo
b2Qgc2luY2UgdGhlIGFkZGl0aW9uYWwgcHJvY2Vzc2luZyBjYW4gZG8KICAgICAvLyBhbnl0aGlu
ZyBpbmNsdWRpbmcgcG9zc2libHkgZGVyZWZpbmcgdGhpczsgb25lIGV4YW1wbGUgb2YgdGhpcyBp
cyBSYWRhciAzMjY2MjE2LgotICAgIFJlZlB0cjxSZXNvdXJjZUxvYWRlcj4gcHJvdGVjdG9yKHRo
aXMpOworICAgIFJlZjxSZXNvdXJjZUxvYWRlcj4gcHJvdGVjdG9yKCp0aGlzKTsKIAogICAgIG1f
cmVzcG9uc2UgPSByOwogCkBAIC0yOTksNyArMzAwLDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRlcjo6
ZGlkUmVjZWl2ZURhdGFPckJ1ZmZlcihjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoLCBQYXNz
UmUKIAogICAgIC8vIFByb3RlY3QgdGhpcyBpbiB0aGlzIGRlbGVnYXRlIG1ldGhvZCBzaW5jZSB0
aGUgYWRkaXRpb25hbCBwcm9jZXNzaW5nIGNhbiBkbwogICAgIC8vIGFueXRoaW5nIGluY2x1ZGlu
ZyBwb3NzaWJseSBkZXJlZmluZyB0aGlzOyBvbmUgZXhhbXBsZSBvZiB0aGlzIGlzIFJhZGFyIDMy
NjYyMTYuCi0gICAgUmVmUHRyPFJlc291cmNlTG9hZGVyPiBwcm90ZWN0b3IodGhpcyk7CisgICAg
UmVmPFJlc291cmNlTG9hZGVyPiBwcm90ZWN0b3IoKnRoaXMpOwogICAgIFJlZlB0cjxTaGFyZWRC
dWZmZXI+IGJ1ZmZlciA9IHBycEJ1ZmZlcjsKIAogICAgIGFkZERhdGFPckJ1ZmZlcihkYXRhLCBs
ZW5ndGgsIGJ1ZmZlci5nZXQoKSwgZGF0YVBheWxvYWRUeXBlKTsKQEAgLTM1NCw3ICszNTUsNyBA
QCB2b2lkIFJlc291cmNlTG9hZGVyOjpkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9y
KQogCiAgICAgLy8gUHJvdGVjdCB0aGlzIGluIHRoaXMgZGVsZWdhdGUgbWV0aG9kIHNpbmNlIHRo
ZSBhZGRpdGlvbmFsIHByb2Nlc3NpbmcgY2FuIGRvCiAgICAgLy8gYW55dGhpbmcgaW5jbHVkaW5n
IHBvc3NpYmx5IGRlcmVmaW5nIHRoaXM7IG9uZSBleGFtcGxlIG9mIHRoaXMgaXMgUmFkYXIgMzI2
NjIxNi4KLSAgICBSZWZQdHI8UmVzb3VyY2VMb2FkZXI+IHByb3RlY3Rvcih0aGlzKTsKKyAgICBS
ZWY8UmVzb3VyY2VMb2FkZXI+IHByb3RlY3RvcigqdGhpcyk7CiAKICAgICBjbGVhbnVwRm9yRXJy
b3IoZXJyb3IpOwogICAgIHJlbGVhc2VSZXNvdXJjZXMoKTsKQEAgLTM5NSw3ICszOTYsNyBAQCB2
b2lkIFJlc291cmNlTG9hZGVyOjpjYW5jZWwoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCiAg
ICAgCiAgICAgLy8gd2lsbENhbmNlbCgpIGFuZCBkaWRGYWlsVG9Mb2FkKCkgYm90aCBjYWxsIG91
dCB0byBjbGllbnRzIHRoYXQgbWlnaHQgZG8gCiAgICAgLy8gc29tZXRoaW5nIGNhdXNpbmcgdGhl
IGxhc3QgcmVmZXJlbmNlIHRvIHRoaXMgb2JqZWN0IHRvIGdvIGF3YXkuCi0gICAgUmVmUHRyPFJl
c291cmNlTG9hZGVyPiBwcm90ZWN0b3IodGhpcyk7CisgICAgUmVmPFJlc291cmNlTG9hZGVyPiBw
cm90ZWN0b3IoKnRoaXMpOwogICAgIAogICAgIC8vIElmIHdlIHJlLWVudGVyIGNhbmNlbCgpIGZy
b20gaW5zaWRlIHdpbGxDYW5jZWwoKSwgd2Ugd2FudCB0byBwaWNrIHVwIGZyb20gd2hlcmUgd2Ug
bGVmdCAKICAgICAvLyBvZmYgd2l0aG91dCByZS1ydW5uaW5nIHdpbGxDYW5jZWwoKQpAQCAtNTEw
LDcgKzUxMSw3IEBAIGJvb2wgUmVzb3VyY2VMb2FkZXI6OnNob3VsZFVzZUNyZWRlbnRpYWxTdG9y
YWdlKCkKICAgICBpZiAobV9vcHRpb25zLmFsbG93Q3JlZGVudGlhbHMgPT0gRG9Ob3RBbGxvd1N0
b3JlZENyZWRlbnRpYWxzKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgUmVmUHRy
PFJlc291cmNlTG9hZGVyPiBwcm90ZWN0b3IodGhpcyk7CisgICAgUmVmPFJlc291cmNlTG9hZGVy
PiBwcm90ZWN0b3IoKnRoaXMpOwogICAgIHJldHVybiBmcmFtZUxvYWRlcigpLT5jbGllbnQoKS5z
aG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZShkb2N1bWVudExvYWRlcigpLCBpZGVudGlmaWVyKCkp
OwogfQogCkBAIC01MjAsNyArNTIxLDcgQEAgdm9pZCBSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2
ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGwKIAogICAg
IC8vIFByb3RlY3QgdGhpcyBpbiB0aGlzIGRlbGVnYXRlIG1ldGhvZCBzaW5jZSB0aGUgYWRkaXRp
b25hbCBwcm9jZXNzaW5nIGNhbiBkbwogICAgIC8vIGFueXRoaW5nIGluY2x1ZGluZyBwb3NzaWJs
eSBkZXJlZmluZyB0aGlzOyBvbmUgZXhhbXBsZSBvZiB0aGlzIGlzIFJhZGFyIDMyNjYyMTYuCi0g
ICAgUmVmUHRyPFJlc291cmNlTG9hZGVyPiBwcm90ZWN0b3IodGhpcyk7CisgICAgUmVmPFJlc291
cmNlTG9hZGVyPiBwcm90ZWN0b3IoKnRoaXMpOwogCiAgICAgaWYgKG1fb3B0aW9ucy5hbGxvd0Ny
ZWRlbnRpYWxzID09IEFsbG93U3RvcmVkQ3JlZGVudGlhbHMpIHsKICAgICAgICAgaWYgKG1fb3B0
aW9ucy5jbGllbnRDcmVkZW50aWFsUG9saWN5ID09IEFza0NsaWVudEZvckFsbENyZWRlbnRpYWxz
IHx8IChtX29wdGlvbnMuY2xpZW50Q3JlZGVudGlhbFBvbGljeSA9PSBEb05vdEFza0NsaWVudEZv
ckNyb3NzT3JpZ2luQ3JlZGVudGlhbHMgJiYgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlP
cmlnaW4oKS0+Y2FuUmVxdWVzdChvcmlnaW5hbFJlcXVlc3QoKS51cmwoKSkpKSB7CkBAIC01NDIs
MTQgKzU0MywxNCBAQCB2b2lkIFJlc291cmNlTG9hZGVyOjpkaWRDYW5jZWxBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZQogewogICAgIC8vIFByb3RlY3Qg
dGhpcyBpbiB0aGlzIGRlbGVnYXRlIG1ldGhvZCBzaW5jZSB0aGUgYWRkaXRpb25hbCBwcm9jZXNz
aW5nIGNhbiBkbwogICAgIC8vIGFueXRoaW5nIGluY2x1ZGluZyBwb3NzaWJseSBkZXJlZmluZyB0
aGlzOyBvbmUgZXhhbXBsZSBvZiB0aGlzIGlzIFJhZGFyIDMyNjYyMTYuCi0gICAgUmVmUHRyPFJl
c291cmNlTG9hZGVyPiBwcm90ZWN0b3IodGhpcyk7CisgICAgUmVmPFJlc291cmNlTG9hZGVyPiBw
cm90ZWN0b3IoKnRoaXMpOwogICAgIGZyYW1lTG9hZGVyKCktPm5vdGlmaWVyKCktPmRpZENhbmNl
bEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKHRoaXMsIGNoYWxsZW5nZSk7CiB9CiAKICNpZiBVU0Uo
UFJPVEVDVElPTl9TUEFDRV9BVVRIX0NBTExCQUNLKQogYm9vbCBSZXNvdXJjZUxvYWRlcjo6Y2Fu
QXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShjb25zdCBQcm90ZWN0aW9uU3BhY2Um
IHByb3RlY3Rpb25TcGFjZSkKIHsKLSAgICBSZWZQdHI8UmVzb3VyY2VMb2FkZXI+IHByb3RlY3Rv
cih0aGlzKTsKKyAgICBSZWY8UmVzb3VyY2VMb2FkZXI+IHByb3RlY3RvcigqdGhpcyk7CiAgICAg
cmV0dXJuIGZyYW1lTG9hZGVyKCktPmNsaWVudCgpLmNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90
ZWN0aW9uU3BhY2UoZG9jdW1lbnRMb2FkZXIoKSwgaWRlbnRpZmllcigpLCBwcm90ZWN0aW9uU3Bh
Y2UpOwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvU3VicmVz
b3VyY2VMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL1N1YnJlc291cmNlTG9hZGVy
LmNwcAppbmRleCBmYWZkNmUzLi5lMDc3YmZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvU3VicmVzb3VyY2VMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9T
dWJyZXNvdXJjZUxvYWRlci5jcHAKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJQYWdlLmgi
CiAjaW5jbHVkZSAiUGFnZUFjdGl2aXR5QXNzZXJ0aW9uVG9rZW4uaCIKICNpbmNsdWRlICJSZXNv
dXJjZUJ1ZmZlci5oIgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZExlYWtDb3VudGVyLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KQEAgLTEyMyw3ICsxMjQsNyBAQCB2b2lkIFN1YnJlc291
cmNlTG9hZGVyOjp3aWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiBuZXdSZXF1ZXN0LCBj
b25zdCBSZXNvdQogewogICAgIC8vIFN0b3JlIHRoZSBwcmV2aW91cyBVUkwgYmVjYXVzZSB0aGUg
Y2FsbCB0byBSZXNvdXJjZUxvYWRlcjo6d2lsbFNlbmRSZXF1ZXN0IHdpbGwgbW9kaWZ5IGl0Lgog
ICAgIEtVUkwgcHJldmlvdXNVUkwgPSByZXF1ZXN0KCkudXJsKCk7Ci0gICAgUmVmUHRyPFN1YnJl
c291cmNlTG9hZGVyPiBwcm90ZWN0KHRoaXMpOworICAgIFJlZjxTdWJyZXNvdXJjZUxvYWRlcj4g
cHJvdGVjdCgqdGhpcyk7CiAKICAgICBBU1NFUlQoIW5ld1JlcXVlc3QuaXNOdWxsKCkpOwogICAg
IGlmICghcmVkaXJlY3RSZXNwb25zZS5pc051bGwoKSkgewpAQCAtMTU4LDcgKzE1OSw3IEBAIHZv
aWQgU3VicmVzb3VyY2VMb2FkZXI6OndpbGxTZW5kUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmIG5l
d1JlcXVlc3QsIGNvbnN0IFJlc291CiB2b2lkIFN1YnJlc291cmNlTG9hZGVyOjpkaWRTZW5kRGF0
YSh1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxC
eXRlc1RvQmVTZW50KQogewogICAgIEFTU0VSVChtX3N0YXRlID09IEluaXRpYWxpemVkKTsKLSAg
ICBSZWZQdHI8U3VicmVzb3VyY2VMb2FkZXI+IHByb3RlY3QodGhpcyk7CisgICAgUmVmPFN1YnJl
c291cmNlTG9hZGVyPiBwcm90ZWN0KCp0aGlzKTsKICAgICBtX3Jlc291cmNlLT5kaWRTZW5kRGF0
YShieXRlc1NlbnQsIHRvdGFsQnl0ZXNUb0JlU2VudCk7CiB9CiAKQEAgLTE2OSw3ICsxNzAsNyBA
QCB2b2lkIFN1YnJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYgcmVzcG9uc2UpCiAKICAgICAvLyBSZWZlcmVuY2UgdGhlIG9iamVjdCBpbiB0
aGlzIG1ldGhvZCBzaW5jZSB0aGUgYWRkaXRpb25hbCBwcm9jZXNzaW5nIGNhbiBkbwogICAgIC8v
IGFueXRoaW5nIGluY2x1ZGluZyByZW1vdmluZyB0aGUgbGFzdCByZWZlcmVuY2UgdG8gdGhpcyBv
YmplY3Q7IG9uZSBleGFtcGxlIG9mIHRoaXMgaXMgMzI2NjIxNi4KLSAgICBSZWZQdHI8U3VicmVz
b3VyY2VMb2FkZXI+IHByb3RlY3QodGhpcyk7CisgICAgUmVmPFN1YnJlc291cmNlTG9hZGVyPiBw
cm90ZWN0KCp0aGlzKTsKIAogICAgIGlmIChtX3Jlc291cmNlLT5yZXNvdXJjZVRvUmV2YWxpZGF0
ZSgpKSB7CiAgICAgICAgIGlmIChyZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpID09IDMwNCkgewpA
QCAtMjQwLDcgKzI0MSw3IEBAIHZvaWQgU3VicmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVEYXRh
T3JCdWZmZXIoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCwgUGFzCiAgICAgQVNTRVJUKG1f
c3RhdGUgPT0gSW5pdGlhbGl6ZWQpOwogICAgIC8vIFJlZmVyZW5jZSB0aGUgb2JqZWN0IGluIHRo
aXMgbWV0aG9kIHNpbmNlIHRoZSBhZGRpdGlvbmFsIHByb2Nlc3NpbmcgY2FuIGRvCiAgICAgLy8g
YW55dGhpbmcgaW5jbHVkaW5nIHJlbW92aW5nIHRoZSBsYXN0IHJlZmVyZW5jZSB0byB0aGlzIG9i
amVjdDsgb25lIGV4YW1wbGUgb2YgdGhpcyBpcyAzMjY2MjE2LgotICAgIFJlZlB0cjxTdWJyZXNv
dXJjZUxvYWRlcj4gcHJvdGVjdCh0aGlzKTsKKyAgICBSZWY8U3VicmVzb3VyY2VMb2FkZXI+IHBy
b3RlY3QoKnRoaXMpOwogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciA9IHBycEJ1ZmZl
cjsKICAgICAKICAgICBSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZURhdGFPckJ1ZmZlcihkYXRh
LCBsZW5ndGgsIGJ1ZmZlciwgZW5jb2RlZERhdGFMZW5ndGgsIGRhdGFQYXlsb2FkVHlwZSk7CkBA
IC0yNzQsNyArMjc1LDcgQEAgdm9pZCBTdWJyZXNvdXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGlu
Zyhkb3VibGUgZmluaXNoVGltZSkKICAgICBBU1NFUlQoIW1fcmVzb3VyY2UtPmVycm9yT2NjdXJy
ZWQoKSk7CiAgICAgTE9HKFJlc291cmNlTG9hZGluZywgIlJlY2VpdmVkICclcycuIiwgbV9yZXNv
dXJjZS0+dXJsKCkuc3RyaW5nKCkubGF0aW4xKCkuZGF0YSgpKTsKIAotICAgIFJlZlB0cjxTdWJy
ZXNvdXJjZUxvYWRlcj4gcHJvdGVjdCh0aGlzKTsKKyAgICBSZWY8U3VicmVzb3VyY2VMb2FkZXI+
IHByb3RlY3QoKnRoaXMpOwogICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJlc291cmNl
PiBwcm90ZWN0UmVzb3VyY2UobV9yZXNvdXJjZSk7CiAgICAgbV9zdGF0ZSA9IEZpbmlzaGluZzsK
ICAgICBtX2FjdGl2aXR5QXNzZXJ0aW9uLmNsZWFyKCk7CkBAIC0yOTksNyArMzAwLDcgQEAgdm9p
ZCBTdWJyZXNvdXJjZUxvYWRlcjo6ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikK
ICAgICBBU1NFUlQoIXJlYWNoZWRUZXJtaW5hbFN0YXRlKCkpOwogICAgIExPRyhSZXNvdXJjZUxv
YWRpbmcsICJGYWlsZWQgdG8gbG9hZCAnJXMnLlxuIiwgbV9yZXNvdXJjZS0+dXJsKCkuc3RyaW5n
KCkubGF0aW4xKCkuZGF0YSgpKTsKIAotICAgIFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gcHJv
dGVjdCh0aGlzKTsKKyAgICBSZWY8U3VicmVzb3VyY2VMb2FkZXI+IHByb3RlY3QoKnRoaXMpOwog
ICAgIENhY2hlZFJlc291cmNlSGFuZGxlPENhY2hlZFJlc291cmNlPiBwcm90ZWN0UmVzb3VyY2Uo
bV9yZXNvdXJjZSk7CiAgICAgbV9zdGF0ZSA9IEZpbmlzaGluZzsKICAgICBtX2FjdGl2aXR5QXNz
ZXJ0aW9uLmNsZWFyKCk7CkBAIC0zMjMsNyArMzI0LDcgQEAgdm9pZCBTdWJyZXNvdXJjZUxvYWRl
cjo6d2lsbENhbmNlbChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKICAgICBBU1NFUlQoIXJl
YWNoZWRUZXJtaW5hbFN0YXRlKCkpOwogICAgIExPRyhSZXNvdXJjZUxvYWRpbmcsICJDYW5jZWxs
ZWQgbG9hZCBvZiAnJXMnLlxuIiwgbV9yZXNvdXJjZS0+dXJsKCkuc3RyaW5nKCkubGF0aW4xKCku
ZGF0YSgpKTsKIAotICAgIFJlZlB0cjxTdWJyZXNvdXJjZUxvYWRlcj4gcHJvdGVjdCh0aGlzKTsK
KyAgICBSZWY8U3VicmVzb3VyY2VMb2FkZXI+IHByb3RlY3QoKnRoaXMpOwogICAgIG1fc3RhdGUg
PSBGaW5pc2hpbmc7CiAgICAgbV9hY3Rpdml0eUFzc2VydGlvbi5jbGVhcigpOwogICAgIGlmICht
X3Jlc291cmNlLT5yZXNvdXJjZVRvUmV2YWxpZGF0ZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL2NmL1N1YnJlc291cmNlTG9hZGVyQ0YuY3BwIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL2NmL1N1YnJlc291cmNlTG9hZGVyQ0YuY3BwCmluZGV4IDU2OWEyYjkuLjI5ZmQ5ZjIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jZi9TdWJyZXNvdXJjZUxvYWRlckNG
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2YvU3VicmVzb3VyY2VMb2FkZXJDRi5j
cHAKQEAgLTI1LDYgKzI1LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTdWJy
ZXNvdXJjZUxvYWRlci5oIgogCisjaW5jbHVkZSA8d3RmL1JlZi5oPgorCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICNpZiBVU0UoTkVUV09SS19DRkRBVEFfQVJSQVlfQ0FMTEJBQ0spCkBAIC0zMiw3
ICszNCw3IEBAIHZvaWQgU3VicmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVEYXRhQXJyYXkoQ0ZB
cnJheVJlZiBkYXRhQXJyYXkpCiB7CiAgICAgLy8gUmVmZXJlbmNlIHRoZSBvYmplY3QgaW4gdGhp
cyBtZXRob2Qgc2luY2UgdGhlIGFkZGl0aW9uYWwgcHJvY2Vzc2luZyBjYW4gZG8KICAgICAvLyBh
bnl0aGluZyBpbmNsdWRpbmcgcmVtb3ZpbmcgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoaXMgb2Jq
ZWN0OyBvbmUgZXhhbXBsZSBvZiB0aGlzIGlzIDMyNjYyMTYuCi0gICAgUmVmUHRyPFN1YnJlc291
cmNlTG9hZGVyPiBwcm90ZWN0KHRoaXMpOworICAgIFJlZjxTdWJyZXNvdXJjZUxvYWRlcj4gcHJv
dGVjdCgqdGhpcyk7CiAKICAgICBSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZURhdGFBcnJheShk
YXRhQXJyYXkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKaW5kZXggNWZmYWZmNC4uMWU0
Y2M0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcApAQCAtMTA1LDYgKzEwNSw3IEBACiAj
aW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4K
ICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IApAQCAtMTcxOCw3ICsxNzE5LDcgQEAgdm9pZCBET01XaW5kb3c6OmRpc3BhdGNoTG9hZEV2ZW50
KCkKIAogYm9vbCBET01XaW5kb3c6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gcHJw
RXZlbnQsIFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IHBycFRhcmdldCkKIHsKLSAgICBSZWZQdHI8
RXZlbnRUYXJnZXQ+IHByb3RlY3QgPSB0aGlzOworICAgIFJlZjxFdmVudFRhcmdldD4gcHJvdGVj
dCgqdGhpcyk7CiAgICAgUmVmUHRyPEV2ZW50PiBldmVudCA9IHBycEV2ZW50OwogCiAgICAgZXZl
bnQtPnNldFRhcmdldChwcnBUYXJnZXQgPyBwcnBUYXJnZXQgOiB0aGlzKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93RXh0ZW5zaW9uLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRE9NV2luZG93RXh0ZW5zaW9uLmNwcAppbmRleCBjMjViZThjLi41ZGE5MDVlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvd0V4dGVuc2lvbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3dFeHRlbnNpb24uY3BwCkBAIC0zMSw2ICsz
MSw3IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2lu
Y2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCisjaW5jbHVkZSA8d3RmL1JlZi5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ3LDcgKzQ4LDcgQEAgdm9pZCBET01XaW5kb3dFeHRlbnNp
b246OmRpc2Nvbm5lY3RGcmFtZUZvclBhZ2VDYWNoZSgpCiB7CiAgICAgLy8gQ2FsbGluZyBvdXQg
dG8gdGhlIGNsaWVudCBtaWdodCByZXN1bHQgaW4gdGhpcyBET01XaW5kb3dFeHRlbnNpb24gYmVp
bmcgZGVzdHJveWVkCiAgICAgLy8gd2hpbGUgdGhlcmUgaXMgc3RpbGwgd29yayB0byBkby4KLSAg
ICBSZWZQdHI8RE9NV2luZG93RXh0ZW5zaW9uPiBwcm90ZWN0b3IgPSB0aGlzOworICAgIFJlZjxE
T01XaW5kb3dFeHRlbnNpb24+IHByb3RlY3RvcigqdGhpcyk7CiAgICAgCiAgICAgRnJhbWUqIGZy
YW1lID0gdGhpcy0+ZnJhbWUoKTsKICAgICBmcmFtZS0+bG9hZGVyKCkuY2xpZW50KCkuZGlzcGF0
Y2hXaWxsRGlzY29ubmVjdERPTVdpbmRvd0V4dGVuc2lvbkZyb21HbG9iYWxPYmplY3QodGhpcyk7
CkBAIC03Myw4ICs3NCw4IEBAIHZvaWQgRE9NV2luZG93RXh0ZW5zaW9uOjp3aWxsRGVzdHJveUds
b2JhbE9iamVjdEluQ2FjaGVkRnJhbWUoKQogCiAgICAgLy8gQ2FsbGluZyBvdXQgdG8gdGhlIGNs
aWVudCBtaWdodCByZXN1bHQgaW4gdGhpcyBET01XaW5kb3dFeHRlbnNpb24gYmVpbmcgZGVzdHJv
eWVkCiAgICAgLy8gd2hpbGUgdGhlcmUgaXMgc3RpbGwgd29yayB0byBkby4KLSAgICBSZWZQdHI8
RE9NV2luZG93RXh0ZW5zaW9uPiBwcm90ZWN0b3IgPSB0aGlzOwotICAgIAorICAgIFJlZjxET01X
aW5kb3dFeHRlbnNpb24+IHByb3RlY3RvcigqdGhpcyk7CisKICAgICBtX2Rpc2Nvbm5lY3RlZEZy
YW1lLT5sb2FkZXIoKS5jbGllbnQoKS5kaXNwYXRjaFdpbGxEZXN0cm95R2xvYmFsT2JqZWN0Rm9y
RE9NV2luZG93RXh0ZW5zaW9uKHRoaXMpOwogICAgIG1fZGlzY29ubmVjdGVkRnJhbWUgPSAwOwog
CkBAIC04Nyw3ICs4OCw3IEBAIHZvaWQgRE9NV2luZG93RXh0ZW5zaW9uOjp3aWxsRGVzdHJveUds
b2JhbE9iamVjdEluRnJhbWUoKQogCiAgICAgLy8gQ2FsbGluZyBvdXQgdG8gdGhlIGNsaWVudCBt
aWdodCByZXN1bHQgaW4gdGhpcyBET01XaW5kb3dFeHRlbnNpb24gYmVpbmcgZGVzdHJveWVkCiAg
ICAgLy8gd2hpbGUgdGhlcmUgaXMgc3RpbGwgd29yayB0byBkby4KLSAgICBSZWZQdHI8RE9NV2lu
ZG93RXh0ZW5zaW9uPiBwcm90ZWN0b3IgPSB0aGlzOworICAgIFJlZjxET01XaW5kb3dFeHRlbnNp
b24+IHByb3RlY3RvcigqdGhpcyk7CiAKICAgICBpZiAoIW1fd2FzRGV0YWNoZWQpIHsKICAgICAg
ICAgRnJhbWUqIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKQEAgLTEwNSw3ICsxMDYsNyBAQCB2b2lk
IERPTVdpbmRvd0V4dGVuc2lvbjo6d2lsbERldGFjaEdsb2JhbE9iamVjdEZyb21GcmFtZSgpCiAK
ICAgICAvLyBDYWxsaW5nIG91dCB0byB0aGUgY2xpZW50IG1pZ2h0IHJlc3VsdCBpbiB0aGlzIERP
TVdpbmRvd0V4dGVuc2lvbiBiZWluZyBkZXN0cm95ZWQKICAgICAvLyB3aGlsZSB0aGVyZSBpcyBz
dGlsbCB3b3JrIHRvIGRvLgotICAgIFJlZlB0cjxET01XaW5kb3dFeHRlbnNpb24+IHByb3RlY3Rv
ciA9IHRoaXM7CisgICAgUmVmPERPTVdpbmRvd0V4dGVuc2lvbj4gcHJvdGVjdG9yKCp0aGlzKTsK
IAogICAgIEZyYW1lKiBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7CiAgICAgQVNTRVJUKGZyYW1lKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRm9jdXNDb250cm9sbGVyLmNwcAppbmRleCBiYzkzMGZiLi41OTE3
NmQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCkBAIC02MSw2ICs2
MSw3IEBACiAjaW5jbHVkZSAiV2lkZ2V0LmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIgLy8g
Rm9yIGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZQogI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNs
dWRlIDx3dGYvUmVmLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjMxLDcgKzYzMiw3
IEBAIGJvb2wgRm9jdXNDb250cm9sbGVyOjpzZXRGb2N1c2VkRWxlbWVudChFbGVtZW50KiBlbGVt
ZW50LCBQYXNzUmVmUHRyPEZyYW1lPiBuZXdGCiAgICAgfQogICAgIHNldEZvY3VzZWRGcmFtZShu
ZXdGb2N1c2VkRnJhbWUpOwogCi0gICAgUmVmUHRyPEVsZW1lbnQ+IHByb3RlY3QoZWxlbWVudCk7
CisgICAgUmVmPEVsZW1lbnQ+IHByb3RlY3QoKmVsZW1lbnQpOwogICAgIGlmIChuZXdEb2N1bWVu
dCkgewogICAgICAgICBib29sIHN1Y2Nlc3NmdWxseUZvY3VzZWQgPSBuZXdEb2N1bWVudC0+c2V0
Rm9jdXNlZEVsZW1lbnQoZWxlbWVudCwgZGlyZWN0aW9uKTsKICAgICAgICAgaWYgKCFzdWNjZXNz
ZnVsbHlGb2N1c2VkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4IGJmZmVhYjAuLjg3
OTdjYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKQEAgLTc4LDYgKzc4LDcgQEAKICNp
bmNsdWRlICJUZXh0U3RyZWFtLmgiCiAKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1RlbXBvcmFyeUNoYW5nZS5oPgogCiAj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpAQCAtMTExNSw3ICsxMTE2LDcgQEAgdm9p
ZCBGcmFtZVZpZXc6OmxheW91dChib29sIGFsbG93U3VidHJlZSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgLy8gUHJvdGVjdCB0aGUgdmlldyBmcm9tIGJlaW5nIGRlbGV0ZWQgZHVyaW5nIGxheW91
dCAoaW4gcmVjYWxjU3R5bGUpCi0gICAgUmVmUHRyPEZyYW1lVmlldz4gcHJvdGVjdG9yKHRoaXMp
OworICAgIFJlZjxGcmFtZVZpZXc+IHByb3RlY3RvcigqdGhpcyk7CiAKICAgICAvLyBFdmVyeSBz
Y3JvbGwgdGhhdCBoYXBwZW5zIGR1cmluZyBsYXlvdXQgaXMgcHJvZ3JhbW1hdGljLgogICAgIFRl
bXBvcmFyeUNoYW5nZTxib29sPiBjaGFuZ2VJblByb2dyYW1tYXRpY1Njcm9sbChtX2luUHJvZ3Jh
bW1hdGljU2Nyb2xsLCB0cnVlKTsKQEAgLTExODMsNyArMTE4NCw3IEBAIHZvaWQgRnJhbWVWaWV3
OjpsYXlvdXQoYm9vbCBhbGxvd1N1YnRyZWUpCiAKICAgICAgICAgLy8gSWYgdGhlcmUgaXMgb25s
eSBvbmUgcmVmIHRvIHRoaXMgdmlldyBsZWZ0LCB0aGVuIGl0cyBnb2luZyB0byBiZSBkZXN0cm95
ZWQgYXMgc29vbiBhcyB3ZSBleGl0LCAKICAgICAgICAgLy8gc28gdGhlcmUncyBubyBwb2ludCB0
byBjb250aW51aW5nIHRvIGxheW91dAotICAgICAgICBpZiAocHJvdGVjdG9yLT5oYXNPbmVSZWYo
KSkKKyAgICAgICAgaWYgKGhhc09uZVJlZigpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAg
ICAgIHJvb3QgPSBzdWJ0cmVlID8gbV9sYXlvdXRSb290IDogZG9jdW1lbnQtPnJlbmRlcmVyKCk7
CkBAIC0yNzU5LDcgKzI3NjAsNyBAQCB2b2lkIEZyYW1lVmlldzo6cGVyZm9ybVBvc3RMYXlvdXRU
YXNrcygpCiAgICAgCiAgICAgLy8gbGF5b3V0KCkgcHJvdGVjdHMgRnJhbWVWaWV3LCBidXQgaXQg
c3RpbGwgY2FuIGdldCBkZXN0cm95ZWQgd2hlbiB1cGRhdGVXaWRnZXRzKCkKICAgICAvLyBpcyBj
YWxsZWQgdGhyb3VnaCB0aGUgcG9zdCBsYXlvdXQgdGltZXIuCi0gICAgUmVmUHRyPEZyYW1lVmll
dz4gcHJvdGVjdG9yKHRoaXMpOworICAgIFJlZjxGcmFtZVZpZXc+IHByb3RlY3RvcigqdGhpcyk7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1heFVwZGF0ZVdpZGdldHNJdGVyYXRpb25z
OyBpKyspIHsKICAgICAgICAgaWYgKHVwZGF0ZVdpZGdldHMoKSkKICAgICAgICAgICAgIGJyZWFr
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFz
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcApp
bmRleCA1MmZiMDJjLi41OWJlOTMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2Fu
aW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1h
dGlvbi9BbmltYXRpb25CYXNlLmNwcApAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgIlVuaXRC
ZXppZXIuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1l
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZi5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCkBAIC00
NTMsOCArNDU0LDggQEAgdm9pZCBBbmltYXRpb25CYXNlOjpmaXJlQW5pbWF0aW9uRXZlbnRzSWZO
ZWVkZWQoKQogICAgIC8vIGR1cmluZyBhbiBhbmltYXRpb24gY2FsbGJhY2sgdGhhdCBtaWdodCBn
ZXQgY2FsbGVkLiBTaW5jZSB0aGUgb3duZXIgaXMgYSBDb21wb3NpdGVBbmltYXRpb24KICAgICAv
LyBhbmQgaXQgcmVmIGNvdW50cyB0aGlzIG9iamVjdCwgd2Ugd2lsbCBrZWVwIGEgcmVmIHRvIHRo
YXQgaW5zdGVhZC4gVGhhdCB3YXkgdGhlIEFuaW1hdGlvbkJhc2UKICAgICAvLyBjYW4gc3RpbGwg
YWNjZXNzIHRoZSByZXNvdXJjZXMgb2YgaXRzIENvbXBvc2l0ZUFuaW1hdGlvbiBhcyBuZWVkZWQu
Ci0gICAgUmVmUHRyPEFuaW1hdGlvbkJhc2U+IHByb3RlY3Rvcih0aGlzKTsKLSAgICBSZWZQdHI8
Q29tcG9zaXRlQW5pbWF0aW9uPiBjb21wUHJvdGVjdG9yKG1fY29tcEFuaW0pOworICAgIFJlZjxB
bmltYXRpb25CYXNlPiBwcm90ZWN0b3IoKnRoaXMpOworICAgIFJlZjxDb21wb3NpdGVBbmltYXRp
b24+IGNvbXBQcm90ZWN0b3IoKm1fY29tcEFuaW0pOwogICAgIAogICAgIC8vIENoZWNrIGZvciBz
dGFydCB0aW1lb3V0CiAgICAgaWYgKG1fYW5pbVN0YXRlID09IEFuaW1hdGlvblN0YXRlU3RhcnRX
YWl0VGltZXIpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0Rpc3BsYXlSZWZyZXNoTW9uaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3IuY3BwCmluZGV4IDQyM2QxNDcuLjI0NTVjNDYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNo
TW9uaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxh
eVJlZnJlc2hNb25pdG9yLmNwcApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkRpc3BsYXlS
ZWZyZXNoTW9uaXRvci5oIgogCiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZi5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTEwNSw3ICsxMDYsNyBA
QCB2b2lkIERpc3BsYXlSZWZyZXNoTW9uaXRvcjo6ZGlzcGxheURpZFJlZnJlc2goKQogCiAgICAg
Ly8gVGhlIGNhbGwgYmFjayBjYW4gY2F1c2UgYWxsIG91ciBjbGllbnRzIHRvIGJlIHVucmVnaXN0
ZXJlZCwgc28gd2UgbmVlZCB0byBwcm90ZWN0CiAgICAgLy8gYWdhaW5zdCBkZWxldGlvbiB1bnRp
bCB0aGUgZW5kIG9mIHRoZSBtZXRob2QuCi0gICAgUmVmUHRyPERpc3BsYXlSZWZyZXNoTW9uaXRv
cj4gcHJvdGVjdG9yKHRoaXMpOworICAgIFJlZjxEaXNwbGF5UmVmcmVzaE1vbml0b3I+IHByb3Rl
Y3RvcigqdGhpcyk7CiAgICAgCiAgICAgVmVjdG9yPERpc3BsYXlSZWZyZXNoTW9uaXRvckNsaWVu
dCo+IGNsaWVudHM7CiAgICAgY29weVRvVmVjdG9yKG1fY2xpZW50cywgY2xpZW50cyk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2lkZ2V0TWFjLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL1dpZGdldE1hYy5tbQppbmRleCAzNjNjNzg0Li4xMmVmMjNj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2lkZ2V0TWFjLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9XaWRnZXRNYWMubW0KQEAgLTQwLDYgKzQw
LDcgQEAKICNpbXBvcnQgIlNjcm9sbFZpZXcuaCIKICNpbXBvcnQgIldlYkNvcmVGcmFtZVZpZXcu
aCIKICNpbXBvcnQgIldlYkNvcmVWaWV3LmgiCisjaW1wb3J0ICA8d3RmL1JlZi5oPgogI2ltcG9y
dCA8d3RmL1JldGFpblB0ci5oPgogCiBAaW50ZXJmYWNlIE5TV2luZG93IChXZWJXaW5kb3dEZXRh
aWxzKQpAQCAtMTcwLDcgKzE3MSw3IEBAIHZvaWQgV2lkZ2V0OjpzZXRGcmFtZVJlY3QoY29uc3Qg
SW50UmVjdCYgcmVjdCkKIAogICAgIC8vIFRha2UgYSByZWZlcmVuY2UgdG8gdGhpcyBXaWRnZXQs
IGJlY2F1c2Ugc2VuZGluZyBtZXNzYWdlcyB0byBvdXRlclZpZXcgY2FuIGludm9rZSBhcmJpdHJh
cnkKICAgICAvLyBjb2RlLCB3aGljaCBjYW4gZGVyZWYgaXQuCi0gICAgUmVmUHRyPFdpZGdldD4g
cHJvdGVjdGVkVGhpcyh0aGlzKTsKKyAgICBSZWY8V2lkZ2V0PiBwcm90ZWN0ZWRUaGlzKCp0aGlz
KTsKIAogICAgIE5TUmVjdCB2aXNpYmxlUmVjdCA9IFtvdXRlclZpZXcgdmlzaWJsZVJlY3RdOwog
ICAgIE5TUmVjdCBmID0gcmVjdDsKQEAgLTIxMiw3ICsyMTMsNyBAQCB2b2lkIFdpZGdldDo6cGFp
bnQoR3JhcGhpY3NDb250ZXh0KiBwLCBjb25zdCBJbnRSZWN0JiByKQogCiAgICAgLy8gVGFrZSBh
IHJlZmVyZW5jZSB0byB0aGlzIFdpZGdldCwgYmVjYXVzZSBzZW5kaW5nIG1lc3NhZ2VzIHRvIHRo
ZSB2aWV3cyBjYW4gaW52b2tlIGFyYml0cmFyeQogICAgIC8vIGNvZGUsIHdoaWNoIGNhbiBkZXJl
ZiBpdC4KLSAgICBSZWZQdHI8V2lkZ2V0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOworICAgIFJlZjxX
aWRnZXQ+IHByb3RlY3RlZFRoaXMoKnRoaXMpOwogCiAgICAgTlNHcmFwaGljc0NvbnRleHQgKmN1
cnJlbnRDb250ZXh0ID0gW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XTsKICAgICBp
ZiAoY3VycmVudENvbnRleHQgPT0gW1t2aWV3IHdpbmRvd10gZ3JhcGhpY3NDb250ZXh0XSB8fCAh
W2N1cnJlbnRDb250ZXh0IGlzRHJhd2luZ1RvU2NyZWVuXSkgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVzb3VyY2VIYW5kbGUuY3BwCmluZGV4IDJk
OGFmM2IuLmRiNzVmYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvQmxvYlJlc291cmNlSGFuZGxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL0Jsb2JSZXNvdXJjZUhhbmRsZS5jcHAKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRl
ICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVk
ZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtMjQ1LDcgKzI0Niw3IEBAIHZvaWQgQmxvYlJlc291cmNlSGFuZGxlOjpk
b1N0YXJ0KCkKICAgICBpZiAobV9hc3luYykKICAgICAgICAgZ2V0U2l6ZUZvck5leHQoKTsKICAg
ICBlbHNlIHsKLSAgICAgICAgUmVmUHRyPEJsb2JSZXNvdXJjZUhhbmRsZT4gcHJvdGVjdCh0aGlz
KTsgLy8gZ2V0U2l6ZUZvck5leHQgY2FsbHMgdGhlIGNsaWVudAorICAgICAgICBSZWY8QmxvYlJl
c291cmNlSGFuZGxlPiBwcm90ZWN0KCp0aGlzKTsgLy8gZ2V0U2l6ZUZvck5leHQgY2FsbHMgdGhl
IGNsaWVudAogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYmxvYkRhdGEtPml0ZW1z
KCkuc2l6ZSgpICYmICFtX2Fib3J0ZWQgJiYgIW1fZXJyb3JDb2RlOyArK2kpCiAgICAgICAgICAg
ICBnZXRTaXplRm9yTmV4dCgpOwogICAgICAgICBub3RpZnlSZXNwb25zZSgpOwpAQCAtMjYwLDcg
KzI2MSw3IEBAIHZvaWQgQmxvYlJlc291cmNlSGFuZGxlOjpnZXRTaXplRm9yTmV4dCgpCiAKICAg
ICAgICAgLy8gU3RhcnQgcmVhZGluZyBpZiBpbiBhc3luY2hyb25vdXMgbW9kZS4KICAgICAgICAg
aWYgKG1fYXN5bmMpIHsKLSAgICAgICAgICAgIFJlZlB0cjxCbG9iUmVzb3VyY2VIYW5kbGU+IHBy
b3RlY3QodGhpcyk7CisgICAgICAgICAgICBSZWY8QmxvYlJlc291cmNlSGFuZGxlPiBwcm90ZWN0
KCp0aGlzKTsKICAgICAgICAgICAgIG5vdGlmeVJlc3BvbnNlKCk7CiAgICAgICAgICAgICBtX2J1
ZmZlci5yZXNpemUoYnVmZmVyU2l6ZSk7CiAgICAgICAgICAgICByZWFkQXN5bmMoKTsKQEAgLTM0
NSw3ICszNDYsNyBAQCB2b2lkIEJsb2JSZXNvdXJjZUhhbmRsZTo6c2VlaygpCiBpbnQgQmxvYlJl
c291cmNlSGFuZGxlOjpyZWFkU3luYyhjaGFyKiBidWYsIGludCBsZW5ndGgpCiB7CiAgICAgQVNT
RVJUKCFtX2FzeW5jKTsKLSAgICBSZWZQdHI8QmxvYlJlc291cmNlSGFuZGxlPiBwcm90ZWN0KHRo
aXMpOworICAgIFJlZjxCbG9iUmVzb3VyY2VIYW5kbGU+IHByb3RlY3QoKnRoaXMpOwogCiAgICAg
aW50IG9mZnNldCA9IDA7CiAgICAgaW50IHJlbWFpbmluZyA9IGxlbmd0aDsKQEAgLTQ2Nyw3ICs0
NjgsNyBAQCB2b2lkIEJsb2JSZXNvdXJjZUhhbmRsZTo6cmVhZEFzeW5jKCkKIHZvaWQgQmxvYlJl
c291cmNlSGFuZGxlOjpyZWFkRGF0YUFzeW5jKGNvbnN0IEJsb2JEYXRhSXRlbSYgaXRlbSkKIHsK
ICAgICBBU1NFUlQobV9hc3luYyk7Ci0gICAgUmVmUHRyPEJsb2JSZXNvdXJjZUhhbmRsZT4gcHJv
dGVjdCh0aGlzKTsKKyAgICBSZWY8QmxvYlJlc291cmNlSGFuZGxlPiBwcm90ZWN0KCp0aGlzKTsK
IAogICAgIGxvbmcgbG9uZyBieXRlc1RvUmVhZCA9IGl0ZW0ubGVuZ3RoIC0gbV9jdXJyZW50SXRl
bVJlYWRTaXplOwogICAgIGlmIChieXRlc1RvUmVhZCA+IG1fdG90YWxSZW1haW5pbmdTaXplKQpA
QCAtNTE5LDcgKzUyMCw3IEBAIHZvaWQgQmxvYlJlc291cmNlSGFuZGxlOjpkaWRSZWFkKGludCBi
eXRlc1JlYWQpCiB2b2lkIEJsb2JSZXNvdXJjZUhhbmRsZTo6Y29uc3VtZURhdGEoY29uc3QgY2hh
ciogZGF0YSwgaW50IGJ5dGVzUmVhZCkKIHsKICAgICBBU1NFUlQobV9hc3luYyk7Ci0gICAgUmVm
UHRyPEJsb2JSZXNvdXJjZUhhbmRsZT4gcHJvdGVjdCh0aGlzKTsKKyAgICBSZWY8QmxvYlJlc291
cmNlSGFuZGxlPiBwcm90ZWN0KCp0aGlzKTsKIAogICAgIG1fdG90YWxSZW1haW5pbmdTaXplIC09
IGJ5dGVzUmVhZDsKIApAQCAtNTQ5LDcgKzU1MCw3IEBAIHZvaWQgQmxvYlJlc291cmNlSGFuZGxl
Ojpjb25zdW1lRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgYnl0ZXNSZWFkKQogdm9pZCBCbG9i
UmVzb3VyY2VIYW5kbGU6OmZhaWxlZChpbnQgZXJyb3JDb2RlKQogewogICAgIEFTU0VSVChtX2Fz
eW5jKTsKLSAgICBSZWZQdHI8QmxvYlJlc291cmNlSGFuZGxlPiBwcm90ZWN0KHRoaXMpOworICAg
IFJlZjxCbG9iUmVzb3VyY2VIYW5kbGU+IHByb3RlY3QoKnRoaXMpOwogCiAgICAgLy8gTm90aWZ5
IHRoZSBjbGllbnQuCiAgICAgbm90aWZ5RmFpbChlcnJvckNvZGUpOwpAQCAtNTY3LDcgKzU2OCw3
IEBAIHZvaWQgQmxvYlJlc291cmNlSGFuZGxlOjpub3RpZnlSZXNwb25zZSgpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGlmIChtX2Vycm9yQ29kZSkgewotICAgICAgICBSZWZQdHI8QmxvYlJlc291
cmNlSGFuZGxlPiBwcm90ZWN0KHRoaXMpOworICAgICAgICBSZWY8QmxvYlJlc291cmNlSGFuZGxl
PiBwcm90ZWN0KCp0aGlzKTsKICAgICAgICAgbm90aWZ5UmVzcG9uc2VPbkVycm9yKCk7CiAgICAg
ICAgIG5vdGlmeUZpbmlzaCgpOwogICAgIH0gZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHAKaW5kZXgg
ZjVhM2I3Mi4uNzFhYWYxYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY2YvUmVzb3VyY2VIYW5kbGVDRk5ldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jZi9SZXNvdXJjZUhhbmRsZUNGTmV0LmNwcApAQCAtNDcsNiArNDcsNyBA
QAogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1Ro
cmVhZGluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KQEAgLTUwMiw3ICs1MDMsNyBAQCB2b2lkIFJlc291cmNlSGFuZGxlOjp3
aWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJl
cwogICAgICAgICB9CiAgICAgfQogCi0gICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBwcm90ZWN0
KHRoaXMpOworICAgIFJlZjxSZXNvdXJjZUhhbmRsZT4gcHJvdGVjdCgqdGhpcyk7CiAgICAgY2xp
ZW50KCktPndpbGxTZW5kUmVxdWVzdCh0aGlzLCByZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlKTsK
IAogICAgIC8vIENsaWVudCBjYWxsIG1heSBub3QgcHJlc2VydmUgdGhlIHNlc3Npb24sIGVzcGVj
aWFsbHkgaWYgdGhlIHJlcXVlc3QgaXMgc2VudCBvdmVyIElQQy4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFjL1Jlc291cmNlSGFuZGxlTWFjLm1tIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VIYW5kbGVNYWMubW0KaW5k
ZXggNGFmOTc4ZC4uMDk0MDBhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9tYWMvUmVzb3VyY2VIYW5kbGVNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9tYWMvUmVzb3VyY2VIYW5kbGVNYWMubW0KQEAgLTUxLDYgKzUxLDcgQEAK
ICNpbXBvcnQgIlN5bmNocm9ub3VzTG9hZGVyQ2xpZW50LmgiCiAjaW1wb3J0ICJXZWJDb3JlU3lz
dGVtSW50ZXJmYWNlLmgiCiAjaW1wb3J0ICJXZWJDb3JlVVJMUmVzcG9uc2UuaCIKKyNpbXBvcnQg
PHd0Zi9SZWYuaD4KICNpbXBvcnQgPHd0Zi9TY2hlZHVsZVBhaXIuaD4KICNpbXBvcnQgPHd0Zi90
ZXh0L0Jhc2U2NC5oPgogI2ltcG9ydCA8d3RmL3RleHQvQ1N0cmluZy5oPgpAQCAtMzg5LDcgKzM5
MCw3IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OndpbGxTZW5kUmVxdWVzdChSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzCiAgICAgaWYgKGNsaWVudCgpLT51c2VzQXN5
bmNDYWxsYmFja3MoKSkgewogICAgICAgICBjbGllbnQoKS0+d2lsbFNlbmRSZXF1ZXN0QXN5bmMo
dGhpcywgcmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAg
UmVmUHRyPFJlc291cmNlSGFuZGxlPiBwcm90ZWN0KHRoaXMpOworICAgICAgICBSZWY8UmVzb3Vy
Y2VIYW5kbGU+IHByb3RlY3QoKnRoaXMpOwogICAgICAgICBjbGllbnQoKS0+d2lsbFNlbmRSZXF1
ZXN0KHRoaXMsIHJlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UpOwogCiAgICAgICAgIC8vIENsaWVu
dCBjYWxsIG1heSBub3QgcHJlc2VydmUgdGhlIHNlc3Npb24sIGVzcGVjaWFsbHkgaWYgdGhlIHJl
cXVlc3QgaXMgc2VudCBvdmVyIElQQy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJXaWRnZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldp
ZGdldC5jcHAKaW5kZXggNWRlMGE5NC4uZjZhODgzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlcldpZGdldC5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJSZW5kZXJW
aWV3LmgiCiAjaW5jbHVkZSAiUmVuZGVyV2lkZ2V0UHJvdGVjdG9yLmgiCiAjaW5jbHVkZSA8d3Rm
L1N0YWNrU3RhdHMuaD4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+CiAKICNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCkBAIC0xNTMs
NyArMTU0LDcgQEAgYm9vbCBSZW5kZXJXaWRnZXQ6OnNldFdpZGdldEdlb21ldHJ5KGNvbnN0IExh
eW91dFJlY3QmIGZyYW1lKQogICAgIG1fY2xpcFJlY3QgPSBjbGlwUmVjdDsKIAogICAgIFJlbmRl
cldpZGdldFByb3RlY3RvciBwcm90ZWN0b3IodGhpcyk7Ci0gICAgUmVmUHRyPE5vZGU+IHByb3Rl
Y3RlZE5vZGUobm9kZSgpKTsKKyAgICBSZWY8Tm9kZT4gcHJvdGVjdGVkTm9kZSgqbm9kZSgpKTsK
ICAgICBtX3dpZGdldC0+c2V0RnJhbWVSZWN0KG5ld0ZyYW1lKTsKIAogICAgIGlmIChjbGlwQ2hh
bmdlZCAmJiAhYm91bmRzQ2hhbmdlZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtl
cnMvV29ya2VyU2NyaXB0TG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2Vy
U2NyaXB0TG9hZGVyLmNwcAppbmRleCA0YzZmZTIxLi45MjI3MjI2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclNjcmlwdExvYWRlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvd29ya2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXIuY3BwCkBAIC00MCw2ICs0MCw3IEBACiAj
aW5jbHVkZSAiV29ya2VyU2NyaXB0TG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiV29ya2VyVGhy
ZWFkYWJsZUxvYWRlci5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC05MCw3ICs5MSw3IEBAIHZvaWQgV29ya2VyU2NyaXB0TG9hZGVyOjpsb2FkQXN5bmNocm9ub3Vz
bHkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0CiAgICAgb3B0aW9ucy5zZW5k
TG9hZENhbGxiYWNrcyA9IFNlbmRDYWxsYmFja3M7CiAKICAgICAvLyBEdXJpbmcgY3JlYXRlLCBj
YWxsYmFja3MgbWF5IGhhcHBlbiB3aGljaCByZW1vdmUgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRo
aXMgb2JqZWN0LgotICAgIFJlZlB0cjxXb3JrZXJTY3JpcHRMb2FkZXI+IHByb3RlY3QodGhpcyk7
CisgICAgUmVmPFdvcmtlclNjcmlwdExvYWRlcj4gcHJvdGVjdCgqdGhpcyk7CiAgICAgbV90aHJl
YWRhYmxlTG9hZGVyID0gVGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQsIHRoaXMsICpyZXF1ZXN0LCBvcHRpb25zKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YTUxI
dHRwUmVxdWVzdC5jcHAKaW5kZXggYzgxMDUzNi4uZGIwYjIxMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwv
WE1MSHR0cFJlcXVlc3QuY3BwCkBAIC02Miw2ICs2Miw3IEBACiAjaW5jbHVkZSA8cnVudGltZS9B
cnJheUJ1ZmZlclZpZXcuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgogI2luY2x1ZGUg
PHJ1bnRpbWUvT3BlcmF0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KICNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZExlYWtDb3VudGVyLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KQEAgLTgyMiw3ICs4MjMsNyBAQCB2b2lk
IFhNTEh0dHBSZXF1ZXN0OjpjcmVhdGVSZXF1ZXN0KEV4Y2VwdGlvbkNvZGUmIGVjKQogdm9pZCBY
TUxIdHRwUmVxdWVzdDo6YWJvcnQoKQogewogICAgIC8vIGludGVybmFsQWJvcnQoKSBjYWxscyBk
cm9wUHJvdGVjdGlvbigpLCB3aGljaCBtYXkgcmVsZWFzZSB0aGUgbGFzdCByZWZlcmVuY2UuCi0g
ICAgUmVmUHRyPFhNTEh0dHBSZXF1ZXN0PiBwcm90ZWN0KHRoaXMpOworICAgIFJlZjxYTUxIdHRw
UmVxdWVzdD4gcHJvdGVjdCgqdGhpcyk7CiAKICAgICBib29sIHNlbmRGbGFnID0gbV9sb2FkZXI7
CiAKQEAgLTEyNDEsNyArMTI0Miw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRpZFJlY2VpdmVE
YXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW4pCiB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaWRU
aW1lb3V0KCkKIHsKICAgICAvLyBpbnRlcm5hbEFib3J0KCkgY2FsbHMgZHJvcFByb3RlY3Rpb24o
KSwgd2hpY2ggbWF5IHJlbGVhc2UgdGhlIGxhc3QgcmVmZXJlbmNlLgotICAgIFJlZlB0cjxYTUxI
dHRwUmVxdWVzdD4gcHJvdGVjdCh0aGlzKTsKKyAgICBSZWY8WE1MSHR0cFJlcXVlc3Q+IHByb3Rl
Y3QoKnRoaXMpOwogICAgIGludGVybmFsQWJvcnQoKTsKIAogICAgIGNsZWFyUmVzcG9uc2UoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlci5jcHAKaW5k
ZXggNjRjMmQ4My4uNDI5YmE0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUveG1sL3BhcnNl
ci9YTUxEb2N1bWVudFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9Y
TUxEb2N1bWVudFBhcnNlci5jcHAKQEAgLTUwLDYgKzUwLDcgQEAKICNpbmNsdWRlICJUZXh0UmVz
b3VyY2VEZWNvZGVyLmgiCiAjaW5jbHVkZSAiVHJlZURlcHRoTGltaXQuaCIKICNpbmNsdWRlICJY
TUxFcnJvcnMuaCIKKyNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1N0cmluZ0V4
dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CkBAIC0yNTYsNyArMjU3LDcgQEAgdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6bm90aWZ5Rmlu
aXNoZWQoQ2FjaGVkUmVzb3VyY2UqIHVudXNlZFJlc291cmNlKQogICAgIEFTU0VSVChzY3JpcHRF
bGVtZW50KTsKIAogICAgIC8vIEphdmFTY3JpcHQgY2FuIGRldGFjaCB0aGlzIHBhcnNlciwgbWFr
ZSBzdXJlIGl0J3Mga2VwdCBhbGl2ZSBldmVuIGlmIGRldGFjaGVkLgotICAgIFJlZlB0cjxYTUxE
b2N1bWVudFBhcnNlcj4gcHJvdGVjdCh0aGlzKTsKKyAgICBSZWY8WE1MRG9jdW1lbnRQYXJzZXI+
IHByb3RlY3QoKnRoaXMpOwogICAgIAogICAgIGlmIChlcnJvck9jY3VycmVkKQogICAgICAgICBz
Y3JpcHRFbGVtZW50LT5kaXNwYXRjaEVycm9yRXZlbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcAppbmRleCAxNjVl
MjcxLi4xMjg1MjI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERv
Y3VtZW50UGFyc2VyTGlieG1sMi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9Y
TUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCkBAIC02Miw2ICs2Miw3IEBACiAjaW5jbHVkZSA8
bGlieG1sL3BhcnNlci5oPgogI2luY2x1ZGUgPGxpYnhtbC9wYXJzZXJJbnRlcm5hbHMuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL1JlZi5oPgogI2luY2x1
ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtNjg0LDcgKzY4NSw3IEBAIHZvaWQgWE1MRG9jdW1lbnRQ
YXJzZXI6OmRvV3JpdGUoY29uc3QgU3RyaW5nJiBwYXJzZVN0cmluZykKICAgICBpZiAocGFyc2VT
dHJpbmcubGVuZ3RoKCkpIHsKICAgICAgICAgLy8gSmF2YVNjcmlwdCBtYXkgY2F1c2UgdGhlIHBh
cnNlciB0byBkZXRhY2ggZHVyaW5nIHhtbFBhcnNlQ2h1bmsKICAgICAgICAgLy8ga2VlcCB0aGlz
IGFsaXZlIHVudGlsIHRoaXMgZnVuY3Rpb24gaXMgZG9uZS4KLSAgICAgICAgUmVmUHRyPFhNTERv
Y3VtZW50UGFyc2VyPiBwcm90ZWN0KHRoaXMpOworICAgICAgICBSZWY8WE1MRG9jdW1lbnRQYXJz
ZXI+IHByb3RlY3QoKnRoaXMpOwogCiAgICAgICAgIHN3aXRjaFRvVVRGMTYoY29udGV4dC0+Y29u
dGV4dCgpKTsKICAgICAgICAgWE1MRG9jdW1lbnRQYXJzZXJTY29wZSBzY29wZShkb2N1bWVudCgp
LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpKTsKQEAgLTg4Myw3ICs4ODQsNyBAQCB2b2lkIFhNTERv
Y3VtZW50UGFyc2VyOjplbmRFbGVtZW50TnMoKQogCiAgICAgLy8gSmF2YVNjcmlwdCBjYW4gZGV0
YWNoIHRoZSBwYXJzZXIuICBNYWtlIHN1cmUgdGhpcyBpcyBub3QgcmVsZWFzZWQKICAgICAvLyBi
ZWZvcmUgdGhlIGVuZCBvZiB0aGlzIG1ldGhvZC4KLSAgICBSZWZQdHI8WE1MRG9jdW1lbnRQYXJz
ZXI+IHByb3RlY3QodGhpcyk7CisgICAgUmVmPFhNTERvY3VtZW50UGFyc2VyPiBwcm90ZWN0KCp0
aGlzKTsKIAogICAgIGV4aXRUZXh0KCk7CiAK
</data>
<flag name="review"
          id="232340"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>