<?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>36248</bug_id>
          
          <creation_ts>2010-03-17 16:00:11 -0700</creation_ts>
          <short_desc>Implement lazy clearing of renderbuffers</short_desc>
          <delta_ts>2014-01-06 14:03:47 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>126538</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kenneth Russell">kbr</reporter>
          <assigned_to name="Zhenyao Mo">zmo</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>kbr</cc>
    
    <cc>oliver</cc>
    
    <cc>zmo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>201020</commentid>
    <comment_count>0</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-03-17 16:00:11 -0700</bug_when>
    <thetext>Per the section of the WebGL spec on Resource Restrictions (currently Section 4.2), the contents of renderbuffers must be initialized before their first use, so that garbage can not be read back from them. To implement this, when a renderbuffer is first attached to a complete FBO, or when an FBO becomes complete and it has uninitialized renderbuffers attached, the appropriate planes of the FBO must be cleared.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228719</commentid>
    <comment_count>1</comment_count>
      <attachid>56665</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-05-20 20:09:28 -0700</bug_when>
    <thetext>Created attachment 56665
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229906</commentid>
    <comment_count>2</comment_count>
      <attachid>56665</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-05-24 14:24:24 -0700</bug_when>
    <thetext>Comment on attachment 56665
patch

This looks good overall. A few comments, one affecting correctness.

WebCore/html/canvas/WebGLFramebuffer.cpp:83
 +      // lifespan of CanvanObject changes.
CanvanObject -&gt; CanvasObject


WebCore/html/canvas/WebGLFramebuffer.cpp:196
 +      }
This can be written more concisely:

if (initDepth &amp;&amp; initStencil &amp;&amp; m_depthStencilAttachment) {
    (reinterpret_cast&lt;WebGLRenderbuffer*&gt;(m_depthStencilAttachment))-&gt;setInitialized();
} else {
    if (initDepth)
        (reinterpret_cast&lt;WebGLRenderbuffer*&gt;(m_depthAttachment))-&gt;setInitialized();
    if (initStencil)
        (reinterpret_cast&lt;WebGLRenderbuffer*&gt;(m_stencilAttachment))-&gt;setInitialized();
}


WebCore/html/canvas/WebGLFramebuffer.h:73
 +          CanvasObject* m_depthStencilAttachment;
These need to be RefPtr&lt;CanvasObject*&gt;, or they can refer to deleted renderbuffers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229915</commentid>
    <comment_count>3</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-05-24 14:45:27 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 56665 [details])
&gt; This looks good overall. A few comments, one affecting correctness.
&gt; 
&gt; WebCore/html/canvas/WebGLFramebuffer.cpp:83
&gt;  +      // lifespan of CanvanObject changes.
&gt; CanvanObject -&gt; CanvasObject
&gt; 
&gt; 
&gt; WebCore/html/canvas/WebGLFramebuffer.cpp:196
&gt;  +      }
&gt; This can be written more concisely:
&gt; 
&gt; if (initDepth &amp;&amp; initStencil &amp;&amp; m_depthStencilAttachment) {
&gt;     (reinterpret_cast&lt;WebGLRenderbuffer*&gt;(m_depthStencilAttachment))-&gt;setInitialized();
&gt; } else {
&gt;     if (initDepth)
&gt;         (reinterpret_cast&lt;WebGLRenderbuffer*&gt;(m_depthAttachment))-&gt;setInitialized();
&gt;     if (initStencil)
&gt;         (reinterpret_cast&lt;WebGLRenderbuffer*&gt;(m_stencilAttachment))-&gt;setInitialized();
&gt; }
&gt; 
&gt; 
&gt; WebCore/html/canvas/WebGLFramebuffer.h:73
&gt;  +          CanvasObject* m_depthStencilAttachment;
&gt; These need to be RefPtr&lt;CanvasObject*&gt;, or they can refer to deleted renderbuffers.

In the logic we check if attachment-&gt;object()==0, which guard again referencing deleted CanvasObjects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229918</commentid>
    <comment_count>4</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-05-24 14:48:40 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; (From update of attachment 56665 [details] [details])
&gt; &gt; This looks good overall. A few comments, one affecting correctness.
&gt; &gt; 
&gt; &gt; WebCore/html/canvas/WebGLFramebuffer.cpp:83
&gt; &gt;  +      // lifespan of CanvanObject changes.
&gt; &gt; CanvanObject -&gt; CanvasObject
&gt; &gt; 
&gt; &gt; 
&gt; &gt; WebCore/html/canvas/WebGLFramebuffer.cpp:196
&gt; &gt;  +      }
&gt; &gt; This can be written more concisely:
&gt; &gt; 
&gt; &gt; if (initDepth &amp;&amp; initStencil &amp;&amp; m_depthStencilAttachment) {
&gt; &gt;     (reinterpret_cast&lt;WebGLRenderbuffer*&gt;(m_depthStencilAttachment))-&gt;setInitialized();
&gt; &gt; } else {
&gt; &gt;     if (initDepth)
&gt; &gt;         (reinterpret_cast&lt;WebGLRenderbuffer*&gt;(m_depthAttachment))-&gt;setInitialized();
&gt; &gt;     if (initStencil)
&gt; &gt;         (reinterpret_cast&lt;WebGLRenderbuffer*&gt;(m_stencilAttachment))-&gt;setInitialized();
&gt; &gt; }
&gt; &gt; 
&gt; &gt; 
&gt; &gt; WebCore/html/canvas/WebGLFramebuffer.h:73
&gt; &gt;  +          CanvasObject* m_depthStencilAttachment;
&gt; &gt; These need to be RefPtr&lt;CanvasObject*&gt;, or they can refer to deleted renderbuffers.
&gt; 
&gt; In the logic we check if attachment-&gt;object()==0, which guard again referencing deleted CanvasObjects.

I don&apos;t believe this is sufficient. Consider this sequence of operations:

1. A renderbuffer is attached to a framebuffer. A pointer to the WebGLRenderbuffer is stored in the WebGLFramebuffer object. For the purposes of example, say that the framebuffer is still incomplete at this point.
2. All JavaScript references to the renderbuffer, but not the framebuffer, are dropped. The WebGLRenderbuffer&apos;s reference count goes to 0 and the C++ object is deleted. The WebGLFramebuffer now points to deleted storage.
3. A different renderbuffer is attached to the WebGLFramebuffer. The old, deleted pointer, is queried.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229931</commentid>
    <comment_count>5</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-05-24 15:02:08 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; (In reply to comment #2)
&gt; &gt; &gt; (From update of attachment 56665 [details] [details] [details])
&gt; &gt; &gt; This looks good overall. A few comments, one affecting correctness.
&gt; &gt; &gt; 
&gt; &gt; &gt; WebCore/html/canvas/WebGLFramebuffer.cpp:83
&gt; &gt; &gt;  +      // lifespan of CanvanObject changes.
&gt; &gt; &gt; CanvanObject -&gt; CanvasObject
&gt; &gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; WebCore/html/canvas/WebGLFramebuffer.cpp:196
&gt; &gt; &gt;  +      }
&gt; &gt; &gt; This can be written more concisely:
&gt; &gt; &gt; 
&gt; &gt; &gt; if (initDepth &amp;&amp; initStencil &amp;&amp; m_depthStencilAttachment) {
&gt; &gt; &gt;     (reinterpret_cast&lt;WebGLRenderbuffer*&gt;(m_depthStencilAttachment))-&gt;setInitialized();
&gt; &gt; &gt; } else {
&gt; &gt; &gt;     if (initDepth)
&gt; &gt; &gt;         (reinterpret_cast&lt;WebGLRenderbuffer*&gt;(m_depthAttachment))-&gt;setInitialized();
&gt; &gt; &gt;     if (initStencil)
&gt; &gt; &gt;         (reinterpret_cast&lt;WebGLRenderbuffer*&gt;(m_stencilAttachment))-&gt;setInitialized();
&gt; &gt; &gt; }
&gt; &gt; &gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; WebCore/html/canvas/WebGLFramebuffer.h:73
&gt; &gt; &gt;  +          CanvasObject* m_depthStencilAttachment;
&gt; &gt; &gt; These need to be RefPtr&lt;CanvasObject*&gt;, or they can refer to deleted renderbuffers.
&gt; &gt; 
&gt; &gt; In the logic we check if attachment-&gt;object()==0, which guard again referencing deleted CanvasObjects.
&gt; 
&gt; I don&apos;t believe this is sufficient. Consider this sequence of operations:
&gt; 
&gt; 1. A renderbuffer is attached to a framebuffer. A pointer to the WebGLRenderbuffer is stored in the WebGLFramebuffer object. For the purposes of example, say that the framebuffer is still incomplete at this point.
&gt; 2. All JavaScript references to the renderbuffer, but not the framebuffer, are dropped. The WebGLRenderbuffer&apos;s reference count goes to 0 and the C++ object is deleted. The WebGLFramebuffer now points to deleted storage.
&gt; 3. A different renderbuffer is attached to the WebGLFramebuffer. The old, deleted pointer, is queried.

That&apos;s correct.  But once an CanvasObject is created, a RefPtr is added in the object list in WebGLRenderingContext, and is never deleted until the destruction of WebGLRenderingContext.  So in this case, we don&apos;t need to worry about the renference count goes to 0.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229956</commentid>
    <comment_count>6</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-05-24 15:46:51 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; (In reply to comment #3)
&gt; &gt; &gt; (In reply to comment #2)
&gt; &gt; &gt; &gt; (From update of attachment 56665 [details] [details] [details] [details])
&gt; &gt; &gt; &gt; This looks good overall. A few comments, one affecting correctness.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; WebCore/html/canvas/WebGLFramebuffer.cpp:83
&gt; &gt; &gt; &gt;  +      // lifespan of CanvanObject changes.
&gt; &gt; &gt; &gt; CanvanObject -&gt; CanvasObject
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; WebCore/html/canvas/WebGLFramebuffer.cpp:196
&gt; &gt; &gt; &gt;  +      }
&gt; &gt; &gt; &gt; This can be written more concisely:
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; if (initDepth &amp;&amp; initStencil &amp;&amp; m_depthStencilAttachment) {
&gt; &gt; &gt; &gt;     (reinterpret_cast&lt;WebGLRenderbuffer*&gt;(m_depthStencilAttachment))-&gt;setInitialized();
&gt; &gt; &gt; &gt; } else {
&gt; &gt; &gt; &gt;     if (initDepth)
&gt; &gt; &gt; &gt;         (reinterpret_cast&lt;WebGLRenderbuffer*&gt;(m_depthAttachment))-&gt;setInitialized();
&gt; &gt; &gt; &gt;     if (initStencil)
&gt; &gt; &gt; &gt;         (reinterpret_cast&lt;WebGLRenderbuffer*&gt;(m_stencilAttachment))-&gt;setInitialized();
&gt; &gt; &gt; &gt; }
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; WebCore/html/canvas/WebGLFramebuffer.h:73
&gt; &gt; &gt; &gt;  +          CanvasObject* m_depthStencilAttachment;
&gt; &gt; &gt; &gt; These need to be RefPtr&lt;CanvasObject*&gt;, or they can refer to deleted renderbuffers.
&gt; &gt; &gt; 
&gt; &gt; &gt; In the logic we check if attachment-&gt;object()==0, which guard again referencing deleted CanvasObjects.
&gt; &gt; 
&gt; &gt; I don&apos;t believe this is sufficient. Consider this sequence of operations:
&gt; &gt; 
&gt; &gt; 1. A renderbuffer is attached to a framebuffer. A pointer to the WebGLRenderbuffer is stored in the WebGLFramebuffer object. For the purposes of example, say that the framebuffer is still incomplete at this point.
&gt; &gt; 2. All JavaScript references to the renderbuffer, but not the framebuffer, are dropped. The WebGLRenderbuffer&apos;s reference count goes to 0 and the C++ object is deleted. The WebGLFramebuffer now points to deleted storage.
&gt; &gt; 3. A different renderbuffer is attached to the WebGLFramebuffer. The old, deleted pointer, is queried.
&gt; 
&gt; That&apos;s correct.  But once an CanvasObject is created, a RefPtr is added in the object list in WebGLRenderingContext, and is never deleted until the destruction of WebGLRenderingContext.  So in this case, we don&apos;t need to worry about the renference count goes to 0.

Right, I&apos;d forgotten about that object list. Could you instead add a comment above these fields in WebGLFramebuffer indicating that these objects are kept alive by the global table in WebGLRenderingContext?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229961</commentid>
    <comment_count>7</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-05-24 15:51:20 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; (In reply to comment #4)
&gt; &gt; &gt; (In reply to comment #3)
&gt; &gt; &gt; &gt; (In reply to comment #2)
&gt; &gt; &gt; &gt; &gt; (From update of attachment 56665 [details] [details] [details] [details] [details])
&gt; &gt; &gt; &gt; &gt; This looks good overall. A few comments, one affecting correctness.
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; WebCore/html/canvas/WebGLFramebuffer.cpp:83
&gt; &gt; &gt; &gt; &gt;  +      // lifespan of CanvanObject changes.
&gt; &gt; &gt; &gt; &gt; CanvanObject -&gt; CanvasObject
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; WebCore/html/canvas/WebGLFramebuffer.cpp:196
&gt; &gt; &gt; &gt; &gt;  +      }
&gt; &gt; &gt; &gt; &gt; This can be written more concisely:
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; if (initDepth &amp;&amp; initStencil &amp;&amp; m_depthStencilAttachment) {
&gt; &gt; &gt; &gt; &gt;     (reinterpret_cast&lt;WebGLRenderbuffer*&gt;(m_depthStencilAttachment))-&gt;setInitialized();
&gt; &gt; &gt; &gt; &gt; } else {
&gt; &gt; &gt; &gt; &gt;     if (initDepth)
&gt; &gt; &gt; &gt; &gt;         (reinterpret_cast&lt;WebGLRenderbuffer*&gt;(m_depthAttachment))-&gt;setInitialized();
&gt; &gt; &gt; &gt; &gt;     if (initStencil)
&gt; &gt; &gt; &gt; &gt;         (reinterpret_cast&lt;WebGLRenderbuffer*&gt;(m_stencilAttachment))-&gt;setInitialized();
&gt; &gt; &gt; &gt; &gt; }
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; WebCore/html/canvas/WebGLFramebuffer.h:73
&gt; &gt; &gt; &gt; &gt;  +          CanvasObject* m_depthStencilAttachment;
&gt; &gt; &gt; &gt; &gt; These need to be RefPtr&lt;CanvasObject*&gt;, or they can refer to deleted renderbuffers.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; In the logic we check if attachment-&gt;object()==0, which guard again referencing deleted CanvasObjects.
&gt; &gt; &gt; 
&gt; &gt; &gt; I don&apos;t believe this is sufficient. Consider this sequence of operations:
&gt; &gt; &gt; 
&gt; &gt; &gt; 1. A renderbuffer is attached to a framebuffer. A pointer to the WebGLRenderbuffer is stored in the WebGLFramebuffer object. For the purposes of example, say that the framebuffer is still incomplete at this point.
&gt; &gt; &gt; 2. All JavaScript references to the renderbuffer, but not the framebuffer, are dropped. The WebGLRenderbuffer&apos;s reference count goes to 0 and the C++ object is deleted. The WebGLFramebuffer now points to deleted storage.
&gt; &gt; &gt; 3. A different renderbuffer is attached to the WebGLFramebuffer. The old, deleted pointer, is queried.
&gt; &gt; 
&gt; &gt; That&apos;s correct.  But once an CanvasObject is created, a RefPtr is added in the object list in WebGLRenderingContext, and is never deleted until the destruction of WebGLRenderingContext.  So in this case, we don&apos;t need to worry about the renference count goes to 0.
&gt; 
&gt; Right, I&apos;d forgotten about that object list. Could you instead add a comment above these fields in WebGLFramebuffer indicating that these objects are kept alive by the global table in WebGLRenderingContext?

Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229979</commentid>
    <comment_count>8</comment_count>
      <attachid>56944</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-05-24 16:39:26 -0700</bug_when>
    <thetext>Created attachment 56944
revised patch : responding to kbr&apos;s review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229986</commentid>
    <comment_count>9</comment_count>
      <attachid>56944</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-05-24 17:05:49 -0700</bug_when>
    <thetext>Comment on attachment 56944
revised patch : responding to kbr&apos;s review

Looks good to me. Nice work, in particular on handling the case where a color attachment becomes valid because of a call to texImage2D or copyTexImage2D.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230318</commentid>
    <comment_count>10</comment_count>
      <attachid>56944</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-05-25 09:49:03 -0700</bug_when>
    <thetext>Comment on attachment 56944
revised patch : responding to kbr&apos;s review

Just a few typos:

WebCore/ChangeLog:5
 +          Implement lazy clearing of renderbuffers
Typo: implement.

WebCore/html/canvas/WebGLFramebuffer.cpp:134
 +      bool isSissorEnabled = false;
Typo: Scissor

WebCore/platform/graphics/mac/GraphicsContext3DMac.cpp:332
 +      GLboolean isSissorEnabled = GL_FALSE;
Ditto.


Another thing -- this is just a clarity suggestion. Would it be more descriptive to define a simple Attachment abstraction, which holds CanvasObject* and manages all casting and validity checking?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230350</commentid>
    <comment_count>11</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-05-25 10:57:01 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 56944 [details])
&gt; Just a few typos:
&gt; 
&gt; WebCore/ChangeLog:5
&gt;  +          Implement lazy clearing of renderbuffers
&gt; Typo: implement.
&gt; 

The original spelling is correct.

&gt; WebCore/html/canvas/WebGLFramebuffer.cpp:134
&gt;  +      bool isSissorEnabled = false;
&gt; Typo: Scissor
&gt; 

Fixed.

&gt; WebCore/platform/graphics/mac/GraphicsContext3DMac.cpp:332
&gt;  +      GLboolean isSissorEnabled = GL_FALSE;
&gt; Ditto.
&gt; 

Fixed.

&gt; 
&gt; Another thing -- this is just a clarity suggestion. Would it be more descriptive to define a simple Attachment abstraction, which holds CanvasObject* and manages all casting and validity checking?

I added two helper functions to deal with casting and validity checking.  Now the code is much cleaner.  Thanks for the suggestion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230355</commentid>
    <comment_count>12</comment_count>
      <attachid>57029</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-05-25 10:58:37 -0700</bug_when>
    <thetext>Created attachment 57029
revised patch : responding to Dimitri Glazkov&apos;s review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230433</commentid>
    <comment_count>13</comment_count>
      <attachid>57029</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-05-25 13:54:31 -0700</bug_when>
    <thetext>Comment on attachment 57029
revised patch : responding to Dimitri Glazkov&apos;s review

ok. isInitialized/isUninitialized could&apos;ve been just local functions, but this works too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>231226</commentid>
    <comment_count>14</comment_count>
      <attachid>57029</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-05-27 04:43:47 -0700</bug_when>
    <thetext>Comment on attachment 57029
revised patch : responding to Dimitri Glazkov&apos;s review

Clearing flags on attachment: 57029

Committed r60290: &lt;http://trac.webkit.org/changeset/60290&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>231227</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-05-27 04:43:52 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56665</attachid>
            <date>2010-05-20 20:09:28 -0700</date>
            <delta_ts>2010-05-24 16:39:26 -0700</delta_ts>
            <desc>patch</desc>
            <filename>init.patch</filename>
            <type>text/plain</type>
            <size>30882</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1OTkwMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzkgQEAKKzIwMTAtMDUtMjAgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1l
bnQgbGF6eSBjbGVhcmluZyBvZiByZW5kZXJidWZmZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjI0OAorCisgICAgICAgIFRlc3Q6IGZhc3QvY2Fu
dmFzL3dlYmdsL3JlbmRlcmJ1ZmZlci1pbml0aWFsaXphdGlvbi5odG1sCisKKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
RnJhbWVidWZmZXI6OldlYkdMRnJhbWVidWZmZXIpOiBJbml0IGFkZGVkIG1lbWJlcnMuCisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTEZyYW1lYnVmZmVyOjpzZXRBdHRhY2htZW50KTogU2V0IGF0dGFj
aG1lbnQgb2JqZWN0LgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6b25CaW5k
KTogUGVyZm9ybSBidWZmZXIgY2xlYXJpbmcgaWYgbmVlZGVkLgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xGcmFtZWJ1ZmZlcjo6b25BdHRhY2hlZE9iamVjdENoYW5nZSk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6aW5pdGlhbGl6ZVJlbmRlcmJ1ZmZlcnMpOiBD
bGVhciB1bi1pbml0aWFsaXplZCByZW5kZXJidWZmZXJzIGlmIGZyYW1lYnVmZmVyIGlzIGNvbXBs
ZXRlLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaDoKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OmlzRGVwdGhBdHRhY2hlZCk6IENoYW5nZWQgdG8g
Y2hlY2sgb2JqZWN0LgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6aXNTdGVu
Y2lsQXR0YWNoZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6
OmlzRGVwdGhTdGVuY2lsQXR0YWNoZWQpOiBEaXR0by4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmJ1ZmZl
cjo6V2ViR0xSZW5kZXJidWZmZXIpOiBJbml0IGFkZGVkIG1lbWJlcnMuCisgICAgICAgICogaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJidWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyYnVmZmVyOjppc0luaXRpYWxpemVkKTogQXMgdGhlIGZ1bmN0aW9uIG5hbWUuCisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmJ1ZmZlcjo6c2V0SW5pdGlhbGl6ZWQpOiBEaXR0by4KKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kRnJhbWVidWZmZXIpOiBDYWxsIG9u
QmluZCgpLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4
SW1hZ2UyRCk6IENhbGwgb25BdHRhY2hlZE9iamVjdENoYW5nZSgpLgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVSZW5kZXJidWZmZXIpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlVGV4dHVyZSk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmcmFtZWJ1ZmZl
clJlbmRlcmJ1ZmZlcik6IENhbGwgc2V0QXR0YWNobWVudC4KKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQpOiBDYWxsIG9uQXR0YWNo
ZWRPYmplY3RDaGFuZ2UoKS4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6cmVuZGVyYnVmZmVyU3RvcmFnZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEQmFzZSk6IERpdHRvLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZSk6IEluaXRpYWxpemUgaW50ZXJuYWwgYnVm
ZmVycy4KKwogMjAxMC0wNS0yMCAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgU3RvcCBsZWFraW5nIGFsbCBDQUNGQ29udGV4dHMKSW5kZXg6IFdlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcAkocmV2aXNpb24gNTk4OTgpCisrKyBXZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwyNiAr
MzksNTIgQEAgUGFzc1JlZlB0cjxXZWJHTEZyYW1lYnVmZmVyPiBXZWJHTEZyYW1lYgogCiBXZWJH
TEZyYW1lYnVmZmVyOjpXZWJHTEZyYW1lYnVmZmVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY3R4
KQogICAgIDogQ2FudmFzT2JqZWN0KGN0eCkKLSAgICAsIG1faXNEZXB0aEF0dGFjaGVkKGZhbHNl
KQotICAgICwgbV9pc1N0ZW5jaWxBdHRhY2hlZChmYWxzZSkKLSAgICAsIG1faXNEZXB0aFN0ZW5j
aWxBdHRhY2hlZChmYWxzZSkKKyAgICAsIG1fY29sb3JBdHRhY2htZW50KDApCisgICAgLCBtX2Rl
cHRoQXR0YWNobWVudCgwKQorICAgICwgbV9zdGVuY2lsQXR0YWNobWVudCgwKQorICAgICwgbV9k
ZXB0aFN0ZW5jaWxBdHRhY2htZW50KDApCiB7CiAgICAgc2V0T2JqZWN0KGNvbnRleHQoKS0+Z3Jh
cGhpY3NDb250ZXh0M0QoKS0+Y3JlYXRlRnJhbWVidWZmZXIoKSk7CiB9CiAKLXZvaWQgV2ViR0xG
cmFtZWJ1ZmZlcjo6c2V0SXNBdHRhY2hlZCh1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIGJvb2wg
aXNBdHRhY2hlZCkKK3ZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6c2V0QXR0YWNobWVudCh1bnNpZ25l
ZCBsb25nIGF0dGFjaG1lbnQsIENhbnZhc09iamVjdCogYXR0YWNoZWRPYmplY3QpCiB7CisgICAg
aWYgKCFvYmplY3QoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChhdHRhY2hlZE9iamVjdCAm
JiAhYXR0YWNoZWRPYmplY3QtPm9iamVjdCgpKQorICAgICAgICBhdHRhY2hlZE9iamVjdCA9IDA7
CiAgICAgc3dpdGNoIChhdHRhY2htZW50KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
Q09MT1JfQVRUQUNITUVOVDA6CisgICAgICAgIG1fY29sb3JBdHRhY2htZW50ID0gYXR0YWNoZWRP
YmplY3Q7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRI
X0FUVEFDSE1FTlQ6Ci0gICAgICAgIG1faXNEZXB0aEF0dGFjaGVkID0gaXNBdHRhY2hlZDsKKyAg
ICAgICAgbV9kZXB0aEF0dGFjaG1lbnQgPSBhdHRhY2hlZE9iamVjdDsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5UOgotICAgICAg
ICBtX2lzU3RlbmNpbEF0dGFjaGVkID0gaXNBdHRhY2hlZDsKKyAgICAgICAgbV9zdGVuY2lsQXR0
YWNobWVudCA9IGF0dGFjaGVkT2JqZWN0OwogICAgICAgICBicmVhazsKICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQ6Ci0gICAgICAgIG1faXNEZXB0
aFN0ZW5jaWxBdHRhY2hlZCA9IGlzQXR0YWNoZWQ7CisgICAgICAgIG1fZGVwdGhTdGVuY2lsQXR0
YWNobWVudCA9IGF0dGFjaGVkT2JqZWN0OwogICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGluaXRpYWxpemVSZW5kZXJidWZmZXJzKCk7Cit9
CisKK3ZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6b25CaW5kKCkKK3sKKyAgICBpbml0aWFsaXplUmVu
ZGVyYnVmZmVycygpOworfQorCit2b2lkIFdlYkdMRnJhbWVidWZmZXI6Om9uQXR0YWNoZWRPYmpl
Y3RDaGFuZ2UoQ2FudmFzT2JqZWN0KiBvYmplY3QpCit7CisgICAgLy8gQ3VycmVudGx5IG9iamVj
dCA9PSAwIGlzIG5vdCBjb25zaWRlcmVkLCBidXQgdGhpcyBtaWdodCBjaGFuZ2UgaWYgdGhlCisg
ICAgLy8gbGlmZXNwYW4gb2YgQ2FudmFuT2JqZWN0IGNoYW5nZXMuCisgICAgaWYgKG9iamVjdAor
ICAgICAgICAmJiAob2JqZWN0ID09IG1fY29sb3JBdHRhY2htZW50IHx8IG9iamVjdCA9PSBtX2Rl
cHRoQXR0YWNobWVudAorICAgICAgICAgICAgfHwgb2JqZWN0ID09IG1fc3RlbmNpbEF0dGFjaG1l
bnQgfHwgb2JqZWN0ID09IG1fZGVwdGhTdGVuY2lsQXR0YWNobWVudCkpCisgICAgICAgIGluaXRp
YWxpemVSZW5kZXJidWZmZXJzKCk7CiB9CiAKIHZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6X2RlbGV0
ZU9iamVjdChQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKQEAgLTY2LDYgKzkyLDExMCBAQCB2b2lk
IFdlYkdMRnJhbWVidWZmZXI6Ol9kZWxldGVPYmplY3QoUGxhCiAgICAgY29udGV4dCgpLT5ncmFw
aGljc0NvbnRleHQzRCgpLT5kZWxldGVGcmFtZWJ1ZmZlcihvYmplY3QpOwogfQogCit2b2lkIFdl
YkdMRnJhbWVidWZmZXI6OmluaXRpYWxpemVSZW5kZXJidWZmZXJzKCkKK3sKKyAgICBpZiAoIW9i
amVjdCgpKQorICAgICAgICByZXR1cm47CisgICAgYm9vbCBpbml0Q29sb3IgPSBmYWxzZSwgaW5p
dERlcHRoID0gZmFsc2UsIGluaXRTdGVuY2lsID0gZmFsc2U7CisgICAgdW5zaWduZWQgbG9uZyBt
YXNrID0gMDsKKyAgICBpZiAobV9jb2xvckF0dGFjaG1lbnQgJiYgbV9jb2xvckF0dGFjaG1lbnQt
Pm9iamVjdCgpICYmIG1fY29sb3JBdHRhY2htZW50LT5pc1JlbmRlcmJ1ZmZlcigpCisgICAgICAg
ICYmICEocmVpbnRlcnByZXRfY2FzdDxXZWJHTFJlbmRlcmJ1ZmZlcio+KG1fY29sb3JBdHRhY2ht
ZW50KSktPmlzSW5pdGlhbGl6ZWQoKSkgeworICAgICAgICBpbml0Q29sb3IgPSB0cnVlOworICAg
ICAgICBtYXNrIHw9IEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUOworICAgIH0K
KyAgICBpZiAobV9kZXB0aEF0dGFjaG1lbnQgJiYgbV9kZXB0aEF0dGFjaG1lbnQtPm9iamVjdCgp
ICYmIG1fZGVwdGhBdHRhY2htZW50LT5pc1JlbmRlcmJ1ZmZlcigpCisgICAgICAgICYmICEocmVp
bnRlcnByZXRfY2FzdDxXZWJHTFJlbmRlcmJ1ZmZlcio+KG1fZGVwdGhBdHRhY2htZW50KSktPmlz
SW5pdGlhbGl6ZWQoKSkgeworICAgICAgICBpbml0RGVwdGggPSB0cnVlOworICAgICAgICBtYXNr
IHw9IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9CVUZGRVJfQklUOworICAgIH0KKyAgICBpZiAo
bV9zdGVuY2lsQXR0YWNobWVudCAmJiBtX3N0ZW5jaWxBdHRhY2htZW50LT5vYmplY3QoKSAmJiBt
X3N0ZW5jaWxBdHRhY2htZW50LT5pc1JlbmRlcmJ1ZmZlcigpCisgICAgICAgICYmICEocmVpbnRl
cnByZXRfY2FzdDxXZWJHTFJlbmRlcmJ1ZmZlcio+KG1fc3RlbmNpbEF0dGFjaG1lbnQpKS0+aXNJ
bml0aWFsaXplZCgpKSB7CisgICAgICAgIGluaXRTdGVuY2lsID0gdHJ1ZTsKKyAgICAgICAgbWFz
ayB8PSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUOworICAgIH0KKyAgICBp
ZiAobV9kZXB0aFN0ZW5jaWxBdHRhY2htZW50ICYmIG1fZGVwdGhTdGVuY2lsQXR0YWNobWVudC0+
b2JqZWN0KCkgJiYgbV9kZXB0aFN0ZW5jaWxBdHRhY2htZW50LT5pc1JlbmRlcmJ1ZmZlcigpCisg
ICAgICAgICYmICEocmVpbnRlcnByZXRfY2FzdDxXZWJHTFJlbmRlcmJ1ZmZlcio+KG1fZGVwdGhT
dGVuY2lsQXR0YWNobWVudCkpLT5pc0luaXRpYWxpemVkKCkpIHsKKyAgICAgICAgaW5pdERlcHRo
ID0gdHJ1ZTsKKyAgICAgICAgaW5pdFN0ZW5jaWwgPSB0cnVlOworICAgICAgICBtYXNrIHw9IChH
cmFwaGljc0NvbnRleHQzRDo6REVQVEhfQlVGRkVSX0JJVCB8IEdyYXBoaWNzQ29udGV4dDNEOjpT
VEVOQ0lMX0JVRkZFUl9CSVQpOworICAgIH0KKyAgICBpZiAoIWluaXRDb2xvciAmJiAhaW5pdERl
cHRoICYmICFpbml0U3RlbmNpbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gV2Ugb25seSBj
bGVhciB1bi1pbml0aWFsaXplZCByZW5kZXJidWZmZXJzIHdoZW4gdGhleSBhcmUgcmVhZHkgdG8g
YmUKKyAgICAvLyByZWFkLCBpLmUuLCB3aGVuIHRoZSBmcmFtZWJ1ZmZlciBpcyBjb21wbGV0ZS4K
KyAgICBHcmFwaGljc0NvbnRleHQzRCogZzNkID0gY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQz
RCgpOworICAgIGlmIChnM2QtPmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQU1FQlVGRkVSKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQ09NUExF
VEUpCisgICAgICAgIHJldHVybjsKKworICAgIGZsb2F0IGNvbG9yQ2xlYXJWYWx1ZVtdID0gezAs
IDAsIDAsIDB9LCBkZXB0aENsZWFyVmFsdWUgPSAwOworICAgIGludCBzdGVuY2lsQ2xlYXJWYWx1
ZSA9IDA7CisgICAgdW5zaWduZWQgY2hhciBjb2xvck1hc2tbXSA9IHsxLCAxLCAxLCAxfSwgZGVw
dGhNYXNrID0gMSwgc3RlbmNpbE1hc2sgPSAxOworICAgIGJvb2wgaXNTaXNzb3JFbmFibGVkID0g
ZmFsc2U7CisgICAgYm9vbCBpc0RpdGhlckVuYWJsZWQgPSBmYWxzZTsKKyAgICBpZiAoaW5pdENv
bG9yKSB7CisgICAgICAgIGczZC0+Z2V0RmxvYXR2KEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9D
TEVBUl9WQUxVRSwgY29sb3JDbGVhclZhbHVlKTsKKyAgICAgICAgZzNkLT5nZXRCb29sZWFudihH
cmFwaGljc0NvbnRleHQzRDo6Q09MT1JfV1JJVEVNQVNLLCBjb2xvck1hc2spOworICAgICAgICBn
M2QtPmNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7CisgICAgICAgIGczZC0+Y29sb3JNYXNrKHRydWUs
IHRydWUsIHRydWUsIHRydWUpOworICAgIH0KKyAgICBpZiAoaW5pdERlcHRoKSB7CisgICAgICAg
IGczZC0+Z2V0RmxvYXR2KEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DTEVBUl9WQUxVRSwgJmRl
cHRoQ2xlYXJWYWx1ZSk7CisgICAgICAgIGczZC0+Z2V0Qm9vbGVhbnYoR3JhcGhpY3NDb250ZXh0
M0Q6OkRFUFRIX1dSSVRFTUFTSywgJmRlcHRoTWFzayk7CisgICAgICAgIGczZC0+Y2xlYXJEZXB0
aCgwKTsKKyAgICAgICAgZzNkLT5kZXB0aE1hc2sodHJ1ZSk7CisgICAgfQorICAgIGlmIChpbml0
U3RlbmNpbCkgeworICAgICAgICBnM2QtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpT
VEVOQ0lMX0NMRUFSX1ZBTFVFLCAmc3RlbmNpbENsZWFyVmFsdWUpOworICAgICAgICBnM2QtPmdl
dEJvb2xlYW52KEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1dSSVRFTUFTSywgJnN0ZW5jaWxN
YXNrKTsKKyAgICAgICAgZzNkLT5jbGVhclN0ZW5jaWwoMCk7CisgICAgICAgIGczZC0+c3RlbmNp
bE1hc2sodHJ1ZSk7CisgICAgfQorICAgIGlzU2lzc29yRW5hYmxlZCA9IGczZC0+aXNFbmFibGVk
KEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOworICAgIGczZC0+ZGlzYWJsZShHcmFw
aGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKKyAgICBpc0RpdGhlckVuYWJsZWQgPSBnM2Qt
PmlzRW5hYmxlZChHcmFwaGljc0NvbnRleHQzRDo6RElUSEVSKTsKKyAgICBnM2QtPmRpc2FibGUo
R3JhcGhpY3NDb250ZXh0M0Q6OkRJVEhFUik7CisKKyAgICBnM2QtPmNsZWFyKG1hc2spOworCisg
ICAgaWYgKGluaXRDb2xvcikgeworICAgICAgICBnM2QtPmNsZWFyQ29sb3IoY29sb3JDbGVhclZh
bHVlWzBdLCBjb2xvckNsZWFyVmFsdWVbMV0sIGNvbG9yQ2xlYXJWYWx1ZVsyXSwgY29sb3JDbGVh
clZhbHVlWzNdKTsKKyAgICAgICAgZzNkLT5jb2xvck1hc2soY29sb3JNYXNrWzBdLCBjb2xvck1h
c2tbMV0sIGNvbG9yTWFza1syXSwgY29sb3JNYXNrWzNdKTsKKyAgICB9CisgICAgaWYgKGluaXRE
ZXB0aCkgeworICAgICAgICBnM2QtPmNsZWFyRGVwdGgoZGVwdGhDbGVhclZhbHVlKTsKKyAgICAg
ICAgZzNkLT5kZXB0aE1hc2soZGVwdGhNYXNrKTsKKyAgICB9CisgICAgaWYgKGluaXRTdGVuY2ls
KSB7CisgICAgICAgIGczZC0+Y2xlYXJTdGVuY2lsKHN0ZW5jaWxDbGVhclZhbHVlKTsKKyAgICAg
ICAgZzNkLT5zdGVuY2lsTWFzayhzdGVuY2lsTWFzayk7CisgICAgfQorICAgIGlmIChpc1Npc3Nv
ckVuYWJsZWQpCisgICAgICAgIGczZC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09S
X1RFU1QpOworICAgIGVsc2UKKyAgICAgICAgZzNkLT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNE
OjpTQ0lTU09SX1RFU1QpOworICAgIGlmIChpc0RpdGhlckVuYWJsZWQpCisgICAgICAgIGczZC0+
ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpESVRIRVIpOworICAgIGVsc2UKKyAgICAgICAgZzNk
LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpESVRIRVIpOworCisgICAgaWYgKGluaXRDb2xv
cikKKyAgICAgICAgKHJlaW50ZXJwcmV0X2Nhc3Q8V2ViR0xSZW5kZXJidWZmZXIqPihtX2NvbG9y
QXR0YWNobWVudCkpLT5zZXRJbml0aWFsaXplZCgpOworICAgIGlmIChpbml0RGVwdGggJiYgaW5p
dFN0ZW5jaWwpIHsKKyAgICAgICAgaWYgKG1fZGVwdGhTdGVuY2lsQXR0YWNobWVudCkKKyAgICAg
ICAgICAgIChyZWludGVycHJldF9jYXN0PFdlYkdMUmVuZGVyYnVmZmVyKj4obV9kZXB0aFN0ZW5j
aWxBdHRhY2htZW50KSktPnNldEluaXRpYWxpemVkKCk7CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgKHJlaW50ZXJwcmV0X2Nhc3Q8V2ViR0xSZW5kZXJidWZmZXIqPihtX2RlcHRoQXR0YWNo
bWVudCkpLT5zZXRJbml0aWFsaXplZCgpOworICAgICAgICAgICAgKHJlaW50ZXJwcmV0X2Nhc3Q8
V2ViR0xSZW5kZXJidWZmZXIqPihtX3N0ZW5jaWxBdHRhY2htZW50KSktPnNldEluaXRpYWxpemVk
KCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoaW5pdERlcHRoKQorICAg
ICAgICAgICAgKHJlaW50ZXJwcmV0X2Nhc3Q8V2ViR0xSZW5kZXJidWZmZXIqPihtX2RlcHRoQXR0
YWNobWVudCkpLT5zZXRJbml0aWFsaXplZCgpOworICAgICAgICBpZiAoaW5pdFN0ZW5jaWwpCisg
ICAgICAgICAgICAocmVpbnRlcnByZXRfY2FzdDxXZWJHTFJlbmRlcmJ1ZmZlcio+KG1fc3RlbmNp
bEF0dGFjaG1lbnQpKS0+c2V0SW5pdGlhbGl6ZWQoKTsKKyAgICB9Cit9CisKIH0KIAogI2VuZGlm
IC8vIEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJh
bWVidWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVi
dWZmZXIuaAkocmV2aXNpb24gNTk4OTgpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJh
bWVidWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTggKzMyLDMwIEBACiAjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAorCiAgICAgY2xh
c3MgV2ViR0xGcmFtZWJ1ZmZlciA6IHB1YmxpYyBDYW52YXNPYmplY3QgewogICAgIHB1YmxpYzoK
ICAgICAgICAgdmlydHVhbCB+V2ViR0xGcmFtZWJ1ZmZlcigpIHsgZGVsZXRlT2JqZWN0KCk7IH0K
ICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+IGNy
ZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKLSAgICAgICAgCi0gICAgICAgIHZvaWQgc2V0
SXNBdHRhY2hlZCh1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIGJvb2wgaXNBdHRhY2hlZCk7CiAK
LSAgICAgICAgYm9vbCBpc0RlcHRoQXR0YWNoZWQoKSBjb25zdCB7IHJldHVybiBtX2lzRGVwdGhB
dHRhY2hlZDsgfQotICAgICAgICBib29sIGlzU3RlbmNpbEF0dGFjaGVkKCkgY29uc3QgeyByZXR1
cm4gbV9pc1N0ZW5jaWxBdHRhY2hlZDsgfQotICAgICAgICBib29sIGlzRGVwdGhTdGVuY2lsQXR0
YWNoZWQoKSBjb25zdCB7IHJldHVybiBtX2lzRGVwdGhTdGVuY2lsQXR0YWNoZWQ7IH0KKyAgICAg
ICAgYm9vbCBpc0RlcHRoQXR0YWNoZWQoKSBjb25zdCB7IHJldHVybiAobV9kZXB0aEF0dGFjaG1l
bnQgJiYgbV9kZXB0aEF0dGFjaG1lbnQtPm9iamVjdCgpKTsgfQorICAgICAgICBib29sIGlzU3Rl
bmNpbEF0dGFjaGVkKCkgY29uc3QgeyByZXR1cm4gKG1fc3RlbmNpbEF0dGFjaG1lbnQgJiYgbV9z
dGVuY2lsQXR0YWNobWVudC0+b2JqZWN0KCkpOyB9CisgICAgICAgIGJvb2wgaXNEZXB0aFN0ZW5j
aWxBdHRhY2hlZCgpIGNvbnN0IHsgcmV0dXJuIChtX2RlcHRoU3RlbmNpbEF0dGFjaG1lbnQgJiYg
bV9kZXB0aFN0ZW5jaWxBdHRhY2htZW50LT5vYmplY3QoKSk7IH0KKworICAgICAgICB2b2lkIHNl
dEF0dGFjaG1lbnQodW5zaWduZWQgbG9uZywgQ2FudmFzT2JqZWN0Kik7CisKKyAgICAgICAgLy8g
VGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgcmlnaHQgYWZ0ZXIgYSBmcmFtZWJ1ZmZlciBpcyBib3Vu
ZC4KKyAgICAgICAgLy8gQmVjYXVzZSByZW5kZXJidWZmZXJzIGFuZCB0ZXh0dXJlcyBhdHRhY2hl
ZCB0byB0aGUgZnJhbWVidWZmZXIgbWlnaHQKKyAgICAgICAgLy8gaGF2ZSBjaGFuZ2VkIGFuZCB0
aGUgZnJhbWVidWZmZXIgbWlnaHQgaGF2ZSBiZWNvbWUgY29tcGxldGUgd2hlbiBpdAorICAgICAg
ICAvLyBpc24ndCBib3VuZCwgc28gd2UgbmVlZCB0byBjbGVhciB1bi1pbml0aWFsaXplZCByZW5k
ZXJidWZmZXJzLgorICAgICAgICB2b2lkIG9uQmluZCgpOworCisgICAgICAgIC8vIFdoZW4gYSB0
ZXh0dXJlIG9yIGEgcmVuZGVyYnVmZmVyIGNoYW5nZXMsIHdlIG5lZWQgdG8gY2hlY2sgdGhlCisg
ICAgICAgIC8vIGN1cnJlbnQgYm91bmQgZnJhbWVidWZmZXI7IGlmIHRoZSBuZXdseSBjaGFuZ2Vk
IG9iamVjdCBpcyBhdHRhY2hlZAorICAgICAgICAvLyB0byB0aGUgZnJhbWVidWZmZXIgYW5kIHRo
ZSBmcmFtZWJ1ZmZlciBiZWNvbWVzIGNvbXBsZXRlLCB3ZSBuZWVkIHRvCisgICAgICAgIC8vIGNs
ZWFyIHVuLWluaXRpYWxpemVkIHJlbmRlcmJ1ZmZlcnMuCisgICAgICAgIHZvaWQgb25BdHRhY2hl
ZE9iamVjdENoYW5nZShDYW52YXNPYmplY3QqKTsKIAogICAgIHByb3RlY3RlZDoKICAgICAgICAg
V2ViR0xGcmFtZWJ1ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKQEAgLTUzLDkgKzY1LDEy
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIGJv
b2wgaXNGcmFtZWJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAotICAgICAgICBib29s
IG1faXNEZXB0aEF0dGFjaGVkOwotICAgICAgICBib29sIG1faXNTdGVuY2lsQXR0YWNoZWQ7Ci0g
ICAgICAgIGJvb2wgbV9pc0RlcHRoU3RlbmNpbEF0dGFjaGVkOworICAgICAgICB2b2lkIGluaXRp
YWxpemVSZW5kZXJidWZmZXJzKCk7CisKKyAgICAgICAgQ2FudmFzT2JqZWN0KiBtX2NvbG9yQXR0
YWNobWVudDsKKyAgICAgICAgQ2FudmFzT2JqZWN0KiBtX2RlcHRoQXR0YWNobWVudDsKKyAgICAg
ICAgQ2FudmFzT2JqZWN0KiBtX3N0ZW5jaWxBdHRhY2htZW50OworICAgICAgICBDYW52YXNPYmpl
Y3QqIG1fZGVwdGhTdGVuY2lsQXR0YWNobWVudDsKICAgICB9OwogICAgIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5j
cHAJKHJldmlzaW9uIDU5ODk4KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1
ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAgUGFzc1JlZlB0cjxXZWJH
TFJlbmRlcmJ1ZmZlcj4gV2ViR0xSZW5kZQogV2ViR0xSZW5kZXJidWZmZXI6OldlYkdMUmVuZGVy
YnVmZmVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY3R4KQogICAgIDogQ2FudmFzT2JqZWN0KGN0
eCkKICAgICAsIG1faW50ZXJuYWxmb3JtYXQoR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE0KQorICAg
ICwgbV9pbml0aWFsaXplZChmYWxzZSkKIHsKICAgICBzZXRPYmplY3QoY29udGV4dCgpLT5ncmFw
aGljc0NvbnRleHQzRCgpLT5jcmVhdGVSZW5kZXJidWZmZXIoKSk7CiB9CkluZGV4OiBXZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5oCShyZXZpc2lvbiA1OTg5OCkKKysrIFdlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDIs
NiArNDIsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgc2V0SW50ZXJuYWxm
b3JtYXQodW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCkgeyBtX2ludGVybmFsZm9ybWF0ID0g
aW50ZXJuYWxmb3JtYXQ7IH0KICAgICAgICAgdW5zaWduZWQgbG9uZyBnZXRJbnRlcm5hbGZvcm1h
dCgpIGNvbnN0IHsgcmV0dXJuIG1faW50ZXJuYWxmb3JtYXQ7IH0KIAorICAgICAgICBib29sIGlz
SW5pdGlhbGl6ZWQoKSBjb25zdCB7IHJldHVybiBtX2luaXRpYWxpemVkOyB9CisgICAgICAgIHZv
aWQgc2V0SW5pdGlhbGl6ZWQoKSB7IG1faW5pdGlhbGl6ZWQgPSB0cnVlOyB9CisKICAgICBwcm90
ZWN0ZWQ6CiAgICAgICAgIFdlYkdMUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dCop
OwogICAgICAgICAKQEAgLTUxLDYgKzU0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJidWZmZXIoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAK
ICAgICAgICAgdW5zaWduZWQgbG9uZyBtX2ludGVybmFsZm9ybWF0OworICAgICAgICBib29sIG1f
aW5pdGlhbGl6ZWQ7CiAgICAgfTsKICAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlz
aW9uIDU5ODk4KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzgsNiArMjM4LDggQEAgdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmJpbmRGcmFtZWJ1ZgogICAgIH0KICAgICBtX2ZyYW1lYnVmZmVyQmluZGluZyA9
IGJ1ZmZlcjsKICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcih0YXJnZXQsIGJ1ZmZlcik7
CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQorICAgICAgICBtX2ZyYW1lYnVmZmVyQmlu
ZGluZy0+b25CaW5kKCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0K
IApAQCAtNDMxLDI5ICs0MzMsMzEgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvbXBp
bGVTaGFkZQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleEltYWdlMkQodW5z
aWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgbGV2ZWwsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3Jt
YXQsIGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhl
aWdodCwgbG9uZyBib3JkZXIpCiB7CisgICAgUmVmUHRyPFdlYkdMVGV4dHVyZT4gdGV4ID0gMDsK
KyAgICBzd2l0Y2ggKHRhcmdldCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQ6CisgICAgICAgIHRleCA9IG1fdGV4dHVyZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVuaXRd
Lm1fdGV4dHVyZTJEQmluZGluZzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6CisgICAgICAgIHRleCA9
IG1fdGV4dHVyZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLm1fdGV4dHVyZUN1YmVNYXBCaW5k
aW5nOworICAgICAgICBicmVhazsKKyAgICB9CiAgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkp
IHsKICAgICAgICAgaWYgKGxldmVsICYmIFdlYkdMVGV4dHVyZTo6aXNOUE9UKHdpZHRoLCBoZWln
aHQpKSB7CiAgICAgICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQotICAgICAgICBSZWZQdHI8V2ViR0xUZXh0dXJlPiB0ZXggPSAwOwotICAgICAgICBzd2l0Y2gg
KHRhcmdldCkgewotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEOgot
ICAgICAgICAgICAgdGV4ID0gbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0ubV90
ZXh0dXJlMkRCaW5kaW5nOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKLSAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgotICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6Ci0gICAg
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToK
LSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElW
RV9aOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05F
R0FUSVZFX1o6Ci0gICAgICAgICAgICB0ZXggPSBtX3RleHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1
cmVVbml0XS5tX3RleHR1cmVDdWJlTWFwQmluZGluZzsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9CiAgICAgICAgIGlmICh0ZXggJiYgIWxldmVsKSAvLyBvbmx5IGZvciBsZXZlbCAwCiAg
ICAgICAgICAgICB0ZXgtPnNldFNpemUodGFyZ2V0LCB3aWR0aCwgaGVpZ2h0KTsKICAgICB9CiAg
ICAgbV9jb250ZXh0LT5jb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJp
bmRpbmcgJiYgdGV4KQorICAgICAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BdHRhY2hlZE9i
amVjdENoYW5nZSh0ZXguZ2V0KCkpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxz
ZSk7CiB9CiAKQEAgLTU0Nyw2ICs1NTEsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
ZGVsZXRlUmVuZGVyCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICByZW5kZXJidWZmZXItPmRl
bGV0ZU9iamVjdCgpOworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKKyAgICAgICAgbV9m
cmFtZWJ1ZmZlckJpbmRpbmctPm9uQXR0YWNoZWRPYmplY3RDaGFuZ2UocmVuZGVyYnVmZmVyKTsK
IH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZVNoYWRlcihXZWJHTFNoYWRl
ciogc2hhZGVyKQpAQCAtNTYzLDYgKzU2OSw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpkZWxldGVUZXh0dXIKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIHRleHR1cmUtPmRlbGV0
ZU9iamVjdCgpOworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKKyAgICAgICAgbV9mcmFt
ZWJ1ZmZlckJpbmRpbmctPm9uQXR0YWNoZWRPYmplY3RDaGFuZ2UodGV4dHVyZSk7CiB9CiAKIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZXB0aEZ1bmModW5zaWduZWQgbG9uZyBmdW5jKQpA
QCAtODQ1LDcgKzg1Myw2IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmcmFtZWJ1ZmZl
clIKICAgICB9CiAgICAgaWYgKGJ1ZmZlciAmJiBidWZmZXItPm9iamVjdCgpKSB7CiAgICAgICAg
IGJvb2wgaXNDb25mbGljdGVkID0gZmFsc2U7Ci0gICAgICAgIGJvb2wgaXNEZXB0aE9yU3RlbmNp
bCA9IHRydWU7CiAgICAgICAgIHN3aXRjaCAoYXR0YWNobWVudCkgewogICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5UOgogICAgICAgICAgICAgaWYgKG1fZnJh
bWVidWZmZXJCaW5kaW5nLT5pc0RlcHRoU3RlbmNpbEF0dGFjaGVkKCkgfHwgbV9mcmFtZWJ1ZmZl
ckJpbmRpbmctPmlzU3RlbmNpbEF0dGFjaGVkKCkpCkBAIC04NjUsMjQgKzg3MiwxNCBAQCB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJhbWVidWZmZXJSCiAgICAgICAgICAgICBpZiAoYnVm
ZmVyLT5nZXRJbnRlcm5hbGZvcm1hdCgpICE9IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVO
Q0lMKQogICAgICAgICAgICAgICAgIGlzQ29uZmxpY3RlZCA9IHRydWU7CiAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGlzRGVwdGhPclN0ZW5jaWwgPSBm
YWxzZTsKICAgICAgICAgfQogICAgICAgICBpZiAoaXNDb25mbGljdGVkKSB7CiAgICAgICAgICAg
ICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYg
KGlzRGVwdGhPclN0ZW5jaWwpCi0gICAgICAgICAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+c2V0
SXNBdHRhY2hlZChhdHRhY2htZW50LCB0cnVlKTsKLSAgICB9IGVsc2UgeyAvLyBEZXRhY2gKLSAg
ICAgICAgc3dpdGNoIChhdHRhY2htZW50KSB7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkRFUFRIX0FUVEFDSE1FTlQ6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNU
RU5DSUxfQVRUQUNITUVOVDoKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhf
U1RFTkNJTF9BVFRBQ0hNRU5UOgotICAgICAgICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPnNl
dElzQXR0YWNoZWQoYXR0YWNobWVudCwgZmFsc2UpOwotICAgICAgICB9CiAgICAgfQogICAgIG1f
Y29udGV4dC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIodGFyZ2V0LCBhdHRhY2htZW50LCByZW5k
ZXJidWZmZXJ0YXJnZXQsIGJ1ZmZlcik7CisgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPnNldEF0
dGFjaG1lbnQoYXR0YWNobWVudCwgYnVmZmVyKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0Nh
bGwoZmFsc2UpOwogfQogCkBAIC05MDEsNiArODk4LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmZyYW1lYnVmZmVyVAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIG1fY29udGV4
dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRl
eHR1cmUsIGxldmVsKTsKKyAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+c2V0QXR0YWNobWVudChh
dHRhY2htZW50LCB0ZXh0dXJlKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2Up
OwogfQogCkBAIC0xNzM0LDggKzE3MzIsMTEgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnJlbmRlcmJ1ZmZlcgogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfSU5ERVg4
OgogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUw6CiAgICAgICAgIG1f
Y29udGV4dC0+cmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJnZXQsIGludGVybmFsZm9ybWF0LCB3aWR0
aCwgaGVpZ2h0KTsKLSAgICAgICAgaWYgKG1fcmVuZGVyYnVmZmVyQmluZGluZykKKyAgICAgICAg
aWYgKG1fcmVuZGVyYnVmZmVyQmluZGluZykgewogICAgICAgICAgICAgbV9yZW5kZXJidWZmZXJC
aW5kaW5nLT5zZXRJbnRlcm5hbGZvcm1hdChpbnRlcm5hbGZvcm1hdCk7CisgICAgICAgICAgICBp
ZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAgICAgICAgICAgbV9mcmFtZWJ1ZmZlckJp
bmRpbmctPm9uQXR0YWNoZWRPYmplY3RDaGFuZ2UobV9yZW5kZXJidWZmZXJCaW5kaW5nLmdldCgp
KTsKKyAgICAgICAgfQogICAgICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwog
ICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgpAQCAtMTgwNCw2ICsxODA1LDIwIEBAIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEQmEKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1
bnNpZ25lZCBib3JkZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCB2b2lkKiBwaXhlbHMsIEV4Y2VwdGlv
bkNvZGUmIGVjKQogeworICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IHRleCA9IDA7CisgICAgc3dp
dGNoICh0YXJnZXQpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEOgor
ICAgICAgICB0ZXggPSBtX3RleHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVVbml0XS5tX3RleHR1
cmUyREJpbmRpbmc7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgorICAgICAgICB0ZXggPSBtX3RleHR1
cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVVbml0XS5tX3RleHR1cmVDdWJlTWFwQmluZGluZzsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQogICAgIC8vIEZJWE1FOiBGb3Igbm93IHdlIGlnbm9yZSBhbnkg
ZXJyb3JzIHJldHVybmVkCiAgICAgZWMgPSAwOwogICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgp
KSB7CkBAIC0xODExLDI1ICsxODI2LDEzIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0
ZXhJbWFnZTJEQmEKICAgICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9Ci0gICAgICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IHRleCA9IDA7Ci0gICAgICAgIHN3
aXRjaCAodGFyZ2V0KSB7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQ6Ci0gICAgICAgICAgICB0ZXggPSBtX3RleHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVVbml0
XS5tX3RleHR1cmUyREJpbmRpbmc7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgotICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6Ci0gICAg
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToK
LSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElW
RV9ZOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1o6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9N
QVBfTkVHQVRJVkVfWjoKLSAgICAgICAgICAgIHRleCA9IG1fdGV4dHVyZVVuaXRzW21fYWN0aXZl
VGV4dHVyZVVuaXRdLm1fdGV4dHVyZUN1YmVNYXBCaW5kaW5nOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KICAgICAgICAgaWYgKHRleCAmJiAhbGV2ZWwpIC8vIG9ubHkgZm9yIGxldmVs
IDAKICAgICAgICAgICAgIHRleC0+c2V0U2l6ZSh0YXJnZXQsIHdpZHRoLCBoZWlnaHQpOwogICAg
IH0KICAgICBtX2NvbnRleHQtPnRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlciwgZm9y
bWF0LCB0eXBlLCBwaXhlbHMpOworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiB0ZXgp
CisgICAgICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkF0dGFjaGVkT2JqZWN0Q2hhbmdlKHRl
eC5nZXQoKSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29u
dGV4dDNETWFjLmNwcAkocmV2aXNpb24gNTk4OTgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyMSwx
NSArMzIxLDUzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGUoaW50IHdpZHQKICAg
ICAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICB9CiAKLSAgICBpZiAobXVzdFJlc3RvcmVGQk8p
Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Jv
dW5kRkJPKTsKKyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKKyAgICAgICAgOjpnbEJpbmRG
cmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOworICAg
ICAgICBpZiAobV9ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQorICAgICAgICAgICAgbXVz
dFJlc3RvcmVGQk8gPSBmYWxzZTsKKyAgICB9CiAKLSAgICBHTGVudW0gY2xlYXJNYXNrID0gR0xf
Q09MT1JfQlVGRkVSX0JJVDsKLSAgICBpZiAobV9hdHRycy5kZXB0aCkKKyAgICAvLyBJbml0aWFs
aXplIHJlbmRlcmJ1ZmZlcnMgdG8gMC4KKyAgICBHTGJvb2xlYW4gY29sb3JNYXNrW10gPSB7R0xf
VFJVRSwgR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRX0sIGRlcHRoTWFzayA9IEdMX1RSVUUsIHN0
ZW5jaWxNYXNrID0gR0xfVFJVRTsKKyAgICBHTGJvb2xlYW4gaXNTaXNzb3JFbmFibGVkID0gR0xf
RkFMU0U7CisgICAgR0xib29sZWFuIGlzRGl0aGVyRW5hYmxlZCA9IEdMX0ZBTFNFOworICAgIEdM
Yml0ZmllbGQgY2xlYXJNYXNrID0gR0xfQ09MT1JfQlVGRkVSX0JJVDsKKyAgICA6OmdsR2V0Qm9v
bGVhbnYoR0xfQ09MT1JfV1JJVEVNQVNLLCBjb2xvck1hc2spOworICAgIDo6Z2xDb2xvck1hc2so
R0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSk7CisgICAgaWYgKG1fYXR0cnMuZGVw
dGgpIHsKKyAgICAgICAgOjpnbEdldEJvb2xlYW52KEdMX0RFUFRIX1dSSVRFTUFTSywgJmRlcHRo
TWFzayk7CisgICAgICAgIDo6Z2xEZXB0aE1hc2soR0xfVFJVRSk7CiAgICAgICAgIGNsZWFyTWFz
ayB8PSBHTF9ERVBUSF9CVUZGRVJfQklUOwotICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwpCisgICAg
fQorICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwpIHsKKyAgICAgICAgOjpnbEdldEJvb2xlYW52KEdM
X1NURU5DSUxfV1JJVEVNQVNLLCAmc3RlbmNpbE1hc2spOworICAgICAgICA6OmdsU3RlbmNpbE1h
c2soR0xfVFJVRSk7CiAgICAgICAgIGNsZWFyTWFzayB8PSBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQ7
CisgICAgfQorICAgIGlzU2lzc29yRW5hYmxlZCA9IDo6Z2xJc0VuYWJsZWQoR0xfU0NJU1NPUl9U
RVNUKTsKKyAgICA6OmdsRGlzYWJsZShHTF9TQ0lTU09SX1RFU1QpOworICAgIGlzRGl0aGVyRW5h
YmxlZCA9IDo6Z2xJc0VuYWJsZWQoR0xfRElUSEVSKTsKKyAgICA6OmdsRGlzYWJsZShHTF9ESVRI
RVIpOworCiAgICAgOjpnbENsZWFyKGNsZWFyTWFzayk7CisKKyAgICA6OmdsQ29sb3JNYXNrKGNv
bG9yTWFza1swXSwgY29sb3JNYXNrWzFdLCBjb2xvck1hc2tbMl0sIGNvbG9yTWFza1szXSk7Cisg
ICAgaWYgKG1fYXR0cnMuZGVwdGgpCisgICAgICAgIDo6Z2xEZXB0aE1hc2soZGVwdGhNYXNrKTsK
KyAgICBpZiAobV9hdHRycy5zdGVuY2lsKQorICAgICAgICA6OmdsU3RlbmNpbE1hc2soc3RlbmNp
bE1hc2spOworICAgIGlmIChpc1Npc3NvckVuYWJsZWQpCisgICAgICAgIDo6Z2xFbmFibGUoR0xf
U0NJU1NPUl9URVNUKTsKKyAgICBlbHNlCisgICAgICAgIDo6Z2xEaXNhYmxlKEdMX1NDSVNTT1Jf
VEVTVCk7CisgICAgaWYgKGlzRGl0aGVyRW5hYmxlZCkKKyAgICAgICAgOjpnbEVuYWJsZShHTF9E
SVRIRVIpOworICAgIGVsc2UKKyAgICAgICAgOjpnbERpc2FibGUoR0xfRElUSEVSKTsKKworICAg
IGlmIChtdXN0UmVzdG9yZUZCTykKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9G
UkFNRUJVRkZFUl9FWFQsIG1fYm91bmRGQk8pOworCiAgICAgOjpnbEZsdXNoKCk7CiB9CiAKSW5k
ZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNTk5MDEpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMDUtMjAgIFpoZW55YW8g
TW8gIDx6bW9AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBJbXBsZW1lbnQgbGF6eSBjbGVhcmluZyBvZiByZW5kZXJidWZmZXJzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjI0OAorCisg
ICAgICAgICogc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpyZXNoYXBlKTogQ2xl
YXIgV2ViR0wgaW50ZXJuYWwgYnVmZmVycy4KKwogMjAxMC0wNS0yMCAgVmlldC1UcnVuZyBMdXUg
IDx2aWV0dHJ1bmdsdXVAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmlu
IEZpc2hlci4KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0RE
ZWZhdWx0SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHcmFw
aGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmNwcAkocmV2aXNpb24gNTk4OTgpCisrKyBXZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01OTMsNiArNTkzLDUwIEBAIHZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZh
dWx0SW1wbDo6cmUKICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICB9CiAKKyAgICBpZiAo
bV9hdHRyaWJ1dGVzLmFudGlhbGlhcykgeworICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlckVYVChH
TF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICBpZiAobV9ib3Vu
ZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQorICAgICAgICAgICAgbXVzdFJlc3RvcmVGQk8gPSBm
YWxzZTsKKyAgICB9CisKKyAgICAvLyBJbml0aWFsaXplIHJlbmRlcmJ1ZmZlcnMgdG8gMC4KKyAg
ICBHTGJvb2xlYW4gY29sb3JNYXNrW10gPSB7R0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSwgR0xf
VFJVRX0sIGRlcHRoTWFzayA9IEdMX1RSVUUsIHN0ZW5jaWxNYXNrID0gR0xfVFJVRTsKKyAgICBH
TGJvb2xlYW4gaXNTaXNzb3JFbmFibGVkID0gR0xfRkFMU0U7CisgICAgR0xib29sZWFuIGlzRGl0
aGVyRW5hYmxlZCA9IEdMX0ZBTFNFOworICAgIEdMYml0ZmllbGQgY2xlYXJNYXNrID0gR0xfQ09M
T1JfQlVGRkVSX0JJVDsKKyAgICBnbEdldEJvb2xlYW52KEdMX0NPTE9SX1dSSVRFTUFTSywgY29s
b3JNYXNrKTsKKyAgICBnbENvbG9yTWFzayhHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFLCBHTF9U
UlVFKTsKKyAgICBpZiAobV9hdHRyaWJ1dGVzLmRlcHRoKSB7CisgICAgICAgIGdsR2V0Qm9vbGVh
bnYoR0xfREVQVEhfV1JJVEVNQVNLLCAmZGVwdGhNYXNrKTsKKyAgICAgICAgZ2xEZXB0aE1hc2so
R0xfVFJVRSk7CisgICAgICAgIGNsZWFyTWFzayB8PSBHTF9ERVBUSF9CVUZGRVJfQklUOworICAg
IH0KKyAgICBpZiAobV9hdHRyaWJ1dGVzLnN0ZW5jaWwpIHsKKyAgICAgICAgZ2xHZXRCb29sZWFu
dihHTF9TVEVOQ0lMX1dSSVRFTUFTSywgJnN0ZW5jaWxNYXNrKTsKKyAgICAgICAgZ2xTdGVuY2ls
TWFzayhHTF9UUlVFKTsKKyAgICAgICAgY2xlYXJNYXNrIHw9IEdMX1NURU5DSUxfQlVGRkVSX0JJ
VDsKKyAgICB9CisgICAgaXNTaXNzb3JFbmFibGVkID0gZ2xJc0VuYWJsZWQoR0xfU0NJU1NPUl9U
RVNUKTsKKyAgICBnbERpc2FibGUoR0xfU0NJU1NPUl9URVNUKTsKKyAgICBpc0RpdGhlckVuYWJs
ZWQgPSBnbElzRW5hYmxlZChHTF9ESVRIRVIpOworICAgIGdsRGlzYWJsZShHTF9ESVRIRVIpOwor
CisgICAgZ2xDbGVhcihjbGVhck1hc2spOworCisgICAgZ2xDb2xvck1hc2soY29sb3JNYXNrWzBd
LCBjb2xvck1hc2tbMV0sIGNvbG9yTWFza1syXSwgY29sb3JNYXNrWzNdKTsKKyAgICBpZiAobV9h
dHRyaWJ1dGVzLmRlcHRoKQorICAgICAgICBnbERlcHRoTWFzayhkZXB0aE1hc2spOworICAgIGlm
IChtX2F0dHJpYnV0ZXMuc3RlbmNpbCkKKyAgICAgICAgZ2xTdGVuY2lsTWFzayhzdGVuY2lsTWFz
ayk7CisgICAgaWYgKGlzU2lzc29yRW5hYmxlZCkKKyAgICAgICAgZ2xFbmFibGUoR0xfU0NJU1NP
Ul9URVNUKTsKKyAgICBlbHNlCisgICAgICAgIGdsRGlzYWJsZShHTF9TQ0lTU09SX1RFU1QpOwor
ICAgIGlmIChpc0RpdGhlckVuYWJsZWQpCisgICAgICAgIGdsRW5hYmxlKEdMX0RJVEhFUik7Cisg
ICAgZWxzZQorICAgICAgICBnbERpc2FibGUoR0xfRElUSEVSKTsKKwogICAgIGlmIChtdXN0UmVz
dG9yZUZCTykKICAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhU
LCBtX2JvdW5kRkJPKTsKICNlbmRpZiAvLyBSRU5ERVJfVE9fREVCVUdHSU5HX1dJTkRPVwpAQCAt
NjA0LDEzICs2NDgsNiBAQCB2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OnJl
CiAgICAgfQogICAgIG1fc2NhbmxpbmUgPSBuZXcgdW5zaWduZWQgY2hhclt3aWR0aCAqIDRdOwog
I2VuZGlmIC8vIEZMSVBfRlJBTUVCVUZGRVJfVkVSVElDQUxMWQotCi0gICAgR0xiaXRmaWVsZCBj
bGVhck1hc2sgPSBHTF9DT0xPUl9CVUZGRVJfQklUOwotICAgIGlmIChtX2F0dHJpYnV0ZXMuc3Rl
bmNpbCkKLSAgICAgICAgY2xlYXJNYXNrIHw9IEdMX1NURU5DSUxfQlVGRkVSX0JJVDsKLSAgICBp
ZiAobV9hdHRyaWJ1dGVzLmRlcHRoKQotICAgICAgICBjbGVhck1hc2sgfD0gR0xfREVQVEhfQlVG
RkVSX0JJVDsKLSAgICBnbENsZWFyKGNsZWFyTWFzayk7CiB9CiAKICNpZmRlZiBGTElQX0ZSQU1F
QlVGRkVSX1ZFUlRJQ0FMTFkKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDU5OTAxKQorKysgTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMDUtMjAg
IFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgbGF6eSBjbGVhcmluZyBvZiByZW5kZXJi
dWZmZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0z
NjI0OAorCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvcmVuZGVyYnVmZmVyLWluaXRpYWxp
emF0aW9uLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wv
cmVuZGVyYnVmZmVyLWluaXRpYWxpemF0aW9uLmh0bWw6IEFkZGVkLgorCiAyMDEwLTA1LTIwICBW
aWN0b3IgV2FuZyAgPHZpY3RvcndAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQu
IFVwZGF0ZSB0ZXN0IGV4cGVjdGF0aW9ucyBmb3IgY2hyb21pdW0uCkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L2NhbnZhcy93ZWJnbC9yZW5kZXJidWZmZXItaW5pdGlhbGl6YXRpb24tZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3JlbmRlcmJ1
ZmZlci1pbml0aWFsaXphdGlvbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9yZW5kZXJidWZmZXItaW5pdGlhbGl6YXRpb24tZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzIEBACitWZXJpZnkgcmVuZGVyYnVmZmVy
cyBhcmUgaW5pdGlhbGl6ZWQgdG8gMCBiZWZvcmUgYmVpbmcgcmVhZCBpbiBXZWJHTAorCitPbiBz
dWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dl
ZCBieSAiVEVTVCBDT01QTEVURSIuCisKK1JlZ3Jlc3Npb24gdGVzdCBmb3IgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM2MjQ4IDogSW1wbGVtZW50IGxhenkgY2xlYXJp
bmcgb2YgcmVuZGVyYnVmZmVycworVGVzdCB3aGV0aGVyIHRoZSBXZWJHTCBpbnRlcm5hbCBidWZm
ZXJzIGhhdmUgYmVlbiBpbml0aWFsaXplZCB0byAwLgorUEFTUyBCdWZmZXJzIGhhdmUgYmVlbiBp
bml0aWFsaXplZCB0byAwLgorVGVzdCB3aGV0aGVyIHVzZXIgY3JlYXRlZCBidWZmZXJzIGhhdmUg
YmVlbiBpbml0aWFsaXplZCB0byAwLgorUEFTUyBCdWZmZXJzIGhhdmUgYmVlbiBpbml0aWFsaXpl
ZCB0byAwLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRF
CisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3JlbmRlcmJ1ZmZlci1pbml0
aWFsaXphdGlvbi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dl
YmdsL3JlbmRlcmJ1ZmZlci1pbml0aWFsaXphdGlvbi5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVuZGVyYnVmZmVyLWluaXRpYWxpemF0aW9uLmh0
bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODEgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayBy
ZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNz
cyIvPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3dlYmdsLXRlc3QuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9InJlc291cmNlcy91dGlsczNkLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Citm
dW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoInRlc3RiZWQiKTsKKyAgICB2YXIgZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgiZXhwZXJp
bWVudGFsLXdlYmdsIik7CisgICAgaWYgKCFnbCkgeworICAgICAgICB0ZXN0RmFpbGVkKCdjYW52
YXMuZ2V0Q29udGV4dCgpIGZhaWxlZCcpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgZGVidWcoJ1Rlc3Qgd2hldGhlciB0aGUgV2ViR0wgaW50ZXJuYWwgYnVmZmVycyBoYXZl
IGJlZW4gaW5pdGlhbGl6ZWQgdG8gMC4nKTsKKyAgICB2YXIgYnVmID0gZ2wucmVhZFBpeGVscygw
LCAwLCA1MDAsIDUwMCwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSk7CisgICAgaWYgKGdsLmdl
dEVycm9yKCkgIT0gZ2wuTk9fRVJST1IpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgnR0wgZXJyb3Ig
ZGV0ZWN0ZWQgYWZ0ZXIgcmVhZFBpeGVscygpLicpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIHZhciB0b3RhbEJ5dGVzID0gNTAwICogNTAwICogNDsKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHRvdGFsQnl0ZXM7ICsraSkgeworICAgICAgICBpZiAoYnVmW2ldICE9IDApIHsK
KyAgICAgICAgICAgIHRlc3RGYWlsZWQoJ1dlYkdMIGludGVybmFsIGJ1ZmZlcnMgYXJlIGRpcnR5
LicpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHRl
c3RQYXNzZWQoJ0J1ZmZlcnMgaGF2ZSBiZWVuIGluaXRpYWxpemVkIHRvIDAuJyk7CisKKyAgICBk
ZWJ1ZygnVGVzdCB3aGV0aGVyIHVzZXIgY3JlYXRlZCBidWZmZXJzIGhhdmUgYmVlbiBpbml0aWFs
aXplZCB0byAwLicpOworICAgIHZhciBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpOworICAg
IGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgZmJvKTsKKyAgICB2YXIgY29sb3Ji
dWZmZXIgPSBnbC5jcmVhdGVSZW5kZXJidWZmZXIoKTsKKyAgICBnbC5iaW5kUmVuZGVyYnVmZmVy
KGdsLlJFTkRFUkJVRkZFUiwgY29sb3JidWZmZXIpOworICAgIGdsLnJlbmRlcmJ1ZmZlclN0b3Jh
Z2UoZ2wuUkVOREVSQlVGRkVSLCBnbC5SR0JBNCwgNTAwLCA1MDApOworICAgIGlmIChnbC5nZXRF
cnJvcigpICE9IGdsLk5PX0VSUk9SKSB7CisgICAgICAgIHRlc3RGYWlsZWQoJ0dMIGVycm9yIGRl
dGVjdGVkIGFmdGVyIHJlbmRlcmJ1ZmZlclN0b3JhZ2UoaW50ZXJuYWxmb3JtYXQgPSBSR0JBNCku
Jyk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgZ2wuZnJhbWVidWZmZXJSZW5k
ZXJidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIGdsLkNPTE9SX0FUVEFDSE1FTlQwLCBnbC5SRU5ERVJC
VUZGRVIsIGNvbG9yYnVmZmVyKTsKKyAgICBpZiAoZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhn
bC5GUkFNRUJVRkZFUikgIT0gZ2wuRlJBTUVCVUZGRVJfQ09NUExFVEUpIHsKKyAgICAgICAgdGVz
dEZhaWxlZCgnRnJhbWVidWZmZXIgaW5jb21wbGV0ZS4nKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICBidWYgPSBnbC5yZWFkUGl4ZWxzKDAsIDAsIDUwMCwgNTAwLCBnbC5SR0JB
LCBnbC5VTlNJR05FRF9CWVRFKTsKKyAgICBpZiAoZ2wuZ2V0RXJyb3IoKSAhPSBnbC5OT19FUlJP
UikgeworICAgICAgICB0ZXN0RmFpbGVkKCdHTCBlcnJvciBkZXRlY3RlZCBhZnRlciByZWFkUGl4
ZWxzKCkuJyk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCB0b3RhbEJ5dGVzOyArK2kpIHsKKyAgICAgICAgaWYgKGJ1ZltpXSAhPSAwKSB7Cisg
ICAgICAgICAgICB0ZXN0RmFpbGVkKCdVc2VyIGNyZWF0ZWQgYnVmZmVycyBhcmUgZGlydHkuJyk7
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0ZXN0
UGFzc2VkKCdCdWZmZXJzIGhhdmUgYmVlbiBpbml0aWFsaXplZCB0byAwLicpOworICAgIHJldHVy
biB0cnVlOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9InRlc3Ri
ZWQiIHdpZHRoPSI1MDBweCIgaGVpZ2h0PSI1MDBweCI+PC9jYW52YXM+Cis8ZGl2IGlkPSJkZXNj
cmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+Cit2YXIg
c3VjY2Vzc2Z1bGx5UGFyc2VkID0gZmFsc2U7CisKK2Rlc2NyaXB0aW9uKCdWZXJpZnkgcmVuZGVy
YnVmZmVycyBhcmUgaW5pdGlhbGl6ZWQgdG8gMCBiZWZvcmUgYmVpbmcgcmVhZCBpbiBXZWJHTCcp
OworCitkZWJ1ZygnUmVncmVzc2lvbiB0ZXN0IGZvciA8YSBocmVmPSJodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzYyNDgiPmh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0zNjI0ODwvYT4gOiA8Y29kZT5JbXBsZW1lbnQgbGF6eSBjbGVhcmluZyBv
ZiByZW5kZXJidWZmZXJzPC9jb2RlPicpOworCitydW5UZXN0KCk7CisKK3N1Y2Nlc3NmdWxseVBh
cnNlZCA9IHRydWU7Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMv
anMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56944</attachid>
            <date>2010-05-24 16:39:26 -0700</date>
            <delta_ts>2010-05-25 10:58:37 -0700</delta_ts>
            <desc>revised patch : responding to kbr&apos;s review</desc>
            <filename>init.patch</filename>
            <type>text/plain</type>
            <size>30753</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1OTkwMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzkgQEAKKzIwMTAtMDUtMjAgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1l
bnQgbGF6eSBjbGVhcmluZyBvZiByZW5kZXJidWZmZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjI0OAorCisgICAgICAgIFRlc3Q6IGZhc3QvY2Fu
dmFzL3dlYmdsL3JlbmRlcmJ1ZmZlci1pbml0aWFsaXphdGlvbi5odG1sCisKKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
RnJhbWVidWZmZXI6OldlYkdMRnJhbWVidWZmZXIpOiBJbml0IGFkZGVkIG1lbWJlcnMuCisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTEZyYW1lYnVmZmVyOjpzZXRBdHRhY2htZW50KTogU2V0IGF0dGFj
aG1lbnQgb2JqZWN0LgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6b25CaW5k
KTogUGVyZm9ybSBidWZmZXIgY2xlYXJpbmcgaWYgbmVlZGVkLgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xGcmFtZWJ1ZmZlcjo6b25BdHRhY2hlZE9iamVjdENoYW5nZSk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6aW5pdGlhbGl6ZVJlbmRlcmJ1ZmZlcnMpOiBD
bGVhciB1bi1pbml0aWFsaXplZCByZW5kZXJidWZmZXJzIGlmIGZyYW1lYnVmZmVyIGlzIGNvbXBs
ZXRlLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaDoKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OmlzRGVwdGhBdHRhY2hlZCk6IENoYW5nZWQgdG8g
Y2hlY2sgb2JqZWN0LgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6aXNTdGVu
Y2lsQXR0YWNoZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6
OmlzRGVwdGhTdGVuY2lsQXR0YWNoZWQpOiBEaXR0by4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmJ1ZmZl
cjo6V2ViR0xSZW5kZXJidWZmZXIpOiBJbml0IGFkZGVkIG1lbWJlcnMuCisgICAgICAgICogaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJidWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyYnVmZmVyOjppc0luaXRpYWxpemVkKTogQXMgdGhlIGZ1bmN0aW9uIG5hbWUuCisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmJ1ZmZlcjo6c2V0SW5pdGlhbGl6ZWQpOiBEaXR0by4KKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kRnJhbWVidWZmZXIpOiBDYWxsIG9u
QmluZCgpLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4
SW1hZ2UyRCk6IENhbGwgb25BdHRhY2hlZE9iamVjdENoYW5nZSgpLgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVSZW5kZXJidWZmZXIpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlVGV4dHVyZSk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmcmFtZWJ1ZmZl
clJlbmRlcmJ1ZmZlcik6IENhbGwgc2V0QXR0YWNobWVudC4KKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQpOiBDYWxsIG9uQXR0YWNo
ZWRPYmplY3RDaGFuZ2UoKS4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6cmVuZGVyYnVmZmVyU3RvcmFnZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEQmFzZSk6IERpdHRvLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZSk6IEluaXRpYWxpemUgaW50ZXJuYWwgYnVm
ZmVycy4KKwogMjAxMC0wNS0yMCAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgU3RvcCBsZWFraW5nIGFsbCBDQUNGQ29udGV4dHMKSW5kZXg6IFdlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcAkocmV2aXNpb24gNTk4OTgpCisrKyBXZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwyNiAr
MzksNTIgQEAgUGFzc1JlZlB0cjxXZWJHTEZyYW1lYnVmZmVyPiBXZWJHTEZyYW1lYgogCiBXZWJH
TEZyYW1lYnVmZmVyOjpXZWJHTEZyYW1lYnVmZmVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY3R4
KQogICAgIDogQ2FudmFzT2JqZWN0KGN0eCkKLSAgICAsIG1faXNEZXB0aEF0dGFjaGVkKGZhbHNl
KQotICAgICwgbV9pc1N0ZW5jaWxBdHRhY2hlZChmYWxzZSkKLSAgICAsIG1faXNEZXB0aFN0ZW5j
aWxBdHRhY2hlZChmYWxzZSkKKyAgICAsIG1fY29sb3JBdHRhY2htZW50KDApCisgICAgLCBtX2Rl
cHRoQXR0YWNobWVudCgwKQorICAgICwgbV9zdGVuY2lsQXR0YWNobWVudCgwKQorICAgICwgbV9k
ZXB0aFN0ZW5jaWxBdHRhY2htZW50KDApCiB7CiAgICAgc2V0T2JqZWN0KGNvbnRleHQoKS0+Z3Jh
cGhpY3NDb250ZXh0M0QoKS0+Y3JlYXRlRnJhbWVidWZmZXIoKSk7CiB9CiAKLXZvaWQgV2ViR0xG
cmFtZWJ1ZmZlcjo6c2V0SXNBdHRhY2hlZCh1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIGJvb2wg
aXNBdHRhY2hlZCkKK3ZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6c2V0QXR0YWNobWVudCh1bnNpZ25l
ZCBsb25nIGF0dGFjaG1lbnQsIENhbnZhc09iamVjdCogYXR0YWNoZWRPYmplY3QpCiB7CisgICAg
aWYgKCFvYmplY3QoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChhdHRhY2hlZE9iamVjdCAm
JiAhYXR0YWNoZWRPYmplY3QtPm9iamVjdCgpKQorICAgICAgICBhdHRhY2hlZE9iamVjdCA9IDA7
CiAgICAgc3dpdGNoIChhdHRhY2htZW50KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
Q09MT1JfQVRUQUNITUVOVDA6CisgICAgICAgIG1fY29sb3JBdHRhY2htZW50ID0gYXR0YWNoZWRP
YmplY3Q7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRI
X0FUVEFDSE1FTlQ6Ci0gICAgICAgIG1faXNEZXB0aEF0dGFjaGVkID0gaXNBdHRhY2hlZDsKKyAg
ICAgICAgbV9kZXB0aEF0dGFjaG1lbnQgPSBhdHRhY2hlZE9iamVjdDsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5UOgotICAgICAg
ICBtX2lzU3RlbmNpbEF0dGFjaGVkID0gaXNBdHRhY2hlZDsKKyAgICAgICAgbV9zdGVuY2lsQXR0
YWNobWVudCA9IGF0dGFjaGVkT2JqZWN0OwogICAgICAgICBicmVhazsKICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQ6Ci0gICAgICAgIG1faXNEZXB0
aFN0ZW5jaWxBdHRhY2hlZCA9IGlzQXR0YWNoZWQ7CisgICAgICAgIG1fZGVwdGhTdGVuY2lsQXR0
YWNobWVudCA9IGF0dGFjaGVkT2JqZWN0OwogICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGluaXRpYWxpemVSZW5kZXJidWZmZXJzKCk7Cit9
CisKK3ZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6b25CaW5kKCkKK3sKKyAgICBpbml0aWFsaXplUmVu
ZGVyYnVmZmVycygpOworfQorCit2b2lkIFdlYkdMRnJhbWVidWZmZXI6Om9uQXR0YWNoZWRPYmpl
Y3RDaGFuZ2UoQ2FudmFzT2JqZWN0KiBvYmplY3QpCit7CisgICAgLy8gQ3VycmVudGx5IG9iamVj
dCA9PSAwIGlzIG5vdCBjb25zaWRlcmVkLCBidXQgdGhpcyBtaWdodCBjaGFuZ2UgaWYgdGhlCisg
ICAgLy8gbGlmZXNwYW4gb2YgQ2FudmFzT2JqZWN0IGNoYW5nZXMuCisgICAgaWYgKG9iamVjdAor
ICAgICAgICAmJiAob2JqZWN0ID09IG1fY29sb3JBdHRhY2htZW50IHx8IG9iamVjdCA9PSBtX2Rl
cHRoQXR0YWNobWVudAorICAgICAgICAgICAgfHwgb2JqZWN0ID09IG1fc3RlbmNpbEF0dGFjaG1l
bnQgfHwgb2JqZWN0ID09IG1fZGVwdGhTdGVuY2lsQXR0YWNobWVudCkpCisgICAgICAgIGluaXRp
YWxpemVSZW5kZXJidWZmZXJzKCk7CiB9CiAKIHZvaWQgV2ViR0xGcmFtZWJ1ZmZlcjo6X2RlbGV0
ZU9iamVjdChQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKQEAgLTY2LDYgKzkyLDEwNSBAQCB2b2lk
IFdlYkdMRnJhbWVidWZmZXI6Ol9kZWxldGVPYmplY3QoUGxhCiAgICAgY29udGV4dCgpLT5ncmFw
aGljc0NvbnRleHQzRCgpLT5kZWxldGVGcmFtZWJ1ZmZlcihvYmplY3QpOwogfQogCit2b2lkIFdl
YkdMRnJhbWVidWZmZXI6OmluaXRpYWxpemVSZW5kZXJidWZmZXJzKCkKK3sKKyAgICBpZiAoIW9i
amVjdCgpKQorICAgICAgICByZXR1cm47CisgICAgYm9vbCBpbml0Q29sb3IgPSBmYWxzZSwgaW5p
dERlcHRoID0gZmFsc2UsIGluaXRTdGVuY2lsID0gZmFsc2U7CisgICAgdW5zaWduZWQgbG9uZyBt
YXNrID0gMDsKKyAgICBpZiAobV9jb2xvckF0dGFjaG1lbnQgJiYgbV9jb2xvckF0dGFjaG1lbnQt
Pm9iamVjdCgpICYmIG1fY29sb3JBdHRhY2htZW50LT5pc1JlbmRlcmJ1ZmZlcigpCisgICAgICAg
ICYmICEocmVpbnRlcnByZXRfY2FzdDxXZWJHTFJlbmRlcmJ1ZmZlcio+KG1fY29sb3JBdHRhY2ht
ZW50KSktPmlzSW5pdGlhbGl6ZWQoKSkgeworICAgICAgICBpbml0Q29sb3IgPSB0cnVlOworICAg
ICAgICBtYXNrIHw9IEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUOworICAgIH0K
KyAgICBpZiAobV9kZXB0aEF0dGFjaG1lbnQgJiYgbV9kZXB0aEF0dGFjaG1lbnQtPm9iamVjdCgp
ICYmIG1fZGVwdGhBdHRhY2htZW50LT5pc1JlbmRlcmJ1ZmZlcigpCisgICAgICAgICYmICEocmVp
bnRlcnByZXRfY2FzdDxXZWJHTFJlbmRlcmJ1ZmZlcio+KG1fZGVwdGhBdHRhY2htZW50KSktPmlz
SW5pdGlhbGl6ZWQoKSkgeworICAgICAgICBpbml0RGVwdGggPSB0cnVlOworICAgICAgICBtYXNr
IHw9IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9CVUZGRVJfQklUOworICAgIH0KKyAgICBpZiAo
bV9zdGVuY2lsQXR0YWNobWVudCAmJiBtX3N0ZW5jaWxBdHRhY2htZW50LT5vYmplY3QoKSAmJiBt
X3N0ZW5jaWxBdHRhY2htZW50LT5pc1JlbmRlcmJ1ZmZlcigpCisgICAgICAgICYmICEocmVpbnRl
cnByZXRfY2FzdDxXZWJHTFJlbmRlcmJ1ZmZlcio+KG1fc3RlbmNpbEF0dGFjaG1lbnQpKS0+aXNJ
bml0aWFsaXplZCgpKSB7CisgICAgICAgIGluaXRTdGVuY2lsID0gdHJ1ZTsKKyAgICAgICAgbWFz
ayB8PSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUOworICAgIH0KKyAgICBp
ZiAobV9kZXB0aFN0ZW5jaWxBdHRhY2htZW50ICYmIG1fZGVwdGhTdGVuY2lsQXR0YWNobWVudC0+
b2JqZWN0KCkgJiYgbV9kZXB0aFN0ZW5jaWxBdHRhY2htZW50LT5pc1JlbmRlcmJ1ZmZlcigpCisg
ICAgICAgICYmICEocmVpbnRlcnByZXRfY2FzdDxXZWJHTFJlbmRlcmJ1ZmZlcio+KG1fZGVwdGhT
dGVuY2lsQXR0YWNobWVudCkpLT5pc0luaXRpYWxpemVkKCkpIHsKKyAgICAgICAgaW5pdERlcHRo
ID0gdHJ1ZTsKKyAgICAgICAgaW5pdFN0ZW5jaWwgPSB0cnVlOworICAgICAgICBtYXNrIHw9IChH
cmFwaGljc0NvbnRleHQzRDo6REVQVEhfQlVGRkVSX0JJVCB8IEdyYXBoaWNzQ29udGV4dDNEOjpT
VEVOQ0lMX0JVRkZFUl9CSVQpOworICAgIH0KKyAgICBpZiAoIWluaXRDb2xvciAmJiAhaW5pdERl
cHRoICYmICFpbml0U3RlbmNpbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gV2Ugb25seSBj
bGVhciB1bi1pbml0aWFsaXplZCByZW5kZXJidWZmZXJzIHdoZW4gdGhleSBhcmUgcmVhZHkgdG8g
YmUKKyAgICAvLyByZWFkLCBpLmUuLCB3aGVuIHRoZSBmcmFtZWJ1ZmZlciBpcyBjb21wbGV0ZS4K
KyAgICBHcmFwaGljc0NvbnRleHQzRCogZzNkID0gY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQz
RCgpOworICAgIGlmIChnM2QtPmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQU1FQlVGRkVSKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQ09NUExF
VEUpCisgICAgICAgIHJldHVybjsKKworICAgIGZsb2F0IGNvbG9yQ2xlYXJWYWx1ZVtdID0gezAs
IDAsIDAsIDB9LCBkZXB0aENsZWFyVmFsdWUgPSAwOworICAgIGludCBzdGVuY2lsQ2xlYXJWYWx1
ZSA9IDA7CisgICAgdW5zaWduZWQgY2hhciBjb2xvck1hc2tbXSA9IHsxLCAxLCAxLCAxfSwgZGVw
dGhNYXNrID0gMSwgc3RlbmNpbE1hc2sgPSAxOworICAgIGJvb2wgaXNTaXNzb3JFbmFibGVkID0g
ZmFsc2U7CisgICAgYm9vbCBpc0RpdGhlckVuYWJsZWQgPSBmYWxzZTsKKyAgICBpZiAoaW5pdENv
bG9yKSB7CisgICAgICAgIGczZC0+Z2V0RmxvYXR2KEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9D
TEVBUl9WQUxVRSwgY29sb3JDbGVhclZhbHVlKTsKKyAgICAgICAgZzNkLT5nZXRCb29sZWFudihH
cmFwaGljc0NvbnRleHQzRDo6Q09MT1JfV1JJVEVNQVNLLCBjb2xvck1hc2spOworICAgICAgICBn
M2QtPmNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7CisgICAgICAgIGczZC0+Y29sb3JNYXNrKHRydWUs
IHRydWUsIHRydWUsIHRydWUpOworICAgIH0KKyAgICBpZiAoaW5pdERlcHRoKSB7CisgICAgICAg
IGczZC0+Z2V0RmxvYXR2KEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DTEVBUl9WQUxVRSwgJmRl
cHRoQ2xlYXJWYWx1ZSk7CisgICAgICAgIGczZC0+Z2V0Qm9vbGVhbnYoR3JhcGhpY3NDb250ZXh0
M0Q6OkRFUFRIX1dSSVRFTUFTSywgJmRlcHRoTWFzayk7CisgICAgICAgIGczZC0+Y2xlYXJEZXB0
aCgwKTsKKyAgICAgICAgZzNkLT5kZXB0aE1hc2sodHJ1ZSk7CisgICAgfQorICAgIGlmIChpbml0
U3RlbmNpbCkgeworICAgICAgICBnM2QtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpT
VEVOQ0lMX0NMRUFSX1ZBTFVFLCAmc3RlbmNpbENsZWFyVmFsdWUpOworICAgICAgICBnM2QtPmdl
dEJvb2xlYW52KEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1dSSVRFTUFTSywgJnN0ZW5jaWxN
YXNrKTsKKyAgICAgICAgZzNkLT5jbGVhclN0ZW5jaWwoMCk7CisgICAgICAgIGczZC0+c3RlbmNp
bE1hc2sodHJ1ZSk7CisgICAgfQorICAgIGlzU2lzc29yRW5hYmxlZCA9IGczZC0+aXNFbmFibGVk
KEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOworICAgIGczZC0+ZGlzYWJsZShHcmFw
aGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKKyAgICBpc0RpdGhlckVuYWJsZWQgPSBnM2Qt
PmlzRW5hYmxlZChHcmFwaGljc0NvbnRleHQzRDo6RElUSEVSKTsKKyAgICBnM2QtPmRpc2FibGUo
R3JhcGhpY3NDb250ZXh0M0Q6OkRJVEhFUik7CisKKyAgICBnM2QtPmNsZWFyKG1hc2spOworCisg
ICAgaWYgKGluaXRDb2xvcikgeworICAgICAgICBnM2QtPmNsZWFyQ29sb3IoY29sb3JDbGVhclZh
bHVlWzBdLCBjb2xvckNsZWFyVmFsdWVbMV0sIGNvbG9yQ2xlYXJWYWx1ZVsyXSwgY29sb3JDbGVh
clZhbHVlWzNdKTsKKyAgICAgICAgZzNkLT5jb2xvck1hc2soY29sb3JNYXNrWzBdLCBjb2xvck1h
c2tbMV0sIGNvbG9yTWFza1syXSwgY29sb3JNYXNrWzNdKTsKKyAgICB9CisgICAgaWYgKGluaXRE
ZXB0aCkgeworICAgICAgICBnM2QtPmNsZWFyRGVwdGgoZGVwdGhDbGVhclZhbHVlKTsKKyAgICAg
ICAgZzNkLT5kZXB0aE1hc2soZGVwdGhNYXNrKTsKKyAgICB9CisgICAgaWYgKGluaXRTdGVuY2ls
KSB7CisgICAgICAgIGczZC0+Y2xlYXJTdGVuY2lsKHN0ZW5jaWxDbGVhclZhbHVlKTsKKyAgICAg
ICAgZzNkLT5zdGVuY2lsTWFzayhzdGVuY2lsTWFzayk7CisgICAgfQorICAgIGlmIChpc1Npc3Nv
ckVuYWJsZWQpCisgICAgICAgIGczZC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09S
X1RFU1QpOworICAgIGVsc2UKKyAgICAgICAgZzNkLT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNE
OjpTQ0lTU09SX1RFU1QpOworICAgIGlmIChpc0RpdGhlckVuYWJsZWQpCisgICAgICAgIGczZC0+
ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpESVRIRVIpOworICAgIGVsc2UKKyAgICAgICAgZzNk
LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpESVRIRVIpOworCisgICAgaWYgKGluaXRDb2xv
cikKKyAgICAgICAgKHJlaW50ZXJwcmV0X2Nhc3Q8V2ViR0xSZW5kZXJidWZmZXIqPihtX2NvbG9y
QXR0YWNobWVudCkpLT5zZXRJbml0aWFsaXplZCgpOworICAgIGlmIChpbml0RGVwdGggJiYgaW5p
dFN0ZW5jaWwgJiYgbV9kZXB0aFN0ZW5jaWxBdHRhY2htZW50KQorICAgICAgICAocmVpbnRlcnBy
ZXRfY2FzdDxXZWJHTFJlbmRlcmJ1ZmZlcio+KG1fZGVwdGhTdGVuY2lsQXR0YWNobWVudCkpLT5z
ZXRJbml0aWFsaXplZCgpOworICAgIGVsc2UgeworICAgICAgICBpZiAoaW5pdERlcHRoKQorICAg
ICAgICAgICAgKHJlaW50ZXJwcmV0X2Nhc3Q8V2ViR0xSZW5kZXJidWZmZXIqPihtX2RlcHRoQXR0
YWNobWVudCkpLT5zZXRJbml0aWFsaXplZCgpOworICAgICAgICBpZiAoaW5pdFN0ZW5jaWwpCisg
ICAgICAgICAgICAocmVpbnRlcnByZXRfY2FzdDxXZWJHTFJlbmRlcmJ1ZmZlcio+KG1fc3RlbmNp
bEF0dGFjaG1lbnQpKS0+c2V0SW5pdGlhbGl6ZWQoKTsKKyAgICB9Cit9CisKIH0KIAogI2VuZGlm
IC8vIEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJh
bWVidWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVi
dWZmZXIuaAkocmV2aXNpb24gNTk4OTgpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJh
bWVidWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTggKzMyLDMwIEBACiAjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAorCiAgICAgY2xh
c3MgV2ViR0xGcmFtZWJ1ZmZlciA6IHB1YmxpYyBDYW52YXNPYmplY3QgewogICAgIHB1YmxpYzoK
ICAgICAgICAgdmlydHVhbCB+V2ViR0xGcmFtZWJ1ZmZlcigpIHsgZGVsZXRlT2JqZWN0KCk7IH0K
ICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+IGNy
ZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKLSAgICAgICAgCi0gICAgICAgIHZvaWQgc2V0
SXNBdHRhY2hlZCh1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIGJvb2wgaXNBdHRhY2hlZCk7CiAK
LSAgICAgICAgYm9vbCBpc0RlcHRoQXR0YWNoZWQoKSBjb25zdCB7IHJldHVybiBtX2lzRGVwdGhB
dHRhY2hlZDsgfQotICAgICAgICBib29sIGlzU3RlbmNpbEF0dGFjaGVkKCkgY29uc3QgeyByZXR1
cm4gbV9pc1N0ZW5jaWxBdHRhY2hlZDsgfQotICAgICAgICBib29sIGlzRGVwdGhTdGVuY2lsQXR0
YWNoZWQoKSBjb25zdCB7IHJldHVybiBtX2lzRGVwdGhTdGVuY2lsQXR0YWNoZWQ7IH0KKyAgICAg
ICAgYm9vbCBpc0RlcHRoQXR0YWNoZWQoKSBjb25zdCB7IHJldHVybiAobV9kZXB0aEF0dGFjaG1l
bnQgJiYgbV9kZXB0aEF0dGFjaG1lbnQtPm9iamVjdCgpKTsgfQorICAgICAgICBib29sIGlzU3Rl
bmNpbEF0dGFjaGVkKCkgY29uc3QgeyByZXR1cm4gKG1fc3RlbmNpbEF0dGFjaG1lbnQgJiYgbV9z
dGVuY2lsQXR0YWNobWVudC0+b2JqZWN0KCkpOyB9CisgICAgICAgIGJvb2wgaXNEZXB0aFN0ZW5j
aWxBdHRhY2hlZCgpIGNvbnN0IHsgcmV0dXJuIChtX2RlcHRoU3RlbmNpbEF0dGFjaG1lbnQgJiYg
bV9kZXB0aFN0ZW5jaWxBdHRhY2htZW50LT5vYmplY3QoKSk7IH0KKworICAgICAgICB2b2lkIHNl
dEF0dGFjaG1lbnQodW5zaWduZWQgbG9uZywgQ2FudmFzT2JqZWN0Kik7CisKKyAgICAgICAgLy8g
VGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgcmlnaHQgYWZ0ZXIgYSBmcmFtZWJ1ZmZlciBpcyBib3Vu
ZC4KKyAgICAgICAgLy8gQmVjYXVzZSByZW5kZXJidWZmZXJzIGFuZCB0ZXh0dXJlcyBhdHRhY2hl
ZCB0byB0aGUgZnJhbWVidWZmZXIgbWlnaHQKKyAgICAgICAgLy8gaGF2ZSBjaGFuZ2VkIGFuZCB0
aGUgZnJhbWVidWZmZXIgbWlnaHQgaGF2ZSBiZWNvbWUgY29tcGxldGUgd2hlbiBpdAorICAgICAg
ICAvLyBpc24ndCBib3VuZCwgc28gd2UgbmVlZCB0byBjbGVhciB1bi1pbml0aWFsaXplZCByZW5k
ZXJidWZmZXJzLgorICAgICAgICB2b2lkIG9uQmluZCgpOworCisgICAgICAgIC8vIFdoZW4gYSB0
ZXh0dXJlIG9yIGEgcmVuZGVyYnVmZmVyIGNoYW5nZXMsIHdlIG5lZWQgdG8gY2hlY2sgdGhlCisg
ICAgICAgIC8vIGN1cnJlbnQgYm91bmQgZnJhbWVidWZmZXI7IGlmIHRoZSBuZXdseSBjaGFuZ2Vk
IG9iamVjdCBpcyBhdHRhY2hlZAorICAgICAgICAvLyB0byB0aGUgZnJhbWVidWZmZXIgYW5kIHRo
ZSBmcmFtZWJ1ZmZlciBiZWNvbWVzIGNvbXBsZXRlLCB3ZSBuZWVkIHRvCisgICAgICAgIC8vIGNs
ZWFyIHVuLWluaXRpYWxpemVkIHJlbmRlcmJ1ZmZlcnMuCisgICAgICAgIHZvaWQgb25BdHRhY2hl
ZE9iamVjdENoYW5nZShDYW52YXNPYmplY3QqKTsKIAogICAgIHByb3RlY3RlZDoKICAgICAgICAg
V2ViR0xGcmFtZWJ1ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKQEAgLTUzLDkgKzY1LDE0
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0dWFsIGJv
b2wgaXNGcmFtZWJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAotICAgICAgICBib29s
IG1faXNEZXB0aEF0dGFjaGVkOwotICAgICAgICBib29sIG1faXNTdGVuY2lsQXR0YWNoZWQ7Ci0g
ICAgICAgIGJvb2wgbV9pc0RlcHRoU3RlbmNpbEF0dGFjaGVkOworICAgICAgICB2b2lkIGluaXRp
YWxpemVSZW5kZXJidWZmZXJzKCk7CisKKyAgICAgICAgLy8gVGhlc2Ugb2JqZWN0cyBhcmUga2Vw
dCBhbGl2ZSBieSB0aGUgZ2xvYmFsIHRhYmxlIGluCisgICAgICAgIC8vIFdlYkdMUmVuZGVyaW5n
Q29udGV4dC4KKyAgICAgICAgQ2FudmFzT2JqZWN0KiBtX2NvbG9yQXR0YWNobWVudDsKKyAgICAg
ICAgQ2FudmFzT2JqZWN0KiBtX2RlcHRoQXR0YWNobWVudDsKKyAgICAgICAgQ2FudmFzT2JqZWN0
KiBtX3N0ZW5jaWxBdHRhY2htZW50OworICAgICAgICBDYW52YXNPYmplY3QqIG1fZGVwdGhTdGVu
Y2lsQXR0YWNobWVudDsKICAgICB9OwogICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5jcHAJKHJldmlzaW9uIDU5
ODk4KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAgUGFzc1JlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4g
V2ViR0xSZW5kZQogV2ViR0xSZW5kZXJidWZmZXI6OldlYkdMUmVuZGVyYnVmZmVyKFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCogY3R4KQogICAgIDogQ2FudmFzT2JqZWN0KGN0eCkKICAgICAsIG1faW50
ZXJuYWxmb3JtYXQoR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE0KQorICAgICwgbV9pbml0aWFsaXpl
ZChmYWxzZSkKIHsKICAgICBzZXRPYmplY3QoY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgp
LT5jcmVhdGVSZW5kZXJidWZmZXIoKSk7CiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMUmVuZGVyYnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmJ1ZmZlci5oCShyZXZpc2lvbiA1OTg5OCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJidWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsOSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgc2V0SW50ZXJuYWxmb3JtYXQodW5zaWduZWQg
bG9uZyBpbnRlcm5hbGZvcm1hdCkgeyBtX2ludGVybmFsZm9ybWF0ID0gaW50ZXJuYWxmb3JtYXQ7
IH0KICAgICAgICAgdW5zaWduZWQgbG9uZyBnZXRJbnRlcm5hbGZvcm1hdCgpIGNvbnN0IHsgcmV0
dXJuIG1faW50ZXJuYWxmb3JtYXQ7IH0KIAorICAgICAgICBib29sIGlzSW5pdGlhbGl6ZWQoKSBj
b25zdCB7IHJldHVybiBtX2luaXRpYWxpemVkOyB9CisgICAgICAgIHZvaWQgc2V0SW5pdGlhbGl6
ZWQoKSB7IG1faW5pdGlhbGl6ZWQgPSB0cnVlOyB9CisKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAg
IFdlYkdMUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOwogICAgICAgICAKQEAg
LTUxLDYgKzU0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIGJvb2wg
aXNSZW5kZXJidWZmZXIoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKICAgICAgICAgdW5zaWdu
ZWQgbG9uZyBtX2ludGVybmFsZm9ybWF0OworICAgICAgICBib29sIG1faW5pdGlhbGl6ZWQ7CiAg
ICAgfTsKICAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDU5ODk4KQorKysg
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMzgsNiArMjM4LDggQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRG
cmFtZWJ1ZgogICAgIH0KICAgICBtX2ZyYW1lYnVmZmVyQmluZGluZyA9IGJ1ZmZlcjsKICAgICBt
X2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcih0YXJnZXQsIGJ1ZmZlcik7CisgICAgaWYgKG1fZnJh
bWVidWZmZXJCaW5kaW5nKQorICAgICAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25CaW5kKCk7
CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtNDMxLDI5ICs0
MzMsMzEgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvbXBpbGVTaGFkZQogCiB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleEltYWdlMkQodW5zaWduZWQgbG9uZyB0YXJn
ZXQsIGxvbmcgbGV2ZWwsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIGxvbmcgeCwgbG9u
ZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCwgbG9uZyBib3Jk
ZXIpCiB7CisgICAgUmVmUHRyPFdlYkdMVGV4dHVyZT4gdGV4ID0gMDsKKyAgICBzd2l0Y2ggKHRh
cmdldCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQ6CisgICAgICAg
IHRleCA9IG1fdGV4dHVyZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLm1fdGV4dHVyZTJEQmlu
ZGluZzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9DVUJFX01BUF9QT1NJVElWRV9YOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6CisgICAgICAgIHRleCA9IG1fdGV4dHVyZVVuaXRz
W21fYWN0aXZlVGV4dHVyZVVuaXRdLm1fdGV4dHVyZUN1YmVNYXBCaW5kaW5nOworICAgICAgICBi
cmVhazsKKyAgICB9CiAgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpIHsKICAgICAgICAgaWYg
KGxldmVsICYmIFdlYkdMVGV4dHVyZTo6aXNOUE9UKHdpZHRoLCBoZWlnaHQpKSB7CiAgICAgICAg
ICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBSZWZQ
dHI8V2ViR0xUZXh0dXJlPiB0ZXggPSAwOwotICAgICAgICBzd2l0Y2ggKHRhcmdldCkgewotICAg
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEOgotICAgICAgICAgICAgdGV4
ID0gbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0ubV90ZXh0dXJlMkRCaW5kaW5n
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6Ci0gICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKLSAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgotICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0gICAg
ICAgICAgICB0ZXggPSBtX3RleHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVVbml0XS5tX3RleHR1
cmVDdWJlTWFwQmluZGluZzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CiAgICAgICAg
IGlmICh0ZXggJiYgIWxldmVsKSAvLyBvbmx5IGZvciBsZXZlbCAwCiAgICAgICAgICAgICB0ZXgt
PnNldFNpemUodGFyZ2V0LCB3aWR0aCwgaGVpZ2h0KTsKICAgICB9CiAgICAgbV9jb250ZXh0LT5j
b3B5VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgs
IGhlaWdodCwgYm9yZGVyKTsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgdGV4KQor
ICAgICAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BdHRhY2hlZE9iamVjdENoYW5nZSh0ZXgu
Z2V0KCkpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTU0
Nyw2ICs1NTEsOCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlUmVuZGVyCiAg
ICAgICAgIHJldHVybjsKICAgICAKICAgICByZW5kZXJidWZmZXItPmRlbGV0ZU9iamVjdCgpOwor
ICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKKyAgICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRp
bmctPm9uQXR0YWNoZWRPYmplY3RDaGFuZ2UocmVuZGVyYnVmZmVyKTsKIH0KIAogdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZVNoYWRlcihXZWJHTFNoYWRlciogc2hhZGVyKQpAQCAt
NTYzLDYgKzU2OSw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVUZXh0dXIK
ICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIHRleHR1cmUtPmRlbGV0ZU9iamVjdCgpOworICAg
IGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKKyAgICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmct
Pm9uQXR0YWNoZWRPYmplY3RDaGFuZ2UodGV4dHVyZSk7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpkZXB0aEZ1bmModW5zaWduZWQgbG9uZyBmdW5jKQpAQCAtODQ1LDcgKzg1Myw2
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmcmFtZWJ1ZmZlclIKICAgICB9CiAgICAg
aWYgKGJ1ZmZlciAmJiBidWZmZXItPm9iamVjdCgpKSB7CiAgICAgICAgIGJvb2wgaXNDb25mbGlj
dGVkID0gZmFsc2U7Ci0gICAgICAgIGJvb2wgaXNEZXB0aE9yU3RlbmNpbCA9IHRydWU7CiAgICAg
ICAgIHN3aXRjaCAoYXR0YWNobWVudCkgewogICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpERVBUSF9BVFRBQ0hNRU5UOgogICAgICAgICAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5n
LT5pc0RlcHRoU3RlbmNpbEF0dGFjaGVkKCkgfHwgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmlzU3Rl
bmNpbEF0dGFjaGVkKCkpCkBAIC04NjUsMjQgKzg3MiwxNCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6ZnJhbWVidWZmZXJSCiAgICAgICAgICAgICBpZiAoYnVmZmVyLT5nZXRJbnRlcm5h
bGZvcm1hdCgpICE9IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMKQogICAgICAgICAg
ICAgICAgIGlzQ29uZmxpY3RlZCA9IHRydWU7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIGlzRGVwdGhPclN0ZW5jaWwgPSBmYWxzZTsKICAgICAgICAg
fQogICAgICAgICBpZiAoaXNDb25mbGljdGVkKSB7CiAgICAgICAgICAgICBtX2NvbnRleHQtPnN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTik7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGlzRGVwdGhPclN0ZW5j
aWwpCi0gICAgICAgICAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+c2V0SXNBdHRhY2hlZChhdHRh
Y2htZW50LCB0cnVlKTsKLSAgICB9IGVsc2UgeyAvLyBEZXRhY2gKLSAgICAgICAgc3dpdGNoIChh
dHRhY2htZW50KSB7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFD
SE1FTlQ6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVO
VDoKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTF9BVFRBQ0hN
RU5UOgotICAgICAgICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPnNldElzQXR0YWNoZWQoYXR0
YWNobWVudCwgZmFsc2UpOwotICAgICAgICB9CiAgICAgfQogICAgIG1fY29udGV4dC0+ZnJhbWVi
dWZmZXJSZW5kZXJidWZmZXIodGFyZ2V0LCBhdHRhY2htZW50LCByZW5kZXJidWZmZXJ0YXJnZXQs
IGJ1ZmZlcik7CisgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPnNldEF0dGFjaG1lbnQoYXR0YWNo
bWVudCwgYnVmZmVyKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQog
CkBAIC05MDEsNiArODk4LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZyYW1lYnVm
ZmVyVAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJU
ZXh0dXJlMkQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsKTsK
KyAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+c2V0QXR0YWNobWVudChhdHRhY2htZW50LCB0ZXh0
dXJlKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCkBAIC0xNzM0
LDggKzE3MzIsMTEgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlbmRlcmJ1ZmZlcgog
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfSU5ERVg4OgogICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUw6CiAgICAgICAgIG1fY29udGV4dC0+cmVuZGVy
YnVmZmVyU3RvcmFnZSh0YXJnZXQsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKLSAg
ICAgICAgaWYgKG1fcmVuZGVyYnVmZmVyQmluZGluZykKKyAgICAgICAgaWYgKG1fcmVuZGVyYnVm
ZmVyQmluZGluZykgewogICAgICAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRJbnRl
cm5hbGZvcm1hdChpbnRlcm5hbGZvcm1hdCk7CisgICAgICAgICAgICBpZiAobV9mcmFtZWJ1ZmZl
ckJpbmRpbmcpCisgICAgICAgICAgICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQXR0YWNo
ZWRPYmplY3RDaGFuZ2UobV9yZW5kZXJidWZmZXJCaW5kaW5nLmdldCgpKTsKKyAgICAgICAgfQog
ICAgICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogICAgICAgICBicmVhazsK
ICAgICBkZWZhdWx0OgpAQCAtMTgwNCw2ICsxODA1LDIwIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp0ZXhJbWFnZTJEQmEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1bnNpZ25lZCBib3JkZXIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZm9y
bWF0LCB1bnNpZ25lZCB0eXBlLCB2b2lkKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewor
ICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IHRleCA9IDA7CisgICAgc3dpdGNoICh0YXJnZXQpIHsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEOgorICAgICAgICB0ZXggPSBt
X3RleHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVVbml0XS5tX3RleHR1cmUyREJpbmRpbmc7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9N
QVBfUE9TSVRJVkVfWDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVf
TUFQX05FR0FUSVZFX1g6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9ZOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VC
RV9NQVBfTkVHQVRJVkVfWToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1o6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9D
VUJFX01BUF9ORUdBVElWRV9aOgorICAgICAgICB0ZXggPSBtX3RleHR1cmVVbml0c1ttX2FjdGl2
ZVRleHR1cmVVbml0XS5tX3RleHR1cmVDdWJlTWFwQmluZGluZzsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQogICAgIC8vIEZJWE1FOiBGb3Igbm93IHdlIGlnbm9yZSBhbnkgZXJyb3JzIHJldHVybmVk
CiAgICAgZWMgPSAwOwogICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKSB7CkBAIC0xODExLDI1
ICsxODI2LDEzIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEQmEKICAg
ICAgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAg
IFJlZlB0cjxXZWJHTFRleHR1cmU+IHRleCA9IDA7Ci0gICAgICAgIHN3aXRjaCAodGFyZ2V0KSB7
Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQ6Ci0gICAgICAgICAg
ICB0ZXggPSBtX3RleHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVVbml0XS5tX3RleHR1cmUyREJp
bmRpbmc7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6Ci0gICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKLSAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgotICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6Ci0gICAg
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoK
LSAgICAgICAgICAgIHRleCA9IG1fdGV4dHVyZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLm1f
dGV4dHVyZUN1YmVNYXBCaW5kaW5nOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KICAg
ICAgICAgaWYgKHRleCAmJiAhbGV2ZWwpIC8vIG9ubHkgZm9yIGxldmVsIDAKICAgICAgICAgICAg
IHRleC0+c2V0U2l6ZSh0YXJnZXQsIHdpZHRoLCBoZWlnaHQpOwogICAgIH0KICAgICBtX2NvbnRl
eHQtPnRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWln
aHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhl
bHMpOworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiB0ZXgpCisgICAgICAgIG1fZnJh
bWVidWZmZXJCaW5kaW5nLT5vbkF0dGFjaGVkT2JqZWN0Q2hhbmdlKHRleC5nZXQoKSk7CiAgICAg
Y2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLmNwcAko
cmV2aXNpb24gNTk4OTgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGlj
c0NvbnRleHQzRE1hYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyMSwxNSArMzIxLDUzIEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGUoaW50IHdpZHQKICAgICAgICAgbm90SW1wbGVt
ZW50ZWQoKTsKICAgICB9CiAKLSAgICBpZiAobXVzdFJlc3RvcmVGQk8pCi0gICAgICAgIDo6Z2xC
aW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2JvdW5kRkJPKTsKKyAgICBp
ZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChH
TF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICBpZiAobV9ib3Vu
ZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQorICAgICAgICAgICAgbXVzdFJlc3RvcmVGQk8gPSBm
YWxzZTsKKyAgICB9CiAKLSAgICBHTGVudW0gY2xlYXJNYXNrID0gR0xfQ09MT1JfQlVGRkVSX0JJ
VDsKLSAgICBpZiAobV9hdHRycy5kZXB0aCkKKyAgICAvLyBJbml0aWFsaXplIHJlbmRlcmJ1ZmZl
cnMgdG8gMC4KKyAgICBHTGJvb2xlYW4gY29sb3JNYXNrW10gPSB7R0xfVFJVRSwgR0xfVFJVRSwg
R0xfVFJVRSwgR0xfVFJVRX0sIGRlcHRoTWFzayA9IEdMX1RSVUUsIHN0ZW5jaWxNYXNrID0gR0xf
VFJVRTsKKyAgICBHTGJvb2xlYW4gaXNTaXNzb3JFbmFibGVkID0gR0xfRkFMU0U7CisgICAgR0xi
b29sZWFuIGlzRGl0aGVyRW5hYmxlZCA9IEdMX0ZBTFNFOworICAgIEdMYml0ZmllbGQgY2xlYXJN
YXNrID0gR0xfQ09MT1JfQlVGRkVSX0JJVDsKKyAgICA6OmdsR2V0Qm9vbGVhbnYoR0xfQ09MT1Jf
V1JJVEVNQVNLLCBjb2xvck1hc2spOworICAgIDo6Z2xDb2xvck1hc2soR0xfVFJVRSwgR0xfVFJV
RSwgR0xfVFJVRSwgR0xfVFJVRSk7CisgICAgaWYgKG1fYXR0cnMuZGVwdGgpIHsKKyAgICAgICAg
OjpnbEdldEJvb2xlYW52KEdMX0RFUFRIX1dSSVRFTUFTSywgJmRlcHRoTWFzayk7CisgICAgICAg
IDo6Z2xEZXB0aE1hc2soR0xfVFJVRSk7CiAgICAgICAgIGNsZWFyTWFzayB8PSBHTF9ERVBUSF9C
VUZGRVJfQklUOwotICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwpCisgICAgfQorICAgIGlmIChtX2F0
dHJzLnN0ZW5jaWwpIHsKKyAgICAgICAgOjpnbEdldEJvb2xlYW52KEdMX1NURU5DSUxfV1JJVEVN
QVNLLCAmc3RlbmNpbE1hc2spOworICAgICAgICA6OmdsU3RlbmNpbE1hc2soR0xfVFJVRSk7CiAg
ICAgICAgIGNsZWFyTWFzayB8PSBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQ7CisgICAgfQorICAgIGlz
U2lzc29yRW5hYmxlZCA9IDo6Z2xJc0VuYWJsZWQoR0xfU0NJU1NPUl9URVNUKTsKKyAgICA6Omds
RGlzYWJsZShHTF9TQ0lTU09SX1RFU1QpOworICAgIGlzRGl0aGVyRW5hYmxlZCA9IDo6Z2xJc0Vu
YWJsZWQoR0xfRElUSEVSKTsKKyAgICA6OmdsRGlzYWJsZShHTF9ESVRIRVIpOworCiAgICAgOjpn
bENsZWFyKGNsZWFyTWFzayk7CisKKyAgICA6OmdsQ29sb3JNYXNrKGNvbG9yTWFza1swXSwgY29s
b3JNYXNrWzFdLCBjb2xvck1hc2tbMl0sIGNvbG9yTWFza1szXSk7CisgICAgaWYgKG1fYXR0cnMu
ZGVwdGgpCisgICAgICAgIDo6Z2xEZXB0aE1hc2soZGVwdGhNYXNrKTsKKyAgICBpZiAobV9hdHRy
cy5zdGVuY2lsKQorICAgICAgICA6OmdsU3RlbmNpbE1hc2soc3RlbmNpbE1hc2spOworICAgIGlm
IChpc1Npc3NvckVuYWJsZWQpCisgICAgICAgIDo6Z2xFbmFibGUoR0xfU0NJU1NPUl9URVNUKTsK
KyAgICBlbHNlCisgICAgICAgIDo6Z2xEaXNhYmxlKEdMX1NDSVNTT1JfVEVTVCk7CisgICAgaWYg
KGlzRGl0aGVyRW5hYmxlZCkKKyAgICAgICAgOjpnbEVuYWJsZShHTF9ESVRIRVIpOworICAgIGVs
c2UKKyAgICAgICAgOjpnbERpc2FibGUoR0xfRElUSEVSKTsKKworICAgIGlmIChtdXN0UmVzdG9y
ZUZCTykKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQs
IG1fYm91bmRGQk8pOworCiAgICAgOjpnbEZsdXNoKCk7CiB9CiAKSW5kZXg6IFdlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwko
cmV2aXNpb24gNTk5MDEpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMDUtMjAgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJ
bXBsZW1lbnQgbGF6eSBjbGVhcmluZyBvZiByZW5kZXJidWZmZXJzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjI0OAorCisgICAgICAgICogc3JjL1dl
YkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJH
cmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpyZXNoYXBlKTogQ2xlYXIgV2ViR0wgaW50ZXJu
YWwgYnVmZmVycy4KKwogMjAxMC0wNS0yMCAgVmlldC1UcnVuZyBMdXUgIDx2aWV0dHJ1bmdsdXVA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4KSW5kZXg6
IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHcmFwaGljc0NvbnRleHQzRERl
ZmF1bHRJbXBsLmNwcAkocmV2aXNpb24gNTk4OTgpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OTMs
NiArNTkzLDUwIEBAIHZvaWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6cmUKICAg
ICAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICB9CiAKKyAgICBpZiAobV9hdHRyaWJ1dGVzLmFu
dGlhbGlhcykgeworICAgICAgICBnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9F
WFQsIG1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICBpZiAobV9ib3VuZEZCTyA9PSBtX211bHRp
c2FtcGxlRkJPKQorICAgICAgICAgICAgbXVzdFJlc3RvcmVGQk8gPSBmYWxzZTsKKyAgICB9CisK
KyAgICAvLyBJbml0aWFsaXplIHJlbmRlcmJ1ZmZlcnMgdG8gMC4KKyAgICBHTGJvb2xlYW4gY29s
b3JNYXNrW10gPSB7R0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRX0sIGRlcHRoTWFz
ayA9IEdMX1RSVUUsIHN0ZW5jaWxNYXNrID0gR0xfVFJVRTsKKyAgICBHTGJvb2xlYW4gaXNTaXNz
b3JFbmFibGVkID0gR0xfRkFMU0U7CisgICAgR0xib29sZWFuIGlzRGl0aGVyRW5hYmxlZCA9IEdM
X0ZBTFNFOworICAgIEdMYml0ZmllbGQgY2xlYXJNYXNrID0gR0xfQ09MT1JfQlVGRkVSX0JJVDsK
KyAgICBnbEdldEJvb2xlYW52KEdMX0NPTE9SX1dSSVRFTUFTSywgY29sb3JNYXNrKTsKKyAgICBn
bENvbG9yTWFzayhHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFKTsKKyAgICBpZiAo
bV9hdHRyaWJ1dGVzLmRlcHRoKSB7CisgICAgICAgIGdsR2V0Qm9vbGVhbnYoR0xfREVQVEhfV1JJ
VEVNQVNLLCAmZGVwdGhNYXNrKTsKKyAgICAgICAgZ2xEZXB0aE1hc2soR0xfVFJVRSk7CisgICAg
ICAgIGNsZWFyTWFzayB8PSBHTF9ERVBUSF9CVUZGRVJfQklUOworICAgIH0KKyAgICBpZiAobV9h
dHRyaWJ1dGVzLnN0ZW5jaWwpIHsKKyAgICAgICAgZ2xHZXRCb29sZWFudihHTF9TVEVOQ0lMX1dS
SVRFTUFTSywgJnN0ZW5jaWxNYXNrKTsKKyAgICAgICAgZ2xTdGVuY2lsTWFzayhHTF9UUlVFKTsK
KyAgICAgICAgY2xlYXJNYXNrIHw9IEdMX1NURU5DSUxfQlVGRkVSX0JJVDsKKyAgICB9CisgICAg
aXNTaXNzb3JFbmFibGVkID0gZ2xJc0VuYWJsZWQoR0xfU0NJU1NPUl9URVNUKTsKKyAgICBnbERp
c2FibGUoR0xfU0NJU1NPUl9URVNUKTsKKyAgICBpc0RpdGhlckVuYWJsZWQgPSBnbElzRW5hYmxl
ZChHTF9ESVRIRVIpOworICAgIGdsRGlzYWJsZShHTF9ESVRIRVIpOworCisgICAgZ2xDbGVhcihj
bGVhck1hc2spOworCisgICAgZ2xDb2xvck1hc2soY29sb3JNYXNrWzBdLCBjb2xvck1hc2tbMV0s
IGNvbG9yTWFza1syXSwgY29sb3JNYXNrWzNdKTsKKyAgICBpZiAobV9hdHRyaWJ1dGVzLmRlcHRo
KQorICAgICAgICBnbERlcHRoTWFzayhkZXB0aE1hc2spOworICAgIGlmIChtX2F0dHJpYnV0ZXMu
c3RlbmNpbCkKKyAgICAgICAgZ2xTdGVuY2lsTWFzayhzdGVuY2lsTWFzayk7CisgICAgaWYgKGlz
U2lzc29yRW5hYmxlZCkKKyAgICAgICAgZ2xFbmFibGUoR0xfU0NJU1NPUl9URVNUKTsKKyAgICBl
bHNlCisgICAgICAgIGdsRGlzYWJsZShHTF9TQ0lTU09SX1RFU1QpOworICAgIGlmIChpc0RpdGhl
ckVuYWJsZWQpCisgICAgICAgIGdsRW5hYmxlKEdMX0RJVEhFUik7CisgICAgZWxzZQorICAgICAg
ICBnbERpc2FibGUoR0xfRElUSEVSKTsKKwogICAgIGlmIChtdXN0UmVzdG9yZUZCTykKICAgICAg
ICAgZ2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2JvdW5kRkJPKTsK
ICNlbmRpZiAvLyBSRU5ERVJfVE9fREVCVUdHSU5HX1dJTkRPVwpAQCAtNjA0LDEzICs2NDgsNiBA
QCB2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OnJlCiAgICAgfQogICAgIG1f
c2NhbmxpbmUgPSBuZXcgdW5zaWduZWQgY2hhclt3aWR0aCAqIDRdOwogI2VuZGlmIC8vIEZMSVBf
RlJBTUVCVUZGRVJfVkVSVElDQUxMWQotCi0gICAgR0xiaXRmaWVsZCBjbGVhck1hc2sgPSBHTF9D
T0xPUl9CVUZGRVJfQklUOwotICAgIGlmIChtX2F0dHJpYnV0ZXMuc3RlbmNpbCkKLSAgICAgICAg
Y2xlYXJNYXNrIHw9IEdMX1NURU5DSUxfQlVGRkVSX0JJVDsKLSAgICBpZiAobV9hdHRyaWJ1dGVz
LmRlcHRoKQotICAgICAgICBjbGVhck1hc2sgfD0gR0xfREVQVEhfQlVGRkVSX0JJVDsKLSAgICBn
bENsZWFyKGNsZWFyTWFzayk7CiB9CiAKICNpZmRlZiBGTElQX0ZSQU1FQlVGRkVSX1ZFUlRJQ0FM
TFkKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDU5OTAxKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMDUtMjAgIFpoZW55YW8gTW8gIDx6
bW9AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBJbXBsZW1lbnQgbGF6eSBjbGVhcmluZyBvZiByZW5kZXJidWZmZXJzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjI0OAorCisgICAgICAg
ICogZmFzdC9jYW52YXMvd2ViZ2wvcmVuZGVyYnVmZmVyLWluaXRpYWxpemF0aW9uLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvcmVuZGVyYnVmZmVyLWlu
aXRpYWxpemF0aW9uLmh0bWw6IEFkZGVkLgorCiAyMDEwLTA1LTIwICBWaWN0b3IgV2FuZyAgPHZp
Y3RvcndAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIFVwZGF0ZSB0ZXN0IGV4
cGVjdGF0aW9ucyBmb3IgY2hyb21pdW0uCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93
ZWJnbC9yZW5kZXJidWZmZXItaW5pdGlhbGl6YXRpb24tZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3JlbmRlcmJ1ZmZlci1pbml0aWFsaXph
dGlvbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZh
cy93ZWJnbC9yZW5kZXJidWZmZXItaW5pdGlhbGl6YXRpb24tZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDEzIEBACitWZXJpZnkgcmVuZGVyYnVmZmVycyBhcmUgaW5pdGlhbGl6
ZWQgdG8gMCBiZWZvcmUgYmVpbmcgcmVhZCBpbiBXZWJHTAorCitPbiBzdWNjZXNzLCB5b3Ugd2ls
bCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01Q
TEVURSIuCisKK1JlZ3Jlc3Npb24gdGVzdCBmb3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTM2MjQ4IDogSW1wbGVtZW50IGxhenkgY2xlYXJpbmcgb2YgcmVuZGVyYnVm
ZmVycworVGVzdCB3aGV0aGVyIHRoZSBXZWJHTCBpbnRlcm5hbCBidWZmZXJzIGhhdmUgYmVlbiBp
bml0aWFsaXplZCB0byAwLgorUEFTUyBCdWZmZXJzIGhhdmUgYmVlbiBpbml0aWFsaXplZCB0byAw
LgorVGVzdCB3aGV0aGVyIHVzZXIgY3JlYXRlZCBidWZmZXJzIGhhdmUgYmVlbiBpbml0aWFsaXpl
ZCB0byAwLgorUEFTUyBCdWZmZXJzIGhhdmUgYmVlbiBpbml0aWFsaXplZCB0byAwLgorUEFTUyBz
dWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91
dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3JlbmRlcmJ1ZmZlci1pbml0aWFsaXphdGlvbi5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3JlbmRlcmJ1ZmZl
ci1pbml0aWFsaXphdGlvbi5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9j
YW52YXMvd2ViZ2wvcmVuZGVyYnVmZmVyLWluaXRpYWxpemF0aW9uLmh0bWwJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsODEgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQi
IGhyZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyIvPgorPHNjcmlwdCBz
cmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0icmVzb3VyY2VzL3dlYmdsLXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJl
c291cmNlcy91dGlsczNkLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CitmdW5jdGlvbiBydW5UZXN0
KCkKK3sKKyAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRlc3RiZWQi
KTsKKyAgICB2YXIgZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgiZXhwZXJpbWVudGFsLXdlYmdsIik7
CisgICAgaWYgKCFnbCkgeworICAgICAgICB0ZXN0RmFpbGVkKCdjYW52YXMuZ2V0Q29udGV4dCgp
IGZhaWxlZCcpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZGVidWcoJ1Rl
c3Qgd2hldGhlciB0aGUgV2ViR0wgaW50ZXJuYWwgYnVmZmVycyBoYXZlIGJlZW4gaW5pdGlhbGl6
ZWQgdG8gMC4nKTsKKyAgICB2YXIgYnVmID0gZ2wucmVhZFBpeGVscygwLCAwLCA1MDAsIDUwMCwg
Z2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSk7CisgICAgaWYgKGdsLmdldEVycm9yKCkgIT0gZ2wu
Tk9fRVJST1IpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgnR0wgZXJyb3IgZGV0ZWN0ZWQgYWZ0ZXIg
cmVhZFBpeGVscygpLicpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHZhciB0
b3RhbEJ5dGVzID0gNTAwICogNTAwICogNDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRvdGFs
Qnl0ZXM7ICsraSkgeworICAgICAgICBpZiAoYnVmW2ldICE9IDApIHsKKyAgICAgICAgICAgIHRl
c3RGYWlsZWQoJ1dlYkdMIGludGVybmFsIGJ1ZmZlcnMgYXJlIGRpcnR5LicpOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHRlc3RQYXNzZWQoJ0J1ZmZl
cnMgaGF2ZSBiZWVuIGluaXRpYWxpemVkIHRvIDAuJyk7CisKKyAgICBkZWJ1ZygnVGVzdCB3aGV0
aGVyIHVzZXIgY3JlYXRlZCBidWZmZXJzIGhhdmUgYmVlbiBpbml0aWFsaXplZCB0byAwLicpOwor
ICAgIHZhciBmYm8gPSBnbC5jcmVhdGVGcmFtZWJ1ZmZlcigpOworICAgIGdsLmJpbmRGcmFtZWJ1
ZmZlcihnbC5GUkFNRUJVRkZFUiwgZmJvKTsKKyAgICB2YXIgY29sb3JidWZmZXIgPSBnbC5jcmVh
dGVSZW5kZXJidWZmZXIoKTsKKyAgICBnbC5iaW5kUmVuZGVyYnVmZmVyKGdsLlJFTkRFUkJVRkZF
UiwgY29sb3JidWZmZXIpOworICAgIGdsLnJlbmRlcmJ1ZmZlclN0b3JhZ2UoZ2wuUkVOREVSQlVG
RkVSLCBnbC5SR0JBNCwgNTAwLCA1MDApOworICAgIGlmIChnbC5nZXRFcnJvcigpICE9IGdsLk5P
X0VSUk9SKSB7CisgICAgICAgIHRlc3RGYWlsZWQoJ0dMIGVycm9yIGRldGVjdGVkIGFmdGVyIHJl
bmRlcmJ1ZmZlclN0b3JhZ2UoaW50ZXJuYWxmb3JtYXQgPSBSR0JBNCkuJyk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgZ2wuZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoZ2wuRlJB
TUVCVUZGRVIsIGdsLkNPTE9SX0FUVEFDSE1FTlQwLCBnbC5SRU5ERVJCVUZGRVIsIGNvbG9yYnVm
ZmVyKTsKKyAgICBpZiAoZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUikg
IT0gZ2wuRlJBTUVCVUZGRVJfQ09NUExFVEUpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgnRnJhbWVi
dWZmZXIgaW5jb21wbGV0ZS4nKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBi
dWYgPSBnbC5yZWFkUGl4ZWxzKDAsIDAsIDUwMCwgNTAwLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9C
WVRFKTsKKyAgICBpZiAoZ2wuZ2V0RXJyb3IoKSAhPSBnbC5OT19FUlJPUikgeworICAgICAgICB0
ZXN0RmFpbGVkKCdHTCBlcnJvciBkZXRlY3RlZCBhZnRlciByZWFkUGl4ZWxzKCkuJyk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbEJ5
dGVzOyArK2kpIHsKKyAgICAgICAgaWYgKGJ1ZltpXSAhPSAwKSB7CisgICAgICAgICAgICB0ZXN0
RmFpbGVkKCdVc2VyIGNyZWF0ZWQgYnVmZmVycyBhcmUgZGlydHkuJyk7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0ZXN0UGFzc2VkKCdCdWZmZXJz
IGhhdmUgYmVlbiBpbml0aWFsaXplZCB0byAwLicpOworICAgIHJldHVybiB0cnVlOworfQorPC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMgaWQ9InRlc3RiZWQiIHdpZHRoPSI1MDBw
eCIgaGVpZ2h0PSI1MDBweCI+PC9jYW52YXM+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+
Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+Cit2YXIgc3VjY2Vzc2Z1bGx5UGFy
c2VkID0gZmFsc2U7CisKK2Rlc2NyaXB0aW9uKCdWZXJpZnkgcmVuZGVyYnVmZmVycyBhcmUgaW5p
dGlhbGl6ZWQgdG8gMCBiZWZvcmUgYmVpbmcgcmVhZCBpbiBXZWJHTCcpOworCitkZWJ1ZygnUmVn
cmVzc2lvbiB0ZXN0IGZvciA8YSBocmVmPSJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MzYyNDgiPmh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0z
NjI0ODwvYT4gOiA8Y29kZT5JbXBsZW1lbnQgbGF6eSBjbGVhcmluZyBvZiByZW5kZXJidWZmZXJz
PC9jb2RlPicpOworCitydW5UZXN0KCk7CisKK3N1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cis8
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0Lmpz
Ij48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="41445"
          type_id="1"
          status="-"
          setter="dglazkov"
    />
    <flag name="commit-queue"
          id="41446"
          type_id="3"
          status="-"
          setter="dglazkov"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57029</attachid>
            <date>2010-05-25 10:58:37 -0700</date>
            <delta_ts>2010-05-27 04:43:46 -0700</delta_ts>
            <desc>revised patch : responding to Dimitri Glazkov&apos;s review</desc>
            <filename>init.patch</filename>
            <type>text/plain</type>
            <size>30856</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1OTkwMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDEgQEAKKzIwMTAtMDUtMjAgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1l
bnQgbGF6eSBjbGVhcmluZyBvZiByZW5kZXJidWZmZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjI0OAorCisgICAgICAgIFRlc3Q6IGZhc3QvY2Fu
dmFzL3dlYmdsL3JlbmRlcmJ1ZmZlci1pbml0aWFsaXphdGlvbi5odG1sCisKKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
RnJhbWVidWZmZXI6OldlYkdMRnJhbWVidWZmZXIpOiBJbml0IGFkZGVkIG1lbWJlcnMuCisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTEZyYW1lYnVmZmVyOjpzZXRBdHRhY2htZW50KTogU2V0IGF0dGFj
aG1lbnQgb2JqZWN0LgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6b25CaW5k
KTogUGVyZm9ybSBidWZmZXIgY2xlYXJpbmcgaWYgbmVlZGVkLgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xGcmFtZWJ1ZmZlcjo6b25BdHRhY2hlZE9iamVjdENoYW5nZSk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6aXNVbmluaXRpYWxpemVkKTogQ2hlY2sgd2hl
dGhlciBhbiBhdHRhY2hlZCBvYmplY3QgaXMgdW5pbml0aWFsaXplZCByZW5kZXJidWZmZXIuCisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTEZyYW1lYnVmZmVyOjpzZXRJbml0aWFsaXplZCk6IEFmdGVy
IGluaXRpYWxpemUgYSByZW5kZXJidWZmZXIsIHNldCB0aGUgZmxhZy4KKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMRnJhbWVidWZmZXI6OmluaXRpYWxpemVSZW5kZXJidWZmZXJzKTogQ2xlYXIgdW4t
aW5pdGlhbGl6ZWQgcmVuZGVyYnVmZmVycyBpZiBmcmFtZWJ1ZmZlciBpcyBjb21wbGV0ZS4KKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmg6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTEZyYW1lYnVmZmVyOjppc0RlcHRoQXR0YWNoZWQpOiBDaGFuZ2VkIHRvIGNoZWNrIG9i
amVjdC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OmlzU3RlbmNpbEF0dGFj
aGVkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXZWJHTEZyYW1lYnVmZmVyOjppc0RlcHRo
U3RlbmNpbEF0dGFjaGVkKTogRGl0dG8uCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJidWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJidWZmZXI6OldlYkdM
UmVuZGVyYnVmZmVyKTogSW5pdCBhZGRlZCBtZW1iZXJzLgorICAgICAgICAqIGh0bWwvY2FudmFz
L1dlYkdMUmVuZGVyYnVmZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmJ1ZmZl
cjo6aXNJbml0aWFsaXplZCk6IEFzIHRoZSBmdW5jdGlvbiBuYW1lLgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJidWZmZXI6OnNldEluaXRpYWxpemVkKTogRGl0dG8uCisgICAgICAgICog
aHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEZyYW1lYnVmZmVyKTogQ2FsbCBvbkJpbmQoKS4K
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleEltYWdlMkQp
OiBDYWxsIG9uQXR0YWNoZWRPYmplY3RDaGFuZ2UoKS4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlUmVuZGVyYnVmZmVyKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZVRleHR1cmUpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJhbWVidWZmZXJSZW5kZXJi
dWZmZXIpOiBDYWxsIHNldEF0dGFjaG1lbnQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKTogQ2FsbCBvbkF0dGFjaGVkT2JqZWN0
Q2hhbmdlKCkuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlbmRl
cmJ1ZmZlclN0b3JhZ2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dGV4SW1hZ2UyREJhc2UpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OnJlc2hhcGUpOiBJbml0aWFsaXplIGludGVybmFsIGJ1ZmZlcnMuCisK
IDIwMTAtMDUtMjAgIEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFN0
b3AgbGVha2luZyBhbGwgQ0FDRkNvbnRleHRzCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMRnJhbWVidWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xGcmFtZWJ1ZmZlci5jcHAJKHJldmlzaW9uIDU5ODk4KQorKysgV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTEZyYW1lYnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksMjYgKzM5LDUyIEBA
IFBhc3NSZWZQdHI8V2ViR0xGcmFtZWJ1ZmZlcj4gV2ViR0xGcmFtZWIKIAogV2ViR0xGcmFtZWJ1
ZmZlcjo6V2ViR0xGcmFtZWJ1ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0eCkKICAgICA6
IENhbnZhc09iamVjdChjdHgpCi0gICAgLCBtX2lzRGVwdGhBdHRhY2hlZChmYWxzZSkKLSAgICAs
IG1faXNTdGVuY2lsQXR0YWNoZWQoZmFsc2UpCi0gICAgLCBtX2lzRGVwdGhTdGVuY2lsQXR0YWNo
ZWQoZmFsc2UpCisgICAgLCBtX2NvbG9yQXR0YWNobWVudCgwKQorICAgICwgbV9kZXB0aEF0dGFj
aG1lbnQoMCkKKyAgICAsIG1fc3RlbmNpbEF0dGFjaG1lbnQoMCkKKyAgICAsIG1fZGVwdGhTdGVu
Y2lsQXR0YWNobWVudCgwKQogewogICAgIHNldE9iamVjdChjb250ZXh0KCktPmdyYXBoaWNzQ29u
dGV4dDNEKCktPmNyZWF0ZUZyYW1lYnVmZmVyKCkpOwogfQogCi12b2lkIFdlYkdMRnJhbWVidWZm
ZXI6OnNldElzQXR0YWNoZWQodW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCBib29sIGlzQXR0YWNo
ZWQpCit2b2lkIFdlYkdMRnJhbWVidWZmZXI6OnNldEF0dGFjaG1lbnQodW5zaWduZWQgbG9uZyBh
dHRhY2htZW50LCBDYW52YXNPYmplY3QqIGF0dGFjaGVkT2JqZWN0KQogeworICAgIGlmICghb2Jq
ZWN0KCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoYXR0YWNoZWRPYmplY3QgJiYgIWF0dGFj
aGVkT2JqZWN0LT5vYmplY3QoKSkKKyAgICAgICAgYXR0YWNoZWRPYmplY3QgPSAwOwogICAgIHN3
aXRjaCAoYXR0YWNobWVudCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FU
VEFDSE1FTlQwOgorICAgICAgICBtX2NvbG9yQXR0YWNobWVudCA9IGF0dGFjaGVkT2JqZWN0Owor
ICAgICAgICBicmVhazsKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hN
RU5UOgotICAgICAgICBtX2lzRGVwdGhBdHRhY2hlZCA9IGlzQXR0YWNoZWQ7CisgICAgICAgIG1f
ZGVwdGhBdHRhY2htZW50ID0gYXR0YWNoZWRPYmplY3Q7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVDoKLSAgICAgICAgbV9pc1N0
ZW5jaWxBdHRhY2hlZCA9IGlzQXR0YWNoZWQ7CisgICAgICAgIG1fc3RlbmNpbEF0dGFjaG1lbnQg
PSBhdHRhY2hlZE9iamVjdDsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UOgotICAgICAgICBtX2lzRGVwdGhTdGVuY2ls
QXR0YWNoZWQgPSBpc0F0dGFjaGVkOworICAgICAgICBtX2RlcHRoU3RlbmNpbEF0dGFjaG1lbnQg
PSBhdHRhY2hlZE9iamVjdDsKICAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
cmV0dXJuOwogICAgIH0KKyAgICBpbml0aWFsaXplUmVuZGVyYnVmZmVycygpOworfQorCit2b2lk
IFdlYkdMRnJhbWVidWZmZXI6Om9uQmluZCgpCit7CisgICAgaW5pdGlhbGl6ZVJlbmRlcmJ1ZmZl
cnMoKTsKK30KKwordm9pZCBXZWJHTEZyYW1lYnVmZmVyOjpvbkF0dGFjaGVkT2JqZWN0Q2hhbmdl
KENhbnZhc09iamVjdCogb2JqZWN0KQoreworICAgIC8vIEN1cnJlbnRseSBvYmplY3QgPT0gMCBp
cyBub3QgY29uc2lkZXJlZCwgYnV0IHRoaXMgbWlnaHQgY2hhbmdlIGlmIHRoZQorICAgIC8vIGxp
ZmVzcGFuIG9mIENhbnZhc09iamVjdCBjaGFuZ2VzLgorICAgIGlmIChvYmplY3QKKyAgICAgICAg
JiYgKG9iamVjdCA9PSBtX2NvbG9yQXR0YWNobWVudCB8fCBvYmplY3QgPT0gbV9kZXB0aEF0dGFj
aG1lbnQKKyAgICAgICAgICAgIHx8IG9iamVjdCA9PSBtX3N0ZW5jaWxBdHRhY2htZW50IHx8IG9i
amVjdCA9PSBtX2RlcHRoU3RlbmNpbEF0dGFjaG1lbnQpKQorICAgICAgICBpbml0aWFsaXplUmVu
ZGVyYnVmZmVycygpOwogfQogCiB2b2lkIFdlYkdMRnJhbWVidWZmZXI6Ol9kZWxldGVPYmplY3Qo
UGxhdGZvcm0zRE9iamVjdCBvYmplY3QpCkBAIC02Niw2ICs5MiwxMTUgQEAgdm9pZCBXZWJHTEZy
YW1lYnVmZmVyOjpfZGVsZXRlT2JqZWN0KFBsYQogICAgIGNvbnRleHQoKS0+Z3JhcGhpY3NDb250
ZXh0M0QoKS0+ZGVsZXRlRnJhbWVidWZmZXIob2JqZWN0KTsKIH0KIAorYm9vbCBXZWJHTEZyYW1l
YnVmZmVyOjppc1VuaW5pdGlhbGl6ZWQoQ2FudmFzT2JqZWN0KiBhdHRhY2hlZE9iamVjdCkKK3sK
KyAgICBpZiAoYXR0YWNoZWRPYmplY3QgJiYgYXR0YWNoZWRPYmplY3QtPm9iamVjdCgpICYmIGF0
dGFjaGVkT2JqZWN0LT5pc1JlbmRlcmJ1ZmZlcigpCisgICAgICAgICYmICEocmVpbnRlcnByZXRf
Y2FzdDxXZWJHTFJlbmRlcmJ1ZmZlcio+KGF0dGFjaGVkT2JqZWN0KSktPmlzSW5pdGlhbGl6ZWQo
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFdl
YkdMRnJhbWVidWZmZXI6OnNldEluaXRpYWxpemVkKENhbnZhc09iamVjdCogYXR0YWNoZWRPYmpl
Y3QpCit7CisgICAgaWYgKGF0dGFjaGVkT2JqZWN0ICYmIGF0dGFjaGVkT2JqZWN0LT5vYmplY3Qo
KSAmJiBhdHRhY2hlZE9iamVjdC0+aXNSZW5kZXJidWZmZXIoKSkKKyAgICAgICAgKHJlaW50ZXJw
cmV0X2Nhc3Q8V2ViR0xSZW5kZXJidWZmZXIqPihhdHRhY2hlZE9iamVjdCkpLT5zZXRJbml0aWFs
aXplZCgpOworfQorCit2b2lkIFdlYkdMRnJhbWVidWZmZXI6OmluaXRpYWxpemVSZW5kZXJidWZm
ZXJzKCkKK3sKKyAgICBpZiAoIW9iamVjdCgpKQorICAgICAgICByZXR1cm47CisgICAgYm9vbCBp
bml0Q29sb3IgPSBmYWxzZSwgaW5pdERlcHRoID0gZmFsc2UsIGluaXRTdGVuY2lsID0gZmFsc2U7
CisgICAgdW5zaWduZWQgbG9uZyBtYXNrID0gMDsKKyAgICBpZiAoaXNVbmluaXRpYWxpemVkKG1f
Y29sb3JBdHRhY2htZW50KSkgeworICAgICAgICBpbml0Q29sb3IgPSB0cnVlOworICAgICAgICBt
YXNrIHw9IEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUOworICAgIH0KKyAgICBp
ZiAoaXNVbmluaXRpYWxpemVkKG1fZGVwdGhBdHRhY2htZW50KSkgeworICAgICAgICBpbml0RGVw
dGggPSB0cnVlOworICAgICAgICBtYXNrIHw9IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9CVUZG
RVJfQklUOworICAgIH0KKyAgICBpZiAoaXNVbmluaXRpYWxpemVkKG1fc3RlbmNpbEF0dGFjaG1l
bnQpKSB7CisgICAgICAgIGluaXRTdGVuY2lsID0gdHJ1ZTsKKyAgICAgICAgbWFzayB8PSBHcmFw
aGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUOworICAgIH0KKyAgICBpZiAoaXNVbmlu
aXRpYWxpemVkKG1fZGVwdGhTdGVuY2lsQXR0YWNobWVudCkpIHsKKyAgICAgICAgaW5pdERlcHRo
ID0gdHJ1ZTsKKyAgICAgICAgaW5pdFN0ZW5jaWwgPSB0cnVlOworICAgICAgICBtYXNrIHw9IChH
cmFwaGljc0NvbnRleHQzRDo6REVQVEhfQlVGRkVSX0JJVCB8IEdyYXBoaWNzQ29udGV4dDNEOjpT
VEVOQ0lMX0JVRkZFUl9CSVQpOworICAgIH0KKyAgICBpZiAoIWluaXRDb2xvciAmJiAhaW5pdERl
cHRoICYmICFpbml0U3RlbmNpbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gV2Ugb25seSBj
bGVhciB1bi1pbml0aWFsaXplZCByZW5kZXJidWZmZXJzIHdoZW4gdGhleSBhcmUgcmVhZHkgdG8g
YmUKKyAgICAvLyByZWFkLCBpLmUuLCB3aGVuIHRoZSBmcmFtZWJ1ZmZlciBpcyBjb21wbGV0ZS4K
KyAgICBHcmFwaGljc0NvbnRleHQzRCogZzNkID0gY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQz
RCgpOworICAgIGlmIChnM2QtPmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQU1FQlVGRkVSKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQ09NUExF
VEUpCisgICAgICAgIHJldHVybjsKKworICAgIGZsb2F0IGNvbG9yQ2xlYXJWYWx1ZVtdID0gezAs
IDAsIDAsIDB9LCBkZXB0aENsZWFyVmFsdWUgPSAwOworICAgIGludCBzdGVuY2lsQ2xlYXJWYWx1
ZSA9IDA7CisgICAgdW5zaWduZWQgY2hhciBjb2xvck1hc2tbXSA9IHsxLCAxLCAxLCAxfSwgZGVw
dGhNYXNrID0gMSwgc3RlbmNpbE1hc2sgPSAxOworICAgIGJvb2wgaXNTY2lzc29yRW5hYmxlZCA9
IGZhbHNlOworICAgIGJvb2wgaXNEaXRoZXJFbmFibGVkID0gZmFsc2U7CisgICAgaWYgKGluaXRD
b2xvcikgeworICAgICAgICBnM2QtPmdldEZsb2F0dihHcmFwaGljc0NvbnRleHQzRDo6Q09MT1Jf
Q0xFQVJfVkFMVUUsIGNvbG9yQ2xlYXJWYWx1ZSk7CisgICAgICAgIGczZC0+Z2V0Qm9vbGVhbnYo
R3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX1dSSVRFTUFTSywgY29sb3JNYXNrKTsKKyAgICAgICAg
ZzNkLT5jbGVhckNvbG9yKDAsIDAsIDAsIDApOworICAgICAgICBnM2QtPmNvbG9yTWFzayh0cnVl
LCB0cnVlLCB0cnVlLCB0cnVlKTsKKyAgICB9CisgICAgaWYgKGluaXREZXB0aCkgeworICAgICAg
ICBnM2QtPmdldEZsb2F0dihHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ0xFQVJfVkFMVUUsICZk
ZXB0aENsZWFyVmFsdWUpOworICAgICAgICBnM2QtPmdldEJvb2xlYW52KEdyYXBoaWNzQ29udGV4
dDNEOjpERVBUSF9XUklURU1BU0ssICZkZXB0aE1hc2spOworICAgICAgICBnM2QtPmNsZWFyRGVw
dGgoMCk7CisgICAgICAgIGczZC0+ZGVwdGhNYXNrKHRydWUpOworICAgIH0KKyAgICBpZiAoaW5p
dFN0ZW5jaWwpIHsKKyAgICAgICAgZzNkLT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6
U1RFTkNJTF9DTEVBUl9WQUxVRSwgJnN0ZW5jaWxDbGVhclZhbHVlKTsKKyAgICAgICAgZzNkLT5n
ZXRCb29sZWFudihHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9XUklURU1BU0ssICZzdGVuY2ls
TWFzayk7CisgICAgICAgIGczZC0+Y2xlYXJTdGVuY2lsKDApOworICAgICAgICBnM2QtPnN0ZW5j
aWxNYXNrKHRydWUpOworICAgIH0KKyAgICBpc1NjaXNzb3JFbmFibGVkID0gZzNkLT5pc0VuYWJs
ZWQoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CisgICAgZzNkLT5kaXNhYmxlKEdy
YXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOworICAgIGlzRGl0aGVyRW5hYmxlZCA9IGcz
ZC0+aXNFbmFibGVkKEdyYXBoaWNzQ29udGV4dDNEOjpESVRIRVIpOworICAgIGczZC0+ZGlzYWJs
ZShHcmFwaGljc0NvbnRleHQzRDo6RElUSEVSKTsKKworICAgIGczZC0+Y2xlYXIobWFzayk7CisK
KyAgICBpZiAoaW5pdENvbG9yKSB7CisgICAgICAgIGczZC0+Y2xlYXJDb2xvcihjb2xvckNsZWFy
VmFsdWVbMF0sIGNvbG9yQ2xlYXJWYWx1ZVsxXSwgY29sb3JDbGVhclZhbHVlWzJdLCBjb2xvckNs
ZWFyVmFsdWVbM10pOworICAgICAgICBnM2QtPmNvbG9yTWFzayhjb2xvck1hc2tbMF0sIGNvbG9y
TWFza1sxXSwgY29sb3JNYXNrWzJdLCBjb2xvck1hc2tbM10pOworICAgIH0KKyAgICBpZiAoaW5p
dERlcHRoKSB7CisgICAgICAgIGczZC0+Y2xlYXJEZXB0aChkZXB0aENsZWFyVmFsdWUpOworICAg
ICAgICBnM2QtPmRlcHRoTWFzayhkZXB0aE1hc2spOworICAgIH0KKyAgICBpZiAoaW5pdFN0ZW5j
aWwpIHsKKyAgICAgICAgZzNkLT5jbGVhclN0ZW5jaWwoc3RlbmNpbENsZWFyVmFsdWUpOworICAg
ICAgICBnM2QtPnN0ZW5jaWxNYXNrKHN0ZW5jaWxNYXNrKTsKKyAgICB9CisgICAgaWYgKGlzU2Np
c3NvckVuYWJsZWQpCisgICAgICAgIGczZC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lT
U09SX1RFU1QpOworICAgIGVsc2UKKyAgICAgICAgZzNkLT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4
dDNEOjpTQ0lTU09SX1RFU1QpOworICAgIGlmIChpc0RpdGhlckVuYWJsZWQpCisgICAgICAgIGcz
ZC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpESVRIRVIpOworICAgIGVsc2UKKyAgICAgICAg
ZzNkLT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpESVRIRVIpOworCisgICAgaWYgKGluaXRD
b2xvcikKKyAgICAgICAgc2V0SW5pdGlhbGl6ZWQobV9jb2xvckF0dGFjaG1lbnQpOworICAgIGlm
IChpbml0RGVwdGggJiYgaW5pdFN0ZW5jaWwgJiYgbV9kZXB0aFN0ZW5jaWxBdHRhY2htZW50KQor
ICAgICAgICBzZXRJbml0aWFsaXplZChtX2RlcHRoU3RlbmNpbEF0dGFjaG1lbnQpOworICAgIGVs
c2UgeworICAgICAgICBpZiAoaW5pdERlcHRoKQorICAgICAgICAgICAgc2V0SW5pdGlhbGl6ZWQo
bV9kZXB0aEF0dGFjaG1lbnQpOworICAgICAgICBpZiAoaW5pdFN0ZW5jaWwpCisgICAgICAgICAg
ICBzZXRJbml0aWFsaXplZChtX3N0ZW5jaWxBdHRhY2htZW50KTsKKyAgICB9Cit9CisKIH0KIAog
I2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMRnJhbWVidWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
RnJhbWVidWZmZXIuaAkocmV2aXNpb24gNTk4OTgpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMRnJhbWVidWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTggKzMyLDMwIEBACiAjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAorCiAg
ICAgY2xhc3MgV2ViR0xGcmFtZWJ1ZmZlciA6IHB1YmxpYyBDYW52YXNPYmplY3QgewogICAgIHB1
YmxpYzoKICAgICAgICAgdmlydHVhbCB+V2ViR0xGcmFtZWJ1ZmZlcigpIHsgZGVsZXRlT2JqZWN0
KCk7IH0KICAgICAgICAgCiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMRnJhbWVidWZm
ZXI+IGNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKLSAgICAgICAgCi0gICAgICAgIHZv
aWQgc2V0SXNBdHRhY2hlZCh1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIGJvb2wgaXNBdHRhY2hl
ZCk7CiAKLSAgICAgICAgYm9vbCBpc0RlcHRoQXR0YWNoZWQoKSBjb25zdCB7IHJldHVybiBtX2lz
RGVwdGhBdHRhY2hlZDsgfQotICAgICAgICBib29sIGlzU3RlbmNpbEF0dGFjaGVkKCkgY29uc3Qg
eyByZXR1cm4gbV9pc1N0ZW5jaWxBdHRhY2hlZDsgfQotICAgICAgICBib29sIGlzRGVwdGhTdGVu
Y2lsQXR0YWNoZWQoKSBjb25zdCB7IHJldHVybiBtX2lzRGVwdGhTdGVuY2lsQXR0YWNoZWQ7IH0K
KyAgICAgICAgYm9vbCBpc0RlcHRoQXR0YWNoZWQoKSBjb25zdCB7IHJldHVybiAobV9kZXB0aEF0
dGFjaG1lbnQgJiYgbV9kZXB0aEF0dGFjaG1lbnQtPm9iamVjdCgpKTsgfQorICAgICAgICBib29s
IGlzU3RlbmNpbEF0dGFjaGVkKCkgY29uc3QgeyByZXR1cm4gKG1fc3RlbmNpbEF0dGFjaG1lbnQg
JiYgbV9zdGVuY2lsQXR0YWNobWVudC0+b2JqZWN0KCkpOyB9CisgICAgICAgIGJvb2wgaXNEZXB0
aFN0ZW5jaWxBdHRhY2hlZCgpIGNvbnN0IHsgcmV0dXJuIChtX2RlcHRoU3RlbmNpbEF0dGFjaG1l
bnQgJiYgbV9kZXB0aFN0ZW5jaWxBdHRhY2htZW50LT5vYmplY3QoKSk7IH0KKworICAgICAgICB2
b2lkIHNldEF0dGFjaG1lbnQodW5zaWduZWQgbG9uZywgQ2FudmFzT2JqZWN0Kik7CisKKyAgICAg
ICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgcmlnaHQgYWZ0ZXIgYSBmcmFtZWJ1ZmZlciBp
cyBib3VuZC4KKyAgICAgICAgLy8gQmVjYXVzZSByZW5kZXJidWZmZXJzIGFuZCB0ZXh0dXJlcyBh
dHRhY2hlZCB0byB0aGUgZnJhbWVidWZmZXIgbWlnaHQKKyAgICAgICAgLy8gaGF2ZSBjaGFuZ2Vk
IGFuZCB0aGUgZnJhbWVidWZmZXIgbWlnaHQgaGF2ZSBiZWNvbWUgY29tcGxldGUgd2hlbiBpdAor
ICAgICAgICAvLyBpc24ndCBib3VuZCwgc28gd2UgbmVlZCB0byBjbGVhciB1bi1pbml0aWFsaXpl
ZCByZW5kZXJidWZmZXJzLgorICAgICAgICB2b2lkIG9uQmluZCgpOworCisgICAgICAgIC8vIFdo
ZW4gYSB0ZXh0dXJlIG9yIGEgcmVuZGVyYnVmZmVyIGNoYW5nZXMsIHdlIG5lZWQgdG8gY2hlY2sg
dGhlCisgICAgICAgIC8vIGN1cnJlbnQgYm91bmQgZnJhbWVidWZmZXI7IGlmIHRoZSBuZXdseSBj
aGFuZ2VkIG9iamVjdCBpcyBhdHRhY2hlZAorICAgICAgICAvLyB0byB0aGUgZnJhbWVidWZmZXIg
YW5kIHRoZSBmcmFtZWJ1ZmZlciBiZWNvbWVzIGNvbXBsZXRlLCB3ZSBuZWVkIHRvCisgICAgICAg
IC8vIGNsZWFyIHVuLWluaXRpYWxpemVkIHJlbmRlcmJ1ZmZlcnMuCisgICAgICAgIHZvaWQgb25B
dHRhY2hlZE9iamVjdENoYW5nZShDYW52YXNPYmplY3QqKTsKIAogICAgIHByb3RlY3RlZDoKICAg
ICAgICAgV2ViR0xGcmFtZWJ1ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKQEAgLTUzLDkg
KzY1LDE2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBwcml2YXRlOgogICAgICAgICB2aXJ0
dWFsIGJvb2wgaXNGcmFtZWJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAotICAgICAg
ICBib29sIG1faXNEZXB0aEF0dGFjaGVkOwotICAgICAgICBib29sIG1faXNTdGVuY2lsQXR0YWNo
ZWQ7Ci0gICAgICAgIGJvb2wgbV9pc0RlcHRoU3RlbmNpbEF0dGFjaGVkOworICAgICAgICBib29s
IGlzVW5pbml0aWFsaXplZChDYW52YXNPYmplY3QqKTsKKyAgICAgICAgdm9pZCBzZXRJbml0aWFs
aXplZChDYW52YXNPYmplY3QqKTsKKyAgICAgICAgdm9pZCBpbml0aWFsaXplUmVuZGVyYnVmZmVy
cygpOworCisgICAgICAgIC8vIFRoZXNlIG9iamVjdHMgYXJlIGtlcHQgYWxpdmUgYnkgdGhlIGds
b2JhbCB0YWJsZSBpbgorICAgICAgICAvLyBXZWJHTFJlbmRlcmluZ0NvbnRleHQuCisgICAgICAg
IENhbnZhc09iamVjdCogbV9jb2xvckF0dGFjaG1lbnQ7CisgICAgICAgIENhbnZhc09iamVjdCog
bV9kZXB0aEF0dGFjaG1lbnQ7CisgICAgICAgIENhbnZhc09iamVjdCogbV9zdGVuY2lsQXR0YWNo
bWVudDsKKyAgICAgICAgQ2FudmFzT2JqZWN0KiBtX2RlcHRoU3RlbmNpbEF0dGFjaG1lbnQ7CiAg
ICAgfTsKICAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJidWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJidWZmZXIuY3BwCShyZXZpc2lvbiA1OTg5OCkKKysrIFdlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2
ICs0MCw3IEBAIFBhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+IFdlYkdMUmVuZGUKIFdlYkdM
UmVuZGVyYnVmZmVyOjpXZWJHTFJlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0
eCkKICAgICA6IENhbnZhc09iamVjdChjdHgpCiAgICAgLCBtX2ludGVybmFsZm9ybWF0KEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JBNCkKKyAgICAsIG1faW5pdGlhbGl6ZWQoZmFsc2UpCiB7CiAgICAg
c2V0T2JqZWN0KGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+Y3JlYXRlUmVuZGVyYnVm
ZmVyKCkpOwogfQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZmZXIuaAko
cmV2aXNpb24gNTk4OTgpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICB2b2lkIHNldEludGVybmFsZm9ybWF0KHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3Jt
YXQpIHsgbV9pbnRlcm5hbGZvcm1hdCA9IGludGVybmFsZm9ybWF0OyB9CiAgICAgICAgIHVuc2ln
bmVkIGxvbmcgZ2V0SW50ZXJuYWxmb3JtYXQoKSBjb25zdCB7IHJldHVybiBtX2ludGVybmFsZm9y
bWF0OyB9CiAKKyAgICAgICAgYm9vbCBpc0luaXRpYWxpemVkKCkgY29uc3QgeyByZXR1cm4gbV9p
bml0aWFsaXplZDsgfQorICAgICAgICB2b2lkIHNldEluaXRpYWxpemVkKCkgeyBtX2luaXRpYWxp
emVkID0gdHJ1ZTsgfQorCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBXZWJHTFJlbmRlcmJ1ZmZl
cihXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKICAgICAgICAgCkBAIC01MSw2ICs1NCw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBib29sIGlzUmVuZGVyYnVmZmVyKCkg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgICAgIHVuc2lnbmVkIGxvbmcgbV9pbnRlcm5h
bGZvcm1hdDsKKyAgICAgICAgYm9vbCBtX2luaXRpYWxpemVkOwogICAgIH07CiAgICAgCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiA1OTg5OCkKKysrIFdlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM4LDYgKzIz
OCw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kRnJhbWVidWYKICAgICB9CiAg
ICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmcgPSBidWZmZXI7CiAgICAgbV9jb250ZXh0LT5iaW5kRnJh
bWVidWZmZXIodGFyZ2V0LCBidWZmZXIpOworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykK
KyAgICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQmluZCgpOwogICAgIGNsZWFudXBBZnRl
ckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKQEAgLTQzMSwyOSArNDMzLDMxIEBAIHZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojpjb21waWxlU2hhZGUKIAogdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmNvcHlUZXhJbWFnZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIGxldmVsLCB1
bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCBsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9u
ZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQsIGxvbmcgYm9yZGVyKQogeworICAgIFJlZlB0
cjxXZWJHTFRleHR1cmU+IHRleCA9IDA7CisgICAgc3dpdGNoICh0YXJnZXQpIHsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEOgorICAgICAgICB0ZXggPSBtX3RleHR1cmVV
bml0c1ttX2FjdGl2ZVRleHR1cmVVbml0XS5tX3RleHR1cmUyREJpbmRpbmc7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJ
VkVfWDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FU
SVZFX1g6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9ZOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVH
QVRJVkVfWToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1o6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9O
RUdBVElWRV9aOgorICAgICAgICB0ZXggPSBtX3RleHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVV
bml0XS5tX3RleHR1cmVDdWJlTWFwQmluZGluZzsKKyAgICAgICAgYnJlYWs7CisgICAgfQogICAg
IGlmICghaXNHTEVTMkNvbXBsaWFudCgpKSB7CiAgICAgICAgIGlmIChsZXZlbCAmJiBXZWJHTFRl
eHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVpZ2h0KSkgewogICAgICAgICAgICAgbV9jb250ZXh0LT5z
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRyPFdlYkdMVGV4dHVyZT4g
dGV4ID0gMDsKLSAgICAgICAgc3dpdGNoICh0YXJnZXQpIHsKLSAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRDoKLSAgICAgICAgICAgIHRleCA9IG1fdGV4dHVyZVVuaXRz
W21fYWN0aXZlVGV4dHVyZVVuaXRdLm1fdGV4dHVyZTJEQmluZGluZzsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1g6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9N
QVBfTkVHQVRJVkVfWDoKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9D
VUJFX01BUF9QT1NJVElWRV9ZOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgotICAgICAgICAgICAgdGV4ID0gbV90
ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0ubV90ZXh0dXJlQ3ViZU1hcEJpbmRpbmc7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQogICAgICAgICBpZiAodGV4ICYmICFsZXZl
bCkgLy8gb25seSBmb3IgbGV2ZWwgMAogICAgICAgICAgICAgdGV4LT5zZXRTaXplKHRhcmdldCwg
d2lkdGgsIGhlaWdodCk7CiAgICAgfQogICAgIG1fY29udGV4dC0+Y29weVRleEltYWdlMkQodGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7
CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmIHRleCkKKyAgICAgICAgbV9mcmFtZWJ1
ZmZlckJpbmRpbmctPm9uQXR0YWNoZWRPYmplY3RDaGFuZ2UodGV4LmdldCgpKTsKICAgICBjbGVh
bnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCkBAIC01NDcsNiArNTUxLDggQEAgdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZVJlbmRlcgogICAgICAgICByZXR1cm47CiAg
ICAgCiAgICAgcmVuZGVyYnVmZmVyLT5kZWxldGVPYmplY3QoKTsKKyAgICBpZiAobV9mcmFtZWJ1
ZmZlckJpbmRpbmcpCisgICAgICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkF0dGFjaGVkT2Jq
ZWN0Q2hhbmdlKHJlbmRlcmJ1ZmZlcik7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpkZWxldGVTaGFkZXIoV2ViR0xTaGFkZXIqIHNoYWRlcikKQEAgLTU2Myw2ICs1NjksOCBAQCB2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlVGV4dHVyCiAgICAgICAgIHJldHVybjsK
ICAgICAKICAgICB0ZXh0dXJlLT5kZWxldGVPYmplY3QoKTsKKyAgICBpZiAobV9mcmFtZWJ1ZmZl
ckJpbmRpbmcpCisgICAgICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkF0dGFjaGVkT2JqZWN0
Q2hhbmdlKHRleHR1cmUpOwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVwdGhG
dW5jKHVuc2lnbmVkIGxvbmcgZnVuYykKQEAgLTg0NSw3ICs4NTMsNiBAQCB2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6ZnJhbWVidWZmZXJSCiAgICAgfQogICAgIGlmIChidWZmZXIgJiYgYnVm
ZmVyLT5vYmplY3QoKSkgewogICAgICAgICBib29sIGlzQ29uZmxpY3RlZCA9IGZhbHNlOwotICAg
ICAgICBib29sIGlzRGVwdGhPclN0ZW5jaWwgPSB0cnVlOwogICAgICAgICBzd2l0Y2ggKGF0dGFj
aG1lbnQpIHsKICAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVO
VDoKICAgICAgICAgICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZy0+aXNEZXB0aFN0ZW5jaWxB
dHRhY2hlZCgpIHx8IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5pc1N0ZW5jaWxBdHRhY2hlZCgpKQpA
QCAtODY1LDI0ICs4NzIsMTQgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZyYW1lYnVm
ZmVyUgogICAgICAgICAgICAgaWYgKGJ1ZmZlci0+Z2V0SW50ZXJuYWxmb3JtYXQoKSAhPSBHcmFw
aGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTCkKICAgICAgICAgICAgICAgICBpc0NvbmZsaWN0
ZWQgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICBpc0RlcHRoT3JTdGVuY2lsID0gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGlz
Q29uZmxpY3RlZCkgewogICAgICAgICAgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9Ci0gICAgICAgIGlmIChpc0RlcHRoT3JTdGVuY2lsKQotICAgICAgICAgICAg
bV9mcmFtZWJ1ZmZlckJpbmRpbmctPnNldElzQXR0YWNoZWQoYXR0YWNobWVudCwgdHJ1ZSk7Ci0g
ICAgfSBlbHNlIHsgLy8gRGV0YWNoCi0gICAgICAgIHN3aXRjaCAoYXR0YWNobWVudCkgewotICAg
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5UOgotICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQ6Ci0gICAgICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVDoKLSAgICAgICAgICAg
IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5zZXRJc0F0dGFjaGVkKGF0dGFjaG1lbnQsIGZhbHNlKTsK
LSAgICAgICAgfQogICAgIH0KICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVy
KHRhcmdldCwgYXR0YWNobWVudCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXIpOworICAgIG1f
ZnJhbWVidWZmZXJCaW5kaW5nLT5zZXRBdHRhY2htZW50KGF0dGFjaG1lbnQsIGJ1ZmZlcik7CiAg
ICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtOTAxLDYgKzg5OCw3
IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmcmFtZWJ1ZmZlclQKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKHRhcmdldCwg
YXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCk7CisgICAgbV9mcmFtZWJ1ZmZl
ckJpbmRpbmctPnNldEF0dGFjaG1lbnQoYXR0YWNobWVudCwgdGV4dHVyZSk7CiAgICAgY2xlYW51
cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIApAQCAtMTczNCw4ICsxNzMyLDExIEBAIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZW5kZXJidWZmZXIKICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpTVEVOQ0lMX0lOREVYODoKICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpE
RVBUSF9TVEVOQ0lMOgogICAgICAgICBtX2NvbnRleHQtPnJlbmRlcmJ1ZmZlclN0b3JhZ2UodGFy
Z2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIGlmIChtX3JlbmRl
cmJ1ZmZlckJpbmRpbmcpCisgICAgICAgIGlmIChtX3JlbmRlcmJ1ZmZlckJpbmRpbmcpIHsKICAg
ICAgICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0SW50ZXJuYWxmb3JtYXQoaW50ZXJu
YWxmb3JtYXQpOworICAgICAgICAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQorICAgICAg
ICAgICAgICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkF0dGFjaGVkT2JqZWN0Q2hhbmdlKG1f
cmVuZGVyYnVmZmVyQmluZGluZy5nZXQoKSk7CisgICAgICAgIH0KICAgICAgICAgY2xlYW51cEFm
dGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKQEAg
LTE4MDQsNiArMTgwNSwyMCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2Uy
REJhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
d2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgdW5zaWduZWQgYm9yZGVyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlw
ZSwgdm9pZCogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKKyAgICBSZWZQdHI8V2ViR0xU
ZXh0dXJlPiB0ZXggPSAwOworICAgIHN3aXRjaCAodGFyZ2V0KSB7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRDoKKyAgICAgICAgdGV4ID0gbV90ZXh0dXJlVW5pdHNbbV9h
Y3RpdmVUZXh0dXJlVW5pdF0ubV90ZXh0dXJlMkRCaW5kaW5nOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9a
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVf
WjoKKyAgICAgICAgdGV4ID0gbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0ubV90
ZXh0dXJlQ3ViZU1hcEJpbmRpbmc7CisgICAgICAgIGJyZWFrOworICAgIH0KICAgICAvLyBGSVhN
RTogRm9yIG5vdyB3ZSBpZ25vcmUgYW55IGVycm9ycyByZXR1cm5lZAogICAgIGVjID0gMDsKICAg
ICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkgewpAQCAtMTgxMSwyNSArMTgyNiwxMyBAQCB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyREJhCiAgICAgICAgICAgICBtX2NvbnRl
eHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBSZWZQdHI8V2ViR0xUZXh0
dXJlPiB0ZXggPSAwOwotICAgICAgICBzd2l0Y2ggKHRhcmdldCkgewotICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEOgotICAgICAgICAgICAgdGV4ID0gbV90ZXh0dXJl
VW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0ubV90ZXh0dXJlMkRCaW5kaW5nOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9N
QVBfUE9TSVRJVkVfWDoKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9D
VUJFX01BUF9ORUdBVElWRV9YOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgotICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0gICAgICAgICAgICB0ZXgg
PSBtX3RleHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVVbml0XS5tX3RleHR1cmVDdWJlTWFwQmlu
ZGluZzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CiAgICAgICAgIGlmICh0ZXggJiYg
IWxldmVsKSAvLyBvbmx5IGZvciBsZXZlbCAwCiAgICAgICAgICAgICB0ZXgtPnNldFNpemUodGFy
Z2V0LCB3aWR0aCwgaGVpZ2h0KTsKICAgICB9CiAgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKHRh
cmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKKyAgICBpZiAobV9m
cmFtZWJ1ZmZlckJpbmRpbmcgJiYgdGV4KQorICAgICAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+
b25BdHRhY2hlZE9iamVjdENoYW5nZSh0ZXguZ2V0KCkpOwogICAgIGNsZWFudXBBZnRlckdyYXBo
aWNzQ2FsbChmYWxzZSk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0dyYXBoaWNzQ29udGV4dDNETWFjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5jcHAJKHJldmlzaW9uIDU5ODk4KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMjEsMTUgKzMyMSw1MyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpyZXNoYXBlKGludCB3aWR0CiAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgfQog
Ci0gICAgaWYgKG11c3RSZXN0b3JlRkJPKQotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhU
KEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9ib3VuZEZCTyk7CisgICAgaWYgKG1fYXR0cnMuYW50aWFs
aWFzKSB7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhU
LCBtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgaWYgKG1fYm91bmRGQk8gPT0gbV9tdWx0aXNh
bXBsZUZCTykKKyAgICAgICAgICAgIG11c3RSZXN0b3JlRkJPID0gZmFsc2U7CisgICAgfQogCi0g
ICAgR0xlbnVtIGNsZWFyTWFzayA9IEdMX0NPTE9SX0JVRkZFUl9CSVQ7Ci0gICAgaWYgKG1fYXR0
cnMuZGVwdGgpCisgICAgLy8gSW5pdGlhbGl6ZSByZW5kZXJidWZmZXJzIHRvIDAuCisgICAgR0xi
b29sZWFuIGNvbG9yTWFza1tdID0ge0dMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUV9
LCBkZXB0aE1hc2sgPSBHTF9UUlVFLCBzdGVuY2lsTWFzayA9IEdMX1RSVUU7CisgICAgR0xib29s
ZWFuIGlzU2Npc3NvckVuYWJsZWQgPSBHTF9GQUxTRTsKKyAgICBHTGJvb2xlYW4gaXNEaXRoZXJF
bmFibGVkID0gR0xfRkFMU0U7CisgICAgR0xiaXRmaWVsZCBjbGVhck1hc2sgPSBHTF9DT0xPUl9C
VUZGRVJfQklUOworICAgIDo6Z2xHZXRCb29sZWFudihHTF9DT0xPUl9XUklURU1BU0ssIGNvbG9y
TWFzayk7CisgICAgOjpnbENvbG9yTWFzayhHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFLCBHTF9U
UlVFKTsKKyAgICBpZiAobV9hdHRycy5kZXB0aCkgeworICAgICAgICA6OmdsR2V0Qm9vbGVhbnYo
R0xfREVQVEhfV1JJVEVNQVNLLCAmZGVwdGhNYXNrKTsKKyAgICAgICAgOjpnbERlcHRoTWFzayhH
TF9UUlVFKTsKICAgICAgICAgY2xlYXJNYXNrIHw9IEdMX0RFUFRIX0JVRkZFUl9CSVQ7Ci0gICAg
aWYgKG1fYXR0cnMuc3RlbmNpbCkKKyAgICB9CisgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkgewor
ICAgICAgICA6OmdsR2V0Qm9vbGVhbnYoR0xfU1RFTkNJTF9XUklURU1BU0ssICZzdGVuY2lsTWFz
ayk7CisgICAgICAgIDo6Z2xTdGVuY2lsTWFzayhHTF9UUlVFKTsKICAgICAgICAgY2xlYXJNYXNr
IHw9IEdMX1NURU5DSUxfQlVGRkVSX0JJVDsKKyAgICB9CisgICAgaXNTY2lzc29yRW5hYmxlZCA9
IDo6Z2xJc0VuYWJsZWQoR0xfU0NJU1NPUl9URVNUKTsKKyAgICA6OmdsRGlzYWJsZShHTF9TQ0lT
U09SX1RFU1QpOworICAgIGlzRGl0aGVyRW5hYmxlZCA9IDo6Z2xJc0VuYWJsZWQoR0xfRElUSEVS
KTsKKyAgICA6OmdsRGlzYWJsZShHTF9ESVRIRVIpOworCiAgICAgOjpnbENsZWFyKGNsZWFyTWFz
ayk7CisKKyAgICA6OmdsQ29sb3JNYXNrKGNvbG9yTWFza1swXSwgY29sb3JNYXNrWzFdLCBjb2xv
ck1hc2tbMl0sIGNvbG9yTWFza1szXSk7CisgICAgaWYgKG1fYXR0cnMuZGVwdGgpCisgICAgICAg
IDo6Z2xEZXB0aE1hc2soZGVwdGhNYXNrKTsKKyAgICBpZiAobV9hdHRycy5zdGVuY2lsKQorICAg
ICAgICA6OmdsU3RlbmNpbE1hc2soc3RlbmNpbE1hc2spOworICAgIGlmIChpc1NjaXNzb3JFbmFi
bGVkKQorICAgICAgICA6OmdsRW5hYmxlKEdMX1NDSVNTT1JfVEVTVCk7CisgICAgZWxzZQorICAg
ICAgICA6OmdsRGlzYWJsZShHTF9TQ0lTU09SX1RFU1QpOworICAgIGlmIChpc0RpdGhlckVuYWJs
ZWQpCisgICAgICAgIDo6Z2xFbmFibGUoR0xfRElUSEVSKTsKKyAgICBlbHNlCisgICAgICAgIDo6
Z2xEaXNhYmxlKEdMX0RJVEhFUik7CisKKyAgICBpZiAobXVzdFJlc3RvcmVGQk8pCisgICAgICAg
IDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2JvdW5kRkJPKTsK
KwogICAgIDo6Z2xGbHVzaCgpOwogfQogCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDU5OTAx
KQorKysgV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDEzIEBACisyMDEwLTA1LTIwICBaaGVueWFvIE1vICA8em1vQGdvb2dsZS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IGxhenkg
Y2xlYXJpbmcgb2YgcmVuZGVyYnVmZmVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MzYyNDgKKworICAgICAgICAqIHNyYy9XZWJHcmFwaGljc0NvbnRl
eHQzRERlZmF1bHRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0
M0REZWZhdWx0SW1wbDo6cmVzaGFwZSk6IENsZWFyIFdlYkdMIGludGVybmFsIGJ1ZmZlcnMuCisK
IDIwMTAtMDUtMjAgIFZpZXQtVHJ1bmcgTHV1ICA8dmlldHRydW5nbHV1QGNocm9taXVtLm9yZz4K
IAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIuCkluZGV4OiBXZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5jcHAJ
KHJldmlzaW9uIDU5ODk4KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHcmFwaGljc0NvbnRl
eHQzRERlZmF1bHRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTkzLDYgKzU5Myw1MCBAQCB2
b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6OnJlCiAgICAgICAgIG5vdEltcGxl
bWVudGVkKCk7CiAgICAgfQogCisgICAgaWYgKG1fYXR0cmlidXRlcy5hbnRpYWxpYXMpIHsKKyAg
ICAgICAgZ2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2Ft
cGxlRkJPKTsKKyAgICAgICAgaWYgKG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKKyAg
ICAgICAgICAgIG11c3RSZXN0b3JlRkJPID0gZmFsc2U7CisgICAgfQorCisgICAgLy8gSW5pdGlh
bGl6ZSByZW5kZXJidWZmZXJzIHRvIDAuCisgICAgR0xib29sZWFuIGNvbG9yTWFza1tdID0ge0dM
X1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUV9LCBkZXB0aE1hc2sgPSBHTF9UUlVFLCBz
dGVuY2lsTWFzayA9IEdMX1RSVUU7CisgICAgR0xib29sZWFuIGlzU2Npc3NvckVuYWJsZWQgPSBH
TF9GQUxTRTsKKyAgICBHTGJvb2xlYW4gaXNEaXRoZXJFbmFibGVkID0gR0xfRkFMU0U7CisgICAg
R0xiaXRmaWVsZCBjbGVhck1hc2sgPSBHTF9DT0xPUl9CVUZGRVJfQklUOworICAgIGdsR2V0Qm9v
bGVhbnYoR0xfQ09MT1JfV1JJVEVNQVNLLCBjb2xvck1hc2spOworICAgIGdsQ29sb3JNYXNrKEdM
X1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUpOworICAgIGlmIChtX2F0dHJpYnV0ZXMu
ZGVwdGgpIHsKKyAgICAgICAgZ2xHZXRCb29sZWFudihHTF9ERVBUSF9XUklURU1BU0ssICZkZXB0
aE1hc2spOworICAgICAgICBnbERlcHRoTWFzayhHTF9UUlVFKTsKKyAgICAgICAgY2xlYXJNYXNr
IHw9IEdMX0RFUFRIX0JVRkZFUl9CSVQ7CisgICAgfQorICAgIGlmIChtX2F0dHJpYnV0ZXMuc3Rl
bmNpbCkgeworICAgICAgICBnbEdldEJvb2xlYW52KEdMX1NURU5DSUxfV1JJVEVNQVNLLCAmc3Rl
bmNpbE1hc2spOworICAgICAgICBnbFN0ZW5jaWxNYXNrKEdMX1RSVUUpOworICAgICAgICBjbGVh
ck1hc2sgfD0gR0xfU1RFTkNJTF9CVUZGRVJfQklUOworICAgIH0KKyAgICBpc1NjaXNzb3JFbmFi
bGVkID0gZ2xJc0VuYWJsZWQoR0xfU0NJU1NPUl9URVNUKTsKKyAgICBnbERpc2FibGUoR0xfU0NJ
U1NPUl9URVNUKTsKKyAgICBpc0RpdGhlckVuYWJsZWQgPSBnbElzRW5hYmxlZChHTF9ESVRIRVIp
OworICAgIGdsRGlzYWJsZShHTF9ESVRIRVIpOworCisgICAgZ2xDbGVhcihjbGVhck1hc2spOwor
CisgICAgZ2xDb2xvck1hc2soY29sb3JNYXNrWzBdLCBjb2xvck1hc2tbMV0sIGNvbG9yTWFza1sy
XSwgY29sb3JNYXNrWzNdKTsKKyAgICBpZiAobV9hdHRyaWJ1dGVzLmRlcHRoKQorICAgICAgICBn
bERlcHRoTWFzayhkZXB0aE1hc2spOworICAgIGlmIChtX2F0dHJpYnV0ZXMuc3RlbmNpbCkKKyAg
ICAgICAgZ2xTdGVuY2lsTWFzayhzdGVuY2lsTWFzayk7CisgICAgaWYgKGlzU2Npc3NvckVuYWJs
ZWQpCisgICAgICAgIGdsRW5hYmxlKEdMX1NDSVNTT1JfVEVTVCk7CisgICAgZWxzZQorICAgICAg
ICBnbERpc2FibGUoR0xfU0NJU1NPUl9URVNUKTsKKyAgICBpZiAoaXNEaXRoZXJFbmFibGVkKQor
ICAgICAgICBnbEVuYWJsZShHTF9ESVRIRVIpOworICAgIGVsc2UKKyAgICAgICAgZ2xEaXNhYmxl
KEdMX0RJVEhFUik7CisKICAgICBpZiAobXVzdFJlc3RvcmVGQk8pCiAgICAgICAgIGdsQmluZEZy
YW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9ib3VuZEZCTyk7CiAjZW5kaWYgLy8g
UkVOREVSX1RPX0RFQlVHR0lOR19XSU5ET1cKQEAgLTYwNCwxMyArNjQ4LDYgQEAgdm9pZCBXZWJH
cmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpyZQogICAgIH0KICAgICBtX3NjYW5saW5lID0g
bmV3IHVuc2lnbmVkIGNoYXJbd2lkdGggKiA0XTsKICNlbmRpZiAvLyBGTElQX0ZSQU1FQlVGRkVS
X1ZFUlRJQ0FMTFkKLQotICAgIEdMYml0ZmllbGQgY2xlYXJNYXNrID0gR0xfQ09MT1JfQlVGRkVS
X0JJVDsKLSAgICBpZiAobV9hdHRyaWJ1dGVzLnN0ZW5jaWwpCi0gICAgICAgIGNsZWFyTWFzayB8
PSBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQ7Ci0gICAgaWYgKG1fYXR0cmlidXRlcy5kZXB0aCkKLSAg
ICAgICAgY2xlYXJNYXNrIHw9IEdMX0RFUFRIX0JVRkZFUl9CSVQ7Ci0gICAgZ2xDbGVhcihjbGVh
ck1hc2spOwogfQogCiAjaWZkZWYgRkxJUF9GUkFNRUJVRkZFUl9WRVJUSUNBTExZCkluZGV4OiBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1OTkwMSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDEzIEBACisyMDEwLTA1LTIwICBaaGVueWFvIE1vICA8em1vQGdvb2dsZS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1w
bGVtZW50IGxhenkgY2xlYXJpbmcgb2YgcmVuZGVyYnVmZmVycworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzYyNDgKKworICAgICAgICAqIGZhc3QvY2Fu
dmFzL3dlYmdsL3JlbmRlcmJ1ZmZlci1pbml0aWFsaXphdGlvbi1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL3JlbmRlcmJ1ZmZlci1pbml0aWFsaXphdGlv
bi5odG1sOiBBZGRlZC4KKwogMjAxMC0wNS0yMCAgVmljdG9yIFdhbmcgIDx2aWN0b3J3QGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLiBVcGRhdGUgdGVzdCBleHBlY3RhdGlvbnMg
Zm9yIGNocm9taXVtLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVuZGVy
YnVmZmVyLWluaXRpYWxpemF0aW9uLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9yZW5kZXJidWZmZXItaW5pdGlhbGl6YXRpb24tZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVu
ZGVyYnVmZmVyLWluaXRpYWxpemF0aW9uLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxMyBAQAorVmVyaWZ5IHJlbmRlcmJ1ZmZlcnMgYXJlIGluaXRpYWxpemVkIHRvIDAgYmVm
b3JlIGJlaW5nIHJlYWQgaW4gV2ViR0wKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2Vy
aWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCitS
ZWdyZXNzaW9uIHRlc3QgZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0zNjI0OCA6IEltcGxlbWVudCBsYXp5IGNsZWFyaW5nIG9mIHJlbmRlcmJ1ZmZlcnMKK1Rlc3Qg
d2hldGhlciB0aGUgV2ViR0wgaW50ZXJuYWwgYnVmZmVycyBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQg
dG8gMC4KK1BBU1MgQnVmZmVycyBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQgdG8gMC4KK1Rlc3Qgd2hl
dGhlciB1c2VyIGNyZWF0ZWQgYnVmZmVycyBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQgdG8gMC4KK1BB
U1MgQnVmZmVycyBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQgdG8gMC4KK1BBU1Mgc3VjY2Vzc2Z1bGx5
UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L2NhbnZhcy93ZWJnbC9yZW5kZXJidWZmZXItaW5pdGlhbGl6YXRpb24uaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9yZW5kZXJidWZmZXItaW5pdGlhbGl6
YXRpb24uaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmds
L3JlbmRlcmJ1ZmZlci1pbml0aWFsaXphdGlvbi5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDgxIEBACis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8u
Li9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiLz4KKzxzY3JpcHQgc3JjPSIuLi8uLi9q
cy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291
cmNlcy93ZWJnbC10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvdXRp
bHMzZC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorZnVuY3Rpb24gcnVuVGVzdCgpCit7CisgICAg
dmFyIGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXN0YmVkIik7CisgICAgdmFy
IGdsID0gY2FudmFzLmdldENvbnRleHQoImV4cGVyaW1lbnRhbC13ZWJnbCIpOworICAgIGlmICgh
Z2wpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgnY2FudmFzLmdldENvbnRleHQoKSBmYWlsZWQnKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGRlYnVnKCdUZXN0IHdoZXRoZXIg
dGhlIFdlYkdMIGludGVybmFsIGJ1ZmZlcnMgaGF2ZSBiZWVuIGluaXRpYWxpemVkIHRvIDAuJyk7
CisgICAgdmFyIGJ1ZiA9IGdsLnJlYWRQaXhlbHMoMCwgMCwgNTAwLCA1MDAsIGdsLlJHQkEsIGds
LlVOU0lHTkVEX0JZVEUpOworICAgIGlmIChnbC5nZXRFcnJvcigpICE9IGdsLk5PX0VSUk9SKSB7
CisgICAgICAgIHRlc3RGYWlsZWQoJ0dMIGVycm9yIGRldGVjdGVkIGFmdGVyIHJlYWRQaXhlbHMo
KS4nKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICB2YXIgdG90YWxCeXRlcyA9
IDUwMCAqIDUwMCAqIDQ7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbEJ5dGVzOyArK2kp
IHsKKyAgICAgICAgaWYgKGJ1ZltpXSAhPSAwKSB7CisgICAgICAgICAgICB0ZXN0RmFpbGVkKCdX
ZWJHTCBpbnRlcm5hbCBidWZmZXJzIGFyZSBkaXJ0eS4nKTsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICB0ZXN0UGFzc2VkKCdCdWZmZXJzIGhhdmUgYmVl
biBpbml0aWFsaXplZCB0byAwLicpOworCisgICAgZGVidWcoJ1Rlc3Qgd2hldGhlciB1c2VyIGNy
ZWF0ZWQgYnVmZmVycyBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQgdG8gMC4nKTsKKyAgICB2YXIgZmJv
ID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKTsKKyAgICBnbC5iaW5kRnJhbWVidWZmZXIoZ2wuRlJB
TUVCVUZGRVIsIGZibyk7CisgICAgdmFyIGNvbG9yYnVmZmVyID0gZ2wuY3JlYXRlUmVuZGVyYnVm
ZmVyKCk7CisgICAgZ2wuYmluZFJlbmRlcmJ1ZmZlcihnbC5SRU5ERVJCVUZGRVIsIGNvbG9yYnVm
ZmVyKTsKKyAgICBnbC5yZW5kZXJidWZmZXJTdG9yYWdlKGdsLlJFTkRFUkJVRkZFUiwgZ2wuUkdC
QTQsIDUwMCwgNTAwKTsKKyAgICBpZiAoZ2wuZ2V0RXJyb3IoKSAhPSBnbC5OT19FUlJPUikgewor
ICAgICAgICB0ZXN0RmFpbGVkKCdHTCBlcnJvciBkZXRlY3RlZCBhZnRlciByZW5kZXJidWZmZXJT
dG9yYWdlKGludGVybmFsZm9ybWF0ID0gUkdCQTQpLicpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIGdsLmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBn
bC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuUkVOREVSQlVGRkVSLCBjb2xvcmJ1ZmZlcik7CisgICAg
aWYgKGdsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpICE9IGdsLkZSQU1F
QlVGRkVSX0NPTVBMRVRFKSB7CisgICAgICAgIHRlc3RGYWlsZWQoJ0ZyYW1lYnVmZmVyIGluY29t
cGxldGUuJyk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgYnVmID0gZ2wucmVh
ZFBpeGVscygwLCAwLCA1MDAsIDUwMCwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSk7CisgICAg
aWYgKGdsLmdldEVycm9yKCkgIT0gZ2wuTk9fRVJST1IpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgn
R0wgZXJyb3IgZGV0ZWN0ZWQgYWZ0ZXIgcmVhZFBpeGVscygpLicpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdG90YWxCeXRlczsgKytpKSB7
CisgICAgICAgIGlmIChidWZbaV0gIT0gMCkgeworICAgICAgICAgICAgdGVzdEZhaWxlZCgnVXNl
ciBjcmVhdGVkIGJ1ZmZlcnMgYXJlIGRpcnR5LicpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgfQorCisgICAgdGVzdFBhc3NlZCgnQnVmZmVycyBoYXZlIGJlZW4g
aW5pdGlhbGl6ZWQgdG8gMC4nKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKzwvc2NyaXB0PgorPC9o
ZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJ0ZXN0YmVkIiB3aWR0aD0iNTAwcHgiIGhlaWdodD0i
NTAwcHgiPjwvY2FudmFzPgorPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorPGRpdiBpZD0i
Y29uc29sZSI+PC9kaXY+Cis8c2NyaXB0PgordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IGZhbHNl
OworCitkZXNjcmlwdGlvbignVmVyaWZ5IHJlbmRlcmJ1ZmZlcnMgYXJlIGluaXRpYWxpemVkIHRv
IDAgYmVmb3JlIGJlaW5nIHJlYWQgaW4gV2ViR0wnKTsKKworZGVidWcoJ1JlZ3Jlc3Npb24gdGVz
dCBmb3IgPGEgaHJlZj0iaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM2
MjQ4Ij5odHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzYyNDg8L2E+IDog
PGNvZGU+SW1wbGVtZW50IGxhenkgY2xlYXJpbmcgb2YgcmVuZGVyYnVmZmVyczwvY29kZT4nKTsK
KworcnVuVGVzdCgpOworCitzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+
Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>