<?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>43130</bug_id>
          
          <creation_ts>2010-07-28 11:30:35 -0700</creation_ts>
          <short_desc>Add callback arguments support to binding code generator scripts</short_desc>
          <delta_ts>2010-07-30 12:04:42 -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>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>43134</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Kinuko Yasuda">kinuko</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>dumi</cc>
    
    <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>257261</commentid>
    <comment_count>0</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-07-28 11:30:35 -0700</bug_when>
    <thetext>Add Callback arguments support to binding code generator scripts.
Currently any methods that take callback objects/functions as arguments require custom binding implementation.
It&apos;d be great if we could have better support for those methods that take callbacks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257265</commentid>
    <comment_count>1</comment_count>
      <attachid>62851</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-07-28 11:35:02 -0700</bug_when>
    <thetext>Created attachment 62851
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257279</commentid>
    <comment_count>2</comment_count>
      <attachid>62855</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-07-28 12:02:31 -0700</bug_when>
    <thetext>Created attachment 62855
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257577</commentid>
    <comment_count>3</comment_count>
      <attachid>62855</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-07-29 00:46:44 -0700</bug_when>
    <thetext>Comment on attachment 62855
Patch

this is a great patch!!! a few minor comments:

WebCore/bindings/scripts/CodeGeneratorJS.pm:226
 +      return &quot;JSCustom$className&quot; if $className eq &quot;VoidCallback&quot;;
nit: &apos;return &quot;JSCustomVoidCallback&quot;&apos; instead of &apos;return &quot;JSCustom$className&quot;&apos;. all other functions that have special cases seem to follow this pattern.

WebCore/bindings/scripts/CodeGeneratorJS.pm:1934
 +                          } elsif ($parameter-&gt;extendedAttributes-&gt;{&quot;Callback&quot;} || $parameter-&gt;extendedAttributes-&gt;{&quot;CallbackFunction&quot;}) {
is the CallbackFunction attribute used anywhere? i couldn&apos;t find a single IDL file that uses it.

WebCore/bindings/scripts/CodeGeneratorJS.pm:1936
 +                              $implIncludes{$callbackClassName . &quot;.h&quot;} = 1;
nit: i think you can do $implIncludes{&quot;$callbackClassName.h&quot;} or &quot;${callbackClassName}.h&quot;

WebCore/bindings/scripts/CodeGeneratorJS.pm:1939
 +                                  push(@implContent, &quot;    if (!exec-&gt;argument($argsIndex).isObject() &amp;&amp; !exec-&gt;argument($argsIndex).isNull()) {\n&quot;);
i think isNull() needs to be replaced with isUndefinedOrNull(). alternatively, i believe you need to check that exec-&gt;argumentCount() &gt; $argsIndex.

WebCore/bindings/scripts/CodeGeneratorJS.pm:1946
 +                              push(@implContent, &quot;        return JSValue::encode(jsUndefined());\n&quot;);
return jsUndefined();

WebCore/bindings/scripts/CodeGeneratorJS.pm:1948
 +                              push(@implContent, &quot;    RefPtr&lt;&quot; . $parameter-&gt;type . &quot;&gt; $name = &quot; . $callbackClassName . &quot;::create(asObject(exec-&gt;argument($argsIndex)), static_cast&lt;JSDOMGlobalObject*&gt;(exec-&gt;lexicalGlobalObject()));\n&quot;);
replace static_cast&lt;JSDOMGlobalObject*&gt;(exec-&gt;lexicalGlobalObject()) with globalObject().

WebCore/bindings/scripts/CodeGeneratorV8.pm:1186
 +          if ($parameter-&gt;extendedAttributes-&gt;{&quot;Callback&quot;} || $parameter-&gt;extendedAttributes-&gt;{&quot;CallbackFunction&quot;}) {
same comment about CallbackFunction.

WebCore/bindings/scripts/CodeGeneratorV8.pm:1188
 +              $implIncludes{$className . &quot;.h&quot;} = 1;
$implIncludes{&quot;$className.h&quot;} = 1;

WebCore/bindings/scripts/CodeGeneratorV8.pm:1191
 +                  push(@implContentDecls, &quot;    if (!args[$paramIndex]-&gt;IsObject())\n&quot;);
need to also check that args.Length() &gt; $paramIndex.

WebCore/bindings/scripts/CodeGeneratorV8.pm:1197
 +              push(@implContentDecls, &quot;    &quot; . GetNativeType($parameter-&gt;type) . &quot; $parameterName = &quot; . $className . &quot;::create(args[$paramIndex]);\n&quot;);
might be clearer to explicitly spell this out as &quot;RefPtr&lt;&quot; . $parameter-&gt;type . &quot;&gt;&quot;.

WebCore/bindings/scripts/CodeGeneratorV8.pm:3258
 +      return &quot;V8Custom$interfaceName&quot; if $interfaceName eq &quot;VoidCallback&quot;;
return &quot;V8CustomVoidCallback&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257933</commentid>
    <comment_count>4</comment_count>
      <attachid>63004</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-07-29 15:38:15 -0700</bug_when>
    <thetext>Created attachment 63004
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257937</commentid>
    <comment_count>5</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-07-29 15:44:42 -0700</bug_when>
    <thetext>Thanks!  Updated the patch.

(In reply to comment #3)
&gt; (From update of attachment 62855 [details])
&gt; this is a great patch!!! a few minor comments:
&gt; 
&gt; WebCore/bindings/scripts/CodeGeneratorJS.pm:226
&gt;  +      return &quot;JSCustom$className&quot; if $className eq &quot;VoidCallback&quot;;
&gt; nit: &apos;return &quot;JSCustomVoidCallback&quot;&apos; instead of &apos;return &quot;JSCustom$className&quot;&apos;. all other functions that have special cases seem to follow this pattern.

Fixed.

&gt; WebCore/bindings/scripts/CodeGeneratorJS.pm:1934
&gt;  +                          } elsif ($parameter-&gt;extendedAttributes-&gt;{&quot;Callback&quot;} || $parameter-&gt;extendedAttributes-&gt;{&quot;CallbackFunction&quot;}) {
&gt; is the CallbackFunction attribute used anywhere? i couldn&apos;t find a single IDL file that uses it.

No, it&apos;s not used anywhere.  I removed the code related to CallbackFunction for the sake of simplicity.

&gt; WebCore/bindings/scripts/CodeGeneratorJS.pm:1936
&gt;  +                              $implIncludes{$callbackClassName . &quot;.h&quot;} = 1;
&gt; nit: i think you can do $implIncludes{&quot;$callbackClassName.h&quot;} or &quot;${callbackClassName}.h&quot;

Fixed.

&gt; WebCore/bindings/scripts/CodeGeneratorJS.pm:1939
&gt;  +                                  push(@implContent, &quot;    if (!exec-&gt;argument($argsIndex).isObject() &amp;&amp; !exec-&gt;argument($argsIndex).isNull()) {\n&quot;);
&gt; i think isNull() needs to be replaced with isUndefinedOrNull(). alternatively, i believe you need to check that exec-&gt;argumentCount() &gt; $argsIndex.

I changed the code to do the exec-&gt;argumentCount() &gt; $argsIndex check.  Did the same in V8 code.

&gt; WebCore/bindings/scripts/CodeGeneratorJS.pm:1946
&gt;  +                              push(@implContent, &quot;        return JSValue::encode(jsUndefined());\n&quot;);
&gt; return jsUndefined();

Fixed.

&gt; WebCore/bindings/scripts/CodeGeneratorJS.pm:1948
&gt;  +                              push(@implContent, &quot;    RefPtr&lt;&quot; . $parameter-&gt;type . &quot;&gt; $name = &quot; . $callbackClassName . &quot;::create(asObject(exec-&gt;argument($argsIndex)), static_cast&lt;JSDOMGlobalObject*&gt;(exec-&gt;lexicalGlobalObject()));\n&quot;);
&gt; replace static_cast&lt;JSDOMGlobalObject*&gt;(exec-&gt;lexicalGlobalObject()) with globalObject().

Fixed.  (Changed to castedThis-&gt;globalObject())

&gt; WebCore/bindings/scripts/CodeGeneratorV8.pm:1186
&gt;  +          if ($parameter-&gt;extendedAttributes-&gt;{&quot;Callback&quot;} || $parameter-&gt;extendedAttributes-&gt;{&quot;CallbackFunction&quot;}) {
&gt; same comment about CallbackFunction.
&gt; WebCore/bindings/scripts/CodeGeneratorV8.pm:1188
&gt;  +              $implIncludes{$className . &quot;.h&quot;} = 1;
&gt; $implIncludes{&quot;$className.h&quot;} = 1;
&gt; WebCore/bindings/scripts/CodeGeneratorV8.pm:1191
&gt;  +                  push(@implContentDecls, &quot;    if (!args[$paramIndex]-&gt;IsObject())\n&quot;);
&gt; need to also check that args.Length() &gt; $paramIndex.
&gt; WebCore/bindings/scripts/CodeGeneratorV8.pm:1197
&gt;  +              push(@implContentDecls, &quot;    &quot; . GetNativeType($parameter-&gt;type) . &quot; $parameterName = &quot; . $className . &quot;::create(args[$paramIndex]);\n&quot;);
&gt; might be clearer to explicitly spell this out as &quot;RefPtr&lt;&quot; . $parameter-&gt;type . &quot;&gt;&quot;.
&gt; WebCore/bindings/scripts/CodeGeneratorV8.pm:3258
&gt;  +      return &quot;V8Custom$interfaceName&quot; if $interfaceName eq &quot;VoidCallback&quot;;
&gt; return &quot;V8CustomVoidCallback&quot;

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257959</commentid>
    <comment_count>6</comment_count>
      <attachid>63004</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-07-29 16:18:35 -0700</bug_when>
    <thetext>Comment on attachment 63004
Patch

r=me, but please address the comments below before landing (sorry i forgot to mention them in the first review).

WebCore/bindings/scripts/CodeGeneratorJS.pm:1939
 +                              push(@implContent, &quot;    if (exec-&gt;argumentCount() &gt; $argsIndex &amp;&amp; !exec-&gt;argument($argsIndex).isNull()) {\n&quot;);
this code works only if the parameter is Optional. i think it should look more like this:

push(@implContent, &quot;    RefPtr&lt;&quot; . $parameter-&gt;type . &quot;&gt; $name;\n&quot;);
if ($parameter-&gt;extendedAttributes-&gt;{&quot;Optional&quot;}) {
    // push the code that you have now
} else {
    push(@implContent, &quot;    if ((exec-&gt;argumentCount() &lt;= $argsIndex) || !exec-&gt;argument($argsIndex).isObject()) {\n&quot;);
    push(@implContent, &quot;        setDOMException(exec, TYPE_MISMATCH_ERR);\n&quot;);
    push(@implContent, &quot;        return jsUndefined();\n&quot;);
    push(@implContent, &quot;    }\n&quot;);
    push(@implContent, &quot;    $name = &quot; . $callbackClassName . &quot;::create(asObject(exec-&gt;argument($argsIndex)), castedThis-&gt;globalObject());\n&quot;);
}

WebCore/bindings/scripts/CodeGeneratorV8.pm:1191
 +              push(@implContentDecls, &quot;    if (args.Length() &gt; $paramIndex &amp;&amp; !isUndefinedOrNull(args[$paramIndex])) {\n&quot;);
same thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258071</commentid>
    <comment_count>7</comment_count>
      <attachid>63032</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-07-29 23:28:46 -0700</bug_when>
    <thetext>Created attachment 63032
Patch for submit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258075</commentid>
    <comment_count>8</comment_count>
      <attachid>63032</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-07-29 23:50:56 -0700</bug_when>
    <thetext>Comment on attachment 63032
Patch for submit

r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258320</commentid>
    <comment_count>9</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-07-30 12:04:42 -0700</bug_when>
    <thetext>Committed r64366: &lt;http://trac.webkit.org/changeset/64366&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62851</attachid>
            <date>2010-07-28 11:35:02 -0700</date>
            <delta_ts>2010-07-28 12:02:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-43130-20100728113501.patch</filename>
            <type>text/plain</type>
            <size>25339</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NWE1MDNiY2JlMWM1MGZmMWY0NzYxMmQ4MmUyMzQ5MWJhMDUyNmZlZS4uY2VkNjgzNzg4MWM3YzA3
MzI2MmJlMzNhOWQxNGZkMTEyNWJmN2VhOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAxMC0wNy0yOCAgS2lu
dWtvIFlhc3VkYSAgPGtpbnVrb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGNhbGxiYWNrIGFyZ3VtZW50cyBzdXBwb3J0
IHRvIGJpbmRpbmcgY29kZSBnZW5lcmF0b3Igc2NyaXB0cworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDMxMzAKKworICAgICAgICBUZXN0czogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JWOC5wbToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2Jq
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0FyZyk6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0Z1bmN0aW9uQXJn
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0
aENhbGxiYWNrQXJnQW5kQ2FsbGJhY2tGdW5jdGlvbkFyZyk6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxi
YWNrQXJnKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9uYWxBcmcpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RPYmouaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VGVzdE9iai5pZGw6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9i
ai5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqSW50ZXJuYWw6Om1ldGhvZFdpdGhDYWxs
YmFja0FyZ0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpJbnRlcm5hbDo6bWV0
aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25BcmdDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXN0T2JqSW50ZXJuYWw6Om1ldGhvZFdpdGhDYWxsYmFja0FyZ0FuZENhbGxiYWNrRnVuY3Rpb25B
cmdDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqSW50ZXJuYWw6Om1ldGhvZFdp
dGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6VGVzdE9iakludGVybmFsOjptZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZ0NhbGxi
YWNrKToKKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpDb25maWd1cmVW
OFRlc3RPYmpUZW1wbGF0ZSk6CisKIDIwMTAtMDctMjcgIEphbWVzIEhhd2tpbnMgIDxqaGF3a2lu
c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVyLgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbSBiL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KaW5kZXggMDVmNTMyYzAz
OThmMjk5N2ZjYWM0OThlNjg4ZWExMzllNDAyYjllZC4uYWVmZGIwOWU3MTUwYTg4N2E0MmQ5MGJh
NmQ1OGJlZTRlZWNmMmY3YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbQorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvckpTLnBtCkBAIC0xOTEzLDcgKzE5MTMsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlv
bgogICAgICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgICAgICBt
eSAkbmFtZSA9ICRwYXJhbWV0ZXItPm5hbWU7Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoJHBhcmFtZXRlci0+dHlwZSBlcSAiWFBhdGhOU1Jlc29s
dmVyIikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIFJlZlB0cjxYUGF0aE5TUmVzb2x2ZXI+IGN1c3RvbVJlc29sdmVyO1xuIik7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgWFBhdGhOU1Jlc29s
dmVyKiByZXNvbHZlciA9IHRvWFBhdGhOU1Jlc29sdmVyKGV4ZWMtPmFyZ3VtZW50KCRhcmdzSW5k
ZXgpKTtcbiIpOwpAQCAtMTkyMyw2ICsxOTIzLDIyIEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0
aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJlc29s
dmVyID0gY3VzdG9tUmVzb2x2ZXIuZ2V0KCk7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB9XG4iKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzaWYgKCRwYXJhbWV0ZXItPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYWxsYmFjayJ9
IHx8ICRwYXJhbWV0ZXItPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYWxsYmFja0Z1bmN0aW9uIn0p
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkanNUeXBlTmFtZSA9ICJKUyIgLiAk
cGFyYW1ldGVyLT50eXBlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICRqc1R5cGVOYW1l
ID0gIkpTQ3VzdG9tVm9pZENhbGxiYWNrIiBpZiAkcGFyYW1ldGVyLT50eXBlIGVxICJWb2lkQ2Fs
bGJhY2siOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7JGpzVHlw
ZU5hbWUgLiAiLmgifSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxJbmNs
dWRlc3siRXhjZXB0aW9uQ29kZS5oIn0gPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICgkcGFyYW1ldGVyLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FsbGJhY2sifSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBpZiAo
IWV4ZWMtPmFyZ3VtZW50KCRhcmdzSW5kZXgpLmlzT2JqZWN0KCkgJiYgIWV4ZWMtPmFyZ3VtZW50
KCRhcmdzSW5kZXgpLmlzTnVsbCgpKSB7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIENhbGxiYWNrIGFy
Z3VtZW50cyB0aGF0IG9ubHkgYWNjZXB0IEZ1bmN0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siPHJ1bnRpbWUvSlNGdW5jdGlvbi5oPiJ9ID0gMTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
aWYgKCFleGVjLT5hcmd1bWVudCgkYXJnc0luZGV4KS5pbmhlcml0cygmSlNGdW5jdGlvbjo6aW5m
bykgJiYgIWV4ZWMtPmFyZ3VtZW50KCRhcmdzSW5kZXgpLmlzTnVsbCgpKSB7XG4iKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01B
VENIX0VSUik7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTtcbiIp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1c
biIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IFJlZlB0cjwiIC4gJHBhcmFtZXRlci0+dHlwZSAuICI+ICRuYW1lID0gIiAuICRqc1R5cGVOYW1l
IC4gIjo6Y3JlYXRlKGFzT2JqZWN0KGV4ZWMtPmFyZ3VtZW50KCRhcmdzSW5kZXgpKSwgc3RhdGlj
X2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpKTtc
biIpOwogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAiIC4gR2V0TmF0aXZlVHlwZUZyb21T
aWduYXR1cmUoJHBhcmFtZXRlcikgLiAiICRuYW1lID0gIiAuIEpTVmFsdWVUb05hdGl2ZSgkcGFy
YW1ldGVyLCAiZXhlYy0+YXJndW1lbnQoJGFyZ3NJbmRleCkiKSAuICI7XG4iKTsKIApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbSBiL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KaW5kZXggYzk2M2UwNDkzNWEx
N2E1OTI3ODNiMWRiMWEyNjdkYTVmZjViYWJhOC4uMzUzZThiYjJjMWJmZDIyYWVmZjMxNWI2MDg3
NzBmNThlMjJkNjRmYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JWOC5wbQorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
clY4LnBtCkBAIC0xMTgzLDYgKzExODMsMjMgQEAgRU5ECiAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudERlY2xzLCAiICAgIH1cbiIpOwogICAgICAgICB9CiAKKyAgICAgICAgaWYgKCRwYXJh
bWV0ZXItPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYWxsYmFjayJ9IHx8ICRwYXJhbWV0ZXItPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJDYWxsYmFja0Z1bmN0aW9uIn0pIHsKKyAgICAgICAgICAgIG15
ICR2OFR5cGVOYW1lID0gIlY4IiAuICRwYXJhbWV0ZXItPnR5cGU7CisgICAgICAgICAgICAkdjhU
eXBlTmFtZSA9ICJWOEN1c3RvbVZvaWRDYWxsYmFjayIgaWYgJHBhcmFtZXRlci0+dHlwZSBlcSAi
Vm9pZENhbGxiYWNrIjsKKyAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7JHY4VHlwZU5hbWUgLiAi
LmgifSA9IDE7CisgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJFeGNlcHRpb25Db2RlLmgifSA9
IDE7CisgICAgICAgICAgICBpZiAoJHBhcmFtZXRlci0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNh
bGxiYWNrIn0pIHsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAg
IGlmICghYXJnc1skcGFyYW1JbmRleF0tPklzT2JqZWN0KCkpXG4iKTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgIyBDYWxsYmFjayBhcmd1bWVudHMgdGhhdCBvbmx5IGFj
Y2VwdCBGdW5jdGlvbnMuCisgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywg
IiAgICBpZiAoIWFyZ3NbJHBhcmFtSW5kZXhdLT5Jc0Z1bmN0aW9uKCkpXG4iKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgICAgIHJldHVy
biB0aHJvd0Vycm9yKFRZUEVfTUlTTUFUQ0hfRVJSKTtcbiIpOworICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnREZWNscywgIiAgICAiIC4gR2V0TmF0aXZlVHlwZSgkcGFyYW1ldGVyLT50eXBl
KSAuICIgJHBhcmFtZXRlck5hbWUgPSAiIC4gJHY4VHlwZU5hbWUgLiAiOjpjcmVhdGUoYXJnc1sk
cGFyYW1JbmRleF0pO1xuIik7CisgICAgICAgICAgICAkcGFyYW1JbmRleCsrOworICAgICAgICAg
ICAgbmV4dDsKKyAgICAgICAgfQorCiAgICAgICAgIGlmICgkcGFyYW1ldGVyLT50eXBlIGVxICJT
ZXJpYWxpemVkU2NyaXB0VmFsdWUiKSB7CiAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJTZXJp
YWxpemVkU2NyaXB0VmFsdWUuaCJ9ID0gMTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
RGVjbHMsICIgICAgYm9vbCAke3BhcmFtZXRlck5hbWV9RGlkVGhyb3cgPSBmYWxzZTtcbiIpOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNw
cCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKaW5kZXgg
NWFhNTRkYTAwMzY1Y2RjYzI5OTA2MTVkMTdmMDlkM2FhZDdiN2UwMC4uYTEzN2VhMTVmYTY3M2Iw
OWZkYWQxMDgzMTZlMGZmNThlNTIwOGM3ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCkBAIC0yMSwxMCArMjEsMTIgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJKU1Rlc3RPYmouaCIKIAorI2luY2x1ZGUgIkV4Y2VwdGlvbkNv
ZGUuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJJREJCaW5kaW5nVXRpbGl0
aWVzLmgiCiAjaW5jbHVkZSAiSURCS2V5LmgiCiAjaW5jbHVkZSAiSlNFdmVudExpc3RlbmVyLmgi
CisjaW5jbHVkZSAiSlNUZXN0Q2FsbGJhY2suaCIKICNpbmNsdWRlICJKU1Rlc3RPYmouaCIKICNp
bmNsdWRlICJKU2xvZy5oIgogI2luY2x1ZGUgIktVUkwuaCIKQEAgLTMyLDYgKzM0LDcgQEAKICNp
bmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlICJUZXN0T2JqLmgiCiAj
aW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNGdW5jdGlvbi5o
PgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNOdW1iZXJDZWxsLmg+CiAjaW5jbHVkZSA8cnVudGltZS9K
U1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KQEAgLTE3Miw3ICsxNzUsNyBAQCBi
b29sIEpTVGVzdE9iakNvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBJZGVudAogI2RlZmluZSBUSFVOS19HRU5FUkFUT1IoZ2VuZXJhdG9y
KQogI2VuZGlmCiAKLXN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RPYmpQcm90b3R5
cGVUYWJsZVZhbHVlc1s0Ml0gPQorc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdE9i
alByb3RvdHlwZVRhYmxlVmFsdWVzWzQ3XSA9CiB7CiAgICAgeyAiQ09OU1RfVkFMVUVfMCIsIERv
bnREZWxldGUgfCBSZWFkT25seSwgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6
R2V0VmFsdWVGdW5jPihqc1Rlc3RPYmpDT05TVF9WQUxVRV8wKSwgKGludHB0cl90KTAgVEhVTktf
R0VORVJBVE9SKDApIH0sCiAgICAgeyAiQ09OU1RfVkFMVUVfMSIsIERvbnREZWxldGUgfCBSZWFk
T25seSwgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihq
c1Rlc3RPYmpDT05TVF9WQUxVRV8xKSwgKGludHB0cl90KTAgVEhVTktfR0VORVJBVE9SKDApIH0s
CkBAIC0yMTQsMTIgKzIxNywxNyBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0
T2JqUHJvdG90eXBlVGFibGVWYWx1ZXNbNDJdID0KICAgICB7ICJtZXRob2RXaXRoT3B0aW9uYWxB
cmciLCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVG
dW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBcmcp
LCAoaW50cHRyX3QpMSBUSFVOS19HRU5FUkFUT1IoMCkgfSwKICAgICB7ICJtZXRob2RXaXRoTm9u
T3B0aW9uYWxBcmdBbmRPcHRpb25hbEFyZyIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0
cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnKSwgKGludHB0cl90KTIgVEhV
TktfR0VORVJBVE9SKDApIH0sCiAgICAgeyAibWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdv
T3B0aW9uYWxBcmdzIiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nh
c3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5v
bk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzKSwgKGludHB0cl90KTMgVEhVTktfR0VORVJB
VE9SKDApIH0sCisgICAgeyAibWV0aG9kV2l0aENhbGxiYWNrQXJnIiwgRG9udERlbGV0ZSB8IEZ1
bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrQXJnKSwgKGludHB0cl90KTEgVEhVTktf
R0VORVJBVE9SKDApIH0sCisgICAgeyAibWV0aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25BcmciLCBE
b250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlv
bj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tGdW5jdGlvbkFy
ZyksIChpbnRwdHJfdCkxIFRIVU5LX0dFTkVSQVRPUigwKSB9LAorICAgIHsgIm1ldGhvZFdpdGhD
YWxsYmFja0FyZ0FuZENhbGxiYWNrRnVuY3Rpb25BcmciLCBEb250RGVsZXRlIHwgRnVuY3Rpb24s
IChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0Z1bmN0aW9uQXJnKSwgKGlu
dHB0cl90KTIgVEhVTktfR0VORVJBVE9SKDApIH0sCisgICAgeyAibWV0aG9kV2l0aE5vbkNhbGxi
YWNrQXJnQW5kQ2FsbGJhY2tBcmciLCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClz
dGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0FyZyksIChpbnRwdHJfdCkyIFRIVU5LX0dF
TkVSQVRPUigwKSB9LAorICAgIHsgIm1ldGhvZFdpdGhDYWxsYmFja0FuZE9wdGlvbmFsQXJnIiwg
RG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rp
b24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9u
YWxBcmcpLCAoaW50cHRyX3QpMSBUSFVOS19HRU5FUkFUT1IoMCkgfSwKICAgICB7ICJvdmVybG9h
ZGVkTWV0aG9kIiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8
TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhv
ZCksIChpbnRwdHJfdCkyIFRIVU5LX0dFTkVSQVRPUigwKSB9LAogICAgIHsgMCwgMCwgMCwgMCBU
SFVOS19HRU5FUkFUT1IoMCkgfQogfTsKIAogI3VuZGVmIFRIVU5LX0dFTkVSQVRPUgotc3RhdGlj
IEpTQ19DT05TVF9IQVNIVEFCTEUgSGFzaFRhYmxlIEpTVGVzdE9ialByb3RvdHlwZVRhYmxlID0g
eyAxMzQsIDEyNywgSlNUZXN0T2JqUHJvdG90eXBlVGFibGVWYWx1ZXMsIDAgfTsKK3N0YXRpYyBK
U0NfQ09OU1RfSEFTSFRBQkxFIEhhc2hUYWJsZSBKU1Rlc3RPYmpQcm90b3R5cGVUYWJsZSA9IHsg
MTM2LCAxMjcsIEpTVGVzdE9ialByb3RvdHlwZVRhYmxlVmFsdWVzLCAwIH07CiBjb25zdCBDbGFz
c0luZm8gSlNUZXN0T2JqUHJvdG90eXBlOjpzX2luZm8gPSB7ICJUZXN0T2JqUHJvdG90eXBlIiwg
MCwgJkpTVGVzdE9ialByb3RvdHlwZVRhYmxlLCAwIH07CiAKIEpTT2JqZWN0KiBKU1Rlc3RPYmpQ
cm90b3R5cGU6OnNlbGYoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KQpAQCAtMTE4OSw2ICsxMTk3LDEwNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQQogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKK0VuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2Fs
bGJhY2tBcmcoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhl
Yy0+aG9zdFRoaXNWYWx1ZSgpOworICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZKU1Rlc3RP
Ymo6OnNfaW5mbykpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOworICAg
IEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0
KHRoaXNWYWx1ZSkpOworICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihj
YXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIGlmICghZXhlYy0+YXJndW1lbnQoMCkuaXNPYmplY3Qo
KSAmJiAhZXhlYy0+YXJndW1lbnQoMCkuaXNOdWxsKCkpIHsKKyAgICAgICAgc2V0RE9NRXhjZXB0
aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICB9CisgICAgUmVmUHRyPFRlc3RDYWxsYmFjaz4gY2Fs
bGJhY2sgPSBKU1Rlc3RDYWxsYmFjazo6Y3JlYXRlKGFzT2JqZWN0KGV4ZWMtPmFyZ3VtZW50KDAp
KSwgc3RhdGljX2Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCkpKTsKKworICAgIGltcC0+bWV0aG9kV2l0aENhbGxiYWNrQXJnKGNhbGxiYWNrKTsKKyAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCitFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENh
bGxiYWNrRnVuY3Rpb25BcmcoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTVmFsdWUgdGhpc1Zh
bHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOworICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRz
KCZKU1Rlc3RPYmo6OnNfaW5mbykpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4
ZWMpOworICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+
KGFzT2JqZWN0KHRoaXNWYWx1ZSkpOworICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRl
c3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIGlmICghZXhlYy0+YXJndW1lbnQoMCku
aW5oZXJpdHMoJkpTRnVuY3Rpb246OmluZm8pICYmICFleGVjLT5hcmd1bWVudCgwKS5pc051bGwo
KSkgeworICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpOwor
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIH0KKyAg
ICBSZWZQdHI8VGVzdENhbGxiYWNrPiBjYWxsYmFjayA9IEpTVGVzdENhbGxiYWNrOjpjcmVhdGUo
YXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMCkpLCBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVj
dCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSkpOworCisgICAgaW1wLT5tZXRob2RXaXRo
Q2FsbGJhY2tGdW5jdGlvbkFyZyhjYWxsYmFjayk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0FyZ0FuZENhbGxiYWNrRnVu
Y3Rpb25BcmcoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhl
Yy0+aG9zdFRoaXNWYWx1ZSgpOworICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZKU1Rlc3RP
Ymo6OnNfaW5mbykpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOworICAg
IEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0
KHRoaXNWYWx1ZSkpOworICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihj
YXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIGlmICghZXhlYy0+YXJndW1lbnQoMCkuaXNPYmplY3Qo
KSAmJiAhZXhlYy0+YXJndW1lbnQoMCkuaXNOdWxsKCkpIHsKKyAgICAgICAgc2V0RE9NRXhjZXB0
aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICB9CisgICAgUmVmUHRyPFRlc3RDYWxsYmFjaz4gY2Fs
bGJhY2sxID0gSlNUZXN0Q2FsbGJhY2s6OmNyZWF0ZShhc09iamVjdChleGVjLT5hcmd1bWVudCgw
KSksIHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpKSk7CisgICAgaWYgKCFleGVjLT5hcmd1bWVudCgxKS5pbmhlcml0cygmSlNGdW5jdGlv
bjo6aW5mbykgJiYgIWV4ZWMtPmFyZ3VtZW50KDEpLmlzTnVsbCgpKSB7CisgICAgICAgIHNldERP
TUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7CisgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgfQorICAgIFJlZlB0cjxUZXN0Q2FsbGJh
Y2s+IGNhbGxiYWNrMiA9IEpTVGVzdENhbGxiYWNrOjpjcmVhdGUoYXNPYmplY3QoZXhlYy0+YXJn
dW1lbnQoMSkpLCBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKSkpOworCisgICAgaW1wLT5tZXRob2RXaXRoQ2FsbGJhY2tBcmdBbmRDYWxs
YmFja0Z1bmN0aW9uQXJnKGNhbGxiYWNrMSwgY2FsbGJhY2syKTsKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5k
Q2FsbGJhY2tBcmcoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0g
ZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOworICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZKU1Rl
c3RPYmo6OnNfaW5mbykpCisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwor
ICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGFzT2Jq
ZWN0KHRoaXNWYWx1ZSkpOworICAgIFRlc3RPYmoqIGltcCA9IHN0YXRpY19jYXN0PFRlc3RPYmoq
PihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIGludCBub25DYWxsYmFjayA9IGV4ZWMtPmFyZ3Vt
ZW50KDApLnRvSW50MzIoZXhlYyk7CisgICAgaWYgKCFleGVjLT5hcmd1bWVudCgxKS5pc09iamVj
dCgpICYmICFleGVjLT5hcmd1bWVudCgxKS5pc051bGwoKSkgeworICAgICAgICBzZXRET01FeGNl
cHRpb24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIH0KKyAgICBSZWZQdHI8VGVzdENhbGxiYWNrPiBj
YWxsYmFjayA9IEpTVGVzdENhbGxiYWNrOjpjcmVhdGUoYXNPYmplY3QoZXhlYy0+YXJndW1lbnQo
MSkpLCBzdGF0aWNfY2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKSkpOworCisgICAgaW1wLT5tZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFj
a0FyZyhub25DYWxsYmFjaywgY2FsbGJhY2spOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZyhFeGVj
U3RhdGUqIGV4ZWMpCit7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1Zh
bHVlKCk7CisgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdE9iajo6c19pbmZvKSkK
KyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CisgICAgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7
CisgICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmlt
cGwoKSk7CisKKyAgICBpbnQgYXJnc0NvdW50ID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOworICAg
IGlmIChhcmdzQ291bnQgPCAxKSB7CisgICAgICAgIGltcC0+bWV0aG9kV2l0aENhbGxiYWNrQW5k
T3B0aW9uYWxBcmcoKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKTsKKyAgICB9CisKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDApLmlzT2JqZWN0KCkgJiYg
IWV4ZWMtPmFyZ3VtZW50KDApLmlzTnVsbCgpKSB7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihl
eGVjLCBUWVBFX01JU01BVENIX0VSUik7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CisgICAgfQorICAgIFJlZlB0cjxUZXN0Q2FsbGJhY2s+IGNhbGxiYWNr
ID0gSlNUZXN0Q2FsbGJhY2s6OmNyZWF0ZShhc09iamVjdChleGVjLT5hcmd1bWVudCgwKSksIHN0
YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
KSk7CisKKyAgICBpbXAtPm1ldGhvZFdpdGhDYWxsYmFja0FuZE9wdGlvbmFsQXJnKGNhbGxiYWNr
KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCiBzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlv
bk92ZXJsb2FkZWRNZXRob2QxKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBKU1ZhbHVlIHRoaXNW
YWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0T2JqLmgKaW5kZXggMDY0ODUyNjQ3M2M0YWZjYzFmMTE1MWQ1MmFkZGZj
MzIxZmYxZjdiOC4uMzNlMmVhYzI5ZmI1NTlkYzIyZjJlNmI5NjZlMWVmOTg5OTkwOWMwMiAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgKKysr
IGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgKQEAgLTExNSw2
ICsxMTUsMTEgQEAgSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkMKIEpTQzo6RW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25h
bEFyZyhKU0M6OkV4ZWNTdGF0ZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0
aW9uYWxBcmcoSlNDOjpFeGVjU3RhdGUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0Fu
ZFR3b09wdGlvbmFsQXJncyhKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNr
QXJnKEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tGdW5jdGlvbkFyZyhK
U0M6OkV4ZWNTdGF0ZSopOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVz
dE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrQXJnQW5kQ2FsbGJhY2tGdW5j
dGlvbkFyZyhKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5k
Q2FsbGJhY2tBcmcoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0FuZE9w
dGlvbmFsQXJnKEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kKEpTQzo6RXhl
Y1N0YXRlKik7CiAvLyBBdHRyaWJ1dGVzCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VGVzdE9iai5pZGwKaW5kZXggYTVkYWEyNGE1OWI5NTNiZmNjYzcwNGQzZjAwZmE2MzYwZThkM2U0
Mi4uYjFmMDBhMmE5NjQ0YjZjOWYxOTBkNmRhOGMwNmRlZGExOWI2NTY5OCAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKKysrIGIvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKQEAgLTEwOSw2ICsxMDksMTUgQEAgbW9k
dWxlIHRlc3QgewogICAgICAgICB2b2lkICAgIG1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZE9w
dGlvbmFsQXJnKGluIGxvbmcgbm9uT3B0LCBpbiBbT3B0aW9uYWxdIGxvbmcgb3B0KTsKICAgICAg
ICAgdm9pZCAgICBtZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRUd29PcHRpb25hbEFyZ3MoaW4g
bG9uZyBub25PcHQsIGluIFtPcHRpb25hbF0gbG9uZyBvcHQxLCBpbiBsb25nIG9wdDIpOwogCisj
aWYgZGVmaW5lZChURVNUSU5HX1Y4KSB8fCBkZWZpbmVkKFRFU1RJTkdfSlMpCisgICAgICAgIC8v
ICdDYWxsYmFjaycgZXh0ZW5kZWQgYXR0cmlidXRlCisgICAgICAgIHZvaWQgICAgbWV0aG9kV2l0
aENhbGxiYWNrQXJnKGluIFtDYWxsYmFja10gVGVzdENhbGxiYWNrIGNhbGxiYWNrKTsKKyAgICAg
ICAgdm9pZCAgICBtZXRob2RXaXRoQ2FsbGJhY2tGdW5jdGlvbkFyZyhpbiBbQ2FsbGJhY2tGdW5j
dGlvbl0gVGVzdENhbGxiYWNrIGNhbGxiYWNrKTsKKyAgICAgICAgdm9pZCAgICBtZXRob2RXaXRo
Q2FsbGJhY2tBcmdBbmRDYWxsYmFja0Z1bmN0aW9uQXJnKGluIFtDYWxsYmFja10gVGVzdENhbGxi
YWNrIGNhbGxiYWNrMSwgaW4gW0NhbGxiYWNrRnVuY3Rpb25dIFRlc3RDYWxsYmFjayBjYWxsYmFj
azIpOworICAgICAgICB2b2lkICAgIG1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNr
QXJnKGluIGxvbmcgbm9uQ2FsbGJhY2ssIGluIFtDYWxsYmFja10gVGVzdENhbGxiYWNrIGNhbGxi
YWNrKTsKKyAgICAgICAgdm9pZCAgICBtZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZyhp
biBbQ2FsbGJhY2ssIE9wdGlvbmFsXSBUZXN0Q2FsbGJhY2sgY2FsbGJhY2spOworI2VuZGlmCisK
ICAgICAgICAgLy8gJ0NvbnZlcnRTY3JpcHRTdHJpbmcnIGV4dGVuZGVkIGF0dHJpYnV0ZQogICAg
ICAgICByZWFkb25seSBhdHRyaWJ1dGUgW0NvbnZlcnRTY3JpcHRTdHJpbmddIERPTVN0cmluZyBz
Y3JpcHRTdHJpbmdBdHRyOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RPYmouY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0T2JqLmNwcAppbmRleCAwOWQ5OWY4OTFlN2NiZWFhMjhjYzY2YzRhNjk2NDgwNGI1MzNm
MmRiLi5kYTllNjYwYmFhZWExM2M3MjQ2YmY3MmJiY2U4YTQxNWRmN2FkMzc5IDEwMDY0NAotLS0g
YS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCisrKyBiL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKQEAgLTMzLDYgKzMz
LDcgQEAKICNpbmNsdWRlICJWOERPTVdyYXBwZXIuaCIKICNpbmNsdWRlICJWOElzb2xhdGVkQ29u
dGV4dC5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKKyNpbmNsdWRlICJWOFRlc3RDYWxsYmFjay5o
IgogI2luY2x1ZGUgIlY4bG9nLmgiCiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CkBAIC04NjIsNiArODYzLDY5IEBAIHN0YXRpYyB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gbWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzQ2Fs
bGJhY2soCiAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOwogfQogCitzdGF0aWMg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IG1ldGhvZFdpdGhDYWxsYmFja0FyZ0NhbGxiYWNrKGNvbnN0
IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5tZXRo
b2RXaXRoQ2FsbGJhY2tBcmciKTsKKyAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0
aXZlKGFyZ3MuSG9sZGVyKCkpOworICAgIGlmICghYXJnc1swXS0+SXNPYmplY3QoKSkKKyAgICAg
ICAgcmV0dXJuIHRocm93RXJyb3IoVFlQRV9NSVNNQVRDSF9FUlIpOworICAgIFJlZlB0cjxUZXN0
Q2FsbGJhY2s+IGNhbGxiYWNrID0gVjhUZXN0Q2FsbGJhY2s6OmNyZWF0ZShhcmdzWzBdKTsKKyAg
ICBpbXAtPm1ldGhvZFdpdGhDYWxsYmFja0FyZyhjYWxsYmFjayk7CisgICAgcmV0dXJuIHY4OjpI
YW5kbGU8djg6OlZhbHVlPigpOworfQorCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG1l
dGhvZFdpdGhDYWxsYmFja0Z1bmN0aW9uQXJnQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYg
YXJncykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLm1ldGhvZFdpdGhDYWxsYmFja0Z1
bmN0aW9uQXJnIik7CisgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdz
LkhvbGRlcigpKTsKKyAgICBpZiAoIWFyZ3NbMF0tPklzRnVuY3Rpb24oKSkKKyAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoVFlQRV9NSVNNQVRDSF9FUlIpOworICAgIFJlZlB0cjxUZXN0Q2FsbGJh
Y2s+IGNhbGxiYWNrID0gVjhUZXN0Q2FsbGJhY2s6OmNyZWF0ZShhcmdzWzBdKTsKKyAgICBpbXAt
Pm1ldGhvZFdpdGhDYWxsYmFja0Z1bmN0aW9uQXJnKGNhbGxiYWNrKTsKKyAgICByZXR1cm4gdjg6
OkhhbmRsZTx2ODo6VmFsdWU+KCk7Cit9CisKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
bWV0aG9kV2l0aENhbGxiYWNrQXJnQW5kQ2FsbGJhY2tGdW5jdGlvbkFyZ0NhbGxiYWNrKGNvbnN0
IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5tZXRo
b2RXaXRoQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0Z1bmN0aW9uQXJnIik7CisgICAgVGVzdE9iaiog
aW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKKyAgICBpZiAoIWFyZ3Nb
MF0tPklzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFRZUEVfTUlTTUFUQ0hf
RVJSKTsKKyAgICBSZWZQdHI8VGVzdENhbGxiYWNrPiBjYWxsYmFjazEgPSBWOFRlc3RDYWxsYmFj
azo6Y3JlYXRlKGFyZ3NbMF0pOworICAgIGlmICghYXJnc1sxXS0+SXNGdW5jdGlvbigpKQorICAg
ICAgICByZXR1cm4gdGhyb3dFcnJvcihUWVBFX01JU01BVENIX0VSUik7CisgICAgUmVmUHRyPFRl
c3RDYWxsYmFjaz4gY2FsbGJhY2syID0gVjhUZXN0Q2FsbGJhY2s6OmNyZWF0ZShhcmdzWzFdKTsK
KyAgICBpbXAtPm1ldGhvZFdpdGhDYWxsYmFja0FyZ0FuZENhbGxiYWNrRnVuY3Rpb25BcmcoY2Fs
bGJhY2sxLCBjYWxsYmFjazIpOworICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsK
K30KKworc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBtZXRob2RXaXRoTm9uQ2FsbGJhY2tB
cmdBbmRDYWxsYmFja0FyZ0NhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7Cisg
ICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5tZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxs
YmFja0FyZyIpOworICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJncy5I
b2xkZXIoKSk7CisgICAgaW50IG5vbkNhbGxiYWNrID0gdG9JbnQzMihhcmdzWzBdKTsKKyAgICBp
ZiAoIWFyZ3NbMV0tPklzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFRZUEVf
TUlTTUFUQ0hfRVJSKTsKKyAgICBSZWZQdHI8VGVzdENhbGxiYWNrPiBjYWxsYmFjayA9IFY4VGVz
dENhbGxiYWNrOjpjcmVhdGUoYXJnc1sxXSk7CisgICAgaW1wLT5tZXRob2RXaXRoTm9uQ2FsbGJh
Y2tBcmdBbmRDYWxsYmFja0FyZyhub25DYWxsYmFjaywgY2FsbGJhY2spOworICAgIHJldHVybiB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKK30KKworc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBtZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZ0NhbGxiYWNrKGNvbnN0IHY4OjpBcmd1
bWVudHMmIGFyZ3MpCit7CisgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5tZXRob2RXaXRoQ2Fs
bGJhY2tBbmRPcHRpb25hbEFyZyIpOworICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9O
YXRpdmUoYXJncy5Ib2xkZXIoKSk7CisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPD0gMCkgeworICAg
ICAgICBpbXAtPm1ldGhvZFdpdGhDYWxsYmFja0FuZE9wdGlvbmFsQXJnKCk7CisgICAgICAgIHJl
dHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKKyAgICB9CisgICAgaWYgKCFhcmdzWzBdLT5J
c09iamVjdCgpKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihUWVBFX01JU01BVENIX0VSUik7
CisgICAgUmVmUHRyPFRlc3RDYWxsYmFjaz4gY2FsbGJhY2sgPSBWOFRlc3RDYWxsYmFjazo6Y3Jl
YXRlKGFyZ3NbMF0pOworICAgIGltcC0+bWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9uYWxBcmco
Y2FsbGJhY2spOworICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKK30KKwogc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBvdmVybG9hZGVkTWV0aG9kMUNhbGxiYWNrKGNvbnN0
IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5vdmVy
bG9hZGVkTWV0aG9kMSIpOwpAQCAtMTAxMyw2ICsxMDc3LDcgQEAgc3RhdGljIGNvbnN0IEJhdGNo
ZWRDYWxsYmFjayBUZXN0T2JqQ2FsbGJhY2tzW10gPSB7CiAgICAgeyJtZXRob2RXaXRoT3B0aW9u
YWxBcmciLCBUZXN0T2JqSW50ZXJuYWw6Om1ldGhvZFdpdGhPcHRpb25hbEFyZ0NhbGxiYWNrfSwK
ICAgICB7Im1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnIiwgVGVzdE9iaklu
dGVybmFsOjptZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25hbEFyZ0NhbGxiYWNrfSwK
ICAgICB7Im1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJncyIsIFRlc3RP
YmpJbnRlcm5hbDo6bWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzQ2Fs
bGJhY2t9LAorICAgIHsibWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9uYWxBcmciLCBUZXN0T2Jq
SW50ZXJuYWw6Om1ldGhvZFdpdGhDYWxsYmFja0FuZE9wdGlvbmFsQXJnQ2FsbGJhY2t9LAogICAg
IHsib3ZlcmxvYWRlZE1ldGhvZCIsIFRlc3RPYmpJbnRlcm5hbDo6b3ZlcmxvYWRlZE1ldGhvZENh
bGxiYWNrfSwKIH07CiBzdGF0aWMgY29uc3QgQmF0Y2hlZENvbnN0YW50IFRlc3RPYmpDb25zdHNb
XSA9IHsKQEAgLTEwODUsNiArMTE1MCwzMCBAQCBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1
bmN0aW9uVGVtcGxhdGU+IENvbmZpZ3VyZVY4VGVzdE9ialRlbXBsYXRlKHY4OjpQZXJzaQogICAg
IHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGN1c3RvbUFyZ3NBbmRFeGNlcHRpb25B
cmd2W2N1c3RvbUFyZ3NBbmRFeGNlcHRpb25BcmdjXSA9IHsgVjhsb2c6OkdldFJhd1RlbXBsYXRl
KCkgfTsKICAgICB2ODo6SGFuZGxlPHY4OjpTaWduYXR1cmU+IGN1c3RvbUFyZ3NBbmRFeGNlcHRp
b25TaWduYXR1cmUgPSB2ODo6U2lnbmF0dXJlOjpOZXcoZGVzYywgY3VzdG9tQXJnc0FuZEV4Y2Vw
dGlvbkFyZ2MsIGN1c3RvbUFyZ3NBbmRFeGNlcHRpb25Bcmd2KTsKICAgICBwcm90by0+U2V0KHY4
OjpTdHJpbmc6Ok5ldygiY3VzdG9tQXJnc0FuZEV4Y2VwdGlvbiIpLCB2ODo6RnVuY3Rpb25UZW1w
bGF0ZTo6TmV3KFRlc3RPYmpJbnRlcm5hbDo6Y3VzdG9tQXJnc0FuZEV4Y2VwdGlvbkNhbGxiYWNr
LCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKSwgY3VzdG9tQXJnc0FuZEV4Y2VwdGlvblNpZ25hdHVy
ZSkpOworCisgICAgLy8gQ3VzdG9tIFNpZ25hdHVyZSAnbWV0aG9kV2l0aENhbGxiYWNrQXJnJwor
ICAgIGNvbnN0IGludCBtZXRob2RXaXRoQ2FsbGJhY2tBcmdBcmdjID0gMTsKKyAgICB2ODo6SGFu
ZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRlPiBtZXRob2RXaXRoQ2FsbGJhY2tBcmdBcmd2W21ldGhv
ZFdpdGhDYWxsYmFja0FyZ0FyZ2NdID0geyBWOFRlc3RDYWxsYmFjazo6R2V0UmF3VGVtcGxhdGUo
KSB9OworICAgIHY4OjpIYW5kbGU8djg6OlNpZ25hdHVyZT4gbWV0aG9kV2l0aENhbGxiYWNrQXJn
U2lnbmF0dXJlID0gdjg6OlNpZ25hdHVyZTo6TmV3KGRlc2MsIG1ldGhvZFdpdGhDYWxsYmFja0Fy
Z0FyZ2MsIG1ldGhvZFdpdGhDYWxsYmFja0FyZ0FyZ3YpOworICAgIHByb3RvLT5TZXQodjg6OlN0
cmluZzo6TmV3KCJtZXRob2RXaXRoQ2FsbGJhY2tBcmciKSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6
Ok5ldyhUZXN0T2JqSW50ZXJuYWw6Om1ldGhvZFdpdGhDYWxsYmFja0FyZ0NhbGxiYWNrLCB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4oKSwgbWV0aG9kV2l0aENhbGxiYWNrQXJnU2lnbmF0dXJlKSk7CisK
KyAgICAvLyBDdXN0b20gU2lnbmF0dXJlICdtZXRob2RXaXRoQ2FsbGJhY2tGdW5jdGlvbkFyZycK
KyAgICBjb25zdCBpbnQgbWV0aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25BcmdBcmdjID0gMTsKKyAg
ICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRlPiBtZXRob2RXaXRoQ2FsbGJhY2tGdW5j
dGlvbkFyZ0FyZ3ZbbWV0aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25BcmdBcmdjXSA9IHsgVjhUZXN0
Q2FsbGJhY2s6OkdldFJhd1RlbXBsYXRlKCkgfTsKKyAgICB2ODo6SGFuZGxlPHY4OjpTaWduYXR1
cmU+IG1ldGhvZFdpdGhDYWxsYmFja0Z1bmN0aW9uQXJnU2lnbmF0dXJlID0gdjg6OlNpZ25hdHVy
ZTo6TmV3KGRlc2MsIG1ldGhvZFdpdGhDYWxsYmFja0Z1bmN0aW9uQXJnQXJnYywgbWV0aG9kV2l0
aENhbGxiYWNrRnVuY3Rpb25BcmdBcmd2KTsKKyAgICBwcm90by0+U2V0KHY4OjpTdHJpbmc6Ok5l
dygibWV0aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25BcmciKSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6
Ok5ldyhUZXN0T2JqSW50ZXJuYWw6Om1ldGhvZFdpdGhDYWxsYmFja0Z1bmN0aW9uQXJnQ2FsbGJh
Y2ssIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpLCBtZXRob2RXaXRoQ2FsbGJhY2tGdW5jdGlvbkFy
Z1NpZ25hdHVyZSkpOworCisgICAgLy8gQ3VzdG9tIFNpZ25hdHVyZSAnbWV0aG9kV2l0aENhbGxi
YWNrQXJnQW5kQ2FsbGJhY2tGdW5jdGlvbkFyZycKKyAgICBjb25zdCBpbnQgbWV0aG9kV2l0aENh
bGxiYWNrQXJnQW5kQ2FsbGJhY2tGdW5jdGlvbkFyZ0FyZ2MgPSAyOworICAgIHY4OjpIYW5kbGU8
djg6OkZ1bmN0aW9uVGVtcGxhdGU+IG1ldGhvZFdpdGhDYWxsYmFja0FyZ0FuZENhbGxiYWNrRnVu
Y3Rpb25BcmdBcmd2W21ldGhvZFdpdGhDYWxsYmFja0FyZ0FuZENhbGxiYWNrRnVuY3Rpb25BcmdB
cmdjXSA9IHsgVjhUZXN0Q2FsbGJhY2s6OkdldFJhd1RlbXBsYXRlKCksIFY4VGVzdENhbGxiYWNr
OjpHZXRSYXdUZW1wbGF0ZSgpIH07CisgICAgdjg6OkhhbmRsZTx2ODo6U2lnbmF0dXJlPiBtZXRo
b2RXaXRoQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0Z1bmN0aW9uQXJnU2lnbmF0dXJlID0gdjg6OlNp
Z25hdHVyZTo6TmV3KGRlc2MsIG1ldGhvZFdpdGhDYWxsYmFja0FyZ0FuZENhbGxiYWNrRnVuY3Rp
b25BcmdBcmdjLCBtZXRob2RXaXRoQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0Z1bmN0aW9uQXJnQXJn
dik7CisgICAgcHJvdG8tPlNldCh2ODo6U3RyaW5nOjpOZXcoIm1ldGhvZFdpdGhDYWxsYmFja0Fy
Z0FuZENhbGxiYWNrRnVuY3Rpb25BcmciKSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhUZXN0
T2JqSW50ZXJuYWw6Om1ldGhvZFdpdGhDYWxsYmFja0FyZ0FuZENhbGxiYWNrRnVuY3Rpb25BcmdD
YWxsYmFjaywgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCksIG1ldGhvZFdpdGhDYWxsYmFja0FyZ0Fu
ZENhbGxiYWNrRnVuY3Rpb25BcmdTaWduYXR1cmUpKTsKKworICAgIC8vIEN1c3RvbSBTaWduYXR1
cmUgJ21ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnJworICAgIGNvbnN0IGlu
dCBtZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0FyZ0FyZ2MgPSAyOworICAgIHY4
OjpIYW5kbGU8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IG1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0Fu
ZENhbGxiYWNrQXJnQXJndlttZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0FyZ0Fy
Z2NdID0geyB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRlPigpLCBWOFRlc3RDYWxsYmFj
azo6R2V0UmF3VGVtcGxhdGUoKSB9OworICAgIHY4OjpIYW5kbGU8djg6OlNpZ25hdHVyZT4gbWV0
aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tBcmdTaWduYXR1cmUgPSB2ODo6U2lnbmF0
dXJlOjpOZXcoZGVzYywgbWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tBcmdBcmdj
LCBtZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0FyZ0FyZ3YpOworICAgIHByb3Rv
LT5TZXQodjg6OlN0cmluZzo6TmV3KCJtZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFj
a0FyZyIpLCB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KFRlc3RPYmpJbnRlcm5hbDo6bWV0aG9k
V2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tBcmdDYWxsYmFjaywgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+KCksIG1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnU2lnbmF0dXJl
KSk7CiAgICAgYmF0Y2hDb25maWd1cmVDb25zdGFudHMoZGVzYywgcHJvdG8sIFRlc3RPYmpDb25z
dHMsIHNpemVvZihUZXN0T2JqQ29uc3RzKSAvIHNpemVvZigqVGVzdE9iakNvbnN0cykpOwogCiAg
ICAgLy8gQ3VzdG9tIHRvU3RyaW5nIHRlbXBsYXRlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62855</attachid>
            <date>2010-07-28 12:02:31 -0700</date>
            <delta_ts>2010-07-29 15:38:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-43130-20100728120230.patch</filename>
            <type>text/plain</type>
            <size>25779</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NWE1MDNiY2JlMWM1MGZmMWY0NzYxMmQ4MmUyMzQ5MWJhMDUyNmZlZS4uY2VkNjgzNzg4MWM3YzA3
MzI2MmJlMzNhOWQxNGZkMTEyNWJmN2VhOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAxMC0wNy0yOCAgS2lu
dWtvIFlhc3VkYSAgPGtpbnVrb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGNhbGxiYWNrIGFyZ3VtZW50cyBzdXBwb3J0
IHRvIGJpbmRpbmcgY29kZSBnZW5lcmF0b3Igc2NyaXB0cworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDMxMzAKKworICAgICAgICBUZXN0czogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JWOC5wbToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2Jq
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0FyZyk6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0Z1bmN0aW9uQXJn
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0
aENhbGxiYWNrQXJnQW5kQ2FsbGJhY2tGdW5jdGlvbkFyZyk6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxi
YWNrQXJnKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0
aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9uYWxBcmcpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RPYmouaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VGVzdE9iai5pZGw6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9i
ai5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqSW50ZXJuYWw6Om1ldGhvZFdpdGhDYWxs
YmFja0FyZ0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpJbnRlcm5hbDo6bWV0
aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25BcmdDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpU
ZXN0T2JqSW50ZXJuYWw6Om1ldGhvZFdpdGhDYWxsYmFja0FyZ0FuZENhbGxiYWNrRnVuY3Rpb25B
cmdDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqSW50ZXJuYWw6Om1ldGhvZFdp
dGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6VGVzdE9iakludGVybmFsOjptZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZ0NhbGxi
YWNrKToKKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpDb25maWd1cmVW
OFRlc3RPYmpUZW1wbGF0ZSk6CisKIDIwMTAtMDctMjcgIEphbWVzIEhhd2tpbnMgIDxqaGF3a2lu
c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVyLgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbSBiL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KaW5kZXggMDVmNTMyYzAz
OThmMjk5N2ZjYWM0OThlNjg4ZWExMzllNDAyYjllZC4uZGQxOGE5M2I1NTVlNDJhYWM4ODNlZTI4
YWE2M2YwMzQ4ZWUxNjYxYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbQorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVy
YXRvckpTLnBtCkBAIC0yMTksNiArMjE5LDE0IEBAIHN1YiBHZXRWaXNpYmxlQ2xhc3NOYW1lCiAg
ICAgcmV0dXJuICRjbGFzc05hbWU7CiB9CiAKK3N1YiBHZXRDYWxsYmFja0NsYXNzTmFtZQorewor
ICAgIG15ICRjbGFzc05hbWUgPSBzaGlmdDsKKworICAgIHJldHVybiAiSlNDdXN0b20kY2xhc3NO
YW1lIiBpZiAkY2xhc3NOYW1lIGVxICJWb2lkQ2FsbGJhY2siOworICAgIHJldHVybiAiSlMkY2xh
c3NOYW1lIjsKK30KKwogc3ViIEF2b2lkSW5jbHVzaW9uT2ZUeXBlCiB7CiAgICAgbXkgJHR5cGUg
PSBzaGlmdDsKQEAgLTE5MTMsNyArMTkyMSw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9u
CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgICAgIG15
ICRuYW1lID0gJHBhcmFtZXRlci0+bmFtZTsKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICgkcGFyYW1ldGVyLT50eXBlIGVxICJYUGF0aE5TUmVzb2x2
ZXIiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgUmVmUHRyPFhQYXRoTlNSZXNvbHZlcj4gY3VzdG9tUmVzb2x2ZXI7XG4iKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBYUGF0aE5TUmVzb2x2
ZXIqIHJlc29sdmVyID0gdG9YUGF0aE5TUmVzb2x2ZXIoZXhlYy0+YXJndW1lbnQoJGFyZ3NJbmRl
eCkpO1xuIik7CkBAIC0xOTIzLDYgKzE5MzEsMjEgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRp
b24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgcmVzb2x2
ZXIgPSBjdXN0b21SZXNvbHZlci5nZXQoKTtcbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOworICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNpZiAoJHBhcmFtZXRlci0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNhbGxiYWNrIn0g
fHwgJHBhcmFtZXRlci0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNhbGxiYWNrRnVuY3Rpb24ifSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15ICRjYWxsYmFja0NsYXNzTmFtZSA9IEdl
dENhbGxiYWNrQ2xhc3NOYW1lKCRwYXJhbWV0ZXItPnR5cGUpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICRpbXBsSW5jbHVkZXN7JGNhbGxiYWNrQ2xhc3NOYW1lIC4gIi5oIn0gPSAxOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsSW5jbHVkZXN7IkV4Y2VwdGlvbkNvZGUu
aCJ9ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHBhcmFtZXRlci0+ZXh0
ZW5kZWRBdHRyaWJ1dGVzLT57IkNhbGxiYWNrIn0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgaWYgKCFleGVjLT5hcmd1bWVudCgkYXJn
c0luZGV4KS5pc09iamVjdCgpICYmICFleGVjLT5hcmd1bWVudCgkYXJnc0luZGV4KS5pc051bGwo
KSkge1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIyBDYWxsYmFjayBhcmd1bWVudHMgdGhhdCBvbmx5IGFj
Y2VwdCBGdW5jdGlvbnMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsSW5j
bHVkZXN7IjxydW50aW1lL0pTRnVuY3Rpb24uaD4ifSA9IDE7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICghZXhlYy0+YXJndW1lbnQo
JGFyZ3NJbmRleCkuaW5oZXJpdHMoJkpTRnVuY3Rpb246OmluZm8pICYmICFleGVjLT5hcmd1bWVu
dCgkYXJnc0luZGV4KS5pc051bGwoKSkge1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
ICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpO1xuIik7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICB9XG4iKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBSZWZQdHI8IiAuICRwYXJhbWV0
ZXItPnR5cGUgLiAiPiAkbmFtZSA9ICIgLiAkY2FsbGJhY2tDbGFzc05hbWUgLiAiOjpjcmVhdGUo
YXNPYmplY3QoZXhlYy0+YXJndW1lbnQoJGFyZ3NJbmRleCkpLCBzdGF0aWNfY2FzdDxKU0RPTUds
b2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSkpO1xuIik7CiAgICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgICIgLiBHZXROYXRpdmVUeXBlRnJvbVNpZ25hdHVyZSgkcGFy
YW1ldGVyKSAuICIgJG5hbWUgPSAiIC4gSlNWYWx1ZVRvTmF0aXZlKCRwYXJhbWV0ZXIsICJleGVj
LT5hcmd1bWVudCgkYXJnc0luZGV4KSIpIC4gIjtcbiIpOwogCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtIGIvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQppbmRleCBjOTYzZTA0OTM1YTE3YTU5Mjc4M2IxZGIx
YTI2N2RhNWZmNWJhYmE4Li5hODQ0ZjI4ZmI4NjRhMDFkNWQyZDlmNmI0NDdiYjA5Zjc5OGU4ZTM4
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBt
CisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KQEAgLTEx
ODMsNiArMTE4MywyMiBAQCBFTkQKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMs
ICIgICAgfVxuIik7CiAgICAgICAgIH0KIAorICAgICAgICBpZiAoJHBhcmFtZXRlci0+ZXh0ZW5k
ZWRBdHRyaWJ1dGVzLT57IkNhbGxiYWNrIn0gfHwgJHBhcmFtZXRlci0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkNhbGxiYWNrRnVuY3Rpb24ifSkgeworICAgICAgICAgICAgbXkgJGNsYXNzTmFtZSA9
IEdldENhbGxiYWNrQ2xhc3NOYW1lKCRwYXJhbWV0ZXItPnR5cGUpOworICAgICAgICAgICAgJGlt
cGxJbmNsdWRlc3skY2xhc3NOYW1lIC4gIi5oIn0gPSAxOworICAgICAgICAgICAgJGltcGxJbmNs
dWRlc3siRXhjZXB0aW9uQ29kZS5oIn0gPSAxOworICAgICAgICAgICAgaWYgKCRwYXJhbWV0ZXIt
PmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYWxsYmFjayJ9KSB7CisgICAgICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnREZWNscywgIiAgICBpZiAoIWFyZ3NbJHBhcmFtSW5kZXhdLT5Jc09iamVj
dCgpKVxuIik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICMgQ2FsbGJh
Y2sgYXJndW1lbnRzIHRoYXQgb25seSBhY2NlcHQgRnVuY3Rpb25zLgorICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgaWYgKCFhcmdzWyRwYXJhbUluZGV4XS0+SXNG
dW5jdGlvbigpKVxuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudERlY2xzLCAiICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihUWVBFX01JU01BVENIX0VSUik7
XG4iKTsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgIiAuIEdldE5h
dGl2ZVR5cGUoJHBhcmFtZXRlci0+dHlwZSkgLiAiICRwYXJhbWV0ZXJOYW1lID0gIiAuICRjbGFz
c05hbWUgLiAiOjpjcmVhdGUoYXJnc1skcGFyYW1JbmRleF0pO1xuIik7CisgICAgICAgICAgICAk
cGFyYW1JbmRleCsrOworICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgfQorCiAgICAgICAgIGlm
ICgkcGFyYW1ldGVyLT50eXBlIGVxICJTZXJpYWxpemVkU2NyaXB0VmFsdWUiKSB7CiAgICAgICAg
ICAgICAkaW1wbEluY2x1ZGVzeyJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCJ9ID0gMTsKICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgYm9vbCAke3BhcmFtZXRlck5hbWV9
RGlkVGhyb3cgPSBmYWxzZTtcbiIpOwpAQCAtMzIzNSw2ICszMjUxLDE0IEBAIHN1YiBHZXRWaXNp
YmxlSW50ZXJmYWNlTmFtZQogICAgIHJldHVybiAkaW50ZXJmYWNlTmFtZTsKIH0KIAorc3ViIEdl
dENhbGxiYWNrQ2xhc3NOYW1lCit7CisgICAgbXkgJGludGVyZmFjZU5hbWUgPSBzaGlmdDsKKwor
ICAgIHJldHVybiAiVjhDdXN0b20kaW50ZXJmYWNlTmFtZSIgaWYgJGludGVyZmFjZU5hbWUgZXEg
IlZvaWRDYWxsYmFjayI7CisgICAgcmV0dXJuICJWOCRpbnRlcmZhY2VOYW1lIjsKK30KKwogc3Vi
IERlYnVnUHJpbnQKIHsKICAgICBteSAkb3V0cHV0ID0gc2hpZnQ7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwIGIvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAppbmRleCA1YWE1NGRhMDAzNjVjZGNj
Mjk5MDYxNWQxN2YwOWQzYWFkN2I3ZTAwLi5hMTM3ZWExNWZhNjczYjA5ZmRhZDEwODMxNmUwZmY1
OGU1MjA4YzdmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RPYmouY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9iai5jcHAKQEAgLTIxLDEwICsyMSwxMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkpTVGVzdE9iai5oIgogCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUg
IkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKICNpbmNsdWRl
ICJJREJLZXkuaCIKICNpbmNsdWRlICJKU0V2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJKU1Rl
c3RDYWxsYmFjay5oIgogI2luY2x1ZGUgIkpTVGVzdE9iai5oIgogI2luY2x1ZGUgIkpTbG9nLmgi
CiAjaW5jbHVkZSAiS1VSTC5oIgpAQCAtMzIsNiArMzQsNyBAQAogI2luY2x1ZGUgIlNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgIlRlc3RPYmouaCIKICNpbmNsdWRlIDxydW50aW1l
L0Vycm9yLmg+CisjaW5jbHVkZSA8cnVudGltZS9KU0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8cnVu
dGltZS9KU051bWJlckNlbGwuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTU3RyaW5nLmg+CiAjaW5j
bHVkZSA8d3RmL0dldFB0ci5oPgpAQCAtMTcyLDcgKzE3NSw3IEBAIGJvb2wgSlNUZXN0T2JqQ29u
c3RydWN0b3I6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IElkZW50CiAjZGVmaW5lIFRIVU5LX0dFTkVSQVRPUihnZW5lcmF0b3IpCiAjZW5kaWYKIAotc3Rh
dGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdE9ialByb3RvdHlwZVRhYmxlVmFsdWVzWzQy
XSA9CitzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T2JqUHJvdG90eXBlVGFibGVW
YWx1ZXNbNDddID0KIHsKICAgICB7ICJDT05TVF9WQUxVRV8wIiwgRG9udERlbGV0ZSB8IFJlYWRP
bmx5LCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpz
VGVzdE9iakNPTlNUX1ZBTFVFXzApLCAoaW50cHRyX3QpMCBUSFVOS19HRU5FUkFUT1IoMCkgfSwK
ICAgICB7ICJDT05TVF9WQUxVRV8xIiwgRG9udERlbGV0ZSB8IFJlYWRPbmx5LCAoaW50cHRyX3Qp
c3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE9iakNPTlNUX1ZB
TFVFXzEpLCAoaW50cHRyX3QpMCBUSFVOS19HRU5FUkFUT1IoMCkgfSwKQEAgLTIxNCwxMiArMjE3
LDE3IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RPYmpQcm90b3R5cGVUYWJs
ZVZhbHVlc1s0Ml0gPQogICAgIHsgIm1ldGhvZFdpdGhPcHRpb25hbEFyZyIsIERvbnREZWxldGUg
fCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEFyZyksIChpbnRwdHJfdCkxIFRI
VU5LX0dFTkVSQVRPUigwKSB9LAogICAgIHsgIm1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZE9w
dGlvbmFsQXJnIiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8
TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbk9w
dGlvbmFsQXJnQW5kT3B0aW9uYWxBcmcpLCAoaW50cHRyX3QpMiBUSFVOS19HRU5FUkFUT1IoMCkg
fSwKICAgICB7ICJtZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRUd29PcHRpb25hbEFyZ3MiLCBE
b250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlv
bj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRU
d29PcHRpb25hbEFyZ3MpLCAoaW50cHRyX3QpMyBUSFVOS19HRU5FUkFUT1IoMCkgfSwKKyAgICB7
ICJtZXRob2RXaXRoQ2FsbGJhY2tBcmciLCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJf
dClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoQ2FsbGJhY2tBcmcpLCAoaW50cHRyX3QpMSBUSFVOS19HRU5FUkFUT1IoMCkgfSwK
KyAgICB7ICJtZXRob2RXaXRoQ2FsbGJhY2tGdW5jdGlvbkFyZyIsIERvbnREZWxldGUgfCBGdW5j
dGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0Z1bmN0aW9uQXJnKSwgKGludHB0cl90KTEg
VEhVTktfR0VORVJBVE9SKDApIH0sCisgICAgeyAibWV0aG9kV2l0aENhbGxiYWNrQXJnQW5kQ2Fs
bGJhY2tGdW5jdGlvbkFyZyIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRp
Y19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhDYWxsYmFja0FyZ0FuZENhbGxiYWNrRnVuY3Rpb25BcmcpLCAoaW50cHRyX3QpMiBUSFVOS19H
RU5FUkFUT1IoMCkgfSwKKyAgICB7ICJtZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFj
a0FyZyIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2
ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25DYWxsYmFj
a0FyZ0FuZENhbGxiYWNrQXJnKSwgKGludHB0cl90KTIgVEhVTktfR0VORVJBVE9SKDApIH0sCisg
ICAgeyAibWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9uYWxBcmciLCBEb250RGVsZXRlIHwgRnVu
Y3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZyksIChpbnRwdHJf
dCkxIFRIVU5LX0dFTkVSQVRPUigwKSB9LAogICAgIHsgIm92ZXJsb2FkZWRNZXRob2QiLCBEb250
RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4o
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kKSwgKGludHB0cl90KTIg
VEhVTktfR0VORVJBVE9SKDApIH0sCiAgICAgeyAwLCAwLCAwLCAwIFRIVU5LX0dFTkVSQVRPUigw
KSB9CiB9OwogCiAjdW5kZWYgVEhVTktfR0VORVJBVE9SCi1zdGF0aWMgSlNDX0NPTlNUX0hBU0hU
QUJMRSBIYXNoVGFibGUgSlNUZXN0T2JqUHJvdG90eXBlVGFibGUgPSB7IDEzNCwgMTI3LCBKU1Rl
c3RPYmpQcm90b3R5cGVUYWJsZVZhbHVlcywgMCB9Oworc3RhdGljIEpTQ19DT05TVF9IQVNIVEFC
TEUgSGFzaFRhYmxlIEpTVGVzdE9ialByb3RvdHlwZVRhYmxlID0geyAxMzYsIDEyNywgSlNUZXN0
T2JqUHJvdG90eXBlVGFibGVWYWx1ZXMsIDAgfTsKIGNvbnN0IENsYXNzSW5mbyBKU1Rlc3RPYmpQ
cm90b3R5cGU6OnNfaW5mbyA9IHsgIlRlc3RPYmpQcm90b3R5cGUiLCAwLCAmSlNUZXN0T2JqUHJv
dG90eXBlVGFibGUsIDAgfTsKIAogSlNPYmplY3QqIEpTVGVzdE9ialByb3RvdHlwZTo6c2VsZihF
eGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCkBAIC0xMTg5LDYg
KzExOTcsMTA0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBCiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0FyZyhFeGVjU3Rh
dGUqIGV4ZWMpCit7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVl
KCk7CisgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdE9iajo6c19pbmZvKSkKKyAg
ICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CisgICAgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7Cisg
ICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwo
KSk7CisgICAgaWYgKCFleGVjLT5hcmd1bWVudCgwKS5pc09iamVjdCgpICYmICFleGVjLT5hcmd1
bWVudCgwKS5pc051bGwoKSkgeworICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgVFlQRV9N
SVNNQVRDSF9FUlIpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOworICAgIH0KKyAgICBSZWZQdHI8VGVzdENhbGxiYWNrPiBjYWxsYmFjayA9IEpTVGVzdENh
bGxiYWNrOjpjcmVhdGUoYXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMCkpLCBzdGF0aWNfY2FzdDxK
U0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSkpOworCisgICAg
aW1wLT5tZXRob2RXaXRoQ2FsbGJhY2tBcmcoY2FsbGJhY2spOworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tGdW5jdGlvbkFy
ZyhFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0
VGhpc1ZhbHVlKCk7CisgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdE9iajo6c19p
bmZvKSkKKyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CisgICAgSlNUZXN0
T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1Zh
bHVlKSk7CisgICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRo
aXMtPmltcGwoKSk7CisgICAgaWYgKCFleGVjLT5hcmd1bWVudCgwKS5pbmhlcml0cygmSlNGdW5j
dGlvbjo6aW5mbykgJiYgIWV4ZWMtPmFyZ3VtZW50KDApLmlzTnVsbCgpKSB7CisgICAgICAgIHNl
dERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7CisgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgfQorICAgIFJlZlB0cjxUZXN0Q2Fs
bGJhY2s+IGNhbGxiYWNrID0gSlNUZXN0Q2FsbGJhY2s6OmNyZWF0ZShhc09iamVjdChleGVjLT5h
cmd1bWVudCgwKSksIHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpKSk7CisKKyAgICBpbXAtPm1ldGhvZFdpdGhDYWxsYmFja0Z1bmN0aW9u
QXJnKGNhbGxiYWNrKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrQXJnQW5kQ2FsbGJhY2tGdW5jdGlvbkFyZyhFeGVjU3Rh
dGUqIGV4ZWMpCit7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVl
KCk7CisgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdE9iajo6c19pbmZvKSkKKyAg
ICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CisgICAgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7Cisg
ICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwo
KSk7CisgICAgaWYgKCFleGVjLT5hcmd1bWVudCgwKS5pc09iamVjdCgpICYmICFleGVjLT5hcmd1
bWVudCgwKS5pc051bGwoKSkgeworICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgVFlQRV9N
SVNNQVRDSF9FUlIpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOworICAgIH0KKyAgICBSZWZQdHI8VGVzdENhbGxiYWNrPiBjYWxsYmFjazEgPSBKU1Rlc3RD
YWxsYmFjazo6Y3JlYXRlKGFzT2JqZWN0KGV4ZWMtPmFyZ3VtZW50KDApKSwgc3RhdGljX2Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpKTsKKyAgICBp
ZiAoIWV4ZWMtPmFyZ3VtZW50KDEpLmluaGVyaXRzKCZKU0Z1bmN0aW9uOjppbmZvKSAmJiAhZXhl
Yy0+YXJndW1lbnQoMSkuaXNOdWxsKCkpIHsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMs
IFRZUEVfTUlTTUFUQ0hfRVJSKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKKyAgICB9CisgICAgUmVmUHRyPFRlc3RDYWxsYmFjaz4gY2FsbGJhY2syID0g
SlNUZXN0Q2FsbGJhY2s6OmNyZWF0ZShhc09iamVjdChleGVjLT5hcmd1bWVudCgxKSksIHN0YXRp
Y19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSk7
CisKKyAgICBpbXAtPm1ldGhvZFdpdGhDYWxsYmFja0FyZ0FuZENhbGxiYWNrRnVuY3Rpb25Bcmco
Y2FsbGJhY2sxLCBjYWxsYmFjazIpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0FyZyhFeGVj
U3RhdGUqIGV4ZWMpCit7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1Zh
bHVlKCk7CisgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdE9iajo6c19pbmZvKSkK
KyAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CisgICAgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7
CisgICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmlt
cGwoKSk7CisgICAgaW50IG5vbkNhbGxiYWNrID0gZXhlYy0+YXJndW1lbnQoMCkudG9JbnQzMihl
eGVjKTsKKyAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDEpLmlzT2JqZWN0KCkgJiYgIWV4ZWMtPmFy
Z3VtZW50KDEpLmlzTnVsbCgpKSB7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBF
X01JU01BVENIX0VSUik7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CisgICAgfQorICAgIFJlZlB0cjxUZXN0Q2FsbGJhY2s+IGNhbGxiYWNrID0gSlNUZXN0
Q2FsbGJhY2s6OmNyZWF0ZShhc09iamVjdChleGVjLT5hcmd1bWVudCgxKSksIHN0YXRpY19jYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKSk7CisKKyAg
ICBpbXAtPm1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnKG5vbkNhbGxiYWNr
LCBjYWxsYmFjayk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
K30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbk1ldGhvZFdpdGhDYWxsYmFja0FuZE9wdGlvbmFsQXJnKEV4ZWNTdGF0ZSogZXhlYykKK3sK
KyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKKyAgICBpZiAo
IXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0T2JqOjpzX2luZm8pKQorICAgICAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcihleGVjKTsKKyAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0
aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKKyAgICBUZXN0T2JqKiBp
bXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKworICAgIGlu
dCBhcmdzQ291bnQgPSBleGVjLT5hcmd1bWVudENvdW50KCk7CisgICAgaWYgKGFyZ3NDb3VudCA8
IDEpIHsKKyAgICAgICAgaW1wLT5tZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZygpOwor
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgIH0KKwor
ICAgIGlmICghZXhlYy0+YXJndW1lbnQoMCkuaXNPYmplY3QoKSAmJiAhZXhlYy0+YXJndW1lbnQo
MCkuaXNOdWxsKCkpIHsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFU
Q0hfRVJSKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
KyAgICB9CisgICAgUmVmUHRyPFRlc3RDYWxsYmFjaz4gY2FsbGJhY2sgPSBKU1Rlc3RDYWxsYmFj
azo6Y3JlYXRlKGFzT2JqZWN0KGV4ZWMtPmFyZ3VtZW50KDApKSwgc3RhdGljX2Nhc3Q8SlNET01H
bG9iYWxPYmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpKTsKKworICAgIGltcC0+
bWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9uYWxBcmcoY2FsbGJhY2spOworICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhv
ZDEoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9z
dFRoaXNWYWx1ZSgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0T2JqLmggYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RP
YmouaAppbmRleCAwNjQ4NTI2NDczYzRhZmNjMWYxMTUxZDUyYWRkZmMzMjFmZjFmN2I4Li4zM2Uy
ZWFjMjlmYjU1OWRjMjJmMmU2Yjk2NmUxZWY5ODk5OTA5YzAyIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaAorKysgYi9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaApAQCAtMTE1LDYgKzExNSwxMSBAQCBKU0M6
OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25X
aXRoU2NyaXB0RXhlY3V0aW9uQwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXJnKEpTQzo6RXhlY1N0
YXRlKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90
eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25hbEFyZyhKU0M6OkV4
ZWNTdGF0ZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdz
KEpTQzo6RXhlY1N0YXRlKik7CitKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tBcmcoSlNDOjpFeGVjU3Rh
dGUqKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5
cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0Z1bmN0aW9uQXJnKEpTQzo6RXhlY1N0YXRlKik7
CitKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0Z1bmN0aW9uQXJnKEpTQzo6RXhl
Y1N0YXRlKik7CitKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0FyZyhKU0M6
OkV4ZWNTdGF0ZSopOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9uYWxBcmcoSlNDOjpF
eGVjU3RhdGUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk92ZXJsb2FkZWRNZXRob2QoSlNDOjpFeGVjU3RhdGUqKTsKIC8vIEF0
dHJpYnV0ZXMKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVz
dE9iai5pZGwgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbAppbmRl
eCBhNWRhYTI0YTU5Yjk1M2JmY2NjNzA0ZDNmMDBmYTYzNjBlOGQzZTQyLi5iMWYwMGEyYTk2NDRi
NmM5ZjE5MGQ2ZGE4YzA2ZGVkYTE5YjY1Njk4IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9UZXN0T2JqLmlkbApAQCAtMTA5LDYgKzEwOSwxNSBAQCBtb2R1bGUgdGVzdCB7CiAgICAg
ICAgIHZvaWQgICAgbWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9uYWxBcmcoaW4gbG9u
ZyBub25PcHQsIGluIFtPcHRpb25hbF0gbG9uZyBvcHQpOwogICAgICAgICB2b2lkICAgIG1ldGhv
ZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJncyhpbiBsb25nIG5vbk9wdCwgaW4g
W09wdGlvbmFsXSBsb25nIG9wdDEsIGluIGxvbmcgb3B0Mik7CiAKKyNpZiBkZWZpbmVkKFRFU1RJ
TkdfVjgpIHx8IGRlZmluZWQoVEVTVElOR19KUykKKyAgICAgICAgLy8gJ0NhbGxiYWNrJyBleHRl
bmRlZCBhdHRyaWJ1dGUKKyAgICAgICAgdm9pZCAgICBtZXRob2RXaXRoQ2FsbGJhY2tBcmcoaW4g
W0NhbGxiYWNrXSBUZXN0Q2FsbGJhY2sgY2FsbGJhY2spOworICAgICAgICB2b2lkICAgIG1ldGhv
ZFdpdGhDYWxsYmFja0Z1bmN0aW9uQXJnKGluIFtDYWxsYmFja0Z1bmN0aW9uXSBUZXN0Q2FsbGJh
Y2sgY2FsbGJhY2spOworICAgICAgICB2b2lkICAgIG1ldGhvZFdpdGhDYWxsYmFja0FyZ0FuZENh
bGxiYWNrRnVuY3Rpb25BcmcoaW4gW0NhbGxiYWNrXSBUZXN0Q2FsbGJhY2sgY2FsbGJhY2sxLCBp
biBbQ2FsbGJhY2tGdW5jdGlvbl0gVGVzdENhbGxiYWNrIGNhbGxiYWNrMik7CisgICAgICAgIHZv
aWQgICAgbWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tBcmcoaW4gbG9uZyBub25D
YWxsYmFjaywgaW4gW0NhbGxiYWNrXSBUZXN0Q2FsbGJhY2sgY2FsbGJhY2spOworICAgICAgICB2
b2lkICAgIG1ldGhvZFdpdGhDYWxsYmFja0FuZE9wdGlvbmFsQXJnKGluIFtDYWxsYmFjaywgT3B0
aW9uYWxdIFRlc3RDYWxsYmFjayBjYWxsYmFjayk7CisjZW5kaWYKKwogICAgICAgICAvLyAnQ29u
dmVydFNjcmlwdFN0cmluZycgZXh0ZW5kZWQgYXR0cmlidXRlCiAgICAgICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSBbQ29udmVydFNjcmlwdFN0cmluZ10gRE9NU3RyaW5nIHNjcmlwdFN0cmluZ0F0dHI7
CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9i
ai5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCmlu
ZGV4IDA5ZDk5Zjg5MWU3Y2JlYWEyOGNjNjZjNGE2OTY0ODA0YjUzM2YyZGIuLmRhOWU2NjBiYWFl
YTEzYzcyNDZiZjcyYmJjZThhNDE1ZGY3YWQzNzkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUg
IlY4RE9NV3JhcHBlci5oIgogI2luY2x1ZGUgIlY4SXNvbGF0ZWRDb250ZXh0LmgiCiAjaW5jbHVk
ZSAiVjhQcm94eS5oIgorI2luY2x1ZGUgIlY4VGVzdENhbGxiYWNrLmgiCiAjaW5jbHVkZSAiVjhs
b2cuaCIKICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KQEAgLTg2Miw2ICs4NjMsNjkgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBtZXRo
b2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRUd29PcHRpb25hbEFyZ3NDYWxsYmFjaygKICAgICByZXR1
cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7CiB9CiAKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gbWV0aG9kV2l0aENhbGxiYWNrQXJnQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYg
YXJncykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLm1ldGhvZFdpdGhDYWxsYmFja0Fy
ZyIpOworICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoYXJncy5Ib2xkZXIo
KSk7CisgICAgaWYgKCFhcmdzWzBdLT5Jc09iamVjdCgpKQorICAgICAgICByZXR1cm4gdGhyb3dF
cnJvcihUWVBFX01JU01BVENIX0VSUik7CisgICAgUmVmUHRyPFRlc3RDYWxsYmFjaz4gY2FsbGJh
Y2sgPSBWOFRlc3RDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbMF0pOworICAgIGltcC0+bWV0aG9kV2l0
aENhbGxiYWNrQXJnKGNhbGxiYWNrKTsKKyAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+
KCk7Cit9CisKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbWV0aG9kV2l0aENhbGxiYWNr
RnVuY3Rpb25BcmdDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIElO
Q19TVEFUUygiRE9NLlRlc3RPYmoubWV0aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25BcmciKTsKKyAg
ICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOworICAg
IGlmICghYXJnc1swXS0+SXNGdW5jdGlvbigpKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihU
WVBFX01JU01BVENIX0VSUik7CisgICAgUmVmUHRyPFRlc3RDYWxsYmFjaz4gY2FsbGJhY2sgPSBW
OFRlc3RDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbMF0pOworICAgIGltcC0+bWV0aG9kV2l0aENhbGxi
YWNrRnVuY3Rpb25BcmcoY2FsbGJhY2spOworICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4oKTsKK30KKworc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBtZXRob2RXaXRoQ2FsbGJh
Y2tBcmdBbmRDYWxsYmFja0Z1bmN0aW9uQXJnQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYg
YXJncykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLm1ldGhvZFdpdGhDYWxsYmFja0Fy
Z0FuZENhbGxiYWNrRnVuY3Rpb25BcmciKTsKKyAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6
OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOworICAgIGlmICghYXJnc1swXS0+SXNPYmplY3QoKSkK
KyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoVFlQRV9NSVNNQVRDSF9FUlIpOworICAgIFJlZlB0
cjxUZXN0Q2FsbGJhY2s+IGNhbGxiYWNrMSA9IFY4VGVzdENhbGxiYWNrOjpjcmVhdGUoYXJnc1sw
XSk7CisgICAgaWYgKCFhcmdzWzFdLT5Jc0Z1bmN0aW9uKCkpCisgICAgICAgIHJldHVybiB0aHJv
d0Vycm9yKFRZUEVfTUlTTUFUQ0hfRVJSKTsKKyAgICBSZWZQdHI8VGVzdENhbGxiYWNrPiBjYWxs
YmFjazIgPSBWOFRlc3RDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbMV0pOworICAgIGltcC0+bWV0aG9k
V2l0aENhbGxiYWNrQXJnQW5kQ2FsbGJhY2tGdW5jdGlvbkFyZyhjYWxsYmFjazEsIGNhbGxiYWNr
Mik7CisgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOworfQorCitzdGF0aWMgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IG1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJn
Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICBJTkNfU1RBVFMoIkRP
TS5UZXN0T2JqLm1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnIik7CisgICAg
VGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKKyAgICBp
bnQgbm9uQ2FsbGJhY2sgPSB0b0ludDMyKGFyZ3NbMF0pOworICAgIGlmICghYXJnc1sxXS0+SXNP
YmplY3QoKSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoVFlQRV9NSVNNQVRDSF9FUlIpOwor
ICAgIFJlZlB0cjxUZXN0Q2FsbGJhY2s+IGNhbGxiYWNrID0gVjhUZXN0Q2FsbGJhY2s6OmNyZWF0
ZShhcmdzWzFdKTsKKyAgICBpbXAtPm1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNr
QXJnKG5vbkNhbGxiYWNrLCBjYWxsYmFjayk7CisgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZh
bHVlPigpOworfQorCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG1ldGhvZFdpdGhDYWxs
YmFja0FuZE9wdGlvbmFsQXJnQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sK
KyAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLm1ldGhvZFdpdGhDYWxsYmFja0FuZE9wdGlvbmFs
QXJnIik7CisgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRl
cigpKTsKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA8PSAwKSB7CisgICAgICAgIGltcC0+bWV0aG9k
V2l0aENhbGxiYWNrQW5kT3B0aW9uYWxBcmcoKTsKKyAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8
djg6OlZhbHVlPigpOworICAgIH0KKyAgICBpZiAoIWFyZ3NbMF0tPklzT2JqZWN0KCkpCisgICAg
ICAgIHJldHVybiB0aHJvd0Vycm9yKFRZUEVfTUlTTUFUQ0hfRVJSKTsKKyAgICBSZWZQdHI8VGVz
dENhbGxiYWNrPiBjYWxsYmFjayA9IFY4VGVzdENhbGxiYWNrOjpjcmVhdGUoYXJnc1swXSk7Cisg
ICAgaW1wLT5tZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZyhjYWxsYmFjayk7CisgICAg
cmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOworfQorCiBzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IG92ZXJsb2FkZWRNZXRob2QxQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYg
YXJncykKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLm92ZXJsb2FkZWRNZXRob2QxIik7
CkBAIC0xMDEzLDYgKzEwNzcsNyBAQCBzdGF0aWMgY29uc3QgQmF0Y2hlZENhbGxiYWNrIFRlc3RP
YmpDYWxsYmFja3NbXSA9IHsKICAgICB7Im1ldGhvZFdpdGhPcHRpb25hbEFyZyIsIFRlc3RPYmpJ
bnRlcm5hbDo6bWV0aG9kV2l0aE9wdGlvbmFsQXJnQ2FsbGJhY2t9LAogICAgIHsibWV0aG9kV2l0
aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9uYWxBcmciLCBUZXN0T2JqSW50ZXJuYWw6Om1ldGhvZFdp
dGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnQ2FsbGJhY2t9LAogICAgIHsibWV0aG9kV2l0
aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzIiwgVGVzdE9iakludGVybmFsOjptZXRo
b2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRUd29PcHRpb25hbEFyZ3NDYWxsYmFja30sCisgICAgeyJt
ZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZyIsIFRlc3RPYmpJbnRlcm5hbDo6bWV0aG9k
V2l0aENhbGxiYWNrQW5kT3B0aW9uYWxBcmdDYWxsYmFja30sCiAgICAgeyJvdmVybG9hZGVkTWV0
aG9kIiwgVGVzdE9iakludGVybmFsOjpvdmVybG9hZGVkTWV0aG9kQ2FsbGJhY2t9LAogfTsKIHN0
YXRpYyBjb25zdCBCYXRjaGVkQ29uc3RhbnQgVGVzdE9iakNvbnN0c1tdID0gewpAQCAtMTA4NSw2
ICsxMTUwLDMwIEBAIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4g
Q29uZmlndXJlVjhUZXN0T2JqVGVtcGxhdGUodjg6OlBlcnNpCiAgICAgdjg6OkhhbmRsZTx2ODo6
RnVuY3Rpb25UZW1wbGF0ZT4gY3VzdG9tQXJnc0FuZEV4Y2VwdGlvbkFyZ3ZbY3VzdG9tQXJnc0Fu
ZEV4Y2VwdGlvbkFyZ2NdID0geyBWOGxvZzo6R2V0UmF3VGVtcGxhdGUoKSB9OwogICAgIHY4OjpI
YW5kbGU8djg6OlNpZ25hdHVyZT4gY3VzdG9tQXJnc0FuZEV4Y2VwdGlvblNpZ25hdHVyZSA9IHY4
OjpTaWduYXR1cmU6Ok5ldyhkZXNjLCBjdXN0b21BcmdzQW5kRXhjZXB0aW9uQXJnYywgY3VzdG9t
QXJnc0FuZEV4Y2VwdGlvbkFyZ3YpOwogICAgIHByb3RvLT5TZXQodjg6OlN0cmluZzo6TmV3KCJj
dXN0b21BcmdzQW5kRXhjZXB0aW9uIiksIHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoVGVzdE9i
akludGVybmFsOjpjdXN0b21BcmdzQW5kRXhjZXB0aW9uQ2FsbGJhY2ssIHY4OjpIYW5kbGU8djg6
OlZhbHVlPigpLCBjdXN0b21BcmdzQW5kRXhjZXB0aW9uU2lnbmF0dXJlKSk7CisKKyAgICAvLyBD
dXN0b20gU2lnbmF0dXJlICdtZXRob2RXaXRoQ2FsbGJhY2tBcmcnCisgICAgY29uc3QgaW50IG1l
dGhvZFdpdGhDYWxsYmFja0FyZ0FyZ2MgPSAxOworICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9u
VGVtcGxhdGU+IG1ldGhvZFdpdGhDYWxsYmFja0FyZ0FyZ3ZbbWV0aG9kV2l0aENhbGxiYWNrQXJn
QXJnY10gPSB7IFY4VGVzdENhbGxiYWNrOjpHZXRSYXdUZW1wbGF0ZSgpIH07CisgICAgdjg6Okhh
bmRsZTx2ODo6U2lnbmF0dXJlPiBtZXRob2RXaXRoQ2FsbGJhY2tBcmdTaWduYXR1cmUgPSB2ODo6
U2lnbmF0dXJlOjpOZXcoZGVzYywgbWV0aG9kV2l0aENhbGxiYWNrQXJnQXJnYywgbWV0aG9kV2l0
aENhbGxiYWNrQXJnQXJndik7CisgICAgcHJvdG8tPlNldCh2ODo6U3RyaW5nOjpOZXcoIm1ldGhv
ZFdpdGhDYWxsYmFja0FyZyIpLCB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KFRlc3RPYmpJbnRl
cm5hbDo6bWV0aG9kV2l0aENhbGxiYWNrQXJnQ2FsbGJhY2ssIHY4OjpIYW5kbGU8djg6OlZhbHVl
PigpLCBtZXRob2RXaXRoQ2FsbGJhY2tBcmdTaWduYXR1cmUpKTsKKworICAgIC8vIEN1c3RvbSBT
aWduYXR1cmUgJ21ldGhvZFdpdGhDYWxsYmFja0Z1bmN0aW9uQXJnJworICAgIGNvbnN0IGludCBt
ZXRob2RXaXRoQ2FsbGJhY2tGdW5jdGlvbkFyZ0FyZ2MgPSAxOworICAgIHY4OjpIYW5kbGU8djg6
OkZ1bmN0aW9uVGVtcGxhdGU+IG1ldGhvZFdpdGhDYWxsYmFja0Z1bmN0aW9uQXJnQXJndlttZXRo
b2RXaXRoQ2FsbGJhY2tGdW5jdGlvbkFyZ0FyZ2NdID0geyBWOFRlc3RDYWxsYmFjazo6R2V0UmF3
VGVtcGxhdGUoKSB9OworICAgIHY4OjpIYW5kbGU8djg6OlNpZ25hdHVyZT4gbWV0aG9kV2l0aENh
bGxiYWNrRnVuY3Rpb25BcmdTaWduYXR1cmUgPSB2ODo6U2lnbmF0dXJlOjpOZXcoZGVzYywgbWV0
aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25BcmdBcmdjLCBtZXRob2RXaXRoQ2FsbGJhY2tGdW5jdGlv
bkFyZ0FyZ3YpOworICAgIHByb3RvLT5TZXQodjg6OlN0cmluZzo6TmV3KCJtZXRob2RXaXRoQ2Fs
bGJhY2tGdW5jdGlvbkFyZyIpLCB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KFRlc3RPYmpJbnRl
cm5hbDo6bWV0aG9kV2l0aENhbGxiYWNrRnVuY3Rpb25BcmdDYWxsYmFjaywgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+KCksIG1ldGhvZFdpdGhDYWxsYmFja0Z1bmN0aW9uQXJnU2lnbmF0dXJlKSk7CisK
KyAgICAvLyBDdXN0b20gU2lnbmF0dXJlICdtZXRob2RXaXRoQ2FsbGJhY2tBcmdBbmRDYWxsYmFj
a0Z1bmN0aW9uQXJnJworICAgIGNvbnN0IGludCBtZXRob2RXaXRoQ2FsbGJhY2tBcmdBbmRDYWxs
YmFja0Z1bmN0aW9uQXJnQXJnYyA9IDI7CisgICAgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1w
bGF0ZT4gbWV0aG9kV2l0aENhbGxiYWNrQXJnQW5kQ2FsbGJhY2tGdW5jdGlvbkFyZ0FyZ3ZbbWV0
aG9kV2l0aENhbGxiYWNrQXJnQW5kQ2FsbGJhY2tGdW5jdGlvbkFyZ0FyZ2NdID0geyBWOFRlc3RD
YWxsYmFjazo6R2V0UmF3VGVtcGxhdGUoKSwgVjhUZXN0Q2FsbGJhY2s6OkdldFJhd1RlbXBsYXRl
KCkgfTsKKyAgICB2ODo6SGFuZGxlPHY4OjpTaWduYXR1cmU+IG1ldGhvZFdpdGhDYWxsYmFja0Fy
Z0FuZENhbGxiYWNrRnVuY3Rpb25BcmdTaWduYXR1cmUgPSB2ODo6U2lnbmF0dXJlOjpOZXcoZGVz
YywgbWV0aG9kV2l0aENhbGxiYWNrQXJnQW5kQ2FsbGJhY2tGdW5jdGlvbkFyZ0FyZ2MsIG1ldGhv
ZFdpdGhDYWxsYmFja0FyZ0FuZENhbGxiYWNrRnVuY3Rpb25BcmdBcmd2KTsKKyAgICBwcm90by0+
U2V0KHY4OjpTdHJpbmc6Ok5ldygibWV0aG9kV2l0aENhbGxiYWNrQXJnQW5kQ2FsbGJhY2tGdW5j
dGlvbkFyZyIpLCB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KFRlc3RPYmpJbnRlcm5hbDo6bWV0
aG9kV2l0aENhbGxiYWNrQXJnQW5kQ2FsbGJhY2tGdW5jdGlvbkFyZ0NhbGxiYWNrLCB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4oKSwgbWV0aG9kV2l0aENhbGxiYWNrQXJnQW5kQ2FsbGJhY2tGdW5jdGlv
bkFyZ1NpZ25hdHVyZSkpOworCisgICAgLy8gQ3VzdG9tIFNpZ25hdHVyZSAnbWV0aG9kV2l0aE5v
bkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tBcmcnCisgICAgY29uc3QgaW50IG1ldGhvZFdpdGhOb25D
YWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnQXJnYyA9IDI7CisgICAgdjg6OkhhbmRsZTx2ODo6RnVu
Y3Rpb25UZW1wbGF0ZT4gbWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tBcmdBcmd2
W21ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnQXJnY10gPSB7IHY4OjpIYW5k
bGU8djg6OkZ1bmN0aW9uVGVtcGxhdGU+KCksIFY4VGVzdENhbGxiYWNrOjpHZXRSYXdUZW1wbGF0
ZSgpIH07CisgICAgdjg6OkhhbmRsZTx2ODo6U2lnbmF0dXJlPiBtZXRob2RXaXRoTm9uQ2FsbGJh
Y2tBcmdBbmRDYWxsYmFja0FyZ1NpZ25hdHVyZSA9IHY4OjpTaWduYXR1cmU6Ok5ldyhkZXNjLCBt
ZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0FyZ0FyZ2MsIG1ldGhvZFdpdGhOb25D
YWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnQXJndik7CisgICAgcHJvdG8tPlNldCh2ODo6U3RyaW5n
OjpOZXcoIm1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnIiksIHY4OjpGdW5j
dGlvblRlbXBsYXRlOjpOZXcoVGVzdE9iakludGVybmFsOjptZXRob2RXaXRoTm9uQ2FsbGJhY2tB
cmdBbmRDYWxsYmFja0FyZ0NhbGxiYWNrLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKSwgbWV0aG9k
V2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tBcmdTaWduYXR1cmUpKTsKICAgICBiYXRjaENv
bmZpZ3VyZUNvbnN0YW50cyhkZXNjLCBwcm90bywgVGVzdE9iakNvbnN0cywgc2l6ZW9mKFRlc3RP
YmpDb25zdHMpIC8gc2l6ZW9mKCpUZXN0T2JqQ29uc3RzKSk7CiAKICAgICAvLyBDdXN0b20gdG9T
dHJpbmcgdGVtcGxhdGUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63004</attachid>
            <date>2010-07-29 15:38:15 -0700</date>
            <delta_ts>2010-07-29 23:49:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-43130-20100729153814.patch</filename>
            <type>text/plain</type>
            <size>19862</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MTg1NGNkNWE1M2M5M2MxOGZiYTFjMjNiMDA4NmRlMmQ5ZTllYWRkMy4uOTBiNjVkMzAxYWQ3NWNm
ZTE1OTI3ZTVjMmY4NmE5NTNkMmE4OTNhNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNyBAQAorMjAxMC0wNy0yOSAgS2lu
dWtvIFlhc3VkYSAgPGtpbnVrb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGNhbGxiYWNrIGFyZ3VtZW50cyBzdXBwb3J0
IHRvIGJpbmRpbmcgY29kZSBnZW5lcmF0b3Igc2NyaXB0cworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDMxMzAKKworICAgICAgICBUZXN0czogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JWOC5wbToKKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RP
YmouY3BwOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoQ2FsbGJhY2tBcmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0FyZyk6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0Fu
ZE9wdGlvbmFsQXJnKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
T2JqLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsOgorICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwOgorICAgICAgICAo
V2ViQ29yZTo6VGVzdE9iakludGVybmFsOjptZXRob2RXaXRoQ2FsbGJhY2tBcmdDYWxsYmFjayk6
CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqSW50ZXJuYWw6Om1ldGhvZFdpdGhOb25DYWxsYmFj
a0FyZ0FuZENhbGxiYWNrQXJnQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9iaklu
dGVybmFsOjptZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZ0NhbGxiYWNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNvbmZpZ3VyZVY4VGVzdE9ialRlbXBsYXRlKToKKwogMjAxMC0wNy0yOSAg
QmVybmhhcmQgQmF1ZXIgIDxiYXVlcmJAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IERhcmluIEZpc2hlci4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9ySlMucG0gYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ckpTLnBtCmluZGV4IDA1ZjUzMmMwMzk4ZjI5OTdmY2FjNDk4ZTY4OGVhMTM5ZTQwMmI5ZWQuLmRm
NDM5MDljNGJiZGI5MDdlMTBhM2VlZGZlN2E0MjBjMzExZjcwNDQgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KKysrIGIvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQpAQCAtMjE5LDYgKzIxOSwxNCBAQCBzdWIg
R2V0VmlzaWJsZUNsYXNzTmFtZQogICAgIHJldHVybiAkY2xhc3NOYW1lOwogfQogCitzdWIgR2V0
Q2FsbGJhY2tDbGFzc05hbWUKK3sKKyAgICBteSAkY2xhc3NOYW1lID0gc2hpZnQ7CisKKyAgICBy
ZXR1cm4gIkpTQ3VzdG9tVm9pZENhbGxiYWNrIiBpZiAkY2xhc3NOYW1lIGVxICJWb2lkQ2FsbGJh
Y2siOworICAgIHJldHVybiAiSlMkY2xhc3NOYW1lIjsKK30KKwogc3ViIEF2b2lkSW5jbHVzaW9u
T2ZUeXBlCiB7CiAgICAgbXkgJHR5cGUgPSBzaGlmdDsKQEAgLTE5MTMsNyArMTkyMSw3IEBAIHN1
YiBHZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgICAgICAgICAgICAgIG15ICRuYW1lID0gJHBhcmFtZXRlci0+bmFtZTsKLSAgICAg
ICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkcGFyYW1ldGVy
LT50eXBlIGVxICJYUGF0aE5TUmVzb2x2ZXIiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgUmVmUHRyPFhQYXRoTlNSZXNvbHZlcj4gY3VzdG9t
UmVzb2x2ZXI7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICBYUGF0aE5TUmVzb2x2ZXIqIHJlc29sdmVyID0gdG9YUGF0aE5TUmVzb2x2ZXIo
ZXhlYy0+YXJndW1lbnQoJGFyZ3NJbmRleCkpO1xuIik7CkBAIC0xOTIzLDYgKzE5MzEsMTggQEAg
c3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7XG4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIiAgICAgICAgcmVzb2x2ZXIgPSBjdXN0b21SZXNvbHZlci5nZXQoKTtcbiIpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIp
OworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNpZiAoJHBhcmFtZXRlci0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkNhbGxiYWNrIn0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
eSAkY2FsbGJhY2tDbGFzc05hbWUgPSBHZXRDYWxsYmFja0NsYXNzTmFtZSgkcGFyYW1ldGVyLT50
eXBlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyIkY2FsbGJh
Y2tDbGFzc05hbWUuaCJ9ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbElu
Y2x1ZGVzeyJFeGNlcHRpb25Db2RlLmgifSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgUmVmUHRyPCIgLiAkcGFyYW1ldGVyLT50eXBlIC4g
Ij4gJG5hbWU7XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID4gJGFyZ3NJbmRleCAmJiAhZXhl
Yy0+YXJndW1lbnQoJGFyZ3NJbmRleCkuaXNOdWxsKCkpIHtcbiIpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICBpZiAoIWV4ZWMtPmFyZ3Vt
ZW50KCRhcmdzSW5kZXgpLmlzT2JqZWN0KCkpIHtcbiIpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4
ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7XG4i
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAg
ICAgfVxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIgICAgICAgICRuYW1lID0gIiAuICRjYWxsYmFja0NsYXNzTmFtZSAuICI6OmNyZWF0ZShhc09i
amVjdChleGVjLT5hcmd1bWVudCgkYXJnc0luZGV4KSksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVj
dCgpKTtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiICAgIH1cbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAiIC4gR2V0TmF0aXZl
VHlwZUZyb21TaWduYXR1cmUoJHBhcmFtZXRlcikgLiAiICRuYW1lID0gIiAuIEpTVmFsdWVUb05h
dGl2ZSgkcGFyYW1ldGVyLCAiZXhlYy0+YXJndW1lbnQoJGFyZ3NJbmRleCkiKSAuICI7XG4iKTsK
IApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5w
bSBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KaW5kZXggYzk2
M2UwNDkzNWExN2E1OTI3ODNiMWRiMWEyNjdkYTVmZjViYWJhOC4uMjcwZDk4MzIwZGE2MDBmZTE5
MzQ3MzYzYTYyZjg3MTQ5NGUxZTFlMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JWOC5wbQorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvclY4LnBtCkBAIC0xMTgzLDYgKzExODMsMjQgQEAgRU5ECiAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIH1cbiIpOwogICAgICAgICB9CiAKKyAgICAgICAg
aWYgKCRwYXJhbWV0ZXItPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYWxsYmFjayJ9KSB7CisgICAg
ICAgICAgICBteSAkY2xhc3NOYW1lID0gR2V0Q2FsbGJhY2tDbGFzc05hbWUoJHBhcmFtZXRlci0+
dHlwZSk7CisgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyIkY2xhc3NOYW1lLmgifSA9IDE7Cisg
ICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJFeGNlcHRpb25Db2RlLmgifSA9IDE7CisgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIFJlZlB0cjwiIC4gJHBhcmFtZXRlci0+
dHlwZSAuICI+ICRwYXJhbWV0ZXJOYW1lO1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudERlY2xzLCAiICAgIGlmIChhcmdzLkxlbmd0aCgpID4gJHBhcmFtSW5kZXggJiYgIWlzVW5k
ZWZpbmVkT3JOdWxsKGFyZ3NbJHBhcmFtSW5kZXhdKSkge1xuIik7CisgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudERlY2xzLCAiICAgICAgICBpZiAoIWFyZ3NbJHBhcmFtSW5kZXhdLT5Jc09i
amVjdCgpKVxuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICAg
ICAgICAgcmV0dXJuIHRocm93RXJyb3IoVFlQRV9NSVNNQVRDSF9FUlIpO1xuIik7CisgICAgICAg
ICAgICBpZiAoJHBhcmFtZXRlci0+dHlwZSBlcSAiVm9pZENhbGxiYWNrIikgeworICAgICAgICAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgICAgICRwYXJhbWV0ZXJOYW1lID0g
IiAuICRjbGFzc05hbWUgLiAiOjpjcmVhdGUoYXJnc1skcGFyYW1JbmRleF0sIGdldFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSk7XG4iKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICAgICAgJHBhcmFtZXRlck5hbWUgPSAi
IC4gJGNsYXNzTmFtZSAuICI6OmNyZWF0ZShhcmdzWyRwYXJhbUluZGV4XSk7XG4iKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgfVxuIik7
CisgICAgICAgICAgICAkcGFyYW1JbmRleCsrOworICAgICAgICAgICAgbmV4dDsKKyAgICAgICAg
fQorCiAgICAgICAgIGlmICgkcGFyYW1ldGVyLT50eXBlIGVxICJTZXJpYWxpemVkU2NyaXB0VmFs
dWUiKSB7CiAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJTZXJpYWxpemVkU2NyaXB0VmFsdWUu
aCJ9ID0gMTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgYm9vbCAk
e3BhcmFtZXRlck5hbWV9RGlkVGhyb3cgPSBmYWxzZTtcbiIpOwpAQCAtMzIzNSw2ICszMjUzLDE0
IEBAIHN1YiBHZXRWaXNpYmxlSW50ZXJmYWNlTmFtZQogICAgIHJldHVybiAkaW50ZXJmYWNlTmFt
ZTsKIH0KIAorc3ViIEdldENhbGxiYWNrQ2xhc3NOYW1lCit7CisgICAgbXkgJGludGVyZmFjZU5h
bWUgPSBzaGlmdDsKKworICAgIHJldHVybiAiVjhDdXN0b21Wb2lkQ2FsbGJhY2siIGlmICRpbnRl
cmZhY2VOYW1lIGVxICJWb2lkQ2FsbGJhY2siOworICAgIHJldHVybiAiVjgkaW50ZXJmYWNlTmFt
ZSI7Cit9CisKIHN1YiBEZWJ1Z1ByaW50CiB7CiAgICAgbXkgJG91dHB1dCA9IHNoaWZ0OwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcCBi
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKaW5kZXggNWFh
NTRkYTAwMzY1Y2RjYzI5OTA2MTVkMTdmMDlkM2FhZDdiN2UwMC4uZDRkMmViYjEyNjkzNDVkNjNj
YzdhY2ZlNDljZjExODFiN2Q1YmNhMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RPYmouY3BwCkBAIC0yMSwxMCArMjEsMTIgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJKU1Rlc3RPYmouaCIKIAorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUu
aCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJJREJCaW5kaW5nVXRpbGl0aWVz
LmgiCiAjaW5jbHVkZSAiSURCS2V5LmgiCiAjaW5jbHVkZSAiSlNFdmVudExpc3RlbmVyLmgiCisj
aW5jbHVkZSAiSlNUZXN0Q2FsbGJhY2suaCIKICNpbmNsdWRlICJKU1Rlc3RPYmouaCIKICNpbmNs
dWRlICJKU2xvZy5oIgogI2luY2x1ZGUgIktVUkwuaCIKQEAgLTE3Miw3ICsxNzQsNyBAQCBib29s
IEpTVGVzdE9iakNvbnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBJZGVudAogI2RlZmluZSBUSFVOS19HRU5FUkFUT1IoZ2VuZXJhdG9yKQog
I2VuZGlmCiAKLXN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RPYmpQcm90b3R5cGVU
YWJsZVZhbHVlc1s0Ml0gPQorc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdE9ialBy
b3RvdHlwZVRhYmxlVmFsdWVzWzQ1XSA9CiB7CiAgICAgeyAiQ09OU1RfVkFMVUVfMCIsIERvbnRE
ZWxldGUgfCBSZWFkT25seSwgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0
VmFsdWVGdW5jPihqc1Rlc3RPYmpDT05TVF9WQUxVRV8wKSwgKGludHB0cl90KTAgVEhVTktfR0VO
RVJBVE9SKDApIH0sCiAgICAgeyAiQ09OU1RfVkFMVUVfMSIsIERvbnREZWxldGUgfCBSZWFkT25s
eSwgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rl
c3RPYmpDT05TVF9WQUxVRV8xKSwgKGludHB0cl90KTAgVEhVTktfR0VORVJBVE9SKDApIH0sCkBA
IC0yMTQsMTIgKzIxNiwxNSBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T2Jq
UHJvdG90eXBlVGFibGVWYWx1ZXNbNDJdID0KICAgICB7ICJtZXRob2RXaXRoT3B0aW9uYWxBcmci
LCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5j
dGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBcmcpLCAo
aW50cHRyX3QpMSBUSFVOS19HRU5FUkFUT1IoMCkgfSwKICAgICB7ICJtZXRob2RXaXRoTm9uT3B0
aW9uYWxBcmdBbmRPcHRpb25hbEFyZyIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90
KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnKSwgKGludHB0cl90KTIgVEhVTktf
R0VORVJBVE9SKDApIH0sCiAgICAgeyAibWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0
aW9uYWxBcmdzIiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8
TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbk9w
dGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzKSwgKGludHB0cl90KTMgVEhVTktfR0VORVJBVE9S
KDApIH0sCisgICAgeyAibWV0aG9kV2l0aENhbGxiYWNrQXJnIiwgRG9udERlbGV0ZSB8IEZ1bmN0
aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrQXJnKSwgKGludHB0cl90KTEgVEhVTktfR0VO
RVJBVE9SKDApIH0sCisgICAgeyAibWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tB
cmciLCBEb250RGVsZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVG
dW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uQ2FsbGJhY2tB
cmdBbmRDYWxsYmFja0FyZyksIChpbnRwdHJfdCkyIFRIVU5LX0dFTkVSQVRPUigwKSB9LAorICAg
IHsgIm1ldGhvZFdpdGhDYWxsYmFja0FuZE9wdGlvbmFsQXJnIiwgRG9udERlbGV0ZSB8IEZ1bmN0
aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uTWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9uYWxBcmcpLCAoaW50cHRyX3Qp
MSBUSFVOS19HRU5FUkFUT1IoMCkgfSwKICAgICB7ICJvdmVybG9hZGVkTWV0aG9kIiwgRG9udERl
bGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpz
VGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZCksIChpbnRwdHJfdCkyIFRI
VU5LX0dFTkVSQVRPUigwKSB9LAogICAgIHsgMCwgMCwgMCwgMCBUSFVOS19HRU5FUkFUT1IoMCkg
fQogfTsKIAogI3VuZGVmIFRIVU5LX0dFTkVSQVRPUgotc3RhdGljIEpTQ19DT05TVF9IQVNIVEFC
TEUgSGFzaFRhYmxlIEpTVGVzdE9ialByb3RvdHlwZVRhYmxlID0geyAxMzQsIDEyNywgSlNUZXN0
T2JqUHJvdG90eXBlVGFibGVWYWx1ZXMsIDAgfTsKK3N0YXRpYyBKU0NfQ09OU1RfSEFTSFRBQkxF
IEhhc2hUYWJsZSBKU1Rlc3RPYmpQcm90b3R5cGVUYWJsZSA9IHsgMTM1LCAxMjcsIEpTVGVzdE9i
alByb3RvdHlwZVRhYmxlVmFsdWVzLCAwIH07CiBjb25zdCBDbGFzc0luZm8gSlNUZXN0T2JqUHJv
dG90eXBlOjpzX2luZm8gPSB7ICJUZXN0T2JqUHJvdG90eXBlIiwgMCwgJkpTVGVzdE9ialByb3Rv
dHlwZVRhYmxlLCAwIH07CiAKIEpTT2JqZWN0KiBKU1Rlc3RPYmpQcm90b3R5cGU6OnNlbGYoRXhl
Y1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQpAQCAtMTE4OSw2ICsx
MTk0LDc0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBq
c1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0FyZyhFeGVjU3RhdGUq
IGV4ZWMpCit7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7
CisgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdE9iajo6c19pbmZvKSkKKyAgICAg
ICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CisgICAgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7CisgICAg
VGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7
CisgICAgUmVmUHRyPFRlc3RDYWxsYmFjaz4gY2FsbGJhY2s7CisgICAgaWYgKGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSA+IDAgJiYgIWV4ZWMtPmFyZ3VtZW50KDApLmlzTnVsbCgpKSB7CisgICAgICAg
IGlmICghZXhlYy0+YXJndW1lbnQoMCkuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgc2V0RE9N
RXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKKyAgICAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOworICAgICAgICB9CisgICAgICAgIGNhbGxiYWNrID0gSlNUZXN0Q2FsbGJh
Y2s6OmNyZWF0ZShhc09iamVjdChleGVjLT5hcmd1bWVudCgwKSksIGNhc3RlZFRoaXMtPmdsb2Jh
bE9iamVjdCgpKTsKKyAgICB9CisKKyAgICBpbXAtPm1ldGhvZFdpdGhDYWxsYmFja0FyZyhjYWxs
YmFjayk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKwor
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnKEV4ZWNTdGF0ZSogZXhlYykKK3sK
KyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKKyAgICBpZiAo
IXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0T2JqOjpzX2luZm8pKQorICAgICAgICByZXR1cm4g
dGhyb3dWTVR5cGVFcnJvcihleGVjKTsKKyAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBzdGF0
aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFsdWUpKTsKKyAgICBUZXN0T2JqKiBp
bXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAgICBpbnQg
bm9uQ2FsbGJhY2sgPSBleGVjLT5hcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOworICAgIFJlZlB0
cjxUZXN0Q2FsbGJhY2s+IGNhbGxiYWNrOworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkg
PiAxICYmICFleGVjLT5hcmd1bWVudCgxKS5pc051bGwoKSkgeworICAgICAgICBpZiAoIWV4ZWMt
PmFyZ3VtZW50KDEpLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIHNldERPTUV4Y2VwdGlvbihl
eGVjLCBUWVBFX01JU01BVENIX0VSUik7CisgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKKyAgICAgICAgfQorICAgICAgICBjYWxsYmFjayA9IEpTVGVzdENhbGxiYWNrOjpjcmVhdGUo
YXNPYmplY3QoZXhlYy0+YXJndW1lbnQoMSkpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSk7
CisgICAgfQorCisgICAgaW1wLT5tZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0Fy
Zyhub25DYWxsYmFjaywgY2FsbGJhY2spOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZyhFeGVjU3Rh
dGUqIGV4ZWMpCit7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVl
KCk7CisgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdE9iajo6c19pbmZvKSkKKyAg
ICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CisgICAgSlNUZXN0T2JqKiBjYXN0
ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7Cisg
ICAgVGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwo
KSk7CisKKyAgICBpbnQgYXJnc0NvdW50ID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOworICAgIGlm
IChhcmdzQ291bnQgPCAxKSB7CisgICAgICAgIGltcC0+bWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0
aW9uYWxBcmcoKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKKyAgICB9CisKKyAgICBSZWZQdHI8VGVzdENhbGxiYWNrPiBjYWxsYmFjazsKKyAgICBpZiAo
ZXhlYy0+YXJndW1lbnRDb3VudCgpID4gMCAmJiAhZXhlYy0+YXJndW1lbnQoMCkuaXNOdWxsKCkp
IHsKKyAgICAgICAgaWYgKCFleGVjLT5hcmd1bWVudCgwKS5pc09iamVjdCgpKSB7CisgICAgICAg
ICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpOworICAgICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIH0KKyAgICAgICAgY2FsbGJhY2sgPSBK
U1Rlc3RDYWxsYmFjazo6Y3JlYXRlKGFzT2JqZWN0KGV4ZWMtPmFyZ3VtZW50KDApKSwgY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCkpOworICAgIH0KKworICAgIGltcC0+bWV0aG9kV2l0aENhbGxi
YWNrQW5kT3B0aW9uYWxBcmcoY2FsbGJhY2spOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7Cit9CisKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZDEoRXhlY1N0YXRlKiBl
eGVjKQogewogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmgg
Yi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaAppbmRleCAwNjQ4
NTI2NDczYzRhZmNjMWYxMTUxZDUyYWRkZmMzMjFmZjFmN2I4Li5hNmViNTZmOWI5ZDBlNmY1M2Q3
ZTkxY2JmYmFmMmI4NzQ2NDIxMzc5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9KUy9KU1Rlc3RPYmouaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9KUy9KU1Rlc3RPYmouaApAQCAtMTE1LDYgKzExNSw5IEBAIEpTQzo6RW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRp
b25DCiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBcmcoSlNDOjpFeGVjU3RhdGUqKTsKIEpTQzo6RW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhv
ZFdpdGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnKEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6
OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRUd29PcHRpb25hbEFyZ3MoSlNDOjpFeGVjU3RhdGUq
KTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0FyZyhKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tBcmcoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhDYWxsYmFja0FuZE9wdGlvbmFsQXJnKEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25PdmVy
bG9hZGVkTWV0aG9kKEpTQzo6RXhlY1N0YXRlKik7CiAvLyBBdHRyaWJ1dGVzCiAKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsIGIvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKaW5kZXggYTVkYWEyNGE1OWI5NTNiZmNj
YzcwNGQzZjAwZmE2MzYwZThkM2U0Mi4uNDdhMjQ4NzhjYWJmNDdlY2Y2MzI0NzQ5NzE5ODMxMjUx
NzA1Y2Y0YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9i
ai5pZGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKQEAg
LTEwOSw2ICsxMDksMTMgQEAgbW9kdWxlIHRlc3QgewogICAgICAgICB2b2lkICAgIG1ldGhvZFdp
dGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnKGluIGxvbmcgbm9uT3B0LCBpbiBbT3B0aW9u
YWxdIGxvbmcgb3B0KTsKICAgICAgICAgdm9pZCAgICBtZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdB
bmRUd29PcHRpb25hbEFyZ3MoaW4gbG9uZyBub25PcHQsIGluIFtPcHRpb25hbF0gbG9uZyBvcHQx
LCBpbiBsb25nIG9wdDIpOwogCisjaWYgZGVmaW5lZChURVNUSU5HX1Y4KSB8fCBkZWZpbmVkKFRF
U1RJTkdfSlMpCisgICAgICAgIC8vICdDYWxsYmFjaycgZXh0ZW5kZWQgYXR0cmlidXRlCisgICAg
ICAgIHZvaWQgICAgbWV0aG9kV2l0aENhbGxiYWNrQXJnKGluIFtDYWxsYmFja10gVGVzdENhbGxi
YWNrIGNhbGxiYWNrKTsKKyAgICAgICAgdm9pZCAgICBtZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdB
bmRDYWxsYmFja0FyZyhpbiBsb25nIG5vbkNhbGxiYWNrLCBpbiBbQ2FsbGJhY2tdIFRlc3RDYWxs
YmFjayBjYWxsYmFjayk7CisgICAgICAgIHZvaWQgICAgbWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0
aW9uYWxBcmcoaW4gW0NhbGxiYWNrLCBPcHRpb25hbF0gVGVzdENhbGxiYWNrIGNhbGxiYWNrKTsK
KyNlbmRpZgorCiAgICAgICAgIC8vICdDb252ZXJ0U2NyaXB0U3RyaW5nJyBleHRlbmRlZCBhdHRy
aWJ1dGUKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtDb252ZXJ0U2NyaXB0U3RyaW5nXSBE
T01TdHJpbmcgc2NyaXB0U3RyaW5nQXR0cjsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKaW5kZXggMDlkOTlmODkxZTdjYmVhYTI4Y2M2NmM0YTY5
NjQ4MDRiNTMzZjJkYi4uODk4MDMyZGRhYjVkODY0MTdlYTQ4YjZkNTgyZDliMjU3ODQ4ZWM0OSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNw
cAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCkBA
IC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiVjhET01XcmFwcGVyLmgiCiAjaW5jbHVkZSAiVjhJ
c29sYXRlZENvbnRleHQuaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCisjaW5jbHVkZSAiVjhUZXN0
Q2FsbGJhY2suaCIKICNpbmNsdWRlICJWOGxvZy5oIgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4K
ICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAtODYyLDYgKzg2Myw1MyBAQCBzdGF0aWMg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IG1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlv
bmFsQXJnc0NhbGxiYWNrKAogICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKIH0K
IAorc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBtZXRob2RXaXRoQ2FsbGJhY2tBcmdDYWxs
YmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIElOQ19TVEFUUygiRE9NLlRl
c3RPYmoubWV0aG9kV2l0aENhbGxiYWNrQXJnIik7CisgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0
T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKKyAgICBSZWZQdHI8VGVzdENhbGxiYWNrPiBj
YWxsYmFjazsKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDAgJiYgIWlzVW5kZWZpbmVkT3JOdWxs
KGFyZ3NbMF0pKSB7CisgICAgICAgIGlmICghYXJnc1swXS0+SXNPYmplY3QoKSkKKyAgICAgICAg
ICAgIHJldHVybiB0aHJvd0Vycm9yKFRZUEVfTUlTTUFUQ0hfRVJSKTsKKyAgICAgICAgY2FsbGJh
Y2sgPSBWOFRlc3RDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbMF0pOworICAgIH0KKyAgICBpbXAtPm1l
dGhvZFdpdGhDYWxsYmFja0FyZyhjYWxsYmFjayk7CisgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6
OlZhbHVlPigpOworfQorCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG1ldGhvZFdpdGhO
b25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYg
YXJncykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLm1ldGhvZFdpdGhOb25DYWxsYmFj
a0FyZ0FuZENhbGxiYWNrQXJnIik7CisgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05h
dGl2ZShhcmdzLkhvbGRlcigpKTsKKyAgICBpbnQgbm9uQ2FsbGJhY2sgPSB0b0ludDMyKGFyZ3Nb
MF0pOworICAgIFJlZlB0cjxUZXN0Q2FsbGJhY2s+IGNhbGxiYWNrOworICAgIGlmIChhcmdzLkxl
bmd0aCgpID4gMSAmJiAhaXNVbmRlZmluZWRPck51bGwoYXJnc1sxXSkpIHsKKyAgICAgICAgaWYg
KCFhcmdzWzFdLT5Jc09iamVjdCgpKQorICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoVFlQ
RV9NSVNNQVRDSF9FUlIpOworICAgICAgICBjYWxsYmFjayA9IFY4VGVzdENhbGxiYWNrOjpjcmVh
dGUoYXJnc1sxXSk7CisgICAgfQorICAgIGltcC0+bWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5k
Q2FsbGJhY2tBcmcobm9uQ2FsbGJhY2ssIGNhbGxiYWNrKTsKKyAgICByZXR1cm4gdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+KCk7Cit9CisKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbWV0aG9k
V2l0aENhbGxiYWNrQW5kT3B0aW9uYWxBcmdDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBh
cmdzKQoreworICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmoubWV0aG9kV2l0aENhbGxiYWNrQW5k
T3B0aW9uYWxBcmciKTsKKyAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFy
Z3MuSG9sZGVyKCkpOworICAgIGlmIChhcmdzLkxlbmd0aCgpIDw9IDApIHsKKyAgICAgICAgaW1w
LT5tZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZygpOworICAgICAgICByZXR1cm4gdjg6
OkhhbmRsZTx2ODo6VmFsdWU+KCk7CisgICAgfQorICAgIFJlZlB0cjxUZXN0Q2FsbGJhY2s+IGNh
bGxiYWNrOworICAgIGlmIChhcmdzLkxlbmd0aCgpID4gMCAmJiAhaXNVbmRlZmluZWRPck51bGwo
YXJnc1swXSkpIHsKKyAgICAgICAgaWYgKCFhcmdzWzBdLT5Jc09iamVjdCgpKQorICAgICAgICAg
ICAgcmV0dXJuIHRocm93RXJyb3IoVFlQRV9NSVNNQVRDSF9FUlIpOworICAgICAgICBjYWxsYmFj
ayA9IFY4VGVzdENhbGxiYWNrOjpjcmVhdGUoYXJnc1swXSk7CisgICAgfQorICAgIGltcC0+bWV0
aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9uYWxBcmcoY2FsbGJhY2spOworICAgIHJldHVybiB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4oKTsKK30KKwogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBv
dmVybG9hZGVkTWV0aG9kMUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAg
ICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5vdmVybG9hZGVkTWV0aG9kMSIpOwpAQCAtMTAxMyw2
ICsxMDYxLDcgQEAgc3RhdGljIGNvbnN0IEJhdGNoZWRDYWxsYmFjayBUZXN0T2JqQ2FsbGJhY2tz
W10gPSB7CiAgICAgeyJtZXRob2RXaXRoT3B0aW9uYWxBcmciLCBUZXN0T2JqSW50ZXJuYWw6Om1l
dGhvZFdpdGhPcHRpb25hbEFyZ0NhbGxiYWNrfSwKICAgICB7Im1ldGhvZFdpdGhOb25PcHRpb25h
bEFyZ0FuZE9wdGlvbmFsQXJnIiwgVGVzdE9iakludGVybmFsOjptZXRob2RXaXRoTm9uT3B0aW9u
YWxBcmdBbmRPcHRpb25hbEFyZ0NhbGxiYWNrfSwKICAgICB7Im1ldGhvZFdpdGhOb25PcHRpb25h
bEFyZ0FuZFR3b09wdGlvbmFsQXJncyIsIFRlc3RPYmpJbnRlcm5hbDo6bWV0aG9kV2l0aE5vbk9w
dGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzQ2FsbGJhY2t9LAorICAgIHsibWV0aG9kV2l0aENh
bGxiYWNrQW5kT3B0aW9uYWxBcmciLCBUZXN0T2JqSW50ZXJuYWw6Om1ldGhvZFdpdGhDYWxsYmFj
a0FuZE9wdGlvbmFsQXJnQ2FsbGJhY2t9LAogICAgIHsib3ZlcmxvYWRlZE1ldGhvZCIsIFRlc3RP
YmpJbnRlcm5hbDo6b3ZlcmxvYWRlZE1ldGhvZENhbGxiYWNrfSwKIH07CiBzdGF0aWMgY29uc3Qg
QmF0Y2hlZENvbnN0YW50IFRlc3RPYmpDb25zdHNbXSA9IHsKQEAgLTEwODUsNiArMTEzNCwxOCBA
QCBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IENvbmZpZ3VyZVY4
VGVzdE9ialRlbXBsYXRlKHY4OjpQZXJzaQogICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uVGVt
cGxhdGU+IGN1c3RvbUFyZ3NBbmRFeGNlcHRpb25Bcmd2W2N1c3RvbUFyZ3NBbmRFeGNlcHRpb25B
cmdjXSA9IHsgVjhsb2c6OkdldFJhd1RlbXBsYXRlKCkgfTsKICAgICB2ODo6SGFuZGxlPHY4OjpT
aWduYXR1cmU+IGN1c3RvbUFyZ3NBbmRFeGNlcHRpb25TaWduYXR1cmUgPSB2ODo6U2lnbmF0dXJl
OjpOZXcoZGVzYywgY3VzdG9tQXJnc0FuZEV4Y2VwdGlvbkFyZ2MsIGN1c3RvbUFyZ3NBbmRFeGNl
cHRpb25Bcmd2KTsKICAgICBwcm90by0+U2V0KHY4OjpTdHJpbmc6Ok5ldygiY3VzdG9tQXJnc0Fu
ZEV4Y2VwdGlvbiIpLCB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KFRlc3RPYmpJbnRlcm5hbDo6
Y3VzdG9tQXJnc0FuZEV4Y2VwdGlvbkNhbGxiYWNrLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKSwg
Y3VzdG9tQXJnc0FuZEV4Y2VwdGlvblNpZ25hdHVyZSkpOworCisgICAgLy8gQ3VzdG9tIFNpZ25h
dHVyZSAnbWV0aG9kV2l0aENhbGxiYWNrQXJnJworICAgIGNvbnN0IGludCBtZXRob2RXaXRoQ2Fs
bGJhY2tBcmdBcmdjID0gMTsKKyAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRlPiBt
ZXRob2RXaXRoQ2FsbGJhY2tBcmdBcmd2W21ldGhvZFdpdGhDYWxsYmFja0FyZ0FyZ2NdID0geyBW
OFRlc3RDYWxsYmFjazo6R2V0UmF3VGVtcGxhdGUoKSB9OworICAgIHY4OjpIYW5kbGU8djg6OlNp
Z25hdHVyZT4gbWV0aG9kV2l0aENhbGxiYWNrQXJnU2lnbmF0dXJlID0gdjg6OlNpZ25hdHVyZTo6
TmV3KGRlc2MsIG1ldGhvZFdpdGhDYWxsYmFja0FyZ0FyZ2MsIG1ldGhvZFdpdGhDYWxsYmFja0Fy
Z0FyZ3YpOworICAgIHByb3RvLT5TZXQodjg6OlN0cmluZzo6TmV3KCJtZXRob2RXaXRoQ2FsbGJh
Y2tBcmciKSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhUZXN0T2JqSW50ZXJuYWw6Om1ldGhv
ZFdpdGhDYWxsYmFja0FyZ0NhbGxiYWNrLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKSwgbWV0aG9k
V2l0aENhbGxiYWNrQXJnU2lnbmF0dXJlKSk7CisKKyAgICAvLyBDdXN0b20gU2lnbmF0dXJlICdt
ZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0FyZycKKyAgICBjb25zdCBpbnQgbWV0
aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tBcmdBcmdjID0gMjsKKyAgICB2ODo6SGFu
ZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRlPiBtZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxs
YmFja0FyZ0FyZ3ZbbWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tBcmdBcmdjXSA9
IHsgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4oKSwgVjhUZXN0Q2FsbGJhY2s6Okdl
dFJhd1RlbXBsYXRlKCkgfTsKKyAgICB2ODo6SGFuZGxlPHY4OjpTaWduYXR1cmU+IG1ldGhvZFdp
dGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnU2lnbmF0dXJlID0gdjg6OlNpZ25hdHVyZTo6
TmV3KGRlc2MsIG1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnQXJnYywgbWV0
aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tBcmdBcmd2KTsKKyAgICBwcm90by0+U2V0
KHY4OjpTdHJpbmc6Ok5ldygibWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tBcmci
KSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhUZXN0T2JqSW50ZXJuYWw6Om1ldGhvZFdpdGhO
b25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnQ2FsbGJhY2ssIHY4OjpIYW5kbGU8djg6OlZhbHVl
PigpLCBtZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0FyZ1NpZ25hdHVyZSkpOwog
ICAgIGJhdGNoQ29uZmlndXJlQ29uc3RhbnRzKGRlc2MsIHByb3RvLCBUZXN0T2JqQ29uc3RzLCBz
aXplb2YoVGVzdE9iakNvbnN0cykgLyBzaXplb2YoKlRlc3RPYmpDb25zdHMpKTsKIAogICAgIC8v
IEN1c3RvbSB0b1N0cmluZyB0ZW1wbGF0ZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63032</attachid>
            <date>2010-07-29 23:28:46 -0700</date>
            <delta_ts>2010-07-29 23:50:56 -0700</delta_ts>
            <desc>Patch for submit</desc>
            <filename>43130-patch-for-submit.diff</filename>
            <type>text/plain</type>
            <size>18506</size>
            <attacher name="Kinuko Yasuda">kinuko</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MTg1NGNkNS4uOTBiNjVkMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNyBAQAorMjAxMC0wNy0yOSAgS2ludWtvIFlhc3Vk
YSAgPGtpbnVrb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkIGNhbGxiYWNrIGFyZ3VtZW50cyBzdXBwb3J0IHRvIGJpbmRp
bmcgY29kZSBnZW5lcmF0b3Igc2NyaXB0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NDMxMzAKKworICAgICAgICBUZXN0czogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Rlc3RPYmouaWRsCisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JKUy5wbToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5w
bToKKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2Fs
bGJhY2tBcmcpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0FyZyk6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0FuZE9wdGlvbmFs
QXJnKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmg6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwOgorICAgICAgICAoV2ViQ29yZTo6
VGVzdE9iakludGVybmFsOjptZXRob2RXaXRoQ2FsbGJhY2tBcmdDYWxsYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpUZXN0T2JqSW50ZXJuYWw6Om1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENh
bGxiYWNrQXJnQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9iakludGVybmFsOjpt
ZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZ0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbmZpZ3VyZVY4VGVzdE9ialRlbXBsYXRlKToKKwogMjAxMC0wNy0yOSAgQmVybmhhcmQg
QmF1ZXIgIDxiYXVlcmJAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmlu
IEZpc2hlci4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9ySlMucG0gYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCmlu
ZGV4IDA1ZjUzMmMuLjU5ZDJlNjggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySlMucG0KKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JKUy5wbQpAQCAtMjE5LDYgKzIxOSwxNCBAQCBzdWIgR2V0VmlzaWJsZUNsYXNzTmFt
ZQogICAgIHJldHVybiAkY2xhc3NOYW1lOwogfQogCitzdWIgR2V0Q2FsbGJhY2tDbGFzc05hbWUK
K3sKKyAgICBteSAkY2xhc3NOYW1lID0gc2hpZnQ7CisKKyAgICByZXR1cm4gIkpTQ3VzdG9tVm9p
ZENhbGxiYWNrIiBpZiAkY2xhc3NOYW1lIGVxICJWb2lkQ2FsbGJhY2siOworICAgIHJldHVybiAi
SlMkY2xhc3NOYW1lIjsKK30KKwogc3ViIEF2b2lkSW5jbHVzaW9uT2ZUeXBlCiB7CiAgICAgbXkg
JHR5cGUgPSBzaGlmdDsKQEAgLTE5MTMsNyArMTkyMSw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVu
dGF0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAg
ICAgIG15ICRuYW1lID0gJHBhcmFtZXRlci0+bmFtZTsKLSAgICAgICAgICAgICAgICAgICAgCisK
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkcGFyYW1ldGVyLT50eXBlIGVxICJYUGF0aE5T
UmVzb2x2ZXIiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgUmVmUHRyPFhQYXRoTlNSZXNvbHZlcj4gY3VzdG9tUmVzb2x2ZXI7XG4iKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBYUGF0aE5T
UmVzb2x2ZXIqIHJlc29sdmVyID0gdG9YUGF0aE5TUmVzb2x2ZXIoZXhlYy0+YXJndW1lbnQoJGFy
Z3NJbmRleCkpO1xuIik7CkBAIC0xOTIzLDYgKzE5MzEsMTUgQEAgc3ViIEdlbmVyYXRlSW1wbGVt
ZW50YXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
IiAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAg
cmVzb2x2ZXIgPSBjdXN0b21SZXNvbHZlci5nZXQoKTtcbiIpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1cbiIpOworICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNpZiAoJHBhcmFtZXRlci0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNhbGxi
YWNrIn0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSAkY2FsbGJhY2tDbGFzc05h
bWUgPSBHZXRDYWxsYmFja0NsYXNzTmFtZSgkcGFyYW1ldGVyLT50eXBlKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyIkY2FsbGJhY2tDbGFzc05hbWUuaCJ9ID0g
MTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJFeGNlcHRpb25D
b2RlLmgifSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICIgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8PSAkYXJnc0luZGV4IHx8ICFleGVj
LT5hcmd1bWVudCgkYXJnc0luZGV4KS5pc09iamVjdCgpKSB7XG4iKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICAgICAgc2V0RE9NRXhjZXB0aW9u
KGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTtcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTtcbiIp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIH1c
biIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IFJlZlB0cjwiIC4gJHBhcmFtZXRlci0+dHlwZSAuICI+ICRuYW1lID0gIiAuICRjYWxsYmFja0Ns
YXNzTmFtZSAuICI6OmNyZWF0ZShhc09iamVjdChleGVjLT5hcmd1bWVudCgkYXJnc0luZGV4KSks
IGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpKTtcbiIpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICAiIC4gR2V0TmF0aXZlVHlwZUZyb21TaWduYXR1cmUoJHBhcmFtZXRlcikgLiAiICRu
YW1lID0gIiAuIEpTVmFsdWVUb05hdGl2ZSgkcGFyYW1ldGVyLCAiZXhlYy0+YXJndW1lbnQoJGFy
Z3NJbmRleCkiKSAuICI7XG4iKTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JWOC5wbSBiL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9yVjgucG0KaW5kZXggYzk2M2UwNC4uZDQyOTFiOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQorKysgYi9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCkBAIC0xMTgzLDYgKzExODMsMjEgQEAgRU5ECiAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIH1cbiIpOwogICAgICAgICB9
CiAKKyAgICAgICAgaWYgKCRwYXJhbWV0ZXItPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYWxsYmFj
ayJ9KSB7CisgICAgICAgICAgICBteSAkY2xhc3NOYW1lID0gR2V0Q2FsbGJhY2tDbGFzc05hbWUo
JHBhcmFtZXRlci0+dHlwZSk7CisgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyIkY2xhc3NOYW1l
LmgifSA9IDE7CisgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJFeGNlcHRpb25Db2RlLmgifSA9
IDE7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIGlmIChhcmdzLkxl
bmd0aCgpIDw9ICRwYXJhbUluZGV4IHx8ICFhcmdzWyRwYXJhbUluZGV4XS0+SXNPYmplY3QoKSlc
biIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICAgICAgcmV0dXJu
IHRocm93RXJyb3IoVFlQRV9NSVNNQVRDSF9FUlIpO1xuIik7CisgICAgICAgICAgICBpZiAoJHBh
cmFtZXRlci0+dHlwZSBlcSAiVm9pZENhbGxiYWNrIikgeworICAgICAgICAgICAgICAgIHB1c2go
QGltcGxDb250ZW50RGVjbHMsICIgICAgUmVmUHRyPCIgLiAkcGFyYW1ldGVyLT50eXBlIC4gIj4g
JHBhcmFtZXRlck5hbWUgPSAiIC4gJGNsYXNzTmFtZSAuICI6OmNyZWF0ZShhcmdzWyRwYXJhbUlu
ZGV4XSwgZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTtcbiIpOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIFJlZlB0
cjwiIC4gJHBhcmFtZXRlci0+dHlwZSAuICI+ICRwYXJhbWV0ZXJOYW1lID0gIiAuICRjbGFzc05h
bWUgLiAiOjpjcmVhdGUoYXJnc1skcGFyYW1JbmRleF0pO1xuIik7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAkcGFyYW1JbmRleCsrOworICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgfQor
CiAgICAgICAgIGlmICgkcGFyYW1ldGVyLT50eXBlIGVxICJTZXJpYWxpemVkU2NyaXB0VmFsdWUi
KSB7CiAgICAgICAgICAgICAkaW1wbEluY2x1ZGVzeyJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCJ9
ID0gMTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgYm9vbCAke3Bh
cmFtZXRlck5hbWV9RGlkVGhyb3cgPSBmYWxzZTtcbiIpOwpAQCAtMzIzNSw2ICszMjUwLDE0IEBA
IHN1YiBHZXRWaXNpYmxlSW50ZXJmYWNlTmFtZQogICAgIHJldHVybiAkaW50ZXJmYWNlTmFtZTsK
IH0KIAorc3ViIEdldENhbGxiYWNrQ2xhc3NOYW1lCit7CisgICAgbXkgJGludGVyZmFjZU5hbWUg
PSBzaGlmdDsKKworICAgIHJldHVybiAiVjhDdXN0b21Wb2lkQ2FsbGJhY2siIGlmICRpbnRlcmZh
Y2VOYW1lIGVxICJWb2lkQ2FsbGJhY2siOworICAgIHJldHVybiAiVjgkaW50ZXJmYWNlTmFtZSI7
Cit9CisKIHN1YiBEZWJ1Z1ByaW50CiB7CiAgICAgbXkgJG91dHB1dCA9IHNoaWZ0OwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcCBiL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKaW5kZXggNWFhNTRk
YS4uNmQxODRiNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0T2JqLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RPYmouY3BwCkBAIC0yMSwxMCArMjEsMTIgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJKU1Rlc3RPYmouaCIKIAorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgiCiAjaW5jbHVk
ZSAiSURCS2V5LmgiCiAjaW5jbHVkZSAiSlNFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiSlNU
ZXN0Q2FsbGJhY2suaCIKICNpbmNsdWRlICJKU1Rlc3RPYmouaCIKICNpbmNsdWRlICJKU2xvZy5o
IgogI2luY2x1ZGUgIktVUkwuaCIKQEAgLTE3Miw3ICsxNzQsNyBAQCBib29sIEpTVGVzdE9iakNv
bnN0cnVjdG9yOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBJZGVudAogI2RlZmluZSBUSFVOS19HRU5FUkFUT1IoZ2VuZXJhdG9yKQogI2VuZGlmCiAKLXN0
YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RPYmpQcm90b3R5cGVUYWJsZVZhbHVlc1s0
Ml0gPQorc3RhdGljIGNvbnN0IEhhc2hUYWJsZVZhbHVlIEpTVGVzdE9ialByb3RvdHlwZVRhYmxl
VmFsdWVzWzQ1XSA9CiB7CiAgICAgeyAiQ09OU1RfVkFMVUVfMCIsIERvbnREZWxldGUgfCBSZWFk
T25seSwgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihq
c1Rlc3RPYmpDT05TVF9WQUxVRV8wKSwgKGludHB0cl90KTAgVEhVTktfR0VORVJBVE9SKDApIH0s
CiAgICAgeyAiQ09OU1RfVkFMVUVfMSIsIERvbnREZWxldGUgfCBSZWFkT25seSwgKGludHB0cl90
KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RPYmpDT05TVF9W
QUxVRV8xKSwgKGludHB0cl90KTAgVEhVTktfR0VORVJBVE9SKDApIH0sCkBAIC0yMTQsMTIgKzIx
NiwxNSBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T2JqUHJvdG90eXBlVGFi
bGVWYWx1ZXNbNDJdID0KICAgICB7ICJtZXRob2RXaXRoT3B0aW9uYWxBcmciLCBEb250RGVsZXRl
IHwgRnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBcmcpLCAoaW50cHRyX3QpMSBU
SFVOS19HRU5FUkFUT1IoMCkgfSwKICAgICB7ICJtZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRP
cHRpb25hbEFyZyIsIERvbnREZWxldGUgfCBGdW5jdGlvbiwgKGludHB0cl90KXN0YXRpY19jYXN0
PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25P
cHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnKSwgKGludHB0cl90KTIgVEhVTktfR0VORVJBVE9SKDAp
IH0sCiAgICAgeyAibWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzIiwg
RG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rp
b24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5k
VHdvT3B0aW9uYWxBcmdzKSwgKGludHB0cl90KTMgVEhVTktfR0VORVJBVE9SKDApIH0sCisgICAg
eyAibWV0aG9kV2l0aENhbGxiYWNrQXJnIiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRy
X3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aENhbGxiYWNrQXJnKSwgKGludHB0cl90KTEgVEhVTktfR0VORVJBVE9SKDApIH0s
CisgICAgeyAibWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tBcmciLCBEb250RGVs
ZXRlIHwgRnVuY3Rpb24sIChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFj
a0FyZyksIChpbnRwdHJfdCkyIFRIVU5LX0dFTkVSQVRPUigwKSB9LAorICAgIHsgIm1ldGhvZFdp
dGhDYWxsYmFja0FuZE9wdGlvbmFsQXJnIiwgRG9udERlbGV0ZSB8IEZ1bmN0aW9uLCAoaW50cHRy
X3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
TWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9uYWxBcmcpLCAoaW50cHRyX3QpMSBUSFVOS19HRU5F
UkFUT1IoMCkgfSwKICAgICB7ICJvdmVybG9hZGVkTWV0aG9kIiwgRG9udERlbGV0ZSB8IEZ1bmN0
aW9uLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3Rv
dHlwZUZ1bmN0aW9uT3ZlcmxvYWRlZE1ldGhvZCksIChpbnRwdHJfdCkyIFRIVU5LX0dFTkVSQVRP
UigwKSB9LAogICAgIHsgMCwgMCwgMCwgMCBUSFVOS19HRU5FUkFUT1IoMCkgfQogfTsKIAogI3Vu
ZGVmIFRIVU5LX0dFTkVSQVRPUgotc3RhdGljIEpTQ19DT05TVF9IQVNIVEFCTEUgSGFzaFRhYmxl
IEpTVGVzdE9ialByb3RvdHlwZVRhYmxlID0geyAxMzQsIDEyNywgSlNUZXN0T2JqUHJvdG90eXBl
VGFibGVWYWx1ZXMsIDAgfTsKK3N0YXRpYyBKU0NfQ09OU1RfSEFTSFRBQkxFIEhhc2hUYWJsZSBK
U1Rlc3RPYmpQcm90b3R5cGVUYWJsZSA9IHsgMTM1LCAxMjcsIEpTVGVzdE9ialByb3RvdHlwZVRh
YmxlVmFsdWVzLCAwIH07CiBjb25zdCBDbGFzc0luZm8gSlNUZXN0T2JqUHJvdG90eXBlOjpzX2lu
Zm8gPSB7ICJUZXN0T2JqUHJvdG90eXBlIiwgMCwgJkpTVGVzdE9ialByb3RvdHlwZVRhYmxlLCAw
IH07CiAKIEpTT2JqZWN0KiBKU1Rlc3RPYmpQcm90b3R5cGU6OnNlbGYoRXhlY1N0YXRlKiBleGVj
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQpAQCAtMTE4OSw2ICsxMTk0LDY1IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRo
b2RXaXRoTm9uT3B0aW9uYWxBcmdBCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90
b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0FyZyhFeGVjU3RhdGUqIGV4ZWMpCit7Cisg
ICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CisgICAgaWYgKCF0
aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdE9iajo6c19pbmZvKSkKKyAgICAgICAgcmV0dXJuIHRo
cm93Vk1UeXBlRXJyb3IoZXhlYyk7CisgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGlj
X2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7CisgICAgVGVzdE9iaiogaW1w
ID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CisgICAgaWYgKGV4
ZWMtPmFyZ3VtZW50Q291bnQoKSA8PSAwIHx8ICFleGVjLT5hcmd1bWVudCgwKS5pc09iamVjdCgp
KSB7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7Cisg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKyAgICBSZWZQdHI8VGVzdENhbGxi
YWNrPiBjYWxsYmFjayA9IEpTVGVzdENhbGxiYWNrOjpjcmVhdGUoYXNPYmplY3QoZXhlYy0+YXJn
dW1lbnQoMCkpLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSk7CisKKyAgICBpbXAtPm1ldGhv
ZFdpdGhDYWxsYmFja0FyZyhjYWxsYmFjayk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJn
KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RU
aGlzVmFsdWUoKTsKKyAgICBpZiAoIXRoaXNWYWx1ZS5pbmhlcml0cygmSlNUZXN0T2JqOjpzX2lu
Zm8pKQorICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKKyAgICBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdCh0aGlzVmFs
dWUpKTsKKyAgICBUZXN0T2JqKiBpbXAgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhp
cy0+aW1wbCgpKTsKKyAgICBpbnQgbm9uQ2FsbGJhY2sgPSBleGVjLT5hcmd1bWVudCgwKS50b0lu
dDMyKGV4ZWMpOworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPD0gMSB8fCAhZXhlYy0+
YXJndW1lbnQoMSkuaXNPYmplY3QoKSkgeworICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywg
VFlQRV9NSVNNQVRDSF9FUlIpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9
CisgICAgUmVmUHRyPFRlc3RDYWxsYmFjaz4gY2FsbGJhY2sgPSBKU1Rlc3RDYWxsYmFjazo6Y3Jl
YXRlKGFzT2JqZWN0KGV4ZWMtPmFyZ3VtZW50KDEpKSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0
KCkpOworCisgICAgaW1wLT5tZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0FyZyhu
b25DYWxsYmFjaywgY2FsbGJhY2spOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25NZXRob2RXaXRoQ2FsbGJhY2tBbmRPcHRpb25hbEFyZyhFeGVjU3RhdGUq
IGV4ZWMpCit7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7
CisgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJkpTVGVzdE9iajo6c19pbmZvKSkKKyAgICAg
ICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CisgICAgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3QodGhpc1ZhbHVlKSk7CisgICAg
VGVzdE9iaiogaW1wID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7
CisKKyAgICBpbnQgYXJnc0NvdW50ID0gZXhlYy0+YXJndW1lbnRDb3VudCgpOworICAgIGlmIChh
cmdzQ291bnQgPCAxKSB7CisgICAgICAgIGltcC0+bWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9u
YWxBcmcoKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
KyAgICB9CisKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDw9IDAgfHwgIWV4ZWMtPmFy
Z3VtZW50KDApLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFRZ
UEVfTUlTTUFUQ0hfRVJSKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQor
ICAgIFJlZlB0cjxUZXN0Q2FsbGJhY2s+IGNhbGxiYWNrID0gSlNUZXN0Q2FsbGJhY2s6OmNyZWF0
ZShhc09iamVjdChleGVjLT5hcmd1bWVudCgwKSksIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgp
KTsKKworICAgIGltcC0+bWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9uYWxBcmcoY2FsbGJhY2sp
OworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
T3ZlcmxvYWRlZE1ldGhvZDEoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEpTVmFsdWUgdGhpc1Zh
bHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmggYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RPYmouaAppbmRleCAwNjQ4NTI2Li5hNmViNTZmIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaAorKysgYi9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaApAQCAtMTE1LDYgKzExNSw5IEBA
IEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5j
dGlvbldpdGhTY3JpcHRFeGVjdXRpb25DCiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBcmcoSlNDOjpF
eGVjU3RhdGUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnKEpT
Qzo6RXhlY1N0YXRlKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRUd29PcHRpb25h
bEFyZ3MoSlNDOjpFeGVjU3RhdGUqKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0FyZyhKU0M6OkV4
ZWNTdGF0ZSopOworSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialBy
b3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tBcmcoSlND
OjpFeGVjU3RhdGUqKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhDYWxsYmFja0FuZE9wdGlvbmFsQXJnKEpTQzo6
RXhlY1N0YXRlKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2Jq
UHJvdG90eXBlRnVuY3Rpb25PdmVybG9hZGVkTWV0aG9kKEpTQzo6RXhlY1N0YXRlKik7CiAvLyBB
dHRyaWJ1dGVzCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rl
c3RPYmouaWRsIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKaW5k
ZXggYTVkYWEyNC4uNDdhMjQ4NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVGVzdE9iai5pZGwKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVz
dE9iai5pZGwKQEAgLTEwOSw2ICsxMDksMTMgQEAgbW9kdWxlIHRlc3QgewogICAgICAgICB2b2lk
ICAgIG1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnKGluIGxvbmcgbm9uT3B0
LCBpbiBbT3B0aW9uYWxdIGxvbmcgb3B0KTsKICAgICAgICAgdm9pZCAgICBtZXRob2RXaXRoTm9u
T3B0aW9uYWxBcmdBbmRUd29PcHRpb25hbEFyZ3MoaW4gbG9uZyBub25PcHQsIGluIFtPcHRpb25h
bF0gbG9uZyBvcHQxLCBpbiBsb25nIG9wdDIpOwogCisjaWYgZGVmaW5lZChURVNUSU5HX1Y4KSB8
fCBkZWZpbmVkKFRFU1RJTkdfSlMpCisgICAgICAgIC8vICdDYWxsYmFjaycgZXh0ZW5kZWQgYXR0
cmlidXRlCisgICAgICAgIHZvaWQgICAgbWV0aG9kV2l0aENhbGxiYWNrQXJnKGluIFtDYWxsYmFj
a10gVGVzdENhbGxiYWNrIGNhbGxiYWNrKTsKKyAgICAgICAgdm9pZCAgICBtZXRob2RXaXRoTm9u
Q2FsbGJhY2tBcmdBbmRDYWxsYmFja0FyZyhpbiBsb25nIG5vbkNhbGxiYWNrLCBpbiBbQ2FsbGJh
Y2tdIFRlc3RDYWxsYmFjayBjYWxsYmFjayk7CisgICAgICAgIHZvaWQgICAgbWV0aG9kV2l0aENh
bGxiYWNrQW5kT3B0aW9uYWxBcmcoaW4gW0NhbGxiYWNrLCBPcHRpb25hbF0gVGVzdENhbGxiYWNr
IGNhbGxiYWNrKTsKKyNlbmRpZgorCiAgICAgICAgIC8vICdDb252ZXJ0U2NyaXB0U3RyaW5nJyBl
eHRlbmRlZCBhdHRyaWJ1dGUKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtDb252ZXJ0U2Ny
aXB0U3RyaW5nXSBET01TdHJpbmcgc2NyaXB0U3RyaW5nQXR0cjsKIApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcCBiL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKaW5kZXggMDlkOTlmOC4uZDA3OGMw
NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2Jq
LmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3Bw
CkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiVjhET01XcmFwcGVyLmgiCiAjaW5jbHVkZSAi
VjhJc29sYXRlZENvbnRleHQuaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCisjaW5jbHVkZSAiVjhU
ZXN0Q2FsbGJhY2suaCIKICNpbmNsdWRlICJWOGxvZy5oIgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIu
aD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAtODYyLDYgKzg2Myw0NCBAQCBzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZFR3b09w
dGlvbmFsQXJnc0NhbGxiYWNrKAogICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsK
IH0KIAorc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBtZXRob2RXaXRoQ2FsbGJhY2tBcmdD
YWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIElOQ19TVEFUUygiRE9N
LlRlc3RPYmoubWV0aG9kV2l0aENhbGxiYWNrQXJnIik7CisgICAgVGVzdE9iaiogaW1wID0gVjhU
ZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA8
PSAwIHx8ICFhcmdzWzBdLT5Jc09iamVjdCgpKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihU
WVBFX01JU01BVENIX0VSUik7CisgICAgUmVmUHRyPFRlc3RDYWxsYmFjaz4gY2FsbGJhY2sgPSBW
OFRlc3RDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbMF0pOworICAgIGltcC0+bWV0aG9kV2l0aENhbGxi
YWNrQXJnKGNhbGxiYWNrKTsKKyAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7Cit9
CisKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJn
QW5kQ2FsbGJhY2tBcmdDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAg
IElOQ19TVEFUUygiRE9NLlRlc3RPYmoubWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJh
Y2tBcmciKTsKKyAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGFyZ3MuSG9s
ZGVyKCkpOworICAgIGludCBub25DYWxsYmFjayA9IHRvSW50MzIoYXJnc1swXSk7CisgICAgaWYg
KGFyZ3MuTGVuZ3RoKCkgPD0gMSB8fCAhYXJnc1sxXS0+SXNPYmplY3QoKSkKKyAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoVFlQRV9NSVNNQVRDSF9FUlIpOworICAgIFJlZlB0cjxUZXN0Q2FsbGJh
Y2s+IGNhbGxiYWNrID0gVjhUZXN0Q2FsbGJhY2s6OmNyZWF0ZShhcmdzWzFdKTsKKyAgICBpbXAt
Pm1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnKG5vbkNhbGxiYWNrLCBjYWxs
YmFjayk7CisgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOworfQorCitzdGF0aWMg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IG1ldGhvZFdpdGhDYWxsYmFja0FuZE9wdGlvbmFsQXJnQ2Fs
bGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5U
ZXN0T2JqLm1ldGhvZFdpdGhDYWxsYmFja0FuZE9wdGlvbmFsQXJnIik7CisgICAgVGVzdE9iaiog
aW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKKyAgICBpZiAoYXJncy5M
ZW5ndGgoKSA8PSAwKSB7CisgICAgICAgIGltcC0+bWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9u
YWxBcmcoKTsKKyAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOworICAgIH0K
KyAgICBpZiAoYXJncy5MZW5ndGgoKSA8PSAwIHx8ICFhcmdzWzBdLT5Jc09iamVjdCgpKQorICAg
ICAgICByZXR1cm4gdGhyb3dFcnJvcihUWVBFX01JU01BVENIX0VSUik7CisgICAgUmVmUHRyPFRl
c3RDYWxsYmFjaz4gY2FsbGJhY2sgPSBWOFRlc3RDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbMF0pOwor
ICAgIGltcC0+bWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9uYWxBcmcoY2FsbGJhY2spOworICAg
IHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKK30KKwogc3RhdGljIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBvdmVybG9hZGVkTWV0aG9kMUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMm
IGFyZ3MpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5vdmVybG9hZGVkTWV0aG9kMSIp
OwpAQCAtMTAxMyw2ICsxMDUyLDcgQEAgc3RhdGljIGNvbnN0IEJhdGNoZWRDYWxsYmFjayBUZXN0
T2JqQ2FsbGJhY2tzW10gPSB7CiAgICAgeyJtZXRob2RXaXRoT3B0aW9uYWxBcmciLCBUZXN0T2Jq
SW50ZXJuYWw6Om1ldGhvZFdpdGhPcHRpb25hbEFyZ0NhbGxiYWNrfSwKICAgICB7Im1ldGhvZFdp
dGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJnIiwgVGVzdE9iakludGVybmFsOjptZXRob2RX
aXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25hbEFyZ0NhbGxiYWNrfSwKICAgICB7Im1ldGhvZFdp
dGhOb25PcHRpb25hbEFyZ0FuZFR3b09wdGlvbmFsQXJncyIsIFRlc3RPYmpJbnRlcm5hbDo6bWV0
aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kVHdvT3B0aW9uYWxBcmdzQ2FsbGJhY2t9LAorICAgIHsi
bWV0aG9kV2l0aENhbGxiYWNrQW5kT3B0aW9uYWxBcmciLCBUZXN0T2JqSW50ZXJuYWw6Om1ldGhv
ZFdpdGhDYWxsYmFja0FuZE9wdGlvbmFsQXJnQ2FsbGJhY2t9LAogICAgIHsib3ZlcmxvYWRlZE1l
dGhvZCIsIFRlc3RPYmpJbnRlcm5hbDo6b3ZlcmxvYWRlZE1ldGhvZENhbGxiYWNrfSwKIH07CiBz
dGF0aWMgY29uc3QgQmF0Y2hlZENvbnN0YW50IFRlc3RPYmpDb25zdHNbXSA9IHsKQEAgLTEwODUs
NiArMTEyNSwxOCBAQCBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+
IENvbmZpZ3VyZVY4VGVzdE9ialRlbXBsYXRlKHY4OjpQZXJzaQogICAgIHY4OjpIYW5kbGU8djg6
OkZ1bmN0aW9uVGVtcGxhdGU+IGN1c3RvbUFyZ3NBbmRFeGNlcHRpb25Bcmd2W2N1c3RvbUFyZ3NB
bmRFeGNlcHRpb25BcmdjXSA9IHsgVjhsb2c6OkdldFJhd1RlbXBsYXRlKCkgfTsKICAgICB2ODo6
SGFuZGxlPHY4OjpTaWduYXR1cmU+IGN1c3RvbUFyZ3NBbmRFeGNlcHRpb25TaWduYXR1cmUgPSB2
ODo6U2lnbmF0dXJlOjpOZXcoZGVzYywgY3VzdG9tQXJnc0FuZEV4Y2VwdGlvbkFyZ2MsIGN1c3Rv
bUFyZ3NBbmRFeGNlcHRpb25Bcmd2KTsKICAgICBwcm90by0+U2V0KHY4OjpTdHJpbmc6Ok5ldygi
Y3VzdG9tQXJnc0FuZEV4Y2VwdGlvbiIpLCB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KFRlc3RP
YmpJbnRlcm5hbDo6Y3VzdG9tQXJnc0FuZEV4Y2VwdGlvbkNhbGxiYWNrLCB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4oKSwgY3VzdG9tQXJnc0FuZEV4Y2VwdGlvblNpZ25hdHVyZSkpOworCisgICAgLy8g
Q3VzdG9tIFNpZ25hdHVyZSAnbWV0aG9kV2l0aENhbGxiYWNrQXJnJworICAgIGNvbnN0IGludCBt
ZXRob2RXaXRoQ2FsbGJhY2tBcmdBcmdjID0gMTsKKyAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlv
blRlbXBsYXRlPiBtZXRob2RXaXRoQ2FsbGJhY2tBcmdBcmd2W21ldGhvZFdpdGhDYWxsYmFja0Fy
Z0FyZ2NdID0geyBWOFRlc3RDYWxsYmFjazo6R2V0UmF3VGVtcGxhdGUoKSB9OworICAgIHY4OjpI
YW5kbGU8djg6OlNpZ25hdHVyZT4gbWV0aG9kV2l0aENhbGxiYWNrQXJnU2lnbmF0dXJlID0gdjg6
OlNpZ25hdHVyZTo6TmV3KGRlc2MsIG1ldGhvZFdpdGhDYWxsYmFja0FyZ0FyZ2MsIG1ldGhvZFdp
dGhDYWxsYmFja0FyZ0FyZ3YpOworICAgIHByb3RvLT5TZXQodjg6OlN0cmluZzo6TmV3KCJtZXRo
b2RXaXRoQ2FsbGJhY2tBcmciKSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhUZXN0T2JqSW50
ZXJuYWw6Om1ldGhvZFdpdGhDYWxsYmFja0FyZ0NhbGxiYWNrLCB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4oKSwgbWV0aG9kV2l0aENhbGxiYWNrQXJnU2lnbmF0dXJlKSk7CisKKyAgICAvLyBDdXN0b20g
U2lnbmF0dXJlICdtZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0FyZycKKyAgICBj
b25zdCBpbnQgbWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tBcmdBcmdjID0gMjsK
KyAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRlPiBtZXRob2RXaXRoTm9uQ2FsbGJh
Y2tBcmdBbmRDYWxsYmFja0FyZ0FyZ3ZbbWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJh
Y2tBcmdBcmdjXSA9IHsgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4oKSwgVjhUZXN0
Q2FsbGJhY2s6OkdldFJhd1RlbXBsYXRlKCkgfTsKKyAgICB2ODo6SGFuZGxlPHY4OjpTaWduYXR1
cmU+IG1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnU2lnbmF0dXJlID0gdjg6
OlNpZ25hdHVyZTo6TmV3KGRlc2MsIG1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNr
QXJnQXJnYywgbWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5kQ2FsbGJhY2tBcmdBcmd2KTsKKyAg
ICBwcm90by0+U2V0KHY4OjpTdHJpbmc6Ok5ldygibWV0aG9kV2l0aE5vbkNhbGxiYWNrQXJnQW5k
Q2FsbGJhY2tBcmciKSwgdjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyhUZXN0T2JqSW50ZXJuYWw6
Om1ldGhvZFdpdGhOb25DYWxsYmFja0FyZ0FuZENhbGxiYWNrQXJnQ2FsbGJhY2ssIHY4OjpIYW5k
bGU8djg6OlZhbHVlPigpLCBtZXRob2RXaXRoTm9uQ2FsbGJhY2tBcmdBbmRDYWxsYmFja0FyZ1Np
Z25hdHVyZSkpOwogICAgIGJhdGNoQ29uZmlndXJlQ29uc3RhbnRzKGRlc2MsIHByb3RvLCBUZXN0
T2JqQ29uc3RzLCBzaXplb2YoVGVzdE9iakNvbnN0cykgLyBzaXplb2YoKlRlc3RPYmpDb25zdHMp
KTsKIAogICAgIC8vIEN1c3RvbSB0b1N0cmluZyB0ZW1wbGF0ZQo=
</data>
<flag name="review"
          id="51314"
          type_id="1"
          status="+"
          setter="dumi"
    />
          </attachment>
      

    </bug>

</bugzilla>