<?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>82599</bug_id>
          
          <creation_ts>2012-03-29 05:12:11 -0700</creation_ts>
          <short_desc>IDLParser.pm should be able to parse sequence&lt;T&gt; as method argument</short_desc>
          <delta_ts>2013-02-07 18:56:09 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Vineet Chaudhary (vineetc)">code.vineet</reporter>
          <assigned_to name="Vineet Chaudhary (vineetc)">code.vineet</assigned_to>
          <cc>abarth</cc>
    
    <cc>haraken</cc>
    
    <cc>japhet</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>591069</commentid>
    <comment_count>0</comment_count>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-03-29 05:12:11 -0700</bug_when>
    <thetext>Currently IDLParser.pm is not able to parse sequence&lt;T&gt; if it is one methods argument.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591073</commentid>
    <comment_count>1</comment_count>
      <attachid>134554</attachid>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-03-29 05:25:15 -0700</bug_when>
    <thetext>Created attachment 134554
proposed patch

Attaching proposed patch to get comments.
This is to add support for parser to parse arguments of type sequence&lt;T&gt;.
Though currently no function Source Code passes sequence&lt;T&gt; as argument but we can consider this.

Please let me know your review comments on this. Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591077</commentid>
    <comment_count>2</comment_count>
      <attachid>134554</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-03-29 05:30:24 -0700</bug_when>
    <thetext>Comment on attachment 134554
proposed patch

The patch looks OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591081</commentid>
    <comment_count>3</comment_count>
      <attachid>134554</attachid>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-03-29 05:35:11 -0700</bug_when>
    <thetext>Comment on attachment 134554
proposed patch

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

Thanks haraken for quick review.

&gt; Source/WebCore/bindings/scripts/test/CPP/WebDOMTestObj.cpp:697
&gt;  {


Just doubtful here &quot;WebDOMsequence&lt;ScriptProfile&gt;&amp; sequenceArg&quot; is this desired? Or may be this can be fixed when we actually start using sequence&lt;T&gt; as argument.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591085</commentid>
    <comment_count>4</comment_count>
      <attachid>134554</attachid>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-03-29 05:39:52 -0700</bug_when>
    <thetext>Comment on attachment 134554
proposed patch

Marking for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591087</commentid>
    <comment_count>5</comment_count>
      <attachid>134554</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-03-29 05:42:59 -0700</bug_when>
    <thetext>Comment on attachment 134554
proposed patch

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

&gt;&gt; Source/WebCore/bindings/scripts/test/CPP/WebDOMTestObj.cpp:697
&gt;&gt;  {
&gt; 
&gt; Just doubtful here &quot;WebDOMsequence&lt;ScriptProfile&gt;&amp; sequenceArg&quot; is this desired? Or may be this can be fixed when we actually start using sequence&lt;T&gt; as argument.

Oh, good catch! We are not planning to support sequence&lt;T&gt; in ObjC, GObject and CPP, for now. Then shall we skip generating code for sequence&lt;T&gt; in those three bindings? (See SkipFunction() in CodeGeneratorGObject.pm, ShouldSkipType() in CodeGeneratorCPP.pm. You might need to add something like it to CodeGeneratorObjC.pm.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591089</commentid>
    <comment_count>6</comment_count>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-03-29 05:45:00 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 134554 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=134554&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/bindings/scripts/test/CPP/WebDOMTestObj.cpp:697
&gt; &gt;&gt;  {
&gt; &gt; 
&gt; &gt; Just doubtful here &quot;WebDOMsequence&lt;ScriptProfile&gt;&amp; sequenceArg&quot; is this desired? Or may be this can be fixed when we actually start using sequence&lt;T&gt; as argument.
&gt; 
&gt; Oh, good catch! We are not planning to support sequence&lt;T&gt; in ObjC, GObject and CPP, for now. Then shall we skip generating code for sequence&lt;T&gt; in those three bindings? (See SkipFunction() in CodeGeneratorGObject.pm, ShouldSkipType() in CodeGeneratorCPP.pm. You might need to add something like it to CodeGeneratorObjC.pm.)

Sure I will update patch :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591286</commentid>
    <comment_count>7</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-29 10:32:03 -0700</bug_when>
    <thetext>Is there an example of a feature that would use this functionality?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591409</commentid>
    <comment_count>8</comment_count>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-03-29 12:03:24 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Is there an example of a feature that would use this functionality?

As of now we don&apos;t have any plan to use this functionality but we can consider the using sequence&lt;T&gt; in implementations like 
http://trac.webkit.org/browser/trunk/Source/WebCore/dom/MessagePort.idl?rev=106737#L40
where it passes Array.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591412</commentid>
    <comment_count>9</comment_count>
      <attachid>134636</attachid>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-03-29 12:04:36 -0700</bug_when>
    <thetext>Created attachment 134636
updated_patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591568</commentid>
    <comment_count>10</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-29 14:29:11 -0700</bug_when>
    <thetext>I would have thought in-parameters would use T[] rather than Sequence&lt;T&gt;, but I&apos;m not sure I fully understand the subtle differences between the two.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591716</commentid>
    <comment_count>11</comment_count>
      <attachid>134636</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-03-29 17:00:19 -0700</bug_when>
    <thetext>Comment on attachment 134636
updated_patch

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

&gt; Source/WebCore/bindings/scripts/CodeGeneratorCPP.pm:472
&gt; +                if ($codeGenerator-&gt;GetArrayType($param-&gt;type)) {
&gt; +                    next TOP;
&gt; +                }

Scattering this kind of code around is a bit dirty. Shall we put the code in ShouldSkipType($function)? e.g.

sub ShouldSkipType() {
  ...;
  foreach my $param (@{$function-&gt;parameters}) {
    return 1 if $codeGenerator-&gt;GetArrayType($param-&gt;type);
  }
  ...;
}

Same comments for all &quot;next TOP&quot; in this patch.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorObjC.pm:848
&gt;          foreach my $function (@{$dataNode-&gt;functions}) {

You can put something like ShouldSkipType() here. Maybe you need to prepare ShouldSkipType() in CodeGeneratorObjC.pm.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:3606
&gt; +                    AddToImplIncludes($arrayType);

This should be &quot;${arrayType}.h&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591717</commentid>
    <comment_count>12</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-03-29 17:00:50 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; I would have thought in-parameters would use T[] rather than Sequence&lt;T&gt;, but I&apos;m not sure I fully understand the subtle differences between the two.

vineet: Would you confirm the spec around this issue?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591983</commentid>
    <comment_count>13</comment_count>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-03-30 02:42:49 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #10)
&gt; &gt; I would have thought in-parameters would use T[] rather than Sequence&lt;T&gt;, but I&apos;m not sure I fully understand the subtle differences between the two.
&gt; 
&gt; vineet: Would you confirm the spec around this issue?

While going through spec. for MessagePort http://dev.w3.org/html5/postmsg/#dom-messageport-postmessage or http://www.w3.org/TR/html5/comms.html#messageportarray

The signature of postMessage() is like :
void postMessage(any message, optional sequence&lt;Transferable&gt; transfer);

Does that means in-parameter can use sequence&lt;T&gt; ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591991</commentid>
    <comment_count>14</comment_count>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-03-30 02:47:12 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 134636 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=134636&amp;action=review

&gt; Scattering this kind of code around is a bit dirty. Shall we put the code in ShouldSkipType($function)? e.g.
&gt; 

&gt; You can put something like ShouldSkipType() here. Maybe you need to prepare ShouldSkipType() in CodeGeneratorObjC.pm.

Added SkipFuntion and SkipAttribute.
The reason we could not keep common implementation as SkipType is 
foreach my $param (@{$function-&gt;parameters}) 

Attributes doesn&apos;t have call to &quot;parameters&quot; so I though of having separate functions is it oke?


&gt; This should be &quot;${arrayType}.h&quot;
Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591992</commentid>
    <comment_count>15</comment_count>
      <attachid>134756</attachid>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-03-30 02:47:54 -0700</bug_when>
    <thetext>Created attachment 134756
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592028</commentid>
    <comment_count>16</comment_count>
      <attachid>134756</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-03-30 04:06:16 -0700</bug_when>
    <thetext>Comment on attachment 134756
Patch

Thanks for the patch!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592029</commentid>
    <comment_count>17</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-03-30 04:06:27 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; While going through spec. for MessagePort http://dev.w3.org/html5/postmsg/#dom-messageport-postmessage or http://www.w3.org/TR/html5/comms.html#messageportarray
&gt; 
&gt; The signature of postMessage() is like :
&gt; void postMessage(any message, optional sequence&lt;Transferable&gt; transfer);
&gt; 
&gt; Does that means in-parameter can use sequence&lt;T&gt; ?

Thanks for the clarification. I think the spec supports your patch.

(In reply to comment #14)
&gt; Added SkipFuntion and SkipAttribute.
&gt; The reason we could not keep common implementation as SkipType is 
&gt; foreach my $param (@{$function-&gt;parameters}) 
&gt; 
&gt; Attributes doesn&apos;t have call to &quot;parameters&quot; so I though of having separate functions is it oke?

Yes, it is a desirable change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592033</commentid>
    <comment_count>18</comment_count>
      <attachid>134756</attachid>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-03-30 04:16:15 -0700</bug_when>
    <thetext>Comment on attachment 134756
Patch

(In reply to comment #17)
&gt; (In reply to comment #13)
&gt; &gt; While going through spec. for MessagePort http://dev.w3.org/html5/postmsg/#dom-messageport-postmessage or http://www.w3.org/TR/html5/comms.html#messageportarray
&gt; &gt; 
&gt; &gt; The signature of postMessage() is like :
&gt; &gt; void postMessage(any message, optional sequence&lt;Transferable&gt; transfer);
&gt; &gt; 
&gt; &gt; Does that means in-parameter can use sequence&lt;T&gt; ?
&gt; 
&gt; Thanks for the clarification. I think the spec supports your patch.

Thanks haraken.. :) Should I take this as next &lt;TO_DO&gt; task..?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592034</commentid>
    <comment_count>19</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-03-30 04:18:41 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; Thanks haraken.. :) Should I take this as next &lt;TO_DO&gt; task..?

We are always happy to kill custom bindings:) (unless it messes code generators)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592058</commentid>
    <comment_count>20</comment_count>
      <attachid>134756</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-30 04:54:17 -0700</bug_when>
    <thetext>Comment on attachment 134756
Patch

Clearing flags on attachment: 134756

Committed r112653: &lt;http://trac.webkit.org/changeset/112653&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>592059</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-30 04:54:23 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134554</attachid>
            <date>2012-03-29 05:25:15 -0700</date>
            <delta_ts>2012-03-29 12:04:36 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>wip_parameter_001.diff</filename>
            <type>text/plain</type>
            <size>0</size>
            <attacher name="Vineet Chaudhary (vineetc)">code.vineet</attacher>
            
              <data encoding="base64"></data>
<flag name="review"
          id="138844"
          type_id="1"
          status="-"
          setter="haraken"
    />
    <flag name="commit-queue"
          id="138845"
          type_id="3"
          status="-"
          setter="haraken"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134636</attachid>
            <date>2012-03-29 12:04:36 -0700</date>
            <delta_ts>2012-03-30 02:47:54 -0700</delta_ts>
            <desc>updated_patch</desc>
            <filename>parameter_parsing_002.diff</filename>
            <type>text/plain</type>
            <size>21917</size>
            <attacher name="Vineet Chaudhary (vineetc)">code.vineet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMjU1NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBACisyMDEyLTAzLTI5ICBWaW5lZXQg
Q2hhdWRoYXJ5ICA8cmdmNzQ4QG1vdG9yb2xhLmNvbT4KKworICAgICAgICBJRExQYXJzZXIucG0g
c2hvdWxkIGJlIGFibGUgdG8gcGFyc2Ugc2VxdWVuY2U8VD4gYXMgbWV0aG9kIGFyZ3VtZW50Lgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI1OTkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaXRoIHRoaXMg
cGF0Y2ggSURMIHBhcnNlciBzaG91bGQgc3VwcG9ydCBzZXF1ZW5jZTxUPiBhcyBtZXRob2QgYXJn
dW1lbnQuCisgICAgICAgIEN1cnJlbnQgYmVoYXZpb3VyIGlzIGFyZ3VtZW50IG5hbWUgaXMgbm90
IHBhcnNlZCBoZW5jZSBzaG93cyBlbXB0eSBzcGFjZXMgaW5zdGVhZC4KKworICAgICAgICBUZXN0
czogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCisKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JDUFAucG06IFNraXAgaW5jbHVkZSBoZWFkZXJzIGFuZCBp
bXBsZW1lbnRhdGlvbiBvZiB0eXBlIHNlcXVlbmNlPFQ+LgorICAgICAgICAoU2hvdWxkU2tpcFR5
cGUpOgorICAgICAgICAoQWRkSW5jbHVkZXNGb3JUeXBlKToKKyAgICAgICAgKEdlbmVyYXRlSGVh
ZGVyKToKKyAgICAgICAgKEdlbmVyYXRlSW1wbGVtZW50YXRpb24pOgorICAgICAgICAqIGJpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckdPYmplY3QucG06CisgICAgICAgIChTa2lwRnVuY3Rp
b24pOiBTa2lwIGltcGxlbWVudGF0aW9uIG9mIHR5cGUgc2VxdWVuY2U8VD4uCisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yT2JqQy5wbToKKyAgICAgICAgKEFkZEZvcndh
cmREZWNsYXJhdGlvbnNGb3JUeXBlKTogU2tpcCBpbmNsdWRlIGhlYWRlcnMgYW5kIGltcGxlbWVu
dGF0aW9uIG9mIHR5cGUgc2VxdWVuY2U8VD4uCisgICAgICAgIChBZGRJbmNsdWRlc0ZvclR5cGUp
OgorICAgICAgICAoR2VuZXJhdGVIZWFkZXIpOgorICAgICAgICAoR2VuZXJhdGVJbXBsZW1lbnRh
dGlvbik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06IEFk
ZCBhcHByb3ByaWF0ZSBoZWFkZXJzLgorICAgICAgICAoQ3JlYXRlQ3VzdG9tU2lnbmF0dXJlKToK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0lETFN0cnVjdHVyZS5wbTogQWRkIHN1cHBvcnQg
dG8gcGFyc2Ugc2VxdWVuY2U8VD4uCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQ
UC9XZWJET01UZXN0T2JqLmNwcDogTW9kaWZpZWQgcmVzdWx0cyBmcm9tIHJ1bi1iaW5kaW5nLXRl
c3RzLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5o
OiBEaXR0by4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRE
T01UZXN0T2JqLmNwcDogRGl0dG8uCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dP
YmplY3QvV2ViS2l0RE9NVGVzdE9iai5oOiBEaXR0by4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhTZXF1ZW5jZUFyZyk6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5oOiBEaXR0by4KKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLm1tOiBEaXR0by4KKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcDogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpUZXN0T2JqSW50ZXJuYWw6Om1ldGhvZFdpdGhTZXF1ZW5jZUFyZ0NhbGxi
YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbmZpZ3VyZVY4VGVzdE9ialRlbXBsYXRlKToKKwog
MjAxMi0wMy0yOSAgQW5kcmV5IEtvc3lha292ICA8Y2FzZXFAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFdlYiBJbnNwZWN0b3I6IGltcHJvdmUgd2luZG93IHNlbGVjdGlvbiBhY2N1cmFjeSBpbiB2
ZXJ0aWNhbCBvdmVydmlldyBvZiB0aW1lbGluZSBwYW5lbApJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yQ1BQLnBtCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckNQUC5wbQkocmV2aXNpb24g
MTEyNTE3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
Q1BQLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0xOTgsNyArMTk4LDcgQEAgc3ViIFNob3VsZFNraXBU
eXBlCiAgICAgcmV0dXJuIDEgaWYgJHR5cGVJbmZvLT5zaWduYXR1cmUtPm5hbWUgPX4gL2dldFNW
R0RvY3VtZW50LzsKIAogICAgIHJldHVybiAxIGlmICR0eXBlSW5mby0+c2lnbmF0dXJlLT50eXBl
ID1+IC9Db25zdHJ1Y3RvciQvOwotICAgIAorCiAgICAgcmV0dXJuIDEgaWYgJGNvZGVHZW5lcmF0
b3ItPkdldEFycmF5VHlwZSgkdHlwZUluZm8tPnNpZ25hdHVyZS0+dHlwZSk7CiAgICAgCiAgICAg
IyBGSVhNRTogVGhpcyBpcyB0eXBpY2FsbHkgdXNlZCB0byBhZGQgc2NyaXB0IGV4ZWN1dGlvbiBz
dGF0ZSBhcmd1bWVudHMgdG8gdGhlIG1ldGhvZC4KQEAgLTI2NCw2ICsyNjQsNyBAQCBzdWIgQWRk
SW5jbHVkZXNGb3JUeXBlCiB7CiAgICAgbXkgJHR5cGUgPSAkY29kZUdlbmVyYXRvci0+U3RyaXBN
b2R1bGUoc2hpZnQpOwogCisgICAgcmV0dXJuIGlmICRjb2RlR2VuZXJhdG9yLT5HZXRBcnJheVR5
cGUoJHR5cGUpOwogICAgIHJldHVybiBpZiAkY29kZUdlbmVyYXRvci0+SXNOb25Qb2ludGVyVHlw
ZSgkdHlwZSk7CiAgICAgcmV0dXJuIGlmICR0eXBlID1+IC9Db25zdHJ1Y3Rvci87CiAKQEAgLTQ1
Myw2ICs0NTQsNyBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKIAogICAgICMgLSBBZGQgZnVuY3Rpb25z
LgogICAgIGlmICgkbnVtRnVuY3Rpb25zID4gMCkgeworICAgICAgICBUT1A6CiAgICAgICAgIGZv
cmVhY2ggbXkgJGZ1bmN0aW9uIChAeyRkYXRhTm9kZS0+ZnVuY3Rpb25zfSkgewogICAgICAgICAg
ICAgbmV4dCBpZiBTaG91bGRTa2lwVHlwZSgkZnVuY3Rpb24pOwogICAgICAgICAgICAgbXkgJGZ1
bmN0aW9uTmFtZSA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsi
SW1wbGVtZW50ZWRBcyJ9IHx8ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lOwpAQCAtNDY1LDYg
KzQ2Nyw5IEBAIHN1YiBHZW5lcmF0ZUhlYWRlcgogICAgICAgICAgICAgbXkgJGZ1bmN0aW9uU2ln
ID0gIiRyZXR1cm5UeXBlICRmdW5jdGlvbk5hbWUoIjsKICAgICAgICAgICAgIG15ICRtZXRob2RO
YW1lID0gJGZ1bmN0aW9uTmFtZTsKICAgICAgICAgICAgIGZvcmVhY2ggbXkgJHBhcmFtIChAeyRm
dW5jdGlvbi0+cGFyYW1ldGVyc30pIHsKKyAgICAgICAgICAgICAgICBpZiAoJGNvZGVHZW5lcmF0
b3ItPkdldEFycmF5VHlwZSgkcGFyYW0tPnR5cGUpKSB7CisgICAgICAgICAgICAgICAgICAgIG5l
eHQgVE9QOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBteSAkcGFyYW1OYW1l
ID0gJHBhcmFtLT5uYW1lOwogICAgICAgICAgICAgICAgIG15ICRwYXJhbVR5cGUgPSBHZXRDUFBU
eXBlKCRwYXJhbS0+dHlwZSwgMSk7CiAgICAgICAgICAgICAgICAgJHR5cGVzVG9Gb3J3YXJkRGVj
bGFyZXskcGFyYW0tPnR5cGV9ID0gMTsKQEAgLTc3Myw2ICs3NzgsNyBAQCBzdWIgR2VuZXJhdGVJ
bXBsZW1lbnRhdGlvbgogCiAgICAgIyAtIEZ1bmN0aW9ucwogICAgIGlmICgkbnVtRnVuY3Rpb25z
ID4gMCkgeworICAgICAgICBUT1A6CiAgICAgICAgIGZvcmVhY2ggbXkgJGZ1bmN0aW9uIChAeyRk
YXRhTm9kZS0+ZnVuY3Rpb25zfSkgewogICAgICAgICAgICAgIyBUcmVhdCBDUFBQdXJlSW50ZXJm
YWNlIGFzIEN1c3RvbSBhcyB3ZWxsLCBzaW5jZSB0aGUgV2ViQ29yZSB2ZXJzaW9ucyB3aWxsIHRh
a2UgYSBzY3JpcHQgY29udGV4dCBhcyB3ZWxsCiAgICAgICAgICAgICBuZXh0IGlmIFNob3VsZFNr
aXBUeXBlKCRmdW5jdGlvbikgfHwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ1BQ
UHVyZUludGVyZmFjZSJ9OwpAQCAtNzkxLDYgKzc5Nyw5IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVu
dGF0aW9uCiAKICAgICAgICAgICAgIG15ICRmdW5jdGlvblNpZyA9ICIkcmV0dXJuVHlwZSAkY2xh
c3NOYW1lXDpcOiRmdW5jdGlvbk5hbWUoIjsKICAgICAgICAgICAgIGZvcmVhY2ggbXkgJHBhcmFt
IChAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30pIHsKKyAgICAgICAgICAgICAgICBpZiAoJGNvZGVH
ZW5lcmF0b3ItPkdldEFycmF5VHlwZSgkcGFyYW0tPnR5cGUpKSB7CisgICAgICAgICAgICAgICAg
ICAgIG5leHQgVE9QOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBteSAkcGFy
YW1OYW1lID0gJHBhcmFtLT5uYW1lOwogICAgICAgICAgICAgICAgIG15ICRwYXJhbVR5cGUgPSBH
ZXRDUFBUeXBlKCRwYXJhbS0+dHlwZSwgMSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckdPYmplY3QucG0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yR09iamVjdC5wbQkocmV2aXNp
b24gMTEyNTE3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9yR09iamVjdC5wbQkod29ya2luZyBjb3B5KQpAQCAtMjM2LDExICsyMzYsMTIgQEAgc3ViIFNr
aXBGdW5jdGlvbiB7CiAKICAgICAjIFNraXAgZnVuY3Rpb25zIHRoYXQgaGF2ZSBbIkNhbGxiYWNr
Il0gcGFyYW1ldGVycywgYmVjYXVzZSB0aGlzCiAgICAgIyBjb2RlIGdlbmVyYXRvciBkb2Vzbid0
IGtub3cgaG93IHRvIGF1dG8tZ2VuZXJhdGUgY2FsbGJhY2tzLgotICAgICMgU2tpcCBmdW5jdGlv
bnMgdGhhdCBoYXZlICJNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyIiBwYXJhbWV0ZXJzLCBiZWNhdXNl
IHRoaXMKLSAgICAjIGNvZGUgZ2VuZXJhdG9yIGRvZXNuJ3Qga25vdyBob3cgdG8gYXV0by1nZW5l
cmF0ZSBNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLgorICAgICMgU2tpcCBmdW5jdGlvbnMgdGhhdCBo
YXZlICJNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyIiBvciBzZXF1ZW5jZTxUPiBwYXJhbWV0ZXJzLCBi
ZWNhdXNlIHRoaXMKKyAgICAjIGNvZGUgZ2VuZXJhdG9yIGRvZXNuJ3Qga25vdyBob3cgdG8gYXV0
by1nZW5lcmF0ZSBNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyIG9yIHNlcXVlbmNlPFQ+LgogICAgIGZv
cmVhY2ggbXkgJHBhcmFtIChAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30pIHsKICAgICAgICAgaWYg
KCRwYXJhbS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNhbGxiYWNrIn0gfHwKLSAgICAgICAgICAg
ICRwYXJhbS0+dHlwZSBlcSAiTWVkaWFRdWVyeUxpc3RMaXN0ZW5lciIpIHsKKyAgICAgICAgICAg
ICRwYXJhbS0+dHlwZSBlcSAiTWVkaWFRdWVyeUxpc3RMaXN0ZW5lciIgfHwKKyAgICAgICAgICAg
ICRjb2RlR2VuZXJhdG9yLT5HZXRBcnJheVR5cGUoJHBhcmFtLT50eXBlKSkgewogICAgICAgICAg
ICAgcmV0dXJuIDE7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JPYmpDLnBtCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvck9iakMucG0JKHJldmlzaW9uIDEx
MjUxNykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvck9i
akMucG0JKHdvcmtpbmcgY29weSkKQEAgLTUxMSw3ICs1MTEsOCBAQCBzdWIgQWRkRm9yd2FyZERl
Y2xhcmF0aW9uc0ZvclR5cGUKICAgICBteSAkdHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5TdHJpcE1v
ZHVsZShzaGlmdCk7CiAgICAgbXkgJHB1YmxpYyA9IHNoaWZ0OwogCi0gICAgcmV0dXJuIGlmICRj
b2RlR2VuZXJhdG9yLT5Jc05vblBvaW50ZXJUeXBlKCR0eXBlKSA7CisgICAgcmV0dXJuIGlmICRj
b2RlR2VuZXJhdG9yLT5Jc05vblBvaW50ZXJUeXBlKCR0eXBlKTsKKyAgICByZXR1cm4gaWYgJGNv
ZGVHZW5lcmF0b3ItPkdldEFycmF5VHlwZSgkdHlwZSk7CiAKICAgICBteSAkY2xhc3MgPSBHZXRD
bGFzc05hbWUoJHR5cGUpOwogCkBAIC01MzMsNiArNTM0LDcgQEAgc3ViIEFkZEluY2x1ZGVzRm9y
VHlwZQogICAgIG15ICR0eXBlID0gJGNvZGVHZW5lcmF0b3ItPlN0cmlwTW9kdWxlKHNoaWZ0KTsK
IAogICAgIHJldHVybiBpZiAkY29kZUdlbmVyYXRvci0+SXNOb25Qb2ludGVyVHlwZSgkdHlwZSk7
CisgICAgcmV0dXJuIGlmICRjb2RlR2VuZXJhdG9yLT5HZXRBcnJheVR5cGUoJHR5cGUpOwogCiAg
ICAgaWYgKElzTmF0aXZlT2JqQ1R5cGUoJHR5cGUpKSB7CiAgICAgICAgIGlmICgkdHlwZSBlcSAi
Q29sb3IiKSB7CkBAIC04NDIsMTAgKzg0NCwxNCBAQCBzdWIgR2VuZXJhdGVIZWFkZXIKIAogICAg
ICMgLSBBZGQgZnVuY3Rpb25zLgogICAgIGlmICgkbnVtRnVuY3Rpb25zID4gMCkgeworICAgICAg
ICBUT1A6CiAgICAgICAgIGZvcmVhY2ggbXkgJGZ1bmN0aW9uIChAeyRkYXRhTm9kZS0+ZnVuY3Rp
b25zfSkgewogICAgICAgICAgICAgbXkgJGZ1bmN0aW9uTmFtZSA9ICRmdW5jdGlvbi0+c2lnbmF0
dXJlLT5uYW1lOwogCiAgICAgICAgICAgICBteSAkcmV0dXJuVHlwZSA9IEdldE9iakNUeXBlKCRm
dW5jdGlvbi0+c2lnbmF0dXJlLT50eXBlKTsKKyAgICAgICAgICAgIGlmICgkY29kZUdlbmVyYXRv
ci0+R2V0QXJyYXlUeXBlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT50eXBlKSkgeworICAgICAgICAg
ICAgICAgIG5leHQgVE9QOworICAgICAgICAgICAgfQogICAgICAgICAgICAgbXkgJG5lZWRzRGVw
cmVjYXRlZFZlcnNpb24gPSAoQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9ID4gMSBhbmQgJGZ1bmN0
aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJPYmpDTGVnYWN5VW5uYW1lZFBh
cmFtZXRlcnMifSk7CiAgICAgICAgICAgICBteSAkbnVtYmVyT2ZQYXJhbWV0ZXJzID0gQHskZnVu
Y3Rpb24tPnBhcmFtZXRlcnN9OwogICAgICAgICAgICAgbXkgJXR5cGVzVG9Gb3J3YXJkRGVjbGFy
ZSA9ICgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+dHlwZSA9PiAxKTsKQEAgLTg1Niw2ICs4NjIsOSBA
QCBzdWIgR2VuZXJhdGVIZWFkZXIKICAgICAgICAgICAgIGZvcmVhY2ggbXkgJHBhcmFtIChAeyRm
dW5jdGlvbi0+cGFyYW1ldGVyc30pIHsKICAgICAgICAgICAgICAgICBteSAkcGFyYW1OYW1lID0g
JHBhcmFtLT5uYW1lOwogICAgICAgICAgICAgICAgIG15ICRwYXJhbVR5cGUgPSBHZXRPYmpDVHlw
ZSgkcGFyYW0tPnR5cGUpOworICAgICAgICAgICAgICAgIGlmICgkY29kZUdlbmVyYXRvci0+R2V0
QXJyYXlUeXBlKCRwYXJhbS0+dHlwZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgbmV4dCBUT1A7
CisgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgJHR5cGVzVG9Gb3J3YXJkRGVj
bGFyZXskcGFyYW0tPnR5cGV9ID0gMTsKIApAQCAtMTE2NCw3ICsxMTczLDExIEBAIHN1YiBHZW5l
cmF0ZUltcGxlbWVudGF0aW9uCiAKICAgICAjIC0gQXR0cmlidXRlcwogICAgIGlmICgkbnVtQXR0
cmlidXRlcyA+IDApIHsKKyAgICAgICAgVE9QOgogICAgICAgICBmb3JlYWNoIG15ICRhdHRyaWJ1
dGUgKEB7JGRhdGFOb2RlLT5hdHRyaWJ1dGVzfSkgeworICAgICAgICAgICAgaWYgKCRjb2RlR2Vu
ZXJhdG9yLT5HZXRBcnJheVR5cGUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlKSkgeworICAg
ICAgICAgICAgICAgIG5leHQgVE9QOworICAgICAgICAgICAgfQogICAgICAgICAgICAgQWRkSW5j
bHVkZXNGb3JUeXBlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlwZSk7CiAKICAgICAgICAgICAg
IG15ICRpZGxUeXBlID0gJGNvZGVHZW5lcmF0b3ItPlN0cmlwTW9kdWxlKCRhdHRyaWJ1dGUtPnNp
Z25hdHVyZS0+dHlwZSk7CkBAIC0xNDYwLDcgKzE0NzMsMTEgQEAgc3ViIEdlbmVyYXRlSW1wbGVt
ZW50YXRpb24KIAogICAgICMgLSBGdW5jdGlvbnMKICAgICBpZiAoJG51bUZ1bmN0aW9ucyA+IDAp
IHsKKyAgICAgICAgVE9QOgogICAgICAgICBmb3JlYWNoIG15ICRmdW5jdGlvbiAoQHskZGF0YU5v
ZGUtPmZ1bmN0aW9uc30pIHsKKyAgICAgICAgICAgIGlmICgkY29kZUdlbmVyYXRvci0+R2V0QXJy
YXlUeXBlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLT50eXBlKSkgeworICAgICAgICAgICAgICAgIG5l
eHQgVE9QOworICAgICAgICAgICAgfQogICAgICAgICAgICAgQWRkSW5jbHVkZXNGb3JUeXBlKCRm
dW5jdGlvbi0+c2lnbmF0dXJlLT50eXBlKTsKIAogICAgICAgICAgICAgbXkgJGZ1bmN0aW9uTmFt
ZSA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lOwpAQCAtMTQ3NSw2ICsxNDkyLDkgQEAgc3Vi
IEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgIG15ICRwYXJhbWV0ZXJJbmRleCA9
IDA7CiAgICAgICAgICAgICBteSAkZnVuY3Rpb25TaWcgPSAiLSAoJHJldHVyblR5cGUpJGZ1bmN0
aW9uTmFtZSI7CiAgICAgICAgICAgICBmb3JlYWNoIG15ICRwYXJhbSAoQHskZnVuY3Rpb24tPnBh
cmFtZXRlcnN9KSB7CisgICAgICAgICAgICAgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5HZXRBcnJh
eVR5cGUoJHBhcmFtLT50eXBlKSkgeworICAgICAgICAgICAgICAgICAgICBuZXh0IFRPUDsKKyAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgbXkgJHBhcmFtTmFtZSA9ICRwYXJhbS0+
bmFtZTsKICAgICAgICAgICAgICAgICBteSAkcGFyYW1UeXBlID0gR2V0T2JqQ1R5cGUoJHBhcmFt
LT50eXBlKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9yVjgucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9yVjgucG0JKHJldmlzaW9uIDExMjUxNykKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCSh3b3JraW5nIGNvcHkpCkBAIC0z
NjAxLDggKzM2MDEsMTMgQEAgc3ViIENyZWF0ZUN1c3RvbVNpZ25hdHVyZQogICAgICAgICAgICAg
ICAgICRyZXN1bHQgLj0gInY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uVGVtcGxhdGU+KCkiOwogICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBteSAkdHlwZSA9ICRwYXJhbWV0ZXIt
PnR5cGU7Ci0gICAgICAgICAgICAgICAgbXkgJGhlYWRlciA9IEdldFY4SGVhZGVyTmFtZSgkdHlw
ZSk7Ci0gICAgICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoJGhlYWRlcik7CisgICAgICAg
ICAgICAgICAgbXkgJGFycmF5VHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5HZXRBcnJheVR5cGUoJHR5
cGUpOworICAgICAgICAgICAgICAgIGlmICgkYXJyYXlUeXBlKSB7CisgICAgICAgICAgICAgICAg
ICAgIEFkZFRvSW1wbEluY2x1ZGVzKCRhcnJheVR5cGUpOworICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgIG15ICRoZWFkZXIgPSBHZXRWOEhlYWRlck5hbWUoJHR5
cGUpOworICAgICAgICAgICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygkaGVhZGVyKTsKKyAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgJHJlc3VsdCAuPSAiVjgke3R5cGV9OjpH
ZXRSYXdUZW1wbGF0ZSgpIjsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMU3RydWN0dXJlLnBtCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMU3RydWN0dXJlLnBtCShy
ZXZpc2lvbiAxMTI1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETFN0
cnVjdHVyZS5wbQkod29ya2luZyBjb3B5KQpAQCAtMTA0LDcgKzEwNCw3IEBAIG91ciAkc2V0dGVy
UmFpc2VzU2VsZWN0b3IgPSAnXGJzZXR0ZXJccysKIG91ciAkdHlwZU5hbWVzcGFjZVNlbGVjdG9y
ID0gJygoPzonIC4gJGlkbElkIC4gJyo6OikqKVxzKignIC4gJGlkbERhdGFUeXBlIC4gJyopJzsK
IAogb3VyICRpbnRlcmZhY2VTZWxlY3RvciA9ICdpbnRlcmZhY2VccyooKD86JyAuICRleHRlbmRl
ZEF0dHJpYnV0ZVN5bnRheCAuICcgKT8pKCcgLiAkaWRsSWROcyAuICcqKVxzKig/OjooXHMqW157
XSopKT97KFstYS16QS1aMC05XyI9XHMoKSw7OlxbXF08PiZcfF0qKSc7Ci1vdXIgJGludGVyZmFj
ZU1ldGhvZFNlbGVjdG9yID0gJ1xzKigoPzonIC4gJGV4dGVuZGVkQXR0cmlidXRlU3ludGF4IC4g
JyApPykoc3RhdGljXHMrKT8nIC4gJHN1cHBvcnRlZFR5cGVzIC4gJ1xzKignIC4gJGlkbElkTnMg
LiAnKilccypcKFxzKihbYS16QS1aMC05OlxzLD1cW1xdXSopJzsKK291ciAkaW50ZXJmYWNlTWV0
aG9kU2VsZWN0b3IgPSAnXHMqKCg/OicgLiAkZXh0ZW5kZWRBdHRyaWJ1dGVTeW50YXggLiAnICk/
KShzdGF0aWNccyspPycgLiAkc3VwcG9ydGVkVHlwZXMgLiAnXHMqKCcgLiAkaWRsSWROcyAuICcq
KVxzKlwoXHMqKFthLXpBLVowLTk6XHMsPVxbXF08Pl0qKSc7CiBvdXIgJGludGVyZmFjZVBhcmFt
ZXRlclNlbGVjdG9yID0gJyhpbnxvdXQpXHMqKCg/OicgLiAkZXh0ZW5kZWRBdHRyaWJ1dGVTeW50
YXggLiAnICk/KScgLiAkc3VwcG9ydGVkVHlwZXMgLiAnXHMqKCcgLiAkaWRsSWROcyAuICcqKSc7
CiAKIG91ciAkaW50ZXJmYWNlQXR0cmlidXRlU2VsZWN0b3IgPSAnXHMqKHJlYWRvbmx5IGF0dHJp
YnV0ZXxhdHRyaWJ1dGUpXHMqKCcgLiAkZXh0ZW5kZWRBdHRyaWJ1dGVTeW50YXggLiAnICk/JyAu
ICRzdXBwb3J0ZWRUeXBlcyAuICdccyooJyAuICRpZGxUeXBlIC4gJyopJzsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJE
T01UZXN0T2JqLmNwcAkocmV2aXNpb24gMTEyNTE3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDAsNyArNDAsNiBAQAogI2luY2x1ZGUgIldlYkRPTWMuaCIKICNpbmNsdWRlICJXZWJET01kLmgi
CiAjaW5jbHVkZSAiV2ViRE9NZS5oIgotI2luY2x1ZGUgIldlYkRPTXNlcXVlbmNlLmgiCiAjaW5j
bHVkZSAiV2ViRXhjZXB0aW9uSGFuZGxlci5oIgogI2luY2x1ZGUgIldlYk5hdGl2ZUV2ZW50TGlz
dGVuZXIuaCIKICNpbmNsdWRlICJhLmgiCkBAIC00OSw3ICs0OCw2IEBACiAjaW5jbHVkZSAiYy5o
IgogI2luY2x1ZGUgImQuaCIKICNpbmNsdWRlICJlLmgiCi0jaW5jbHVkZSAic2VxdWVuY2UuaCIK
ICNpbmNsdWRlICJ3dGYvdGV4dC9BdG9taWNTdHJpbmcuaCIKICNpbmNsdWRlIDx3dGYvR2V0UHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtNjk1LDE0ICs2OTMsNiBAQCBXZWJET01U
ZXN0T2JqIFdlYkRPTVRlc3RPYmo6Om9iak1ldGhvZFdpCiAgICAgcmV0dXJuIHRvV2ViS2l0KFdU
Rjo6Z2V0UHRyKGltcGwoKS0+b2JqTWV0aG9kV2l0aEFyZ3MoaW50QXJnLCBzdHJBcmcsIHRvV2Vi
Q29yZShvYmpBcmcpKSkpOwogfQogCi12b2lkIFdlYkRPTVRlc3RPYmo6Om1ldGhvZFdpdGhTZXF1
ZW5jZUFyZyhjb25zdCBXZWJET01zZXF1ZW5jZSYgKQotewotICAgIGlmICghaW1wbCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpbXBsKCktPm1ldGhvZFdpdGhTZXF1ZW5jZUFyZyh0b1dlYkNv
cmUoKSk7Ci19Ci0KIFdlYkRPTVRlc3RPYmogV2ViRE9NVGVzdE9iajo6bWV0aG9kVGhhdFJlcXVp
cmVzQWxsQXJnc0FuZFRocm93cyhjb25zdCBXZWJET01TdHJpbmcmIHN0ckFyZywgY29uc3QgV2Vi
RE9NVGVzdE9iaiYgb2JqQXJnKQogewogICAgIGlmICghaW1wbCgpKQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0
T2JqLmgJKHJldmlzaW9uIDExMjUxNykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw2
IEBAIGNsYXNzIFdlYkRPTWJvb2w7CiBjbGFzcyBXZWJET01jOwogY2xhc3MgV2ViRE9NZDsKIGNs
YXNzIFdlYkRPTWU7Ci1jbGFzcyBXZWJET01zZXF1ZW5jZTsKIAogY2xhc3MgV2ViRE9NVGVzdE9i
aiA6IHB1YmxpYyBXZWJET01PYmplY3QgewogcHVibGljOgpAQCAtMTUwLDcgKzE0OSw2IEBAIHB1
YmxpYzoKICAgICBpbnQgaW50TWV0aG9kV2l0aEFyZ3MoaW50IGludEFyZywgY29uc3QgV2ViRE9N
U3RyaW5nJiBzdHJBcmcsIGNvbnN0IFdlYkRPTVRlc3RPYmomIG9iakFyZyk7CiAgICAgV2ViRE9N
VGVzdE9iaiBvYmpNZXRob2QoKTsKICAgICBXZWJET01UZXN0T2JqIG9iak1ldGhvZFdpdGhBcmdz
KGludCBpbnRBcmcsIGNvbnN0IFdlYkRPTVN0cmluZyYgc3RyQXJnLCBjb25zdCBXZWJET01UZXN0
T2JqJiBvYmpBcmcpOwotICAgIHZvaWQgbWV0aG9kV2l0aFNlcXVlbmNlQXJnKGNvbnN0IFdlYkRP
TXNlcXVlbmNlJiApOwogICAgIFdlYkRPTVRlc3RPYmogbWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJn
c0FuZFRocm93cyhjb25zdCBXZWJET01TdHJpbmcmIHN0ckFyZywgY29uc3QgV2ViRE9NVGVzdE9i
aiYgb2JqQXJnKTsKICAgICB2b2lkIHNlcmlhbGl6ZWRWYWx1ZShjb25zdCBXZWJET01TdHJpbmcm
IHNlcmlhbGl6ZWRBcmcpOwogICAgIHZvaWQgaWRiS2V5KGNvbnN0IFdlYkRPTUlEQktleSYga2V5
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dl
YktpdERPTVRlc3RPYmouY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouY3BwCShyZXZpc2lvbiAxMTI1
MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJL
aXRET01UZXN0T2JqLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsOCArNTcsNiBAQAogI2luY2x1
ZGUgIndlYmtpdC9XZWJLaXRET01kUHJpdmF0ZS5oIgogI2luY2x1ZGUgIndlYmtpdC9XZWJLaXRE
T01lLmgiCiAjaW5jbHVkZSAid2Via2l0L1dlYktpdERPTWVQcml2YXRlLmgiCi0jaW5jbHVkZSAi
d2Via2l0L1dlYktpdERPTXNlcXVlbmNlLmgiCi0jaW5jbHVkZSAid2Via2l0L1dlYktpdERPTXNl
cXVlbmNlUHJpdmF0ZS5oIgogI2luY2x1ZGUgIndlYmtpdGRlZmluZXMuaCIKICNpbmNsdWRlICJ3
ZWJraXRnbG9iYWxzcHJpdmF0ZS5oIgogI2luY2x1ZGUgIndlYmtpdG1hcnNoYWwuaCIKQEAgLTEw
MzQsMjEgKzEwMzIsNiBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX29ial9tZXRob2Rfd2l0aF9hcmdz
CiAgICAgcmV0dXJuIHJlczsKIH0KIAotdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2Rf
d2l0aF9zZXF1ZW5jZV9hcmcoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9Nc2VxdWVu
Y2UqICkKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6OkpTTWFp
blRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRlbSA9IFdl
YktpdDo6Y29yZShzZWxmKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKCk7Ci0gICAgV2ViQ29yZTo6
c2VxdWVuY2UgKiBjb252ZXJ0ZWRfID0gTlVMTDsKLSAgICBpZiAoICE9IE5VTEwpIHsKLSAgICAg
ICAgY29udmVydGVkXyA9IFdlYktpdDo6Y29yZSgpOwotICAgICAgICBnX3JldHVybl9pZl9mYWls
KGNvbnZlcnRlZF8pOwotICAgIH0KLSAgICBpdGVtLT5tZXRob2RXaXRoU2VxdWVuY2VBcmcoY29u
dmVydGVkXyk7Ci19Ci0KIFdlYktpdERPTVRlc3RPYmoqCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21l
dGhvZF90aGF0X3JlcXVpcmVzX2FsbF9hcmdzX2FuZF90aHJvd3MoV2ViS2l0RE9NVGVzdE9iaiog
c2VsZiwgY29uc3QgZ2NoYXIqIHN0cl9hcmcsIFdlYktpdERPTVRlc3RPYmoqIG9ial9hcmcsIEdF
cnJvciAqKmVycm9yKQogewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouaAkocmV2
aXNpb24gMTEyNTE3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dP
YmplY3QvV2ViS2l0RE9NVGVzdE9iai5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsMTcgKzExNiw2
IEBAIFdFQktJVF9BUEkgV2ViS2l0RE9NVGVzdE9iaioKIHdlYmtpdF9kb21fdGVzdF9vYmpfb2Jq
X21ldGhvZF93aXRoX2FyZ3MoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgaW50X2FyZywg
Y29uc3QgZ2NoYXIqIHN0cl9hcmcsIFdlYktpdERPTVRlc3RPYmoqIG9ial9hcmcpOwogCiAvKioK
LSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfc2VxdWVuY2VfYXJnOgotICogQHNl
bGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEA6IEEgI1dlYktpdERPTXNlcXVlbmNlCi0gKgot
ICogUmV0dXJuczoKLSAqCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90ZXN0X29i
al9tZXRob2Rfd2l0aF9zZXF1ZW5jZV9hcmcoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0
RE9Nc2VxdWVuY2UqICk7Ci0KLS8qKgogICogd2Via2l0X2RvbV90ZXN0X29ial9tZXRob2RfdGhh
dF9yZXF1aXJlc19hbGxfYXJnc19hbmRfdGhyb3dzOgogICogQHNlbGY6IEEgI1dlYktpdERPTVRl
c3RPYmoKICAqIEBzdHJfYXJnOiBBICNnY2hhcgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAJKHJldmlzaW9uIDEx
MjUxNykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RP
YmouY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw2IEBACiAjaW5jbHVkZSAiSlNkLmgi
CiAjaW5jbHVkZSAiSlNlLmgiCiAjaW5jbHVkZSAiSlNpbnQuaCIKLSNpbmNsdWRlICJKU3NlcXVl
bmNlLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIlNWR0RvY3VtZW50LmgiCiAjaW5j
bHVkZSAiU1ZHU3RhdGljUHJvcGVydHlUZWFyT2ZmLmgiCkBAIC0xNDI5LDEwICsxNDI4LDEwIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBUZXN0T2JqKiBp
bXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CiAgICAgaWYg
KGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
ZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpKTsKLSAg
ICBzZXF1ZW5jZSogKHRvc2VxdWVuY2UoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhlYywgMCwg
RGVmYXVsdElzVW5kZWZpbmVkKSkpOworICAgIHNlcXVlbmNlPFNjcmlwdFByb2ZpbGU+KiBzZXF1
ZW5jZUFyZyh0b05hdGl2ZUFycmF5PFNjcmlwdFByb2ZpbGU+KGV4ZWMsIE1BWUJFX01JU1NJTkdf
UEFSQU1FVEVSKGV4ZWMsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpKTsKICAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7Ci0gICAgaW1wbC0+bWV0aG9kV2l0aFNlcXVlbmNlQXJnKCk7CisgICAgaW1wbC0+bWV0
aG9kV2l0aFNlcXVlbmNlQXJnKHNlcXVlbmNlQXJnKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5oCShyZXZpc2lvbiAxMTI1
MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0
T2JqLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDggKzQzLDYgQEAKIEBjbGFzcyBET01jOwogQGNs
YXNzIERPTWQ7CiBAY2xhc3MgRE9NZTsKLUBjbGFzcyBET01zZXF1ZW5jZTsKLUBjbGFzcyBET01z
ZXF1ZW5jZTxTY3JpcHRQcm9maWxlPjsKIEBjbGFzcyBOU1N0cmluZzsKIEBwcm90b2NvbCBET01F
dmVudExpc3RlbmVyOwogCkBAIC0xNzcsOCArMTc1LDYgQEAgZW51bSB7CiAtIChpbnQpaW50TWV0
aG9kV2l0aEFyZ3M6KGludClpbnRBcmcgc3RyQXJnOihOU1N0cmluZyAqKXN0ckFyZyBvYmpBcmc6
KERPTVRlc3RPYmogKilvYmpBcmc7CiAtIChET01UZXN0T2JqICopb2JqTWV0aG9kOwogLSAoRE9N
VGVzdE9iaiAqKW9iak1ldGhvZFdpdGhBcmdzOihpbnQpaW50QXJnIHN0ckFyZzooTlNTdHJpbmcg
KilzdHJBcmcgb2JqQXJnOihET01UZXN0T2JqICopb2JqQXJnOwotLSAodm9pZCltZXRob2RXaXRo
U2VxdWVuY2VBcmc6KERPTXNlcXVlbmNlICopOwotLSAoRE9Nc2VxdWVuY2U8U2NyaXB0UHJvZmls
ZT4gKiltZXRob2RSZXR1cm5pbmdTZXF1ZW5jZTooaW50KWludEFyZzsKIC0gKERPTVRlc3RPYmog
KiltZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzOihOU1N0cmluZyAqKXN0ckFyZyBv
YmpBcmc6KERPTVRlc3RPYmogKilvYmpBcmc7CiAtICh2b2lkKXNlcmlhbGl6ZWRWYWx1ZTooTlNT
dHJpbmcgKilzZXJpYWxpemVkQXJnOwogLSAodm9pZClpZGJLZXk6KERPTUlEQktleSAqKWtleTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RP
YmoubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L09iakMvRE9NVGVzdE9iai5tbQkocmV2aXNpb24gMTEyNTE3KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5tbQkod29ya2luZyBjb3B5KQpA
QCAtNTAsOCArNTAsNiBAQAogI2ltcG9ydCAiRE9NY0ludGVybmFsLmgiCiAjaW1wb3J0ICJET01k
SW50ZXJuYWwuaCIKICNpbXBvcnQgIkRPTWVJbnRlcm5hbC5oIgotI2ltcG9ydCAiRE9Nc2VxdWVu
Y2U8U2NyaXB0UHJvZmlsZT5JbnRlcm5hbC5oIgotI2ltcG9ydCAiRE9Nc2VxdWVuY2VJbnRlcm5h
bC5oIgogI2ltcG9ydCAiRGljdGlvbmFyeS5oIgogI2ltcG9ydCAiRG9jdW1lbnQuaCIKICNpbXBv
cnQgIkV2ZW50TGlzdGVuZXIuaCIKQEAgLTc3LDggKzc1LDYgQEAKICNpbXBvcnQgImMuaCIKICNp
bXBvcnQgImQuaCIKICNpbXBvcnQgImUuaCIKLSNpbXBvcnQgInNlcXVlbmNlLmgiCi0jaW1wb3J0
ICJzZXF1ZW5jZTxTY3JpcHRQcm9maWxlPi5oIgogI2ltcG9ydCA8d3RmL0dldFB0ci5oPgogCiAj
ZGVmaW5lIElNUEwgcmVpbnRlcnByZXRfY2FzdDxXZWJDb3JlOjpUZXN0T2JqKj4oX2ludGVybmFs
KQpAQCAtMjA2LDIwICsyMDIsNiBAQCAtICh2b2lkKXNldFRlc3RPYmpBdHRyOihET01UZXN0T2Jq
ICopbmV3CiAgICAgSU1QTC0+c2V0VGVzdE9iakF0dHIoY29yZShuZXdUZXN0T2JqQXR0cikpOwog
fQogCi0tIChET01zZXF1ZW5jZTxTY3JpcHRQcm9maWxlPiAqKXNlcXVlbmNlQXR0cgotewotICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICByZXR1cm4ga2l0KFdU
Rjo6Z2V0UHRyKElNUEwtPnNlcXVlbmNlQXR0cigpKSk7Ci19Ci0KLS0gKHZvaWQpc2V0U2VxdWVu
Y2VBdHRyOihET01zZXF1ZW5jZTxTY3JpcHRQcm9maWxlPiAqKW5ld1NlcXVlbmNlQXR0cgotewot
ICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBBU1NFUlQobmV3
U2VxdWVuY2VBdHRyKTsKLQotICAgIElNUEwtPnNldFNlcXVlbmNlQXR0cihjb3JlKG5ld1NlcXVl
bmNlQXR0cikpOwotfQotCiAtIChET01UZXN0T2JqICopWE1MT2JqQXR0cgogewogICAgIFdlYkNv
cmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKQEAgLTc2MSwxOCArNzQzLDYgQEAgLSAo
RE9NVGVzdE9iaiAqKW9iak1ldGhvZFdpdGhBcmdzOihpbnQpaQogICAgIHJldHVybiBraXQoV1RG
OjpnZXRQdHIoSU1QTC0+b2JqTWV0aG9kV2l0aEFyZ3MoaW50QXJnLCBzdHJBcmcsIGNvcmUob2Jq
QXJnKSkpKTsKIH0KIAotLSAodm9pZCltZXRob2RXaXRoU2VxdWVuY2VBcmc6KERPTXNlcXVlbmNl
ICopCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIElN
UEwtPm1ldGhvZFdpdGhTZXF1ZW5jZUFyZyhjb3JlKCkpOwotfQotCi0tIChET01zZXF1ZW5jZTxT
Y3JpcHRQcm9maWxlPiAqKW1ldGhvZFJldHVybmluZ1NlcXVlbmNlOihpbnQpaW50QXJnCi17Ci0g
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIHJldHVybiBraXQo
V1RGOjpnZXRQdHIoSU1QTC0+bWV0aG9kUmV0dXJuaW5nU2VxdWVuY2UoaW50QXJnKSkpOwotfQot
CiAtIChET01UZXN0T2JqICopbWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93czooTlNT
dHJpbmcgKilzdHJBcmcgb2JqQXJnOihET01UZXN0T2JqICopb2JqQXJnCiB7CiAgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAJKHJldmlzaW9u
IDExMjUxNykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RPYmouY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiU2Ny
aXB0QXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q2FsbFN0YWNrLmgiCiAjaW5jbHVkZSAi
U2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5oIgorI2luY2x1ZGUgIlNjcmlwdFByb2ZpbGUiCiAjaW5j
bHVkZSAiU2NyaXB0UHJvZmlsZS5oIgogI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5o
IgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgpAQCAtNTMsNyArNTQsNiBAQAogI2luY2x1ZGUgIlY4
ZC5oIgogI2luY2x1ZGUgIlY4ZS5oIgogI2luY2x1ZGUgIlY4aW50LmgiCi0jaW5jbHVkZSAiVjhz
ZXF1ZW5jZS5oIgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTEwNzYsOCArMTA3Niw4IEBAIHN0
YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbWV0aG9kV2l0aFMKICAgICBpZiAoYXJncy5MZW5n
dGgoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJOb3QgZW5vdWdoIGFyZ3VtZW50
cyIsIFY4UHJveHk6OlR5cGVFcnJvcik7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0
b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKLSAgICBFWENFUFRJT05fQkxPQ0soc2VxdWVuY2UqLCAs
IFY4c2VxdWVuY2U6Okhhc0luc3RhbmNlKE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAs
IERlZmF1bHRJc1VuZGVmaW5lZCkpID8gVjhzZXF1ZW5jZTo6dG9OYXRpdmUodjg6OkhhbmRsZTx2
ODo6T2JqZWN0Pjo6Q2FzdChNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0
SXNVbmRlZmluZWQpKSkgOiAwKTsKLSAgICBpbXAtPm1ldGhvZFdpdGhTZXF1ZW5jZUFyZygpOwor
ICAgIEVYQ0VQVElPTl9CTE9DSyhzZXF1ZW5jZTxTY3JpcHRQcm9maWxlPiosIHNlcXVlbmNlQXJn
LCB0b05hdGl2ZUFycmF5PFNjcmlwdFByb2ZpbGU+KE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFy
Z3MsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpKTsKKyAgICBpbXAtPm1ldGhvZFdpdGhTZXF1ZW5j
ZUFyZyhzZXF1ZW5jZUFyZyk7CiAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOwog
fQogCkBAIC0yMDcxLDcgKzIwNzEsNyBAQCBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0
aW9uVGVtcGxhCiAKICAgICAvLyBDdXN0b20gU2lnbmF0dXJlICdtZXRob2RXaXRoU2VxdWVuY2VB
cmcnCiAgICAgY29uc3QgaW50IG1ldGhvZFdpdGhTZXF1ZW5jZUFyZ0FyZ2MgPSAxOwotICAgIHY4
OjpIYW5kbGU8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IG1ldGhvZFdpdGhTZXF1ZW5jZUFyZ0FyZ3Zb
bWV0aG9kV2l0aFNlcXVlbmNlQXJnQXJnY10gPSB7IFY4c2VxdWVuY2U6OkdldFJhd1RlbXBsYXRl
KCkgfTsKKyAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRlPiBtZXRob2RXaXRoU2Vx
dWVuY2VBcmdBcmd2W21ldGhvZFdpdGhTZXF1ZW5jZUFyZ0FyZ2NdID0geyBWOHNlcXVlbmNlPFNj
cmlwdFByb2ZpbGU+OjpHZXRSYXdUZW1wbGF0ZSgpIH07CiAgICAgdjg6OkhhbmRsZTx2ODo6U2ln
bmF0dXJlPiBtZXRob2RXaXRoU2VxdWVuY2VBcmdTaWduYXR1cmUgPSB2ODo6U2lnbmF0dXJlOjpO
ZXcoZGVzYywgbWV0aG9kV2l0aFNlcXVlbmNlQXJnQXJnYywgbWV0aG9kV2l0aFNlcXVlbmNlQXJn
QXJndik7CiAgICAgcHJvdG8tPlNldCh2ODo6U3RyaW5nOjpOZXcoIm1ldGhvZFdpdGhTZXF1ZW5j
ZUFyZyIpLCB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KFRlc3RPYmpJbnRlcm5hbDo6bWV0aG9k
V2l0aFNlcXVlbmNlQXJnQ2FsbGJhY2ssIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpLCBtZXRob2RX
aXRoU2VxdWVuY2VBcmdTaWduYXR1cmUpKTsKIAo=
</data>
<flag name="review"
          id="138935"
          type_id="1"
          status="-"
          setter="haraken"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134756</attachid>
            <date>2012-03-30 02:47:54 -0700</date>
            <delta_ts>2012-03-30 04:54:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wip_parameter_003.diff</filename>
            <type>text/plain</type>
            <size>23290</size>
            <attacher name="Vineet Chaudhary (vineetc)">code.vineet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMjY0NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ4IEBACisyMDEyLTAzLTMwICBWaW5lZXQg
Q2hhdWRoYXJ5ICA8cmdmNzQ4QG1vdG9yb2xhLmNvbT4KKworICAgICAgICBJRExQYXJzZXIucG0g
c2hvdWxkIGJlIGFibGUgdG8gcGFyc2Ugc2VxdWVuY2U8VD4gYXMgbWV0aG9kIGFyZ3VtZW50Lgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODI1OTkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaXRoIHRoaXMg
cGF0Y2ggSURMIHBhcnNlciBzaG91bGQgc3VwcG9ydCBzZXF1ZW5jZTxUPiBhcyBtZXRob2QgYXJn
dW1lbnQuCisgICAgICAgIEN1cnJlbnQgYmVoYXZpb3VyIGlzIGFyZ3VtZW50IG5hbWUgaXMgbm90
IHBhcnNlZCBoZW5jZSBzaG93cyBlbXB0eSBzcGFjZXMgaW5zdGVhZC4KKworICAgICAgICBUZXN0
czogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCisKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JDUFAucG06CisgICAgICAgIChTa2lwRnVuY3Rpb24pOiBT
a2lwIGZ1bmN0aW9ucyBmb3Igc3BlY2lmaWMgdHlwZS4KKyAgICAgICAgKFNraXBBdHRyaWJ1dGUp
OiBTa2lwIGZ1bmN0aW9ucyBmb3Igc3BlY2lmaWMgdHlwZS4KKyAgICAgICAgKEFkZEluY2x1ZGVz
Rm9yVHlwZSk6IFNraXAgaGVhZGVyIGZvciBzZXF1ZW5jZTxUPiB0eXBlLgorICAgICAgICAoR2Vu
ZXJhdGVIZWFkZXIpOiBTa2lwIGhlYWRlciBhbmQgZGVjbGFyYXRpb24gZm9yIHNlcXVlbmNlPFQ+
IHR5cGUuCisgICAgICAgIChHZW5lcmF0ZUltcGxlbWVudGF0aW9uKTogU2tpcCBoZWFkZXIgYW5k
IGltcGxlbWVudGF0aW9uIGZvciBzZXF1ZW5jZTxUPiB0eXBlLgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvckdPYmplY3QucG06CisgICAgICAgIChTa2lwRnVuY3Rpb24p
OiBTa2lwIGZ1bmN0aW9ucyBmb3Igc2VxdWVuY2U8VD4gdHlwZS4KKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JPYmpDLnBtOgorICAgICAgICAoU2tpcEZ1bmN0aW9uKTog
U2tpcCBmdW5jdGlvbnMgZm9yIHNwZWNpZmljIHR5cGUuCisgICAgICAgIChTa2lwQXR0cmlidXRl
KTogU2tpcCBmdW5jdGlvbnMgZm9yIHNwZWNpZmljIHR5cGUuCisgICAgICAgIChBZGRGb3J3YXJk
RGVjbGFyYXRpb25zRm9yVHlwZSk6IFNraXAgaGVhZGVyIGZvciBzZXF1ZW5jZTxUPiB0eXBlLgor
ICAgICAgICAoQWRkSW5jbHVkZXNGb3JUeXBlKTogU2tpcCBoZWFkZXIgZm9yIHNlcXVlbmNlPFQ+
IHR5cGUuCisgICAgICAgIChHZW5lcmF0ZUhlYWRlcik6U2tpcCBoZWFkZXIgYW5kIGRlY2xhcmF0
aW9uIGZvciBzZXF1ZW5jZTxUPiB0eXBlLgorICAgICAgICAoR2VuZXJhdGVJbXBsZW1lbnRhdGlv
bik6IFNraXAgaGVhZGVyIGFuZCBpbXBsZW1lbnRhdGlvbiBmb3Igc2VxdWVuY2U8VD4gdHlwZS4K
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbToKKyAgICAgICAg
KENyZWF0ZUN1c3RvbVNpZ25hdHVyZSk6IEFkZCBhcHByb3ByaWF0ZSBoZWFkZXJzLgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvSURMU3RydWN0dXJlLnBtOiBBZGQgc3VwcG9ydCB0byBwYXJz
ZSBzZXF1ZW5jZTxUPi4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvQ1BQL1dlYkRP
TVRlc3RPYmouY3BwOiBNb2RpZmllZCByZXN1bHRzIGZyb20gcnVuLWJpbmRpbmctdGVzdHMuCisg
ICAgICAgIChXZWJET01UZXN0T2JqOjpvYmpNZXRob2RXaXRoQXJncyk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmg6IERpdHRvLgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouY3BwOiBEaXR0
by4KKyAgICAgICAgKHdlYmtpdF9kb21fdGVzdF9vYmpfb2JqX21ldGhvZF93aXRoX2FyZ3MpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmou
aDogRGl0dG8uCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5j
cHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25N
ZXRob2RXaXRoU2VxdWVuY2VBcmcpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9P
YmpDL0RPTVRlc3RPYmouaDogRGl0dG8uCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L09iakMvRE9NVGVzdE9iai5tbTogRGl0dG8uCisgICAgICAgICgtW0RPTVRlc3RPYmogb2JqTWV0
aG9kV2l0aEFyZ3M6c3RyQXJnOm9iakFyZzpdKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVjgvVjhUZXN0T2JqLmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpUZXN0T2Jq
SW50ZXJuYWw6Om1ldGhvZFdpdGhTZXF1ZW5jZUFyZ0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbmZpZ3VyZVY4VGVzdE9ialRlbXBsYXRlKToKKwogMjAxMi0wMy0zMCAgUGhpbGlwcGUg
Tm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gV2ViQXVkaW8g
Y2hhbm5lbFNpemUgaXNzdWUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvckNQUC5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JDUFAucG0JKHJldmlzaW9uIDExMjUxNykKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckNQUC5wbQkod29ya2luZyBj
b3B5KQpAQCAtMTg3LDI0ICsxODcsNDUgQEAgc3ViIEdldFBhcmVudAogICAgIHJldHVybiAkcGFy
ZW50OwogfQogCi1zdWIgU2hvdWxkU2tpcFR5cGUKK3N1YiBTa2lwRnVuY3Rpb24KIHsKLSAgICBt
eSAkdHlwZUluZm8gPSBzaGlmdDsKKyAgICBteSAkZnVuY3Rpb24gPSBzaGlmdDsKIAotICAgIHJl
dHVybiAxIGlmICR0eXBlSW5mby0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3Vz
dG9tIn0KLSAgICAgICAgICAgICAgICBvciAkdHlwZUluZm8tPnNpZ25hdHVyZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IkN1c3RvbUdldHRlciJ9OworICAgIHJldHVybiAxIGlmICRmdW5jdGlvbi0+
c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tIn07CiAKICAgICAjIEZJWE1F
OiBXZSBkb24ndCBnZW5lcmF0ZSBiaW5kaW5ncyBmb3IgU1ZHIHJlbGF0ZWQgaW50ZXJmYWNlcyB5
ZXQKLSAgICByZXR1cm4gMSBpZiAkdHlwZUluZm8tPnNpZ25hdHVyZS0+bmFtZSA9fiAvZ2V0U1ZH
RG9jdW1lbnQvOworICAgIHJldHVybiAxIGlmICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lID1+
IC9nZXRTVkdEb2N1bWVudC87CisKKyAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPkdldEFycmF5VHlw
ZSgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+dHlwZSkpIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAg
fQorCisgICAgZm9yZWFjaCBteSAkcGFyYW0gKEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSkgewor
ICAgICAgICByZXR1cm4gMSBpZiAkY29kZUdlbmVyYXRvci0+R2V0QXJyYXlUeXBlKCRwYXJhbS0+
dHlwZSk7CisgICAgfQorCisgICAgIyBGSVhNRTogVGhpcyBpcyB0eXBpY2FsbHkgdXNlZCB0byBh
ZGQgc2NyaXB0IGV4ZWN1dGlvbiBzdGF0ZSBhcmd1bWVudHMgdG8gdGhlIG1ldGhvZC4KKyAgICAj
IFRoZXNlIGZ1bmN0aW9ucyB3aWxsIG5vdCBjb21waWxlIHdpdGggdGhlIEMrKyBiaW5kaW5ncyBh
cyBpcywgc28gZGlzYWJsZSB0aGVtCisgICAgIyB0byByZXN0b3JlIGNvbXBpbGF0aW9uIHVudGls
IGEgcHJvcGVyIGltcGxlbWVudGF0aW9uIGNhbiBiZSBkZXZlbG9wZWQuCisgICAgcmV0dXJuIDEg
aWYgJGZ1bmN0aW9uLT5zaWduYXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDYWxsV2l0aCJ9
OworfQorCitzdWIgU2tpcEF0dHJpYnV0ZQoreworICAgIG15ICRhdHRyaWJ1dGUgPSBzaGlmdDsK
KworICAgIHJldHVybiAxIGlmICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkN1c3RvbSJ9CisgICAgICAgICAgICAgICAgb3IgJGF0dHJpYnV0ZS0+c2lnbmF0dXJl
LT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ3VzdG9tR2V0dGVyIn07CisKKyAgICByZXR1cm4gMSBp
ZiAkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUgPX4gL0NvbnN0cnVjdG9yJC87CisKKyAgICBy
ZXR1cm4gMSBpZiAkY29kZUdlbmVyYXRvci0+R2V0QXJyYXlUeXBlKCRhdHRyaWJ1dGUtPnNpZ25h
dHVyZS0+dHlwZSk7CiAKLSAgICByZXR1cm4gMSBpZiAkdHlwZUluZm8tPnNpZ25hdHVyZS0+dHlw
ZSA9fiAvQ29uc3RydWN0b3IkLzsKLSAgICAKLSAgICByZXR1cm4gMSBpZiAkY29kZUdlbmVyYXRv
ci0+R2V0QXJyYXlUeXBlKCR0eXBlSW5mby0+c2lnbmF0dXJlLT50eXBlKTsKLSAgICAKICAgICAj
IEZJWE1FOiBUaGlzIGlzIHR5cGljYWxseSB1c2VkIHRvIGFkZCBzY3JpcHQgZXhlY3V0aW9uIHN0
YXRlIGFyZ3VtZW50cyB0byB0aGUgbWV0aG9kLgogICAgICMgVGhlc2UgZnVuY3Rpb25zIHdpbGwg
bm90IGNvbXBpbGUgd2l0aCB0aGUgQysrIGJpbmRpbmdzIGFzIGlzLCBzbyBkaXNhYmxlIHRoZW0K
ICAgICAjIHRvIHJlc3RvcmUgY29tcGlsYXRpb24gdW50aWwgYSBwcm9wZXIgaW1wbGVtZW50YXRp
b24gY2FuIGJlIGRldmVsb3BlZC4KLSAgICByZXR1cm4gMSBpZiAkdHlwZUluZm8tPnNpZ25hdHVy
ZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNhbGxXaXRoIn07CisgICAgcmV0dXJuIDEgaWYgJGF0
dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiQ2FsbFdpdGgifTsKKwog
ICAgIHJldHVybiAwOwogfQogCkBAIC0yNjQsNiArMjg1LDcgQEAgc3ViIEFkZEluY2x1ZGVzRm9y
VHlwZQogewogICAgIG15ICR0eXBlID0gJGNvZGVHZW5lcmF0b3ItPlN0cmlwTW9kdWxlKHNoaWZ0
KTsKIAorICAgIHJldHVybiBpZiAkY29kZUdlbmVyYXRvci0+R2V0QXJyYXlUeXBlKCR0eXBlKTsK
ICAgICByZXR1cm4gaWYgJGNvZGVHZW5lcmF0b3ItPklzTm9uUG9pbnRlclR5cGUoJHR5cGUpOwog
ICAgIHJldHVybiBpZiAkdHlwZSA9fiAvQ29uc3RydWN0b3IvOwogCkBAIC00MTUsNyArNDM3LDcg
QEAgc3ViIEdlbmVyYXRlSGVhZGVyCiAgICAgIyAtIEFkZCBhdHRyaWJ1dGUgZ2V0dGVycy9zZXR0
ZXJzLgogICAgIGlmICgkbnVtQXR0cmlidXRlcyA+IDApIHsKICAgICAgICAgZm9yZWFjaCBteSAk
YXR0cmlidXRlIChAeyRkYXRhTm9kZS0+YXR0cmlidXRlc30pIHsKLSAgICAgICAgICAgIG5leHQg
aWYgU2hvdWxkU2tpcFR5cGUoJGF0dHJpYnV0ZSk7CisgICAgICAgICAgICBuZXh0IGlmIFNraXBB
dHRyaWJ1dGUoJGF0dHJpYnV0ZSk7CiAKICAgICAgICAgICAgIG15ICRhdHRyaWJ1dGVDb25kaXRp
b25hbFN0cmluZyA9ICRjb2RlR2VuZXJhdG9yLT5HZW5lcmF0ZUNvbmRpdGlvbmFsU3RyaW5nKCRh
dHRyaWJ1dGUtPnNpZ25hdHVyZSk7CiAgICAgICAgICAgICBteSAkYXR0cmlidXRlTmFtZSA9ICRh
dHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZTsKQEAgLTQ1NCw3ICs0NzYsNyBAQCBzdWIgR2VuZXJh
dGVIZWFkZXIKICAgICAjIC0gQWRkIGZ1bmN0aW9ucy4KICAgICBpZiAoJG51bUZ1bmN0aW9ucyA+
IDApIHsKICAgICAgICAgZm9yZWFjaCBteSAkZnVuY3Rpb24gKEB7JGRhdGFOb2RlLT5mdW5jdGlv
bnN9KSB7Ci0gICAgICAgICAgICBuZXh0IGlmIFNob3VsZFNraXBUeXBlKCRmdW5jdGlvbik7Cisg
ICAgICAgICAgICBuZXh0IGlmIFNraXBGdW5jdGlvbigkZnVuY3Rpb24pOwogICAgICAgICAgICAg
bXkgJGZ1bmN0aW9uTmFtZSA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiSW1wbGVtZW50ZWRBcyJ9IHx8ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lOwogCiAg
ICAgICAgICAgICBteSAkcmV0dXJuVHlwZSA9IEdldENQUFR5cGUoJGZ1bmN0aW9uLT5zaWduYXR1
cmUtPnR5cGUsIDApOwpAQCAtNjY5LDcgKzY5MSw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVudGF0
aW9uCiAgICAgIyAtIEF0dHJpYnV0ZXMKICAgICBpZiAoJG51bUF0dHJpYnV0ZXMgPiAwKSB7CiAg
ICAgICAgIGZvcmVhY2ggbXkgJGF0dHJpYnV0ZSAoQHskZGF0YU5vZGUtPmF0dHJpYnV0ZXN9KSB7
Ci0gICAgICAgICAgICBuZXh0IGlmIFNob3VsZFNraXBUeXBlKCRhdHRyaWJ1dGUpOworICAgICAg
ICAgICAgbmV4dCBpZiBTa2lwQXR0cmlidXRlKCRhdHRyaWJ1dGUpOwogICAgICAgICAgICAgQWRk
SW5jbHVkZXNGb3JUeXBlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlwZSk7CiAKICAgICAgICAg
ICAgIG15ICRpZGxUeXBlID0gJGNvZGVHZW5lcmF0b3ItPlN0cmlwTW9kdWxlKCRhdHRyaWJ1dGUt
PnNpZ25hdHVyZS0+dHlwZSk7CkBAIC03NzUsNyArNzk3LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVt
ZW50YXRpb24KICAgICBpZiAoJG51bUZ1bmN0aW9ucyA+IDApIHsKICAgICAgICAgZm9yZWFjaCBt
eSAkZnVuY3Rpb24gKEB7JGRhdGFOb2RlLT5mdW5jdGlvbnN9KSB7CiAgICAgICAgICAgICAjIFRy
ZWF0IENQUFB1cmVJbnRlcmZhY2UgYXMgQ3VzdG9tIGFzIHdlbGwsIHNpbmNlIHRoZSBXZWJDb3Jl
IHZlcnNpb25zIHdpbGwgdGFrZSBhIHNjcmlwdCBjb250ZXh0IGFzIHdlbGwKLSAgICAgICAgICAg
IG5leHQgaWYgU2hvdWxkU2tpcFR5cGUoJGZ1bmN0aW9uKSB8fCAkZGF0YU5vZGUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+eyJDUFBQdXJlSW50ZXJmYWNlIn07CisgICAgICAgICAgICBuZXh0IGlmIFNr
aXBGdW5jdGlvbigkZnVuY3Rpb24pIHx8ICRkYXRhTm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
IkNQUFB1cmVJbnRlcmZhY2UifTsKICAgICAgICAgICAgIEFkZEluY2x1ZGVzRm9yVHlwZSgkZnVu
Y3Rpb24tPnNpZ25hdHVyZS0+dHlwZSk7CiAKICAgICAgICAgICAgIG15ICRmdW5jdGlvbk5hbWUg
PSAkZnVuY3Rpb24tPnNpZ25hdHVyZS0+bmFtZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckdPYmplY3QucG0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yR09iamVjdC5wbQkocmV2aXNp
b24gMTEyNTE3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9yR09iamVjdC5wbQkod29ya2luZyBjb3B5KQpAQCAtMjM2LDExICsyMzYsMTIgQEAgc3ViIFNr
aXBGdW5jdGlvbiB7CiAKICAgICAjIFNraXAgZnVuY3Rpb25zIHRoYXQgaGF2ZSBbIkNhbGxiYWNr
Il0gcGFyYW1ldGVycywgYmVjYXVzZSB0aGlzCiAgICAgIyBjb2RlIGdlbmVyYXRvciBkb2Vzbid0
IGtub3cgaG93IHRvIGF1dG8tZ2VuZXJhdGUgY2FsbGJhY2tzLgotICAgICMgU2tpcCBmdW5jdGlv
bnMgdGhhdCBoYXZlICJNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyIiBwYXJhbWV0ZXJzLCBiZWNhdXNl
IHRoaXMKLSAgICAjIGNvZGUgZ2VuZXJhdG9yIGRvZXNuJ3Qga25vdyBob3cgdG8gYXV0by1nZW5l
cmF0ZSBNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLgorICAgICMgU2tpcCBmdW5jdGlvbnMgdGhhdCBo
YXZlICJNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyIiBvciBzZXF1ZW5jZTxUPiBwYXJhbWV0ZXJzLCBi
ZWNhdXNlIHRoaXMKKyAgICAjIGNvZGUgZ2VuZXJhdG9yIGRvZXNuJ3Qga25vdyBob3cgdG8gYXV0
by1nZW5lcmF0ZSBNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyIG9yIHNlcXVlbmNlPFQ+LgogICAgIGZv
cmVhY2ggbXkgJHBhcmFtIChAeyRmdW5jdGlvbi0+cGFyYW1ldGVyc30pIHsKICAgICAgICAgaWYg
KCRwYXJhbS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkNhbGxiYWNrIn0gfHwKLSAgICAgICAgICAg
ICRwYXJhbS0+dHlwZSBlcSAiTWVkaWFRdWVyeUxpc3RMaXN0ZW5lciIpIHsKKyAgICAgICAgICAg
ICRwYXJhbS0+dHlwZSBlcSAiTWVkaWFRdWVyeUxpc3RMaXN0ZW5lciIgfHwKKyAgICAgICAgICAg
ICRjb2RlR2VuZXJhdG9yLT5HZXRBcnJheVR5cGUoJHBhcmFtLT50eXBlKSkgewogICAgICAgICAg
ICAgcmV0dXJuIDE7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JPYmpDLnBtCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvck9iakMucG0JKHJldmlzaW9uIDEx
MjUxNykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvck9i
akMucG0JKHdvcmtpbmcgY29weSkKQEAgLTQ0Nyw2ICs0NDcsMjkgQEAgc3ViIElzTmF0aXZlT2Jq
Q1R5cGUKICAgICByZXR1cm4gMDsKIH0KIAorc3ViIFNraXBGdW5jdGlvbgoreworICAgIG15ICRm
dW5jdGlvbiA9IHNoaWZ0OworCisgICAgcmV0dXJuIDEgaWYgJGNvZGVHZW5lcmF0b3ItPkdldEFy
cmF5VHlwZSgkZnVuY3Rpb24tPnNpZ25hdHVyZS0+dHlwZSk7CisKKyAgICBmb3JlYWNoIG15ICRw
YXJhbSAoQHskZnVuY3Rpb24tPnBhcmFtZXRlcnN9KSB7CisgICAgICAgIHJldHVybiAxIGlmICRj
b2RlR2VuZXJhdG9yLT5HZXRBcnJheVR5cGUoJHBhcmFtLT50eXBlKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gMDsKK30KKworc3ViIFNraXBBdHRyaWJ1dGUKK3sKKyAgICBteSAkYXR0cmlidXRlID0g
c2hpZnQ7CisKKyAgICByZXR1cm4gMSBpZiAkY29kZUdlbmVyYXRvci0+R2V0QXJyYXlUeXBlKCRh
dHRyaWJ1dGUtPnNpZ25hdHVyZS0+dHlwZSk7CisKKyAgICByZXR1cm4gMDsKK30KKworCiBzdWIg
R2V0T2JqQ1R5cGUKIHsKICAgICBteSAkdHlwZSA9IHNoaWZ0OwpAQCAtNTExLDcgKzUzNCw4IEBA
IHN1YiBBZGRGb3J3YXJkRGVjbGFyYXRpb25zRm9yVHlwZQogICAgIG15ICR0eXBlID0gJGNvZGVH
ZW5lcmF0b3ItPlN0cmlwTW9kdWxlKHNoaWZ0KTsKICAgICBteSAkcHVibGljID0gc2hpZnQ7CiAK
LSAgICByZXR1cm4gaWYgJGNvZGVHZW5lcmF0b3ItPklzTm9uUG9pbnRlclR5cGUoJHR5cGUpIDsK
KyAgICByZXR1cm4gaWYgJGNvZGVHZW5lcmF0b3ItPklzTm9uUG9pbnRlclR5cGUoJHR5cGUpOwor
ICAgIHJldHVybiBpZiAkY29kZUdlbmVyYXRvci0+R2V0QXJyYXlUeXBlKCR0eXBlKTsKIAogICAg
IG15ICRjbGFzcyA9IEdldENsYXNzTmFtZSgkdHlwZSk7CiAKQEAgLTUzMyw2ICs1NTcsNyBAQCBz
dWIgQWRkSW5jbHVkZXNGb3JUeXBlCiAgICAgbXkgJHR5cGUgPSAkY29kZUdlbmVyYXRvci0+U3Ry
aXBNb2R1bGUoc2hpZnQpOwogCiAgICAgcmV0dXJuIGlmICRjb2RlR2VuZXJhdG9yLT5Jc05vblBv
aW50ZXJUeXBlKCR0eXBlKTsKKyAgICByZXR1cm4gaWYgJGNvZGVHZW5lcmF0b3ItPkdldEFycmF5
VHlwZSgkdHlwZSk7CiAKICAgICBpZiAoSXNOYXRpdmVPYmpDVHlwZSgkdHlwZSkpIHsKICAgICAg
ICAgaWYgKCR0eXBlIGVxICJDb2xvciIpIHsKQEAgLTg0Myw2ICs4NjgsNyBAQCBzdWIgR2VuZXJh
dGVIZWFkZXIKICAgICAjIC0gQWRkIGZ1bmN0aW9ucy4KICAgICBpZiAoJG51bUZ1bmN0aW9ucyA+
IDApIHsKICAgICAgICAgZm9yZWFjaCBteSAkZnVuY3Rpb24gKEB7JGRhdGFOb2RlLT5mdW5jdGlv
bnN9KSB7CisgICAgICAgICAgICBuZXh0IGlmIFNraXBGdW5jdGlvbigkZnVuY3Rpb24pOwogICAg
ICAgICAgICAgbXkgJGZ1bmN0aW9uTmFtZSA9ICRmdW5jdGlvbi0+c2lnbmF0dXJlLT5uYW1lOwog
CiAgICAgICAgICAgICBteSAkcmV0dXJuVHlwZSA9IEdldE9iakNUeXBlKCRmdW5jdGlvbi0+c2ln
bmF0dXJlLT50eXBlKTsKQEAgLTExNjUsNiArMTE5MSw3IEBAIHN1YiBHZW5lcmF0ZUltcGxlbWVu
dGF0aW9uCiAgICAgIyAtIEF0dHJpYnV0ZXMKICAgICBpZiAoJG51bUF0dHJpYnV0ZXMgPiAwKSB7
CiAgICAgICAgIGZvcmVhY2ggbXkgJGF0dHJpYnV0ZSAoQHskZGF0YU5vZGUtPmF0dHJpYnV0ZXN9
KSB7CisgICAgICAgICAgICBuZXh0IGlmIFNraXBBdHRyaWJ1dGUoJGF0dHJpYnV0ZSk7CiAgICAg
ICAgICAgICBBZGRJbmNsdWRlc0ZvclR5cGUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlKTsK
IAogICAgICAgICAgICAgbXkgJGlkbFR5cGUgPSAkY29kZUdlbmVyYXRvci0+U3RyaXBNb2R1bGUo
JGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlKTsKQEAgLTE0NjEsNiArMTQ4OCw3IEBAIHN1YiBH
ZW5lcmF0ZUltcGxlbWVudGF0aW9uCiAgICAgIyAtIEZ1bmN0aW9ucwogICAgIGlmICgkbnVtRnVu
Y3Rpb25zID4gMCkgewogICAgICAgICBmb3JlYWNoIG15ICRmdW5jdGlvbiAoQHskZGF0YU5vZGUt
PmZ1bmN0aW9uc30pIHsKKyAgICAgICAgICAgIG5leHQgaWYgU2tpcEZ1bmN0aW9uKCRmdW5jdGlv
bik7CiAgICAgICAgICAgICBBZGRJbmNsdWRlc0ZvclR5cGUoJGZ1bmN0aW9uLT5zaWduYXR1cmUt
PnR5cGUpOwogCiAgICAgICAgICAgICBteSAkZnVuY3Rpb25OYW1lID0gJGZ1bmN0aW9uLT5zaWdu
YXR1cmUtPm5hbWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JWOC5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JWOC5wbQkocmV2aXNpb24gMTEyNTE3KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0JKHdvcmtpbmcgY29weSkKQEAg
LTM2MDEsOCArMzYwMSwxMyBAQCBzdWIgQ3JlYXRlQ3VzdG9tU2lnbmF0dXJlCiAgICAgICAgICAg
ICAgICAgJHJlc3VsdCAuPSAidjg6OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4oKSI7CiAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIG15ICR0eXBlID0gJHBhcmFtZXRl
ci0+dHlwZTsKLSAgICAgICAgICAgICAgICBteSAkaGVhZGVyID0gR2V0VjhIZWFkZXJOYW1lKCR0
eXBlKTsKLSAgICAgICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygkaGVhZGVyKTsKKyAgICAg
ICAgICAgICAgICBteSAkYXJyYXlUeXBlID0gJGNvZGVHZW5lcmF0b3ItPkdldEFycmF5VHlwZSgk
dHlwZSk7CisgICAgICAgICAgICAgICAgaWYgKCRhcnJheVR5cGUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIiRhcnJheVR5cGUuaCIpOworICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG15ICRoZWFkZXIgPSBHZXRWOEhlYWRlck5h
bWUoJHR5cGUpOworICAgICAgICAgICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygkaGVhZGVy
KTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgJHJlc3VsdCAuPSAiVjgke3R5
cGV9OjpHZXRSYXdUZW1wbGF0ZSgpIjsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMU3RydWN0dXJlLnBtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMU3RydWN0dXJl
LnBtCShyZXZpc2lvbiAxMTI1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0lETFN0cnVjdHVyZS5wbQkod29ya2luZyBjb3B5KQpAQCAtMTA0LDcgKzEwNCw3IEBAIG91ciAk
c2V0dGVyUmFpc2VzU2VsZWN0b3IgPSAnXGJzZXR0ZXJccysKIG91ciAkdHlwZU5hbWVzcGFjZVNl
bGVjdG9yID0gJygoPzonIC4gJGlkbElkIC4gJyo6OikqKVxzKignIC4gJGlkbERhdGFUeXBlIC4g
JyopJzsKIAogb3VyICRpbnRlcmZhY2VTZWxlY3RvciA9ICdpbnRlcmZhY2VccyooKD86JyAuICRl
eHRlbmRlZEF0dHJpYnV0ZVN5bnRheCAuICcgKT8pKCcgLiAkaWRsSWROcyAuICcqKVxzKig/Ojoo
XHMqW157XSopKT97KFstYS16QS1aMC05XyI9XHMoKSw7OlxbXF08PiZcfF0qKSc7Ci1vdXIgJGlu
dGVyZmFjZU1ldGhvZFNlbGVjdG9yID0gJ1xzKigoPzonIC4gJGV4dGVuZGVkQXR0cmlidXRlU3lu
dGF4IC4gJyApPykoc3RhdGljXHMrKT8nIC4gJHN1cHBvcnRlZFR5cGVzIC4gJ1xzKignIC4gJGlk
bElkTnMgLiAnKilccypcKFxzKihbYS16QS1aMC05OlxzLD1cW1xdXSopJzsKK291ciAkaW50ZXJm
YWNlTWV0aG9kU2VsZWN0b3IgPSAnXHMqKCg/OicgLiAkZXh0ZW5kZWRBdHRyaWJ1dGVTeW50YXgg
LiAnICk/KShzdGF0aWNccyspPycgLiAkc3VwcG9ydGVkVHlwZXMgLiAnXHMqKCcgLiAkaWRsSWRO
cyAuICcqKVxzKlwoXHMqKFthLXpBLVowLTk6XHMsPVxbXF08Pl0qKSc7CiBvdXIgJGludGVyZmFj
ZVBhcmFtZXRlclNlbGVjdG9yID0gJyhpbnxvdXQpXHMqKCg/OicgLiAkZXh0ZW5kZWRBdHRyaWJ1
dGVTeW50YXggLiAnICk/KScgLiAkc3VwcG9ydGVkVHlwZXMgLiAnXHMqKCcgLiAkaWRsSWROcyAu
ICcqKSc7CiAKIG91ciAkaW50ZXJmYWNlQXR0cmlidXRlU2VsZWN0b3IgPSAnXHMqKHJlYWRvbmx5
IGF0dHJpYnV0ZXxhdHRyaWJ1dGUpXHMqKCcgLiAkZXh0ZW5kZWRBdHRyaWJ1dGVTeW50YXggLiAn
ICk/JyAuICRzdXBwb3J0ZWRUeXBlcyAuICdccyooJyAuICRpZGxUeXBlIC4gJyopJzsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQ
UC9XZWJET01UZXN0T2JqLmNwcAkocmV2aXNpb24gMTEyNTE3KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDAsNyArNDAsNiBAQAogI2luY2x1ZGUgIldlYkRPTWMuaCIKICNpbmNsdWRlICJXZWJE
T01kLmgiCiAjaW5jbHVkZSAiV2ViRE9NZS5oIgotI2luY2x1ZGUgIldlYkRPTXNlcXVlbmNlLmgi
CiAjaW5jbHVkZSAiV2ViRXhjZXB0aW9uSGFuZGxlci5oIgogI2luY2x1ZGUgIldlYk5hdGl2ZUV2
ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJhLmgiCkBAIC00OSw3ICs0OCw2IEBACiAjaW5jbHVk
ZSAiYy5oIgogI2luY2x1ZGUgImQuaCIKICNpbmNsdWRlICJlLmgiCi0jaW5jbHVkZSAic2VxdWVu
Y2UuaCIKICNpbmNsdWRlICJ3dGYvdGV4dC9BdG9taWNTdHJpbmcuaCIKICNpbmNsdWRlIDx3dGYv
R2V0UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtNjk1LDE0ICs2OTMsNiBAQCBX
ZWJET01UZXN0T2JqIFdlYkRPTVRlc3RPYmo6Om9iak1ldGhvZFdpCiAgICAgcmV0dXJuIHRvV2Vi
S2l0KFdURjo6Z2V0UHRyKGltcGwoKS0+b2JqTWV0aG9kV2l0aEFyZ3MoaW50QXJnLCBzdHJBcmcs
IHRvV2ViQ29yZShvYmpBcmcpKSkpOwogfQogCi12b2lkIFdlYkRPTVRlc3RPYmo6Om1ldGhvZFdp
dGhTZXF1ZW5jZUFyZyhjb25zdCBXZWJET01zZXF1ZW5jZSYgKQotewotICAgIGlmICghaW1wbCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbXBsKCktPm1ldGhvZFdpdGhTZXF1ZW5jZUFyZyh0
b1dlYkNvcmUoKSk7Ci19Ci0KIFdlYkRPTVRlc3RPYmogV2ViRE9NVGVzdE9iajo6bWV0aG9kVGhh
dFJlcXVpcmVzQWxsQXJnc0FuZFRocm93cyhjb25zdCBXZWJET01TdHJpbmcmIHN0ckFyZywgY29u
c3QgV2ViRE9NVGVzdE9iaiYgb2JqQXJnKQogewogICAgIGlmICghaW1wbCgpKQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJET01UZXN0T2JqLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0NQUC9XZWJE
T01UZXN0T2JqLmgJKHJldmlzaW9uIDExMjUxNykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9DUFAvV2ViRE9NVGVzdE9iai5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3
ICs0Myw2IEBAIGNsYXNzIFdlYkRPTWJvb2w7CiBjbGFzcyBXZWJET01jOwogY2xhc3MgV2ViRE9N
ZDsKIGNsYXNzIFdlYkRPTWU7Ci1jbGFzcyBXZWJET01zZXF1ZW5jZTsKIAogY2xhc3MgV2ViRE9N
VGVzdE9iaiA6IHB1YmxpYyBXZWJET01PYmplY3QgewogcHVibGljOgpAQCAtMTUwLDcgKzE0OSw2
IEBAIHB1YmxpYzoKICAgICBpbnQgaW50TWV0aG9kV2l0aEFyZ3MoaW50IGludEFyZywgY29uc3Qg
V2ViRE9NU3RyaW5nJiBzdHJBcmcsIGNvbnN0IFdlYkRPTVRlc3RPYmomIG9iakFyZyk7CiAgICAg
V2ViRE9NVGVzdE9iaiBvYmpNZXRob2QoKTsKICAgICBXZWJET01UZXN0T2JqIG9iak1ldGhvZFdp
dGhBcmdzKGludCBpbnRBcmcsIGNvbnN0IFdlYkRPTVN0cmluZyYgc3RyQXJnLCBjb25zdCBXZWJE
T01UZXN0T2JqJiBvYmpBcmcpOwotICAgIHZvaWQgbWV0aG9kV2l0aFNlcXVlbmNlQXJnKGNvbnN0
IFdlYkRPTXNlcXVlbmNlJiApOwogICAgIFdlYkRPTVRlc3RPYmogbWV0aG9kVGhhdFJlcXVpcmVz
QWxsQXJnc0FuZFRocm93cyhjb25zdCBXZWJET01TdHJpbmcmIHN0ckFyZywgY29uc3QgV2ViRE9N
VGVzdE9iaiYgb2JqQXJnKTsKICAgICB2b2lkIHNlcmlhbGl6ZWRWYWx1ZShjb25zdCBXZWJET01T
dHJpbmcmIHNlcmlhbGl6ZWRBcmcpOwogICAgIHZvaWQgaWRiS2V5KGNvbnN0IFdlYkRPTUlEQktl
eSYga2V5KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2Jq
ZWN0L1dlYktpdERPTVRlc3RPYmouY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouY3BwCShyZXZpc2lv
biAxMTI1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVj
dC9XZWJLaXRET01UZXN0T2JqLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsOCArNTcsNiBAQAog
I2luY2x1ZGUgIndlYmtpdC9XZWJLaXRET01kUHJpdmF0ZS5oIgogI2luY2x1ZGUgIndlYmtpdC9X
ZWJLaXRET01lLmgiCiAjaW5jbHVkZSAid2Via2l0L1dlYktpdERPTWVQcml2YXRlLmgiCi0jaW5j
bHVkZSAid2Via2l0L1dlYktpdERPTXNlcXVlbmNlLmgiCi0jaW5jbHVkZSAid2Via2l0L1dlYktp
dERPTXNlcXVlbmNlUHJpdmF0ZS5oIgogI2luY2x1ZGUgIndlYmtpdGRlZmluZXMuaCIKICNpbmNs
dWRlICJ3ZWJraXRnbG9iYWxzcHJpdmF0ZS5oIgogI2luY2x1ZGUgIndlYmtpdG1hcnNoYWwuaCIK
QEAgLTEwMzQsMjEgKzEwMzIsNiBAQCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX29ial9tZXRob2Rfd2l0
aF9hcmdzCiAgICAgcmV0dXJuIHJlczsKIH0KIAotdm9pZAotd2Via2l0X2RvbV90ZXN0X29ial9t
ZXRob2Rfd2l0aF9zZXF1ZW5jZV9hcmcoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgV2ViS2l0RE9N
c2VxdWVuY2UqICkKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKHNlbGYpOwotICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBXZWJDb3JlOjpUZXN0T2JqICogaXRl
bSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKCk7Ci0gICAgV2Vi
Q29yZTo6c2VxdWVuY2UgKiBjb252ZXJ0ZWRfID0gTlVMTDsKLSAgICBpZiAoICE9IE5VTEwpIHsK
LSAgICAgICAgY29udmVydGVkXyA9IFdlYktpdDo6Y29yZSgpOwotICAgICAgICBnX3JldHVybl9p
Zl9mYWlsKGNvbnZlcnRlZF8pOwotICAgIH0KLSAgICBpdGVtLT5tZXRob2RXaXRoU2VxdWVuY2VB
cmcoY29udmVydGVkXyk7Ci19Ci0KIFdlYktpdERPTVRlc3RPYmoqCiB3ZWJraXRfZG9tX3Rlc3Rf
b2JqX21ldGhvZF90aGF0X3JlcXVpcmVzX2FsbF9hcmdzX2FuZF90aHJvd3MoV2ViS2l0RE9NVGVz
dE9iaiogc2VsZiwgY29uc3QgZ2NoYXIqIHN0cl9hcmcsIFdlYktpdERPTVRlc3RPYmoqIG9ial9h
cmcsIEdFcnJvciAqKmVycm9yKQogewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmou
aAkocmV2aXNpb24gMTEyNTE3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsMTcg
KzExNiw2IEBAIFdFQktJVF9BUEkgV2ViS2l0RE9NVGVzdE9iaioKIHdlYmtpdF9kb21fdGVzdF9v
Ympfb2JqX21ldGhvZF93aXRoX2FyZ3MoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwgZ2xvbmcgaW50
X2FyZywgY29uc3QgZ2NoYXIqIHN0cl9hcmcsIFdlYktpdERPTVRlc3RPYmoqIG9ial9hcmcpOwog
CiAvKioKLSAqIHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfc2VxdWVuY2VfYXJnOgot
ICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKLSAqIEA6IEEgI1dlYktpdERPTXNlcXVlbmNl
Ci0gKgotICogUmV0dXJuczoKLSAqCi0qKi8KLVdFQktJVF9BUEkgdm9pZAotd2Via2l0X2RvbV90
ZXN0X29ial9tZXRob2Rfd2l0aF9zZXF1ZW5jZV9hcmcoV2ViS2l0RE9NVGVzdE9iaiogc2VsZiwg
V2ViS2l0RE9Nc2VxdWVuY2UqICk7Ci0KLS8qKgogICogd2Via2l0X2RvbV90ZXN0X29ial9tZXRo
b2RfdGhhdF9yZXF1aXJlc19hbGxfYXJnc19hbmRfdGhyb3dzOgogICogQHNlbGY6IEEgI1dlYktp
dERPTVRlc3RPYmoKICAqIEBzdHJfYXJnOiBBICNnY2hhcgpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAJKHJldmlz
aW9uIDExMjUxNykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RPYmouY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw2IEBACiAjaW5jbHVkZSAi
SlNkLmgiCiAjaW5jbHVkZSAiSlNlLmgiCiAjaW5jbHVkZSAiSlNpbnQuaCIKLSNpbmNsdWRlICJK
U3NlcXVlbmNlLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIlNWR0RvY3VtZW50Lmgi
CiAjaW5jbHVkZSAiU1ZHU3RhdGljUHJvcGVydHlUZWFyT2ZmLmgiCkBAIC0xNDI5LDEwICsxNDI4
LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHIKICAgICBUZXN0
T2JqKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CiAg
ICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCiAgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJOb3QgZW5vdWdoIGFyZ3VtZW50cyIp
KTsKLSAgICBzZXF1ZW5jZSogKHRvc2VxdWVuY2UoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoZXhl
YywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSkpOworICAgIHNlcXVlbmNlPFNjcmlwdFByb2ZpbGU+
KiBzZXF1ZW5jZUFyZyh0b05hdGl2ZUFycmF5PFNjcmlwdFByb2ZpbGU+KGV4ZWMsIE1BWUJFX01J
U1NJTkdfUEFSQU1FVEVSKGV4ZWMsIDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpKTsKICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7Ci0gICAgaW1wbC0+bWV0aG9kV2l0aFNlcXVlbmNlQXJnKCk7CisgICAgaW1w
bC0+bWV0aG9kV2l0aFNlcXVlbmNlQXJnKHNlcXVlbmNlQXJnKTsKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5oCShyZXZpc2lv
biAxMTI1MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9E
T01UZXN0T2JqLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDggKzQzLDYgQEAKIEBjbGFzcyBET01j
OwogQGNsYXNzIERPTWQ7CiBAY2xhc3MgRE9NZTsKLUBjbGFzcyBET01zZXF1ZW5jZTsKLUBjbGFz
cyBET01zZXF1ZW5jZTxTY3JpcHRQcm9maWxlPjsKIEBjbGFzcyBOU1N0cmluZzsKIEBwcm90b2Nv
bCBET01FdmVudExpc3RlbmVyOwogCkBAIC0xNzcsOCArMTc1LDYgQEAgZW51bSB7CiAtIChpbnQp
aW50TWV0aG9kV2l0aEFyZ3M6KGludClpbnRBcmcgc3RyQXJnOihOU1N0cmluZyAqKXN0ckFyZyBv
YmpBcmc6KERPTVRlc3RPYmogKilvYmpBcmc7CiAtIChET01UZXN0T2JqICopb2JqTWV0aG9kOwog
LSAoRE9NVGVzdE9iaiAqKW9iak1ldGhvZFdpdGhBcmdzOihpbnQpaW50QXJnIHN0ckFyZzooTlNT
dHJpbmcgKilzdHJBcmcgb2JqQXJnOihET01UZXN0T2JqICopb2JqQXJnOwotLSAodm9pZCltZXRo
b2RXaXRoU2VxdWVuY2VBcmc6KERPTXNlcXVlbmNlICopOwotLSAoRE9Nc2VxdWVuY2U8U2NyaXB0
UHJvZmlsZT4gKiltZXRob2RSZXR1cm5pbmdTZXF1ZW5jZTooaW50KWludEFyZzsKIC0gKERPTVRl
c3RPYmogKiltZXRob2RUaGF0UmVxdWlyZXNBbGxBcmdzQW5kVGhyb3dzOihOU1N0cmluZyAqKXN0
ckFyZyBvYmpBcmc6KERPTVRlc3RPYmogKilvYmpBcmc7CiAtICh2b2lkKXNlcmlhbGl6ZWRWYWx1
ZTooTlNTdHJpbmcgKilzZXJpYWxpemVkQXJnOwogLSAodm9pZClpZGJLZXk6KERPTUlEQktleSAq
KWtleTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RP
TVRlc3RPYmoubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L09iakMvRE9NVGVzdE9iai5tbQkocmV2aXNpb24gMTEyNTE3KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5tbQkod29ya2luZyBj
b3B5KQpAQCAtNTAsOCArNTAsNiBAQAogI2ltcG9ydCAiRE9NY0ludGVybmFsLmgiCiAjaW1wb3J0
ICJET01kSW50ZXJuYWwuaCIKICNpbXBvcnQgIkRPTWVJbnRlcm5hbC5oIgotI2ltcG9ydCAiRE9N
c2VxdWVuY2U8U2NyaXB0UHJvZmlsZT5JbnRlcm5hbC5oIgotI2ltcG9ydCAiRE9Nc2VxdWVuY2VJ
bnRlcm5hbC5oIgogI2ltcG9ydCAiRGljdGlvbmFyeS5oIgogI2ltcG9ydCAiRG9jdW1lbnQuaCIK
ICNpbXBvcnQgIkV2ZW50TGlzdGVuZXIuaCIKQEAgLTc3LDggKzc1LDYgQEAKICNpbXBvcnQgImMu
aCIKICNpbXBvcnQgImQuaCIKICNpbXBvcnQgImUuaCIKLSNpbXBvcnQgInNlcXVlbmNlLmgiCi0j
aW1wb3J0ICJzZXF1ZW5jZTxTY3JpcHRQcm9maWxlPi5oIgogI2ltcG9ydCA8d3RmL0dldFB0ci5o
PgogCiAjZGVmaW5lIElNUEwgcmVpbnRlcnByZXRfY2FzdDxXZWJDb3JlOjpUZXN0T2JqKj4oX2lu
dGVybmFsKQpAQCAtMjA2LDIwICsyMDIsNiBAQCAtICh2b2lkKXNldFRlc3RPYmpBdHRyOihET01U
ZXN0T2JqICopbmV3CiAgICAgSU1QTC0+c2V0VGVzdE9iakF0dHIoY29yZShuZXdUZXN0T2JqQXR0
cikpOwogfQogCi0tIChET01zZXF1ZW5jZTxTY3JpcHRQcm9maWxlPiAqKXNlcXVlbmNlQXR0cgot
ewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICByZXR1cm4g
a2l0KFdURjo6Z2V0UHRyKElNUEwtPnNlcXVlbmNlQXR0cigpKSk7Ci19Ci0KLS0gKHZvaWQpc2V0
U2VxdWVuY2VBdHRyOihET01zZXF1ZW5jZTxTY3JpcHRQcm9maWxlPiAqKW5ld1NlcXVlbmNlQXR0
cgotewotICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICBBU1NF
UlQobmV3U2VxdWVuY2VBdHRyKTsKLQotICAgIElNUEwtPnNldFNlcXVlbmNlQXR0cihjb3JlKG5l
d1NlcXVlbmNlQXR0cikpOwotfQotCiAtIChET01UZXN0T2JqICopWE1MT2JqQXR0cgogewogICAg
IFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKQEAgLTc2MSwxOCArNzQzLDYg
QEAgLSAoRE9NVGVzdE9iaiAqKW9iak1ldGhvZFdpdGhBcmdzOihpbnQpaQogICAgIHJldHVybiBr
aXQoV1RGOjpnZXRQdHIoSU1QTC0+b2JqTWV0aG9kV2l0aEFyZ3MoaW50QXJnLCBzdHJBcmcsIGNv
cmUob2JqQXJnKSkpKTsKIH0KIAotLSAodm9pZCltZXRob2RXaXRoU2VxdWVuY2VBcmc6KERPTXNl
cXVlbmNlICopCi17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwot
ICAgIElNUEwtPm1ldGhvZFdpdGhTZXF1ZW5jZUFyZyhjb3JlKCkpOwotfQotCi0tIChET01zZXF1
ZW5jZTxTY3JpcHRQcm9maWxlPiAqKW1ldGhvZFJldHVybmluZ1NlcXVlbmNlOihpbnQpaW50QXJn
Ci17Ci0gICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIHJldHVy
biBraXQoV1RGOjpnZXRQdHIoSU1QTC0+bWV0aG9kUmV0dXJuaW5nU2VxdWVuY2UoaW50QXJnKSkp
OwotfQotCiAtIChET01UZXN0T2JqICopbWV0aG9kVGhhdFJlcXVpcmVzQWxsQXJnc0FuZFRocm93
czooTlNTdHJpbmcgKilzdHJBcmcgb2JqQXJnOihET01UZXN0T2JqICopb2JqQXJnCiB7CiAgICAg
V2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAJKHJl
dmlzaW9uIDExMjUxNykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOFRlc3RPYmouY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw2IEBACiAjaW5jbHVk
ZSAiVjhkLmgiCiAjaW5jbHVkZSAiVjhlLmgiCiAjaW5jbHVkZSAiVjhpbnQuaCIKLSNpbmNsdWRl
ICJWOHNlcXVlbmNlLmgiCiAjaW5jbHVkZSA8d3RmL0dldFB0ci5oPgogI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtMTA3Niw4ICsxMDc1LDgg
QEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBtZXRob2RXaXRoUwogICAgIGlmIChhcmdz
Lkxlbmd0aCgpIDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIk5vdCBlbm91Z2ggYXJn
dW1lbnRzIiwgVjhQcm94eTo6VHlwZUVycm9yKTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RP
Ymo6OnRvTmF0aXZlKGFyZ3MuSG9sZGVyKCkpOwotICAgIEVYQ0VQVElPTl9CTE9DSyhzZXF1ZW5j
ZSosICwgVjhzZXF1ZW5jZTo6SGFzSW5zdGFuY2UoTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJn
cywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSkgPyBWOHNlcXVlbmNlOjp0b05hdGl2ZSh2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+OjpDYXN0KE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERl
ZmF1bHRJc1VuZGVmaW5lZCkpKSA6IDApOwotICAgIGltcC0+bWV0aG9kV2l0aFNlcXVlbmNlQXJn
KCk7CisgICAgRVhDRVBUSU9OX0JMT0NLKHNlcXVlbmNlPFNjcmlwdFByb2ZpbGU+Kiwgc2VxdWVu
Y2VBcmcsIHRvTmF0aXZlQXJyYXk8U2NyaXB0UHJvZmlsZT4oTUFZQkVfTUlTU0lOR19QQVJBTUVU
RVIoYXJncywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSkpOworICAgIGltcC0+bWV0aG9kV2l0aFNl
cXVlbmNlQXJnKHNlcXVlbmNlQXJnKTsKICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+
KCk7CiB9CiAKQEAgLTIwNzEsNyArMjA3MCw3IEBAIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6
RnVuY3Rpb25UZW1wbGEKIAogICAgIC8vIEN1c3RvbSBTaWduYXR1cmUgJ21ldGhvZFdpdGhTZXF1
ZW5jZUFyZycKICAgICBjb25zdCBpbnQgbWV0aG9kV2l0aFNlcXVlbmNlQXJnQXJnYyA9IDE7Ci0g
ICAgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gbWV0aG9kV2l0aFNlcXVlbmNlQXJn
QXJndlttZXRob2RXaXRoU2VxdWVuY2VBcmdBcmdjXSA9IHsgVjhzZXF1ZW5jZTo6R2V0UmF3VGVt
cGxhdGUoKSB9OworICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IG1ldGhvZFdp
dGhTZXF1ZW5jZUFyZ0FyZ3ZbbWV0aG9kV2l0aFNlcXVlbmNlQXJnQXJnY10gPSB7IFY4c2VxdWVu
Y2U8U2NyaXB0UHJvZmlsZT46OkdldFJhd1RlbXBsYXRlKCkgfTsKICAgICB2ODo6SGFuZGxlPHY4
OjpTaWduYXR1cmU+IG1ldGhvZFdpdGhTZXF1ZW5jZUFyZ1NpZ25hdHVyZSA9IHY4OjpTaWduYXR1
cmU6Ok5ldyhkZXNjLCBtZXRob2RXaXRoU2VxdWVuY2VBcmdBcmdjLCBtZXRob2RXaXRoU2VxdWVu
Y2VBcmdBcmd2KTsKICAgICBwcm90by0+U2V0KHY4OjpTdHJpbmc6Ok5ldygibWV0aG9kV2l0aFNl
cXVlbmNlQXJnIiksIHY4OjpGdW5jdGlvblRlbXBsYXRlOjpOZXcoVGVzdE9iakludGVybmFsOjpt
ZXRob2RXaXRoU2VxdWVuY2VBcmdDYWxsYmFjaywgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCksIG1l
dGhvZFdpdGhTZXF1ZW5jZUFyZ1NpZ25hdHVyZSkpOwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>