<?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>45134</bug_id>
          
          <creation_ts>2010-09-02 14:55:39 -0700</creation_ts>
          <short_desc>Added statistics sampling and reporting for JavaScriptCore&apos;s RegisterFile and ExecutableAllocator classes</short_desc>
          <delta_ts>2010-10-13 14:16:33 -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>All</rep_platform>
          <op_sys>OS X 10.6</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>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="John Therrell">jtherrell</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>barraclough</cc>
    
    <cc>oliver</cc>
    
    <cc>slewis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>273588</commentid>
    <comment_count>0</comment_count>
    <who name="John Therrell">jtherrell</who>
    <bug_when>2010-09-02 14:55:39 -0700</bug_when>
    <thetext>In JavaScriptCore (cross-platform) :
Added thread-safe committed byte counting and reporting functionality to RegisterFile and ExecutableAllocator. Uses a static bool class member to provide runtime check if statistics collecting is enabled. Added Runtime checks do not impact performance on SunSpider benchmark. Allows for enabling and sampling statistics on release builds without conditional compilation.

In WebKit (mac only) :
Added ability to enable new JavaScriptCore statistics sampling and reporting for RegisterFile and ExecutableAllocator classes. Added reporting of JavaScriptCore&apos;s stack committed memory and JIT code committed memory statistics.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273591</commentid>
    <comment_count>1</comment_count>
      <attachid>66415</attachid>
    <who name="John Therrell">jtherrell</who>
    <bug_when>2010-09-02 14:57:29 -0700</bug_when>
    <thetext>Created attachment 66415
Patch for added memory sampling/reporting for JavaScriptCore</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273595</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-02 15:01:50 -0700</bug_when>
    <thetext>Attachment 66415 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
Last 3072 characters of output:
spaces  [whitespace/tab] [1]
JavaScriptCore/interpreter/RegisterFile.h:203:  Tab found; better to use spaces  [whitespace/tab] [1]
JavaScriptCore/interpreter/RegisterFile.h:204:  Tab found; better to use spaces  [whitespace/tab] [1]
JavaScriptCore/jit/ExecutableAllocator.h:300:  Tab found; better to use spaces  [whitespace/tab] [1]
JavaScriptCore/jit/ExecutableAllocator.h:301:  Tab found; better to use spaces  [whitespace/tab] [1]
JavaScriptCore/jit/ExecutableAllocator.h:304:  Tab found; better to use spaces  [whitespace/tab] [1]
JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp:131:  Tab found; better to use spaces  [whitespace/tab] [1]
JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp:132:  Tab found; better to use spaces  [whitespace/tab] [1]
JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp:138:  Tab found; better to use spaces  [whitespace/tab] [1]
JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp:139:  Tab found; better to use spaces  [whitespace/tab] [1]
JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp:140:  Tab found; better to use spaces  [whitespace/tab] [1]
JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp:345:  Tab found; better to use spaces  [whitespace/tab] [1]
JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp:346:  Tab found; better to use spaces  [whitespace/tab] [1]
JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp:423:  Tab found; better to use spaces  [whitespace/tab] [1]
JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp:424:  Tab found; better to use spaces  [whitespace/tab] [1]
JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp:425:  Tab found; better to use spaces  [whitespace/tab] [1]
JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp:425:  Missing space before {  [whitespace/braces] [5]
JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp:426:  Tab found; better to use spaces  [whitespace/tab] [1]
JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp:427:  Tab found; better to use spaces  [whitespace/tab] [1]
JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp:440:  Tab found; better to use spaces  [whitespace/tab] [1]
JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp:441:  Tab found; better to use spaces  [whitespace/tab] [1]
JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp:443:  Tab found; better to use spaces  [whitespace/tab] [1]
JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp:449:  Tab found; better to use spaces  [whitespace/tab] [1]
JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp:453:  Tab found; better to use spaces  [whitespace/tab] [1]
JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp:454:  Tab found; better to use spaces  [whitespace/tab] [1]
JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp:456:  Tab found; better to use spaces  [whitespace/tab] [1]
JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp:462:  Tab found; better to use spaces  [whitespace/tab] [1]
JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp:464:  Tab found; better to use spaces  [whitespace/tab] [1]
Total errors found: 50 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273970</commentid>
    <comment_count>3</comment_count>
      <attachid>66507</attachid>
    <who name="John Therrell">jtherrell</who>
    <bug_when>2010-09-03 09:12:07 -0700</bug_when>
    <thetext>Created attachment 66507
2nd submission of patch w/ style corrections</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273991</commentid>
    <comment_count>4</comment_count>
      <attachid>66507</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-09-03 10:02:15 -0700</bug_when>
    <thetext>Comment on attachment 66507
2nd submission of patch w/ style corrections

Can you perf test this -- in general we don&apos;t compile in any logging in by default as JSC has a tendency to be heavily sensitive to branches and register load (using a global consumes a register as gcc&apos;s PIC code is not very clever)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273993</commentid>
    <comment_count>5</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-09-03 10:02:50 -0700</bug_when>
    <thetext>whoops didn&apos;t mean to r- this, just meant to get you to test perf numbers</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273998</commentid>
    <comment_count>6</comment_count>
      <attachid>66507</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-09-03 10:04:50 -0700</bug_when>
    <thetext>Comment on attachment 66507
2nd submission of patch w/ style corrections

+        Reviewed by NOBODY (OOPS!).

There should be a bug reference and title in ChangeLog.

&gt; Added Runtime checks do not impact performance on SunSpider benchmark.

SunSpider is what we use for most performance measurements, but adding mutexes and spinlocks isn&apos;t likely to affect it. Locking a mutex is very fast if no one else is holding it, and only parallel execution that&apos;s going to be affected by lock contention.

        static void enableStats() { s_statsEnabled = true; }

I don&apos;t think that this function needs to be inline. &quot;Statistics&quot; should be spelled out, and the name (or at least a comment) should explain what kind of statistics is enabled. We already track lots of memory-related statistics, and this call doesn&apos;t affect most.

It&apos;s not necessarily clear that statistics are only reported for (de)allocations that happen after enabling. It&apos;s particularly unclear and even wrong since totalBytesCommitted() can be negative, but returns a size_t.

+    SpinLockHolder lockHolder(&amp;spinlock);
+    s_totalBytesCommitted += byteCount;

Ideally, this would use a variant of atomicIncrement rather than locking, but the version we have in Atomics.h can only add 1.

We don&apos;t use SpinLock outside of allocator code. It&apos;s part of FastMalloc.

If a Mutex doesn&apos;t give adequate performance, we should probably consider moving SpinLock to a general WTF header.

+        static size_t totalBytesCommitted() { return s_totalBytesCommitted; }

Looking at a shared value also requires locking in general case. A size_t variable may be unaligned or longer than processor word, in which cases reading is not an atomic operation.

+    void addToStats(size_t byteCount)
+    {
+        s_totalBytesCommitted += byteCount;
+    }

Why is it OK to not do locking for FixedVMPoolAllocator? If another lock is expected to be held, I think that we should assert so.

&gt; Index: WebKit/mac/ChangeLog

I don&apos;t know what exactly the requirements are, but I expected to see at least Windows and WebKit2 here, too.

++ (void)enableJavaScriptStatistics
+{
+    RegisterFile::enableStats();
+    ExecutableAllocator::enableStats();
+}

It&apos;s very unclear what statistics this method enables. Who is going to call it, and when?

This is only a low level review, someone more familiar with JSC and allocator code should tell if these are good things to report in general.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274206</commentid>
    <comment_count>7</comment_count>
      <attachid>66553</attachid>
    <who name="John Therrell">jtherrell</who>
    <bug_when>2010-09-03 15:04:38 -0700</bug_when>
    <thetext>Created attachment 66553
Submission of patch with suggested changes added

-Added link to bug in changelogs
-Renamed functions following suggestion in comments. Function naming follows FastMalloc statistics naming convention.
-Add comment to explain requirement to call enableStatistics before any allocations are made in order to reflect accurate, non-negative byte counts.
-Add assertion in FixedVMPoolAllocator that locks are held.
-Removed inline functions following suggestion in comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275527</commentid>
    <comment_count>8</comment_count>
      <attachid>66825</attachid>
    <who name="John Therrell">jtherrell</who>
    <bug_when>2010-09-07 18:49:28 -0700</bug_when>
    <thetext>Created attachment 66825
Revised patch w/ use of Mutex in RegisterFile and runtime enabling/disabling removed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275594</commentid>
    <comment_count>9</comment_count>
    <who name="John Therrell">jtherrell</who>
    <bug_when>2010-09-07 21:07:22 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Created an attachment (id=66825) [details]
&gt; Revised patch w/ use of Mutex in RegisterFile and runtime enabling/disabling removed

Ran performance testing to ensure patch doesn&apos;t impact JSC Performance. Here are the results:

Before patch (SunSpider run 30 times)
--------------------------------------------
Total:                 211.1ms +/- 0.4%
--------------------------------------------

After patch (SunSpider run 30 times)
--------------------------------------------
Total:                 207.5ms +/- 0.4%
--------------------------------------------</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275912</commentid>
    <comment_count>10</comment_count>
      <attachid>66825</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-09-08 10:16:00 -0700</bug_when>
    <thetext>Comment on attachment 66825
Revised patch w/ use of Mutex in RegisterFile and runtime enabling/disabling removed

&gt; +        static size_t s_totalBytesCommitted;
&gt; +        Mutex mutex;

&quot;mutex&quot; is not a good name for the new member variable. It doesn&apos;t convey any meaning, and it should start with &quot;m_&quot;. I&apos;d suggest &quot;m_statisticsMutex&quot;.

But most importantly, the variable it&apos;s protecting is static, so there should be only one instance of the mutex. Locking one mutex has no effect on other instances, so several RegisterFile can currently write into s_totalBytesCommitted simultaneously, which is a problem.

&gt; +        ASSERT(IsHeld(spinlock));

IsHeld() is a member function, so this should be spinlock.IsHeld().

Please make sure that this patch doesn&apos;t break debug builds. Please also run tests in debug builds, so that assertions would have a chance to fire.

&gt; +    void addToStatistics(size_t byteCount)
&gt; +    {
&gt; +        s_totalBytesCommitted += byteCount;
&gt; +    }

The ASSERT() should be where we actually need it to hold - so it&apos;s better to put it here, and not at call site.

+size_t RegisterFile::registerFileStatistics()
+{
+    return s_totalBytesCommitted;
+}
...
&gt; +size_t FixedVMPoolAllocator::fixedVMPoolAllocatorStatistics()
&gt; +{
&gt; +    return s_totalBytesCommitted;
&gt; +}

These should also use locking. Otherwise, we may be reading while another thread writes, and get a partially overwritten value.

&gt; +size_t ExecutableAllocator::executableAllocatorStatistics()
&gt; +{
&gt; +    return FixedVMPoolAllocator::fixedVMPoolAllocatorStatistics();
&gt; +}

I don&apos;t see why two functions are needed. Isn&apos;t just the static version sufficient?

&gt; +    size_t jscStackBytes = RegisterFile::registerFileStatistics();
&gt; +    size_t jscJITBytes = ExecutableAllocator::executableAllocatorStatistics();

It seems like these function names can be further improved. &quot;Statistics&quot; is much less informative than what you have e.g. for these variable names.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276237</commentid>
    <comment_count>11</comment_count>
      <attachid>66979</attachid>
    <who name="John Therrell">jtherrell</who>
    <bug_when>2010-09-08 18:12:09 -0700</bug_when>
    <thetext>Created attachment 66979
Revised patch w/ changes in Mutex use and function renaming

Built both debug and release builds without error. Performance testing via SunSpider confirms no performance regression caused by patch: Ran webkit-tests without issue. Made changes following review earlier this morning.

With Patch: (SunSpider run 30 times)
--------------------------------------------
Total:                 207.6ms +/- 0.3%
--------------------------------------------</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276238</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-08 18:14:38 -0700</bug_when>
    <thetext>Attachment 66979 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp:444:  lock_holder is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 1 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276244</commentid>
    <comment_count>13</comment_count>
      <attachid>66982</attachid>
    <who name="John Therrell">jtherrell</who>
    <bug_when>2010-09-08 18:26:45 -0700</bug_when>
    <thetext>Created attachment 66982
Same patch as above with style error resolved (Revised patch w/ changes in Mutex use and function renaming)

Same patch as above. I only renamed a SpinLockHolder from lock_holder to lockHolder.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276520</commentid>
    <comment_count>14</comment_count>
      <attachid>66982</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-09-09 09:42:55 -0700</bug_when>
    <thetext>Comment on attachment 66982
Same patch as above with style error resolved (Revised patch w/ changes in Mutex use and function renaming)

&gt; +        void addToCommittedByteCount(size_t byteCount);

The argument name is not needed here, it doesn&apos;t add any information. I&apos;m not sure if this is going to build with all compilers - you pass intptr_t to this function, so there is a suspicious signed to unsigned conversion. It&apos;s also confusing that this function takes a size_t, but is frequently called with negative values. I think that the argument can be a long.

&gt; +static FixedVMPoolAllocator* allocator = 0; 

There is a stray space at the end of the line.

Looks good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293706</commentid>
    <comment_count>15</comment_count>
    <who name="Stephanie Lewis">slewis</who>
    <bug_when>2010-10-13 14:16:33 -0700</bug_when>
    <thetext>This was landed by John before he left for the summer


http://trac.webkit.org/projects/webkit/changeset/67130

and related commits:

http://trac.webkit.org/projects/webkit/changeset/67138
http://trac.webkit.org/projects/webkit/changeset/67265</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66415</attachid>
            <date>2010-09-02 14:57:29 -0700</date>
            <delta_ts>2010-09-03 09:12:07 -0700</delta_ts>
            <desc>Patch for added memory sampling/reporting for JavaScriptCore</desc>
            <filename>WebKitStatsPatchFinal.txt</filename>
            <type>text/plain</type>
            <size>13332</size>
            <attacher name="John Therrell">jtherrell</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY2Njg0KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTAtMDktMDIgIEpvaG4gVGhl
cnJlbGwgIDxqdGhlcnJlbGxAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIHRocmVhZC1zYWZlIGNvbW1pdHRlZCBieXRlIGNv
dW50aW5nIGFuZCByZXBvcnRpbmcgZnVuY3Rpb25hbGl0eSB0byBSZWdpc3RlckZpbGUgYW5kCisg
ICAgICAgIEV4ZWN1dGFibGVBbGxvY2F0b3IuIFVzZXMgYSBzdGF0aWMgYm9vbCBjbGFzcyBtZW1i
ZXIgdG8gcHJvdmlkZSBydW50aW1lIGNoZWNrIGlmIHN0YXRpc3RpY3MKKyAgICAgICAgY29sbGVj
dGluZyBpcyBlbmFibGVkLiBBZGRlZCBSdW50aW1lIGNoZWNrcyBkbyBub3QgaW1wYWN0IHBlcmZv
cm1hbmNlIG9uIFN1blNwaWRlciBiZW5jaG1hcmsuCisgICAgICAgIEFsbG93cyBmb3IgZW5hYmxp
bmcgYW5kIHNhbXBsaW5nIHN0YXRpc3RpY3Mgb24gcmVsZWFzZSBidWlsZHMgd2l0aG91dCBjb25k
aXRpb25hbCBjb21waWxhdGlvbi4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLmV4cDoKKyAg
ICAgICAgRXhwb3J0ZWQgbmV3IHN5bWJvbHMgdG8gYWxsb3cgZm9yIFdlYktpdCB0byBnZXQgc3Rh
dHMgZnJvbSBKYXZhU2NyaXB0Q29yZSBjbGFzc2VzLgorCisgICAgICAgICogaW50ZXJwcmV0ZXIv
UmVnaXN0ZXJGaWxlLmNwcDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJGaWxlOjphZGRUb1N0YXRz
KToKKyAgICAgICAgQWRkZWQgZnVuY3Rpb24gd2hpY2ggYWRkcyBjb21taXR0ZWQvZGVjb21taXR0
ZWQgbWVtb3J5IHNpemVzIHRvIGEgc3RhdGljIGNvdW50ZXIgdmFyaWFibGUuCisgICAgICAgIAor
ICAgICAgICAqIGludGVycHJldGVyL1JlZ2lzdGVyRmlsZS5oOgorICAgICAgICBBZGRlZCBmdW5j
dGlvbiBwcm90b3R5cGUgZm9yIGFkZFRvU3RhdHMuCisgICAgICAgIChKU0M6OlJlZ2lzdGVyRmls
ZTo6dG90YWxCeXRlc0NvbW1pdHRlZCk6CisgICAgICAgIEFkZGVkIGZ1bmN0aW9uIHdoaWNoIHJl
dHVybnMgc3RhdGljIGNvdW50ZXIgdmFyaWFibGUgdmFsdWUuCisgICAgICAgIChKU0M6OlJlZ2lz
dGVyRmlsZTo6ZW5hYmxlU3RhdHMpOgorICAgICAgICBBZGRlZCBmdW5jdGlvbiB3aGljaCBlbmFi
bGVzIGNvdW50aW5nIGNvbW1pdHRlZC9kZWNvbW1pdHRlZCBieXRlcy4KKyAgICAgICAgCisgICAg
ICAgICogaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaDoKKyAgICAgICAgQWRkZWQgZnVuY3Rpb24g
cHJvdG90eXBlcyBmb3IgZW5hYmxpbmcgYW5kIHJlY2VpdmluZyBtZW1vcnkgc3RhdGlzdGljcyBz
YW1wbGluZy4KKyAgICAgICAgCisgICAgICAgICogaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhl
ZFZNUG9vbC5jcHA6CisgICAgICAgIChKU0M6OkZpeGVkVk1Qb29sQWxsb2NhdG9yOjp0b3RhbEJ5
dGVzQ29tbWl0dGVkKToKKyAgICAgICAgQWRkZWQgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBzdGF0
aWMgY291bnRlciB2YXJpYWJsZSB2YWx1ZS4KKyAgICAgICAgKEpTQzo6Rml4ZWRWTVBvb2xBbGxv
Y2F0b3I6OmVuYWJsZVN0YXRzKToKKyAgICAgICAgQWRkZWQgZnVuY3Rpb24gd2hpY2ggZW5hYmxl
cyBjb3VudGluZyBjb21taXR0ZWQvZGVjb21taXR0ZWQgYnl0ZXMuCisgICAgICAgIChKU0M6OkZp
eGVkVk1Qb29sQWxsb2NhdG9yOjphZGRUb1N0YXRzKToKKyAgICAgICAgQWRkZWQgZnVuY3Rpb24g
d2hpY2ggYWRkcyBjb21taXR0ZWQvZGVjb21taXR0ZWQgbWVtb3J5IHNpemVzIHRvIGEgc3RhdGlj
IGNvdW50ZXIgdmFyaWFibGUuCisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OnRv
dGFsQnl0ZXNDb21taXR0ZWQpOgorICAgICAgICBGdW5jdGlvbiBwcm92aWRlcyBXZWJLaXQgYWNj
ZXNzIHRvIEZpeGVkVk1Qb29sQWxsb2NhdG9yOjp0b3RhbEJ5dGVzQ29tbWl0dGVkLgorICAgICAg
ICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjplbmFibGVTdGF0cyk6CisgICAgICAgIEZ1bmN0
aW9uIHByb3ZpZGVzIFdlYktpdCBhY2Nlc3MgdG8gRml4ZWRWTVBvb2xBbGxvY2F0b3I6OmVuYWJs
ZVN0YXRzLgorCiAyMDEwLTA5LTAyICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS5leHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUuZXhwCShyZXZpc2lvbiA2NTYzMikKKysrIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLmV4cAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDYgKzEzMSw4IEBAIF9fWk4zSlNDMTJKU0ds
b2JhbERhdGExNHJlc2V0RGF0ZUNhY2hlRXYKIF9fWk4zSlNDMTJKU0dsb2JhbERhdGExNHNoYXJl
ZEluc3RhbmNlRXYKIF9fWk4zSlNDMTJKU0dsb2JhbERhdGE2Y3JlYXRlRU5TXzE1VGhyZWFkU3Rh
Y2tUeXBlRQogX19aTjNKU0MxMkpTR2xvYmFsRGF0YUQxRXYKK19fWk4zSlNDMTJSZWdpc3RlckZp
bGUxNHNfc3RhdHNFbmFibGVkRQorX19aTjNKU0MxMlJlZ2lzdGVyRmlsZTIxc190b3RhbEJ5dGVz
Q29tbWl0dGVkRQogX19aTjNKU0MxMlNhbXBsaW5nVG9vbDVzZXR1cEV2CiBfX1pOM0pTQzEyU21h
bGxTdHJpbmdzMTdjcmVhdGVFbXB0eVN0cmluZ0VQTlNfMTJKU0dsb2JhbERhdGFFCiBfX1pOM0pT
QzEyU21hbGxTdHJpbmdzMjdjcmVhdGVTaW5nbGVDaGFyYWN0ZXJTdHJpbmdFUE5TXzEySlNHbG9i
YWxEYXRhRWgKQEAgLTE5MSw2ICsxOTMsOCBAQCBfX1pOM0pTQzE4UHJvcGVydHlEZXNjcmlwdG9y
MTdkZWZhdWx0QXR0CiBfX1pOM0pTQzE4UHJvcGVydHlEZXNjcmlwdG9yMjFzZXRBY2Nlc3NvckRl
c2NyaXB0b3JFTlNfN0pTVmFsdWVFUzFfagogX19aTjNKU0MxOFByb3BlcnR5RGVzY3JpcHRvcjlz
ZXRHZXR0ZXJFTlNfN0pTVmFsdWVFCiBfX1pOM0pTQzE4UHJvcGVydHlEZXNjcmlwdG9yOXNldFNl
dHRlckVOU183SlNWYWx1ZUUKK19fWk4zSlNDMTlFeGVjdXRhYmxlQWxsb2NhdG9yMTFlbmFibGVT
dGF0c0V2CitfX1pOM0pTQzE5RXhlY3V0YWJsZUFsbG9jYXRvcjE5dG90YWxCeXRlc0NvbW1pdHRl
ZEV2CiBfX1pOM0pTQzE5aW5pdGlhbGl6ZVRocmVhZGluZ0V2CiBfX1pOM0pTQzIwTWFya2VkQXJn
dW1lbnRCdWZmZXIxMHNsb3dBcHBlbmRFTlNfN0pTVmFsdWVFCiBfX1pOM0pTQzIwY3JlYXRlUmVm
ZXJlbmNlRXJyb3JFUE5TXzlFeGVjU3RhdGVFUktOU183VVN0cmluZ0UKSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyRmlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmNwcAkocmV2aXNpb24gNjU2MzIpCisr
KyBKYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3RlckZpbGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCwyMiArMjgsMjkgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IlJlZ2lzdGVyRmlsZS5oIgotCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKKyNpbmNsdWRl
ICJUQ1NwaW5Mb2NrLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCitzaXplX3QgUmVnaXN0ZXJGaWxl
OjpzX3RvdGFsQnl0ZXNDb21taXR0ZWQgPSAwOworYm9vbCBSZWdpc3RlckZpbGU6OnNfc3RhdHNF
bmFibGVkID0gZmFsc2U7CisJCiBSZWdpc3RlckZpbGU6On5SZWdpc3RlckZpbGUoKQogewogICAg
IHZvaWQqIGJhc2UgPSBtX3Jlc2VydmF0aW9uLmJhc2UoKTsKICAgICBtX3Jlc2VydmF0aW9uLmRl
Y29tbWl0KGJhc2UsIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1fY29tbWl0RW5kKSAtIHJl
aW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGJhc2UpKTsKLSAgICBtX3Jlc2VydmF0aW9uLmRlYWxs
b2NhdGUoKTsKKwlpZiAoc19zdGF0c0VuYWJsZWQpCisJCWFkZFRvU3RhdHMoIC0ocmVpbnRlcnBy
ZXRfY2FzdDxpbnRwdHJfdD4obV9jb21taXRFbmQpIC0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJf
dD4oYmFzZSkpICk7CisJbV9yZXNlcnZhdGlvbi5kZWFsbG9jYXRlKCk7CiB9CiAKIHZvaWQgUmVn
aXN0ZXJGaWxlOjpyZWxlYXNlRXhjZXNzQ2FwYWNpdHkoKQogewogICAgIG1fcmVzZXJ2YXRpb24u
ZGVjb21taXQobV9zdGFydCwgcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obV9jb21taXRFbmQp
IC0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obV9zdGFydCkpOwotICAgIG1fY29tbWl0RW5k
ID0gbV9zdGFydDsKKwlpZiAoc19zdGF0c0VuYWJsZWQpCisJCWFkZFRvU3RhdHMoIC0ocmVpbnRl
cnByZXRfY2FzdDxpbnRwdHJfdD4obV9jb21taXRFbmQpIC0gcmVpbnRlcnByZXRfY2FzdDxpbnRw
dHJfdD4obV9zdGFydCkpICk7CisJbV9jb21taXRFbmQgPSBtX3N0YXJ0OwogICAgIG1fbWF4VXNl
ZCA9IG1fc3RhcnQ7CiB9CiAKQEAgLTYyLDQgKzY5LDEyIEBAIEpTR2xvYmFsT2JqZWN0KiBSZWdp
c3RlckZpbGU6Omdsb2JhbE9iamUKICAgICByZXR1cm4gbV9nbG9iYWxPYmplY3QuZ2V0KCk7CiB9
CiAKK3N0YXRpYyBTcGluTG9jayBzcGlubG9jayA9IFNQSU5MT0NLX0lOSVRJQUxJWkVSOworCQor
dm9pZCBSZWdpc3RlckZpbGU6OmFkZFRvU3RhdHMoc2l6ZV90IGJ5dGVDb3VudCkKK3sKKwlTcGlu
TG9ja0hvbGRlciBsb2NrX2hvbGRlcigmc3BpbmxvY2spOworCXNfdG90YWxCeXRlc0NvbW1pdHRl
ZCArPSBieXRlQ291bnQ7Cit9CQkKKwkKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmgJKHJldmlzaW9uIDY1NjMyKQorKysg
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEzMywxMyArMTMzLDE4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAg
dm9pZCBtYXJrR2xvYmFscyhNYXJrU3RhY2smIG1hcmtTdGFjaywgSGVhcCogaGVhcCkgeyBoZWFw
LT5tYXJrQ29uc2VydmF0aXZlbHkobWFya1N0YWNrLCBsYXN0R2xvYmFsKCksIG1fc3RhcnQpOyB9
CiAgICAgICAgIHZvaWQgbWFya0NhbGxGcmFtZXMoTWFya1N0YWNrJiBtYXJrU3RhY2ssIEhlYXAq
IGhlYXApIHsgaGVhcC0+bWFya0NvbnNlcnZhdGl2ZWx5KG1hcmtTdGFjaywgbV9zdGFydCwgbV9l
bmQpOyB9CisJCQorCQlzdGF0aWMgc2l6ZV90IHRvdGFsQnl0ZXNDb21taXR0ZWQoKSB7IHJldHVy
biBzX3RvdGFsQnl0ZXNDb21taXR0ZWQ7IH0KKwkJc3RhdGljIHZvaWQgZW5hYmxlU3RhdHMoKSB7
IHNfc3RhdHNFbmFibGVkID0gdHJ1ZTsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBj
aGVja0FsbG9jYXRlZE9rYXkoYm9vbCBva2F5KTsKLQorCQl2b2lkIGFkZFRvU3RhdHMoc2l6ZV90
IGJ5dGVDb3VudCk7CiAgICAgICAgIHZvaWQgcmVsZWFzZUV4Y2Vzc0NhcGFjaXR5KCk7CiAgICAg
ICAgIHNpemVfdCBtX251bUdsb2JhbHM7CiAgICAgICAgIGNvbnN0IHNpemVfdCBtX21heEdsb2Jh
bHM7CisJCXN0YXRpYyBzaXplX3Qgc190b3RhbEJ5dGVzQ29tbWl0dGVkOworCQlzdGF0aWMgYm9v
bCBzX3N0YXRzRW5hYmxlZDsKICAgICAgICAgUmVnaXN0ZXIqIG1fc3RhcnQ7CiAgICAgICAgIFJl
Z2lzdGVyKiBtX2VuZDsKICAgICAgICAgUmVnaXN0ZXIqIG1fbWF4OwpAQCAtMTY2LDYgKzE3MSw4
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBjaGVja0FsbG9jYXRlZE9rYXkoYmFzZSk7CiAg
ICAgICAgIHNpemVfdCBjb21taXR0ZWRTaXplID0gcm91bmRVcEFsbG9jYXRpb25TaXplKG1heEds
b2JhbHMgKiBzaXplb2YoUmVnaXN0ZXIpLCBjb21taXRTaXplKTsKICAgICAgICAgY2hlY2tBbGxv
Y2F0ZWRPa2F5KG1fcmVzZXJ2YXRpb24uY29tbWl0KGJhc2UsIGNvbW1pdHRlZFNpemUpKTsKKwkJ
aWYgKHNfc3RhdHNFbmFibGVkKQorCQkJYWRkVG9TdGF0cyhjb21taXR0ZWRTaXplKTsKICAgICAg
ICAgbV9jb21taXRFbmQgPSByZWludGVycHJldF9jYXN0X3B0cjxSZWdpc3Rlcio+KHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KGJhc2UpICsgY29tbWl0dGVkU2l6ZSk7CiAgICAgICAgIG1fc3RhcnQg
PSBzdGF0aWNfY2FzdDxSZWdpc3Rlcio+KGJhc2UpICsgbWF4R2xvYmFsczsKICAgICAgICAgbV9l
bmQgPSBtX3N0YXJ0OwpAQCAtMTkzLDYgKzIwMCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBpZiAobmV3RW5kID4gbV9jb21taXRFbmQpIHsKICAgICAgICAgICAgIHNpemVfdCBzaXplID0g
cm91bmRVcEFsbG9jYXRpb25TaXplKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG5ld0VuZCkgLSBy
ZWludGVycHJldF9jYXN0PGNoYXIqPihtX2NvbW1pdEVuZCksIGNvbW1pdFNpemUpOwogICAgICAg
ICAgICAgY2hlY2tBbGxvY2F0ZWRPa2F5KG1fcmVzZXJ2YXRpb24uY29tbWl0KG1fY29tbWl0RW5k
LCBzaXplKSk7CisJCQlpZiAoc19zdGF0c0VuYWJsZWQpCisJCQkJYWRkVG9TdGF0cyhzaXplKTsK
ICAgICAgICAgICAgIG1fY29tbWl0RW5kID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8UmVnaXN0ZXIq
PihyZWludGVycHJldF9jYXN0PGNoYXIqPihtX2NvbW1pdEVuZCkgKyBzaXplKTsKICAgICAgICAg
fQogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgJKHJldmlz
aW9uIDY1NjMyKQorKysgSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtMjk3LDkgKzI5NywxMSBAQCBwdWJsaWM6CiAjZWxzZQogICAgICNl
cnJvciAiVGhlIGNhY2hlRmx1c2ggc3VwcG9ydCBpcyBtaXNzaW5nIG9uIHRoaXMgcGxhdGZvcm0u
IgogI2VuZGlmCisJc3RhdGljIHNpemVfdCB0b3RhbEJ5dGVzQ29tbWl0dGVkKCk7CisJc3RhdGlj
IHZvaWQgZW5hYmxlU3RhdHMoKTsKIAogcHJpdmF0ZToKLQorCQogI2lmIEVOQUJMRShBU1NFTUJM
RVJfV1hfRVhDTFVTSVZFKQogICAgIHN0YXRpYyB2b2lkIHJlcHJvdGVjdFJlZ2lvbih2b2lkKiwg
c2l6ZV90LCBQcm90ZWN0aW9uU2V0aW5nKTsKICNlbmRpZgpJbmRleDogSmF2YVNjcmlwdENvcmUv
aml0L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAJKHJldmlz
aW9uIDY1NjMyKQorKysgSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhl
ZFZNUG9vbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOCwxMiArMTI4LDE2IEBAIGNsYXNzIEZp
eGVkVk1Qb29sQWxsb2NhdG9yCiAgICAgdm9pZCByZWxlYXNlKHZvaWQqIHBvc2l0aW9uLCBzaXpl
X3Qgc2l6ZSkKICAgICB7CiAgICAgICAgIG1fYWxsb2NhdGlvbi5kZWNvbW1pdChwb3NpdGlvbiwg
c2l6ZSk7CisJCWlmIChzX3N0YXRzRW5hYmxlZCkKKwkJCWFkZFRvU3RhdHMoLXNpemUpOwogICAg
IH0KIAogICAgIHZvaWQgcmV1c2Uodm9pZCogcG9zaXRpb24sIHNpemVfdCBzaXplKQogICAgIHsK
ICAgICAgICAgYm9vbCBva2F5ID0gbV9hbGxvY2F0aW9uLmNvbW1pdChwb3NpdGlvbiwgc2l6ZSk7
Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQob2theSwgb2theSk7CisJCUFTU0VSVF9VTlVTRUQob2th
eSwgb2theSk7CisJCWlmIChzX3N0YXRzRW5hYmxlZCkKKwkJCWFkZFRvU3RhdHMoc2l6ZSk7CiAg
ICAgfQogCiAgICAgLy8gQWxsIGFkZGl0aW9uIHRvIHRoZSBmcmVlIGxpc3Qgc2hvdWxkIGdvIHRo
cm91Z2ggdGhpcyBtZXRob2QsIHJhdGhlciB0aGFuCkBAIC0zMzgsNiArMzQyLDggQEAgcHVibGlj
OgogICAgIH0KIAogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuICEhbV9hbGxvY2F0
aW9uOyB9CisJc3RhdGljIHNpemVfdCB0b3RhbEJ5dGVzQ29tbWl0dGVkKCkgeyByZXR1cm4gc190
b3RhbEJ5dGVzQ29tbWl0dGVkOyB9CisJc3RhdGljIHZvaWQgZW5hYmxlU3RhdHMoKSB7IHNfc3Rh
dHNFbmFibGVkID0gdHJ1ZTsgfQogCiBwcml2YXRlOgogICAgIHZvaWQqIGFsbG9jSW50ZXJuYWwo
c2l6ZV90IHNpemUpCkBAIC00MTMsNiArNDE5LDExIEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVy
biBwb2ludGVyID49IG1fYWxsb2NhdGlvbi5iYXNlKCkgJiYgKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KHBvaW50ZXIpICsgc2l6ZSA8PSByZWludGVycHJldF9jYXN0PGNoYXIqPihtX2FsbG9jYXRp
b24uYmFzZSgpKSArIG1fYWxsb2NhdGlvbi5zaXplKCkpOwogICAgIH0KICNlbmRpZgorCQorCXZv
aWQgYWRkVG9TdGF0cyhzaXplX3QgYnl0ZUNvdW50KQorCXsKKwkJc190b3RhbEJ5dGVzQ29tbWl0
dGVkICs9IGJ5dGVDb3VudDsKKwl9CiAKICAgICAvLyBGcmVlZCBzcGFjZSBmcm9tIHRoZSBtb3N0
IGNvbW1vbiBzaXplZCBhbGxvY2F0aW9ucyB3aWxsIGJlIGhlbGQgaW4gdGhpcyBsaXN0LCAuLi4K
ICAgICBjb25zdCBzaXplX3QgbV9jb21tb25TaXplOwpAQCAtNDI1LDE2ICs0MzYsMzEgQEAgcHJp
dmF0ZToKICAgICBzaXplX3QgbV9jb3VudEZyZWVkU2luY2VMYXN0Q29hbGVzY2U7CiAKICAgICBQ
YWdlUmVzZXJ2YXRpb24gbV9hbGxvY2F0aW9uOworCXN0YXRpYyBzaXplX3Qgc190b3RhbEJ5dGVz
Q29tbWl0dGVkOworCXN0YXRpYyBib29sIHNfc3RhdHNFbmFibGVkOwogfTsKKwkKK3NpemVfdCBG
aXhlZFZNUG9vbEFsbG9jYXRvcjo6c190b3RhbEJ5dGVzQ29tbWl0dGVkID0gMDsKK2Jvb2wgRml4
ZWRWTVBvb2xBbGxvY2F0b3I6OnNfc3RhdHNFbmFibGVkID0gZmFsc2U7CiAKK3NpemVfdCBFeGVj
dXRhYmxlQWxsb2NhdG9yOjp0b3RhbEJ5dGVzQ29tbWl0dGVkKCkKK3sKKwlyZXR1cm4gRml4ZWRW
TVBvb2xBbGxvY2F0b3I6OnRvdGFsQnl0ZXNDb21taXR0ZWQoKTsKK30KKwordm9pZCBFeGVjdXRh
YmxlQWxsb2NhdG9yOjplbmFibGVTdGF0cygpCit7CQorCUZpeGVkVk1Qb29sQWxsb2NhdG9yOjpl
bmFibGVTdGF0cygpOworfQorCQogdm9pZCBFeGVjdXRhYmxlQWxsb2NhdG9yOjppbnRpYWxpemVQ
YWdlU2l6ZSgpCiB7CiAgICAgRXhlY3V0YWJsZUFsbG9jYXRvcjo6cGFnZVNpemUgPSBnZXRwYWdl
c2l6ZSgpOwogfQogCi1zdGF0aWMgRml4ZWRWTVBvb2xBbGxvY2F0b3IqIGFsbG9jYXRvciA9IDA7
CitzdGF0aWMgRml4ZWRWTVBvb2xBbGxvY2F0b3IqIGFsbG9jYXRvciA9IDA7CQogc3RhdGljIFNw
aW5Mb2NrIHNwaW5sb2NrID0gU1BJTkxPQ0tfSU5JVElBTElaRVI7Ci0KKwkKIGJvb2wgRXhlY3V0
YWJsZUFsbG9jYXRvcjo6aXNWYWxpZCgpIGNvbnN0CiB7CiAgICAgU3BpbkxvY2tIb2xkZXIgbG9j
a19ob2xkZXIoJnNwaW5sb2NrKTsKSW5kZXg6IFdlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2NjY4NCkKKysrIFdlYktpdC9t
YWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTAtMDktMDIg
IEpvaG4gVGhlcnJlbGwgIDxqdGhlcnJlbGxAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIGFiaWxpdHkgdG8gZW5hYmxlIG5l
dyBKYXZhU2NyaXB0Q29yZSBzdGF0aXN0aWNzIHNhbXBsaW5nIGFuZCByZXBvcnRpbmcgZm9yIFJl
Z2lzdGVyRmlsZQorICAgICAgICBhbmQgRXhlY3V0YWJsZUFsbG9jYXRvciBjbGFzc2VzLiBBZGRl
ZCByZXBvcnRpbmcgb2YgSmF2YVNjcmlwdENvcmUncyBzdGFjayBjb21taXR0ZWQgbWVtb3J5Cisg
ICAgICAgIGFuZCBKSVQgY29kZSBjb21taXR0ZWQgbWVtb3J5IHN0YXRpc3RpY3MuCisKKyAgICAg
ICAgKiBNaXNjL1dlYkNvcmVTdGF0aXN0aWNzLmg6CisgICAgICAgIEFkZGVkIGZ1bmN0aW9uIHBy
b3RvdHlwZSBmb3IgZW5hYmxlSmF2YVNjcmlwdFN0YXRpc3RpY3MuCisgICAgICAgIAorICAgICAg
ICAqIE1pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW06CisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0
aWNzIGVuYWJsZUphdmFTY3JpcHRTdGF0aXN0aWNzXSk6CisgICAgICAgIEFkZGVkIGZ1bmN0aW9u
IHdoaWNoIGVuYWJsZXMgc3RhdGlzdGljcyBjb2xsZWN0aW9uL3JlcG9ydGluZyBmb3IgSmF2YVNj
cmlwdENvcmUgY2xhc3Nlcy4KKyAgICAgICAgKCtbV2ViQ29yZVN0YXRpc3RpY3MgbWVtb3J5U3Rh
dGlzdGljc10pOgorICAgICAgICBBZGRlZCBzdGF0aXN0aWNzIHJlcG9ydGluZyBmb3IgSmF2YVNj
cmlwdENvcmUncyBzdGFjayBhbmQgSklUIGNvZGUgY29tbWl0dGVkIG1lbW9yeSBzdGF0aXN0aWNz
LgorCiAyMDEwLTA5LTAxICBKaWEgUHUgIDxqcHVAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERhbiBCZXJuc3RlaW4uCkluZGV4OiBXZWJLaXQvbWFjL01pc2MvV2ViQ29yZVN0YXRp
c3RpY3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3Mu
aAkocmV2aXNpb24gNjU2MzIpCisrKyBXZWJLaXQvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3Mu
aAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQCBAaW50ZXJmYWNlIFdlYkNvcmVTdGF0
aXN0aWNzIDogTlNPYmplY3QKIAogKyAoTlNBcnJheSAqKXN0YXRpc3RpY3M7CiAKKysgKHZvaWQp
ZW5hYmxlSmF2YVNjcmlwdFN0YXRpc3RpY3M7CiArIChzaXplX3QpamF2YVNjcmlwdE9iamVjdHND
b3VudDsKICsgKHNpemVfdClqYXZhU2NyaXB0R2xvYmFsT2JqZWN0c0NvdW50OwogKyAoc2l6ZV90
KWphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3RzQ291bnQ7CkluZGV4OiBXZWJLaXQvbWFjL01pc2Mv
V2ViQ29yZVN0YXRpc3RpY3MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9NaXNjL1dlYkNv
cmVTdGF0aXN0aWNzLm1tCShyZXZpc2lvbiA2NTYzMikKKysrIFdlYktpdC9tYWMvTWlzYy9XZWJD
b3JlU3RhdGlzdGljcy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksOCBAQAogI2ltcG9y
dCAiV2ViQ29yZVN0YXRpc3RpY3MuaCIKIAogI2ltcG9ydCAiRE9NRWxlbWVudEludGVybmFsLmgi
CisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9SZWdpc3RlckZpbGUuaD4KKyNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0V4ZWN1dGFibGVBbGxvY2F0b3IuaD4KICNpbXBvcnQgIldlYkNhY2hlLmgiCiAj
aW1wb3J0ICJXZWJGcmFtZUludGVybmFsLmgiCiAjaW1wb3J0IDxydW50aW1lL0pTTG9jay5oPgpA
QCAtNTUsNiArNTcsMTIgQEAgKyAoTlNBcnJheSAqKXN0YXRpc3RpY3MKICAgICByZXR1cm4gW1dl
YkNhY2hlIHN0YXRpc3RpY3NdOwogfQogCisrICh2b2lkKWVuYWJsZUphdmFTY3JpcHRTdGF0aXN0
aWNzCit7CisgICAgUmVnaXN0ZXJGaWxlOjplbmFibGVTdGF0cygpOworICAgIEV4ZWN1dGFibGVB
bGxvY2F0b3I6OmVuYWJsZVN0YXRzKCk7Cit9CisKICsgKHNpemVfdClqYXZhU2NyaXB0T2JqZWN0
c0NvdW50CiB7CiAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKQEAgLTE5
NiwxMiArMjA0LDE2IEBAICsgKE5TRGljdGlvbmFyeSAqKW1lbW9yeVN0YXRpc3RpY3MKICAgICBX
VEY6OkZhc3RNYWxsb2NTdGF0aXN0aWNzIGZhc3RNYWxsb2NTdGF0aXN0aWNzID0gV1RGOjpmYXN0
TWFsbG9jU3RhdGlzdGljcygpOwogICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7CiAgICAgSGVhcDo6U3RhdGlzdGljcyBqc0hlYXBTdGF0aXN0aWNzID0gSlNET01XaW5kb3c6
OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLnN0YXRpc3RpY3MoKTsKKyAgICBzaXplX3QganNj
U3RhY2tCeXRlcyA9IFJlZ2lzdGVyRmlsZTo6dG90YWxCeXRlc0NvbW1pdHRlZCgpOworICAgIHNp
emVfdCBqc2NKSVRCeXRlcyA9IEV4ZWN1dGFibGVBbGxvY2F0b3I6OnRvdGFsQnl0ZXNDb21taXR0
ZWQoKTsKICAgICByZXR1cm4gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRL
ZXlzOgogICAgICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoSW50OmZhc3RNYWxsb2NT
dGF0aXN0aWNzLnJlc2VydmVkVk1CeXRlc10sIEAiRmFzdE1hbGxvY1Jlc2VydmVkVk1CeXRlcyIs
CiAgICAgICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6ZmFzdE1hbGxvY1N0YXRp
c3RpY3MuY29tbWl0dGVkVk1CeXRlc10sIEAiRmFzdE1hbGxvY0NvbW1pdHRlZFZNQnl0ZXMiLAog
ICAgICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoSW50OmZhc3RNYWxsb2NTdGF0aXN0
aWNzLmZyZWVMaXN0Qnl0ZXNdLCBAIkZhc3RNYWxsb2NGcmVlTGlzdEJ5dGVzIiwKICAgICAgICAg
ICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpqc0hlYXBTdGF0aXN0aWNzLnNpemVdLCBA
IkphdmFTY3JpcHRIZWFwU2l6ZSIsCiAgICAgICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldp
dGhJbnQ6anNIZWFwU3RhdGlzdGljcy5mcmVlXSwgQCJKYXZhU2NyaXB0RnJlZVNpemUiLAorICAg
ICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoVW5zaWduZWRJbnQ6KHVuc2lnbmVkIGlu
dClqc2NTdGFja0J5dGVzXSwgQCJKYXZhU2NyaXB0U3RhY2tTaXplIiwKKyAgICAgICAgICAgICAg
ICBbTlNOdW1iZXIgbnVtYmVyV2l0aFVuc2lnbmVkSW50Oih1bnNpZ25lZCBpbnQpanNjSklUQnl0
ZXNdLCBAIkphdmFTY3JpcHRKSVRTaXplIiwKICAgICAgICAgICAgIG5pbF07CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66507</attachid>
            <date>2010-09-03 09:12:07 -0700</date>
            <delta_ts>2010-09-03 15:04:38 -0700</delta_ts>
            <desc>2nd submission of patch w/ style corrections</desc>
            <filename>opensource-patch.45134.patch</filename>
            <type>text/plain</type>
            <size>12903</size>
            <attacher name="John Therrell">jtherrell</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY2Njg0KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTAtMDktMDIgIEpvaG4gVGhl
cnJlbGwgIDxqdGhlcnJlbGxAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIHRocmVhZC1zYWZlIGNvbW1pdHRlZCBieXRlIGNv
dW50aW5nIGFuZCByZXBvcnRpbmcgZnVuY3Rpb25hbGl0eSB0byBSZWdpc3RlckZpbGUgYW5kCisg
ICAgICAgIEV4ZWN1dGFibGVBbGxvY2F0b3IuIFVzZXMgYSBzdGF0aWMgYm9vbCBjbGFzcyBtZW1i
ZXIgdG8gcHJvdmlkZSBydW50aW1lIGNoZWNrIGlmIHN0YXRpc3RpY3MKKyAgICAgICAgY29sbGVj
dGluZyBpcyBlbmFibGVkLiBBZGRlZCBSdW50aW1lIGNoZWNrcyBkbyBub3QgaW1wYWN0IHBlcmZv
cm1hbmNlIG9uIFN1blNwaWRlciBiZW5jaG1hcmsuCisgICAgICAgIEFsbG93cyBmb3IgZW5hYmxp
bmcgYW5kIHNhbXBsaW5nIHN0YXRpc3RpY3Mgb24gcmVsZWFzZSBidWlsZHMgd2l0aG91dCBjb25k
aXRpb25hbCBjb21waWxhdGlvbi4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLmV4cDoKKyAg
ICAgICAgRXhwb3J0ZWQgbmV3IHN5bWJvbHMgdG8gYWxsb3cgZm9yIFdlYktpdCB0byBnZXQgc3Rh
dHMgZnJvbSBKYXZhU2NyaXB0Q29yZSBjbGFzc2VzLgorCisgICAgICAgICogaW50ZXJwcmV0ZXIv
UmVnaXN0ZXJGaWxlLmNwcDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJGaWxlOjphZGRUb1N0YXRz
KToKKyAgICAgICAgQWRkZWQgZnVuY3Rpb24gd2hpY2ggYWRkcyBjb21taXR0ZWQvZGVjb21taXR0
ZWQgbWVtb3J5IHNpemVzIHRvIGEgc3RhdGljIGNvdW50ZXIgdmFyaWFibGUuCisgICAgICAgIAor
ICAgICAgICAqIGludGVycHJldGVyL1JlZ2lzdGVyRmlsZS5oOgorICAgICAgICBBZGRlZCBmdW5j
dGlvbiBwcm90b3R5cGUgZm9yIGFkZFRvU3RhdHMuCisgICAgICAgIChKU0M6OlJlZ2lzdGVyRmls
ZTo6dG90YWxCeXRlc0NvbW1pdHRlZCk6CisgICAgICAgIEFkZGVkIGZ1bmN0aW9uIHdoaWNoIHJl
dHVybnMgc3RhdGljIGNvdW50ZXIgdmFyaWFibGUgdmFsdWUuCisgICAgICAgIChKU0M6OlJlZ2lz
dGVyRmlsZTo6ZW5hYmxlU3RhdHMpOgorICAgICAgICBBZGRlZCBmdW5jdGlvbiB3aGljaCBlbmFi
bGVzIGNvdW50aW5nIGNvbW1pdHRlZC9kZWNvbW1pdHRlZCBieXRlcy4KKyAgICAgICAgCisgICAg
ICAgICogaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaDoKKyAgICAgICAgQWRkZWQgZnVuY3Rpb24g
cHJvdG90eXBlcyBmb3IgZW5hYmxpbmcgYW5kIHJlY2VpdmluZyBtZW1vcnkgc3RhdGlzdGljcyBz
YW1wbGluZy4KKyAgICAgICAgCisgICAgICAgICogaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhl
ZFZNUG9vbC5jcHA6CisgICAgICAgIChKU0M6OkZpeGVkVk1Qb29sQWxsb2NhdG9yOjp0b3RhbEJ5
dGVzQ29tbWl0dGVkKToKKyAgICAgICAgQWRkZWQgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBzdGF0
aWMgY291bnRlciB2YXJpYWJsZSB2YWx1ZS4KKyAgICAgICAgKEpTQzo6Rml4ZWRWTVBvb2xBbGxv
Y2F0b3I6OmVuYWJsZVN0YXRzKToKKyAgICAgICAgQWRkZWQgZnVuY3Rpb24gd2hpY2ggZW5hYmxl
cyBjb3VudGluZyBjb21taXR0ZWQvZGVjb21taXR0ZWQgYnl0ZXMuCisgICAgICAgIChKU0M6OkZp
eGVkVk1Qb29sQWxsb2NhdG9yOjphZGRUb1N0YXRzKToKKyAgICAgICAgQWRkZWQgZnVuY3Rpb24g
d2hpY2ggYWRkcyBjb21taXR0ZWQvZGVjb21taXR0ZWQgbWVtb3J5IHNpemVzIHRvIGEgc3RhdGlj
IGNvdW50ZXIgdmFyaWFibGUuCisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OnRv
dGFsQnl0ZXNDb21taXR0ZWQpOgorICAgICAgICBGdW5jdGlvbiBwcm92aWRlcyBXZWJLaXQgYWNj
ZXNzIHRvIEZpeGVkVk1Qb29sQWxsb2NhdG9yOjp0b3RhbEJ5dGVzQ29tbWl0dGVkLgorICAgICAg
ICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjplbmFibGVTdGF0cyk6CisgICAgICAgIEZ1bmN0
aW9uIHByb3ZpZGVzIFdlYktpdCBhY2Nlc3MgdG8gRml4ZWRWTVBvb2xBbGxvY2F0b3I6OmVuYWJs
ZVN0YXRzLgorCiAyMDEwLTA5LTAyICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS5leHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUuZXhwCShyZXZpc2lvbiA2NTYzMikKKysrIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLmV4cAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDYgKzEzMSw4IEBAIF9fWk4zSlNDMTJKU0ds
b2JhbERhdGExNHJlc2V0RGF0ZUNhY2hlRXYKIF9fWk4zSlNDMTJKU0dsb2JhbERhdGExNHNoYXJl
ZEluc3RhbmNlRXYKIF9fWk4zSlNDMTJKU0dsb2JhbERhdGE2Y3JlYXRlRU5TXzE1VGhyZWFkU3Rh
Y2tUeXBlRQogX19aTjNKU0MxMkpTR2xvYmFsRGF0YUQxRXYKK19fWk4zSlNDMTJSZWdpc3RlckZp
bGUxNHNfc3RhdHNFbmFibGVkRQorX19aTjNKU0MxMlJlZ2lzdGVyRmlsZTIxc190b3RhbEJ5dGVz
Q29tbWl0dGVkRQogX19aTjNKU0MxMlNhbXBsaW5nVG9vbDVzZXR1cEV2CiBfX1pOM0pTQzEyU21h
bGxTdHJpbmdzMTdjcmVhdGVFbXB0eVN0cmluZ0VQTlNfMTJKU0dsb2JhbERhdGFFCiBfX1pOM0pT
QzEyU21hbGxTdHJpbmdzMjdjcmVhdGVTaW5nbGVDaGFyYWN0ZXJTdHJpbmdFUE5TXzEySlNHbG9i
YWxEYXRhRWgKQEAgLTE5MSw2ICsxOTMsOCBAQCBfX1pOM0pTQzE4UHJvcGVydHlEZXNjcmlwdG9y
MTdkZWZhdWx0QXR0CiBfX1pOM0pTQzE4UHJvcGVydHlEZXNjcmlwdG9yMjFzZXRBY2Nlc3NvckRl
c2NyaXB0b3JFTlNfN0pTVmFsdWVFUzFfagogX19aTjNKU0MxOFByb3BlcnR5RGVzY3JpcHRvcjlz
ZXRHZXR0ZXJFTlNfN0pTVmFsdWVFCiBfX1pOM0pTQzE4UHJvcGVydHlEZXNjcmlwdG9yOXNldFNl
dHRlckVOU183SlNWYWx1ZUUKK19fWk4zSlNDMTlFeGVjdXRhYmxlQWxsb2NhdG9yMTFlbmFibGVT
dGF0c0V2CitfX1pOM0pTQzE5RXhlY3V0YWJsZUFsbG9jYXRvcjE5dG90YWxCeXRlc0NvbW1pdHRl
ZEV2CiBfX1pOM0pTQzE5aW5pdGlhbGl6ZVRocmVhZGluZ0V2CiBfX1pOM0pTQzIwTWFya2VkQXJn
dW1lbnRCdWZmZXIxMHNsb3dBcHBlbmRFTlNfN0pTVmFsdWVFCiBfX1pOM0pTQzIwY3JlYXRlUmVm
ZXJlbmNlRXJyb3JFUE5TXzlFeGVjU3RhdGVFUktOU183VVN0cmluZ0UKSW5kZXg6IEphdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyRmlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmNwcAkocmV2aXNpb24gNjU2MzIpCisr
KyBKYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3RlckZpbGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCwyMSArMjgsMjggQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IlJlZ2lzdGVyRmlsZS5oIgotCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKKyNpbmNsdWRl
ICJUQ1NwaW5Mb2NrLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCitzaXplX3QgUmVnaXN0ZXJGaWxl
OjpzX3RvdGFsQnl0ZXNDb21taXR0ZWQgPSAwOworYm9vbCBSZWdpc3RlckZpbGU6OnNfc3RhdHNF
bmFibGVkID0gZmFsc2U7CisKIFJlZ2lzdGVyRmlsZTo6flJlZ2lzdGVyRmlsZSgpCiB7CiAgICAg
dm9pZCogYmFzZSA9IG1fcmVzZXJ2YXRpb24uYmFzZSgpOwogICAgIG1fcmVzZXJ2YXRpb24uZGVj
b21taXQoYmFzZSwgcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obV9jb21taXRFbmQpIC0gcmVp
bnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oYmFzZSkpOworICAgIGlmIChzX3N0YXRzRW5hYmxlZCkK
KyAgICAgICAgYWRkVG9TdGF0cygtKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1fY29tbWl0
RW5kKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGJhc2UpKSk7CiAgICAgbV9yZXNlcnZh
dGlvbi5kZWFsbG9jYXRlKCk7CiB9CiAKIHZvaWQgUmVnaXN0ZXJGaWxlOjpyZWxlYXNlRXhjZXNz
Q2FwYWNpdHkoKQogewogICAgIG1fcmVzZXJ2YXRpb24uZGVjb21taXQobV9zdGFydCwgcmVpbnRl
cnByZXRfY2FzdDxpbnRwdHJfdD4obV9jb21taXRFbmQpIC0gcmVpbnRlcnByZXRfY2FzdDxpbnRw
dHJfdD4obV9zdGFydCkpOworICAgIGlmIChzX3N0YXRzRW5hYmxlZCkKKyAgICAgICAgYWRkVG9T
dGF0cygtKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1fY29tbWl0RW5kKSAtIHJlaW50ZXJw
cmV0X2Nhc3Q8aW50cHRyX3Q+KG1fc3RhcnQpKSk7CiAgICAgbV9jb21taXRFbmQgPSBtX3N0YXJ0
OwogICAgIG1fbWF4VXNlZCA9IG1fc3RhcnQ7CiB9CkBAIC02Miw0ICs2OSwxMiBAQCBKU0dsb2Jh
bE9iamVjdCogUmVnaXN0ZXJGaWxlOjpnbG9iYWxPYmplCiAgICAgcmV0dXJuIG1fZ2xvYmFsT2Jq
ZWN0LmdldCgpOwogfQogCitzdGF0aWMgU3BpbkxvY2sgc3BpbmxvY2sgPSBTUElOTE9DS19JTklU
SUFMSVpFUjsKKwordm9pZCBSZWdpc3RlckZpbGU6OmFkZFRvU3RhdHMoc2l6ZV90IGJ5dGVDb3Vu
dCkKK3sKKyAgICBTcGluTG9ja0hvbGRlciBsb2NrSG9sZGVyKCZzcGlubG9jayk7CisgICAgc190
b3RhbEJ5dGVzQ29tbWl0dGVkICs9IGJ5dGVDb3VudDsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlND
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3RlckZpbGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3RlckZpbGUuaAkocmV2aXNp
b24gNjU2MzIpCisrKyBKYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3RlckZpbGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMTM0LDEyICsxMzQsMTcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHZvaWQgbWFya0dsb2JhbHMoTWFya1N0YWNrJiBtYXJrU3RhY2ssIEhlYXAqIGhlYXApIHsg
aGVhcC0+bWFya0NvbnNlcnZhdGl2ZWx5KG1hcmtTdGFjaywgbGFzdEdsb2JhbCgpLCBtX3N0YXJ0
KTsgfQogICAgICAgICB2b2lkIG1hcmtDYWxsRnJhbWVzKE1hcmtTdGFjayYgbWFya1N0YWNrLCBI
ZWFwKiBoZWFwKSB7IGhlYXAtPm1hcmtDb25zZXJ2YXRpdmVseShtYXJrU3RhY2ssIG1fc3RhcnQs
IG1fZW5kKTsgfQogCisgICAgICAgIHN0YXRpYyBzaXplX3QgdG90YWxCeXRlc0NvbW1pdHRlZCgp
IHsgcmV0dXJuIHNfdG90YWxCeXRlc0NvbW1pdHRlZDsgfQorICAgICAgICBzdGF0aWMgdm9pZCBl
bmFibGVTdGF0cygpIHsgc19zdGF0c0VuYWJsZWQgPSB0cnVlOyB9CisKICAgICBwcml2YXRlOgog
ICAgICAgICB2b2lkIGNoZWNrQWxsb2NhdGVkT2theShib29sIG9rYXkpOwotCisgICAgICAgIHZv
aWQgYWRkVG9TdGF0cyhzaXplX3QgYnl0ZUNvdW50KTsKICAgICAgICAgdm9pZCByZWxlYXNlRXhj
ZXNzQ2FwYWNpdHkoKTsKICAgICAgICAgc2l6ZV90IG1fbnVtR2xvYmFsczsKICAgICAgICAgY29u
c3Qgc2l6ZV90IG1fbWF4R2xvYmFsczsKKyAgICAgICAgc3RhdGljIHNpemVfdCBzX3RvdGFsQnl0
ZXNDb21taXR0ZWQ7CisgICAgICAgIHN0YXRpYyBib29sIHNfc3RhdHNFbmFibGVkOwogICAgICAg
ICBSZWdpc3RlciogbV9zdGFydDsKICAgICAgICAgUmVnaXN0ZXIqIG1fZW5kOwogICAgICAgICBS
ZWdpc3RlciogbV9tYXg7CkBAIC0xNjYsNiArMTcxLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIGNoZWNrQWxsb2NhdGVkT2theShiYXNlKTsKICAgICAgICAgc2l6ZV90IGNvbW1pdHRlZFNp
emUgPSByb3VuZFVwQWxsb2NhdGlvblNpemUobWF4R2xvYmFscyAqIHNpemVvZihSZWdpc3Rlciks
IGNvbW1pdFNpemUpOwogICAgICAgICBjaGVja0FsbG9jYXRlZE9rYXkobV9yZXNlcnZhdGlvbi5j
b21taXQoYmFzZSwgY29tbWl0dGVkU2l6ZSkpOworICAgICAgICBpZiAoc19zdGF0c0VuYWJsZWQp
CisgICAgICAgICAgICBhZGRUb1N0YXRzKGNvbW1pdHRlZFNpemUpOwogICAgICAgICBtX2NvbW1p
dEVuZCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPFJlZ2lzdGVyKj4ocmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4oYmFzZSkgKyBjb21taXR0ZWRTaXplKTsKICAgICAgICAgbV9zdGFydCA9IHN0YXRpY19j
YXN0PFJlZ2lzdGVyKj4oYmFzZSkgKyBtYXhHbG9iYWxzOwogICAgICAgICBtX2VuZCA9IG1fc3Rh
cnQ7CkBAIC0xOTMsNiArMjAwLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGlmIChuZXdF
bmQgPiBtX2NvbW1pdEVuZCkgewogICAgICAgICAgICAgc2l6ZV90IHNpemUgPSByb3VuZFVwQWxs
b2NhdGlvblNpemUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obmV3RW5kKSAtIHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KG1fY29tbWl0RW5kKSwgY29tbWl0U2l6ZSk7CiAgICAgICAgICAgICBjaGVj
a0FsbG9jYXRlZE9rYXkobV9yZXNlcnZhdGlvbi5jb21taXQobV9jb21taXRFbmQsIHNpemUpKTsK
KyAgICAgICAgICAgIGlmIChzX3N0YXRzRW5hYmxlZCkKKyAgICAgICAgICAgICAgICBhZGRUb1N0
YXRzKHNpemUpOwogICAgICAgICAgICAgbV9jb21taXRFbmQgPSByZWludGVycHJldF9jYXN0X3B0
cjxSZWdpc3Rlcio+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1fY29tbWl0RW5kKSArIHNpemUp
OwogICAgICAgICB9CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2Nh
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0
b3IuaAkocmV2aXNpb24gNjU2MzIpCisrKyBKYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFs
bG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOTcsNiArMjk3LDggQEAgcHVibGljOgogI2Vs
c2UKICAgICAjZXJyb3IgIlRoZSBjYWNoZUZsdXNoIHN1cHBvcnQgaXMgbWlzc2luZyBvbiB0aGlz
IHBsYXRmb3JtLiIKICNlbmRpZgorICAgIHN0YXRpYyBzaXplX3QgdG90YWxCeXRlc0NvbW1pdHRl
ZCgpOworICAgIHN0YXRpYyB2b2lkIGVuYWJsZVN0YXRzKCk7CiAKIHByaXZhdGU6CiAKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRW
TVBvb2wuY3BwCShyZXZpc2lvbiA2NTYzMikKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRh
YmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsMTIgKzEy
OCwxNiBAQCBjbGFzcyBGaXhlZFZNUG9vbEFsbG9jYXRvcgogICAgIHZvaWQgcmVsZWFzZSh2b2lk
KiBwb3NpdGlvbiwgc2l6ZV90IHNpemUpCiAgICAgewogICAgICAgICBtX2FsbG9jYXRpb24uZGVj
b21taXQocG9zaXRpb24sIHNpemUpOworICAgICAgICBpZiAoc19zdGF0c0VuYWJsZWQpCisgICAg
ICAgICAgICBhZGRUb1N0YXRzKC1zaXplKTsKICAgICB9CiAKICAgICB2b2lkIHJldXNlKHZvaWQq
IHBvc2l0aW9uLCBzaXplX3Qgc2l6ZSkKICAgICB7CiAgICAgICAgIGJvb2wgb2theSA9IG1fYWxs
b2NhdGlvbi5jb21taXQocG9zaXRpb24sIHNpemUpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKG9r
YXksIG9rYXkpOworICAgICAgICBpZiAoc19zdGF0c0VuYWJsZWQpCisgICAgICAgICAgICBhZGRU
b1N0YXRzKHNpemUpOwogICAgIH0KIAogICAgIC8vIEFsbCBhZGRpdGlvbiB0byB0aGUgZnJlZSBs
aXN0IHNob3VsZCBnbyB0aHJvdWdoIHRoaXMgbWV0aG9kLCByYXRoZXIgdGhhbgpAQCAtMzM4LDYg
KzM0Miw4IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJl
dHVybiAhIW1fYWxsb2NhdGlvbjsgfQorICAgIHN0YXRpYyBzaXplX3QgdG90YWxCeXRlc0NvbW1p
dHRlZCgpIHsgcmV0dXJuIHNfdG90YWxCeXRlc0NvbW1pdHRlZDsgfQorICAgIHN0YXRpYyB2b2lk
IGVuYWJsZVN0YXRzKCkgeyBzX3N0YXRzRW5hYmxlZCA9IHRydWU7IH0KIAogcHJpdmF0ZToKICAg
ICB2b2lkKiBhbGxvY0ludGVybmFsKHNpemVfdCBzaXplKQpAQCAtNDE0LDYgKzQyMCwxMSBAQCBw
cml2YXRlOgogICAgIH0KICNlbmRpZgogCisgICAgdm9pZCBhZGRUb1N0YXRzKHNpemVfdCBieXRl
Q291bnQpCisgICAgeworICAgICAgICBzX3RvdGFsQnl0ZXNDb21taXR0ZWQgKz0gYnl0ZUNvdW50
OworICAgIH0KKwogICAgIC8vIEZyZWVkIHNwYWNlIGZyb20gdGhlIG1vc3QgY29tbW9uIHNpemVk
IGFsbG9jYXRpb25zIHdpbGwgYmUgaGVsZCBpbiB0aGlzIGxpc3QsIC4uLgogICAgIGNvbnN0IHNp
emVfdCBtX2NvbW1vblNpemU7CiAgICAgVmVjdG9yPHZvaWQqPiBtX2NvbW1vblNpemVkQWxsb2Nh
dGlvbnM7CkBAIC00MjUsOCArNDM2LDIzIEBAIHByaXZhdGU6CiAgICAgc2l6ZV90IG1fY291bnRG
cmVlZFNpbmNlTGFzdENvYWxlc2NlOwogCiAgICAgUGFnZVJlc2VydmF0aW9uIG1fYWxsb2NhdGlv
bjsKKyAgICBzdGF0aWMgc2l6ZV90IHNfdG90YWxCeXRlc0NvbW1pdHRlZDsKKyAgICBzdGF0aWMg
Ym9vbCBzX3N0YXRzRW5hYmxlZDsKIH07CiAKK3NpemVfdCBGaXhlZFZNUG9vbEFsbG9jYXRvcjo6
c190b3RhbEJ5dGVzQ29tbWl0dGVkID0gMDsKK2Jvb2wgRml4ZWRWTVBvb2xBbGxvY2F0b3I6OnNf
c3RhdHNFbmFibGVkID0gZmFsc2U7CisKK3NpemVfdCBFeGVjdXRhYmxlQWxsb2NhdG9yOjp0b3Rh
bEJ5dGVzQ29tbWl0dGVkKCkKK3sKKyAgICByZXR1cm4gRml4ZWRWTVBvb2xBbGxvY2F0b3I6OnRv
dGFsQnl0ZXNDb21taXR0ZWQoKTsKK30KKwordm9pZCBFeGVjdXRhYmxlQWxsb2NhdG9yOjplbmFi
bGVTdGF0cygpCit7CisgICAgRml4ZWRWTVBvb2xBbGxvY2F0b3I6OmVuYWJsZVN0YXRzKCk7Cit9
CisKIHZvaWQgRXhlY3V0YWJsZUFsbG9jYXRvcjo6aW50aWFsaXplUGFnZVNpemUoKQogewogICAg
IEV4ZWN1dGFibGVBbGxvY2F0b3I6OnBhZ2VTaXplID0gZ2V0cGFnZXNpemUoKTsKSW5kZXg6IFdl
YktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiA2NjY4NCkKKysrIFdlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjAgQEAKKzIwMTAtMDktMDIgIEpvaG4gVGhlcnJlbGwgIDxqdGhlcnJlbGxAYXBw
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZGVkIGFiaWxpdHkgdG8gZW5hYmxlIG5ldyBKYXZhU2NyaXB0Q29yZSBzdGF0aXN0aWNzIHNh
bXBsaW5nIGFuZCByZXBvcnRpbmcgZm9yIFJlZ2lzdGVyRmlsZQorICAgICAgICBhbmQgRXhlY3V0
YWJsZUFsbG9jYXRvciBjbGFzc2VzLiBBZGRlZCByZXBvcnRpbmcgb2YgSmF2YVNjcmlwdENvcmUn
cyBzdGFjayBjb21taXR0ZWQgbWVtb3J5CisgICAgICAgIGFuZCBKSVQgY29kZSBjb21taXR0ZWQg
bWVtb3J5IHN0YXRpc3RpY3MuCisKKyAgICAgICAgKiBNaXNjL1dlYkNvcmVTdGF0aXN0aWNzLmg6
CisgICAgICAgIEFkZGVkIGZ1bmN0aW9uIHByb3RvdHlwZSBmb3IgZW5hYmxlSmF2YVNjcmlwdFN0
YXRpc3RpY3MuCisgICAgICAgIAorICAgICAgICAqIE1pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW06
CisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0aWNzIGVuYWJsZUphdmFTY3JpcHRTdGF0aXN0aWNz
XSk6CisgICAgICAgIEFkZGVkIGZ1bmN0aW9uIHdoaWNoIGVuYWJsZXMgc3RhdGlzdGljcyBjb2xs
ZWN0aW9uL3JlcG9ydGluZyBmb3IgSmF2YVNjcmlwdENvcmUgY2xhc3Nlcy4KKyAgICAgICAgKCtb
V2ViQ29yZVN0YXRpc3RpY3MgbWVtb3J5U3RhdGlzdGljc10pOgorICAgICAgICBBZGRlZCBzdGF0
aXN0aWNzIHJlcG9ydGluZyBmb3IgSmF2YVNjcmlwdENvcmUncyBzdGFjayBhbmQgSklUIGNvZGUg
Y29tbWl0dGVkIG1lbW9yeSBzdGF0aXN0aWNzLgorCiAyMDEwLTA5LTAxICBKaWEgUHUgIDxqcHVA
YXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3RlaW4uCkluZGV4OiBX
ZWJLaXQvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
bWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MuaAkocmV2aXNpb24gNjU2MzIpCisrKyBXZWJLaXQv
bWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgs
NyBAQCBAaW50ZXJmYWNlIFdlYkNvcmVTdGF0aXN0aWNzIDogTlNPYmplY3QKIAogKyAoTlNBcnJh
eSAqKXN0YXRpc3RpY3M7CiAKKysgKHZvaWQpZW5hYmxlSmF2YVNjcmlwdFN0YXRpc3RpY3M7CiAr
IChzaXplX3QpamF2YVNjcmlwdE9iamVjdHNDb3VudDsKICsgKHNpemVfdClqYXZhU2NyaXB0R2xv
YmFsT2JqZWN0c0NvdW50OwogKyAoc2l6ZV90KWphdmFTY3JpcHRQcm90ZWN0ZWRPYmplY3RzQ291
bnQ7CkluZGV4OiBXZWJLaXQvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tCShyZXZpc2lvbiA2NTYz
MikKKysrIFdlYktpdC9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMjksNiArMjksOCBAQAogI2ltcG9ydCAiV2ViQ29yZVN0YXRpc3RpY3MuaCIKIAogI2lt
cG9ydCAiRE9NRWxlbWVudEludGVybmFsLmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9SZWdp
c3RlckZpbGUuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0V4ZWN1dGFibGVBbGxvY2F0b3Iu
aD4KICNpbXBvcnQgIldlYkNhY2hlLmgiCiAjaW1wb3J0ICJXZWJGcmFtZUludGVybmFsLmgiCiAj
aW1wb3J0IDxydW50aW1lL0pTTG9jay5oPgpAQCAtNTUsNiArNTcsMTIgQEAgKyAoTlNBcnJheSAq
KXN0YXRpc3RpY3MKICAgICByZXR1cm4gW1dlYkNhY2hlIHN0YXRpc3RpY3NdOwogfQogCisrICh2
b2lkKWVuYWJsZUphdmFTY3JpcHRTdGF0aXN0aWNzCit7CisgICAgUmVnaXN0ZXJGaWxlOjplbmFi
bGVTdGF0cygpOworICAgIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmVuYWJsZVN0YXRzKCk7Cit9CisK
ICsgKHNpemVfdClqYXZhU2NyaXB0T2JqZWN0c0NvdW50CiB7CiAgICAgSlNMb2NrIGxvY2soU2ls
ZW5jZUFzc2VydGlvbnNPbmx5KTsKQEAgLTE5NiwxMiArMjA0LDE2IEBAICsgKE5TRGljdGlvbmFy
eSAqKW1lbW9yeVN0YXRpc3RpY3MKICAgICBXVEY6OkZhc3RNYWxsb2NTdGF0aXN0aWNzIGZhc3RN
YWxsb2NTdGF0aXN0aWNzID0gV1RGOjpmYXN0TWFsbG9jU3RhdGlzdGljcygpOwogICAgIEpTTG9j
ayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CiAgICAgSGVhcDo6U3RhdGlzdGljcyBqc0hl
YXBTdGF0aXN0aWNzID0gSlNET01XaW5kb3c6OmNvbW1vbkpTR2xvYmFsRGF0YSgpLT5oZWFwLnN0
YXRpc3RpY3MoKTsKKyAgICBzaXplX3QganNjU3RhY2tCeXRlcyA9IFJlZ2lzdGVyRmlsZTo6dG90
YWxCeXRlc0NvbW1pdHRlZCgpOworICAgIHNpemVfdCBqc2NKSVRCeXRlcyA9IEV4ZWN1dGFibGVB
bGxvY2F0b3I6OnRvdGFsQnl0ZXNDb21taXR0ZWQoKTsKICAgICByZXR1cm4gW05TRGljdGlvbmFy
eSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOgogICAgICAgICAgICAgICAgIFtOU051bWJl
ciBudW1iZXJXaXRoSW50OmZhc3RNYWxsb2NTdGF0aXN0aWNzLnJlc2VydmVkVk1CeXRlc10sIEAi
RmFzdE1hbGxvY1Jlc2VydmVkVk1CeXRlcyIsCiAgICAgICAgICAgICAgICAgW05TTnVtYmVyIG51
bWJlcldpdGhJbnQ6ZmFzdE1hbGxvY1N0YXRpc3RpY3MuY29tbWl0dGVkVk1CeXRlc10sIEAiRmFz
dE1hbGxvY0NvbW1pdHRlZFZNQnl0ZXMiLAogICAgICAgICAgICAgICAgIFtOU051bWJlciBudW1i
ZXJXaXRoSW50OmZhc3RNYWxsb2NTdGF0aXN0aWNzLmZyZWVMaXN0Qnl0ZXNdLCBAIkZhc3RNYWxs
b2NGcmVlTGlzdEJ5dGVzIiwKICAgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aElu
dDpqc0hlYXBTdGF0aXN0aWNzLnNpemVdLCBAIkphdmFTY3JpcHRIZWFwU2l6ZSIsCiAgICAgICAg
ICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6anNIZWFwU3RhdGlzdGljcy5mcmVlXSwg
QCJKYXZhU2NyaXB0RnJlZVNpemUiLAorICAgICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJX
aXRoVW5zaWduZWRJbnQ6KHVuc2lnbmVkIGludClqc2NTdGFja0J5dGVzXSwgQCJKYXZhU2NyaXB0
U3RhY2tTaXplIiwKKyAgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aFVuc2lnbmVk
SW50Oih1bnNpZ25lZCBpbnQpanNjSklUQnl0ZXNdLCBAIkphdmFTY3JpcHRKSVRTaXplIiwKICAg
ICAgICAgICAgIG5pbF07CiB9CiAK
</data>
<flag name="review"
          id="55539"
          type_id="1"
          status="-"
          setter="ap"
    />
    <flag name="commit-queue"
          id="55554"
          type_id="3"
          status="-"
          setter="ap"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66553</attachid>
            <date>2010-09-03 15:04:38 -0700</date>
            <delta_ts>2010-09-07 18:49:28 -0700</delta_ts>
            <desc>Submission of patch with suggested changes added</desc>
            <filename>OpenSource45134.patch</filename>
            <type>text/plain</type>
            <size>14057</size>
            <attacher name="John Therrell">jtherrell</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY2NzY5KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDUgQEAKKzIwMTAtMDktMDMgIEpvaG4gVGhl
cnJlbGwgIDxqdGhlcnJlbGxAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD00NTEzNAorCisgICAgICAgIEFkZGVkIHRocmVhZC1zYWZlIGNvbW1pdHRlZCBieXRlIGNv
dW50aW5nIGFuZCByZXBvcnRpbmcgZnVuY3Rpb25hbGl0eSB0byBSZWdpc3RlckZpbGUgYW5kIAor
ICAgICAgICBFeGVjdXRhYmxlQWxsb2NhdG9yLiBVc2VzIGEgc3RhdGljIGJvb2wgY2xhc3MgbWVt
YmVyIHRvIHByb3ZpZGUgcnVudGltZSBjaGVjayBpZiBzdGF0aXN0aWNzIAorICAgICAgICBjb2xs
ZWN0aW5nIGlzIGVuYWJsZWQuIEFsbG93cyBmb3IgZW5hYmxpbmcgYW5kIHNhbXBsaW5nIHN0YXRp
c3RpY3Mgb24gcmVsZWFzZSBidWlsZHMgd2l0aG91dCAKKyAgICAgICAgY29uZGl0aW9uYWwgY29t
cGlsYXRpb24uCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5leHA6CisgICAgICAgIEV4cG9y
dGVkIG5ldyBzeW1ib2xzIHRvIGFsbG93IGZvciBXZWJLaXQgdG8gZ2V0IHN0YXRpc3RpY3MgZnJv
bSBKYXZhU2NyaXB0Q29yZSBjbGFzc2VzLgorICAgICAgICAKKyAgICAgICAgKiBpbnRlcnByZXRl
ci9SZWdpc3RlckZpbGUuY3BwOgorICAgICAgICBBZGRlZCBjYWxscyB0byBhZGRUb1N0YXRpc3Rp
Y3MgaGVyZSB3aGVyZSBtZW1vcnkgaXMgYmVpbmcgZGVjb21pdHRlZC4KKyAgICAgICAgKEpTQzo6
UmVnaXN0ZXJGaWxlOjplbmFibGVSZWdpc3RlckZpbGVTdGF0aXN0aWNzKToKKyAgICAgICAgQWRk
ZWQgZnVuY3Rpb24gd2hpY2ggZW5hYmxlcyBieXRlIGNvdW50aW5nIG9mIGNvbW1pdHRlZCBhbGxv
Y2F0aW9uIG1lbW9yeS4KKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJGaWxlOjpyZWdpc3RlckZpbGVT
dGF0aXN0aWNzKToKKyAgICAgICAgQWRkZWQgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBjb21taXR0
ZWQgYnl0ZSBjb3VudC4KKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJGaWxlOjphZGRUb1N0YXRpc3Rp
Y3MpOgorICAgICAgICBBZGRlZCBmdW5jdGlvbiB3aGljaCBhZGRzIGNvbW1pdHRlZC9kZWNvbW1p
dHRlZCBtZW1vcnkgc2l6ZXMgdG8gYSBzdGF0aWMgY291bnRlciB2YXJpYWJsZS4KKyAgICAgICAg
CisgICAgICAgICogaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmg6CisgICAgICAgIEFkZGVkIGNh
bGxzIHRvIGFkZFRvU3RhdGlzdGljcyBoZXJlIHdoZXJlIG1lbW9yeSBpcyBiZWluZyBjb21taXR0
ZWQuCisgICAgICAgIAorICAgICAgICAqIGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmg6CisgICAg
ICAgIEFkZGVkIGZ1bmN0aW9uIHByb3RvdHlwZXMuCisgICAgICAgIAorICAgICAgICAqIGppdC9F
eGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwOgorICAgICAgICBBZGRlZCBjYWxscyB0
byBhZGRUb1N0YXRpc3RpY3Mgd2hlcmUgbWVtb3J5IGlzIGJlaW5nIGNvbW1pdHRlZC9kZWNvbW1p
dHRlZC4KKyAgICAgICAgKEpTQzo6Rml4ZWRWTVBvb2xBbGxvY2F0b3I6OmFkZFRvU3RhdGlzdGlj
cyk6CisgICAgICAgIEFkZGVkIGZ1bmN0aW9uIHdoaWNoIGFkZHMgY29tbWl0dGVkL2RlY29tbWl0
dGVkIG1lbW9yeSBzaXplcyB0byBhIHN0YXRpYyBjb3VudGVyIHZhcmlhYmxlLgorICAgICAgICAo
SlNDOjpGaXhlZFZNUG9vbEFsbG9jYXRvcjo6ZW5hYmxlRml4ZWRWTVBvb2xBbGxvY2F0b3JTdGF0
aXN0aWNzKToKKyAgICAgICAgQWRkZWQgZnVuY3Rpb24gd2hpY2ggZW5hYmxlcyBieXRlIGNvdW50
aW5nIG9mIGNvbW1pdHRlZCBhbGxvY2F0aW9uIG1lbW9yeS4KKyAgICAgICAgKEpTQzo6Rml4ZWRW
TVBvb2xBbGxvY2F0b3I6OmZpeGVkVk1Qb29sQWxsb2NhdG9yU3RhdGlzdGljcyk6CisgICAgICAg
IEFkZGVkIGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgY29tbWl0dGVkIGJ5dGUgY291bnQuCisgICAg
ICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmV4ZWN1dGFibGVBbGxvY2F0b3JTdGF0aXN0
aWNzKToKKyAgICAgICAgQWRkZWQgZnVuY3Rpb24gd2hpY2ggY2FsbHMgb24gRml4ZWRWTVBvb2xB
bGxvY2F0b3IgdG8gZ2V0IGNvbW1pdHRlZCBieXRlIGNvdW50CisgICAgICAgIChKU0M6OkV4ZWN1
dGFibGVBbGxvY2F0b3I6OmVuYWJsZUV4ZWN1dGFibGVBbGxvY2F0b3JTdGF0aXN0aWNzKToKKyAg
ICAgICAgQWRkZWQgZnVuY3Rpb24gd2hpY2ggY2FsbHMgb24gRml4ZWRWTVBvb2xBbGxvY2F0b3Ig
dG8gZW5hYmxlIGJ5dGUgY291bnRpbmcgb2YgY29tbWl0dGVkIG1lbW9yeS4KKwogMjAxMC0wOS0w
MyAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHJldmlz
aW9uIDY1NjMyKQorKysgSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzEsNiArMTMxLDggQEAgX19aTjNKU0MxMkpTR2xvYmFsRGF0YTE0cmVzZXRE
YXRlQ2FjaGVFdgogX19aTjNKU0MxMkpTR2xvYmFsRGF0YTE0c2hhcmVkSW5zdGFuY2VFdgogX19a
TjNKU0MxMkpTR2xvYmFsRGF0YTZjcmVhdGVFTlNfMTVUaHJlYWRTdGFja1R5cGVFCiBfX1pOM0pT
QzEySlNHbG9iYWxEYXRhRDFFdgorX19aTjNKU0MxMlJlZ2lzdGVyRmlsZTIycmVnaXN0ZXJGaWxl
U3RhdGlzdGljc0V2CitfX1pOM0pTQzEyUmVnaXN0ZXJGaWxlMjhlbmFibGVSZWdpc3RlckZpbGVT
dGF0aXN0aWNzRXYKIF9fWk4zSlNDMTJTYW1wbGluZ1Rvb2w1c2V0dXBFdgogX19aTjNKU0MxMlNt
YWxsU3RyaW5nczE3Y3JlYXRlRW1wdHlTdHJpbmdFUE5TXzEySlNHbG9iYWxEYXRhRQogX19aTjNK
U0MxMlNtYWxsU3RyaW5nczI3Y3JlYXRlU2luZ2xlQ2hhcmFjdGVyU3RyaW5nRVBOU18xMkpTR2xv
YmFsRGF0YUVoCkBAIC0xOTEsNiArMTkzLDggQEAgX19aTjNKU0MxOFByb3BlcnR5RGVzY3JpcHRv
cjE3ZGVmYXVsdEF0dAogX19aTjNKU0MxOFByb3BlcnR5RGVzY3JpcHRvcjIxc2V0QWNjZXNzb3JE
ZXNjcmlwdG9yRU5TXzdKU1ZhbHVlRVMxX2oKIF9fWk4zSlNDMThQcm9wZXJ0eURlc2NyaXB0b3I5
c2V0R2V0dGVyRU5TXzdKU1ZhbHVlRQogX19aTjNKU0MxOFByb3BlcnR5RGVzY3JpcHRvcjlzZXRT
ZXR0ZXJFTlNfN0pTVmFsdWVFCitfX1pOM0pTQzE5RXhlY3V0YWJsZUFsbG9jYXRvcjI5ZXhlY3V0
YWJsZUFsbG9jYXRvclN0YXRpc3RpY3NFdgorX19aTjNKU0MxOUV4ZWN1dGFibGVBbGxvY2F0b3Iz
NWVuYWJsZUV4ZWN1dGFibGVBbGxvY2F0b3JTdGF0aXN0aWNzRXYKIF9fWk4zSlNDMTlpbml0aWFs
aXplVGhyZWFkaW5nRXYKIF9fWk4zSlNDMjBNYXJrZWRBcmd1bWVudEJ1ZmZlcjEwc2xvd0FwcGVu
ZEVOU183SlNWYWx1ZUUKIF9fWk4zSlNDMjBjcmVhdGVSZWZlcmVuY2VFcnJvckVQTlNfOUV4ZWNT
dGF0ZUVSS05TXzdVU3RyaW5nRQpJbmRleDogSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVn
aXN0ZXJGaWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9S
ZWdpc3RlckZpbGUuY3BwCShyZXZpc2lvbiA2NTYzMikKKysrIEphdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL1JlZ2lzdGVyRmlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDIxICsyOCwyOCBA
QAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJGaWxlLmgiCi0KICNp
bmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgorI2luY2x1ZGUgIlRDU3BpbkxvY2suaCIKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKK3NpemVfdCBSZWdpc3RlckZpbGU6OnNfdG90YWxCeXRlc0NvbW1pdHRl
ZCA9IDA7Citib29sIFJlZ2lzdGVyRmlsZTo6c19zdGF0c0VuYWJsZWQgPSBmYWxzZTsKKwogUmVn
aXN0ZXJGaWxlOjp+UmVnaXN0ZXJGaWxlKCkKIHsKICAgICB2b2lkKiBiYXNlID0gbV9yZXNlcnZh
dGlvbi5iYXNlKCk7CiAgICAgbV9yZXNlcnZhdGlvbi5kZWNvbW1pdChiYXNlLCByZWludGVycHJl
dF9jYXN0PGludHB0cl90PihtX2NvbW1pdEVuZCkgLSByZWludGVycHJldF9jYXN0PGludHB0cl90
PihiYXNlKSk7CisgICAgaWYgKHNfc3RhdHNFbmFibGVkKQorICAgICAgICBhZGRUb1N0YXRpc3Rp
Y3MoLShyZWludGVycHJldF9jYXN0PGludHB0cl90PihtX2NvbW1pdEVuZCkgLSByZWludGVycHJl
dF9jYXN0PGludHB0cl90PihiYXNlKSkpOwogICAgIG1fcmVzZXJ2YXRpb24uZGVhbGxvY2F0ZSgp
OwogfQogCiB2b2lkIFJlZ2lzdGVyRmlsZTo6cmVsZWFzZUV4Y2Vzc0NhcGFjaXR5KCkKIHsKICAg
ICBtX3Jlc2VydmF0aW9uLmRlY29tbWl0KG1fc3RhcnQsIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRy
X3Q+KG1fY29tbWl0RW5kKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1fc3RhcnQpKTsK
KyAgICBpZiAoc19zdGF0c0VuYWJsZWQpCisgICAgICAgIGFkZFRvU3RhdGlzdGljcygtKHJlaW50
ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1fY29tbWl0RW5kKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8aW50
cHRyX3Q+KG1fc3RhcnQpKSk7CiAgICAgbV9jb21taXRFbmQgPSBtX3N0YXJ0OwogICAgIG1fbWF4
VXNlZCA9IG1fc3RhcnQ7CiB9CkBAIC02Miw0ICs2OSwyMiBAQCBKU0dsb2JhbE9iamVjdCogUmVn
aXN0ZXJGaWxlOjpnbG9iYWxPYmplCiAgICAgcmV0dXJuIG1fZ2xvYmFsT2JqZWN0LmdldCgpOwog
fQogCit2b2lkIFJlZ2lzdGVyRmlsZTo6ZW5hYmxlUmVnaXN0ZXJGaWxlU3RhdGlzdGljcygpCit7
CisgICAgc19zdGF0c0VuYWJsZWQgPSB0cnVlOworfQorCitzaXplX3QgUmVnaXN0ZXJGaWxlOjpy
ZWdpc3RlckZpbGVTdGF0aXN0aWNzKCkKK3sKKyAgICByZXR1cm4gc190b3RhbEJ5dGVzQ29tbWl0
dGVkOworfQorCitzdGF0aWMgU3BpbkxvY2sgc3BpbmxvY2sgPSBTUElOTE9DS19JTklUSUFMSVpF
UjsKKwordm9pZCBSZWdpc3RlckZpbGU6OmFkZFRvU3RhdGlzdGljcyhzaXplX3QgYnl0ZUNvdW50
KQoreworICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tIb2xkZXIoJnNwaW5sb2NrKTsKKyAgICBzX3Rv
dGFsQnl0ZXNDb21taXR0ZWQgKz0gYnl0ZUNvdW50OworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IEphdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyRmlsZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyRmlsZS5oCShyZXZpc2lv
biA2NTYzMikKKysrIEphdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyRmlsZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzQsMTIgKzEzNCwxOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgdm9pZCBtYXJrR2xvYmFscyhNYXJrU3RhY2smIG1hcmtTdGFjaywgSGVhcCogaGVhcCkgeyBo
ZWFwLT5tYXJrQ29uc2VydmF0aXZlbHkobWFya1N0YWNrLCBsYXN0R2xvYmFsKCksIG1fc3RhcnQp
OyB9CiAgICAgICAgIHZvaWQgbWFya0NhbGxGcmFtZXMoTWFya1N0YWNrJiBtYXJrU3RhY2ssIEhl
YXAqIGhlYXApIHsgaGVhcC0+bWFya0NvbnNlcnZhdGl2ZWx5KG1hcmtTdGFjaywgbV9zdGFydCwg
bV9lbmQpOyB9CiAKKyAgICAgICAgLy8gQ2FsbCB0byBlbmFibGVSZWdpc3RlckZpbGVTdGF0aXN0
aWNzIGJlZm9yZSBhbnkgYWxsb2NhdGlvbnMgYXJlIAorICAgICAgICAvLyBjb21taXR0ZWQgcmVx
dWlyZWQgdG8gcHJvZHVjZSBhY2N1cmF0ZSBzdGF0aXN0aWNzCisgICAgICAgIHN0YXRpYyB2b2lk
IGVuYWJsZVJlZ2lzdGVyRmlsZVN0YXRpc3RpY3MoKTsKKyAgICAgICAgc3RhdGljIHNpemVfdCBy
ZWdpc3RlckZpbGVTdGF0aXN0aWNzKCk7CisKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIGNo
ZWNrQWxsb2NhdGVkT2theShib29sIG9rYXkpOwotCisgICAgICAgIHZvaWQgYWRkVG9TdGF0aXN0
aWNzKHNpemVfdCBieXRlQ291bnQpOwogICAgICAgICB2b2lkIHJlbGVhc2VFeGNlc3NDYXBhY2l0
eSgpOwogICAgICAgICBzaXplX3QgbV9udW1HbG9iYWxzOwogICAgICAgICBjb25zdCBzaXplX3Qg
bV9tYXhHbG9iYWxzOworICAgICAgICBzdGF0aWMgc2l6ZV90IHNfdG90YWxCeXRlc0NvbW1pdHRl
ZDsKKyAgICAgICAgc3RhdGljIGJvb2wgc19zdGF0c0VuYWJsZWQ7CiAgICAgICAgIFJlZ2lzdGVy
KiBtX3N0YXJ0OwogICAgICAgICBSZWdpc3RlciogbV9lbmQ7CiAgICAgICAgIFJlZ2lzdGVyKiBt
X21heDsKQEAgLTE2Niw2ICsxNzMsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgY2hlY2tB
bGxvY2F0ZWRPa2F5KGJhc2UpOwogICAgICAgICBzaXplX3QgY29tbWl0dGVkU2l6ZSA9IHJvdW5k
VXBBbGxvY2F0aW9uU2l6ZShtYXhHbG9iYWxzICogc2l6ZW9mKFJlZ2lzdGVyKSwgY29tbWl0U2l6
ZSk7CiAgICAgICAgIGNoZWNrQWxsb2NhdGVkT2theShtX3Jlc2VydmF0aW9uLmNvbW1pdChiYXNl
LCBjb21taXR0ZWRTaXplKSk7CisgICAgICAgIGlmIChzX3N0YXRzRW5hYmxlZCkKKyAgICAgICAg
ICAgIGFkZFRvU3RhdGlzdGljcyhjb21taXR0ZWRTaXplKTsKICAgICAgICAgbV9jb21taXRFbmQg
PSByZWludGVycHJldF9jYXN0X3B0cjxSZWdpc3Rlcio+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KGJhc2UpICsgY29tbWl0dGVkU2l6ZSk7CiAgICAgICAgIG1fc3RhcnQgPSBzdGF0aWNfY2FzdDxS
ZWdpc3Rlcio+KGJhc2UpICsgbWF4R2xvYmFsczsKICAgICAgICAgbV9lbmQgPSBtX3N0YXJ0OwpA
QCAtMTkzLDYgKzIwMiw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBpZiAobmV3RW5kID4g
bV9jb21taXRFbmQpIHsKICAgICAgICAgICAgIHNpemVfdCBzaXplID0gcm91bmRVcEFsbG9jYXRp
b25TaXplKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG5ld0VuZCkgLSByZWludGVycHJldF9jYXN0
PGNoYXIqPihtX2NvbW1pdEVuZCksIGNvbW1pdFNpemUpOwogICAgICAgICAgICAgY2hlY2tBbGxv
Y2F0ZWRPa2F5KG1fcmVzZXJ2YXRpb24uY29tbWl0KG1fY29tbWl0RW5kLCBzaXplKSk7CisgICAg
ICAgICAgICBpZiAoc19zdGF0c0VuYWJsZWQpCisgICAgICAgICAgICAgICAgYWRkVG9TdGF0aXN0
aWNzKHNpemUpOwogICAgICAgICAgICAgbV9jb21taXRFbmQgPSByZWludGVycHJldF9jYXN0X3B0
cjxSZWdpc3Rlcio+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1fY29tbWl0RW5kKSArIHNpemUp
OwogICAgICAgICB9CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2Nh
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0
b3IuaAkocmV2aXNpb24gNjU2MzIpCisrKyBKYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFs
bG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOTcsNiArMjk3LDggQEAgcHVibGljOgogI2Vs
c2UKICAgICAjZXJyb3IgIlRoZSBjYWNoZUZsdXNoIHN1cHBvcnQgaXMgbWlzc2luZyBvbiB0aGlz
IHBsYXRmb3JtLiIKICNlbmRpZgorICAgIHN0YXRpYyB2b2lkIGVuYWJsZUV4ZWN1dGFibGVBbGxv
Y2F0b3JTdGF0aXN0aWNzKCk7CisgICAgc3RhdGljIHNpemVfdCBleGVjdXRhYmxlQWxsb2NhdG9y
U3RhdGlzdGljcygpOwogCiBwcml2YXRlOgogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9qaXQvRXhl
Y3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcAkocmV2aXNpb24gNjU2
MzIpCisrKyBKYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29s
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI3LDEzICsxMjcsMTkgQEAgY2xhc3MgRml4ZWRWTVBv
b2xBbGxvY2F0b3IKIAogICAgIHZvaWQgcmVsZWFzZSh2b2lkKiBwb3NpdGlvbiwgc2l6ZV90IHNp
emUpCiAgICAgeworICAgICAgICBBU1NFUlQoSXNIZWxkKHNwaW5sb2NrKSk7CiAgICAgICAgIG1f
YWxsb2NhdGlvbi5kZWNvbW1pdChwb3NpdGlvbiwgc2l6ZSk7CisgICAgICAgIGlmIChzX3N0YXRz
RW5hYmxlZCkKKyAgICAgICAgICAgIGFkZFRvU3RhdGlzdGljcygtc2l6ZSk7CiAgICAgfQogCiAg
ICAgdm9pZCByZXVzZSh2b2lkKiBwb3NpdGlvbiwgc2l6ZV90IHNpemUpCiAgICAgeworICAgICAg
ICBBU1NFUlQoSXNIZWxkKHNwaW5sb2NrKSk7CiAgICAgICAgIGJvb2wgb2theSA9IG1fYWxsb2Nh
dGlvbi5jb21taXQocG9zaXRpb24sIHNpemUpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKG9rYXks
IG9rYXkpOworICAgICAgICBpZiAoc19zdGF0c0VuYWJsZWQpCisgICAgICAgICAgICBhZGRUb1N0
YXRpc3RpY3Moc2l6ZSk7CiAgICAgfQogCiAgICAgLy8gQWxsIGFkZGl0aW9uIHRvIHRoZSBmcmVl
IGxpc3Qgc2hvdWxkIGdvIHRocm91Z2ggdGhpcyBtZXRob2QsIHJhdGhlciB0aGFuCkBAIC0zMzgs
NiArMzQ0LDggQEAgcHVibGljOgogICAgIH0KIAogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsg
cmV0dXJuICEhbV9hbGxvY2F0aW9uOyB9CisgICAgc3RhdGljIHNpemVfdCBmaXhlZFZNUG9vbEFs
bG9jYXRvclN0YXRpc3RpY3MoKTsKKyAgICBzdGF0aWMgdm9pZCBlbmFibGVGaXhlZFZNUG9vbEFs
bG9jYXRvclN0YXRpc3RpY3MoKTsKIAogcHJpdmF0ZToKICAgICB2b2lkKiBhbGxvY0ludGVybmFs
KHNpemVfdCBzaXplKQpAQCAtNDE0LDYgKzQyMiwxMSBAQCBwcml2YXRlOgogICAgIH0KICNlbmRp
ZgogCisgICAgdm9pZCBhZGRUb1N0YXRpc3RpY3Moc2l6ZV90IGJ5dGVDb3VudCkKKyAgICB7Cisg
ICAgICAgIHNfdG90YWxCeXRlc0NvbW1pdHRlZCArPSBieXRlQ291bnQ7CisgICAgfQorCiAgICAg
Ly8gRnJlZWQgc3BhY2UgZnJvbSB0aGUgbW9zdCBjb21tb24gc2l6ZWQgYWxsb2NhdGlvbnMgd2ls
bCBiZSBoZWxkIGluIHRoaXMgbGlzdCwgLi4uCiAgICAgY29uc3Qgc2l6ZV90IG1fY29tbW9uU2l6
ZTsKICAgICBWZWN0b3I8dm9pZCo+IG1fY29tbW9uU2l6ZWRBbGxvY2F0aW9uczsKQEAgLTQyNSw4
ICs0MzgsMzMgQEAgcHJpdmF0ZToKICAgICBzaXplX3QgbV9jb3VudEZyZWVkU2luY2VMYXN0Q29h
bGVzY2U7CiAKICAgICBQYWdlUmVzZXJ2YXRpb24gbV9hbGxvY2F0aW9uOworICAgIHN0YXRpYyBz
aXplX3Qgc190b3RhbEJ5dGVzQ29tbWl0dGVkOworICAgIHN0YXRpYyBib29sIHNfc3RhdHNFbmFi
bGVkOwogfTsKIAorc2l6ZV90IEZpeGVkVk1Qb29sQWxsb2NhdG9yOjpzX3RvdGFsQnl0ZXNDb21t
aXR0ZWQgPSAwOworYm9vbCBGaXhlZFZNUG9vbEFsbG9jYXRvcjo6c19zdGF0c0VuYWJsZWQgPSBm
YWxzZTsKKyAgICAKK3ZvaWQgRml4ZWRWTVBvb2xBbGxvY2F0b3I6OmVuYWJsZUZpeGVkVk1Qb29s
QWxsb2NhdG9yU3RhdGlzdGljcygpICAgIAoreworICAgIHNfc3RhdHNFbmFibGVkID0gdHJ1ZTsK
K30KKworc2l6ZV90IEZpeGVkVk1Qb29sQWxsb2NhdG9yOjpmaXhlZFZNUG9vbEFsbG9jYXRvclN0
YXRpc3RpY3MoKQoreworICAgIHJldHVybiBzX3RvdGFsQnl0ZXNDb21taXR0ZWQ7Cit9CisKK3Np
emVfdCBFeGVjdXRhYmxlQWxsb2NhdG9yOjpleGVjdXRhYmxlQWxsb2NhdG9yU3RhdGlzdGljcygp
Cit7CisgICAgcmV0dXJuIEZpeGVkVk1Qb29sQWxsb2NhdG9yOjpmaXhlZFZNUG9vbEFsbG9jYXRv
clN0YXRpc3RpY3MoKTsKK30KKwordm9pZCBFeGVjdXRhYmxlQWxsb2NhdG9yOjplbmFibGVFeGVj
dXRhYmxlQWxsb2NhdG9yU3RhdGlzdGljcygpCit7CisgICAgRml4ZWRWTVBvb2xBbGxvY2F0b3I6
OmVuYWJsZUZpeGVkVk1Qb29sQWxsb2NhdG9yU3RhdGlzdGljcygpOworfQorCiB2b2lkIEV4ZWN1
dGFibGVBbGxvY2F0b3I6OmludGlhbGl6ZVBhZ2VTaXplKCkKIHsKICAgICBFeGVjdXRhYmxlQWxs
b2NhdG9yOjpwYWdlU2l6ZSA9IGdldHBhZ2VzaXplKCk7CkluZGV4OiBXZWJLaXQvbWFjL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gNjY3Njkp
CisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBA
CisyMDEwLTA5LTAzICBKb2huIFRoZXJyZWxsICA8anRoZXJyZWxsQGFwcGxlLmNvbT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDUxMzQKKworICAgICAgICBBZGRlZCBhYmlsaXR5
IHRvIGVuYWJsZSBuZXcgSmF2YVNjcmlwdENvcmUgc3RhdGlzdGljcyBzYW1wbGluZyBhbmQgcmVw
b3J0aW5nIGZvciBSZWdpc3RlckZpbGUgCisgICAgICAgIGFuZCBFeGVjdXRhYmxlQWxsb2NhdG9y
IGNsYXNzZXMuIEFkZGVkIHJlcG9ydGluZyBvZiBKYXZhU2NyaXB0Q29yZSdzIHN0YWNrIGNvbW1p
dHRlZCBtZW1vcnkgCisgICAgICAgIGFuZCBKSVQgY29kZSBjb21taXR0ZWQgbWVtb3J5IHN0YXRp
c3RpY3MgdG8gV2ViQ29yZVN0YXRpc3RpY3MgbWVtb3J5U3RhdGlzdGljcy4KKworICAgICAgICAq
IE1pc2MvV2ViQ29yZVN0YXRpc3RpY3MuaDoKKyAgICAgICAgQWRkZWQgZnVuY3Rpb24gcHJvdG90
eXBlIGZvciBlbmFibGluZ0pTQ0FsbG9jYXRvclN0YXRpc3RpY3MuCisgICAgICAgIAorICAgICAg
ICAqIE1pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW06CisgICAgICAgICgrW1dlYkNvcmVTdGF0aXN0
aWNzIGVuYWJsZUpTQ0FsbG9jYXRvclN0YXRpc3RpY3NdKToKKyAgICAgICAgQWRkZWQgZnVuY3Rp
b24gZm9yIGVuYWJsaW5nIEpTQyBSZWdpc3RlckZpbGUgYW5kIEV4ZWN1dGFibGVBbGxvY2F0b3Ig
c3RhdGlzdGljcy4KKyAgICAgICAgKCtbV2ViQ29yZVN0YXRpc3RpY3MgbWVtb3J5U3RhdGlzdGlj
c10pOgorICAgICAgICBBZGRlZCBzdGF0aXN0aWNzIHJlcG9ydGluZyBmb3IgSlNDIFJlZ2lzdGVy
RmlsZSBhbmQgRXhlY3V0YWJsZUFsbG9jYXRvci4KKwogMjAxMC0wOS0wMyAgSm9obiBTdWxsaXZh
biAgPHN1bGxpdmFuQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0
ZWluLgpJbmRleDogV2ViS2l0L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLmgJKHJldmlzaW9uIDY1NjMy
KQorKysgV2ViS2l0L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM4LDYgKzM4LDcgQEAgQGludGVyZmFjZSBXZWJDb3JlU3RhdGlzdGljcyA6IE5TT2JqZWN0
CiAKICsgKE5TQXJyYXkgKilzdGF0aXN0aWNzOwogCisrICh2b2lkKWVuYWJsZUpTQ0FsbG9jYXRv
clN0YXRpc3RpY3M7CiArIChzaXplX3QpamF2YVNjcmlwdE9iamVjdHNDb3VudDsKICsgKHNpemVf
dClqYXZhU2NyaXB0R2xvYmFsT2JqZWN0c0NvdW50OwogKyAoc2l6ZV90KWphdmFTY3JpcHRQcm90
ZWN0ZWRPYmplY3RzQ291bnQ7CkluZGV4OiBXZWJLaXQvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3Rp
Y3MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1t
CShyZXZpc2lvbiA2NTYzMikKKysrIFdlYktpdC9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5t
bQkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksOCBAQAogI2ltcG9ydCAiV2ViQ29yZVN0YXRp
c3RpY3MuaCIKIAogI2ltcG9ydCAiRE9NRWxlbWVudEludGVybmFsLmgiCisjaW1wb3J0IDxKYXZh
U2NyaXB0Q29yZS9SZWdpc3RlckZpbGUuaD4KKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL0V4ZWN1
dGFibGVBbGxvY2F0b3IuaD4KICNpbXBvcnQgIldlYkNhY2hlLmgiCiAjaW1wb3J0ICJXZWJGcmFt
ZUludGVybmFsLmgiCiAjaW1wb3J0IDxydW50aW1lL0pTTG9jay5oPgpAQCAtNTUsNiArNTcsMTIg
QEAgKyAoTlNBcnJheSAqKXN0YXRpc3RpY3MKICAgICByZXR1cm4gW1dlYkNhY2hlIHN0YXRpc3Rp
Y3NdOwogfQogCisrICh2b2lkKWVuYWJsZUpTQ0FsbG9jYXRvclN0YXRpc3RpY3MKK3sKKyAgICBS
ZWdpc3RlckZpbGU6OmVuYWJsZVJlZ2lzdGVyRmlsZVN0YXRpc3RpY3MoKTsKKyAgICBFeGVjdXRh
YmxlQWxsb2NhdG9yOjplbmFibGVFeGVjdXRhYmxlQWxsb2NhdG9yU3RhdGlzdGljcygpOworfQor
CiArIChzaXplX3QpamF2YVNjcmlwdE9iamVjdHNDb3VudAogewogICAgIEpTTG9jayBsb2NrKFNp
bGVuY2VBc3NlcnRpb25zT25seSk7CkBAIC0xOTYsMTIgKzIwNCwxNiBAQCArIChOU0RpY3Rpb25h
cnkgKiltZW1vcnlTdGF0aXN0aWNzCiAgICAgV1RGOjpGYXN0TWFsbG9jU3RhdGlzdGljcyBmYXN0
TWFsbG9jU3RhdGlzdGljcyA9IFdURjo6ZmFzdE1hbGxvY1N0YXRpc3RpY3MoKTsKICAgICBKU0xv
Y2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIEhlYXA6OlN0YXRpc3RpY3MganNI
ZWFwU3RhdGlzdGljcyA9IEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5z
dGF0aXN0aWNzKCk7CisgICAgc2l6ZV90IGpzY1N0YWNrQnl0ZXMgPSBSZWdpc3RlckZpbGU6OnJl
Z2lzdGVyRmlsZVN0YXRpc3RpY3MoKTsKKyAgICBzaXplX3QganNjSklUQnl0ZXMgPSBFeGVjdXRh
YmxlQWxsb2NhdG9yOjpleGVjdXRhYmxlQWxsb2NhdG9yU3RhdGlzdGljcygpOwogICAgIHJldHVy
biBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CiAgICAgICAgICAg
ICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6ZmFzdE1hbGxvY1N0YXRpc3RpY3MucmVzZXJ2
ZWRWTUJ5dGVzXSwgQCJGYXN0TWFsbG9jUmVzZXJ2ZWRWTUJ5dGVzIiwKICAgICAgICAgICAgICAg
ICBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpmYXN0TWFsbG9jU3RhdGlzdGljcy5jb21taXR0ZWRW
TUJ5dGVzXSwgQCJGYXN0TWFsbG9jQ29tbWl0dGVkVk1CeXRlcyIsCiAgICAgICAgICAgICAgICAg
W05TTnVtYmVyIG51bWJlcldpdGhJbnQ6ZmFzdE1hbGxvY1N0YXRpc3RpY3MuZnJlZUxpc3RCeXRl
c10sIEAiRmFzdE1hbGxvY0ZyZWVMaXN0Qnl0ZXMiLAogICAgICAgICAgICAgICAgIFtOU051bWJl
ciBudW1iZXJXaXRoSW50OmpzSGVhcFN0YXRpc3RpY3Muc2l6ZV0sIEAiSmF2YVNjcmlwdEhlYXBT
aXplIiwKICAgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpqc0hlYXBTdGF0
aXN0aWNzLmZyZWVdLCBAIkphdmFTY3JpcHRGcmVlU2l6ZSIsCisgICAgICAgICAgICAgICAgW05T
TnVtYmVyIG51bWJlcldpdGhVbnNpZ25lZEludDoodW5zaWduZWQgaW50KWpzY1N0YWNrQnl0ZXNd
LCBAIkphdmFTY3JpcHRTdGFja1NpemUiLAorICAgICAgICAgICAgICAgIFtOU051bWJlciBudW1i
ZXJXaXRoVW5zaWduZWRJbnQ6KHVuc2lnbmVkIGludClqc2NKSVRCeXRlc10sIEAiSmF2YVNjcmlw
dEpJVFNpemUiLAogICAgICAgICAgICAgbmlsXTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66825</attachid>
            <date>2010-09-07 18:49:28 -0700</date>
            <delta_ts>2010-09-08 18:12:09 -0700</delta_ts>
            <desc>Revised patch w/ use of Mutex in RegisterFile and runtime enabling/disabling removed</desc>
            <filename>OpenSource45134.patch</filename>
            <type>text/plain</type>
            <size>11930</size>
            <attacher name="John Therrell">jtherrell</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY2OTQ0KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDggQEAKKzIwMTAtMDktMDcgIEpvaG4gVGhl
cnJlbGwgIDxqdGhlcnJlbGxAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIHN0YXRpc3RpY3Mgc2FtcGxpbmcgYW5kIHJlcG9y
dGluZyBmb3IgSmF2YVNjcmlwdENvcmUncyBSZWdpc3RlckZpbGUgYW5kIEV4ZWN1dGFibGVBbGxv
Y2F0b3IgY2xhc3NlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDUxMzQKKworICAgICAgICBBZGRlZCB0aHJlYWQtc2FmZSBjb21taXR0ZWQgYnl0ZSBj
b3VudGluZyBhbmQgcmVwb3J0aW5nIGZ1bmN0aW9uYWxpdHkgdG8gUmVnaXN0ZXJGaWxlIGFuZCAK
KyAgICAgICAgRXhlY3V0YWJsZUFsbG9jYXRvci4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3Jl
LmV4cDoKKyAgICAgICAgRXhwb3J0ZWQgbmV3IHN5bWJvbHMgdG8gYWxsb3cgZm9yIFdlYktpdCB0
byBnZXQgc3RhdGlzdGljcyBmcm9tIEphdmFTY3JpcHRDb3JlIGNsYXNzZXMuCisgICAgICAgIAor
ICAgICAgICAqIGludGVycHJldGVyL1JlZ2lzdGVyRmlsZS5jcHA6CisgICAgICAgIChKU0M6OlJl
Z2lzdGVyRmlsZTo6flJlZ2lzdGVyRmlsZSk6CisgICAgICAgIEFkZGVkIGNhbGwgdG8gYWRkVG9T
dGF0aXN0aWNzIHNpbmNlIG1lbW9yeSBpcyBkZWNvbW1pdHRlZCBoZXJlLgorICAgICAgICAoSlND
OjpSZWdpc3RlckZpbGU6OnJlbGVhc2VFeGNlc3NDYXBhY2l0eSk6CisgICAgICAgIEFkZGVkIGNh
bGwgdG8gYWRkVG9TdGF0aXN0aWNzIHNpbmNlIG1lbW9yeSBpcyBkZWNvbW1pdHRlZCBoZXJlLgor
ICAgICAgICAoSlNDOjpSZWdpc3RlckZpbGU6OnJlZ2lzdGVyRmlsZVN0YXRpc3RpY3MpOgorICAg
ICAgICBBZGRlZCBmdW5jdGlvbiB3aGljaCByZXR1cm5zIFJlZ2lzdGVyIEZpbGUncyB0b3RhbCBi
eXRlcyBjb21taXR0ZWQuCisgICAgICAgIChKU0M6OlJlZ2lzdGVyRmlsZTo6YWRkVG9TdGF0aXN0
aWNzKToKKyAgICAgICAgQWRkZWQgZnVuY3Rpb24gd2hpY2ggdXBkYXRlcyBjb21taXRlZCBieXRl
IGNvdW50LgorICAgICAgICAKKyAgICAgICAgKiBpbnRlcnByZXRlci9SZWdpc3RlckZpbGUuaDoK
KyAgICAgICAgKEpTQzo6UmVnaXN0ZXJGaWxlOjpSZWdpc3RlckZpbGUpOgorICAgICAgICBBZGRl
ZCBjYWxsIHRvIGFkZFRvU3RhdGlzdGljcyBzaW5jZSBtZW1vcnkgaXMgY29tbWl0dGVkIGhlcmUu
CisgICAgICAgIChKU0M6OlJlZ2lzdGVyRmlsZTo6Z3Jvdyk6CisgICAgICAgIEFkZGVkIGNhbGwg
dG8gYWRkVG9TdGF0aXN0aWNzIHNpbmNlIG1lbW9yeSBpcyBkZWNvbW1pdHRlZCBoZXJlLgorICAg
ICAgICAKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oOgorICAgICAgICBBZGRl
ZCBmdW5jdGlvbiBwcm90b3R5cGUgZm9yIGV4ZWN1dGFibGVBbGxvY2F0b3JTdGF0aXN0aWNzLgor
ICAgICAgICAKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNw
cDoKKyAgICAgICAgKEpTQzo6Rml4ZWRWTVBvb2xBbGxvY2F0b3I6OnJlbGVhc2UpOgorICAgICAg
ICBBZGRlZCBjYWxsIHRvIGFkZFRvU3RhdGlzdGljcyBzaW5jZSBtZW1vcnkgaXMgZGVjb21taXR0
ZWQgaGVyZS4KKyAgICAgICAgKEpTQzo6Rml4ZWRWTVBvb2xBbGxvY2F0b3I6OnJldXNlKToKKyAg
ICAgICAgQWRkZWQgY2FsbCB0byBhZGRUb1N0YXRpc3RpY3Mgc2luY2UgbWVtb3J5IGlzIGNvbW1p
dHRlZCBoZXJlLgorICAgICAgICAoSlNDOjpGaXhlZFZNUG9vbEFsbG9jYXRvcjo6YWRkVG9TdGF0
aXN0aWNzKToKKyAgICAgICAgQWRkZWQgZnVuY3Rpb24gd2hpY2ggdXBkYXRlcyBjb21taXRlZCBi
eXRlIGNvdW50LgorICAgICAgICAoSlNDOjpGaXhlZFZNUG9vbEFsbG9jYXRvcjo6Zml4ZWRWTVBv
b2xBbGxvY2F0b3JTdGF0aXN0aWNzKToKKyAgICAgICAgQWRkZWQgZnVuY3Rpb24gd2hpY2ggcmV0
dXJucyBGaXhlZFZNUG9vbEFsbG9jYXRvcidzIHRvdGFsIGJ5dGVzIGNvbW1pdHRlZC4KKyAgICAg
ICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6ZXhlY3V0YWJsZUFsbG9jYXRvclN0YXRpc3Rp
Y3MpOgorICAgICAgICBBZGRlZCBmdW5jdGlvbiB3aGljaCBhY3RzIGFzIGludGVyZmFjZSB0byBn
ZXQgdG90YWwgYnl0ZXMgY29tbWl0dGVkIGZyb20KKyAgICAgICAgRml4ZWRWTVBvb2xBbGxvY2F0
b3IuCisKIDIwMTAtMDktMDcgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBDb21waWxlIGZpeCBhdHRlbXB0IGZvciB3aW5kb3dzLgpJbmRleDogSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLmV4cAkocmV2aXNpb24gNjU2MzIpCisrKyBKYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMSw2ICsxMzEsNyBAQCBfX1pO
M0pTQzEySlNHbG9iYWxEYXRhMTRyZXNldERhdGVDYWNoZUV2CiBfX1pOM0pTQzEySlNHbG9iYWxE
YXRhMTRzaGFyZWRJbnN0YW5jZUV2CiBfX1pOM0pTQzEySlNHbG9iYWxEYXRhNmNyZWF0ZUVOU18x
NVRocmVhZFN0YWNrVHlwZUUKIF9fWk4zSlNDMTJKU0dsb2JhbERhdGFEMUV2CitfX1pOM0pTQzEy
UmVnaXN0ZXJGaWxlMjJyZWdpc3RlckZpbGVTdGF0aXN0aWNzRXYKIF9fWk4zSlNDMTJTYW1wbGlu
Z1Rvb2w1c2V0dXBFdgogX19aTjNKU0MxMlNtYWxsU3RyaW5nczE3Y3JlYXRlRW1wdHlTdHJpbmdF
UE5TXzEySlNHbG9iYWxEYXRhRQogX19aTjNKU0MxMlNtYWxsU3RyaW5nczI3Y3JlYXRlU2luZ2xl
Q2hhcmFjdGVyU3RyaW5nRVBOU18xMkpTR2xvYmFsRGF0YUVoCkBAIC0xOTEsNiArMTkyLDcgQEAg
X19aTjNKU0MxOFByb3BlcnR5RGVzY3JpcHRvcjE3ZGVmYXVsdEF0dAogX19aTjNKU0MxOFByb3Bl
cnR5RGVzY3JpcHRvcjIxc2V0QWNjZXNzb3JEZXNjcmlwdG9yRU5TXzdKU1ZhbHVlRVMxX2oKIF9f
Wk4zSlNDMThQcm9wZXJ0eURlc2NyaXB0b3I5c2V0R2V0dGVyRU5TXzdKU1ZhbHVlRQogX19aTjNK
U0MxOFByb3BlcnR5RGVzY3JpcHRvcjlzZXRTZXR0ZXJFTlNfN0pTVmFsdWVFCitfX1pOM0pTQzE5
RXhlY3V0YWJsZUFsbG9jYXRvcjI5ZXhlY3V0YWJsZUFsbG9jYXRvclN0YXRpc3RpY3NFdgogX19a
TjNKU0MxOWluaXRpYWxpemVUaHJlYWRpbmdFdgogX19aTjNKU0MyME1hcmtlZEFyZ3VtZW50QnVm
ZmVyMTBzbG93QXBwZW5kRU5TXzdKU1ZhbHVlRQogX19aTjNKU0MyMGNyZWF0ZVJlZmVyZW5jZUVy
cm9yRVBOU185RXhlY1N0YXRlRVJLTlNfN1VTdHJpbmdFCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9SZWdpc3RlckZpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL1JlZ2lzdGVyRmlsZS5jcHAJKHJldmlzaW9uIDY1NjMyKQorKysgSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzMsMTYgKzMzLDIwIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitzaXplX3QgUmVnaXN0ZXJGaWxl
OjpzX3RvdGFsQnl0ZXNDb21taXR0ZWQgPSAwOworCiBSZWdpc3RlckZpbGU6On5SZWdpc3RlckZp
bGUoKQogewogICAgIHZvaWQqIGJhc2UgPSBtX3Jlc2VydmF0aW9uLmJhc2UoKTsKICAgICBtX3Jl
c2VydmF0aW9uLmRlY29tbWl0KGJhc2UsIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1fY29t
bWl0RW5kKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGJhc2UpKTsKKyAgICBhZGRUb1N0
YXRpc3RpY3MoLShyZWludGVycHJldF9jYXN0PGludHB0cl90PihtX2NvbW1pdEVuZCkgLSByZWlu
dGVycHJldF9jYXN0PGludHB0cl90PihiYXNlKSkpOwogICAgIG1fcmVzZXJ2YXRpb24uZGVhbGxv
Y2F0ZSgpOwogfQogCiB2b2lkIFJlZ2lzdGVyRmlsZTo6cmVsZWFzZUV4Y2Vzc0NhcGFjaXR5KCkK
IHsKICAgICBtX3Jlc2VydmF0aW9uLmRlY29tbWl0KG1fc3RhcnQsIHJlaW50ZXJwcmV0X2Nhc3Q8
aW50cHRyX3Q+KG1fY29tbWl0RW5kKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1fc3Rh
cnQpKTsKKyAgICBhZGRUb1N0YXRpc3RpY3MoLShyZWludGVycHJldF9jYXN0PGludHB0cl90Piht
X2NvbW1pdEVuZCkgLSByZWludGVycHJldF9jYXN0PGludHB0cl90PihtX3N0YXJ0KSkpOwogICAg
IG1fY29tbWl0RW5kID0gbV9zdGFydDsKICAgICBtX21heFVzZWQgPSBtX3N0YXJ0OwogfQpAQCAt
NjIsNCArNjYsMTUgQEAgSlNHbG9iYWxPYmplY3QqIFJlZ2lzdGVyRmlsZTo6Z2xvYmFsT2JqZQog
ICAgIHJldHVybiBtX2dsb2JhbE9iamVjdC5nZXQoKTsKIH0KIAorc2l6ZV90IFJlZ2lzdGVyRmls
ZTo6cmVnaXN0ZXJGaWxlU3RhdGlzdGljcygpCit7CisgICAgcmV0dXJuIHNfdG90YWxCeXRlc0Nv
bW1pdHRlZDsKK30KKwordm9pZCBSZWdpc3RlckZpbGU6OmFkZFRvU3RhdGlzdGljcyhzaXplX3Qg
Ynl0ZUNvdW50KQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtdXRleCk7CisgICAgc190b3Rh
bEJ5dGVzQ29tbWl0dGVkICs9IGJ5dGVDb3VudDsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3RlckZpbGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3RlckZpbGUuaAkocmV2aXNpb24g
NjU2MzIpCisrKyBKYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3RlckZpbGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1BhZ2VSZXNlcnZhdGlvbi5oPgor
I2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+CiAjaW5jbHVkZSA8d3RmL1ZNVGFn
cy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTEzNCwxMiArMTM1LDE2IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB2b2lkIG1hcmtHbG9iYWxzKE1hcmtTdGFjayYgbWFya1N0YWNrLCBIZWFw
KiBoZWFwKSB7IGhlYXAtPm1hcmtDb25zZXJ2YXRpdmVseShtYXJrU3RhY2ssIGxhc3RHbG9iYWwo
KSwgbV9zdGFydCk7IH0KICAgICAgICAgdm9pZCBtYXJrQ2FsbEZyYW1lcyhNYXJrU3RhY2smIG1h
cmtTdGFjaywgSGVhcCogaGVhcCkgeyBoZWFwLT5tYXJrQ29uc2VydmF0aXZlbHkobWFya1N0YWNr
LCBtX3N0YXJ0LCBtX2VuZCk7IH0KIAorICAgICAgICBzdGF0aWMgc2l6ZV90IHJlZ2lzdGVyRmls
ZVN0YXRpc3RpY3MoKTsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQgY2hlY2tBbGxvY2F0
ZWRPa2F5KGJvb2wgb2theSk7Ci0KKyAgICAgICAgdm9pZCBhZGRUb1N0YXRpc3RpY3Moc2l6ZV90
IGJ5dGVDb3VudCk7CiAgICAgICAgIHZvaWQgcmVsZWFzZUV4Y2Vzc0NhcGFjaXR5KCk7CiAgICAg
ICAgIHNpemVfdCBtX251bUdsb2JhbHM7CiAgICAgICAgIGNvbnN0IHNpemVfdCBtX21heEdsb2Jh
bHM7CisgICAgICAgIHN0YXRpYyBzaXplX3Qgc190b3RhbEJ5dGVzQ29tbWl0dGVkOworICAgICAg
ICBNdXRleCBtdXRleDsKICAgICAgICAgUmVnaXN0ZXIqIG1fc3RhcnQ7CiAgICAgICAgIFJlZ2lz
dGVyKiBtX2VuZDsKICAgICAgICAgUmVnaXN0ZXIqIG1fbWF4OwpAQCAtMTY2LDYgKzE3MSw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBjaGVja0FsbG9jYXRlZE9rYXkoYmFzZSk7CiAgICAg
ICAgIHNpemVfdCBjb21taXR0ZWRTaXplID0gcm91bmRVcEFsbG9jYXRpb25TaXplKG1heEdsb2Jh
bHMgKiBzaXplb2YoUmVnaXN0ZXIpLCBjb21taXRTaXplKTsKICAgICAgICAgY2hlY2tBbGxvY2F0
ZWRPa2F5KG1fcmVzZXJ2YXRpb24uY29tbWl0KGJhc2UsIGNvbW1pdHRlZFNpemUpKTsKKyAgICAg
ICAgYWRkVG9TdGF0aXN0aWNzKGNvbW1pdHRlZFNpemUpOwogICAgICAgICBtX2NvbW1pdEVuZCA9
IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPFJlZ2lzdGVyKj4ocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
YmFzZSkgKyBjb21taXR0ZWRTaXplKTsKICAgICAgICAgbV9zdGFydCA9IHN0YXRpY19jYXN0PFJl
Z2lzdGVyKj4oYmFzZSkgKyBtYXhHbG9iYWxzOwogICAgICAgICBtX2VuZCA9IG1fc3RhcnQ7CkBA
IC0xOTMsNiArMTk5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGlmIChuZXdFbmQgPiBt
X2NvbW1pdEVuZCkgewogICAgICAgICAgICAgc2l6ZV90IHNpemUgPSByb3VuZFVwQWxsb2NhdGlv
blNpemUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obmV3RW5kKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KG1fY29tbWl0RW5kKSwgY29tbWl0U2l6ZSk7CiAgICAgICAgICAgICBjaGVja0FsbG9j
YXRlZE9rYXkobV9yZXNlcnZhdGlvbi5jb21taXQobV9jb21taXRFbmQsIHNpemUpKTsKKyAgICAg
ICAgICAgIGFkZFRvU3RhdGlzdGljcyhzaXplKTsKICAgICAgICAgICAgIG1fY29tbWl0RW5kID0g
cmVpbnRlcnByZXRfY2FzdF9wdHI8UmVnaXN0ZXIqPihyZWludGVycHJldF9jYXN0PGNoYXIqPiht
X2NvbW1pdEVuZCkgKyBzaXplKTsKICAgICAgICAgfQogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9q
aXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2pp
dC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgJKHJldmlzaW9uIDY1NjMyKQorKysgSmF2YVNjcmlwdENv
cmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjk3LDYgKzI5
Nyw3IEBAIHB1YmxpYzoKICNlbHNlCiAgICAgI2Vycm9yICJUaGUgY2FjaGVGbHVzaCBzdXBwb3J0
IGlzIG1pc3Npbmcgb24gdGhpcyBwbGF0Zm9ybS4iCiAjZW5kaWYKKyAgICBzdGF0aWMgc2l6ZV90
IGV4ZWN1dGFibGVBbGxvY2F0b3JTdGF0aXN0aWNzKCk7CiAKIHByaXZhdGU6CiAKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBv
b2wuY3BwCShyZXZpc2lvbiA2NTYzMikKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxl
QWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsMTMgKzEyNywx
NyBAQCBjbGFzcyBGaXhlZFZNUG9vbEFsbG9jYXRvcgogCiAgICAgdm9pZCByZWxlYXNlKHZvaWQq
IHBvc2l0aW9uLCBzaXplX3Qgc2l6ZSkKICAgICB7CisgICAgICAgIEFTU0VSVChJc0hlbGQoc3Bp
bmxvY2spKTsKICAgICAgICAgbV9hbGxvY2F0aW9uLmRlY29tbWl0KHBvc2l0aW9uLCBzaXplKTsK
KyAgICAgICAgYWRkVG9TdGF0aXN0aWNzKC1zaXplKTsKICAgICB9CiAKICAgICB2b2lkIHJldXNl
KHZvaWQqIHBvc2l0aW9uLCBzaXplX3Qgc2l6ZSkKICAgICB7CisgICAgICAgIEFTU0VSVChJc0hl
bGQoc3BpbmxvY2spKTsKICAgICAgICAgYm9vbCBva2F5ID0gbV9hbGxvY2F0aW9uLmNvbW1pdChw
b3NpdGlvbiwgc2l6ZSk7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQob2theSwgb2theSk7CisgICAg
ICAgIGFkZFRvU3RhdGlzdGljcyhzaXplKTsKICAgICB9CiAKICAgICAvLyBBbGwgYWRkaXRpb24g
dG8gdGhlIGZyZWUgbGlzdCBzaG91bGQgZ28gdGhyb3VnaCB0aGlzIG1ldGhvZCwgcmF0aGVyIHRo
YW4KQEAgLTMzOCw2ICszNDIsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgYm9vbCBpc1ZhbGlk
KCkgY29uc3QgeyByZXR1cm4gISFtX2FsbG9jYXRpb247IH0KKyAgICBzdGF0aWMgc2l6ZV90IGZp
eGVkVk1Qb29sQWxsb2NhdG9yU3RhdGlzdGljcygpOwogCiBwcml2YXRlOgogICAgIHZvaWQqIGFs
bG9jSW50ZXJuYWwoc2l6ZV90IHNpemUpCkBAIC00MTQsNiArNDE5LDExIEBAIHByaXZhdGU6CiAg
ICAgfQogI2VuZGlmCiAKKyAgICB2b2lkIGFkZFRvU3RhdGlzdGljcyhzaXplX3QgYnl0ZUNvdW50
KQorICAgIHsKKyAgICAgICAgc190b3RhbEJ5dGVzQ29tbWl0dGVkICs9IGJ5dGVDb3VudDsKKyAg
ICB9CisKICAgICAvLyBGcmVlZCBzcGFjZSBmcm9tIHRoZSBtb3N0IGNvbW1vbiBzaXplZCBhbGxv
Y2F0aW9ucyB3aWxsIGJlIGhlbGQgaW4gdGhpcyBsaXN0LCAuLi4KICAgICBjb25zdCBzaXplX3Qg
bV9jb21tb25TaXplOwogICAgIFZlY3Rvcjx2b2lkKj4gbV9jb21tb25TaXplZEFsbG9jYXRpb25z
OwpAQCAtNDI1LDggKzQzNSwyMSBAQCBwcml2YXRlOgogICAgIHNpemVfdCBtX2NvdW50RnJlZWRT
aW5jZUxhc3RDb2FsZXNjZTsKIAogICAgIFBhZ2VSZXNlcnZhdGlvbiBtX2FsbG9jYXRpb247Cisg
ICAgc3RhdGljIHNpemVfdCBzX3RvdGFsQnl0ZXNDb21taXR0ZWQ7CiB9OwogCitzaXplX3QgRml4
ZWRWTVBvb2xBbGxvY2F0b3I6OnNfdG90YWxCeXRlc0NvbW1pdHRlZCA9IDA7CisKK3NpemVfdCBG
aXhlZFZNUG9vbEFsbG9jYXRvcjo6Zml4ZWRWTVBvb2xBbGxvY2F0b3JTdGF0aXN0aWNzKCkKK3sK
KyAgICByZXR1cm4gc190b3RhbEJ5dGVzQ29tbWl0dGVkOworfQorCitzaXplX3QgRXhlY3V0YWJs
ZUFsbG9jYXRvcjo6ZXhlY3V0YWJsZUFsbG9jYXRvclN0YXRpc3RpY3MoKQoreworICAgIHJldHVy
biBGaXhlZFZNUG9vbEFsbG9jYXRvcjo6Zml4ZWRWTVBvb2xBbGxvY2F0b3JTdGF0aXN0aWNzKCk7
Cit9CisKIHZvaWQgRXhlY3V0YWJsZUFsbG9jYXRvcjo6aW50aWFsaXplUGFnZVNpemUoKQogewog
ICAgIEV4ZWN1dGFibGVBbGxvY2F0b3I6OnBhZ2VTaXplID0gZ2V0cGFnZXNpemUoKTsKSW5kZXg6
IFdlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2Njk0NCkKKysrIFdlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTggQEAKKzIwMTAtMDktMDcgIEpvaG4gVGhlcnJlbGwgIDxqdGhlcnJlbGxA
YXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZGVkIHN0YXRpc3RpY3Mgc2FtcGxpbmcgYW5kIHJlcG9ydGluZyBmb3IgSmF2YVNjcmlw
dENvcmUncyBSZWdpc3RlckZpbGUgYW5kIEV4ZWN1dGFibGVBbGxvY2F0b3IgY2xhc3NlcworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDUxMzQKKworICAg
ICAgICBBZGRlZCBhYmlsaXR5IHRvIGVuYWJsZSBuZXcgSmF2YVNjcmlwdENvcmUgc3RhdGlzdGlj
cyBzYW1wbGluZyBhbmQgcmVwb3J0aW5nIGZvciBSZWdpc3RlckZpbGUgCisgICAgICAgIGFuZCBF
eGVjdXRhYmxlQWxsb2NhdG9yIGNsYXNzZXMuIEFkZGVkIHJlcG9ydGluZyBvZiBKYXZhU2NyaXB0
Q29yZSdzIHN0YWNrIGNvbW1pdHRlZCBtZW1vcnkgCisgICAgICAgIGFuZCBKSVQgY29kZSBjb21t
aXR0ZWQgbWVtb3J5IHN0YXRpc3RpY3MgdG8gV2ViQ29yZVN0YXRpc3RpY3MgbWVtb3J5U3RhdGlz
dGljcy4KKworICAgICAgICAqIE1pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW06CisgICAgICAgICgr
W1dlYkNvcmVTdGF0aXN0aWNzIG1lbW9yeVN0YXRpc3RpY3NdKToKKyAgICAgICAgQWRkZWQgc3Rh
dGlzdGljcyByZXBvcnRpbmcgZm9yIEpTQyBSZWdpc3RlckZpbGUgYW5kIEV4ZWN1dGFibGVBbGxv
Y2F0b3IuCisKIDIwMTAtMDktMDcgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBPbGl2ZXIgSHVudC4KSW5kZXg6IFdlYktpdC9tYWMv
TWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL01pc2Mv
V2ViQ29yZVN0YXRpc3RpY3MubW0JKHJldmlzaW9uIDY1NjMyKQorKysgV2ViS2l0L21hYy9NaXNj
L1dlYkNvcmVTdGF0aXN0aWNzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw4IEBACiAj
aW1wb3J0ICJXZWJDb3JlU3RhdGlzdGljcy5oIgogCiAjaW1wb3J0ICJET01FbGVtZW50SW50ZXJu
YWwuaCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL1JlZ2lzdGVyRmlsZS5oPgorI2ltcG9ydCA8
SmF2YVNjcmlwdENvcmUvRXhlY3V0YWJsZUFsbG9jYXRvci5oPgogI2ltcG9ydCAiV2ViQ2FjaGUu
aCIKICNpbXBvcnQgIldlYkZyYW1lSW50ZXJuYWwuaCIKICNpbXBvcnQgPHJ1bnRpbWUvSlNMb2Nr
Lmg+CkBAIC0xOTYsMTIgKzE5OCwxNiBAQCArIChOU0RpY3Rpb25hcnkgKiltZW1vcnlTdGF0aXN0
aWNzCiAgICAgV1RGOjpGYXN0TWFsbG9jU3RhdGlzdGljcyBmYXN0TWFsbG9jU3RhdGlzdGljcyA9
IFdURjo6ZmFzdE1hbGxvY1N0YXRpc3RpY3MoKTsKICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOwogICAgIEhlYXA6OlN0YXRpc3RpY3MganNIZWFwU3RhdGlzdGljcyA9IEpT
RE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5zdGF0aXN0aWNzKCk7CisgICAg
c2l6ZV90IGpzY1N0YWNrQnl0ZXMgPSBSZWdpc3RlckZpbGU6OnJlZ2lzdGVyRmlsZVN0YXRpc3Rp
Y3MoKTsKKyAgICBzaXplX3QganNjSklUQnl0ZXMgPSBFeGVjdXRhYmxlQWxsb2NhdG9yOjpleGVj
dXRhYmxlQWxsb2NhdG9yU3RhdGlzdGljcygpOwogICAgIHJldHVybiBbTlNEaWN0aW9uYXJ5IGRp
Y3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6CiAgICAgICAgICAgICAgICAgW05TTnVtYmVyIG51
bWJlcldpdGhJbnQ6ZmFzdE1hbGxvY1N0YXRpc3RpY3MucmVzZXJ2ZWRWTUJ5dGVzXSwgQCJGYXN0
TWFsbG9jUmVzZXJ2ZWRWTUJ5dGVzIiwKICAgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVy
V2l0aEludDpmYXN0TWFsbG9jU3RhdGlzdGljcy5jb21taXR0ZWRWTUJ5dGVzXSwgQCJGYXN0TWFs
bG9jQ29tbWl0dGVkVk1CeXRlcyIsCiAgICAgICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldp
dGhJbnQ6ZmFzdE1hbGxvY1N0YXRpc3RpY3MuZnJlZUxpc3RCeXRlc10sIEAiRmFzdE1hbGxvY0Zy
ZWVMaXN0Qnl0ZXMiLAogICAgICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoSW50Ompz
SGVhcFN0YXRpc3RpY3Muc2l6ZV0sIEAiSmF2YVNjcmlwdEhlYXBTaXplIiwKICAgICAgICAgICAg
ICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpqc0hlYXBTdGF0aXN0aWNzLmZyZWVdLCBAIkph
dmFTY3JpcHRGcmVlU2l6ZSIsCisgICAgICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhV
bnNpZ25lZEludDoodW5zaWduZWQgaW50KWpzY1N0YWNrQnl0ZXNdLCBAIkphdmFTY3JpcHRTdGFj
a1NpemUiLAorICAgICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoVW5zaWduZWRJbnQ6
KHVuc2lnbmVkIGludClqc2NKSVRCeXRlc10sIEAiSmF2YVNjcmlwdEpJVFNpemUiLAogICAgICAg
ICAgICAgbmlsXTsKIH0KIAo=
</data>
<flag name="review"
          id="55945"
          type_id="1"
          status="-"
          setter="ap"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66979</attachid>
            <date>2010-09-08 18:12:09 -0700</date>
            <delta_ts>2010-09-08 18:26:45 -0700</delta_ts>
            <desc>Revised patch w/ changes in Mutex use and function renaming</desc>
            <filename>OpenSource45134.patch</filename>
            <type>text/plain</type>
            <size>12768</size>
            <attacher name="John Therrell">jtherrell</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY3MDQxKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTQgQEAKKzIwMTAtMDktMDcgIEpvaG4gVGhl
cnJlbGwgIDxqdGhlcnJlbGxAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIHN0YXRpc3RpY3Mgc2FtcGxpbmcgYW5kIHJlcG9y
dGluZyBmb3IgSmF2YVNjcmlwdENvcmUncyBSZWdpc3RlckZpbGUgYW5kIEV4ZWN1dGFibGVBbGxv
Y2F0b3IgY2xhc3NlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDUxMzQKKworICAgICAgICBBZGRlZCB0aHJlYWQtc2FmZSBjb21taXR0ZWQgYnl0ZSBj
b3VudGluZyBhbmQgcmVwb3J0aW5nIGZ1bmN0aW9uYWxpdHkgdG8gUmVnaXN0ZXJGaWxlIGFuZCAK
KyAgICAgICAgRXhlY3V0YWJsZUFsbG9jYXRvci4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3Jl
LmV4cDoKKyAgICAgICAgRXhwb3J0ZWQgbmV3IHN5bWJvbHMgdG8gYWxsb3cgZm9yIFdlYktpdCB0
byBnZXQgc3RhdGlzdGljcyBmcm9tIEphdmFTY3JpcHRDb3JlIGNsYXNzZXMuCisgICAgICAgIAor
ICAgICAgICAqIGludGVycHJldGVyL1JlZ2lzdGVyRmlsZS5jcHA6CisgICAgICAgIChKU0M6OnJl
Z2lzdGVyRmlsZVN0YXRpc3RpY3NNdXRleCk6CisgICAgICAgIEFkZGVkIGZ1bmN0aW9uIHdoaWNo
IHJldHVybnMgYSBzdGF0aWMgTXV0ZXggdXNlZCBmb3IgbG9ja2luZyBkdXJpbmcgcmVhZC93cml0
ZSBhY2Nlc3MgdG8KKyAgICAgICAgc3RhdGljIGNvbW1pdHRlZCBieXRlIGNvdW50IHZhcmlhYmxl
LgorICAgICAgICAoSlNDOjpSZWdpc3RlckZpbGU6On5SZWdpc3RlckZpbGUpOgorICAgICAgICBB
ZGRlZCBjYWxsIHRvIGFkZFRvU3RhdGlzdGljcyBzaW5jZSBtZW1vcnkgaXMgZGVjb21taXR0ZWQg
aGVyZS4KKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJGaWxlOjpyZWxlYXNlRXhjZXNzQ2FwYWNpdHkp
OgorICAgICAgICBBZGRlZCBjYWxsIHRvIGFkZFRvU3RhdGlzdGljcyBzaW5jZSBtZW1vcnkgaXMg
ZGVjb21taXR0ZWQgaGVyZS4KKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJGaWxlOjppbml0aWFsaXpl
VGhyZWFkaW5nKToKKyAgICAgICAgQWRkZWQgZnVuY3Rpb24gd2hpY2ggY2FsbHMgcmVnaXN0ZXJG
aWxlU3RhdGlzdGljc011dGV4KCkuCisgICAgICAgIChKU0M6OlJlZ2lzdGVyRmlsZTo6Y29tbWl0
dGVkQnl0ZUNvdW50KToKKyAgICAgICAgQWRkZWQgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyB0aGUg
Y3VycmVudCBjb21taXR0ZWQgYnl0ZSBjb3VudCBmb3IgUmVnaXN0ZXJGaWxlLgorICAgICAgICAo
SlNDOjpSZWdpc3RlckZpbGU6OmFkZFRvQ29tbWl0dGVkQnl0ZUNvdW50KToKKyAgICAgICAgQWRk
ZWQgZnVuY3Rpb24gd2hpY2ggdXBkYXRlcyBjb21taXR0ZWQgYnl0ZSBjb3VudC4KKyAgICAgICAg
CisgICAgICAgICogaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmg6CisgICAgICAgIChKU0M6OlJl
Z2lzdGVyRmlsZTo6UmVnaXN0ZXJGaWxlKToKKyAgICAgICAgQWRkZWQgY2FsbCB0byBhZGRUb1N0
YXRpc3RpY3Mgc2luY2UgbWVtb3J5IGlzIGNvbW1pdHRlZCBoZXJlLgorICAgICAgICAoSlNDOjpS
ZWdpc3RlckZpbGU6Omdyb3cpOgorICAgICAgICBBZGRlZCBjYWxsIHRvIGFkZFRvU3RhdGlzdGlj
cyBzaW5jZSBtZW1vcnkgaXMgY29tbWl0dGVkIGhlcmUuCisgICAgICAgIAorICAgICAgICAqIGpp
dC9FeGVjdXRhYmxlQWxsb2NhdG9yLmg6CisgICAgICAgIEFkZGVkIGZ1bmN0aW9uIHByb3RvdHlw
ZSBmb3IgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjb21taXR0ZWRCeXRlQ291bnQoKS4KKyAgICAg
ICAgCisgICAgICAgICogaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHA6Cisg
ICAgICAgIChKU0M6OkZpeGVkVk1Qb29sQWxsb2NhdG9yOjpyZWxlYXNlKToKKyAgICAgICAgQWRk
ZWQgY2FsbCB0byBhZGRUb1N0YXRpc3RpY3Mgc2luY2UgbWVtb3J5IGlzIGRlY29tbWl0dGVkIGhl
cmUuCisgICAgICAgIChKU0M6OkZpeGVkVk1Qb29sQWxsb2NhdG9yOjpyZXVzZSk6CisgICAgICAg
IEFkZGVkIGNhbGwgdG8gYWRkVG9TdGF0aXN0aWNzIHNpbmNlIG1lbW9yeSBpcyBjb21taXR0ZWQg
aGVyZS4KKyAgICAgICAgKEpTQzo6Rml4ZWRWTVBvb2xBbGxvY2F0b3I6OmFkZFRvQ29tbWl0dGVk
Qnl0ZUNvdW50KToKKyAgICAgICAgQWRkZWQgZnVuY3Rpb24gd2hpY2ggdXBkYXRlcyBjb21taXR0
ZWQgYnl0ZSBjb3VudC4KKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6Y29tbWl0
dGVkQnl0ZUNvdW50KToKKyAgICAgICAgQWRkZWQgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyB0aGUg
Y3VycmVudCBjb21taXR0ZWQgYnl0ZSBjb3VudCBmb3IgRXhlY3V0YWJsZUFsbG9jYXRvci4KKyAg
ICAgICAgCisgICAgICAgICogcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcDoKKyAgICAg
ICAgKEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZ09uY2UpOgorICAgICAgICBBZGRlZCBjYWxsIHRv
IFJlZ2lzdGVyRmlsZTo6aW5pdGlhbGl6ZVRocmVhZGluZy4KKwogMjAxMC0wOS0wOCAgUm9iZXJ0
IEhvZ2FuICA8cm9iZXJ0QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW50b25p
byBHb21lcy4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHJldmlzaW9uIDY1NjMy
KQorKysgSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzEsNiArMTMxLDcgQEAgX19aTjNKU0MxMkpTR2xvYmFsRGF0YTE0cmVzZXREYXRlQ2FjaGVF
dgogX19aTjNKU0MxMkpTR2xvYmFsRGF0YTE0c2hhcmVkSW5zdGFuY2VFdgogX19aTjNKU0MxMkpT
R2xvYmFsRGF0YTZjcmVhdGVFTlNfMTVUaHJlYWRTdGFja1R5cGVFCiBfX1pOM0pTQzEySlNHbG9i
YWxEYXRhRDFFdgorX19aTjNKU0MxMlJlZ2lzdGVyRmlsZTE4Y29tbWl0dGVkQnl0ZUNvdW50RXYK
IF9fWk4zSlNDMTJTYW1wbGluZ1Rvb2w1c2V0dXBFdgogX19aTjNKU0MxMlNtYWxsU3RyaW5nczE3
Y3JlYXRlRW1wdHlTdHJpbmdFUE5TXzEySlNHbG9iYWxEYXRhRQogX19aTjNKU0MxMlNtYWxsU3Ry
aW5nczI3Y3JlYXRlU2luZ2xlQ2hhcmFjdGVyU3RyaW5nRVBOU18xMkpTR2xvYmFsRGF0YUVoCkBA
IC0xOTEsNiArMTkyLDcgQEAgX19aTjNKU0MxOFByb3BlcnR5RGVzY3JpcHRvcjE3ZGVmYXVsdEF0
dAogX19aTjNKU0MxOFByb3BlcnR5RGVzY3JpcHRvcjIxc2V0QWNjZXNzb3JEZXNjcmlwdG9yRU5T
XzdKU1ZhbHVlRVMxX2oKIF9fWk4zSlNDMThQcm9wZXJ0eURlc2NyaXB0b3I5c2V0R2V0dGVyRU5T
XzdKU1ZhbHVlRQogX19aTjNKU0MxOFByb3BlcnR5RGVzY3JpcHRvcjlzZXRTZXR0ZXJFTlNfN0pT
VmFsdWVFCitfX1pOM0pTQzE5RXhlY3V0YWJsZUFsbG9jYXRvcjE4Y29tbWl0dGVkQnl0ZUNvdW50
RXYKIF9fWk4zSlNDMTlpbml0aWFsaXplVGhyZWFkaW5nRXYKIF9fWk4zSlNDMjBNYXJrZWRBcmd1
bWVudEJ1ZmZlcjEwc2xvd0FwcGVuZEVOU183SlNWYWx1ZUUKIF9fWk4zSlNDMjBjcmVhdGVSZWZl
cmVuY2VFcnJvckVQTlNfOUV4ZWNTdGF0ZUVSS05TXzdVU3RyaW5nRQpJbmRleDogSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3RlckZpbGUuY3BwCShyZXZpc2lvbiA2NTYzMikKKysr
IEphdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyRmlsZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMzLDE2ICszMywyNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorc3RhdGljIHNpemVf
dCBjb21taXR0ZWRCeXRlc0NvdW50ID0gMDsKKworc3RhdGljIE11dGV4JiByZWdpc3RlckZpbGVT
dGF0aXN0aWNzTXV0ZXgoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoTXV0ZXgsIHN0YXRp
Y011dGV4LCAoKSk7CisgICAgcmV0dXJuIHN0YXRpY011dGV4OworfSAgICAKKyAgICAKIFJlZ2lz
dGVyRmlsZTo6flJlZ2lzdGVyRmlsZSgpCiB7CiAgICAgdm9pZCogYmFzZSA9IG1fcmVzZXJ2YXRp
b24uYmFzZSgpOwogICAgIG1fcmVzZXJ2YXRpb24uZGVjb21taXQoYmFzZSwgcmVpbnRlcnByZXRf
Y2FzdDxpbnRwdHJfdD4obV9jb21taXRFbmQpIC0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4o
YmFzZSkpOworICAgIGFkZFRvQ29tbWl0dGVkQnl0ZUNvdW50KC0ocmVpbnRlcnByZXRfY2FzdDxp
bnRwdHJfdD4obV9jb21taXRFbmQpIC0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oYmFzZSkp
KTsKICAgICBtX3Jlc2VydmF0aW9uLmRlYWxsb2NhdGUoKTsKIH0KIAogdm9pZCBSZWdpc3RlckZp
bGU6OnJlbGVhc2VFeGNlc3NDYXBhY2l0eSgpCiB7CiAgICAgbV9yZXNlcnZhdGlvbi5kZWNvbW1p
dChtX3N0YXJ0LCByZWludGVycHJldF9jYXN0PGludHB0cl90PihtX2NvbW1pdEVuZCkgLSByZWlu
dGVycHJldF9jYXN0PGludHB0cl90PihtX3N0YXJ0KSk7CisgICAgYWRkVG9Db21taXR0ZWRCeXRl
Q291bnQoLShyZWludGVycHJldF9jYXN0PGludHB0cl90PihtX2NvbW1pdEVuZCkgLSByZWludGVy
cHJldF9jYXN0PGludHB0cl90PihtX3N0YXJ0KSkpOwogICAgIG1fY29tbWl0RW5kID0gbV9zdGFy
dDsKICAgICBtX21heFVzZWQgPSBtX3N0YXJ0OwogfQpAQCAtNjIsNCArNzIsMjEgQEAgSlNHbG9i
YWxPYmplY3QqIFJlZ2lzdGVyRmlsZTo6Z2xvYmFsT2JqZQogICAgIHJldHVybiBtX2dsb2JhbE9i
amVjdC5nZXQoKTsKIH0KIAordm9pZCBSZWdpc3RlckZpbGU6OmluaXRpYWxpemVUaHJlYWRpbmco
KQoreworICAgIHJlZ2lzdGVyRmlsZVN0YXRpc3RpY3NNdXRleCgpOworfQorCitzaXplX3QgUmVn
aXN0ZXJGaWxlOjpjb21taXR0ZWRCeXRlQ291bnQoKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tl
cihyZWdpc3RlckZpbGVTdGF0aXN0aWNzTXV0ZXgoKSk7CisgICAgcmV0dXJuIGNvbW1pdHRlZEJ5
dGVzQ291bnQ7Cit9CisKK3ZvaWQgUmVnaXN0ZXJGaWxlOjphZGRUb0NvbW1pdHRlZEJ5dGVDb3Vu
dChzaXplX3QgYnl0ZUNvdW50KQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihyZWdpc3RlckZp
bGVTdGF0aXN0aWNzTXV0ZXgoKSk7CisgICAgY29tbWl0dGVkQnl0ZXNDb3VudCArPSBieXRlQ291
bnQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvUmVnaXN0ZXJGaWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvUmVnaXN0ZXJGaWxlLmgJKHJldmlzaW9uIDY1NjMyKQorKysgSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNCwxMCArMTM0
LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIG1hcmtHbG9iYWxzKE1hcmtTdGFj
ayYgbWFya1N0YWNrLCBIZWFwKiBoZWFwKSB7IGhlYXAtPm1hcmtDb25zZXJ2YXRpdmVseShtYXJr
U3RhY2ssIGxhc3RHbG9iYWwoKSwgbV9zdGFydCk7IH0KICAgICAgICAgdm9pZCBtYXJrQ2FsbEZy
YW1lcyhNYXJrU3RhY2smIG1hcmtTdGFjaywgSGVhcCogaGVhcCkgeyBoZWFwLT5tYXJrQ29uc2Vy
dmF0aXZlbHkobWFya1N0YWNrLCBtX3N0YXJ0LCBtX2VuZCk7IH0KIAorICAgICAgICBzdGF0aWMg
c2l6ZV90IGNvbW1pdHRlZEJ5dGVDb3VudCgpOworICAgICAgICBzdGF0aWMgdm9pZCBpbml0aWFs
aXplVGhyZWFkaW5nKCk7CisKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIGNoZWNrQWxsb2Nh
dGVkT2theShib29sIG9rYXkpOwotCiAgICAgICAgIHZvaWQgcmVsZWFzZUV4Y2Vzc0NhcGFjaXR5
KCk7CisgICAgICAgIHZvaWQgYWRkVG9Db21taXR0ZWRCeXRlQ291bnQoc2l6ZV90IGJ5dGVDb3Vu
dCk7CiAgICAgICAgIHNpemVfdCBtX251bUdsb2JhbHM7CiAgICAgICAgIGNvbnN0IHNpemVfdCBt
X21heEdsb2JhbHM7CiAgICAgICAgIFJlZ2lzdGVyKiBtX3N0YXJ0OwpAQCAtMTY2LDYgKzE2OSw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBjaGVja0FsbG9jYXRlZE9rYXkoYmFzZSk7CiAg
ICAgICAgIHNpemVfdCBjb21taXR0ZWRTaXplID0gcm91bmRVcEFsbG9jYXRpb25TaXplKG1heEds
b2JhbHMgKiBzaXplb2YoUmVnaXN0ZXIpLCBjb21taXRTaXplKTsKICAgICAgICAgY2hlY2tBbGxv
Y2F0ZWRPa2F5KG1fcmVzZXJ2YXRpb24uY29tbWl0KGJhc2UsIGNvbW1pdHRlZFNpemUpKTsKKyAg
ICAgICAgYWRkVG9Db21taXR0ZWRCeXRlQ291bnQoY29tbWl0dGVkU2l6ZSk7CiAgICAgICAgIG1f
Y29tbWl0RW5kID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8UmVnaXN0ZXIqPihyZWludGVycHJldF9j
YXN0PGNoYXIqPihiYXNlKSArIGNvbW1pdHRlZFNpemUpOwogICAgICAgICBtX3N0YXJ0ID0gc3Rh
dGljX2Nhc3Q8UmVnaXN0ZXIqPihiYXNlKSArIG1heEdsb2JhbHM7CiAgICAgICAgIG1fZW5kID0g
bV9zdGFydDsKQEAgLTE5Myw2ICsxOTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgaWYg
KG5ld0VuZCA+IG1fY29tbWl0RW5kKSB7CiAgICAgICAgICAgICBzaXplX3Qgc2l6ZSA9IHJvdW5k
VXBBbGxvY2F0aW9uU2l6ZShyZWludGVycHJldF9jYXN0PGNoYXIqPihuZXdFbmQpIC0gcmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4obV9jb21taXRFbmQpLCBjb21taXRTaXplKTsKICAgICAgICAgICAg
IGNoZWNrQWxsb2NhdGVkT2theShtX3Jlc2VydmF0aW9uLmNvbW1pdChtX2NvbW1pdEVuZCwgc2l6
ZSkpOworICAgICAgICAgICAgYWRkVG9Db21taXR0ZWRCeXRlQ291bnQoc2l6ZSk7CiAgICAgICAg
ICAgICBtX2NvbW1pdEVuZCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPFJlZ2lzdGVyKj4ocmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4obV9jb21taXRFbmQpICsgc2l6ZSk7CiAgICAgICAgIH0KIApJbmRl
eDogSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCShyZXZpc2lvbiA2NTYz
MikKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI5Nyw2ICsyOTcsNyBAQCBwdWJsaWM6CiAjZWxzZQogICAgICNlcnJvciAiVGhl
IGNhY2hlRmx1c2ggc3VwcG9ydCBpcyBtaXNzaW5nIG9uIHRoaXMgcGxhdGZvcm0uIgogI2VuZGlm
CisgICAgc3RhdGljIHNpemVfdCBjb21taXR0ZWRCeXRlQ291bnQoKTsKIAogcHJpdmF0ZToKIApJ
bmRleDogSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JG
aXhlZFZNUG9vbC5jcHAJKHJldmlzaW9uIDY1NjMyKQorKysgSmF2YVNjcmlwdENvcmUvaml0L0V4
ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDYg
KzU0LDkgQEAKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKIG5hbWVzcGFjZSBKU0MgeworICAgIAor
c3RhdGljIHNpemVfdCBjb21taXR0ZWRCeXRlc0NvdW50ID0gMDsgIAorc3RhdGljIFNwaW5Mb2Nr
IHNwaW5sb2NrID0gU1BJTkxPQ0tfSU5JVElBTElaRVI7CiAKIC8vIEZyZWVMaXN0RW50cnkgZGVz
Y3JpYmVzIGEgZnJlZSBjaHVuayBvZiBtZW1vcnksIHN0b3JlZCBpbiB0aGUgZnJlZUxpc3QuCiBz
dHJ1Y3QgRnJlZUxpc3RFbnRyeSB7CkBAIC0xMjgsMTIgKzEzMSwxNCBAQCBjbGFzcyBGaXhlZFZN
UG9vbEFsbG9jYXRvcgogICAgIHZvaWQgcmVsZWFzZSh2b2lkKiBwb3NpdGlvbiwgc2l6ZV90IHNp
emUpCiAgICAgewogICAgICAgICBtX2FsbG9jYXRpb24uZGVjb21taXQocG9zaXRpb24sIHNpemUp
OworICAgICAgICBhZGRUb0NvbW1pdHRlZEJ5dGVDb3VudCgtc2l6ZSk7CiAgICAgfQogCiAgICAg
dm9pZCByZXVzZSh2b2lkKiBwb3NpdGlvbiwgc2l6ZV90IHNpemUpCiAgICAgewogICAgICAgICBi
b29sIG9rYXkgPSBtX2FsbG9jYXRpb24uY29tbWl0KHBvc2l0aW9uLCBzaXplKTsKICAgICAgICAg
QVNTRVJUX1VOVVNFRChva2F5LCBva2F5KTsKKyAgICAgICAgYWRkVG9Db21taXR0ZWRCeXRlQ291
bnQoc2l6ZSk7CiAgICAgfQogCiAgICAgLy8gQWxsIGFkZGl0aW9uIHRvIHRoZSBmcmVlIGxpc3Qg
c2hvdWxkIGdvIHRocm91Z2ggdGhpcyBtZXRob2QsIHJhdGhlciB0aGFuCkBAIC00MTQsNiArNDE5
LDEyIEBAIHByaXZhdGU6CiAgICAgfQogI2VuZGlmCiAKKyAgICB2b2lkIGFkZFRvQ29tbWl0dGVk
Qnl0ZUNvdW50KHNpemVfdCBieXRlQ291bnQpCisgICAgeworICAgICAgICBBU1NFUlQoc3Bpbmxv
Y2suSXNIZWxkKCkpOworICAgICAgICBjb21taXR0ZWRCeXRlc0NvdW50ICs9IGJ5dGVDb3VudDsK
KyAgICB9CisKICAgICAvLyBGcmVlZCBzcGFjZSBmcm9tIHRoZSBtb3N0IGNvbW1vbiBzaXplZCBh
bGxvY2F0aW9ucyB3aWxsIGJlIGhlbGQgaW4gdGhpcyBsaXN0LCAuLi4KICAgICBjb25zdCBzaXpl
X3QgbV9jb21tb25TaXplOwogICAgIFZlY3Rvcjx2b2lkKj4gbV9jb21tb25TaXplZEFsbG9jYXRp
b25zOwpAQCAtNDI3LDE0ICs0MzgsMTkgQEAgcHJpdmF0ZToKICAgICBQYWdlUmVzZXJ2YXRpb24g
bV9hbGxvY2F0aW9uOwogfTsKIAorc2l6ZV90IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmNvbW1pdHRl
ZEJ5dGVDb3VudCgpCit7CisgICAgU3BpbkxvY2tIb2xkZXIgbG9ja19ob2xkZXIoJnNwaW5sb2Nr
KTsKKyAgICByZXR1cm4gY29tbWl0dGVkQnl0ZXNDb3VudDsKK30gICAKKwogdm9pZCBFeGVjdXRh
YmxlQWxsb2NhdG9yOjppbnRpYWxpemVQYWdlU2l6ZSgpCiB7CiAgICAgRXhlY3V0YWJsZUFsbG9j
YXRvcjo6cGFnZVNpemUgPSBnZXRwYWdlc2l6ZSgpOwogfQogCi1zdGF0aWMgRml4ZWRWTVBvb2xB
bGxvY2F0b3IqIGFsbG9jYXRvciA9IDA7Ci1zdGF0aWMgU3BpbkxvY2sgc3BpbmxvY2sgPSBTUElO
TE9DS19JTklUSUFMSVpFUjsKLQorc3RhdGljIEZpeGVkVk1Qb29sQWxsb2NhdG9yKiBhbGxvY2F0
b3IgPSAwOyAKKyAgICAKIGJvb2wgRXhlY3V0YWJsZUFsbG9jYXRvcjo6aXNWYWxpZCgpIGNvbnN0
CiB7CiAgICAgU3BpbkxvY2tIb2xkZXIgbG9ja19ob2xkZXIoJnNwaW5sb2NrKTsKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAkocmV2aXNp
b24gNjU2MzIpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1OCw3IEBAIHN0YXRpYyB2b2lkIGluaXRpYWxp
emVUaHJlYWRpbmdPbmNlKCkKICNpZiBFTkFCTEUoSlNDX01VTFRJUExFX1RIUkVBRFMpCiAgICAg
c19kdG9hUDVNdXRleCA9IG5ldyBNdXRleDsKICAgICBpbml0aWFsaXplRGF0ZXMoKTsKKyAgICBS
ZWdpc3RlckZpbGU6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKICNlbmRpZgogfQogCkluZGV4OiBX
ZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL0NoYW5nZUxvZwko
cmV2aXNpb24gNjcwNDEpCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE4IEBACisyMDEwLTA5LTA4ICBKb2huIFRoZXJyZWxsICA8anRoZXJyZWxsQGFw
cGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGRlZCBzdGF0aXN0aWNzIHNhbXBsaW5nIGFuZCByZXBvcnRpbmcgZm9yIEphdmFTY3JpcHRD
b3JlJ3MgUmVnaXN0ZXJGaWxlIGFuZCBFeGVjdXRhYmxlQWxsb2NhdG9yIGNsYXNzZXMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MTM0CisKKyAgICAg
ICAgQWRkZWQgYWJpbGl0eSB0byBlbmFibGUgbmV3IEphdmFTY3JpcHRDb3JlIHN0YXRpc3RpY3Mg
c2FtcGxpbmcgYW5kIHJlcG9ydGluZyBmb3IgUmVnaXN0ZXJGaWxlIAorICAgICAgICBhbmQgRXhl
Y3V0YWJsZUFsbG9jYXRvciBjbGFzc2VzLiBBZGRlZCByZXBvcnRpbmcgb2YgSmF2YVNjcmlwdENv
cmUncyBzdGFjayBjb21taXR0ZWQgbWVtb3J5IAorICAgICAgICBhbmQgSklUIGNvZGUgY29tbWl0
dGVkIG1lbW9yeSBzdGF0aXN0aWNzIHRvIFdlYkNvcmVTdGF0aXN0aWNzIG1lbW9yeVN0YXRpc3Rp
Y3MuCisKKyAgICAgICAgKiBNaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tOgorICAgICAgICAoK1tX
ZWJDb3JlU3RhdGlzdGljcyBtZW1vcnlTdGF0aXN0aWNzXSk6CisgICAgICAgIEFkZGVkIHN0YXRp
c3RpY3MgcmVwb3J0aW5nIGZvciBKU0MgUmVnaXN0ZXJGaWxlIGFuZCBFeGVjdXRhYmxlQWxsb2Nh
dG9yLgorCiAyMDEwLTA5LTA4ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgUnViYmVyLXN0YW1wZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBXZWJLaXQvbWFjL01p
c2MvV2ViQ29yZVN0YXRpc3RpY3MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9NaXNjL1dl
YkNvcmVTdGF0aXN0aWNzLm1tCShyZXZpc2lvbiA2NTYzMikKKysrIFdlYktpdC9tYWMvTWlzYy9X
ZWJDb3JlU3RhdGlzdGljcy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksOCBAQAogI2lt
cG9ydCAiV2ViQ29yZVN0YXRpc3RpY3MuaCIKIAogI2ltcG9ydCAiRE9NRWxlbWVudEludGVybmFs
LmgiCisjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9SZWdpc3RlckZpbGUuaD4KKyNpbXBvcnQgPEph
dmFTY3JpcHRDb3JlL0V4ZWN1dGFibGVBbGxvY2F0b3IuaD4KICNpbXBvcnQgIldlYkNhY2hlLmgi
CiAjaW1wb3J0ICJXZWJGcmFtZUludGVybmFsLmgiCiAjaW1wb3J0IDxydW50aW1lL0pTTG9jay5o
PgpAQCAtMTk2LDEyICsxOTgsMTYgQEAgKyAoTlNEaWN0aW9uYXJ5ICopbWVtb3J5U3RhdGlzdGlj
cwogICAgIFdURjo6RmFzdE1hbGxvY1N0YXRpc3RpY3MgZmFzdE1hbGxvY1N0YXRpc3RpY3MgPSBX
VEY6OmZhc3RNYWxsb2NTdGF0aXN0aWNzKCk7CiAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2Vy
dGlvbnNPbmx5KTsKICAgICBIZWFwOjpTdGF0aXN0aWNzIGpzSGVhcFN0YXRpc3RpY3MgPSBKU0RP
TVdpbmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAuc3RhdGlzdGljcygpOworICAgIHNp
emVfdCBqc2NTdGFja0J5dGVzID0gUmVnaXN0ZXJGaWxlOjpjb21taXR0ZWRCeXRlQ291bnQoKTsK
KyAgICBzaXplX3QganNjSklUQnl0ZXMgPSBFeGVjdXRhYmxlQWxsb2NhdG9yOjpjb21taXR0ZWRC
eXRlQ291bnQoKTsKICAgICByZXR1cm4gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVj
dHNBbmRLZXlzOgogICAgICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoSW50OmZhc3RN
YWxsb2NTdGF0aXN0aWNzLnJlc2VydmVkVk1CeXRlc10sIEAiRmFzdE1hbGxvY1Jlc2VydmVkVk1C
eXRlcyIsCiAgICAgICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6ZmFzdE1hbGxv
Y1N0YXRpc3RpY3MuY29tbWl0dGVkVk1CeXRlc10sIEAiRmFzdE1hbGxvY0NvbW1pdHRlZFZNQnl0
ZXMiLAogICAgICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoSW50OmZhc3RNYWxsb2NT
dGF0aXN0aWNzLmZyZWVMaXN0Qnl0ZXNdLCBAIkZhc3RNYWxsb2NGcmVlTGlzdEJ5dGVzIiwKICAg
ICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpqc0hlYXBTdGF0aXN0aWNzLnNp
emVdLCBAIkphdmFTY3JpcHRIZWFwU2l6ZSIsCiAgICAgICAgICAgICAgICAgW05TTnVtYmVyIG51
bWJlcldpdGhJbnQ6anNIZWFwU3RhdGlzdGljcy5mcmVlXSwgQCJKYXZhU2NyaXB0RnJlZVNpemUi
LAorICAgICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoVW5zaWduZWRJbnQ6KHVuc2ln
bmVkIGludClqc2NTdGFja0J5dGVzXSwgQCJKYXZhU2NyaXB0U3RhY2tTaXplIiwKKyAgICAgICAg
ICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aFVuc2lnbmVkSW50Oih1bnNpZ25lZCBpbnQpanNj
SklUQnl0ZXNdLCBAIkphdmFTY3JpcHRKSVRTaXplIiwKICAgICAgICAgICAgIG5pbF07CiB9CiAK
</data>
<flag name="review"
          id="56141"
          type_id="1"
          status="-"
          setter="jtherrell"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66982</attachid>
            <date>2010-09-08 18:26:45 -0700</date>
            <delta_ts>2010-09-09 09:42:55 -0700</delta_ts>
            <desc>Same patch as above with style error resolved (Revised patch w/ changes in Mutex use and function renaming)</desc>
            <filename>OpenSource45134.patch</filename>
            <type>text/plain</type>
            <size>12767</size>
            <attacher name="John Therrell">jtherrell</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY3MDQxKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTQgQEAKKzIwMTAtMDktMDcgIEpvaG4gVGhl
cnJlbGwgIDxqdGhlcnJlbGxAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIHN0YXRpc3RpY3Mgc2FtcGxpbmcgYW5kIHJlcG9y
dGluZyBmb3IgSmF2YVNjcmlwdENvcmUncyBSZWdpc3RlckZpbGUgYW5kIEV4ZWN1dGFibGVBbGxv
Y2F0b3IgY2xhc3NlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDUxMzQKKworICAgICAgICBBZGRlZCB0aHJlYWQtc2FmZSBjb21taXR0ZWQgYnl0ZSBj
b3VudGluZyBhbmQgcmVwb3J0aW5nIGZ1bmN0aW9uYWxpdHkgdG8gUmVnaXN0ZXJGaWxlIGFuZCAK
KyAgICAgICAgRXhlY3V0YWJsZUFsbG9jYXRvci4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3Jl
LmV4cDoKKyAgICAgICAgRXhwb3J0ZWQgbmV3IHN5bWJvbHMgdG8gYWxsb3cgZm9yIFdlYktpdCB0
byBnZXQgc3RhdGlzdGljcyBmcm9tIEphdmFTY3JpcHRDb3JlIGNsYXNzZXMuCisgICAgICAgIAor
ICAgICAgICAqIGludGVycHJldGVyL1JlZ2lzdGVyRmlsZS5jcHA6CisgICAgICAgIChKU0M6OnJl
Z2lzdGVyRmlsZVN0YXRpc3RpY3NNdXRleCk6CisgICAgICAgIEFkZGVkIGZ1bmN0aW9uIHdoaWNo
IHJldHVybnMgYSBzdGF0aWMgTXV0ZXggdXNlZCBmb3IgbG9ja2luZyBkdXJpbmcgcmVhZC93cml0
ZSBhY2Nlc3MgdG8KKyAgICAgICAgc3RhdGljIGNvbW1pdHRlZCBieXRlIGNvdW50IHZhcmlhYmxl
LgorICAgICAgICAoSlNDOjpSZWdpc3RlckZpbGU6On5SZWdpc3RlckZpbGUpOgorICAgICAgICBB
ZGRlZCBjYWxsIHRvIGFkZFRvU3RhdGlzdGljcyBzaW5jZSBtZW1vcnkgaXMgZGVjb21taXR0ZWQg
aGVyZS4KKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJGaWxlOjpyZWxlYXNlRXhjZXNzQ2FwYWNpdHkp
OgorICAgICAgICBBZGRlZCBjYWxsIHRvIGFkZFRvU3RhdGlzdGljcyBzaW5jZSBtZW1vcnkgaXMg
ZGVjb21taXR0ZWQgaGVyZS4KKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJGaWxlOjppbml0aWFsaXpl
VGhyZWFkaW5nKToKKyAgICAgICAgQWRkZWQgZnVuY3Rpb24gd2hpY2ggY2FsbHMgcmVnaXN0ZXJG
aWxlU3RhdGlzdGljc011dGV4KCkuCisgICAgICAgIChKU0M6OlJlZ2lzdGVyRmlsZTo6Y29tbWl0
dGVkQnl0ZUNvdW50KToKKyAgICAgICAgQWRkZWQgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyB0aGUg
Y3VycmVudCBjb21taXR0ZWQgYnl0ZSBjb3VudCBmb3IgUmVnaXN0ZXJGaWxlLgorICAgICAgICAo
SlNDOjpSZWdpc3RlckZpbGU6OmFkZFRvQ29tbWl0dGVkQnl0ZUNvdW50KToKKyAgICAgICAgQWRk
ZWQgZnVuY3Rpb24gd2hpY2ggdXBkYXRlcyBjb21taXR0ZWQgYnl0ZSBjb3VudC4KKyAgICAgICAg
CisgICAgICAgICogaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmg6CisgICAgICAgIChKU0M6OlJl
Z2lzdGVyRmlsZTo6UmVnaXN0ZXJGaWxlKToKKyAgICAgICAgQWRkZWQgY2FsbCB0byBhZGRUb1N0
YXRpc3RpY3Mgc2luY2UgbWVtb3J5IGlzIGNvbW1pdHRlZCBoZXJlLgorICAgICAgICAoSlNDOjpS
ZWdpc3RlckZpbGU6Omdyb3cpOgorICAgICAgICBBZGRlZCBjYWxsIHRvIGFkZFRvU3RhdGlzdGlj
cyBzaW5jZSBtZW1vcnkgaXMgY29tbWl0dGVkIGhlcmUuCisgICAgICAgIAorICAgICAgICAqIGpp
dC9FeGVjdXRhYmxlQWxsb2NhdG9yLmg6CisgICAgICAgIEFkZGVkIGZ1bmN0aW9uIHByb3RvdHlw
ZSBmb3IgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjb21taXR0ZWRCeXRlQ291bnQoKS4KKyAgICAg
ICAgCisgICAgICAgICogaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHA6Cisg
ICAgICAgIChKU0M6OkZpeGVkVk1Qb29sQWxsb2NhdG9yOjpyZWxlYXNlKToKKyAgICAgICAgQWRk
ZWQgY2FsbCB0byBhZGRUb1N0YXRpc3RpY3Mgc2luY2UgbWVtb3J5IGlzIGRlY29tbWl0dGVkIGhl
cmUuCisgICAgICAgIChKU0M6OkZpeGVkVk1Qb29sQWxsb2NhdG9yOjpyZXVzZSk6CisgICAgICAg
IEFkZGVkIGNhbGwgdG8gYWRkVG9TdGF0aXN0aWNzIHNpbmNlIG1lbW9yeSBpcyBjb21taXR0ZWQg
aGVyZS4KKyAgICAgICAgKEpTQzo6Rml4ZWRWTVBvb2xBbGxvY2F0b3I6OmFkZFRvQ29tbWl0dGVk
Qnl0ZUNvdW50KToKKyAgICAgICAgQWRkZWQgZnVuY3Rpb24gd2hpY2ggdXBkYXRlcyBjb21taXR0
ZWQgYnl0ZSBjb3VudC4KKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6Y29tbWl0
dGVkQnl0ZUNvdW50KToKKyAgICAgICAgQWRkZWQgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyB0aGUg
Y3VycmVudCBjb21taXR0ZWQgYnl0ZSBjb3VudCBmb3IgRXhlY3V0YWJsZUFsbG9jYXRvci4KKyAg
ICAgICAgCisgICAgICAgICogcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcDoKKyAgICAg
ICAgKEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZ09uY2UpOgorICAgICAgICBBZGRlZCBjYWxsIHRv
IFJlZ2lzdGVyRmlsZTo6aW5pdGlhbGl6ZVRocmVhZGluZy4KKwogMjAxMC0wOS0wOCAgUm9iZXJ0
IEhvZ2FuICA8cm9iZXJ0QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW50b25p
byBHb21lcy4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHJldmlzaW9uIDY1NjMy
KQorKysgSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzEsNiArMTMxLDcgQEAgX19aTjNKU0MxMkpTR2xvYmFsRGF0YTE0cmVzZXREYXRlQ2FjaGVF
dgogX19aTjNKU0MxMkpTR2xvYmFsRGF0YTE0c2hhcmVkSW5zdGFuY2VFdgogX19aTjNKU0MxMkpT
R2xvYmFsRGF0YTZjcmVhdGVFTlNfMTVUaHJlYWRTdGFja1R5cGVFCiBfX1pOM0pTQzEySlNHbG9i
YWxEYXRhRDFFdgorX19aTjNKU0MxMlJlZ2lzdGVyRmlsZTE4Y29tbWl0dGVkQnl0ZUNvdW50RXYK
IF9fWk4zSlNDMTJTYW1wbGluZ1Rvb2w1c2V0dXBFdgogX19aTjNKU0MxMlNtYWxsU3RyaW5nczE3
Y3JlYXRlRW1wdHlTdHJpbmdFUE5TXzEySlNHbG9iYWxEYXRhRQogX19aTjNKU0MxMlNtYWxsU3Ry
aW5nczI3Y3JlYXRlU2luZ2xlQ2hhcmFjdGVyU3RyaW5nRVBOU18xMkpTR2xvYmFsRGF0YUVoCkBA
IC0xOTEsNiArMTkyLDcgQEAgX19aTjNKU0MxOFByb3BlcnR5RGVzY3JpcHRvcjE3ZGVmYXVsdEF0
dAogX19aTjNKU0MxOFByb3BlcnR5RGVzY3JpcHRvcjIxc2V0QWNjZXNzb3JEZXNjcmlwdG9yRU5T
XzdKU1ZhbHVlRVMxX2oKIF9fWk4zSlNDMThQcm9wZXJ0eURlc2NyaXB0b3I5c2V0R2V0dGVyRU5T
XzdKU1ZhbHVlRQogX19aTjNKU0MxOFByb3BlcnR5RGVzY3JpcHRvcjlzZXRTZXR0ZXJFTlNfN0pT
VmFsdWVFCitfX1pOM0pTQzE5RXhlY3V0YWJsZUFsbG9jYXRvcjE4Y29tbWl0dGVkQnl0ZUNvdW50
RXYKIF9fWk4zSlNDMTlpbml0aWFsaXplVGhyZWFkaW5nRXYKIF9fWk4zSlNDMjBNYXJrZWRBcmd1
bWVudEJ1ZmZlcjEwc2xvd0FwcGVuZEVOU183SlNWYWx1ZUUKIF9fWk4zSlNDMjBjcmVhdGVSZWZl
cmVuY2VFcnJvckVQTlNfOUV4ZWNTdGF0ZUVSS05TXzdVU3RyaW5nRQpJbmRleDogSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3RlckZpbGUuY3BwCShyZXZpc2lvbiA2NTYzMikKKysr
IEphdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyRmlsZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMzLDE2ICszMywyNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorc3RhdGljIHNpemVf
dCBjb21taXR0ZWRCeXRlc0NvdW50ID0gMDsKKworc3RhdGljIE11dGV4JiByZWdpc3RlckZpbGVT
dGF0aXN0aWNzTXV0ZXgoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoTXV0ZXgsIHN0YXRp
Y011dGV4LCAoKSk7CisgICAgcmV0dXJuIHN0YXRpY011dGV4OworfSAgICAKKyAgICAKIFJlZ2lz
dGVyRmlsZTo6flJlZ2lzdGVyRmlsZSgpCiB7CiAgICAgdm9pZCogYmFzZSA9IG1fcmVzZXJ2YXRp
b24uYmFzZSgpOwogICAgIG1fcmVzZXJ2YXRpb24uZGVjb21taXQoYmFzZSwgcmVpbnRlcnByZXRf
Y2FzdDxpbnRwdHJfdD4obV9jb21taXRFbmQpIC0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4o
YmFzZSkpOworICAgIGFkZFRvQ29tbWl0dGVkQnl0ZUNvdW50KC0ocmVpbnRlcnByZXRfY2FzdDxp
bnRwdHJfdD4obV9jb21taXRFbmQpIC0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oYmFzZSkp
KTsKICAgICBtX3Jlc2VydmF0aW9uLmRlYWxsb2NhdGUoKTsKIH0KIAogdm9pZCBSZWdpc3RlckZp
bGU6OnJlbGVhc2VFeGNlc3NDYXBhY2l0eSgpCiB7CiAgICAgbV9yZXNlcnZhdGlvbi5kZWNvbW1p
dChtX3N0YXJ0LCByZWludGVycHJldF9jYXN0PGludHB0cl90PihtX2NvbW1pdEVuZCkgLSByZWlu
dGVycHJldF9jYXN0PGludHB0cl90PihtX3N0YXJ0KSk7CisgICAgYWRkVG9Db21taXR0ZWRCeXRl
Q291bnQoLShyZWludGVycHJldF9jYXN0PGludHB0cl90PihtX2NvbW1pdEVuZCkgLSByZWludGVy
cHJldF9jYXN0PGludHB0cl90PihtX3N0YXJ0KSkpOwogICAgIG1fY29tbWl0RW5kID0gbV9zdGFy
dDsKICAgICBtX21heFVzZWQgPSBtX3N0YXJ0OwogfQpAQCAtNjIsNCArNzIsMjEgQEAgSlNHbG9i
YWxPYmplY3QqIFJlZ2lzdGVyRmlsZTo6Z2xvYmFsT2JqZQogICAgIHJldHVybiBtX2dsb2JhbE9i
amVjdC5nZXQoKTsKIH0KIAordm9pZCBSZWdpc3RlckZpbGU6OmluaXRpYWxpemVUaHJlYWRpbmco
KQoreworICAgIHJlZ2lzdGVyRmlsZVN0YXRpc3RpY3NNdXRleCgpOworfQorCitzaXplX3QgUmVn
aXN0ZXJGaWxlOjpjb21taXR0ZWRCeXRlQ291bnQoKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tl
cihyZWdpc3RlckZpbGVTdGF0aXN0aWNzTXV0ZXgoKSk7CisgICAgcmV0dXJuIGNvbW1pdHRlZEJ5
dGVzQ291bnQ7Cit9CisKK3ZvaWQgUmVnaXN0ZXJGaWxlOjphZGRUb0NvbW1pdHRlZEJ5dGVDb3Vu
dChzaXplX3QgYnl0ZUNvdW50KQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihyZWdpc3RlckZp
bGVTdGF0aXN0aWNzTXV0ZXgoKSk7CisgICAgY29tbWl0dGVkQnl0ZXNDb3VudCArPSBieXRlQ291
bnQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvUmVnaXN0ZXJGaWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvUmVnaXN0ZXJGaWxlLmgJKHJldmlzaW9uIDY1NjMyKQorKysgSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNCwxMCArMTM0
LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIG1hcmtHbG9iYWxzKE1hcmtTdGFj
ayYgbWFya1N0YWNrLCBIZWFwKiBoZWFwKSB7IGhlYXAtPm1hcmtDb25zZXJ2YXRpdmVseShtYXJr
U3RhY2ssIGxhc3RHbG9iYWwoKSwgbV9zdGFydCk7IH0KICAgICAgICAgdm9pZCBtYXJrQ2FsbEZy
YW1lcyhNYXJrU3RhY2smIG1hcmtTdGFjaywgSGVhcCogaGVhcCkgeyBoZWFwLT5tYXJrQ29uc2Vy
dmF0aXZlbHkobWFya1N0YWNrLCBtX3N0YXJ0LCBtX2VuZCk7IH0KIAorICAgICAgICBzdGF0aWMg
c2l6ZV90IGNvbW1pdHRlZEJ5dGVDb3VudCgpOworICAgICAgICBzdGF0aWMgdm9pZCBpbml0aWFs
aXplVGhyZWFkaW5nKCk7CisKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIGNoZWNrQWxsb2Nh
dGVkT2theShib29sIG9rYXkpOwotCiAgICAgICAgIHZvaWQgcmVsZWFzZUV4Y2Vzc0NhcGFjaXR5
KCk7CisgICAgICAgIHZvaWQgYWRkVG9Db21taXR0ZWRCeXRlQ291bnQoc2l6ZV90IGJ5dGVDb3Vu
dCk7CiAgICAgICAgIHNpemVfdCBtX251bUdsb2JhbHM7CiAgICAgICAgIGNvbnN0IHNpemVfdCBt
X21heEdsb2JhbHM7CiAgICAgICAgIFJlZ2lzdGVyKiBtX3N0YXJ0OwpAQCAtMTY2LDYgKzE2OSw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBjaGVja0FsbG9jYXRlZE9rYXkoYmFzZSk7CiAg
ICAgICAgIHNpemVfdCBjb21taXR0ZWRTaXplID0gcm91bmRVcEFsbG9jYXRpb25TaXplKG1heEds
b2JhbHMgKiBzaXplb2YoUmVnaXN0ZXIpLCBjb21taXRTaXplKTsKICAgICAgICAgY2hlY2tBbGxv
Y2F0ZWRPa2F5KG1fcmVzZXJ2YXRpb24uY29tbWl0KGJhc2UsIGNvbW1pdHRlZFNpemUpKTsKKyAg
ICAgICAgYWRkVG9Db21taXR0ZWRCeXRlQ291bnQoY29tbWl0dGVkU2l6ZSk7CiAgICAgICAgIG1f
Y29tbWl0RW5kID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8UmVnaXN0ZXIqPihyZWludGVycHJldF9j
YXN0PGNoYXIqPihiYXNlKSArIGNvbW1pdHRlZFNpemUpOwogICAgICAgICBtX3N0YXJ0ID0gc3Rh
dGljX2Nhc3Q8UmVnaXN0ZXIqPihiYXNlKSArIG1heEdsb2JhbHM7CiAgICAgICAgIG1fZW5kID0g
bV9zdGFydDsKQEAgLTE5Myw2ICsxOTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgaWYg
KG5ld0VuZCA+IG1fY29tbWl0RW5kKSB7CiAgICAgICAgICAgICBzaXplX3Qgc2l6ZSA9IHJvdW5k
VXBBbGxvY2F0aW9uU2l6ZShyZWludGVycHJldF9jYXN0PGNoYXIqPihuZXdFbmQpIC0gcmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4obV9jb21taXRFbmQpLCBjb21taXRTaXplKTsKICAgICAgICAgICAg
IGNoZWNrQWxsb2NhdGVkT2theShtX3Jlc2VydmF0aW9uLmNvbW1pdChtX2NvbW1pdEVuZCwgc2l6
ZSkpOworICAgICAgICAgICAgYWRkVG9Db21taXR0ZWRCeXRlQ291bnQoc2l6ZSk7CiAgICAgICAg
ICAgICBtX2NvbW1pdEVuZCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPFJlZ2lzdGVyKj4ocmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4obV9jb21taXRFbmQpICsgc2l6ZSk7CiAgICAgICAgIH0KIApJbmRl
eDogSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCShyZXZpc2lvbiA2NTYz
MikKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI5Nyw2ICsyOTcsNyBAQCBwdWJsaWM6CiAjZWxzZQogICAgICNlcnJvciAiVGhl
IGNhY2hlRmx1c2ggc3VwcG9ydCBpcyBtaXNzaW5nIG9uIHRoaXMgcGxhdGZvcm0uIgogI2VuZGlm
CisgICAgc3RhdGljIHNpemVfdCBjb21taXR0ZWRCeXRlQ291bnQoKTsKIAogcHJpdmF0ZToKIApJ
bmRleDogSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JG
aXhlZFZNUG9vbC5jcHAJKHJldmlzaW9uIDY1NjMyKQorKysgSmF2YVNjcmlwdENvcmUvaml0L0V4
ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDYg
KzU0LDkgQEAKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKIG5hbWVzcGFjZSBKU0MgeworICAgIAor
c3RhdGljIHNpemVfdCBjb21taXR0ZWRCeXRlc0NvdW50ID0gMDsgIAorc3RhdGljIFNwaW5Mb2Nr
IHNwaW5sb2NrID0gU1BJTkxPQ0tfSU5JVElBTElaRVI7CiAKIC8vIEZyZWVMaXN0RW50cnkgZGVz
Y3JpYmVzIGEgZnJlZSBjaHVuayBvZiBtZW1vcnksIHN0b3JlZCBpbiB0aGUgZnJlZUxpc3QuCiBz
dHJ1Y3QgRnJlZUxpc3RFbnRyeSB7CkBAIC0xMjgsMTIgKzEzMSwxNCBAQCBjbGFzcyBGaXhlZFZN
UG9vbEFsbG9jYXRvcgogICAgIHZvaWQgcmVsZWFzZSh2b2lkKiBwb3NpdGlvbiwgc2l6ZV90IHNp
emUpCiAgICAgewogICAgICAgICBtX2FsbG9jYXRpb24uZGVjb21taXQocG9zaXRpb24sIHNpemUp
OworICAgICAgICBhZGRUb0NvbW1pdHRlZEJ5dGVDb3VudCgtc2l6ZSk7CiAgICAgfQogCiAgICAg
dm9pZCByZXVzZSh2b2lkKiBwb3NpdGlvbiwgc2l6ZV90IHNpemUpCiAgICAgewogICAgICAgICBi
b29sIG9rYXkgPSBtX2FsbG9jYXRpb24uY29tbWl0KHBvc2l0aW9uLCBzaXplKTsKICAgICAgICAg
QVNTRVJUX1VOVVNFRChva2F5LCBva2F5KTsKKyAgICAgICAgYWRkVG9Db21taXR0ZWRCeXRlQ291
bnQoc2l6ZSk7CiAgICAgfQogCiAgICAgLy8gQWxsIGFkZGl0aW9uIHRvIHRoZSBmcmVlIGxpc3Qg
c2hvdWxkIGdvIHRocm91Z2ggdGhpcyBtZXRob2QsIHJhdGhlciB0aGFuCkBAIC00MTQsNiArNDE5
LDEyIEBAIHByaXZhdGU6CiAgICAgfQogI2VuZGlmCiAKKyAgICB2b2lkIGFkZFRvQ29tbWl0dGVk
Qnl0ZUNvdW50KHNpemVfdCBieXRlQ291bnQpCisgICAgeworICAgICAgICBBU1NFUlQoc3Bpbmxv
Y2suSXNIZWxkKCkpOworICAgICAgICBjb21taXR0ZWRCeXRlc0NvdW50ICs9IGJ5dGVDb3VudDsK
KyAgICB9CisKICAgICAvLyBGcmVlZCBzcGFjZSBmcm9tIHRoZSBtb3N0IGNvbW1vbiBzaXplZCBh
bGxvY2F0aW9ucyB3aWxsIGJlIGhlbGQgaW4gdGhpcyBsaXN0LCAuLi4KICAgICBjb25zdCBzaXpl
X3QgbV9jb21tb25TaXplOwogICAgIFZlY3Rvcjx2b2lkKj4gbV9jb21tb25TaXplZEFsbG9jYXRp
b25zOwpAQCAtNDI3LDE0ICs0MzgsMTkgQEAgcHJpdmF0ZToKICAgICBQYWdlUmVzZXJ2YXRpb24g
bV9hbGxvY2F0aW9uOwogfTsKIAorc2l6ZV90IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmNvbW1pdHRl
ZEJ5dGVDb3VudCgpCit7CisgICAgU3BpbkxvY2tIb2xkZXIgbG9ja0hvbGRlcigmc3BpbmxvY2sp
OworICAgIHJldHVybiBjb21taXR0ZWRCeXRlc0NvdW50OworfSAgIAorCiB2b2lkIEV4ZWN1dGFi
bGVBbGxvY2F0b3I6OmludGlhbGl6ZVBhZ2VTaXplKCkKIHsKICAgICBFeGVjdXRhYmxlQWxsb2Nh
dG9yOjpwYWdlU2l6ZSA9IGdldHBhZ2VzaXplKCk7CiB9CiAKLXN0YXRpYyBGaXhlZFZNUG9vbEFs
bG9jYXRvciogYWxsb2NhdG9yID0gMDsKLXN0YXRpYyBTcGluTG9jayBzcGlubG9jayA9IFNQSU5M
T0NLX0lOSVRJQUxJWkVSOwotCitzdGF0aWMgRml4ZWRWTVBvb2xBbGxvY2F0b3IqIGFsbG9jYXRv
ciA9IDA7IAorICAgIAogYm9vbCBFeGVjdXRhYmxlQWxsb2NhdG9yOjppc1ZhbGlkKCkgY29uc3QK
IHsKICAgICBTcGluTG9ja0hvbGRlciBsb2NrX2hvbGRlcigmc3BpbmxvY2spOwpJbmRleDogSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwCShyZXZpc2lv
biA2NTYzMikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDYgKzU4LDcgQEAgc3RhdGljIHZvaWQgaW5pdGlhbGl6
ZVRocmVhZGluZ09uY2UoKQogI2lmIEVOQUJMRShKU0NfTVVMVElQTEVfVEhSRUFEUykKICAgICBz
X2R0b2FQNU11dGV4ID0gbmV3IE11dGV4OwogICAgIGluaXRpYWxpemVEYXRlcygpOworICAgIFJl
Z2lzdGVyRmlsZTo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwogI2VuZGlmCiB9CiAKSW5kZXg6IFdl
YktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiA2NzA0MSkKKysrIFdlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTggQEAKKzIwMTAtMDktMDggIEpvaG4gVGhlcnJlbGwgIDxqdGhlcnJlbGxAYXBw
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZGVkIHN0YXRpc3RpY3Mgc2FtcGxpbmcgYW5kIHJlcG9ydGluZyBmb3IgSmF2YVNjcmlwdENv
cmUncyBSZWdpc3RlckZpbGUgYW5kIEV4ZWN1dGFibGVBbGxvY2F0b3IgY2xhc3NlcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDUxMzQKKworICAgICAg
ICBBZGRlZCBhYmlsaXR5IHRvIGVuYWJsZSBuZXcgSmF2YVNjcmlwdENvcmUgc3RhdGlzdGljcyBz
YW1wbGluZyBhbmQgcmVwb3J0aW5nIGZvciBSZWdpc3RlckZpbGUgCisgICAgICAgIGFuZCBFeGVj
dXRhYmxlQWxsb2NhdG9yIGNsYXNzZXMuIEFkZGVkIHJlcG9ydGluZyBvZiBKYXZhU2NyaXB0Q29y
ZSdzIHN0YWNrIGNvbW1pdHRlZCBtZW1vcnkgCisgICAgICAgIGFuZCBKSVQgY29kZSBjb21taXR0
ZWQgbWVtb3J5IHN0YXRpc3RpY3MgdG8gV2ViQ29yZVN0YXRpc3RpY3MgbWVtb3J5U3RhdGlzdGlj
cy4KKworICAgICAgICAqIE1pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW06CisgICAgICAgICgrW1dl
YkNvcmVTdGF0aXN0aWNzIG1lbW9yeVN0YXRpc3RpY3NdKToKKyAgICAgICAgQWRkZWQgc3RhdGlz
dGljcyByZXBvcnRpbmcgZm9yIEpTQyBSZWdpc3RlckZpbGUgYW5kIEV4ZWN1dGFibGVBbGxvY2F0
b3IuCisKIDIwMTAtMDktMDggIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBSdWJiZXItc3RhbXBlZCBieSBFcmljIFNlaWRlbC4KSW5kZXg6IFdlYktpdC9tYWMvTWlz
Yy9XZWJDb3JlU3RhdGlzdGljcy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL01pc2MvV2Vi
Q29yZVN0YXRpc3RpY3MubW0JKHJldmlzaW9uIDY1NjMyKQorKysgV2ViS2l0L21hYy9NaXNjL1dl
YkNvcmVTdGF0aXN0aWNzLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw4IEBACiAjaW1w
b3J0ICJXZWJDb3JlU3RhdGlzdGljcy5oIgogCiAjaW1wb3J0ICJET01FbGVtZW50SW50ZXJuYWwu
aCIKKyNpbXBvcnQgPEphdmFTY3JpcHRDb3JlL1JlZ2lzdGVyRmlsZS5oPgorI2ltcG9ydCA8SmF2
YVNjcmlwdENvcmUvRXhlY3V0YWJsZUFsbG9jYXRvci5oPgogI2ltcG9ydCAiV2ViQ2FjaGUuaCIK
ICNpbXBvcnQgIldlYkZyYW1lSW50ZXJuYWwuaCIKICNpbXBvcnQgPHJ1bnRpbWUvSlNMb2NrLmg+
CkBAIC0xOTYsMTIgKzE5OCwxNiBAQCArIChOU0RpY3Rpb25hcnkgKiltZW1vcnlTdGF0aXN0aWNz
CiAgICAgV1RGOjpGYXN0TWFsbG9jU3RhdGlzdGljcyBmYXN0TWFsbG9jU3RhdGlzdGljcyA9IFdU
Rjo6ZmFzdE1hbGxvY1N0YXRpc3RpY3MoKTsKICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOwogICAgIEhlYXA6OlN0YXRpc3RpY3MganNIZWFwU3RhdGlzdGljcyA9IEpTRE9N
V2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5zdGF0aXN0aWNzKCk7CisgICAgc2l6
ZV90IGpzY1N0YWNrQnl0ZXMgPSBSZWdpc3RlckZpbGU6OmNvbW1pdHRlZEJ5dGVDb3VudCgpOwor
ICAgIHNpemVfdCBqc2NKSVRCeXRlcyA9IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmNvbW1pdHRlZEJ5
dGVDb3VudCgpOwogICAgIHJldHVybiBbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0
c0FuZEtleXM6CiAgICAgICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6ZmFzdE1h
bGxvY1N0YXRpc3RpY3MucmVzZXJ2ZWRWTUJ5dGVzXSwgQCJGYXN0TWFsbG9jUmVzZXJ2ZWRWTUJ5
dGVzIiwKICAgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpmYXN0TWFsbG9j
U3RhdGlzdGljcy5jb21taXR0ZWRWTUJ5dGVzXSwgQCJGYXN0TWFsbG9jQ29tbWl0dGVkVk1CeXRl
cyIsCiAgICAgICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6ZmFzdE1hbGxvY1N0
YXRpc3RpY3MuZnJlZUxpc3RCeXRlc10sIEAiRmFzdE1hbGxvY0ZyZWVMaXN0Qnl0ZXMiLAogICAg
ICAgICAgICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoSW50OmpzSGVhcFN0YXRpc3RpY3Muc2l6
ZV0sIEAiSmF2YVNjcmlwdEhlYXBTaXplIiwKICAgICAgICAgICAgICAgICBbTlNOdW1iZXIgbnVt
YmVyV2l0aEludDpqc0hlYXBTdGF0aXN0aWNzLmZyZWVdLCBAIkphdmFTY3JpcHRGcmVlU2l6ZSIs
CisgICAgICAgICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhVbnNpZ25lZEludDoodW5zaWdu
ZWQgaW50KWpzY1N0YWNrQnl0ZXNdLCBAIkphdmFTY3JpcHRTdGFja1NpemUiLAorICAgICAgICAg
ICAgICAgIFtOU051bWJlciBudW1iZXJXaXRoVW5zaWduZWRJbnQ6KHVuc2lnbmVkIGludClqc2NK
SVRCeXRlc10sIEAiSmF2YVNjcmlwdEpJVFNpemUiLAogICAgICAgICAgICAgbmlsXTsKIH0KIAo=
</data>
<flag name="review"
          id="56145"
          type_id="1"
          status="+"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>