<?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>144314</bug_id>
          
          <creation_ts>2015-04-27 22:32:29 -0700</creation_ts>
          <short_desc>String#startsWith/endsWith/includes don&apos;t handle Infinity position/endPosition args correctly</short_desc>
          <delta_ts>2022-08-22 09:03:59 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=244196</see_also>
          <bug_file_loc>https://people.mozilla.org/~jorendorff/es6-draft.html#sec-string.prototype.startswith</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jordan Harband">ljharb</reporter>
          <assigned_to name="Jordan Harband">ljharb</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>fpizlo</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1089408</commentid>
    <comment_count>0</comment_count>
    <who name="Jordan Harband">ljharb</who>
    <bug_when>2015-04-27 22:32:29 -0700</bug_when>
    <thetext>`&apos;abc&apos;.startsWith(&apos;a&apos;, Infinity)` should return `false`, but currently returns `true`.
Per https://people.mozilla.org/~jorendorff/es6-draft.html#sec-string.prototype.startswith, step 12, `Let start be min(max(pos, 0), len).` - `pos` is `Infinity`, `max(Infinity, 0)` returns `Infinity`, and `min(Infinity, len)` returns `len`. Thus, the search must start after the end of the string, meaning `true` is impossible, as if `position` was the length of the string.

`&apos;abc&apos;.endsWith(&apos;bc&apos;, Infinity))` should return `true`, but currently returns `false`.
Per https://people.mozilla.org/~jorendorff/es6-draft.html#sec-string.prototype.endswith, step 12, `Let end be min(max(pos, 0), len).` - `pos` is `Infinity`, `max(Infinity, 0)` returns `Infinity`, and `min(Infinity, len)` returns `len`. Thus, in step 14, `Let start be end - searchLength.`, `start` is 0, so the entire string should be searched, as if `endPosition` was `undefined`.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1090163</commentid>
    <comment_count>1</comment_count>
      <attachid>251988</attachid>
    <who name="Jordan Harband">ljharb</who>
    <bug_when>2015-04-29 14:54:15 -0700</bug_when>
    <thetext>Created attachment 251988
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1090301</commentid>
    <comment_count>2</comment_count>
      <attachid>251988</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-04-29 19:27:16 -0700</bug_when>
    <thetext>Comment on attachment 251988
Patch

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

&gt; Source/JavaScriptCore/runtime/StringPrototype.cpp:1678
&gt; +    return static_cast&lt;int32_t&gt;(value);

Why cast to int32_t instead of casting to unsigned?

&gt; Source/JavaScriptCore/runtime/StringPrototype.cpp:1700
&gt; +    unsigned len = stringToSearchIn.length();

Could you please use the word “length” instead of the abbreviation “len” here?

&gt; Source/JavaScriptCore/runtime/StringPrototype.cpp:1703
&gt; +    if (positionArg.isUInt32())
&gt; +        start = positionArg.asUInt32();

I think this should say:

    if (positionArg.isInt32())
        start = std::max(0, positionArg.asInt32());

Covers more cases with the fast path code, and I see no downside to it.

&gt; Source/JavaScriptCore/runtime/StringPrototype.cpp:1708
&gt; +        double position = positionArg.toInteger(exec);
&gt; +        if (exec-&gt;hadException())
&gt; +            return JSValue::encode(jsUndefined());
&gt; +        start = clampInt32(position, 0, len);

I would write this without the local variable:

    start = clampInt32(positionArg.toInteger(exec), 0, length);
    if (exec-&gt;hadException())
        return JSValue::encode(jsUndefined());

&gt; Source/JavaScriptCore/runtime/StringPrototype.cpp:1712
&gt; +    if ((searchString.length() + start) &gt; len)
&gt; +        return JSValue::encode(jsBoolean(false));

What prevents searchString.length() + start from overflowing? I think this should say:

    if (searchString.length() &gt; len - start)

But also, I don’t understand why this check is needed. Doesn’t stringToSearchIn.hasInfixStartingAt handle this properly? Does removing this check cause a test to fail?

&gt; Source/JavaScriptCore/runtime/StringPrototype.cpp:1735
&gt; +    unsigned len = stringToSearchIn.length();

Could you please use the word “length” instead of the abbreviation “len” here?

&gt; Source/JavaScriptCore/runtime/StringPrototype.cpp:1740
&gt; +    if (endPositionArg.isUInt32())
&gt; +        end = endPositionArg.asUInt32();

I think this should say:

    if (endPositionArg.isInt32())
        end = std::max(0, endPositionArg.asInt32());

Covers more cases with the fast path code, and I see no downside to it.

&gt; Source/JavaScriptCore/runtime/StringPrototype.cpp:1745
&gt; +        double pos = endPositionArg.toInteger(exec);
&gt; +        if (exec-&gt;hadException())
&gt; +            return JSValue::encode(jsUndefined());
&gt; +        end = clampInt32(pos, 0, len);

Could you please use the word “position” instead of the abbreviation “pos” here?

Or better, write this without the local variable:

    end = clampInt32(endPositionArg.toInteger(exec), 0, length);
    if (exec-&gt;hadException())
        return JSValue::encode(jsUndefined());

&gt; Source/JavaScriptCore/runtime/StringPrototype.cpp:1749
&gt; +    if (end &lt; searchString.length())
&gt; +        return JSValue::encode(jsBoolean(false));

I don’t understand why this check is needed. Doesn’t stringToSearchIn.hasInfixStartingAt handle this properly? Does removing this check cause a test to fail?

&gt; Source/JavaScriptCore/runtime/StringPrototype.cpp:1773
&gt; +    unsigned len = stringToSearchIn.length();

Could you please use the word “length” instead of the abbreviation “len” here?

&gt; Source/JavaScriptCore/runtime/StringPrototype.cpp:1776
&gt; +    if (positionArg.isUInt32())
&gt; +        start = positionArg.asUInt32();

I think this should say:

    if (positionArg.isInt32())
        start = std::max(0, positionArg.asInt32());

Covers more cases with the fast path code, and I see no downside to it.

&gt; Source/JavaScriptCore/runtime/StringPrototype.cpp:1781
&gt; +        double position = positionArg.toInteger(exec);
&gt; +        if (exec-&gt;hadException())
&gt; +            return JSValue::encode(jsUndefined());
&gt; +        start = clampInt32(position, 0, len);

I would write this without the local variable:

    start = clampInt32(positionArg.toInteger(exec), 0, length);
    if (exec-&gt;hadException())
        return JSValue::encode(jsUndefined());</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1090344</commentid>
    <comment_count>3</comment_count>
    <who name="Jordan Harband">ljharb</who>
    <bug_when>2015-04-29 21:06:40 -0700</bug_when>
    <thetext>
&gt; Why cast to int32_t instead of casting to unsigned?
No particular reason, I&apos;ll change it.

&gt; &gt; Source/JavaScriptCore/runtime/StringPrototype.cpp:1700
&gt; &gt; +    unsigned len = stringToSearchIn.length();
&gt; 
&gt; Could you please use the word “length” instead of the abbreviation “len”
&gt; here?
Sure - I used &quot;len&quot; because that&apos;s what the spec uses. I feel there&apos;s a lot of value in using the same steps and variable names as the spec when possible (there&apos;s also numerous examples in this file of &quot;len&quot; usage). I&apos;ll change it to &quot;length&quot; throughout my patch.

&gt; &gt; Source/JavaScriptCore/runtime/StringPrototype.cpp:1703
&gt; &gt; +    if (positionArg.isUInt32())
&gt; &gt; +        start = positionArg.asUInt32();
&gt; 
&gt; I think this should say:
&gt; 
&gt;     if (positionArg.isInt32())
&gt;         start = std::max(0, positionArg.asInt32());
&gt; 
&gt; Covers more cases with the fast path code, and I see no downside to it.
Sounds good! Only downside I can see is the extra &quot;max&quot; call in the UInt32 case, but I suppose that&apos;s negligible.

&gt; &gt; Source/JavaScriptCore/runtime/StringPrototype.cpp:1708
&gt; &gt; +        double position = positionArg.toInteger(exec);
&gt; &gt; +        if (exec-&gt;hadException())
&gt; &gt; +            return JSValue::encode(jsUndefined());
&gt; &gt; +        start = clampInt32(position, 0, len);
&gt; 
&gt; I would write this without the local variable:
&gt; 
&gt;     start = clampInt32(positionArg.toInteger(exec), 0, length);
&gt;     if (exec-&gt;hadException())
&gt;         return JSValue::encode(jsUndefined());
Done (I&apos;d thought that avoiding the clampInt32 call when there was an exception would be more performant)

&gt; &gt; Source/JavaScriptCore/runtime/StringPrototype.cpp:1712
&gt; &gt; +    if ((searchString.length() + start) &gt; len)
&gt; &gt; +        return JSValue::encode(jsBoolean(false));
&gt; 
&gt; What prevents searchString.length() + start from overflowing? I think this
&gt; should say:
&gt; 
&gt;     if (searchString.length() &gt; len - start)
Good call, I hadn&apos;t thought about overflow.

&gt; But also, I don’t understand why this check is needed. Doesn’t
&gt; stringToSearchIn.hasInfixStartingAt handle this properly? Does removing this
&gt; check cause a test to fail?
Removing this check does not cause tests to fail, but since it&apos;s explicitly called out in the spec, and because it seems more performant to avoid the hasInfixStartingAt call entirely in that case, I&apos;d left it in. I&apos;ll remove these checks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1090347</commentid>
    <comment_count>4</comment_count>
      <attachid>252036</attachid>
    <who name="Jordan Harband">ljharb</who>
    <bug_when>2015-04-29 21:14:40 -0700</bug_when>
    <thetext>Created attachment 252036
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1090565</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-04-30 14:06:52 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; &gt; I think this should say:
&gt; &gt; 
&gt; &gt;     if (positionArg.isInt32())
&gt; &gt;         start = std::max(0, positionArg.asInt32());
&gt; &gt; 
&gt; &gt; Covers more cases with the fast path code, and I see no downside to it.
&gt; Sounds good! Only downside I can see is the extra &quot;max&quot; call in the UInt32
&gt; case, but I suppose that&apos;s negligible.

It’s less of a downside than you might think. The isUInt32 function includes a comparison with zero; its name is misleading, as it’s really just a helper that checks for a nonnegative Int32. So by using isInt32 instead, we trade that comparison with zero for the same comparison with zero done as part of std::max. So not just negligible, but probably nonexistent!

&gt; &gt; I would write this without the local variable:
&gt; &gt; 
&gt; &gt;     start = clampInt32(positionArg.toInteger(exec), 0, length);
&gt; &gt;     if (exec-&gt;hadException())
&gt; &gt;         return JSValue::encode(jsUndefined());
&gt; Done (I&apos;d thought that avoiding the clampInt32 call when there was an
&gt; exception would be more performant)

It’s worth thinking about that type of thing, but a tiny bit better performance when there is an exception is not something should worry about optimizing for.

&gt; Removing this check does not cause tests to fail, but since it&apos;s explicitly
&gt; called out in the spec, and because it seems more performant to avoid the
&gt; hasInfixStartingAt call entirely in that case, I&apos;d left it in. I&apos;ll remove
&gt; these checks.

It might have seemed like a performance optimization and it did make that case slightly faster. But by adding that branch we made all other cases slower!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1090568</commentid>
    <comment_count>6</comment_count>
      <attachid>252036</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-04-30 14:10:57 -0700</bug_when>
    <thetext>Comment on attachment 252036
Patch

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

&gt; Source/JavaScriptCore/runtime/StringPrototype.cpp:1672
&gt; +static inline unsigned clampInt32(double value, unsigned min, unsigned max)

It occurs to me that this function name is not good. The argument types are 32-bit unsigned values, not what we normally mean by “Int32”. It also worth noting that this function truncates as well as clamping. Would be nice to keep the name brief but I think we can do better, maybe clampAndTruncateToUnsigned?

&gt; Source/JavaScriptCore/runtime/StringPrototype.cpp:1700
&gt; +    unsigned length = stringToSearchIn.length();

I just noticed that this length is only used in the clamp call below. We should slightly optimize by not putting it into a local variable in the isInt32 code path.

&gt; Source/JavaScriptCore/runtime/StringPrototype.cpp:1743
&gt; +    return JSValue::encode(jsBoolean(stringToSearchIn.hasInfixEndingAt(searchString, std::min&lt;unsigned&gt;(end, length))));

This should just be std::min, not std::min&lt;unsigned&gt;. Both arguments are unsigned so there is no need to specify the type explicitly.

&gt; Source/JavaScriptCore/runtime/StringPrototype.cpp:1765
&gt; +    unsigned length = stringToSearchIn.length();

I just noticed that this length is only used in the clamp call below. We should slightly optimize by not putting it into a local variable in the isInt32 code path.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1090618</commentid>
    <comment_count>7</comment_count>
    <who name="Jordan Harband">ljharb</who>
    <bug_when>2015-04-30 16:09:39 -0700</bug_when>
    <thetext>Thanks, all fixed in the next patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1090649</commentid>
    <comment_count>8</comment_count>
      <attachid>252113</attachid>
    <who name="Jordan Harband">ljharb</who>
    <bug_when>2015-04-30 16:41:58 -0700</bug_when>
    <thetext>Created attachment 252113
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1090891</commentid>
    <comment_count>9</comment_count>
      <attachid>252113</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-05-01 14:57:43 -0700</bug_when>
    <thetext>Comment on attachment 252113
Patch

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

&gt; Source/JavaScriptCore/runtime/StringPrototype.cpp:1707
&gt; +        if (exec-&gt;hadException())
&gt; +            return JSValue::encode(jsUndefined());

If we cared to, we could get away with leaving out this early exit. We would see if we wrote a test that the code has no effect other than performance optimization; roughly speaking, there’d be no way to write a test that would notice the presence or absence of this code. That’s because the code below has no observable side effects. It’s hard to build tests that cover exception handling in cases like this -- we need to pass objects in that have custom valueOf functions with side effects or something like that. No reason you have to do that in this patch, though.

&gt; Source/JavaScriptCore/runtime/StringPrototype.cpp:1740
&gt; +        if (exec-&gt;hadException())
&gt; +            return JSValue::encode(jsUndefined());

Same thing.

&gt; Source/JavaScriptCore/runtime/StringPrototype.cpp:1772
&gt; +        if (exec-&gt;hadException())
&gt; +            return JSValue::encode(jsUndefined());

Same here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1090926</commentid>
    <comment_count>10</comment_count>
      <attachid>252113</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-01 15:45:47 -0700</bug_when>
    <thetext>Comment on attachment 252113
Patch

Clearing flags on attachment: 252113

Committed r183694: &lt;http://trac.webkit.org/changeset/183694&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1090927</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-01 15:45:52 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251988</attachid>
            <date>2015-04-29 14:54:15 -0700</date>
            <delta_ts>2015-04-29 21:14:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-144314-20150429145305.patch</filename>
            <type>text/plain</type>
            <size>11901</size>
            <attacher name="Jordan Harband">ljharb</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgzNTc3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
ZTVlYjg3MjU1Njc1NjMyODA5ZmY5Y2ViYmY3MzBlNzQ4MjEwYmNkLi42OTgxMTJjMzczZWFkMzQ0
Y2M1MDU2N2U4MmU0YTEwODZkYmZhMGI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMSBAQAorMjAxNS0wNC0yOSAgSm9yZGFuIEhhcmJhbmQgIDxsamhhcmJAZ21haWwuY29t
PgorCisgICAgICAgIFN0cmluZyNzdGFydHNXaXRoL2VuZHNXaXRoL2luY2x1ZGVzIGRvbid0IGhh
bmRsZSBJbmZpbml0eSBwb3NpdGlvbi9lbmRQb3NpdGlvbiBhcmdzIGNvcnJlY3RseQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0MzE0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4aW5nIGhhbmRsaW5n
IG9mIEluZmluaXR5IHBvc2l0aW9uIGFyZ3MsIHBlcgorICAgICAgICBodHRwczovL3Blb3BsZS5t
b3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMtc3RyaW5nLnByb3RvdHlw
ZS5pbmNsdWRlcworICAgICAgICBodHRwczovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3Jm
Zi9lczYtZHJhZnQuaHRtbCNzZWMtc3RyaW5nLnByb3RvdHlwZS5zdGFydHN3aXRoCisgICAgICAg
IGh0dHBzOi8vcGVvcGxlLm1vemlsbGEub3JnL35qb3JlbmRvcmZmL2VzNi1kcmFmdC5odG1sI3Nl
Yy1zdHJpbmcucHJvdG90eXBlLmVuZHN3aXRoCisKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ1By
b3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OmNsYW1wSW50MzIpOgorICAgICAgICAoSlNDOjpz
dHJpbmdQcm90b0Z1bmNTdGFydHNXaXRoKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5j
RW5kc1dpdGgpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNJbmNsdWRlcyk6CisKIDIw
MTUtMDQtMjkgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBKU1R5
cGVJbmZvIHNob3VsZCBoYXZlIGFuIGlubGluZSB0eXBlIGZsYWcgdG8gaW5kaWNhdGUgb2YgZ2V0
Q2FsbERhdGEoKSBoYXMgYmVlbiBvdmVycmlkZGVuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAppbmRleCBmYTdiZWYxNWQ2ZGM4YTA3YjM4
MzVmMGRlZmM5YjZlNTA2M2Q5MThjLi4zZTFmN2JlMTVlMDQxNjc5YmRjNWVjYWFkYWIwMjkyNWNh
MzhkNWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQ
cm90b3R5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1By
b3RvdHlwZS5jcHAKQEAgLTE2NjksNiArMTY2OSwxNSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RyaW1SaWdodChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZSh0cmltU3RyaW5nKGV4ZWMsIHRoaXNWYWx1ZSwgVHJpbVJpZ2h0
KSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2xhbXBJbnQzMihkb3VibGUgdmFsdWUs
IHVuc2lnbmVkIG1pbiwgdW5zaWduZWQgbWF4KQoreworICAgIGlmICh2YWx1ZSA8IG1pbikKKyAg
ICAgICAgcmV0dXJuIG1pbjsKKyAgICBpZiAodmFsdWUgPiBtYXgpCisgICAgICAgIHJldHVybiBt
YXg7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDMyX3Q+KHZhbHVlKTsKK30KKwogRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNTdGFydHNXaXRoKEV4ZWNTdGF0
ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPnRoaXNWYWx1ZSgpOwpA
QCAtMTY4Nyw5ICsxNjk2LDIwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5n
UHJvdG9GdW5jU3RhcnRzV2l0aChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwogCi0gICAgdW5zaWduZWQgc3RhcnQgPSBzdGQ6Om1heCgwLCBleGVjLT5hcmd1bWVudCgxKS50
b0ludDMyKGV4ZWMpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgSlNWYWx1ZSBwb3NpdGlv
bkFyZyA9IGV4ZWMtPmFyZ3VtZW50KDEpOworICAgIHVuc2lnbmVkIGxlbiA9IHN0cmluZ1RvU2Vh
cmNoSW4ubGVuZ3RoKCk7CisgICAgdW5zaWduZWQgc3RhcnQgPSAwOworICAgIGlmIChwb3NpdGlv
bkFyZy5pc1VJbnQzMigpKQorICAgICAgICBzdGFydCA9IHBvc2l0aW9uQXJnLmFzVUludDMyKCk7
CisgICAgZWxzZSB7CisgICAgICAgIGRvdWJsZSBwb3NpdGlvbiA9IHBvc2l0aW9uQXJnLnRvSW50
ZWdlcihleGVjKTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgc3RhcnQg
PSBjbGFtcEludDMyKHBvc2l0aW9uLCAwLCBsZW4pOworICAgIH0KKworICAgIGlmICgoc2VhcmNo
U3RyaW5nLmxlbmd0aCgpICsgc3RhcnQpID4gbGVuKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpOwogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c0Jvb2xlYW4oc3RyaW5nVG9TZWFyY2hJbi5oYXNJbmZpeFN0YXJ0aW5nQXQoc2VhcmNoU3RyaW5n
LCBzdGFydCkpKTsKIH0KQEAgLTE3MTIsMTQgKzE3MzIsMjMgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNFbmRzV2l0aChFeGVjU3RhdGUqIGV4ZWMpCiAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwogCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nVG9TZWFyY2hJ
bi5sZW5ndGgoKTsKLSAgICBKU1ZhbHVlIGExID0gZXhlYy0+YXJndW1lbnQoMSk7Ci0gICAgaW50
IHBvcyA9IGExLmlzVW5kZWZpbmVkKCkgPyBsZW5ndGggOiBhMS50b0ludDMyKGV4ZWMpOwotICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKLSAgICB1bnNpZ25lZCBlbmQgPSBzdGQ6Om1pbjx1bnNpZ25lZD4o
c3RkOjptYXgocG9zLCAwKSwgbGVuZ3RoKTsKKyAgICB1bnNpZ25lZCBsZW4gPSBzdHJpbmdUb1Nl
YXJjaEluLmxlbmd0aCgpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
c3RyaW5nVG9TZWFyY2hJbi5oYXNJbmZpeEVuZGluZ0F0KHNlYXJjaFN0cmluZywgZW5kKSkpOwor
ICAgIEpTVmFsdWUgZW5kUG9zaXRpb25BcmcgPSBleGVjLT5hcmd1bWVudCgxKTsKKyAgICB1bnNp
Z25lZCBlbmQgPSBsZW47CisgICAgaWYgKGVuZFBvc2l0aW9uQXJnLmlzVUludDMyKCkpCisgICAg
ICAgIGVuZCA9IGVuZFBvc2l0aW9uQXJnLmFzVUludDMyKCk7CisgICAgZWxzZSBpZiAoIWVuZFBv
c2l0aW9uQXJnLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgZG91YmxlIHBvcyA9IGVuZFBvc2l0
aW9uQXJnLnRvSW50ZWdlcihleGVjKTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAg
ICAgICAgZW5kID0gY2xhbXBJbnQzMihwb3MsIDAsIGxlbik7CisgICAgfQorCisgICAgaWYgKGVu
ZCA8IHNlYXJjaFN0cmluZy5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc0Jvb2xlYW4oZmFsc2UpKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29s
ZWFuKHN0cmluZ1RvU2VhcmNoSW4uaGFzSW5maXhFbmRpbmdBdChzZWFyY2hTdHJpbmcsIHN0ZDo6
bWluPHVuc2lnbmVkPihlbmQsIGxlbikpKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgc3RyaW5nUHJvdG9GdW5jSW5jbHVkZXMoRXhlY1N0YXRlKiBleGVjKQpAQCAtMTc0MCw5
ICsxNzY5LDE3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5j
SW5jbHVkZXMoRXhlY1N0YXRlKiBleGVjKQogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAotICAgIHVu
c2lnbmVkIHN0YXJ0ID0gc3RkOjptYXgoMCwgZXhlYy0+YXJndW1lbnQoMSkudG9JbnQzMihleGVj
KSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIEpTVmFsdWUgcG9zaXRpb25BcmcgPSBleGVj
LT5hcmd1bWVudCgxKTsKKyAgICB1bnNpZ25lZCBsZW4gPSBzdHJpbmdUb1NlYXJjaEluLmxlbmd0
aCgpOworICAgIHVuc2lnbmVkIHN0YXJ0ID0gMDsKKyAgICBpZiAocG9zaXRpb25BcmcuaXNVSW50
MzIoKSkKKyAgICAgICAgc3RhcnQgPSBwb3NpdGlvbkFyZy5hc1VJbnQzMigpOworICAgIGVsc2Ug
eworICAgICAgICBkb3VibGUgcG9zaXRpb24gPSBwb3NpdGlvbkFyZy50b0ludGVnZXIoZXhlYyk7
CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHN0YXJ0ID0gY2xhbXBJbnQz
Mihwb3NpdGlvbiwgMCwgbGVuKTsKKyAgICB9CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzQm9vbGVhbihzdHJpbmdUb1NlYXJjaEluLmNvbnRhaW5zKHNlYXJjaFN0cmluZywgdHJ1ZSwg
c3RhcnQpKSk7CiB9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKaW5kZXggYjdlYmE1ZTU1ZThjNzQ1MTFkMjY2NWUyZTdkYmE3Mzk2YmIz
N2NhZS4uNGMyYjMzODY2ZjNhODQ5ZGEzYTM5MTdmOTM1NmI3MTIyZDM3YTZiYyAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDEzIEBACisyMDE1LTA0LTI5ICBKb3JkYW4gSGFyYmFuZCAgPGxqaGFyYkBnbWFpbC5j
b20+CisKKyAgICAgICAgU3RyaW5nI3N0YXJ0c1dpdGgvZW5kc1dpdGgvaW5jbHVkZXMgZG9uJ3Qg
aGFuZGxlIEluZmluaXR5IHBvc2l0aW9uL2VuZFBvc2l0aW9uIGFyZ3MgY29ycmVjdGx5CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQzMTQKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGpzL3NjcmlwdC10
ZXN0cy9zdHJpbmctaW5jbHVkZXMuanM6CisgICAgICAgICoganMvc3RyaW5nLWluY2x1ZGVzLWV4
cGVjdGVkLnR4dDoKKwogMjAxNS0wNC0yOSAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29t
PgogCiAgICAgICAgIFNpbXBsZSBsaW5lIGxheW91dDogV2ViIHByb2Nlc3Mgc3BpbnMgZW5kbGVz
c2x5IGJlbG93IGxheW91dFNpbXBsZUxpbmVzLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMv
c2NyaXB0LXRlc3RzL3N0cmluZy1pbmNsdWRlcy5qcyBiL0xheW91dFRlc3RzL2pzL3NjcmlwdC10
ZXN0cy9zdHJpbmctaW5jbHVkZXMuanMKaW5kZXggMjUyYTJhNGExZmI3YjFkNjRkZmYwMjdlZWEz
NjczYWRkNTNlYzI4Yy4uOTFmMDM1Mzg0NzMyZDlhZmRhZjQ1MzE2ZGYzYWE3ZTJlNmE5MjNiNyAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL3N0cmluZy1pbmNsdWRlcy5q
cworKysgYi9MYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvc3RyaW5nLWluY2x1ZGVzLmpzCkBA
IC0xLDYgKzEsNyBAQAotZGVzY3JpcHRpb24oIlRoaXMgdGVzdCBjaGVja3MgdGhlIEVTNiBzdHJp
bmcgZnVuY3Rpb25zIHN0YXJ0c1dpdGgoKSwgZW5kc1dpdGgoKSBhbmQgaW5jbHVkZXMoKS4iKTsK
K2Rlc2NyaXB0aW9uKCJUaGlzIHRlc3QgY2hlY2tzIHRoZSBFUzYgc3RyaW5nIGZ1bmN0aW9ucyBz
dGFydHNXaXRoKCksIGVuZHNXaXRoKCksIGFuZCBpbmNsdWRlcygpLiIpOwogCiAvLyBUZXN0IGlu
Y2x1ZGVzCitzaG91bGRCZSgiU3RyaW5nLnByb3RvdHlwZS5pbmNsdWRlcy5uYW1lIiwgIidpbmNs
dWRlcyciKTsKIHNob3VsZEJlKCJTdHJpbmcucHJvdG90eXBlLmluY2x1ZGVzLmxlbmd0aCIsICIx
Iik7CiBzaG91bGRCZSgiJ2ZvbyBiYXInLmluY2x1ZGVzKCdiYXInKSIsICJ0cnVlIik7CiBzaG91
bGRCZSgiJ2ZvbyBiYXInLmluY2x1ZGVzKCdiYXInLCA0KSIsICJ0cnVlIik7CkBAIC0zMCw4ICsz
MSwxNiBAQCBzaG91bGRCZSgiJ2ZvbyAxZSsxMDAgYmFyJy5pbmNsdWRlcygxZSsxMDApIiwgInRy
dWUiKTsKIHNob3VsZEJlKCInZm9vIDFlMTAwIGJhcicuaW5jbHVkZXMoMWUxMDApIiwgImZhbHNl
Iik7CiBzaG91bGRCZSgiJ+ODleODvOODkOODvCcuaW5jbHVkZXMoJ+ODvOODkCcpIiwgInRydWUi
KTsKIHNob3VsZEJlKCIn44OV44O844OQ44O8Jy5pbmNsdWRlcygn44Kv44O8JykiLCAiZmFsc2Ui
KTsKK3Nob3VsZEJlRmFsc2UoIidhYmMnLmluY2x1ZGVzKCdhJywgJ2FiYycubGVuZ3RoKSIpOwor
c2hvdWxkQmVGYWxzZSgiJ2FiYycuaW5jbHVkZXMoJ2EnLCBNYXRoLnBvdygyLCAzMykpIik7Citz
aG91bGRCZUZhbHNlKCInYWJjJy5pbmNsdWRlcygnYScsIEluZmluaXR5KSIpOworc2hvdWxkQmVU
cnVlKCInYWJjJy5pbmNsdWRlcygnYWInLCAtSW5maW5pdHkpIik7CitzaG91bGRCZUZhbHNlKCIn
YWJjJy5pbmNsdWRlcygnY2QnLCAtSW5maW5pdHkpIik7CitzaG91bGRCZVRydWUoIidhYmMnLmlu
Y2x1ZGVzKCdhYicsIDApIik7CitzaG91bGRCZUZhbHNlKCInYWJjJy5pbmNsdWRlcygnY2QnLCAw
KSIpOwogCiAvLyBUZXN0IHN0YXJ0c1dpdGgKK3Nob3VsZEJlKCJTdHJpbmcucHJvdG90eXBlLnN0
YXJ0c1dpdGgubmFtZSIsICInc3RhcnRzV2l0aCciKTsKIHNob3VsZEJlKCJTdHJpbmcucHJvdG90
eXBlLnN0YXJ0c1dpdGgubGVuZ3RoIiwgIjEiKTsKIHNob3VsZEJlKCInZm9vIGJhcicuc3RhcnRz
V2l0aCgnZm9vJykiLCAidHJ1ZSIpOwogc2hvdWxkQmUoIidmb28gYmFyJy5zdGFydHNXaXRoKCdm
b28nLCAwKSIsICJ0cnVlIik7CkBAIC02MCw4ICs2OSwxNSBAQCBzaG91bGRCZSgiJ+ODleODvOOD
kOODvCcuc3RhcnRzV2l0aCgnYWJjJykiLCAiZmFsc2UiKTsKIHNob3VsZEJlKCIn44OV44O844OQ
44O8Jy5zdGFydHNXaXRoKCdhYmMnLCAxKSIsICJmYWxzZSIpOwogc2hvdWxkQmUoIidmb28gYmFy
Jy5zdGFydHNXaXRoKCfjg5Xjg7wnKSIsICJmYWxzZSIpOwogc2hvdWxkQmUoIidmb28gYmFyJy5z
dGFydHNXaXRoKCfjg5Xjg7wnLCAxKSIsICJmYWxzZSIpOworc2hvdWxkQmVGYWxzZSgiJ2FiYycu
c3RhcnRzV2l0aCgnYScsIEluZmluaXR5KSIpOworc2hvdWxkQmVGYWxzZSgiJ2FiYycuc3RhcnRz
V2l0aCgnYScsIDEpIik7CitzaG91bGRCZVRydWUoIidhYmMnLnN0YXJ0c1dpdGgoJ2InLCAxKSIp
Oworc2hvdWxkQmVGYWxzZSgiJ2FiYycuc3RhcnRzV2l0aCgnYicsIDIpIik7CitzaG91bGRCZVRy
dWUoIidhYmMnLnN0YXJ0c1dpdGgoJ2MnLCAyKSIpOworc2hvdWxkQmVGYWxzZSgiJ2FiYycuc3Rh
cnRzV2l0aCgnYScsIE1hdGgucG93KDIsIDMzKSkiKTsKIAogLy8gVGVzdCBlbmRzV2l0aAorc2hv
dWxkQmUoIlN0cmluZy5wcm90b3R5cGUuZW5kc1dpdGgubmFtZSIsICInZW5kc1dpdGgnIik7CiBz
aG91bGRCZSgiU3RyaW5nLnByb3RvdHlwZS5lbmRzV2l0aC5sZW5ndGgiLCAiMSIpOwogc2hvdWxk
QmUoIidmb28gYmFyJy5lbmRzV2l0aCgnYmFyJykiLCAidHJ1ZSIpOwogc2hvdWxkQmUoIidmb28g
YmFyJy5lbmRzV2l0aCgnYmEnLCA2KSIsICJ0cnVlIik7CkBAIC05Myw2ICsxMDksMTQgQEAgc2hv
dWxkQmUoIifjg5Xjg7zjg5Djg7wnLmVuZHNXaXRoKCdhYmMnKSIsICJmYWxzZSIpOwogc2hvdWxk
QmUoIifjg5Xjg7zjg5Djg7wnLmVuZHNXaXRoKCdhYmMnKSIsICJmYWxzZSIpOwogc2hvdWxkQmUo
Iidmb28gYmFyJy5lbmRzV2l0aCgn44OV44O8JykiLCAiZmFsc2UiKTsKIHNob3VsZEJlKCInZm9v
IGJhcicuZW5kc1dpdGgoJ+ODleODvCcsIDMpIiwgImZhbHNlIik7CitzaG91bGRCZVRydWUoIidh
YmMnLmVuZHNXaXRoKCdiYycsIEluZmluaXR5KSIpOworc2hvdWxkQmVUcnVlKCInYWJjJy5lbmRz
V2l0aCgnYmMnLCBNYXRoLnBvdygyLCAzMykpIik7CitzaG91bGRCZUZhbHNlKCInYWJjJy5lbmRz
V2l0aCgnYScsIDApIik7CitzaG91bGRCZVRydWUoIidhYmMnLmVuZHNXaXRoKCdhJywgMSkiKTsK
K3Nob3VsZEJlRmFsc2UoIidhYmMnLmVuZHNXaXRoKCdiJywgMSkiKTsKK3Nob3VsZEJlVHJ1ZSgi
J2FiYycuZW5kc1dpdGgoJ2InLCAyKSIpOworc2hvdWxkQmVGYWxzZSgiJ2FiYycuZW5kc1dpdGgo
J2JjJywgMikiKTsKK3Nob3VsZEJlVHJ1ZSgiJ2FiYycuZW5kc1dpdGgoJ2JjJywgMykiKTsKIAog
Ly8gQ2FsbCBmdW5jdGlvbnMgd2l0aCBhbiBlbnZpcm9ubWVudCByZWNvcmQgYXMgJ3RoaXMnLgog
c2hvdWxkVGhyb3coIihmdW5jdGlvbigpIHsgdmFyIGYgPSBTdHJpbmcucHJvdG90eXBlLnN0YXJ0
c1dpdGg7IChmdW5jdGlvbigpIHsgZignYScpOyB9KSgpOyB9KSgpIik7CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9qcy9zdHJpbmctaW5jbHVkZXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
anMvc3RyaW5nLWluY2x1ZGVzLWV4cGVjdGVkLnR4dAppbmRleCAyNWJhNTc4Y2RkNTJmZTdiN2Q4
MzVmY2JiNzU4YzYyYjhkYmI4ZTMyLi5mYjc3YzE2Y2FkZjZhYmZhMzRkNGVmYzdkNmY1ZjE1MGZi
ZmQyNDg1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9qcy9zdHJpbmctaW5jbHVkZXMtZXhwZWN0
ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2pzL3N0cmluZy1pbmNsdWRlcy1leHBlY3RlZC50eHQK
QEAgLTEsOCArMSw5IEBACi1UaGlzIHRlc3QgY2hlY2tzIHRoZSBFUzYgc3RyaW5nIGZ1bmN0aW9u
cyBzdGFydHNXaXRoKCksIGVuZHNXaXRoKCkgYW5kIGluY2x1ZGVzKCkuCitUaGlzIHRlc3QgY2hl
Y2tzIHRoZSBFUzYgc3RyaW5nIGZ1bmN0aW9ucyBzdGFydHNXaXRoKCksIGVuZHNXaXRoKCksIGFu
ZCBpbmNsdWRlcygpLgogCiBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBB
U1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCiAKIAorUEFTUyBTdHJp
bmcucHJvdG90eXBlLmluY2x1ZGVzLm5hbWUgaXMgJ2luY2x1ZGVzJwogUEFTUyBTdHJpbmcucHJv
dG90eXBlLmluY2x1ZGVzLmxlbmd0aCBpcyAxCiBQQVNTICdmb28gYmFyJy5pbmNsdWRlcygnYmFy
JykgaXMgdHJ1ZQogUEFTUyAnZm9vIGJhcicuaW5jbHVkZXMoJ2JhcicsIDQpIGlzIHRydWUKQEAg
LTMyLDYgKzMzLDE0IEBAIFBBU1MgJ2ZvbyAxZSsxMDAgYmFyJy5pbmNsdWRlcygxZSsxMDApIGlz
IHRydWUKIFBBU1MgJ2ZvbyAxZTEwMCBiYXInLmluY2x1ZGVzKDFlMTAwKSBpcyBmYWxzZQogUEFT
UyAn44OV44O844OQ44O8Jy5pbmNsdWRlcygn44O844OQJykgaXMgdHJ1ZQogUEFTUyAn44OV44O8
44OQ44O8Jy5pbmNsdWRlcygn44Kv44O8JykgaXMgZmFsc2UKK1BBU1MgJ2FiYycuaW5jbHVkZXMo
J2EnLCAnYWJjJy5sZW5ndGgpIGlzIGZhbHNlCitQQVNTICdhYmMnLmluY2x1ZGVzKCdhJywgTWF0
aC5wb3coMiwgMzMpKSBpcyBmYWxzZQorUEFTUyAnYWJjJy5pbmNsdWRlcygnYScsIEluZmluaXR5
KSBpcyBmYWxzZQorUEFTUyAnYWJjJy5pbmNsdWRlcygnYWInLCAtSW5maW5pdHkpIGlzIHRydWUK
K1BBU1MgJ2FiYycuaW5jbHVkZXMoJ2NkJywgLUluZmluaXR5KSBpcyBmYWxzZQorUEFTUyAnYWJj
Jy5pbmNsdWRlcygnYWInLCAwKSBpcyB0cnVlCitQQVNTICdhYmMnLmluY2x1ZGVzKCdjZCcsIDAp
IGlzIGZhbHNlCitQQVNTIFN0cmluZy5wcm90b3R5cGUuc3RhcnRzV2l0aC5uYW1lIGlzICdzdGFy
dHNXaXRoJwogUEFTUyBTdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGgubGVuZ3RoIGlzIDEKIFBB
U1MgJ2ZvbyBiYXInLnN0YXJ0c1dpdGgoJ2ZvbycpIGlzIHRydWUKIFBBU1MgJ2ZvbyBiYXInLnN0
YXJ0c1dpdGgoJ2ZvbycsIDApIGlzIHRydWUKQEAgLTYwLDYgKzY5LDEzIEBAIFBBU1MgJ+ODleOD
vOODkOODvCcuc3RhcnRzV2l0aCgnYWJjJykgaXMgZmFsc2UKIFBBU1MgJ+ODleODvOODkOODvCcu
c3RhcnRzV2l0aCgnYWJjJywgMSkgaXMgZmFsc2UKIFBBU1MgJ2ZvbyBiYXInLnN0YXJ0c1dpdGgo
J+ODleODvCcpIGlzIGZhbHNlCiBQQVNTICdmb28gYmFyJy5zdGFydHNXaXRoKCfjg5Xjg7wnLCAx
KSBpcyBmYWxzZQorUEFTUyAnYWJjJy5zdGFydHNXaXRoKCdhJywgSW5maW5pdHkpIGlzIGZhbHNl
CitQQVNTICdhYmMnLnN0YXJ0c1dpdGgoJ2EnLCAxKSBpcyBmYWxzZQorUEFTUyAnYWJjJy5zdGFy
dHNXaXRoKCdiJywgMSkgaXMgdHJ1ZQorUEFTUyAnYWJjJy5zdGFydHNXaXRoKCdiJywgMikgaXMg
ZmFsc2UKK1BBU1MgJ2FiYycuc3RhcnRzV2l0aCgnYycsIDIpIGlzIHRydWUKK1BBU1MgJ2FiYycu
c3RhcnRzV2l0aCgnYScsIE1hdGgucG93KDIsIDMzKSkgaXMgZmFsc2UKK1BBU1MgU3RyaW5nLnBy
b3RvdHlwZS5lbmRzV2l0aC5uYW1lIGlzICdlbmRzV2l0aCcKIFBBU1MgU3RyaW5nLnByb3RvdHlw
ZS5lbmRzV2l0aC5sZW5ndGggaXMgMQogUEFTUyAnZm9vIGJhcicuZW5kc1dpdGgoJ2JhcicpIGlz
IHRydWUKIFBBU1MgJ2ZvbyBiYXInLmVuZHNXaXRoKCdiYScsIDYpIGlzIHRydWUKQEAgLTkxLDYg
KzEwNywxNCBAQCBQQVNTICfjg5Xjg7zjg5Djg7wnLmVuZHNXaXRoKCdhYmMnKSBpcyBmYWxzZQog
UEFTUyAn44OV44O844OQ44O8Jy5lbmRzV2l0aCgnYWJjJykgaXMgZmFsc2UKIFBBU1MgJ2ZvbyBi
YXInLmVuZHNXaXRoKCfjg5Xjg7wnKSBpcyBmYWxzZQogUEFTUyAnZm9vIGJhcicuZW5kc1dpdGgo
J+ODleODvCcsIDMpIGlzIGZhbHNlCitQQVNTICdhYmMnLmVuZHNXaXRoKCdiYycsIEluZmluaXR5
KSBpcyB0cnVlCitQQVNTICdhYmMnLmVuZHNXaXRoKCdiYycsIE1hdGgucG93KDIsIDMzKSkgaXMg
dHJ1ZQorUEFTUyAnYWJjJy5lbmRzV2l0aCgnYScsIDApIGlzIGZhbHNlCitQQVNTICdhYmMnLmVu
ZHNXaXRoKCdhJywgMSkgaXMgdHJ1ZQorUEFTUyAnYWJjJy5lbmRzV2l0aCgnYicsIDEpIGlzIGZh
bHNlCitQQVNTICdhYmMnLmVuZHNXaXRoKCdiJywgMikgaXMgdHJ1ZQorUEFTUyAnYWJjJy5lbmRz
V2l0aCgnYmMnLCAyKSBpcyBmYWxzZQorUEFTUyAnYWJjJy5lbmRzV2l0aCgnYmMnLCAzKSBpcyB0
cnVlCiBQQVNTIChmdW5jdGlvbigpIHsgdmFyIGYgPSBTdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dp
dGg7IChmdW5jdGlvbigpIHsgZignYScpOyB9KSgpOyB9KSgpIHRocmV3IGV4Y2VwdGlvbiBUeXBl
RXJyb3I6IFR5cGUgZXJyb3IuCiBQQVNTIChmdW5jdGlvbigpIHsgdmFyIGYgPSBTdHJpbmcucHJv
dG90eXBlLmVuZHNXaXRoOyAoZnVuY3Rpb24oKSB7IGYoJ2EnKTsgfSkoKTsgfSkoKSB0aHJldyBl
eGNlcHRpb24gVHlwZUVycm9yOiBUeXBlIGVycm9yLgogUEFTUyAoZnVuY3Rpb24oKSB7IHZhciBm
ID0gU3RyaW5nLnByb3RvdHlwZS5pbmNsdWRlczsgKGZ1bmN0aW9uKCkgeyBmKCdhJyk7IH0pKCk7
IH0pKCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogVHlwZSBlcnJvci4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252036</attachid>
            <date>2015-04-29 21:14:40 -0700</date>
            <delta_ts>2015-04-30 16:41:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-144314-20150429211329.patch</filename>
            <type>text/plain</type>
            <size>11585</size>
            <attacher name="Jordan Harband">ljharb</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgzNTc3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
ZTVlYjg3MjU1Njc1NjMyODA5ZmY5Y2ViYmY3MzBlNzQ4MjEwYmNkLi42OTgxMTJjMzczZWFkMzQ0
Y2M1MDU2N2U4MmU0YTEwODZkYmZhMGI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMSBAQAorMjAxNS0wNC0yOSAgSm9yZGFuIEhhcmJhbmQgIDxsamhhcmJAZ21haWwuY29t
PgorCisgICAgICAgIFN0cmluZyNzdGFydHNXaXRoL2VuZHNXaXRoL2luY2x1ZGVzIGRvbid0IGhh
bmRsZSBJbmZpbml0eSBwb3NpdGlvbi9lbmRQb3NpdGlvbiBhcmdzIGNvcnJlY3RseQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0MzE0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4aW5nIGhhbmRsaW5n
IG9mIEluZmluaXR5IHBvc2l0aW9uIGFyZ3MsIHBlcgorICAgICAgICBodHRwczovL3Blb3BsZS5t
b3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMtc3RyaW5nLnByb3RvdHlw
ZS5pbmNsdWRlcworICAgICAgICBodHRwczovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3Jm
Zi9lczYtZHJhZnQuaHRtbCNzZWMtc3RyaW5nLnByb3RvdHlwZS5zdGFydHN3aXRoCisgICAgICAg
IGh0dHBzOi8vcGVvcGxlLm1vemlsbGEub3JnL35qb3JlbmRvcmZmL2VzNi1kcmFmdC5odG1sI3Nl
Yy1zdHJpbmcucHJvdG90eXBlLmVuZHN3aXRoCisKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ1By
b3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OmNsYW1wSW50MzIpOgorICAgICAgICAoSlNDOjpz
dHJpbmdQcm90b0Z1bmNTdGFydHNXaXRoKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5j
RW5kc1dpdGgpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNJbmNsdWRlcyk6CisKIDIw
MTUtMDQtMjkgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBKU1R5
cGVJbmZvIHNob3VsZCBoYXZlIGFuIGlubGluZSB0eXBlIGZsYWcgdG8gaW5kaWNhdGUgb2YgZ2V0
Q2FsbERhdGEoKSBoYXMgYmVlbiBvdmVycmlkZGVuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAppbmRleCBmYTdiZWYxNWQ2ZGM4YTA3YjM4
MzVmMGRlZmM5YjZlNTA2M2Q5MThjLi5kZGNiNjhiNGFmNzQ2YWE5ZmQ0YzA3YmMzYTRhZDBmOTZh
ZTFjMTkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQ
cm90b3R5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1By
b3RvdHlwZS5jcHAKQEAgLTE2NjksNiArMTY2OSwxNSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RyaW1SaWdodChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZSh0cmltU3RyaW5nKGV4ZWMsIHRoaXNWYWx1ZSwgVHJpbVJpZ2h0
KSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2xhbXBJbnQzMihkb3VibGUgdmFsdWUs
IHVuc2lnbmVkIG1pbiwgdW5zaWduZWQgbWF4KQoreworICAgIGlmICh2YWx1ZSA8IG1pbikKKyAg
ICAgICAgcmV0dXJuIG1pbjsKKyAgICBpZiAodmFsdWUgPiBtYXgpCisgICAgICAgIHJldHVybiBt
YXg7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPih2YWx1ZSk7Cit9CisKIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU3RhcnRzV2l0aChFeGVjU3Rh
dGUqIGV4ZWMpCiB7CiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT50aGlzVmFsdWUoKTsK
QEAgLTE2ODcsOSArMTY5NiwxNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmlu
Z1Byb3RvRnVuY1N0YXJ0c1dpdGgoRXhlY1N0YXRlKiBleGVjKQogICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKIAotICAgIHVuc2lnbmVkIHN0YXJ0ID0gc3RkOjptYXgoMCwgZXhlYy0+YXJndW1lbnQoMSku
dG9JbnQzMihleGVjKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIEpTVmFsdWUgcG9zaXRp
b25BcmcgPSBleGVjLT5hcmd1bWVudCgxKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmdU
b1NlYXJjaEluLmxlbmd0aCgpOworICAgIHVuc2lnbmVkIHN0YXJ0ID0gMDsKKyAgICBpZiAocG9z
aXRpb25BcmcuaXNJbnQzMigpKQorICAgICAgICBzdGFydCA9IHN0ZDo6bWF4KDAsIHBvc2l0aW9u
QXJnLmFzSW50MzIoKSk7CisgICAgZWxzZSB7CisgICAgICAgIHN0YXJ0ID0gY2xhbXBJbnQzMihw
b3NpdGlvbkFyZy50b0ludGVnZXIoZXhlYyksIDAsIGxlbmd0aCk7CisgICAgICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CisgICAgfQogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xl
YW4oc3RyaW5nVG9TZWFyY2hJbi5oYXNJbmZpeFN0YXJ0aW5nQXQoc2VhcmNoU3RyaW5nLCBzdGFy
dCkpKTsKIH0KQEAgLTE3MTMsMTMgKzE3MjksMTggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBzdHJpbmdQcm90b0Z1bmNFbmRzV2l0aChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICB1bnNpZ25lZCBsZW5n
dGggPSBzdHJpbmdUb1NlYXJjaEluLmxlbmd0aCgpOwotICAgIEpTVmFsdWUgYTEgPSBleGVjLT5h
cmd1bWVudCgxKTsKLSAgICBpbnQgcG9zID0gYTEuaXNVbmRlZmluZWQoKSA/IGxlbmd0aCA6IGEx
LnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIHVuc2lnbmVkIGVuZCA9
IHN0ZDo6bWluPHVuc2lnbmVkPihzdGQ6Om1heChwb3MsIDApLCBsZW5ndGgpOwogCi0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oc3RyaW5nVG9TZWFyY2hJbi5oYXNJbmZpeEVu
ZGluZ0F0KHNlYXJjaFN0cmluZywgZW5kKSkpOworICAgIEpTVmFsdWUgZW5kUG9zaXRpb25Bcmcg
PSBleGVjLT5hcmd1bWVudCgxKTsKKyAgICB1bnNpZ25lZCBlbmQgPSBsZW5ndGg7CisgICAgaWYg
KGVuZFBvc2l0aW9uQXJnLmlzSW50MzIoKSkKKyAgICAgICAgZW5kID0gc3RkOjptYXgoMCwgZW5k
UG9zaXRpb25BcmcuYXNJbnQzMigpKTsKKyAgICBlbHNlIGlmICghZW5kUG9zaXRpb25BcmcuaXNV
bmRlZmluZWQoKSkgeworICAgICAgICBlbmQgPSBjbGFtcEludDMyKGVuZFBvc2l0aW9uQXJnLnRv
SW50ZWdlcihleGVjKSwgMCwgbGVuZ3RoKTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
KyAgICB9CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihzdHJpbmdUb1Nl
YXJjaEluLmhhc0luZml4RW5kaW5nQXQoc2VhcmNoU3RyaW5nLCBzdGQ6Om1pbjx1bnNpZ25lZD4o
ZW5kLCBsZW5ndGgpKSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmlu
Z1Byb3RvRnVuY0luY2x1ZGVzKEV4ZWNTdGF0ZSogZXhlYykKQEAgLTE3NDAsOSArMTc2MSwxNiBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0luY2x1ZGVzKEV4
ZWNTdGF0ZSogZXhlYykKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKLSAgICB1bnNpZ25lZCBzdGFy
dCA9IHN0ZDo6bWF4KDAsIGV4ZWMtPmFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYykpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKKyAgICBKU1ZhbHVlIHBvc2l0aW9uQXJnID0gZXhlYy0+YXJndW1lbnQo
MSk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nVG9TZWFyY2hJbi5sZW5ndGgoKTsKKyAg
ICB1bnNpZ25lZCBzdGFydCA9IDA7CisgICAgaWYgKHBvc2l0aW9uQXJnLmlzSW50MzIoKSkKKyAg
ICAgICAgc3RhcnQgPSBzdGQ6Om1heCgwLCBwb3NpdGlvbkFyZy5hc0ludDMyKCkpOworICAgIGVs
c2UgeworICAgICAgICBzdGFydCA9IGNsYW1wSW50MzIocG9zaXRpb25BcmcudG9JbnRlZ2VyKGV4
ZWMpLCAwLCBsZW5ndGgpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIH0KIAog
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHN0cmluZ1RvU2VhcmNoSW4uY29u
dGFpbnMoc2VhcmNoU3RyaW5nLCB0cnVlLCBzdGFydCkpKTsKIH0KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBiN2ViYTVlNTVl
OGM3NDUxMWQyNjY1ZTJlN2RiYTczOTZiYjM3Y2FlLi40YzJiMzM4NjZmM2E4NDlkYTNhMzkxN2Y5
MzU2YjcxMjJkMzdhNmJjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTUtMDQtMjkgIEpvcmRh
biBIYXJiYW5kICA8bGpoYXJiQGdtYWlsLmNvbT4KKworICAgICAgICBTdHJpbmcjc3RhcnRzV2l0
aC9lbmRzV2l0aC9pbmNsdWRlcyBkb24ndCBoYW5kbGUgSW5maW5pdHkgcG9zaXRpb24vZW5kUG9z
aXRpb24gYXJncyBjb3JyZWN0bHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE0NDMxNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICoganMvc2NyaXB0LXRlc3RzL3N0cmluZy1pbmNsdWRlcy5qczoKKyAgICAg
ICAgKiBqcy9zdHJpbmctaW5jbHVkZXMtZXhwZWN0ZWQudHh0OgorCiAyMDE1LTA0LTI5ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgU2ltcGxlIGxpbmUgbGF5b3V0
OiBXZWIgcHJvY2VzcyBzcGlucyBlbmRsZXNzbHkgYmVsb3cgbGF5b3V0U2ltcGxlTGluZXMuCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvc3RyaW5nLWluY2x1ZGVzLmpz
IGIvTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL3N0cmluZy1pbmNsdWRlcy5qcwppbmRleCAy
NTJhMmE0YTFmYjdiMWQ2NGRmZjAyN2VlYTM2NzNhZGQ1M2VjMjhjLi45MWYwMzUzODQ3MzJkOWFm
ZGFmNDUzMTZkZjNhYTdlMmU2YTkyM2I3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9qcy9zY3Jp
cHQtdGVzdHMvc3RyaW5nLWluY2x1ZGVzLmpzCisrKyBiL0xheW91dFRlc3RzL2pzL3NjcmlwdC10
ZXN0cy9zdHJpbmctaW5jbHVkZXMuanMKQEAgLTEsNiArMSw3IEBACi1kZXNjcmlwdGlvbigiVGhp
cyB0ZXN0IGNoZWNrcyB0aGUgRVM2IHN0cmluZyBmdW5jdGlvbnMgc3RhcnRzV2l0aCgpLCBlbmRz
V2l0aCgpIGFuZCBpbmNsdWRlcygpLiIpOworZGVzY3JpcHRpb24oIlRoaXMgdGVzdCBjaGVja3Mg
dGhlIEVTNiBzdHJpbmcgZnVuY3Rpb25zIHN0YXJ0c1dpdGgoKSwgZW5kc1dpdGgoKSwgYW5kIGlu
Y2x1ZGVzKCkuIik7CiAKIC8vIFRlc3QgaW5jbHVkZXMKK3Nob3VsZEJlKCJTdHJpbmcucHJvdG90
eXBlLmluY2x1ZGVzLm5hbWUiLCAiJ2luY2x1ZGVzJyIpOwogc2hvdWxkQmUoIlN0cmluZy5wcm90
b3R5cGUuaW5jbHVkZXMubGVuZ3RoIiwgIjEiKTsKIHNob3VsZEJlKCInZm9vIGJhcicuaW5jbHVk
ZXMoJ2JhcicpIiwgInRydWUiKTsKIHNob3VsZEJlKCInZm9vIGJhcicuaW5jbHVkZXMoJ2Jhcics
IDQpIiwgInRydWUiKTsKQEAgLTMwLDggKzMxLDE2IEBAIHNob3VsZEJlKCInZm9vIDFlKzEwMCBi
YXInLmluY2x1ZGVzKDFlKzEwMCkiLCAidHJ1ZSIpOwogc2hvdWxkQmUoIidmb28gMWUxMDAgYmFy
Jy5pbmNsdWRlcygxZTEwMCkiLCAiZmFsc2UiKTsKIHNob3VsZEJlKCIn44OV44O844OQ44O8Jy5p
bmNsdWRlcygn44O844OQJykiLCAidHJ1ZSIpOwogc2hvdWxkQmUoIifjg5Xjg7zjg5Djg7wnLmlu
Y2x1ZGVzKCfjgq/jg7wnKSIsICJmYWxzZSIpOworc2hvdWxkQmVGYWxzZSgiJ2FiYycuaW5jbHVk
ZXMoJ2EnLCAnYWJjJy5sZW5ndGgpIik7CitzaG91bGRCZUZhbHNlKCInYWJjJy5pbmNsdWRlcygn
YScsIE1hdGgucG93KDIsIDMzKSkiKTsKK3Nob3VsZEJlRmFsc2UoIidhYmMnLmluY2x1ZGVzKCdh
JywgSW5maW5pdHkpIik7CitzaG91bGRCZVRydWUoIidhYmMnLmluY2x1ZGVzKCdhYicsIC1JbmZp
bml0eSkiKTsKK3Nob3VsZEJlRmFsc2UoIidhYmMnLmluY2x1ZGVzKCdjZCcsIC1JbmZpbml0eSki
KTsKK3Nob3VsZEJlVHJ1ZSgiJ2FiYycuaW5jbHVkZXMoJ2FiJywgMCkiKTsKK3Nob3VsZEJlRmFs
c2UoIidhYmMnLmluY2x1ZGVzKCdjZCcsIDApIik7CiAKIC8vIFRlc3Qgc3RhcnRzV2l0aAorc2hv
dWxkQmUoIlN0cmluZy5wcm90b3R5cGUuc3RhcnRzV2l0aC5uYW1lIiwgIidzdGFydHNXaXRoJyIp
Owogc2hvdWxkQmUoIlN0cmluZy5wcm90b3R5cGUuc3RhcnRzV2l0aC5sZW5ndGgiLCAiMSIpOwog
c2hvdWxkQmUoIidmb28gYmFyJy5zdGFydHNXaXRoKCdmb28nKSIsICJ0cnVlIik7CiBzaG91bGRC
ZSgiJ2ZvbyBiYXInLnN0YXJ0c1dpdGgoJ2ZvbycsIDApIiwgInRydWUiKTsKQEAgLTYwLDggKzY5
LDE1IEBAIHNob3VsZEJlKCIn44OV44O844OQ44O8Jy5zdGFydHNXaXRoKCdhYmMnKSIsICJmYWxz
ZSIpOwogc2hvdWxkQmUoIifjg5Xjg7zjg5Djg7wnLnN0YXJ0c1dpdGgoJ2FiYycsIDEpIiwgImZh
bHNlIik7CiBzaG91bGRCZSgiJ2ZvbyBiYXInLnN0YXJ0c1dpdGgoJ+ODleODvCcpIiwgImZhbHNl
Iik7CiBzaG91bGRCZSgiJ2ZvbyBiYXInLnN0YXJ0c1dpdGgoJ+ODleODvCcsIDEpIiwgImZhbHNl
Iik7CitzaG91bGRCZUZhbHNlKCInYWJjJy5zdGFydHNXaXRoKCdhJywgSW5maW5pdHkpIik7Citz
aG91bGRCZUZhbHNlKCInYWJjJy5zdGFydHNXaXRoKCdhJywgMSkiKTsKK3Nob3VsZEJlVHJ1ZSgi
J2FiYycuc3RhcnRzV2l0aCgnYicsIDEpIik7CitzaG91bGRCZUZhbHNlKCInYWJjJy5zdGFydHNX
aXRoKCdiJywgMikiKTsKK3Nob3VsZEJlVHJ1ZSgiJ2FiYycuc3RhcnRzV2l0aCgnYycsIDIpIik7
CitzaG91bGRCZUZhbHNlKCInYWJjJy5zdGFydHNXaXRoKCdhJywgTWF0aC5wb3coMiwgMzMpKSIp
OwogCiAvLyBUZXN0IGVuZHNXaXRoCitzaG91bGRCZSgiU3RyaW5nLnByb3RvdHlwZS5lbmRzV2l0
aC5uYW1lIiwgIidlbmRzV2l0aCciKTsKIHNob3VsZEJlKCJTdHJpbmcucHJvdG90eXBlLmVuZHNX
aXRoLmxlbmd0aCIsICIxIik7CiBzaG91bGRCZSgiJ2ZvbyBiYXInLmVuZHNXaXRoKCdiYXInKSIs
ICJ0cnVlIik7CiBzaG91bGRCZSgiJ2ZvbyBiYXInLmVuZHNXaXRoKCdiYScsIDYpIiwgInRydWUi
KTsKQEAgLTkzLDYgKzEwOSwxNCBAQCBzaG91bGRCZSgiJ+ODleODvOODkOODvCcuZW5kc1dpdGgo
J2FiYycpIiwgImZhbHNlIik7CiBzaG91bGRCZSgiJ+ODleODvOODkOODvCcuZW5kc1dpdGgoJ2Fi
YycpIiwgImZhbHNlIik7CiBzaG91bGRCZSgiJ2ZvbyBiYXInLmVuZHNXaXRoKCfjg5Xjg7wnKSIs
ICJmYWxzZSIpOwogc2hvdWxkQmUoIidmb28gYmFyJy5lbmRzV2l0aCgn44OV44O8JywgMykiLCAi
ZmFsc2UiKTsKK3Nob3VsZEJlVHJ1ZSgiJ2FiYycuZW5kc1dpdGgoJ2JjJywgSW5maW5pdHkpIik7
CitzaG91bGRCZVRydWUoIidhYmMnLmVuZHNXaXRoKCdiYycsIE1hdGgucG93KDIsIDMzKSkiKTsK
K3Nob3VsZEJlRmFsc2UoIidhYmMnLmVuZHNXaXRoKCdhJywgMCkiKTsKK3Nob3VsZEJlVHJ1ZSgi
J2FiYycuZW5kc1dpdGgoJ2EnLCAxKSIpOworc2hvdWxkQmVGYWxzZSgiJ2FiYycuZW5kc1dpdGgo
J2InLCAxKSIpOworc2hvdWxkQmVUcnVlKCInYWJjJy5lbmRzV2l0aCgnYicsIDIpIik7CitzaG91
bGRCZUZhbHNlKCInYWJjJy5lbmRzV2l0aCgnYmMnLCAyKSIpOworc2hvdWxkQmVUcnVlKCInYWJj
Jy5lbmRzV2l0aCgnYmMnLCAzKSIpOwogCiAvLyBDYWxsIGZ1bmN0aW9ucyB3aXRoIGFuIGVudmly
b25tZW50IHJlY29yZCBhcyAndGhpcycuCiBzaG91bGRUaHJvdygiKGZ1bmN0aW9uKCkgeyB2YXIg
ZiA9IFN0cmluZy5wcm90b3R5cGUuc3RhcnRzV2l0aDsgKGZ1bmN0aW9uKCkgeyBmKCdhJyk7IH0p
KCk7IH0pKCkiKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL3N0cmluZy1pbmNsdWRlcy1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9qcy9zdHJpbmctaW5jbHVkZXMtZXhwZWN0ZWQudHh0
CmluZGV4IDI1YmE1NzhjZGQ1MmZlN2I3ZDgzNWZjYmI3NThjNjJiOGRiYjhlMzIuLmZiNzdjMTZj
YWRmNmFiZmEzNGQ0ZWZjN2Q2ZjVmMTUwZmJmZDI0ODUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L2pzL3N0cmluZy1pbmNsdWRlcy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvanMvc3Ry
aW5nLWluY2x1ZGVzLWV4cGVjdGVkLnR4dApAQCAtMSw4ICsxLDkgQEAKLVRoaXMgdGVzdCBjaGVj
a3MgdGhlIEVTNiBzdHJpbmcgZnVuY3Rpb25zIHN0YXJ0c1dpdGgoKSwgZW5kc1dpdGgoKSBhbmQg
aW5jbHVkZXMoKS4KK1RoaXMgdGVzdCBjaGVja3MgdGhlIEVTNiBzdHJpbmcgZnVuY3Rpb25zIHN0
YXJ0c1dpdGgoKSwgZW5kc1dpdGgoKSwgYW5kIGluY2x1ZGVzKCkuCiAKIE9uIHN1Y2Nlc3MsIHlv
dSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNU
IENPTVBMRVRFIi4KIAogCitQQVNTIFN0cmluZy5wcm90b3R5cGUuaW5jbHVkZXMubmFtZSBpcyAn
aW5jbHVkZXMnCiBQQVNTIFN0cmluZy5wcm90b3R5cGUuaW5jbHVkZXMubGVuZ3RoIGlzIDEKIFBB
U1MgJ2ZvbyBiYXInLmluY2x1ZGVzKCdiYXInKSBpcyB0cnVlCiBQQVNTICdmb28gYmFyJy5pbmNs
dWRlcygnYmFyJywgNCkgaXMgdHJ1ZQpAQCAtMzIsNiArMzMsMTQgQEAgUEFTUyAnZm9vIDFlKzEw
MCBiYXInLmluY2x1ZGVzKDFlKzEwMCkgaXMgdHJ1ZQogUEFTUyAnZm9vIDFlMTAwIGJhcicuaW5j
bHVkZXMoMWUxMDApIGlzIGZhbHNlCiBQQVNTICfjg5Xjg7zjg5Djg7wnLmluY2x1ZGVzKCfjg7zj
g5AnKSBpcyB0cnVlCiBQQVNTICfjg5Xjg7zjg5Djg7wnLmluY2x1ZGVzKCfjgq/jg7wnKSBpcyBm
YWxzZQorUEFTUyAnYWJjJy5pbmNsdWRlcygnYScsICdhYmMnLmxlbmd0aCkgaXMgZmFsc2UKK1BB
U1MgJ2FiYycuaW5jbHVkZXMoJ2EnLCBNYXRoLnBvdygyLCAzMykpIGlzIGZhbHNlCitQQVNTICdh
YmMnLmluY2x1ZGVzKCdhJywgSW5maW5pdHkpIGlzIGZhbHNlCitQQVNTICdhYmMnLmluY2x1ZGVz
KCdhYicsIC1JbmZpbml0eSkgaXMgdHJ1ZQorUEFTUyAnYWJjJy5pbmNsdWRlcygnY2QnLCAtSW5m
aW5pdHkpIGlzIGZhbHNlCitQQVNTICdhYmMnLmluY2x1ZGVzKCdhYicsIDApIGlzIHRydWUKK1BB
U1MgJ2FiYycuaW5jbHVkZXMoJ2NkJywgMCkgaXMgZmFsc2UKK1BBU1MgU3RyaW5nLnByb3RvdHlw
ZS5zdGFydHNXaXRoLm5hbWUgaXMgJ3N0YXJ0c1dpdGgnCiBQQVNTIFN0cmluZy5wcm90b3R5cGUu
c3RhcnRzV2l0aC5sZW5ndGggaXMgMQogUEFTUyAnZm9vIGJhcicuc3RhcnRzV2l0aCgnZm9vJykg
aXMgdHJ1ZQogUEFTUyAnZm9vIGJhcicuc3RhcnRzV2l0aCgnZm9vJywgMCkgaXMgdHJ1ZQpAQCAt
NjAsNiArNjksMTMgQEAgUEFTUyAn44OV44O844OQ44O8Jy5zdGFydHNXaXRoKCdhYmMnKSBpcyBm
YWxzZQogUEFTUyAn44OV44O844OQ44O8Jy5zdGFydHNXaXRoKCdhYmMnLCAxKSBpcyBmYWxzZQog
UEFTUyAnZm9vIGJhcicuc3RhcnRzV2l0aCgn44OV44O8JykgaXMgZmFsc2UKIFBBU1MgJ2ZvbyBi
YXInLnN0YXJ0c1dpdGgoJ+ODleODvCcsIDEpIGlzIGZhbHNlCitQQVNTICdhYmMnLnN0YXJ0c1dp
dGgoJ2EnLCBJbmZpbml0eSkgaXMgZmFsc2UKK1BBU1MgJ2FiYycuc3RhcnRzV2l0aCgnYScsIDEp
IGlzIGZhbHNlCitQQVNTICdhYmMnLnN0YXJ0c1dpdGgoJ2InLCAxKSBpcyB0cnVlCitQQVNTICdh
YmMnLnN0YXJ0c1dpdGgoJ2InLCAyKSBpcyBmYWxzZQorUEFTUyAnYWJjJy5zdGFydHNXaXRoKCdj
JywgMikgaXMgdHJ1ZQorUEFTUyAnYWJjJy5zdGFydHNXaXRoKCdhJywgTWF0aC5wb3coMiwgMzMp
KSBpcyBmYWxzZQorUEFTUyBTdHJpbmcucHJvdG90eXBlLmVuZHNXaXRoLm5hbWUgaXMgJ2VuZHNX
aXRoJwogUEFTUyBTdHJpbmcucHJvdG90eXBlLmVuZHNXaXRoLmxlbmd0aCBpcyAxCiBQQVNTICdm
b28gYmFyJy5lbmRzV2l0aCgnYmFyJykgaXMgdHJ1ZQogUEFTUyAnZm9vIGJhcicuZW5kc1dpdGgo
J2JhJywgNikgaXMgdHJ1ZQpAQCAtOTEsNiArMTA3LDE0IEBAIFBBU1MgJ+ODleODvOODkOODvCcu
ZW5kc1dpdGgoJ2FiYycpIGlzIGZhbHNlCiBQQVNTICfjg5Xjg7zjg5Djg7wnLmVuZHNXaXRoKCdh
YmMnKSBpcyBmYWxzZQogUEFTUyAnZm9vIGJhcicuZW5kc1dpdGgoJ+ODleODvCcpIGlzIGZhbHNl
CiBQQVNTICdmb28gYmFyJy5lbmRzV2l0aCgn44OV44O8JywgMykgaXMgZmFsc2UKK1BBU1MgJ2Fi
YycuZW5kc1dpdGgoJ2JjJywgSW5maW5pdHkpIGlzIHRydWUKK1BBU1MgJ2FiYycuZW5kc1dpdGgo
J2JjJywgTWF0aC5wb3coMiwgMzMpKSBpcyB0cnVlCitQQVNTICdhYmMnLmVuZHNXaXRoKCdhJywg
MCkgaXMgZmFsc2UKK1BBU1MgJ2FiYycuZW5kc1dpdGgoJ2EnLCAxKSBpcyB0cnVlCitQQVNTICdh
YmMnLmVuZHNXaXRoKCdiJywgMSkgaXMgZmFsc2UKK1BBU1MgJ2FiYycuZW5kc1dpdGgoJ2InLCAy
KSBpcyB0cnVlCitQQVNTICdhYmMnLmVuZHNXaXRoKCdiYycsIDIpIGlzIGZhbHNlCitQQVNTICdh
YmMnLmVuZHNXaXRoKCdiYycsIDMpIGlzIHRydWUKIFBBU1MgKGZ1bmN0aW9uKCkgeyB2YXIgZiA9
IFN0cmluZy5wcm90b3R5cGUuc3RhcnRzV2l0aDsgKGZ1bmN0aW9uKCkgeyBmKCdhJyk7IH0pKCk7
IH0pKCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogVHlwZSBlcnJvci4KIFBBU1MgKGZ1bmN0
aW9uKCkgeyB2YXIgZiA9IFN0cmluZy5wcm90b3R5cGUuZW5kc1dpdGg7IChmdW5jdGlvbigpIHsg
ZignYScpOyB9KSgpOyB9KSgpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IFR5cGUgZXJyb3Iu
CiBQQVNTIChmdW5jdGlvbigpIHsgdmFyIGYgPSBTdHJpbmcucHJvdG90eXBlLmluY2x1ZGVzOyAo
ZnVuY3Rpb24oKSB7IGYoJ2EnKTsgfSkoKTsgfSkoKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9y
OiBUeXBlIGVycm9yLgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252113</attachid>
            <date>2015-04-30 16:41:58 -0700</date>
            <delta_ts>2015-05-01 15:45:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-144314-20150430164046.patch</filename>
            <type>text/plain</type>
            <size>11647</size>
            <attacher name="Jordan Harband">ljharb</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgzNTc3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
ZTVlYjg3MjU1Njc1NjMyODA5ZmY5Y2ViYmY3MzBlNzQ4MjEwYmNkLi42OTgxMTJjMzczZWFkMzQ0
Y2M1MDU2N2U4MmU0YTEwODZkYmZhMGI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMSBAQAorMjAxNS0wNC0yOSAgSm9yZGFuIEhhcmJhbmQgIDxsamhhcmJAZ21haWwuY29t
PgorCisgICAgICAgIFN0cmluZyNzdGFydHNXaXRoL2VuZHNXaXRoL2luY2x1ZGVzIGRvbid0IGhh
bmRsZSBJbmZpbml0eSBwb3NpdGlvbi9lbmRQb3NpdGlvbiBhcmdzIGNvcnJlY3RseQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0MzE0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4aW5nIGhhbmRsaW5n
IG9mIEluZmluaXR5IHBvc2l0aW9uIGFyZ3MsIHBlcgorICAgICAgICBodHRwczovL3Blb3BsZS5t
b3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMtc3RyaW5nLnByb3RvdHlw
ZS5pbmNsdWRlcworICAgICAgICBodHRwczovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3Jm
Zi9lczYtZHJhZnQuaHRtbCNzZWMtc3RyaW5nLnByb3RvdHlwZS5zdGFydHN3aXRoCisgICAgICAg
IGh0dHBzOi8vcGVvcGxlLm1vemlsbGEub3JnL35qb3JlbmRvcmZmL2VzNi1kcmFmdC5odG1sI3Nl
Yy1zdHJpbmcucHJvdG90eXBlLmVuZHN3aXRoCisKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ1By
b3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OmNsYW1wSW50MzIpOgorICAgICAgICAoSlNDOjpz
dHJpbmdQcm90b0Z1bmNTdGFydHNXaXRoKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5j
RW5kc1dpdGgpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNJbmNsdWRlcyk6CisKIDIw
MTUtMDQtMjkgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBKU1R5
cGVJbmZvIHNob3VsZCBoYXZlIGFuIGlubGluZSB0eXBlIGZsYWcgdG8gaW5kaWNhdGUgb2YgZ2V0
Q2FsbERhdGEoKSBoYXMgYmVlbiBvdmVycmlkZGVuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAppbmRleCBmYTdiZWYxNWQ2ZGM4YTA3YjM4
MzVmMGRlZmM5YjZlNTA2M2Q5MThjLi5iYjgwMTJkMWE4NTM4YTJjZTdkNTE3YmQ3MDU4ODM1MDBm
NDk4MjhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQ
cm90b3R5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1By
b3RvdHlwZS5jcHAKQEAgLTE2NjksNiArMTY2OSwxNSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RyaW1SaWdodChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZSh0cmltU3RyaW5nKGV4ZWMsIHRoaXNWYWx1ZSwgVHJpbVJpZ2h0
KSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2xhbXBBbmRUcnVuY2F0ZVRvVW5zaWdu
ZWQoZG91YmxlIHZhbHVlLCB1bnNpZ25lZCBtaW4sIHVuc2lnbmVkIG1heCkKK3sKKyAgICBpZiAo
dmFsdWUgPCBtaW4pCisgICAgICAgIHJldHVybiBtaW47CisgICAgaWYgKHZhbHVlID4gbWF4KQor
ICAgICAgICByZXR1cm4gbWF4OworICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odmFs
dWUpOworfQorCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1N0
YXJ0c1dpdGgoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhl
Yy0+dGhpc1ZhbHVlKCk7CkBAIC0xNjg3LDkgKzE2OTYsMTYgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNTdGFydHNXaXRoKEV4ZWNTdGF0ZSogZXhlYykKICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7CiAKLSAgICB1bnNpZ25lZCBzdGFydCA9IHN0ZDo6bWF4KDAsIGV4
ZWMtPmFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYykpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAg
ICBKU1ZhbHVlIHBvc2l0aW9uQXJnID0gZXhlYy0+YXJndW1lbnQoMSk7CisgICAgdW5zaWduZWQg
c3RhcnQgPSAwOworICAgIGlmIChwb3NpdGlvbkFyZy5pc0ludDMyKCkpCisgICAgICAgIHN0YXJ0
ID0gc3RkOjptYXgoMCwgcG9zaXRpb25BcmcuYXNJbnQzMigpKTsKKyAgICBlbHNlIHsKKyAgICAg
ICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nVG9TZWFyY2hJbi5sZW5ndGgoKTsKKyAgICAgICAg
c3RhcnQgPSBjbGFtcEFuZFRydW5jYXRlVG9VbnNpZ25lZChwb3NpdGlvbkFyZy50b0ludGVnZXIo
ZXhlYyksIDAsIGxlbmd0aCk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgfQog
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oc3RyaW5nVG9TZWFyY2hJbi5o
YXNJbmZpeFN0YXJ0aW5nQXQoc2VhcmNoU3RyaW5nLCBzdGFydCkpKTsKIH0KQEAgLTE3MTMsMTMg
KzE3MjksMTggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNF
bmRzV2l0aChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CiAKICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmdUb1NlYXJjaElu
Lmxlbmd0aCgpOwotICAgIEpTVmFsdWUgYTEgPSBleGVjLT5hcmd1bWVudCgxKTsKLSAgICBpbnQg
cG9zID0gYTEuaXNVbmRlZmluZWQoKSA/IGxlbmd0aCA6IGExLnRvSW50MzIoZXhlYyk7Ci0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwotICAgIHVuc2lnbmVkIGVuZCA9IHN0ZDo6bWluPHVuc2lnbmVkPihz
dGQ6Om1heChwb3MsIDApLCBsZW5ndGgpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c0Jvb2xlYW4oc3RyaW5nVG9TZWFyY2hJbi5oYXNJbmZpeEVuZGluZ0F0KHNlYXJjaFN0cmluZywg
ZW5kKSkpOworICAgIEpTVmFsdWUgZW5kUG9zaXRpb25BcmcgPSBleGVjLT5hcmd1bWVudCgxKTsK
KyAgICB1bnNpZ25lZCBlbmQgPSBsZW5ndGg7CisgICAgaWYgKGVuZFBvc2l0aW9uQXJnLmlzSW50
MzIoKSkKKyAgICAgICAgZW5kID0gc3RkOjptYXgoMCwgZW5kUG9zaXRpb25BcmcuYXNJbnQzMigp
KTsKKyAgICBlbHNlIGlmICghZW5kUG9zaXRpb25BcmcuaXNVbmRlZmluZWQoKSkgeworICAgICAg
ICBlbmQgPSBjbGFtcEFuZFRydW5jYXRlVG9VbnNpZ25lZChlbmRQb3NpdGlvbkFyZy50b0ludGVn
ZXIoZXhlYyksIDAsIGxlbmd0aCk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAg
fQorCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oc3RyaW5nVG9TZWFyY2hJ
bi5oYXNJbmZpeEVuZGluZ0F0KHNlYXJjaFN0cmluZywgc3RkOjptaW4oZW5kLCBsZW5ndGgpKSkp
OwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0luY2x1
ZGVzKEV4ZWNTdGF0ZSogZXhlYykKQEAgLTE3NDAsOSArMTc2MSwxNiBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0luY2x1ZGVzKEV4ZWNTdGF0ZSogZXhlYykK
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAKLSAgICB1bnNpZ25lZCBzdGFydCA9IHN0ZDo6bWF4KDAs
IGV4ZWMtPmFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYykpOwotICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
KyAgICBKU1ZhbHVlIHBvc2l0aW9uQXJnID0gZXhlYy0+YXJndW1lbnQoMSk7CisgICAgdW5zaWdu
ZWQgc3RhcnQgPSAwOworICAgIGlmIChwb3NpdGlvbkFyZy5pc0ludDMyKCkpCisgICAgICAgIHN0
YXJ0ID0gc3RkOjptYXgoMCwgcG9zaXRpb25BcmcuYXNJbnQzMigpKTsKKyAgICBlbHNlIHsKKyAg
ICAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nVG9TZWFyY2hJbi5sZW5ndGgoKTsKKyAgICAg
ICAgc3RhcnQgPSBjbGFtcEFuZFRydW5jYXRlVG9VbnNpZ25lZChwb3NpdGlvbkFyZy50b0ludGVn
ZXIoZXhlYyksIDAsIGxlbmd0aCk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAg
fQogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oc3RyaW5nVG9TZWFyY2hJ
bi5jb250YWlucyhzZWFyY2hTdHJpbmcsIHRydWUsIHN0YXJ0KSkpOwogfQpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGI3ZWJh
NWU1NWU4Yzc0NTExZDI2NjVlMmU3ZGJhNzM5NmJiMzdjYWUuLjRjMmIzMzg2NmYzYTg0OWRhM2Ez
OTE3ZjkzNTZiNzEyMmQzN2E2YmMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZwor
KysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxNS0wNC0yOSAg
Sm9yZGFuIEhhcmJhbmQgIDxsamhhcmJAZ21haWwuY29tPgorCisgICAgICAgIFN0cmluZyNzdGFy
dHNXaXRoL2VuZHNXaXRoL2luY2x1ZGVzIGRvbid0IGhhbmRsZSBJbmZpbml0eSBwb3NpdGlvbi9l
bmRQb3NpdGlvbiBhcmdzIGNvcnJlY3RseQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0MzE0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBqcy9zY3JpcHQtdGVzdHMvc3RyaW5nLWluY2x1ZGVzLmpzOgor
ICAgICAgICAqIGpzL3N0cmluZy1pbmNsdWRlcy1leHBlY3RlZC50eHQ6CisKIDIwMTUtMDQtMjkg
IFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBTaW1wbGUgbGluZSBs
YXlvdXQ6IFdlYiBwcm9jZXNzIHNwaW5zIGVuZGxlc3NseSBiZWxvdyBsYXlvdXRTaW1wbGVMaW5l
cy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9zdHJpbmctaW5jbHVk
ZXMuanMgYi9MYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvc3RyaW5nLWluY2x1ZGVzLmpzCmlu
ZGV4IDI1MmEyYTRhMWZiN2IxZDY0ZGZmMDI3ZWVhMzY3M2FkZDUzZWMyOGMuLjkxZjAzNTM4NDcz
MmQ5YWZkYWY0NTMxNmRmM2FhN2UyZTZhOTIzYjcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2pz
L3NjcmlwdC10ZXN0cy9zdHJpbmctaW5jbHVkZXMuanMKKysrIGIvTGF5b3V0VGVzdHMvanMvc2Ny
aXB0LXRlc3RzL3N0cmluZy1pbmNsdWRlcy5qcwpAQCAtMSw2ICsxLDcgQEAKLWRlc2NyaXB0aW9u
KCJUaGlzIHRlc3QgY2hlY2tzIHRoZSBFUzYgc3RyaW5nIGZ1bmN0aW9ucyBzdGFydHNXaXRoKCks
IGVuZHNXaXRoKCkgYW5kIGluY2x1ZGVzKCkuIik7CitkZXNjcmlwdGlvbigiVGhpcyB0ZXN0IGNo
ZWNrcyB0aGUgRVM2IHN0cmluZyBmdW5jdGlvbnMgc3RhcnRzV2l0aCgpLCBlbmRzV2l0aCgpLCBh
bmQgaW5jbHVkZXMoKS4iKTsKIAogLy8gVGVzdCBpbmNsdWRlcworc2hvdWxkQmUoIlN0cmluZy5w
cm90b3R5cGUuaW5jbHVkZXMubmFtZSIsICInaW5jbHVkZXMnIik7CiBzaG91bGRCZSgiU3RyaW5n
LnByb3RvdHlwZS5pbmNsdWRlcy5sZW5ndGgiLCAiMSIpOwogc2hvdWxkQmUoIidmb28gYmFyJy5p
bmNsdWRlcygnYmFyJykiLCAidHJ1ZSIpOwogc2hvdWxkQmUoIidmb28gYmFyJy5pbmNsdWRlcygn
YmFyJywgNCkiLCAidHJ1ZSIpOwpAQCAtMzAsOCArMzEsMTYgQEAgc2hvdWxkQmUoIidmb28gMWUr
MTAwIGJhcicuaW5jbHVkZXMoMWUrMTAwKSIsICJ0cnVlIik7CiBzaG91bGRCZSgiJ2ZvbyAxZTEw
MCBiYXInLmluY2x1ZGVzKDFlMTAwKSIsICJmYWxzZSIpOwogc2hvdWxkQmUoIifjg5Xjg7zjg5Dj
g7wnLmluY2x1ZGVzKCfjg7zjg5AnKSIsICJ0cnVlIik7CiBzaG91bGRCZSgiJ+ODleODvOODkOOD
vCcuaW5jbHVkZXMoJ+OCr+ODvCcpIiwgImZhbHNlIik7CitzaG91bGRCZUZhbHNlKCInYWJjJy5p
bmNsdWRlcygnYScsICdhYmMnLmxlbmd0aCkiKTsKK3Nob3VsZEJlRmFsc2UoIidhYmMnLmluY2x1
ZGVzKCdhJywgTWF0aC5wb3coMiwgMzMpKSIpOworc2hvdWxkQmVGYWxzZSgiJ2FiYycuaW5jbHVk
ZXMoJ2EnLCBJbmZpbml0eSkiKTsKK3Nob3VsZEJlVHJ1ZSgiJ2FiYycuaW5jbHVkZXMoJ2FiJywg
LUluZmluaXR5KSIpOworc2hvdWxkQmVGYWxzZSgiJ2FiYycuaW5jbHVkZXMoJ2NkJywgLUluZmlu
aXR5KSIpOworc2hvdWxkQmVUcnVlKCInYWJjJy5pbmNsdWRlcygnYWInLCAwKSIpOworc2hvdWxk
QmVGYWxzZSgiJ2FiYycuaW5jbHVkZXMoJ2NkJywgMCkiKTsKIAogLy8gVGVzdCBzdGFydHNXaXRo
CitzaG91bGRCZSgiU3RyaW5nLnByb3RvdHlwZS5zdGFydHNXaXRoLm5hbWUiLCAiJ3N0YXJ0c1dp
dGgnIik7CiBzaG91bGRCZSgiU3RyaW5nLnByb3RvdHlwZS5zdGFydHNXaXRoLmxlbmd0aCIsICIx
Iik7CiBzaG91bGRCZSgiJ2ZvbyBiYXInLnN0YXJ0c1dpdGgoJ2ZvbycpIiwgInRydWUiKTsKIHNo
b3VsZEJlKCInZm9vIGJhcicuc3RhcnRzV2l0aCgnZm9vJywgMCkiLCAidHJ1ZSIpOwpAQCAtNjAs
OCArNjksMTUgQEAgc2hvdWxkQmUoIifjg5Xjg7zjg5Djg7wnLnN0YXJ0c1dpdGgoJ2FiYycpIiwg
ImZhbHNlIik7CiBzaG91bGRCZSgiJ+ODleODvOODkOODvCcuc3RhcnRzV2l0aCgnYWJjJywgMSki
LCAiZmFsc2UiKTsKIHNob3VsZEJlKCInZm9vIGJhcicuc3RhcnRzV2l0aCgn44OV44O8JykiLCAi
ZmFsc2UiKTsKIHNob3VsZEJlKCInZm9vIGJhcicuc3RhcnRzV2l0aCgn44OV44O8JywgMSkiLCAi
ZmFsc2UiKTsKK3Nob3VsZEJlRmFsc2UoIidhYmMnLnN0YXJ0c1dpdGgoJ2EnLCBJbmZpbml0eSki
KTsKK3Nob3VsZEJlRmFsc2UoIidhYmMnLnN0YXJ0c1dpdGgoJ2EnLCAxKSIpOworc2hvdWxkQmVU
cnVlKCInYWJjJy5zdGFydHNXaXRoKCdiJywgMSkiKTsKK3Nob3VsZEJlRmFsc2UoIidhYmMnLnN0
YXJ0c1dpdGgoJ2InLCAyKSIpOworc2hvdWxkQmVUcnVlKCInYWJjJy5zdGFydHNXaXRoKCdjJywg
MikiKTsKK3Nob3VsZEJlRmFsc2UoIidhYmMnLnN0YXJ0c1dpdGgoJ2EnLCBNYXRoLnBvdygyLCAz
MykpIik7CiAKIC8vIFRlc3QgZW5kc1dpdGgKK3Nob3VsZEJlKCJTdHJpbmcucHJvdG90eXBlLmVu
ZHNXaXRoLm5hbWUiLCAiJ2VuZHNXaXRoJyIpOwogc2hvdWxkQmUoIlN0cmluZy5wcm90b3R5cGUu
ZW5kc1dpdGgubGVuZ3RoIiwgIjEiKTsKIHNob3VsZEJlKCInZm9vIGJhcicuZW5kc1dpdGgoJ2Jh
cicpIiwgInRydWUiKTsKIHNob3VsZEJlKCInZm9vIGJhcicuZW5kc1dpdGgoJ2JhJywgNikiLCAi
dHJ1ZSIpOwpAQCAtOTMsNiArMTA5LDE0IEBAIHNob3VsZEJlKCIn44OV44O844OQ44O8Jy5lbmRz
V2l0aCgnYWJjJykiLCAiZmFsc2UiKTsKIHNob3VsZEJlKCIn44OV44O844OQ44O8Jy5lbmRzV2l0
aCgnYWJjJykiLCAiZmFsc2UiKTsKIHNob3VsZEJlKCInZm9vIGJhcicuZW5kc1dpdGgoJ+ODleOD
vCcpIiwgImZhbHNlIik7CiBzaG91bGRCZSgiJ2ZvbyBiYXInLmVuZHNXaXRoKCfjg5Xjg7wnLCAz
KSIsICJmYWxzZSIpOworc2hvdWxkQmVUcnVlKCInYWJjJy5lbmRzV2l0aCgnYmMnLCBJbmZpbml0
eSkiKTsKK3Nob3VsZEJlVHJ1ZSgiJ2FiYycuZW5kc1dpdGgoJ2JjJywgTWF0aC5wb3coMiwgMzMp
KSIpOworc2hvdWxkQmVGYWxzZSgiJ2FiYycuZW5kc1dpdGgoJ2EnLCAwKSIpOworc2hvdWxkQmVU
cnVlKCInYWJjJy5lbmRzV2l0aCgnYScsIDEpIik7CitzaG91bGRCZUZhbHNlKCInYWJjJy5lbmRz
V2l0aCgnYicsIDEpIik7CitzaG91bGRCZVRydWUoIidhYmMnLmVuZHNXaXRoKCdiJywgMikiKTsK
K3Nob3VsZEJlRmFsc2UoIidhYmMnLmVuZHNXaXRoKCdiYycsIDIpIik7CitzaG91bGRCZVRydWUo
IidhYmMnLmVuZHNXaXRoKCdiYycsIDMpIik7CiAKIC8vIENhbGwgZnVuY3Rpb25zIHdpdGggYW4g
ZW52aXJvbm1lbnQgcmVjb3JkIGFzICd0aGlzJy4KIHNob3VsZFRocm93KCIoZnVuY3Rpb24oKSB7
IHZhciBmID0gU3RyaW5nLnByb3RvdHlwZS5zdGFydHNXaXRoOyAoZnVuY3Rpb24oKSB7IGYoJ2En
KTsgfSkoKTsgfSkoKSIpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvc3RyaW5nLWluY2x1
ZGVzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2pzL3N0cmluZy1pbmNsdWRlcy1leHBlY3Rl
ZC50eHQKaW5kZXggMjViYTU3OGNkZDUyZmU3YjdkODM1ZmNiYjc1OGM2MmI4ZGJiOGUzMi4uZmI3
N2MxNmNhZGY2YWJmYTM0ZDRlZmM3ZDZmNWYxNTBmYmZkMjQ4NSAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvanMvc3RyaW5nLWluY2x1ZGVzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9q
cy9zdHJpbmctaW5jbHVkZXMtZXhwZWN0ZWQudHh0CkBAIC0xLDggKzEsOSBAQAotVGhpcyB0ZXN0
IGNoZWNrcyB0aGUgRVM2IHN0cmluZyBmdW5jdGlvbnMgc3RhcnRzV2l0aCgpLCBlbmRzV2l0aCgp
IGFuZCBpbmNsdWRlcygpLgorVGhpcyB0ZXN0IGNoZWNrcyB0aGUgRVM2IHN0cmluZyBmdW5jdGlv
bnMgc3RhcnRzV2l0aCgpLCBlbmRzV2l0aCgpLCBhbmQgaW5jbHVkZXMoKS4KIAogT24gc3VjY2Vz
cywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkg
IlRFU1QgQ09NUExFVEUiLgogCiAKK1BBU1MgU3RyaW5nLnByb3RvdHlwZS5pbmNsdWRlcy5uYW1l
IGlzICdpbmNsdWRlcycKIFBBU1MgU3RyaW5nLnByb3RvdHlwZS5pbmNsdWRlcy5sZW5ndGggaXMg
MQogUEFTUyAnZm9vIGJhcicuaW5jbHVkZXMoJ2JhcicpIGlzIHRydWUKIFBBU1MgJ2ZvbyBiYXIn
LmluY2x1ZGVzKCdiYXInLCA0KSBpcyB0cnVlCkBAIC0zMiw2ICszMywxNCBAQCBQQVNTICdmb28g
MWUrMTAwIGJhcicuaW5jbHVkZXMoMWUrMTAwKSBpcyB0cnVlCiBQQVNTICdmb28gMWUxMDAgYmFy
Jy5pbmNsdWRlcygxZTEwMCkgaXMgZmFsc2UKIFBBU1MgJ+ODleODvOODkOODvCcuaW5jbHVkZXMo
J+ODvOODkCcpIGlzIHRydWUKIFBBU1MgJ+ODleODvOODkOODvCcuaW5jbHVkZXMoJ+OCr+ODvCcp
IGlzIGZhbHNlCitQQVNTICdhYmMnLmluY2x1ZGVzKCdhJywgJ2FiYycubGVuZ3RoKSBpcyBmYWxz
ZQorUEFTUyAnYWJjJy5pbmNsdWRlcygnYScsIE1hdGgucG93KDIsIDMzKSkgaXMgZmFsc2UKK1BB
U1MgJ2FiYycuaW5jbHVkZXMoJ2EnLCBJbmZpbml0eSkgaXMgZmFsc2UKK1BBU1MgJ2FiYycuaW5j
bHVkZXMoJ2FiJywgLUluZmluaXR5KSBpcyB0cnVlCitQQVNTICdhYmMnLmluY2x1ZGVzKCdjZCcs
IC1JbmZpbml0eSkgaXMgZmFsc2UKK1BBU1MgJ2FiYycuaW5jbHVkZXMoJ2FiJywgMCkgaXMgdHJ1
ZQorUEFTUyAnYWJjJy5pbmNsdWRlcygnY2QnLCAwKSBpcyBmYWxzZQorUEFTUyBTdHJpbmcucHJv
dG90eXBlLnN0YXJ0c1dpdGgubmFtZSBpcyAnc3RhcnRzV2l0aCcKIFBBU1MgU3RyaW5nLnByb3Rv
dHlwZS5zdGFydHNXaXRoLmxlbmd0aCBpcyAxCiBQQVNTICdmb28gYmFyJy5zdGFydHNXaXRoKCdm
b28nKSBpcyB0cnVlCiBQQVNTICdmb28gYmFyJy5zdGFydHNXaXRoKCdmb28nLCAwKSBpcyB0cnVl
CkBAIC02MCw2ICs2OSwxMyBAQCBQQVNTICfjg5Xjg7zjg5Djg7wnLnN0YXJ0c1dpdGgoJ2FiYycp
IGlzIGZhbHNlCiBQQVNTICfjg5Xjg7zjg5Djg7wnLnN0YXJ0c1dpdGgoJ2FiYycsIDEpIGlzIGZh
bHNlCiBQQVNTICdmb28gYmFyJy5zdGFydHNXaXRoKCfjg5Xjg7wnKSBpcyBmYWxzZQogUEFTUyAn
Zm9vIGJhcicuc3RhcnRzV2l0aCgn44OV44O8JywgMSkgaXMgZmFsc2UKK1BBU1MgJ2FiYycuc3Rh
cnRzV2l0aCgnYScsIEluZmluaXR5KSBpcyBmYWxzZQorUEFTUyAnYWJjJy5zdGFydHNXaXRoKCdh
JywgMSkgaXMgZmFsc2UKK1BBU1MgJ2FiYycuc3RhcnRzV2l0aCgnYicsIDEpIGlzIHRydWUKK1BB
U1MgJ2FiYycuc3RhcnRzV2l0aCgnYicsIDIpIGlzIGZhbHNlCitQQVNTICdhYmMnLnN0YXJ0c1dp
dGgoJ2MnLCAyKSBpcyB0cnVlCitQQVNTICdhYmMnLnN0YXJ0c1dpdGgoJ2EnLCBNYXRoLnBvdygy
LCAzMykpIGlzIGZhbHNlCitQQVNTIFN0cmluZy5wcm90b3R5cGUuZW5kc1dpdGgubmFtZSBpcyAn
ZW5kc1dpdGgnCiBQQVNTIFN0cmluZy5wcm90b3R5cGUuZW5kc1dpdGgubGVuZ3RoIGlzIDEKIFBB
U1MgJ2ZvbyBiYXInLmVuZHNXaXRoKCdiYXInKSBpcyB0cnVlCiBQQVNTICdmb28gYmFyJy5lbmRz
V2l0aCgnYmEnLCA2KSBpcyB0cnVlCkBAIC05MSw2ICsxMDcsMTQgQEAgUEFTUyAn44OV44O844OQ
44O8Jy5lbmRzV2l0aCgnYWJjJykgaXMgZmFsc2UKIFBBU1MgJ+ODleODvOODkOODvCcuZW5kc1dp
dGgoJ2FiYycpIGlzIGZhbHNlCiBQQVNTICdmb28gYmFyJy5lbmRzV2l0aCgn44OV44O8JykgaXMg
ZmFsc2UKIFBBU1MgJ2ZvbyBiYXInLmVuZHNXaXRoKCfjg5Xjg7wnLCAzKSBpcyBmYWxzZQorUEFT
UyAnYWJjJy5lbmRzV2l0aCgnYmMnLCBJbmZpbml0eSkgaXMgdHJ1ZQorUEFTUyAnYWJjJy5lbmRz
V2l0aCgnYmMnLCBNYXRoLnBvdygyLCAzMykpIGlzIHRydWUKK1BBU1MgJ2FiYycuZW5kc1dpdGgo
J2EnLCAwKSBpcyBmYWxzZQorUEFTUyAnYWJjJy5lbmRzV2l0aCgnYScsIDEpIGlzIHRydWUKK1BB
U1MgJ2FiYycuZW5kc1dpdGgoJ2InLCAxKSBpcyBmYWxzZQorUEFTUyAnYWJjJy5lbmRzV2l0aCgn
YicsIDIpIGlzIHRydWUKK1BBU1MgJ2FiYycuZW5kc1dpdGgoJ2JjJywgMikgaXMgZmFsc2UKK1BB
U1MgJ2FiYycuZW5kc1dpdGgoJ2JjJywgMykgaXMgdHJ1ZQogUEFTUyAoZnVuY3Rpb24oKSB7IHZh
ciBmID0gU3RyaW5nLnByb3RvdHlwZS5zdGFydHNXaXRoOyAoZnVuY3Rpb24oKSB7IGYoJ2EnKTsg
fSkoKTsgfSkoKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBUeXBlIGVycm9yLgogUEFTUyAo
ZnVuY3Rpb24oKSB7IHZhciBmID0gU3RyaW5nLnByb3RvdHlwZS5lbmRzV2l0aDsgKGZ1bmN0aW9u
KCkgeyBmKCdhJyk7IH0pKCk7IH0pKCkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogVHlwZSBl
cnJvci4KIFBBU1MgKGZ1bmN0aW9uKCkgeyB2YXIgZiA9IFN0cmluZy5wcm90b3R5cGUuaW5jbHVk
ZXM7IChmdW5jdGlvbigpIHsgZignYScpOyB9KSgpOyB9KSgpIHRocmV3IGV4Y2VwdGlvbiBUeXBl
RXJyb3I6IFR5cGUgZXJyb3IuCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>