<?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>70989</bug_id>
          
          <creation_ts>2011-10-26 19:40:01 -0700</creation_ts>
          <short_desc>Attribute and Uniform variable names need translation in shader</short_desc>
          <delta_ts>2012-10-04 12:32:11 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>70981</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kenneth Russell">kbr</reporter>
          <assigned_to name="Dean Jackson">dino</assigned_to>
          <cc>abarth</cc>
    
    <cc>achicu</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>cmarrin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dino</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>joepeck</cc>
    
    <cc>mdelaney7</cc>
    
    <cc>mvujovic</cc>
    
    <cc>noam</cc>
    
    <cc>peter+ews</cc>
    
    <cc>tkent+wkapi</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zmo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>491332</commentid>
    <comment_count>0</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-10-26 19:40:01 -0700</bug_when>
    <thetext>The WebGL layout tests introduced in Bug 70981 are currently failing on Mac. It looks like an upgrade of the copy of ANGLE in WebKit, along with the use of the long identifier name mapping flag, will fix these failures. They&apos;re being skipped for the moment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518839</commentid>
    <comment_count>1</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2011-12-10 16:36:55 -0800</bug_when>
    <thetext>&lt;rdar://problem/10516646&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582461</commentid>
    <comment_count>2</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-03-19 16:52:38 -0700</bug_when>
    <thetext>I was hoping just passing SH_MAP_LONG_VARIABLE_NAMES to the ANGLE compile step would be enough, but it seems Ken is right - we&apos;d need to update ANGLE. Unfortunately that looks like a bit of a pain.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582489</commentid>
    <comment_count>3</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-03-19 17:10:23 -0700</bug_when>
    <thetext>Adding just this is enough to avoid the ASSERT on debug builds:

bool validateSuccess = ShCompile(compiler, shaderSourceStrings, 1, SH_OBJECT_CODE | SH_MAP_LONG_VARIABLE_NAMES | SH_ATTRIBUTES_UNIFORMS);

But then the test fails because it can&apos;t find the attribute.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583589</commentid>
    <comment_count>4</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-03-20 16:24:27 -0700</bug_when>
    <thetext>I&apos;m going to submit a patch to fix the ANGLE translation so the shaders will compile on Mac. The tests will still fail, but I&apos;ll check in expected results for Mac.

Meanwhile, the real fix is: https://bugs.webkit.org/show_bug.cgi?id=81717</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583600</commentid>
    <comment_count>5</comment_count>
      <attachid>132925</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-03-20 16:32:21 -0700</bug_when>
    <thetext>Created attachment 132925
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583670</commentid>
    <comment_count>6</comment_count>
      <attachid>132925</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-20 17:55:57 -0700</bug_when>
    <thetext>Comment on attachment 132925
Patch

Attachment 132925 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/12071067

New failing tests:
platform/chromium/virtual/gpu/fast/canvas/webgl/uniform-location-length-limits.html
fast/canvas/webgl/uniform-location-length-limits.html
platform/chromium/virtual/gpu/fast/canvas/webgl/attrib-location-length-limits.html
fast/canvas/webgl/attrib-location-length-limits.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583673</commentid>
    <comment_count>7</comment_count>
      <attachid>132925</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2012-03-20 18:08:42 -0700</bug_when>
    <thetext>Comment on attachment 132925
Patch

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

&gt; Source/WebCore/platform/graphics/ANGLEWebKitBridge.cpp:91
&gt; +    bool validateSuccess = ShCompile(compiler, shaderSourceStrings, 1, SH_OBJECT_CODE | SH_MAP_LONG_VARIABLE_NAMES | SH_ATTRIBUTES_UNIFORMS);

By turning this one, you need to manage the mapping on webkit side, say, user queries a uniform location using the original long name, you need to map it to short name before sending the gl calls to underlying driver.  Otherwise you won&apos;t get the location.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583974</commentid>
    <comment_count>8</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-03-21 04:12:49 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 132925 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=132925&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ANGLEWebKitBridge.cpp:91
&gt; &gt; +    bool validateSuccess = ShCompile(compiler, shaderSourceStrings, 1, SH_OBJECT_CODE | SH_MAP_LONG_VARIABLE_NAMES | SH_ATTRIBUTES_UNIFORMS);
&gt; 
&gt; By turning this one, you need to manage the mapping on webkit side, say, user queries a uniform location using the original long name, you need to map it to short name before sending the gl calls to underlying driver.  Otherwise you won&apos;t get the location.

Ah, thanks for explaining. I was hoping to leave that to a later patch. For now I just wanted to avoid the crasher.

I&apos;ll add the management. Could you point me to where Chromium does it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>584415</commentid>
    <comment_count>9</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2012-03-21 11:36:00 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; (From update of attachment 132925 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=132925&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/ANGLEWebKitBridge.cpp:91
&gt; &gt; &gt; +    bool validateSuccess = ShCompile(compiler, shaderSourceStrings, 1, SH_OBJECT_CODE | SH_MAP_LONG_VARIABLE_NAMES | SH_ATTRIBUTES_UNIFORMS);
&gt; &gt; 
&gt; &gt; By turning this one, you need to manage the mapping on webkit side, say, user queries a uniform location using the original long name, you need to map it to short name before sending the gl calls to underlying driver.  Otherwise you won&apos;t get the location.
&gt; 
&gt; Ah, thanks for explaining. I was hoping to leave that to a later patch. For now I just wanted to avoid the crasher.
&gt; 
&gt; I&apos;ll add the management. Could you point me to where Chromium does it?

goto cs.chromium.org and search for shader_translator.cc and program_manager.cc.

For program_manager.cc, look at Update().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733117</commentid>
    <comment_count>10</comment_count>
      <attachid>166758</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-10-02 15:05:45 -0700</bug_when>
    <thetext>Created attachment 166758
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733122</commentid>
    <comment_count>11</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-10-02 15:09:02 -0700</bug_when>
    <thetext>Adding Alex and Max because this touches CSS custom filter code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733127</commentid>
    <comment_count>12</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-10-02 15:10:17 -0700</bug_when>
    <thetext>*** Bug 94034 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733133</commentid>
    <comment_count>13</comment_count>
      <attachid>166758</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-02 15:13:33 -0700</bug_when>
    <thetext>Comment on attachment 166758
Patch

Attachment 166758 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/14135360</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733135</commentid>
    <comment_count>14</comment_count>
      <attachid>166758</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-10-02 15:15:37 -0700</bug_when>
    <thetext>Comment on attachment 166758
Patch

Obviously fails on chromium.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733141</commentid>
    <comment_count>15</comment_count>
      <attachid>166762</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-10-02 15:22:51 -0700</bug_when>
    <thetext>Created attachment 166762
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733147</commentid>
    <comment_count>16</comment_count>
      <attachid>166762</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-02 15:30:40 -0700</bug_when>
    <thetext>Comment on attachment 166762
Patch

Attachment 166762 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/14137334</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733149</commentid>
    <comment_count>17</comment_count>
      <attachid>166762</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2012-10-02 15:35:07 -0700</bug_when>
    <thetext>Comment on attachment 166762
Patch

Attachment 166762 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/14132389</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733266</commentid>
    <comment_count>18</comment_count>
      <attachid>166787</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-10-02 17:41:43 -0700</bug_when>
    <thetext>Created attachment 166787
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733267</commentid>
    <comment_count>19</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-10-02 17:43:07 -0700</bug_when>
    <thetext>Trying to get Chromium to compile. I&apos;m not sure what will happen to Chrome since I&apos;ve changed the name of a method in Extensions3D.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733269</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-02 17:44:20 -0700</bug_when>
    <thetext>Please wait for approval from abarth@webkit.org, dglazkov@chromium.org, fishd@chromium.org, jamesr@chromium.org or tkent@chromium.org before submitting, as this patch contains changes to the Chromium public API. See also https://trac.webkit.org/wiki/ChromiumWebKitAPI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733274</commentid>
    <comment_count>21</comment_count>
      <attachid>166787</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-10-02 17:50:14 -0700</bug_when>
    <thetext>Comment on attachment 166787
Patch

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

&gt; Source/Platform/chromium/public/WebGraphicsContext3D.h:408
&gt; +    virtual WebString translateShaderANGLE(WebGLId shader) { return WebString(); }

this change will break things since we have implementations of this code in the chromium repo.  To change any public Chromium API (see the directory name - it has chromium/public in it) you generally speaking need to do a 2-sided roll, one to implement the new name of the function in implementations of WebGraphicsContext3D and then one on the WebKit side to change the exposed interface name.

For this I&apos;d recommend simply calling getTranslatedShaderSourceANGLE() in Extensions3DChromium.  I don&apos;t think there&apos;s an especially compelling reason to rename this.  Honestly, as far as WebKit style goes I think the &quot;get&quot; is warranted since this is definitely *not* a simple getter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733280</commentid>
    <comment_count>22</comment_count>
      <attachid>166789</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-10-02 18:11:24 -0700</bug_when>
    <thetext>Created attachment 166789
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733283</commentid>
    <comment_count>23</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-10-02 18:13:18 -0700</bug_when>
    <thetext>(In reply to comment #21)

&gt; Honestly, as far as WebKit style goes I think the &quot;get&quot; is warranted since this is definitely *not* a simple getter.

You&apos;re right. I&apos;m keeping the old name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733321</commentid>
    <comment_count>24</comment_count>
    <who name="Max Vujovic">mvujovic</who>
    <bug_when>2012-10-02 19:23:48 -0700</bug_when>
    <thetext>Nice patch! Just a couple of small comments.

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

&gt; Source/WebCore/platform/graphics/ANGLEWebKitBridge.cpp:33
&gt; +using namespace std;

Nit: I don&apos;t think you need &quot;using namespace std;&quot;, since you use &quot;std::min&quot; below.

&gt; Source/WebCore/platform/graphics/ANGLEWebKitBridge.cpp:44
&gt; +static bool getVariableInfo(const ShHandle compiler, ShShaderInfo variableType, Vector&lt;ANGLEShaderSymbol&gt;&amp; symbols)

We seem to be using the names &quot;variable&quot; and &quot;symbol&quot; interchangeably here. Perhaps we should pick one?

e.g.
(1) getVariableInfo(..., Vector&lt;ANGLEShaderVariable&gt;&amp; variables);
(2) getSymbolInfo(..., Vector&lt;ANGLEShaderSymbol&gt;&amp; symbols);

&gt; Source/WebCore/platform/graphics/ANGLEWebKitBridge.cpp:61
&gt; +    if (numVariables &lt; 0)

Good.

&gt; Source/WebCore/platform/graphics/ANGLEWebKitBridge.cpp:65
&gt; +    if (maxNameLength &lt;= 1)

Good.

&gt; Source/WebCore/platform/graphics/ANGLEWebKitBridge.cpp:69
&gt; +    if (maxMappedNameLength &lt;= 1)

Good.

&gt; Source/WebCore/platform/graphics/ANGLEWebKitBridge.cpp:91
&gt; +        if (nameLength &lt;= 0)

Good.

&gt; Source/WebCore/platform/graphics/ANGLEWebKitBridge.cpp:94
&gt; +        symbol.mappedName = String::fromUTF8(mappedNameBuffer.get(), std::min(maxMappedNameLength, nameLength));

maxMappedNameLength counts the null terminator.
nameLength does not count the null terminator.

I believe String::fromUTF8 expects a length that does not include the null terminator. Then, this would be:
std::min(maxMappedNameLength - 1, nameLength)

&gt; Source/WebCore/platform/graphics/ANGLEWebKitBridge.h:75
&gt; +    bool compileShaderSource(const char* shaderSource, ANGLEShaderType, String&amp; translatedShaderSource, String&amp; shaderValidationLog, Vector&lt;ANGLEShaderSymbol&gt;&amp; symbols, int extraCompileOptions = 0);

This is a better interface. Nice :)

&gt; Source/WebCore/platform/graphics/filters/CustomFilterValidatedProgram.cpp:100
&gt; +        if (it-&gt;symbolType != SHADER_SYMBOL_TYPE_UNIFORM)

In GLSL [1], samplers must be uniforms, so this check isn&apos;t required. If the sampler isn&apos;t a uniform, ANGLE should have generated a validation error and returned early. However, having this check come first is a little more efficient if the symbol is not a uniform, since we don&apos;t have to check the symbol against all the different sampler types in isSampler().

If you decide to keep the check, I think it would be better to push it into isSampler().

[1]: &quot;[Samplers] can only be declared as function parameters or uniforms&quot;, Section 4.1.7: Samplers, http://www.khronos.org/registry/gles/specs/2.0/GLSL_ES_Specification_1.0.17.pdf</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733757</commentid>
    <comment_count>25</comment_count>
      <attachid>166789</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-10-03 09:01:21 -0700</bug_when>
    <thetext>Comment on attachment 166789
Patch

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

review- only because of my mappedName buffer overrun concern. Otherwise looks good, although I have various suggestions for improvements.

&gt; Source/WebCore/platform/graphics/ANGLEWebKitBridge.cpp:44
&gt; +static bool getVariableInfo(const ShHandle compiler, ShShaderInfo variableType, Vector&lt;ANGLEShaderSymbol&gt;&amp; symbols)

The const in const ShHandle here has no practical effect and should be omitted.

&gt; Source/WebCore/platform/graphics/ANGLEWebKitBridge.cpp:73
&gt; +    OwnArrayPtr&lt;char&gt; nameBuffer = adoptArrayPtr(new char[maxNameLength]);
&gt; +    OwnArrayPtr&lt;char&gt; mappedNameBuffer = adoptArrayPtr(new char[maxMappedNameLength]);

A higher performance idiom for this is:

    Vector&lt;char, 256&gt; nameBuffer(maxNameLength);

Then you use nameBuffer.data().

Where you replace 256 with a number that is likely to be large enough to hold most variable names but not so large that it makes the function use an inappropriate amount of stack. That technique avoids heap allocation/free.

&gt; Source/WebCore/platform/graphics/ANGLEWebKitBridge.cpp:94
&gt; +        symbol.name = String::fromUTF8(nameBuffer.get(), nameLength);
&gt; +        symbol.mappedName = String::fromUTF8(mappedNameBuffer.get(), std::min(maxMappedNameLength, nameLength));

This code will put a symbol containing null strings into the vector if there are illegal UTF-8 sequences in either name. Can that happen? If so, what is the right way to handle that? Leave out the symbol entirely? Are these strings really UTF-8? I’m concerned about translating strings from UTF-8 to UTF-16 and back if they aren’t actually UTF-8 strings. If they are ASCII then it’s more efficient to treat them as Latin-1 than UTF-8; they’ll stay 8-bit strings and not be encoded and decoded. If the characters can be arbitrary bytes that might not be UTF-8 sequences, then we can either treat them as Latin-1, which guarantees an accurate round trip and has no such concept as an illegal sequence, or alternatively we might want to use something other than String to store them.

I am puzzled by the std::min(maxMappedNameLength, nameLength) expression. What is the guarantee that the mapped name did not overrun the buffer, if our code is the code that’s clipping the mapped name&apos;s length to the maximum? If the mapped name can come out of the shader functions with a longer length, then mappedNameBuffer needs to be larger. This is non-obvious enough that it might require a comment.

&gt; Source/WebCore/platform/graphics/GraphicsContext3D.h:974
&gt; +        VariableInfo(GC3Denum type, int size, String&amp; mappedName)

Should be const String&amp; rather than String&amp;.

&gt; Source/WebCore/platform/graphics/GraphicsContext3D.h:1000
&gt; +        ShaderVariableMap attribMap;

Can we spell out the word “attribute” instead of using the abbreviation “attrib”?

&gt; Source/WebCore/platform/graphics/GraphicsContext3D.h:1003
&gt; +            , isValid(0)

Should be false rather than 0.

&gt; Source/WebCore/platform/graphics/GraphicsContext3D.h:1011
&gt; +    String getMappedVariableName(Platform3DObject program, ShShaderInfo variableType, const String&amp; name);

Normally we don’t name such functions with the word “get”. We reserve the word “get” for functions that have no return value and use out arguments instead. We’d typically just call this mappedVariableName.

&gt; Source/WebCore/platform/graphics/filters/CustomFilterValidatedProgram.cpp:99
&gt; +        // We&apos;re only checking uniforms

Comments should answer the question “why” rather than restate what the code does.

&gt; Source/WebCore/platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:174
&gt; +    for (Vector&lt;ANGLEShaderSymbol&gt;::iterator it = variables.begin(); it != variables.end(); ++it) {

Normally we use indexing, rather than iterators, to iterate vectors.

&gt; Source/WebCore/platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:185
&gt; +        switch (it-&gt;symbolType) {
&gt; +        case SHADER_SYMBOL_TYPE_ATTRIBUTE:
&gt; +            entry.attribMap.set(it-&gt;name, variableInfo);
&gt; +            break;
&gt; +        case SHADER_SYMBOL_TYPE_UNIFORM:
&gt; +            entry.uniformMap.set(it-&gt;name, variableInfo);
&gt; +            break;
&gt; +        default:
&gt; +            ASSERT_NOT_REACHED();
&gt; +        }

I think we should have a ShaderSourceEntry member function that takes a symbol type and returns a reference to the appropriate map. Then we can get rid of this switch statement, and other ones like it in at least one other place. I’d call the member function variableMap, and then it would be like this:

    entry.variableMap(it-&gt;symbolType).set(it-&gt;name, variableInfo);

&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:674
&gt; +#if PLATFORM(MAC) || PLATFORM(GTK) || PLATFORM(QT) || PLATFORM(EFL) || PLATFORM(BLACKBERRY)

This #if looks bad. Is there some way to avoid this long list of platforms?

&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:677
&gt; +    String mappedName = String(name);

There is no need for the String() around the word “name” here.

&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:688
&gt; +        ShaderSourceEntry entry = result-&gt;second;

Would be more efficient to use a local variable of type const ShaderSourceEntry&amp; here.

&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:698
&gt; +        if (variableType == SH_ACTIVE_ATTRIBUTES) {
&gt; +            variableResult = entry.attribMap.find(name);
&gt; +            if (variableResult == entry.attribMap.end())
&gt; +                continue;
&gt; +        } else {
&gt; +            variableResult = entry.uniformMap.find(name);
&gt; +            if (variableResult == entry.uniformMap.end())
&gt; +                continue;
&gt; +        }

It would be better factoring here to use something that points to either attribMap or uniformMap, that way you could have find call and check against continue also be part of the shared code. If you take my suggestion to add a member function, then you get this:

    const ShaderVariableMap&amp; variableMap = result-&gt;second.variableMap(variableType);
    ShaderVariableMap::const_iterator variableEntry = variableMap.find(name);
    if (variableEntry != variableMap.end())
        return variableEntry-&gt;second.mappedName;

&gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:701
&gt; +        mappedName = variableResult-&gt;second.mappedName;
&gt; +        break;

I think using a return would be clearer here. Then we wouldn’t even need the mappedName local variable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733798</commentid>
    <comment_count>26</comment_count>
      <attachid>166789</attachid>
    <who name="Max Vujovic">mvujovic</who>
    <bug_when>2012-10-03 09:56:27 -0700</bug_when>
    <thetext>Comment on attachment 166789
Patch

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

&gt; Source/WebCore/platform/graphics/ANGLEWebKitBridge.cpp:158
&gt; +    bool validateSuccess = ShCompile(compiler, shaderSourceStrings, 1, SH_OBJECT_CODE | SH_ATTRIBUTES_UNIFORMS | SH_MAP_LONG_VARIABLE_NAMES | extraCompileOptions);

Can we pass in SH_MAP_LONG_VARIABLE_NAMES in extraCompileOptions instead? In custom filters, we do a first ANGLE validation pass for shader rewriting. If we don&apos;t shorten the names in this first pass, we can reuse your mapping code during the second ANGLE pass in GC3D.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733919</commentid>
    <comment_count>27</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-10-03 12:22:04 -0700</bug_when>
    <thetext>Thanks for the reviews everyone! New patch coming up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>734262</commentid>
    <comment_count>28</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-10-03 17:40:28 -0700</bug_when>
    <thetext>(In reply to comment #24)

&gt; Nice patch! Just a couple of small comments.

I&apos;ve updated everything you suggested. Some comments.

&gt; &gt; +static bool getVariableInfo(const ShHandle compiler, ShShaderInfo variableType, Vector&lt;ANGLEShaderSymbol&gt;&amp; symbols)
&gt; 
&gt; We seem to be using the names &quot;variable&quot; and &quot;symbol&quot; interchangeably here. Perhaps we should pick one?

I went with &quot;symbol&quot; everywhere.

&gt; &gt; Source/WebCore/platform/graphics/ANGLEWebKitBridge.cpp:94
&gt; &gt; +        symbol.mappedName = String::fromUTF8(mappedNameBuffer.get(), std::min(maxMappedNameLength, nameLength));
&gt; 
&gt; maxMappedNameLength counts the null terminator.
&gt; nameLength does not count the null terminator.
&gt; 
&gt; I believe String::fromUTF8 expects a length that does not include the null terminator. Then, this would be:

It turns out I didn&apos;t even need this code. See my answer to Darin below.

&gt; &gt; Source/WebCore/platform/graphics/filters/CustomFilterValidatedProgram.cpp:100
&gt; &gt; +        if (it-&gt;symbolType != SHADER_SYMBOL_TYPE_UNIFORM)
&gt; 
&gt; In GLSL [1], samplers must be uniforms, so this check isn&apos;t required. If the sampler isn&apos;t a uniform, ANGLE should have generated a validation error and returned early. However, having this check come first is a little more efficient if the symbol is not a uniform, since we don&apos;t have to check the symbol against all the different sampler types in isSampler().
&gt; 
&gt; If you decide to keep the check, I think it would be better to push it into isSampler().

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>734266</commentid>
    <comment_count>29</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-10-03 17:52:17 -0700</bug_when>
    <thetext>(In reply to comment #25)

&gt; review- only because of my mappedName buffer overrun concern. Otherwise looks good, although I have various suggestions for improvements.

Addressed everything you suggested. Thanks for the detailed feedback. I have some comments below.


&gt; &gt; Source/WebCore/platform/graphics/ANGLEWebKitBridge.cpp:73
&gt; &gt; +    OwnArrayPtr&lt;char&gt; nameBuffer = adoptArrayPtr(new char[maxNameLength]);
&gt; &gt; +    OwnArrayPtr&lt;char&gt; mappedNameBuffer = adoptArrayPtr(new char[maxMappedNameLength]);
&gt; 
&gt; A higher performance idiom for this is:
&gt; 
&gt;     Vector&lt;char, 256&gt; nameBuffer(maxNameLength);
&gt; 
&gt; Then you use nameBuffer.data().
&gt; 
&gt; Where you replace 256 with a number that is likely to be large enough to hold most variable names but not so large that it makes the function use an inappropriate amount of stack. That technique avoids heap allocation/free.

Excellent. Symbols are not allowed to be over 256 characters otherwise validation would have failed before here, so this is perfect.

&gt; &gt; Source/WebCore/platform/graphics/ANGLEWebKitBridge.cpp:94
&gt; &gt; +        symbol.name = String::fromUTF8(nameBuffer.get(), nameLength);
&gt; &gt; +        symbol.mappedName = String::fromUTF8(mappedNameBuffer.get(), std::min(maxMappedNameLength, nameLength));
&gt; 
&gt; This code will put a symbol containing null strings into the vector if there are illegal UTF-8 sequences in either name. Can that happen? If so, what is the right way to handle that? Leave out the symbol entirely? Are these strings really UTF-8? I’m concerned about translating strings from UTF-8 to UTF-16 and back if they aren’t actually UTF-8 strings. If they are ASCII then it’s more efficient to treat them as Latin-1 than UTF-8; they’ll stay 8-bit strings and not be encoded and decoded. If the characters can be arbitrary bytes that might not be UTF-8 sequences, then we can either treat them as Latin-1, which guarantees an accurate round trip and has no such concept as an illegal sequence, or alternatively we might want to use something other than String to store them.
&gt; 
&gt; I am puzzled by the std::min(maxMappedNameLength, nameLength) expression. What is the guarantee that the mapped name did not overrun the buffer, if our code is the code that’s clipping the mapped name&apos;s length to the maximum? If the mapped name can come out of the shader functions with a longer length, then mappedNameBuffer needs to be larger. This is non-obvious enough that it might require a comment.

It turns out I was doing more than necessary (and it was wrong). The OpenGL ES Shading Language spec requires all content to be ASCII (actually a subset). WebGL *does* allow UTF-8, but only in comments. Therefore, no symbol that gets this far could be anything but ASCII. There are tests in the WebGL conformance suite exercising this.

Furthermore, the ShGetActive* methods produce null-terminated strings for nameBuffer and mappedNameBuffer. So I was able to replace the code above with just String(nameBuffer.data())

I&apos;ve written a comment explaining this. I&apos;d like to see a little more testing of this in the ANGLE project.

&gt; &gt; +        ShaderVariableMap attribMap;
&gt; 
&gt; Can we spell out the word “attribute” instead of using the abbreviation “attrib”?

OpenGL uses the term &quot;attrib&quot; for some reason in its API, but it looks like we often write it in full in WebKit. I&apos;ve changed this to &quot;attribute&quot;.

&gt; I think we should have a ShaderSourceEntry member function that takes a symbol type and returns a reference to the appropriate map. Then we can get rid of this switch statement, and other ones like it in at least one other place. I’d call the member function variableMap, and then it would be like this:
&gt; 
&gt;     entry.variableMap(it-&gt;symbolType).set(it-&gt;name, variableInfo);

Done.

&gt; &gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:674
&gt; &gt; +#if PLATFORM(MAC) || PLATFORM(GTK) || PLATFORM(QT) || PLATFORM(EFL) || PLATFORM(BLACKBERRY)
&gt; 
&gt; This #if looks bad. Is there some way to avoid this long list of platforms?

It was unnecessary. I believe that file is only compiled on those platforms.


&gt; It would be better factoring here to use something that points to either attribMap or uniformMap, that way you could have find call and check against continue also be part of the shared code. If you take my suggestion to add a member function, then you get this:
&gt; 
&gt;     const ShaderVariableMap&amp; variableMap = result-&gt;second.variableMap(variableType);
&gt;     ShaderVariableMap::const_iterator variableEntry = variableMap.find(name);
&gt;     if (variableEntry != variableMap.end())
&gt;         return variableEntry-&gt;second.mappedName;

Done.

&gt; &gt; Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:701
&gt; &gt; +        mappedName = variableResult-&gt;second.mappedName;
&gt; &gt; +        break;
&gt; 
&gt; I think using a return would be clearer here. Then we wouldn’t even need the mappedName local variable.

Done, and yes.

Thanks again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>734270</commentid>
    <comment_count>30</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-10-03 17:53:45 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; (From update of attachment 166789 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=166789&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ANGLEWebKitBridge.cpp:158
&gt; &gt; +    bool validateSuccess = ShCompile(compiler, shaderSourceStrings, 1, SH_OBJECT_CODE | SH_ATTRIBUTES_UNIFORMS | SH_MAP_LONG_VARIABLE_NAMES | extraCompileOptions);
&gt; 
&gt; Can we pass in SH_MAP_LONG_VARIABLE_NAMES in extraCompileOptions instead? In custom filters, we do a first ANGLE validation pass for shader rewriting. If we don&apos;t shorten the names in this first pass, we can reuse your mapping code during the second ANGLE pass in GC3D.

I tried to address this by having the ANGLEWebKitBridge know if it is being used for GC3D or CustomFilters at construction time, but that didn&apos;t quite work out. Instead I&apos;m now passing the extra options in from the GC3D use (via Extensions3D).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>734278</commentid>
    <comment_count>31</comment_count>
      <attachid>167012</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-10-03 17:58:53 -0700</bug_when>
    <thetext>Created attachment 167012
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>734288</commentid>
    <comment_count>32</comment_count>
      <attachid>167012</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-03 18:32:19 -0700</bug_when>
    <thetext>Comment on attachment 167012
Patch

Attachment 167012 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14123926

New failing tests:
css3/filters/custom/custom-filter-no-element-texture-access.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>734313</commentid>
    <comment_count>33</comment_count>
      <attachid>167012</attachid>
    <who name="Max Vujovic">mvujovic</who>
    <bug_when>2012-10-03 19:22:47 -0700</bug_when>
    <thetext>Comment on attachment 167012
Patch

Thanks for the updates!

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

&gt; Source/WebCore/platform/graphics/ANGLEWebKitBridge.h:59
&gt; +        return symbolType == SHADER_SYMBOL_TYPE_UNIFORM

I think you want:
symbolType == SHADER_SYMBOL_TYPE_UNIFORM &amp;&amp; (dataType == SH_SAMPLER_2D || dataType == ...)

&gt; Source/WebCore/platform/graphics/filters/CustomFilterValidatedProgram.cpp:89
&gt; +    bool vertexShaderValid = validator-&gt;compileShaderSource(originalVertexShader.utf8().data(), SHADER_TYPE_VERTEX, m_validatedVertexShader, vertexShaderLog, symbols);

The bot failure is because we&apos;re not passing in SH_ATTRIBUTES_UNIFORMS anymore, which causes the ANGLE symbol query to fail. I think it makes sense to always use this flag in compileShaderSource since that method returns a vector of symbols now. On the ANGLE side, all this flag does is walk the shader&apos;s intermediate parse tree, collect all the attributes and uniforms in a vector, and make them available via the ANGLE API. It doesn&apos;t affect the validation policy in any way, so it should be fine in all usages of compileShaderSource.

&gt; Source/WebCore/platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:163
&gt; +    int extraCompileOptions = SH_ATTRIBUTES_UNIFORMS | SH_MAP_LONG_VARIABLE_NAMES;

If we push SH_ATTRIBUTES_UNIFORMS back into compileShaderSource, we can remove it here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>734356</commentid>
    <comment_count>34</comment_count>
      <attachid>167012</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-03 21:54:43 -0700</bug_when>
    <thetext>Comment on attachment 167012
Patch

Attachment 167012 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/14131895

New failing tests:
css3/filters/custom/custom-filter-no-element-texture-access.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>734571</commentid>
    <comment_count>35</comment_count>
      <attachid>167012</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-10-04 03:45:40 -0700</bug_when>
    <thetext>Comment on attachment 167012
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/ANGLEWebKitBridge.h:59
&gt;&gt; +        return symbolType == SHADER_SYMBOL_TYPE_UNIFORM
&gt; 
&gt; I think you want:
&gt; symbolType == SHADER_SYMBOL_TYPE_UNIFORM &amp;&amp; (dataType == SH_SAMPLER_2D || dataType == ...)

Duh! You&apos;re right :(

&gt;&gt; Source/WebCore/platform/graphics/filters/CustomFilterValidatedProgram.cpp:89
&gt;&gt; +    bool vertexShaderValid = validator-&gt;compileShaderSource(originalVertexShader.utf8().data(), SHADER_TYPE_VERTEX, m_validatedVertexShader, vertexShaderLog, symbols);
&gt; 
&gt; The bot failure is because we&apos;re not passing in SH_ATTRIBUTES_UNIFORMS anymore, which causes the ANGLE symbol query to fail. I think it makes sense to always use this flag in compileShaderSource since that method returns a vector of symbols now. On the ANGLE side, all this flag does is walk the shader&apos;s intermediate parse tree, collect all the attributes and uniforms in a vector, and make them available via the ANGLE API. It doesn&apos;t affect the validation policy in any way, so it should be fine in all usages of compileShaderSource.

Indeed. I&apos;ve made this change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>734573</commentid>
    <comment_count>36</comment_count>
      <attachid>167068</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-10-04 03:50:53 -0700</bug_when>
    <thetext>Created attachment 167068
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>734928</commentid>
    <comment_count>37</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-10-04 12:32:11 -0700</bug_when>
    <thetext>Committed r130417: &lt;http://trac.webkit.org/changeset/130417&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132925</attachid>
            <date>2012-03-20 16:32:21 -0700</date>
            <delta_ts>2012-10-02 15:05:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70989-20120321103219.patch</filename>
            <type>text/plain</type>
            <size>6233</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTExMjU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzY1ZTJiZjZjNzUyNGJk
NTExM2JhMTYxZWZiOTZjMjc2YjY2ODZkNi4uYzYwNjVmZjI1MDIyZDU0OWE5N2Y3OTA0ODhhZGZm
ODIyZjczODkxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDEyLTAzLTIwICBEZWFu
IEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KKworICAgICAgICBXZWJHTCBsYXlvdXQgdGVzdHMg
b2YgbG9jYXRpb24gbGVuZ3RoIGxpbWl0cyBhcmUgZmFpbGluZyBvbiBNYWMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwOTg5CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWFrZSBzdXJlIHRoZSBBTkdMRSBj
b21waWxlciBpcyBwYXNzZWQgdGhlIGZsYWcgdG8gdHJhbnNsYXRlCisgICAgICAgIGxvbmcgYXR0
cmlidXRlL3VuaWZvcm0gbmFtZXMsIHNvIHRoYXQgdGhlIE9wZW5HTCBjb21waWxlciB3aWxsCisg
ICAgICAgIGFjY2VwdCB0aGUgaW5wdXQuIFRoZSB0ZXN0cyB3aWxsIHN0aWxsIGZhaWwgb24gbWFj
IGJlY2F1c2UKKyAgICAgICAgd2UgZG9uJ3QgaGFuZGxlIHRoZSB0cmFuc2xhdGlvbiBtYXBwaW5n
LCBidXQgaXQgd2lsbCBzdG9wCisgICAgICAgIHRoZSBjcmFzaCAoYW5kIGNvbnRlbnQgY291bGQg
bGlrZWx5IGV4YW1pbmUgYXR0cmlidXRlIG5hbWVzCisgICAgICAgIGlmIG5lY2Vzc2FyeSkuCisK
KyAgICAgICAgVGhlIGZvbGxvd3VwIGJ1ZyBpcyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9ODE3MTcKKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6QU5HTEVXZWJLaXRCcmlkZ2U6OnZhbGlkYXRlU2hhZGVyU291cmNlKToK
KyAgICAgICAgICAgIHBhc3MgU0hfTUFQX0xPTkdfVkFSSUFCTEVfTkFNRVMgaW50byBTaENvbXBp
bGUKKwogMjAxMi0wMy0xOSAgRGFuYSBKYW5zZW5zICA8ZGFuYWtqQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBbY2hyb21pdW1dIEludmFsaWRhdGUvdXBkYXRlIGV2aWN0ZWQgdGlsZXMgZHVyaW5n
IGNvbW1pdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQU5H
TEVXZWJLaXRCcmlkZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQU5H
TEVXZWJLaXRCcmlkZ2UuY3BwCmluZGV4IDczODQ4YmQxYzMyNDE1MjhkMmZjZDA3ZDA2NDlkY2I1
YjE0ZjkxMjAuLmQwOTM4ZDNkZjFmMGNiNzhmNzBmMGI4OTk1MjAyYjBlOGIwNzczZGUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktpdEJy
aWRnZS5jcHAKQEAgLTg4LDcgKzg4LDcgQEAgYm9vbCBBTkdMRVdlYktpdEJyaWRnZTo6dmFsaWRh
dGVTaGFkZXJTb3VyY2UoY29uc3QgY2hhciogc2hhZGVyU291cmNlLCBBTkdMRVNoYWQKIAogICAg
IGNvbnN0IGNoYXIqIGNvbnN0IHNoYWRlclNvdXJjZVN0cmluZ3NbXSA9IHsgc2hhZGVyU291cmNl
IH07CiAKLSAgICBib29sIHZhbGlkYXRlU3VjY2VzcyA9IFNoQ29tcGlsZShjb21waWxlciwgc2hh
ZGVyU291cmNlU3RyaW5ncywgMSwgU0hfT0JKRUNUX0NPREUpOworICAgIGJvb2wgdmFsaWRhdGVT
dWNjZXNzID0gU2hDb21waWxlKGNvbXBpbGVyLCBzaGFkZXJTb3VyY2VTdHJpbmdzLCAxLCBTSF9P
QkpFQ1RfQ09ERSB8IFNIX01BUF9MT05HX1ZBUklBQkxFX05BTUVTIHwgU0hfQVRUUklCVVRFU19V
TklGT1JNUyk7CiAgICAgaWYgKCF2YWxpZGF0ZVN1Y2Nlc3MpIHsKICAgICAgICAgaW50IGxvZ1Np
emUgPSAwOwogICAgICAgICBTaEdldEluZm8oY29tcGlsZXIsIFNIX0lORk9fTE9HX0xFTkdUSCwg
JmxvZ1NpemUpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCmluZGV4IGUyMzVlZGZkYzczMzY0MmFlMGNlZDdjNTljYThiNWI1NTNkNDhh
NjMuLmI0ZDVlY2Y0ZmVlYjhlYWJhMmVkYTk1MDUzOTRjNDRiZjFmYzBhOWQgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNyBAQAorMjAxMi0wMy0yMCAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5jb20+CisK
KyAgICAgICAgV2ViR0wgbGF5b3V0IHRlc3RzIG9mIGxvY2F0aW9uIGxlbmd0aCBsaW1pdHMgYXJl
IGZhaWxpbmcgb24gTWFjCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD03MDk4OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFJlbW92ZSB0aGUgZmFpbGluZyB0ZXN0cyBmcm9tIHRoZSBTa2lwcGVkIGxpc3QsIGJ1
dCBhZGQgZXhwZWN0ZWQKKyAgICAgICAgcmVzdWx0cyB0byB0aGUgcGxhdGZvcm0gZGlyZWN0b3J5
IG5vdyB0aGF0IHdlIGRvbid0IGNyYXNoLgorCisgICAgICAgICogcGxhdGZvcm0vbWFjL1NraXBw
ZWQ6CisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvY2FudmFzL3dlYmdsL2F0dHJpYi1sb2Nh
dGlvbi1sZW5ndGgtbGltaXRzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vbWFjL2Zhc3QvY2FudmFzL3dlYmdsL3VuaWZvcm0tbG9jYXRpb24tbGVuZ3RoLWxpbWl0cy1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorCiAyMDEyLTAzLTE5ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJh
cnJhY2xvdWdoQGFwcGxlLmNvbT4KIAogICAgICAgICBPYmplY3QuZnJlZXplIGJyb2tlbiBvbiBs
YXRlc3QgTmlnaHRseQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBw
ZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZAppbmRleCBhMmJiYzA0Nzc4NzY1
NTZmMjRmYWFjYTA0MDUxZWU3MjNhYTU2YzhhLi4wMjVlZjk0Y2M3NTQxY2RhZjc4NGI5MjhkNDZj
YmFiZmRlMzlhMDljIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBl
ZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvU2tpcHBlZApAQCAtNTE0LDEwICs1MTQs
NiBAQCBmYXN0L2V2ZW50cy9wbGF0Zm9ybS13aGVlbGV2ZW50LXBhZ2luZy15LWluLW5vbi1zY3Jv
bGxpbmctcGFnZS5odG1sCiBmYXN0L2V2ZW50cy9wbGF0Zm9ybS13aGVlbGV2ZW50LXBhZ2luZy15
LWluLXNjcm9sbGluZy1kaXYuaHRtbAogZmFzdC9ldmVudHMvcGxhdGZvcm0td2hlZWxldmVudC1w
YWdpbmcteS1pbi1zY3JvbGxpbmctcGFnZS5odG1sCiAKLSMgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTcwOTg5Ci1mYXN0L2NhbnZhcy93ZWJnbC9hdHRyaWItbG9jYXRp
b24tbGVuZ3RoLWxpbWl0cy5odG1sCi1mYXN0L2NhbnZhcy93ZWJnbC91bmlmb3JtLWxvY2F0aW9u
LWxlbmd0aC1saW1pdHMuaHRtbAotCiAjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD03MTQyMAogIyBJdCBuZWVkcyBhIHJlYmFzZWxpbmUKIGZhc3QvcmVwYWludC90YWJs
ZS1leHRyYS1ib3R0b20tZ3Jvdy5odG1sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9tYWMvZmFzdC9jYW52YXMvd2ViZ2wvYXR0cmliLWxvY2F0aW9uLWxlbmd0aC1saW1pdHMtZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvY2FudmFzL3dlYmdsL2F0
dHJpYi1sb2NhdGlvbi1sZW5ndGgtbGltaXRzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zM2U3
M2JiOTAyYmNiMDIxOTM1YzEzNzY2YTE2M2RhNDY2MzhiMTkzCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvY2FudmFzL3dlYmdsL2F0dHJpYi1sb2NhdGlv
bi1sZW5ndGgtbGltaXRzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE4IEBACitWZXJpZnkgbGlt
aXRzIG9uIHRoZSBsZW5ndGhzIG9mIGF0dHJpYiBsb2NhdGlvbnMuCitUZXN0IGF0dHJpYiBsb2Nh
dGlvbiB1bmRlcm5lYXRoIHRoZSBsZW5ndGggbGltaXQKK1BBU1MgZ2wuZ2V0UHJvZ3JhbVBhcmFt
ZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUykgaXMgdHJ1ZQorRkFJTCBhdHRyaWIgbG9jYXRp
b24gd2FzIC0xLCBzaG91bGQgbm90IGJlCitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1
ZTogTk9fRVJST1IgOiAKK1Rlc3QgYXR0cmliIGxvY2F0aW9uIG92ZXIgdGhlIGxlbmd0aCBsaW1p
dAorU2hhZGVyIGNvbXBpbGF0aW9uIHNob3VsZCBmYWlsCitQQVNTIHd0dS5sb2FkU2hhZGVyRnJv
bVNjcmlwdChnbCwgImJhZFZlcnRleFNoYWRlciIsIGdsLlZFUlRFWF9TSEFERVIsIGZ1bmN0aW9u
IChlcnIpIHt9KSBpcyBudWxsCitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9f
RVJST1IgOiAKK0F0dGVtcHQgdG8gYmluZCB0b28tbG9uZyBhdHRyaWIgbG9jYXRpb24gc2hvdWxk
IHByb2R1Y2UgZXJyb3IKK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBJTlZBTElE
X1ZBTFVFIDogCitBdHRlbXB0IHRvIGZldGNoIHRvby1sb25nIGF0dHJpYiBsb2NhdGlvbiBzaG91
bGQgcHJvZHVjZSBlcnJvcgorUEFTUyBnbC5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCAidlBv
c2l0aW9uMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkw
MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3
ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0
NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAx
MjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1NjciKSBpcyAtMQorUEFTUyBnZXRFcnJvciB3YXMgZXhw
ZWN0ZWQgdmFsdWU6IElOVkFMSURfVkFMVUUgOiAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlz
IHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9tYWMvZmFzdC9jYW52YXMvd2ViZ2wvdW5pZm9ybS1sb2NhdGlvbi1sZW5ndGgtbGltaXRzLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2NhbnZhcy93ZWJnbC91
bmlmb3JtLWxvY2F0aW9uLWxlbmd0aC1saW1pdHMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQz
MjYwY2JjNzM5ZmU4NmM5MDAxNzMxZWM2ZGE5MzgxNmJkYTZjMDMKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9jYW52YXMvd2ViZ2wvdW5pZm9ybS1sb2Nh
dGlvbi1sZW5ndGgtbGltaXRzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE0IEBACitWZXJpZnkg
bGltaXRzIG9uIHRoZSBsZW5ndGhzIG9mIHVuaWZvcm0gbG9jYXRpb25zLgorVGVzdCB1bmlmb3Jt
IGxvY2F0aW9uIHVuZGVybmVhdGggdGhlIGxlbmd0aCBsaW1pdAorUEFTUyBnbC5nZXRQcm9ncmFt
UGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJTktfU1RBVFVTKSBpcyB0cnVlCitGQUlMIHVuaWZvcm1M
b2Mgc2hvdWxkIGJlIG5vbi1udWxsLiBXYXMgbnVsbAorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0
ZWQgdmFsdWU6IE5PX0VSUk9SIDogCitUZXN0IHVuaWZvcm0gbG9jYXRpb24gb3ZlciB0aGUgbGVu
Z3RoIGxpbWl0CitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAK
K1BBU1MgZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUykgaXMg
dHJ1ZQorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IElOVkFMSURfVkFMVUUgOiAK
K1BBU1MgdW5pZm9ybUxvYyBpcyBudWxsCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVl
CisKK1RFU1QgQ09NUExFVEUKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>166758</attachid>
            <date>2012-10-02 15:05:45 -0700</date>
            <delta_ts>2012-10-02 15:22:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70989-20121003080457.patch</filename>
            <type>text/plain</type>
            <size>34810</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5ODI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWI3YzBjNTZhNjljMTlk
Y2M0ZTNlMTc5Y2IzNzcxY2VkMTdlMDcxYS4uOWZjMTMzMWM4MGQ1ZTRiNTZiMTJiNTVjMzI2NzFk
OTM4MWU5ODZjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcyIEBACisyMDEyLTEwLTAyICBEZWFu
IEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KKworICAgICAgICBBdHRyaWJ1dGUgYW5kIFVuaWZv
cm0gdmFyaWFibGUgbmFtZXMgbmVlZCB0cmFuc2xhdGlvbiBpbiBzaGFkZXIKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwOTg5CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViR0wgc3BlY2lmaWVzIHNvbWUg
bWF4aW11bSBsZW5ndGhzIGZvciB2YXJpYWJsZSBuYW1lcyAoYXR0cmlidXRlcworICAgICAgICBh
bmQgdW5pZm9ybXMpLiBBbHNvLCBzb21lIEdMIGRyaXZlcnMgaGF2ZSBpc3N1ZXMgd2l0aCBsb25n
IG5hbWVzLiBGb3IKKyAgICAgICAgdGhhdCByZWFzb24sIEFOR0xFIGhhcyBhbiBvcHRpb24gdG8g
cmV3cml0ZSB0aGUgc2hhZGVyLCB0cmFuc2xhdGluZworICAgICAgICBsb25nIG5hbWVzIGludG8g
c2hvcnQgbmFtZXMuIFR1cm5pbmcgdGhpcyBvbiBoZWxwcyBzaGFkZXJzIGNvbXBpbGUsCisgICAg
ICAgIGJ1dCB3ZSBuZWVkIHRvIGtlZXAgYSBtYXBwaW5nIGJldHdlZW4gdGhlIG9yaWdpbmFsIG5h
bWVzIGFuZCB0aGUKKyAgICAgICAgdHJhbnNsYXRlZCBuYW1lcywgc28gdGhhdCB3ZSBiaW5kIHRv
IHRoZSByaWdodCBsb2NhdGlvbiBmcm9tIHVzZXIgY29kZQorICAgICAgICAod2hpY2ggd29uJ3Qg
ZXZlciBzZWUgdGhlIHRyYW5zbGF0ZWQgc291cmNlKS4KKworICAgICAgICBUaGlzIHByb3ZpZGVk
IGFuIG9wcG9ydHVuaXR5IHRvIGNsZWFuIHVwIHNvbWUgb3RoZXIgYml0cyBvZiBjb2RlOgorICAg
ICAgICBDU1MgRmlsdGVycyBleGFtaW5lZCB0aGUgdW5pZm9ybSBuYW1lcyBhZnRlciBhIGNvbXBp
bGF0aW9uOyBJdCBjYW4KKyAgICAgICAgbm93IHVzZSB0aGUgdmFyaWFibGUgbmFtZSBtYXAuIEkg
YWxzbyBhZGRlZCBhIHR5cGVkZWYgZm9yIHRoZQorICAgICAgICBIYXNoTWFwcyB0aGF0IGtlZXAg
dGhlIHNoYWRlciwgdGhlIHNvdXJjZSBjb2RlIGFuZCB0aGUgdmFyaWFibGUgbmFtZQorICAgICAg
ICBtYXBwaW5ncy4gQW5kIGxhc3RseSwgSSByZW5hbWVkIHNvbWUgZnVuY3Rpb25zIGluIEV4dGVu
c2lvbnMzRAorICAgICAgICB0byBiZXR0ZXIgcmVmbGVjdCB3aGF0IHRoZXkgd2VyZSBkb2luZy4K
KworICAgICAgICBJIGFsc28gb3BlbmVkIGEgZm9sbG93dXAgYnVnIHRvIG1ha2Ugc3VyZSB0aGVz
ZSB0YWJsZXMgYXJlIGRlbGV0ZWQKKyAgICAgICAgd2hlbiB0aGUgYXNzb2NpYXRlZCBzaGFkZXJz
IChvciBsaW5rZWQgcHJvZ3JhbXMpIGdvIGF3YXk6CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD05ODIwNAorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3Rp
bmcgdGVzdHMgKHdpdGggc29tZSBlbmhhbmNlbWVudHMpOgorICAgICAgICAtIGZhc3QvY2FudmFz
L3dlYmdsL2F0dHJpYi1sb2NhdGlvbi1sZW5ndGgtbGltaXRzLmh0bWw6CisgICAgICAgIC0gZmFz
dC9jYW52YXMvd2ViZ2wvdW5pZm9ybS1sb2NhdGlvbi1sZW5ndGgtbGltaXRzLmh0bWw6CisKKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTERlYnVnU2hhZGVycy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTERlYnVnU2hhZGVyczo6Z2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZSk6IFVzZSBu
ZXcgbWV0aG9kIG5hbWUuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRC
cmlkZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0VmFyaWFibGVJbmZvKTogRXh0cmFjdHMg
YWxsIHRoZSBpbmZvcm1hdGlvbiBvbiB2YXJpYWJsZXMgKGVpdGhlciBhdHRyaWJ1dGVzCisgICAg
ICAgIG9yIHVuaWZvcm1zKSBmcm9tIHRoZSBuZXdseSBjb21waWxlZCBzaGFkZXIuCisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkFOR0xFV2ViS2l0QnJpZGdlOjpjb21waWxl
U2hhZGVyU291cmNlKTogTmV3IG1ldGhvZCBuYW1lLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0FOR0xFV2ViS2l0QnJpZGdlLmg6CisgICAgICAgIChXZWJDb3JlOjpnZXRVbmlmb3Jtcyk6
IERlbGV0ZWQgdGhpcyBtZXRob2QuCisgICAgICAgIChXZWJDb3JlOjpjb21waWxlU2hhZGVyU291
cmNlKTogTmV3IG1ldGhvZCBuYW1lLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVu
c2lvbnMzRC5oOiBBbm90aGVyIG1ldGhvZCByZW5hbWUuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpWYXJpYWJsZUluZm86OlZhcmlhYmxlSW5mbyk6IEEgbmV3IG9iamVjdCB0aGF0Cisg
ICAgICAgIGhvbGRzIHRoZSBzaXplLCB0eXBlIGFuZCB0cmFuc2xhdGVkIG5hbWUgb2YgYSB2YXJp
YWJsZSBmcm9tIGEgV2ViR0wgc2hhZGVyLgorICAgICAgICAoR3JhcGhpY3NDb250ZXh0M0QpOgor
ICAgICAgICAoU2hhZGVyU291cmNlRW50cnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OlNoYWRlclNvdXJjZUVudHJ5OjpTaGFkZXJTb3VyY2VFbnRyeSk6IEVuaGFuY2UK
KyAgICAgICAgdGhpcyBzdHJ1Y3R1cmUgdG8ga2VlcCB0cmFjayBvZiBhIGZldyBtb3JlIHRoaW5n
cyAtIHRoZSB0cmFuc2xhdGVkIHNvdXJjZSBjb2RlCisgICAgICAgIGFuZCB0cmFuc2xhdGlvbiBt
YXBzIGZvciB0aGUgb3JpZ2luYWwgdW5pZm9ybSBhbmQgYXR0cmlidXRlIG5hbWVzLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3Jh
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtOjpD
dXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtKTogVGhpcyBjYW4KKyAgICAgICAgbm93IHVzZSB0
aGUgbGlzdCBvZiBzaGFkZXIgc3ltYm9scyB0aGF0IGFyZSBleHBvcnRlZCBieSBjb21waWxlU2hh
ZGVyU291cmNlIHJhdGhlcgorICAgICAgICB0aGFuIGhhdmUgY29kZSB0byBjaGVjayB1bmlmb3Jt
IG5hbWVzIGRpcmVjdGx5LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRl
bnNpb25zM0RPcGVuR0xDb21tb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNE
T3BlbkdMQ29tbW9uOjp0cmFuc2xhdGVTaGFkZXJBTkdMRSk6IENhbGwgbmV3IG1ldGhvZCBuYW1l
IGFuZAorICAgICAgICBmaWxsIHRoZSB0cmFuc2xhdGlvbiBtYXBzIHdpdGggdGhlIGluZm9ybWF0
aW9uIGNvbWluZyBvdXQgb2YgQU5HTEUuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oOgorICAgICAgICAoRXh0ZW5zaW9uczNET3Bl
bkdMQ29tbW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3ND
b250ZXh0M0RPcGVuR0xDb21tb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OmNvbXBpbGVTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0TWFwcGVkVmFyaWFibGVOYW1lKTogSGVscGVyIGZ1
bmN0aW9uIHRvIGNoYW5nZSBhbgorICAgICAgICBleHRlcm5hbC9vcmlnaW5hbCBuYW1lIHRvIHRo
ZSB2ZXJzaW9uIHRoYXQgdGhlIHRyYW5zbGF0ZWQgc2hhZGVyIHVzZWQuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0cmliTG9jYXRpb24pOiBNYWtlIHN1cmUgdG8g
bG9vayBmb3IgYSB0cmFuc2xhdGVkIG5hbWUuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0U2hhZGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmdldFNoYWRlckluZm9Mb2cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmdldFNoYWRlclNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6Z2V0VW5pZm9ybUxvY2F0aW9uKTogTWFrZSBzdXJlIHRvIGxvb2sgZm9yIGEgdHJhbnNsYXRl
ZCBuYW1lLgorCiAyMDEyLTA5LTI3ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdt
YWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTI5ODIzLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1NoYWRlcnMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1NoYWRlcnMuY3BwCmluZGV4
IDU0OTlhZWQ5ZjA0OGIyOWQ5YzhlNWE1ZTI3NTNlMDRhMWQ1NGU1MzguLmJkMzY2MDA0MGE5YTQz
MmM1ZDI5OTQyYjQ1NTE2NmQxOTgyOTljNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMRGVidWdTaGFkZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTERlYnVnU2hhZGVycy5jcHAKQEAgLTYzLDcgKzYzLDcgQEAgU3RyaW5nIFdl
YkdMRGVidWdTaGFkZXJzOjpnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlKFdlYkdMU2hhZGVyKiBz
aGFkZXIsIEV4Y2VwdGkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIGlmICghbV9jb250
ZXh0LT52YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlIiwgc2hh
ZGVyKSkKICAgICAgICAgcmV0dXJuICIiOwotICAgIHJldHVybiBtX2NvbnRleHQtPmdyYXBoaWNz
Q29udGV4dDNEKCktPmdldEV4dGVuc2lvbnMoKS0+Z2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFO
R0xFKHNoYWRlci0+b2JqZWN0KCkpOworICAgIHJldHVybiBtX2NvbnRleHQtPmdyYXBoaWNzQ29u
dGV4dDNEKCktPmdldEV4dGVuc2lvbnMoKS0+dHJhbnNsYXRlU2hhZGVyQU5HTEUoc2hhZGVyLT5v
YmplY3QoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmNwcAppbmRleCBi
NjQ3MjNhMDgxMmEyNzA3OTE1OWI3YjFiYzAyOWYzMDZlZGM0ZDM5Li4xODBjYThiMzVhMDFiNzk3
ZTI5YTU0ZDlmNjFiYmFhOTViNjVhMmY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktpdEJyaWRnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuY3BwCkBAIC0zMCw2ICszMCw4IEBA
CiAjaW5jbHVkZSAiQU5HTEVXZWJLaXRCcmlkZ2UuaCIKICNpbmNsdWRlIDx3dGYvT3duQXJyYXlQ
dHIuaD4KIAordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBp
bmxpbmUgc3RhdGljIGludCBnZXRWYWxpZGF0aW9uUmVzdWx0VmFsdWUoY29uc3QgU2hIYW5kbGUg
Y29tcGlsZXIsIFNoU2hhZGVySW5mbyBzaGFkZXJJbmZvKQpAQCAtMzksNiArNDEsNjIgQEAgaW5s
aW5lIHN0YXRpYyBpbnQgZ2V0VmFsaWRhdGlvblJlc3VsdFZhbHVlKGNvbnN0IFNoSGFuZGxlIGNv
bXBpbGVyLCBTaFNoYWRlckluZm8KICAgICByZXR1cm4gdmFsdWU7CiB9CiAKK3N0YXRpYyBib29s
IGdldFZhcmlhYmxlSW5mbyhjb25zdCBTaEhhbmRsZSBjb21waWxlciwgU2hTaGFkZXJJbmZvIHZh
cmlhYmxlVHlwZSwgVmVjdG9yPEFOR0xFU2hhZGVyU3ltYm9sPiYgc3ltYm9scykKK3sKKyAgICBT
aFNoYWRlckluZm8gdmFyaWFibGVNYXhOYW1lTGVuZ3RoVHlwZTsKKworICAgIHN3aXRjaCAodmFy
aWFibGVUeXBlKSB7CisgICAgY2FzZSBTSF9BQ1RJVkVfQVRUUklCVVRFUzoKKyAgICAgICAgdmFy
aWFibGVNYXhOYW1lTGVuZ3RoVHlwZSA9IFNIX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSDsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTSF9BQ1RJVkVfVU5JRk9STVM6CisgICAgICAgIHZh
cmlhYmxlTWF4TmFtZUxlbmd0aFR5cGUgPSBTSF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RIOwor
ICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGludCBudW1WYXJpYWJsZXMg
PSBnZXRWYWxpZGF0aW9uUmVzdWx0VmFsdWUoY29tcGlsZXIsIHZhcmlhYmxlVHlwZSk7CisgICAg
aWYgKG51bVZhcmlhYmxlcyA8IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGludCBt
YXhOYW1lTGVuZ3RoID0gZ2V0VmFsaWRhdGlvblJlc3VsdFZhbHVlKGNvbXBpbGVyLCB2YXJpYWJs
ZU1heE5hbWVMZW5ndGhUeXBlKTsKKyAgICBpZiAobWF4TmFtZUxlbmd0aCA8PSAxKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBpbnQgbWF4TWFwcGVkTmFtZUxlbmd0aCA9IGdldFZhbGlk
YXRpb25SZXN1bHRWYWx1ZShjb21waWxlciwgU0hfTUFQUEVEX05BTUVfTUFYX0xFTkdUSCk7Cisg
ICAgaWYgKG1heE1hcHBlZE5hbWVMZW5ndGggPD0gMSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgT3duQXJyYXlQdHI8Y2hhcj4gbmFtZUJ1ZmZlciA9IGFkb3B0QXJyYXlQdHIobmV3IGNo
YXJbbWF4TmFtZUxlbmd0aF0pOworICAgIE93bkFycmF5UHRyPGNoYXI+IG1hcHBlZE5hbWVCdWZm
ZXIgPSBhZG9wdEFycmF5UHRyKG5ldyBjaGFyW21heE1hcHBlZE5hbWVMZW5ndGhdKTsKKyAgICAK
KyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVZhcmlhYmxlczsgKytpKSB7CisgICAgICAgIEFO
R0xFU2hhZGVyU3ltYm9sIHN5bWJvbDsKKyAgICAgICAgaW50IG5hbWVMZW5ndGggPSAtMTsKKyAg
ICAgICAgc3dpdGNoICh2YXJpYWJsZVR5cGUpIHsKKyAgICAgICAgY2FzZSBTSF9BQ1RJVkVfQVRU
UklCVVRFUzoKKyAgICAgICAgICAgIHN5bWJvbC5zeW1ib2xUeXBlID0gU0hBREVSX1NZTUJPTF9U
WVBFX0FUVFJJQlVURTsKKyAgICAgICAgICAgIFNoR2V0QWN0aXZlQXR0cmliKGNvbXBpbGVyLCBp
LCAmbmFtZUxlbmd0aCwgJnN5bWJvbC5zaXplLCAmc3ltYm9sLmRhdGFUeXBlLCBuYW1lQnVmZmVy
LmdldCgpLCBtYXBwZWROYW1lQnVmZmVyLmdldCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFNIX0FDVElWRV9VTklGT1JNUzoKKyAgICAgICAgICAgIHN5bWJvbC5zeW1ib2xU
eXBlID0gU0hBREVSX1NZTUJPTF9UWVBFX1VOSUZPUk07CisgICAgICAgICAgICBTaEdldEFjdGl2
ZVVuaWZvcm0oY29tcGlsZXIsIGksICZuYW1lTGVuZ3RoLCAmc3ltYm9sLnNpemUsICZzeW1ib2wu
ZGF0YVR5cGUsIG5hbWVCdWZmZXIuZ2V0KCksIG1hcHBlZE5hbWVCdWZmZXIuZ2V0KCkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAobmFtZUxlbmd0aCA8PSAwKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBzeW1ib2wubmFtZSA9IFN0cmluZzo6ZnJvbVVURjgobmFtZUJ1ZmZlci5nZXQoKSwgbmFtZUxl
bmd0aCk7CisgICAgICAgIHN5bWJvbC5tYXBwZWROYW1lID0gU3RyaW5nOjpmcm9tVVRGOChtYXBw
ZWROYW1lQnVmZmVyLmdldCgpLCBzdGQ6Om1pbihtYXhNYXBwZWROYW1lTGVuZ3RoLCBuYW1lTGVu
Z3RoKSk7CisgICAgICAgIHN5bWJvbHMuYXBwZW5kKHN5bWJvbCk7CisgICAgfQorICAgIHJldHVy
biB0cnVlOworfQorCiBBTkdMRVdlYktpdEJyaWRnZTo6QU5HTEVXZWJLaXRCcmlkZ2UoU2hTaGFk
ZXJPdXRwdXQgc2hhZGVyT3V0cHV0LCBTaFNoYWRlclNwZWMgc2hhZGVyU3BlYykKICAgICA6IGJ1
aWx0Q29tcGlsZXJzKGZhbHNlKQogICAgICwgbV9mcmFnbWVudENvbXBpbGVyKDApCkBAIC03NSw3
ICsxMzMsNyBAQCB2b2lkIEFOR0xFV2ViS2l0QnJpZGdlOjpzZXRSZXNvdXJjZXMoU2hCdWlsdElu
UmVzb3VyY2VzIHJlc291cmNlcykKICAgICBtX3Jlc291cmNlcyA9IHJlc291cmNlczsKIH0KIAot
Ym9vbCBBTkdMRVdlYktpdEJyaWRnZTo6dmFsaWRhdGVTaGFkZXJTb3VyY2UoY29uc3QgY2hhciog
c2hhZGVyU291cmNlLCBBTkdMRVNoYWRlclR5cGUgc2hhZGVyVHlwZSwgU3RyaW5nJiB0cmFuc2xh
dGVkU2hhZGVyU291cmNlLCBTdHJpbmcmIHNoYWRlclZhbGlkYXRpb25Mb2csIGludCBleHRyYUNv
bXBpbGVPcHRpb25zKQorYm9vbCBBTkdMRVdlYktpdEJyaWRnZTo6Y29tcGlsZVNoYWRlclNvdXJj
ZShjb25zdCBjaGFyKiBzaGFkZXJTb3VyY2UsIEFOR0xFU2hhZGVyVHlwZSBzaGFkZXJUeXBlLCBT
dHJpbmcmIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UsIFN0cmluZyYgc2hhZGVyVmFsaWRhdGlvbkxv
ZywgVmVjdG9yPEFOR0xFU2hhZGVyU3ltYm9sPiYgc3ltYm9scywgaW50IGV4dHJhQ29tcGlsZU9w
dGlvbnMpCiB7CiAgICAgaWYgKCFidWlsdENvbXBpbGVycykgewogICAgICAgICBtX2ZyYWdtZW50
Q29tcGlsZXIgPSBTaENvbnN0cnVjdENvbXBpbGVyKFNIX0ZSQUdNRU5UX1NIQURFUiwgbV9zaGFk
ZXJTcGVjLCBtX3NoYWRlck91dHB1dCwgJm1fcmVzb3VyY2VzKTsKQEAgLTk3LDcgKzE1NSw3IEBA
IGJvb2wgQU5HTEVXZWJLaXRCcmlkZ2U6OnZhbGlkYXRlU2hhZGVyU291cmNlKGNvbnN0IGNoYXIq
IHNoYWRlclNvdXJjZSwgQU5HTEVTaGFkCiAKICAgICBjb25zdCBjaGFyKiBjb25zdCBzaGFkZXJT
b3VyY2VTdHJpbmdzW10gPSB7IHNoYWRlclNvdXJjZSB9OwogCi0gICAgYm9vbCB2YWxpZGF0ZVN1
Y2Nlc3MgPSBTaENvbXBpbGUoY29tcGlsZXIsIHNoYWRlclNvdXJjZVN0cmluZ3MsIDEsIFNIX09C
SkVDVF9DT0RFIHwgZXh0cmFDb21waWxlT3B0aW9ucyk7CisgICAgYm9vbCB2YWxpZGF0ZVN1Y2Nl
c3MgPSBTaENvbXBpbGUoY29tcGlsZXIsIHNoYWRlclNvdXJjZVN0cmluZ3MsIDEsIFNIX09CSkVD
VF9DT0RFIHwgU0hfQVRUUklCVVRFU19VTklGT1JNUyB8IFNIX01BUF9MT05HX1ZBUklBQkxFX05B
TUVTIHwgZXh0cmFDb21waWxlT3B0aW9ucyk7CiAgICAgaWYgKCF2YWxpZGF0ZVN1Y2Nlc3MpIHsK
ICAgICAgICAgaW50IGxvZ1NpemUgPSBnZXRWYWxpZGF0aW9uUmVzdWx0VmFsdWUoY29tcGlsZXIs
IFNIX0lORk9fTE9HX0xFTkdUSCk7CiAgICAgICAgIGlmIChsb2dTaXplID4gMSkgewpAQCAtMTE4
LDM1ICsxNzYsMTEgQEAgYm9vbCBBTkdMRVdlYktpdEJyaWRnZTo6dmFsaWRhdGVTaGFkZXJTb3Vy
Y2UoY29uc3QgY2hhciogc2hhZGVyU291cmNlLCBBTkdMRVNoYWQKICAgICAgICAgU2hHZXRPYmpl
Y3RDb2RlKGNvbXBpbGVyLCB0cmFuc2xhdGlvbkJ1ZmZlci5nZXQoKSk7CiAgICAgICAgIHRyYW5z
bGF0ZWRTaGFkZXJTb3VyY2UgPSB0cmFuc2xhdGlvbkJ1ZmZlci5nZXQoKTsKICAgICB9Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBBTkdMRVdlYktpdEJyaWRnZTo6Z2V0VW5pZm9ybXMo
U2hTaGFkZXJUeXBlIHNoYWRlclR5cGUsIFZlY3RvcjxBTkdMRVNoYWRlclN5bWJvbD4gJnN5bWJv
bHMpCi17Ci0gICAgY29uc3QgU2hIYW5kbGUgY29tcGlsZXIgPSAoc2hhZGVyVHlwZSA9PSBTSF9W
RVJURVhfU0hBREVSID8gbV92ZXJ0ZXhDb21waWxlciA6IG1fZnJhZ21lbnRDb21waWxlcik7Ci0K
LSAgICBpbnQgbnVtVW5pZm9ybXMgPSBnZXRWYWxpZGF0aW9uUmVzdWx0VmFsdWUoY29tcGlsZXIs
IFNIX0FDVElWRV9VTklGT1JNUyk7Ci0gICAgaWYgKG51bVVuaWZvcm1zIDwgMCkKKyAgICAKKyAg
ICBpZiAoIWdldFZhcmlhYmxlSW5mbyhjb21waWxlciwgU0hfQUNUSVZFX0FUVFJJQlVURVMsIHN5
bWJvbHMpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFudW1Vbmlmb3JtcykKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpbnQgbWF4TmFtZUxlbmd0aCA9IGdldFZhbGlkYXRp
b25SZXN1bHRWYWx1ZShjb21waWxlciwgU0hfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCk7Ci0g
ICAgaWYgKG1heE5hbWVMZW5ndGggPD0gMSkKKyAgICBpZiAoIWdldFZhcmlhYmxlSW5mbyhjb21w
aWxlciwgU0hfQUNUSVZFX1VOSUZPUk1TLCBzeW1ib2xzKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIE93bkFycmF5UHRyPGNoYXI+IG5hbWVCdWZmZXIgPSBhZG9wdEFycmF5UHRyKG5ldyBj
aGFyW21heE5hbWVMZW5ndGhdKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtVW5pZm9y
bXM7ICsraSkgewotICAgICAgICBBTkdMRVNoYWRlclN5bWJvbCBzeW1ib2w7Ci0gICAgICAgIHN5
bWJvbC5zeW1ib2xUeXBlID0gU0hBREVSX1NZTUJPTF9UWVBFX1VOSUZPUk07Ci0gICAgICAgIGlu
dCBuYW1lTGVuZ3RoID0gLTE7Ci0gICAgICAgIFNoR2V0QWN0aXZlVW5pZm9ybShjb21waWxlciwg
aSwgJm5hbWVMZW5ndGgsICZzeW1ib2wuc2l6ZSwgJnN5bWJvbC5kYXRhVHlwZSwgbmFtZUJ1ZmZl
ci5nZXQoKSwgMCk7Ci0gICAgICAgIGlmIChuYW1lTGVuZ3RoIDw9IDApCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIHN5bWJvbC5uYW1lID0gU3RyaW5nOjpmcm9tVVRGOChuYW1l
QnVmZmVyLmdldCgpLCBuYW1lTGVuZ3RoKTsKLSAgICAgICAgc3ltYm9scy5hcHBlbmQoc3ltYm9s
KTsKLSAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktpdEJyaWRnZS5oCmluZGV4IDE5YzUwNGViMzkz
NzA0OTk2ZTk1ZDMyMDgxY2ZjMGI1MzNmYjZiYjMuLmFhMGFjMDhhNGY1YzNhZTkxZjc5NDQ2YzUx
NTgxODg4OWQ1ZWE5NjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0FOR0xFV2ViS2l0QnJpZGdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuaApAQCAtNTAsNiArNTAsNyBAQCBlbnVtIEFOR0xFU2hh
ZGVyU3ltYm9sVHlwZSB7CiBzdHJ1Y3QgQU5HTEVTaGFkZXJTeW1ib2wgewogICAgIEFOR0xFU2hh
ZGVyU3ltYm9sVHlwZSBzeW1ib2xUeXBlOwogICAgIFN0cmluZyBuYW1lOworICAgIFN0cmluZyBt
YXBwZWROYW1lOwogICAgIFNoRGF0YVR5cGUgZGF0YVR5cGU7CiAgICAgaW50IHNpemU7CiAKQEAg
LTcxLDEyICs3Miw3IEBAIHB1YmxpYzoKICAgICBTaEJ1aWx0SW5SZXNvdXJjZXMgZ2V0UmVzb3Vy
Y2VzKCkgeyByZXR1cm4gbV9yZXNvdXJjZXM7IH0KICAgICB2b2lkIHNldFJlc291cmNlcyhTaEJ1
aWx0SW5SZXNvdXJjZXMpOwogICAgIAotICAgIGJvb2wgdmFsaWRhdGVTaGFkZXJTb3VyY2UoY29u
c3QgY2hhciogc2hhZGVyU291cmNlLCBBTkdMRVNoYWRlclR5cGUsIFN0cmluZyYgdHJhbnNsYXRl
ZFNoYWRlclNvdXJjZSwgU3RyaW5nJiBzaGFkZXJWYWxpZGF0aW9uTG9nLCBpbnQgZXh0cmFDb21w
aWxlT3B0aW9ucyA9IDApOwotCi0gICAgLy8gR2V0IHRoZSB1bmlmb3JtcyBmb3IgdGhlIGxhc3Qg
dmFsaWRhdGVkIHNoYWRlciBvZiB0eXBlIFNoU2hhZGVyVHlwZS4KLSAgICAvLyBGb3IgdGhpcyBm
dW5jdGlvbiB0byB3b3JrLCB5b3UgbXVzdCB1c2UgdGhlIFNIX0FUVFJJQlVURVNfVU5JRk9STVMg
Y29tcGlsZSBvcHRpb24gZHVyaW5nIHZhbGlkYXRpb24uCi0gICAgLy8gUmV0dXJucyBmYWxzZSBp
ZiBhbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VycmVkIGluIEFOR0xFLgotICAgIGJvb2wgZ2V0VW5p
Zm9ybXMoU2hTaGFkZXJUeXBlLCBWZWN0b3I8QU5HTEVTaGFkZXJTeW1ib2w+ICZzeW1ib2xzKTsK
KyAgICBib29sIGNvbXBpbGVTaGFkZXJTb3VyY2UoY29uc3QgY2hhciogc2hhZGVyU291cmNlLCBB
TkdMRVNoYWRlclR5cGUsIFN0cmluZyYgdHJhbnNsYXRlZFNoYWRlclNvdXJjZSwgU3RyaW5nJiBz
aGFkZXJWYWxpZGF0aW9uTG9nLCBWZWN0b3I8QU5HTEVTaGFkZXJTeW1ib2w+JiBzeW1ib2xzLCBp
bnQgZXh0cmFDb21waWxlT3B0aW9ucyA9IDApOwogCiBwcml2YXRlOgogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbnNpb25zM0QuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuc2lvbnMzRC5oCmluZGV4IDVmMjhhZmIzYjJl
M2NjZDI3MjVmM2Y2OWUwYzBiNmY5Y2Q5MzQzMTcuLjM5ZjNhZTBmZjhmNDViNGUwY2U5ZTYzN2Y2
YTVhMGVhYzUxNzNmNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0V4dGVuc2lvbnMzRC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0V4dGVuc2lvbnMzRC5oCkBAIC0xNzQsNyArMTc0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBiaW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCkgPSAwOwogCiAgICAgLy8g
R0xfQU5HTEVfdHJhbnNsYXRlZF9zaGFkZXJfc291cmNlCi0gICAgdmlydHVhbCBTdHJpbmcgZ2V0
VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFKFBsYXRmb3JtM0RPYmplY3QpID0gMDsKKyAgICB2
aXJ0dWFsIFN0cmluZyB0cmFuc2xhdGVTaGFkZXJBTkdMRShQbGF0Zm9ybTNET2JqZWN0KSA9IDA7
CiAKICAgICAvLyBHTF9DSFJPTUlVTV9jb3B5X3RleHR1cmUKICAgICB2aXJ0dWFsIHZvaWQgY29w
eVRleHR1cmVDSFJPTUlVTShHQzNEZW51bSwgUGxhdGZvcm0zRE9iamVjdCwgUGxhdGZvcm0zRE9i
amVjdCwgR0MzRGludCwgR0MzRGVudW0pID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCmluZGV4IDQyMDc2ZmY3OGE4ZDE5
N2ExMjQ2NzU1N2Q2MjRmOGNjOTM5MzM2NzEuLjg2Mzg3MDg1ZWY4ZDJlYTQ0MzdlYjFlYmYxMWM5
YmY0NjRkM2RhZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dDNELmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0M0QuaApAQCAtOTY0LDE2ICs5NjQsNTEgQEAgcHVibGljOgogI2Vu
ZGlmCiAKICNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oUVQp
IHx8IFBMQVRGT1JNKEVGTCkgfHwgUExBVEZPUk0oQkxBQ0tCRVJSWSkKKyAgICBzdHJ1Y3QgVmFy
aWFibGVJbmZvIHsKKyAgICAgICAgVmFyaWFibGVJbmZvKCkKKyAgICAgICAgICAgIDogdHlwZSgw
KQorICAgICAgICAgICAgLCBzaXplKDApCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAg
IFZhcmlhYmxlSW5mbyhHQzNEZW51bSB0eXBlLCBpbnQgc2l6ZSwgU3RyaW5nJiBtYXBwZWROYW1l
KQorICAgICAgICAgICAgOiB0eXBlKHR5cGUpCisgICAgICAgICAgICAsIHNpemUoc2l6ZSkKKyAg
ICAgICAgICAgICwgbWFwcGVkTmFtZShtYXBwZWROYW1lKQorICAgICAgICB7CisgICAgICAgIH0K
KworICAgICAgICBib29sIG9wZXJhdG9yPT0oVmFyaWFibGVJbmZvJiBvdGhlcikgY29uc3QKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHR5cGUgPT0gb3RoZXIudHlwZSAmJiBzaXplID09
IG90aGVyLnNpemUgJiYgbWFwcGVkTmFtZSA9PSBvdGhlci5tYXBwZWROYW1lOworICAgICAgICB9
CisKKyAgICAgICAgR0MzRGVudW0gdHlwZTsKKyAgICAgICAgaW50IHNpemU7CisgICAgICAgIFN0
cmluZyBtYXBwZWROYW1lOworICAgIH07CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBW
YXJpYWJsZUluZm8+IFNoYWRlclZhcmlhYmxlTWFwOworCiAgICAgc3RydWN0IFNoYWRlclNvdXJj
ZUVudHJ5IHsKKyAgICAgICAgR0MzRGVudW0gdHlwZTsKICAgICAgICAgU3RyaW5nIHNvdXJjZTsK
KyAgICAgICAgU3RyaW5nIHRyYW5zbGF0ZWRTb3VyY2U7CiAgICAgICAgIFN0cmluZyBsb2c7CiAg
ICAgICAgIGJvb2wgaXNWYWxpZDsKKyAgICAgICAgU2hhZGVyVmFyaWFibGVNYXAgdW5pZm9ybU1h
cDsKKyAgICAgICAgU2hhZGVyVmFyaWFibGVNYXAgYXR0cmliTWFwOwogICAgICAgICBTaGFkZXJT
b3VyY2VFbnRyeSgpCi0gICAgICAgICAgICA6IGlzVmFsaWQoMCkKKyAgICAgICAgICAgIDogdHlw
ZShWRVJURVhfU0hBREVSKQorICAgICAgICAgICAgLCBpc1ZhbGlkKDApCiAgICAgICAgIHsKICAg
ICAgICAgfQogICAgIH07Ci0gICAgSGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0LCBTaGFkZXJTb3Vy
Y2VFbnRyeT4gbV9zaGFkZXJTb3VyY2VNYXA7CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8UGxhdGZv
cm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+IFNoYWRlclNvdXJjZU1hcDsKKyAgICBTaGFk
ZXJTb3VyY2VNYXAgbV9zaGFkZXJTb3VyY2VNYXA7CisKKyAgICBTdHJpbmcgZ2V0TWFwcGVkVmFy
aWFibGVOYW1lKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgU2hTaGFkZXJJbmZvIHZhcmlhYmxl
VHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKTsKIAogICAgIEFOR0xFV2ViS2l0QnJpZGdlIG1fY29t
cGlsZXI7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dy
YW0uY3BwCmluZGV4IDQyMTFlODJiNzgxYjFhMGFjYjUyN2YzMGRmNWMwMTQzOWM0NTE4MDkuLjNl
ZDBhMDBjYzI4OWYxYzljOWQ1MDczNmUyMmY1MzEwNWI4ZmQ0NzQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyVmFsaWRhdGVk
UHJvZ3JhbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9DdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtLmNwcApAQCAtODUsOCArODUsOSBAQCBDdXN0
b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtOjpDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtKEN1
c3RvbUZpbHRlckdsb2JhbENvbgogICAgIC8vIFNoYWRlcnMgcmVmZXJlbmNlZCBmcm9tIHRoZSBD
U1MgbWl4IGZ1bmN0aW9uIHVzZSBhIGRpZmZlcmVudCB2YWxpZGF0b3IgdGhhbiByZWd1bGFyIFdl
YkdMIHNoYWRlcnMuIFNlZSBDdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0LmggZm9yIG1vcmUgZGV0
YWlscy4KICAgICBBTkdMRVdlYktpdEJyaWRnZSogdmFsaWRhdG9yID0gcHJvZ3JhbUluZm8ubWl4
U2V0dGluZ3MoKS5lbmFibGVkID8gbV9nbG9iYWxDb250ZXh0LT5taXhTaGFkZXJWYWxpZGF0b3Io
KSA6IG1fZ2xvYmFsQ29udGV4dC0+d2ViZ2xTaGFkZXJWYWxpZGF0b3IoKTsKICAgICBTdHJpbmcg
dmVydGV4U2hhZGVyTG9nLCBmcmFnbWVudFNoYWRlckxvZzsKLSAgICBib29sIHZlcnRleFNoYWRl
clZhbGlkID0gdmFsaWRhdG9yLT52YWxpZGF0ZVNoYWRlclNvdXJjZShvcmlnaW5hbFZlcnRleFNo
YWRlci51dGY4KCkuZGF0YSgpLCBTSEFERVJfVFlQRV9WRVJURVgsIG1fdmFsaWRhdGVkVmVydGV4
U2hhZGVyLCB2ZXJ0ZXhTaGFkZXJMb2csIFNIX0FUVFJJQlVURVNfVU5JRk9STVMpOwotICAgIGJv
b2wgZnJhZ21lbnRTaGFkZXJWYWxpZCA9IHZhbGlkYXRvci0+dmFsaWRhdGVTaGFkZXJTb3VyY2Uo
b3JpZ2luYWxGcmFnbWVudFNoYWRlci51dGY4KCkuZGF0YSgpLCBTSEFERVJfVFlQRV9GUkFHTUVO
VCwgbV92YWxpZGF0ZWRGcmFnbWVudFNoYWRlciwgZnJhZ21lbnRTaGFkZXJMb2csIFNIX0FUVFJJ
QlVURVNfVU5JRk9STVMpOworICAgIFZlY3RvcjxBTkdMRVNoYWRlclN5bWJvbD4gdmFyaWFibGVz
OworICAgIGJvb2wgdmVydGV4U2hhZGVyVmFsaWQgPSB2YWxpZGF0b3ItPmNvbXBpbGVTaGFkZXJT
b3VyY2Uob3JpZ2luYWxWZXJ0ZXhTaGFkZXIudXRmOCgpLmRhdGEoKSwgU0hBREVSX1RZUEVfVkVS
VEVYLCBtX3ZhbGlkYXRlZFZlcnRleFNoYWRlciwgdmVydGV4U2hhZGVyTG9nLCB2YXJpYWJsZXMp
OworICAgIGJvb2wgZnJhZ21lbnRTaGFkZXJWYWxpZCA9IHZhbGlkYXRvci0+Y29tcGlsZVNoYWRl
clNvdXJjZShvcmlnaW5hbEZyYWdtZW50U2hhZGVyLnV0ZjgoKS5kYXRhKCksIFNIQURFUl9UWVBF
X0ZSQUdNRU5ULCBtX3ZhbGlkYXRlZEZyYWdtZW50U2hhZGVyLCBmcmFnbWVudFNoYWRlckxvZywg
dmFyaWFibGVzKTsKICAgICBpZiAoIXZlcnRleFNoYWRlclZhbGlkIHx8ICFmcmFnbWVudFNoYWRl
clZhbGlkKSB7CiAgICAgICAgIC8vIEZJWE1FOiBSZXBvcnQgdGhlIHZhbGlkYXRpb24gZXJyb3Jz
LgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ0
MTYKQEAgLTk0LDEyICs5NSwxMCBAQCBDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtOjpDdXN0
b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtKEN1c3RvbUZpbHRlckdsb2JhbENvbgogICAgIH0KIAog
ICAgIC8vIFZhbGlkYXRlIHRoZSBhdXRob3IncyBzYW1wbGVycy4KLSAgICBWZWN0b3I8QU5HTEVT
aGFkZXJTeW1ib2w+IHVuaWZvcm1zOwotICAgIGlmICghdmFsaWRhdG9yLT5nZXRVbmlmb3JtcyhT
SF9WRVJURVhfU0hBREVSLCB1bmlmb3JtcykpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZh
bGlkYXRvci0+Z2V0VW5pZm9ybXMoU0hfRlJBR01FTlRfU0hBREVSLCB1bmlmb3JtcykpCi0gICAg
ICAgIHJldHVybjsKLSAgICBmb3IgKFZlY3RvcjxBTkdMRVNoYWRlclN5bWJvbD46Oml0ZXJhdG9y
IGl0ID0gdW5pZm9ybXMuYmVnaW4oKTsgaXQgIT0gdW5pZm9ybXMuZW5kKCk7ICsraXQpIHsKKyAg
ICBmb3IgKFZlY3RvcjxBTkdMRVNoYWRlclN5bWJvbD46Oml0ZXJhdG9yIGl0ID0gdmFyaWFibGVz
LmJlZ2luKCk7IGl0ICE9IHZhcmlhYmxlcy5lbmQoKTsgKytpdCkgeworICAgICAgICAvLyBXZSdy
ZSBvbmx5IGNoZWNraW5nIHVuaWZvcm1zCisgICAgICAgIGlmIChpdC0+c3ltYm9sVHlwZSAhPSBT
SEFERVJfU1lNQk9MX1RZUEVfVU5JRk9STSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICBpZiAoaXQtPmlzU2FtcGxlcigpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogRm9yIG5vdywg
d2UgcmVzdHJpY3Qgc2hhZGVycyB3aXRoIGFueSBzYW1wbGVyIGRlZmluZWQuCiAgICAgICAgICAg
ICAvLyBXaGVuIHdlIGltcGxlbWVudCB0ZXh0dXJlIHBhcmFtZXRlcnMsIHdlIHdpbGwgYWxsb3cg
c2hhZGVycyB3aG9zZSBzYW1wbGVycyBhcmUgYm91bmQgdG8gdmFsaWQgdGV4dHVyZXMuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9u
czNET3BlbkdMQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwCmluZGV4IDYwZjZiZmFmM2E4MTZhN2Ey
Y2JmMzY2ZTI1ODM0MzNkZWY1ZDEwNjEuLjE0Yzg2MjJiOTYxOWJlYmM4YzBjM2I3M2VjZjc0MzA5
NWM5YWRkNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwCkBAIC05
NSw3ICs5NSw3IEBAIGludCBFeHRlbnNpb25zM0RPcGVuR0xDb21tb246OmdldEdyYXBoaWNzUmVz
ZXRTdGF0dXNBUkIoKQogICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1I7CiB9
CiAKLVN0cmluZyBFeHRlbnNpb25zM0RPcGVuR0xDb21tb246OmdldFRyYW5zbGF0ZWRTaGFkZXJT
b3VyY2VBTkdMRShQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKK1N0cmluZyBFeHRlbnNpb25zM0RP
cGVuR0xDb21tb246OnRyYW5zbGF0ZVNoYWRlckFOR0xFKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVy
KQogewogICAgIEFTU0VSVChzaGFkZXIpOwogICAgIGludCBHTHNoYWRlclR5cGU7CkBAIC0xMjks
MTEgKzEyOSwyNiBAQCBTdHJpbmcgRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOjpnZXRUcmFuc2xh
dGVkU2hhZGVyU291cmNlQU5HTEUoUGxhdGZvcm0zRE9iamVjdAogICAgICAgICBleHRyYUNvbXBp
bGVPcHRpb25zIHw9IFNIX0VNVUxBVEVfQlVJTFRfSU5fRlVOQ1RJT05TOwogI2VuZGlmCiAKLSAg
ICBib29sIGlzVmFsaWQgPSBjb21waWxlci52YWxpZGF0ZVNoYWRlclNvdXJjZShlbnRyeS5zb3Vy
Y2UudXRmOCgpLmRhdGEoKSwgc2hhZGVyVHlwZSwgdHJhbnNsYXRlZFNoYWRlclNvdXJjZSwgc2hh
ZGVySW5mb0xvZywgZXh0cmFDb21waWxlT3B0aW9ucyk7CisgICAgVmVjdG9yPEFOR0xFU2hhZGVy
U3ltYm9sPiB2YXJpYWJsZXM7CisgICAgYm9vbCBpc1ZhbGlkID0gY29tcGlsZXIuY29tcGlsZVNo
YWRlclNvdXJjZShlbnRyeS5zb3VyY2UudXRmOCgpLmRhdGEoKSwgc2hhZGVyVHlwZSwgdHJhbnNs
YXRlZFNoYWRlclNvdXJjZSwgc2hhZGVySW5mb0xvZywgdmFyaWFibGVzLCBleHRyYUNvbXBpbGVP
cHRpb25zKTsKIAogICAgIGVudHJ5LmxvZyA9IHNoYWRlckluZm9Mb2c7CiAgICAgZW50cnkuaXNW
YWxpZCA9IGlzVmFsaWQ7CiAKKyAgICBmb3IgKFZlY3RvcjxBTkdMRVNoYWRlclN5bWJvbD46Oml0
ZXJhdG9yIGl0ID0gdmFyaWFibGVzLmJlZ2luKCk7IGl0ICE9IHZhcmlhYmxlcy5lbmQoKTsgKytp
dCkgeworICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6VmFyaWFibGVJbmZvIHZhcmlhYmxlSW5m
byhpdC0+ZGF0YVR5cGUsIGl0LT5zaXplLCBpdC0+bWFwcGVkTmFtZSk7CisgICAgICAgIHN3aXRj
aCAoaXQtPnN5bWJvbFR5cGUpIHsKKyAgICAgICAgY2FzZSBTSEFERVJfU1lNQk9MX1RZUEVfQVRU
UklCVVRFOgorICAgICAgICAgICAgZW50cnkuYXR0cmliTWFwLnNldChpdC0+bmFtZSwgdmFyaWFi
bGVJbmZvKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNIQURFUl9TWU1CT0xf
VFlQRV9VTklGT1JNOgorICAgICAgICAgICAgZW50cnkudW5pZm9ybU1hcC5zZXQoaXQtPm5hbWUs
IHZhcmlhYmxlSW5mbyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorCiAgICAg
aWYgKCFpc1ZhbGlkKQogICAgICAgICByZXR1cm4gIiI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24u
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RP
cGVuR0xDb21tb24uaAppbmRleCA3NTg2OWRlMTk5NmUzMTE4YWU0YzJjM2RiMTk3NmE3MDY2OGY5
NDk1Li4zZWFlYTNiNjgyNzlkMzcwMDNlNmJlZTRkNDNiNWRiMjBhYjNjYTFkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3Bl
bkdMQ29tbW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Blbmds
L0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oCkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIEdDM0Rib29sZWFuIGlzVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCkg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCBiaW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVj
dCkgPSAwOwogCi0gICAgdmlydHVhbCBTdHJpbmcgZ2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFO
R0xFKFBsYXRmb3JtM0RPYmplY3QpOworICAgIHZpcnR1YWwgU3RyaW5nIHRyYW5zbGF0ZVNoYWRl
ckFOR0xFKFBsYXRmb3JtM0RPYmplY3QpOwogCiAgICAgLy8gRVhUIFJvYnVzdG5lc3MgLSB1c2Vz
IGdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKQogICAgIHZpcnR1YWwgdm9pZCByZWFkblBpeGVs
c0VYVChpbnQgeCwgaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0Mz
RGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEc2l6ZWkgYnVmU2l6ZSwgdm9pZCAqZGF0
YSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAppbmRl
eCA0ZmZmZWU0N2QwYmZkYWRjYjliNGZkMjA3OGI5NjZmNGFkNjFjYWNhLi4wOTg3MzUzNzgyZjg0
ODE3ZDE4N2U1NGVlODMzNGExZjA5NTg0NzY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0Nv
bnRleHQzRE9wZW5HTENvbW1vbi5jcHAKQEAgLTQ0OSw3ICs0NDksNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpjb21waWxlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQogICAgIEFT
U0VSVChzaGFkZXIpOwogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogCi0gICAgU3RyaW5nIHRy
YW5zbGF0ZWRTaGFkZXJTb3VyY2UgPSBtX2V4dGVuc2lvbnMtPmdldFRyYW5zbGF0ZWRTaGFkZXJT
b3VyY2VBTkdMRShzaGFkZXIpOworICAgIFN0cmluZyB0cmFuc2xhdGVkU2hhZGVyU291cmNlID0g
bV9leHRlbnNpb25zLT50cmFuc2xhdGVTaGFkZXJBTkdMRShzaGFkZXIpOwogCiAgICAgaWYgKCF0
cmFuc2xhdGVkU2hhZGVyU291cmNlLmxlbmd0aCgpKQogICAgICAgICByZXR1cm47CkBAIC00NzEs
NyArNDcxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29tcGlsZVNoYWRlcihQbGF0Zm9y
bTNET2JqZWN0IHNoYWRlcikKICAgICA6OmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBHTF9JTkZPX0xP
R19MRU5HVEgsICZsZW5ndGgpOwogCiAgICAgaWYgKGxlbmd0aCkgewotICAgICAgICBIYXNoTWFw
PFBsYXRmb3JtM0RPYmplY3QsIEdyYXBoaWNzQ29udGV4dDNEOjpTaGFkZXJTb3VyY2VFbnRyeT46
Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICAg
ICAgU2hhZGVyU291cmNlTWFwOjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5m
aW5kKHNoYWRlcik7CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpTaGFkZXJTb3VyY2VFbnRy
eSYgZW50cnkgPSByZXN1bHQtPnNlY29uZDsKIAogICAgICAgICBHTHNpemVpIHNpemUgPSAwOwpA
QCAtNjc3LDEzICs2NzcsNTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0YWNoZWRT
aGFkZXJzKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHNpemVpIG0KICAgICA6OmdsR2V0
QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIG1heENvdW50LCBjb3VudCwgc2hhZGVycyk7CiB9CiAK
KyNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oUVQpIHx8IFBM
QVRGT1JNKEVGTCkgfHwgUExBVEZPUk0oQkxBQ0tCRVJSWSkKK1N0cmluZyBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0TWFwcGVkVmFyaWFibGVOYW1lKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgU2hT
aGFkZXJJbmZvIHZhcmlhYmxlVHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIFN0cmlu
ZyBtYXBwZWROYW1lID0gU3RyaW5nKG5hbWUpOworCisgICAgR0MzRHNpemVpIGNvdW50OworICAg
IFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyc1syXTsKKyAgICBnZXRBdHRhY2hlZFNoYWRlcnMocHJv
Z3JhbSwgMiwgJmNvdW50LCBzaGFkZXJzKTsKKworICAgIGZvciAoR0MzRHNpemVpIGkgPSAwOyBp
IDwgY291bnQ7ICsraSkgeworICAgICAgICBTaGFkZXJTb3VyY2VNYXA6Oml0ZXJhdG9yIHJlc3Vs
dCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyc1tpXSk7CisgICAgICAgIGlmIChyZXN1
bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICBTaGFkZXJTb3VyY2VFbnRyeSBlbnRyeSA9IHJlc3VsdC0+c2Vjb25kOworICAgICAg
ICBTaGFkZXJWYXJpYWJsZU1hcDo6aXRlcmF0b3IgdmFyaWFibGVSZXN1bHQ7CisgICAgICAgIGlm
ICh2YXJpYWJsZVR5cGUgPT0gU0hfQUNUSVZFX0FUVFJJQlVURVMpIHsKKyAgICAgICAgICAgIHZh
cmlhYmxlUmVzdWx0ID0gZW50cnkuYXR0cmliTWFwLmZpbmQobmFtZSk7CisgICAgICAgICAgICBp
ZiAodmFyaWFibGVSZXN1bHQgPT0gZW50cnkuYXR0cmliTWFwLmVuZCgpKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFyaWFibGVSZXN1
bHQgPSBlbnRyeS51bmlmb3JtTWFwLmZpbmQobmFtZSk7CisgICAgICAgICAgICBpZiAodmFyaWFi
bGVSZXN1bHQgPT0gZW50cnkudW5pZm9ybU1hcC5lbmQoKSkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIG1hcHBlZE5hbWUgPSB2YXJpYWJsZVJlc3VsdC0+
c2Vjb25kLm1hcHBlZE5hbWU7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gbWFw
cGVkTmFtZTsKK30KKyNlbmRpZgorCiBpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEF0dHJpYkxv
Y2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQogewog
ICAgIGlmICghcHJvZ3JhbSkKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgcmV0dXJuIDo6Z2xHZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBuYW1l
LnV0ZjgoKS5kYXRhKCkpOworCisgICAgLy8gVGhlIGF0dHJpYnV0ZSBuYW1lIG1heSBoYXZlIGJl
ZW4gdHJhbnNsYXRlZCBkdXJpbmcgQU5HTEUgY29tcGlsYXRpb24uCisgICAgLy8gTG9vayB0aHJv
dWdoIHRoZSBjb3JyZXNwb25kaW5nIFNoYWRlclNvdXJjZU1hcCB0byBtYWtlIHN1cmUgd2UKKyAg
ICAvLyByZWZlcmVuY2UgdGhlIG1hcHBlZCBuYW1lIHJhdGhlciB0aGFuIHRoZSBleHRlcm5hbCBu
YW1lLgorICAgIFN0cmluZyBtYXBwZWROYW1lID0gZ2V0TWFwcGVkVmFyaWFibGVOYW1lKHByb2dy
YW0sIFNIX0FDVElWRV9BVFRSSUJVVEVTLCBuYW1lKTsKKworICAgIHJldHVybiA6OmdsR2V0QXR0
cmliTG9jYXRpb24ocHJvZ3JhbSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgpKTsKIH0KIAogR3Jh
cGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgR3JhcGhpY3NDb250ZXh0M0Q6OmdldENvbnRleHRB
dHRyaWJ1dGVzKCkKQEAgLTExMzIsNyArMTE3MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmdldFNoYWRlcml2KFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyLCBHQzNEZW51bSBwbmFtZSwgR0Mz
CiAKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKIAotICAgIEhhc2hNYXA8UGxhdGZvcm0zRE9i
amVjdCwgU2hhZGVyU291cmNlRW50cnk+OjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJj
ZU1hcC5maW5kKHNoYWRlcik7CisgICAgU2hhZGVyU291cmNlTWFwOjppdGVyYXRvciByZXN1bHQg
PSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CiAgICAgCiAgICAgc3dpdGNoIChwbmFt
ZSkgewogICAgIGNhc2UgREVMRVRFX1NUQVRVUzoKQEAgLTExNjcsNyArMTIwNiw3IEBAIFN0cmlu
ZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0IHNo
YWRlcikKIAogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogCi0gICAgSGFzaE1hcDxQbGF0Zm9y
bTNET2JqZWN0LCBTaGFkZXJTb3VyY2VFbnRyeT46Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVy
U291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICBTaGFkZXJTb3VyY2VNYXA6Oml0ZXJhdG9yIHJl
c3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKICAgICBpZiAocmVzdWx0ID09
IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7IAogCkBA
IC0xMTkzLDcgKzEyMzIsNyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlclNv
dXJjZShQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKIAogICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwogCi0gICAgSGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0LCBTaGFkZXJTb3VyY2VFbnRyeT46Oml0
ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICBTaGFk
ZXJTb3VyY2VNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hh
ZGVyKTsKICAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQogICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7IAogCkBAIC0xMjMwLDcgKzEyNjksMTMgQEAgR0MzRGludCBHcmFw
aGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybUxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3Jh
bSwgY29uc3QgU3QKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAKICAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICByZXR1cm4gOjpnbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBuYW1lLnV0
ZjgoKS5kYXRhKCkpOworCisgICAgLy8gVGhlIHVuaWZvcm0gbmFtZSBtYXkgaGF2ZSBiZWVuIHRy
YW5zbGF0ZWQgZHVyaW5nIEFOR0xFIGNvbXBpbGF0aW9uLgorICAgIC8vIExvb2sgdGhyb3VnaCB0
aGUgY29ycmVzcG9uZGluZyBTaGFkZXJTb3VyY2VNYXAgdG8gbWFrZSBzdXJlIHdlCisgICAgLy8g
cmVmZXJlbmNlIHRoZSBtYXBwZWQgbmFtZSByYXRoZXIgdGhhbiB0aGUgZXh0ZXJuYWwgbmFtZS4K
KyAgICBTdHJpbmcgbWFwcGVkTmFtZSA9IGdldE1hcHBlZFZhcmlhYmxlTmFtZShwcm9ncmFtLCBT
SF9BQ1RJVkVfVU5JRk9STVMsIG5hbWUpOworCisgICAgcmV0dXJuIDo6Z2xHZXRVbmlmb3JtTG9j
YXRpb24ocHJvZ3JhbSwgbWFwcGVkTmFtZS51dGY4KCkuZGF0YSgpKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVt
IHBuYW1lLCBHQzNEZmxvYXQqIHZhbHVlKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDYxY2JhYzdjN2YwZGU4MDdiMTFhMDg2
MTBkYmI3NWM2ZjhkYTE2ZjcuLjc5Y2I0NzM3MzYzNjZiMTJkYzE2YmYxOTMyOGQzYjFkNDRlMDQ0
MGQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAxMi0xMC0wMiAgRGVhbiBKYWNrc29uICA8ZGlu
b0BhcHBsZS5jb20+CisKKyAgICAgICAgQXR0cmlidXRlIGFuZCBVbmlmb3JtIHZhcmlhYmxlIG5h
bWVzIG5lZWQgdHJhbnNsYXRpb24gaW4gc2hhZGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDk4OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIHN1YnRlc3RzIHRvIGV4ZXJjaXNlIHZhcmlhYmxl
cyB0aGF0IGFyZSB3ZWxsIHVuZGVyIHRoZSBsaW1pdHMgYnV0CisgICAgICAgIG5vdCBsb25nIGVu
b3VnaCB0byBwcm9kdWNlIGFuIGVycm9yLiBUaGlzIHdheSB3ZSBub3cgdGVzdCBhbGwgdGhyZWUg
b3B0aW9uczoKKyAgICAgICAgdW5kZXIgdGhlIGxpbWl0LCBhdCB0aGUgbGltaXQsIG92ZXIgdGhl
IGxpbWl0LgorCisgICAgICAgIEFsc28sIHRoZSB0ZXN0cyBhcmUgdW5za2lwcGVkIG9uIE1hYy4K
KworICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL2F0dHJpYi1sb2NhdGlvbi1sZW5ndGgtbGlt
aXRzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9hdHRyaWItbG9j
YXRpb24tbGVuZ3RoLWxpbWl0cy5odG1sOgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL3Vu
aWZvcm0tbG9jYXRpb24tbGVuZ3RoLWxpbWl0cy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFz
dC9jYW52YXMvd2ViZ2wvdW5pZm9ybS1sb2NhdGlvbi1sZW5ndGgtbGltaXRzLmh0bWw6CisgICAg
ICAgICogcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnM6CisKIDIwMTItMDktMjcgIEFsZXhh
bmRyZSBFbGlhcyAgPGFlbGlhc0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBE
dW1wUmVuZGVyVHJlZSBzdXBwb3J0IGZvciBzb2Z0d2FyZSBjb21wb3NpdGluZwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvYXR0cmliLWxvY2F0aW9uLWxlbmd0aC1s
aW1pdHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvYXR0cmli
LWxvY2F0aW9uLWxlbmd0aC1saW1pdHMtZXhwZWN0ZWQudHh0CmluZGV4IGMyMjg5MTZjYWQyZjIx
NzAwNWRmNzEzN2QyNTFjYjIxMjhjOTgwMzQuLmIzNDUwZTQzYzU1OGUxY2NhNzE0ODUzMDdkMmYx
MDYyMWZhYTgzMzAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2F0
dHJpYi1sb2NhdGlvbi1sZW5ndGgtbGltaXRzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L2NhbnZhcy93ZWJnbC9hdHRyaWItbG9jYXRpb24tbGVuZ3RoLWxpbWl0cy1leHBlY3Rl
ZC50eHQKQEAgLTMsNiArMywxMCBAQCBUZXN0IGF0dHJpYiBsb2NhdGlvbiB1bmRlcm5lYXRoIHRo
ZSBsZW5ndGggbGltaXQKIFBBU1MgZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5M
SU5LX1NUQVRVUykgaXMgdHJ1ZQogUEFTUyBhdHRyaWIgbG9jYXRpb24gc2hvdWxkIG5vdCBiZSAt
MQogUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCitUZXN0IGF0
dHJpYiBsb2NhdGlvbiBleGFjdGx5IGF0IHRoZSBsZW5ndGggbGltaXQKK1BBU1MgZ2wuZ2V0UHJv
Z3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUykgaXMgdHJ1ZQorUEFTUyBhdHRy
aWIgbG9jYXRpb24gc2hvdWxkIG5vdCBiZSAtMQorUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQg
dmFsdWU6IE5PX0VSUk9SIDogCiBUZXN0IGF0dHJpYiBsb2NhdGlvbiBvdmVyIHRoZSBsZW5ndGgg
bGltaXQKIFNoYWRlciBjb21waWxhdGlvbiBzaG91bGQgZmFpbAogUEFTUyB3dHUubG9hZFNoYWRl
ckZyb21TY3JpcHQoZ2wsICJiYWRWZXJ0ZXhTaGFkZXIiLCBnbC5WRVJURVhfU0hBREVSLCBmdW5j
dGlvbiAoZXJyKSB7fSkgaXMgbnVsbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jYW52
YXMvd2ViZ2wvYXR0cmliLWxvY2F0aW9uLWxlbmd0aC1saW1pdHMuaHRtbCBiL0xheW91dFRlc3Rz
L2Zhc3QvY2FudmFzL3dlYmdsL2F0dHJpYi1sb2NhdGlvbi1sZW5ndGgtbGltaXRzLmh0bWwKaW5k
ZXggZjQ0NDgzNmU3ODhiNWFlMzdlMTFlZmYxOTQ1NDlhMGIyNDg3OGIyYy4uNzQ3OGQ3Y2JkNTU5
OWYwMjcwOGM0YTE4NDQyMWU4ZmZlMzE5NGMxNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFz
dC9jYW52YXMvd2ViZ2wvYXR0cmliLWxvY2F0aW9uLWxlbmd0aC1saW1pdHMuaHRtbAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9hdHRyaWItbG9jYXRpb24tbGVuZ3RoLWxpbWl0
cy5odG1sCkBAIC0xMyw3ICsxMywxNiBAQCBUaGVyZSBpcyBzdXBwb3NlZCB0byBiZSBhbiBleGFt
cGxlIGRyYXdpbmcgaGVyZSwgYnV0IGl0J3Mgbm90IGltcG9ydGFudC4KIDwvY2FudmFzPgogPGRp
diBpZD0iZGVzY3JpcHRpb24iPlZlcmlmeSBsaW1pdHMgb24gdGhlIGxlbmd0aHMgb2YgYXR0cmli
IGxvY2F0aW9ucy48L2Rpdj4KIDxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgotPHNjcmlwdCBpZD0i
Z29vZFZlcnRleFNoYWRlciIgdHlwZT0ieC1zaGFkZXIveC12ZXJ0ZXgiPgorPHNjcmlwdCBpZD0i
Z29vZFZlcnRleFNoYWRlcjEiIHR5cGU9Ingtc2hhZGVyL3gtdmVydGV4Ij4KKy8vIEEgdmVydGV4
IHNoYWRlciB3aGVyZSB0aGUgbmVlZGVkIGF0dHJpYiBsb2NhdGlvbiBpcyBsb25nLCBidXQgbm90
IG92ZXIgdGhlIGxpbWl0LgorYXR0cmlidXRlIHZlYzQgdlBvc2l0aW9uMDEyMzQ1Njc4OTAxMjM0
NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTA7
CisKK3ZvaWQgbWFpbigpCit7CisgICAgZ2xfUG9zaXRpb24gPSB2UG9zaXRpb24wMTIzNDU2Nzg5
MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2
Nzg5MDsKK30KKzwvc2NyaXB0PgorPHNjcmlwdCBpZD0iZ29vZFZlcnRleFNoYWRlcjIiIHR5cGU9
Ingtc2hhZGVyL3gtdmVydGV4Ij4KIC8vIEEgdmVydGV4IHNoYWRlciB3aGVyZSB0aGUgbmVlZGVk
IGF0dHJpYiBsb2NhdGlvbiBpcyBleGFjdGx5IDI1NiBjaGFyYWN0ZXJzLgogYXR0cmlidXRlIHZl
YzQgdlBvc2l0aW9uMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0
NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAx
MjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4
OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1
Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1NjsKIApAQCAtNDcsNyArNTYsMTggQEAgdmFy
IHd0dSA9IFdlYkdMVGVzdFV0aWxzOwogdmFyIGdsID0gd3R1LmNyZWF0ZTNEQ29udGV4dChkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiZXhhbXBsZSIpKTsKIAogZGVidWcoIlRlc3QgYXR0cmliIGxv
Y2F0aW9uIHVuZGVybmVhdGggdGhlIGxlbmd0aCBsaW1pdCIpOwotdmFyIHByb2dyYW0gPSB3dHUu
bG9hZFByb2dyYW1Gcm9tU2NyaXB0KGdsLCAiZ29vZFZlcnRleFNoYWRlciIsICJmcmFnbWVudFNo
YWRlciIpOwordmFyIHByb2dyYW0gPSB3dHUubG9hZFByb2dyYW1Gcm9tU2NyaXB0KGdsLCAiZ29v
ZFZlcnRleFNoYWRlcjEiLCAiZnJhZ21lbnRTaGFkZXIiKTsKK3Nob3VsZEJlKCdnbC5nZXRQcm9n
cmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJTktfU1RBVFVTKScsICd0cnVlJyk7Cit2YXIgYXR0
cmliTG9jID0gZ2wuZ2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgInZQb3NpdGlvbjAxMjM0NTY3
ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0
NTY3ODkwIik7CitpZiAoYXR0cmliTG9jID09IC0xKSB7CisgICAgdGVzdEZhaWxlZCgiYXR0cmli
IGxvY2F0aW9uIHdhcyAtMSwgc2hvdWxkIG5vdCBiZSIpOworfSBlbHNlIHsKKyAgICB0ZXN0UGFz
c2VkKCJhdHRyaWIgbG9jYXRpb24gc2hvdWxkIG5vdCBiZSAtMSIpOworfQord3R1LmdsRXJyb3JT
aG91bGRCZShnbCwgZ2wuTk9ORSk7CisKK2RlYnVnKCJUZXN0IGF0dHJpYiBsb2NhdGlvbiBleGFj
dGx5IGF0IHRoZSBsZW5ndGggbGltaXQiKTsKK3ZhciBwcm9ncmFtID0gd3R1LmxvYWRQcm9ncmFt
RnJvbVNjcmlwdChnbCwgImdvb2RWZXJ0ZXhTaGFkZXIyIiwgImZyYWdtZW50U2hhZGVyIik7CiBz
aG91bGRCZSgnZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUykn
LCAndHJ1ZScpOwogdmFyIGF0dHJpYkxvYyA9IGdsLmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0s
ICJ2UG9zaXRpb24wMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1
Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEy
MzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5
MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2
Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Iik7CiBpZiAoYXR0cmliTG9jID09IC0xKSB7
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC91bmlmb3JtLWxvY2F0
aW9uLWxlbmd0aC1saW1pdHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMv
d2ViZ2wvdW5pZm9ybS1sb2NhdGlvbi1sZW5ndGgtbGltaXRzLWV4cGVjdGVkLnR4dAppbmRleCA5
ZTA5OGVkZjBiMzg1NzUzYTUyYTQ0YmFkNmU4ZjM4OWM5MTZlYzcxLi41ZWQ3YmVkMzViZTZmY2Q3
ZDgyZTZlY2MyZWRmZTc4YTQwMjcwZTk1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2Nh
bnZhcy93ZWJnbC91bmlmb3JtLWxvY2F0aW9uLWxlbmd0aC1saW1pdHMtZXhwZWN0ZWQudHh0Cisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3VuaWZvcm0tbG9jYXRpb24tbGVuZ3Ro
LWxpbWl0cy1leHBlY3RlZC50eHQKQEAgLTMsNiArMywxMCBAQCBUZXN0IHVuaWZvcm0gbG9jYXRp
b24gdW5kZXJuZWF0aCB0aGUgbGVuZ3RoIGxpbWl0CiBQQVNTIGdsLmdldFByb2dyYW1QYXJhbWV0
ZXIocHJvZ3JhbSwgZ2wuTElOS19TVEFUVVMpIGlzIHRydWUKIFBBU1MgdW5pZm9ybUxvYyBpcyBu
b24tbnVsbC4KIFBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAor
VGVzdCB1bmlmb3JtIGxvY2F0aW9uIGV4YWN0bHkgYXQgdGhlIGxlbmd0aCBsaW1pdAorUEFTUyBn
bC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJTktfU1RBVFVTKSBpcyB0cnVlCitQ
QVNTIHVuaWZvcm1Mb2MgaXMgbm9uLW51bGwuCitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2
YWx1ZTogTk9fRVJST1IgOiAKIFRlc3QgdW5pZm9ybSBsb2NhdGlvbiBvdmVyIHRoZSBsZW5ndGgg
bGltaXQKIFBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAogUEFT
UyBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJTktfU1RBVFVTKSBpcyB0cnVl
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC91bmlmb3JtLWxvY2F0
aW9uLWxlbmd0aC1saW1pdHMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Vu
aWZvcm0tbG9jYXRpb24tbGVuZ3RoLWxpbWl0cy5odG1sCmluZGV4IDAwMGQ0OGM1ODljYjE4OThh
NDBiZmJmZTAwZjhjMGZiZWExY2JjNmEuLjQ1ZGRmOTM5MzliZjA1NTU5NjgxZTJlMTlkZTNiZjIz
YjIxNjNkYmMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3VuaWZv
cm0tbG9jYXRpb24tbGVuZ3RoLWxpbWl0cy5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY2Fu
dmFzL3dlYmdsL3VuaWZvcm0tbG9jYXRpb24tbGVuZ3RoLWxpbWl0cy5odG1sCkBAIC0xMyw3ICsx
MywyMyBAQCBUaGVyZSBpcyBzdXBwb3NlZCB0byBiZSBhbiBleGFtcGxlIGRyYXdpbmcgaGVyZSwg
YnV0IGl0J3Mgbm90IGltcG9ydGFudC4KIDwvY2FudmFzPgogPGRpdiBpZD0iZGVzY3JpcHRpb24i
PlZlcmlmeSBsaW1pdHMgb24gdGhlIGxlbmd0aHMgb2YgdW5pZm9ybSBsb2NhdGlvbnMuPC9kaXY+
CiA8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KLTxzY3JpcHQgaWQ9Imdvb2RWZXJ0ZXhTaGFkZXIi
IHR5cGU9Ingtc2hhZGVyL3gtdmVydGV4Ij4KKzxzY3JpcHQgaWQ9Imdvb2RWZXJ0ZXhTaGFkZXIx
IiB0eXBlPSJ4LXNoYWRlci94LXZlcnRleCI+CisvLyBBIHZlcnRleCBzaGFkZXIgd2hlcmUgdGhl
IHVuaWZvcm0gbmFtZSBpcyBsb25nLCBidXQgd2VsbCBiZWxvdyB0aGUgbGltaXQuCitzdHJ1Y3Qg
TmVzdGluZzIgeworICAgIHZlYzQgaWRlbnRpZmllcjYyQ2hhcmFjdGVyc0xvbmdfMDEyMzQ1Njc4
OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ7Cit9OworCitzdHJ1Y3QgTmVzdGluZzEgeworICAg
IE5lc3RpbmcyIGlkZW50aWZpZXI2NENoYXJhY3RlcnNMb25nXzAxMjM0NTY3ODkwMTIzNDU2Nzg5
MDEyMzQ1Njc4OTAxMjM0NTY7Cit9OworCit1bmlmb3JtIE5lc3RpbmcxIGlkZW50aWZpZXI3MENo
YXJhY3RlcnNMb25nXzAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwOwor
Cit2b2lkIG1haW4oKSB7CisgICAgZ2xfUG9zaXRpb24gPSBpZGVudGlmaWVyNzBDaGFyYWN0ZXJz
TG9uZ18wMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MC5pZGVudGlmaWVy
NjRDaGFyYWN0ZXJzTG9uZ18wMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Lmlk
ZW50aWZpZXI2MkNoYXJhY3RlcnNMb25nXzAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAx
MjM0OworfQorPC9zY3JpcHQ+Cis8c2NyaXB0IGlkPSJnb29kVmVydGV4U2hhZGVyMiIgdHlwZT0i
eC1zaGFkZXIveC12ZXJ0ZXgiPgogLy8gQSB2ZXJ0ZXggc2hhZGVyIHdoZXJlIHRoZSBuZWVkZWQg
dW5pZm9ybSBsb2NhdGlvbiBpcyBleGFjdGx5IDI1NiBjaGFyYWN0ZXJzLgogc3RydWN0IE5lc3Rp
bmcyIHsKICAgICB2ZWM0IGlkZW50aWZpZXI2MkNoYXJhY3RlcnNMb25nXzAxMjM0NTY3ODkwMTIz
NDU2Nzg5MDEyMzQ1Njc4OTAxMjM0OwpAQCAtNjIsNyArNzgsMTQgQEAgdmFyIHd0dSA9IFdlYkdM
VGVzdFV0aWxzOwogdmFyIGdsID0gd3R1LmNyZWF0ZTNEQ29udGV4dChkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiZXhhbXBsZSIpKTsKIAogZGVidWcoIlRlc3QgdW5pZm9ybSBsb2NhdGlvbiB1bmRl
cm5lYXRoIHRoZSBsZW5ndGggbGltaXQiKTsKLXZhciBwcm9ncmFtID0gd3R1LmxvYWRQcm9ncmFt
RnJvbVNjcmlwdChnbCwgImdvb2RWZXJ0ZXhTaGFkZXIiLCAiZnJhZ21lbnRTaGFkZXIiKTsKK3Zh
ciBwcm9ncmFtID0gd3R1LmxvYWRQcm9ncmFtRnJvbVNjcmlwdChnbCwgImdvb2RWZXJ0ZXhTaGFk
ZXIxIiwgImZyYWdtZW50U2hhZGVyIik7CitzaG91bGRCZSgnZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRl
cihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUyknLCAndHJ1ZScpOwordmFyIHVuaWZvcm1Mb2MgPSBn
bC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgImlkZW50aWZpZXI3MENoYXJhY3RlcnNMb25n
XzAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwLmlkZW50aWZpZXI2NENo
YXJhY3RlcnNMb25nXzAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTYuaWRlbnRp
ZmllcjYyQ2hhcmFjdGVyc0xvbmdfMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQi
KTsKK3Nob3VsZEJlTm9uTnVsbCgndW5pZm9ybUxvYycpOword3R1LmdsRXJyb3JTaG91bGRCZShn
bCwgZ2wuTk9ORSk7CisKK2RlYnVnKCJUZXN0IHVuaWZvcm0gbG9jYXRpb24gZXhhY3RseSBhdCB0
aGUgbGVuZ3RoIGxpbWl0Iik7Cit2YXIgcHJvZ3JhbSA9IHd0dS5sb2FkUHJvZ3JhbUZyb21TY3Jp
cHQoZ2wsICJnb29kVmVydGV4U2hhZGVyMiIsICJmcmFnbWVudFNoYWRlciIpOwogc2hvdWxkQmUo
J2dsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuTElOS19TVEFUVVMpJywgJ3RydWUn
KTsKIHZhciB1bmlmb3JtTG9jID0gZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sICJpZGVu
dGlmaWVyMTI4Q2hhcmFjdGVyc0xvbmdfMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEy
MzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5
MDEyMzQ1Njc4OS5pZGVudGlmaWVyNjRDaGFyYWN0ZXJzTG9uZ18wMTIzNDU2Nzg5MDEyMzQ1Njc4
OTAxMjM0NTY3ODkwMTIzNDU2LmlkZW50aWZpZXI2MkNoYXJhY3RlcnNMb25nXzAxMjM0NTY3ODkw
MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0Iik7CiBzaG91bGRCZU5vbk51bGwoJ3VuaWZvcm1Mb2Mn
KTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25z
IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggYWYzNjY3
MzE0YzExNmE0M2Q5MWU4MzQ1YTM2NDU2NjkyMjY1M2MyOS4uNzQ1MWNjNzc1MTE2YjNkMzc3YzUz
YjNhZDNmNGZhMmMyNmJiYmU3NyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFj
L1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBl
Y3RhdGlvbnMKQEAgLTQ3OSwxMCArNDc5LDYgQEAgZmFzdC9ldmVudHMvcGxhdGZvcm0td2hlZWxl
dmVudC1wYWdpbmcteS1pbi1ub24tc2Nyb2xsaW5nLXBhZ2UuaHRtbAogZmFzdC9ldmVudHMvcGxh
dGZvcm0td2hlZWxldmVudC1wYWdpbmcteS1pbi1zY3JvbGxpbmctZGl2Lmh0bWwKIGZhc3QvZXZl
bnRzL3BsYXRmb3JtLXdoZWVsZXZlbnQtcGFnaW5nLXktaW4tc2Nyb2xsaW5nLXBhZ2UuaHRtbAog
Ci0jIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDk4OQotZmFzdC9j
YW52YXMvd2ViZ2wvYXR0cmliLWxvY2F0aW9uLWxlbmd0aC1saW1pdHMuaHRtbAotZmFzdC9jYW52
YXMvd2ViZ2wvdW5pZm9ybS1sb2NhdGlvbi1sZW5ndGgtbGltaXRzLmh0bWwKLQogIyBXZWIgSW50
ZW50cyBpcyBub3QgeWV0IGVuYWJsZWQuCiB3ZWJpbnRlbnRzLwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>166762</attachid>
            <date>2012-10-02 15:22:51 -0700</date>
            <delta_ts>2012-10-02 17:41:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70989-20121003082202.patch</filename>
            <type>text/plain</type>
            <size>36715</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5ODI5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWI3YzBjNTZhNjljMTlk
Y2M0ZTNlMTc5Y2IzNzcxY2VkMTdlMDcxYS4uM2EwNDg3ZGU3MWM0ODNhNThiNjcwMGYwNjM5NjU1
NjIxMGRkMDMyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc2IEBACisyMDEyLTEwLTAyICBEZWFu
IEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KKworICAgICAgICBBdHRyaWJ1dGUgYW5kIFVuaWZv
cm0gdmFyaWFibGUgbmFtZXMgbmVlZCB0cmFuc2xhdGlvbiBpbiBzaGFkZXIKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwOTg5CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViR0wgc3BlY2lmaWVzIHNvbWUg
bWF4aW11bSBsZW5ndGhzIGZvciB2YXJpYWJsZSBuYW1lcyAoYXR0cmlidXRlcworICAgICAgICBh
bmQgdW5pZm9ybXMpLiBBbHNvLCBzb21lIEdMIGRyaXZlcnMgaGF2ZSBpc3N1ZXMgd2l0aCBsb25n
IG5hbWVzLiBGb3IKKyAgICAgICAgdGhhdCByZWFzb24sIEFOR0xFIGhhcyBhbiBvcHRpb24gdG8g
cmV3cml0ZSB0aGUgc2hhZGVyLCB0cmFuc2xhdGluZworICAgICAgICBsb25nIG5hbWVzIGludG8g
c2hvcnQgbmFtZXMuIFR1cm5pbmcgdGhpcyBvbiBoZWxwcyBzaGFkZXJzIGNvbXBpbGUsCisgICAg
ICAgIGJ1dCB3ZSBuZWVkIHRvIGtlZXAgYSBtYXBwaW5nIGJldHdlZW4gdGhlIG9yaWdpbmFsIG5h
bWVzIGFuZCB0aGUKKyAgICAgICAgdHJhbnNsYXRlZCBuYW1lcywgc28gdGhhdCB3ZSBiaW5kIHRv
IHRoZSByaWdodCBsb2NhdGlvbiBmcm9tIHVzZXIgY29kZQorICAgICAgICAod2hpY2ggd29uJ3Qg
ZXZlciBzZWUgdGhlIHRyYW5zbGF0ZWQgc291cmNlKS4KKworICAgICAgICBUaGlzIHByb3ZpZGVk
IGFuIG9wcG9ydHVuaXR5IHRvIGNsZWFuIHVwIHNvbWUgb3RoZXIgYml0cyBvZiBjb2RlOgorICAg
ICAgICBDU1MgRmlsdGVycyBleGFtaW5lZCB0aGUgdW5pZm9ybSBuYW1lcyBhZnRlciBhIGNvbXBp
bGF0aW9uOyBJdCBjYW4KKyAgICAgICAgbm93IHVzZSB0aGUgdmFyaWFibGUgbmFtZSBtYXAuIEkg
YWxzbyBhZGRlZCBhIHR5cGVkZWYgZm9yIHRoZQorICAgICAgICBIYXNoTWFwcyB0aGF0IGtlZXAg
dGhlIHNoYWRlciwgdGhlIHNvdXJjZSBjb2RlIGFuZCB0aGUgdmFyaWFibGUgbmFtZQorICAgICAg
ICBtYXBwaW5ncy4gQW5kIGxhc3RseSwgSSByZW5hbWVkIHNvbWUgZnVuY3Rpb25zIGluIEV4dGVu
c2lvbnMzRAorICAgICAgICB0byBiZXR0ZXIgcmVmbGVjdCB3aGF0IHRoZXkgd2VyZSBkb2luZy4K
KworICAgICAgICBJIGFsc28gb3BlbmVkIGEgZm9sbG93dXAgYnVnIHRvIG1ha2Ugc3VyZSB0aGVz
ZSB0YWJsZXMgYXJlIGRlbGV0ZWQKKyAgICAgICAgd2hlbiB0aGUgYXNzb2NpYXRlZCBzaGFkZXJz
IChvciBsaW5rZWQgcHJvZ3JhbXMpIGdvIGF3YXk6CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD05ODIwNAorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3Rp
bmcgdGVzdHMgKHdpdGggc29tZSBlbmhhbmNlbWVudHMpOgorICAgICAgICAtIGZhc3QvY2FudmFz
L3dlYmdsL2F0dHJpYi1sb2NhdGlvbi1sZW5ndGgtbGltaXRzLmh0bWw6CisgICAgICAgIC0gZmFz
dC9jYW52YXMvd2ViZ2wvdW5pZm9ybS1sb2NhdGlvbi1sZW5ndGgtbGltaXRzLmh0bWw6CisKKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTERlYnVnU2hhZGVycy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTERlYnVnU2hhZGVyczo6Z2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZSk6IFVzZSBu
ZXcgbWV0aG9kIG5hbWUuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRC
cmlkZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0VmFyaWFibGVJbmZvKTogRXh0cmFjdHMg
YWxsIHRoZSBpbmZvcm1hdGlvbiBvbiB2YXJpYWJsZXMgKGVpdGhlciBhdHRyaWJ1dGVzCisgICAg
ICAgIG9yIHVuaWZvcm1zKSBmcm9tIHRoZSBuZXdseSBjb21waWxlZCBzaGFkZXIuCisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkFOR0xFV2ViS2l0QnJpZGdlOjpjb21waWxl
U2hhZGVyU291cmNlKTogTmV3IG1ldGhvZCBuYW1lLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0FOR0xFV2ViS2l0QnJpZGdlLmg6CisgICAgICAgIChXZWJDb3JlOjpnZXRVbmlmb3Jtcyk6
IERlbGV0ZWQgdGhpcyBtZXRob2QuCisgICAgICAgIChXZWJDb3JlOjpjb21waWxlU2hhZGVyU291
cmNlKTogTmV3IG1ldGhvZCBuYW1lLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL3N1cHBv
cnQvRXh0ZW5zaW9uczNEQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9u
czNEQ2hyb21pdW06OnRyYW5zbGF0ZVNoYWRlckFOR0xFKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9FeHRlbnNpb25zM0RDaHJvbWl1bS5oOgorICAgICAgICAoRXh0ZW5z
aW9uczNEQ2hyb21pdW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVuc2lvbnMz
RC5oOiBBbm90aGVyIG1ldGhvZCByZW5hbWUuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0M0QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpWYXJpYWJsZUluZm86OlZhcmlhYmxlSW5mbyk6IEEgbmV3IG9iamVjdCB0aGF0CisgICAgICAg
IGhvbGRzIHRoZSBzaXplLCB0eXBlIGFuZCB0cmFuc2xhdGVkIG5hbWUgb2YgYSB2YXJpYWJsZSBm
cm9tIGEgV2ViR0wgc2hhZGVyLgorICAgICAgICAoR3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAg
ICAoU2hhZGVyU291cmNlRW50cnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OlNoYWRlclNvdXJjZUVudHJ5OjpTaGFkZXJTb3VyY2VFbnRyeSk6IEVuaGFuY2UKKyAgICAg
ICAgdGhpcyBzdHJ1Y3R1cmUgdG8ga2VlcCB0cmFjayBvZiBhIGZldyBtb3JlIHRoaW5ncyAtIHRo
ZSB0cmFuc2xhdGVkIHNvdXJjZSBjb2RlCisgICAgICAgIGFuZCB0cmFuc2xhdGlvbiBtYXBzIGZv
ciB0aGUgb3JpZ2luYWwgdW5pZm9ybSBhbmQgYXR0cmlidXRlIG5hbWVzLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtOjpDdXN0b21G
aWx0ZXJWYWxpZGF0ZWRQcm9ncmFtKTogVGhpcyBjYW4KKyAgICAgICAgbm93IHVzZSB0aGUgbGlz
dCBvZiBzaGFkZXIgc3ltYm9scyB0aGF0IGFyZSBleHBvcnRlZCBieSBjb21waWxlU2hhZGVyU291
cmNlIHJhdGhlcgorICAgICAgICB0aGFuIGhhdmUgY29kZSB0byBjaGVjayB1bmlmb3JtIG5hbWVz
IGRpcmVjdGx5LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25z
M0RPcGVuR0xDb21tb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdM
Q29tbW9uOjp0cmFuc2xhdGVTaGFkZXJBTkdMRSk6IENhbGwgbmV3IG1ldGhvZCBuYW1lIGFuZAor
ICAgICAgICBmaWxsIHRoZSB0cmFuc2xhdGlvbiBtYXBzIHdpdGggdGhlIGluZm9ybWF0aW9uIGNv
bWluZyBvdXQgb2YgQU5HTEUuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4
dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oOgorICAgICAgICAoRXh0ZW5zaW9uczNET3BlbkdMQ29t
bW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0
M0RPcGVuR0xDb21tb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OmNvbXBpbGVTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6Z2V0TWFwcGVkVmFyaWFibGVOYW1lKTogSGVscGVyIGZ1bmN0aW9u
IHRvIGNoYW5nZSBhbgorICAgICAgICBleHRlcm5hbC9vcmlnaW5hbCBuYW1lIHRvIHRoZSB2ZXJz
aW9uIHRoYXQgdGhlIHRyYW5zbGF0ZWQgc2hhZGVyIHVzZWQuCisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0cmliTG9jYXRpb24pOiBNYWtlIHN1cmUgdG8gbG9vayBm
b3IgYSB0cmFuc2xhdGVkIG5hbWUuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6Z2V0U2hhZGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6Omdl
dFNoYWRlckluZm9Mb2cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6Omdl
dFNoYWRlclNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0
VW5pZm9ybUxvY2F0aW9uKTogTWFrZSBzdXJlIHRvIGxvb2sgZm9yIGEgdHJhbnNsYXRlZCBuYW1l
LgorCiAyMDEyLTA5LTI3ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNv
bT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTI5ODIzLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1NoYWRlcnMuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1NoYWRlcnMuY3BwCmluZGV4IDU0OTlh
ZWQ5ZjA0OGIyOWQ5YzhlNWE1ZTI3NTNlMDRhMWQ1NGU1MzguLmJkMzY2MDA0MGE5YTQzMmM1ZDI5
OTQyYjQ1NTE2NmQxOTgyOTljNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMRGVidWdTaGFkZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTERlYnVnU2hhZGVycy5jcHAKQEAgLTYzLDcgKzYzLDcgQEAgU3RyaW5nIFdlYkdMRGVi
dWdTaGFkZXJzOjpnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlKFdlYkdMU2hhZGVyKiBzaGFkZXIs
IEV4Y2VwdGkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIGlmICghbV9jb250ZXh0LT52
YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlIiwgc2hhZGVyKSkK
ICAgICAgICAgcmV0dXJuICIiOwotICAgIHJldHVybiBtX2NvbnRleHQtPmdyYXBoaWNzQ29udGV4
dDNEKCktPmdldEV4dGVuc2lvbnMoKS0+Z2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFKHNo
YWRlci0+b2JqZWN0KCkpOworICAgIHJldHVybiBtX2NvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNE
KCktPmdldEV4dGVuc2lvbnMoKS0+dHJhbnNsYXRlU2hhZGVyQU5HTEUoc2hhZGVyLT5vYmplY3Qo
KSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvRXh0ZW5zaW9uczNEQ2hyb21pdW0uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9FeHRlbnNpb25zM0RDaHJv
bWl1bS5jcHAKaW5kZXggMTdjMzAyMTgzMGEyMGIyNGE0ZjdjNmVlNTEyMmFiYTFmY2IyMzljYy4u
N2IzYTExMDExZDhkOTllYzQyMzAxYTljYTc1Yzk1YTZiYjkzNWY4NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9FeHRlbnNpb25zM0RDaHJvbWl1
bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9FeHRl
bnNpb25zM0RDaHJvbWl1bS5jcHAKQEAgLTExNSw5ICsxMTUsOSBAQCB2b2lkIEV4dGVuc2lvbnMz
RENocm9taXVtOjpiaW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCBhcnJheSkKICAg
ICBtX3ByaXZhdGUtPndlYkNvbnRleHQoKS0+YmluZFZlcnRleEFycmF5T0VTKGFycmF5KTsKIH0K
IAotU3RyaW5nIEV4dGVuc2lvbnMzRENocm9taXVtOjpnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNl
QU5HTEUoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCitTdHJpbmcgRXh0ZW5zaW9uczNEQ2hyb21p
dW06OnRyYW5zbGF0ZVNoYWRlckFOR0xFKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQogewotICAg
IHJldHVybiBtX3ByaXZhdGUtPndlYkNvbnRleHQoKS0+Z2V0VHJhbnNsYXRlZFNoYWRlclNvdXJj
ZUFOR0xFKHNoYWRlcik7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+d2ViQ29udGV4dCgpLT50cmFu
c2xhdGVTaGFkZXJBTkdMRShzaGFkZXIpOwogfQogCiB2b2lkIEV4dGVuc2lvbnMzRENocm9taXVt
OjpyYXRlTGltaXRPZmZzY3JlZW5Db250ZXh0Q0hST01JVU0oKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuY3BwCmluZGV4IGI2
NDcyM2EwODEyYTI3MDc5MTU5YjdiMWJjMDI5ZjMwNmVkYzRkMzkuLjE4MGNhOGIzNWEwMWI3OTdl
MjlhNTRkOWY2MWJiYWE5NWI2NWEyZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktpdEJyaWRnZS5jcHAKQEAgLTMwLDYgKzMwLDggQEAK
ICNpbmNsdWRlICJBTkdMRVdlYktpdEJyaWRnZS5oIgogI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0
ci5oPgogCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGlu
bGluZSBzdGF0aWMgaW50IGdldFZhbGlkYXRpb25SZXN1bHRWYWx1ZShjb25zdCBTaEhhbmRsZSBj
b21waWxlciwgU2hTaGFkZXJJbmZvIHNoYWRlckluZm8pCkBAIC0zOSw2ICs0MSw2MiBAQCBpbmxp
bmUgc3RhdGljIGludCBnZXRWYWxpZGF0aW9uUmVzdWx0VmFsdWUoY29uc3QgU2hIYW5kbGUgY29t
cGlsZXIsIFNoU2hhZGVySW5mbwogICAgIHJldHVybiB2YWx1ZTsKIH0KIAorc3RhdGljIGJvb2wg
Z2V0VmFyaWFibGVJbmZvKGNvbnN0IFNoSGFuZGxlIGNvbXBpbGVyLCBTaFNoYWRlckluZm8gdmFy
aWFibGVUeXBlLCBWZWN0b3I8QU5HTEVTaGFkZXJTeW1ib2w+JiBzeW1ib2xzKQoreworICAgIFNo
U2hhZGVySW5mbyB2YXJpYWJsZU1heE5hbWVMZW5ndGhUeXBlOworCisgICAgc3dpdGNoICh2YXJp
YWJsZVR5cGUpIHsKKyAgICBjYXNlIFNIX0FDVElWRV9BVFRSSUJVVEVTOgorICAgICAgICB2YXJp
YWJsZU1heE5hbWVMZW5ndGhUeXBlID0gU0hfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RIOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFNIX0FDVElWRV9VTklGT1JNUzoKKyAgICAgICAgdmFy
aWFibGVNYXhOYW1lTGVuZ3RoVHlwZSA9IFNIX0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEg7Cisg
ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaW50IG51bVZhcmlhYmxlcyA9
IGdldFZhbGlkYXRpb25SZXN1bHRWYWx1ZShjb21waWxlciwgdmFyaWFibGVUeXBlKTsKKyAgICBp
ZiAobnVtVmFyaWFibGVzIDwgMCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaW50IG1h
eE5hbWVMZW5ndGggPSBnZXRWYWxpZGF0aW9uUmVzdWx0VmFsdWUoY29tcGlsZXIsIHZhcmlhYmxl
TWF4TmFtZUxlbmd0aFR5cGUpOworICAgIGlmIChtYXhOYW1lTGVuZ3RoIDw9IDEpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGludCBtYXhNYXBwZWROYW1lTGVuZ3RoID0gZ2V0VmFsaWRh
dGlvblJlc3VsdFZhbHVlKGNvbXBpbGVyLCBTSF9NQVBQRURfTkFNRV9NQVhfTEVOR1RIKTsKKyAg
ICBpZiAobWF4TWFwcGVkTmFtZUxlbmd0aCA8PSAxKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBPd25BcnJheVB0cjxjaGFyPiBuYW1lQnVmZmVyID0gYWRvcHRBcnJheVB0cihuZXcgY2hh
clttYXhOYW1lTGVuZ3RoXSk7CisgICAgT3duQXJyYXlQdHI8Y2hhcj4gbWFwcGVkTmFtZUJ1ZmZl
ciA9IGFkb3B0QXJyYXlQdHIobmV3IGNoYXJbbWF4TWFwcGVkTmFtZUxlbmd0aF0pOworICAgIAor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtVmFyaWFibGVzOyArK2kpIHsKKyAgICAgICAgQU5H
TEVTaGFkZXJTeW1ib2wgc3ltYm9sOworICAgICAgICBpbnQgbmFtZUxlbmd0aCA9IC0xOworICAg
ICAgICBzd2l0Y2ggKHZhcmlhYmxlVHlwZSkgeworICAgICAgICBjYXNlIFNIX0FDVElWRV9BVFRS
SUJVVEVTOgorICAgICAgICAgICAgc3ltYm9sLnN5bWJvbFR5cGUgPSBTSEFERVJfU1lNQk9MX1RZ
UEVfQVRUUklCVVRFOworICAgICAgICAgICAgU2hHZXRBY3RpdmVBdHRyaWIoY29tcGlsZXIsIGks
ICZuYW1lTGVuZ3RoLCAmc3ltYm9sLnNpemUsICZzeW1ib2wuZGF0YVR5cGUsIG5hbWVCdWZmZXIu
Z2V0KCksIG1hcHBlZE5hbWVCdWZmZXIuZ2V0KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgU0hfQUNUSVZFX1VOSUZPUk1TOgorICAgICAgICAgICAgc3ltYm9sLnN5bWJvbFR5
cGUgPSBTSEFERVJfU1lNQk9MX1RZUEVfVU5JRk9STTsKKyAgICAgICAgICAgIFNoR2V0QWN0aXZl
VW5pZm9ybShjb21waWxlciwgaSwgJm5hbWVMZW5ndGgsICZzeW1ib2wuc2l6ZSwgJnN5bWJvbC5k
YXRhVHlwZSwgbmFtZUJ1ZmZlci5nZXQoKSwgbWFwcGVkTmFtZUJ1ZmZlci5nZXQoKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAg
IGlmIChuYW1lTGVuZ3RoIDw9IDApCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IHN5bWJvbC5uYW1lID0gU3RyaW5nOjpmcm9tVVRGOChuYW1lQnVmZmVyLmdldCgpLCBuYW1lTGVu
Z3RoKTsKKyAgICAgICAgc3ltYm9sLm1hcHBlZE5hbWUgPSBTdHJpbmc6OmZyb21VVEY4KG1hcHBl
ZE5hbWVCdWZmZXIuZ2V0KCksIHN0ZDo6bWluKG1heE1hcHBlZE5hbWVMZW5ndGgsIG5hbWVMZW5n
dGgpKTsKKyAgICAgICAgc3ltYm9scy5hcHBlbmQoc3ltYm9sKTsKKyAgICB9CisgICAgcmV0dXJu
IHRydWU7Cit9CisKIEFOR0xFV2ViS2l0QnJpZGdlOjpBTkdMRVdlYktpdEJyaWRnZShTaFNoYWRl
ck91dHB1dCBzaGFkZXJPdXRwdXQsIFNoU2hhZGVyU3BlYyBzaGFkZXJTcGVjKQogICAgIDogYnVp
bHRDb21waWxlcnMoZmFsc2UpCiAgICAgLCBtX2ZyYWdtZW50Q29tcGlsZXIoMCkKQEAgLTc1LDcg
KzEzMyw3IEBAIHZvaWQgQU5HTEVXZWJLaXRCcmlkZ2U6OnNldFJlc291cmNlcyhTaEJ1aWx0SW5S
ZXNvdXJjZXMgcmVzb3VyY2VzKQogICAgIG1fcmVzb3VyY2VzID0gcmVzb3VyY2VzOwogfQogCi1i
b29sIEFOR0xFV2ViS2l0QnJpZGdlOjp2YWxpZGF0ZVNoYWRlclNvdXJjZShjb25zdCBjaGFyKiBz
aGFkZXJTb3VyY2UsIEFOR0xFU2hhZGVyVHlwZSBzaGFkZXJUeXBlLCBTdHJpbmcmIHRyYW5zbGF0
ZWRTaGFkZXJTb3VyY2UsIFN0cmluZyYgc2hhZGVyVmFsaWRhdGlvbkxvZywgaW50IGV4dHJhQ29t
cGlsZU9wdGlvbnMpCitib29sIEFOR0xFV2ViS2l0QnJpZGdlOjpjb21waWxlU2hhZGVyU291cmNl
KGNvbnN0IGNoYXIqIHNoYWRlclNvdXJjZSwgQU5HTEVTaGFkZXJUeXBlIHNoYWRlclR5cGUsIFN0
cmluZyYgdHJhbnNsYXRlZFNoYWRlclNvdXJjZSwgU3RyaW5nJiBzaGFkZXJWYWxpZGF0aW9uTG9n
LCBWZWN0b3I8QU5HTEVTaGFkZXJTeW1ib2w+JiBzeW1ib2xzLCBpbnQgZXh0cmFDb21waWxlT3B0
aW9ucykKIHsKICAgICBpZiAoIWJ1aWx0Q29tcGlsZXJzKSB7CiAgICAgICAgIG1fZnJhZ21lbnRD
b21waWxlciA9IFNoQ29uc3RydWN0Q29tcGlsZXIoU0hfRlJBR01FTlRfU0hBREVSLCBtX3NoYWRl
clNwZWMsIG1fc2hhZGVyT3V0cHV0LCAmbV9yZXNvdXJjZXMpOwpAQCAtOTcsNyArMTU1LDcgQEAg
Ym9vbCBBTkdMRVdlYktpdEJyaWRnZTo6dmFsaWRhdGVTaGFkZXJTb3VyY2UoY29uc3QgY2hhciog
c2hhZGVyU291cmNlLCBBTkdMRVNoYWQKIAogICAgIGNvbnN0IGNoYXIqIGNvbnN0IHNoYWRlclNv
dXJjZVN0cmluZ3NbXSA9IHsgc2hhZGVyU291cmNlIH07CiAKLSAgICBib29sIHZhbGlkYXRlU3Vj
Y2VzcyA9IFNoQ29tcGlsZShjb21waWxlciwgc2hhZGVyU291cmNlU3RyaW5ncywgMSwgU0hfT0JK
RUNUX0NPREUgfCBleHRyYUNvbXBpbGVPcHRpb25zKTsKKyAgICBib29sIHZhbGlkYXRlU3VjY2Vz
cyA9IFNoQ29tcGlsZShjb21waWxlciwgc2hhZGVyU291cmNlU3RyaW5ncywgMSwgU0hfT0JKRUNU
X0NPREUgfCBTSF9BVFRSSUJVVEVTX1VOSUZPUk1TIHwgU0hfTUFQX0xPTkdfVkFSSUFCTEVfTkFN
RVMgfCBleHRyYUNvbXBpbGVPcHRpb25zKTsKICAgICBpZiAoIXZhbGlkYXRlU3VjY2Vzcykgewog
ICAgICAgICBpbnQgbG9nU2l6ZSA9IGdldFZhbGlkYXRpb25SZXN1bHRWYWx1ZShjb21waWxlciwg
U0hfSU5GT19MT0dfTEVOR1RIKTsKICAgICAgICAgaWYgKGxvZ1NpemUgPiAxKSB7CkBAIC0xMTgs
MzUgKzE3NiwxMSBAQCBib29sIEFOR0xFV2ViS2l0QnJpZGdlOjp2YWxpZGF0ZVNoYWRlclNvdXJj
ZShjb25zdCBjaGFyKiBzaGFkZXJTb3VyY2UsIEFOR0xFU2hhZAogICAgICAgICBTaEdldE9iamVj
dENvZGUoY29tcGlsZXIsIHRyYW5zbGF0aW9uQnVmZmVyLmdldCgpKTsKICAgICAgICAgdHJhbnNs
YXRlZFNoYWRlclNvdXJjZSA9IHRyYW5zbGF0aW9uQnVmZmVyLmdldCgpOwogICAgIH0KLQotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIEFOR0xFV2ViS2l0QnJpZGdlOjpnZXRVbmlmb3JtcyhT
aFNoYWRlclR5cGUgc2hhZGVyVHlwZSwgVmVjdG9yPEFOR0xFU2hhZGVyU3ltYm9sPiAmc3ltYm9s
cykKLXsKLSAgICBjb25zdCBTaEhhbmRsZSBjb21waWxlciA9IChzaGFkZXJUeXBlID09IFNIX1ZF
UlRFWF9TSEFERVIgPyBtX3ZlcnRleENvbXBpbGVyIDogbV9mcmFnbWVudENvbXBpbGVyKTsKLQot
ICAgIGludCBudW1Vbmlmb3JtcyA9IGdldFZhbGlkYXRpb25SZXN1bHRWYWx1ZShjb21waWxlciwg
U0hfQUNUSVZFX1VOSUZPUk1TKTsKLSAgICBpZiAobnVtVW5pZm9ybXMgPCAwKQorICAgIAorICAg
IGlmICghZ2V0VmFyaWFibGVJbmZvKGNvbXBpbGVyLCBTSF9BQ1RJVkVfQVRUUklCVVRFUywgc3lt
Ym9scykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIW51bVVuaWZvcm1zKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGludCBtYXhOYW1lTGVuZ3RoID0gZ2V0VmFsaWRhdGlv
blJlc3VsdFZhbHVlKGNvbXBpbGVyLCBTSF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RIKTsKLSAg
ICBpZiAobWF4TmFtZUxlbmd0aCA8PSAxKQorICAgIGlmICghZ2V0VmFyaWFibGVJbmZvKGNvbXBp
bGVyLCBTSF9BQ1RJVkVfVU5JRk9STVMsIHN5bWJvbHMpKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgT3duQXJyYXlQdHI8Y2hhcj4gbmFtZUJ1ZmZlciA9IGFkb3B0QXJyYXlQdHIobmV3IGNo
YXJbbWF4TmFtZUxlbmd0aF0pOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1Vbmlmb3Jt
czsgKytpKSB7Ci0gICAgICAgIEFOR0xFU2hhZGVyU3ltYm9sIHN5bWJvbDsKLSAgICAgICAgc3lt
Ym9sLnN5bWJvbFR5cGUgPSBTSEFERVJfU1lNQk9MX1RZUEVfVU5JRk9STTsKLSAgICAgICAgaW50
IG5hbWVMZW5ndGggPSAtMTsKLSAgICAgICAgU2hHZXRBY3RpdmVVbmlmb3JtKGNvbXBpbGVyLCBp
LCAmbmFtZUxlbmd0aCwgJnN5bWJvbC5zaXplLCAmc3ltYm9sLmRhdGFUeXBlLCBuYW1lQnVmZmVy
LmdldCgpLCAwKTsKLSAgICAgICAgaWYgKG5hbWVMZW5ndGggPD0gMCkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgc3ltYm9sLm5hbWUgPSBTdHJpbmc6OmZyb21VVEY4KG5hbWVC
dWZmZXIuZ2V0KCksIG5hbWVMZW5ndGgpOwotICAgICAgICBzeW1ib2xzLmFwcGVuZChzeW1ib2wp
OwotICAgIH0KIAogICAgIHJldHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmgKaW5kZXggMTljNTA0ZWIzOTM3
MDQ5OTZlOTVkMzIwODFjZmMwYjUzM2ZiNmJiMy4uYWEwYWMwOGE0ZjVjM2FlOTFmNzk0NDZjNTE1
ODE4ODg5ZDVlYTk2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQU5HTEVXZWJLaXRCcmlkZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9BTkdMRVdlYktpdEJyaWRnZS5oCkBAIC01MCw2ICs1MCw3IEBAIGVudW0gQU5HTEVTaGFk
ZXJTeW1ib2xUeXBlIHsKIHN0cnVjdCBBTkdMRVNoYWRlclN5bWJvbCB7CiAgICAgQU5HTEVTaGFk
ZXJTeW1ib2xUeXBlIHN5bWJvbFR5cGU7CiAgICAgU3RyaW5nIG5hbWU7CisgICAgU3RyaW5nIG1h
cHBlZE5hbWU7CiAgICAgU2hEYXRhVHlwZSBkYXRhVHlwZTsKICAgICBpbnQgc2l6ZTsKIApAQCAt
NzEsMTIgKzcyLDcgQEAgcHVibGljOgogICAgIFNoQnVpbHRJblJlc291cmNlcyBnZXRSZXNvdXJj
ZXMoKSB7IHJldHVybiBtX3Jlc291cmNlczsgfQogICAgIHZvaWQgc2V0UmVzb3VyY2VzKFNoQnVp
bHRJblJlc291cmNlcyk7CiAgICAgCi0gICAgYm9vbCB2YWxpZGF0ZVNoYWRlclNvdXJjZShjb25z
dCBjaGFyKiBzaGFkZXJTb3VyY2UsIEFOR0xFU2hhZGVyVHlwZSwgU3RyaW5nJiB0cmFuc2xhdGVk
U2hhZGVyU291cmNlLCBTdHJpbmcmIHNoYWRlclZhbGlkYXRpb25Mb2csIGludCBleHRyYUNvbXBp
bGVPcHRpb25zID0gMCk7Ci0KLSAgICAvLyBHZXQgdGhlIHVuaWZvcm1zIGZvciB0aGUgbGFzdCB2
YWxpZGF0ZWQgc2hhZGVyIG9mIHR5cGUgU2hTaGFkZXJUeXBlLgotICAgIC8vIEZvciB0aGlzIGZ1
bmN0aW9uIHRvIHdvcmssIHlvdSBtdXN0IHVzZSB0aGUgU0hfQVRUUklCVVRFU19VTklGT1JNUyBj
b21waWxlIG9wdGlvbiBkdXJpbmcgdmFsaWRhdGlvbi4KLSAgICAvLyBSZXR1cm5zIGZhbHNlIGlm
IGFuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJyZWQgaW4gQU5HTEUuCi0gICAgYm9vbCBnZXRVbmlm
b3JtcyhTaFNoYWRlclR5cGUsIFZlY3RvcjxBTkdMRVNoYWRlclN5bWJvbD4gJnN5bWJvbHMpOwor
ICAgIGJvb2wgY29tcGlsZVNoYWRlclNvdXJjZShjb25zdCBjaGFyKiBzaGFkZXJTb3VyY2UsIEFO
R0xFU2hhZGVyVHlwZSwgU3RyaW5nJiB0cmFuc2xhdGVkU2hhZGVyU291cmNlLCBTdHJpbmcmIHNo
YWRlclZhbGlkYXRpb25Mb2csIFZlY3RvcjxBTkdMRVNoYWRlclN5bWJvbD4mIHN5bWJvbHMsIGlu
dCBleHRyYUNvbXBpbGVPcHRpb25zID0gMCk7CiAKIHByaXZhdGU6CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuc2lvbnMzRC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5zaW9uczNELmgKaW5kZXggNWYyOGFmYjNiMmUz
Y2NkMjcyNWYzZjY5ZTBjMGI2ZjljZDkzNDMxNy4uMzlmM2FlMGZmOGY0NWI0ZTBjZTllNjM3ZjZh
NWEwZWFjNTE3M2Y1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRXh0ZW5zaW9uczNELmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
RXh0ZW5zaW9uczNELmgKQEAgLTE3NCw3ICsxNzQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIGJpbmRWZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KSA9IDA7CiAKICAgICAvLyBH
TF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UKLSAgICB2aXJ0dWFsIFN0cmluZyBnZXRU
cmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoUGxhdGZvcm0zRE9iamVjdCkgPSAwOworICAgIHZp
cnR1YWwgU3RyaW5nIHRyYW5zbGF0ZVNoYWRlckFOR0xFKFBsYXRmb3JtM0RPYmplY3QpID0gMDsK
IAogICAgIC8vIEdMX0NIUk9NSVVNX2NvcHlfdGV4dHVyZQogICAgIHZpcnR1YWwgdm9pZCBjb3B5
VGV4dHVyZUNIUk9NSVVNKEdDM0RlbnVtLCBQbGF0Zm9ybTNET2JqZWN0LCBQbGF0Zm9ybTNET2Jq
ZWN0LCBHQzNEaW50LCBHQzNEZW51bSkgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKaW5kZXggNDIwNzZmZjc4YThkMTk3
YTEyNDY3NTU3ZDYyNGY4Y2M5MzkzMzY3MS4uODYzODcwODVlZjhkMmVhNDQzN2ViMWViZjExYzli
ZjQ2NGQzZGFkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0M0QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQzRC5oCkBAIC05NjQsMTYgKzk2NCw1MSBAQCBwdWJsaWM6CiAjZW5k
aWYKIAogI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShRVCkg
fHwgUExBVEZPUk0oRUZMKSB8fCBQTEFURk9STShCTEFDS0JFUlJZKQorICAgIHN0cnVjdCBWYXJp
YWJsZUluZm8geworICAgICAgICBWYXJpYWJsZUluZm8oKQorICAgICAgICAgICAgOiB0eXBlKDAp
CisgICAgICAgICAgICAsIHNpemUoMCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAg
VmFyaWFibGVJbmZvKEdDM0RlbnVtIHR5cGUsIGludCBzaXplLCBTdHJpbmcmIG1hcHBlZE5hbWUp
CisgICAgICAgICAgICA6IHR5cGUodHlwZSkKKyAgICAgICAgICAgICwgc2l6ZShzaXplKQorICAg
ICAgICAgICAgLCBtYXBwZWROYW1lKG1hcHBlZE5hbWUpCisgICAgICAgIHsKKyAgICAgICAgfQor
CisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShWYXJpYWJsZUluZm8mIG90aGVyKSBjb25zdAorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gdHlwZSA9PSBvdGhlci50eXBlICYmIHNpemUgPT0g
b3RoZXIuc2l6ZSAmJiBtYXBwZWROYW1lID09IG90aGVyLm1hcHBlZE5hbWU7CisgICAgICAgIH0K
KworICAgICAgICBHQzNEZW51bSB0eXBlOworICAgICAgICBpbnQgc2l6ZTsKKyAgICAgICAgU3Ry
aW5nIG1hcHBlZE5hbWU7CisgICAgfTsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFZh
cmlhYmxlSW5mbz4gU2hhZGVyVmFyaWFibGVNYXA7CisKICAgICBzdHJ1Y3QgU2hhZGVyU291cmNl
RW50cnkgeworICAgICAgICBHQzNEZW51bSB0eXBlOwogICAgICAgICBTdHJpbmcgc291cmNlOwor
ICAgICAgICBTdHJpbmcgdHJhbnNsYXRlZFNvdXJjZTsKICAgICAgICAgU3RyaW5nIGxvZzsKICAg
ICAgICAgYm9vbCBpc1ZhbGlkOworICAgICAgICBTaGFkZXJWYXJpYWJsZU1hcCB1bmlmb3JtTWFw
OworICAgICAgICBTaGFkZXJWYXJpYWJsZU1hcCBhdHRyaWJNYXA7CiAgICAgICAgIFNoYWRlclNv
dXJjZUVudHJ5KCkKLSAgICAgICAgICAgIDogaXNWYWxpZCgwKQorICAgICAgICAgICAgOiB0eXBl
KFZFUlRFWF9TSEFERVIpCisgICAgICAgICAgICAsIGlzVmFsaWQoMCkKICAgICAgICAgewogICAg
ICAgICB9CiAgICAgfTsKLSAgICBIYXNoTWFwPFBsYXRmb3JtM0RPYmplY3QsIFNoYWRlclNvdXJj
ZUVudHJ5PiBtX3NoYWRlclNvdXJjZU1hcDsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxQbGF0Zm9y
bTNET2JqZWN0LCBTaGFkZXJTb3VyY2VFbnRyeT4gU2hhZGVyU291cmNlTWFwOworICAgIFNoYWRl
clNvdXJjZU1hcCBtX3NoYWRlclNvdXJjZU1hcDsKKworICAgIFN0cmluZyBnZXRNYXBwZWRWYXJp
YWJsZU5hbWUoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBTaFNoYWRlckluZm8gdmFyaWFibGVU
eXBlLCBjb25zdCBTdHJpbmcmIG5hbWUpOwogCiAgICAgQU5HTEVXZWJLaXRCcmlkZ2UgbV9jb21w
aWxlcjsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vRXh0ZW5zaW9uczNEQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0V4dGVuc2lvbnMzRENocm9taXVtLmgKaW5kZXggZWRkNmMx
MzVjMThlYzM4ODBkMzQ2ZjM1ZTI2YmI3N2E4ZDk5MjRlYy4uMDk3ODUyNTU4YmQ0NDVhZWI4NmE5
OWMwY2JiOThiNmUzZmZhZWJiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vRXh0ZW5zaW9uczNEQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9FeHRlbnNpb25zM0RDaHJvbWl1bS5oCkBA
IC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlVmVydGV4QXJy
YXlPRVMoUGxhdGZvcm0zRE9iamVjdCk7CiAgICAgdmlydHVhbCBHQzNEYm9vbGVhbiBpc1ZlcnRl
eEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpOwogICAgIHZpcnR1YWwgdm9pZCBiaW5kVmVydGV4
QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCk7Ci0gICAgdmlydHVhbCBTdHJpbmcgZ2V0VHJhbnNs
YXRlZFNoYWRlclNvdXJjZUFOR0xFKFBsYXRmb3JtM0RPYmplY3QpOworICAgIHZpcnR1YWwgU3Ry
aW5nIHRyYW5zbGF0ZVNoYWRlckFOR0xFKFBsYXRmb3JtM0RPYmplY3QpOwogCiAgICAgZW51bSB7
CiAgICAgICAgIC8vIEdMX09FU19FR0xfaW1hZ2VfZXh0ZXJuYWwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyVmFsaWRhdGVk
UHJvZ3JhbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1
c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0uY3BwCmluZGV4IDQyMTFlODJiNzgxYjFhMGFjYjUy
N2YzMGRmNWMwMTQzOWM0NTE4MDkuLjNlZDBhMDBjYzI4OWYxYzljOWQ1MDczNmUyMmY1MzEwNWI4
ZmQ0NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtLmNw
cApAQCAtODUsOCArODUsOSBAQCBDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtOjpDdXN0b21G
aWx0ZXJWYWxpZGF0ZWRQcm9ncmFtKEN1c3RvbUZpbHRlckdsb2JhbENvbgogICAgIC8vIFNoYWRl
cnMgcmVmZXJlbmNlZCBmcm9tIHRoZSBDU1MgbWl4IGZ1bmN0aW9uIHVzZSBhIGRpZmZlcmVudCB2
YWxpZGF0b3IgdGhhbiByZWd1bGFyIFdlYkdMIHNoYWRlcnMuIFNlZSBDdXN0b21GaWx0ZXJHbG9i
YWxDb250ZXh0LmggZm9yIG1vcmUgZGV0YWlscy4KICAgICBBTkdMRVdlYktpdEJyaWRnZSogdmFs
aWRhdG9yID0gcHJvZ3JhbUluZm8ubWl4U2V0dGluZ3MoKS5lbmFibGVkID8gbV9nbG9iYWxDb250
ZXh0LT5taXhTaGFkZXJWYWxpZGF0b3IoKSA6IG1fZ2xvYmFsQ29udGV4dC0+d2ViZ2xTaGFkZXJW
YWxpZGF0b3IoKTsKICAgICBTdHJpbmcgdmVydGV4U2hhZGVyTG9nLCBmcmFnbWVudFNoYWRlckxv
ZzsKLSAgICBib29sIHZlcnRleFNoYWRlclZhbGlkID0gdmFsaWRhdG9yLT52YWxpZGF0ZVNoYWRl
clNvdXJjZShvcmlnaW5hbFZlcnRleFNoYWRlci51dGY4KCkuZGF0YSgpLCBTSEFERVJfVFlQRV9W
RVJURVgsIG1fdmFsaWRhdGVkVmVydGV4U2hhZGVyLCB2ZXJ0ZXhTaGFkZXJMb2csIFNIX0FUVFJJ
QlVURVNfVU5JRk9STVMpOwotICAgIGJvb2wgZnJhZ21lbnRTaGFkZXJWYWxpZCA9IHZhbGlkYXRv
ci0+dmFsaWRhdGVTaGFkZXJTb3VyY2Uob3JpZ2luYWxGcmFnbWVudFNoYWRlci51dGY4KCkuZGF0
YSgpLCBTSEFERVJfVFlQRV9GUkFHTUVOVCwgbV92YWxpZGF0ZWRGcmFnbWVudFNoYWRlciwgZnJh
Z21lbnRTaGFkZXJMb2csIFNIX0FUVFJJQlVURVNfVU5JRk9STVMpOworICAgIFZlY3RvcjxBTkdM
RVNoYWRlclN5bWJvbD4gdmFyaWFibGVzOworICAgIGJvb2wgdmVydGV4U2hhZGVyVmFsaWQgPSB2
YWxpZGF0b3ItPmNvbXBpbGVTaGFkZXJTb3VyY2Uob3JpZ2luYWxWZXJ0ZXhTaGFkZXIudXRmOCgp
LmRhdGEoKSwgU0hBREVSX1RZUEVfVkVSVEVYLCBtX3ZhbGlkYXRlZFZlcnRleFNoYWRlciwgdmVy
dGV4U2hhZGVyTG9nLCB2YXJpYWJsZXMpOworICAgIGJvb2wgZnJhZ21lbnRTaGFkZXJWYWxpZCA9
IHZhbGlkYXRvci0+Y29tcGlsZVNoYWRlclNvdXJjZShvcmlnaW5hbEZyYWdtZW50U2hhZGVyLnV0
ZjgoKS5kYXRhKCksIFNIQURFUl9UWVBFX0ZSQUdNRU5ULCBtX3ZhbGlkYXRlZEZyYWdtZW50U2hh
ZGVyLCBmcmFnbWVudFNoYWRlckxvZywgdmFyaWFibGVzKTsKICAgICBpZiAoIXZlcnRleFNoYWRl
clZhbGlkIHx8ICFmcmFnbWVudFNoYWRlclZhbGlkKSB7CiAgICAgICAgIC8vIEZJWE1FOiBSZXBv
cnQgdGhlIHZhbGlkYXRpb24gZXJyb3JzLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ0MTYKQEAgLTk0LDEyICs5NSwxMCBAQCBDdXN0b21GaWx0
ZXJWYWxpZGF0ZWRQcm9ncmFtOjpDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtKEN1c3RvbUZp
bHRlckdsb2JhbENvbgogICAgIH0KIAogICAgIC8vIFZhbGlkYXRlIHRoZSBhdXRob3IncyBzYW1w
bGVycy4KLSAgICBWZWN0b3I8QU5HTEVTaGFkZXJTeW1ib2w+IHVuaWZvcm1zOwotICAgIGlmICgh
dmFsaWRhdG9yLT5nZXRVbmlmb3JtcyhTSF9WRVJURVhfU0hBREVSLCB1bmlmb3JtcykpCi0gICAg
ICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlkYXRvci0+Z2V0VW5pZm9ybXMoU0hfRlJBR01FTlRf
U0hBREVSLCB1bmlmb3JtcykpCi0gICAgICAgIHJldHVybjsKLSAgICBmb3IgKFZlY3RvcjxBTkdM
RVNoYWRlclN5bWJvbD46Oml0ZXJhdG9yIGl0ID0gdW5pZm9ybXMuYmVnaW4oKTsgaXQgIT0gdW5p
Zm9ybXMuZW5kKCk7ICsraXQpIHsKKyAgICBmb3IgKFZlY3RvcjxBTkdMRVNoYWRlclN5bWJvbD46
Oml0ZXJhdG9yIGl0ID0gdmFyaWFibGVzLmJlZ2luKCk7IGl0ICE9IHZhcmlhYmxlcy5lbmQoKTsg
KytpdCkgeworICAgICAgICAvLyBXZSdyZSBvbmx5IGNoZWNraW5nIHVuaWZvcm1zCisgICAgICAg
IGlmIChpdC0+c3ltYm9sVHlwZSAhPSBTSEFERVJfU1lNQk9MX1RZUEVfVU5JRk9STSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoaXQtPmlzU2FtcGxlcigpKSB7CiAgICAgICAg
ICAgICAvLyBGSVhNRTogRm9yIG5vdywgd2UgcmVzdHJpY3Qgc2hhZGVycyB3aXRoIGFueSBzYW1w
bGVyIGRlZmluZWQuCiAgICAgICAgICAgICAvLyBXaGVuIHdlIGltcGxlbWVudCB0ZXh0dXJlIHBh
cmFtZXRlcnMsIHdlIHdpbGwgYWxsb3cgc2hhZGVycyB3aG9zZSBzYW1wbGVycyBhcmUgYm91bmQg
dG8gdmFsaWQgdGV4dHVyZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3Bw
CmluZGV4IDYwZjZiZmFmM2E4MTZhN2EyY2JmMzY2ZTI1ODM0MzNkZWY1ZDEwNjEuLjE0Yzg2MjJi
OTYxOWJlYmM4YzBjM2I3M2VjZjc0MzA5NWM5YWRkNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25z
M0RPcGVuR0xDb21tb24uY3BwCkBAIC05NSw3ICs5NSw3IEBAIGludCBFeHRlbnNpb25zM0RPcGVu
R0xDb21tb246OmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKQogICAgIHJldHVybiBHcmFwaGlj
c0NvbnRleHQzRDo6Tk9fRVJST1I7CiB9CiAKLVN0cmluZyBFeHRlbnNpb25zM0RPcGVuR0xDb21t
b246OmdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRShQbGF0Zm9ybTNET2JqZWN0IHNoYWRl
cikKK1N0cmluZyBFeHRlbnNpb25zM0RPcGVuR0xDb21tb246OnRyYW5zbGF0ZVNoYWRlckFOR0xF
KFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQogewogICAgIEFTU0VSVChzaGFkZXIpOwogICAgIGlu
dCBHTHNoYWRlclR5cGU7CkBAIC0xMjksMTEgKzEyOSwyNiBAQCBTdHJpbmcgRXh0ZW5zaW9uczNE
T3BlbkdMQ29tbW9uOjpnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoUGxhdGZvcm0zRE9i
amVjdAogICAgICAgICBleHRyYUNvbXBpbGVPcHRpb25zIHw9IFNIX0VNVUxBVEVfQlVJTFRfSU5f
RlVOQ1RJT05TOwogI2VuZGlmCiAKLSAgICBib29sIGlzVmFsaWQgPSBjb21waWxlci52YWxpZGF0
ZVNoYWRlclNvdXJjZShlbnRyeS5zb3VyY2UudXRmOCgpLmRhdGEoKSwgc2hhZGVyVHlwZSwgdHJh
bnNsYXRlZFNoYWRlclNvdXJjZSwgc2hhZGVySW5mb0xvZywgZXh0cmFDb21waWxlT3B0aW9ucyk7
CisgICAgVmVjdG9yPEFOR0xFU2hhZGVyU3ltYm9sPiB2YXJpYWJsZXM7CisgICAgYm9vbCBpc1Zh
bGlkID0gY29tcGlsZXIuY29tcGlsZVNoYWRlclNvdXJjZShlbnRyeS5zb3VyY2UudXRmOCgpLmRh
dGEoKSwgc2hhZGVyVHlwZSwgdHJhbnNsYXRlZFNoYWRlclNvdXJjZSwgc2hhZGVySW5mb0xvZywg
dmFyaWFibGVzLCBleHRyYUNvbXBpbGVPcHRpb25zKTsKIAogICAgIGVudHJ5LmxvZyA9IHNoYWRl
ckluZm9Mb2c7CiAgICAgZW50cnkuaXNWYWxpZCA9IGlzVmFsaWQ7CiAKKyAgICBmb3IgKFZlY3Rv
cjxBTkdMRVNoYWRlclN5bWJvbD46Oml0ZXJhdG9yIGl0ID0gdmFyaWFibGVzLmJlZ2luKCk7IGl0
ICE9IHZhcmlhYmxlcy5lbmQoKTsgKytpdCkgeworICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6
VmFyaWFibGVJbmZvIHZhcmlhYmxlSW5mbyhpdC0+ZGF0YVR5cGUsIGl0LT5zaXplLCBpdC0+bWFw
cGVkTmFtZSk7CisgICAgICAgIHN3aXRjaCAoaXQtPnN5bWJvbFR5cGUpIHsKKyAgICAgICAgY2Fz
ZSBTSEFERVJfU1lNQk9MX1RZUEVfQVRUUklCVVRFOgorICAgICAgICAgICAgZW50cnkuYXR0cmli
TWFwLnNldChpdC0+bmFtZSwgdmFyaWFibGVJbmZvKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFNIQURFUl9TWU1CT0xfVFlQRV9VTklGT1JNOgorICAgICAgICAgICAgZW50cnku
dW5pZm9ybU1hcC5zZXQoaXQtPm5hbWUsIHZhcmlhYmxlSW5mbyk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICB9CisgICAgfQorCiAgICAgaWYgKCFpc1ZhbGlkKQogICAgICAgICByZXR1cm4gIiI7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9F
eHRlbnNpb25zM0RPcGVuR0xDb21tb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uaAppbmRleCA3NTg2OWRlMTk5NmUz
MTE4YWU0YzJjM2RiMTk3NmE3MDY2OGY5NDk1Li4zZWFlYTNiNjgyNzlkMzcwMDNlNmJlZTRkNDNi
NWRiMjBhYjNjYTFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oCkBAIC01
MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEdDM0Rib29sZWFuIGlzVmVydGV4QXJy
YXlPRVMoUGxhdGZvcm0zRE9iamVjdCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBiaW5kVmVydGV4
QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCkgPSAwOwogCi0gICAgdmlydHVhbCBTdHJpbmcgZ2V0
VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFKFBsYXRmb3JtM0RPYmplY3QpOworICAgIHZpcnR1
YWwgU3RyaW5nIHRyYW5zbGF0ZVNoYWRlckFOR0xFKFBsYXRmb3JtM0RPYmplY3QpOwogCiAgICAg
Ly8gRVhUIFJvYnVzdG5lc3MgLSB1c2VzIGdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKQogICAg
IHZpcnR1YWwgdm9pZCByZWFkblBpeGVsc0VYVChpbnQgeCwgaW50IHksIEdDM0RzaXplaSB3aWR0
aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNE
c2l6ZWkgYnVmU2l6ZSwgdm9pZCAqZGF0YSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4
dDNET3BlbkdMQ29tbW9uLmNwcAppbmRleCA0ZmZmZWU0N2QwYmZkYWRjYjliNGZkMjA3OGI5NjZm
NGFkNjFjYWNhLi4wOTg3MzUzNzgyZjg0ODE3ZDE4N2U1NGVlODMzNGExZjA5NTg0NzY4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3ND
b250ZXh0M0RPcGVuR0xDb21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKQEAgLTQ0OSw3
ICs0NDksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb21waWxlU2hhZGVyKFBsYXRmb3Jt
M0RPYmplY3Qgc2hhZGVyKQogICAgIEFTU0VSVChzaGFkZXIpOwogICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOwogCi0gICAgU3RyaW5nIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UgPSBtX2V4dGVuc2lv
bnMtPmdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRShzaGFkZXIpOworICAgIFN0cmluZyB0
cmFuc2xhdGVkU2hhZGVyU291cmNlID0gbV9leHRlbnNpb25zLT50cmFuc2xhdGVTaGFkZXJBTkdM
RShzaGFkZXIpOwogCiAgICAgaWYgKCF0cmFuc2xhdGVkU2hhZGVyU291cmNlLmxlbmd0aCgpKQog
ICAgICAgICByZXR1cm47CkBAIC00NzEsNyArNDcxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6Y29tcGlsZVNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKICAgICA6OmdsR2V0U2hh
ZGVyaXYoc2hhZGVyLCBHTF9JTkZPX0xPR19MRU5HVEgsICZsZW5ndGgpOwogCiAgICAgaWYgKGxl
bmd0aCkgewotICAgICAgICBIYXNoTWFwPFBsYXRmb3JtM0RPYmplY3QsIEdyYXBoaWNzQ29udGV4
dDNEOjpTaGFkZXJTb3VyY2VFbnRyeT46Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNl
TWFwLmZpbmQoc2hhZGVyKTsKKyAgICAgICAgU2hhZGVyU291cmNlTWFwOjppdGVyYXRvciByZXN1
bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CiAgICAgICAgIEdyYXBoaWNzQ29u
dGV4dDNEOjpTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnNlY29uZDsKIAogICAg
ICAgICBHTHNpemVpIHNpemUgPSAwOwpAQCAtNjc3LDEzICs2NzcsNTIgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0QXR0YWNoZWRTaGFkZXJzKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwg
R0MzRHNpemVpIG0KICAgICA6OmdsR2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIG1heENvdW50
LCBjb3VudCwgc2hhZGVycyk7CiB9CiAKKyNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKEdU
SykgfHwgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEVGTCkgfHwgUExBVEZPUk0oQkxBQ0tCRVJS
WSkKK1N0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0TWFwcGVkVmFyaWFibGVOYW1lKFBsYXRm
b3JtM0RPYmplY3QgcHJvZ3JhbSwgU2hTaGFkZXJJbmZvIHZhcmlhYmxlVHlwZSwgY29uc3QgU3Ry
aW5nJiBuYW1lKQoreworICAgIFN0cmluZyBtYXBwZWROYW1lID0gU3RyaW5nKG5hbWUpOworCisg
ICAgR0MzRHNpemVpIGNvdW50OworICAgIFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyc1syXTsKKyAg
ICBnZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgMiwgJmNvdW50LCBzaGFkZXJzKTsKKworICAg
IGZvciAoR0MzRHNpemVpIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBTaGFkZXJT
b3VyY2VNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVy
c1tpXSk7CisgICAgICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBTaGFkZXJTb3VyY2VFbnRyeSBlbnRyeSA9
IHJlc3VsdC0+c2Vjb25kOworICAgICAgICBTaGFkZXJWYXJpYWJsZU1hcDo6aXRlcmF0b3IgdmFy
aWFibGVSZXN1bHQ7CisgICAgICAgIGlmICh2YXJpYWJsZVR5cGUgPT0gU0hfQUNUSVZFX0FUVFJJ
QlVURVMpIHsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVzdWx0ID0gZW50cnkuYXR0cmliTWFwLmZp
bmQobmFtZSk7CisgICAgICAgICAgICBpZiAodmFyaWFibGVSZXN1bHQgPT0gZW50cnkuYXR0cmli
TWFwLmVuZCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgdmFyaWFibGVSZXN1bHQgPSBlbnRyeS51bmlmb3JtTWFwLmZpbmQobmFtZSk7
CisgICAgICAgICAgICBpZiAodmFyaWFibGVSZXN1bHQgPT0gZW50cnkudW5pZm9ybU1hcC5lbmQo
KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIG1hcHBl
ZE5hbWUgPSB2YXJpYWJsZVJlc3VsdC0+c2Vjb25kLm1hcHBlZE5hbWU7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICByZXR1cm4gbWFwcGVkTmFtZTsKK30KKyNlbmRpZgorCiBpbnQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwg
Y29uc3QgU3RyaW5nJiBuYW1lKQogewogICAgIGlmICghcHJvZ3JhbSkKICAgICAgICAgcmV0dXJu
IC0xOwogCiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIDo6Z2xHZXRBdHRy
aWJMb2NhdGlvbihwcm9ncmFtLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOworCisgICAgLy8gVGhlIGF0
dHJpYnV0ZSBuYW1lIG1heSBoYXZlIGJlZW4gdHJhbnNsYXRlZCBkdXJpbmcgQU5HTEUgY29tcGls
YXRpb24uCisgICAgLy8gTG9vayB0aHJvdWdoIHRoZSBjb3JyZXNwb25kaW5nIFNoYWRlclNvdXJj
ZU1hcCB0byBtYWtlIHN1cmUgd2UKKyAgICAvLyByZWZlcmVuY2UgdGhlIG1hcHBlZCBuYW1lIHJh
dGhlciB0aGFuIHRoZSBleHRlcm5hbCBuYW1lLgorICAgIFN0cmluZyBtYXBwZWROYW1lID0gZ2V0
TWFwcGVkVmFyaWFibGVOYW1lKHByb2dyYW0sIFNIX0FDVElWRV9BVFRSSUJVVEVTLCBuYW1lKTsK
KworICAgIHJldHVybiA6OmdsR2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgbWFwcGVkTmFtZS51
dGY4KCkuZGF0YSgpKTsKIH0KIAogR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldENvbnRleHRBdHRyaWJ1dGVzKCkKQEAgLTExMzIsNyArMTE3MSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlcml2KFBsYXRmb3JtM0RPYmplY3Qgc2hh
ZGVyLCBHQzNEZW51bSBwbmFtZSwgR0MzCiAKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKIAot
ICAgIEhhc2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+OjppdGVyYXRv
ciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAgU2hhZGVyU291
cmNlTWFwOjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7
CiAgICAgCiAgICAgc3dpdGNoIChwbmFtZSkgewogICAgIGNhc2UgREVMRVRFX1NUQVRVUzoKQEAg
LTExNjcsNyArMTIwNiw3IEBAIFN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVySW5m
b0xvZyhQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKIAogICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwogCi0gICAgSGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0LCBTaGFkZXJTb3VyY2VFbnRyeT46Oml0
ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICBTaGFk
ZXJTb3VyY2VNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hh
ZGVyKTsKICAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQogICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7IAogCkBAIC0xMTkzLDcgKzEyMzIsNyBAQCBTdHJpbmcgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldFNoYWRlclNvdXJjZShQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKIAog
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogCi0gICAgSGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0
LCBTaGFkZXJTb3VyY2VFbnRyeT46Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFw
LmZpbmQoc2hhZGVyKTsKKyAgICBTaGFkZXJTb3VyY2VNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IG1f
c2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKICAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVy
U291cmNlTWFwLmVuZCgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7IAogCkBAIC0xMjMwLDcg
KzEyNjksMTMgQEAgR0MzRGludCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybUxvY2F0aW9u
KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3QKICAgICBBU1NFUlQocHJvZ3JhbSk7
CiAKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gOjpnbEdldFVuaWZvcm1M
b2NhdGlvbihwcm9ncmFtLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOworCisgICAgLy8gVGhlIHVuaWZv
cm0gbmFtZSBtYXkgaGF2ZSBiZWVuIHRyYW5zbGF0ZWQgZHVyaW5nIEFOR0xFIGNvbXBpbGF0aW9u
LgorICAgIC8vIExvb2sgdGhyb3VnaCB0aGUgY29ycmVzcG9uZGluZyBTaGFkZXJTb3VyY2VNYXAg
dG8gbWFrZSBzdXJlIHdlCisgICAgLy8gcmVmZXJlbmNlIHRoZSBtYXBwZWQgbmFtZSByYXRoZXIg
dGhhbiB0aGUgZXh0ZXJuYWwgbmFtZS4KKyAgICBTdHJpbmcgbWFwcGVkTmFtZSA9IGdldE1hcHBl
ZFZhcmlhYmxlTmFtZShwcm9ncmFtLCBTSF9BQ1RJVkVfVU5JRk9STVMsIG5hbWUpOworCisgICAg
cmV0dXJuIDo6Z2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbWFwcGVkTmFtZS51dGY4KCku
ZGF0YSgpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliZnYo
R0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQqIHZhbHVlKQpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4
IDYxY2JhYzdjN2YwZGU4MDdiMTFhMDg2MTBkYmI3NWM2ZjhkYTE2ZjcuLjc5Y2I0NzM3MzYzNjZi
MTJkYzE2YmYxOTMyOGQzYjFkNDRlMDQ0MGQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAxMi0x
MC0wMiAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5jb20+CisKKyAgICAgICAgQXR0cmlidXRl
IGFuZCBVbmlmb3JtIHZhcmlhYmxlIG5hbWVzIG5lZWQgdHJhbnNsYXRpb24gaW4gc2hhZGVyCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDk4OQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIHN1YnRl
c3RzIHRvIGV4ZXJjaXNlIHZhcmlhYmxlcyB0aGF0IGFyZSB3ZWxsIHVuZGVyIHRoZSBsaW1pdHMg
YnV0CisgICAgICAgIG5vdCBsb25nIGVub3VnaCB0byBwcm9kdWNlIGFuIGVycm9yLiBUaGlzIHdh
eSB3ZSBub3cgdGVzdCBhbGwgdGhyZWUgb3B0aW9uczoKKyAgICAgICAgdW5kZXIgdGhlIGxpbWl0
LCBhdCB0aGUgbGltaXQsIG92ZXIgdGhlIGxpbWl0LgorCisgICAgICAgIEFsc28sIHRoZSB0ZXN0
cyBhcmUgdW5za2lwcGVkIG9uIE1hYy4KKworICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL2F0
dHJpYi1sb2NhdGlvbi1sZW5ndGgtbGltaXRzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0
L2NhbnZhcy93ZWJnbC9hdHRyaWItbG9jYXRpb24tbGVuZ3RoLWxpbWl0cy5odG1sOgorICAgICAg
ICAqIGZhc3QvY2FudmFzL3dlYmdsL3VuaWZvcm0tbG9jYXRpb24tbGVuZ3RoLWxpbWl0cy1leHBl
Y3RlZC50eHQ6CisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvdW5pZm9ybS1sb2NhdGlvbi1s
ZW5ndGgtbGltaXRzLmh0bWw6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlv
bnM6CisKIDIwMTItMDktMjcgIEFsZXhhbmRyZSBFbGlhcyAgPGFlbGlhc0BjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgW2Nocm9taXVtXSBEdW1wUmVuZGVyVHJlZSBzdXBwb3J0IGZvciBzb2Z0d2Fy
ZSBjb21wb3NpdGluZwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wv
YXR0cmliLWxvY2F0aW9uLWxlbmd0aC1saW1pdHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
ZmFzdC9jYW52YXMvd2ViZ2wvYXR0cmliLWxvY2F0aW9uLWxlbmd0aC1saW1pdHMtZXhwZWN0ZWQu
dHh0CmluZGV4IGMyMjg5MTZjYWQyZjIxNzAwNWRmNzEzN2QyNTFjYjIxMjhjOTgwMzQuLmIzNDUw
ZTQzYzU1OGUxY2NhNzE0ODUzMDdkMmYxMDYyMWZhYTgzMzAgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2Zhc3QvY2FudmFzL3dlYmdsL2F0dHJpYi1sb2NhdGlvbi1sZW5ndGgtbGltaXRzLWV4cGVj
dGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9hdHRyaWItbG9jYXRp
b24tbGVuZ3RoLWxpbWl0cy1leHBlY3RlZC50eHQKQEAgLTMsNiArMywxMCBAQCBUZXN0IGF0dHJp
YiBsb2NhdGlvbiB1bmRlcm5lYXRoIHRoZSBsZW5ndGggbGltaXQKIFBBU1MgZ2wuZ2V0UHJvZ3Jh
bVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUykgaXMgdHJ1ZQogUEFTUyBhdHRyaWIg
bG9jYXRpb24gc2hvdWxkIG5vdCBiZSAtMQogUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFs
dWU6IE5PX0VSUk9SIDogCitUZXN0IGF0dHJpYiBsb2NhdGlvbiBleGFjdGx5IGF0IHRoZSBsZW5n
dGggbGltaXQKK1BBU1MgZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NU
QVRVUykgaXMgdHJ1ZQorUEFTUyBhdHRyaWIgbG9jYXRpb24gc2hvdWxkIG5vdCBiZSAtMQorUEFT
UyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCiBUZXN0IGF0dHJpYiBs
b2NhdGlvbiBvdmVyIHRoZSBsZW5ndGggbGltaXQKIFNoYWRlciBjb21waWxhdGlvbiBzaG91bGQg
ZmFpbAogUEFTUyB3dHUubG9hZFNoYWRlckZyb21TY3JpcHQoZ2wsICJiYWRWZXJ0ZXhTaGFkZXIi
LCBnbC5WRVJURVhfU0hBREVSLCBmdW5jdGlvbiAoZXJyKSB7fSkgaXMgbnVsbApkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvYXR0cmliLWxvY2F0aW9uLWxlbmd0aC1s
aW1pdHMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2F0dHJpYi1sb2NhdGlv
bi1sZW5ndGgtbGltaXRzLmh0bWwKaW5kZXggZjQ0NDgzNmU3ODhiNWFlMzdlMTFlZmYxOTQ1NDlh
MGIyNDg3OGIyYy4uNzQ3OGQ3Y2JkNTU5OWYwMjcwOGM0YTE4NDQyMWU4ZmZlMzE5NGMxNiAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvYXR0cmliLWxvY2F0aW9uLWxl
bmd0aC1saW1pdHMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9hdHRy
aWItbG9jYXRpb24tbGVuZ3RoLWxpbWl0cy5odG1sCkBAIC0xMyw3ICsxMywxNiBAQCBUaGVyZSBp
cyBzdXBwb3NlZCB0byBiZSBhbiBleGFtcGxlIGRyYXdpbmcgaGVyZSwgYnV0IGl0J3Mgbm90IGlt
cG9ydGFudC4KIDwvY2FudmFzPgogPGRpdiBpZD0iZGVzY3JpcHRpb24iPlZlcmlmeSBsaW1pdHMg
b24gdGhlIGxlbmd0aHMgb2YgYXR0cmliIGxvY2F0aW9ucy48L2Rpdj4KIDxkaXYgaWQ9ImNvbnNv
bGUiPjwvZGl2PgotPHNjcmlwdCBpZD0iZ29vZFZlcnRleFNoYWRlciIgdHlwZT0ieC1zaGFkZXIv
eC12ZXJ0ZXgiPgorPHNjcmlwdCBpZD0iZ29vZFZlcnRleFNoYWRlcjEiIHR5cGU9Ingtc2hhZGVy
L3gtdmVydGV4Ij4KKy8vIEEgdmVydGV4IHNoYWRlciB3aGVyZSB0aGUgbmVlZGVkIGF0dHJpYiBs
b2NhdGlvbiBpcyBsb25nLCBidXQgbm90IG92ZXIgdGhlIGxpbWl0LgorYXR0cmlidXRlIHZlYzQg
dlBvc2l0aW9uMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3
ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTA7CisKK3ZvaWQgbWFpbigpCit7CisgICAgZ2xfUG9zaXRp
b24gPSB2UG9zaXRpb24wMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEy
MzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDsKK30KKzwvc2NyaXB0PgorPHNjcmlwdCBpZD0i
Z29vZFZlcnRleFNoYWRlcjIiIHR5cGU9Ingtc2hhZGVyL3gtdmVydGV4Ij4KIC8vIEEgdmVydGV4
IHNoYWRlciB3aGVyZSB0aGUgbmVlZGVkIGF0dHJpYiBsb2NhdGlvbiBpcyBleGFjdGx5IDI1NiBj
aGFyYWN0ZXJzLgogYXR0cmlidXRlIHZlYzQgdlBvc2l0aW9uMDEyMzQ1Njc4OTAxMjM0NTY3ODkw
MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3
ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0
NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAx
MjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1NjsK
IApAQCAtNDcsNyArNTYsMTggQEAgdmFyIHd0dSA9IFdlYkdMVGVzdFV0aWxzOwogdmFyIGdsID0g
d3R1LmNyZWF0ZTNEQ29udGV4dChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZXhhbXBsZSIpKTsK
IAogZGVidWcoIlRlc3QgYXR0cmliIGxvY2F0aW9uIHVuZGVybmVhdGggdGhlIGxlbmd0aCBsaW1p
dCIpOwotdmFyIHByb2dyYW0gPSB3dHUubG9hZFByb2dyYW1Gcm9tU2NyaXB0KGdsLCAiZ29vZFZl
cnRleFNoYWRlciIsICJmcmFnbWVudFNoYWRlciIpOwordmFyIHByb2dyYW0gPSB3dHUubG9hZFBy
b2dyYW1Gcm9tU2NyaXB0KGdsLCAiZ29vZFZlcnRleFNoYWRlcjEiLCAiZnJhZ21lbnRTaGFkZXIi
KTsKK3Nob3VsZEJlKCdnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJTktfU1RB
VFVTKScsICd0cnVlJyk7Cit2YXIgYXR0cmliTG9jID0gZ2wuZ2V0QXR0cmliTG9jYXRpb24ocHJv
Z3JhbSwgInZQb3NpdGlvbjAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkw
MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIik7CitpZiAoYXR0cmliTG9jID09IC0xKSB7
CisgICAgdGVzdEZhaWxlZCgiYXR0cmliIGxvY2F0aW9uIHdhcyAtMSwgc2hvdWxkIG5vdCBiZSIp
OworfSBlbHNlIHsKKyAgICB0ZXN0UGFzc2VkKCJhdHRyaWIgbG9jYXRpb24gc2hvdWxkIG5vdCBi
ZSAtMSIpOworfQord3R1LmdsRXJyb3JTaG91bGRCZShnbCwgZ2wuTk9ORSk7CisKK2RlYnVnKCJU
ZXN0IGF0dHJpYiBsb2NhdGlvbiBleGFjdGx5IGF0IHRoZSBsZW5ndGggbGltaXQiKTsKK3ZhciBw
cm9ncmFtID0gd3R1LmxvYWRQcm9ncmFtRnJvbVNjcmlwdChnbCwgImdvb2RWZXJ0ZXhTaGFkZXIy
IiwgImZyYWdtZW50U2hhZGVyIik7CiBzaG91bGRCZSgnZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihw
cm9ncmFtLCBnbC5MSU5LX1NUQVRVUyknLCAndHJ1ZScpOwogdmFyIGF0dHJpYkxvYyA9IGdsLmdl
dEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sICJ2UG9zaXRpb24wMTIzNDU2Nzg5MDEyMzQ1Njc4OTAx
MjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4
OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1
Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEy
MzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Iik7
CiBpZiAoYXR0cmliTG9jID09IC0xKSB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nh
bnZhcy93ZWJnbC91bmlmb3JtLWxvY2F0aW9uLWxlbmd0aC1saW1pdHMtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdW5pZm9ybS1sb2NhdGlvbi1sZW5ndGgtbGlt
aXRzLWV4cGVjdGVkLnR4dAppbmRleCA5ZTA5OGVkZjBiMzg1NzUzYTUyYTQ0YmFkNmU4ZjM4OWM5
MTZlYzcxLi41ZWQ3YmVkMzViZTZmY2Q3ZDgyZTZlY2MyZWRmZTc4YTQwMjcwZTk1IDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC91bmlmb3JtLWxvY2F0aW9uLWxlbmd0
aC1saW1pdHMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmds
L3VuaWZvcm0tbG9jYXRpb24tbGVuZ3RoLWxpbWl0cy1leHBlY3RlZC50eHQKQEAgLTMsNiArMywx
MCBAQCBUZXN0IHVuaWZvcm0gbG9jYXRpb24gdW5kZXJuZWF0aCB0aGUgbGVuZ3RoIGxpbWl0CiBQ
QVNTIGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuTElOS19TVEFUVVMpIGlzIHRy
dWUKIFBBU1MgdW5pZm9ybUxvYyBpcyBub24tbnVsbC4KIFBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVj
dGVkIHZhbHVlOiBOT19FUlJPUiA6IAorVGVzdCB1bmlmb3JtIGxvY2F0aW9uIGV4YWN0bHkgYXQg
dGhlIGxlbmd0aCBsaW1pdAorUEFTUyBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGds
LkxJTktfU1RBVFVTKSBpcyB0cnVlCitQQVNTIHVuaWZvcm1Mb2MgaXMgbm9uLW51bGwuCitQQVNT
IGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKIFRlc3QgdW5pZm9ybSBs
b2NhdGlvbiBvdmVyIHRoZSBsZW5ndGggbGltaXQKIFBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVk
IHZhbHVlOiBOT19FUlJPUiA6IAogUEFTUyBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0s
IGdsLkxJTktfU1RBVFVTKSBpcyB0cnVlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nh
bnZhcy93ZWJnbC91bmlmb3JtLWxvY2F0aW9uLWxlbmd0aC1saW1pdHMuaHRtbCBiL0xheW91dFRl
c3RzL2Zhc3QvY2FudmFzL3dlYmdsL3VuaWZvcm0tbG9jYXRpb24tbGVuZ3RoLWxpbWl0cy5odG1s
CmluZGV4IDAwMGQ0OGM1ODljYjE4OThhNDBiZmJmZTAwZjhjMGZiZWExY2JjNmEuLjQ1ZGRmOTM5
MzliZjA1NTU5NjgxZTJlMTlkZTNiZjIzYjIxNjNkYmMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L2Zhc3QvY2FudmFzL3dlYmdsL3VuaWZvcm0tbG9jYXRpb24tbGVuZ3RoLWxpbWl0cy5odG1sCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3VuaWZvcm0tbG9jYXRpb24tbGVuZ3Ro
LWxpbWl0cy5odG1sCkBAIC0xMyw3ICsxMywyMyBAQCBUaGVyZSBpcyBzdXBwb3NlZCB0byBiZSBh
biBleGFtcGxlIGRyYXdpbmcgaGVyZSwgYnV0IGl0J3Mgbm90IGltcG9ydGFudC4KIDwvY2FudmFz
PgogPGRpdiBpZD0iZGVzY3JpcHRpb24iPlZlcmlmeSBsaW1pdHMgb24gdGhlIGxlbmd0aHMgb2Yg
dW5pZm9ybSBsb2NhdGlvbnMuPC9kaXY+CiA8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KLTxzY3Jp
cHQgaWQ9Imdvb2RWZXJ0ZXhTaGFkZXIiIHR5cGU9Ingtc2hhZGVyL3gtdmVydGV4Ij4KKzxzY3Jp
cHQgaWQ9Imdvb2RWZXJ0ZXhTaGFkZXIxIiB0eXBlPSJ4LXNoYWRlci94LXZlcnRleCI+CisvLyBB
IHZlcnRleCBzaGFkZXIgd2hlcmUgdGhlIHVuaWZvcm0gbmFtZSBpcyBsb25nLCBidXQgd2VsbCBi
ZWxvdyB0aGUgbGltaXQuCitzdHJ1Y3QgTmVzdGluZzIgeworICAgIHZlYzQgaWRlbnRpZmllcjYy
Q2hhcmFjdGVyc0xvbmdfMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ7Cit9Owor
CitzdHJ1Y3QgTmVzdGluZzEgeworICAgIE5lc3RpbmcyIGlkZW50aWZpZXI2NENoYXJhY3RlcnNM
b25nXzAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY7Cit9OworCit1bmlmb3Jt
IE5lc3RpbmcxIGlkZW50aWZpZXI3MENoYXJhY3RlcnNMb25nXzAxMjM0NTY3ODkwMTIzNDU2Nzg5
MDEyMzQ1Njc4OTAxMjM0NTY3ODkwOworCit2b2lkIG1haW4oKSB7CisgICAgZ2xfUG9zaXRpb24g
PSBpZGVudGlmaWVyNzBDaGFyYWN0ZXJzTG9uZ18wMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3
ODkwMTIzNDU2Nzg5MC5pZGVudGlmaWVyNjRDaGFyYWN0ZXJzTG9uZ18wMTIzNDU2Nzg5MDEyMzQ1
Njc4OTAxMjM0NTY3ODkwMTIzNDU2LmlkZW50aWZpZXI2MkNoYXJhY3RlcnNMb25nXzAxMjM0NTY3
ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0OworfQorPC9zY3JpcHQ+Cis8c2NyaXB0IGlkPSJn
b29kVmVydGV4U2hhZGVyMiIgdHlwZT0ieC1zaGFkZXIveC12ZXJ0ZXgiPgogLy8gQSB2ZXJ0ZXgg
c2hhZGVyIHdoZXJlIHRoZSBuZWVkZWQgdW5pZm9ybSBsb2NhdGlvbiBpcyBleGFjdGx5IDI1NiBj
aGFyYWN0ZXJzLgogc3RydWN0IE5lc3RpbmcyIHsKICAgICB2ZWM0IGlkZW50aWZpZXI2MkNoYXJh
Y3RlcnNMb25nXzAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0OwpAQCAtNjIsNyAr
NzgsMTQgQEAgdmFyIHd0dSA9IFdlYkdMVGVzdFV0aWxzOwogdmFyIGdsID0gd3R1LmNyZWF0ZTNE
Q29udGV4dChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZXhhbXBsZSIpKTsKIAogZGVidWcoIlRl
c3QgdW5pZm9ybSBsb2NhdGlvbiB1bmRlcm5lYXRoIHRoZSBsZW5ndGggbGltaXQiKTsKLXZhciBw
cm9ncmFtID0gd3R1LmxvYWRQcm9ncmFtRnJvbVNjcmlwdChnbCwgImdvb2RWZXJ0ZXhTaGFkZXIi
LCAiZnJhZ21lbnRTaGFkZXIiKTsKK3ZhciBwcm9ncmFtID0gd3R1LmxvYWRQcm9ncmFtRnJvbVNj
cmlwdChnbCwgImdvb2RWZXJ0ZXhTaGFkZXIxIiwgImZyYWdtZW50U2hhZGVyIik7CitzaG91bGRC
ZSgnZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUyknLCAndHJ1
ZScpOwordmFyIHVuaWZvcm1Mb2MgPSBnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgImlk
ZW50aWZpZXI3MENoYXJhY3RlcnNMb25nXzAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAx
MjM0NTY3ODkwLmlkZW50aWZpZXI2NENoYXJhY3RlcnNMb25nXzAxMjM0NTY3ODkwMTIzNDU2Nzg5
MDEyMzQ1Njc4OTAxMjM0NTYuaWRlbnRpZmllcjYyQ2hhcmFjdGVyc0xvbmdfMDEyMzQ1Njc4OTAx
MjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQiKTsKK3Nob3VsZEJlTm9uTnVsbCgndW5pZm9ybUxvYycp
Oword3R1LmdsRXJyb3JTaG91bGRCZShnbCwgZ2wuTk9ORSk7CisKK2RlYnVnKCJUZXN0IHVuaWZv
cm0gbG9jYXRpb24gZXhhY3RseSBhdCB0aGUgbGVuZ3RoIGxpbWl0Iik7Cit2YXIgcHJvZ3JhbSA9
IHd0dS5sb2FkUHJvZ3JhbUZyb21TY3JpcHQoZ2wsICJnb29kVmVydGV4U2hhZGVyMiIsICJmcmFn
bWVudFNoYWRlciIpOwogc2hvdWxkQmUoJ2dsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwg
Z2wuTElOS19TVEFUVVMpJywgJ3RydWUnKTsKIHZhciB1bmlmb3JtTG9jID0gZ2wuZ2V0VW5pZm9y
bUxvY2F0aW9uKHByb2dyYW0sICJpZGVudGlmaWVyMTI4Q2hhcmFjdGVyc0xvbmdfMDEyMzQ1Njc4
OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1
Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OS5pZGVudGlmaWVyNjRDaGFyYWN0ZXJz
TG9uZ18wMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2LmlkZW50aWZpZXI2MkNo
YXJhY3RlcnNMb25nXzAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0Iik7CiBzaG91
bGRCZU5vbk51bGwoJ3VuaWZvcm1Mb2MnKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRm
b3JtL21hYy9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RF
eHBlY3RhdGlvbnMKaW5kZXggYWYzNjY3MzE0YzExNmE0M2Q5MWU4MzQ1YTM2NDU2NjkyMjY1M2My
OS4uNzQ1MWNjNzc1MTE2YjNkMzc3YzUzYjNhZDNmNGZhMmMyNmJiYmU3NyAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTQ3OSwxMCArNDc5LDYgQEAgZmFz
dC9ldmVudHMvcGxhdGZvcm0td2hlZWxldmVudC1wYWdpbmcteS1pbi1ub24tc2Nyb2xsaW5nLXBh
Z2UuaHRtbAogZmFzdC9ldmVudHMvcGxhdGZvcm0td2hlZWxldmVudC1wYWdpbmcteS1pbi1zY3Jv
bGxpbmctZGl2Lmh0bWwKIGZhc3QvZXZlbnRzL3BsYXRmb3JtLXdoZWVsZXZlbnQtcGFnaW5nLXkt
aW4tc2Nyb2xsaW5nLXBhZ2UuaHRtbAogCi0jIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03MDk4OQotZmFzdC9jYW52YXMvd2ViZ2wvYXR0cmliLWxvY2F0aW9uLWxlbmd0
aC1saW1pdHMuaHRtbAotZmFzdC9jYW52YXMvd2ViZ2wvdW5pZm9ybS1sb2NhdGlvbi1sZW5ndGgt
bGltaXRzLmh0bWwKLQogIyBXZWIgSW50ZW50cyBpcyBub3QgeWV0IGVuYWJsZWQuCiB3ZWJpbnRl
bnRzLwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>166787</attachid>
            <date>2012-10-02 17:41:43 -0700</date>
            <delta_ts>2012-10-02 18:11:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70989-20121003104055.patch</filename>
            <type>text/plain</type>
            <size>39733</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMwMjM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCBhMDZlNmM2MzcyMmEz
NTQ4MjMzZDI2ZDhiYjc0ZDczZGQ5MjkzNDQxLi5iYzc1YTJiNmM1Nzc2NmQ5YzI2M2FjYzZlNzgy
MzZhYjczZmQ2MjE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNiBAQAorMjAxMi0xMC0wMiAg
RGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5jb20+CisKKyAgICAgICAgQXR0cmlidXRlIGFuZCBV
bmlmb3JtIHZhcmlhYmxlIG5hbWVzIG5lZWQgdHJhbnNsYXRpb24gaW4gc2hhZGVyCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDk4OQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYkdMIHNwZWNpZmllcyBz
b21lIG1heGltdW0gbGVuZ3RocyBmb3IgdmFyaWFibGUgbmFtZXMgKGF0dHJpYnV0ZXMKKyAgICAg
ICAgYW5kIHVuaWZvcm1zKS4gQWxzbywgc29tZSBHTCBkcml2ZXJzIGhhdmUgaXNzdWVzIHdpdGgg
bG9uZyBuYW1lcy4gRm9yCisgICAgICAgIHRoYXQgcmVhc29uLCBBTkdMRSBoYXMgYW4gb3B0aW9u
IHRvIHJld3JpdGUgdGhlIHNoYWRlciwgdHJhbnNsYXRpbmcKKyAgICAgICAgbG9uZyBuYW1lcyBp
bnRvIHNob3J0IG5hbWVzLiBUdXJuaW5nIHRoaXMgb24gaGVscHMgc2hhZGVycyBjb21waWxlLAor
ICAgICAgICBidXQgd2UgbmVlZCB0byBrZWVwIGEgbWFwcGluZyBiZXR3ZWVuIHRoZSBvcmlnaW5h
bCBuYW1lcyBhbmQgdGhlCisgICAgICAgIHRyYW5zbGF0ZWQgbmFtZXMsIHNvIHRoYXQgd2UgYmlu
ZCB0byB0aGUgcmlnaHQgbG9jYXRpb24gZnJvbSB1c2VyIGNvZGUKKyAgICAgICAgKHdoaWNoIHdv
bid0IGV2ZXIgc2VlIHRoZSB0cmFuc2xhdGVkIHNvdXJjZSkuCisKKyAgICAgICAgVGhpcyBwcm92
aWRlZCBhbiBvcHBvcnR1bml0eSB0byBjbGVhbiB1cCBzb21lIG90aGVyIGJpdHMgb2YgY29kZToK
KyAgICAgICAgQ1NTIEZpbHRlcnMgZXhhbWluZWQgdGhlIHVuaWZvcm0gbmFtZXMgYWZ0ZXIgYSBj
b21waWxhdGlvbjsgSXQgY2FuCisgICAgICAgIG5vdyB1c2UgdGhlIHZhcmlhYmxlIG5hbWUgbWFw
LiBJIGFsc28gYWRkZWQgYSB0eXBlZGVmIGZvciB0aGUKKyAgICAgICAgSGFzaE1hcHMgdGhhdCBr
ZWVwIHRoZSBzaGFkZXIsIHRoZSBzb3VyY2UgY29kZSBhbmQgdGhlIHZhcmlhYmxlIG5hbWUKKyAg
ICAgICAgbWFwcGluZ3MuIEFuZCBsYXN0bHksIEkgcmVuYW1lZCBzb21lIGZ1bmN0aW9ucyBpbiBF
eHRlbnNpb25zM0QKKyAgICAgICAgdG8gYmV0dGVyIHJlZmxlY3Qgd2hhdCB0aGV5IHdlcmUgZG9p
bmcuCisKKyAgICAgICAgSSBhbHNvIG9wZW5lZCBhIGZvbGxvd3VwIGJ1ZyB0byBtYWtlIHN1cmUg
dGhlc2UgdGFibGVzIGFyZSBkZWxldGVkCisgICAgICAgIHdoZW4gdGhlIGFzc29jaWF0ZWQgc2hh
ZGVycyAob3IgbGlua2VkIHByb2dyYW1zKSBnbyBhd2F5OgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTgyMDQKKworICAgICAgICBDb3ZlcmVkIGJ5IGV4
aXN0aW5nIHRlc3RzICh3aXRoIHNvbWUgZW5oYW5jZW1lbnRzKToKKyAgICAgICAgLSBmYXN0L2Nh
bnZhcy93ZWJnbC9hdHRyaWItbG9jYXRpb24tbGVuZ3RoLWxpbWl0cy5odG1sOgorICAgICAgICAt
IGZhc3QvY2FudmFzL3dlYmdsL3VuaWZvcm0tbG9jYXRpb24tbGVuZ3RoLWxpbWl0cy5odG1sOgor
CisgICAgICAgICogY2hyb21pdW0vcHVibGljL1dlYkdyYXBoaWNzQ29udGV4dDNELmg6CisgICAg
ICAgIChXZWJLaXQ6OldlYkdyYXBoaWNzQ29udGV4dDNEOjp0cmFuc2xhdGVTaGFkZXJBTkdMRSk6
IFJlbmFtZSBtZXRob2QuCisKIDIwMTItMTAtMDIgIFRlcnJ5IEFuZGVyc29uICA8dGRhbmRlcnNv
bkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBBZGQgZmllbGQgdG8gV2ViUmVu
ZGVyaW5nU3RhdHMgdG8gdHJhY2sgaWYgd2UgaGF2ZSBpbXBsLXRocmVhZCBzY3JvbGxlZApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IDlhOTc0N2Q3Y2NjYjZjNGQ1MTliZjE5MTEwYzZjOThjZmQ0MTUxNDEuLjhiMTgy
YjQ3MTYyOTIxNjE0YjEzNzBmYmUzZTgwNTQ0MzA3ZjllM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsNSAr
MSw3OCBAQAogMjAxMi0xMC0wMiAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5jb20+CiAKKyAg
ICAgICAgQXR0cmlidXRlIGFuZCBVbmlmb3JtIHZhcmlhYmxlIG5hbWVzIG5lZWQgdHJhbnNsYXRp
b24gaW4gc2hhZGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD03MDk4OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFdlYkdMIHNwZWNpZmllcyBzb21lIG1heGltdW0gbGVuZ3RocyBmb3IgdmFyaWFibGUgbmFt
ZXMgKGF0dHJpYnV0ZXMKKyAgICAgICAgYW5kIHVuaWZvcm1zKS4gQWxzbywgc29tZSBHTCBkcml2
ZXJzIGhhdmUgaXNzdWVzIHdpdGggbG9uZyBuYW1lcy4gRm9yCisgICAgICAgIHRoYXQgcmVhc29u
LCBBTkdMRSBoYXMgYW4gb3B0aW9uIHRvIHJld3JpdGUgdGhlIHNoYWRlciwgdHJhbnNsYXRpbmcK
KyAgICAgICAgbG9uZyBuYW1lcyBpbnRvIHNob3J0IG5hbWVzLiBUdXJuaW5nIHRoaXMgb24gaGVs
cHMgc2hhZGVycyBjb21waWxlLAorICAgICAgICBidXQgd2UgbmVlZCB0byBrZWVwIGEgbWFwcGlu
ZyBiZXR3ZWVuIHRoZSBvcmlnaW5hbCBuYW1lcyBhbmQgdGhlCisgICAgICAgIHRyYW5zbGF0ZWQg
bmFtZXMsIHNvIHRoYXQgd2UgYmluZCB0byB0aGUgcmlnaHQgbG9jYXRpb24gZnJvbSB1c2VyIGNv
ZGUKKyAgICAgICAgKHdoaWNoIHdvbid0IGV2ZXIgc2VlIHRoZSB0cmFuc2xhdGVkIHNvdXJjZSku
CisKKyAgICAgICAgVGhpcyBwcm92aWRlZCBhbiBvcHBvcnR1bml0eSB0byBjbGVhbiB1cCBzb21l
IG90aGVyIGJpdHMgb2YgY29kZToKKyAgICAgICAgQ1NTIEZpbHRlcnMgZXhhbWluZWQgdGhlIHVu
aWZvcm0gbmFtZXMgYWZ0ZXIgYSBjb21waWxhdGlvbjsgSXQgY2FuCisgICAgICAgIG5vdyB1c2Ug
dGhlIHZhcmlhYmxlIG5hbWUgbWFwLiBJIGFsc28gYWRkZWQgYSB0eXBlZGVmIGZvciB0aGUKKyAg
ICAgICAgSGFzaE1hcHMgdGhhdCBrZWVwIHRoZSBzaGFkZXIsIHRoZSBzb3VyY2UgY29kZSBhbmQg
dGhlIHZhcmlhYmxlIG5hbWUKKyAgICAgICAgbWFwcGluZ3MuIEFuZCBsYXN0bHksIEkgcmVuYW1l
ZCBzb21lIGZ1bmN0aW9ucyBpbiBFeHRlbnNpb25zM0QKKyAgICAgICAgdG8gYmV0dGVyIHJlZmxl
Y3Qgd2hhdCB0aGV5IHdlcmUgZG9pbmcuCisKKyAgICAgICAgSSBhbHNvIG9wZW5lZCBhIGZvbGxv
d3VwIGJ1ZyB0byBtYWtlIHN1cmUgdGhlc2UgdGFibGVzIGFyZSBkZWxldGVkCisgICAgICAgIHdo
ZW4gdGhlIGFzc29jaWF0ZWQgc2hhZGVycyAob3IgbGlua2VkIHByb2dyYW1zKSBnbyBhd2F5Ogor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTgyMDQKKwor
ICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzICh3aXRoIHNvbWUgZW5oYW5jZW1lbnRz
KToKKyAgICAgICAgLSBmYXN0L2NhbnZhcy93ZWJnbC9hdHRyaWItbG9jYXRpb24tbGVuZ3RoLWxp
bWl0cy5odG1sOgorICAgICAgICAtIGZhc3QvY2FudmFzL3dlYmdsL3VuaWZvcm0tbG9jYXRpb24t
bGVuZ3RoLWxpbWl0cy5odG1sOgorCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1No
YWRlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xEZWJ1Z1NoYWRlcnM6OmdldFRyYW5z
bGF0ZWRTaGFkZXJTb3VyY2UpOiBVc2UgbmV3IG1ldGhvZCBuYW1lLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omdl
dFZhcmlhYmxlSW5mbyk6IEV4dHJhY3RzIGFsbCB0aGUgaW5mb3JtYXRpb24gb24gdmFyaWFibGVz
IChlaXRoZXIgYXR0cmlidXRlcworICAgICAgICBvciB1bmlmb3JtcykgZnJvbSB0aGUgbmV3bHkg
Y29tcGlsZWQgc2hhZGVyLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpB
TkdMRVdlYktpdEJyaWRnZTo6Y29tcGlsZVNoYWRlclNvdXJjZSk6IE5ldyBtZXRob2QgbmFtZS4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktpdEJyaWRnZS5oOgorICAgICAg
ICAoV2ViQ29yZTo6Z2V0VW5pZm9ybXMpOiBEZWxldGVkIHRoaXMgbWV0aG9kLgorICAgICAgICAo
V2ViQ29yZTo6Y29tcGlsZVNoYWRlclNvdXJjZSk6IE5ldyBtZXRob2QgbmFtZS4KKyAgICAgICAg
KiBwbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L0V4dGVuc2lvbnMzRENocm9taXVtLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRENocm9taXVtOjp0cmFuc2xhdGVTaGFkZXJBTkdM
RSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRXh0ZW5zaW9uczNEQ2hy
b21pdW0uaDoKKyAgICAgICAgKEV4dGVuc2lvbnMzRENocm9taXVtKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9FeHRlbnNpb25zM0QuaDogQW5vdGhlciBtZXRob2QgcmVuYW1lLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmg6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6VmFyaWFibGVJbmZvOjpWYXJpYWJsZUluZm8pOiBB
IG5ldyBvYmplY3QgdGhhdAorICAgICAgICBob2xkcyB0aGUgc2l6ZSwgdHlwZSBhbmQgdHJhbnNs
YXRlZCBuYW1lIG9mIGEgdmFyaWFibGUgZnJvbSBhIFdlYkdMIHNoYWRlci4KKyAgICAgICAgKEdy
YXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKFNoYWRlclNvdXJjZUVudHJ5KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpTaGFkZXJTb3VyY2VFbnRyeTo6U2hhZGVyU291
cmNlRW50cnkpOiBFbmhhbmNlCisgICAgICAgIHRoaXMgc3RydWN0dXJlIHRvIGtlZXAgdHJhY2sg
b2YgYSBmZXcgbW9yZSB0aGluZ3MgLSB0aGUgdHJhbnNsYXRlZCBzb3VyY2UgY29kZQorICAgICAg
ICBhbmQgdHJhbnNsYXRpb24gbWFwcyBmb3IgdGhlIG9yaWdpbmFsIHVuaWZvcm0gYW5kIGF0dHJp
YnV0ZSBuYW1lcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZp
bHRlclZhbGlkYXRlZFByb2dyYW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRmlsdGVy
VmFsaWRhdGVkUHJvZ3JhbTo6Q3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbSk6IFRoaXMgY2Fu
CisgICAgICAgIG5vdyB1c2UgdGhlIGxpc3Qgb2Ygc2hhZGVyIHN5bWJvbHMgdGhhdCBhcmUgZXhw
b3J0ZWQgYnkgY29tcGlsZVNoYWRlclNvdXJjZSByYXRoZXIKKyAgICAgICAgdGhhbiBoYXZlIGNv
ZGUgdG8gY2hlY2sgdW5pZm9ybSBuYW1lcyBkaXJlY3RseS4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6dHJhbnNsYXRlU2hhZGVyQU5HTEUpOiBD
YWxsIG5ldyBtZXRob2QgbmFtZSBhbmQKKyAgICAgICAgZmlsbCB0aGUgdHJhbnNsYXRpb24gbWFw
cyB3aXRoIHRoZSBpbmZvcm1hdGlvbiBjb21pbmcgb3V0IG9mIEFOR0xFLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uaDoKKyAgICAg
ICAgKEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjb21waWxlU2hhZGVyKToKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldE1hcHBlZFZhcmlh
YmxlTmFtZSk6IEhlbHBlciBmdW5jdGlvbiB0byBjaGFuZ2UgYW4KKyAgICAgICAgZXh0ZXJuYWwv
b3JpZ2luYWwgbmFtZSB0byB0aGUgdmVyc2lvbiB0aGF0IHRoZSB0cmFuc2xhdGVkIHNoYWRlciB1
c2VkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEF0dHJpYkxvY2F0
aW9uKTogTWFrZSBzdXJlIHRvIGxvb2sgZm9yIGEgdHJhbnNsYXRlZCBuYW1lLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlcml2KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJJbmZvTG9nKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJTb3VyY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1Mb2NhdGlvbik6IE1ha2Ugc3VyZSB0byBs
b29rIGZvciBhIHRyYW5zbGF0ZWQgbmFtZS4KKworMjAxMi0xMC0wMiAgRGVhbiBKYWNrc29uICA8
ZGlub0BhcHBsZS5jb20+CisKICAgICAgICAgRXhwb3NlIHNvbWUgR1BVIEluZm9ybWF0aW9uCiAg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NzgxMwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkdyYXBoaWNzQ29u
dGV4dDNELmggYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkdyYXBoaWNzQ29u
dGV4dDNELmgKaW5kZXggODJkM2QzNmM4YWI1NGVkMGEzYjE4NGM0MWZjMmE4NjFhZDU1ZTc4Zi4u
MWFhOTZiMGNhYjJhZWQ0ZTBiNzAxN2U0Yzg3MjA1OGExYjgyMTc3OCAxMDA2NDQKLS0tIGEvU291
cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJHcmFwaGljc0NvbnRleHQzRC5oCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViR3JhcGhpY3NDb250ZXh0M0QuaApA
QCAtNDA1LDcgKzQwNSw3IEBAIHB1YmxpYzoKIAogICAgIC8vIEZJWE1FOiBtYWtlIHRoaXMgZnVu
Y3Rpb24gcHVyZSB2aXJ0dWFsIG9uY2UgaXQgaXMgaW1wbGVtZW50ZWQgaW4KICAgICAvLyBib3Ro
IGNvbW1hbmQgYnVmZmVyIHBvcnQgYW5kIGluLXByb2Nlc3MgcG9ydC4KLSAgICB2aXJ0dWFsIFdl
YlN0cmluZyBnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoV2ViR0xJZCBzaGFkZXIpIHsg
cmV0dXJuIFdlYlN0cmluZygpOyB9CisgICAgdmlydHVhbCBXZWJTdHJpbmcgdHJhbnNsYXRlU2hh
ZGVyQU5HTEUoV2ViR0xJZCBzaGFkZXIpIHsgcmV0dXJuIFdlYlN0cmluZygpOyB9CiAKICAgICAv
LyBHTF9DSFJPTUlVTV9pb3N1cmZhY2UKICAgICB2aXJ0dWFsIHZvaWQgdGV4SW1hZ2VJT1N1cmZh
Y2UyRENIUk9NSVVNKFdHQzNEZW51bSB0YXJnZXQsIFdHQzNEaW50IHdpZHRoLCBXR0MzRGludCBo
ZWlnaHQsIFdHQzNEdWludCBpb1N1cmZhY2VJZCwgV0dDM0R1aW50IHBsYW5lKSB7IH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRGVidWdTaGFkZXJzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRGVidWdTaGFkZXJzLmNwcAppbmRleCA1
NDk5YWVkOWYwNDhiMjlkOWM4ZTVhNWUyNzUzZTA0YTFkNTRlNTM4Li5iZDM2NjAwNDBhOWE0MzJj
NWQyOTk0MmI0NTUxNjZkMTk4Mjk5Yzc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTERlYnVnU2hhZGVycy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xEZWJ1Z1NoYWRlcnMuY3BwCkBAIC02Myw3ICs2Myw3IEBAIFN0cmluZyBXZWJH
TERlYnVnU2hhZGVyczo6Z2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZShXZWJHTFNoYWRlciogc2hh
ZGVyLCBFeGNlcHRpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICBpZiAoIW1fY29udGV4
dC0+dmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZSIsIHNoYWRl
cikpCiAgICAgICAgIHJldHVybiAiIjsKLSAgICByZXR1cm4gbV9jb250ZXh0LT5ncmFwaGljc0Nv
bnRleHQzRCgpLT5nZXRFeHRlbnNpb25zKCktPmdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdM
RShzaGFkZXItPm9iamVjdCgpKTsKKyAgICByZXR1cm4gbV9jb250ZXh0LT5ncmFwaGljc0NvbnRl
eHQzRCgpLT5nZXRFeHRlbnNpb25zKCktPnRyYW5zbGF0ZVNoYWRlckFOR0xFKHNoYWRlci0+b2Jq
ZWN0KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L0V4dGVuc2lvbnMzRENocm9taXVtLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvRXh0ZW5zaW9uczNE
Q2hyb21pdW0uY3BwCmluZGV4IDE3YzMwMjE4MzBhMjBiMjRhNGY3YzZlZTUxMjJhYmExZmNiMjM5
Y2MuLjdiM2ExMTAxMWQ4ZDk5ZWM0MjMwMWE5Y2E3NWM5NWE2YmI5MzVmODUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvRXh0ZW5zaW9uczNEQ2hy
b21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQv
RXh0ZW5zaW9uczNEQ2hyb21pdW0uY3BwCkBAIC0xMTUsOSArMTE1LDkgQEAgdm9pZCBFeHRlbnNp
b25zM0RDaHJvbWl1bTo6YmluZFZlcnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QgYXJyYXkp
CiAgICAgbV9wcml2YXRlLT53ZWJDb250ZXh0KCktPmJpbmRWZXJ0ZXhBcnJheU9FUyhhcnJheSk7
CiB9CiAKLVN0cmluZyBFeHRlbnNpb25zM0RDaHJvbWl1bTo6Z2V0VHJhbnNsYXRlZFNoYWRlclNv
dXJjZUFOR0xFKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQorU3RyaW5nIEV4dGVuc2lvbnMzRENo
cm9taXVtOjp0cmFuc2xhdGVTaGFkZXJBTkdMRShQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKIHsK
LSAgICByZXR1cm4gbV9wcml2YXRlLT53ZWJDb250ZXh0KCktPmdldFRyYW5zbGF0ZWRTaGFkZXJT
b3VyY2VBTkdMRShzaGFkZXIpOworICAgIHJldHVybiBtX3ByaXZhdGUtPndlYkNvbnRleHQoKS0+
dHJhbnNsYXRlU2hhZGVyQU5HTEUoc2hhZGVyKTsKIH0KIAogdm9pZCBFeHRlbnNpb25zM0RDaHJv
bWl1bTo6cmF0ZUxpbWl0T2Zmc2NyZWVuQ29udGV4dENIUk9NSVVNKCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmNwcAppbmRl
eCBiNjQ3MjNhMDgxMmEyNzA3OTE1OWI3YjFiYzAyOWYzMDZlZGM0ZDM5Li4xODBjYThiMzVhMDFi
Nzk3ZTI5YTU0ZDlmNjFiYmFhOTViNjVhMmY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktpdEJyaWRnZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuY3BwCkBAIC0zMCw2ICszMCw4
IEBACiAjaW5jbHVkZSAiQU5HTEVXZWJLaXRCcmlkZ2UuaCIKICNpbmNsdWRlIDx3dGYvT3duQXJy
YXlQdHIuaD4KIAordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBpbmxpbmUgc3RhdGljIGludCBnZXRWYWxpZGF0aW9uUmVzdWx0VmFsdWUoY29uc3QgU2hIYW5k
bGUgY29tcGlsZXIsIFNoU2hhZGVySW5mbyBzaGFkZXJJbmZvKQpAQCAtMzksNiArNDEsNjIgQEAg
aW5saW5lIHN0YXRpYyBpbnQgZ2V0VmFsaWRhdGlvblJlc3VsdFZhbHVlKGNvbnN0IFNoSGFuZGxl
IGNvbXBpbGVyLCBTaFNoYWRlckluZm8KICAgICByZXR1cm4gdmFsdWU7CiB9CiAKK3N0YXRpYyBi
b29sIGdldFZhcmlhYmxlSW5mbyhjb25zdCBTaEhhbmRsZSBjb21waWxlciwgU2hTaGFkZXJJbmZv
IHZhcmlhYmxlVHlwZSwgVmVjdG9yPEFOR0xFU2hhZGVyU3ltYm9sPiYgc3ltYm9scykKK3sKKyAg
ICBTaFNoYWRlckluZm8gdmFyaWFibGVNYXhOYW1lTGVuZ3RoVHlwZTsKKworICAgIHN3aXRjaCAo
dmFyaWFibGVUeXBlKSB7CisgICAgY2FzZSBTSF9BQ1RJVkVfQVRUUklCVVRFUzoKKyAgICAgICAg
dmFyaWFibGVNYXhOYW1lTGVuZ3RoVHlwZSA9IFNIX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdU
SDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTSF9BQ1RJVkVfVU5JRk9STVM6CisgICAgICAg
IHZhcmlhYmxlTWF4TmFtZUxlbmd0aFR5cGUgPSBTSF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RI
OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGludCBudW1WYXJpYWJs
ZXMgPSBnZXRWYWxpZGF0aW9uUmVzdWx0VmFsdWUoY29tcGlsZXIsIHZhcmlhYmxlVHlwZSk7Cisg
ICAgaWYgKG51bVZhcmlhYmxlcyA8IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlu
dCBtYXhOYW1lTGVuZ3RoID0gZ2V0VmFsaWRhdGlvblJlc3VsdFZhbHVlKGNvbXBpbGVyLCB2YXJp
YWJsZU1heE5hbWVMZW5ndGhUeXBlKTsKKyAgICBpZiAobWF4TmFtZUxlbmd0aCA8PSAxKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpbnQgbWF4TWFwcGVkTmFtZUxlbmd0aCA9IGdldFZh
bGlkYXRpb25SZXN1bHRWYWx1ZShjb21waWxlciwgU0hfTUFQUEVEX05BTUVfTUFYX0xFTkdUSCk7
CisgICAgaWYgKG1heE1hcHBlZE5hbWVMZW5ndGggPD0gMSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgT3duQXJyYXlQdHI8Y2hhcj4gbmFtZUJ1ZmZlciA9IGFkb3B0QXJyYXlQdHIobmV3
IGNoYXJbbWF4TmFtZUxlbmd0aF0pOworICAgIE93bkFycmF5UHRyPGNoYXI+IG1hcHBlZE5hbWVC
dWZmZXIgPSBhZG9wdEFycmF5UHRyKG5ldyBjaGFyW21heE1hcHBlZE5hbWVMZW5ndGhdKTsKKyAg
ICAKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVZhcmlhYmxlczsgKytpKSB7CisgICAgICAg
IEFOR0xFU2hhZGVyU3ltYm9sIHN5bWJvbDsKKyAgICAgICAgaW50IG5hbWVMZW5ndGggPSAtMTsK
KyAgICAgICAgc3dpdGNoICh2YXJpYWJsZVR5cGUpIHsKKyAgICAgICAgY2FzZSBTSF9BQ1RJVkVf
QVRUUklCVVRFUzoKKyAgICAgICAgICAgIHN5bWJvbC5zeW1ib2xUeXBlID0gU0hBREVSX1NZTUJP
TF9UWVBFX0FUVFJJQlVURTsKKyAgICAgICAgICAgIFNoR2V0QWN0aXZlQXR0cmliKGNvbXBpbGVy
LCBpLCAmbmFtZUxlbmd0aCwgJnN5bWJvbC5zaXplLCAmc3ltYm9sLmRhdGFUeXBlLCBuYW1lQnVm
ZmVyLmdldCgpLCBtYXBwZWROYW1lQnVmZmVyLmdldCgpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFNIX0FDVElWRV9VTklGT1JNUzoKKyAgICAgICAgICAgIHN5bWJvbC5zeW1i
b2xUeXBlID0gU0hBREVSX1NZTUJPTF9UWVBFX1VOSUZPUk07CisgICAgICAgICAgICBTaEdldEFj
dGl2ZVVuaWZvcm0oY29tcGlsZXIsIGksICZuYW1lTGVuZ3RoLCAmc3ltYm9sLnNpemUsICZzeW1i
b2wuZGF0YVR5cGUsIG5hbWVCdWZmZXIuZ2V0KCksIG1hcHBlZE5hbWVCdWZmZXIuZ2V0KCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAobmFtZUxlbmd0aCA8PSAwKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBzeW1ib2wubmFtZSA9IFN0cmluZzo6ZnJvbVVURjgobmFtZUJ1ZmZlci5nZXQoKSwgbmFt
ZUxlbmd0aCk7CisgICAgICAgIHN5bWJvbC5tYXBwZWROYW1lID0gU3RyaW5nOjpmcm9tVVRGOCht
YXBwZWROYW1lQnVmZmVyLmdldCgpLCBzdGQ6Om1pbihtYXhNYXBwZWROYW1lTGVuZ3RoLCBuYW1l
TGVuZ3RoKSk7CisgICAgICAgIHN5bWJvbHMuYXBwZW5kKHN5bWJvbCk7CisgICAgfQorICAgIHJl
dHVybiB0cnVlOworfQorCiBBTkdMRVdlYktpdEJyaWRnZTo6QU5HTEVXZWJLaXRCcmlkZ2UoU2hT
aGFkZXJPdXRwdXQgc2hhZGVyT3V0cHV0LCBTaFNoYWRlclNwZWMgc2hhZGVyU3BlYykKICAgICA6
IGJ1aWx0Q29tcGlsZXJzKGZhbHNlKQogICAgICwgbV9mcmFnbWVudENvbXBpbGVyKDApCkBAIC03
NSw3ICsxMzMsNyBAQCB2b2lkIEFOR0xFV2ViS2l0QnJpZGdlOjpzZXRSZXNvdXJjZXMoU2hCdWls
dEluUmVzb3VyY2VzIHJlc291cmNlcykKICAgICBtX3Jlc291cmNlcyA9IHJlc291cmNlczsKIH0K
IAotYm9vbCBBTkdMRVdlYktpdEJyaWRnZTo6dmFsaWRhdGVTaGFkZXJTb3VyY2UoY29uc3QgY2hh
ciogc2hhZGVyU291cmNlLCBBTkdMRVNoYWRlclR5cGUgc2hhZGVyVHlwZSwgU3RyaW5nJiB0cmFu
c2xhdGVkU2hhZGVyU291cmNlLCBTdHJpbmcmIHNoYWRlclZhbGlkYXRpb25Mb2csIGludCBleHRy
YUNvbXBpbGVPcHRpb25zKQorYm9vbCBBTkdMRVdlYktpdEJyaWRnZTo6Y29tcGlsZVNoYWRlclNv
dXJjZShjb25zdCBjaGFyKiBzaGFkZXJTb3VyY2UsIEFOR0xFU2hhZGVyVHlwZSBzaGFkZXJUeXBl
LCBTdHJpbmcmIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UsIFN0cmluZyYgc2hhZGVyVmFsaWRhdGlv
bkxvZywgVmVjdG9yPEFOR0xFU2hhZGVyU3ltYm9sPiYgc3ltYm9scywgaW50IGV4dHJhQ29tcGls
ZU9wdGlvbnMpCiB7CiAgICAgaWYgKCFidWlsdENvbXBpbGVycykgewogICAgICAgICBtX2ZyYWdt
ZW50Q29tcGlsZXIgPSBTaENvbnN0cnVjdENvbXBpbGVyKFNIX0ZSQUdNRU5UX1NIQURFUiwgbV9z
aGFkZXJTcGVjLCBtX3NoYWRlck91dHB1dCwgJm1fcmVzb3VyY2VzKTsKQEAgLTk3LDcgKzE1NSw3
IEBAIGJvb2wgQU5HTEVXZWJLaXRCcmlkZ2U6OnZhbGlkYXRlU2hhZGVyU291cmNlKGNvbnN0IGNo
YXIqIHNoYWRlclNvdXJjZSwgQU5HTEVTaGFkCiAKICAgICBjb25zdCBjaGFyKiBjb25zdCBzaGFk
ZXJTb3VyY2VTdHJpbmdzW10gPSB7IHNoYWRlclNvdXJjZSB9OwogCi0gICAgYm9vbCB2YWxpZGF0
ZVN1Y2Nlc3MgPSBTaENvbXBpbGUoY29tcGlsZXIsIHNoYWRlclNvdXJjZVN0cmluZ3MsIDEsIFNI
X09CSkVDVF9DT0RFIHwgZXh0cmFDb21waWxlT3B0aW9ucyk7CisgICAgYm9vbCB2YWxpZGF0ZVN1
Y2Nlc3MgPSBTaENvbXBpbGUoY29tcGlsZXIsIHNoYWRlclNvdXJjZVN0cmluZ3MsIDEsIFNIX09C
SkVDVF9DT0RFIHwgU0hfQVRUUklCVVRFU19VTklGT1JNUyB8IFNIX01BUF9MT05HX1ZBUklBQkxF
X05BTUVTIHwgZXh0cmFDb21waWxlT3B0aW9ucyk7CiAgICAgaWYgKCF2YWxpZGF0ZVN1Y2Nlc3Mp
IHsKICAgICAgICAgaW50IGxvZ1NpemUgPSBnZXRWYWxpZGF0aW9uUmVzdWx0VmFsdWUoY29tcGls
ZXIsIFNIX0lORk9fTE9HX0xFTkdUSCk7CiAgICAgICAgIGlmIChsb2dTaXplID4gMSkgewpAQCAt
MTE4LDM1ICsxNzYsMTEgQEAgYm9vbCBBTkdMRVdlYktpdEJyaWRnZTo6dmFsaWRhdGVTaGFkZXJT
b3VyY2UoY29uc3QgY2hhciogc2hhZGVyU291cmNlLCBBTkdMRVNoYWQKICAgICAgICAgU2hHZXRP
YmplY3RDb2RlKGNvbXBpbGVyLCB0cmFuc2xhdGlvbkJ1ZmZlci5nZXQoKSk7CiAgICAgICAgIHRy
YW5zbGF0ZWRTaGFkZXJTb3VyY2UgPSB0cmFuc2xhdGlvbkJ1ZmZlci5nZXQoKTsKICAgICB9Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBBTkdMRVdlYktpdEJyaWRnZTo6Z2V0VW5pZm9y
bXMoU2hTaGFkZXJUeXBlIHNoYWRlclR5cGUsIFZlY3RvcjxBTkdMRVNoYWRlclN5bWJvbD4gJnN5
bWJvbHMpCi17Ci0gICAgY29uc3QgU2hIYW5kbGUgY29tcGlsZXIgPSAoc2hhZGVyVHlwZSA9PSBT
SF9WRVJURVhfU0hBREVSID8gbV92ZXJ0ZXhDb21waWxlciA6IG1fZnJhZ21lbnRDb21waWxlcik7
Ci0KLSAgICBpbnQgbnVtVW5pZm9ybXMgPSBnZXRWYWxpZGF0aW9uUmVzdWx0VmFsdWUoY29tcGls
ZXIsIFNIX0FDVElWRV9VTklGT1JNUyk7Ci0gICAgaWYgKG51bVVuaWZvcm1zIDwgMCkKKyAgICAK
KyAgICBpZiAoIWdldFZhcmlhYmxlSW5mbyhjb21waWxlciwgU0hfQUNUSVZFX0FUVFJJQlVURVMs
IHN5bWJvbHMpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFudW1Vbmlmb3JtcykK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpbnQgbWF4TmFtZUxlbmd0aCA9IGdldFZhbGlk
YXRpb25SZXN1bHRWYWx1ZShjb21waWxlciwgU0hfQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCk7
Ci0gICAgaWYgKG1heE5hbWVMZW5ndGggPD0gMSkKKyAgICBpZiAoIWdldFZhcmlhYmxlSW5mbyhj
b21waWxlciwgU0hfQUNUSVZFX1VOSUZPUk1TLCBzeW1ib2xzKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIE93bkFycmF5UHRyPGNoYXI+IG5hbWVCdWZmZXIgPSBhZG9wdEFycmF5UHRyKG5l
dyBjaGFyW21heE5hbWVMZW5ndGhdKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtVW5p
Zm9ybXM7ICsraSkgewotICAgICAgICBBTkdMRVNoYWRlclN5bWJvbCBzeW1ib2w7Ci0gICAgICAg
IHN5bWJvbC5zeW1ib2xUeXBlID0gU0hBREVSX1NZTUJPTF9UWVBFX1VOSUZPUk07Ci0gICAgICAg
IGludCBuYW1lTGVuZ3RoID0gLTE7Ci0gICAgICAgIFNoR2V0QWN0aXZlVW5pZm9ybShjb21waWxl
ciwgaSwgJm5hbWVMZW5ndGgsICZzeW1ib2wuc2l6ZSwgJnN5bWJvbC5kYXRhVHlwZSwgbmFtZUJ1
ZmZlci5nZXQoKSwgMCk7Ci0gICAgICAgIGlmIChuYW1lTGVuZ3RoIDw9IDApCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHN5bWJvbC5uYW1lID0gU3RyaW5nOjpmcm9tVVRGOChu
YW1lQnVmZmVyLmdldCgpLCBuYW1lTGVuZ3RoKTsKLSAgICAgICAgc3ltYm9scy5hcHBlbmQoc3lt
Ym9sKTsKLSAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktpdEJyaWRnZS5oCmluZGV4IDE5YzUwNGVi
MzkzNzA0OTk2ZTk1ZDMyMDgxY2ZjMGI1MzNmYjZiYjMuLmFhMGFjMDhhNGY1YzNhZTkxZjc5NDQ2
YzUxNTgxODg4OWQ1ZWE5NjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuaApAQCAtNTAsNiArNTAsNyBAQCBlbnVtIEFOR0xF
U2hhZGVyU3ltYm9sVHlwZSB7CiBzdHJ1Y3QgQU5HTEVTaGFkZXJTeW1ib2wgewogICAgIEFOR0xF
U2hhZGVyU3ltYm9sVHlwZSBzeW1ib2xUeXBlOwogICAgIFN0cmluZyBuYW1lOworICAgIFN0cmlu
ZyBtYXBwZWROYW1lOwogICAgIFNoRGF0YVR5cGUgZGF0YVR5cGU7CiAgICAgaW50IHNpemU7CiAK
QEAgLTcxLDEyICs3Miw3IEBAIHB1YmxpYzoKICAgICBTaEJ1aWx0SW5SZXNvdXJjZXMgZ2V0UmVz
b3VyY2VzKCkgeyByZXR1cm4gbV9yZXNvdXJjZXM7IH0KICAgICB2b2lkIHNldFJlc291cmNlcyhT
aEJ1aWx0SW5SZXNvdXJjZXMpOwogICAgIAotICAgIGJvb2wgdmFsaWRhdGVTaGFkZXJTb3VyY2Uo
Y29uc3QgY2hhciogc2hhZGVyU291cmNlLCBBTkdMRVNoYWRlclR5cGUsIFN0cmluZyYgdHJhbnNs
YXRlZFNoYWRlclNvdXJjZSwgU3RyaW5nJiBzaGFkZXJWYWxpZGF0aW9uTG9nLCBpbnQgZXh0cmFD
b21waWxlT3B0aW9ucyA9IDApOwotCi0gICAgLy8gR2V0IHRoZSB1bmlmb3JtcyBmb3IgdGhlIGxh
c3QgdmFsaWRhdGVkIHNoYWRlciBvZiB0eXBlIFNoU2hhZGVyVHlwZS4KLSAgICAvLyBGb3IgdGhp
cyBmdW5jdGlvbiB0byB3b3JrLCB5b3UgbXVzdCB1c2UgdGhlIFNIX0FUVFJJQlVURVNfVU5JRk9S
TVMgY29tcGlsZSBvcHRpb24gZHVyaW5nIHZhbGlkYXRpb24uCi0gICAgLy8gUmV0dXJucyBmYWxz
ZSBpZiBhbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VycmVkIGluIEFOR0xFLgotICAgIGJvb2wgZ2V0
VW5pZm9ybXMoU2hTaGFkZXJUeXBlLCBWZWN0b3I8QU5HTEVTaGFkZXJTeW1ib2w+ICZzeW1ib2xz
KTsKKyAgICBib29sIGNvbXBpbGVTaGFkZXJTb3VyY2UoY29uc3QgY2hhciogc2hhZGVyU291cmNl
LCBBTkdMRVNoYWRlclR5cGUsIFN0cmluZyYgdHJhbnNsYXRlZFNoYWRlclNvdXJjZSwgU3RyaW5n
JiBzaGFkZXJWYWxpZGF0aW9uTG9nLCBWZWN0b3I8QU5HTEVTaGFkZXJTeW1ib2w+JiBzeW1ib2xz
LCBpbnQgZXh0cmFDb21waWxlT3B0aW9ucyA9IDApOwogCiBwcml2YXRlOgogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbnNpb25zM0QuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuc2lvbnMzRC5oCmluZGV4IDQ4YjI2Y2Ux
MjJhOGFjMmNkNzYyZDNiNjc5MWZhZjhiZDI5MGJiNWEuLmUxZTVjNzkzMGU2NjA1MDAxYmU1ZjZm
MzViOGY1MTQ5ZmNlZTk3NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0V4dGVuc2lvbnMzRC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0V4dGVuc2lvbnMzRC5oCkBAIC0xNzQsNyArMTc0LDcgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBiaW5kVmVydGV4QXJyYXlPRVMoUGxhdGZvcm0zRE9iamVjdCkgPSAwOwogCiAgICAg
Ly8gR0xfQU5HTEVfdHJhbnNsYXRlZF9zaGFkZXJfc291cmNlCi0gICAgdmlydHVhbCBTdHJpbmcg
Z2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFKFBsYXRmb3JtM0RPYmplY3QpID0gMDsKKyAg
ICB2aXJ0dWFsIFN0cmluZyB0cmFuc2xhdGVTaGFkZXJBTkdMRShQbGF0Zm9ybTNET2JqZWN0KSA9
IDA7CiAKICAgICAvLyBHTF9DSFJPTUlVTV9jb3B5X3RleHR1cmUKICAgICB2aXJ0dWFsIHZvaWQg
Y29weVRleHR1cmVDSFJPTUlVTShHQzNEZW51bSwgUGxhdGZvcm0zRE9iamVjdCwgUGxhdGZvcm0z
RE9iamVjdCwgR0MzRGludCwgR0MzRGVudW0pID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCmluZGV4IDUzMjdmM2FlMjVh
YzBiYjZlODdmMzE3NGNmMWI4YjFiZGM5MDM5ODAuLjQxZmMwNzMzNzc2OGI2ZjgzMGNhYTBhNGZl
NWJjOWNmMTc0YTQxNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dDNELmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaApAQCAtOTY0LDE2ICs5NjQsNTEgQEAgcHVibGljOgog
I2VuZGlmCiAKICNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0o
UVQpIHx8IFBMQVRGT1JNKEVGTCkgfHwgUExBVEZPUk0oQkxBQ0tCRVJSWSkKKyAgICBzdHJ1Y3Qg
VmFyaWFibGVJbmZvIHsKKyAgICAgICAgVmFyaWFibGVJbmZvKCkKKyAgICAgICAgICAgIDogdHlw
ZSgwKQorICAgICAgICAgICAgLCBzaXplKDApCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAg
ICAgIFZhcmlhYmxlSW5mbyhHQzNEZW51bSB0eXBlLCBpbnQgc2l6ZSwgU3RyaW5nJiBtYXBwZWRO
YW1lKQorICAgICAgICAgICAgOiB0eXBlKHR5cGUpCisgICAgICAgICAgICAsIHNpemUoc2l6ZSkK
KyAgICAgICAgICAgICwgbWFwcGVkTmFtZShtYXBwZWROYW1lKQorICAgICAgICB7CisgICAgICAg
IH0KKworICAgICAgICBib29sIG9wZXJhdG9yPT0oVmFyaWFibGVJbmZvJiBvdGhlcikgY29uc3QK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHR5cGUgPT0gb3RoZXIudHlwZSAmJiBzaXpl
ID09IG90aGVyLnNpemUgJiYgbWFwcGVkTmFtZSA9PSBvdGhlci5tYXBwZWROYW1lOworICAgICAg
ICB9CisKKyAgICAgICAgR0MzRGVudW0gdHlwZTsKKyAgICAgICAgaW50IHNpemU7CisgICAgICAg
IFN0cmluZyBtYXBwZWROYW1lOworICAgIH07CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5n
LCBWYXJpYWJsZUluZm8+IFNoYWRlclZhcmlhYmxlTWFwOworCiAgICAgc3RydWN0IFNoYWRlclNv
dXJjZUVudHJ5IHsKKyAgICAgICAgR0MzRGVudW0gdHlwZTsKICAgICAgICAgU3RyaW5nIHNvdXJj
ZTsKKyAgICAgICAgU3RyaW5nIHRyYW5zbGF0ZWRTb3VyY2U7CiAgICAgICAgIFN0cmluZyBsb2c7
CiAgICAgICAgIGJvb2wgaXNWYWxpZDsKKyAgICAgICAgU2hhZGVyVmFyaWFibGVNYXAgdW5pZm9y
bU1hcDsKKyAgICAgICAgU2hhZGVyVmFyaWFibGVNYXAgYXR0cmliTWFwOwogICAgICAgICBTaGFk
ZXJTb3VyY2VFbnRyeSgpCi0gICAgICAgICAgICA6IGlzVmFsaWQoMCkKKyAgICAgICAgICAgIDog
dHlwZShWRVJURVhfU0hBREVSKQorICAgICAgICAgICAgLCBpc1ZhbGlkKDApCiAgICAgICAgIHsK
ICAgICAgICAgfQogICAgIH07Ci0gICAgSGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0LCBTaGFkZXJT
b3VyY2VFbnRyeT4gbV9zaGFkZXJTb3VyY2VNYXA7CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8UGxh
dGZvcm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+IFNoYWRlclNvdXJjZU1hcDsKKyAgICBT
aGFkZXJTb3VyY2VNYXAgbV9zaGFkZXJTb3VyY2VNYXA7CisKKyAgICBTdHJpbmcgZ2V0TWFwcGVk
VmFyaWFibGVOYW1lKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgU2hTaGFkZXJJbmZvIHZhcmlh
YmxlVHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lKTsKIAogICAgIEFOR0xFV2ViS2l0QnJpZGdlIG1f
Y29tcGlsZXI7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0V4dGVuc2lvbnMzRENocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9FeHRlbnNpb25zM0RDaHJvbWl1bS5oCmluZGV4IDBh
ZTY1NTEyZmUwZDc1NTVlYWZhY2IyN2JlNzk3YjE0MDk4NjZhMDMuLjY4NTQwMWEyNTZiOWY2YWJm
OWE1ZGFjNmI5NGYzZDQ5OWFjMTkxNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0V4dGVuc2lvbnMzRENocm9taXVtLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRXh0ZW5zaW9uczNEQ2hyb21pdW0u
aApAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZVZlcnRl
eEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpOwogICAgIHZpcnR1YWwgR0MzRGJvb2xlYW4gaXNW
ZXJ0ZXhBcnJheU9FUyhQbGF0Zm9ybTNET2JqZWN0KTsKICAgICB2aXJ0dWFsIHZvaWQgYmluZFZl
cnRleEFycmF5T0VTKFBsYXRmb3JtM0RPYmplY3QpOwotICAgIHZpcnR1YWwgU3RyaW5nIGdldFRy
YW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRShQbGF0Zm9ybTNET2JqZWN0KTsKKyAgICB2aXJ0dWFs
IFN0cmluZyB0cmFuc2xhdGVTaGFkZXJBTkdMRShQbGF0Zm9ybTNET2JqZWN0KTsKIAogICAgIGVu
dW0gewogICAgICAgICAvLyBHTF9PRVNfRUdMX2ltYWdlX2V4dGVybmFsCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclZhbGlk
YXRlZFByb2dyYW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9DdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtLmNwcAppbmRleCA0MjExZTgyYjc4MWIxYTBh
Y2I1MjdmMzBkZjVjMDE0MzljNDUxODA5Li4zZWQwYTAwY2MyODlmMWM5YzlkNTA3MzZlMjJmNTMx
MDViOGZkNDc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0N1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3Jh
bS5jcHAKQEAgLTg1LDggKzg1LDkgQEAgQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbTo6Q3Vz
dG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbShDdXN0b21GaWx0ZXJHbG9iYWxDb24KICAgICAvLyBT
aGFkZXJzIHJlZmVyZW5jZWQgZnJvbSB0aGUgQ1NTIG1peCBmdW5jdGlvbiB1c2UgYSBkaWZmZXJl
bnQgdmFsaWRhdG9yIHRoYW4gcmVndWxhciBXZWJHTCBzaGFkZXJzLiBTZWUgQ3VzdG9tRmlsdGVy
R2xvYmFsQ29udGV4dC5oIGZvciBtb3JlIGRldGFpbHMuCiAgICAgQU5HTEVXZWJLaXRCcmlkZ2Uq
IHZhbGlkYXRvciA9IHByb2dyYW1JbmZvLm1peFNldHRpbmdzKCkuZW5hYmxlZCA/IG1fZ2xvYmFs
Q29udGV4dC0+bWl4U2hhZGVyVmFsaWRhdG9yKCkgOiBtX2dsb2JhbENvbnRleHQtPndlYmdsU2hh
ZGVyVmFsaWRhdG9yKCk7CiAgICAgU3RyaW5nIHZlcnRleFNoYWRlckxvZywgZnJhZ21lbnRTaGFk
ZXJMb2c7Ci0gICAgYm9vbCB2ZXJ0ZXhTaGFkZXJWYWxpZCA9IHZhbGlkYXRvci0+dmFsaWRhdGVT
aGFkZXJTb3VyY2Uob3JpZ2luYWxWZXJ0ZXhTaGFkZXIudXRmOCgpLmRhdGEoKSwgU0hBREVSX1RZ
UEVfVkVSVEVYLCBtX3ZhbGlkYXRlZFZlcnRleFNoYWRlciwgdmVydGV4U2hhZGVyTG9nLCBTSF9B
VFRSSUJVVEVTX1VOSUZPUk1TKTsKLSAgICBib29sIGZyYWdtZW50U2hhZGVyVmFsaWQgPSB2YWxp
ZGF0b3ItPnZhbGlkYXRlU2hhZGVyU291cmNlKG9yaWdpbmFsRnJhZ21lbnRTaGFkZXIudXRmOCgp
LmRhdGEoKSwgU0hBREVSX1RZUEVfRlJBR01FTlQsIG1fdmFsaWRhdGVkRnJhZ21lbnRTaGFkZXIs
IGZyYWdtZW50U2hhZGVyTG9nLCBTSF9BVFRSSUJVVEVTX1VOSUZPUk1TKTsKKyAgICBWZWN0b3I8
QU5HTEVTaGFkZXJTeW1ib2w+IHZhcmlhYmxlczsKKyAgICBib29sIHZlcnRleFNoYWRlclZhbGlk
ID0gdmFsaWRhdG9yLT5jb21waWxlU2hhZGVyU291cmNlKG9yaWdpbmFsVmVydGV4U2hhZGVyLnV0
ZjgoKS5kYXRhKCksIFNIQURFUl9UWVBFX1ZFUlRFWCwgbV92YWxpZGF0ZWRWZXJ0ZXhTaGFkZXIs
IHZlcnRleFNoYWRlckxvZywgdmFyaWFibGVzKTsKKyAgICBib29sIGZyYWdtZW50U2hhZGVyVmFs
aWQgPSB2YWxpZGF0b3ItPmNvbXBpbGVTaGFkZXJTb3VyY2Uob3JpZ2luYWxGcmFnbWVudFNoYWRl
ci51dGY4KCkuZGF0YSgpLCBTSEFERVJfVFlQRV9GUkFHTUVOVCwgbV92YWxpZGF0ZWRGcmFnbWVu
dFNoYWRlciwgZnJhZ21lbnRTaGFkZXJMb2csIHZhcmlhYmxlcyk7CiAgICAgaWYgKCF2ZXJ0ZXhT
aGFkZXJWYWxpZCB8fCAhZnJhZ21lbnRTaGFkZXJWYWxpZCkgewogICAgICAgICAvLyBGSVhNRTog
UmVwb3J0IHRoZSB2YWxpZGF0aW9uIGVycm9ycy4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0NDE2CkBAIC05NCwxMiArOTUsMTAgQEAgQ3VzdG9t
RmlsdGVyVmFsaWRhdGVkUHJvZ3JhbTo6Q3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbShDdXN0
b21GaWx0ZXJHbG9iYWxDb24KICAgICB9CiAKICAgICAvLyBWYWxpZGF0ZSB0aGUgYXV0aG9yJ3Mg
c2FtcGxlcnMuCi0gICAgVmVjdG9yPEFOR0xFU2hhZGVyU3ltYm9sPiB1bmlmb3JtczsKLSAgICBp
ZiAoIXZhbGlkYXRvci0+Z2V0VW5pZm9ybXMoU0hfVkVSVEVYX1NIQURFUiwgdW5pZm9ybXMpKQot
ICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0b3ItPmdldFVuaWZvcm1zKFNIX0ZSQUdN
RU5UX1NIQURFUiwgdW5pZm9ybXMpKQotICAgICAgICByZXR1cm47Ci0gICAgZm9yIChWZWN0b3I8
QU5HTEVTaGFkZXJTeW1ib2w+OjppdGVyYXRvciBpdCA9IHVuaWZvcm1zLmJlZ2luKCk7IGl0ICE9
IHVuaWZvcm1zLmVuZCgpOyArK2l0KSB7CisgICAgZm9yIChWZWN0b3I8QU5HTEVTaGFkZXJTeW1i
b2w+OjppdGVyYXRvciBpdCA9IHZhcmlhYmxlcy5iZWdpbigpOyBpdCAhPSB2YXJpYWJsZXMuZW5k
KCk7ICsraXQpIHsKKyAgICAgICAgLy8gV2UncmUgb25seSBjaGVja2luZyB1bmlmb3JtcworICAg
ICAgICBpZiAoaXQtPnN5bWJvbFR5cGUgIT0gU0hBREVSX1NZTUJPTF9UWVBFX1VOSUZPUk0pCisg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKGl0LT5pc1NhbXBsZXIoKSkgewogICAg
ICAgICAgICAgLy8gRklYTUU6IEZvciBub3csIHdlIHJlc3RyaWN0IHNoYWRlcnMgd2l0aCBhbnkg
c2FtcGxlciBkZWZpbmVkLgogICAgICAgICAgICAgLy8gV2hlbiB3ZSBpbXBsZW1lbnQgdGV4dHVy
ZSBwYXJhbWV0ZXJzLCB3ZSB3aWxsIGFsbG93IHNoYWRlcnMgd2hvc2Ugc2FtcGxlcnMgYXJlIGJv
dW5kIHRvIHZhbGlkIHRleHR1cmVzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9u
LmNwcAppbmRleCBjZjdmYTJmNDRiODAyYzZjZmMxYTE2MDgwOTU3YzFjMjkwMDY1ZDk2Li5mYzVl
OWFhZDljYzIzOGJlNzVmNzViNjA2OGQxOTA2YjBhZGQxMDZmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9u
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5z
aW9uczNET3BlbkdMQ29tbW9uLmNwcApAQCAtMTM0LDcgKzEzNCw3IEBAIGludCBFeHRlbnNpb25z
M0RPcGVuR0xDb21tb246OmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKQogICAgIHJldHVybiBH
cmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1I7CiB9CiAKLVN0cmluZyBFeHRlbnNpb25zM0RPcGVu
R0xDb21tb246OmdldFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2VBTkdMRShQbGF0Zm9ybTNET2JqZWN0
IHNoYWRlcikKK1N0cmluZyBFeHRlbnNpb25zM0RPcGVuR0xDb21tb246OnRyYW5zbGF0ZVNoYWRl
ckFOR0xFKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQogewogICAgIEFTU0VSVChzaGFkZXIpOwog
ICAgIGludCBHTHNoYWRlclR5cGU7CkBAIC0xNjUsMTEgKzE2NSwyNiBAQCBTdHJpbmcgRXh0ZW5z
aW9uczNET3BlbkdMQ29tbW9uOjpnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoUGxhdGZv
cm0zRE9iamVjdAogICAgIGlmIChtX3JlcXVpcmVzQnVpbHRJbkZ1bmN0aW9uRW11bGF0aW9uKQog
ICAgICAgICBleHRyYUNvbXBpbGVPcHRpb25zIHw9IFNIX0VNVUxBVEVfQlVJTFRfSU5fRlVOQ1RJ
T05TOwogCi0gICAgYm9vbCBpc1ZhbGlkID0gY29tcGlsZXIudmFsaWRhdGVTaGFkZXJTb3VyY2Uo
ZW50cnkuc291cmNlLnV0ZjgoKS5kYXRhKCksIHNoYWRlclR5cGUsIHRyYW5zbGF0ZWRTaGFkZXJT
b3VyY2UsIHNoYWRlckluZm9Mb2csIGV4dHJhQ29tcGlsZU9wdGlvbnMpOworICAgIFZlY3RvcjxB
TkdMRVNoYWRlclN5bWJvbD4gdmFyaWFibGVzOworICAgIGJvb2wgaXNWYWxpZCA9IGNvbXBpbGVy
LmNvbXBpbGVTaGFkZXJTb3VyY2UoZW50cnkuc291cmNlLnV0ZjgoKS5kYXRhKCksIHNoYWRlclR5
cGUsIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UsIHNoYWRlckluZm9Mb2csIHZhcmlhYmxlcywgZXh0
cmFDb21waWxlT3B0aW9ucyk7CiAKICAgICBlbnRyeS5sb2cgPSBzaGFkZXJJbmZvTG9nOwogICAg
IGVudHJ5LmlzVmFsaWQgPSBpc1ZhbGlkOwogCisgICAgZm9yIChWZWN0b3I8QU5HTEVTaGFkZXJT
eW1ib2w+OjppdGVyYXRvciBpdCA9IHZhcmlhYmxlcy5iZWdpbigpOyBpdCAhPSB2YXJpYWJsZXMu
ZW5kKCk7ICsraXQpIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OlZhcmlhYmxlSW5mbyB2
YXJpYWJsZUluZm8oaXQtPmRhdGFUeXBlLCBpdC0+c2l6ZSwgaXQtPm1hcHBlZE5hbWUpOworICAg
ICAgICBzd2l0Y2ggKGl0LT5zeW1ib2xUeXBlKSB7CisgICAgICAgIGNhc2UgU0hBREVSX1NZTUJP
TF9UWVBFX0FUVFJJQlVURToKKyAgICAgICAgICAgIGVudHJ5LmF0dHJpYk1hcC5zZXQoaXQtPm5h
bWUsIHZhcmlhYmxlSW5mbyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTSEFE
RVJfU1lNQk9MX1RZUEVfVU5JRk9STToKKyAgICAgICAgICAgIGVudHJ5LnVuaWZvcm1NYXAuc2V0
KGl0LT5uYW1lLCB2YXJpYWJsZUluZm8pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAg
IH0KKwogICAgIGlmICghaXNWYWxpZCkKICAgICAgICAgcmV0dXJuICIiOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3Bl
bkdMQ29tbW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0
ZW5zaW9uczNET3BlbkdMQ29tbW9uLmgKaW5kZXggNzA5MmNmYWNhN2VmZThiZTFhODg3MTg4OTk0
MmU4YzMzODc4NDMzZC4uNDk1ZmQ5MDQzNjU3ODQ0MTJlOWU5YTkwZTE0ODhiNDMwZDJlYmVmMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVu
c2lvbnMzRE9wZW5HTENvbW1vbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uaApAQCAtNTAsNyArNTAsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBHQzNEYm9vbGVhbiBpc1ZlcnRleEFycmF5T0VTKFBsYXRmb3Jt
M0RPYmplY3QpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgYmluZFZlcnRleEFycmF5T0VTKFBsYXRm
b3JtM0RPYmplY3QpID0gMDsKIAotICAgIHZpcnR1YWwgU3RyaW5nIGdldFRyYW5zbGF0ZWRTaGFk
ZXJTb3VyY2VBTkdMRShQbGF0Zm9ybTNET2JqZWN0KTsKKyAgICB2aXJ0dWFsIFN0cmluZyB0cmFu
c2xhdGVTaGFkZXJBTkdMRShQbGF0Zm9ybTNET2JqZWN0KTsKIAogICAgIC8vIEVYVCBSb2J1c3Ru
ZXNzIC0gdXNlcyBnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkKICAgICB2aXJ0dWFsIHZvaWQg
cmVhZG5QaXhlbHNFWFQoaW50IHgsIGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBo
ZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgR0MzRHNpemVpIGJ1ZlNpemUs
IHZvaWQgKmRhdGEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1v
bi5jcHAKaW5kZXggOGEyYWM4MWU2NzYwMTMzOTJiNjY4YzY3YTBlYjVjY2VjOTczMmZlNi4uMWZl
Y2U5OThjMGM3OGZkYzQ1ODA0MzNlMzRmZjliZmRjNTlmMDliZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdM
Q29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCkBAIC00NDMsNyArNDQzLDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6Y29tcGlsZVNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHNoYWRl
cikKICAgICBBU1NFUlQoc2hhZGVyKTsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKIAotICAg
IFN0cmluZyB0cmFuc2xhdGVkU2hhZGVyU291cmNlID0gbV9leHRlbnNpb25zLT5nZXRUcmFuc2xh
dGVkU2hhZGVyU291cmNlQU5HTEUoc2hhZGVyKTsKKyAgICBTdHJpbmcgdHJhbnNsYXRlZFNoYWRl
clNvdXJjZSA9IG1fZXh0ZW5zaW9ucy0+dHJhbnNsYXRlU2hhZGVyQU5HTEUoc2hhZGVyKTsKIAog
ICAgIGlmICghdHJhbnNsYXRlZFNoYWRlclNvdXJjZS5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtNDY1LDcgKzQ2NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvbXBpbGVTaGFk
ZXIoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCiAgICAgOjpnbEdldFNoYWRlcml2KHNoYWRlciwg
R0xfSU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKIAogICAgIGlmIChsZW5ndGgpIHsKLSAgICAg
ICAgSGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0LCBHcmFwaGljc0NvbnRleHQzRDo6U2hhZGVyU291
cmNlRW50cnk+OjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRl
cik7CisgICAgICAgIFNoYWRlclNvdXJjZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJT
b3VyY2VNYXAuZmluZChzaGFkZXIpOwogICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6U2hhZGVy
U291cmNlRW50cnkmIGVudHJ5ID0gcmVzdWx0LT5zZWNvbmQ7CiAKICAgICAgICAgR0xzaXplaSBz
aXplID0gMDsKQEAgLTY3MSwxMyArNjcxLDUyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dEF0dGFjaGVkU2hhZGVycyhQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RzaXplaSBtCiAg
ICAgOjpnbEdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCBtYXhDb3VudCwgY291bnQsIHNoYWRl
cnMpOwogfQogCisjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShHVEspIHx8IFBMQVRGT1JN
KFFUKSB8fCBQTEFURk9STShFRkwpIHx8IFBMQVRGT1JNKEJMQUNLQkVSUlkpCitTdHJpbmcgR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldE1hcHBlZFZhcmlhYmxlTmFtZShQbGF0Zm9ybTNET2JqZWN0IHBy
b2dyYW0sIFNoU2hhZGVySW5mbyB2YXJpYWJsZVR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sK
KyAgICBTdHJpbmcgbWFwcGVkTmFtZSA9IFN0cmluZyhuYW1lKTsKKworICAgIEdDM0RzaXplaSBj
b3VudDsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcnNbMl07CisgICAgZ2V0QXR0YWNoZWRT
aGFkZXJzKHByb2dyYW0sIDIsICZjb3VudCwgc2hhZGVycyk7CisKKyAgICBmb3IgKEdDM0RzaXpl
aSBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgU2hhZGVyU291cmNlTWFwOjppdGVy
YXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcnNbaV0pOworICAgICAg
ICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQorICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgU2hhZGVyU291cmNlRW50cnkgZW50cnkgPSByZXN1bHQtPnNlY29u
ZDsKKyAgICAgICAgU2hhZGVyVmFyaWFibGVNYXA6Oml0ZXJhdG9yIHZhcmlhYmxlUmVzdWx0Owor
ICAgICAgICBpZiAodmFyaWFibGVUeXBlID09IFNIX0FDVElWRV9BVFRSSUJVVEVTKSB7CisgICAg
ICAgICAgICB2YXJpYWJsZVJlc3VsdCA9IGVudHJ5LmF0dHJpYk1hcC5maW5kKG5hbWUpOworICAg
ICAgICAgICAgaWYgKHZhcmlhYmxlUmVzdWx0ID09IGVudHJ5LmF0dHJpYk1hcC5lbmQoKSkKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZh
cmlhYmxlUmVzdWx0ID0gZW50cnkudW5pZm9ybU1hcC5maW5kKG5hbWUpOworICAgICAgICAgICAg
aWYgKHZhcmlhYmxlUmVzdWx0ID09IGVudHJ5LnVuaWZvcm1NYXAuZW5kKCkpCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBtYXBwZWROYW1lID0gdmFyaWFi
bGVSZXN1bHQtPnNlY29uZC5tYXBwZWROYW1lOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
cmV0dXJuIG1hcHBlZE5hbWU7Cit9CisjZW5kaWYKKwogaW50IEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYg
bmFtZSkKIHsKICAgICBpZiAoIXByb2dyYW0pCiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiA6OmdsR2V0QXR0cmliTG9jYXRpb24ocHJv
Z3JhbSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKKworICAgIC8vIFRoZSBhdHRyaWJ1dGUgbmFtZSBt
YXkgaGF2ZSBiZWVuIHRyYW5zbGF0ZWQgZHVyaW5nIEFOR0xFIGNvbXBpbGF0aW9uLgorICAgIC8v
IExvb2sgdGhyb3VnaCB0aGUgY29ycmVzcG9uZGluZyBTaGFkZXJTb3VyY2VNYXAgdG8gbWFrZSBz
dXJlIHdlCisgICAgLy8gcmVmZXJlbmNlIHRoZSBtYXBwZWQgbmFtZSByYXRoZXIgdGhhbiB0aGUg
ZXh0ZXJuYWwgbmFtZS4KKyAgICBTdHJpbmcgbWFwcGVkTmFtZSA9IGdldE1hcHBlZFZhcmlhYmxl
TmFtZShwcm9ncmFtLCBTSF9BQ1RJVkVfQVRUUklCVVRFUywgbmFtZSk7CisKKyAgICByZXR1cm4g
OjpnbEdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7
CiB9CiAKIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRDb250ZXh0QXR0cmlidXRlcygpCkBAIC0xMTI2LDcgKzExNjUsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRTaGFkZXJpdihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlciwgR0MzRGVudW0g
cG5hbWUsIEdDMwogCiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAKLSAgICBIYXNoTWFwPFBs
YXRmb3JtM0RPYmplY3QsIFNoYWRlclNvdXJjZUVudHJ5Pjo6aXRlcmF0b3IgcmVzdWx0ID0gbV9z
aGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOworICAgIFNoYWRlclNvdXJjZU1hcDo6aXRlcmF0
b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOwogICAgIAogICAgIHN3
aXRjaCAocG5hbWUpIHsKICAgICBjYXNlIERFTEVURV9TVEFUVVM6CkBAIC0xMTYxLDcgKzEyMDAs
NyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlckluZm9Mb2coUGxhdGZvcm0z
RE9iamVjdCBzaGFkZXIpCiAKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKIAotICAgIEhhc2hN
YXA8UGxhdGZvcm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+OjppdGVyYXRvciByZXN1bHQg
PSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAgU2hhZGVyU291cmNlTWFwOjpp
dGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CiAgICAgaWYg
KHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOyAKIApAQCAtMTE4Nyw3ICsxMjI2LDcgQEAgU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCiAKICAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKIAotICAgIEhhc2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgU2hhZGVyU291cmNl
RW50cnk+OjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7
CisgICAgU2hhZGVyU291cmNlTWFwOjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1h
cC5maW5kKHNoYWRlcik7CiAgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQo
KSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOyAKIApAQCAtMTIyNCw3ICsxMjYzLDEzIEBAIEdD
M0RpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1Mb2NhdGlvbihQbGF0Zm9ybTNET2Jq
ZWN0IHByb2dyYW0sIGNvbnN0IFN0CiAgICAgQVNTRVJUKHByb2dyYW0pOwogCiAgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIDo6Z2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3Jh
bSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKKworICAgIC8vIFRoZSB1bmlmb3JtIG5hbWUgbWF5IGhh
dmUgYmVlbiB0cmFuc2xhdGVkIGR1cmluZyBBTkdMRSBjb21waWxhdGlvbi4KKyAgICAvLyBMb29r
IHRocm91Z2ggdGhlIGNvcnJlc3BvbmRpbmcgU2hhZGVyU291cmNlTWFwIHRvIG1ha2Ugc3VyZSB3
ZQorICAgIC8vIHJlZmVyZW5jZSB0aGUgbWFwcGVkIG5hbWUgcmF0aGVyIHRoYW4gdGhlIGV4dGVy
bmFsIG5hbWUuCisgICAgU3RyaW5nIG1hcHBlZE5hbWUgPSBnZXRNYXBwZWRWYXJpYWJsZU5hbWUo
cHJvZ3JhbSwgU0hfQUNUSVZFX1VOSUZPUk1TLCBuYW1lKTsKKworICAgIHJldHVybiA6OmdsR2V0
VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYmZ2KEdDM0R1aW50IGluZGV4
LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSkKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA2NTgwODRhOWE5ZmQ3
NDQxYTcyMjUzZTJmODk2YjI3NGYxMDQ1NzhkLi5kZWE4MDQyMTM5NWE4YTY1MWIxYTQ3YmM5ZTc4
NDVlZjYzYTM5ZjllIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTItMTAtMDIgIERlYW4gSmFj
a3NvbiAgPGRpbm9AYXBwbGUuY29tPgorCisgICAgICAgIEF0dHJpYnV0ZSBhbmQgVW5pZm9ybSB2
YXJpYWJsZSBuYW1lcyBuZWVkIHRyYW5zbGF0aW9uIGluIHNoYWRlcgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA5ODkKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBzdWJ0ZXN0cyB0byBleGVyY2lz
ZSB2YXJpYWJsZXMgdGhhdCBhcmUgd2VsbCB1bmRlciB0aGUgbGltaXRzIGJ1dAorICAgICAgICBu
b3QgbG9uZyBlbm91Z2ggdG8gcHJvZHVjZSBhbiBlcnJvci4gVGhpcyB3YXkgd2Ugbm93IHRlc3Qg
YWxsIHRocmVlIG9wdGlvbnM6CisgICAgICAgIHVuZGVyIHRoZSBsaW1pdCwgYXQgdGhlIGxpbWl0
LCBvdmVyIHRoZSBsaW1pdC4KKworICAgICAgICBBbHNvLCB0aGUgdGVzdHMgYXJlIHVuc2tpcHBl
ZCBvbiBNYWMuCisKKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9hdHRyaWItbG9jYXRpb24t
bGVuZ3RoLWxpbWl0cy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wv
YXR0cmliLWxvY2F0aW9uLWxlbmd0aC1saW1pdHMuaHRtbDoKKyAgICAgICAgKiBmYXN0L2NhbnZh
cy93ZWJnbC91bmlmb3JtLWxvY2F0aW9uLWxlbmd0aC1saW1pdHMtZXhwZWN0ZWQudHh0OgorICAg
ICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL3VuaWZvcm0tbG9jYXRpb24tbGVuZ3RoLWxpbWl0cy5o
dG1sOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25zOgorCiAyMDEyLTEw
LTAyICBPamFuIFZhZmFpICA8b2phbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVGVzdCByZWJh
c2VsaW5lcyBub3cgdGhhdCB0aGUgQ2hyb21pdW0gTGlvbiBib3QgaGFzIGJlZW4gdXBncmFkZWQg
dG8gMTAuNy41LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvYXR0
cmliLWxvY2F0aW9uLWxlbmd0aC1saW1pdHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFz
dC9jYW52YXMvd2ViZ2wvYXR0cmliLWxvY2F0aW9uLWxlbmd0aC1saW1pdHMtZXhwZWN0ZWQudHh0
CmluZGV4IGMyMjg5MTZjYWQyZjIxNzAwNWRmNzEzN2QyNTFjYjIxMjhjOTgwMzQuLmIzNDUwZTQz
YzU1OGUxY2NhNzE0ODUzMDdkMmYxMDYyMWZhYTgzMzAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L2Zhc3QvY2FudmFzL3dlYmdsL2F0dHJpYi1sb2NhdGlvbi1sZW5ndGgtbGltaXRzLWV4cGVjdGVk
LnR4dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9hdHRyaWItbG9jYXRpb24t
bGVuZ3RoLWxpbWl0cy1leHBlY3RlZC50eHQKQEAgLTMsNiArMywxMCBAQCBUZXN0IGF0dHJpYiBs
b2NhdGlvbiB1bmRlcm5lYXRoIHRoZSBsZW5ndGggbGltaXQKIFBBU1MgZ2wuZ2V0UHJvZ3JhbVBh
cmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUykgaXMgdHJ1ZQogUEFTUyBhdHRyaWIgbG9j
YXRpb24gc2hvdWxkIG5vdCBiZSAtMQogUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6
IE5PX0VSUk9SIDogCitUZXN0IGF0dHJpYiBsb2NhdGlvbiBleGFjdGx5IGF0IHRoZSBsZW5ndGgg
bGltaXQKK1BBU1MgZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRV
UykgaXMgdHJ1ZQorUEFTUyBhdHRyaWIgbG9jYXRpb24gc2hvdWxkIG5vdCBiZSAtMQorUEFTUyBn
ZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCiBUZXN0IGF0dHJpYiBsb2Nh
dGlvbiBvdmVyIHRoZSBsZW5ndGggbGltaXQKIFNoYWRlciBjb21waWxhdGlvbiBzaG91bGQgZmFp
bAogUEFTUyB3dHUubG9hZFNoYWRlckZyb21TY3JpcHQoZ2wsICJiYWRWZXJ0ZXhTaGFkZXIiLCBn
bC5WRVJURVhfU0hBREVSLCBmdW5jdGlvbiAoZXJyKSB7fSkgaXMgbnVsbApkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvYXR0cmliLWxvY2F0aW9uLWxlbmd0aC1saW1p
dHMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2F0dHJpYi1sb2NhdGlvbi1s
ZW5ndGgtbGltaXRzLmh0bWwKaW5kZXggZjQ0NDgzNmU3ODhiNWFlMzdlMTFlZmYxOTQ1NDlhMGIy
NDg3OGIyYy4uNzQ3OGQ3Y2JkNTU5OWYwMjcwOGM0YTE4NDQyMWU4ZmZlMzE5NGMxNiAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvYXR0cmliLWxvY2F0aW9uLWxlbmd0
aC1saW1pdHMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9hdHRyaWIt
bG9jYXRpb24tbGVuZ3RoLWxpbWl0cy5odG1sCkBAIC0xMyw3ICsxMywxNiBAQCBUaGVyZSBpcyBz
dXBwb3NlZCB0byBiZSBhbiBleGFtcGxlIGRyYXdpbmcgaGVyZSwgYnV0IGl0J3Mgbm90IGltcG9y
dGFudC4KIDwvY2FudmFzPgogPGRpdiBpZD0iZGVzY3JpcHRpb24iPlZlcmlmeSBsaW1pdHMgb24g
dGhlIGxlbmd0aHMgb2YgYXR0cmliIGxvY2F0aW9ucy48L2Rpdj4KIDxkaXYgaWQ9ImNvbnNvbGUi
PjwvZGl2PgotPHNjcmlwdCBpZD0iZ29vZFZlcnRleFNoYWRlciIgdHlwZT0ieC1zaGFkZXIveC12
ZXJ0ZXgiPgorPHNjcmlwdCBpZD0iZ29vZFZlcnRleFNoYWRlcjEiIHR5cGU9Ingtc2hhZGVyL3gt
dmVydGV4Ij4KKy8vIEEgdmVydGV4IHNoYWRlciB3aGVyZSB0aGUgbmVlZGVkIGF0dHJpYiBsb2Nh
dGlvbiBpcyBsb25nLCBidXQgbm90IG92ZXIgdGhlIGxpbWl0LgorYXR0cmlidXRlIHZlYzQgdlBv
c2l0aW9uMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkw
MTIzNDU2Nzg5MDEyMzQ1Njc4OTA7CisKK3ZvaWQgbWFpbigpCit7CisgICAgZ2xfUG9zaXRpb24g
PSB2UG9zaXRpb24wMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1
Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDsKK30KKzwvc2NyaXB0PgorPHNjcmlwdCBpZD0iZ29v
ZFZlcnRleFNoYWRlcjIiIHR5cGU9Ingtc2hhZGVyL3gtdmVydGV4Ij4KIC8vIEEgdmVydGV4IHNo
YWRlciB3aGVyZSB0aGUgbmVlZGVkIGF0dHJpYiBsb2NhdGlvbiBpcyBleGFjdGx5IDI1NiBjaGFy
YWN0ZXJzLgogYXR0cmlidXRlIHZlYzQgdlBvc2l0aW9uMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIz
NDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkw
MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3
ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0
NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1NjsKIApA
QCAtNDcsNyArNTYsMTggQEAgdmFyIHd0dSA9IFdlYkdMVGVzdFV0aWxzOwogdmFyIGdsID0gd3R1
LmNyZWF0ZTNEQ29udGV4dChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZXhhbXBsZSIpKTsKIAog
ZGVidWcoIlRlc3QgYXR0cmliIGxvY2F0aW9uIHVuZGVybmVhdGggdGhlIGxlbmd0aCBsaW1pdCIp
OwotdmFyIHByb2dyYW0gPSB3dHUubG9hZFByb2dyYW1Gcm9tU2NyaXB0KGdsLCAiZ29vZFZlcnRl
eFNoYWRlciIsICJmcmFnbWVudFNoYWRlciIpOwordmFyIHByb2dyYW0gPSB3dHUubG9hZFByb2dy
YW1Gcm9tU2NyaXB0KGdsLCAiZ29vZFZlcnRleFNoYWRlcjEiLCAiZnJhZ21lbnRTaGFkZXIiKTsK
K3Nob3VsZEJlKCdnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJTktfU1RBVFVT
KScsICd0cnVlJyk7Cit2YXIgYXR0cmliTG9jID0gZ2wuZ2V0QXR0cmliTG9jYXRpb24ocHJvZ3Jh
bSwgInZQb3NpdGlvbjAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIz
NDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwIik7CitpZiAoYXR0cmliTG9jID09IC0xKSB7Cisg
ICAgdGVzdEZhaWxlZCgiYXR0cmliIGxvY2F0aW9uIHdhcyAtMSwgc2hvdWxkIG5vdCBiZSIpOwor
fSBlbHNlIHsKKyAgICB0ZXN0UGFzc2VkKCJhdHRyaWIgbG9jYXRpb24gc2hvdWxkIG5vdCBiZSAt
MSIpOworfQord3R1LmdsRXJyb3JTaG91bGRCZShnbCwgZ2wuTk9ORSk7CisKK2RlYnVnKCJUZXN0
IGF0dHJpYiBsb2NhdGlvbiBleGFjdGx5IGF0IHRoZSBsZW5ndGggbGltaXQiKTsKK3ZhciBwcm9n
cmFtID0gd3R1LmxvYWRQcm9ncmFtRnJvbVNjcmlwdChnbCwgImdvb2RWZXJ0ZXhTaGFkZXIyIiwg
ImZyYWdtZW50U2hhZGVyIik7CiBzaG91bGRCZSgnZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9n
cmFtLCBnbC5MSU5LX1NUQVRVUyknLCAndHJ1ZScpOwogdmFyIGF0dHJpYkxvYyA9IGdsLmdldEF0
dHJpYkxvY2F0aW9uKHByb2dyYW0sICJ2UG9zaXRpb24wMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0
NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAx
MjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4
OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1
Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Iik7CiBp
ZiAoYXR0cmliTG9jID09IC0xKSB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2NhbnZh
cy93ZWJnbC91bmlmb3JtLWxvY2F0aW9uLWxlbmd0aC1saW1pdHMtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdW5pZm9ybS1sb2NhdGlvbi1sZW5ndGgtbGltaXRz
LWV4cGVjdGVkLnR4dAppbmRleCA5ZTA5OGVkZjBiMzg1NzUzYTUyYTQ0YmFkNmU4ZjM4OWM5MTZl
YzcxLi41ZWQ3YmVkMzViZTZmY2Q3ZDgyZTZlY2MyZWRmZTc4YTQwMjcwZTk1IDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC91bmlmb3JtLWxvY2F0aW9uLWxlbmd0aC1s
aW1pdHMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Vu
aWZvcm0tbG9jYXRpb24tbGVuZ3RoLWxpbWl0cy1leHBlY3RlZC50eHQKQEAgLTMsNiArMywxMCBA
QCBUZXN0IHVuaWZvcm0gbG9jYXRpb24gdW5kZXJuZWF0aCB0aGUgbGVuZ3RoIGxpbWl0CiBQQVNT
IGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuTElOS19TVEFUVVMpIGlzIHRydWUK
IFBBU1MgdW5pZm9ybUxvYyBpcyBub24tbnVsbC4KIFBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVk
IHZhbHVlOiBOT19FUlJPUiA6IAorVGVzdCB1bmlmb3JtIGxvY2F0aW9uIGV4YWN0bHkgYXQgdGhl
IGxlbmd0aCBsaW1pdAorUEFTUyBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJ
TktfU1RBVFVTKSBpcyB0cnVlCitQQVNTIHVuaWZvcm1Mb2MgaXMgbm9uLW51bGwuCitQQVNTIGdl
dEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKIFRlc3QgdW5pZm9ybSBsb2Nh
dGlvbiBvdmVyIHRoZSBsZW5ndGggbGltaXQKIFBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZh
bHVlOiBOT19FUlJPUiA6IAogUEFTUyBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGds
LkxJTktfU1RBVFVTKSBpcyB0cnVlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2NhbnZh
cy93ZWJnbC91bmlmb3JtLWxvY2F0aW9uLWxlbmd0aC1saW1pdHMuaHRtbCBiL0xheW91dFRlc3Rz
L2Zhc3QvY2FudmFzL3dlYmdsL3VuaWZvcm0tbG9jYXRpb24tbGVuZ3RoLWxpbWl0cy5odG1sCmlu
ZGV4IDAwMGQ0OGM1ODljYjE4OThhNDBiZmJmZTAwZjhjMGZiZWExY2JjNmEuLjQ1ZGRmOTM5Mzli
ZjA1NTU5NjgxZTJlMTlkZTNiZjIzYjIxNjNkYmMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zh
c3QvY2FudmFzL3dlYmdsL3VuaWZvcm0tbG9jYXRpb24tbGVuZ3RoLWxpbWl0cy5odG1sCisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3VuaWZvcm0tbG9jYXRpb24tbGVuZ3RoLWxp
bWl0cy5odG1sCkBAIC0xMyw3ICsxMywyMyBAQCBUaGVyZSBpcyBzdXBwb3NlZCB0byBiZSBhbiBl
eGFtcGxlIGRyYXdpbmcgaGVyZSwgYnV0IGl0J3Mgbm90IGltcG9ydGFudC4KIDwvY2FudmFzPgog
PGRpdiBpZD0iZGVzY3JpcHRpb24iPlZlcmlmeSBsaW1pdHMgb24gdGhlIGxlbmd0aHMgb2YgdW5p
Zm9ybSBsb2NhdGlvbnMuPC9kaXY+CiA8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KLTxzY3JpcHQg
aWQ9Imdvb2RWZXJ0ZXhTaGFkZXIiIHR5cGU9Ingtc2hhZGVyL3gtdmVydGV4Ij4KKzxzY3JpcHQg
aWQ9Imdvb2RWZXJ0ZXhTaGFkZXIxIiB0eXBlPSJ4LXNoYWRlci94LXZlcnRleCI+CisvLyBBIHZl
cnRleCBzaGFkZXIgd2hlcmUgdGhlIHVuaWZvcm0gbmFtZSBpcyBsb25nLCBidXQgd2VsbCBiZWxv
dyB0aGUgbGltaXQuCitzdHJ1Y3QgTmVzdGluZzIgeworICAgIHZlYzQgaWRlbnRpZmllcjYyQ2hh
cmFjdGVyc0xvbmdfMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ7Cit9OworCitz
dHJ1Y3QgTmVzdGluZzEgeworICAgIE5lc3RpbmcyIGlkZW50aWZpZXI2NENoYXJhY3RlcnNMb25n
XzAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY7Cit9OworCit1bmlmb3JtIE5l
c3RpbmcxIGlkZW50aWZpZXI3MENoYXJhY3RlcnNMb25nXzAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEy
MzQ1Njc4OTAxMjM0NTY3ODkwOworCit2b2lkIG1haW4oKSB7CisgICAgZ2xfUG9zaXRpb24gPSBp
ZGVudGlmaWVyNzBDaGFyYWN0ZXJzTG9uZ18wMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkw
MTIzNDU2Nzg5MC5pZGVudGlmaWVyNjRDaGFyYWN0ZXJzTG9uZ18wMTIzNDU2Nzg5MDEyMzQ1Njc4
OTAxMjM0NTY3ODkwMTIzNDU2LmlkZW50aWZpZXI2MkNoYXJhY3RlcnNMb25nXzAxMjM0NTY3ODkw
MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0OworfQorPC9zY3JpcHQ+Cis8c2NyaXB0IGlkPSJnb29k
VmVydGV4U2hhZGVyMiIgdHlwZT0ieC1zaGFkZXIveC12ZXJ0ZXgiPgogLy8gQSB2ZXJ0ZXggc2hh
ZGVyIHdoZXJlIHRoZSBuZWVkZWQgdW5pZm9ybSBsb2NhdGlvbiBpcyBleGFjdGx5IDI1NiBjaGFy
YWN0ZXJzLgogc3RydWN0IE5lc3RpbmcyIHsKICAgICB2ZWM0IGlkZW50aWZpZXI2MkNoYXJhY3Rl
cnNMb25nXzAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0OwpAQCAtNjIsNyArNzgs
MTQgQEAgdmFyIHd0dSA9IFdlYkdMVGVzdFV0aWxzOwogdmFyIGdsID0gd3R1LmNyZWF0ZTNEQ29u
dGV4dChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZXhhbXBsZSIpKTsKIAogZGVidWcoIlRlc3Qg
dW5pZm9ybSBsb2NhdGlvbiB1bmRlcm5lYXRoIHRoZSBsZW5ndGggbGltaXQiKTsKLXZhciBwcm9n
cmFtID0gd3R1LmxvYWRQcm9ncmFtRnJvbVNjcmlwdChnbCwgImdvb2RWZXJ0ZXhTaGFkZXIiLCAi
ZnJhZ21lbnRTaGFkZXIiKTsKK3ZhciBwcm9ncmFtID0gd3R1LmxvYWRQcm9ncmFtRnJvbVNjcmlw
dChnbCwgImdvb2RWZXJ0ZXhTaGFkZXIxIiwgImZyYWdtZW50U2hhZGVyIik7CitzaG91bGRCZSgn
Z2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUyknLCAndHJ1ZScp
OwordmFyIHVuaWZvcm1Mb2MgPSBnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgImlkZW50
aWZpZXI3MENoYXJhY3RlcnNMb25nXzAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0
NTY3ODkwLmlkZW50aWZpZXI2NENoYXJhY3RlcnNMb25nXzAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEy
MzQ1Njc4OTAxMjM0NTYuaWRlbnRpZmllcjYyQ2hhcmFjdGVyc0xvbmdfMDEyMzQ1Njc4OTAxMjM0
NTY3ODkwMTIzNDU2Nzg5MDEyMzQiKTsKK3Nob3VsZEJlTm9uTnVsbCgndW5pZm9ybUxvYycpOwor
d3R1LmdsRXJyb3JTaG91bGRCZShnbCwgZ2wuTk9ORSk7CisKK2RlYnVnKCJUZXN0IHVuaWZvcm0g
bG9jYXRpb24gZXhhY3RseSBhdCB0aGUgbGVuZ3RoIGxpbWl0Iik7Cit2YXIgcHJvZ3JhbSA9IHd0
dS5sb2FkUHJvZ3JhbUZyb21TY3JpcHQoZ2wsICJnb29kVmVydGV4U2hhZGVyMiIsICJmcmFnbWVu
dFNoYWRlciIpOwogc2hvdWxkQmUoJ2dsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wu
TElOS19TVEFUVVMpJywgJ3RydWUnKTsKIHZhciB1bmlmb3JtTG9jID0gZ2wuZ2V0VW5pZm9ybUxv
Y2F0aW9uKHByb2dyYW0sICJpZGVudGlmaWVyMTI4Q2hhcmFjdGVyc0xvbmdfMDEyMzQ1Njc4OTAx
MjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4
OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OS5pZGVudGlmaWVyNjRDaGFyYWN0ZXJzTG9u
Z18wMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2LmlkZW50aWZpZXI2MkNoYXJh
Y3RlcnNMb25nXzAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0Iik7CiBzaG91bGRC
ZU5vbk51bGwoJ3VuaWZvcm1Mb2MnKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3Jt
L21hYy9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBl
Y3RhdGlvbnMKaW5kZXggYWZjOWEyNmE1MmNhYTVmYmNkZjMxMDI5NzAxNWFhNzdhZTk0NzJjMS4u
NzE2NjZkYTZmY2U3ZmYyMzMwMTE4NWNkZDE4ZDNjNDk2YWRjMTFjMiAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTQ3OSwxMCArNDc5LDYgQEAgZmFzdC9l
dmVudHMvcGxhdGZvcm0td2hlZWxldmVudC1wYWdpbmcteS1pbi1ub24tc2Nyb2xsaW5nLXBhZ2Uu
aHRtbAogZmFzdC9ldmVudHMvcGxhdGZvcm0td2hlZWxldmVudC1wYWdpbmcteS1pbi1zY3JvbGxp
bmctZGl2Lmh0bWwKIGZhc3QvZXZlbnRzL3BsYXRmb3JtLXdoZWVsZXZlbnQtcGFnaW5nLXktaW4t
c2Nyb2xsaW5nLXBhZ2UuaHRtbAogCi0jIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD03MDk4OQotZmFzdC9jYW52YXMvd2ViZ2wvYXR0cmliLWxvY2F0aW9uLWxlbmd0aC1s
aW1pdHMuaHRtbAotZmFzdC9jYW52YXMvd2ViZ2wvdW5pZm9ybS1sb2NhdGlvbi1sZW5ndGgtbGlt
aXRzLmh0bWwKLQogIyBXZWIgSW50ZW50cyBpcyBub3QgeWV0IGVuYWJsZWQuCiB3ZWJpbnRlbnRz
LwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>166789</attachid>
            <date>2012-10-02 18:11:24 -0700</date>
            <delta_ts>2012-10-03 17:58:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70989-20121003111036.patch</filename>
            <type>text/plain</type>
            <size>31482</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMwMjM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWE5NzQ3ZDdjY2NiNmM0
ZDUxOWJmMTkxMTBjNmM5OGNmZDQxNTE0MS4uNDk3ZmYyNmJmMTUxZWMzOWQ3NjM5ODU2MGJkODg4
OGYzYTRjNjE4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDcwIEBACiAyMDEyLTEwLTAyICBEZWFu
IEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAorICAgICAgICBBdHRyaWJ1dGUgYW5kIFVuaWZv
cm0gdmFyaWFibGUgbmFtZXMgbmVlZCB0cmFuc2xhdGlvbiBpbiBzaGFkZXIKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwOTg5CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViR0wgc3BlY2lmaWVzIHNvbWUg
bWF4aW11bSBsZW5ndGhzIGZvciB2YXJpYWJsZSBuYW1lcyAoYXR0cmlidXRlcworICAgICAgICBh
bmQgdW5pZm9ybXMpLiBBbHNvLCBzb21lIEdMIGRyaXZlcnMgaGF2ZSBpc3N1ZXMgd2l0aCBsb25n
IG5hbWVzLiBGb3IKKyAgICAgICAgdGhhdCByZWFzb24sIEFOR0xFIGhhcyBhbiBvcHRpb24gdG8g
cmV3cml0ZSB0aGUgc2hhZGVyLCB0cmFuc2xhdGluZworICAgICAgICBsb25nIG5hbWVzIGludG8g
c2hvcnQgbmFtZXMuIFR1cm5pbmcgdGhpcyBvbiBoZWxwcyBzaGFkZXJzIGNvbXBpbGUsCisgICAg
ICAgIGJ1dCB3ZSBuZWVkIHRvIGtlZXAgYSBtYXBwaW5nIGJldHdlZW4gdGhlIG9yaWdpbmFsIG5h
bWVzIGFuZCB0aGUKKyAgICAgICAgdHJhbnNsYXRlZCBuYW1lcywgc28gdGhhdCB3ZSBiaW5kIHRv
IHRoZSByaWdodCBsb2NhdGlvbiBmcm9tIHVzZXIgY29kZQorICAgICAgICAod2hpY2ggd29uJ3Qg
ZXZlciBzZWUgdGhlIHRyYW5zbGF0ZWQgc291cmNlKS4KKworICAgICAgICBUaGlzIHByb3ZpZGVk
IGFuIG9wcG9ydHVuaXR5IHRvIGNsZWFuIHVwIHNvbWUgb3RoZXIgYml0cyBvZiBjb2RlOgorICAg
ICAgICBDU1MgRmlsdGVycyBleGFtaW5lZCB0aGUgdW5pZm9ybSBuYW1lcyBhZnRlciBhIGNvbXBp
bGF0aW9uOyBJdCBjYW4KKyAgICAgICAgbm93IHVzZSB0aGUgdmFyaWFibGUgbmFtZSBtYXAuIEkg
YWxzbyBhZGRlZCBhIHR5cGVkZWYgZm9yIHRoZQorICAgICAgICBIYXNoTWFwcyB0aGF0IGtlZXAg
dGhlIHNoYWRlciwgdGhlIHNvdXJjZSBjb2RlIGFuZCB0aGUgdmFyaWFibGUgbmFtZQorICAgICAg
ICBtYXBwaW5ncy4KKworICAgICAgICBJIGFsc28gb3BlbmVkIGEgZm9sbG93dXAgYnVnIHRvIG1h
a2Ugc3VyZSB0aGVzZSB0YWJsZXMgYXJlIGRlbGV0ZWQKKyAgICAgICAgd2hlbiB0aGUgYXNzb2Np
YXRlZCBzaGFkZXJzIChvciBsaW5rZWQgcHJvZ3JhbXMpIGdvIGF3YXk6CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05ODIwNAorCisgICAgICAgIENvdmVy
ZWQgYnkgZXhpc3RpbmcgdGVzdHMgKHdpdGggc29tZSBlbmhhbmNlbWVudHMpOgorICAgICAgICAt
IGZhc3QvY2FudmFzL3dlYmdsL2F0dHJpYi1sb2NhdGlvbi1sZW5ndGgtbGltaXRzLmh0bWw6Cisg
ICAgICAgIC0gZmFzdC9jYW52YXMvd2ViZ2wvdW5pZm9ybS1sb2NhdGlvbi1sZW5ndGgtbGltaXRz
Lmh0bWw6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktpdEJyaWRnZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRWYXJpYWJsZUluZm8pOiBFeHRyYWN0cyBhbGwgdGhl
IGluZm9ybWF0aW9uIG9uIHZhcmlhYmxlcyAoZWl0aGVyIGF0dHJpYnV0ZXMKKyAgICAgICAgb3Ig
dW5pZm9ybXMpIGZyb20gdGhlIG5ld2x5IGNvbXBpbGVkIHNoYWRlci4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6QU5HTEVXZWJLaXRCcmlkZ2U6OmNvbXBpbGVTaGFkZXJT
b3VyY2UpOiBOZXcgbWV0aG9kIG5hbWUuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQU5H
TEVXZWJLaXRCcmlkZ2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OmdldFVuaWZvcm1zKTogRGVsZXRl
ZCB0aGlzIG1ldGhvZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbXBpbGVTaGFkZXJTb3VyY2UpOiBO
ZXcgbWV0aG9kIG5hbWUuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0M0QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpWYXJpYWJsZUlu
Zm86OlZhcmlhYmxlSW5mbyk6IEEgbmV3IG9iamVjdCB0aGF0CisgICAgICAgIGhvbGRzIHRoZSBz
aXplLCB0eXBlIGFuZCB0cmFuc2xhdGVkIG5hbWUgb2YgYSB2YXJpYWJsZSBmcm9tIGEgV2ViR0wg
c2hhZGVyLgorICAgICAgICAoR3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoU2hhZGVyU291
cmNlRW50cnkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OlNoYWRlclNv
dXJjZUVudHJ5OjpTaGFkZXJTb3VyY2VFbnRyeSk6IEVuaGFuY2UKKyAgICAgICAgdGhpcyBzdHJ1
Y3R1cmUgdG8ga2VlcCB0cmFjayBvZiBhIGZldyBtb3JlIHRoaW5ncyAtIHRoZSB0cmFuc2xhdGVk
IHNvdXJjZSBjb2RlCisgICAgICAgIGFuZCB0cmFuc2xhdGlvbiBtYXBzIGZvciB0aGUgb3JpZ2lu
YWwgdW5pZm9ybSBhbmQgYXR0cmlidXRlIG5hbWVzLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtOjpDdXN0b21GaWx0ZXJWYWxpZGF0
ZWRQcm9ncmFtKTogVGhpcyBjYW4KKyAgICAgICAgbm93IHVzZSB0aGUgbGlzdCBvZiBzaGFkZXIg
c3ltYm9scyB0aGF0IGFyZSBleHBvcnRlZCBieSBjb21waWxlU2hhZGVyU291cmNlIHJhdGhlcgor
ICAgICAgICB0aGFuIGhhdmUgY29kZSB0byBjaGVjayB1bmlmb3JtIG5hbWVzIGRpcmVjdGx5Lgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21t
b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uOjpnZXRU
cmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUpOiBGaWxsIHRoZSB0cmFuc2xhdGlvbiBtYXBzCisg
ICAgICAgIHdpdGggdGhlIGluZm9ybWF0aW9uIGNvbWluZyBvdXQgb2YgQU5HTEUuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5oOgor
ICAgICAgICAoRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNvbXBpbGVTaGFkZXIpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0TWFwcGVk
VmFyaWFibGVOYW1lKTogSGVscGVyIGZ1bmN0aW9uIHRvIGNoYW5nZSBhbgorICAgICAgICBleHRl
cm5hbC9vcmlnaW5hbCBuYW1lIHRvIHRoZSB2ZXJzaW9uIHRoYXQgdGhlIHRyYW5zbGF0ZWQgc2hh
ZGVyIHVzZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0cmli
TG9jYXRpb24pOiBNYWtlIHN1cmUgdG8gbG9vayBmb3IgYSB0cmFuc2xhdGVkIG5hbWUuCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyaXYpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlckluZm9Mb2cpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlclNvdXJjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybUxvY2F0aW9uKTogTWFrZSBzdXJl
IHRvIGxvb2sgZm9yIGEgdHJhbnNsYXRlZCBuYW1lLgorCisyMDEyLTEwLTAyICBEZWFuIEphY2tz
b24gIDxkaW5vQGFwcGxlLmNvbT4KKwogICAgICAgICBFeHBvc2Ugc29tZSBHUFUgSW5mb3JtYXRp
b24KICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk3ODEz
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2Vi
S2l0QnJpZGdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2Vi
S2l0QnJpZGdlLmNwcAppbmRleCBiNjQ3MjNhMDgxMmEyNzA3OTE1OWI3YjFiYzAyOWYzMDZlZGM0
ZDM5Li4xODBjYThiMzVhMDFiNzk3ZTI5YTU0ZDlmNjFiYmFhOTViNjVhMmY4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktpdEJyaWRnZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2Uu
Y3BwCkBAIC0zMCw2ICszMCw4IEBACiAjaW5jbHVkZSAiQU5HTEVXZWJLaXRCcmlkZ2UuaCIKICNp
bmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KIAordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKwogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBpbmxpbmUgc3RhdGljIGludCBnZXRWYWxpZGF0aW9uUmVzdWx0
VmFsdWUoY29uc3QgU2hIYW5kbGUgY29tcGlsZXIsIFNoU2hhZGVySW5mbyBzaGFkZXJJbmZvKQpA
QCAtMzksNiArNDEsNjIgQEAgaW5saW5lIHN0YXRpYyBpbnQgZ2V0VmFsaWRhdGlvblJlc3VsdFZh
bHVlKGNvbnN0IFNoSGFuZGxlIGNvbXBpbGVyLCBTaFNoYWRlckluZm8KICAgICByZXR1cm4gdmFs
dWU7CiB9CiAKK3N0YXRpYyBib29sIGdldFZhcmlhYmxlSW5mbyhjb25zdCBTaEhhbmRsZSBjb21w
aWxlciwgU2hTaGFkZXJJbmZvIHZhcmlhYmxlVHlwZSwgVmVjdG9yPEFOR0xFU2hhZGVyU3ltYm9s
PiYgc3ltYm9scykKK3sKKyAgICBTaFNoYWRlckluZm8gdmFyaWFibGVNYXhOYW1lTGVuZ3RoVHlw
ZTsKKworICAgIHN3aXRjaCAodmFyaWFibGVUeXBlKSB7CisgICAgY2FzZSBTSF9BQ1RJVkVfQVRU
UklCVVRFUzoKKyAgICAgICAgdmFyaWFibGVNYXhOYW1lTGVuZ3RoVHlwZSA9IFNIX0FDVElWRV9B
VFRSSUJVVEVfTUFYX0xFTkdUSDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTSF9BQ1RJVkVf
VU5JRk9STVM6CisgICAgICAgIHZhcmlhYmxlTWF4TmFtZUxlbmd0aFR5cGUgPSBTSF9BQ1RJVkVf
VU5JRk9STV9NQVhfTEVOR1RIOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIGludCBudW1WYXJpYWJsZXMgPSBnZXRWYWxpZGF0aW9uUmVzdWx0VmFsdWUoY29tcGlsZXIs
IHZhcmlhYmxlVHlwZSk7CisgICAgaWYgKG51bVZhcmlhYmxlcyA8IDApCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGludCBtYXhOYW1lTGVuZ3RoID0gZ2V0VmFsaWRhdGlvblJlc3VsdFZh
bHVlKGNvbXBpbGVyLCB2YXJpYWJsZU1heE5hbWVMZW5ndGhUeXBlKTsKKyAgICBpZiAobWF4TmFt
ZUxlbmd0aCA8PSAxKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpbnQgbWF4TWFwcGVk
TmFtZUxlbmd0aCA9IGdldFZhbGlkYXRpb25SZXN1bHRWYWx1ZShjb21waWxlciwgU0hfTUFQUEVE
X05BTUVfTUFYX0xFTkdUSCk7CisgICAgaWYgKG1heE1hcHBlZE5hbWVMZW5ndGggPD0gMSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgT3duQXJyYXlQdHI8Y2hhcj4gbmFtZUJ1ZmZlciA9
IGFkb3B0QXJyYXlQdHIobmV3IGNoYXJbbWF4TmFtZUxlbmd0aF0pOworICAgIE93bkFycmF5UHRy
PGNoYXI+IG1hcHBlZE5hbWVCdWZmZXIgPSBhZG9wdEFycmF5UHRyKG5ldyBjaGFyW21heE1hcHBl
ZE5hbWVMZW5ndGhdKTsKKyAgICAKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVZhcmlhYmxl
czsgKytpKSB7CisgICAgICAgIEFOR0xFU2hhZGVyU3ltYm9sIHN5bWJvbDsKKyAgICAgICAgaW50
IG5hbWVMZW5ndGggPSAtMTsKKyAgICAgICAgc3dpdGNoICh2YXJpYWJsZVR5cGUpIHsKKyAgICAg
ICAgY2FzZSBTSF9BQ1RJVkVfQVRUUklCVVRFUzoKKyAgICAgICAgICAgIHN5bWJvbC5zeW1ib2xU
eXBlID0gU0hBREVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURTsKKyAgICAgICAgICAgIFNoR2V0QWN0
aXZlQXR0cmliKGNvbXBpbGVyLCBpLCAmbmFtZUxlbmd0aCwgJnN5bWJvbC5zaXplLCAmc3ltYm9s
LmRhdGFUeXBlLCBuYW1lQnVmZmVyLmdldCgpLCBtYXBwZWROYW1lQnVmZmVyLmdldCgpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNIX0FDVElWRV9VTklGT1JNUzoKKyAgICAg
ICAgICAgIHN5bWJvbC5zeW1ib2xUeXBlID0gU0hBREVSX1NZTUJPTF9UWVBFX1VOSUZPUk07Cisg
ICAgICAgICAgICBTaEdldEFjdGl2ZVVuaWZvcm0oY29tcGlsZXIsIGksICZuYW1lTGVuZ3RoLCAm
c3ltYm9sLnNpemUsICZzeW1ib2wuZGF0YVR5cGUsIG5hbWVCdWZmZXIuZ2V0KCksIG1hcHBlZE5h
bWVCdWZmZXIuZ2V0KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAobmFtZUxlbmd0aCA8PSAwKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICBzeW1ib2wubmFtZSA9IFN0cmluZzo6ZnJvbVVURjgobmFt
ZUJ1ZmZlci5nZXQoKSwgbmFtZUxlbmd0aCk7CisgICAgICAgIHN5bWJvbC5tYXBwZWROYW1lID0g
U3RyaW5nOjpmcm9tVVRGOChtYXBwZWROYW1lQnVmZmVyLmdldCgpLCBzdGQ6Om1pbihtYXhNYXBw
ZWROYW1lTGVuZ3RoLCBuYW1lTGVuZ3RoKSk7CisgICAgICAgIHN5bWJvbHMuYXBwZW5kKHN5bWJv
bCk7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCiBBTkdMRVdlYktpdEJyaWRnZTo6QU5H
TEVXZWJLaXRCcmlkZ2UoU2hTaGFkZXJPdXRwdXQgc2hhZGVyT3V0cHV0LCBTaFNoYWRlclNwZWMg
c2hhZGVyU3BlYykKICAgICA6IGJ1aWx0Q29tcGlsZXJzKGZhbHNlKQogICAgICwgbV9mcmFnbWVu
dENvbXBpbGVyKDApCkBAIC03NSw3ICsxMzMsNyBAQCB2b2lkIEFOR0xFV2ViS2l0QnJpZGdlOjpz
ZXRSZXNvdXJjZXMoU2hCdWlsdEluUmVzb3VyY2VzIHJlc291cmNlcykKICAgICBtX3Jlc291cmNl
cyA9IHJlc291cmNlczsKIH0KIAotYm9vbCBBTkdMRVdlYktpdEJyaWRnZTo6dmFsaWRhdGVTaGFk
ZXJTb3VyY2UoY29uc3QgY2hhciogc2hhZGVyU291cmNlLCBBTkdMRVNoYWRlclR5cGUgc2hhZGVy
VHlwZSwgU3RyaW5nJiB0cmFuc2xhdGVkU2hhZGVyU291cmNlLCBTdHJpbmcmIHNoYWRlclZhbGlk
YXRpb25Mb2csIGludCBleHRyYUNvbXBpbGVPcHRpb25zKQorYm9vbCBBTkdMRVdlYktpdEJyaWRn
ZTo6Y29tcGlsZVNoYWRlclNvdXJjZShjb25zdCBjaGFyKiBzaGFkZXJTb3VyY2UsIEFOR0xFU2hh
ZGVyVHlwZSBzaGFkZXJUeXBlLCBTdHJpbmcmIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UsIFN0cmlu
ZyYgc2hhZGVyVmFsaWRhdGlvbkxvZywgVmVjdG9yPEFOR0xFU2hhZGVyU3ltYm9sPiYgc3ltYm9s
cywgaW50IGV4dHJhQ29tcGlsZU9wdGlvbnMpCiB7CiAgICAgaWYgKCFidWlsdENvbXBpbGVycykg
ewogICAgICAgICBtX2ZyYWdtZW50Q29tcGlsZXIgPSBTaENvbnN0cnVjdENvbXBpbGVyKFNIX0ZS
QUdNRU5UX1NIQURFUiwgbV9zaGFkZXJTcGVjLCBtX3NoYWRlck91dHB1dCwgJm1fcmVzb3VyY2Vz
KTsKQEAgLTk3LDcgKzE1NSw3IEBAIGJvb2wgQU5HTEVXZWJLaXRCcmlkZ2U6OnZhbGlkYXRlU2hh
ZGVyU291cmNlKGNvbnN0IGNoYXIqIHNoYWRlclNvdXJjZSwgQU5HTEVTaGFkCiAKICAgICBjb25z
dCBjaGFyKiBjb25zdCBzaGFkZXJTb3VyY2VTdHJpbmdzW10gPSB7IHNoYWRlclNvdXJjZSB9Owog
Ci0gICAgYm9vbCB2YWxpZGF0ZVN1Y2Nlc3MgPSBTaENvbXBpbGUoY29tcGlsZXIsIHNoYWRlclNv
dXJjZVN0cmluZ3MsIDEsIFNIX09CSkVDVF9DT0RFIHwgZXh0cmFDb21waWxlT3B0aW9ucyk7Cisg
ICAgYm9vbCB2YWxpZGF0ZVN1Y2Nlc3MgPSBTaENvbXBpbGUoY29tcGlsZXIsIHNoYWRlclNvdXJj
ZVN0cmluZ3MsIDEsIFNIX09CSkVDVF9DT0RFIHwgU0hfQVRUUklCVVRFU19VTklGT1JNUyB8IFNI
X01BUF9MT05HX1ZBUklBQkxFX05BTUVTIHwgZXh0cmFDb21waWxlT3B0aW9ucyk7CiAgICAgaWYg
KCF2YWxpZGF0ZVN1Y2Nlc3MpIHsKICAgICAgICAgaW50IGxvZ1NpemUgPSBnZXRWYWxpZGF0aW9u
UmVzdWx0VmFsdWUoY29tcGlsZXIsIFNIX0lORk9fTE9HX0xFTkdUSCk7CiAgICAgICAgIGlmIChs
b2dTaXplID4gMSkgewpAQCAtMTE4LDM1ICsxNzYsMTEgQEAgYm9vbCBBTkdMRVdlYktpdEJyaWRn
ZTo6dmFsaWRhdGVTaGFkZXJTb3VyY2UoY29uc3QgY2hhciogc2hhZGVyU291cmNlLCBBTkdMRVNo
YWQKICAgICAgICAgU2hHZXRPYmplY3RDb2RlKGNvbXBpbGVyLCB0cmFuc2xhdGlvbkJ1ZmZlci5n
ZXQoKSk7CiAgICAgICAgIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UgPSB0cmFuc2xhdGlvbkJ1ZmZl
ci5nZXQoKTsKICAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBBTkdMRVdlYktp
dEJyaWRnZTo6Z2V0VW5pZm9ybXMoU2hTaGFkZXJUeXBlIHNoYWRlclR5cGUsIFZlY3RvcjxBTkdM
RVNoYWRlclN5bWJvbD4gJnN5bWJvbHMpCi17Ci0gICAgY29uc3QgU2hIYW5kbGUgY29tcGlsZXIg
PSAoc2hhZGVyVHlwZSA9PSBTSF9WRVJURVhfU0hBREVSID8gbV92ZXJ0ZXhDb21waWxlciA6IG1f
ZnJhZ21lbnRDb21waWxlcik7Ci0KLSAgICBpbnQgbnVtVW5pZm9ybXMgPSBnZXRWYWxpZGF0aW9u
UmVzdWx0VmFsdWUoY29tcGlsZXIsIFNIX0FDVElWRV9VTklGT1JNUyk7Ci0gICAgaWYgKG51bVVu
aWZvcm1zIDwgMCkKKyAgICAKKyAgICBpZiAoIWdldFZhcmlhYmxlSW5mbyhjb21waWxlciwgU0hf
QUNUSVZFX0FUVFJJQlVURVMsIHN5bWJvbHMpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
aWYgKCFudW1Vbmlmb3JtcykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpbnQgbWF4TmFt
ZUxlbmd0aCA9IGdldFZhbGlkYXRpb25SZXN1bHRWYWx1ZShjb21waWxlciwgU0hfQUNUSVZFX1VO
SUZPUk1fTUFYX0xFTkdUSCk7Ci0gICAgaWYgKG1heE5hbWVMZW5ndGggPD0gMSkKKyAgICBpZiAo
IWdldFZhcmlhYmxlSW5mbyhjb21waWxlciwgU0hfQUNUSVZFX1VOSUZPUk1TLCBzeW1ib2xzKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIE93bkFycmF5UHRyPGNoYXI+IG5hbWVCdWZmZXIg
PSBhZG9wdEFycmF5UHRyKG5ldyBjaGFyW21heE5hbWVMZW5ndGhdKTsKLQotICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgbnVtVW5pZm9ybXM7ICsraSkgewotICAgICAgICBBTkdMRVNoYWRlclN5bWJv
bCBzeW1ib2w7Ci0gICAgICAgIHN5bWJvbC5zeW1ib2xUeXBlID0gU0hBREVSX1NZTUJPTF9UWVBF
X1VOSUZPUk07Ci0gICAgICAgIGludCBuYW1lTGVuZ3RoID0gLTE7Ci0gICAgICAgIFNoR2V0QWN0
aXZlVW5pZm9ybShjb21waWxlciwgaSwgJm5hbWVMZW5ndGgsICZzeW1ib2wuc2l6ZSwgJnN5bWJv
bC5kYXRhVHlwZSwgbmFtZUJ1ZmZlci5nZXQoKSwgMCk7Ci0gICAgICAgIGlmIChuYW1lTGVuZ3Ro
IDw9IDApCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHN5bWJvbC5uYW1lID0g
U3RyaW5nOjpmcm9tVVRGOChuYW1lQnVmZmVyLmdldCgpLCBuYW1lTGVuZ3RoKTsKLSAgICAgICAg
c3ltYm9scy5hcHBlbmQoc3ltYm9sKTsKLSAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJp
ZGdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktpdEJyaWRn
ZS5oCmluZGV4IDE5YzUwNGViMzkzNzA0OTk2ZTk1ZDMyMDgxY2ZjMGI1MzNmYjZiYjMuLmFhMGFj
MDhhNGY1YzNhZTkxZjc5NDQ2YzUxNTgxODg4OWQ1ZWE5NjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuaApAQCAtNTAsNiAr
NTAsNyBAQCBlbnVtIEFOR0xFU2hhZGVyU3ltYm9sVHlwZSB7CiBzdHJ1Y3QgQU5HTEVTaGFkZXJT
eW1ib2wgewogICAgIEFOR0xFU2hhZGVyU3ltYm9sVHlwZSBzeW1ib2xUeXBlOwogICAgIFN0cmlu
ZyBuYW1lOworICAgIFN0cmluZyBtYXBwZWROYW1lOwogICAgIFNoRGF0YVR5cGUgZGF0YVR5cGU7
CiAgICAgaW50IHNpemU7CiAKQEAgLTcxLDEyICs3Miw3IEBAIHB1YmxpYzoKICAgICBTaEJ1aWx0
SW5SZXNvdXJjZXMgZ2V0UmVzb3VyY2VzKCkgeyByZXR1cm4gbV9yZXNvdXJjZXM7IH0KICAgICB2
b2lkIHNldFJlc291cmNlcyhTaEJ1aWx0SW5SZXNvdXJjZXMpOwogICAgIAotICAgIGJvb2wgdmFs
aWRhdGVTaGFkZXJTb3VyY2UoY29uc3QgY2hhciogc2hhZGVyU291cmNlLCBBTkdMRVNoYWRlclR5
cGUsIFN0cmluZyYgdHJhbnNsYXRlZFNoYWRlclNvdXJjZSwgU3RyaW5nJiBzaGFkZXJWYWxpZGF0
aW9uTG9nLCBpbnQgZXh0cmFDb21waWxlT3B0aW9ucyA9IDApOwotCi0gICAgLy8gR2V0IHRoZSB1
bmlmb3JtcyBmb3IgdGhlIGxhc3QgdmFsaWRhdGVkIHNoYWRlciBvZiB0eXBlIFNoU2hhZGVyVHlw
ZS4KLSAgICAvLyBGb3IgdGhpcyBmdW5jdGlvbiB0byB3b3JrLCB5b3UgbXVzdCB1c2UgdGhlIFNI
X0FUVFJJQlVURVNfVU5JRk9STVMgY29tcGlsZSBvcHRpb24gZHVyaW5nIHZhbGlkYXRpb24uCi0g
ICAgLy8gUmV0dXJucyBmYWxzZSBpZiBhbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VycmVkIGluIEFO
R0xFLgotICAgIGJvb2wgZ2V0VW5pZm9ybXMoU2hTaGFkZXJUeXBlLCBWZWN0b3I8QU5HTEVTaGFk
ZXJTeW1ib2w+ICZzeW1ib2xzKTsKKyAgICBib29sIGNvbXBpbGVTaGFkZXJTb3VyY2UoY29uc3Qg
Y2hhciogc2hhZGVyU291cmNlLCBBTkdMRVNoYWRlclR5cGUsIFN0cmluZyYgdHJhbnNsYXRlZFNo
YWRlclNvdXJjZSwgU3RyaW5nJiBzaGFkZXJWYWxpZGF0aW9uTG9nLCBWZWN0b3I8QU5HTEVTaGFk
ZXJTeW1ib2w+JiBzeW1ib2xzLCBpbnQgZXh0cmFDb21waWxlT3B0aW9ucyA9IDApOwogCiBwcml2
YXRlOgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQzRC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0M0QuaAppbmRleCA1MzI3ZjNhZTI1YWMwYmI2ZTg3ZjMxNzRjZjFiOGIxYmRjOTAz
OTgwLi40MWZjMDczMzc3NjhiNmY4MzBjYWEwYTRmZTViYzljZjE3NGE0MTQ0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgK
QEAgLTk2NCwxNiArOTY0LDUxIEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oTUFD
KSB8fCBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShFRkwpIHx8IFBM
QVRGT1JNKEJMQUNLQkVSUlkpCisgICAgc3RydWN0IFZhcmlhYmxlSW5mbyB7CisgICAgICAgIFZh
cmlhYmxlSW5mbygpCisgICAgICAgICAgICA6IHR5cGUoMCkKKyAgICAgICAgICAgICwgc2l6ZSgw
KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBWYXJpYWJsZUluZm8oR0MzRGVudW0g
dHlwZSwgaW50IHNpemUsIFN0cmluZyYgbWFwcGVkTmFtZSkKKyAgICAgICAgICAgIDogdHlwZSh0
eXBlKQorICAgICAgICAgICAgLCBzaXplKHNpemUpCisgICAgICAgICAgICAsIG1hcHBlZE5hbWUo
bWFwcGVkTmFtZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRv
cj09KFZhcmlhYmxlSW5mbyYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiB0eXBlID09IG90aGVyLnR5cGUgJiYgc2l6ZSA9PSBvdGhlci5zaXplICYmIG1hcHBlZE5h
bWUgPT0gb3RoZXIubWFwcGVkTmFtZTsKKyAgICAgICAgfQorCisgICAgICAgIEdDM0RlbnVtIHR5
cGU7CisgICAgICAgIGludCBzaXplOworICAgICAgICBTdHJpbmcgbWFwcGVkTmFtZTsKKyAgICB9
OworCisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgVmFyaWFibGVJbmZvPiBTaGFkZXJWYXJp
YWJsZU1hcDsKKwogICAgIHN0cnVjdCBTaGFkZXJTb3VyY2VFbnRyeSB7CisgICAgICAgIEdDM0Rl
bnVtIHR5cGU7CiAgICAgICAgIFN0cmluZyBzb3VyY2U7CisgICAgICAgIFN0cmluZyB0cmFuc2xh
dGVkU291cmNlOwogICAgICAgICBTdHJpbmcgbG9nOwogICAgICAgICBib29sIGlzVmFsaWQ7Cisg
ICAgICAgIFNoYWRlclZhcmlhYmxlTWFwIHVuaWZvcm1NYXA7CisgICAgICAgIFNoYWRlclZhcmlh
YmxlTWFwIGF0dHJpYk1hcDsKICAgICAgICAgU2hhZGVyU291cmNlRW50cnkoKQotICAgICAgICAg
ICAgOiBpc1ZhbGlkKDApCisgICAgICAgICAgICA6IHR5cGUoVkVSVEVYX1NIQURFUikKKyAgICAg
ICAgICAgICwgaXNWYWxpZCgwKQogICAgICAgICB7CiAgICAgICAgIH0KICAgICB9OwotICAgIEhh
c2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+IG1fc2hhZGVyU291cmNl
TWFwOworCisgICAgdHlwZWRlZiBIYXNoTWFwPFBsYXRmb3JtM0RPYmplY3QsIFNoYWRlclNvdXJj
ZUVudHJ5PiBTaGFkZXJTb3VyY2VNYXA7CisgICAgU2hhZGVyU291cmNlTWFwIG1fc2hhZGVyU291
cmNlTWFwOworCisgICAgU3RyaW5nIGdldE1hcHBlZFZhcmlhYmxlTmFtZShQbGF0Zm9ybTNET2Jq
ZWN0IHByb2dyYW0sIFNoU2hhZGVySW5mbyB2YXJpYWJsZVR5cGUsIGNvbnN0IFN0cmluZyYgbmFt
ZSk7CiAKICAgICBBTkdMRVdlYktpdEJyaWRnZSBtX2NvbXBpbGVyOwogI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRl
clZhbGlkYXRlZFByb2dyYW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9DdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtLmNwcAppbmRleCA0MjExZTgyYjc4
MWIxYTBhY2I1MjdmMzBkZjVjMDE0MzljNDUxODA5Li4zZWQwYTAwY2MyODlmMWM5YzlkNTA3MzZl
MjJmNTMxMDViOGZkNDc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyVmFsaWRhdGVk
UHJvZ3JhbS5jcHAKQEAgLTg1LDggKzg1LDkgQEAgQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3Jh
bTo6Q3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbShDdXN0b21GaWx0ZXJHbG9iYWxDb24KICAg
ICAvLyBTaGFkZXJzIHJlZmVyZW5jZWQgZnJvbSB0aGUgQ1NTIG1peCBmdW5jdGlvbiB1c2UgYSBk
aWZmZXJlbnQgdmFsaWRhdG9yIHRoYW4gcmVndWxhciBXZWJHTCBzaGFkZXJzLiBTZWUgQ3VzdG9t
RmlsdGVyR2xvYmFsQ29udGV4dC5oIGZvciBtb3JlIGRldGFpbHMuCiAgICAgQU5HTEVXZWJLaXRC
cmlkZ2UqIHZhbGlkYXRvciA9IHByb2dyYW1JbmZvLm1peFNldHRpbmdzKCkuZW5hYmxlZCA/IG1f
Z2xvYmFsQ29udGV4dC0+bWl4U2hhZGVyVmFsaWRhdG9yKCkgOiBtX2dsb2JhbENvbnRleHQtPndl
YmdsU2hhZGVyVmFsaWRhdG9yKCk7CiAgICAgU3RyaW5nIHZlcnRleFNoYWRlckxvZywgZnJhZ21l
bnRTaGFkZXJMb2c7Ci0gICAgYm9vbCB2ZXJ0ZXhTaGFkZXJWYWxpZCA9IHZhbGlkYXRvci0+dmFs
aWRhdGVTaGFkZXJTb3VyY2Uob3JpZ2luYWxWZXJ0ZXhTaGFkZXIudXRmOCgpLmRhdGEoKSwgU0hB
REVSX1RZUEVfVkVSVEVYLCBtX3ZhbGlkYXRlZFZlcnRleFNoYWRlciwgdmVydGV4U2hhZGVyTG9n
LCBTSF9BVFRSSUJVVEVTX1VOSUZPUk1TKTsKLSAgICBib29sIGZyYWdtZW50U2hhZGVyVmFsaWQg
PSB2YWxpZGF0b3ItPnZhbGlkYXRlU2hhZGVyU291cmNlKG9yaWdpbmFsRnJhZ21lbnRTaGFkZXIu
dXRmOCgpLmRhdGEoKSwgU0hBREVSX1RZUEVfRlJBR01FTlQsIG1fdmFsaWRhdGVkRnJhZ21lbnRT
aGFkZXIsIGZyYWdtZW50U2hhZGVyTG9nLCBTSF9BVFRSSUJVVEVTX1VOSUZPUk1TKTsKKyAgICBW
ZWN0b3I8QU5HTEVTaGFkZXJTeW1ib2w+IHZhcmlhYmxlczsKKyAgICBib29sIHZlcnRleFNoYWRl
clZhbGlkID0gdmFsaWRhdG9yLT5jb21waWxlU2hhZGVyU291cmNlKG9yaWdpbmFsVmVydGV4U2hh
ZGVyLnV0ZjgoKS5kYXRhKCksIFNIQURFUl9UWVBFX1ZFUlRFWCwgbV92YWxpZGF0ZWRWZXJ0ZXhT
aGFkZXIsIHZlcnRleFNoYWRlckxvZywgdmFyaWFibGVzKTsKKyAgICBib29sIGZyYWdtZW50U2hh
ZGVyVmFsaWQgPSB2YWxpZGF0b3ItPmNvbXBpbGVTaGFkZXJTb3VyY2Uob3JpZ2luYWxGcmFnbWVu
dFNoYWRlci51dGY4KCkuZGF0YSgpLCBTSEFERVJfVFlQRV9GUkFHTUVOVCwgbV92YWxpZGF0ZWRG
cmFnbWVudFNoYWRlciwgZnJhZ21lbnRTaGFkZXJMb2csIHZhcmlhYmxlcyk7CiAgICAgaWYgKCF2
ZXJ0ZXhTaGFkZXJWYWxpZCB8fCAhZnJhZ21lbnRTaGFkZXJWYWxpZCkgewogICAgICAgICAvLyBG
SVhNRTogUmVwb3J0IHRoZSB2YWxpZGF0aW9uIGVycm9ycy4KICAgICAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0NDE2CkBAIC05NCwxMiArOTUsMTAgQEAg
Q3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbTo6Q3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3Jh
bShDdXN0b21GaWx0ZXJHbG9iYWxDb24KICAgICB9CiAKICAgICAvLyBWYWxpZGF0ZSB0aGUgYXV0
aG9yJ3Mgc2FtcGxlcnMuCi0gICAgVmVjdG9yPEFOR0xFU2hhZGVyU3ltYm9sPiB1bmlmb3JtczsK
LSAgICBpZiAoIXZhbGlkYXRvci0+Z2V0VW5pZm9ybXMoU0hfVkVSVEVYX1NIQURFUiwgdW5pZm9y
bXMpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0b3ItPmdldFVuaWZvcm1zKFNI
X0ZSQUdNRU5UX1NIQURFUiwgdW5pZm9ybXMpKQotICAgICAgICByZXR1cm47Ci0gICAgZm9yIChW
ZWN0b3I8QU5HTEVTaGFkZXJTeW1ib2w+OjppdGVyYXRvciBpdCA9IHVuaWZvcm1zLmJlZ2luKCk7
IGl0ICE9IHVuaWZvcm1zLmVuZCgpOyArK2l0KSB7CisgICAgZm9yIChWZWN0b3I8QU5HTEVTaGFk
ZXJTeW1ib2w+OjppdGVyYXRvciBpdCA9IHZhcmlhYmxlcy5iZWdpbigpOyBpdCAhPSB2YXJpYWJs
ZXMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgLy8gV2UncmUgb25seSBjaGVja2luZyB1bmlmb3Jt
cworICAgICAgICBpZiAoaXQtPnN5bWJvbFR5cGUgIT0gU0hBREVSX1NZTUJPTF9UWVBFX1VOSUZP
Uk0pCisgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKGl0LT5pc1NhbXBsZXIoKSkg
ewogICAgICAgICAgICAgLy8gRklYTUU6IEZvciBub3csIHdlIHJlc3RyaWN0IHNoYWRlcnMgd2l0
aCBhbnkgc2FtcGxlciBkZWZpbmVkLgogICAgICAgICAgICAgLy8gV2hlbiB3ZSBpbXBsZW1lbnQg
dGV4dHVyZSBwYXJhbWV0ZXJzLCB3ZSB3aWxsIGFsbG93IHNoYWRlcnMgd2hvc2Ugc2FtcGxlcnMg
YXJlIGJvdW5kIHRvIHZhbGlkIHRleHR1cmVzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdM
Q29tbW9uLmNwcAppbmRleCBjZjdmYTJmNDRiODAyYzZjZmMxYTE2MDgwOTU3YzFjMjkwMDY1ZDk2
Li42M2I1ZDVjZGU2NmQ0YWRlNjM4ODFkMDJhNTBlZTZlYmFmN2ViNDcwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdM
Q29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
RXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcApAQCAtMTY1LDExICsxNjUsMjYgQEAgU3RyaW5n
IEV4dGVuc2lvbnMzRE9wZW5HTENvbW1vbjo6Z2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xF
KFBsYXRmb3JtM0RPYmplY3QKICAgICBpZiAobV9yZXF1aXJlc0J1aWx0SW5GdW5jdGlvbkVtdWxh
dGlvbikKICAgICAgICAgZXh0cmFDb21waWxlT3B0aW9ucyB8PSBTSF9FTVVMQVRFX0JVSUxUX0lO
X0ZVTkNUSU9OUzsKIAotICAgIGJvb2wgaXNWYWxpZCA9IGNvbXBpbGVyLnZhbGlkYXRlU2hhZGVy
U291cmNlKGVudHJ5LnNvdXJjZS51dGY4KCkuZGF0YSgpLCBzaGFkZXJUeXBlLCB0cmFuc2xhdGVk
U2hhZGVyU291cmNlLCBzaGFkZXJJbmZvTG9nLCBleHRyYUNvbXBpbGVPcHRpb25zKTsKKyAgICBW
ZWN0b3I8QU5HTEVTaGFkZXJTeW1ib2w+IHZhcmlhYmxlczsKKyAgICBib29sIGlzVmFsaWQgPSBj
b21waWxlci5jb21waWxlU2hhZGVyU291cmNlKGVudHJ5LnNvdXJjZS51dGY4KCkuZGF0YSgpLCBz
aGFkZXJUeXBlLCB0cmFuc2xhdGVkU2hhZGVyU291cmNlLCBzaGFkZXJJbmZvTG9nLCB2YXJpYWJs
ZXMsIGV4dHJhQ29tcGlsZU9wdGlvbnMpOwogCiAgICAgZW50cnkubG9nID0gc2hhZGVySW5mb0xv
ZzsKICAgICBlbnRyeS5pc1ZhbGlkID0gaXNWYWxpZDsKIAorICAgIGZvciAoVmVjdG9yPEFOR0xF
U2hhZGVyU3ltYm9sPjo6aXRlcmF0b3IgaXQgPSB2YXJpYWJsZXMuYmVnaW4oKTsgaXQgIT0gdmFy
aWFibGVzLmVuZCgpOyArK2l0KSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpWYXJpYWJs
ZUluZm8gdmFyaWFibGVJbmZvKGl0LT5kYXRhVHlwZSwgaXQtPnNpemUsIGl0LT5tYXBwZWROYW1l
KTsKKyAgICAgICAgc3dpdGNoIChpdC0+c3ltYm9sVHlwZSkgeworICAgICAgICBjYXNlIFNIQURF
Ul9TWU1CT0xfVFlQRV9BVFRSSUJVVEU6CisgICAgICAgICAgICBlbnRyeS5hdHRyaWJNYXAuc2V0
KGl0LT5uYW1lLCB2YXJpYWJsZUluZm8pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgU0hBREVSX1NZTUJPTF9UWVBFX1VOSUZPUk06CisgICAgICAgICAgICBlbnRyeS51bmlmb3Jt
TWFwLnNldChpdC0+bmFtZSwgdmFyaWFibGVJbmZvKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IH0KKyAgICB9CisKICAgICBpZiAoIWlzVmFsaWQpCiAgICAgICAgIHJldHVybiAiIjsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dDNET3BlbkdMQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKaW5kZXggOGEyYWM4
MWU2NzYwMTMzOTJiNjY4YzY3YTBlYjVjY2VjOTczMmZlNi4uYWE3Zjk1NzY1MTM2ZmQ2ZGE3NTAw
ZTk1MmNiNTk4YTIyYTQ4ZDIyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RP
cGVuR0xDb21tb24uY3BwCkBAIC00NjUsNyArNDY1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6Y29tcGlsZVNoYWRlcihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKICAgICA6OmdsR2V0U2hh
ZGVyaXYoc2hhZGVyLCBHTF9JTkZPX0xPR19MRU5HVEgsICZsZW5ndGgpOwogCiAgICAgaWYgKGxl
bmd0aCkgewotICAgICAgICBIYXNoTWFwPFBsYXRmb3JtM0RPYmplY3QsIEdyYXBoaWNzQ29udGV4
dDNEOjpTaGFkZXJTb3VyY2VFbnRyeT46Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNl
TWFwLmZpbmQoc2hhZGVyKTsKKyAgICAgICAgU2hhZGVyU291cmNlTWFwOjppdGVyYXRvciByZXN1
bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CiAgICAgICAgIEdyYXBoaWNzQ29u
dGV4dDNEOjpTaGFkZXJTb3VyY2VFbnRyeSYgZW50cnkgPSByZXN1bHQtPnNlY29uZDsKIAogICAg
ICAgICBHTHNpemVpIHNpemUgPSAwOwpAQCAtNjcxLDEzICs2NzEsNTIgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0QXR0YWNoZWRTaGFkZXJzKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwg
R0MzRHNpemVpIG0KICAgICA6OmdsR2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIG1heENvdW50
LCBjb3VudCwgc2hhZGVycyk7CiB9CiAKKyNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKEdU
SykgfHwgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEVGTCkgfHwgUExBVEZPUk0oQkxBQ0tCRVJS
WSkKK1N0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0TWFwcGVkVmFyaWFibGVOYW1lKFBsYXRm
b3JtM0RPYmplY3QgcHJvZ3JhbSwgU2hTaGFkZXJJbmZvIHZhcmlhYmxlVHlwZSwgY29uc3QgU3Ry
aW5nJiBuYW1lKQoreworICAgIFN0cmluZyBtYXBwZWROYW1lID0gU3RyaW5nKG5hbWUpOworCisg
ICAgR0MzRHNpemVpIGNvdW50OworICAgIFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyc1syXTsKKyAg
ICBnZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgMiwgJmNvdW50LCBzaGFkZXJzKTsKKworICAg
IGZvciAoR0MzRHNpemVpIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBTaGFkZXJT
b3VyY2VNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVy
c1tpXSk7CisgICAgICAgIGlmIChyZXN1bHQgPT0gbV9zaGFkZXJTb3VyY2VNYXAuZW5kKCkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBTaGFkZXJTb3VyY2VFbnRyeSBlbnRyeSA9
IHJlc3VsdC0+c2Vjb25kOworICAgICAgICBTaGFkZXJWYXJpYWJsZU1hcDo6aXRlcmF0b3IgdmFy
aWFibGVSZXN1bHQ7CisgICAgICAgIGlmICh2YXJpYWJsZVR5cGUgPT0gU0hfQUNUSVZFX0FUVFJJ
QlVURVMpIHsKKyAgICAgICAgICAgIHZhcmlhYmxlUmVzdWx0ID0gZW50cnkuYXR0cmliTWFwLmZp
bmQobmFtZSk7CisgICAgICAgICAgICBpZiAodmFyaWFibGVSZXN1bHQgPT0gZW50cnkuYXR0cmli
TWFwLmVuZCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgdmFyaWFibGVSZXN1bHQgPSBlbnRyeS51bmlmb3JtTWFwLmZpbmQobmFtZSk7
CisgICAgICAgICAgICBpZiAodmFyaWFibGVSZXN1bHQgPT0gZW50cnkudW5pZm9ybU1hcC5lbmQo
KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIG1hcHBl
ZE5hbWUgPSB2YXJpYWJsZVJlc3VsdC0+c2Vjb25kLm1hcHBlZE5hbWU7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICByZXR1cm4gbWFwcGVkTmFtZTsKK30KKyNlbmRpZgorCiBpbnQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwg
Y29uc3QgU3RyaW5nJiBuYW1lKQogewogICAgIGlmICghcHJvZ3JhbSkKICAgICAgICAgcmV0dXJu
IC0xOwogCiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIDo6Z2xHZXRBdHRy
aWJMb2NhdGlvbihwcm9ncmFtLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOworCisgICAgLy8gVGhlIGF0
dHJpYnV0ZSBuYW1lIG1heSBoYXZlIGJlZW4gdHJhbnNsYXRlZCBkdXJpbmcgQU5HTEUgY29tcGls
YXRpb24uCisgICAgLy8gTG9vayB0aHJvdWdoIHRoZSBjb3JyZXNwb25kaW5nIFNoYWRlclNvdXJj
ZU1hcCB0byBtYWtlIHN1cmUgd2UKKyAgICAvLyByZWZlcmVuY2UgdGhlIG1hcHBlZCBuYW1lIHJh
dGhlciB0aGFuIHRoZSBleHRlcm5hbCBuYW1lLgorICAgIFN0cmluZyBtYXBwZWROYW1lID0gZ2V0
TWFwcGVkVmFyaWFibGVOYW1lKHByb2dyYW0sIFNIX0FDVElWRV9BVFRSSUJVVEVTLCBuYW1lKTsK
KworICAgIHJldHVybiA6OmdsR2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgbWFwcGVkTmFtZS51
dGY4KCkuZGF0YSgpKTsKIH0KIAogR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldENvbnRleHRBdHRyaWJ1dGVzKCkKQEAgLTExMjYsNyArMTE2NSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlcml2KFBsYXRmb3JtM0RPYmplY3Qgc2hh
ZGVyLCBHQzNEZW51bSBwbmFtZSwgR0MzCiAKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKIAot
ICAgIEhhc2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+OjppdGVyYXRv
ciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAgU2hhZGVyU291
cmNlTWFwOjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7
CiAgICAgCiAgICAgc3dpdGNoIChwbmFtZSkgewogICAgIGNhc2UgREVMRVRFX1NUQVRVUzoKQEAg
LTExNjEsNyArMTIwMCw3IEBAIFN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVySW5m
b0xvZyhQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKIAogICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwogCi0gICAgSGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0LCBTaGFkZXJTb3VyY2VFbnRyeT46Oml0
ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICBTaGFk
ZXJTb3VyY2VNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hh
ZGVyKTsKICAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQogICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7IAogCkBAIC0xMTg3LDcgKzEyMjYsNyBAQCBTdHJpbmcgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldFNoYWRlclNvdXJjZShQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKIAog
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogCi0gICAgSGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0
LCBTaGFkZXJTb3VyY2VFbnRyeT46Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFw
LmZpbmQoc2hhZGVyKTsKKyAgICBTaGFkZXJTb3VyY2VNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IG1f
c2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKICAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVy
U291cmNlTWFwLmVuZCgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7IAogCkBAIC0xMjI0LDcg
KzEyNjMsMTMgQEAgR0MzRGludCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybUxvY2F0aW9u
KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3QKICAgICBBU1NFUlQocHJvZ3JhbSk7
CiAKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gOjpnbEdldFVuaWZvcm1M
b2NhdGlvbihwcm9ncmFtLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOworCisgICAgLy8gVGhlIHVuaWZv
cm0gbmFtZSBtYXkgaGF2ZSBiZWVuIHRyYW5zbGF0ZWQgZHVyaW5nIEFOR0xFIGNvbXBpbGF0aW9u
LgorICAgIC8vIExvb2sgdGhyb3VnaCB0aGUgY29ycmVzcG9uZGluZyBTaGFkZXJTb3VyY2VNYXAg
dG8gbWFrZSBzdXJlIHdlCisgICAgLy8gcmVmZXJlbmNlIHRoZSBtYXBwZWQgbmFtZSByYXRoZXIg
dGhhbiB0aGUgZXh0ZXJuYWwgbmFtZS4KKyAgICBTdHJpbmcgbWFwcGVkTmFtZSA9IGdldE1hcHBl
ZFZhcmlhYmxlTmFtZShwcm9ncmFtLCBTSF9BQ1RJVkVfVU5JRk9STVMsIG5hbWUpOworCisgICAg
cmV0dXJuIDo6Z2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbWFwcGVkTmFtZS51dGY4KCku
ZGF0YSgpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliZnYo
R0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQqIHZhbHVlKQpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4
IDY1ODA4NGE5YTlmZDc0NDFhNzIyNTNlMmY4OTZiMjc0ZjEwNDU3OGQuLmRlYTgwNDIxMzk1YThh
NjUxYjFhNDdiYzllNzg0NWVmNjNhMzlmOWUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAxMi0x
MC0wMiAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5jb20+CisKKyAgICAgICAgQXR0cmlidXRl
IGFuZCBVbmlmb3JtIHZhcmlhYmxlIG5hbWVzIG5lZWQgdHJhbnNsYXRpb24gaW4gc2hhZGVyCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDk4OQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIHN1YnRl
c3RzIHRvIGV4ZXJjaXNlIHZhcmlhYmxlcyB0aGF0IGFyZSB3ZWxsIHVuZGVyIHRoZSBsaW1pdHMg
YnV0CisgICAgICAgIG5vdCBsb25nIGVub3VnaCB0byBwcm9kdWNlIGFuIGVycm9yLiBUaGlzIHdh
eSB3ZSBub3cgdGVzdCBhbGwgdGhyZWUgb3B0aW9uczoKKyAgICAgICAgdW5kZXIgdGhlIGxpbWl0
LCBhdCB0aGUgbGltaXQsIG92ZXIgdGhlIGxpbWl0LgorCisgICAgICAgIEFsc28sIHRoZSB0ZXN0
cyBhcmUgdW5za2lwcGVkIG9uIE1hYy4KKworICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL2F0
dHJpYi1sb2NhdGlvbi1sZW5ndGgtbGltaXRzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0
L2NhbnZhcy93ZWJnbC9hdHRyaWItbG9jYXRpb24tbGVuZ3RoLWxpbWl0cy5odG1sOgorICAgICAg
ICAqIGZhc3QvY2FudmFzL3dlYmdsL3VuaWZvcm0tbG9jYXRpb24tbGVuZ3RoLWxpbWl0cy1leHBl
Y3RlZC50eHQ6CisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvdW5pZm9ybS1sb2NhdGlvbi1s
ZW5ndGgtbGltaXRzLmh0bWw6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlv
bnM6CisKIDIwMTItMTAtMDIgIE9qYW4gVmFmYWkgIDxvamFuQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBUZXN0IHJlYmFzZWxpbmVzIG5vdyB0aGF0IHRoZSBDaHJvbWl1bSBMaW9uIGJvdCBoYXMg
YmVlbiB1cGdyYWRlZCB0byAxMC43LjUuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nh
bnZhcy93ZWJnbC9hdHRyaWItbG9jYXRpb24tbGVuZ3RoLWxpbWl0cy1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9hdHRyaWItbG9jYXRpb24tbGVuZ3RoLWxpbWl0
cy1leHBlY3RlZC50eHQKaW5kZXggYzIyODkxNmNhZDJmMjE3MDA1ZGY3MTM3ZDI1MWNiMjEyOGM5
ODAzNC4uYjM0NTBlNDNjNTU4ZTFjY2E3MTQ4NTMwN2QyZjEwNjIxZmFhODMzMCAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvYXR0cmliLWxvY2F0aW9uLWxlbmd0aC1s
aW1pdHMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2F0
dHJpYi1sb2NhdGlvbi1sZW5ndGgtbGltaXRzLWV4cGVjdGVkLnR4dApAQCAtMyw2ICszLDEwIEBA
IFRlc3QgYXR0cmliIGxvY2F0aW9uIHVuZGVybmVhdGggdGhlIGxlbmd0aCBsaW1pdAogUEFTUyBn
bC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJTktfU1RBVFVTKSBpcyB0cnVlCiBQ
QVNTIGF0dHJpYiBsb2NhdGlvbiBzaG91bGQgbm90IGJlIC0xCiBQQVNTIGdldEVycm9yIHdhcyBl
eHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKK1Rlc3QgYXR0cmliIGxvY2F0aW9uIGV4YWN0bHkg
YXQgdGhlIGxlbmd0aCBsaW1pdAorUEFTUyBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0s
IGdsLkxJTktfU1RBVFVTKSBpcyB0cnVlCitQQVNTIGF0dHJpYiBsb2NhdGlvbiBzaG91bGQgbm90
IGJlIC0xCitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKIFRl
c3QgYXR0cmliIGxvY2F0aW9uIG92ZXIgdGhlIGxlbmd0aCBsaW1pdAogU2hhZGVyIGNvbXBpbGF0
aW9uIHNob3VsZCBmYWlsCiBQQVNTIHd0dS5sb2FkU2hhZGVyRnJvbVNjcmlwdChnbCwgImJhZFZl
cnRleFNoYWRlciIsIGdsLlZFUlRFWF9TSEFERVIsIGZ1bmN0aW9uIChlcnIpIHt9KSBpcyBudWxs
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9hdHRyaWItbG9jYXRp
b24tbGVuZ3RoLWxpbWl0cy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvYXR0
cmliLWxvY2F0aW9uLWxlbmd0aC1saW1pdHMuaHRtbAppbmRleCBmNDQ0ODM2ZTc4OGI1YWUzN2Ux
MWVmZjE5NDU0OWEwYjI0ODc4YjJjLi43NDc4ZDdjYmQ1NTk5ZjAyNzA4YzRhMTg0NDIxZThmZmUz
MTk0YzE2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9hdHRyaWIt
bG9jYXRpb24tbGVuZ3RoLWxpbWl0cy5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFz
L3dlYmdsL2F0dHJpYi1sb2NhdGlvbi1sZW5ndGgtbGltaXRzLmh0bWwKQEAgLTEzLDcgKzEzLDE2
IEBAIFRoZXJlIGlzIHN1cHBvc2VkIHRvIGJlIGFuIGV4YW1wbGUgZHJhd2luZyBoZXJlLCBidXQg
aXQncyBub3QgaW1wb3J0YW50LgogPC9jYW52YXM+CiA8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+VmVy
aWZ5IGxpbWl0cyBvbiB0aGUgbGVuZ3RocyBvZiBhdHRyaWIgbG9jYXRpb25zLjwvZGl2PgogPGRp
diBpZD0iY29uc29sZSI+PC9kaXY+Ci08c2NyaXB0IGlkPSJnb29kVmVydGV4U2hhZGVyIiB0eXBl
PSJ4LXNoYWRlci94LXZlcnRleCI+Cis8c2NyaXB0IGlkPSJnb29kVmVydGV4U2hhZGVyMSIgdHlw
ZT0ieC1zaGFkZXIveC12ZXJ0ZXgiPgorLy8gQSB2ZXJ0ZXggc2hhZGVyIHdoZXJlIHRoZSBuZWVk
ZWQgYXR0cmliIGxvY2F0aW9uIGlzIGxvbmcsIGJ1dCBub3Qgb3ZlciB0aGUgbGltaXQuCithdHRy
aWJ1dGUgdmVjNCB2UG9zaXRpb24wMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2
Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDsKKwordm9pZCBtYWluKCkKK3sKKyAg
ICBnbF9Qb3NpdGlvbiA9IHZQb3NpdGlvbjAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAx
MjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwOworfQorPC9zY3JpcHQ+Cis8
c2NyaXB0IGlkPSJnb29kVmVydGV4U2hhZGVyMiIgdHlwZT0ieC1zaGFkZXIveC12ZXJ0ZXgiPgog
Ly8gQSB2ZXJ0ZXggc2hhZGVyIHdoZXJlIHRoZSBuZWVkZWQgYXR0cmliIGxvY2F0aW9uIGlzIGV4
YWN0bHkgMjU2IGNoYXJhY3RlcnMuCiBhdHRyaWJ1dGUgdmVjNCB2UG9zaXRpb24wMTIzNDU2Nzg5
MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2
Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIz
NDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkw
MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3
ODkwMTIzNDU2OwogCkBAIC00Nyw3ICs1NiwxOCBAQCB2YXIgd3R1ID0gV2ViR0xUZXN0VXRpbHM7
CiB2YXIgZ2wgPSB3dHUuY3JlYXRlM0RDb250ZXh0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJl
eGFtcGxlIikpOwogCiBkZWJ1ZygiVGVzdCBhdHRyaWIgbG9jYXRpb24gdW5kZXJuZWF0aCB0aGUg
bGVuZ3RoIGxpbWl0Iik7Ci12YXIgcHJvZ3JhbSA9IHd0dS5sb2FkUHJvZ3JhbUZyb21TY3JpcHQo
Z2wsICJnb29kVmVydGV4U2hhZGVyIiwgImZyYWdtZW50U2hhZGVyIik7Cit2YXIgcHJvZ3JhbSA9
IHd0dS5sb2FkUHJvZ3JhbUZyb21TY3JpcHQoZ2wsICJnb29kVmVydGV4U2hhZGVyMSIsICJmcmFn
bWVudFNoYWRlciIpOworc2hvdWxkQmUoJ2dsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwg
Z2wuTElOS19TVEFUVVMpJywgJ3RydWUnKTsKK3ZhciBhdHRyaWJMb2MgPSBnbC5nZXRBdHRyaWJM
b2NhdGlvbihwcm9ncmFtLCAidlBvc2l0aW9uMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5
MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiKTsKK2lmIChhdHRyaWJM
b2MgPT0gLTEpIHsKKyAgICB0ZXN0RmFpbGVkKCJhdHRyaWIgbG9jYXRpb24gd2FzIC0xLCBzaG91
bGQgbm90IGJlIik7Cit9IGVsc2UgeworICAgIHRlc3RQYXNzZWQoImF0dHJpYiBsb2NhdGlvbiBz
aG91bGQgbm90IGJlIC0xIik7Cit9Cit3dHUuZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5OT05FKTsK
KworZGVidWcoIlRlc3QgYXR0cmliIGxvY2F0aW9uIGV4YWN0bHkgYXQgdGhlIGxlbmd0aCBsaW1p
dCIpOwordmFyIHByb2dyYW0gPSB3dHUubG9hZFByb2dyYW1Gcm9tU2NyaXB0KGdsLCAiZ29vZFZl
cnRleFNoYWRlcjIiLCAiZnJhZ21lbnRTaGFkZXIiKTsKIHNob3VsZEJlKCdnbC5nZXRQcm9ncmFt
UGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJTktfU1RBVFVTKScsICd0cnVlJyk7CiB2YXIgYXR0cmli
TG9jID0gZ2wuZ2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgInZQb3NpdGlvbjAxMjM0NTY3ODkw
MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3
ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0
NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAx
MjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4
OTAxMjM0NTYiKTsKIGlmIChhdHRyaWJMb2MgPT0gLTEpIHsKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Zhc3QvY2FudmFzL3dlYmdsL3VuaWZvcm0tbG9jYXRpb24tbGVuZ3RoLWxpbWl0cy1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC91bmlmb3JtLWxvY2F0aW9u
LWxlbmd0aC1saW1pdHMtZXhwZWN0ZWQudHh0CmluZGV4IDllMDk4ZWRmMGIzODU3NTNhNTJhNDRi
YWQ2ZThmMzg5YzkxNmVjNzEuLjVlZDdiZWQzNWJlNmZjZDdkODJlNmVjYzJlZGZlNzhhNDAyNzBl
OTUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3VuaWZvcm0tbG9j
YXRpb24tbGVuZ3RoLWxpbWl0cy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9j
YW52YXMvd2ViZ2wvdW5pZm9ybS1sb2NhdGlvbi1sZW5ndGgtbGltaXRzLWV4cGVjdGVkLnR4dApA
QCAtMyw2ICszLDEwIEBAIFRlc3QgdW5pZm9ybSBsb2NhdGlvbiB1bmRlcm5lYXRoIHRoZSBsZW5n
dGggbGltaXQKIFBBU1MgZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NU
QVRVUykgaXMgdHJ1ZQogUEFTUyB1bmlmb3JtTG9jIGlzIG5vbi1udWxsLgogUEFTUyBnZXRFcnJv
ciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCitUZXN0IHVuaWZvcm0gbG9jYXRpb24g
ZXhhY3RseSBhdCB0aGUgbGVuZ3RoIGxpbWl0CitQQVNTIGdsLmdldFByb2dyYW1QYXJhbWV0ZXIo
cHJvZ3JhbSwgZ2wuTElOS19TVEFUVVMpIGlzIHRydWUKK1BBU1MgdW5pZm9ybUxvYyBpcyBub24t
bnVsbC4KK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6IAogVGVz
dCB1bmlmb3JtIGxvY2F0aW9uIG92ZXIgdGhlIGxlbmd0aCBsaW1pdAogUEFTUyBnZXRFcnJvciB3
YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCiBQQVNTIGdsLmdldFByb2dyYW1QYXJhbWV0
ZXIocHJvZ3JhbSwgZ2wuTElOS19TVEFUVVMpIGlzIHRydWUKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Zhc3QvY2FudmFzL3dlYmdsL3VuaWZvcm0tbG9jYXRpb24tbGVuZ3RoLWxpbWl0cy5odG1s
IGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdW5pZm9ybS1sb2NhdGlvbi1sZW5ndGgt
bGltaXRzLmh0bWwKaW5kZXggMDAwZDQ4YzU4OWNiMTg5OGE0MGJmYmZlMDBmOGMwZmJlYTFjYmM2
YS4uNDVkZGY5MzkzOWJmMDU1NTk2ODFlMmUxOWRlM2JmMjNiMjE2M2RiYyAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdW5pZm9ybS1sb2NhdGlvbi1sZW5ndGgtbGlt
aXRzLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdW5pZm9ybS1sb2Nh
dGlvbi1sZW5ndGgtbGltaXRzLmh0bWwKQEAgLTEzLDcgKzEzLDIzIEBAIFRoZXJlIGlzIHN1cHBv
c2VkIHRvIGJlIGFuIGV4YW1wbGUgZHJhd2luZyBoZXJlLCBidXQgaXQncyBub3QgaW1wb3J0YW50
LgogPC9jYW52YXM+CiA8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+VmVyaWZ5IGxpbWl0cyBvbiB0aGUg
bGVuZ3RocyBvZiB1bmlmb3JtIGxvY2F0aW9ucy48L2Rpdj4KIDxkaXYgaWQ9ImNvbnNvbGUiPjwv
ZGl2PgotPHNjcmlwdCBpZD0iZ29vZFZlcnRleFNoYWRlciIgdHlwZT0ieC1zaGFkZXIveC12ZXJ0
ZXgiPgorPHNjcmlwdCBpZD0iZ29vZFZlcnRleFNoYWRlcjEiIHR5cGU9Ingtc2hhZGVyL3gtdmVy
dGV4Ij4KKy8vIEEgdmVydGV4IHNoYWRlciB3aGVyZSB0aGUgdW5pZm9ybSBuYW1lIGlzIGxvbmcs
IGJ1dCB3ZWxsIGJlbG93IHRoZSBsaW1pdC4KK3N0cnVjdCBOZXN0aW5nMiB7CisgICAgdmVjNCBp
ZGVudGlmaWVyNjJDaGFyYWN0ZXJzTG9uZ18wMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkw
MTIzNDsKK307CisKK3N0cnVjdCBOZXN0aW5nMSB7CisgICAgTmVzdGluZzIgaWRlbnRpZmllcjY0
Q2hhcmFjdGVyc0xvbmdfMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1NjsKK307
CisKK3VuaWZvcm0gTmVzdGluZzEgaWRlbnRpZmllcjcwQ2hhcmFjdGVyc0xvbmdfMDEyMzQ1Njc4
OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTA7CisKK3ZvaWQgbWFpbigpIHsKKyAgICBn
bF9Qb3NpdGlvbiA9IGlkZW50aWZpZXI3MENoYXJhY3RlcnNMb25nXzAxMjM0NTY3ODkwMTIzNDU2
Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwLmlkZW50aWZpZXI2NENoYXJhY3RlcnNMb25nXzAxMjM0
NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTYuaWRlbnRpZmllcjYyQ2hhcmFjdGVyc0xv
bmdfMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ7Cit9Cis8L3NjcmlwdD4KKzxz
Y3JpcHQgaWQ9Imdvb2RWZXJ0ZXhTaGFkZXIyIiB0eXBlPSJ4LXNoYWRlci94LXZlcnRleCI+CiAv
LyBBIHZlcnRleCBzaGFkZXIgd2hlcmUgdGhlIG5lZWRlZCB1bmlmb3JtIGxvY2F0aW9uIGlzIGV4
YWN0bHkgMjU2IGNoYXJhY3RlcnMuCiBzdHJ1Y3QgTmVzdGluZzIgewogICAgIHZlYzQgaWRlbnRp
ZmllcjYyQ2hhcmFjdGVyc0xvbmdfMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ7
CkBAIC02Miw3ICs3OCwxNCBAQCB2YXIgd3R1ID0gV2ViR0xUZXN0VXRpbHM7CiB2YXIgZ2wgPSB3
dHUuY3JlYXRlM0RDb250ZXh0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJleGFtcGxlIikpOwog
CiBkZWJ1ZygiVGVzdCB1bmlmb3JtIGxvY2F0aW9uIHVuZGVybmVhdGggdGhlIGxlbmd0aCBsaW1p
dCIpOwotdmFyIHByb2dyYW0gPSB3dHUubG9hZFByb2dyYW1Gcm9tU2NyaXB0KGdsLCAiZ29vZFZl
cnRleFNoYWRlciIsICJmcmFnbWVudFNoYWRlciIpOwordmFyIHByb2dyYW0gPSB3dHUubG9hZFBy
b2dyYW1Gcm9tU2NyaXB0KGdsLCAiZ29vZFZlcnRleFNoYWRlcjEiLCAiZnJhZ21lbnRTaGFkZXIi
KTsKK3Nob3VsZEJlKCdnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJTktfU1RB
VFVTKScsICd0cnVlJyk7Cit2YXIgdW5pZm9ybUxvYyA9IGdsLmdldFVuaWZvcm1Mb2NhdGlvbihw
cm9ncmFtLCAiaWRlbnRpZmllcjcwQ2hhcmFjdGVyc0xvbmdfMDEyMzQ1Njc4OTAxMjM0NTY3ODkw
MTIzNDU2Nzg5MDEyMzQ1Njc4OTAuaWRlbnRpZmllcjY0Q2hhcmFjdGVyc0xvbmdfMDEyMzQ1Njc4
OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Ni5pZGVudGlmaWVyNjJDaGFyYWN0ZXJzTG9uZ18w
MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCIpOworc2hvdWxkQmVOb25OdWxsKCd1
bmlmb3JtTG9jJyk7Cit3dHUuZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5OT05FKTsKKworZGVidWco
IlRlc3QgdW5pZm9ybSBsb2NhdGlvbiBleGFjdGx5IGF0IHRoZSBsZW5ndGggbGltaXQiKTsKK3Zh
ciBwcm9ncmFtID0gd3R1LmxvYWRQcm9ncmFtRnJvbVNjcmlwdChnbCwgImdvb2RWZXJ0ZXhTaGFk
ZXIyIiwgImZyYWdtZW50U2hhZGVyIik7CiBzaG91bGRCZSgnZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRl
cihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUyknLCAndHJ1ZScpOwogdmFyIHVuaWZvcm1Mb2MgPSBn
bC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgImlkZW50aWZpZXIxMjhDaGFyYWN0ZXJzTG9u
Z18wMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0
NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5LmlkZW50aWZpZXI2
NENoYXJhY3RlcnNMb25nXzAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTYuaWRl
bnRpZmllcjYyQ2hhcmFjdGVyc0xvbmdfMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEy
MzQiKTsKIHNob3VsZEJlTm9uTnVsbCgndW5pZm9ybUxvYycpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9tYWMvVGVzdEV4cGVjdGF0aW9ucwppbmRleCBhZmM5YTI2YTUyY2FhNWZiY2RmMzEwMjk3MDE1
YWE3N2FlOTQ3MmMxLi43MTY2NmRhNmZjZTdmZjIzMzAxMTg1Y2RkMThkM2M0OTZhZGMxMWMyIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9ucworKysg
Yi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9ucwpAQCAtNDc5LDEwICs0
NzksNiBAQCBmYXN0L2V2ZW50cy9wbGF0Zm9ybS13aGVlbGV2ZW50LXBhZ2luZy15LWluLW5vbi1z
Y3JvbGxpbmctcGFnZS5odG1sCiBmYXN0L2V2ZW50cy9wbGF0Zm9ybS13aGVlbGV2ZW50LXBhZ2lu
Zy15LWluLXNjcm9sbGluZy1kaXYuaHRtbAogZmFzdC9ldmVudHMvcGxhdGZvcm0td2hlZWxldmVu
dC1wYWdpbmcteS1pbi1zY3JvbGxpbmctcGFnZS5odG1sCiAKLSMgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTcwOTg5Ci1mYXN0L2NhbnZhcy93ZWJnbC9hdHRyaWItbG9j
YXRpb24tbGVuZ3RoLWxpbWl0cy5odG1sCi1mYXN0L2NhbnZhcy93ZWJnbC91bmlmb3JtLWxvY2F0
aW9uLWxlbmd0aC1saW1pdHMuaHRtbAotCiAjIFdlYiBJbnRlbnRzIGlzIG5vdCB5ZXQgZW5hYmxl
ZC4KIHdlYmludGVudHMvCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167012</attachid>
            <date>2012-10-03 17:58:53 -0700</date>
            <delta_ts>2012-10-04 03:50:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70989-20121004105803.patch</filename>
            <type>text/plain</type>
            <size>30861</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMwMjM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWE5NzQ3ZDdjY2NiNmM0
ZDUxOWJmMTkxMTBjNmM5OGNmZDQxNTE0MS4uZmZmNmY4YmU3NzQ3Nzg0NWFkYmVhNTRiNmE0Yzdi
YjVjMjc4MWNhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY3IEBACisyMDEyLTEwLTAzICBEZWFu
IEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KKworICAgICAgICBBdHRyaWJ1dGUgYW5kIFVuaWZv
cm0gdmFyaWFibGUgbmFtZXMgbmVlZCB0cmFuc2xhdGlvbiBpbiBzaGFkZXIKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwOTg5CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViR0wgc3BlY2lmaWVzIHNvbWUg
bWF4aW11bSBsZW5ndGhzIGZvciB2YXJpYWJsZSBuYW1lcyAoYXR0cmlidXRlcworICAgICAgICBh
bmQgdW5pZm9ybXMpLiBBbHNvLCBzb21lIEdMIGRyaXZlcnMgaGF2ZSBpc3N1ZXMgd2l0aCBsb25n
IG5hbWVzLiBGb3IKKyAgICAgICAgdGhhdCByZWFzb24sIEFOR0xFIGhhcyBhbiBvcHRpb24gdG8g
cmV3cml0ZSB0aGUgc2hhZGVyLCB0cmFuc2xhdGluZworICAgICAgICBsb25nIG5hbWVzIGludG8g
c2hvcnQgbmFtZXMuIFR1cm5pbmcgdGhpcyBvbiBoZWxwcyBzaGFkZXJzIGNvbXBpbGUsCisgICAg
ICAgIGJ1dCB3ZSBuZWVkIHRvIGtlZXAgYSBtYXBwaW5nIGJldHdlZW4gdGhlIG9yaWdpbmFsIG5h
bWVzIGFuZCB0aGUKKyAgICAgICAgdHJhbnNsYXRlZCBuYW1lcywgc28gdGhhdCB3ZSBiaW5kIHRv
IHRoZSByaWdodCBsb2NhdGlvbiBmcm9tIHVzZXIgY29kZQorICAgICAgICAod2hpY2ggd29uJ3Qg
ZXZlciBzZWUgdGhlIHRyYW5zbGF0ZWQgc291cmNlKS4KKworICAgICAgICBUaGlzIHByb3ZpZGVk
IGFuIG9wcG9ydHVuaXR5IHRvIGNsZWFuIHVwIHNvbWUgb3RoZXIgYml0cyBvZiBjb2RlOgorICAg
ICAgICBDU1MgRmlsdGVycyBleGFtaW5lZCB0aGUgdW5pZm9ybSBuYW1lcyBhZnRlciBhIGNvbXBp
bGF0aW9uOyBJdCBjYW4KKyAgICAgICAgbm93IHVzZSB0aGUgdmFyaWFibGUgbmFtZSBtYXAuIEkg
YWxzbyBhZGRlZCBhIHR5cGVkZWYgZm9yIHRoZQorICAgICAgICBIYXNoTWFwcyB0aGF0IGtlZXAg
dGhlIHNoYWRlciwgdGhlIHNvdXJjZSBjb2RlIGFuZCB0aGUgdmFyaWFibGUgbmFtZQorICAgICAg
ICBtYXBwaW5ncy4KKworICAgICAgICBJIGFsc28gb3BlbmVkIGEgZm9sbG93dXAgYnVnIHRvIG1h
a2Ugc3VyZSB0aGVzZSB0YWJsZXMgYXJlIGRlbGV0ZWQKKyAgICAgICAgd2hlbiB0aGUgYXNzb2Np
YXRlZCBzaGFkZXJzIChvciBsaW5rZWQgcHJvZ3JhbXMpIGdvIGF3YXk6CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05ODIwNAorCisgICAgICAgIENvdmVy
ZWQgYnkgZXhpc3RpbmcgdGVzdHMgKHdpdGggc29tZSBlbmhhbmNlbWVudHMpOgorICAgICAgICAt
IGZhc3QvY2FudmFzL3dlYmdsL2F0dHJpYi1sb2NhdGlvbi1sZW5ndGgtbGltaXRzLmh0bWw6Cisg
ICAgICAgIC0gZmFzdC9jYW52YXMvd2ViZ2wvdW5pZm9ybS1sb2NhdGlvbi1sZW5ndGgtbGltaXRz
Lmh0bWw6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktpdEJyaWRnZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRTeW1ib2xJbmZvKTogRXh0cmFjdHMgYWxsIHRoZSBp
bmZvcm1hdGlvbiBvbiBzeW1ib2xzIChlaXRoZXIgYXR0cmlidXRlcworICAgICAgICBvciB1bmlm
b3JtcykgZnJvbSB0aGUgbmV3bHkgY29tcGlsZWQgc2hhZGVyLgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpBTkdMRVdlYktpdEJyaWRnZTo6Y29tcGlsZVNoYWRlclNvdXJj
ZSk6IE5ldyBtZXRob2QgbmFtZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdl
YktpdEJyaWRnZS5oOgorICAgICAgICAoV2ViQ29yZTo6Z2V0VW5pZm9ybXMpOiBEZWxldGVkIHRo
aXMgbWV0aG9kLgorICAgICAgICAoV2ViQ29yZTo6QU5HTEVTaGFkZXJTeW1ib2w6OmlzU2FtcGxl
cik6IE1ha2Ugc3VyZSB0aGUgc3ltYm9sIGlzIGEgdW5pZm9ybS4KKyAgICAgICAgKEFOR0xFV2Vi
S2l0QnJpZGdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQz
RC5oOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OlN5bWJvbEluZm86OlN5
bWJvbEluZm8pOiBBIG5ldyBvYmplY3QgdGhhdAorICAgICAgICBob2xkcyB0aGUgc2l6ZSwgdHlw
ZSBhbmQgdHJhbnNsYXRlZCBuYW1lIG9mIGEgc3ltYm9sIGZyb20gYSBXZWJHTCBzaGFkZXIuCisg
ICAgICAgIChTaGFkZXJTb3VyY2VFbnRyeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6U2hhZGVyU291cmNlRW50cnk6OlNoYWRlclNvdXJjZUVudHJ5KTogTm93IGtlZXBz
IHRyYWNrCisgICAgICAgIG9mIHRoZSB0cmFuc2xhdGVkIHNvdXJjZSBjb2RlIGFuZCBzeW1ib2wg
bWFwcGluZ3MuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6U2hhZGVyU291
cmNlRW50cnk6OnN5bWJvbE1hcCk6IEhlbHBlciBmdW5jdGlvbiB0bworICAgICAgICBnZXQgdGhl
IG1lbWJlciB2YXJpYWJsZSBjb3JyZXNwb25kaW5nIHRvIHRoZSB0eXBlIG9mIHN5bWJvbCB5b3Un
cmUgYXNraW5nIGZvLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9t
RmlsdGVyVmFsaWRhdGVkUHJvZ3JhbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21GaWx0
ZXJWYWxpZGF0ZWRQcm9ncmFtOjpDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtKTogQ2FsbHMg
bmV3IG1ldGhvZAorICAgICAgICBuYW1lIHdoaWNoIGFsc28gcHJvZHVjZXMgYSBzZXQgb2Ygc3lt
Ym9scyB0byBleGFtaW5lLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRl
bnNpb25zM0RPcGVuR0xDb21tb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNE
T3BlbkdMQ29tbW9uOjpnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUpOiBXZSBub3cgY2Fu
IHBhc3MKKyAgICAgICAgaW4gc29tZSBleHRyYSBjb21waWxlIG9wdGlvbnMgdG8gZG8gdHJhbnNs
YXRpb24gb2YgbG9uZyBzeW1ib2wgbmFtZXMuIEFsc28gZmlsbCB0aGUKKyAgICAgICAgbWFwIG9m
IHRyYW5zbGF0ZWQgc3ltYm9sIG5hbWVzLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6Y29tcGlsZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6bWFwcGVkU3ltYm9sTmFtZSk6IFJldHVybnMgdGhlIG1hcHBlZCBu
YW1lIGZvcgorICAgICAgICBhIHNoYWRlciBzeW1ib2wgaWYgaXQgd2FzIHRyYW5zbGF0ZWQgZHVy
aW5nIGNvbXBpbGF0aW9uLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpnZXRTaGFkZXJJbmZvTG9nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpnZXRTaGFkZXJTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmdldFVuaWZvcm1Mb2NhdGlvbik6CisKIDIwMTItMTAtMDIgIERlYW4gSmFj
a3NvbiAgPGRpbm9AYXBwbGUuY29tPgogCiAgICAgICAgIEV4cG9zZSBzb21lIEdQVSBJbmZvcm1h
dGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVX
ZWJLaXRCcmlkZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVX
ZWJLaXRCcmlkZ2UuY3BwCmluZGV4IGI2NDcyM2EwODEyYTI3MDc5MTU5YjdiMWJjMDI5ZjMwNmVk
YzRkMzkuLjllYmU4NWIxZDMxZWIwYjY5MzliNmU3MWY2YmVhOTY1YjBhMWJhYzQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktpdEJyaWRn
ZS5jcHAKQEAgLTM5LDYgKzM5LDY4IEBAIGlubGluZSBzdGF0aWMgaW50IGdldFZhbGlkYXRpb25S
ZXN1bHRWYWx1ZShjb25zdCBTaEhhbmRsZSBjb21waWxlciwgU2hTaGFkZXJJbmZvCiAgICAgcmV0
dXJuIHZhbHVlOwogfQogCitzdGF0aWMgYm9vbCBnZXRTeW1ib2xJbmZvKFNoSGFuZGxlIGNvbXBp
bGVyLCBTaFNoYWRlckluZm8gc3ltYm9sVHlwZSwgVmVjdG9yPEFOR0xFU2hhZGVyU3ltYm9sPiYg
c3ltYm9scykKK3sKKyAgICBTaFNoYWRlckluZm8gc3ltYm9sTWF4TmFtZUxlbmd0aFR5cGU7CisK
KyAgICBzd2l0Y2ggKHN5bWJvbFR5cGUpIHsKKyAgICBjYXNlIFNIX0FDVElWRV9BVFRSSUJVVEVT
OgorICAgICAgICBzeW1ib2xNYXhOYW1lTGVuZ3RoVHlwZSA9IFNIX0FDVElWRV9BVFRSSUJVVEVf
TUFYX0xFTkdUSDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTSF9BQ1RJVkVfVU5JRk9STVM6
CisgICAgICAgIHN5bWJvbE1heE5hbWVMZW5ndGhUeXBlID0gU0hfQUNUSVZFX1VOSUZPUk1fTUFY
X0xFTkdUSDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpbnQgbnVt
U3ltYm9scyA9IGdldFZhbGlkYXRpb25SZXN1bHRWYWx1ZShjb21waWxlciwgc3ltYm9sVHlwZSk7
CisgICAgaWYgKG51bVN5bWJvbHMgPCAwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBp
bnQgbWF4TmFtZUxlbmd0aCA9IGdldFZhbGlkYXRpb25SZXN1bHRWYWx1ZShjb21waWxlciwgc3lt
Ym9sTWF4TmFtZUxlbmd0aFR5cGUpOworICAgIGlmIChtYXhOYW1lTGVuZ3RoIDw9IDEpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGludCBtYXhNYXBwZWROYW1lTGVuZ3RoID0gZ2V0VmFs
aWRhdGlvblJlc3VsdFZhbHVlKGNvbXBpbGVyLCBTSF9NQVBQRURfTkFNRV9NQVhfTEVOR1RIKTsK
KyAgICBpZiAobWF4TWFwcGVkTmFtZUxlbmd0aCA8PSAxKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAvLyBUaGUgbWF4aW11bSBhbGxvd2VkIHN5bWJvbCBuYW1lIGxlbmd0aCBpcyAyNTYg
Y2hhcmFjdGVycy4KKyAgICBWZWN0b3I8Y2hhciwgMjU2PiBuYW1lQnVmZmVyKG1heE5hbWVMZW5n
dGgpOworICAgIFZlY3RvcjxjaGFyLCAyNTY+IG1hcHBlZE5hbWVCdWZmZXIobWF4TWFwcGVkTmFt
ZUxlbmd0aCk7CisgICAgCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1TeW1ib2xzOyArK2kp
IHsKKyAgICAgICAgQU5HTEVTaGFkZXJTeW1ib2wgc3ltYm9sOworICAgICAgICBpbnQgbmFtZUxl
bmd0aCA9IC0xOworICAgICAgICBzd2l0Y2ggKHN5bWJvbFR5cGUpIHsKKyAgICAgICAgY2FzZSBT
SF9BQ1RJVkVfQVRUUklCVVRFUzoKKyAgICAgICAgICAgIHN5bWJvbC5zeW1ib2xUeXBlID0gU0hB
REVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURTsKKyAgICAgICAgICAgIFNoR2V0QWN0aXZlQXR0cmli
KGNvbXBpbGVyLCBpLCAmbmFtZUxlbmd0aCwgJnN5bWJvbC5zaXplLCAmc3ltYm9sLmRhdGFUeXBl
LCBuYW1lQnVmZmVyLmRhdGEoKSwgbWFwcGVkTmFtZUJ1ZmZlci5kYXRhKCkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgU0hfQUNUSVZFX1VOSUZPUk1TOgorICAgICAgICAgICAg
c3ltYm9sLnN5bWJvbFR5cGUgPSBTSEFERVJfU1lNQk9MX1RZUEVfVU5JRk9STTsKKyAgICAgICAg
ICAgIFNoR2V0QWN0aXZlVW5pZm9ybShjb21waWxlciwgaSwgJm5hbWVMZW5ndGgsICZzeW1ib2wu
c2l6ZSwgJnN5bWJvbC5kYXRhVHlwZSwgbmFtZUJ1ZmZlci5kYXRhKCksIG1hcHBlZE5hbWVCdWZm
ZXIuZGF0YSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKG5hbWVMZW5ndGggPD0gMCkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIC8vIFRoZSBTaEdldEFjdGl2ZSogY2FsbHMgYWJv
dmUgYXJlIGd1YXJhbnRlZWQgdG8gcHJvZHVjZSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5ncyBmb3IK
KyAgICAgICAgLy8gbmFtZUJ1ZmZlciBhbmQgbWFwcGVkTmFtZUJ1ZmZlci4gQWxzbywgdGhlIGNo
YXJhY3RlciBzZXQgZm9yIHN5bWJvbCBuYW1lcworICAgICAgICAvLyBpcyBhIHN1YnNldCBvZiBM
YXRpbi0xIGFzIHNwZWNpZmllZCBieSB0aGUgT3BlbkdMIEVTIFNoYWRpbmcgTGFuZ3VhZ2UsIFNl
Y3Rpb24gMy4xIGFuZAorICAgICAgICAvLyBXZWJHTCwgU2VjdGlvbiAiQ2hhcmFjdGVycyBPdXRz
aWRlIHRoZSBHTFNMIFNvdXJjZSBDaGFyYWN0ZXIgU2V0Ii4KKyAgICAgICAgc3ltYm9sLm5hbWUg
PSBTdHJpbmcobmFtZUJ1ZmZlci5kYXRhKCkpOworICAgICAgICBzeW1ib2wubWFwcGVkTmFtZSA9
IFN0cmluZyhtYXBwZWROYW1lQnVmZmVyLmRhdGEoKSk7CisgICAgICAgIHN5bWJvbHMuYXBwZW5k
KHN5bWJvbCk7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCiBBTkdMRVdlYktpdEJyaWRn
ZTo6QU5HTEVXZWJLaXRCcmlkZ2UoU2hTaGFkZXJPdXRwdXQgc2hhZGVyT3V0cHV0LCBTaFNoYWRl
clNwZWMgc2hhZGVyU3BlYykKICAgICA6IGJ1aWx0Q29tcGlsZXJzKGZhbHNlKQogICAgICwgbV9m
cmFnbWVudENvbXBpbGVyKDApCkBAIC03NSw3ICsxMzcsNyBAQCB2b2lkIEFOR0xFV2ViS2l0QnJp
ZGdlOjpzZXRSZXNvdXJjZXMoU2hCdWlsdEluUmVzb3VyY2VzIHJlc291cmNlcykKICAgICBtX3Jl
c291cmNlcyA9IHJlc291cmNlczsKIH0KIAotYm9vbCBBTkdMRVdlYktpdEJyaWRnZTo6dmFsaWRh
dGVTaGFkZXJTb3VyY2UoY29uc3QgY2hhciogc2hhZGVyU291cmNlLCBBTkdMRVNoYWRlclR5cGUg
c2hhZGVyVHlwZSwgU3RyaW5nJiB0cmFuc2xhdGVkU2hhZGVyU291cmNlLCBTdHJpbmcmIHNoYWRl
clZhbGlkYXRpb25Mb2csIGludCBleHRyYUNvbXBpbGVPcHRpb25zKQorYm9vbCBBTkdMRVdlYktp
dEJyaWRnZTo6Y29tcGlsZVNoYWRlclNvdXJjZShjb25zdCBjaGFyKiBzaGFkZXJTb3VyY2UsIEFO
R0xFU2hhZGVyVHlwZSBzaGFkZXJUeXBlLCBTdHJpbmcmIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2Us
IFN0cmluZyYgc2hhZGVyVmFsaWRhdGlvbkxvZywgVmVjdG9yPEFOR0xFU2hhZGVyU3ltYm9sPiYg
c3ltYm9scywgaW50IGV4dHJhQ29tcGlsZU9wdGlvbnMpCiB7CiAgICAgaWYgKCFidWlsdENvbXBp
bGVycykgewogICAgICAgICBtX2ZyYWdtZW50Q29tcGlsZXIgPSBTaENvbnN0cnVjdENvbXBpbGVy
KFNIX0ZSQUdNRU5UX1NIQURFUiwgbV9zaGFkZXJTcGVjLCBtX3NoYWRlck91dHB1dCwgJm1fcmVz
b3VyY2VzKTsKQEAgLTExOCwzNSArMTgwLDExIEBAIGJvb2wgQU5HTEVXZWJLaXRCcmlkZ2U6OnZh
bGlkYXRlU2hhZGVyU291cmNlKGNvbnN0IGNoYXIqIHNoYWRlclNvdXJjZSwgQU5HTEVTaGFkCiAg
ICAgICAgIFNoR2V0T2JqZWN0Q29kZShjb21waWxlciwgdHJhbnNsYXRpb25CdWZmZXIuZ2V0KCkp
OwogICAgICAgICB0cmFuc2xhdGVkU2hhZGVyU291cmNlID0gdHJhbnNsYXRpb25CdWZmZXIuZ2V0
KCk7CiAgICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQU5HTEVXZWJLaXRCcmlk
Z2U6OmdldFVuaWZvcm1zKFNoU2hhZGVyVHlwZSBzaGFkZXJUeXBlLCBWZWN0b3I8QU5HTEVTaGFk
ZXJTeW1ib2w+ICZzeW1ib2xzKQotewotICAgIGNvbnN0IFNoSGFuZGxlIGNvbXBpbGVyID0gKHNo
YWRlclR5cGUgPT0gU0hfVkVSVEVYX1NIQURFUiA/IG1fdmVydGV4Q29tcGlsZXIgOiBtX2ZyYWdt
ZW50Q29tcGlsZXIpOwotCi0gICAgaW50IG51bVVuaWZvcm1zID0gZ2V0VmFsaWRhdGlvblJlc3Vs
dFZhbHVlKGNvbXBpbGVyLCBTSF9BQ1RJVkVfVU5JRk9STVMpOwotICAgIGlmIChudW1Vbmlmb3Jt
cyA8IDApCisgICAgCisgICAgaWYgKCFnZXRTeW1ib2xJbmZvKGNvbXBpbGVyLCBTSF9BQ1RJVkVf
QVRUUklCVVRFUywgc3ltYm9scykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIW51
bVVuaWZvcm1zKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGludCBtYXhOYW1lTGVuZ3Ro
ID0gZ2V0VmFsaWRhdGlvblJlc3VsdFZhbHVlKGNvbXBpbGVyLCBTSF9BQ1RJVkVfVU5JRk9STV9N
QVhfTEVOR1RIKTsKLSAgICBpZiAobWF4TmFtZUxlbmd0aCA8PSAxKQorICAgIGlmICghZ2V0U3lt
Ym9sSW5mbyhjb21waWxlciwgU0hfQUNUSVZFX1VOSUZPUk1TLCBzeW1ib2xzKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIE93bkFycmF5UHRyPGNoYXI+IG5hbWVCdWZmZXIgPSBhZG9wdEFy
cmF5UHRyKG5ldyBjaGFyW21heE5hbWVMZW5ndGhdKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbnVtVW5pZm9ybXM7ICsraSkgewotICAgICAgICBBTkdMRVNoYWRlclN5bWJvbCBzeW1ib2w7
Ci0gICAgICAgIHN5bWJvbC5zeW1ib2xUeXBlID0gU0hBREVSX1NZTUJPTF9UWVBFX1VOSUZPUk07
Ci0gICAgICAgIGludCBuYW1lTGVuZ3RoID0gLTE7Ci0gICAgICAgIFNoR2V0QWN0aXZlVW5pZm9y
bShjb21waWxlciwgaSwgJm5hbWVMZW5ndGgsICZzeW1ib2wuc2l6ZSwgJnN5bWJvbC5kYXRhVHlw
ZSwgbmFtZUJ1ZmZlci5nZXQoKSwgMCk7Ci0gICAgICAgIGlmIChuYW1lTGVuZ3RoIDw9IDApCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHN5bWJvbC5uYW1lID0gU3RyaW5nOjpm
cm9tVVRGOChuYW1lQnVmZmVyLmdldCgpLCBuYW1lTGVuZ3RoKTsKLSAgICAgICAgc3ltYm9scy5h
cHBlbmQoc3ltYm9sKTsKLSAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktpdEJyaWRnZS5oCmluZGV4
IDE5YzUwNGViMzkzNzA0OTk2ZTk1ZDMyMDgxY2ZjMGI1MzNmYjZiYjMuLmU3ODI1ODFlYTljM2Nm
NzZiZmRmNmYwNTJhNjU0MzE3MzM1MTIxZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuaApAQCAtNTAsMTIgKzUwLDE0IEBA
IGVudW0gQU5HTEVTaGFkZXJTeW1ib2xUeXBlIHsKIHN0cnVjdCBBTkdMRVNoYWRlclN5bWJvbCB7
CiAgICAgQU5HTEVTaGFkZXJTeW1ib2xUeXBlIHN5bWJvbFR5cGU7CiAgICAgU3RyaW5nIG5hbWU7
CisgICAgU3RyaW5nIG1hcHBlZE5hbWU7CiAgICAgU2hEYXRhVHlwZSBkYXRhVHlwZTsKICAgICBp
bnQgc2l6ZTsKIAogICAgIGJvb2wgaXNTYW1wbGVyKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBk
YXRhVHlwZSA9PSBTSF9TQU1QTEVSXzJECisgICAgICAgIHJldHVybiBzeW1ib2xUeXBlID09IFNI
QURFUl9TWU1CT0xfVFlQRV9VTklGT1JNCisgICAgICAgICAgICB8fCBkYXRhVHlwZSA9PSBTSF9T
QU1QTEVSXzJECiAgICAgICAgICAgICB8fCBkYXRhVHlwZSA9PSBTSF9TQU1QTEVSX0NVQkUKICAg
ICAgICAgICAgIHx8IGRhdGFUeXBlID09IFNIX1NBTVBMRVJfMkRfUkVDVF9BUkIKICAgICAgICAg
ICAgIHx8IGRhdGFUeXBlID09IFNIX1NBTVBMRVJfRVhURVJOQUxfT0VTOwpAQCAtNzEsMTIgKzcz
LDcgQEAgcHVibGljOgogICAgIFNoQnVpbHRJblJlc291cmNlcyBnZXRSZXNvdXJjZXMoKSB7IHJl
dHVybiBtX3Jlc291cmNlczsgfQogICAgIHZvaWQgc2V0UmVzb3VyY2VzKFNoQnVpbHRJblJlc291
cmNlcyk7CiAgICAgCi0gICAgYm9vbCB2YWxpZGF0ZVNoYWRlclNvdXJjZShjb25zdCBjaGFyKiBz
aGFkZXJTb3VyY2UsIEFOR0xFU2hhZGVyVHlwZSwgU3RyaW5nJiB0cmFuc2xhdGVkU2hhZGVyU291
cmNlLCBTdHJpbmcmIHNoYWRlclZhbGlkYXRpb25Mb2csIGludCBleHRyYUNvbXBpbGVPcHRpb25z
ID0gMCk7Ci0KLSAgICAvLyBHZXQgdGhlIHVuaWZvcm1zIGZvciB0aGUgbGFzdCB2YWxpZGF0ZWQg
c2hhZGVyIG9mIHR5cGUgU2hTaGFkZXJUeXBlLgotICAgIC8vIEZvciB0aGlzIGZ1bmN0aW9uIHRv
IHdvcmssIHlvdSBtdXN0IHVzZSB0aGUgU0hfQVRUUklCVVRFU19VTklGT1JNUyBjb21waWxlIG9w
dGlvbiBkdXJpbmcgdmFsaWRhdGlvbi4KLSAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIGFuIHVuZXhw
ZWN0ZWQgZXJyb3Igb2NjdXJyZWQgaW4gQU5HTEUuCi0gICAgYm9vbCBnZXRVbmlmb3JtcyhTaFNo
YWRlclR5cGUsIFZlY3RvcjxBTkdMRVNoYWRlclN5bWJvbD4gJnN5bWJvbHMpOworICAgIGJvb2wg
Y29tcGlsZVNoYWRlclNvdXJjZShjb25zdCBjaGFyKiBzaGFkZXJTb3VyY2UsIEFOR0xFU2hhZGVy
VHlwZSwgU3RyaW5nJiB0cmFuc2xhdGVkU2hhZGVyU291cmNlLCBTdHJpbmcmIHNoYWRlclZhbGlk
YXRpb25Mb2csIFZlY3RvcjxBTkdMRVNoYWRlclN5bWJvbD4mIHN5bWJvbHMsIGludCBleHRyYUNv
bXBpbGVPcHRpb25zID0gMCk7CiAKIHByaXZhdGU6CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCmluZGV4IDUzMjdmM2FlMjVh
YzBiYjZlODdmMzE3NGNmMWI4YjFiZGM5MDM5ODAuLjRkY2IyZDBlMmM0MWQ5OWMyNzNmOWQzNzM5
MDFmYTUwZDA0OTlhOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dDNELmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaApAQCAtOTY0LDE2ICs5NjQsNTkgQEAgcHVibGljOgog
I2VuZGlmCiAKICNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0o
UVQpIHx8IFBMQVRGT1JNKEVGTCkgfHwgUExBVEZPUk0oQkxBQ0tCRVJSWSkKKyAgICBzdHJ1Y3Qg
U3ltYm9sSW5mbyB7CisgICAgICAgIFN5bWJvbEluZm8oKQorICAgICAgICAgICAgOiB0eXBlKDAp
CisgICAgICAgICAgICAsIHNpemUoMCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAg
U3ltYm9sSW5mbyhHQzNEZW51bSB0eXBlLCBpbnQgc2l6ZSwgY29uc3QgU3RyaW5nJiBtYXBwZWRO
YW1lKQorICAgICAgICAgICAgOiB0eXBlKHR5cGUpCisgICAgICAgICAgICAsIHNpemUoc2l6ZSkK
KyAgICAgICAgICAgICwgbWFwcGVkTmFtZShtYXBwZWROYW1lKQorICAgICAgICB7CisgICAgICAg
IH0KKworICAgICAgICBib29sIG9wZXJhdG9yPT0oU3ltYm9sSW5mbyYgb3RoZXIpIGNvbnN0Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB0eXBlID09IG90aGVyLnR5cGUgJiYgc2l6ZSA9
PSBvdGhlci5zaXplICYmIG1hcHBlZE5hbWUgPT0gb3RoZXIubWFwcGVkTmFtZTsKKyAgICAgICAg
fQorCisgICAgICAgIEdDM0RlbnVtIHR5cGU7CisgICAgICAgIGludCBzaXplOworICAgICAgICBT
dHJpbmcgbWFwcGVkTmFtZTsKKyAgICB9OworCisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywg
U3ltYm9sSW5mbz4gU2hhZGVyU3ltYm9sTWFwOworCiAgICAgc3RydWN0IFNoYWRlclNvdXJjZUVu
dHJ5IHsKKyAgICAgICAgR0MzRGVudW0gdHlwZTsKICAgICAgICAgU3RyaW5nIHNvdXJjZTsKKyAg
ICAgICAgU3RyaW5nIHRyYW5zbGF0ZWRTb3VyY2U7CiAgICAgICAgIFN0cmluZyBsb2c7CiAgICAg
ICAgIGJvb2wgaXNWYWxpZDsKKyAgICAgICAgU2hhZGVyU3ltYm9sTWFwIGF0dHJpYnV0ZU1hcDsK
KyAgICAgICAgU2hhZGVyU3ltYm9sTWFwIHVuaWZvcm1NYXA7CiAgICAgICAgIFNoYWRlclNvdXJj
ZUVudHJ5KCkKLSAgICAgICAgICAgIDogaXNWYWxpZCgwKQorICAgICAgICAgICAgOiB0eXBlKFZF
UlRFWF9TSEFERVIpCisgICAgICAgICAgICAsIGlzVmFsaWQoZmFsc2UpCiAgICAgICAgIHsKICAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgU2hhZGVyU3ltYm9sTWFwJiBzeW1ib2xNYXAoQU5H
TEVTaGFkZXJTeW1ib2xUeXBlIHN5bWJvbFR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFT
U0VSVChzeW1ib2xUeXBlID09IFNIQURFUl9TWU1CT0xfVFlQRV9BVFRSSUJVVEUgfHwgc3ltYm9s
VHlwZSA9PSBTSEFERVJfU1lNQk9MX1RZUEVfVU5JRk9STSk7CisgICAgICAgICAgICBpZiAoc3lt
Ym9sVHlwZSA9PSBTSEFERVJfU1lNQk9MX1RZUEVfQVRUUklCVVRFKQorICAgICAgICAgICAgICAg
IHJldHVybiBhdHRyaWJ1dGVNYXA7CisgICAgICAgICAgICByZXR1cm4gdW5pZm9ybU1hcDsKKyAg
ICAgICAgfQogICAgIH07Ci0gICAgSGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0LCBTaGFkZXJTb3Vy
Y2VFbnRyeT4gbV9zaGFkZXJTb3VyY2VNYXA7CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8UGxhdGZv
cm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+IFNoYWRlclNvdXJjZU1hcDsKKyAgICBTaGFk
ZXJTb3VyY2VNYXAgbV9zaGFkZXJTb3VyY2VNYXA7CisKKyAgICBTdHJpbmcgbWFwcGVkU3ltYm9s
TmFtZShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEFOR0xFU2hhZGVyU3ltYm9sVHlwZSwgY29u
c3QgU3RyaW5nJiBuYW1lKTsKIAogICAgIEFOR0xFV2ViS2l0QnJpZGdlIG1fY29tcGlsZXI7CiAj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0uY3BwCmlu
ZGV4IDQyMTFlODJiNzgxYjFhMGFjYjUyN2YzMGRmNWMwMTQzOWM0NTE4MDkuLjlkYTViNWExNTM5
ZjE1MzQ1YTBjMjIxNmM1MjNiMmU0YTA1M2QyMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21G
aWx0ZXJWYWxpZGF0ZWRQcm9ncmFtLmNwcApAQCAtODUsOCArODUsOSBAQCBDdXN0b21GaWx0ZXJW
YWxpZGF0ZWRQcm9ncmFtOjpDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtKEN1c3RvbUZpbHRl
ckdsb2JhbENvbgogICAgIC8vIFNoYWRlcnMgcmVmZXJlbmNlZCBmcm9tIHRoZSBDU1MgbWl4IGZ1
bmN0aW9uIHVzZSBhIGRpZmZlcmVudCB2YWxpZGF0b3IgdGhhbiByZWd1bGFyIFdlYkdMIHNoYWRl
cnMuIFNlZSBDdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0LmggZm9yIG1vcmUgZGV0YWlscy4KICAg
ICBBTkdMRVdlYktpdEJyaWRnZSogdmFsaWRhdG9yID0gcHJvZ3JhbUluZm8ubWl4U2V0dGluZ3Mo
KS5lbmFibGVkID8gbV9nbG9iYWxDb250ZXh0LT5taXhTaGFkZXJWYWxpZGF0b3IoKSA6IG1fZ2xv
YmFsQ29udGV4dC0+d2ViZ2xTaGFkZXJWYWxpZGF0b3IoKTsKICAgICBTdHJpbmcgdmVydGV4U2hh
ZGVyTG9nLCBmcmFnbWVudFNoYWRlckxvZzsKLSAgICBib29sIHZlcnRleFNoYWRlclZhbGlkID0g
dmFsaWRhdG9yLT52YWxpZGF0ZVNoYWRlclNvdXJjZShvcmlnaW5hbFZlcnRleFNoYWRlci51dGY4
KCkuZGF0YSgpLCBTSEFERVJfVFlQRV9WRVJURVgsIG1fdmFsaWRhdGVkVmVydGV4U2hhZGVyLCB2
ZXJ0ZXhTaGFkZXJMb2csIFNIX0FUVFJJQlVURVNfVU5JRk9STVMpOwotICAgIGJvb2wgZnJhZ21l
bnRTaGFkZXJWYWxpZCA9IHZhbGlkYXRvci0+dmFsaWRhdGVTaGFkZXJTb3VyY2Uob3JpZ2luYWxG
cmFnbWVudFNoYWRlci51dGY4KCkuZGF0YSgpLCBTSEFERVJfVFlQRV9GUkFHTUVOVCwgbV92YWxp
ZGF0ZWRGcmFnbWVudFNoYWRlciwgZnJhZ21lbnRTaGFkZXJMb2csIFNIX0FUVFJJQlVURVNfVU5J
Rk9STVMpOworICAgIFZlY3RvcjxBTkdMRVNoYWRlclN5bWJvbD4gc3ltYm9sczsKKyAgICBib29s
IHZlcnRleFNoYWRlclZhbGlkID0gdmFsaWRhdG9yLT5jb21waWxlU2hhZGVyU291cmNlKG9yaWdp
bmFsVmVydGV4U2hhZGVyLnV0ZjgoKS5kYXRhKCksIFNIQURFUl9UWVBFX1ZFUlRFWCwgbV92YWxp
ZGF0ZWRWZXJ0ZXhTaGFkZXIsIHZlcnRleFNoYWRlckxvZywgc3ltYm9scyk7CisgICAgYm9vbCBm
cmFnbWVudFNoYWRlclZhbGlkID0gdmFsaWRhdG9yLT5jb21waWxlU2hhZGVyU291cmNlKG9yaWdp
bmFsRnJhZ21lbnRTaGFkZXIudXRmOCgpLmRhdGEoKSwgU0hBREVSX1RZUEVfRlJBR01FTlQsIG1f
dmFsaWRhdGVkRnJhZ21lbnRTaGFkZXIsIGZyYWdtZW50U2hhZGVyTG9nLCBzeW1ib2xzKTsKICAg
ICBpZiAoIXZlcnRleFNoYWRlclZhbGlkIHx8ICFmcmFnbWVudFNoYWRlclZhbGlkKSB7CiAgICAg
ICAgIC8vIEZJWE1FOiBSZXBvcnQgdGhlIHZhbGlkYXRpb24gZXJyb3JzLgogICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ0MTYKQEAgLTk0LDEyICs5
NSw3IEBAIEN1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW06OkN1c3RvbUZpbHRlclZhbGlkYXRl
ZFByb2dyYW0oQ3VzdG9tRmlsdGVyR2xvYmFsQ29uCiAgICAgfQogCiAgICAgLy8gVmFsaWRhdGUg
dGhlIGF1dGhvcidzIHNhbXBsZXJzLgotICAgIFZlY3RvcjxBTkdMRVNoYWRlclN5bWJvbD4gdW5p
Zm9ybXM7Ci0gICAgaWYgKCF2YWxpZGF0b3ItPmdldFVuaWZvcm1zKFNIX1ZFUlRFWF9TSEFERVIs
IHVuaWZvcm1zKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdG9yLT5nZXRVbmlm
b3JtcyhTSF9GUkFHTUVOVF9TSEFERVIsIHVuaWZvcm1zKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IGZvciAoVmVjdG9yPEFOR0xFU2hhZGVyU3ltYm9sPjo6aXRlcmF0b3IgaXQgPSB1bmlmb3Jtcy5i
ZWdpbigpOyBpdCAhPSB1bmlmb3Jtcy5lbmQoKTsgKytpdCkgeworICAgIGZvciAoVmVjdG9yPEFO
R0xFU2hhZGVyU3ltYm9sPjo6aXRlcmF0b3IgaXQgPSBzeW1ib2xzLmJlZ2luKCk7IGl0ICE9IHN5
bWJvbHMuZW5kKCk7ICsraXQpIHsKICAgICAgICAgaWYgKGl0LT5pc1NhbXBsZXIoKSkgewogICAg
ICAgICAgICAgLy8gRklYTUU6IEZvciBub3csIHdlIHJlc3RyaWN0IHNoYWRlcnMgd2l0aCBhbnkg
c2FtcGxlciBkZWZpbmVkLgogICAgICAgICAgICAgLy8gV2hlbiB3ZSBpbXBsZW1lbnQgdGV4dHVy
ZSBwYXJhbWV0ZXJzLCB3ZSB3aWxsIGFsbG93IHNoYWRlcnMgd2hvc2Ugc2FtcGxlcnMgYXJlIGJv
dW5kIHRvIHZhbGlkIHRleHR1cmVzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTENvbW1vbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9u
LmNwcAppbmRleCBjZjdmYTJmNDRiODAyYzZjZmMxYTE2MDgwOTU3YzFjMjkwMDY1ZDk2Li4xZDVi
MDJjMjkzYzU0MGYyMjFmYmRiYTgyN2UwYjU2MjdhYjJmMjgwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9u
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5z
aW9uczNET3BlbkdMQ29tbW9uLmNwcApAQCAtMTYwLDE2ICsxNjAsMjQgQEAgU3RyaW5nIEV4dGVu
c2lvbnMzRE9wZW5HTENvbW1vbjo6Z2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZUFOR0xFKFBsYXRm
b3JtM0RPYmplY3QKIAogICAgIFN0cmluZyB0cmFuc2xhdGVkU2hhZGVyU291cmNlOwogICAgIFN0
cmluZyBzaGFkZXJJbmZvTG9nOwotICAgIGludCBleHRyYUNvbXBpbGVPcHRpb25zID0gMDsKKyAg
ICBpbnQgZXh0cmFDb21waWxlT3B0aW9ucyA9IFNIX0FUVFJJQlVURVNfVU5JRk9STVMgfCBTSF9N
QVBfTE9OR19WQVJJQUJMRV9OQU1FUzsKIAogICAgIGlmIChtX3JlcXVpcmVzQnVpbHRJbkZ1bmN0
aW9uRW11bGF0aW9uKQogICAgICAgICBleHRyYUNvbXBpbGVPcHRpb25zIHw9IFNIX0VNVUxBVEVf
QlVJTFRfSU5fRlVOQ1RJT05TOwogCi0gICAgYm9vbCBpc1ZhbGlkID0gY29tcGlsZXIudmFsaWRh
dGVTaGFkZXJTb3VyY2UoZW50cnkuc291cmNlLnV0ZjgoKS5kYXRhKCksIHNoYWRlclR5cGUsIHRy
YW5zbGF0ZWRTaGFkZXJTb3VyY2UsIHNoYWRlckluZm9Mb2csIGV4dHJhQ29tcGlsZU9wdGlvbnMp
OworICAgIFZlY3RvcjxBTkdMRVNoYWRlclN5bWJvbD4gc3ltYm9sczsKKyAgICBib29sIGlzVmFs
aWQgPSBjb21waWxlci5jb21waWxlU2hhZGVyU291cmNlKGVudHJ5LnNvdXJjZS51dGY4KCkuZGF0
YSgpLCBzaGFkZXJUeXBlLCB0cmFuc2xhdGVkU2hhZGVyU291cmNlLCBzaGFkZXJJbmZvTG9nLCBz
eW1ib2xzLCBleHRyYUNvbXBpbGVPcHRpb25zKTsKIAogICAgIGVudHJ5LmxvZyA9IHNoYWRlcklu
Zm9Mb2c7CiAgICAgZW50cnkuaXNWYWxpZCA9IGlzVmFsaWQ7CiAKKyAgICBzaXplX3QgbnVtU3lt
Ym9scyA9IHN5bWJvbHMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtU3lt
Ym9sczsgKytpKSB7CisgICAgICAgIEFOR0xFU2hhZGVyU3ltYm9sIHNoYWRlclN5bWJvbCA9IHN5
bWJvbHNbaV07CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpTeW1ib2xJbmZvIHN5bWJvbElu
Zm8oc2hhZGVyU3ltYm9sLmRhdGFUeXBlLCBzaGFkZXJTeW1ib2wuc2l6ZSwgc2hhZGVyU3ltYm9s
Lm1hcHBlZE5hbWUpOworICAgICAgICBlbnRyeS5zeW1ib2xNYXAoc2hhZGVyU3ltYm9sLnN5bWJv
bFR5cGUpLnNldChzaGFkZXJTeW1ib2wubmFtZSwgc3ltYm9sSW5mbyk7CisgICAgfQorCiAgICAg
aWYgKCFpc1ZhbGlkKQogICAgICAgICByZXR1cm4gIiI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENv
bW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwCmluZGV4IDhhMmFjODFlNjc2MDEzMzkyYjY2OGM2
N2EwZWI1Y2NlYzk3MzJmZTYuLjE1MTZlYTI2MDg0YWVjZWNmOGQ1ZTYwNzM3NmNkNTEyMjQ5MjFi
OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9H
cmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcApA
QCAtNDY1LDcgKzQ2NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvbXBpbGVTaGFkZXIo
UGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCiAgICAgOjpnbEdldFNoYWRlcml2KHNoYWRlciwgR0xf
SU5GT19MT0dfTEVOR1RILCAmbGVuZ3RoKTsKIAogICAgIGlmIChsZW5ndGgpIHsKLSAgICAgICAg
SGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0LCBHcmFwaGljc0NvbnRleHQzRDo6U2hhZGVyU291cmNl
RW50cnk+OjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7
CisgICAgICAgIFNoYWRlclNvdXJjZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3Vy
Y2VNYXAuZmluZChzaGFkZXIpOwogICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6U2hhZGVyU291
cmNlRW50cnkmIGVudHJ5ID0gcmVzdWx0LT5zZWNvbmQ7CiAKICAgICAgICAgR0xzaXplaSBzaXpl
ID0gMDsKQEAgLTY3MSwxMyArNjcxLDM4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEF0
dGFjaGVkU2hhZGVycyhQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RzaXplaSBtCiAgICAg
OjpnbEdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCBtYXhDb3VudCwgY291bnQsIHNoYWRlcnMp
OwogfQogCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6Om1hcHBlZFN5bWJvbE5hbWUoUGxhdGZv
cm0zRE9iamVjdCBwcm9ncmFtLCBBTkdMRVNoYWRlclN5bWJvbFR5cGUgc3ltYm9sVHlwZSwgY29u
c3QgU3RyaW5nJiBuYW1lKQoreworICAgIEdDM0RzaXplaSBjb3VudDsKKyAgICBQbGF0Zm9ybTNE
T2JqZWN0IHNoYWRlcnNbMl07CisgICAgZ2V0QXR0YWNoZWRTaGFkZXJzKHByb2dyYW0sIDIsICZj
b3VudCwgc2hhZGVycyk7CisKKyAgICBmb3IgKEdDM0RzaXplaSBpID0gMDsgaSA8IGNvdW50OyAr
K2kpIHsKKyAgICAgICAgU2hhZGVyU291cmNlTWFwOjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRl
clNvdXJjZU1hcC5maW5kKHNoYWRlcnNbaV0pOworICAgICAgICBpZiAocmVzdWx0ID09IG1fc2hh
ZGVyU291cmNlTWFwLmVuZCgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgY29u
c3QgU2hhZGVyU3ltYm9sTWFwJiBzeW1ib2xNYXAgPSByZXN1bHQtPnNlY29uZC5zeW1ib2xNYXAo
c3ltYm9sVHlwZSk7CisgICAgICAgIFNoYWRlclN5bWJvbE1hcDo6Y29uc3RfaXRlcmF0b3Igc3lt
Ym9sRW50cnkgPSBzeW1ib2xNYXAuZmluZChuYW1lKTsKKyAgICAgICAgaWYgKHN5bWJvbEVudHJ5
ICE9IHN5bWJvbE1hcC5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBzeW1ib2xFbnRyeS0+c2Vj
b25kLm1hcHBlZE5hbWU7CisgICAgfQorICAgIHJldHVybiBuYW1lOworfQorCiBpbnQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwg
Y29uc3QgU3RyaW5nJiBuYW1lKQogewogICAgIGlmICghcHJvZ3JhbSkKICAgICAgICAgcmV0dXJu
IC0xOwogCiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIDo6Z2xHZXRBdHRy
aWJMb2NhdGlvbihwcm9ncmFtLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOworCisgICAgLy8gVGhlIGF0
dHJpYnV0ZSBuYW1lIG1heSBoYXZlIGJlZW4gdHJhbnNsYXRlZCBkdXJpbmcgQU5HTEUgY29tcGls
YXRpb24uCisgICAgLy8gTG9vayB0aHJvdWdoIHRoZSBjb3JyZXNwb25kaW5nIFNoYWRlclNvdXJj
ZU1hcCB0byBtYWtlIHN1cmUgd2UKKyAgICAvLyByZWZlcmVuY2UgdGhlIG1hcHBlZCBuYW1lIHJh
dGhlciB0aGFuIHRoZSBleHRlcm5hbCBuYW1lLgorICAgIFN0cmluZyBtYXBwZWROYW1lID0gbWFw
cGVkU3ltYm9sTmFtZShwcm9ncmFtLCBTSEFERVJfU1lNQk9MX1RZUEVfQVRUUklCVVRFLCBuYW1l
KTsKKworICAgIHJldHVybiA6OmdsR2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgbWFwcGVkTmFt
ZS51dGY4KCkuZGF0YSgpKTsKIH0KIAogR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldENvbnRleHRBdHRyaWJ1dGVzKCkKQEAgLTExMjYsNyArMTE1MSw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlcml2KFBsYXRmb3JtM0RPYmplY3Qg
c2hhZGVyLCBHQzNEZW51bSBwbmFtZSwgR0MzCiAKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
IAotICAgIEhhc2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+OjppdGVy
YXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAgU2hhZGVy
U291cmNlTWFwOjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRl
cik7CiAgICAgCiAgICAgc3dpdGNoIChwbmFtZSkgewogICAgIGNhc2UgREVMRVRFX1NUQVRVUzoK
QEAgLTExNjEsNyArMTE4Niw3IEBAIFN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVy
SW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKIAogICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwogCi0gICAgSGFzaE1hcDxQbGF0Zm9ybTNET2JqZWN0LCBTaGFkZXJTb3VyY2VFbnRyeT46
Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKKyAgICBT
aGFkZXJTb3VyY2VNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQo
c2hhZGVyKTsKICAgICBpZiAocmVzdWx0ID09IG1fc2hhZGVyU291cmNlTWFwLmVuZCgpKQogICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7IAogCkBAIC0xMTg3LDcgKzEyMTIsNyBAQCBTdHJpbmcgR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlclNvdXJjZShQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikK
IAogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogCi0gICAgSGFzaE1hcDxQbGF0Zm9ybTNET2Jq
ZWN0LCBTaGFkZXJTb3VyY2VFbnRyeT46Oml0ZXJhdG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNl
TWFwLmZpbmQoc2hhZGVyKTsKKyAgICBTaGFkZXJTb3VyY2VNYXA6Oml0ZXJhdG9yIHJlc3VsdCA9
IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKICAgICBpZiAocmVzdWx0ID09IG1fc2hh
ZGVyU291cmNlTWFwLmVuZCgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7IAogCkBAIC0xMjI0
LDcgKzEyNDksMTMgQEAgR0MzRGludCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybUxvY2F0
aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3QKICAgICBBU1NFUlQocHJvZ3Jh
bSk7CiAKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICByZXR1cm4gOjpnbEdldFVuaWZv
cm1Mb2NhdGlvbihwcm9ncmFtLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOworCisgICAgLy8gVGhlIHVu
aWZvcm0gbmFtZSBtYXkgaGF2ZSBiZWVuIHRyYW5zbGF0ZWQgZHVyaW5nIEFOR0xFIGNvbXBpbGF0
aW9uLgorICAgIC8vIExvb2sgdGhyb3VnaCB0aGUgY29ycmVzcG9uZGluZyBTaGFkZXJTb3VyY2VN
YXAgdG8gbWFrZSBzdXJlIHdlCisgICAgLy8gcmVmZXJlbmNlIHRoZSBtYXBwZWQgbmFtZSByYXRo
ZXIgdGhhbiB0aGUgZXh0ZXJuYWwgbmFtZS4KKyAgICBTdHJpbmcgbWFwcGVkTmFtZSA9IG1hcHBl
ZFN5bWJvbE5hbWUocHJvZ3JhbSwgU0hBREVSX1NZTUJPTF9UWVBFX1VOSUZPUk0sIG5hbWUpOwor
CisgICAgcmV0dXJuIDo6Z2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbWFwcGVkTmFtZS51
dGY4KCkuZGF0YSgpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0
cmliZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQqIHZhbHVlKQpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CmluZGV4IDY1ODA4NGE5YTlmZDc0NDFhNzIyNTNlMmY4OTZiMjc0ZjEwNDU3OGQuLmZjNjRkM2Zj
N2M1YjY2Mjc2ZTQ3MDE1YTU0ZjdiMDViNDQ4NWVkZmYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAor
MjAxMi0xMC0wMyAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5jb20+CisKKyAgICAgICAgQXR0
cmlidXRlIGFuZCBVbmlmb3JtIHZhcmlhYmxlIG5hbWVzIG5lZWQgdHJhbnNsYXRpb24gaW4gc2hh
ZGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDk4
OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVk
IHN1YnRlc3RzIHRvIGV4ZXJjaXNlIHZhcmlhYmxlcyB0aGF0IGFyZSB3ZWxsIHVuZGVyIHRoZSBs
aW1pdHMgYnV0CisgICAgICAgIG5vdCBsb25nIGVub3VnaCB0byBwcm9kdWNlIGFuIGVycm9yLiBU
aGlzIHdheSB3ZSBub3cgdGVzdCBhbGwgdGhyZWUgb3B0aW9uczoKKyAgICAgICAgdW5kZXIgdGhl
IGxpbWl0LCBhdCB0aGUgbGltaXQsIG92ZXIgdGhlIGxpbWl0LgorCisgICAgICAgIEFsc28sIHRo
ZSB0ZXN0cyBhcmUgdW5za2lwcGVkIG9uIE1hYy4KKworICAgICAgICAqIGZhc3QvY2FudmFzL3dl
YmdsL2F0dHJpYi1sb2NhdGlvbi1sZW5ndGgtbGltaXRzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAg
KiBmYXN0L2NhbnZhcy93ZWJnbC9hdHRyaWItbG9jYXRpb24tbGVuZ3RoLWxpbWl0cy5odG1sOgor
ICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL3VuaWZvcm0tbG9jYXRpb24tbGVuZ3RoLWxpbWl0
cy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvdW5pZm9ybS1sb2Nh
dGlvbi1sZW5ndGgtbGltaXRzLmh0bWw6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1Rlc3RFeHBl
Y3RhdGlvbnM6CisKIDIwMTItMTAtMDIgIE9qYW4gVmFmYWkgIDxvamFuQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBUZXN0IHJlYmFzZWxpbmVzIG5vdyB0aGF0IHRoZSBDaHJvbWl1bSBMaW9uIGJv
dCBoYXMgYmVlbiB1cGdyYWRlZCB0byAxMC43LjUuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2NhbnZhcy93ZWJnbC9hdHRyaWItbG9jYXRpb24tbGVuZ3RoLWxpbWl0cy1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9hdHRyaWItbG9jYXRpb24tbGVuZ3Ro
LWxpbWl0cy1leHBlY3RlZC50eHQKaW5kZXggYzIyODkxNmNhZDJmMjE3MDA1ZGY3MTM3ZDI1MWNi
MjEyOGM5ODAzNC4uYjM0NTBlNDNjNTU4ZTFjY2E3MTQ4NTMwN2QyZjEwNjIxZmFhODMzMCAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvYXR0cmliLWxvY2F0aW9uLWxl
bmd0aC1saW1pdHMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dl
YmdsL2F0dHJpYi1sb2NhdGlvbi1sZW5ndGgtbGltaXRzLWV4cGVjdGVkLnR4dApAQCAtMyw2ICsz
LDEwIEBAIFRlc3QgYXR0cmliIGxvY2F0aW9uIHVuZGVybmVhdGggdGhlIGxlbmd0aCBsaW1pdAog
UEFTUyBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJTktfU1RBVFVTKSBpcyB0
cnVlCiBQQVNTIGF0dHJpYiBsb2NhdGlvbiBzaG91bGQgbm90IGJlIC0xCiBQQVNTIGdldEVycm9y
IHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKK1Rlc3QgYXR0cmliIGxvY2F0aW9uIGV4
YWN0bHkgYXQgdGhlIGxlbmd0aCBsaW1pdAorUEFTUyBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHBy
b2dyYW0sIGdsLkxJTktfU1RBVFVTKSBpcyB0cnVlCitQQVNTIGF0dHJpYiBsb2NhdGlvbiBzaG91
bGQgbm90IGJlIC0xCitQQVNTIGdldEVycm9yIHdhcyBleHBlY3RlZCB2YWx1ZTogTk9fRVJST1Ig
OiAKIFRlc3QgYXR0cmliIGxvY2F0aW9uIG92ZXIgdGhlIGxlbmd0aCBsaW1pdAogU2hhZGVyIGNv
bXBpbGF0aW9uIHNob3VsZCBmYWlsCiBQQVNTIHd0dS5sb2FkU2hhZGVyRnJvbVNjcmlwdChnbCwg
ImJhZFZlcnRleFNoYWRlciIsIGdsLlZFUlRFWF9TSEFERVIsIGZ1bmN0aW9uIChlcnIpIHt9KSBp
cyBudWxsCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9hdHRyaWIt
bG9jYXRpb24tbGVuZ3RoLWxpbWl0cy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2Vi
Z2wvYXR0cmliLWxvY2F0aW9uLWxlbmd0aC1saW1pdHMuaHRtbAppbmRleCBmNDQ0ODM2ZTc4OGI1
YWUzN2UxMWVmZjE5NDU0OWEwYjI0ODc4YjJjLi43NDc4ZDdjYmQ1NTk5ZjAyNzA4YzRhMTg0NDIx
ZThmZmUzMTk0YzE2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9h
dHRyaWItbG9jYXRpb24tbGVuZ3RoLWxpbWl0cy5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
Y2FudmFzL3dlYmdsL2F0dHJpYi1sb2NhdGlvbi1sZW5ndGgtbGltaXRzLmh0bWwKQEAgLTEzLDcg
KzEzLDE2IEBAIFRoZXJlIGlzIHN1cHBvc2VkIHRvIGJlIGFuIGV4YW1wbGUgZHJhd2luZyBoZXJl
LCBidXQgaXQncyBub3QgaW1wb3J0YW50LgogPC9jYW52YXM+CiA8ZGl2IGlkPSJkZXNjcmlwdGlv
biI+VmVyaWZ5IGxpbWl0cyBvbiB0aGUgbGVuZ3RocyBvZiBhdHRyaWIgbG9jYXRpb25zLjwvZGl2
PgogPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Ci08c2NyaXB0IGlkPSJnb29kVmVydGV4U2hhZGVy
IiB0eXBlPSJ4LXNoYWRlci94LXZlcnRleCI+Cis8c2NyaXB0IGlkPSJnb29kVmVydGV4U2hhZGVy
MSIgdHlwZT0ieC1zaGFkZXIveC12ZXJ0ZXgiPgorLy8gQSB2ZXJ0ZXggc2hhZGVyIHdoZXJlIHRo
ZSBuZWVkZWQgYXR0cmliIGxvY2F0aW9uIGlzIGxvbmcsIGJ1dCBub3Qgb3ZlciB0aGUgbGltaXQu
CithdHRyaWJ1dGUgdmVjNCB2UG9zaXRpb24wMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkw
MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDsKKwordm9pZCBtYWluKCkK
K3sKKyAgICBnbF9Qb3NpdGlvbiA9IHZQb3NpdGlvbjAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1
Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwOworfQorPC9zY3Jp
cHQ+Cis8c2NyaXB0IGlkPSJnb29kVmVydGV4U2hhZGVyMiIgdHlwZT0ieC1zaGFkZXIveC12ZXJ0
ZXgiPgogLy8gQSB2ZXJ0ZXggc2hhZGVyIHdoZXJlIHRoZSBuZWVkZWQgYXR0cmliIGxvY2F0aW9u
IGlzIGV4YWN0bHkgMjU2IGNoYXJhY3RlcnMuCiBhdHRyaWJ1dGUgdmVjNCB2UG9zaXRpb24wMTIz
NDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkw
MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3
ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0
NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAx
MjM0NTY3ODkwMTIzNDU2OwogCkBAIC00Nyw3ICs1NiwxOCBAQCB2YXIgd3R1ID0gV2ViR0xUZXN0
VXRpbHM7CiB2YXIgZ2wgPSB3dHUuY3JlYXRlM0RDb250ZXh0KGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJleGFtcGxlIikpOwogCiBkZWJ1ZygiVGVzdCBhdHRyaWIgbG9jYXRpb24gdW5kZXJuZWF0
aCB0aGUgbGVuZ3RoIGxpbWl0Iik7Ci12YXIgcHJvZ3JhbSA9IHd0dS5sb2FkUHJvZ3JhbUZyb21T
Y3JpcHQoZ2wsICJnb29kVmVydGV4U2hhZGVyIiwgImZyYWdtZW50U2hhZGVyIik7Cit2YXIgcHJv
Z3JhbSA9IHd0dS5sb2FkUHJvZ3JhbUZyb21TY3JpcHQoZ2wsICJnb29kVmVydGV4U2hhZGVyMSIs
ICJmcmFnbWVudFNoYWRlciIpOworc2hvdWxkQmUoJ2dsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJv
Z3JhbSwgZ2wuTElOS19TVEFUVVMpJywgJ3RydWUnKTsKK3ZhciBhdHRyaWJMb2MgPSBnbC5nZXRB
dHRyaWJMb2NhdGlvbihwcm9ncmFtLCAidlBvc2l0aW9uMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIz
NDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiKTsKK2lmIChh
dHRyaWJMb2MgPT0gLTEpIHsKKyAgICB0ZXN0RmFpbGVkKCJhdHRyaWIgbG9jYXRpb24gd2FzIC0x
LCBzaG91bGQgbm90IGJlIik7Cit9IGVsc2UgeworICAgIHRlc3RQYXNzZWQoImF0dHJpYiBsb2Nh
dGlvbiBzaG91bGQgbm90IGJlIC0xIik7Cit9Cit3dHUuZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5O
T05FKTsKKworZGVidWcoIlRlc3QgYXR0cmliIGxvY2F0aW9uIGV4YWN0bHkgYXQgdGhlIGxlbmd0
aCBsaW1pdCIpOwordmFyIHByb2dyYW0gPSB3dHUubG9hZFByb2dyYW1Gcm9tU2NyaXB0KGdsLCAi
Z29vZFZlcnRleFNoYWRlcjIiLCAiZnJhZ21lbnRTaGFkZXIiKTsKIHNob3VsZEJlKCdnbC5nZXRQ
cm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJTktfU1RBVFVTKScsICd0cnVlJyk7CiB2YXIg
YXR0cmliTG9jID0gZ2wuZ2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgInZQb3NpdGlvbjAxMjM0
NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAx
MjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4
OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1
Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEy
MzQ1Njc4OTAxMjM0NTYiKTsKIGlmIChhdHRyaWJMb2MgPT0gLTEpIHsKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3VuaWZvcm0tbG9jYXRpb24tbGVuZ3RoLWxpbWl0
cy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC91bmlmb3JtLWxv
Y2F0aW9uLWxlbmd0aC1saW1pdHMtZXhwZWN0ZWQudHh0CmluZGV4IDllMDk4ZWRmMGIzODU3NTNh
NTJhNDRiYWQ2ZThmMzg5YzkxNmVjNzEuLjVlZDdiZWQzNWJlNmZjZDdkODJlNmVjYzJlZGZlNzhh
NDAyNzBlOTUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3VuaWZv
cm0tbG9jYXRpb24tbGVuZ3RoLWxpbWl0cy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9jYW52YXMvd2ViZ2wvdW5pZm9ybS1sb2NhdGlvbi1sZW5ndGgtbGltaXRzLWV4cGVjdGVk
LnR4dApAQCAtMyw2ICszLDEwIEBAIFRlc3QgdW5pZm9ybSBsb2NhdGlvbiB1bmRlcm5lYXRoIHRo
ZSBsZW5ndGggbGltaXQKIFBBU1MgZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5M
SU5LX1NUQVRVUykgaXMgdHJ1ZQogUEFTUyB1bmlmb3JtTG9jIGlzIG5vbi1udWxsLgogUEFTUyBn
ZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCitUZXN0IHVuaWZvcm0gbG9j
YXRpb24gZXhhY3RseSBhdCB0aGUgbGVuZ3RoIGxpbWl0CitQQVNTIGdsLmdldFByb2dyYW1QYXJh
bWV0ZXIocHJvZ3JhbSwgZ2wuTElOS19TVEFUVVMpIGlzIHRydWUKK1BBU1MgdW5pZm9ybUxvYyBp
cyBub24tbnVsbC4KK1BBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJPUiA6
IAogVGVzdCB1bmlmb3JtIGxvY2F0aW9uIG92ZXIgdGhlIGxlbmd0aCBsaW1pdAogUEFTUyBnZXRF
cnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCiBQQVNTIGdsLmdldFByb2dyYW1Q
YXJhbWV0ZXIocHJvZ3JhbSwgZ2wuTElOS19TVEFUVVMpIGlzIHRydWUKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3VuaWZvcm0tbG9jYXRpb24tbGVuZ3RoLWxpbWl0
cy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdW5pZm9ybS1sb2NhdGlvbi1s
ZW5ndGgtbGltaXRzLmh0bWwKaW5kZXggMDAwZDQ4YzU4OWNiMTg5OGE0MGJmYmZlMDBmOGMwZmJl
YTFjYmM2YS4uNDVkZGY5MzkzOWJmMDU1NTk2ODFlMmUxOWRlM2JmMjNiMjE2M2RiYyAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdW5pZm9ybS1sb2NhdGlvbi1sZW5n
dGgtbGltaXRzLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdW5pZm9y
bS1sb2NhdGlvbi1sZW5ndGgtbGltaXRzLmh0bWwKQEAgLTEzLDcgKzEzLDIzIEBAIFRoZXJlIGlz
IHN1cHBvc2VkIHRvIGJlIGFuIGV4YW1wbGUgZHJhd2luZyBoZXJlLCBidXQgaXQncyBub3QgaW1w
b3J0YW50LgogPC9jYW52YXM+CiA8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+VmVyaWZ5IGxpbWl0cyBv
biB0aGUgbGVuZ3RocyBvZiB1bmlmb3JtIGxvY2F0aW9ucy48L2Rpdj4KIDxkaXYgaWQ9ImNvbnNv
bGUiPjwvZGl2PgotPHNjcmlwdCBpZD0iZ29vZFZlcnRleFNoYWRlciIgdHlwZT0ieC1zaGFkZXIv
eC12ZXJ0ZXgiPgorPHNjcmlwdCBpZD0iZ29vZFZlcnRleFNoYWRlcjEiIHR5cGU9Ingtc2hhZGVy
L3gtdmVydGV4Ij4KKy8vIEEgdmVydGV4IHNoYWRlciB3aGVyZSB0aGUgdW5pZm9ybSBuYW1lIGlz
IGxvbmcsIGJ1dCB3ZWxsIGJlbG93IHRoZSBsaW1pdC4KK3N0cnVjdCBOZXN0aW5nMiB7CisgICAg
dmVjNCBpZGVudGlmaWVyNjJDaGFyYWN0ZXJzTG9uZ18wMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0
NTY3ODkwMTIzNDsKK307CisKK3N0cnVjdCBOZXN0aW5nMSB7CisgICAgTmVzdGluZzIgaWRlbnRp
ZmllcjY0Q2hhcmFjdGVyc0xvbmdfMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1
NjsKK307CisKK3VuaWZvcm0gTmVzdGluZzEgaWRlbnRpZmllcjcwQ2hhcmFjdGVyc0xvbmdfMDEy
MzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTA7CisKK3ZvaWQgbWFpbigpIHsK
KyAgICBnbF9Qb3NpdGlvbiA9IGlkZW50aWZpZXI3MENoYXJhY3RlcnNMb25nXzAxMjM0NTY3ODkw
MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwLmlkZW50aWZpZXI2NENoYXJhY3RlcnNMb25n
XzAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTYuaWRlbnRpZmllcjYyQ2hhcmFj
dGVyc0xvbmdfMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ7Cit9Cis8L3Njcmlw
dD4KKzxzY3JpcHQgaWQ9Imdvb2RWZXJ0ZXhTaGFkZXIyIiB0eXBlPSJ4LXNoYWRlci94LXZlcnRl
eCI+CiAvLyBBIHZlcnRleCBzaGFkZXIgd2hlcmUgdGhlIG5lZWRlZCB1bmlmb3JtIGxvY2F0aW9u
IGlzIGV4YWN0bHkgMjU2IGNoYXJhY3RlcnMuCiBzdHJ1Y3QgTmVzdGluZzIgewogICAgIHZlYzQg
aWRlbnRpZmllcjYyQ2hhcmFjdGVyc0xvbmdfMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5
MDEyMzQ7CkBAIC02Miw3ICs3OCwxNCBAQCB2YXIgd3R1ID0gV2ViR0xUZXN0VXRpbHM7CiB2YXIg
Z2wgPSB3dHUuY3JlYXRlM0RDb250ZXh0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJleGFtcGxl
IikpOwogCiBkZWJ1ZygiVGVzdCB1bmlmb3JtIGxvY2F0aW9uIHVuZGVybmVhdGggdGhlIGxlbmd0
aCBsaW1pdCIpOwotdmFyIHByb2dyYW0gPSB3dHUubG9hZFByb2dyYW1Gcm9tU2NyaXB0KGdsLCAi
Z29vZFZlcnRleFNoYWRlciIsICJmcmFnbWVudFNoYWRlciIpOwordmFyIHByb2dyYW0gPSB3dHUu
bG9hZFByb2dyYW1Gcm9tU2NyaXB0KGdsLCAiZ29vZFZlcnRleFNoYWRlcjEiLCAiZnJhZ21lbnRT
aGFkZXIiKTsKK3Nob3VsZEJlKCdnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJ
TktfU1RBVFVTKScsICd0cnVlJyk7Cit2YXIgdW5pZm9ybUxvYyA9IGdsLmdldFVuaWZvcm1Mb2Nh
dGlvbihwcm9ncmFtLCAiaWRlbnRpZmllcjcwQ2hhcmFjdGVyc0xvbmdfMDEyMzQ1Njc4OTAxMjM0
NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAuaWRlbnRpZmllcjY0Q2hhcmFjdGVyc0xvbmdfMDEy
MzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Ni5pZGVudGlmaWVyNjJDaGFyYWN0ZXJz
TG9uZ18wMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCIpOworc2hvdWxkQmVOb25O
dWxsKCd1bmlmb3JtTG9jJyk7Cit3dHUuZ2xFcnJvclNob3VsZEJlKGdsLCBnbC5OT05FKTsKKwor
ZGVidWcoIlRlc3QgdW5pZm9ybSBsb2NhdGlvbiBleGFjdGx5IGF0IHRoZSBsZW5ndGggbGltaXQi
KTsKK3ZhciBwcm9ncmFtID0gd3R1LmxvYWRQcm9ncmFtRnJvbVNjcmlwdChnbCwgImdvb2RWZXJ0
ZXhTaGFkZXIyIiwgImZyYWdtZW50U2hhZGVyIik7CiBzaG91bGRCZSgnZ2wuZ2V0UHJvZ3JhbVBh
cmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUyknLCAndHJ1ZScpOwogdmFyIHVuaWZvcm1M
b2MgPSBnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgImlkZW50aWZpZXIxMjhDaGFyYWN0
ZXJzTG9uZ18wMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4
OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5LmlkZW50
aWZpZXI2NENoYXJhY3RlcnNMb25nXzAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0
NTYuaWRlbnRpZmllcjYyQ2hhcmFjdGVyc0xvbmdfMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2
Nzg5MDEyMzQiKTsKIHNob3VsZEJlTm9uTnVsbCgndW5pZm9ybUxvYycpOwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9ucwppbmRleCBhZmM5YTI2YTUyY2FhNWZiY2RmMzEw
Mjk3MDE1YWE3N2FlOTQ3MmMxLi43MTY2NmRhNmZjZTdmZjIzMzAxMTg1Y2RkMThkM2M0OTZhZGMx
MWMyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9u
cworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9ucwpAQCAtNDc5
LDEwICs0NzksNiBAQCBmYXN0L2V2ZW50cy9wbGF0Zm9ybS13aGVlbGV2ZW50LXBhZ2luZy15LWlu
LW5vbi1zY3JvbGxpbmctcGFnZS5odG1sCiBmYXN0L2V2ZW50cy9wbGF0Zm9ybS13aGVlbGV2ZW50
LXBhZ2luZy15LWluLXNjcm9sbGluZy1kaXYuaHRtbAogZmFzdC9ldmVudHMvcGxhdGZvcm0td2hl
ZWxldmVudC1wYWdpbmcteS1pbi1zY3JvbGxpbmctcGFnZS5odG1sCiAKLSMgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwOTg5Ci1mYXN0L2NhbnZhcy93ZWJnbC9hdHRy
aWItbG9jYXRpb24tbGVuZ3RoLWxpbWl0cy5odG1sCi1mYXN0L2NhbnZhcy93ZWJnbC91bmlmb3Jt
LWxvY2F0aW9uLWxlbmd0aC1saW1pdHMuaHRtbAotCiAjIFdlYiBJbnRlbnRzIGlzIG5vdCB5ZXQg
ZW5hYmxlZC4KIHdlYmludGVudHMvCiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167068</attachid>
            <date>2012-10-04 03:50:53 -0700</date>
            <delta_ts>2012-10-04 11:21:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70989-20121004205002.patch</filename>
            <type>text/plain</type>
            <size>31456</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMwMjM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWE5NzQ3ZDdjY2NiNmM0
ZDUxOWJmMTkxMTBjNmM5OGNmZDQxNTE0MS4uZmZmNmY4YmU3NzQ3Nzg0NWFkYmVhNTRiNmE0Yzdi
YjVjMjc4MWNhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY3IEBACisyMDEyLTEwLTAzICBEZWFu
IEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KKworICAgICAgICBBdHRyaWJ1dGUgYW5kIFVuaWZv
cm0gdmFyaWFibGUgbmFtZXMgbmVlZCB0cmFuc2xhdGlvbiBpbiBzaGFkZXIKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcwOTg5CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViR0wgc3BlY2lmaWVzIHNvbWUg
bWF4aW11bSBsZW5ndGhzIGZvciB2YXJpYWJsZSBuYW1lcyAoYXR0cmlidXRlcworICAgICAgICBh
bmQgdW5pZm9ybXMpLiBBbHNvLCBzb21lIEdMIGRyaXZlcnMgaGF2ZSBpc3N1ZXMgd2l0aCBsb25n
IG5hbWVzLiBGb3IKKyAgICAgICAgdGhhdCByZWFzb24sIEFOR0xFIGhhcyBhbiBvcHRpb24gdG8g
cmV3cml0ZSB0aGUgc2hhZGVyLCB0cmFuc2xhdGluZworICAgICAgICBsb25nIG5hbWVzIGludG8g
c2hvcnQgbmFtZXMuIFR1cm5pbmcgdGhpcyBvbiBoZWxwcyBzaGFkZXJzIGNvbXBpbGUsCisgICAg
ICAgIGJ1dCB3ZSBuZWVkIHRvIGtlZXAgYSBtYXBwaW5nIGJldHdlZW4gdGhlIG9yaWdpbmFsIG5h
bWVzIGFuZCB0aGUKKyAgICAgICAgdHJhbnNsYXRlZCBuYW1lcywgc28gdGhhdCB3ZSBiaW5kIHRv
IHRoZSByaWdodCBsb2NhdGlvbiBmcm9tIHVzZXIgY29kZQorICAgICAgICAod2hpY2ggd29uJ3Qg
ZXZlciBzZWUgdGhlIHRyYW5zbGF0ZWQgc291cmNlKS4KKworICAgICAgICBUaGlzIHByb3ZpZGVk
IGFuIG9wcG9ydHVuaXR5IHRvIGNsZWFuIHVwIHNvbWUgb3RoZXIgYml0cyBvZiBjb2RlOgorICAg
ICAgICBDU1MgRmlsdGVycyBleGFtaW5lZCB0aGUgdW5pZm9ybSBuYW1lcyBhZnRlciBhIGNvbXBp
bGF0aW9uOyBJdCBjYW4KKyAgICAgICAgbm93IHVzZSB0aGUgdmFyaWFibGUgbmFtZSBtYXAuIEkg
YWxzbyBhZGRlZCBhIHR5cGVkZWYgZm9yIHRoZQorICAgICAgICBIYXNoTWFwcyB0aGF0IGtlZXAg
dGhlIHNoYWRlciwgdGhlIHNvdXJjZSBjb2RlIGFuZCB0aGUgdmFyaWFibGUgbmFtZQorICAgICAg
ICBtYXBwaW5ncy4KKworICAgICAgICBJIGFsc28gb3BlbmVkIGEgZm9sbG93dXAgYnVnIHRvIG1h
a2Ugc3VyZSB0aGVzZSB0YWJsZXMgYXJlIGRlbGV0ZWQKKyAgICAgICAgd2hlbiB0aGUgYXNzb2Np
YXRlZCBzaGFkZXJzIChvciBsaW5rZWQgcHJvZ3JhbXMpIGdvIGF3YXk6CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05ODIwNAorCisgICAgICAgIENvdmVy
ZWQgYnkgZXhpc3RpbmcgdGVzdHMgKHdpdGggc29tZSBlbmhhbmNlbWVudHMpOgorICAgICAgICAt
IGZhc3QvY2FudmFzL3dlYmdsL2F0dHJpYi1sb2NhdGlvbi1sZW5ndGgtbGltaXRzLmh0bWw6Cisg
ICAgICAgIC0gZmFzdC9jYW52YXMvd2ViZ2wvdW5pZm9ybS1sb2NhdGlvbi1sZW5ndGgtbGltaXRz
Lmh0bWw6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktpdEJyaWRnZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRTeW1ib2xJbmZvKTogRXh0cmFjdHMgYWxsIHRoZSBp
bmZvcm1hdGlvbiBvbiBzeW1ib2xzIChlaXRoZXIgYXR0cmlidXRlcworICAgICAgICBvciB1bmlm
b3JtcykgZnJvbSB0aGUgbmV3bHkgY29tcGlsZWQgc2hhZGVyLgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpBTkdMRVdlYktpdEJyaWRnZTo6Y29tcGlsZVNoYWRlclNvdXJj
ZSk6IE5ldyBtZXRob2QgbmFtZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdl
YktpdEJyaWRnZS5oOgorICAgICAgICAoV2ViQ29yZTo6Z2V0VW5pZm9ybXMpOiBEZWxldGVkIHRo
aXMgbWV0aG9kLgorICAgICAgICAoV2ViQ29yZTo6QU5HTEVTaGFkZXJTeW1ib2w6OmlzU2FtcGxl
cik6IE1ha2Ugc3VyZSB0aGUgc3ltYm9sIGlzIGEgdW5pZm9ybS4KKyAgICAgICAgKEFOR0xFV2Vi
S2l0QnJpZGdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQz
RC5oOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OlN5bWJvbEluZm86OlN5
bWJvbEluZm8pOiBBIG5ldyBvYmplY3QgdGhhdAorICAgICAgICBob2xkcyB0aGUgc2l6ZSwgdHlw
ZSBhbmQgdHJhbnNsYXRlZCBuYW1lIG9mIGEgc3ltYm9sIGZyb20gYSBXZWJHTCBzaGFkZXIuCisg
ICAgICAgIChTaGFkZXJTb3VyY2VFbnRyeSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6U2hhZGVyU291cmNlRW50cnk6OlNoYWRlclNvdXJjZUVudHJ5KTogTm93IGtlZXBz
IHRyYWNrCisgICAgICAgIG9mIHRoZSB0cmFuc2xhdGVkIHNvdXJjZSBjb2RlIGFuZCBzeW1ib2wg
bWFwcGluZ3MuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6U2hhZGVyU291
cmNlRW50cnk6OnN5bWJvbE1hcCk6IEhlbHBlciBmdW5jdGlvbiB0bworICAgICAgICBnZXQgdGhl
IG1lbWJlciB2YXJpYWJsZSBjb3JyZXNwb25kaW5nIHRvIHRoZSB0eXBlIG9mIHN5bWJvbCB5b3Un
cmUgYXNraW5nIGZvLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9t
RmlsdGVyVmFsaWRhdGVkUHJvZ3JhbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21GaWx0
ZXJWYWxpZGF0ZWRQcm9ncmFtOjpDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtKTogQ2FsbHMg
bmV3IG1ldGhvZAorICAgICAgICBuYW1lIHdoaWNoIGFsc28gcHJvZHVjZXMgYSBzZXQgb2Ygc3lt
Ym9scyB0byBleGFtaW5lLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRl
bnNpb25zM0RPcGVuR0xDb21tb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNE
T3BlbkdMQ29tbW9uOjpnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUpOiBXZSBub3cgY2Fu
IHBhc3MKKyAgICAgICAgaW4gc29tZSBleHRyYSBjb21waWxlIG9wdGlvbnMgdG8gZG8gdHJhbnNs
YXRpb24gb2YgbG9uZyBzeW1ib2wgbmFtZXMuIEFsc28gZmlsbCB0aGUKKyAgICAgICAgbWFwIG9m
IHRyYW5zbGF0ZWQgc3ltYm9sIG5hbWVzLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29w
ZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6Y29tcGlsZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6bWFwcGVkU3ltYm9sTmFtZSk6IFJldHVybnMgdGhlIG1hcHBlZCBu
YW1lIGZvcgorICAgICAgICBhIHNoYWRlciBzeW1ib2wgaWYgaXQgd2FzIHRyYW5zbGF0ZWQgZHVy
aW5nIGNvbXBpbGF0aW9uLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpnZXRTaGFkZXJJbmZvTG9nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpnZXRTaGFkZXJTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmdldFVuaWZvcm1Mb2NhdGlvbik6CisKIDIwMTItMTAtMDIgIERlYW4gSmFj
a3NvbiAgPGRpbm9AYXBwbGUuY29tPgogCiAgICAgICAgIEV4cG9zZSBzb21lIEdQVSBJbmZvcm1h
dGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVX
ZWJLaXRCcmlkZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVX
ZWJLaXRCcmlkZ2UuY3BwCmluZGV4IGI2NDcyM2EwODEyYTI3MDc5MTU5YjdiMWJjMDI5ZjMwNmVk
YzRkMzkuLjA2NDgyYWVkMTlmZDExNWM0MDgxMmYxZmExNWNmNDU5NmFkZjBkYTUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktpdEJyaWRn
ZS5jcHAKQEAgLTM5LDYgKzM5LDY4IEBAIGlubGluZSBzdGF0aWMgaW50IGdldFZhbGlkYXRpb25S
ZXN1bHRWYWx1ZShjb25zdCBTaEhhbmRsZSBjb21waWxlciwgU2hTaGFkZXJJbmZvCiAgICAgcmV0
dXJuIHZhbHVlOwogfQogCitzdGF0aWMgYm9vbCBnZXRTeW1ib2xJbmZvKFNoSGFuZGxlIGNvbXBp
bGVyLCBTaFNoYWRlckluZm8gc3ltYm9sVHlwZSwgVmVjdG9yPEFOR0xFU2hhZGVyU3ltYm9sPiYg
c3ltYm9scykKK3sKKyAgICBTaFNoYWRlckluZm8gc3ltYm9sTWF4TmFtZUxlbmd0aFR5cGU7CisK
KyAgICBzd2l0Y2ggKHN5bWJvbFR5cGUpIHsKKyAgICBjYXNlIFNIX0FDVElWRV9BVFRSSUJVVEVT
OgorICAgICAgICBzeW1ib2xNYXhOYW1lTGVuZ3RoVHlwZSA9IFNIX0FDVElWRV9BVFRSSUJVVEVf
TUFYX0xFTkdUSDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTSF9BQ1RJVkVfVU5JRk9STVM6
CisgICAgICAgIHN5bWJvbE1heE5hbWVMZW5ndGhUeXBlID0gU0hfQUNUSVZFX1VOSUZPUk1fTUFY
X0xFTkdUSDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpbnQgbnVt
U3ltYm9scyA9IGdldFZhbGlkYXRpb25SZXN1bHRWYWx1ZShjb21waWxlciwgc3ltYm9sVHlwZSk7
CisgICAgaWYgKG51bVN5bWJvbHMgPCAwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBp
bnQgbWF4TmFtZUxlbmd0aCA9IGdldFZhbGlkYXRpb25SZXN1bHRWYWx1ZShjb21waWxlciwgc3lt
Ym9sTWF4TmFtZUxlbmd0aFR5cGUpOworICAgIGlmIChtYXhOYW1lTGVuZ3RoIDw9IDEpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGludCBtYXhNYXBwZWROYW1lTGVuZ3RoID0gZ2V0VmFs
aWRhdGlvblJlc3VsdFZhbHVlKGNvbXBpbGVyLCBTSF9NQVBQRURfTkFNRV9NQVhfTEVOR1RIKTsK
KyAgICBpZiAobWF4TWFwcGVkTmFtZUxlbmd0aCA8PSAxKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAvLyBUaGUgbWF4aW11bSBhbGxvd2VkIHN5bWJvbCBuYW1lIGxlbmd0aCBpcyAyNTYg
Y2hhcmFjdGVycy4KKyAgICBWZWN0b3I8Y2hhciwgMjU2PiBuYW1lQnVmZmVyKG1heE5hbWVMZW5n
dGgpOworICAgIFZlY3RvcjxjaGFyLCAyNTY+IG1hcHBlZE5hbWVCdWZmZXIobWF4TWFwcGVkTmFt
ZUxlbmd0aCk7CisgICAgCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1TeW1ib2xzOyArK2kp
IHsKKyAgICAgICAgQU5HTEVTaGFkZXJTeW1ib2wgc3ltYm9sOworICAgICAgICBpbnQgbmFtZUxl
bmd0aCA9IC0xOworICAgICAgICBzd2l0Y2ggKHN5bWJvbFR5cGUpIHsKKyAgICAgICAgY2FzZSBT
SF9BQ1RJVkVfQVRUUklCVVRFUzoKKyAgICAgICAgICAgIHN5bWJvbC5zeW1ib2xUeXBlID0gU0hB
REVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURTsKKyAgICAgICAgICAgIFNoR2V0QWN0aXZlQXR0cmli
KGNvbXBpbGVyLCBpLCAmbmFtZUxlbmd0aCwgJnN5bWJvbC5zaXplLCAmc3ltYm9sLmRhdGFUeXBl
LCBuYW1lQnVmZmVyLmRhdGEoKSwgbWFwcGVkTmFtZUJ1ZmZlci5kYXRhKCkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgU0hfQUNUSVZFX1VOSUZPUk1TOgorICAgICAgICAgICAg
c3ltYm9sLnN5bWJvbFR5cGUgPSBTSEFERVJfU1lNQk9MX1RZUEVfVU5JRk9STTsKKyAgICAgICAg
ICAgIFNoR2V0QWN0aXZlVW5pZm9ybShjb21waWxlciwgaSwgJm5hbWVMZW5ndGgsICZzeW1ib2wu
c2l6ZSwgJnN5bWJvbC5kYXRhVHlwZSwgbmFtZUJ1ZmZlci5kYXRhKCksIG1hcHBlZE5hbWVCdWZm
ZXIuZGF0YSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKG5hbWVMZW5ndGggPD0gMCkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIC8vIFRoZSBTaEdldEFjdGl2ZSogY2FsbHMgYWJv
dmUgYXJlIGd1YXJhbnRlZWQgdG8gcHJvZHVjZSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5ncyBmb3IK
KyAgICAgICAgLy8gbmFtZUJ1ZmZlciBhbmQgbWFwcGVkTmFtZUJ1ZmZlci4gQWxzbywgdGhlIGNo
YXJhY3RlciBzZXQgZm9yIHN5bWJvbCBuYW1lcworICAgICAgICAvLyBpcyBhIHN1YnNldCBvZiBM
YXRpbi0xIGFzIHNwZWNpZmllZCBieSB0aGUgT3BlbkdMIEVTIFNoYWRpbmcgTGFuZ3VhZ2UsIFNl
Y3Rpb24gMy4xIGFuZAorICAgICAgICAvLyBXZWJHTCwgU2VjdGlvbiAiQ2hhcmFjdGVycyBPdXRz
aWRlIHRoZSBHTFNMIFNvdXJjZSBDaGFyYWN0ZXIgU2V0Ii4KKyAgICAgICAgc3ltYm9sLm5hbWUg
PSBTdHJpbmcobmFtZUJ1ZmZlci5kYXRhKCkpOworICAgICAgICBzeW1ib2wubWFwcGVkTmFtZSA9
IFN0cmluZyhtYXBwZWROYW1lQnVmZmVyLmRhdGEoKSk7CisgICAgICAgIHN5bWJvbHMuYXBwZW5k
KHN5bWJvbCk7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCiBBTkdMRVdlYktpdEJyaWRn
ZTo6QU5HTEVXZWJLaXRCcmlkZ2UoU2hTaGFkZXJPdXRwdXQgc2hhZGVyT3V0cHV0LCBTaFNoYWRl
clNwZWMgc2hhZGVyU3BlYykKICAgICA6IGJ1aWx0Q29tcGlsZXJzKGZhbHNlKQogICAgICwgbV9m
cmFnbWVudENvbXBpbGVyKDApCkBAIC03NSw3ICsxMzcsNyBAQCB2b2lkIEFOR0xFV2ViS2l0QnJp
ZGdlOjpzZXRSZXNvdXJjZXMoU2hCdWlsdEluUmVzb3VyY2VzIHJlc291cmNlcykKICAgICBtX3Jl
c291cmNlcyA9IHJlc291cmNlczsKIH0KIAotYm9vbCBBTkdMRVdlYktpdEJyaWRnZTo6dmFsaWRh
dGVTaGFkZXJTb3VyY2UoY29uc3QgY2hhciogc2hhZGVyU291cmNlLCBBTkdMRVNoYWRlclR5cGUg
c2hhZGVyVHlwZSwgU3RyaW5nJiB0cmFuc2xhdGVkU2hhZGVyU291cmNlLCBTdHJpbmcmIHNoYWRl
clZhbGlkYXRpb25Mb2csIGludCBleHRyYUNvbXBpbGVPcHRpb25zKQorYm9vbCBBTkdMRVdlYktp
dEJyaWRnZTo6Y29tcGlsZVNoYWRlclNvdXJjZShjb25zdCBjaGFyKiBzaGFkZXJTb3VyY2UsIEFO
R0xFU2hhZGVyVHlwZSBzaGFkZXJUeXBlLCBTdHJpbmcmIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2Us
IFN0cmluZyYgc2hhZGVyVmFsaWRhdGlvbkxvZywgVmVjdG9yPEFOR0xFU2hhZGVyU3ltYm9sPiYg
c3ltYm9scywgaW50IGV4dHJhQ29tcGlsZU9wdGlvbnMpCiB7CiAgICAgaWYgKCFidWlsdENvbXBp
bGVycykgewogICAgICAgICBtX2ZyYWdtZW50Q29tcGlsZXIgPSBTaENvbnN0cnVjdENvbXBpbGVy
KFNIX0ZSQUdNRU5UX1NIQURFUiwgbV9zaGFkZXJTcGVjLCBtX3NoYWRlck91dHB1dCwgJm1fcmVz
b3VyY2VzKTsKQEAgLTk3LDcgKzE1OSw3IEBAIGJvb2wgQU5HTEVXZWJLaXRCcmlkZ2U6OnZhbGlk
YXRlU2hhZGVyU291cmNlKGNvbnN0IGNoYXIqIHNoYWRlclNvdXJjZSwgQU5HTEVTaGFkCiAKICAg
ICBjb25zdCBjaGFyKiBjb25zdCBzaGFkZXJTb3VyY2VTdHJpbmdzW10gPSB7IHNoYWRlclNvdXJj
ZSB9OwogCi0gICAgYm9vbCB2YWxpZGF0ZVN1Y2Nlc3MgPSBTaENvbXBpbGUoY29tcGlsZXIsIHNo
YWRlclNvdXJjZVN0cmluZ3MsIDEsIFNIX09CSkVDVF9DT0RFIHwgZXh0cmFDb21waWxlT3B0aW9u
cyk7CisgICAgYm9vbCB2YWxpZGF0ZVN1Y2Nlc3MgPSBTaENvbXBpbGUoY29tcGlsZXIsIHNoYWRl
clNvdXJjZVN0cmluZ3MsIDEsIFNIX09CSkVDVF9DT0RFIHwgU0hfQVRUUklCVVRFU19VTklGT1JN
UyB8IGV4dHJhQ29tcGlsZU9wdGlvbnMpOwogICAgIGlmICghdmFsaWRhdGVTdWNjZXNzKSB7CiAg
ICAgICAgIGludCBsb2dTaXplID0gZ2V0VmFsaWRhdGlvblJlc3VsdFZhbHVlKGNvbXBpbGVyLCBT
SF9JTkZPX0xPR19MRU5HVEgpOwogICAgICAgICBpZiAobG9nU2l6ZSA+IDEpIHsKQEAgLTExOCwz
NSArMTgwLDExIEBAIGJvb2wgQU5HTEVXZWJLaXRCcmlkZ2U6OnZhbGlkYXRlU2hhZGVyU291cmNl
KGNvbnN0IGNoYXIqIHNoYWRlclNvdXJjZSwgQU5HTEVTaGFkCiAgICAgICAgIFNoR2V0T2JqZWN0
Q29kZShjb21waWxlciwgdHJhbnNsYXRpb25CdWZmZXIuZ2V0KCkpOwogICAgICAgICB0cmFuc2xh
dGVkU2hhZGVyU291cmNlID0gdHJhbnNsYXRpb25CdWZmZXIuZ2V0KCk7CiAgICAgfQotCi0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQU5HTEVXZWJLaXRCcmlkZ2U6OmdldFVuaWZvcm1zKFNo
U2hhZGVyVHlwZSBzaGFkZXJUeXBlLCBWZWN0b3I8QU5HTEVTaGFkZXJTeW1ib2w+ICZzeW1ib2xz
KQotewotICAgIGNvbnN0IFNoSGFuZGxlIGNvbXBpbGVyID0gKHNoYWRlclR5cGUgPT0gU0hfVkVS
VEVYX1NIQURFUiA/IG1fdmVydGV4Q29tcGlsZXIgOiBtX2ZyYWdtZW50Q29tcGlsZXIpOwotCi0g
ICAgaW50IG51bVVuaWZvcm1zID0gZ2V0VmFsaWRhdGlvblJlc3VsdFZhbHVlKGNvbXBpbGVyLCBT
SF9BQ1RJVkVfVU5JRk9STVMpOwotICAgIGlmIChudW1Vbmlmb3JtcyA8IDApCisgICAgCisgICAg
aWYgKCFnZXRTeW1ib2xJbmZvKGNvbXBpbGVyLCBTSF9BQ1RJVkVfQVRUUklCVVRFUywgc3ltYm9s
cykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIW51bVVuaWZvcm1zKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIGludCBtYXhOYW1lTGVuZ3RoID0gZ2V0VmFsaWRhdGlvblJl
c3VsdFZhbHVlKGNvbXBpbGVyLCBTSF9BQ1RJVkVfVU5JRk9STV9NQVhfTEVOR1RIKTsKLSAgICBp
ZiAobWF4TmFtZUxlbmd0aCA8PSAxKQorICAgIGlmICghZ2V0U3ltYm9sSW5mbyhjb21waWxlciwg
U0hfQUNUSVZFX1VOSUZPUk1TLCBzeW1ib2xzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IE93bkFycmF5UHRyPGNoYXI+IG5hbWVCdWZmZXIgPSBhZG9wdEFycmF5UHRyKG5ldyBjaGFyW21h
eE5hbWVMZW5ndGhdKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtVW5pZm9ybXM7ICsr
aSkgewotICAgICAgICBBTkdMRVNoYWRlclN5bWJvbCBzeW1ib2w7Ci0gICAgICAgIHN5bWJvbC5z
eW1ib2xUeXBlID0gU0hBREVSX1NZTUJPTF9UWVBFX1VOSUZPUk07Ci0gICAgICAgIGludCBuYW1l
TGVuZ3RoID0gLTE7Ci0gICAgICAgIFNoR2V0QWN0aXZlVW5pZm9ybShjb21waWxlciwgaSwgJm5h
bWVMZW5ndGgsICZzeW1ib2wuc2l6ZSwgJnN5bWJvbC5kYXRhVHlwZSwgbmFtZUJ1ZmZlci5nZXQo
KSwgMCk7Ci0gICAgICAgIGlmIChuYW1lTGVuZ3RoIDw9IDApCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIHN5bWJvbC5uYW1lID0gU3RyaW5nOjpmcm9tVVRGOChuYW1lQnVmZmVy
LmdldCgpLCBuYW1lTGVuZ3RoKTsKLSAgICAgICAgc3ltYm9scy5hcHBlbmQoc3ltYm9sKTsKLSAg
ICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktpdEJyaWRnZS5oCmluZGV4IDE5YzUwNGViMzkzNzA0OTk2
ZTk1ZDMyMDgxY2ZjMGI1MzNmYjZiYjMuLjE3OGQzYmRkYzAxNWVkYWU5M2Y0YTczYjBkNjc3Yzdl
YmFlN2YzZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FO
R0xFV2ViS2l0QnJpZGdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
QU5HTEVXZWJLaXRCcmlkZ2UuaApAQCAtNTAsMTUgKzUwLDE3IEBAIGVudW0gQU5HTEVTaGFkZXJT
eW1ib2xUeXBlIHsKIHN0cnVjdCBBTkdMRVNoYWRlclN5bWJvbCB7CiAgICAgQU5HTEVTaGFkZXJT
eW1ib2xUeXBlIHN5bWJvbFR5cGU7CiAgICAgU3RyaW5nIG5hbWU7CisgICAgU3RyaW5nIG1hcHBl
ZE5hbWU7CiAgICAgU2hEYXRhVHlwZSBkYXRhVHlwZTsKICAgICBpbnQgc2l6ZTsKIAogICAgIGJv
b2wgaXNTYW1wbGVyKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBkYXRhVHlwZSA9PSBTSF9TQU1Q
TEVSXzJECisgICAgICAgIHJldHVybiBzeW1ib2xUeXBlID09IFNIQURFUl9TWU1CT0xfVFlQRV9V
TklGT1JNCisgICAgICAgICAgICAmJiAoZGF0YVR5cGUgPT0gU0hfU0FNUExFUl8yRAogICAgICAg
ICAgICAgfHwgZGF0YVR5cGUgPT0gU0hfU0FNUExFUl9DVUJFCiAgICAgICAgICAgICB8fCBkYXRh
VHlwZSA9PSBTSF9TQU1QTEVSXzJEX1JFQ1RfQVJCCi0gICAgICAgICAgICB8fCBkYXRhVHlwZSA9
PSBTSF9TQU1QTEVSX0VYVEVSTkFMX09FUzsKKyAgICAgICAgICAgIHx8IGRhdGFUeXBlID09IFNI
X1NBTVBMRVJfRVhURVJOQUxfT0VTKTsKICAgICB9CiB9OwogCkBAIC03MSwxMiArNzMsNyBAQCBw
dWJsaWM6CiAgICAgU2hCdWlsdEluUmVzb3VyY2VzIGdldFJlc291cmNlcygpIHsgcmV0dXJuIG1f
cmVzb3VyY2VzOyB9CiAgICAgdm9pZCBzZXRSZXNvdXJjZXMoU2hCdWlsdEluUmVzb3VyY2VzKTsK
ICAgICAKLSAgICBib29sIHZhbGlkYXRlU2hhZGVyU291cmNlKGNvbnN0IGNoYXIqIHNoYWRlclNv
dXJjZSwgQU5HTEVTaGFkZXJUeXBlLCBTdHJpbmcmIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UsIFN0
cmluZyYgc2hhZGVyVmFsaWRhdGlvbkxvZywgaW50IGV4dHJhQ29tcGlsZU9wdGlvbnMgPSAwKTsK
LQotICAgIC8vIEdldCB0aGUgdW5pZm9ybXMgZm9yIHRoZSBsYXN0IHZhbGlkYXRlZCBzaGFkZXIg
b2YgdHlwZSBTaFNoYWRlclR5cGUuCi0gICAgLy8gRm9yIHRoaXMgZnVuY3Rpb24gdG8gd29yaywg
eW91IG11c3QgdXNlIHRoZSBTSF9BVFRSSUJVVEVTX1VOSUZPUk1TIGNvbXBpbGUgb3B0aW9uIGR1
cmluZyB2YWxpZGF0aW9uLgotICAgIC8vIFJldHVybnMgZmFsc2UgaWYgYW4gdW5leHBlY3RlZCBl
cnJvciBvY2N1cnJlZCBpbiBBTkdMRS4KLSAgICBib29sIGdldFVuaWZvcm1zKFNoU2hhZGVyVHlw
ZSwgVmVjdG9yPEFOR0xFU2hhZGVyU3ltYm9sPiAmc3ltYm9scyk7CisgICAgYm9vbCBjb21waWxl
U2hhZGVyU291cmNlKGNvbnN0IGNoYXIqIHNoYWRlclNvdXJjZSwgQU5HTEVTaGFkZXJUeXBlLCBT
dHJpbmcmIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UsIFN0cmluZyYgc2hhZGVyVmFsaWRhdGlvbkxv
ZywgVmVjdG9yPEFOR0xFU2hhZGVyU3ltYm9sPiYgc3ltYm9scywgaW50IGV4dHJhQ29tcGlsZU9w
dGlvbnMgPSAwKTsKIAogcHJpdmF0ZToKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKaW5kZXggNTMyN2YzYWUyNWFjMGJiNmU4
N2YzMTc0Y2YxYjhiMWJkYzkwMzk4MC4uNGRjYjJkMGUyYzQxZDk5YzI3M2Y5ZDM3MzkwMWZhNTBk
MDQ5OWE5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0M0QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQzRC5oCkBAIC05NjQsMTYgKzk2NCw1OSBAQCBwdWJsaWM6CiAjZW5kaWYK
IAogI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShRVCkgfHwg
UExBVEZPUk0oRUZMKSB8fCBQTEFURk9STShCTEFDS0JFUlJZKQorICAgIHN0cnVjdCBTeW1ib2xJ
bmZvIHsKKyAgICAgICAgU3ltYm9sSW5mbygpCisgICAgICAgICAgICA6IHR5cGUoMCkKKyAgICAg
ICAgICAgICwgc2l6ZSgwKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBTeW1ib2xJ
bmZvKEdDM0RlbnVtIHR5cGUsIGludCBzaXplLCBjb25zdCBTdHJpbmcmIG1hcHBlZE5hbWUpCisg
ICAgICAgICAgICA6IHR5cGUodHlwZSkKKyAgICAgICAgICAgICwgc2l6ZShzaXplKQorICAgICAg
ICAgICAgLCBtYXBwZWROYW1lKG1hcHBlZE5hbWUpCisgICAgICAgIHsKKyAgICAgICAgfQorCisg
ICAgICAgIGJvb2wgb3BlcmF0b3I9PShTeW1ib2xJbmZvJiBvdGhlcikgY29uc3QKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIHR5cGUgPT0gb3RoZXIudHlwZSAmJiBzaXplID09IG90aGVy
LnNpemUgJiYgbWFwcGVkTmFtZSA9PSBvdGhlci5tYXBwZWROYW1lOworICAgICAgICB9CisKKyAg
ICAgICAgR0MzRGVudW0gdHlwZTsKKyAgICAgICAgaW50IHNpemU7CisgICAgICAgIFN0cmluZyBt
YXBwZWROYW1lOworICAgIH07CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBTeW1ib2xJ
bmZvPiBTaGFkZXJTeW1ib2xNYXA7CisKICAgICBzdHJ1Y3QgU2hhZGVyU291cmNlRW50cnkgewor
ICAgICAgICBHQzNEZW51bSB0eXBlOwogICAgICAgICBTdHJpbmcgc291cmNlOworICAgICAgICBT
dHJpbmcgdHJhbnNsYXRlZFNvdXJjZTsKICAgICAgICAgU3RyaW5nIGxvZzsKICAgICAgICAgYm9v
bCBpc1ZhbGlkOworICAgICAgICBTaGFkZXJTeW1ib2xNYXAgYXR0cmlidXRlTWFwOworICAgICAg
ICBTaGFkZXJTeW1ib2xNYXAgdW5pZm9ybU1hcDsKICAgICAgICAgU2hhZGVyU291cmNlRW50cnko
KQotICAgICAgICAgICAgOiBpc1ZhbGlkKDApCisgICAgICAgICAgICA6IHR5cGUoVkVSVEVYX1NI
QURFUikKKyAgICAgICAgICAgICwgaXNWYWxpZChmYWxzZSkKICAgICAgICAgewogICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBTaGFkZXJTeW1ib2xNYXAmIHN5bWJvbE1hcChBTkdMRVNoYWRl
clN5bWJvbFR5cGUgc3ltYm9sVHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHN5
bWJvbFR5cGUgPT0gU0hBREVSX1NZTUJPTF9UWVBFX0FUVFJJQlVURSB8fCBzeW1ib2xUeXBlID09
IFNIQURFUl9TWU1CT0xfVFlQRV9VTklGT1JNKTsKKyAgICAgICAgICAgIGlmIChzeW1ib2xUeXBl
ID09IFNIQURFUl9TWU1CT0xfVFlQRV9BVFRSSUJVVEUpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGF0dHJpYnV0ZU1hcDsKKyAgICAgICAgICAgIHJldHVybiB1bmlmb3JtTWFwOworICAgICAgICB9
CiAgICAgfTsKLSAgICBIYXNoTWFwPFBsYXRmb3JtM0RPYmplY3QsIFNoYWRlclNvdXJjZUVudHJ5
PiBtX3NoYWRlclNvdXJjZU1hcDsKKworICAgIHR5cGVkZWYgSGFzaE1hcDxQbGF0Zm9ybTNET2Jq
ZWN0LCBTaGFkZXJTb3VyY2VFbnRyeT4gU2hhZGVyU291cmNlTWFwOworICAgIFNoYWRlclNvdXJj
ZU1hcCBtX3NoYWRlclNvdXJjZU1hcDsKKworICAgIFN0cmluZyBtYXBwZWRTeW1ib2xOYW1lKFBs
YXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgQU5HTEVTaGFkZXJTeW1ib2xUeXBlLCBjb25zdCBTdHJp
bmcmIG5hbWUpOwogCiAgICAgQU5HTEVXZWJLaXRCcmlkZ2UgbV9jb21waWxlcjsKICNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0
b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbS5jcHAKaW5kZXggNDIx
MWU4MmI3ODFiMWEwYWNiNTI3ZjMwZGY1YzAxNDM5YzQ1MTgwOS4uOWRhNWI1YTE1MzlmMTUzNDVh
MGMyMjE2YzUyM2IyZTRhMDUzZDIyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclZh
bGlkYXRlZFByb2dyYW0uY3BwCkBAIC04NSw4ICs4NSw5IEBAIEN1c3RvbUZpbHRlclZhbGlkYXRl
ZFByb2dyYW06OkN1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0oQ3VzdG9tRmlsdGVyR2xvYmFs
Q29uCiAgICAgLy8gU2hhZGVycyByZWZlcmVuY2VkIGZyb20gdGhlIENTUyBtaXggZnVuY3Rpb24g
dXNlIGEgZGlmZmVyZW50IHZhbGlkYXRvciB0aGFuIHJlZ3VsYXIgV2ViR0wgc2hhZGVycy4gU2Vl
IEN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQuaCBmb3IgbW9yZSBkZXRhaWxzLgogICAgIEFOR0xF
V2ViS2l0QnJpZGdlKiB2YWxpZGF0b3IgPSBwcm9ncmFtSW5mby5taXhTZXR0aW5ncygpLmVuYWJs
ZWQgPyBtX2dsb2JhbENvbnRleHQtPm1peFNoYWRlclZhbGlkYXRvcigpIDogbV9nbG9iYWxDb250
ZXh0LT53ZWJnbFNoYWRlclZhbGlkYXRvcigpOwogICAgIFN0cmluZyB2ZXJ0ZXhTaGFkZXJMb2cs
IGZyYWdtZW50U2hhZGVyTG9nOwotICAgIGJvb2wgdmVydGV4U2hhZGVyVmFsaWQgPSB2YWxpZGF0
b3ItPnZhbGlkYXRlU2hhZGVyU291cmNlKG9yaWdpbmFsVmVydGV4U2hhZGVyLnV0ZjgoKS5kYXRh
KCksIFNIQURFUl9UWVBFX1ZFUlRFWCwgbV92YWxpZGF0ZWRWZXJ0ZXhTaGFkZXIsIHZlcnRleFNo
YWRlckxvZywgU0hfQVRUUklCVVRFU19VTklGT1JNUyk7Ci0gICAgYm9vbCBmcmFnbWVudFNoYWRl
clZhbGlkID0gdmFsaWRhdG9yLT52YWxpZGF0ZVNoYWRlclNvdXJjZShvcmlnaW5hbEZyYWdtZW50
U2hhZGVyLnV0ZjgoKS5kYXRhKCksIFNIQURFUl9UWVBFX0ZSQUdNRU5ULCBtX3ZhbGlkYXRlZEZy
YWdtZW50U2hhZGVyLCBmcmFnbWVudFNoYWRlckxvZywgU0hfQVRUUklCVVRFU19VTklGT1JNUyk7
CisgICAgVmVjdG9yPEFOR0xFU2hhZGVyU3ltYm9sPiBzeW1ib2xzOworICAgIGJvb2wgdmVydGV4
U2hhZGVyVmFsaWQgPSB2YWxpZGF0b3ItPmNvbXBpbGVTaGFkZXJTb3VyY2Uob3JpZ2luYWxWZXJ0
ZXhTaGFkZXIudXRmOCgpLmRhdGEoKSwgU0hBREVSX1RZUEVfVkVSVEVYLCBtX3ZhbGlkYXRlZFZl
cnRleFNoYWRlciwgdmVydGV4U2hhZGVyTG9nLCBzeW1ib2xzKTsKKyAgICBib29sIGZyYWdtZW50
U2hhZGVyVmFsaWQgPSB2YWxpZGF0b3ItPmNvbXBpbGVTaGFkZXJTb3VyY2Uob3JpZ2luYWxGcmFn
bWVudFNoYWRlci51dGY4KCkuZGF0YSgpLCBTSEFERVJfVFlQRV9GUkFHTUVOVCwgbV92YWxpZGF0
ZWRGcmFnbWVudFNoYWRlciwgZnJhZ21lbnRTaGFkZXJMb2csIHN5bWJvbHMpOwogICAgIGlmICgh
dmVydGV4U2hhZGVyVmFsaWQgfHwgIWZyYWdtZW50U2hhZGVyVmFsaWQpIHsKICAgICAgICAgLy8g
RklYTUU6IFJlcG9ydCB0aGUgdmFsaWRhdGlvbiBlcnJvcnMuCiAgICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDQxNgpAQCAtOTQsMTIgKzk1LDcgQEAg
Q3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbTo6Q3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3Jh
bShDdXN0b21GaWx0ZXJHbG9iYWxDb24KICAgICB9CiAKICAgICAvLyBWYWxpZGF0ZSB0aGUgYXV0
aG9yJ3Mgc2FtcGxlcnMuCi0gICAgVmVjdG9yPEFOR0xFU2hhZGVyU3ltYm9sPiB1bmlmb3JtczsK
LSAgICBpZiAoIXZhbGlkYXRvci0+Z2V0VW5pZm9ybXMoU0hfVkVSVEVYX1NIQURFUiwgdW5pZm9y
bXMpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0b3ItPmdldFVuaWZvcm1zKFNI
X0ZSQUdNRU5UX1NIQURFUiwgdW5pZm9ybXMpKQotICAgICAgICByZXR1cm47Ci0gICAgZm9yIChW
ZWN0b3I8QU5HTEVTaGFkZXJTeW1ib2w+OjppdGVyYXRvciBpdCA9IHVuaWZvcm1zLmJlZ2luKCk7
IGl0ICE9IHVuaWZvcm1zLmVuZCgpOyArK2l0KSB7CisgICAgZm9yIChWZWN0b3I8QU5HTEVTaGFk
ZXJTeW1ib2w+OjppdGVyYXRvciBpdCA9IHN5bWJvbHMuYmVnaW4oKTsgaXQgIT0gc3ltYm9scy5l
bmQoKTsgKytpdCkgewogICAgICAgICBpZiAoaXQtPmlzU2FtcGxlcigpKSB7CiAgICAgICAgICAg
ICAvLyBGSVhNRTogRm9yIG5vdywgd2UgcmVzdHJpY3Qgc2hhZGVycyB3aXRoIGFueSBzYW1wbGVy
IGRlZmluZWQuCiAgICAgICAgICAgICAvLyBXaGVuIHdlIGltcGxlbWVudCB0ZXh0dXJlIHBhcmFt
ZXRlcnMsIHdlIHdpbGwgYWxsb3cgc2hhZGVycyB3aG9zZSBzYW1wbGVycyBhcmUgYm91bmQgdG8g
dmFsaWQgdGV4dHVyZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwCmlu
ZGV4IGNmN2ZhMmY0NGI4MDJjNmNmYzFhMTYwODA5NTdjMWMyOTAwNjVkOTYuLmUyZWJmNmZkNzYz
YWQwZTBhZWU0YjhhNTFhMGVhOWVjZjgyMDkyMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0xDb21tb24uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RP
cGVuR0xDb21tb24uY3BwCkBAIC0xNjAsMTYgKzE2MCwyNCBAQCBTdHJpbmcgRXh0ZW5zaW9uczNE
T3BlbkdMQ29tbW9uOjpnZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlQU5HTEUoUGxhdGZvcm0zRE9i
amVjdAogCiAgICAgU3RyaW5nIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2U7CiAgICAgU3RyaW5nIHNo
YWRlckluZm9Mb2c7Ci0gICAgaW50IGV4dHJhQ29tcGlsZU9wdGlvbnMgPSAwOworICAgIGludCBl
eHRyYUNvbXBpbGVPcHRpb25zID0gU0hfTUFQX0xPTkdfVkFSSUFCTEVfTkFNRVM7CiAKICAgICBp
ZiAobV9yZXF1aXJlc0J1aWx0SW5GdW5jdGlvbkVtdWxhdGlvbikKICAgICAgICAgZXh0cmFDb21w
aWxlT3B0aW9ucyB8PSBTSF9FTVVMQVRFX0JVSUxUX0lOX0ZVTkNUSU9OUzsKIAotICAgIGJvb2wg
aXNWYWxpZCA9IGNvbXBpbGVyLnZhbGlkYXRlU2hhZGVyU291cmNlKGVudHJ5LnNvdXJjZS51dGY4
KCkuZGF0YSgpLCBzaGFkZXJUeXBlLCB0cmFuc2xhdGVkU2hhZGVyU291cmNlLCBzaGFkZXJJbmZv
TG9nLCBleHRyYUNvbXBpbGVPcHRpb25zKTsKKyAgICBWZWN0b3I8QU5HTEVTaGFkZXJTeW1ib2w+
IHN5bWJvbHM7CisgICAgYm9vbCBpc1ZhbGlkID0gY29tcGlsZXIuY29tcGlsZVNoYWRlclNvdXJj
ZShlbnRyeS5zb3VyY2UudXRmOCgpLmRhdGEoKSwgc2hhZGVyVHlwZSwgdHJhbnNsYXRlZFNoYWRl
clNvdXJjZSwgc2hhZGVySW5mb0xvZywgc3ltYm9scywgZXh0cmFDb21waWxlT3B0aW9ucyk7CiAK
ICAgICBlbnRyeS5sb2cgPSBzaGFkZXJJbmZvTG9nOwogICAgIGVudHJ5LmlzVmFsaWQgPSBpc1Zh
bGlkOwogCisgICAgc2l6ZV90IG51bVN5bWJvbHMgPSBzeW1ib2xzLnNpemUoKTsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG51bVN5bWJvbHM7ICsraSkgeworICAgICAgICBBTkdMRVNoYWRl
clN5bWJvbCBzaGFkZXJTeW1ib2wgPSBzeW1ib2xzW2ldOworICAgICAgICBHcmFwaGljc0NvbnRl
eHQzRDo6U3ltYm9sSW5mbyBzeW1ib2xJbmZvKHNoYWRlclN5bWJvbC5kYXRhVHlwZSwgc2hhZGVy
U3ltYm9sLnNpemUsIHNoYWRlclN5bWJvbC5tYXBwZWROYW1lKTsKKyAgICAgICAgZW50cnkuc3lt
Ym9sTWFwKHNoYWRlclN5bWJvbC5zeW1ib2xUeXBlKS5zZXQoc2hhZGVyU3ltYm9sLm5hbWUsIHN5
bWJvbEluZm8pOworICAgIH0KKwogICAgIGlmICghaXNWYWxpZCkKICAgICAgICAgcmV0dXJuICIi
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dDNET3BlbkdMQ29tbW9uLmNwcAppbmRl
eCA4YTJhYzgxZTY3NjAxMzM5MmI2NjhjNjdhMGViNWNjZWM5NzMyZmU2Li4xNTE2ZWEyNjA4NGFl
Y2VjZjhkNWU2MDczNzZjZDUxMjI0OTIxYjkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RPcGVuR0xDb21tb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0Nv
bnRleHQzRE9wZW5HTENvbW1vbi5jcHAKQEAgLTQ2NSw3ICs0NjUsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpjb21waWxlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQogICAgIDo6
Z2xHZXRTaGFkZXJpdihzaGFkZXIsIEdMX0lORk9fTE9HX0xFTkdUSCwgJmxlbmd0aCk7CiAKICAg
ICBpZiAobGVuZ3RoKSB7Ci0gICAgICAgIEhhc2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlNoYWRlclNvdXJjZUVudHJ5Pjo6aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFk
ZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOworICAgICAgICBTaGFkZXJTb3VyY2VNYXA6Oml0ZXJh
dG9yIHJlc3VsdCA9IG1fc2hhZGVyU291cmNlTWFwLmZpbmQoc2hhZGVyKTsKICAgICAgICAgR3Jh
cGhpY3NDb250ZXh0M0Q6OlNoYWRlclNvdXJjZUVudHJ5JiBlbnRyeSA9IHJlc3VsdC0+c2Vjb25k
OwogCiAgICAgICAgIEdMc2l6ZWkgc2l6ZSA9IDA7CkBAIC02NzEsMTMgKzY3MSwzOCBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBdHRhY2hlZFNoYWRlcnMoUGxhdGZvcm0zRE9iamVjdCBw
cm9ncmFtLCBHQzNEc2l6ZWkgbQogICAgIDo6Z2xHZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwg
bWF4Q291bnQsIGNvdW50LCBzaGFkZXJzKTsKIH0KIAorU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNE
OjptYXBwZWRTeW1ib2xOYW1lKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgQU5HTEVTaGFkZXJT
eW1ib2xUeXBlIHN5bWJvbFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBHQzNEc2l6
ZWkgY291bnQ7CisgICAgUGxhdGZvcm0zRE9iamVjdCBzaGFkZXJzWzJdOworICAgIGdldEF0dGFj
aGVkU2hhZGVycyhwcm9ncmFtLCAyLCAmY291bnQsIHNoYWRlcnMpOworCisgICAgZm9yIChHQzNE
c2l6ZWkgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIFNoYWRlclNvdXJjZU1hcDo6
aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXJzW2ldKTsKKyAg
ICAgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgIGNvbnN0IFNoYWRlclN5bWJvbE1hcCYgc3ltYm9sTWFwID0g
cmVzdWx0LT5zZWNvbmQuc3ltYm9sTWFwKHN5bWJvbFR5cGUpOworICAgICAgICBTaGFkZXJTeW1i
b2xNYXA6OmNvbnN0X2l0ZXJhdG9yIHN5bWJvbEVudHJ5ID0gc3ltYm9sTWFwLmZpbmQobmFtZSk7
CisgICAgICAgIGlmIChzeW1ib2xFbnRyeSAhPSBzeW1ib2xNYXAuZW5kKCkpCisgICAgICAgICAg
ICByZXR1cm4gc3ltYm9sRW50cnktPnNlY29uZC5tYXBwZWROYW1lOworICAgIH0KKyAgICByZXR1
cm4gbmFtZTsKK30KKwogaW50IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBdHRyaWJMb2NhdGlvbihQ
bGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBpZiAo
IXByb2dyYW0pCiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIHJldHVybiA6OmdsR2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4KCku
ZGF0YSgpKTsKKworICAgIC8vIFRoZSBhdHRyaWJ1dGUgbmFtZSBtYXkgaGF2ZSBiZWVuIHRyYW5z
bGF0ZWQgZHVyaW5nIEFOR0xFIGNvbXBpbGF0aW9uLgorICAgIC8vIExvb2sgdGhyb3VnaCB0aGUg
Y29ycmVzcG9uZGluZyBTaGFkZXJTb3VyY2VNYXAgdG8gbWFrZSBzdXJlIHdlCisgICAgLy8gcmVm
ZXJlbmNlIHRoZSBtYXBwZWQgbmFtZSByYXRoZXIgdGhhbiB0aGUgZXh0ZXJuYWwgbmFtZS4KKyAg
ICBTdHJpbmcgbWFwcGVkTmFtZSA9IG1hcHBlZFN5bWJvbE5hbWUocHJvZ3JhbSwgU0hBREVSX1NZ
TUJPTF9UWVBFX0FUVFJJQlVURSwgbmFtZSk7CisKKyAgICByZXR1cm4gOjpnbEdldEF0dHJpYkxv
Y2F0aW9uKHByb2dyYW0sIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7CiB9CiAKIEdyYXBoaWNz
Q29udGV4dDNEOjpBdHRyaWJ1dGVzIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRDb250ZXh0QXR0cmli
dXRlcygpCkBAIC0xMTI2LDcgKzExNTEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRT
aGFkZXJpdihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlciwgR0MzRGVudW0gcG5hbWUsIEdDMwogCiAg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAKLSAgICBIYXNoTWFwPFBsYXRmb3JtM0RPYmplY3Qs
IFNoYWRlclNvdXJjZUVudHJ5Pjo6aXRlcmF0b3IgcmVzdWx0ID0gbV9zaGFkZXJTb3VyY2VNYXAu
ZmluZChzaGFkZXIpOworICAgIFNoYWRlclNvdXJjZU1hcDo6aXRlcmF0b3IgcmVzdWx0ID0gbV9z
aGFkZXJTb3VyY2VNYXAuZmluZChzaGFkZXIpOwogICAgIAogICAgIHN3aXRjaCAocG5hbWUpIHsK
ICAgICBjYXNlIERFTEVURV9TVEFUVVM6CkBAIC0xMTYxLDcgKzExODYsNyBAQCBTdHJpbmcgR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlckluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIp
CiAKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKIAotICAgIEhhc2hNYXA8UGxhdGZvcm0zRE9i
amVjdCwgU2hhZGVyU291cmNlRW50cnk+OjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJj
ZU1hcC5maW5kKHNoYWRlcik7CisgICAgU2hhZGVyU291cmNlTWFwOjppdGVyYXRvciByZXN1bHQg
PSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CiAgICAgaWYgKHJlc3VsdCA9PSBtX3No
YWRlclNvdXJjZU1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOyAKIApAQCAtMTE4
Nyw3ICsxMjEyLDcgQEAgU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJTb3VyY2Uo
UGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCiAKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKIAot
ICAgIEhhc2hNYXA8UGxhdGZvcm0zRE9iamVjdCwgU2hhZGVyU291cmNlRW50cnk+OjppdGVyYXRv
ciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7CisgICAgU2hhZGVyU291
cmNlTWFwOjppdGVyYXRvciByZXN1bHQgPSBtX3NoYWRlclNvdXJjZU1hcC5maW5kKHNoYWRlcik7
CiAgICAgaWYgKHJlc3VsdCA9PSBtX3NoYWRlclNvdXJjZU1hcC5lbmQoKSkKICAgICAgICAgcmV0
dXJuIFN0cmluZygpOyAKIApAQCAtMTIyNCw3ICsxMjQ5LDEzIEBAIEdDM0RpbnQgR3JhcGhpY3ND
b250ZXh0M0Q6OmdldFVuaWZvcm1Mb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIGNv
bnN0IFN0CiAgICAgQVNTRVJUKHByb2dyYW0pOwogCiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0gICAgcmV0dXJuIDo6Z2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4KCku
ZGF0YSgpKTsKKworICAgIC8vIFRoZSB1bmlmb3JtIG5hbWUgbWF5IGhhdmUgYmVlbiB0cmFuc2xh
dGVkIGR1cmluZyBBTkdMRSBjb21waWxhdGlvbi4KKyAgICAvLyBMb29rIHRocm91Z2ggdGhlIGNv
cnJlc3BvbmRpbmcgU2hhZGVyU291cmNlTWFwIHRvIG1ha2Ugc3VyZSB3ZQorICAgIC8vIHJlZmVy
ZW5jZSB0aGUgbWFwcGVkIG5hbWUgcmF0aGVyIHRoYW4gdGhlIGV4dGVybmFsIG5hbWUuCisgICAg
U3RyaW5nIG1hcHBlZE5hbWUgPSBtYXBwZWRTeW1ib2xOYW1lKHByb2dyYW0sIFNIQURFUl9TWU1C
T0xfVFlQRV9VTklGT1JNLCBuYW1lKTsKKworICAgIHJldHVybiA6OmdsR2V0VW5pZm9ybUxvY2F0
aW9uKHByb2dyYW0sIG1hcHBlZE5hbWUudXRmOCgpLmRhdGEoKSk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYmZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBw
bmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxv
ZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA2NTgwODRhOWE5ZmQ3NDQxYTcyMjUzZTJm
ODk2YjI3NGYxMDQ1NzhkLi5mYzY0ZDNmYzdjNWI2NjI3NmU0NzAxNWE1NGY3YjA1YjQ0ODVlZGZm
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTItMTAtMDMgIERlYW4gSmFja3NvbiAgPGRpbm9A
YXBwbGUuY29tPgorCisgICAgICAgIEF0dHJpYnV0ZSBhbmQgVW5pZm9ybSB2YXJpYWJsZSBuYW1l
cyBuZWVkIHRyYW5zbGF0aW9uIGluIHNoYWRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA5ODkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGRlZCBzdWJ0ZXN0cyB0byBleGVyY2lzZSB2YXJpYWJsZXMg
dGhhdCBhcmUgd2VsbCB1bmRlciB0aGUgbGltaXRzIGJ1dAorICAgICAgICBub3QgbG9uZyBlbm91
Z2ggdG8gcHJvZHVjZSBhbiBlcnJvci4gVGhpcyB3YXkgd2Ugbm93IHRlc3QgYWxsIHRocmVlIG9w
dGlvbnM6CisgICAgICAgIHVuZGVyIHRoZSBsaW1pdCwgYXQgdGhlIGxpbWl0LCBvdmVyIHRoZSBs
aW1pdC4KKworICAgICAgICBBbHNvLCB0aGUgdGVzdHMgYXJlIHVuc2tpcHBlZCBvbiBNYWMuCisK
KyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9hdHRyaWItbG9jYXRpb24tbGVuZ3RoLWxpbWl0
cy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvYXR0cmliLWxvY2F0
aW9uLWxlbmd0aC1saW1pdHMuaHRtbDoKKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC91bmlm
b3JtLWxvY2F0aW9uLWxlbmd0aC1saW1pdHMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3Qv
Y2FudmFzL3dlYmdsL3VuaWZvcm0tbG9jYXRpb24tbGVuZ3RoLWxpbWl0cy5odG1sOgorICAgICAg
ICAqIHBsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25zOgorCiAyMDEyLTEwLTAyICBPamFuIFZh
ZmFpICA8b2phbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVGVzdCByZWJhc2VsaW5lcyBub3cg
dGhhdCB0aGUgQ2hyb21pdW0gTGlvbiBib3QgaGFzIGJlZW4gdXBncmFkZWQgdG8gMTAuNy41Lgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvYXR0cmliLWxvY2F0aW9u
LWxlbmd0aC1saW1pdHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2Vi
Z2wvYXR0cmliLWxvY2F0aW9uLWxlbmd0aC1saW1pdHMtZXhwZWN0ZWQudHh0CmluZGV4IGMyMjg5
MTZjYWQyZjIxNzAwNWRmNzEzN2QyNTFjYjIxMjhjOTgwMzQuLmIzNDUwZTQzYzU1OGUxY2NhNzE0
ODUzMDdkMmYxMDYyMWZhYTgzMzAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvY2FudmFz
L3dlYmdsL2F0dHJpYi1sb2NhdGlvbi1sZW5ndGgtbGltaXRzLWV4cGVjdGVkLnR4dAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9hdHRyaWItbG9jYXRpb24tbGVuZ3RoLWxpbWl0
cy1leHBlY3RlZC50eHQKQEAgLTMsNiArMywxMCBAQCBUZXN0IGF0dHJpYiBsb2NhdGlvbiB1bmRl
cm5lYXRoIHRoZSBsZW5ndGggbGltaXQKIFBBU1MgZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9n
cmFtLCBnbC5MSU5LX1NUQVRVUykgaXMgdHJ1ZQogUEFTUyBhdHRyaWIgbG9jYXRpb24gc2hvdWxk
IG5vdCBiZSAtMQogUEFTUyBnZXRFcnJvciB3YXMgZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDog
CitUZXN0IGF0dHJpYiBsb2NhdGlvbiBleGFjdGx5IGF0IHRoZSBsZW5ndGggbGltaXQKK1BBU1Mg
Z2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUykgaXMgdHJ1ZQor
UEFTUyBhdHRyaWIgbG9jYXRpb24gc2hvdWxkIG5vdCBiZSAtMQorUEFTUyBnZXRFcnJvciB3YXMg
ZXhwZWN0ZWQgdmFsdWU6IE5PX0VSUk9SIDogCiBUZXN0IGF0dHJpYiBsb2NhdGlvbiBvdmVyIHRo
ZSBsZW5ndGggbGltaXQKIFNoYWRlciBjb21waWxhdGlvbiBzaG91bGQgZmFpbAogUEFTUyB3dHUu
bG9hZFNoYWRlckZyb21TY3JpcHQoZ2wsICJiYWRWZXJ0ZXhTaGFkZXIiLCBnbC5WRVJURVhfU0hB
REVSLCBmdW5jdGlvbiAoZXJyKSB7fSkgaXMgbnVsbApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC9jYW52YXMvd2ViZ2wvYXR0cmliLWxvY2F0aW9uLWxlbmd0aC1saW1pdHMuaHRtbCBiL0xh
eW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2F0dHJpYi1sb2NhdGlvbi1sZW5ndGgtbGltaXRz
Lmh0bWwKaW5kZXggZjQ0NDgzNmU3ODhiNWFlMzdlMTFlZmYxOTQ1NDlhMGIyNDg3OGIyYy4uNzQ3
OGQ3Y2JkNTU5OWYwMjcwOGM0YTE4NDQyMWU4ZmZlMzE5NGMxNiAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvYXR0cmliLWxvY2F0aW9uLWxlbmd0aC1saW1pdHMuaHRt
bAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9hdHRyaWItbG9jYXRpb24tbGVu
Z3RoLWxpbWl0cy5odG1sCkBAIC0xMyw3ICsxMywxNiBAQCBUaGVyZSBpcyBzdXBwb3NlZCB0byBi
ZSBhbiBleGFtcGxlIGRyYXdpbmcgaGVyZSwgYnV0IGl0J3Mgbm90IGltcG9ydGFudC4KIDwvY2Fu
dmFzPgogPGRpdiBpZD0iZGVzY3JpcHRpb24iPlZlcmlmeSBsaW1pdHMgb24gdGhlIGxlbmd0aHMg
b2YgYXR0cmliIGxvY2F0aW9ucy48L2Rpdj4KIDxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgotPHNj
cmlwdCBpZD0iZ29vZFZlcnRleFNoYWRlciIgdHlwZT0ieC1zaGFkZXIveC12ZXJ0ZXgiPgorPHNj
cmlwdCBpZD0iZ29vZFZlcnRleFNoYWRlcjEiIHR5cGU9Ingtc2hhZGVyL3gtdmVydGV4Ij4KKy8v
IEEgdmVydGV4IHNoYWRlciB3aGVyZSB0aGUgbmVlZGVkIGF0dHJpYiBsb2NhdGlvbiBpcyBsb25n
LCBidXQgbm90IG92ZXIgdGhlIGxpbWl0LgorYXR0cmlidXRlIHZlYzQgdlBvc2l0aW9uMDEyMzQ1
Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEy
MzQ1Njc4OTA7CisKK3ZvaWQgbWFpbigpCit7CisgICAgZ2xfUG9zaXRpb24gPSB2UG9zaXRpb24w
MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3
ODkwMTIzNDU2Nzg5MDsKK30KKzwvc2NyaXB0PgorPHNjcmlwdCBpZD0iZ29vZFZlcnRleFNoYWRl
cjIiIHR5cGU9Ingtc2hhZGVyL3gtdmVydGV4Ij4KIC8vIEEgdmVydGV4IHNoYWRlciB3aGVyZSB0
aGUgbmVlZGVkIGF0dHJpYiBsb2NhdGlvbiBpcyBleGFjdGx5IDI1NiBjaGFyYWN0ZXJzLgogYXR0
cmlidXRlIHZlYzQgdlBvc2l0aW9uMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1
Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEy
MzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5
MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2
Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1NjsKIApAQCAtNDcsNyArNTYs
MTggQEAgdmFyIHd0dSA9IFdlYkdMVGVzdFV0aWxzOwogdmFyIGdsID0gd3R1LmNyZWF0ZTNEQ29u
dGV4dChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZXhhbXBsZSIpKTsKIAogZGVidWcoIlRlc3Qg
YXR0cmliIGxvY2F0aW9uIHVuZGVybmVhdGggdGhlIGxlbmd0aCBsaW1pdCIpOwotdmFyIHByb2dy
YW0gPSB3dHUubG9hZFByb2dyYW1Gcm9tU2NyaXB0KGdsLCAiZ29vZFZlcnRleFNoYWRlciIsICJm
cmFnbWVudFNoYWRlciIpOwordmFyIHByb2dyYW0gPSB3dHUubG9hZFByb2dyYW1Gcm9tU2NyaXB0
KGdsLCAiZ29vZFZlcnRleFNoYWRlcjEiLCAiZnJhZ21lbnRTaGFkZXIiKTsKK3Nob3VsZEJlKCdn
bC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJTktfU1RBVFVTKScsICd0cnVlJyk7
Cit2YXIgYXR0cmliTG9jID0gZ2wuZ2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgInZQb3NpdGlv
bjAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1
Njc4OTAxMjM0NTY3ODkwIik7CitpZiAoYXR0cmliTG9jID09IC0xKSB7CisgICAgdGVzdEZhaWxl
ZCgiYXR0cmliIGxvY2F0aW9uIHdhcyAtMSwgc2hvdWxkIG5vdCBiZSIpOworfSBlbHNlIHsKKyAg
ICB0ZXN0UGFzc2VkKCJhdHRyaWIgbG9jYXRpb24gc2hvdWxkIG5vdCBiZSAtMSIpOworfQord3R1
LmdsRXJyb3JTaG91bGRCZShnbCwgZ2wuTk9ORSk7CisKK2RlYnVnKCJUZXN0IGF0dHJpYiBsb2Nh
dGlvbiBleGFjdGx5IGF0IHRoZSBsZW5ndGggbGltaXQiKTsKK3ZhciBwcm9ncmFtID0gd3R1Lmxv
YWRQcm9ncmFtRnJvbVNjcmlwdChnbCwgImdvb2RWZXJ0ZXhTaGFkZXIyIiwgImZyYWdtZW50U2hh
ZGVyIik7CiBzaG91bGRCZSgnZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5L
X1NUQVRVUyknLCAndHJ1ZScpOwogdmFyIGF0dHJpYkxvYyA9IGdsLmdldEF0dHJpYkxvY2F0aW9u
KHByb2dyYW0sICJ2UG9zaXRpb24wMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2
Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIz
NDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkw
MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3
ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Iik7CiBpZiAoYXR0cmliTG9j
ID09IC0xKSB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC91bmlm
b3JtLWxvY2F0aW9uLWxlbmd0aC1saW1pdHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFz
dC9jYW52YXMvd2ViZ2wvdW5pZm9ybS1sb2NhdGlvbi1sZW5ndGgtbGltaXRzLWV4cGVjdGVkLnR4
dAppbmRleCA5ZTA5OGVkZjBiMzg1NzUzYTUyYTQ0YmFkNmU4ZjM4OWM5MTZlYzcxLi41ZWQ3YmVk
MzViZTZmY2Q3ZDgyZTZlY2MyZWRmZTc4YTQwMjcwZTk1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9mYXN0L2NhbnZhcy93ZWJnbC91bmlmb3JtLWxvY2F0aW9uLWxlbmd0aC1saW1pdHMtZXhwZWN0
ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3VuaWZvcm0tbG9jYXRp
b24tbGVuZ3RoLWxpbWl0cy1leHBlY3RlZC50eHQKQEAgLTMsNiArMywxMCBAQCBUZXN0IHVuaWZv
cm0gbG9jYXRpb24gdW5kZXJuZWF0aCB0aGUgbGVuZ3RoIGxpbWl0CiBQQVNTIGdsLmdldFByb2dy
YW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuTElOS19TVEFUVVMpIGlzIHRydWUKIFBBU1MgdW5pZm9y
bUxvYyBpcyBub24tbnVsbC4KIFBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19F
UlJPUiA6IAorVGVzdCB1bmlmb3JtIGxvY2F0aW9uIGV4YWN0bHkgYXQgdGhlIGxlbmd0aCBsaW1p
dAorUEFTUyBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJTktfU1RBVFVTKSBp
cyB0cnVlCitQQVNTIHVuaWZvcm1Mb2MgaXMgbm9uLW51bGwuCitQQVNTIGdldEVycm9yIHdhcyBl
eHBlY3RlZCB2YWx1ZTogTk9fRVJST1IgOiAKIFRlc3QgdW5pZm9ybSBsb2NhdGlvbiBvdmVyIHRo
ZSBsZW5ndGggbGltaXQKIFBBU1MgZ2V0RXJyb3Igd2FzIGV4cGVjdGVkIHZhbHVlOiBOT19FUlJP
UiA6IAogUEFTUyBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJTktfU1RBVFVT
KSBpcyB0cnVlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC91bmlm
b3JtLWxvY2F0aW9uLWxlbmd0aC1saW1pdHMuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFz
L3dlYmdsL3VuaWZvcm0tbG9jYXRpb24tbGVuZ3RoLWxpbWl0cy5odG1sCmluZGV4IDAwMGQ0OGM1
ODljYjE4OThhNDBiZmJmZTAwZjhjMGZiZWExY2JjNmEuLjQ1ZGRmOTM5MzliZjA1NTU5NjgxZTJl
MTlkZTNiZjIzYjIxNjNkYmMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dl
YmdsL3VuaWZvcm0tbG9jYXRpb24tbGVuZ3RoLWxpbWl0cy5odG1sCisrKyBiL0xheW91dFRlc3Rz
L2Zhc3QvY2FudmFzL3dlYmdsL3VuaWZvcm0tbG9jYXRpb24tbGVuZ3RoLWxpbWl0cy5odG1sCkBA
IC0xMyw3ICsxMywyMyBAQCBUaGVyZSBpcyBzdXBwb3NlZCB0byBiZSBhbiBleGFtcGxlIGRyYXdp
bmcgaGVyZSwgYnV0IGl0J3Mgbm90IGltcG9ydGFudC4KIDwvY2FudmFzPgogPGRpdiBpZD0iZGVz
Y3JpcHRpb24iPlZlcmlmeSBsaW1pdHMgb24gdGhlIGxlbmd0aHMgb2YgdW5pZm9ybSBsb2NhdGlv
bnMuPC9kaXY+CiA8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KLTxzY3JpcHQgaWQ9Imdvb2RWZXJ0
ZXhTaGFkZXIiIHR5cGU9Ingtc2hhZGVyL3gtdmVydGV4Ij4KKzxzY3JpcHQgaWQ9Imdvb2RWZXJ0
ZXhTaGFkZXIxIiB0eXBlPSJ4LXNoYWRlci94LXZlcnRleCI+CisvLyBBIHZlcnRleCBzaGFkZXIg
d2hlcmUgdGhlIHVuaWZvcm0gbmFtZSBpcyBsb25nLCBidXQgd2VsbCBiZWxvdyB0aGUgbGltaXQu
CitzdHJ1Y3QgTmVzdGluZzIgeworICAgIHZlYzQgaWRlbnRpZmllcjYyQ2hhcmFjdGVyc0xvbmdf
MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ7Cit9OworCitzdHJ1Y3QgTmVzdGlu
ZzEgeworICAgIE5lc3RpbmcyIGlkZW50aWZpZXI2NENoYXJhY3RlcnNMb25nXzAxMjM0NTY3ODkw
MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY7Cit9OworCit1bmlmb3JtIE5lc3RpbmcxIGlkZW50
aWZpZXI3MENoYXJhY3RlcnNMb25nXzAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0
NTY3ODkwOworCit2b2lkIG1haW4oKSB7CisgICAgZ2xfUG9zaXRpb24gPSBpZGVudGlmaWVyNzBD
aGFyYWN0ZXJzTG9uZ18wMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MC5p
ZGVudGlmaWVyNjRDaGFyYWN0ZXJzTG9uZ18wMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkw
MTIzNDU2LmlkZW50aWZpZXI2MkNoYXJhY3RlcnNMb25nXzAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEy
MzQ1Njc4OTAxMjM0OworfQorPC9zY3JpcHQ+Cis8c2NyaXB0IGlkPSJnb29kVmVydGV4U2hhZGVy
MiIgdHlwZT0ieC1zaGFkZXIveC12ZXJ0ZXgiPgogLy8gQSB2ZXJ0ZXggc2hhZGVyIHdoZXJlIHRo
ZSBuZWVkZWQgdW5pZm9ybSBsb2NhdGlvbiBpcyBleGFjdGx5IDI1NiBjaGFyYWN0ZXJzLgogc3Ry
dWN0IE5lc3RpbmcyIHsKICAgICB2ZWM0IGlkZW50aWZpZXI2MkNoYXJhY3RlcnNMb25nXzAxMjM0
NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0OwpAQCAtNjIsNyArNzgsMTQgQEAgdmFyIHd0
dSA9IFdlYkdMVGVzdFV0aWxzOwogdmFyIGdsID0gd3R1LmNyZWF0ZTNEQ29udGV4dChkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiZXhhbXBsZSIpKTsKIAogZGVidWcoIlRlc3QgdW5pZm9ybSBsb2Nh
dGlvbiB1bmRlcm5lYXRoIHRoZSBsZW5ndGggbGltaXQiKTsKLXZhciBwcm9ncmFtID0gd3R1Lmxv
YWRQcm9ncmFtRnJvbVNjcmlwdChnbCwgImdvb2RWZXJ0ZXhTaGFkZXIiLCAiZnJhZ21lbnRTaGFk
ZXIiKTsKK3ZhciBwcm9ncmFtID0gd3R1LmxvYWRQcm9ncmFtRnJvbVNjcmlwdChnbCwgImdvb2RW
ZXJ0ZXhTaGFkZXIxIiwgImZyYWdtZW50U2hhZGVyIik7CitzaG91bGRCZSgnZ2wuZ2V0UHJvZ3Jh
bVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUyknLCAndHJ1ZScpOwordmFyIHVuaWZv
cm1Mb2MgPSBnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgImlkZW50aWZpZXI3MENoYXJh
Y3RlcnNMb25nXzAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwLmlkZW50
aWZpZXI2NENoYXJhY3RlcnNMb25nXzAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0
NTYuaWRlbnRpZmllcjYyQ2hhcmFjdGVyc0xvbmdfMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2
Nzg5MDEyMzQiKTsKK3Nob3VsZEJlTm9uTnVsbCgndW5pZm9ybUxvYycpOword3R1LmdsRXJyb3JT
aG91bGRCZShnbCwgZ2wuTk9ORSk7CisKK2RlYnVnKCJUZXN0IHVuaWZvcm0gbG9jYXRpb24gZXhh
Y3RseSBhdCB0aGUgbGVuZ3RoIGxpbWl0Iik7Cit2YXIgcHJvZ3JhbSA9IHd0dS5sb2FkUHJvZ3Jh
bUZyb21TY3JpcHQoZ2wsICJnb29kVmVydGV4U2hhZGVyMiIsICJmcmFnbWVudFNoYWRlciIpOwog
c2hvdWxkQmUoJ2dsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuTElOS19TVEFUVVMp
JywgJ3RydWUnKTsKIHZhciB1bmlmb3JtTG9jID0gZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHByb2dy
YW0sICJpZGVudGlmaWVyMTI4Q2hhcmFjdGVyc0xvbmdfMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIz
NDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkw
MTIzNDU2Nzg5MDEyMzQ1Njc4OS5pZGVudGlmaWVyNjRDaGFyYWN0ZXJzTG9uZ18wMTIzNDU2Nzg5
MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2LmlkZW50aWZpZXI2MkNoYXJhY3RlcnNMb25nXzAx
MjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0Iik7CiBzaG91bGRCZU5vbk51bGwoJ3Vu
aWZvcm1Mb2MnKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9UZXN0RXhw
ZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMKaW5k
ZXggYWZjOWEyNmE1MmNhYTVmYmNkZjMxMDI5NzAxNWFhNzdhZTk0NzJjMS4uNzE2NjZkYTZmY2U3
ZmYyMzMwMTE4NWNkZDE4ZDNjNDk2YWRjMTFjMiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFj
L1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTQ3OSwxMCArNDc5LDYgQEAgZmFzdC9ldmVudHMvcGxhdGZv
cm0td2hlZWxldmVudC1wYWdpbmcteS1pbi1ub24tc2Nyb2xsaW5nLXBhZ2UuaHRtbAogZmFzdC9l
dmVudHMvcGxhdGZvcm0td2hlZWxldmVudC1wYWdpbmcteS1pbi1zY3JvbGxpbmctZGl2Lmh0bWwK
IGZhc3QvZXZlbnRzL3BsYXRmb3JtLXdoZWVsZXZlbnQtcGFnaW5nLXktaW4tc2Nyb2xsaW5nLXBh
Z2UuaHRtbAogCi0jIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDk4
OQotZmFzdC9jYW52YXMvd2ViZ2wvYXR0cmliLWxvY2F0aW9uLWxlbmd0aC1saW1pdHMuaHRtbAot
ZmFzdC9jYW52YXMvd2ViZ2wvdW5pZm9ybS1sb2NhdGlvbi1sZW5ndGgtbGltaXRzLmh0bWwKLQog
IyBXZWIgSW50ZW50cyBpcyBub3QgeWV0IGVuYWJsZWQuCiB3ZWJpbnRlbnRzLwogCg==
</data>
<flag name="review"
          id="179628"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
      

    </bug>

</bugzilla>