<?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>82319</bug_id>
          
          <creation_ts>2012-03-27 04:17:51 -0700</creation_ts>
          <short_desc>Remove custom bindings form Internals.idl of attribute type Array.</short_desc>
          <delta_ts>2012-04-21 18:09:51 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>82442</dependson>
          <blocked>84540</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Vineet Chaudhary (vineetc)">code.vineet</reporter>
          <assigned_to name="Vineet Chaudhary (vineetc)">code.vineet</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>haraken</cc>
    
    <cc>japhet</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>588742</commentid>
    <comment_count>0</comment_count>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-03-27 04:17:51 -0700</bug_when>
    <thetext>Remove custom bindings for attribute type Array from JavaScriptCallFrame.idl.
Replace attribute [Custom] Array userPreferredLanguages;
To      attribute sequence&lt;String&gt; userPreferredLanguages;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588754</commentid>
    <comment_count>1</comment_count>
      <attachid>134024</attachid>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-03-27 04:35:50 -0700</bug_when>
    <thetext>Created attachment 134024
proposed patch

Attaching proposed patch to remove custom bindings from Internals.idl.

Here I have added :: template&lt;&gt; inline JSC::JSValue jsArray(JSC::ExecState* exec, JSDOMGlobalObject* globalObject, const Vector&lt;String&gt;&amp; iterator) 
For string type for the reasons :: String types needs jsString() rather than toJS() where jsString() takes String parameter.

If we add specialize function template for String it would be also helpful in removing bindings from Clipboard.idl too.

Please let me know review comments on this. If this patch looks oke I will remove JSInternalsCustom.cpp/.h in next patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588759</commentid>
    <comment_count>2</comment_count>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-03-27 04:43:12 -0700</bug_when>
    <thetext>(In reply to comment #0)
&gt; Remove custom bindings for attribute type Array from JavaScriptCallFrame.idl.
Again Copy Paste Error :( . Should be 
Remove custom bindings for attribute type Array from Internals.idl.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588783</commentid>
    <comment_count>3</comment_count>
      <attachid>134024</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-03-27 05:03:15 -0700</bug_when>
    <thetext>Comment on attachment 134024
proposed patch

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

&gt; Source/WebCore/bindings/js/JSDOMBinding.h:283
&gt; +    inline JSC::JSValue jsArray(JSC::ExecState* exec, JSDOMGlobalObject* globalObject, const Iterable&amp; iterator)

Why do you want to make this inline? Did you confirm any performance gain? (Otherwise we do not want to inline methods since it just increases the code size, which might result in high cache miss rate.)

Also, shall we change Iterable to Vector, for consistency with JSC::JSValue jsArray(JSC::ExecState* exec, JSDOMGlobalObject* globalObject, const Vector&lt;String&gt;&amp; iterator)?

&gt; Source/WebCore/bindings/js/JSDOMBinding.h:298
&gt; +        if (iterator.isEmpty())
&gt; +            return JSC::jsNull();

Generally speaking, I think this is wrong. If possible, we do not want to write this here, since jsArray() should be a generalized implementation. Is it really an expected behavior for Internals.idl to return null when the vector is empty? (If it is not an expected behavior, we can fix the behavior first.)

&gt; Source/WebCore/bindings/v8/V8Binding.h:304
&gt; +        if (iterator.isEmpty())
&gt; +            return v8::Null();

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589745</commentid>
    <comment_count>4</comment_count>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-03-28 01:41:25 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 134024 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=134024&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/bindings/js/JSDOMBinding.h:283
&gt; &gt; +    inline JSC::JSValue jsArray(JSC::ExecState* exec, JSDOMGlobalObject* globalObject, const Iterable&amp; iterator)
&gt; 
&gt; Why do you want to make this inline? Did you confirm any performance gain? (Otherwise we do not want to inline methods since it just increases the code size, which might result in high cache miss rate.)

Here it has 3 inline functions 
1) template &lt;typename T&gt; inline JSC::JSValue jsArray(JSC::ExecState* exec, JSDOMGlobalObject* globalObject, const Vector&lt;T&gt;&amp; iterator)
2) template &lt;class T&gt; inline Vector&lt;T&gt; toNativeArray(JSC::ExecState* exec, JSC::JSValue value)

I tried running Dromaeo performance test but there is no significant difference. So we can removing inline.

3) template&lt;&gt; inline JSC::JSValue jsArray(JSC::ExecState* exec, JSDOMGlobalObject* globalObject, const Vector&lt;String&gt;&amp; iterator)
This still needs to have inline because of &quot;One definition rule.&quot;

&gt; Also, shall we change Iterable to Vector, for consistency with JSC::JSValue jsArray(JSC::ExecState* exec, JSDOMGlobalObject* globalObject, const Vector&lt;String&gt;&amp; iterator)?
Done.

&gt; &gt; Source/WebCore/bindings/js/JSDOMBinding.h:298
&gt; &gt; +        if (iterator.isEmpty())
&gt; &gt; +            return JSC::jsNull();
&gt; 
&gt; Generally speaking, I think this is wrong. If possible, we do not want to write this here, since jsArray() should be a generalized implementation. Is it really an expected behavior for Internals.idl to return null when the vector is empty? (If it is not an expected behavior, we can fix the behavior first.)
&gt; 
&gt; &gt; Source/WebCore/bindings/v8/V8Binding.h:304
&gt; &gt; +        if (iterator.isEmpty())
&gt; &gt; +            return v8::Null();
&gt; 
&gt; Ditto.

I tried finding specification for Internals.idl but could not find on w3c. But you are right jsArray() should be a generalized implementation, also as per comment https://bugs.webkit.org/show_bug.cgi?id=80696#c35 we should remove this.

I will upload patch with these comments thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589770</commentid>
    <comment_count>5</comment_count>
      <attachid>134241</attachid>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-03-28 02:15:04 -0700</bug_when>
    <thetext>Created attachment 134241
Updated Patch

Updated patch for review comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589773</commentid>
    <comment_count>6</comment_count>
      <attachid>134241</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-03-28 02:28:19 -0700</bug_when>
    <thetext>Comment on attachment 134241
Updated Patch

The change looks OK to me, but this patch changes the existing behavior of Internals. First, we need to reach consensus on removing jsNull()/v8::Null() with Internals folks.

Option1: We can ask it in this bug.
Option2: You can make a patch that simply removes jsNull()/v8::Null() from JSInternalsCustom.cpp/V8InternalsCustom.cpp as another bug. It will update some layout tests, because it changes the existing behavior. After the patch is landed, you can commit this patch.

Both options are fine (but I would prefer Option2.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>589803</commentid>
    <comment_count>7</comment_count>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-03-28 03:09:34 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 134241 [details])
&gt; The change looks OK to me, but this patch changes the existing behavior of Internals. First, we need to reach consensus on removing jsNull()/v8::Null() with Internals folks.
&gt; 
&gt; Option1: We can ask it in this bug.
&gt; Option2: You can make a patch that simply removes jsNull()/v8::Null() from JSInternalsCustom.cpp/V8InternalsCustom.cpp as another bug. It will update some layout tests, because it changes the existing behavior. After the patch is landed, you can commit this patch.
&gt; 
&gt; Both options are fine (but I would prefer Option2.)

Thanks haraken for suggestins.
I have Filed bug https://bugs.webkit.org/show_bug.cgi?id=82442</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590883</commentid>
    <comment_count>8</comment_count>
      <attachid>134509</attachid>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-03-28 23:46:28 -0700</bug_when>
    <thetext>Created attachment 134509
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590888</commentid>
    <comment_count>9</comment_count>
      <attachid>134509</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-03-28 23:58:49 -0700</bug_when>
    <thetext>Comment on attachment 134509
Patch

The patch looks OK. Please rebase your patch with the latest WebKit trunk. (It seems that your previous patch is not yet applied.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590901</commentid>
    <comment_count>10</comment_count>
      <attachid>134514</attachid>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-03-29 00:24:48 -0700</bug_when>
    <thetext>Created attachment 134514
Updated Patch

Re-based  patch fixing efl build issue too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590903</commentid>
    <comment_count>11</comment_count>
      <attachid>134514</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-03-29 00:26:14 -0700</bug_when>
    <thetext>Comment on attachment 134514
Updated Patch

OK. Thanks for the patch!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590909</commentid>
    <comment_count>12</comment_count>
    <who name="Vineet Chaudhary (vineetc)">code.vineet</who>
    <bug_when>2012-03-29 00:31:59 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 134514 [details])
&gt; OK. Thanks for the patch!

Thanks haraken for support.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590940</commentid>
    <comment_count>13</comment_count>
      <attachid>134514</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-29 01:33:06 -0700</bug_when>
    <thetext>Comment on attachment 134514
Updated Patch

Clearing flags on attachment: 134514

Committed r112506: &lt;http://trac.webkit.org/changeset/112506&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590941</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-29 01:33:13 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134024</attachid>
            <date>2012-03-27 04:35:50 -0700</date>
            <delta_ts>2012-03-28 02:15:04 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>wip_internals_001.diff</filename>
            <type>text/plain</type>
            <size>11156</size>
            <attacher name="Vineet Chaudhary (vineetc)">code.vineet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMjI1MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2IEBACisyMDEyLTAzLTI3ICBWaW5lZXQg
Q2hhdWRoYXJ5ICA8cmdmNzQ4QG1vdG9yb2xhLmNvbT4KKworICAgICAgICBSZW1vdmUgY3VzdG9t
IGJpbmRpbmdzIGZvcm0gSW50ZXJuYWxzLmlkbCBvZiBhdHRyaWJ1dGUgdHlwZSBBcnJheS4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyMzE5CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
LgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmg6CisgICAgICAgIChXZWJD
b3JlOjpqc0FycmF5KTogQWRkZWQgbmV3IHNwZWNpYWxpemUgZnVuY3Rpb24gdGVtcGxhdGUgZm9y
IFN0cmluZ3MuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OnRvTmF0aXZl
QXJyYXkpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgor
ICAgICAgICAoSlNWYWx1ZVRvTmF0aXZlKTogQWRkIGpzQXJyYXk8U3RyaW5nPigpIHRvIGRlZHVj
ZSByZXR1cm4gdHlwZS4KKyAgICAgICAgKE5hdGl2ZVRvSlNWYWx1ZSk6IEFkZGVkIGNoZWNrIGZv
ciB0eXBlIFN0cmluZy4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JW
OC5wbToKKyAgICAgICAgKEpTVmFsdWVUb05hdGl2ZSk6IEFkZCB2OEFycmF5PFN0cmluZz4oKSB0
byBkZWR1Y2UgcmV0dXJuIHR5cGUuCisgICAgICAgIChOYXRpdmVUb0pTVmFsdWUpOiBBZGRlZCBj
aGVjayBmb3IgdHlwZSBTdHJpbmcuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE9iai5jcHA6IE1vZGlmaWVkIHJlc3VsdHMgZnJvbSBydW4tYmluZGluZy10ZXN0cwor
ICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqU2VxdWVuY2VBdHRyKToKKyAgICAgICAgKiBi
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcDogcmVzdWx0cyBmcm9tIHJ1bi1i
aW5kaW5nLXRlc3RzCisgICAgICAgIChXZWJDb3JlOjpUZXN0T2JqSW50ZXJuYWw6OnNlcXVlbmNl
QXR0ckF0dHJTZXR0ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4QmluZGluZy5oOiBBZGRl
ZCBuZXcgc3BlY2lhbGl6ZSBmdW5jdGlvbiB0ZW1wbGF0ZSBmb3IgU3RyaW5ncy4KKyAgICAgICAg
KFdlYkNvcmU6OnY4QXJyYXkpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
Ojp0b05hdGl2ZUFycmF5KToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5pZGw6IFJlcGxh
Y2UgQXJyYXkgdHlwZSB3aXRoIHNlcXVlbmNlPFQ+CisgICAgICAgICogdGVzdGluZy9qcy9KU0lu
dGVybmFsc0N1c3RvbS5jcHA6IFJlbW92ZSBjdXN0b20gYmluZGluZ3MuCisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKiB0ZXN0aW5nL3Y4L1Y4SW50ZXJuYWxzQ3VzdG9tLmNwcDogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlKToKKwogMjAxMi0wMy0yNiAgTGV2aSBXZWludHJhdWIgIDxsZXZp
d0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gUmVtb3ZpbmcgY2hhbmdlIG1h
cmtlcnMgZnJvbSBDaGFuZ2VMb2cuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUJpbmRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RPTUJpbmRpbmcuaAkocmV2aXNpb24gMTEyMDU0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNET01CaW5kaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4MCw3ICsyODAsNyBAQCBl
bnVtIFBhcmFtZXRlckRlZmF1bHRQb2xpY3kgewogICAgIH0KIAogICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBJdGVyYWJsZT4KLSAgICBKU0M6OkpTVmFsdWUganNBcnJheShKU0M6OkV4ZWNTdGF0ZSog
ZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSXRlcmFibGUmIGl0
ZXJhdG9yKQorICAgIGlubGluZSBKU0M6OkpTVmFsdWUganNBcnJheShKU0M6OkV4ZWNTdGF0ZSog
ZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgSXRlcmFibGUmIGl0
ZXJhdG9yKQogICAgIHsKICAgICAgICAgSlNDOjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0Owog
ICAgICAgICB0eXBlbmFtZSBJdGVyYWJsZTo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaXRlcmF0b3Iu
ZW5kKCk7CkBAIC0yOTEsOCArMjkxLDIzIEBAIGVudW0gUGFyYW1ldGVyRGVmYXVsdFBvbGljeSB7
CiAgICAgICAgIHJldHVybiBKU0M6OmNvbnN0cnVjdEFycmF5KGV4ZWMsIGdsb2JhbE9iamVjdCwg
bGlzdCk7CiAgICAgfQogCisgICAgdGVtcGxhdGU8PgorICAgIGlubGluZSBKU0M6OkpTVmFsdWUg
anNBcnJheShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGl0ZXJhdG9yKQorICAgIHsKKyAgICAgICAgaWYg
KGl0ZXJhdG9yLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBKU0M6OmpzTnVsbCgpOwor
CisgICAgICAgIEpTQzo6TWFya2VkQXJndW1lbnRCdWZmZXIgYXJyYXk7CisgICAgICAgIFZlY3Rv
cjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBpdGVyYXRvci5lbmQoKTsKKworICAgICAg
ICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGl0ZXJhdG9yLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgICAgIGFycmF5LmFwcGVuZChqc1N0cmluZyhl
eGVjLCBzdHJpbmdUb1VTdHJpbmcoKml0KSkpOworCisgICAgICAgIHJldHVybiBKU0M6OmNvbnN0
cnVjdEFycmF5KGV4ZWMsIGdsb2JhbE9iamVjdCwgYXJyYXkpOworICAgIH0KKwogICAgIHRlbXBs
YXRlIDxjbGFzcyBUPgotICAgIFZlY3RvcjxUPiB0b05hdGl2ZUFycmF5KEpTQzo6RXhlY1N0YXRl
KiBleGVjLCBKU0M6OkpTVmFsdWUgdmFsdWUpCisgICAgaW5saW5lIFZlY3RvcjxUPiB0b05hdGl2
ZUFycmF5KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgdmFsdWUpCiAgICAgewog
ICAgICAgICBpZiAoIWlzSlNBcnJheSh2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm4gVmVjdG9y
PFQ+KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMTEyMDU0KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTI5Mzcs
OCArMjkzNyw5IEBAIHN1YiBKU1ZhbHVlVG9OYXRpdmUKICAgICBBZGRUb0ltcGxJbmNsdWRlcygi
SlNDdXN0b21Wb2lkQ2FsbGJhY2suaCIsICRjb25kaXRpb25hbCkgaWYgJHR5cGUgZXEgIlZvaWRD
YWxsYmFjayI7CiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkV2ZW50LmgiLCAkY29uZGl0aW9uYWwp
IGlmICR0eXBlIGVxICJFdmVudCI7CiAKLSAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPkdldEFycmF5
VHlwZSgkdHlwZSkpIHsKLSAgICAgICAgcmV0dXJuICJ0b05hdGl2ZUFycmF5KGV4ZWMsICR2YWx1
ZSkiOworICAgIG15ICRhcnJheVR5cGUgPSAkY29kZUdlbmVyYXRvci0+R2V0QXJyYXlUeXBlKCR0
eXBlKTsKKyAgICBpZiAoJGFycmF5VHlwZSkgeworICAgICAgICByZXR1cm4gInRvTmF0aXZlQXJy
YXk8JGFycmF5VHlwZT4oZXhlYywgJHZhbHVlKSI7CiAgICAgfQogCiAgICAgIyBEZWZhdWx0LCBh
c3N1bWUgYXV0b2dlbmVyYXRlZCB0eXBlIGNvbnZlcnNpb24gcm91dGluZXMKQEAgLTMwMDIsOSAr
MzAwMywxMSBAQCBzdWIgTmF0aXZlVG9KU1ZhbHVlCiAKICAgICBteSAkYXJyYXlUeXBlID0gJGNv
ZGVHZW5lcmF0b3ItPkdldEFycmF5VHlwZSgkdHlwZSk7CiAgICAgaWYgKCRhcnJheVR5cGUpIHsK
KyAgICAgICAgaWYgKCRhcnJheVR5cGUgbmUgIlN0cmluZyIpIHsKKyAgICAgICAgICAgIEFkZFRv
SW1wbEluY2x1ZGVzKCJKUyRhcnJheVR5cGUuaCIsICRjb25kaXRpb25hbCk7CisgICAgICAgICAg
ICBBZGRUb0ltcGxJbmNsdWRlcygiJGFycmF5VHlwZS5oIiwgJGNvbmRpdGlvbmFsKTsKKyAgICAg
ICAgfQogICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiPHJ1bnRpbWUvSlNBcnJheS5oPiIsICRj
b25kaXRpb25hbCk7Ci0gICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJKUyRhcnJheVR5cGUuaCIs
ICRjb25kaXRpb25hbCk7Ci0gICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCIkYXJyYXlUeXBlLmgi
LCAkY29uZGl0aW9uYWwpOwogICAgICAgICByZXR1cm4gImpzQXJyYXkoZXhlYywgJHRoaXNWYWx1
ZS0+Z2xvYmFsT2JqZWN0KCksICR2YWx1ZSkiOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0JKHJldmlzaW9u
IDExMjA1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
clY4LnBtCSh3b3JraW5nIGNvcHkpCkBAIC0zNTU2LDggKzM1NTYsOSBAQCBzdWIgSlNWYWx1ZVRv
TmF0aXZlCiAgICAgICAgIHJldHVybiAiVjhET01XcmFwcGVyOjpnZXRYUGF0aE5TUmVzb2x2ZXIo
JHZhbHVlKSI7CiAgICAgfQogCi0gICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5HZXRBcnJheVR5cGUo
JHR5cGUpKSB7Ci0gICAgICAgIHJldHVybiAidG9OYXRpdmVBcnJheSgkdmFsdWUpIjsKKyAgICBt
eSAkYXJyYXlUeXBlID0gJGNvZGVHZW5lcmF0b3ItPkdldEFycmF5VHlwZSgkdHlwZSk7CisgICAg
aWYgKCRhcnJheVR5cGUpIHsKKyAgICAgICAgcmV0dXJuICJ0b05hdGl2ZUFycmF5PCRhcnJheVR5
cGU+KCR2YWx1ZSkiOwogICAgIH0KIAogICAgIEFkZEluY2x1ZGVzRm9yVHlwZSgkdHlwZSk7CkBA
IC0zNzc1LDggKzM3NzYsMTAgQEAgc3ViIE5hdGl2ZVRvSlNWYWx1ZQogCiAgICAgbXkgJGFycmF5
VHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5HZXRBcnJheVR5cGUoJHR5cGUpOwogICAgIGlmICgkYXJy
YXlUeXBlKSB7Ci0gICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJWOCRhcnJheVR5cGUuaCIpOwot
ICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiJGFycmF5VHlwZS5oIik7CisgICAgICAgIGlmICgk
YXJyYXlUeXBlIG5lICJTdHJpbmciKSB7CisgICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygi
VjgkYXJyYXlUeXBlLmgiKTsKKyAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCIkYXJyYXlU
eXBlLmgiKTsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gInY4QXJyYXkoJHZhbHVlKSI7CiAg
ICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNU
ZXN0T2JqLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAkocmV2aXNpb24gMTEyMDU0KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTk4NCw3ICs5ODQsNyBAQCB2b2lkIHNldEpTVGVzdE9ialNlcXVlbmNlQXR0cihFeGVjU3Rh
dGUqCiB7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2Jq
Kj4odGhpc09iamVjdCk7CiAgICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0PFRlc3RPYmoq
PihjYXN0ZWRUaGlzLT5pbXBsKCkpOwotICAgIGltcGwtPnNldFNlcXVlbmNlQXR0cih0b05hdGl2
ZUFycmF5KGV4ZWMsIHZhbHVlKSk7CisgICAgaW1wbC0+c2V0U2VxdWVuY2VBdHRyKHRvTmF0aXZl
QXJyYXk8U2NyaXB0UHJvZmlsZT4oZXhlYywgdmFsdWUpKTsKIH0KIAogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNw
cAkocmV2aXNpb24gMTEyMDU0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdE9iai5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMSw3ICsyMzEsNyBAQCBz
dGF0aWMgdm9pZCBzZXF1ZW5jZUF0dHJBdHRyU2V0dGVyKHY4OjpMCiB7CiAgICAgSU5DX1NUQVRT
KCJET00uVGVzdE9iai5zZXF1ZW5jZUF0dHIuX3NldCIpOwogICAgIFRlc3RPYmoqIGltcCA9IFY4
VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgVmVjdG9yPFNjcmlwdFByb2Zp
bGU+IHYgPSB0b05hdGl2ZUFycmF5KHZhbHVlKTsKKyAgICBWZWN0b3I8U2NyaXB0UHJvZmlsZT4g
diA9IHRvTmF0aXZlQXJyYXk8U2NyaXB0UHJvZmlsZT4odmFsdWUpOwogICAgIGltcC0+c2V0U2Vx
dWVuY2VBdHRyKHYpOwogICAgIHJldHVybjsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4QmluZGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4QmluZGluZy5oCShyZXZpc2lvbiAxMTIwNTQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9WOEJpbmRpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMjg3LDcgKzI4Nyw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYWJs
ZT4KLSAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdjhBcnJheShjb25zdCBJdGVyYWJsZSYgaXRl
cmF0b3IpCisgICAgaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2OEFycmF5KGNvbnN0IEl0
ZXJhYmxlJiBpdGVyYXRvcikKICAgICB7CiAgICAgICAgIHY4OjpMb2NhbDx2ODo6QXJyYXk+IHJl
c3VsdCA9IHY4OjpBcnJheTo6TmV3KGl0ZXJhdG9yLnNpemUoKSk7CiAgICAgICAgIGludCBpbmRl
eCA9IDA7CkBAIC0yOTcsOCArMjk3LDIyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTw+CisgICAgaW5saW5lIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiB2OEFycmF5KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpdGVyYXRvcikK
KyAgICB7CisgICAgICAgIGlmIChpdGVyYXRvci5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1
cm4gdjg6Ok51bGwoKTsKKworICAgICAgICB2ODo6TG9jYWw8djg6OkFycmF5PiBhcnJheSA9IHY4
OjpBcnJheTo6TmV3KGl0ZXJhdG9yLnNpemUoKSk7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+Ojpj
b25zdF9pdGVyYXRvciBlbmQgPSBpdGVyYXRvci5lbmQoKTsKKyAgICAgICAgaW50IGluZGV4ID0g
MDsKKyAgICAgICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGl0
ZXJhdG9yLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCisgICAgICAgICAgICBhcnJheS0+
U2V0KHY4OjpJbnRlZ2VyOjpOZXcoaW5kZXgrKyksIHY4U3RyaW5nKCppdGVyKSk7CisgICAgICAg
IHJldHVybiBhcnJheTsKKyAgICB9CisKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KLSAgICBWZWN0
b3I8VD4gdG9OYXRpdmVBcnJheSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpCisgICAgaW5s
aW5lIFZlY3RvcjxUPiB0b05hdGl2ZUFycmF5KHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkK
ICAgICB7CiAgICAgICAgIGlmICghdmFsdWUtPklzQXJyYXkoKSkKICAgICAgICAgICAgIHJldHVy
biBWZWN0b3I8VD4oKTsKQEAgLTMwOSw4ICszMjMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIHNpemVfdCBsZW5ndGggPSBhcnJheS0+TGVuZ3RoKCk7CiAKICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICAgICAgU3RyaW5nIGluZGV4
ZWRWYWx1ZSA9IHY4U3RyaW5nVG9XZWJDb3JlU3RyaW5nKGFycmF5LT5HZXQoaSkpOwotICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZChpbmRleGVkVmFsdWUpOworICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZCh2OFZhbHVlVG9XZWJDb3JlU3RyaW5nKGFycmF5LT5HZXQoaSkpKTsKICAgICAgICAgfQog
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0lu
dGVybmFscy5pZGwJKHJldmlzaW9uIDExMjA1NCkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDcgKzEwMSw3IEBAIG1vZHVsZSB3
aW5kb3cgewogICAgICAgICBib29sZWFuIHNob3VsZERpc3BsYXlUcmFja0tpbmQoaW4gRG9jdW1l
bnQgZG9jdW1lbnQsIGluIERPTVN0cmluZyB0cmFja0tpbmQpIHJhaXNlcyAoRE9NRXhjZXB0aW9u
KTsKICNlbmRpZgogCi0gICAgICAgIGF0dHJpYnV0ZSBbQ3VzdG9tXSBBcnJheSB1c2VyUHJlZmVy
cmVkTGFuZ3VhZ2VzOworICAgICAgICBhdHRyaWJ1dGUgc2VxdWVuY2U8U3RyaW5nPiB1c2VyUHJl
ZmVycmVkTGFuZ3VhZ2VzOwogCiAgICAgICAgIHVuc2lnbmVkIGxvbmcgd2hlZWxFdmVudEhhbmRs
ZXJDb3VudChpbiBEb2N1bWVudCBkb2N1bWVudCkgcmFpc2VzIChET01FeGNlcHRpb24pOwogICAg
ICAgICB1bnNpZ25lZCBsb25nIHRvdWNoRXZlbnRIYW5kbGVyQ291bnQoaW4gRG9jdW1lbnQgZG9j
dW1lbnQpIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvanMvSlNJbnRlcm5hbHNDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvanMvSlNJbnRlcm5hbHNDdXN0b20uY3BwCShyZXZpc2lvbiAxMTIwNTQpCisrKyBT
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL2pzL0pTSW50ZXJuYWxzQ3VzdG9tLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzEsNyArMzEsNyBAQAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewotCisvKgogSlNWYWx1ZSBKU0ludGVybmFsczo6dXNlclByZWZlcnJlZExhbmd1
YWdlcyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgSW50ZXJuYWxzKiBpbXAgPSBzdGF0
aWNfY2FzdDxJbnRlcm5hbHMqPihpbXBsKCkpOwpAQCAtNDQsOCArNDQsMTAgQEAgSlNWYWx1ZSBK
U0ludGVybmFsczo6dXNlclByZWZlcnJlZExhbmd1YQogICAgIGZvciAoVmVjdG9yPFN0cmluZz46
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGFuZ3VhZ2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkK
ICAgICAgICAgYXJyYXkuYXBwZW5kKGpzU3RyaW5nKGV4ZWMsIHN0cmluZ1RvVVN0cmluZygqaXQp
KSk7CiAgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBhcnJh
eSk7CisKIH0KIAorCiB2b2lkIEpTSW50ZXJuYWxzOjpzZXRVc2VyUHJlZmVycmVkTGFuZ3VhZ2Vz
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBpZiAoIWlzSlNBcnJheSh2
YWx1ZSkpIHsKQEAgLTYzLDUgKzY1LDUgQEAgdm9pZCBKU0ludGVybmFsczo6c2V0VXNlclByZWZl
cnJlZExhbmd1YQogICAgIEludGVybmFscyogaW1wID0gc3RhdGljX2Nhc3Q8SW50ZXJuYWxzKj4o
aW1wbCgpKTsKICAgICBpbXAtPnNldFVzZXJQcmVmZXJyZWRMYW5ndWFnZXMobGFuZ3VhZ2VzKTsK
IH0KLSAgICAKKyovCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL3Y4L1Y4SW50ZXJuYWxzQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL3Y4L1Y4SW50ZXJuYWxzQ3VzdG9tLmNwcAkocmV2aXNpb24gMTEyMDU0
KQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy92OC9WOEludGVybmFsc0N1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICJWOFByb3h5LmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKLQorLyoKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEludGVybmFs
czo6dXNlclByZWZlcnJlZExhbmd1YWdlc0FjY2Vzc29yR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3Ry
aW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAgIEludGVybmFs
cyogaW50ZXJuYWxzID0gVjhJbnRlcm5hbHM6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwpAQCAt
NjIsNSArNjIsNSBAQCB2b2lkIFY4SW50ZXJuYWxzOjp1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzCiAg
ICAgSW50ZXJuYWxzKiBpbnRlcm5hbHMgPSBWOEludGVybmFsczo6dG9OYXRpdmUoaW5mby5Ib2xk
ZXIoKSk7CiAgICAgaW50ZXJuYWxzLT5zZXRVc2VyUHJlZmVycmVkTGFuZ3VhZ2VzKGxhbmd1YWdl
cyk7CiB9Ci0gICAgCisqLwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134241</attachid>
            <date>2012-03-28 02:15:04 -0700</date>
            <delta_ts>2012-03-28 23:46:28 -0700</delta_ts>
            <desc>Updated Patch</desc>
            <filename>wip_internals_002.diff</filename>
            <type>text/plain</type>
            <size>24644</size>
            <attacher name="Vineet Chaudhary (vineetc)">code.vineet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMjM3NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQwIEBACisyMDEyLTAzLTI4ICBWaW5lZXQg
Q2hhdWRoYXJ5ICA8cmdmNzQ4QG1vdG9yb2xhLmNvbT4KKworICAgICAgICBSZW1vdmUgY3VzdG9t
IGJpbmRpbmdzIGZvcm0gSW50ZXJuYWxzLmlkbCBvZiBhdHRyaWJ1dGUgdHlwZSBBcnJheS4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyMzE5CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIGN1c3Rv
bSBiaW5kaW5ncyBmb3IgQXJyYXkgdHlwZSBhbmQgcmVwbGFjZSBBcnJheSB0eXBlIHdpdGggc2Vx
dWVuY2U8U3RyaW5nPi4KKworICAgICAgICBObyBuZXcgdGVzdHMuIExheW91dFRlc3RzL2Zhc3Qv
aGFybmVzcy91c2VyLXByZWZlcnJlZC1sYW5ndWFnZS5odG1sIHNob3VsZCBwYXNzCisgICAgICAg
IGV2ZW4gYWZ0ZXIgdGhlc2UgY2hhbmdlcy4KKworICAgICAgICAqIFRhcmdldC5wcmk6IFJlbW92
ZSBKU0ludGVybmFsc0N1c3RvbS5jcHAgYW5kIFY4SW50ZXJuYWxzQ3VzdG9tLmNwcC4KKyAgICAg
ICAgKiBXZWJDb3JlLmd5cGk6IFJlbW92ZSBKU0ludGVybmFsc0N1c3RvbS5jcHAgYW5kIFY4SW50
ZXJuYWxzQ3VzdG9tLmNwcC4KKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlVGVzdFN1
cHBvcnQudmNwcm9qOiBSZW1vdmUgSlNJbnRlcm5hbHNDdXN0b20uY3BwIGFuZCBWOEludGVybmFs
c0N1c3RvbS5jcHAuCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OiBSZW1vdmUgSlNJbnRlcm5hbHNDdXN0b20uY3BwIGFuZCBWOEludGVybmFsc0N1c3RvbS5jcHAu
CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmg6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzQXJyYXkpOiBBZGRlZCBuZXcgc3BlY2lhbGl6ZSBmdW5j
dGlvbiB0ZW1wbGF0ZSBmb3IgU3RyaW5ncy4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbTogCisgICAgICAgIChKU1ZhbHVlVG9OYXRpdmUpOiBBZGQganNBcnJh
eTxTdHJpbmc+KCkgdG8gZGVkdWNlIHJldHVybiB0eXBlLgorICAgICAgICAoTmF0aXZlVG9KU1Zh
bHVlKTogQWRkZWQgY2hlY2sgZm9yIHR5cGUgU3RyaW5nLgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtOgorICAgICAgICAoSlNWYWx1ZVRvTmF0aXZlKTogQWRk
IHY4QXJyYXk8U3RyaW5nPigpIHRvIGRlZHVjZSByZXR1cm4gdHlwZS4KKyAgICAgICAgKE5hdGl2
ZVRvSlNWYWx1ZSk6IEFkZGVkIGNoZWNrIGZvciB0eXBlIFN0cmluZy4KKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcDogTW9kaWZpZWQgcmVzdWx0cyBmcm9t
IHJ1bi1iaW5kaW5nLXRlc3RzCisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpTZXF1ZW5j
ZUF0dHIpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3Bw
OiBNb2RpZmllZCByZXN1bHRzIGZyb20gcnVuLWJpbmRpbmctdGVzdHMKKyAgICAgICAgKFdlYkNv
cmU6OlRlc3RPYmpJbnRlcm5hbDo6c2VxdWVuY2VBdHRyQXR0clNldHRlcik6CisgICAgICAgICog
YmluZGluZ3MvdjgvVjhCaW5kaW5nLmg6IEFkZGVkIG5ldyBzcGVjaWFsaXplIGZ1bmN0aW9uIHRl
bXBsYXRlIGZvciBTdHJpbmdzLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
Ojp2OEFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OnRvTmF0aXZlQXJyYXkpOgorICAgICAgICAq
IHRlc3RpbmcvSW50ZXJuYWxzLmlkbDogUmVwbGFjZSBBcnJheSB0eXBlIHdpdGggc2VxdWVuY2U8
U3RyaW5nPgorICAgICAgICAqIHRlc3RpbmcvanMvSlNJbnRlcm5hbHNDdXN0b20uY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIHRlc3RpbmcvdjgvVjhJbnRlcm5hbHNDdXN0b20uY3BwOiBSZW1vdmVk
LgorCiAyMDEyLTAzLTI3ICBKYW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgW2Nocm9taXVtXSBUcmFuc2ZlciB3aGVlbCBmbGluZyB2aWEgV2ViQ29tcG9zaXRv
cklucHV0SGFuZGxlckNsaWVudApJbmRleDogU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCShyZXZpc2lvbiAxMTIwNTQpCisr
KyBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCSh3b3JraW5nIGNvcHkpCkBAIC0yMzcsNyArMjM3
LDYgQEAgdjggewogICAgICAgICBiaW5kaW5ncy92OC9jdXN0b20vVjhDb25zb2xlQ3VzdG9tLmNw
cCBcCiAgICAgICAgIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFNRTFRyYW5zYWN0aW9uU3luY0N1c3Rv
bS5jcHAgXAogICAgICAgICBiaW5kaW5ncy92OC9WOFdvcmtlckNvbnRleHRFcnJvckhhbmRsZXIu
Y3BwIFwKLSAgICAgICAgdGVzdGluZy92OC9WOEludGVybmFsc0N1c3RvbS5jcHAgXAogICAgICAg
ICB0ZXN0aW5nL3Y4L1dlYkNvcmVUZXN0U3VwcG9ydC5jcHAKIH0gZWxzZSB7CiAgICAgU09VUkNF
UyArPSBcCkBAIC0zOTgsNyArMzk3LDYgQEAgdjggewogICAgICAgICBicmlkZ2UvcnVudGltZV9t
ZXRob2QuY3BwIFwKICAgICAgICAgYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmNwcCBcCiAgICAgICAg
IGJyaWRnZS9ydW50aW1lX3Jvb3QuY3BwIFwKLSAgICAgICAgdGVzdGluZy9qcy9KU0ludGVybmFs
c0N1c3RvbS5jcHAgXAogICAgICAgICB0ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5jcHAK
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gMTEyMDU0KQorKysgU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC02MTQzLDEwICs2MTQzLDggQEAK
ICAgICAgICAgICAndGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmlkbCcsCiAgICAgICAgIF0sCiAg
ICAgICAgICd3ZWJjb3JlX3Rlc3Rfc3VwcG9ydF9maWxlcyc6IFsKLSAgICAgICAgICAgICd0ZXN0
aW5nL3Y4L1Y4SW50ZXJuYWxzQ3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAndGVzdGluZy92OC9X
ZWJDb3JlVGVzdFN1cHBvcnQuY3BwJywKICAgICAgICAgICAgICd0ZXN0aW5nL3Y4L1dlYkNvcmVU
ZXN0U3VwcG9ydC5oJywKLSAgICAgICAgICAgICd0ZXN0aW5nL2pzL0pTSW50ZXJuYWxzQ3VzdG9t
LmNwcCcsCiAgICAgICAgICAgICAndGVzdGluZy9qcy9XZWJDb3JlVGVzdFN1cHBvcnQuY3BwJywK
ICAgICAgICAgICAgICd0ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5oJywKICAgICAgICAg
ICAgICd0ZXN0aW5nL0ludGVybmFscy5jcHAnLApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZVRlc3RTdXBwb3J0LnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlVGVzdFN1cHBvcnQudmNwcm9qCShyZXZpc2lv
biAxMTIwNTQpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlVGVzdFN1
cHBvcnQudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02OTEsNzQgKzY5MSw2IEBACiAJCQkJUmVs
YXRpdmVQYXRoPSIuLlx0ZXN0aW5nXGpzXFdlYkNvcmVUZXN0U3VwcG9ydC5oIgogCQkJCT4KIAkJ
CTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlx0ZXN0aW5nXGpzXEpTSW50
ZXJuYWxzQ3VzdG9tLmNwcCIKLQkJCQk+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5h
bWU9IkRlYnVnfFdpbjMyIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29t
cGlsZXJUb29sIgotCQkJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCi0JCQkJCQlEaXNhYmxl
U3BlY2lmaWNXYXJuaW5ncz0iNDA2NTs0MjczOzQ1NjU7NDcwMTs0NzAyIgotCQkJCQkJRm9yY2Vk
SW5jbHVkZUZpbGVzPSIkKE5PSU5IRVJJVCkiCi0JCQkJCS8+Ci0JCQkJPC9GaWxlQ29uZmlndXJh
dGlvbj4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIK
LQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQkJ
CVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgotCQkJCQkJRGlzYWJsZVNwZWNpZmljV2FybmluZ3M9
IjQwNjU7NDI3Mzs0NTY1OzQ3MDE7NDcwMiIKLQkJCQkJCUZvcmNlZEluY2x1ZGVGaWxlcz0iJChO
T0lOSEVSSVQpIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVD
b25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IkRlYnVnX0NhaXJvX0NGTGl0ZXxXaW4zMiIKLQkJCQkJ
PgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQkJCVVzZVBy
ZWNvbXBpbGVkSGVhZGVyPSIwIgotCQkJCQkJRGlzYWJsZVNwZWNpZmljV2FybmluZ3M9IjQwNjU7
NDI3Mzs0NTY1OzQ3MDE7NDcwMiIKLQkJCQkJCUZvcmNlZEluY2x1ZGVGaWxlcz0iJChOT0lOSEVS
SVQpIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1
cmF0aW9uCi0JCQkJCU5hbWU9IlJlbGVhc2VfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgotCQkJCQk+Ci0J
CQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkJVXNlUHJlY29t
cGlsZWRIZWFkZXI9IjAiCi0JCQkJCQlEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz0iNDA2NTs0Mjcz
OzQ1NjU7NDcwMTs0NzAyIgotCQkJCQkJRm9yY2VkSW5jbHVkZUZpbGVzPSIkKE5PSU5IRVJJVCki
Ci0JCQkJCS8+Ci0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRp
b24KLQkJCQkJTmFtZT0iRGVidWdfQWxsfFdpbjMyIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJ
CQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAi
Ci0JCQkJCQlEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz0iNDA2NTs0MjczOzQ1NjU7NDcwMTs0NzAy
IgotCQkJCQkJRm9yY2VkSW5jbHVkZUZpbGVzPSIkKE5PSU5IRVJJVCkiCi0JCQkJCS8+Ci0JCQkJ
PC9GaWxlQ29uZmlndXJhdGlvbj4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFtZT0i
UHJvZHVjdGlvbnxXaW4zMiIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENv
bXBpbGVyVG9vbCIKLQkJCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgotCQkJCQkJRGlzYWJs
ZVNwZWNpZmljV2FybmluZ3M9IjQwNjU7NDI3Mzs0NTY1OzQ3MDE7NDcwMiIKLQkJCQkJCUZvcmNl
ZEluY2x1ZGVGaWxlcz0iJChOT0lOSEVSSVQpIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3Vy
YXRpb24+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cdGVzdGlu
Z1xqc1xKU0ludGVybmFsc0N1c3RvbS5oIgotCQkJCT4KLQkJCTwvRmlsZT4KIAkJPC9GaWx0ZXI+
CiAJCTxGaWxlCiAJCQlSZWxhdGl2ZVBhdGg9Ii4uXGNvbmZpZy5oIgpJbmRleDogU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MTEyMDU0KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNyArMTA5LDYgQEAKIAkJMDcwOUZDNEUxMDI1REVF
MzAwNTlDREJBIC8qIEFjY2Vzc2liaWxpdHlTbGlkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MDlGQzREMTAyNURFRTMwMDU5Q0RCQSAvKiBBY2Nl
c3NpYmlsaXR5U2xpZGVyLmggKi87IH07CiAJCTA3MjBCMEEwMTREMzMyMzUwMDY0Mjk1NSAvKiBH
ZW5lcmljRXZlbnRRdWV1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwNzIwQjA5RTE0RDMzMjM1MDA2NDI5NTUgLyogR2VuZXJpY0V2ZW50UXVldWUu
Y3BwICovOyB9OwogCQkwNzIwQjBBMTE0RDMzMjM1MDA2NDI5NTUgLyogR2VuZXJpY0V2ZW50UXVl
dWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MjBC
MDlGMTREMzMyMzUwMDY0Mjk1NSAvKiBHZW5lcmljRXZlbnRRdWV1ZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTA3MjMwQ0JDMTRDMTBFRDkwMEY2
QjcwMiAvKiBKU0ludGVybmFsc0N1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwNzIzMENCQjE0QzEwRUQ5MDBGNkI3MDIgLyogSlNJbnRlcm5h
bHNDdXN0b20uY3BwICovOyB9OwogCQkwNzJDOEIxMTEzMUM1MTg2MDBBNEZDRTkgLyogTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDA3NkYwRDA5MTJCODE5MjcwMEMyNkFBNCAvKiBNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb24uY3BwICovOyB9OwogCQkwNzM1RUU2QTBGNDBDNUU0MDA0QTI2
MDQgLyogTWVkaWFQbGF5ZXJQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMDczNUVFNjkwRjQwQzVFNDAwNEEyNjA0IC8qIE1lZGlhUGxheWVyUHJv
eHkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
NzUzODYwMjE0NDg5RTk4MDBCNzg0NTIgLyogQ2FjaGVkVGV4dFRyYWNrLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3NTM4NjAwMTQ0ODlFOTgwMEI3
ODQ1MiAvKiBDYWNoZWRUZXh0VHJhY2suY3BwICovOyB9OwpAQCAtNjg5MCw3ICs2ODg5LDYgQEAK
IAkJMDcwREQ4RjUwRjAxODY4MDAwNzI3REVCIC8qIG1lZGlhQ29udHJvbHMuY3NzICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgcGF0aCA9IG1lZGlhQ29udHJvbHMuY3NzOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwNzIwQjA5RTE0RDMzMjM1MDA2NDI5NTUgLyogR2VuZXJpY0V2ZW50UXVldWUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR2VuZXJpY0V2ZW50UXVldWUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzIwQjA5RjE0RDMzMjM1MDA2NDI5
NTUgLyogR2VuZXJpY0V2ZW50UXVldWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gR2VuZXJpY0V2ZW50UXVldWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDcy
MzBDQkIxNEMxMEVEOTAwRjZCNzAyIC8qIEpTSW50ZXJuYWxzQ3VzdG9tLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSW50ZXJuYWxzQ3VzdG9tLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDczNUVFNjkwRjQwQzVFNDAwNEEyNjA0IC8qIE1lZGlh
UGxheWVyUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFQbGF5
ZXJQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzUzODYwMDE0NDg5RTk4
MDBCNzg0NTIgLyogQ2FjaGVkVGV4dFRyYWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IENhY2hlZFRleHRUcmFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTA3NTM4NjAxMTQ0ODlFOTgwMEI3ODQ1MiAvKiBDYWNoZWRUZXh0VHJhY2suaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FjaGVkVGV4dFRyYWNrLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDUzMyw3ICsxNDUzMSw2IEBACiAJCTQxODE1QzFCMTM4
MzE5NjMwMDU3QUFBNCAvKiBqcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCi0JCQkJMDcyMzBDQkIxNEMxMEVEOTAwRjZCNzAyIC8qIEpTSW50ZXJuYWxzQ3VzdG9t
LmNwcCAqLywKIAkJCQk0MTgxNUMxQzEzODMxOTgzMDA1N0FBQTQgLyogV2ViQ29yZVRlc3RTdXBw
b3J0LmNwcCAqLywKIAkJCQk0MTgxNUMxRDEzODMxOTgzMDA1N0FBQTQgLyogV2ViQ29yZVRlc3RT
dXBwb3J0LmggKi8sCiAJCQkpOwpAQCAtMjQ5ODYsNyArMjQ5ODMsNiBAQAogCQkJCTQxN0RBNkQ5
MTM3MzRFNkUwMDdDNTdGQiAvKiBJbnRlcm5hbHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdC
RjdFREYxNEM5MTc1QTAwMTQ0ODlEIC8qIEludGVybmFsU2V0dGluZ3MuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNDE3REE3MUQxMzczNURGQTAwN0M1N0ZCIC8qIEpTSW50ZXJuYWxzLmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCTA3MjMwQ0JDMTRDMTBFRDkwMEY2QjcwMiAvKiBKU0ludGVybmFsc0N1
c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzQwQjVBNzE0QzkzNUFGMDBBNzdGQTQgLyog
SlNJbnRlcm5hbFNldHRpbmdzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxODE1QzFFMTM4MzE5
ODMwMDU3QUFBNCAvKiBXZWJDb3JlVGVzdFN1cHBvcnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHJldmlz
aW9uIDExMjA1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNzksMTggKzI3OSwzMCBAQCBlbnVtIFBhcmFtZXRlckRlZmF1
bHRQb2xpY3kgewogICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHB0ci5n
ZXQoKSk7CiAgICAgfQogCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIEl0ZXJhYmxlPgotICAgIEpT
Qzo6SlNWYWx1ZSBqc0FycmF5KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBjb25zdCBJdGVyYWJsZSYgaXRlcmF0b3IpCisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CisgICAgSlNDOjpKU1ZhbHVlIGpzQXJyYXkoSlNDOjpFeGVjU3RhdGUqIGV4
ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxUPiYgaXRl
cmF0b3IpCiAgICAgewogICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7Ci0g
ICAgICAgIHR5cGVuYW1lIEl0ZXJhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSBpdGVyYXRvci5l
bmQoKTsKKyAgICAgICAgdHlwZW5hbWUgVmVjdG9yPFQ+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBp
dGVyYXRvci5lbmQoKTsKIAotICAgICAgICBmb3IgKHR5cGVuYW1lIEl0ZXJhYmxlOjpjb25zdF9p
dGVyYXRvciBpdGVyID0gaXRlcmF0b3IuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKKyAg
ICAgICAgZm9yICh0eXBlbmFtZSBWZWN0b3I8VD46OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBpdGVy
YXRvci5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQogICAgICAgICAgICAgbGlzdC5hcHBl
bmQodG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIFdURjo6Z2V0UHRyKCppdGVyKSkpOwogCiAgICAg
ICAgIHJldHVybiBKU0M6OmNvbnN0cnVjdEFycmF5KGV4ZWMsIGdsb2JhbE9iamVjdCwgbGlzdCk7
CiAgICAgfQogCisgICAgdGVtcGxhdGU8PgorICAgIGlubGluZSBKU0M6OkpTVmFsdWUganNBcnJh
eShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGl0ZXJhdG9yKQorICAgIHsKKyAgICAgICAgSlNDOjpNYXJr
ZWRBcmd1bWVudEJ1ZmZlciBhcnJheTsKKyAgICAgICAgVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IGl0ZXJhdG9yLmVuZCgpOworCisgICAgICAgIGZvciAoVmVjdG9yPFN0cmlu
Zz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaXRlcmF0b3IuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KQorICAgICAgICAgICAgYXJyYXkuYXBwZW5kKGpzU3RyaW5nKGV4ZWMsIHN0cmluZ1RvVVN0cmlu
ZygqaXQpKSk7CisKKyAgICAgICAgcmV0dXJuIEpTQzo6Y29uc3RydWN0QXJyYXkoZXhlYywgZ2xv
YmFsT2JqZWN0LCBhcnJheSk7CisgICAgfQorCiAgICAgdGVtcGxhdGUgPGNsYXNzIFQ+CiAgICAg
VmVjdG9yPFQ+IHRvTmF0aXZlQXJyYXkoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKICAgICB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMTEyMDU0KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkK
QEAgLTI5MzcsOCArMjkzNyw5IEBAIHN1YiBKU1ZhbHVlVG9OYXRpdmUKICAgICBBZGRUb0ltcGxJ
bmNsdWRlcygiSlNDdXN0b21Wb2lkQ2FsbGJhY2suaCIsICRjb25kaXRpb25hbCkgaWYgJHR5cGUg
ZXEgIlZvaWRDYWxsYmFjayI7CiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkV2ZW50LmgiLCAkY29u
ZGl0aW9uYWwpIGlmICR0eXBlIGVxICJFdmVudCI7CiAKLSAgICBpZiAoJGNvZGVHZW5lcmF0b3It
PkdldEFycmF5VHlwZSgkdHlwZSkpIHsKLSAgICAgICAgcmV0dXJuICJ0b05hdGl2ZUFycmF5KGV4
ZWMsICR2YWx1ZSkiOworICAgIG15ICRhcnJheVR5cGUgPSAkY29kZUdlbmVyYXRvci0+R2V0QXJy
YXlUeXBlKCR0eXBlKTsKKyAgICBpZiAoJGFycmF5VHlwZSkgeworICAgICAgICByZXR1cm4gInRv
TmF0aXZlQXJyYXk8JGFycmF5VHlwZT4oZXhlYywgJHZhbHVlKSI7CiAgICAgfQogCiAgICAgIyBE
ZWZhdWx0LCBhc3N1bWUgYXV0b2dlbmVyYXRlZCB0eXBlIGNvbnZlcnNpb24gcm91dGluZXMKQEAg
LTMwMDIsOSArMzAwMywxMSBAQCBzdWIgTmF0aXZlVG9KU1ZhbHVlCiAKICAgICBteSAkYXJyYXlU
eXBlID0gJGNvZGVHZW5lcmF0b3ItPkdldEFycmF5VHlwZSgkdHlwZSk7CiAgICAgaWYgKCRhcnJh
eVR5cGUpIHsKKyAgICAgICAgaWYgKCRhcnJheVR5cGUgbmUgIlN0cmluZyIpIHsKKyAgICAgICAg
ICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJKUyRhcnJheVR5cGUuaCIsICRjb25kaXRpb25hbCk7Cisg
ICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiJGFycmF5VHlwZS5oIiwgJGNvbmRpdGlvbmFs
KTsKKyAgICAgICAgfQogICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiPHJ1bnRpbWUvSlNBcnJh
eS5oPiIsICRjb25kaXRpb25hbCk7Ci0gICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJKUyRhcnJh
eVR5cGUuaCIsICRjb25kaXRpb25hbCk7Ci0gICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCIkYXJy
YXlUeXBlLmgiLCAkY29uZGl0aW9uYWwpOwogICAgICAgICByZXR1cm4gImpzQXJyYXkoZXhlYywg
JHRoaXNWYWx1ZS0+Z2xvYmFsT2JqZWN0KCksICR2YWx1ZSkiOwogICAgIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0J
KHJldmlzaW9uIDExMjA1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvclY4LnBtCSh3b3JraW5nIGNvcHkpCkBAIC0zNTU2LDggKzM1NTYsOSBAQCBzdWIg
SlNWYWx1ZVRvTmF0aXZlCiAgICAgICAgIHJldHVybiAiVjhET01XcmFwcGVyOjpnZXRYUGF0aE5T
UmVzb2x2ZXIoJHZhbHVlKSI7CiAgICAgfQogCi0gICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5HZXRB
cnJheVR5cGUoJHR5cGUpKSB7Ci0gICAgICAgIHJldHVybiAidG9OYXRpdmVBcnJheSgkdmFsdWUp
IjsKKyAgICBteSAkYXJyYXlUeXBlID0gJGNvZGVHZW5lcmF0b3ItPkdldEFycmF5VHlwZSgkdHlw
ZSk7CisgICAgaWYgKCRhcnJheVR5cGUpIHsKKyAgICAgICAgcmV0dXJuICJ0b05hdGl2ZUFycmF5
PCRhcnJheVR5cGU+KCR2YWx1ZSkiOwogICAgIH0KIAogICAgIEFkZEluY2x1ZGVzRm9yVHlwZSgk
dHlwZSk7CkBAIC0zNzc1LDggKzM3NzYsMTAgQEAgc3ViIE5hdGl2ZVRvSlNWYWx1ZQogCiAgICAg
bXkgJGFycmF5VHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5HZXRBcnJheVR5cGUoJHR5cGUpOwogICAg
IGlmICgkYXJyYXlUeXBlKSB7Ci0gICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJWOCRhcnJheVR5
cGUuaCIpOwotICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiJGFycmF5VHlwZS5oIik7CisgICAg
ICAgIGlmICgkYXJyYXlUeXBlIG5lICJTdHJpbmciKSB7CisgICAgICAgICAgICBBZGRUb0ltcGxJ
bmNsdWRlcygiVjgkYXJyYXlUeXBlLmgiKTsKKyAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVz
KCIkYXJyYXlUeXBlLmgiKTsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gInY4QXJyYXkoJHZh
bHVlKSI7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0T2JqLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAkocmV2aXNpb24gMTEyMDU0KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTk4NCw3ICs5ODQsNyBAQCB2b2lkIHNldEpTVGVzdE9ialNlcXVlbmNlQXR0
cihFeGVjU3RhdGUqCiB7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8
SlNUZXN0T2JqKj4odGhpc09iamVjdCk7CiAgICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0
PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwotICAgIGltcGwtPnNldFNlcXVlbmNlQXR0
cih0b05hdGl2ZUFycmF5KGV4ZWMsIHZhbHVlKSk7CisgICAgaW1wbC0+c2V0U2VxdWVuY2VBdHRy
KHRvTmF0aXZlQXJyYXk8U2NyaXB0UHJvZmlsZT4oZXhlYywgdmFsdWUpKTsKIH0KIAogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhU
ZXN0T2JqLmNwcAkocmV2aXNpb24gMTEyMDU0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMSw3ICsy
MzEsNyBAQCBzdGF0aWMgdm9pZCBzZXF1ZW5jZUF0dHJBdHRyU2V0dGVyKHY4OjpMCiB7CiAgICAg
SU5DX1NUQVRTKCJET00uVGVzdE9iai5zZXF1ZW5jZUF0dHIuX3NldCIpOwogICAgIFRlc3RPYmoq
IGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgVmVjdG9yPFNj
cmlwdFByb2ZpbGU+IHYgPSB0b05hdGl2ZUFycmF5KHZhbHVlKTsKKyAgICBWZWN0b3I8U2NyaXB0
UHJvZmlsZT4gdiA9IHRvTmF0aXZlQXJyYXk8U2NyaXB0UHJvZmlsZT4odmFsdWUpOwogICAgIGlt
cC0+c2V0U2VxdWVuY2VBdHRyKHYpOwogICAgIHJldHVybjsKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5oCShyZXZpc2lvbiAxMTIwNTQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMjg2LDE3ICsy
ODYsMjggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICByZXR1cm4gdjhFeHRlcm5hbFN0
cmluZyhzdHJpbmcpOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhYmxlPgot
ICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2OEFycmF5KGNvbnN0IEl0ZXJhYmxlJiBpdGVyYXRv
cikKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2
OEFycmF5KGNvbnN0IFZlY3RvcjxUPiYgaXRlcmF0b3IpCiAgICAgewogICAgICAgICB2ODo6TG9j
YWw8djg6OkFycmF5PiByZXN1bHQgPSB2ODo6QXJyYXk6Ok5ldyhpdGVyYXRvci5zaXplKCkpOwog
ICAgICAgICBpbnQgaW5kZXggPSAwOwotICAgICAgICB0eXBlbmFtZSBJdGVyYWJsZTo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gaXRlcmF0b3IuZW5kKCk7Ci0gICAgICAgIGZvciAodHlwZW5hbWUgSXRl
cmFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBpdGVyYXRvci5iZWdpbigpOyBpdGVyICE9IGVu
ZDsgKytpdGVyKQorICAgICAgICB0eXBlbmFtZSBWZWN0b3I8VD46OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IGl0ZXJhdG9yLmVuZCgpOworICAgICAgICBmb3IgKHR5cGVuYW1lIFZlY3RvcjxUPjo6Y29u
c3RfaXRlcmF0b3IgaXRlciA9IGl0ZXJhdG9yLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIp
CiAgICAgICAgICAgICByZXN1bHQtPlNldCh2ODo6SW50ZWdlcjo6TmV3KGluZGV4KyspLCB0b1Y4
KFdURjo6Z2V0UHRyKCppdGVyKSkpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAor
ICAgIHRlbXBsYXRlPD4KKyAgICBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4QXJyYXko
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGl0ZXJhdG9yKQorICAgIHsKKyAgICAgICAgdjg6OkxvY2Fs
PHY4OjpBcnJheT4gYXJyYXkgPSB2ODo6QXJyYXk6Ok5ldyhpdGVyYXRvci5zaXplKCkpOworICAg
ICAgICBWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaXRlcmF0b3IuZW5kKCk7
CisgICAgICAgIGludCBpbmRleCA9IDA7CisgICAgICAgIGZvciAoVmVjdG9yPFN0cmluZz46OmNv
bnN0X2l0ZXJhdG9yIGl0ZXIgPSBpdGVyYXRvci5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVy
KQorICAgICAgICAgICAgYXJyYXktPlNldCh2ODo6SW50ZWdlcjo6TmV3KGluZGV4KyspLCB2OFN0
cmluZygqaXRlcikpOworICAgICAgICByZXR1cm4gYXJyYXk7CisgICAgfQorCiAgICAgdGVtcGxh
dGUgPGNsYXNzIFQ+CiAgICAgVmVjdG9yPFQ+IHRvTmF0aXZlQXJyYXkodjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHZhbHVlKQogICAgIHsKQEAgLTMwOSw4ICszMjAsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIHNpemVfdCBsZW5ndGggPSBhcnJheS0+TGVuZ3RoKCk7CiAKICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICAgICAgU3RyaW5n
IGluZGV4ZWRWYWx1ZSA9IHY4U3RyaW5nVG9XZWJDb3JlU3RyaW5nKGFycmF5LT5HZXQoaSkpOwot
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChpbmRleGVkVmFsdWUpOworICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZCh2OFZhbHVlVG9XZWJDb3JlU3RyaW5nKGFycmF5LT5HZXQoaSkpKTsKICAgICAg
ICAgfQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL0ludGVybmFscy5pZGwJKHJldmlzaW9uIDExMjA1NCkKKysrIFNvdXJjZS9XZWJDb3JlL3Rl
c3RpbmcvSW50ZXJuYWxzLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDcgKzEwMSw3IEBAIG1v
ZHVsZSB3aW5kb3cgewogICAgICAgICBib29sZWFuIHNob3VsZERpc3BsYXlUcmFja0tpbmQoaW4g
RG9jdW1lbnQgZG9jdW1lbnQsIGluIERPTVN0cmluZyB0cmFja0tpbmQpIHJhaXNlcyAoRE9NRXhj
ZXB0aW9uKTsKICNlbmRpZgogCi0gICAgICAgIGF0dHJpYnV0ZSBbQ3VzdG9tXSBBcnJheSB1c2Vy
UHJlZmVycmVkTGFuZ3VhZ2VzOworICAgICAgICBhdHRyaWJ1dGUgc2VxdWVuY2U8U3RyaW5nPiB1
c2VyUHJlZmVycmVkTGFuZ3VhZ2VzOwogCiAgICAgICAgIHVuc2lnbmVkIGxvbmcgd2hlZWxFdmVu
dEhhbmRsZXJDb3VudChpbiBEb2N1bWVudCBkb2N1bWVudCkgcmFpc2VzIChET01FeGNlcHRpb24p
OwogICAgICAgICB1bnNpZ25lZCBsb25nIHRvdWNoRXZlbnRIYW5kbGVyQ291bnQoaW4gRG9jdW1l
bnQgZG9jdW1lbnQpIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvanMvSlNJbnRlcm5hbHNDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvanMvSlNJbnRlcm5hbHNDdXN0b20uY3BwCShyZXZpc2lvbiAxMTIwNTQp
CisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL2pzL0pTSW50ZXJuYWxzQ3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw2NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkpTSW50ZXJuYWxzLmgiCi0KLSNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+
Ci0KLXVzaW5nIG5hbWVzcGFjZSBKU0M7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotSlNWYWx1
ZSBKU0ludGVybmFsczo6dXNlclByZWZlcnJlZExhbmd1YWdlcyhFeGVjU3RhdGUqIGV4ZWMpIGNv
bnN0Ci17Ci0gICAgSW50ZXJuYWxzKiBpbXAgPSBzdGF0aWNfY2FzdDxJbnRlcm5hbHMqPihpbXBs
KCkpOwotICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+IGxhbmd1YWdlcyA9IGltcC0+dXNlclByZWZl
cnJlZExhbmd1YWdlcygpOwotICAgIGlmIChsYW5ndWFnZXMuaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm4ganNOdWxsKCk7Ci0gICAgCi0gICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJyYXk7Ci0g
ICAgVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxhbmd1YWdlcy5lbmQoKTsK
LSAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGxhbmd1YWdlcy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGFycmF5LmFwcGVuZChqc1N0cmluZyhl
eGVjLCBzdHJpbmdUb1VTdHJpbmcoKml0KSkpOwotICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheShl
eGVjLCBnbG9iYWxPYmplY3QoKSwgYXJyYXkpOwotfQotCi12b2lkIEpTSW50ZXJuYWxzOjpzZXRV
c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKLXsK
LSAgICBpZiAoIWlzSlNBcnJheSh2YWx1ZSkpIHsKLSAgICAgICAgdGhyb3dFcnJvcihleGVjLCBj
cmVhdGVTeW50YXhFcnJvcihleGVjLCAic2V0VXNlclByZWZlcnJlZExhbmd1YWdlczogRXhwZWN0
ZWQgQXJyYXkiKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgVmVjdG9yPFN0
cmluZz4gbGFuZ3VhZ2VzOwotICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheSh2YWx1ZSk7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFycmF5LT5sZW5ndGgoKTsgKytpKSB7Ci0gICAg
ICAgIFN0cmluZyBsYW5ndWFnZSA9IHVzdHJpbmdUb1N0cmluZyhhcnJheS0+Z2V0SW5kZXgoaSku
dG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKLSAgICAgICAgbGFuZ3VhZ2VzLmFwcGVuZChs
YW5ndWFnZSk7Ci0gICAgfQotICAgIAotICAgIEludGVybmFscyogaW1wID0gc3RhdGljX2Nhc3Q8
SW50ZXJuYWxzKj4oaW1wbCgpKTsKLSAgICBpbXAtPnNldFVzZXJQcmVmZXJyZWRMYW5ndWFnZXMo
bGFuZ3VhZ2VzKTsKLX0KLSAgICAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvdjgvVjhJbnRlcm5hbHNDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvdjgvVjhJbnRlcm5hbHNDdXN0b20uY3BwCShyZXZpc2lv
biAxMTIwNTQpCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL3Y4L1Y4SW50ZXJuYWxzQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIlY4SW50ZXJuYWxzLmgiCi0KLSNpbmNsdWRlICJWOEJpbmRp
bmcuaCIKLSNpbmNsdWRlICJWOFByb3h5LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IFY4SW50ZXJuYWxzOjp1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzQWNj
ZXNzb3JHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3Nv
ckluZm8mIGluZm8pCi17Ci0gICAgSW50ZXJuYWxzKiBpbnRlcm5hbHMgPSBWOEludGVybmFsczo6
dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgY29uc3QgVmVjdG9yPFN0cmluZz4gbGFuZ3Vh
Z2VzID0gaW50ZXJuYWxzLT51c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCk7Ci0gICAgaWYgKGxhbmd1
YWdlcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB2ODo6TnVsbCgpOwotCi0gICAgdjg6Okxv
Y2FsPHY4OjpBcnJheT4gYXJyYXkgPSB2ODo6QXJyYXk6Ok5ldyhsYW5ndWFnZXMuc2l6ZSgpKTsK
LSAgICBWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGFuZ3VhZ2VzLmVuZCgp
OwotICAgIGludCBpbmRleCA9IDA7Ci0gICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRl
cmF0b3IgaXRlciA9IGxhbmd1YWdlcy5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQotICAg
ICAgICBhcnJheS0+U2V0KHY4OjpJbnRlZ2VyOjpOZXcoaW5kZXgrKyksIHY4U3RyaW5nKCppdGVy
KSk7Ci0gICAgcmV0dXJuIGFycmF5OwotfQotCi12b2lkIFY4SW50ZXJuYWxzOjp1c2VyUHJlZmVy
cmVkTGFuZ3VhZ2VzQWNjZXNzb3JTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4
OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQot
ewotICAgIGlmICghdmFsdWUtPklzQXJyYXkoKSkgewotICAgICAgICB0aHJvd0Vycm9yKCJzZXRV
c2VyUHJlZmVycmVkTGFuZ3VhZ2VzOiBFeHBlY3RlZCBBcnJheSIpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIAotICAgIFZlY3RvcjxTdHJpbmc+IGxhbmd1YWdlczsKLQotICAgIHY4OjpM
b2NhbDx2ODo6QXJyYXk+IGFycmF5ID0gdjg6OkxvY2FsPHY4OjpBcnJheT46OkNhc3QodmFsdWUp
OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXktPkxlbmd0aCgpOyArK2kpCi0gICAg
ICAgIGxhbmd1YWdlcy5hcHBlbmQodG9XZWJDb3JlU3RyaW5nKGFycmF5LT5HZXQoaSkpKTsKLSAg
ICAKLSAgICBJbnRlcm5hbHMqIGludGVybmFscyA9IFY4SW50ZXJuYWxzOjp0b05hdGl2ZShpbmZv
LkhvbGRlcigpKTsKLSAgICBpbnRlcm5hbHMtPnNldFVzZXJQcmVmZXJyZWRMYW5ndWFnZXMobGFu
Z3VhZ2VzKTsKLX0KLSAgICAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFRvb2xzL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMjM3NikK
KysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDEy
LTAzLTI4ICBWaW5lZXQgQ2hhdWRoYXJ5ICA8cmdmNzQ4QG1vdG9yb2xhLmNvbT4KKworICAgICAg
ICBSZW1vdmUgY3VzdG9tIGJpbmRpbmdzIGZvcm0gSW50ZXJuYWxzLmlkbCBvZiBhdHRyaWJ1dGUg
dHlwZSBBcnJheS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTgyMzE5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgUmVtb3ZlIEpTSW50ZXJuYWxzQ3VzdG9tLmNwcCBhbmQgVjhJbnRlcm5hbHNDdXN0b20uY3Bw
IGFzIG5vIGxvbmdlciByZXF1aXJlZC4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorCiAy
MDEyLTAzLTI4ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KIAogICAg
ICAgICBVbnJldmlld2VkLCB0cml2aWFsIHVwZGF0ZS13ZWJraXQtbGlicy1qaGJ1aWxkIHN5c3Rl
bSBjYWxsIGZpeC4KSW5kZXg6IFRvb2xzL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiAxMTIwNTQpCisrKyBUb29scy9HTlVtYWtlZmls
ZS5hbQkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNiBAQCBsaWJXZWJDb3JlSW50ZXJuYWxz
X2xhX1NPVVJDRVMgPSBcCiAJU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaCBcCiAJ
U291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmNwcCBcCiAJU291cmNlL1dl
YkNvcmUvdGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmggXAotCVNvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvanMvSlNJbnRlcm5hbHNDdXN0b20uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL2pz
L1dlYkNvcmVUZXN0U3VwcG9ydC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMvV2Vi
Q29yZVRlc3RTdXBwb3J0LmgKIAo=
</data>
<flag name="review"
          id="138458"
          type_id="1"
          status="-"
          setter="haraken"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134509</attachid>
            <date>2012-03-28 23:46:28 -0700</date>
            <delta_ts>2012-03-29 00:24:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wip_internals_002.diff</filename>
            <type>text/plain</type>
            <size>24645</size>
            <attacher name="Vineet Chaudhary (vineetc)">code.vineet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMjM3NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQwIEBACisyMDEyLTAzLTI4ICBWaW5lZXQg
Q2hhdWRoYXJ5ICA8cmdmNzQ4QG1vdG9yb2xhLmNvbT4KKworICAgICAgICBSZW1vdmUgY3VzdG9t
IGJpbmRpbmdzIGZvcm0gSW50ZXJuYWxzLmlkbCBvZiBhdHRyaWJ1dGUgdHlwZSBBcnJheS4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyMzE5CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIGN1c3Rv
bSBiaW5kaW5ncyBmb3IgQXJyYXkgdHlwZSBhbmQgcmVwbGFjZSBBcnJheSB0eXBlIHdpdGggc2Vx
dWVuY2U8U3RyaW5nPi4KKworICAgICAgICBObyBuZXcgdGVzdHMuIExheW91dFRlc3RzL2Zhc3Qv
aGFybmVzcy91c2VyLXByZWZlcnJlZC1sYW5ndWFnZS5odG1sIHNob3VsZCBwYXNzCisgICAgICAg
IGV2ZW4gYWZ0ZXIgdGhlc2UgY2hhbmdlcy4KKworICAgICAgICAqIFRhcmdldC5wcmk6IFJlbW92
ZSBKU0ludGVybmFsc0N1c3RvbS5jcHAgYW5kIFY4SW50ZXJuYWxzQ3VzdG9tLmNwcC4KKyAgICAg
ICAgKiBXZWJDb3JlLmd5cGk6IFJlbW92ZSBKU0ludGVybmFsc0N1c3RvbS5jcHAgYW5kIFY4SW50
ZXJuYWxzQ3VzdG9tLmNwcC4KKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlVGVzdFN1
cHBvcnQudmNwcm9qOiBSZW1vdmUgSlNJbnRlcm5hbHNDdXN0b20uY3BwIGFuZCBWOEludGVybmFs
c0N1c3RvbS5jcHAuCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OiBSZW1vdmUgSlNJbnRlcm5hbHNDdXN0b20uY3BwIGFuZCBWOEludGVybmFsc0N1c3RvbS5jcHAu
CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmg6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OmpzQXJyYXkpOiBBZGRlZCBuZXcgc3BlY2lhbGl6ZSBmdW5j
dGlvbiB0ZW1wbGF0ZSBmb3IgU3RyaW5ncy4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbTogCisgICAgICAgIChKU1ZhbHVlVG9OYXRpdmUpOiBBZGQganNBcnJh
eTxTdHJpbmc+KCkgdG8gZGVkdWNlIHJldHVybiB0eXBlLgorICAgICAgICAoTmF0aXZlVG9KU1Zh
bHVlKTogQWRkZWQgY2hlY2sgZm9yIHR5cGUgU3RyaW5nLgorICAgICAgICAqIGJpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtOgorICAgICAgICAoSlNWYWx1ZVRvTmF0aXZlKTogQWRk
IHY4QXJyYXk8U3RyaW5nPigpIHRvIGRlZHVjZSByZXR1cm4gdHlwZS4KKyAgICAgICAgKE5hdGl2
ZVRvSlNWYWx1ZSk6IEFkZGVkIGNoZWNrIGZvciB0eXBlIFN0cmluZy4KKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcDogTW9kaWZpZWQgcmVzdWx0cyBmcm9t
IHJ1bi1iaW5kaW5nLXRlc3RzCisgICAgICAgIChXZWJDb3JlOjpzZXRKU1Rlc3RPYmpTZXF1ZW5j
ZUF0dHIpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3Bw
OiBNb2RpZmllZCByZXN1bHRzIGZyb20gcnVuLWJpbmRpbmctdGVzdHMKKyAgICAgICAgKFdlYkNv
cmU6OlRlc3RPYmpJbnRlcm5hbDo6c2VxdWVuY2VBdHRyQXR0clNldHRlcik6CisgICAgICAgICog
YmluZGluZ3MvdjgvVjhCaW5kaW5nLmg6IEFkZGVkIG5ldyBzcGVjaWFsaXplIGZ1bmN0aW9uIHRl
bXBsYXRlIGZvciBTdHJpbmdzLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
Ojp2OEFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OnRvTmF0aXZlQXJyYXkpOgorICAgICAgICAq
IHRlc3RpbmcvSW50ZXJuYWxzLmlkbDogUmVwbGFjZSBBcnJheSB0eXBlIHdpdGggc2VxdWVuY2U8
U3RyaW5nPgorICAgICAgICAqIHRlc3RpbmcvanMvSlNJbnRlcm5hbHNDdXN0b20uY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIHRlc3RpbmcvdjgvVjhJbnRlcm5hbHNDdXN0b20uY3BwOiBSZW1vdmVk
LgorCiAyMDEyLTAzLTI3ICBKYW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgW2Nocm9taXVtXSBUcmFuc2ZlciB3aGVlbCBmbGluZyB2aWEgV2ViQ29tcG9zaXRv
cklucHV0SGFuZGxlckNsaWVudApJbmRleDogU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCShyZXZpc2lvbiAxMTIwNTQpCisr
KyBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCSh3b3JraW5nIGNvcHkpCkBAIC0yMzcsNyArMjM3
LDYgQEAgdjggewogICAgICAgICBiaW5kaW5ncy92OC9jdXN0b20vVjhDb25zb2xlQ3VzdG9tLmNw
cCBcCiAgICAgICAgIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFNRTFRyYW5zYWN0aW9uU3luY0N1c3Rv
bS5jcHAgXAogICAgICAgICBiaW5kaW5ncy92OC9WOFdvcmtlckNvbnRleHRFcnJvckhhbmRsZXIu
Y3BwIFwKLSAgICAgICAgdGVzdGluZy92OC9WOEludGVybmFsc0N1c3RvbS5jcHAgXAogICAgICAg
ICB0ZXN0aW5nL3Y4L1dlYkNvcmVUZXN0U3VwcG9ydC5jcHAKIH0gZWxzZSB7CiAgICAgU09VUkNF
UyArPSBcCkBAIC0zOTgsNyArMzk3LDYgQEAgdjggewogICAgICAgICBicmlkZ2UvcnVudGltZV9t
ZXRob2QuY3BwIFwKICAgICAgICAgYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmNwcCBcCiAgICAgICAg
IGJyaWRnZS9ydW50aW1lX3Jvb3QuY3BwIFwKLSAgICAgICAgdGVzdGluZy9qcy9KU0ludGVybmFs
c0N1c3RvbS5jcHAgXAogICAgICAgICB0ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5jcHAK
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gMTEyMDU0KQorKysgU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC02MTQzLDEwICs2MTQzLDggQEAK
ICAgICAgICAgICAndGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmlkbCcsCiAgICAgICAgIF0sCiAg
ICAgICAgICd3ZWJjb3JlX3Rlc3Rfc3VwcG9ydF9maWxlcyc6IFsKLSAgICAgICAgICAgICd0ZXN0
aW5nL3Y4L1Y4SW50ZXJuYWxzQ3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAndGVzdGluZy92OC9X
ZWJDb3JlVGVzdFN1cHBvcnQuY3BwJywKICAgICAgICAgICAgICd0ZXN0aW5nL3Y4L1dlYkNvcmVU
ZXN0U3VwcG9ydC5oJywKLSAgICAgICAgICAgICd0ZXN0aW5nL2pzL0pTSW50ZXJuYWxzQ3VzdG9t
LmNwcCcsCiAgICAgICAgICAgICAndGVzdGluZy9qcy9XZWJDb3JlVGVzdFN1cHBvcnQuY3BwJywK
ICAgICAgICAgICAgICd0ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5oJywKICAgICAgICAg
ICAgICd0ZXN0aW5nL0ludGVybmFscy5jcHAnLApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZVRlc3RTdXBwb3J0LnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlVGVzdFN1cHBvcnQudmNwcm9qCShyZXZpc2lv
biAxMTIwNTQpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlVGVzdFN1
cHBvcnQudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02OTEsNzQgKzY5MSw2IEBACiAJCQkJUmVs
YXRpdmVQYXRoPSIuLlx0ZXN0aW5nXGpzXFdlYkNvcmVUZXN0U3VwcG9ydC5oIgogCQkJCT4KIAkJ
CTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlx0ZXN0aW5nXGpzXEpTSW50
ZXJuYWxzQ3VzdG9tLmNwcCIKLQkJCQk+Ci0JCQkJPEZpbGVDb25maWd1cmF0aW9uCi0JCQkJCU5h
bWU9IkRlYnVnfFdpbjMyIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29t
cGlsZXJUb29sIgotCQkJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCi0JCQkJCQlEaXNhYmxl
U3BlY2lmaWNXYXJuaW5ncz0iNDA2NTs0MjczOzQ1NjU7NDcwMTs0NzAyIgotCQkJCQkJRm9yY2Vk
SW5jbHVkZUZpbGVzPSIkKE5PSU5IRVJJVCkiCi0JCQkJCS8+Ci0JCQkJPC9GaWxlQ29uZmlndXJh
dGlvbj4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIK
LQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQkJ
CVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgotCQkJCQkJRGlzYWJsZVNwZWNpZmljV2FybmluZ3M9
IjQwNjU7NDI3Mzs0NTY1OzQ3MDE7NDcwMiIKLQkJCQkJCUZvcmNlZEluY2x1ZGVGaWxlcz0iJChO
T0lOSEVSSVQpIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVD
b25maWd1cmF0aW9uCi0JCQkJCU5hbWU9IkRlYnVnX0NhaXJvX0NGTGl0ZXxXaW4zMiIKLQkJCQkJ
PgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKLQkJCQkJCVVzZVBy
ZWNvbXBpbGVkSGVhZGVyPSIwIgotCQkJCQkJRGlzYWJsZVNwZWNpZmljV2FybmluZ3M9IjQwNjU7
NDI3Mzs0NTY1OzQ3MDE7NDcwMiIKLQkJCQkJCUZvcmNlZEluY2x1ZGVGaWxlcz0iJChOT0lOSEVS
SVQpIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Ci0JCQkJPEZpbGVDb25maWd1
cmF0aW9uCi0JCQkJCU5hbWU9IlJlbGVhc2VfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgotCQkJCQk+Ci0J
CQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkJVXNlUHJlY29t
cGlsZWRIZWFkZXI9IjAiCi0JCQkJCQlEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz0iNDA2NTs0Mjcz
OzQ1NjU7NDcwMTs0NzAyIgotCQkJCQkJRm9yY2VkSW5jbHVkZUZpbGVzPSIkKE5PSU5IRVJJVCki
Ci0JCQkJCS8+Ci0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRp
b24KLQkJCQkJTmFtZT0iRGVidWdfQWxsfFdpbjMyIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJ
CQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAi
Ci0JCQkJCQlEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz0iNDA2NTs0MjczOzQ1NjU7NDcwMTs0NzAy
IgotCQkJCQkJRm9yY2VkSW5jbHVkZUZpbGVzPSIkKE5PSU5IRVJJVCkiCi0JCQkJCS8+Ci0JCQkJ
PC9GaWxlQ29uZmlndXJhdGlvbj4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFtZT0i
UHJvZHVjdGlvbnxXaW4zMiIKLQkJCQkJPgotCQkJCQk8VG9vbAotCQkJCQkJTmFtZT0iVkNDTENv
bXBpbGVyVG9vbCIKLQkJCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIgotCQkJCQkJRGlzYWJs
ZVNwZWNpZmljV2FybmluZ3M9IjQwNjU7NDI3Mzs0NTY1OzQ3MDE7NDcwMiIKLQkJCQkJCUZvcmNl
ZEluY2x1ZGVGaWxlcz0iJChOT0lOSEVSSVQpIgotCQkJCQkvPgotCQkJCTwvRmlsZUNvbmZpZ3Vy
YXRpb24+Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cdGVzdGlu
Z1xqc1xKU0ludGVybmFsc0N1c3RvbS5oIgotCQkJCT4KLQkJCTwvRmlsZT4KIAkJPC9GaWx0ZXI+
CiAJCTxGaWxlCiAJCQlSZWxhdGl2ZVBhdGg9Ii4uXGNvbmZpZy5oIgpJbmRleDogU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MTEyMDU0KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNyArMTA5LDYgQEAKIAkJMDcwOUZDNEUxMDI1REVF
MzAwNTlDREJBIC8qIEFjY2Vzc2liaWxpdHlTbGlkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MDlGQzREMTAyNURFRTMwMDU5Q0RCQSAvKiBBY2Nl
c3NpYmlsaXR5U2xpZGVyLmggKi87IH07CiAJCTA3MjBCMEEwMTREMzMyMzUwMDY0Mjk1NSAvKiBH
ZW5lcmljRXZlbnRRdWV1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwNzIwQjA5RTE0RDMzMjM1MDA2NDI5NTUgLyogR2VuZXJpY0V2ZW50UXVldWUu
Y3BwICovOyB9OwogCQkwNzIwQjBBMTE0RDMzMjM1MDA2NDI5NTUgLyogR2VuZXJpY0V2ZW50UXVl
dWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MjBC
MDlGMTREMzMyMzUwMDY0Mjk1NSAvKiBHZW5lcmljRXZlbnRRdWV1ZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTA3MjMwQ0JDMTRDMTBFRDkwMEY2
QjcwMiAvKiBKU0ludGVybmFsc0N1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwNzIzMENCQjE0QzEwRUQ5MDBGNkI3MDIgLyogSlNJbnRlcm5h
bHNDdXN0b20uY3BwICovOyB9OwogCQkwNzJDOEIxMTEzMUM1MTg2MDBBNEZDRTkgLyogTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDA3NkYwRDA5MTJCODE5MjcwMEMyNkFBNCAvKiBNZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb24uY3BwICovOyB9OwogCQkwNzM1RUU2QTBGNDBDNUU0MDA0QTI2
MDQgLyogTWVkaWFQbGF5ZXJQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMDczNUVFNjkwRjQwQzVFNDAwNEEyNjA0IC8qIE1lZGlhUGxheWVyUHJv
eHkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
NzUzODYwMjE0NDg5RTk4MDBCNzg0NTIgLyogQ2FjaGVkVGV4dFRyYWNrLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3NTM4NjAwMTQ0ODlFOTgwMEI3
ODQ1MiAvKiBDYWNoZWRUZXh0VHJhY2suY3BwICovOyB9OwpAQCAtNjg5MCw3ICs2ODg5LDYgQEAK
IAkJMDcwREQ4RjUwRjAxODY4MDAwNzI3REVCIC8qIG1lZGlhQ29udHJvbHMuY3NzICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgcGF0aCA9IG1lZGlhQ29udHJvbHMuY3NzOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwNzIwQjA5RTE0RDMzMjM1MDA2NDI5NTUgLyogR2VuZXJpY0V2ZW50UXVldWUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR2VuZXJpY0V2ZW50UXVldWUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzIwQjA5RjE0RDMzMjM1MDA2NDI5
NTUgLyogR2VuZXJpY0V2ZW50UXVldWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gR2VuZXJpY0V2ZW50UXVldWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDcy
MzBDQkIxNEMxMEVEOTAwRjZCNzAyIC8qIEpTSW50ZXJuYWxzQ3VzdG9tLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSW50ZXJuYWxzQ3VzdG9tLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDczNUVFNjkwRjQwQzVFNDAwNEEyNjA0IC8qIE1lZGlh
UGxheWVyUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFQbGF5
ZXJQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzUzODYwMDE0NDg5RTk4
MDBCNzg0NTIgLyogQ2FjaGVkVGV4dFRyYWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IENhY2hlZFRleHRUcmFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTA3NTM4NjAxMTQ0ODlFOTgwMEI3ODQ1MiAvKiBDYWNoZWRUZXh0VHJhY2suaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FjaGVkVGV4dFRyYWNrLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDUzMyw3ICsxNDUzMSw2IEBACiAJCTQxODE1QzFCMTM4
MzE5NjMwMDU3QUFBNCAvKiBqcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCi0JCQkJMDcyMzBDQkIxNEMxMEVEOTAwRjZCNzAyIC8qIEpTSW50ZXJuYWxzQ3VzdG9t
LmNwcCAqLywKIAkJCQk0MTgxNUMxQzEzODMxOTgzMDA1N0FBQTQgLyogV2ViQ29yZVRlc3RTdXBw
b3J0LmNwcCAqLywKIAkJCQk0MTgxNUMxRDEzODMxOTgzMDA1N0FBQTQgLyogV2ViQ29yZVRlc3RT
dXBwb3J0LmggKi8sCiAJCQkpOwpAQCAtMjQ5ODYsNyArMjQ5ODMsNiBAQAogCQkJCTQxN0RBNkQ5
MTM3MzRFNkUwMDdDNTdGQiAvKiBJbnRlcm5hbHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdC
RjdFREYxNEM5MTc1QTAwMTQ0ODlEIC8qIEludGVybmFsU2V0dGluZ3MuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNDE3REE3MUQxMzczNURGQTAwN0M1N0ZCIC8qIEpTSW50ZXJuYWxzLmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCTA3MjMwQ0JDMTRDMTBFRDkwMEY2QjcwMiAvKiBKU0ludGVybmFsc0N1
c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzQwQjVBNzE0QzkzNUFGMDBBNzdGQTQgLyog
SlNJbnRlcm5hbFNldHRpbmdzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxODE1QzFFMTM4MzE5
ODMwMDU3QUFBNCAvKiBXZWJDb3JlVGVzdFN1cHBvcnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHJldmlz
aW9uIDExMjA1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNzksMTggKzI3OSwzMCBAQCBlbnVtIFBhcmFtZXRlckRlZmF1
bHRQb2xpY3kgewogICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHB0ci5n
ZXQoKSk7CiAgICAgfQogCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIEl0ZXJhYmxlPgotICAgIEpT
Qzo6SlNWYWx1ZSBqc0FycmF5KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBjb25zdCBJdGVyYWJsZSYgaXRlcmF0b3IpCisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CisgICAgSlNDOjpKU1ZhbHVlIGpzQXJyYXkoSlNDOjpFeGVjU3RhdGUqIGV4
ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFZlY3RvcjxUPiYgaXRl
cmF0b3IpCiAgICAgewogICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7Ci0g
ICAgICAgIHR5cGVuYW1lIEl0ZXJhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSBpdGVyYXRvci5l
bmQoKTsKKyAgICAgICAgdHlwZW5hbWUgVmVjdG9yPFQ+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBp
dGVyYXRvci5lbmQoKTsKIAotICAgICAgICBmb3IgKHR5cGVuYW1lIEl0ZXJhYmxlOjpjb25zdF9p
dGVyYXRvciBpdGVyID0gaXRlcmF0b3IuYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKKyAg
ICAgICAgZm9yICh0eXBlbmFtZSBWZWN0b3I8VD46OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBpdGVy
YXRvci5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQogICAgICAgICAgICAgbGlzdC5hcHBl
bmQodG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIFdURjo6Z2V0UHRyKCppdGVyKSkpOwogCiAgICAg
ICAgIHJldHVybiBKU0M6OmNvbnN0cnVjdEFycmF5KGV4ZWMsIGdsb2JhbE9iamVjdCwgbGlzdCk7
CiAgICAgfQogCisgICAgdGVtcGxhdGU8PgorICAgIGlubGluZSBKU0M6OkpTVmFsdWUganNBcnJh
eShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGl0ZXJhdG9yKQorICAgIHsKKyAgICAgICAgSlNDOjpNYXJr
ZWRBcmd1bWVudEJ1ZmZlciBhcnJheTsKKyAgICAgICAgVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IGl0ZXJhdG9yLmVuZCgpOworCisgICAgICAgIGZvciAoVmVjdG9yPFN0cmlu
Zz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaXRlcmF0b3IuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KQorICAgICAgICAgICAgYXJyYXkuYXBwZW5kKGpzU3RyaW5nKGV4ZWMsIHN0cmluZ1RvVVN0cmlu
ZygqaXQpKSk7CisKKyAgICAgICAgcmV0dXJuIEpTQzo6Y29uc3RydWN0QXJyYXkoZXhlYywgZ2xv
YmFsT2JqZWN0LCBhcnJheSk7CisgICAgfQorCiAgICAgdGVtcGxhdGUgPGNsYXNzIFQ+CiAgICAg
VmVjdG9yPFQ+IHRvTmF0aXZlQXJyYXkoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSkKICAgICB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24gMTEyMDU0KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0JKHdvcmtpbmcgY29weSkK
QEAgLTI5MzcsOCArMjkzNyw5IEBAIHN1YiBKU1ZhbHVlVG9OYXRpdmUKICAgICBBZGRUb0ltcGxJ
bmNsdWRlcygiSlNDdXN0b21Wb2lkQ2FsbGJhY2suaCIsICRjb25kaXRpb25hbCkgaWYgJHR5cGUg
ZXEgIlZvaWRDYWxsYmFjayI7CiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkV2ZW50LmgiLCAkY29u
ZGl0aW9uYWwpIGlmICR0eXBlIGVxICJFdmVudCI7CiAKLSAgICBpZiAoJGNvZGVHZW5lcmF0b3It
PkdldEFycmF5VHlwZSgkdHlwZSkpIHsKLSAgICAgICAgcmV0dXJuICJ0b05hdGl2ZUFycmF5KGV4
ZWMsICR2YWx1ZSkiOworICAgIG15ICRhcnJheVR5cGUgPSAkY29kZUdlbmVyYXRvci0+R2V0QXJy
YXlUeXBlKCR0eXBlKTsKKyAgICBpZiAoJGFycmF5VHlwZSkgeworICAgICAgICByZXR1cm4gInRv
TmF0aXZlQXJyYXk8JGFycmF5VHlwZT4oZXhlYywgJHZhbHVlKSI7CiAgICAgfQogCiAgICAgIyBE
ZWZhdWx0LCBhc3N1bWUgYXV0b2dlbmVyYXRlZCB0eXBlIGNvbnZlcnNpb24gcm91dGluZXMKQEAg
LTMwMDIsOSArMzAwMywxMSBAQCBzdWIgTmF0aXZlVG9KU1ZhbHVlCiAKICAgICBteSAkYXJyYXlU
eXBlID0gJGNvZGVHZW5lcmF0b3ItPkdldEFycmF5VHlwZSgkdHlwZSk7CiAgICAgaWYgKCRhcnJh
eVR5cGUpIHsKKyAgICAgICAgaWYgKCRhcnJheVR5cGUgbmUgIlN0cmluZyIpIHsKKyAgICAgICAg
ICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJKUyRhcnJheVR5cGUuaCIsICRjb25kaXRpb25hbCk7Cisg
ICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiJGFycmF5VHlwZS5oIiwgJGNvbmRpdGlvbmFs
KTsKKyAgICAgICAgfQogICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiPHJ1bnRpbWUvSlNBcnJh
eS5oPiIsICRjb25kaXRpb25hbCk7Ci0gICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJKUyRhcnJh
eVR5cGUuaCIsICRjb25kaXRpb25hbCk7Ci0gICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCIkYXJy
YXlUeXBlLmgiLCAkY29uZGl0aW9uYWwpOwogICAgICAgICByZXR1cm4gImpzQXJyYXkoZXhlYywg
JHRoaXNWYWx1ZS0+Z2xvYmFsT2JqZWN0KCksICR2YWx1ZSkiOwogICAgIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0J
KHJldmlzaW9uIDExMjA1NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29k
ZUdlbmVyYXRvclY4LnBtCSh3b3JraW5nIGNvcHkpCkBAIC0zNTU2LDggKzM1NTYsOSBAQCBzdWIg
SlNWYWx1ZVRvTmF0aXZlCiAgICAgICAgIHJldHVybiAiVjhET01XcmFwcGVyOjpnZXRYUGF0aE5T
UmVzb2x2ZXIoJHZhbHVlKSI7CiAgICAgfQogCi0gICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5HZXRB
cnJheVR5cGUoJHR5cGUpKSB7Ci0gICAgICAgIHJldHVybiAidG9OYXRpdmVBcnJheSgkdmFsdWUp
IjsKKyAgICBteSAkYXJyYXlUeXBlID0gJGNvZGVHZW5lcmF0b3ItPkdldEFycmF5VHlwZSgkdHlw
ZSk7CisgICAgaWYgKCRhcnJheVR5cGUpIHsKKyAgICAgICAgcmV0dXJuICJ0b05hdGl2ZUFycmF5
PCRhcnJheVR5cGU+KCR2YWx1ZSkiOwogICAgIH0KIAogICAgIEFkZEluY2x1ZGVzRm9yVHlwZSgk
dHlwZSk7CkBAIC0zNzc1LDggKzM3NzYsMTAgQEAgc3ViIE5hdGl2ZVRvSlNWYWx1ZQogCiAgICAg
bXkgJGFycmF5VHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5HZXRBcnJheVR5cGUoJHR5cGUpOwogICAg
IGlmICgkYXJyYXlUeXBlKSB7Ci0gICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJWOCRhcnJheVR5
cGUuaCIpOwotICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiJGFycmF5VHlwZS5oIik7CisgICAg
ICAgIGlmICgkYXJyYXlUeXBlIG5lICJTdHJpbmciKSB7CisgICAgICAgICAgICBBZGRUb0ltcGxJ
bmNsdWRlcygiVjgkYXJyYXlUeXBlLmgiKTsKKyAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVz
KCIkYXJyYXlUeXBlLmgiKTsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gInY4QXJyYXkoJHZh
bHVlKSI7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0T2JqLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAkocmV2aXNpb24gMTEyMDU0KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTk4NCw3ICs5ODQsNyBAQCB2b2lkIHNldEpTVGVzdE9ialNlcXVlbmNlQXR0
cihFeGVjU3RhdGUqCiB7CiAgICAgSlNUZXN0T2JqKiBjYXN0ZWRUaGlzID0gc3RhdGljX2Nhc3Q8
SlNUZXN0T2JqKj4odGhpc09iamVjdCk7CiAgICAgVGVzdE9iaiogaW1wbCA9IHN0YXRpY19jYXN0
PFRlc3RPYmoqPihjYXN0ZWRUaGlzLT5pbXBsKCkpOwotICAgIGltcGwtPnNldFNlcXVlbmNlQXR0
cih0b05hdGl2ZUFycmF5KGV4ZWMsIHZhbHVlKSk7CisgICAgaW1wbC0+c2V0U2VxdWVuY2VBdHRy
KHRvTmF0aXZlQXJyYXk8U2NyaXB0UHJvZmlsZT4oZXhlYywgdmFsdWUpKTsKIH0KIAogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhU
ZXN0T2JqLmNwcAkocmV2aXNpb24gMTEyMDU0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMSw3ICsy
MzEsNyBAQCBzdGF0aWMgdm9pZCBzZXF1ZW5jZUF0dHJBdHRyU2V0dGVyKHY4OjpMCiB7CiAgICAg
SU5DX1NUQVRTKCJET00uVGVzdE9iai5zZXF1ZW5jZUF0dHIuX3NldCIpOwogICAgIFRlc3RPYmoq
IGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgVmVjdG9yPFNj
cmlwdFByb2ZpbGU+IHYgPSB0b05hdGl2ZUFycmF5KHZhbHVlKTsKKyAgICBWZWN0b3I8U2NyaXB0
UHJvZmlsZT4gdiA9IHRvTmF0aXZlQXJyYXk8U2NyaXB0UHJvZmlsZT4odmFsdWUpOwogICAgIGlt
cC0+c2V0U2VxdWVuY2VBdHRyKHYpOwogICAgIHJldHVybjsKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5oCShyZXZpc2lvbiAxMTIwNTQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOEJpbmRpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMjg2LDE3ICsy
ODYsMjggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICByZXR1cm4gdjhFeHRlcm5hbFN0
cmluZyhzdHJpbmcpOwogICAgIH0KIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhYmxlPgot
ICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2OEFycmF5KGNvbnN0IEl0ZXJhYmxlJiBpdGVyYXRv
cikKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2
OEFycmF5KGNvbnN0IFZlY3RvcjxUPiYgaXRlcmF0b3IpCiAgICAgewogICAgICAgICB2ODo6TG9j
YWw8djg6OkFycmF5PiByZXN1bHQgPSB2ODo6QXJyYXk6Ok5ldyhpdGVyYXRvci5zaXplKCkpOwog
ICAgICAgICBpbnQgaW5kZXggPSAwOwotICAgICAgICB0eXBlbmFtZSBJdGVyYWJsZTo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gaXRlcmF0b3IuZW5kKCk7Ci0gICAgICAgIGZvciAodHlwZW5hbWUgSXRl
cmFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBpdGVyYXRvci5iZWdpbigpOyBpdGVyICE9IGVu
ZDsgKytpdGVyKQorICAgICAgICB0eXBlbmFtZSBWZWN0b3I8VD46OmNvbnN0X2l0ZXJhdG9yIGVu
ZCA9IGl0ZXJhdG9yLmVuZCgpOworICAgICAgICBmb3IgKHR5cGVuYW1lIFZlY3RvcjxUPjo6Y29u
c3RfaXRlcmF0b3IgaXRlciA9IGl0ZXJhdG9yLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIp
CiAgICAgICAgICAgICByZXN1bHQtPlNldCh2ODo6SW50ZWdlcjo6TmV3KGluZGV4KyspLCB0b1Y4
KFdURjo6Z2V0UHRyKCppdGVyKSkpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAor
ICAgIHRlbXBsYXRlPD4KKyAgICBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4QXJyYXko
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGl0ZXJhdG9yKQorICAgIHsKKyAgICAgICAgdjg6OkxvY2Fs
PHY4OjpBcnJheT4gYXJyYXkgPSB2ODo6QXJyYXk6Ok5ldyhpdGVyYXRvci5zaXplKCkpOworICAg
ICAgICBWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaXRlcmF0b3IuZW5kKCk7
CisgICAgICAgIGludCBpbmRleCA9IDA7CisgICAgICAgIGZvciAoVmVjdG9yPFN0cmluZz46OmNv
bnN0X2l0ZXJhdG9yIGl0ZXIgPSBpdGVyYXRvci5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVy
KQorICAgICAgICAgICAgYXJyYXktPlNldCh2ODo6SW50ZWdlcjo6TmV3KGluZGV4KyspLCB2OFN0
cmluZygqaXRlcikpOworICAgICAgICByZXR1cm4gYXJyYXk7CisgICAgfQorCiAgICAgdGVtcGxh
dGUgPGNsYXNzIFQ+CiAgICAgVmVjdG9yPFQ+IHRvTmF0aXZlQXJyYXkodjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHZhbHVlKQogICAgIHsKQEAgLTMwOSw4ICszMjAsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIHNpemVfdCBsZW5ndGggPSBhcnJheS0+TGVuZ3RoKCk7CiAKICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICAgICAgU3RyaW5n
IGluZGV4ZWRWYWx1ZSA9IHY4U3RyaW5nVG9XZWJDb3JlU3RyaW5nKGFycmF5LT5HZXQoaSkpOwot
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChpbmRleGVkVmFsdWUpOworICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZCh2OFZhbHVlVG9XZWJDb3JlU3RyaW5nKGFycmF5LT5HZXQoaSkpKTsKICAgICAg
ICAgfQogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL0ludGVybmFscy5pZGwJKHJldmlzaW9uIDExMjA1NCkKKysrIFNvdXJjZS9XZWJDb3JlL3Rl
c3RpbmcvSW50ZXJuYWxzLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDcgKzEwMSw3IEBAIG1v
ZHVsZSB3aW5kb3cgewogICAgICAgICBib29sZWFuIHNob3VsZERpc3BsYXlUcmFja0tpbmQoaW4g
RG9jdW1lbnQgZG9jdW1lbnQsIGluIERPTVN0cmluZyB0cmFja0tpbmQpIHJhaXNlcyAoRE9NRXhj
ZXB0aW9uKTsKICNlbmRpZgogCi0gICAgICAgIGF0dHJpYnV0ZSBbQ3VzdG9tXSBBcnJheSB1c2Vy
UHJlZmVycmVkTGFuZ3VhZ2VzOworICAgICAgICBhdHRyaWJ1dGUgc2VxdWVuY2U8U3RyaW5nPiB1
c2VyUHJlZmVycmVkTGFuZ3VhZ2VzOwogCiAgICAgICAgIHVuc2lnbmVkIGxvbmcgd2hlZWxFdmVu
dEhhbmRsZXJDb3VudChpbiBEb2N1bWVudCBkb2N1bWVudCkgcmFpc2VzIChET01FeGNlcHRpb24p
OwogICAgICAgICB1bnNpZ25lZCBsb25nIHRvdWNoRXZlbnRIYW5kbGVyQ291bnQoaW4gRG9jdW1l
bnQgZG9jdW1lbnQpIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvanMvSlNJbnRlcm5hbHNDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvanMvSlNJbnRlcm5hbHNDdXN0b20uY3BwCShyZXZpc2lvbiAxMTIwNTQp
CisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL2pzL0pTSW50ZXJuYWxzQ3VzdG9tLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw2NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkpTSW50ZXJuYWxzLmgiCi0KLSNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+
Ci0KLXVzaW5nIG5hbWVzcGFjZSBKU0M7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotSlNWYWx1
ZSBKU0ludGVybmFsczo6dXNlclByZWZlcnJlZExhbmd1YWdlcyhFeGVjU3RhdGUqIGV4ZWMpIGNv
bnN0Ci17Ci0gICAgSW50ZXJuYWxzKiBpbXAgPSBzdGF0aWNfY2FzdDxJbnRlcm5hbHMqPihpbXBs
KCkpOwotICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+IGxhbmd1YWdlcyA9IGltcC0+dXNlclByZWZl
cnJlZExhbmd1YWdlcygpOwotICAgIGlmIChsYW5ndWFnZXMuaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm4ganNOdWxsKCk7Ci0gICAgCi0gICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJyYXk7Ci0g
ICAgVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGxhbmd1YWdlcy5lbmQoKTsK
LSAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGxhbmd1YWdlcy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGFycmF5LmFwcGVuZChqc1N0cmluZyhl
eGVjLCBzdHJpbmdUb1VTdHJpbmcoKml0KSkpOwotICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheShl
eGVjLCBnbG9iYWxPYmplY3QoKSwgYXJyYXkpOwotfQotCi12b2lkIEpTSW50ZXJuYWxzOjpzZXRV
c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKLXsK
LSAgICBpZiAoIWlzSlNBcnJheSh2YWx1ZSkpIHsKLSAgICAgICAgdGhyb3dFcnJvcihleGVjLCBj
cmVhdGVTeW50YXhFcnJvcihleGVjLCAic2V0VXNlclByZWZlcnJlZExhbmd1YWdlczogRXhwZWN0
ZWQgQXJyYXkiKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgVmVjdG9yPFN0
cmluZz4gbGFuZ3VhZ2VzOwotICAgIEpTQXJyYXkqIGFycmF5ID0gYXNBcnJheSh2YWx1ZSk7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFycmF5LT5sZW5ndGgoKTsgKytpKSB7Ci0gICAg
ICAgIFN0cmluZyBsYW5ndWFnZSA9IHVzdHJpbmdUb1N0cmluZyhhcnJheS0+Z2V0SW5kZXgoaSku
dG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKTsKLSAgICAgICAgbGFuZ3VhZ2VzLmFwcGVuZChs
YW5ndWFnZSk7Ci0gICAgfQotICAgIAotICAgIEludGVybmFscyogaW1wID0gc3RhdGljX2Nhc3Q8
SW50ZXJuYWxzKj4oaW1wbCgpKTsKLSAgICBpbXAtPnNldFVzZXJQcmVmZXJyZWRMYW5ndWFnZXMo
bGFuZ3VhZ2VzKTsKLX0KLSAgICAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvdjgvVjhJbnRlcm5hbHNDdXN0b20uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvdjgvVjhJbnRlcm5hbHNDdXN0b20uY3BwCShyZXZpc2lv
biAxMTIwNTQpCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL3Y4L1Y4SW50ZXJuYWxzQ3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIlY4SW50ZXJuYWxzLmgiCi0KLSNpbmNsdWRlICJWOEJpbmRp
bmcuaCIKLSNpbmNsdWRlICJWOFByb3h5LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IFY4SW50ZXJuYWxzOjp1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzQWNj
ZXNzb3JHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3Nv
ckluZm8mIGluZm8pCi17Ci0gICAgSW50ZXJuYWxzKiBpbnRlcm5hbHMgPSBWOEludGVybmFsczo6
dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgY29uc3QgVmVjdG9yPFN0cmluZz4gbGFuZ3Vh
Z2VzID0gaW50ZXJuYWxzLT51c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCk7Ci0gICAgaWYgKGxhbmd1
YWdlcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB2ODo6TnVsbCgpOwotCi0gICAgdjg6Okxv
Y2FsPHY4OjpBcnJheT4gYXJyYXkgPSB2ODo6QXJyYXk6Ok5ldyhsYW5ndWFnZXMuc2l6ZSgpKTsK
LSAgICBWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbGFuZ3VhZ2VzLmVuZCgp
OwotICAgIGludCBpbmRleCA9IDA7Ci0gICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRl
cmF0b3IgaXRlciA9IGxhbmd1YWdlcy5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQotICAg
ICAgICBhcnJheS0+U2V0KHY4OjpJbnRlZ2VyOjpOZXcoaW5kZXgrKyksIHY4U3RyaW5nKCppdGVy
KSk7Ci0gICAgcmV0dXJuIGFycmF5OwotfQotCi12b2lkIFY4SW50ZXJuYWxzOjp1c2VyUHJlZmVy
cmVkTGFuZ3VhZ2VzQWNjZXNzb3JTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4
OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQot
ewotICAgIGlmICghdmFsdWUtPklzQXJyYXkoKSkgewotICAgICAgICB0aHJvd0Vycm9yKCJzZXRV
c2VyUHJlZmVycmVkTGFuZ3VhZ2VzOiBFeHBlY3RlZCBBcnJheSIpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIAotICAgIFZlY3RvcjxTdHJpbmc+IGxhbmd1YWdlczsKLQotICAgIHY4OjpM
b2NhbDx2ODo6QXJyYXk+IGFycmF5ID0gdjg6OkxvY2FsPHY4OjpBcnJheT46OkNhc3QodmFsdWUp
OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXktPkxlbmd0aCgpOyArK2kpCi0gICAg
ICAgIGxhbmd1YWdlcy5hcHBlbmQodG9XZWJDb3JlU3RyaW5nKGFycmF5LT5HZXQoaSkpKTsKLSAg
ICAKLSAgICBJbnRlcm5hbHMqIGludGVybmFscyA9IFY4SW50ZXJuYWxzOjp0b05hdGl2ZShpbmZv
LkhvbGRlcigpKTsKLSAgICBpbnRlcm5hbHMtPnNldFVzZXJQcmVmZXJyZWRMYW5ndWFnZXMobGFu
Z3VhZ2VzKTsKLX0KLSAgICAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFRvb2xzL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMjM3NikK
KysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDEy
LTAzLTI4ICBWaW5lZXQgQ2hhdWRoYXJ5ICA8cmdmNzQ4QG1vdG9yb2xhLmNvbT4KKworICAgICAg
ICBSZW1vdmUgY3VzdG9tIGJpbmRpbmdzIGZvcm0gSW50ZXJuYWxzLmlkbCBvZiBhdHRyaWJ1dGUg
dHlwZSBBcnJheS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTgyMzE5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgUmVtb3ZlIEpTSW50ZXJuYWxzQ3VzdG9tLmNwcCBhbmQgVjhJbnRlcm5hbHNDdXN0b20uY3Bw
IGFzIG5vIGxvbmdlciByZXF1aXJlZC4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorCiAy
MDEyLTAzLTI4ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KIAogICAg
ICAgICBVbnJldmlld2VkLCB0cml2aWFsIHVwZGF0ZS13ZWJraXQtbGlicy1qaGJ1aWxkIHN5c3Rl
bSBjYWxsIGZpeC4KSW5kZXg6IFRvb2xzL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL0dOVW1ha2VmaWxlLmFtCShyZXZpc2lvbiAxMTIwNTQpCisrKyBUb29scy9HTlVtYWtlZmls
ZS5hbQkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNiBAQCBsaWJXZWJDb3JlSW50ZXJuYWxz
X2xhX1NPVVJDRVMgPSBcCiAJU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaCBcCiAJ
U291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmNwcCBcCiAJU291cmNlL1dl
YkNvcmUvdGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmggXAotCVNvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvanMvSlNJbnRlcm5hbHNDdXN0b20uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL2pz
L1dlYkNvcmVUZXN0U3VwcG9ydC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMvV2Vi
Q29yZVRlc3RTdXBwb3J0LmgKIAoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134514</attachid>
            <date>2012-03-29 00:24:48 -0700</date>
            <delta_ts>2012-03-29 01:33:06 -0700</delta_ts>
            <desc>Updated Patch</desc>
            <filename>wip_internals_003.diff</filename>
            <type>text/plain</type>
            <size>25304</size>
            <attacher name="Vineet Chaudhary (vineetc)">code.vineet</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMjUwNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBACisyMDEyLTAzLTI5ICBWaW5lZXQg
Q2hhdWRoYXJ5ICA8cmdmNzQ4QG1vdG9yb2xhLmNvbT4KKworICAgICAgICBSZW1vdmUgY3VzdG9t
IGJpbmRpbmdzIGZvcm0gSW50ZXJuYWxzLmlkbCBvZiBhdHRyaWJ1dGUgdHlwZSBBcnJheS4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTgyMzE5CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIGN1c3Rv
bSBiaW5kaW5ncyBmb3IgQXJyYXkgdHlwZSBhbmQgcmVwbGFjZSBBcnJheSB0eXBlIHdpdGggc2Vx
dWVuY2U8U3RyaW5nPi4KKworICAgICAgICBObyBuZXcgdGVzdHMuIExheW91dFRlc3RzL2Zhc3Qv
aGFybmVzcy91c2VyLXByZWZlcnJlZC1sYW5ndWFnZS5odG1sIHNob3VsZCBwYXNzCisgICAgICAg
IGV2ZW4gYWZ0ZXIgdGhlc2UgY2hhbmdlcy4KKworICAgICAgICAqIFRhcmdldC5wcmk6IFJlbW92
ZSBKU0ludGVybmFsc0N1c3RvbS5jcHAgYW5kIFY4SW50ZXJuYWxzQ3VzdG9tLmNwcC4KKyAgICAg
ICAgKiBVc2VKU0MuY21ha2U6IFJlbW92ZSBKU0ludGVybmFsc0N1c3RvbS5jcHAuCisgICAgICAg
ICogVXNlVjguY21ha2U6IFJlbW92ZSBWOEludGVybmFsc0N1c3RvbS5jcHAuCisgICAgICAgICog
V2ViQ29yZS5neXBpOiBSZW1vdmUgSlNJbnRlcm5hbHNDdXN0b20uY3BwIGFuZCBWOEludGVybmFs
c0N1c3RvbS5jcHAuCisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZVRlc3RTdXBwb3J0
LnZjcHJvajogUmVtb3ZlIEpTSW50ZXJuYWxzQ3VzdG9tLmNwcCBhbmQgVjhJbnRlcm5hbHNDdXN0
b20uY3BwLgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogUmVt
b3ZlIEpTSW50ZXJuYWxzQ3VzdG9tLmNwcCBhbmQgVjhJbnRlcm5hbHNDdXN0b20uY3BwLgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc0FycmF5KTogQWRkZWQgbmV3IHNwZWNpYWxpemUgZnVuY3Rpb24g
dGVtcGxhdGUgZm9yIFN0cmluZ3MuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9ySlMucG06CisgICAgICAgIChKU1ZhbHVlVG9OYXRpdmUpOiBBZGQganNBcnJheTxTdHJp
bmc+KCkgdG8gZGVkdWNlIHJldHVybiB0eXBlLgorICAgICAgICAoTmF0aXZlVG9KU1ZhbHVlKTog
QWRkZWQgY2hlY2sgZm9yIHR5cGUgU3RyaW5nLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvclY4LnBtOgorICAgICAgICAoSlNWYWx1ZVRvTmF0aXZlKTogQWRkIHY4QXJy
YXk8U3RyaW5nPigpIHRvIGRlZHVjZSByZXR1cm4gdHlwZS4KKyAgICAgICAgKE5hdGl2ZVRvSlNW
YWx1ZSk6IEFkZGVkIGNoZWNrIGZvciB0eXBlIFN0cmluZy4KKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVz
dE9ialNlcXVlbmNlQXR0cik6IE1vZGlmaWVkIHJlc3VsdHMgZnJvbSBydW4tYmluZGluZy10ZXN0
cy4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNwcDogTW9k
aWZpZWQgcmVzdWx0cyBmcm9tIHJ1bi1iaW5kaW5nLXRlc3RzLgorICAgICAgICAoV2ViQ29yZTo6
VGVzdE9iakludGVybmFsOjpzZXF1ZW5jZUF0dHJBdHRyU2V0dGVyKToKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9WOEJpbmRpbmcuaDogQWRkZWQgbmV3IHNwZWNpYWxpemUgZnVuY3Rpb24gdGVtcGxh
dGUgZm9yIFN0cmluZ3MuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OnY4
QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6dG9OYXRpdmVBcnJheSk6CisgICAgICAgICogdGVz
dGluZy9JbnRlcm5hbHMuaWRsOiBSZXBsYWNlIEFycmF5IHR5cGUgd2l0aCBzZXF1ZW5jZTxTdHJp
bmc+CisgICAgICAgICogdGVzdGluZy9qcy9KU0ludGVybmFsc0N1c3RvbS5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogdGVzdGluZy92OC9WOEludGVybmFsc0N1c3RvbS5jcHA6IFJlbW92ZWQuCisK
IDIwMTItMDMtMjkgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgog
CiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMTI1MDAuCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9UYXJnZXQucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5w
cmkJKHJldmlzaW9uIDExMjUwNCkKKysrIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkJKHdvcmtp
bmcgY29weSkKQEAgLTIzNyw3ICsyMzcsNiBAQCB2OCB7CiAgICAgICAgIGJpbmRpbmdzL3Y4L2N1
c3RvbS9WOENvbnNvbGVDdXN0b20uY3BwIFwKICAgICAgICAgYmluZGluZ3MvdjgvY3VzdG9tL1Y4
U1FMVHJhbnNhY3Rpb25TeW5jQ3VzdG9tLmNwcCBcCiAgICAgICAgIGJpbmRpbmdzL3Y4L1Y4V29y
a2VyQ29udGV4dEVycm9ySGFuZGxlci5jcHAgXAotICAgICAgICB0ZXN0aW5nL3Y4L1Y4SW50ZXJu
YWxzQ3VzdG9tLmNwcCBcCiAgICAgICAgIHRlc3RpbmcvdjgvV2ViQ29yZVRlc3RTdXBwb3J0LmNw
cAogfSBlbHNlIHsKICAgICBTT1VSQ0VTICs9IFwKQEAgLTM5OCw3ICszOTcsNiBAQCB2OCB7CiAg
ICAgICAgIGJyaWRnZS9ydW50aW1lX21ldGhvZC5jcHAgXAogICAgICAgICBicmlkZ2UvcnVudGlt
ZV9vYmplY3QuY3BwIFwKICAgICAgICAgYnJpZGdlL3J1bnRpbWVfcm9vdC5jcHAgXAotICAgICAg
ICB0ZXN0aW5nL2pzL0pTSW50ZXJuYWxzQ3VzdG9tLmNwcCBcCiAgICAgICAgIHRlc3RpbmcvanMv
V2ViQ29yZVRlc3RTdXBwb3J0LmNwcAogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Vc2VKU0Mu
Y21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvVXNlSlNDLmNtYWtlCShyZXZpc2lv
biAxMTI1MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9Vc2VKU0MuY21ha2UJKHdvcmtpbmcgY29weSkK
QEAgLTE2OSw3ICsxNjksNiBAQCBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICkKIAogTElT
VChBUFBFTkQgV2ViQ29yZVRlc3RTdXBwb3J0X1NPVVJDRVMKLSAgICB0ZXN0aW5nL2pzL0pTSW50
ZXJuYWxzQ3VzdG9tLmNwcAogICAgIHRlc3RpbmcvanMvV2ViQ29yZVRlc3RTdXBwb3J0LmNwcAog
KQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Vc2VWOC5jbWFrZQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9Vc2VWOC5jbWFrZQkocmV2aXNpb24gMTEyNTA0KQorKysgU291cmNlL1dlYkNv
cmUvVXNlVjguY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTE2NCw3ICsxNjQsNiBAQCBMSVNUKEFQ
UEVORCBXZWJDb3JlX1NPVVJDRVMKICkKIAogTElTVChBUFBFTkQgV2ViQ29yZVRlc3RTdXBwb3J0
X1NPVVJDRVMKLSAgICB0ZXN0aW5nL3Y4L1Y4SW50ZXJuYWxzQ3VzdG9tLmNwcAogICAgIHRlc3Rp
bmcvdjgvV2ViQ29yZVRlc3RTdXBwb3J0LmNwcAogKQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCShy
ZXZpc2lvbiAxMTI1MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcg
Y29weSkKQEAgLTYxNDgsMTAgKzYxNDgsOCBAQAogICAgICAgICAgICd0ZXN0aW5nL0ludGVybmFs
U2V0dGluZ3MuaWRsJywKICAgICAgICAgXSwKICAgICAgICAgJ3dlYmNvcmVfdGVzdF9zdXBwb3J0
X2ZpbGVzJzogWwotICAgICAgICAgICAgJ3Rlc3RpbmcvdjgvVjhJbnRlcm5hbHNDdXN0b20uY3Bw
JywKICAgICAgICAgICAgICd0ZXN0aW5nL3Y4L1dlYkNvcmVUZXN0U3VwcG9ydC5jcHAnLAogICAg
ICAgICAgICAgJ3Rlc3RpbmcvdjgvV2ViQ29yZVRlc3RTdXBwb3J0LmgnLAotICAgICAgICAgICAg
J3Rlc3RpbmcvanMvSlNJbnRlcm5hbHNDdXN0b20uY3BwJywKICAgICAgICAgICAgICd0ZXN0aW5n
L2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RpbmcvanMvV2Vi
Q29yZVRlc3RTdXBwb3J0LmgnLAogICAgICAgICAgICAgJ3Rlc3RpbmcvSW50ZXJuYWxzLmNwcCcs
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlVGVzdFN1cHBvcnQu
dmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmVUZXN0U3VwcG9ydC52Y3Byb2oJKHJldmlzaW9uIDExMjUwNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL1dlYkNvcmVUZXN0U3VwcG9ydC52Y3Byb2oJKHdvcmtpbmcgY29weSkK
QEAgLTY5MSw3NCArNjkxLDYgQEAKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHRlc3RpbmdcanNcV2Vi
Q29yZVRlc3RTdXBwb3J0LmgiCiAJCQkJPgogCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHRlc3RpbmdcanNcSlNJbnRlcm5hbHNDdXN0b20uY3BwIgotCQkJCT4KLQkJ
CQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFtZT0iRGVidWd8V2luMzIiCi0JCQkJCT4KLQkJ
CQkJPFRvb2wKLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0JCQkJCQlVc2VQcmVjb21w
aWxlZEhlYWRlcj0iMCIKLQkJCQkJCURpc2FibGVTcGVjaWZpY1dhcm5pbmdzPSI0MDY1OzQyNzM7
NDU2NTs0NzAxOzQ3MDIiCi0JCQkJCQlGb3JjZWRJbmNsdWRlRmlsZXM9IiQoTk9JTkhFUklUKSIK
LQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJCTxGaWxlQ29uZmlndXJhdGlv
bgotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlO
YW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCi0J
CQkJCQlEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz0iNDA2NTs0MjczOzQ1NjU7NDcwMTs0NzAyIgot
CQkJCQkJRm9yY2VkSW5jbHVkZUZpbGVzPSIkKE5PSU5IRVJJVCkiCi0JCQkJCS8+Ci0JCQkJPC9G
aWxlQ29uZmlndXJhdGlvbj4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFtZT0iRGVi
dWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgotCQkJCQk+Ci0JCQkJCTxUb29sCi0JCQkJCQlOYW1lPSJW
Q0NMQ29tcGlsZXJUb29sIgotCQkJCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiCi0JCQkJCQlE
aXNhYmxlU3BlY2lmaWNXYXJuaW5ncz0iNDA2NTs0MjczOzQ1NjU7NDcwMTs0NzAyIgotCQkJCQkJ
Rm9yY2VkSW5jbHVkZUZpbGVzPSIkKE5PSU5IRVJJVCkiCi0JCQkJCS8+Ci0JCQkJPC9GaWxlQ29u
ZmlndXJhdGlvbj4KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KLQkJCQkJTmFtZT0iUmVsZWFzZV9D
YWlyb19DRkxpdGV8V2luMzIiCi0JCQkJCT4KLQkJCQkJPFRvb2wKLQkJCQkJCU5hbWU9IlZDQ0xD
b21waWxlclRvb2wiCi0JCQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKLQkJCQkJCURpc2Fi
bGVTcGVjaWZpY1dhcm5pbmdzPSI0MDY1OzQyNzM7NDU2NTs0NzAxOzQ3MDIiCi0JCQkJCQlGb3Jj
ZWRJbmNsdWRlRmlsZXM9IiQoTk9JTkhFUklUKSIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1
cmF0aW9uPgotCQkJCTxGaWxlQ29uZmlndXJhdGlvbgotCQkJCQlOYW1lPSJEZWJ1Z19BbGx8V2lu
MzIiCi0JCQkJCT4KLQkJCQkJPFRvb2wKLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCi0J
CQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCIKLQkJCQkJCURpc2FibGVTcGVjaWZpY1dhcm5p
bmdzPSI0MDY1OzQyNzM7NDU2NTs0NzAxOzQ3MDIiCi0JCQkJCQlGb3JjZWRJbmNsdWRlRmlsZXM9
IiQoTk9JTkhFUklUKSIKLQkJCQkJLz4KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgotCQkJCTxG
aWxlQ29uZmlndXJhdGlvbgotCQkJCQlOYW1lPSJQcm9kdWN0aW9ufFdpbjMyIgotCQkJCQk+Ci0J
CQkJCTxUb29sCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgotCQkJCQkJVXNlUHJlY29t
cGlsZWRIZWFkZXI9IjAiCi0JCQkJCQlEaXNhYmxlU3BlY2lmaWNXYXJuaW5ncz0iNDA2NTs0Mjcz
OzQ1NjU7NDcwMTs0NzAyIgotCQkJCQkJRm9yY2VkSW5jbHVkZUZpbGVzPSIkKE5PSU5IRVJJVCki
Ci0JCQkJCS8+Ci0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KLQkJCTwvRmlsZT4KLQkJCTxGaWxl
Ci0JCQkJUmVsYXRpdmVQYXRoPSIuLlx0ZXN0aW5nXGpzXEpTSW50ZXJuYWxzQ3VzdG9tLmgiCi0J
CQkJPgotCQkJPC9GaWxlPgogCQk8L0ZpbHRlcj4KIAkJPEZpbGUKIAkJCVJlbGF0aXZlUGF0aD0i
Li5cY29uZmlnLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMTI1MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw3
ICsxMDksNiBAQAogCQkwNzA5RkM0RTEwMjVERUUzMDA1OUNEQkEgLyogQWNjZXNzaWJpbGl0eVNs
aWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcw
OUZDNEQxMDI1REVFMzAwNTlDREJBIC8qIEFjY2Vzc2liaWxpdHlTbGlkZXIuaCAqLzsgfTsKIAkJ
MDcyMEIwQTAxNEQzMzIzNTAwNjQyOTU1IC8qIEdlbmVyaWNFdmVudFF1ZXVlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MjBCMDlFMTREMzMyMzUw
MDY0Mjk1NSAvKiBHZW5lcmljRXZlbnRRdWV1ZS5jcHAgKi87IH07CiAJCTA3MjBCMEExMTREMzMy
MzUwMDY0Mjk1NSAvKiBHZW5lcmljRXZlbnRRdWV1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcyMEIwOUYxNEQzMzIzNTAwNjQyOTU1IC8qIEdlbmVy
aWNFdmVudFF1ZXVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKLQkJMDcyMzBDQkMxNEMxMEVEOTAwRjZCNzAyIC8qIEpTSW50ZXJuYWxzQ3VzdG9tLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MjMwQ0JC
MTRDMTBFRDkwMEY2QjcwMiAvKiBKU0ludGVybmFsc0N1c3RvbS5jcHAgKi87IH07CiAJCTA3MkM4
QjExMTMxQzUxODYwMEE0RkNFOSAvKiBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24uY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDc2RjBEMDkx
MkI4MTkyNzAwQzI2QUE0IC8qIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbi5jcHAgKi87
IH07CiAJCTA3MzVFRTZBMEY0MEM1RTQwMDRBMjYwNCAvKiBNZWRpYVBsYXllclByb3h5LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzM1RUU2OTBGNDBD
NUU0MDA0QTI2MDQgLyogTWVkaWFQbGF5ZXJQcm94eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA3NTM4NjAyMTQ0ODlFOTgwMEI3ODQ1MiAvKiBD
YWNoZWRUZXh0VHJhY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMDc1Mzg2MDAxNDQ4OUU5ODAwQjc4NDUyIC8qIENhY2hlZFRleHRUcmFjay5jcHAg
Ki87IH07CkBAIC02ODk1LDcgKzY4OTQsNiBAQAogCQkwNzBERDhGNTBGMDE4NjgwMDA3MjdERUIg
LyogbWVkaWFDb250cm9scy5jc3MgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gbWVkaWFDb250cm9s
cy5jc3M7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3MjBCMDlFMTREMzMyMzUwMDY0
Mjk1NSAvKiBHZW5lcmljRXZlbnRRdWV1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBHZW5lcmljRXZlbnRRdWV1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTA3MjBCMDlGMTREMzMyMzUwMDY0Mjk1NSAvKiBHZW5lcmljRXZlbnRRdWV1ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHZW5lcmljRXZlbnRRdWV1ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwNzIzMENCQjE0QzEwRUQ5MDBGNkI3MDIgLyogSlNJ
bnRlcm5hbHNDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNJbnRlcm5hbHNDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzM1
RUU2OTBGNDBDNUU0MDA0QTI2MDQgLyogTWVkaWFQbGF5ZXJQcm94eS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVBsYXllclByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTA3NTM4NjAwMTQ0ODlFOTgwMEI3ODQ1MiAvKiBDYWNoZWRUZXh0VHJhY2su
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FjaGVkVGV4dFRyYWNr
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDc1Mzg2MDExNDQ4OUU5ODAwQjc4
NDUyIC8qIENhY2hlZFRleHRUcmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDYWNoZWRUZXh0VHJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0NTM3
LDcgKzE0NTM1LDYgQEAKIAkJNDE4MTVDMUIxMzgzMTk2MzAwNTdBQUE0IC8qIGpzICovID0gewog
CQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQkwNzIzMENCQjE0QzEwRUQ5
MDBGNkI3MDIgLyogSlNJbnRlcm5hbHNDdXN0b20uY3BwICovLAogCQkJCTQxODE1QzFDMTM4MzE5
ODMwMDU3QUFBNCAvKiBXZWJDb3JlVGVzdFN1cHBvcnQuY3BwICovLAogCQkJCTQxODE1QzFEMTM4
MzE5ODMwMDU3QUFBNCAvKiBXZWJDb3JlVGVzdFN1cHBvcnQuaCAqLywKIAkJCSk7CkBAIC0yNDk5
NSw3ICsyNDk5Miw2IEBACiAJCQkJNDE3REE2RDkxMzczNEU2RTAwN0M1N0ZCIC8qIEludGVybmFs
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0JGN0VERjE0QzkxNzVBMDAxNDQ4OUQgLyogSW50
ZXJuYWxTZXR0aW5ncy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MTdEQTcxRDEzNzM1REZBMDA3
QzU3RkIgLyogSlNJbnRlcm5hbHMuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMDcyMzBDQkMxNEMx
MEVEOTAwRjZCNzAyIC8qIEpTSW50ZXJuYWxzQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE3NDBCNUE3MTRDOTM1QUYwMEE3N0ZBNCAvKiBKU0ludGVybmFsU2V0dGluZ3MuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNDE4MTVDMUUxMzgzMTk4MzAwNTdBQUE0IC8qIFdlYkNvcmVUZXN0U3Vw
cG9ydC5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUJpbmRpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RPTUJpbmRpbmcuaAkocmV2aXNpb24gMTEyNTA0KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3OSwxOCAr
Mjc5LDMwIEBAIGVudW0gUGFyYW1ldGVyRGVmYXVsdFBvbGljeSB7CiAgICAgICAgIHJldHVybiB0
b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgcHRyLmdldCgpKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgSXRlcmFibGU+Ci0gICAgSlNDOjpKU1ZhbHVlIGpzQXJyYXkoSlNDOjpFeGVj
U3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IEl0ZXJh
YmxlJiBpdGVyYXRvcikKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBKU0M6OkpTVmFs
dWUganNBcnJheShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgY29uc3QgVmVjdG9yPFQ+JiBpdGVyYXRvcikKICAgICB7CiAgICAgICAgIEpTQzo6
TWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKLSAgICAgICAgdHlwZW5hbWUgSXRlcmFibGU6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IGl0ZXJhdG9yLmVuZCgpOworICAgICAgICB0eXBlbmFtZSBWZWN0
b3I8VD46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGl0ZXJhdG9yLmVuZCgpOwogCi0gICAgICAgIGZv
ciAodHlwZW5hbWUgSXRlcmFibGU6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBpdGVyYXRvci5iZWdp
bigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQorICAgICAgICBmb3IgKHR5cGVuYW1lIFZlY3RvcjxU
Pjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGl0ZXJhdG9yLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyAr
K2l0ZXIpCiAgICAgICAgICAgICBsaXN0LmFwcGVuZCh0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwg
V1RGOjpnZXRQdHIoKml0ZXIpKSk7CiAKICAgICAgICAgcmV0dXJuIEpTQzo6Y29uc3RydWN0QXJy
YXkoZXhlYywgZ2xvYmFsT2JqZWN0LCBsaXN0KTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTw+Cisg
ICAgaW5saW5lIEpTQzo6SlNWYWx1ZSBqc0FycmF5KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgaXRlcmF0
b3IpCisgICAgeworICAgICAgICBKU0M6Ok1hcmtlZEFyZ3VtZW50QnVmZmVyIGFycmF5OworICAg
ICAgICBWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaXRlcmF0b3IuZW5kKCk7
CisKKyAgICAgICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBpdGVy
YXRvci5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBhcnJheS5hcHBlbmQo
anNTdHJpbmcoZXhlYywgc3RyaW5nVG9VU3RyaW5nKCppdCkpKTsKKworICAgICAgICByZXR1cm4g
SlNDOjpjb25zdHJ1Y3RBcnJheShleGVjLCBnbG9iYWxPYmplY3QsIGFycmF5KTsKKyAgICB9CisK
ICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KICAgICBWZWN0b3I8VD4gdG9OYXRpdmVBcnJheShKU0M6
OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIHZhbHVlKQogICAgIHsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShy
ZXZpc2lvbiAxMTI1MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAtMjkzNyw4ICsyOTM3LDkgQEAgc3ViIEpT
VmFsdWVUb05hdGl2ZQogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJKU0N1c3RvbVZvaWRDYWxsYmFj
ay5oIiwgJGNvbmRpdGlvbmFsKSBpZiAkdHlwZSBlcSAiVm9pZENhbGxiYWNrIjsKICAgICBBZGRU
b0ltcGxJbmNsdWRlcygiRXZlbnQuaCIsICRjb25kaXRpb25hbCkgaWYgJHR5cGUgZXEgIkV2ZW50
IjsKIAotICAgIGlmICgkY29kZUdlbmVyYXRvci0+R2V0QXJyYXlUeXBlKCR0eXBlKSkgewotICAg
ICAgICByZXR1cm4gInRvTmF0aXZlQXJyYXkoZXhlYywgJHZhbHVlKSI7CisgICAgbXkgJGFycmF5
VHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5HZXRBcnJheVR5cGUoJHR5cGUpOworICAgIGlmICgkYXJy
YXlUeXBlKSB7CisgICAgICAgIHJldHVybiAidG9OYXRpdmVBcnJheTwkYXJyYXlUeXBlPihleGVj
LCAkdmFsdWUpIjsKICAgICB9CiAKICAgICAjIERlZmF1bHQsIGFzc3VtZSBhdXRvZ2VuZXJhdGVk
IHR5cGUgY29udmVyc2lvbiByb3V0aW5lcwpAQCAtMzAwMiw5ICszMDAzLDExIEBAIHN1YiBOYXRp
dmVUb0pTVmFsdWUKIAogICAgIG15ICRhcnJheVR5cGUgPSAkY29kZUdlbmVyYXRvci0+R2V0QXJy
YXlUeXBlKCR0eXBlKTsKICAgICBpZiAoJGFycmF5VHlwZSkgeworICAgICAgICBpZiAoJGFycmF5
VHlwZSBuZSAiU3RyaW5nIikgeworICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTJGFy
cmF5VHlwZS5oIiwgJGNvbmRpdGlvbmFsKTsKKyAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVz
KCIkYXJyYXlUeXBlLmgiLCAkY29uZGl0aW9uYWwpOworICAgICAgICB9CiAgICAgICAgIEFkZFRv
SW1wbEluY2x1ZGVzKCI8cnVudGltZS9KU0FycmF5Lmg+IiwgJGNvbmRpdGlvbmFsKTsKLSAgICAg
ICAgQWRkVG9JbXBsSW5jbHVkZXMoIkpTJGFycmF5VHlwZS5oIiwgJGNvbmRpdGlvbmFsKTsKLSAg
ICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIiRhcnJheVR5cGUuaCIsICRjb25kaXRpb25hbCk7CiAg
ICAgICAgIHJldHVybiAianNBcnJheShleGVjLCAkdGhpc1ZhbHVlLT5nbG9iYWxPYmplY3QoKSwg
JHZhbHVlKSI7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JWOC5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQkocmV2aXNpb24gMTEyNTA0KQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0JKHdvcmtpbmcgY29w
eSkKQEAgLTM1NDksOCArMzU0OSw5IEBAIHN1YiBKU1ZhbHVlVG9OYXRpdmUKICAgICAgICAgcmV0
dXJuICJWOERPTVdyYXBwZXI6OmdldFhQYXRoTlNSZXNvbHZlcigkdmFsdWUpIjsKICAgICB9CiAK
LSAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPkdldEFycmF5VHlwZSgkdHlwZSkpIHsKLSAgICAgICAg
cmV0dXJuICJ0b05hdGl2ZUFycmF5KCR2YWx1ZSkiOworICAgIG15ICRhcnJheVR5cGUgPSAkY29k
ZUdlbmVyYXRvci0+R2V0QXJyYXlUeXBlKCR0eXBlKTsKKyAgICBpZiAoJGFycmF5VHlwZSkgewor
ICAgICAgICByZXR1cm4gInRvTmF0aXZlQXJyYXk8JGFycmF5VHlwZT4oJHZhbHVlKSI7CiAgICAg
fQogCiAgICAgQWRkSW5jbHVkZXNGb3JUeXBlKCR0eXBlKTsKQEAgLTM3NjgsOCArMzc2OSwxMCBA
QCBzdWIgTmF0aXZlVG9KU1ZhbHVlCiAKICAgICBteSAkYXJyYXlUeXBlID0gJGNvZGVHZW5lcmF0
b3ItPkdldEFycmF5VHlwZSgkdHlwZSk7CiAgICAgaWYgKCRhcnJheVR5cGUpIHsKLSAgICAgICAg
QWRkVG9JbXBsSW5jbHVkZXMoIlY4JGFycmF5VHlwZS5oIik7Ci0gICAgICAgIEFkZFRvSW1wbElu
Y2x1ZGVzKCIkYXJyYXlUeXBlLmgiKTsKKyAgICAgICAgaWYgKCRhcnJheVR5cGUgbmUgIlN0cmlu
ZyIpIHsKKyAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJWOCRhcnJheVR5cGUuaCIpOwor
ICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIiRhcnJheVR5cGUuaCIpOworICAgICAgICB9
CiAgICAgICAgIHJldHVybiAidjhBcnJheSgkdmFsdWUpIjsKICAgICB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmou
Y3BwCShyZXZpc2lvbiAxMTI1MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTg0LDcgKzk4NCw3IEBA
IHZvaWQgc2V0SlNUZXN0T2JqU2VxdWVuY2VBdHRyKEV4ZWNTdGF0ZSoKIHsKICAgICBKU1Rlc3RP
YmoqIGNhc3RlZFRoaXMgPSBzdGF0aWNfY2FzdDxKU1Rlc3RPYmoqPih0aGlzT2JqZWN0KTsKICAg
ICBUZXN0T2JqKiBpbXBsID0gc3RhdGljX2Nhc3Q8VGVzdE9iaio+KGNhc3RlZFRoaXMtPmltcGwo
KSk7Ci0gICAgaW1wbC0+c2V0U2VxdWVuY2VBdHRyKHRvTmF0aXZlQXJyYXkoZXhlYywgdmFsdWUp
KTsKKyAgICBpbXBsLT5zZXRTZXF1ZW5jZUF0dHIodG9OYXRpdmVBcnJheTxTY3JpcHRQcm9maWxl
PihleGVjLCB2YWx1ZSkpOwogfQogCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwCShyZXZpc2lvbiAxMTI1MDQp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjMxLDcgKzIzMSw3IEBAIHN0YXRpYyB2b2lkIHNlcXVlbmNl
QXR0ckF0dHJTZXR0ZXIodjg6OkwKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLnNlcXVl
bmNlQXR0ci5fc2V0Iik7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShp
bmZvLkhvbGRlcigpKTsKLSAgICBWZWN0b3I8U2NyaXB0UHJvZmlsZT4gdiA9IHRvTmF0aXZlQXJy
YXkodmFsdWUpOworICAgIFZlY3RvcjxTY3JpcHRQcm9maWxlPiB2ID0gdG9OYXRpdmVBcnJheTxT
Y3JpcHRQcm9maWxlPih2YWx1ZSk7CiAgICAgaW1wLT5zZXRTZXF1ZW5jZUF0dHIodik7CiAgICAg
cmV0dXJuOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhCaW5kaW5nLmgJKHJl
dmlzaW9uIDExMjUwNCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4QmluZGluZy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yODYsMTcgKzI4NiwyOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIHJldHVybiB2OEV4dGVybmFsU3RyaW5nKHN0cmluZyk7CiAgICAgfQogCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgSXRlcmFibGU+Ci0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4
QXJyYXkoY29uc3QgSXRlcmFibGUmIGl0ZXJhdG9yKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4QXJyYXkoY29uc3QgVmVjdG9yPFQ+JiBpdGVy
YXRvcikKICAgICB7CiAgICAgICAgIHY4OjpMb2NhbDx2ODo6QXJyYXk+IHJlc3VsdCA9IHY4OjpB
cnJheTo6TmV3KGl0ZXJhdG9yLnNpemUoKSk7CiAgICAgICAgIGludCBpbmRleCA9IDA7Ci0gICAg
ICAgIHR5cGVuYW1lIEl0ZXJhYmxlOjpjb25zdF9pdGVyYXRvciBlbmQgPSBpdGVyYXRvci5lbmQo
KTsKLSAgICAgICAgZm9yICh0eXBlbmFtZSBJdGVyYWJsZTo6Y29uc3RfaXRlcmF0b3IgaXRlciA9
IGl0ZXJhdG9yLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCisgICAgICAgIHR5cGVuYW1l
IFZlY3RvcjxUPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaXRlcmF0b3IuZW5kKCk7CisgICAgICAg
IGZvciAodHlwZW5hbWUgVmVjdG9yPFQ+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gaXRlcmF0b3Iu
YmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKICAgICAgICAgICAgIHJlc3VsdC0+U2V0KHY4
OjpJbnRlZ2VyOjpOZXcoaW5kZXgrKyksIHRvVjgoV1RGOjpnZXRQdHIoKml0ZXIpKSk7CiAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCisgICAgdGVtcGxhdGU8PgorICAgIGlubGluZSB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdjhBcnJheShjb25zdCBWZWN0b3I8U3RyaW5nPiYgaXRlcmF0
b3IpCisgICAgeworICAgICAgICB2ODo6TG9jYWw8djg6OkFycmF5PiBhcnJheSA9IHY4OjpBcnJh
eTo6TmV3KGl0ZXJhdG9yLnNpemUoKSk7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9p
dGVyYXRvciBlbmQgPSBpdGVyYXRvci5lbmQoKTsKKyAgICAgICAgaW50IGluZGV4ID0gMDsKKyAg
ICAgICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGl0ZXJhdG9y
LmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCisgICAgICAgICAgICBhcnJheS0+U2V0KHY4
OjpJbnRlZ2VyOjpOZXcoaW5kZXgrKyksIHY4U3RyaW5nKCppdGVyKSk7CisgICAgICAgIHJldHVy
biBhcnJheTsKKyAgICB9CisKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KICAgICBWZWN0b3I8VD4g
dG9OYXRpdmVBcnJheSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpCiAgICAgewpAQCAtMzA5
LDggKzMyMCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgc2l6ZV90IGxlbmd0aCA9
IGFycmF5LT5MZW5ndGgoKTsKIAogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0
aDsgKytpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgaW5kZXhlZFZhbHVlID0gdjhTdHJpbmdUb1dl
YkNvcmVTdHJpbmcoYXJyYXktPkdldChpKSk7Ci0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKGlu
ZGV4ZWRWYWx1ZSk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHY4VmFsdWVUb1dlYkNvcmVT
dHJpbmcoYXJyYXktPkdldChpKSkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAkocmV2aXNpb24g
MTEyNTA0KQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDcsNyArMTA3LDcgQEAgbW9kdWxlIHdpbmRvdyB7CiAgICAgICAgIGJvb2xl
YW4gc2hvdWxkRGlzcGxheVRyYWNrS2luZChpbiBEb2N1bWVudCBkb2N1bWVudCwgaW4gRE9NU3Ry
aW5nIHRyYWNrS2luZCkgcmFpc2VzIChET01FeGNlcHRpb24pOwogI2VuZGlmCiAKLSAgICAgICAg
YXR0cmlidXRlIFtDdXN0b21dIEFycmF5IHVzZXJQcmVmZXJyZWRMYW5ndWFnZXM7CisgICAgICAg
IGF0dHJpYnV0ZSBzZXF1ZW5jZTxTdHJpbmc+IHVzZXJQcmVmZXJyZWRMYW5ndWFnZXM7CiAKICAg
ICAgICAgdW5zaWduZWQgbG9uZyB3aGVlbEV2ZW50SGFuZGxlckNvdW50KGluIERvY3VtZW50IGRv
Y3VtZW50KSByYWlzZXMgKERPTUV4Y2VwdGlvbik7CiAgICAgICAgIHVuc2lnbmVkIGxvbmcgdG91
Y2hFdmVudEhhbmRsZXJDb3VudChpbiBEb2N1bWVudCBkb2N1bWVudCkgcmFpc2VzIChET01FeGNl
cHRpb24pOwpJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9qcy9KU0ludGVybmFsc0N1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9qcy9KU0ludGVybmFs
c0N1c3RvbS5jcHAJKHJldmlzaW9uIDExMjUwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
anMvSlNJbnRlcm5hbHNDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY1ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSlNJbnRlcm5hbHMuaCIK
LQotI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KLQotdXNpbmcgbmFtZXNwYWNlIEpTQzsKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1KU1ZhbHVlIEpTSW50ZXJuYWxzOjp1c2VyUHJlZmVycmVk
TGFuZ3VhZ2VzKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKLXsKLSAgICBJbnRlcm5hbHMqIGltcCA9
IHN0YXRpY19jYXN0PEludGVybmFscyo+KGltcGwoKSk7Ci0gICAgY29uc3QgVmVjdG9yPFN0cmlu
Zz4gbGFuZ3VhZ2VzID0gaW1wLT51c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCk7Ci0gICAgCi0gICAg
TWFya2VkQXJndW1lbnRCdWZmZXIgYXJyYXk7Ci0gICAgVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IGxhbmd1YWdlcy5lbmQoKTsKLSAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpj
b25zdF9pdGVyYXRvciBpdCA9IGxhbmd1YWdlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0g
ICAgICAgIGFycmF5LmFwcGVuZChqc1N0cmluZyhleGVjLCBzdHJpbmdUb1VTdHJpbmcoKml0KSkp
OwotICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheShleGVjLCBnbG9iYWxPYmplY3QoKSwgYXJyYXkp
OwotfQotCi12b2lkIEpTSW50ZXJuYWxzOjpzZXRVc2VyUHJlZmVycmVkTGFuZ3VhZ2VzKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBpZiAoIWlzSlNBcnJheSh2YWx1ZSkp
IHsKLSAgICAgICAgdGhyb3dFcnJvcihleGVjLCBjcmVhdGVTeW50YXhFcnJvcihleGVjLCAic2V0
VXNlclByZWZlcnJlZExhbmd1YWdlczogRXhwZWN0ZWQgQXJyYXkiKSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgCi0gICAgVmVjdG9yPFN0cmluZz4gbGFuZ3VhZ2VzOwotICAgIEpTQXJy
YXkqIGFycmF5ID0gYXNBcnJheSh2YWx1ZSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGFycmF5LT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIFN0cmluZyBsYW5ndWFnZSA9IHVzdHJp
bmdUb1N0cmluZyhhcnJheS0+Z2V0SW5kZXgoaSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
KTsKLSAgICAgICAgbGFuZ3VhZ2VzLmFwcGVuZChsYW5ndWFnZSk7Ci0gICAgfQotICAgIAotICAg
IEludGVybmFscyogaW1wID0gc3RhdGljX2Nhc3Q8SW50ZXJuYWxzKj4oaW1wbCgpKTsKLSAgICBp
bXAtPnNldFVzZXJQcmVmZXJyZWRMYW5ndWFnZXMobGFuZ3VhZ2VzKTsKLX0KLSAgICAKLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvdjgvVjhJbnRl
cm5hbHNDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcvdjgv
VjhJbnRlcm5hbHNDdXN0b20uY3BwCShyZXZpc2lvbiAxMTI1MDQpCisrKyBTb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL3Y4L1Y4SW50ZXJuYWxzQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2
NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlY4SW50
ZXJuYWxzLmgiCi0KLSNpbmNsdWRlICJWOEJpbmRpbmcuaCIKLSNpbmNsdWRlICJWOFByb3h5Lmgi
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SW50ZXJu
YWxzOjp1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzQWNjZXNzb3JHZXR0ZXIodjg6OkxvY2FsPHY4OjpT
dHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgSW50ZXJu
YWxzKiBpbnRlcm5hbHMgPSBWOEludGVybmFsczo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0g
ICAgY29uc3QgVmVjdG9yPFN0cmluZz4gbGFuZ3VhZ2VzID0gaW50ZXJuYWxzLT51c2VyUHJlZmVy
cmVkTGFuZ3VhZ2VzKCk7Ci0KLSAgICB2ODo6TG9jYWw8djg6OkFycmF5PiBhcnJheSA9IHY4OjpB
cnJheTo6TmV3KGxhbmd1YWdlcy5zaXplKCkpOwotICAgIFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9p
dGVyYXRvciBlbmQgPSBsYW5ndWFnZXMuZW5kKCk7Ci0gICAgaW50IGluZGV4ID0gMDsKLSAgICBm
b3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gbGFuZ3VhZ2VzLmJlZ2lu
KCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAgIGFycmF5LT5TZXQodjg6OkludGVnZXI6
Ok5ldyhpbmRleCsrKSwgdjhTdHJpbmcoKml0ZXIpKTsKLSAgICByZXR1cm4gYXJyYXk7Ci19Ci0K
LXZvaWQgVjhJbnRlcm5hbHM6OnVzZXJQcmVmZXJyZWRMYW5ndWFnZXNBY2Nlc3NvclNldHRlcih2
ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNv
bnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCi17Ci0gICAgaWYgKCF2YWx1ZS0+SXNBcnJheSgp
KSB7Ci0gICAgICAgIHRocm93RXJyb3IoInNldFVzZXJQcmVmZXJyZWRMYW5ndWFnZXM6IEV4cGVj
dGVkIEFycmF5Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgVmVjdG9yPFN0
cmluZz4gbGFuZ3VhZ2VzOwotCi0gICAgdjg6OkxvY2FsPHY4OjpBcnJheT4gYXJyYXkgPSB2ODo6
TG9jYWw8djg6OkFycmF5Pjo6Q2FzdCh2YWx1ZSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBhcnJheS0+TGVuZ3RoKCk7ICsraSkKLSAgICAgICAgbGFuZ3VhZ2VzLmFwcGVuZCh0b1dlYkNv
cmVTdHJpbmcoYXJyYXktPkdldChpKSkpOwotICAgIAotICAgIEludGVybmFscyogaW50ZXJuYWxz
ID0gVjhJbnRlcm5hbHM6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIGludGVybmFscy0+
c2V0VXNlclByZWZlcnJlZExhbmd1YWdlcyhsYW5ndWFnZXMpOwotfQotICAgIAotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L0NoYW5nZUxvZwkocmV2aXNpb24gMTEyNTA1KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTItMDMtMjkgIFZpbmVldCBDaGF1ZGhhcnkgIDxy
Z2Y3NDhAbW90b3JvbGEuY29tPgorCisgICAgICAgIFJlbW92ZSBjdXN0b20gYmluZGluZ3MgZm9y
bSBJbnRlcm5hbHMuaWRsIG9mIGF0dHJpYnV0ZSB0eXBlIEFycmF5LgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODIzMTkKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmUgSlNJbnRlcm5hbHNDdXN0b20u
Y3BwIGFuZCBWOEludGVybmFsc0N1c3RvbS5jcHAgYXMgbm8gbG9uZ2VyIHJlcXVpcmVkLgorCisg
ICAgICAgICogR05VbWFrZWZpbGUuYW06CisKIDIwMTItMDMtMjggIE1hcmsgUm93ZSAgPG1yb3dl
QGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggLS1uby1zYXZlZC1zdGF0ZS4KSW5kZXg6IFRvb2xz
L0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0dOVW1ha2VmaWxlLmFtCShyZXZp
c2lvbiAxMTI1MDQpCisrKyBUb29scy9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAt
NDUsNyArNDUsNiBAQCBsaWJXZWJDb3JlSW50ZXJuYWxzX2xhX1NPVVJDRVMgPSBcCiAJU291cmNl
L1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaCBcCiAJU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbFNldHRpbmdzLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbFNl
dHRpbmdzLmggXAotCVNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMvSlNJbnRlcm5hbHNDdXN0b20u
Y3BwIFwKIAlTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5jcHAg
XAogCVNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvanMvV2ViQ29yZVRlc3RTdXBwb3J0LmgKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>