<?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>84540</bug_id>
          
          <creation_ts>2012-04-21 18:09:51 -0700</creation_ts>
          <short_desc>JS binding code generator doesn&apos;t handle &quot;attribute unsigned long[]&quot; well</short_desc>
          <delta_ts>2012-06-29 05:26:12 -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 Misc.</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>
          <dependson>82319</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Vineet Chaudhary (vineetc)">code.vineet</assigned_to>
          <cc>abarth</cc>
    
    <cc>code.vineet</cc>
    
    <cc>haraken</cc>
    
    <cc>japhet</cc>
    
    <cc>jochen</cc>
    
    <cc>koivisto</cc>
    
    <cc>mihnea</cc>
    
    <cc>ojan</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xuewen.ok</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>607305</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-04-21 18:09:51 -0700</bug_when>
    <thetext>I made the following change but JSInternals.cpp doesn&apos;t compile. It tries to include sequence.h and JSsequence.h. It also generates:

JSValue jsInternals(ExecState* exec, JSValue slotBase, const Identifier&amp;)
{
    JSInternals* castedThis = jsCast&lt;JSInternals*&gt;(asObject(slotBase));
    UNUSED_PARAM(exec);
    Internals* impl = static_cast&lt;Internals*&gt;(castedThis-&gt;impl());
    JSValue result = toJS(exec, castedThis-&gt;globalObject(), WTF::getPtr(impl-&gt;()));
    return result;
}

Index: Source/WebCore/testing/Internals.idl
===================================================================
--- Source/WebCore/testing/Internals.idl	(revision 114214)
+++ Source/WebCore/testing/Internals.idl	(working copy)
@@ -139,6 +139,8 @@
 
         [Conditional=INSPECTOR] unsigned long numberOfLiveNodes();
         [Conditional=INSPECTOR] unsigned long numberOfLiveDocuments();
+
+        readonly attribute sequence&lt;unsigned long&gt; fastMallocStatistics;
     };
 }
 
Index: Source/WebCore/bindings/scripts/CodeGeneratorJS.pm
===================================================================
--- Source/WebCore/bindings/scripts/CodeGeneratorJS.pm	(revision 114214)
+++ Source/WebCore/bindings/scripts/CodeGeneratorJS.pm	(working copy)
@@ -3025,7 +3025,7 @@
         AddToImplIncludes(&quot;SerializedScriptValue.h&quot;, $conditional);
         return &quot;$value ? $value-&gt;deserialize(exec, castedThis-&gt;globalObject(), 0) : jsNull()&quot;;
     } elsif ($type eq &quot;unsigned long[]&quot;) {
-        AddToImplIncludes(&quot;&lt;wrt/Vector.h&gt;&quot;, $conditional);
+        AddToImplIncludes(&quot;&lt;wtf/Vector.h&gt;&quot;, $conditional);
     } else {
         # Default, include header with same name.
         AddToImplIncludes(&quot;JS$type.h&quot;, $conditional);
Index: Source/WebCore/bindings/scripts/CodeGenerator.pm
===================================================================
--- Source/WebCore/bindings/scripts/CodeGenerator.pm	(revision 114214)
+++ Source/WebCore/bindings/scripts/CodeGenerator.pm	(working copy)
@@ -450,7 +450,7 @@
     my $object = shift;
     my $type = shift;
 
-    return $1 if $type =~ /^sequence&lt;([\w\d_]+)&gt;.*/;
+    return $1 if $type =~ /^sequence&lt;([\w\d_\s]+)&gt;.*/;
     return &quot;&quot;;
 }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607454</commentid>
    <comment_count>1</comment_count>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-04-22 22:17:18 -0700</bug_when>
    <thetext>Issue is with 

return $1 if $type =~ /^sequence&lt;([\w\d_]+)&gt;.*/;

This is not able to parse the &quot;unsigned long&quot;.
Fixing soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607458</commentid>
    <comment_count>2</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-04-22 22:22:25 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; Issue is with 
&gt; 
&gt; return $1 if $type =~ /^sequence&lt;([\w\d_]+)&gt;.*/;
&gt; 
&gt; This is not able to parse the &quot;unsigned long&quot;.
&gt; Fixing soon.

I&apos;ve fixed that but still getting an error. See the diff I posted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607484</commentid>
    <comment_count>3</comment_count>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-04-22 23:06:02 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (In reply to comment #1)
&gt; &gt; Issue is with 
&gt; &gt; 
&gt; &gt; return $1 if $type =~ /^sequence&lt;([\w\d_]+)&gt;.*/;
&gt; &gt; 
&gt; &gt; This is not able to parse the &quot;unsigned long&quot;.
&gt; &gt; Fixing soon.
&gt; 
&gt; I&apos;ve fixed that but still getting an error. See the diff I posted.

Another issue is with 
 &gt; JSValue jsInternals(ExecState* exec, JSValue slotBase, const Identifier&amp;)
 here parser is not able to parse fastMallocStatistics. The reason 
 IDL Parser is not able to parse &quot;unsigned long&quot; within sequence&lt;&gt;. Need to change IDLStructure.pm.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607500</commentid>
    <comment_count>4</comment_count>
      <attachid>138297</attachid>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-04-22 23:53:35 -0700</bug_when>
    <thetext>Created attachment 138297
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607510</commentid>
    <comment_count>5</comment_count>
      <attachid>138297</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-04-23 00:05:11 -0700</bug_when>
    <thetext>Comment on attachment 138297
Patch

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

The approach looks good.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:3028
&gt; +        if ($arrayType ne &quot;String&quot; &amp;&amp; $arrayType ne &quot;unsigned long&quot;) {

We do not want to add &apos;$arrayType ne ...&apos; in both CodeGeneratorJS.pm and CodeGeneratorV8.pm every time we support sequence&lt;some_primitive_type&gt;. Shall we make it a common subroutine in CodeGenerator.pm?

sub IsPrimitiveType
{
    my $type = shift;
    return 1 if $type eq &quot;String&quot;;
    return 1 if $type eq &quot;unsigned long&quot;;
    ...;
    return 0;
}

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:3805
&gt; +        if ($arrayType ne &quot;String&quot; &amp;&amp; $arrayType ne &quot;unsigned long&quot;) {

Ditto.

&gt; Source/WebCore/bindings/scripts/test/TestObj.idl:49
&gt; +        readonly attribute sequence&lt;unsigned long&gt; unsignedLongSequenceAttr;

Let&apos;s add test cases for other primitive types, e.g. sequence&lt;long&gt;, sequence&lt;float&gt; etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607518</commentid>
    <comment_count>6</comment_count>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-04-23 00:29:24 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 138297 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=138297&amp;action=review
&gt; 
&gt; The approach looks good.
&gt; 
&gt; &gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:3028
&gt; &gt; +        if ($arrayType ne &quot;String&quot; &amp;&amp; $arrayType ne &quot;unsigned long&quot;) {
&gt; 
&gt; We do not want to add &apos;$arrayType ne ...&apos; in both CodeGeneratorJS.pm and CodeGeneratorV8.pm every time we support sequence&lt;some_primitive_type&gt;. Shall we make it a common subroutine in CodeGenerator.pm?
&gt; 
&gt; sub IsPrimitiveType
&gt; {
&gt;     my $type = shift;
&gt;     return 1 if $type eq &quot;String&quot;;
&gt;     return 1 if $type eq &quot;unsigned long&quot;;
&gt;     ...;
&gt;     return 0;
&gt; }

Ohh I see we already have CodeGenerator::IsPrimitiveType we should be able to use that adding 
return 1 if $type eq &quot;String&quot;;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607536</commentid>
    <comment_count>7</comment_count>
      <attachid>138305</attachid>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-04-23 01:09:58 -0700</bug_when>
    <thetext>Created attachment 138305
Updated Patch

I have slightly modified patch.

Instead of using something IsPrimitiveType we should use AvoidInclusionOfType subroutine.
Added tests for numeric and primitive types.
removed readonly to test both getters/setters. //sorry this increased generated code :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607538</commentid>
    <comment_count>8</comment_count>
      <attachid>138305</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-04-23 01:15:13 -0700</bug_when>
    <thetext>Comment on attachment 138305
Updated Patch

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

&gt; Source/WebCore/bindings/scripts/CodeGenerator.pm:350
&gt; +    return 1 if $primitiveTypeHash{$type};
&gt; +    return 1 if $numericTypeHash{$type};
&gt; +    return 1 if $type eq &quot;String&quot;;

AvoidInclusionOfType() is already used in CodeGenerator*.pm. I am a bit worrying that this would change the existing behaviors. No worry?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607549</commentid>
    <comment_count>9</comment_count>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-04-23 01:46:46 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 138305 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=138305&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/bindings/scripts/CodeGenerator.pm:350
&gt; &gt; +    return 1 if $primitiveTypeHash{$type};
&gt; &gt; +    return 1 if $numericTypeHash{$type};
&gt; &gt; +    return 1 if $type eq &quot;String&quot;;
&gt; 
&gt; AvoidInclusionOfType() is already used in CodeGenerator*.pm. I am a bit worrying that this would change the existing behaviors. No worry?

Umm I think the places where AvoidInclusionOfType is used to check whether to include header of type or not.
Looking at the current implementation of AvoidInclusionOfType it is avoiding inclusion only because it doesn&apos;t have headers like SVGPoint/SVGNumber adding above code won&apos;t change existing behaviour because it doesn&apos;t have headers for these type either.
IMO worry is if $arrayType is &quot;SVGPoint/SVGNumber&quot; it will skip headers.

So should I use IsPrimitiveType subroutine adding &quot;String&quot; to it or Write a new subroutine?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607554</commentid>
    <comment_count>10</comment_count>
      <attachid>138305</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-04-23 02:00:17 -0700</bug_when>
    <thetext>Comment on attachment 138305
Updated Patch

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

&gt;&gt;&gt; Source/WebCore/bindings/scripts/CodeGenerator.pm:350
&gt;&gt;&gt; +    return 1 if $type eq &quot;String&quot;;
&gt;&gt; 
&gt;&gt; AvoidInclusionOfType() is already used in CodeGenerator*.pm. I am a bit worrying that this would change the existing behaviors. No worry?
&gt; 
&gt; Umm I think the places where AvoidInclusionOfType is used to check whether to include header of type or not.
&gt; Looking at the current implementation of AvoidInclusionOfType it is avoiding inclusion only because it doesn&apos;t have headers like SVGPoint/SVGNumber adding above code won&apos;t change existing behaviour because it doesn&apos;t have headers for these type either.
&gt; IMO worry is if $arrayType is &quot;SVGPoint/SVGNumber&quot; it will skip headers.
&gt; 
&gt; So should I use IsPrimitiveType subroutine adding &quot;String&quot; to it or Write a new subroutine?

Thanks for the clarification. Currently there are no use cases for an SVGPoint/SVGNumber array. Let&apos;s keep it as-is.

BTW, shall we rename AvoidInclusionOfType() to SkipHeaderInclude() (or something clearer)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607557</commentid>
    <comment_count>11</comment_count>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-04-23 02:14:14 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 138305 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=138305&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/bindings/scripts/CodeGenerator.pm:350
&gt; &gt;&gt;&gt; +    return 1 if $type eq &quot;String&quot;;
&gt; &gt;&gt; 
&gt; &gt;&gt; AvoidInclusionOfType() is already used in CodeGenerator*.pm. I am a bit worrying that this would change the existing behaviors. No worry?
&gt; &gt; 
&gt; &gt; Umm I think the places where AvoidInclusionOfType is used to check whether to include header of type or not.
&gt; &gt; Looking at the current implementation of AvoidInclusionOfType it is avoiding inclusion only because it doesn&apos;t have headers like SVGPoint/SVGNumber adding above code won&apos;t change existing behaviour because it doesn&apos;t have headers for these type either.
&gt; &gt; IMO worry is if $arrayType is &quot;SVGPoint/SVGNumber&quot; it will skip headers.
&gt; &gt; 
&gt; &gt; So should I use IsPrimitiveType subroutine adding &quot;String&quot; to it or Write a new subroutine?
&gt; 
&gt; Thanks for the clarification. Currently there are no use cases for an SVGPoint/SVGNumber array. Let&apos;s keep it as-is.
&gt; 
&gt; BTW, shall we rename AvoidInclusionOfType() to SkipHeaderInclude() (or something clearer)?

Oke. I will repost patch with SkipIncludeHeader.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607558</commentid>
    <comment_count>12</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-04-23 02:16:55 -0700</bug_when>
    <thetext>Sure, I&apos;ll take a look at it tomorrow:)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607559</commentid>
    <comment_count>13</comment_count>
      <attachid>138310</attachid>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-04-23 02:23:50 -0700</bug_when>
    <thetext>Created attachment 138310
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607562</commentid>
    <comment_count>14</comment_count>
      <attachid>138310</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-04-23 02:29:06 -0700</bug_when>
    <thetext>Comment on attachment 138310
Patch

OK. Thanks for fixing this bug!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607597</commentid>
    <comment_count>15</comment_count>
      <attachid>138310</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-23 04:34:45 -0700</bug_when>
    <thetext>Comment on attachment 138310
Patch

Clearing flags on attachment: 138310

Committed r114887: &lt;http://trac.webkit.org/changeset/114887&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>607598</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-23 04:34:50 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608168</commentid>
    <comment_count>17</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-04-23 16:23:59 -0700</bug_when>
    <thetext>I still can&apos;t compile:

/Users/rniwa/webkit2/Source/WebCore/bindings/js/JSDOMBinding.h: In function ‘JSC::JSValue WebCore::jsArray(JSC::ExecState*, WebCore::JSDOMGlobalObject*, const WTF::Vector&lt;Value, 0ul&gt;&amp;) [with T = unsigned int]’:
/Users/rniwa/webkit2/WebKitBuild/Release/DerivedSources/WebCore/JSInternals.cpp:224:   instantiated from here
/Users/rniwa/webkit2/Source/WebCore/bindings/js/JSDOMBinding.h:289: error: no matching function for call to ‘getPtr(const unsigned int&amp;)’

    template &lt;typename T&gt;
    JSC::JSValue jsArray(JSC::ExecState* exec, JSDOMGlobalObject* globalObject, const Vector&lt;T&gt;&amp; iterator)
    {
        JSC::MarkedArgumentBuffer list;
        typename Vector&lt;T&gt;::const_iterator end = iterator.end();

        for (typename Vector&lt;T&gt;::const_iterator iter = iterator.begin(); iter != end; ++iter)
            list.append(toJS(exec, globalObject, WTF::getPtr(*iter)));

        return JSC::constructArray(exec, globalObject, list);
    }

JSValue jsInternalsFastMallocStatistics(ExecState* exec, JSValue slotBase, const Identifier&amp;)
{
    JSInternals* castedThis = jsCast&lt;JSInternals*&gt;(asObject(slotBase));
    UNUSED_PARAM(exec);
    Internals* impl = static_cast&lt;Internals*&gt;(castedThis-&gt;impl());
    JSValue result = jsArray(exec, castedThis-&gt;globalObject(), impl-&gt;fastMallocStatistics());
    return result;
}

WTF::getPtr isn&apos;t defined for unsigned int :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608354</commentid>
    <comment_count>18</comment_count>
    <who name="Sean Wang">xuewen.ok</who>
    <bug_when>2012-04-23 21:23:36 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 138310 [details])
&gt; Clearing flags on attachment: 138310
&gt; 
&gt; Committed r114887: &lt;http://trac.webkit.org/changeset/114887&gt;

I still can&apos;t compile the syntax &quot;readonly attribute float[] axes;&quot; in the file &quot;Source/WebCore/Modules/gamepad/Gamepad.idl:34&quot;.
It generated in JSGamepad.cpp:
    #include &quot;JSfloat[].h&quot;
    #include &quot;float[].h&quot;
Which can&apos;t be found.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608422</commentid>
    <comment_count>19</comment_count>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-04-24 00:49:45 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; I still can&apos;t compile:
Sorry Ryosuke this didn&apos;t worked. :(

&gt; /Users/rniwa/webkit2/Source/WebCore/bindings/js/JSDOMBinding.h: In function ‘JSC::JSValue WebCore::jsArray(JSC::ExecState*, WebCore::JSDOMGlobalObject*, const WTF::Vector&lt;Value, 0ul&gt;&amp;) [with T = unsigned int]’:
&gt; /Users/rniwa/webkit2/WebKitBuild/Release/DerivedSources/WebCore/JSInternals.cpp:224:   instantiated from here
&gt; /Users/rniwa/webkit2/Source/WebCore/bindings/js/JSDOMBinding.h:289: error: no matching function for call to ‘getPtr(const unsigned int&amp;)’

&gt; WTF::getPtr isn&apos;t defined for unsigned int :(

Should it be defined? or else we need to add another type for &quot;unsigned int&quot; as we did for String in JSDOMbindings.h like
template&lt;&gt;
    inline JSC::JSValue jsArray(JSC::ExecState* exec, JSDOMGlobalObject* globalObject, const Vector&lt;unsigned int&gt;&amp; iterator) { ... }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608426</commentid>
    <comment_count>20</comment_count>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-04-24 00:54:22 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (In reply to comment #15)
&gt; &gt; (From update of attachment 138310 [details] [details])
&gt; &gt; Clearing flags on attachment: 138310
&gt; &gt; 
&gt; &gt; Committed r114887: &lt;http://trac.webkit.org/changeset/114887&gt;
&gt; 
&gt; I still can&apos;t compile the syntax &quot;readonly attribute float[] axes;&quot; in the file &quot;Source/WebCore/Modules/gamepad/Gamepad.idl:34&quot;.
&gt; It generated in JSGamepad.cpp:
&gt;     #include &quot;JSfloat[].h&quot;
&gt;     #include &quot;float[].h&quot;
&gt; Which can&apos;t be found.

Sorry Sean Wang this patch won&apos;t fix &quot;float[]&quot;. Are you using 
readonly attribute float[] axes; idl interface or 
readonly attribute sequence&lt;float&gt; axes;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608428</commentid>
    <comment_count>21</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-04-24 00:56:11 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; Should it be defined? or else we need to add another type for &quot;unsigned int&quot; as we did for String in JSDOMbindings.h like

Maybe. Or you can use traits to generalize the String case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608609</commentid>
    <comment_count>22</comment_count>
    <who name="Sean Wang">xuewen.ok</who>
    <bug_when>2012-04-24 06:44:03 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (In reply to comment #18)
&gt; &gt; (In reply to comment #15)
&gt; &gt; &gt; (From update of attachment 138310 [details] [details] [details])
&gt; &gt; &gt; Clearing flags on attachment: 138310
&gt; &gt; &gt; 
&gt; &gt; &gt; Committed r114887: &lt;http://trac.webkit.org/changeset/114887&gt;
&gt; &gt; 
&gt; &gt; I still can&apos;t compile the syntax &quot;readonly attribute float[] axes;&quot; in the file &quot;Source/WebCore/Modules/gamepad/Gamepad.idl:34&quot;.
&gt; &gt; It generated in JSGamepad.cpp:
&gt; &gt;     #include &quot;JSfloat[].h&quot;
&gt; &gt;     #include &quot;float[].h&quot;
&gt; &gt; Which can&apos;t be found.
&gt; 
&gt; Sorry Sean Wang this patch won&apos;t fix &quot;float[]&quot;. Are you using 
&gt; readonly attribute float[] axes; idl interface or 
&gt; readonly attribute sequence&lt;float&gt; axes;

I&apos;m using &quot;readonly attribute float[] axes;&quot;. It seems it is the same issue according to the title of this bug.
kentaro Hara&lt;haraken@chromium.org&gt; told me that JSC generator should support this syntax, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608617</commentid>
    <comment_count>23</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-04-24 06:51:40 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; &gt; Sorry Sean Wang this patch won&apos;t fix &quot;float[]&quot;. Are you using 
&gt; &gt; readonly attribute float[] axes; idl interface or 
&gt; &gt; readonly attribute sequence&lt;float&gt; axes;
&gt; 
&gt; I&apos;m using &quot;readonly attribute float[] axes;&quot;. It seems it is the same issue according to the title of this bug.
&gt; kentaro Hara&lt;haraken@chromium.org&gt; told me that JSC generator should support this syntax, right?

Thanks sam. I think we should use &quot;readonly attribute float[] axes&quot;.

Regarding the difference between the array and the sequence, the spec says...

- Sequences are always passed by value.
- Unlike sequences, arrays are passed by reference. 
- Sequences must not be used as the type of an attribute, constant or exception field.

http://www.w3.org/TR/WebIDL/#idl-array
http://www.w3.org/TR/WebIDL/#idl-sequence</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608728</commentid>
    <comment_count>24</comment_count>
      <attachid>138573</attachid>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-04-24 08:59:58 -0700</bug_when>
    <thetext>Created attachment 138573
Patch_With_Traits

Attaching patch with using traits. I have tested compilation works now for

readonly attribute sequence&lt;unsigned int&gt; fastMallocStatistics;

In future we can add traits for other types as required like 

template&lt;&gt; struct traits&lt;boolean&gt; {
static inline v8::Handle&lt;v8::Value&gt; arrayV8Value(const unsigned int&amp; value, v8::Isolate*)
{
    return v8Boolean(value);
}
};</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608732</commentid>
    <comment_count>25</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-04-24 09:01:54 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; Attaching patch with using traits. I have tested compilation works now for
&gt; 
&gt; readonly attribute sequence&lt;unsigned int&gt; fastMallocStatistics;

As I commented, it seems wrong to support sequences in attributes:
http://www.w3.org/TR/WebIDL/#idl-sequence

&quot;Sequences must not be used as the type of an attribute, constant or exception field.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608810</commentid>
    <comment_count>26</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-04-24 10:30:32 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; (In reply to comment #24)
&gt; &gt; Attaching patch with using traits. I have tested compilation works now for
&gt; &gt; 
&gt; &gt; readonly attribute sequence&lt;unsigned int&gt; fastMallocStatistics;
&gt; 
&gt; As I commented, it seems wrong to support sequences in attributes:
&gt; http://www.w3.org/TR/WebIDL/#idl-sequence
&gt; 
&gt; &quot;Sequences must not be used as the type of an attribute, constant or exception field.&quot;

Okay, but that still won&apos;t work because of the issue on the comment #22.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608812</commentid>
    <comment_count>27</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-04-24 10:33:38 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; (In reply to comment #25)
&gt; &gt; (In reply to comment #24)
&gt; &gt; &gt; Attaching patch with using traits. I have tested compilation works now for
&gt; &gt; &gt; 
&gt; &gt; &gt; readonly attribute sequence&lt;unsigned int&gt; fastMallocStatistics;
&gt; &gt; 
&gt; &gt; As I commented, it seems wrong to support sequences in attributes:
&gt; &gt; http://www.w3.org/TR/WebIDL/#idl-sequence
&gt; &gt; 
&gt; &gt; &quot;Sequences must not be used as the type of an attribute, constant or exception field.&quot;
&gt; 
&gt; Okay, but that still won&apos;t work because of the issue on the comment #22.

We are discussing what we should treat the issue (T[] or sequence&lt;T&gt;) in https://bugs.webkit.org/show_bug.cgi?id=80696, before moving things forward. Please wait for a moment:)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>609463</commentid>
    <comment_count>28</comment_count>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-04-24 22:31:52 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; (In reply to comment #25)
&gt; &gt; (In reply to comment #24)
&gt; &gt; &gt; Attaching patch with using traits. I have tested compilation works now for
&gt; &gt; &gt; 
&gt; &gt; &gt; readonly attribute sequence&lt;unsigned int&gt; fastMallocStatistics;
&gt; &gt; 
&gt; &gt; As I commented, it seems wrong to support sequences in attributes:
&gt; &gt; http://www.w3.org/TR/WebIDL/#idl-sequence
&gt; &gt; 
&gt; &gt; &quot;Sequences must not be used as the type of an attribute, constant or exception field.&quot;
&gt; 
&gt; Okay, but that still won&apos;t work because of the issue on the comment #22.

You can please land your patch with custom bindings if you are in hurry I will remove those custom bindings later as we had confusion between sequence&lt;T&gt; and Array[] and now agree on using Array[] instead of sequence&lt;&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659434</commentid>
    <comment_count>29</comment_count>
      <attachid>149931</attachid>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-06-28 05:15:38 -0700</bug_when>
    <thetext>Created attachment 149931
updatedPatchWithTraits

Updated patch to simplify the JSDOMBinding.h and V8Binding.h replacing specialised functions with traits.
So in future if someone wants to add jsArray() for new datatype need not to write jsArray() again.
eg. For &quot;unsigned int&quot; it needs to add below code only.
   template&lt;&gt;
    struct traits&lt;unsigned int&gt; {
        static inline JSC::JSValue arrayJSValue(JSC::ExecState* , JSDOMGlobalObject*, const unsigned int&amp; value)
        {
            return JSC::jsNumber(value);
        }
    };
Same for V8Binding too.

Also now I don&apos;t see the dependency of this bug for Bug84929. Can we remove it from block list?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659522</commentid>
    <comment_count>30</comment_count>
      <attachid>149931</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-06-28 08:41:52 -0700</bug_when>
    <thetext>Comment on attachment 149931
updatedPatchWithTraits

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

Looks OK with some nits

&gt; Source/WebCore/ChangeLog:3
&gt; +        JS binding code generator doesn&apos;t handle &quot;attribute unsigned long[]&quot; well

Is this title still valid?

&gt; Source/WebCore/bindings/js/JSDOMBinding.h:285
&gt; +    struct traits {

Nit: traits =&gt; Traits

&gt; Source/WebCore/bindings/js/JSDOMBinding.h:302
&gt; +        static inline JSC::JSValue arrayJSValue(JSC::ExecState* , JSDOMGlobalObject*, const float&amp; value)

Nit: An extra space after JSC::ExecState*.

&gt; Source/WebCore/bindings/js/JSDOMBinding.h:314
&gt; +        typedef T type;
&gt; +        typedef traits&lt;type&gt; traitsType;

Nit: traitsType =&gt; TraitsType

Nit: These two lines could be &apos;typedef traits&lt;T&gt; traitsType&apos;.

&gt; Source/WebCore/bindings/js/JSDOMBinding.h:317
&gt; +            list.append(traitsType::arrayJSValue(exec, globalObject, (*iter)));

Nit: (*iter) =&gt; *iter

&gt; Source/WebCore/bindings/v8/V8Binding.h:363
&gt; +        typedef T type;
&gt; +        typedef traits&lt;type&gt; traitsType;

Nit: typedef traits&lt;T&gt; traitsType.

&gt; Source/WebCore/bindings/v8/V8Binding.h:365
&gt; +            result-&gt;Set(v8::Integer::New(index++), traitsType::arrayV8Value((*iter), isolate));

Nit: (*iter) =&gt; *iter</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>659523</commentid>
    <comment_count>31</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-06-28 08:43:12 -0700</bug_when>
    <thetext>&gt; Also now I don&apos;t see the dependency of this bug for Bug84929. Can we remove it from block list?

Removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660286</commentid>
    <comment_count>32</comment_count>
      <attachid>150115</attachid>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-06-29 02:02:30 -0700</bug_when>
    <thetext>Created attachment 150115
Updated Patch

Updated patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660291</commentid>
    <comment_count>33</comment_count>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-06-29 02:06:42 -0700</bug_when>
    <thetext>(In reply to comment #30)

&gt; &gt; Source/WebCore/ChangeLog:3
&gt; &gt; +        JS binding code generator doesn&apos;t handle &quot;attribute unsigned long[]&quot; well
&gt; 
&gt; Is this title still valid?

Yes as JSDOMBinding and V8Bindings wont compile for &quot;unsigned long&quot; this patch will allow use of &quot;unsigned long&quot; in idls as return type of api(used as unsigned long sequence&lt;T&gt; method()) or attributes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660297</commentid>
    <comment_count>34</comment_count>
      <attachid>150115</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-06-29 02:10:38 -0700</bug_when>
    <thetext>Comment on attachment 150115
Updated Patch

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

OK!

&gt; Source/WebCore/bindings/js/JSDOMBinding.h:306
&gt; +    template&lt;&gt;
&gt; +    struct Traits&lt;float&gt; {
&gt; +        static inline JSC::JSValue arrayJSValue(JSC::ExecState*, JSDOMGlobalObject*, const float&amp; value)
&gt; +        {
&gt; +            return JSC::jsNumber(value);
&gt; +        }
&gt; +    };

We might have discussed this before, but what is the reason why JSC needs Traits&lt;float&gt; but V8 does not need Traits&lt;float&gt;? (Anyway you can fix it in a follow-up patch, if needed.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660308</commentid>
    <comment_count>35</comment_count>
      <attachid>150115</attachid>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-06-29 02:22:05 -0700</bug_when>
    <thetext>Comment on attachment 150115
Updated Patch

&gt;&gt; what is the reason why JSC needs Traits&lt;float&gt; but V8 does not need Traits&lt;float&gt;? (Anyway you can fix it in a follow-up patch, if needed.)

Actually float[] is used in Gamepad.idl which complies code for JS only so I thought adding code as required.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660311</commentid>
    <comment_count>36</comment_count>
      <attachid>150115</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-06-29 02:24:48 -0700</bug_when>
    <thetext>Comment on attachment 150115
Updated Patch

Thanks for the clarification.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660338</commentid>
    <comment_count>37</comment_count>
      <attachid>150115</attachid>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-06-29 03:19:59 -0700</bug_when>
    <thetext>Comment on attachment 150115
Updated Patch

With the recent changes in https://bugs.webkit.org/show_bug.cgi?id=90238 V8Binding.h got modified I need to rebase changes again :(.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660344</commentid>
    <comment_count>38</comment_count>
      <attachid>150129</attachid>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-06-29 03:49:49 -0700</bug_when>
    <thetext>Created attachment 150129
rebasedPatch

Rebaselined patch due merge conflicts in previous patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660393</commentid>
    <comment_count>39</comment_count>
      <attachid>150129</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-29 05:26:06 -0700</bug_when>
    <thetext>Comment on attachment 150129
rebasedPatch

Clearing flags on attachment: 150129

Committed r121554: &lt;http://trac.webkit.org/changeset/121554&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660394</commentid>
    <comment_count>40</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-29 05:26:12 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138297</attachid>
            <date>2012-04-22 23:53:35 -0700</date>
            <delta_ts>2012-04-23 01:09:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>unsigned_bindings.diff</filename>
            <type>text/plain</type>
            <size>11294</size>
            <attacher name="Vineet Chaudhary (vineetc)">code.vineet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExNDg3NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2IEBACisyMDEyLTA0LTIyICBWaW5lZXQg
Q2hhdWRoYXJ5ICA8cmdmNzQ4QG1vdG9yb2xhLmNvbT4KKworICAgICAgICBKUyBiaW5kaW5nIGNv
ZGUgZ2VuZXJhdG9yIGRvZXNuJ3QgaGFuZGxlICJhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZ1tdIiB3
ZWxsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NDU0
MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEdvZGVn
ZW5lcmF0b3Igc2hvdWxkIGhhbmRsZSBzcGFjZXMgd2l0aCB0aGUgc2VxdWVuY2U8PiB0byBzdXBw
b3J0IHR5cGVzCisgICAgICAgIGxpa2UgInVuc2lnbmVkIGxvbmciLgorCisgICAgICAgIFRlc3Rz
OiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKKworICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbToKKyAgICAgICAgKEdldEFycmF5VHlwZSk6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChOYXRp
dmVUb0pTVmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4
LnBtOgorICAgICAgICAoR2VuZXJhdGVOb3JtYWxBdHRyR2V0dGVyKToKKyAgICAgICAgKE5hdGl2
ZVRvSlNWYWx1ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9JRExTdHJ1Y3R1cmUucG06
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHA6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialNlcXVlbmNlQXR0cik6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpVbnNpZ25lZExvbmdTZXF1ZW5jZUF0dHIpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaDoKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RP
YmouaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGw6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6dW5zaWduZWRMb25nU2VxdWVuY2VBdHRyQXR0ckdl
dHRlcik6CisgICAgICAgIChUZXN0T2JqVjhJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlKToK
KwogMjAxMi0wNC0yMiAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBXZWIgSW5zcGVjdG9yOiBtYWtlIHBvcHVsYXRlQ2hpbGRyZW4gbWV0aG9kcyBwcml2
YXRlIGluIGhlYXAgcHJvZmlsZXIgZnJvbnQtZW5kCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBtCShyZXZpc2lvbiAxMTQ4NzIpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG0JKHdvcmtp
bmcgY29weSkKQEAgLTQ1MCw3ICs0NTAsNyBAQCBzdWIgR2V0QXJyYXlUeXBlCiAgICAgbXkgJG9i
amVjdCA9IHNoaWZ0OwogICAgIG15ICR0eXBlID0gc2hpZnQ7CiAKLSAgICByZXR1cm4gJDEgaWYg
JHR5cGUgPX4gL15zZXF1ZW5jZTwoW1x3XGRfXSspPi4qLzsKKyAgICByZXR1cm4gJDEgaWYgJHR5
cGUgPX4gL15zZXF1ZW5jZTwoW1x3XGRfXHNdKyk+LiovOwogICAgIHJldHVybiAiIjsKIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9ySlMucG0JKHJldmlzaW9uIDExNDg3MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0zMDI1LDcgKzMwMjUs
NyBAQCBzdWIgTmF0aXZlVG9KU1ZhbHVlCiAKICAgICBteSAkYXJyYXlUeXBlID0gJGNvZGVHZW5l
cmF0b3ItPkdldEFycmF5VHlwZSgkdHlwZSk7CiAgICAgaWYgKCRhcnJheVR5cGUpIHsKLSAgICAg
ICAgaWYgKCRhcnJheVR5cGUgbmUgIlN0cmluZyIpIHsKKyAgICAgICAgaWYgKCRhcnJheVR5cGUg
bmUgIlN0cmluZyIgJiYgJGFycmF5VHlwZSBuZSAidW5zaWduZWQgbG9uZyIpIHsKICAgICAgICAg
ICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJKUyRhcnJheVR5cGUuaCIsICRjb25kaXRpb25hbCk7CiAg
ICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiJGFycmF5VHlwZS5oIiwgJGNvbmRpdGlvbmFs
KTsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9yVjgucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9yVjgucG0JKHJldmlzaW9uIDExNDg3MikKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCSh3b3JraW5nIGNvcHkpCkBA
IC05MTUsMTAgKzkxNSwxMSBAQCBFTkQKIAogICAgICAgICBteSAkYXJyYXlUeXBlID0gJGNvZGVH
ZW5lcmF0b3ItPkdldEFycmF5VHlwZSgkcmV0dXJuVHlwZSk7CiAgICAgICAgIGlmICgkYXJyYXlU
eXBlKSB7Ci0gICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiVjgkYXJyYXlUeXBlLmgiKTsK
LSAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCIkYXJyYXlUeXBlLmgiKTsKLSAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgY29uc3QgVmVjdG9yPFJlZlB0cjwkYXJy
YXlUeXBlPiA+IHZlY3RvciA9ICR7Z2V0dGVyU3RyaW5nfTtcbiIpOwotICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnREZWNscywgIiAgICByZXR1cm4gdjhBcnJheSh2ZWN0b3IpO1xuIik7Cisg
ICAgICAgICAgICBpZiAoJGFycmF5VHlwZSBuZSAiU3RyaW5nIiAmJiAkYXJyYXlUeXBlIG5lICJ1
bnNpZ25lZCBsb25nIikgeworICAgICAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJWOCRh
cnJheVR5cGUuaCIpOworICAgICAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCIkYXJyYXlU
eXBlLmgiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVj
bHMsICIgICAgcmV0dXJuIHY4QXJyYXkoJHtnZXR0ZXJTdHJpbmd9KTtcbiIpOwogICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIn1cblxuIik7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KQEAgLTM4MDEsNyArMzgwMiw3IEBAIHN1YiBOYXRpdmVUb0pTVmFsdWUKIAog
ICAgIG15ICRhcnJheVR5cGUgPSAkY29kZUdlbmVyYXRvci0+R2V0QXJyYXlUeXBlKCR0eXBlKTsK
ICAgICBpZiAoJGFycmF5VHlwZSkgewotICAgICAgICBpZiAoJGFycmF5VHlwZSBuZSAiU3RyaW5n
IikgeworICAgICAgICBpZiAoJGFycmF5VHlwZSBuZSAiU3RyaW5nIiAmJiAkYXJyYXlUeXBlIG5l
ICJ1bnNpZ25lZCBsb25nIikgewogICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIlY4JGFy
cmF5VHlwZS5oIik7CiAgICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiJGFycmF5VHlwZS5o
Iik7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURM
U3RydWN0dXJlLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvSURMU3RydWN0dXJlLnBtCShyZXZpc2lvbiAxMTQ4NzIpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL0lETFN0cnVjdHVyZS5wbQkod29ya2luZyBjb3B5KQpAQCAtODgsNyAr
ODgsNyBAQCBvdXIgJGNvbnN0VmFsdWUgPSAnKCJbXiJcclxuXSoiKXwoMFt4WF1bCiBvdXIgJGlk
bERhdGFUeXBlID0gJ1thLXpBLVowLTlcIF0nOyAgICMgR2VuZXJpYyBkYXRhIHR5cGUgaWRlbnRp
ZmllcgogCiAjIE1hZ2ljIElETCBwYXJzaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbnMKLW15ICRzdXBw
b3J0ZWRUeXBlcyA9ICIoKD86KD86dW5zaWduZWQgKT8oPzppbnR8c2hvcnR8KD86bG9uZyApP2xv
bmcpfCg/OiRpZGxJZE5zKikpKD86XFxbXFxdfDwoPzokaWRsSWROcyopPik/KSI7CitteSAkc3Vw
cG9ydGVkVHlwZXMgPSAiKCg/Oig/OnVuc2lnbmVkICk/KD86aW50fHNob3J0fCg/OmxvbmcgKT9s
b25nKXwoPzokaWRsSWROcyopKSg/OlxcW1xcXXw8KD86JGlkbElkTnNMaXN0Kik+KT8pIjsKIAog
IyBTcGVjaWFsIElETCBub3RhdGlvbnMuIFRoaXMgcmVndWxhciBleHByZXNzaW9uIGV4dHJhY3Rz
IHRoZSBzdHJpbmcgYmV0d2VlbiB0aGUgZmlyc3QgWyBhbmQgaXRzIGNvcnJlc3BvbmRpbmcgXS4K
IG91ciAkZXh0ZW5kZWRBdHRyaWJ1dGVTeW50YXggPSBxci9cW1teXFtcXV0qKD86KD8/eyRJRExT
dHJ1Y3R1cmU6OmV4dGVuZGVkQXR0cmlidXRlU3ludGF4fSlbXlxbXF1dKikqXF0veDsgIyBVc2Vk
IGZvciBleHRlbmRlZCBhdHRyaWJ1dGVzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCShyZXZpc2lvbiAxMTQ4NzIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDYgKzQ2LDcgQEAgbW9kdWxlIHRlc3QgewogICAgICAgICBhdHRyaWJ1dGUgRE9N
U3RyaW5nICAgICAgICAgICAgICAgIHN0cmluZ0F0dHI7CiAgICAgICAgIGF0dHJpYnV0ZSBUZXN0
T2JqICAgICAgICAgICAgICAgICAgdGVzdE9iakF0dHI7CiAgICAgICAgIGF0dHJpYnV0ZSBzZXF1
ZW5jZTxTY3JpcHRQcm9maWxlPiAgc2VxdWVuY2VBdHRyOworICAgICAgICByZWFkb25seSBhdHRy
aWJ1dGUgc2VxdWVuY2U8dW5zaWduZWQgbG9uZz4gdW5zaWduZWRMb25nU2VxdWVuY2VBdHRyOwog
CiAgICAgICAgIEpTLCBWOAogICAgICAgICAvLyBXS191Y2ZpcnN0LCBXS19sY2ZpcnN0IGV4Y2Vw
dGlvbmFsIGNhc2VzLgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE9iai5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAJKHJldmlzaW9uIDExNDg3MikKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05MCw2ICs5MCw3IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rl
c3RPYmpUYWIKICAgICB7ICJzdHJpbmdBdHRyIiwgRG9udERlbGV0ZSwgKGludHB0cl90KXN0YXRp
Y19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RPYmpTdHJpbmdBdHRyKSwg
KGludHB0cl90KXNldEpTVGVzdE9ialN0cmluZ0F0dHIsIE5vSW50cmluc2ljIH0sCiAgICAgeyAi
dGVzdE9iakF0dHIiLCBEb250RGVsZXRlLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlT
bG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE9ialRlc3RPYmpBdHRyKSwgKGludHB0cl90KXNldEpT
VGVzdE9ialRlc3RPYmpBdHRyLCBOb0ludHJpbnNpYyB9LAogICAgIHsgInNlcXVlbmNlQXR0ciIs
IERvbnREZWxldGUsIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVl
RnVuYz4oanNUZXN0T2JqU2VxdWVuY2VBdHRyKSwgKGludHB0cl90KXNldEpTVGVzdE9ialNlcXVl
bmNlQXR0ciwgTm9JbnRyaW5zaWMgfSwKKyAgICB7ICJ1bnNpZ25lZExvbmdTZXF1ZW5jZUF0dHIi
LCBEb250RGVsZXRlIHwgUmVhZE9ubHksIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNs
b3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0T2JqVW5zaWduZWRMb25nU2VxdWVuY2VBdHRyKSwgKGlu
dHB0cl90KTAsIE5vSW50cmluc2ljIH0sCiAgICAgeyAiWE1MT2JqQXR0ciIsIERvbnREZWxldGUs
IChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0
T2JqWE1MT2JqQXR0ciksIChpbnRwdHJfdClzZXRKU1Rlc3RPYmpYTUxPYmpBdHRyLCBOb0ludHJp
bnNpYyB9LAogICAgIHsgImNyZWF0ZSIsIERvbnREZWxldGUsIChpbnRwdHJfdClzdGF0aWNfY2Fz
dDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0T2JqQ3JlYXRlKSwgKGludHB0cl90
KXNldEpTVGVzdE9iakNyZWF0ZSwgTm9JbnRyaW5zaWMgfSwKICAgICB7ICJyZWZsZWN0ZWRTdHJp
bmdBdHRyIiwgRG9udERlbGV0ZSwgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6
R2V0VmFsdWVGdW5jPihqc1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyKSwgKGludHB0cl90KXNl
dEpTVGVzdE9ialJlZmxlY3RlZFN0cmluZ0F0dHIsIE5vSW50cmluc2ljIH0sCkBAIC00ODksNiAr
NDkwLDE2IEBAIEpTVmFsdWUganNUZXN0T2JqU2VxdWVuY2VBdHRyKEV4ZWNTdGF0ZSoKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCisKK0pTVmFsdWUganNUZXN0T2JqVW5zaWduZWRMb25nU2VxdWVu
Y2VBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRlbnRpZmll
ciYpCit7CisgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE9iaio+KGFz
T2JqZWN0KHNsb3RCYXNlKSk7CisgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFRlc3RPYmoq
IGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAgICBK
U1ZhbHVlIHJlc3VsdCA9IGpzQXJyYXkoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCks
IGltcGwtPnVuc2lnbmVkTG9uZ1NlcXVlbmNlQXR0cigpKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCiAKIEpTVmFsdWUganNUZXN0T2JqWE1MT2JqQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgc2xvdEJhc2UsIGNvbnN0IElkZW50aWZpZXImKQogewpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaAkocmV2aXNpb24g
MTE0ODcyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9iai5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzUsNiArMjM1LDcgQEAgSlNDOjpKU1ZhbHVlIGpz
VGVzdE9ialRlc3RPYmpBdHRyKEpTQzo6RQogdm9pZCBzZXRKU1Rlc3RPYmpUZXN0T2JqQXR0cihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTVmFsdWUpOwogSlNDOjpKU1Zh
bHVlIGpzVGVzdE9ialNlcXVlbmNlQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwg
Y29uc3QgSlNDOjpJZGVudGlmaWVyJik7CiB2b2lkIHNldEpTVGVzdE9ialNlcXVlbmNlQXR0cihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1Zh
bHVlIGpzVGVzdE9ialVuc2lnbmVkTG9uZ1NlcXVlbmNlQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7CiBKU0M6OkpTVmFsdWUganNUZXN0
T2JqWE1MT2JqQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpJ
ZGVudGlmaWVyJik7CiB2b2lkIHNldEpTVGVzdE9ialhNTE9iakF0dHIoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU1ZhbHVlKTsKIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpD
cmVhdGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6SWRlbnRpZmll
ciYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9N
VGVzdE9iai5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9PYmpDL0RPTVRlc3RPYmouaAkocmV2aXNpb24gMTE0ODcyKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5oCSh3b3JraW5nIGNvcHkp
CkBAIC04Miw4ICs4Miw2IEBAIGVudW0gewogLSAodm9pZClzZXRTdHJpbmdBdHRyOihOU1N0cmlu
ZyAqKW5ld1N0cmluZ0F0dHI7CiAtIChET01UZXN0T2JqICopdGVzdE9iakF0dHI7CiAtICh2b2lk
KXNldFRlc3RPYmpBdHRyOihET01UZXN0T2JqICopbmV3VGVzdE9iakF0dHI7Ci0tIChET01zZXF1
ZW5jZTxTY3JpcHRQcm9maWxlPiAqKXNlcXVlbmNlQXR0cjsKLS0gKHZvaWQpc2V0U2VxdWVuY2VB
dHRyOihET01zZXF1ZW5jZTxTY3JpcHRQcm9maWxlPiAqKW5ld1NlcXVlbmNlQXR0cjsKIC0gKERP
TVRlc3RPYmogKilYTUxPYmpBdHRyOwogLSAodm9pZClzZXRYTUxPYmpBdHRyOihET01UZXN0T2Jq
ICopbmV3WE1MT2JqQXR0cjsKIC0gKEJPT0wpY3JlYXRlOwpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAJKHJldmlz
aW9uIDExNDg3MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OFRlc3RPYmouY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzUsNiArMjM1LDEzIEBAIHN0YXRpYyB2
b2lkIHNlcXVlbmNlQXR0ckF0dHJTZXR0ZXIodjg6OkwKICAgICByZXR1cm47CiB9CiAKK3N0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdW5zaWduZWRMb25nU2VxdWVuY2VBdHRyQXR0ckdldHRl
cih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5m
bykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLnVuc2lnbmVkTG9uZ1NlcXVlbmNlQXR0
ci5fZ2V0Iik7CisgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhv
bGRlcigpKTsKKyAgICByZXR1cm4gdjhBcnJheShpbXAtPnVuc2lnbmVkTG9uZ1NlcXVlbmNlQXR0
cigpKTsKK30KKwogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBYTUxPYmpBdHRyQXR0ckdl
dHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYg
aW5mbykKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLlhNTE9iakF0dHIuX2dldCIpOwpA
QCAtMTgxNCw2ICsxODIxLDggQEAgc3RhdGljIGNvbnN0IEJhdGNoZWRBdHRyaWJ1dGUgVGVzdE9i
akF0dAogICAgIHsidGVzdE9iakF0dHIiLCBUZXN0T2JqVjhJbnRlcm5hbDo6dGVzdE9iakF0dHJB
dHRyR2V0dGVyLCBUZXN0T2JqVjhJbnRlcm5hbDo6dGVzdE9iakF0dHJBdHRyU2V0dGVyLCAwIC8q
IG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0PHY4OjpBY2Nlc3NDb250cm9sPih2ODo6REVGQVVMVCks
IHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4odjg6Ok5vbmUpLCAwIC8qIG9uIGlu
c3RhbmNlICovfSwKICAgICAvLyBBdHRyaWJ1dGUgJ3NlcXVlbmNlQXR0cicgKFR5cGU6ICdhdHRy
aWJ1dGUnIEV4dEF0dHI6ICcnKQogICAgIHsic2VxdWVuY2VBdHRyIiwgVGVzdE9ialY4SW50ZXJu
YWw6OnNlcXVlbmNlQXR0ckF0dHJHZXR0ZXIsIFRlc3RPYmpWOEludGVybmFsOjpzZXF1ZW5jZUF0
dHJBdHRyU2V0dGVyLCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0PHY4OjpBY2Nlc3NDb250
cm9sPih2ODo6REVGQVVMVCksIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4odjg6
Ok5vbmUpLCAwIC8qIG9uIGluc3RhbmNlICovfSwKKyAgICAvLyBBdHRyaWJ1dGUgJ3Vuc2lnbmVk
TG9uZ1NlcXVlbmNlQXR0cicgKFR5cGU6ICdyZWFkb25seSBhdHRyaWJ1dGUnIEV4dEF0dHI6ICcn
KQorICAgIHsidW5zaWduZWRMb25nU2VxdWVuY2VBdHRyIiwgVGVzdE9ialY4SW50ZXJuYWw6OnVu
c2lnbmVkTG9uZ1NlcXVlbmNlQXR0ckF0dHJHZXR0ZXIsIDAsIDAgLyogbm8gZGF0YSAqLywgc3Rh
dGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxUKSwgc3RhdGljX2Nhc3Q8djg6
OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyogb24gaW5zdGFuY2UgKi99LAogICAg
IC8vIEF0dHJpYnV0ZSAnWE1MT2JqQXR0cicgKFR5cGU6ICdhdHRyaWJ1dGUnIEV4dEF0dHI6ICcn
KQogICAgIHsiWE1MT2JqQXR0ciIsIFRlc3RPYmpWOEludGVybmFsOjpYTUxPYmpBdHRyQXR0ckdl
dHRlciwgVGVzdE9ialY4SW50ZXJuYWw6OlhNTE9iakF0dHJBdHRyU2V0dGVyLCAwIC8qIG5vIGRh
dGEgKi8sIHN0YXRpY19jYXN0PHY4OjpBY2Nlc3NDb250cm9sPih2ODo6REVGQVVMVCksIHN0YXRp
Y19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4odjg6Ok5vbmUpLCAwIC8qIG9uIGluc3RhbmNl
ICovfSwKICAgICAvLyBBdHRyaWJ1dGUgJ2NyZWF0ZScgKFR5cGU6ICdhdHRyaWJ1dGUnIEV4dEF0
dHI6ICcnKQo=
</data>
<flag name="review"
          id="143607"
          type_id="1"
          status="-"
          setter="haraken"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138305</attachid>
            <date>2012-04-23 01:09:58 -0700</date>
            <delta_ts>2012-04-23 02:23:50 -0700</delta_ts>
            <desc>Updated Patch</desc>
            <filename>unsigned_bindings_001.diff</filename>
            <type>text/plain</type>
            <size>41281</size>
            <attacher name="Vineet Chaudhary (vineetc)">code.vineet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExNDg3NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg4IEBACisyMDEyLTA0LTIzICBWaW5lZXQg
Q2hhdWRoYXJ5ICA8cmdmNzQ4QG1vdG9yb2xhLmNvbT4KKworICAgICAgICBKUyBiaW5kaW5nIGNv
ZGUgZ2VuZXJhdG9yIGRvZXNuJ3QgaGFuZGxlICJhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZ1tdIiB3
ZWxsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NDU0
MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvZGVn
ZW5lcmF0b3Igc2hvdWxkIGhhbmRsZSBzcGFjZXMgd2l0aCB0aGUgc2VxdWVuY2U8PiB0byBzdXBw
b3J0CisgICAgICAgIG51bWVyaWMgdHlwZXMgbGlrZSAidW5zaWduZWQgbG9uZyIsICJpbnQiIC4u
IGV0Yy4gYW5kIHByaW1pdGl2ZSB0eXBlcworICAgICAgICBsaWtlICJib29sZWFuIiwgIkRhdGUi
IGV0Yy4KKworICAgICAgICBUZXN0czogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRs
CisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG06CisgICAgICAg
IChBdm9pZEluY2x1c2lvbk9mVHlwZSk6CisgICAgICAgIChHZXRBcnJheVR5cGUpOgorICAgICAg
ICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoTmF0aXZl
VG9KU1ZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5w
bToKKyAgICAgICAgKEdlbmVyYXRlTm9ybWFsQXR0ckdldHRlcik6CisgICAgICAgIChOYXRpdmVU
b0pTVmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvSURMU3RydWN0dXJlLnBtOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpJbnRTZXF1ZW5jZUF0dHIp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqU2hvcnRTZXF1ZW5jZUF0dHIpOgorICAgICAg
ICAoV2ViQ29yZTo6anNUZXN0T2JqTG9uZ1NlcXVlbmNlQXR0cik6CisgICAgICAgIChXZWJDb3Jl
Ojpqc1Rlc3RPYmpMb25nTG9uZ1NlcXVlbmNlQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rl
c3RPYmpVbnNpZ25lZEludFNlcXVlbmNlQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RP
YmpVbnNpZ25lZFNob3J0U2VxdWVuY2VBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9i
alVuc2lnbmVkTG9uZ1NlcXVlbmNlQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpV
bnNpZ25lZExvbmdMb25nU2VxdWVuY2VBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9i
akZsb2F0U2VxdWVuY2VBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakRvdWJsZVNl
cXVlbmNlQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpCb29sZWFuU2VxdWVuY2VB
dHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialZvaWRTZXF1ZW5jZUF0dHIpOgorICAg
ICAgICAoV2ViQ29yZTo6anNUZXN0T2JqRGF0ZVNlcXVlbmNlQXR0cik6CisgICAgICAgIChXZWJD
b3JlOjpzZXRKU1Rlc3RPYmpTZXF1ZW5jZUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNU
ZXN0T2JqSW50U2VxdWVuY2VBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialNo
b3J0U2VxdWVuY2VBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakxvbmdTZXF1
ZW5jZUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqTG9uZ0xvbmdTZXF1ZW5j
ZUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqVW5zaWduZWRJbnRTZXF1ZW5j
ZUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqVW5zaWduZWRTaG9ydFNlcXVl
bmNlQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpVbnNpZ25lZExvbmdTZXF1
ZW5jZUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqVW5zaWduZWRMb25nTG9u
Z1NlcXVlbmNlQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpGbG9hdFNlcXVl
bmNlQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpEb3VibGVTZXF1ZW5jZUF0
dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqQm9vbGVhblNlcXVlbmNlQXR0cik6
CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpWb2lkU2VxdWVuY2VBdHRyKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakRhdGVTZXF1ZW5jZUF0dHIpOgorICAgICAgICAqIGJp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaDoKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmouaDoKKyAgICAg
ICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGw6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXN0
T2JqVjhJbnRlcm5hbDo6aW50U2VxdWVuY2VBdHRyQXR0ckdldHRlcik6CisgICAgICAgIChUZXN0
T2JqVjhJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6aW50
U2VxdWVuY2VBdHRyQXR0clNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRl
cm5hbDo6c2hvcnRTZXF1ZW5jZUF0dHJBdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
c3RPYmpWOEludGVybmFsOjpzaG9ydFNlcXVlbmNlQXR0ckF0dHJTZXR0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OmxvbmdTZXF1ZW5jZUF0dHJBdHRyR2V0dGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjpsb25nU2VxdWVuY2VBdHRyQXR0
clNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6bG9uZ0xvbmdT
ZXF1ZW5jZUF0dHJBdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVy
bmFsOjpsb25nTG9uZ1NlcXVlbmNlQXR0ckF0dHJTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
VGVzdE9ialY4SW50ZXJuYWw6OnVuc2lnbmVkSW50U2VxdWVuY2VBdHRyQXR0ckdldHRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6dW5zaWduZWRJbnRTZXF1ZW5jZUF0
dHJBdHRyU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjp1bnNp
Z25lZFNob3J0U2VxdWVuY2VBdHRyQXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0
T2JqVjhJbnRlcm5hbDo6dW5zaWduZWRTaG9ydFNlcXVlbmNlQXR0ckF0dHJTZXR0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OnVuc2lnbmVkTG9uZ1NlcXVlbmNlQXR0
ckF0dHJHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OnVuc2ln
bmVkTG9uZ1NlcXVlbmNlQXR0ckF0dHJTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9i
alY4SW50ZXJuYWw6OnVuc2lnbmVkTG9uZ0xvbmdTZXF1ZW5jZUF0dHJBdHRyR2V0dGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjp1bnNpZ25lZExvbmdMb25nU2VxdWVu
Y2VBdHRyQXR0clNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6
ZmxvYXRTZXF1ZW5jZUF0dHJBdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpW
OEludGVybmFsOjpmbG9hdFNlcXVlbmNlQXR0ckF0dHJTZXR0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6VGVzdE9ialY4SW50ZXJuYWw6OmRvdWJsZVNlcXVlbmNlQXR0ckF0dHJHZXR0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OmRvdWJsZVNlcXVlbmNlQXR0ckF0dHJT
ZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OmJvb2xlYW5TZXF1
ZW5jZUF0dHJBdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFs
Ojpib29sZWFuU2VxdWVuY2VBdHRyQXR0clNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0
T2JqVjhJbnRlcm5hbDo6dm9pZFNlcXVlbmNlQXR0ckF0dHJHZXR0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OnZvaWRTZXF1ZW5jZUF0dHJBdHRyU2V0dGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjpkYXRlU2VxdWVuY2VBdHRyQXR0ckdl
dHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6ZGF0ZVNlcXVlbmNl
QXR0ckF0dHJTZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZSk6CisKIDIwMTItMDQtMjMgIFN6aWxh
cmQgTGVkYW4gIDxzemxlZGFuQGluZi51LXN6ZWdlZC5odT4KIAogICAgICAgICBJbmNvcnJlY3Qg
aGFuZGxpbmcgb2YgQ1NTIGVzY2FwZSBzZXF1ZW5jZXMgdGhhdCBlbmNvZGUgc3Vycm9nYXRlcwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yLnBtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ci5wbQkocmV2aXNpb24gMTE0ODcyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy9Db2RlR2VuZXJhdG9yLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0zNDUsNiArMzQ1LDEwIEBAIHN1
YiBBdm9pZEluY2x1c2lvbk9mVHlwZQogICAgIG15ICRvYmplY3QgPSBzaGlmdDsKICAgICBteSAk
dHlwZSA9IHNoaWZ0OwogCisgICAgcmV0dXJuIDEgaWYgJHByaW1pdGl2ZVR5cGVIYXNoeyR0eXBl
fTsKKyAgICByZXR1cm4gMSBpZiAkbnVtZXJpY1R5cGVIYXNoeyR0eXBlfTsKKyAgICByZXR1cm4g
MSBpZiAkdHlwZSBlcSAiU3RyaW5nIjsKKwogICAgICMgU3BlY2lhbCBjYXNlOiBTVkdQb2ludC5o
IC8gU1ZHTnVtYmVyLmggZG8gbm90IGV4aXN0LgogICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJT
VkdQb2ludCIgb3IgJHR5cGUgZXEgIlNWR051bWJlciI7CiAgICAgcmV0dXJuIDA7CkBAIC00NTAs
NyArNDU0LDcgQEAgc3ViIEdldEFycmF5VHlwZQogICAgIG15ICRvYmplY3QgPSBzaGlmdDsKICAg
ICBteSAkdHlwZSA9IHNoaWZ0OwogCi0gICAgcmV0dXJuICQxIGlmICR0eXBlID1+IC9ec2VxdWVu
Y2U8KFtcd1xkX10rKT4uKi87CisgICAgcmV0dXJuICQxIGlmICR0eXBlID1+IC9ec2VxdWVuY2U8
KFtcd1xkX1xzXSspPi4qLzsKICAgICByZXR1cm4gIiI7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lv
biAxMTQ4NzIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMzAyNSw3ICszMDI1LDcgQEAgc3ViIE5hdGl2ZVRv
SlNWYWx1ZQogCiAgICAgbXkgJGFycmF5VHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5HZXRBcnJheVR5
cGUoJHR5cGUpOwogICAgIGlmICgkYXJyYXlUeXBlKSB7Ci0gICAgICAgIGlmICgkYXJyYXlUeXBl
IG5lICJTdHJpbmciKSB7CisgICAgICAgIGlmICghJGNvZGVHZW5lcmF0b3ItPkF2b2lkSW5jbHVz
aW9uT2ZUeXBlKCRhcnJheVR5cGUpKSB7CiAgICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygi
SlMkYXJyYXlUeXBlLmgiLCAkY29uZGl0aW9uYWwpOwogICAgICAgICAgICAgQWRkVG9JbXBsSW5j
bHVkZXMoIiRhcnJheVR5cGUuaCIsICRjb25kaXRpb25hbCk7CiAgICAgICAgIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBt
CShyZXZpc2lvbiAxMTQ4NzIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JWOC5wbQkod29ya2luZyBjb3B5KQpAQCAtOTE1LDEwICs5MTUsMTEgQEAgRU5E
CiAKICAgICAgICAgbXkgJGFycmF5VHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5HZXRBcnJheVR5cGUo
JHJldHVyblR5cGUpOwogICAgICAgICBpZiAoJGFycmF5VHlwZSkgewotICAgICAgICAgICAgQWRk
VG9JbXBsSW5jbHVkZXMoIlY4JGFycmF5VHlwZS5oIik7Ci0gICAgICAgICAgICBBZGRUb0ltcGxJ
bmNsdWRlcygiJGFycmF5VHlwZS5oIik7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERl
Y2xzLCAiICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8JGFycmF5VHlwZT4gPiB2ZWN0b3IgPSAke2dl
dHRlclN0cmluZ307XG4iKTsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIg
ICAgcmV0dXJuIHY4QXJyYXkodmVjdG9yKTtcbiIpOworICAgICAgICAgICAgaWYgKCEkY29kZUdl
bmVyYXRvci0+QXZvaWRJbmNsdXNpb25PZlR5cGUoJGFycmF5VHlwZSkpIHsKKyAgICAgICAgICAg
ICAgICBBZGRUb0ltcGxJbmNsdWRlcygiVjgkYXJyYXlUeXBlLmgiKTsKKyAgICAgICAgICAgICAg
ICBBZGRUb0ltcGxJbmNsdWRlcygiJGFycmF5VHlwZS5oIik7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIHJldHVybiB2OEFycmF5KCR7Z2V0
dGVyU3RyaW5nfSk7XG4iKTsKICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICJ9
XG5cbiIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0zODAxLDcgKzM4MDIs
NyBAQCBzdWIgTmF0aXZlVG9KU1ZhbHVlCiAKICAgICBteSAkYXJyYXlUeXBlID0gJGNvZGVHZW5l
cmF0b3ItPkdldEFycmF5VHlwZSgkdHlwZSk7CiAgICAgaWYgKCRhcnJheVR5cGUpIHsKLSAgICAg
ICAgaWYgKCRhcnJheVR5cGUgbmUgIlN0cmluZyIpIHsKKyAgICAgICAgaWYgKCEkY29kZUdlbmVy
YXRvci0+QXZvaWRJbmNsdXNpb25PZlR5cGUoJGFycmF5VHlwZSkpIHsKICAgICAgICAgICAgIEFk
ZFRvSW1wbEluY2x1ZGVzKCJWOCRhcnJheVR5cGUuaCIpOwogICAgICAgICAgICAgQWRkVG9JbXBs
SW5jbHVkZXMoIiRhcnJheVR5cGUuaCIpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0lETFN0cnVjdHVyZS5wbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETFN0cnVjdHVyZS5wbQkocmV2aXNpb24gMTE0ODcy
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExTdHJ1Y3R1cmUucG0JKHdv
cmtpbmcgY29weSkKQEAgLTg4LDcgKzg4LDcgQEAgb3VyICRjb25zdFZhbHVlID0gJygiW14iXHJc
bl0qIil8KDBbeFhdWwogb3VyICRpZGxEYXRhVHlwZSA9ICdbYS16QS1aMC05XCBdJzsgICAjIEdl
bmVyaWMgZGF0YSB0eXBlIGlkZW50aWZpZXIKIAogIyBNYWdpYyBJREwgcGFyc2luZyByZWd1bGFy
IGV4cHJlc3Npb25zCi1teSAkc3VwcG9ydGVkVHlwZXMgPSAiKCg/Oig/OnVuc2lnbmVkICk/KD86
aW50fHNob3J0fCg/OmxvbmcgKT9sb25nKXwoPzokaWRsSWROcyopKSg/OlxcW1xcXXw8KD86JGlk
bElkTnMqKT4pPykiOworbXkgJHN1cHBvcnRlZFR5cGVzID0gIigoPzooPzp1bnNpZ25lZCApPyg/
OmludHxzaG9ydHwoPzpsb25nICk/bG9uZyl8KD86JGlkbElkTnMqKSkoPzpcXFtcXF18PCg/OiRp
ZGxJZE5zTGlzdCopPik/KSI7CiAKICMgU3BlY2lhbCBJREwgbm90YXRpb25zLiBUaGlzIHJlZ3Vs
YXIgZXhwcmVzc2lvbiBleHRyYWN0cyB0aGUgc3RyaW5nIGJldHdlZW4gdGhlIGZpcnN0IFsgYW5k
IGl0cyBjb3JyZXNwb25kaW5nIF0uCiBvdXIgJGV4dGVuZGVkQXR0cmlidXRlU3ludGF4ID0gcXIv
XFtbXlxbXF1dKig/Oig/P3skSURMU3RydWN0dXJlOjpleHRlbmRlZEF0dHJpYnV0ZVN5bnRheH0p
W15cW1xdXSopKlxdL3g7ICMgVXNlZCBmb3IgZXh0ZW5kZWQgYXR0cmlidXRlcwpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlkbAkocmV2
aXNpb24gMTE0ODcyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rl
c3RPYmouaWRsCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSwyMiBAQCBtb2R1bGUgdGVzdCB7
CiAgICAgICAgIGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxvbmcgICAgICAgdW5zaWduZWRMb25n
TG9uZ0F0dHI7CiAgICAgICAgIGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgICAgICAgICAgc3Ry
aW5nQXR0cjsKICAgICAgICAgYXR0cmlidXRlIFRlc3RPYmogICAgICAgICAgICAgICAgICB0ZXN0
T2JqQXR0cjsKKworICAgICAgICAvLyBTZXF1ZW5jZSBBdHRyaWJ1dGVzCiAgICAgICAgIGF0dHJp
YnV0ZSBzZXF1ZW5jZTxTY3JpcHRQcm9maWxlPiAgc2VxdWVuY2VBdHRyOworICAgICAgICBhdHRy
aWJ1dGUgc2VxdWVuY2U8aW50PiBpbnRTZXF1ZW5jZUF0dHI7CisgICAgICAgIGF0dHJpYnV0ZSBz
ZXF1ZW5jZTxzaG9ydD4gc2hvcnRTZXF1ZW5jZUF0dHI7CisgICAgICAgIGF0dHJpYnV0ZSBzZXF1
ZW5jZTxsb25nPiBsb25nU2VxdWVuY2VBdHRyOworICAgICAgICBhdHRyaWJ1dGUgc2VxdWVuY2U8
bG9uZyBsb25nPiBsb25nTG9uZ1NlcXVlbmNlQXR0cjsKKyAgICAgICAgYXR0cmlidXRlIHNlcXVl
bmNlPHVuc2lnbmVkIGludD4gdW5zaWduZWRJbnRTZXF1ZW5jZUF0dHI7CisgICAgICAgIGF0dHJp
YnV0ZSBzZXF1ZW5jZTx1bnNpZ25lZCBzaG9ydD4gdW5zaWduZWRTaG9ydFNlcXVlbmNlQXR0cjsK
KyAgICAgICAgYXR0cmlidXRlIHNlcXVlbmNlPHVuc2lnbmVkIGxvbmc+IHVuc2lnbmVkTG9uZ1Nl
cXVlbmNlQXR0cjsKKyAgICAgICAgYXR0cmlidXRlIHNlcXVlbmNlPHVuc2lnbmVkIGxvbmcgbG9u
Zz4gdW5zaWduZWRMb25nTG9uZ1NlcXVlbmNlQXR0cjsKKyAgICAgICAgYXR0cmlidXRlIHNlcXVl
bmNlPGZsb2F0PiBmbG9hdFNlcXVlbmNlQXR0cjsKKyAgICAgICAgYXR0cmlidXRlIHNlcXVlbmNl
PGRvdWJsZT4gZG91YmxlU2VxdWVuY2VBdHRyOworICAgICAgICBhdHRyaWJ1dGUgc2VxdWVuY2U8
Ym9vbGVhbj4gYm9vbGVhblNlcXVlbmNlQXR0cjsKKyAgICAgICAgYXR0cmlidXRlIHNlcXVlbmNl
PHZvaWQ+IHZvaWRTZXF1ZW5jZUF0dHI7CisgICAgICAgIGF0dHJpYnV0ZSBzZXF1ZW5jZTxEYXRl
PiBkYXRlU2VxdWVuY2VBdHRyOwogCiAgICAgICAgIEpTLCBWOAogICAgICAgICAvLyBXS191Y2Zp
cnN0LCBXS19sY2ZpcnN0IGV4Y2VwdGlvbmFsIGNhc2VzLgpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAJKHJldmlz
aW9uIDExNDg3MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RPYmouY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCw2ICs5MCwxOSBAQCBzdGF0aWMgY29u
c3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T2JqVGFiCiAgICAgeyAic3RyaW5nQXR0ciIsIERvbnRE
ZWxldGUsIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4o
anNUZXN0T2JqU3RyaW5nQXR0ciksIChpbnRwdHJfdClzZXRKU1Rlc3RPYmpTdHJpbmdBdHRyLCBO
b0ludHJpbnNpYyB9LAogICAgIHsgInRlc3RPYmpBdHRyIiwgRG9udERlbGV0ZSwgKGludHB0cl90
KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RPYmpUZXN0T2Jq
QXR0ciksIChpbnRwdHJfdClzZXRKU1Rlc3RPYmpUZXN0T2JqQXR0ciwgTm9JbnRyaW5zaWMgfSwK
ICAgICB7ICJzZXF1ZW5jZUF0dHIiLCBEb250RGVsZXRlLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8
UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE9ialNlcXVlbmNlQXR0ciksIChpbnRw
dHJfdClzZXRKU1Rlc3RPYmpTZXF1ZW5jZUF0dHIsIE5vSW50cmluc2ljIH0sCisgICAgeyAiaW50
U2VxdWVuY2VBdHRyIiwgRG9udERlbGV0ZSwgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5
U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RPYmpJbnRTZXF1ZW5jZUF0dHIpLCAoaW50cHRyX3Qp
c2V0SlNUZXN0T2JqSW50U2VxdWVuY2VBdHRyLCBOb0ludHJpbnNpYyB9LAorICAgIHsgInNob3J0
U2VxdWVuY2VBdHRyIiwgRG9udERlbGV0ZSwgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5
U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RPYmpTaG9ydFNlcXVlbmNlQXR0ciksIChpbnRwdHJf
dClzZXRKU1Rlc3RPYmpTaG9ydFNlcXVlbmNlQXR0ciwgTm9JbnRyaW5zaWMgfSwKKyAgICB7ICJs
b25nU2VxdWVuY2VBdHRyIiwgRG9udERlbGV0ZSwgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3Bl
cnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RPYmpMb25nU2VxdWVuY2VBdHRyKSwgKGludHB0
cl90KXNldEpTVGVzdE9iakxvbmdTZXF1ZW5jZUF0dHIsIE5vSW50cmluc2ljIH0sCisgICAgeyAi
bG9uZ0xvbmdTZXF1ZW5jZUF0dHIiLCBEb250RGVsZXRlLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8
UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE9iakxvbmdMb25nU2VxdWVuY2VBdHRy
KSwgKGludHB0cl90KXNldEpTVGVzdE9iakxvbmdMb25nU2VxdWVuY2VBdHRyLCBOb0ludHJpbnNp
YyB9LAorICAgIHsgInVuc2lnbmVkSW50U2VxdWVuY2VBdHRyIiwgRG9udERlbGV0ZSwgKGludHB0
cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RPYmpVbnNp
Z25lZEludFNlcXVlbmNlQXR0ciksIChpbnRwdHJfdClzZXRKU1Rlc3RPYmpVbnNpZ25lZEludFNl
cXVlbmNlQXR0ciwgTm9JbnRyaW5zaWMgfSwKKyAgICB7ICJ1bnNpZ25lZFNob3J0U2VxdWVuY2VB
dHRyIiwgRG9udERlbGV0ZSwgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0
VmFsdWVGdW5jPihqc1Rlc3RPYmpVbnNpZ25lZFNob3J0U2VxdWVuY2VBdHRyKSwgKGludHB0cl90
KXNldEpTVGVzdE9ialVuc2lnbmVkU2hvcnRTZXF1ZW5jZUF0dHIsIE5vSW50cmluc2ljIH0sCisg
ICAgeyAidW5zaWduZWRMb25nU2VxdWVuY2VBdHRyIiwgRG9udERlbGV0ZSwgKGludHB0cl90KXN0
YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RPYmpVbnNpZ25lZExv
bmdTZXF1ZW5jZUF0dHIpLCAoaW50cHRyX3Qpc2V0SlNUZXN0T2JqVW5zaWduZWRMb25nU2VxdWVu
Y2VBdHRyLCBOb0ludHJpbnNpYyB9LAorICAgIHsgInVuc2lnbmVkTG9uZ0xvbmdTZXF1ZW5jZUF0
dHIiLCBEb250RGVsZXRlLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRW
YWx1ZUZ1bmM+KGpzVGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdTZXF1ZW5jZUF0dHIpLCAoaW50cHRy
X3Qpc2V0SlNUZXN0T2JqVW5zaWduZWRMb25nTG9uZ1NlcXVlbmNlQXR0ciwgTm9JbnRyaW5zaWMg
fSwKKyAgICB7ICJmbG9hdFNlcXVlbmNlQXR0ciIsIERvbnREZWxldGUsIChpbnRwdHJfdClzdGF0
aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0T2JqRmxvYXRTZXF1ZW5j
ZUF0dHIpLCAoaW50cHRyX3Qpc2V0SlNUZXN0T2JqRmxvYXRTZXF1ZW5jZUF0dHIsIE5vSW50cmlu
c2ljIH0sCisgICAgeyAiZG91YmxlU2VxdWVuY2VBdHRyIiwgRG9udERlbGV0ZSwgKGludHB0cl90
KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RPYmpEb3VibGVT
ZXF1ZW5jZUF0dHIpLCAoaW50cHRyX3Qpc2V0SlNUZXN0T2JqRG91YmxlU2VxdWVuY2VBdHRyLCBO
b0ludHJpbnNpYyB9LAorICAgIHsgImJvb2xlYW5TZXF1ZW5jZUF0dHIiLCBEb250RGVsZXRlLCAo
aW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE9i
akJvb2xlYW5TZXF1ZW5jZUF0dHIpLCAoaW50cHRyX3Qpc2V0SlNUZXN0T2JqQm9vbGVhblNlcXVl
bmNlQXR0ciwgTm9JbnRyaW5zaWMgfSwKKyAgICB7ICJ2b2lkU2VxdWVuY2VBdHRyIiwgRG9udERl
bGV0ZSwgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihq
c1Rlc3RPYmpWb2lkU2VxdWVuY2VBdHRyKSwgKGludHB0cl90KXNldEpTVGVzdE9ialZvaWRTZXF1
ZW5jZUF0dHIsIE5vSW50cmluc2ljIH0sCisgICAgeyAiZGF0ZVNlcXVlbmNlQXR0ciIsIERvbnRE
ZWxldGUsIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4o
anNUZXN0T2JqRGF0ZVNlcXVlbmNlQXR0ciksIChpbnRwdHJfdClzZXRKU1Rlc3RPYmpEYXRlU2Vx
dWVuY2VBdHRyLCBOb0ludHJpbnNpYyB9LAogICAgIHsgIlhNTE9iakF0dHIiLCBEb250RGVsZXRl
LCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVz
dE9ialhNTE9iakF0dHIpLCAoaW50cHRyX3Qpc2V0SlNUZXN0T2JqWE1MT2JqQXR0ciwgTm9JbnRy
aW5zaWMgfSwKICAgICB7ICJjcmVhdGUiLCBEb250RGVsZXRlLCAoaW50cHRyX3Qpc3RhdGljX2Nh
c3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE9iakNyZWF0ZSksIChpbnRwdHJf
dClzZXRKU1Rlc3RPYmpDcmVhdGUsIE5vSW50cmluc2ljIH0sCiAgICAgeyAicmVmbGVjdGVkU3Ry
aW5nQXR0ciIsIERvbnREZWxldGUsIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6
OkdldFZhbHVlRnVuYz4oanNUZXN0T2JqUmVmbGVjdGVkU3RyaW5nQXR0ciksIChpbnRwdHJfdClz
ZXRKU1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyLCBOb0ludHJpbnNpYyB9LApAQCAtMTQ2LDcg
KzE1OSw3IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVWYWx1ZSBKU1Rlc3RPYmpUYWIKICAgICB7
IDAsIDAsIDAsIDAsIE5vSW50cmluc2ljIH0KIH07CiAKLXN0YXRpYyBjb25zdCBIYXNoVGFibGUg
SlNUZXN0T2JqVGFibGUgPSB7IDEzOCwgMTI3LCBKU1Rlc3RPYmpUYWJsZVZhbHVlcywgMCB9Owor
c3RhdGljIGNvbnN0IEhhc2hUYWJsZSBKU1Rlc3RPYmpUYWJsZSA9IHsgMjY1LCAyNTUsIEpTVGVz
dE9ialRhYmxlVmFsdWVzLCAwIH07CiAvKiBIYXNoIHRhYmxlIGZvciBjb25zdHJ1Y3RvciAqLwog
CiBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T2JqQ29uc3RydWN0b3JUYWJsZVZh
bHVlc1tdID0KQEAgLTQ5MCw2ICs1MDMsMTM2IEBAIEpTVmFsdWUganNUZXN0T2JqU2VxdWVuY2VB
dHRyKEV4ZWNTdGF0ZSoKIH0KIAogCitKU1ZhbHVlIGpzVGVzdE9iakludFNlcXVlbmNlQXR0cihF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIGNvbnN0IElkZW50aWZpZXImKQorewor
ICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdChz
bG90QmFzZSkpOworICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBUZXN0T2JqKiBpbXBsID0g
c3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CisgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBqc0FycmF5KGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLT5p
bnRTZXF1ZW5jZUF0dHIoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworCitKU1ZhbHVlIGpz
VGVzdE9ialNob3J0U2VxdWVuY2VBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFz
ZSwgY29uc3QgSWRlbnRpZmllciYpCit7CisgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganND
YXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHNsb3RCYXNlKSk7CisgICAgVU5VU0VEX1BBUkFNKGV4
ZWMpOworICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhp
cy0+aW1wbCgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQXJyYXkoZXhlYywgY2FzdGVkVGhp
cy0+Z2xvYmFsT2JqZWN0KCksIGltcGwtPnNob3J0U2VxdWVuY2VBdHRyKCkpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKKworSlNWYWx1ZSBqc1Rlc3RPYmpMb25nU2VxdWVuY2VBdHRyKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRlbnRpZmllciYpCit7CisgICAg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHNsb3RC
YXNlKSk7CisgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0
aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAgICBKU1ZhbHVlIHJlc3Vs
dCA9IGpzQXJyYXkoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwtPmxvbmdT
ZXF1ZW5jZUF0dHIoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworCitKU1ZhbHVlIGpzVGVz
dE9iakxvbmdMb25nU2VxdWVuY2VBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFz
ZSwgY29uc3QgSWRlbnRpZmllciYpCit7CisgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganND
YXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHNsb3RCYXNlKSk7CisgICAgVU5VU0VEX1BBUkFNKGV4
ZWMpOworICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhp
cy0+aW1wbCgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQXJyYXkoZXhlYywgY2FzdGVkVGhp
cy0+Z2xvYmFsT2JqZWN0KCksIGltcGwtPmxvbmdMb25nU2VxdWVuY2VBdHRyKCkpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKKworSlNWYWx1ZSBqc1Rlc3RPYmpVbnNpZ25lZEludFNlcXVlbmNl
QXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIGNvbnN0IElkZW50aWZpZXIm
KQoreworICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPYmoqPihhc09i
amVjdChzbG90QmFzZSkpOworICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBUZXN0T2JqKiBp
bXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CisgICAgSlNW
YWx1ZSByZXN1bHQgPSBqc0FycmF5KGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBp
bXBsLT51bnNpZ25lZEludFNlcXVlbmNlQXR0cigpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CisKK0pTVmFsdWUganNUZXN0T2JqVW5zaWduZWRTaG9ydFNlcXVlbmNlQXR0cihFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIGNvbnN0IElkZW50aWZpZXImKQoreworICAgIEpTVGVz
dE9iaiogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdChzbG90QmFzZSkp
OworICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBUZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nh
c3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBq
c0FycmF5KGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLT51bnNpZ25lZFNo
b3J0U2VxdWVuY2VBdHRyKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKworSlNWYWx1ZSBq
c1Rlc3RPYmpVbnNpZ25lZExvbmdTZXF1ZW5jZUF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IHNsb3RCYXNlLCBjb25zdCBJZGVudGlmaWVyJikKK3sKKyAgICBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMgPSBqc0Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3Qoc2xvdEJhc2UpKTsKKyAgICBVTlVTRURf
UEFSQU0oZXhlYyk7CisgICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihj
YXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNBcnJheShleGVjLCBj
YXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC0+dW5zaWduZWRMb25nU2VxdWVuY2VBdHRy
KCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKworSlNWYWx1ZSBqc1Rlc3RPYmpVbnNpZ25l
ZExvbmdMb25nU2VxdWVuY2VBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwg
Y29uc3QgSWRlbnRpZmllciYpCit7CisgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNDYXN0
PEpTVGVzdE9iaio+KGFzT2JqZWN0KHNsb3RCYXNlKSk7CisgICAgVU5VU0VEX1BBUkFNKGV4ZWMp
OworICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+
aW1wbCgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQXJyYXkoZXhlYywgY2FzdGVkVGhpcy0+
Z2xvYmFsT2JqZWN0KCksIGltcGwtPnVuc2lnbmVkTG9uZ0xvbmdTZXF1ZW5jZUF0dHIoKSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworCitKU1ZhbHVlIGpzVGVzdE9iakZsb2F0U2VxdWVuY2VB
dHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRlbnRpZmllciYp
Cit7CisgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE9iaio+KGFzT2Jq
ZWN0KHNsb3RCYXNlKSk7CisgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFRlc3RPYmoqIGlt
cGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAgICBKU1Zh
bHVlIHJlc3VsdCA9IGpzQXJyYXkoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGlt
cGwtPmZsb2F0U2VxdWVuY2VBdHRyKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKworSlNW
YWx1ZSBqc1Rlc3RPYmpEb3VibGVTZXF1ZW5jZUF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IHNsb3RCYXNlLCBjb25zdCBJZGVudGlmaWVyJikKK3sKKyAgICBKU1Rlc3RPYmoqIGNhc3RlZFRo
aXMgPSBqc0Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3Qoc2xvdEJhc2UpKTsKKyAgICBVTlVTRURf
UEFSQU0oZXhlYyk7CisgICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihj
YXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNBcnJheShleGVjLCBj
YXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC0+ZG91YmxlU2VxdWVuY2VBdHRyKCkpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKKworSlNWYWx1ZSBqc1Rlc3RPYmpCb29sZWFuU2VxdWVu
Y2VBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRlbnRpZmll
ciYpCit7CisgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE9iaio+KGFz
T2JqZWN0KHNsb3RCYXNlKSk7CisgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFRlc3RPYmoq
IGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAgICBK
U1ZhbHVlIHJlc3VsdCA9IGpzQXJyYXkoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCks
IGltcGwtPmJvb2xlYW5TZXF1ZW5jZUF0dHIoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
CitKU1ZhbHVlIGpzVGVzdE9ialZvaWRTZXF1ZW5jZUF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIHNsb3RCYXNlLCBjb25zdCBJZGVudGlmaWVyJikKK3sKKyAgICBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3Qoc2xvdEJhc2UpKTsKKyAgICBVTlVT
RURfUEFSQU0oZXhlYyk7CisgICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RPYmoq
PihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0ganNBcnJheShleGVj
LCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC0+dm9pZFNlcXVlbmNlQXR0cigpKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCisKK0pTVmFsdWUganNUZXN0T2JqRGF0ZVNlcXVlbmNl
QXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIGNvbnN0IElkZW50aWZpZXIm
KQoreworICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPYmoqPihhc09i
amVjdChzbG90QmFzZSkpOworICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBUZXN0T2JqKiBp
bXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CisgICAgSlNW
YWx1ZSByZXN1bHQgPSBqc0FycmF5KGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBp
bXBsLT5kYXRlU2VxdWVuY2VBdHRyKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKwogSlNW
YWx1ZSBqc1Rlc3RPYmpYTUxPYmpBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFz
ZSwgY29uc3QgSWRlbnRpZmllciYpCiB7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganND
YXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHNsb3RCYXNlKSk7CkBAIC05ODcsNiArMTEzMCwxMTAg
QEAgdm9pZCBzZXRKU1Rlc3RPYmpTZXF1ZW5jZUF0dHIoRXhlY1N0YXRlKgogfQogCiAKK3ZvaWQg
c2V0SlNUZXN0T2JqSW50U2VxdWVuY2VBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRo
aXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0g
anNDYXN0PEpTVGVzdE9iaio+KHRoaXNPYmplY3QpOworICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0
aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAgICBpbXBsLT5zZXRJbnRT
ZXF1ZW5jZUF0dHIodG9OYXRpdmVBcnJheTxpbnQ+KGV4ZWMsIHZhbHVlKSk7Cit9CisKKwordm9p
ZCBzZXRKU1Rlc3RPYmpTaG9ydFNlcXVlbmNlQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0
KiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIEpTVGVzdE9iaiogY2FzdGVkVGhp
cyA9IGpzQ2FzdDxKU1Rlc3RPYmoqPih0aGlzT2JqZWN0KTsKKyAgICBUZXN0T2JqKiBpbXBsID0g
c3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CisgICAgaW1wbC0+c2V0
U2hvcnRTZXF1ZW5jZUF0dHIodG9OYXRpdmVBcnJheTxzaG9ydD4oZXhlYywgdmFsdWUpKTsKK30K
KworCit2b2lkIHNldEpTVGVzdE9iakxvbmdTZXF1ZW5jZUF0dHIoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCogdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBKU1Rlc3RPYmoqIGNh
c3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T2JqKj4odGhpc09iamVjdCk7CisgICAgVGVzdE9iaiog
aW1wbCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIGlt
cGwtPnNldExvbmdTZXF1ZW5jZUF0dHIodG9OYXRpdmVBcnJheTxsb25nPihleGVjLCB2YWx1ZSkp
OworfQorCisKK3ZvaWQgc2V0SlNUZXN0T2JqTG9uZ0xvbmdTZXF1ZW5jZUF0dHIoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBKU1Rl
c3RPYmoqIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T2JqKj4odGhpc09iamVjdCk7CisgICAg
VGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkp
OworICAgIGltcGwtPnNldExvbmdMb25nU2VxdWVuY2VBdHRyKHRvTmF0aXZlQXJyYXk8bG9uZyBs
b25nPihleGVjLCB2YWx1ZSkpOworfQorCisKK3ZvaWQgc2V0SlNUZXN0T2JqVW5zaWduZWRJbnRT
ZXF1ZW5jZUF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iamVjdCwgSlNWYWx1
ZSB2YWx1ZSkKK3sKKyAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T2Jq
Kj4odGhpc09iamVjdCk7CisgICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RPYmoq
PihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIGltcGwtPnNldFVuc2lnbmVkSW50U2VxdWVuY2VB
dHRyKHRvTmF0aXZlQXJyYXk8dW5zaWduZWQgaW50PihleGVjLCB2YWx1ZSkpOworfQorCisKK3Zv
aWQgc2V0SlNUZXN0T2JqVW5zaWduZWRTaG9ydFNlcXVlbmNlQXR0cihFeGVjU3RhdGUqIGV4ZWMs
IEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIEpTVGVzdE9iaiog
Y2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPYmoqPih0aGlzT2JqZWN0KTsKKyAgICBUZXN0T2Jq
KiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CisgICAg
aW1wbC0+c2V0VW5zaWduZWRTaG9ydFNlcXVlbmNlQXR0cih0b05hdGl2ZUFycmF5PHVuc2lnbmVk
IHNob3J0PihleGVjLCB2YWx1ZSkpOworfQorCisKK3ZvaWQgc2V0SlNUZXN0T2JqVW5zaWduZWRM
b25nU2VxdWVuY2VBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmplY3QsIEpT
VmFsdWUgdmFsdWUpCit7CisgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVz
dE9iaio+KHRoaXNPYmplY3QpOworICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0
T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAgICBpbXBsLT5zZXRVbnNpZ25lZExvbmdTZXF1
ZW5jZUF0dHIodG9OYXRpdmVBcnJheTx1bnNpZ25lZCBsb25nPihleGVjLCB2YWx1ZSkpOworfQor
CisKK3ZvaWQgc2V0SlNUZXN0T2JqVW5zaWduZWRMb25nTG9uZ1NlcXVlbmNlQXR0cihFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIEpT
VGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPYmoqPih0aGlzT2JqZWN0KTsKKyAg
ICBUZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwo
KSk7CisgICAgaW1wbC0+c2V0VW5zaWduZWRMb25nTG9uZ1NlcXVlbmNlQXR0cih0b05hdGl2ZUFy
cmF5PHVuc2lnbmVkIGxvbmcgbG9uZz4oZXhlYywgdmFsdWUpKTsKK30KKworCit2b2lkIHNldEpT
VGVzdE9iakZsb2F0U2VxdWVuY2VBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNP
YmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganND
YXN0PEpTVGVzdE9iaio+KHRoaXNPYmplY3QpOworICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNf
Y2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAgICBpbXBsLT5zZXRGbG9hdFNl
cXVlbmNlQXR0cih0b05hdGl2ZUFycmF5PGZsb2F0PihleGVjLCB2YWx1ZSkpOworfQorCisKK3Zv
aWQgc2V0SlNUZXN0T2JqRG91YmxlU2VxdWVuY2VBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmpl
Y3QqIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgSlNUZXN0T2JqKiBjYXN0ZWRU
aGlzID0ganNDYXN0PEpTVGVzdE9iaio+KHRoaXNPYmplY3QpOworICAgIFRlc3RPYmoqIGltcGwg
PSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAgICBpbXBsLT5z
ZXREb3VibGVTZXF1ZW5jZUF0dHIodG9OYXRpdmVBcnJheTxkb3VibGU+KGV4ZWMsIHZhbHVlKSk7
Cit9CisKKwordm9pZCBzZXRKU1Rlc3RPYmpCb29sZWFuU2VxdWVuY2VBdHRyKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgSlNUZXN0
T2JqKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE9iaio+KHRoaXNPYmplY3QpOworICAgIFRl
c3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsK
KyAgICBpbXBsLT5zZXRCb29sZWFuU2VxdWVuY2VBdHRyKHRvTmF0aXZlQXJyYXk8Ym9vbGVhbj4o
ZXhlYywgdmFsdWUpKTsKK30KKworCit2b2lkIHNldEpTVGVzdE9ialZvaWRTZXF1ZW5jZUF0dHIo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sK
KyAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T2JqKj4odGhpc09iamVj
dCk7CisgICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlz
LT5pbXBsKCkpOworICAgIGltcGwtPnNldFZvaWRTZXF1ZW5jZUF0dHIodG9OYXRpdmVBcnJheTx2
b2lkPihleGVjLCB2YWx1ZSkpOworfQorCisKK3ZvaWQgc2V0SlNUZXN0T2JqRGF0ZVNlcXVlbmNl
QXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVl
KQoreworICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPYmoqPih0aGlz
T2JqZWN0KTsKKyAgICBUZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3Rl
ZFRoaXMtPmltcGwoKSk7CisgICAgaW1wbC0+c2V0RGF0ZVNlcXVlbmNlQXR0cih0b05hdGl2ZUFy
cmF5PERhdGU+KGV4ZWMsIHZhbHVlKSk7Cit9CisKKwogdm9pZCBzZXRKU1Rlc3RPYmpYTUxPYmpB
dHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUp
CiB7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE9iaio+KHRoaXNP
YmplY3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pT
VGVzdE9iai5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9KUy9KU1Rlc3RPYmouaAkocmV2aXNpb24gMTE0ODcyKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MzUsNiArMjM1LDMyIEBAIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpUZXN0T2JqQXR0cihKU0M6OkUK
IHZvaWQgc2V0SlNUZXN0T2JqVGVzdE9iakF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2Jq
ZWN0KiwgSlNDOjpKU1ZhbHVlKTsKIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpTZXF1ZW5jZUF0dHIo
SlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOwog
dm9pZCBzZXRKU1Rlc3RPYmpTZXF1ZW5jZUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2Jq
ZWN0KiwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpJbnRTZXF1ZW5jZUF0
dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYp
Owordm9pZCBzZXRKU1Rlc3RPYmpJbnRTZXF1ZW5jZUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6
OkpTT2JqZWN0KiwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpTaG9ydFNl
cXVlbmNlQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpJZGVu
dGlmaWVyJik7Cit2b2lkIHNldEpTVGVzdE9ialNob3J0U2VxdWVuY2VBdHRyKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0
T2JqTG9uZ1NlcXVlbmNlQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgY29uc3Qg
SlNDOjpJZGVudGlmaWVyJik7Cit2b2lkIHNldEpTVGVzdE9iakxvbmdTZXF1ZW5jZUF0dHIoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1
ZSBqc1Rlc3RPYmpMb25nTG9uZ1NlcXVlbmNlQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNW
YWx1ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7Cit2b2lkIHNldEpTVGVzdE9iakxvbmdMb25n
U2VxdWVuY2VBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6SlNWYWx1
ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqVW5zaWduZWRJbnRTZXF1ZW5jZUF0dHIoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOwordm9pZCBz
ZXRKU1Rlc3RPYmpVbnNpZ25lZEludFNlcXVlbmNlQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
SlNPYmplY3QqLCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE9ialVuc2lnbmVk
U2hvcnRTZXF1ZW5jZUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpT
Qzo6SWRlbnRpZmllciYpOwordm9pZCBzZXRKU1Rlc3RPYmpVbnNpZ25lZFNob3J0U2VxdWVuY2VB
dHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6SlNWYWx1ZSk7CitKU0M6
OkpTVmFsdWUganNUZXN0T2JqVW5zaWduZWRMb25nU2VxdWVuY2VBdHRyKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKK3ZvaWQgc2V0SlNUZXN0
T2JqVW5zaWduZWRMb25nU2VxdWVuY2VBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVj
dCosIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqVW5zaWduZWRMb25nTG9u
Z1NlcXVlbmNlQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpJ
ZGVudGlmaWVyJik7Cit2b2lkIHNldEpTVGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdTZXF1ZW5jZUF0
dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6
SlNWYWx1ZSBqc1Rlc3RPYmpGbG9hdFNlcXVlbmNlQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
SlNWYWx1ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7Cit2b2lkIHNldEpTVGVzdE9iakZsb2F0
U2VxdWVuY2VBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6SlNWYWx1
ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqRG91YmxlU2VxdWVuY2VBdHRyKEpTQzo6RXhlY1N0
YXRlKiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKK3ZvaWQgc2V0SlNU
ZXN0T2JqRG91YmxlU2VxdWVuY2VBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCos
IEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqQm9vbGVhblNlcXVlbmNlQXR0
cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7
Cit2b2lkIHNldEpTVGVzdE9iakJvb2xlYW5TZXF1ZW5jZUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTT2JqZWN0KiwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpWb2lk
U2VxdWVuY2VBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6Oklk
ZW50aWZpZXImKTsKK3ZvaWQgc2V0SlNUZXN0T2JqVm9pZFNlcXVlbmNlQXR0cihKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTVmFsdWUpOworSlNDOjpKU1ZhbHVlIGpzVGVz
dE9iakRhdGVTZXF1ZW5jZUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNvbnN0
IEpTQzo6SWRlbnRpZmllciYpOwordm9pZCBzZXRKU1Rlc3RPYmpEYXRlU2VxdWVuY2VBdHRyKEpT
Qzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6SlNWYWx1ZSk7CiBKU0M6OkpTVmFs
dWUganNUZXN0T2JqWE1MT2JqQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgY29u
c3QgSlNDOjpJZGVudGlmaWVyJik7CiB2b2lkIHNldEpTVGVzdE9ialhNTE9iakF0dHIoSlNDOjpF
eGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU1ZhbHVlKTsKIEpTQzo6SlNWYWx1ZSBq
c1Rlc3RPYmpDcmVhdGUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6
SWRlbnRpZmllciYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L09iakMvRE9NVGVzdE9iai5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmouaAkocmV2aXNpb24gMTE0ODcyKQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC04Miw4ICs4Miw2IEBAIGVudW0gewogLSAodm9pZClzZXRTdHJpbmdBdHRy
OihOU1N0cmluZyAqKW5ld1N0cmluZ0F0dHI7CiAtIChET01UZXN0T2JqICopdGVzdE9iakF0dHI7
CiAtICh2b2lkKXNldFRlc3RPYmpBdHRyOihET01UZXN0T2JqICopbmV3VGVzdE9iakF0dHI7Ci0t
IChET01zZXF1ZW5jZTxTY3JpcHRQcm9maWxlPiAqKXNlcXVlbmNlQXR0cjsKLS0gKHZvaWQpc2V0
U2VxdWVuY2VBdHRyOihET01zZXF1ZW5jZTxTY3JpcHRQcm9maWxlPiAqKW5ld1NlcXVlbmNlQXR0
cjsKIC0gKERPTVRlc3RPYmogKilYTUxPYmpBdHRyOwogLSAodm9pZClzZXRYTUxPYmpBdHRyOihE
T01UZXN0T2JqICopbmV3WE1MT2JqQXR0cjsKIC0gKEJPT0wpY3JlYXRlOwpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5j
cHAJKHJldmlzaW9uIDExNDg3MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RPYmouY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzUsNiArMjM1LDIxNCBA
QCBzdGF0aWMgdm9pZCBzZXF1ZW5jZUF0dHJBdHRyU2V0dGVyKHY4OjpMCiAgICAgcmV0dXJuOwog
fQogCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGludFNlcXVlbmNlQXR0ckF0dHJHZXR0
ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGlu
Zm8pCit7CisgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5pbnRTZXF1ZW5jZUF0dHIuX2dldCIp
OworICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7
CisgICAgcmV0dXJuIHY4QXJyYXkoaW1wLT5pbnRTZXF1ZW5jZUF0dHIoKSk7Cit9CisKK3N0YXRp
YyB2b2lkIGludFNlcXVlbmNlQXR0ckF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5h
bWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBp
bmZvKQoreworICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmouaW50U2VxdWVuY2VBdHRyLl9zZXQi
KTsKKyAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkp
OworICAgIFZlY3RvcjxpbnQ+IHYgPSB0b05hdGl2ZUFycmF5PGludD4odmFsdWUpOworICAgIGlt
cC0+c2V0SW50U2VxdWVuY2VBdHRyKHYpOworICAgIHJldHVybjsKK30KKworc3RhdGljIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBzaG9ydFNlcXVlbmNlQXR0ckF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4
OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCit7CisgICAgSU5D
X1NUQVRTKCJET00uVGVzdE9iai5zaG9ydFNlcXVlbmNlQXR0ci5fZ2V0Iik7CisgICAgVGVzdE9i
aiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKKyAgICByZXR1cm4g
djhBcnJheShpbXAtPnNob3J0U2VxdWVuY2VBdHRyKCkpOworfQorCitzdGF0aWMgdm9pZCBzaG9y
dFNlcXVlbmNlQXR0ckF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpM
b2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQorewor
ICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmouc2hvcnRTZXF1ZW5jZUF0dHIuX3NldCIpOworICAg
IFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CisgICAg
VmVjdG9yPHNob3J0PiB2ID0gdG9OYXRpdmVBcnJheTxzaG9ydD4odmFsdWUpOworICAgIGltcC0+
c2V0U2hvcnRTZXF1ZW5jZUF0dHIodik7CisgICAgcmV0dXJuOworfQorCitzdGF0aWMgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IGxvbmdTZXF1ZW5jZUF0dHJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6
U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQoreworICAgIElOQ19T
VEFUUygiRE9NLlRlc3RPYmoubG9uZ1NlcXVlbmNlQXR0ci5fZ2V0Iik7CisgICAgVGVzdE9iaiog
aW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKKyAgICByZXR1cm4gdjhB
cnJheShpbXAtPmxvbmdTZXF1ZW5jZUF0dHIoKSk7Cit9CisKK3N0YXRpYyB2b2lkIGxvbmdTZXF1
ZW5jZUF0dHJBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8
djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKK3sKKyAgICBJ
TkNfU1RBVFMoIkRPTS5UZXN0T2JqLmxvbmdTZXF1ZW5jZUF0dHIuX3NldCIpOworICAgIFRlc3RP
YmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CisgICAgVmVjdG9y
PGxvbmc+IHYgPSB0b05hdGl2ZUFycmF5PGxvbmc+KHZhbHVlKTsKKyAgICBpbXAtPnNldExvbmdT
ZXF1ZW5jZUF0dHIodik7CisgICAgcmV0dXJuOworfQorCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IGxvbmdMb25nU2VxdWVuY2VBdHRyQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmlu
Zz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKK3sKKyAgICBJTkNfU1RBVFMo
IkRPTS5UZXN0T2JqLmxvbmdMb25nU2VxdWVuY2VBdHRyLl9nZXQiKTsKKyAgICBUZXN0T2JqKiBp
bXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOworICAgIHJldHVybiB2OEFy
cmF5KGltcC0+bG9uZ0xvbmdTZXF1ZW5jZUF0dHIoKSk7Cit9CisKK3N0YXRpYyB2b2lkIGxvbmdM
b25nU2VxdWVuY2VBdHRyQXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6
OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCit7
CisgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5sb25nTG9uZ1NlcXVlbmNlQXR0ci5fc2V0Iik7
CisgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsK
KyAgICBWZWN0b3I8bG9uZyBsb25nPiB2ID0gdG9OYXRpdmVBcnJheTxsb25nIGxvbmc+KHZhbHVl
KTsKKyAgICBpbXAtPnNldExvbmdMb25nU2VxdWVuY2VBdHRyKHYpOworICAgIHJldHVybjsKK30K
Kworc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB1bnNpZ25lZEludFNlcXVlbmNlQXR0ckF0
dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3Nvcklu
Zm8mIGluZm8pCit7CisgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai51bnNpZ25lZEludFNlcXVl
bmNlQXR0ci5fZ2V0Iik7CisgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShp
bmZvLkhvbGRlcigpKTsKKyAgICByZXR1cm4gdjhBcnJheShpbXAtPnVuc2lnbmVkSW50U2VxdWVu
Y2VBdHRyKCkpOworfQorCitzdGF0aWMgdm9pZCB1bnNpZ25lZEludFNlcXVlbmNlQXR0ckF0dHJT
ZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZh
bHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQoreworICAgIElOQ19TVEFUUygiRE9N
LlRlc3RPYmoudW5zaWduZWRJbnRTZXF1ZW5jZUF0dHIuX3NldCIpOworICAgIFRlc3RPYmoqIGlt
cCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CisgICAgVmVjdG9yPHVuc2ln
bmVkIGludD4gdiA9IHRvTmF0aXZlQXJyYXk8dW5zaWduZWQgaW50Pih2YWx1ZSk7CisgICAgaW1w
LT5zZXRVbnNpZ25lZEludFNlcXVlbmNlQXR0cih2KTsKKyAgICByZXR1cm47Cit9CisKK3N0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdW5zaWduZWRTaG9ydFNlcXVlbmNlQXR0ckF0dHJHZXR0
ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGlu
Zm8pCit7CisgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai51bnNpZ25lZFNob3J0U2VxdWVuY2VB
dHRyLl9nZXQiKTsKKyAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8u
SG9sZGVyKCkpOworICAgIHJldHVybiB2OEFycmF5KGltcC0+dW5zaWduZWRTaG9ydFNlcXVlbmNl
QXR0cigpKTsKK30KKworc3RhdGljIHZvaWQgdW5zaWduZWRTaG9ydFNlcXVlbmNlQXR0ckF0dHJT
ZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZh
bHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQoreworICAgIElOQ19TVEFUUygiRE9N
LlRlc3RPYmoudW5zaWduZWRTaG9ydFNlcXVlbmNlQXR0ci5fc2V0Iik7CisgICAgVGVzdE9iaiog
aW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKKyAgICBWZWN0b3I8dW5z
aWduZWQgc2hvcnQ+IHYgPSB0b05hdGl2ZUFycmF5PHVuc2lnbmVkIHNob3J0Pih2YWx1ZSk7Cisg
ICAgaW1wLT5zZXRVbnNpZ25lZFNob3J0U2VxdWVuY2VBdHRyKHYpOworICAgIHJldHVybjsKK30K
Kworc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB1bnNpZ25lZExvbmdTZXF1ZW5jZUF0dHJB
dHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJ
bmZvJiBpbmZvKQoreworICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmoudW5zaWduZWRMb25nU2Vx
dWVuY2VBdHRyLl9nZXQiKTsKKyAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZl
KGluZm8uSG9sZGVyKCkpOworICAgIHJldHVybiB2OEFycmF5KGltcC0+dW5zaWduZWRMb25nU2Vx
dWVuY2VBdHRyKCkpOworfQorCitzdGF0aWMgdm9pZCB1bnNpZ25lZExvbmdTZXF1ZW5jZUF0dHJB
dHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVl
PiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKK3sKKyAgICBJTkNfU1RBVFMo
IkRPTS5UZXN0T2JqLnVuc2lnbmVkTG9uZ1NlcXVlbmNlQXR0ci5fc2V0Iik7CisgICAgVGVzdE9i
aiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKKyAgICBWZWN0b3I8
dW5zaWduZWQgbG9uZz4gdiA9IHRvTmF0aXZlQXJyYXk8dW5zaWduZWQgbG9uZz4odmFsdWUpOwor
ICAgIGltcC0+c2V0VW5zaWduZWRMb25nU2VxdWVuY2VBdHRyKHYpOworICAgIHJldHVybjsKK30K
Kworc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB1bnNpZ25lZExvbmdMb25nU2VxdWVuY2VB
dHRyQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vz
c29ySW5mbyYgaW5mbykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLnVuc2lnbmVkTG9u
Z0xvbmdTZXF1ZW5jZUF0dHIuX2dldCIpOworICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6
dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CisgICAgcmV0dXJuIHY4QXJyYXkoaW1wLT51bnNpZ25l
ZExvbmdMb25nU2VxdWVuY2VBdHRyKCkpOworfQorCitzdGF0aWMgdm9pZCB1bnNpZ25lZExvbmdM
b25nU2VxdWVuY2VBdHRyQXR0clNldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6
OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCit7
CisgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai51bnNpZ25lZExvbmdMb25nU2VxdWVuY2VBdHRy
Ll9zZXQiKTsKKyAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9s
ZGVyKCkpOworICAgIFZlY3Rvcjx1bnNpZ25lZCBsb25nIGxvbmc+IHYgPSB0b05hdGl2ZUFycmF5
PHVuc2lnbmVkIGxvbmcgbG9uZz4odmFsdWUpOworICAgIGltcC0+c2V0VW5zaWduZWRMb25nTG9u
Z1NlcXVlbmNlQXR0cih2KTsKKyAgICByZXR1cm47Cit9CisKK3N0YXRpYyB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gZmxvYXRTZXF1ZW5jZUF0dHJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5n
PiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQoreworICAgIElOQ19TVEFUUygi
RE9NLlRlc3RPYmouZmxvYXRTZXF1ZW5jZUF0dHIuX2dldCIpOworICAgIFRlc3RPYmoqIGltcCA9
IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CisgICAgcmV0dXJuIHY4QXJyYXko
aW1wLT5mbG9hdFNlcXVlbmNlQXR0cigpKTsKK30KKworc3RhdGljIHZvaWQgZmxvYXRTZXF1ZW5j
ZUF0dHJBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6
OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKK3sKKyAgICBJTkNf
U1RBVFMoIkRPTS5UZXN0T2JqLmZsb2F0U2VxdWVuY2VBdHRyLl9zZXQiKTsKKyAgICBUZXN0T2Jq
KiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOworICAgIFZlY3Rvcjxm
bG9hdD4gdiA9IHRvTmF0aXZlQXJyYXk8ZmxvYXQ+KHZhbHVlKTsKKyAgICBpbXAtPnNldEZsb2F0
U2VxdWVuY2VBdHRyKHYpOworICAgIHJldHVybjsKK30KKworc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBkb3VibGVTZXF1ZW5jZUF0dHJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5n
PiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQoreworICAgIElOQ19TVEFUUygi
RE9NLlRlc3RPYmouZG91YmxlU2VxdWVuY2VBdHRyLl9nZXQiKTsKKyAgICBUZXN0T2JqKiBpbXAg
PSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOworICAgIHJldHVybiB2OEFycmF5
KGltcC0+ZG91YmxlU2VxdWVuY2VBdHRyKCkpOworfQorCitzdGF0aWMgdm9pZCBkb3VibGVTZXF1
ZW5jZUF0dHJBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8
djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKK3sKKyAgICBJ
TkNfU1RBVFMoIkRPTS5UZXN0T2JqLmRvdWJsZVNlcXVlbmNlQXR0ci5fc2V0Iik7CisgICAgVGVz
dE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKKyAgICBWZWN0
b3I8ZG91YmxlPiB2ID0gdG9OYXRpdmVBcnJheTxkb3VibGU+KHZhbHVlKTsKKyAgICBpbXAtPnNl
dERvdWJsZVNlcXVlbmNlQXR0cih2KTsKKyAgICByZXR1cm47Cit9CisKK3N0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gYm9vbGVhblNlcXVlbmNlQXR0ckF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4
OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCit7CisgICAgSU5D
X1NUQVRTKCJET00uVGVzdE9iai5ib29sZWFuU2VxdWVuY2VBdHRyLl9nZXQiKTsKKyAgICBUZXN0
T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOworICAgIHJldHVy
biB2OEFycmF5KGltcC0+Ym9vbGVhblNlcXVlbmNlQXR0cigpKTsKK30KKworc3RhdGljIHZvaWQg
Ym9vbGVhblNlcXVlbmNlQXR0ckF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUs
IHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZv
KQoreworICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmouYm9vbGVhblNlcXVlbmNlQXR0ci5fc2V0
Iik7CisgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigp
KTsKKyAgICBWZWN0b3I8Ym9vbGVhbj4gdiA9IHRvTmF0aXZlQXJyYXk8Ym9vbGVhbj4odmFsdWUp
OworICAgIGltcC0+c2V0Qm9vbGVhblNlcXVlbmNlQXR0cih2KTsKKyAgICByZXR1cm47Cit9CisK
K3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdm9pZFNlcXVlbmNlQXR0ckF0dHJHZXR0ZXIo
djg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8p
Cit7CisgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai52b2lkU2VxdWVuY2VBdHRyLl9nZXQiKTsK
KyAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwor
ICAgIHJldHVybiB2OEFycmF5KGltcC0+dm9pZFNlcXVlbmNlQXR0cigpKTsKK30KKworc3RhdGlj
IHZvaWQgdm9pZFNlcXVlbmNlQXR0ckF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5h
bWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBp
bmZvKQoreworICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmoudm9pZFNlcXVlbmNlQXR0ci5fc2V0
Iik7CisgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigp
KTsKKyAgICBWZWN0b3I8dm9pZD4gdiA9IHRvTmF0aXZlQXJyYXk8dm9pZD4odmFsdWUpOworICAg
IGltcC0+c2V0Vm9pZFNlcXVlbmNlQXR0cih2KTsKKyAgICByZXR1cm47Cit9CisKK3N0YXRpYyB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZGF0ZVNlcXVlbmNlQXR0ckF0dHJHZXR0ZXIodjg6OkxvY2Fs
PHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCit7CisgICAg
SU5DX1NUQVRTKCJET00uVGVzdE9iai5kYXRlU2VxdWVuY2VBdHRyLl9nZXQiKTsKKyAgICBUZXN0
T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOworICAgIHJldHVy
biB2OEFycmF5KGltcC0+ZGF0ZVNlcXVlbmNlQXR0cigpKTsKK30KKworc3RhdGljIHZvaWQgZGF0
ZVNlcXVlbmNlQXR0ckF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpM
b2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQorewor
ICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmouZGF0ZVNlcXVlbmNlQXR0ci5fc2V0Iik7CisgICAg
VGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKKyAgICBW
ZWN0b3I8RGF0ZT4gdiA9IHRvTmF0aXZlQXJyYXk8RGF0ZT4odmFsdWUpOworICAgIGltcC0+c2V0
RGF0ZVNlcXVlbmNlQXR0cih2KTsKKyAgICByZXR1cm47Cit9CisKIHN0YXRpYyB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gWE1MT2JqQXR0ckF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5h
bWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgSU5DX1NUQVRTKCJET00u
VGVzdE9iai5YTUxPYmpBdHRyLl9nZXQiKTsKQEAgLTE4MTQsNiArMjAyMiwzMiBAQCBzdGF0aWMg
Y29uc3QgQmF0Y2hlZEF0dHJpYnV0ZSBUZXN0T2JqQXR0CiAgICAgeyJ0ZXN0T2JqQXR0ciIsIFRl
c3RPYmpWOEludGVybmFsOjp0ZXN0T2JqQXR0ckF0dHJHZXR0ZXIsIFRlc3RPYmpWOEludGVybmFs
Ojp0ZXN0T2JqQXR0ckF0dHJTZXR0ZXIsIDAgLyogbm8gZGF0YSAqLywgc3RhdGljX2Nhc3Q8djg6
OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxUKSwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0
cmlidXRlPih2ODo6Tm9uZSksIDAgLyogb24gaW5zdGFuY2UgKi99LAogICAgIC8vIEF0dHJpYnV0
ZSAnc2VxdWVuY2VBdHRyJyAoVHlwZTogJ2F0dHJpYnV0ZScgRXh0QXR0cjogJycpCiAgICAgeyJz
ZXF1ZW5jZUF0dHIiLCBUZXN0T2JqVjhJbnRlcm5hbDo6c2VxdWVuY2VBdHRyQXR0ckdldHRlciwg
VGVzdE9ialY4SW50ZXJuYWw6OnNlcXVlbmNlQXR0ckF0dHJTZXR0ZXIsIDAgLyogbm8gZGF0YSAq
Lywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxUKSwgc3RhdGljX2Nh
c3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyogb24gaW5zdGFuY2UgKi99
LAorICAgIC8vIEF0dHJpYnV0ZSAnaW50U2VxdWVuY2VBdHRyJyAoVHlwZTogJ2F0dHJpYnV0ZScg
RXh0QXR0cjogJycpCisgICAgeyJpbnRTZXF1ZW5jZUF0dHIiLCBUZXN0T2JqVjhJbnRlcm5hbDo6
aW50U2VxdWVuY2VBdHRyQXR0ckdldHRlciwgVGVzdE9ialY4SW50ZXJuYWw6OmludFNlcXVlbmNl
QXR0ckF0dHJTZXR0ZXIsIDAgLyogbm8gZGF0YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0Nv
bnRyb2w+KHY4OjpERUZBVUxUKSwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2
ODo6Tm9uZSksIDAgLyogb24gaW5zdGFuY2UgKi99LAorICAgIC8vIEF0dHJpYnV0ZSAnc2hvcnRT
ZXF1ZW5jZUF0dHInIChUeXBlOiAnYXR0cmlidXRlJyBFeHRBdHRyOiAnJykKKyAgICB7InNob3J0
U2VxdWVuY2VBdHRyIiwgVGVzdE9ialY4SW50ZXJuYWw6OnNob3J0U2VxdWVuY2VBdHRyQXR0ckdl
dHRlciwgVGVzdE9ialY4SW50ZXJuYWw6OnNob3J0U2VxdWVuY2VBdHRyQXR0clNldHRlciwgMCAv
KiBubyBkYXRhICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQp
LCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBvbiBp
bnN0YW5jZSAqL30sCisgICAgLy8gQXR0cmlidXRlICdsb25nU2VxdWVuY2VBdHRyJyAoVHlwZTog
J2F0dHJpYnV0ZScgRXh0QXR0cjogJycpCisgICAgeyJsb25nU2VxdWVuY2VBdHRyIiwgVGVzdE9i
alY4SW50ZXJuYWw6OmxvbmdTZXF1ZW5jZUF0dHJBdHRyR2V0dGVyLCBUZXN0T2JqVjhJbnRlcm5h
bDo6bG9uZ1NlcXVlbmNlQXR0ckF0dHJTZXR0ZXIsIDAgLyogbm8gZGF0YSAqLywgc3RhdGljX2Nh
c3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxUKSwgc3RhdGljX2Nhc3Q8djg6OlByb3Bl
cnR5QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyogb24gaW5zdGFuY2UgKi99LAorICAgIC8vIEF0
dHJpYnV0ZSAnbG9uZ0xvbmdTZXF1ZW5jZUF0dHInIChUeXBlOiAnYXR0cmlidXRlJyBFeHRBdHRy
OiAnJykKKyAgICB7ImxvbmdMb25nU2VxdWVuY2VBdHRyIiwgVGVzdE9ialY4SW50ZXJuYWw6Omxv
bmdMb25nU2VxdWVuY2VBdHRyQXR0ckdldHRlciwgVGVzdE9ialY4SW50ZXJuYWw6OmxvbmdMb25n
U2VxdWVuY2VBdHRyQXR0clNldHRlciwgMCAvKiBubyBkYXRhICovLCBzdGF0aWNfY2FzdDx2ODo6
QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQpLCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRy
aWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBvbiBpbnN0YW5jZSAqL30sCisgICAgLy8gQXR0cmlidXRl
ICd1bnNpZ25lZEludFNlcXVlbmNlQXR0cicgKFR5cGU6ICdhdHRyaWJ1dGUnIEV4dEF0dHI6ICcn
KQorICAgIHsidW5zaWduZWRJbnRTZXF1ZW5jZUF0dHIiLCBUZXN0T2JqVjhJbnRlcm5hbDo6dW5z
aWduZWRJbnRTZXF1ZW5jZUF0dHJBdHRyR2V0dGVyLCBUZXN0T2JqVjhJbnRlcm5hbDo6dW5zaWdu
ZWRJbnRTZXF1ZW5jZUF0dHJBdHRyU2V0dGVyLCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0
PHY4OjpBY2Nlc3NDb250cm9sPih2ODo6REVGQVVMVCksIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0
eUF0dHJpYnV0ZT4odjg6Ok5vbmUpLCAwIC8qIG9uIGluc3RhbmNlICovfSwKKyAgICAvLyBBdHRy
aWJ1dGUgJ3Vuc2lnbmVkU2hvcnRTZXF1ZW5jZUF0dHInIChUeXBlOiAnYXR0cmlidXRlJyBFeHRB
dHRyOiAnJykKKyAgICB7InVuc2lnbmVkU2hvcnRTZXF1ZW5jZUF0dHIiLCBUZXN0T2JqVjhJbnRl
cm5hbDo6dW5zaWduZWRTaG9ydFNlcXVlbmNlQXR0ckF0dHJHZXR0ZXIsIFRlc3RPYmpWOEludGVy
bmFsOjp1bnNpZ25lZFNob3J0U2VxdWVuY2VBdHRyQXR0clNldHRlciwgMCAvKiBubyBkYXRhICov
LCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQpLCBzdGF0aWNfY2Fz
dDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBvbiBpbnN0YW5jZSAqL30s
CisgICAgLy8gQXR0cmlidXRlICd1bnNpZ25lZExvbmdTZXF1ZW5jZUF0dHInIChUeXBlOiAnYXR0
cmlidXRlJyBFeHRBdHRyOiAnJykKKyAgICB7InVuc2lnbmVkTG9uZ1NlcXVlbmNlQXR0ciIsIFRl
c3RPYmpWOEludGVybmFsOjp1bnNpZ25lZExvbmdTZXF1ZW5jZUF0dHJBdHRyR2V0dGVyLCBUZXN0
T2JqVjhJbnRlcm5hbDo6dW5zaWduZWRMb25nU2VxdWVuY2VBdHRyQXR0clNldHRlciwgMCAvKiBu
byBkYXRhICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQpLCBz
dGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBvbiBpbnN0
YW5jZSAqL30sCisgICAgLy8gQXR0cmlidXRlICd1bnNpZ25lZExvbmdMb25nU2VxdWVuY2VBdHRy
JyAoVHlwZTogJ2F0dHJpYnV0ZScgRXh0QXR0cjogJycpCisgICAgeyJ1bnNpZ25lZExvbmdMb25n
U2VxdWVuY2VBdHRyIiwgVGVzdE9ialY4SW50ZXJuYWw6OnVuc2lnbmVkTG9uZ0xvbmdTZXF1ZW5j
ZUF0dHJBdHRyR2V0dGVyLCBUZXN0T2JqVjhJbnRlcm5hbDo6dW5zaWduZWRMb25nTG9uZ1NlcXVl
bmNlQXR0ckF0dHJTZXR0ZXIsIDAgLyogbm8gZGF0YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vz
c0NvbnRyb2w+KHY4OjpERUZBVUxUKSwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRl
Pih2ODo6Tm9uZSksIDAgLyogb24gaW5zdGFuY2UgKi99LAorICAgIC8vIEF0dHJpYnV0ZSAnZmxv
YXRTZXF1ZW5jZUF0dHInIChUeXBlOiAnYXR0cmlidXRlJyBFeHRBdHRyOiAnJykKKyAgICB7ImZs
b2F0U2VxdWVuY2VBdHRyIiwgVGVzdE9ialY4SW50ZXJuYWw6OmZsb2F0U2VxdWVuY2VBdHRyQXR0
ckdldHRlciwgVGVzdE9ialY4SW50ZXJuYWw6OmZsb2F0U2VxdWVuY2VBdHRyQXR0clNldHRlciwg
MCAvKiBubyBkYXRhICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFV
TFQpLCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBv
biBpbnN0YW5jZSAqL30sCisgICAgLy8gQXR0cmlidXRlICdkb3VibGVTZXF1ZW5jZUF0dHInIChU
eXBlOiAnYXR0cmlidXRlJyBFeHRBdHRyOiAnJykKKyAgICB7ImRvdWJsZVNlcXVlbmNlQXR0ciIs
IFRlc3RPYmpWOEludGVybmFsOjpkb3VibGVTZXF1ZW5jZUF0dHJBdHRyR2V0dGVyLCBUZXN0T2Jq
VjhJbnRlcm5hbDo6ZG91YmxlU2VxdWVuY2VBdHRyQXR0clNldHRlciwgMCAvKiBubyBkYXRhICov
LCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQpLCBzdGF0aWNfY2Fz
dDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBvbiBpbnN0YW5jZSAqL30s
CisgICAgLy8gQXR0cmlidXRlICdib29sZWFuU2VxdWVuY2VBdHRyJyAoVHlwZTogJ2F0dHJpYnV0
ZScgRXh0QXR0cjogJycpCisgICAgeyJib29sZWFuU2VxdWVuY2VBdHRyIiwgVGVzdE9ialY4SW50
ZXJuYWw6OmJvb2xlYW5TZXF1ZW5jZUF0dHJBdHRyR2V0dGVyLCBUZXN0T2JqVjhJbnRlcm5hbDo6
Ym9vbGVhblNlcXVlbmNlQXR0ckF0dHJTZXR0ZXIsIDAgLyogbm8gZGF0YSAqLywgc3RhdGljX2Nh
c3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxUKSwgc3RhdGljX2Nhc3Q8djg6OlByb3Bl
cnR5QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyogb24gaW5zdGFuY2UgKi99LAorICAgIC8vIEF0
dHJpYnV0ZSAndm9pZFNlcXVlbmNlQXR0cicgKFR5cGU6ICdhdHRyaWJ1dGUnIEV4dEF0dHI6ICcn
KQorICAgIHsidm9pZFNlcXVlbmNlQXR0ciIsIFRlc3RPYmpWOEludGVybmFsOjp2b2lkU2VxdWVu
Y2VBdHRyQXR0ckdldHRlciwgVGVzdE9ialY4SW50ZXJuYWw6OnZvaWRTZXF1ZW5jZUF0dHJBdHRy
U2V0dGVyLCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0PHY4OjpBY2Nlc3NDb250cm9sPih2
ODo6REVGQVVMVCksIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4odjg6Ok5vbmUp
LCAwIC8qIG9uIGluc3RhbmNlICovfSwKKyAgICAvLyBBdHRyaWJ1dGUgJ2RhdGVTZXF1ZW5jZUF0
dHInIChUeXBlOiAnYXR0cmlidXRlJyBFeHRBdHRyOiAnJykKKyAgICB7ImRhdGVTZXF1ZW5jZUF0
dHIiLCBUZXN0T2JqVjhJbnRlcm5hbDo6ZGF0ZVNlcXVlbmNlQXR0ckF0dHJHZXR0ZXIsIFRlc3RP
YmpWOEludGVybmFsOjpkYXRlU2VxdWVuY2VBdHRyQXR0clNldHRlciwgMCAvKiBubyBkYXRhICov
LCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQpLCBzdGF0aWNfY2Fz
dDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBvbiBpbnN0YW5jZSAqL30s
CiAgICAgLy8gQXR0cmlidXRlICdYTUxPYmpBdHRyJyAoVHlwZTogJ2F0dHJpYnV0ZScgRXh0QXR0
cjogJycpCiAgICAgeyJYTUxPYmpBdHRyIiwgVGVzdE9ialY4SW50ZXJuYWw6OlhNTE9iakF0dHJB
dHRyR2V0dGVyLCBUZXN0T2JqVjhJbnRlcm5hbDo6WE1MT2JqQXR0ckF0dHJTZXR0ZXIsIDAgLyog
bm8gZGF0YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxUKSwg
c3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyogb24gaW5z
dGFuY2UgKi99LAogICAgIC8vIEF0dHJpYnV0ZSAnY3JlYXRlJyAoVHlwZTogJ2F0dHJpYnV0ZScg
RXh0QXR0cjogJycpCg==
</data>
<flag name="review"
          id="143612"
          type_id="1"
          status="+"
          setter="haraken"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138310</attachid>
            <date>2012-04-23 02:23:50 -0700</date>
            <delta_ts>2012-04-23 04:34:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>unsigned_bindings_002.diff</filename>
            <type>text/plain</type>
            <size>45808</size>
            <attacher name="Vineet Chaudhary (vineetc)">code.vineet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExNDg4MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk0IEBACisyMDEyLTA0LTIzICBWaW5lZXQg
Q2hhdWRoYXJ5ICA8cmdmNzQ4QG1vdG9yb2xhLmNvbT4KKworICAgICAgICBKUyBiaW5kaW5nIGNv
ZGUgZ2VuZXJhdG9yIGRvZXNuJ3QgaGFuZGxlICJhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZ1tdIiB3
ZWxsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NDU0
MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvZGVn
ZW5lcmF0b3Igc2hvdWxkIGhhbmRsZSBzcGFjZXMgd2l0aCB0aGUgc2VxdWVuY2U8PiB0byBzdXBw
b3J0CisgICAgICAgIG51bWVyaWMgdHlwZXMgbGlrZSAidW5zaWduZWQgbG9uZyIsICJpbnQiIC4u
IGV0Yy4gYW5kIHByaW1pdGl2ZSB0eXBlcworICAgICAgICBsaWtlICJib29sZWFuIiwgIkRhdGUi
IGV0Yy4KKworICAgICAgICBUZXN0czogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRs
CisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG06CisgICAgICAg
IChTa2lwSW5jbHVkZUhlYWRlcik6IFJlbmFtZSBBdm9pZEluY2x1c2lvbk9mVHlwZSB0byBTa2lw
SW5jbHVkZUhlYWRlci4KKyAgICAgICAgKEdldEFycmF5VHlwZSk6CisgICAgICAgICogYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChBZGRJbmNsdWRlc0ZvclR5
cGUpOgorICAgICAgICAoTmF0aXZlVG9KU1ZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JPYmpDLnBtOgorICAgICAgICAoQWRkSW5jbHVkZXNGb3JUeXBlKToK
KyAgICAgICAgKEdlbmVyYXRlSW1wbGVtZW50YXRpb24pOgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtOgorICAgICAgICAoQWRkSW5jbHVkZXNGb3JUeXBlKToK
KyAgICAgICAgKEdldEhlYWRlckNsYXNzSW5jbHVkZSk6CisgICAgICAgIChHZW5lcmF0ZU5vcm1h
bEF0dHJHZXR0ZXIpOgorICAgICAgICAoTmF0aXZlVG9KU1ZhbHVlKToKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL0lETFN0cnVjdHVyZS5wbToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0T2JqLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0T2JqSW50U2VxdWVuY2VBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVz
dE9ialNob3J0U2VxdWVuY2VBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakxvbmdT
ZXF1ZW5jZUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqTG9uZ0xvbmdTZXF1ZW5j
ZUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqVW5zaWduZWRJbnRTZXF1ZW5jZUF0
dHIpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqVW5zaWduZWRTaG9ydFNlcXVlbmNlQXR0
cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpVbnNpZ25lZExvbmdTZXF1ZW5jZUF0dHIp
OgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqVW5zaWduZWRMb25nTG9uZ1NlcXVlbmNlQXR0
cik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpGbG9hdFNlcXVlbmNlQXR0cik6CisgICAg
ICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpEb3VibGVTZXF1ZW5jZUF0dHIpOgorICAgICAgICAoV2Vi
Q29yZTo6anNUZXN0T2JqQm9vbGVhblNlcXVlbmNlQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpq
c1Rlc3RPYmpWb2lkU2VxdWVuY2VBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9iakRh
dGVTZXF1ZW5jZUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqU2VxdWVuY2VB
dHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9iakludFNlcXVlbmNlQXR0cik6Cisg
ICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpTaG9ydFNlcXVlbmNlQXR0cik6CisgICAgICAg
IChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpMb25nU2VxdWVuY2VBdHRyKToKKyAgICAgICAgKFdlYkNv
cmU6OnNldEpTVGVzdE9iakxvbmdMb25nU2VxdWVuY2VBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6
OnNldEpTVGVzdE9ialVuc2lnbmVkSW50U2VxdWVuY2VBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6
OnNldEpTVGVzdE9ialVuc2lnbmVkU2hvcnRTZXF1ZW5jZUF0dHIpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNUZXN0T2JqVW5zaWduZWRMb25nU2VxdWVuY2VBdHRyKToKKyAgICAgICAgKFdlYkNv
cmU6OnNldEpTVGVzdE9ialVuc2lnbmVkTG9uZ0xvbmdTZXF1ZW5jZUF0dHIpOgorICAgICAgICAo
V2ViQ29yZTo6c2V0SlNUZXN0T2JqRmxvYXRTZXF1ZW5jZUF0dHIpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNUZXN0T2JqRG91YmxlU2VxdWVuY2VBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OnNl
dEpTVGVzdE9iakJvb2xlYW5TZXF1ZW5jZUF0dHIpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNU
ZXN0T2JqVm9pZFNlcXVlbmNlQXR0cik6CisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpE
YXRlU2VxdWVuY2VBdHRyKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0T2JqLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvT2JqQy9ET01UZXN0T2JqLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Rlc3RPYmouaWRsOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RP
YmouY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OmludFNlcXVlbmNl
QXR0ckF0dHJHZXR0ZXIpOgorICAgICAgICAoVGVzdE9ialY4SW50ZXJuYWwpOgorICAgICAgICAo
V2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OmludFNlcXVlbmNlQXR0ckF0dHJTZXR0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OnNob3J0U2VxdWVuY2VBdHRyQXR0
ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6c2hvcnRTZXF1
ZW5jZUF0dHJBdHRyU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFs
Ojpsb25nU2VxdWVuY2VBdHRyQXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2Jq
VjhJbnRlcm5hbDo6bG9uZ1NlcXVlbmNlQXR0ckF0dHJTZXR0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6VGVzdE9ialY4SW50ZXJuYWw6OmxvbmdMb25nU2VxdWVuY2VBdHRyQXR0ckdldHRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6bG9uZ0xvbmdTZXF1ZW5jZUF0dHJB
dHRyU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjp1bnNpZ25l
ZEludFNlcXVlbmNlQXR0ckF0dHJHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4
SW50ZXJuYWw6OnVuc2lnbmVkSW50U2VxdWVuY2VBdHRyQXR0clNldHRlcik6CisgICAgICAgIChX
ZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6dW5zaWduZWRTaG9ydFNlcXVlbmNlQXR0ckF0dHJH
ZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OnVuc2lnbmVkU2hv
cnRTZXF1ZW5jZUF0dHJBdHRyU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOElu
dGVybmFsOjp1bnNpZ25lZExvbmdTZXF1ZW5jZUF0dHJBdHRyR2V0dGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjp1bnNpZ25lZExvbmdTZXF1ZW5jZUF0dHJBdHRyU2V0
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjp1bnNpZ25lZExvbmdM
b25nU2VxdWVuY2VBdHRyQXR0ckdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJ
bnRlcm5hbDo6dW5zaWduZWRMb25nTG9uZ1NlcXVlbmNlQXR0ckF0dHJTZXR0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OmZsb2F0U2VxdWVuY2VBdHRyQXR0ckdldHRl
cik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6ZmxvYXRTZXF1ZW5jZUF0
dHJBdHRyU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjpkb3Vi
bGVTZXF1ZW5jZUF0dHJBdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOElu
dGVybmFsOjpkb3VibGVTZXF1ZW5jZUF0dHJBdHRyU2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlRlc3RPYmpWOEludGVybmFsOjpib29sZWFuU2VxdWVuY2VBdHRyQXR0ckdldHRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJbnRlcm5hbDo6Ym9vbGVhblNlcXVlbmNlQXR0ckF0dHJT
ZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGVzdE9ialY4SW50ZXJuYWw6OnZvaWRTZXF1ZW5j
ZUF0dHJBdHRyR2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRlc3RPYmpWOEludGVybmFsOjp2
b2lkU2VxdWVuY2VBdHRyQXR0clNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqVjhJ
bnRlcm5hbDo6ZGF0ZVNlcXVlbmNlQXR0ckF0dHJHZXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
VGVzdE9ialY4SW50ZXJuYWw6OmRhdGVTZXF1ZW5jZUF0dHJBdHRyU2V0dGVyKToKKyAgICAgICAg
KFdlYkNvcmUpOgorCiAyMDEyLTA0LTIzICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGludHJvZHVjZSBTdHJpbmcucHJvdG90
eXBlLnN0YXJ0cy9lbmRzV2l0aCBhbmQgdXNlIGl0IGFsbCBvdmVyIHRoZSBwbGFjZS4KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvci5wbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3IucG0J
KHJldmlzaW9uIDExNDg3MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvci5wbQkod29ya2luZyBjb3B5KQpAQCAtMzQwLDExICszNDAsMTUgQEAgc3ViIFBh
cnNlSW50ZXJmYWNlCiAKICMgSGVscGVycyBmb3IgYWxsIENvZGVHZW5lcmF0b3IqKioucG0gbW9k
dWxlcwogCi1zdWIgQXZvaWRJbmNsdXNpb25PZlR5cGUKK3N1YiBTa2lwSW5jbHVkZUhlYWRlcgog
ewogICAgIG15ICRvYmplY3QgPSBzaGlmdDsKICAgICBteSAkdHlwZSA9IHNoaWZ0OwogCisgICAg
cmV0dXJuIDEgaWYgJHByaW1pdGl2ZVR5cGVIYXNoeyR0eXBlfTsKKyAgICByZXR1cm4gMSBpZiAk
bnVtZXJpY1R5cGVIYXNoeyR0eXBlfTsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiU3RyaW5n
IjsKKwogICAgICMgU3BlY2lhbCBjYXNlOiBTVkdQb2ludC5oIC8gU1ZHTnVtYmVyLmggZG8gbm90
IGV4aXN0LgogICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJTVkdQb2ludCIgb3IgJHR5cGUgZXEg
IlNWR051bWJlciI7CiAgICAgcmV0dXJuIDA7CkBAIC00NTAsNyArNDU0LDcgQEAgc3ViIEdldEFy
cmF5VHlwZQogICAgIG15ICRvYmplY3QgPSBzaGlmdDsKICAgICBteSAkdHlwZSA9IHNoaWZ0Owog
Ci0gICAgcmV0dXJuICQxIGlmICR0eXBlID1+IC9ec2VxdWVuY2U8KFtcd1xkX10rKT4uKi87Cisg
ICAgcmV0dXJuICQxIGlmICR0eXBlID1+IC9ec2VxdWVuY2U8KFtcd1xkX1xzXSspPi4qLzsKICAg
ICByZXR1cm4gIiI7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAxMTQ4NzIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5
KQpAQCAtMjQ4LDcgKzI0OCw3IEBAIHN1YiBBZGRJbmNsdWRlc0ZvclR5cGUKIAogICAgICMgV2hl
biB3ZSdyZSBmaW5pc2hlZCB3aXRoIHRoZSBvbmUtZmlsZS1wZXItY2xhc3MKICAgICAjIHJlb3Jn
YW5pemF0aW9uLCB3ZSB3b24ndCBuZWVkIHRoZXNlIHNwZWNpYWwgY2FzZXMuCi0gICAgaWYgKCRj
b2RlR2VuZXJhdG9yLT5Jc1ByaW1pdGl2ZVR5cGUoJHR5cGUpIG9yICRjb2RlR2VuZXJhdG9yLT5B
dm9pZEluY2x1c2lvbk9mVHlwZSgkdHlwZSkKKyAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzUHJp
bWl0aXZlVHlwZSgkdHlwZSkgb3IgJGNvZGVHZW5lcmF0b3ItPlNraXBJbmNsdWRlSGVhZGVyKCR0
eXBlKQogICAgICAgICBvciAkdHlwZSBlcSAiRE9NU3RyaW5nIiBvciAkdHlwZSBlcSAiRE9NT2Jq
ZWN0IiBvciAkdHlwZSBlcSAiQXJyYXkiIG9yICR0eXBlIGVxICJET01UaW1lU3RhbXAiKSB7CiAg
ICAgfSBlbHNpZiAoJHR5cGUgPX4gL1NWR1BhdGhTZWcvKSB7CiAgICAgICAgIG15ICRqb2luZWRO
YW1lID0gJHR5cGU7CkBAIC0zMDI1LDcgKzMwMjUsNyBAQCBzdWIgTmF0aXZlVG9KU1ZhbHVlCiAK
ICAgICBteSAkYXJyYXlUeXBlID0gJGNvZGVHZW5lcmF0b3ItPkdldEFycmF5VHlwZSgkdHlwZSk7
CiAgICAgaWYgKCRhcnJheVR5cGUpIHsKLSAgICAgICAgaWYgKCRhcnJheVR5cGUgbmUgIlN0cmlu
ZyIpIHsKKyAgICAgICAgaWYgKCEkY29kZUdlbmVyYXRvci0+U2tpcEluY2x1ZGVIZWFkZXIoJGFy
cmF5VHlwZSkpIHsKICAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJKUyRhcnJheVR5cGUu
aCIsICRjb25kaXRpb25hbCk7CiAgICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiJGFycmF5
VHlwZS5oIiwgJGNvbmRpdGlvbmFsKTsKICAgICAgICAgfQpAQCAtMzA1Myw5ICszMDUzLDkgQEAg
c3ViIE5hdGl2ZVRvSlNWYWx1ZQogICAgICAgICAjIERlZmF1bHQsIGluY2x1ZGUgaGVhZGVyIHdp
dGggc2FtZSBuYW1lLgogICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiSlMkdHlwZS5oIiwgJGNv
bmRpdGlvbmFsKTsKICAgICAgICAgaWYgKElzVHlwZWRBcnJheVR5cGUoJHR5cGUpKSB7Ci0gICAg
ICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiPHd0Zi8kdHlwZS5oPiIsICRjb25kaXRpb25hbCkg
aWYgbm90ICRjb2RlR2VuZXJhdG9yLT5Bdm9pZEluY2x1c2lvbk9mVHlwZSgkdHlwZSk7CisgICAg
ICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiPHd0Zi8kdHlwZS5oPiIsICRjb25kaXRpb25hbCkg
aWYgbm90ICRjb2RlR2VuZXJhdG9yLT5Ta2lwSW5jbHVkZUhlYWRlcigkdHlwZSk7CiAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiJHR5cGUuaCIsICRjb25k
aXRpb25hbCkgaWYgbm90ICRjb2RlR2VuZXJhdG9yLT5Bdm9pZEluY2x1c2lvbk9mVHlwZSgkdHlw
ZSk7CisgICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiJHR5cGUuaCIsICRjb25kaXRpb25h
bCkgaWYgbm90ICRjb2RlR2VuZXJhdG9yLT5Ta2lwSW5jbHVkZUhlYWRlcigkdHlwZSk7CiAgICAg
ICAgIH0KICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvck9iakMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9yT2JqQy5wbQkocmV2aXNpb24gMTE0ODcyKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yT2JqQy5wbQkod29ya2luZyBj
b3B5KQpAQCAtNjM0LDcgKzYzNCw3IEBAIHN1YiBBZGRJbmNsdWRlc0ZvclR5cGUKICAgICAkaW1w
bEluY2x1ZGVzeyJOYW1lTm9kZUxpc3QuaCJ9ID0gMSBpZiAkdHlwZSBlcSAiTm9kZUxpc3QiOwog
CiAgICAgIyBEZWZhdWx0LCBpbmNsdWRlIHRoZSBzYW1lIG5hbWVkIGZpbGUgKHRoZSBpbXBsZW1l
bnRhdGlvbikgYW5kIHRoZSBzYW1lIG5hbWUgcHJlZml4ZWQgd2l0aCAiRE9NIi4gCi0gICAgJGlt
cGxJbmNsdWRlc3siJHR5cGUuaCJ9ID0gMSBpZiBub3QgJGNvZGVHZW5lcmF0b3ItPkF2b2lkSW5j
bHVzaW9uT2ZUeXBlKCR0eXBlKTsKKyAgICAkaW1wbEluY2x1ZGVzeyIkdHlwZS5oIn0gPSAxIGlm
IG5vdCAkY29kZUdlbmVyYXRvci0+U2tpcEluY2x1ZGVIZWFkZXIoJHR5cGUpOwogICAgICRpbXBs
SW5jbHVkZXN7IkRPTSR7dHlwZX1JbnRlcm5hbC5oIn0gPSAxOwogfQogCkBAIC0xMTMzLDcgKzEx
MzMsNyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgIGlmICgkaW50ZXJmYWNlTmFt
ZSA9fiAvKFx3KykoQWJzfFJlbCkkLykgewogICAgICAgICAkaW1wbEluY2x1ZGVzeyIkMS5oIn0g
PSAxOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghJGNvZGVHZW5lcmF0b3ItPkF2b2lkSW5j
bHVzaW9uT2ZUeXBlKCRpbXBsQ2xhc3NOYW1lKSkgeworICAgICAgICBpZiAoISRjb2RlR2VuZXJh
dG9yLT5Ta2lwSW5jbHVkZUhlYWRlcigkaW1wbENsYXNzTmFtZSkpIHsKICAgICAgICAgICAgICRp
bXBsSW5jbHVkZXN7IiRpbXBsQ2xhc3NOYW1lLmgifSA9IDEgOwogICAgICAgICB9IGVsc2lmICgk
Y29kZUdlbmVyYXRvci0+SXNTVkdUeXBlTmVlZGluZ1RlYXJPZmYoJGltcGxDbGFzc05hbWUpKSB7
CiAgICAgICAgICAgICBteSAkaW5jbHVkZVR5cGUgPSAkY29kZUdlbmVyYXRvci0+R2V0U1ZHV3Jh
cHBlZFR5cGVOZWVkaW5nVGVhck9mZigkaW1wbENsYXNzTmFtZSk7CkBAIC0xMzQ1LDcgKzEzNDUs
NyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgICAgIG15ICR0eXBl
ID0gJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlOwogICAgICAgICAgICAgICAgIGlmICgkY29k
ZUdlbmVyYXRvci0+SXNTVkdUeXBlTmVlZGluZ1RlYXJPZmYoJHR5cGUpIGFuZCBub3QgJGltcGxD
bGFzc05hbWUgPX4gL0xpc3QkLykgewogICAgICAgICAgICAgICAgICAgICBteSAkaWRsVHlwZVdp
dGhOYW1lc3BhY2UgPSBHZXRTVkdUeXBlV2l0aE5hbWVzcGFjZSgkdHlwZSk7Ci0gICAgICAgICAg
ICAgICAgICAgICRpbXBsSW5jbHVkZXN7IiR0eXBlLmgifSA9IDEgaWYgbm90ICRjb2RlR2VuZXJh
dG9yLT5Bdm9pZEluY2x1c2lvbk9mVHlwZSgkdHlwZSk7CisgICAgICAgICAgICAgICAgICAgICRp
bXBsSW5jbHVkZXN7IiR0eXBlLmgifSA9IDEgaWYgbm90ICRjb2RlR2VuZXJhdG9yLT5Ta2lwSW5j
bHVkZUhlYWRlcigkdHlwZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmICgkY29kZUdlbmVyYXRv
ci0+SXNTVkdUeXBlV2l0aFdyaXRhYmxlUHJvcGVydGllc05lZWRpbmdUZWFyT2ZmKCR0eXBlKSBh
bmQgbm90IGRlZmluZWQgJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT5leHRlbmRlZEF0dHJpYnV0ZXMt
PnsiSW1tdXRhYmxlIn0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICRpZGxUeXBlV2l0aE5h
bWVzcGFjZSA9fiBzL1NWR1Byb3BlcnR5VGVhck9mZjwvU1ZHU3RhdGljUHJvcGVydHlUZWFyT2Zm
PCRpbXBsQ2xhc3NOYW1lV2l0aE5hbWVzcGFjZSwgLzsKICAgICAgICAgICAgICAgICAgICAgICAg
ICRpbXBsSW5jbHVkZXN7IlNWR1N0YXRpY1Byb3BlcnR5VGVhck9mZi5oIn0gPSAxOwpJbmRleDog
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgu
cG0JKHJldmlzaW9uIDExNDg3MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvclY4LnBtCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsNyArMTQ0LDcgQEAgc3Vi
IEFkZEluY2x1ZGVzRm9yVHlwZQogICAgIGlmIChJc1R5cGVkQXJyYXlUeXBlKCR0eXBlKSkgewog
ICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygid3RmLyR7dHlwZX0uaCIpOwogICAgIH0KLSAgICBp
ZiAoISRjb2RlR2VuZXJhdG9yLT5Jc1ByaW1pdGl2ZVR5cGUoJHR5cGUpIGFuZCAhJGNvZGVHZW5l
cmF0b3ItPklzU3RyaW5nVHlwZSgkdHlwZSkgYW5kICEkY29kZUdlbmVyYXRvci0+QXZvaWRJbmNs
dXNpb25PZlR5cGUoJHR5cGUpIGFuZCAkdHlwZSBuZSAiRGF0ZSIpIHsKKyAgICBpZiAoISRjb2Rl
R2VuZXJhdG9yLT5Jc1ByaW1pdGl2ZVR5cGUoJHR5cGUpIGFuZCAhJGNvZGVHZW5lcmF0b3ItPklz
U3RyaW5nVHlwZSgkdHlwZSkgYW5kICEkY29kZUdlbmVyYXRvci0+U2tpcEluY2x1ZGVIZWFkZXIo
JHR5cGUpIGFuZCAkdHlwZSBuZSAiRGF0ZSIpIHsKICAgICAgICAgIyBkZWZhdWx0LCBpbmNsdWRl
IHRoZSBzYW1lIG5hbWVkIGZpbGUKICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoR2V0VjhIZWFk
ZXJOYW1lKCR7dHlwZX0pKTsKIApAQCAtNTIxLDcgKzUyMSw3IEBAIHN1YiBHZXRIZWFkZXJDbGFz
c0luY2x1ZGUKICAgICAgICAgJGNsYXNzTmFtZSA9fiBzL0Fic3xSZWwvLzsKICAgICB9CiAgICAg
cmV0dXJuICJ3dGYvJHtjbGFzc05hbWV9LmgiIGlmIElzVHlwZWRBcnJheVR5cGUoJGNsYXNzTmFt
ZSk7Ci0gICAgcmV0dXJuICIiIGlmICgkY29kZUdlbmVyYXRvci0+QXZvaWRJbmNsdXNpb25PZlR5
cGUoJGNsYXNzTmFtZSkpOworICAgIHJldHVybiAiIiBpZiAoJGNvZGVHZW5lcmF0b3ItPlNraXBJ
bmNsdWRlSGVhZGVyKCRjbGFzc05hbWUpKTsKICAgICByZXR1cm4gIiR7Y2xhc3NOYW1lfS5oIjsK
IH0KIApAQCAtOTE1LDEwICs5MTUsMTEgQEAgRU5ECiAKICAgICAgICAgbXkgJGFycmF5VHlwZSA9
ICRjb2RlR2VuZXJhdG9yLT5HZXRBcnJheVR5cGUoJHJldHVyblR5cGUpOwogICAgICAgICBpZiAo
JGFycmF5VHlwZSkgewotICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIlY4JGFycmF5VHlw
ZS5oIik7Ci0gICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiJGFycmF5VHlwZS5oIik7Ci0g
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIGNvbnN0IFZlY3RvcjxSZWZQ
dHI8JGFycmF5VHlwZT4gPiB2ZWN0b3IgPSAke2dldHRlclN0cmluZ307XG4iKTsKLSAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgcmV0dXJuIHY4QXJyYXkodmVjdG9yKTtc
biIpOworICAgICAgICAgICAgaWYgKCEkY29kZUdlbmVyYXRvci0+U2tpcEluY2x1ZGVIZWFkZXIo
JGFycmF5VHlwZSkpIHsKKyAgICAgICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiVjgkYXJy
YXlUeXBlLmgiKTsKKyAgICAgICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiJGFycmF5VHlw
ZS5oIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xz
LCAiICAgIHJldHVybiB2OEFycmF5KCR7Z2V0dGVyU3RyaW5nfSk7XG4iKTsKICAgICAgICAgICAg
IHB1c2goQGltcGxDb250ZW50RGVjbHMsICJ9XG5cbiIpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CkBAIC0zODAxLDcgKzM4MDIsNyBAQCBzdWIgTmF0aXZlVG9KU1ZhbHVlCiAKICAg
ICBteSAkYXJyYXlUeXBlID0gJGNvZGVHZW5lcmF0b3ItPkdldEFycmF5VHlwZSgkdHlwZSk7CiAg
ICAgaWYgKCRhcnJheVR5cGUpIHsKLSAgICAgICAgaWYgKCRhcnJheVR5cGUgbmUgIlN0cmluZyIp
IHsKKyAgICAgICAgaWYgKCEkY29kZUdlbmVyYXRvci0+U2tpcEluY2x1ZGVIZWFkZXIoJGFycmF5
VHlwZSkpIHsKICAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJWOCRhcnJheVR5cGUuaCIp
OwogICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIiRhcnJheVR5cGUuaCIpOwogICAgICAg
ICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETFN0cnVjdHVyZS5w
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETFN0cnVj
dHVyZS5wbQkocmV2aXNpb24gMTE0ODcyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9JRExTdHJ1Y3R1cmUucG0JKHdvcmtpbmcgY29weSkKQEAgLTg4LDcgKzg4LDcgQEAgb3Vy
ICRjb25zdFZhbHVlID0gJygiW14iXHJcbl0qIil8KDBbeFhdWwogb3VyICRpZGxEYXRhVHlwZSA9
ICdbYS16QS1aMC05XCBdJzsgICAjIEdlbmVyaWMgZGF0YSB0eXBlIGlkZW50aWZpZXIKIAogIyBN
YWdpYyBJREwgcGFyc2luZyByZWd1bGFyIGV4cHJlc3Npb25zCi1teSAkc3VwcG9ydGVkVHlwZXMg
PSAiKCg/Oig/OnVuc2lnbmVkICk/KD86aW50fHNob3J0fCg/OmxvbmcgKT9sb25nKXwoPzokaWRs
SWROcyopKSg/OlxcW1xcXXw8KD86JGlkbElkTnMqKT4pPykiOworbXkgJHN1cHBvcnRlZFR5cGVz
ID0gIigoPzooPzp1bnNpZ25lZCApPyg/OmludHxzaG9ydHwoPzpsb25nICk/bG9uZyl8KD86JGlk
bElkTnMqKSkoPzpcXFtcXF18PCg/OiRpZGxJZE5zTGlzdCopPik/KSI7CiAKICMgU3BlY2lhbCBJ
REwgbm90YXRpb25zLiBUaGlzIHJlZ3VsYXIgZXhwcmVzc2lvbiBleHRyYWN0cyB0aGUgc3RyaW5n
IGJldHdlZW4gdGhlIGZpcnN0IFsgYW5kIGl0cyBjb3JyZXNwb25kaW5nIF0uCiBvdXIgJGV4dGVu
ZGVkQXR0cmlidXRlU3ludGF4ID0gcXIvXFtbXlxbXF1dKig/Oig/P3skSURMU3RydWN0dXJlOjpl
eHRlbmRlZEF0dHJpYnV0ZVN5bnRheH0pW15cW1xdXSopKlxdL3g7ICMgVXNlZCBmb3IgZXh0ZW5k
ZWQgYXR0cmlidXRlcwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Rlc3RPYmouaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9UZXN0T2JqLmlkbAkocmV2aXNpb24gMTE0ODcyKQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3
ICs0NSwyMiBAQCBtb2R1bGUgdGVzdCB7CiAgICAgICAgIGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25n
IGxvbmcgICAgICAgdW5zaWduZWRMb25nTG9uZ0F0dHI7CiAgICAgICAgIGF0dHJpYnV0ZSBET01T
dHJpbmcgICAgICAgICAgICAgICAgc3RyaW5nQXR0cjsKICAgICAgICAgYXR0cmlidXRlIFRlc3RP
YmogICAgICAgICAgICAgICAgICB0ZXN0T2JqQXR0cjsKKworICAgICAgICAvLyBTZXF1ZW5jZSBB
dHRyaWJ1dGVzCiAgICAgICAgIGF0dHJpYnV0ZSBzZXF1ZW5jZTxTY3JpcHRQcm9maWxlPiAgc2Vx
dWVuY2VBdHRyOworICAgICAgICBhdHRyaWJ1dGUgc2VxdWVuY2U8aW50PiBpbnRTZXF1ZW5jZUF0
dHI7CisgICAgICAgIGF0dHJpYnV0ZSBzZXF1ZW5jZTxzaG9ydD4gc2hvcnRTZXF1ZW5jZUF0dHI7
CisgICAgICAgIGF0dHJpYnV0ZSBzZXF1ZW5jZTxsb25nPiBsb25nU2VxdWVuY2VBdHRyOworICAg
ICAgICBhdHRyaWJ1dGUgc2VxdWVuY2U8bG9uZyBsb25nPiBsb25nTG9uZ1NlcXVlbmNlQXR0cjsK
KyAgICAgICAgYXR0cmlidXRlIHNlcXVlbmNlPHVuc2lnbmVkIGludD4gdW5zaWduZWRJbnRTZXF1
ZW5jZUF0dHI7CisgICAgICAgIGF0dHJpYnV0ZSBzZXF1ZW5jZTx1bnNpZ25lZCBzaG9ydD4gdW5z
aWduZWRTaG9ydFNlcXVlbmNlQXR0cjsKKyAgICAgICAgYXR0cmlidXRlIHNlcXVlbmNlPHVuc2ln
bmVkIGxvbmc+IHVuc2lnbmVkTG9uZ1NlcXVlbmNlQXR0cjsKKyAgICAgICAgYXR0cmlidXRlIHNl
cXVlbmNlPHVuc2lnbmVkIGxvbmcgbG9uZz4gdW5zaWduZWRMb25nTG9uZ1NlcXVlbmNlQXR0cjsK
KyAgICAgICAgYXR0cmlidXRlIHNlcXVlbmNlPGZsb2F0PiBmbG9hdFNlcXVlbmNlQXR0cjsKKyAg
ICAgICAgYXR0cmlidXRlIHNlcXVlbmNlPGRvdWJsZT4gZG91YmxlU2VxdWVuY2VBdHRyOworICAg
ICAgICBhdHRyaWJ1dGUgc2VxdWVuY2U8Ym9vbGVhbj4gYm9vbGVhblNlcXVlbmNlQXR0cjsKKyAg
ICAgICAgYXR0cmlidXRlIHNlcXVlbmNlPHZvaWQ+IHZvaWRTZXF1ZW5jZUF0dHI7CisgICAgICAg
IGF0dHJpYnV0ZSBzZXF1ZW5jZTxEYXRlPiBkYXRlU2VxdWVuY2VBdHRyOwogCiAgICAgICAgIEpT
LCBWOAogICAgICAgICAvLyBXS191Y2ZpcnN0LCBXS19sY2ZpcnN0IGV4Y2VwdGlvbmFsIGNhc2Vz
LgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9i
ai5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE9iai5jcHAJKHJldmlzaW9uIDExNDg3MikKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
MCw2ICs5MCwxOSBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T2JqVGFiCiAg
ICAgeyAic3RyaW5nQXR0ciIsIERvbnREZWxldGUsIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9w
ZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0T2JqU3RyaW5nQXR0ciksIChpbnRwdHJfdClz
ZXRKU1Rlc3RPYmpTdHJpbmdBdHRyLCBOb0ludHJpbnNpYyB9LAogICAgIHsgInRlc3RPYmpBdHRy
IiwgRG9udERlbGV0ZSwgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFs
dWVGdW5jPihqc1Rlc3RPYmpUZXN0T2JqQXR0ciksIChpbnRwdHJfdClzZXRKU1Rlc3RPYmpUZXN0
T2JqQXR0ciwgTm9JbnRyaW5zaWMgfSwKICAgICB7ICJzZXF1ZW5jZUF0dHIiLCBEb250RGVsZXRl
LCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVz
dE9ialNlcXVlbmNlQXR0ciksIChpbnRwdHJfdClzZXRKU1Rlc3RPYmpTZXF1ZW5jZUF0dHIsIE5v
SW50cmluc2ljIH0sCisgICAgeyAiaW50U2VxdWVuY2VBdHRyIiwgRG9udERlbGV0ZSwgKGludHB0
cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RPYmpJbnRT
ZXF1ZW5jZUF0dHIpLCAoaW50cHRyX3Qpc2V0SlNUZXN0T2JqSW50U2VxdWVuY2VBdHRyLCBOb0lu
dHJpbnNpYyB9LAorICAgIHsgInNob3J0U2VxdWVuY2VBdHRyIiwgRG9udERlbGV0ZSwgKGludHB0
cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RPYmpTaG9y
dFNlcXVlbmNlQXR0ciksIChpbnRwdHJfdClzZXRKU1Rlc3RPYmpTaG9ydFNlcXVlbmNlQXR0ciwg
Tm9JbnRyaW5zaWMgfSwKKyAgICB7ICJsb25nU2VxdWVuY2VBdHRyIiwgRG9udERlbGV0ZSwgKGlu
dHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RPYmpM
b25nU2VxdWVuY2VBdHRyKSwgKGludHB0cl90KXNldEpTVGVzdE9iakxvbmdTZXF1ZW5jZUF0dHIs
IE5vSW50cmluc2ljIH0sCisgICAgeyAibG9uZ0xvbmdTZXF1ZW5jZUF0dHIiLCBEb250RGVsZXRl
LCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVz
dE9iakxvbmdMb25nU2VxdWVuY2VBdHRyKSwgKGludHB0cl90KXNldEpTVGVzdE9iakxvbmdMb25n
U2VxdWVuY2VBdHRyLCBOb0ludHJpbnNpYyB9LAorICAgIHsgInVuc2lnbmVkSW50U2VxdWVuY2VB
dHRyIiwgRG9udERlbGV0ZSwgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0
VmFsdWVGdW5jPihqc1Rlc3RPYmpVbnNpZ25lZEludFNlcXVlbmNlQXR0ciksIChpbnRwdHJfdClz
ZXRKU1Rlc3RPYmpVbnNpZ25lZEludFNlcXVlbmNlQXR0ciwgTm9JbnRyaW5zaWMgfSwKKyAgICB7
ICJ1bnNpZ25lZFNob3J0U2VxdWVuY2VBdHRyIiwgRG9udERlbGV0ZSwgKGludHB0cl90KXN0YXRp
Y19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RPYmpVbnNpZ25lZFNob3J0
U2VxdWVuY2VBdHRyKSwgKGludHB0cl90KXNldEpTVGVzdE9ialVuc2lnbmVkU2hvcnRTZXF1ZW5j
ZUF0dHIsIE5vSW50cmluc2ljIH0sCisgICAgeyAidW5zaWduZWRMb25nU2VxdWVuY2VBdHRyIiwg
RG9udERlbGV0ZSwgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFsdWVG
dW5jPihqc1Rlc3RPYmpVbnNpZ25lZExvbmdTZXF1ZW5jZUF0dHIpLCAoaW50cHRyX3Qpc2V0SlNU
ZXN0T2JqVW5zaWduZWRMb25nU2VxdWVuY2VBdHRyLCBOb0ludHJpbnNpYyB9LAorICAgIHsgInVu
c2lnbmVkTG9uZ0xvbmdTZXF1ZW5jZUF0dHIiLCBEb250RGVsZXRlLCAoaW50cHRyX3Qpc3RhdGlj
X2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE9ialVuc2lnbmVkTG9uZ0xv
bmdTZXF1ZW5jZUF0dHIpLCAoaW50cHRyX3Qpc2V0SlNUZXN0T2JqVW5zaWduZWRMb25nTG9uZ1Nl
cXVlbmNlQXR0ciwgTm9JbnRyaW5zaWMgfSwKKyAgICB7ICJmbG9hdFNlcXVlbmNlQXR0ciIsIERv
bnREZWxldGUsIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVu
Yz4oanNUZXN0T2JqRmxvYXRTZXF1ZW5jZUF0dHIpLCAoaW50cHRyX3Qpc2V0SlNUZXN0T2JqRmxv
YXRTZXF1ZW5jZUF0dHIsIE5vSW50cmluc2ljIH0sCisgICAgeyAiZG91YmxlU2VxdWVuY2VBdHRy
IiwgRG9udERlbGV0ZSwgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3BlcnR5U2xvdDo6R2V0VmFs
dWVGdW5jPihqc1Rlc3RPYmpEb3VibGVTZXF1ZW5jZUF0dHIpLCAoaW50cHRyX3Qpc2V0SlNUZXN0
T2JqRG91YmxlU2VxdWVuY2VBdHRyLCBOb0ludHJpbnNpYyB9LAorICAgIHsgImJvb2xlYW5TZXF1
ZW5jZUF0dHIiLCBEb250RGVsZXRlLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90
OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE9iakJvb2xlYW5TZXF1ZW5jZUF0dHIpLCAoaW50cHRyX3Qp
c2V0SlNUZXN0T2JqQm9vbGVhblNlcXVlbmNlQXR0ciwgTm9JbnRyaW5zaWMgfSwKKyAgICB7ICJ2
b2lkU2VxdWVuY2VBdHRyIiwgRG9udERlbGV0ZSwgKGludHB0cl90KXN0YXRpY19jYXN0PFByb3Bl
cnR5U2xvdDo6R2V0VmFsdWVGdW5jPihqc1Rlc3RPYmpWb2lkU2VxdWVuY2VBdHRyKSwgKGludHB0
cl90KXNldEpTVGVzdE9ialZvaWRTZXF1ZW5jZUF0dHIsIE5vSW50cmluc2ljIH0sCisgICAgeyAi
ZGF0ZVNlcXVlbmNlQXR0ciIsIERvbnREZWxldGUsIChpbnRwdHJfdClzdGF0aWNfY2FzdDxQcm9w
ZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0T2JqRGF0ZVNlcXVlbmNlQXR0ciksIChpbnRw
dHJfdClzZXRKU1Rlc3RPYmpEYXRlU2VxdWVuY2VBdHRyLCBOb0ludHJpbnNpYyB9LAogICAgIHsg
IlhNTE9iakF0dHIiLCBEb250RGVsZXRlLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlT
bG90OjpHZXRWYWx1ZUZ1bmM+KGpzVGVzdE9ialhNTE9iakF0dHIpLCAoaW50cHRyX3Qpc2V0SlNU
ZXN0T2JqWE1MT2JqQXR0ciwgTm9JbnRyaW5zaWMgfSwKICAgICB7ICJjcmVhdGUiLCBEb250RGVs
ZXRlLCAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmM+KGpz
VGVzdE9iakNyZWF0ZSksIChpbnRwdHJfdClzZXRKU1Rlc3RPYmpDcmVhdGUsIE5vSW50cmluc2lj
IH0sCiAgICAgeyAicmVmbGVjdGVkU3RyaW5nQXR0ciIsIERvbnREZWxldGUsIChpbnRwdHJfdClz
dGF0aWNfY2FzdDxQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYz4oanNUZXN0T2JqUmVmbGVjdGVk
U3RyaW5nQXR0ciksIChpbnRwdHJfdClzZXRKU1Rlc3RPYmpSZWZsZWN0ZWRTdHJpbmdBdHRyLCBO
b0ludHJpbnNpYyB9LApAQCAtMTQ2LDcgKzE1OSw3IEBAIHN0YXRpYyBjb25zdCBIYXNoVGFibGVW
YWx1ZSBKU1Rlc3RPYmpUYWIKICAgICB7IDAsIDAsIDAsIDAsIE5vSW50cmluc2ljIH0KIH07CiAK
LXN0YXRpYyBjb25zdCBIYXNoVGFibGUgSlNUZXN0T2JqVGFibGUgPSB7IDEzOCwgMTI3LCBKU1Rl
c3RPYmpUYWJsZVZhbHVlcywgMCB9Oworc3RhdGljIGNvbnN0IEhhc2hUYWJsZSBKU1Rlc3RPYmpU
YWJsZSA9IHsgMjY1LCAyNTUsIEpTVGVzdE9ialRhYmxlVmFsdWVzLCAwIH07CiAvKiBIYXNoIHRh
YmxlIGZvciBjb25zdHJ1Y3RvciAqLwogCiBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNU
ZXN0T2JqQ29uc3RydWN0b3JUYWJsZVZhbHVlc1tdID0KQEAgLTQ5MCw2ICs1MDMsMTM2IEBAIEpT
VmFsdWUganNUZXN0T2JqU2VxdWVuY2VBdHRyKEV4ZWNTdGF0ZSoKIH0KIAogCitKU1ZhbHVlIGpz
VGVzdE9iakludFNlcXVlbmNlQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2Us
IGNvbnN0IElkZW50aWZpZXImKQoreworICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzQ2Fz
dDxKU1Rlc3RPYmoqPihhc09iamVjdChzbG90QmFzZSkpOworICAgIFVOVVNFRF9QQVJBTShleGVj
KTsKKyAgICBUZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMt
PmltcGwoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc0FycmF5KGV4ZWMsIGNhc3RlZFRoaXMt
Pmdsb2JhbE9iamVjdCgpLCBpbXBsLT5pbnRTZXF1ZW5jZUF0dHIoKSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworCitKU1ZhbHVlIGpzVGVzdE9ialNob3J0U2VxdWVuY2VBdHRyKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRlbnRpZmllciYpCit7CisgICAgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHNsb3RCYXNl
KSk7CisgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNf
Y2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9
IGpzQXJyYXkoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwtPnNob3J0U2Vx
dWVuY2VBdHRyKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKworSlNWYWx1ZSBqc1Rlc3RP
YmpMb25nU2VxdWVuY2VBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29u
c3QgSWRlbnRpZmllciYpCit7CisgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpT
VGVzdE9iaio+KGFzT2JqZWN0KHNsb3RCYXNlKSk7CisgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOwor
ICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1w
bCgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQXJyYXkoZXhlYywgY2FzdGVkVGhpcy0+Z2xv
YmFsT2JqZWN0KCksIGltcGwtPmxvbmdTZXF1ZW5jZUF0dHIoKSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworCitKU1ZhbHVlIGpzVGVzdE9iakxvbmdMb25nU2VxdWVuY2VBdHRyKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRlbnRpZmllciYpCit7CisgICAgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHNsb3RCYXNl
KSk7CisgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNf
Y2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9
IGpzQXJyYXkoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwtPmxvbmdMb25n
U2VxdWVuY2VBdHRyKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKworSlNWYWx1ZSBqc1Rl
c3RPYmpVbnNpZ25lZEludFNlcXVlbmNlQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xv
dEJhc2UsIGNvbnN0IElkZW50aWZpZXImKQoreworICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9
IGpzQ2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdChzbG90QmFzZSkpOworICAgIFVOVVNFRF9QQVJB
TShleGVjKTsKKyAgICBUZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3Rl
ZFRoaXMtPmltcGwoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc0FycmF5KGV4ZWMsIGNhc3Rl
ZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLT51bnNpZ25lZEludFNlcXVlbmNlQXR0cigpKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCisKK0pTVmFsdWUganNUZXN0T2JqVW5zaWduZWRTaG9y
dFNlcXVlbmNlQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIGNvbnN0IElk
ZW50aWZpZXImKQoreworICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RP
YmoqPihhc09iamVjdChzbG90QmFzZSkpOworICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBU
ZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7
CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc0FycmF5KGV4ZWMsIGNhc3RlZFRoaXMtPmdsb2JhbE9i
amVjdCgpLCBpbXBsLT51bnNpZ25lZFNob3J0U2VxdWVuY2VBdHRyKCkpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKKworSlNWYWx1ZSBqc1Rlc3RPYmpVbnNpZ25lZExvbmdTZXF1ZW5jZUF0dHIo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCBjb25zdCBJZGVudGlmaWVyJikKK3sK
KyAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3Qo
c2xvdEJhc2UpKTsKKyAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVGVzdE9iaiogaW1wbCA9
IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIEpTVmFsdWUg
cmVzdWx0ID0ganNBcnJheShleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC0+
dW5zaWduZWRMb25nU2VxdWVuY2VBdHRyKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKwor
SlNWYWx1ZSBqc1Rlc3RPYmpVbnNpZ25lZExvbmdMb25nU2VxdWVuY2VBdHRyKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRlbnRpZmllciYpCit7CisgICAgSlNUZXN0
T2JqKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHNsb3RCYXNlKSk7
CisgICAgVU5VU0VEX1BBUkFNKGV4ZWMpOworICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNfY2Fz
dDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
QXJyYXkoZXhlYywgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwtPnVuc2lnbmVkTG9u
Z0xvbmdTZXF1ZW5jZUF0dHIoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworCitKU1ZhbHVl
IGpzVGVzdE9iakZsb2F0U2VxdWVuY2VBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBzbG90
QmFzZSwgY29uc3QgSWRlbnRpZmllciYpCit7CisgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0g
anNDYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHNsb3RCYXNlKSk7CisgICAgVU5VU0VEX1BBUkFN
KGV4ZWMpOworICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVk
VGhpcy0+aW1wbCgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQXJyYXkoZXhlYywgY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwtPmZsb2F0U2VxdWVuY2VBdHRyKCkpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKKworSlNWYWx1ZSBqc1Rlc3RPYmpEb3VibGVTZXF1ZW5jZUF0dHIo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCBjb25zdCBJZGVudGlmaWVyJikKK3sK
KyAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmplY3Qo
c2xvdEJhc2UpKTsKKyAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVGVzdE9iaiogaW1wbCA9
IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIEpTVmFsdWUg
cmVzdWx0ID0ganNBcnJheShleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1wbC0+
ZG91YmxlU2VxdWVuY2VBdHRyKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKworSlNWYWx1
ZSBqc1Rlc3RPYmpCb29sZWFuU2VxdWVuY2VBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBz
bG90QmFzZSwgY29uc3QgSWRlbnRpZmllciYpCit7CisgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlz
ID0ganNDYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHNsb3RCYXNlKSk7CisgICAgVU5VU0VEX1BB
UkFNKGV4ZWMpOworICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2Fz
dGVkVGhpcy0+aW1wbCgpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzQXJyYXkoZXhlYywgY2Fz
dGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIGltcGwtPmJvb2xlYW5TZXF1ZW5jZUF0dHIoKSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworCitKU1ZhbHVlIGpzVGVzdE9ialZvaWRTZXF1ZW5jZUF0
dHIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCBjb25zdCBJZGVudGlmaWVyJikK
K3sKKyAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T2JqKj4oYXNPYmpl
Y3Qoc2xvdEJhc2UpKTsKKyAgICBVTlVTRURfUEFSQU0oZXhlYyk7CisgICAgVGVzdE9iaiogaW1w
bCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIEpTVmFs
dWUgcmVzdWx0ID0ganNBcnJheShleGVjLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgaW1w
bC0+dm9pZFNlcXVlbmNlQXR0cigpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisKK0pTVmFs
dWUganNUZXN0T2JqRGF0ZVNlcXVlbmNlQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xv
dEJhc2UsIGNvbnN0IElkZW50aWZpZXImKQoreworICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9
IGpzQ2FzdDxKU1Rlc3RPYmoqPihhc09iamVjdChzbG90QmFzZSkpOworICAgIFVOVVNFRF9QQVJB
TShleGVjKTsKKyAgICBUZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3Rl
ZFRoaXMtPmltcGwoKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc0FycmF5KGV4ZWMsIGNhc3Rl
ZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBpbXBsLT5kYXRlU2VxdWVuY2VBdHRyKCkpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKKwogSlNWYWx1ZSBqc1Rlc3RPYmpYTUxPYmpBdHRyKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRlbnRpZmllciYpCiB7CiAgICAgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE9iaio+KGFzT2JqZWN0KHNsb3RCYXNl
KSk7CkBAIC05ODcsNiArMTEzMCwxMTAgQEAgdm9pZCBzZXRKU1Rlc3RPYmpTZXF1ZW5jZUF0dHIo
RXhlY1N0YXRlKgogfQogCiAKK3ZvaWQgc2V0SlNUZXN0T2JqSW50U2VxdWVuY2VBdHRyKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAg
SlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE9iaio+KHRoaXNPYmplY3QpOwor
ICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1w
bCgpKTsKKyAgICBpbXBsLT5zZXRJbnRTZXF1ZW5jZUF0dHIodG9OYXRpdmVBcnJheTxpbnQ+KGV4
ZWMsIHZhbHVlKSk7Cit9CisKKwordm9pZCBzZXRKU1Rlc3RPYmpTaG9ydFNlcXVlbmNlQXR0cihF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQorewor
ICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPYmoqPih0aGlzT2JqZWN0
KTsKKyAgICBUZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMt
PmltcGwoKSk7CisgICAgaW1wbC0+c2V0U2hvcnRTZXF1ZW5jZUF0dHIodG9OYXRpdmVBcnJheTxz
aG9ydD4oZXhlYywgdmFsdWUpKTsKK30KKworCit2b2lkIHNldEpTVGVzdE9iakxvbmdTZXF1ZW5j
ZUF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1
ZSkKK3sKKyAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T2JqKj4odGhp
c09iamVjdCk7CisgICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0
ZWRUaGlzLT5pbXBsKCkpOworICAgIGltcGwtPnNldExvbmdTZXF1ZW5jZUF0dHIodG9OYXRpdmVB
cnJheTxsb25nPihleGVjLCB2YWx1ZSkpOworfQorCisKK3ZvaWQgc2V0SlNUZXN0T2JqTG9uZ0xv
bmdTZXF1ZW5jZUF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iamVjdCwgSlNW
YWx1ZSB2YWx1ZSkKK3sKKyAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0
T2JqKj4odGhpc09iamVjdCk7CisgICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RP
YmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIGltcGwtPnNldExvbmdMb25nU2VxdWVuY2VB
dHRyKHRvTmF0aXZlQXJyYXk8bG9uZyBsb25nPihleGVjLCB2YWx1ZSkpOworfQorCisKK3ZvaWQg
c2V0SlNUZXN0T2JqVW5zaWduZWRJbnRTZXF1ZW5jZUF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCogdGhpc09iamVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBKU1Rlc3RPYmoqIGNhc3Rl
ZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T2JqKj4odGhpc09iamVjdCk7CisgICAgVGVzdE9iaiogaW1w
bCA9IHN0YXRpY19jYXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIGltcGwt
PnNldFVuc2lnbmVkSW50U2VxdWVuY2VBdHRyKHRvTmF0aXZlQXJyYXk8dW5zaWduZWQgaW50Pihl
eGVjLCB2YWx1ZSkpOworfQorCisKK3ZvaWQgc2V0SlNUZXN0T2JqVW5zaWduZWRTaG9ydFNlcXVl
bmNlQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBKU1ZhbHVlIHZh
bHVlKQoreworICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rlc3RPYmoqPih0
aGlzT2JqZWN0KTsKKyAgICBUZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNh
c3RlZFRoaXMtPmltcGwoKSk7CisgICAgaW1wbC0+c2V0VW5zaWduZWRTaG9ydFNlcXVlbmNlQXR0
cih0b05hdGl2ZUFycmF5PHVuc2lnbmVkIHNob3J0PihleGVjLCB2YWx1ZSkpOworfQorCisKK3Zv
aWQgc2V0SlNUZXN0T2JqVW5zaWduZWRMb25nU2VxdWVuY2VBdHRyKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgSlNUZXN0T2JqKiBj
YXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE9iaio+KHRoaXNPYmplY3QpOworICAgIFRlc3RPYmoq
IGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAgICBp
bXBsLT5zZXRVbnNpZ25lZExvbmdTZXF1ZW5jZUF0dHIodG9OYXRpdmVBcnJheTx1bnNpZ25lZCBs
b25nPihleGVjLCB2YWx1ZSkpOworfQorCisKK3ZvaWQgc2V0SlNUZXN0T2JqVW5zaWduZWRMb25n
TG9uZ1NlcXVlbmNlQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqZWN0LCBK
U1ZhbHVlIHZhbHVlKQoreworICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9IGpzQ2FzdDxKU1Rl
c3RPYmoqPih0aGlzT2JqZWN0KTsKKyAgICBUZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVz
dE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CisgICAgaW1wbC0+c2V0VW5zaWduZWRMb25nTG9u
Z1NlcXVlbmNlQXR0cih0b05hdGl2ZUFycmF5PHVuc2lnbmVkIGxvbmcgbG9uZz4oZXhlYywgdmFs
dWUpKTsKK30KKworCit2b2lkIHNldEpTVGVzdE9iakZsb2F0U2VxdWVuY2VBdHRyKEV4ZWNTdGF0
ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgSlNU
ZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE9iaio+KHRoaXNPYmplY3QpOworICAg
IFRlc3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhpcy0+aW1wbCgp
KTsKKyAgICBpbXBsLT5zZXRGbG9hdFNlcXVlbmNlQXR0cih0b05hdGl2ZUFycmF5PGZsb2F0Pihl
eGVjLCB2YWx1ZSkpOworfQorCisKK3ZvaWQgc2V0SlNUZXN0T2JqRG91YmxlU2VxdWVuY2VBdHRy
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCit7
CisgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE9iaio+KHRoaXNPYmpl
Y3QpOworICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2JqKj4oY2FzdGVkVGhp
cy0+aW1wbCgpKTsKKyAgICBpbXBsLT5zZXREb3VibGVTZXF1ZW5jZUF0dHIodG9OYXRpdmVBcnJh
eTxkb3VibGU+KGV4ZWMsIHZhbHVlKSk7Cit9CisKKwordm9pZCBzZXRKU1Rlc3RPYmpCb29sZWFu
U2VxdWVuY2VBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmplY3QsIEpTVmFs
dWUgdmFsdWUpCit7CisgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE9i
aio+KHRoaXNPYmplY3QpOworICAgIFRlc3RPYmoqIGltcGwgPSBzdGF0aWNfY2FzdDxUZXN0T2Jq
Kj4oY2FzdGVkVGhpcy0+aW1wbCgpKTsKKyAgICBpbXBsLT5zZXRCb29sZWFuU2VxdWVuY2VBdHRy
KHRvTmF0aXZlQXJyYXk8Ym9vbGVhbj4oZXhlYywgdmFsdWUpKTsKK30KKworCit2b2lkIHNldEpT
VGVzdE9ialZvaWRTZXF1ZW5jZUF0dHIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09i
amVjdCwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBKU1Rlc3RPYmoqIGNhc3RlZFRoaXMgPSBqc0Nh
c3Q8SlNUZXN0T2JqKj4odGhpc09iamVjdCk7CisgICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19j
YXN0PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOworICAgIGltcGwtPnNldFZvaWRTZXF1
ZW5jZUF0dHIodG9OYXRpdmVBcnJheTx2b2lkPihleGVjLCB2YWx1ZSkpOworfQorCisKK3ZvaWQg
c2V0SlNUZXN0T2JqRGF0ZVNlcXVlbmNlQXR0cihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0
aGlzT2JqZWN0LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIEpTVGVzdE9iaiogY2FzdGVkVGhpcyA9
IGpzQ2FzdDxKU1Rlc3RPYmoqPih0aGlzT2JqZWN0KTsKKyAgICBUZXN0T2JqKiBpbXBsID0gc3Rh
dGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwoKSk7CisgICAgaW1wbC0+c2V0RGF0
ZVNlcXVlbmNlQXR0cih0b05hdGl2ZUFycmF5PERhdGU+KGV4ZWMsIHZhbHVlKSk7Cit9CisKKwog
dm9pZCBzZXRKU1Rlc3RPYmpYTUxPYmpBdHRyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRo
aXNPYmplY3QsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0g
anNDYXN0PEpTVGVzdE9iaio+KHRoaXNPYmplY3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouaAkocmV2aXNpb24gMTE0
ODcyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9i
ai5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzUsNiArMjM1LDMyIEBAIEpTQzo6SlNWYWx1ZSBqc1Rl
c3RPYmpUZXN0T2JqQXR0cihKU0M6OkUKIHZvaWQgc2V0SlNUZXN0T2JqVGVzdE9iakF0dHIoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU1ZhbHVlKTsKIEpTQzo6SlNWYWx1
ZSBqc1Rlc3RPYmpTZXF1ZW5jZUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNv
bnN0IEpTQzo6SWRlbnRpZmllciYpOwogdm9pZCBzZXRKU1Rlc3RPYmpTZXF1ZW5jZUF0dHIoSlND
OjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1
ZSBqc1Rlc3RPYmpJbnRTZXF1ZW5jZUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUs
IGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOwordm9pZCBzZXRKU1Rlc3RPYmpJbnRTZXF1ZW5jZUF0
dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6
SlNWYWx1ZSBqc1Rlc3RPYmpTaG9ydFNlcXVlbmNlQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6
SlNWYWx1ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7Cit2b2lkIHNldEpTVGVzdE9ialNob3J0
U2VxdWVuY2VBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6SlNWYWx1
ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqTG9uZ1NlcXVlbmNlQXR0cihKU0M6OkV4ZWNTdGF0
ZSosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7Cit2b2lkIHNldEpTVGVz
dE9iakxvbmdTZXF1ZW5jZUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlND
OjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpMb25nTG9uZ1NlcXVlbmNlQXR0cihK
U0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7Cit2
b2lkIHNldEpTVGVzdE9iakxvbmdMb25nU2VxdWVuY2VBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU09iamVjdCosIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqVW5zaWdu
ZWRJbnRTZXF1ZW5jZUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpT
Qzo6SWRlbnRpZmllciYpOwordm9pZCBzZXRKU1Rlc3RPYmpVbnNpZ25lZEludFNlcXVlbmNlQXR0
cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTVmFsdWUpOworSlNDOjpK
U1ZhbHVlIGpzVGVzdE9ialVuc2lnbmVkU2hvcnRTZXF1ZW5jZUF0dHIoSlNDOjpFeGVjU3RhdGUq
LCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOwordm9pZCBzZXRKU1Rlc3RP
YmpVbnNpZ25lZFNob3J0U2VxdWVuY2VBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVj
dCosIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqVW5zaWduZWRMb25nU2Vx
dWVuY2VBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6OklkZW50
aWZpZXImKTsKK3ZvaWQgc2V0SlNUZXN0T2JqVW5zaWduZWRMb25nU2VxdWVuY2VBdHRyKEpTQzo6
RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUg
anNUZXN0T2JqVW5zaWduZWRMb25nTG9uZ1NlcXVlbmNlQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpT
Qzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7Cit2b2lkIHNldEpTVGVzdE9ialVu
c2lnbmVkTG9uZ0xvbmdTZXF1ZW5jZUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0
KiwgSlNDOjpKU1ZhbHVlKTsKK0pTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpGbG9hdFNlcXVlbmNlQXR0
cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7
Cit2b2lkIHNldEpTVGVzdE9iakZsb2F0U2VxdWVuY2VBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU09iamVjdCosIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNUZXN0T2JqRG91Ymxl
U2VxdWVuY2VBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU1ZhbHVlLCBjb25zdCBKU0M6Oklk
ZW50aWZpZXImKTsKK3ZvaWQgc2V0SlNUZXN0T2JqRG91YmxlU2VxdWVuY2VBdHRyKEpTQzo6RXhl
Y1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpTQzo6SlNWYWx1ZSk7CitKU0M6OkpTVmFsdWUganNU
ZXN0T2JqQm9vbGVhblNlcXVlbmNlQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNWYWx1ZSwg
Y29uc3QgSlNDOjpJZGVudGlmaWVyJik7Cit2b2lkIHNldEpTVGVzdE9iakJvb2xlYW5TZXF1ZW5j
ZUF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpKU1ZhbHVlKTsKK0pT
Qzo6SlNWYWx1ZSBqc1Rlc3RPYmpWb2lkU2VxdWVuY2VBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlND
OjpKU1ZhbHVlLCBjb25zdCBKU0M6OklkZW50aWZpZXImKTsKK3ZvaWQgc2V0SlNUZXN0T2JqVm9p
ZFNlcXVlbmNlQXR0cihKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6SlNPYmplY3QqLCBKU0M6OkpTVmFs
dWUpOworSlNDOjpKU1ZhbHVlIGpzVGVzdE9iakRhdGVTZXF1ZW5jZUF0dHIoSlNDOjpFeGVjU3Rh
dGUqLCBKU0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOwordm9pZCBzZXRKU1Rl
c3RPYmpEYXRlU2VxdWVuY2VBdHRyKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpKU09iamVjdCosIEpT
Qzo6SlNWYWx1ZSk7CiBKU0M6OkpTVmFsdWUganNUZXN0T2JqWE1MT2JqQXR0cihKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6SlNWYWx1ZSwgY29uc3QgSlNDOjpJZGVudGlmaWVyJik7CiB2b2lkIHNldEpT
VGVzdE9ialhNTE9iakF0dHIoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTT2JqZWN0KiwgSlNDOjpK
U1ZhbHVlKTsKIEpTQzo6SlNWYWx1ZSBqc1Rlc3RPYmpDcmVhdGUoSlNDOjpFeGVjU3RhdGUqLCBK
U0M6OkpTVmFsdWUsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmouaAko
cmV2aXNpb24gMTE0ODcyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L09iakMvRE9NVGVzdE9iai5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw4ICs4Miw2IEBAIGVudW0g
ewogLSAodm9pZClzZXRTdHJpbmdBdHRyOihOU1N0cmluZyAqKW5ld1N0cmluZ0F0dHI7CiAtIChE
T01UZXN0T2JqICopdGVzdE9iakF0dHI7CiAtICh2b2lkKXNldFRlc3RPYmpBdHRyOihET01UZXN0
T2JqICopbmV3VGVzdE9iakF0dHI7Ci0tIChET01zZXF1ZW5jZTxTY3JpcHRQcm9maWxlPiAqKXNl
cXVlbmNlQXR0cjsKLS0gKHZvaWQpc2V0U2VxdWVuY2VBdHRyOihET01zZXF1ZW5jZTxTY3JpcHRQ
cm9maWxlPiAqKW5ld1NlcXVlbmNlQXR0cjsKIC0gKERPTVRlc3RPYmogKilYTUxPYmpBdHRyOwog
LSAodm9pZClzZXRYTUxPYmpBdHRyOihET01UZXN0T2JqICopbmV3WE1MT2JqQXR0cjsKIC0gKEJP
T0wpY3JlYXRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdE9iai5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAJKHJldmlzaW9uIDExNDg3MikKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMzUsNiArMjM1LDIxNCBAQCBzdGF0aWMgdm9pZCBzZXF1ZW5jZUF0dHJBdHRyU2V0
dGVyKHY4OjpMCiAgICAgcmV0dXJuOwogfQogCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IGludFNlcXVlbmNlQXR0ckF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNv
bnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCit7CisgICAgSU5DX1NUQVRTKCJET00uVGVzdE9i
ai5pbnRTZXF1ZW5jZUF0dHIuX2dldCIpOworICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6
dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CisgICAgcmV0dXJuIHY4QXJyYXkoaW1wLT5pbnRTZXF1
ZW5jZUF0dHIoKSk7Cit9CisKK3N0YXRpYyB2b2lkIGludFNlcXVlbmNlQXR0ckF0dHJTZXR0ZXIo
djg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBj
b25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQoreworICAgIElOQ19TVEFUUygiRE9NLlRlc3RP
YmouaW50U2VxdWVuY2VBdHRyLl9zZXQiKTsKKyAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6
OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOworICAgIFZlY3RvcjxpbnQ+IHYgPSB0b05hdGl2ZUFy
cmF5PGludD4odmFsdWUpOworICAgIGltcC0+c2V0SW50U2VxdWVuY2VBdHRyKHYpOworICAgIHJl
dHVybjsKK30KKworc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzaG9ydFNlcXVlbmNlQXR0
ckF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3Nv
ckluZm8mIGluZm8pCit7CisgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5zaG9ydFNlcXVlbmNl
QXR0ci5fZ2V0Iik7CisgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZv
LkhvbGRlcigpKTsKKyAgICByZXR1cm4gdjhBcnJheShpbXAtPnNob3J0U2VxdWVuY2VBdHRyKCkp
OworfQorCitzdGF0aWMgdm9pZCBzaG9ydFNlcXVlbmNlQXR0ckF0dHJTZXR0ZXIodjg6OkxvY2Fs
PHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6
QWNjZXNzb3JJbmZvJiBpbmZvKQoreworICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmouc2hvcnRT
ZXF1ZW5jZUF0dHIuX3NldCIpOworICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRp
dmUoaW5mby5Ib2xkZXIoKSk7CisgICAgVmVjdG9yPHNob3J0PiB2ID0gdG9OYXRpdmVBcnJheTxz
aG9ydD4odmFsdWUpOworICAgIGltcC0+c2V0U2hvcnRTZXF1ZW5jZUF0dHIodik7CisgICAgcmV0
dXJuOworfQorCitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGxvbmdTZXF1ZW5jZUF0dHJB
dHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJ
bmZvJiBpbmZvKQoreworICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmoubG9uZ1NlcXVlbmNlQXR0
ci5fZ2V0Iik7CisgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhv
bGRlcigpKTsKKyAgICByZXR1cm4gdjhBcnJheShpbXAtPmxvbmdTZXF1ZW5jZUF0dHIoKSk7Cit9
CisKK3N0YXRpYyB2b2lkIGxvbmdTZXF1ZW5jZUF0dHJBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6
U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vz
c29ySW5mbyYgaW5mbykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLmxvbmdTZXF1ZW5j
ZUF0dHIuX3NldCIpOworICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5m
by5Ib2xkZXIoKSk7CisgICAgVmVjdG9yPGxvbmc+IHYgPSB0b05hdGl2ZUFycmF5PGxvbmc+KHZh
bHVlKTsKKyAgICBpbXAtPnNldExvbmdTZXF1ZW5jZUF0dHIodik7CisgICAgcmV0dXJuOworfQor
CitzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGxvbmdMb25nU2VxdWVuY2VBdHRyQXR0ckdl
dHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYg
aW5mbykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLmxvbmdMb25nU2VxdWVuY2VBdHRy
Ll9nZXQiKTsKKyAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9s
ZGVyKCkpOworICAgIHJldHVybiB2OEFycmF5KGltcC0+bG9uZ0xvbmdTZXF1ZW5jZUF0dHIoKSk7
Cit9CisKK3N0YXRpYyB2b2lkIGxvbmdMb25nU2VxdWVuY2VBdHRyQXR0clNldHRlcih2ODo6TG9j
YWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4
OjpBY2Nlc3NvckluZm8mIGluZm8pCit7CisgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5sb25n
TG9uZ1NlcXVlbmNlQXR0ci5fc2V0Iik7CisgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0
b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKKyAgICBWZWN0b3I8bG9uZyBsb25nPiB2ID0gdG9OYXRp
dmVBcnJheTxsb25nIGxvbmc+KHZhbHVlKTsKKyAgICBpbXAtPnNldExvbmdMb25nU2VxdWVuY2VB
dHRyKHYpOworICAgIHJldHVybjsKK30KKworc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB1
bnNpZ25lZEludFNlcXVlbmNlQXR0ckF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5h
bWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCit7CisgICAgSU5DX1NUQVRTKCJET00u
VGVzdE9iai51bnNpZ25lZEludFNlcXVlbmNlQXR0ci5fZ2V0Iik7CisgICAgVGVzdE9iaiogaW1w
ID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKKyAgICByZXR1cm4gdjhBcnJh
eShpbXAtPnVuc2lnbmVkSW50U2VxdWVuY2VBdHRyKCkpOworfQorCitzdGF0aWMgdm9pZCB1bnNp
Z25lZEludFNlcXVlbmNlQXR0ckF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUs
IHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZv
KQoreworICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmoudW5zaWduZWRJbnRTZXF1ZW5jZUF0dHIu
X3NldCIpOworICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xk
ZXIoKSk7CisgICAgVmVjdG9yPHVuc2lnbmVkIGludD4gdiA9IHRvTmF0aXZlQXJyYXk8dW5zaWdu
ZWQgaW50Pih2YWx1ZSk7CisgICAgaW1wLT5zZXRVbnNpZ25lZEludFNlcXVlbmNlQXR0cih2KTsK
KyAgICByZXR1cm47Cit9CisKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdW5zaWduZWRT
aG9ydFNlcXVlbmNlQXR0ckF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNv
bnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCit7CisgICAgSU5DX1NUQVRTKCJET00uVGVzdE9i
ai51bnNpZ25lZFNob3J0U2VxdWVuY2VBdHRyLl9nZXQiKTsKKyAgICBUZXN0T2JqKiBpbXAgPSBW
OFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOworICAgIHJldHVybiB2OEFycmF5KGlt
cC0+dW5zaWduZWRTaG9ydFNlcXVlbmNlQXR0cigpKTsKK30KKworc3RhdGljIHZvaWQgdW5zaWdu
ZWRTaG9ydFNlcXVlbmNlQXR0ckF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUs
IHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZv
KQoreworICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmoudW5zaWduZWRTaG9ydFNlcXVlbmNlQXR0
ci5fc2V0Iik7CisgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhv
bGRlcigpKTsKKyAgICBWZWN0b3I8dW5zaWduZWQgc2hvcnQ+IHYgPSB0b05hdGl2ZUFycmF5PHVu
c2lnbmVkIHNob3J0Pih2YWx1ZSk7CisgICAgaW1wLT5zZXRVbnNpZ25lZFNob3J0U2VxdWVuY2VB
dHRyKHYpOworICAgIHJldHVybjsKK30KKworc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB1
bnNpZ25lZExvbmdTZXF1ZW5jZUF0dHJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBu
YW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQoreworICAgIElOQ19TVEFUUygiRE9N
LlRlc3RPYmoudW5zaWduZWRMb25nU2VxdWVuY2VBdHRyLl9nZXQiKTsKKyAgICBUZXN0T2JqKiBp
bXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOworICAgIHJldHVybiB2OEFy
cmF5KGltcC0+dW5zaWduZWRMb25nU2VxdWVuY2VBdHRyKCkpOworfQorCitzdGF0aWMgdm9pZCB1
bnNpZ25lZExvbmdTZXF1ZW5jZUF0dHJBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBu
YW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYg
aW5mbykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLnVuc2lnbmVkTG9uZ1NlcXVlbmNl
QXR0ci5fc2V0Iik7CisgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZv
LkhvbGRlcigpKTsKKyAgICBWZWN0b3I8dW5zaWduZWQgbG9uZz4gdiA9IHRvTmF0aXZlQXJyYXk8
dW5zaWduZWQgbG9uZz4odmFsdWUpOworICAgIGltcC0+c2V0VW5zaWduZWRMb25nU2VxdWVuY2VB
dHRyKHYpOworICAgIHJldHVybjsKK30KKworc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB1
bnNpZ25lZExvbmdMb25nU2VxdWVuY2VBdHRyQXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmlu
Zz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKK3sKKyAgICBJTkNfU1RBVFMo
IkRPTS5UZXN0T2JqLnVuc2lnbmVkTG9uZ0xvbmdTZXF1ZW5jZUF0dHIuX2dldCIpOworICAgIFRl
c3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CisgICAgcmV0
dXJuIHY4QXJyYXkoaW1wLT51bnNpZ25lZExvbmdMb25nU2VxdWVuY2VBdHRyKCkpOworfQorCitz
dGF0aWMgdm9pZCB1bnNpZ25lZExvbmdMb25nU2VxdWVuY2VBdHRyQXR0clNldHRlcih2ODo6TG9j
YWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4
OjpBY2Nlc3NvckluZm8mIGluZm8pCit7CisgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai51bnNp
Z25lZExvbmdMb25nU2VxdWVuY2VBdHRyLl9zZXQiKTsKKyAgICBUZXN0T2JqKiBpbXAgPSBWOFRl
c3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOworICAgIFZlY3Rvcjx1bnNpZ25lZCBsb25n
IGxvbmc+IHYgPSB0b05hdGl2ZUFycmF5PHVuc2lnbmVkIGxvbmcgbG9uZz4odmFsdWUpOworICAg
IGltcC0+c2V0VW5zaWduZWRMb25nTG9uZ1NlcXVlbmNlQXR0cih2KTsKKyAgICByZXR1cm47Cit9
CisKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZmxvYXRTZXF1ZW5jZUF0dHJBdHRyR2V0
dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBp
bmZvKQoreworICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmouZmxvYXRTZXF1ZW5jZUF0dHIuX2dl
dCIpOworICAgIFRlc3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIo
KSk7CisgICAgcmV0dXJuIHY4QXJyYXkoaW1wLT5mbG9hdFNlcXVlbmNlQXR0cigpKTsKK30KKwor
c3RhdGljIHZvaWQgZmxvYXRTZXF1ZW5jZUF0dHJBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3Ry
aW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29y
SW5mbyYgaW5mbykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLmZsb2F0U2VxdWVuY2VB
dHRyLl9zZXQiKTsKKyAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8u
SG9sZGVyKCkpOworICAgIFZlY3RvcjxmbG9hdD4gdiA9IHRvTmF0aXZlQXJyYXk8ZmxvYXQ+KHZh
bHVlKTsKKyAgICBpbXAtPnNldEZsb2F0U2VxdWVuY2VBdHRyKHYpOworICAgIHJldHVybjsKK30K
Kworc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBkb3VibGVTZXF1ZW5jZUF0dHJBdHRyR2V0
dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBp
bmZvKQoreworICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmouZG91YmxlU2VxdWVuY2VBdHRyLl9n
ZXQiKTsKKyAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVy
KCkpOworICAgIHJldHVybiB2OEFycmF5KGltcC0+ZG91YmxlU2VxdWVuY2VBdHRyKCkpOworfQor
CitzdGF0aWMgdm9pZCBkb3VibGVTZXF1ZW5jZUF0dHJBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6
U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vz
c29ySW5mbyYgaW5mbykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLmRvdWJsZVNlcXVl
bmNlQXR0ci5fc2V0Iik7CisgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShp
bmZvLkhvbGRlcigpKTsKKyAgICBWZWN0b3I8ZG91YmxlPiB2ID0gdG9OYXRpdmVBcnJheTxkb3Vi
bGU+KHZhbHVlKTsKKyAgICBpbXAtPnNldERvdWJsZVNlcXVlbmNlQXR0cih2KTsKKyAgICByZXR1
cm47Cit9CisKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYm9vbGVhblNlcXVlbmNlQXR0
ckF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3Nv
ckluZm8mIGluZm8pCit7CisgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5ib29sZWFuU2VxdWVu
Y2VBdHRyLl9nZXQiKTsKKyAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGlu
Zm8uSG9sZGVyKCkpOworICAgIHJldHVybiB2OEFycmF5KGltcC0+Ym9vbGVhblNlcXVlbmNlQXR0
cigpKTsKK30KKworc3RhdGljIHZvaWQgYm9vbGVhblNlcXVlbmNlQXR0ckF0dHJTZXR0ZXIodjg6
OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25z
dCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQoreworICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmou
Ym9vbGVhblNlcXVlbmNlQXR0ci5fc2V0Iik7CisgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2Jq
Ojp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKKyAgICBWZWN0b3I8Ym9vbGVhbj4gdiA9IHRvTmF0
aXZlQXJyYXk8Ym9vbGVhbj4odmFsdWUpOworICAgIGltcC0+c2V0Qm9vbGVhblNlcXVlbmNlQXR0
cih2KTsKKyAgICByZXR1cm47Cit9CisKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdm9p
ZFNlcXVlbmNlQXR0ckF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0
IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCit7CisgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai52
b2lkU2VxdWVuY2VBdHRyLl9nZXQiKTsKKyAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRv
TmF0aXZlKGluZm8uSG9sZGVyKCkpOworICAgIHJldHVybiB2OEFycmF5KGltcC0+dm9pZFNlcXVl
bmNlQXR0cigpKTsKK30KKworc3RhdGljIHZvaWQgdm9pZFNlcXVlbmNlQXR0ckF0dHJTZXR0ZXIo
djg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBj
b25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQoreworICAgIElOQ19TVEFUUygiRE9NLlRlc3RP
Ymoudm9pZFNlcXVlbmNlQXR0ci5fc2V0Iik7CisgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2Jq
Ojp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKKyAgICBWZWN0b3I8dm9pZD4gdiA9IHRvTmF0aXZl
QXJyYXk8dm9pZD4odmFsdWUpOworICAgIGltcC0+c2V0Vm9pZFNlcXVlbmNlQXR0cih2KTsKKyAg
ICByZXR1cm47Cit9CisKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZGF0ZVNlcXVlbmNl
QXR0ckF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nl
c3NvckluZm8mIGluZm8pCit7CisgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5kYXRlU2VxdWVu
Y2VBdHRyLl9nZXQiKTsKKyAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGlu
Zm8uSG9sZGVyKCkpOworICAgIHJldHVybiB2OEFycmF5KGltcC0+ZGF0ZVNlcXVlbmNlQXR0cigp
KTsKK30KKworc3RhdGljIHZvaWQgZGF0ZVNlcXVlbmNlQXR0ckF0dHJTZXR0ZXIodjg6OkxvY2Fs
PHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6
QWNjZXNzb3JJbmZvJiBpbmZvKQoreworICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmouZGF0ZVNl
cXVlbmNlQXR0ci5fc2V0Iik7CisgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2
ZShpbmZvLkhvbGRlcigpKTsKKyAgICBWZWN0b3I8RGF0ZT4gdiA9IHRvTmF0aXZlQXJyYXk8RGF0
ZT4odmFsdWUpOworICAgIGltcC0+c2V0RGF0ZVNlcXVlbmNlQXR0cih2KTsKKyAgICByZXR1cm47
Cit9CisKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gWE1MT2JqQXR0ckF0dHJHZXR0ZXIo
djg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8p
CiB7CiAgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai5YTUxPYmpBdHRyLl9nZXQiKTsKQEAgLTE4
MTQsNiArMjAyMiwzMiBAQCBzdGF0aWMgY29uc3QgQmF0Y2hlZEF0dHJpYnV0ZSBUZXN0T2JqQXR0
CiAgICAgeyJ0ZXN0T2JqQXR0ciIsIFRlc3RPYmpWOEludGVybmFsOjp0ZXN0T2JqQXR0ckF0dHJH
ZXR0ZXIsIFRlc3RPYmpWOEludGVybmFsOjp0ZXN0T2JqQXR0ckF0dHJTZXR0ZXIsIDAgLyogbm8g
ZGF0YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxUKSwgc3Rh
dGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyogb24gaW5zdGFu
Y2UgKi99LAogICAgIC8vIEF0dHJpYnV0ZSAnc2VxdWVuY2VBdHRyJyAoVHlwZTogJ2F0dHJpYnV0
ZScgRXh0QXR0cjogJycpCiAgICAgeyJzZXF1ZW5jZUF0dHIiLCBUZXN0T2JqVjhJbnRlcm5hbDo6
c2VxdWVuY2VBdHRyQXR0ckdldHRlciwgVGVzdE9ialY4SW50ZXJuYWw6OnNlcXVlbmNlQXR0ckF0
dHJTZXR0ZXIsIDAgLyogbm8gZGF0YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+
KHY4OjpERUZBVUxUKSwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9u
ZSksIDAgLyogb24gaW5zdGFuY2UgKi99LAorICAgIC8vIEF0dHJpYnV0ZSAnaW50U2VxdWVuY2VB
dHRyJyAoVHlwZTogJ2F0dHJpYnV0ZScgRXh0QXR0cjogJycpCisgICAgeyJpbnRTZXF1ZW5jZUF0
dHIiLCBUZXN0T2JqVjhJbnRlcm5hbDo6aW50U2VxdWVuY2VBdHRyQXR0ckdldHRlciwgVGVzdE9i
alY4SW50ZXJuYWw6OmludFNlcXVlbmNlQXR0ckF0dHJTZXR0ZXIsIDAgLyogbm8gZGF0YSAqLywg
c3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxUKSwgc3RhdGljX2Nhc3Q8
djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyogb24gaW5zdGFuY2UgKi99LAor
ICAgIC8vIEF0dHJpYnV0ZSAnc2hvcnRTZXF1ZW5jZUF0dHInIChUeXBlOiAnYXR0cmlidXRlJyBF
eHRBdHRyOiAnJykKKyAgICB7InNob3J0U2VxdWVuY2VBdHRyIiwgVGVzdE9ialY4SW50ZXJuYWw6
OnNob3J0U2VxdWVuY2VBdHRyQXR0ckdldHRlciwgVGVzdE9ialY4SW50ZXJuYWw6OnNob3J0U2Vx
dWVuY2VBdHRyQXR0clNldHRlciwgMCAvKiBubyBkYXRhICovLCBzdGF0aWNfY2FzdDx2ODo6QWNj
ZXNzQ29udHJvbD4odjg6OkRFRkFVTFQpLCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1
dGU+KHY4OjpOb25lKSwgMCAvKiBvbiBpbnN0YW5jZSAqL30sCisgICAgLy8gQXR0cmlidXRlICds
b25nU2VxdWVuY2VBdHRyJyAoVHlwZTogJ2F0dHJpYnV0ZScgRXh0QXR0cjogJycpCisgICAgeyJs
b25nU2VxdWVuY2VBdHRyIiwgVGVzdE9ialY4SW50ZXJuYWw6OmxvbmdTZXF1ZW5jZUF0dHJBdHRy
R2V0dGVyLCBUZXN0T2JqVjhJbnRlcm5hbDo6bG9uZ1NlcXVlbmNlQXR0ckF0dHJTZXR0ZXIsIDAg
Lyogbm8gZGF0YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxU
KSwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyogb24g
aW5zdGFuY2UgKi99LAorICAgIC8vIEF0dHJpYnV0ZSAnbG9uZ0xvbmdTZXF1ZW5jZUF0dHInIChU
eXBlOiAnYXR0cmlidXRlJyBFeHRBdHRyOiAnJykKKyAgICB7ImxvbmdMb25nU2VxdWVuY2VBdHRy
IiwgVGVzdE9ialY4SW50ZXJuYWw6OmxvbmdMb25nU2VxdWVuY2VBdHRyQXR0ckdldHRlciwgVGVz
dE9ialY4SW50ZXJuYWw6OmxvbmdMb25nU2VxdWVuY2VBdHRyQXR0clNldHRlciwgMCAvKiBubyBk
YXRhICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQpLCBzdGF0
aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBvbiBpbnN0YW5j
ZSAqL30sCisgICAgLy8gQXR0cmlidXRlICd1bnNpZ25lZEludFNlcXVlbmNlQXR0cicgKFR5cGU6
ICdhdHRyaWJ1dGUnIEV4dEF0dHI6ICcnKQorICAgIHsidW5zaWduZWRJbnRTZXF1ZW5jZUF0dHIi
LCBUZXN0T2JqVjhJbnRlcm5hbDo6dW5zaWduZWRJbnRTZXF1ZW5jZUF0dHJBdHRyR2V0dGVyLCBU
ZXN0T2JqVjhJbnRlcm5hbDo6dW5zaWduZWRJbnRTZXF1ZW5jZUF0dHJBdHRyU2V0dGVyLCAwIC8q
IG5vIGRhdGEgKi8sIHN0YXRpY19jYXN0PHY4OjpBY2Nlc3NDb250cm9sPih2ODo6REVGQVVMVCks
IHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0dHJpYnV0ZT4odjg6Ok5vbmUpLCAwIC8qIG9uIGlu
c3RhbmNlICovfSwKKyAgICAvLyBBdHRyaWJ1dGUgJ3Vuc2lnbmVkU2hvcnRTZXF1ZW5jZUF0dHIn
IChUeXBlOiAnYXR0cmlidXRlJyBFeHRBdHRyOiAnJykKKyAgICB7InVuc2lnbmVkU2hvcnRTZXF1
ZW5jZUF0dHIiLCBUZXN0T2JqVjhJbnRlcm5hbDo6dW5zaWduZWRTaG9ydFNlcXVlbmNlQXR0ckF0
dHJHZXR0ZXIsIFRlc3RPYmpWOEludGVybmFsOjp1bnNpZ25lZFNob3J0U2VxdWVuY2VBdHRyQXR0
clNldHRlciwgMCAvKiBubyBkYXRhICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4o
djg6OkRFRkFVTFQpLCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25l
KSwgMCAvKiBvbiBpbnN0YW5jZSAqL30sCisgICAgLy8gQXR0cmlidXRlICd1bnNpZ25lZExvbmdT
ZXF1ZW5jZUF0dHInIChUeXBlOiAnYXR0cmlidXRlJyBFeHRBdHRyOiAnJykKKyAgICB7InVuc2ln
bmVkTG9uZ1NlcXVlbmNlQXR0ciIsIFRlc3RPYmpWOEludGVybmFsOjp1bnNpZ25lZExvbmdTZXF1
ZW5jZUF0dHJBdHRyR2V0dGVyLCBUZXN0T2JqVjhJbnRlcm5hbDo6dW5zaWduZWRMb25nU2VxdWVu
Y2VBdHRyQXR0clNldHRlciwgMCAvKiBubyBkYXRhICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNz
Q29udHJvbD4odjg6OkRFRkFVTFQpLCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+
KHY4OjpOb25lKSwgMCAvKiBvbiBpbnN0YW5jZSAqL30sCisgICAgLy8gQXR0cmlidXRlICd1bnNp
Z25lZExvbmdMb25nU2VxdWVuY2VBdHRyJyAoVHlwZTogJ2F0dHJpYnV0ZScgRXh0QXR0cjogJycp
CisgICAgeyJ1bnNpZ25lZExvbmdMb25nU2VxdWVuY2VBdHRyIiwgVGVzdE9ialY4SW50ZXJuYWw6
OnVuc2lnbmVkTG9uZ0xvbmdTZXF1ZW5jZUF0dHJBdHRyR2V0dGVyLCBUZXN0T2JqVjhJbnRlcm5h
bDo6dW5zaWduZWRMb25nTG9uZ1NlcXVlbmNlQXR0ckF0dHJTZXR0ZXIsIDAgLyogbm8gZGF0YSAq
Lywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxUKSwgc3RhdGljX2Nh
c3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyogb24gaW5zdGFuY2UgKi99
LAorICAgIC8vIEF0dHJpYnV0ZSAnZmxvYXRTZXF1ZW5jZUF0dHInIChUeXBlOiAnYXR0cmlidXRl
JyBFeHRBdHRyOiAnJykKKyAgICB7ImZsb2F0U2VxdWVuY2VBdHRyIiwgVGVzdE9ialY4SW50ZXJu
YWw6OmZsb2F0U2VxdWVuY2VBdHRyQXR0ckdldHRlciwgVGVzdE9ialY4SW50ZXJuYWw6OmZsb2F0
U2VxdWVuY2VBdHRyQXR0clNldHRlciwgMCAvKiBubyBkYXRhICovLCBzdGF0aWNfY2FzdDx2ODo6
QWNjZXNzQ29udHJvbD4odjg6OkRFRkFVTFQpLCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRy
aWJ1dGU+KHY4OjpOb25lKSwgMCAvKiBvbiBpbnN0YW5jZSAqL30sCisgICAgLy8gQXR0cmlidXRl
ICdkb3VibGVTZXF1ZW5jZUF0dHInIChUeXBlOiAnYXR0cmlidXRlJyBFeHRBdHRyOiAnJykKKyAg
ICB7ImRvdWJsZVNlcXVlbmNlQXR0ciIsIFRlc3RPYmpWOEludGVybmFsOjpkb3VibGVTZXF1ZW5j
ZUF0dHJBdHRyR2V0dGVyLCBUZXN0T2JqVjhJbnRlcm5hbDo6ZG91YmxlU2VxdWVuY2VBdHRyQXR0
clNldHRlciwgMCAvKiBubyBkYXRhICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4o
djg6OkRFRkFVTFQpLCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25l
KSwgMCAvKiBvbiBpbnN0YW5jZSAqL30sCisgICAgLy8gQXR0cmlidXRlICdib29sZWFuU2VxdWVu
Y2VBdHRyJyAoVHlwZTogJ2F0dHJpYnV0ZScgRXh0QXR0cjogJycpCisgICAgeyJib29sZWFuU2Vx
dWVuY2VBdHRyIiwgVGVzdE9ialY4SW50ZXJuYWw6OmJvb2xlYW5TZXF1ZW5jZUF0dHJBdHRyR2V0
dGVyLCBUZXN0T2JqVjhJbnRlcm5hbDo6Ym9vbGVhblNlcXVlbmNlQXR0ckF0dHJTZXR0ZXIsIDAg
Lyogbm8gZGF0YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vzc0NvbnRyb2w+KHY4OjpERUZBVUxU
KSwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRlPih2ODo6Tm9uZSksIDAgLyogb24g
aW5zdGFuY2UgKi99LAorICAgIC8vIEF0dHJpYnV0ZSAndm9pZFNlcXVlbmNlQXR0cicgKFR5cGU6
ICdhdHRyaWJ1dGUnIEV4dEF0dHI6ICcnKQorICAgIHsidm9pZFNlcXVlbmNlQXR0ciIsIFRlc3RP
YmpWOEludGVybmFsOjp2b2lkU2VxdWVuY2VBdHRyQXR0ckdldHRlciwgVGVzdE9ialY4SW50ZXJu
YWw6OnZvaWRTZXF1ZW5jZUF0dHJBdHRyU2V0dGVyLCAwIC8qIG5vIGRhdGEgKi8sIHN0YXRpY19j
YXN0PHY4OjpBY2Nlc3NDb250cm9sPih2ODo6REVGQVVMVCksIHN0YXRpY19jYXN0PHY4OjpQcm9w
ZXJ0eUF0dHJpYnV0ZT4odjg6Ok5vbmUpLCAwIC8qIG9uIGluc3RhbmNlICovfSwKKyAgICAvLyBB
dHRyaWJ1dGUgJ2RhdGVTZXF1ZW5jZUF0dHInIChUeXBlOiAnYXR0cmlidXRlJyBFeHRBdHRyOiAn
JykKKyAgICB7ImRhdGVTZXF1ZW5jZUF0dHIiLCBUZXN0T2JqVjhJbnRlcm5hbDo6ZGF0ZVNlcXVl
bmNlQXR0ckF0dHJHZXR0ZXIsIFRlc3RPYmpWOEludGVybmFsOjpkYXRlU2VxdWVuY2VBdHRyQXR0
clNldHRlciwgMCAvKiBubyBkYXRhICovLCBzdGF0aWNfY2FzdDx2ODo6QWNjZXNzQ29udHJvbD4o
djg6OkRFRkFVTFQpLCBzdGF0aWNfY2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpOb25l
KSwgMCAvKiBvbiBpbnN0YW5jZSAqL30sCiAgICAgLy8gQXR0cmlidXRlICdYTUxPYmpBdHRyJyAo
VHlwZTogJ2F0dHJpYnV0ZScgRXh0QXR0cjogJycpCiAgICAgeyJYTUxPYmpBdHRyIiwgVGVzdE9i
alY4SW50ZXJuYWw6OlhNTE9iakF0dHJBdHRyR2V0dGVyLCBUZXN0T2JqVjhJbnRlcm5hbDo6WE1M
T2JqQXR0ckF0dHJTZXR0ZXIsIDAgLyogbm8gZGF0YSAqLywgc3RhdGljX2Nhc3Q8djg6OkFjY2Vz
c0NvbnRyb2w+KHY4OjpERUZBVUxUKSwgc3RhdGljX2Nhc3Q8djg6OlByb3BlcnR5QXR0cmlidXRl
Pih2ODo6Tm9uZSksIDAgLyogb24gaW5zdGFuY2UgKi99LAogICAgIC8vIEF0dHJpYnV0ZSAnY3Jl
YXRlJyAoVHlwZTogJ2F0dHJpYnV0ZScgRXh0QXR0cjogJycpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138573</attachid>
            <date>2012-04-24 08:59:58 -0700</date>
            <delta_ts>2012-06-28 05:15:38 -0700</delta_ts>
            <desc>Patch_With_Traits</desc>
            <filename>unsigned_bindings_004.diff</filename>
            <type>text/plain</type>
            <size>5958</size>
            <attacher name="Vineet Chaudhary (vineetc)">code.vineet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExNTA2NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDEyLTA0LTI0ICBWaW5lZXQg
Q2hhdWRoYXJ5ICA8cmdmNzQ4QG1vdG9yb2xhLmNvbT4KKworICAgICAgICBKUyBiaW5kaW5nIGNv
ZGUgZ2VuZXJhdG9yIGRvZXNuJ3QgaGFuZGxlICJhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZ1tdIiB3
ZWxsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NDU0
MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluIEpT
L1Y4IEJpbmRpbmdzIHVzaW5nIHRyYWl0cyBpbnN0ZWFkIG9mIHNwZWNpYWxpc2VkIGZ1bmN0aW9u
cy4KKworICAgICAgICBObyBuZXcgdGVzdHMuIEFzIG5vIGJlaGF2aW91cmFsIGNoYW5nZXMuCisK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaDoKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6dHJhaXRzOjphcnJheUpTVmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6anNBcnJheSk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhCaW5kaW5nLmg6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OnRyYWl0czo6YXJyYXlWOFZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OnY4QXJyYXkpOgorCiAyMDEyLTA0LTI0ICBQYXZlbCBGZWxkbWFu
ICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGVuY2Fw
c3VsYXRlIGxpdmUgbG9jYXRpb24gaW50byB0aGUgU2NyaXB0LgpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHJldmlzaW9uIDExNTAwNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NzksMzAgKzI3OSw0MiBAQCBlbnVtIFBhcmFtZXRlckRlZmF1bHRQb2xpY3kgewogICAgICAgICBy
ZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHB0ci5nZXQoKSk7CiAgICAgfQogCisgICAg
dGVtcGxhdGUgPGNsYXNzIFQ+CisgICAgc3RydWN0IHRyYWl0cyB7CisgICAgICAgIHN0YXRpYyBp
bmxpbmUgSlNDOjpKU1ZhbHVlIGFycmF5SlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgVCYgdmFsdWUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgV1RGOjpnZXRQdHIo
dmFsdWUpKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCB0cmFp
dHM8U3RyaW5nPiB7CisgICAgICAgIHN0YXRpYyBpbmxpbmUgSlNDOjpKU1ZhbHVlIGFycmF5SlNW
YWx1ZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqLCBjb25zdCBTdHJp
bmcmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywg
c3RyaW5nVG9VU3RyaW5nKHZhbHVlKSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxh
dGU8PiBzdHJ1Y3QgdHJhaXRzPHVuc2lnbmVkIGludD4geworICAgICAgICBzdGF0aWMgaW5saW5l
IEpTQzo6SlNWYWx1ZSBhcnJheUpTVmFsdWUoSlNDOjpFeGVjU3RhdGUqICwgSlNET01HbG9iYWxP
YmplY3QqLCBjb25zdCB1bnNpZ25lZCBpbnQmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gSlNDOjpqc051bWJlcih2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9OworCiAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgICAgSlNDOjpKU1ZhbHVlIGpzQXJyYXkoSlNDOjpFeGVj
U3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3Rv
cjxUPiYgaXRlcmF0b3IpCiAgICAgewogICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVy
IGxpc3Q7CiAgICAgICAgIHR5cGVuYW1lIFZlY3RvcjxUPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
aXRlcmF0b3IuZW5kKCk7CisgICAgICAgIHR5cGVkZWYgVCB0eXBlOworICAgICAgICB0eXBlZGVm
IHRyYWl0czx0eXBlPiB0cmFpdHNUeXBlOwogCiAgICAgICAgIGZvciAodHlwZW5hbWUgVmVjdG9y
PFQ+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gaXRlcmF0b3IuYmVnaW4oKTsgaXRlciAhPSBlbmQ7
ICsraXRlcikKLSAgICAgICAgICAgIGxpc3QuYXBwZW5kKHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0
LCBXVEY6OmdldFB0cigqaXRlcikpKTsKKyAgICAgICAgICAgIGxpc3QuYXBwZW5kKHRyYWl0c1R5
cGU6OmFycmF5SlNWYWx1ZShleGVjLCBnbG9iYWxPYmplY3QsICgqaXRlcikpKTsKIAogICAgICAg
ICByZXR1cm4gSlNDOjpjb25zdHJ1Y3RBcnJheShleGVjLCBnbG9iYWxPYmplY3QsIGxpc3QpOwog
ICAgIH0KIAotICAgIHRlbXBsYXRlPD4KLSAgICBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzQXJyYXko
SlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBpdGVyYXRvcikKLSAgICB7Ci0gICAgICAgIEpTQzo6TWFya2Vk
QXJndW1lbnRCdWZmZXIgYXJyYXk7Ci0gICAgICAgIFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVy
YXRvciBlbmQgPSBpdGVyYXRvci5lbmQoKTsKLQotICAgICAgICBmb3IgKFZlY3RvcjxTdHJpbmc+
Ojpjb25zdF9pdGVyYXRvciBpdCA9IGl0ZXJhdG9yLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
LSAgICAgICAgICAgIGFycmF5LmFwcGVuZChqc1N0cmluZyhleGVjLCBzdHJpbmdUb1VTdHJpbmco
Kml0KSkpOwotCi0gICAgICAgIHJldHVybiBKU0M6OmNvbnN0cnVjdEFycmF5KGV4ZWMsIGdsb2Jh
bE9iamVjdCwgYXJyYXkpOwotICAgIH0KLQogICAgIHRlbXBsYXRlIDxjbGFzcyBUPgogICAgIFZl
Y3RvcjxUPiB0b05hdGl2ZUFycmF5KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUg
dmFsdWUpCiAgICAgewpAQCAtMzE5LDcgKzMzMSw3IEBAIGVudW0gUGFyYW1ldGVyRGVmYXVsdFBv
bGljeSB7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgLy8gVmFsaWRhdGVz
IHRoYXQgdGhlIHBhc3NlZCBvYmplY3QgaXMgYSBzZXF1ZW5jZSB0eXBlIHBlciBzZWN0aW9uIDQu
MS4xMyBvZiB0aGUgV2ViSURMIHNwZWMuCisgICAgLy8gVmFsaWRhdGVzIHRoYXQgdGhlIHBhc3Nl
ZCBvYmplY3QgICAgIGlzIGEgc2VxdWVuY2UgdHlwZSBwZXIgc2VjdGlvbiA0LjEuMTMgb2YgdGhl
IFdlYklETCBzcGVjLgogICAgIEpTQzo6SlNPYmplY3QqIHRvSlNTZXF1ZW5jZShKU0M6OkV4ZWNT
dGF0ZSosIEpTQzo6SlNWYWx1ZSwgdW5zaWduZWQmKTsKIAogICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgYWxsb3dBY2Nlc3NUb0NvbnRleHQoSlNDOjpFeGVjU3RhdGUqLCBTY3JpcHRFeGVjdXRpb25D
b250ZXh0Kik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuaAkocmV2
aXNpb24gMTE1MDA0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI2MCwyOCArMjYwLDQyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgcmV0dXJuIHY4RXh0ZXJuYWxTdHJpbmcoc3RyaW5nLCBpc29sYXRlKTsKICAgICB9
CiAKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KKyAgICBzdHJ1Y3QgdHJhaXRzIHsKKyAgICAgICAg
c3RhdGljIGlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXJyYXlWOFZhbHVlKGNvbnN0IFQm
IHZhbHVlLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIHRvVjgoV1RGOjpnZXRQdHIodmFsdWUpLCBpc29sYXRlKTsKKyAgICAgICAgfQorICAgIH07
CisKKyAgICB0ZW1wbGF0ZTw+IHN0cnVjdCB0cmFpdHM8U3RyaW5nPiB7CisgICAgICAgIHN0YXRp
YyBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGFycmF5VjhWYWx1ZShjb25zdCBTdHJpbmcm
IHZhbHVlLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIHY4U3RyaW5nKHZhbHVlLCBpc29sYXRlKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0
ZW1wbGF0ZTw+IHN0cnVjdCB0cmFpdHM8dW5zaWduZWQgaW50PiB7CisgICAgICAgIHN0YXRpYyBp
bmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGFycmF5VjhWYWx1ZShjb25zdCB1bnNpZ25lZCBp
bnQmIHZhbHVlLCB2ODo6SXNvbGF0ZSopCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB2
ODo6SW50ZWdlcjo6TmV3RnJvbVVuc2lnbmVkKHZhbHVlKTsKKyAgICAgICAgfQorICAgIH07CisK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2OEFy
cmF5KGNvbnN0IFZlY3RvcjxUPiYgaXRlcmF0b3IsIHY4OjpJc29sYXRlKiBpc29sYXRlKQogICAg
IHsKICAgICAgICAgdjg6OkxvY2FsPHY4OjpBcnJheT4gcmVzdWx0ID0gdjg6OkFycmF5OjpOZXco
aXRlcmF0b3Iuc2l6ZSgpKTsKICAgICAgICAgaW50IGluZGV4ID0gMDsKKyAgICAgICAgdHlwZWRl
ZiBUIHR5cGU7CisgICAgICAgIHR5cGVkZWYgdHJhaXRzPHR5cGU+IHRyYWl0c1R5cGU7CisKICAg
ICAgICAgdHlwZW5hbWUgVmVjdG9yPFQ+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBpdGVyYXRvci5l
bmQoKTsKICAgICAgICAgZm9yICh0eXBlbmFtZSBWZWN0b3I8VD46OmNvbnN0X2l0ZXJhdG9yIGl0
ZXIgPSBpdGVyYXRvci5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQotICAgICAgICAgICAg
cmVzdWx0LT5TZXQodjg6OkludGVnZXI6Ok5ldyhpbmRleCsrKSwgdG9WOChXVEY6OmdldFB0cigq
aXRlciksIGlzb2xhdGUpKTsKKyAgICAgICAgICAgIHJlc3VsdC0+U2V0KHY4OjpJbnRlZ2VyOjpO
ZXcoaW5kZXgrKyksIHRyYWl0c1R5cGU6OmFycmF5VjhWYWx1ZSgoKml0ZXIpLCBpc29sYXRlKSk7
CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8PgotICAgIGlu
bGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdjhBcnJheShjb25zdCBWZWN0b3I8U3RyaW5nPiYg
aXRlcmF0b3IsIHY4OjpJc29sYXRlKiBpc29sYXRlKQotICAgIHsKLSAgICAgICAgdjg6OkxvY2Fs
PHY4OjpBcnJheT4gYXJyYXkgPSB2ODo6QXJyYXk6Ok5ldyhpdGVyYXRvci5zaXplKCkpOwotICAg
ICAgICBWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaXRlcmF0b3IuZW5kKCk7
Ci0gICAgICAgIGludCBpbmRleCA9IDA7Ci0gICAgICAgIGZvciAoVmVjdG9yPFN0cmluZz46OmNv
bnN0X2l0ZXJhdG9yIGl0ZXIgPSBpdGVyYXRvci5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVy
KQotICAgICAgICAgICAgYXJyYXktPlNldCh2ODo6SW50ZWdlcjo6TmV3KGluZGV4KyspLCB2OFN0
cmluZygqaXRlciwgaXNvbGF0ZSkpOwotICAgICAgICByZXR1cm4gYXJyYXk7Ci0gICAgfQotCiAg
ICAgdGVtcGxhdGUgPGNsYXNzIFQ+CiAgICAgVmVjdG9yPFQ+IHRvTmF0aXZlQXJyYXkodjg6Okhh
bmRsZTx2ODo6VmFsdWU+IHZhbHVlKQogICAgIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149931</attachid>
            <date>2012-06-28 05:15:38 -0700</date>
            <delta_ts>2012-06-29 02:02:30 -0700</delta_ts>
            <desc>updatedPatchWithTraits</desc>
            <filename>traits_1.diff</filename>
            <type>text/plain</type>
            <size>5957</size>
            <attacher name="Vineet Chaudhary (vineetc)">code.vineet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMTQyNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDEyLTA2LTI4ICBWaW5lZXQg
Q2hhdWRoYXJ5ICA8cmdmNzQ4QG1vdG9yb2xhLmNvbT4KKworICAgICAgICBKUyBiaW5kaW5nIGNv
ZGUgZ2VuZXJhdG9yIGRvZXNuJ3QgaGFuZGxlICJhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZ1tdIiB3
ZWxsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NDU0
MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluIEpT
L1Y4IEJpbmRpbmdzIHVzaW5nIHRyYWl0cyBpbnN0ZWFkIG9mIHNwZWNpYWxpc2VkIGZ1bmN0aW9u
cy4KKworICAgICAgICBObyBuZXcgdGVzdHMsIGFzIG5vIGJlaGF2aW91cmFsIGNoYW5nZXMuCisK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaDoKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6dHJhaXRzOjphcnJheUpTVmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6anNBcnJheSk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhCaW5kaW5nLmg6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OnRyYWl0czo6YXJyYXlWOFZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OnY4QXJyYXkpOgorCiAyMDEyLTA2LTI4ICBCYWxhenMgS2VsZW1l
biAgPGtiYWxhenNAd2Via2l0Lm9yZz4KIAogICAgICAgICBbUXRdIHBsdWdpbiBpcyBsb2FkZWQg
dG8gdGhlIHdlYiBwcm9jZXNzIHZpYSBNYWluUmVzb3VyY2VMb2FkZXI6OnN1YnN0aXR1dGVNSU1F
VHlwZUZyb21QbHVnaW5EYXRhYmFzZQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01CaW5kaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01CaW5kaW5nLmgJKHJldmlzaW9uIDEyMTQyMykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRE9NQmluZGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODEsNDQgKzI4MSw0NiBA
QCBlbnVtIFBhcmFtZXRlckRlZmF1bHRQb2xpY3kgewogICAgICAgICByZXR1cm4gdG9KUyhleGVj
LCBnbG9iYWxPYmplY3QsIHB0ci5nZXQoKSk7CiAgICAgfQogCisgICAgdGVtcGxhdGUgPGNsYXNz
IFQ+CisgICAgc3RydWN0IHRyYWl0cyB7CisgICAgICAgIHN0YXRpYyBpbmxpbmUgSlNDOjpKU1Zh
bHVlIGFycmF5SlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgY29uc3QgVCYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgV1RGOjpnZXRQdHIodmFsdWUpKTsKKyAgICAg
ICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IHRyYWl0czxTdHJpbmc+
IHsKKyAgICAgICAgc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUgYXJyYXlKU1ZhbHVlKEpTQzo6
RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgdmFsdWUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBzdHJpbmdUb1VT
dHJpbmcodmFsdWUpKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAg
c3RydWN0IHRyYWl0czxmbG9hdD4geworICAgICAgICBzdGF0aWMgaW5saW5lIEpTQzo6SlNWYWx1
ZSBhcnJheUpTVmFsdWUoSlNDOjpFeGVjU3RhdGUqICwgSlNET01HbG9iYWxPYmplY3QqLCBjb25z
dCBmbG9hdCYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVt
YmVyKHZhbHVlKTsKKyAgICAgICAgfQorICAgIH07CisKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgogICAgIEpTQzo6SlNWYWx1ZSBqc0FycmF5KEpTQzo6
RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBW
ZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiBpdGVyYXRvcikKICAgICB7CiAgICAgICAgIEpTQzo6
TWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKICAgICAgICAgdHlwZW5hbWUgVmVjdG9yPFQsIGlu
bGluZUNhcGFjaXR5Pjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaXRlcmF0b3IuZW5kKCk7CisgICAg
ICAgIHR5cGVkZWYgVCB0eXBlOworICAgICAgICB0eXBlZGVmIHRyYWl0czx0eXBlPiB0cmFpdHNU
eXBlOwogCiAgICAgICAgIGZvciAodHlwZW5hbWUgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5Pjo6
Y29uc3RfaXRlcmF0b3IgaXRlciA9IGl0ZXJhdG9yLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0
ZXIpCi0gICAgICAgICAgICBsaXN0LmFwcGVuZCh0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgV1RG
OjpnZXRQdHIoKml0ZXIpKSk7CisgICAgICAgICAgICBsaXN0LmFwcGVuZCh0cmFpdHNUeXBlOjph
cnJheUpTVmFsdWUoZXhlYywgZ2xvYmFsT2JqZWN0LCAoKml0ZXIpKSk7CiAKICAgICAgICAgcmV0
dXJuIEpTQzo6Y29uc3RydWN0QXJyYXkoZXhlYywgZ2xvYmFsT2JqZWN0LCBsaXN0KTsKICAgICB9
CiAKICAgICBKU0M6OkpTVmFsdWUganNBcnJheShKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFs
T2JqZWN0KiwgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0Pik7CiAKLSAgICB0ZW1wbGF0ZTw+Ci0g
ICAgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc0FycmF5KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgaXRlcmF0
b3IpCi0gICAgewotICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGFycmF5OwotICAg
ICAgICBWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaXRlcmF0b3IuZW5kKCk7
Ci0KLSAgICAgICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBpdGVy
YXRvci5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICBhcnJheS5hcHBlbmQo
anNTdHJpbmcoZXhlYywgc3RyaW5nVG9VU3RyaW5nKCppdCkpKTsKLQotICAgICAgICByZXR1cm4g
SlNDOjpjb25zdHJ1Y3RBcnJheShleGVjLCBnbG9iYWxPYmplY3QsIGFycmF5KTsKLSAgICB9Ci0K
LSAgICB0ZW1wbGF0ZTw+Ci0gICAgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc0FycmF5KEpTQzo6RXhl
Y1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0
b3I8ZmxvYXQ+JiBpdGVyYXRvcikKLSAgICB7Ci0gICAgICAgIEpTQzo6TWFya2VkQXJndW1lbnRC
dWZmZXIgYXJyYXk7Ci0gICAgICAgIFZlY3RvcjxmbG9hdD46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IGl0ZXJhdG9yLmVuZCgpOwotCi0gICAgICAgIGZvciAoVmVjdG9yPGZsb2F0Pjo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBpdGVyYXRvci5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAg
ICBhcnJheS5hcHBlbmQoSlNDOjpqc051bWJlcigqaXQpKTsKLQotICAgICAgICByZXR1cm4gSlND
Ojpjb25zdHJ1Y3RBcnJheShleGVjLCBnbG9iYWxPYmplY3QsIGFycmF5KTsKLSAgICB9Ci0KICAg
ICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KICAgICBWZWN0b3I8VD4gdG9OYXRpdmVBcnJheShKU0M6OkV4
ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIHZhbHVlKQogICAgIHsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5oCShyZXZpc2lvbiAxMjE0MjMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMzM3LDI4
ICszMzcsMzUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICByZXR1cm4gZGF0YS0+aW50
ZWdlckNhY2hlKCktPnY4VW5zaWduZWRJbnRlZ2VyKHZhbHVlKTsKICAgICB9CiAKKyAgICB0ZW1w
bGF0ZSA8Y2xhc3MgVD4KKyAgICBzdHJ1Y3QgdHJhaXRzIHsKKyAgICAgICAgc3RhdGljIGlubGlu
ZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXJyYXlWOFZhbHVlKGNvbnN0IFQmIHZhbHVlLCB2ODo6
SXNvbGF0ZSogaXNvbGF0ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHRvVjgoV1RG
OjpnZXRQdHIodmFsdWUpLCBpc29sYXRlKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1w
bGF0ZTw+CisgICAgc3RydWN0IHRyYWl0czxTdHJpbmc+IHsKKyAgICAgICAgc3RhdGljIGlubGlu
ZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXJyYXlWOFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUs
IHY4OjpJc29sYXRlKiBpc29sYXRlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdjhT
dHJpbmcodmFsdWUsIGlzb2xhdGUpOworICAgICAgICB9CisgICAgfTsKKwogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+CiAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4QXJyYXkoY29uc3QgVmVj
dG9yPFQ+JiBpdGVyYXRvciwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCiAgICAgewogICAgICAgICB2
ODo6TG9jYWw8djg6OkFycmF5PiByZXN1bHQgPSB2ODo6QXJyYXk6Ok5ldyhpdGVyYXRvci5zaXpl
KCkpOwogICAgICAgICBpbnQgaW5kZXggPSAwOwogICAgICAgICB0eXBlbmFtZSBWZWN0b3I8VD46
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGl0ZXJhdG9yLmVuZCgpOworICAgICAgICB0eXBlZGVmIFQg
dHlwZTsKKyAgICAgICAgdHlwZWRlZiB0cmFpdHM8dHlwZT4gdHJhaXRzVHlwZTsKICAgICAgICAg
Zm9yICh0eXBlbmFtZSBWZWN0b3I8VD46OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBpdGVyYXRvci5i
ZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQotICAgICAgICAgICAgcmVzdWx0LT5TZXQodjg6
OkludGVnZXI6Ok5ldyhpbmRleCsrKSwgdG9WOChXVEY6OmdldFB0cigqaXRlciksIGlzb2xhdGUp
KTsKKyAgICAgICAgICAgIHJlc3VsdC0+U2V0KHY4OjpJbnRlZ2VyOjpOZXcoaW5kZXgrKyksIHRy
YWl0c1R5cGU6OmFycmF5VjhWYWx1ZSgoKml0ZXIpLCBpc29sYXRlKSk7CiAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8PgotICAgIGlubGluZSB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gdjhBcnJheShjb25zdCBWZWN0b3I8U3RyaW5nPiYgaXRlcmF0b3IsIHY4OjpJ
c29sYXRlKiBpc29sYXRlKQotICAgIHsKLSAgICAgICAgdjg6OkxvY2FsPHY4OjpBcnJheT4gYXJy
YXkgPSB2ODo6QXJyYXk6Ok5ldyhpdGVyYXRvci5zaXplKCkpOwotICAgICAgICBWZWN0b3I8U3Ry
aW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaXRlcmF0b3IuZW5kKCk7Ci0gICAgICAgIGludCBp
bmRleCA9IDA7Ci0gICAgICAgIGZvciAoVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0
ZXIgPSBpdGVyYXRvci5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQotICAgICAgICAgICAg
YXJyYXktPlNldCh2ODo6SW50ZWdlcjo6TmV3KGluZGV4KyspLCB2OFN0cmluZygqaXRlciwgaXNv
bGF0ZSkpOwotICAgICAgICByZXR1cm4gYXJyYXk7Ci0gICAgfQotCiAgICAgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IHY4QXJyYXkoUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0Piwgdjg6Oklzb2xhdGUq
KTsKIAogICAgIHRlbXBsYXRlIDxjbGFzcyBUPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150115</attachid>
            <date>2012-06-29 02:02:30 -0700</date>
            <delta_ts>2012-06-29 03:49:49 -0700</delta_ts>
            <desc>Updated Patch</desc>
            <filename>traits_2.diff</filename>
            <type>text/plain</type>
            <size>6562</size>
            <attacher name="Vineet Chaudhary (vineetc)">code.vineet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMTUzMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDEyLTA2LTI5ICBWaW5lZXQg
Q2hhdWRoYXJ5ICA8cmdmNzQ4QG1vdG9yb2xhLmNvbT4KKworICAgICAgICBKUyBiaW5kaW5nIGNv
ZGUgZ2VuZXJhdG9yIGRvZXNuJ3QgaGFuZGxlICJhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZ1tdIiB3
ZWxsLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODQ1
NDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbiBK
Uy9WOCBCaW5kaW5ncyB1c2luZyB0cmFpdHMgaW5zdGVhZCBvZiBzcGVjaWFsaXNlZCBmdW5jdGlv
bnMuCisgICAgICAgIEFsc28gYWRkZWQgc3VwcG9ydCBmb3IgInVuc2lnbmVkIGxvbmciIGluIEpT
RE9NQmluZGluZyBhbmQgVjhCaW5kaW5nLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgYXMgbm8g
YmVoYXZpb3VyYWwgY2hhbmdlcy4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQmluZGlu
Zy5oOgorICAgICAgICAoV2ViQ29yZTo6VHJhaXRzOjphcnJheUpTVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6anNBcnJheSk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhCaW5kaW5nLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpUcmFpdHM6OmFycmF5VjhWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
Ojp2OEFycmF5KToKKwogMjAxMi0wNi0yNiAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBhZGQgY2hhcmFjdGVyIGRhdGEgdG8g
dGhlIERPTSBzZWN0aW9uIG9mIG5hdGl2ZSBtZW1vcnkgdmlldwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHJldmlzaW9uIDEyMTQyMykKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
ODEsNDQgKzI4MSw1MyBAQCBlbnVtIFBhcmFtZXRlckRlZmF1bHRQb2xpY3kgewogICAgICAgICBy
ZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHB0ci5nZXQoKSk7CiAgICAgfQogCisgICAg
dGVtcGxhdGUgPGNsYXNzIFQ+CisgICAgc3RydWN0IFRyYWl0cyB7CisgICAgICAgIHN0YXRpYyBp
bmxpbmUgSlNDOjpKU1ZhbHVlIGFycmF5SlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgVCYgdmFsdWUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgV1RGOjpnZXRQdHIo
dmFsdWUpKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0
IFRyYWl0czxTdHJpbmc+IHsKKyAgICAgICAgc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUgYXJy
YXlKU1ZhbHVlKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCosIGNvbnN0
IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBqc1N0cmluZyhl
eGVjLCBzdHJpbmdUb1VTdHJpbmcodmFsdWUpKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0
ZW1wbGF0ZTw+CisgICAgc3RydWN0IFRyYWl0czxmbG9hdD4geworICAgICAgICBzdGF0aWMgaW5s
aW5lIEpTQzo6SlNWYWx1ZSBhcnJheUpTVmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2Jh
bE9iamVjdCosIGNvbnN0IGZsb2F0JiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBs
YXRlPD4KKyAgICBzdHJ1Y3QgVHJhaXRzPHVuc2lnbmVkIGxvbmc+IHsKKyAgICAgICAgc3RhdGlj
IGlubGluZSBKU0M6OkpTVmFsdWUgYXJyYXlKU1ZhbHVlKEpTQzo6RXhlY1N0YXRlKiwgSlNET01H
bG9iYWxPYmplY3QqLCBjb25zdCB1bnNpZ25lZCBsb25nJiB2YWx1ZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgICAgICB9CisgICAgfTsK
KwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CiAgICAg
SlNDOjpKU1ZhbHVlIGpzQXJyYXkoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIGl0ZXJh
dG9yKQogICAgIHsKICAgICAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OwotICAg
ICAgICB0eXBlbmFtZSBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+Ojpjb25zdF9pdGVyYXRvciBl
bmQgPSBpdGVyYXRvci5lbmQoKTsKKyAgICAgICAgdHlwZW5hbWUgVmVjdG9yPFQsIGlubGluZUNh
cGFjaXR5Pjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaXRlcmF0b3IuZW5kKCk7ICAgICAgICAKKyAg
ICAgICAgdHlwZWRlZiBUcmFpdHM8VD4gVHJhaXRzVHlwZTsKIAogICAgICAgICBmb3IgKHR5cGVu
YW1lIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT46OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBpdGVy
YXRvci5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQotICAgICAgICAgICAgbGlzdC5hcHBl
bmQodG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIFdURjo6Z2V0UHRyKCppdGVyKSkpOworICAgICAg
ICAgICAgbGlzdC5hcHBlbmQoVHJhaXRzVHlwZTo6YXJyYXlKU1ZhbHVlKGV4ZWMsIGdsb2JhbE9i
amVjdCwgKml0ZXIpKTsKIAogICAgICAgICByZXR1cm4gSlNDOjpjb25zdHJ1Y3RBcnJheShleGVj
LCBnbG9iYWxPYmplY3QsIGxpc3QpOwogICAgIH0KIAogICAgIEpTQzo6SlNWYWx1ZSBqc0FycmF5
KEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPERPTVN0cmlu
Z0xpc3Q+KTsKIAotICAgIHRlbXBsYXRlPD4KLSAgICBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzQXJy
YXkoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpdGVyYXRvcikKLSAgICB7Ci0gICAgICAgIEpTQzo6TWFy
a2VkQXJndW1lbnRCdWZmZXIgYXJyYXk7Ci0gICAgICAgIFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9p
dGVyYXRvciBlbmQgPSBpdGVyYXRvci5lbmQoKTsKLQotICAgICAgICBmb3IgKFZlY3RvcjxTdHJp
bmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGl0ZXJhdG9yLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkKLSAgICAgICAgICAgIGFycmF5LmFwcGVuZChqc1N0cmluZyhleGVjLCBzdHJpbmdUb1VTdHJp
bmcoKml0KSkpOwotCi0gICAgICAgIHJldHVybiBKU0M6OmNvbnN0cnVjdEFycmF5KGV4ZWMsIGds
b2JhbE9iamVjdCwgYXJyYXkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPD4KLSAgICBpbmxpbmUg
SlNDOjpKU1ZhbHVlIGpzQXJyYXkoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGl0ZXJhdG9yKQotICAgIHsK
LSAgICAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcnJheTsKLSAgICAgICAgVmVjdG9y
PGZsb2F0Pjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaXRlcmF0b3IuZW5kKCk7Ci0KLSAgICAgICAg
Zm9yIChWZWN0b3I8ZmxvYXQ+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGl0ZXJhdG9yLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIGFycmF5LmFwcGVuZChKU0M6OmpzTnVtYmVy
KCppdCkpOwotCi0gICAgICAgIHJldHVybiBKU0M6OmNvbnN0cnVjdEFycmF5KGV4ZWMsIGdsb2Jh
bE9iamVjdCwgYXJyYXkpOwotICAgIH0KLQogICAgIHRlbXBsYXRlIDxjbGFzcyBUPgogICAgIFZl
Y3RvcjxUPiB0b05hdGl2ZUFycmF5KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUg
dmFsdWUpCiAgICAgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5n
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmgJ
KHJldmlzaW9uIDEyMTQyMykKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGlu
Zy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMzcsMjggKzMzNyw0MiBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIHJldHVybiBkYXRhLT5pbnRlZ2VyQ2FjaGUoKS0+djhVbnNpZ25lZEludGVn
ZXIodmFsdWUpOwogICAgIH0KIAorICAgIHRlbXBsYXRlIDxjbGFzcyBUPgorICAgIHN0cnVjdCBU
cmFpdHMgeworICAgICAgICBzdGF0aWMgaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhcnJh
eVY4VmFsdWUoY29uc3QgVCYgdmFsdWUsIHY4OjpJc29sYXRlKiBpc29sYXRlKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gdG9WOChXVEY6OmdldFB0cih2YWx1ZSksIGlzb2xhdGUpOwor
ICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgVHJhaXRzPFN0
cmluZz4geworICAgICAgICBzdGF0aWMgaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhcnJh
eVY4VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiB2OFN0cmluZyh2YWx1ZSwgaXNvbGF0ZSk7CisgICAg
ICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBUcmFpdHM8dW5zaWdu
ZWQgbG9uZz4geworICAgICAgICBzdGF0aWMgaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBh
cnJheVY4VmFsdWUoY29uc3QgdW5zaWduZWQgbG9uZyYgdmFsdWUsIHY4OjpJc29sYXRlKiBpc29s
YXRlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdjhVbnNpZ25lZEludGVnZXIodmFs
dWUsIGlzb2xhdGUpOworICAgICAgICB9CisgICAgfTsKKwogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+CiAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4QXJyYXkoY29uc3QgVmVjdG9yPFQ+JiBp
dGVyYXRvciwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCiAgICAgewogICAgICAgICB2ODo6TG9jYWw8
djg6OkFycmF5PiByZXN1bHQgPSB2ODo6QXJyYXk6Ok5ldyhpdGVyYXRvci5zaXplKCkpOwogICAg
ICAgICBpbnQgaW5kZXggPSAwOwotICAgICAgICB0eXBlbmFtZSBWZWN0b3I8VD46OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IGl0ZXJhdG9yLmVuZCgpOworICAgICAgICB0eXBlbmFtZSBWZWN0b3I8VD46
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGl0ZXJhdG9yLmVuZCgpOyAgICAgICAgCisgICAgICAgIHR5
cGVkZWYgVHJhaXRzPFQ+IFRyYWl0c1R5cGU7CiAgICAgICAgIGZvciAodHlwZW5hbWUgVmVjdG9y
PFQ+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gaXRlcmF0b3IuYmVnaW4oKTsgaXRlciAhPSBlbmQ7
ICsraXRlcikKLSAgICAgICAgICAgIHJlc3VsdC0+U2V0KHY4OjpJbnRlZ2VyOjpOZXcoaW5kZXgr
KyksIHRvVjgoV1RGOjpnZXRQdHIoKml0ZXIpLCBpc29sYXRlKSk7CisgICAgICAgICAgICByZXN1
bHQtPlNldCh2ODo6SW50ZWdlcjo6TmV3KGluZGV4KyspLCBUcmFpdHNUeXBlOjphcnJheVY4VmFs
dWUoKml0ZXIsIGlzb2xhdGUpKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAg
ICB0ZW1wbGF0ZTw+Ci0gICAgaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2OEFycmF5KGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBpdGVyYXRvciwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCi0gICAg
ewotICAgICAgICB2ODo6TG9jYWw8djg6OkFycmF5PiBhcnJheSA9IHY4OjpBcnJheTo6TmV3KGl0
ZXJhdG9yLnNpemUoKSk7Ci0gICAgICAgIFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBl
bmQgPSBpdGVyYXRvci5lbmQoKTsKLSAgICAgICAgaW50IGluZGV4ID0gMDsKLSAgICAgICAgZm9y
IChWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGl0ZXJhdG9yLmJlZ2luKCk7
IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAgICAgICBhcnJheS0+U2V0KHY4OjpJbnRlZ2Vy
OjpOZXcoaW5kZXgrKyksIHY4U3RyaW5nKCppdGVyLCBpc29sYXRlKSk7Ci0gICAgICAgIHJldHVy
biBhcnJheTsKLSAgICB9Ci0KICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdjhBcnJheShQYXNz
UmVmUHRyPERPTVN0cmluZ0xpc3Q+LCB2ODo6SXNvbGF0ZSopOwogCiAgICAgdGVtcGxhdGUgPGNs
YXNzIFQ+Cg==
</data>
<flag name="review"
          id="158307"
          type_id="1"
          status="+"
          setter="haraken"
    />
    <flag name="commit-queue"
          id="158313"
          type_id="3"
          status="-"
          setter="code.vineet"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150129</attachid>
            <date>2012-06-29 03:49:49 -0700</date>
            <delta_ts>2012-06-29 05:26:06 -0700</delta_ts>
            <desc>rebasedPatch</desc>
            <filename>traits_3.diff</filename>
            <type>text/plain</type>
            <size>6485</size>
            <attacher name="Vineet Chaudhary (vineetc)">code.vineet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMTU0NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDEyLTA2LTI5ICBWaW5lZXQg
Q2hhdWRoYXJ5ICA8cmdmNzQ4QG1vdG9yb2xhLmNvbT4KKworICAgICAgICBKUyBiaW5kaW5nIGNv
ZGUgZ2VuZXJhdG9yIGRvZXNuJ3QgaGFuZGxlICJhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZ1tdIiB3
ZWxsLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODQ1
NDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbiBK
Uy9WOCBCaW5kaW5ncyB1c2luZyB0cmFpdHMgaW5zdGVhZCBvZiBzcGVjaWFsaXNlZCBmdW5jdGlv
bnMuCisgICAgICAgIEFsc28gYWRkZWQgc3VwcG9ydCBmb3IgInVuc2lnbmVkIGxvbmciIGluIEpT
RE9NQmluZGluZyBhbmQgVjhCaW5kaW5nLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgYXMgbm8g
YmVoYXZpb3VyYWwgY2hhbmdlcy4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQmluZGlu
Zy5oOgorICAgICAgICAoV2ViQ29yZTo6VHJhaXRzOjphcnJheUpTVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6anNBcnJheSk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhCaW5kaW5nLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpUcmFpdHM6OmFycmF5VjhWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
Ojp2OEFycmF5KToKKwogMjAxMi0wNi0yOSAgT3N3YWxkIEJ1ZGRlbmhhZ2VuICA8b3N3YWxkLmJ1
ZGRlbmhhZ2VuQG5va2lhLmNvbT4KIAogICAgICAgICBbUXRdIERvbid0IGFkZCBRdCBtb2R1bGUg
ZGVwZW5kZW5jaWVzIGluIGZlYXR1cmVzLnByZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01CaW5kaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01CaW5kaW5nLmgJKHJldmlzaW9uIDEyMTU0NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODEsNDQgKzI4
MSw1MyBAQCBlbnVtIFBhcmFtZXRlckRlZmF1bHRQb2xpY3kgewogICAgICAgICByZXR1cm4gdG9K
UyhleGVjLCBnbG9iYWxPYmplY3QsIHB0ci5nZXQoKSk7CiAgICAgfQogCisgICAgdGVtcGxhdGUg
PGNsYXNzIFQ+CisgICAgc3RydWN0IFRyYWl0cyB7CisgICAgICAgIHN0YXRpYyBpbmxpbmUgSlND
OjpKU1ZhbHVlIGFycmF5SlNWYWx1ZShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgVCYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgV1RGOjpnZXRQdHIodmFsdWUpKTsK
KyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IFRyYWl0czxT
dHJpbmc+IHsKKyAgICAgICAgc3RhdGljIGlubGluZSBKU0M6OkpTVmFsdWUgYXJyYXlKU1ZhbHVl
KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYg
dmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBzdHJp
bmdUb1VTdHJpbmcodmFsdWUpKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTw+
CisgICAgc3RydWN0IFRyYWl0czxmbG9hdD4geworICAgICAgICBzdGF0aWMgaW5saW5lIEpTQzo6
SlNWYWx1ZSBhcnJheUpTVmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCos
IGNvbnN0IGZsb2F0JiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEpTQzo6
anNOdW1iZXIodmFsdWUpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAg
ICBzdHJ1Y3QgVHJhaXRzPHVuc2lnbmVkIGxvbmc+IHsKKyAgICAgICAgc3RhdGljIGlubGluZSBK
U0M6OkpTVmFsdWUgYXJyYXlKU1ZhbHVlKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmpl
Y3QqLCBjb25zdCB1bnNpZ25lZCBsb25nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIEpTQzo6anNOdW1iZXIodmFsdWUpOworICAgICAgICB9CisgICAgfTsKKwogICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CiAgICAgSlNDOjpKU1Zh
bHVlIGpzQXJyYXkoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIGNvbnN0IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIGl0ZXJhdG9yKQogICAg
IHsKICAgICAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OwotICAgICAgICB0eXBl
bmFtZSBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBpdGVy
YXRvci5lbmQoKTsKKyAgICAgICAgdHlwZW5hbWUgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5Pjo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gaXRlcmF0b3IuZW5kKCk7ICAgICAgICAKKyAgICAgICAgdHlw
ZWRlZiBUcmFpdHM8VD4gVHJhaXRzVHlwZTsKIAogICAgICAgICBmb3IgKHR5cGVuYW1lIFZlY3Rv
cjxULCBpbmxpbmVDYXBhY2l0eT46OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBpdGVyYXRvci5iZWdp
bigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQotICAgICAgICAgICAgbGlzdC5hcHBlbmQodG9KUyhl
eGVjLCBnbG9iYWxPYmplY3QsIFdURjo6Z2V0UHRyKCppdGVyKSkpOworICAgICAgICAgICAgbGlz
dC5hcHBlbmQoVHJhaXRzVHlwZTo6YXJyYXlKU1ZhbHVlKGV4ZWMsIGdsb2JhbE9iamVjdCwgKml0
ZXIpKTsKIAogICAgICAgICByZXR1cm4gSlNDOjpjb25zdHJ1Y3RBcnJheShleGVjLCBnbG9iYWxP
YmplY3QsIGxpc3QpOwogICAgIH0KIAogICAgIEpTQzo6SlNWYWx1ZSBqc0FycmF5KEpTQzo6RXhl
Y1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqLCBQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+KTsK
IAotICAgIHRlbXBsYXRlPD4KLSAgICBpbmxpbmUgSlNDOjpKU1ZhbHVlIGpzQXJyYXkoSlNDOjpF
eGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBpdGVyYXRvcikKLSAgICB7Ci0gICAgICAgIEpTQzo6TWFya2VkQXJndW1l
bnRCdWZmZXIgYXJyYXk7Ci0gICAgICAgIFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBl
bmQgPSBpdGVyYXRvci5lbmQoKTsKLQotICAgICAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25z
dF9pdGVyYXRvciBpdCA9IGl0ZXJhdG9yLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAg
ICAgICAgIGFycmF5LmFwcGVuZChqc1N0cmluZyhleGVjLCBzdHJpbmdUb1VTdHJpbmcoKml0KSkp
OwotCi0gICAgICAgIHJldHVybiBKU0M6OmNvbnN0cnVjdEFycmF5KGV4ZWMsIGdsb2JhbE9iamVj
dCwgYXJyYXkpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPD4KLSAgICBpbmxpbmUgSlNDOjpKU1Zh
bHVlIGpzQXJyYXkoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIGNvbnN0IFZlY3RvcjxmbG9hdD4mIGl0ZXJhdG9yKQotICAgIHsKLSAgICAgICAg
SlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcnJheTsKLSAgICAgICAgVmVjdG9yPGZsb2F0Pjo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gaXRlcmF0b3IuZW5kKCk7Ci0KLSAgICAgICAgZm9yIChWZWN0
b3I8ZmxvYXQ+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGl0ZXJhdG9yLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkKLSAgICAgICAgICAgIGFycmF5LmFwcGVuZChKU0M6OmpzTnVtYmVyKCppdCkpOwot
Ci0gICAgICAgIHJldHVybiBKU0M6OmNvbnN0cnVjdEFycmF5KGV4ZWMsIGdsb2JhbE9iamVjdCwg
YXJyYXkpOwotICAgIH0KLQogICAgIHRlbXBsYXRlIDxjbGFzcyBUPgogICAgIFZlY3RvcjxUPiB0
b05hdGl2ZUFycmF5KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgdmFsdWUpCiAg
ICAgewpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmgJKHJldmlzaW9u
IDEyMTU0NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMzcsMjggKzMzNyw0MiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIHJldHVybiBkYXRhLT5pbnRlZ2VyQ2FjaGUoKS0+djhVbnNpZ25lZEludGVnZXIodmFsdWUp
OwogICAgIH0KIAorICAgIHRlbXBsYXRlIDxjbGFzcyBUPgorICAgIHN0cnVjdCBUcmFpdHMgewor
ICAgICAgICBzdGF0aWMgaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhcnJheVY4VmFsdWUo
Y29uc3QgVCYgdmFsdWUsIHY4OjpJc29sYXRlKiBpc29sYXRlKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gdG9WOChXVEY6OmdldFB0cih2YWx1ZSksIGlzb2xhdGUpOworICAgICAgICB9
CisgICAgfTsKKworICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgVHJhaXRzPFN0cmluZz4gewor
ICAgICAgICBzdGF0aWMgaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhcnJheVY4VmFsdWUo
Y29uc3QgU3RyaW5nJiB2YWx1ZSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiB2OFN0cmluZyh2YWx1ZSwgaXNvbGF0ZSk7CisgICAgICAgIH0KKyAg
ICB9OworCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBUcmFpdHM8dW5zaWduZWQgbG9uZz4g
eworICAgICAgICBzdGF0aWMgaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhcnJheVY4VmFs
dWUoY29uc3QgdW5zaWduZWQgbG9uZyYgdmFsdWUsIHY4OjpJc29sYXRlKiBpc29sYXRlKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gdjhVbnNpZ25lZEludGVnZXIodmFsdWUsIGlzb2xh
dGUpOworICAgICAgICB9CisgICAgfTsKKwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4QXJyYXkoY29uc3QgVmVjdG9yPFQ+JiBpdGVyYXRvciwg
djg6Oklzb2xhdGUqIGlzb2xhdGUpCiAgICAgewogICAgICAgICB2ODo6TG9jYWw8djg6OkFycmF5
PiByZXN1bHQgPSB2ODo6QXJyYXk6Ok5ldyhpdGVyYXRvci5zaXplKCkpOwogICAgICAgICBpbnQg
aW5kZXggPSAwOwogICAgICAgICB0eXBlbmFtZSBWZWN0b3I8VD46OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IGl0ZXJhdG9yLmVuZCgpOworICAgICAgICB0eXBlZGVmIFRyYWl0czxUPiBUcmFpdHNUeXBl
OwogICAgICAgICBmb3IgKHR5cGVuYW1lIFZlY3RvcjxUPjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9
IGl0ZXJhdG9yLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAgICAgICByZXN1
bHQtPlNldCh2OEludGVnZXIoaW5kZXgrKywgaXNvbGF0ZSksIHRvVjgoV1RGOjpnZXRQdHIoKml0
ZXIpLCBpc29sYXRlKSk7CisgICAgICAgICAgICByZXN1bHQtPlNldCh2OEludGVnZXIoaW5kZXgr
KywgaXNvbGF0ZSksIFRyYWl0c1R5cGU6OmFycmF5VjhWYWx1ZSgqaXRlciwgaXNvbGF0ZSkpOwog
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIHRlbXBsYXRlPD4KLSAgICBpbmxp
bmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4QXJyYXkoY29uc3QgVmVjdG9yPFN0cmluZz4mIGl0
ZXJhdG9yLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKLSAgICB7Ci0gICAgICAgIHY4OjpMb2NhbDx2
ODo6QXJyYXk+IGFycmF5ID0gdjg6OkFycmF5OjpOZXcoaXRlcmF0b3Iuc2l6ZSgpKTsKLSAgICAg
ICAgVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGl0ZXJhdG9yLmVuZCgpOwot
ICAgICAgICBpbnQgaW5kZXggPSAwOwotICAgICAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25z
dF9pdGVyYXRvciBpdGVyID0gaXRlcmF0b3IuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikK
LSAgICAgICAgICAgIGFycmF5LT5TZXQodjhJbnRlZ2VyKGluZGV4KyssIGlzb2xhdGUpLCB2OFN0
cmluZygqaXRlciwgaXNvbGF0ZSkpOwotICAgICAgICByZXR1cm4gYXJyYXk7Ci0gICAgfQotCiAg
ICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4QXJyYXkoUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0
Piwgdjg6Oklzb2xhdGUqKTsKIAogICAgIHRlbXBsYXRlIDxjbGFzcyBUPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>