<?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>76248</bug_id>
          
          <creation_ts>2012-01-12 22:30:37 -0800</creation_ts>
          <short_desc>Initial implementation of GraphicsContext3DOpenGLES.cpp</short_desc>
          <delta_ts>2012-02-06 09:50:19 -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>Other</rep_platform>
          <op_sys>Linux</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>59064</blocked>
    
    <blocked>76420</blocked>
    
    <blocked>76427</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="ChangSeok Oh">kevin.cs.oh</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>kbr</cc>
    
    <cc>mrobinson</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>535450</commentid>
    <comment_count>0</comment_count>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2012-01-12 22:30:37 -0800</bug_when>
    <thetext>This bug is for implementing GraphicsContext3DOpenGLES.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536150</commentid>
    <comment_count>1</comment_count>
      <attachid>122537</attachid>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2012-01-14 00:00:32 -0800</bug_when>
    <thetext>Created attachment 122537
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536619</commentid>
    <comment_count>2</comment_count>
      <attachid>122537</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-01-16 09:22:21 -0800</bug_when>
    <thetext>Comment on attachment 122537
Patch

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

I think this needs a bit of clean up, but it&apos;s looking pretty good so far!

&gt; Source/WebCore/ChangeLog:13
&gt; +        No new tests required.

Might want to explain why there are no new tests required.

&gt; Source/WebCore/ChangeLog:27
&gt; +        * platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:
&gt; +        (WebCore::GraphicsContext3D::readRenderingResults):
&gt; +        (WebCore::GraphicsContext3D::reshape):
&gt; +        (WebCore::GraphicsContext3D::prepareTexture):
&gt; +        (WebCore::GraphicsContext3D::bindFramebuffer):
&gt; +        (WebCore::GraphicsContext3D::copyTexImage2D):
&gt; +        (WebCore::GraphicsContext3D::copyTexSubImage2D):
&gt; +        (WebCore::GraphicsContext3D::getActiveUniform):
&gt; +        (WebCore::GraphicsContext3D::readPixels):
&gt; +        (WebCore::GraphicsContext3D::renderbufferStorage):
&gt; +        (WebCore::GraphicsContext3D::getIntegerv):
&gt; +        (WebCore::GraphicsContext3D::texImage2D):

Here it might be good to briefly explain how each method differs from it&apos;s desktop GL counterpart.

&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:103
&gt; +    // resize multisample FBO

Nit. Comments should begin with a capital letter and end with a period.

&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:107
&gt; +    // resize regular FBO

Ditto.

&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:225
&gt; +    // FIXME : We don&apos;t care about multisampleFBO currently.

Extra space after FIXME. Might want to open a bug about this now.

&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:240
&gt; +    if (m_attrs.antialias &amp;&amp; m_boundFBO == m_multisampleFBO)
&gt; +        notImplemented();
&gt; +    ::glCopyTexImage2D(target, level, internalformat, x, y, width, height, border);
&gt; +    if (m_attrs.antialias &amp;&amp; m_boundFBO == m_multisampleFBO)
&gt; +        notImplemented();

Why do you do this check twice? Perhaps you should return early if multisampling is needed?

&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:250
&gt; +    if (m_attrs.antialias &amp;&amp; m_boundFBO == m_multisampleFBO)
&gt; +        notImplemented();
&gt; +    ::glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height);
&gt; +    if (m_attrs.antialias &amp;&amp; m_boundFBO == m_multisampleFBO)
&gt; +        notImplemented();

Ditto.

&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:281
&gt; +    // FIXME : &quot;[0]&quot; is added at end of name in WebGLRenderingContext::getActiveUniform()
&gt; +    // when isGLES2Compliant is only false. I haven&apos;t found the reason.
&gt; +    // So I add &quot;[0]&quot; here to avoid faling webgl conformance test(get-active-test.html),
&gt; +    // but if it makes something wrong later, remove following two lines.
&gt; +    if (isGLES2Compliant() &amp;&amp; info.size &gt; 1 &amp;&amp; !info.name.endsWith(&quot;[0]&quot;))
&gt; +        info.name.append(&quot;[0]&quot;);

Extra space after the FIXME. Might want to investigate this a bit now to avoid code churn.

&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:289
&gt; +    // FIXME: remove the two glFlush calls when the driver bug is fixed, i.e.,
&gt; +    // all previous rendering calls should be done before reading pixels.

Certainly the driver bug wouldn&apos;t affect both OpenGLES drivers and for whatever driver this work-around was added for. Can you just remove it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536945</commentid>
    <comment_count>3</comment_count>
      <attachid>122730</attachid>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2012-01-17 01:05:00 -0800</bug_when>
    <thetext>Created attachment 122730
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536960</commentid>
    <comment_count>4</comment_count>
      <attachid>122537</attachid>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2012-01-17 01:27:52 -0800</bug_when>
    <thetext>Comment on attachment 122537
Patch

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

Thank you for review. :)

&gt;&gt; Source/WebCore/ChangeLog:13
&gt;&gt; +        No new tests required.
&gt; 
&gt; Might want to explain why there are no new tests required.

Done.

&gt;&gt; Source/WebCore/ChangeLog:27
&gt;&gt; +        (WebCore::GraphicsContext3D::texImage2D):
&gt; 
&gt; Here it might be good to briefly explain how each method differs from it&apos;s desktop GL counterpart.

Done.

&gt;&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:103
&gt;&gt; +    // resize multisample FBO
&gt; 
&gt; Nit. Comments should begin with a capital letter and end with a period.

Done.

&gt;&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:107
&gt;&gt; +    // resize regular FBO
&gt; 
&gt; Ditto.

Done.

&gt;&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:225
&gt;&gt; +    // FIXME : We don&apos;t care about multisampleFBO currently.
&gt; 
&gt; Extra space after FIXME. Might want to open a bug about this now.

Done. I filed a new bug to support anti-aliasing on GLES backend.
https://bugs.webkit.org/show_bug.cgi?id=76420

&gt;&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:240
&gt;&gt; +        notImplemented();
&gt; 
&gt; Why do you do this check twice? Perhaps you should return early if multisampling is needed?

Removed two checking. I think it&apos;s better to deal with supporting multisampleing in an another bug.

&gt;&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:250
&gt;&gt; +        notImplemented();
&gt; 
&gt; Ditto.

Removed two checking, too.

&gt;&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:281
&gt;&gt; +        info.name.append(&quot;[0]&quot;);
&gt; 
&gt; Extra space after the FIXME. Might want to investigate this a bit now to avoid code churn.

Removed lines.
Though I opened a new bug76427 to fix it, the issue is not reproduced after updating webgl conformance test.
Let me keep track of it. If there is no issue, then I&apos;ll close the bug without any change.

&gt;&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:289
&gt;&gt; +    // all previous rendering calls should be done before reading pixels.
&gt; 
&gt; Certainly the driver bug wouldn&apos;t affect both OpenGLES drivers and for whatever driver this work-around was added for. Can you just remove it?

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540152</commentid>
    <comment_count>5</comment_count>
      <attachid>122730</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-01-21 10:34:09 -0800</bug_when>
    <thetext>Comment on attachment 122730
Patch

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

This is a good first pass, but I think we can get a lot closer to sharing most of this code. Please consider the suggestions below. Ping me online if you need further information about my comments.

&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:51
&gt; +    if (m_attrs.antialias) {
&gt; +        // FIXME: We don&apos;t support antialiasing yet.

See below: Here you could call resolveMultisamplingIfNecessary. I think with that change you could share this method entirely.

&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:70
&gt; +    for (int i = 0; i &lt; totalBytes; i += 4)
&gt; +        std::swap(pixels[i], pixels[i + 2]); // Convert to BGRA

If you put this function back in the shared file you could just add a member like m_convertRenderingResultsToBGRA and make it true for GLES and false for desktop GL.

&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:133
&gt; +        if (m_attributes.stencil) {
&gt; +            ::glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, m_stencilBuffer);
&gt; +            ::glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_STENCIL_INDEX8, width, height);
&gt; +            ::glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_STENCIL_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, m_stencilBuffer);
&gt; +            ::glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, 0);
&gt; +        }
&gt; +        if (m_attributes.depth) {
&gt; +            ::glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, m_depthBuffer);
&gt; +            ::glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT16, width, height);
&gt; +            ::glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, m_depthBuffer);
&gt; +            ::glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, 0);
&gt; +        }
&gt; +
&gt; +        ::glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, 0);

OpenGL ES also has the concept of a packed depth/stencil buffer as well -- see the GL_OES_packed_depth_stencil extension. If you used that you could share setting up the single-sample framebuffer with the desktop implementation. If, for some reason, that&apos;s not an option (your target device does not support packed depth/stencil), then at the very least you should consider avoiding calling ::glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, 0) twice in a row here.

&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:194
&gt; +    // Initialize renderbuffers to 0.
&gt; +    GLfloat clearColor[] = {0, 0, 0, 0}, clearDepth = 0;
&gt; +    GLint clearStencil = 0;
&gt; +    GLboolean colorMask[] = {GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE}, depthMask = GL_TRUE;
&gt; +    GLuint stencilMask = 0xffffffff;
&gt; +    GLboolean isScissorEnabled = GL_FALSE;
&gt; +    GLboolean isDitherEnabled = GL_FALSE;
&gt; +    GLbitfield clearMask = GL_COLOR_BUFFER_BIT;
&gt; +    ::glGetFloatv(GL_COLOR_CLEAR_VALUE, clearColor);
&gt; +    ::glClearColor(0, 0, 0, 0);
&gt; +    ::glGetBooleanv(GL_COLOR_WRITEMASK, colorMask);
&gt; +    ::glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
&gt; +    if (m_attrs.depth) {
&gt; +        ::glGetFloatv(GL_DEPTH_CLEAR_VALUE, &amp;clearDepth);
&gt; +        ::glClearDepth(1);
&gt; +        ::glGetBooleanv(GL_DEPTH_WRITEMASK, &amp;depthMask);
&gt; +        ::glDepthMask(GL_TRUE);
&gt; +        clearMask |= GL_DEPTH_BUFFER_BIT;
&gt; +    }
&gt; +    if (m_attrs.stencil) {
&gt; +        ::glGetIntegerv(GL_STENCIL_CLEAR_VALUE, &amp;clearStencil);
&gt; +        ::glClearStencil(0);
&gt; +        ::glGetIntegerv(GL_STENCIL_WRITEMASK, reinterpret_cast&lt;GLint*&gt;(&amp;stencilMask));
&gt; +        ::glStencilMaskSeparate(GL_FRONT, 0xffffffff);
&gt; +        clearMask |= GL_STENCIL_BUFFER_BIT;
&gt; +    }
&gt; +    isScissorEnabled = ::glIsEnabled(GL_SCISSOR_TEST);
&gt; +    ::glDisable(GL_SCISSOR_TEST);
&gt; +    isDitherEnabled = ::glIsEnabled(GL_DITHER);
&gt; +    ::glDisable(GL_DITHER);
&gt; +
&gt; +    ::glClear(clearMask);
&gt; +
&gt; +    ::glClearColor(clearColor[0], clearColor[1], clearColor[2], clearColor[3]);
&gt; +    ::glColorMask(colorMask[0], colorMask[1], colorMask[2], colorMask[3]);
&gt; +    if (m_attrs.depth) {
&gt; +        ::glClearDepth(clearDepth);
&gt; +        ::glDepthMask(depthMask);
&gt; +    }
&gt; +    if (m_attrs.stencil) {
&gt; +        ::glClearStencil(clearStencil);
&gt; +        ::glStencilMaskSeparate(GL_FRONT, stencilMask);
&gt; +    }
&gt; +    if (isScissorEnabled)
&gt; +        ::glEnable(GL_SCISSOR_TEST);
&gt; +    else
&gt; +        ::glDisable(GL_SCISSOR_TEST);
&gt; +
&gt; +    if (isDitherEnabled)
&gt; +        ::glEnable(GL_DITHER);
&gt; +    else
&gt; +        ::glDisable(GL_DITHER);
&gt; +
&gt; +    if (mustRestoreFBO)
&gt; +        ::glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_boundFBO);

Is this bit of code exactly the same as the desktop counterpart? If so, you should split it off into a helper method and call it, rather than copy and pasting.

&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:213
&gt; +    if (m_layerComposited)
&gt; +        return;
&gt; +
&gt; +    makeContextCurrent();
&gt; +    ::glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_fbo);
&gt; +    ::glActiveTexture(GL_TEXTURE0);
&gt; +    ::glBindTexture(GL_TEXTURE_2D, m_compositorTexture);
&gt; +    ::glCopyTexImage2D(GL_TEXTURE_2D, 0, m_internalColorFormat, 0, 0, m_currentWidth, m_currentHeight, 0);
&gt; +    ::glBindTexture(GL_TEXTURE_2D, m_boundTexture0);
&gt; +    ::glActiveTexture(m_activeTexture);
&gt; +    ::glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_boundFBO);
&gt; +    ::glFinish();
&gt; +    m_layerComposited = true;

Hrm. This is one case where it would have made more sense to use and #ifdef. Another approach is to move this to the common file and make a helper called resolveMultisamplingIfNecessary which has an empty implementation for OpenGLES.

&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:223
&gt; +    makeContextCurrent();
&gt; +    GLuint fbo = buffer ? buffer : m_fbo;
&gt; +    if (fbo != m_boundFBO) {
&gt; +        ::glBindFramebufferEXT(target, fbo);
&gt; +        m_boundFBO = fbo;
&gt; +    }

This could be shared easily if you simply ensured that m_attrs.antialias was always false for OpenGL ES.

&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:229
&gt; +    makeContextCurrent();
&gt; +    ::glCopyTexImage2D(target, level, internalformat, x, y, width, height, border);

You can also share this if you make resolveMultisamplingIfNecessary take a rectangle.

&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:242
&gt; +    makeContextCurrent();
&gt; +    ::glFlush();
&gt; +    ::glReadPixels(x, y, width, height, format, type, data);

Hey, same thing here! :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542256</commentid>
    <comment_count>6</comment_count>
      <attachid>123938</attachid>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2012-01-25 07:40:03 -0800</bug_when>
    <thetext>Created attachment 123938
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542266</commentid>
    <comment_count>7</comment_count>
      <attachid>122730</attachid>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2012-01-25 07:54:54 -0800</bug_when>
    <thetext>Comment on attachment 122730
Patch

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

Thank you very much for review!

&gt;&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:51
&gt;&gt; +        // FIXME: We don&apos;t support antialiasing yet.
&gt; 
&gt; See below: Here you could call resolveMultisamplingIfNecessary. I think with that change you could share this method entirely.

Added resolveMultisamplingIfNecessary as you commented.  And also I moved readRenderingResults into GraphicsContext3DCommon.

&gt;&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:70
&gt;&gt; +        std::swap(pixels[i], pixels[i + 2]); // Convert to BGRA
&gt; 
&gt; If you put this function back in the shared file you could just add a member like m_convertRenderingResultsToBGRA and make it true for GLES and false for desktop GL.

Done. In my humble opinion, a new member is not needed. Because just using isGLES2Compliant() is enough to do that.

&gt;&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:194
&gt;&gt; +        ::glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_boundFBO);
&gt; 
&gt; Is this bit of code exactly the same as the desktop counterpart? If so, you should split it off into a helper method and call it, rather than copy and pasting.

Done. I moved GC3D::reshape() into GC3DOpenGLCommon and newly added helper function resizeFBOs at GC3DOpenGL.cpp &amp; GC3DOpenGLES.cpp for each files.

&gt;&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:213
&gt;&gt; +    m_layerComposited = true;
&gt; 
&gt; Hrm. This is one case where it would have made more sense to use and #ifdef. Another approach is to move this to the common file and make a helper called resolveMultisamplingIfNecessary which has an empty implementation for OpenGLES.

Done.

&gt;&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:223
&gt;&gt; +    }
&gt; 
&gt; This could be shared easily if you simply ensured that m_attrs.antialias was always false for OpenGL ES.

Done. Added condition in GC3D::validateAttributes to disable antialiasing for GLES.

&gt;&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:229
&gt;&gt; +    ::glCopyTexImage2D(target, level, internalformat, x, y, width, height, border);
&gt; 
&gt; You can also share this if you make resolveMultisamplingIfNecessary take a rectangle.

Done.

&gt;&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:242
&gt;&gt; +    ::glReadPixels(x, y, width, height, format, type, data);
&gt; 
&gt; Hey, same thing here! :)

ditto. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542281</commentid>
    <comment_count>8</comment_count>
      <attachid>122730</attachid>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2012-01-25 08:09:18 -0800</bug_when>
    <thetext>Comment on attachment 122730
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:133
&gt;&gt; +        ::glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, 0);
&gt; 
&gt; OpenGL ES also has the concept of a packed depth/stencil buffer as well -- see the GL_OES_packed_depth_stencil extension. If you used that you could share setting up the single-sample framebuffer with the desktop implementation. If, for some reason, that&apos;s not an option (your target device does not support packed depth/stencil), then at the very least you should consider avoiding calling ::glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, 0) twice in a row here.

Hm. To tell you the truth. I haven&apos;t know about GL_OES_packed_depth_stencil extension. I need more time to research and test it. :p. Here I opened a new bug to support it. http://webkit.org/b/77011
Removed  calling ::glBindRenderbufferEXT twice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542914</commentid>
    <comment_count>9</comment_count>
      <attachid>124068</attachid>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2012-01-26 00:11:11 -0800</bug_when>
    <thetext>Created attachment 124068
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>542916</commentid>
    <comment_count>10</comment_count>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2012-01-26 00:15:48 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 122730 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=122730&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:133
&gt; &gt;&gt; +        ::glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, 0);
&gt; &gt; 
&gt; &gt; OpenGL ES also has the concept of a packed depth/stencil buffer as well -- see the GL_OES_packed_depth_stencil extension. If you used that you could share setting up the single-sample framebuffer with the desktop implementation. If, for some reason, that&apos;s not an option (your target device does not support packed depth/stencil), then at the very least you should consider avoiding calling ::glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, 0) twice in a row here.
&gt; 
&gt; Hm. To tell you the truth. I haven&apos;t know about GL_OES_packed_depth_stencil extension. I need more time to research and test it. :p. Here I opened a new bug to support it. http://webkit.org/b/77011
&gt; Removed  calling ::glBindRenderbufferEXT twice.

My target looks like supporting GL_OES_packed_depth_stencil. So I&apos;ve updated the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548217</commentid>
    <comment_count>11</comment_count>
      <attachid>124068</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-02-02 16:00:58 -0800</bug_when>
    <thetext>Comment on attachment 124068
Patch

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

Looking good. I&apos;ve listed a few small things below.

&gt; Source/WebCore/platform/graphics/GraphicsContext3D.h:902
&gt; +    void resolveMultisamplingIfNecessary(GC3Dint x, GC3Dint y, GC3Dsizei width, GC3Dsizei height);

Better to pass an IntRect here.

&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:46
&gt; +bool GraphicsContext3D::resizeFBOs(int width, int height)

Better to pass an const IntSize&amp; here. reshapeFBOs might be a better name to match the caller.

&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:74
&gt; +        bool supportPackedDepthStencilBuffer = false;
&gt; +        if (isGLES2Compliant())
&gt; +            supportPackedDepthStencilBuffer = extensions-&gt;supports(&quot;GL_OES_packed_depth_stencil&quot;);
&gt; +        else
&gt; +            supportPackedDepthStencilBuffer = extensions-&gt;supports(&quot;GL_EXT_packed_depth_stencil&quot;);
&gt; +
&gt; +        if (supportPackedDepthStencilBuffer) {
&gt; +            if (isGLES2Compliant())
&gt; +                extensions-&gt;ensureEnabled(&quot;GL_OES_packed_depth_stencil&quot;);
&gt; +            else
&gt; +                extensions-&gt;ensureEnabled(&quot;GL_EXT_packed_depth_stencil&quot;);

Here it might be better to do something like this:

const const char* packedDepthStencilExtension = isGLES2Compliant() ? &quot;GL_OES_packed_depth_stencil&quot; : &quot;GL_EXT_packed_depth_stencil&quot;;
if (extensions-&gt;supports(packedDepthStencilExtension)) {
    extensions-&gt;ensureEnabled(packedDepthStencilExtension);

&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:160
&gt; +    if (m_attrs.antialias)
&gt; +        resolveMultisamplingIfNecessary(0, 0, m_currentWidth, m_currentHeight);

It seems like this should be checking whether m_boundFBO == m_multisampleFBO, but we need to ask the original author to answer that question, I think. Later it might be good to suck more of the logic into resolveMultisamplingIfNecessary. Perhaps it would be better as bool resolveMultisamplingIfNecessaryAndBindSingleSampleFramebuffer() or something like that. :)

&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:204
&gt; +            std::swap(pixels[i], pixels[i + 2]); // Convert to BGRA

Nit: Missing a period at the end of this comment.

&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:59
&gt; +    bool supportPackedDepthStencilBuffer = false;
&gt; +    if (m_attrs.stencil || m_attrs.depth) {
&gt; +        // We don&apos;t allow the logic where stencil is required and depth is not.
&gt; +        // See GraphicsContext3D::validateAttributes.
&gt; +        Extensions3D* extensions = getExtensions();
&gt; +        supportPackedDepthStencilBuffer = extensions-&gt;supports(&quot;GL_OES_packed_depth_stencil&quot;);

This could simply be:

// We don&apos;t allow the logic where stencil is required and depth is not.
// See GraphicsContext3D::validateAttributes.
supportsPackedDepthStencilBuffer = (m_attrs.stencil || m_attrs.depth) &amp;&amp; getExtensions()-&gt;-&gt;supports(&quot;GL_OES_packed_depth_stencil&quot;);

&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:77
&gt; +    if (!m_attrs.antialias &amp;&amp; (m_attrs.stencil || m_attrs.depth)) {

Better to ASSERT(!m_attrs.antialias) instead of checking it when you know it&apos;s always false.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548580</commentid>
    <comment_count>12</comment_count>
      <attachid>124068</attachid>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2012-02-03 01:52:41 -0800</bug_when>
    <thetext>Comment on attachment 124068
Patch

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

Thank you for review. The codes look more simple and better! :)
BTW, I have a small question, please see below.

&gt;&gt; Source/WebCore/platform/graphics/GraphicsContext3D.h:902
&gt;&gt; +    void resolveMultisamplingIfNecessary(GC3Dint x, GC3Dint y, GC3Dsizei width, GC3Dsizei height);
&gt; 
&gt; Better to pass an IntRect here.

Done.

&gt;&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:46
&gt;&gt; +bool GraphicsContext3D::resizeFBOs(int width, int height)
&gt; 
&gt; Better to pass an const IntSize&amp; here. reshapeFBOs might be a better name to match the caller.

Done.

&gt;&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:74
&gt;&gt; +                extensions-&gt;ensureEnabled(&quot;GL_EXT_packed_depth_stencil&quot;);
&gt; 
&gt; Here it might be better to do something like this:
&gt; 
&gt; const const char* packedDepthStencilExtension = isGLES2Compliant() ? &quot;GL_OES_packed_depth_stencil&quot; : &quot;GL_EXT_packed_depth_stencil&quot;;
&gt; if (extensions-&gt;supports(packedDepthStencilExtension)) {
&gt;     extensions-&gt;ensureEnabled(packedDepthStencilExtension);

Done.

&gt;&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:160
&gt;&gt; +        resolveMultisamplingIfNecessary(0, 0, m_currentWidth, m_currentHeight);
&gt; 
&gt; It seems like this should be checking whether m_boundFBO == m_multisampleFBO, but we need to ask the original author to answer that question, I think. Later it might be good to suck more of the logic into resolveMultisamplingIfNecessary. Perhaps it would be better as bool resolveMultisamplingIfNecessaryAndBindSingleSampleFramebuffer() or something like that. :)

Reasonable. When I test with &quot;if (m_attrs.antialias &amp;&amp; m_boundFBO == m_multisampleFBO)&quot; in here, no issue found. So, do you want to deal with the change you mentioned in this bug? Please let me know. :)

&gt;&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:204
&gt;&gt; +            std::swap(pixels[i], pixels[i + 2]); // Convert to BGRA
&gt; 
&gt; Nit: Missing a period at the end of this comment.

Done. Also I did it at some lines else. :)

&gt;&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:59
&gt;&gt; +        supportPackedDepthStencilBuffer = extensions-&gt;supports(&quot;GL_OES_packed_depth_stencil&quot;);
&gt; 
&gt; This could simply be:
&gt; 
&gt; // We don&apos;t allow the logic where stencil is required and depth is not.
&gt; // See GraphicsContext3D::validateAttributes.
&gt; supportsPackedDepthStencilBuffer = (m_attrs.stencil || m_attrs.depth) &amp;&amp; getExtensions()-&gt;-&gt;supports(&quot;GL_OES_packed_depth_stencil&quot;);

Done.

&gt;&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:77
&gt;&gt; +    if (!m_attrs.antialias &amp;&amp; (m_attrs.stencil || m_attrs.depth)) {
&gt; 
&gt; Better to ASSERT(!m_attrs.antialias) instead of checking it when you know it&apos;s always false.

Done. Inserted it at the upper row.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549425</commentid>
    <comment_count>13</comment_count>
      <attachid>125490</attachid>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2012-02-04 03:34:09 -0800</bug_when>
    <thetext>Created attachment 125490
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550070</commentid>
    <comment_count>14</comment_count>
      <attachid>125490</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-06 09:50:13 -0800</bug_when>
    <thetext>Comment on attachment 125490
Patch

Clearing flags on attachment: 125490

Committed r106815: &lt;http://trac.webkit.org/changeset/106815&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550071</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-06 09:50:19 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122537</attachid>
            <date>2012-01-14 00:00:32 -0800</date>
            <delta_ts>2012-01-17 01:27:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76248-20120114170031.patch</filename>
            <type>text/plain</type>
            <size>13244</size>
            <attacher name="ChangSeok Oh">kevin.cs.oh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0OTAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzhjYmRkMDA4YzllNjYx
YzJjZWJiNjUxOTIxZjEyNWRmMzA2NGEyYi4uZDEzMzQ3MzFmZmRlMzVkMGUyYzVjOTQ5MGRhZTFh
M2MyZTE5ZjdjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDEyLTAxLTEzICBDaGFu
Z1Nlb2sgT2ggIDxzaGl2YW1pZG93QGdtYWlsLmNvbT4KKworICAgICAgICBJbml0aWFsIGltcGxl
bWVudGF0aW9uIG9mIEdyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjI0OAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudGVkIEFQSXMgaW4gR3Jh
cGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAgYWNjb3JkaW5nIHRvIGdsZXMgc3BlYyByb3VnaGx5
LgorICAgICAgICBCdXQgbm8gd2F5IHRvIHJ1biB0aGVzZSBjb2RlcyByaWdodCBub3csIGJlY2F1
c2UgdGhleSBuZWVkIGV4dHJhIHBvcnQKKyAgICAgICAgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24g
dG8gd29yay4gSSBwbGFuIHRvIGFkZCB0aGVzZSBleHRyYSBjb2RlcyBmb3IgZ2t0IHBvcnQKKyAg
ICAgICAgaW4gYSBuZXh0IHBhdGNoLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyByZXF1aXJlZC4K
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRSZW5kZXJpbmdS
ZXN1bHRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwcmVwYXJlVGV4dHVyZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmluZEZyYW1lYnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4SW1hZ2UyRCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y29weVRleFN1YkltYWdlMkQpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZVVuaWZvcm0pOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHMpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVnZXJ2KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKToKKwogMjAxMi0wMS0xMiAgR2F2
aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAgQ2xlYW4g
dXAgcHV0RGlyZWN0IChwYXJ0IDIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAppbmRleCBlNGY2OWQ4YWE2Njg4ZjA5ZTNhNWEz
OGVmOTk3ZTEzN2Y4MDkzYjgyLi40MjM3NDY1ZTE2YjQ4Y2JkMDA4ZTI0ZWFhNGI1ZDM4NzMwYTE1
NmY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQzRC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dDNELmgKQEAgLTkzMyw3ICs5MzMsNyBAQCBwdWJsaWM6CiAKICAgICBHQzNEdWlu
dCBtX3RleHR1cmUsIG1fY29tcG9zaXRvclRleHR1cmU7CiAgICAgR0MzRHVpbnQgbV9mYm87Ci0j
aWYgUExBVEZPUk0oUVQpICYmIGRlZmluZWQoUVRfT1BFTkdMX0VTXzIpCisjaWYgVVNFKE9QRU5H
TF9FU18yKSB8fCAoUExBVEZPUk0oUVQpICYmIGRlZmluZWQoUVRfT1BFTkdMX0VTXzIpKQogICAg
IEdDM0R1aW50IG1fZGVwdGhCdWZmZXI7CiAgICAgR0MzRHVpbnQgbV9zdGVuY2lsQnVmZmVyOwog
I2Vsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5n
bC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcAppbmRleCA5MGZm
NWEwYTM0NWJkZjY0Yjk3ODBkNDhkYjY0MjUwNjY3ZGYzMTI1Li5lNjFhZGY0ODA2NzgzZWNiMmI4
OTcyMzRhNTliYWRjOWJmMWYwY2M2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3Bl
bkdMRVMuY3BwCkBAIC00MCw1OSArNDAsMjgzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHModW5zaWduZWQgY2hhciAq
cGl4ZWxzLCBpbnQgcGl4ZWxzU2l6ZSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGlu
dCB0b3RhbEJ5dGVzID0gbV9jdXJyZW50V2lkdGggKiBtX2N1cnJlbnRIZWlnaHQgKiA0OworICAg
IGlmIChwaXhlbHNTaXplIDwgdG90YWxCeXRlcykKKyAgICAgICAgcmV0dXJuOworCisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBib29sIG11c3RSZXN0b3JlRkJPID0gZmFsc2U7Cisg
ICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKQorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IGVsc2UgeworICAgICAgICBpZiAobV9ib3VuZEZCTyAhPSBtX2ZibykgeworICAgICAgICAgICAg
bXVzdFJlc3RvcmVGQk8gPSB0cnVlOworICAgICAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVY
VChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEdM
aW50IHBhY2tBbGlnbm1lbnQgPSA0OworICAgIGJvb2wgbXVzdFJlc3RvcmVQYWNrQWxpZ25tZW50
ID0gZmFsc2U7CisgICAgOjpnbEdldEludGVnZXJ2KEdMX1BBQ0tfQUxJR05NRU5ULCAmcGFja0Fs
aWdubWVudCk7CisgICAgaWYgKHBhY2tBbGlnbm1lbnQgPiA0KSB7CisgICAgICAgIDo6Z2xQaXhl
bFN0b3JlaShHTF9QQUNLX0FMSUdOTUVOVCwgNCk7CisgICAgICAgIG11c3RSZXN0b3JlUGFja0Fs
aWdubWVudCA9IHRydWU7CisgICAgfQorCisgICAgOjpnbFJlYWRQaXhlbHMoMCwgMCwgbV9jdXJy
ZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgcGl4
ZWxzKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHRvdGFsQnl0ZXM7IGkgKz0gNCkKKyAgICAg
ICAgc3RkOjpzd2FwKHBpeGVsc1tpXSwgcGl4ZWxzW2kgKyAyXSk7IC8vIENvbnZlcnQgdG8gQkdS
QQorCisgICAgaWYgKG11c3RSZXN0b3JlUGFja0FsaWdubWVudCkKKyAgICAgICAgOjpnbFBpeGVs
U3RvcmVpKEdMX1BBQ0tfQUxJR05NRU5ULCBwYWNrQWxpZ25tZW50KTsKKworICAgIGlmIChtdXN0
UmVzdG9yZUZCTykKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZF
Ul9FWFQsIG1fYm91bmRGQk8pOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBl
KGludCB3aWR0aCwgaW50IGhlaWdodCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGlm
ICghcGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAod2lkdGggPT0gbV9jdXJyZW50V2lkdGggJiYgaGVpZ2h0ID09IG1fY3VycmVudEhlaWdodCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9jdXJyZW50V2lkdGggPSB3aWR0aDsKKyAgICBtX2N1
cnJlbnRIZWlnaHQgPSBoZWlnaHQ7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICB2
YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKKworICAgIEdMdWludCBjb2xvckZvcm1hdCA9IDAsIHBpeGVs
RGF0YVR5cGUgPSAwOworICAgIGlmIChtX2F0dHJzLmFscGhhKSB7CisgICAgICAgIG1faW50ZXJu
YWxDb2xvckZvcm1hdCA9IEdMX1JHQkE7CisgICAgICAgIGNvbG9yRm9ybWF0ID0gR0xfUkdCQTsK
KyAgICAgICAgcGl4ZWxEYXRhVHlwZSA9IEdMX1VOU0lHTkVEX0JZVEU7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgbV9pbnRlcm5hbENvbG9yRm9ybWF0ID0gR0xfUkdCOworICAgICAgICBjb2xvckZv
cm1hdCA9IEdMX1JHQjsKKyAgICAgICAgcGl4ZWxEYXRhVHlwZSA9IEdMX1VOU0lHTkVEX1NIT1JU
XzVfNl81OworICAgIH0KKworICAgIC8vIHJlc2l6ZSBtdWx0aXNhbXBsZSBGQk8KKyAgICBpZiAo
bV9hdHRycy5hbnRpYWxpYXMpCisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisKKyAgICAvLyBy
ZXNpemUgcmVndWxhciBGQk8KKyAgICBib29sIG11c3RSZXN0b3JlRkJPID0gZmFsc2U7CisgICAg
aWYgKG1fYm91bmRGQk8gIT0gbV9mYm8pIHsKKyAgICAgICAgbXVzdFJlc3RvcmVGQk8gPSB0cnVl
OworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9m
Ym8pOworICAgIH0KKworICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1
cmUpOworICAgIDo6Z2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIG1faW50ZXJuYWxDb2xv
ckZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgY29sb3JGb3JtYXQsIHBpeGVsRGF0YVR5cGUsIDAp
OworICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1cmUyREVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdM
X0NPTE9SX0FUVEFDSE1FTlQwX0VYVCwgR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlLCAwKTsKKwor
ICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2NvbXBvc2l0b3JUZXh0dXJlKTsK
KyAgICA6OmdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBtX2ludGVybmFsQ29sb3JGb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIDAsIGNvbG9yRm9ybWF0LCBHTF9VTlNJR05FRF9CWVRFLCAwKTsK
KyAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7CisKKyAgICBpZiAoIW1fYXR0
cnMuYW50aWFsaWFzKSB7CisgICAgICAgIGlmIChtX2F0dHJpYnV0ZXMuc3RlbmNpbCkgeworICAg
ICAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9z
dGVuY2lsQnVmZmVyKTsKKyAgICAgICAgICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlRVhUKEdM
X1JFTkRFUkJVRkZFUl9FWFQsIEdMX1NURU5DSUxfSU5ERVg4LCB3aWR0aCwgaGVpZ2h0KTsKKyAg
ICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9F
WFQsIEdMX1NURU5DSUxfQVRUQUNITUVOVF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fc3Rl
bmNpbEJ1ZmZlcik7CisgICAgICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5E
RVJCVUZGRVJfRVhULCAwKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9hdHRyaWJ1dGVzLmRl
cHRoKSB7CisgICAgICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZG
RVJfRVhULCBtX2RlcHRoQnVmZmVyKTsKKyAgICAgICAgICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9y
YWdlRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIEdMX0RFUFRIX0NPTVBPTkVOVDE2LCB3aWR0aCwg
aGVpZ2h0KTsKKyAgICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9G
UkFNRUJVRkZFUl9FWFQsIEdMX0RFUFRIX0FUVEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZGRVJf
RVhULCBtX2RlcHRoQnVmZmVyKTsKKyAgICAgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhU
KEdMX1JFTkRFUkJVRkZFUl9FWFQsIDApOworICAgICAgICB9CisKKyAgICAgICAgOjpnbEJpbmRS
ZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgMCk7CisgICAgfQorICAgIGlmIChn
bENoZWNrRnJhbWVidWZmZXJTdGF0dXNFWFQoR0xfRlJBTUVCVUZGRVJfRVhUKSAhPSBHTF9GUkFN
RUJVRkZFUl9DT01QTEVURV9FWFQpIHsKKyAgICAgICAgLy8gRklYTUU6IGNsZWFudXAKKyAgICAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICB9CisKKyAgICAvLyBJbml0aWFsaXplIHJlbmRlcmJ1
ZmZlcnMgdG8gMC4KKyAgICBHTGZsb2F0IGNsZWFyQ29sb3JbXSA9IHswLCAwLCAwLCAwfSwgY2xl
YXJEZXB0aCA9IDA7CisgICAgR0xpbnQgY2xlYXJTdGVuY2lsID0gMDsKKyAgICBHTGJvb2xlYW4g
Y29sb3JNYXNrW10gPSB7R0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRX0sIGRlcHRo
TWFzayA9IEdMX1RSVUU7CisgICAgR0x1aW50IHN0ZW5jaWxNYXNrID0gMHhmZmZmZmZmZjsKKyAg
ICBHTGJvb2xlYW4gaXNTY2lzc29yRW5hYmxlZCA9IEdMX0ZBTFNFOworICAgIEdMYm9vbGVhbiBp
c0RpdGhlckVuYWJsZWQgPSBHTF9GQUxTRTsKKyAgICBHTGJpdGZpZWxkIGNsZWFyTWFzayA9IEdM
X0NPTE9SX0JVRkZFUl9CSVQ7CisgICAgOjpnbEdldEZsb2F0dihHTF9DT0xPUl9DTEVBUl9WQUxV
RSwgY2xlYXJDb2xvcik7CisgICAgOjpnbENsZWFyQ29sb3IoMCwgMCwgMCwgMCk7CisgICAgOjpn
bEdldEJvb2xlYW52KEdMX0NPTE9SX1dSSVRFTUFTSywgY29sb3JNYXNrKTsKKyAgICA6OmdsQ29s
b3JNYXNrKEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUpOworICAgIGlmIChtX2F0
dHJzLmRlcHRoKSB7CisgICAgICAgIDo6Z2xHZXRGbG9hdHYoR0xfREVQVEhfQ0xFQVJfVkFMVUUs
ICZjbGVhckRlcHRoKTsKKyAgICAgICAgOjpnbENsZWFyRGVwdGgoMSk7CisgICAgICAgIDo6Z2xH
ZXRCb29sZWFudihHTF9ERVBUSF9XUklURU1BU0ssICZkZXB0aE1hc2spOworICAgICAgICA6Omds
RGVwdGhNYXNrKEdMX1RSVUUpOworICAgICAgICBjbGVhck1hc2sgfD0gR0xfREVQVEhfQlVGRkVS
X0JJVDsKKyAgICB9CisgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkgeworICAgICAgICA6OmdsR2V0
SW50ZWdlcnYoR0xfU1RFTkNJTF9DTEVBUl9WQUxVRSwgJmNsZWFyU3RlbmNpbCk7CisgICAgICAg
IDo6Z2xDbGVhclN0ZW5jaWwoMCk7CisgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9TVEVOQ0lM
X1dSSVRFTUFTSywgcmVpbnRlcnByZXRfY2FzdDxHTGludCo+KCZzdGVuY2lsTWFzaykpOworICAg
ICAgICA6OmdsU3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9GUk9OVCwgMHhmZmZmZmZmZik7CisgICAg
ICAgIGNsZWFyTWFzayB8PSBHTF9TVEVOQ0lMX0JVRkZFUl9CSVQ7CisgICAgfQorICAgIGlzU2Np
c3NvckVuYWJsZWQgPSA6OmdsSXNFbmFibGVkKEdMX1NDSVNTT1JfVEVTVCk7CisgICAgOjpnbERp
c2FibGUoR0xfU0NJU1NPUl9URVNUKTsKKyAgICBpc0RpdGhlckVuYWJsZWQgPSA6OmdsSXNFbmFi
bGVkKEdMX0RJVEhFUik7CisgICAgOjpnbERpc2FibGUoR0xfRElUSEVSKTsKKworICAgIDo6Z2xD
bGVhcihjbGVhck1hc2spOworCisgICAgOjpnbENsZWFyQ29sb3IoY2xlYXJDb2xvclswXSwgY2xl
YXJDb2xvclsxXSwgY2xlYXJDb2xvclsyXSwgY2xlYXJDb2xvclszXSk7CisgICAgOjpnbENvbG9y
TWFzayhjb2xvck1hc2tbMF0sIGNvbG9yTWFza1sxXSwgY29sb3JNYXNrWzJdLCBjb2xvck1hc2tb
M10pOworICAgIGlmIChtX2F0dHJzLmRlcHRoKSB7CisgICAgICAgIDo6Z2xDbGVhckRlcHRoKGNs
ZWFyRGVwdGgpOworICAgICAgICA6OmdsRGVwdGhNYXNrKGRlcHRoTWFzayk7CisgICAgfQorICAg
IGlmIChtX2F0dHJzLnN0ZW5jaWwpIHsKKyAgICAgICAgOjpnbENsZWFyU3RlbmNpbChjbGVhclN0
ZW5jaWwpOworICAgICAgICA6OmdsU3RlbmNpbE1hc2tTZXBhcmF0ZShHTF9GUk9OVCwgc3RlbmNp
bE1hc2spOworICAgIH0KKyAgICBpZiAoaXNTY2lzc29yRW5hYmxlZCkKKyAgICAgICAgOjpnbEVu
YWJsZShHTF9TQ0lTU09SX1RFU1QpOworICAgIGVsc2UKKyAgICAgICAgOjpnbERpc2FibGUoR0xf
U0NJU1NPUl9URVNUKTsKKworICAgIGlmIChpc0RpdGhlckVuYWJsZWQpCisgICAgICAgIDo6Z2xF
bmFibGUoR0xfRElUSEVSKTsKKyAgICBlbHNlCisgICAgICAgIDo6Z2xEaXNhYmxlKEdMX0RJVEhF
Uik7CisKKyAgICBpZiAobXVzdFJlc3RvcmVGQk8pCisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZm
ZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2JvdW5kRkJPKTsKKworICAgIDo6Z2xGbHVzaCgp
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwcmVwYXJlVGV4dHVyZSgpCiB7Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICBpZiAobV9sYXllckNvbXBvc2l0ZWQpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmIChtX2F0dHJzLmFudGlh
bGlhcykKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKworICAgIDo6Z2xCaW5kRnJhbWVidWZm
ZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CisgICAgOjpnbEFjdGl2ZVRleHR1cmUo
R0xfVEVYVFVSRTApOworICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2NvbXBv
c2l0b3JUZXh0dXJlKTsKKyAgICA6OmdsQ29weVRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwg
bV9pbnRlcm5hbENvbG9yRm9ybWF0LCAwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVp
Z2h0LCAwKTsKKyAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9ib3VuZFRleHR1
cmUwKTsKKyAgICA6OmdsQWN0aXZlVGV4dHVyZShtX2FjdGl2ZVRleHR1cmUpOworICAgIDo6Z2xC
aW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2JvdW5kRkJPKTsKKyAgICA6
OmdsRmluaXNoKCk7CisgICAgbV9sYXllckNvbXBvc2l0ZWQgPSB0cnVlOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpiaW5kRnJhbWVidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9y
bTNET2JqZWN0IGJ1ZmZlcikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIC8vIEZJWE1FIDogV2UgZG9uJ3QgY2FyZSBhYm91dCBtdWx0aXNh
bXBsZUZCTyBjdXJyZW50bHkuCisgICAgR0x1aW50IGZibyA9IGJ1ZmZlciA/IGJ1ZmZlciA6IG1f
ZmJvOworICAgIGlmIChmYm8gIT0gbV9ib3VuZEZCTykgeworICAgICAgICA6OmdsQmluZEZyYW1l
YnVmZmVyRVhUKHRhcmdldCwgZmJvKTsKKyAgICAgICAgbV9ib3VuZEZCTyA9IGZibzsKKyAgICB9
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhJbWFnZTJEKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RpbnQgeCwg
R0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9y
ZGVyKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBs
ZUZCTykKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICA6OmdsQ29weVRleEltYWdlMkQo
dGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRl
cik7CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0aXNh
bXBsZUZCTykKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6Y29weVRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGludCB4LCBHQzNEaW50IHks
IEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKIHsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmIChtX2F0dHJzLmFudGlhbGlh
cyAmJiBtX2JvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pCisgICAgICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgOjpnbENvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQs
IHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgIGlmIChtX2F0dHJzLmFudGlhbGlh
cyAmJiBtX2JvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pCisgICAgICAgIG5vdEltcGxlbWVu
dGVkKCk7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZVVuaWZvcm0oUGxh
dGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykK
IHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGlmICghcHJvZ3JhbSkgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEdMaW50IG1heFVuaWZvcm1T
aXplID0gMDsKKyAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0FDVElWRV9VTklGT1JN
X01BWF9MRU5HVEgsICZtYXhVbmlmb3JtU2l6ZSk7CisKKyAgICBPd25BcnJheVB0cjxHTGNoYXI+
IG5hbWUgPSBhZG9wdEFycmF5UHRyKG5ldyBHTGNoYXJbbWF4VW5pZm9ybVNpemVdKTsgLy8gR0xf
QUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCBpbmNsdWRlcyBudWxsIHRlcm1pbmF0aW9uLgorICAg
IEdMc2l6ZWkgbmFtZUxlbmd0aCA9IDA7CisgICAgR0xpbnQgc2l6ZSA9IDA7CisgICAgR0xlbnVt
IHR5cGUgPSAwOworICAgIDo6Z2xHZXRBY3RpdmVVbmlmb3JtKHByb2dyYW0sIGluZGV4LCBtYXhV
bmlmb3JtU2l6ZSwgJm5hbWVMZW5ndGgsICZzaXplLCAmdHlwZSwgbmFtZS5nZXQoKSk7CisgICAg
aWYgKCFuYW1lTGVuZ3RoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpbmZvLm5hbWUg
PSBTdHJpbmcobmFtZS5nZXQoKSwgbmFtZUxlbmd0aCk7CisgICAgaW5mby50eXBlID0gdHlwZTsK
KyAgICBpbmZvLnNpemUgPSBzaXplOworCisgICAgLy8gRklYTUUgOiAiWzBdIiBpcyBhZGRlZCBh
dCBlbmQgb2YgbmFtZSBpbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEFjdGl2ZVVuaWZvcm0o
KQorICAgIC8vIHdoZW4gaXNHTEVTMkNvbXBsaWFudCBpcyBvbmx5IGZhbHNlLiBJIGhhdmVuJ3Qg
Zm91bmQgdGhlIHJlYXNvbi4KKyAgICAvLyBTbyBJIGFkZCAiWzBdIiBoZXJlIHRvIGF2b2lkIGZh
bGluZyB3ZWJnbCBjb25mb3JtYW5jZSB0ZXN0KGdldC1hY3RpdmUtdGVzdC5odG1sKSwKKyAgICAv
LyBidXQgaWYgaXQgbWFrZXMgc29tZXRoaW5nIHdyb25nIGxhdGVyLCByZW1vdmUgZm9sbG93aW5n
IHR3byBsaW5lcy4KKyAgICBpZiAoaXNHTEVTMkNvbXBsaWFudCgpICYmIGluZm8uc2l6ZSA+IDEg
JiYgIWluZm8ubmFtZS5lbmRzV2l0aCgiWzBdIikpCisgICAgICAgIGluZm8ubmFtZS5hcHBlbmQo
IlswXSIpOworICAgIHJldHVybiB0cnVlOwogfQogCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnJlYWRQaXhlbHMoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNp
emVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCB2b2lkKiBkYXRhKQog
ewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgLy8gRklYTUU6IHJlbW92ZSB0aGUgdHdvIGds
Rmx1c2ggY2FsbHMgd2hlbiB0aGUgZHJpdmVyIGJ1ZyBpcyBmaXhlZCwgaS5lLiwKKyAgICAvLyBh
bGwgcHJldmlvdXMgcmVuZGVyaW5nIGNhbGxzIHNob3VsZCBiZSBkb25lIGJlZm9yZSByZWFkaW5n
IHBpeGVscy4KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsRmx1c2goKTsKKyAg
ICBpZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJP
KQorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIDo6Z2xSZWFkUGl4ZWxzKHgsIHksIHdp
ZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YSk7CisgICAgaWYgKG1fYXR0cnMuYW50aWFs
aWFzICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKKyAgICAgICAgbm90SW1wbGVt
ZW50ZWQoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVuZGVyYnVmZmVyU3RvcmFn
ZShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lk
dGgsIEdDM0RzaXplaSBoZWlnaHQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZUVYVCh0YXJnZXQs
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0SW50ZWdlcnYoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQogewotICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEdl
dEludGVnZXJ2KHBuYW1lLCB2YWx1ZSk7CiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnRl
eEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5h
bGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRl
ciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCiB7
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHdpZHRo
ICYmIGhlaWdodCAmJiAhcGl4ZWxzKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElOVkFM
SURfVkFMVUUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIDo6Z2xUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122730</attachid>
            <date>2012-01-17 01:05:00 -0800</date>
            <delta_ts>2012-01-25 08:09:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76248-20120117180501.patch</filename>
            <type>text/plain</type>
            <size>15672</size>
            <attacher name="ChangSeok Oh">kevin.cs.oh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1MTIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjliZjE5YjMwZGJlZDhl
ZDFlODM3NWRlMjA3ODFiYzJhYjEyZjczMi4uMzQzNTI3N2I3MTdiMTc2MGIyMGEwOWM3MjczNzNl
OTgxYjdjM2JiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDEyLTAxLTE2ICBDaGFu
Z1Nlb2sgT2ggIDxzaGl2YW1pZG93QGdtYWlsLmNvbT4KKworICAgICAgICBJbml0aWFsIGltcGxl
bWVudGF0aW9uIG9mIEdyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjI0OAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudGVkIEFQSXMgaW4gR3Jh
cGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAgYWNjb3JkaW5nIHRvIGdsZXMgc3BlYyByb3VnaGx5
LgorICAgICAgICBCdXQgbm8gd2F5IHRvIHJ1biB0aGVzZSBjb2RlcyByaWdodCBub3csIGJlY2F1
c2UgdGhleSBuZWVkIGV4dHJhIHBvcnQKKyAgICAgICAgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24g
dG8gd29yay4gSSBwbGFuIHRvIGFkZCB0aGVzZSBleHRyYSBjb2RlcyBmb3IgZ2t0IHBvcnQKKyAg
ICAgICAgaW4gYSBuZXh0IHBhdGNoLiBBbmQgYWxzbyB0aGlzIHBhdGNoIGRvZXNuJ3Qgc3VwcG9y
dCBhbnRpLWFsaWFzaW5nIHlldC4gSXQgd2lsbCBiZQorICAgICAgICBkZWFsdCB3aXRoIGluIGFu
b3RoZXIgYnVnLCB0b28uCisgICAgICAgIE1vdmVkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBY3Rp
dmVVbmlmb3JtIHRvIEdyYXBoaWNzQ29udGV4dDNEQ29tbW9uLmNwcC4KKyAgICAgICAgSXQgbG9v
a3MgaXQgY291bGQgYmUgc2hhcmVkIGJldHdlZW4gZ2wgYW5kIGdsZXMuCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzIHJlcXVpcmVkLgorICAgICAgICBXZSdyZSBhYmxlIHRvIHZlcmlmeSB0aGlzIHBh
dGNoIHVzaW5nIGJ5IGFscmVhZHkgZXhpc3RlZCB3ZWJnbCB0ZXN0IGNhc2VzLgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaDogQWRkIGJ1aWxkIGZsYWcg
dG8gYWNjZXNzIHN0ZW5jaWxCdWZmZXIgJiBkZXB0aEJ1ZmZlciBmb3IgZ2xlcy4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwOiBS
ZW1vdmVkIGdldEFjdGl2ZVVuaWZvcm0oKS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwOiBNb3ZlZCBnZXRBY3RpdmVV
bmlmb3JtIGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0
aXZlVW5pZm9ybSk6CisKKyAgICAgICAgQnJpZWYgZXhwbGFuYXRpb24gYWJvdXQgd2hhdCB0aGUg
ZGlmZmVyZW5jZXMgYXJlIGJldHdlZW4gZ2wgYW5kIGdsZXMuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKTogVXNlZCBk
aWZmZXJlbnQgcGFyYW1ldGVyIGZvciBnbFJlYWRQaXhlbHMgc28gd2UgbmVlZCB0byBjb252ZXJ0
IFJHQkEgdG8gQkdSQS4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZXNo
YXBlKTogR0xFUyBuZWVkcyBzZXBlcmF0ZWQgc3RlbmNpbEJ1ZmZlciBhbmQgZGVwdGhCdWZmZXIu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cHJlcGFyZVRleHR1cmUpOiBS
ZW1vdmVkIHNvbWUgY29kZXMgcmVsYXRlZCB3aXRoIGFudGlhbGlhc2luZy4gV2UgZG9lc24ndCBz
dXBwb3J0IGl0IHlldC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5k
RnJhbWVidWZmZXIpOiBSZW1vdmVkIHNvbWUgY29kZXMgcmVsYXRlZCB3aXRoIGFudGlhbGlhc2lu
Zy4gV2UgZG9lc24ndCBzdXBwb3J0IGl0IHlldC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpjb3B5VGV4SW1hZ2UyRCk6IFJlbW92ZWQgc29tZSBjb2RlcyByZWxhdGVkIHdp
dGggYW50aWFsaWFzaW5nLiBXZSBkb2Vzbid0IHN1cHBvcnQgaXQgeWV0LgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhTdWJJbWFnZTJEKTogUmVtb3ZlZCBzb21l
IGNvZGVzIHJlbGF0ZWQgd2l0aCBhbnRpYWxpYXNpbmcuIFdlIGRvZXNuJ3Qgc3VwcG9ydCBpdCB5
ZXQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVscyk6IFJl
bW92ZWQgc29tZSBjb2RlcyByZWxhdGVkIHdpdGggYW50aWFsaWFzaW5nLiBXZSBkb2Vzbid0IHN1
cHBvcnQgaXQgeWV0LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlbmRl
cmJ1ZmZlclN0b3JhZ2UpOiBSZW1vdmVkIGNvZGVzIGZvciBjb252ZXJ0aW5nIEdMRVMgcGFyYW1l
dGVyIHRvIEdMIHBhcmFtZXRlci4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpnZXRJbnRlZ2Vydik6IFJlbW92ZWQgY29kZXMgdGhhdCBlbXVsYXRlIEdMRVMuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRCk6IFJlbW92ZWQgY29kZXMg
Zm9yIGNvbnZlcnRpbmcgR0xFUyBwYXJhbWV0ZXIgdG8gR0wgcGFyYW1ldGVyLgorCiAyMDEyLTAx
LTE2ICBSb2JlcnQgSG9nYW4gIDxyb2JlcnRAd2Via2l0Lm9yZz4KIAogICAgICAgICBIZWFwLXVz
ZS1hZnRlci1mcmVlIGluIFdlYkNvcmU6OlJlbmRlckJsb2NrOjpzZWxlY3Rpb25HYXBzCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQz
RC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0Qu
aAppbmRleCBlNGY2OWQ4YWE2Njg4ZjA5ZTNhNWEzOGVmOTk3ZTEzN2Y4MDkzYjgyLi40MjM3NDY1
ZTE2YjQ4Y2JkMDA4ZTI0ZWFhNGI1ZDM4NzMwYTE1NmY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKQEAgLTkzMyw3ICs5
MzMsNyBAQCBwdWJsaWM6CiAKICAgICBHQzNEdWludCBtX3RleHR1cmUsIG1fY29tcG9zaXRvclRl
eHR1cmU7CiAgICAgR0MzRHVpbnQgbV9mYm87Ci0jaWYgUExBVEZPUk0oUVQpICYmIGRlZmluZWQo
UVRfT1BFTkdMX0VTXzIpCisjaWYgVVNFKE9QRU5HTF9FU18yKSB8fCAoUExBVEZPUk0oUVQpICYm
IGRlZmluZWQoUVRfT1BFTkdMX0VTXzIpKQogICAgIEdDM0R1aW50IG1fZGVwdGhCdWZmZXI7CiAg
ICAgR0MzRHVpbnQgbV9zdGVuY2lsQnVmZmVyOwogI2Vsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0M0RPcGVuR0wuY3BwCmluZGV4IDQ3YTQxYzZkMDAyNjViMGNiYTlhNDRmZmNjNDExMDZhZTli
YTA3NzUuLjY2YTQ3ZDc0MzEzNGM4NGE4MTY0YmZjZmM4ZWU5MWZmZmM0Y2EyMzUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRl
eHQzRE9wZW5HTC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcApAQCAtMjk4LDI5ICsyOTgsNiBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwsIEdDM0RpbgogICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZS
QU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250
ZXh0M0Q6OmdldEFjdGl2ZVVuaWZvcm0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWlu
dCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKLXsKLSAgICBpZiAoIXByb2dyYW0pIHsKLSAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgR0xpbnQgbWF4VW5pZm9y
bVNpemUgPSAwOwotICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfQUNUSVZFX1VOSUZP
Uk1fTUFYX0xFTkdUSCwgJm1heFVuaWZvcm1TaXplKTsKLSAgICBHTGNoYXIgbmFtZVttYXhVbmlm
b3JtU2l6ZV07IC8vIEdMX0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEggaW5jbHVkZXMgbnVsbCB0
ZXJtaW5hdGlvbgotICAgIEdMc2l6ZWkgbmFtZUxlbmd0aCA9IDA7Ci0gICAgR0xpbnQgc2l6ZSA9
IDA7Ci0gICAgR0xlbnVtIHR5cGUgPSAwOwotICAgIDo6Z2xHZXRBY3RpdmVVbmlmb3JtKHByb2dy
YW0sIGluZGV4LCBtYXhVbmlmb3JtU2l6ZSwgJm5hbWVMZW5ndGgsICZzaXplLCAmdHlwZSwgbmFt
ZSk7Ci0gICAgaWYgKCFuYW1lTGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaW5m
by5uYW1lID0gU3RyaW5nKG5hbWUsIG5hbWVMZW5ndGgpOwotICAgIGluZm8udHlwZSA9IHR5cGU7
Ci0gICAgaW5mby5zaXplID0gc2l6ZTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6
ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlw
ZSwgdm9pZCogZGF0YSkKIHsKICAgICAvLyBGSVhNRTogcmVtb3ZlIHRoZSB0d28gZ2xGbHVzaCBj
YWxscyB3aGVuIHRoZSBkcml2ZXIgYnVnIGlzIGZpeGVkLCBpLmUuLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3Bl
bkdMQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKaW5kZXggZTY4YmJhN2ZkN2Y1MTlmZDc4
YzE2OWE3MjkzYzliMmFkNTI2MGRlOC4uOWU5MDVmNDY5MzI1N2NkNzA0Y2YzNzU2MTRlODQzMTkz
YTBjMzZmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24u
Y3BwCkBAIC00NTEsNiArNDUxLDMyIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2
ZUF0dHJpYihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4CiAgICAgaW5m
by5zaXplID0gc2l6ZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KKworYm9vbCBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50
IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQoreworICAgIGlmICghcHJvZ3JhbSkgeworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEdMaW50IG1heFVuaWZv
cm1TaXplID0gMDsKKyAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0FDVElWRV9VTklG
T1JNX01BWF9MRU5HVEgsICZtYXhVbmlmb3JtU2l6ZSk7CisKKyAgICBPd25BcnJheVB0cjxHTGNo
YXI+IG5hbWUgPSBhZG9wdEFycmF5UHRyKG5ldyBHTGNoYXJbbWF4VW5pZm9ybVNpemVdKTsgLy8g
R0xfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCBpbmNsdWRlcyBudWxsIHRlcm1pbmF0aW9uLgor
ICAgIEdMc2l6ZWkgbmFtZUxlbmd0aCA9IDA7CisgICAgR0xpbnQgc2l6ZSA9IDA7CisgICAgR0xl
bnVtIHR5cGUgPSAwOworICAgIDo6Z2xHZXRBY3RpdmVVbmlmb3JtKHByb2dyYW0sIGluZGV4LCBt
YXhVbmlmb3JtU2l6ZSwgJm5hbWVMZW5ndGgsICZzaXplLCAmdHlwZSwgbmFtZS5nZXQoKSk7Cisg
ICAgaWYgKCFuYW1lTGVuZ3RoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpbmZvLm5h
bWUgPSBTdHJpbmcobmFtZS5nZXQoKSwgbmFtZUxlbmd0aCk7CisgICAgaW5mby50eXBlID0gdHlw
ZTsKKyAgICBpbmZvLnNpemUgPSBzaXplOworCisgICAgcmV0dXJuIHRydWU7Cit9CiAgICAgCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZvcm0zRE9iamVj
dCBwcm9ncmFtLCBHQzNEc2l6ZWkgbWF4Q291bnQsIEdDM0RzaXplaSogY291bnQsIFBsYXRmb3Jt
M0RPYmplY3QqIHNoYWRlcnMpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xF
Uy5jcHAKaW5kZXggOTBmZjVhMGEzNDViZGY2NGI5NzgwZDQ4ZGI2NDI1MDY2N2RmMzEyNS4uZDU1
YTFkNjY1ODljMzY4ZjI5Nzc4NmZiNjQ3ZDJiZjk5MWU1NjhmOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdM
RVMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFw
aGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcApAQCAtNDAsNTkgKzQwLDIyOSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRSZW5kZXJpbmdSZXN1bHRz
KHVuc2lnbmVkIGNoYXIgKnBpeGVscywgaW50IHBpeGVsc1NpemUpCiB7Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICBpbnQgdG90YWxCeXRlcyA9IG1fY3VycmVudFdpZHRoICogbV9jdXJyZW50
SGVpZ2h0ICogNDsKKyAgICBpZiAocGl4ZWxzU2l6ZSA8IHRvdGFsQnl0ZXMpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgYm9vbCBtdXN0UmVzdG9y
ZUZCTyA9IGZhbHNlOworICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykgeworICAgICAgICAvLyBG
SVhNRTogV2UgZG9uJ3Qgc3VwcG9ydCBhbnRpYWxpYXNpbmcgeWV0LgorICAgICAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChtX2JvdW5kRkJPICE9IG1fZmJv
KSB7CisgICAgICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IHRydWU7CisgICAgICAgICAgICA6Omds
QmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAgICAgICB9
CisgICAgfQorCisgICAgR0xpbnQgcGFja0FsaWdubWVudCA9IDQ7CisgICAgYm9vbCBtdXN0UmVz
dG9yZVBhY2tBbGlnbm1lbnQgPSBmYWxzZTsKKyAgICA6OmdsR2V0SW50ZWdlcnYoR0xfUEFDS19B
TElHTk1FTlQsICZwYWNrQWxpZ25tZW50KTsKKyAgICBpZiAocGFja0FsaWdubWVudCA+IDQpIHsK
KyAgICAgICAgOjpnbFBpeGVsU3RvcmVpKEdMX1BBQ0tfQUxJR05NRU5ULCA0KTsKKyAgICAgICAg
bXVzdFJlc3RvcmVQYWNrQWxpZ25tZW50ID0gdHJ1ZTsKKyAgICB9CisKKyAgICA6OmdsUmVhZFBp
eGVscygwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LCBHTF9SR0JBLCBHTF9V
TlNJR05FRF9CWVRFLCBwaXhlbHMpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdG90YWxCeXRl
czsgaSArPSA0KQorICAgICAgICBzdGQ6OnN3YXAocGl4ZWxzW2ldLCBwaXhlbHNbaSArIDJdKTsg
Ly8gQ29udmVydCB0byBCR1JBCisKKyAgICBpZiAobXVzdFJlc3RvcmVQYWNrQWxpZ25tZW50KQor
ICAgICAgICA6OmdsUGl4ZWxTdG9yZWkoR0xfUEFDS19BTElHTk1FTlQsIHBhY2tBbGlnbm1lbnQp
OworCisgICAgaWYgKG11c3RSZXN0b3JlRkJPKQorICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVy
RVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9ib3VuZEZCTyk7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogewotICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgaWYgKCFwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmICh3aWR0aCA9PSBtX2N1cnJlbnRXaWR0aCAmJiBoZWlnaHQgPT0g
bV9jdXJyZW50SGVpZ2h0KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2N1cnJlbnRXaWR0aCA9
IHdpZHRoOworICAgIG1fY3VycmVudEhlaWdodCA9IGhlaWdodDsKKworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOworCisgICAgR0x1aW50IGNvbG9y
Rm9ybWF0ID0gMCwgcGl4ZWxEYXRhVHlwZSA9IDA7CisgICAgaWYgKG1fYXR0cnMuYWxwaGEpIHsK
KyAgICAgICAgbV9pbnRlcm5hbENvbG9yRm9ybWF0ID0gR0xfUkdCQTsKKyAgICAgICAgY29sb3JG
b3JtYXQgPSBHTF9SR0JBOworICAgICAgICBwaXhlbERhdGFUeXBlID0gR0xfVU5TSUdORURfQllU
RTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2ludGVybmFsQ29sb3JGb3JtYXQgPSBHTF9SR0I7
CisgICAgICAgIGNvbG9yRm9ybWF0ID0gR0xfUkdCOworICAgICAgICBwaXhlbERhdGFUeXBlID0g
R0xfVU5TSUdORURfU0hPUlRfNV82XzU7CisgICAgfQorCisgICAgLy8gUmVzaXplIHJlZ3VsYXIg
RkJPLgorICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8gPSBmYWxzZTsKKyAgICBpZiAobV9ib3VuZEZC
TyAhPSBtX2ZibykgeworICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IHRydWU7CisgICAgICAgIDo6
Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CisgICAgfQor
CisgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSk7CisgICAgOjpn
bFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwgbV9pbnRlcm5hbENvbG9yRm9ybWF0LCB3aWR0
aCwgaGVpZ2h0LCAwLCBjb2xvckZvcm1hdCwgcGl4ZWxEYXRhVHlwZSwgMCk7CisgICAgOjpnbEZy
YW1lYnVmZmVyVGV4dHVyZTJERVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfQ09MT1JfQVRUQUNI
TUVOVDBfRVhULCBHTF9URVhUVVJFXzJELCBtX3RleHR1cmUsIDApOworCisgICAgOjpnbEJpbmRU
ZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fY29tcG9zaXRvclRleHR1cmUpOworICAgIDo6Z2xUZXhJ
bWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAsIG1faW50ZXJuYWxDb2xvckZvcm1hdCwgd2lkdGgsIGhl
aWdodCwgMCwgY29sb3JGb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIDApOworICAgIDo6Z2xCaW5k
VGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKKworICAgIGlmICghbV9hdHRycy5hbnRpYWxpYXMp
IHsKKyAgICAgICAgaWYgKG1fYXR0cmlidXRlcy5zdGVuY2lsKSB7CisgICAgICAgICAgICA6Omds
QmluZFJlbmRlcmJ1ZmZlckVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBtX3N0ZW5jaWxCdWZmZXIp
OworICAgICAgICAgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VFWFQoR0xfUkVOREVSQlVGRkVS
X0VYVCwgR0xfU1RFTkNJTF9JTkRFWDgsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgOjpn
bEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfU1RFTkNJ
TF9BVFRBQ0hNRU5UX0VYVCwgR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9zdGVuY2lsQnVmZmVyKTsK
KyAgICAgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQs
IDApOworICAgICAgICB9CisgICAgICAgIGlmIChtX2F0dHJpYnV0ZXMuZGVwdGgpIHsKKyAgICAg
ICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fZGVw
dGhCdWZmZXIpOworICAgICAgICAgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VFWFQoR0xfUkVO
REVSQlVGRkVSX0VYVCwgR0xfREVQVEhfQ09NUE9ORU5UMTYsIHdpZHRoLCBoZWlnaHQpOworICAg
ICAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VY
VCwgR0xfREVQVEhfQVRUQUNITUVOVF9FWFQsIEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fZGVwdGhC
dWZmZXIpOworICAgICAgICAgICAgOjpnbEJpbmRSZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVG
RkVSX0VYVCwgMCk7CisgICAgICAgIH0KKworICAgICAgICA6OmdsQmluZFJlbmRlcmJ1ZmZlckVY
VChHTF9SRU5ERVJCVUZGRVJfRVhULCAwKTsKKyAgICB9CisgICAgaWYgKGdsQ2hlY2tGcmFtZWJ1
ZmZlclN0YXR1c0VYVChHTF9GUkFNRUJVRkZFUl9FWFQpICE9IEdMX0ZSQU1FQlVGRkVSX0NPTVBM
RVRFX0VYVCkgeworICAgICAgICAvLyBGSVhNRTogY2xlYW51cAorICAgICAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIH0KKworICAgIC8vIEluaXRpYWxpemUgcmVuZGVyYnVmZmVycyB0byAwLgor
ICAgIEdMZmxvYXQgY2xlYXJDb2xvcltdID0gezAsIDAsIDAsIDB9LCBjbGVhckRlcHRoID0gMDsK
KyAgICBHTGludCBjbGVhclN0ZW5jaWwgPSAwOworICAgIEdMYm9vbGVhbiBjb2xvck1hc2tbXSA9
IHtHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFfSwgZGVwdGhNYXNrID0gR0xfVFJV
RTsKKyAgICBHTHVpbnQgc3RlbmNpbE1hc2sgPSAweGZmZmZmZmZmOworICAgIEdMYm9vbGVhbiBp
c1NjaXNzb3JFbmFibGVkID0gR0xfRkFMU0U7CisgICAgR0xib29sZWFuIGlzRGl0aGVyRW5hYmxl
ZCA9IEdMX0ZBTFNFOworICAgIEdMYml0ZmllbGQgY2xlYXJNYXNrID0gR0xfQ09MT1JfQlVGRkVS
X0JJVDsKKyAgICA6OmdsR2V0RmxvYXR2KEdMX0NPTE9SX0NMRUFSX1ZBTFVFLCBjbGVhckNvbG9y
KTsKKyAgICA6OmdsQ2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKKyAgICA6OmdsR2V0Qm9vbGVhbnYo
R0xfQ09MT1JfV1JJVEVNQVNLLCBjb2xvck1hc2spOworICAgIDo6Z2xDb2xvck1hc2soR0xfVFJV
RSwgR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSk7CisgICAgaWYgKG1fYXR0cnMuZGVwdGgpIHsK
KyAgICAgICAgOjpnbEdldEZsb2F0dihHTF9ERVBUSF9DTEVBUl9WQUxVRSwgJmNsZWFyRGVwdGgp
OworICAgICAgICA6OmdsQ2xlYXJEZXB0aCgxKTsKKyAgICAgICAgOjpnbEdldEJvb2xlYW52KEdM
X0RFUFRIX1dSSVRFTUFTSywgJmRlcHRoTWFzayk7CisgICAgICAgIDo6Z2xEZXB0aE1hc2soR0xf
VFJVRSk7CisgICAgICAgIGNsZWFyTWFzayB8PSBHTF9ERVBUSF9CVUZGRVJfQklUOworICAgIH0K
KyAgICBpZiAobV9hdHRycy5zdGVuY2lsKSB7CisgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9T
VEVOQ0lMX0NMRUFSX1ZBTFVFLCAmY2xlYXJTdGVuY2lsKTsKKyAgICAgICAgOjpnbENsZWFyU3Rl
bmNpbCgwKTsKKyAgICAgICAgOjpnbEdldEludGVnZXJ2KEdMX1NURU5DSUxfV1JJVEVNQVNLLCBy
ZWludGVycHJldF9jYXN0PEdMaW50Kj4oJnN0ZW5jaWxNYXNrKSk7CisgICAgICAgIDo6Z2xTdGVu
Y2lsTWFza1NlcGFyYXRlKEdMX0ZST05ULCAweGZmZmZmZmZmKTsKKyAgICAgICAgY2xlYXJNYXNr
IHw9IEdMX1NURU5DSUxfQlVGRkVSX0JJVDsKKyAgICB9CisgICAgaXNTY2lzc29yRW5hYmxlZCA9
IDo6Z2xJc0VuYWJsZWQoR0xfU0NJU1NPUl9URVNUKTsKKyAgICA6OmdsRGlzYWJsZShHTF9TQ0lT
U09SX1RFU1QpOworICAgIGlzRGl0aGVyRW5hYmxlZCA9IDo6Z2xJc0VuYWJsZWQoR0xfRElUSEVS
KTsKKyAgICA6OmdsRGlzYWJsZShHTF9ESVRIRVIpOworCisgICAgOjpnbENsZWFyKGNsZWFyTWFz
ayk7CisKKyAgICA6OmdsQ2xlYXJDb2xvcihjbGVhckNvbG9yWzBdLCBjbGVhckNvbG9yWzFdLCBj
bGVhckNvbG9yWzJdLCBjbGVhckNvbG9yWzNdKTsKKyAgICA6OmdsQ29sb3JNYXNrKGNvbG9yTWFz
a1swXSwgY29sb3JNYXNrWzFdLCBjb2xvck1hc2tbMl0sIGNvbG9yTWFza1szXSk7CisgICAgaWYg
KG1fYXR0cnMuZGVwdGgpIHsKKyAgICAgICAgOjpnbENsZWFyRGVwdGgoY2xlYXJEZXB0aCk7Cisg
ICAgICAgIDo6Z2xEZXB0aE1hc2soZGVwdGhNYXNrKTsKKyAgICB9CisgICAgaWYgKG1fYXR0cnMu
c3RlbmNpbCkgeworICAgICAgICA6OmdsQ2xlYXJTdGVuY2lsKGNsZWFyU3RlbmNpbCk7CisgICAg
ICAgIDo6Z2xTdGVuY2lsTWFza1NlcGFyYXRlKEdMX0ZST05ULCBzdGVuY2lsTWFzayk7CisgICAg
fQorICAgIGlmIChpc1NjaXNzb3JFbmFibGVkKQorICAgICAgICA6OmdsRW5hYmxlKEdMX1NDSVNT
T1JfVEVTVCk7CisgICAgZWxzZQorICAgICAgICA6OmdsRGlzYWJsZShHTF9TQ0lTU09SX1RFU1Qp
OworCisgICAgaWYgKGlzRGl0aGVyRW5hYmxlZCkKKyAgICAgICAgOjpnbEVuYWJsZShHTF9ESVRI
RVIpOworICAgIGVsc2UKKyAgICAgICAgOjpnbERpc2FibGUoR0xfRElUSEVSKTsKKworICAgIGlm
IChtdXN0UmVzdG9yZUZCTykKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFN
RUJVRkZFUl9FWFQsIG1fYm91bmRGQk8pOworCisgICAgOjpnbEZsdXNoKCk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnByZXBhcmVUZXh0dXJlKCkKIHsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIGlmIChtX2xheWVyQ29tcG9zaXRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFN
RUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICA6OmdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCk7
CisgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fY29tcG9zaXRvclRleHR1cmUp
OworICAgIDo6Z2xDb3B5VGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBtX2ludGVybmFsQ29s
b3JGb3JtYXQsIDAsIDAsIG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQsIDApOworICAg
IDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2JvdW5kVGV4dHVyZTApOworICAgIDo6
Z2xBY3RpdmVUZXh0dXJlKG1fYWN0aXZlVGV4dHVyZSk7CisgICAgOjpnbEJpbmRGcmFtZWJ1ZmZl
ckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fYm91bmRGQk8pOworICAgIDo6Z2xGaW5pc2goKTsK
KyAgICBtX2xheWVyQ29tcG9zaXRlZCA9IHRydWU7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmJpbmRGcmFtZWJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgYnVm
ZmVyKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgR0x1aW50IGZibyA9IGJ1ZmZlciA/IGJ1ZmZlciA6IG1fZmJvOworICAgIGlmIChmYm8g
IT0gbV9ib3VuZEZCTykgeworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKHRhcmdldCwg
ZmJvKTsKKyAgICAgICAgbV9ib3VuZEZCTyA9IGZibzsKKyAgICB9CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmNvcHlUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6
ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyKQogewotICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbENvcHlUZXhJ
bWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBib3JkZXIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4U3ViSW1hZ2Uy
RChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGlu
dCB5b2Zmc2V0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLWJvb2wgR3JhcGhpY3ND
b250ZXh0M0Q6OmdldEFjdGl2ZVVuaWZvcm0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNE
dWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xDb3B5VGV4U3ViSW1hZ2UyRCh0YXJn
ZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAot
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5
LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0Mz
RGVudW0gdHlwZSwgdm9pZCogZGF0YSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xGbHVzaCgpOworICAgIDo6Z2xSZWFkUGl4ZWxz
KHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YSk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQog
ewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
OjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VFWFQodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgs
IGhlaWdodCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVnZXJ2KEdDM0Rl
bnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xHZXRJbnRlZ2VydihwbmFtZSwgdmFsdWUp
OwogfQogCiBib29sIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0
aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0Mz
RGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIGlmICh3aWR0aCAmJiBoZWlnaHQgJiYgIXBpeGVscykg
eworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVGV4
SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9y
ZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123938</attachid>
            <date>2012-01-25 07:40:03 -0800</date>
            <delta_ts>2012-01-26 00:11:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76248-20120126004000.patch</filename>
            <type>text/plain</type>
            <size>28388</size>
            <attacher name="ChangSeok Oh">kevin.cs.oh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1ODczCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzkyYjY0YTY0NDQ5Mjc2
ZjQ2MGE1NmJhNjg2YTdhNDMwMzQ4MmY5ZS4uNTQ4MGNmNmU0ZWVmOTAxODQ4NzNkNjBiNGM5OGVi
OTM2MTZlMTkwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDEyLTAxLTI1ICBDaGFu
Z1Nlb2sgT2ggIDxzaGl2YW1pZG93QGdtYWlsLmNvbT4KKworICAgICAgICBJbml0aWFsIGltcGxl
bWVudGF0aW9uIG9mIEdyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjI0OAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudGVkIEFQSXMgaW4gR3Jh
cGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAgYWNjb3JkaW5nIHRvIGdsZXMgc3BlYyByb3VnaGx5
LgorICAgICAgICBCdXQgbm8gd2F5IHRvIHJ1biB0aGVzZSBjb2RlcyByaWdodCBub3csIGJlY2F1
c2UgdGhleSBuZWVkIGV4dHJhIHBvcnQKKyAgICAgICAgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24g
dG8gd29yay4gSSBwbGFuIHRvIGFkZCB0aGVzZSBleHRyYSBjb2RlcyBmb3IgZ2t0IHBvcnQKKyAg
ICAgICAgaW4gYSBuZXh0IHBhdGNoLiBBbmQgYWxzbyB0aGlzIHBhdGNoIGRvZXNuJ3Qgc3VwcG9y
dCBhbnRpLWFsaWFzaW5nIHlldC4gSXQgd2lsbCBiZQorICAgICAgICBkZWFsdCB3aXRoIGluIGFu
b3RoZXIgYnVnLCB0b28uCisgICAgICAgIE1vdmVkIHNvbWUgQVBJcyBpbiBHcmFwaGljc0NvbnRl
eHQzRE9wZW5HTEVTLmNwcCB0byBHcmFwaGljc0NvbnRleHQzRENvbW1vbi5jcHAuCisgICAgICAg
IEl0IGxvb2tzIGl0IGNvdWxkIGJlIHNoYXJlZCBiZXR3ZWVuIGdsIGFuZCBnbGVzLgorICAgICAg
ICBUd28gaGVscGVyIGZ1bmN0aW9ucyBhcmUgYWRkZWQgdG8gYXZvaWQgY29kZSBkdXBsaWNhdGlv
biBpbiBHcmFwaGljc0NvbnRleHQzRC4KKworICAgICAgICBObyBuZXcgdGVzdHMgcmVxdWlyZWQu
CisgICAgICAgIFdlJ3JlIGFibGUgdG8gdmVyaWZ5IHRoaXMgcGF0Y2ggdXNpbmcgYnkgYWxyZWFk
eSBleGlzdGVkIHdlYmdsIHRlc3QgY2FzZXMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQzRC5oOiBBZGQgYnVpbGQgZmxhZyB0byBhY2Nlc3Mgc3RlbmNpbEJ1
ZmZlciAmIGRlcHRoQnVmZmVyIGZvciBnbGVzLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6cmVzaXplRkJPcyk6IEhlbHBlciBmdW5jdGlvbiBleHRyYWN0ZWQg
ZnJvbSBHQzNEOjpyZXNoYXBlIHRvIHJlc2l6ZSByZWd1bGFyICYgbXVsdGlzYW1wbGVkIEZCT3Mu
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVzb2x2ZU11bHRpc2FtcGxp
bmdJZk5lY2Vzc2FyeSk6IEhlbHBlciBmdW5jdGlvbiB0byByZXNvbHZlIG11bHRpc2FtcGxpbmcu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3Bl
bkdMQ29tbW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2YWxp
ZGF0ZUF0dHJpYnV0ZXMpOiBBZGQgY29uZGl0aW9uIHRvIGRpc2FibGUgYW50aWFsaWFzaW5nIGZv
ciBHTEVTLgorCisgICAgICAgIEZvbGxvd2luZyBBUElzIGxvb2tlZCBzaGFyZWFibGUgc28gdGhh
dCBtb3ZlZCBpbnRvIEdDM0RPcGVuR0xDb21tb24uY3BwLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OnByZXBhcmVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpyZWFkUmVuZGVyaW5nUmVzdWx0cyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6YmluZEZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpjb3B5VGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6Y29weVRleFN1YkltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OmdldEFjdGl2ZVVuaWZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OnJlYWRQaXhlbHMpOgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OnJlc2l6ZUZCT3MpOiBTYW1lIHdpdGggdGhlIGFib3ZlLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3Nh
cnkpOiBTYW1lIHdpdGggdGhlIGFib3ZlLgorCisgICAgICAgIEJyaWVmIGV4cGxhbmF0aW9uIGFi
b3V0IHdoYXQgdGhlIGRpZmZlcmVuY2VzIGFyZSBiZXR3ZWVuIGdsIGFuZCBnbGVzLgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UpOiBSZW1v
dmVkIGNvZGVzIGZvciBjb252ZXJ0aW5nIEdMRVMgcGFyYW1ldGVyIHRvIEdMIHBhcmFtZXRlci4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlZ2Vydik6IFJlbW92
ZWQgY29kZXMgdGhhdCBlbXVsYXRlIEdMRVMuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6dGV4SW1hZ2UyRCk6IFJlbW92ZWQgY29kZXMgZm9yIGNvbnZlcnRpbmcgR0xFUyBw
YXJhbWV0ZXIgdG8gR0wgcGFyYW1ldGVyLgorCiAyMDEyLTAxLTI1ICBKb3NlcGggUGVjb3Jhcm8g
IDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgPGh0dHA6Ly93ZWJraXQub3JnL2IvNzY5
NDE+IFdlYiBJbnNwZWN0b3I6IFJlbW92ZSBVbnVzZWQgSW5zcGVjdG9yRnJvbnRlbmRIb3N0LnNl
YXJjaCBTdHViCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQzRC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0M0QuaAppbmRleCBkZmViYmJhOWIwMmQ4NzI2YzMwMGYzMTk3ZGRjMTk5YjI0
OWU5OTM1Li44ZTdmMDQ5NjhiODEwOTkwNmZiZWM0YzdlZjI3YzY1OTcyOWFiODk5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNE
LmgKQEAgLTg5OCw2ICs4OTgsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCByZWFkUmVuZGVyaW5nUmVz
dWx0cyh1bnNpZ25lZCBjaGFyKiBwaXhlbHMsIGludCBwaXhlbHNTaXplKTsKICNlbmRpZgogCisg
ICAgYm9vbCByZXNpemVGQk9zKGludCB3aWR0aCwgaW50IGhlaWdodCk7CisgICAgdm9pZCByZXNv
bHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6
ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpOworCiAgICAgaW50IG1fY3VycmVudFdpZHRoLCBt
X2N1cnJlbnRIZWlnaHQ7CiAgICAgYm9vbCBpc1Jlc291cmNlU2FmZSgpOwogCkBAIC05MjgsNyAr
OTMxLDcgQEAgcHVibGljOgogCiAgICAgR0MzRHVpbnQgbV90ZXh0dXJlLCBtX2NvbXBvc2l0b3JU
ZXh0dXJlOwogICAgIEdDM0R1aW50IG1fZmJvOwotI2lmIFBMQVRGT1JNKFFUKSAmJiBkZWZpbmVk
KFFUX09QRU5HTF9FU18yKQorI2lmIFVTRShPUEVOR0xfRVNfMikgfHwgKFBMQVRGT1JNKFFUKSAm
JiBkZWZpbmVkKFFUX09QRU5HTF9FU18yKSkKICAgICBHQzNEdWludCBtX2RlcHRoQnVmZmVyOwog
ICAgIEdDM0R1aW50IG1fc3RlbmNpbEJ1ZmZlcjsKICNlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29u
dGV4dDNET3BlbkdMLmNwcAppbmRleCA0N2E0MWM2ZDAwMjY1YjBjYmE5YTQ0ZmZjYzQxMTA2YWU5
YmEwNzc1Li45YjE5MzAwMjUwY2E3ZDJmMjU5NTMwNjA1NGRkNGE4MDdiOTI2MWIyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0M0RPcGVuR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKQEAgLTQzLDU4ICs0Myw4IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFJlbmRlcmlu
Z1Jlc3VsdHModW5zaWduZWQgY2hhciAqcGl4ZWxzLCBpbnQgcGl4ZWxzU2l6ZSkKK2Jvb2wgR3Jh
cGhpY3NDb250ZXh0M0Q6OnJlc2l6ZUZCT3MoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogewotICAg
IGlmIChwaXhlbHNTaXplIDwgbV9jdXJyZW50V2lkdGggKiBtX2N1cnJlbnRIZWlnaHQgKiA0KQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIGJvb2wg
bXVzdFJlc3RvcmVGQk8gPSBmYWxzZTsKLSAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKLSAg
ICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9SRUFEX0ZSQU1FQlVGRkVSX0VYVCwgbV9t
dWx0aXNhbXBsZUZCTyk7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRFJBV19G
UkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKLSAgICAgICAgOjpnbEJsaXRGcmFtZWJ1ZmZlckVYVCgw
LCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LCAwLCAwLCBtX2N1cnJlbnRXaWR0
aCwgbV9jdXJyZW50SGVpZ2h0LCBHTF9DT0xPUl9CVUZGRVJfQklULCBHTF9MSU5FQVIpOwotICAg
ICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOwot
ICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IHRydWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYg
KG1fYm91bmRGQk8gIT0gbV9mYm8pIHsKLSAgICAgICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1
ZTsKLSAgICAgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhU
LCBtX2Zibyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBHTGludCBwYWNrQWxpZ25tZW50ID0g
NDsKLSAgICBib29sIG11c3RSZXN0b3JlUGFja0FsaWdubWVudCA9IGZhbHNlOwotICAgIDo6Z2xH
ZXRJbnRlZ2VydihHTF9QQUNLX0FMSUdOTUVOVCwgJnBhY2tBbGlnbm1lbnQpOwotICAgIGlmIChw
YWNrQWxpZ25tZW50ID4gNCkgewotICAgICAgICA6OmdsUGl4ZWxTdG9yZWkoR0xfUEFDS19BTElH
Tk1FTlQsIDQpOwotICAgICAgICBtdXN0UmVzdG9yZVBhY2tBbGlnbm1lbnQgPSB0cnVlOwotICAg
IH0KLQotICAgIDo6Z2xSZWFkUGl4ZWxzKDAsIDAsIG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRI
ZWlnaHQsIEdMX0JHUkEsIEdMX1VOU0lHTkVEX0lOVF84XzhfOF84X1JFViwgcGl4ZWxzKTsKLQot
ICAgIGlmIChtdXN0UmVzdG9yZVBhY2tBbGlnbm1lbnQpCi0gICAgICAgIDo6Z2xQaXhlbFN0b3Jl
aShHTF9QQUNLX0FMSUdOTUVOVCwgcGFja0FsaWdubWVudCk7Ci0KLSAgICBpZiAobXVzdFJlc3Rv
cmVGQk8pCi0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhU
LCBtX2JvdW5kRkJPKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZShpbnQg
d2lkdGgsIGludCBoZWlnaHQpCi17Ci0gICAgaWYgKCFwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNE
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICh3aWR0aCA9PSBtX2N1cnJlbnRXaWR0aCAm
JiBoZWlnaHQgPT0gbV9jdXJyZW50SGVpZ2h0KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAg
bV9jdXJyZW50V2lkdGggPSB3aWR0aDsKLSAgICBtX2N1cnJlbnRIZWlnaHQgPSBoZWlnaHQ7Ci0g
ICAgCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7
Ci0KICAgICBHTHVpbnQgY29sb3JGb3JtYXQsIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0ID0g
MDsKICAgICBpZiAobV9hdHRycy5hbHBoYSkgewogICAgICAgICBtX2ludGVybmFsQ29sb3JGb3Jt
YXQgPSBHTF9SR0JBODsKQEAgLTE3NywxNjYgKzEyNywxNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKICAgICAgICAgICAgIG11c3RSZXN0
b3JlRkJPID0gZmFsc2U7CiAgICAgfQogCi0gICAgLy8gSW5pdGlhbGl6ZSByZW5kZXJidWZmZXJz
IHRvIDAuCi0gICAgR0xmbG9hdCBjbGVhckNvbG9yW10gPSB7MCwgMCwgMCwgMH0sIGNsZWFyRGVw
dGggPSAwOwotICAgIEdMaW50IGNsZWFyU3RlbmNpbCA9IDA7Ci0gICAgR0xib29sZWFuIGNvbG9y
TWFza1tdID0ge0dMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUUsIEdMX1RSVUV9LCBkZXB0aE1hc2sg
PSBHTF9UUlVFOwotICAgIEdMdWludCBzdGVuY2lsTWFzayA9IDB4ZmZmZmZmZmY7Ci0gICAgR0xi
b29sZWFuIGlzU2Npc3NvckVuYWJsZWQgPSBHTF9GQUxTRTsKLSAgICBHTGJvb2xlYW4gaXNEaXRo
ZXJFbmFibGVkID0gR0xfRkFMU0U7Ci0gICAgR0xiaXRmaWVsZCBjbGVhck1hc2sgPSBHTF9DT0xP
Ul9CVUZGRVJfQklUOwotICAgIDo6Z2xHZXRGbG9hdHYoR0xfQ09MT1JfQ0xFQVJfVkFMVUUsIGNs
ZWFyQ29sb3IpOwotICAgIDo6Z2xDbGVhckNvbG9yKDAsIDAsIDAsIDApOwotICAgIDo6Z2xHZXRC
b29sZWFudihHTF9DT0xPUl9XUklURU1BU0ssIGNvbG9yTWFzayk7Ci0gICAgOjpnbENvbG9yTWFz
ayhHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFKTsKLSAgICBpZiAobV9hdHRycy5k
ZXB0aCkgewotICAgICAgICA6OmdsR2V0RmxvYXR2KEdMX0RFUFRIX0NMRUFSX1ZBTFVFLCAmY2xl
YXJEZXB0aCk7Ci0gICAgICAgIDo6Z2xDbGVhckRlcHRoKDEpOwotICAgICAgICA6OmdsR2V0Qm9v
bGVhbnYoR0xfREVQVEhfV1JJVEVNQVNLLCAmZGVwdGhNYXNrKTsKLSAgICAgICAgOjpnbERlcHRo
TWFzayhHTF9UUlVFKTsKLSAgICAgICAgY2xlYXJNYXNrIHw9IEdMX0RFUFRIX0JVRkZFUl9CSVQ7
Ci0gICAgfQotICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwpIHsKLSAgICAgICAgOjpnbEdldEludGVn
ZXJ2KEdMX1NURU5DSUxfQ0xFQVJfVkFMVUUsICZjbGVhclN0ZW5jaWwpOwotICAgICAgICA6Omds
Q2xlYXJTdGVuY2lsKDApOwotICAgICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfU1RFTkNJTF9XUklU
RU1BU0ssIHJlaW50ZXJwcmV0X2Nhc3Q8R0xpbnQqPigmc3RlbmNpbE1hc2spKTsKLSAgICAgICAg
OjpnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xfRlJPTlQsIDB4ZmZmZmZmZmYpOwotICAgICAgICBj
bGVhck1hc2sgfD0gR0xfU1RFTkNJTF9CVUZGRVJfQklUOwotICAgIH0KLSAgICBpc1NjaXNzb3JF
bmFibGVkID0gOjpnbElzRW5hYmxlZChHTF9TQ0lTU09SX1RFU1QpOwotICAgIDo6Z2xEaXNhYmxl
KEdMX1NDSVNTT1JfVEVTVCk7Ci0gICAgaXNEaXRoZXJFbmFibGVkID0gOjpnbElzRW5hYmxlZChH
TF9ESVRIRVIpOwotICAgIDo6Z2xEaXNhYmxlKEdMX0RJVEhFUik7Ci0KLSAgICA6OmdsQ2xlYXIo
Y2xlYXJNYXNrKTsKLQotICAgIDo6Z2xDbGVhckNvbG9yKGNsZWFyQ29sb3JbMF0sIGNsZWFyQ29s
b3JbMV0sIGNsZWFyQ29sb3JbMl0sIGNsZWFyQ29sb3JbM10pOwotICAgIDo6Z2xDb2xvck1hc2so
Y29sb3JNYXNrWzBdLCBjb2xvck1hc2tbMV0sIGNvbG9yTWFza1syXSwgY29sb3JNYXNrWzNdKTsK
LSAgICBpZiAobV9hdHRycy5kZXB0aCkgewotICAgICAgICA6OmdsQ2xlYXJEZXB0aChjbGVhckRl
cHRoKTsKLSAgICAgICAgOjpnbERlcHRoTWFzayhkZXB0aE1hc2spOwotICAgIH0KLSAgICBpZiAo
bV9hdHRycy5zdGVuY2lsKSB7Ci0gICAgICAgIDo6Z2xDbGVhclN0ZW5jaWwoY2xlYXJTdGVuY2ls
KTsKLSAgICAgICAgOjpnbFN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xfRlJPTlQsIHN0ZW5jaWxNYXNr
KTsKLSAgICB9Ci0gICAgaWYgKGlzU2Npc3NvckVuYWJsZWQpCi0gICAgICAgIDo6Z2xFbmFibGUo
R0xfU0NJU1NPUl9URVNUKTsKLSAgICBlbHNlCi0gICAgICAgIDo6Z2xEaXNhYmxlKEdMX1NDSVNT
T1JfVEVTVCk7Ci0gICAgaWYgKGlzRGl0aGVyRW5hYmxlZCkKLSAgICAgICAgOjpnbEVuYWJsZShH
TF9ESVRIRVIpOwotICAgIGVsc2UKLSAgICAgICAgOjpnbERpc2FibGUoR0xfRElUSEVSKTsKLQot
ICAgIGlmIChtdXN0UmVzdG9yZUZCTykKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChH
TF9GUkFNRUJVRkZFUl9FWFQsIG1fYm91bmRGQk8pOwotCi0gICAgOjpnbEZsdXNoKCk7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnByZXBhcmVUZXh0dXJlKCkKLXsKLSAgICBpZiAobV9s
YXllckNvbXBvc2l0ZWQpCi0gICAgICAgIHJldHVybjsKLSAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1
ZmZlckVYVChHTF9SRUFEX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAg
ICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRFJBV19GUkFNRUJVRkZFUl9FWFQsIG1fZmJv
KTsKLSAgICAgICAgOjpnbEJsaXRGcmFtZWJ1ZmZlckVYVCgwLCAwLCBtX2N1cnJlbnRXaWR0aCwg
bV9jdXJyZW50SGVpZ2h0LCAwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LCBH
TF9DT0xPUl9CVUZGRVJfQklULCBHTF9MSU5FQVIpOwotICAgIH0KLSAgICA6OmdsQmluZEZyYW1l
YnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOwotICAgIDo6Z2xBY3RpdmVUZXh0
dXJlKEdMX1RFWFRVUkUwKTsKLSAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9j
b21wb3NpdG9yVGV4dHVyZSk7Ci0gICAgOjpnbENvcHlUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQs
IDAsIG1faW50ZXJuYWxDb2xvckZvcm1hdCwgMCwgMCwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVu
dEhlaWdodCwgMCk7Ci0gICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fYm91bmRU
ZXh0dXJlMCk7Ci0gICAgOjpnbEFjdGl2ZVRleHR1cmUobV9hY3RpdmVUZXh0dXJlKTsKLSAgICA6
OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9ib3VuZEZCTyk7Ci0g
ICAgOjpnbEZpbmlzaCgpOwotICAgIG1fbGF5ZXJDb21wb3NpdGVkID0gdHJ1ZTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZEZyYW1lYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxh
dGZvcm0zRE9iamVjdCBidWZmZXIpCi17Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAg
R0x1aW50IGZibzsKLSAgICBpZiAoYnVmZmVyKQotICAgICAgICBmYm8gPSBidWZmZXI7Ci0gICAg
ZWxzZQotICAgICAgICBmYm8gPSAobV9hdHRycy5hbnRpYWxpYXMgPyBtX211bHRpc2FtcGxlRkJP
IDogbV9mYm8pOwotICAgIGlmIChmYm8gIT0gbV9ib3VuZEZCTykgewotICAgICAgICA6OmdsQmlu
ZEZyYW1lYnVmZmVyRVhUKHRhcmdldCwgZmJvKTsKLSAgICAgICAgbV9ib3VuZEZCTyA9IGZibzsK
LSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhJbWFnZTJEKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0Rp
bnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0Rp
bnQgYm9yZGVyKQotewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIGlmIChtX2F0dHJz
LmFudGlhbGlhcyAmJiBtX2JvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pIHsKLSAgICAgICAg
OjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9SRUFEX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNh
bXBsZUZCTyk7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRFJBV19GUkFNRUJV
RkZFUl9FWFQsIG1fZmJvKTsKLSAgICAgICAgOjpnbEJsaXRGcmFtZWJ1ZmZlckVYVCh4LCB5LCB4
ICsgd2lkdGgsIHkgKyBoZWlnaHQsIHgsIHksIHggKyB3aWR0aCwgeSArIGhlaWdodCwgR0xfQ09M
T1JfQlVGRkVSX0JJVCwgR0xfTElORUFSKTsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVY
VChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKLSAgICB9Ci0gICAgOjpnbENvcHlUZXhJbWFn
ZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBi
b3JkZXIpOwotICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcyAmJiBtX2JvdW5kRkJPID09IG1fbXVs
dGlzYW1wbGVGQk8pCi0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZG
RVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsKKyAgICByZXR1cm4gbXVzdFJlc3RvcmVGQk87CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdD
M0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KEdD
M0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCiB7
Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzICYm
IG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykgewotICAgICAgICA6OmdsQmluZEZyYW1l
YnVmZmVyRVhUKEdMX1JFQURfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsKLSAg
ICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9EUkFXX0ZSQU1FQlVGRkVSX0VYVCwgbV9m
Ym8pOwotICAgICAgICA6OmdsQmxpdEZyYW1lYnVmZmVyRVhUKHgsIHksIHggKyB3aWR0aCwgeSAr
IGhlaWdodCwgeCwgeSwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LCBHTF9DT0xPUl9CVUZGRVJfQklU
LCBHTF9MSU5FQVIpOwotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVG
RkVSX0VYVCwgbV9mYm8pOwotICAgIH0KLSAgICA6OmdsQ29weVRleFN1YkltYWdlMkQodGFyZ2V0
LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgaWYg
KG1fYXR0cnMuYW50aWFsaWFzICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKLSAg
ICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlz
YW1wbGVGQk8pOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBY3RpdmVVbmlmb3Jt
KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mIGlu
Zm8pCi17Ci0gICAgaWYgKCFwcm9ncmFtKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKElO
VkFMSURfVkFMVUUpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIEdMaW50IG1heFVuaWZvcm1TaXplID0gMDsKLSAgICA6OmdsR2V0
UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEgsICZtYXhVbmlm
b3JtU2l6ZSk7Ci0gICAgR0xjaGFyIG5hbWVbbWF4VW5pZm9ybVNpemVdOyAvLyBHTF9BQ1RJVkVf
VU5JRk9STV9NQVhfTEVOR1RIIGluY2x1ZGVzIG51bGwgdGVybWluYXRpb24KLSAgICBHTHNpemVp
IG5hbWVMZW5ndGggPSAwOwotICAgIEdMaW50IHNpemUgPSAwOwotICAgIEdMZW51bSB0eXBlID0g
MDsKLSAgICA6OmdsR2V0QWN0aXZlVW5pZm9ybShwcm9ncmFtLCBpbmRleCwgbWF4VW5pZm9ybVNp
emUsICZuYW1lTGVuZ3RoLCAmc2l6ZSwgJnR5cGUsIG5hbWUpOwotICAgIGlmICghbmFtZUxlbmd0
aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGluZm8ubmFtZSA9IFN0cmluZyhuYW1lLCBu
YW1lTGVuZ3RoKTsKLSAgICBpbmZvLnR5cGUgPSB0eXBlOwotICAgIGluZm8uc2l6ZSA9IHNpemU7
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBp
eGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIHZvaWQqIGRhdGEpCi17Ci0gICAg
Ly8gRklYTUU6IHJlbW92ZSB0aGUgdHdvIGdsRmx1c2ggY2FsbHMgd2hlbiB0aGUgZHJpdmVyIGJ1
ZyBpcyBmaXhlZCwgaS5lLiwKLSAgICAvLyBhbGwgcHJldmlvdXMgcmVuZGVyaW5nIGNhbGxzIHNo
b3VsZCBiZSBkb25lIGJlZm9yZSByZWFkaW5nIHBpeGVscy4KLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICA6OmdsRmx1c2goKTsKLSAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgbV9i
b3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKSB7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZm
ZXJFWFQoR0xfUkVBRF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOwotICAgICAg
ICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0RSQVdfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7
Ci0gICAgICAgIDo6Z2xCbGl0RnJhbWVidWZmZXJFWFQoeCwgeSwgeCArIHdpZHRoLCB5ICsgaGVp
Z2h0LCB4LCB5LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHQsIEdMX0NPTE9SX0JVRkZFUl9CSVQsIEdM
X0xJTkVBUik7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJf
RVhULCBtX2Zibyk7Ci0gICAgICAgIDo6Z2xGbHVzaCgpOwotICAgIH0KLSAgICA6OmdsUmVhZFBp
eGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEpOwotICAgIGlmICht
X2F0dHJzLmFudGlhbGlhcyAmJiBtX2JvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pCi0gICAg
ICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2Ft
cGxlRkJPKTsKKyAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX1JFQURfRlJBTUVCVUZGRVJf
RVhULCBtX211bHRpc2FtcGxlRkJPKTsKKyAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0RS
QVdfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CisgICAgOjpnbEJsaXRGcmFtZWJ1ZmZlckVYVCh4
LCB5LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHQsIHgsIHksIHggKyB3aWR0aCwgeSArIGhlaWdodCwg
R0xfQ09MT1JfQlVGRkVSX0JJVCwgR0xfTElORUFSKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6cmVuZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGludGVy
bmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
M0RPcGVuR0xDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAppbmRleCBlNjhiYmE3ZmQ3ZjUx
OWZkNzhjMTY5YTcyOTNjOWIyYWQ1MjYwZGU4Li4yNWEzYWQzMGNjY2ZjZmZiODYyNDQ5ODQ3NGMy
YjY1OGRiNDQxNmE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENv
bW1vbi5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRh
dGVBdHRyaWJ1dGVzKCkKICAgICAgICAgY29uc3QgY2hhciogdmVuZG9yID0gcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBjaGFyKj4oOjpnbEdldFN0cmluZyhHTF9WRU5ET1IpKTsKICAgICAgICAgaWYg
KCFzdGQ6OnN0cnN0cih2ZW5kb3IsICJOVklESUEiKSkKICAgICAgICAgICAgIGlzVmFsaWRWZW5k
b3IgPSBmYWxzZTsKLSAgICAgICAgaWYgKCFpc1ZhbGlkVmVuZG9yIHx8ICFleHRlbnNpb25zLT5z
dXBwb3J0cygiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUiKSkKKyAgICAgICAgaWYg
KCFpc1ZhbGlkVmVuZG9yIHx8ICFleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfQU5HTEVfZnJhbWVi
dWZmZXJfbXVsdGlzYW1wbGUiKSB8fCBpc0dMRVMyQ29tcGxpYW50KCkpCiAgICAgICAgICAgICBt
X2F0dHJzLmFudGlhbGlhcyA9IGZhbHNlOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBleHRl
bnNpb25zLT5lbnN1cmVFbmFibGVkKCJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIp
OwpAQCAtMTQxLDYgKzE0MSwxNDEgQEAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29u
dGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YShEcmF3aW4KICAgICByZXR1
cm4gaW1hZ2VEYXRhLnJlbGVhc2UoKTsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cHJl
cGFyZVRleHR1cmUoKQoreworICAgIGlmIChtX2xheWVyQ29tcG9zaXRlZCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKG1fYXR0cnMuYW50aWFs
aWFzKQorICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KDAsIDAsIG1fY3Vy
cmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQpOworCisgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVY
VChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICA6OmdsQWN0aXZlVGV4dHVyZShHTF9U
RVhUVVJFMCk7CisgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fY29tcG9zaXRv
clRleHR1cmUpOworICAgIDo6Z2xDb3B5VGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBtX2lu
dGVybmFsQ29sb3JGb3JtYXQsIDAsIDAsIG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQs
IDApOworICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2JvdW5kVGV4dHVyZTAp
OworICAgIDo6Z2xBY3RpdmVUZXh0dXJlKG1fYWN0aXZlVGV4dHVyZSk7CisgICAgOjpnbEJpbmRG
cmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fYm91bmRGQk8pOworICAgIDo6Z2xG
aW5pc2goKTsKKyAgICBtX2xheWVyQ29tcG9zaXRlZCA9IHRydWU7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKHVuc2lnbmVkIGNoYXIgKnBpeGVscywg
aW50IHBpeGVsc1NpemUpCit7CisgICAgaW50IHRvdGFsQnl0ZXMgPSBtX2N1cnJlbnRXaWR0aCAq
IG1fY3VycmVudEhlaWdodCAqIDQ7CisgICAgaWYgKHBpeGVsc1NpemUgPCB0b3RhbEJ5dGVzKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIGJvb2wg
bXVzdFJlc3RvcmVGQk8gPSBmYWxzZTsKKyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKKyAg
ICAgICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeSgwLCAwLCBtX2N1cnJlbnRXaWR0
aCwgbV9jdXJyZW50SGVpZ2h0KTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9G
UkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICAgICAgbXVzdFJlc3RvcmVGQk8gPSB0cnVlOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChtX2JvdW5kRkJPICE9IG1fZmJvKSB7CisgICAgICAg
ICAgICBtdXN0UmVzdG9yZUZCTyA9IHRydWU7CisgICAgICAgICAgICA6OmdsQmluZEZyYW1lYnVm
ZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAgICAgICB9CisgICAgfQorCisg
ICAgR0xpbnQgcGFja0FsaWdubWVudCA9IDQ7CisgICAgYm9vbCBtdXN0UmVzdG9yZVBhY2tBbGln
bm1lbnQgPSBmYWxzZTsKKyAgICA6OmdsR2V0SW50ZWdlcnYoR0xfUEFDS19BTElHTk1FTlQsICZw
YWNrQWxpZ25tZW50KTsKKyAgICBpZiAocGFja0FsaWdubWVudCA+IDQpIHsKKyAgICAgICAgOjpn
bFBpeGVsU3RvcmVpKEdMX1BBQ0tfQUxJR05NRU5ULCA0KTsKKyAgICAgICAgbXVzdFJlc3RvcmVQ
YWNrQWxpZ25tZW50ID0gdHJ1ZTsKKyAgICB9CisKKyAgICA6OmdsUmVhZFBpeGVscygwLCAwLCBt
X2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LCBHTF9CR1JBLCBHTF9VTlNJR05FRF9JTlRf
OF84XzhfOF9SRVYsIHBpeGVscyk7CisgICAgaWYgKGlzR0xFUzJDb21wbGlhbnQoKSkgeworICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRvdGFsQnl0ZXM7IGkgKz0gNCkKKyAgICAgICAgICAg
IHN0ZDo6c3dhcChwaXhlbHNbaV0sIHBpeGVsc1tpICsgMl0pOyAvLyBDb252ZXJ0IHRvIEJHUkEK
KyAgICB9CisKKyAgICBpZiAobXVzdFJlc3RvcmVQYWNrQWxpZ25tZW50KQorICAgICAgICA6Omds
UGl4ZWxTdG9yZWkoR0xfUEFDS19BTElHTk1FTlQsIHBhY2tBbGlnbm1lbnQpOworCisgICAgaWYg
KG11c3RSZXN0b3JlRkJPKQorICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1F
QlVGRkVSX0VYVCwgbV9ib3VuZEZCTyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJl
c2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIGlmICghcGxhdGZvcm1HcmFwaGlj
c0NvbnRleHQzRCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAod2lkdGggPT0gbV9jdXJy
ZW50V2lkdGggJiYgaGVpZ2h0ID09IG1fY3VycmVudEhlaWdodCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9jdXJyZW50V2lkdGggPSB3aWR0aDsKKyAgICBtX2N1cnJlbnRIZWlnaHQgPSBoZWln
aHQ7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMo
KTsKKworICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8gPSByZXNpemVGQk9zKHdpZHRoLCBoZWlnaHQp
OworCisgICAgLy8gSW5pdGlhbGl6ZSByZW5kZXJidWZmZXJzIHRvIDAuCisgICAgR0xmbG9hdCBj
bGVhckNvbG9yW10gPSB7MCwgMCwgMCwgMH0sIGNsZWFyRGVwdGggPSAwOworICAgIEdMaW50IGNs
ZWFyU3RlbmNpbCA9IDA7CisgICAgR0xib29sZWFuIGNvbG9yTWFza1tdID0ge0dMX1RSVUUsIEdM
X1RSVUUsIEdMX1RSVUUsIEdMX1RSVUV9LCBkZXB0aE1hc2sgPSBHTF9UUlVFOworICAgIEdMdWlu
dCBzdGVuY2lsTWFzayA9IDB4ZmZmZmZmZmY7CisgICAgR0xib29sZWFuIGlzU2Npc3NvckVuYWJs
ZWQgPSBHTF9GQUxTRTsKKyAgICBHTGJvb2xlYW4gaXNEaXRoZXJFbmFibGVkID0gR0xfRkFMU0U7
CisgICAgR0xiaXRmaWVsZCBjbGVhck1hc2sgPSBHTF9DT0xPUl9CVUZGRVJfQklUOworICAgIDo6
Z2xHZXRGbG9hdHYoR0xfQ09MT1JfQ0xFQVJfVkFMVUUsIGNsZWFyQ29sb3IpOworICAgIDo6Z2xD
bGVhckNvbG9yKDAsIDAsIDAsIDApOworICAgIDo6Z2xHZXRCb29sZWFudihHTF9DT0xPUl9XUklU
RU1BU0ssIGNvbG9yTWFzayk7CisgICAgOjpnbENvbG9yTWFzayhHTF9UUlVFLCBHTF9UUlVFLCBH
TF9UUlVFLCBHTF9UUlVFKTsKKyAgICBpZiAobV9hdHRycy5kZXB0aCkgeworICAgICAgICA6Omds
R2V0RmxvYXR2KEdMX0RFUFRIX0NMRUFSX1ZBTFVFLCAmY2xlYXJEZXB0aCk7CisgICAgICAgIDo6
Z2xDbGVhckRlcHRoKDEpOworICAgICAgICA6OmdsR2V0Qm9vbGVhbnYoR0xfREVQVEhfV1JJVEVN
QVNLLCAmZGVwdGhNYXNrKTsKKyAgICAgICAgOjpnbERlcHRoTWFzayhHTF9UUlVFKTsKKyAgICAg
ICAgY2xlYXJNYXNrIHw9IEdMX0RFUFRIX0JVRkZFUl9CSVQ7CisgICAgfQorICAgIGlmIChtX2F0
dHJzLnN0ZW5jaWwpIHsKKyAgICAgICAgOjpnbEdldEludGVnZXJ2KEdMX1NURU5DSUxfQ0xFQVJf
VkFMVUUsICZjbGVhclN0ZW5jaWwpOworICAgICAgICA6OmdsQ2xlYXJTdGVuY2lsKDApOworICAg
ICAgICA6OmdsR2V0SW50ZWdlcnYoR0xfU1RFTkNJTF9XUklURU1BU0ssIHJlaW50ZXJwcmV0X2Nh
c3Q8R0xpbnQqPigmc3RlbmNpbE1hc2spKTsKKyAgICAgICAgOjpnbFN0ZW5jaWxNYXNrU2VwYXJh
dGUoR0xfRlJPTlQsIDB4ZmZmZmZmZmYpOworICAgICAgICBjbGVhck1hc2sgfD0gR0xfU1RFTkNJ
TF9CVUZGRVJfQklUOworICAgIH0KKyAgICBpc1NjaXNzb3JFbmFibGVkID0gOjpnbElzRW5hYmxl
ZChHTF9TQ0lTU09SX1RFU1QpOworICAgIDo6Z2xEaXNhYmxlKEdMX1NDSVNTT1JfVEVTVCk7Cisg
ICAgaXNEaXRoZXJFbmFibGVkID0gOjpnbElzRW5hYmxlZChHTF9ESVRIRVIpOworICAgIDo6Z2xE
aXNhYmxlKEdMX0RJVEhFUik7CisKKyAgICA6OmdsQ2xlYXIoY2xlYXJNYXNrKTsKKworICAgIDo6
Z2xDbGVhckNvbG9yKGNsZWFyQ29sb3JbMF0sIGNsZWFyQ29sb3JbMV0sIGNsZWFyQ29sb3JbMl0s
IGNsZWFyQ29sb3JbM10pOworICAgIDo6Z2xDb2xvck1hc2soY29sb3JNYXNrWzBdLCBjb2xvck1h
c2tbMV0sIGNvbG9yTWFza1syXSwgY29sb3JNYXNrWzNdKTsKKyAgICBpZiAobV9hdHRycy5kZXB0
aCkgeworICAgICAgICA6OmdsQ2xlYXJEZXB0aChjbGVhckRlcHRoKTsKKyAgICAgICAgOjpnbERl
cHRoTWFzayhkZXB0aE1hc2spOworICAgIH0KKyAgICBpZiAobV9hdHRycy5zdGVuY2lsKSB7Cisg
ICAgICAgIDo6Z2xDbGVhclN0ZW5jaWwoY2xlYXJTdGVuY2lsKTsKKyAgICAgICAgOjpnbFN0ZW5j
aWxNYXNrU2VwYXJhdGUoR0xfRlJPTlQsIHN0ZW5jaWxNYXNrKTsKKyAgICB9CisgICAgaWYgKGlz
U2Npc3NvckVuYWJsZWQpCisgICAgICAgIDo6Z2xFbmFibGUoR0xfU0NJU1NPUl9URVNUKTsKKyAg
ICBlbHNlCisgICAgICAgIDo6Z2xEaXNhYmxlKEdMX1NDSVNTT1JfVEVTVCk7CisgICAgaWYgKGlz
RGl0aGVyRW5hYmxlZCkKKyAgICAgICAgOjpnbEVuYWJsZShHTF9ESVRIRVIpOworICAgIGVsc2UK
KyAgICAgICAgOjpnbERpc2FibGUoR0xfRElUSEVSKTsKKworICAgIGlmIChtdXN0UmVzdG9yZUZC
TykKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1f
Ym91bmRGQk8pOworCisgICAgOjpnbEZsdXNoKCk7Cit9CisKIEludFNpemUgR3JhcGhpY3NDb250
ZXh0M0Q6OmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkgY29uc3QKIHsKICAgICByZXR1cm4g
SW50U2l6ZShtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0KTsKQEAgLTE3NCw2ICszMDks
MjAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZEJ1ZmZlcihHQzNEZW51bSB0YXJnZXQs
IFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQogICAgIDo6Z2xCaW5kQnVmZmVyKHRhcmdldCwgYnVm
ZmVyKTsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZEZyYW1lYnVmZmVyKEdDM0Rl
bnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCit7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgR0x1aW50IGZibzsKKyAgICBpZiAoYnVmZmVyKQorICAgICAgICBmYm8g
PSBidWZmZXI7CisgICAgZWxzZQorICAgICAgICBmYm8gPSAobV9hdHRycy5hbnRpYWxpYXMgPyBt
X211bHRpc2FtcGxlRkJPIDogbV9mYm8pOworICAgIGlmIChmYm8gIT0gbV9ib3VuZEZCTykgewor
ICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKHRhcmdldCwgZmJvKTsKKyAgICAgICAgbV9i
b3VuZEZCTyA9IGZibzsKKyAgICB9Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRS
ZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IHJlbmRlcmJ1ZmZl
cikKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKQEAgLTMyNiw2ICs0NzUsMzAgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6Y29tcGlsZVNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHNoYWRl
cikKICAgICBBU1NFUlQoR0xDb21waWxlU3VjY2VzcyA9PSBHTF9UUlVFKTsKIH0KIAordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6Y29weVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdD
M0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIpCit7CisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzICYmIG1fYm91
bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykgeworICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGlu
Z0lmTmVjZXNzYXJ5KHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgICAgICA6OmdsQmluZEZyYW1l
YnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAgIH0KKyAgICA6OmdsQ29w
eVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBo
ZWlnaHQsIGJvcmRlcik7CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzICYmIG1fYm91bmRGQk8g
PT0gbV9tdWx0aXNhbXBsZUZCTykKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9G
UkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpjb3B5VGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWws
IEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcyAmJiBtX2JvdW5kRkJPID09IG1fbXVs
dGlzYW1wbGVGQk8pIHsKKyAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeSh4
LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9G
UkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICB9CisgICAgOjpnbENvcHlUZXhTdWJJbWFnZTJE
KHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOwor
ICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcyAmJiBtX2JvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVG
Qk8pCisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBt
X211bHRpc2FtcGxlRkJPKTsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y3VsbEZhY2Uo
R0MzRGVudW0gbW9kZSkKIHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKQEAgLTQ1MSw2ICs2
MjQsMzIgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlQXR0cmliKFBsYXRmb3Jt
M0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgKICAgICBpbmZvLnNpemUgPSBzaXplOwog
ICAgIHJldHVybiB0cnVlOwogfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBY3RpdmVV
bmlmb3JtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUlu
Zm8mIGluZm8pCit7CisgICAgaWYgKCFwcm9ncmFtKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKElOVkFMSURfVkFMVUUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgR0xpbnQgbWF4VW5pZm9ybVNpemUgPSAwOworICAg
IDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCwg
Jm1heFVuaWZvcm1TaXplKTsKKworICAgIE93bkFycmF5UHRyPEdMY2hhcj4gbmFtZSA9IGFkb3B0
QXJyYXlQdHIobmV3IEdMY2hhclttYXhVbmlmb3JtU2l6ZV0pOyAvLyBHTF9BQ1RJVkVfVU5JRk9S
TV9NQVhfTEVOR1RIIGluY2x1ZGVzIG51bGwgdGVybWluYXRpb24uCisgICAgR0xzaXplaSBuYW1l
TGVuZ3RoID0gMDsKKyAgICBHTGludCBzaXplID0gMDsKKyAgICBHTGVudW0gdHlwZSA9IDA7Cisg
ICAgOjpnbEdldEFjdGl2ZVVuaWZvcm0ocHJvZ3JhbSwgaW5kZXgsIG1heFVuaWZvcm1TaXplLCAm
bmFtZUxlbmd0aCwgJnNpemUsICZ0eXBlLCBuYW1lLmdldCgpKTsKKyAgICBpZiAoIW5hbWVMZW5n
dGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGluZm8ubmFtZSA9IFN0cmluZyhuYW1l
LmdldCgpLCBuYW1lTGVuZ3RoKTsKKyAgICBpbmZvLnR5cGUgPSB0eXBlOworICAgIGluZm8uc2l6
ZSA9IHNpemU7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KICAgICAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmdldEF0dGFjaGVkU2hhZGVycyhQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0Rz
aXplaSBtYXhDb3VudCwgR0MzRHNpemVpKiBjb3VudCwgUGxhdGZvcm0zRE9iamVjdCogc2hhZGVy
cykKIHsKQEAgLTU4Niw2ICs3ODUsMjIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cG9seWdv
bk9mZnNldChHQzNEZmxvYXQgZmFjdG9yLCBHQzNEZmxvYXQgdW5pdHMpCiAgICAgOjpnbFBvbHln
b25PZmZzZXQoZmFjdG9yLCB1bml0cyk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJl
YWRQaXhlbHMoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVp
IGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCB2b2lkKiBkYXRhKQorewor
ICAgIC8vIEZJWE1FOiByZW1vdmUgdGhlIHR3byBnbEZsdXNoIGNhbGxzIHdoZW4gdGhlIGRyaXZl
ciBidWcgaXMgZml4ZWQsIGkuZS4sCisgICAgLy8gYWxsIHByZXZpb3VzIHJlbmRlcmluZyBjYWxs
cyBzaG91bGQgYmUgZG9uZSBiZWZvcmUgcmVhZGluZyBwaXhlbHMuCisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgOjpnbEZsdXNoKCk7CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzICYm
IG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykgeworICAgICAgICByZXNvbHZlTXVsdGlz
YW1wbGluZ0lmTmVjZXNzYXJ5KHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgICAgICA6OmdsQmlu
ZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAgICAgICA6Omds
Rmx1c2goKTsKKyAgICB9CisgICAgOjpnbFJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwg
Zm9ybWF0LCB0eXBlLCBkYXRhKTsKKyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgbV9ib3Vu
ZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQorICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhU
KEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7Cit9CisKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnJlbGVhc2VTaGFkZXJDb21waWxlcigpCiB7CiAgICAgLy8gRklYTUU6IFRo
aXMgaXMgbm90IGltcGxlbWVudGVkIG9uIGRlc2t0b3AgT3BlbkdMLiBXZSBuZWVkIHRvIGhhdmUg
aWZkZWZzIGZvciB0aGUgZGlmZmVyZW50IEdMIHZhcmlhbnRzLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdM
RVMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dDNET3BlbkdMRVMuY3BwCmluZGV4IDkwZmY1YTBhMzQ1YmRmNjRiOTc4MGQ0OGRiNjQy
NTA2NjdkZjMxMjUuLmU2NzUwYTkzNjU4OTUyOTcxZDQ3ZWU1YjczZWUzN2IyNDE5NDI1NjkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGlj
c0NvbnRleHQzRE9wZW5HTEVTLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAKQEAgLTM4LDYzICszOCw4
MiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJl
YWRSZW5kZXJpbmdSZXN1bHRzKHVuc2lnbmVkIGNoYXIgKnBpeGVscywgaW50IHBpeGVsc1NpemUp
Citib29sIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNpemVGQk9zKGludCB3aWR0aCwgaW50IGhlaWdo
dCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwcmVwYXJlVGV4dHVyZSgpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZEZyYW1l
YnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICBHTHVpbnQgY29sb3JGb3JtYXQgPSAwLCBwaXhlbERhdGFU
eXBlID0gMDsKKyAgICBpZiAobV9hdHRycy5hbHBoYSkgeworICAgICAgICBtX2ludGVybmFsQ29s
b3JGb3JtYXQgPSBHTF9SR0JBOworICAgICAgICBjb2xvckZvcm1hdCA9IEdMX1JHQkE7CisgICAg
ICAgIHBpeGVsRGF0YVR5cGUgPSBHTF9VTlNJR05FRF9CWVRFOworICAgIH0gZWxzZSB7CisgICAg
ICAgIG1faW50ZXJuYWxDb2xvckZvcm1hdCA9IEdMX1JHQjsKKyAgICAgICAgY29sb3JGb3JtYXQg
PSBHTF9SR0I7CisgICAgICAgIHBpeGVsRGF0YVR5cGUgPSBHTF9VTlNJR05FRF9TSE9SVF81XzZf
NTsKKyAgICB9CisKKyAgICAvLyBSZXNpemUgcmVndWxhciBGQk8uCisgICAgYm9vbCBtdXN0UmVz
dG9yZUZCTyA9IGZhbHNlOworICAgIGlmIChtX2JvdW5kRkJPICE9IG1fZmJvKSB7CisgICAgICAg
IG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChH
TF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICB9CisKKyAgICA6OmdsQmluZFRleHR1cmUo
R0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsKKyAgICA6OmdsVGV4SW1hZ2UyRChHTF9URVhUVVJF
XzJELCAwLCBtX2ludGVybmFsQ29sb3JGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGNvbG9yRm9y
bWF0LCBwaXhlbERhdGFUeXBlLCAwKTsKKyAgICA6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkRFWFQo
R0xfRlJBTUVCVUZGRVJfRVhULCBHTF9DT0xPUl9BVFRBQ0hNRU5UMF9FWFQsIEdMX1RFWFRVUkVf
MkQsIG1fdGV4dHVyZSwgMCk7CisKKyAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwg
bV9jb21wb3NpdG9yVGV4dHVyZSk7CisgICAgOjpnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwg
MCwgbV9pbnRlcm5hbENvbG9yRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBjb2xvckZvcm1hdCwg
R0xfVU5TSUdORURfQllURSwgMCk7CisgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQs
IDApOworCisgICAgaWYgKCFtX2F0dHJzLmFudGlhbGlhcykgeworICAgICAgICBpZiAobV9hdHRy
aWJ1dGVzLnN0ZW5jaWwpIHsKKyAgICAgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdM
X1JFTkRFUkJVRkZFUl9FWFQsIG1fc3RlbmNpbEJ1ZmZlcik7CisgICAgICAgICAgICA6OmdsUmVu
ZGVyYnVmZmVyU3RvcmFnZUVYVChHTF9SRU5ERVJCVUZGRVJfRVhULCBHTF9TVEVOQ0lMX0lOREVY
OCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJSZW5kZXJidWZm
ZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBHTF9TVEVOQ0lMX0FUVEFDSE1FTlRfRVhULCBHTF9S
RU5ERVJCVUZGRVJfRVhULCBtX3N0ZW5jaWxCdWZmZXIpOworICAgICAgICB9CisgICAgICAgIGlm
IChtX2F0dHJpYnV0ZXMuZGVwdGgpIHsKKyAgICAgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVy
RVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fZGVwdGhCdWZmZXIpOworICAgICAgICAgICAgOjpn
bFJlbmRlcmJ1ZmZlclN0b3JhZ2VFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgR0xfREVQVEhfQ09N
UE9ORU5UMTYsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgOjpnbEZyYW1lYnVmZmVyUmVu
ZGVyYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfREVQVEhfQVRUQUNITUVOVF9FWFQs
IEdMX1JFTkRFUkJVRkZFUl9FWFQsIG1fZGVwdGhCdWZmZXIpOworICAgICAgICB9CisgICAgICAg
IDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9FWFQsIDApOworICAgIH0K
KyAgICBpZiAoZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCkg
IT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEVfRVhUKSB7CisgICAgICAgIC8vIEZJWE1FOiBjbGVh
bnVwCisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgfQorCisgICAgcmV0dXJuIG11c3RS
ZXN0b3JlRkJPOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4SW1hZ2UyRChH
QzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBH
QzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBH
QzNEaW50IGJvcmRlcikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpjb3B5VGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEaW50IHgsIEdDM0Rp
bnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci19Ci0KLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZVVuaWZvcm0o
UGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5m
bykKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnJlYWRQaXhlbHMoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0Mz
RHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCB2b2lkKiBkYXRh
KQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2Fy
eShHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
KQogeworICAgIC8vIEZJWE1FOiBXZSBkb24ndCBzdXBwb3J0IGFudGlhbGlhc2luZyB5ZXQuCiAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVuZGVy
YnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFn
ZUVYVCh0YXJnZXQsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6Z2V0SW50ZWdlcnYoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZh
bHVlKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgOjpnbEdldEludGVnZXJ2KHBuYW1lLCB2YWx1ZSk7CiB9CiAKIGJvb2wgR3JhcGhpY3ND
b250ZXh0M0Q6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBH
QzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lk
KiBwaXhlbHMpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KKyAgICBpZiAod2lkdGggJiYgaGVpZ2h0ICYmICFwaXhlbHMpIHsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbFRleEltYWdlMkQodGFyZ2V0LCBs
ZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBl
LCBwaXhlbHMpOworICAgIHJldHVybiB0cnVlOwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdM
KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124068</attachid>
            <date>2012-01-26 00:11:11 -0800</date>
            <delta_ts>2012-02-04 03:33:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76248-20120126171109.patch</filename>
            <type>text/plain</type>
            <size>30478</size>
            <attacher name="ChangSeok Oh">kevin.cs.oh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1OTY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjI2NzY3MGZjMjU3YjEx
ODczOTc1M2RlNDNhOTk3NDQ5MWMyMjRhMC4uMmI0YjBjNzJkMzIwMTZiMWZkMzg5YTA2YTk1NDEw
Nzc3MDM1ZTMyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDEyLTAxLTI1ICBDaGFu
Z1Nlb2sgT2ggIDxzaGl2YW1pZG93QGdtYWlsLmNvbT4KKworICAgICAgICBJbml0aWFsIGltcGxl
bWVudGF0aW9uIG9mIEdyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjI0OAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudGVkIEFQSXMgaW4gR3Jh
cGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAgYWNjb3JkaW5nIHRvIHRoZSBHTEVTIHNwZWMuIHJv
dWdobHkuCisgICAgICAgIEJ1dCBubyB3YXkgdG8gcnVuIHRoZXNlIGNvZGVzIHJpZ2h0IG5vdywg
YmVjYXVzZSB0aGV5IG5lZWQgYW4gZXh0cmEgcG9ydAorICAgICAgICBzcGVjaWZpYyBpbXBsZW1l
bnRhdGlvbiB0byB3b3JrLiBJIHBsYW4gdG8gYWRkIHRoZXNlIGV4dHJhIGNvZGVzIGZvciB0aGUg
R1RLIHBvcnQKKyAgICAgICAgaW4gdGhlIG5leHQgcGF0Y2guIEFuZCBhbHNvIHRoaXMgcGF0Y2gg
ZG9lc24ndCBzdXBwb3J0IGFudGktYWxpYXNpbmcgeWV0LiBBbm90aGVyIGJ1ZworICAgICAgICB3
aWxsIGRlYWwgd2l0aCBpdC4KKyAgICAgICAgTW92ZWQgc29tZSBBUElzIGluIEdyYXBoaWNzQ29u
dGV4dDNET3BlbkdMRVMuY3BwIHRvIEdyYXBoaWNzQ29udGV4dDNEQ29tbW9uLmNwcC4KKyAgICAg
ICAgSXQgbG9va3MgaXQgY291bGQgYmUgc2hhcmVkIGJldHdlZW4gZ2wgYW5kIGdsZXMuCisgICAg
ICAgIFR3byBoZWxwZXIgZnVuY3Rpb25zIGFyZSBhZGRlZCB0byBhdm9pZCBjb2RlIGR1cGxpY2F0
aW9uIGluIEdyYXBoaWNzQ29udGV4dDNELgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyByZXF1aXJl
ZC4KKyAgICAgICAgV2UnbGwgYmUgYWJsZSB0byB2ZXJpZnkgdGhpcyBwYXRjaCBieSB1c2luZyB0
aGUgZXhpc3Rpbmcgd2ViZ2wgdGVzdCBjYXNlcy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dDNELmg6IEFkZCBidWlsZCBmbGFnIHRvIGFjY2VzcyBzdGVuY2ls
QnVmZmVyICYgZGVwdGhCdWZmZXIgZm9yIGdsZXMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpyZXNpemVGQk9zKTogSGVscGVyIGZ1bmN0aW9uIGV4dHJhY3Rl
ZCBmcm9tIEdDM0Q6OnJlc2hhcGUgdG8gcmVzaXplIHJlZ3VsYXIgJiBtdWx0aXNhbXBsZWQgRkJP
cy4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZXNvbHZlTXVsdGlzYW1w
bGluZ0lmTmVjZXNzYXJ5KTogSGVscGVyIGZ1bmN0aW9uIHRvIHJlc29sdmUgbXVsdGlzYW1wbGlu
Zy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RP
cGVuR0xDb21tb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZh
bGlkYXRlQXR0cmlidXRlcyk6IEFkZCBjb25kaXRpb24gdG8gZGlzYWJsZSBhbnRpYWxpYXNpbmcg
Zm9yIEdMRVMuCisKKyAgICAgICAgRm9sbG93aW5nIEFQSXMgbG9va2VkIHNoYXJlYWJsZSBzbyB0
aGF0IG1vdmVkIGludG8gR0MzRE9wZW5HTENvbW1vbi5jcHAuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6cHJlcGFyZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpiaW5kRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmNvcHlUZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpjb3B5VGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0QWN0aXZlVW5pZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6cmVhZFBpeGVscyk6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6cmVzaXplRkJPcyk6IFNhbWUgd2l0aCB0aGUgYWJvdmUuCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vz
c2FyeSk6IFNhbWUgd2l0aCB0aGUgYWJvdmUuCisKKyAgICAgICAgQnJpZWYgZXhwbGFuYXRpb24g
YWJvdXQgd2hhdCB0aGUgZGlmZmVyZW5jZXMgYXJlIGJldHdlZW4gZ2wgYW5kIGdsZXMuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVuZGVyYnVmZmVyU3RvcmFnZSk6IFJl
bW92ZWQgY29kZXMgZm9yIGNvbnZlcnRpbmcgR0xFUyBwYXJhbWV0ZXIgdG8gR0wgcGFyYW1ldGVy
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVnZXJ2KTogUmVt
b3ZlZCBjb2RlcyB0aGF0IGVtdWxhdGUgR0xFUy4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjp0ZXhJbWFnZTJEKTogUmVtb3ZlZCBjb2RlcyBmb3IgY29udmVydGluZyBHTEVT
IHBhcmFtZXRlciB0byBHTCBwYXJhbWV0ZXIuCisKIDIwMTItMDEtMjUgIERhbmllbCBDaGVuZyAg
PGRjaGVuZ0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBGaXggQ2xpcGJvYXJk
Q2hyb21pdW06OnZhbGlkYXRlRmlsZW5hbWUgdG8gYWN0dWFsbHkgb3BlcmF0ZSBvbiBleHRlbnNp
b25zCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQzRC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0M0QuaAppbmRleCBkZmViYmJhOWIwMmQ4NzI2YzMwMGYzMTk3ZGRjMTk5YjI0OWU5OTM1
Li41OWQ3MGU0MjdlZWNkY2YwMWFhNWQwMzFjYWE5NmZkMmIxNzQ2NTUwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKQEAg
LTg5OCw2ICs4OTgsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCByZWFkUmVuZGVyaW5nUmVzdWx0cyh1
bnNpZ25lZCBjaGFyKiBwaXhlbHMsIGludCBwaXhlbHNTaXplKTsKICNlbmRpZgogCisgICAgYm9v
bCByZXNpemVGQk9zKGludCB3aWR0aCwgaW50IGhlaWdodCk7CisgICAgdm9pZCByZXNvbHZlTXVs
dGlzYW1wbGluZ0lmTmVjZXNzYXJ5KEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lk
dGgsIEdDM0RzaXplaSBoZWlnaHQpOworCiAgICAgaW50IG1fY3VycmVudFdpZHRoLCBtX2N1cnJl
bnRIZWlnaHQ7CiAgICAgYm9vbCBpc1Jlc291cmNlU2FmZSgpOwogCkBAIC05MzIsNiArOTM1LDEw
IEBAIHB1YmxpYzoKICAgICBHQzNEdWludCBtX2RlcHRoQnVmZmVyOwogICAgIEdDM0R1aW50IG1f
c3RlbmNpbEJ1ZmZlcjsKICNlbHNlCisjaWYgVVNFKE9QRU5HTF9FU18yKQorICAgIEdDM0R1aW50
IG1fZGVwdGhCdWZmZXI7CisgICAgR0MzRHVpbnQgbV9zdGVuY2lsQnVmZmVyOworI2VuZGlmCiAg
ICAgR0MzRHVpbnQgbV9kZXB0aFN0ZW5jaWxCdWZmZXI7CiAjZW5kaWYKICAgICBib29sIG1fbGF5
ZXJDb21wb3NpdGVkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHAKaW5kZXgg
NDdhNDFjNmQwMDI2NWIwY2JhOWE0NGZmY2M0MTEwNmFlOWJhMDc3NS4uOWIxOTMwMDI1MGNhN2Qy
ZjI1OTUzMDYwNTRkZDRhODA3YjkyNjFiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RP
cGVuR0wuY3BwCkBAIC00Myw1OCArNDMsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRSZW5kZXJpbmdSZXN1bHRzKHVuc2lnbmVkIGNoYXIg
KnBpeGVscywgaW50IHBpeGVsc1NpemUpCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNpemVG
Qk9zKGludCB3aWR0aCwgaW50IGhlaWdodCkKIHsKLSAgICBpZiAocGl4ZWxzU2l6ZSA8IG1fY3Vy
cmVudFdpZHRoICogbV9jdXJyZW50SGVpZ2h0ICogNCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBib29sIG11c3RSZXN0b3JlRkJPID0gZmFsc2U7
Ci0gICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZm
ZXJFWFQoR0xfUkVBRF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOwotICAgICAg
ICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0RSQVdfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7
Ci0gICAgICAgIDo6Z2xCbGl0RnJhbWVidWZmZXJFWFQoMCwgMCwgbV9jdXJyZW50V2lkdGgsIG1f
Y3VycmVudEhlaWdodCwgMCwgMCwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCwgR0xf
Q09MT1JfQlVGRkVSX0JJVCwgR0xfTElORUFSKTsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZl
ckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKLSAgICAgICAgbXVzdFJlc3RvcmVGQk8g
PSB0cnVlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChtX2JvdW5kRkJPICE9IG1fZmJvKSB7
Ci0gICAgICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IHRydWU7Ci0gICAgICAgICAgICA6OmdsQmlu
ZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgR0xpbnQgcGFja0FsaWdubWVudCA9IDQ7Ci0gICAgYm9vbCBtdXN0UmVzdG9y
ZVBhY2tBbGlnbm1lbnQgPSBmYWxzZTsKLSAgICA6OmdsR2V0SW50ZWdlcnYoR0xfUEFDS19BTElH
Tk1FTlQsICZwYWNrQWxpZ25tZW50KTsKLSAgICBpZiAocGFja0FsaWdubWVudCA+IDQpIHsKLSAg
ICAgICAgOjpnbFBpeGVsU3RvcmVpKEdMX1BBQ0tfQUxJR05NRU5ULCA0KTsKLSAgICAgICAgbXVz
dFJlc3RvcmVQYWNrQWxpZ25tZW50ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICA6OmdsUmVhZFBpeGVs
cygwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LCBHTF9CR1JBLCBHTF9VTlNJ
R05FRF9JTlRfOF84XzhfOF9SRVYsIHBpeGVscyk7Ci0KLSAgICBpZiAobXVzdFJlc3RvcmVQYWNr
QWxpZ25tZW50KQotICAgICAgICA6OmdsUGl4ZWxTdG9yZWkoR0xfUEFDS19BTElHTk1FTlQsIHBh
Y2tBbGlnbm1lbnQpOwotCi0gICAgaWYgKG11c3RSZXN0b3JlRkJPKQotICAgICAgICA6OmdsQmlu
ZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9ib3VuZEZCTyk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQotewot
ICAgIGlmICghcGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAod2lkdGggPT0gbV9jdXJyZW50V2lkdGggJiYgaGVpZ2h0ID09IG1fY3VycmVudEhl
aWdodCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIG1fY3VycmVudFdpZHRoID0gd2lkdGg7
Ci0gICAgbV9jdXJyZW50SGVpZ2h0ID0gaGVpZ2h0OwotICAgIAotICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotICAgIHZhbGlkYXRlQXR0cmlidXRlcygpOwotCiAgICAgR0x1aW50IGNvbG9yRm9y
bWF0LCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCA9IDA7CiAgICAgaWYgKG1fYXR0cnMuYWxw
aGEpIHsKICAgICAgICAgbV9pbnRlcm5hbENvbG9yRm9ybWF0ID0gR0xfUkdCQTg7CkBAIC0xNzcs
MTY2ICsxMjcsMTQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZShpbnQgd2lkdGgs
IGludCBoZWlnaHQpCiAgICAgICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IGZhbHNlOwogICAgIH0K
IAotICAgIC8vIEluaXRpYWxpemUgcmVuZGVyYnVmZmVycyB0byAwLgotICAgIEdMZmxvYXQgY2xl
YXJDb2xvcltdID0gezAsIDAsIDAsIDB9LCBjbGVhckRlcHRoID0gMDsKLSAgICBHTGludCBjbGVh
clN0ZW5jaWwgPSAwOwotICAgIEdMYm9vbGVhbiBjb2xvck1hc2tbXSA9IHtHTF9UUlVFLCBHTF9U
UlVFLCBHTF9UUlVFLCBHTF9UUlVFfSwgZGVwdGhNYXNrID0gR0xfVFJVRTsKLSAgICBHTHVpbnQg
c3RlbmNpbE1hc2sgPSAweGZmZmZmZmZmOwotICAgIEdMYm9vbGVhbiBpc1NjaXNzb3JFbmFibGVk
ID0gR0xfRkFMU0U7Ci0gICAgR0xib29sZWFuIGlzRGl0aGVyRW5hYmxlZCA9IEdMX0ZBTFNFOwot
ICAgIEdMYml0ZmllbGQgY2xlYXJNYXNrID0gR0xfQ09MT1JfQlVGRkVSX0JJVDsKLSAgICA6Omds
R2V0RmxvYXR2KEdMX0NPTE9SX0NMRUFSX1ZBTFVFLCBjbGVhckNvbG9yKTsKLSAgICA6OmdsQ2xl
YXJDb2xvcigwLCAwLCAwLCAwKTsKLSAgICA6OmdsR2V0Qm9vbGVhbnYoR0xfQ09MT1JfV1JJVEVN
QVNLLCBjb2xvck1hc2spOwotICAgIDo6Z2xDb2xvck1hc2soR0xfVFJVRSwgR0xfVFJVRSwgR0xf
VFJVRSwgR0xfVFJVRSk7Ci0gICAgaWYgKG1fYXR0cnMuZGVwdGgpIHsKLSAgICAgICAgOjpnbEdl
dEZsb2F0dihHTF9ERVBUSF9DTEVBUl9WQUxVRSwgJmNsZWFyRGVwdGgpOwotICAgICAgICA6Omds
Q2xlYXJEZXB0aCgxKTsKLSAgICAgICAgOjpnbEdldEJvb2xlYW52KEdMX0RFUFRIX1dSSVRFTUFT
SywgJmRlcHRoTWFzayk7Ci0gICAgICAgIDo6Z2xEZXB0aE1hc2soR0xfVFJVRSk7Ci0gICAgICAg
IGNsZWFyTWFzayB8PSBHTF9ERVBUSF9CVUZGRVJfQklUOwotICAgIH0KLSAgICBpZiAobV9hdHRy
cy5zdGVuY2lsKSB7Ci0gICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9TVEVOQ0lMX0NMRUFSX1ZB
TFVFLCAmY2xlYXJTdGVuY2lsKTsKLSAgICAgICAgOjpnbENsZWFyU3RlbmNpbCgwKTsKLSAgICAg
ICAgOjpnbEdldEludGVnZXJ2KEdMX1NURU5DSUxfV1JJVEVNQVNLLCByZWludGVycHJldF9jYXN0
PEdMaW50Kj4oJnN0ZW5jaWxNYXNrKSk7Ci0gICAgICAgIDo6Z2xTdGVuY2lsTWFza1NlcGFyYXRl
KEdMX0ZST05ULCAweGZmZmZmZmZmKTsKLSAgICAgICAgY2xlYXJNYXNrIHw9IEdMX1NURU5DSUxf
QlVGRkVSX0JJVDsKLSAgICB9Ci0gICAgaXNTY2lzc29yRW5hYmxlZCA9IDo6Z2xJc0VuYWJsZWQo
R0xfU0NJU1NPUl9URVNUKTsKLSAgICA6OmdsRGlzYWJsZShHTF9TQ0lTU09SX1RFU1QpOwotICAg
IGlzRGl0aGVyRW5hYmxlZCA9IDo6Z2xJc0VuYWJsZWQoR0xfRElUSEVSKTsKLSAgICA6OmdsRGlz
YWJsZShHTF9ESVRIRVIpOwotCi0gICAgOjpnbENsZWFyKGNsZWFyTWFzayk7Ci0KLSAgICA6Omds
Q2xlYXJDb2xvcihjbGVhckNvbG9yWzBdLCBjbGVhckNvbG9yWzFdLCBjbGVhckNvbG9yWzJdLCBj
bGVhckNvbG9yWzNdKTsKLSAgICA6OmdsQ29sb3JNYXNrKGNvbG9yTWFza1swXSwgY29sb3JNYXNr
WzFdLCBjb2xvck1hc2tbMl0sIGNvbG9yTWFza1szXSk7Ci0gICAgaWYgKG1fYXR0cnMuZGVwdGgp
IHsKLSAgICAgICAgOjpnbENsZWFyRGVwdGgoY2xlYXJEZXB0aCk7Ci0gICAgICAgIDo6Z2xEZXB0
aE1hc2soZGVwdGhNYXNrKTsKLSAgICB9Ci0gICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkgewotICAg
ICAgICA6OmdsQ2xlYXJTdGVuY2lsKGNsZWFyU3RlbmNpbCk7Ci0gICAgICAgIDo6Z2xTdGVuY2ls
TWFza1NlcGFyYXRlKEdMX0ZST05ULCBzdGVuY2lsTWFzayk7Ci0gICAgfQotICAgIGlmIChpc1Nj
aXNzb3JFbmFibGVkKQotICAgICAgICA6OmdsRW5hYmxlKEdMX1NDSVNTT1JfVEVTVCk7Ci0gICAg
ZWxzZQotICAgICAgICA6OmdsRGlzYWJsZShHTF9TQ0lTU09SX1RFU1QpOwotICAgIGlmIChpc0Rp
dGhlckVuYWJsZWQpCi0gICAgICAgIDo6Z2xFbmFibGUoR0xfRElUSEVSKTsKLSAgICBlbHNlCi0g
ICAgICAgIDo6Z2xEaXNhYmxlKEdMX0RJVEhFUik7Ci0KLSAgICBpZiAobXVzdFJlc3RvcmVGQk8p
Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Jv
dW5kRkJPKTsKLQotICAgIDo6Z2xGbHVzaCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpwcmVwYXJlVGV4dHVyZSgpCi17Ci0gICAgaWYgKG1fbGF5ZXJDb21wb3NpdGVkKQotICAgICAg
ICByZXR1cm47Ci0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgaWYgKG1fYXR0cnMuYW50
aWFsaWFzKSB7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfUkVBRF9GUkFNRUJV
RkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOwotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVy
RVhUKEdMX0RSQVdfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7Ci0gICAgICAgIDo6Z2xCbGl0RnJh
bWVidWZmZXJFWFQoMCwgMCwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCwgMCwgMCwg
bV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCwgR0xfQ09MT1JfQlVGRkVSX0JJVCwgR0xf
TElORUFSKTsKLSAgICB9Ci0gICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZF
Ul9FWFQsIG1fZmJvKTsKLSAgICA6OmdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCk7Ci0gICAg
OjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fY29tcG9zaXRvclRleHR1cmUpOwotICAg
IDo6Z2xDb3B5VGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBtX2ludGVybmFsQ29sb3JGb3Jt
YXQsIDAsIDAsIG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQsIDApOwotICAgIDo6Z2xC
aW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2JvdW5kVGV4dHVyZTApOwotICAgIDo6Z2xBY3Rp
dmVUZXh0dXJlKG1fYWN0aXZlVGV4dHVyZSk7Ci0gICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChH
TF9GUkFNRUJVRkZFUl9FWFQsIG1fYm91bmRGQk8pOwotICAgIDo6Z2xGaW5pc2goKTsKLSAgICBt
X2xheWVyQ29tcG9zaXRlZCA9IHRydWU7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJp
bmRGcmFtZWJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQot
ewotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIEdMdWludCBmYm87Ci0gICAgaWYgKGJ1
ZmZlcikKLSAgICAgICAgZmJvID0gYnVmZmVyOwotICAgIGVsc2UKLSAgICAgICAgZmJvID0gKG1f
YXR0cnMuYW50aWFsaWFzID8gbV9tdWx0aXNhbXBsZUZCTyA6IG1fZmJvKTsKLSAgICBpZiAoZmJv
ICE9IG1fYm91bmRGQk8pIHsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVCh0YXJnZXQs
IGZibyk7Ci0gICAgICAgIG1fYm91bmRGQk8gPSBmYm87Ci0gICAgfQotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpjb3B5VGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2
ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNp
emVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlcikKLXsKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZC
TyA9PSBtX211bHRpc2FtcGxlRkJPKSB7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQo
R0xfUkVBRF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOwotICAgICAgICA6Omds
QmluZEZyYW1lYnVmZmVyRVhUKEdMX0RSQVdfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7Ci0gICAg
ICAgIDo6Z2xCbGl0RnJhbWVidWZmZXJFWFQoeCwgeSwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LCB4
LCB5LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHQsIEdMX0NPTE9SX0JVRkZFUl9CSVQsIEdMX0xJTkVB
Uik7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBt
X2Zibyk7Ci0gICAgfQotICAgIDo6Z2xDb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRl
cm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKLSAgICBpZiAobV9hdHRy
cy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQotICAgICAgICA6
OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZC
Tyk7CisgICAgcmV0dXJuIG11c3RSZXN0b3JlRkJPOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpjb3B5VGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
cmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQogewotICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwotICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcyAmJiBtX2JvdW5kRkJPID09IG1fbXVsdGlz
YW1wbGVGQk8pIHsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9SRUFEX0ZSQU1F
QlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZm
ZXJFWFQoR0xfRFJBV19GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKLSAgICAgICAgOjpnbEJsaXRG
cmFtZWJ1ZmZlckVYVCh4LCB5LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHQsIHgsIHksIHggKyB3aWR0
aCwgeSArIGhlaWdodCwgR0xfQ09MT1JfQlVGRkVSX0JJVCwgR0xfTElORUFSKTsKLSAgICAgICAg
OjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKLSAgICB9
Ci0gICAgOjpnbENvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZz
ZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOwotICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcyAmJiBt
X2JvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pCi0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZm
ZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsKLX0KLQotYm9vbCBH
cmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9ybTNET2JqZWN0IHByb2dy
YW0sIEdDM0R1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQotewotICAgIGlmICghcHJvZ3Jh
bSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBHTGlu
dCBtYXhVbmlmb3JtU2l6ZSA9IDA7Ci0gICAgOjpnbEdldFByb2dyYW1pdihwcm9ncmFtLCBHTF9B
Q1RJVkVfVU5JRk9STV9NQVhfTEVOR1RILCAmbWF4VW5pZm9ybVNpemUpOwotICAgIEdMY2hhciBu
YW1lW21heFVuaWZvcm1TaXplXTsgLy8gR0xfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCBpbmNs
dWRlcyBudWxsIHRlcm1pbmF0aW9uCi0gICAgR0xzaXplaSBuYW1lTGVuZ3RoID0gMDsKLSAgICBH
TGludCBzaXplID0gMDsKLSAgICBHTGVudW0gdHlwZSA9IDA7Ci0gICAgOjpnbEdldEFjdGl2ZVVu
aWZvcm0ocHJvZ3JhbSwgaW5kZXgsIG1heFVuaWZvcm1TaXplLCAmbmFtZUxlbmd0aCwgJnNpemUs
ICZ0eXBlLCBuYW1lKTsKLSAgICBpZiAoIW5hbWVMZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBpbmZvLm5hbWUgPSBTdHJpbmcobmFtZSwgbmFtZUxlbmd0aCk7Ci0gICAgaW5mby50
eXBlID0gdHlwZTsKLSAgICBpbmZvLnNpemUgPSBzaXplOwotICAgIHJldHVybiB0cnVlOwotfQot
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHMoR0MzRGludCB4LCBHQzNEaW50
IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBH
QzNEZW51bSB0eXBlLCB2b2lkKiBkYXRhKQotewotICAgIC8vIEZJWE1FOiByZW1vdmUgdGhlIHR3
byBnbEZsdXNoIGNhbGxzIHdoZW4gdGhlIGRyaXZlciBidWcgaXMgZml4ZWQsIGkuZS4sCi0gICAg
Ly8gYWxsIHByZXZpb3VzIHJlbmRlcmluZyBjYWxscyBzaG91bGQgYmUgZG9uZSBiZWZvcmUgcmVh
ZGluZyBwaXhlbHMuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpnbEZsdXNoKCk7
Ci0gICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBs
ZUZCTykgewotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX1JFQURfRlJBTUVCVUZG
RVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVY
VChHTF9EUkFXX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOwotICAgICAgICA6OmdsQmxpdEZyYW1l
YnVmZmVyRVhUKHgsIHksIHggKyB3aWR0aCwgeSArIGhlaWdodCwgeCwgeSwgeCArIHdpZHRoLCB5
ICsgaGVpZ2h0LCBHTF9DT0xPUl9CVUZGRVJfQklULCBHTF9MSU5FQVIpOwotICAgICAgICA6Omds
QmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOwotICAgICAgICA6
OmdsRmx1c2goKTsKLSAgICB9Ci0gICAgOjpnbFJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdo
dCwgZm9ybWF0LCB0eXBlLCBkYXRhKTsKLSAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgbV9i
b3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVy
RVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgOjpnbEJpbmRG
cmFtZWJ1ZmZlckVYVChHTF9SRUFEX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7
CisgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9EUkFXX0ZSQU1FQlVGRkVSX0VYVCwgbV9m
Ym8pOworICAgIDo6Z2xCbGl0RnJhbWVidWZmZXJFWFQoeCwgeSwgeCArIHdpZHRoLCB5ICsgaGVp
Z2h0LCB4LCB5LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHQsIEdMX0NPTE9SX0JVRkZFUl9CSVQsIEdM
X0xJTkVBUik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbmRlcmJ1ZmZlclN0b3Jh
Z2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdp
ZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9w
ZW5HTENvbW1vbi5jcHAKaW5kZXggZTY4YmJhN2ZkN2Y1MTlmZDc4YzE2OWE3MjkzYzliMmFkNTI2
MGRlOC4uZjhiZjFiZWEwZDUzODQwMjMwZmQ3MDg4ZjEwMjdmODJjODgwMWViMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4
dDNET3BlbkdMQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCkBAIC02MSw4ICs2MSwx
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZUF0dHJpYnV0ZXMoKQogewogICAg
IEV4dGVuc2lvbnMzRCogZXh0ZW5zaW9ucyA9IGdldEV4dGVuc2lvbnMoKTsKICAgICBpZiAobV9h
dHRycy5zdGVuY2lsKSB7Ci0gICAgICAgIGlmIChleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfRVhU
X3BhY2tlZF9kZXB0aF9zdGVuY2lsIikpIHsKLSAgICAgICAgICAgIGV4dGVuc2lvbnMtPmVuc3Vy
ZUVuYWJsZWQoIkdMX0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCIpOworICAgICAgICBib29sIHN1
cHBvcnRQYWNrZWREZXB0aFN0ZW5jaWxCdWZmZXIgPSBmYWxzZTsKKyAgICAgICAgaWYgKGlzR0xF
UzJDb21wbGlhbnQoKSkKKyAgICAgICAgICAgIHN1cHBvcnRQYWNrZWREZXB0aFN0ZW5jaWxCdWZm
ZXIgPSBleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsIik7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN1cHBvcnRQYWNrZWREZXB0aFN0ZW5jaWxCdWZm
ZXIgPSBleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfRVhUX3BhY2tlZF9kZXB0aF9zdGVuY2lsIik7
CisKKyAgICAgICAgaWYgKHN1cHBvcnRQYWNrZWREZXB0aFN0ZW5jaWxCdWZmZXIpIHsKKyAgICAg
ICAgICAgIGlmIChpc0dMRVMyQ29tcGxpYW50KCkpCisgICAgICAgICAgICAgICAgZXh0ZW5zaW9u
cy0+ZW5zdXJlRW5hYmxlZCgiR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsIik7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgZXh0ZW5zaW9ucy0+ZW5zdXJlRW5hYmxlZCgiR0xf
RVhUX3BhY2tlZF9kZXB0aF9zdGVuY2lsIik7CiAgICAgICAgICAgICAvLyBGb3JjZSBkZXB0aCBp
ZiBzdGVuY2lsIGlzIHRydWUuCiAgICAgICAgICAgICBtX2F0dHJzLmRlcHRoID0gdHJ1ZTsKICAg
ICAgICAgfSBlbHNlCkBAIC03NCw3ICs4Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZh
bGlkYXRlQXR0cmlidXRlcygpCiAgICAgICAgIGNvbnN0IGNoYXIqIHZlbmRvciA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgY2hhcio+KDo6Z2xHZXRTdHJpbmcoR0xfVkVORE9SKSk7CiAgICAgICAg
IGlmICghc3RkOjpzdHJzdHIodmVuZG9yLCAiTlZJRElBIikpCiAgICAgICAgICAgICBpc1ZhbGlk
VmVuZG9yID0gZmFsc2U7Ci0gICAgICAgIGlmICghaXNWYWxpZFZlbmRvciB8fCAhZXh0ZW5zaW9u
cy0+c3VwcG9ydHMoIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIikpCisgICAgICAg
IGlmICghaXNWYWxpZFZlbmRvciB8fCAhZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0FOR0xFX2Zy
YW1lYnVmZmVyX211bHRpc2FtcGxlIikgfHwgaXNHTEVTMkNvbXBsaWFudCgpKQogICAgICAgICAg
ICAgbV9hdHRycy5hbnRpYWxpYXMgPSBmYWxzZTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ZXh0ZW5zaW9ucy0+ZW5zdXJlRW5hYmxlZCgiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1w
bGUiKTsKQEAgLTE0MSw2ICsxNTAsMTQxIEBAIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGlj
c0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoRHJhd2luCiAgICAg
cmV0dXJuIGltYWdlRGF0YS5yZWxlYXNlKCk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnByZXBhcmVUZXh0dXJlKCkKK3sKKyAgICBpZiAobV9sYXllckNvbXBvc2l0ZWQpCisgICAgICAg
IHJldHVybjsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmIChtX2F0dHJzLmFu
dGlhbGlhcykKKyAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeSgwLCAwLCBt
X2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0KTsKKworICAgIDo6Z2xCaW5kRnJhbWVidWZm
ZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CisgICAgOjpnbEFjdGl2ZVRleHR1cmUo
R0xfVEVYVFVSRTApOworICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2NvbXBv
c2l0b3JUZXh0dXJlKTsKKyAgICA6OmdsQ29weVRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCwg
bV9pbnRlcm5hbENvbG9yRm9ybWF0LCAwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVp
Z2h0LCAwKTsKKyAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9ib3VuZFRleHR1
cmUwKTsKKyAgICA6OmdsQWN0aXZlVGV4dHVyZShtX2FjdGl2ZVRleHR1cmUpOworICAgIDo6Z2xC
aW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2JvdW5kRkJPKTsKKyAgICA6
OmdsRmluaXNoKCk7CisgICAgbV9sYXllckNvbXBvc2l0ZWQgPSB0cnVlOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpyZWFkUmVuZGVyaW5nUmVzdWx0cyh1bnNpZ25lZCBjaGFyICpwaXhl
bHMsIGludCBwaXhlbHNTaXplKQoreworICAgIGludCB0b3RhbEJ5dGVzID0gbV9jdXJyZW50V2lk
dGggKiBtX2N1cnJlbnRIZWlnaHQgKiA0OworICAgIGlmIChwaXhlbHNTaXplIDwgdG90YWxCeXRl
cykKKyAgICAgICAgcmV0dXJuOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBi
b29sIG11c3RSZXN0b3JlRkJPID0gZmFsc2U7CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7
CisgICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoMCwgMCwgbV9jdXJyZW50
V2lkdGgsIG1fY3VycmVudEhlaWdodCk7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQo
R0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CisgICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1
ZTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAobV9ib3VuZEZCTyAhPSBtX2ZibykgeworICAg
ICAgICAgICAgbXVzdFJlc3RvcmVGQk8gPSB0cnVlOworICAgICAgICAgICAgOjpnbEJpbmRGcmFt
ZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIEdMaW50IHBhY2tBbGlnbm1lbnQgPSA0OworICAgIGJvb2wgbXVzdFJlc3RvcmVQYWNr
QWxpZ25tZW50ID0gZmFsc2U7CisgICAgOjpnbEdldEludGVnZXJ2KEdMX1BBQ0tfQUxJR05NRU5U
LCAmcGFja0FsaWdubWVudCk7CisgICAgaWYgKHBhY2tBbGlnbm1lbnQgPiA0KSB7CisgICAgICAg
IDo6Z2xQaXhlbFN0b3JlaShHTF9QQUNLX0FMSUdOTUVOVCwgNCk7CisgICAgICAgIG11c3RSZXN0
b3JlUGFja0FsaWdubWVudCA9IHRydWU7CisgICAgfQorCisgICAgOjpnbFJlYWRQaXhlbHMoMCwg
MCwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCwgR0xfQkdSQSwgR0xfVU5TSUdORURf
SU5UXzhfOF84XzhfUkVWLCBwaXhlbHMpOworICAgIGlmIChpc0dMRVMyQ29tcGxpYW50KCkpIHsK
KyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbEJ5dGVzOyBpICs9IDQpCisgICAgICAg
ICAgICBzdGQ6OnN3YXAocGl4ZWxzW2ldLCBwaXhlbHNbaSArIDJdKTsgLy8gQ29udmVydCB0byBC
R1JBCisgICAgfQorCisgICAgaWYgKG11c3RSZXN0b3JlUGFja0FsaWdubWVudCkKKyAgICAgICAg
OjpnbFBpeGVsU3RvcmVpKEdMX1BBQ0tfQUxJR05NRU5ULCBwYWNrQWxpZ25tZW50KTsKKworICAg
IGlmIChtdXN0UmVzdG9yZUZCTykKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9G
UkFNRUJVRkZFUl9FWFQsIG1fYm91bmRGQk8pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICBpZiAoIXBsYXRmb3JtR3Jh
cGhpY3NDb250ZXh0M0QoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHdpZHRoID09IG1f
Y3VycmVudFdpZHRoICYmIGhlaWdodCA9PSBtX2N1cnJlbnRIZWlnaHQpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fY3VycmVudFdpZHRoID0gd2lkdGg7CisgICAgbV9jdXJyZW50SGVpZ2h0ID0g
aGVpZ2h0OworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgdmFsaWRhdGVBdHRyaWJ1
dGVzKCk7CisKKyAgICBib29sIG11c3RSZXN0b3JlRkJPID0gcmVzaXplRkJPcyh3aWR0aCwgaGVp
Z2h0KTsKKworICAgIC8vIEluaXRpYWxpemUgcmVuZGVyYnVmZmVycyB0byAwLgorICAgIEdMZmxv
YXQgY2xlYXJDb2xvcltdID0gezAsIDAsIDAsIDB9LCBjbGVhckRlcHRoID0gMDsKKyAgICBHTGlu
dCBjbGVhclN0ZW5jaWwgPSAwOworICAgIEdMYm9vbGVhbiBjb2xvck1hc2tbXSA9IHtHTF9UUlVF
LCBHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFfSwgZGVwdGhNYXNrID0gR0xfVFJVRTsKKyAgICBH
THVpbnQgc3RlbmNpbE1hc2sgPSAweGZmZmZmZmZmOworICAgIEdMYm9vbGVhbiBpc1NjaXNzb3JF
bmFibGVkID0gR0xfRkFMU0U7CisgICAgR0xib29sZWFuIGlzRGl0aGVyRW5hYmxlZCA9IEdMX0ZB
TFNFOworICAgIEdMYml0ZmllbGQgY2xlYXJNYXNrID0gR0xfQ09MT1JfQlVGRkVSX0JJVDsKKyAg
ICA6OmdsR2V0RmxvYXR2KEdMX0NPTE9SX0NMRUFSX1ZBTFVFLCBjbGVhckNvbG9yKTsKKyAgICA6
OmdsQ2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKKyAgICA6OmdsR2V0Qm9vbGVhbnYoR0xfQ09MT1Jf
V1JJVEVNQVNLLCBjb2xvck1hc2spOworICAgIDo6Z2xDb2xvck1hc2soR0xfVFJVRSwgR0xfVFJV
RSwgR0xfVFJVRSwgR0xfVFJVRSk7CisgICAgaWYgKG1fYXR0cnMuZGVwdGgpIHsKKyAgICAgICAg
OjpnbEdldEZsb2F0dihHTF9ERVBUSF9DTEVBUl9WQUxVRSwgJmNsZWFyRGVwdGgpOworICAgICAg
ICA6OmdsQ2xlYXJEZXB0aCgxKTsKKyAgICAgICAgOjpnbEdldEJvb2xlYW52KEdMX0RFUFRIX1dS
SVRFTUFTSywgJmRlcHRoTWFzayk7CisgICAgICAgIDo6Z2xEZXB0aE1hc2soR0xfVFJVRSk7Cisg
ICAgICAgIGNsZWFyTWFzayB8PSBHTF9ERVBUSF9CVUZGRVJfQklUOworICAgIH0KKyAgICBpZiAo
bV9hdHRycy5zdGVuY2lsKSB7CisgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9TVEVOQ0lMX0NM
RUFSX1ZBTFVFLCAmY2xlYXJTdGVuY2lsKTsKKyAgICAgICAgOjpnbENsZWFyU3RlbmNpbCgwKTsK
KyAgICAgICAgOjpnbEdldEludGVnZXJ2KEdMX1NURU5DSUxfV1JJVEVNQVNLLCByZWludGVycHJl
dF9jYXN0PEdMaW50Kj4oJnN0ZW5jaWxNYXNrKSk7CisgICAgICAgIDo6Z2xTdGVuY2lsTWFza1Nl
cGFyYXRlKEdMX0ZST05ULCAweGZmZmZmZmZmKTsKKyAgICAgICAgY2xlYXJNYXNrIHw9IEdMX1NU
RU5DSUxfQlVGRkVSX0JJVDsKKyAgICB9CisgICAgaXNTY2lzc29yRW5hYmxlZCA9IDo6Z2xJc0Vu
YWJsZWQoR0xfU0NJU1NPUl9URVNUKTsKKyAgICA6OmdsRGlzYWJsZShHTF9TQ0lTU09SX1RFU1Qp
OworICAgIGlzRGl0aGVyRW5hYmxlZCA9IDo6Z2xJc0VuYWJsZWQoR0xfRElUSEVSKTsKKyAgICA6
OmdsRGlzYWJsZShHTF9ESVRIRVIpOworCisgICAgOjpnbENsZWFyKGNsZWFyTWFzayk7CisKKyAg
ICA6OmdsQ2xlYXJDb2xvcihjbGVhckNvbG9yWzBdLCBjbGVhckNvbG9yWzFdLCBjbGVhckNvbG9y
WzJdLCBjbGVhckNvbG9yWzNdKTsKKyAgICA6OmdsQ29sb3JNYXNrKGNvbG9yTWFza1swXSwgY29s
b3JNYXNrWzFdLCBjb2xvck1hc2tbMl0sIGNvbG9yTWFza1szXSk7CisgICAgaWYgKG1fYXR0cnMu
ZGVwdGgpIHsKKyAgICAgICAgOjpnbENsZWFyRGVwdGgoY2xlYXJEZXB0aCk7CisgICAgICAgIDo6
Z2xEZXB0aE1hc2soZGVwdGhNYXNrKTsKKyAgICB9CisgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkg
eworICAgICAgICA6OmdsQ2xlYXJTdGVuY2lsKGNsZWFyU3RlbmNpbCk7CisgICAgICAgIDo6Z2xT
dGVuY2lsTWFza1NlcGFyYXRlKEdMX0ZST05ULCBzdGVuY2lsTWFzayk7CisgICAgfQorICAgIGlm
IChpc1NjaXNzb3JFbmFibGVkKQorICAgICAgICA6OmdsRW5hYmxlKEdMX1NDSVNTT1JfVEVTVCk7
CisgICAgZWxzZQorICAgICAgICA6OmdsRGlzYWJsZShHTF9TQ0lTU09SX1RFU1QpOworICAgIGlm
IChpc0RpdGhlckVuYWJsZWQpCisgICAgICAgIDo6Z2xFbmFibGUoR0xfRElUSEVSKTsKKyAgICBl
bHNlCisgICAgICAgIDo6Z2xEaXNhYmxlKEdMX0RJVEhFUik7CisKKyAgICBpZiAobXVzdFJlc3Rv
cmVGQk8pCisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhU
LCBtX2JvdW5kRkJPKTsKKworICAgIDo6Z2xGbHVzaCgpOworfQorCiBJbnRTaXplIEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIEludFNpemUobV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCk7CkBAIC0xNzQsNiAr
MzE4LDIwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRCdWZmZXIoR0MzRGVudW0gdGFy
Z2V0LCBQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKICAgICA6OmdsQmluZEJ1ZmZlcih0YXJnZXQs
IGJ1ZmZlcik7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRGcmFtZWJ1ZmZlcihH
QzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQoreworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIEdMdWludCBmYm87CisgICAgaWYgKGJ1ZmZlcikKKyAgICAgICAg
ZmJvID0gYnVmZmVyOworICAgIGVsc2UKKyAgICAgICAgZmJvID0gKG1fYXR0cnMuYW50aWFsaWFz
ID8gbV9tdWx0aXNhbXBsZUZCTyA6IG1fZmJvKTsKKyAgICBpZiAoZmJvICE9IG1fYm91bmRGQk8p
IHsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVCh0YXJnZXQsIGZibyk7CisgICAgICAg
IG1fYm91bmRGQk8gPSBmYm87CisgICAgfQorfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpi
aW5kUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCByZW5kZXJi
dWZmZXIpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CkBAIC0zMjYsNiArNDg0LDMwIEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBz
aGFkZXIpCiAgICAgQVNTRVJUKEdMQ29tcGlsZVN1Y2Nlc3MgPT0gR0xfVFJVRSk7CiB9CiAKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RpbnQgeCwgR0MzRGludCB5
LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyKQorewor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcyAmJiBt
X2JvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pIHsKKyAgICAgICAgcmVzb2x2ZU11bHRpc2Ft
cGxpbmdJZk5lY2Vzc2FyeSh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgOjpnbEJpbmRG
cmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICB9CisgICAgOjpn
bENvcHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0
aCwgaGVpZ2h0LCBib3JkZXIpOworICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcyAmJiBtX2JvdW5k
RkJPID09IG1fbXVsdGlzYW1wbGVGQk8pCisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQo
R0xfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6Y29weVRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxl
dmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGludCB4LCBHQzNEaW50
IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKK3sKKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBt
X211bHRpc2FtcGxlRkJPKSB7CisgICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3Nh
cnkoeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQo
R0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CisgICAgfQorICAgIDo6Z2xDb3B5VGV4U3ViSW1h
Z2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0
KTsKKyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211bHRpc2Ft
cGxlRkJPKQorICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VY
VCwgbV9tdWx0aXNhbXBsZUZCTyk7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmN1bGxG
YWNlKEdDM0RlbnVtIG1vZGUpCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CkBAIC00NTEs
NiArNjMzLDMyIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZUF0dHJpYihQbGF0
Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4CiAgICAgaW5mby5zaXplID0gc2l6
ZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0
aXZlVW5pZm9ybShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3Rp
dmVJbmZvJiBpbmZvKQoreworICAgIGlmICghcHJvZ3JhbSkgeworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEdMaW50IG1heFVuaWZvcm1TaXplID0gMDsK
KyAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0FDVElWRV9VTklGT1JNX01BWF9MRU5H
VEgsICZtYXhVbmlmb3JtU2l6ZSk7CisKKyAgICBPd25BcnJheVB0cjxHTGNoYXI+IG5hbWUgPSBh
ZG9wdEFycmF5UHRyKG5ldyBHTGNoYXJbbWF4VW5pZm9ybVNpemVdKTsgLy8gR0xfQUNUSVZFX1VO
SUZPUk1fTUFYX0xFTkdUSCBpbmNsdWRlcyBudWxsIHRlcm1pbmF0aW9uLgorICAgIEdMc2l6ZWkg
bmFtZUxlbmd0aCA9IDA7CisgICAgR0xpbnQgc2l6ZSA9IDA7CisgICAgR0xlbnVtIHR5cGUgPSAw
OworICAgIDo6Z2xHZXRBY3RpdmVVbmlmb3JtKHByb2dyYW0sIGluZGV4LCBtYXhVbmlmb3JtU2l6
ZSwgJm5hbWVMZW5ndGgsICZzaXplLCAmdHlwZSwgbmFtZS5nZXQoKSk7CisgICAgaWYgKCFuYW1l
TGVuZ3RoKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpbmZvLm5hbWUgPSBTdHJpbmco
bmFtZS5nZXQoKSwgbmFtZUxlbmd0aCk7CisgICAgaW5mby50eXBlID0gdHlwZTsKKyAgICBpbmZv
LnNpemUgPSBzaXplOworCisgICAgcmV0dXJuIHRydWU7Cit9CiAgICAgCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBH
QzNEc2l6ZWkgbWF4Q291bnQsIEdDM0RzaXplaSogY291bnQsIFBsYXRmb3JtM0RPYmplY3QqIHNo
YWRlcnMpCiB7CkBAIC01ODYsNiArNzk0LDIyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBv
bHlnb25PZmZzZXQoR0MzRGZsb2F0IGZhY3RvciwgR0MzRGZsb2F0IHVuaXRzKQogICAgIDo6Z2xQ
b2x5Z29uT2Zmc2V0KGZhY3RvciwgdW5pdHMpOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpyZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0Rz
aXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgdm9pZCogZGF0YSkK
K3sKKyAgICAvLyBGSVhNRTogcmVtb3ZlIHRoZSB0d28gZ2xGbHVzaCBjYWxscyB3aGVuIHRoZSBk
cml2ZXIgYnVnIGlzIGZpeGVkLCBpLmUuLAorICAgIC8vIGFsbCBwcmV2aW91cyByZW5kZXJpbmcg
Y2FsbHMgc2hvdWxkIGJlIGRvbmUgYmVmb3JlIHJlYWRpbmcgcGl4ZWxzLgorICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIDo6Z2xGbHVzaCgpOworICAgIGlmIChtX2F0dHJzLmFudGlhbGlh
cyAmJiBtX2JvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pIHsKKyAgICAgICAgcmVzb2x2ZU11
bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeSh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgOjpn
bEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICAgICAg
OjpnbEZsdXNoKCk7CisgICAgfQorICAgIDo6Z2xSZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWln
aHQsIGZvcm1hdCwgdHlwZSwgZGF0YSk7CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzICYmIG1f
Ym91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZl
ckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOworfQorCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIoKQogewogICAgIC8vIEZJWE1F
OiBUaGlzIGlzIG5vdCBpbXBsZW1lbnRlZCBvbiBkZXNrdG9wIE9wZW5HTC4gV2UgbmVlZCB0byBo
YXZlIGlmZGVmcyBmb3IgdGhlIGRpZmZlcmVudCBHTCB2YXJpYW50cy4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9w
ZW5HTEVTLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFw
aGljc0NvbnRleHQzRE9wZW5HTEVTLmNwcAppbmRleCA5MGZmNWEwYTM0NWJkZjY0Yjk3ODBkNDhk
YjY0MjUwNjY3ZGYzMTI1Li4xNmY2NWY1ODA0MTgzZWY3ZWU2ZGM0YWUxMzc3YThkYzdlYTVlOWRj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3Jh
cGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwCkBAIC0zOCw2MyAr
MzgsMTAxIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHModW5zaWduZWQgY2hhciAqcGl4ZWxzLCBpbnQgcGl4ZWxz
U2l6ZSkKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2l6ZUZCT3MoaW50IHdpZHRoLCBpbnQg
aGVpZ2h0KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnByZXBhcmVUZXh0dXJlKCkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5k
RnJhbWVidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIEdMdWludCBjb2xvckZvcm1hdCA9IDAsIHBpeGVs
RGF0YVR5cGUgPSAwOworICAgIGlmIChtX2F0dHJzLmFscGhhKSB7CisgICAgICAgIG1faW50ZXJu
YWxDb2xvckZvcm1hdCA9IEdMX1JHQkE7CisgICAgICAgIGNvbG9yRm9ybWF0ID0gR0xfUkdCQTsK
KyAgICAgICAgcGl4ZWxEYXRhVHlwZSA9IEdMX1VOU0lHTkVEX0JZVEU7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgbV9pbnRlcm5hbENvbG9yRm9ybWF0ID0gR0xfUkdCOworICAgICAgICBjb2xvckZv
cm1hdCA9IEdMX1JHQjsKKyAgICAgICAgcGl4ZWxEYXRhVHlwZSA9IEdMX1VOU0lHTkVEX1NIT1JU
XzVfNl81OworICAgIH0KKworICAgIGJvb2wgc3VwcG9ydFBhY2tlZERlcHRoU3RlbmNpbEJ1ZmZl
ciA9IGZhbHNlOworICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkgewor
ICAgICAgICAvLyBXZSBkb24ndCBhbGxvdyB0aGUgbG9naWMgd2hlcmUgc3RlbmNpbCBpcyByZXF1
aXJlZCBhbmQgZGVwdGggaXMgbm90LgorICAgICAgICAvLyBTZWUgR3JhcGhpY3NDb250ZXh0M0Q6
OnZhbGlkYXRlQXR0cmlidXRlcy4KKyAgICAgICAgRXh0ZW5zaW9uczNEKiBleHRlbnNpb25zID0g
Z2V0RXh0ZW5zaW9ucygpOworICAgICAgICBzdXBwb3J0UGFja2VkRGVwdGhTdGVuY2lsQnVmZmVy
ID0gZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCIpOwor
ICAgIH0KKworICAgIC8vIFJlc2l6ZSByZWd1bGFyIEZCTy4KKyAgICBib29sIG11c3RSZXN0b3Jl
RkJPID0gZmFsc2U7CisgICAgaWYgKG1fYm91bmRGQk8gIT0gbV9mYm8pIHsKKyAgICAgICAgbXVz
dFJlc3RvcmVGQk8gPSB0cnVlOworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZS
QU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAgIH0KKworICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9U
RVhUVVJFXzJELCBtX3RleHR1cmUpOworICAgIDo6Z2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQs
IDAsIG1faW50ZXJuYWxDb2xvckZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgY29sb3JGb3JtYXQs
IHBpeGVsRGF0YVR5cGUsIDApOworICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1cmUyREVYVChHTF9G
UkFNRUJVRkZFUl9FWFQsIEdMX0NPTE9SX0FUVEFDSE1FTlQwX0VYVCwgR0xfVEVYVFVSRV8yRCwg
bV90ZXh0dXJlLCAwKTsKKworICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2Nv
bXBvc2l0b3JUZXh0dXJlKTsKKyAgICA6OmdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBt
X2ludGVybmFsQ29sb3JGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGNvbG9yRm9ybWF0LCBHTF9V
TlNJR05FRF9CWVRFLCAwKTsKKyAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7
CisKKyAgICBpZiAoIW1fYXR0cnMuYW50aWFsaWFzICYmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9h
dHRycy5kZXB0aCkpIHsKKyAgICAgICAgLy8gVXNlIGEgMjQgYml0IGRlcHRoIGJ1ZmZlciB3aGVy
ZSB3ZSBrbm93IHdlIGhhdmUgaXQuCisgICAgICAgIGlmIChzdXBwb3J0UGFja2VkRGVwdGhTdGVu
Y2lsQnVmZmVyKSB7CisgICAgICAgICAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwg
bV9kZXB0aFN0ZW5jaWxCdWZmcik7CisgICAgICAgICAgICA6OmdsVGV4SW1hZ2UyRChHTF9URVhU
VVJFXzJELCAwLCBHTF9ERVBUSF9TVEVOQ0lMX09FUywgd2lkdGgsIGhlaWdodCwgMCwgR0xfREVQ
VEhfU1RFTkNJTF9PRVMsIEdMX1VOU0lHTkVEX0lOVF8yNF84X09FUywgMCk7CisgICAgICAgICAg
ICBpZiAobV9hdHRycy5zdGVuY2lsKQorICAgICAgICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclRl
eHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgR0xfU1RFTkNJTF9BVFRBQ0hNRU5ULCBHTF9URVhUVVJF
XzJELCBtX2RlcHRoU3RlbmNpbEJ1ZmZlciwgMCk7CisgICAgICAgICAgICBpZiAobV9hdHRycy5k
ZXB0aCkKKyAgICAgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVC
VUZGRVIsIEdMX0RFUFRIX0FUVEFDSE1FTlQsIEdMX1RFWFRVUkVfMkQsIG1fZGVwdGhTdGVuY2ls
QnVmZmVyLCAwKTsKKyAgICAgICAgICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAw
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChtX2F0dHJpYnV0ZXMuc3RlbmNp
bCkgeworICAgICAgICAgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJV
RkZFUl9FWFQsIG1fc3RlbmNpbEJ1ZmZlcik7CisgICAgICAgICAgICAgICAgOjpnbFJlbmRlcmJ1
ZmZlclN0b3JhZ2VFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgR0xfU1RFTkNJTF9JTkRFWDgsIHdp
ZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZl
ckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX1NURU5DSUxfQVRUQUNITUVOVF9FWFQsIEdMX1JF
TkRFUkJVRkZFUl9FWFQsIG1fc3RlbmNpbEJ1ZmZlcik7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAobV9hdHRyaWJ1dGVzLmRlcHRoKSB7CisgICAgICAgICAgICAgICAgOjpnbEJpbmRS
ZW5kZXJidWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aEJ1ZmZlcik7CisgICAg
ICAgICAgICAgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VFWFQoR0xfUkVOREVSQlVGRkVSX0VY
VCwgR0xfREVQVEhfQ09NUE9ORU5UMTYsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgICAg
IDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0RF
UFRIX0FUVEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBtX2RlcHRoQnVmZmVyKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JF
TkRFUkJVRkZFUl9FWFQsIDApOworICAgICAgICB9CisgICAgfQorICAgIGlmIChnbENoZWNrRnJh
bWVidWZmZXJTdGF0dXNFWFQoR0xfRlJBTUVCVUZGRVJfRVhUKSAhPSBHTF9GUkFNRUJVRkZFUl9D
T01QTEVURV9FWFQpIHsKKyAgICAgICAgLy8gRklYTUU6IGNsZWFudXAKKyAgICAgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gbXVzdFJlc3RvcmVGQk87CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RpbnQgeCwgR0MzRGludCB5
LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlU
ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zm
c2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lk
dGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9v
bCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9ybTNET2JqZWN0IHBy
b2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci19Ci0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVscyhHQzNE
aW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNE
ZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIHZvaWQqIGRhdGEpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpyZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KEdDM0RpbnQgeCwgR0MzRGlu
dCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCiB7CisgICAgLy8gRklYTUU6
IFdlIGRvbid0IHN1cHBvcnQgYW50aWFsaWFzaW5nIHlldC4KICAgICBub3RJbXBsZW1lbnRlZCgp
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZW5kZXJidWZmZXJTdG9yYWdlKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0Mz
RHNpemVpIGhlaWdodCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlRVhUKHRhcmdldCwgaW50ZXJu
YWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRJbnRlZ2VydihHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCiB7Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsR2V0SW50ZWdl
cnYocG5hbWUsIHZhbHVlKTsKIH0KIAogYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2Uy
RChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0
LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNE
ZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKIHsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQorICAgIGlmICh3aWR0aCAm
JiBoZWlnaHQgJiYgIXBpeGVscykgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElE
X1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICA6OmdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CisgICAgcmV0
dXJuIHRydWU7CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125490</attachid>
            <date>2012-02-04 03:34:09 -0800</date>
            <delta_ts>2012-02-06 09:50:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76248-20120204203406.patch</filename>
            <type>text/plain</type>
            <size>38980</size>
            <attacher name="ChangSeok Oh">kevin.cs.oh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2NzM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjRmMDFiYzQ2N2M3Zjgx
MWE1ZmEzYzg4OTYzOTE3NzhlZGQ2ZmE3Ni4uYzJlZGZmZmFkN2E1OTUxMWNkNzhjYTBiMDYzZWI4
ZWQ2NDM5NTY4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY3IEBACisyMDEyLTAyLTA0ICBDaGFu
Z1Nlb2sgT2ggIDxzaGl2YW1pZG93QGdtYWlsLmNvbT4KKworICAgICAgICBJbml0aWFsIGltcGxl
bWVudGF0aW9uIG9mIEdyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjI0OAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudGVkIEFQSXMgaW4gR3Jh
cGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAgYWNjb3JkaW5nIHRvIHRoZSBHTEVTIHNwZWMuIHJv
dWdobHkuCisgICAgICAgIEJ1dCBubyB3YXkgdG8gcnVuIHRoZXNlIGNvZGVzIHJpZ2h0IG5vdywg
YmVjYXVzZSB0aGV5IG5lZWQgYW4gZXh0cmEgcG9ydAorICAgICAgICBzcGVjaWZpYyBpbXBsZW1l
bnRhdGlvbiB0byB3b3JrLiBJIHBsYW4gdG8gYWRkIHRoZXNlIGV4dHJhIGNvZGVzIGZvciB0aGUg
R1RLIHBvcnQKKyAgICAgICAgaW4gdGhlIG5leHQgcGF0Y2guIEFuZCBhbHNvIHRoaXMgcGF0Y2gg
ZG9lc24ndCBzdXBwb3J0IGFudGktYWxpYXNpbmcgeWV0LiBBbm90aGVyIGJ1ZworICAgICAgICB3
aWxsIGRlYWwgd2l0aCBpdC4KKyAgICAgICAgTW92ZWQgc29tZSBBUElzIGluIEdyYXBoaWNzQ29u
dGV4dDNET3BlbkdMRVMuY3BwIHRvIEdyYXBoaWNzQ29udGV4dDNEQ29tbW9uLmNwcC4KKyAgICAg
ICAgSXQgbG9va3MgaXQgY291bGQgYmUgc2hhcmVkIGJldHdlZW4gZ2wgYW5kIGdsZXMuCisgICAg
ICAgIFR3byBoZWxwZXIgZnVuY3Rpb25zIGFyZSBhZGRlZCB0byBhdm9pZCBjb2RlIGR1cGxpY2F0
aW9uIGluIEdyYXBoaWNzQ29udGV4dDNELgorICAgICAgICBBZGRlZCBhIG1pc3NpbmcgcGVyaW9k
IGF0IHRoZSBlbmQgb2YgY29tbWVudCBsaW5lcy4KKworICAgICAgICBObyBuZXcgdGVzdHMgcmVx
dWlyZWQuCisgICAgICAgIFdlJ2xsIGJlIGFibGUgdG8gdmVyaWZ5IHRoaXMgcGF0Y2ggYnkgdXNp
bmcgdGhlIGV4aXN0aW5nIHdlYmdsIHRlc3QgY2FzZXMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oOiBBZGQgYnVpbGQgZmxhZyB0byBhY2Nlc3Mgc3Rl
bmNpbEJ1ZmZlciAmIGRlcHRoQnVmZmVyIGZvciBnbGVzLgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdM
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlRkJPcyk6
IEhlbHBlciBmdW5jdGlvbiBleHRyYWN0ZWQgZnJvbSBHQzNEOjpyZXNoYXBlIHRvIHJlc2l6ZSBy
ZWd1bGFyICYgbXVsdGlzYW1wbGVkIEZCT3MuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6cmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeSk6IEhlbHBlciBmdW5jdGlv
biB0byByZXNvbHZlIG11bHRpc2FtcGxpbmcuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZUF0dHJpYnV0ZXMpOiBBZGQgY29uZGl0aW9u
IHRvIGRpc2FibGUgYW50aWFsaWFzaW5nICYgcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uIGZv
ciBHTEVTLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVy
aW5nUmVzdWx0c1RvQ2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSk6CisKKyAgICAgICAgRm9sbG93aW5n
IEFQSXMgbG9va2VkIHNoYXJlYWJsZSBzbyB0aGF0IG1vdmVkIGludG8gR0MzRE9wZW5HTENvbW1v
bi5jcHAuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cHJlcGFyZVRleHR1
cmUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OnJlc2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OmJpbmRGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
Y29weVRleEltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNv
cHlUZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRBY3RpdmVVbmlmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpy
ZWFkUGl4ZWxzKToKKworICAgICAgICBBZGRlZCBhIG1pc3NpbmcgcGVyaW9kIGF0IHRoZSBlbmQg
b2YgY29tbWVudCBsaW5lLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNv
bXBpbGVTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEFj
dGl2ZUF0dHJpYik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9y
bTJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNmdik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRmdik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJpdik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNpdik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6dGV4U3ViSW1hZ2UyRCk6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZUZCT3MpOiBTYW1lIHdpdGggdGhlIGFib3Zl
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlc29sdmVNdWx0aXNhbXBs
aW5nSWZOZWNlc3NhcnkpOiBTYW1lIHdpdGggdGhlIGFib3ZlLgorCisgICAgICAgIEJyaWVmIGV4
cGxhbmF0aW9uIGFib3V0IHdoYXQgdGhlIGRpZmZlcmVuY2VzIGFyZSBiZXR3ZWVuIGdsIGFuZCBn
bGVzLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnJlbmRlcmJ1ZmZlclN0
b3JhZ2UpOiBSZW1vdmVkIGNvZGVzIGZvciBjb252ZXJ0aW5nIEdMRVMgcGFyYW1ldGVyIHRvIEdM
IHBhcmFtZXRlci4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRl
Z2Vydik6IFJlbW92ZWQgY29kZXMgdGhhdCBlbXVsYXRlIEdMRVMuCisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRCk6IFJlbW92ZWQgY29kZXMgZm9yIGNvbnZl
cnRpbmcgR0xFUyBwYXJhbWV0ZXIgdG8gR0wgcGFyYW1ldGVyLgorCiAyMDEyLTAyLTA0ICBFbWls
IEEgRWtsdW5kICA8ZWFlQGNocm9taXVtLm9yZz4KIAogICAgICAgICBDb252ZXJ0IFJlbmRlclRo
ZW1lIG92ZXIgdG8gbmV3IGxheW91dCBhYnN0cmFjdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKaW5kZXggMzRjNTQ5YWI0
ODczYzJiMTllZWUzNTdmM2YyMmZiNDVkZWU3NTg0Mi4uYjI5MTA0ZjFmNDVjMmE2MzlmMWFiY2Zi
N2MwZGY1N2RjNWYxZGIwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCkBAIC0yNiw3ICsyNiw2IEBACiAjaWZuZGVmIEdy
YXBoaWNzQ29udGV4dDNEX2gKICNkZWZpbmUgR3JhcGhpY3NDb250ZXh0M0RfaAogCi0jaW5jbHVk
ZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNpbmNsdWRlICJHcmFw
aGljc1R5cGVzM0QuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgpAQCAtOTMsNiArOTIs
OCBAQCBjbGFzcyBIb3N0V2luZG93OwogY2xhc3MgSW1hZ2U7CiBjbGFzcyBJbWFnZUJ1ZmZlcjsK
IGNsYXNzIEltYWdlRGF0YTsKK2NsYXNzIEludFJlY3Q7CitjbGFzcyBJbnRTaXplOwogI2lmIFVT
RShDQUlSTykKIGNsYXNzIFBsYXRmb3JtQ29udGV4dENhaXJvOwogI2VuZGlmCkBAIC05MDUsNiAr
OTA2LDkgQEAgcHVibGljOgogICAgIHZvaWQgcmVhZFJlbmRlcmluZ1Jlc3VsdHModW5zaWduZWQg
Y2hhciogcGl4ZWxzLCBpbnQgcGl4ZWxzU2l6ZSk7CiAjZW5kaWYKIAorICAgIGJvb2wgcmVzaGFw
ZUZCT3MoY29uc3QgSW50U2l6ZSYpOworICAgIHZvaWQgcmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5l
Y2Vzc2FyeShjb25zdCBJbnRSZWN0Jik7CisKICAgICBpbnQgbV9jdXJyZW50V2lkdGgsIG1fY3Vy
cmVudEhlaWdodDsKICAgICBib29sIGlzUmVzb3VyY2VTYWZlKCk7CiAKQEAgLTkzOSw2ICs5NDMs
MTAgQEAgcHVibGljOgogICAgIEdDM0R1aW50IG1fZGVwdGhCdWZmZXI7CiAgICAgR0MzRHVpbnQg
bV9zdGVuY2lsQnVmZmVyOwogI2Vsc2UKKyNpZiBVU0UoT1BFTkdMX0VTXzIpCisgICAgR0MzRHVp
bnQgbV9kZXB0aEJ1ZmZlcjsKKyAgICBHQzNEdWludCBtX3N0ZW5jaWxCdWZmZXI7CisjZW5kaWYK
ICAgICBHQzNEdWludCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcjsKICNlbmRpZgogICAgIGJvb2wgbV9s
YXllckNvbXBvc2l0ZWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNwcAppbmRl
eCA0N2E0MWM2ZDAwMjY1YjBjYmE5YTQ0ZmZjYzQxMTA2YWU5YmEwNzc1Li5iYWI3ZGJlMjEwZjEw
ZTMwZTM3YTZkNTVhYWIzYWUxZWI4NGViZTE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0wuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQz
RE9wZW5HTC5jcHAKQEAgLTMwLDYgKzMwLDggQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQz
RC5oIgogCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNET3BlbkdMLmgiCisjaW5jbHVkZSAiSW50UmVj
dC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgog
CiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtNDMsNTggKzQ1LDEwIEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHModW5z
aWduZWQgY2hhciAqcGl4ZWxzLCBpbnQgcGl4ZWxzU2l6ZSkKK2Jvb2wgR3JhcGhpY3NDb250ZXh0
M0Q6OnJlc2hhcGVGQk9zKGNvbnN0IEludFNpemUmIHNpemUpCiB7Ci0gICAgaWYgKHBpeGVsc1Np
emUgPCBtX2N1cnJlbnRXaWR0aCAqIG1fY3VycmVudEhlaWdodCAqIDQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgYm9vbCBtdXN0UmVzdG9yZUZC
TyA9IGZhbHNlOwotICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykgewotICAgICAgICA6OmdsQmlu
ZEZyYW1lYnVmZmVyRVhUKEdMX1JFQURfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJP
KTsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9EUkFXX0ZSQU1FQlVGRkVSX0VY
VCwgbV9mYm8pOwotICAgICAgICA6OmdsQmxpdEZyYW1lYnVmZmVyRVhUKDAsIDAsIG1fY3VycmVu
dFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQsIDAsIDAsIG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRI
ZWlnaHQsIEdMX0NPTE9SX0JVRkZFUl9CSVQsIEdMX0xJTkVBUik7Ci0gICAgICAgIDo6Z2xCaW5k
RnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7Ci0gICAgICAgIG11c3RS
ZXN0b3JlRkJPID0gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAobV9ib3VuZEZCTyAh
PSBtX2ZibykgewotICAgICAgICAgICAgbXVzdFJlc3RvcmVGQk8gPSB0cnVlOwotICAgICAgICAg
ICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIEdMaW50IHBhY2tBbGlnbm1lbnQgPSA0OwotICAgIGJvb2wg
bXVzdFJlc3RvcmVQYWNrQWxpZ25tZW50ID0gZmFsc2U7Ci0gICAgOjpnbEdldEludGVnZXJ2KEdM
X1BBQ0tfQUxJR05NRU5ULCAmcGFja0FsaWdubWVudCk7Ci0gICAgaWYgKHBhY2tBbGlnbm1lbnQg
PiA0KSB7Ci0gICAgICAgIDo6Z2xQaXhlbFN0b3JlaShHTF9QQUNLX0FMSUdOTUVOVCwgNCk7Ci0g
ICAgICAgIG11c3RSZXN0b3JlUGFja0FsaWdubWVudCA9IHRydWU7Ci0gICAgfQotCi0gICAgOjpn
bFJlYWRQaXhlbHMoMCwgMCwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCwgR0xfQkdS
QSwgR0xfVU5TSUdORURfSU5UXzhfOF84XzhfUkVWLCBwaXhlbHMpOwotCi0gICAgaWYgKG11c3RS
ZXN0b3JlUGFja0FsaWdubWVudCkKLSAgICAgICAgOjpnbFBpeGVsU3RvcmVpKEdMX1BBQ0tfQUxJ
R05NRU5ULCBwYWNrQWxpZ25tZW50KTsKLQotICAgIGlmIChtdXN0UmVzdG9yZUZCTykKLSAgICAg
ICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fYm91bmRGQk8p
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhl
aWdodCkKLXsKLSAgICBpZiAoIXBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKHdpZHRoID09IG1fY3VycmVudFdpZHRoICYmIGhlaWdodCA9PSBt
X2N1cnJlbnRIZWlnaHQpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBtX2N1cnJlbnRXaWR0
aCA9IHdpZHRoOwotICAgIG1fY3VycmVudEhlaWdodCA9IGhlaWdodDsKLSAgICAKLSAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKLSAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKLQorICAgIGNvbnN0
IGludCB3aWR0aCA9IHNpemUud2lkdGgoKTsKKyAgICBjb25zdCBpbnQgaGVpZ2h0ID0gc2l6ZS5o
ZWlnaHQoKTsKICAgICBHTHVpbnQgY29sb3JGb3JtYXQsIGludGVybmFsRGVwdGhTdGVuY2lsRm9y
bWF0ID0gMDsKICAgICBpZiAobV9hdHRycy5hbHBoYSkgewogICAgICAgICBtX2ludGVybmFsQ29s
b3JGb3JtYXQgPSBHTF9SR0JBODsKQEAgLTEwOCw3ICs2Miw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogICAgICAgICAvLyBTZWUgR3Jh
cGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlQXR0cmlidXRlcy4KIAogICAgICAgICBFeHRlbnNpb25z
M0QqIGV4dGVuc2lvbnMgPSBnZXRFeHRlbnNpb25zKCk7Ci0gICAgICAgIC8vIFVzZSBhIDI0IGJp
dCBkZXB0aCBidWZmZXIgd2hlcmUgd2Uga25vdyB3ZSBoYXZlIGl0CisgICAgICAgIC8vIFVzZSBh
IDI0IGJpdCBkZXB0aCBidWZmZXIgd2hlcmUgd2Uga25vdyB3ZSBoYXZlIGl0LgogICAgICAgICBp
ZiAoZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCIpKQog
ICAgICAgICAgICAgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQgPSBHTF9ERVBUSDI0X1NURU5D
SUw4X0VYVDsKICAgICAgICAgZWxzZQpAQCAtMTE3LDcgKzcxLDcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAKICAgICBib29sIG11c3RS
ZXN0b3JlRkJPID0gZmFsc2U7CiAKLSAgICAvLyByZXNpemUgbXVsdGlzYW1wbGUgRkJPCisgICAg
Ly8gUmVzaXplIG11bHRpc2FtcGxlIEZCTy4KICAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsK
ICAgICAgICAgR0xpbnQgbWF4U2FtcGxlQ291bnQ7CiAgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihH
TF9NQVhfU0FNUExFU19FWFQsICZtYXhTYW1wbGVDb3VudCk7CkBAIC0xNzcsMTY2ICsxMzEsMTQg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQp
CiAgICAgICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IGZhbHNlOwogICAgIH0KIAotICAgIC8vIElu
aXRpYWxpemUgcmVuZGVyYnVmZmVycyB0byAwLgotICAgIEdMZmxvYXQgY2xlYXJDb2xvcltdID0g
ezAsIDAsIDAsIDB9LCBjbGVhckRlcHRoID0gMDsKLSAgICBHTGludCBjbGVhclN0ZW5jaWwgPSAw
OwotICAgIEdMYm9vbGVhbiBjb2xvck1hc2tbXSA9IHtHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVF
LCBHTF9UUlVFfSwgZGVwdGhNYXNrID0gR0xfVFJVRTsKLSAgICBHTHVpbnQgc3RlbmNpbE1hc2sg
PSAweGZmZmZmZmZmOwotICAgIEdMYm9vbGVhbiBpc1NjaXNzb3JFbmFibGVkID0gR0xfRkFMU0U7
Ci0gICAgR0xib29sZWFuIGlzRGl0aGVyRW5hYmxlZCA9IEdMX0ZBTFNFOwotICAgIEdMYml0Zmll
bGQgY2xlYXJNYXNrID0gR0xfQ09MT1JfQlVGRkVSX0JJVDsKLSAgICA6OmdsR2V0RmxvYXR2KEdM
X0NPTE9SX0NMRUFSX1ZBTFVFLCBjbGVhckNvbG9yKTsKLSAgICA6OmdsQ2xlYXJDb2xvcigwLCAw
LCAwLCAwKTsKLSAgICA6OmdsR2V0Qm9vbGVhbnYoR0xfQ09MT1JfV1JJVEVNQVNLLCBjb2xvck1h
c2spOwotICAgIDo6Z2xDb2xvck1hc2soR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJV
RSk7Ci0gICAgaWYgKG1fYXR0cnMuZGVwdGgpIHsKLSAgICAgICAgOjpnbEdldEZsb2F0dihHTF9E
RVBUSF9DTEVBUl9WQUxVRSwgJmNsZWFyRGVwdGgpOwotICAgICAgICA6OmdsQ2xlYXJEZXB0aCgx
KTsKLSAgICAgICAgOjpnbEdldEJvb2xlYW52KEdMX0RFUFRIX1dSSVRFTUFTSywgJmRlcHRoTWFz
ayk7Ci0gICAgICAgIDo6Z2xEZXB0aE1hc2soR0xfVFJVRSk7Ci0gICAgICAgIGNsZWFyTWFzayB8
PSBHTF9ERVBUSF9CVUZGRVJfQklUOwotICAgIH0KLSAgICBpZiAobV9hdHRycy5zdGVuY2lsKSB7
Ci0gICAgICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9TVEVOQ0lMX0NMRUFSX1ZBTFVFLCAmY2xlYXJT
dGVuY2lsKTsKLSAgICAgICAgOjpnbENsZWFyU3RlbmNpbCgwKTsKLSAgICAgICAgOjpnbEdldElu
dGVnZXJ2KEdMX1NURU5DSUxfV1JJVEVNQVNLLCByZWludGVycHJldF9jYXN0PEdMaW50Kj4oJnN0
ZW5jaWxNYXNrKSk7Ci0gICAgICAgIDo6Z2xTdGVuY2lsTWFza1NlcGFyYXRlKEdMX0ZST05ULCAw
eGZmZmZmZmZmKTsKLSAgICAgICAgY2xlYXJNYXNrIHw9IEdMX1NURU5DSUxfQlVGRkVSX0JJVDsK
LSAgICB9Ci0gICAgaXNTY2lzc29yRW5hYmxlZCA9IDo6Z2xJc0VuYWJsZWQoR0xfU0NJU1NPUl9U
RVNUKTsKLSAgICA6OmdsRGlzYWJsZShHTF9TQ0lTU09SX1RFU1QpOwotICAgIGlzRGl0aGVyRW5h
YmxlZCA9IDo6Z2xJc0VuYWJsZWQoR0xfRElUSEVSKTsKLSAgICA6OmdsRGlzYWJsZShHTF9ESVRI
RVIpOwotCi0gICAgOjpnbENsZWFyKGNsZWFyTWFzayk7Ci0KLSAgICA6OmdsQ2xlYXJDb2xvcihj
bGVhckNvbG9yWzBdLCBjbGVhckNvbG9yWzFdLCBjbGVhckNvbG9yWzJdLCBjbGVhckNvbG9yWzNd
KTsKLSAgICA6OmdsQ29sb3JNYXNrKGNvbG9yTWFza1swXSwgY29sb3JNYXNrWzFdLCBjb2xvck1h
c2tbMl0sIGNvbG9yTWFza1szXSk7Ci0gICAgaWYgKG1fYXR0cnMuZGVwdGgpIHsKLSAgICAgICAg
OjpnbENsZWFyRGVwdGgoY2xlYXJEZXB0aCk7Ci0gICAgICAgIDo6Z2xEZXB0aE1hc2soZGVwdGhN
YXNrKTsKLSAgICB9Ci0gICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkgewotICAgICAgICA6OmdsQ2xl
YXJTdGVuY2lsKGNsZWFyU3RlbmNpbCk7Ci0gICAgICAgIDo6Z2xTdGVuY2lsTWFza1NlcGFyYXRl
KEdMX0ZST05ULCBzdGVuY2lsTWFzayk7Ci0gICAgfQotICAgIGlmIChpc1NjaXNzb3JFbmFibGVk
KQotICAgICAgICA6OmdsRW5hYmxlKEdMX1NDSVNTT1JfVEVTVCk7Ci0gICAgZWxzZQotICAgICAg
ICA6OmdsRGlzYWJsZShHTF9TQ0lTU09SX1RFU1QpOwotICAgIGlmIChpc0RpdGhlckVuYWJsZWQp
Ci0gICAgICAgIDo6Z2xFbmFibGUoR0xfRElUSEVSKTsKLSAgICBlbHNlCi0gICAgICAgIDo6Z2xE
aXNhYmxlKEdMX0RJVEhFUik7Ci0KLSAgICBpZiAobXVzdFJlc3RvcmVGQk8pCi0gICAgICAgIDo6
Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2JvdW5kRkJPKTsKLQot
ICAgIDo6Z2xGbHVzaCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwcmVwYXJlVGV4
dHVyZSgpCi17Ci0gICAgaWYgKG1fbGF5ZXJDb21wb3NpdGVkKQotICAgICAgICByZXR1cm47Ci0g
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7Ci0g
ICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfUkVBRF9GUkFNRUJVRkZFUl9FWFQsIG1f
bXVsdGlzYW1wbGVGQk8pOwotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0RSQVdf
RlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7Ci0gICAgICAgIDo6Z2xCbGl0RnJhbWVidWZmZXJFWFQo
MCwgMCwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCwgMCwgMCwgbV9jdXJyZW50V2lk
dGgsIG1fY3VycmVudEhlaWdodCwgR0xfQ09MT1JfQlVGRkVSX0JJVCwgR0xfTElORUFSKTsKLSAg
ICB9Ci0gICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJv
KTsKLSAgICA6OmdsQWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCk7Ci0gICAgOjpnbEJpbmRUZXh0
dXJlKEdMX1RFWFRVUkVfMkQsIG1fY29tcG9zaXRvclRleHR1cmUpOwotICAgIDo6Z2xDb3B5VGV4
SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwLCBtX2ludGVybmFsQ29sb3JGb3JtYXQsIDAsIDAsIG1f
Y3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQsIDApOwotICAgIDo6Z2xCaW5kVGV4dHVyZShH
TF9URVhUVVJFXzJELCBtX2JvdW5kVGV4dHVyZTApOwotICAgIDo6Z2xBY3RpdmVUZXh0dXJlKG1f
YWN0aXZlVGV4dHVyZSk7Ci0gICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZF
Ul9FWFQsIG1fYm91bmRGQk8pOwotICAgIDo6Z2xGaW5pc2goKTsKLSAgICBtX2xheWVyQ29tcG9z
aXRlZCA9IHRydWU7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRGcmFtZWJ1ZmZl
cihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQotewotICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIEdMdWludCBmYm87Ci0gICAgaWYgKGJ1ZmZlcikKLSAgICAg
ICAgZmJvID0gYnVmZmVyOwotICAgIGVsc2UKLSAgICAgICAgZmJvID0gKG1fYXR0cnMuYW50aWFs
aWFzID8gbV9tdWx0aXNhbXBsZUZCTyA6IG1fZmJvKTsKLSAgICBpZiAoZmJvICE9IG1fYm91bmRG
Qk8pIHsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVCh0YXJnZXQsIGZibyk7Ci0gICAg
ICAgIG1fYm91bmRGQk8gPSBmYm87Ci0gICAgfQotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
Ojpjb3B5VGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVt
IGludGVybmFsZm9ybWF0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBH
QzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlcikKLXsKLSAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211bHRp
c2FtcGxlRkJPKSB7Ci0gICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfUkVBRF9GUkFN
RUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOwotICAgICAgICA6OmdsQmluZEZyYW1lYnVm
ZmVyRVhUKEdMX0RSQVdfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7Ci0gICAgICAgIDo6Z2xCbGl0
RnJhbWVidWZmZXJFWFQoeCwgeSwgeCArIHdpZHRoLCB5ICsgaGVpZ2h0LCB4LCB5LCB4ICsgd2lk
dGgsIHkgKyBoZWlnaHQsIEdMX0NPTE9SX0JVRkZFUl9CSVQsIEdMX0xJTkVBUik7Ci0gICAgICAg
IDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7Ci0gICAg
fQotICAgIDo6Z2xDb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwg
eCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKLSAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMg
JiYgbV9ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQotICAgICAgICA6OmdsQmluZEZyYW1l
YnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgcmV0
dXJuIG11c3RSZXN0b3JlRkJPOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4
U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNl
dCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRo
LCBHQzNEc2l6ZWkgaGVpZ2h0KQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVzb2x2ZU11bHRp
c2FtcGxpbmdJZk5lY2Vzc2FyeShjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwotICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcyAmJiBtX2JvdW5kRkJPID09
IG1fbXVsdGlzYW1wbGVGQk8pIHsKLSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9S
RUFEX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgICAgIDo6Z2xCaW5k
RnJhbWVidWZmZXJFWFQoR0xfRFJBV19GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKLSAgICAgICAg
OjpnbEJsaXRGcmFtZWJ1ZmZlckVYVCh4LCB5LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHQsIHgsIHks
IHggKyB3aWR0aCwgeSArIGhlaWdodCwgR0xfQ09MT1JfQlVGRkVSX0JJVCwgR0xfTElORUFSKTsK
LSAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJv
KTsKLSAgICB9Ci0gICAgOjpnbENvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZz
ZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOwotICAgIGlmIChtX2F0dHJzLmFudGlh
bGlhcyAmJiBtX2JvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pCi0gICAgICAgIDo6Z2xCaW5k
RnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsKLX0K
LQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9ybTNET2Jq
ZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQotewotICAgIGlm
ICghcHJvZ3JhbSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihJTlZBTElEX1ZBTFVFKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICBHTGludCBtYXhVbmlmb3JtU2l6ZSA9IDA7Ci0gICAgOjpnbEdldFByb2dyYW1pdihwcm9n
cmFtLCBHTF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RILCAmbWF4VW5pZm9ybVNpemUpOwotICAg
IEdMY2hhciBuYW1lW21heFVuaWZvcm1TaXplXTsgLy8gR0xfQUNUSVZFX1VOSUZPUk1fTUFYX0xF
TkdUSCBpbmNsdWRlcyBudWxsIHRlcm1pbmF0aW9uCi0gICAgR0xzaXplaSBuYW1lTGVuZ3RoID0g
MDsKLSAgICBHTGludCBzaXplID0gMDsKLSAgICBHTGVudW0gdHlwZSA9IDA7Ci0gICAgOjpnbEdl
dEFjdGl2ZVVuaWZvcm0ocHJvZ3JhbSwgaW5kZXgsIG1heFVuaWZvcm1TaXplLCAmbmFtZUxlbmd0
aCwgJnNpemUsICZ0eXBlLCBuYW1lKTsKLSAgICBpZiAoIW5hbWVMZW5ndGgpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBpbmZvLm5hbWUgPSBTdHJpbmcobmFtZSwgbmFtZUxlbmd0aCk7Ci0g
ICAgaW5mby50eXBlID0gdHlwZTsKLSAgICBpbmZvLnNpemUgPSBzaXplOwotICAgIHJldHVybiB0
cnVlOwotfQotCi0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHMoR0MzRGludCB4
LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0g
Zm9ybWF0LCBHQzNEZW51bSB0eXBlLCB2b2lkKiBkYXRhKQotewotICAgIC8vIEZJWE1FOiByZW1v
dmUgdGhlIHR3byBnbEZsdXNoIGNhbGxzIHdoZW4gdGhlIGRyaXZlciBidWcgaXMgZml4ZWQsIGku
ZS4sCi0gICAgLy8gYWxsIHByZXZpb3VzIHJlbmRlcmluZyBjYWxscyBzaG91bGQgYmUgZG9uZSBi
ZWZvcmUgcmVhZGluZyBwaXhlbHMuCi0gICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgOjpn
bEZsdXNoKCk7Ci0gICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzICYmIG1fYm91bmRGQk8gPT0gbV9t
dWx0aXNhbXBsZUZCTykgewotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX1JFQURf
RlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsKLSAgICAgICAgOjpnbEJpbmRGcmFt
ZWJ1ZmZlckVYVChHTF9EUkFXX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOwotICAgICAgICA6Omds
QmxpdEZyYW1lYnVmZmVyRVhUKHgsIHksIHggKyB3aWR0aCwgeSArIGhlaWdodCwgeCwgeSwgeCAr
IHdpZHRoLCB5ICsgaGVpZ2h0LCBHTF9DT0xPUl9CVUZGRVJfQklULCBHTF9MSU5FQVIpOwotICAg
ICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOwot
ICAgICAgICA6OmdsRmx1c2goKTsKLSAgICB9Ci0gICAgOjpnbFJlYWRQaXhlbHMoeCwgeSwgd2lk
dGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhKTsKLSAgICBpZiAobV9hdHRycy5hbnRpYWxp
YXMgJiYgbV9ib3VuZEZCTyA9PSBtX211bHRpc2FtcGxlRkJPKQotICAgICAgICA6OmdsQmluZEZy
YW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7CisgICAg
OjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9SRUFEX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNh
bXBsZUZCTyk7CisgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9EUkFXX0ZSQU1FQlVGRkVS
X0VYVCwgbV9mYm8pOworICAgIDo6Z2xCbGl0RnJhbWVidWZmZXJFWFQocmVjdC54KCksIHJlY3Qu
eSgpLCByZWN0Lm1heFgoKSwgcmVjdC5tYXhZKCksIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC5t
YXhYKCksIHJlY3QubWF4WSgpLCBHTF9DT0xPUl9CVUZGRVJfQklULCBHTF9MSU5FQVIpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZW5kZXJidWZmZXJTdG9yYWdlKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVp
IGhlaWdodCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3Bw
CmluZGV4IGU2OGJiYTdmZDdmNTE5ZmQ3OGMxNjlhNzI5M2M5YjJhZDUyNjBkZTguLjljZTQ1OWU3
ZDQ5ZGIxOWY3MDg5ZDM4ZTIyYTVmMzdlY2ZlODcwMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1v
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBo
aWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEyIENoYW5nU2VvayBPaCA8c2hpdmFtaWRvd0BnbWFpbC5jb20+CiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDYgKzM2LDggQEAKICNpbmNsdWRlICJIVE1M
Q2FudmFzRWxlbWVudC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiSW1h
Z2VEYXRhLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKICNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIldlYkdMT2JqZWN0LmgiCiAjaW5j
bHVkZSA8Y3N0cmluZz4KQEAgLTYxLDggKzY0LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
dmFsaWRhdGVBdHRyaWJ1dGVzKCkKIHsKICAgICBFeHRlbnNpb25zM0QqIGV4dGVuc2lvbnMgPSBn
ZXRFeHRlbnNpb25zKCk7CiAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkgewotICAgICAgICBpZiAo
ZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCIpKSB7Ci0g
ICAgICAgICAgICBleHRlbnNpb25zLT5lbnN1cmVFbmFibGVkKCJHTF9FWFRfcGFja2VkX2RlcHRo
X3N0ZW5jaWwiKTsKKyAgICAgICAgY29uc3QgY2hhciogcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5z
aW9uID0gaXNHTEVTMkNvbXBsaWFudCgpID8gIkdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCIg
OiAiR0xfRVhUX3BhY2tlZF9kZXB0aF9zdGVuY2lsIjsKKyAgICAgICAgaWYgKGV4dGVuc2lvbnMt
PnN1cHBvcnRzKHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvbikpIHsKKyAgICAgICAgICAgIGV4
dGVuc2lvbnMtPmVuc3VyZUVuYWJsZWQocGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uKTsKICAg
ICAgICAgICAgIC8vIEZvcmNlIGRlcHRoIGlmIHN0ZW5jaWwgaXMgdHJ1ZS4KICAgICAgICAgICAg
IG1fYXR0cnMuZGVwdGggPSB0cnVlOwogICAgICAgICB9IGVsc2UKQEAgLTc0LDcgKzc4LDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmFsaWRhdGVBdHRyaWJ1dGVzKCkKICAgICAgICAgY29u
c3QgY2hhciogdmVuZG9yID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oOjpnbEdldFN0
cmluZyhHTF9WRU5ET1IpKTsKICAgICAgICAgaWYgKCFzdGQ6OnN0cnN0cih2ZW5kb3IsICJOVklE
SUEiKSkKICAgICAgICAgICAgIGlzVmFsaWRWZW5kb3IgPSBmYWxzZTsKLSAgICAgICAgaWYgKCFp
c1ZhbGlkVmVuZG9yIHx8ICFleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfQU5HTEVfZnJhbWVidWZm
ZXJfbXVsdGlzYW1wbGUiKSkKKyAgICAgICAgaWYgKCFpc1ZhbGlkVmVuZG9yIHx8ICFleHRlbnNp
b25zLT5zdXBwb3J0cygiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUiKSB8fCBpc0dM
RVMyQ29tcGxpYW50KCkpCiAgICAgICAgICAgICBtX2F0dHJzLmFudGlhbGlhcyA9IGZhbHNlOwog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICBleHRlbnNpb25zLT5lbnN1cmVFbmFibGVkKCJHTF9B
TkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpOwpAQCAtMTAzLDcgKzEwNyw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQqIGNvCiAKICAgICBpZiAoIW1fYXR0cnMucHJlbXVsdGlwbGllZEFscGhh
KSB7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdG90YWxCeXRlczsgaSArPSA0KSB7Ci0g
ICAgICAgICAgICAvLyBQcmVtdWx0aXBseSBhbHBoYQorICAgICAgICAgICAgLy8gUHJlbXVsdGlw
bHkgYWxwaGEuCiAgICAgICAgICAgICBwaXhlbHNbaSArIDBdID0gc3RkOjptaW4oMjU1LCBwaXhl
bHNbaSArIDBdICogcGl4ZWxzW2kgKyAzXSAvIDI1NSk7CiAgICAgICAgICAgICBwaXhlbHNbaSAr
IDFdID0gc3RkOjptaW4oMjU1LCBwaXhlbHNbaSArIDFdICogcGl4ZWxzW2kgKyAzXSAvIDI1NSk7
CiAgICAgICAgICAgICBwaXhlbHNbaSArIDJdID0gc3RkOjptaW4oMjU1LCBwaXhlbHNbaSArIDJd
ICogcGl4ZWxzW2kgKyAzXSAvIDI1NSk7CkBAIC0xMjQsNyArMTI4LDcgQEAgYm9vbCBHcmFwaGlj
c0NvbnRleHQzRDo6cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQqKQogUGFzc1JlZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4dDNEOjpwYWlu
dFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YShEcmF3aW5nQnVmZmVyKikKIHsKICAgICAvLyBS
ZWFkaW5nIHByZW11bHRpcGxpZWQgYWxwaGEgd291bGQgaW52b2x2ZSB1bnByZW11bHRpcGx5aW5n
LCB3aGljaCBpcwotICAgIC8vIGxvc3N5CisgICAgLy8gbG9zc3kuCiAgICAgaWYgKG1fYXR0cnMu
cHJlbXVsdGlwbGllZEFscGhhKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtMTM0LDEzICsxMzgs
MTQ4IEBAIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoRHJhd2luCiAKICAgICByZWFkUmVuZGVyaW5nUmVzdWx0
cyhwaXhlbHMsIHRvdGFsQnl0ZXMpOwogCi0gICAgLy8gQ29udmVydCB0byBSR0JBCisgICAgLy8g
Q29udmVydCB0byBSR0JBLgogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdG90YWxCeXRlczsgaSAr
PSA0KQogICAgICAgICBzdGQ6OnN3YXAocGl4ZWxzW2ldLCBwaXhlbHNbaSArIDJdKTsKIAogICAg
IHJldHVybiBpbWFnZURhdGEucmVsZWFzZSgpOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpwcmVwYXJlVGV4dHVyZSgpCit7CisgICAgaWYgKG1fbGF5ZXJDb21wb3NpdGVkKQorICAgICAg
ICByZXR1cm47CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpZiAobV9hdHRycy5h
bnRpYWxpYXMpCisgICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3NhcnkoSW50UmVj
dCgwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0KSk7CisKKyAgICA6OmdsQmlu
ZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAgIDo6Z2xBY3Rp
dmVUZXh0dXJlKEdMX1RFWFRVUkUwKTsKKyAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8y
RCwgbV9jb21wb3NpdG9yVGV4dHVyZSk7CisgICAgOjpnbENvcHlUZXhJbWFnZTJEKEdMX1RFWFRV
UkVfMkQsIDAsIG1faW50ZXJuYWxDb2xvckZvcm1hdCwgMCwgMCwgbV9jdXJyZW50V2lkdGgsIG1f
Y3VycmVudEhlaWdodCwgMCk7CisgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1f
Ym91bmRUZXh0dXJlMCk7CisgICAgOjpnbEFjdGl2ZVRleHR1cmUobV9hY3RpdmVUZXh0dXJlKTsK
KyAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9ib3VuZEZC
Tyk7CisgICAgOjpnbEZpbmlzaCgpOworICAgIG1fbGF5ZXJDb21wb3NpdGVkID0gdHJ1ZTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFJlbmRlcmluZ1Jlc3VsdHModW5zaWduZWQg
Y2hhciAqcGl4ZWxzLCBpbnQgcGl4ZWxzU2l6ZSkKK3sKKyAgICBpbnQgdG90YWxCeXRlcyA9IG1f
Y3VycmVudFdpZHRoICogbV9jdXJyZW50SGVpZ2h0ICogNDsKKyAgICBpZiAocGl4ZWxzU2l6ZSA8
IHRvdGFsQnl0ZXMpCisgICAgICAgIHJldHVybjsKKworICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworCisgICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9IGZhbHNlOworICAgIGlmIChtX2F0dHJzLmFu
dGlhbGlhcykgeworICAgICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KEludFJl
Y3QoMCwgMCwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCkpOworICAgICAgICA6Omds
QmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAgICAgICBt
dXN0UmVzdG9yZUZCTyA9IHRydWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG1fYm91bmRG
Qk8gIT0gbV9mYm8pIHsKKyAgICAgICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKKyAgICAg
ICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBHTGludCBwYWNrQWxpZ25tZW50ID0gNDsKKyAgICBi
b29sIG11c3RSZXN0b3JlUGFja0FsaWdubWVudCA9IGZhbHNlOworICAgIDo6Z2xHZXRJbnRlZ2Vy
dihHTF9QQUNLX0FMSUdOTUVOVCwgJnBhY2tBbGlnbm1lbnQpOworICAgIGlmIChwYWNrQWxpZ25t
ZW50ID4gNCkgeworICAgICAgICA6OmdsUGl4ZWxTdG9yZWkoR0xfUEFDS19BTElHTk1FTlQsIDQp
OworICAgICAgICBtdXN0UmVzdG9yZVBhY2tBbGlnbm1lbnQgPSB0cnVlOworICAgIH0KKworICAg
IDo6Z2xSZWFkUGl4ZWxzKDAsIDAsIG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQsIEdM
X0JHUkEsIEdMX1VOU0lHTkVEX0lOVF84XzhfOF84X1JFViwgcGl4ZWxzKTsKKyAgICBpZiAoaXNH
TEVTMkNvbXBsaWFudCgpKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdG90YWxCeXRl
czsgaSArPSA0KQorICAgICAgICAgICAgc3RkOjpzd2FwKHBpeGVsc1tpXSwgcGl4ZWxzW2kgKyAy
XSk7IC8vIENvbnZlcnQgdG8gQkdSQS4KKyAgICB9CisKKyAgICBpZiAobXVzdFJlc3RvcmVQYWNr
QWxpZ25tZW50KQorICAgICAgICA6OmdsUGl4ZWxTdG9yZWkoR0xfUEFDS19BTElHTk1FTlQsIHBh
Y2tBbGlnbm1lbnQpOworCisgICAgaWYgKG11c3RSZXN0b3JlRkJPKQorICAgICAgICA6OmdsQmlu
ZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9ib3VuZEZCTyk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQorewor
ICAgIGlmICghcGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAod2lkdGggPT0gbV9jdXJyZW50V2lkdGggJiYgaGVpZ2h0ID09IG1fY3VycmVudEhl
aWdodCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jdXJyZW50V2lkdGggPSB3aWR0aDsKKyAg
ICBtX2N1cnJlbnRIZWlnaHQgPSBoZWlnaHQ7CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKKworICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8gPSBy
ZXNoYXBlRkJPcyhJbnRTaXplKHdpZHRoLCBoZWlnaHQpKTsKKworICAgIC8vIEluaXRpYWxpemUg
cmVuZGVyYnVmZmVycyB0byAwLgorICAgIEdMZmxvYXQgY2xlYXJDb2xvcltdID0gezAsIDAsIDAs
IDB9LCBjbGVhckRlcHRoID0gMDsKKyAgICBHTGludCBjbGVhclN0ZW5jaWwgPSAwOworICAgIEdM
Ym9vbGVhbiBjb2xvck1hc2tbXSA9IHtHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVFLCBHTF9UUlVF
fSwgZGVwdGhNYXNrID0gR0xfVFJVRTsKKyAgICBHTHVpbnQgc3RlbmNpbE1hc2sgPSAweGZmZmZm
ZmZmOworICAgIEdMYm9vbGVhbiBpc1NjaXNzb3JFbmFibGVkID0gR0xfRkFMU0U7CisgICAgR0xi
b29sZWFuIGlzRGl0aGVyRW5hYmxlZCA9IEdMX0ZBTFNFOworICAgIEdMYml0ZmllbGQgY2xlYXJN
YXNrID0gR0xfQ09MT1JfQlVGRkVSX0JJVDsKKyAgICA6OmdsR2V0RmxvYXR2KEdMX0NPTE9SX0NM
RUFSX1ZBTFVFLCBjbGVhckNvbG9yKTsKKyAgICA6OmdsQ2xlYXJDb2xvcigwLCAwLCAwLCAwKTsK
KyAgICA6OmdsR2V0Qm9vbGVhbnYoR0xfQ09MT1JfV1JJVEVNQVNLLCBjb2xvck1hc2spOworICAg
IDo6Z2xDb2xvck1hc2soR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSwgR0xfVFJVRSk7CisgICAg
aWYgKG1fYXR0cnMuZGVwdGgpIHsKKyAgICAgICAgOjpnbEdldEZsb2F0dihHTF9ERVBUSF9DTEVB
Ul9WQUxVRSwgJmNsZWFyRGVwdGgpOworICAgICAgICA6OmdsQ2xlYXJEZXB0aCgxKTsKKyAgICAg
ICAgOjpnbEdldEJvb2xlYW52KEdMX0RFUFRIX1dSSVRFTUFTSywgJmRlcHRoTWFzayk7CisgICAg
ICAgIDo6Z2xEZXB0aE1hc2soR0xfVFJVRSk7CisgICAgICAgIGNsZWFyTWFzayB8PSBHTF9ERVBU
SF9CVUZGRVJfQklUOworICAgIH0KKyAgICBpZiAobV9hdHRycy5zdGVuY2lsKSB7CisgICAgICAg
IDo6Z2xHZXRJbnRlZ2VydihHTF9TVEVOQ0lMX0NMRUFSX1ZBTFVFLCAmY2xlYXJTdGVuY2lsKTsK
KyAgICAgICAgOjpnbENsZWFyU3RlbmNpbCgwKTsKKyAgICAgICAgOjpnbEdldEludGVnZXJ2KEdM
X1NURU5DSUxfV1JJVEVNQVNLLCByZWludGVycHJldF9jYXN0PEdMaW50Kj4oJnN0ZW5jaWxNYXNr
KSk7CisgICAgICAgIDo6Z2xTdGVuY2lsTWFza1NlcGFyYXRlKEdMX0ZST05ULCAweGZmZmZmZmZm
KTsKKyAgICAgICAgY2xlYXJNYXNrIHw9IEdMX1NURU5DSUxfQlVGRkVSX0JJVDsKKyAgICB9Cisg
ICAgaXNTY2lzc29yRW5hYmxlZCA9IDo6Z2xJc0VuYWJsZWQoR0xfU0NJU1NPUl9URVNUKTsKKyAg
ICA6OmdsRGlzYWJsZShHTF9TQ0lTU09SX1RFU1QpOworICAgIGlzRGl0aGVyRW5hYmxlZCA9IDo6
Z2xJc0VuYWJsZWQoR0xfRElUSEVSKTsKKyAgICA6OmdsRGlzYWJsZShHTF9ESVRIRVIpOworCisg
ICAgOjpnbENsZWFyKGNsZWFyTWFzayk7CisKKyAgICA6OmdsQ2xlYXJDb2xvcihjbGVhckNvbG9y
WzBdLCBjbGVhckNvbG9yWzFdLCBjbGVhckNvbG9yWzJdLCBjbGVhckNvbG9yWzNdKTsKKyAgICA6
OmdsQ29sb3JNYXNrKGNvbG9yTWFza1swXSwgY29sb3JNYXNrWzFdLCBjb2xvck1hc2tbMl0sIGNv
bG9yTWFza1szXSk7CisgICAgaWYgKG1fYXR0cnMuZGVwdGgpIHsKKyAgICAgICAgOjpnbENsZWFy
RGVwdGgoY2xlYXJEZXB0aCk7CisgICAgICAgIDo6Z2xEZXB0aE1hc2soZGVwdGhNYXNrKTsKKyAg
ICB9CisgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCkgeworICAgICAgICA6OmdsQ2xlYXJTdGVuY2ls
KGNsZWFyU3RlbmNpbCk7CisgICAgICAgIDo6Z2xTdGVuY2lsTWFza1NlcGFyYXRlKEdMX0ZST05U
LCBzdGVuY2lsTWFzayk7CisgICAgfQorICAgIGlmIChpc1NjaXNzb3JFbmFibGVkKQorICAgICAg
ICA6OmdsRW5hYmxlKEdMX1NDSVNTT1JfVEVTVCk7CisgICAgZWxzZQorICAgICAgICA6OmdsRGlz
YWJsZShHTF9TQ0lTU09SX1RFU1QpOworICAgIGlmIChpc0RpdGhlckVuYWJsZWQpCisgICAgICAg
IDo6Z2xFbmFibGUoR0xfRElUSEVSKTsKKyAgICBlbHNlCisgICAgICAgIDo6Z2xEaXNhYmxlKEdM
X0RJVEhFUik7CisKKyAgICBpZiAobXVzdFJlc3RvcmVGQk8pCisgICAgICAgIDo6Z2xCaW5kRnJh
bWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2JvdW5kRkJPKTsKKworICAgIDo6Z2xG
bHVzaCgpOworfQorCiBJbnRTaXplIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlcm5hbEZyYW1l
YnVmZmVyU2l6ZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEludFNpemUobV9jdXJyZW50V2lkdGgs
IG1fY3VycmVudEhlaWdodCk7CkBAIC0xNzQsNiArMzEzLDIwIEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmJpbmRCdWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZl
cikKICAgICA6OmdsQmluZEJ1ZmZlcih0YXJnZXQsIGJ1ZmZlcik7CiB9CiAKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmJpbmRGcmFtZWJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RP
YmplY3QgYnVmZmVyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIEdMdWludCBm
Ym87CisgICAgaWYgKGJ1ZmZlcikKKyAgICAgICAgZmJvID0gYnVmZmVyOworICAgIGVsc2UKKyAg
ICAgICAgZmJvID0gKG1fYXR0cnMuYW50aWFsaWFzID8gbV9tdWx0aXNhbXBsZUZCTyA6IG1fZmJv
KTsKKyAgICBpZiAoZmJvICE9IG1fYm91bmRGQk8pIHsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1
ZmZlckVYVCh0YXJnZXQsIGZibyk7CisgICAgICAgIG1fYm91bmRGQk8gPSBmYm87CisgICAgfQor
fQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRh
cmdldCwgUGxhdGZvcm0zRE9iamVjdCByZW5kZXJidWZmZXIpCiB7CiAgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CkBAIC0zMDcsNyArNDYwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29t
cGlsZVNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKICAgICBlbnRyeS5pc1ZhbGlkID0g
aXNWYWxpZDsKIAogICAgIGlmICghaXNWYWxpZCkKLSAgICAgICAgcmV0dXJuOyAvLyBTaGFkZXIg
ZGlkbid0IHZhbGlkYXRlLCBkb24ndCBtb3ZlIGZvcndhcmQgd2l0aCBjb21waWxpbmcgdHJhbnNs
YXRlZCBzb3VyY2UgICAgCisgICAgICAgIHJldHVybjsgLy8gU2hhZGVyIGRpZG4ndCB2YWxpZGF0
ZSwgZG9uJ3QgbW92ZSBmb3J3YXJkIHdpdGggY29tcGlsaW5nIHRyYW5zbGF0ZWQgc291cmNlLgog
CiAgICAgaW50IHRyYW5zbGF0ZWRTaGFkZXJMZW5ndGggPSB0cmFuc2xhdGVkU2hhZGVyU291cmNl
Lmxlbmd0aCgpOwogCkBAIC0zMjIsMTAgKzQ3NSwzNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNE
Ojpjb21waWxlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQogICAgIAogICAgIDo6Z2xH
ZXRTaGFkZXJpdihzaGFkZXIsIENPTVBJTEVfU1RBVFVTLCAmR0xDb21waWxlU3VjY2Vzcyk7CiAg
ICAgCi0gICAgLy8gQVNTRVJUIHRoYXQgQU5HTEUgZ2VuZXJhdGVkIEdMU0wgd2lsbCBiZSBhY2Nl
cHRlZCBieSBPcGVuR0wKKyAgICAvLyBBU1NFUlQgdGhhdCBBTkdMRSBnZW5lcmF0ZWQgR0xTTCB3
aWxsIGJlIGFjY2VwdGVkIGJ5IE9wZW5HTC4KICAgICBBU1NFUlQoR0xDb21waWxlU3VjY2VzcyA9
PSBHTF9UUlVFKTsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29weVRleEltYWdlMkQo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwg
R0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwg
R0MzRGludCBib3JkZXIpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKG1f
YXR0cnMuYW50aWFsaWFzICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykgeworICAg
ICAgICByZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KEludFJlY3QoeCwgeSwgd2lkdGgs
IGhlaWdodCkpOworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVS
X0VYVCwgbV9mYm8pOworICAgIH0KKyAgICA6OmdsQ29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZl
bCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7CisgICAgaWYg
KG1fYXR0cnMuYW50aWFsaWFzICYmIG1fYm91bmRGQk8gPT0gbV9tdWx0aXNhbXBsZUZCTykKKyAg
ICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlz
YW1wbGVGQk8pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4U3ViSW1hZ2Uy
RChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGlu
dCB5b2Zmc2V0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGlmIChtX2F0dHJz
LmFudGlhbGlhcyAmJiBtX2JvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pIHsKKyAgICAgICAg
cmVzb2x2ZU11bHRpc2FtcGxpbmdJZk5lY2Vzc2FyeShJbnRSZWN0KHgsIHksIHdpZHRoLCBoZWln
aHQpKTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQs
IG1fZmJvKTsKKyAgICB9CisgICAgOjpnbENvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWws
IHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgIGlmIChtX2F0dHJz
LmFudGlhbGlhcyAmJiBtX2JvdW5kRkJPID09IG1fbXVsdGlzYW1wbGVGQk8pCisgICAgICAgIDo6
Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJP
KTsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y3VsbEZhY2UoR0MzRGVudW0gbW9kZSkK
IHsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKQEAgLTQzOSw3ICs2MTYsNyBAQCBib29sIEdy
YXBoaWNzQ29udGV4dDNEOjpnZXRBY3RpdmVBdHRyaWIoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFt
LCBHQzNEdWludCBpbmRleAogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIEdMaW50IG1h
eEF0dHJpYnV0ZVNpemUgPSAwOwogICAgIDo6Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xfQUNU
SVZFX0FUVFJJQlVURV9NQVhfTEVOR1RILCAmbWF4QXR0cmlidXRlU2l6ZSk7Ci0gICAgR0xjaGFy
IG5hbWVbbWF4QXR0cmlidXRlU2l6ZV07IC8vIEdMX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdU
SCBpbmNsdWRlcyBudWxsIHRlcm1pbmF0aW9uCisgICAgR0xjaGFyIG5hbWVbbWF4QXR0cmlidXRl
U2l6ZV07IC8vIEdMX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCBpbmNsdWRlcyBudWxsIHRl
cm1pbmF0aW9uLgogICAgIEdMc2l6ZWkgbmFtZUxlbmd0aCA9IDA7CiAgICAgR0xpbnQgc2l6ZSA9
IDA7CiAgICAgR0xlbnVtIHR5cGUgPSAwOwpAQCAtNDUxLDYgKzYyOCwzMiBAQCBib29sIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRBY3RpdmVBdHRyaWIoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBH
QzNEdWludCBpbmRleAogICAgIGluZm8uc2l6ZSA9IHNpemU7CiAgICAgcmV0dXJuIHRydWU7CiB9
CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZVVuaWZvcm0oUGxhdGZvcm0zRE9i
amVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKK3sKKyAgICBp
ZiAoIXByb2dyYW0pIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBHTGludCBtYXhVbmlmb3JtU2l6ZSA9IDA7CisgICAgOjpnbEdldFByb2dyYW1pdihw
cm9ncmFtLCBHTF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RILCAmbWF4VW5pZm9ybVNpemUpOwor
CisgICAgT3duQXJyYXlQdHI8R0xjaGFyPiBuYW1lID0gYWRvcHRBcnJheVB0cihuZXcgR0xjaGFy
W21heFVuaWZvcm1TaXplXSk7IC8vIEdMX0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEggaW5jbHVk
ZXMgbnVsbCB0ZXJtaW5hdGlvbi4KKyAgICBHTHNpemVpIG5hbWVMZW5ndGggPSAwOworICAgIEdM
aW50IHNpemUgPSAwOworICAgIEdMZW51bSB0eXBlID0gMDsKKyAgICA6OmdsR2V0QWN0aXZlVW5p
Zm9ybShwcm9ncmFtLCBpbmRleCwgbWF4VW5pZm9ybVNpemUsICZuYW1lTGVuZ3RoLCAmc2l6ZSwg
JnR5cGUsIG5hbWUuZ2V0KCkpOworICAgIGlmICghbmFtZUxlbmd0aCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaW5mby5uYW1lID0gU3RyaW5nKG5hbWUuZ2V0KCksIG5hbWVMZW5ndGgp
OworICAgIGluZm8udHlwZSA9IHR5cGU7CisgICAgaW5mby5zaXplID0gc2l6ZTsKKworICAgIHJl
dHVybiB0cnVlOworfQogICAgIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0YWNoZWRT
aGFkZXJzKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHNpemVpIG1heENvdW50LCBHQzNE
c2l6ZWkqIGNvdW50LCBQbGF0Zm9ybTNET2JqZWN0KiBzaGFkZXJzKQogewpAQCAtNTg2LDYgKzc4
OSwyMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwb2x5Z29uT2Zmc2V0KEdDM0RmbG9hdCBm
YWN0b3IsIEdDM0RmbG9hdCB1bml0cykKICAgICA6OmdsUG9seWdvbk9mZnNldChmYWN0b3IsIHVu
aXRzKTsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVscyhHQzNEaW50IHgs
IEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBm
b3JtYXQsIEdDM0RlbnVtIHR5cGUsIHZvaWQqIGRhdGEpCit7CisgICAgLy8gRklYTUU6IHJlbW92
ZSB0aGUgdHdvIGdsRmx1c2ggY2FsbHMgd2hlbiB0aGUgZHJpdmVyIGJ1ZyBpcyBmaXhlZCwgaS5l
LiwKKyAgICAvLyBhbGwgcHJldmlvdXMgcmVuZGVyaW5nIGNhbGxzIHNob3VsZCBiZSBkb25lIGJl
Zm9yZSByZWFkaW5nIHBpeGVscy4KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6Omds
Rmx1c2goKTsKKyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMgJiYgbV9ib3VuZEZCTyA9PSBtX211
bHRpc2FtcGxlRkJPKSB7CisgICAgICAgIHJlc29sdmVNdWx0aXNhbXBsaW5nSWZOZWNlc3Nhcnko
SW50UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZm
ZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CisgICAgICAgIDo6Z2xGbHVzaCgpOwor
ICAgIH0KKyAgICA6OmdsUmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5
cGUsIGRhdGEpOworICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcyAmJiBtX2JvdW5kRkJPID09IG1f
bXVsdGlzYW1wbGVGQk8pCisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVC
VUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKCkKIHsKICAgICAvLyBGSVhNRTogVGhpcyBpcyBub3Qg
aW1wbGVtZW50ZWQgb24gZGVza3RvcCBPcGVuR0wuIFdlIG5lZWQgdG8gaGF2ZSBpZmRlZnMgZm9y
IHRoZSBkaWZmZXJlbnQgR0wgdmFyaWFudHMuCkBAIC02ODYsNyArOTA1LDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6dW5pZm9ybTJmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB2MCwg
R0MzRGZsb2F0IHYxKQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMmZ2KEdDM0Rp
bnQgbG9jYXRpb24sIEdDM0RmbG9hdCogYXJyYXksIEdDM0RzaXplaSBzaXplKQogewotICAgIC8v
IEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAyCisgICAgLy8gRklYTUU6
IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDIuCiAgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CiAgICAgOjpnbFVuaWZvcm0yZnYobG9jYXRpb24sIHNpemUsIGFycmF5KTsKIH0KQEAg
LTY5OSw3ICs5MTgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2YoR0MzRGlu
dCBsb2NhdGlvbiwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEsCiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnVuaWZvcm0zZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0KiBhcnJheSwg
R0MzRHNpemVpIHNpemUpCiB7Ci0gICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11
bHRpcGxlIG9mIDMKKyAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUg
b2YgMy4KICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICA6OmdsVW5pZm9ybTNmdihsb2Nh
dGlvbiwgc2l6ZSwgYXJyYXkpOwogfQpAQCAtNzEyLDcgKzkzMSw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnVuaWZvcm00ZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgdjAsIEdDM0Rm
bG9hdCB2MSwKIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRmdihHQzNEaW50IGxv
Y2F0aW9uLCBHQzNEZmxvYXQqIGFycmF5LCBHQzNEc2l6ZWkgc2l6ZSkKIHsKLSAgICAvLyBGSVhN
RTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNAorICAgIC8vIEZJWE1FOiBsZW5n
dGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0LgogICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwogICAgIDo6Z2xVbmlmb3JtNGZ2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7CiB9CkBAIC03Mzcs
NyArOTU2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJpKEdDM0RpbnQgbG9j
YXRpb24sIEdDM0RpbnQgdjAsIEdDM0RpbnQgdjEpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnVuaWZvcm0yaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCogYXJyYXksIEdDM0RzaXplaSBz
aXplKQogewotICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAy
CisgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDIuCiAgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgOjpnbFVuaWZvcm0yaXYobG9jYXRpb24sIHNpemUs
IGFycmF5KTsKIH0KQEAgLTc1MCw3ICs5NjksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1
bmlmb3JtM2koR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB2MCwgR0MzRGludCB2MSwgR0MzRAog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2l2KEdDM0RpbnQgbG9jYXRpb24sIEdD
M0RpbnQqIGFycmF5LCBHQzNEc2l6ZWkgc2l6ZSkKIHsKLSAgICAvLyBGSVhNRTogbGVuZ3RoIG5l
ZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMworICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8g
YmUgYSBtdWx0aXBsZSBvZiAzLgogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xV
bmlmb3JtM2l2KGxvY2F0aW9uLCBzaXplLCBhcnJheSk7CiB9CkBAIC03NjMsMjggKzk4MiwyOCBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGkoR0MzRGludCBsb2NhdGlvbiwgR0Mz
RGludCB2MCwgR0MzRGludCB2MSwgR0MzRAogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlm
b3JtNGl2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIGFycmF5LCBHQzNEc2l6ZWkgc2l6ZSkK
IHsKLSAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNAorICAg
IC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0LgogICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xVbmlmb3JtNGl2KGxvY2F0aW9uLCBzaXplLCBhcnJh
eSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXgyZnYoR0MzRGlu
dCBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIGFycmF5LCBHQzNE
c2l6ZWkgc2l6ZSkKIHsKLSAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlw
bGUgb2YgNAorICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0
LgogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xVbmlmb3JtTWF0cml4MmZ2KGxv
Y2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6dW5pZm9ybU1hdHJpeDNmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFu
c3Bvc2UsIEdDM0RmbG9hdCogYXJyYXksIEdDM0RzaXplaSBzaXplKQogewotICAgIC8vIEZJWE1F
OiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA5CisgICAgLy8gRklYTUU6IGxlbmd0
aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDkuCiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CiAgICAgOjpnbFVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgYXJy
YXkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4NGZ2KEdDM0Rp
bnQgbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiBhcnJheSwgR0Mz
RHNpemVpIHNpemUpCiB7Ci0gICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRp
cGxlIG9mIDE2CisgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9m
IDE2LgogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIDo6Z2xVbmlmb3JtTWF0cml4NGZ2
KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIGFycmF5KTsKIH0KQEAgLTEwNTAsNyArMTI2OSw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvCiB7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CiAKLSAgICAvLyBGSVhNRTogd2Ugd2lsbCBuZWVkIHRvIGRlYWwgd2l0aCBQaXhlbFN0b3JlIHBh
cmFtcyB3aGVuIGRlYWxpbmcgd2l0aCBpbWFnZSBidWZmZXJzIHRoYXQgZGlmZmVyIGZyb20gdGhl
IHN1YmltYWdlIHNpemUKKyAgICAvLyBGSVhNRTogd2Ugd2lsbCBuZWVkIHRvIGRlYWwgd2l0aCBQ
aXhlbFN0b3JlIHBhcmFtcyB3aGVuIGRlYWxpbmcgd2l0aCBpbWFnZSBidWZmZXJzIHRoYXQgZGlm
ZmVyIGZyb20gdGhlIHN1YmltYWdlIHNpemUuCiAgICAgOjpnbFRleFN1YkltYWdlMkQodGFyZ2V0
LCBsZXZlbCwgeG9mZiwgeW9mZiwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMp
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xFUy5jcHAKaW5kZXggOTBm
ZjVhMGEzNDViZGY2NGI5NzgwZDQ4ZGI2NDI1MDY2N2RmMzEyNS4uNGZhYTY2MzBmYmUwNDZiYWE0
ZGEwODVlZWVmMzY3ZDU5NzVlZWY3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMRVMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9w
ZW5HTEVTLmNwcApAQCAtMzAsNiArMzAsOCBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
M0QuaCIKIAorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKIAogI2lmIFBMQVRGT1JNKEdUSykKQEAgLTM4LDYzICs0
MCwxMDIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpyZWFkUmVuZGVyaW5nUmVzdWx0cyh1bnNpZ25lZCBjaGFyICpwaXhlbHMsIGludCBwaXhlbHNT
aXplKQorYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZUZCT3MoY29uc3QgSW50U2l6ZSYg
c2l6ZSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwcmVwYXJlVGV4dHVyZSgpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZEZy
YW1lYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBjb25zdCBpbnQgd2lkdGggPSBzaXplLndpZHRoKCk7
CisgICAgY29uc3QgaW50IGhlaWdodCA9IHNpemUuaGVpZ2h0KCk7CisgICAgR0x1aW50IGNvbG9y
Rm9ybWF0ID0gMCwgcGl4ZWxEYXRhVHlwZSA9IDA7CisgICAgaWYgKG1fYXR0cnMuYWxwaGEpIHsK
KyAgICAgICAgbV9pbnRlcm5hbENvbG9yRm9ybWF0ID0gR0xfUkdCQTsKKyAgICAgICAgY29sb3JG
b3JtYXQgPSBHTF9SR0JBOworICAgICAgICBwaXhlbERhdGFUeXBlID0gR0xfVU5TSUdORURfQllU
RTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2ludGVybmFsQ29sb3JGb3JtYXQgPSBHTF9SR0I7
CisgICAgICAgIGNvbG9yRm9ybWF0ID0gR0xfUkdCOworICAgICAgICBwaXhlbERhdGFUeXBlID0g
R0xfVU5TSUdORURfU0hPUlRfNV82XzU7CisgICAgfQorCisgICAgLy8gV2UgZG9uJ3QgYWxsb3cg
dGhlIGxvZ2ljIHdoZXJlIHN0ZW5jaWwgaXMgcmVxdWlyZWQgYW5kIGRlcHRoIGlzIG5vdC4KKyAg
ICAvLyBTZWUgR3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlQXR0cmlidXRlcy4KKyAgICBib29s
IHN1cHBvcnRQYWNrZWREZXB0aFN0ZW5jaWxCdWZmZXIgPSAobV9hdHRycy5zdGVuY2lsIHx8IG1f
YXR0cnMuZGVwdGgpICYmIGdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU19wYWNrZWRf
ZGVwdGhfc3RlbmNpbCIpOworCisgICAgLy8gUmVzaXplIHJlZ3VsYXIgRkJPLgorICAgIGJvb2wg
bXVzdFJlc3RvcmVGQk8gPSBmYWxzZTsKKyAgICBpZiAobV9ib3VuZEZCTyAhPSBtX2Zibykgewor
ICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IHRydWU7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZm
ZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CisgICAgfQorCisgICAgOjpnbEJpbmRU
ZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSk7CisgICAgOjpnbFRleEltYWdlMkQoR0xf
VEVYVFVSRV8yRCwgMCwgbV9pbnRlcm5hbENvbG9yRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBj
b2xvckZvcm1hdCwgcGl4ZWxEYXRhVHlwZSwgMCk7CisgICAgOjpnbEZyYW1lYnVmZmVyVGV4dHVy
ZTJERVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgR0xfQ09MT1JfQVRUQUNITUVOVDBfRVhULCBHTF9U
RVhUVVJFXzJELCBtX3RleHR1cmUsIDApOworCisgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRV
UkVfMkQsIG1fY29tcG9zaXRvclRleHR1cmUpOworICAgIDo6Z2xUZXhJbWFnZTJEKEdMX1RFWFRV
UkVfMkQsIDAsIG1faW50ZXJuYWxDb2xvckZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgY29sb3JG
b3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUsIDApOworICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhU
VVJFXzJELCAwKTsKKworICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgYW50aWFsaWFzaW5nIHlldC4g
U2VlIEdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZUF0dHJpYnV0ZXMuCisgICAgQVNTRVJUKCFt
X2F0dHJzLmFudGlhbGlhcyk7CisKKyAgICBpZiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMu
ZGVwdGgpIHsKKyAgICAgICAgLy8gVXNlIGEgMjQgYml0IGRlcHRoIGJ1ZmZlciB3aGVyZSB3ZSBr
bm93IHdlIGhhdmUgaXQuCisgICAgICAgIGlmIChzdXBwb3J0UGFja2VkRGVwdGhTdGVuY2lsQnVm
ZmVyKSB7CisgICAgICAgICAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9kZXB0
aFN0ZW5jaWxCdWZmcik7CisgICAgICAgICAgICA6OmdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJE
LCAwLCBHTF9ERVBUSF9TVEVOQ0lMX09FUywgd2lkdGgsIGhlaWdodCwgMCwgR0xfREVQVEhfU1RF
TkNJTF9PRVMsIEdMX1VOU0lHTkVEX0lOVF8yNF84X09FUywgMCk7CisgICAgICAgICAgICBpZiAo
bV9hdHRycy5zdGVuY2lsKQorICAgICAgICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1cmUy
RChHTF9GUkFNRUJVRkZFUiwgR0xfU1RFTkNJTF9BVFRBQ0hNRU5ULCBHTF9URVhUVVJFXzJELCBt
X2RlcHRoU3RlbmNpbEJ1ZmZlciwgMCk7CisgICAgICAgICAgICBpZiAobV9hdHRycy5kZXB0aCkK
KyAgICAgICAgICAgICAgICA6OmdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIs
IEdMX0RFUFRIX0FUVEFDSE1FTlQsIEdMX1RFWFRVUkVfMkQsIG1fZGVwdGhTdGVuY2lsQnVmZmVy
LCAwKTsKKyAgICAgICAgICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChtX2F0dHJpYnV0ZXMuc3RlbmNpbCkgewor
ICAgICAgICAgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJVRkZFUl9F
WFQsIG1fc3RlbmNpbEJ1ZmZlcik7CisgICAgICAgICAgICAgICAgOjpnbFJlbmRlcmJ1ZmZlclN0
b3JhZ2VFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgR0xfU1RFTkNJTF9JTkRFWDgsIHdpZHRoLCBo
ZWlnaHQpOworICAgICAgICAgICAgICAgIDo6Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChH
TF9GUkFNRUJVRkZFUl9FWFQsIEdMX1NURU5DSUxfQVRUQUNITUVOVF9FWFQsIEdMX1JFTkRFUkJV
RkZFUl9FWFQsIG1fc3RlbmNpbEJ1ZmZlcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAobV9hdHRyaWJ1dGVzLmRlcHRoKSB7CisgICAgICAgICAgICAgICAgOjpnbEJpbmRSZW5kZXJi
dWZmZXJFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgbV9kZXB0aEJ1ZmZlcik7CisgICAgICAgICAg
ICAgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VFWFQoR0xfUkVOREVSQlVGRkVSX0VYVCwgR0xf
REVQVEhfQ09NUE9ORU5UMTYsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICAgICAgICAgIDo6Z2xG
cmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIEdMX0RFUFRIX0FU
VEFDSE1FTlRfRVhULCBHTF9SRU5ERVJCVUZGRVJfRVhULCBtX2RlcHRoQnVmZmVyKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIDo6Z2xCaW5kUmVuZGVyYnVmZmVyRVhUKEdMX1JFTkRFUkJV
RkZFUl9FWFQsIDApOworICAgICAgICB9CisgICAgfQorICAgIGlmIChnbENoZWNrRnJhbWVidWZm
ZXJTdGF0dXNFWFQoR0xfRlJBTUVCVUZGRVJfRVhUKSAhPSBHTF9GUkFNRUJVRkZFUl9DT01QTEVU
RV9FWFQpIHsKKyAgICAgICAgLy8gRklYTUU6IGNsZWFudXAKKyAgICAgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gbXVzdFJlc3RvcmVGQk87CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBs
ZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNE
c2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhTdWJJ
bWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBH
QzNEaW50IHlvZmZzZXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdD
M0RzaXplaSBoZWlnaHQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBHcmFw
aGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0s
IEdDM0R1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVscyhHQzNEaW50IHgs
IEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBm
b3JtYXQsIEdDM0RlbnVtIHR5cGUsIHZvaWQqIGRhdGEpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpyZXNvbHZlTXVsdGlzYW1wbGluZ0lmTmVjZXNzYXJ5KEludFJlY3QmIHJlY3QpCiB7CisgICAg
Ly8gRklYTUU6IFdlIGRvbid0IHN1cHBvcnQgYW50aWFsaWFzaW5nIHlldC4KICAgICBub3RJbXBs
ZW1lbnRlZCgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZW5kZXJidWZmZXJTdG9y
YWdlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3
aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlRVhUKHRhcmdl
dCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRJbnRlZ2VydihHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCiB7Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICA6Omds
R2V0SW50ZWdlcnYocG5hbWUsIHZhbHVlKTsKIH0KIAogYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6
dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVy
bmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9y
ZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykK
IHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQorICAgIGlm
ICh3aWR0aCAmJiBoZWlnaHQgJiYgIXBpeGVscykgeworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKyAgICA6OmdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRl
cm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7
CisgICAgcmV0dXJuIHRydWU7CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>