<?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>126718</bug_id>
          
          <creation_ts>2014-01-09 14:02:30 -0800</creation_ts>
          <short_desc>[WebGL] Have getProgramParameter return filtered results for ACTIVE_ATTRIBUTES and ACTIVE_UNIFORMS</short_desc>
          <delta_ts>2014-01-09 17:19:54 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kbr</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>noam</cc>
    
    <cc>roger_fong</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>966059</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-01-09 14:02:30 -0800</bug_when>
    <thetext>The Khronos WebGL test suite assumes that getProgramParameter only returns non-builtin attributes and uniforms.  For example, it assumes that getProgramParameter(ACTIVE_UNIFORMS) returns a count that omits built-in uniforms, such as gl_DepthRange.near, gl_DepthRange.far, etc.

OpenGL itself does return built-in values when you query &quot;glGetActiveUniform&quot; (see https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGetActiveUniform.xml: The spec states that &quot;The list of active uniform variables may include both built-in uniform variables (which begin with the prefix &apos;gl_&apos;) as well as user-defined uniform variable names.&quot;). Likewise, glGetActiveAttrib is specified to potentially return built-ins (see http://www.opengl.org/sdk/docs/man/xhtml/glGetActiveAttrib.xml).

OpenGL specifies that when glGetUniformLocation (or glGetAttribLocation) is called for a built-in name (such as gl_DepthRange.near) it should return -1.

The Khronos WebGL test suite treats its inability to retrieve location data for built-ins as an error, resulting in a number of failures.  These failures are consistent between WebKit and Firefox.

Chrome filters these values, and therefore gets a successful test run.

To provide comparable test compliance, we should filter our results the same way, so the web developers see a consistent use case on all platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966067</commentid>
    <comment_count>1</comment_count>
      <attachid>220769</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-01-09 14:17:18 -0800</bug_when>
    <thetext>Created attachment 220769
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966069</commentid>
    <comment_count>2</comment_count>
      <attachid>220769</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2014-01-09 14:23:12 -0800</bug_when>
    <thetext>Comment on attachment 220769
Patch

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

&gt; Source/WebCore/platform/graphics/GraphicsContext3D.h:1063
&gt; +    OwnPtr&lt;ActiveShaderSymbolCounts&gt; m_shaderSymbolCount;

This should be an std::unique_ptr.

&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:327
&gt; +    const ShaderSourceEntry&amp; vertexEntry = m_shaderSourceMap.find(vertexShader)-&gt;value;
&gt; +    const ShaderSourceEntry&amp; fragmentEntry = m_shaderSourceMap.find(fragmentShader)-&gt;value;

You should assert that the map contains these entries.

&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:334
&gt; +    for (const auto&amp; it : fragmentEntry.uniformMap) {

This can probably just be

for (const auto&amp; entry : fragmentEntry.uniformMap.values()) {

&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:554
&gt; +    // Everything went fine, reset our statistics

I don&apos;t think this comment is necessary.

&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:555
&gt; +    m_shaderSymbolCount.release(); // Clear counts

Can just use = nullptr; here.

&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:1314
&gt; +    ShaderSourceMap::const_iterator result = m_shaderSourceMap.find(shader);

auto.

&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:1349
&gt; +    ShaderSourceMap::const_iterator result = m_shaderSourceMap.find(shader);

auto.

&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:1375
&gt; +    ShaderSourceMap::const_iterator result = m_shaderSourceMap.find(shader);

auto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966070</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-01-09 14:24:05 -0800</bug_when>
    <thetext>Attachment 220769 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/html/canvas/WebGLRenderingContext.cpp&apos;, u&apos;Source/WebCore/platform/graphics/GraphicsContext3D.h&apos;, u&apos;Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp&apos;, &apos;--commit-queue&apos;]&quot; exit_code: 1
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:708:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:709:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:708:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:709:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:740:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:741:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:740:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:741:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:1228:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:1280:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:1281:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
Total errors found: 11 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966071</commentid>
    <comment_count>4</comment_count>
      <attachid>220769</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2014-01-09 14:29:19 -0800</bug_when>
    <thetext>Comment on attachment 220769
Patch

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

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:2801
&gt; +        m_context-&gt;getNonBuiltinActiveSymbolCount(objectOrZero(program), pname, &amp;value);

Nit: Should it be BuiltIn (capital I)? Not a big deal to me.

&gt; Source/WebCore/platform/graphics/GraphicsContext3D.h:2
&gt; + * Copyright (C) 2009, 2013 Apple Inc. All rights reserved.

2014

&gt; Source/WebCore/platform/graphics/GraphicsContext3D.h:1021
&gt; +        static bool isBuiltinName(const String&amp; name)

Same here. Again, your call.

&gt; Source/WebCore/platform/graphics/GraphicsContext3D.h:1025
&gt; +            if (name.startsWith(&quot;gl_&quot;) || name.startsWith(&quot;webgl_&quot;) || name.startsWith(&quot;_webgl_&quot;))
&gt; +                return true;
&gt; +            return false;

Just return (name.startsWith...)

&gt; Source/WebCore/platform/graphics/GraphicsContext3D.h:1056
&gt; +            // Ignore the array components of these symbols for counting purposes

Nit: period.

&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:2
&gt; + * Copyright (C) 2010, 2013 Apple Inc. All rights reserved.

2014

&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:327
&gt; -    ShaderSourceEntry vertexEntry = m_shaderSourceMap.find(vertexShader)-&gt;value;
&gt; -    ShaderSourceEntry fragmentEntry = m_shaderSourceMap.find(fragmentShader)-&gt;value;
&gt; +    const ShaderSourceEntry&amp; vertexEntry = m_shaderSourceMap.find(vertexShader)-&gt;value;
&gt; +    const ShaderSourceEntry&amp; fragmentEntry = m_shaderSourceMap.find(fragmentShader)-&gt;value;

Cool!

&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:555
&gt; +    // Everything went fine, reset our statistics
&gt; +    m_shaderSymbolCount.release(); // Clear counts

Nit: two missing periods.

&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:1241
&gt; +    // Need to calculate statistics

Nit: periods. There are a few more cases in this function too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966078</commentid>
    <comment_count>5</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2014-01-09 14:43:15 -0800</bug_when>
    <thetext>It&apos;s possible there are bugs in the WebGL conformance suite in this area. https://github.com/KhronosGroup/WebGL/issues/236 describes a workaround.

Originally I thought there was a bug in the OpenGL ES conformance suite harness -- see https://github.com/KhronosGroup/WebGL/issues/390 -- but I&apos;ve been told that this is probably not the case.

Any help confirming this one way or another would be helpful. The good news is that at least the WebGL implementations will all be consistent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966086</commentid>
    <comment_count>6</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2014-01-09 14:57:44 -0800</bug_when>
    <thetext>(In reply to comment #5)

&gt; Any help confirming this one way or another would be helpful. The good news is that at least the WebGL implementations will all be consistent.

It seems that there is confusion in the area still. Well, we&apos;re confused! If the ES test suite says their test is correct, is it because they claim the built-ins are not &quot;active&quot; in this instance? If so, then we are probably correct to filter them out (even though it would be a bug in our OpenGL... or maybe non-ES OpenGL doesn&apos;t have the same behaviour as ES?). If not, we probably should back out the change here.

We haven&apos;t looked to see what Chromium is doing to filter out the names. Firefox is doing the same as WebKit, and failing the WebGL test.

I think for now we&apos;ll land the fix, become consistent with Chrome and pass the test in its current form.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966089</commentid>
    <comment_count>7</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-01-09 15:06:27 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 220769 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=220769&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:2801
&gt; &gt; +        m_context-&gt;getNonBuiltinActiveSymbolCount(objectOrZero(program), pname, &amp;value);
&gt; 
&gt; Nit: Should it be BuiltIn (capital I)? Not a big deal to me.

It looks like we typically use BuiltIn (capital I), so I will change!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966117</commentid>
    <comment_count>8</comment_count>
      <attachid>220783</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-01-09 16:15:22 -0800</bug_when>
    <thetext>Created attachment 220783
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966123</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-01-09 16:19:19 -0800</bug_when>
    <thetext>Attachment 220783 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/html/canvas/WebGLRenderingContext.cpp&apos;, u&apos;Source/WebCore/platform/graphics/GraphicsContext3D.h&apos;, u&apos;Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp&apos;, &apos;--commit-queue&apos;]&quot; exit_code: 1
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:703:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:723:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:724:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:733:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:723:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:724:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:733:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:763:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:764:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:773:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:763:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:764:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:773:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:1259:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:1277:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:1289:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
Total errors found: 16 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966146</commentid>
    <comment_count>10</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-01-09 17:15:49 -0800</bug_when>
    <thetext>Committed r161605: &lt;http://trac.webkit.org/changeset/161605&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966149</commentid>
    <comment_count>11</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-01-09 17:19:54 -0800</bug_when>
    <thetext>&lt;rdar://problem/15202048&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220769</attachid>
            <date>2014-01-09 14:17:18 -0800</date>
            <delta_ts>2014-01-09 16:15:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-126718-20140109141717.patch</filename>
            <type>text/plain</type>
            <size>17145</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MTU3MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQzIEBACisyMDE0LTAxLTA5ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXZWJHTF0gUmV0dXJuIGZp
bHRlcmVkIHJlc3VsdHMgZm9yIGdldFByb2dyYW1QYXJhbWV0ZXIgZm9yIEFDVElWRV9BVFRSSUJV
VEVTIGFuZCBBQ1RJVkVfVU5JRk9STVMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEyNjcxOAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTUyMDIwNDg+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ292ZXJl
ZCBieSB3ZWJnbC9jb25mb3JtYW5jZS9vZ2xlcy9HTC9iaXVEZXB0aFJhbmdlL2JpdURlcHRoUmFu
Z2VfMDAxX3RvXzAwMi5odG1sIGFuZAorICAgICAgICB3ZWJnbC9jb25mb3JtYW5jZS9vZ2xlcy9H
TC9nbF9GcmFnQ29vcmQvZ2xfRnJhZ0Nvb3JkXzAwMV90b18wMDMuaHRtbC4KKworICAgICAgICAq
IGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEFjdGl2ZUF0dHJpYik6IEFkZGVkIGxvZ2luZy4K
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QWN0aXZlVW5pZm9y
bSk6IEFkZGVkIGxvZ2dpbmcuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmdldEF0dHJpYkxvY2F0aW9uKTogRHJpdmUtYnktZml4LiBSZXR1cm4KKyAgICAgICAgLTEg
b24gbGluayBmYWlsdXJlIChhbiBpbnZhbGlkIGxvY2F0aW9uKSByYXRoZXIgdGhhbiAwIChhIHZh
bGlkCisgICAgICAgIGxvY2F0aW9uKSB3aGVuIGxpbmsgZmFpbHMuCisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFByb2dyYW1QYXJhbWV0ZXIpOiBVc2UgbmV3Cisg
ICAgICAgIG1ldGhvZCB0byByZXR1cm4gZmlsdGVyZWQgY291bnQuCisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFVuaWZvcm1Mb2NhdGlvbik6IFVzZSBudWxscHRy
CisgICAgICAgIHJhdGhlciB0aGFuIHJldHVybmluZyAwLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmg6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6U2hhZGVyU291cmNlRW50cnk6OmlzQnVpbHRpbk5hbWUpOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpBY3RpdmVTaGFkZXJTeW1ib2xDb3VudHM6
OkFjdGl2ZVNoYWRlclN5bWJvbENvdW50cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6QWN0aXZlU2hhZGVyU3ltYm9sQ291bnRzOjpjb3VudEZvclR5cGUpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkFjdGl2ZVNoYWRlclN5bWJvbENvdW50czo6
aXNWYWxpZEFjdGl2ZVN5bWJvbE5hbWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6cHJlY2lzaW9uc01hdGNoKTogRHJpdmUtYnktZml4LiBEb24n
dAorICAgICAgICBjb3B5IGdpYW50IG9iamVjdHMgdG8gcmVhZCBhIHNpbmdsZSB2YWx1ZS4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjb21waWxlU2hhZGVyKTogUmVsZWFz
ZSBmaWx0ZXJlZCBjb3VudAorICAgICAgICB3aGVuIHdlIGNoYW5nZSBzaGFkZXIgc291cmNlIGNv
ZGUuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlQXR0cmli
KTogQWRkZWQgbG9nZ2luZy4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRBY3RpdmVVbmlmb3JtKTogQWRkZWQgbG9nZ2luZy4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpvcmlnaW5hbFN5bWJvbE5hbWUpOiBVc2UgQysrMTEgbG9vcC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRBdHRyaWJMb2NhdGlvbik6IEFkZGVk
IGxvZ2dpbmcuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0Tm9uQnVp
bHRpbkFjdGl2ZVN5bWJvbENvdW50KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0U2hhZGVyaXYpOiBDb25zdCBjb3JyZWN0bmVzcy4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJJbmZvTG9nKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyU291cmNlKTogRGl0dG8u
CisKIDIwMTQtMDEtMDkgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4K
IAogICAgICAgICBOYXJyb3cgdW5kZXJsaW5lcyBhcmUgdG9vIHRhbGwKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAko
cmV2aXNpb24gMTYxNTEwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1
ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiSW50
U2l6ZS5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgogI2luY2x1ZGUgIk9FU0VsZW1lbnRJbmRleFVpbnQuaCIKICNpbmNsdWRlICJPRVNTdGFuZGFy
ZERlcml2YXRpdmVzLmgiCkBAIC0yMjU5LDYgKzIyNjAsOSBAQCBQYXNzUmVmUHRyPFdlYkdMQWN0
aXZlSW5mbz4gV2ViR0xSZW5kZXJpCiAgICAgQWN0aXZlSW5mbyBpbmZvOwogICAgIGlmICghbV9j
b250ZXh0LT5nZXRBY3RpdmVBdHRyaWIob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBpbmRleCwgaW5m
bykpCiAgICAgICAgIHJldHVybiAwOworCisgICAgTE9HKFdlYkdMLCAiUmV0dXJuaW5nIGFjdGl2
ZSBhdHRyaWJ1dGUgJWQ6ICVzIiwgaW5kZXgsIGluZm8ubmFtZS51dGY4KCkuZGF0YSgpKTsKKwog
ICAgIHJldHVybiBXZWJHTEFjdGl2ZUluZm86OmNyZWF0ZShpbmZvLm5hbWUsIGluZm8udHlwZSwg
aW5mby5zaXplKTsKIH0KIApAQCAtMjI3Myw2ICsyMjc3LDkgQEAgUGFzc1JlZlB0cjxXZWJHTEFj
dGl2ZUluZm8+IFdlYkdMUmVuZGVyaQogICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKQogICAg
ICAgICBpZiAoaW5mby5zaXplID4gMSAmJiAhaW5mby5uYW1lLmVuZHNXaXRoKCJbMF0iKSkKICAg
ICAgICAgICAgIGluZm8ubmFtZS5hcHBlbmQoIlswXSIpOworCisgICAgTE9HKFdlYkdMLCAiUmV0
dXJuaW5nIGFjdGl2ZSB1bmlmb3JtICVkOiAlcyIsIGluZGV4LCBpbmZvLm5hbWUudXRmOCgpLmRh
dGEoKSk7CisKICAgICByZXR1cm4gV2ViR0xBY3RpdmVJbmZvOjpjcmVhdGUoaW5mby5uYW1lLCBp
bmZvLnR5cGUsIGluZm8uc2l6ZSk7CiB9CiAKQEAgLTIzMDcsNyArMjMxNCw3IEBAIEdDM0RpbnQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBdHRyaWIKICAgICAgICAgcmV0dXJuIC0xOwogICAg
IGlmICghcHJvZ3JhbS0+Z2V0TGlua1N0YXR1cygpKSB7CiAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImdldEF0dHJpYkxvY2F0
aW9uIiwgInByb2dyYW0gbm90IGxpbmtlZCIpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
cmV0dXJuIC0xOwogICAgIH0KICAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRBdHRyaWJMb2NhdGlv
bihvYmplY3RPclplcm8ocHJvZ3JhbSksIG5hbWUpOwogfQpAQCAtMjc4Nyw5ICsyNzk0LDExIEBA
IFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFAKICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpMSU5LX1NUQVRVUzoKICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhw
cm9ncmFtLT5nZXRMaW5rU3RhdHVzKCkpOwogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFU
VEFDSEVEX1NIQURFUlM6CisgICAgICAgIG1fY29udGV4dC0+Z2V0UHJvZ3JhbWl2KG9iamVjdE9y
WmVybyhwcm9ncmFtKSwgcG5hbWUsICZ2YWx1ZSk7CisgICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8odmFsdWUpOwogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFDVElWRV9BVFRSSUJVVEVT
OgogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFDVElWRV9VTklGT1JNUzoKLSAgICAgICAg
bV9jb250ZXh0LT5nZXRQcm9ncmFtaXYob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBwbmFtZSwgJnZh
bHVlKTsKKyAgICAgICAgbV9jb250ZXh0LT5nZXROb25CdWlsdGluQWN0aXZlU3ltYm9sQ291bnQo
b2JqZWN0T3JaZXJvKHByb2dyYW0pLCBwbmFtZSwgJnZhbHVlKTsKICAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbyh2YWx1ZSk7CiAgICAgZGVmYXVsdDoKICAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFByb2dyYW1QYXJhbWV0ZXIi
LCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwpAQCAtMzE0NywyMSArMzE1NiwyMSBAQCBQYXNz
UmVmUHRyPFdlYkdMVW5pZm9ybUxvY2F0aW9uPiBXZWJHTFJlCiB7CiAgICAgVU5VU0VEX1BBUkFN
KGVjKTsKICAgICBpZiAoaXNDb250ZXh0TG9zdCgpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJn
ZXRVbmlmb3JtTG9jYXRpb24iLCBwcm9ncmFtKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIGlmICghdmFsaWRhdGVMb2NhdGlvbkxlbmd0aCgiZ2V0VW5p
Zm9ybUxvY2F0aW9uIiwgbmFtZSkpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICBpZiAoIXZhbGlkYXRlU3RyaW5nKCJnZXRVbmlmb3JtTG9jYXRpb24iLCBu
YW1lKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlm
IChpc1ByZWZpeFJlc2VydmVkKG5hbWUpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgaWYgKCFwcm9ncmFtLT5nZXRMaW5rU3RhdHVzKCkpIHsKICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
LCAiZ2V0VW5pZm9ybUxvY2F0aW9uIiwgInByb2dyYW0gbm90IGxpbmtlZCIpOwotICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIFdlYkdMU3RhdGVS
ZXN0b3Jlcih0aGlzLCBmYWxzZSk7CiAgICAgR0MzRGludCB1bmlmb3JtTG9jYXRpb24gPSBtX2Nv
bnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihvYmplY3RPclplcm8ocHJvZ3JhbSksIG5hbWUpOwog
ICAgIGlmICh1bmlmb3JtTG9jYXRpb24gPT0gLTEpCi0gICAgICAgIHJldHVybiAwOworICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAogICAgIEdDM0RpbnQgYWN0aXZlVW5pZm9ybXMgPSAwOwogICAg
IG1fY29udGV4dC0+Z2V0UHJvZ3JhbWl2KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgR3JhcGhpY3ND
b250ZXh0M0Q6OkFDVElWRV9VTklGT1JNUywgJmFjdGl2ZVVuaWZvcm1zKTsKQEAgLTMxODAsNyAr
MzE4OSw3IEBAIFBhc3NSZWZQdHI8V2ViR0xVbmlmb3JtTG9jYXRpb24+IFdlYkdMUmUKICAgICAg
ICAgICAgICAgICByZXR1cm4gV2ViR0xVbmlmb3JtTG9jYXRpb246OmNyZWF0ZShwcm9ncmFtLCB1
bmlmb3JtTG9jYXRpb24sIGluZm8udHlwZSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJu
IDA7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIFdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmdldFZlcnRleEF0dHJpYihHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0M0QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCShyZXZpc2lvbiAxNjE1MTApCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC02ODcsNiArNjg3LDcgQEAgcHVibGljOgogICAgIHZvaWQgZ2V0RnJhbWVidWZm
ZXJBdHRhY2htZW50UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2ht
ZW50LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpOwogICAgIHZvaWQgZ2V0SW50ZWdl
cnYoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKTsKICAgICB2b2lkIGdldFByb2dyYW1p
dihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1
ZSk7CisgICAgdm9pZCBnZXROb25CdWlsdGluQWN0aXZlU3ltYm9sQ291bnQoUGxhdGZvcm0zRE9i
amVjdCBwcm9ncmFtLCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpOwogICAgIFN0cmlu
ZyBnZXRQcm9ncmFtSW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0KTsKICAgICB2b2lkIGdldFJlbmRl
cmJ1ZmZlclBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0Rp
bnQqIHZhbHVlKTsKICAgICB2b2lkIGdldFNoYWRlcml2KFBsYXRmb3JtM0RPYmplY3QsIEdDM0Rl
bnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSk7CkBAIC0xMDE2LDExICsxMDE3LDUxIEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHZhcnlpbmdNYXA7CiAgICAgICAgICAgICByZXR1
cm4gdW5pZm9ybU1hcDsKICAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBib29sIGlzQnVpbHRp
bk5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobmFt
ZS5zdGFydHNXaXRoKCJnbF8iKSB8fCBuYW1lLnN0YXJ0c1dpdGgoIndlYmdsXyIpIHx8IG5hbWUu
c3RhcnRzV2l0aCgiX3dlYmdsXyIpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAgICAgfTsKIAogICAgIHR5cGVkZWYg
SGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0LCBTaGFkZXJTb3VyY2VFbnRyeT4gU2hhZGVyU291cmNl
TWFwOwogICAgIFNoYWRlclNvdXJjZU1hcCBtX3NoYWRlclNvdXJjZU1hcDsKIAorICAgIHN0cnVj
dCBBY3RpdmVTaGFkZXJTeW1ib2xDb3VudHMgeworICAgICAgICBHQzNEaW50IG5vbkJ1aWx0aW5B
dHRyaWJ1dGVDb3VudDsKKyAgICAgICAgR0MzRGludCBub25CdWlsdGluVW5pZm9ybUNvdW50Owor
CisgICAgICAgIEFjdGl2ZVNoYWRlclN5bWJvbENvdW50cyhHQzNEaW50IGF0dHJpYnV0ZUNvdW50
LCBHQzNEaW50IHVuaWZvcm1Db3VudCkKKyAgICAgICAgICAgIDogbm9uQnVpbHRpbkF0dHJpYnV0
ZUNvdW50KGF0dHJpYnV0ZUNvdW50KQorICAgICAgICAgICAgLCBub25CdWlsdGluVW5pZm9ybUNv
dW50KHVuaWZvcm1Db3VudCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgR0MzRGlu
dCBjb3VudEZvclR5cGUoR0MzRGVudW0gYWN0aXZlVHlwZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgQVNTRVJUKGFjdGl2ZVR5cGUgPT0gQUNUSVZFX0FUVFJJQlVURVMgfHwgYWN0aXZlVHlwZSA9
PSBBQ1RJVkVfVU5JRk9STVMpOworICAgICAgICAgICAgaWYgKGFjdGl2ZVR5cGUgPT0gQUNUSVZF
X0FUVFJJQlVURVMpCisgICAgICAgICAgICAgICAgcmV0dXJuIG5vbkJ1aWx0aW5BdHRyaWJ1dGVD
b3VudDsKKworICAgICAgICAgICAgcmV0dXJuIG5vbkJ1aWx0aW5Vbmlmb3JtQ291bnQ7CisgICAg
ICAgIH0KKworICAgICAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkQWN0aXZlU3ltYm9sTmFtZShjb25z
dCBTdHJpbmcmIG5hbWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChHcmFwaGljc0NvbnRl
eHQzRDo6U2hhZGVyU291cmNlRW50cnk6OmlzQnVpbHRpbk5hbWUobmFtZSkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBJZ25vcmUg
dGhlIGFycmF5IGNvbXBvbmVudHMgb2YgdGhlc2Ugc3ltYm9scyBmb3IgY291bnRpbmcgcHVycG9z
ZXMKKyAgICAgICAgICAgIGlmIChuYW1lLmVuZHNXaXRoKCJdIikpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAg
IH07CisgICAgT3duUHRyPEFjdGl2ZVNoYWRlclN5bWJvbENvdW50cz4gbV9zaGFkZXJTeW1ib2xD
b3VudDsKKwogICAgIFN0cmluZyBtYXBwZWRTeW1ib2xOYW1lKFBsYXRmb3JtM0RPYmplY3QgcHJv
Z3JhbSwgQU5HTEVTaGFkZXJTeW1ib2xUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpOwogICAgIFN0
cmluZyBvcmlnaW5hbFN5bWJvbE5hbWUoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBBTkdMRVNo
YWRlclN5bWJvbFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1v
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAkocmV2aXNpb24gMTYxNTEwKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4
dDNET3BlbkdMQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEwLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICogQ29weXJpZ2h0IChDKSAyMDEyIENoYW5nU2VvayBPaCA8c2hpdmFtaWRvd0BnbWFpbC5jb20+
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCkBAIC0zMjMsMTcgKzMyMywxNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpyZXNoYXBlKGludCB3aWR0CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OnByZWNpc2lv
bnNNYXRjaChQbGF0Zm9ybTNET2JqZWN0IHZlcnRleFNoYWRlciwgUGxhdGZvcm0zRE9iamVjdCBm
cmFnbWVudFNoYWRlcikgY29uc3QKIHsKLSAgICBTaGFkZXJTb3VyY2VFbnRyeSB2ZXJ0ZXhFbnRy
eSA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQodmVydGV4U2hhZGVyKS0+dmFsdWU7Ci0gICAgU2hh
ZGVyU291cmNlRW50cnkgZnJhZ21lbnRFbnRyeSA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoZnJh
Z21lbnRTaGFkZXIpLT52YWx1ZTsKKyAgICBjb25zdCBTaGFkZXJTb3VyY2VFbnRyeSYgdmVydGV4
RW50cnkgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHZlcnRleFNoYWRlciktPnZhbHVlOworICAg
IGNvbnN0IFNoYWRlclNvdXJjZUVudHJ5JiBmcmFnbWVudEVudHJ5ID0gbV9zaGFkZXJTb3VyY2VN
YXAuZmluZChmcmFnbWVudFNoYWRlciktPnZhbHVlOwogCiAgICAgSGFzaE1hcDxTdHJpbmcsIFNo
UHJlY2lzaW9uVHlwZT4gdmVydGV4U3ltYm9sUHJlY2lzaW9uTWFwOwogCi0gICAgZm9yIChhdXRv
IGl0ID0gdmVydGV4RW50cnkudW5pZm9ybU1hcC5iZWdpbigpOyBpdCAhPSB2ZXJ0ZXhFbnRyeS51
bmlmb3JtTWFwLmVuZCgpOyArK2l0KQotICAgICAgICB2ZXJ0ZXhTeW1ib2xQcmVjaXNpb25NYXAu
YWRkKGl0LT52YWx1ZS5tYXBwZWROYW1lLCBpdC0+dmFsdWUucHJlY2lzaW9uKTsKKyAgICBmb3Ig
KGNvbnN0IGF1dG8mIGl0IDogdmVydGV4RW50cnkudW5pZm9ybU1hcCkKKyAgICAgICAgdmVydGV4
U3ltYm9sUHJlY2lzaW9uTWFwLmFkZChpdC52YWx1ZS5tYXBwZWROYW1lLCBpdC52YWx1ZS5wcmVj
aXNpb24pOwogCi0gICAgZm9yIChhdXRvIGl0ID0gZnJhZ21lbnRFbnRyeS51bmlmb3JtTWFwLmJl
Z2luKCk7IGl0ICE9IGZyYWdtZW50RW50cnkudW5pZm9ybU1hcC5lbmQoKTsgKytpdCkgewotICAg
ICAgICBIYXNoTWFwPFN0cmluZywgU2hQcmVjaXNpb25UeXBlPjo6aXRlcmF0b3IgdmVydGV4U3lt
Ym9sID0gdmVydGV4U3ltYm9sUHJlY2lzaW9uTWFwLmZpbmQoaXQtPnZhbHVlLm1hcHBlZE5hbWUp
OwotICAgICAgICBpZiAodmVydGV4U3ltYm9sICE9IHZlcnRleFN5bWJvbFByZWNpc2lvbk1hcC5l
bmQoKSAmJiB2ZXJ0ZXhTeW1ib2wtPnZhbHVlICE9IGl0LT52YWx1ZS5wcmVjaXNpb24pCisgICAg
Zm9yIChjb25zdCBhdXRvJiBpdCA6IGZyYWdtZW50RW50cnkudW5pZm9ybU1hcCkgeworICAgICAg
ICBjb25zdCBhdXRvJiB2ZXJ0ZXhTeW1ib2wgPSB2ZXJ0ZXhTeW1ib2xQcmVjaXNpb25NYXAuZmlu
ZChpdC52YWx1ZS5tYXBwZWROYW1lKTsKKyAgICAgICAgaWYgKHZlcnRleFN5bWJvbCAhPSB2ZXJ0
ZXhTeW1ib2xQcmVjaXNpb25NYXAuZW5kKCkgJiYgdmVydGV4U3ltYm9sLT52YWx1ZSAhPSBpdC52
YWx1ZS5wcmVjaXNpb24pCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC01
NTAsNiArNTUwLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29tcGlsZVNoYWRlcihQbAog
ICAgICAgICBCQkxPRyhCbGFja0JlcnJ5OjpQbGF0Zm9ybTo6TG9nTGV2ZWxXYXJuLCAiVGhlIHNo
YWRlciB2YWxpZGF0ZWQsIGJ1dCBkaWRuJ3QgY29tcGlsZS5cbiIpOwogI2VuZGlmCiAgICAgfQor
CisgICAgLy8gRXZlcnl0aGluZyB3ZW50IGZpbmUsIHJlc2V0IG91ciBzdGF0aXN0aWNzCisgICAg
bV9zaGFkZXJTeW1ib2xDb3VudC5yZWxlYXNlKCk7IC8vIENsZWFyIGNvdW50cwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlcikKQEAgLTcw
MSw2ICs3MDQsMTEgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlQXR0cmliKAog
ICAgIAogICAgIFN0cmluZyBvcmlnaW5hbE5hbWUgPSBvcmlnaW5hbFN5bWJvbE5hbWUocHJvZ3Jh
bSwgU0hBREVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURSwgU3RyaW5nKG5hbWUuZ2V0KCksIG5hbWVM
ZW5ndGgpKTsKICAgICAKKyNpZm5kZWYgTkRFQlVHCisgICAgU3RyaW5nIHVuaWZvcm1OYW1lKG5h
bWUuZ2V0KCksIG5hbWVMZW5ndGgpOworICAgIExPRyhXZWJHTCwgIlByb2dyYW0gJWQgaXMgbWFw
cGluZyBhY3RpdmUgYXR0cmlidXRlICVkIGZyb20gJyVzJyB0byAnJXMnIiwgcHJvZ3JhbSwgaW5k
ZXgsIHVuaWZvcm1OYW1lLnV0ZjgoKS5kYXRhKCksIG9yaWdpbmFsTmFtZS51dGY4KCkuZGF0YSgp
KTsKKyNlbmRpZgorCiAgICAgaW5mby5uYW1lID0gb3JpZ2luYWxOYW1lOwogICAgIGluZm8udHlw
ZSA9IHR5cGU7CiAgICAgaW5mby5zaXplID0gc2l6ZTsKQEAgLTcyOCw2ICs3MzYsMTEgQEAgYm9v
bCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlVW5pZm9ybQogICAgIAogICAgIFN0cmluZyBv
cmlnaW5hbE5hbWUgPSBvcmlnaW5hbFN5bWJvbE5hbWUocHJvZ3JhbSwgU0hBREVSX1NZTUJPTF9U
WVBFX1VOSUZPUk0sIFN0cmluZyhuYW1lLmdldCgpLCBuYW1lTGVuZ3RoKSk7CiAgICAgCisjaWZu
ZGVmIE5ERUJVRworICAgIFN0cmluZyB1bmlmb3JtTmFtZShuYW1lLmdldCgpLCBuYW1lTGVuZ3Ro
KTsKKyAgICBMT0coV2ViR0wsICJQcm9ncmFtICVkIGlzIG1hcHBpbmcgYWN0aXZlIHVuaWZvcm0g
JWQgZnJvbSAnJXMnIHRvICclcyciLCBwcm9ncmFtLCBpbmRleCwgdW5pZm9ybU5hbWUudXRmOCgp
LmRhdGEoKSwgb3JpZ2luYWxOYW1lLnV0ZjgoKS5kYXRhKCkpOworI2VuZGlmCisgICAgCiAgICAg
aW5mby5uYW1lID0gb3JpZ2luYWxOYW1lOwogICAgIGluZm8udHlwZSA9IHR5cGU7CiAgICAgaW5m
by5zaXplID0gc2l6ZTsKQEAgLTc3NSwxMCArNzg4LDkgQEAgU3RyaW5nIEdyYXBoaWNzQ29udGV4
dDNEOjpvcmlnaW5hbFN5bWJvbAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAogICAg
ICAgICBjb25zdCBTaGFkZXJTeW1ib2xNYXAmIHN5bWJvbE1hcCA9IHJlc3VsdC0+dmFsdWUuc3lt
Ym9sTWFwKHN5bWJvbFR5cGUpOwotICAgICAgICBTaGFkZXJTeW1ib2xNYXA6OmNvbnN0X2l0ZXJh
dG9yIHN5bWJvbEVudHJ5OwotICAgICAgICBmb3IgKHN5bWJvbEVudHJ5ID0gc3ltYm9sTWFwLmJl
Z2luKCk7IHN5bWJvbEVudHJ5ICE9IHN5bWJvbE1hcC5lbmQoKTsgKytzeW1ib2xFbnRyeSkgewot
ICAgICAgICAgICAgaWYgKHN5bWJvbEVudHJ5LT52YWx1ZS5tYXBwZWROYW1lID09IG5hbWUpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbEVudHJ5LT5rZXk7CisgICAgICAgIGZvciAoY29u
c3QgYXV0byYgc3ltYm9sRW50cnkgOiBzeW1ib2xNYXApIHsKKyAgICAgICAgICAgIGlmIChzeW1i
b2xFbnRyeS52YWx1ZS5tYXBwZWROYW1lID09IG5hbWUpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHN5bWJvbEVudHJ5LmtleTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gbmFtZTsKQEAg
LTc5Miw3ICs4MDQsNyBAQCBpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEF0dHJpYkxvY2F0aW9u
CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAKICAgICBTdHJpbmcgbWFwcGVkTmFtZSA9IG1h
cHBlZFN5bWJvbE5hbWUocHJvZ3JhbSwgU0hBREVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURSwgbmFt
ZSk7Ci0gICAgTE9HKFdlYkdMLCAiOjpnZXRBdHRyaWJMb2NhdGlvbiBpcyBtYXBwaW5nICVzIHRv
ICVzIiwgbmFtZS51dGY4KCkuZGF0YSgpLCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkpOworICAg
IExPRyhXZWJHTCwgIjo6Z2xHZXRBdHRyaWJMb2NhdGlvbiBpcyBtYXBwaW5nICVzIHRvICVzIiwg
bmFtZS51dGY4KCkuZGF0YSgpLCBtYXBwZWROYW1lLnV0ZjgoKS5kYXRhKCkpOwogICAgIHJldHVy
biA6OmdsR2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgp
KTsKIH0KIApAQCAtMTIxMyw2ICsxMjI1LDYzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dFByb2dyYW1pdihQbGEKICAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIHBuYW1lLCB2YWx1
ZSk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldE5vbkJ1aWx0aW5BY3RpdmVTeW1i
b2xDb3VudChQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50
KiB2YWx1ZSkKK3sKKyAgICBBU1NFUlQoQUNUSVZFX0FUVFJJQlVURVMgPT0gcG5hbWUgfHwgQUNU
SVZFX1VOSUZPUk1TID09IHBuYW1lKTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm47
CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIGlmIChtX3NoYWRlclN5bWJvbENv
dW50KSB7CisgICAgICAgICp2YWx1ZSA9IG1fc2hhZGVyU3ltYm9sQ291bnQtPmNvdW50Rm9yVHlw
ZShwbmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgLy8gTmVlZCB0byBj
YWxjdWxhdGUgc3RhdGlzdGljcworICAgIEdDM0RzaXplaSBjb3VudDsKKyAgICBQbGF0Zm9ybTNE
T2JqZWN0IHNoYWRlcnNbMl07CisgICAgZ2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIDIsICZj
b3VudCwgc2hhZGVycyk7CisKKyAgICBMT0coV2ViR0wsICJQcm9ncmFtICVkIGhhcyAlZCBzaGFk
ZXJzIGF0dGFjaGVkIiwgcHJvZ3JhbSwgY291bnQpOworCisgICAgLy8gQnVpbGQgYSB0YWJsZSBv
ZiBrZXlzCisgICAgV1RGOjpIYXNoU2V0PFN0cmluZz4gYWN0aXZlQXR0cmlidXRlTmFtZXMsIGFj
dGl2ZVVuaWZvcm1OYW1lczsKKyAgICBmb3IgKEdDM0RzaXplaSBpID0gMDsgaSA8IGNvdW50OyAr
K2kpIHsKKyAgICAgICAgY29uc3QgYXV0byYgc2hhZGVyU291cmNlSXRlciA9IG1fc2hhZGVyU291
cmNlTWFwLmZpbmQoc2hhZGVyc1tpXSk7CisgICAgICAgIGlmIChzaGFkZXJTb3VyY2VJdGVyID09
IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgCisg
ICAgICAgIC8vIEFjY3VtdWxhdGUgdGhlIEF0dHJpYnV0ZXMKKyAgICAgICAgZm9yIChjb25zdCBh
dXRvJiBzeW1ib2xFbnRyeSA6IHNoYWRlclNvdXJjZUl0ZXItPnZhbHVlLmF0dHJpYnV0ZU1hcCkg
eworICAgICAgICAgICAgaWYgKCFBY3RpdmVTaGFkZXJTeW1ib2xDb3VudHM6OmlzVmFsaWRBY3Rp
dmVTeW1ib2xOYW1lKHN5bWJvbEVudHJ5LmtleSkpCisgICAgICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgICAgIGFjdGl2ZUF0dHJpYnV0ZU5hbWVzLmFkZChzeW1ib2xFbnRyeS5rZXkp
OworICAgICAgICB9CisKKyAgICAgICAgLy8gRG8gdGhlIHNhbWUgZm9yIHRoZSBVbmlmb3Jtcwor
ICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHN5bWJvbEVudHJ5IDogc2hhZGVyU291cmNlSXRlci0+
dmFsdWUudW5pZm9ybU1hcCkgeworICAgICAgICAgICAgaWYgKCFBY3RpdmVTaGFkZXJTeW1ib2xD
b3VudHM6OmlzVmFsaWRBY3RpdmVTeW1ib2xOYW1lKHN5bWJvbEVudHJ5LmtleSkpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGFjdGl2ZVVuaWZvcm1OYW1lcy5hZGQo
c3ltYm9sRW50cnkua2V5KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBtX3NoYWRlclN5
bWJvbENvdW50ID0gYWRvcHRQdHIobmV3IEFjdGl2ZVNoYWRlclN5bWJvbENvdW50cyhhY3RpdmVB
dHRyaWJ1dGVOYW1lcy5zaXplKCksIGFjdGl2ZVVuaWZvcm1OYW1lcy5zaXplKCkpKTsKKworICAg
ICp2YWx1ZSA9IG1fc2hhZGVyU3ltYm9sQ291bnQtPmNvdW50Rm9yVHlwZShwbmFtZSk7CisKKyNp
Zm5kZWYgTkRFQlVHCisgICAgY29uc3QgY2hhciogdHlwZUxhYmVsID0gKEFDVElWRV9BVFRSSUJV
VEVTID09IHBuYW1lKSA/ICJhdHRyaWJ1dGVzIiA6ICJ1bmlmb3JtcyI7CisgICAgTE9HKFdlYkdM
LCAiSW50ZXJuYWwgY291bnQgaW5kaWNhdGVzIHByb2dyYW0gJWQgaGFzICVkIGFjdGl2ZSAlcyIs
IHByb2dyYW0sICp2YWx1ZSwgdHlwZUxhYmVsKTsKKyAgICBHQzNEaW50IGNvdW50RnJvbUdMID0g
MDsKKyAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIHBuYW1lLCAmY291bnRGcm9tR0wpOwor
ICAgIExPRyhXZWJHTCwgIk9wZW5HTCdzIGNvbnRleHQgc2F5cyB0aGVyZSBhcmUgJWQgYWN0aXZl
ICVzIiwgY291bnRGcm9tR0wsIHR5cGVMYWJlbCk7CisjZW5kaWYKK30KKwogU3RyaW5nIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRQcm9ncmFtSW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0p
CiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwpAQCAtMTI0Miw3ICsxMzExLDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyaXYoUGxhdAogCiAgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CiAKLSAgICBTaGFkZXJTb3VyY2VNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291
cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICBTaGFkZXJTb3VyY2VNYXA6OmNvbnN0X2l0ZXJhdG9y
IHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKICAgICAKICAgICBzd2l0
Y2ggKHBuYW1lKSB7CiAgICAgY2FzZSBERUxFVEVfU1RBVFVTOgpAQCAtMTI3Nyw3ICsxMzQ2LDcg
QEAgU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJJbmZvTAogCiAgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CiAKLSAgICBTaGFkZXJTb3VyY2VNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9
IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICBTaGFkZXJTb3VyY2VNYXA6OmNv
bnN0X2l0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKICAg
ICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQogICAgICAgICByZXR1cm4g
U3RyaW5nKCk7IAogCkBAIC0xMzAzLDcgKzEzNzIsNyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0
M0Q6OmdldFNoYWRlclNvdXJjCiAKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKIAotICAgIFNo
YWRlclNvdXJjZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChz
aGFkZXIpOworICAgIFNoYWRlclNvdXJjZU1hcDo6Y29uc3RfaXRlcmF0b3IgcmVzdWx0ID0gbV9z
aGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOwogICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJT
b3VyY2VNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsgCiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220783</attachid>
            <date>2014-01-09 16:15:22 -0800</date>
            <delta_ts>2014-01-09 16:37:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-126718-20140109161521.patch</filename>
            <type>text/plain</type>
            <size>18564</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MTU3MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBACisyMDE0LTAxLTA5ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXZWJHTF0gUmV0dXJuIGZp
bHRlcmVkIHJlc3VsdHMgZm9yIGdldFByb2dyYW1QYXJhbWV0ZXIgZm9yIEFDVElWRV9BVFRSSUJV
VEVTIGFuZCBBQ1RJVkVfVU5JRk9STVMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEyNjcxOAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTUyMDIwNDg+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ292ZXJl
ZCBieSB3ZWJnbC9jb25mb3JtYW5jZS9vZ2xlcy9HTC9iaXVEZXB0aFJhbmdlL2JpdURlcHRoUmFu
Z2VfMDAxX3RvXzAwMi5odG1sIGFuZAorICAgICAgICB3ZWJnbC9jb25mb3JtYW5jZS9vZ2xlcy9H
TC9nbF9GcmFnQ29vcmQvZ2xfRnJhZ0Nvb3JkXzAwMV90b18wMDMuaHRtbC4KKworICAgICAgICAq
IGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEFjdGl2ZUF0dHJpYik6IEFkZGVkIGxvZ2luZy4K
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QWN0aXZlVW5pZm9y
bSk6IEFkZGVkIGxvZ2dpbmcuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmdldEF0dHJpYkxvY2F0aW9uKTogRHJpdmUtYnktZml4LiBSZXR1cm4KKyAgICAgICAgLTEg
b24gbGluayBmYWlsdXJlIChhbiBpbnZhbGlkIGxvY2F0aW9uKSByYXRoZXIgdGhhbiAwIChhIHZh
bGlkCisgICAgICAgIGxvY2F0aW9uKSB3aGVuIGxpbmsgZmFpbHMuCisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFByb2dyYW1QYXJhbWV0ZXIpOiBVc2UgbmV3Cisg
ICAgICAgIG1ldGhvZCB0byByZXR1cm4gZmlsdGVyZWQgY291bnQuCisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFVuaWZvcm1Mb2NhdGlvbik6IFVzZSBudWxscHRy
CisgICAgICAgIHJhdGhlciB0aGFuIHJldHVybmluZyAwLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmg6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6QWN0aXZlU2hhZGVyU3ltYm9sQ291bnRzOjpBY3RpdmVTaGFkZXJTeW1ib2xDb3Vu
dHMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkFjdGl2ZVNoYWRlclN5
bWJvbENvdW50czo6Y291bnRGb3JUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9v
cGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnByZWNpc2lvbnNNYXRjaCk6IERyaXZlLWJ5LWZpeC4gRG9u
J3QKKyAgICAgICAgY29weSBnaWFudCBvYmplY3RzIHRvIHJlYWQgYSBzaW5nbGUgdmFsdWUuCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y29tcGlsZVNoYWRlcik6IFJlbGVh
c2UgZmlsdGVyZWQgY291bnQKKyAgICAgICAgd2hlbiB3ZSBjaGFuZ2Ugc2hhZGVyIHNvdXJjZSBj
b2RlLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZUF0dHJp
YkltcGwpOiBSZW5hbWVkIGZyb20gZ2V0QWN0aXZlQXR0cmliLgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZUF0dHJpYik6IE1hcHMgZmlsdGVyZWQgaW5kaWNl
cyB0bworICAgICAgICByZWFsIE9wZW5HTCBpbmRpY2VzLgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZVVuaWZvcm1JbXBsKTogUmVuYW1lZCBmcm9tIGdldEFj
dGl2ZVVuaWZvcm0uCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0
aXZlVW5pZm9ybSk6IE1hcHMgZmlsdGVyZWQgaW5kaWNlcyB0bworICAgICAgICByZWFsIE9wZW5H
TCBpbmRpY2VzLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6Om9yaWdpbmFs
U3ltYm9sTmFtZSk6IFVzZSBDKysxMSBsb29wLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmdldEF0dHJpYkxvY2F0aW9uKTogQWRkZWQgbG9nZ2luZy4KKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXROb25CdWlsdGluQWN0aXZlU3ltYm9sQ291bnQp
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJp
dik6IENvbnN0IGNvcnJlY3RuZXNzLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmdldFNoYWRlckluZm9Mb2cpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpnZXRTaGFkZXJTb3VyY2UpOiBEaXR0by4KKwogMjAxNC0wMS0wOSAgTXlsZXMg
Qy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIE5hcnJvdyB1bmRl
cmxpbmVzIGFyZSB0b28gdGFsbApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiAxNjE1MTApCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDks
IDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXIuaCIKICNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5j
bHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAi
T0VTRWxlbWVudEluZGV4VWludC5oIgogI2luY2x1ZGUgIk9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMu
aCIKQEAgLTIyNTksNiArMjI2MCw5IEBAIFBhc3NSZWZQdHI8V2ViR0xBY3RpdmVJbmZvPiBXZWJH
TFJlbmRlcmkKICAgICBBY3RpdmVJbmZvIGluZm87CiAgICAgaWYgKCFtX2NvbnRleHQtPmdldEFj
dGl2ZUF0dHJpYihvYmplY3RPclplcm8ocHJvZ3JhbSksIGluZGV4LCBpbmZvKSkKICAgICAgICAg
cmV0dXJuIDA7CisKKyAgICBMT0coV2ViR0wsICJSZXR1cm5pbmcgYWN0aXZlIGF0dHJpYnV0ZSAl
ZDogJXMiLCBpbmRleCwgaW5mby5uYW1lLnV0ZjgoKS5kYXRhKCkpOworCiAgICAgcmV0dXJuIFdl
YkdMQWN0aXZlSW5mbzo6Y3JlYXRlKGluZm8ubmFtZSwgaW5mby50eXBlLCBpbmZvLnNpemUpOwog
fQogCkBAIC0yMjczLDYgKzIyNzcsOSBAQCBQYXNzUmVmUHRyPFdlYkdMQWN0aXZlSW5mbz4gV2Vi
R0xSZW5kZXJpCiAgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpCiAgICAgICAgIGlmIChpbmZv
LnNpemUgPiAxICYmICFpbmZvLm5hbWUuZW5kc1dpdGgoIlswXSIpKQogICAgICAgICAgICAgaW5m
by5uYW1lLmFwcGVuZCgiWzBdIik7CisKKyAgICBMT0coV2ViR0wsICJSZXR1cm5pbmcgYWN0aXZl
IHVuaWZvcm0gJWQ6ICVzIiwgaW5kZXgsIGluZm8ubmFtZS51dGY4KCkuZGF0YSgpKTsKKwogICAg
IHJldHVybiBXZWJHTEFjdGl2ZUluZm86OmNyZWF0ZShpbmZvLm5hbWUsIGluZm8udHlwZSwgaW5m
by5zaXplKTsKIH0KIApAQCAtMjMwNyw3ICsyMzE0LDcgQEAgR0MzRGludCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmdldEF0dHJpYgogICAgICAgICByZXR1cm4gLTE7CiAgICAgaWYgKCFwcm9ncmFt
LT5nZXRMaW5rU3RhdHVzKCkpIHsKICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2V0QXR0cmliTG9jYXRpb24iLCAicHJvZ3Jh
bSBub3QgbGlua2VkIik7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gLTE7CiAg
ICAgfQogICAgIHJldHVybiBtX2NvbnRleHQtPmdldEF0dHJpYkxvY2F0aW9uKG9iamVjdE9yWmVy
byhwcm9ncmFtKSwgbmFtZSk7CiB9CkBAIC0yNzg3LDkgKzI3OTQsMTEgQEAgV2ViR0xHZXRJbmZv
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UAogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkxJTktfU1RBVFVTOgogICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHByb2dyYW0tPmdldExp
bmtTdGF0dXMoKSk7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QVRUQUNIRURfU0hBREVS
UzoKKyAgICAgICAgbV9jb250ZXh0LT5nZXRQcm9ncmFtaXYob2JqZWN0T3JaZXJvKHByb2dyYW0p
LCBwbmFtZSwgJnZhbHVlKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZSk7CiAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUNUSVZFX0FUVFJJQlVURVM6CiAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6QUNUSVZFX1VOSUZPUk1TOgotICAgICAgICBtX2NvbnRleHQtPmdl
dFByb2dyYW1pdihvYmplY3RPclplcm8ocHJvZ3JhbSksIHBuYW1lLCAmdmFsdWUpOworICAgICAg
ICBtX2NvbnRleHQtPmdldE5vbkJ1aWx0SW5BY3RpdmVTeW1ib2xDb3VudChvYmplY3RPclplcm8o
cHJvZ3JhbSksIHBuYW1lLCAmdmFsdWUpOwogICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHZh
bHVlKTsKICAgICBkZWZhdWx0OgogICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UHJvZ3JhbVBhcmFtZXRlciIsICJpbnZhbGlkIHBh
cmFtZXRlciBuYW1lIik7CkBAIC0zMTQ3LDIxICszMTU2LDIxIEBAIFBhc3NSZWZQdHI8V2ViR0xV
bmlmb3JtTG9jYXRpb24+IFdlYkdMUmUKIHsKICAgICBVTlVTRURfUEFSQU0oZWMpOwogICAgIGlm
IChpc0NvbnRleHRMb3N0KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldFVuaWZvcm1Mb2Nh
dGlvbiIsIHByb2dyYW0pKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgaWYgKCF2YWxpZGF0ZUxvY2F0aW9uTGVuZ3RoKCJnZXRVbmlmb3JtTG9jYXRpb24i
LCBuYW1lKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IGlmICghdmFsaWRhdGVTdHJpbmcoImdldFVuaWZvcm1Mb2NhdGlvbiIsIG5hbWUpKQotICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgaWYgKGlzUHJlZml4UmVz
ZXJ2ZWQobmFtZSkpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICBpZiAoIXByb2dyYW0tPmdldExpbmtTdGF0dXMoKSkgewogICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZXRVbmlmb3Jt
TG9jYXRpb24iLCAicHJvZ3JhbSBub3QgbGlua2VkIik7Ci0gICAgICAgIHJldHVybiAwOworICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgV2ViR0xTdGF0ZVJlc3RvcmVyKHRoaXMs
IGZhbHNlKTsKICAgICBHQzNEaW50IHVuaWZvcm1Mb2NhdGlvbiA9IG1fY29udGV4dC0+Z2V0VW5p
Zm9ybUxvY2F0aW9uKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbmFtZSk7CiAgICAgaWYgKHVuaWZv
cm1Mb2NhdGlvbiA9PSAtMSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxs
cHRyOwogCiAgICAgR0MzRGludCBhY3RpdmVVbmlmb3JtcyA9IDA7CiAgICAgbV9jb250ZXh0LT5n
ZXRQcm9ncmFtaXYob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBHcmFwaGljc0NvbnRleHQzRDo6QUNU
SVZFX1VOSUZPUk1TLCAmYWN0aXZlVW5pZm9ybXMpOwpAQCAtMzE4MCw3ICszMTg5LDcgQEAgUGFz
c1JlZlB0cjxXZWJHTFVuaWZvcm1Mb2NhdGlvbj4gV2ViR0xSZQogICAgICAgICAgICAgICAgIHJl
dHVybiBXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6Y3JlYXRlKHByb2dyYW0sIHVuaWZvcm1Mb2NhdGlv
biwgaW5mby50eXBlKTsKICAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gMDsKKyAgICByZXR1
cm4gbnVsbHB0cjsKIH0KIAogV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0
VmVydGV4QXR0cmliKEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQzRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dDNELmgJKHJldmlzaW9uIDE2MTUxMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY3
Niw3ICs2NzYsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBnZW5lcmF0ZU1pcG1hcChHQzNEZW51bSB0
YXJnZXQpOwogCiAgICAgYm9vbCBnZXRBY3RpdmVBdHRyaWIoUGxhdGZvcm0zRE9iamVjdCBwcm9n
cmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYpOworICAgIGJvb2wgZ2V0QWN0aXZlQXR0
cmliSW1wbChQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3RpdmVJ
bmZvJik7CiAgICAgYm9vbCBnZXRBY3RpdmVVbmlmb3JtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3Jh
bSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUluZm8mKTsKKyAgICBib29sIGdldEFjdGl2ZVVuaWZv
cm1JbXBsKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2ZUlu
Zm8mKTsKICAgICB2b2lkIGdldEF0dGFjaGVkU2hhZGVycyhQbGF0Zm9ybTNET2JqZWN0IHByb2dy
YW0sIEdDM0RzaXplaSBtYXhDb3VudCwgR0MzRHNpemVpKiBjb3VudCwgUGxhdGZvcm0zRE9iamVj
dCogc2hhZGVycyk7CiAgICAgR0MzRGludCBnZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybTNET2Jq
ZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUpOwogICAgIHZvaWQgZ2V0Qm9vbGVhbnYoR0MzRGVudW0g
cG5hbWUsIEdDM0Rib29sZWFuKiB2YWx1ZSk7CkBAIC02ODcsNiArNjg5LDcgQEAgcHVibGljOgog
ICAgIHZvaWQgZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUp
OwogICAgIHZvaWQgZ2V0SW50ZWdlcnYoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKTsK
ICAgICB2b2lkIGdldFByb2dyYW1pdihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RlbnVt
IHBuYW1lLCBHQzNEaW50KiB2YWx1ZSk7CisgICAgdm9pZCBnZXROb25CdWlsdEluQWN0aXZlU3lt
Ym9sQ291bnQoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEZW51bSBwbmFtZSwgR0MzRGlu
dCogdmFsdWUpOwogICAgIFN0cmluZyBnZXRQcm9ncmFtSW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0
KTsKICAgICB2b2lkIGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwg
R0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKTsKICAgICB2b2lkIGdldFNoYWRlcml2KFBs
YXRmb3JtM0RPYmplY3QsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSk7CkBAIC0xMDIx
LDYgKzEwMjQsMjUgQEAgcHJpdmF0ZToKICAgICB0eXBlZGVmIEhhc2hNYXA8UGxhdGZvcm0zRE9i
amVjdCwgU2hhZGVyU291cmNlRW50cnk+IFNoYWRlclNvdXJjZU1hcDsKICAgICBTaGFkZXJTb3Vy
Y2VNYXAgbV9zaGFkZXJTb3VyY2VNYXA7CiAKKyAgICBzdHJ1Y3QgQWN0aXZlU2hhZGVyU3ltYm9s
Q291bnRzIHsKKyAgICAgICAgVmVjdG9yPEdDM0RpbnQ+IGZpbHRlcmVkVG9BY3R1YWxBdHRyaWJ1
dGVJbmRleE1hcDsKKyAgICAgICAgVmVjdG9yPEdDM0RpbnQ+IGZpbHRlcmVkVG9BY3R1YWxVbmlm
b3JtSW5kZXhNYXA7CisKKyAgICAgICAgQWN0aXZlU2hhZGVyU3ltYm9sQ291bnRzKCkKKyAgICAg
ICAgeworICAgICAgICB9CisKKyAgICAgICAgR0MzRGludCBjb3VudEZvclR5cGUoR0MzRGVudW0g
YWN0aXZlVHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGFjdGl2ZVR5cGUgPT0g
QUNUSVZFX0FUVFJJQlVURVMgfHwgYWN0aXZlVHlwZSA9PSBBQ1RJVkVfVU5JRk9STVMpOworICAg
ICAgICAgICAgaWYgKGFjdGl2ZVR5cGUgPT0gQUNUSVZFX0FUVFJJQlVURVMpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZpbHRlcmVkVG9BY3R1YWxBdHRyaWJ1dGVJbmRleE1hcC5zaXplKCk7CisK
KyAgICAgICAgICAgIHJldHVybiBmaWx0ZXJlZFRvQWN0dWFsVW5pZm9ybUluZGV4TWFwLnNpemUo
KTsKKyAgICAgICAgfQorICAgIH07CisgICAgc3RkOjp1bmlxdWVfcHRyPEFjdGl2ZVNoYWRlclN5
bWJvbENvdW50cz4gbV9zaGFkZXJTeW1ib2xDb3VudDsKKwogICAgIFN0cmluZyBtYXBwZWRTeW1i
b2xOYW1lKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgQU5HTEVTaGFkZXJTeW1ib2xUeXBlLCBj
b25zdCBTdHJpbmcmIG5hbWUpOwogICAgIFN0cmluZyBvcmlnaW5hbFN5bWJvbE5hbWUoUGxhdGZv
cm0zRE9iamVjdCBwcm9ncmFtLCBBTkdMRVNoYWRlclN5bWJvbFR5cGUsIGNvbnN0IFN0cmluZyYg
bmFtZSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29t
bW9uLmNwcAkocmV2aXNpb24gMTYxNTEwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEyIENoYW5nU2Vv
ayBPaCA8c2hpdmFtaWRvd0BnbWFpbC5jb20+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgUmVzZWFy
Y2ggSW4gTW90aW9uIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCkBAIC0zMjMsMTcgKzMy
MywxOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlKGludCB3aWR0CiAKIGJvb2wg
R3JhcGhpY3NDb250ZXh0M0Q6OnByZWNpc2lvbnNNYXRjaChQbGF0Zm9ybTNET2JqZWN0IHZlcnRl
eFNoYWRlciwgUGxhdGZvcm0zRE9iamVjdCBmcmFnbWVudFNoYWRlcikgY29uc3QKIHsKLSAgICBT
aGFkZXJTb3VyY2VFbnRyeSB2ZXJ0ZXhFbnRyeSA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQodmVy
dGV4U2hhZGVyKS0+dmFsdWU7Ci0gICAgU2hhZGVyU291cmNlRW50cnkgZnJhZ21lbnRFbnRyeSA9
IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoZnJhZ21lbnRTaGFkZXIpLT52YWx1ZTsKKyAgICBBU1NF
UlQobV9zaGFkZXJTb3VyY2VNYXAuY29udGFpbnModmVydGV4U2hhZGVyKSk7CisgICAgQVNTRVJU
KG1fc2hhZGVyU291cmNlTWFwLmNvbnRhaW5zKGZyYWdtZW50U2hhZGVyKSk7CisgICAgY29uc3Qg
YXV0byYgdmVydGV4RW50cnkgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHZlcnRleFNoYWRlcikt
PnZhbHVlOworICAgIGNvbnN0IGF1dG8mIGZyYWdtZW50RW50cnkgPSBtX3NoYWRlclNvdXJjZU1h
cC5maW5kKGZyYWdtZW50U2hhZGVyKS0+dmFsdWU7CiAKICAgICBIYXNoTWFwPFN0cmluZywgU2hQ
cmVjaXNpb25UeXBlPiB2ZXJ0ZXhTeW1ib2xQcmVjaXNpb25NYXA7CiAKLSAgICBmb3IgKGF1dG8g
aXQgPSB2ZXJ0ZXhFbnRyeS51bmlmb3JtTWFwLmJlZ2luKCk7IGl0ICE9IHZlcnRleEVudHJ5LnVu
aWZvcm1NYXAuZW5kKCk7ICsraXQpCi0gICAgICAgIHZlcnRleFN5bWJvbFByZWNpc2lvbk1hcC5h
ZGQoaXQtPnZhbHVlLm1hcHBlZE5hbWUsIGl0LT52YWx1ZS5wcmVjaXNpb24pOworICAgIGZvciAo
Y29uc3QgYXV0byYgZW50cnkgOiB2ZXJ0ZXhFbnRyeS51bmlmb3JtTWFwKQorICAgICAgICB2ZXJ0
ZXhTeW1ib2xQcmVjaXNpb25NYXAuYWRkKGVudHJ5LnZhbHVlLm1hcHBlZE5hbWUsIGVudHJ5LnZh
bHVlLnByZWNpc2lvbik7CiAKLSAgICBmb3IgKGF1dG8gaXQgPSBmcmFnbWVudEVudHJ5LnVuaWZv
cm1NYXAuYmVnaW4oKTsgaXQgIT0gZnJhZ21lbnRFbnRyeS51bmlmb3JtTWFwLmVuZCgpOyArK2l0
KSB7Ci0gICAgICAgIEhhc2hNYXA8U3RyaW5nLCBTaFByZWNpc2lvblR5cGU+OjppdGVyYXRvciB2
ZXJ0ZXhTeW1ib2wgPSB2ZXJ0ZXhTeW1ib2xQcmVjaXNpb25NYXAuZmluZChpdC0+dmFsdWUubWFw
cGVkTmFtZSk7Ci0gICAgICAgIGlmICh2ZXJ0ZXhTeW1ib2wgIT0gdmVydGV4U3ltYm9sUHJlY2lz
aW9uTWFwLmVuZCgpICYmIHZlcnRleFN5bWJvbC0+dmFsdWUgIT0gaXQtPnZhbHVlLnByZWNpc2lv
bikKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGVudHJ5IDogZnJhZ21lbnRFbnRyeS51bmlmb3JtTWFw
KSB7CisgICAgICAgIGNvbnN0IGF1dG8mIHZlcnRleFN5bWJvbCA9IHZlcnRleFN5bWJvbFByZWNp
c2lvbk1hcC5maW5kKGVudHJ5LnZhbHVlLm1hcHBlZE5hbWUpOworICAgICAgICBpZiAodmVydGV4
U3ltYm9sICE9IHZlcnRleFN5bWJvbFByZWNpc2lvbk1hcC5lbmQoKSAmJiB2ZXJ0ZXhTeW1ib2wt
PnZhbHVlICE9IGVudHJ5LnZhbHVlLnByZWNpc2lvbikKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAKQEAgLTU1MCw2ICs1NTIsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpj
b21waWxlU2hhZGVyKFBsCiAgICAgICAgIEJCTE9HKEJsYWNrQmVycnk6OlBsYXRmb3JtOjpMb2dM
ZXZlbFdhcm4sICJUaGUgc2hhZGVyIHZhbGlkYXRlZCwgYnV0IGRpZG4ndCBjb21waWxlLlxuIik7
CiAjZW5kaWYKICAgICB9CisKKyAgICBtX3NoYWRlclN5bWJvbENvdW50ID0gbnVsbHB0cjsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29weVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNE
aW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIp
CkBAIC02ODIsNyArNjg2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2VuZXJhdGVNaXBt
YXAoRwogICAgIDo6Z2xHZW5lcmF0ZU1pcG1hcCh0YXJnZXQpOwogfQogCi1ib29sIEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRBY3RpdmVBdHRyaWIoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNE
dWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dEFjdGl2ZUF0dHJpYkltcGwoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRl
eCwgQWN0aXZlSW5mbyYgaW5mbykKIHsKICAgICBpZiAoIXByb2dyYW0pIHsKICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CkBAIC03MDEsMTMgKzcwNSwyNiBAQCBib29s
IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBY3RpdmVBdHRyaWIoCiAgICAgCiAgICAgU3RyaW5nIG9y
aWdpbmFsTmFtZSA9IG9yaWdpbmFsU3ltYm9sTmFtZShwcm9ncmFtLCBTSEFERVJfU1lNQk9MX1RZ
UEVfQVRUUklCVVRFLCBTdHJpbmcobmFtZS5nZXQoKSwgbmFtZUxlbmd0aCkpOwogICAgIAorI2lm
bmRlZiBOREVCVUcKKyAgICBTdHJpbmcgdW5pZm9ybU5hbWUobmFtZS5nZXQoKSwgbmFtZUxlbmd0
aCk7CisgICAgTE9HKFdlYkdMLCAiUHJvZ3JhbSAlZCBpcyBtYXBwaW5nIGFjdGl2ZSBhdHRyaWJ1
dGUgJWQgZnJvbSAnJXMnIHRvICclcyciLCBwcm9ncmFtLCBpbmRleCwgdW5pZm9ybU5hbWUudXRm
OCgpLmRhdGEoKSwgb3JpZ2luYWxOYW1lLnV0ZjgoKS5kYXRhKCkpOworI2VuZGlmCisKICAgICBp
bmZvLm5hbWUgPSBvcmlnaW5hbE5hbWU7CiAgICAgaW5mby50eXBlID0gdHlwZTsKICAgICBpbmZv
LnNpemUgPSBzaXplOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4
dDNEOjpnZXRBY3RpdmVVbmlmb3JtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQg
aW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBY3Rp
dmVBdHRyaWIoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZl
SW5mbyYgaW5mbykKK3sKKyAgICBBU1NFUlQoIW1fc2hhZGVyU3ltYm9sQ291bnQgfHwgaW5kZXgg
PCBtX3NoYWRlclN5bWJvbENvdW50LT5maWx0ZXJlZFRvQWN0dWFsQXR0cmlidXRlSW5kZXhNYXAu
c2l6ZSgpKTsKKyAgICBHQzNEdWludCByYXdJbmRleCA9IChtX3NoYWRlclN5bWJvbENvdW50KSA/
IG1fc2hhZGVyU3ltYm9sQ291bnQtPmZpbHRlcmVkVG9BY3R1YWxBdHRyaWJ1dGVJbmRleE1hcFtp
bmRleF0gOiBpbmRleDsKKworICAgIHJldHVybiBnZXRBY3RpdmVBdHRyaWJJbXBsKHByb2dyYW0s
IHJhd0luZGV4LCBpbmZvKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZl
VW5pZm9ybUltcGwoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0
aXZlSW5mbyYgaW5mbykKIHsKICAgICBpZiAoIXByb2dyYW0pIHsKICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoSU5WQUxJRF9WQUxVRSk7CkBAIC03MjgsMTIgKzc0NSwyNSBAQCBib29sIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRBY3RpdmVVbmlmb3JtCiAgICAgCiAgICAgU3RyaW5nIG9yaWdpbmFs
TmFtZSA9IG9yaWdpbmFsU3ltYm9sTmFtZShwcm9ncmFtLCBTSEFERVJfU1lNQk9MX1RZUEVfVU5J
Rk9STSwgU3RyaW5nKG5hbWUuZ2V0KCksIG5hbWVMZW5ndGgpKTsKICAgICAKKyNpZm5kZWYgTkRF
QlVHCisgICAgU3RyaW5nIHVuaWZvcm1OYW1lKG5hbWUuZ2V0KCksIG5hbWVMZW5ndGgpOworICAg
IExPRyhXZWJHTCwgIlByb2dyYW0gJWQgaXMgbWFwcGluZyBhY3RpdmUgdW5pZm9ybSAlZCBmcm9t
ICclcycgdG8gJyVzJyIsIHByb2dyYW0sIGluZGV4LCB1bmlmb3JtTmFtZS51dGY4KCkuZGF0YSgp
LCBvcmlnaW5hbE5hbWUudXRmOCgpLmRhdGEoKSk7CisjZW5kaWYKKyAgICAKICAgICBpbmZvLm5h
bWUgPSBvcmlnaW5hbE5hbWU7CiAgICAgaW5mby50eXBlID0gdHlwZTsKICAgICBpbmZvLnNpemUg
PSBzaXplOwogICAgIHJldHVybiB0cnVlOwogfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRBY3RpdmVVbmlmb3JtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgs
IEFjdGl2ZUluZm8mIGluZm8pCit7CisgICAgQVNTRVJUKCFtX3NoYWRlclN5bWJvbENvdW50IHx8
IGluZGV4IDwgbV9zaGFkZXJTeW1ib2xDb3VudC0+ZmlsdGVyZWRUb0FjdHVhbFVuaWZvcm1JbmRl
eE1hcC5zaXplKCkpOworICAgIEdDM0R1aW50IHJhd0luZGV4ID0gKG1fc2hhZGVyU3ltYm9sQ291
bnQpID8gbV9zaGFkZXJTeW1ib2xDb3VudC0+ZmlsdGVyZWRUb0FjdHVhbFVuaWZvcm1JbmRleE1h
cFtpbmRleF0gOiBpbmRleDsKICAgICAKKyAgICByZXR1cm4gZ2V0QWN0aXZlVW5pZm9ybUltcGwo
cHJvZ3JhbSwgcmF3SW5kZXgsIGluZm8pOworfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEc2l6ZWkgbWF4
Q291bnQsIEdDM0RzaXplaSogY291bnQsIFBsYXRmb3JtM0RPYmplY3QqIHNoYWRlcnMpCiB7CiAg
ICAgaWYgKCFwcm9ncmFtKSB7CkBAIC03NzUsMTAgKzgwNSw5IEBAIFN0cmluZyBHcmFwaGljc0Nv
bnRleHQzRDo6b3JpZ2luYWxTeW1ib2wKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAK
ICAgICAgICAgY29uc3QgU2hhZGVyU3ltYm9sTWFwJiBzeW1ib2xNYXAgPSByZXN1bHQtPnZhbHVl
LnN5bWJvbE1hcChzeW1ib2xUeXBlKTsKLSAgICAgICAgU2hhZGVyU3ltYm9sTWFwOjpjb25zdF9p
dGVyYXRvciBzeW1ib2xFbnRyeTsKLSAgICAgICAgZm9yIChzeW1ib2xFbnRyeSA9IHN5bWJvbE1h
cC5iZWdpbigpOyBzeW1ib2xFbnRyeSAhPSBzeW1ib2xNYXAuZW5kKCk7ICsrc3ltYm9sRW50cnkp
IHsKLSAgICAgICAgICAgIGlmIChzeW1ib2xFbnRyeS0+dmFsdWUubWFwcGVkTmFtZSA9PSBuYW1l
KQotICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2xFbnRyeS0+a2V5OworICAgICAgICBmb3Ig
KGNvbnN0IGF1dG8mIHN5bWJvbEVudHJ5IDogc3ltYm9sTWFwKSB7CisgICAgICAgICAgICBpZiAo
c3ltYm9sRW50cnkudmFsdWUubWFwcGVkTmFtZSA9PSBuYW1lKQorICAgICAgICAgICAgICAgIHJl
dHVybiBzeW1ib2xFbnRyeS5rZXk7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIG5hbWU7
CkBAIC03OTIsNyArODIxLDcgQEAgaW50IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBdHRyaWJMb2Nh
dGlvbgogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogCiAgICAgU3RyaW5nIG1hcHBlZE5hbWUg
PSBtYXBwZWRTeW1ib2xOYW1lKHByb2dyYW0sIFNIQURFUl9TWU1CT0xfVFlQRV9BVFRSSUJVVEUs
IG5hbWUpOwotICAgIExPRyhXZWJHTCwgIjo6Z2V0QXR0cmliTG9jYXRpb24gaXMgbWFwcGluZyAl
cyB0byAlcyIsIG5hbWUudXRmOCgpLmRhdGEoKSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgpKTsK
KyAgICBMT0coV2ViR0wsICI6OmdsR2V0QXR0cmliTG9jYXRpb24gaXMgbWFwcGluZyAlcyB0byAl
cyIsIG5hbWUudXRmOCgpLmRhdGEoKSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgpKTsKICAgICBy
ZXR1cm4gOjpnbEdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIG1hcHBlZE5hbWUudXRmOCgpLmRh
dGEoKSk7CiB9CiAKQEAgLTEyMTMsNiArMTI0Miw0OSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpnZXRQcm9ncmFtaXYoUGxhCiAgICAgOjpnbEdldFByb2dyYW1pdihwcm9ncmFtLCBwbmFtZSwg
dmFsdWUpOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXROb25CdWlsdEluQWN0aXZl
U3ltYm9sQ291bnQoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEZW51bSBwbmFtZSwgR0Mz
RGludCogdmFsdWUpCit7CisgICAgQVNTRVJUKEFDVElWRV9BVFRSSUJVVEVTID09IHBuYW1lIHx8
IEFDVElWRV9VTklGT1JNUyA9PSBwbmFtZSk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBpZiAobV9zaGFkZXJTeW1i
b2xDb3VudCkgeworICAgICAgICAqdmFsdWUgPSBtX3NoYWRlclN5bWJvbENvdW50LT5jb3VudEZv
clR5cGUocG5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9zaGFkZXJTeW1i
b2xDb3VudCA9IHN0ZDo6bWFrZV91bmlxdWU8QWN0aXZlU2hhZGVyU3ltYm9sQ291bnRzPigpOwor
CisgICAgLy8gUmV0cmlldmUgdGhlIGFjdGl2ZSBhdHRyaWJ1dGVzLCBidWlsZCBhIGZpbHRlcmVk
IGNvdW50LCBhbmQgYSBtYXBwaW5nIG9mCisgICAgLy8gb3VyIGludGVybmFsIGF0dHJpYnV0ZXMg
aW5kZXhlcyB0byB0aGUgcmVhbCB1bmZpbHRlcmVkIGluZGV4ZXMgaW5zaWRlIE9wZW5HTC4KKyAg
ICBHQzNEaW50IGF0dHJpYnV0ZUNvdW50ID0gMDsKKyAgICA6OmdsR2V0UHJvZ3JhbWl2KHByb2dy
YW0sIEFDVElWRV9BVFRSSUJVVEVTLCAmYXR0cmlidXRlQ291bnQpOworICAgIGZvciAoR0MzRGlu
dCBpID0gMDsgaSA8IGF0dHJpYnV0ZUNvdW50OyArK2kpIHsKKyAgICAgICAgQWN0aXZlSW5mbyBp
bmZvOworICAgICAgICBnZXRBY3RpdmVBdHRyaWJJbXBsKHByb2dyYW0sIGksIGluZm8pOworICAg
ICAgICBpZiAoaW5mby5uYW1lLnN0YXJ0c1dpdGgoImdsXyIpKQorICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgbV9zaGFkZXJTeW1ib2xDb3VudC0+ZmlsdGVyZWRUb0FjdHVhbEF0dHJp
YnV0ZUluZGV4TWFwLmFwcGVuZChpKTsKKyAgICB9CisgICAgCisgICAgLy8gRG8gdGhlIHNhbWUg
Zm9yIHVuaWZvcm1zLgorICAgIEdDM0RpbnQgdW5pZm9ybUNvdW50ID0gMDsKKyAgICA6OmdsR2V0
UHJvZ3JhbWl2KHByb2dyYW0sIEFDVElWRV9VTklGT1JNUywgJnVuaWZvcm1Db3VudCk7CisgICAg
Zm9yIChHQzNEaW50IGkgPSAwOyBpIDwgdW5pZm9ybUNvdW50OyArK2kpIHsKKyAgICAgICAgQWN0
aXZlSW5mbyBpbmZvOworICAgICAgICBnZXRBY3RpdmVVbmlmb3JtSW1wbChwcm9ncmFtLCBpLCBp
bmZvKTsKKyAgICAgICAgaWYgKGluZm8ubmFtZS5zdGFydHNXaXRoKCJnbF8iKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgbV9zaGFkZXJTeW1ib2xDb3VudC0+Zmls
dGVyZWRUb0FjdHVhbFVuaWZvcm1JbmRleE1hcC5hcHBlbmQoaSk7CisgICAgfQorICAgIAorICAg
ICp2YWx1ZSA9IG1fc2hhZGVyU3ltYm9sQ291bnQtPmNvdW50Rm9yVHlwZShwbmFtZSk7Cit9CisK
IFN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbUluZm9Mb2coUGxhdGZvcm0zRE9i
amVjdCBwcm9ncmFtKQogewogICAgIEFTU0VSVChwcm9ncmFtKTsKQEAgLTEyNDIsNyArMTMxNCw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlcml2KFBsYXQKIAogICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOwogCi0gICAgU2hhZGVyU291cmNlTWFwOjppdGVyYXRvciByZXN1bHQg
PSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAgY29uc3QgYXV0byYgcmVzdWx0
ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOwogICAgIAogICAgIHN3aXRjaCAocG5h
bWUpIHsKICAgICBjYXNlIERFTEVURV9TVEFUVVM6CkBAIC0xMjc3LDExICsxMzQ5LDExIEBAIFN0
cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVySW5mb0wKIAogICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOwogCi0gICAgU2hhZGVyU291cmNlTWFwOjppdGVyYXRvciByZXN1bHQgPSBtX3No
YWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAgY29uc3QgYXV0byYgcmVzdWx0ID0gbV9z
aGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOwogICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJT
b3VyY2VNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsgCiAKLSAgICBTaGFkZXJT
b3VyY2VFbnRyeSBlbnRyeSA9IHJlc3VsdC0+dmFsdWU7CisgICAgY29uc3QgU2hhZGVyU291cmNl
RW50cnkmIGVudHJ5ID0gcmVzdWx0LT52YWx1ZTsKICAgICBpZiAoIWVudHJ5LmlzVmFsaWQpCiAg
ICAgICAgIHJldHVybiBlbnRyeS5sb2c7CiAKQEAgLTEzMDMsNyArMTM3NSw3IEBAIFN0cmluZyBH
cmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyU291cmMKIAogICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwogCi0gICAgU2hhZGVyU291cmNlTWFwOjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNv
dXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAgY29uc3QgYXV0byYgcmVzdWx0ID0gbV9zaGFkZXJT
b3VyY2VNYXAuZmluZChzaGFkZXIpOwogICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VN
YXAuZW5kKCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsgCiAK
</data>
<flag name="review"
          id="244559"
          type_id="1"
          status="+"
          setter="dino"
    />
          </attachment>
      

    </bug>

</bugzilla>