<?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>194811</bug_id>
          
          <creation_ts>2019-02-19 01:29:01 -0800</creation_ts>
          <short_desc>[bmalloc] bmalloc::Cache should not be instantiated if we are using system malloc</short_desc>
          <delta_ts>2019-03-20 12:42:31 -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>bmalloc</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>194856</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>bugswebkits01</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1507625</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-02-19 01:29:01 -0800</bug_when>
    <thetext>bmalloc::Cache etc. is anyway initialized, and it takes too much memory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1507683</commentid>
    <comment_count>1</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-02-19 09:02:10 -0800</bug_when>
    <thetext>A few thoughts:

(1) I don&apos;t understand why DebugHeap has m_sizeMap. We should probably remove that.

(2) I guess you could have the static Cache allocation / deallocation functions allocate / deallocate through the debug heap directly, without ever creating a per-thread cache. That&apos;s acceptable for performance because, when bmalloc is enabled, each thread will do it only once. But I&apos;m not sure how you would synchronize on creating the DebugHeap. It&apos;s probably too slow just to take a global lock on every allocation / deallocation when using system malloc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1507739</commentid>
    <comment_count>2</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-02-19 11:36:56 -0800</bug_when>
    <thetext>(In reply to Geoffrey Garen from comment #1)
&gt; A few thoughts:
&gt; 
&gt; (1) I don&apos;t understand why DebugHeap has m_sizeMap. We should probably
&gt; remove that.

It seems that DebugHeap is using this map to record the requested size for memalignLarge, and we need to use this size when deallocating this region with munmap.

&gt; 
&gt; (2) I guess you could have the static Cache allocation / deallocation
&gt; functions allocate / deallocate through the debug heap directly, without
&gt; ever creating a per-thread cache. That&apos;s acceptable for performance because,
&gt; when bmalloc is enabled, each thread will do it only once. But I&apos;m not sure
&gt; how you would synchronize on creating the DebugHeap. It&apos;s probably too slow
&gt; just to take a global lock on every allocation / deallocation when using
&gt; system malloc.

DebugHeap is PerProcess&lt;&gt;. So creation itself is OK. If the cache you said means DebugHeap* in Cache (::m_debugHeap), right, I want to keep this too.
I&apos;m OK having per-thread Cache, if sizeof(bmalloc::Cache) is &lt;= page size (mmap memory region), or even smaller (and allocated from system malloc in system malloc configuration).
I want to reduce the size of bmalloc::Cache etc. sizeof(bmalloc::Cache) is 14000 (13KB), and we have this per HeapKind =&gt; PerHeapKind&lt;bmalloc::Cache&gt; is 42000 (41KB). Some of this part is touched unfortunately, and vmmap says &quot;WebKit Malloc&quot; has 72KB dirty memory even while we are using system malloc configuration &quot;Malloc=1&quot;.
We can see large mmap is executed in bmalloc by using dtruss (`sudo dtruss -t mmap -p $PID`). The following is that simple hello_world.js case.

mmap(0x0, 0x17, 0x1, 0x2, 0x3, 0x0)              = 0x110DA8000 0
mmap(0x0, 0xB000, 0x3, 0x1002, 0x35000000, 0x0)          = 0x110DA9000 0
mmap(0x0, 0x1000, 0x3, 0x1002, 0x35000000, 0x0)          = 0x110DB4000 0
mmap(0x0, 0x3000, 0x3, 0x1002, 0x35000000, 0x0)          = 0x110DB5000 0
mmap(0x0, 0x1000, 0x3, 0x1002, 0x35000000, 0x0)          = 0x110DB8000 0
mmap(0x0, 0x1000, 0x3, 0x1002, 0x35000000, 0x0)          = 0x110DE5000 0
mmap(0x0, 0x1000, 0x3, 0x1002, 0x35000000, 0x0)          = 0x110DE6000 0
mmap(0x3220BE000000, 0x40002000, 0x7, 0x1802, 0x40000000, 0x0)           = 0x3220BE000000 0 (This is protection change of the JIT region. Does not affect on dirty memory)
mmap(0x3220BE000000, 0x1000, 0x0, 0x1012, 0x40000000, 0x0)               = 0x3220BE000000 0 (...)
mmap(0x3220FE001000, 0x1000, 0x0, 0x1012, 0x40000000, 0x0)               = 0x3220FE001000 0 (...)
mmap(0x0, 0x1000, 0x1, 0x1, 0x4, 0x0)            = 0x110DE7000 0
mmap(0x0, 0xB000, 0x3, 0x1002, 0x35000000, 0x0)          = 0x110DE8000 0

If we use string_lists.js, our &quot;WebKit Malloc&quot; region is even extended, &quot;380K&quot;. This is because Heap Helper Threads starts waking up and touch Cache, then Cache is created per thread. Now, I&apos;m considering that our large thread memory footprint in JSC is mainly occupied by &quot;system malloc&quot;, &quot;stack&quot; and this &quot;WebKit Malloc&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1507811</commentid>
    <comment_count>3</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-02-19 14:05:16 -0800</bug_when>
    <thetext>I&apos;ve experimentally reduced the bmalloc::Cache size by modifying Sizes.h to verify bmalloc data structures introduce dirty memory region. vmmap tells that the size shrinks from 72KB to 24KB (&quot;WebKit Malloc&quot;, we can reduce further).
And we get footprint reduction.

BEFORE:
Code finished, language environment destroyed..
    Current Footprint: 2363392
    Peak Footprint: 2363392
Press enter to continue.

AFTER:
Code finished, language environment destroyed..
    Current Footprint: 2273280
    Peak Footprint: 2273280
Press enter to continue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1507855</commentid>
    <comment_count>4</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-02-19 15:00:59 -0800</bug_when>
    <thetext>&gt; &gt; (1) I don&apos;t understand why DebugHeap has m_sizeMap. We should probably
&gt; &gt; remove that.
&gt; 
&gt; It seems that DebugHeap is using this map to record the requested size for
&gt; memalignLarge, and we need to use this size when deallocating this region
&gt; with munmap.

Can we remove the code in DebugHeap::memalignLarge and DebugHeap::freeLarge, and call through to posix_memalign() and free() instead?

&gt; DebugHeap is PerProcess&lt;&gt;. So creation itself is OK. If the cache you said
&gt; means DebugHeap* in Cache (::m_debugHeap), right, I want to keep this too.

If DebugHeap is PerProcss, maybe the Cache slow path can test for it directly before allocating the Cache.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1507857</commentid>
    <comment_count>5</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-02-19 15:02:23 -0800</bug_when>
    <thetext>&gt; I&apos;ve experimentally reduced the bmalloc::Cache size by modifying Sizes.h to
&gt; verify bmalloc data structures introduce dirty memory region.

It&apos;s very likely that reducing those values will cause a regression in PerformanceTests/MallocBench, especially on machines with many CPUs.

Probably better to avoid creating the Cache when we don&apos;t use it, but keep the Cache big when we need it -- if possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1507870</commentid>
    <comment_count>6</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-02-19 15:18:16 -0800</bug_when>
    <thetext>(In reply to Geoffrey Garen from comment #5)
&gt; &gt; I&apos;ve experimentally reduced the bmalloc::Cache size by modifying Sizes.h to
&gt; &gt; verify bmalloc data structures introduce dirty memory region.
&gt; 
&gt; It&apos;s very likely that reducing those values will cause a regression in
&gt; PerformanceTests/MallocBench, especially on machines with many CPUs.

Agreed. The simple experiment shows that Cache&apos;s (and possibly Heap&apos;s) size is actually the problem.
We should have some way to avoid creation of them in debug heap mode.

&gt; 
&gt; Probably better to avoid creating the Cache when we don&apos;t use it, but keep
&gt; the Cache big when we need it -- if possible.

Yes. We should move debugHeap-&gt;malloc/free things into slow path of Cache.
And instead of initializing Cache by using getSlow(), use debugHeap at the slow path.
Then, Cache is kept large, and bmalloc still goes the fast path since Cache::getFast() succeeds.
And DebugHeap case goes to the static slow path functions in Cache, and allocate memory there from DebugHeap.
I think DebugHeap case does not introduce any performance regression too, because DebugHeap case anyway goes to the slow case of the allocation right now (bump allocators always say fast path is not usable).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1507874</commentid>
    <comment_count>7</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-02-19 15:19:58 -0800</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #6)
&gt; Yes. We should move debugHeap-&gt;malloc/free things into slow path of Cache.
&gt; And instead of initializing Cache by using getSlow(), use debugHeap at the
&gt; slow path.
&gt; Then, Cache is kept large, and bmalloc still goes the fast path since
&gt; Cache::getFast() succeeds.
&gt; And DebugHeap case goes to the static slow path functions in Cache, and
&gt; allocate memory there from DebugHeap.
&gt; I think DebugHeap case does not introduce any performance regression too,
&gt; because DebugHeap case anyway goes to the slow case of the allocation right
&gt; now (bump allocators always say fast path is not usable).

I mean, in debug heap mode, instead of creating Caches, just using debugHeap in Caches instantiation path. And keep Cache::getFast() returning nullptr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1507881</commentid>
    <comment_count>8</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-02-19 15:30:01 -0800</bug_when>
    <thetext>https://bugs.webkit.org/show_bug.cgi?id=194836 spawned. In this issue, I first do it for bmalloc::Cache.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1507890</commentid>
    <comment_count>9</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-02-19 15:51:10 -0800</bug_when>
    <thetext>(In reply to Geoffrey Garen from comment #4)
&gt; Can we remove the code in DebugHeap::memalignLarge and DebugHeap::freeLarge,
&gt; and call through to posix_memalign() and free() instead?

It seems like that some code in JSC assumes that allocated memory from that is VM region. I need to investigate more why they assume so, and attempt to remove this from DebugHeap in a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1507892</commentid>
    <comment_count>10</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-02-19 15:52:21 -0800</bug_when>
    <thetext>Spawned https://bugs.webkit.org/show_bug.cgi?id=194838</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1507893</commentid>
    <comment_count>11</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-02-19 15:54:13 -0800</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #9)
&gt; (In reply to Geoffrey Garen from comment #4)
&gt; &gt; Can we remove the code in DebugHeap::memalignLarge and DebugHeap::freeLarge,
&gt; &gt; and call through to posix_memalign() and free() instead?
&gt; 
&gt; It seems like that some code in JSC assumes that allocated memory from that
&gt; is VM region. I need to investigate more why they assume so, and attempt to
&gt; remove this from DebugHeap in a separate patch.

If there&apos;s code that really needs a VM allocation, I&apos;d suggest using the PageReservation class, or similar, directly, rather than calling malloc/free.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1507894</commentid>
    <comment_count>12</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-02-19 15:56:54 -0800</bug_when>
    <thetext>&gt; I mean, in debug heap mode, instead of creating Caches, just using debugHeap in Caches instantiation path. And keep Cache::getFast() returning nullptr.

Sounds good.

In theory, all we need is a global TriState: { Uninitialized, Enabled, Disabled }. Any thread that sees Uninitialized runs the function to decide if bmalloc is enabled and then sets Enabled or Disabled. Any thread that sees Enabled uses bmalloc. And any thread that sees Disabled uses the DebugHeap. Such a global wouldn&apos;t really need any synchronization or locking, since it&apos;s a single word, and no two threads will ever set it to differing values.

I&apos;m not sure if that&apos;s exactly the best implementation, but it&apos;s the essence of the idea.

Imagine one global and two functions:

bool computeBmallocEnabled();

DebugHeap* debugHeap();

And this TriState:

{ Uninitialized, Enabled, Disabled } s_isBmallocEnabled;

Here&apos;s the implementation of debugHeap():

if (s_isBmallocEnabled == Enabled)
    return nullptr;

if (s_isBmallocEnabled == Uninitialized) {
    s_isBmallocEnabled = computeBmallocEnabled();
    if (s_isBmallocEnabled == Enabled)
        return nullptr;
}

return PerProcess&lt;DebugHeap&gt;::get();

Here&apos;s the implementation of every Cache slow path:

if (DebugHeap* debugHeap = debugHeap())
    return debugHeap-&gt;allocationFunction(...);

return PerThread&lt;PerHeapKind&lt;Cache&gt;&gt;::getSlowCase()-&gt;allocationFunction(...);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1507895</commentid>
    <comment_count>13</comment_count>
      <attachid>362446</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-02-19 16:00:21 -0800</bug_when>
    <thetext>Created attachment 362446
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1507896</commentid>
    <comment_count>14</comment_count>
      <attachid>362447</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-02-19 16:01:52 -0800</bug_when>
    <thetext>Created attachment 362447
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1507899</commentid>
    <comment_count>15</comment_count>
      <attachid>362447</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-02-19 16:13:17 -0800</bug_when>
    <thetext>Comment on attachment 362447
Patch

Still crashing. Checking...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1507900</commentid>
    <comment_count>16</comment_count>
      <attachid>362447</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-02-19 16:13:52 -0800</bug_when>
    <thetext>Comment on attachment 362447
Patch

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

&gt; Source/bmalloc/bmalloc/Cache.cpp:51
&gt; +    if (debugHeap)

UNLIKELY(debugHeap) ?

&gt; Source/bmalloc/bmalloc/Cache.cpp:53
&gt; +    if (PerProcess&lt;Environment&gt;::get()-&gt;isDebugHeapEnabled()) {

UNLIKELY too?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1507908</commentid>
    <comment_count>17</comment_count>
      <attachid>362451</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-02-19 16:26:18 -0800</bug_when>
    <thetext>Created attachment 362451
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1507910</commentid>
    <comment_count>18</comment_count>
      <attachid>362451</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-02-19 16:30:39 -0800</bug_when>
    <thetext>Comment on attachment 362451
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1507920</commentid>
    <comment_count>19</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-02-19 16:59:02 -0800</bug_when>
    <thetext>(In reply to Geoffrey Garen from comment #12)
&gt; &gt; I mean, in debug heap mode, instead of creating Caches, just using debugHeap in Caches instantiation path. And keep Cache::getFast() returning nullptr.
&gt; 
&gt; Sounds good.
&gt; 
&gt; In theory, all we need is a global TriState: { Uninitialized, Enabled,
&gt; Disabled }. Any thread that sees Uninitialized runs the function to decide
&gt; if bmalloc is enabled and then sets Enabled or Disabled. Any thread that
&gt; sees Enabled uses bmalloc. And any thread that sees Disabled uses the
&gt; DebugHeap. Such a global wouldn&apos;t really need any synchronization or
&gt; locking, since it&apos;s a single word, and no two threads will ever set it to
&gt; differing values.

Thanks. Yes! I used DebugHeap* and Cache status for this flag.
In my patch, I put `static DebugHeap* debugHeap` in Cache.cpp.
TriState is represented as follows.

1. Uninitialized Cache::getFast() =&gt; nullptr, and DebugHeap* =&gt; nullptr
2. Enabled =&gt; Cache::getFast() =&gt; pointer, and DebugHeap* =&gt; nullptr
3. Disabled =&gt; Cache::getFast() =&gt; nullptr, and DebugHeap* =&gt; actual DebugHeap

Important thing is Cache::getFast() is TLS status (per-thread), and DebugHeap* is global variable so it&apos;s per-process status.
And setting `debugHeap = PerProcess&lt;DebugHeap&gt;::get()` does not have synchronization. (While DebugHeap creation needs and has synchronization in PerProcess&lt;&gt;).
The synchronization for setting `debugHeap` is unnecessary since, as you said, no two threads will ever set it to differing values.

&gt; 
&gt; I&apos;m not sure if that&apos;s exactly the best implementation, but it&apos;s the essence
&gt; of the idea.
&gt; 
&gt; Imagine one global and two functions:
&gt; 
&gt; bool computeBmallocEnabled();

Yeah, we have `PerProcess&lt;Environment&gt;::get()-&gt;isDebugHeapEnabled()`. It caches the result of `computeIsDebugHeapEnabled()`.

&gt; 
&gt; DebugHeap* debugHeap();
&gt; 
&gt; And this TriState:
&gt; 
&gt; { Uninitialized, Enabled, Disabled } s_isBmallocEnabled;
&gt; 
&gt; Here&apos;s the implementation of debugHeap():
&gt; 
&gt; if (s_isBmallocEnabled == Enabled)
&gt;     return nullptr;
&gt; 
&gt; if (s_isBmallocEnabled == Uninitialized) {
&gt;     s_isBmallocEnabled = computeBmallocEnabled();
&gt;     if (s_isBmallocEnabled == Enabled)
&gt;         return nullptr;
&gt; }
&gt; 
&gt; return PerProcess&lt;DebugHeap&gt;::get();
&gt; 
&gt; Here&apos;s the implementation of every Cache slow path:
&gt; 
&gt; if (DebugHeap* debugHeap = debugHeap())
&gt;     return debugHeap-&gt;allocationFunction(...);
&gt; 
&gt; return PerThread&lt;PerHeapKind&lt;Cache&gt;&gt;::getSlowCase()-&gt;allocationFunction(...);

Yeah, my uploaded patch takes similar approach :)


So, my patch is like,


void* allocate(...)
{
    if (Cache* cache = Cache::getFast())
        return cache-&gt;allocate();
    return allocateSlowPath();
}

static DebugHeap* debugHeap { nullptr };
Cache* getCache()
{
    if (debugHeap)
        return nullptr;
    if (isDebugHeapEnabled()) {   // BTW, this status computation is cached by PerProcess&lt;Environment&gt;. So it is also cheap.
        debugHeap = PerProcess&lt;DebugHeap&gt;::get();
        return nullptr;
    }
    return Cache::getSlow();
}

void* allocateSlowPath(...)
{
    if (Cache* cache = getCache())
       return cache-&gt;allocate();
    return debugHeap-&gt;allocate();
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1507928</commentid>
    <comment_count>20</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-02-19 17:21:26 -0800</bug_when>
    <thetext>if (auto* heap = debugHeap())
   ...
return Cache::getSlow()-&gt;at(...)-&gt;...;

seems less diff, and easy to read. I&apos;ll update the patch with Geoff&apos;s suggestion :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1507934</commentid>
    <comment_count>21</comment_count>
      <attachid>362459</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-02-19 17:24:48 -0800</bug_when>
    <thetext>Created attachment 362459
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1507939</commentid>
    <comment_count>22</comment_count>
      <attachid>362459</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-02-19 17:32:37 -0800</bug_when>
    <thetext>Comment on attachment 362459
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1507949</commentid>
    <comment_count>23</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-02-19 17:52:00 -0800</bug_when>
    <thetext>Committed r241789: &lt;https://trac.webkit.org/changeset/241789&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1507950</commentid>
    <comment_count>24</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-02-19 17:54:38 -0800</bug_when>
    <thetext>&lt;rdar://problem/48222791&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1508102</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-02-20 10:02:53 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 194856</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1508148</commentid>
    <comment_count>26</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-02-20 11:18:31 -0800</bug_when>
    <thetext>I found the reason.

`bool bmalloc::api::isEnabled(HeapKind kind)` implementation is this.

bool isEnabled(HeapKind kind)
{
    kind = mapToActiveHeapKind(kind);
    std::unique_lock&lt;Mutex&gt; lock(Heap::mutex());
    return !PerProcess&lt;PerHeapKind&lt;Heap&gt;&gt;::getFastCase()-&gt;at(kind).debugHeap();
}

This API implicitly assumes that `PerProcess&lt;PerHeapKind&lt;Heap&gt;&gt;` is initialized by someone when `isEnabled` is called. But with this patch, we do not instantiate Cache.
Since Cache accesses Heap, Heap is instantiated by Cache. Removing Cache instantiation makes Heap not-instantiated status, and this `getFastCase()` returns nullptr when it is used from WebProcess:: initializeWebProcess -&gt; MemoryPressureHandler::setShouldUsePeriodicMemoryMonitor -&gt; bmalloc::api::isEnabled.

But relying on Heap instantiation done by somewhere else is not good. We should just use `PerProcess&lt;Environment&gt;::get()-&gt;isDebugHeapEnabled()` here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1508213</commentid>
    <comment_count>27</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-02-20 13:29:00 -0800</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #26)
&gt; I found the reason.
&gt; 
&gt; `bool bmalloc::api::isEnabled(HeapKind kind)` implementation is this.
&gt; 
&gt; bool isEnabled(HeapKind kind)
&gt; {
&gt;     kind = mapToActiveHeapKind(kind);
&gt;     std::unique_lock&lt;Mutex&gt; lock(Heap::mutex());
&gt;     return
&gt; !PerProcess&lt;PerHeapKind&lt;Heap&gt;&gt;::getFastCase()-&gt;at(kind).debugHeap();
&gt; }
&gt; 
&gt; This API implicitly assumes that `PerProcess&lt;PerHeapKind&lt;Heap&gt;&gt;` is
&gt; initialized by someone when `isEnabled` is called. But with this patch, we
&gt; do not instantiate Cache.
&gt; Since Cache accesses Heap, Heap is instantiated by Cache. Removing Cache
&gt; instantiation makes Heap not-instantiated status, and this `getFastCase()`
&gt; returns nullptr when it is used from WebProcess:: initializeWebProcess -&gt;
&gt; MemoryPressureHandler::setShouldUsePeriodicMemoryMonitor -&gt;
&gt; bmalloc::api::isEnabled.
&gt; 
&gt; But relying on Heap instantiation done by somewhere else is not good. We
&gt; should just use `PerProcess&lt;Environment&gt;::get()-&gt;isDebugHeapEnabled()` here.

I&apos;ll land this patch again with the above change for `isEnabled(HeapKind)`. I&apos;ve grepped the source code with `getFastCase()` and the other use cases are OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1508214</commentid>
    <comment_count>28</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-02-20 13:30:52 -0800</bug_when>
    <thetext>Committed r241832: &lt;https://trac.webkit.org/changeset/241832&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1519096</commentid>
    <comment_count>29</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2019-03-20 12:42:31 -0700</bug_when>
    <thetext>*** Bug 194794 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>362446</attachid>
            <date>2019-02-19 16:00:21 -0800</date>
            <delta_ts>2019-02-19 16:01:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-194811-20190219160021.patch</filename>
            <type>text/plain</type>
            <size>13213</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQxNzY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9D
aGFuZ2VMb2cgYi9Tb3VyY2UvYm1hbGxvYy9DaGFuZ2VMb2cKaW5kZXggN2NlNjUwYWJhYTYxZjE5
YzkxNmFmNDdhZjE4OTEyYWM2NmE5NDY1Ny4uMTFlMWM3NjUyYjRmYmZhM2FiNjA3ODAzMDIxMDVl
MWFhZTQzNmU0ZCAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9ibWFsbG9jL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDE5LTAyLTE5ICBZdXN1
a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CisKKyAgICAgICAgW2JtYWxsb2NdIGJtYWxs
b2M6OkNhY2hlIHNob3VsZCBub3QgYmUgaW5zdGFudGlhdGVkIGlmIHdlIGFyZSB1c2luZyBzeXN0
ZW0gbWFsbG9jCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xOTQ4MTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBibWFsbG9jOjpDYWNoZSBpcyB2ZXJ5IGxhcmdlLiBJdCBpcyAxM0tCLiBTaW5jZSBpdCBleGlz
dHMgcGVyIEhlYXBLaW5kLCBpdCB0YWtlcyA0MEtCLgorICAgICAgICBCdXQgdGhpcyBpcyBtZWFu
aW5nbGVzcyBpZiB3ZSBhcmUgdW5kZXIgdGhlIHN5c3RlbSBtYWxsb2MgbW9kZSBieSB1c2luZyAi
TWFsbG9jPTEiLiBXZQorICAgICAgICBmb3VuZCB0aGF0IGl0IGNvbnRpbnVlcyB1c2luZyBzbyBt
dWNoIGRpcnR5IG1lbW9yeSByZWdpb24gZXZlbiB1bmRlciB0aGUgc3lzdGVtIG1hbGxvYyBtb2Rl
LgorICAgICAgICBUaGlzIHBhdGNoIGF2b2lkcyBpbnN0YW50aWF0aW9uIG9mIGJtYWxsb2M6OkNh
Y2hlIHVuZGVyIHRoZSBzeXN0ZW0gbWFsbG9jIG1vZGUuCisKKyAgICAgICAgKiBibWFsbG9jL0Fs
bG9jYXRvci5jcHA6CisgICAgICAgIChibWFsbG9jOjpBbGxvY2F0b3I6OkFsbG9jYXRvcik6Cisg
ICAgICAgIChibWFsbG9jOjpBbGxvY2F0b3I6OnRyeUFsbG9jYXRlKToKKyAgICAgICAgKGJtYWxs
b2M6OkFsbG9jYXRvcjo6YWxsb2NhdGVJbXBsKToKKyAgICAgICAgKGJtYWxsb2M6OkFsbG9jYXRv
cjo6cmVhbGxvY2F0ZUltcGwpOgorICAgICAgICAoYm1hbGxvYzo6QWxsb2NhdG9yOjphbGxvY2F0
ZVNsb3dDYXNlKToKKyAgICAgICAgQWxsb2NhdG9yIGlzIGEgcGVyIENhY2hlIG9iamVjdC4gU28g
d2Ugbm8gbG9uZ2VyIG5lZWQgdG8ga2VlcCBtX2RlYnVnSGVhcC4gSWYgZGVidWcgaGVhcCBpcyBl
bmFibGVkLAorICAgICAgICBBbGxvY2F0b3IgaXMgbmV2ZXIgY3JlYXRlZC4KKworICAgICAgICAq
IGJtYWxsb2MvQWxsb2NhdG9yLmg6CisgICAgICAgICogYm1hbGxvYy9DYWNoZS5jcHA6CisgICAg
ICAgIChibWFsbG9jOjpnZXRDYWNoZXMpOgorICAgICAgICAoYm1hbGxvYzo6Q2FjaGU6OkNhY2hl
KToKKyAgICAgICAgKGJtYWxsb2M6OkNhY2hlOjp0cnlBbGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hl
KToKKyAgICAgICAgKGJtYWxsb2M6OkNhY2hlOjphbGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hlKToK
KyAgICAgICAgKGJtYWxsb2M6OkNhY2hlOjpkZWFsbG9jYXRlU2xvd0Nhc2VOdWxsQ2FjaGUpOgor
ICAgICAgICAoYm1hbGxvYzo6Q2FjaGU6OnRyeVJlYWxsb2NhdGVTbG93Q2FzZU51bGxDYWNoZSk6
CisgICAgICAgIChibWFsbG9jOjpDYWNoZTo6cmVhbGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hlKToK
KyAgICAgICAgKiBibWFsbG9jL0NhY2hlLmg6CisgICAgICAgIChibWFsbG9jOjpDYWNoZTo6dHJ5
QWxsb2NhdGUpOgorICAgICAgICAoYm1hbGxvYzo6Q2FjaGU6OnRyeVJlYWxsb2NhdGUpOgorICAg
ICAgICBJZiB0aGUgZGVidWcgaGVhcCBtb2RlIGlzIGVuYWJsZWQsIHdlIGtlZXAgQ2FjaGU6Omdl
dEZhc3QoKSByZXR1cm5pbmcgbnVsbHB0ci4gQW5kIGluIHRoZSBzbG93IHBhdGggY2FzZSwgd2Ug
dXNlIGRlYnVnSGVhcC4KKyAgICAgICAgVGhpcyBtYWtlcyBibWFsbG9jIGZhc3QgcGF0aCBmYXN0
LCB3aGlsZSB3ZSBhdm9pZCBDYWNoZSBpbnN0YW50aWF0aW9uLgorCisgICAgICAgICogYm1hbGxv
Yy9EZWFsbG9jYXRvci5jcHA6CisgICAgICAgIChibWFsbG9jOjpEZWFsbG9jYXRvcjo6RGVhbGxv
Y2F0b3IpOgorICAgICAgICAoYm1hbGxvYzo6RGVhbGxvY2F0b3I6OnNjYXZlbmdlKToKKyAgICAg
ICAgKGJtYWxsb2M6OkRlYWxsb2NhdG9yOjpkZWFsbG9jYXRlU2xvd0Nhc2UpOgorICAgICAgICAq
IGJtYWxsb2MvRGVhbGxvY2F0b3IuaDoKKyAgICAgICAgRGl0dG8gZm9yIERlYWxsb2NhdG9yLgor
CiAyMDE5LTAyLTE1ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAg
ICAgW2JtYWxsb2NdIE5TQnVuZGxlLWJhc2VkIGFwcGxpY2F0aW9uIG5hbWUgY2hlY2sgc2hvdWxk
IGJlIGV4ZWN1dGVkIGFmdGVyIGRlYnVnLWhlYXAgZW52aXJvbm1lbnQgdmFyaWFibGUgY2hlY2sK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNwcCBiL1NvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNwcAppbmRleCA0ZmJkYjA5NjRhYjk4YWM2YmNl
M2MyMDYxODFjOWU3YTMxNDc3YTk2Li5jZmQwMWZlM2VkNmZkYThmNDQzMTcyMzk0ZjQ0ODE5NWYy
MzE2OWJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5jcHAK
KysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuY3BwCkBAIC0yNyw3ICsyNyw3
IEBACiAjaW5jbHVkZSAiQkFzc2VydC5oIgogI2luY2x1ZGUgIkNodW5rLmgiCiAjaW5jbHVkZSAi
RGVhbGxvY2F0b3IuaCIKLSNpbmNsdWRlICJEZWJ1Z0hlYXAuaCIKKyNpbmNsdWRlICJFbnZpcm9u
bWVudC5oIgogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJQZXJQcm9jZXNzLmgiCiAjaW5j
bHVkZSAiU2l6ZXMuaCIKQEAgLTM4LDkgKzM4LDkgQEAgbmFtZXNwYWNlIGJtYWxsb2MgewogCiBB
bGxvY2F0b3I6OkFsbG9jYXRvcihIZWFwJiBoZWFwLCBEZWFsbG9jYXRvciYgZGVhbGxvY2F0b3Ip
CiAgICAgOiBtX2hlYXAoaGVhcCkKLSAgICAsIG1fZGVidWdIZWFwKGhlYXAuZGVidWdIZWFwKCkp
CiAgICAgLCBtX2RlYWxsb2NhdG9yKGRlYWxsb2NhdG9yKQogeworICAgIEJBU1NFUlQoIVBlclBy
b2Nlc3M8RW52aXJvbm1lbnQ+OjpnZXQoKS0+aXNEZWJ1Z0hlYXBFbmFibGVkKCkpOwogICAgIGZv
ciAoc2l6ZV90IHNpemVDbGFzcyA9IDA7IHNpemVDbGFzcyA8IHNpemVDbGFzc0NvdW50OyArK3Np
emVDbGFzcykKICAgICAgICAgbV9idW1wQWxsb2NhdG9yc1tzaXplQ2xhc3NdLmluaXQob2JqZWN0
U2l6ZShzaXplQ2xhc3MpKTsKIH0KQEAgLTUyLDkgKzUyLDYgQEAgQWxsb2NhdG9yOjp+QWxsb2Nh
dG9yKCkKIAogdm9pZCogQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZShzaXplX3Qgc2l6ZSkKIHsKLSAg
ICBpZiAobV9kZWJ1Z0hlYXApCi0gICAgICAgIHJldHVybiBtX2RlYnVnSGVhcC0+bWFsbG9jKHNp
emUpOwotCiAgICAgaWYgKHNpemUgPD0gc21hbGxNYXgpCiAgICAgICAgIHJldHVybiBhbGxvY2F0
ZShzaXplKTsKIApAQCAtNzgsOSArNzUsNiBAQCB2b2lkKiBBbGxvY2F0b3I6OmFsbG9jYXRlSW1w
bChzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSwgYm9vbCBjcmFzaE9uRmFpbHVyZQogewog
ICAgIEJBU1NFUlQoaXNQb3dlck9mVHdvKGFsaWdubWVudCkpOwogCi0gICAgaWYgKG1fZGVidWdI
ZWFwKQotICAgICAgICByZXR1cm4gbV9kZWJ1Z0hlYXAtPm1lbWFsaWduKGFsaWdubWVudCwgc2l6
ZSwgY3Jhc2hPbkZhaWx1cmUpOwotCiAgICAgaWYgKCFzaXplKQogICAgICAgICBzaXplID0gYWxp
Z25tZW50OwogCkBAIC0xMDcsOSArMTAxLDYgQEAgdm9pZCogQWxsb2NhdG9yOjp0cnlSZWFsbG9j
YXRlKHZvaWQqIG9iamVjdCwgc2l6ZV90IG5ld1NpemUpCiAKIHZvaWQqIEFsbG9jYXRvcjo6cmVh
bGxvY2F0ZUltcGwodm9pZCogb2JqZWN0LCBzaXplX3QgbmV3U2l6ZSwgYm9vbCBjcmFzaE9uRmFp
bHVyZSkKIHsKLSAgICBpZiAobV9kZWJ1Z0hlYXApCi0gICAgICAgIHJldHVybiBtX2RlYnVnSGVh
cC0+cmVhbGxvYyhvYmplY3QsIG5ld1NpemUsIGNyYXNoT25GYWlsdXJlKTsKLQogICAgIHNpemVf
dCBvbGRTaXplID0gMDsKICAgICBzd2l0Y2ggKG9iamVjdFR5cGUobV9oZWFwLmtpbmQoKSwgb2Jq
ZWN0KSkgewogICAgIGNhc2UgT2JqZWN0VHlwZTo6U21hbGw6IHsKQEAgLTIwMCw5ICsxOTEsNiBA
QCBCTk9fSU5MSU5FIHZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGVMb2dTaXplQ2xhc3Moc2l6ZV90
IHNpemUpCiAKIHZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZShzaXplX3Qgc2l6ZSkK
IHsKLSAgICBpZiAobV9kZWJ1Z0hlYXApCi0gICAgICAgIHJldHVybiBtX2RlYnVnSGVhcC0+bWFs
bG9jKHNpemUpOwotCiAgICAgaWYgKHNpemUgPD0gbWFza1NpemVDbGFzc01heCkgewogICAgICAg
ICBzaXplX3Qgc2l6ZUNsYXNzID0gYm1hbGxvYzo6bWFza1NpemVDbGFzcyhzaXplKTsKICAgICAg
ICAgQnVtcEFsbG9jYXRvciYgYWxsb2NhdG9yID0gbV9idW1wQWxsb2NhdG9yc1tzaXplQ2xhc3Nd
OwpkaWZmIC0tZ2l0IGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuaCBiL1NvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmgKaW5kZXggN2M4OTRkZTliNWMyM2MzMjQxNTVk
YzRjYTc2MzVjODBhZjVjNWQ4ZC4uOTMzYWFlNmVkOGVhMGQ4YTc0MmVlYmRiYTRjZTlmMjFjYzUz
ZTc4MiAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuaAorKysg
Yi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5oCkBAIC0zMyw3ICszMyw2IEBACiBu
YW1lc3BhY2UgYm1hbGxvYyB7CiAKIGNsYXNzIERlYWxsb2NhdG9yOwotY2xhc3MgRGVidWdIZWFw
OwogY2xhc3MgSGVhcDsKIAogLy8gUGVyLWNhY2hlIG9iamVjdCBhbGxvY2F0b3IuCkBAIC02OSw3
ICs2OCw2IEBAIGNsYXNzIEFsbG9jYXRvciB7CiAgICAgc3RkOjphcnJheTxCdW1wUmFuZ2VDYWNo
ZSwgc2l6ZUNsYXNzQ291bnQ+IG1fYnVtcFJhbmdlQ2FjaGVzOwogCiAgICAgSGVhcCYgbV9oZWFw
OwotICAgIERlYnVnSGVhcCogbV9kZWJ1Z0hlYXA7CiAgICAgRGVhbGxvY2F0b3ImIG1fZGVhbGxv
Y2F0b3I7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0NhY2hlLmNw
cCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ2FjaGUuY3BwCmluZGV4IGM5N2I5MDk1ZmI2NzNi
N2Y3NDI0NzFmNjgxODY5Y2ZjNGMxYTkzNTMuLjc3NjMzNmRiMDYzNWQ5ZWQ1NWNiZGZkMWJkZWUw
ZGY1ODhkMzM5YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ2FjaGUuY3Bw
CisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ2FjaGUuY3BwCkBAIC0yNSwxMSArMjUsMTUg
QEAKIAogI2luY2x1ZGUgIkJJbmxpbmUuaCIKICNpbmNsdWRlICJDYWNoZS5oIgorI2luY2x1ZGUg
IkRlYnVnSGVhcC5oIgorI2luY2x1ZGUgIkVudmlyb25tZW50LmgiCiAjaW5jbHVkZSAiSGVhcC5o
IgogI2luY2x1ZGUgIlBlclByb2Nlc3MuaCIKIAogbmFtZXNwYWNlIGJtYWxsb2MgewogCitzdGF0
aWMgRGVidWdIZWFwKiBkZWJ1Z0hlYXAgeyBudWxscHRyIH07CisKIHZvaWQgQ2FjaGU6OnNjYXZl
bmdlKEhlYXBLaW5kIGhlYXBLaW5kKQogewogICAgIFBlckhlYXBLaW5kPENhY2hlPiogY2FjaGVz
ID0gUGVyVGhyZWFkPFBlckhlYXBLaW5kPENhY2hlPj46OmdldEZhc3RDYXNlKCk7CkBAIC00Miwz
NSArNDYsNzcgQEAgdm9pZCBDYWNoZTo6c2NhdmVuZ2UoSGVhcEtpbmQgaGVhcEtpbmQpCiAgICAg
Y2FjaGVzLT5hdChoZWFwS2luZCkuZGVhbGxvY2F0b3IoKS5zY2F2ZW5nZSgpOwogfQogCitzdGF0
aWMgQklOTElORSBQZXJIZWFwS2luZDxDYWNoZT4qIGdldENhY2hlcygpCit7CisgICAgaWYgKGRl
YnVnSGVhcCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKFBlclByb2Nlc3M8RW52
aXJvbm1lbnQ+OjpnZXQoKS0+aXNEZWJ1Z0hlYXBFbmFibGVkKCkpIHsKKyAgICAgICAgZGVidWdI
ZWFwID0gUGVyUHJvY2VzczxEZWJ1Z0hlYXA+OjpnZXQoKTsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorICAgIHJldHVybiBQZXJUaHJlYWQ8UGVySGVhcEtpbmQ8Q2FjaGU+Pjo6Z2V0
U2xvd0Nhc2UoKTsKK30KKwogQ2FjaGU6OkNhY2hlKEhlYXBLaW5kIGhlYXBLaW5kKQogICAgIDog
bV9kZWFsbG9jYXRvcihQZXJQcm9jZXNzPFBlckhlYXBLaW5kPEhlYXA+Pjo6Z2V0KCktPmF0KGhl
YXBLaW5kKSkKICAgICAsIG1fYWxsb2NhdG9yKFBlclByb2Nlc3M8UGVySGVhcEtpbmQ8SGVhcD4+
OjpnZXQoKS0+YXQoaGVhcEtpbmQpLCBtX2RlYWxsb2NhdG9yKQogeworICAgIEJBU1NFUlQoIVBl
clByb2Nlc3M8RW52aXJvbm1lbnQ+OjpnZXQoKS0+aXNEZWJ1Z0hlYXBFbmFibGVkKCkpOwogfQog
CiBCTk9fSU5MSU5FIHZvaWQqIENhY2hlOjp0cnlBbGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hlKEhl
YXBLaW5kIGhlYXBLaW5kLCBzaXplX3Qgc2l6ZSkKIHsKLSAgICByZXR1cm4gUGVyVGhyZWFkPFBl
ckhlYXBLaW5kPENhY2hlPj46OmdldFNsb3dDYXNlKCktPmF0KG1hcFRvQWN0aXZlSGVhcEtpbmQo
aGVhcEtpbmQpKS5hbGxvY2F0b3IoKS50cnlBbGxvY2F0ZShzaXplKTsKKyAgICBpZiAoYXV0byog
Y2FjaGVzID0gZ2V0Q2FjaGVzKCkpCisgICAgICAgIHJldHVybiBjYWNoZXMtPmF0KG1hcFRvQWN0
aXZlSGVhcEtpbmQoaGVhcEtpbmQpKS5hbGxvY2F0b3IoKS50cnlBbGxvY2F0ZShzaXplKTsKKyAg
ICAvLyBGSVhNRTogSXQgaXMgbm90ICJ0cnlBbGxvY2F0ZSIuCisgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDgzNworICAgIHJldHVybiBkZWJ1Z0hlYXAt
Pm1hbGxvYyhzaXplKTsKIH0KIAogQk5PX0lOTElORSB2b2lkKiBDYWNoZTo6YWxsb2NhdGVTbG93
Q2FzZU51bGxDYWNoZShIZWFwS2luZCBoZWFwS2luZCwgc2l6ZV90IHNpemUpCiB7Ci0gICAgcmV0
dXJuIFBlclRocmVhZDxQZXJIZWFwS2luZDxDYWNoZT4+OjpnZXRTbG93Q2FzZSgpLT5hdChtYXBU
b0FjdGl2ZUhlYXBLaW5kKGhlYXBLaW5kKSkuYWxsb2NhdG9yKCkuYWxsb2NhdGUoc2l6ZSk7Cisg
ICAgaWYgKGF1dG8qIGNhY2hlcyA9IGdldENhY2hlcygpKQorICAgICAgICByZXR1cm4gY2FjaGVz
LT5hdChtYXBUb0FjdGl2ZUhlYXBLaW5kKGhlYXBLaW5kKSkuYWxsb2NhdG9yKCkuYWxsb2NhdGUo
c2l6ZSk7CisgICAgcmV0dXJuIGRlYnVnSGVhcC0+bWFsbG9jKHNpemUpOworfQorCitCTk9fSU5M
SU5FIHZvaWQqIENhY2hlOjp0cnlBbGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hlKEhlYXBLaW5kIGhl
YXBLaW5kLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBpZiAoYXV0byog
Y2FjaGVzID0gZ2V0Q2FjaGVzKCkpCisgICAgICAgIHJldHVybiBjYWNoZXMtPmF0KG1hcFRvQWN0
aXZlSGVhcEtpbmQoaGVhcEtpbmQpKS5hbGxvY2F0b3IoKS50cnlBbGxvY2F0ZShhbGlnbm1lbnQs
IHNpemUpOworICAgIGNvbnN0ZXhwciBib29sIGNyYXNoT25GYWlsdXJlID0gZmFsc2U7CisgICAg
cmV0dXJuIGRlYnVnSGVhcC0+bWVtYWxpZ24oYWxpZ25tZW50LCBzaXplLCBjcmFzaE9uRmFpbHVy
ZSk7CiB9CiAKIEJOT19JTkxJTkUgdm9pZCogQ2FjaGU6OmFsbG9jYXRlU2xvd0Nhc2VOdWxsQ2Fj
aGUoSGVhcEtpbmQgaGVhcEtpbmQsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQogewot
ICAgIHJldHVybiBQZXJUaHJlYWQ8UGVySGVhcEtpbmQ8Q2FjaGU+Pjo6Z2V0U2xvd0Nhc2UoKS0+
YXQobWFwVG9BY3RpdmVIZWFwS2luZChoZWFwS2luZCkpLmFsbG9jYXRvcigpLmFsbG9jYXRlKGFs
aWdubWVudCwgc2l6ZSk7CisgICAgaWYgKGF1dG8qIGNhY2hlcyA9IGdldENhY2hlcygpKQorICAg
ICAgICByZXR1cm4gY2FjaGVzLT5hdChtYXBUb0FjdGl2ZUhlYXBLaW5kKGhlYXBLaW5kKSkuYWxs
b2NhdG9yKCkuYWxsb2NhdGUoYWxpZ25tZW50LCBzaXplKTsKKyAgICBjb25zdGV4cHIgYm9vbCBj
cmFzaE9uRmFpbHVyZSA9IHRydWU7CisgICAgcmV0dXJuIGRlYnVnSGVhcC0+bWVtYWxpZ24oYWxp
Z25tZW50LCBzaXplLCBjcmFzaE9uRmFpbHVyZSk7CiB9CiAKIEJOT19JTkxJTkUgdm9pZCBDYWNo
ZTo6ZGVhbGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hlKEhlYXBLaW5kIGhlYXBLaW5kLCB2b2lkKiBv
YmplY3QpCiB7Ci0gICAgUGVyVGhyZWFkPFBlckhlYXBLaW5kPENhY2hlPj46OmdldFNsb3dDYXNl
KCktPmF0KG1hcFRvQWN0aXZlSGVhcEtpbmQoaGVhcEtpbmQpKS5kZWFsbG9jYXRvcigpLmRlYWxs
b2NhdGUob2JqZWN0KTsKKyAgICBpZiAoYXV0byogY2FjaGVzID0gZ2V0Q2FjaGVzKCkpCisgICAg
ICAgIGNhY2hlcy0+YXQobWFwVG9BY3RpdmVIZWFwS2luZChoZWFwS2luZCkpLmRlYWxsb2NhdG9y
KCkuZGVhbGxvY2F0ZShvYmplY3QpOworICAgIHJldHVybiBkZWJ1Z0hlYXAtPmZyZWUob2JqZWN0
KTsKK30KKworQk5PX0lOTElORSB2b2lkKiBDYWNoZTo6dHJ5UmVhbGxvY2F0ZVNsb3dDYXNlTnVs
bENhY2hlKEhlYXBLaW5kIGhlYXBLaW5kLCB2b2lkKiBvYmplY3QsIHNpemVfdCBuZXdTaXplKQor
eworICAgIGlmIChhdXRvKiBjYWNoZXMgPSBnZXRDYWNoZXMoKSkKKyAgICAgICAgcmV0dXJuIGNh
Y2hlcy0+YXQobWFwVG9BY3RpdmVIZWFwS2luZChoZWFwS2luZCkpLmFsbG9jYXRvcigpLnRyeVJl
YWxsb2NhdGUob2JqZWN0LCBuZXdTaXplKTsKKyAgICBjb25zdGV4cHIgYm9vbCBjcmFzaE9uRmFp
bHVyZSA9IGZhbHNlOworICAgIHJldHVybiBkZWJ1Z0hlYXAtPnJlYWxsb2Mob2JqZWN0LCBuZXdT
aXplLCBjcmFzaE9uRmFpbHVyZSk7CiB9CiAKIEJOT19JTkxJTkUgdm9pZCogQ2FjaGU6OnJlYWxs
b2NhdGVTbG93Q2FzZU51bGxDYWNoZShIZWFwS2luZCBoZWFwS2luZCwgdm9pZCogb2JqZWN0LCBz
aXplX3QgbmV3U2l6ZSkKIHsKLSAgICByZXR1cm4gUGVyVGhyZWFkPFBlckhlYXBLaW5kPENhY2hl
Pj46OmdldFNsb3dDYXNlKCktPmF0KG1hcFRvQWN0aXZlSGVhcEtpbmQoaGVhcEtpbmQpKS5hbGxv
Y2F0b3IoKS5yZWFsbG9jYXRlKG9iamVjdCwgbmV3U2l6ZSk7CisgICAgaWYgKGF1dG8qIGNhY2hl
cyA9IGdldENhY2hlcygpKQorICAgICAgICByZXR1cm4gY2FjaGVzLT5hdChtYXBUb0FjdGl2ZUhl
YXBLaW5kKGhlYXBLaW5kKSkuYWxsb2NhdG9yKCkucmVhbGxvY2F0ZShvYmplY3QsIG5ld1NpemUp
OworICAgIGNvbnN0ZXhwciBib29sIGNyYXNoT25GYWlsdXJlID0gdHJ1ZTsKKyAgICByZXR1cm4g
ZGVidWdIZWFwLT5yZWFsbG9jKG9iamVjdCwgbmV3U2l6ZSwgY3Jhc2hPbkZhaWx1cmUpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBibWFsbG9jCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL0NhY2hlLmggYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0NhY2hlLmgKaW5kZXggZmRlN2Uw
OWVkMDM5NWQ4YjcwMTk5NGZiODk4ZGI4YzBhYTAyYzZhNi4uOWY1MjVhN2ZjZjRlYTlkODA2NTMx
ZTEzYWIwZTU1Y2U3NjgyOTYyZSAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9D
YWNoZS5oCisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ2FjaGUuaApAQCAtNTYsOCArNTYs
MTAgQEAgY2xhc3MgQ2FjaGUgewogcHJpdmF0ZToKICAgICBCRVhQT1JUIHN0YXRpYyB2b2lkKiB0
cnlBbGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hlKEhlYXBLaW5kLCBzaXplX3QpOwogICAgIEJFWFBP
UlQgc3RhdGljIHZvaWQqIGFsbG9jYXRlU2xvd0Nhc2VOdWxsQ2FjaGUoSGVhcEtpbmQsIHNpemVf
dCk7CisgICAgQkVYUE9SVCBzdGF0aWMgdm9pZCogdHJ5QWxsb2NhdGVTbG93Q2FzZU51bGxDYWNo
ZShIZWFwS2luZCwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90KTsKICAgICBCRVhQT1JUIHN0YXRp
YyB2b2lkKiBhbGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hlKEhlYXBLaW5kLCBzaXplX3QgYWxpZ25t
ZW50LCBzaXplX3QpOwogICAgIEJFWFBPUlQgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZVNsb3dDYXNl
TnVsbENhY2hlKEhlYXBLaW5kLCB2b2lkKik7CisgICAgQkVYUE9SVCBzdGF0aWMgdm9pZCogdHJ5
UmVhbGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hlKEhlYXBLaW5kLCB2b2lkKiwgc2l6ZV90KTsKICAg
ICBCRVhQT1JUIHN0YXRpYyB2b2lkKiByZWFsbG9jYXRlU2xvd0Nhc2VOdWxsQ2FjaGUoSGVhcEtp
bmQsIHZvaWQqLCBzaXplX3QpOwogCiAgICAgRGVhbGxvY2F0b3IgbV9kZWFsbG9jYXRvcjsKQEAg
LTg0LDcgKzg2LDcgQEAgaW5saW5lIHZvaWQqIENhY2hlOjp0cnlBbGxvY2F0ZShIZWFwS2luZCBo
ZWFwS2luZCwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUKIHsKICAgICBQZXJIZWFwS2lu
ZDxDYWNoZT4qIGNhY2hlcyA9IFBlclRocmVhZDxQZXJIZWFwS2luZDxDYWNoZT4+OjpnZXRGYXN0
Q2FzZSgpOwogICAgIGlmICghY2FjaGVzKQotICAgICAgICByZXR1cm4gYWxsb2NhdGVTbG93Q2Fz
ZU51bGxDYWNoZShoZWFwS2luZCwgYWxpZ25tZW50LCBzaXplKTsKKyAgICAgICAgcmV0dXJuIHRy
eUFsbG9jYXRlU2xvd0Nhc2VOdWxsQ2FjaGUoaGVhcEtpbmQsIGFsaWdubWVudCwgc2l6ZSk7CiAg
ICAgcmV0dXJuIGNhY2hlcy0+YXQobWFwVG9BY3RpdmVIZWFwS2luZEFmdGVyRW5zdXJpbmdHaWdh
Y2FnZShoZWFwS2luZCkpLmFsbG9jYXRvcigpLnRyeUFsbG9jYXRlKGFsaWdubWVudCwgc2l6ZSk7
CiB9CiAKQEAgLTEwOCw3ICsxMTAsNyBAQCBpbmxpbmUgdm9pZCogQ2FjaGU6OnRyeVJlYWxsb2Nh
dGUoSGVhcEtpbmQgaGVhcEtpbmQsIHZvaWQqIG9iamVjdCwgc2l6ZV90IG5ld1NpegogewogICAg
IFBlckhlYXBLaW5kPENhY2hlPiogY2FjaGVzID0gUGVyVGhyZWFkPFBlckhlYXBLaW5kPENhY2hl
Pj46OmdldEZhc3RDYXNlKCk7CiAgICAgaWYgKCFjYWNoZXMpCi0gICAgICAgIHJldHVybiByZWFs
bG9jYXRlU2xvd0Nhc2VOdWxsQ2FjaGUoaGVhcEtpbmQsIG9iamVjdCwgbmV3U2l6ZSk7CisgICAg
ICAgIHJldHVybiB0cnlSZWFsbG9jYXRlU2xvd0Nhc2VOdWxsQ2FjaGUoaGVhcEtpbmQsIG9iamVj
dCwgbmV3U2l6ZSk7CiAgICAgcmV0dXJuIGNhY2hlcy0+YXQobWFwVG9BY3RpdmVIZWFwS2luZEFm
dGVyRW5zdXJpbmdHaWdhY2FnZShoZWFwS2luZCkpLmFsbG9jYXRvcigpLnRyeVJlYWxsb2NhdGUo
b2JqZWN0LCBuZXdTaXplKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9EZWFsbG9jYXRvci5jcHAgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0RlYWxsb2NhdG9yLmNw
cAppbmRleCA1NTZmMzI3OWQ1MmEyNDNmZjBkYjJiMzRmNTVhM2MwZWFmOTJkMzAzLi41OGNlM2E2
YTkxMGYwNTMwZWMwZDExYWU4ZWUzN2FiNzkzNTEzMDNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL0RlYWxsb2NhdG9yLmNwcAorKysgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9j
L0RlYWxsb2NhdG9yLmNwcApAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIkJJbmxpbmUuaCIK
ICNpbmNsdWRlICJDaHVuay5oIgogI2luY2x1ZGUgIkRlYWxsb2NhdG9yLmgiCi0jaW5jbHVkZSAi
RGVidWdIZWFwLmgiCisjaW5jbHVkZSAiRW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJIZWFwLmgi
CiAjaW5jbHVkZSAiT2JqZWN0LmgiCiAjaW5jbHVkZSAiUGVyUHJvY2Vzcy5oIgpAQCAtMzksMTMg
KzM5LDggQEAgbmFtZXNwYWNlIGJtYWxsb2MgewogCiBEZWFsbG9jYXRvcjo6RGVhbGxvY2F0b3Io
SGVhcCYgaGVhcCkKICAgICA6IG1faGVhcChoZWFwKQotICAgICwgbV9kZWJ1Z0hlYXAoaGVhcC5k
ZWJ1Z0hlYXAoKSkKIHsKLSAgICBpZiAobV9kZWJ1Z0hlYXApIHsKLSAgICAgICAgLy8gRmlsbCB0
aGUgb2JqZWN0IGxvZyBpbiBvcmRlciB0byBkaXNhYmxlIHRoZSBmYXN0IHBhdGguCi0gICAgICAg
IHdoaWxlIChtX29iamVjdExvZy5zaXplKCkgIT0gbV9vYmplY3RMb2cuY2FwYWNpdHkoKSkKLSAg
ICAgICAgICAgIG1fb2JqZWN0TG9nLnB1c2gobnVsbHB0cik7Ci0gICAgfQorICAgIEJBU1NFUlQo
IVBlclByb2Nlc3M8RW52aXJvbm1lbnQ+OjpnZXQoKS0+aXNEZWJ1Z0hlYXBFbmFibGVkKCkpOwog
fQogCiBEZWFsbG9jYXRvcjo6fkRlYWxsb2NhdG9yKCkKQEAgLTU1LDkgKzUwLDYgQEAgRGVhbGxv
Y2F0b3I6On5EZWFsbG9jYXRvcigpCiAgICAgCiB2b2lkIERlYWxsb2NhdG9yOjpzY2F2ZW5nZSgp
CiB7Ci0gICAgaWYgKG1fZGVidWdIZWFwKQotICAgICAgICByZXR1cm47Ci0KICAgICBzdGQ6OnVu
aXF1ZV9sb2NrPE11dGV4PiBsb2NrKEhlYXA6Om11dGV4KCkpOwogCiAgICAgcHJvY2Vzc09iamVj
dExvZyhsb2NrKTsKQEAgLTczLDkgKzY1LDYgQEAgdm9pZCBEZWFsbG9jYXRvcjo6cHJvY2Vzc09i
amVjdExvZyhzdGQ6OnVuaXF1ZV9sb2NrPE11dGV4PiYgbG9jaykKIAogdm9pZCBEZWFsbG9jYXRv
cjo6ZGVhbGxvY2F0ZVNsb3dDYXNlKHZvaWQqIG9iamVjdCkKIHsKLSAgICBpZiAobV9kZWJ1Z0hl
YXApCi0gICAgICAgIHJldHVybiBtX2RlYnVnSGVhcC0+ZnJlZShvYmplY3QpOwotCiAgICAgaWYg
KCFvYmplY3QpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9EZWFsbG9jYXRvci5oIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWFsbG9jYXRv
ci5oCmluZGV4IDMyNWQxZGY1MjRlYTI4YTQzY2M1ZjQ0ZjA5YzZkMDE0MTQ5YmMyMDguLjEzNDJj
NGNhZmRjMGYxNDU1MjY0MWNhMjNhMTRkNTM1ODgwNTY1MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvRGVhbGxvY2F0b3IuaAorKysgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9j
L0RlYWxsb2NhdG9yLmgKQEAgLTMzLDcgKzMzLDYgQEAKIAogbmFtZXNwYWNlIGJtYWxsb2Mgewog
Ci1jbGFzcyBEZWJ1Z0hlYXA7CiBjbGFzcyBIZWFwOwogY2xhc3MgTXV0ZXg7CiAKQEAgLTU4LDcg
KzU3LDYgQEAgY2xhc3MgRGVhbGxvY2F0b3IgewogICAgIEhlYXAmIG1faGVhcDsKICAgICBGaXhl
ZFZlY3Rvcjx2b2lkKiwgZGVhbGxvY2F0b3JMb2dDYXBhY2l0eT4gbV9vYmplY3RMb2c7CiAgICAg
TGluZUNhY2hlIG1fbGluZUNhY2hlOyAvLyBUaGUgSGVhcCByZW1vdmVzIGl0ZW1zIGZyb20gdGhp
cyBjYWNoZS4KLSAgICBEZWJ1Z0hlYXAqIG1fZGVidWdIZWFwOwogfTsKIAogaW5saW5lIGJvb2wg
RGVhbGxvY2F0b3I6OmRlYWxsb2NhdGVGYXN0Q2FzZSh2b2lkKiBvYmplY3QpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>362447</attachid>
            <date>2019-02-19 16:01:52 -0800</date>
            <delta_ts>2019-02-19 16:26:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-194811-20190219160151.patch</filename>
            <type>text/plain</type>
            <size>13233</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQxNzY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9D
aGFuZ2VMb2cgYi9Tb3VyY2UvYm1hbGxvYy9DaGFuZ2VMb2cKaW5kZXggN2NlNjUwYWJhYTYxZjE5
YzkxNmFmNDdhZjE4OTEyYWM2NmE5NDY1Ny4uMTFlMWM3NjUyYjRmYmZhM2FiNjA3ODAzMDIxMDVl
MWFhZTQzNmU0ZCAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9ibWFsbG9jL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDE5LTAyLTE5ICBZdXN1
a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CisKKyAgICAgICAgW2JtYWxsb2NdIGJtYWxs
b2M6OkNhY2hlIHNob3VsZCBub3QgYmUgaW5zdGFudGlhdGVkIGlmIHdlIGFyZSB1c2luZyBzeXN0
ZW0gbWFsbG9jCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xOTQ4MTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBibWFsbG9jOjpDYWNoZSBpcyB2ZXJ5IGxhcmdlLiBJdCBpcyAxM0tCLiBTaW5jZSBpdCBleGlz
dHMgcGVyIEhlYXBLaW5kLCBpdCB0YWtlcyA0MEtCLgorICAgICAgICBCdXQgdGhpcyBpcyBtZWFu
aW5nbGVzcyBpZiB3ZSBhcmUgdW5kZXIgdGhlIHN5c3RlbSBtYWxsb2MgbW9kZSBieSB1c2luZyAi
TWFsbG9jPTEiLiBXZQorICAgICAgICBmb3VuZCB0aGF0IGl0IGNvbnRpbnVlcyB1c2luZyBzbyBt
dWNoIGRpcnR5IG1lbW9yeSByZWdpb24gZXZlbiB1bmRlciB0aGUgc3lzdGVtIG1hbGxvYyBtb2Rl
LgorICAgICAgICBUaGlzIHBhdGNoIGF2b2lkcyBpbnN0YW50aWF0aW9uIG9mIGJtYWxsb2M6OkNh
Y2hlIHVuZGVyIHRoZSBzeXN0ZW0gbWFsbG9jIG1vZGUuCisKKyAgICAgICAgKiBibWFsbG9jL0Fs
bG9jYXRvci5jcHA6CisgICAgICAgIChibWFsbG9jOjpBbGxvY2F0b3I6OkFsbG9jYXRvcik6Cisg
ICAgICAgIChibWFsbG9jOjpBbGxvY2F0b3I6OnRyeUFsbG9jYXRlKToKKyAgICAgICAgKGJtYWxs
b2M6OkFsbG9jYXRvcjo6YWxsb2NhdGVJbXBsKToKKyAgICAgICAgKGJtYWxsb2M6OkFsbG9jYXRv
cjo6cmVhbGxvY2F0ZUltcGwpOgorICAgICAgICAoYm1hbGxvYzo6QWxsb2NhdG9yOjphbGxvY2F0
ZVNsb3dDYXNlKToKKyAgICAgICAgQWxsb2NhdG9yIGlzIGEgcGVyIENhY2hlIG9iamVjdC4gU28g
d2Ugbm8gbG9uZ2VyIG5lZWQgdG8ga2VlcCBtX2RlYnVnSGVhcC4gSWYgZGVidWcgaGVhcCBpcyBl
bmFibGVkLAorICAgICAgICBBbGxvY2F0b3IgaXMgbmV2ZXIgY3JlYXRlZC4KKworICAgICAgICAq
IGJtYWxsb2MvQWxsb2NhdG9yLmg6CisgICAgICAgICogYm1hbGxvYy9DYWNoZS5jcHA6CisgICAg
ICAgIChibWFsbG9jOjpnZXRDYWNoZXMpOgorICAgICAgICAoYm1hbGxvYzo6Q2FjaGU6OkNhY2hl
KToKKyAgICAgICAgKGJtYWxsb2M6OkNhY2hlOjp0cnlBbGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hl
KToKKyAgICAgICAgKGJtYWxsb2M6OkNhY2hlOjphbGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hlKToK
KyAgICAgICAgKGJtYWxsb2M6OkNhY2hlOjpkZWFsbG9jYXRlU2xvd0Nhc2VOdWxsQ2FjaGUpOgor
ICAgICAgICAoYm1hbGxvYzo6Q2FjaGU6OnRyeVJlYWxsb2NhdGVTbG93Q2FzZU51bGxDYWNoZSk6
CisgICAgICAgIChibWFsbG9jOjpDYWNoZTo6cmVhbGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hlKToK
KyAgICAgICAgKiBibWFsbG9jL0NhY2hlLmg6CisgICAgICAgIChibWFsbG9jOjpDYWNoZTo6dHJ5
QWxsb2NhdGUpOgorICAgICAgICAoYm1hbGxvYzo6Q2FjaGU6OnRyeVJlYWxsb2NhdGUpOgorICAg
ICAgICBJZiB0aGUgZGVidWcgaGVhcCBtb2RlIGlzIGVuYWJsZWQsIHdlIGtlZXAgQ2FjaGU6Omdl
dEZhc3QoKSByZXR1cm5pbmcgbnVsbHB0ci4gQW5kIGluIHRoZSBzbG93IHBhdGggY2FzZSwgd2Ug
dXNlIGRlYnVnSGVhcC4KKyAgICAgICAgVGhpcyBtYWtlcyBibWFsbG9jIGZhc3QgcGF0aCBmYXN0
LCB3aGlsZSB3ZSBhdm9pZCBDYWNoZSBpbnN0YW50aWF0aW9uLgorCisgICAgICAgICogYm1hbGxv
Yy9EZWFsbG9jYXRvci5jcHA6CisgICAgICAgIChibWFsbG9jOjpEZWFsbG9jYXRvcjo6RGVhbGxv
Y2F0b3IpOgorICAgICAgICAoYm1hbGxvYzo6RGVhbGxvY2F0b3I6OnNjYXZlbmdlKToKKyAgICAg
ICAgKGJtYWxsb2M6OkRlYWxsb2NhdG9yOjpkZWFsbG9jYXRlU2xvd0Nhc2UpOgorICAgICAgICAq
IGJtYWxsb2MvRGVhbGxvY2F0b3IuaDoKKyAgICAgICAgRGl0dG8gZm9yIERlYWxsb2NhdG9yLgor
CiAyMDE5LTAyLTE1ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAg
ICAgW2JtYWxsb2NdIE5TQnVuZGxlLWJhc2VkIGFwcGxpY2F0aW9uIG5hbWUgY2hlY2sgc2hvdWxk
IGJlIGV4ZWN1dGVkIGFmdGVyIGRlYnVnLWhlYXAgZW52aXJvbm1lbnQgdmFyaWFibGUgY2hlY2sK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNwcCBiL1NvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNwcAppbmRleCA0ZmJkYjA5NjRhYjk4YWM2YmNl
M2MyMDYxODFjOWU3YTMxNDc3YTk2Li5jZmQwMWZlM2VkNmZkYThmNDQzMTcyMzk0ZjQ0ODE5NWYy
MzE2OWJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5jcHAK
KysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuY3BwCkBAIC0yNyw3ICsyNyw3
IEBACiAjaW5jbHVkZSAiQkFzc2VydC5oIgogI2luY2x1ZGUgIkNodW5rLmgiCiAjaW5jbHVkZSAi
RGVhbGxvY2F0b3IuaCIKLSNpbmNsdWRlICJEZWJ1Z0hlYXAuaCIKKyNpbmNsdWRlICJFbnZpcm9u
bWVudC5oIgogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJQZXJQcm9jZXNzLmgiCiAjaW5j
bHVkZSAiU2l6ZXMuaCIKQEAgLTM4LDkgKzM4LDkgQEAgbmFtZXNwYWNlIGJtYWxsb2MgewogCiBB
bGxvY2F0b3I6OkFsbG9jYXRvcihIZWFwJiBoZWFwLCBEZWFsbG9jYXRvciYgZGVhbGxvY2F0b3Ip
CiAgICAgOiBtX2hlYXAoaGVhcCkKLSAgICAsIG1fZGVidWdIZWFwKGhlYXAuZGVidWdIZWFwKCkp
CiAgICAgLCBtX2RlYWxsb2NhdG9yKGRlYWxsb2NhdG9yKQogeworICAgIEJBU1NFUlQoIVBlclBy
b2Nlc3M8RW52aXJvbm1lbnQ+OjpnZXQoKS0+aXNEZWJ1Z0hlYXBFbmFibGVkKCkpOwogICAgIGZv
ciAoc2l6ZV90IHNpemVDbGFzcyA9IDA7IHNpemVDbGFzcyA8IHNpemVDbGFzc0NvdW50OyArK3Np
emVDbGFzcykKICAgICAgICAgbV9idW1wQWxsb2NhdG9yc1tzaXplQ2xhc3NdLmluaXQob2JqZWN0
U2l6ZShzaXplQ2xhc3MpKTsKIH0KQEAgLTUyLDkgKzUyLDYgQEAgQWxsb2NhdG9yOjp+QWxsb2Nh
dG9yKCkKIAogdm9pZCogQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZShzaXplX3Qgc2l6ZSkKIHsKLSAg
ICBpZiAobV9kZWJ1Z0hlYXApCi0gICAgICAgIHJldHVybiBtX2RlYnVnSGVhcC0+bWFsbG9jKHNp
emUpOwotCiAgICAgaWYgKHNpemUgPD0gc21hbGxNYXgpCiAgICAgICAgIHJldHVybiBhbGxvY2F0
ZShzaXplKTsKIApAQCAtNzgsOSArNzUsNiBAQCB2b2lkKiBBbGxvY2F0b3I6OmFsbG9jYXRlSW1w
bChzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSwgYm9vbCBjcmFzaE9uRmFpbHVyZQogewog
ICAgIEJBU1NFUlQoaXNQb3dlck9mVHdvKGFsaWdubWVudCkpOwogCi0gICAgaWYgKG1fZGVidWdI
ZWFwKQotICAgICAgICByZXR1cm4gbV9kZWJ1Z0hlYXAtPm1lbWFsaWduKGFsaWdubWVudCwgc2l6
ZSwgY3Jhc2hPbkZhaWx1cmUpOwotCiAgICAgaWYgKCFzaXplKQogICAgICAgICBzaXplID0gYWxp
Z25tZW50OwogCkBAIC0xMDcsOSArMTAxLDYgQEAgdm9pZCogQWxsb2NhdG9yOjp0cnlSZWFsbG9j
YXRlKHZvaWQqIG9iamVjdCwgc2l6ZV90IG5ld1NpemUpCiAKIHZvaWQqIEFsbG9jYXRvcjo6cmVh
bGxvY2F0ZUltcGwodm9pZCogb2JqZWN0LCBzaXplX3QgbmV3U2l6ZSwgYm9vbCBjcmFzaE9uRmFp
bHVyZSkKIHsKLSAgICBpZiAobV9kZWJ1Z0hlYXApCi0gICAgICAgIHJldHVybiBtX2RlYnVnSGVh
cC0+cmVhbGxvYyhvYmplY3QsIG5ld1NpemUsIGNyYXNoT25GYWlsdXJlKTsKLQogICAgIHNpemVf
dCBvbGRTaXplID0gMDsKICAgICBzd2l0Y2ggKG9iamVjdFR5cGUobV9oZWFwLmtpbmQoKSwgb2Jq
ZWN0KSkgewogICAgIGNhc2UgT2JqZWN0VHlwZTo6U21hbGw6IHsKQEAgLTIwMCw5ICsxOTEsNiBA
QCBCTk9fSU5MSU5FIHZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGVMb2dTaXplQ2xhc3Moc2l6ZV90
IHNpemUpCiAKIHZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZShzaXplX3Qgc2l6ZSkK
IHsKLSAgICBpZiAobV9kZWJ1Z0hlYXApCi0gICAgICAgIHJldHVybiBtX2RlYnVnSGVhcC0+bWFs
bG9jKHNpemUpOwotCiAgICAgaWYgKHNpemUgPD0gbWFza1NpemVDbGFzc01heCkgewogICAgICAg
ICBzaXplX3Qgc2l6ZUNsYXNzID0gYm1hbGxvYzo6bWFza1NpemVDbGFzcyhzaXplKTsKICAgICAg
ICAgQnVtcEFsbG9jYXRvciYgYWxsb2NhdG9yID0gbV9idW1wQWxsb2NhdG9yc1tzaXplQ2xhc3Nd
OwpkaWZmIC0tZ2l0IGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuaCBiL1NvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmgKaW5kZXggN2M4OTRkZTliNWMyM2MzMjQxNTVk
YzRjYTc2MzVjODBhZjVjNWQ4ZC4uOTMzYWFlNmVkOGVhMGQ4YTc0MmVlYmRiYTRjZTlmMjFjYzUz
ZTc4MiAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuaAorKysg
Yi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5oCkBAIC0zMyw3ICszMyw2IEBACiBu
YW1lc3BhY2UgYm1hbGxvYyB7CiAKIGNsYXNzIERlYWxsb2NhdG9yOwotY2xhc3MgRGVidWdIZWFw
OwogY2xhc3MgSGVhcDsKIAogLy8gUGVyLWNhY2hlIG9iamVjdCBhbGxvY2F0b3IuCkBAIC02OSw3
ICs2OCw2IEBAIGNsYXNzIEFsbG9jYXRvciB7CiAgICAgc3RkOjphcnJheTxCdW1wUmFuZ2VDYWNo
ZSwgc2l6ZUNsYXNzQ291bnQ+IG1fYnVtcFJhbmdlQ2FjaGVzOwogCiAgICAgSGVhcCYgbV9oZWFw
OwotICAgIERlYnVnSGVhcCogbV9kZWJ1Z0hlYXA7CiAgICAgRGVhbGxvY2F0b3ImIG1fZGVhbGxv
Y2F0b3I7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0NhY2hlLmNw
cCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ2FjaGUuY3BwCmluZGV4IGM5N2I5MDk1ZmI2NzNi
N2Y3NDI0NzFmNjgxODY5Y2ZjNGMxYTkzNTMuLjUzMDBmMmY1ZmI2YjhhYzViYzk5N2FmMmY4YzEz
YWZkZmNhMDRiNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ2FjaGUuY3Bw
CisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ2FjaGUuY3BwCkBAIC0yNSwxMSArMjUsMTUg
QEAKIAogI2luY2x1ZGUgIkJJbmxpbmUuaCIKICNpbmNsdWRlICJDYWNoZS5oIgorI2luY2x1ZGUg
IkRlYnVnSGVhcC5oIgorI2luY2x1ZGUgIkVudmlyb25tZW50LmgiCiAjaW5jbHVkZSAiSGVhcC5o
IgogI2luY2x1ZGUgIlBlclByb2Nlc3MuaCIKIAogbmFtZXNwYWNlIGJtYWxsb2MgewogCitzdGF0
aWMgRGVidWdIZWFwKiBkZWJ1Z0hlYXAgeyBudWxscHRyIH07CisKIHZvaWQgQ2FjaGU6OnNjYXZl
bmdlKEhlYXBLaW5kIGhlYXBLaW5kKQogewogICAgIFBlckhlYXBLaW5kPENhY2hlPiogY2FjaGVz
ID0gUGVyVGhyZWFkPFBlckhlYXBLaW5kPENhY2hlPj46OmdldEZhc3RDYXNlKCk7CkBAIC00Miwz
NSArNDYsNzcgQEAgdm9pZCBDYWNoZTo6c2NhdmVuZ2UoSGVhcEtpbmQgaGVhcEtpbmQpCiAgICAg
Y2FjaGVzLT5hdChoZWFwS2luZCkuZGVhbGxvY2F0b3IoKS5zY2F2ZW5nZSgpOwogfQogCitzdGF0
aWMgQklOTElORSBQZXJIZWFwS2luZDxDYWNoZT4qIGdldENhY2hlcygpCit7CisgICAgaWYgKGRl
YnVnSGVhcCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKFBlclByb2Nlc3M8RW52
aXJvbm1lbnQ+OjpnZXQoKS0+aXNEZWJ1Z0hlYXBFbmFibGVkKCkpIHsKKyAgICAgICAgZGVidWdI
ZWFwID0gUGVyUHJvY2VzczxEZWJ1Z0hlYXA+OjpnZXQoKTsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorICAgIHJldHVybiBQZXJUaHJlYWQ8UGVySGVhcEtpbmQ8Q2FjaGU+Pjo6Z2V0
U2xvd0Nhc2UoKTsKK30KKwogQ2FjaGU6OkNhY2hlKEhlYXBLaW5kIGhlYXBLaW5kKQogICAgIDog
bV9kZWFsbG9jYXRvcihQZXJQcm9jZXNzPFBlckhlYXBLaW5kPEhlYXA+Pjo6Z2V0KCktPmF0KGhl
YXBLaW5kKSkKICAgICAsIG1fYWxsb2NhdG9yKFBlclByb2Nlc3M8UGVySGVhcEtpbmQ8SGVhcD4+
OjpnZXQoKS0+YXQoaGVhcEtpbmQpLCBtX2RlYWxsb2NhdG9yKQogeworICAgIEJBU1NFUlQoIVBl
clByb2Nlc3M8RW52aXJvbm1lbnQ+OjpnZXQoKS0+aXNEZWJ1Z0hlYXBFbmFibGVkKCkpOwogfQog
CiBCTk9fSU5MSU5FIHZvaWQqIENhY2hlOjp0cnlBbGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hlKEhl
YXBLaW5kIGhlYXBLaW5kLCBzaXplX3Qgc2l6ZSkKIHsKLSAgICByZXR1cm4gUGVyVGhyZWFkPFBl
ckhlYXBLaW5kPENhY2hlPj46OmdldFNsb3dDYXNlKCktPmF0KG1hcFRvQWN0aXZlSGVhcEtpbmQo
aGVhcEtpbmQpKS5hbGxvY2F0b3IoKS50cnlBbGxvY2F0ZShzaXplKTsKKyAgICBpZiAoYXV0byog
Y2FjaGVzID0gZ2V0Q2FjaGVzKCkpCisgICAgICAgIHJldHVybiBjYWNoZXMtPmF0KG1hcFRvQWN0
aXZlSGVhcEtpbmQoaGVhcEtpbmQpKS5hbGxvY2F0b3IoKS50cnlBbGxvY2F0ZShzaXplKTsKKyAg
ICAvLyBGSVhNRTogRGVidWdIZWFwIGRvZXMgbm90IGhhdmUgdHJ5QWxsb2NhdGUgZmVhdHVyZS4K
KyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk0ODM3Cisg
ICAgcmV0dXJuIGRlYnVnSGVhcC0+bWFsbG9jKHNpemUpOwogfQogCiBCTk9fSU5MSU5FIHZvaWQq
IENhY2hlOjphbGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hlKEhlYXBLaW5kIGhlYXBLaW5kLCBzaXpl
X3Qgc2l6ZSkKIHsKLSAgICByZXR1cm4gUGVyVGhyZWFkPFBlckhlYXBLaW5kPENhY2hlPj46Omdl
dFNsb3dDYXNlKCktPmF0KG1hcFRvQWN0aXZlSGVhcEtpbmQoaGVhcEtpbmQpKS5hbGxvY2F0b3Io
KS5hbGxvY2F0ZShzaXplKTsKKyAgICBpZiAoYXV0byogY2FjaGVzID0gZ2V0Q2FjaGVzKCkpCisg
ICAgICAgIHJldHVybiBjYWNoZXMtPmF0KG1hcFRvQWN0aXZlSGVhcEtpbmQoaGVhcEtpbmQpKS5h
bGxvY2F0b3IoKS5hbGxvY2F0ZShzaXplKTsKKyAgICByZXR1cm4gZGVidWdIZWFwLT5tYWxsb2Mo
c2l6ZSk7Cit9CisKK0JOT19JTkxJTkUgdm9pZCogQ2FjaGU6OnRyeUFsbG9jYXRlU2xvd0Nhc2VO
dWxsQ2FjaGUoSGVhcEtpbmQgaGVhcEtpbmQsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXpl
KQoreworICAgIGlmIChhdXRvKiBjYWNoZXMgPSBnZXRDYWNoZXMoKSkKKyAgICAgICAgcmV0dXJu
IGNhY2hlcy0+YXQobWFwVG9BY3RpdmVIZWFwS2luZChoZWFwS2luZCkpLmFsbG9jYXRvcigpLnRy
eUFsbG9jYXRlKGFsaWdubWVudCwgc2l6ZSk7CisgICAgY29uc3RleHByIGJvb2wgY3Jhc2hPbkZh
aWx1cmUgPSBmYWxzZTsKKyAgICByZXR1cm4gZGVidWdIZWFwLT5tZW1hbGlnbihhbGlnbm1lbnQs
IHNpemUsIGNyYXNoT25GYWlsdXJlKTsKIH0KIAogQk5PX0lOTElORSB2b2lkKiBDYWNoZTo6YWxs
b2NhdGVTbG93Q2FzZU51bGxDYWNoZShIZWFwS2luZCBoZWFwS2luZCwgc2l6ZV90IGFsaWdubWVu
dCwgc2l6ZV90IHNpemUpCiB7Ci0gICAgcmV0dXJuIFBlclRocmVhZDxQZXJIZWFwS2luZDxDYWNo
ZT4+OjpnZXRTbG93Q2FzZSgpLT5hdChtYXBUb0FjdGl2ZUhlYXBLaW5kKGhlYXBLaW5kKSkuYWxs
b2NhdG9yKCkuYWxsb2NhdGUoYWxpZ25tZW50LCBzaXplKTsKKyAgICBpZiAoYXV0byogY2FjaGVz
ID0gZ2V0Q2FjaGVzKCkpCisgICAgICAgIHJldHVybiBjYWNoZXMtPmF0KG1hcFRvQWN0aXZlSGVh
cEtpbmQoaGVhcEtpbmQpKS5hbGxvY2F0b3IoKS5hbGxvY2F0ZShhbGlnbm1lbnQsIHNpemUpOwor
ICAgIGNvbnN0ZXhwciBib29sIGNyYXNoT25GYWlsdXJlID0gdHJ1ZTsKKyAgICByZXR1cm4gZGVi
dWdIZWFwLT5tZW1hbGlnbihhbGlnbm1lbnQsIHNpemUsIGNyYXNoT25GYWlsdXJlKTsKIH0KIAog
Qk5PX0lOTElORSB2b2lkIENhY2hlOjpkZWFsbG9jYXRlU2xvd0Nhc2VOdWxsQ2FjaGUoSGVhcEtp
bmQgaGVhcEtpbmQsIHZvaWQqIG9iamVjdCkKIHsKLSAgICBQZXJUaHJlYWQ8UGVySGVhcEtpbmQ8
Q2FjaGU+Pjo6Z2V0U2xvd0Nhc2UoKS0+YXQobWFwVG9BY3RpdmVIZWFwS2luZChoZWFwS2luZCkp
LmRlYWxsb2NhdG9yKCkuZGVhbGxvY2F0ZShvYmplY3QpOworICAgIGlmIChhdXRvKiBjYWNoZXMg
PSBnZXRDYWNoZXMoKSkKKyAgICAgICAgY2FjaGVzLT5hdChtYXBUb0FjdGl2ZUhlYXBLaW5kKGhl
YXBLaW5kKSkuZGVhbGxvY2F0b3IoKS5kZWFsbG9jYXRlKG9iamVjdCk7CisgICAgcmV0dXJuIGRl
YnVnSGVhcC0+ZnJlZShvYmplY3QpOworfQorCitCTk9fSU5MSU5FIHZvaWQqIENhY2hlOjp0cnlS
ZWFsbG9jYXRlU2xvd0Nhc2VOdWxsQ2FjaGUoSGVhcEtpbmQgaGVhcEtpbmQsIHZvaWQqIG9iamVj
dCwgc2l6ZV90IG5ld1NpemUpCit7CisgICAgaWYgKGF1dG8qIGNhY2hlcyA9IGdldENhY2hlcygp
KQorICAgICAgICByZXR1cm4gY2FjaGVzLT5hdChtYXBUb0FjdGl2ZUhlYXBLaW5kKGhlYXBLaW5k
KSkuYWxsb2NhdG9yKCkudHJ5UmVhbGxvY2F0ZShvYmplY3QsIG5ld1NpemUpOworICAgIGNvbnN0
ZXhwciBib29sIGNyYXNoT25GYWlsdXJlID0gZmFsc2U7CisgICAgcmV0dXJuIGRlYnVnSGVhcC0+
cmVhbGxvYyhvYmplY3QsIG5ld1NpemUsIGNyYXNoT25GYWlsdXJlKTsKIH0KIAogQk5PX0lOTElO
RSB2b2lkKiBDYWNoZTo6cmVhbGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hlKEhlYXBLaW5kIGhlYXBL
aW5kLCB2b2lkKiBvYmplY3QsIHNpemVfdCBuZXdTaXplKQogewotICAgIHJldHVybiBQZXJUaHJl
YWQ8UGVySGVhcEtpbmQ8Q2FjaGU+Pjo6Z2V0U2xvd0Nhc2UoKS0+YXQobWFwVG9BY3RpdmVIZWFw
S2luZChoZWFwS2luZCkpLmFsbG9jYXRvcigpLnJlYWxsb2NhdGUob2JqZWN0LCBuZXdTaXplKTsK
KyAgICBpZiAoYXV0byogY2FjaGVzID0gZ2V0Q2FjaGVzKCkpCisgICAgICAgIHJldHVybiBjYWNo
ZXMtPmF0KG1hcFRvQWN0aXZlSGVhcEtpbmQoaGVhcEtpbmQpKS5hbGxvY2F0b3IoKS5yZWFsbG9j
YXRlKG9iamVjdCwgbmV3U2l6ZSk7CisgICAgY29uc3RleHByIGJvb2wgY3Jhc2hPbkZhaWx1cmUg
PSB0cnVlOworICAgIHJldHVybiBkZWJ1Z0hlYXAtPnJlYWxsb2Mob2JqZWN0LCBuZXdTaXplLCBj
cmFzaE9uRmFpbHVyZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKZGlmZiAtLWdpdCBh
L1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ2FjaGUuaCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
Q2FjaGUuaAppbmRleCBmZGU3ZTA5ZWQwMzk1ZDhiNzAxOTk0ZmI4OThkYjhjMGFhMDJjNmE2Li45
ZjUyNWE3ZmNmNGVhOWQ4MDY1MzFlMTNhYjBlNTVjZTc2ODI5NjJlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL0NhY2hlLmgKKysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9D
YWNoZS5oCkBAIC01Niw4ICs1NiwxMCBAQCBjbGFzcyBDYWNoZSB7CiBwcml2YXRlOgogICAgIEJF
WFBPUlQgc3RhdGljIHZvaWQqIHRyeUFsbG9jYXRlU2xvd0Nhc2VOdWxsQ2FjaGUoSGVhcEtpbmQs
IHNpemVfdCk7CiAgICAgQkVYUE9SVCBzdGF0aWMgdm9pZCogYWxsb2NhdGVTbG93Q2FzZU51bGxD
YWNoZShIZWFwS2luZCwgc2l6ZV90KTsKKyAgICBCRVhQT1JUIHN0YXRpYyB2b2lkKiB0cnlBbGxv
Y2F0ZVNsb3dDYXNlTnVsbENhY2hlKEhlYXBLaW5kLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qp
OwogICAgIEJFWFBPUlQgc3RhdGljIHZvaWQqIGFsbG9jYXRlU2xvd0Nhc2VOdWxsQ2FjaGUoSGVh
cEtpbmQsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCk7CiAgICAgQkVYUE9SVCBzdGF0aWMgdm9p
ZCBkZWFsbG9jYXRlU2xvd0Nhc2VOdWxsQ2FjaGUoSGVhcEtpbmQsIHZvaWQqKTsKKyAgICBCRVhQ
T1JUIHN0YXRpYyB2b2lkKiB0cnlSZWFsbG9jYXRlU2xvd0Nhc2VOdWxsQ2FjaGUoSGVhcEtpbmQs
IHZvaWQqLCBzaXplX3QpOwogICAgIEJFWFBPUlQgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGVTbG93
Q2FzZU51bGxDYWNoZShIZWFwS2luZCwgdm9pZCosIHNpemVfdCk7CiAKICAgICBEZWFsbG9jYXRv
ciBtX2RlYWxsb2NhdG9yOwpAQCAtODQsNyArODYsNyBAQCBpbmxpbmUgdm9pZCogQ2FjaGU6OnRy
eUFsbG9jYXRlKEhlYXBLaW5kIGhlYXBLaW5kLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6
ZQogewogICAgIFBlckhlYXBLaW5kPENhY2hlPiogY2FjaGVzID0gUGVyVGhyZWFkPFBlckhlYXBL
aW5kPENhY2hlPj46OmdldEZhc3RDYXNlKCk7CiAgICAgaWYgKCFjYWNoZXMpCi0gICAgICAgIHJl
dHVybiBhbGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hlKGhlYXBLaW5kLCBhbGlnbm1lbnQsIHNpemUp
OworICAgICAgICByZXR1cm4gdHJ5QWxsb2NhdGVTbG93Q2FzZU51bGxDYWNoZShoZWFwS2luZCwg
YWxpZ25tZW50LCBzaXplKTsKICAgICByZXR1cm4gY2FjaGVzLT5hdChtYXBUb0FjdGl2ZUhlYXBL
aW5kQWZ0ZXJFbnN1cmluZ0dpZ2FjYWdlKGhlYXBLaW5kKSkuYWxsb2NhdG9yKCkudHJ5QWxsb2Nh
dGUoYWxpZ25tZW50LCBzaXplKTsKIH0KIApAQCAtMTA4LDcgKzExMCw3IEBAIGlubGluZSB2b2lk
KiBDYWNoZTo6dHJ5UmVhbGxvY2F0ZShIZWFwS2luZCBoZWFwS2luZCwgdm9pZCogb2JqZWN0LCBz
aXplX3QgbmV3U2l6CiB7CiAgICAgUGVySGVhcEtpbmQ8Q2FjaGU+KiBjYWNoZXMgPSBQZXJUaHJl
YWQ8UGVySGVhcEtpbmQ8Q2FjaGU+Pjo6Z2V0RmFzdENhc2UoKTsKICAgICBpZiAoIWNhY2hlcykK
LSAgICAgICAgcmV0dXJuIHJlYWxsb2NhdGVTbG93Q2FzZU51bGxDYWNoZShoZWFwS2luZCwgb2Jq
ZWN0LCBuZXdTaXplKTsKKyAgICAgICAgcmV0dXJuIHRyeVJlYWxsb2NhdGVTbG93Q2FzZU51bGxD
YWNoZShoZWFwS2luZCwgb2JqZWN0LCBuZXdTaXplKTsKICAgICByZXR1cm4gY2FjaGVzLT5hdCht
YXBUb0FjdGl2ZUhlYXBLaW5kQWZ0ZXJFbnN1cmluZ0dpZ2FjYWdlKGhlYXBLaW5kKSkuYWxsb2Nh
dG9yKCkudHJ5UmVhbGxvY2F0ZShvYmplY3QsIG5ld1NpemUpOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL0RlYWxsb2NhdG9yLmNwcCBiL1NvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvRGVhbGxvY2F0b3IuY3BwCmluZGV4IDU1NmYzMjc5ZDUyYTI0M2ZmMGRiMmIzNGY1NWEz
YzBlYWY5MmQzMDMuLjU4Y2UzYTZhOTEwZjA1MzBlYzBkMTFhZThlZTM3YWI3OTM1MTMwM2UgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVhbGxvY2F0b3IuY3BwCisrKyBiL1Nv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVhbGxvY2F0b3IuY3BwCkBAIC0yNyw3ICsyNyw3IEBACiAj
aW5jbHVkZSAiQklubGluZS5oIgogI2luY2x1ZGUgIkNodW5rLmgiCiAjaW5jbHVkZSAiRGVhbGxv
Y2F0b3IuaCIKLSNpbmNsdWRlICJEZWJ1Z0hlYXAuaCIKKyNpbmNsdWRlICJFbnZpcm9ubWVudC5o
IgogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJPYmplY3QuaCIKICNpbmNsdWRlICJQZXJQ
cm9jZXNzLmgiCkBAIC0zOSwxMyArMzksOCBAQCBuYW1lc3BhY2UgYm1hbGxvYyB7CiAKIERlYWxs
b2NhdG9yOjpEZWFsbG9jYXRvcihIZWFwJiBoZWFwKQogICAgIDogbV9oZWFwKGhlYXApCi0gICAg
LCBtX2RlYnVnSGVhcChoZWFwLmRlYnVnSGVhcCgpKQogewotICAgIGlmIChtX2RlYnVnSGVhcCkg
ewotICAgICAgICAvLyBGaWxsIHRoZSBvYmplY3QgbG9nIGluIG9yZGVyIHRvIGRpc2FibGUgdGhl
IGZhc3QgcGF0aC4KLSAgICAgICAgd2hpbGUgKG1fb2JqZWN0TG9nLnNpemUoKSAhPSBtX29iamVj
dExvZy5jYXBhY2l0eSgpKQotICAgICAgICAgICAgbV9vYmplY3RMb2cucHVzaChudWxscHRyKTsK
LSAgICB9CisgICAgQkFTU0VSVCghUGVyUHJvY2VzczxFbnZpcm9ubWVudD46OmdldCgpLT5pc0Rl
YnVnSGVhcEVuYWJsZWQoKSk7CiB9CiAKIERlYWxsb2NhdG9yOjp+RGVhbGxvY2F0b3IoKQpAQCAt
NTUsOSArNTAsNiBAQCBEZWFsbG9jYXRvcjo6fkRlYWxsb2NhdG9yKCkKICAgICAKIHZvaWQgRGVh
bGxvY2F0b3I6OnNjYXZlbmdlKCkKIHsKLSAgICBpZiAobV9kZWJ1Z0hlYXApCi0gICAgICAgIHJl
dHVybjsKLQogICAgIHN0ZDo6dW5pcXVlX2xvY2s8TXV0ZXg+IGxvY2soSGVhcDo6bXV0ZXgoKSk7
CiAKICAgICBwcm9jZXNzT2JqZWN0TG9nKGxvY2spOwpAQCAtNzMsOSArNjUsNiBAQCB2b2lkIERl
YWxsb2NhdG9yOjpwcm9jZXNzT2JqZWN0TG9nKHN0ZDo6dW5pcXVlX2xvY2s8TXV0ZXg+JiBsb2Nr
KQogCiB2b2lkIERlYWxsb2NhdG9yOjpkZWFsbG9jYXRlU2xvd0Nhc2Uodm9pZCogb2JqZWN0KQog
ewotICAgIGlmIChtX2RlYnVnSGVhcCkKLSAgICAgICAgcmV0dXJuIG1fZGVidWdIZWFwLT5mcmVl
KG9iamVjdCk7Ci0KICAgICBpZiAoIW9iamVjdCkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0RlYWxsb2NhdG9yLmggYi9Tb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jL0RlYWxsb2NhdG9yLmgKaW5kZXggMzI1ZDFkZjUyNGVhMjhhNDNjYzVmNDRmMDlj
NmQwMTQxNDliYzIwOC4uMTM0MmM0Y2FmZGMwZjE0NTUyNjQxY2EyM2ExNGQ1MzU4ODA1NjUyMiAx
MDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWFsbG9jYXRvci5oCisrKyBiL1Nv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVhbGxvY2F0b3IuaApAQCAtMzMsNyArMzMsNiBAQAogCiBu
YW1lc3BhY2UgYm1hbGxvYyB7CiAKLWNsYXNzIERlYnVnSGVhcDsKIGNsYXNzIEhlYXA7CiBjbGFz
cyBNdXRleDsKIApAQCAtNTgsNyArNTcsNiBAQCBjbGFzcyBEZWFsbG9jYXRvciB7CiAgICAgSGVh
cCYgbV9oZWFwOwogICAgIEZpeGVkVmVjdG9yPHZvaWQqLCBkZWFsbG9jYXRvckxvZ0NhcGFjaXR5
PiBtX29iamVjdExvZzsKICAgICBMaW5lQ2FjaGUgbV9saW5lQ2FjaGU7IC8vIFRoZSBIZWFwIHJl
bW92ZXMgaXRlbXMgZnJvbSB0aGlzIGNhY2hlLgotICAgIERlYnVnSGVhcCogbV9kZWJ1Z0hlYXA7
CiB9OwogCiBpbmxpbmUgYm9vbCBEZWFsbG9jYXRvcjo6ZGVhbGxvY2F0ZUZhc3RDYXNlKHZvaWQq
IG9iamVjdCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>362451</attachid>
            <date>2019-02-19 16:26:18 -0800</date>
            <delta_ts>2019-02-19 17:24:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-194811-20190219162617.patch</filename>
            <type>text/plain</type>
            <size>13259</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQxNzY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9D
aGFuZ2VMb2cgYi9Tb3VyY2UvYm1hbGxvYy9DaGFuZ2VMb2cKaW5kZXggN2NlNjUwYWJhYTYxZjE5
YzkxNmFmNDdhZjE4OTEyYWM2NmE5NDY1Ny4uMTFlMWM3NjUyYjRmYmZhM2FiNjA3ODAzMDIxMDVl
MWFhZTQzNmU0ZCAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9ibWFsbG9jL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDE5LTAyLTE5ICBZdXN1
a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CisKKyAgICAgICAgW2JtYWxsb2NdIGJtYWxs
b2M6OkNhY2hlIHNob3VsZCBub3QgYmUgaW5zdGFudGlhdGVkIGlmIHdlIGFyZSB1c2luZyBzeXN0
ZW0gbWFsbG9jCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xOTQ4MTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBibWFsbG9jOjpDYWNoZSBpcyB2ZXJ5IGxhcmdlLiBJdCBpcyAxM0tCLiBTaW5jZSBpdCBleGlz
dHMgcGVyIEhlYXBLaW5kLCBpdCB0YWtlcyA0MEtCLgorICAgICAgICBCdXQgdGhpcyBpcyBtZWFu
aW5nbGVzcyBpZiB3ZSBhcmUgdW5kZXIgdGhlIHN5c3RlbSBtYWxsb2MgbW9kZSBieSB1c2luZyAi
TWFsbG9jPTEiLiBXZQorICAgICAgICBmb3VuZCB0aGF0IGl0IGNvbnRpbnVlcyB1c2luZyBzbyBt
dWNoIGRpcnR5IG1lbW9yeSByZWdpb24gZXZlbiB1bmRlciB0aGUgc3lzdGVtIG1hbGxvYyBtb2Rl
LgorICAgICAgICBUaGlzIHBhdGNoIGF2b2lkcyBpbnN0YW50aWF0aW9uIG9mIGJtYWxsb2M6OkNh
Y2hlIHVuZGVyIHRoZSBzeXN0ZW0gbWFsbG9jIG1vZGUuCisKKyAgICAgICAgKiBibWFsbG9jL0Fs
bG9jYXRvci5jcHA6CisgICAgICAgIChibWFsbG9jOjpBbGxvY2F0b3I6OkFsbG9jYXRvcik6Cisg
ICAgICAgIChibWFsbG9jOjpBbGxvY2F0b3I6OnRyeUFsbG9jYXRlKToKKyAgICAgICAgKGJtYWxs
b2M6OkFsbG9jYXRvcjo6YWxsb2NhdGVJbXBsKToKKyAgICAgICAgKGJtYWxsb2M6OkFsbG9jYXRv
cjo6cmVhbGxvY2F0ZUltcGwpOgorICAgICAgICAoYm1hbGxvYzo6QWxsb2NhdG9yOjphbGxvY2F0
ZVNsb3dDYXNlKToKKyAgICAgICAgQWxsb2NhdG9yIGlzIGEgcGVyIENhY2hlIG9iamVjdC4gU28g
d2Ugbm8gbG9uZ2VyIG5lZWQgdG8ga2VlcCBtX2RlYnVnSGVhcC4gSWYgZGVidWcgaGVhcCBpcyBl
bmFibGVkLAorICAgICAgICBBbGxvY2F0b3IgaXMgbmV2ZXIgY3JlYXRlZC4KKworICAgICAgICAq
IGJtYWxsb2MvQWxsb2NhdG9yLmg6CisgICAgICAgICogYm1hbGxvYy9DYWNoZS5jcHA6CisgICAg
ICAgIChibWFsbG9jOjpnZXRDYWNoZXMpOgorICAgICAgICAoYm1hbGxvYzo6Q2FjaGU6OkNhY2hl
KToKKyAgICAgICAgKGJtYWxsb2M6OkNhY2hlOjp0cnlBbGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hl
KToKKyAgICAgICAgKGJtYWxsb2M6OkNhY2hlOjphbGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hlKToK
KyAgICAgICAgKGJtYWxsb2M6OkNhY2hlOjpkZWFsbG9jYXRlU2xvd0Nhc2VOdWxsQ2FjaGUpOgor
ICAgICAgICAoYm1hbGxvYzo6Q2FjaGU6OnRyeVJlYWxsb2NhdGVTbG93Q2FzZU51bGxDYWNoZSk6
CisgICAgICAgIChibWFsbG9jOjpDYWNoZTo6cmVhbGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hlKToK
KyAgICAgICAgKiBibWFsbG9jL0NhY2hlLmg6CisgICAgICAgIChibWFsbG9jOjpDYWNoZTo6dHJ5
QWxsb2NhdGUpOgorICAgICAgICAoYm1hbGxvYzo6Q2FjaGU6OnRyeVJlYWxsb2NhdGUpOgorICAg
ICAgICBJZiB0aGUgZGVidWcgaGVhcCBtb2RlIGlzIGVuYWJsZWQsIHdlIGtlZXAgQ2FjaGU6Omdl
dEZhc3QoKSByZXR1cm5pbmcgbnVsbHB0ci4gQW5kIGluIHRoZSBzbG93IHBhdGggY2FzZSwgd2Ug
dXNlIGRlYnVnSGVhcC4KKyAgICAgICAgVGhpcyBtYWtlcyBibWFsbG9jIGZhc3QgcGF0aCBmYXN0
LCB3aGlsZSB3ZSBhdm9pZCBDYWNoZSBpbnN0YW50aWF0aW9uLgorCisgICAgICAgICogYm1hbGxv
Yy9EZWFsbG9jYXRvci5jcHA6CisgICAgICAgIChibWFsbG9jOjpEZWFsbG9jYXRvcjo6RGVhbGxv
Y2F0b3IpOgorICAgICAgICAoYm1hbGxvYzo6RGVhbGxvY2F0b3I6OnNjYXZlbmdlKToKKyAgICAg
ICAgKGJtYWxsb2M6OkRlYWxsb2NhdG9yOjpkZWFsbG9jYXRlU2xvd0Nhc2UpOgorICAgICAgICAq
IGJtYWxsb2MvRGVhbGxvY2F0b3IuaDoKKyAgICAgICAgRGl0dG8gZm9yIERlYWxsb2NhdG9yLgor
CiAyMDE5LTAyLTE1ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAg
ICAgW2JtYWxsb2NdIE5TQnVuZGxlLWJhc2VkIGFwcGxpY2F0aW9uIG5hbWUgY2hlY2sgc2hvdWxk
IGJlIGV4ZWN1dGVkIGFmdGVyIGRlYnVnLWhlYXAgZW52aXJvbm1lbnQgdmFyaWFibGUgY2hlY2sK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNwcCBiL1NvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNwcAppbmRleCA0ZmJkYjA5NjRhYjk4YWM2YmNl
M2MyMDYxODFjOWU3YTMxNDc3YTk2Li5jZmQwMWZlM2VkNmZkYThmNDQzMTcyMzk0ZjQ0ODE5NWYy
MzE2OWJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5jcHAK
KysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuY3BwCkBAIC0yNyw3ICsyNyw3
IEBACiAjaW5jbHVkZSAiQkFzc2VydC5oIgogI2luY2x1ZGUgIkNodW5rLmgiCiAjaW5jbHVkZSAi
RGVhbGxvY2F0b3IuaCIKLSNpbmNsdWRlICJEZWJ1Z0hlYXAuaCIKKyNpbmNsdWRlICJFbnZpcm9u
bWVudC5oIgogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJQZXJQcm9jZXNzLmgiCiAjaW5j
bHVkZSAiU2l6ZXMuaCIKQEAgLTM4LDkgKzM4LDkgQEAgbmFtZXNwYWNlIGJtYWxsb2MgewogCiBB
bGxvY2F0b3I6OkFsbG9jYXRvcihIZWFwJiBoZWFwLCBEZWFsbG9jYXRvciYgZGVhbGxvY2F0b3Ip
CiAgICAgOiBtX2hlYXAoaGVhcCkKLSAgICAsIG1fZGVidWdIZWFwKGhlYXAuZGVidWdIZWFwKCkp
CiAgICAgLCBtX2RlYWxsb2NhdG9yKGRlYWxsb2NhdG9yKQogeworICAgIEJBU1NFUlQoIVBlclBy
b2Nlc3M8RW52aXJvbm1lbnQ+OjpnZXQoKS0+aXNEZWJ1Z0hlYXBFbmFibGVkKCkpOwogICAgIGZv
ciAoc2l6ZV90IHNpemVDbGFzcyA9IDA7IHNpemVDbGFzcyA8IHNpemVDbGFzc0NvdW50OyArK3Np
emVDbGFzcykKICAgICAgICAgbV9idW1wQWxsb2NhdG9yc1tzaXplQ2xhc3NdLmluaXQob2JqZWN0
U2l6ZShzaXplQ2xhc3MpKTsKIH0KQEAgLTUyLDkgKzUyLDYgQEAgQWxsb2NhdG9yOjp+QWxsb2Nh
dG9yKCkKIAogdm9pZCogQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZShzaXplX3Qgc2l6ZSkKIHsKLSAg
ICBpZiAobV9kZWJ1Z0hlYXApCi0gICAgICAgIHJldHVybiBtX2RlYnVnSGVhcC0+bWFsbG9jKHNp
emUpOwotCiAgICAgaWYgKHNpemUgPD0gc21hbGxNYXgpCiAgICAgICAgIHJldHVybiBhbGxvY2F0
ZShzaXplKTsKIApAQCAtNzgsOSArNzUsNiBAQCB2b2lkKiBBbGxvY2F0b3I6OmFsbG9jYXRlSW1w
bChzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSwgYm9vbCBjcmFzaE9uRmFpbHVyZQogewog
ICAgIEJBU1NFUlQoaXNQb3dlck9mVHdvKGFsaWdubWVudCkpOwogCi0gICAgaWYgKG1fZGVidWdI
ZWFwKQotICAgICAgICByZXR1cm4gbV9kZWJ1Z0hlYXAtPm1lbWFsaWduKGFsaWdubWVudCwgc2l6
ZSwgY3Jhc2hPbkZhaWx1cmUpOwotCiAgICAgaWYgKCFzaXplKQogICAgICAgICBzaXplID0gYWxp
Z25tZW50OwogCkBAIC0xMDcsOSArMTAxLDYgQEAgdm9pZCogQWxsb2NhdG9yOjp0cnlSZWFsbG9j
YXRlKHZvaWQqIG9iamVjdCwgc2l6ZV90IG5ld1NpemUpCiAKIHZvaWQqIEFsbG9jYXRvcjo6cmVh
bGxvY2F0ZUltcGwodm9pZCogb2JqZWN0LCBzaXplX3QgbmV3U2l6ZSwgYm9vbCBjcmFzaE9uRmFp
bHVyZSkKIHsKLSAgICBpZiAobV9kZWJ1Z0hlYXApCi0gICAgICAgIHJldHVybiBtX2RlYnVnSGVh
cC0+cmVhbGxvYyhvYmplY3QsIG5ld1NpemUsIGNyYXNoT25GYWlsdXJlKTsKLQogICAgIHNpemVf
dCBvbGRTaXplID0gMDsKICAgICBzd2l0Y2ggKG9iamVjdFR5cGUobV9oZWFwLmtpbmQoKSwgb2Jq
ZWN0KSkgewogICAgIGNhc2UgT2JqZWN0VHlwZTo6U21hbGw6IHsKQEAgLTIwMCw5ICsxOTEsNiBA
QCBCTk9fSU5MSU5FIHZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGVMb2dTaXplQ2xhc3Moc2l6ZV90
IHNpemUpCiAKIHZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZShzaXplX3Qgc2l6ZSkK
IHsKLSAgICBpZiAobV9kZWJ1Z0hlYXApCi0gICAgICAgIHJldHVybiBtX2RlYnVnSGVhcC0+bWFs
bG9jKHNpemUpOwotCiAgICAgaWYgKHNpemUgPD0gbWFza1NpemVDbGFzc01heCkgewogICAgICAg
ICBzaXplX3Qgc2l6ZUNsYXNzID0gYm1hbGxvYzo6bWFza1NpemVDbGFzcyhzaXplKTsKICAgICAg
ICAgQnVtcEFsbG9jYXRvciYgYWxsb2NhdG9yID0gbV9idW1wQWxsb2NhdG9yc1tzaXplQ2xhc3Nd
OwpkaWZmIC0tZ2l0IGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuaCBiL1NvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmgKaW5kZXggN2M4OTRkZTliNWMyM2MzMjQxNTVk
YzRjYTc2MzVjODBhZjVjNWQ4ZC4uOTMzYWFlNmVkOGVhMGQ4YTc0MmVlYmRiYTRjZTlmMjFjYzUz
ZTc4MiAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuaAorKysg
Yi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5oCkBAIC0zMyw3ICszMyw2IEBACiBu
YW1lc3BhY2UgYm1hbGxvYyB7CiAKIGNsYXNzIERlYWxsb2NhdG9yOwotY2xhc3MgRGVidWdIZWFw
OwogY2xhc3MgSGVhcDsKIAogLy8gUGVyLWNhY2hlIG9iamVjdCBhbGxvY2F0b3IuCkBAIC02OSw3
ICs2OCw2IEBAIGNsYXNzIEFsbG9jYXRvciB7CiAgICAgc3RkOjphcnJheTxCdW1wUmFuZ2VDYWNo
ZSwgc2l6ZUNsYXNzQ291bnQ+IG1fYnVtcFJhbmdlQ2FjaGVzOwogCiAgICAgSGVhcCYgbV9oZWFw
OwotICAgIERlYnVnSGVhcCogbV9kZWJ1Z0hlYXA7CiAgICAgRGVhbGxvY2F0b3ImIG1fZGVhbGxv
Y2F0b3I7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0NhY2hlLmNw
cCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ2FjaGUuY3BwCmluZGV4IGM5N2I5MDk1ZmI2NzNi
N2Y3NDI0NzFmNjgxODY5Y2ZjNGMxYTkzNTMuLjUxODgzZmZmZDkzZGFkZDEyNjk2MWIxMGNmMTdk
MjE1ZmM5Mzg5NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ2FjaGUuY3Bw
CisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ2FjaGUuY3BwCkBAIC0yNSwxMSArMjUsMTUg
QEAKIAogI2luY2x1ZGUgIkJJbmxpbmUuaCIKICNpbmNsdWRlICJDYWNoZS5oIgorI2luY2x1ZGUg
IkRlYnVnSGVhcC5oIgorI2luY2x1ZGUgIkVudmlyb25tZW50LmgiCiAjaW5jbHVkZSAiSGVhcC5o
IgogI2luY2x1ZGUgIlBlclByb2Nlc3MuaCIKIAogbmFtZXNwYWNlIGJtYWxsb2MgewogCitzdGF0
aWMgRGVidWdIZWFwKiBkZWJ1Z0hlYXAgeyBudWxscHRyIH07CisKIHZvaWQgQ2FjaGU6OnNjYXZl
bmdlKEhlYXBLaW5kIGhlYXBLaW5kKQogewogICAgIFBlckhlYXBLaW5kPENhY2hlPiogY2FjaGVz
ID0gUGVyVGhyZWFkPFBlckhlYXBLaW5kPENhY2hlPj46OmdldEZhc3RDYXNlKCk7CkBAIC00Miwz
NSArNDYsNzkgQEAgdm9pZCBDYWNoZTo6c2NhdmVuZ2UoSGVhcEtpbmQgaGVhcEtpbmQpCiAgICAg
Y2FjaGVzLT5hdChoZWFwS2luZCkuZGVhbGxvY2F0b3IoKS5zY2F2ZW5nZSgpOwogfQogCitzdGF0
aWMgQklOTElORSBQZXJIZWFwS2luZDxDYWNoZT4qIGdldENhY2hlcygpCit7CisgICAgaWYgKGRl
YnVnSGVhcCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKFBlclByb2Nlc3M8RW52
aXJvbm1lbnQ+OjpnZXQoKS0+aXNEZWJ1Z0hlYXBFbmFibGVkKCkpIHsKKyAgICAgICAgZGVidWdI
ZWFwID0gUGVyUHJvY2VzczxEZWJ1Z0hlYXA+OjpnZXQoKTsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorICAgIHJldHVybiBQZXJUaHJlYWQ8UGVySGVhcEtpbmQ8Q2FjaGU+Pjo6Z2V0
U2xvd0Nhc2UoKTsKK30KKwogQ2FjaGU6OkNhY2hlKEhlYXBLaW5kIGhlYXBLaW5kKQogICAgIDog
bV9kZWFsbG9jYXRvcihQZXJQcm9jZXNzPFBlckhlYXBLaW5kPEhlYXA+Pjo6Z2V0KCktPmF0KGhl
YXBLaW5kKSkKICAgICAsIG1fYWxsb2NhdG9yKFBlclByb2Nlc3M8UGVySGVhcEtpbmQ8SGVhcD4+
OjpnZXQoKS0+YXQoaGVhcEtpbmQpLCBtX2RlYWxsb2NhdG9yKQogeworICAgIEJBU1NFUlQoIVBl
clByb2Nlc3M8RW52aXJvbm1lbnQ+OjpnZXQoKS0+aXNEZWJ1Z0hlYXBFbmFibGVkKCkpOwogfQog
CiBCTk9fSU5MSU5FIHZvaWQqIENhY2hlOjp0cnlBbGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hlKEhl
YXBLaW5kIGhlYXBLaW5kLCBzaXplX3Qgc2l6ZSkKIHsKLSAgICByZXR1cm4gUGVyVGhyZWFkPFBl
ckhlYXBLaW5kPENhY2hlPj46OmdldFNsb3dDYXNlKCktPmF0KG1hcFRvQWN0aXZlSGVhcEtpbmQo
aGVhcEtpbmQpKS5hbGxvY2F0b3IoKS50cnlBbGxvY2F0ZShzaXplKTsKKyAgICBpZiAoYXV0byog
Y2FjaGVzID0gZ2V0Q2FjaGVzKCkpCisgICAgICAgIHJldHVybiBjYWNoZXMtPmF0KG1hcFRvQWN0
aXZlSGVhcEtpbmQoaGVhcEtpbmQpKS5hbGxvY2F0b3IoKS50cnlBbGxvY2F0ZShzaXplKTsKKyAg
ICAvLyBGSVhNRTogRGVidWdIZWFwIGRvZXMgbm90IGhhdmUgdHJ5QWxsb2NhdGUgZmVhdHVyZS4K
KyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk0ODM3Cisg
ICAgcmV0dXJuIGRlYnVnSGVhcC0+bWFsbG9jKHNpemUpOwogfQogCiBCTk9fSU5MSU5FIHZvaWQq
IENhY2hlOjphbGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hlKEhlYXBLaW5kIGhlYXBLaW5kLCBzaXpl
X3Qgc2l6ZSkKIHsKLSAgICByZXR1cm4gUGVyVGhyZWFkPFBlckhlYXBLaW5kPENhY2hlPj46Omdl
dFNsb3dDYXNlKCktPmF0KG1hcFRvQWN0aXZlSGVhcEtpbmQoaGVhcEtpbmQpKS5hbGxvY2F0b3Io
KS5hbGxvY2F0ZShzaXplKTsKKyAgICBpZiAoYXV0byogY2FjaGVzID0gZ2V0Q2FjaGVzKCkpCisg
ICAgICAgIHJldHVybiBjYWNoZXMtPmF0KG1hcFRvQWN0aXZlSGVhcEtpbmQoaGVhcEtpbmQpKS5h
bGxvY2F0b3IoKS5hbGxvY2F0ZShzaXplKTsKKyAgICByZXR1cm4gZGVidWdIZWFwLT5tYWxsb2Mo
c2l6ZSk7Cit9CisKK0JOT19JTkxJTkUgdm9pZCogQ2FjaGU6OnRyeUFsbG9jYXRlU2xvd0Nhc2VO
dWxsQ2FjaGUoSGVhcEtpbmQgaGVhcEtpbmQsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXpl
KQoreworICAgIGlmIChhdXRvKiBjYWNoZXMgPSBnZXRDYWNoZXMoKSkKKyAgICAgICAgcmV0dXJu
IGNhY2hlcy0+YXQobWFwVG9BY3RpdmVIZWFwS2luZChoZWFwS2luZCkpLmFsbG9jYXRvcigpLnRy
eUFsbG9jYXRlKGFsaWdubWVudCwgc2l6ZSk7CisgICAgY29uc3RleHByIGJvb2wgY3Jhc2hPbkZh
aWx1cmUgPSBmYWxzZTsKKyAgICByZXR1cm4gZGVidWdIZWFwLT5tZW1hbGlnbihhbGlnbm1lbnQs
IHNpemUsIGNyYXNoT25GYWlsdXJlKTsKIH0KIAogQk5PX0lOTElORSB2b2lkKiBDYWNoZTo6YWxs
b2NhdGVTbG93Q2FzZU51bGxDYWNoZShIZWFwS2luZCBoZWFwS2luZCwgc2l6ZV90IGFsaWdubWVu
dCwgc2l6ZV90IHNpemUpCiB7Ci0gICAgcmV0dXJuIFBlclRocmVhZDxQZXJIZWFwS2luZDxDYWNo
ZT4+OjpnZXRTbG93Q2FzZSgpLT5hdChtYXBUb0FjdGl2ZUhlYXBLaW5kKGhlYXBLaW5kKSkuYWxs
b2NhdG9yKCkuYWxsb2NhdGUoYWxpZ25tZW50LCBzaXplKTsKKyAgICBpZiAoYXV0byogY2FjaGVz
ID0gZ2V0Q2FjaGVzKCkpCisgICAgICAgIHJldHVybiBjYWNoZXMtPmF0KG1hcFRvQWN0aXZlSGVh
cEtpbmQoaGVhcEtpbmQpKS5hbGxvY2F0b3IoKS5hbGxvY2F0ZShhbGlnbm1lbnQsIHNpemUpOwor
ICAgIGNvbnN0ZXhwciBib29sIGNyYXNoT25GYWlsdXJlID0gdHJ1ZTsKKyAgICByZXR1cm4gZGVi
dWdIZWFwLT5tZW1hbGlnbihhbGlnbm1lbnQsIHNpemUsIGNyYXNoT25GYWlsdXJlKTsKIH0KIAog
Qk5PX0lOTElORSB2b2lkIENhY2hlOjpkZWFsbG9jYXRlU2xvd0Nhc2VOdWxsQ2FjaGUoSGVhcEtp
bmQgaGVhcEtpbmQsIHZvaWQqIG9iamVjdCkKIHsKLSAgICBQZXJUaHJlYWQ8UGVySGVhcEtpbmQ8
Q2FjaGU+Pjo6Z2V0U2xvd0Nhc2UoKS0+YXQobWFwVG9BY3RpdmVIZWFwS2luZChoZWFwS2luZCkp
LmRlYWxsb2NhdG9yKCkuZGVhbGxvY2F0ZShvYmplY3QpOworICAgIGlmIChhdXRvKiBjYWNoZXMg
PSBnZXRDYWNoZXMoKSkgeworICAgICAgICBjYWNoZXMtPmF0KG1hcFRvQWN0aXZlSGVhcEtpbmQo
aGVhcEtpbmQpKS5kZWFsbG9jYXRvcigpLmRlYWxsb2NhdGUob2JqZWN0KTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICByZXR1cm4gZGVidWdIZWFwLT5mcmVlKG9iamVjdCk7Cit9CisKK0JO
T19JTkxJTkUgdm9pZCogQ2FjaGU6OnRyeVJlYWxsb2NhdGVTbG93Q2FzZU51bGxDYWNoZShIZWFw
S2luZCBoZWFwS2luZCwgdm9pZCogb2JqZWN0LCBzaXplX3QgbmV3U2l6ZSkKK3sKKyAgICBpZiAo
YXV0byogY2FjaGVzID0gZ2V0Q2FjaGVzKCkpCisgICAgICAgIHJldHVybiBjYWNoZXMtPmF0KG1h
cFRvQWN0aXZlSGVhcEtpbmQoaGVhcEtpbmQpKS5hbGxvY2F0b3IoKS50cnlSZWFsbG9jYXRlKG9i
amVjdCwgbmV3U2l6ZSk7CisgICAgY29uc3RleHByIGJvb2wgY3Jhc2hPbkZhaWx1cmUgPSBmYWxz
ZTsKKyAgICByZXR1cm4gZGVidWdIZWFwLT5yZWFsbG9jKG9iamVjdCwgbmV3U2l6ZSwgY3Jhc2hP
bkZhaWx1cmUpOwogfQogCiBCTk9fSU5MSU5FIHZvaWQqIENhY2hlOjpyZWFsbG9jYXRlU2xvd0Nh
c2VOdWxsQ2FjaGUoSGVhcEtpbmQgaGVhcEtpbmQsIHZvaWQqIG9iamVjdCwgc2l6ZV90IG5ld1Np
emUpCiB7Ci0gICAgcmV0dXJuIFBlclRocmVhZDxQZXJIZWFwS2luZDxDYWNoZT4+OjpnZXRTbG93
Q2FzZSgpLT5hdChtYXBUb0FjdGl2ZUhlYXBLaW5kKGhlYXBLaW5kKSkuYWxsb2NhdG9yKCkucmVh
bGxvY2F0ZShvYmplY3QsIG5ld1NpemUpOworICAgIGlmIChhdXRvKiBjYWNoZXMgPSBnZXRDYWNo
ZXMoKSkKKyAgICAgICAgcmV0dXJuIGNhY2hlcy0+YXQobWFwVG9BY3RpdmVIZWFwS2luZChoZWFw
S2luZCkpLmFsbG9jYXRvcigpLnJlYWxsb2NhdGUob2JqZWN0LCBuZXdTaXplKTsKKyAgICBjb25z
dGV4cHIgYm9vbCBjcmFzaE9uRmFpbHVyZSA9IHRydWU7CisgICAgcmV0dXJuIGRlYnVnSGVhcC0+
cmVhbGxvYyhvYmplY3QsIG5ld1NpemUsIGNyYXNoT25GYWlsdXJlKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgYm1hbGxvYwpkaWZmIC0tZ2l0IGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9DYWNoZS5o
IGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9DYWNoZS5oCmluZGV4IGZkZTdlMDllZDAzOTVkOGI3
MDE5OTRmYjg5OGRiOGMwYWEwMmM2YTYuLjlmNTI1YTdmY2Y0ZWE5ZDgwNjUzMWUxM2FiMGU1NWNl
NzY4Mjk2MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ2FjaGUuaAorKysg
Yi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0NhY2hlLmgKQEAgLTU2LDggKzU2LDEwIEBAIGNsYXNz
IENhY2hlIHsKIHByaXZhdGU6CiAgICAgQkVYUE9SVCBzdGF0aWMgdm9pZCogdHJ5QWxsb2NhdGVT
bG93Q2FzZU51bGxDYWNoZShIZWFwS2luZCwgc2l6ZV90KTsKICAgICBCRVhQT1JUIHN0YXRpYyB2
b2lkKiBhbGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hlKEhlYXBLaW5kLCBzaXplX3QpOworICAgIEJF
WFBPUlQgc3RhdGljIHZvaWQqIHRyeUFsbG9jYXRlU2xvd0Nhc2VOdWxsQ2FjaGUoSGVhcEtpbmQs
IHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCk7CiAgICAgQkVYUE9SVCBzdGF0aWMgdm9pZCogYWxs
b2NhdGVTbG93Q2FzZU51bGxDYWNoZShIZWFwS2luZCwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90
KTsKICAgICBCRVhQT1JUIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGVTbG93Q2FzZU51bGxDYWNoZShI
ZWFwS2luZCwgdm9pZCopOworICAgIEJFWFBPUlQgc3RhdGljIHZvaWQqIHRyeVJlYWxsb2NhdGVT
bG93Q2FzZU51bGxDYWNoZShIZWFwS2luZCwgdm9pZCosIHNpemVfdCk7CiAgICAgQkVYUE9SVCBz
dGF0aWMgdm9pZCogcmVhbGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hlKEhlYXBLaW5kLCB2b2lkKiwg
c2l6ZV90KTsKIAogICAgIERlYWxsb2NhdG9yIG1fZGVhbGxvY2F0b3I7CkBAIC04NCw3ICs4Niw3
IEBAIGlubGluZSB2b2lkKiBDYWNoZTo6dHJ5QWxsb2NhdGUoSGVhcEtpbmQgaGVhcEtpbmQsIHNp
emVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplCiB7CiAgICAgUGVySGVhcEtpbmQ8Q2FjaGU+KiBj
YWNoZXMgPSBQZXJUaHJlYWQ8UGVySGVhcEtpbmQ8Q2FjaGU+Pjo6Z2V0RmFzdENhc2UoKTsKICAg
ICBpZiAoIWNhY2hlcykKLSAgICAgICAgcmV0dXJuIGFsbG9jYXRlU2xvd0Nhc2VOdWxsQ2FjaGUo
aGVhcEtpbmQsIGFsaWdubWVudCwgc2l6ZSk7CisgICAgICAgIHJldHVybiB0cnlBbGxvY2F0ZVNs
b3dDYXNlTnVsbENhY2hlKGhlYXBLaW5kLCBhbGlnbm1lbnQsIHNpemUpOwogICAgIHJldHVybiBj
YWNoZXMtPmF0KG1hcFRvQWN0aXZlSGVhcEtpbmRBZnRlckVuc3VyaW5nR2lnYWNhZ2UoaGVhcEtp
bmQpKS5hbGxvY2F0b3IoKS50cnlBbGxvY2F0ZShhbGlnbm1lbnQsIHNpemUpOwogfQogCkBAIC0x
MDgsNyArMTEwLDcgQEAgaW5saW5lIHZvaWQqIENhY2hlOjp0cnlSZWFsbG9jYXRlKEhlYXBLaW5k
IGhlYXBLaW5kLCB2b2lkKiBvYmplY3QsIHNpemVfdCBuZXdTaXoKIHsKICAgICBQZXJIZWFwS2lu
ZDxDYWNoZT4qIGNhY2hlcyA9IFBlclRocmVhZDxQZXJIZWFwS2luZDxDYWNoZT4+OjpnZXRGYXN0
Q2FzZSgpOwogICAgIGlmICghY2FjaGVzKQotICAgICAgICByZXR1cm4gcmVhbGxvY2F0ZVNsb3dD
YXNlTnVsbENhY2hlKGhlYXBLaW5kLCBvYmplY3QsIG5ld1NpemUpOworICAgICAgICByZXR1cm4g
dHJ5UmVhbGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hlKGhlYXBLaW5kLCBvYmplY3QsIG5ld1NpemUp
OwogICAgIHJldHVybiBjYWNoZXMtPmF0KG1hcFRvQWN0aXZlSGVhcEtpbmRBZnRlckVuc3VyaW5n
R2lnYWNhZ2UoaGVhcEtpbmQpKS5hbGxvY2F0b3IoKS50cnlSZWFsbG9jYXRlKG9iamVjdCwgbmV3
U2l6ZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVhbGxvY2F0
b3IuY3BwIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWFsbG9jYXRvci5jcHAKaW5kZXggNTU2
ZjMyNzlkNTJhMjQzZmYwZGIyYjM0ZjU1YTNjMGVhZjkyZDMwMy4uNThjZTNhNmE5MTBmMDUzMGVj
MGQxMWFlOGVlMzdhYjc5MzUxMzAzZSAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9EZWFsbG9jYXRvci5jcHAKKysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWFsbG9jYXRv
ci5jcHAKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJCSW5saW5lLmgiCiAjaW5jbHVkZSAi
Q2h1bmsuaCIKICNpbmNsdWRlICJEZWFsbG9jYXRvci5oIgotI2luY2x1ZGUgIkRlYnVnSGVhcC5o
IgorI2luY2x1ZGUgIkVudmlyb25tZW50LmgiCiAjaW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUg
Ik9iamVjdC5oIgogI2luY2x1ZGUgIlBlclByb2Nlc3MuaCIKQEAgLTM5LDEzICszOSw4IEBAIG5h
bWVzcGFjZSBibWFsbG9jIHsKIAogRGVhbGxvY2F0b3I6OkRlYWxsb2NhdG9yKEhlYXAmIGhlYXAp
CiAgICAgOiBtX2hlYXAoaGVhcCkKLSAgICAsIG1fZGVidWdIZWFwKGhlYXAuZGVidWdIZWFwKCkp
CiB7Ci0gICAgaWYgKG1fZGVidWdIZWFwKSB7Ci0gICAgICAgIC8vIEZpbGwgdGhlIG9iamVjdCBs
b2cgaW4gb3JkZXIgdG8gZGlzYWJsZSB0aGUgZmFzdCBwYXRoLgotICAgICAgICB3aGlsZSAobV9v
YmplY3RMb2cuc2l6ZSgpICE9IG1fb2JqZWN0TG9nLmNhcGFjaXR5KCkpCi0gICAgICAgICAgICBt
X29iamVjdExvZy5wdXNoKG51bGxwdHIpOwotICAgIH0KKyAgICBCQVNTRVJUKCFQZXJQcm9jZXNz
PEVudmlyb25tZW50Pjo6Z2V0KCktPmlzRGVidWdIZWFwRW5hYmxlZCgpKTsKIH0KIAogRGVhbGxv
Y2F0b3I6On5EZWFsbG9jYXRvcigpCkBAIC01NSw5ICs1MCw2IEBAIERlYWxsb2NhdG9yOjp+RGVh
bGxvY2F0b3IoKQogICAgIAogdm9pZCBEZWFsbG9jYXRvcjo6c2NhdmVuZ2UoKQogewotICAgIGlm
IChtX2RlYnVnSGVhcCkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgc3RkOjp1bmlxdWVfbG9jazxN
dXRleD4gbG9jayhIZWFwOjptdXRleCgpKTsKIAogICAgIHByb2Nlc3NPYmplY3RMb2cobG9jayk7
CkBAIC03Myw5ICs2NSw2IEBAIHZvaWQgRGVhbGxvY2F0b3I6OnByb2Nlc3NPYmplY3RMb2coc3Rk
Ojp1bmlxdWVfbG9jazxNdXRleD4mIGxvY2spCiAKIHZvaWQgRGVhbGxvY2F0b3I6OmRlYWxsb2Nh
dGVTbG93Q2FzZSh2b2lkKiBvYmplY3QpCiB7Ci0gICAgaWYgKG1fZGVidWdIZWFwKQotICAgICAg
ICByZXR1cm4gbV9kZWJ1Z0hlYXAtPmZyZWUob2JqZWN0KTsKLQogICAgIGlmICghb2JqZWN0KQog
ICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVh
bGxvY2F0b3IuaCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVhbGxvY2F0b3IuaAppbmRleCAz
MjVkMWRmNTI0ZWEyOGE0M2NjNWY0NGYwOWM2ZDAxNDE0OWJjMjA4Li4xMzQyYzRjYWZkYzBmMTQ1
NTI2NDFjYTIzYTE0ZDUzNTg4MDU2NTIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL0RlYWxsb2NhdG9yLmgKKysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWFsbG9jYXRv
ci5oCkBAIC0zMyw3ICszMyw2IEBACiAKIG5hbWVzcGFjZSBibWFsbG9jIHsKIAotY2xhc3MgRGVi
dWdIZWFwOwogY2xhc3MgSGVhcDsKIGNsYXNzIE11dGV4OwogCkBAIC01OCw3ICs1Nyw2IEBAIGNs
YXNzIERlYWxsb2NhdG9yIHsKICAgICBIZWFwJiBtX2hlYXA7CiAgICAgRml4ZWRWZWN0b3I8dm9p
ZCosIGRlYWxsb2NhdG9yTG9nQ2FwYWNpdHk+IG1fb2JqZWN0TG9nOwogICAgIExpbmVDYWNoZSBt
X2xpbmVDYWNoZTsgLy8gVGhlIEhlYXAgcmVtb3ZlcyBpdGVtcyBmcm9tIHRoaXMgY2FjaGUuCi0g
ICAgRGVidWdIZWFwKiBtX2RlYnVnSGVhcDsKIH07CiAKIGlubGluZSBib29sIERlYWxsb2NhdG9y
OjpkZWFsbG9jYXRlRmFzdENhc2Uodm9pZCogb2JqZWN0KQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>362459</attachid>
            <date>2019-02-19 17:24:48 -0800</date>
            <delta_ts>2019-02-19 17:32:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-194811-20190219172447.patch</filename>
            <type>text/plain</type>
            <size>12854</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQxNzY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9D
aGFuZ2VMb2cgYi9Tb3VyY2UvYm1hbGxvYy9DaGFuZ2VMb2cKaW5kZXggN2NlNjUwYWJhYTYxZjE5
YzkxNmFmNDdhZjE4OTEyYWM2NmE5NDY1Ny4uOWE0NmQ0MDFiNWExZTU5NzM2NjVhYzNkZWNlN2Qw
YThiOTljY2ZkNiAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9ibWFsbG9jL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDE5LTAyLTE5ICBZdXN1
a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CisKKyAgICAgICAgW2JtYWxsb2NdIGJtYWxs
b2M6OkNhY2hlIHNob3VsZCBub3QgYmUgaW5zdGFudGlhdGVkIGlmIHdlIGFyZSB1c2luZyBzeXN0
ZW0gbWFsbG9jCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xOTQ4MTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBibWFsbG9jOjpDYWNoZSBpcyB2ZXJ5IGxhcmdlLiBJdCBpcyAxM0tCLiBTaW5jZSBpdCBleGlz
dHMgcGVyIEhlYXBLaW5kLCBpdCB0YWtlcyA0MEtCLgorICAgICAgICBCdXQgdGhpcyBpcyBtZWFu
aW5nbGVzcyBpZiB3ZSBhcmUgdW5kZXIgdGhlIHN5c3RlbSBtYWxsb2MgbW9kZSBieSB1c2luZyAi
TWFsbG9jPTEiLiBXZQorICAgICAgICBmb3VuZCB0aGF0IGl0IGNvbnRpbnVlcyB1c2luZyBzbyBt
dWNoIGRpcnR5IG1lbW9yeSByZWdpb24gZXZlbiB1bmRlciB0aGUgc3lzdGVtIG1hbGxvYyBtb2Rl
LgorICAgICAgICBUaGlzIHBhdGNoIGF2b2lkcyBpbnN0YW50aWF0aW9uIG9mIGJtYWxsb2M6OkNh
Y2hlIHVuZGVyIHRoZSBzeXN0ZW0gbWFsbG9jIG1vZGUuCisKKyAgICAgICAgKiBibWFsbG9jL0Fs
bG9jYXRvci5jcHA6CisgICAgICAgIChibWFsbG9jOjpBbGxvY2F0b3I6OkFsbG9jYXRvcik6Cisg
ICAgICAgIChibWFsbG9jOjpBbGxvY2F0b3I6OnRyeUFsbG9jYXRlKToKKyAgICAgICAgKGJtYWxs
b2M6OkFsbG9jYXRvcjo6YWxsb2NhdGVJbXBsKToKKyAgICAgICAgKGJtYWxsb2M6OkFsbG9jYXRv
cjo6cmVhbGxvY2F0ZUltcGwpOgorICAgICAgICAoYm1hbGxvYzo6QWxsb2NhdG9yOjphbGxvY2F0
ZVNsb3dDYXNlKToKKyAgICAgICAgQWxsb2NhdG9yIGlzIGEgcGVyIENhY2hlIG9iamVjdC4gU28g
d2Ugbm8gbG9uZ2VyIG5lZWQgdG8ga2VlcCBtX2RlYnVnSGVhcC4gSWYgZGVidWcgaGVhcCBpcyBl
bmFibGVkLAorICAgICAgICBBbGxvY2F0b3IgaXMgbmV2ZXIgY3JlYXRlZC4KKworICAgICAgICAq
IGJtYWxsb2MvQWxsb2NhdG9yLmg6CisgICAgICAgICogYm1hbGxvYy9DYWNoZS5jcHA6CisgICAg
ICAgIChibWFsbG9jOjpkZWJ1Z0hlYXApOgorICAgICAgICAoYm1hbGxvYzo6Q2FjaGU6OkNhY2hl
KToKKyAgICAgICAgKGJtYWxsb2M6OkNhY2hlOjp0cnlBbGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hl
KToKKyAgICAgICAgKGJtYWxsb2M6OkNhY2hlOjphbGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hlKToK
KyAgICAgICAgKGJtYWxsb2M6OkNhY2hlOjpkZWFsbG9jYXRlU2xvd0Nhc2VOdWxsQ2FjaGUpOgor
ICAgICAgICAoYm1hbGxvYzo6Q2FjaGU6OnRyeVJlYWxsb2NhdGVTbG93Q2FzZU51bGxDYWNoZSk6
CisgICAgICAgIChibWFsbG9jOjpDYWNoZTo6cmVhbGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hlKToK
KyAgICAgICAgKiBibWFsbG9jL0NhY2hlLmg6CisgICAgICAgIChibWFsbG9jOjpDYWNoZTo6dHJ5
QWxsb2NhdGUpOgorICAgICAgICAoYm1hbGxvYzo6Q2FjaGU6OnRyeVJlYWxsb2NhdGUpOgorICAg
ICAgICBJZiB0aGUgZGVidWcgaGVhcCBtb2RlIGlzIGVuYWJsZWQsIHdlIGtlZXAgQ2FjaGU6Omdl
dEZhc3QoKSByZXR1cm5pbmcgbnVsbHB0ci4gQW5kIGluIHRoZSBzbG93IHBhdGggY2FzZSwgd2Ug
dXNlIGRlYnVnSGVhcC4KKyAgICAgICAgVGhpcyBtYWtlcyBibWFsbG9jIGZhc3QgcGF0aCBmYXN0
LCB3aGlsZSB3ZSBhdm9pZCBDYWNoZSBpbnN0YW50aWF0aW9uLgorCisgICAgICAgICogYm1hbGxv
Yy9EZWFsbG9jYXRvci5jcHA6CisgICAgICAgIChibWFsbG9jOjpEZWFsbG9jYXRvcjo6RGVhbGxv
Y2F0b3IpOgorICAgICAgICAoYm1hbGxvYzo6RGVhbGxvY2F0b3I6OnNjYXZlbmdlKToKKyAgICAg
ICAgKGJtYWxsb2M6OkRlYWxsb2NhdG9yOjpkZWFsbG9jYXRlU2xvd0Nhc2UpOgorICAgICAgICAq
IGJtYWxsb2MvRGVhbGxvY2F0b3IuaDoKKyAgICAgICAgRGl0dG8gZm9yIERlYWxsb2NhdG9yLgor
CiAyMDE5LTAyLTE1ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAg
ICAgW2JtYWxsb2NdIE5TQnVuZGxlLWJhc2VkIGFwcGxpY2F0aW9uIG5hbWUgY2hlY2sgc2hvdWxk
IGJlIGV4ZWN1dGVkIGFmdGVyIGRlYnVnLWhlYXAgZW52aXJvbm1lbnQgdmFyaWFibGUgY2hlY2sK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNwcCBiL1NvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNwcAppbmRleCA0ZmJkYjA5NjRhYjk4YWM2YmNl
M2MyMDYxODFjOWU3YTMxNDc3YTk2Li5jZmQwMWZlM2VkNmZkYThmNDQzMTcyMzk0ZjQ0ODE5NWYy
MzE2OWJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5jcHAK
KysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuY3BwCkBAIC0yNyw3ICsyNyw3
IEBACiAjaW5jbHVkZSAiQkFzc2VydC5oIgogI2luY2x1ZGUgIkNodW5rLmgiCiAjaW5jbHVkZSAi
RGVhbGxvY2F0b3IuaCIKLSNpbmNsdWRlICJEZWJ1Z0hlYXAuaCIKKyNpbmNsdWRlICJFbnZpcm9u
bWVudC5oIgogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJQZXJQcm9jZXNzLmgiCiAjaW5j
bHVkZSAiU2l6ZXMuaCIKQEAgLTM4LDkgKzM4LDkgQEAgbmFtZXNwYWNlIGJtYWxsb2MgewogCiBB
bGxvY2F0b3I6OkFsbG9jYXRvcihIZWFwJiBoZWFwLCBEZWFsbG9jYXRvciYgZGVhbGxvY2F0b3Ip
CiAgICAgOiBtX2hlYXAoaGVhcCkKLSAgICAsIG1fZGVidWdIZWFwKGhlYXAuZGVidWdIZWFwKCkp
CiAgICAgLCBtX2RlYWxsb2NhdG9yKGRlYWxsb2NhdG9yKQogeworICAgIEJBU1NFUlQoIVBlclBy
b2Nlc3M8RW52aXJvbm1lbnQ+OjpnZXQoKS0+aXNEZWJ1Z0hlYXBFbmFibGVkKCkpOwogICAgIGZv
ciAoc2l6ZV90IHNpemVDbGFzcyA9IDA7IHNpemVDbGFzcyA8IHNpemVDbGFzc0NvdW50OyArK3Np
emVDbGFzcykKICAgICAgICAgbV9idW1wQWxsb2NhdG9yc1tzaXplQ2xhc3NdLmluaXQob2JqZWN0
U2l6ZShzaXplQ2xhc3MpKTsKIH0KQEAgLTUyLDkgKzUyLDYgQEAgQWxsb2NhdG9yOjp+QWxsb2Nh
dG9yKCkKIAogdm9pZCogQWxsb2NhdG9yOjp0cnlBbGxvY2F0ZShzaXplX3Qgc2l6ZSkKIHsKLSAg
ICBpZiAobV9kZWJ1Z0hlYXApCi0gICAgICAgIHJldHVybiBtX2RlYnVnSGVhcC0+bWFsbG9jKHNp
emUpOwotCiAgICAgaWYgKHNpemUgPD0gc21hbGxNYXgpCiAgICAgICAgIHJldHVybiBhbGxvY2F0
ZShzaXplKTsKIApAQCAtNzgsOSArNzUsNiBAQCB2b2lkKiBBbGxvY2F0b3I6OmFsbG9jYXRlSW1w
bChzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSwgYm9vbCBjcmFzaE9uRmFpbHVyZQogewog
ICAgIEJBU1NFUlQoaXNQb3dlck9mVHdvKGFsaWdubWVudCkpOwogCi0gICAgaWYgKG1fZGVidWdI
ZWFwKQotICAgICAgICByZXR1cm4gbV9kZWJ1Z0hlYXAtPm1lbWFsaWduKGFsaWdubWVudCwgc2l6
ZSwgY3Jhc2hPbkZhaWx1cmUpOwotCiAgICAgaWYgKCFzaXplKQogICAgICAgICBzaXplID0gYWxp
Z25tZW50OwogCkBAIC0xMDcsOSArMTAxLDYgQEAgdm9pZCogQWxsb2NhdG9yOjp0cnlSZWFsbG9j
YXRlKHZvaWQqIG9iamVjdCwgc2l6ZV90IG5ld1NpemUpCiAKIHZvaWQqIEFsbG9jYXRvcjo6cmVh
bGxvY2F0ZUltcGwodm9pZCogb2JqZWN0LCBzaXplX3QgbmV3U2l6ZSwgYm9vbCBjcmFzaE9uRmFp
bHVyZSkKIHsKLSAgICBpZiAobV9kZWJ1Z0hlYXApCi0gICAgICAgIHJldHVybiBtX2RlYnVnSGVh
cC0+cmVhbGxvYyhvYmplY3QsIG5ld1NpemUsIGNyYXNoT25GYWlsdXJlKTsKLQogICAgIHNpemVf
dCBvbGRTaXplID0gMDsKICAgICBzd2l0Y2ggKG9iamVjdFR5cGUobV9oZWFwLmtpbmQoKSwgb2Jq
ZWN0KSkgewogICAgIGNhc2UgT2JqZWN0VHlwZTo6U21hbGw6IHsKQEAgLTIwMCw5ICsxOTEsNiBA
QCBCTk9fSU5MSU5FIHZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGVMb2dTaXplQ2xhc3Moc2l6ZV90
IHNpemUpCiAKIHZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGVTbG93Q2FzZShzaXplX3Qgc2l6ZSkK
IHsKLSAgICBpZiAobV9kZWJ1Z0hlYXApCi0gICAgICAgIHJldHVybiBtX2RlYnVnSGVhcC0+bWFs
bG9jKHNpemUpOwotCiAgICAgaWYgKHNpemUgPD0gbWFza1NpemVDbGFzc01heCkgewogICAgICAg
ICBzaXplX3Qgc2l6ZUNsYXNzID0gYm1hbGxvYzo6bWFza1NpemVDbGFzcyhzaXplKTsKICAgICAg
ICAgQnVtcEFsbG9jYXRvciYgYWxsb2NhdG9yID0gbV9idW1wQWxsb2NhdG9yc1tzaXplQ2xhc3Nd
OwpkaWZmIC0tZ2l0IGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuaCBiL1NvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmgKaW5kZXggN2M4OTRkZTliNWMyM2MzMjQxNTVk
YzRjYTc2MzVjODBhZjVjNWQ4ZC4uOTMzYWFlNmVkOGVhMGQ4YTc0MmVlYmRiYTRjZTlmMjFjYzUz
ZTc4MiAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuaAorKysg
Yi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5oCkBAIC0zMyw3ICszMyw2IEBACiBu
YW1lc3BhY2UgYm1hbGxvYyB7CiAKIGNsYXNzIERlYWxsb2NhdG9yOwotY2xhc3MgRGVidWdIZWFw
OwogY2xhc3MgSGVhcDsKIAogLy8gUGVyLWNhY2hlIG9iamVjdCBhbGxvY2F0b3IuCkBAIC02OSw3
ICs2OCw2IEBAIGNsYXNzIEFsbG9jYXRvciB7CiAgICAgc3RkOjphcnJheTxCdW1wUmFuZ2VDYWNo
ZSwgc2l6ZUNsYXNzQ291bnQ+IG1fYnVtcFJhbmdlQ2FjaGVzOwogCiAgICAgSGVhcCYgbV9oZWFw
OwotICAgIERlYnVnSGVhcCogbV9kZWJ1Z0hlYXA7CiAgICAgRGVhbGxvY2F0b3ImIG1fZGVhbGxv
Y2F0b3I7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0NhY2hlLmNw
cCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ2FjaGUuY3BwCmluZGV4IGM5N2I5MDk1ZmI2NzNi
N2Y3NDI0NzFmNjgxODY5Y2ZjNGMxYTkzNTMuLjI5YWQxMzA5ODY2ZjEyZDgwOWY2ZjEyMWQ5ZjY1
MTFlZDczNTM2MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ2FjaGUuY3Bw
CisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ2FjaGUuY3BwCkBAIC0yNSwxMSArMjUsMTUg
QEAKIAogI2luY2x1ZGUgIkJJbmxpbmUuaCIKICNpbmNsdWRlICJDYWNoZS5oIgorI2luY2x1ZGUg
IkRlYnVnSGVhcC5oIgorI2luY2x1ZGUgIkVudmlyb25tZW50LmgiCiAjaW5jbHVkZSAiSGVhcC5o
IgogI2luY2x1ZGUgIlBlclByb2Nlc3MuaCIKIAogbmFtZXNwYWNlIGJtYWxsb2MgewogCitzdGF0
aWMgRGVidWdIZWFwKiBkZWJ1Z0hlYXBDYWNoZSB7IG51bGxwdHIgfTsKKwogdm9pZCBDYWNoZTo6
c2NhdmVuZ2UoSGVhcEtpbmQgaGVhcEtpbmQpCiB7CiAgICAgUGVySGVhcEtpbmQ8Q2FjaGU+KiBj
YWNoZXMgPSBQZXJUaHJlYWQ8UGVySGVhcEtpbmQ8Q2FjaGU+Pjo6Z2V0RmFzdENhc2UoKTsKQEAg
LTQyLDM0ICs0Niw4MiBAQCB2b2lkIENhY2hlOjpzY2F2ZW5nZShIZWFwS2luZCBoZWFwS2luZCkK
ICAgICBjYWNoZXMtPmF0KGhlYXBLaW5kKS5kZWFsbG9jYXRvcigpLnNjYXZlbmdlKCk7CiB9CiAK
K3N0YXRpYyBCSU5MSU5FIERlYnVnSGVhcCogZGVidWdIZWFwKCkKK3sKKyAgICBpZiAoZGVidWdI
ZWFwQ2FjaGUpCisgICAgICAgIHJldHVybiBkZWJ1Z0hlYXBDYWNoZTsKKyAgICBpZiAoUGVyUHJv
Y2VzczxFbnZpcm9ubWVudD46OmdldCgpLT5pc0RlYnVnSGVhcEVuYWJsZWQoKSkgeworICAgICAg
ICBkZWJ1Z0hlYXBDYWNoZSA9IFBlclByb2Nlc3M8RGVidWdIZWFwPjo6Z2V0KCk7CisgICAgICAg
IHJldHVybiBkZWJ1Z0hlYXBDYWNoZTsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisK
IENhY2hlOjpDYWNoZShIZWFwS2luZCBoZWFwS2luZCkKICAgICA6IG1fZGVhbGxvY2F0b3IoUGVy
UHJvY2VzczxQZXJIZWFwS2luZDxIZWFwPj46OmdldCgpLT5hdChoZWFwS2luZCkpCiAgICAgLCBt
X2FsbG9jYXRvcihQZXJQcm9jZXNzPFBlckhlYXBLaW5kPEhlYXA+Pjo6Z2V0KCktPmF0KGhlYXBL
aW5kKSwgbV9kZWFsbG9jYXRvcikKIHsKKyAgICBCQVNTRVJUKCFQZXJQcm9jZXNzPEVudmlyb25t
ZW50Pjo6Z2V0KCktPmlzRGVidWdIZWFwRW5hYmxlZCgpKTsKIH0KIAogQk5PX0lOTElORSB2b2lk
KiBDYWNoZTo6dHJ5QWxsb2NhdGVTbG93Q2FzZU51bGxDYWNoZShIZWFwS2luZCBoZWFwS2luZCwg
c2l6ZV90IHNpemUpCiB7CisgICAgLy8gRklYTUU6IERlYnVnSGVhcCBkb2VzIG5vdCBoYXZlIHRy
eUFsbG9jYXRlIGZlYXR1cmUuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE5NDgzNworICAgIGlmIChhdXRvKiBoZWFwID0gZGVidWdIZWFwKCkpCisgICAg
ICAgIHJldHVybiBoZWFwLT5tYWxsb2Moc2l6ZSk7CiAgICAgcmV0dXJuIFBlclRocmVhZDxQZXJI
ZWFwS2luZDxDYWNoZT4+OjpnZXRTbG93Q2FzZSgpLT5hdChtYXBUb0FjdGl2ZUhlYXBLaW5kKGhl
YXBLaW5kKSkuYWxsb2NhdG9yKCkudHJ5QWxsb2NhdGUoc2l6ZSk7CiB9CiAKIEJOT19JTkxJTkUg
dm9pZCogQ2FjaGU6OmFsbG9jYXRlU2xvd0Nhc2VOdWxsQ2FjaGUoSGVhcEtpbmQgaGVhcEtpbmQs
IHNpemVfdCBzaXplKQogeworICAgIGlmIChhdXRvKiBoZWFwID0gZGVidWdIZWFwKCkpCisgICAg
ICAgIHJldHVybiBoZWFwLT5tYWxsb2Moc2l6ZSk7CiAgICAgcmV0dXJuIFBlclRocmVhZDxQZXJI
ZWFwS2luZDxDYWNoZT4+OjpnZXRTbG93Q2FzZSgpLT5hdChtYXBUb0FjdGl2ZUhlYXBLaW5kKGhl
YXBLaW5kKSkuYWxsb2NhdG9yKCkuYWxsb2NhdGUoc2l6ZSk7CiB9CiAKK0JOT19JTkxJTkUgdm9p
ZCogQ2FjaGU6OnRyeUFsbG9jYXRlU2xvd0Nhc2VOdWxsQ2FjaGUoSGVhcEtpbmQgaGVhcEtpbmQs
IHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQoreworICAgIGlmIChhdXRvKiBoZWFwID0g
ZGVidWdIZWFwKCkpIHsKKyAgICAgICAgY29uc3RleHByIGJvb2wgY3Jhc2hPbkZhaWx1cmUgPSBm
YWxzZTsKKyAgICAgICAgcmV0dXJuIGhlYXAtPm1lbWFsaWduKGFsaWdubWVudCwgc2l6ZSwgY3Jh
c2hPbkZhaWx1cmUpOworICAgIH0KKyAgICByZXR1cm4gUGVyVGhyZWFkPFBlckhlYXBLaW5kPENh
Y2hlPj46OmdldFNsb3dDYXNlKCktPmF0KG1hcFRvQWN0aXZlSGVhcEtpbmQoaGVhcEtpbmQpKS5h
bGxvY2F0b3IoKS50cnlBbGxvY2F0ZShhbGlnbm1lbnQsIHNpemUpOworfQorCiBCTk9fSU5MSU5F
IHZvaWQqIENhY2hlOjphbGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hlKEhlYXBLaW5kIGhlYXBLaW5k
LCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKIHsKKyAgICBpZiAoYXV0byogaGVhcCA9
IGRlYnVnSGVhcCgpKSB7CisgICAgICAgIGNvbnN0ZXhwciBib29sIGNyYXNoT25GYWlsdXJlID0g
dHJ1ZTsKKyAgICAgICAgcmV0dXJuIGhlYXAtPm1lbWFsaWduKGFsaWdubWVudCwgc2l6ZSwgY3Jh
c2hPbkZhaWx1cmUpOworICAgIH0KICAgICByZXR1cm4gUGVyVGhyZWFkPFBlckhlYXBLaW5kPENh
Y2hlPj46OmdldFNsb3dDYXNlKCktPmF0KG1hcFRvQWN0aXZlSGVhcEtpbmQoaGVhcEtpbmQpKS5h
bGxvY2F0b3IoKS5hbGxvY2F0ZShhbGlnbm1lbnQsIHNpemUpOwogfQogCiBCTk9fSU5MSU5FIHZv
aWQgQ2FjaGU6OmRlYWxsb2NhdGVTbG93Q2FzZU51bGxDYWNoZShIZWFwS2luZCBoZWFwS2luZCwg
dm9pZCogb2JqZWN0KQogeworICAgIGlmIChhdXRvKiBoZWFwID0gZGVidWdIZWFwKCkpIHsKKyAg
ICAgICAgaGVhcC0+ZnJlZShvYmplY3QpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIFBl
clRocmVhZDxQZXJIZWFwS2luZDxDYWNoZT4+OjpnZXRTbG93Q2FzZSgpLT5hdChtYXBUb0FjdGl2
ZUhlYXBLaW5kKGhlYXBLaW5kKSkuZGVhbGxvY2F0b3IoKS5kZWFsbG9jYXRlKG9iamVjdCk7CiB9
CiAKK0JOT19JTkxJTkUgdm9pZCogQ2FjaGU6OnRyeVJlYWxsb2NhdGVTbG93Q2FzZU51bGxDYWNo
ZShIZWFwS2luZCBoZWFwS2luZCwgdm9pZCogb2JqZWN0LCBzaXplX3QgbmV3U2l6ZSkKK3sKKyAg
ICBpZiAoYXV0byogaGVhcCA9IGRlYnVnSGVhcCgpKSB7CisgICAgICAgIGNvbnN0ZXhwciBib29s
IGNyYXNoT25GYWlsdXJlID0gZmFsc2U7CisgICAgICAgIHJldHVybiBoZWFwLT5yZWFsbG9jKG9i
amVjdCwgbmV3U2l6ZSwgY3Jhc2hPbkZhaWx1cmUpOworICAgIH0KKyAgICByZXR1cm4gUGVyVGhy
ZWFkPFBlckhlYXBLaW5kPENhY2hlPj46OmdldFNsb3dDYXNlKCktPmF0KG1hcFRvQWN0aXZlSGVh
cEtpbmQoaGVhcEtpbmQpKS5hbGxvY2F0b3IoKS50cnlSZWFsbG9jYXRlKG9iamVjdCwgbmV3U2l6
ZSk7Cit9CisKIEJOT19JTkxJTkUgdm9pZCogQ2FjaGU6OnJlYWxsb2NhdGVTbG93Q2FzZU51bGxD
YWNoZShIZWFwS2luZCBoZWFwS2luZCwgdm9pZCogb2JqZWN0LCBzaXplX3QgbmV3U2l6ZSkKIHsK
KyAgICBpZiAoYXV0byogaGVhcCA9IGRlYnVnSGVhcCgpKSB7CisgICAgICAgIGNvbnN0ZXhwciBi
b29sIGNyYXNoT25GYWlsdXJlID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGhlYXAtPnJlYWxsb2Mo
b2JqZWN0LCBuZXdTaXplLCBjcmFzaE9uRmFpbHVyZSk7CisgICAgfQogICAgIHJldHVybiBQZXJU
aHJlYWQ8UGVySGVhcEtpbmQ8Q2FjaGU+Pjo6Z2V0U2xvd0Nhc2UoKS0+YXQobWFwVG9BY3RpdmVI
ZWFwS2luZChoZWFwS2luZCkpLmFsbG9jYXRvcigpLnJlYWxsb2NhdGUob2JqZWN0LCBuZXdTaXpl
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9DYWNoZS5oIGIvU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9DYWNoZS5oCmluZGV4IGZkZTdlMDllZDAzOTVkOGI3MDE5OTRm
Yjg5OGRiOGMwYWEwMmM2YTYuLjlmNTI1YTdmY2Y0ZWE5ZDgwNjUzMWUxM2FiMGU1NWNlNzY4Mjk2
MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ2FjaGUuaAorKysgYi9Tb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL0NhY2hlLmgKQEAgLTU2LDggKzU2LDEwIEBAIGNsYXNzIENhY2hl
IHsKIHByaXZhdGU6CiAgICAgQkVYUE9SVCBzdGF0aWMgdm9pZCogdHJ5QWxsb2NhdGVTbG93Q2Fz
ZU51bGxDYWNoZShIZWFwS2luZCwgc2l6ZV90KTsKICAgICBCRVhQT1JUIHN0YXRpYyB2b2lkKiBh
bGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hlKEhlYXBLaW5kLCBzaXplX3QpOworICAgIEJFWFBPUlQg
c3RhdGljIHZvaWQqIHRyeUFsbG9jYXRlU2xvd0Nhc2VOdWxsQ2FjaGUoSGVhcEtpbmQsIHNpemVf
dCBhbGlnbm1lbnQsIHNpemVfdCk7CiAgICAgQkVYUE9SVCBzdGF0aWMgdm9pZCogYWxsb2NhdGVT
bG93Q2FzZU51bGxDYWNoZShIZWFwS2luZCwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90KTsKICAg
ICBCRVhQT1JUIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGVTbG93Q2FzZU51bGxDYWNoZShIZWFwS2lu
ZCwgdm9pZCopOworICAgIEJFWFBPUlQgc3RhdGljIHZvaWQqIHRyeVJlYWxsb2NhdGVTbG93Q2Fz
ZU51bGxDYWNoZShIZWFwS2luZCwgdm9pZCosIHNpemVfdCk7CiAgICAgQkVYUE9SVCBzdGF0aWMg
dm9pZCogcmVhbGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hlKEhlYXBLaW5kLCB2b2lkKiwgc2l6ZV90
KTsKIAogICAgIERlYWxsb2NhdG9yIG1fZGVhbGxvY2F0b3I7CkBAIC04NCw3ICs4Niw3IEBAIGlu
bGluZSB2b2lkKiBDYWNoZTo6dHJ5QWxsb2NhdGUoSGVhcEtpbmQgaGVhcEtpbmQsIHNpemVfdCBh
bGlnbm1lbnQsIHNpemVfdCBzaXplCiB7CiAgICAgUGVySGVhcEtpbmQ8Q2FjaGU+KiBjYWNoZXMg
PSBQZXJUaHJlYWQ8UGVySGVhcEtpbmQ8Q2FjaGU+Pjo6Z2V0RmFzdENhc2UoKTsKICAgICBpZiAo
IWNhY2hlcykKLSAgICAgICAgcmV0dXJuIGFsbG9jYXRlU2xvd0Nhc2VOdWxsQ2FjaGUoaGVhcEtp
bmQsIGFsaWdubWVudCwgc2l6ZSk7CisgICAgICAgIHJldHVybiB0cnlBbGxvY2F0ZVNsb3dDYXNl
TnVsbENhY2hlKGhlYXBLaW5kLCBhbGlnbm1lbnQsIHNpemUpOwogICAgIHJldHVybiBjYWNoZXMt
PmF0KG1hcFRvQWN0aXZlSGVhcEtpbmRBZnRlckVuc3VyaW5nR2lnYWNhZ2UoaGVhcEtpbmQpKS5h
bGxvY2F0b3IoKS50cnlBbGxvY2F0ZShhbGlnbm1lbnQsIHNpemUpOwogfQogCkBAIC0xMDgsNyAr
MTEwLDcgQEAgaW5saW5lIHZvaWQqIENhY2hlOjp0cnlSZWFsbG9jYXRlKEhlYXBLaW5kIGhlYXBL
aW5kLCB2b2lkKiBvYmplY3QsIHNpemVfdCBuZXdTaXoKIHsKICAgICBQZXJIZWFwS2luZDxDYWNo
ZT4qIGNhY2hlcyA9IFBlclRocmVhZDxQZXJIZWFwS2luZDxDYWNoZT4+OjpnZXRGYXN0Q2FzZSgp
OwogICAgIGlmICghY2FjaGVzKQotICAgICAgICByZXR1cm4gcmVhbGxvY2F0ZVNsb3dDYXNlTnVs
bENhY2hlKGhlYXBLaW5kLCBvYmplY3QsIG5ld1NpemUpOworICAgICAgICByZXR1cm4gdHJ5UmVh
bGxvY2F0ZVNsb3dDYXNlTnVsbENhY2hlKGhlYXBLaW5kLCBvYmplY3QsIG5ld1NpemUpOwogICAg
IHJldHVybiBjYWNoZXMtPmF0KG1hcFRvQWN0aXZlSGVhcEtpbmRBZnRlckVuc3VyaW5nR2lnYWNh
Z2UoaGVhcEtpbmQpKS5hbGxvY2F0b3IoKS50cnlSZWFsbG9jYXRlKG9iamVjdCwgbmV3U2l6ZSk7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVhbGxvY2F0b3IuY3Bw
IGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWFsbG9jYXRvci5jcHAKaW5kZXggNTU2ZjMyNzlk
NTJhMjQzZmYwZGIyYjM0ZjU1YTNjMGVhZjkyZDMwMy4uNThjZTNhNmE5MTBmMDUzMGVjMGQxMWFl
OGVlMzdhYjc5MzUxMzAzZSAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWFs
bG9jYXRvci5jcHAKKysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWFsbG9jYXRvci5jcHAK
QEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJCSW5saW5lLmgiCiAjaW5jbHVkZSAiQ2h1bmsu
aCIKICNpbmNsdWRlICJEZWFsbG9jYXRvci5oIgotI2luY2x1ZGUgIkRlYnVnSGVhcC5oIgorI2lu
Y2x1ZGUgIkVudmlyb25tZW50LmgiCiAjaW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIk9iamVj
dC5oIgogI2luY2x1ZGUgIlBlclByb2Nlc3MuaCIKQEAgLTM5LDEzICszOSw4IEBAIG5hbWVzcGFj
ZSBibWFsbG9jIHsKIAogRGVhbGxvY2F0b3I6OkRlYWxsb2NhdG9yKEhlYXAmIGhlYXApCiAgICAg
OiBtX2hlYXAoaGVhcCkKLSAgICAsIG1fZGVidWdIZWFwKGhlYXAuZGVidWdIZWFwKCkpCiB7Ci0g
ICAgaWYgKG1fZGVidWdIZWFwKSB7Ci0gICAgICAgIC8vIEZpbGwgdGhlIG9iamVjdCBsb2cgaW4g
b3JkZXIgdG8gZGlzYWJsZSB0aGUgZmFzdCBwYXRoLgotICAgICAgICB3aGlsZSAobV9vYmplY3RM
b2cuc2l6ZSgpICE9IG1fb2JqZWN0TG9nLmNhcGFjaXR5KCkpCi0gICAgICAgICAgICBtX29iamVj
dExvZy5wdXNoKG51bGxwdHIpOwotICAgIH0KKyAgICBCQVNTRVJUKCFQZXJQcm9jZXNzPEVudmly
b25tZW50Pjo6Z2V0KCktPmlzRGVidWdIZWFwRW5hYmxlZCgpKTsKIH0KIAogRGVhbGxvY2F0b3I6
On5EZWFsbG9jYXRvcigpCkBAIC01NSw5ICs1MCw2IEBAIERlYWxsb2NhdG9yOjp+RGVhbGxvY2F0
b3IoKQogICAgIAogdm9pZCBEZWFsbG9jYXRvcjo6c2NhdmVuZ2UoKQogewotICAgIGlmIChtX2Rl
YnVnSGVhcCkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgc3RkOjp1bmlxdWVfbG9jazxNdXRleD4g
bG9jayhIZWFwOjptdXRleCgpKTsKIAogICAgIHByb2Nlc3NPYmplY3RMb2cobG9jayk7CkBAIC03
Myw5ICs2NSw2IEBAIHZvaWQgRGVhbGxvY2F0b3I6OnByb2Nlc3NPYmplY3RMb2coc3RkOjp1bmlx
dWVfbG9jazxNdXRleD4mIGxvY2spCiAKIHZvaWQgRGVhbGxvY2F0b3I6OmRlYWxsb2NhdGVTbG93
Q2FzZSh2b2lkKiBvYmplY3QpCiB7Ci0gICAgaWYgKG1fZGVidWdIZWFwKQotICAgICAgICByZXR1
cm4gbV9kZWJ1Z0hlYXAtPmZyZWUob2JqZWN0KTsKLQogICAgIGlmICghb2JqZWN0KQogICAgICAg
ICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVhbGxvY2F0
b3IuaCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVhbGxvY2F0b3IuaAppbmRleCAzMjVkMWRm
NTI0ZWEyOGE0M2NjNWY0NGYwOWM2ZDAxNDE0OWJjMjA4Li4xMzQyYzRjYWZkYzBmMTQ1NTI2NDFj
YTIzYTE0ZDUzNTg4MDU2NTIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0Rl
YWxsb2NhdG9yLmgKKysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWFsbG9jYXRvci5oCkBA
IC0zMyw3ICszMyw2IEBACiAKIG5hbWVzcGFjZSBibWFsbG9jIHsKIAotY2xhc3MgRGVidWdIZWFw
OwogY2xhc3MgSGVhcDsKIGNsYXNzIE11dGV4OwogCkBAIC01OCw3ICs1Nyw2IEBAIGNsYXNzIERl
YWxsb2NhdG9yIHsKICAgICBIZWFwJiBtX2hlYXA7CiAgICAgRml4ZWRWZWN0b3I8dm9pZCosIGRl
YWxsb2NhdG9yTG9nQ2FwYWNpdHk+IG1fb2JqZWN0TG9nOwogICAgIExpbmVDYWNoZSBtX2xpbmVD
YWNoZTsgLy8gVGhlIEhlYXAgcmVtb3ZlcyBpdGVtcyBmcm9tIHRoaXMgY2FjaGUuCi0gICAgRGVi
dWdIZWFwKiBtX2RlYnVnSGVhcDsKIH07CiAKIGlubGluZSBib29sIERlYWxsb2NhdG9yOjpkZWFs
bG9jYXRlRmFzdENhc2Uodm9pZCogb2JqZWN0KQo=
</data>
<flag name="review"
          id="379088"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
      

    </bug>

</bugzilla>