<?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>18518</bug_id>
          
          <creation_ts>2008-04-15 13:40:55 -0700</creation_ts>
          <short_desc>Implement eval in SquirrelFish</short_desc>
          <delta_ts>2008-04-17 14:08:22 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Cameron Zwarich (cpst)">zwarich</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ggaren</cc>
    
    <cc>mjs</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>77721</commentid>
    <comment_count>0</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-04-15 13:40:55 -0700</bug_when>
    <thetext>This is the main blocker for the remaining SunSpider tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>77750</commentid>
    <comment_count>1</comment_count>
      <attachid>20572</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-04-15 17:28:02 -0700</bug_when>
    <thetext>Created attachment 20572
Patch in progress

Here is a patch that implements indirect eval. I will try to implement direct eval (which is more useful for SunSpider) shortly and upload a new patch soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>77753</commentid>
    <comment_count>2</comment_count>
      <attachid>20574</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-04-15 19:33:11 -0700</bug_when>
    <thetext>Created attachment 20574
Revised patch in progress

Here is a patch in progress that implements direct eval, except it doesn&apos;t pass in the correct variable object. It also has no error handling at all. I&apos;ll hopefully upload a new patch later that works as planned.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>77797</commentid>
    <comment_count>3</comment_count>
      <attachid>20586</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-04-16 09:05:22 -0700</bug_when>
    <thetext>Created attachment 20586
Revised patch in progress

Here&apos;s a patch now have support for direct eval. Since there is not necessarily a correct ScopeChain, I just had to change the eval Machine::execute method to take a ScopeChainNode* and it worked fine. All of the SunSpider tests now run, but I can&apos;t benchmark due to an existing SunSpider crash in copyRegisters(). Also, exception handling is still missing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>77806</commentid>
    <comment_count>4</comment_count>
      <attachid>20588</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-04-16 09:59:26 -0700</bug_when>
    <thetext>Created attachment 20588
Revised proposed patch

Here&apos;s a revised version of the patch that is a bit cleaner and implements some exception handling. It also fixes a stupid bug in the last patch, and now 2 of the 3 SunSpider tests using eval crash. The date-format-tofte test calls getCallData() on a null pointer in one of the eval&apos;d calls. This one should be the easiest to debug. The string-tagcloud test dies in getPropertySlot().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>77860</commentid>
    <comment_count>5</comment_count>
      <attachid>20602</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-04-16 13:41:48 -0700</bug_when>
    <thetext>Created attachment 20602
Reduction of crash

This is a reduction of the date-format-tofte crash. The crash occurs in the lookup of f(). It no longer occurs if f() is made a global rather than a local, so my guess is that the variable is just being clobbered by something I am doing wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>77862</commentid>
    <comment_count>6</comment_count>
      <attachid>20588</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-04-16 14:42:24 -0700</bug_when>
    <thetext>Comment on attachment 20588
Revised proposed patch

I haven&apos;t figured out the exact cause of the crash, but here are some preliminary comments on the patch:

+{
+    m_locals.resize(1);
+    addVar(m_propertyNames-&gt;thisIdentifier);
+}

There&apos;s no need to explicitly resize m_locals unless you want to place locals at arbitrary indices in m_locals, like addParameter does. Since you&apos;re just using addVar, which appends to m_locals, you can leave the resize call out.

+JSValue* Machine::execute(EvalNode* evalNode, ExecState* exec, RegisterFileStack* registerFileStack, ScopeChainNode* scopeChain, JSValue** exception)
+{
+    RegisterFile* registerFile = registerFileStack-&gt;pushRegisterFile();
+

pushRegisterFile is a heavy-weight operation meant to enable declaration of new global symbols during re-entrant evaluation of global code. Eval doesn&apos;t declare any symbols, and it isn&apos;t guaranteed to execute in global scope, either, so it shouldn&apos;t use pushRegisterFile. It should just move &quot;r&quot;, like a function call does, to create a new register frame.

Be sure to shrink the register file to its old size before returning. Otherwise, repeated calls to eval will cause the register file to grow without bound. (Maciej just fixed a similar bug for function calls.)

There sure is a lot of duplicated code between op_call and op_eval. I hope we can figure out how to eliminate that duplication, or at least move the duplicated code into a shared ALWAYS_INLINE or template function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>77863</commentid>
    <comment_count>7</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-04-16 14:44:39 -0700</bug_when>
    <thetext>...also, as we discussed on IRC, it&apos;s not appropriate for eval to use the global object&apos;s symbol table. Eval should just create its own symbol table, with one entry: &quot;this&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>77872</commentid>
    <comment_count>8</comment_count>
      <attachid>20607</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-04-16 16:49:09 -0700</bug_when>
    <thetext>Created attachment 20607
Revised patch in progress

Here is a patch incorporating Geoff&apos;s comments. It fixes the crash in date-format-tofte in a debug build. In a release build, it eventually crashes, but it is seemingly generating the correct output until it crashes. The date-format-xparb test runs fine in both Debug and Release, and the string-tagcloud test crashes.

I had to disable indirect eval, because I am not sure how to get the all of the register information so I can do things without RegisterFileStack. The value of &apos;this&apos; is also not set correctly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>77877</commentid>
    <comment_count>9</comment_count>
      <attachid>20608</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-04-16 17:22:51 -0700</bug_when>
    <thetext>Created attachment 20608
Revised patch in progress

Here is a patch incorporating the things we talked about on IRC. It fixes the crash in date-format-tofte, so now both the date tests run fine and give correct results. The string-tagcloud test still crashes. I&apos;ll add global eval again with our new scheme, and have another patch shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>77879</commentid>
    <comment_count>10</comment_count>
      <attachid>20609</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-04-16 17:49:53 -0700</bug_when>
    <thetext>Created attachment 20609
Revised patch in progress

Here is the latest patch. I reimplemented indirect eval in a manner similar to JS -&gt; native -&gt; JS function calls. The only things missing featurewise are setting the correct value of &apos;this&apos;, throwing exceptions on syntax errors (which I will add in the next patch), and propagating exceptions from an eval context to the current context (I think I know how to do this properly, but Oliver volunteered to do it after I am finished with this patch).

Maciej and I are debugging the string-tagcloud crash. At this point, it looks like it is probably a ScopeChain GC problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>77882</commentid>
    <comment_count>11</comment_count>
      <attachid>20610</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-04-16 19:12:11 -0700</bug_when>
    <thetext>Created attachment 20610
Revised patch in progress

Here&apos;s the latest. Since Maciej landed his GC patch, it now runs all SunSpider tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>77884</commentid>
    <comment_count>12</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-04-16 21:23:12 -0700</bug_when>
    <thetext>I tried the following gcc options, with no measurable gain:

--param max-goto-duplication-insns=80 --param max-reload-search-insns=1000 --param max-cselib-memory-locations=5000 --param max-sched-region-blocks=100 --param max-sched-region-insns=1000 --param max-last-value-rtl=100000 --param max-cse-path-length=100 --param max-delay-slot-insn-search=500</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>77893</commentid>
    <comment_count>13</comment_count>
      <attachid>20613</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-04-16 22:45:18 -0700</bug_when>
    <thetext>Created attachment 20613
patch

I think this patch is almost ready to land. I measure no substantial sunspider regression.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>77894</commentid>
    <comment_count>14</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-04-16 22:46:39 -0700</bug_when>
    <thetext>By the way, I&apos;m pretty sure this change

-            r[argv].u.jsValue = r2 == missingSymbolMarker() ? jsNull() : (r[r2].u.jsValue)-&gt;toObject(exec); // &quot;this&quot; value
+            r[argv].u.jsValue = r2 == missingSymbolMarker() ? exec-&gt;lexicalGlobalObject() : (r[r2].u.jsValue)-&gt;toObject(exec); // &quot;this&quot; value

has a performance cost. We might want to figure out a way to land it separately.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>77896</commentid>
    <comment_count>15</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-04-16 23:55:54 -0700</bug_when>
    <thetext>(In reply to comment #14)

I measured, and the cost to that change seems to be 11ms, or .5%. So yeah, we should land it separately. (Maciej and I came up with an idea for how to do &quot;this&quot; object transmutation lazily, to avoid the slowdown.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>77897</commentid>
    <comment_count>16</comment_count>
      <attachid>20614</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-04-16 23:58:33 -0700</bug_when>
    <thetext>Created attachment 20614
patch

Added support for &quot;this&quot; inside eval. Removed the performance-sensitive line of code I mentioned above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>77898</commentid>
    <comment_count>17</comment_count>
      <attachid>20615</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-04-17 00:08:30 -0700</bug_when>
    <thetext>Created attachment 20615
patch

Added support for throwing an exception after a syntax error (doesn&apos;t seem to be a regression anymore).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>77899</commentid>
    <comment_count>18</comment_count>
      <attachid>20616</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-04-17 01:01:04 -0700</bug_when>
    <thetext>Created attachment 20616
patch

Cleaned up some naming, fixed compilation in the switch case. Not perfect, but I think this might be ready to land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>77932</commentid>
    <comment_count>19</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-04-17 07:16:05 -0700</bug_when>
    <thetext>I can confirm that there is no performance difference on my machine with networking on. I&apos;ll try to use the correct value for &apos;this&apos; and throw a syntax error (the hardest part is formatting it). I have to proctor and mark an exam later today, so I&apos;ll post what I get and hand it off to somebody else.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>77933</commentid>
    <comment_count>20</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-04-17 07:33:32 -0700</bug_when>
    <thetext>Doh, the mornings can be slow. I should really read all of Geoff&apos;s posts before posting myself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>77943</commentid>
    <comment_count>21</comment_count>
      <attachid>20630</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-04-17 09:53:44 -0700</bug_when>
    <thetext>Created attachment 20630
patch

Since the patch worked for Cameron, I think I&apos;ll put it up for review.

New changes in this version: Fixed exception propagation from &quot;this.eval&quot;. Changed eval codegen to use resolve_base_and_func instead of resolve_base_and_property, so &quot;this&quot; is right if eval is declared as a local in a function. Renamed emitEval to emitCallEval, to match the earlier opcode rename I did.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>77992</commentid>
    <comment_count>22</comment_count>
      <attachid>20630</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-04-17 14:05:51 -0700</bug_when>
    <thetext>Comment on attachment 20630
patch

The indirect goto hack makes me cry :(

I wouldn&apos;t mind an ASSERT(!exec-&gt;dynamicGlobalObject()-&gt;debugger()) 
 
in globalFuncEval</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>77993</commentid>
    <comment_count>23</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-04-17 14:08:22 -0700</bug_when>
    <thetext>Committed revision 32013.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>20572</attachid>
            <date>2008-04-15 17:28:02 -0700</date>
            <delta_ts>2008-04-15 19:33:11 -0700</delta_ts>
            <desc>Patch in progress</desc>
            <filename>eval.diff</filename>
            <type>text/plain</type>
            <size>8064</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IFZNL0NvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFZNL0NvZGVHZW5lcmF0
b3IuY3BwCShyZXZpc2lvbiAzMTkxMCkKKysrIFZNL0NvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTMsNyArMTEzLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAqLwogCiAjaWZuZGVm
IE5ERUJVRwotYm9vbCBDb2RlR2VuZXJhdG9yOjpzX2R1bXBzR2VuZXJhdGVkQ29kZSA9IGZhbHNl
OworYm9vbCBDb2RlR2VuZXJhdG9yOjpzX2R1bXBzR2VuZXJhdGVkQ29kZSA9IHRydWU7CiAjZW5k
aWYKIAogdm9pZCBDb2RlR2VuZXJhdG9yOjpzZXREdW1wc0dlbmVyYXRlZENvZGUoYm9vbCBkdW1w
c0dlbmVyYXRlZENvZGUpCkBAIC0xNjAsNiArMTYwLDcgQEAgQ29kZUdlbmVyYXRvcjo6Q29kZUdl
bmVyYXRvcihQcm9ncmFtTm9kZQogICAgICwgbV9zY29wZU5vZGUocHJvZ3JhbU5vZGUpCiAgICAg
LCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCiAgICAgLCBtX3Njb3BlRGVwdGgoMCkKKyAgICAsIG1f
aXNFdmFsQ29kZShmYWxzZSkKICAgICAsIG1fbmV4dFZhcigtMSkKICAgICAsIG1fcHJvcGVydHlO
YW1lcyhDb21tb25JZGVudGlmaWVyczo6c2hhcmVkKCkpCiAKQEAgLTIwMSw2ICsyMDIsNyBAQCBD
b2RlR2VuZXJhdG9yOjpDb2RlR2VuZXJhdG9yKEZ1bmN0aW9uQm9kCiAgICAgLCBtX3Njb3BlTm9k
ZShmdW5jdGlvbkJvZHkpCiAgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCiAgICAgLCBtX3Nj
b3BlRGVwdGgoMCkKKyAgICAsIG1faXNFdmFsQ29kZShmYWxzZSkKICAgICAsIG1fbmV4dFZhcigt
MSkKICAgICAsIG1fcHJvcGVydHlOYW1lcyhDb21tb25JZGVudGlmaWVyczo6c2hhcmVkKCkpCiB7
CkBAIC0yMzEsNiArMjMzLDIwIEBAIENvZGVHZW5lcmF0b3I6OkNvZGVHZW5lcmF0b3IoRnVuY3Rp
b25Cb2QKICAgICB9CiB9CiAKK0NvZGVHZW5lcmF0b3I6OkNvZGVHZW5lcmF0b3IoRXZhbE5vZGUq
IGV2YWxOb2RlLCBjb25zdCBTY29wZUNoYWluJiBzY29wZUNoYWluLCBTeW1ib2xUYWJsZSogc3lt
Ym9sVGFibGUsIENvZGVCbG9jayogY29kZUJsb2NrKQorICAgIDogbV9zY29wZUNoYWluKCZzY29w
ZUNoYWluKQorICAgICwgbV9zeW1ib2xUYWJsZShzeW1ib2xUYWJsZSkKKyAgICAsIG1fc2NvcGVO
b2RlKGV2YWxOb2RlKQorICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQorICAgICwgbV9zY29w
ZURlcHRoKDApCisgICAgLCBtX2lzRXZhbENvZGUodHJ1ZSkKKyAgICAsIG1fbmV4dFZhcigtMSkK
KyAgICAsIG1fcHJvcGVydHlOYW1lcyhDb21tb25JZGVudGlmaWVyczo6c2hhcmVkKCkpCit7Cisg
ICAgbV9sb2NhbHMucmVzaXplKDEpOworICAgIGFkZFZhcihtX3Byb3BlcnR5TmFtZXMtPnRoaXNJ
ZGVudGlmaWVyKTsKK30KKwogdm9pZCBDb2RlR2VuZXJhdG9yOjphZGRQYXJhbWV0ZXIoY29uc3Qg
SWRlbnRpZmllciYgaWRlbnQpCiB7CiAgICAgLy8gUGFyYW1ldGVycyBvdmVyd3JpdGUgdmFyIGRl
Y2xhcmF0aW9ucywgYnV0IG5vdCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMsCkluZGV4OiBWTS9Db2Rl
R2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVk0vQ29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiAz
MTkxMCkKKysrIFZNL0NvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMs
NyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgCiAgICAgICAgIENvZGVHZW5lcmF0b3IoUHJv
Z3JhbU5vZGUqLCBjb25zdCBTY29wZUNoYWluJiwgU3ltYm9sVGFibGUqLCBDb2RlQmxvY2sqLCBW
YXJTdGFjayYsIEZ1bmN0aW9uU3RhY2smKTsKICAgICAgICAgQ29kZUdlbmVyYXRvcihGdW5jdGlv
bkJvZHlOb2RlKiwgY29uc3QgU2NvcGVDaGFpbiYsIFN5bWJvbFRhYmxlKiwgQ29kZUJsb2NrKiwg
VmFyU3RhY2smLCBGdW5jdGlvblN0YWNrJiwgVmVjdG9yPElkZW50aWZpZXI+JiBwYXJhbWV0ZXJz
KTsKKyAgICAgICAgQ29kZUdlbmVyYXRvcihFdmFsTm9kZSosIGNvbnN0IFNjb3BlQ2hhaW4mLCBT
eW1ib2xUYWJsZSosIENvZGVCbG9jayopOwogCiAgICAgICAgIGNvbnN0IENvbW1vbklkZW50aWZp
ZXJzJiBwcm9wZXJ0eU5hbWVzKCkgY29uc3QgeyByZXR1cm4gKm1fcHJvcGVydHlOYW1lczsgfQog
CkBAIC0yMjUsNyArMjI2LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIFN5bWJvbFRhYmxl
JiBzeW1ib2xUYWJsZSgpIHsgcmV0dXJuICptX3N5bWJvbFRhYmxlOyB9CiAgICAgICAgIFZlY3Rv
cjxIYW5kbGVySW5mbz4mIGV4Y2VwdGlvbkhhbmRsZXJzKCkgeyByZXR1cm4gbV9jb2RlQmxvY2st
PmV4Y2VwdGlvbkhhbmRsZXJzOyB9CiAgICAgICAgIAotICAgICAgICBib29sIHNob3VsZE9wdGlt
aXplTG9jYWxzKCkgeyByZXR1cm4gIW1fc2NvcGVEZXB0aDsgfQorICAgICAgICBib29sIHNob3Vs
ZE9wdGltaXplTG9jYWxzKCkgeyByZXR1cm4gIW1faXNFdmFsQ29kZSAmJiAhbV9zY29wZURlcHRo
OyB9CiAKICAgICAgICAgY29uc3QgU2NvcGVDaGFpbiogbV9zY29wZUNoYWluOwogICAgICAgICBT
eW1ib2xUYWJsZSogbV9zeW1ib2xUYWJsZTsKQEAgLTIzOSw2ICsyNDAsNyBAQCBuYW1lc3BhY2Ug
S0pTIHsKICAgICAgICAgVmVjdG9yPFJlZ2lzdGVySUQsIDEyOD4gbV90ZW1wb3JhcmllczsKICAg
ICAgICAgVmVjdG9yPExhYmVsSUQsIDEyOD4gbV9sYWJlbHM7CiAgICAgICAgIGludCBtX3Njb3Bl
RGVwdGg7CisgICAgICAgIGJvb2wgbV9pc0V2YWxDb2RlOwogICAgICAgICAKICAgICAgICAgVmVj
dG9yPEp1bXBDb250ZXh0PiBtX2p1bXBDb250ZXh0U3RhY2s7CiAKSW5kZXg6IFZNL01hY2hpbmUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFZNL01hY2hpbmUuY3BwCShyZXZpc2lvbiAzMTkxMCkKKysrIFZN
L01hY2hpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NDAsNiArNTQwLDIwIEBAIEpTVmFsdWUq
IE1hY2hpbmU6OmV4ZWN1dGUoRnVuY3Rpb25Cb2R5Tm8KICAgICByZXR1cm4gcHJpdmF0ZUV4ZWN1
dGUoTm9ybWFsLCBleGVjLCByZWdpc3RlckZpbGUsIHIsIHNjb3BlQ2hhaW4sIG5ld0NvZGVCbG9j
aywgZXhjZXB0aW9uKTsKIH0KIAorSlNWYWx1ZSogTWFjaGluZTo6ZXhlY3V0ZShFdmFsTm9kZSog
ZXZhbE5vZGUsIEV4ZWNTdGF0ZSogZXhlYywgUmVnaXN0ZXJGaWxlU3RhY2sqIHJlZ2lzdGVyRmls
ZVN0YWNrLCBTY29wZUNoYWluKiBzY29wZUNoYWluLCBKU1ZhbHVlKiogZXhjZXB0aW9uKQorewor
ICAgIFJlZ2lzdGVyRmlsZSogcmVnaXN0ZXJGaWxlID0gcmVnaXN0ZXJGaWxlU3RhY2stPnB1c2hS
ZWdpc3RlckZpbGUoKTsKKworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gJmV2YWxOb2RlLT5j
b2RlKHNjb3BlQ2hhaW4tPm5vZGUoKSk7CisgICAgcmVnaXN0ZXJGaWxlLT5ncm93KGNvZGVCbG9j
ay0+bnVtVGVtcG9yYXJpZXMpOworICAgIFJlZ2lzdGVyKiByID0gKCpyZWdpc3RlckZpbGUtPmJh
c2VQb2ludGVyKCkpOworCisgICAgSlNWYWx1ZSogcmVzdWx0ID0gcHJpdmF0ZUV4ZWN1dGUoTm9y
bWFsLCBleGVjLCByZWdpc3RlckZpbGUsIHIsIHNjb3BlQ2hhaW4tPm5vZGUoKSwgY29kZUJsb2Nr
LCBleGNlcHRpb24pOworCisgICAgcmVnaXN0ZXJGaWxlU3RhY2stPnBvcFJlZ2lzdGVyRmlsZSgp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVj
dXRlKEV4ZWN1dGlvbkZsYWcgZmxhZywgRXhlY1N0YXRlKiBleGVjLCBSZWdpc3RlckZpbGUqIHJl
Z2lzdGVyRmlsZSwgUmVnaXN0ZXIqIHIsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSoqIGV4Y2VwdGlvbikKIHsKICAgICAvLyBPbmUtdGlt
ZSBpbml0aWFsaXphdGlvbiBvZiBvdXIgYWRkcmVzcyB0YWJsZXMuIFdlIGhhdmUgdG8gcHV0IHRo
aXMgY29kZQpAQCAtMTEwOCw5ICsxMTIyLDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4
ZWN1dGUoRXhlY3V0aQogICAgICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOYXRpdmUpIHsK
ICAgICAgICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9IHIgLSAoKnJlZ2lzdGVyQmFzZSk7CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEZJWE1FOiBTdWJzdGl0dXRlIGxleGljYWwgZ2xv
YmFsIG9iamVjdCBmb3IgbnVsbC4KLQotICAgICAgICAgICAgclthcmd2XS51LmpzVmFsdWUgPSBy
MiA9PSBtaXNzaW5nU3ltYm9sTWFya2VyKCkgPyBqc051bGwoKSA6IChyW3IyXS51LmpzVmFsdWUp
LT50b09iamVjdChleGVjKTsgLy8gInRoaXMiIHZhbHVlCisgICAgICAgICAgICByW2FyZ3ZdLnUu
anNWYWx1ZSA9IHIyID09IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSA/IGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKSA6IChyW3IyXS51LmpzVmFsdWUpLT50b09iamVjdChleGVjKTsgLy8gInRoaXMi
IHZhbHVlCiAgICAgICAgICAgICBKU09iamVjdCogdGhpc09iaiA9IHN0YXRpY19jYXN0PEpTT2Jq
ZWN0Kj4oclthcmd2XS51LmpzVmFsdWUpOwogCiAgICAgICAgICAgICBMaXN0IGFyZ3MoJnJbYXJn
diArIDFdLnUuanNWYWx1ZSwgYXJnYyAtIDEpOwpJbmRleDogVk0vTWFjaGluZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFZNL01hY2hpbmUuaAkocmV2aXNpb24gMzE5MTApCisrKyBWTS9NYWNoaW5lLmgJKHdv
cmtpbmcgY29weSkKQEAgLTc4LDYgKzc4LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIAog
ICAgICAgICBKU1ZhbHVlKiBleGVjdXRlKFByb2dyYW1Ob2RlKiwgRXhlY1N0YXRlKiwgUmVnaXN0
ZXJGaWxlU3RhY2sqLCBTY29wZUNoYWluKiwgSlNWYWx1ZSoqIGV4Y2VwdGlvbik7CiAgICAgICAg
IEpTVmFsdWUqIGV4ZWN1dGUoRnVuY3Rpb25Cb2R5Tm9kZSosIGNvbnN0IExpc3QmIGFyZ3MsIEpT
T2JqZWN0KiB0aGlzT2JqLCBFeGVjU3RhdGUqLCBSZWdpc3RlckZpbGVTdGFjayosIFNjb3BlQ2hh
aW4qLCBKU1ZhbHVlKiogZXhjZXB0aW9uKTsKKyAgICAgICAgSlNWYWx1ZSogZXhlY3V0ZShFdmFs
Tm9kZSosIEV4ZWNTdGF0ZSosIFJlZ2lzdGVyRmlsZVN0YWNrKiwgU2NvcGVDaGFpbiosIEpTVmFs
dWUqKiBleGNlcHRpb24pOwogICAgICAgICAKICAgICBwcml2YXRlOgogICAgICAgICB0eXBlZGVm
IGVudW0geyBOb3JtYWwsIEluaXRpYWxpemVBbmRSZXR1cm4gfSBFeGVjdXRpb25GbGFnOwpJbmRl
eDoga2pzL2Z1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvZnVuY3Rpb24uY3BwCShyZXZp
c2lvbiAzMTkxMCkKKysrIGtqcy9mdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5Niwy
MSArNjk2LDE1IEBAIEpTVmFsdWUqIGV2YWwoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTY28KICAg
ICBVU3RyaW5nIGVyck1zZzsKICAgICBSZWZQdHI8RXZhbE5vZGU+IGV2YWxOb2RlID0gcGFyc2Vy
KCkucGFyc2U8RXZhbE5vZGU+KFVTdHJpbmcoKSwgMCwgcy5kYXRhKCksIHMuc2l6ZSgpLCAmc291
cmNlSWQsICZlcnJMaW5lLCAmZXJyTXNnKTsKIAotICAgIERlYnVnZ2VyKiBkYmcgPSBleGVjLT5k
eW5hbWljR2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCk7Ci0gICAgaWYgKGRiZykgewotICAgICAg
ICBib29sIGNvbnQgPSBkYmctPnNvdXJjZVBhcnNlZChleGVjLCBzb3VyY2VJZCwgVVN0cmluZygp
LCBzLCAwLCBlcnJMaW5lLCBlcnJNc2cpOwotICAgICAgICBpZiAoIWNvbnQpCi0gICAgICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci0KICAgICBpZiAoIWV2YWxOb2RlKQogICAg
ICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvciwgZXJyTXNnLCBlcnJMaW5l
LCBzb3VyY2VJZCwgTlVMTCk7CiAKICAgICBFdmFsRXhlY1N0YXRlIG5ld0V4ZWMoZ2xvYmFsT2Jq
ZWN0LCB0aGlzT2JqLCBldmFsTm9kZS5nZXQoKSwgZXhlYywgc2NvcGVDaGFpbiwgdmFyaWFibGVP
YmplY3QpOwotCi0gICAgSlNWYWx1ZSogdmFsdWUgPSBldmFsTm9kZS0+ZXhlY3V0ZSgmbmV3RXhl
Yyk7Ci0KLSAgICBpZiAobmV3RXhlYy5jb21wbGV0aW9uVHlwZSgpID09IFRocm93KSB7CisgICAg
CisgICAgSlNWYWx1ZSogZXhjZXB0aW9uID0gMDsKKyAgICBKU1ZhbHVlKiB2YWx1ZSA9IG1hY2hp
bmUoKS5leGVjdXRlKGV2YWxOb2RlLmdldCgpLCAmbmV3RXhlYywgJm5ld0V4ZWMuZHluYW1pY0ds
b2JhbE9iamVjdCgpLT5yZWdpc3RlckZpbGVTdGFjaygpLCAmbmV3RXhlYy5zY29wZUNoYWluKCks
ICZleGNlcHRpb24pOworICAgIAorICAgIGlmIChleGNlcHRpb24pIHsKICAgICAgICAgZXhlYy0+
c2V0RXhjZXB0aW9uKHZhbHVlKTsKICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgIH0KSW5kZXg6
IGtqcy9ub2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL25vZGVzLmNwcAkocmV2aXNpb24gMzE5
MTApCisrKyBranMvbm9kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTk0LDYgKzU1OTQsMTUg
QEAgRXZhbE5vZGU6On5FdmFsTm9kZSgpCiB7CiB9CiAKK1JlZ2lzdGVySUQqIEV2YWxOb2RlOjpl
bWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqKQoreworICAgIFJl
Z2lzdGVySUQqIHIwID0gc3RhdGVtZW50TGlzdEVtaXRDb2RlKG1fY2hpbGRyZW4sIGdlbmVyYXRv
cik7CisgICAgaWYgKCFyMCkKKyAgICAgICAgcjAgPSBnZW5lcmF0b3IuZW1pdExvYWQoZ2VuZXJh
dG9yLm5ld1RlbXBvcmFyeSgpLCBqc1VuZGVmaW5lZCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdEVu
ZChyMCk7CisgICAgcmV0dXJuIDA7Cit9CisKIHZvaWQgRXZhbE5vZGU6OmdlbmVyYXRlQ29kZShT
Y29wZUNoYWluTm9kZSogc2MpCiB7CiAgICAgU2NvcGVDaGFpbiBzY29wZUNoYWluKHNjKTsKQEAg
LTU2MDIsNyArNTYxMSwxMCBAQCB2b2lkIEV2YWxOb2RlOjpnZW5lcmF0ZUNvZGUoU2NvcGVDaGFp
bk5vCiAgICAgCiAgICAgbV9jb2RlLnNldChuZXcgUHJvZ3JhbUNvZGVCbG9jayh1c2VzRXZhbCgp
LCBuZWVkc0Nsb3N1cmUoKSwgZ2xvYmFsT2JqZWN0KSk7CiAgICAgCi0gICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgQ29kZUdlbmVyYXRvciBnZW5lcmF0b3IodGhpcywgc2NvcGVDaGFpbiwg
Jmdsb2JhbE9iamVjdC0+c3ltYm9sVGFibGUoKSwgbV9jb2RlLmdldCgpKTsKKyAgICBnZW5lcmF0
b3IuZ2VuZXJhdGUoKTsKKworICAgIG1fY2hpbGRyZW4uc2hyaW5rQ2FwYWNpdHkoMCk7CiB9CiAK
IEV2YWxOb2RlKiBFdmFsTm9kZTo6Y3JlYXRlKFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFy
U3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIGJvb2wgdXNlc0V2YWws
IGJvb2wgbmVlZHNDbG9zdXJlKQpJbmRleDoga2pzL25vZGVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pz
L25vZGVzLmgJKHJldmlzaW9uIDMxOTEwKQorKysga2pzL25vZGVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI5OTAsNiArMjk5MCw3IEBAIG5hbWVzcGFjZSBLSlMgewogCiAgICAgICAgIEFMV0FZU19J
TkxJTkUgdm9pZCBwcm9jZXNzRGVjbGFyYXRpb25zKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7
CiAgICAgICAgIHZvaWQgZ2VuZXJhdGVDb2RlKFNjb3BlQ2hhaW5Ob2RlKikgS0pTX0ZBU1RfQ0FM
TDsKKyAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwg
UmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwogCiAgICAgICAgIE93blB0cjxQcm9ncmFt
Q29kZUJsb2NrPiBtX2NvZGU7CiAgICAgfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>20574</attachid>
            <date>2008-04-15 19:33:11 -0700</date>
            <delta_ts>2008-04-16 09:05:22 -0700</delta_ts>
            <desc>Revised patch in progress</desc>
            <filename>eval.diff</filename>
            <type>text/plain</type>
            <size>16059</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IFZNL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVk0vQ29kZUJsb2NrLmNwcAko
cmV2aXNpb24gMzE5MTApCisrKyBWTS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MzAsNiArNDMwLDE1IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYywgY28K
ICAgICAgICAgICAgIHByaW50ZigiWyU0ZF0gY2FsbFx0XHQlcywgJXMsICVzLCAlZCwgJWRcbiIs
IGxvY2F0aW9uLCByZWdpc3Rlck5hbWUocjApLmNfc3RyKCksIHJlZ2lzdGVyTmFtZShyMSkuY19z
dHIoKSwgcmVnaXN0ZXJOYW1lKHIyKS5jX3N0cigpLCB0ZW1wQ291bnQsIGFyZ0NvdW50KTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZXZhbDogeworICAg
ICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEg
PSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMiA9ICgrK2l0KS0+dS5vcGVy
YW5kOworICAgICAgICAgICAgaW50IHRlbXBDb3VudCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAg
ICAgICAgICAgaW50IGFyZ0NvdW50ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBw
cmludGYoIlslNGRdIGV2YWxcdFx0JXMsICVzLCAlcywgJWQsICVkXG4iLCBsb2NhdGlvbiwgcmVn
aXN0ZXJOYW1lKHIwKS5jX3N0cigpLCByZWdpc3Rlck5hbWUocjEpLmNfc3RyKCksIHJlZ2lzdGVy
TmFtZShyMikuY19zdHIoKSwgdGVtcENvdW50LCBhcmdDb3VudCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQogICAgICAgICBjYXNlIG9wX3JldDogewogICAgICAgICAgICAgaW50IHIw
ID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBwcmludGYoIlslNGRdIHJldFx0XHQl
c1xuIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShyMCkuY19zdHIoKSk7CkluZGV4OiBWTS9Db2Rl
R2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBWTS9Db2RlR2VuZXJhdG9yLmNwcAkocmV2aXNp
b24gMzE5MTApCisrKyBWTS9Db2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEz
LDcgKzExMyw3IEBAIG5hbWVzcGFjZSBLSlMgewogKi8KIAogI2lmbmRlZiBOREVCVUcKLWJvb2wg
Q29kZUdlbmVyYXRvcjo6c19kdW1wc0dlbmVyYXRlZENvZGUgPSBmYWxzZTsKK2Jvb2wgQ29kZUdl
bmVyYXRvcjo6c19kdW1wc0dlbmVyYXRlZENvZGUgPSB0cnVlOwogI2VuZGlmCiAKIHZvaWQgQ29k
ZUdlbmVyYXRvcjo6c2V0RHVtcHNHZW5lcmF0ZWRDb2RlKGJvb2wgZHVtcHNHZW5lcmF0ZWRDb2Rl
KQpAQCAtMTYwLDYgKzE2MCw3IEBAIENvZGVHZW5lcmF0b3I6OkNvZGVHZW5lcmF0b3IoUHJvZ3Jh
bU5vZGUKICAgICAsIG1fc2NvcGVOb2RlKHByb2dyYW1Ob2RlKQogICAgICwgbV9jb2RlQmxvY2so
Y29kZUJsb2NrKQogICAgICwgbV9zY29wZURlcHRoKDApCisgICAgLCBtX2lzRXZhbENvZGUoZmFs
c2UpCiAgICAgLCBtX25leHRWYXIoLTEpCiAgICAgLCBtX3Byb3BlcnR5TmFtZXMoQ29tbW9uSWRl
bnRpZmllcnM6OnNoYXJlZCgpKQogCkBAIC0yMDEsNiArMjAyLDcgQEAgQ29kZUdlbmVyYXRvcjo6
Q29kZUdlbmVyYXRvcihGdW5jdGlvbkJvZAogICAgICwgbV9zY29wZU5vZGUoZnVuY3Rpb25Cb2R5
KQogICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQogICAgICwgbV9zY29wZURlcHRoKDApCisg
ICAgLCBtX2lzRXZhbENvZGUoZmFsc2UpCiAgICAgLCBtX25leHRWYXIoLTEpCiAgICAgLCBtX3By
b3BlcnR5TmFtZXMoQ29tbW9uSWRlbnRpZmllcnM6OnNoYXJlZCgpKQogewpAQCAtMjMxLDYgKzIz
MywyMCBAQCBDb2RlR2VuZXJhdG9yOjpDb2RlR2VuZXJhdG9yKEZ1bmN0aW9uQm9kCiAgICAgfQog
fQogCitDb2RlR2VuZXJhdG9yOjpDb2RlR2VuZXJhdG9yKEV2YWxOb2RlKiBldmFsTm9kZSwgY29u
c3QgU2NvcGVDaGFpbiYgc2NvcGVDaGFpbiwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaykKKyAgICA6IG1fc2NvcGVDaGFpbigmc2NvcGVDaGFpbikKKyAgICAs
IG1fc3ltYm9sVGFibGUoc3ltYm9sVGFibGUpCisgICAgLCBtX3Njb3BlTm9kZShldmFsTm9kZSkK
KyAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKKyAgICAsIG1fc2NvcGVEZXB0aCgwKQorICAg
ICwgbV9pc0V2YWxDb2RlKHRydWUpCisgICAgLCBtX25leHRWYXIoLTEpCisgICAgLCBtX3Byb3Bl
cnR5TmFtZXMoQ29tbW9uSWRlbnRpZmllcnM6OnNoYXJlZCgpKQoreworICAgIG1fbG9jYWxzLnJl
c2l6ZSgxKTsKKyAgICBhZGRWYXIobV9wcm9wZXJ0eU5hbWVzLT50aGlzSWRlbnRpZmllcik7Cit9
CisKIHZvaWQgQ29kZUdlbmVyYXRvcjo6YWRkUGFyYW1ldGVyKGNvbnN0IElkZW50aWZpZXImIGlk
ZW50KQogewogICAgIC8vIFBhcmFtZXRlcnMgb3ZlcndyaXRlIHZhciBkZWNsYXJhdGlvbnMsIGJ1
dCBub3QgZnVuY3Rpb24gZGVjbGFyYXRpb25zLApAQCAtNzkwLDYgKzgwNiwzNCBAQCBSZWdpc3Rl
cklEKiBDb2RlR2VuZXJhdG9yOjplbWl0Q2FsbChSZWdpCiAgICAgcmV0dXJuIHIwOwogfQogCitS
ZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0RXZhbChSZWdpc3RlcklEKiByMCwgUmVnaXN0
ZXJJRCogcjEsIFJlZ2lzdGVySUQqIHIyLCBBcmd1bWVudHNOb2RlKiBhcmd1bWVudHNOb2RlKQor
eworICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZWYxID0gcjE7CisgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IHJlZjIgPSByMjsKKyAgICAKKyAgICAvLyBSZXNlcnZlIHNwYWNlIGZvciBjYWxsIGZyYW1l
LCBldmVuIHRob3VnaCB3ZSBtYXkgbm90IG5lZWQgaXQgZm9yIGV2YWwKKyAgICBWZWN0b3I8UmVm
UHRyPFJlZ2lzdGVySUQ+LCBNYWNoaW5lOjpDYWxsRnJhbWVIZWFkZXJTaXplPiBjYWxsRnJhbWU7
CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNYWNoaW5lOjpDYWxsRnJhbWVIZWFkZXJTaXplOyAr
K2kpCisgICAgICAgIGNhbGxGcmFtZS5hcHBlbmQobmV3VGVtcG9yYXJ5KCkpOworCisgICAgLy8g
R2VuZXJhdGUgY29kZSBmb3IgYXJndW1lbnRzLgorICAgIFZlY3RvcjxSZWZQdHI8UmVnaXN0ZXJJ
RD4sIDE2PiBhcmd2OworICAgIGFyZ3YuYXBwZW5kKG5ld1RlbXBvcmFyeSgpKTsgLy8gcmVzZXJ2
ZSBzcGFjZSBmb3IgInRoaXMiCisgICAgZm9yIChBcmd1bWVudExpc3ROb2RlKiBuID0gYXJndW1l
bnRzTm9kZS0+bV9saXN0Tm9kZS5nZXQoKTsgbjsgbiA9IG4tPm1fbmV4dC5nZXQoKSkgeworICAg
ICAgICBhcmd2LmFwcGVuZChuZXdUZW1wb3JhcnkoKSk7CisgICAgICAgIGVtaXROb2RlKGFyZ3Yu
bGFzdCgpLmdldCgpLCBuKTsKKyAgICB9CisKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobWFj
aGluZSgpLmdldE9wY29kZShvcF9ldmFsKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHIw
LT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocjEtPmluZGV4KCkpOworICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChyMi0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKGFyZ3Yuc2l6ZSgpID8gYXJndlswXS0+aW5kZXgoKSA6IG1fdGVtcG9yYXJpZXMuc2l6
ZSgpKTsgLy8gYXJndgorICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhcmd2LnNpemUoKSk7IC8v
IGFyZ2MKKworICAgIHJldHVybiByMDsKK30KKwogUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6
ZW1pdFJldHVybihSZWdpc3RlcklEKiByMCkKIHsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
bWFjaGluZSgpLmdldE9wY29kZShvcF9yZXQpKTsKSW5kZXg6IFZNL0NvZGVHZW5lcmF0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBWTS9Db2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDMxOTEwKQorKysgVk0v
Q29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw2ICs2Myw3IEBAIG5hbWVzcGFj
ZSBLSlMgewogICAgICAgICAKICAgICAgICAgQ29kZUdlbmVyYXRvcihQcm9ncmFtTm9kZSosIGNv
bnN0IFNjb3BlQ2hhaW4mLCBTeW1ib2xUYWJsZSosIENvZGVCbG9jayosIFZhclN0YWNrJiwgRnVu
Y3Rpb25TdGFjayYpOwogICAgICAgICBDb2RlR2VuZXJhdG9yKEZ1bmN0aW9uQm9keU5vZGUqLCBj
b25zdCBTY29wZUNoYWluJiwgU3ltYm9sVGFibGUqLCBDb2RlQmxvY2sqLCBWYXJTdGFjayYsIEZ1
bmN0aW9uU3RhY2smLCBWZWN0b3I8SWRlbnRpZmllcj4mIHBhcmFtZXRlcnMpOworICAgICAgICBD
b2RlR2VuZXJhdG9yKEV2YWxOb2RlKiwgY29uc3QgU2NvcGVDaGFpbiYsIFN5bWJvbFRhYmxlKiwg
Q29kZUJsb2NrKik7CiAKICAgICAgICAgY29uc3QgQ29tbW9uSWRlbnRpZmllcnMmIHByb3BlcnR5
TmFtZXMoKSBjb25zdCB7IHJldHVybiAqbV9wcm9wZXJ0eU5hbWVzOyB9CiAKQEAgLTE2Myw2ICsx
NjQsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFB1dFByb3BJ
bmRleChSZWdpc3RlcklEKiBiYXNlLCB1bnNpZ25lZCBpbmRleCwgUmVnaXN0ZXJJRCogdmFsKTsK
IAogICAgICAgICBSZWdpc3RlcklEKiBlbWl0Q2FsbChSZWdpc3RlcklEKiwgUmVnaXN0ZXJJRCos
IFJlZ2lzdGVySUQqLCBBcmd1bWVudHNOb2RlKik7CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRF
dmFsKFJlZ2lzdGVySUQqLCBSZWdpc3RlcklEKiwgUmVnaXN0ZXJJRCosIEFyZ3VtZW50c05vZGUq
KTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFJldHVybihSZWdpc3RlcklEKik7CiAgICAgICAg
IFJlZ2lzdGVySUQqIGVtaXRFbmQoUmVnaXN0ZXJJRCopOwogCkBAIC0yMjUsNyArMjI3LDcgQEAg
bmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSgpIHsgcmV0
dXJuICptX3N5bWJvbFRhYmxlOyB9CiAgICAgICAgIFZlY3RvcjxIYW5kbGVySW5mbz4mIGV4Y2Vw
dGlvbkhhbmRsZXJzKCkgeyByZXR1cm4gbV9jb2RlQmxvY2stPmV4Y2VwdGlvbkhhbmRsZXJzOyB9
CiAgICAgICAgIAotICAgICAgICBib29sIHNob3VsZE9wdGltaXplTG9jYWxzKCkgeyByZXR1cm4g
IW1fc2NvcGVEZXB0aDsgfQorICAgICAgICBib29sIHNob3VsZE9wdGltaXplTG9jYWxzKCkgeyBy
ZXR1cm4gIW1faXNFdmFsQ29kZSAmJiAhbV9zY29wZURlcHRoOyB9CiAKICAgICAgICAgY29uc3Qg
U2NvcGVDaGFpbiogbV9zY29wZUNoYWluOwogICAgICAgICBTeW1ib2xUYWJsZSogbV9zeW1ib2xU
YWJsZTsKQEAgLTIzOSw2ICsyNDEsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgVmVjdG9y
PFJlZ2lzdGVySUQsIDEyOD4gbV90ZW1wb3JhcmllczsKICAgICAgICAgVmVjdG9yPExhYmVsSUQs
IDEyOD4gbV9sYWJlbHM7CiAgICAgICAgIGludCBtX3Njb3BlRGVwdGg7CisgICAgICAgIGJvb2wg
bV9pc0V2YWxDb2RlOwogICAgICAgICAKICAgICAgICAgVmVjdG9yPEp1bXBDb250ZXh0PiBtX2p1
bXBDb250ZXh0U3RhY2s7CiAKSW5kZXg6IFZNL01hY2hpbmUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFZN
L01hY2hpbmUuY3BwCShyZXZpc2lvbiAzMTkxMCkKKysrIFZNL01hY2hpbmUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01NDAsNiArNTQwLDIwIEBAIEpTVmFsdWUqIE1hY2hpbmU6OmV4ZWN1dGUoRnVu
Y3Rpb25Cb2R5Tm8KICAgICByZXR1cm4gcHJpdmF0ZUV4ZWN1dGUoTm9ybWFsLCBleGVjLCByZWdp
c3RlckZpbGUsIHIsIHNjb3BlQ2hhaW4sIG5ld0NvZGVCbG9jaywgZXhjZXB0aW9uKTsKIH0KIAor
SlNWYWx1ZSogTWFjaGluZTo6ZXhlY3V0ZShFdmFsTm9kZSogZXZhbE5vZGUsIEV4ZWNTdGF0ZSog
ZXhlYywgUmVnaXN0ZXJGaWxlU3RhY2sqIHJlZ2lzdGVyRmlsZVN0YWNrLCBTY29wZUNoYWluKiBz
Y29wZUNoYWluLCBKU1ZhbHVlKiogZXhjZXB0aW9uKQoreworICAgIFJlZ2lzdGVyRmlsZSogcmVn
aXN0ZXJGaWxlID0gcmVnaXN0ZXJGaWxlU3RhY2stPnB1c2hSZWdpc3RlckZpbGUoKTsKKworICAg
IENvZGVCbG9jayogY29kZUJsb2NrID0gJmV2YWxOb2RlLT5jb2RlKHNjb3BlQ2hhaW4tPm5vZGUo
KSk7CisgICAgcmVnaXN0ZXJGaWxlLT5ncm93KGNvZGVCbG9jay0+bnVtVGVtcG9yYXJpZXMpOwor
ICAgIFJlZ2lzdGVyKiByID0gKCpyZWdpc3RlckZpbGUtPmJhc2VQb2ludGVyKCkpOworCisgICAg
SlNWYWx1ZSogcmVzdWx0ID0gcHJpdmF0ZUV4ZWN1dGUoTm9ybWFsLCBleGVjLCByZWdpc3RlckZp
bGUsIHIsIHNjb3BlQ2hhaW4tPm5vZGUoKSwgY29kZUJsb2NrLCBleGNlcHRpb24pOworCisgICAg
cmVnaXN0ZXJGaWxlU3RhY2stPnBvcFJlZ2lzdGVyRmlsZSgpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGlvbkZsYWcgZmxh
ZywgRXhlY1N0YXRlKiBleGVjLCBSZWdpc3RlckZpbGUqIHJlZ2lzdGVyRmlsZSwgUmVnaXN0ZXIq
IHIsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNW
YWx1ZSoqIGV4Y2VwdGlvbikKIHsKICAgICAvLyBPbmUtdGltZSBpbml0aWFsaXphdGlvbiBvZiBv
dXIgYWRkcmVzcyB0YWJsZXMuIFdlIGhhdmUgdG8gcHV0IHRoaXMgY29kZQpAQCAtMTEwOCw5ICsx
MTIyLDk3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAg
ICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlTmF0aXZlKSB7CiAgICAgICAgICAgICBpbnQgcmVn
aXN0ZXJPZmZzZXQgPSByIC0gKCpyZWdpc3RlckJhc2UpOwogICAgICAgICAgICAgCi0gICAgICAg
ICAgICAvLyBGSVhNRTogU3Vic3RpdHV0ZSBsZXhpY2FsIGdsb2JhbCBvYmplY3QgZm9yIG51bGwu
CisgICAgICAgICAgICByW2FyZ3ZdLnUuanNWYWx1ZSA9IHIyID09IG1pc3NpbmdTeW1ib2xNYXJr
ZXIoKSA/IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSA6IChyW3IyXS51LmpzVmFsdWUpLT50
b09iamVjdChleGVjKTsgLy8gInRoaXMiIHZhbHVlCisgICAgICAgICAgICBKU09iamVjdCogdGhp
c09iaiA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oclthcmd2XS51LmpzVmFsdWUpOworCisgICAg
ICAgICAgICBMaXN0IGFyZ3MoJnJbYXJndiArIDFdLnUuanNWYWx1ZSwgYXJnYyAtIDEpOworCisg
ICAgICAgICAgICBKU1ZhbHVlKiByZXR1cm5WYWx1ZSA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4o
diktPmNhbGxBc0Z1bmN0aW9uKGV4ZWMsIHRoaXNPYmosIGFyZ3MpOworCisgICAgICAgICAgICBy
ID0gKCpyZWdpc3RlckJhc2UpICsgcmVnaXN0ZXJPZmZzZXQ7CisgICAgICAgICAgICByW3IwXS51
LmpzVmFsdWUgPSByZXR1cm5WYWx1ZTsKKworICAgICAgICAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9O
KCk7CisKKyAgICAgICAgICAgICsrdlBDOworICAgICAgICAgICAgTkVYVF9PUENPREU7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBGSVhNRSB0aHJvdyB0eXBlIGVycm9yCisgICAgICAgIEFTU0VS
VChjYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpOworCisgICAgICAgIHZQQysrOworICAgICAgICBO
RVhUX09QQ09ERTsKKyAgICB9CisgICAgQkVHSU5fT1BDT0RFKG9wX2V2YWwpIHsKKyAgICAgICAg
aW50IHIwID0gKCsrdlBDKS0+dS5vcGVyYW5kOworICAgICAgICBpbnQgcjEgPSAoKyt2UEMpLT51
Lm9wZXJhbmQ7CisgICAgICAgIGludCByMiA9ICgrK3ZQQyktPnUub3BlcmFuZDsKKyAgICAgICAg
aW50IGFyZ3YgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CisgICAgICAgIGludCBhcmdjID0gKCsrdlBD
KS0+dS5vcGVyYW5kOworICAgICAgICAKKyAgICAgICAgSlNWYWx1ZSogdiA9IHJbcjFdLnUuanNW
YWx1ZTsKKyAgICAgICAgSlNWYWx1ZSogYmFzZSA9IHJbcjJdLnUuanNWYWx1ZTsKKyAgICAgICAg
CisgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOworICAgICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9
IHYtPmdldENhbGxEYXRhKGNhbGxEYXRhKTsKKyAgICAgICAgCisgICAgICAgIGlmIChiYXNlID09
IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSAmJiB2ID09IGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKS0+ZXZhbEZ1bmN0aW9uKCkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBkZWFsIHdp
dGggdGhlIGNhc2Ugd2hlcmUgbm8gYXJndW1lbnRzIGFyZSBwYXNzZWQKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgSlNWYWx1ZSogeCA9IHJbYXJndiArIDFdLnUuanNWYWx1ZTsKKworICAgICAg
ICAgICAgLy8gRklYTUU6IGRlYWwgd2l0aCB0aGUgY2FzZSB3aGVyZSB4IGlzIG5vdCBhIHN0cmlu
ZworCisgICAgICAgICAgICBVU3RyaW5nIHMgPSB4LT50b1N0cmluZyhleGVjKTsKKworICAgICAg
ICAgICAgaW50IHNvdXJjZUlkOworICAgICAgICAgICAgaW50IGVyckxpbmU7CisgICAgICAgICAg
ICBVU3RyaW5nIGVyck1zZzsKKyAgICAgICAgICAgIFJlZlB0cjxFdmFsTm9kZT4gZXZhbE5vZGUg
PSBwYXJzZXIoKS5wYXJzZTxFdmFsTm9kZT4oVVN0cmluZygpLCAwLCBzLmRhdGEoKSwgcy5zaXpl
KCksICZzb3VyY2VJZCwgJmVyckxpbmUsICZlcnJNc2cpOworCisgICAgICAgICAgICAvLyBGSVhN
RTogZGVhbCB3aXRoIGNhc2Ugd2hlcmUgZXZhbE5vZGUgaXMgbnVsbCwgc2lnbmFsbGluZyBhIHN5
bnRheCBlcnJvcgorCisgICAgICAgICAgICBFdmFsRXhlY1N0YXRlIG5ld0V4ZWMoZXhlYy0+ZHlu
YW1pY0dsb2JhbE9iamVjdCgpLCBleGVjLT50aGlzVmFsdWUoKSwgZXZhbE5vZGUuZ2V0KCksIGV4
ZWMsIGV4ZWMtPnNjb3BlQ2hhaW4oKSwgZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpKTsKKwor
ICAgICAgICAgICAgSlNWYWx1ZSogZXhjZXB0aW9uID0gMDsKKyAgICAgICAgICAgIEpTVmFsdWUq
IHZhbHVlID0gbWFjaGluZSgpLmV4ZWN1dGUoZXZhbE5vZGUuZ2V0KCksICZuZXdFeGVjLCAmbmV3
RXhlYy5keW5hbWljR2xvYmFsT2JqZWN0KCktPnJlZ2lzdGVyRmlsZVN0YWNrKCksICZuZXdFeGVj
LnNjb3BlQ2hhaW4oKSwgJmV4Y2VwdGlvbik7CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBkZWFs
IHdpdGggdGhlIGNhc2Ugd2hlcmUgdGhlIGV2YWwgcmFpc2VkIGFuIGV4Y2VwdGlvbgorCisgICAg
ICAgICAgICByZXR1cm4gdmFsdWUgPyB2YWx1ZSA6IGpzVW5kZWZpbmVkKCk7CiAKLSAgICAgICAg
ICAgIHJbYXJndl0udS5qc1ZhbHVlID0gcjIgPT0gbWlzc2luZ1N5bWJvbE1hcmtlcigpID8ganNO
dWxsKCkgOiAocltyMl0udS5qc1ZhbHVlKS0+dG9PYmplY3QoZXhlYyk7IC8vICJ0aGlzIiB2YWx1
ZQorICAgICAgICAgICAgcltyMF0udS5qc1ZhbHVlID0gdmFsdWUgPyB2YWx1ZSA6IGpzVW5kZWZp
bmVkKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICsrdlBDOworICAgICAgICAgICAgTkVY
VF9PUENPREU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEpTVmFsdWUqIHRoaXNWYWx1
ZSA9IGJhc2UtPnRvT2JqZWN0KGV4ZWMpLT5pc0FjdGl2YXRpb25PYmplY3QoKSA/IGV4ZWMtPmR5
bmFtaWNHbG9iYWxPYmplY3QoKSA6IGJhc2U7CisgICAgICAgIAorICAgICAgICBpZiAoY2FsbFR5
cGUgPT0gQ2FsbFR5cGVKUykgeworICAgICAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gciAt
ICgqcmVnaXN0ZXJCYXNlKTsKKyAgICAgICAgICAgIFJlZ2lzdGVyKiBjYWxsRnJhbWUgPSByICsg
YXJndiAtIENhbGxGcmFtZUhlYWRlclNpemU7CisKKyAgICAgICAgICAgIHJbYXJndl0udS5qc1Zh
bHVlID0gdGhpc1ZhbHVlOworICAgICAgICAgICAgaW5pdGlhbGl6ZUNhbGxGcmFtZShjYWxsRnJh
bWUsIGNvZGVCbG9jaywgdlBDLCBzY29wZUNoYWluLCByZWdpc3Rlck9mZnNldCwgcjAsIGFyZ3Ys
IDApOworCisgICAgICAgICAgICBTY29wZUNoYWluKiBjYWxsRGF0YVNjb3BlQ2hhaW4gPSBjYWxs
RGF0YS5qcy5zY29wZUNoYWluOworICAgICAgICAgICAgRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rp
b25Cb2R5Tm9kZSA9IGNhbGxEYXRhLmpzLmZ1bmN0aW9uQm9keTsKKworICAgICAgICAgICAgY29k
ZUJsb2NrID0gJmZ1bmN0aW9uQm9keU5vZGUtPmNvZGUoY2FsbERhdGFTY29wZUNoYWluLT5ub2Rl
KCkpOworICAgICAgICAgICAgciA9IHNsaWRlUmVnaXN0ZXJXaW5kb3dGb3JDYWxsKGNvZGVCbG9j
aywgcmVnaXN0ZXJGaWxlLCByZWdpc3RlckJhc2UsIHJlZ2lzdGVyT2Zmc2V0LCBhcmd2LCBhcmdj
KTsKKyAgICAgICAgICAgIHNjb3BlQ2hhaW4gPSBzY29wZUNoYWluRm9yQ2FsbChjb2RlQmxvY2ss
IGNhbGxEYXRhU2NvcGVDaGFpbiwgZnVuY3Rpb25Cb2R5Tm9kZSwgY2FsbEZyYW1lLCByZWdpc3Rl
ckJhc2UsIHIpOyAgICAgICAgICAgIAorICAgICAgICAgICAgayA9IGNvZGVCbG9jay0+anNWYWx1
ZXMuZGF0YSgpOworICAgICAgICAgICAgdlBDID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuYmVn
aW4oKTsKKworICAgICAgICAgICAgTkVYVF9PUENPREU7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOYXRpdmUpIHsKKyAgICAgICAgICAgIGludCByZWdpc3Rl
ck9mZnNldCA9IHIgLSAoKnJlZ2lzdGVyQmFzZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IHJbYXJndl0udS5qc1ZhbHVlID0gdGhpc1ZhbHVlOwogICAgICAgICAgICAgSlNPYmplY3QqIHRo
aXNPYmogPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHJbYXJndl0udS5qc1ZhbHVlKTsKIAogICAg
ICAgICAgICAgTGlzdCBhcmdzKCZyW2FyZ3YgKyAxXS51LmpzVmFsdWUsIGFyZ2MgLSAxKTsKSW5k
ZXg6IFZNL01hY2hpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBWTS9NYWNoaW5lLmgJKHJldmlzaW9uIDMx
OTEwKQorKysgVk0vTWFjaGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw2ICs3OCw3IEBAIG5h
bWVzcGFjZSBLSlMgewogICAgICAgICAKICAgICAgICAgSlNWYWx1ZSogZXhlY3V0ZShQcm9ncmFt
Tm9kZSosIEV4ZWNTdGF0ZSosIFJlZ2lzdGVyRmlsZVN0YWNrKiwgU2NvcGVDaGFpbiosIEpTVmFs
dWUqKiBleGNlcHRpb24pOwogICAgICAgICBKU1ZhbHVlKiBleGVjdXRlKEZ1bmN0aW9uQm9keU5v
ZGUqLCBjb25zdCBMaXN0JiBhcmdzLCBKU09iamVjdCogdGhpc09iaiwgRXhlY1N0YXRlKiwgUmVn
aXN0ZXJGaWxlU3RhY2sqLCBTY29wZUNoYWluKiwgSlNWYWx1ZSoqIGV4Y2VwdGlvbik7CisgICAg
ICAgIEpTVmFsdWUqIGV4ZWN1dGUoRXZhbE5vZGUqLCBFeGVjU3RhdGUqLCBSZWdpc3RlckZpbGVT
dGFjayosIFNjb3BlQ2hhaW4qLCBKU1ZhbHVlKiogZXhjZXB0aW9uKTsKICAgICAgICAgCiAgICAg
cHJpdmF0ZToKICAgICAgICAgdHlwZWRlZiBlbnVtIHsgTm9ybWFsLCBJbml0aWFsaXplQW5kUmV0
dXJuIH0gRXhlY3V0aW9uRmxhZzsKSW5kZXg6IFZNL09wY29kZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFZN
L09wY29kZS5oCShyZXZpc2lvbiAzMTkxMCkKKysrIFZNL09wY29kZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC05NSw2ICs5NSw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICBtYWNybyhvcF9uZXdf
ZnVuYykgXAogICAgICAgICBtYWNybyhvcF9uZXdfZnVuY19leHApIFwKICAgICAgICAgbWFjcm8o
b3BfY2FsbCkgXAorICAgICAgICBtYWNybyhvcF9ldmFsKSBcCiAgICAgICAgIG1hY3JvKG9wX3Jl
dCkgXAogICAgICAgICBcCiAgICAgICAgIG1hY3JvKG9wX2NvbnN0cnVjdCkgXApJbmRleDoga2pz
L0NhbGxEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL0NhbGxEYXRhLmgJKHJldmlzaW9uIDMxOTEw
KQorKysga2pzL0NhbGxEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDggQEAgbmFt
ZXNwYWNlIEtKUyB7CiAgICAgZW51bSBDYWxsVHlwZSB7CiAgICAgICAgIENhbGxUeXBlTm9uZSwK
ICAgICAgICAgQ2FsbFR5cGVOYXRpdmUsCi0gICAgICAgIENhbGxUeXBlSlMKKyAgICAgICAgQ2Fs
bFR5cGVKUywKKyAgICAgICAgQ2FsbFR5cGVFdmFsCiAgICAgfTsKIAogICAgIHVuaW9uIENhbGxE
YXRhIHsKSW5kZXg6IGtqcy9mdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL2Z1bmN0aW9u
LmNwcAkocmV2aXNpb24gMzE5MTApCisrKyBranMvZnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02OTYsMjEgKzY5NiwxNSBAQCBKU1ZhbHVlKiBldmFsKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgU2NvCiAgICAgVVN0cmluZyBlcnJNc2c7CiAgICAgUmVmUHRyPEV2YWxOb2RlPiBldmFsTm9k
ZSA9IHBhcnNlcigpLnBhcnNlPEV2YWxOb2RlPihVU3RyaW5nKCksIDAsIHMuZGF0YSgpLCBzLnNp
emUoKSwgJnNvdXJjZUlkLCAmZXJyTGluZSwgJmVyck1zZyk7CiAKLSAgICBEZWJ1Z2dlciogZGJn
ID0gZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpOwotICAgIGlmIChkYmcp
IHsKLSAgICAgICAgYm9vbCBjb250ID0gZGJnLT5zb3VyY2VQYXJzZWQoZXhlYywgc291cmNlSWQs
IFVTdHJpbmcoKSwgcywgMCwgZXJyTGluZSwgZXJyTXNnKTsKLSAgICAgICAgaWYgKCFjb250KQot
ICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotCiAgICAgaWYgKCFldmFs
Tm9kZSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsIGVyck1z
ZywgZXJyTGluZSwgc291cmNlSWQsIE5VTEwpOwogCiAgICAgRXZhbEV4ZWNTdGF0ZSBuZXdFeGVj
KGdsb2JhbE9iamVjdCwgdGhpc09iaiwgZXZhbE5vZGUuZ2V0KCksIGV4ZWMsIHNjb3BlQ2hhaW4s
IHZhcmlhYmxlT2JqZWN0KTsKLQotICAgIEpTVmFsdWUqIHZhbHVlID0gZXZhbE5vZGUtPmV4ZWN1
dGUoJm5ld0V4ZWMpOwotCi0gICAgaWYgKG5ld0V4ZWMuY29tcGxldGlvblR5cGUoKSA9PSBUaHJv
dykgeworICAgIAorICAgIEpTVmFsdWUqIGV4Y2VwdGlvbiA9IDA7CisgICAgSlNWYWx1ZSogdmFs
dWUgPSBtYWNoaW5lKCkuZXhlY3V0ZShldmFsTm9kZS5nZXQoKSwgJm5ld0V4ZWMsICZuZXdFeGVj
LmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+cmVnaXN0ZXJGaWxlU3RhY2soKSwgJm5ld0V4ZWMuc2Nv
cGVDaGFpbigpLCAmZXhjZXB0aW9uKTsKKyAgICAKKyAgICBpZiAoZXhjZXB0aW9uKSB7CiAgICAg
ICAgIGV4ZWMtPnNldEV4Y2VwdGlvbih2YWx1ZSk7CiAgICAgICAgIHJldHVybiB2YWx1ZTsKICAg
ICB9CkluZGV4OiBranMvbm9kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9ub2Rlcy5jcHAJKHJl
dmlzaW9uIDMxOTEwKQorKysga2pzL25vZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI3NSw2
ICsxMjc1LDE0IEBAIGlubGluZSBKU1ZhbHVlKiBFeHByZXNzaW9uTm9kZTo6cmVzb2x2ZUEKICAg
ICByZXR1cm4gdGhyb3dVbmRlZmluZWRWYXJpYWJsZUVycm9yKGV4ZWMsIGlkZW50KTsKIH0KIAor
UmVnaXN0ZXJJRCogRXZhbEZ1bmN0aW9uQ2FsbE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3Im
IGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQoreworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBy
MCA9IGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KTsKKyAgICBSZWdpc3RlcklEKiByMSA9
IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKyAgICBnZW5lcmF0b3IuZW1pdFJlc29sdmVCYXNl
QW5kUHJvcGVydHkocjAuZ2V0KCksIHIxLCBDb21tb25JZGVudGlmaWVyczo6c2hhcmVkKCktPmV2
YWwpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEV2YWwoZ2VuZXJhdG9yLmZpbmFsRGVzdGlu
YXRpb24oZHN0LCByMC5nZXQoKSksIHIxLCByMC5nZXQoKSwgbV9hcmdzLmdldCgpKTsKK30KKwog
dm9pZCBFdmFsRnVuY3Rpb25DYWxsTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhFeGVjU3Rh
dGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYg
bm9kZVN0YWNrKQogewogICAgIG5vZGVTdGFjay5hcHBlbmQobV9hcmdzLmdldCgpKTsKQEAgLTU1
OTQsNiArNTYwMiwxNSBAQCBFdmFsTm9kZTo6fkV2YWxOb2RlKCkKIHsKIH0KIAorUmVnaXN0ZXJJ
RCogRXZhbE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJ
RCopCit7CisgICAgUmVnaXN0ZXJJRCogcjAgPSBzdGF0ZW1lbnRMaXN0RW1pdENvZGUobV9jaGls
ZHJlbiwgZ2VuZXJhdG9yKTsKKyAgICBpZiAoIXIwKQorICAgICAgICByMCA9IGdlbmVyYXRvci5l
bWl0TG9hZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGpzVW5kZWZpbmVkKCkpOworICAgIGdl
bmVyYXRvci5lbWl0RW5kKHIwKTsKKyAgICByZXR1cm4gMDsKK30KKwogdm9pZCBFdmFsTm9kZTo6
Z2VuZXJhdGVDb2RlKFNjb3BlQ2hhaW5Ob2RlKiBzYykKIHsKICAgICBTY29wZUNoYWluIHNjb3Bl
Q2hhaW4oc2MpOwpAQCAtNTYwMiw3ICs1NjE5LDEwIEBAIHZvaWQgRXZhbE5vZGU6OmdlbmVyYXRl
Q29kZShTY29wZUNoYWluTm8KICAgICAKICAgICBtX2NvZGUuc2V0KG5ldyBQcm9ncmFtQ29kZUJs
b2NrKHVzZXNFdmFsKCksIG5lZWRzQ2xvc3VyZSgpLCBnbG9iYWxPYmplY3QpKTsKICAgICAKLSAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBDb2RlR2VuZXJhdG9yIGdlbmVyYXRvcih0aGlz
LCBzY29wZUNoYWluLCAmZ2xvYmFsT2JqZWN0LT5zeW1ib2xUYWJsZSgpLCBtX2NvZGUuZ2V0KCkp
OworICAgIGdlbmVyYXRvci5nZW5lcmF0ZSgpOworCisgICAgbV9jaGlsZHJlbi5zaHJpbmtDYXBh
Y2l0eSgwKTsKIH0KIAogRXZhbE5vZGUqIEV2YWxOb2RlOjpjcmVhdGUoU291cmNlRWxlbWVudHMq
IGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1bmNTdGFjaywg
Ym9vbCB1c2VzRXZhbCwgYm9vbCBuZWVkc0Nsb3N1cmUpCkluZGV4OiBranMvbm9kZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBranMvbm9kZXMuaAkocmV2aXNpb24gMzE5MTApCisrKyBranMvbm9kZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtNzk4LDYgKzc5OCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAg
ICB7CiAgICAgICAgIH0KIAorICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENv
ZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZp
cnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJv
bFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsK
ICAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9D
QUxMOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3Qg
S0pTX0ZBU1RfQ0FMTDsKQEAgLTI5OTAsNiArMjk5MSw3IEBAIG5hbWVzcGFjZSBLSlMgewogCiAg
ICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBwcm9jZXNzRGVjbGFyYXRpb25zKEV4ZWNTdGF0ZSop
IEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZvaWQgZ2VuZXJhdGVDb2RlKFNjb3BlQ2hhaW5Ob2Rl
KikgS0pTX0ZBU1RfQ0FMTDsKKyAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShD
b2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwogCiAgICAgICAg
IE93blB0cjxQcm9ncmFtQ29kZUJsb2NrPiBtX2NvZGU7CiAgICAgfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>20586</attachid>
            <date>2008-04-16 09:05:22 -0700</date>
            <delta_ts>2008-04-16 09:59:26 -0700</delta_ts>
            <desc>Revised patch in progress</desc>
            <filename>eval.diff</filename>
            <type>text/plain</type>
            <size>15970</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IFZNL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVk0vQ29kZUJsb2NrLmNwcAko
cmV2aXNpb24gMzE5MjkpCisrKyBWTS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MzAsNiArNDMwLDE1IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYywgY28K
ICAgICAgICAgICAgIHByaW50ZigiWyU0ZF0gY2FsbFx0XHQlcywgJXMsICVzLCAlZCwgJWRcbiIs
IGxvY2F0aW9uLCByZWdpc3Rlck5hbWUocjApLmNfc3RyKCksIHJlZ2lzdGVyTmFtZShyMSkuY19z
dHIoKSwgcmVnaXN0ZXJOYW1lKHIyKS5jX3N0cigpLCB0ZW1wQ291bnQsIGFyZ0NvdW50KTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZXZhbDogeworICAg
ICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEg
PSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMiA9ICgrK2l0KS0+dS5vcGVy
YW5kOworICAgICAgICAgICAgaW50IHRlbXBDb3VudCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAg
ICAgICAgICAgaW50IGFyZ0NvdW50ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBw
cmludGYoIlslNGRdIGV2YWxcdFx0JXMsICVzLCAlcywgJWQsICVkXG4iLCBsb2NhdGlvbiwgcmVn
aXN0ZXJOYW1lKHIwKS5jX3N0cigpLCByZWdpc3Rlck5hbWUocjEpLmNfc3RyKCksIHJlZ2lzdGVy
TmFtZShyMikuY19zdHIoKSwgdGVtcENvdW50LCBhcmdDb3VudCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQogICAgICAgICBjYXNlIG9wX3JldDogewogICAgICAgICAgICAgaW50IHIw
ID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBwcmludGYoIlslNGRdIHJldFx0XHQl
c1xuIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShyMCkuY19zdHIoKSk7CkluZGV4OiBWTS9Db2Rl
R2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBWTS9Db2RlR2VuZXJhdG9yLmNwcAkocmV2aXNp
b24gMzE5MjkpCisrKyBWTS9Db2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEz
LDcgKzExMyw3IEBAIG5hbWVzcGFjZSBLSlMgewogKi8KIAogI2lmbmRlZiBOREVCVUcKLWJvb2wg
Q29kZUdlbmVyYXRvcjo6c19kdW1wc0dlbmVyYXRlZENvZGUgPSBmYWxzZTsKK2Jvb2wgQ29kZUdl
bmVyYXRvcjo6c19kdW1wc0dlbmVyYXRlZENvZGUgPSB0cnVlOwogI2VuZGlmCiAKIHZvaWQgQ29k
ZUdlbmVyYXRvcjo6c2V0RHVtcHNHZW5lcmF0ZWRDb2RlKGJvb2wgZHVtcHNHZW5lcmF0ZWRDb2Rl
KQpAQCAtMTYwLDYgKzE2MCw3IEBAIENvZGVHZW5lcmF0b3I6OkNvZGVHZW5lcmF0b3IoUHJvZ3Jh
bU5vZGUKICAgICAsIG1fc2NvcGVOb2RlKHByb2dyYW1Ob2RlKQogICAgICwgbV9jb2RlQmxvY2so
Y29kZUJsb2NrKQogICAgICwgbV9zY29wZURlcHRoKDApCisgICAgLCBtX2lzRXZhbENvZGUoZmFs
c2UpCiAgICAgLCBtX25leHRWYXIoLTEpCiAgICAgLCBtX3Byb3BlcnR5TmFtZXMoQ29tbW9uSWRl
bnRpZmllcnM6OnNoYXJlZCgpKQogCkBAIC0yMDEsNiArMjAyLDcgQEAgQ29kZUdlbmVyYXRvcjo6
Q29kZUdlbmVyYXRvcihGdW5jdGlvbkJvZAogICAgICwgbV9zY29wZU5vZGUoZnVuY3Rpb25Cb2R5
KQogICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQogICAgICwgbV9zY29wZURlcHRoKDApCisg
ICAgLCBtX2lzRXZhbENvZGUoZmFsc2UpCiAgICAgLCBtX25leHRWYXIoLTEpCiAgICAgLCBtX3By
b3BlcnR5TmFtZXMoQ29tbW9uSWRlbnRpZmllcnM6OnNoYXJlZCgpKQogewpAQCAtMjMxLDYgKzIz
MywyMCBAQCBDb2RlR2VuZXJhdG9yOjpDb2RlR2VuZXJhdG9yKEZ1bmN0aW9uQm9kCiAgICAgfQog
fQogCitDb2RlR2VuZXJhdG9yOjpDb2RlR2VuZXJhdG9yKEV2YWxOb2RlKiBldmFsTm9kZSwgY29u
c3QgU2NvcGVDaGFpbiYgc2NvcGVDaGFpbiwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaykKKyAgICA6IG1fc2NvcGVDaGFpbigmc2NvcGVDaGFpbikKKyAgICAs
IG1fc3ltYm9sVGFibGUoc3ltYm9sVGFibGUpCisgICAgLCBtX3Njb3BlTm9kZShldmFsTm9kZSkK
KyAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKKyAgICAsIG1fc2NvcGVEZXB0aCgwKQorICAg
ICwgbV9pc0V2YWxDb2RlKHRydWUpCisgICAgLCBtX25leHRWYXIoLTEpCisgICAgLCBtX3Byb3Bl
cnR5TmFtZXMoQ29tbW9uSWRlbnRpZmllcnM6OnNoYXJlZCgpKQoreworICAgIG1fbG9jYWxzLnJl
c2l6ZSgxKTsKKyAgICBhZGRWYXIobV9wcm9wZXJ0eU5hbWVzLT50aGlzSWRlbnRpZmllcik7Cit9
CisKIHZvaWQgQ29kZUdlbmVyYXRvcjo6YWRkUGFyYW1ldGVyKGNvbnN0IElkZW50aWZpZXImIGlk
ZW50KQogewogICAgIC8vIFBhcmFtZXRlcnMgb3ZlcndyaXRlIHZhciBkZWNsYXJhdGlvbnMsIGJ1
dCBub3QgZnVuY3Rpb24gZGVjbGFyYXRpb25zLApAQCAtNzkwLDYgKzgwNiwzNCBAQCBSZWdpc3Rl
cklEKiBDb2RlR2VuZXJhdG9yOjplbWl0Q2FsbChSZWdpCiAgICAgcmV0dXJuIHIwOwogfQogCitS
ZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0RXZhbChSZWdpc3RlcklEKiByMCwgUmVnaXN0
ZXJJRCogcjEsIFJlZ2lzdGVySUQqIHIyLCBBcmd1bWVudHNOb2RlKiBhcmd1bWVudHNOb2RlKQor
eworICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZWYxID0gcjE7CisgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IHJlZjIgPSByMjsKKyAgICAKKyAgICAvLyBSZXNlcnZlIHNwYWNlIGZvciBjYWxsIGZyYW1l
LCBldmVuIHRob3VnaCB3ZSBtYXkgbm90IG5lZWQgaXQgZm9yIGV2YWwKKyAgICBWZWN0b3I8UmVm
UHRyPFJlZ2lzdGVySUQ+LCBNYWNoaW5lOjpDYWxsRnJhbWVIZWFkZXJTaXplPiBjYWxsRnJhbWU7
CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNYWNoaW5lOjpDYWxsRnJhbWVIZWFkZXJTaXplOyAr
K2kpCisgICAgICAgIGNhbGxGcmFtZS5hcHBlbmQobmV3VGVtcG9yYXJ5KCkpOworCisgICAgLy8g
R2VuZXJhdGUgY29kZSBmb3IgYXJndW1lbnRzLgorICAgIFZlY3RvcjxSZWZQdHI8UmVnaXN0ZXJJ
RD4sIDE2PiBhcmd2OworICAgIGFyZ3YuYXBwZW5kKG5ld1RlbXBvcmFyeSgpKTsgLy8gcmVzZXJ2
ZSBzcGFjZSBmb3IgInRoaXMiCisgICAgZm9yIChBcmd1bWVudExpc3ROb2RlKiBuID0gYXJndW1l
bnRzTm9kZS0+bV9saXN0Tm9kZS5nZXQoKTsgbjsgbiA9IG4tPm1fbmV4dC5nZXQoKSkgeworICAg
ICAgICBhcmd2LmFwcGVuZChuZXdUZW1wb3JhcnkoKSk7CisgICAgICAgIGVtaXROb2RlKGFyZ3Yu
bGFzdCgpLmdldCgpLCBuKTsKKyAgICB9CisKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobWFj
aGluZSgpLmdldE9wY29kZShvcF9ldmFsKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHIw
LT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocjEtPmluZGV4KCkpOworICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChyMi0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKGFyZ3Yuc2l6ZSgpID8gYXJndlswXS0+aW5kZXgoKSA6IG1fdGVtcG9yYXJpZXMuc2l6
ZSgpKTsgLy8gYXJndgorICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhcmd2LnNpemUoKSk7IC8v
IGFyZ2MKKworICAgIHJldHVybiByMDsKK30KKwogUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6
ZW1pdFJldHVybihSZWdpc3RlcklEKiByMCkKIHsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
bWFjaGluZSgpLmdldE9wY29kZShvcF9yZXQpKTsKSW5kZXg6IFZNL0NvZGVHZW5lcmF0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBWTS9Db2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDMxOTI5KQorKysgVk0v
Q29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw2ICs2Myw3IEBAIG5hbWVzcGFj
ZSBLSlMgewogICAgICAgICAKICAgICAgICAgQ29kZUdlbmVyYXRvcihQcm9ncmFtTm9kZSosIGNv
bnN0IFNjb3BlQ2hhaW4mLCBTeW1ib2xUYWJsZSosIENvZGVCbG9jayosIFZhclN0YWNrJiwgRnVu
Y3Rpb25TdGFjayYpOwogICAgICAgICBDb2RlR2VuZXJhdG9yKEZ1bmN0aW9uQm9keU5vZGUqLCBj
b25zdCBTY29wZUNoYWluJiwgU3ltYm9sVGFibGUqLCBDb2RlQmxvY2sqLCBWYXJTdGFjayYsIEZ1
bmN0aW9uU3RhY2smLCBWZWN0b3I8SWRlbnRpZmllcj4mIHBhcmFtZXRlcnMpOworICAgICAgICBD
b2RlR2VuZXJhdG9yKEV2YWxOb2RlKiwgY29uc3QgU2NvcGVDaGFpbiYsIFN5bWJvbFRhYmxlKiwg
Q29kZUJsb2NrKik7CiAKICAgICAgICAgY29uc3QgQ29tbW9uSWRlbnRpZmllcnMmIHByb3BlcnR5
TmFtZXMoKSBjb25zdCB7IHJldHVybiAqbV9wcm9wZXJ0eU5hbWVzOyB9CiAKQEAgLTE4MCw2ICsx
ODEsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFB1dFByb3BJ
bmRleChSZWdpc3RlcklEKiBiYXNlLCB1bnNpZ25lZCBpbmRleCwgUmVnaXN0ZXJJRCogdmFsKTsK
IAogICAgICAgICBSZWdpc3RlcklEKiBlbWl0Q2FsbChSZWdpc3RlcklEKiwgUmVnaXN0ZXJJRCos
IFJlZ2lzdGVySUQqLCBBcmd1bWVudHNOb2RlKik7CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRF
dmFsKFJlZ2lzdGVySUQqLCBSZWdpc3RlcklEKiwgUmVnaXN0ZXJJRCosIEFyZ3VtZW50c05vZGUq
KTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFJldHVybihSZWdpc3RlcklEKik7CiAgICAgICAg
IFJlZ2lzdGVySUQqIGVtaXRFbmQoUmVnaXN0ZXJJRCopOwogCkBAIC0yNDIsNyArMjQ0LDcgQEAg
bmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSgpIHsgcmV0
dXJuICptX3N5bWJvbFRhYmxlOyB9CiAgICAgICAgIFZlY3RvcjxIYW5kbGVySW5mbz4mIGV4Y2Vw
dGlvbkhhbmRsZXJzKCkgeyByZXR1cm4gbV9jb2RlQmxvY2stPmV4Y2VwdGlvbkhhbmRsZXJzOyB9
CiAgICAgICAgIAotICAgICAgICBib29sIHNob3VsZE9wdGltaXplTG9jYWxzKCkgeyByZXR1cm4g
IW1fc2NvcGVEZXB0aDsgfQorICAgICAgICBib29sIHNob3VsZE9wdGltaXplTG9jYWxzKCkgeyBy
ZXR1cm4gIW1faXNFdmFsQ29kZSAmJiAhbV9zY29wZURlcHRoOyB9CiAKICAgICAgICAgY29uc3Qg
U2NvcGVDaGFpbiogbV9zY29wZUNoYWluOwogICAgICAgICBTeW1ib2xUYWJsZSogbV9zeW1ib2xU
YWJsZTsKQEAgLTI1Niw2ICsyNTgsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgVmVjdG9y
PFJlZ2lzdGVySUQsIDEyOD4gbV90ZW1wb3JhcmllczsKICAgICAgICAgVmVjdG9yPExhYmVsSUQs
IDEyOD4gbV9sYWJlbHM7CiAgICAgICAgIGludCBtX3Njb3BlRGVwdGg7CisgICAgICAgIGJvb2wg
bV9pc0V2YWxDb2RlOwogICAgICAgICAKICAgICAgICAgVmVjdG9yPEp1bXBDb250ZXh0PiBtX2p1
bXBDb250ZXh0U3RhY2s7CiAKSW5kZXg6IFZNL01hY2hpbmUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFZN
L01hY2hpbmUuY3BwCShyZXZpc2lvbiAzMTkyOSkKKysrIFZNL01hY2hpbmUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01NDQsNiArNTQ0LDIwIEBAIEpTVmFsdWUqIE1hY2hpbmU6OmV4ZWN1dGUoRnVu
Y3Rpb25Cb2R5Tm8KICAgICByZXR1cm4gcmVzdWx0OwogfQogCitKU1ZhbHVlKiBNYWNoaW5lOjpl
eGVjdXRlKEV2YWxOb2RlKiBldmFsTm9kZSwgRXhlY1N0YXRlKiBleGVjLCBSZWdpc3RlckZpbGVT
dGFjayogcmVnaXN0ZXJGaWxlU3RhY2ssIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBKU1Zh
bHVlKiogZXhjZXB0aW9uKQoreworICAgIFJlZ2lzdGVyRmlsZSogcmVnaXN0ZXJGaWxlID0gcmVn
aXN0ZXJGaWxlU3RhY2stPnB1c2hSZWdpc3RlckZpbGUoKTsKKworICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gJmV2YWxOb2RlLT5jb2RlKHNjb3BlQ2hhaW4pOworICAgIHJlZ2lzdGVyRmlsZS0+
Z3Jvdyhjb2RlQmxvY2stPm51bVRlbXBvcmFyaWVzKTsKKyAgICBSZWdpc3RlciogciA9ICgqcmVn
aXN0ZXJGaWxlLT5iYXNlUG9pbnRlcigpKTsKKworICAgIEpTVmFsdWUqIHJlc3VsdCA9IHByaXZh
dGVFeGVjdXRlKE5vcm1hbCwgZXhlYywgcmVnaXN0ZXJGaWxlLCByLCBzY29wZUNoYWluLCBjb2Rl
QmxvY2ssIGV4Y2VwdGlvbik7CisKKyAgICByZWdpc3RlckZpbGVTdGFjay0+cG9wUmVnaXN0ZXJG
aWxlKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0
ZUV4ZWN1dGUoRXhlY3V0aW9uRmxhZyBmbGFnLCBFeGVjU3RhdGUqIGV4ZWMsIFJlZ2lzdGVyRmls
ZSogcmVnaXN0ZXJGaWxlLCBSZWdpc3RlciogciwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4s
IENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlKiogZXhjZXB0aW9uKQogewogICAgIC8vIE9u
ZS10aW1lIGluaXRpYWxpemF0aW9uIG9mIG91ciBhZGRyZXNzIHRhYmxlcy4gV2UgaGF2ZSB0byBw
dXQgdGhpcyBjb2RlCkBAIC0xMTEyLDkgKzExMjYsOTcgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJp
dmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOYXRp
dmUpIHsKICAgICAgICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9IHIgLSAoKnJlZ2lzdGVyQmFz
ZSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEZJWE1FOiBTdWJzdGl0dXRlIGxleGlj
YWwgZ2xvYmFsIG9iamVjdCBmb3IgbnVsbC4KKyAgICAgICAgICAgIHJbYXJndl0udS5qc1ZhbHVl
ID0gcjIgPT0gbWlzc2luZ1N5bWJvbE1hcmtlcigpID8gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpIDogKHJbcjJdLnUuanNWYWx1ZSktPnRvT2JqZWN0KGV4ZWMpOyAvLyAidGhpcyIgdmFsdWUK
KyAgICAgICAgICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihy
W2FyZ3ZdLnUuanNWYWx1ZSk7CisKKyAgICAgICAgICAgIExpc3QgYXJncygmclthcmd2ICsgMV0u
dS5qc1ZhbHVlLCBhcmdjIC0gMSk7CisKKyAgICAgICAgICAgIEpTVmFsdWUqIHJldHVyblZhbHVl
ID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPih2KS0+Y2FsbEFzRnVuY3Rpb24oZXhlYywgdGhpc09i
aiwgYXJncyk7CisKKyAgICAgICAgICAgIHIgPSAoKnJlZ2lzdGVyQmFzZSkgKyByZWdpc3Rlck9m
ZnNldDsKKyAgICAgICAgICAgIHJbcjBdLnUuanNWYWx1ZSA9IHJldHVyblZhbHVlOworCisgICAg
ICAgICAgICBWTV9DSEVDS19FWENFUFRJT04oKTsKKworICAgICAgICAgICAgKyt2UEM7CisgICAg
ICAgICAgICBORVhUX09QQ09ERTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FIHRocm93
IHR5cGUgZXJyb3IKKyAgICAgICAgQVNTRVJUKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSk7CiAK
LSAgICAgICAgICAgIHJbYXJndl0udS5qc1ZhbHVlID0gcjIgPT0gbWlzc2luZ1N5bWJvbE1hcmtl
cigpID8ganNOdWxsKCkgOiAocltyMl0udS5qc1ZhbHVlKS0+dG9PYmplY3QoZXhlYyk7IC8vICJ0
aGlzIiB2YWx1ZQorICAgICAgICB2UEMrKzsKKyAgICAgICAgTkVYVF9PUENPREU7CisgICAgfQor
ICAgIEJFR0lOX09QQ09ERShvcF9ldmFsKSB7CisgICAgICAgIGludCByMCA9ICgrK3ZQQyktPnUu
b3BlcmFuZDsKKyAgICAgICAgaW50IHIxID0gKCsrdlBDKS0+dS5vcGVyYW5kOworICAgICAgICBp
bnQgcjIgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CisgICAgICAgIGludCBhcmd2ID0gKCsrdlBDKS0+
dS5vcGVyYW5kOworICAgICAgICBpbnQgYXJnYyA9ICgrK3ZQQyktPnUub3BlcmFuZDsKKyAgICAg
ICAgCisgICAgICAgIEpTVmFsdWUqIHYgPSByW3IxXS51LmpzVmFsdWU7CisgICAgICAgIEpTVmFs
dWUqIGJhc2UgPSByW3IyXS51LmpzVmFsdWU7CisgICAgICAgIAorICAgICAgICBDYWxsRGF0YSBj
YWxsRGF0YTsKKyAgICAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSB2LT5nZXRDYWxsRGF0YShjYWxs
RGF0YSk7CisgICAgICAgIAorICAgICAgICBpZiAoYmFzZSA9PSBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCkgJiYgdiA9PSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmV2YWxGdW5jdGlv
bigpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogZGVhbCB3aXRoIHRoZSBjYXNlIHdoZXJlIG5v
IGFyZ3VtZW50cyBhcmUgcGFzc2VkCisgICAgICAgICAgICAKKyAgICAgICAgICAgIEpTVmFsdWUq
IHggPSByW2FyZ3YgKyAxXS51LmpzVmFsdWU7CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBkZWFs
IHdpdGggdGhlIGNhc2Ugd2hlcmUgeCBpcyBub3QgYSBzdHJpbmcKKworICAgICAgICAgICAgVVN0
cmluZyBzID0geC0+dG9TdHJpbmcoZXhlYyk7CisKKyAgICAgICAgICAgIGludCBzb3VyY2VJZDsK
KyAgICAgICAgICAgIGludCBlcnJMaW5lOworICAgICAgICAgICAgVVN0cmluZyBlcnJNc2c7Cisg
ICAgICAgICAgICBSZWZQdHI8RXZhbE5vZGU+IGV2YWxOb2RlID0gcGFyc2VyKCkucGFyc2U8RXZh
bE5vZGU+KFVTdHJpbmcoKSwgMCwgcy5kYXRhKCksIHMuc2l6ZSgpLCAmc291cmNlSWQsICZlcnJM
aW5lLCAmZXJyTXNnKTsKKworICAgICAgICAgICAgLy8gRklYTUU6IGRlYWwgd2l0aCBjYXNlIHdo
ZXJlIGV2YWxOb2RlIGlzIG51bGwsIHNpZ25hbGxpbmcgYSBzeW50YXggZXJyb3IKKworICAgICAg
ICAgICAgRXZhbEV4ZWNTdGF0ZSBuZXdFeGVjKGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSwg
ZXhlYy0+dGhpc1ZhbHVlKCksIGV2YWxOb2RlLmdldCgpLCBleGVjLCBleGVjLT5zY29wZUNoYWlu
KCksIGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSk7CisKKyAgICAgICAgICAgIEpTVmFsdWUq
IGV4Y2VwdGlvbiA9IDA7CisgICAgICAgICAgICBKU1ZhbHVlKiB2YWx1ZSA9IG1hY2hpbmUoKS5l
eGVjdXRlKGV2YWxOb2RlLmdldCgpLCAmbmV3RXhlYywgJm5ld0V4ZWMuZHluYW1pY0dsb2JhbE9i
amVjdCgpLT5yZWdpc3RlckZpbGVTdGFjaygpLCBzY29wZUNoYWluLCAmZXhjZXB0aW9uKTsKKwor
ICAgICAgICAgICAgLy8gRklYTUU6IGRlYWwgd2l0aCB0aGUgY2FzZSB3aGVyZSB0aGUgZXZhbCBy
YWlzZWQgYW4gZXhjZXB0aW9uCisKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZSA/IHZhbHVlIDog
anNVbmRlZmluZWQoKTsKKworICAgICAgICAgICAgcltyMF0udS5qc1ZhbHVlID0gdmFsdWUgPyB2
YWx1ZSA6IGpzVW5kZWZpbmVkKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICsrdlBDOwor
ICAgICAgICAgICAgTkVYVF9PUENPREU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEpT
VmFsdWUqIHRoaXNWYWx1ZSA9IGJhc2UtPnRvT2JqZWN0KGV4ZWMpLT5pc0FjdGl2YXRpb25PYmpl
Y3QoKSA/IGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSA6IGJhc2U7CisgICAgICAgIAorICAg
ICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVKUykgeworICAgICAgICAgICAgaW50IHJlZ2lz
dGVyT2Zmc2V0ID0gciAtICgqcmVnaXN0ZXJCYXNlKTsKKyAgICAgICAgICAgIFJlZ2lzdGVyKiBj
YWxsRnJhbWUgPSByICsgYXJndiAtIENhbGxGcmFtZUhlYWRlclNpemU7CisKKyAgICAgICAgICAg
IHJbYXJndl0udS5qc1ZhbHVlID0gdGhpc1ZhbHVlOworICAgICAgICAgICAgaW5pdGlhbGl6ZUNh
bGxGcmFtZShjYWxsRnJhbWUsIGNvZGVCbG9jaywgdlBDLCBzY29wZUNoYWluLCByZWdpc3Rlck9m
ZnNldCwgcjAsIGFyZ3YsIDApOworCisgICAgICAgICAgICBTY29wZUNoYWluKiBjYWxsRGF0YVNj
b3BlQ2hhaW4gPSBjYWxsRGF0YS5qcy5zY29wZUNoYWluOworICAgICAgICAgICAgRnVuY3Rpb25C
b2R5Tm9kZSogZnVuY3Rpb25Cb2R5Tm9kZSA9IGNhbGxEYXRhLmpzLmZ1bmN0aW9uQm9keTsKKwor
ICAgICAgICAgICAgY29kZUJsb2NrID0gJmZ1bmN0aW9uQm9keU5vZGUtPmNvZGUoY2FsbERhdGFT
Y29wZUNoYWluLT5ub2RlKCkpOworICAgICAgICAgICAgciA9IHNsaWRlUmVnaXN0ZXJXaW5kb3dG
b3JDYWxsKGNvZGVCbG9jaywgcmVnaXN0ZXJGaWxlLCByZWdpc3RlckJhc2UsIHJlZ2lzdGVyT2Zm
c2V0LCBhcmd2LCBhcmdjKTsKKyAgICAgICAgICAgIHNjb3BlQ2hhaW4gPSBzY29wZUNoYWluRm9y
Q2FsbChjb2RlQmxvY2ssIGNhbGxEYXRhU2NvcGVDaGFpbiwgZnVuY3Rpb25Cb2R5Tm9kZSwgY2Fs
bEZyYW1lLCByZWdpc3RlckJhc2UsIHIpOyAgICAgICAgICAgIAorICAgICAgICAgICAgayA9IGNv
ZGVCbG9jay0+anNWYWx1ZXMuZGF0YSgpOworICAgICAgICAgICAgdlBDID0gY29kZUJsb2NrLT5p
bnN0cnVjdGlvbnMuYmVnaW4oKTsKKworICAgICAgICAgICAgTkVYVF9PUENPREU7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOYXRpdmUpIHsKKyAgICAgICAg
ICAgIGludCByZWdpc3Rlck9mZnNldCA9IHIgLSAoKnJlZ2lzdGVyQmFzZSk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIHJbYXJndl0udS5qc1ZhbHVlID0gdGhpc1ZhbHVlOwogICAgICAgICAg
ICAgSlNPYmplY3QqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHJbYXJndl0udS5q
c1ZhbHVlKTsKIAogICAgICAgICAgICAgTGlzdCBhcmdzKCZyW2FyZ3YgKyAxXS51LmpzVmFsdWUs
IGFyZ2MgLSAxKTsKSW5kZXg6IFZNL01hY2hpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBWTS9NYWNoaW5l
LmgJKHJldmlzaW9uIDMxOTI5KQorKysgVk0vTWFjaGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03
OCw2ICs3OCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICAKICAgICAgICAgSlNWYWx1ZSog
ZXhlY3V0ZShQcm9ncmFtTm9kZSosIEV4ZWNTdGF0ZSosIFJlZ2lzdGVyRmlsZVN0YWNrKiwgU2Nv
cGVDaGFpbiosIEpTVmFsdWUqKiBleGNlcHRpb24pOwogICAgICAgICBKU1ZhbHVlKiBleGVjdXRl
KEZ1bmN0aW9uQm9keU5vZGUqLCBjb25zdCBMaXN0JiBhcmdzLCBKU09iamVjdCogdGhpc09iaiwg
RXhlY1N0YXRlKiwgUmVnaXN0ZXJGaWxlU3RhY2sqLCBTY29wZUNoYWluKiwgSlNWYWx1ZSoqIGV4
Y2VwdGlvbik7CisgICAgICAgIEpTVmFsdWUqIGV4ZWN1dGUoRXZhbE5vZGUqLCBFeGVjU3RhdGUq
LCBSZWdpc3RlckZpbGVTdGFjayosIFNjb3BlQ2hhaW5Ob2RlKiwgSlNWYWx1ZSoqIGV4Y2VwdGlv
bik7CiAgICAgICAgIAogICAgIHByaXZhdGU6CiAgICAgICAgIHR5cGVkZWYgZW51bSB7IE5vcm1h
bCwgSW5pdGlhbGl6ZUFuZFJldHVybiB9IEV4ZWN1dGlvbkZsYWc7CkluZGV4OiBWTS9PcGNvZGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBWTS9PcGNvZGUuaAkocmV2aXNpb24gMzE5MjkpCisrKyBWTS9PcGNv
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtOTUsNiArOTUsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAg
ICAgICAgbWFjcm8ob3BfbmV3X2Z1bmMpIFwKICAgICAgICAgbWFjcm8ob3BfbmV3X2Z1bmNfZXhw
KSBcCiAgICAgICAgIG1hY3JvKG9wX2NhbGwpIFwKKyAgICAgICAgbWFjcm8ob3BfZXZhbCkgXAog
ICAgICAgICBtYWNybyhvcF9yZXQpIFwKICAgICAgICAgXAogICAgICAgICBtYWNybyhvcF9jb25z
dHJ1Y3QpIFwKSW5kZXg6IGtqcy9DYWxsRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9DYWxsRGF0
YS5oCShyZXZpc2lvbiAzMTkyOSkKKysrIGtqcy9DYWxsRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNyw3ICszNyw4IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIGVudW0gQ2FsbFR5cGUgewogICAg
ICAgICBDYWxsVHlwZU5vbmUsCiAgICAgICAgIENhbGxUeXBlTmF0aXZlLAotICAgICAgICBDYWxs
VHlwZUpTCisgICAgICAgIENhbGxUeXBlSlMsCisgICAgICAgIENhbGxUeXBlRXZhbAogICAgIH07
CiAKICAgICB1bmlvbiBDYWxsRGF0YSB7CkluZGV4OiBranMvZnVuY3Rpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGtqcy9mdW5jdGlvbi5jcHAJKHJldmlzaW9uIDMxOTI5KQorKysga2pzL2Z1bmN0aW9u
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjk2LDIxICs2OTYsMTUgQEAgSlNWYWx1ZSogZXZhbChF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNjbwogICAgIFVTdHJpbmcgZXJyTXNnOwogICAgIFJlZlB0
cjxFdmFsTm9kZT4gZXZhbE5vZGUgPSBwYXJzZXIoKS5wYXJzZTxFdmFsTm9kZT4oVVN0cmluZygp
LCAwLCBzLmRhdGEoKSwgcy5zaXplKCksICZzb3VyY2VJZCwgJmVyckxpbmUsICZlcnJNc2cpOwog
Ci0gICAgRGVidWdnZXIqIGRiZyA9IGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+ZGVidWdn
ZXIoKTsKLSAgICBpZiAoZGJnKSB7Ci0gICAgICAgIGJvb2wgY29udCA9IGRiZy0+c291cmNlUGFy
c2VkKGV4ZWMsIHNvdXJjZUlkLCBVU3RyaW5nKCksIHMsIDAsIGVyckxpbmUsIGVyck1zZyk7Ci0g
ICAgICAgIGlmICghY29udCkKLSAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAg
IH0KLQogICAgIGlmICghZXZhbE5vZGUpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMs
IFN5bnRheEVycm9yLCBlcnJNc2csIGVyckxpbmUsIHNvdXJjZUlkLCBOVUxMKTsKIAogICAgIEV2
YWxFeGVjU3RhdGUgbmV3RXhlYyhnbG9iYWxPYmplY3QsIHRoaXNPYmosIGV2YWxOb2RlLmdldCgp
LCBleGVjLCBzY29wZUNoYWluLCB2YXJpYWJsZU9iamVjdCk7Ci0KLSAgICBKU1ZhbHVlKiB2YWx1
ZSA9IGV2YWxOb2RlLT5leGVjdXRlKCZuZXdFeGVjKTsKLQotICAgIGlmIChuZXdFeGVjLmNvbXBs
ZXRpb25UeXBlKCkgPT0gVGhyb3cpIHsKKyAgICAKKyAgICBKU1ZhbHVlKiBleGNlcHRpb24gPSAw
OworICAgIEpTVmFsdWUqIHZhbHVlID0gbWFjaGluZSgpLmV4ZWN1dGUoZXZhbE5vZGUuZ2V0KCks
ICZuZXdFeGVjLCAmbmV3RXhlYy5keW5hbWljR2xvYmFsT2JqZWN0KCktPnJlZ2lzdGVyRmlsZVN0
YWNrKCksIG5ld0V4ZWMuc2NvcGVDaGFpbigpLm5vZGUoKSwgJmV4Y2VwdGlvbik7CisgICAgCisg
ICAgaWYgKGV4Y2VwdGlvbikgewogICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24odmFsdWUpOwog
ICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgfQpJbmRleDoga2pzL25vZGVzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBranMvbm9kZXMuY3BwCShyZXZpc2lvbiAzMTkyOSkKKysrIGtqcy9ub2Rlcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEyNzUsNiArMTI3NSwxNCBAQCBpbmxpbmUgSlNWYWx1ZSogRXhw
cmVzc2lvbk5vZGU6OnJlc29sdmVBCiAgICAgcmV0dXJuIHRocm93VW5kZWZpbmVkVmFyaWFibGVF
cnJvcihleGVjLCBpZGVudCk7CiB9CiAKK1JlZ2lzdGVySUQqIEV2YWxGdW5jdGlvbkNhbGxOb2Rl
OjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKK3sK
KyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcjAgPSBnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRz
dCk7CisgICAgUmVnaXN0ZXJJRCogcjEgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAg
Z2VuZXJhdG9yLmVtaXRSZXNvbHZlQmFzZUFuZFByb3BlcnR5KHIwLmdldCgpLCByMSwgQ29tbW9u
SWRlbnRpZmllcnM6OnNoYXJlZCgpLT5ldmFsKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRF
dmFsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgcjAuZ2V0KCkpLCByMSwgcjAuZ2V0
KCksIG1fYXJncy5nZXQoKSk7Cit9CisKIHZvaWQgRXZhbEZ1bmN0aW9uQ2FsbE5vZGU6Om9wdGlt
aXplVmFyaWFibGVBY2Nlc3MoRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBM
b2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFjaykKIHsKICAgICBub2RlU3RhY2suYXBw
ZW5kKG1fYXJncy5nZXQoKSk7CkBAIC01NTk2LDYgKzU2MDQsMTUgQEAgRXZhbE5vZGU6On5FdmFs
Tm9kZSgpCiB7CiB9CiAKK1JlZ2lzdGVySUQqIEV2YWxOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJh
dG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqKQoreworICAgIFJlZ2lzdGVySUQqIHIwID0gc3Rh
dGVtZW50TGlzdEVtaXRDb2RlKG1fY2hpbGRyZW4sIGdlbmVyYXRvcik7CisgICAgaWYgKCFyMCkK
KyAgICAgICAgcjAgPSBnZW5lcmF0b3IuZW1pdExvYWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgp
LCBqc1VuZGVmaW5lZCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdEVuZChyMCk7CisgICAgcmV0dXJu
IDA7Cit9CisKIHZvaWQgRXZhbE5vZGU6OmdlbmVyYXRlQ29kZShTY29wZUNoYWluTm9kZSogc2Mp
CiB7CiAgICAgU2NvcGVDaGFpbiBzY29wZUNoYWluKHNjKTsKQEAgLTU2MDQsNyArNTYyMSwxMCBA
QCB2b2lkIEV2YWxOb2RlOjpnZW5lcmF0ZUNvZGUoU2NvcGVDaGFpbk5vCiAgICAgCiAgICAgbV9j
b2RlLnNldChuZXcgUHJvZ3JhbUNvZGVCbG9jayh1c2VzRXZhbCgpLCBuZWVkc0Nsb3N1cmUoKSwg
Z2xvYmFsT2JqZWN0KSk7CiAgICAgCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgQ29k
ZUdlbmVyYXRvciBnZW5lcmF0b3IodGhpcywgc2NvcGVDaGFpbiwgJmdsb2JhbE9iamVjdC0+c3lt
Ym9sVGFibGUoKSwgbV9jb2RlLmdldCgpKTsKKyAgICBnZW5lcmF0b3IuZ2VuZXJhdGUoKTsKKwor
ICAgIG1fY2hpbGRyZW4uc2hyaW5rQ2FwYWNpdHkoMCk7CiB9CiAKIEV2YWxOb2RlKiBFdmFsTm9k
ZTo6Y3JlYXRlKFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBG
dW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIGJvb2wgdXNlc0V2YWwsIGJvb2wgbmVlZHNDbG9zdXJl
KQpJbmRleDoga2pzL25vZGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL25vZGVzLmgJKHJldmlzaW9u
IDMxOTI5KQorKysga2pzL25vZGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5OCw2ICs3OTgsNyBA
QCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgewogICAgICAgICB9CiAKKyAgICAgICAgdmlydHVh
bCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBL
SlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2Vz
cyhFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5v
ZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVh
dGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVh
bVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CkBAIC0yOTkwLDYgKzI5OTEs
NyBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgcHJvY2Vz
c0RlY2xhcmF0aW9ucyhFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2b2lkIGdl
bmVyYXRlQ29kZShTY29wZUNoYWluTm9kZSopIEtKU19GQVNUX0NBTEw7CisgICAgICAgIHZpcnR1
YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkg
S0pTX0ZBU1RfQ0FMTDsKIAogICAgICAgICBPd25QdHI8UHJvZ3JhbUNvZGVCbG9jaz4gbV9jb2Rl
OwogICAgIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>20588</attachid>
            <date>2008-04-16 09:59:26 -0700</date>
            <delta_ts>2008-04-16 16:49:09 -0700</delta_ts>
            <desc>Revised proposed patch</desc>
            <filename>eval.diff</filename>
            <type>text/plain</type>
            <size>15378</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IFZNL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVk0vQ29kZUJsb2NrLmNwcAko
cmV2aXNpb24gMzE5MjkpCisrKyBWTS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MzAsNiArNDMwLDE1IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYywgY28K
ICAgICAgICAgICAgIHByaW50ZigiWyU0ZF0gY2FsbFx0XHQlcywgJXMsICVzLCAlZCwgJWRcbiIs
IGxvY2F0aW9uLCByZWdpc3Rlck5hbWUocjApLmNfc3RyKCksIHJlZ2lzdGVyTmFtZShyMSkuY19z
dHIoKSwgcmVnaXN0ZXJOYW1lKHIyKS5jX3N0cigpLCB0ZW1wQ291bnQsIGFyZ0NvdW50KTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZXZhbDogeworICAg
ICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEg
PSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMiA9ICgrK2l0KS0+dS5vcGVy
YW5kOworICAgICAgICAgICAgaW50IHRlbXBDb3VudCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAg
ICAgICAgICAgaW50IGFyZ0NvdW50ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBw
cmludGYoIlslNGRdIGV2YWxcdFx0JXMsICVzLCAlcywgJWQsICVkXG4iLCBsb2NhdGlvbiwgcmVn
aXN0ZXJOYW1lKHIwKS5jX3N0cigpLCByZWdpc3Rlck5hbWUocjEpLmNfc3RyKCksIHJlZ2lzdGVy
TmFtZShyMikuY19zdHIoKSwgdGVtcENvdW50LCBhcmdDb3VudCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQogICAgICAgICBjYXNlIG9wX3JldDogewogICAgICAgICAgICAgaW50IHIw
ID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBwcmludGYoIlslNGRdIHJldFx0XHQl
c1xuIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShyMCkuY19zdHIoKSk7CkluZGV4OiBWTS9Db2Rl
R2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBWTS9Db2RlR2VuZXJhdG9yLmNwcAkocmV2aXNp
b24gMzE5MjkpCisrKyBWTS9Db2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEz
LDcgKzExMyw3IEBAIG5hbWVzcGFjZSBLSlMgewogKi8KIAogI2lmbmRlZiBOREVCVUcKLWJvb2wg
Q29kZUdlbmVyYXRvcjo6c19kdW1wc0dlbmVyYXRlZENvZGUgPSBmYWxzZTsKK2Jvb2wgQ29kZUdl
bmVyYXRvcjo6c19kdW1wc0dlbmVyYXRlZENvZGUgPSB0cnVlOwogI2VuZGlmCiAKIHZvaWQgQ29k
ZUdlbmVyYXRvcjo6c2V0RHVtcHNHZW5lcmF0ZWRDb2RlKGJvb2wgZHVtcHNHZW5lcmF0ZWRDb2Rl
KQpAQCAtMTYwLDYgKzE2MCw3IEBAIENvZGVHZW5lcmF0b3I6OkNvZGVHZW5lcmF0b3IoUHJvZ3Jh
bU5vZGUKICAgICAsIG1fc2NvcGVOb2RlKHByb2dyYW1Ob2RlKQogICAgICwgbV9jb2RlQmxvY2so
Y29kZUJsb2NrKQogICAgICwgbV9zY29wZURlcHRoKDApCisgICAgLCBtX2lzRXZhbENvZGUoZmFs
c2UpCiAgICAgLCBtX25leHRWYXIoLTEpCiAgICAgLCBtX3Byb3BlcnR5TmFtZXMoQ29tbW9uSWRl
bnRpZmllcnM6OnNoYXJlZCgpKQogCkBAIC0yMDEsNiArMjAyLDcgQEAgQ29kZUdlbmVyYXRvcjo6
Q29kZUdlbmVyYXRvcihGdW5jdGlvbkJvZAogICAgICwgbV9zY29wZU5vZGUoZnVuY3Rpb25Cb2R5
KQogICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQogICAgICwgbV9zY29wZURlcHRoKDApCisg
ICAgLCBtX2lzRXZhbENvZGUoZmFsc2UpCiAgICAgLCBtX25leHRWYXIoLTEpCiAgICAgLCBtX3By
b3BlcnR5TmFtZXMoQ29tbW9uSWRlbnRpZmllcnM6OnNoYXJlZCgpKQogewpAQCAtMjMxLDYgKzIz
MywyMCBAQCBDb2RlR2VuZXJhdG9yOjpDb2RlR2VuZXJhdG9yKEZ1bmN0aW9uQm9kCiAgICAgfQog
fQogCitDb2RlR2VuZXJhdG9yOjpDb2RlR2VuZXJhdG9yKEV2YWxOb2RlKiBldmFsTm9kZSwgY29u
c3QgU2NvcGVDaGFpbiYgc2NvcGVDaGFpbiwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaykKKyAgICA6IG1fc2NvcGVDaGFpbigmc2NvcGVDaGFpbikKKyAgICAs
IG1fc3ltYm9sVGFibGUoc3ltYm9sVGFibGUpCisgICAgLCBtX3Njb3BlTm9kZShldmFsTm9kZSkK
KyAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKKyAgICAsIG1fc2NvcGVEZXB0aCgwKQorICAg
ICwgbV9pc0V2YWxDb2RlKHRydWUpCisgICAgLCBtX25leHRWYXIoLTEpCisgICAgLCBtX3Byb3Bl
cnR5TmFtZXMoQ29tbW9uSWRlbnRpZmllcnM6OnNoYXJlZCgpKQoreworICAgIG1fbG9jYWxzLnJl
c2l6ZSgxKTsKKyAgICBhZGRWYXIobV9wcm9wZXJ0eU5hbWVzLT50aGlzSWRlbnRpZmllcik7Cit9
CisKIHZvaWQgQ29kZUdlbmVyYXRvcjo6YWRkUGFyYW1ldGVyKGNvbnN0IElkZW50aWZpZXImIGlk
ZW50KQogewogICAgIC8vIFBhcmFtZXRlcnMgb3ZlcndyaXRlIHZhciBkZWNsYXJhdGlvbnMsIGJ1
dCBub3QgZnVuY3Rpb24gZGVjbGFyYXRpb25zLApAQCAtNzkwLDYgKzgwNiwzNCBAQCBSZWdpc3Rl
cklEKiBDb2RlR2VuZXJhdG9yOjplbWl0Q2FsbChSZWdpCiAgICAgcmV0dXJuIHIwOwogfQogCitS
ZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0RXZhbChSZWdpc3RlcklEKiByMCwgUmVnaXN0
ZXJJRCogcjEsIFJlZ2lzdGVySUQqIHIyLCBBcmd1bWVudHNOb2RlKiBhcmd1bWVudHNOb2RlKQor
eworICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZWYxID0gcjE7CisgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IHJlZjIgPSByMjsKKyAgICAKKyAgICAvLyBSZXNlcnZlIHNwYWNlIGZvciBjYWxsIGZyYW1l
LCBldmVuIHRob3VnaCB3ZSBtYXkgbm90IG5lZWQgaXQgZm9yIGV2YWwKKyAgICBWZWN0b3I8UmVm
UHRyPFJlZ2lzdGVySUQ+LCBNYWNoaW5lOjpDYWxsRnJhbWVIZWFkZXJTaXplPiBjYWxsRnJhbWU7
CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNYWNoaW5lOjpDYWxsRnJhbWVIZWFkZXJTaXplOyAr
K2kpCisgICAgICAgIGNhbGxGcmFtZS5hcHBlbmQobmV3VGVtcG9yYXJ5KCkpOworCisgICAgLy8g
R2VuZXJhdGUgY29kZSBmb3IgYXJndW1lbnRzLgorICAgIFZlY3RvcjxSZWZQdHI8UmVnaXN0ZXJJ
RD4sIDE2PiBhcmd2OworICAgIGFyZ3YuYXBwZW5kKG5ld1RlbXBvcmFyeSgpKTsgLy8gcmVzZXJ2
ZSBzcGFjZSBmb3IgInRoaXMiCisgICAgZm9yIChBcmd1bWVudExpc3ROb2RlKiBuID0gYXJndW1l
bnRzTm9kZS0+bV9saXN0Tm9kZS5nZXQoKTsgbjsgbiA9IG4tPm1fbmV4dC5nZXQoKSkgeworICAg
ICAgICBhcmd2LmFwcGVuZChuZXdUZW1wb3JhcnkoKSk7CisgICAgICAgIGVtaXROb2RlKGFyZ3Yu
bGFzdCgpLmdldCgpLCBuKTsKKyAgICB9CisKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobWFj
aGluZSgpLmdldE9wY29kZShvcF9ldmFsKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHIw
LT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocjEtPmluZGV4KCkpOworICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChyMi0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKGFyZ3Yuc2l6ZSgpID8gYXJndlswXS0+aW5kZXgoKSA6IG1fdGVtcG9yYXJpZXMuc2l6
ZSgpKTsgLy8gYXJndgorICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhcmd2LnNpemUoKSk7IC8v
IGFyZ2MKKworICAgIHJldHVybiByMDsKK30KKwogUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6
ZW1pdFJldHVybihSZWdpc3RlcklEKiByMCkKIHsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
bWFjaGluZSgpLmdldE9wY29kZShvcF9yZXQpKTsKSW5kZXg6IFZNL0NvZGVHZW5lcmF0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBWTS9Db2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDMxOTI5KQorKysgVk0v
Q29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw2ICs2Myw3IEBAIG5hbWVzcGFj
ZSBLSlMgewogICAgICAgICAKICAgICAgICAgQ29kZUdlbmVyYXRvcihQcm9ncmFtTm9kZSosIGNv
bnN0IFNjb3BlQ2hhaW4mLCBTeW1ib2xUYWJsZSosIENvZGVCbG9jayosIFZhclN0YWNrJiwgRnVu
Y3Rpb25TdGFjayYpOwogICAgICAgICBDb2RlR2VuZXJhdG9yKEZ1bmN0aW9uQm9keU5vZGUqLCBj
b25zdCBTY29wZUNoYWluJiwgU3ltYm9sVGFibGUqLCBDb2RlQmxvY2sqLCBWYXJTdGFjayYsIEZ1
bmN0aW9uU3RhY2smLCBWZWN0b3I8SWRlbnRpZmllcj4mIHBhcmFtZXRlcnMpOworICAgICAgICBD
b2RlR2VuZXJhdG9yKEV2YWxOb2RlKiwgY29uc3QgU2NvcGVDaGFpbiYsIFN5bWJvbFRhYmxlKiwg
Q29kZUJsb2NrKik7CiAKICAgICAgICAgY29uc3QgQ29tbW9uSWRlbnRpZmllcnMmIHByb3BlcnR5
TmFtZXMoKSBjb25zdCB7IHJldHVybiAqbV9wcm9wZXJ0eU5hbWVzOyB9CiAKQEAgLTE4MCw2ICsx
ODEsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFB1dFByb3BJ
bmRleChSZWdpc3RlcklEKiBiYXNlLCB1bnNpZ25lZCBpbmRleCwgUmVnaXN0ZXJJRCogdmFsKTsK
IAogICAgICAgICBSZWdpc3RlcklEKiBlbWl0Q2FsbChSZWdpc3RlcklEKiwgUmVnaXN0ZXJJRCos
IFJlZ2lzdGVySUQqLCBBcmd1bWVudHNOb2RlKik7CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRF
dmFsKFJlZ2lzdGVySUQqLCBSZWdpc3RlcklEKiwgUmVnaXN0ZXJJRCosIEFyZ3VtZW50c05vZGUq
KTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFJldHVybihSZWdpc3RlcklEKik7CiAgICAgICAg
IFJlZ2lzdGVySUQqIGVtaXRFbmQoUmVnaXN0ZXJJRCopOwogCkBAIC0yNDIsNyArMjQ0LDcgQEAg
bmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSgpIHsgcmV0
dXJuICptX3N5bWJvbFRhYmxlOyB9CiAgICAgICAgIFZlY3RvcjxIYW5kbGVySW5mbz4mIGV4Y2Vw
dGlvbkhhbmRsZXJzKCkgeyByZXR1cm4gbV9jb2RlQmxvY2stPmV4Y2VwdGlvbkhhbmRsZXJzOyB9
CiAgICAgICAgIAotICAgICAgICBib29sIHNob3VsZE9wdGltaXplTG9jYWxzKCkgeyByZXR1cm4g
IW1fc2NvcGVEZXB0aDsgfQorICAgICAgICBib29sIHNob3VsZE9wdGltaXplTG9jYWxzKCkgeyBy
ZXR1cm4gIW1faXNFdmFsQ29kZSAmJiAhbV9zY29wZURlcHRoOyB9CiAKICAgICAgICAgY29uc3Qg
U2NvcGVDaGFpbiogbV9zY29wZUNoYWluOwogICAgICAgICBTeW1ib2xUYWJsZSogbV9zeW1ib2xU
YWJsZTsKQEAgLTI1Niw2ICsyNTgsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgVmVjdG9y
PFJlZ2lzdGVySUQsIDEyOD4gbV90ZW1wb3JhcmllczsKICAgICAgICAgVmVjdG9yPExhYmVsSUQs
IDEyOD4gbV9sYWJlbHM7CiAgICAgICAgIGludCBtX3Njb3BlRGVwdGg7CisgICAgICAgIGJvb2wg
bV9pc0V2YWxDb2RlOwogICAgICAgICAKICAgICAgICAgVmVjdG9yPEp1bXBDb250ZXh0PiBtX2p1
bXBDb250ZXh0U3RhY2s7CiAKSW5kZXg6IFZNL01hY2hpbmUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFZN
L01hY2hpbmUuY3BwCShyZXZpc2lvbiAzMTkyOSkKKysrIFZNL01hY2hpbmUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01NDQsNiArNTQ0LDIwIEBAIEpTVmFsdWUqIE1hY2hpbmU6OmV4ZWN1dGUoRnVu
Y3Rpb25Cb2R5Tm8KICAgICByZXR1cm4gcmVzdWx0OwogfQogCitKU1ZhbHVlKiBNYWNoaW5lOjpl
eGVjdXRlKEV2YWxOb2RlKiBldmFsTm9kZSwgRXhlY1N0YXRlKiBleGVjLCBSZWdpc3RlckZpbGVT
dGFjayogcmVnaXN0ZXJGaWxlU3RhY2ssIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBKU1Zh
bHVlKiogZXhjZXB0aW9uKQoreworICAgIFJlZ2lzdGVyRmlsZSogcmVnaXN0ZXJGaWxlID0gcmVn
aXN0ZXJGaWxlU3RhY2stPnB1c2hSZWdpc3RlckZpbGUoKTsKKworICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gJmV2YWxOb2RlLT5jb2RlKHNjb3BlQ2hhaW4pOworICAgIHJlZ2lzdGVyRmlsZS0+
Z3Jvdyhjb2RlQmxvY2stPm51bVRlbXBvcmFyaWVzKTsKKyAgICBSZWdpc3RlciogciA9ICgqcmVn
aXN0ZXJGaWxlLT5iYXNlUG9pbnRlcigpKTsKKworICAgIEpTVmFsdWUqIHJlc3VsdCA9IHByaXZh
dGVFeGVjdXRlKE5vcm1hbCwgZXhlYywgcmVnaXN0ZXJGaWxlLCByLCBzY29wZUNoYWluLCBjb2Rl
QmxvY2ssIGV4Y2VwdGlvbik7CisKKyAgICByZWdpc3RlckZpbGVTdGFjay0+cG9wUmVnaXN0ZXJG
aWxlKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0
ZUV4ZWN1dGUoRXhlY3V0aW9uRmxhZyBmbGFnLCBFeGVjU3RhdGUqIGV4ZWMsIFJlZ2lzdGVyRmls
ZSogcmVnaXN0ZXJGaWxlLCBSZWdpc3RlciogciwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4s
IENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlKiogZXhjZXB0aW9uKQogewogICAgIC8vIE9u
ZS10aW1lIGluaXRpYWxpemF0aW9uIG9mIG91ciBhZGRyZXNzIHRhYmxlcy4gV2UgaGF2ZSB0byBw
dXQgdGhpcyBjb2RlCkBAIC0xMTEyLDkgKzExMjYsOTAgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJp
dmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOYXRp
dmUpIHsKICAgICAgICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9IHIgLSAoKnJlZ2lzdGVyQmFz
ZSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEZJWE1FOiBTdWJzdGl0dXRlIGxleGlj
YWwgZ2xvYmFsIG9iamVjdCBmb3IgbnVsbC4KKyAgICAgICAgICAgIHJbYXJndl0udS5qc1ZhbHVl
ID0gcjIgPT0gbWlzc2luZ1N5bWJvbE1hcmtlcigpID8gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpIDogKHJbcjJdLnUuanNWYWx1ZSktPnRvT2JqZWN0KGV4ZWMpOyAvLyAidGhpcyIgdmFsdWUK
KyAgICAgICAgICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihy
W2FyZ3ZdLnUuanNWYWx1ZSk7CisKKyAgICAgICAgICAgIExpc3QgYXJncygmclthcmd2ICsgMV0u
dS5qc1ZhbHVlLCBhcmdjIC0gMSk7CisKKyAgICAgICAgICAgIEpTVmFsdWUqIHJldHVyblZhbHVl
ID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPih2KS0+Y2FsbEFzRnVuY3Rpb24oZXhlYywgdGhpc09i
aiwgYXJncyk7CisKKyAgICAgICAgICAgIHIgPSAoKnJlZ2lzdGVyQmFzZSkgKyByZWdpc3Rlck9m
ZnNldDsKKyAgICAgICAgICAgIHJbcjBdLnUuanNWYWx1ZSA9IHJldHVyblZhbHVlOworCisgICAg
ICAgICAgICBWTV9DSEVDS19FWENFUFRJT04oKTsKKworICAgICAgICAgICAgKyt2UEM7CisgICAg
ICAgICAgICBORVhUX09QQ09ERTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FIHRocm93
IHR5cGUgZXJyb3IKKyAgICAgICAgQVNTRVJUKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSk7CisK
KyAgICAgICAgdlBDKys7CisgICAgICAgIE5FWFRfT1BDT0RFOworICAgIH0KKyAgICBCRUdJTl9P
UENPREUob3BfZXZhbCkgeworICAgICAgICBpbnQgcjAgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Cisg
ICAgICAgIGludCByMSA9ICgrK3ZQQyktPnUub3BlcmFuZDsKKyAgICAgICAgaW50IHIyID0gKCsr
dlBDKS0+dS5vcGVyYW5kOworICAgICAgICBpbnQgYXJndiA9ICgrK3ZQQyktPnUub3BlcmFuZDsK
KyAgICAgICAgaW50IGFyZ2MgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CisgICAgICAgIAorICAgICAg
ICBKU1ZhbHVlKiB2ID0gcltyMV0udS5qc1ZhbHVlOworICAgICAgICBKU1ZhbHVlKiBiYXNlID0g
cltyMl0udS5qc1ZhbHVlOworICAgICAgICAKKyAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7Cisg
ICAgICAgIENhbGxUeXBlIGNhbGxUeXBlID0gdi0+Z2V0Q2FsbERhdGEoY2FsbERhdGEpOworICAg
ICAgICAKKyAgICAgICAgaWYgKGJhc2UgPT0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpICYm
IHYgPT0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5ldmFsRnVuY3Rpb24oKSkgeworICAg
ICAgICAgICAgSlNWYWx1ZSogeCA9IGFyZ2MgPj0gMiA/IHJbYXJndiArIDFdLnUuanNWYWx1ZSA6
IGpzVW5kZWZpbmVkKCk7CisKKyAgICAgICAgICAgIFVTdHJpbmcgcyA9IHgtPnRvU3RyaW5nKGV4
ZWMpOworICAgICAgICAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OKCk7CisKKyAgICAgICAgICAgIGlu
dCBzb3VyY2VJZDsKKyAgICAgICAgICAgIGludCBlcnJMaW5lOworICAgICAgICAgICAgVVN0cmlu
ZyBlcnJNc2c7CisgICAgICAgICAgICBSZWZQdHI8RXZhbE5vZGU+IGV2YWxOb2RlID0gcGFyc2Vy
KCkucGFyc2U8RXZhbE5vZGU+KFVTdHJpbmcoKSwgMCwgcy5kYXRhKCksIHMuc2l6ZSgpLCAmc291
cmNlSWQsICZlcnJMaW5lLCAmZXJyTXNnKTsKKworICAgICAgICAgICAgRXZhbEV4ZWNTdGF0ZSBu
ZXdFeGVjKGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSwgZXhlYy0+dGhpc1ZhbHVlKCksIGV2
YWxOb2RlLmdldCgpLCBleGVjLCBleGVjLT5zY29wZUNoYWluKCksIGV4ZWMtPmR5bmFtaWNHbG9i
YWxPYmplY3QoKSk7CisKKyAgICAgICAgICAgIEpTVmFsdWUqIGV4Y2VwdGlvbiA9IDA7CisgICAg
ICAgICAgICBKU1ZhbHVlKiB2YWx1ZSA9IG1hY2hpbmUoKS5leGVjdXRlKGV2YWxOb2RlLmdldCgp
LCAmbmV3RXhlYywgJm5ld0V4ZWMuZHluYW1pY0dsb2JhbE9iamVjdCgpLT5yZWdpc3RlckZpbGVT
dGFjaygpLCBzY29wZUNoYWluLCAmZXhjZXB0aW9uKTsKKworICAgICAgICAgICAgLy8gRklYTUU6
IGRlYWwgd2l0aCB0aGUgY2FzZSB3aGVyZSB0aGUgZXZhbCByYWlzZWQgYW4gZXhjZXB0aW9uCisK
KyAgICAgICAgICAgIHJbcjBdLnUuanNWYWx1ZSA9IHZhbHVlID8gdmFsdWUgOiBqc1VuZGVmaW5l
ZCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICArK3ZQQzsKKyAgICAgICAgICAgIE5FWFRf
T1BDT0RFOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBKU1ZhbHVlKiB0aGlzVmFsdWUg
PSBiYXNlLT50b09iamVjdChleGVjKS0+aXNBY3RpdmF0aW9uT2JqZWN0KCkgPyBleGVjLT5keW5h
bWljR2xvYmFsT2JqZWN0KCkgOiBiYXNlOworICAgICAgICAKKyAgICAgICAgaWYgKGNhbGxUeXBl
ID09IENhbGxUeXBlSlMpIHsKKyAgICAgICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9IHIgLSAo
KnJlZ2lzdGVyQmFzZSk7CisgICAgICAgICAgICBSZWdpc3RlciogY2FsbEZyYW1lID0gciArIGFy
Z3YgLSBDYWxsRnJhbWVIZWFkZXJTaXplOworCisgICAgICAgICAgICByW2FyZ3ZdLnUuanNWYWx1
ZSA9IHRoaXNWYWx1ZTsKKyAgICAgICAgICAgIGluaXRpYWxpemVDYWxsRnJhbWUoY2FsbEZyYW1l
LCBjb2RlQmxvY2ssIHZQQywgc2NvcGVDaGFpbiwgcmVnaXN0ZXJPZmZzZXQsIHIwLCBhcmd2LCAw
KTsKKworICAgICAgICAgICAgU2NvcGVDaGFpbiogY2FsbERhdGFTY29wZUNoYWluID0gY2FsbERh
dGEuanMuc2NvcGVDaGFpbjsKKyAgICAgICAgICAgIEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9u
Qm9keU5vZGUgPSBjYWxsRGF0YS5qcy5mdW5jdGlvbkJvZHk7CisKKyAgICAgICAgICAgIGNvZGVC
bG9jayA9ICZmdW5jdGlvbkJvZHlOb2RlLT5jb2RlKGNhbGxEYXRhU2NvcGVDaGFpbi0+bm9kZSgp
KTsKKyAgICAgICAgICAgIHIgPSBzbGlkZVJlZ2lzdGVyV2luZG93Rm9yQ2FsbChjb2RlQmxvY2ss
IHJlZ2lzdGVyRmlsZSwgcmVnaXN0ZXJCYXNlLCByZWdpc3Rlck9mZnNldCwgYXJndiwgYXJnYyk7
CisgICAgICAgICAgICBzY29wZUNoYWluID0gc2NvcGVDaGFpbkZvckNhbGwoY29kZUJsb2NrLCBj
YWxsRGF0YVNjb3BlQ2hhaW4sIGZ1bmN0aW9uQm9keU5vZGUsIGNhbGxGcmFtZSwgcmVnaXN0ZXJC
YXNlLCByKTsgICAgICAgICAgICAKKyAgICAgICAgICAgIGsgPSBjb2RlQmxvY2stPmpzVmFsdWVz
LmRhdGEoKTsKKyAgICAgICAgICAgIHZQQyA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zLmJlZ2lu
KCk7CiAKLSAgICAgICAgICAgIHJbYXJndl0udS5qc1ZhbHVlID0gcjIgPT0gbWlzc2luZ1N5bWJv
bE1hcmtlcigpID8ganNOdWxsKCkgOiAocltyMl0udS5qc1ZhbHVlKS0+dG9PYmplY3QoZXhlYyk7
IC8vICJ0aGlzIiB2YWx1ZQorICAgICAgICAgICAgTkVYVF9PUENPREU7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOYXRpdmUpIHsKKyAgICAgICAgICAgIGlu
dCByZWdpc3Rlck9mZnNldCA9IHIgLSAoKnJlZ2lzdGVyQmFzZSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIHJbYXJndl0udS5qc1ZhbHVlID0gdGhpc1ZhbHVlOwogICAgICAgICAgICAgSlNP
YmplY3QqIHRoaXNPYmogPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHJbYXJndl0udS5qc1ZhbHVl
KTsKIAogICAgICAgICAgICAgTGlzdCBhcmdzKCZyW2FyZ3YgKyAxXS51LmpzVmFsdWUsIGFyZ2Mg
LSAxKTsKSW5kZXg6IFZNL01hY2hpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBWTS9NYWNoaW5lLmgJKHJl
dmlzaW9uIDMxOTI5KQorKysgVk0vTWFjaGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw2ICs3
OCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICAKICAgICAgICAgSlNWYWx1ZSogZXhlY3V0
ZShQcm9ncmFtTm9kZSosIEV4ZWNTdGF0ZSosIFJlZ2lzdGVyRmlsZVN0YWNrKiwgU2NvcGVDaGFp
biosIEpTVmFsdWUqKiBleGNlcHRpb24pOwogICAgICAgICBKU1ZhbHVlKiBleGVjdXRlKEZ1bmN0
aW9uQm9keU5vZGUqLCBjb25zdCBMaXN0JiBhcmdzLCBKU09iamVjdCogdGhpc09iaiwgRXhlY1N0
YXRlKiwgUmVnaXN0ZXJGaWxlU3RhY2sqLCBTY29wZUNoYWluKiwgSlNWYWx1ZSoqIGV4Y2VwdGlv
bik7CisgICAgICAgIEpTVmFsdWUqIGV4ZWN1dGUoRXZhbE5vZGUqLCBFeGVjU3RhdGUqLCBSZWdp
c3RlckZpbGVTdGFjayosIFNjb3BlQ2hhaW5Ob2RlKiwgSlNWYWx1ZSoqIGV4Y2VwdGlvbik7CiAg
ICAgICAgIAogICAgIHByaXZhdGU6CiAgICAgICAgIHR5cGVkZWYgZW51bSB7IE5vcm1hbCwgSW5p
dGlhbGl6ZUFuZFJldHVybiB9IEV4ZWN1dGlvbkZsYWc7CkluZGV4OiBWTS9PcGNvZGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBWTS9PcGNvZGUuaAkocmV2aXNpb24gMzE5MjkpCisrKyBWTS9PcGNvZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtOTUsNiArOTUsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAg
bWFjcm8ob3BfbmV3X2Z1bmMpIFwKICAgICAgICAgbWFjcm8ob3BfbmV3X2Z1bmNfZXhwKSBcCiAg
ICAgICAgIG1hY3JvKG9wX2NhbGwpIFwKKyAgICAgICAgbWFjcm8ob3BfZXZhbCkgXAogICAgICAg
ICBtYWNybyhvcF9yZXQpIFwKICAgICAgICAgXAogICAgICAgICBtYWNybyhvcF9jb25zdHJ1Y3Qp
IFwKSW5kZXg6IGtqcy9mdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL2Z1bmN0aW9uLmNw
cAkocmV2aXNpb24gMzE5MjkpCisrKyBranMvZnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02OTYsMjEgKzY5NiwxNSBAQCBKU1ZhbHVlKiBldmFsKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
U2NvCiAgICAgVVN0cmluZyBlcnJNc2c7CiAgICAgUmVmUHRyPEV2YWxOb2RlPiBldmFsTm9kZSA9
IHBhcnNlcigpLnBhcnNlPEV2YWxOb2RlPihVU3RyaW5nKCksIDAsIHMuZGF0YSgpLCBzLnNpemUo
KSwgJnNvdXJjZUlkLCAmZXJyTGluZSwgJmVyck1zZyk7CiAKLSAgICBEZWJ1Z2dlciogZGJnID0g
ZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpOwotICAgIGlmIChkYmcpIHsK
LSAgICAgICAgYm9vbCBjb250ID0gZGJnLT5zb3VyY2VQYXJzZWQoZXhlYywgc291cmNlSWQsIFVT
dHJpbmcoKSwgcywgMCwgZXJyTGluZSwgZXJyTXNnKTsKLSAgICAgICAgaWYgKCFjb250KQotICAg
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotCiAgICAgaWYgKCFldmFsTm9k
ZSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsIGVyck1zZywg
ZXJyTGluZSwgc291cmNlSWQsIE5VTEwpOwogCiAgICAgRXZhbEV4ZWNTdGF0ZSBuZXdFeGVjKGds
b2JhbE9iamVjdCwgdGhpc09iaiwgZXZhbE5vZGUuZ2V0KCksIGV4ZWMsIHNjb3BlQ2hhaW4sIHZh
cmlhYmxlT2JqZWN0KTsKLQotICAgIEpTVmFsdWUqIHZhbHVlID0gZXZhbE5vZGUtPmV4ZWN1dGUo
Jm5ld0V4ZWMpOwotCi0gICAgaWYgKG5ld0V4ZWMuY29tcGxldGlvblR5cGUoKSA9PSBUaHJvdykg
eworICAgIAorICAgIEpTVmFsdWUqIGV4Y2VwdGlvbiA9IDA7CisgICAgSlNWYWx1ZSogdmFsdWUg
PSBtYWNoaW5lKCkuZXhlY3V0ZShldmFsTm9kZS5nZXQoKSwgJm5ld0V4ZWMsICZuZXdFeGVjLmR5
bmFtaWNHbG9iYWxPYmplY3QoKS0+cmVnaXN0ZXJGaWxlU3RhY2soKSwgbmV3RXhlYy5zY29wZUNo
YWluKCkubm9kZSgpLCAmZXhjZXB0aW9uKTsKKyAgICAKKyAgICBpZiAoZXhjZXB0aW9uKSB7CiAg
ICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbih2YWx1ZSk7CiAgICAgICAgIHJldHVybiB2YWx1ZTsK
ICAgICB9CkluZGV4OiBranMvbm9kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9ub2Rlcy5jcHAJ
KHJldmlzaW9uIDMxOTI5KQorKysga2pzL25vZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI3
NSw2ICsxMjc1LDE0IEBAIGlubGluZSBKU1ZhbHVlKiBFeHByZXNzaW9uTm9kZTo6cmVzb2x2ZUEK
ICAgICByZXR1cm4gdGhyb3dVbmRlZmluZWRWYXJpYWJsZUVycm9yKGV4ZWMsIGlkZW50KTsKIH0K
IAorUmVnaXN0ZXJJRCogRXZhbEZ1bmN0aW9uQ2FsbE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0
b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQoreworICAgIFJlZlB0cjxSZWdpc3RlcklE
PiByMCA9IGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KTsKKyAgICBSZWdpc3RlcklEKiBy
MSA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKyAgICBnZW5lcmF0b3IuZW1pdFJlc29sdmVC
YXNlQW5kUHJvcGVydHkocjAuZ2V0KCksIHIxLCBDb21tb25JZGVudGlmaWVyczo6c2hhcmVkKCkt
PmV2YWwpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEV2YWwoZ2VuZXJhdG9yLmZpbmFsRGVz
dGluYXRpb24oZHN0LCByMC5nZXQoKSksIHIxLCByMC5nZXQoKSwgbV9hcmdzLmdldCgpKTsKK30K
Kwogdm9pZCBFdmFsRnVuY3Rpb25DYWxsTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhFeGVj
U3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFj
ayYgbm9kZVN0YWNrKQogewogICAgIG5vZGVTdGFjay5hcHBlbmQobV9hcmdzLmdldCgpKTsKQEAg
LTU1OTYsNiArNTYwNCwxNSBAQCBFdmFsTm9kZTo6fkV2YWxOb2RlKCkKIHsKIH0KIAorUmVnaXN0
ZXJJRCogRXZhbE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0
ZXJJRCopCit7CisgICAgUmVnaXN0ZXJJRCogcjAgPSBzdGF0ZW1lbnRMaXN0RW1pdENvZGUobV9j
aGlsZHJlbiwgZ2VuZXJhdG9yKTsKKyAgICBpZiAoIXIwKQorICAgICAgICByMCA9IGdlbmVyYXRv
ci5lbWl0TG9hZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGpzVW5kZWZpbmVkKCkpOworICAg
IGdlbmVyYXRvci5lbWl0RW5kKHIwKTsKKyAgICByZXR1cm4gMDsKK30KKwogdm9pZCBFdmFsTm9k
ZTo6Z2VuZXJhdGVDb2RlKFNjb3BlQ2hhaW5Ob2RlKiBzYykKIHsKICAgICBTY29wZUNoYWluIHNj
b3BlQ2hhaW4oc2MpOwpAQCAtNTYwNCw3ICs1NjIxLDEwIEBAIHZvaWQgRXZhbE5vZGU6OmdlbmVy
YXRlQ29kZShTY29wZUNoYWluTm8KICAgICAKICAgICBtX2NvZGUuc2V0KG5ldyBQcm9ncmFtQ29k
ZUJsb2NrKHVzZXNFdmFsKCksIG5lZWRzQ2xvc3VyZSgpLCBnbG9iYWxPYmplY3QpKTsKICAgICAK
LSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBDb2RlR2VuZXJhdG9yIGdlbmVyYXRvcih0
aGlzLCBzY29wZUNoYWluLCAmZ2xvYmFsT2JqZWN0LT5zeW1ib2xUYWJsZSgpLCBtX2NvZGUuZ2V0
KCkpOworICAgIGdlbmVyYXRvci5nZW5lcmF0ZSgpOworCisgICAgbV9jaGlsZHJlbi5zaHJpbmtD
YXBhY2l0eSgwKTsKIH0KIAogRXZhbE5vZGUqIEV2YWxOb2RlOjpjcmVhdGUoU291cmNlRWxlbWVu
dHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1bmNTdGFj
aywgYm9vbCB1c2VzRXZhbCwgYm9vbCBuZWVkc0Nsb3N1cmUpCkluZGV4OiBranMvbm9kZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBranMvbm9kZXMuaAkocmV2aXNpb24gMzE5MjkpCisrKyBranMvbm9kZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtNzk4LDYgKzc5OCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAg
ICAgICB7CiAgICAgICAgIH0KIAorICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2Rl
KENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7CiAgICAgICAg
IHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEV4ZWNTdGF0ZSosIGNvbnN0IFN5
bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FM
TDsKICAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFT
VF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29u
c3QgS0pTX0ZBU1RfQ0FMTDsKQEAgLTI5OTAsNiArMjk5MSw3IEBAIG5hbWVzcGFjZSBLSlMgewog
CiAgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBwcm9jZXNzRGVjbGFyYXRpb25zKEV4ZWNTdGF0
ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZvaWQgZ2VuZXJhdGVDb2RlKFNjb3BlQ2hhaW5O
b2RlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29k
ZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwogCiAgICAg
ICAgIE93blB0cjxQcm9ncmFtQ29kZUJsb2NrPiBtX2NvZGU7CiAgICAgfTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>20602</attachid>
            <date>2008-04-16 13:41:48 -0700</date>
            <delta_ts>2008-04-16 13:41:48 -0700</delta_ts>
            <desc>Reduction of crash</desc>
            <filename>date-format-tofte.js</filename>
            <type>text/plain</type>
            <size>160</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">ZnVuY3Rpb24gZigpIHsgfQoKRGF0ZS5wcm90b3R5cGUuZm9ybWF0RGF0ZSA9IGZ1bmN0aW9uICgp
IHsKICAgIGV2YWwoIjEiKTsKICAgIGYoKTsKfQoKdmFyIGRhdGUgPSBuZXcgRGF0ZSgiMS8xLzIw
MDcgMToxMToxMSIpOwp2YXIgcmVzdWx0ID0gZGF0ZS5mb3JtYXREYXRlKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>20607</attachid>
            <date>2008-04-16 16:49:09 -0700</date>
            <delta_ts>2008-04-16 17:22:51 -0700</delta_ts>
            <desc>Revised patch in progress</desc>
            <filename>eval.diff</filename>
            <type>text/plain</type>
            <size>16936</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IFZNL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVk0vQ29kZUJsb2NrLmNwcAko
cmV2aXNpb24gMzE5MjkpCisrKyBWTS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MzAsNiArNDMwLDE1IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYywgY28K
ICAgICAgICAgICAgIHByaW50ZigiWyU0ZF0gY2FsbFx0XHQlcywgJXMsICVzLCAlZCwgJWRcbiIs
IGxvY2F0aW9uLCByZWdpc3Rlck5hbWUocjApLmNfc3RyKCksIHJlZ2lzdGVyTmFtZShyMSkuY19z
dHIoKSwgcmVnaXN0ZXJOYW1lKHIyKS5jX3N0cigpLCB0ZW1wQ291bnQsIGFyZ0NvdW50KTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZXZhbDogeworICAg
ICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEg
PSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMiA9ICgrK2l0KS0+dS5vcGVy
YW5kOworICAgICAgICAgICAgaW50IHRlbXBDb3VudCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAg
ICAgICAgICAgaW50IGFyZ0NvdW50ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBw
cmludGYoIlslNGRdIGV2YWxcdFx0JXMsICVzLCAlcywgJWQsICVkXG4iLCBsb2NhdGlvbiwgcmVn
aXN0ZXJOYW1lKHIwKS5jX3N0cigpLCByZWdpc3Rlck5hbWUocjEpLmNfc3RyKCksIHJlZ2lzdGVy
TmFtZShyMikuY19zdHIoKSwgdGVtcENvdW50LCBhcmdDb3VudCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQogICAgICAgICBjYXNlIG9wX3JldDogewogICAgICAgICAgICAgaW50IHIw
ID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBwcmludGYoIlslNGRdIHJldFx0XHQl
c1xuIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShyMCkuY19zdHIoKSk7CkluZGV4OiBWTS9Db2Rl
R2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBWTS9Db2RlR2VuZXJhdG9yLmNwcAkocmV2aXNp
b24gMzE5MjkpCisrKyBWTS9Db2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEz
LDcgKzExMyw3IEBAIG5hbWVzcGFjZSBLSlMgewogKi8KIAogI2lmbmRlZiBOREVCVUcKLWJvb2wg
Q29kZUdlbmVyYXRvcjo6c19kdW1wc0dlbmVyYXRlZENvZGUgPSBmYWxzZTsKK2Jvb2wgQ29kZUdl
bmVyYXRvcjo6c19kdW1wc0dlbmVyYXRlZENvZGUgPSB0cnVlOwogI2VuZGlmCiAKIHZvaWQgQ29k
ZUdlbmVyYXRvcjo6c2V0RHVtcHNHZW5lcmF0ZWRDb2RlKGJvb2wgZHVtcHNHZW5lcmF0ZWRDb2Rl
KQpAQCAtMTYwLDYgKzE2MCw3IEBAIENvZGVHZW5lcmF0b3I6OkNvZGVHZW5lcmF0b3IoUHJvZ3Jh
bU5vZGUKICAgICAsIG1fc2NvcGVOb2RlKHByb2dyYW1Ob2RlKQogICAgICwgbV9jb2RlQmxvY2so
Y29kZUJsb2NrKQogICAgICwgbV9zY29wZURlcHRoKDApCisgICAgLCBtX2lzRXZhbENvZGUoZmFs
c2UpCiAgICAgLCBtX25leHRWYXIoLTEpCiAgICAgLCBtX3Byb3BlcnR5TmFtZXMoQ29tbW9uSWRl
bnRpZmllcnM6OnNoYXJlZCgpKQogCkBAIC0yMDEsNiArMjAyLDcgQEAgQ29kZUdlbmVyYXRvcjo6
Q29kZUdlbmVyYXRvcihGdW5jdGlvbkJvZAogICAgICwgbV9zY29wZU5vZGUoZnVuY3Rpb25Cb2R5
KQogICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQogICAgICwgbV9zY29wZURlcHRoKDApCisg
ICAgLCBtX2lzRXZhbENvZGUoZmFsc2UpCiAgICAgLCBtX25leHRWYXIoLTEpCiAgICAgLCBtX3By
b3BlcnR5TmFtZXMoQ29tbW9uSWRlbnRpZmllcnM6OnNoYXJlZCgpKQogewpAQCAtMjMxLDYgKzIz
MywxOSBAQCBDb2RlR2VuZXJhdG9yOjpDb2RlR2VuZXJhdG9yKEZ1bmN0aW9uQm9kCiAgICAgfQog
fQogCitDb2RlR2VuZXJhdG9yOjpDb2RlR2VuZXJhdG9yKEV2YWxOb2RlKiBldmFsTm9kZSwgY29u
c3QgU2NvcGVDaGFpbiYgc2NvcGVDaGFpbiwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaykKKyAgICA6IG1fc2NvcGVDaGFpbigmc2NvcGVDaGFpbikKKyAgICAs
IG1fc3ltYm9sVGFibGUoc3ltYm9sVGFibGUpCisgICAgLCBtX3Njb3BlTm9kZShldmFsTm9kZSkK
KyAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKKyAgICAsIG1fc2NvcGVEZXB0aCgwKQorICAg
ICwgbV9pc0V2YWxDb2RlKHRydWUpCisgICAgLCBtX25leHRWYXIoLTEpCisgICAgLCBtX3Byb3Bl
cnR5TmFtZXMoQ29tbW9uSWRlbnRpZmllcnM6OnNoYXJlZCgpKQoreworICAgIGFkZFZhcihtX3By
b3BlcnR5TmFtZXMtPnRoaXNJZGVudGlmaWVyKTsKK30KKwogdm9pZCBDb2RlR2VuZXJhdG9yOjph
ZGRQYXJhbWV0ZXIoY29uc3QgSWRlbnRpZmllciYgaWRlbnQpCiB7CiAgICAgLy8gUGFyYW1ldGVy
cyBvdmVyd3JpdGUgdmFyIGRlY2xhcmF0aW9ucywgYnV0IG5vdCBmdW5jdGlvbiBkZWNsYXJhdGlv
bnMsCkBAIC03OTAsNiArODA1LDM0IEBAIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXRD
YWxsKFJlZ2kKICAgICByZXR1cm4gcjA7CiB9CiAKK1JlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6
OmVtaXRFdmFsKFJlZ2lzdGVySUQqIHIwLCBSZWdpc3RlcklEKiByMSwgUmVnaXN0ZXJJRCogcjIs
IEFyZ3VtZW50c05vZGUqIGFyZ3VtZW50c05vZGUpCit7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IHJlZjEgPSByMTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVmMiA9IHIyOworICAgIAorICAg
IC8vIFJlc2VydmUgc3BhY2UgZm9yIGNhbGwgZnJhbWUsIGV2ZW4gdGhvdWdoIHdlIG1heSBub3Qg
bmVlZCBpdCBmb3IgZXZhbAorICAgIFZlY3RvcjxSZWZQdHI8UmVnaXN0ZXJJRD4sIE1hY2hpbmU6
OkNhbGxGcmFtZUhlYWRlclNpemU+IGNhbGxGcmFtZTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8
IE1hY2hpbmU6OkNhbGxGcmFtZUhlYWRlclNpemU7ICsraSkKKyAgICAgICAgY2FsbEZyYW1lLmFw
cGVuZChuZXdUZW1wb3JhcnkoKSk7CisKKyAgICAvLyBHZW5lcmF0ZSBjb2RlIGZvciBhcmd1bWVu
dHMuCisgICAgVmVjdG9yPFJlZlB0cjxSZWdpc3RlcklEPiwgMTY+IGFyZ3Y7CisgICAgYXJndi5h
cHBlbmQobmV3VGVtcG9yYXJ5KCkpOyAvLyByZXNlcnZlIHNwYWNlIGZvciAidGhpcyIKKyAgICBm
b3IgKEFyZ3VtZW50TGlzdE5vZGUqIG4gPSBhcmd1bWVudHNOb2RlLT5tX2xpc3ROb2RlLmdldCgp
OyBuOyBuID0gbi0+bV9uZXh0LmdldCgpKSB7CisgICAgICAgIGFyZ3YuYXBwZW5kKG5ld1RlbXBv
cmFyeSgpKTsKKyAgICAgICAgZW1pdE5vZGUoYXJndi5sYXN0KCkuZ2V0KCksIG4pOworICAgIH0K
KworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtYWNoaW5lKCkuZ2V0T3Bjb2RlKG9wX2V2YWwp
KTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocjAtPmluZGV4KCkpOworICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChyMS0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHIy
LT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYXJndi5zaXplKCkgPyBhcmd2
WzBdLT5pbmRleCgpIDogbV90ZW1wb3Jhcmllcy5zaXplKCkpOyAvLyBhcmd2CisgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKGFyZ3Yuc2l6ZSgpKTsgLy8gYXJnYworCisgICAgcmV0dXJuIHIwOwor
fQorCiBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0UmV0dXJuKFJlZ2lzdGVySUQqIHIw
KQogewogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtYWNoaW5lKCkuZ2V0T3Bjb2RlKG9wX3Jl
dCkpOwpJbmRleDogVk0vQ29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFZNL0NvZGVHZW5l
cmF0b3IuaAkocmV2aXNpb24gMzE5MjkpCisrKyBWTS9Db2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTYzLDYgKzYzLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIAogICAgICAg
ICBDb2RlR2VuZXJhdG9yKFByb2dyYW1Ob2RlKiwgY29uc3QgU2NvcGVDaGFpbiYsIFN5bWJvbFRh
YmxlKiwgQ29kZUJsb2NrKiwgVmFyU3RhY2smLCBGdW5jdGlvblN0YWNrJik7CiAgICAgICAgIENv
ZGVHZW5lcmF0b3IoRnVuY3Rpb25Cb2R5Tm9kZSosIGNvbnN0IFNjb3BlQ2hhaW4mLCBTeW1ib2xU
YWJsZSosIENvZGVCbG9jayosIFZhclN0YWNrJiwgRnVuY3Rpb25TdGFjayYsIFZlY3RvcjxJZGVu
dGlmaWVyPiYgcGFyYW1ldGVycyk7CisgICAgICAgIENvZGVHZW5lcmF0b3IoRXZhbE5vZGUqLCBj
b25zdCBTY29wZUNoYWluJiwgU3ltYm9sVGFibGUqLCBDb2RlQmxvY2sqKTsKIAogICAgICAgICBj
b25zdCBDb21tb25JZGVudGlmaWVycyYgcHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0dXJuICpt
X3Byb3BlcnR5TmFtZXM7IH0KIApAQCAtMTgwLDYgKzE4MSw3IEBAIG5hbWVzcGFjZSBLSlMgewog
ICAgICAgICBSZWdpc3RlcklEKiBlbWl0UHV0UHJvcEluZGV4KFJlZ2lzdGVySUQqIGJhc2UsIHVu
c2lnbmVkIGluZGV4LCBSZWdpc3RlcklEKiB2YWwpOwogCiAgICAgICAgIFJlZ2lzdGVySUQqIGVt
aXRDYWxsKFJlZ2lzdGVySUQqLCBSZWdpc3RlcklEKiwgUmVnaXN0ZXJJRCosIEFyZ3VtZW50c05v
ZGUqKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEV2YWwoUmVnaXN0ZXJJRCosIFJlZ2lzdGVy
SUQqLCBSZWdpc3RlcklEKiwgQXJndW1lbnRzTm9kZSopOwogICAgICAgICBSZWdpc3RlcklEKiBl
bWl0UmV0dXJuKFJlZ2lzdGVySUQqKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEVuZChSZWdp
c3RlcklEKik7CiAKQEAgLTI0Miw3ICsyNDQsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAg
U3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKCkgeyByZXR1cm4gKm1fc3ltYm9sVGFibGU7IH0KICAg
ICAgICAgVmVjdG9yPEhhbmRsZXJJbmZvPiYgZXhjZXB0aW9uSGFuZGxlcnMoKSB7IHJldHVybiBt
X2NvZGVCbG9jay0+ZXhjZXB0aW9uSGFuZGxlcnM7IH0KICAgICAgICAgCi0gICAgICAgIGJvb2wg
c2hvdWxkT3B0aW1pemVMb2NhbHMoKSB7IHJldHVybiAhbV9zY29wZURlcHRoOyB9CisgICAgICAg
IGJvb2wgc2hvdWxkT3B0aW1pemVMb2NhbHMoKSB7IHJldHVybiAhbV9pc0V2YWxDb2RlICYmICFt
X3Njb3BlRGVwdGg7IH0KIAogICAgICAgICBjb25zdCBTY29wZUNoYWluKiBtX3Njb3BlQ2hhaW47
CiAgICAgICAgIFN5bWJvbFRhYmxlKiBtX3N5bWJvbFRhYmxlOwpAQCAtMjU2LDYgKzI1OCw3IEBA
IG5hbWVzcGFjZSBLSlMgewogICAgICAgICBWZWN0b3I8UmVnaXN0ZXJJRCwgMTI4PiBtX3RlbXBv
cmFyaWVzOwogICAgICAgICBWZWN0b3I8TGFiZWxJRCwgMTI4PiBtX2xhYmVsczsKICAgICAgICAg
aW50IG1fc2NvcGVEZXB0aDsKKyAgICAgICAgYm9vbCBtX2lzRXZhbENvZGU7CiAgICAgICAgIAog
ICAgICAgICBWZWN0b3I8SnVtcENvbnRleHQ+IG1fanVtcENvbnRleHRTdGFjazsKIApJbmRleDog
Vk0vTWFjaGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVk0vTWFjaGluZS5jcHAJKHJldmlzaW9uIDMx
OTI5KQorKysgVk0vTWFjaGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0NCw2ICs1NDQsMjIg
QEAgSlNWYWx1ZSogTWFjaGluZTo6ZXhlY3V0ZShGdW5jdGlvbkJvZHlObwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKK0pTVmFsdWUqIE1hY2hpbmU6OmV4ZWN1dGUoRXZhbE5vZGUqIGV2YWxOb2Rl
LCBFeGVjU3RhdGUqIGV4ZWMsIFJlZ2lzdGVyRmlsZSogcmVnaXN0ZXJGaWxlLCBpbnQgcmVnaXN0
ZXJPZmZzZXQsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBKU1ZhbHVlKiogZXhjZXB0aW9u
KQoreworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gJmV2YWxOb2RlLT5jb2RlKHNjb3BlQ2hh
aW4pOworICAgIAorICAgIHNpemVfdCBvbGRTaXplID0gcmVnaXN0ZXJGaWxlLT5zaXplKCk7Cisg
ICAgc2l6ZV90IG5ld1NpemUgPSByZWdpc3Rlck9mZnNldCArIGNvZGVCbG9jay0+bnVtVmFycyAr
IGNvZGVCbG9jay0+bnVtVGVtcG9yYXJpZXM7CisgICAgcmVnaXN0ZXJGaWxlLT5ncm93KG5ld1Np
emUpOworICAgIFJlZ2lzdGVyKiByID0gKCpyZWdpc3RlckZpbGUtPmJhc2VQb2ludGVyKCkpICsg
cmVnaXN0ZXJPZmZzZXQgKyBjb2RlQmxvY2stPm51bVZhcnM7CisgICAgCisgICAgSlNWYWx1ZSog
cmVzdWx0ID0gcHJpdmF0ZUV4ZWN1dGUoTm9ybWFsLCBleGVjLCByZWdpc3RlckZpbGUsIHIsIHNj
b3BlQ2hhaW4sIGNvZGVCbG9jaywgZXhjZXB0aW9uKTsKKyAgICAKKyAgICByZWdpc3RlckZpbGUt
PnNocmluayhvbGRTaXplKTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBKU1ZhbHVl
KiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpb25GbGFnIGZsYWcsIEV4ZWNTdGF0ZSog
ZXhlYywgUmVnaXN0ZXJGaWxlKiByZWdpc3RlckZpbGUsIFJlZ2lzdGVyKiByLCBTY29wZUNoYWlu
Tm9kZSogc2NvcGVDaGFpbiwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFsdWUqKiBleGNlcHRp
b24pCiB7CiAgICAgLy8gT25lLXRpbWUgaW5pdGlhbGl6YXRpb24gb2Ygb3VyIGFkZHJlc3MgdGFi
bGVzLiBXZSBoYXZlIHRvIHB1dCB0aGlzIGNvZGUKQEAgLTExMTIsOSArMTEyOCw5MiBAQCBKU1Zh
bHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgIGlmIChjYWxsVHlw
ZSA9PSBDYWxsVHlwZU5hdGl2ZSkgewogICAgICAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0g
ciAtICgqcmVnaXN0ZXJCYXNlKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gRklYTUU6
IFN1YnN0aXR1dGUgbGV4aWNhbCBnbG9iYWwgb2JqZWN0IGZvciBudWxsLgorICAgICAgICAgICAg
clthcmd2XS51LmpzVmFsdWUgPSByMiA9PSBtaXNzaW5nU3ltYm9sTWFya2VyKCkgPyBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCkgOiAocltyMl0udS5qc1ZhbHVlKS0+dG9PYmplY3QoZXhlYyk7
IC8vICJ0aGlzIiB2YWx1ZQorICAgICAgICAgICAgSlNPYmplY3QqIHRoaXNPYmogPSBzdGF0aWNf
Y2FzdDxKU09iamVjdCo+KHJbYXJndl0udS5qc1ZhbHVlKTsKKworICAgICAgICAgICAgTGlzdCBh
cmdzKCZyW2FyZ3YgKyAxXS51LmpzVmFsdWUsIGFyZ2MgLSAxKTsKKworICAgICAgICAgICAgSlNW
YWx1ZSogcmV0dXJuVmFsdWUgPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHYpLT5jYWxsQXNGdW5j
dGlvbihleGVjLCB0aGlzT2JqLCBhcmdzKTsKKworICAgICAgICAgICAgciA9ICgqcmVnaXN0ZXJC
YXNlKSArIHJlZ2lzdGVyT2Zmc2V0OworICAgICAgICAgICAgcltyMF0udS5qc1ZhbHVlID0gcmV0
dXJuVmFsdWU7CisKKyAgICAgICAgICAgIFZNX0NIRUNLX0VYQ0VQVElPTigpOworCisgICAgICAg
ICAgICArK3ZQQzsKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gRklYTUUgdGhyb3cgdHlwZSBlcnJvcgorICAgICAgICBBU1NFUlQoY2FsbFR5cGUgPT0g
Q2FsbFR5cGVOb25lKTsKKworICAgICAgICB2UEMrKzsKKyAgICAgICAgTkVYVF9PUENPREU7Cisg
ICAgfQorICAgIEJFR0lOX09QQ09ERShvcF9ldmFsKSB7CisgICAgICAgIGludCByMCA9ICgrK3ZQ
QyktPnUub3BlcmFuZDsKKyAgICAgICAgaW50IHIxID0gKCsrdlBDKS0+dS5vcGVyYW5kOworICAg
ICAgICBpbnQgcjIgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CisgICAgICAgIGludCBhcmd2ID0gKCsr
dlBDKS0+dS5vcGVyYW5kOworICAgICAgICBpbnQgYXJnYyA9ICgrK3ZQQyktPnUub3BlcmFuZDsK
KyAgICAgICAgCisgICAgICAgIEpTVmFsdWUqIHYgPSByW3IxXS51LmpzVmFsdWU7CisgICAgICAg
IEpTVmFsdWUqIGJhc2UgPSByW3IyXS51LmpzVmFsdWU7CisgICAgICAgIAorICAgICAgICBDYWxs
RGF0YSBjYWxsRGF0YTsKKyAgICAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSB2LT5nZXRDYWxsRGF0
YShjYWxsRGF0YSk7CisgICAgICAgIAorICAgICAgICBpZiAoYmFzZSA9PSBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCkgJiYgdiA9PSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmV2YWxG
dW5jdGlvbigpKSB7CisgICAgICAgICAgICBKU1ZhbHVlKiB4ID0gYXJnYyA+PSAyID8gclthcmd2
ICsgMV0udS5qc1ZhbHVlIDoganNVbmRlZmluZWQoKTsKKworICAgICAgICAgICAgVVN0cmluZyBz
ID0geC0+dG9TdHJpbmcoZXhlYyk7CisgICAgICAgICAgICBWTV9DSEVDS19FWENFUFRJT04oKTsK
KworICAgICAgICAgICAgaW50IHNvdXJjZUlkOworICAgICAgICAgICAgaW50IGVyckxpbmU7Cisg
ICAgICAgICAgICBVU3RyaW5nIGVyck1zZzsKKyAgICAgICAgICAgIFJlZlB0cjxFdmFsTm9kZT4g
ZXZhbE5vZGUgPSBwYXJzZXIoKS5wYXJzZTxFdmFsTm9kZT4oVVN0cmluZygpLCAwLCBzLmRhdGEo
KSwgcy5zaXplKCksICZzb3VyY2VJZCwgJmVyckxpbmUsICZlcnJNc2cpOworICAgICAgICAgICAg
CisgICAgICAgICAgICAvLyBGSVhNRTogYWRkIGV4Y2VwdGlvbiBmb3IgYSBzeW50YXggZXJyb3IK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgRXZhbEV4ZWNTdGF0ZSBuZXdFeGVjKGV4ZWMtPmR5
bmFtaWNHbG9iYWxPYmplY3QoKSwgZXhlYy0+dGhpc1ZhbHVlKCksIGV2YWxOb2RlLmdldCgpLCBl
eGVjLCBleGVjLT5zY29wZUNoYWluKCksIGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIEpTVmFsdWUqIGV4Y2VwdGlvbiA9IDA7ICAgICAgICAg
ICAgCisgICAgICAgICAgICBKU1ZhbHVlKiB2YWx1ZSA9IG1hY2hpbmUoKS5leGVjdXRlKGV2YWxO
b2RlLmdldCgpLCAmbmV3RXhlYywgcmVnaXN0ZXJGaWxlLCByIC0gKCpyZWdpc3RlckJhc2UpLCBz
Y29wZUNoYWluLCAmZXhjZXB0aW9uKTsKKworICAgICAgICAgICAgLy8gRklYTUU6IGRlYWwgd2l0
aCB0aGUgY2FzZSB3aGVyZSB0aGUgZXZhbCByYWlzZWQgYW4gZXhjZXB0aW9uCiAKLSAgICAgICAg
ICAgIHJbYXJndl0udS5qc1ZhbHVlID0gcjIgPT0gbWlzc2luZ1N5bWJvbE1hcmtlcigpID8ganNO
dWxsKCkgOiAocltyMl0udS5qc1ZhbHVlKS0+dG9PYmplY3QoZXhlYyk7IC8vICJ0aGlzIiB2YWx1
ZQorICAgICAgICAgICAgcltyMF0udS5qc1ZhbHVlID0gdmFsdWUgPyB2YWx1ZSA6IGpzVW5kZWZp
bmVkKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICsrdlBDOworICAgICAgICAgICAgTkVY
VF9PUENPREU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEpTVmFsdWUqIHRoaXNWYWx1
ZSA9IGJhc2UtPnRvT2JqZWN0KGV4ZWMpLT5pc0FjdGl2YXRpb25PYmplY3QoKSA/IGV4ZWMtPmR5
bmFtaWNHbG9iYWxPYmplY3QoKSA6IGJhc2U7CisgICAgICAgIAorICAgICAgICBpZiAoY2FsbFR5
cGUgPT0gQ2FsbFR5cGVKUykgeworICAgICAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gciAt
ICgqcmVnaXN0ZXJCYXNlKTsKKyAgICAgICAgICAgIFJlZ2lzdGVyKiBjYWxsRnJhbWUgPSByICsg
YXJndiAtIENhbGxGcmFtZUhlYWRlclNpemU7CisKKyAgICAgICAgICAgIHJbYXJndl0udS5qc1Zh
bHVlID0gdGhpc1ZhbHVlOworICAgICAgICAgICAgaW5pdGlhbGl6ZUNhbGxGcmFtZShjYWxsRnJh
bWUsIGNvZGVCbG9jaywgdlBDLCBzY29wZUNoYWluLCByZWdpc3Rlck9mZnNldCwgcjAsIGFyZ3Ys
IDApOworCisgICAgICAgICAgICBTY29wZUNoYWluKiBjYWxsRGF0YVNjb3BlQ2hhaW4gPSBjYWxs
RGF0YS5qcy5zY29wZUNoYWluOworICAgICAgICAgICAgRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rp
b25Cb2R5Tm9kZSA9IGNhbGxEYXRhLmpzLmZ1bmN0aW9uQm9keTsKKworICAgICAgICAgICAgY29k
ZUJsb2NrID0gJmZ1bmN0aW9uQm9keU5vZGUtPmNvZGUoY2FsbERhdGFTY29wZUNoYWluLT5ub2Rl
KCkpOworICAgICAgICAgICAgciA9IHNsaWRlUmVnaXN0ZXJXaW5kb3dGb3JDYWxsKGNvZGVCbG9j
aywgcmVnaXN0ZXJGaWxlLCByZWdpc3RlckJhc2UsIHJlZ2lzdGVyT2Zmc2V0LCBhcmd2LCBhcmdj
KTsKKyAgICAgICAgICAgIHNjb3BlQ2hhaW4gPSBzY29wZUNoYWluRm9yQ2FsbChjb2RlQmxvY2ss
IGNhbGxEYXRhU2NvcGVDaGFpbiwgZnVuY3Rpb25Cb2R5Tm9kZSwgY2FsbEZyYW1lLCByZWdpc3Rl
ckJhc2UsIHIpOyAgICAgICAgICAgIAorICAgICAgICAgICAgayA9IGNvZGVCbG9jay0+anNWYWx1
ZXMuZGF0YSgpOworICAgICAgICAgICAgdlBDID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMuYmVn
aW4oKTsKKworICAgICAgICAgICAgTkVYVF9PUENPREU7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOYXRpdmUpIHsKKyAgICAgICAgICAgIGludCByZWdpc3Rl
ck9mZnNldCA9IHIgLSAoKnJlZ2lzdGVyQmFzZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IHJbYXJndl0udS5qc1ZhbHVlID0gdGhpc1ZhbHVlOwogICAgICAgICAgICAgSlNPYmplY3QqIHRo
aXNPYmogPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHJbYXJndl0udS5qc1ZhbHVlKTsKIAogICAg
ICAgICAgICAgTGlzdCBhcmdzKCZyW2FyZ3YgKyAxXS51LmpzVmFsdWUsIGFyZ2MgLSAxKTsKSW5k
ZXg6IFZNL01hY2hpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBWTS9NYWNoaW5lLmgJKHJldmlzaW9uIDMx
OTI5KQorKysgVk0vTWFjaGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw2ICs3OCw3IEBAIG5h
bWVzcGFjZSBLSlMgewogICAgICAgICAKICAgICAgICAgSlNWYWx1ZSogZXhlY3V0ZShQcm9ncmFt
Tm9kZSosIEV4ZWNTdGF0ZSosIFJlZ2lzdGVyRmlsZVN0YWNrKiwgU2NvcGVDaGFpbiosIEpTVmFs
dWUqKiBleGNlcHRpb24pOwogICAgICAgICBKU1ZhbHVlKiBleGVjdXRlKEZ1bmN0aW9uQm9keU5v
ZGUqLCBjb25zdCBMaXN0JiBhcmdzLCBKU09iamVjdCogdGhpc09iaiwgRXhlY1N0YXRlKiwgUmVn
aXN0ZXJGaWxlU3RhY2sqLCBTY29wZUNoYWluKiwgSlNWYWx1ZSoqIGV4Y2VwdGlvbik7CisgICAg
ICAgIEpTVmFsdWUqIGV4ZWN1dGUoRXZhbE5vZGUqLCBFeGVjU3RhdGUqLCBSZWdpc3RlckZpbGUq
LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIFNjb3BlQ2hhaW5Ob2RlKiwgSlNWYWx1ZSoqIGV4Y2VwdGlv
bik7CiAgICAgICAgIAogICAgIHByaXZhdGU6CiAgICAgICAgIHR5cGVkZWYgZW51bSB7IE5vcm1h
bCwgSW5pdGlhbGl6ZUFuZFJldHVybiB9IEV4ZWN1dGlvbkZsYWc7CkluZGV4OiBWTS9PcGNvZGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBWTS9PcGNvZGUuaAkocmV2aXNpb24gMzE5MjkpCisrKyBWTS9PcGNv
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtOTUsNiArOTUsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAg
ICAgICAgbWFjcm8ob3BfbmV3X2Z1bmMpIFwKICAgICAgICAgbWFjcm8ob3BfbmV3X2Z1bmNfZXhw
KSBcCiAgICAgICAgIG1hY3JvKG9wX2NhbGwpIFwKKyAgICAgICAgbWFjcm8ob3BfZXZhbCkgXAog
ICAgICAgICBtYWNybyhvcF9yZXQpIFwKICAgICAgICAgXAogICAgICAgICBtYWNybyhvcF9jb25z
dHJ1Y3QpIFwKSW5kZXg6IGtqcy9mdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL2Z1bmN0
aW9uLmNwcAkocmV2aXNpb24gMzE5MjkpCisrKyBranMvZnVuY3Rpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02ODUsMzcgKzY4NSw0MCBAQCBzdGF0aWMgZG91YmxlIHBhcnNlRmxvYXQoY29uc3Qg
VVN0cmluZyYgCiAKIEpTVmFsdWUqIGV2YWwoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTY29wZUNo
YWluJiBzY29wZUNoYWluLCBKU1ZhcmlhYmxlT2JqZWN0KiB2YXJpYWJsZU9iamVjdCwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3QmIGFy
Z3MpCiB7Ci0gICAgSlNWYWx1ZSogeCA9IGFyZ3NbMF07Ci0gICAgaWYgKCF4LT5pc1N0cmluZygp
KQotICAgICAgICByZXR1cm4geDsKLQotICAgIFVTdHJpbmcgcyA9IHgtPnRvU3RyaW5nKGV4ZWMp
OwotCi0gICAgaW50IHNvdXJjZUlkOwotICAgIGludCBlcnJMaW5lOwotICAgIFVTdHJpbmcgZXJy
TXNnOwotICAgIFJlZlB0cjxFdmFsTm9kZT4gZXZhbE5vZGUgPSBwYXJzZXIoKS5wYXJzZTxFdmFs
Tm9kZT4oVVN0cmluZygpLCAwLCBzLmRhdGEoKSwgcy5zaXplKCksICZzb3VyY2VJZCwgJmVyckxp
bmUsICZlcnJNc2cpOwotCi0gICAgRGVidWdnZXIqIGRiZyA9IGV4ZWMtPmR5bmFtaWNHbG9iYWxP
YmplY3QoKS0+ZGVidWdnZXIoKTsKLSAgICBpZiAoZGJnKSB7Ci0gICAgICAgIGJvb2wgY29udCA9
IGRiZy0+c291cmNlUGFyc2VkKGV4ZWMsIHNvdXJjZUlkLCBVU3RyaW5nKCksIHMsIDAsIGVyckxp
bmUsIGVyck1zZyk7Ci0gICAgICAgIGlmICghY29udCkKLSAgICAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwotICAgIH0KLQotICAgIGlmICghZXZhbE5vZGUpCi0gICAgICAgIHJldHVybiB0
aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yLCBlcnJNc2csIGVyckxpbmUsIHNvdXJjZUlkLCBO
VUxMKTsKLQotICAgIEV2YWxFeGVjU3RhdGUgbmV3RXhlYyhnbG9iYWxPYmplY3QsIHRoaXNPYmos
IGV2YWxOb2RlLmdldCgpLCBleGVjLCBzY29wZUNoYWluLCB2YXJpYWJsZU9iamVjdCk7Ci0KLSAg
ICBKU1ZhbHVlKiB2YWx1ZSA9IGV2YWxOb2RlLT5leGVjdXRlKCZuZXdFeGVjKTsKKyAgICAvLyBK
U1ZhbHVlKiB4ID0gYXJnc1swXTsKKyAgICAvLyBpZiAoIXgtPmlzU3RyaW5nKCkpCisgICAgLy8g
ICAgIHJldHVybiB4OworICAgIC8vIAorICAgIC8vIFVTdHJpbmcgcyA9IHgtPnRvU3RyaW5nKGV4
ZWMpOworICAgIC8vIAorICAgIC8vIGludCBzb3VyY2VJZDsKKyAgICAvLyBpbnQgZXJyTGluZTsK
KyAgICAvLyBVU3RyaW5nIGVyck1zZzsKKyAgICAvLyBSZWZQdHI8RXZhbE5vZGU+IGV2YWxOb2Rl
ID0gcGFyc2VyKCkucGFyc2U8RXZhbE5vZGU+KFVTdHJpbmcoKSwgMCwgcy5kYXRhKCksIHMuc2l6
ZSgpLCAmc291cmNlSWQsICZlcnJMaW5lLCAmZXJyTXNnKTsKKyAgICAvLyAKKyAgICAvLyBpZiAo
IWV2YWxOb2RlKQorICAgIC8vICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJv
ciwgZXJyTXNnLCBlcnJMaW5lLCBzb3VyY2VJZCwgTlVMTCk7CisgICAgLy8gCisgICAgLy8gRXZh
bEV4ZWNTdGF0ZSBuZXdFeGVjKGdsb2JhbE9iamVjdCwgdGhpc09iaiwgZXZhbE5vZGUuZ2V0KCks
IGV4ZWMsIHNjb3BlQ2hhaW4sIHZhcmlhYmxlT2JqZWN0KTsKKyAgICAvLyAKKyAgICAvLyBKU1Zh
bHVlKiBleGNlcHRpb24gPSAwOworICAgIC8vIEpTVmFsdWUqIHZhbHVlID0gbWFjaGluZSgpLmV4
ZWN1dGUoZXZhbE5vZGUuZ2V0KCksICZuZXdFeGVjLCAmbmV3RXhlYy5keW5hbWljR2xvYmFsT2Jq
ZWN0KCktPnJlZ2lzdGVyRmlsZVN0YWNrKCksIG5ld0V4ZWMuc2NvcGVDaGFpbigpLm5vZGUoKSwg
JmV4Y2VwdGlvbik7CisgICAgLy8gCisgICAgLy8gaWYgKGV4Y2VwdGlvbikgeworICAgIC8vICAg
ICBleGVjLT5zZXRFeGNlcHRpb24odmFsdWUpOworICAgIC8vICAgICByZXR1cm4gdmFsdWU7Cisg
ICAgLy8gfQorICAgIC8vIAorICAgIC8vIHJldHVybiB2YWx1ZSA/IHZhbHVlIDoganNVbmRlZmlu
ZWQoKTsKKworICAgIFVOVVNFRF9QQVJBTShleGVjKTsKKyAgICBVTlVTRURfUEFSQU0oc2NvcGVD
aGFpbik7CisgICAgVU5VU0VEX1BBUkFNKHZhcmlhYmxlT2JqZWN0KTsKKyAgICBVTlVTRURfUEFS
QU0oZ2xvYmFsT2JqZWN0KTsKKyAgICBVTlVTRURfUEFSQU0odGhpc09iaik7CisgICAgVU5VU0VE
X1BBUkFNKGFyZ3MpOwogCi0gICAgaWYgKG5ld0V4ZWMuY29tcGxldGlvblR5cGUoKSA9PSBUaHJv
dykgewotICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24odmFsdWUpOwotICAgICAgICByZXR1cm4g
dmFsdWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZhbHVlID8gdmFsdWUgOiBqc1VuZGVmaW5lZCgp
OworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCiBKU1ZhbHVlKiBnbG9iYWxGdW5jRXZh
bChFeGVjU3RhdGUqIGV4ZWMsIFByb3RvdHlwZVJlZmxleGl2ZUZ1bmN0aW9uKiBmdW5jdGlvbiwg
SlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3QmIGFyZ3MpCkluZGV4OiBranMvbm9kZXMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGtqcy9ub2Rlcy5jcHAJKHJldmlzaW9uIDMxOTI5KQorKysga2pzL25v
ZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI3NSw2ICsxMjc1LDE0IEBAIGlubGluZSBKU1Zh
bHVlKiBFeHByZXNzaW9uTm9kZTo6cmVzb2x2ZUEKICAgICByZXR1cm4gdGhyb3dVbmRlZmluZWRW
YXJpYWJsZUVycm9yKGV4ZWMsIGlkZW50KTsKIH0KIAorUmVnaXN0ZXJJRCogRXZhbEZ1bmN0aW9u
Q2FsbE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCog
ZHN0KQoreworICAgIFJlZlB0cjxSZWdpc3RlcklEPiByMCA9IGdlbmVyYXRvci50ZW1wRGVzdGlu
YXRpb24oZHN0KTsKKyAgICBSZWdpc3RlcklEKiByMSA9IGdlbmVyYXRvci5uZXdUZW1wb3Jhcnko
KTsKKyAgICBnZW5lcmF0b3IuZW1pdFJlc29sdmVCYXNlQW5kUHJvcGVydHkocjAuZ2V0KCksIHIx
LCBDb21tb25JZGVudGlmaWVyczo6c2hhcmVkKCktPmV2YWwpOworICAgIHJldHVybiBnZW5lcmF0
b3IuZW1pdEV2YWwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCByMC5nZXQoKSksIHIx
LCByMC5nZXQoKSwgbV9hcmdzLmdldCgpKTsKK30KKwogdm9pZCBFdmFsRnVuY3Rpb25DYWxsTm9k
ZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYs
IGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYgbm9kZVN0YWNrKQogewogICAgIG5vZGVT
dGFjay5hcHBlbmQobV9hcmdzLmdldCgpKTsKQEAgLTU1OTYsNiArNTYwNCwxNSBAQCBFdmFsTm9k
ZTo6fkV2YWxOb2RlKCkKIHsKIH0KIAorUmVnaXN0ZXJJRCogRXZhbE5vZGU6OmVtaXRDb2RlKENv
ZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCopCit7CisgICAgUmVnaXN0ZXJJRCog
cjAgPSBzdGF0ZW1lbnRMaXN0RW1pdENvZGUobV9jaGlsZHJlbiwgZ2VuZXJhdG9yKTsKKyAgICBp
ZiAoIXIwKQorICAgICAgICByMCA9IGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3IubmV3VGVt
cG9yYXJ5KCksIGpzVW5kZWZpbmVkKCkpOworICAgIGdlbmVyYXRvci5lbWl0RW5kKHIwKTsKKyAg
ICByZXR1cm4gMDsKK30KKwogdm9pZCBFdmFsTm9kZTo6Z2VuZXJhdGVDb2RlKFNjb3BlQ2hhaW5O
b2RlKiBzYykKIHsKICAgICBTY29wZUNoYWluIHNjb3BlQ2hhaW4oc2MpOwpAQCAtNTYwNCw3ICs1
NjIxLDEwIEBAIHZvaWQgRXZhbE5vZGU6OmdlbmVyYXRlQ29kZShTY29wZUNoYWluTm8KICAgICAK
ICAgICBtX2NvZGUuc2V0KG5ldyBQcm9ncmFtQ29kZUJsb2NrKHVzZXNFdmFsKCksIG5lZWRzQ2xv
c3VyZSgpLCBnbG9iYWxPYmplY3QpKTsKICAgICAKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICBDb2RlR2VuZXJhdG9yIGdlbmVyYXRvcih0aGlzLCBzY29wZUNoYWluLCBuZXcgU3ltYm9s
VGFibGUoKSwgbV9jb2RlLmdldCgpKTsKKyAgICBnZW5lcmF0b3IuZ2VuZXJhdGUoKTsKKworICAg
IG1fY2hpbGRyZW4uc2hyaW5rQ2FwYWNpdHkoMCk7CiB9CiAKIEV2YWxOb2RlKiBFdmFsTm9kZTo6
Y3JlYXRlKFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5j
dGlvblN0YWNrKiBmdW5jU3RhY2ssIGJvb2wgdXNlc0V2YWwsIGJvb2wgbmVlZHNDbG9zdXJlKQpJ
bmRleDoga2pzL25vZGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL25vZGVzLmgJKHJldmlzaW9uIDMx
OTI5KQorKysga2pzL25vZGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5OCw2ICs3OTgsNyBAQCBu
YW1lc3BhY2UgS0pTIHsKICAgICAgICAgewogICAgICAgICB9CiAKKyAgICAgICAgdmlydHVhbCBS
ZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNf
RkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhF
eGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVT
dGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUo
RXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRv
KFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CkBAIC0yOTkwLDYgKzI5OTEsNyBA
QCBuYW1lc3BhY2UgS0pTIHsKIAogICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgcHJvY2Vzc0Rl
Y2xhcmF0aW9ucyhFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2b2lkIGdlbmVy
YXRlQ29kZShTY29wZUNoYWluTm9kZSopIEtKU19GQVNUX0NBTEw7CisgICAgICAgIHZpcnR1YWwg
UmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pT
X0ZBU1RfQ0FMTDsKIAogICAgICAgICBPd25QdHI8UHJvZ3JhbUNvZGVCbG9jaz4gbV9jb2RlOwog
ICAgIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>20608</attachid>
            <date>2008-04-16 17:22:51 -0700</date>
            <delta_ts>2008-04-16 17:49:53 -0700</delta_ts>
            <desc>Revised patch in progress</desc>
            <filename>eval.diff</filename>
            <type>text/plain</type>
            <size>17087</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IFZNL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVk0vQ29kZUJsb2NrLmNwcAko
cmV2aXNpb24gMzE5MjkpCisrKyBWTS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MzAsNiArNDMwLDE1IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYywgY28K
ICAgICAgICAgICAgIHByaW50ZigiWyU0ZF0gY2FsbFx0XHQlcywgJXMsICVzLCAlZCwgJWRcbiIs
IGxvY2F0aW9uLCByZWdpc3Rlck5hbWUocjApLmNfc3RyKCksIHJlZ2lzdGVyTmFtZShyMSkuY19z
dHIoKSwgcmVnaXN0ZXJOYW1lKHIyKS5jX3N0cigpLCB0ZW1wQ291bnQsIGFyZ0NvdW50KTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZXZhbDogeworICAg
ICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEg
PSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMiA9ICgrK2l0KS0+dS5vcGVy
YW5kOworICAgICAgICAgICAgaW50IHRlbXBDb3VudCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAg
ICAgICAgICAgaW50IGFyZ0NvdW50ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBw
cmludGYoIlslNGRdIGV2YWxcdFx0JXMsICVzLCAlcywgJWQsICVkXG4iLCBsb2NhdGlvbiwgcmVn
aXN0ZXJOYW1lKHIwKS5jX3N0cigpLCByZWdpc3Rlck5hbWUocjEpLmNfc3RyKCksIHJlZ2lzdGVy
TmFtZShyMikuY19zdHIoKSwgdGVtcENvdW50LCBhcmdDb3VudCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQogICAgICAgICBjYXNlIG9wX3JldDogewogICAgICAgICAgICAgaW50IHIw
ID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBwcmludGYoIlslNGRdIHJldFx0XHQl
c1xuIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShyMCkuY19zdHIoKSk7CkluZGV4OiBWTS9Db2Rl
R2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBWTS9Db2RlR2VuZXJhdG9yLmNwcAkocmV2aXNp
b24gMzE5MjkpCisrKyBWTS9Db2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEz
LDcgKzExMyw3IEBAIG5hbWVzcGFjZSBLSlMgewogKi8KIAogI2lmbmRlZiBOREVCVUcKLWJvb2wg
Q29kZUdlbmVyYXRvcjo6c19kdW1wc0dlbmVyYXRlZENvZGUgPSBmYWxzZTsKK2Jvb2wgQ29kZUdl
bmVyYXRvcjo6c19kdW1wc0dlbmVyYXRlZENvZGUgPSB0cnVlOwogI2VuZGlmCiAKIHZvaWQgQ29k
ZUdlbmVyYXRvcjo6c2V0RHVtcHNHZW5lcmF0ZWRDb2RlKGJvb2wgZHVtcHNHZW5lcmF0ZWRDb2Rl
KQpAQCAtMTYwLDYgKzE2MCw3IEBAIENvZGVHZW5lcmF0b3I6OkNvZGVHZW5lcmF0b3IoUHJvZ3Jh
bU5vZGUKICAgICAsIG1fc2NvcGVOb2RlKHByb2dyYW1Ob2RlKQogICAgICwgbV9jb2RlQmxvY2so
Y29kZUJsb2NrKQogICAgICwgbV9zY29wZURlcHRoKDApCisgICAgLCBtX2lzRXZhbENvZGUoZmFs
c2UpCiAgICAgLCBtX25leHRWYXIoLTEpCiAgICAgLCBtX3Byb3BlcnR5TmFtZXMoQ29tbW9uSWRl
bnRpZmllcnM6OnNoYXJlZCgpKQogCkBAIC0yMDEsNiArMjAyLDcgQEAgQ29kZUdlbmVyYXRvcjo6
Q29kZUdlbmVyYXRvcihGdW5jdGlvbkJvZAogICAgICwgbV9zY29wZU5vZGUoZnVuY3Rpb25Cb2R5
KQogICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQogICAgICwgbV9zY29wZURlcHRoKDApCisg
ICAgLCBtX2lzRXZhbENvZGUoZmFsc2UpCiAgICAgLCBtX25leHRWYXIoLTEpCiAgICAgLCBtX3By
b3BlcnR5TmFtZXMoQ29tbW9uSWRlbnRpZmllcnM6OnNoYXJlZCgpKQogewpAQCAtMjMxLDYgKzIz
MywxOSBAQCBDb2RlR2VuZXJhdG9yOjpDb2RlR2VuZXJhdG9yKEZ1bmN0aW9uQm9kCiAgICAgfQog
fQogCitDb2RlR2VuZXJhdG9yOjpDb2RlR2VuZXJhdG9yKEV2YWxOb2RlKiBldmFsTm9kZSwgY29u
c3QgU2NvcGVDaGFpbiYgc2NvcGVDaGFpbiwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaykKKyAgICA6IG1fc2NvcGVDaGFpbigmc2NvcGVDaGFpbikKKyAgICAs
IG1fc3ltYm9sVGFibGUoc3ltYm9sVGFibGUpCisgICAgLCBtX3Njb3BlTm9kZShldmFsTm9kZSkK
KyAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKKyAgICAsIG1fc2NvcGVEZXB0aCgwKQorICAg
ICwgbV9pc0V2YWxDb2RlKHRydWUpCisgICAgLCBtX25leHRWYXIoLTEpCisgICAgLCBtX3Byb3Bl
cnR5TmFtZXMoQ29tbW9uSWRlbnRpZmllcnM6OnNoYXJlZCgpKQoreworICAgIGFkZFZhcihtX3By
b3BlcnR5TmFtZXMtPnRoaXNJZGVudGlmaWVyKTsKK30KKwogdm9pZCBDb2RlR2VuZXJhdG9yOjph
ZGRQYXJhbWV0ZXIoY29uc3QgSWRlbnRpZmllciYgaWRlbnQpCiB7CiAgICAgLy8gUGFyYW1ldGVy
cyBvdmVyd3JpdGUgdmFyIGRlY2xhcmF0aW9ucywgYnV0IG5vdCBmdW5jdGlvbiBkZWNsYXJhdGlv
bnMsCkBAIC03OTAsNiArODA1LDM0IEBAIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXRD
YWxsKFJlZ2kKICAgICByZXR1cm4gcjA7CiB9CiAKK1JlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6
OmVtaXRFdmFsKFJlZ2lzdGVySUQqIHIwLCBSZWdpc3RlcklEKiByMSwgUmVnaXN0ZXJJRCogcjIs
IEFyZ3VtZW50c05vZGUqIGFyZ3VtZW50c05vZGUpCit7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IHJlZjEgPSByMTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVmMiA9IHIyOworICAgIAorICAg
IC8vIFJlc2VydmUgc3BhY2UgZm9yIGNhbGwgZnJhbWUsIGV2ZW4gdGhvdWdoIHdlIG1heSBub3Qg
bmVlZCBpdCBmb3IgZXZhbAorICAgIFZlY3RvcjxSZWZQdHI8UmVnaXN0ZXJJRD4sIE1hY2hpbmU6
OkNhbGxGcmFtZUhlYWRlclNpemU+IGNhbGxGcmFtZTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8
IE1hY2hpbmU6OkNhbGxGcmFtZUhlYWRlclNpemU7ICsraSkKKyAgICAgICAgY2FsbEZyYW1lLmFw
cGVuZChuZXdUZW1wb3JhcnkoKSk7CisKKyAgICAvLyBHZW5lcmF0ZSBjb2RlIGZvciBhcmd1bWVu
dHMuCisgICAgVmVjdG9yPFJlZlB0cjxSZWdpc3RlcklEPiwgMTY+IGFyZ3Y7CisgICAgYXJndi5h
cHBlbmQobmV3VGVtcG9yYXJ5KCkpOyAvLyByZXNlcnZlIHNwYWNlIGZvciAidGhpcyIKKyAgICBm
b3IgKEFyZ3VtZW50TGlzdE5vZGUqIG4gPSBhcmd1bWVudHNOb2RlLT5tX2xpc3ROb2RlLmdldCgp
OyBuOyBuID0gbi0+bV9uZXh0LmdldCgpKSB7CisgICAgICAgIGFyZ3YuYXBwZW5kKG5ld1RlbXBv
cmFyeSgpKTsKKyAgICAgICAgZW1pdE5vZGUoYXJndi5sYXN0KCkuZ2V0KCksIG4pOworICAgIH0K
KworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtYWNoaW5lKCkuZ2V0T3Bjb2RlKG9wX2V2YWwp
KTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocjAtPmluZGV4KCkpOworICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChyMS0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHIy
LT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYXJndi5zaXplKCkgPyBhcmd2
WzBdLT5pbmRleCgpIDogbV90ZW1wb3Jhcmllcy5zaXplKCkpOyAvLyBhcmd2CisgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKGFyZ3Yuc2l6ZSgpKTsgLy8gYXJnYworCisgICAgcmV0dXJuIHIwOwor
fQorCiBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0UmV0dXJuKFJlZ2lzdGVySUQqIHIw
KQogewogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtYWNoaW5lKCkuZ2V0T3Bjb2RlKG9wX3Jl
dCkpOwpJbmRleDogVk0vQ29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFZNL0NvZGVHZW5l
cmF0b3IuaAkocmV2aXNpb24gMzE5MjkpCisrKyBWTS9Db2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTYzLDYgKzYzLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIAogICAgICAg
ICBDb2RlR2VuZXJhdG9yKFByb2dyYW1Ob2RlKiwgY29uc3QgU2NvcGVDaGFpbiYsIFN5bWJvbFRh
YmxlKiwgQ29kZUJsb2NrKiwgVmFyU3RhY2smLCBGdW5jdGlvblN0YWNrJik7CiAgICAgICAgIENv
ZGVHZW5lcmF0b3IoRnVuY3Rpb25Cb2R5Tm9kZSosIGNvbnN0IFNjb3BlQ2hhaW4mLCBTeW1ib2xU
YWJsZSosIENvZGVCbG9jayosIFZhclN0YWNrJiwgRnVuY3Rpb25TdGFjayYsIFZlY3RvcjxJZGVu
dGlmaWVyPiYgcGFyYW1ldGVycyk7CisgICAgICAgIENvZGVHZW5lcmF0b3IoRXZhbE5vZGUqLCBj
b25zdCBTY29wZUNoYWluJiwgU3ltYm9sVGFibGUqLCBDb2RlQmxvY2sqKTsKIAogICAgICAgICBj
b25zdCBDb21tb25JZGVudGlmaWVycyYgcHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0dXJuICpt
X3Byb3BlcnR5TmFtZXM7IH0KIApAQCAtMTgwLDYgKzE4MSw3IEBAIG5hbWVzcGFjZSBLSlMgewog
ICAgICAgICBSZWdpc3RlcklEKiBlbWl0UHV0UHJvcEluZGV4KFJlZ2lzdGVySUQqIGJhc2UsIHVu
c2lnbmVkIGluZGV4LCBSZWdpc3RlcklEKiB2YWwpOwogCiAgICAgICAgIFJlZ2lzdGVySUQqIGVt
aXRDYWxsKFJlZ2lzdGVySUQqLCBSZWdpc3RlcklEKiwgUmVnaXN0ZXJJRCosIEFyZ3VtZW50c05v
ZGUqKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEV2YWwoUmVnaXN0ZXJJRCosIFJlZ2lzdGVy
SUQqLCBSZWdpc3RlcklEKiwgQXJndW1lbnRzTm9kZSopOwogICAgICAgICBSZWdpc3RlcklEKiBl
bWl0UmV0dXJuKFJlZ2lzdGVySUQqKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEVuZChSZWdp
c3RlcklEKik7CiAKQEAgLTI0Miw3ICsyNDQsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAg
U3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKCkgeyByZXR1cm4gKm1fc3ltYm9sVGFibGU7IH0KICAg
ICAgICAgVmVjdG9yPEhhbmRsZXJJbmZvPiYgZXhjZXB0aW9uSGFuZGxlcnMoKSB7IHJldHVybiBt
X2NvZGVCbG9jay0+ZXhjZXB0aW9uSGFuZGxlcnM7IH0KICAgICAgICAgCi0gICAgICAgIGJvb2wg
c2hvdWxkT3B0aW1pemVMb2NhbHMoKSB7IHJldHVybiAhbV9zY29wZURlcHRoOyB9CisgICAgICAg
IGJvb2wgc2hvdWxkT3B0aW1pemVMb2NhbHMoKSB7IHJldHVybiAhbV9pc0V2YWxDb2RlICYmICFt
X3Njb3BlRGVwdGg7IH0KIAogICAgICAgICBjb25zdCBTY29wZUNoYWluKiBtX3Njb3BlQ2hhaW47
CiAgICAgICAgIFN5bWJvbFRhYmxlKiBtX3N5bWJvbFRhYmxlOwpAQCAtMjU2LDYgKzI1OCw3IEBA
IG5hbWVzcGFjZSBLSlMgewogICAgICAgICBWZWN0b3I8UmVnaXN0ZXJJRCwgMTI4PiBtX3RlbXBv
cmFyaWVzOwogICAgICAgICBWZWN0b3I8TGFiZWxJRCwgMTI4PiBtX2xhYmVsczsKICAgICAgICAg
aW50IG1fc2NvcGVEZXB0aDsKKyAgICAgICAgYm9vbCBtX2lzRXZhbENvZGU7CiAgICAgICAgIAog
ICAgICAgICBWZWN0b3I8SnVtcENvbnRleHQ+IG1fanVtcENvbnRleHRTdGFjazsKIApJbmRleDog
Vk0vTWFjaGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVk0vTWFjaGluZS5jcHAJKHJldmlzaW9uIDMx
OTI5KQorKysgVk0vTWFjaGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0NCw2ICs1NDQsMjIg
QEAgSlNWYWx1ZSogTWFjaGluZTo6ZXhlY3V0ZShGdW5jdGlvbkJvZHlObwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKK0pTVmFsdWUqIE1hY2hpbmU6OmV4ZWN1dGUoRXZhbE5vZGUqIGV2YWxOb2Rl
LCBFeGVjU3RhdGUqIGV4ZWMsIFJlZ2lzdGVyRmlsZSogcmVnaXN0ZXJGaWxlLCBpbnQgcmVnaXN0
ZXJPZmZzZXQsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBKU1ZhbHVlKiogZXhjZXB0aW9u
KQoreworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gJmV2YWxOb2RlLT5jb2RlKHNjb3BlQ2hh
aW4pOworCisgICAgc2l6ZV90IG9sZFNpemUgPSByZWdpc3RlckZpbGUtPnNpemUoKTsKKyAgICBz
aXplX3QgbmV3U2l6ZSA9IHJlZ2lzdGVyT2Zmc2V0ICsgY29kZUJsb2NrLT5udW1WYXJzICsgY29k
ZUJsb2NrLT5udW1UZW1wb3JhcmllczsKKyAgICByZWdpc3RlckZpbGUtPmdyb3cobmV3U2l6ZSk7
CisgICAgUmVnaXN0ZXIqIHIgPSAoKnJlZ2lzdGVyRmlsZS0+YmFzZVBvaW50ZXIoKSkgKyByZWdp
c3Rlck9mZnNldCArIGNvZGVCbG9jay0+bnVtVmFyczsKKyAgICAKKyAgICBKU1ZhbHVlKiByZXN1
bHQgPSBwcml2YXRlRXhlY3V0ZShOb3JtYWwsIGV4ZWMsIHJlZ2lzdGVyRmlsZSwgciwgc2NvcGVD
aGFpbiwgY29kZUJsb2NrLCBleGNlcHRpb24pOworICAgIAorICAgIHJlZ2lzdGVyRmlsZS0+c2hy
aW5rKG9sZFNpemUpOworICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEpTVmFsdWUqIE1h
Y2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGlvbkZsYWcgZmxhZywgRXhlY1N0YXRlKiBleGVj
LCBSZWdpc3RlckZpbGUqIHJlZ2lzdGVyRmlsZSwgUmVnaXN0ZXIqIHIsIFNjb3BlQ2hhaW5Ob2Rl
KiBzY29wZUNoYWluLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSoqIGV4Y2VwdGlvbikK
IHsKICAgICAvLyBPbmUtdGltZSBpbml0aWFsaXphdGlvbiBvZiBvdXIgYWRkcmVzcyB0YWJsZXMu
IFdlIGhhdmUgdG8gcHV0IHRoaXMgY29kZQpAQCAtMTExMiw5ICsxMTI4LDk2IEBAIEpTVmFsdWUq
IE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgaWYgKGNhbGxUeXBlID09
IENhbGxUeXBlTmF0aXZlKSB7CiAgICAgICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSByIC0g
KCpyZWdpc3RlckJhc2UpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBGSVhNRTogU3Vi
c3RpdHV0ZSBsZXhpY2FsIGdsb2JhbCBvYmplY3QgZm9yIG51bGwuCisgICAgICAgICAgICByW2Fy
Z3ZdLnUuanNWYWx1ZSA9IHIyID09IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSA/IGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSA6IChyW3IyXS51LmpzVmFsdWUpLT50b09iamVjdChleGVjKTsgLy8g
InRoaXMiIHZhbHVlCisgICAgICAgICAgICBKU09iamVjdCogdGhpc09iaiA9IHN0YXRpY19jYXN0
PEpTT2JqZWN0Kj4oclthcmd2XS51LmpzVmFsdWUpOworCisgICAgICAgICAgICBMaXN0IGFyZ3Mo
JnJbYXJndiArIDFdLnUuanNWYWx1ZSwgYXJnYyAtIDEpOworCisgICAgICAgICAgICBKU1ZhbHVl
KiByZXR1cm5WYWx1ZSA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4odiktPmNhbGxBc0Z1bmN0aW9u
KGV4ZWMsIHRoaXNPYmosIGFyZ3MpOworCisgICAgICAgICAgICByID0gKCpyZWdpc3RlckJhc2Up
ICsgcmVnaXN0ZXJPZmZzZXQ7CisgICAgICAgICAgICByW3IwXS51LmpzVmFsdWUgPSByZXR1cm5W
YWx1ZTsKKworICAgICAgICAgICAgVk1fQ0hFQ0tfRVhDRVBUSU9OKCk7CisKKyAgICAgICAgICAg
ICsrdlBDOworICAgICAgICAgICAgTkVYVF9PUENPREU7CisgICAgICAgIH0KKworICAgICAgICAv
LyBGSVhNRSB0aHJvdyB0eXBlIGVycm9yCisgICAgICAgIEFTU0VSVChjYWxsVHlwZSA9PSBDYWxs
VHlwZU5vbmUpOworCisgICAgICAgIHZQQysrOworICAgICAgICBORVhUX09QQ09ERTsKKyAgICB9
CisgICAgQkVHSU5fT1BDT0RFKG9wX2V2YWwpIHsKKyAgICAgICAgaW50IHIwID0gKCsrdlBDKS0+
dS5vcGVyYW5kOworICAgICAgICBpbnQgcjEgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CisgICAgICAg
IGludCByMiA9ICgrK3ZQQyktPnUub3BlcmFuZDsKKyAgICAgICAgaW50IGFyZ3YgPSAoKyt2UEMp
LT51Lm9wZXJhbmQ7CisgICAgICAgIGludCBhcmdjID0gKCsrdlBDKS0+dS5vcGVyYW5kOworICAg
ICAgICAKKyAgICAgICAgSlNWYWx1ZSogdiA9IHJbcjFdLnUuanNWYWx1ZTsKKyAgICAgICAgSlNW
YWx1ZSogYmFzZSA9IHJbcjJdLnUuanNWYWx1ZTsKKyAgICAgICAgCisgICAgICAgIENhbGxEYXRh
IGNhbGxEYXRhOworICAgICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IHYtPmdldENhbGxEYXRhKGNh
bGxEYXRhKTsKKyAgICAgICAgCisgICAgICAgIGlmIChiYXNlID09IGV4ZWMtPmxleGljYWxHbG9i
YWxPYmplY3QoKSAmJiB2ID09IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZXZhbEZ1bmN0
aW9uKCkpIHsKKyAgICAgICAgICAgIEpTVmFsdWUqIHggPSBhcmdjID49IDIgPyByW2FyZ3YgKyAx
XS51LmpzVmFsdWUgOiBqc1VuZGVmaW5lZCgpOworCisgICAgICAgICAgICBVU3RyaW5nIHMgPSB4
LT50b1N0cmluZyhleGVjKTsKKyAgICAgICAgICAgIFZNX0NIRUNLX0VYQ0VQVElPTigpOworCisg
ICAgICAgICAgICBpbnQgc291cmNlSWQ7CisgICAgICAgICAgICBpbnQgZXJyTGluZTsKKyAgICAg
ICAgICAgIFVTdHJpbmcgZXJyTXNnOworICAgICAgICAgICAgUmVmUHRyPEV2YWxOb2RlPiBldmFs
Tm9kZSA9IHBhcnNlcigpLnBhcnNlPEV2YWxOb2RlPihVU3RyaW5nKCksIDAsIHMuZGF0YSgpLCBz
LnNpemUoKSwgJnNvdXJjZUlkLCAmZXJyTGluZSwgJmVyck1zZyk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBhZGQgZXhjZXB0aW9uIGZvciBhIHN5bnRheCBlcnJvcgorICAg
ICAgICAgICAgCisgICAgICAgICAgICBFdmFsRXhlY1N0YXRlIG5ld0V4ZWMoZXhlYy0+ZHluYW1p
Y0dsb2JhbE9iamVjdCgpLCBleGVjLT50aGlzVmFsdWUoKSwgZXZhbE5vZGUuZ2V0KCksIGV4ZWMs
IGV4ZWMtPnNjb3BlQ2hhaW4oKSwgZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gciAtICgqcmVnaXN0ZXJC
YXNlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgSlNWYWx1ZSogZXhjZXB0aW9uID0gMDsg
ICAgICAgICAgICAKKyAgICAgICAgICAgIEpTVmFsdWUqIHZhbHVlID0gbWFjaGluZSgpLmV4ZWN1
dGUoZXZhbE5vZGUuZ2V0KCksICZuZXdFeGVjLCByZWdpc3RlckZpbGUsIHJlZ2lzdGVyT2Zmc2V0
ICsgYXJndiArIGFyZ2MsIHNjb3BlQ2hhaW4sICZleGNlcHRpb24pOworICAgICAgICAgICAgCisg
ICAgICAgICAgICByID0gKCpyZWdpc3RlckJhc2UpICsgcmVnaXN0ZXJPZmZzZXQ7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIC8vIEZJWE1FOiBkZWFsIHdpdGggdGhlIGNhc2Ugd2hlcmUgdGhl
IGV2YWwgcmFpc2VkIGFuIGV4Y2VwdGlvbgogCi0gICAgICAgICAgICByW2FyZ3ZdLnUuanNWYWx1
ZSA9IHIyID09IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSA/IGpzTnVsbCgpIDogKHJbcjJdLnUuanNW
YWx1ZSktPnRvT2JqZWN0KGV4ZWMpOyAvLyAidGhpcyIgdmFsdWUKKyAgICAgICAgICAgIHJbcjBd
LnUuanNWYWx1ZSA9IHZhbHVlID8gdmFsdWUgOiBqc1VuZGVmaW5lZCgpOworICAgICAgICAgICAg
CisgICAgICAgICAgICArK3ZQQzsKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBKU1ZhbHVlKiB0aGlzVmFsdWUgPSBiYXNlLT50b09iamVjdChl
eGVjKS0+aXNBY3RpdmF0aW9uT2JqZWN0KCkgPyBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCkg
OiBiYXNlOworICAgICAgICAKKyAgICAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlSlMpIHsK
KyAgICAgICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9IHIgLSAoKnJlZ2lzdGVyQmFzZSk7Cisg
ICAgICAgICAgICBSZWdpc3RlciogY2FsbEZyYW1lID0gciArIGFyZ3YgLSBDYWxsRnJhbWVIZWFk
ZXJTaXplOworCisgICAgICAgICAgICByW2FyZ3ZdLnUuanNWYWx1ZSA9IHRoaXNWYWx1ZTsKKyAg
ICAgICAgICAgIGluaXRpYWxpemVDYWxsRnJhbWUoY2FsbEZyYW1lLCBjb2RlQmxvY2ssIHZQQywg
c2NvcGVDaGFpbiwgcmVnaXN0ZXJPZmZzZXQsIHIwLCBhcmd2LCAwKTsKKworICAgICAgICAgICAg
U2NvcGVDaGFpbiogY2FsbERhdGFTY29wZUNoYWluID0gY2FsbERhdGEuanMuc2NvcGVDaGFpbjsK
KyAgICAgICAgICAgIEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uQm9keU5vZGUgPSBjYWxsRGF0
YS5qcy5mdW5jdGlvbkJvZHk7CisKKyAgICAgICAgICAgIGNvZGVCbG9jayA9ICZmdW5jdGlvbkJv
ZHlOb2RlLT5jb2RlKGNhbGxEYXRhU2NvcGVDaGFpbi0+bm9kZSgpKTsKKyAgICAgICAgICAgIHIg
PSBzbGlkZVJlZ2lzdGVyV2luZG93Rm9yQ2FsbChjb2RlQmxvY2ssIHJlZ2lzdGVyRmlsZSwgcmVn
aXN0ZXJCYXNlLCByZWdpc3Rlck9mZnNldCwgYXJndiwgYXJnYyk7CisgICAgICAgICAgICBzY29w
ZUNoYWluID0gc2NvcGVDaGFpbkZvckNhbGwoY29kZUJsb2NrLCBjYWxsRGF0YVNjb3BlQ2hhaW4s
IGZ1bmN0aW9uQm9keU5vZGUsIGNhbGxGcmFtZSwgcmVnaXN0ZXJCYXNlLCByKTsgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGsgPSBjb2RlQmxvY2stPmpzVmFsdWVzLmRhdGEoKTsKKyAgICAgICAg
ICAgIHZQQyA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zLmJlZ2luKCk7CisKKyAgICAgICAgICAg
IE5FWFRfT1BDT0RFOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNhbGxUeXBlID09IENhbGxU
eXBlTmF0aXZlKSB7CisgICAgICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSByIC0gKCpyZWdp
c3RlckJhc2UpOworICAgICAgICAgICAgCisgICAgICAgICAgICByW2FyZ3ZdLnUuanNWYWx1ZSA9
IHRoaXNWYWx1ZTsKICAgICAgICAgICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8
SlNPYmplY3QqPihyW2FyZ3ZdLnUuanNWYWx1ZSk7CiAKICAgICAgICAgICAgIExpc3QgYXJncygm
clthcmd2ICsgMV0udS5qc1ZhbHVlLCBhcmdjIC0gMSk7CkluZGV4OiBWTS9NYWNoaW5lLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVk0vTWFjaGluZS5oCShyZXZpc2lvbiAzMTkyOSkKKysrIFZNL01hY2hpbmUu
aAkod29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAg
ICAgCiAgICAgICAgIEpTVmFsdWUqIGV4ZWN1dGUoUHJvZ3JhbU5vZGUqLCBFeGVjU3RhdGUqLCBS
ZWdpc3RlckZpbGVTdGFjayosIFNjb3BlQ2hhaW4qLCBKU1ZhbHVlKiogZXhjZXB0aW9uKTsKICAg
ICAgICAgSlNWYWx1ZSogZXhlY3V0ZShGdW5jdGlvbkJvZHlOb2RlKiwgY29uc3QgTGlzdCYgYXJn
cywgSlNPYmplY3QqIHRoaXNPYmosIEV4ZWNTdGF0ZSosIFJlZ2lzdGVyRmlsZVN0YWNrKiwgU2Nv
cGVDaGFpbiosIEpTVmFsdWUqKiBleGNlcHRpb24pOworICAgICAgICBKU1ZhbHVlKiBleGVjdXRl
KEV2YWxOb2RlKiwgRXhlY1N0YXRlKiwgUmVnaXN0ZXJGaWxlKiwgaW50IHJlZ2lzdGVyT2Zmc2V0
LCBTY29wZUNoYWluTm9kZSosIEpTVmFsdWUqKiBleGNlcHRpb24pOwogICAgICAgICAKICAgICBw
cml2YXRlOgogICAgICAgICB0eXBlZGVmIGVudW0geyBOb3JtYWwsIEluaXRpYWxpemVBbmRSZXR1
cm4gfSBFeGVjdXRpb25GbGFnOwpJbmRleDogVk0vT3Bjb2RlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVk0v
T3Bjb2RlLmgJKHJldmlzaW9uIDMxOTI5KQorKysgVk0vT3Bjb2RlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTk1LDYgKzk1LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIG1hY3JvKG9wX25ld19m
dW5jKSBcCiAgICAgICAgIG1hY3JvKG9wX25ld19mdW5jX2V4cCkgXAogICAgICAgICBtYWNybyhv
cF9jYWxsKSBcCisgICAgICAgIG1hY3JvKG9wX2V2YWwpIFwKICAgICAgICAgbWFjcm8ob3BfcmV0
KSBcCiAgICAgICAgIFwKICAgICAgICAgbWFjcm8ob3BfY29uc3RydWN0KSBcCkluZGV4OiBranMv
ZnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9mdW5jdGlvbi5jcHAJKHJldmlzaW9uIDMx
OTI5KQorKysga2pzL2Z1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjg1LDM3ICs2ODUs
NDAgQEAgc3RhdGljIGRvdWJsZSBwYXJzZUZsb2F0KGNvbnN0IFVTdHJpbmcmIAogCiBKU1ZhbHVl
KiBldmFsKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU2NvcGVDaGFpbiYgc2NvcGVDaGFpbiwgSlNW
YXJpYWJsZU9iamVjdCogdmFyaWFibGVPYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0JiBhcmdzKQogewotICAgIEpTVmFsdWUq
IHggPSBhcmdzWzBdOwotICAgIGlmICgheC0+aXNTdHJpbmcoKSkKLSAgICAgICAgcmV0dXJuIHg7
Ci0KLSAgICBVU3RyaW5nIHMgPSB4LT50b1N0cmluZyhleGVjKTsKLQotICAgIGludCBzb3VyY2VJ
ZDsKLSAgICBpbnQgZXJyTGluZTsKLSAgICBVU3RyaW5nIGVyck1zZzsKLSAgICBSZWZQdHI8RXZh
bE5vZGU+IGV2YWxOb2RlID0gcGFyc2VyKCkucGFyc2U8RXZhbE5vZGU+KFVTdHJpbmcoKSwgMCwg
cy5kYXRhKCksIHMuc2l6ZSgpLCAmc291cmNlSWQsICZlcnJMaW5lLCAmZXJyTXNnKTsKLQotICAg
IERlYnVnZ2VyKiBkYmcgPSBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCk7
Ci0gICAgaWYgKGRiZykgewotICAgICAgICBib29sIGNvbnQgPSBkYmctPnNvdXJjZVBhcnNlZChl
eGVjLCBzb3VyY2VJZCwgVVN0cmluZygpLCBzLCAwLCBlcnJMaW5lLCBlcnJNc2cpOwotICAgICAg
ICBpZiAoIWNvbnQpCi0gICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci0K
LSAgICBpZiAoIWV2YWxOb2RlKQotICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50
YXhFcnJvciwgZXJyTXNnLCBlcnJMaW5lLCBzb3VyY2VJZCwgTlVMTCk7Ci0KLSAgICBFdmFsRXhl
Y1N0YXRlIG5ld0V4ZWMoZ2xvYmFsT2JqZWN0LCB0aGlzT2JqLCBldmFsTm9kZS5nZXQoKSwgZXhl
Yywgc2NvcGVDaGFpbiwgdmFyaWFibGVPYmplY3QpOwotCi0gICAgSlNWYWx1ZSogdmFsdWUgPSBl
dmFsTm9kZS0+ZXhlY3V0ZSgmbmV3RXhlYyk7CisgICAgLy8gSlNWYWx1ZSogeCA9IGFyZ3NbMF07
CisgICAgLy8gaWYgKCF4LT5pc1N0cmluZygpKQorICAgIC8vICAgICByZXR1cm4geDsKKyAgICAv
LyAKKyAgICAvLyBVU3RyaW5nIHMgPSB4LT50b1N0cmluZyhleGVjKTsKKyAgICAvLyAKKyAgICAv
LyBpbnQgc291cmNlSWQ7CisgICAgLy8gaW50IGVyckxpbmU7CisgICAgLy8gVVN0cmluZyBlcnJN
c2c7CisgICAgLy8gUmVmUHRyPEV2YWxOb2RlPiBldmFsTm9kZSA9IHBhcnNlcigpLnBhcnNlPEV2
YWxOb2RlPihVU3RyaW5nKCksIDAsIHMuZGF0YSgpLCBzLnNpemUoKSwgJnNvdXJjZUlkLCAmZXJy
TGluZSwgJmVyck1zZyk7CisgICAgLy8gCisgICAgLy8gaWYgKCFldmFsTm9kZSkKKyAgICAvLyAg
ICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsIGVyck1zZywgZXJyTGluZSwg
c291cmNlSWQsIE5VTEwpOworICAgIC8vIAorICAgIC8vIEV2YWxFeGVjU3RhdGUgbmV3RXhlYyhn
bG9iYWxPYmplY3QsIHRoaXNPYmosIGV2YWxOb2RlLmdldCgpLCBleGVjLCBzY29wZUNoYWluLCB2
YXJpYWJsZU9iamVjdCk7CisgICAgLy8gCisgICAgLy8gSlNWYWx1ZSogZXhjZXB0aW9uID0gMDsK
KyAgICAvLyBKU1ZhbHVlKiB2YWx1ZSA9IG1hY2hpbmUoKS5leGVjdXRlKGV2YWxOb2RlLmdldCgp
LCAmbmV3RXhlYywgJm5ld0V4ZWMuZHluYW1pY0dsb2JhbE9iamVjdCgpLT5yZWdpc3RlckZpbGVT
dGFjaygpLCBuZXdFeGVjLnNjb3BlQ2hhaW4oKS5ub2RlKCksICZleGNlcHRpb24pOworICAgIC8v
IAorICAgIC8vIGlmIChleGNlcHRpb24pIHsKKyAgICAvLyAgICAgZXhlYy0+c2V0RXhjZXB0aW9u
KHZhbHVlKTsKKyAgICAvLyAgICAgcmV0dXJuIHZhbHVlOworICAgIC8vIH0KKyAgICAvLyAKKyAg
ICAvLyByZXR1cm4gdmFsdWUgPyB2YWx1ZSA6IGpzVW5kZWZpbmVkKCk7CisKKyAgICBVTlVTRURf
UEFSQU0oZXhlYyk7CisgICAgVU5VU0VEX1BBUkFNKHNjb3BlQ2hhaW4pOworICAgIFVOVVNFRF9Q
QVJBTSh2YXJpYWJsZU9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7Cisg
ICAgVU5VU0VEX1BBUkFNKHRoaXNPYmopOworICAgIFVOVVNFRF9QQVJBTShhcmdzKTsKIAotICAg
IGlmIChuZXdFeGVjLmNvbXBsZXRpb25UeXBlKCkgPT0gVGhyb3cpIHsKLSAgICAgICAgZXhlYy0+
c2V0RXhjZXB0aW9uKHZhbHVlKTsKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0KLQotICAg
IHJldHVybiB2YWx1ZSA/IHZhbHVlIDoganNVbmRlZmluZWQoKTsKKyAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKIH0KIAogSlNWYWx1ZSogZ2xvYmFsRnVuY0V2YWwoRXhlY1N0YXRlKiBleGVjLCBQ
cm90b3R5cGVSZWZsZXhpdmVGdW5jdGlvbiogZnVuY3Rpb24sIEpTT2JqZWN0KiB0aGlzT2JqLCBj
b25zdCBMaXN0JiBhcmdzKQpJbmRleDoga2pzL25vZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMv
bm9kZXMuY3BwCShyZXZpc2lvbiAzMTkyOSkKKysrIGtqcy9ub2Rlcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEyNzUsNiArMTI3NSwxNCBAQCBpbmxpbmUgSlNWYWx1ZSogRXhwcmVzc2lvbk5vZGU6
OnJlc29sdmVBCiAgICAgcmV0dXJuIHRocm93VW5kZWZpbmVkVmFyaWFibGVFcnJvcihleGVjLCBp
ZGVudCk7CiB9CiAKK1JlZ2lzdGVySUQqIEV2YWxGdW5jdGlvbkNhbGxOb2RlOjplbWl0Q29kZShD
b2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKK3sKKyAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gcjAgPSBnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCk7CisgICAgUmVn
aXN0ZXJJRCogcjEgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgZ2VuZXJhdG9yLmVt
aXRSZXNvbHZlQmFzZUFuZFByb3BlcnR5KHIwLmdldCgpLCByMSwgQ29tbW9uSWRlbnRpZmllcnM6
OnNoYXJlZCgpLT5ldmFsKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRFdmFsKGdlbmVyYXRv
ci5maW5hbERlc3RpbmF0aW9uKGRzdCwgcjAuZ2V0KCkpLCByMSwgcjAuZ2V0KCksIG1fYXJncy5n
ZXQoKSk7Cit9CisKIHZvaWQgRXZhbEZ1bmN0aW9uQ2FsbE5vZGU6Om9wdGltaXplVmFyaWFibGVB
Y2Nlc3MoRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2Um
LCBOb2RlU3RhY2smIG5vZGVTdGFjaykKIHsKICAgICBub2RlU3RhY2suYXBwZW5kKG1fYXJncy5n
ZXQoKSk7CkBAIC01NTk2LDYgKzU2MDQsMTUgQEAgRXZhbE5vZGU6On5FdmFsTm9kZSgpCiB7CiB9
CiAKK1JlZ2lzdGVySUQqIEV2YWxOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0
b3IsIFJlZ2lzdGVySUQqKQoreworICAgIFJlZ2lzdGVySUQqIHIwID0gc3RhdGVtZW50TGlzdEVt
aXRDb2RlKG1fY2hpbGRyZW4sIGdlbmVyYXRvcik7CisgICAgaWYgKCFyMCkKKyAgICAgICAgcjAg
PSBnZW5lcmF0b3IuZW1pdExvYWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBqc1VuZGVmaW5l
ZCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdEVuZChyMCk7CisgICAgcmV0dXJuIDA7Cit9CisKIHZv
aWQgRXZhbE5vZGU6OmdlbmVyYXRlQ29kZShTY29wZUNoYWluTm9kZSogc2MpCiB7CiAgICAgU2Nv
cGVDaGFpbiBzY29wZUNoYWluKHNjKTsKQEAgLTU2MDQsNyArNTYyMSwxMCBAQCB2b2lkIEV2YWxO
b2RlOjpnZW5lcmF0ZUNvZGUoU2NvcGVDaGFpbk5vCiAgICAgCiAgICAgbV9jb2RlLnNldChuZXcg
UHJvZ3JhbUNvZGVCbG9jayh1c2VzRXZhbCgpLCBuZWVkc0Nsb3N1cmUoKSwgZ2xvYmFsT2JqZWN0
KSk7CiAgICAgCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgQ29kZUdlbmVyYXRvciBn
ZW5lcmF0b3IodGhpcywgc2NvcGVDaGFpbiwgbmV3IFN5bWJvbFRhYmxlKCksIG1fY29kZS5nZXQo
KSk7CisgICAgZ2VuZXJhdG9yLmdlbmVyYXRlKCk7CisKKyAgICBtX2NoaWxkcmVuLnNocmlua0Nh
cGFjaXR5KDApOwogfQogCiBFdmFsTm9kZSogRXZhbE5vZGU6OmNyZWF0ZShTb3VyY2VFbGVtZW50
cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNr
LCBib29sIHVzZXNFdmFsLCBib29sIG5lZWRzQ2xvc3VyZSkKSW5kZXg6IGtqcy9ub2Rlcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGtqcy9ub2Rlcy5oCShyZXZpc2lvbiAzMTkyOSkKKysrIGtqcy9ub2Rlcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC03OTgsNiArNzk4LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAg
ICAgIHsKICAgICAgICAgfQogCisgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUo
Q29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAg
dmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVBY2Nlc3MoRXhlY1N0YXRlKiwgY29uc3QgU3lt
Ym9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxM
OwogICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNU
X0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25z
dCBLSlNfRkFTVF9DQUxMOwpAQCAtMjk5MCw2ICsyOTkxLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAK
ICAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIHByb2Nlc3NEZWNsYXJhdGlvbnMoRXhlY1N0YXRl
KikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdm9pZCBnZW5lcmF0ZUNvZGUoU2NvcGVDaGFpbk5v
ZGUqKSBLSlNfRkFTVF9DQUxMOworICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2Rl
KENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7CiAKICAgICAg
ICAgT3duUHRyPFByb2dyYW1Db2RlQmxvY2s+IG1fY29kZTsKICAgICB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>20609</attachid>
            <date>2008-04-16 17:49:53 -0700</date>
            <delta_ts>2008-04-16 19:12:11 -0700</delta_ts>
            <desc>Revised patch in progress</desc>
            <filename>eval.diff</filename>
            <type>text/plain</type>
            <size>19336</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IFZNL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVk0vQ29kZUJsb2NrLmNwcAko
cmV2aXNpb24gMzE5MjkpCisrKyBWTS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MzAsNiArNDMwLDE1IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYywgY28K
ICAgICAgICAgICAgIHByaW50ZigiWyU0ZF0gY2FsbFx0XHQlcywgJXMsICVzLCAlZCwgJWRcbiIs
IGxvY2F0aW9uLCByZWdpc3Rlck5hbWUocjApLmNfc3RyKCksIHJlZ2lzdGVyTmFtZShyMSkuY19z
dHIoKSwgcmVnaXN0ZXJOYW1lKHIyKS5jX3N0cigpLCB0ZW1wQ291bnQsIGFyZ0NvdW50KTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZXZhbDogeworICAg
ICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEg
PSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMiA9ICgrK2l0KS0+dS5vcGVy
YW5kOworICAgICAgICAgICAgaW50IHRlbXBDb3VudCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAg
ICAgICAgICAgaW50IGFyZ0NvdW50ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBw
cmludGYoIlslNGRdIGV2YWxcdFx0JXMsICVzLCAlcywgJWQsICVkXG4iLCBsb2NhdGlvbiwgcmVn
aXN0ZXJOYW1lKHIwKS5jX3N0cigpLCByZWdpc3Rlck5hbWUocjEpLmNfc3RyKCksIHJlZ2lzdGVy
TmFtZShyMikuY19zdHIoKSwgdGVtcENvdW50LCBhcmdDb3VudCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQogICAgICAgICBjYXNlIG9wX3JldDogewogICAgICAgICAgICAgaW50IHIw
ID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBwcmludGYoIlslNGRdIHJldFx0XHQl
c1xuIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShyMCkuY19zdHIoKSk7CkluZGV4OiBWTS9Db2Rl
R2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBWTS9Db2RlR2VuZXJhdG9yLmNwcAkocmV2aXNp
b24gMzE5MjkpCisrKyBWTS9Db2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEz
LDcgKzExMyw3IEBAIG5hbWVzcGFjZSBLSlMgewogKi8KIAogI2lmbmRlZiBOREVCVUcKLWJvb2wg
Q29kZUdlbmVyYXRvcjo6c19kdW1wc0dlbmVyYXRlZENvZGUgPSBmYWxzZTsKK2Jvb2wgQ29kZUdl
bmVyYXRvcjo6c19kdW1wc0dlbmVyYXRlZENvZGUgPSB0cnVlOwogI2VuZGlmCiAKIHZvaWQgQ29k
ZUdlbmVyYXRvcjo6c2V0RHVtcHNHZW5lcmF0ZWRDb2RlKGJvb2wgZHVtcHNHZW5lcmF0ZWRDb2Rl
KQpAQCAtMTYwLDYgKzE2MCw3IEBAIENvZGVHZW5lcmF0b3I6OkNvZGVHZW5lcmF0b3IoUHJvZ3Jh
bU5vZGUKICAgICAsIG1fc2NvcGVOb2RlKHByb2dyYW1Ob2RlKQogICAgICwgbV9jb2RlQmxvY2so
Y29kZUJsb2NrKQogICAgICwgbV9zY29wZURlcHRoKDApCisgICAgLCBtX2lzRXZhbENvZGUoZmFs
c2UpCiAgICAgLCBtX25leHRWYXIoLTEpCiAgICAgLCBtX3Byb3BlcnR5TmFtZXMoQ29tbW9uSWRl
bnRpZmllcnM6OnNoYXJlZCgpKQogCkBAIC0yMDEsNiArMjAyLDcgQEAgQ29kZUdlbmVyYXRvcjo6
Q29kZUdlbmVyYXRvcihGdW5jdGlvbkJvZAogICAgICwgbV9zY29wZU5vZGUoZnVuY3Rpb25Cb2R5
KQogICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQogICAgICwgbV9zY29wZURlcHRoKDApCisg
ICAgLCBtX2lzRXZhbENvZGUoZmFsc2UpCiAgICAgLCBtX25leHRWYXIoLTEpCiAgICAgLCBtX3By
b3BlcnR5TmFtZXMoQ29tbW9uSWRlbnRpZmllcnM6OnNoYXJlZCgpKQogewpAQCAtMjMxLDYgKzIz
MywxOSBAQCBDb2RlR2VuZXJhdG9yOjpDb2RlR2VuZXJhdG9yKEZ1bmN0aW9uQm9kCiAgICAgfQog
fQogCitDb2RlR2VuZXJhdG9yOjpDb2RlR2VuZXJhdG9yKEV2YWxOb2RlKiBldmFsTm9kZSwgY29u
c3QgU2NvcGVDaGFpbiYgc2NvcGVDaGFpbiwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaykKKyAgICA6IG1fc2NvcGVDaGFpbigmc2NvcGVDaGFpbikKKyAgICAs
IG1fc3ltYm9sVGFibGUoc3ltYm9sVGFibGUpCisgICAgLCBtX3Njb3BlTm9kZShldmFsTm9kZSkK
KyAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKKyAgICAsIG1fc2NvcGVEZXB0aCgwKQorICAg
ICwgbV9pc0V2YWxDb2RlKHRydWUpCisgICAgLCBtX25leHRWYXIoLTEpCisgICAgLCBtX3Byb3Bl
cnR5TmFtZXMoQ29tbW9uSWRlbnRpZmllcnM6OnNoYXJlZCgpKQoreworICAgIGFkZFZhcihtX3By
b3BlcnR5TmFtZXMtPnRoaXNJZGVudGlmaWVyKTsKK30KKwogdm9pZCBDb2RlR2VuZXJhdG9yOjph
ZGRQYXJhbWV0ZXIoY29uc3QgSWRlbnRpZmllciYgaWRlbnQpCiB7CiAgICAgLy8gUGFyYW1ldGVy
cyBvdmVyd3JpdGUgdmFyIGRlY2xhcmF0aW9ucywgYnV0IG5vdCBmdW5jdGlvbiBkZWNsYXJhdGlv
bnMsCkBAIC03OTAsNiArODA1LDM0IEBAIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXRD
YWxsKFJlZ2kKICAgICByZXR1cm4gcjA7CiB9CiAKK1JlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6
OmVtaXRFdmFsKFJlZ2lzdGVySUQqIHIwLCBSZWdpc3RlcklEKiByMSwgUmVnaXN0ZXJJRCogcjIs
IEFyZ3VtZW50c05vZGUqIGFyZ3VtZW50c05vZGUpCit7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IHJlZjEgPSByMTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVmMiA9IHIyOworICAgIAorICAg
IC8vIFJlc2VydmUgc3BhY2UgZm9yIGNhbGwgZnJhbWUsIGV2ZW4gdGhvdWdoIHdlIG1heSBub3Qg
bmVlZCBpdCBmb3IgZXZhbAorICAgIFZlY3RvcjxSZWZQdHI8UmVnaXN0ZXJJRD4sIE1hY2hpbmU6
OkNhbGxGcmFtZUhlYWRlclNpemU+IGNhbGxGcmFtZTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8
IE1hY2hpbmU6OkNhbGxGcmFtZUhlYWRlclNpemU7ICsraSkKKyAgICAgICAgY2FsbEZyYW1lLmFw
cGVuZChuZXdUZW1wb3JhcnkoKSk7CisKKyAgICAvLyBHZW5lcmF0ZSBjb2RlIGZvciBhcmd1bWVu
dHMuCisgICAgVmVjdG9yPFJlZlB0cjxSZWdpc3RlcklEPiwgMTY+IGFyZ3Y7CisgICAgYXJndi5h
cHBlbmQobmV3VGVtcG9yYXJ5KCkpOyAvLyByZXNlcnZlIHNwYWNlIGZvciAidGhpcyIKKyAgICBm
b3IgKEFyZ3VtZW50TGlzdE5vZGUqIG4gPSBhcmd1bWVudHNOb2RlLT5tX2xpc3ROb2RlLmdldCgp
OyBuOyBuID0gbi0+bV9uZXh0LmdldCgpKSB7CisgICAgICAgIGFyZ3YuYXBwZW5kKG5ld1RlbXBv
cmFyeSgpKTsKKyAgICAgICAgZW1pdE5vZGUoYXJndi5sYXN0KCkuZ2V0KCksIG4pOworICAgIH0K
KworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtYWNoaW5lKCkuZ2V0T3Bjb2RlKG9wX2V2YWwp
KTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocjAtPmluZGV4KCkpOworICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChyMS0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHIy
LT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYXJndi5zaXplKCkgPyBhcmd2
WzBdLT5pbmRleCgpIDogbV90ZW1wb3Jhcmllcy5zaXplKCkpOyAvLyBhcmd2CisgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKGFyZ3Yuc2l6ZSgpKTsgLy8gYXJnYworCisgICAgcmV0dXJuIHIwOwor
fQorCiBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0UmV0dXJuKFJlZ2lzdGVySUQqIHIw
KQogewogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtYWNoaW5lKCkuZ2V0T3Bjb2RlKG9wX3Jl
dCkpOwpJbmRleDogVk0vQ29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFZNL0NvZGVHZW5l
cmF0b3IuaAkocmV2aXNpb24gMzE5MjkpCisrKyBWTS9Db2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTYzLDYgKzYzLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIAogICAgICAg
ICBDb2RlR2VuZXJhdG9yKFByb2dyYW1Ob2RlKiwgY29uc3QgU2NvcGVDaGFpbiYsIFN5bWJvbFRh
YmxlKiwgQ29kZUJsb2NrKiwgVmFyU3RhY2smLCBGdW5jdGlvblN0YWNrJik7CiAgICAgICAgIENv
ZGVHZW5lcmF0b3IoRnVuY3Rpb25Cb2R5Tm9kZSosIGNvbnN0IFNjb3BlQ2hhaW4mLCBTeW1ib2xU
YWJsZSosIENvZGVCbG9jayosIFZhclN0YWNrJiwgRnVuY3Rpb25TdGFjayYsIFZlY3RvcjxJZGVu
dGlmaWVyPiYgcGFyYW1ldGVycyk7CisgICAgICAgIENvZGVHZW5lcmF0b3IoRXZhbE5vZGUqLCBj
b25zdCBTY29wZUNoYWluJiwgU3ltYm9sVGFibGUqLCBDb2RlQmxvY2sqKTsKIAogICAgICAgICBj
b25zdCBDb21tb25JZGVudGlmaWVycyYgcHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0dXJuICpt
X3Byb3BlcnR5TmFtZXM7IH0KIApAQCAtMTgwLDYgKzE4MSw3IEBAIG5hbWVzcGFjZSBLSlMgewog
ICAgICAgICBSZWdpc3RlcklEKiBlbWl0UHV0UHJvcEluZGV4KFJlZ2lzdGVySUQqIGJhc2UsIHVu
c2lnbmVkIGluZGV4LCBSZWdpc3RlcklEKiB2YWwpOwogCiAgICAgICAgIFJlZ2lzdGVySUQqIGVt
aXRDYWxsKFJlZ2lzdGVySUQqLCBSZWdpc3RlcklEKiwgUmVnaXN0ZXJJRCosIEFyZ3VtZW50c05v
ZGUqKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEV2YWwoUmVnaXN0ZXJJRCosIFJlZ2lzdGVy
SUQqLCBSZWdpc3RlcklEKiwgQXJndW1lbnRzTm9kZSopOwogICAgICAgICBSZWdpc3RlcklEKiBl
bWl0UmV0dXJuKFJlZ2lzdGVySUQqKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEVuZChSZWdp
c3RlcklEKik7CiAKQEAgLTI0Miw3ICsyNDQsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAg
U3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKCkgeyByZXR1cm4gKm1fc3ltYm9sVGFibGU7IH0KICAg
ICAgICAgVmVjdG9yPEhhbmRsZXJJbmZvPiYgZXhjZXB0aW9uSGFuZGxlcnMoKSB7IHJldHVybiBt
X2NvZGVCbG9jay0+ZXhjZXB0aW9uSGFuZGxlcnM7IH0KICAgICAgICAgCi0gICAgICAgIGJvb2wg
c2hvdWxkT3B0aW1pemVMb2NhbHMoKSB7IHJldHVybiAhbV9zY29wZURlcHRoOyB9CisgICAgICAg
IGJvb2wgc2hvdWxkT3B0aW1pemVMb2NhbHMoKSB7IHJldHVybiAhbV9pc0V2YWxDb2RlICYmICFt
X3Njb3BlRGVwdGg7IH0KIAogICAgICAgICBjb25zdCBTY29wZUNoYWluKiBtX3Njb3BlQ2hhaW47
CiAgICAgICAgIFN5bWJvbFRhYmxlKiBtX3N5bWJvbFRhYmxlOwpAQCAtMjU2LDYgKzI1OCw3IEBA
IG5hbWVzcGFjZSBLSlMgewogICAgICAgICBWZWN0b3I8UmVnaXN0ZXJJRCwgMTI4PiBtX3RlbXBv
cmFyaWVzOwogICAgICAgICBWZWN0b3I8TGFiZWxJRCwgMTI4PiBtX2xhYmVsczsKICAgICAgICAg
aW50IG1fc2NvcGVEZXB0aDsKKyAgICAgICAgYm9vbCBtX2lzRXZhbENvZGU7CiAgICAgICAgIAog
ICAgICAgICBWZWN0b3I8SnVtcENvbnRleHQ+IG1fanVtcENvbnRleHRTdGFjazsKIApJbmRleDog
Vk0vTWFjaGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVk0vTWFjaGluZS5jcHAJKHJldmlzaW9uIDMx
OTI5KQorKysgVk0vTWFjaGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0NCw2ICs1NDQsMzkg
QEAgSlNWYWx1ZSogTWFjaGluZTo6ZXhlY3V0ZShGdW5jdGlvbkJvZHlObwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKK0pTVmFsdWUqIE1hY2hpbmU6OmV4ZWN1dGUoRXZhbE5vZGUqIGV2YWxOb2Rl
LCBFeGVjU3RhdGUqIGV4ZWMsIFJlZ2lzdGVyRmlsZSogcmVnaXN0ZXJGaWxlLCBpbnQgcmVnaXN0
ZXJPZmZzZXQsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBKU1ZhbHVlKiogZXhjZXB0aW9u
KQoreworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gJmV2YWxOb2RlLT5jb2RlKHNjb3BlQ2hh
aW4pOworCisgICAgc2l6ZV90IG9sZFNpemUgPSByZWdpc3RlckZpbGUtPnNpemUoKTsKKyAgICBz
aXplX3QgbmV3U2l6ZSA9IHJlZ2lzdGVyT2Zmc2V0ICsgY29kZUJsb2NrLT5udW1WYXJzICsgY29k
ZUJsb2NrLT5udW1UZW1wb3JhcmllczsKKyAgICByZWdpc3RlckZpbGUtPmdyb3cobmV3U2l6ZSk7
CisgICAgUmVnaXN0ZXIqIHIgPSAoKnJlZ2lzdGVyRmlsZS0+YmFzZVBvaW50ZXIoKSkgKyByZWdp
c3Rlck9mZnNldCArIGNvZGVCbG9jay0+bnVtVmFyczsKKyAgICAKKyAgICBKU1ZhbHVlKiByZXN1
bHQgPSBwcml2YXRlRXhlY3V0ZShOb3JtYWwsIGV4ZWMsIHJlZ2lzdGVyRmlsZSwgciwgc2NvcGVD
aGFpbiwgY29kZUJsb2NrLCBleGNlcHRpb24pOworICAgIAorICAgIHJlZ2lzdGVyRmlsZS0+c2hy
aW5rKG9sZFNpemUpOworICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0pTVmFsdWUqIE1h
Y2hpbmU6OmV4ZWN1dGUoRXZhbE5vZGUqIGV2YWxOb2RlLCBFeGVjU3RhdGUqIGV4ZWMsIFJlZ2lz
dGVyRmlsZVN0YWNrKiByZWdpc3RlckZpbGVTdGFjaywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hh
aW4sIEpTVmFsdWUqKiBleGNlcHRpb24pCit7CisgICAgUmVnaXN0ZXJGaWxlKiByZWdpc3RlckZp
bGUgPSByZWdpc3RlckZpbGVTdGFjay0+Y3VycmVudCgpOworICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gJmV2YWxOb2RlLT5jb2RlKHNjb3BlQ2hhaW4pOworCisgICAgc2l6ZV90IG9sZFNpemUg
PSByZWdpc3RlckZpbGUtPnNpemUoKTsKKyAgICBzaXplX3QgbmV3U2l6ZSA9IG9sZFNpemUgKyBj
b2RlQmxvY2stPm51bVZhcnMgKyBjb2RlQmxvY2stPm51bVRlbXBvcmFyaWVzOworICAgIHJlZ2lz
dGVyRmlsZS0+Z3JvdyhuZXdTaXplKTsKKyAgICBSZWdpc3RlciogciA9ICgqcmVnaXN0ZXJGaWxl
LT5iYXNlUG9pbnRlcigpKSArIG9sZFNpemUgKyBjb2RlQmxvY2stPm51bVZhcnM7CisgICAgCisg
ICAgSlNWYWx1ZSogcmVzdWx0ID0gcHJpdmF0ZUV4ZWN1dGUoTm9ybWFsLCBleGVjLCByZWdpc3Rl
ckZpbGUsIHIsIHNjb3BlQ2hhaW4sIGNvZGVCbG9jaywgZXhjZXB0aW9uKTsKKyAgICAKKyAgICBy
ZWdpc3RlckZpbGUtPnNocmluayhvbGRTaXplKTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCiBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpb25GbGFnIGZsYWcs
IEV4ZWNTdGF0ZSogZXhlYywgUmVnaXN0ZXJGaWxlKiByZWdpc3RlckZpbGUsIFJlZ2lzdGVyKiBy
LCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFs
dWUqKiBleGNlcHRpb24pCiB7CiAgICAgLy8gT25lLXRpbWUgaW5pdGlhbGl6YXRpb24gb2Ygb3Vy
IGFkZHJlc3MgdGFibGVzLiBXZSBoYXZlIHRvIHB1dCB0aGlzIGNvZGUKQEAgLTExMTIsOSArMTE0
NSw5NiBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAg
IGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZU5hdGl2ZSkgewogICAgICAgICAgICAgaW50IHJlZ2lz
dGVyT2Zmc2V0ID0gciAtICgqcmVnaXN0ZXJCYXNlKTsKICAgICAgICAgICAgIAotICAgICAgICAg
ICAgLy8gRklYTUU6IFN1YnN0aXR1dGUgbGV4aWNhbCBnbG9iYWwgb2JqZWN0IGZvciBudWxsLgor
ICAgICAgICAgICAgclthcmd2XS51LmpzVmFsdWUgPSByMiA9PSBtaXNzaW5nU3ltYm9sTWFya2Vy
KCkgPyBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkgOiAocltyMl0udS5qc1ZhbHVlKS0+dG9P
YmplY3QoZXhlYyk7IC8vICJ0aGlzIiB2YWx1ZQorICAgICAgICAgICAgSlNPYmplY3QqIHRoaXNP
YmogPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHJbYXJndl0udS5qc1ZhbHVlKTsKKworICAgICAg
ICAgICAgTGlzdCBhcmdzKCZyW2FyZ3YgKyAxXS51LmpzVmFsdWUsIGFyZ2MgLSAxKTsKKworICAg
ICAgICAgICAgSlNWYWx1ZSogcmV0dXJuVmFsdWUgPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHYp
LT5jYWxsQXNGdW5jdGlvbihleGVjLCB0aGlzT2JqLCBhcmdzKTsKKworICAgICAgICAgICAgciA9
ICgqcmVnaXN0ZXJCYXNlKSArIHJlZ2lzdGVyT2Zmc2V0OworICAgICAgICAgICAgcltyMF0udS5q
c1ZhbHVlID0gcmV0dXJuVmFsdWU7CisKKyAgICAgICAgICAgIFZNX0NIRUNLX0VYQ0VQVElPTigp
OworCisgICAgICAgICAgICArK3ZQQzsKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gRklYTUUgdGhyb3cgdHlwZSBlcnJvcgorICAgICAgICBBU1NFUlQo
Y2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKTsKKworICAgICAgICB2UEMrKzsKKyAgICAgICAgTkVY
VF9PUENPREU7CisgICAgfQorICAgIEJFR0lOX09QQ09ERShvcF9ldmFsKSB7CisgICAgICAgIGlu
dCByMCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKKyAgICAgICAgaW50IHIxID0gKCsrdlBDKS0+dS5v
cGVyYW5kOworICAgICAgICBpbnQgcjIgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CisgICAgICAgIGlu
dCBhcmd2ID0gKCsrdlBDKS0+dS5vcGVyYW5kOworICAgICAgICBpbnQgYXJnYyA9ICgrK3ZQQykt
PnUub3BlcmFuZDsKKyAgICAgICAgCisgICAgICAgIEpTVmFsdWUqIHYgPSByW3IxXS51LmpzVmFs
dWU7CisgICAgICAgIEpTVmFsdWUqIGJhc2UgPSByW3IyXS51LmpzVmFsdWU7CisgICAgICAgIAor
ICAgICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSB2
LT5nZXRDYWxsRGF0YShjYWxsRGF0YSk7CisgICAgICAgIAorICAgICAgICBpZiAoYmFzZSA9PSBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkgJiYgdiA9PSBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCktPmV2YWxGdW5jdGlvbigpKSB7CisgICAgICAgICAgICBKU1ZhbHVlKiB4ID0gYXJnYyA+
PSAyID8gclthcmd2ICsgMV0udS5qc1ZhbHVlIDoganNVbmRlZmluZWQoKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgVVN0cmluZyBzID0geC0+dG9TdHJpbmcoZXhlYyk7CisgICAgICAgICAg
ICBWTV9DSEVDS19FWENFUFRJT04oKTsKKworICAgICAgICAgICAgaW50IHNvdXJjZUlkOworICAg
ICAgICAgICAgaW50IGVyckxpbmU7CisgICAgICAgICAgICBVU3RyaW5nIGVyck1zZzsKKyAgICAg
ICAgICAgIFJlZlB0cjxFdmFsTm9kZT4gZXZhbE5vZGUgPSBwYXJzZXIoKS5wYXJzZTxFdmFsTm9k
ZT4oVVN0cmluZygpLCAwLCBzLmRhdGEoKSwgcy5zaXplKCksICZzb3VyY2VJZCwgJmVyckxpbmUs
ICZlcnJNc2cpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBGSVhNRTogYWRkIGV4Y2Vw
dGlvbiBmb3IgYSBzeW50YXggZXJyb3IKKyAgICAgICAgICAgIAorICAgICAgICAgICAgRXZhbEV4
ZWNTdGF0ZSBuZXdFeGVjKGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSwgZXhlYy0+dGhpc1Zh
bHVlKCksIGV2YWxOb2RlLmdldCgpLCBleGVjLCBleGVjLT5zY29wZUNoYWluKCksIGV4ZWMtPmR5
bmFtaWNHbG9iYWxPYmplY3QoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGludCByZWdp
c3Rlck9mZnNldCA9IHIgLSAoKnJlZ2lzdGVyQmFzZSk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIEpTVmFsdWUqIGV4Y2VwdGlvbiA9IDA7ICAgICAgICAgICAgCisgICAgICAgICAgICBKU1Zh
bHVlKiB2YWx1ZSA9IG1hY2hpbmUoKS5leGVjdXRlKGV2YWxOb2RlLmdldCgpLCAmbmV3RXhlYywg
cmVnaXN0ZXJGaWxlLCByZWdpc3Rlck9mZnNldCArIGFyZ3YgKyBhcmdjLCBzY29wZUNoYWluLCAm
ZXhjZXB0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgciA9ICgqcmVnaXN0ZXJCYXNl
KSArIHJlZ2lzdGVyT2Zmc2V0OworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBGSVhNRTog
ZGVhbCB3aXRoIHRoZSBjYXNlIHdoZXJlIHRoZSBldmFsIHJhaXNlZCBhbiBleGNlcHRpb24KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgcltyMF0udS5qc1ZhbHVlID0gdmFsdWUgPyB2YWx1ZSA6
IGpzVW5kZWZpbmVkKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICsrdlBDOworICAgICAg
ICAgICAgTkVYVF9PUENPREU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEpTVmFsdWUq
IHRoaXNWYWx1ZSA9IGJhc2UtPnRvT2JqZWN0KGV4ZWMpLT5pc0FjdGl2YXRpb25PYmplY3QoKSA/
IGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSA6IGJhc2U7CisgICAgICAgIAorICAgICAgICBp
ZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVKUykgeworICAgICAgICAgICAgaW50IHJlZ2lzdGVyT2Zm
c2V0ID0gciAtICgqcmVnaXN0ZXJCYXNlKTsKKyAgICAgICAgICAgIFJlZ2lzdGVyKiBjYWxsRnJh
bWUgPSByICsgYXJndiAtIENhbGxGcmFtZUhlYWRlclNpemU7CisKKyAgICAgICAgICAgIHJbYXJn
dl0udS5qc1ZhbHVlID0gdGhpc1ZhbHVlOworICAgICAgICAgICAgaW5pdGlhbGl6ZUNhbGxGcmFt
ZShjYWxsRnJhbWUsIGNvZGVCbG9jaywgdlBDLCBzY29wZUNoYWluLCByZWdpc3Rlck9mZnNldCwg
cjAsIGFyZ3YsIDApOwogCi0gICAgICAgICAgICByW2FyZ3ZdLnUuanNWYWx1ZSA9IHIyID09IG1p
c3NpbmdTeW1ib2xNYXJrZXIoKSA/IGpzTnVsbCgpIDogKHJbcjJdLnUuanNWYWx1ZSktPnRvT2Jq
ZWN0KGV4ZWMpOyAvLyAidGhpcyIgdmFsdWUKKyAgICAgICAgICAgIFNjb3BlQ2hhaW4qIGNhbGxE
YXRhU2NvcGVDaGFpbiA9IGNhbGxEYXRhLmpzLnNjb3BlQ2hhaW47CisgICAgICAgICAgICBGdW5j
dGlvbkJvZHlOb2RlKiBmdW5jdGlvbkJvZHlOb2RlID0gY2FsbERhdGEuanMuZnVuY3Rpb25Cb2R5
OworCisgICAgICAgICAgICBjb2RlQmxvY2sgPSAmZnVuY3Rpb25Cb2R5Tm9kZS0+Y29kZShjYWxs
RGF0YVNjb3BlQ2hhaW4tPm5vZGUoKSk7CisgICAgICAgICAgICByID0gc2xpZGVSZWdpc3Rlcldp
bmRvd0ZvckNhbGwoY29kZUJsb2NrLCByZWdpc3RlckZpbGUsIHJlZ2lzdGVyQmFzZSwgcmVnaXN0
ZXJPZmZzZXQsIGFyZ3YsIGFyZ2MpOworICAgICAgICAgICAgc2NvcGVDaGFpbiA9IHNjb3BlQ2hh
aW5Gb3JDYWxsKGNvZGVCbG9jaywgY2FsbERhdGFTY29wZUNoYWluLCBmdW5jdGlvbkJvZHlOb2Rl
LCBjYWxsRnJhbWUsIHJlZ2lzdGVyQmFzZSwgcik7ICAgICAgICAgICAgCisgICAgICAgICAgICBr
ID0gY29kZUJsb2NrLT5qc1ZhbHVlcy5kYXRhKCk7CisgICAgICAgICAgICB2UEMgPSBjb2RlQmxv
Y2stPmluc3RydWN0aW9ucy5iZWdpbigpOworCisgICAgICAgICAgICBORVhUX09QQ09ERTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZU5hdGl2ZSkgeworICAg
ICAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gciAtICgqcmVnaXN0ZXJCYXNlKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgclthcmd2XS51LmpzVmFsdWUgPSB0aGlzVmFsdWU7CiAgICAg
ICAgICAgICBKU09iamVjdCogdGhpc09iaiA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oclthcmd2
XS51LmpzVmFsdWUpOwogCiAgICAgICAgICAgICBMaXN0IGFyZ3MoJnJbYXJndiArIDFdLnUuanNW
YWx1ZSwgYXJnYyAtIDEpOwpJbmRleDogVk0vTWFjaGluZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFZNL01h
Y2hpbmUuaAkocmV2aXNpb24gMzE5MjkpCisrKyBWTS9NYWNoaW5lLmgJKHdvcmtpbmcgY29weSkK
QEAgLTc4LDYgKzc4LDggQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIAogICAgICAgICBKU1Zh
bHVlKiBleGVjdXRlKFByb2dyYW1Ob2RlKiwgRXhlY1N0YXRlKiwgUmVnaXN0ZXJGaWxlU3RhY2sq
LCBTY29wZUNoYWluKiwgSlNWYWx1ZSoqIGV4Y2VwdGlvbik7CiAgICAgICAgIEpTVmFsdWUqIGV4
ZWN1dGUoRnVuY3Rpb25Cb2R5Tm9kZSosIGNvbnN0IExpc3QmIGFyZ3MsIEpTT2JqZWN0KiB0aGlz
T2JqLCBFeGVjU3RhdGUqLCBSZWdpc3RlckZpbGVTdGFjayosIFNjb3BlQ2hhaW4qLCBKU1ZhbHVl
KiogZXhjZXB0aW9uKTsKKyAgICAgICAgSlNWYWx1ZSogZXhlY3V0ZShFdmFsTm9kZSosIEV4ZWNT
dGF0ZSosIFJlZ2lzdGVyRmlsZSosIGludCByZWdpc3Rlck9mZnNldCwgU2NvcGVDaGFpbk5vZGUq
LCBKU1ZhbHVlKiogZXhjZXB0aW9uKTsKKyAgICAgICAgSlNWYWx1ZSogZXhlY3V0ZShFdmFsTm9k
ZSosIEV4ZWNTdGF0ZSosIFJlZ2lzdGVyRmlsZVN0YWNrKiwgU2NvcGVDaGFpbk5vZGUqLCBKU1Zh
bHVlKiogZXhjZXB0aW9uKTsKICAgICAgICAgCiAgICAgcHJpdmF0ZToKICAgICAgICAgdHlwZWRl
ZiBlbnVtIHsgTm9ybWFsLCBJbml0aWFsaXplQW5kUmV0dXJuIH0gRXhlY3V0aW9uRmxhZzsKSW5k
ZXg6IFZNL09wY29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFZNL09wY29kZS5oCShyZXZpc2lvbiAzMTky
OSkKKysrIFZNL09wY29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05NSw2ICs5NSw3IEBAIG5hbWVz
cGFjZSBLSlMgewogICAgICAgICBtYWNybyhvcF9uZXdfZnVuYykgXAogICAgICAgICBtYWNybyhv
cF9uZXdfZnVuY19leHApIFwKICAgICAgICAgbWFjcm8ob3BfY2FsbCkgXAorICAgICAgICBtYWNy
byhvcF9ldmFsKSBcCiAgICAgICAgIG1hY3JvKG9wX3JldCkgXAogICAgICAgICBcCiAgICAgICAg
IG1hY3JvKG9wX2NvbnN0cnVjdCkgXApJbmRleDoga2pzL2Z1bmN0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBranMvZnVuY3Rpb24uY3BwCShyZXZpc2lvbiAzMTkyOSkKKysrIGtqcy9mdW5jdGlvbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY4Myw1MiArNjgzLDQyIEBAIHN0YXRpYyBkb3VibGUgcGFy
c2VGbG9hdChjb25zdCBVU3RyaW5nJiAKICAgICByZXR1cm4gcy50b0RvdWJsZSggdHJ1ZSAvKnRv
bGVyYW50Ki8sIGZhbHNlIC8qIE5hTiBmb3IgZW1wdHkgc3RyaW5nICovICk7CiB9CiAKLUpTVmFs
dWUqIGV2YWwoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTY29wZUNoYWluJiBzY29wZUNoYWluLCBK
U1ZhcmlhYmxlT2JqZWN0KiB2YXJpYWJsZU9iamVjdCwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3QmIGFyZ3MpCitKU1ZhbHVlKiBnbG9i
YWxGdW5jRXZhbChFeGVjU3RhdGUqIGV4ZWMsIFByb3RvdHlwZVJlZmxleGl2ZUZ1bmN0aW9uKiBm
dW5jdGlvbiwgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3QmIGFyZ3MpCiB7CisgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRoaXNPYmotPmlzR2xvYmFsT2JqZWN0KCkgPyBz
dGF0aWNfY2FzdDxKU0dsb2JhbE9iamVjdCo+KHRoaXNPYmopIDogMDsKKworICAgIGlmICghZ2xv
YmFsT2JqZWN0IHx8IGdsb2JhbE9iamVjdC0+ZXZhbEZ1bmN0aW9uKCkgIT0gZnVuY3Rpb24pCisg
ICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIEV2YWxFcnJvciwgIlRoZSBcInRoaXNcIiB2
YWx1ZSBwYXNzZWQgdG8gZXZhbCBtdXN0IGJlIHRoZSBnbG9iYWwgb2JqZWN0IGZyb20gd2hpY2gg
ZXZhbCBvcmlnaW5hdGVkIik7CisKKyAgICBTY29wZUNoYWluIHNjb3BlQ2hhaW4oZ2xvYmFsT2Jq
ZWN0KTsKKwogICAgIEpTVmFsdWUqIHggPSBhcmdzWzBdOwogICAgIGlmICgheC0+aXNTdHJpbmco
KSkKICAgICAgICAgcmV0dXJuIHg7Ci0KKyAgICAKICAgICBVU3RyaW5nIHMgPSB4LT50b1N0cmlu
ZyhleGVjKTsKLQorICAgIAogICAgIGludCBzb3VyY2VJZDsKICAgICBpbnQgZXJyTGluZTsKICAg
ICBVU3RyaW5nIGVyck1zZzsKICAgICBSZWZQdHI8RXZhbE5vZGU+IGV2YWxOb2RlID0gcGFyc2Vy
KCkucGFyc2U8RXZhbE5vZGU+KFVTdHJpbmcoKSwgMCwgcy5kYXRhKCksIHMuc2l6ZSgpLCAmc291
cmNlSWQsICZlcnJMaW5lLCAmZXJyTXNnKTsKLQotICAgIERlYnVnZ2VyKiBkYmcgPSBleGVjLT5k
eW5hbWljR2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCk7Ci0gICAgaWYgKGRiZykgewotICAgICAg
ICBib29sIGNvbnQgPSBkYmctPnNvdXJjZVBhcnNlZChleGVjLCBzb3VyY2VJZCwgVVN0cmluZygp
LCBzLCAwLCBlcnJMaW5lLCBlcnJNc2cpOwotICAgICAgICBpZiAoIWNvbnQpCi0gICAgICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci0KKyAgICAKICAgICBpZiAoIWV2YWxOb2Rl
KQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvciwgZXJyTXNnLCBl
cnJMaW5lLCBzb3VyY2VJZCwgTlVMTCk7Ci0KLSAgICBFdmFsRXhlY1N0YXRlIG5ld0V4ZWMoZ2xv
YmFsT2JqZWN0LCB0aGlzT2JqLCBldmFsTm9kZS5nZXQoKSwgZXhlYywgc2NvcGVDaGFpbiwgdmFy
aWFibGVPYmplY3QpOwotCi0gICAgSlNWYWx1ZSogdmFsdWUgPSBldmFsTm9kZS0+ZXhlY3V0ZSgm
bmV3RXhlYyk7Ci0KLSAgICBpZiAobmV3RXhlYy5jb21wbGV0aW9uVHlwZSgpID09IFRocm93KSB7
CisgICAgCisgICAgRXZhbEV4ZWNTdGF0ZSBuZXdFeGVjKGdsb2JhbE9iamVjdCwgdGhpc09iaiwg
ZXZhbE5vZGUuZ2V0KCksIGV4ZWMsIHNjb3BlQ2hhaW4sIGdsb2JhbE9iamVjdCk7CisgICAgCisg
ICAgSlNWYWx1ZSogZXhjZXB0aW9uID0gMDsKKyAgICBKU1ZhbHVlKiB2YWx1ZSA9IG1hY2hpbmUo
KS5leGVjdXRlKGV2YWxOb2RlLmdldCgpLCAmbmV3RXhlYywgJm5ld0V4ZWMuZHluYW1pY0dsb2Jh
bE9iamVjdCgpLT5yZWdpc3RlckZpbGVTdGFjaygpLCBzY29wZUNoYWluLm5vZGUoKSwgJmV4Y2Vw
dGlvbik7CisgICAgCisgICAgaWYgKGV4Y2VwdGlvbikgewogICAgICAgICBleGVjLT5zZXRFeGNl
cHRpb24odmFsdWUpOwogICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgfQotCisgICAgCiAgICAg
cmV0dXJuIHZhbHVlID8gdmFsdWUgOiBqc1VuZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlKiBnbG9i
YWxGdW5jRXZhbChFeGVjU3RhdGUqIGV4ZWMsIFByb3RvdHlwZVJlZmxleGl2ZUZ1bmN0aW9uKiBm
dW5jdGlvbiwgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3QmIGFyZ3MpCi17Ci0gICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRoaXNPYmotPmlzR2xvYmFsT2JqZWN0KCkgPyBz
dGF0aWNfY2FzdDxKU0dsb2JhbE9iamVjdCo+KHRoaXNPYmopIDogMDsKLQotICAgIGlmICghZ2xv
YmFsT2JqZWN0IHx8IGdsb2JhbE9iamVjdC0+ZXZhbEZ1bmN0aW9uKCkgIT0gZnVuY3Rpb24pCi0g
ICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIEV2YWxFcnJvciwgIlRoZSBcInRoaXNcIiB2
YWx1ZSBwYXNzZWQgdG8gZXZhbCBtdXN0IGJlIHRoZSBnbG9iYWwgb2JqZWN0IGZyb20gd2hpY2gg
ZXZhbCBvcmlnaW5hdGVkIik7Ci0KLSAgICBTY29wZUNoYWluIHNjb3BlQ2hhaW4oZ2xvYmFsT2Jq
ZWN0KTsKLSAgICByZXR1cm4gZXZhbChleGVjLCBzY29wZUNoYWluLCBnbG9iYWxPYmplY3QsIGds
b2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBhcmdzKTsKLX0KLQogSlNWYWx1ZSogZ2xvYmFsRnVu
Y1BhcnNlSW50KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBjb25zdCBMaXN0JiBhcmdzKQog
ewogICAgIHJldHVybiBqc051bWJlcihwYXJzZUludChhcmdzWzBdLT50b1N0cmluZyhleGVjKSwg
YXJnc1sxXS0+dG9JbnQzMihleGVjKSkpOwpJbmRleDoga2pzL2Z1bmN0aW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0ga2pzL2Z1bmN0aW9uLmgJKHJldmlzaW9uIDMxOTI5KQorKysga2pzL2Z1bmN0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE2Nyw4ICsxNjcsNiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBK
U1ZhbHVlKiBnbG9iYWxGdW5jS0pTUHJpbnQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBM
aXN0Jik7CiAjZW5kaWYKIAotICAgIEpTVmFsdWUqIGV2YWwoRXhlY1N0YXRlKiwgY29uc3QgU2Nv
cGVDaGFpbiYsIEpTVmFyaWFibGVPYmplY3QqLCBKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiB0
aGlzT2JqLCBjb25zdCBMaXN0JiBhcmdzKTsKLQogICAgIHN0YXRpYyBjb25zdCBkb3VibGUgbWFu
dGlzc2FPdmVyZmxvd0xvd2VyQm91bmQgPSA5MDA3MTk5MjU0NzQwOTkyLjA7CiAgICAgZG91Ymxl
IHBhcnNlSW50T3ZlcmZsb3coY29uc3QgY2hhciosIGludCBsZW5ndGgsIGludCByYWRpeCk7CiAK
SW5kZXg6IGtqcy9ub2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL25vZGVzLmNwcAkocmV2aXNp
b24gMzE5MjkpCisrKyBranMvbm9kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjY0LDcgKzEy
NjQsNiBAQCBpbmxpbmUgSlNWYWx1ZSogRXhwcmVzc2lvbk5vZGU6OnJlc29sdmVBCiAgICAgICAg
ICAgICBpZiAoY2FsbGVyVHlwZSA9PSBFdmFsT3BlcmF0b3IpIHsKICAgICAgICAgICAgICAgICBp
ZiAoYmFzZSA9PSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkgJiYgZnVuYyA9PSBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPmV2YWxGdW5jdGlvbigpKSB7CiAgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXZh
bChleGVjLCBleGVjLT5zY29wZUNoYWluKCksIGV4ZWMtPnZhcmlhYmxlT2JqZWN0KCksIGV4ZWMt
PmR5bmFtaWNHbG9iYWxPYmplY3QoKSwgZXhlYy0+dGhpc1ZhbHVlKCksIGFyZ0xpc3QpOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBmdW5jLT5j
YWxsKGV4ZWMsIHRoaXNPYmosIGFyZ0xpc3QpOwpAQCAtMTI3NSw2ICsxMjc0LDE0IEBAIGlubGlu
ZSBKU1ZhbHVlKiBFeHByZXNzaW9uTm9kZTo6cmVzb2x2ZUEKICAgICByZXR1cm4gdGhyb3dVbmRl
ZmluZWRWYXJpYWJsZUVycm9yKGV4ZWMsIGlkZW50KTsKIH0KIAorUmVnaXN0ZXJJRCogRXZhbEZ1
bmN0aW9uQ2FsbE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0
ZXJJRCogZHN0KQoreworICAgIFJlZlB0cjxSZWdpc3RlcklEPiByMCA9IGdlbmVyYXRvci50ZW1w
RGVzdGluYXRpb24oZHN0KTsKKyAgICBSZWdpc3RlcklEKiByMSA9IGdlbmVyYXRvci5uZXdUZW1w
b3JhcnkoKTsKKyAgICBnZW5lcmF0b3IuZW1pdFJlc29sdmVCYXNlQW5kUHJvcGVydHkocjAuZ2V0
KCksIHIxLCBDb21tb25JZGVudGlmaWVyczo6c2hhcmVkKCktPmV2YWwpOworICAgIHJldHVybiBn
ZW5lcmF0b3IuZW1pdEV2YWwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCByMC5nZXQo
KSksIHIxLCByMC5nZXQoKSwgbV9hcmdzLmdldCgpKTsKK30KKwogdm9pZCBFdmFsRnVuY3Rpb25D
YWxsTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xU
YWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYgbm9kZVN0YWNrKQogewogICAg
IG5vZGVTdGFjay5hcHBlbmQobV9hcmdzLmdldCgpKTsKQEAgLTU1OTYsNiArNTYwMywxNSBAQCBF
dmFsTm9kZTo6fkV2YWxOb2RlKCkKIHsKIH0KIAorUmVnaXN0ZXJJRCogRXZhbE5vZGU6OmVtaXRD
b2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCopCit7CisgICAgUmVnaXN0
ZXJJRCogcjAgPSBzdGF0ZW1lbnRMaXN0RW1pdENvZGUobV9jaGlsZHJlbiwgZ2VuZXJhdG9yKTsK
KyAgICBpZiAoIXIwKQorICAgICAgICByMCA9IGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3Iu
bmV3VGVtcG9yYXJ5KCksIGpzVW5kZWZpbmVkKCkpOworICAgIGdlbmVyYXRvci5lbWl0RW5kKHIw
KTsKKyAgICByZXR1cm4gMDsKK30KKwogdm9pZCBFdmFsTm9kZTo6Z2VuZXJhdGVDb2RlKFNjb3Bl
Q2hhaW5Ob2RlKiBzYykKIHsKICAgICBTY29wZUNoYWluIHNjb3BlQ2hhaW4oc2MpOwpAQCAtNTYw
NCw3ICs1NjIwLDEwIEBAIHZvaWQgRXZhbE5vZGU6OmdlbmVyYXRlQ29kZShTY29wZUNoYWluTm8K
ICAgICAKICAgICBtX2NvZGUuc2V0KG5ldyBQcm9ncmFtQ29kZUJsb2NrKHVzZXNFdmFsKCksIG5l
ZWRzQ2xvc3VyZSgpLCBnbG9iYWxPYmplY3QpKTsKICAgICAKLSAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICBDb2RlR2VuZXJhdG9yIGdlbmVyYXRvcih0aGlzLCBzY29wZUNoYWluLCBuZXcg
U3ltYm9sVGFibGUoKSwgbV9jb2RlLmdldCgpKTsKKyAgICBnZW5lcmF0b3IuZ2VuZXJhdGUoKTsK
KworICAgIG1fY2hpbGRyZW4uc2hyaW5rQ2FwYWNpdHkoMCk7CiB9CiAKIEV2YWxOb2RlKiBFdmFs
Tm9kZTo6Y3JlYXRlKFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNr
LCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIGJvb2wgdXNlc0V2YWwsIGJvb2wgbmVlZHNDbG9z
dXJlKQpJbmRleDoga2pzL25vZGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL25vZGVzLmgJKHJldmlz
aW9uIDMxOTI5KQorKysga2pzL25vZGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5OCw2ICs3OTgs
NyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgewogICAgICAgICB9CiAKKyAgICAgICAgdmly
dHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAw
KSBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFj
Y2VzcyhFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYs
IE5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZh
bHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0
cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNUX0NBTEw7CkBAIC0yOTkwLDYgKzI5
OTEsNyBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgcHJv
Y2Vzc0RlY2xhcmF0aW9ucyhFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2b2lk
IGdlbmVyYXRlQ29kZShTY29wZUNoYWluTm9kZSopIEtKU19GQVNUX0NBTEw7CisgICAgICAgIHZp
cnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0g
MCkgS0pTX0ZBU1RfQ0FMTDsKIAogICAgICAgICBPd25QdHI8UHJvZ3JhbUNvZGVCbG9jaz4gbV9j
b2RlOwogICAgIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>20610</attachid>
            <date>2008-04-16 19:12:11 -0700</date>
            <delta_ts>2008-04-16 22:45:18 -0700</delta_ts>
            <desc>Revised patch in progress</desc>
            <filename>eval.diff</filename>
            <type>text/plain</type>
            <size>19355</size>
            <attacher name="Cameron Zwarich (cpst)">zwarich</attacher>
            
              <data encoding="base64">SW5kZXg6IFZNL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVk0vQ29kZUJsb2NrLmNwcAko
cmV2aXNpb24gMzE5ODApCisrKyBWTS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MzAsNiArNDMwLDE1IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYywgY28K
ICAgICAgICAgICAgIHByaW50ZigiWyU0ZF0gY2FsbFx0XHQlcywgJXMsICVzLCAlZCwgJWRcbiIs
IGxvY2F0aW9uLCByZWdpc3Rlck5hbWUocjApLmNfc3RyKCksIHJlZ2lzdGVyTmFtZShyMSkuY19z
dHIoKSwgcmVnaXN0ZXJOYW1lKHIyKS5jX3N0cigpLCB0ZW1wQ291bnQsIGFyZ0NvdW50KTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZXZhbDogeworICAg
ICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEg
PSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMiA9ICgrK2l0KS0+dS5vcGVy
YW5kOworICAgICAgICAgICAgaW50IHRlbXBDb3VudCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAg
ICAgICAgICAgaW50IGFyZ0NvdW50ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBw
cmludGYoIlslNGRdIGV2YWxcdFx0JXMsICVzLCAlcywgJWQsICVkXG4iLCBsb2NhdGlvbiwgcmVn
aXN0ZXJOYW1lKHIwKS5jX3N0cigpLCByZWdpc3Rlck5hbWUocjEpLmNfc3RyKCksIHJlZ2lzdGVy
TmFtZShyMikuY19zdHIoKSwgdGVtcENvdW50LCBhcmdDb3VudCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQogICAgICAgICBjYXNlIG9wX3JldDogewogICAgICAgICAgICAgaW50IHIw
ID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBwcmludGYoIlslNGRdIHJldFx0XHQl
c1xuIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShyMCkuY19zdHIoKSk7CkluZGV4OiBWTS9Db2Rl
R2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBWTS9Db2RlR2VuZXJhdG9yLmNwcAkocmV2aXNp
b24gMzE5ODApCisrKyBWTS9Db2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEz
LDcgKzExMyw3IEBAIG5hbWVzcGFjZSBLSlMgewogKi8KIAogI2lmbmRlZiBOREVCVUcKLWJvb2wg
Q29kZUdlbmVyYXRvcjo6c19kdW1wc0dlbmVyYXRlZENvZGUgPSBmYWxzZTsKK2Jvb2wgQ29kZUdl
bmVyYXRvcjo6c19kdW1wc0dlbmVyYXRlZENvZGUgPSB0cnVlOwogI2VuZGlmCiAKIHZvaWQgQ29k
ZUdlbmVyYXRvcjo6c2V0RHVtcHNHZW5lcmF0ZWRDb2RlKGJvb2wgZHVtcHNHZW5lcmF0ZWRDb2Rl
KQpAQCAtMTYwLDYgKzE2MCw3IEBAIENvZGVHZW5lcmF0b3I6OkNvZGVHZW5lcmF0b3IoUHJvZ3Jh
bU5vZGUKICAgICAsIG1fc2NvcGVOb2RlKHByb2dyYW1Ob2RlKQogICAgICwgbV9jb2RlQmxvY2so
Y29kZUJsb2NrKQogICAgICwgbV9zY29wZURlcHRoKDApCisgICAgLCBtX2lzRXZhbENvZGUoZmFs
c2UpCiAgICAgLCBtX25leHRWYXIoLTEpCiAgICAgLCBtX3Byb3BlcnR5TmFtZXMoQ29tbW9uSWRl
bnRpZmllcnM6OnNoYXJlZCgpKQogCkBAIC0yMDEsNiArMjAyLDcgQEAgQ29kZUdlbmVyYXRvcjo6
Q29kZUdlbmVyYXRvcihGdW5jdGlvbkJvZAogICAgICwgbV9zY29wZU5vZGUoZnVuY3Rpb25Cb2R5
KQogICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQogICAgICwgbV9zY29wZURlcHRoKDApCisg
ICAgLCBtX2lzRXZhbENvZGUoZmFsc2UpCiAgICAgLCBtX25leHRWYXIoLTEpCiAgICAgLCBtX3By
b3BlcnR5TmFtZXMoQ29tbW9uSWRlbnRpZmllcnM6OnNoYXJlZCgpKQogewpAQCAtMjMxLDYgKzIz
MywxOSBAQCBDb2RlR2VuZXJhdG9yOjpDb2RlR2VuZXJhdG9yKEZ1bmN0aW9uQm9kCiAgICAgfQog
fQogCitDb2RlR2VuZXJhdG9yOjpDb2RlR2VuZXJhdG9yKEV2YWxOb2RlKiBldmFsTm9kZSwgY29u
c3QgU2NvcGVDaGFpbiYgc2NvcGVDaGFpbiwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaykKKyAgICA6IG1fc2NvcGVDaGFpbigmc2NvcGVDaGFpbikKKyAgICAs
IG1fc3ltYm9sVGFibGUoc3ltYm9sVGFibGUpCisgICAgLCBtX3Njb3BlTm9kZShldmFsTm9kZSkK
KyAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKKyAgICAsIG1fc2NvcGVEZXB0aCgwKQorICAg
ICwgbV9pc0V2YWxDb2RlKHRydWUpCisgICAgLCBtX25leHRWYXIoLTEpCisgICAgLCBtX3Byb3Bl
cnR5TmFtZXMoQ29tbW9uSWRlbnRpZmllcnM6OnNoYXJlZCgpKQoreworICAgIGFkZFZhcihtX3By
b3BlcnR5TmFtZXMtPnRoaXNJZGVudGlmaWVyKTsKK30KKwogdm9pZCBDb2RlR2VuZXJhdG9yOjph
ZGRQYXJhbWV0ZXIoY29uc3QgSWRlbnRpZmllciYgaWRlbnQpCiB7CiAgICAgLy8gUGFyYW1ldGVy
cyBvdmVyd3JpdGUgdmFyIGRlY2xhcmF0aW9ucywgYnV0IG5vdCBmdW5jdGlvbiBkZWNsYXJhdGlv
bnMsCkBAIC03OTAsNiArODA1LDM0IEBAIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXRD
YWxsKFJlZ2kKICAgICByZXR1cm4gcjA7CiB9CiAKK1JlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6
OmVtaXRFdmFsKFJlZ2lzdGVySUQqIHIwLCBSZWdpc3RlcklEKiByMSwgUmVnaXN0ZXJJRCogcjIs
IEFyZ3VtZW50c05vZGUqIGFyZ3VtZW50c05vZGUpCit7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IHJlZjEgPSByMTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVmMiA9IHIyOworICAgIAorICAg
IC8vIFJlc2VydmUgc3BhY2UgZm9yIGNhbGwgZnJhbWUsIGV2ZW4gdGhvdWdoIHdlIG1heSBub3Qg
bmVlZCBpdCBmb3IgZXZhbAorICAgIFZlY3RvcjxSZWZQdHI8UmVnaXN0ZXJJRD4sIE1hY2hpbmU6
OkNhbGxGcmFtZUhlYWRlclNpemU+IGNhbGxGcmFtZTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8
IE1hY2hpbmU6OkNhbGxGcmFtZUhlYWRlclNpemU7ICsraSkKKyAgICAgICAgY2FsbEZyYW1lLmFw
cGVuZChuZXdUZW1wb3JhcnkoKSk7CisKKyAgICAvLyBHZW5lcmF0ZSBjb2RlIGZvciBhcmd1bWVu
dHMuCisgICAgVmVjdG9yPFJlZlB0cjxSZWdpc3RlcklEPiwgMTY+IGFyZ3Y7CisgICAgYXJndi5h
cHBlbmQobmV3VGVtcG9yYXJ5KCkpOyAvLyByZXNlcnZlIHNwYWNlIGZvciAidGhpcyIKKyAgICBm
b3IgKEFyZ3VtZW50TGlzdE5vZGUqIG4gPSBhcmd1bWVudHNOb2RlLT5tX2xpc3ROb2RlLmdldCgp
OyBuOyBuID0gbi0+bV9uZXh0LmdldCgpKSB7CisgICAgICAgIGFyZ3YuYXBwZW5kKG5ld1RlbXBv
cmFyeSgpKTsKKyAgICAgICAgZW1pdE5vZGUoYXJndi5sYXN0KCkuZ2V0KCksIG4pOworICAgIH0K
KworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtYWNoaW5lKCkuZ2V0T3Bjb2RlKG9wX2V2YWwp
KTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocjAtPmluZGV4KCkpOworICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChyMS0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHIy
LT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYXJndi5zaXplKCkgPyBhcmd2
WzBdLT5pbmRleCgpIDogbV90ZW1wb3Jhcmllcy5zaXplKCkpOyAvLyBhcmd2CisgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKGFyZ3Yuc2l6ZSgpKTsgLy8gYXJnYworCisgICAgcmV0dXJuIHIwOwor
fQorCiBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0UmV0dXJuKFJlZ2lzdGVySUQqIHIw
KQogewogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChtYWNoaW5lKCkuZ2V0T3Bjb2RlKG9wX3Jl
dCkpOwpJbmRleDogVk0vQ29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFZNL0NvZGVHZW5l
cmF0b3IuaAkocmV2aXNpb24gMzE5ODApCisrKyBWTS9Db2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTYzLDYgKzYzLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIAogICAgICAg
ICBDb2RlR2VuZXJhdG9yKFByb2dyYW1Ob2RlKiwgY29uc3QgU2NvcGVDaGFpbiYsIFN5bWJvbFRh
YmxlKiwgQ29kZUJsb2NrKiwgVmFyU3RhY2smLCBGdW5jdGlvblN0YWNrJik7CiAgICAgICAgIENv
ZGVHZW5lcmF0b3IoRnVuY3Rpb25Cb2R5Tm9kZSosIGNvbnN0IFNjb3BlQ2hhaW4mLCBTeW1ib2xU
YWJsZSosIENvZGVCbG9jayosIFZhclN0YWNrJiwgRnVuY3Rpb25TdGFjayYsIFZlY3RvcjxJZGVu
dGlmaWVyPiYgcGFyYW1ldGVycyk7CisgICAgICAgIENvZGVHZW5lcmF0b3IoRXZhbE5vZGUqLCBj
b25zdCBTY29wZUNoYWluJiwgU3ltYm9sVGFibGUqLCBDb2RlQmxvY2sqKTsKIAogICAgICAgICBj
b25zdCBDb21tb25JZGVudGlmaWVycyYgcHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0dXJuICpt
X3Byb3BlcnR5TmFtZXM7IH0KIApAQCAtMTg3LDYgKzE4OCw3IEBAIG5hbWVzcGFjZSBLSlMgewog
ICAgICAgICBSZWdpc3RlcklEKiBlbWl0UHV0UHJvcEluZGV4KFJlZ2lzdGVySUQqIGJhc2UsIHVu
c2lnbmVkIGluZGV4LCBSZWdpc3RlcklEKiB2YWwpOwogCiAgICAgICAgIFJlZ2lzdGVySUQqIGVt
aXRDYWxsKFJlZ2lzdGVySUQqLCBSZWdpc3RlcklEKiwgUmVnaXN0ZXJJRCosIEFyZ3VtZW50c05v
ZGUqKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEV2YWwoUmVnaXN0ZXJJRCosIFJlZ2lzdGVy
SUQqLCBSZWdpc3RlcklEKiwgQXJndW1lbnRzTm9kZSopOwogICAgICAgICBSZWdpc3RlcklEKiBl
bWl0UmV0dXJuKFJlZ2lzdGVySUQqKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEVuZChSZWdp
c3RlcklEKik7CiAKQEAgLTI1MSw3ICsyNTMsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAg
U3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKCkgeyByZXR1cm4gKm1fc3ltYm9sVGFibGU7IH0KICAg
ICAgICAgVmVjdG9yPEhhbmRsZXJJbmZvPiYgZXhjZXB0aW9uSGFuZGxlcnMoKSB7IHJldHVybiBt
X2NvZGVCbG9jay0+ZXhjZXB0aW9uSGFuZGxlcnM7IH0KICAgICAgICAgCi0gICAgICAgIGJvb2wg
c2hvdWxkT3B0aW1pemVMb2NhbHMoKSB7IHJldHVybiAhbV9zY29wZURlcHRoOyB9CisgICAgICAg
IGJvb2wgc2hvdWxkT3B0aW1pemVMb2NhbHMoKSB7IHJldHVybiAhbV9pc0V2YWxDb2RlICYmICFt
X3Njb3BlRGVwdGg7IH0KIAogICAgICAgICBjb25zdCBTY29wZUNoYWluKiBtX3Njb3BlQ2hhaW47
CiAgICAgICAgIFN5bWJvbFRhYmxlKiBtX3N5bWJvbFRhYmxlOwpAQCAtMjY1LDYgKzI2Nyw3IEBA
IG5hbWVzcGFjZSBLSlMgewogICAgICAgICBWZWN0b3I8UmVnaXN0ZXJJRCwgMTI4PiBtX3RlbXBv
cmFyaWVzOwogICAgICAgICBWZWN0b3I8TGFiZWxJRCwgMTI4PiBtX2xhYmVsczsKICAgICAgICAg
aW50IG1fc2NvcGVEZXB0aDsKKyAgICAgICAgYm9vbCBtX2lzRXZhbENvZGU7CiAgICAgICAgIAog
ICAgICAgICBWZWN0b3I8SnVtcENvbnRleHQ+IG1fanVtcENvbnRleHRTdGFjazsKIApJbmRleDog
Vk0vTWFjaGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVk0vTWFjaGluZS5jcHAJKHJldmlzaW9uIDMx
OTgwKQorKysgVk0vTWFjaGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1Miw2ICs1NTIsMzkg
QEAgSlNWYWx1ZSogTWFjaGluZTo6ZXhlY3V0ZShGdW5jdGlvbkJvZHlObwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKK0pTVmFsdWUqIE1hY2hpbmU6OmV4ZWN1dGUoRXZhbE5vZGUqIGV2YWxOb2Rl
LCBFeGVjU3RhdGUqIGV4ZWMsIFJlZ2lzdGVyRmlsZSogcmVnaXN0ZXJGaWxlLCBpbnQgcmVnaXN0
ZXJPZmZzZXQsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBKU1ZhbHVlKiogZXhjZXB0aW9u
KQoreworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gJmV2YWxOb2RlLT5jb2RlKHNjb3BlQ2hh
aW4pOworCisgICAgc2l6ZV90IG9sZFNpemUgPSByZWdpc3RlckZpbGUtPnNpemUoKTsKKyAgICBz
aXplX3QgbmV3U2l6ZSA9IHJlZ2lzdGVyT2Zmc2V0ICsgY29kZUJsb2NrLT5udW1WYXJzICsgY29k
ZUJsb2NrLT5udW1UZW1wb3JhcmllczsKKyAgICByZWdpc3RlckZpbGUtPmdyb3cobmV3U2l6ZSk7
CisgICAgUmVnaXN0ZXIqIHIgPSAoKnJlZ2lzdGVyRmlsZS0+YmFzZVBvaW50ZXIoKSkgKyByZWdp
c3Rlck9mZnNldCArIGNvZGVCbG9jay0+bnVtVmFyczsKKyAgICAKKyAgICBKU1ZhbHVlKiByZXN1
bHQgPSBwcml2YXRlRXhlY3V0ZShOb3JtYWwsIGV4ZWMsIHJlZ2lzdGVyRmlsZSwgciwgc2NvcGVD
aGFpbiwgY29kZUJsb2NrLCBleGNlcHRpb24pOworICAgIAorICAgIHJlZ2lzdGVyRmlsZS0+c2hy
aW5rKG9sZFNpemUpOworICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0pTVmFsdWUqIE1h
Y2hpbmU6OmV4ZWN1dGUoRXZhbE5vZGUqIGV2YWxOb2RlLCBFeGVjU3RhdGUqIGV4ZWMsIFJlZ2lz
dGVyRmlsZVN0YWNrKiByZWdpc3RlckZpbGVTdGFjaywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hh
aW4sIEpTVmFsdWUqKiBleGNlcHRpb24pCit7CisgICAgUmVnaXN0ZXJGaWxlKiByZWdpc3RlckZp
bGUgPSByZWdpc3RlckZpbGVTdGFjay0+Y3VycmVudCgpOworICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gJmV2YWxOb2RlLT5jb2RlKHNjb3BlQ2hhaW4pOworCisgICAgc2l6ZV90IG9sZFNpemUg
PSByZWdpc3RlckZpbGUtPnNpemUoKTsKKyAgICBzaXplX3QgbmV3U2l6ZSA9IG9sZFNpemUgKyBj
b2RlQmxvY2stPm51bVZhcnMgKyBjb2RlQmxvY2stPm51bVRlbXBvcmFyaWVzOworICAgIHJlZ2lz
dGVyRmlsZS0+Z3JvdyhuZXdTaXplKTsKKyAgICBSZWdpc3RlciogciA9ICgqcmVnaXN0ZXJGaWxl
LT5iYXNlUG9pbnRlcigpKSArIG9sZFNpemUgKyBjb2RlQmxvY2stPm51bVZhcnM7CisgICAgCisg
ICAgSlNWYWx1ZSogcmVzdWx0ID0gcHJpdmF0ZUV4ZWN1dGUoTm9ybWFsLCBleGVjLCByZWdpc3Rl
ckZpbGUsIHIsIHNjb3BlQ2hhaW4sIGNvZGVCbG9jaywgZXhjZXB0aW9uKTsKKyAgICAKKyAgICBy
ZWdpc3RlckZpbGUtPnNocmluayhvbGRTaXplKTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCiBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpb25GbGFnIGZsYWcs
IEV4ZWNTdGF0ZSogZXhlYywgUmVnaXN0ZXJGaWxlKiByZWdpc3RlckZpbGUsIFJlZ2lzdGVyKiBy
LCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEpTVmFs
dWUqKiBleGNlcHRpb24pCiB7CiAgICAgLy8gT25lLXRpbWUgaW5pdGlhbGl6YXRpb24gb2Ygb3Vy
IGFkZHJlc3MgdGFibGVzLiBXZSBoYXZlIHRvIHB1dCB0aGlzIGNvZGUKQEAgLTExMzQsOSArMTE2
Nyw5NiBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAg
IGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZU5hdGl2ZSkgewogICAgICAgICAgICAgaW50IHJlZ2lz
dGVyT2Zmc2V0ID0gciAtICgqcmVnaXN0ZXJCYXNlKTsKICAgICAgICAgICAgIAotICAgICAgICAg
ICAgLy8gRklYTUU6IFN1YnN0aXR1dGUgbGV4aWNhbCBnbG9iYWwgb2JqZWN0IGZvciBudWxsLgor
ICAgICAgICAgICAgclthcmd2XS51LmpzVmFsdWUgPSByMiA9PSBtaXNzaW5nU3ltYm9sTWFya2Vy
KCkgPyBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkgOiAocltyMl0udS5qc1ZhbHVlKS0+dG9P
YmplY3QoZXhlYyk7IC8vICJ0aGlzIiB2YWx1ZQorICAgICAgICAgICAgSlNPYmplY3QqIHRoaXNP
YmogPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHJbYXJndl0udS5qc1ZhbHVlKTsKKworICAgICAg
ICAgICAgTGlzdCBhcmdzKCZyW2FyZ3YgKyAxXS51LmpzVmFsdWUsIGFyZ2MgLSAxKTsKKworICAg
ICAgICAgICAgSlNWYWx1ZSogcmV0dXJuVmFsdWUgPSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KHYp
LT5jYWxsQXNGdW5jdGlvbihleGVjLCB0aGlzT2JqLCBhcmdzKTsKKworICAgICAgICAgICAgciA9
ICgqcmVnaXN0ZXJCYXNlKSArIHJlZ2lzdGVyT2Zmc2V0OworICAgICAgICAgICAgcltyMF0udS5q
c1ZhbHVlID0gcmV0dXJuVmFsdWU7CisKKyAgICAgICAgICAgIFZNX0NIRUNLX0VYQ0VQVElPTigp
OworCisgICAgICAgICAgICArK3ZQQzsKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFOworICAgICAg
ICB9CisKKyAgICAgICAgLy8gRklYTUUgdGhyb3cgdHlwZSBlcnJvcgorICAgICAgICBBU1NFUlQo
Y2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKTsKKworICAgICAgICB2UEMrKzsKKyAgICAgICAgTkVY
VF9PUENPREU7CisgICAgfQorICAgIEJFR0lOX09QQ09ERShvcF9ldmFsKSB7CisgICAgICAgIGlu
dCByMCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKKyAgICAgICAgaW50IHIxID0gKCsrdlBDKS0+dS5v
cGVyYW5kOworICAgICAgICBpbnQgcjIgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CisgICAgICAgIGlu
dCBhcmd2ID0gKCsrdlBDKS0+dS5vcGVyYW5kOworICAgICAgICBpbnQgYXJnYyA9ICgrK3ZQQykt
PnUub3BlcmFuZDsKKyAgICAgICAgCisgICAgICAgIEpTVmFsdWUqIHYgPSByW3IxXS51LmpzVmFs
dWU7CisgICAgICAgIEpTVmFsdWUqIGJhc2UgPSByW3IyXS51LmpzVmFsdWU7CisgICAgICAgIAor
ICAgICAgICBDYWxsRGF0YSBjYWxsRGF0YTsKKyAgICAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSB2
LT5nZXRDYWxsRGF0YShjYWxsRGF0YSk7CisgICAgICAgIAorICAgICAgICBpZiAoYmFzZSA9PSBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkgJiYgdiA9PSBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCktPmV2YWxGdW5jdGlvbigpKSB7CisgICAgICAgICAgICBKU1ZhbHVlKiB4ID0gYXJnYyA+
PSAyID8gclthcmd2ICsgMV0udS5qc1ZhbHVlIDoganNVbmRlZmluZWQoKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgVVN0cmluZyBzID0geC0+dG9TdHJpbmcoZXhlYyk7CisgICAgICAgICAg
ICBWTV9DSEVDS19FWENFUFRJT04oKTsKKworICAgICAgICAgICAgaW50IHNvdXJjZUlkOworICAg
ICAgICAgICAgaW50IGVyckxpbmU7CisgICAgICAgICAgICBVU3RyaW5nIGVyck1zZzsKKyAgICAg
ICAgICAgIFJlZlB0cjxFdmFsTm9kZT4gZXZhbE5vZGUgPSBwYXJzZXIoKS5wYXJzZTxFdmFsTm9k
ZT4oVVN0cmluZygpLCAwLCBzLmRhdGEoKSwgcy5zaXplKCksICZzb3VyY2VJZCwgJmVyckxpbmUs
ICZlcnJNc2cpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBGSVhNRTogYWRkIGV4Y2Vw
dGlvbiBmb3IgYSBzeW50YXggZXJyb3IKKyAgICAgICAgICAgIAorICAgICAgICAgICAgRXZhbEV4
ZWNTdGF0ZSBuZXdFeGVjKGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSwgZXhlYy0+dGhpc1Zh
bHVlKCksIGV2YWxOb2RlLmdldCgpLCBleGVjLCBleGVjLT5zY29wZUNoYWluKCksIGV4ZWMtPmR5
bmFtaWNHbG9iYWxPYmplY3QoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGludCByZWdp
c3Rlck9mZnNldCA9IHIgLSAoKnJlZ2lzdGVyQmFzZSk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIEpTVmFsdWUqIGV4Y2VwdGlvbiA9IDA7ICAgICAgICAgICAgCisgICAgICAgICAgICBKU1Zh
bHVlKiB2YWx1ZSA9IG1hY2hpbmUoKS5leGVjdXRlKGV2YWxOb2RlLmdldCgpLCAmbmV3RXhlYywg
cmVnaXN0ZXJGaWxlLCByZWdpc3Rlck9mZnNldCArIGFyZ3YgKyBhcmdjLCBzY29wZUNoYWluLCAm
ZXhjZXB0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgciA9ICgqcmVnaXN0ZXJCYXNl
KSArIHJlZ2lzdGVyT2Zmc2V0OworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBGSVhNRTog
ZGVhbCB3aXRoIHRoZSBjYXNlIHdoZXJlIHRoZSBldmFsIHJhaXNlZCBhbiBleGNlcHRpb24KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgcltyMF0udS5qc1ZhbHVlID0gdmFsdWUgPyB2YWx1ZSA6
IGpzVW5kZWZpbmVkKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICsrdlBDOworICAgICAg
ICAgICAgTkVYVF9PUENPREU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEpTVmFsdWUq
IHRoaXNWYWx1ZSA9IGJhc2UtPnRvT2JqZWN0KGV4ZWMpLT5pc0FjdGl2YXRpb25PYmplY3QoKSA/
IGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSA6IGJhc2U7CisgICAgICAgIAorICAgICAgICBp
ZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVKUykgeworICAgICAgICAgICAgaW50IHJlZ2lzdGVyT2Zm
c2V0ID0gciAtICgqcmVnaXN0ZXJCYXNlKTsKKyAgICAgICAgICAgIFJlZ2lzdGVyKiBjYWxsRnJh
bWUgPSByICsgYXJndiAtIENhbGxGcmFtZUhlYWRlclNpemU7CisKKyAgICAgICAgICAgIHJbYXJn
dl0udS5qc1ZhbHVlID0gdGhpc1ZhbHVlOworICAgICAgICAgICAgaW5pdGlhbGl6ZUNhbGxGcmFt
ZShjYWxsRnJhbWUsIGNvZGVCbG9jaywgdlBDLCBzY29wZUNoYWluLCByZWdpc3Rlck9mZnNldCwg
cjAsIGFyZ3YsIDApOwogCi0gICAgICAgICAgICByW2FyZ3ZdLnUuanNWYWx1ZSA9IHIyID09IG1p
c3NpbmdTeW1ib2xNYXJrZXIoKSA/IGpzTnVsbCgpIDogKHJbcjJdLnUuanNWYWx1ZSktPnRvT2Jq
ZWN0KGV4ZWMpOyAvLyAidGhpcyIgdmFsdWUKKyAgICAgICAgICAgIFNjb3BlQ2hhaW4qIGNhbGxE
YXRhU2NvcGVDaGFpbiA9IGNhbGxEYXRhLmpzLnNjb3BlQ2hhaW47CisgICAgICAgICAgICBGdW5j
dGlvbkJvZHlOb2RlKiBmdW5jdGlvbkJvZHlOb2RlID0gY2FsbERhdGEuanMuZnVuY3Rpb25Cb2R5
OworCisgICAgICAgICAgICBjb2RlQmxvY2sgPSAmZnVuY3Rpb25Cb2R5Tm9kZS0+Y29kZShjYWxs
RGF0YVNjb3BlQ2hhaW4tPm5vZGUoKSk7CisgICAgICAgICAgICByID0gc2xpZGVSZWdpc3Rlcldp
bmRvd0ZvckNhbGwoY29kZUJsb2NrLCByZWdpc3RlckZpbGUsIHJlZ2lzdGVyQmFzZSwgcmVnaXN0
ZXJPZmZzZXQsIGFyZ3YsIGFyZ2MpOworICAgICAgICAgICAgc2NvcGVDaGFpbiA9IHNjb3BlQ2hh
aW5Gb3JDYWxsKGNvZGVCbG9jaywgY2FsbERhdGFTY29wZUNoYWluLCBmdW5jdGlvbkJvZHlOb2Rl
LCBjYWxsRnJhbWUsIHJlZ2lzdGVyQmFzZSwgcik7ICAgICAgICAgICAgCisgICAgICAgICAgICBr
ID0gY29kZUJsb2NrLT5qc1ZhbHVlcy5kYXRhKCk7CisgICAgICAgICAgICB2UEMgPSBjb2RlQmxv
Y2stPmluc3RydWN0aW9ucy5iZWdpbigpOworCisgICAgICAgICAgICBORVhUX09QQ09ERTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZU5hdGl2ZSkgeworICAg
ICAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gciAtICgqcmVnaXN0ZXJCYXNlKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgclthcmd2XS51LmpzVmFsdWUgPSB0aGlzVmFsdWU7CiAgICAg
ICAgICAgICBKU09iamVjdCogdGhpc09iaiA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oclthcmd2
XS51LmpzVmFsdWUpOwogCiAgICAgICAgICAgICBMaXN0IGFyZ3MoJnJbYXJndiArIDFdLnUuanNW
YWx1ZSwgYXJnYyAtIDEpOwpJbmRleDogVk0vTWFjaGluZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFZNL01h
Y2hpbmUuaAkocmV2aXNpb24gMzE5ODApCisrKyBWTS9NYWNoaW5lLmgJKHdvcmtpbmcgY29weSkK
QEAgLTgwLDYgKzgwLDggQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIAogICAgICAgICBKU1Zh
bHVlKiBleGVjdXRlKFByb2dyYW1Ob2RlKiwgRXhlY1N0YXRlKiwgSlNPYmplY3QqIHRoaXNPYmos
IFJlZ2lzdGVyRmlsZVN0YWNrKiwgU2NvcGVDaGFpbiosIEpTVmFsdWUqKiBleGNlcHRpb24pOwog
ICAgICAgICBKU1ZhbHVlKiBleGVjdXRlKEZ1bmN0aW9uQm9keU5vZGUqLCBjb25zdCBMaXN0JiBh
cmdzLCBKU09iamVjdCogdGhpc09iaiwgRXhlY1N0YXRlKiwgUmVnaXN0ZXJGaWxlU3RhY2sqLCBT
Y29wZUNoYWluKiwgSlNWYWx1ZSoqIGV4Y2VwdGlvbik7CisgICAgICAgIEpTVmFsdWUqIGV4ZWN1
dGUoRXZhbE5vZGUqLCBFeGVjU3RhdGUqLCBSZWdpc3RlckZpbGUqLCBpbnQgcmVnaXN0ZXJPZmZz
ZXQsIFNjb3BlQ2hhaW5Ob2RlKiwgSlNWYWx1ZSoqIGV4Y2VwdGlvbik7CisgICAgICAgIEpTVmFs
dWUqIGV4ZWN1dGUoRXZhbE5vZGUqLCBFeGVjU3RhdGUqLCBSZWdpc3RlckZpbGVTdGFjayosIFNj
b3BlQ2hhaW5Ob2RlKiwgSlNWYWx1ZSoqIGV4Y2VwdGlvbik7CiAgICAgICAgIAogICAgIHByaXZh
dGU6CiAgICAgICAgIHR5cGVkZWYgZW51bSB7IE5vcm1hbCwgSW5pdGlhbGl6ZUFuZFJldHVybiB9
IEV4ZWN1dGlvbkZsYWc7CkluZGV4OiBWTS9PcGNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBWTS9PcGNv
ZGUuaAkocmV2aXNpb24gMzE5ODApCisrKyBWTS9PcGNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAt
OTUsNiArOTUsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgbWFjcm8ob3BfbmV3X2Z1bmMp
IFwKICAgICAgICAgbWFjcm8ob3BfbmV3X2Z1bmNfZXhwKSBcCiAgICAgICAgIG1hY3JvKG9wX2Nh
bGwpIFwKKyAgICAgICAgbWFjcm8ob3BfZXZhbCkgXAogICAgICAgICBtYWNybyhvcF9yZXQpIFwK
ICAgICAgICAgXAogICAgICAgICBtYWNybyhvcF9jb25zdHJ1Y3QpIFwKSW5kZXg6IGtqcy9mdW5j
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL2Z1bmN0aW9uLmNwcAkocmV2aXNpb24gMzE5ODAp
CisrKyBranMvZnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02ODMsNTIgKzY4Myw0MiBA
QCBzdGF0aWMgZG91YmxlIHBhcnNlRmxvYXQoY29uc3QgVVN0cmluZyYgCiAgICAgcmV0dXJuIHMu
dG9Eb3VibGUoIHRydWUgLyp0b2xlcmFudCovLCBmYWxzZSAvKiBOYU4gZm9yIGVtcHR5IHN0cmlu
ZyAqLyApOwogfQogCi1KU1ZhbHVlKiBldmFsKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU2NvcGVD
aGFpbiYgc2NvcGVDaGFpbiwgSlNWYXJpYWJsZU9iamVjdCogdmFyaWFibGVPYmplY3QsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0JiBh
cmdzKQorSlNWYWx1ZSogZ2xvYmFsRnVuY0V2YWwoRXhlY1N0YXRlKiBleGVjLCBQcm90b3R5cGVS
ZWZsZXhpdmVGdW5jdGlvbiogZnVuY3Rpb24sIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0
JiBhcmdzKQogeworICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0aGlzT2JqLT5p
c0dsb2JhbE9iamVjdCgpID8gc3RhdGljX2Nhc3Q8SlNHbG9iYWxPYmplY3QqPih0aGlzT2JqKSA6
IDA7CisKKyAgICBpZiAoIWdsb2JhbE9iamVjdCB8fCBnbG9iYWxPYmplY3QtPmV2YWxGdW5jdGlv
bigpICE9IGZ1bmN0aW9uKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBFdmFsRXJy
b3IsICJUaGUgXCJ0aGlzXCIgdmFsdWUgcGFzc2VkIHRvIGV2YWwgbXVzdCBiZSB0aGUgZ2xvYmFs
IG9iamVjdCBmcm9tIHdoaWNoIGV2YWwgb3JpZ2luYXRlZCIpOworCisgICAgU2NvcGVDaGFpbiBz
Y29wZUNoYWluKGdsb2JhbE9iamVjdCk7CisKICAgICBKU1ZhbHVlKiB4ID0gYXJnc1swXTsKICAg
ICBpZiAoIXgtPmlzU3RyaW5nKCkpCiAgICAgICAgIHJldHVybiB4OwotCisgICAgCiAgICAgVVN0
cmluZyBzID0geC0+dG9TdHJpbmcoZXhlYyk7Ci0KKyAgICAKICAgICBpbnQgc291cmNlSWQ7CiAg
ICAgaW50IGVyckxpbmU7CiAgICAgVVN0cmluZyBlcnJNc2c7CiAgICAgUmVmUHRyPEV2YWxOb2Rl
PiBldmFsTm9kZSA9IHBhcnNlcigpLnBhcnNlPEV2YWxOb2RlPihVU3RyaW5nKCksIDAsIHMuZGF0
YSgpLCBzLnNpemUoKSwgJnNvdXJjZUlkLCAmZXJyTGluZSwgJmVyck1zZyk7Ci0KLSAgICBEZWJ1
Z2dlciogZGJnID0gZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpOwotICAg
IGlmIChkYmcpIHsKLSAgICAgICAgYm9vbCBjb250ID0gZGJnLT5zb3VyY2VQYXJzZWQoZXhlYywg
c291cmNlSWQsIFVTdHJpbmcoKSwgcywgMCwgZXJyTGluZSwgZXJyTXNnKTsKLSAgICAgICAgaWYg
KCFjb250KQotICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotCisgICAg
CiAgICAgaWYgKCFldmFsTm9kZSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3lu
dGF4RXJyb3IsIGVyck1zZywgZXJyTGluZSwgc291cmNlSWQsIE5VTEwpOwotCi0gICAgRXZhbEV4
ZWNTdGF0ZSBuZXdFeGVjKGdsb2JhbE9iamVjdCwgdGhpc09iaiwgZXZhbE5vZGUuZ2V0KCksIGV4
ZWMsIHNjb3BlQ2hhaW4sIHZhcmlhYmxlT2JqZWN0KTsKLQotICAgIEpTVmFsdWUqIHZhbHVlID0g
ZXZhbE5vZGUtPmV4ZWN1dGUoJm5ld0V4ZWMpOwotCi0gICAgaWYgKG5ld0V4ZWMuY29tcGxldGlv
blR5cGUoKSA9PSBUaHJvdykgeworICAgIAorICAgIEV2YWxFeGVjU3RhdGUgbmV3RXhlYyhnbG9i
YWxPYmplY3QsIHRoaXNPYmosIGV2YWxOb2RlLmdldCgpLCBleGVjLCBzY29wZUNoYWluLCBnbG9i
YWxPYmplY3QpOworICAgIAorICAgIEpTVmFsdWUqIGV4Y2VwdGlvbiA9IDA7CisgICAgSlNWYWx1
ZSogdmFsdWUgPSBtYWNoaW5lKCkuZXhlY3V0ZShldmFsTm9kZS5nZXQoKSwgJm5ld0V4ZWMsICZu
ZXdFeGVjLmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+cmVnaXN0ZXJGaWxlU3RhY2soKSwgc2NvcGVD
aGFpbi5ub2RlKCksICZleGNlcHRpb24pOworICAgIAorICAgIGlmIChleGNlcHRpb24pIHsKICAg
ICAgICAgZXhlYy0+c2V0RXhjZXB0aW9uKHZhbHVlKTsKICAgICAgICAgcmV0dXJuIHZhbHVlOwog
ICAgIH0KLQorICAgIAogICAgIHJldHVybiB2YWx1ZSA/IHZhbHVlIDoganNVbmRlZmluZWQoKTsK
IH0KIAotSlNWYWx1ZSogZ2xvYmFsRnVuY0V2YWwoRXhlY1N0YXRlKiBleGVjLCBQcm90b3R5cGVS
ZWZsZXhpdmVGdW5jdGlvbiogZnVuY3Rpb24sIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0
JiBhcmdzKQotewotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0aGlzT2JqLT5p
c0dsb2JhbE9iamVjdCgpID8gc3RhdGljX2Nhc3Q8SlNHbG9iYWxPYmplY3QqPih0aGlzT2JqKSA6
IDA7Ci0KLSAgICBpZiAoIWdsb2JhbE9iamVjdCB8fCBnbG9iYWxPYmplY3QtPmV2YWxGdW5jdGlv
bigpICE9IGZ1bmN0aW9uKQotICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBFdmFsRXJy
b3IsICJUaGUgXCJ0aGlzXCIgdmFsdWUgcGFzc2VkIHRvIGV2YWwgbXVzdCBiZSB0aGUgZ2xvYmFs
IG9iamVjdCBmcm9tIHdoaWNoIGV2YWwgb3JpZ2luYXRlZCIpOwotCi0gICAgU2NvcGVDaGFpbiBz
Y29wZUNoYWluKGdsb2JhbE9iamVjdCk7Ci0gICAgcmV0dXJuIGV2YWwoZXhlYywgc2NvcGVDaGFp
biwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgYXJncyk7Ci19Ci0K
IEpTVmFsdWUqIGdsb2JhbEZ1bmNQYXJzZUludChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0Kiwg
Y29uc3QgTGlzdCYgYXJncykKIHsKICAgICByZXR1cm4ganNOdW1iZXIocGFyc2VJbnQoYXJnc1sw
XS0+dG9TdHJpbmcoZXhlYyksIGFyZ3NbMV0tPnRvSW50MzIoZXhlYykpKTsKSW5kZXg6IGtqcy9m
dW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9mdW5jdGlvbi5oCShyZXZpc2lvbiAzMTk4MCkK
KysrIGtqcy9mdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcsOCArMTY3LDYgQEAgbmFt
ZXNwYWNlIEtKUyB7CiAgICAgSlNWYWx1ZSogZ2xvYmFsRnVuY0tKU1ByaW50KEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgY29uc3QgTGlzdCYpOwogI2VuZGlmCiAKLSAgICBKU1ZhbHVlKiBldmFsKEV4
ZWNTdGF0ZSosIGNvbnN0IFNjb3BlQ2hhaW4mLCBKU1ZhcmlhYmxlT2JqZWN0KiwgSlNHbG9iYWxP
YmplY3QqLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYgYXJncyk7Ci0KICAgICBzdGF0
aWMgY29uc3QgZG91YmxlIG1hbnRpc3NhT3ZlcmZsb3dMb3dlckJvdW5kID0gOTAwNzE5OTI1NDc0
MDk5Mi4wOwogICAgIGRvdWJsZSBwYXJzZUludE92ZXJmbG93KGNvbnN0IGNoYXIqLCBpbnQgbGVu
Z3RoLCBpbnQgcmFkaXgpOwogCkluZGV4OiBranMvbm9kZXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtq
cy9ub2Rlcy5jcHAJKHJldmlzaW9uIDMxOTgwKQorKysga2pzL25vZGVzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTI2NCw3ICsxMjY0LDYgQEAgaW5saW5lIEpTVmFsdWUqIEV4cHJlc3Npb25Ob2Rl
OjpyZXNvbHZlQQogICAgICAgICAgICAgaWYgKGNhbGxlclR5cGUgPT0gRXZhbE9wZXJhdG9yKSB7
CiAgICAgICAgICAgICAgICAgaWYgKGJhc2UgPT0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
ICYmIGZ1bmMgPT0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5ldmFsRnVuY3Rpb24oKSkg
ewogICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGV2YWwoZXhlYywgZXhlYy0+c2NvcGVDaGFpbigpLCBleGVjLT52YXJp
YWJsZU9iamVjdCgpLCBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCksIGV4ZWMtPnRoaXNWYWx1
ZSgpLCBhcmdMaXN0KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICByZXR1cm4gZnVuYy0+Y2FsbChleGVjLCB0aGlzT2JqLCBhcmdMaXN0KTsKQEAgLTEyNzUs
NiArMTI3NCwxNCBAQCBpbmxpbmUgSlNWYWx1ZSogRXhwcmVzc2lvbk5vZGU6OnJlc29sdmVBCiAg
ICAgcmV0dXJuIHRocm93VW5kZWZpbmVkVmFyaWFibGVFcnJvcihleGVjLCBpZGVudCk7CiB9CiAK
K1JlZ2lzdGVySUQqIEV2YWxGdW5jdGlvbkNhbGxOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9y
JiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKK3sKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
cjAgPSBnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCk7CisgICAgUmVnaXN0ZXJJRCogcjEg
PSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgZ2VuZXJhdG9yLmVtaXRSZXNvbHZlQmFz
ZUFuZFByb3BlcnR5KHIwLmdldCgpLCByMSwgQ29tbW9uSWRlbnRpZmllcnM6OnNoYXJlZCgpLT5l
dmFsKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRFdmFsKGdlbmVyYXRvci5maW5hbERlc3Rp
bmF0aW9uKGRzdCwgcjAuZ2V0KCkpLCByMSwgcjAuZ2V0KCksIG1fYXJncy5nZXQoKSk7Cit9CisK
IHZvaWQgRXZhbEZ1bmN0aW9uQ2FsbE5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoRXhlY1N0
YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2sm
IG5vZGVTdGFjaykKIHsKICAgICBub2RlU3RhY2suYXBwZW5kKG1fYXJncy5nZXQoKSk7CkBAIC01
NTk5LDYgKzU2MDYsMTUgQEAgRXZhbE5vZGU6On5FdmFsTm9kZSgpCiB7CiB9CiAKK1JlZ2lzdGVy
SUQqIEV2YWxOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVy
SUQqKQoreworICAgIFJlZ2lzdGVySUQqIHIwID0gc3RhdGVtZW50TGlzdEVtaXRDb2RlKG1fY2hp
bGRyZW4sIGdlbmVyYXRvcik7CisgICAgaWYgKCFyMCkKKyAgICAgICAgcjAgPSBnZW5lcmF0b3Iu
ZW1pdExvYWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBqc1VuZGVmaW5lZCgpKTsKKyAgICBn
ZW5lcmF0b3IuZW1pdEVuZChyMCk7CisgICAgcmV0dXJuIDA7Cit9CisKIHZvaWQgRXZhbE5vZGU6
OmdlbmVyYXRlQ29kZShTY29wZUNoYWluTm9kZSogc2MpCiB7CiAgICAgU2NvcGVDaGFpbiBzY29w
ZUNoYWluKHNjKTsKQEAgLTU2MDcsNyArNTYyMywxMCBAQCB2b2lkIEV2YWxOb2RlOjpnZW5lcmF0
ZUNvZGUoU2NvcGVDaGFpbk5vCiAgICAgCiAgICAgbV9jb2RlLnNldChuZXcgUHJvZ3JhbUNvZGVC
bG9jayh1c2VzRXZhbCgpLCBuZWVkc0Nsb3N1cmUoKSwgZ2xvYmFsT2JqZWN0KSk7CiAgICAgCi0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgQ29kZUdlbmVyYXRvciBnZW5lcmF0b3IodGhp
cywgc2NvcGVDaGFpbiwgbmV3IFN5bWJvbFRhYmxlKCksIG1fY29kZS5nZXQoKSk7CisgICAgZ2Vu
ZXJhdG9yLmdlbmVyYXRlKCk7CisKKyAgICBtX2NoaWxkcmVuLnNocmlua0NhcGFjaXR5KDApOwog
fQogCiBFdmFsTm9kZSogRXZhbE5vZGU6OmNyZWF0ZShTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4s
IFZhclN0YWNrKiB2YXJTdGFjaywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBib29sIHVzZXNF
dmFsLCBib29sIG5lZWRzQ2xvc3VyZSkKSW5kZXg6IGtqcy9ub2Rlcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGtqcy9ub2Rlcy5oCShyZXZpc2lvbiAzMTk4MCkKKysrIGtqcy9ub2Rlcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC03OTgsNiArNzk4LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIHsKICAgICAg
ICAgfQogCisgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRv
ciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lk
IG9wdGltaXplVmFyaWFibGVBY2Nlc3MoRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBj
b25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2
aXJ0dWFsIEpTVmFsdWUqIGV2YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9D
QUxMOwpAQCAtMjk5MCw2ICsyOTkxLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgICAgICAgQUxX
QVlTX0lOTElORSB2b2lkIHByb2Nlc3NEZWNsYXJhdGlvbnMoRXhlY1N0YXRlKikgS0pTX0ZBU1Rf
Q0FMTDsKICAgICAgICAgdm9pZCBnZW5lcmF0ZUNvZGUoU2NvcGVDaGFpbk5vZGUqKSBLSlNfRkFT
VF9DQUxMOworICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0
b3ImLCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7CiAKICAgICAgICAgT3duUHRyPFBy
b2dyYW1Db2RlQmxvY2s+IG1fY29kZTsKICAgICB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>20613</attachid>
            <date>2008-04-16 22:45:18 -0700</date>
            <delta_ts>2008-04-16 23:58:33 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch-eval.txt</filename>
            <type>text/plain</type>
            <size>18787</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFZNL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVk0vQ29kZUJsb2NrLmNwcAko
cmV2aXNpb24gMzE5ODApCisrKyBWTS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MzAsNiArNDMwLDE1IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYywgY28K
ICAgICAgICAgICAgIHByaW50ZigiWyU0ZF0gY2FsbFx0XHQlcywgJXMsICVzLCAlZCwgJWRcbiIs
IGxvY2F0aW9uLCByZWdpc3Rlck5hbWUocjApLmNfc3RyKCksIHJlZ2lzdGVyTmFtZShyMSkuY19z
dHIoKSwgcmVnaXN0ZXJOYW1lKHIyKS5jX3N0cigpLCB0ZW1wQ291bnQsIGFyZ0NvdW50KTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZXZhbDogeworICAg
ICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEg
PSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMiA9ICgrK2l0KS0+dS5vcGVy
YW5kOworICAgICAgICAgICAgaW50IHRlbXBDb3VudCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAg
ICAgICAgICAgaW50IGFyZ0NvdW50ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBw
cmludGYoIlslNGRdIGV2YWxcdFx0JXMsICVzLCAlcywgJWQsICVkXG4iLCBsb2NhdGlvbiwgcmVn
aXN0ZXJOYW1lKHIwKS5jX3N0cigpLCByZWdpc3Rlck5hbWUocjEpLmNfc3RyKCksIHJlZ2lzdGVy
TmFtZShyMikuY19zdHIoKSwgdGVtcENvdW50LCBhcmdDb3VudCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQogICAgICAgICBjYXNlIG9wX3JldDogewogICAgICAgICAgICAgaW50IHIw
ID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBwcmludGYoIlslNGRdIHJldFx0XHQl
c1xuIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShyMCkuY19zdHIoKSk7CkluZGV4OiBWTS9Db2Rl
R2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBWTS9Db2RlR2VuZXJhdG9yLmNwcAkocmV2aXNp
b24gMzE5ODApCisrKyBWTS9Db2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYw
LDYgKzE2MCw3IEBAIENvZGVHZW5lcmF0b3I6OkNvZGVHZW5lcmF0b3IoUHJvZ3JhbU5vZGUKICAg
ICAsIG1fc2NvcGVOb2RlKHByb2dyYW1Ob2RlKQogICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2Nr
KQogICAgICwgbV9zY29wZURlcHRoKDApCisgICAgLCBtX2lzRXZhbENvZGUoZmFsc2UpCiAgICAg
LCBtX25leHRWYXIoLTEpCiAgICAgLCBtX3Byb3BlcnR5TmFtZXMoQ29tbW9uSWRlbnRpZmllcnM6
OnNoYXJlZCgpKQogCkBAIC0yMDEsNiArMjAyLDcgQEAgQ29kZUdlbmVyYXRvcjo6Q29kZUdlbmVy
YXRvcihGdW5jdGlvbkJvZAogICAgICwgbV9zY29wZU5vZGUoZnVuY3Rpb25Cb2R5KQogICAgICwg
bV9jb2RlQmxvY2soY29kZUJsb2NrKQogICAgICwgbV9zY29wZURlcHRoKDApCisgICAgLCBtX2lz
RXZhbENvZGUoZmFsc2UpCiAgICAgLCBtX25leHRWYXIoLTEpCiAgICAgLCBtX3Byb3BlcnR5TmFt
ZXMoQ29tbW9uSWRlbnRpZmllcnM6OnNoYXJlZCgpKQogewpAQCAtMjMxLDYgKzIzMywxOSBAQCBD
b2RlR2VuZXJhdG9yOjpDb2RlR2VuZXJhdG9yKEZ1bmN0aW9uQm9kCiAgICAgfQogfQogCitDb2Rl
R2VuZXJhdG9yOjpDb2RlR2VuZXJhdG9yKEV2YWxOb2RlKiBldmFsTm9kZSwgY29uc3QgU2NvcGVD
aGFpbiYgc2NvcGVDaGFpbiwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaykKKyAgICA6IG1fc2NvcGVDaGFpbigmc2NvcGVDaGFpbikKKyAgICAsIG1fc3ltYm9s
VGFibGUoc3ltYm9sVGFibGUpCisgICAgLCBtX3Njb3BlTm9kZShldmFsTm9kZSkKKyAgICAsIG1f
Y29kZUJsb2NrKGNvZGVCbG9jaykKKyAgICAsIG1fc2NvcGVEZXB0aCgwKQorICAgICwgbV9pc0V2
YWxDb2RlKHRydWUpCisgICAgLCBtX25leHRWYXIoLTEpCisgICAgLCBtX3Byb3BlcnR5TmFtZXMo
Q29tbW9uSWRlbnRpZmllcnM6OnNoYXJlZCgpKQoreworICAgIGFkZFZhcihtX3Byb3BlcnR5TmFt
ZXMtPnRoaXNJZGVudGlmaWVyKTsKK30KKwogdm9pZCBDb2RlR2VuZXJhdG9yOjphZGRQYXJhbWV0
ZXIoY29uc3QgSWRlbnRpZmllciYgaWRlbnQpCiB7CiAgICAgLy8gUGFyYW1ldGVycyBvdmVyd3Jp
dGUgdmFyIGRlY2xhcmF0aW9ucywgYnV0IG5vdCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMsCkBAIC03
NjQsNiArNzc5LDE4IEBAIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXROZXdGdW5jdGkK
IAogUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdENhbGwoUmVnaXN0ZXJJRCogcjAsIFJl
Z2lzdGVySUQqIHIxLCBSZWdpc3RlcklEKiByMiwgQXJndW1lbnRzTm9kZSogYXJndW1lbnRzTm9k
ZSkKIHsKKyAgICByZXR1cm4gZW1pdENhbGwob3BfY2FsbCwgcjAsIHIxLCByMiwgYXJndW1lbnRz
Tm9kZSk7Cit9CisKK1JlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXRFdmFsKFJlZ2lzdGVy
SUQqIHIwLCBSZWdpc3RlcklEKiByMSwgUmVnaXN0ZXJJRCogcjIsIEFyZ3VtZW50c05vZGUqIGFy
Z3VtZW50c05vZGUpCit7CisgICAgcmV0dXJuIGVtaXRDYWxsKG9wX2V2YWwsIHIwLCByMSwgcjIs
IGFyZ3VtZW50c05vZGUpOworfQorCitSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0Q2Fs
bChPcGNvZGVJRCBvcGNvZGVJRCwgUmVnaXN0ZXJJRCogcjAsIFJlZ2lzdGVySUQqIHIxLCBSZWdp
c3RlcklEKiByMiwgQXJndW1lbnRzTm9kZSogYXJndW1lbnRzTm9kZSkKK3sKKyAgICBBU1NFUlQo
b3Bjb2RlSUQgPT0gb3BfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF9ldmFsKTsKKwogICAgIFJlZlB0
cjxSZWdpc3RlcklEPiByZWYxID0gcjE7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJlZjIgPSBy
MjsKICAgICAKQEAgLTc4MCw3ICs4MDcsNyBAQCBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjpl
bWl0Q2FsbChSZWdpCiAgICAgICAgIGVtaXROb2RlKGFyZ3YubGFzdCgpLmdldCgpLCBuKTsKICAg
ICB9CiAKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobWFjaGluZSgpLmdldE9wY29kZShvcF9j
YWxsKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1hY2hpbmUoKS5nZXRPcGNvZGUob3Bj
b2RlSUQpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocjAtPmluZGV4KCkpOwogICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChyMS0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKHIyID8gcjItPmluZGV4KCkgOiBtaXNzaW5nU3ltYm9sTWFya2VyKCkpOyAvLyBXZSBlbmNv
ZGUgdGhlICJ0aGlzIiB2YWx1ZSBpbiB0aGUgaW5zdHJ1Y3Rpb24gc3RyZWFtLCB0byBhdm9pZCBh
biBleHBsaWNpdCBpbnN0cnVjdGlvbiBmb3IgY29weWluZyBvciBsb2FkaW5nIGl0LgpJbmRleDog
Vk0vQ29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFZNL0NvZGVHZW5lcmF0b3IuaAkocmV2
aXNpb24gMzE5ODApCisrKyBWTS9Db2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTYz
LDYgKzYzLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIAogICAgICAgICBDb2RlR2VuZXJh
dG9yKFByb2dyYW1Ob2RlKiwgY29uc3QgU2NvcGVDaGFpbiYsIFN5bWJvbFRhYmxlKiwgQ29kZUJs
b2NrKiwgVmFyU3RhY2smLCBGdW5jdGlvblN0YWNrJik7CiAgICAgICAgIENvZGVHZW5lcmF0b3Io
RnVuY3Rpb25Cb2R5Tm9kZSosIGNvbnN0IFNjb3BlQ2hhaW4mLCBTeW1ib2xUYWJsZSosIENvZGVC
bG9jayosIFZhclN0YWNrJiwgRnVuY3Rpb25TdGFjayYsIFZlY3RvcjxJZGVudGlmaWVyPiYgcGFy
YW1ldGVycyk7CisgICAgICAgIENvZGVHZW5lcmF0b3IoRXZhbE5vZGUqLCBjb25zdCBTY29wZUNo
YWluJiwgU3ltYm9sVGFibGUqLCBDb2RlQmxvY2sqKTsKIAogICAgICAgICBjb25zdCBDb21tb25J
ZGVudGlmaWVycyYgcHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0dXJuICptX3Byb3BlcnR5TmFt
ZXM7IH0KIApAQCAtMTg3LDYgKzE4OCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICBSZWdp
c3RlcklEKiBlbWl0UHV0UHJvcEluZGV4KFJlZ2lzdGVySUQqIGJhc2UsIHVuc2lnbmVkIGluZGV4
LCBSZWdpc3RlcklEKiB2YWwpOwogCiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRDYWxsKFJlZ2lz
dGVySUQqLCBSZWdpc3RlcklEKiwgUmVnaXN0ZXJJRCosIEFyZ3VtZW50c05vZGUqKTsKKyAgICAg
ICAgUmVnaXN0ZXJJRCogZW1pdEV2YWwoUmVnaXN0ZXJJRCosIFJlZ2lzdGVySUQqLCBSZWdpc3Rl
cklEKiwgQXJndW1lbnRzTm9kZSopOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0UmV0dXJuKFJl
Z2lzdGVySUQqKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEVuZChSZWdpc3RlcklEKik7CiAK
QEAgLTIyNSw2ICsyMjcsOCBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICAgICAgICB0eXBlZGVmIEhh
c2hNYXA8SlNWYWx1ZSosIHVuc2lnbmVkLCBEZWZhdWx0SGFzaDxKU1ZhbHVlKj46Okhhc2gsIEpT
VmFsdWVIYXNoVHJhaXRzPiBKU1ZhbHVlTWFwOwogICAgICAgICAKKyAgICAgICAgUmVnaXN0ZXJJ
RCogZW1pdENhbGwoT3Bjb2RlSUQsIFJlZ2lzdGVySUQqLCBSZWdpc3RlcklEKiwgUmVnaXN0ZXJJ
RCosIEFyZ3VtZW50c05vZGUqKTsKKwogICAgICAgICAvLyBNYXBzIGEgcmVnaXN0ZXIgaW5kZXgg
aW4gdGhlIHN5bWJvbCB0YWJsZSB0byBhIFJlZ2lzdGVySUQgaW5kZXggaW4gbV9sb2NhbHMuCiAg
ICAgICAgIGludCBsb2NhbHNJbmRleChpbnQgcmVnaXN0ZXJJbmRleCkgeyByZXR1cm4gLXJlZ2lz
dGVySW5kZXggLSAxOyB9CiAgICAgICAgIApAQCAtMjUxLDcgKzI1NSw3IEBAIG5hbWVzcGFjZSBL
SlMgewogICAgICAgICBTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUoKSB7IHJldHVybiAqbV9zeW1i
b2xUYWJsZTsgfQogICAgICAgICBWZWN0b3I8SGFuZGxlckluZm8+JiBleGNlcHRpb25IYW5kbGVy
cygpIHsgcmV0dXJuIG1fY29kZUJsb2NrLT5leGNlcHRpb25IYW5kbGVyczsgfQogICAgICAgICAK
LSAgICAgICAgYm9vbCBzaG91bGRPcHRpbWl6ZUxvY2FscygpIHsgcmV0dXJuICFtX3Njb3BlRGVw
dGg7IH0KKyAgICAgICAgYm9vbCBzaG91bGRPcHRpbWl6ZUxvY2FscygpIHsgcmV0dXJuICFtX2lz
RXZhbENvZGUgJiYgIW1fc2NvcGVEZXB0aDsgfQogCiAgICAgICAgIGNvbnN0IFNjb3BlQ2hhaW4q
IG1fc2NvcGVDaGFpbjsKICAgICAgICAgU3ltYm9sVGFibGUqIG1fc3ltYm9sVGFibGU7CkBAIC0y
NjUsNiArMjY5LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIFZlY3RvcjxSZWdpc3RlcklE
LCAxMjg+IG1fdGVtcG9yYXJpZXM7CiAgICAgICAgIFZlY3RvcjxMYWJlbElELCAxMjg+IG1fbGFi
ZWxzOwogICAgICAgICBpbnQgbV9zY29wZURlcHRoOworICAgICAgICBib29sIG1faXNFdmFsQ29k
ZTsKICAgICAgICAgCiAgICAgICAgIFZlY3RvcjxKdW1wQ29udGV4dD4gbV9qdW1wQ29udGV4dFN0
YWNrOwogCkluZGV4OiBWTS9NYWNoaW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBWTS9NYWNoaW5lLmNw
cAkocmV2aXNpb24gMzE5ODApCisrKyBWTS9NYWNoaW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDk1LDggKzQ5NSwzNCBAQCBzdGF0aWMgTkVWRVJfSU5MSU5FIGJvb2wgaXNOb3RPYmplY3QoRXhl
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3N0YXRpYyBORVZFUl9JTkxJTkUgSlNWYWx1ZSogZXZh
bChFeGVjU3RhdGUqIGV4ZWMsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBSZWdpc3RlckZp
bGUqIHJlZ2lzdGVyRmlsZSwgUmVnaXN0ZXIqIHIsIGludCBhcmd2LCBpbnQgYXJnYywgSlNWYWx1
ZSomIGV4Y2VwdGlvblZhbHVlKQoreworICAgIEpTVmFsdWUqIHggPSBhcmdjID49IDIgPyByW2Fy
Z3YgKyAxXS51LmpzVmFsdWUgOiBqc1VuZGVmaW5lZCgpOworICAgIAorICAgIFVTdHJpbmcgcyA9
IHgtPnRvU3RyaW5nKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAg
ICAgICBleGNlcHRpb25WYWx1ZSA9IGV4ZWMtPmV4Y2VwdGlvbigpOworICAgICAgICBleGVjLT5j
bGVhckV4Y2VwdGlvbigpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpbnQgc291
cmNlSWQ7CisgICAgaW50IGVyckxpbmU7CisgICAgVVN0cmluZyBlcnJNc2c7CisgICAgUmVmUHRy
PEV2YWxOb2RlPiBldmFsTm9kZSA9IHBhcnNlcigpLnBhcnNlPEV2YWxOb2RlPihVU3RyaW5nKCks
IDAsIHMuZGF0YSgpLCBzLnNpemUoKSwgJnNvdXJjZUlkLCAmZXJyTGluZSwgJmVyck1zZyk7Cisg
ICAgCisgICAgaWYgKCFldmFsTm9kZSkgeworICAgICAgICBleGNlcHRpb25WYWx1ZSA9IHRocm93
RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsIGVyck1zZywgZXJyTGluZSwgc291cmNlSWQsIE5VTEwp
OworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBFdmFsRXhlY1N0YXRlIG5ld0V4ZWMo
ZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLCBleGVjLT50aGlzVmFsdWUoKSwgZXZhbE5vZGUu
Z2V0KCksIGV4ZWMsIGV4ZWMtPnNjb3BlQ2hhaW4oKSwgZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVj
dCgpKTsKKyAgICByZXR1cm4gbWFjaGluZSgpLmV4ZWN1dGUoZXZhbE5vZGUuZ2V0KCksICZuZXdF
eGVjLCByZWdpc3RlckZpbGUsIHIgLSAoKnJlZ2lzdGVyRmlsZS0+YmFzZVBvaW50ZXIoKSkgKyBh
cmd2ICsgYXJnYywgc2NvcGVDaGFpbiwgJmV4Y2VwdGlvblZhbHVlKTsKK30KKwogI2lmIEhBVkUo
Q09NUFVURURfR09UTykKIHN0YXRpYyB2b2lkKiB0aHJvd1RhcmdldDsKK3N0YXRpYyB2b2lkKiBj
YWxsVGFyZ2V0OwogI2VuZGlmCiAKIEpTVmFsdWUqIE1hY2hpbmU6OmV4ZWN1dGUoUHJvZ3JhbU5v
ZGUqIHByb2dyYW1Ob2RlLCBFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBSZWdp
c3RlckZpbGVTdGFjayogcmVnaXN0ZXJGaWxlU3RhY2ssIFNjb3BlQ2hhaW4qIHNjb3BlQ2hhaW4s
IEpTVmFsdWUqKiBleGNlcHRpb24pCkBAIC01NTIsNiArNTc4LDM5IEBAIEpTVmFsdWUqIE1hY2hp
bmU6OmV4ZWN1dGUoRnVuY3Rpb25Cb2R5Tm8KICAgICByZXR1cm4gcmVzdWx0OwogfQogCitKU1Zh
bHVlKiBNYWNoaW5lOjpleGVjdXRlKEV2YWxOb2RlKiBldmFsTm9kZSwgRXhlY1N0YXRlKiBleGVj
LCBSZWdpc3RlckZpbGUqIHJlZ2lzdGVyRmlsZSwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBTY29wZUNo
YWluTm9kZSogc2NvcGVDaGFpbiwgSlNWYWx1ZSoqIGV4Y2VwdGlvbikKK3sKKyAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9ICZldmFsTm9kZS0+Y29kZShzY29wZUNoYWluKTsKKworICAgIHNpemVf
dCBvbGRTaXplID0gcmVnaXN0ZXJGaWxlLT5zaXplKCk7CisgICAgc2l6ZV90IG5ld1NpemUgPSBy
ZWdpc3Rlck9mZnNldCArIGNvZGVCbG9jay0+bnVtVmFycyArIGNvZGVCbG9jay0+bnVtVGVtcG9y
YXJpZXM7CisgICAgcmVnaXN0ZXJGaWxlLT5ncm93KG5ld1NpemUpOworICAgIFJlZ2lzdGVyKiBy
ID0gKCpyZWdpc3RlckZpbGUtPmJhc2VQb2ludGVyKCkpICsgcmVnaXN0ZXJPZmZzZXQgKyBjb2Rl
QmxvY2stPm51bVZhcnM7CisgICAgCisgICAgSlNWYWx1ZSogcmVzdWx0ID0gcHJpdmF0ZUV4ZWN1
dGUoTm9ybWFsLCBleGVjLCByZWdpc3RlckZpbGUsIHIsIHNjb3BlQ2hhaW4sIGNvZGVCbG9jaywg
ZXhjZXB0aW9uKTsKKyAgICAKKyAgICByZWdpc3RlckZpbGUtPnNocmluayhvbGRTaXplKTsKKyAg
ICAKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitKU1ZhbHVlKiBNYWNoaW5lOjpleGVjdXRlKEV2
YWxOb2RlKiBldmFsTm9kZSwgRXhlY1N0YXRlKiBleGVjLCBSZWdpc3RlckZpbGVTdGFjayogcmVn
aXN0ZXJGaWxlU3RhY2ssIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBKU1ZhbHVlKiogZXhj
ZXB0aW9uKQoreworICAgIFJlZ2lzdGVyRmlsZSogcmVnaXN0ZXJGaWxlID0gcmVnaXN0ZXJGaWxl
U3RhY2stPmN1cnJlbnQoKTsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9ICZldmFsTm9kZS0+
Y29kZShzY29wZUNoYWluKTsKKworICAgIHNpemVfdCBvbGRTaXplID0gcmVnaXN0ZXJGaWxlLT5z
aXplKCk7CisgICAgc2l6ZV90IG5ld1NpemUgPSBvbGRTaXplICsgY29kZUJsb2NrLT5udW1WYXJz
ICsgY29kZUJsb2NrLT5udW1UZW1wb3JhcmllczsKKyAgICByZWdpc3RlckZpbGUtPmdyb3cobmV3
U2l6ZSk7CisgICAgUmVnaXN0ZXIqIHIgPSAoKnJlZ2lzdGVyRmlsZS0+YmFzZVBvaW50ZXIoKSkg
KyBvbGRTaXplICsgY29kZUJsb2NrLT5udW1WYXJzOworICAgIAorICAgIEpTVmFsdWUqIHJlc3Vs
dCA9IHByaXZhdGVFeGVjdXRlKE5vcm1hbCwgZXhlYywgcmVnaXN0ZXJGaWxlLCByLCBzY29wZUNo
YWluLCBjb2RlQmxvY2ssIGV4Y2VwdGlvbik7CisgICAgCisgICAgcmVnaXN0ZXJGaWxlLT5zaHJp
bmsob2xkU2l6ZSk7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogSlNWYWx1ZSogTWFj
aGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aW9uRmxhZyBmbGFnLCBFeGVjU3RhdGUqIGV4ZWMs
IFJlZ2lzdGVyRmlsZSogcmVnaXN0ZXJGaWxlLCBSZWdpc3RlciogciwgU2NvcGVDaGFpbk5vZGUq
IHNjb3BlQ2hhaW4sIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlKiogZXhjZXB0aW9uKQog
ewogICAgIC8vIE9uZS10aW1lIGluaXRpYWxpemF0aW9uIG9mIG91ciBhZGRyZXNzIHRhYmxlcy4g
V2UgaGF2ZSB0byBwdXQgdGhpcyBjb2RlCkBAIC01NjcsNiArNjI2LDcgQEAgSlNWYWx1ZSogTWFj
aGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICAgICAgI3VuZGVmIEFERF9PUENP
REUKICAgICAgICAgICAgIEFTU0VSVChtX29wY29kZUlEVGFibGUuc2l6ZSgpID09IG51bU9wY29k
ZUlEcyk7CiAgICAgICAgICAgICB0aHJvd1RhcmdldCA9ICYmZ2NjX2RlcGVuZGVuY3lfaGFjazsK
KyAgICAgICAgICAgIGNhbGxUYXJnZXQgPSAmJm9wX2NhbGw7CiAgICAgICAgICNlbmRpZiAvLyBI
QVZFKENPTVBVVEVEX0dPVE8pCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KQEAgLTExMDAsNiAr
MTE2MCwzMyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAg
ICAgICsrdlBDOwogICAgICAgICBORVhUX09QQ09ERTsKICAgICB9CisgICAgQkVHSU5fT1BDT0RF
KG9wX2V2YWwpIHsKKyAgICAgICAgaW50IHIwID0gKCsrdlBDKS0+dS5vcGVyYW5kOworICAgICAg
ICBpbnQgcjEgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CisgICAgICAgIGludCByMiA9ICgrK3ZQQykt
PnUub3BlcmFuZDsKKyAgICAgICAgaW50IGFyZ3YgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CisgICAg
ICAgIGludCBhcmdjID0gKCsrdlBDKS0+dS5vcGVyYW5kOworCisgICAgICAgIEpTVmFsdWUqIHYg
PSByW3IxXS51LmpzVmFsdWU7CisgICAgICAgIEpTVmFsdWUqIGJhc2UgPSByW3IyXS51LmpzVmFs
dWU7CisgICAgICAgIAorICAgICAgICBpZiAoYmFzZSA9PSBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCkgJiYgdiA9PSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmV2YWxGdW5jdGlvbigp
KSB7CisgICAgICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSByIC0gKCpyZWdpc3RlckJhc2Up
OworCisgICAgICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBldmFsKGV4ZWMsIHNjb3BlQ2hhaW4s
IHJlZ2lzdGVyRmlsZSwgciwgYXJndiwgYXJnYywgZXhjZXB0aW9uVmFsdWUpOworICAgICAgICAg
ICAgLy8gRklYTUU6IENoZWNraW5nIGZvciBhbiBleGNlcHRpb24gaGVyZSBzZWVtcyB0byBjYXVz
ZSBhIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24uCisgICAgICAgICAgICBBU1NFUlQoIWV4Y2VwdGlv
blZhbHVlKTsKKworICAgICAgICAgICAgciA9ICgqcmVnaXN0ZXJCYXNlKSArIHJlZ2lzdGVyT2Zm
c2V0OworICAgICAgICAgICAgcltyMF0udS5qc1ZhbHVlID0gcmVzdWx0OworICAgICAgICAgICAg
CisgICAgICAgICAgICArK3ZQQzsKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICB2UEMgLT0gNTsKKyAgICAgICAgZ290byAqY2FsbFRhcmdldDsK
KyAgICB9CiAgICAgQkVHSU5fT1BDT0RFKG9wX2NhbGwpIHsKICAgICAgICAgaW50IHIwID0gKCsr
dlBDKS0+dS5vcGVyYW5kOwogICAgICAgICBpbnQgcjEgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CkBA
IC0xMTM0LDkgKzEyMjEsNyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVj
dXRpCiAgICAgICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlwZU5hdGl2ZSkgewogICAgICAgICAg
ICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gciAtICgqcmVnaXN0ZXJCYXNlKTsKICAgICAgICAgICAg
IAotICAgICAgICAgICAgLy8gRklYTUU6IFN1YnN0aXR1dGUgbGV4aWNhbCBnbG9iYWwgb2JqZWN0
IGZvciBudWxsLgotCi0gICAgICAgICAgICByW2FyZ3ZdLnUuanNWYWx1ZSA9IHIyID09IG1pc3Np
bmdTeW1ib2xNYXJrZXIoKSA/IGpzTnVsbCgpIDogKHJbcjJdLnUuanNWYWx1ZSktPnRvT2JqZWN0
KGV4ZWMpOyAvLyAidGhpcyIgdmFsdWUKKyAgICAgICAgICAgIHJbYXJndl0udS5qc1ZhbHVlID0g
cjIgPT0gbWlzc2luZ1N5bWJvbE1hcmtlcigpID8gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
IDogKHJbcjJdLnUuanNWYWx1ZSktPnRvT2JqZWN0KGV4ZWMpOyAvLyAidGhpcyIgdmFsdWUKICAg
ICAgICAgICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihyW2Fy
Z3ZdLnUuanNWYWx1ZSk7CiAKICAgICAgICAgICAgIExpc3QgYXJncygmclthcmd2ICsgMV0udS5q
c1ZhbHVlLCBhcmdjIC0gMSk7CkluZGV4OiBWTS9NYWNoaW5lLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVk0v
TWFjaGluZS5oCShyZXZpc2lvbiAzMTk4MCkKKysrIFZNL01hY2hpbmUuaAkod29ya2luZyBjb3B5
KQpAQCAtODAsNiArODAsOCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgCiAgICAgICAgIEpT
VmFsdWUqIGV4ZWN1dGUoUHJvZ3JhbU5vZGUqLCBFeGVjU3RhdGUqLCBKU09iamVjdCogdGhpc09i
aiwgUmVnaXN0ZXJGaWxlU3RhY2sqLCBTY29wZUNoYWluKiwgSlNWYWx1ZSoqIGV4Y2VwdGlvbik7
CiAgICAgICAgIEpTVmFsdWUqIGV4ZWN1dGUoRnVuY3Rpb25Cb2R5Tm9kZSosIGNvbnN0IExpc3Qm
IGFyZ3MsIEpTT2JqZWN0KiB0aGlzT2JqLCBFeGVjU3RhdGUqLCBSZWdpc3RlckZpbGVTdGFjayos
IFNjb3BlQ2hhaW4qLCBKU1ZhbHVlKiogZXhjZXB0aW9uKTsKKyAgICAgICAgSlNWYWx1ZSogZXhl
Y3V0ZShFdmFsTm9kZSosIEV4ZWNTdGF0ZSosIFJlZ2lzdGVyRmlsZSosIGludCByZWdpc3Rlck9m
ZnNldCwgU2NvcGVDaGFpbk5vZGUqLCBKU1ZhbHVlKiogZXhjZXB0aW9uKTsKKyAgICAgICAgSlNW
YWx1ZSogZXhlY3V0ZShFdmFsTm9kZSosIEV4ZWNTdGF0ZSosIFJlZ2lzdGVyRmlsZVN0YWNrKiwg
U2NvcGVDaGFpbk5vZGUqLCBKU1ZhbHVlKiogZXhjZXB0aW9uKTsKICAgICAgICAgCiAgICAgcHJp
dmF0ZToKICAgICAgICAgdHlwZWRlZiBlbnVtIHsgTm9ybWFsLCBJbml0aWFsaXplQW5kUmV0dXJu
IH0gRXhlY3V0aW9uRmxhZzsKSW5kZXg6IFZNL09wY29kZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFZNL09w
Y29kZS5oCShyZXZpc2lvbiAzMTk4MCkKKysrIFZNL09wY29kZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC05NSw2ICs5NSw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICBtYWNybyhvcF9uZXdfZnVu
YykgXAogICAgICAgICBtYWNybyhvcF9uZXdfZnVuY19leHApIFwKICAgICAgICAgbWFjcm8ob3Bf
Y2FsbCkgXAorICAgICAgICBtYWNybyhvcF9ldmFsKSBcCiAgICAgICAgIG1hY3JvKG9wX3JldCkg
XAogICAgICAgICBcCiAgICAgICAgIG1hY3JvKG9wX2NvbnN0cnVjdCkgXApJbmRleDoga2pzL2Z1
bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvZnVuY3Rpb24uY3BwCShyZXZpc2lvbiAzMTk4
MCkKKysrIGtqcy9mdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4Myw1MiArNjgzLDQy
IEBAIHN0YXRpYyBkb3VibGUgcGFyc2VGbG9hdChjb25zdCBVU3RyaW5nJiAKICAgICByZXR1cm4g
cy50b0RvdWJsZSggdHJ1ZSAvKnRvbGVyYW50Ki8sIGZhbHNlIC8qIE5hTiBmb3IgZW1wdHkgc3Ry
aW5nICovICk7CiB9CiAKLUpTVmFsdWUqIGV2YWwoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTY29w
ZUNoYWluJiBzY29wZUNoYWluLCBKU1ZhcmlhYmxlT2JqZWN0KiB2YXJpYWJsZU9iamVjdCwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3Qm
IGFyZ3MpCitKU1ZhbHVlKiBnbG9iYWxGdW5jRXZhbChFeGVjU3RhdGUqIGV4ZWMsIFByb3RvdHlw
ZVJlZmxleGl2ZUZ1bmN0aW9uKiBmdW5jdGlvbiwgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExp
c3QmIGFyZ3MpCiB7CisgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRoaXNPYmot
PmlzR2xvYmFsT2JqZWN0KCkgPyBzdGF0aWNfY2FzdDxKU0dsb2JhbE9iamVjdCo+KHRoaXNPYmop
IDogMDsKKworICAgIGlmICghZ2xvYmFsT2JqZWN0IHx8IGdsb2JhbE9iamVjdC0+ZXZhbEZ1bmN0
aW9uKCkgIT0gZnVuY3Rpb24pCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIEV2YWxF
cnJvciwgIlRoZSBcInRoaXNcIiB2YWx1ZSBwYXNzZWQgdG8gZXZhbCBtdXN0IGJlIHRoZSBnbG9i
YWwgb2JqZWN0IGZyb20gd2hpY2ggZXZhbCBvcmlnaW5hdGVkIik7CisKKyAgICBTY29wZUNoYWlu
IHNjb3BlQ2hhaW4oZ2xvYmFsT2JqZWN0KTsKKwogICAgIEpTVmFsdWUqIHggPSBhcmdzWzBdOwog
ICAgIGlmICgheC0+aXNTdHJpbmcoKSkKICAgICAgICAgcmV0dXJuIHg7Ci0KKyAgICAKICAgICBV
U3RyaW5nIHMgPSB4LT50b1N0cmluZyhleGVjKTsKLQorICAgIAogICAgIGludCBzb3VyY2VJZDsK
ICAgICBpbnQgZXJyTGluZTsKICAgICBVU3RyaW5nIGVyck1zZzsKICAgICBSZWZQdHI8RXZhbE5v
ZGU+IGV2YWxOb2RlID0gcGFyc2VyKCkucGFyc2U8RXZhbE5vZGU+KFVTdHJpbmcoKSwgMCwgcy5k
YXRhKCksIHMuc2l6ZSgpLCAmc291cmNlSWQsICZlcnJMaW5lLCAmZXJyTXNnKTsKLQotICAgIERl
YnVnZ2VyKiBkYmcgPSBleGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCk7Ci0g
ICAgaWYgKGRiZykgewotICAgICAgICBib29sIGNvbnQgPSBkYmctPnNvdXJjZVBhcnNlZChleGVj
LCBzb3VyY2VJZCwgVVN0cmluZygpLCBzLCAwLCBlcnJMaW5lLCBlcnJNc2cpOwotICAgICAgICBp
ZiAoIWNvbnQpCi0gICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci0KKyAg
ICAKICAgICBpZiAoIWV2YWxOb2RlKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBT
eW50YXhFcnJvciwgZXJyTXNnLCBlcnJMaW5lLCBzb3VyY2VJZCwgTlVMTCk7Ci0KLSAgICBFdmFs
RXhlY1N0YXRlIG5ld0V4ZWMoZ2xvYmFsT2JqZWN0LCB0aGlzT2JqLCBldmFsTm9kZS5nZXQoKSwg
ZXhlYywgc2NvcGVDaGFpbiwgdmFyaWFibGVPYmplY3QpOwotCi0gICAgSlNWYWx1ZSogdmFsdWUg
PSBldmFsTm9kZS0+ZXhlY3V0ZSgmbmV3RXhlYyk7Ci0KLSAgICBpZiAobmV3RXhlYy5jb21wbGV0
aW9uVHlwZSgpID09IFRocm93KSB7CisgICAgCisgICAgRXZhbEV4ZWNTdGF0ZSBuZXdFeGVjKGds
b2JhbE9iamVjdCwgdGhpc09iaiwgZXZhbE5vZGUuZ2V0KCksIGV4ZWMsIHNjb3BlQ2hhaW4sIGds
b2JhbE9iamVjdCk7CisgICAgCisgICAgSlNWYWx1ZSogZXhjZXB0aW9uID0gMDsKKyAgICBKU1Zh
bHVlKiB2YWx1ZSA9IG1hY2hpbmUoKS5leGVjdXRlKGV2YWxOb2RlLmdldCgpLCAmbmV3RXhlYywg
Jm5ld0V4ZWMuZHluYW1pY0dsb2JhbE9iamVjdCgpLT5yZWdpc3RlckZpbGVTdGFjaygpLCBzY29w
ZUNoYWluLm5vZGUoKSwgJmV4Y2VwdGlvbik7CisgICAgCisgICAgaWYgKGV4Y2VwdGlvbikgewog
ICAgICAgICBleGVjLT5zZXRFeGNlcHRpb24odmFsdWUpOwogICAgICAgICByZXR1cm4gdmFsdWU7
CiAgICAgfQotCisgICAgCiAgICAgcmV0dXJuIHZhbHVlID8gdmFsdWUgOiBqc1VuZGVmaW5lZCgp
OwogfQogCi1KU1ZhbHVlKiBnbG9iYWxGdW5jRXZhbChFeGVjU3RhdGUqIGV4ZWMsIFByb3RvdHlw
ZVJlZmxleGl2ZUZ1bmN0aW9uKiBmdW5jdGlvbiwgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExp
c3QmIGFyZ3MpCi17Ci0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHRoaXNPYmot
PmlzR2xvYmFsT2JqZWN0KCkgPyBzdGF0aWNfY2FzdDxKU0dsb2JhbE9iamVjdCo+KHRoaXNPYmop
IDogMDsKLQotICAgIGlmICghZ2xvYmFsT2JqZWN0IHx8IGdsb2JhbE9iamVjdC0+ZXZhbEZ1bmN0
aW9uKCkgIT0gZnVuY3Rpb24pCi0gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIEV2YWxF
cnJvciwgIlRoZSBcInRoaXNcIiB2YWx1ZSBwYXNzZWQgdG8gZXZhbCBtdXN0IGJlIHRoZSBnbG9i
YWwgb2JqZWN0IGZyb20gd2hpY2ggZXZhbCBvcmlnaW5hdGVkIik7Ci0KLSAgICBTY29wZUNoYWlu
IHNjb3BlQ2hhaW4oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gZXZhbChleGVjLCBzY29wZUNo
YWluLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBhcmdzKTsKLX0K
LQogSlNWYWx1ZSogZ2xvYmFsRnVuY1BhcnNlSW50KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
LCBjb25zdCBMaXN0JiBhcmdzKQogewogICAgIHJldHVybiBqc051bWJlcihwYXJzZUludChhcmdz
WzBdLT50b1N0cmluZyhleGVjKSwgYXJnc1sxXS0+dG9JbnQzMihleGVjKSkpOwpJbmRleDoga2pz
L2Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL2Z1bmN0aW9uLmgJKHJldmlzaW9uIDMxOTgw
KQorKysga2pzL2Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2Nyw4ICsxNjcsNiBAQCBu
YW1lc3BhY2UgS0pTIHsKICAgICBKU1ZhbHVlKiBnbG9iYWxGdW5jS0pTUHJpbnQoRXhlY1N0YXRl
KiwgSlNPYmplY3QqLCBjb25zdCBMaXN0Jik7CiAjZW5kaWYKIAotICAgIEpTVmFsdWUqIGV2YWwo
RXhlY1N0YXRlKiwgY29uc3QgU2NvcGVDaGFpbiYsIEpTVmFyaWFibGVPYmplY3QqLCBKU0dsb2Jh
bE9iamVjdCosIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0JiBhcmdzKTsKLQogICAgIHN0
YXRpYyBjb25zdCBkb3VibGUgbWFudGlzc2FPdmVyZmxvd0xvd2VyQm91bmQgPSA5MDA3MTk5MjU0
NzQwOTkyLjA7CiAgICAgZG91YmxlIHBhcnNlSW50T3ZlcmZsb3coY29uc3QgY2hhciosIGludCBs
ZW5ndGgsIGludCByYWRpeCk7CiAKSW5kZXg6IGtqcy9ub2Rlcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
a2pzL25vZGVzLmNwcAkocmV2aXNpb24gMzE5ODApCisrKyBranMvbm9kZXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjY0LDcgKzEyNjQsNiBAQCBpbmxpbmUgSlNWYWx1ZSogRXhwcmVzc2lvbk5v
ZGU6OnJlc29sdmVBCiAgICAgICAgICAgICBpZiAoY2FsbGVyVHlwZSA9PSBFdmFsT3BlcmF0b3Ip
IHsKICAgICAgICAgICAgICAgICBpZiAoYmFzZSA9PSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCkgJiYgZnVuYyA9PSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmV2YWxGdW5jdGlvbigp
KSB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZXZhbChleGVjLCBleGVjLT5zY29wZUNoYWluKCksIGV4ZWMtPnZh
cmlhYmxlT2JqZWN0KCksIGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSwgZXhlYy0+dGhpc1Zh
bHVlKCksIGFyZ0xpc3QpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIHJldHVybiBmdW5jLT5jYWxsKGV4ZWMsIHRoaXNPYmosIGFyZ0xpc3QpOwpAQCAtMTI3
NSw2ICsxMjc0LDE0IEBAIGlubGluZSBKU1ZhbHVlKiBFeHByZXNzaW9uTm9kZTo6cmVzb2x2ZUEK
ICAgICByZXR1cm4gdGhyb3dVbmRlZmluZWRWYXJpYWJsZUVycm9yKGV4ZWMsIGlkZW50KTsKIH0K
IAorUmVnaXN0ZXJJRCogRXZhbEZ1bmN0aW9uQ2FsbE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0
b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQoreworICAgIFJlZlB0cjxSZWdpc3RlcklE
PiByMCA9IGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KTsKKyAgICBSZWdpc3RlcklEKiBy
MSA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKyAgICBnZW5lcmF0b3IuZW1pdFJlc29sdmVC
YXNlQW5kUHJvcGVydHkocjAuZ2V0KCksIHIxLCBDb21tb25JZGVudGlmaWVyczo6c2hhcmVkKCkt
PmV2YWwpOworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEV2YWwoZ2VuZXJhdG9yLmZpbmFsRGVz
dGluYXRpb24oZHN0LCByMC5nZXQoKSksIHIxLCByMC5nZXQoKSwgbV9hcmdzLmdldCgpKTsKK30K
Kwogdm9pZCBFdmFsRnVuY3Rpb25DYWxsTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFjY2VzcyhFeGVj
U3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFj
ayYgbm9kZVN0YWNrKQogewogICAgIG5vZGVTdGFjay5hcHBlbmQobV9hcmdzLmdldCgpKTsKQEAg
LTU1OTksNiArNTYwNiwxNSBAQCBFdmFsTm9kZTo6fkV2YWxOb2RlKCkKIHsKIH0KIAorUmVnaXN0
ZXJJRCogRXZhbE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0
ZXJJRCopCit7CisgICAgUmVnaXN0ZXJJRCogcjAgPSBzdGF0ZW1lbnRMaXN0RW1pdENvZGUobV9j
aGlsZHJlbiwgZ2VuZXJhdG9yKTsKKyAgICBpZiAoIXIwKQorICAgICAgICByMCA9IGdlbmVyYXRv
ci5lbWl0TG9hZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGpzVW5kZWZpbmVkKCkpOworICAg
IGdlbmVyYXRvci5lbWl0RW5kKHIwKTsKKyAgICByZXR1cm4gMDsKK30KKwogdm9pZCBFdmFsTm9k
ZTo6Z2VuZXJhdGVDb2RlKFNjb3BlQ2hhaW5Ob2RlKiBzYykKIHsKICAgICBTY29wZUNoYWluIHNj
b3BlQ2hhaW4oc2MpOwpAQCAtNTYwNyw3ICs1NjIzLDEwIEBAIHZvaWQgRXZhbE5vZGU6OmdlbmVy
YXRlQ29kZShTY29wZUNoYWluTm8KICAgICAKICAgICBtX2NvZGUuc2V0KG5ldyBQcm9ncmFtQ29k
ZUJsb2NrKHVzZXNFdmFsKCksIG5lZWRzQ2xvc3VyZSgpLCBnbG9iYWxPYmplY3QpKTsKICAgICAK
LSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBDb2RlR2VuZXJhdG9yIGdlbmVyYXRvcih0
aGlzLCBzY29wZUNoYWluLCBuZXcgU3ltYm9sVGFibGUoKSwgbV9jb2RlLmdldCgpKTsKKyAgICBn
ZW5lcmF0b3IuZ2VuZXJhdGUoKTsKKworICAgIG1fY2hpbGRyZW4uc2hyaW5rQ2FwYWNpdHkoMCk7
CiB9CiAKIEV2YWxOb2RlKiBFdmFsTm9kZTo6Y3JlYXRlKFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJl
biwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ssIGJvb2wgdXNl
c0V2YWwsIGJvb2wgbmVlZHNDbG9zdXJlKQpJbmRleDoga2pzL25vZGVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0ga2pzL25vZGVzLmgJKHJldmlzaW9uIDMxOTgwKQorKysga2pzL25vZGVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTc5OCw2ICs3OTgsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgewogICAg
ICAgICB9CiAKKyAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJh
dG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZv
aWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYs
IGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7CiAgICAgICAg
IHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAg
ICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEtKU19GQVNU
X0NBTEw7CkBAIC0yOTkwLDYgKzI5OTEsNyBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICAgICAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgcHJvY2Vzc0RlY2xhcmF0aW9ucyhFeGVjU3RhdGUqKSBLSlNfRkFT
VF9DQUxMOwogICAgICAgICB2b2lkIGdlbmVyYXRlQ29kZShTY29wZUNoYWluTm9kZSopIEtKU19G
QVNUX0NBTEw7CisgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVy
YXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKIAogICAgICAgICBPd25QdHI8
UHJvZ3JhbUNvZGVCbG9jaz4gbV9jb2RlOwogICAgIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>20614</attachid>
            <date>2008-04-16 23:58:33 -0700</date>
            <delta_ts>2008-04-17 00:08:30 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch-eval.txt</filename>
            <type>text/plain</type>
            <size>18824</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFZNL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVk0vQ29kZUJsb2NrLmNwcAko
cmV2aXNpb24gMzE5ODApCisrKyBWTS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MzAsNiArNDMwLDE1IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYywgY28K
ICAgICAgICAgICAgIHByaW50ZigiWyU0ZF0gY2FsbFx0XHQlcywgJXMsICVzLCAlZCwgJWRcbiIs
IGxvY2F0aW9uLCByZWdpc3Rlck5hbWUocjApLmNfc3RyKCksIHJlZ2lzdGVyTmFtZShyMSkuY19z
dHIoKSwgcmVnaXN0ZXJOYW1lKHIyKS5jX3N0cigpLCB0ZW1wQ291bnQsIGFyZ0NvdW50KTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZXZhbDogeworICAg
ICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEg
PSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMiA9ICgrK2l0KS0+dS5vcGVy
YW5kOworICAgICAgICAgICAgaW50IHRlbXBDb3VudCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAg
ICAgICAgICAgaW50IGFyZ0NvdW50ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBw
cmludGYoIlslNGRdIGV2YWxcdFx0JXMsICVzLCAlcywgJWQsICVkXG4iLCBsb2NhdGlvbiwgcmVn
aXN0ZXJOYW1lKHIwKS5jX3N0cigpLCByZWdpc3Rlck5hbWUocjEpLmNfc3RyKCksIHJlZ2lzdGVy
TmFtZShyMikuY19zdHIoKSwgdGVtcENvdW50LCBhcmdDb3VudCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQogICAgICAgICBjYXNlIG9wX3JldDogewogICAgICAgICAgICAgaW50IHIw
ID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBwcmludGYoIlslNGRdIHJldFx0XHQl
c1xuIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShyMCkuY19zdHIoKSk7CkluZGV4OiBWTS9Db2Rl
R2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBWTS9Db2RlR2VuZXJhdG9yLmNwcAkocmV2aXNp
b24gMzE5ODApCisrKyBWTS9Db2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYw
LDYgKzE2MCw3IEBAIENvZGVHZW5lcmF0b3I6OkNvZGVHZW5lcmF0b3IoUHJvZ3JhbU5vZGUKICAg
ICAsIG1fc2NvcGVOb2RlKHByb2dyYW1Ob2RlKQogICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2Nr
KQogICAgICwgbV9zY29wZURlcHRoKDApCisgICAgLCBtX2lzRXZhbENvZGUoZmFsc2UpCiAgICAg
LCBtX25leHRWYXIoLTEpCiAgICAgLCBtX3Byb3BlcnR5TmFtZXMoQ29tbW9uSWRlbnRpZmllcnM6
OnNoYXJlZCgpKQogCkBAIC0yMDEsNiArMjAyLDcgQEAgQ29kZUdlbmVyYXRvcjo6Q29kZUdlbmVy
YXRvcihGdW5jdGlvbkJvZAogICAgICwgbV9zY29wZU5vZGUoZnVuY3Rpb25Cb2R5KQogICAgICwg
bV9jb2RlQmxvY2soY29kZUJsb2NrKQogICAgICwgbV9zY29wZURlcHRoKDApCisgICAgLCBtX2lz
RXZhbENvZGUoZmFsc2UpCiAgICAgLCBtX25leHRWYXIoLTEpCiAgICAgLCBtX3Byb3BlcnR5TmFt
ZXMoQ29tbW9uSWRlbnRpZmllcnM6OnNoYXJlZCgpKQogewpAQCAtMjMxLDYgKzIzMywxOSBAQCBD
b2RlR2VuZXJhdG9yOjpDb2RlR2VuZXJhdG9yKEZ1bmN0aW9uQm9kCiAgICAgfQogfQogCitDb2Rl
R2VuZXJhdG9yOjpDb2RlR2VuZXJhdG9yKEV2YWxOb2RlKiBldmFsTm9kZSwgY29uc3QgU2NvcGVD
aGFpbiYgc2NvcGVDaGFpbiwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaykKKyAgICA6IG1fc2NvcGVDaGFpbigmc2NvcGVDaGFpbikKKyAgICAsIG1fc3ltYm9s
VGFibGUoc3ltYm9sVGFibGUpCisgICAgLCBtX3Njb3BlTm9kZShldmFsTm9kZSkKKyAgICAsIG1f
Y29kZUJsb2NrKGNvZGVCbG9jaykKKyAgICAsIG1fc2NvcGVEZXB0aCgwKQorICAgICwgbV9pc0V2
YWxDb2RlKHRydWUpCisgICAgLCBtX25leHRWYXIoLTEpCisgICAgLCBtX3Byb3BlcnR5TmFtZXMo
Q29tbW9uSWRlbnRpZmllcnM6OnNoYXJlZCgpKQoreworICAgIGFkZFZhcihtX3Byb3BlcnR5TmFt
ZXMtPnRoaXNJZGVudGlmaWVyKTsKK30KKwogdm9pZCBDb2RlR2VuZXJhdG9yOjphZGRQYXJhbWV0
ZXIoY29uc3QgSWRlbnRpZmllciYgaWRlbnQpCiB7CiAgICAgLy8gUGFyYW1ldGVycyBvdmVyd3Jp
dGUgdmFyIGRlY2xhcmF0aW9ucywgYnV0IG5vdCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMsCkBAIC03
NjQsNiArNzc5LDE4IEBAIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXROZXdGdW5jdGkK
IAogUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdENhbGwoUmVnaXN0ZXJJRCogcjAsIFJl
Z2lzdGVySUQqIHIxLCBSZWdpc3RlcklEKiByMiwgQXJndW1lbnRzTm9kZSogYXJndW1lbnRzTm9k
ZSkKIHsKKyAgICByZXR1cm4gZW1pdENhbGwob3BfY2FsbCwgcjAsIHIxLCByMiwgYXJndW1lbnRz
Tm9kZSk7Cit9CisKK1JlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXRFdmFsKFJlZ2lzdGVy
SUQqIHIwLCBSZWdpc3RlcklEKiByMSwgUmVnaXN0ZXJJRCogcjIsIEFyZ3VtZW50c05vZGUqIGFy
Z3VtZW50c05vZGUpCit7CisgICAgcmV0dXJuIGVtaXRDYWxsKG9wX2V2YWwsIHIwLCByMSwgcjIs
IGFyZ3VtZW50c05vZGUpOworfQorCitSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0Q2Fs
bChPcGNvZGVJRCBvcGNvZGVJRCwgUmVnaXN0ZXJJRCogcjAsIFJlZ2lzdGVySUQqIHIxLCBSZWdp
c3RlcklEKiByMiwgQXJndW1lbnRzTm9kZSogYXJndW1lbnRzTm9kZSkKK3sKKyAgICBBU1NFUlQo
b3Bjb2RlSUQgPT0gb3BfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF9ldmFsKTsKKwogICAgIFJlZlB0
cjxSZWdpc3RlcklEPiByZWYxID0gcjE7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJlZjIgPSBy
MjsKICAgICAKQEAgLTc4MCw3ICs4MDcsNyBAQCBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjpl
bWl0Q2FsbChSZWdpCiAgICAgICAgIGVtaXROb2RlKGFyZ3YubGFzdCgpLmdldCgpLCBuKTsKICAg
ICB9CiAKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobWFjaGluZSgpLmdldE9wY29kZShvcF9j
YWxsKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1hY2hpbmUoKS5nZXRPcGNvZGUob3Bj
b2RlSUQpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocjAtPmluZGV4KCkpOwogICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChyMS0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKHIyID8gcjItPmluZGV4KCkgOiBtaXNzaW5nU3ltYm9sTWFya2VyKCkpOyAvLyBXZSBlbmNv
ZGUgdGhlICJ0aGlzIiB2YWx1ZSBpbiB0aGUgaW5zdHJ1Y3Rpb24gc3RyZWFtLCB0byBhdm9pZCBh
biBleHBsaWNpdCBpbnN0cnVjdGlvbiBmb3IgY29weWluZyBvciBsb2FkaW5nIGl0LgpJbmRleDog
Vk0vQ29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFZNL0NvZGVHZW5lcmF0b3IuaAkocmV2
aXNpb24gMzE5ODApCisrKyBWTS9Db2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTYz
LDYgKzYzLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIAogICAgICAgICBDb2RlR2VuZXJh
dG9yKFByb2dyYW1Ob2RlKiwgY29uc3QgU2NvcGVDaGFpbiYsIFN5bWJvbFRhYmxlKiwgQ29kZUJs
b2NrKiwgVmFyU3RhY2smLCBGdW5jdGlvblN0YWNrJik7CiAgICAgICAgIENvZGVHZW5lcmF0b3Io
RnVuY3Rpb25Cb2R5Tm9kZSosIGNvbnN0IFNjb3BlQ2hhaW4mLCBTeW1ib2xUYWJsZSosIENvZGVC
bG9jayosIFZhclN0YWNrJiwgRnVuY3Rpb25TdGFjayYsIFZlY3RvcjxJZGVudGlmaWVyPiYgcGFy
YW1ldGVycyk7CisgICAgICAgIENvZGVHZW5lcmF0b3IoRXZhbE5vZGUqLCBjb25zdCBTY29wZUNo
YWluJiwgU3ltYm9sVGFibGUqLCBDb2RlQmxvY2sqKTsKIAogICAgICAgICBjb25zdCBDb21tb25J
ZGVudGlmaWVycyYgcHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0dXJuICptX3Byb3BlcnR5TmFt
ZXM7IH0KIApAQCAtMTg3LDYgKzE4OCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICBSZWdp
c3RlcklEKiBlbWl0UHV0UHJvcEluZGV4KFJlZ2lzdGVySUQqIGJhc2UsIHVuc2lnbmVkIGluZGV4
LCBSZWdpc3RlcklEKiB2YWwpOwogCiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRDYWxsKFJlZ2lz
dGVySUQqLCBSZWdpc3RlcklEKiwgUmVnaXN0ZXJJRCosIEFyZ3VtZW50c05vZGUqKTsKKyAgICAg
ICAgUmVnaXN0ZXJJRCogZW1pdEV2YWwoUmVnaXN0ZXJJRCosIFJlZ2lzdGVySUQqLCBSZWdpc3Rl
cklEKiwgQXJndW1lbnRzTm9kZSopOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0UmV0dXJuKFJl
Z2lzdGVySUQqKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEVuZChSZWdpc3RlcklEKik7CiAK
QEAgLTIyNSw2ICsyMjcsOCBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICAgICAgICB0eXBlZGVmIEhh
c2hNYXA8SlNWYWx1ZSosIHVuc2lnbmVkLCBEZWZhdWx0SGFzaDxKU1ZhbHVlKj46Okhhc2gsIEpT
VmFsdWVIYXNoVHJhaXRzPiBKU1ZhbHVlTWFwOwogICAgICAgICAKKyAgICAgICAgUmVnaXN0ZXJJ
RCogZW1pdENhbGwoT3Bjb2RlSUQsIFJlZ2lzdGVySUQqLCBSZWdpc3RlcklEKiwgUmVnaXN0ZXJJ
RCosIEFyZ3VtZW50c05vZGUqKTsKKwogICAgICAgICAvLyBNYXBzIGEgcmVnaXN0ZXIgaW5kZXgg
aW4gdGhlIHN5bWJvbCB0YWJsZSB0byBhIFJlZ2lzdGVySUQgaW5kZXggaW4gbV9sb2NhbHMuCiAg
ICAgICAgIGludCBsb2NhbHNJbmRleChpbnQgcmVnaXN0ZXJJbmRleCkgeyByZXR1cm4gLXJlZ2lz
dGVySW5kZXggLSAxOyB9CiAgICAgICAgIApAQCAtMjUxLDcgKzI1NSw3IEBAIG5hbWVzcGFjZSBL
SlMgewogICAgICAgICBTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUoKSB7IHJldHVybiAqbV9zeW1i
b2xUYWJsZTsgfQogICAgICAgICBWZWN0b3I8SGFuZGxlckluZm8+JiBleGNlcHRpb25IYW5kbGVy
cygpIHsgcmV0dXJuIG1fY29kZUJsb2NrLT5leGNlcHRpb25IYW5kbGVyczsgfQogICAgICAgICAK
LSAgICAgICAgYm9vbCBzaG91bGRPcHRpbWl6ZUxvY2FscygpIHsgcmV0dXJuICFtX3Njb3BlRGVw
dGg7IH0KKyAgICAgICAgYm9vbCBzaG91bGRPcHRpbWl6ZUxvY2FscygpIHsgcmV0dXJuICFtX2lz
RXZhbENvZGUgJiYgIW1fc2NvcGVEZXB0aDsgfQogCiAgICAgICAgIGNvbnN0IFNjb3BlQ2hhaW4q
IG1fc2NvcGVDaGFpbjsKICAgICAgICAgU3ltYm9sVGFibGUqIG1fc3ltYm9sVGFibGU7CkBAIC0y
NjUsNiArMjY5LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIFZlY3RvcjxSZWdpc3RlcklE
LCAxMjg+IG1fdGVtcG9yYXJpZXM7CiAgICAgICAgIFZlY3RvcjxMYWJlbElELCAxMjg+IG1fbGFi
ZWxzOwogICAgICAgICBpbnQgbV9zY29wZURlcHRoOworICAgICAgICBib29sIG1faXNFdmFsQ29k
ZTsKICAgICAgICAgCiAgICAgICAgIFZlY3RvcjxKdW1wQ29udGV4dD4gbV9qdW1wQ29udGV4dFN0
YWNrOwogCkluZGV4OiBWTS9NYWNoaW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBWTS9NYWNoaW5lLmNw
cAkocmV2aXNpb24gMzE5ODApCisrKyBWTS9NYWNoaW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDk1LDggKzQ5NSwzNCBAQCBzdGF0aWMgTkVWRVJfSU5MSU5FIGJvb2wgaXNOb3RPYmplY3QoRXhl
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3N0YXRpYyBORVZFUl9JTkxJTkUgSlNWYWx1ZSogZXZh
bChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBTY29wZUNoYWluTm9kZSogc2Nv
cGVDaGFpbiwgUmVnaXN0ZXJGaWxlKiByZWdpc3RlckZpbGUsIFJlZ2lzdGVyKiByLCBpbnQgYXJn
diwgaW50IGFyZ2MsIEpTVmFsdWUqJiBleGNlcHRpb25WYWx1ZSkKK3sKKyAgICBKU1ZhbHVlKiB4
ID0gYXJnYyA+PSAyID8gclthcmd2ICsgMV0udS5qc1ZhbHVlIDoganNVbmRlZmluZWQoKTsKKyAg
ICAKKyAgICBVU3RyaW5nIHMgPSB4LT50b1N0cmluZyhleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpIHsKKyAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSBleGVjLT5leGNlcHRpb24o
KTsKKyAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQorCisgICAgaW50IHNvdXJjZUlkOworICAgIGludCBlcnJMaW5lOworICAgIFVTdHJpbmcg
ZXJyTXNnOworICAgIFJlZlB0cjxFdmFsTm9kZT4gZXZhbE5vZGUgPSBwYXJzZXIoKS5wYXJzZTxF
dmFsTm9kZT4oVVN0cmluZygpLCAwLCBzLmRhdGEoKSwgcy5zaXplKCksICZzb3VyY2VJZCwgJmVy
ckxpbmUsICZlcnJNc2cpOworICAgIAorICAgIGlmICghZXZhbE5vZGUpIHsKKyAgICAgICAgZXhj
ZXB0aW9uVmFsdWUgPSB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yLCBlcnJNc2csIGVyckxp
bmUsIHNvdXJjZUlkLCBOVUxMKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgRXZh
bEV4ZWNTdGF0ZSBuZXdFeGVjKGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSwgdGhpc09iaiwg
ZXZhbE5vZGUuZ2V0KCksIGV4ZWMsIGV4ZWMtPnNjb3BlQ2hhaW4oKSwgZXhlYy0+ZHluYW1pY0ds
b2JhbE9iamVjdCgpKTsKKyAgICByZXR1cm4gbWFjaGluZSgpLmV4ZWN1dGUoZXZhbE5vZGUuZ2V0
KCksICZuZXdFeGVjLCB0aGlzT2JqLCByZWdpc3RlckZpbGUsIHIgLSAoKnJlZ2lzdGVyRmlsZS0+
YmFzZVBvaW50ZXIoKSkgKyBhcmd2ICsgYXJnYywgc2NvcGVDaGFpbiwgJmV4Y2VwdGlvblZhbHVl
KTsKK30KKwogI2lmIEhBVkUoQ09NUFVURURfR09UTykKIHN0YXRpYyB2b2lkKiB0aHJvd1Rhcmdl
dDsKK3N0YXRpYyB2b2lkKiBjYWxsVGFyZ2V0OwogI2VuZGlmCiAKIEpTVmFsdWUqIE1hY2hpbmU6
OmV4ZWN1dGUoUHJvZ3JhbU5vZGUqIHByb2dyYW1Ob2RlLCBFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiB0aGlzT2JqLCBSZWdpc3RlckZpbGVTdGFjayogcmVnaXN0ZXJGaWxlU3RhY2ssIFNjb3Bl
Q2hhaW4qIHNjb3BlQ2hhaW4sIEpTVmFsdWUqKiBleGNlcHRpb24pCkBAIC01NTIsNiArNTc4LDQx
IEBAIEpTVmFsdWUqIE1hY2hpbmU6OmV4ZWN1dGUoRnVuY3Rpb25Cb2R5Tm8KICAgICByZXR1cm4g
cmVzdWx0OwogfQogCitKU1ZhbHVlKiBNYWNoaW5lOjpleGVjdXRlKEV2YWxOb2RlKiBldmFsTm9k
ZSwgRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgUmVnaXN0ZXJGaWxlKiByZWdp
c3RlckZpbGUsIGludCByZWdpc3Rlck9mZnNldCwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4s
IEpTVmFsdWUqKiBleGNlcHRpb24pCit7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSAmZXZh
bE5vZGUtPmNvZGUoc2NvcGVDaGFpbik7CisKKyAgICBzaXplX3Qgb2xkU2l6ZSA9IHJlZ2lzdGVy
RmlsZS0+c2l6ZSgpOworICAgIHNpemVfdCBuZXdTaXplID0gcmVnaXN0ZXJPZmZzZXQgKyBjb2Rl
QmxvY2stPm51bVZhcnMgKyBjb2RlQmxvY2stPm51bVRlbXBvcmFyaWVzOworICAgIHJlZ2lzdGVy
RmlsZS0+Z3JvdyhuZXdTaXplKTsKKyAgICBSZWdpc3RlciogciA9ICgqcmVnaXN0ZXJGaWxlLT5i
YXNlUG9pbnRlcigpKSArIHJlZ2lzdGVyT2Zmc2V0ICsgY29kZUJsb2NrLT5udW1WYXJzOworICAg
IAorICAgIHJbUHJvZ3JhbUNvZGVUaGlzUmVnaXN0ZXJdLnUuanNWYWx1ZSA9IHRoaXNPYmo7Cisg
ICAgSlNWYWx1ZSogcmVzdWx0ID0gcHJpdmF0ZUV4ZWN1dGUoTm9ybWFsLCBleGVjLCByZWdpc3Rl
ckZpbGUsIHIsIHNjb3BlQ2hhaW4sIGNvZGVCbG9jaywgZXhjZXB0aW9uKTsKKyAgICAKKyAgICBy
ZWdpc3RlckZpbGUtPnNocmluayhvbGRTaXplKTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitKU1ZhbHVlKiBNYWNoaW5lOjpleGVjdXRlKEV2YWxOb2RlKiBldmFsTm9kZSwgRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgUmVnaXN0ZXJGaWxlU3RhY2sqIHJlZ2lzdGVy
RmlsZVN0YWNrLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwgSlNWYWx1ZSoqIGV4Y2VwdGlv
bikKK3sKKyAgICBSZWdpc3RlckZpbGUqIHJlZ2lzdGVyRmlsZSA9IHJlZ2lzdGVyRmlsZVN0YWNr
LT5jdXJyZW50KCk7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSAmZXZhbE5vZGUtPmNvZGUo
c2NvcGVDaGFpbik7CisKKyAgICBzaXplX3Qgb2xkU2l6ZSA9IHJlZ2lzdGVyRmlsZS0+c2l6ZSgp
OworICAgIHNpemVfdCBuZXdTaXplID0gb2xkU2l6ZSArIGNvZGVCbG9jay0+bnVtVmFycyArIGNv
ZGVCbG9jay0+bnVtVGVtcG9yYXJpZXM7CisgICAgcmVnaXN0ZXJGaWxlLT5ncm93KG5ld1NpemUp
OworICAgIFJlZ2lzdGVyKiByID0gKCpyZWdpc3RlckZpbGUtPmJhc2VQb2ludGVyKCkpICsgb2xk
U2l6ZSArIGNvZGVCbG9jay0+bnVtVmFyczsKKyAgICAKKyAgICByW1Byb2dyYW1Db2RlVGhpc1Jl
Z2lzdGVyXS51LmpzVmFsdWUgPSB0aGlzT2JqOworICAgIEpTVmFsdWUqIHJlc3VsdCA9IHByaXZh
dGVFeGVjdXRlKE5vcm1hbCwgZXhlYywgcmVnaXN0ZXJGaWxlLCByLCBzY29wZUNoYWluLCBjb2Rl
QmxvY2ssIGV4Y2VwdGlvbik7CisgICAgCisgICAgcmVnaXN0ZXJGaWxlLT5zaHJpbmsob2xkU2l6
ZSk7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogSlNWYWx1ZSogTWFjaGluZTo6cHJp
dmF0ZUV4ZWN1dGUoRXhlY3V0aW9uRmxhZyBmbGFnLCBFeGVjU3RhdGUqIGV4ZWMsIFJlZ2lzdGVy
RmlsZSogcmVnaXN0ZXJGaWxlLCBSZWdpc3RlciogciwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hh
aW4sIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlKiogZXhjZXB0aW9uKQogewogICAgIC8v
IE9uZS10aW1lIGluaXRpYWxpemF0aW9uIG9mIG91ciBhZGRyZXNzIHRhYmxlcy4gV2UgaGF2ZSB0
byBwdXQgdGhpcyBjb2RlCkBAIC01NjcsNiArNjI4LDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJp
dmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICAgICAgI3VuZGVmIEFERF9PUENPREUKICAgICAg
ICAgICAgIEFTU0VSVChtX29wY29kZUlEVGFibGUuc2l6ZSgpID09IG51bU9wY29kZUlEcyk7CiAg
ICAgICAgICAgICB0aHJvd1RhcmdldCA9ICYmZ2NjX2RlcGVuZGVuY3lfaGFjazsKKyAgICAgICAg
ICAgIGNhbGxUYXJnZXQgPSAmJm9wX2NhbGw7CiAgICAgICAgICNlbmRpZiAvLyBIQVZFKENPTVBV
VEVEX0dPVE8pCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KQEAgLTExMDAsNiArMTE2MiwzMyBA
QCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICsrdlBD
OwogICAgICAgICBORVhUX09QQ09ERTsKICAgICB9CisgICAgQkVHSU5fT1BDT0RFKG9wX2V2YWwp
IHsKKyAgICAgICAgaW50IHIwID0gKCsrdlBDKS0+dS5vcGVyYW5kOworICAgICAgICBpbnQgcjEg
PSAoKyt2UEMpLT51Lm9wZXJhbmQ7CisgICAgICAgIGludCByMiA9ICgrK3ZQQyktPnUub3BlcmFu
ZDsKKyAgICAgICAgaW50IGFyZ3YgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CisgICAgICAgIGludCBh
cmdjID0gKCsrdlBDKS0+dS5vcGVyYW5kOworCisgICAgICAgIEpTVmFsdWUqIHYgPSByW3IxXS51
LmpzVmFsdWU7CisgICAgICAgIEpTVmFsdWUqIGJhc2UgPSByW3IyXS51LmpzVmFsdWU7CisgICAg
ICAgIAorICAgICAgICBpZiAoYmFzZSA9PSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkgJiYg
diA9PSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmV2YWxGdW5jdGlvbigpKSB7CisgICAg
ICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSByIC0gKCpyZWdpc3RlckJhc2UpOworCisgICAg
ICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBldmFsKGV4ZWMsIHN0YXRpY19jYXN0PEpTT2JqZWN0
Kj4oYmFzZSksIHNjb3BlQ2hhaW4sIHJlZ2lzdGVyRmlsZSwgciwgYXJndiwgYXJnYywgZXhjZXB0
aW9uVmFsdWUpOworICAgICAgICAgICAgLy8gRklYTUU6IENoZWNraW5nIGZvciBhbiBleGNlcHRp
b24gaGVyZSBzZWVtcyB0byBjYXVzZSBhIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24uCisgICAgICAg
ICAgICBBU1NFUlQoIWV4Y2VwdGlvblZhbHVlKTsKKworICAgICAgICAgICAgciA9ICgqcmVnaXN0
ZXJCYXNlKSArIHJlZ2lzdGVyT2Zmc2V0OworICAgICAgICAgICAgcltyMF0udS5qc1ZhbHVlID0g
cmVzdWx0OworICAgICAgICAgICAgCisgICAgICAgICAgICArK3ZQQzsKKyAgICAgICAgICAgIE5F
WFRfT1BDT0RFOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2UEMgLT0gNTsKKyAgICAg
ICAgZ290byAqY2FsbFRhcmdldDsKKyAgICB9CiAgICAgQkVHSU5fT1BDT0RFKG9wX2NhbGwpIHsK
ICAgICAgICAgaW50IHIwID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogICAgICAgICBpbnQgcjEgPSAo
Kyt2UEMpLT51Lm9wZXJhbmQ7CkBAIC0xMTM0LDggKzEyMjMsNiBAQCBKU1ZhbHVlKiBNYWNoaW5l
Ojpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlw
ZU5hdGl2ZSkgewogICAgICAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gciAtICgqcmVnaXN0
ZXJCYXNlKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gRklYTUU6IFN1YnN0aXR1dGUg
bGV4aWNhbCBnbG9iYWwgb2JqZWN0IGZvciBudWxsLgotCiAgICAgICAgICAgICByW2FyZ3ZdLnUu
anNWYWx1ZSA9IHIyID09IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSA/IGpzTnVsbCgpIDogKHJbcjJd
LnUuanNWYWx1ZSktPnRvT2JqZWN0KGV4ZWMpOyAvLyAidGhpcyIgdmFsdWUKICAgICAgICAgICAg
IEpTT2JqZWN0KiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QqPihyW2FyZ3ZdLnUuanNW
YWx1ZSk7CiAKSW5kZXg6IFZNL01hY2hpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBWTS9NYWNoaW5lLmgJ
KHJldmlzaW9uIDMxOTgwKQorKysgVk0vTWFjaGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04MCw2
ICs4MCw4IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICAKICAgICAgICAgSlNWYWx1ZSogZXhl
Y3V0ZShQcm9ncmFtTm9kZSosIEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiB0aGlzT2JqLCBSZWdpc3Rl
ckZpbGVTdGFjayosIFNjb3BlQ2hhaW4qLCBKU1ZhbHVlKiogZXhjZXB0aW9uKTsKICAgICAgICAg
SlNWYWx1ZSogZXhlY3V0ZShGdW5jdGlvbkJvZHlOb2RlKiwgY29uc3QgTGlzdCYgYXJncywgSlNP
YmplY3QqIHRoaXNPYmosIEV4ZWNTdGF0ZSosIFJlZ2lzdGVyRmlsZVN0YWNrKiwgU2NvcGVDaGFp
biosIEpTVmFsdWUqKiBleGNlcHRpb24pOworICAgICAgICBKU1ZhbHVlKiBleGVjdXRlKEV2YWxO
b2RlKiwgRXhlY1N0YXRlKiwgSlNPYmplY3QqIHRoaXNPYmosIFJlZ2lzdGVyRmlsZSosIGludCBy
ZWdpc3Rlck9mZnNldCwgU2NvcGVDaGFpbk5vZGUqLCBKU1ZhbHVlKiogZXhjZXB0aW9uKTsKKyAg
ICAgICAgSlNWYWx1ZSogZXhlY3V0ZShFdmFsTm9kZSosIEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiB0
aGlzT2JqLCBSZWdpc3RlckZpbGVTdGFjayosIFNjb3BlQ2hhaW5Ob2RlKiwgSlNWYWx1ZSoqIGV4
Y2VwdGlvbik7CiAgICAgICAgIAogICAgIHByaXZhdGU6CiAgICAgICAgIHR5cGVkZWYgZW51bSB7
IE5vcm1hbCwgSW5pdGlhbGl6ZUFuZFJldHVybiB9IEV4ZWN1dGlvbkZsYWc7CkluZGV4OiBWTS9P
cGNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBWTS9PcGNvZGUuaAkocmV2aXNpb24gMzE5ODApCisrKyBW
TS9PcGNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtOTUsNiArOTUsNyBAQCBuYW1lc3BhY2UgS0pT
IHsKICAgICAgICAgbWFjcm8ob3BfbmV3X2Z1bmMpIFwKICAgICAgICAgbWFjcm8ob3BfbmV3X2Z1
bmNfZXhwKSBcCiAgICAgICAgIG1hY3JvKG9wX2NhbGwpIFwKKyAgICAgICAgbWFjcm8ob3BfZXZh
bCkgXAogICAgICAgICBtYWNybyhvcF9yZXQpIFwKICAgICAgICAgXAogICAgICAgICBtYWNybyhv
cF9jb25zdHJ1Y3QpIFwKSW5kZXg6IGtqcy9mdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pz
L2Z1bmN0aW9uLmNwcAkocmV2aXNpb24gMzE5ODApCisrKyBranMvZnVuY3Rpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02ODMsNTIgKzY4Myw0MiBAQCBzdGF0aWMgZG91YmxlIHBhcnNlRmxvYXQo
Y29uc3QgVVN0cmluZyYgCiAgICAgcmV0dXJuIHMudG9Eb3VibGUoIHRydWUgLyp0b2xlcmFudCov
LCBmYWxzZSAvKiBOYU4gZm9yIGVtcHR5IHN0cmluZyAqLyApOwogfQogCi1KU1ZhbHVlKiBldmFs
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU2NvcGVDaGFpbiYgc2NvcGVDaGFpbiwgSlNWYXJpYWJs
ZU9iamVjdCogdmFyaWFibGVPYmplY3QsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
T2JqZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0JiBhcmdzKQorSlNWYWx1ZSogZ2xvYmFsRnVuY0V2
YWwoRXhlY1N0YXRlKiBleGVjLCBQcm90b3R5cGVSZWZsZXhpdmVGdW5jdGlvbiogZnVuY3Rpb24s
IEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0JiBhcmdzKQogeworICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSB0aGlzT2JqLT5pc0dsb2JhbE9iamVjdCgpID8gc3RhdGljX2Nh
c3Q8SlNHbG9iYWxPYmplY3QqPih0aGlzT2JqKSA6IDA7CisKKyAgICBpZiAoIWdsb2JhbE9iamVj
dCB8fCBnbG9iYWxPYmplY3QtPmV2YWxGdW5jdGlvbigpICE9IGZ1bmN0aW9uKQorICAgICAgICBy
ZXR1cm4gdGhyb3dFcnJvcihleGVjLCBFdmFsRXJyb3IsICJUaGUgXCJ0aGlzXCIgdmFsdWUgcGFz
c2VkIHRvIGV2YWwgbXVzdCBiZSB0aGUgZ2xvYmFsIG9iamVjdCBmcm9tIHdoaWNoIGV2YWwgb3Jp
Z2luYXRlZCIpOworCisgICAgU2NvcGVDaGFpbiBzY29wZUNoYWluKGdsb2JhbE9iamVjdCk7CisK
ICAgICBKU1ZhbHVlKiB4ID0gYXJnc1swXTsKICAgICBpZiAoIXgtPmlzU3RyaW5nKCkpCiAgICAg
ICAgIHJldHVybiB4OwotCisgICAgCiAgICAgVVN0cmluZyBzID0geC0+dG9TdHJpbmcoZXhlYyk7
Ci0KKyAgICAKICAgICBpbnQgc291cmNlSWQ7CiAgICAgaW50IGVyckxpbmU7CiAgICAgVVN0cmlu
ZyBlcnJNc2c7CiAgICAgUmVmUHRyPEV2YWxOb2RlPiBldmFsTm9kZSA9IHBhcnNlcigpLnBhcnNl
PEV2YWxOb2RlPihVU3RyaW5nKCksIDAsIHMuZGF0YSgpLCBzLnNpemUoKSwgJnNvdXJjZUlkLCAm
ZXJyTGluZSwgJmVyck1zZyk7Ci0KLSAgICBEZWJ1Z2dlciogZGJnID0gZXhlYy0+ZHluYW1pY0ds
b2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpOwotICAgIGlmIChkYmcpIHsKLSAgICAgICAgYm9vbCBj
b250ID0gZGJnLT5zb3VyY2VQYXJzZWQoZXhlYywgc291cmNlSWQsIFVTdHJpbmcoKSwgcywgMCwg
ZXJyTGluZSwgZXJyTXNnKTsKLSAgICAgICAgaWYgKCFjb250KQotICAgICAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotCisgICAgCiAgICAgaWYgKCFldmFsTm9kZSkKICAgICAg
ICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsIGVyck1zZywgZXJyTGluZSwg
c291cmNlSWQsIE5VTEwpOwotCi0gICAgRXZhbEV4ZWNTdGF0ZSBuZXdFeGVjKGdsb2JhbE9iamVj
dCwgdGhpc09iaiwgZXZhbE5vZGUuZ2V0KCksIGV4ZWMsIHNjb3BlQ2hhaW4sIHZhcmlhYmxlT2Jq
ZWN0KTsKLQotICAgIEpTVmFsdWUqIHZhbHVlID0gZXZhbE5vZGUtPmV4ZWN1dGUoJm5ld0V4ZWMp
OwotCi0gICAgaWYgKG5ld0V4ZWMuY29tcGxldGlvblR5cGUoKSA9PSBUaHJvdykgeworICAgIAor
ICAgIEV2YWxFeGVjU3RhdGUgbmV3RXhlYyhnbG9iYWxPYmplY3QsIHRoaXNPYmosIGV2YWxOb2Rl
LmdldCgpLCBleGVjLCBzY29wZUNoYWluLCBnbG9iYWxPYmplY3QpOworICAgIAorICAgIEpTVmFs
dWUqIGV4Y2VwdGlvbiA9IDA7CisgICAgSlNWYWx1ZSogdmFsdWUgPSBtYWNoaW5lKCkuZXhlY3V0
ZShldmFsTm9kZS5nZXQoKSwgJm5ld0V4ZWMsIHRoaXNPYmosICZuZXdFeGVjLmR5bmFtaWNHbG9i
YWxPYmplY3QoKS0+cmVnaXN0ZXJGaWxlU3RhY2soKSwgc2NvcGVDaGFpbi5ub2RlKCksICZleGNl
cHRpb24pOworICAgIAorICAgIGlmIChleGNlcHRpb24pIHsKICAgICAgICAgZXhlYy0+c2V0RXhj
ZXB0aW9uKHZhbHVlKTsKICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgIH0KLQorICAgIAogICAg
IHJldHVybiB2YWx1ZSA/IHZhbHVlIDoganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSogZ2xv
YmFsRnVuY0V2YWwoRXhlY1N0YXRlKiBleGVjLCBQcm90b3R5cGVSZWZsZXhpdmVGdW5jdGlvbiog
ZnVuY3Rpb24sIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0JiBhcmdzKQotewotICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSB0aGlzT2JqLT5pc0dsb2JhbE9iamVjdCgpID8g
c3RhdGljX2Nhc3Q8SlNHbG9iYWxPYmplY3QqPih0aGlzT2JqKSA6IDA7Ci0KLSAgICBpZiAoIWds
b2JhbE9iamVjdCB8fCBnbG9iYWxPYmplY3QtPmV2YWxGdW5jdGlvbigpICE9IGZ1bmN0aW9uKQot
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBFdmFsRXJyb3IsICJUaGUgXCJ0aGlzXCIg
dmFsdWUgcGFzc2VkIHRvIGV2YWwgbXVzdCBiZSB0aGUgZ2xvYmFsIG9iamVjdCBmcm9tIHdoaWNo
IGV2YWwgb3JpZ2luYXRlZCIpOwotCi0gICAgU2NvcGVDaGFpbiBzY29wZUNoYWluKGdsb2JhbE9i
amVjdCk7Ci0gICAgcmV0dXJuIGV2YWwoZXhlYywgc2NvcGVDaGFpbiwgZ2xvYmFsT2JqZWN0LCBn
bG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgYXJncyk7Ci19Ci0KIEpTVmFsdWUqIGdsb2JhbEZ1
bmNQYXJzZUludChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgY29uc3QgTGlzdCYgYXJncykK
IHsKICAgICByZXR1cm4ganNOdW1iZXIocGFyc2VJbnQoYXJnc1swXS0+dG9TdHJpbmcoZXhlYyks
IGFyZ3NbMV0tPnRvSW50MzIoZXhlYykpKTsKSW5kZXg6IGtqcy9mdW5jdGlvbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGtqcy9mdW5jdGlvbi5oCShyZXZpc2lvbiAzMTk4MCkKKysrIGtqcy9mdW5jdGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNjcsOCArMTY3LDYgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAg
SlNWYWx1ZSogZ2xvYmFsRnVuY0tKU1ByaW50KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgY29uc3Qg
TGlzdCYpOwogI2VuZGlmCiAKLSAgICBKU1ZhbHVlKiBldmFsKEV4ZWNTdGF0ZSosIGNvbnN0IFNj
b3BlQ2hhaW4mLCBKU1ZhcmlhYmxlT2JqZWN0KiwgSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCog
dGhpc09iaiwgY29uc3QgTGlzdCYgYXJncyk7Ci0KICAgICBzdGF0aWMgY29uc3QgZG91YmxlIG1h
bnRpc3NhT3ZlcmZsb3dMb3dlckJvdW5kID0gOTAwNzE5OTI1NDc0MDk5Mi4wOwogICAgIGRvdWJs
ZSBwYXJzZUludE92ZXJmbG93KGNvbnN0IGNoYXIqLCBpbnQgbGVuZ3RoLCBpbnQgcmFkaXgpOwog
CkluZGV4OiBranMvbm9kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9ub2Rlcy5jcHAJKHJldmlz
aW9uIDMxOTgwKQorKysga2pzL25vZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI2NCw3ICsx
MjY0LDYgQEAgaW5saW5lIEpTVmFsdWUqIEV4cHJlc3Npb25Ob2RlOjpyZXNvbHZlQQogICAgICAg
ICAgICAgaWYgKGNhbGxlclR5cGUgPT0gRXZhbE9wZXJhdG9yKSB7CiAgICAgICAgICAgICAgICAg
aWYgKGJhc2UgPT0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpICYmIGZ1bmMgPT0gZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5ldmFsRnVuY3Rpb24oKSkgewogICAgICAgICAgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV2
YWwoZXhlYywgZXhlYy0+c2NvcGVDaGFpbigpLCBleGVjLT52YXJpYWJsZU9iamVjdCgpLCBleGVj
LT5keW5hbWljR2xvYmFsT2JqZWN0KCksIGV4ZWMtPnRoaXNWYWx1ZSgpLCBhcmdMaXN0KTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gZnVuYy0+
Y2FsbChleGVjLCB0aGlzT2JqLCBhcmdMaXN0KTsKQEAgLTEyNzUsNiArMTI3NCwxNCBAQCBpbmxp
bmUgSlNWYWx1ZSogRXhwcmVzc2lvbk5vZGU6OnJlc29sdmVBCiAgICAgcmV0dXJuIHRocm93VW5k
ZWZpbmVkVmFyaWFibGVFcnJvcihleGVjLCBpZGVudCk7CiB9CiAKK1JlZ2lzdGVySUQqIEV2YWxG
dW5jdGlvbkNhbGxOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lz
dGVySUQqIGRzdCkKK3sKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcjAgPSBnZW5lcmF0b3IudGVt
cERlc3RpbmF0aW9uKGRzdCk7CisgICAgUmVnaXN0ZXJJRCogcjEgPSBnZW5lcmF0b3IubmV3VGVt
cG9yYXJ5KCk7CisgICAgZ2VuZXJhdG9yLmVtaXRSZXNvbHZlQmFzZUFuZFByb3BlcnR5KHIwLmdl
dCgpLCByMSwgQ29tbW9uSWRlbnRpZmllcnM6OnNoYXJlZCgpLT5ldmFsKTsKKyAgICByZXR1cm4g
Z2VuZXJhdG9yLmVtaXRFdmFsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgcjAuZ2V0
KCkpLCByMSwgcjAuZ2V0KCksIG1fYXJncy5nZXQoKSk7Cit9CisKIHZvaWQgRXZhbEZ1bmN0aW9u
Q2FsbE5vZGU6Om9wdGltaXplVmFyaWFibGVBY2Nlc3MoRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9s
VGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2UmLCBOb2RlU3RhY2smIG5vZGVTdGFjaykKIHsKICAg
ICBub2RlU3RhY2suYXBwZW5kKG1fYXJncy5nZXQoKSk7CkBAIC01NTk5LDYgKzU2MDYsMTUgQEAg
RXZhbE5vZGU6On5FdmFsTm9kZSgpCiB7CiB9CiAKK1JlZ2lzdGVySUQqIEV2YWxOb2RlOjplbWl0
Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqKQoreworICAgIFJlZ2lz
dGVySUQqIHIwID0gc3RhdGVtZW50TGlzdEVtaXRDb2RlKG1fY2hpbGRyZW4sIGdlbmVyYXRvcik7
CisgICAgaWYgKCFyMCkKKyAgICAgICAgcjAgPSBnZW5lcmF0b3IuZW1pdExvYWQoZ2VuZXJhdG9y
Lm5ld1RlbXBvcmFyeSgpLCBqc1VuZGVmaW5lZCgpKTsKKyAgICBnZW5lcmF0b3IuZW1pdEVuZChy
MCk7CisgICAgcmV0dXJuIDA7Cit9CisKIHZvaWQgRXZhbE5vZGU6OmdlbmVyYXRlQ29kZShTY29w
ZUNoYWluTm9kZSogc2MpCiB7CiAgICAgU2NvcGVDaGFpbiBzY29wZUNoYWluKHNjKTsKQEAgLTU2
MDcsNyArNTYyMywxMCBAQCB2b2lkIEV2YWxOb2RlOjpnZW5lcmF0ZUNvZGUoU2NvcGVDaGFpbk5v
CiAgICAgCiAgICAgbV9jb2RlLnNldChuZXcgUHJvZ3JhbUNvZGVCbG9jayh1c2VzRXZhbCgpLCBu
ZWVkc0Nsb3N1cmUoKSwgZ2xvYmFsT2JqZWN0KSk7CiAgICAgCi0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgQ29kZUdlbmVyYXRvciBnZW5lcmF0b3IodGhpcywgc2NvcGVDaGFpbiwgbmV3
IFN5bWJvbFRhYmxlKCksIG1fY29kZS5nZXQoKSk7CisgICAgZ2VuZXJhdG9yLmdlbmVyYXRlKCk7
CisKKyAgICBtX2NoaWxkcmVuLnNocmlua0NhcGFjaXR5KDApOwogfQogCiBFdmFsTm9kZSogRXZh
bE5vZGU6OmNyZWF0ZShTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4sIFZhclN0YWNrKiB2YXJTdGFj
aywgRnVuY3Rpb25TdGFjayogZnVuY1N0YWNrLCBib29sIHVzZXNFdmFsLCBib29sIG5lZWRzQ2xv
c3VyZSkKSW5kZXg6IGtqcy9ub2Rlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9ub2Rlcy5oCShyZXZp
c2lvbiAzMTk4MCkKKysrIGtqcy9ub2Rlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC03OTgsNiArNzk4
LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCisgICAgICAgIHZp
cnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0g
MCkgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIG9wdGltaXplVmFyaWFibGVB
Y2Nlc3MoRXhlY1N0YXRlKiwgY29uc3QgU3ltYm9sVGFibGUmLCBjb25zdCBMb2NhbFN0b3JhZ2Um
LCBOb2RlU3RhY2smKSBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIGV2
YWx1YXRlKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBz
dHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBLSlNfRkFTVF9DQUxMOwpAQCAtMjk5MCw2ICsy
OTkxLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAKICAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIHBy
b2Nlc3NEZWNsYXJhdGlvbnMoRXhlY1N0YXRlKikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdm9p
ZCBnZW5lcmF0ZUNvZGUoU2NvcGVDaGFpbk5vZGUqKSBLSlNfRkFTVF9DQUxMOworICAgICAgICB2
aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9
IDApIEtKU19GQVNUX0NBTEw7CiAKICAgICAgICAgT3duUHRyPFByb2dyYW1Db2RlQmxvY2s+IG1f
Y29kZTsKICAgICB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>20615</attachid>
            <date>2008-04-17 00:08:30 -0700</date>
            <delta_ts>2008-04-17 01:01:04 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch-eval.txt</filename>
            <type>text/plain</type>
            <size>18762</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFZNL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVk0vQ29kZUJsb2NrLmNwcAko
cmV2aXNpb24gMzE5ODApCisrKyBWTS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MzAsNiArNDMwLDE1IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYywgY28K
ICAgICAgICAgICAgIHByaW50ZigiWyU0ZF0gY2FsbFx0XHQlcywgJXMsICVzLCAlZCwgJWRcbiIs
IGxvY2F0aW9uLCByZWdpc3Rlck5hbWUocjApLmNfc3RyKCksIHJlZ2lzdGVyTmFtZShyMSkuY19z
dHIoKSwgcmVnaXN0ZXJOYW1lKHIyKS5jX3N0cigpLCB0ZW1wQ291bnQsIGFyZ0NvdW50KTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZXZhbDogeworICAg
ICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgcjEg
PSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCByMiA9ICgrK2l0KS0+dS5vcGVy
YW5kOworICAgICAgICAgICAgaW50IHRlbXBDb3VudCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAg
ICAgICAgICAgaW50IGFyZ0NvdW50ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBw
cmludGYoIlslNGRdIGV2YWxcdFx0JXMsICVzLCAlcywgJWQsICVkXG4iLCBsb2NhdGlvbiwgcmVn
aXN0ZXJOYW1lKHIwKS5jX3N0cigpLCByZWdpc3Rlck5hbWUocjEpLmNfc3RyKCksIHJlZ2lzdGVy
TmFtZShyMikuY19zdHIoKSwgdGVtcENvdW50LCBhcmdDb3VudCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQogICAgICAgICBjYXNlIG9wX3JldDogewogICAgICAgICAgICAgaW50IHIw
ID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBwcmludGYoIlslNGRdIHJldFx0XHQl
c1xuIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShyMCkuY19zdHIoKSk7CkluZGV4OiBWTS9Db2Rl
R2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBWTS9Db2RlR2VuZXJhdG9yLmNwcAkocmV2aXNp
b24gMzE5ODApCisrKyBWTS9Db2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYw
LDYgKzE2MCw3IEBAIENvZGVHZW5lcmF0b3I6OkNvZGVHZW5lcmF0b3IoUHJvZ3JhbU5vZGUKICAg
ICAsIG1fc2NvcGVOb2RlKHByb2dyYW1Ob2RlKQogICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2Nr
KQogICAgICwgbV9zY29wZURlcHRoKDApCisgICAgLCBtX2lzRXZhbENvZGUoZmFsc2UpCiAgICAg
LCBtX25leHRWYXIoLTEpCiAgICAgLCBtX3Byb3BlcnR5TmFtZXMoQ29tbW9uSWRlbnRpZmllcnM6
OnNoYXJlZCgpKQogCkBAIC0yMDEsNiArMjAyLDcgQEAgQ29kZUdlbmVyYXRvcjo6Q29kZUdlbmVy
YXRvcihGdW5jdGlvbkJvZAogICAgICwgbV9zY29wZU5vZGUoZnVuY3Rpb25Cb2R5KQogICAgICwg
bV9jb2RlQmxvY2soY29kZUJsb2NrKQogICAgICwgbV9zY29wZURlcHRoKDApCisgICAgLCBtX2lz
RXZhbENvZGUoZmFsc2UpCiAgICAgLCBtX25leHRWYXIoLTEpCiAgICAgLCBtX3Byb3BlcnR5TmFt
ZXMoQ29tbW9uSWRlbnRpZmllcnM6OnNoYXJlZCgpKQogewpAQCAtMjMxLDYgKzIzMywxOSBAQCBD
b2RlR2VuZXJhdG9yOjpDb2RlR2VuZXJhdG9yKEZ1bmN0aW9uQm9kCiAgICAgfQogfQogCitDb2Rl
R2VuZXJhdG9yOjpDb2RlR2VuZXJhdG9yKEV2YWxOb2RlKiBldmFsTm9kZSwgY29uc3QgU2NvcGVD
aGFpbiYgc2NvcGVDaGFpbiwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaykKKyAgICA6IG1fc2NvcGVDaGFpbigmc2NvcGVDaGFpbikKKyAgICAsIG1fc3ltYm9s
VGFibGUoc3ltYm9sVGFibGUpCisgICAgLCBtX3Njb3BlTm9kZShldmFsTm9kZSkKKyAgICAsIG1f
Y29kZUJsb2NrKGNvZGVCbG9jaykKKyAgICAsIG1fc2NvcGVEZXB0aCgwKQorICAgICwgbV9pc0V2
YWxDb2RlKHRydWUpCisgICAgLCBtX25leHRWYXIoLTEpCisgICAgLCBtX3Byb3BlcnR5TmFtZXMo
Q29tbW9uSWRlbnRpZmllcnM6OnNoYXJlZCgpKQoreworICAgIGFkZFZhcihtX3Byb3BlcnR5TmFt
ZXMtPnRoaXNJZGVudGlmaWVyKTsKK30KKwogdm9pZCBDb2RlR2VuZXJhdG9yOjphZGRQYXJhbWV0
ZXIoY29uc3QgSWRlbnRpZmllciYgaWRlbnQpCiB7CiAgICAgLy8gUGFyYW1ldGVycyBvdmVyd3Jp
dGUgdmFyIGRlY2xhcmF0aW9ucywgYnV0IG5vdCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMsCkBAIC03
NjQsNiArNzc5LDE4IEBAIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXROZXdGdW5jdGkK
IAogUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdENhbGwoUmVnaXN0ZXJJRCogcjAsIFJl
Z2lzdGVySUQqIHIxLCBSZWdpc3RlcklEKiByMiwgQXJndW1lbnRzTm9kZSogYXJndW1lbnRzTm9k
ZSkKIHsKKyAgICByZXR1cm4gZW1pdENhbGwob3BfY2FsbCwgcjAsIHIxLCByMiwgYXJndW1lbnRz
Tm9kZSk7Cit9CisKK1JlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXRFdmFsKFJlZ2lzdGVy
SUQqIHIwLCBSZWdpc3RlcklEKiByMSwgUmVnaXN0ZXJJRCogcjIsIEFyZ3VtZW50c05vZGUqIGFy
Z3VtZW50c05vZGUpCit7CisgICAgcmV0dXJuIGVtaXRDYWxsKG9wX2V2YWwsIHIwLCByMSwgcjIs
IGFyZ3VtZW50c05vZGUpOworfQorCitSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0Q2Fs
bChPcGNvZGVJRCBvcGNvZGVJRCwgUmVnaXN0ZXJJRCogcjAsIFJlZ2lzdGVySUQqIHIxLCBSZWdp
c3RlcklEKiByMiwgQXJndW1lbnRzTm9kZSogYXJndW1lbnRzTm9kZSkKK3sKKyAgICBBU1NFUlQo
b3Bjb2RlSUQgPT0gb3BfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF9ldmFsKTsKKwogICAgIFJlZlB0
cjxSZWdpc3RlcklEPiByZWYxID0gcjE7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJlZjIgPSBy
MjsKICAgICAKQEAgLTc4MCw3ICs4MDcsNyBAQCBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjpl
bWl0Q2FsbChSZWdpCiAgICAgICAgIGVtaXROb2RlKGFyZ3YubGFzdCgpLmdldCgpLCBuKTsKICAg
ICB9CiAKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobWFjaGluZSgpLmdldE9wY29kZShvcF9j
YWxsKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1hY2hpbmUoKS5nZXRPcGNvZGUob3Bj
b2RlSUQpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocjAtPmluZGV4KCkpOwogICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChyMS0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKHIyID8gcjItPmluZGV4KCkgOiBtaXNzaW5nU3ltYm9sTWFya2VyKCkpOyAvLyBXZSBlbmNv
ZGUgdGhlICJ0aGlzIiB2YWx1ZSBpbiB0aGUgaW5zdHJ1Y3Rpb24gc3RyZWFtLCB0byBhdm9pZCBh
biBleHBsaWNpdCBpbnN0cnVjdGlvbiBmb3IgY29weWluZyBvciBsb2FkaW5nIGl0LgpJbmRleDog
Vk0vQ29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFZNL0NvZGVHZW5lcmF0b3IuaAkocmV2
aXNpb24gMzE5ODApCisrKyBWTS9Db2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTYz
LDYgKzYzLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIAogICAgICAgICBDb2RlR2VuZXJh
dG9yKFByb2dyYW1Ob2RlKiwgY29uc3QgU2NvcGVDaGFpbiYsIFN5bWJvbFRhYmxlKiwgQ29kZUJs
b2NrKiwgVmFyU3RhY2smLCBGdW5jdGlvblN0YWNrJik7CiAgICAgICAgIENvZGVHZW5lcmF0b3Io
RnVuY3Rpb25Cb2R5Tm9kZSosIGNvbnN0IFNjb3BlQ2hhaW4mLCBTeW1ib2xUYWJsZSosIENvZGVC
bG9jayosIFZhclN0YWNrJiwgRnVuY3Rpb25TdGFjayYsIFZlY3RvcjxJZGVudGlmaWVyPiYgcGFy
YW1ldGVycyk7CisgICAgICAgIENvZGVHZW5lcmF0b3IoRXZhbE5vZGUqLCBjb25zdCBTY29wZUNo
YWluJiwgU3ltYm9sVGFibGUqLCBDb2RlQmxvY2sqKTsKIAogICAgICAgICBjb25zdCBDb21tb25J
ZGVudGlmaWVycyYgcHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0dXJuICptX3Byb3BlcnR5TmFt
ZXM7IH0KIApAQCAtMTg3LDYgKzE4OCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICBSZWdp
c3RlcklEKiBlbWl0UHV0UHJvcEluZGV4KFJlZ2lzdGVySUQqIGJhc2UsIHVuc2lnbmVkIGluZGV4
LCBSZWdpc3RlcklEKiB2YWwpOwogCiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRDYWxsKFJlZ2lz
dGVySUQqLCBSZWdpc3RlcklEKiwgUmVnaXN0ZXJJRCosIEFyZ3VtZW50c05vZGUqKTsKKyAgICAg
ICAgUmVnaXN0ZXJJRCogZW1pdEV2YWwoUmVnaXN0ZXJJRCosIFJlZ2lzdGVySUQqLCBSZWdpc3Rl
cklEKiwgQXJndW1lbnRzTm9kZSopOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0UmV0dXJuKFJl
Z2lzdGVySUQqKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEVuZChSZWdpc3RlcklEKik7CiAK
QEAgLTIyNSw2ICsyMjcsOCBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICAgICAgICB0eXBlZGVmIEhh
c2hNYXA8SlNWYWx1ZSosIHVuc2lnbmVkLCBEZWZhdWx0SGFzaDxKU1ZhbHVlKj46Okhhc2gsIEpT
VmFsdWVIYXNoVHJhaXRzPiBKU1ZhbHVlTWFwOwogICAgICAgICAKKyAgICAgICAgUmVnaXN0ZXJJ
RCogZW1pdENhbGwoT3Bjb2RlSUQsIFJlZ2lzdGVySUQqLCBSZWdpc3RlcklEKiwgUmVnaXN0ZXJJ
RCosIEFyZ3VtZW50c05vZGUqKTsKKwogICAgICAgICAvLyBNYXBzIGEgcmVnaXN0ZXIgaW5kZXgg
aW4gdGhlIHN5bWJvbCB0YWJsZSB0byBhIFJlZ2lzdGVySUQgaW5kZXggaW4gbV9sb2NhbHMuCiAg
ICAgICAgIGludCBsb2NhbHNJbmRleChpbnQgcmVnaXN0ZXJJbmRleCkgeyByZXR1cm4gLXJlZ2lz
dGVySW5kZXggLSAxOyB9CiAgICAgICAgIApAQCAtMjUxLDcgKzI1NSw3IEBAIG5hbWVzcGFjZSBL
SlMgewogICAgICAgICBTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUoKSB7IHJldHVybiAqbV9zeW1i
b2xUYWJsZTsgfQogICAgICAgICBWZWN0b3I8SGFuZGxlckluZm8+JiBleGNlcHRpb25IYW5kbGVy
cygpIHsgcmV0dXJuIG1fY29kZUJsb2NrLT5leGNlcHRpb25IYW5kbGVyczsgfQogICAgICAgICAK
LSAgICAgICAgYm9vbCBzaG91bGRPcHRpbWl6ZUxvY2FscygpIHsgcmV0dXJuICFtX3Njb3BlRGVw
dGg7IH0KKyAgICAgICAgYm9vbCBzaG91bGRPcHRpbWl6ZUxvY2FscygpIHsgcmV0dXJuICFtX2lz
RXZhbENvZGUgJiYgIW1fc2NvcGVEZXB0aDsgfQogCiAgICAgICAgIGNvbnN0IFNjb3BlQ2hhaW4q
IG1fc2NvcGVDaGFpbjsKICAgICAgICAgU3ltYm9sVGFibGUqIG1fc3ltYm9sVGFibGU7CkBAIC0y
NjUsNiArMjY5LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIFZlY3RvcjxSZWdpc3RlcklE
LCAxMjg+IG1fdGVtcG9yYXJpZXM7CiAgICAgICAgIFZlY3RvcjxMYWJlbElELCAxMjg+IG1fbGFi
ZWxzOwogICAgICAgICBpbnQgbV9zY29wZURlcHRoOworICAgICAgICBib29sIG1faXNFdmFsQ29k
ZTsKICAgICAgICAgCiAgICAgICAgIFZlY3RvcjxKdW1wQ29udGV4dD4gbV9qdW1wQ29udGV4dFN0
YWNrOwogCkluZGV4OiBWTS9NYWNoaW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBWTS9NYWNoaW5lLmNw
cAkocmV2aXNpb24gMzE5ODApCisrKyBWTS9NYWNoaW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDk1LDggKzQ5NSwzNCBAQCBzdGF0aWMgTkVWRVJfSU5MSU5FIGJvb2wgaXNOb3RPYmplY3QoRXhl
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3N0YXRpYyBORVZFUl9JTkxJTkUgSlNWYWx1ZSogZXZh
bChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBTY29wZUNoYWluTm9kZSogc2Nv
cGVDaGFpbiwgUmVnaXN0ZXJGaWxlKiByZWdpc3RlckZpbGUsIFJlZ2lzdGVyKiByLCBpbnQgYXJn
diwgaW50IGFyZ2MsIEpTVmFsdWUqJiBleGNlcHRpb25WYWx1ZSkKK3sKKyAgICBKU1ZhbHVlKiB4
ID0gYXJnYyA+PSAyID8gclthcmd2ICsgMV0udS5qc1ZhbHVlIDoganNVbmRlZmluZWQoKTsKKyAg
ICAKKyAgICBVU3RyaW5nIHMgPSB4LT50b1N0cmluZyhleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpIHsKKyAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSBleGVjLT5leGNlcHRpb24o
KTsKKyAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQorCisgICAgaW50IHNvdXJjZUlkOworICAgIGludCBlcnJMaW5lOworICAgIFVTdHJpbmcg
ZXJyTXNnOworICAgIFJlZlB0cjxFdmFsTm9kZT4gZXZhbE5vZGUgPSBwYXJzZXIoKS5wYXJzZTxF
dmFsTm9kZT4oVVN0cmluZygpLCAwLCBzLmRhdGEoKSwgcy5zaXplKCksICZzb3VyY2VJZCwgJmVy
ckxpbmUsICZlcnJNc2cpOworICAgIAorICAgIGlmICghZXZhbE5vZGUpIHsKKyAgICAgICAgZXhj
ZXB0aW9uVmFsdWUgPSB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yLCBlcnJNc2csIGVyckxp
bmUsIHNvdXJjZUlkLCBOVUxMKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgRXZh
bEV4ZWNTdGF0ZSBuZXdFeGVjKGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSwgdGhpc09iaiwg
ZXZhbE5vZGUuZ2V0KCksIGV4ZWMsIGV4ZWMtPnNjb3BlQ2hhaW4oKSwgZXhlYy0+ZHluYW1pY0ds
b2JhbE9iamVjdCgpKTsKKyAgICByZXR1cm4gbWFjaGluZSgpLmV4ZWN1dGUoZXZhbE5vZGUuZ2V0
KCksICZuZXdFeGVjLCB0aGlzT2JqLCByZWdpc3RlckZpbGUsIHIgLSAoKnJlZ2lzdGVyRmlsZS0+
YmFzZVBvaW50ZXIoKSkgKyBhcmd2ICsgYXJnYywgc2NvcGVDaGFpbiwgJmV4Y2VwdGlvblZhbHVl
KTsKK30KKwogI2lmIEhBVkUoQ09NUFVURURfR09UTykKIHN0YXRpYyB2b2lkKiB0aHJvd1Rhcmdl
dDsKK3N0YXRpYyB2b2lkKiBjYWxsVGFyZ2V0OwogI2VuZGlmCiAKIEpTVmFsdWUqIE1hY2hpbmU6
OmV4ZWN1dGUoUHJvZ3JhbU5vZGUqIHByb2dyYW1Ob2RlLCBFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiB0aGlzT2JqLCBSZWdpc3RlckZpbGVTdGFjayogcmVnaXN0ZXJGaWxlU3RhY2ssIFNjb3Bl
Q2hhaW4qIHNjb3BlQ2hhaW4sIEpTVmFsdWUqKiBleGNlcHRpb24pCkBAIC01NTIsNiArNTc4LDQx
IEBAIEpTVmFsdWUqIE1hY2hpbmU6OmV4ZWN1dGUoRnVuY3Rpb25Cb2R5Tm8KICAgICByZXR1cm4g
cmVzdWx0OwogfQogCitKU1ZhbHVlKiBNYWNoaW5lOjpleGVjdXRlKEV2YWxOb2RlKiBldmFsTm9k
ZSwgRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgUmVnaXN0ZXJGaWxlKiByZWdp
c3RlckZpbGUsIGludCByZWdpc3Rlck9mZnNldCwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4s
IEpTVmFsdWUqKiBleGNlcHRpb24pCit7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSAmZXZh
bE5vZGUtPmNvZGUoc2NvcGVDaGFpbik7CisKKyAgICBzaXplX3Qgb2xkU2l6ZSA9IHJlZ2lzdGVy
RmlsZS0+c2l6ZSgpOworICAgIHNpemVfdCBuZXdTaXplID0gcmVnaXN0ZXJPZmZzZXQgKyBjb2Rl
QmxvY2stPm51bVZhcnMgKyBjb2RlQmxvY2stPm51bVRlbXBvcmFyaWVzOworICAgIHJlZ2lzdGVy
RmlsZS0+Z3JvdyhuZXdTaXplKTsKKyAgICBSZWdpc3RlciogciA9ICgqcmVnaXN0ZXJGaWxlLT5i
YXNlUG9pbnRlcigpKSArIHJlZ2lzdGVyT2Zmc2V0ICsgY29kZUJsb2NrLT5udW1WYXJzOworICAg
IAorICAgIHJbUHJvZ3JhbUNvZGVUaGlzUmVnaXN0ZXJdLnUuanNWYWx1ZSA9IHRoaXNPYmo7Cisg
ICAgSlNWYWx1ZSogcmVzdWx0ID0gcHJpdmF0ZUV4ZWN1dGUoTm9ybWFsLCBleGVjLCByZWdpc3Rl
ckZpbGUsIHIsIHNjb3BlQ2hhaW4sIGNvZGVCbG9jaywgZXhjZXB0aW9uKTsKKyAgICAKKyAgICBy
ZWdpc3RlckZpbGUtPnNocmluayhvbGRTaXplKTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitKU1ZhbHVlKiBNYWNoaW5lOjpleGVjdXRlKEV2YWxOb2RlKiBldmFsTm9kZSwgRXhlY1N0
YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgUmVnaXN0ZXJGaWxlU3RhY2sqIHJlZ2lzdGVy
RmlsZVN0YWNrLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwgSlNWYWx1ZSoqIGV4Y2VwdGlv
bikKK3sKKyAgICBSZWdpc3RlckZpbGUqIHJlZ2lzdGVyRmlsZSA9IHJlZ2lzdGVyRmlsZVN0YWNr
LT5jdXJyZW50KCk7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSAmZXZhbE5vZGUtPmNvZGUo
c2NvcGVDaGFpbik7CisKKyAgICBzaXplX3Qgb2xkU2l6ZSA9IHJlZ2lzdGVyRmlsZS0+c2l6ZSgp
OworICAgIHNpemVfdCBuZXdTaXplID0gb2xkU2l6ZSArIGNvZGVCbG9jay0+bnVtVmFycyArIGNv
ZGVCbG9jay0+bnVtVGVtcG9yYXJpZXM7CisgICAgcmVnaXN0ZXJGaWxlLT5ncm93KG5ld1NpemUp
OworICAgIFJlZ2lzdGVyKiByID0gKCpyZWdpc3RlckZpbGUtPmJhc2VQb2ludGVyKCkpICsgb2xk
U2l6ZSArIGNvZGVCbG9jay0+bnVtVmFyczsKKyAgICAKKyAgICByW1Byb2dyYW1Db2RlVGhpc1Jl
Z2lzdGVyXS51LmpzVmFsdWUgPSB0aGlzT2JqOworICAgIEpTVmFsdWUqIHJlc3VsdCA9IHByaXZh
dGVFeGVjdXRlKE5vcm1hbCwgZXhlYywgcmVnaXN0ZXJGaWxlLCByLCBzY29wZUNoYWluLCBjb2Rl
QmxvY2ssIGV4Y2VwdGlvbik7CisgICAgCisgICAgcmVnaXN0ZXJGaWxlLT5zaHJpbmsob2xkU2l6
ZSk7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogSlNWYWx1ZSogTWFjaGluZTo6cHJp
dmF0ZUV4ZWN1dGUoRXhlY3V0aW9uRmxhZyBmbGFnLCBFeGVjU3RhdGUqIGV4ZWMsIFJlZ2lzdGVy
RmlsZSogcmVnaXN0ZXJGaWxlLCBSZWdpc3RlciogciwgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hh
aW4sIENvZGVCbG9jayogY29kZUJsb2NrLCBKU1ZhbHVlKiogZXhjZXB0aW9uKQogewogICAgIC8v
IE9uZS10aW1lIGluaXRpYWxpemF0aW9uIG9mIG91ciBhZGRyZXNzIHRhYmxlcy4gV2UgaGF2ZSB0
byBwdXQgdGhpcyBjb2RlCkBAIC01NjcsNiArNjI4LDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJp
dmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICAgICAgI3VuZGVmIEFERF9PUENPREUKICAgICAg
ICAgICAgIEFTU0VSVChtX29wY29kZUlEVGFibGUuc2l6ZSgpID09IG51bU9wY29kZUlEcyk7CiAg
ICAgICAgICAgICB0aHJvd1RhcmdldCA9ICYmZ2NjX2RlcGVuZGVuY3lfaGFjazsKKyAgICAgICAg
ICAgIGNhbGxUYXJnZXQgPSAmJm9wX2NhbGw7CiAgICAgICAgICNlbmRpZiAvLyBIQVZFKENPTVBV
VEVEX0dPVE8pCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KQEAgLTExMDAsNiArMTE2MiwzMyBA
QCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVjdXRpCiAgICAgICAgICsrdlBD
OwogICAgICAgICBORVhUX09QQ09ERTsKICAgICB9CisgICAgQkVHSU5fT1BDT0RFKG9wX2V2YWwp
IHsKKyAgICAgICAgaW50IHIwID0gKCsrdlBDKS0+dS5vcGVyYW5kOworICAgICAgICBpbnQgcjEg
PSAoKyt2UEMpLT51Lm9wZXJhbmQ7CisgICAgICAgIGludCByMiA9ICgrK3ZQQyktPnUub3BlcmFu
ZDsKKyAgICAgICAgaW50IGFyZ3YgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CisgICAgICAgIGludCBh
cmdjID0gKCsrdlBDKS0+dS5vcGVyYW5kOworCisgICAgICAgIEpTVmFsdWUqIHYgPSByW3IxXS51
LmpzVmFsdWU7CisgICAgICAgIEpTVmFsdWUqIGJhc2UgPSByW3IyXS51LmpzVmFsdWU7CisgICAg
ICAgIAorICAgICAgICBpZiAoYmFzZSA9PSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkgJiYg
diA9PSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmV2YWxGdW5jdGlvbigpKSB7CisgICAg
ICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSByIC0gKCpyZWdpc3RlckJhc2UpOworCisgICAg
ICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBldmFsKGV4ZWMsIHN0YXRpY19jYXN0PEpTT2JqZWN0
Kj4oYmFzZSksIHNjb3BlQ2hhaW4sIHJlZ2lzdGVyRmlsZSwgciwgYXJndiwgYXJnYywgZXhjZXB0
aW9uVmFsdWUpOworICAgICAgICAgICAgaWYgKGV4Y2VwdGlvblZhbHVlKQorICAgICAgICAgICAg
ICAgIGdvdG8gaW50ZXJuYWxfdGhyb3c7CisKKyAgICAgICAgICAgIHIgPSAoKnJlZ2lzdGVyQmFz
ZSkgKyByZWdpc3Rlck9mZnNldDsKKyAgICAgICAgICAgIHJbcjBdLnUuanNWYWx1ZSA9IHJlc3Vs
dDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgKyt2UEM7CisgICAgICAgICAgICBORVhUX09Q
Q09ERTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdlBDIC09IDU7CisgICAgICAgIGdv
dG8gKmNhbGxUYXJnZXQ7CisgICAgfQogICAgIEJFR0lOX09QQ09ERShvcF9jYWxsKSB7CiAgICAg
ICAgIGludCByMCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKICAgICAgICAgaW50IHIxID0gKCsrdlBD
KS0+dS5vcGVyYW5kOwpAQCAtMTEzNCw4ICsxMjIzLDYgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJp
dmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOYXRp
dmUpIHsKICAgICAgICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9IHIgLSAoKnJlZ2lzdGVyQmFz
ZSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEZJWE1FOiBTdWJzdGl0dXRlIGxleGlj
YWwgZ2xvYmFsIG9iamVjdCBmb3IgbnVsbC4KLQogICAgICAgICAgICAgclthcmd2XS51LmpzVmFs
dWUgPSByMiA9PSBtaXNzaW5nU3ltYm9sTWFya2VyKCkgPyBqc051bGwoKSA6IChyW3IyXS51Lmpz
VmFsdWUpLT50b09iamVjdChleGVjKTsgLy8gInRoaXMiIHZhbHVlCiAgICAgICAgICAgICBKU09i
amVjdCogdGhpc09iaiA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oclthcmd2XS51LmpzVmFsdWUp
OwogCkluZGV4OiBWTS9NYWNoaW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVk0vTWFjaGluZS5oCShyZXZp
c2lvbiAzMTk4MCkKKysrIFZNL01hY2hpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtODAsNiArODAs
OCBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAgICAgCiAgICAgICAgIEpTVmFsdWUqIGV4ZWN1dGUo
UHJvZ3JhbU5vZGUqLCBFeGVjU3RhdGUqLCBKU09iamVjdCogdGhpc09iaiwgUmVnaXN0ZXJGaWxl
U3RhY2sqLCBTY29wZUNoYWluKiwgSlNWYWx1ZSoqIGV4Y2VwdGlvbik7CiAgICAgICAgIEpTVmFs
dWUqIGV4ZWN1dGUoRnVuY3Rpb25Cb2R5Tm9kZSosIGNvbnN0IExpc3QmIGFyZ3MsIEpTT2JqZWN0
KiB0aGlzT2JqLCBFeGVjU3RhdGUqLCBSZWdpc3RlckZpbGVTdGFjayosIFNjb3BlQ2hhaW4qLCBK
U1ZhbHVlKiogZXhjZXB0aW9uKTsKKyAgICAgICAgSlNWYWx1ZSogZXhlY3V0ZShFdmFsTm9kZSos
IEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiB0aGlzT2JqLCBSZWdpc3RlckZpbGUqLCBpbnQgcmVnaXN0
ZXJPZmZzZXQsIFNjb3BlQ2hhaW5Ob2RlKiwgSlNWYWx1ZSoqIGV4Y2VwdGlvbik7CisgICAgICAg
IEpTVmFsdWUqIGV4ZWN1dGUoRXZhbE5vZGUqLCBFeGVjU3RhdGUqLCBKU09iamVjdCogdGhpc09i
aiwgUmVnaXN0ZXJGaWxlU3RhY2sqLCBTY29wZUNoYWluTm9kZSosIEpTVmFsdWUqKiBleGNlcHRp
b24pOwogICAgICAgICAKICAgICBwcml2YXRlOgogICAgICAgICB0eXBlZGVmIGVudW0geyBOb3Jt
YWwsIEluaXRpYWxpemVBbmRSZXR1cm4gfSBFeGVjdXRpb25GbGFnOwpJbmRleDogVk0vT3Bjb2Rl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVk0vT3Bjb2RlLmgJKHJldmlzaW9uIDMxOTgwKQorKysgVk0vT3Bj
b2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTk1LDYgKzk1LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAg
ICAgICAgIG1hY3JvKG9wX25ld19mdW5jKSBcCiAgICAgICAgIG1hY3JvKG9wX25ld19mdW5jX2V4
cCkgXAogICAgICAgICBtYWNybyhvcF9jYWxsKSBcCisgICAgICAgIG1hY3JvKG9wX2V2YWwpIFwK
ICAgICAgICAgbWFjcm8ob3BfcmV0KSBcCiAgICAgICAgIFwKICAgICAgICAgbWFjcm8ob3BfY29u
c3RydWN0KSBcCkluZGV4OiBranMvZnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9mdW5j
dGlvbi5jcHAJKHJldmlzaW9uIDMxOTgwKQorKysga2pzL2Z1bmN0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjgzLDUyICs2ODMsNDIgQEAgc3RhdGljIGRvdWJsZSBwYXJzZUZsb2F0KGNvbnN0
IFVTdHJpbmcmIAogICAgIHJldHVybiBzLnRvRG91YmxlKCB0cnVlIC8qdG9sZXJhbnQqLywgZmFs
c2UgLyogTmFOIGZvciBlbXB0eSBzdHJpbmcgKi8gKTsKIH0KIAotSlNWYWx1ZSogZXZhbChFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IFNjb3BlQ2hhaW4mIHNjb3BlQ2hhaW4sIEpTVmFyaWFibGVPYmpl
Y3QqIHZhcmlhYmxlT2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVj
dCogdGhpc09iaiwgY29uc3QgTGlzdCYgYXJncykKK0pTVmFsdWUqIGdsb2JhbEZ1bmNFdmFsKEV4
ZWNTdGF0ZSogZXhlYywgUHJvdG90eXBlUmVmbGV4aXZlRnVuY3Rpb24qIGZ1bmN0aW9uLCBKU09i
amVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYgYXJncykKIHsKKyAgICBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0ID0gdGhpc09iai0+aXNHbG9iYWxPYmplY3QoKSA/IHN0YXRpY19jYXN0PEpT
R2xvYmFsT2JqZWN0Kj4odGhpc09iaikgOiAwOworCisgICAgaWYgKCFnbG9iYWxPYmplY3QgfHwg
Z2xvYmFsT2JqZWN0LT5ldmFsRnVuY3Rpb24oKSAhPSBmdW5jdGlvbikKKyAgICAgICAgcmV0dXJu
IHRocm93RXJyb3IoZXhlYywgRXZhbEVycm9yLCAiVGhlIFwidGhpc1wiIHZhbHVlIHBhc3NlZCB0
byBldmFsIG11c3QgYmUgdGhlIGdsb2JhbCBvYmplY3QgZnJvbSB3aGljaCBldmFsIG9yaWdpbmF0
ZWQiKTsKKworICAgIFNjb3BlQ2hhaW4gc2NvcGVDaGFpbihnbG9iYWxPYmplY3QpOworCiAgICAg
SlNWYWx1ZSogeCA9IGFyZ3NbMF07CiAgICAgaWYgKCF4LT5pc1N0cmluZygpKQogICAgICAgICBy
ZXR1cm4geDsKLQorICAgIAogICAgIFVTdHJpbmcgcyA9IHgtPnRvU3RyaW5nKGV4ZWMpOwotCisg
ICAgCiAgICAgaW50IHNvdXJjZUlkOwogICAgIGludCBlcnJMaW5lOwogICAgIFVTdHJpbmcgZXJy
TXNnOwogICAgIFJlZlB0cjxFdmFsTm9kZT4gZXZhbE5vZGUgPSBwYXJzZXIoKS5wYXJzZTxFdmFs
Tm9kZT4oVVN0cmluZygpLCAwLCBzLmRhdGEoKSwgcy5zaXplKCksICZzb3VyY2VJZCwgJmVyckxp
bmUsICZlcnJNc2cpOwotCi0gICAgRGVidWdnZXIqIGRiZyA9IGV4ZWMtPmR5bmFtaWNHbG9iYWxP
YmplY3QoKS0+ZGVidWdnZXIoKTsKLSAgICBpZiAoZGJnKSB7Ci0gICAgICAgIGJvb2wgY29udCA9
IGRiZy0+c291cmNlUGFyc2VkKGV4ZWMsIHNvdXJjZUlkLCBVU3RyaW5nKCksIHMsIDAsIGVyckxp
bmUsIGVyck1zZyk7Ci0gICAgICAgIGlmICghY29udCkKLSAgICAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwotICAgIH0KLQorICAgIAogICAgIGlmICghZXZhbE5vZGUpCiAgICAgICAgIHJl
dHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yLCBlcnJNc2csIGVyckxpbmUsIHNvdXJj
ZUlkLCBOVUxMKTsKLQotICAgIEV2YWxFeGVjU3RhdGUgbmV3RXhlYyhnbG9iYWxPYmplY3QsIHRo
aXNPYmosIGV2YWxOb2RlLmdldCgpLCBleGVjLCBzY29wZUNoYWluLCB2YXJpYWJsZU9iamVjdCk7
Ci0KLSAgICBKU1ZhbHVlKiB2YWx1ZSA9IGV2YWxOb2RlLT5leGVjdXRlKCZuZXdFeGVjKTsKLQot
ICAgIGlmIChuZXdFeGVjLmNvbXBsZXRpb25UeXBlKCkgPT0gVGhyb3cpIHsKKyAgICAKKyAgICBF
dmFsRXhlY1N0YXRlIG5ld0V4ZWMoZ2xvYmFsT2JqZWN0LCB0aGlzT2JqLCBldmFsTm9kZS5nZXQo
KSwgZXhlYywgc2NvcGVDaGFpbiwgZ2xvYmFsT2JqZWN0KTsKKyAgICAKKyAgICBKU1ZhbHVlKiBl
eGNlcHRpb24gPSAwOworICAgIEpTVmFsdWUqIHZhbHVlID0gbWFjaGluZSgpLmV4ZWN1dGUoZXZh
bE5vZGUuZ2V0KCksICZuZXdFeGVjLCB0aGlzT2JqLCAmbmV3RXhlYy5keW5hbWljR2xvYmFsT2Jq
ZWN0KCktPnJlZ2lzdGVyRmlsZVN0YWNrKCksIHNjb3BlQ2hhaW4ubm9kZSgpLCAmZXhjZXB0aW9u
KTsKKyAgICAKKyAgICBpZiAoZXhjZXB0aW9uKSB7CiAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlv
bih2YWx1ZSk7CiAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICB9Ci0KKyAgICAKICAgICByZXR1
cm4gdmFsdWUgPyB2YWx1ZSA6IGpzVW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUqIGdsb2JhbEZ1
bmNFdmFsKEV4ZWNTdGF0ZSogZXhlYywgUHJvdG90eXBlUmVmbGV4aXZlRnVuY3Rpb24qIGZ1bmN0
aW9uLCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgTGlzdCYgYXJncykKLXsKLSAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdGhpc09iai0+aXNHbG9iYWxPYmplY3QoKSA/IHN0YXRp
Y19jYXN0PEpTR2xvYmFsT2JqZWN0Kj4odGhpc09iaikgOiAwOwotCi0gICAgaWYgKCFnbG9iYWxP
YmplY3QgfHwgZ2xvYmFsT2JqZWN0LT5ldmFsRnVuY3Rpb24oKSAhPSBmdW5jdGlvbikKLSAgICAg
ICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgRXZhbEVycm9yLCAiVGhlIFwidGhpc1wiIHZhbHVl
IHBhc3NlZCB0byBldmFsIG11c3QgYmUgdGhlIGdsb2JhbCBvYmplY3QgZnJvbSB3aGljaCBldmFs
IG9yaWdpbmF0ZWQiKTsKLQotICAgIFNjb3BlQ2hhaW4gc2NvcGVDaGFpbihnbG9iYWxPYmplY3Qp
OwotICAgIHJldHVybiBldmFsKGV4ZWMsIHNjb3BlQ2hhaW4sIGdsb2JhbE9iamVjdCwgZ2xvYmFs
T2JqZWN0LCBnbG9iYWxPYmplY3QsIGFyZ3MpOwotfQotCiBKU1ZhbHVlKiBnbG9iYWxGdW5jUGFy
c2VJbnQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIGNvbnN0IExpc3QmIGFyZ3MpCiB7CiAg
ICAgcmV0dXJuIGpzTnVtYmVyKHBhcnNlSW50KGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLCBhcmdz
WzFdLT50b0ludDMyKGV4ZWMpKSk7CkluZGV4OiBranMvZnVuY3Rpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBranMvZnVuY3Rpb24uaAkocmV2aXNpb24gMzE5ODApCisrKyBranMvZnVuY3Rpb24uaAkod29y
a2luZyBjb3B5KQpAQCAtMTY3LDggKzE2Nyw2IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIEpTVmFs
dWUqIGdsb2JhbEZ1bmNLSlNQcmludChFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IExpc3Qm
KTsKICNlbmRpZgogCi0gICAgSlNWYWx1ZSogZXZhbChFeGVjU3RhdGUqLCBjb25zdCBTY29wZUNo
YWluJiwgSlNWYXJpYWJsZU9iamVjdCosIEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqIHRoaXNP
YmosIGNvbnN0IExpc3QmIGFyZ3MpOwotCiAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBtYW50aXNz
YU92ZXJmbG93TG93ZXJCb3VuZCA9IDkwMDcxOTkyNTQ3NDA5OTIuMDsKICAgICBkb3VibGUgcGFy
c2VJbnRPdmVyZmxvdyhjb25zdCBjaGFyKiwgaW50IGxlbmd0aCwgaW50IHJhZGl4KTsKIApJbmRl
eDoga2pzL25vZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvbm9kZXMuY3BwCShyZXZpc2lvbiAz
MTk4MCkKKysrIGtqcy9ub2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNjQsNyArMTI2NCw2
IEBAIGlubGluZSBKU1ZhbHVlKiBFeHByZXNzaW9uTm9kZTo6cmVzb2x2ZUEKICAgICAgICAgICAg
IGlmIChjYWxsZXJUeXBlID09IEV2YWxPcGVyYXRvcikgewogICAgICAgICAgICAgICAgIGlmIChi
YXNlID09IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSAmJiBmdW5jID09IGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKS0+ZXZhbEZ1bmN0aW9uKCkpIHsKICAgICAgICAgICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBldmFsKGV4
ZWMsIGV4ZWMtPnNjb3BlQ2hhaW4oKSwgZXhlYy0+dmFyaWFibGVPYmplY3QoKSwgZXhlYy0+ZHlu
YW1pY0dsb2JhbE9iamVjdCgpLCBleGVjLT50aGlzVmFsdWUoKSwgYXJnTGlzdCk7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGZ1bmMtPmNhbGwo
ZXhlYywgdGhpc09iaiwgYXJnTGlzdCk7CkBAIC0xMjc1LDYgKzEyNzQsMTQgQEAgaW5saW5lIEpT
VmFsdWUqIEV4cHJlc3Npb25Ob2RlOjpyZXNvbHZlQQogICAgIHJldHVybiB0aHJvd1VuZGVmaW5l
ZFZhcmlhYmxlRXJyb3IoZXhlYywgaWRlbnQpOwogfQogCitSZWdpc3RlcklEKiBFdmFsRnVuY3Rp
b25DYWxsTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklE
KiBkc3QpCit7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHIwID0gZ2VuZXJhdG9yLnRlbXBEZXN0
aW5hdGlvbihkc3QpOworICAgIFJlZ2lzdGVySUQqIHIxID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFy
eSgpOworICAgIGdlbmVyYXRvci5lbWl0UmVzb2x2ZUJhc2VBbmRQcm9wZXJ0eShyMC5nZXQoKSwg
cjEsIENvbW1vbklkZW50aWZpZXJzOjpzaGFyZWQoKS0+ZXZhbCk7CisgICAgcmV0dXJuIGdlbmVy
YXRvci5lbWl0RXZhbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHIwLmdldCgpKSwg
cjEsIHIwLmdldCgpLCBtX2FyZ3MuZ2V0KCkpOworfQorCiB2b2lkIEV2YWxGdW5jdGlvbkNhbGxO
b2RlOjpvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxl
JiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJiBub2RlU3RhY2spCiB7CiAgICAgbm9k
ZVN0YWNrLmFwcGVuZChtX2FyZ3MuZ2V0KCkpOwpAQCAtNTU5OSw2ICs1NjA2LDE1IEBAIEV2YWxO
b2RlOjp+RXZhbE5vZGUoKQogewogfQogCitSZWdpc3RlcklEKiBFdmFsTm9kZTo6ZW1pdENvZGUo
Q29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKikKK3sKKyAgICBSZWdpc3RlcklE
KiByMCA9IHN0YXRlbWVudExpc3RFbWl0Q29kZShtX2NoaWxkcmVuLCBnZW5lcmF0b3IpOworICAg
IGlmICghcjApCisgICAgICAgIHIwID0gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRvci5uZXdU
ZW1wb3JhcnkoKSwganNVbmRlZmluZWQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRFbmQocjApOwor
ICAgIHJldHVybiAwOworfQorCiB2b2lkIEV2YWxOb2RlOjpnZW5lcmF0ZUNvZGUoU2NvcGVDaGFp
bk5vZGUqIHNjKQogewogICAgIFNjb3BlQ2hhaW4gc2NvcGVDaGFpbihzYyk7CkBAIC01NjA3LDcg
KzU2MjMsMTAgQEAgdm9pZCBFdmFsTm9kZTo6Z2VuZXJhdGVDb2RlKFNjb3BlQ2hhaW5ObwogICAg
IAogICAgIG1fY29kZS5zZXQobmV3IFByb2dyYW1Db2RlQmxvY2sodXNlc0V2YWwoKSwgbmVlZHND
bG9zdXJlKCksIGdsb2JhbE9iamVjdCkpOwogICAgIAotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIENvZGVHZW5lcmF0b3IgZ2VuZXJhdG9yKHRoaXMsIHNjb3BlQ2hhaW4sIG5ldyBTeW1i
b2xUYWJsZSgpLCBtX2NvZGUuZ2V0KCkpOworICAgIGdlbmVyYXRvci5nZW5lcmF0ZSgpOworCisg
ICAgbV9jaGlsZHJlbi5zaHJpbmtDYXBhY2l0eSgwKTsKIH0KIAogRXZhbE5vZGUqIEV2YWxOb2Rl
OjpjcmVhdGUoU291cmNlRWxlbWVudHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1
bmN0aW9uU3RhY2sqIGZ1bmNTdGFjaywgYm9vbCB1c2VzRXZhbCwgYm9vbCBuZWVkc0Nsb3N1cmUp
CkluZGV4OiBranMvbm9kZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvbm9kZXMuaAkocmV2aXNpb24g
MzE5ODApCisrKyBranMvbm9kZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNzk4LDYgKzc5OCw3IEBA
IG5hbWVzcGFjZSBLSlMgewogICAgICAgICB7CiAgICAgICAgIH0KIAorICAgICAgICB2aXJ0dWFs
IFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEtK
U19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNz
KEV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9k
ZVN0YWNrJikgS0pTX0ZBU1RfQ0FMTDsKICAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0
ZShFeGVjU3RhdGUqKSBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFt
VG8oU291cmNlU3RyZWFtJikgY29uc3QgS0pTX0ZBU1RfQ0FMTDsKQEAgLTI5OTAsNiArMjk5MSw3
IEBAIG5hbWVzcGFjZSBLSlMgewogCiAgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBwcm9jZXNz
RGVjbGFyYXRpb25zKEV4ZWNTdGF0ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZvaWQgZ2Vu
ZXJhdGVDb2RlKFNjb3BlQ2hhaW5Ob2RlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICAgICAgdmlydHVh
bCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBL
SlNfRkFTVF9DQUxMOwogCiAgICAgICAgIE93blB0cjxQcm9ncmFtQ29kZUJsb2NrPiBtX2NvZGU7
CiAgICAgfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>20616</attachid>
            <date>2008-04-17 01:01:04 -0700</date>
            <delta_ts>2008-04-17 09:53:44 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch-eval.txt</filename>
            <type>text/plain</type>
            <size>19425</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFZNL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVk0vQ29kZUJsb2NrLmNwcAko
cmV2aXNpb24gMzE5ODApCisrKyBWTS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MzAsNiArNDMwLDE1IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wKEV4ZWNTdGF0ZSogZXhlYywgY28K
ICAgICAgICAgICAgIHByaW50ZigiWyU0ZF0gY2FsbFx0XHQlcywgJXMsICVzLCAlZCwgJWRcbiIs
IGxvY2F0aW9uLCByZWdpc3Rlck5hbWUocjApLmNfc3RyKCksIHJlZ2lzdGVyTmFtZShyMSkuY19z
dHIoKSwgcmVnaXN0ZXJOYW1lKHIyKS5jX3N0cigpLCB0ZW1wQ291bnQsIGFyZ0NvdW50KTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfY2FsbF9ldmFsOiB7
CisgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGlu
dCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIyID0gKCsraXQpLT51
Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgdGVtcENvdW50ID0gKCsraXQpLT51Lm9wZXJhbmQ7
CisgICAgICAgICAgICBpbnQgYXJnQ291bnQgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAg
ICAgIHByaW50ZigiWyU0ZF0gZXZhbFx0XHQlcywgJXMsICVzLCAlZCwgJWRcbiIsIGxvY2F0aW9u
LCByZWdpc3Rlck5hbWUocjApLmNfc3RyKCksIHJlZ2lzdGVyTmFtZShyMSkuY19zdHIoKSwgcmVn
aXN0ZXJOYW1lKHIyKS5jX3N0cigpLCB0ZW1wQ291bnQsIGFyZ0NvdW50KTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfcmV0OiB7CiAgICAgICAgICAgICBp
bnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIHByaW50ZigiWyU0ZF0gcmV0
XHRcdCVzXG4iLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKHIwKS5jX3N0cigpKTsKSW5kZXg6IFZN
L0NvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFZNL0NvZGVHZW5lcmF0b3IuY3BwCShy
ZXZpc2lvbiAzMTk4MCkKKysrIFZNL0NvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNjAsNiArMTYwLDcgQEAgQ29kZUdlbmVyYXRvcjo6Q29kZUdlbmVyYXRvcihQcm9ncmFtTm9k
ZQogICAgICwgbV9zY29wZU5vZGUocHJvZ3JhbU5vZGUpCiAgICAgLCBtX2NvZGVCbG9jayhjb2Rl
QmxvY2spCiAgICAgLCBtX3Njb3BlRGVwdGgoMCkKKyAgICAsIG1faXNFdmFsQ29kZShmYWxzZSkK
ICAgICAsIG1fbmV4dFZhcigtMSkKICAgICAsIG1fcHJvcGVydHlOYW1lcyhDb21tb25JZGVudGlm
aWVyczo6c2hhcmVkKCkpCiAKQEAgLTIwMSw2ICsyMDIsNyBAQCBDb2RlR2VuZXJhdG9yOjpDb2Rl
R2VuZXJhdG9yKEZ1bmN0aW9uQm9kCiAgICAgLCBtX3Njb3BlTm9kZShmdW5jdGlvbkJvZHkpCiAg
ICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCiAgICAgLCBtX3Njb3BlRGVwdGgoMCkKKyAgICAs
IG1faXNFdmFsQ29kZShmYWxzZSkKICAgICAsIG1fbmV4dFZhcigtMSkKICAgICAsIG1fcHJvcGVy
dHlOYW1lcyhDb21tb25JZGVudGlmaWVyczo6c2hhcmVkKCkpCiB7CkBAIC0yMzEsNiArMjMzLDE5
IEBAIENvZGVHZW5lcmF0b3I6OkNvZGVHZW5lcmF0b3IoRnVuY3Rpb25Cb2QKICAgICB9CiB9CiAK
K0NvZGVHZW5lcmF0b3I6OkNvZGVHZW5lcmF0b3IoRXZhbE5vZGUqIGV2YWxOb2RlLCBjb25zdCBT
Y29wZUNoYWluJiBzY29wZUNoYWluLCBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUsIENvZGVCbG9j
ayogY29kZUJsb2NrKQorICAgIDogbV9zY29wZUNoYWluKCZzY29wZUNoYWluKQorICAgICwgbV9z
eW1ib2xUYWJsZShzeW1ib2xUYWJsZSkKKyAgICAsIG1fc2NvcGVOb2RlKGV2YWxOb2RlKQorICAg
ICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQorICAgICwgbV9zY29wZURlcHRoKDApCisgICAgLCBt
X2lzRXZhbENvZGUodHJ1ZSkKKyAgICAsIG1fbmV4dFZhcigtMSkKKyAgICAsIG1fcHJvcGVydHlO
YW1lcyhDb21tb25JZGVudGlmaWVyczo6c2hhcmVkKCkpCit7CisgICAgYWRkVmFyKG1fcHJvcGVy
dHlOYW1lcy0+dGhpc0lkZW50aWZpZXIpOworfQorCiB2b2lkIENvZGVHZW5lcmF0b3I6OmFkZFBh
cmFtZXRlcihjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKIHsKICAgICAvLyBQYXJhbWV0ZXJzIG92
ZXJ3cml0ZSB2YXIgZGVjbGFyYXRpb25zLCBidXQgbm90IGZ1bmN0aW9uIGRlY2xhcmF0aW9ucywK
QEAgLTc2NCw2ICs3NzksMTggQEAgUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdE5ld0Z1
bmN0aQogCiBSZWdpc3RlcklEKiBDb2RlR2VuZXJhdG9yOjplbWl0Q2FsbChSZWdpc3RlcklEKiBy
MCwgUmVnaXN0ZXJJRCogcjEsIFJlZ2lzdGVySUQqIHIyLCBBcmd1bWVudHNOb2RlKiBhcmd1bWVu
dHNOb2RlKQogeworICAgIHJldHVybiBlbWl0Q2FsbChvcF9jYWxsLCByMCwgcjEsIHIyLCBhcmd1
bWVudHNOb2RlKTsKK30KKworUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdEV2YWwoUmVn
aXN0ZXJJRCogcjAsIFJlZ2lzdGVySUQqIHIxLCBSZWdpc3RlcklEKiByMiwgQXJndW1lbnRzTm9k
ZSogYXJndW1lbnRzTm9kZSkKK3sKKyAgICByZXR1cm4gZW1pdENhbGwob3BfY2FsbF9ldmFsLCBy
MCwgcjEsIHIyLCBhcmd1bWVudHNOb2RlKTsKK30KKworUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRv
cjo6ZW1pdENhbGwoT3Bjb2RlSUQgb3Bjb2RlSUQsIFJlZ2lzdGVySUQqIHIwLCBSZWdpc3RlcklE
KiByMSwgUmVnaXN0ZXJJRCogcjIsIEFyZ3VtZW50c05vZGUqIGFyZ3VtZW50c05vZGUpCit7Cisg
ICAgQVNTRVJUKG9wY29kZUlEID09IG9wX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfY2FsbF9ldmFs
KTsKKwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZWYxID0gcjE7CiAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IHJlZjIgPSByMjsKICAgICAKQEAgLTc4MCw3ICs4MDcsNyBAQCBSZWdpc3RlcklEKiBD
b2RlR2VuZXJhdG9yOjplbWl0Q2FsbChSZWdpCiAgICAgICAgIGVtaXROb2RlKGFyZ3YubGFzdCgp
LmdldCgpLCBuKTsKICAgICB9CiAKLSAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobWFjaGluZSgp
LmdldE9wY29kZShvcF9jYWxsKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1hY2hpbmUo
KS5nZXRPcGNvZGUob3Bjb2RlSUQpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocjAtPmlu
ZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChyMS0+aW5kZXgoKSk7CiAgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKHIyID8gcjItPmluZGV4KCkgOiBtaXNzaW5nU3ltYm9sTWFya2Vy
KCkpOyAvLyBXZSBlbmNvZGUgdGhlICJ0aGlzIiB2YWx1ZSBpbiB0aGUgaW5zdHJ1Y3Rpb24gc3Ry
ZWFtLCB0byBhdm9pZCBhbiBleHBsaWNpdCBpbnN0cnVjdGlvbiBmb3IgY29weWluZyBvciBsb2Fk
aW5nIGl0LgpJbmRleDogVk0vQ29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFZNL0NvZGVH
ZW5lcmF0b3IuaAkocmV2aXNpb24gMzE5ODApCisrKyBWTS9Db2RlR2VuZXJhdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTYzLDYgKzYzLDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIAogICAg
ICAgICBDb2RlR2VuZXJhdG9yKFByb2dyYW1Ob2RlKiwgY29uc3QgU2NvcGVDaGFpbiYsIFN5bWJv
bFRhYmxlKiwgQ29kZUJsb2NrKiwgVmFyU3RhY2smLCBGdW5jdGlvblN0YWNrJik7CiAgICAgICAg
IENvZGVHZW5lcmF0b3IoRnVuY3Rpb25Cb2R5Tm9kZSosIGNvbnN0IFNjb3BlQ2hhaW4mLCBTeW1i
b2xUYWJsZSosIENvZGVCbG9jayosIFZhclN0YWNrJiwgRnVuY3Rpb25TdGFjayYsIFZlY3RvcjxJ
ZGVudGlmaWVyPiYgcGFyYW1ldGVycyk7CisgICAgICAgIENvZGVHZW5lcmF0b3IoRXZhbE5vZGUq
LCBjb25zdCBTY29wZUNoYWluJiwgU3ltYm9sVGFibGUqLCBDb2RlQmxvY2sqKTsKIAogICAgICAg
ICBjb25zdCBDb21tb25JZGVudGlmaWVycyYgcHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0dXJu
ICptX3Byb3BlcnR5TmFtZXM7IH0KIApAQCAtMTg3LDYgKzE4OCw3IEBAIG5hbWVzcGFjZSBLSlMg
ewogICAgICAgICBSZWdpc3RlcklEKiBlbWl0UHV0UHJvcEluZGV4KFJlZ2lzdGVySUQqIGJhc2Us
IHVuc2lnbmVkIGluZGV4LCBSZWdpc3RlcklEKiB2YWwpOwogCiAgICAgICAgIFJlZ2lzdGVySUQq
IGVtaXRDYWxsKFJlZ2lzdGVySUQqLCBSZWdpc3RlcklEKiwgUmVnaXN0ZXJJRCosIEFyZ3VtZW50
c05vZGUqKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEV2YWwoUmVnaXN0ZXJJRCosIFJlZ2lz
dGVySUQqLCBSZWdpc3RlcklEKiwgQXJndW1lbnRzTm9kZSopOwogICAgICAgICBSZWdpc3RlcklE
KiBlbWl0UmV0dXJuKFJlZ2lzdGVySUQqKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEVuZChS
ZWdpc3RlcklEKik7CiAKQEAgLTIyNSw2ICsyMjcsOCBAQCBuYW1lc3BhY2UgS0pTIHsKIAogICAg
ICAgICB0eXBlZGVmIEhhc2hNYXA8SlNWYWx1ZSosIHVuc2lnbmVkLCBEZWZhdWx0SGFzaDxKU1Zh
bHVlKj46Okhhc2gsIEpTVmFsdWVIYXNoVHJhaXRzPiBKU1ZhbHVlTWFwOwogICAgICAgICAKKyAg
ICAgICAgUmVnaXN0ZXJJRCogZW1pdENhbGwoT3Bjb2RlSUQsIFJlZ2lzdGVySUQqLCBSZWdpc3Rl
cklEKiwgUmVnaXN0ZXJJRCosIEFyZ3VtZW50c05vZGUqKTsKKwogICAgICAgICAvLyBNYXBzIGEg
cmVnaXN0ZXIgaW5kZXggaW4gdGhlIHN5bWJvbCB0YWJsZSB0byBhIFJlZ2lzdGVySUQgaW5kZXgg
aW4gbV9sb2NhbHMuCiAgICAgICAgIGludCBsb2NhbHNJbmRleChpbnQgcmVnaXN0ZXJJbmRleCkg
eyByZXR1cm4gLXJlZ2lzdGVySW5kZXggLSAxOyB9CiAgICAgICAgIApAQCAtMjUxLDcgKzI1NSw3
IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICBTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUoKSB7
IHJldHVybiAqbV9zeW1ib2xUYWJsZTsgfQogICAgICAgICBWZWN0b3I8SGFuZGxlckluZm8+JiBl
eGNlcHRpb25IYW5kbGVycygpIHsgcmV0dXJuIG1fY29kZUJsb2NrLT5leGNlcHRpb25IYW5kbGVy
czsgfQogICAgICAgICAKLSAgICAgICAgYm9vbCBzaG91bGRPcHRpbWl6ZUxvY2FscygpIHsgcmV0
dXJuICFtX3Njb3BlRGVwdGg7IH0KKyAgICAgICAgYm9vbCBzaG91bGRPcHRpbWl6ZUxvY2Fscygp
IHsgcmV0dXJuICFtX2lzRXZhbENvZGUgJiYgIW1fc2NvcGVEZXB0aDsgfQogCiAgICAgICAgIGNv
bnN0IFNjb3BlQ2hhaW4qIG1fc2NvcGVDaGFpbjsKICAgICAgICAgU3ltYm9sVGFibGUqIG1fc3lt
Ym9sVGFibGU7CkBAIC0yNjUsNiArMjY5LDcgQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIFZl
Y3RvcjxSZWdpc3RlcklELCAxMjg+IG1fdGVtcG9yYXJpZXM7CiAgICAgICAgIFZlY3RvcjxMYWJl
bElELCAxMjg+IG1fbGFiZWxzOwogICAgICAgICBpbnQgbV9zY29wZURlcHRoOworICAgICAgICBi
b29sIG1faXNFdmFsQ29kZTsKICAgICAgICAgCiAgICAgICAgIFZlY3RvcjxKdW1wQ29udGV4dD4g
bV9qdW1wQ29udGV4dFN0YWNrOwogCkluZGV4OiBWTS9NYWNoaW5lLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBWTS9NYWNoaW5lLmNwcAkocmV2aXNpb24gMzE5ODApCisrKyBWTS9NYWNoaW5lLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDk1LDggKzQ5NSwzNCBAQCBzdGF0aWMgTkVWRVJfSU5MSU5FIGJvb2wg
aXNOb3RPYmplY3QoRXhlCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3N0YXRpYyBORVZFUl9JTkxJ
TkUgSlNWYWx1ZSogZXZhbChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiB0aGlzT2JqLCBTY29w
ZUNoYWluTm9kZSogc2NvcGVDaGFpbiwgUmVnaXN0ZXJGaWxlKiByZWdpc3RlckZpbGUsIFJlZ2lz
dGVyKiByLCBpbnQgYXJndiwgaW50IGFyZ2MsIEpTVmFsdWUqJiBleGNlcHRpb25WYWx1ZSkKK3sK
KyAgICBKU1ZhbHVlKiB4ID0gYXJnYyA+PSAyID8gclthcmd2ICsgMV0udS5qc1ZhbHVlIDoganNV
bmRlZmluZWQoKTsKKyAgICAKKyAgICBVU3RyaW5nIHMgPSB4LT50b1N0cmluZyhleGVjKTsKKyAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSBl
eGVjLT5leGNlcHRpb24oKTsKKyAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaW50IHNvdXJjZUlkOworICAgIGludCBlcnJMaW5l
OworICAgIFVTdHJpbmcgZXJyTXNnOworICAgIFJlZlB0cjxFdmFsTm9kZT4gZXZhbE5vZGUgPSBw
YXJzZXIoKS5wYXJzZTxFdmFsTm9kZT4oVVN0cmluZygpLCAwLCBzLmRhdGEoKSwgcy5zaXplKCks
ICZzb3VyY2VJZCwgJmVyckxpbmUsICZlcnJNc2cpOworICAgIAorICAgIGlmICghZXZhbE5vZGUp
IHsKKyAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9y
LCBlcnJNc2csIGVyckxpbmUsIHNvdXJjZUlkLCBOVUxMKTsKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQorCisgICAgRXZhbEV4ZWNTdGF0ZSBuZXdFeGVjKGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmpl
Y3QoKSwgdGhpc09iaiwgZXZhbE5vZGUuZ2V0KCksIGV4ZWMsIGV4ZWMtPnNjb3BlQ2hhaW4oKSwg
ZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpKTsKKyAgICByZXR1cm4gbWFjaGluZSgpLmV4ZWN1
dGUoZXZhbE5vZGUuZ2V0KCksICZuZXdFeGVjLCB0aGlzT2JqLCByZWdpc3RlckZpbGUsIHIgLSAo
KnJlZ2lzdGVyRmlsZS0+YmFzZVBvaW50ZXIoKSkgKyBhcmd2ICsgYXJnYywgc2NvcGVDaGFpbiwg
JmV4Y2VwdGlvblZhbHVlKTsKK30KKwogI2lmIEhBVkUoQ09NUFVURURfR09UTykKLXN0YXRpYyB2
b2lkKiB0aHJvd1RhcmdldDsKK3N0YXRpYyB2b2lkKiBvcF90aHJvd19lbmRfaW5kaXJlY3Q7Citz
dGF0aWMgdm9pZCogb3BfY2FsbF9pbmRpcmVjdDsKICNlbmRpZgogCiBKU1ZhbHVlKiBNYWNoaW5l
OjpleGVjdXRlKFByb2dyYW1Ob2RlKiBwcm9ncmFtTm9kZSwgRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCogdGhpc09iaiwgUmVnaXN0ZXJGaWxlU3RhY2sqIHJlZ2lzdGVyRmlsZVN0YWNrLCBTY29w
ZUNoYWluKiBzY29wZUNoYWluLCBKU1ZhbHVlKiogZXhjZXB0aW9uKQpAQCAtNTUyLDYgKzU3OCw0
MSBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpleGVjdXRlKEZ1bmN0aW9uQm9keU5vCiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAorSlNWYWx1ZSogTWFjaGluZTo6ZXhlY3V0ZShFdmFsTm9kZSogZXZhbE5v
ZGUsIEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIFJlZ2lzdGVyRmlsZSogcmVn
aXN0ZXJGaWxlLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWlu
LCBKU1ZhbHVlKiogZXhjZXB0aW9uKQoreworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gJmV2
YWxOb2RlLT5jb2RlKHNjb3BlQ2hhaW4pOworCisgICAgc2l6ZV90IG9sZFNpemUgPSByZWdpc3Rl
ckZpbGUtPnNpemUoKTsKKyAgICBzaXplX3QgbmV3U2l6ZSA9IHJlZ2lzdGVyT2Zmc2V0ICsgY29k
ZUJsb2NrLT5udW1WYXJzICsgY29kZUJsb2NrLT5udW1UZW1wb3JhcmllczsKKyAgICByZWdpc3Rl
ckZpbGUtPmdyb3cobmV3U2l6ZSk7CisgICAgUmVnaXN0ZXIqIHIgPSAoKnJlZ2lzdGVyRmlsZS0+
YmFzZVBvaW50ZXIoKSkgKyByZWdpc3Rlck9mZnNldCArIGNvZGVCbG9jay0+bnVtVmFyczsKKyAg
ICAKKyAgICByW1Byb2dyYW1Db2RlVGhpc1JlZ2lzdGVyXS51LmpzVmFsdWUgPSB0aGlzT2JqOwor
ICAgIEpTVmFsdWUqIHJlc3VsdCA9IHByaXZhdGVFeGVjdXRlKE5vcm1hbCwgZXhlYywgcmVnaXN0
ZXJGaWxlLCByLCBzY29wZUNoYWluLCBjb2RlQmxvY2ssIGV4Y2VwdGlvbik7CisgICAgCisgICAg
cmVnaXN0ZXJGaWxlLT5zaHJpbmsob2xkU2l6ZSk7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworSlNWYWx1ZSogTWFjaGluZTo6ZXhlY3V0ZShFdmFsTm9kZSogZXZhbE5vZGUsIEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIFJlZ2lzdGVyRmlsZVN0YWNrKiByZWdpc3Rl
ckZpbGVTdGFjaywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hhaW4sIEpTVmFsdWUqKiBleGNlcHRp
b24pCit7CisgICAgUmVnaXN0ZXJGaWxlKiByZWdpc3RlckZpbGUgPSByZWdpc3RlckZpbGVTdGFj
ay0+Y3VycmVudCgpOworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gJmV2YWxOb2RlLT5jb2Rl
KHNjb3BlQ2hhaW4pOworCisgICAgc2l6ZV90IG9sZFNpemUgPSByZWdpc3RlckZpbGUtPnNpemUo
KTsKKyAgICBzaXplX3QgbmV3U2l6ZSA9IG9sZFNpemUgKyBjb2RlQmxvY2stPm51bVZhcnMgKyBj
b2RlQmxvY2stPm51bVRlbXBvcmFyaWVzOworICAgIHJlZ2lzdGVyRmlsZS0+Z3JvdyhuZXdTaXpl
KTsKKyAgICBSZWdpc3RlciogciA9ICgqcmVnaXN0ZXJGaWxlLT5iYXNlUG9pbnRlcigpKSArIG9s
ZFNpemUgKyBjb2RlQmxvY2stPm51bVZhcnM7CisgICAgCisgICAgcltQcm9ncmFtQ29kZVRoaXNS
ZWdpc3Rlcl0udS5qc1ZhbHVlID0gdGhpc09iajsKKyAgICBKU1ZhbHVlKiByZXN1bHQgPSBwcml2
YXRlRXhlY3V0ZShOb3JtYWwsIGV4ZWMsIHJlZ2lzdGVyRmlsZSwgciwgc2NvcGVDaGFpbiwgY29k
ZUJsb2NrLCBleGNlcHRpb24pOworICAgIAorICAgIHJlZ2lzdGVyRmlsZS0+c2hyaW5rKG9sZFNp
emUpOworICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEpTVmFsdWUqIE1hY2hpbmU6OnBy
aXZhdGVFeGVjdXRlKEV4ZWN1dGlvbkZsYWcgZmxhZywgRXhlY1N0YXRlKiBleGVjLCBSZWdpc3Rl
ckZpbGUqIHJlZ2lzdGVyRmlsZSwgUmVnaXN0ZXIqIHIsIFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNo
YWluLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSoqIGV4Y2VwdGlvbikKIHsKICAgICAv
LyBPbmUtdGltZSBpbml0aWFsaXphdGlvbiBvZiBvdXIgYWRkcmVzcyB0YWJsZXMuIFdlIGhhdmUg
dG8gcHV0IHRoaXMgY29kZQpAQCAtNTY2LDcgKzYyNyw4IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnBy
aXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgICAgICAgICBGT1JfRUFDSF9PUENPREVfSUQo
QUREX09QQ09ERV9JRCk7CiAgICAgICAgICAgICAjdW5kZWYgQUREX09QQ09ERQogICAgICAgICAg
ICAgQVNTRVJUKG1fb3Bjb2RlSURUYWJsZS5zaXplKCkgPT0gbnVtT3Bjb2RlSURzKTsKLSAgICAg
ICAgICAgIHRocm93VGFyZ2V0ID0gJiZnY2NfZGVwZW5kZW5jeV9oYWNrOworICAgICAgICAgICAg
b3BfdGhyb3dfZW5kX2luZGlyZWN0ID0gJiZvcF90aHJvd19lbmQ7CisgICAgICAgICAgICBvcF9j
YWxsX2luZGlyZWN0ID0gJiZvcF9jYWxsOwogICAgICAgICAjZW5kaWYgLy8gSEFWRShDT01QVVRF
RF9HT1RPKQogICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC0xMTAwLDYgKzExNjIsNDIgQEAg
SlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICArK3ZQQzsK
ICAgICAgICAgTkVYVF9PUENPREU7CiAgICAgfQorICAgIEJFR0lOX09QQ09ERShvcF9jYWxsX2V2
YWwpIHsKKyAgICAgICAgaW50IHIwID0gKCsrdlBDKS0+dS5vcGVyYW5kOworICAgICAgICBpbnQg
cjEgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CisgICAgICAgIGludCByMiA9ICgrK3ZQQyktPnUub3Bl
cmFuZDsKKyAgICAgICAgaW50IGFyZ3YgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CisgICAgICAgIGlu
dCBhcmdjID0gKCsrdlBDKS0+dS5vcGVyYW5kOworCisgICAgICAgIEpTVmFsdWUqIHYgPSByW3Ix
XS51LmpzVmFsdWU7CisgICAgICAgIEpTVmFsdWUqIGJhc2UgPSByW3IyXS51LmpzVmFsdWU7Cisg
ICAgICAgIAorICAgICAgICBpZiAoYmFzZSA9PSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkg
JiYgdiA9PSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmV2YWxGdW5jdGlvbigpKSB7Cisg
ICAgICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSByIC0gKCpyZWdpc3RlckJhc2UpOworCisg
ICAgICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBldmFsKGV4ZWMsIHN0YXRpY19jYXN0PEpTT2Jq
ZWN0Kj4oYmFzZSksIHNjb3BlQ2hhaW4sIHJlZ2lzdGVyRmlsZSwgciwgYXJndiwgYXJnYywgZXhj
ZXB0aW9uVmFsdWUpOworICAgICAgICAgICAgaWYgKGV4Y2VwdGlvblZhbHVlKQorICAgICAgICAg
ICAgICAgIGdvdG8gaW50ZXJuYWxfdGhyb3c7CisKKyAgICAgICAgICAgIHIgPSAoKnJlZ2lzdGVy
QmFzZSkgKyByZWdpc3Rlck9mZnNldDsKKyAgICAgICAgICAgIHJbcjBdLnUuanNWYWx1ZSA9IHJl
c3VsdDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgKyt2UEM7CisgICAgICAgICAgICBORVhU
X09QQ09ERTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gV2UgZGlkbid0IGZpbmQg
dGhlIGJsZXNzZWQgdmVyc2lvbiBvZiBldmFsLCBzbyByZXNldCB2UEMgYW5kIHByb2Nlc3MKKyAg
ICAgICAgLy8gdGhpcyBpbnN0cnVjdGlvbiBhcyBhIG5vcm1hbCBmdW5jdGlvbiBjYWxsLgorICAg
ICAgICB2UEMgLT0gNTsKKworI2lmIEhBVkUoQ09NUFVURURfR09UTykKKyAgICAgICAgLy8gSGFj
ayBhcm91bmQgZ2NjIHBlcmZvcm1hbmNlIHF1aXJrIGJ5IHBlcmZvcm1pbmcgYW4gaW5kaXJlY3Qg
Z290bworICAgICAgICAvLyBpbiBvcmRlciB0byBzZXQgdGhlIHZQQyAtLSBhdHRlbXB0aW5nIHRv
IGRvIHNvIGRpcmVjdGx5IHJlc3VsdHMgaW4gYQorICAgICAgICAvLyBzaWduaWZpY2FudCByZWdy
ZXNzaW9uLgorICAgICAgICBnb3RvICpvcF9jYWxsX2luZGlyZWN0OyAvLyBpbmRpcmVjdCBnb3Rv
IC0+IG9wX2NhbGwKKyNlbmRpZgorICAgICAgICAvLyBmYWxsIHRocm91Z2ggdG8gb3BfY2FsbAor
ICAgIH0KICAgICBCRUdJTl9PUENPREUob3BfY2FsbCkgewogICAgICAgICBpbnQgcjAgPSAoKyt2
UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAgIGludCByMSA9ICgrK3ZQQyktPnUub3BlcmFuZDsKQEAg
LTEzMjgsOSArMTQyNiw5IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1
dGkKICAgICAgICAgLy8gSGFjayBhcm91bmQgZ2NjIHBlcmZvcm1hbmNlIHF1aXJrIGJ5IHBlcmZv
cm1pbmcgYW4gaW5kaXJlY3QgZ290bwogICAgICAgICAvLyBpbiBvcmRlciB0byBzZXQgdGhlIHZQ
QyAtLSBhdHRlbXB0aW5nIHRvIGRvIHNvIGRpcmVjdGx5IHJlc3VsdHMgaW4gYQogICAgICAgICAv
LyBzaWduaWZpY2FudCByZWdyZXNzaW9uLgotICAgICAgICBnb3RvICp0aHJvd1RhcmdldDsgLy8g
aW5kaXJlY3QgZ290byAtPiBnY2NfZGVwZW5kZW5jeV9oYWNrCisgICAgICAgIGdvdG8gKm9wX3Ro
cm93X2VuZF9pbmRpcmVjdDsgLy8gaW5kaXJlY3QgZ290byAtPiBvcF90aHJvd19lbmQKICAgICB9
Ci0gICAgZ2NjX2RlcGVuZGVuY3lfaGFjazogeworICAgIG9wX3Rocm93X2VuZDogewogI2VuZGlm
CiAKICAgICAgICAgdlBDID0gZXhjZXB0aW9uVGFyZ2V0OwpJbmRleDogVk0vTWFjaGluZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFZNL01hY2hpbmUuaAkocmV2aXNpb24gMzE5ODApCisrKyBWTS9NYWNoaW5l
LmgJKHdvcmtpbmcgY29weSkKQEAgLTgwLDYgKzgwLDggQEAgbmFtZXNwYWNlIEtKUyB7CiAgICAg
ICAgIAogICAgICAgICBKU1ZhbHVlKiBleGVjdXRlKFByb2dyYW1Ob2RlKiwgRXhlY1N0YXRlKiwg
SlNPYmplY3QqIHRoaXNPYmosIFJlZ2lzdGVyRmlsZVN0YWNrKiwgU2NvcGVDaGFpbiosIEpTVmFs
dWUqKiBleGNlcHRpb24pOwogICAgICAgICBKU1ZhbHVlKiBleGVjdXRlKEZ1bmN0aW9uQm9keU5v
ZGUqLCBjb25zdCBMaXN0JiBhcmdzLCBKU09iamVjdCogdGhpc09iaiwgRXhlY1N0YXRlKiwgUmVn
aXN0ZXJGaWxlU3RhY2sqLCBTY29wZUNoYWluKiwgSlNWYWx1ZSoqIGV4Y2VwdGlvbik7CisgICAg
ICAgIEpTVmFsdWUqIGV4ZWN1dGUoRXZhbE5vZGUqLCBFeGVjU3RhdGUqLCBKU09iamVjdCogdGhp
c09iaiwgUmVnaXN0ZXJGaWxlKiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBTY29wZUNoYWluTm9kZSos
IEpTVmFsdWUqKiBleGNlcHRpb24pOworICAgICAgICBKU1ZhbHVlKiBleGVjdXRlKEV2YWxOb2Rl
KiwgRXhlY1N0YXRlKiwgSlNPYmplY3QqIHRoaXNPYmosIFJlZ2lzdGVyRmlsZVN0YWNrKiwgU2Nv
cGVDaGFpbk5vZGUqLCBKU1ZhbHVlKiogZXhjZXB0aW9uKTsKICAgICAgICAgCiAgICAgcHJpdmF0
ZToKICAgICAgICAgdHlwZWRlZiBlbnVtIHsgTm9ybWFsLCBJbml0aWFsaXplQW5kUmV0dXJuIH0g
RXhlY3V0aW9uRmxhZzsKSW5kZXg6IFZNL09wY29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFZNL09wY29k
ZS5oCShyZXZpc2lvbiAzMTk4MCkKKysrIFZNL09wY29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05
NSw2ICs5NSw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICBtYWNybyhvcF9uZXdfZnVuYykg
XAogICAgICAgICBtYWNybyhvcF9uZXdfZnVuY19leHApIFwKICAgICAgICAgbWFjcm8ob3BfY2Fs
bCkgXAorICAgICAgICBtYWNybyhvcF9jYWxsX2V2YWwpIFwKICAgICAgICAgbWFjcm8ob3BfcmV0
KSBcCiAgICAgICAgIFwKICAgICAgICAgbWFjcm8ob3BfY29uc3RydWN0KSBcCkluZGV4OiBranMv
ZnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9mdW5jdGlvbi5jcHAJKHJldmlzaW9uIDMx
OTgwKQorKysga2pzL2Z1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgzLDUyICs2ODMs
NDIgQEAgc3RhdGljIGRvdWJsZSBwYXJzZUZsb2F0KGNvbnN0IFVTdHJpbmcmIAogICAgIHJldHVy
biBzLnRvRG91YmxlKCB0cnVlIC8qdG9sZXJhbnQqLywgZmFsc2UgLyogTmFOIGZvciBlbXB0eSBz
dHJpbmcgKi8gKTsKIH0KIAotSlNWYWx1ZSogZXZhbChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNj
b3BlQ2hhaW4mIHNjb3BlQ2hhaW4sIEpTVmFyaWFibGVPYmplY3QqIHZhcmlhYmxlT2JqZWN0LCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogdGhpc09iaiwgY29uc3QgTGlz
dCYgYXJncykKK0pTVmFsdWUqIGdsb2JhbEZ1bmNFdmFsKEV4ZWNTdGF0ZSogZXhlYywgUHJvdG90
eXBlUmVmbGV4aXZlRnVuY3Rpb24qIGZ1bmN0aW9uLCBKU09iamVjdCogdGhpc09iaiwgY29uc3Qg
TGlzdCYgYXJncykKIHsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gdGhpc09i
ai0+aXNHbG9iYWxPYmplY3QoKSA/IHN0YXRpY19jYXN0PEpTR2xvYmFsT2JqZWN0Kj4odGhpc09i
aikgOiAwOworCisgICAgaWYgKCFnbG9iYWxPYmplY3QgfHwgZ2xvYmFsT2JqZWN0LT5ldmFsRnVu
Y3Rpb24oKSAhPSBmdW5jdGlvbikKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgRXZh
bEVycm9yLCAiVGhlIFwidGhpc1wiIHZhbHVlIHBhc3NlZCB0byBldmFsIG11c3QgYmUgdGhlIGds
b2JhbCBvYmplY3QgZnJvbSB3aGljaCBldmFsIG9yaWdpbmF0ZWQiKTsKKworICAgIFNjb3BlQ2hh
aW4gc2NvcGVDaGFpbihnbG9iYWxPYmplY3QpOworCiAgICAgSlNWYWx1ZSogeCA9IGFyZ3NbMF07
CiAgICAgaWYgKCF4LT5pc1N0cmluZygpKQogICAgICAgICByZXR1cm4geDsKLQorICAgIAogICAg
IFVTdHJpbmcgcyA9IHgtPnRvU3RyaW5nKGV4ZWMpOwotCisgICAgCiAgICAgaW50IHNvdXJjZUlk
OwogICAgIGludCBlcnJMaW5lOwogICAgIFVTdHJpbmcgZXJyTXNnOwogICAgIFJlZlB0cjxFdmFs
Tm9kZT4gZXZhbE5vZGUgPSBwYXJzZXIoKS5wYXJzZTxFdmFsTm9kZT4oVVN0cmluZygpLCAwLCBz
LmRhdGEoKSwgcy5zaXplKCksICZzb3VyY2VJZCwgJmVyckxpbmUsICZlcnJNc2cpOwotCi0gICAg
RGVidWdnZXIqIGRiZyA9IGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+ZGVidWdnZXIoKTsK
LSAgICBpZiAoZGJnKSB7Ci0gICAgICAgIGJvb2wgY29udCA9IGRiZy0+c291cmNlUGFyc2VkKGV4
ZWMsIHNvdXJjZUlkLCBVU3RyaW5nKCksIHMsIDAsIGVyckxpbmUsIGVyck1zZyk7Ci0gICAgICAg
IGlmICghY29udCkKLSAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KLQor
ICAgIAogICAgIGlmICghZXZhbE5vZGUpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMs
IFN5bnRheEVycm9yLCBlcnJNc2csIGVyckxpbmUsIHNvdXJjZUlkLCBOVUxMKTsKLQotICAgIEV2
YWxFeGVjU3RhdGUgbmV3RXhlYyhnbG9iYWxPYmplY3QsIHRoaXNPYmosIGV2YWxOb2RlLmdldCgp
LCBleGVjLCBzY29wZUNoYWluLCB2YXJpYWJsZU9iamVjdCk7Ci0KLSAgICBKU1ZhbHVlKiB2YWx1
ZSA9IGV2YWxOb2RlLT5leGVjdXRlKCZuZXdFeGVjKTsKLQotICAgIGlmIChuZXdFeGVjLmNvbXBs
ZXRpb25UeXBlKCkgPT0gVGhyb3cpIHsKKyAgICAKKyAgICBFdmFsRXhlY1N0YXRlIG5ld0V4ZWMo
Z2xvYmFsT2JqZWN0LCB0aGlzT2JqLCBldmFsTm9kZS5nZXQoKSwgZXhlYywgc2NvcGVDaGFpbiwg
Z2xvYmFsT2JqZWN0KTsKKyAgICAKKyAgICBKU1ZhbHVlKiBleGNlcHRpb24gPSAwOworICAgIEpT
VmFsdWUqIHZhbHVlID0gbWFjaGluZSgpLmV4ZWN1dGUoZXZhbE5vZGUuZ2V0KCksICZuZXdFeGVj
LCB0aGlzT2JqLCAmbmV3RXhlYy5keW5hbWljR2xvYmFsT2JqZWN0KCktPnJlZ2lzdGVyRmlsZVN0
YWNrKCksIHNjb3BlQ2hhaW4ubm9kZSgpLCAmZXhjZXB0aW9uKTsKKyAgICAKKyAgICBpZiAoZXhj
ZXB0aW9uKSB7CiAgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbih2YWx1ZSk7CiAgICAgICAgIHJl
dHVybiB2YWx1ZTsKICAgICB9Ci0KKyAgICAKICAgICByZXR1cm4gdmFsdWUgPyB2YWx1ZSA6IGpz
VW5kZWZpbmVkKCk7CiB9CiAKLUpTVmFsdWUqIGdsb2JhbEZ1bmNFdmFsKEV4ZWNTdGF0ZSogZXhl
YywgUHJvdG90eXBlUmVmbGV4aXZlRnVuY3Rpb24qIGZ1bmN0aW9uLCBKU09iamVjdCogdGhpc09i
aiwgY29uc3QgTGlzdCYgYXJncykKLXsKLSAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
ID0gdGhpc09iai0+aXNHbG9iYWxPYmplY3QoKSA/IHN0YXRpY19jYXN0PEpTR2xvYmFsT2JqZWN0
Kj4odGhpc09iaikgOiAwOwotCi0gICAgaWYgKCFnbG9iYWxPYmplY3QgfHwgZ2xvYmFsT2JqZWN0
LT5ldmFsRnVuY3Rpb24oKSAhPSBmdW5jdGlvbikKLSAgICAgICAgcmV0dXJuIHRocm93RXJyb3Io
ZXhlYywgRXZhbEVycm9yLCAiVGhlIFwidGhpc1wiIHZhbHVlIHBhc3NlZCB0byBldmFsIG11c3Qg
YmUgdGhlIGdsb2JhbCBvYmplY3QgZnJvbSB3aGljaCBldmFsIG9yaWdpbmF0ZWQiKTsKLQotICAg
IFNjb3BlQ2hhaW4gc2NvcGVDaGFpbihnbG9iYWxPYmplY3QpOwotICAgIHJldHVybiBldmFsKGV4
ZWMsIHNjb3BlQ2hhaW4sIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBnbG9iYWxPYmplY3Qs
IGFyZ3MpOwotfQotCiBKU1ZhbHVlKiBnbG9iYWxGdW5jUGFyc2VJbnQoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCosIGNvbnN0IExpc3QmIGFyZ3MpCiB7CiAgICAgcmV0dXJuIGpzTnVtYmVyKHBh
cnNlSW50KGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLCBhcmdzWzFdLT50b0ludDMyKGV4ZWMpKSk7
CkluZGV4OiBranMvZnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvZnVuY3Rpb24uaAkocmV2
aXNpb24gMzE5ODApCisrKyBranMvZnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTY3LDgg
KzE2Nyw2IEBAIG5hbWVzcGFjZSBLSlMgewogICAgIEpTVmFsdWUqIGdsb2JhbEZ1bmNLSlNQcmlu
dChFeGVjU3RhdGUqLCBKU09iamVjdCosIGNvbnN0IExpc3QmKTsKICNlbmRpZgogCi0gICAgSlNW
YWx1ZSogZXZhbChFeGVjU3RhdGUqLCBjb25zdCBTY29wZUNoYWluJiwgSlNWYXJpYWJsZU9iamVj
dCosIEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqIHRoaXNPYmosIGNvbnN0IExpc3QmIGFyZ3Mp
OwotCiAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBtYW50aXNzYU92ZXJmbG93TG93ZXJCb3VuZCA9
IDkwMDcxOTkyNTQ3NDA5OTIuMDsKICAgICBkb3VibGUgcGFyc2VJbnRPdmVyZmxvdyhjb25zdCBj
aGFyKiwgaW50IGxlbmd0aCwgaW50IHJhZGl4KTsKIApJbmRleDoga2pzL25vZGVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBranMvbm9kZXMuY3BwCShyZXZpc2lvbiAzMTk4MCkKKysrIGtqcy9ub2Rlcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNjQsNyArMTI2NCw2IEBAIGlubGluZSBKU1ZhbHVlKiBF
eHByZXNzaW9uTm9kZTo6cmVzb2x2ZUEKICAgICAgICAgICAgIGlmIChjYWxsZXJUeXBlID09IEV2
YWxPcGVyYXRvcikgewogICAgICAgICAgICAgICAgIGlmIChiYXNlID09IGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKSAmJiBmdW5jID09IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+ZXZh
bEZ1bmN0aW9uKCkpIHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBldmFsKGV4ZWMsIGV4ZWMtPnNjb3BlQ2hhaW4o
KSwgZXhlYy0+dmFyaWFibGVPYmplY3QoKSwgZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpLCBl
eGVjLT50aGlzVmFsdWUoKSwgYXJnTGlzdCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgcmV0dXJuIGZ1bmMtPmNhbGwoZXhlYywgdGhpc09iaiwgYXJnTGlz
dCk7CkBAIC0xMjc1LDYgKzEyNzQsMTQgQEAgaW5saW5lIEpTVmFsdWUqIEV4cHJlc3Npb25Ob2Rl
OjpyZXNvbHZlQQogICAgIHJldHVybiB0aHJvd1VuZGVmaW5lZFZhcmlhYmxlRXJyb3IoZXhlYywg
aWRlbnQpOwogfQogCitSZWdpc3RlcklEKiBFdmFsRnVuY3Rpb25DYWxsTm9kZTo6ZW1pdENvZGUo
Q29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCit7CisgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IHIwID0gZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpOworICAgIFJl
Z2lzdGVySUQqIHIxID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOworICAgIGdlbmVyYXRvci5l
bWl0UmVzb2x2ZUJhc2VBbmRQcm9wZXJ0eShyMC5nZXQoKSwgcjEsIENvbW1vbklkZW50aWZpZXJz
OjpzaGFyZWQoKS0+ZXZhbCk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0RXZhbChnZW5lcmF0
b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHIwLmdldCgpKSwgcjEsIHIwLmdldCgpLCBtX2FyZ3Mu
Z2V0KCkpOworfQorCiB2b2lkIEV2YWxGdW5jdGlvbkNhbGxOb2RlOjpvcHRpbWl6ZVZhcmlhYmxl
QWNjZXNzKEV4ZWNTdGF0ZSosIGNvbnN0IFN5bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdl
JiwgTm9kZVN0YWNrJiBub2RlU3RhY2spCiB7CiAgICAgbm9kZVN0YWNrLmFwcGVuZChtX2FyZ3Mu
Z2V0KCkpOwpAQCAtNTU5OSw2ICs1NjA2LDE1IEBAIEV2YWxOb2RlOjp+RXZhbE5vZGUoKQogewog
fQogCitSZWdpc3RlcklEKiBFdmFsTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJh
dG9yLCBSZWdpc3RlcklEKikKK3sKKyAgICBSZWdpc3RlcklEKiByMCA9IHN0YXRlbWVudExpc3RF
bWl0Q29kZShtX2NoaWxkcmVuLCBnZW5lcmF0b3IpOworICAgIGlmICghcjApCisgICAgICAgIHIw
ID0gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwganNVbmRlZmlu
ZWQoKSk7CisgICAgZ2VuZXJhdG9yLmVtaXRFbmQocjApOworICAgIHJldHVybiAwOworfQorCiB2
b2lkIEV2YWxOb2RlOjpnZW5lcmF0ZUNvZGUoU2NvcGVDaGFpbk5vZGUqIHNjKQogewogICAgIFNj
b3BlQ2hhaW4gc2NvcGVDaGFpbihzYyk7CkBAIC01NjA3LDcgKzU2MjMsMTAgQEAgdm9pZCBFdmFs
Tm9kZTo6Z2VuZXJhdGVDb2RlKFNjb3BlQ2hhaW5ObwogICAgIAogICAgIG1fY29kZS5zZXQobmV3
IFByb2dyYW1Db2RlQmxvY2sodXNlc0V2YWwoKSwgbmVlZHNDbG9zdXJlKCksIGdsb2JhbE9iamVj
dCkpOwogICAgIAotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIENvZGVHZW5lcmF0b3Ig
Z2VuZXJhdG9yKHRoaXMsIHNjb3BlQ2hhaW4sIG5ldyBTeW1ib2xUYWJsZSgpLCBtX2NvZGUuZ2V0
KCkpOworICAgIGdlbmVyYXRvci5nZW5lcmF0ZSgpOworCisgICAgbV9jaGlsZHJlbi5zaHJpbmtD
YXBhY2l0eSgwKTsKIH0KIAogRXZhbE5vZGUqIEV2YWxOb2RlOjpjcmVhdGUoU291cmNlRWxlbWVu
dHMqIGNoaWxkcmVuLCBWYXJTdGFjayogdmFyU3RhY2ssIEZ1bmN0aW9uU3RhY2sqIGZ1bmNTdGFj
aywgYm9vbCB1c2VzRXZhbCwgYm9vbCBuZWVkc0Nsb3N1cmUpCkluZGV4OiBranMvbm9kZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBranMvbm9kZXMuaAkocmV2aXNpb24gMzE5ODApCisrKyBranMvbm9kZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtNzk4LDYgKzc5OCw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAg
ICAgICB7CiAgICAgICAgIH0KIAorICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2Rl
KENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEtKU19GQVNUX0NBTEw7CiAgICAgICAg
IHZpcnR1YWwgdm9pZCBvcHRpbWl6ZVZhcmlhYmxlQWNjZXNzKEV4ZWNTdGF0ZSosIGNvbnN0IFN5
bWJvbFRhYmxlJiwgY29uc3QgTG9jYWxTdG9yYWdlJiwgTm9kZVN0YWNrJikgS0pTX0ZBU1RfQ0FM
TDsKICAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiBldmFsdWF0ZShFeGVjU3RhdGUqKSBLSlNfRkFT
VF9DQUxMOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29u
c3QgS0pTX0ZBU1RfQ0FMTDsKQEAgLTI5OTAsNiArMjk5MSw3IEBAIG5hbWVzcGFjZSBLSlMgewog
CiAgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBwcm9jZXNzRGVjbGFyYXRpb25zKEV4ZWNTdGF0
ZSopIEtKU19GQVNUX0NBTEw7CiAgICAgICAgIHZvaWQgZ2VuZXJhdGVDb2RlKFNjb3BlQ2hhaW5O
b2RlKikgS0pTX0ZBU1RfQ0FMTDsKKyAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29k
ZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwogCiAgICAg
ICAgIE93blB0cjxQcm9ncmFtQ29kZUJsb2NrPiBtX2NvZGU7CiAgICAgfTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>20630</attachid>
            <date>2008-04-17 09:53:44 -0700</date>
            <delta_ts>2008-04-17 14:05:51 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch-eval.txt</filename>
            <type>text/plain</type>
            <size>20221</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDMyMDAw
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMDgtMDQt
MTcgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4gYW5kIENhbWVyb24gWndhcmlj
aCAgPGN3endhcmljaEB1d2F0ZXJsb28uY2E+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisgICAgICAgIAorICAgICAgICBCZWhvbGQ6IGV2YWwuCisgICAgICAgIAorICAg
ICAgICBJbnRyb2R1Y2VkIGEgbmV3IG9wY29kZTogb3BfY2FsbF9ldmFsLiBJbiB0aGUgbm9ybWFs
IGNhc2UsIGl0IHBlcmZvcm1zCisgICAgICAgIGFuIGV2YWwuIEluIHRoZSBjYXNlIHdoZXJlIGV2
YWwgaGFzIGJlZW4gb3ZlcnJpZGRlbiBpbiBzb21lIHdheSwgaXQKKyAgICAgICAgcGVyZm9ybXMg
YSBmdW5jdGlvbiBjYWxsLgorCisgICAgICAgICogVk0vQ29kZUdlbmVyYXRvci5oOiBBZGRlZCBh
IGZlYXR1cmUgc28gdGhlIGNvZGUgZ2VuZXJhdG9yIGtub3dzIG5vdAorICAgICAgICB0byBvcHRp
bWl6ZWQgbG9jYWxzIGluIGV2YWwgY29kZS4KKyAgICAgICAgCiAyMDA4LTA0LTE3ICBHZW9mZnJl
eSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFjaWVq
IFN0YWNob3dpYWsuCkluZGV4OiBWTS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFZNL0Nv
ZGVCbG9jay5jcHAJKHJldmlzaW9uIDMxOTk1KQorKysgVk0vQ29kZUJsb2NrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDMwLDYgKzQzMCwxNSBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcChFeGVjU3Rh
dGUqIGV4ZWMsIGNvCiAgICAgICAgICAgICBwcmludGYoIlslNGRdIGNhbGxcdFx0JXMsICVzLCAl
cywgJWQsICVkXG4iLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKHIwKS5jX3N0cigpLCByZWdpc3Rl
ck5hbWUocjEpLmNfc3RyKCksIHJlZ2lzdGVyTmFtZShyMikuY19zdHIoKSwgdGVtcENvdW50LCBh
cmdDb3VudCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBjYXNlIG9w
X2NhbGxfZXZhbDogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Cisg
ICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIGludCBy
MiA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHRlbXBDb3VudCA9ICgrK2l0
KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IGFyZ0NvdW50ID0gKCsraXQpLT51Lm9wZXJh
bmQ7CisgICAgICAgICAgICBwcmludGYoIlslNGRdIGV2YWxcdFx0JXMsICVzLCAlcywgJWQsICVk
XG4iLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKHIwKS5jX3N0cigpLCByZWdpc3Rlck5hbWUocjEp
LmNfc3RyKCksIHJlZ2lzdGVyTmFtZShyMikuY19zdHIoKSwgdGVtcENvdW50LCBhcmdDb3VudCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIG9wX3JldDogewog
ICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBwcmlu
dGYoIlslNGRdIHJldFx0XHQlc1xuIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShyMCkuY19zdHIo
KSk7CkluZGV4OiBWTS9Db2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBWTS9Db2RlR2Vu
ZXJhdG9yLmNwcAkocmV2aXNpb24gMzE5OTUpCisrKyBWTS9Db2RlR2VuZXJhdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTYwLDYgKzE2MCw3IEBAIENvZGVHZW5lcmF0b3I6OkNvZGVHZW5lcmF0
b3IoUHJvZ3JhbU5vZGUKICAgICAsIG1fc2NvcGVOb2RlKHByb2dyYW1Ob2RlKQogICAgICwgbV9j
b2RlQmxvY2soY29kZUJsb2NrKQogICAgICwgbV9zY29wZURlcHRoKDApCisgICAgLCBtX2lzRXZh
bENvZGUoZmFsc2UpCiAgICAgLCBtX25leHRWYXIoLTEpCiAgICAgLCBtX3Byb3BlcnR5TmFtZXMo
Q29tbW9uSWRlbnRpZmllcnM6OnNoYXJlZCgpKQogCkBAIC0yMDEsNiArMjAyLDcgQEAgQ29kZUdl
bmVyYXRvcjo6Q29kZUdlbmVyYXRvcihGdW5jdGlvbkJvZAogICAgICwgbV9zY29wZU5vZGUoZnVu
Y3Rpb25Cb2R5KQogICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQogICAgICwgbV9zY29wZURl
cHRoKDApCisgICAgLCBtX2lzRXZhbENvZGUoZmFsc2UpCiAgICAgLCBtX25leHRWYXIoLTEpCiAg
ICAgLCBtX3Byb3BlcnR5TmFtZXMoQ29tbW9uSWRlbnRpZmllcnM6OnNoYXJlZCgpKQogewpAQCAt
MjMxLDYgKzIzMywxOSBAQCBDb2RlR2VuZXJhdG9yOjpDb2RlR2VuZXJhdG9yKEZ1bmN0aW9uQm9k
CiAgICAgfQogfQogCitDb2RlR2VuZXJhdG9yOjpDb2RlR2VuZXJhdG9yKEV2YWxOb2RlKiBldmFs
Tm9kZSwgY29uc3QgU2NvcGVDaGFpbiYgc2NvcGVDaGFpbiwgU3ltYm9sVGFibGUqIHN5bWJvbFRh
YmxlLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICA6IG1fc2NvcGVDaGFpbigmc2NvcGVDaGFp
bikKKyAgICAsIG1fc3ltYm9sVGFibGUoc3ltYm9sVGFibGUpCisgICAgLCBtX3Njb3BlTm9kZShl
dmFsTm9kZSkKKyAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKKyAgICAsIG1fc2NvcGVEZXB0
aCgwKQorICAgICwgbV9pc0V2YWxDb2RlKHRydWUpCisgICAgLCBtX25leHRWYXIoLTEpCisgICAg
LCBtX3Byb3BlcnR5TmFtZXMoQ29tbW9uSWRlbnRpZmllcnM6OnNoYXJlZCgpKQoreworICAgIGFk
ZFZhcihtX3Byb3BlcnR5TmFtZXMtPnRoaXNJZGVudGlmaWVyKTsKK30KKwogdm9pZCBDb2RlR2Vu
ZXJhdG9yOjphZGRQYXJhbWV0ZXIoY29uc3QgSWRlbnRpZmllciYgaWRlbnQpCiB7CiAgICAgLy8g
UGFyYW1ldGVycyBvdmVyd3JpdGUgdmFyIGRlY2xhcmF0aW9ucywgYnV0IG5vdCBmdW5jdGlvbiBk
ZWNsYXJhdGlvbnMsCkBAIC03NjQsNiArNzc5LDE4IEBAIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0
b3I6OmVtaXROZXdGdW5jdGkKIAogUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6ZW1pdENhbGwo
UmVnaXN0ZXJJRCogcjAsIFJlZ2lzdGVySUQqIHIxLCBSZWdpc3RlcklEKiByMiwgQXJndW1lbnRz
Tm9kZSogYXJndW1lbnRzTm9kZSkKIHsKKyAgICByZXR1cm4gZW1pdENhbGwob3BfY2FsbCwgcjAs
IHIxLCByMiwgYXJndW1lbnRzTm9kZSk7Cit9CisKK1JlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6
OmVtaXRDYWxsRXZhbChSZWdpc3RlcklEKiByMCwgUmVnaXN0ZXJJRCogcjEsIFJlZ2lzdGVySUQq
IHIyLCBBcmd1bWVudHNOb2RlKiBhcmd1bWVudHNOb2RlKQoreworICAgIHJldHVybiBlbWl0Q2Fs
bChvcF9jYWxsX2V2YWwsIHIwLCByMSwgcjIsIGFyZ3VtZW50c05vZGUpOworfQorCitSZWdpc3Rl
cklEKiBDb2RlR2VuZXJhdG9yOjplbWl0Q2FsbChPcGNvZGVJRCBvcGNvZGVJRCwgUmVnaXN0ZXJJ
RCogcjAsIFJlZ2lzdGVySUQqIHIxLCBSZWdpc3RlcklEKiByMiwgQXJndW1lbnRzTm9kZSogYXJn
dW1lbnRzTm9kZSkKK3sKKyAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfY2FsbCB8fCBvcGNvZGVJ
RCA9PSBvcF9jYWxsX2V2YWwpOworCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJlZjEgPSByMTsK
ICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVmMiA9IHIyOwogICAgIApAQCAtNzgwLDcgKzgwNyw3
IEBAIFJlZ2lzdGVySUQqIENvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKFJlZ2kKICAgICAgICAgZW1p
dE5vZGUoYXJndi5sYXN0KCkuZ2V0KCksIG4pOwogICAgIH0KIAotICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChtYWNoaW5lKCkuZ2V0T3Bjb2RlKG9wX2NhbGwpKTsKKyAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQobWFjaGluZSgpLmdldE9wY29kZShvcGNvZGVJRCkpOwogICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChyMC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHIxLT5p
bmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocjIgPyByMi0+aW5kZXgoKSA6IG1p
c3NpbmdTeW1ib2xNYXJrZXIoKSk7IC8vIFdlIGVuY29kZSB0aGUgInRoaXMiIHZhbHVlIGluIHRo
ZSBpbnN0cnVjdGlvbiBzdHJlYW0sIHRvIGF2b2lkIGFuIGV4cGxpY2l0IGluc3RydWN0aW9uIGZv
ciBjb3B5aW5nIG9yIGxvYWRpbmcgaXQuCkluZGV4OiBWTS9Db2RlR2VuZXJhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVk0vQ29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiAzMTk5NSkKKysrIFZNL0NvZGVH
ZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsNyBAQCBuYW1lc3BhY2UgS0pT
IHsKICAgICAgICAgCiAgICAgICAgIENvZGVHZW5lcmF0b3IoUHJvZ3JhbU5vZGUqLCBjb25zdCBT
Y29wZUNoYWluJiwgU3ltYm9sVGFibGUqLCBDb2RlQmxvY2sqLCBWYXJTdGFjayYsIEZ1bmN0aW9u
U3RhY2smKTsKICAgICAgICAgQ29kZUdlbmVyYXRvcihGdW5jdGlvbkJvZHlOb2RlKiwgY29uc3Qg
U2NvcGVDaGFpbiYsIFN5bWJvbFRhYmxlKiwgQ29kZUJsb2NrKiwgVmFyU3RhY2smLCBGdW5jdGlv
blN0YWNrJiwgVmVjdG9yPElkZW50aWZpZXI+JiBwYXJhbWV0ZXJzKTsKKyAgICAgICAgQ29kZUdl
bmVyYXRvcihFdmFsTm9kZSosIGNvbnN0IFNjb3BlQ2hhaW4mLCBTeW1ib2xUYWJsZSosIENvZGVC
bG9jayopOwogCiAgICAgICAgIGNvbnN0IENvbW1vbklkZW50aWZpZXJzJiBwcm9wZXJ0eU5hbWVz
KCkgY29uc3QgeyByZXR1cm4gKm1fcHJvcGVydHlOYW1lczsgfQogCkBAIC0xODcsNiArMTg4LDcg
QEAgbmFtZXNwYWNlIEtKUyB7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRQdXRQcm9wSW5kZXgo
UmVnaXN0ZXJJRCogYmFzZSwgdW5zaWduZWQgaW5kZXgsIFJlZ2lzdGVySUQqIHZhbCk7CiAKICAg
ICAgICAgUmVnaXN0ZXJJRCogZW1pdENhbGwoUmVnaXN0ZXJJRCosIFJlZ2lzdGVySUQqLCBSZWdp
c3RlcklEKiwgQXJndW1lbnRzTm9kZSopOworICAgICAgICBSZWdpc3RlcklEKiBlbWl0Q2FsbEV2
YWwoUmVnaXN0ZXJJRCosIFJlZ2lzdGVySUQqLCBSZWdpc3RlcklEKiwgQXJndW1lbnRzTm9kZSop
OwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0UmV0dXJuKFJlZ2lzdGVySUQqKTsKICAgICAgICAg
UmVnaXN0ZXJJRCogZW1pdEVuZChSZWdpc3RlcklEKik7CiAKQEAgLTIyNSw2ICsyMjcsOCBAQCBu
YW1lc3BhY2UgS0pTIHsKIAogICAgICAgICB0eXBlZGVmIEhhc2hNYXA8SlNWYWx1ZSosIHVuc2ln
bmVkLCBEZWZhdWx0SGFzaDxKU1ZhbHVlKj46Okhhc2gsIEpTVmFsdWVIYXNoVHJhaXRzPiBKU1Zh
bHVlTWFwOwogICAgICAgICAKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdENhbGwoT3Bjb2RlSUQs
IFJlZ2lzdGVySUQqLCBSZWdpc3RlcklEKiwgUmVnaXN0ZXJJRCosIEFyZ3VtZW50c05vZGUqKTsK
KwogICAgICAgICAvLyBNYXBzIGEgcmVnaXN0ZXIgaW5kZXggaW4gdGhlIHN5bWJvbCB0YWJsZSB0
byBhIFJlZ2lzdGVySUQgaW5kZXggaW4gbV9sb2NhbHMuCiAgICAgICAgIGludCBsb2NhbHNJbmRl
eChpbnQgcmVnaXN0ZXJJbmRleCkgeyByZXR1cm4gLXJlZ2lzdGVySW5kZXggLSAxOyB9CiAgICAg
ICAgIApAQCAtMjUxLDcgKzI1NSw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICBTeW1ib2xU
YWJsZSYgc3ltYm9sVGFibGUoKSB7IHJldHVybiAqbV9zeW1ib2xUYWJsZTsgfQogICAgICAgICBW
ZWN0b3I8SGFuZGxlckluZm8+JiBleGNlcHRpb25IYW5kbGVycygpIHsgcmV0dXJuIG1fY29kZUJs
b2NrLT5leGNlcHRpb25IYW5kbGVyczsgfQogICAgICAgICAKLSAgICAgICAgYm9vbCBzaG91bGRP
cHRpbWl6ZUxvY2FscygpIHsgcmV0dXJuICFtX3Njb3BlRGVwdGg7IH0KKyAgICAgICAgYm9vbCBz
aG91bGRPcHRpbWl6ZUxvY2FscygpIHsgcmV0dXJuICFtX2lzRXZhbENvZGUgJiYgIW1fc2NvcGVE
ZXB0aDsgfQogCiAgICAgICAgIGNvbnN0IFNjb3BlQ2hhaW4qIG1fc2NvcGVDaGFpbjsKICAgICAg
ICAgU3ltYm9sVGFibGUqIG1fc3ltYm9sVGFibGU7CkBAIC0yNjUsNiArMjY5LDcgQEAgbmFtZXNw
YWNlIEtKUyB7CiAgICAgICAgIFZlY3RvcjxSZWdpc3RlcklELCAxMjg+IG1fdGVtcG9yYXJpZXM7
CiAgICAgICAgIFZlY3RvcjxMYWJlbElELCAxMjg+IG1fbGFiZWxzOwogICAgICAgICBpbnQgbV9z
Y29wZURlcHRoOworICAgICAgICBib29sIG1faXNFdmFsQ29kZTsKICAgICAgICAgCiAgICAgICAg
IFZlY3RvcjxKdW1wQ29udGV4dD4gbV9qdW1wQ29udGV4dFN0YWNrOwogCkluZGV4OiBWTS9NYWNo
aW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBWTS9NYWNoaW5lLmNwcAkocmV2aXNpb24gMzE5OTUpCisr
KyBWTS9NYWNoaW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDk1LDggKzQ5NSwzNCBAQCBzdGF0
aWMgTkVWRVJfSU5MSU5FIGJvb2wgaXNOb3RPYmplY3QoRXhlCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKK3N0YXRpYyBORVZFUl9JTkxJTkUgSlNWYWx1ZSogZXZhbChFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiB0aGlzT2JqLCBTY29wZUNoYWluTm9kZSogc2NvcGVDaGFpbiwgUmVnaXN0ZXJGaWxl
KiByZWdpc3RlckZpbGUsIFJlZ2lzdGVyKiByLCBpbnQgYXJndiwgaW50IGFyZ2MsIEpTVmFsdWUq
JiBleGNlcHRpb25WYWx1ZSkKK3sKKyAgICBKU1ZhbHVlKiB4ID0gYXJnYyA+PSAyID8gclthcmd2
ICsgMV0udS5qc1ZhbHVlIDoganNVbmRlZmluZWQoKTsKKyAgICAKKyAgICBVU3RyaW5nIHMgPSB4
LT50b1N0cmluZyhleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICAg
ICAgZXhjZXB0aW9uVmFsdWUgPSBleGVjLT5leGNlcHRpb24oKTsKKyAgICAgICAgZXhlYy0+Y2xl
YXJFeGNlcHRpb24oKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaW50IHNvdXJj
ZUlkOworICAgIGludCBlcnJMaW5lOworICAgIFVTdHJpbmcgZXJyTXNnOworICAgIFJlZlB0cjxF
dmFsTm9kZT4gZXZhbE5vZGUgPSBwYXJzZXIoKS5wYXJzZTxFdmFsTm9kZT4oVVN0cmluZygpLCAw
LCBzLmRhdGEoKSwgcy5zaXplKCksICZzb3VyY2VJZCwgJmVyckxpbmUsICZlcnJNc2cpOworICAg
IAorICAgIGlmICghZXZhbE5vZGUpIHsKKyAgICAgICAgZXhjZXB0aW9uVmFsdWUgPSB0aHJvd0Vy
cm9yKGV4ZWMsIFN5bnRheEVycm9yLCBlcnJNc2csIGVyckxpbmUsIHNvdXJjZUlkLCBOVUxMKTsK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgRXZhbEV4ZWNTdGF0ZSBuZXdFeGVjKGV4
ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSwgdGhpc09iaiwgZXZhbE5vZGUuZ2V0KCksIGV4ZWMs
IGV4ZWMtPnNjb3BlQ2hhaW4oKSwgZXhlYy0+ZHluYW1pY0dsb2JhbE9iamVjdCgpKTsKKyAgICBy
ZXR1cm4gbWFjaGluZSgpLmV4ZWN1dGUoZXZhbE5vZGUuZ2V0KCksICZuZXdFeGVjLCB0aGlzT2Jq
LCByZWdpc3RlckZpbGUsIHIgLSAoKnJlZ2lzdGVyRmlsZS0+YmFzZVBvaW50ZXIoKSkgKyBhcmd2
ICsgYXJnYywgc2NvcGVDaGFpbiwgJmV4Y2VwdGlvblZhbHVlKTsKK30KKwogI2lmIEhBVkUoQ09N
UFVURURfR09UTykKLXN0YXRpYyB2b2lkKiB0aHJvd1RhcmdldDsKK3N0YXRpYyB2b2lkKiBvcF90
aHJvd19lbmRfaW5kaXJlY3Q7CitzdGF0aWMgdm9pZCogb3BfY2FsbF9pbmRpcmVjdDsKICNlbmRp
ZgogCiBKU1ZhbHVlKiBNYWNoaW5lOjpleGVjdXRlKFByb2dyYW1Ob2RlKiBwcm9ncmFtTm9kZSwg
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogdGhpc09iaiwgUmVnaXN0ZXJGaWxlU3RhY2sqIHJl
Z2lzdGVyRmlsZVN0YWNrLCBTY29wZUNoYWluKiBzY29wZUNoYWluLCBKU1ZhbHVlKiogZXhjZXB0
aW9uKQpAQCAtNTUyLDYgKzU3OCw0MSBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpleGVjdXRlKEZ1bmN0
aW9uQm9keU5vCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorSlNWYWx1ZSogTWFjaGluZTo6ZXhl
Y3V0ZShFdmFsTm9kZSogZXZhbE5vZGUsIEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNP
YmosIFJlZ2lzdGVyRmlsZSogcmVnaXN0ZXJGaWxlLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIFNjb3Bl
Q2hhaW5Ob2RlKiBzY29wZUNoYWluLCBKU1ZhbHVlKiogZXhjZXB0aW9uKQoreworICAgIENvZGVC
bG9jayogY29kZUJsb2NrID0gJmV2YWxOb2RlLT5jb2RlKHNjb3BlQ2hhaW4pOworCisgICAgc2l6
ZV90IG9sZFNpemUgPSByZWdpc3RlckZpbGUtPnNpemUoKTsKKyAgICBzaXplX3QgbmV3U2l6ZSA9
IHJlZ2lzdGVyT2Zmc2V0ICsgY29kZUJsb2NrLT5udW1WYXJzICsgY29kZUJsb2NrLT5udW1UZW1w
b3JhcmllczsKKyAgICByZWdpc3RlckZpbGUtPmdyb3cobmV3U2l6ZSk7CisgICAgUmVnaXN0ZXIq
IHIgPSAoKnJlZ2lzdGVyRmlsZS0+YmFzZVBvaW50ZXIoKSkgKyByZWdpc3Rlck9mZnNldCArIGNv
ZGVCbG9jay0+bnVtVmFyczsKKyAgICAKKyAgICByW1Byb2dyYW1Db2RlVGhpc1JlZ2lzdGVyXS51
LmpzVmFsdWUgPSB0aGlzT2JqOworICAgIEpTVmFsdWUqIHJlc3VsdCA9IHByaXZhdGVFeGVjdXRl
KE5vcm1hbCwgZXhlYywgcmVnaXN0ZXJGaWxlLCByLCBzY29wZUNoYWluLCBjb2RlQmxvY2ssIGV4
Y2VwdGlvbik7CisgICAgCisgICAgcmVnaXN0ZXJGaWxlLT5zaHJpbmsob2xkU2l6ZSk7CisgICAg
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworSlNWYWx1ZSogTWFjaGluZTo6ZXhlY3V0ZShFdmFs
Tm9kZSogZXZhbE5vZGUsIEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIHRoaXNPYmosIFJlZ2lz
dGVyRmlsZVN0YWNrKiByZWdpc3RlckZpbGVTdGFjaywgU2NvcGVDaGFpbk5vZGUqIHNjb3BlQ2hh
aW4sIEpTVmFsdWUqKiBleGNlcHRpb24pCit7CisgICAgUmVnaXN0ZXJGaWxlKiByZWdpc3RlckZp
bGUgPSByZWdpc3RlckZpbGVTdGFjay0+Y3VycmVudCgpOworICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gJmV2YWxOb2RlLT5jb2RlKHNjb3BlQ2hhaW4pOworCisgICAgc2l6ZV90IG9sZFNpemUg
PSByZWdpc3RlckZpbGUtPnNpemUoKTsKKyAgICBzaXplX3QgbmV3U2l6ZSA9IG9sZFNpemUgKyBj
b2RlQmxvY2stPm51bVZhcnMgKyBjb2RlQmxvY2stPm51bVRlbXBvcmFyaWVzOworICAgIHJlZ2lz
dGVyRmlsZS0+Z3JvdyhuZXdTaXplKTsKKyAgICBSZWdpc3RlciogciA9ICgqcmVnaXN0ZXJGaWxl
LT5iYXNlUG9pbnRlcigpKSArIG9sZFNpemUgKyBjb2RlQmxvY2stPm51bVZhcnM7CisgICAgCisg
ICAgcltQcm9ncmFtQ29kZVRoaXNSZWdpc3Rlcl0udS5qc1ZhbHVlID0gdGhpc09iajsKKyAgICBK
U1ZhbHVlKiByZXN1bHQgPSBwcml2YXRlRXhlY3V0ZShOb3JtYWwsIGV4ZWMsIHJlZ2lzdGVyRmls
ZSwgciwgc2NvcGVDaGFpbiwgY29kZUJsb2NrLCBleGNlcHRpb24pOworICAgIAorICAgIHJlZ2lz
dGVyRmlsZS0+c2hyaW5rKG9sZFNpemUpOworICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisK
IEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGlvbkZsYWcgZmxhZywgRXhl
Y1N0YXRlKiBleGVjLCBSZWdpc3RlckZpbGUqIHJlZ2lzdGVyRmlsZSwgUmVnaXN0ZXIqIHIsIFNj
b3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSlNWYWx1ZSoq
IGV4Y2VwdGlvbikKIHsKICAgICAvLyBPbmUtdGltZSBpbml0aWFsaXphdGlvbiBvZiBvdXIgYWRk
cmVzcyB0YWJsZXMuIFdlIGhhdmUgdG8gcHV0IHRoaXMgY29kZQpAQCAtNTY2LDcgKzYyNyw4IEBA
IEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgICAgICAg
ICBGT1JfRUFDSF9PUENPREVfSUQoQUREX09QQ09ERV9JRCk7CiAgICAgICAgICAgICAjdW5kZWYg
QUREX09QQ09ERQogICAgICAgICAgICAgQVNTRVJUKG1fb3Bjb2RlSURUYWJsZS5zaXplKCkgPT0g
bnVtT3Bjb2RlSURzKTsKLSAgICAgICAgICAgIHRocm93VGFyZ2V0ID0gJiZnY2NfZGVwZW5kZW5j
eV9oYWNrOworICAgICAgICAgICAgb3BfdGhyb3dfZW5kX2luZGlyZWN0ID0gJiZvcF90aHJvd19l
bmQ7CisgICAgICAgICAgICBvcF9jYWxsX2luZGlyZWN0ID0gJiZvcF9jYWxsOwogICAgICAgICAj
ZW5kaWYgLy8gSEFWRShDT01QVVRFRF9HT1RPKQogICAgICAgICByZXR1cm4gMDsKICAgICB9CkBA
IC0xMTY3LDYgKzEyMjksNDIgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhl
Y3V0aQogICAgICAgICArK3ZQQzsKICAgICAgICAgTkVYVF9PUENPREU7CiAgICAgfQorICAgIEJF
R0lOX09QQ09ERShvcF9jYWxsX2V2YWwpIHsKKyAgICAgICAgaW50IHIwID0gKCsrdlBDKS0+dS5v
cGVyYW5kOworICAgICAgICBpbnQgcjEgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CisgICAgICAgIGlu
dCByMiA9ICgrK3ZQQyktPnUub3BlcmFuZDsKKyAgICAgICAgaW50IGFyZ3YgPSAoKyt2UEMpLT51
Lm9wZXJhbmQ7CisgICAgICAgIGludCBhcmdjID0gKCsrdlBDKS0+dS5vcGVyYW5kOworCisgICAg
ICAgIEpTVmFsdWUqIHYgPSByW3IxXS51LmpzVmFsdWU7CisgICAgICAgIEpTVmFsdWUqIGJhc2Ug
PSByW3IyXS51LmpzVmFsdWU7CisgICAgICAgIAorICAgICAgICBpZiAoYmFzZSA9PSBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCkgJiYgdiA9PSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkt
PmV2YWxGdW5jdGlvbigpKSB7CisgICAgICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSByIC0g
KCpyZWdpc3RlckJhc2UpOworCisgICAgICAgICAgICBKU1ZhbHVlKiByZXN1bHQgPSBldmFsKGV4
ZWMsIHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oYmFzZSksIHNjb3BlQ2hhaW4sIHJlZ2lzdGVyRmls
ZSwgciwgYXJndiwgYXJnYywgZXhjZXB0aW9uVmFsdWUpOworICAgICAgICAgICAgaWYgKGV4Y2Vw
dGlvblZhbHVlKQorICAgICAgICAgICAgICAgIGdvdG8gdm1fdGhyb3c7CisKKyAgICAgICAgICAg
IHIgPSAoKnJlZ2lzdGVyQmFzZSkgKyByZWdpc3Rlck9mZnNldDsKKyAgICAgICAgICAgIHJbcjBd
LnUuanNWYWx1ZSA9IHJlc3VsdDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgKyt2UEM7Cisg
ICAgICAgICAgICBORVhUX09QQ09ERTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8g
V2UgZGlkbid0IGZpbmQgdGhlIGJsZXNzZWQgdmVyc2lvbiBvZiBldmFsLCBzbyByZXNldCB2UEMg
YW5kIHByb2Nlc3MKKyAgICAgICAgLy8gdGhpcyBpbnN0cnVjdGlvbiBhcyBhIG5vcm1hbCBmdW5j
dGlvbiBjYWxsLgorICAgICAgICB2UEMgLT0gNTsKKworI2lmIEhBVkUoQ09NUFVURURfR09UTykK
KyAgICAgICAgLy8gSGFjayBhcm91bmQgZ2NjIHBlcmZvcm1hbmNlIHF1aXJrIGJ5IHBlcmZvcm1p
bmcgYW4gaW5kaXJlY3QgZ290bworICAgICAgICAvLyBpbiBvcmRlciB0byBzZXQgdGhlIHZQQyAt
LSBhdHRlbXB0aW5nIHRvIGRvIHNvIGRpcmVjdGx5IHJlc3VsdHMgaW4gYQorICAgICAgICAvLyBz
aWduaWZpY2FudCByZWdyZXNzaW9uLgorICAgICAgICBnb3RvICpvcF9jYWxsX2luZGlyZWN0OyAv
LyBpbmRpcmVjdCBnb3RvIC0+IG9wX2NhbGwKKyNlbmRpZgorICAgICAgICAvLyBmYWxsIHRocm91
Z2ggdG8gb3BfY2FsbAorICAgIH0KICAgICBCRUdJTl9PUENPREUob3BfY2FsbCkgewogICAgICAg
ICBpbnQgcjAgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7CiAgICAgICAgIGludCByMSA9ICgrK3ZQQykt
PnUub3BlcmFuZDsKQEAgLTEzOTUsOSArMTQ5Myw5IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZh
dGVFeGVjdXRlKEV4ZWN1dGkKICAgICAgICAgLy8gSGFjayBhcm91bmQgZ2NjIHBlcmZvcm1hbmNl
IHF1aXJrIGJ5IHBlcmZvcm1pbmcgYW4gaW5kaXJlY3QgZ290bwogICAgICAgICAvLyBpbiBvcmRl
ciB0byBzZXQgdGhlIHZQQyAtLSBhdHRlbXB0aW5nIHRvIGRvIHNvIGRpcmVjdGx5IHJlc3VsdHMg
aW4gYQogICAgICAgICAvLyBzaWduaWZpY2FudCByZWdyZXNzaW9uLgotICAgICAgICBnb3RvICp0
aHJvd1RhcmdldDsgLy8gaW5kaXJlY3QgZ290byAtPiBnY2NfZGVwZW5kZW5jeV9oYWNrCisgICAg
ICAgIGdvdG8gKm9wX3Rocm93X2VuZF9pbmRpcmVjdDsgLy8gaW5kaXJlY3QgZ290byAtPiBvcF90
aHJvd19lbmQKICAgICB9Ci0gICAgZ2NjX2RlcGVuZGVuY3lfaGFjazogeworICAgIG9wX3Rocm93
X2VuZDogewogI2VuZGlmCiAKICAgICAgICAgdlBDID0gZXhjZXB0aW9uVGFyZ2V0OwpJbmRleDog
Vk0vTWFjaGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFZNL01hY2hpbmUuaAkocmV2aXNpb24gMzE5OTUp
CisrKyBWTS9NYWNoaW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTgwLDYgKzgwLDggQEAgbmFtZXNw
YWNlIEtKUyB7CiAgICAgICAgIAogICAgICAgICBKU1ZhbHVlKiBleGVjdXRlKFByb2dyYW1Ob2Rl
KiwgRXhlY1N0YXRlKiwgSlNPYmplY3QqIHRoaXNPYmosIFJlZ2lzdGVyRmlsZVN0YWNrKiwgU2Nv
cGVDaGFpbiosIEpTVmFsdWUqKiBleGNlcHRpb24pOwogICAgICAgICBKU1ZhbHVlKiBleGVjdXRl
KEZ1bmN0aW9uQm9keU5vZGUqLCBjb25zdCBMaXN0JiBhcmdzLCBKU09iamVjdCogdGhpc09iaiwg
RXhlY1N0YXRlKiwgUmVnaXN0ZXJGaWxlU3RhY2sqLCBTY29wZUNoYWluKiwgSlNWYWx1ZSoqIGV4
Y2VwdGlvbik7CisgICAgICAgIEpTVmFsdWUqIGV4ZWN1dGUoRXZhbE5vZGUqLCBFeGVjU3RhdGUq
LCBKU09iamVjdCogdGhpc09iaiwgUmVnaXN0ZXJGaWxlKiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBT
Y29wZUNoYWluTm9kZSosIEpTVmFsdWUqKiBleGNlcHRpb24pOworICAgICAgICBKU1ZhbHVlKiBl
eGVjdXRlKEV2YWxOb2RlKiwgRXhlY1N0YXRlKiwgSlNPYmplY3QqIHRoaXNPYmosIFJlZ2lzdGVy
RmlsZVN0YWNrKiwgU2NvcGVDaGFpbk5vZGUqLCBKU1ZhbHVlKiogZXhjZXB0aW9uKTsKICAgICAg
ICAgCiAgICAgcHJpdmF0ZToKICAgICAgICAgdHlwZWRlZiBlbnVtIHsgTm9ybWFsLCBJbml0aWFs
aXplQW5kUmV0dXJuIH0gRXhlY3V0aW9uRmxhZzsKSW5kZXg6IFZNL09wY29kZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFZNL09wY29kZS5oCShyZXZpc2lvbiAzMTk5NSkKKysrIFZNL09wY29kZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC05NSw2ICs5NSw3IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICBtYWNy
byhvcF9uZXdfZnVuYykgXAogICAgICAgICBtYWNybyhvcF9uZXdfZnVuY19leHApIFwKICAgICAg
ICAgbWFjcm8ob3BfY2FsbCkgXAorICAgICAgICBtYWNybyhvcF9jYWxsX2V2YWwpIFwKICAgICAg
ICAgbWFjcm8ob3BfcmV0KSBcCiAgICAgICAgIFwKICAgICAgICAgbWFjcm8ob3BfY29uc3RydWN0
KSBcCkluZGV4OiBranMvZnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9mdW5jdGlvbi5j
cHAJKHJldmlzaW9uIDMxOTk1KQorKysga2pzL2Z1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjgzLDUyICs2ODMsNDIgQEAgc3RhdGljIGRvdWJsZSBwYXJzZUZsb2F0KGNvbnN0IFVTdHJp
bmcmIAogICAgIHJldHVybiBzLnRvRG91YmxlKCB0cnVlIC8qdG9sZXJhbnQqLywgZmFsc2UgLyog
TmFOIGZvciBlbXB0eSBzdHJpbmcgKi8gKTsKIH0KIAotSlNWYWx1ZSogZXZhbChFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IFNjb3BlQ2hhaW4mIHNjb3BlQ2hhaW4sIEpTVmFyaWFibGVPYmplY3QqIHZh
cmlhYmxlT2JqZWN0LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogdGhp
c09iaiwgY29uc3QgTGlzdCYgYXJncykKK0pTVmFsdWUqIGdsb2JhbEZ1bmNFdmFsKEV4ZWNTdGF0
ZSogZXhlYywgUHJvdG90eXBlUmVmbGV4aXZlRnVuY3Rpb24qIGZ1bmN0aW9uLCBKU09iamVjdCog
dGhpc09iaiwgY29uc3QgTGlzdCYgYXJncykKIHsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gdGhpc09iai0+aXNHbG9iYWxPYmplY3QoKSA/IHN0YXRpY19jYXN0PEpTR2xvYmFs
T2JqZWN0Kj4odGhpc09iaikgOiAwOworCisgICAgaWYgKCFnbG9iYWxPYmplY3QgfHwgZ2xvYmFs
T2JqZWN0LT5ldmFsRnVuY3Rpb24oKSAhPSBmdW5jdGlvbikKKyAgICAgICAgcmV0dXJuIHRocm93
RXJyb3IoZXhlYywgRXZhbEVycm9yLCAiVGhlIFwidGhpc1wiIHZhbHVlIHBhc3NlZCB0byBldmFs
IG11c3QgYmUgdGhlIGdsb2JhbCBvYmplY3QgZnJvbSB3aGljaCBldmFsIG9yaWdpbmF0ZWQiKTsK
KworICAgIFNjb3BlQ2hhaW4gc2NvcGVDaGFpbihnbG9iYWxPYmplY3QpOworCiAgICAgSlNWYWx1
ZSogeCA9IGFyZ3NbMF07CiAgICAgaWYgKCF4LT5pc1N0cmluZygpKQogICAgICAgICByZXR1cm4g
eDsKLQorICAgIAogICAgIFVTdHJpbmcgcyA9IHgtPnRvU3RyaW5nKGV4ZWMpOwotCisgICAgCiAg
ICAgaW50IHNvdXJjZUlkOwogICAgIGludCBlcnJMaW5lOwogICAgIFVTdHJpbmcgZXJyTXNnOwog
ICAgIFJlZlB0cjxFdmFsTm9kZT4gZXZhbE5vZGUgPSBwYXJzZXIoKS5wYXJzZTxFdmFsTm9kZT4o
VVN0cmluZygpLCAwLCBzLmRhdGEoKSwgcy5zaXplKCksICZzb3VyY2VJZCwgJmVyckxpbmUsICZl
cnJNc2cpOwotCi0gICAgRGVidWdnZXIqIGRiZyA9IGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3Qo
KS0+ZGVidWdnZXIoKTsKLSAgICBpZiAoZGJnKSB7Ci0gICAgICAgIGJvb2wgY29udCA9IGRiZy0+
c291cmNlUGFyc2VkKGV4ZWMsIHNvdXJjZUlkLCBVU3RyaW5nKCksIHMsIDAsIGVyckxpbmUsIGVy
ck1zZyk7Ci0gICAgICAgIGlmICghY29udCkKLSAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwotICAgIH0KLQorICAgIAogICAgIGlmICghZXZhbE5vZGUpCiAgICAgICAgIHJldHVybiB0
aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yLCBlcnJNc2csIGVyckxpbmUsIHNvdXJjZUlkLCBO
VUxMKTsKLQotICAgIEV2YWxFeGVjU3RhdGUgbmV3RXhlYyhnbG9iYWxPYmplY3QsIHRoaXNPYmos
IGV2YWxOb2RlLmdldCgpLCBleGVjLCBzY29wZUNoYWluLCB2YXJpYWJsZU9iamVjdCk7Ci0KLSAg
ICBKU1ZhbHVlKiB2YWx1ZSA9IGV2YWxOb2RlLT5leGVjdXRlKCZuZXdFeGVjKTsKLQotICAgIGlm
IChuZXdFeGVjLmNvbXBsZXRpb25UeXBlKCkgPT0gVGhyb3cpIHsKLSAgICAgICAgZXhlYy0+c2V0
RXhjZXB0aW9uKHZhbHVlKTsKKyAgICAKKyAgICBFdmFsRXhlY1N0YXRlIG5ld0V4ZWMoZ2xvYmFs
T2JqZWN0LCB0aGlzT2JqLCBldmFsTm9kZS5nZXQoKSwgZXhlYywgc2NvcGVDaGFpbiwgZ2xvYmFs
T2JqZWN0KTsKKyAgICAKKyAgICBKU1ZhbHVlKiBleGNlcHRpb24gPSAwOworICAgIEpTVmFsdWUq
IHZhbHVlID0gbWFjaGluZSgpLmV4ZWN1dGUoZXZhbE5vZGUuZ2V0KCksICZuZXdFeGVjLCB0aGlz
T2JqLCAmbmV3RXhlYy5keW5hbWljR2xvYmFsT2JqZWN0KCktPnJlZ2lzdGVyRmlsZVN0YWNrKCks
IHNjb3BlQ2hhaW4ubm9kZSgpLCAmZXhjZXB0aW9uKTsKKyAgICAKKyAgICBpZiAoZXhjZXB0aW9u
KSB7CisgICAgICAgIGV4ZWMtPnNldEV4Y2VwdGlvbihleGNlcHRpb24pOwogICAgICAgICByZXR1
cm4gdmFsdWU7CiAgICAgfQotCisgICAgCiAgICAgcmV0dXJuIHZhbHVlID8gdmFsdWUgOiBqc1Vu
ZGVmaW5lZCgpOwogfQogCi1KU1ZhbHVlKiBnbG9iYWxGdW5jRXZhbChFeGVjU3RhdGUqIGV4ZWMs
IFByb3RvdHlwZVJlZmxleGl2ZUZ1bmN0aW9uKiBmdW5jdGlvbiwgSlNPYmplY3QqIHRoaXNPYmos
IGNvbnN0IExpc3QmIGFyZ3MpCi17Ci0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IHRoaXNPYmotPmlzR2xvYmFsT2JqZWN0KCkgPyBzdGF0aWNfY2FzdDxKU0dsb2JhbE9iamVjdCo+
KHRoaXNPYmopIDogMDsKLQotICAgIGlmICghZ2xvYmFsT2JqZWN0IHx8IGdsb2JhbE9iamVjdC0+
ZXZhbEZ1bmN0aW9uKCkgIT0gZnVuY3Rpb24pCi0gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4
ZWMsIEV2YWxFcnJvciwgIlRoZSBcInRoaXNcIiB2YWx1ZSBwYXNzZWQgdG8gZXZhbCBtdXN0IGJl
IHRoZSBnbG9iYWwgb2JqZWN0IGZyb20gd2hpY2ggZXZhbCBvcmlnaW5hdGVkIik7Ci0KLSAgICBT
Y29wZUNoYWluIHNjb3BlQ2hhaW4oZ2xvYmFsT2JqZWN0KTsKLSAgICByZXR1cm4gZXZhbChleGVj
LCBzY29wZUNoYWluLCBnbG9iYWxPYmplY3QsIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LCBh
cmdzKTsKLX0KLQogSlNWYWx1ZSogZ2xvYmFsRnVuY1BhcnNlSW50KEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqLCBjb25zdCBMaXN0JiBhcmdzKQogewogICAgIHJldHVybiBqc051bWJlcihwYXJz
ZUludChhcmdzWzBdLT50b1N0cmluZyhleGVjKSwgYXJnc1sxXS0+dG9JbnQzMihleGVjKSkpOwpJ
bmRleDoga2pzL2Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL2Z1bmN0aW9uLmgJKHJldmlz
aW9uIDMxOTk1KQorKysga2pzL2Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2Nyw4ICsx
NjcsNiBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICBKU1ZhbHVlKiBnbG9iYWxGdW5jS0pTUHJpbnQo
RXhlY1N0YXRlKiwgSlNPYmplY3QqLCBjb25zdCBMaXN0Jik7CiAjZW5kaWYKIAotICAgIEpTVmFs
dWUqIGV2YWwoRXhlY1N0YXRlKiwgY29uc3QgU2NvcGVDaGFpbiYsIEpTVmFyaWFibGVPYmplY3Qq
LCBKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiB0aGlzT2JqLCBjb25zdCBMaXN0JiBhcmdzKTsK
LQogICAgIHN0YXRpYyBjb25zdCBkb3VibGUgbWFudGlzc2FPdmVyZmxvd0xvd2VyQm91bmQgPSA5
MDA3MTk5MjU0NzQwOTkyLjA7CiAgICAgZG91YmxlIHBhcnNlSW50T3ZlcmZsb3coY29uc3QgY2hh
ciosIGludCBsZW5ndGgsIGludCByYWRpeCk7CiAKSW5kZXg6IGtqcy9ub2Rlcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0ga2pzL25vZGVzLmNwcAkocmV2aXNpb24gMzE5OTYpCisrKyBranMvbm9kZXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjY0LDcgKzEyNjQsNiBAQCBpbmxpbmUgSlNWYWx1ZSogRXhw
cmVzc2lvbk5vZGU6OnJlc29sdmVBCiAgICAgICAgICAgICBpZiAoY2FsbGVyVHlwZSA9PSBFdmFs
T3BlcmF0b3IpIHsKICAgICAgICAgICAgICAgICBpZiAoYmFzZSA9PSBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCkgJiYgZnVuYyA9PSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmV2YWxG
dW5jdGlvbigpKSB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXZhbChleGVjLCBleGVjLT5zY29wZUNoYWluKCks
IGV4ZWMtPnZhcmlhYmxlT2JqZWN0KCksIGV4ZWMtPmR5bmFtaWNHbG9iYWxPYmplY3QoKSwgZXhl
Yy0+dGhpc1ZhbHVlKCksIGFyZ0xpc3QpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIHJldHVybiBmdW5jLT5jYWxsKGV4ZWMsIHRoaXNPYmosIGFyZ0xpc3Qp
OwpAQCAtMTI3NSw2ICsxMjc0LDE0IEBAIGlubGluZSBKU1ZhbHVlKiBFeHByZXNzaW9uTm9kZTo6
cmVzb2x2ZUEKICAgICByZXR1cm4gdGhyb3dVbmRlZmluZWRWYXJpYWJsZUVycm9yKGV4ZWMsIGlk
ZW50KTsKIH0KIAorUmVnaXN0ZXJJRCogRXZhbEZ1bmN0aW9uQ2FsbE5vZGU6OmVtaXRDb2RlKENv
ZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQoreworICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiByMCA9IGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KTsKKyAgICBSZWdp
c3RlcklEKiByMSA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKyAgICBnZW5lcmF0b3IuZW1p
dFJlc29sdmVCYXNlQW5kRnVuYyhyMC5nZXQoKSwgcjEsIENvbW1vbklkZW50aWZpZXJzOjpzaGFy
ZWQoKS0+ZXZhbCk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbEV2YWwoZ2VuZXJhdG9y
LmZpbmFsRGVzdGluYXRpb24oZHN0LCByMC5nZXQoKSksIHIxLCByMC5nZXQoKSwgbV9hcmdzLmdl
dCgpKTsKK30KKwogdm9pZCBFdmFsRnVuY3Rpb25DYWxsTm9kZTo6b3B0aW1pemVWYXJpYWJsZUFj
Y2VzcyhFeGVjU3RhdGUqLCBjb25zdCBTeW1ib2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYs
IE5vZGVTdGFjayYgbm9kZVN0YWNrKQogewogICAgIG5vZGVTdGFjay5hcHBlbmQobV9hcmdzLmdl
dCgpKTsKQEAgLTU2MDEsNiArNTYwOCwxNSBAQCBFdmFsTm9kZTo6fkV2YWxOb2RlKCkKIHsKIH0K
IAorUmVnaXN0ZXJJRCogRXZhbE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRv
ciwgUmVnaXN0ZXJJRCopCit7CisgICAgUmVnaXN0ZXJJRCogcjAgPSBzdGF0ZW1lbnRMaXN0RW1p
dENvZGUobV9jaGlsZHJlbiwgZ2VuZXJhdG9yKTsKKyAgICBpZiAoIXIwKQorICAgICAgICByMCA9
IGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGpzVW5kZWZpbmVk
KCkpOworICAgIGdlbmVyYXRvci5lbWl0RW5kKHIwKTsKKyAgICByZXR1cm4gMDsKK30KKwogdm9p
ZCBFdmFsTm9kZTo6Z2VuZXJhdGVDb2RlKFNjb3BlQ2hhaW5Ob2RlKiBzYykKIHsKICAgICBTY29w
ZUNoYWluIHNjb3BlQ2hhaW4oc2MpOwpAQCAtNTYwOSw3ICs1NjI1LDEwIEBAIHZvaWQgRXZhbE5v
ZGU6OmdlbmVyYXRlQ29kZShTY29wZUNoYWluTm8KICAgICAKICAgICBtX2NvZGUuc2V0KG5ldyBQ
cm9ncmFtQ29kZUJsb2NrKHVzZXNFdmFsKCksIG5lZWRzQ2xvc3VyZSgpLCBnbG9iYWxPYmplY3Qp
KTsKICAgICAKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBDb2RlR2VuZXJhdG9yIGdl
bmVyYXRvcih0aGlzLCBzY29wZUNoYWluLCBuZXcgU3ltYm9sVGFibGUoKSwgbV9jb2RlLmdldCgp
KTsKKyAgICBnZW5lcmF0b3IuZ2VuZXJhdGUoKTsKKworICAgIG1fY2hpbGRyZW4uc2hyaW5rQ2Fw
YWNpdHkoMCk7CiB9CiAKIEV2YWxOb2RlKiBFdmFsTm9kZTo6Y3JlYXRlKFNvdXJjZUVsZW1lbnRz
KiBjaGlsZHJlbiwgVmFyU3RhY2sqIHZhclN0YWNrLCBGdW5jdGlvblN0YWNrKiBmdW5jU3RhY2ss
IGJvb2wgdXNlc0V2YWwsIGJvb2wgbmVlZHNDbG9zdXJlKQpJbmRleDoga2pzL25vZGVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0ga2pzL25vZGVzLmgJKHJldmlzaW9uIDMxOTk1KQorKysga2pzL25vZGVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTc5OCw2ICs3OTgsNyBAQCBuYW1lc3BhY2UgS0pTIHsKICAgICAg
ICAgewogICAgICAgICB9CiAKKyAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShD
b2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2
aXJ0dWFsIHZvaWQgb3B0aW1pemVWYXJpYWJsZUFjY2VzcyhFeGVjU3RhdGUqLCBjb25zdCBTeW1i
b2xUYWJsZSYsIGNvbnN0IExvY2FsU3RvcmFnZSYsIE5vZGVTdGFjayYpIEtKU19GQVNUX0NBTEw7
CiAgICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogZXZhbHVhdGUoRXhlY1N0YXRlKikgS0pTX0ZBU1Rf
Q0FMTDsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0
IEtKU19GQVNUX0NBTEw7CkBAIC0yOTkwLDYgKzI5OTEsNyBAQCBuYW1lc3BhY2UgS0pTIHsKIAog
ICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgcHJvY2Vzc0RlY2xhcmF0aW9ucyhFeGVjU3RhdGUq
KSBLSlNfRkFTVF9DQUxMOwogICAgICAgICB2b2lkIGdlbmVyYXRlQ29kZShTY29wZUNoYWluTm9k
ZSopIEtKU19GQVNUX0NBTEw7CisgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUo
Q29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgS0pTX0ZBU1RfQ0FMTDsKIAogICAgICAg
ICBPd25QdHI8UHJvZ3JhbUNvZGVCbG9jaz4gbV9jb2RlOwogICAgIH07Cg==
</data>
<flag name="review"
          id="8999"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>