<?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>237060</bug_id>
          
          <creation_ts>2022-02-22 14:05:06 -0800</creation_ts>
          <short_desc>Do not trigger didFail during FileReaderLoader Destruction</short_desc>
          <delta_ts>2022-02-25 16:29:08 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore JavaScript</component>
          <version>Other</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brandon">brandonstewart</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ashvayka</cc>
    
    <cc>cdumez</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1844868</commentid>
    <comment_count>0</comment_count>
    <who name="Brandon">brandonstewart</who>
    <bug_when>2022-02-22 14:05:06 -0800</bug_when>
    <thetext>&lt;rdar://89239935&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844875</commentid>
    <comment_count>1</comment_count>
      <attachid>452903</attachid>
    <who name="Brandon">brandonstewart</who>
    <bug_when>2022-02-22 14:37:16 -0800</bug_when>
    <thetext>Created attachment 452903
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844877</commentid>
    <comment_count>2</comment_count>
      <attachid>452903</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2022-02-22 14:43:21 -0800</bug_when>
    <thetext>Comment on attachment 452903
Patch

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

&gt; Source/WebCore/bindings/js/ReadableStreamDefaultController.h:50
&gt; +    JSDOMGlobalObject&amp; getGlobalObject() const 

Per WebKit code style guidelines, this should be named just &quot;globalObject&quot;.

&gt; Source/WebCore/fileapi/Blob.cpp:291
&gt; +                context-&gt;eventLoop().queueTask(TaskSource::InternalAsyncTask, [this, code] {

Should we also pass `protectedThis = Ref { *this }`?

&gt; Source/WebCore/fileapi/FileReaderLoader.h:92
&gt; +    ScriptExecutionContext* getScriptExecutionContext() const { return m_scriptExecutionContext; }

Ditto: &quot;scriptExecutionContext&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844882</commentid>
    <comment_count>3</comment_count>
      <attachid>452903</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2022-02-22 14:50:43 -0800</bug_when>
    <thetext>Comment on attachment 452903
Patch

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

&gt; Source/WebCore/fileapi/FileReaderLoader.cpp:85
&gt; +    m_scriptExecutionContext = scriptExecutionContext;

It seems like DocumentThreadableLoader / WorkerThreadableLoader already keep a reference to context. Is there any way we can avoid adding another one?

Maybe we take context from ReadableStreamDefaultController::globalObject()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844884</commentid>
    <comment_count>4</comment_count>
      <attachid>452903</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-02-22 14:52:46 -0800</bug_when>
    <thetext>Comment on attachment 452903
Patch

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

&gt; Source/WebCore/ChangeLog:10
&gt; +        Queue throwing an exception when destroying a blob object.
&gt; +        Also, ensure that if we are destroying a vm we skip this step
&gt; +        as it will try to allocate memory, which is not allowed during a sweep.

This is not quite correct.  Let&apos;s replace this with:
&quot;BlobStreamSource::didFail() may be called from GC sweep.  Hence, we cannot throw an exception synchronously from there as this may result in object allocation (which is not allowed during sweep).  Instead we will enqueue a task to do the the throw later.  Additionally, if didFail() is called during VM shut down, then we skip the enqueuing of the task as the task queue may already have shut down.

&gt; Source/WebCore/fileapi/Blob.cpp:284
&gt; +            // During VM destruction we do not want to raise a dom exception
&gt; +            // as this will trigger an allocation, which is not allowed as we
&gt; +            // will be performing a sweep at that time.

This is not quite correct.  Let&apos;s replace this with:

&quot;This function can be called doing Blob destruction, which in turn is called by GC sweep.  Since we cannot allocated objects while sweeping, we need to defer the call to error() which will allocate an exception object, by queueing a task.  Additionally, if this is being called during VM shut down, the task queue may already destructed.  So, we will skip the enqueuing of this task if we&apos;re in the midst of VM shut down.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844887</commentid>
    <comment_count>5</comment_count>
      <attachid>452903</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2022-02-22 14:55:56 -0800</bug_when>
    <thetext>Comment on attachment 452903
Patch

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

&gt; Source/WebCore/fileapi/Blob.cpp:289
&gt; +            auto&amp; heap = globalObject.vm().heap;
&gt; +
&gt; +            if (!heap.isShuttingDown()) {

Let&apos;s add VM::isShuttingDown() getter and use it instead of touching heap directly here.
Heap and VM can become different after global GC. So for now, VM::isShuttingDown() implementation should be `return heap.isShuttingDown()`.
But we should avoid touching heap directly here.

&gt; Source/WebCore/fileapi/Blob.cpp:290
&gt; +                auto* context = m_loader-&gt;getScriptExecutionContext();

I think there is no guarantee that ScriptExecutionContext* is already destroyed. Is it ensured that this is still valid?

&gt; Source/WebCore/fileapi/FileReaderLoader.h:127
&gt; +    ScriptExecutionContext* m_scriptExecutionContext;

I think we cannot have this raw pointer since we have no mechanism to make this nullptr when ScriptExecutionContext is destroyed. Is this correct?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844888</commentid>
    <comment_count>6</comment_count>
      <attachid>452903</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-02-22 14:56:20 -0800</bug_when>
    <thetext>Comment on attachment 452903
Patch

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

&gt;&gt; Source/WebCore/fileapi/Blob.cpp:284
&gt;&gt; +            // will be performing a sweep at that time.
&gt; 
&gt; This is not quite correct.  Let&apos;s replace this with:
&gt; 
&gt; &quot;This function can be called doing Blob destruction, which in turn is called by GC sweep.  Since we cannot allocated objects while sweeping, we need to defer the call to error() which will allocate an exception object, by queueing a task.  Additionally, if this is being called during VM shut down, the task queue may already destructed.  So, we will skip the enqueuing of this task if we&apos;re in the midst of VM shut down.&quot;

Hmmm, I wrote this blurb before the one in the ChangeLog.  I think the ChangeLog one is more concise (and doesn&apos;t run on).  Maybe just use that here instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844898</commentid>
    <comment_count>7</comment_count>
      <attachid>452903</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-02-22 15:06:33 -0800</bug_when>
    <thetext>Comment on attachment 452903
Patch

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

&gt;&gt; Source/WebCore/fileapi/Blob.cpp:289
&gt;&gt; +            if (!heap.isShuttingDown()) {
&gt; 
&gt; Let&apos;s add VM::isShuttingDown() getter and use it instead of touching heap directly here.
&gt; Heap and VM can become different after global GC. So for now, VM::isShuttingDown() implementation should be `return heap.isShuttingDown()`.
&gt; But we should avoid touching heap directly here.

Yeah, sorry about that: I told Brandon that he doesn&apos;t have to do this because I wasn&apos;t sure that the VM method should be called because the period of time for which Heap shut down flag is only a subset of the period of time during VM shut down, nor whether we do need to make a distinction between the two.  But on second thought, I suppose calling it `VM::isShuttingDown()` is appropriate for now.  We can always change its implementation later if we need to redefine it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845162</commentid>
    <comment_count>8</comment_count>
      <attachid>452987</attachid>
    <who name="Brandon">brandonstewart</who>
    <bug_when>2022-02-23 09:06:20 -0800</bug_when>
    <thetext>Created attachment 452987
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845166</commentid>
    <comment_count>9</comment_count>
    <who name="Brandon">brandonstewart</who>
    <bug_when>2022-02-23 09:23:57 -0800</bug_when>
    <thetext>The new patch should address reviewer comments from yesterday.


@Yusuke

I added a new variable m_shuttingDown that gets set when we enter vm destructor instead of calling out to the heap.

Would you be good with this implementation?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845192</commentid>
    <comment_count>10</comment_count>
      <attachid>452987</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-02-23 10:00:29 -0800</bug_when>
    <thetext>Comment on attachment 452987
Patch

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

&gt; Source/WebCore/ChangeLog:10
&gt; +        Instead, we will enqueue a task to do the the throw later. Additionally, if didFail() is called during 

typo: &quot;the the&quot;

&gt; Source/WebCore/ChangeLog:11
&gt; +        VM shut down, then we skip the enqueuing of the task as the task queue may already have shut down.

nit: &quot;may have already&quot; instead of &quot;may already have&quot;?

&gt; Source/WebCore/fileapi/Blob.cpp:292
&gt; +                context-&gt;eventLoop().queueTask(TaskSource::InternalAsyncTask, [this, protectedThis = Ref { *this }, code] {

The fact that we&apos;re needing to ref `this` here feels wrong because we&apos;re calling this from the destructor.  Why do we need to move the exception into m_exception if the object is already being destructed, granted, that didFail() may be called from places not in the destruction path.  This hints that this Blob code is itself not aware of what it&apos;s doing.  Let&apos;s get input from a WebCore engineer on this to determine if this is actually correct to do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845204</commentid>
    <comment_count>11</comment_count>
      <attachid>452987</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-23 10:18:02 -0800</bug_when>
    <thetext>Comment on attachment 452987
Patch

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

&gt; Source/JavaScriptCore/runtime/VM.cpp:422
&gt; +    setShuttingDown(true);

setIsShuttingDown()

&gt; Source/JavaScriptCore/runtime/VM.h:292
&gt; +    bool shuttingDown() const { return m_shuttingDown; }

Per WebKit coding style, booleans need to start with a prefix, I think this should be:
bool isShuttingDown() const { return m_isShuttingDown; }

&gt; Source/JavaScriptCore/runtime/VM.h:293
&gt; +    void setShuttingDown(bool value) { m_shuttingDown = value; } 

I don&apos;t think we need the boolean parameter, this could be setIsShuttingDown() or markAsShuttingDown(). Once you&apos;re shutting down, I don&apos;t think there is any coming back to running, is there?

&gt; Source/WebCore/fileapi/Blob.cpp:290
&gt; +            if (!vm.shuttingDown()) {

In WebKit, we prefer early returns than nesting. This should be:
if (vm.shuttingDown())
    return;

But also, I don&apos;t see how this is scalable. There are tons of functions in WebCore that end up running JS (by throwing exceptions or firing events). How is this didFail() function any different? Surely, we cannot expect EVERY dom function to check this flag. We would need a better choke point. Maybe in the bindings function that actually ends up firing the event or throwing the exception? There should really not be much JSC logic inside WebCore/DOM implementation.

&gt;&gt; Source/WebCore/fileapi/Blob.cpp:292
&gt;&gt; +                context-&gt;eventLoop().queueTask(TaskSource::InternalAsyncTask, [this, protectedThis = Ref { *this }, code] {
&gt; 
&gt; The fact that we&apos;re needing to ref `this` here feels wrong because we&apos;re calling this from the destructor.  Why do we need to move the exception into m_exception if the object is already being destructed, granted, that didFail() may be called from places not in the destruction path.  This hints that this Blob code is itself not aware of what it&apos;s doing.  Let&apos;s get input from a WebCore engineer on this to determine if this is actually correct to do.

Blob is an ActiveDOMObject, we should probably call queueTaskKeepingObjectAlive() from ActiveDOMObject base class?

queueTaskKeepingObjectAlive(*this, TaskSource::InternalAsyncTask, [this, code] {
  // ...
});

Note that you wouldn&apos;t need to capture protectedThis then since queueTaskKeepingObjectAlive does this for you (in addition to keeping the JS wrapper alive).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845206</commentid>
    <comment_count>12</comment_count>
      <attachid>452987</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-23 10:21:20 -0800</bug_when>
    <thetext>Comment on attachment 452987
Patch

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

&gt;&gt;&gt; Source/WebCore/fileapi/Blob.cpp:292
&gt;&gt;&gt; +                context-&gt;eventLoop().queueTask(TaskSource::InternalAsyncTask, [this, protectedThis = Ref { *this }, code] {
&gt;&gt; 
&gt;&gt; The fact that we&apos;re needing to ref `this` here feels wrong because we&apos;re calling this from the destructor.  Why do we need to move the exception into m_exception if the object is already being destructed, granted, that didFail() may be called from places not in the destruction path.  This hints that this Blob code is itself not aware of what it&apos;s doing.  Let&apos;s get input from a WebCore engineer on this to determine if this is actually correct to do.
&gt; 
&gt; Blob is an ActiveDOMObject, we should probably call queueTaskKeepingObjectAlive() from ActiveDOMObject base class?
&gt; 
&gt; queueTaskKeepingObjectAlive(*this, TaskSource::InternalAsyncTask, [this, code] {
&gt;   // ...
&gt; });
&gt; 
&gt; Note that you wouldn&apos;t need to capture protectedThis then since queueTaskKeepingObjectAlive does this for you (in addition to keeping the JS wrapper alive).

Oh, I missed Mark&apos;s comment about this function getting called from the destructor. Protecting |this| here is definitely wrong then. Calling queueTaskKeepingObjectAlive() would be wrong too.

I&apos;ll need to see the call stack to try and suggest something better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845215</commentid>
    <comment_count>13</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2022-02-23 10:34:16 -0800</bug_when>
    <thetext>IIUC, BlobStreamSource gets destroyed as part of GC and its file loader will get destroyed, which will call didFail.
Would it be possible to cancel the load in BlobStreamSource destructor if the load is not nullptr?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845216</commentid>
    <comment_count>14</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2022-02-23 10:35:24 -0800</bug_when>
    <thetext>If that is fixing the issue, we might want to add an ASSERT in FileReaderLoader destructor to ensure that it is not live at destruction time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845217</commentid>
    <comment_count>15</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-02-23 10:36:19 -0800</bug_when>
    <thetext>(In reply to youenn fablet from comment #14)
&gt; If that is fixing the issue, we might want to add an ASSERT in
&gt; FileReaderLoader destructor to ensure that it is not live at destruction
&gt; time.

This sounds like the right thing to do to me (but I don&apos;t know the devil in the details).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845220</commentid>
    <comment_count>16</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-02-23 10:37:16 -0800</bug_when>
    <thetext>(In reply to youenn fablet from comment #13)
&gt; IIUC, BlobStreamSource gets destroyed as part of GC and its file loader will
&gt; get destroyed, which will call didFail.
&gt; Would it be possible to cancel the load in BlobStreamSource destructor if
&gt; the load is not nullptr?

Oops, my previous comment:

&quot;This sounds like the right thing to do to me (but I don&apos;t know the devil in the details).&quot;

... was actually meant to reply to this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845227</commentid>
    <comment_count>17</comment_count>
      <attachid>452987</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-02-23 10:58:00 -0800</bug_when>
    <thetext>Comment on attachment 452987
Patch

We&apos;re pretty sure this is not the right direction for the fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845305</commentid>
    <comment_count>18</comment_count>
      <attachid>453025</attachid>
    <who name="Brandon">brandonstewart</who>
    <bug_when>2022-02-23 13:59:02 -0800</bug_when>
    <thetext>Created attachment 453025
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845306</commentid>
    <comment_count>19</comment_count>
      <attachid>453025</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-02-23 14:03:43 -0800</bug_when>
    <thetext>Comment on attachment 453025
Patch

Can we construct a test for this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1846217</commentid>
    <comment_count>20</comment_count>
    <who name="Brandon">brandonstewart</who>
    <bug_when>2022-02-25 15:41:01 -0800</bug_when>
    <thetext>Was unable to reproduce the failing test in editing-word-with-marker-2.html for iOS Simulator locally, and it does not appear related to my patch.

Appears to be crashing consistently in the CIs.
https://results.webkit.org/?suite=layout-tests&amp;test=editing%2Fspelling%2Fediting-word-with-marker-2.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1846233</commentid>
    <comment_count>21</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-02-25 16:29:02 -0800</bug_when>
    <thetext>Committed r290537 (247815@main): &lt;https://commits.webkit.org/247815@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 453025.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452903</attachid>
            <date>2022-02-22 14:37:16 -0800</date>
            <delta_ts>2022-02-23 09:06:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237060-20220222143715.patch</filename>
            <type>text/plain</type>
            <size>6027</size>
            <attacher name="Brandon">brandonstewart</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwMjQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTRhMzc3MmNkM2E2MjI1
MDZkMTY5NzY0Y2VjNDNjZjJhZjE3Yzc4Yi4uYmExMzljMGY5MGY4YWFmZGUyYjFjMDQxNWRlYjIx
YjA5ZWJhOTI2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDIyLTAyLTIyICBCcmFu
ZG9uIFN0ZXdhcnQgIDxicmFuZG9uc3Rld2FydEBhcHBsZS5jb20+CisKKyAgICAgICAgUXVldWUg
dGhyb3dpbmcgZXhjZXB0aW9uIG9mIGJsb2Igb2JqZWN0cyBkdXJpbmcgZGVzdHJ1Y3Rpb24KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzA2MAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFF1ZXVlIHRocm93
aW5nIGFuIGV4Y2VwdGlvbiB3aGVuIGRlc3Ryb3lpbmcgYSBibG9iIG9iamVjdC4KKyAgICAgICAg
QWxzbywgZW5zdXJlIHRoYXQgaWYgd2UgYXJlIGRlc3Ryb3lpbmcgYSB2bSB3ZSBza2lwIHRoaXMg
c3RlcAorICAgICAgICBhcyBpdCB3aWxsIHRyeSB0byBhbGxvY2F0ZSBtZW1vcnksIHdoaWNoIGlz
IG5vdCBhbGxvd2VkIGR1cmluZyBhIHN3ZWVwLgorCisgICAgICAgICogYmluZGluZ3MvanMvUmVh
ZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5oOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFi
bGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcjo6Z2V0R2xvYmFsT2JqZWN0IGNvbnN0KToKKyAgICAg
ICAgKiBmaWxlYXBpL0Jsb2IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6c3RyZWFtKToK
KyAgICAgICAgKiBmaWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsZVJlYWRlckxvYWRlcjo6c3RhcnQpOgorICAgICAgICAqIGZpbGVhcGkvRmlsZVJlYWRl
ckxvYWRlci5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlckxvYWRlcjo6Z2V0U2NyaXB0
RXhlY3V0aW9uQ29udGV4dCBjb25zdCk6CisKIDIwMjItMDItMjEgIEFsYW4gQnVqdGFzICA8emFs
YW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtJRkNdW0ludGVncmF0aW9uXSBUYWtlIHZlcnRpY2Fs
LXJsIHdyaXRpbmcgbW9kZSB2YWx1ZSBpbnRvIGFjY291bnQgd2hlbiBjb252ZXJ0aW5nIHZpc3Vh
bCBtYXJnaW4vYm9yZGVyL3BhZGRpbmcgdmFsdWUgdG8gbG9naWNhbApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5o
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJv
bGxlci5oCmluZGV4IDg4NGMwYTlhYzc3M2M5MzUzYTM0ZDBkNzZkODAyODMwYmNiYTExYzAuLjE0
NTY2Y2YzNzU0M2U5ZWNjNTA4ZDBkZGQ0NWY1OWFkMWM4NjNiZGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1JlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250
cm9sbGVyLmgKQEAgLTMwLDYgKzMwLDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiSlNE
T01Db252ZXJ0QnVmZmVyU291cmNlLmgiCisjaW5jbHVkZSAiSlNET01HbG9iYWxPYmplY3QuaCIK
ICNpbmNsdWRlICJKU1JlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuaCIKICNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9KU0NKU1ZhbHVlLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SlNDSlNWYWx1ZUlubGluZXMuaD4KQEAgLTQ2LDYgKzQ3LDEzIEBAIHB1YmxpYzoKICAgICBib29s
IGVucXVldWUoUmVmUHRyPEpTQzo6QXJyYXlCdWZmZXI+JiYpOwogICAgIGJvb2wgZW5xdWV1ZShK
U0M6OkpTVmFsdWUpOwogICAgIHZvaWQgZXJyb3IoY29uc3QgRXhjZXB0aW9uJik7CisgICAgSlNE
T01HbG9iYWxPYmplY3QmIGdldEdsb2JhbE9iamVjdCgpIGNvbnN0IAorICAgIHsgIAorICAgICAg
ICBBU1NFUlQobV9qc0NvbnRyb2xsZXIpOworICAgICAgICBBU1NFUlQobV9qc0NvbnRyb2xsZXIt
Pmdsb2JhbE9iamVjdCgpKTsKKyAgICAgICAgcmV0dXJuICpzdGF0aWNfY2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KG1fanNDb250cm9sbGVyLT5nbG9iYWxPYmplY3QoKSk7CisgICAgfQorCiAgICAg
dm9pZCBjbG9zZSgpOwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmls
ZWFwaS9CbG9iLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5jcHAKaW5kZXggZjYx
NGExZWNkMzE3MjBiNDVlODdlYzYxZDg5YzQwOGU4YjgyM2QzNy4uZjc1NTZmZWQ0NDFmYThlNzll
NTNlM2YxOWE0OGYzYzIwZmM1NGI5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFw
aS9CbG9iLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2IuY3BwCkBAIC0zNSw2
ICszNSw3IEBACiAjaW5jbHVkZSAiQmxvYkxvYWRlci5oIgogI2luY2x1ZGUgIkJsb2JQYXJ0Lmgi
CiAjaW5jbHVkZSAiQmxvYlVSTC5oIgorI2luY2x1ZGUgIkV2ZW50TG9vcC5oIgogI2luY2x1ZGUg
IkZpbGUuaCIKICNpbmNsdWRlICJKU0RPTVByb21pc2VEZWZlcnJlZC5oIgogI2luY2x1ZGUgIlBv
bGljeUNvbnRhaW5lci5oIgpAQCAtNDIsNiArNDMsNyBAQAogI2luY2x1ZGUgIlJlYWRhYmxlU3Ry
ZWFtU291cmNlLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1
ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgIlRhc2tTb3VyY2UuaCIKICNpbmNsdWRlICJU
aHJlYWRhYmxlQmxvYlJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMu
aD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KQEAgLTI3NywxMiArMjc5LDI0IEBA
IEV4Y2VwdGlvbk9yPFJlZjxSZWFkYWJsZVN0cmVhbT4+IEJsb2I6OnN0cmVhbSgpCiAgICAgICAg
IH0KICAgICAgICAgdm9pZCBkaWRGYWlsKEV4Y2VwdGlvbkNvZGUgY29kZSkgZmluYWwKICAgICAg
ICAgewotICAgICAgICAgICAgRXhjZXB0aW9uIGV4Y2VwdGlvbiB7IGNvZGUgfTsKLSAgICAgICAg
ICAgIGlmICghbV9pc1N0YXJ0ZWQpIHsKLSAgICAgICAgICAgICAgICBtX2V4Y2VwdGlvbiA9IFdU
Rk1vdmUoZXhjZXB0aW9uKTsKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAv
LyBEdXJpbmcgVk0gZGVzdHJ1Y3Rpb24gd2UgZG8gbm90IHdhbnQgdG8gcmFpc2UgYSBkb20gZXhj
ZXB0aW9uCisgICAgICAgICAgICAvLyBhcyB0aGlzIHdpbGwgdHJpZ2dlciBhbiBhbGxvY2F0aW9u
LCB3aGljaCBpcyBub3QgYWxsb3dlZCBhcyB3ZQorICAgICAgICAgICAgLy8gd2lsbCBiZSBwZXJm
b3JtaW5nIGEgc3dlZXAgYXQgdGhhdCB0aW1lLgorCisgICAgICAgICAgICBhdXRvJiBnbG9iYWxP
YmplY3QgPSBjb250cm9sbGVyKCkuZ2V0R2xvYmFsT2JqZWN0KCk7CisgICAgICAgICAgICBhdXRv
JiBoZWFwID0gZ2xvYmFsT2JqZWN0LnZtKCkuaGVhcDsKKworICAgICAgICAgICAgaWYgKCFoZWFw
LmlzU2h1dHRpbmdEb3duKCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvKiBjb250ZXh0ID0gbV9s
b2FkZXItPmdldFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgICAgICAgICBjb250
ZXh0LT5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6SW50ZXJuYWxBc3luY1Rhc2ss
IFt0aGlzLCBjb2RlXSB7CisgICAgICAgICAgICAgICAgICAgIEV4Y2VwdGlvbiBleGNlcHRpb24g
eyBjb2RlIH07CisgICAgICAgICAgICAgICAgICAgIGlmICghbV9pc1N0YXJ0ZWQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1fZXhjZXB0aW9uID0gV1RGTW92ZShleGNlcHRpb24pOworICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIoKS5lcnJvcihleGNlcHRpb24pOworICAgICAgICAg
ICAgICAgIH0pOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgY29udHJvbGxlcigpLmVycm9y
KGV4Y2VwdGlvbik7CiAgICAgICAgIH0KIAogICAgICAgICBVbmlxdWVSZWY8RmlsZVJlYWRlckxv
YWRlcj4gbV9sb2FkZXI7CkBAIC0yOTIsNiArMzA2LDcgQEAgRXhjZXB0aW9uT3I8UmVmPFJlYWRh
YmxlU3RyZWFtPj4gQmxvYjo6c3RyZWFtKCkKIAogICAgIGF1dG8qIGNvbnRleHQgPSBzY3JpcHRF
eGVjdXRpb25Db250ZXh0KCk7CiAgICAgYXV0byogZ2xvYmFsT2JqZWN0ID0gY29udGV4dCA/IGNv
bnRleHQtPmdsb2JhbE9iamVjdCgpIDogbnVsbHB0cjsKKwogICAgIGlmICghZ2xvYmFsT2JqZWN0
KQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKICAgICBy
ZXR1cm4gUmVhZGFibGVTdHJlYW06OmNyZWF0ZSgqZ2xvYmFsT2JqZWN0LCBhZG9wdFJlZigqbmV3
IEJsb2JTdHJlYW1Tb3VyY2UoKmNvbnRleHQsICp0aGlzKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Zp
bGVhcGkvRmlsZVJlYWRlckxvYWRlci5jcHAKaW5kZXggYmQ5ODliYTBiZjZmZmI1YTM2YTA4ZGIw
ZTEyNTY5OTI1MzQxMzc3Yy4uMGM5ZmNkNDhkMmQ2NmY2MGMwY2E3MmQ2OTAzZDgxOWFhNDg5OTE3
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIuY3BwCkBAIC04
Miw2ICs4Miw4IEBAIHZvaWQgRmlsZVJlYWRlckxvYWRlcjo6c3RhcnQoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgY29uCiB7CiAgICAgQVNTRVJUKHNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQpOwogCisgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDsKKwogICAgIC8vIFRoZSBibG9iIGlzIHJlYWQgYnkgcm91dGlu
ZyB0aHJvdWdoIHRoZSByZXF1ZXN0IGhhbmRsaW5nIGxheWVyIGdpdmVuIGEgdGVtcG9yYXJ5IHB1
YmxpYyB1cmwuCiAgICAgbV91cmxGb3JSZWFkaW5nID0gQmxvYlVSTDo6Y3JlYXRlUHVibGljVVJM
KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCkpOwogICAgIGlmIChtX3Vy
bEZvclJlYWRpbmcuaXNFbXB0eSgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9maWxl
YXBpL0ZpbGVSZWFkZXJMb2FkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRl
ckxvYWRlci5oCmluZGV4IDljYzVjZWM1YmFjNGY1NTEwMzMzZDI2MGFmMjE2MzM5MjQ2NzEzMzgu
LjAzODVkYmY4YzlmMGM2ZjNjMTNjNTQyZGJjYTVhNWY1Y2U0ZDhiMjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlckxvYWRlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2ZpbGVhcGkvRmlsZVJlYWRlckxvYWRlci5oCkBAIC04OSw2ICs4OSw4IEBAIHB1YmxpYzoK
IAogICAgIGJvb2wgaXNDb21wbGV0ZWQoKSBjb25zdDsKIAorICAgIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGdldFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX3Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQ7IH0KKwogcHJpdmF0ZToKICAgICB2b2lkIHRlcm1pbmF0ZSgpOwog
ICAgIHZvaWQgY2xlYW51cCgpOwpAQCAtMTIxLDYgKzEyMyw4IEBAIHByaXZhdGU6CiAgICAgdW5z
aWduZWQgbV90b3RhbEJ5dGVzOwogCiAgICAgc3RkOjpvcHRpb25hbDxFeGNlcHRpb25Db2RlPiBt
X2Vycm9yQ29kZTsKKworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIG1fc2NyaXB0RXhlY3V0
aW9uQ29udGV4dDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452987</attachid>
            <date>2022-02-23 09:06:20 -0800</date>
            <delta_ts>2022-02-23 13:58:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237060-20220223090619.patch</filename>
            <type>text/plain</type>
            <size>7545</size>
            <attacher name="Brandon">brandonstewart</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwMjQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
MWE3OGZkNjRkMzEwZjllNTIyOWI2Y2IzYjIwNDgwYzExOTAyMDYyLi4wNWY3NjQ2MTNhOTg3OWI4
OTBjMTI4ZmExOWY2Y2Y5Y2ZlYzg4NWYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMCBAQAorMjAyMi0wMi0yMyAgQnJhbmRvbiBTdGV3YXJ0ICA8YnJhbmRvbnN0ZXdhcnRA
YXBwbGUuY29tPgorCisgICAgICAgIFF1ZXVlIHRocm93aW5nIGV4Y2VwdGlvbiBvZiBibG9iIG9i
amVjdHMgZHVyaW5nIGRlc3RydWN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMzcwNjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgdmVyaWZ5aW5nIHRoYXQgdGhlIFZNIGlz
IGJlaW5nIHNodXQgZG93bi4KKyAgICAgICAgVGhpcyBzaGFsbCBiZSBzZXQgd2hlbiB3ZSBlbnRl
ciB0aGUgVk0gZGVzdHJ1Y3Rvci4gCisgICAgICAgIEluIGFsbCBvdGhlciBjYXNlcywgaXQgc2hv
dWxkIHJldHVybiBmYWxzZS4KKworICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAo
SlNDOjpWTTo6flZNKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAgIChKU0M6OlZN
OjpzaHV0dGluZ0Rvd24gY29uc3QpOgorICAgICAgICAoSlNDOjpWTTo6c2V0U2h1dHRpbmdEb3du
KToKKwogMjAyMi0wMi0xOSAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+
CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmV2ZXJ0aW5nIHIyOTAxOTQgYW5kIHIyOTAyMTAuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKaW5kZXggYTRhMzc3MmNkM2E2MjI1MDZkMTY5NzY0Y2VjNDNjZjJhZjE3Yzc4Yi4uOGYx
NmY1YTQ5Mjk2NTJlOTM2MzA0OTljZWI4NGJjNzhiYjIxNDEwOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE5IEBACisyMDIyLTAyLTIzICBCcmFuZG9uIFN0ZXdhcnQgIDxicmFuZG9uc3Rld2FydEBh
cHBsZS5jb20+CisKKyAgICAgICAgUXVldWUgdGhyb3dpbmcgZXhjZXB0aW9uIG9mIGJsb2Igb2Jq
ZWN0cyBkdXJpbmcgZGVzdHJ1Y3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIzNzA2MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEJsb2JTdHJlYW1Tb3VyY2U6OmRpZEZhaWwoKSBtYXkgYmUgY2FsbGVk
IGR1cmluZyBhIEdDIHN3ZWVwLiBIZW5jZSwgd2UgY2Fubm90IHRocm93IGFuIGV4Y2VwdGlvbiAK
KyAgICAgICAgc3luY2hyb25vdXNseSBmcm9tIHRoZXJlIGFzIHRoaXMgbWF5IHJlc3VsdCBpbiBv
YmplY3QgYWxsb2NhdGlvbiAod2hpY2ggaXMgbm90IGFsbG93ZWQgZHVyaW5nIHN3ZWVwKS4gIAor
ICAgICAgICBJbnN0ZWFkLCB3ZSB3aWxsIGVucXVldWUgYSB0YXNrIHRvIGRvIHRoZSB0aGUgdGhy
b3cgbGF0ZXIuIEFkZGl0aW9uYWxseSwgaWYgZGlkRmFpbCgpIGlzIGNhbGxlZCBkdXJpbmcgCisg
ICAgICAgIFZNIHNodXQgZG93biwgdGhlbiB3ZSBza2lwIHRoZSBlbnF1ZXVpbmcgb2YgdGhlIHRh
c2sgYXMgdGhlIHRhc2sgcXVldWUgbWF5IGFscmVhZHkgaGF2ZSBzaHV0IGRvd24uCisKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLmg6CisgICAg
ICAgICogZmlsZWFwaS9CbG9iLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OnN0cmVhbSk6
CisKIDIwMjItMDItMjEgIEFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAg
IFtJRkNdW0ludGVncmF0aW9uXSBUYWtlIHZlcnRpY2FsLXJsIHdyaXRpbmcgbW9kZSB2YWx1ZSBp
bnRvIGFjY291bnQgd2hlbiBjb252ZXJ0aW5nIHZpc3VhbCBtYXJnaW4vYm9yZGVyL3BhZGRpbmcg
dmFsdWUgdG8gbG9naWNhbApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCmluZGV4IGY2
NmRhYWI4YzcxMTUwMWUzZmU5ZDFmMzdmMjM2MTJkM2FhNDEwNjUuLmFkZTY3OGU1ODZjNThkM2Ez
MWI0ZTZlMTQ1NjI0OGY4OGZkNjhlMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5j
cHAKQEAgLTQxOSw2ICs0MTksNyBAQCB2b2lkIHdhaXRGb3JWTURlc3RydWN0aW9uKCkKIFZNOjp+
Vk0oKQogewogICAgIExvY2tlciBkZXN0cnVjdGlvbkxvY2tlciB7IHNfZGVzdHJ1Y3Rpb25Mb2Nr
LnJlYWQoKSB9OworICAgIHNldFNodXR0aW5nRG93bih0cnVlKTsKICAgICAKICAgICBHaWdhY2Fn
ZTo6cmVtb3ZlUHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrKHByaW1pdGl2ZUdpZ2FjYWdlRGlzYWJs
ZWRDYWxsYmFjaywgdGhpcyk7CiAgICAgZGVmZXJyZWRXb3JrVGltZXItPnN0b3BSdW5uaW5nVGFz
a3MoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCmluZGV4IDAzZGRkZWE4NTg0M2RhMjE5
N2Y1MjUwYjg5NGZjMjY1ZTQ2MjUzZGEuLjc0NTIxMDYzNDgyZDAyNmU3NTc0ZDMxODAxZDNhZGI2
Njg2YjdmNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaApAQCAtMjg4LDYgKzI4OCwx
MCBAQCBwdWJsaWM6CiAgICAgV2Vha1JhbmRvbSYgcmFuZG9tKCkgeyByZXR1cm4gbV9yYW5kb207
IH0KICAgICBJbnRlZ3JpdHk6OlJhbmRvbSYgaW50ZWdyaXR5UmFuZG9tKCkgeyByZXR1cm4gbV9p
bnRlZ3JpdHlSYW5kb207IH0KIAorICAgIC8vIEluZGljYXRlcyB0aGUgVk0gaXMgY3VycmVudGx5
IGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGRlc3Ryb3llZC4KKyAgICBib29sIHNodXR0aW5nRG93
bigpIGNvbnN0IHsgcmV0dXJuIG1fc2h1dHRpbmdEb3duOyB9CisgICAgdm9pZCBzZXRTaHV0dGlu
Z0Rvd24oYm9vbCB2YWx1ZSkgeyBtX3NodXR0aW5nRG93biA9IHZhbHVlOyB9IAorCiAgICAgYm9v
bCB0ZXJtaW5hdGlvbkluUHJvZ3Jlc3MoKSBjb25zdCB7IHJldHVybiBtX3Rlcm1pbmF0aW9uSW5Q
cm9ncmVzczsgfQogICAgIHZvaWQgc2V0VGVybWluYXRpb25JblByb2dyZXNzKGJvb2wgdmFsdWUp
IHsgbV90ZXJtaW5hdGlvbkluUHJvZ3Jlc3MgPSB2YWx1ZTsgfQogCkBAIC05OTUsNiArOTk5LDcg
QEAgcHJpdmF0ZToKICAgICBXVEY6OkZ1bmN0aW9uPHZvaWQoVk0mKT4gbV9vbkVhY2hNaWNyb3Rh
c2tUaWNrOwogICAgIHVpbnRwdHJfdCBtX2N1cnJlbnRXZWFrUmVmVmVyc2lvbiB7IDAgfTsKIAor
ICAgIGJvb2wgbV9zaHV0dGluZ0Rvd24geyBmYWxzZSB9OwogICAgIGJvb2wgbV90ZXJtaW5hdGlv
bkluUHJvZ3Jlc3MgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9leGVjdXRpb25Gb3JiaWRkZW4geyBm
YWxzZSB9OwogICAgIGJvb2wgbV9leGVjdXRpb25Gb3JiaWRkZW5PblRlcm1pbmF0aW9uIHsgZmFs
c2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1JlYWRhYmxlU3Ry
ZWFtRGVmYXVsdENvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1JlYWRh
YmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuaAppbmRleCA4ODRjMGE5YWM3NzNjOTM1M2EzNGQw
ZDc2ZDgwMjgzMGJjYmExMWMwLi44NmJlOTcxYjIxMmQxM2IwY2Y4OTI2Yzc2MDAwZGFlMDRlNDVi
OWQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9SZWFkYWJsZVN0cmVh
bURlZmF1bHRDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvUmVh
ZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5oCkBAIC0zMCw2ICszMCw3IEBACiAjcHJhZ21h
IG9uY2UKIAogI2luY2x1ZGUgIkpTRE9NQ29udmVydEJ1ZmZlclNvdXJjZS5oIgorI2luY2x1ZGUg
IkpTRE9NR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNSZWFkYWJsZVN0cmVhbURlZmF1bHRD
b250cm9sbGVyLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSlNWYWx1ZS5oPgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0pTVmFsdWVJbmxpbmVzLmg+CkBAIC00NSwxNCArNDYs
MTUgQEAgcHVibGljOgogCiAgICAgYm9vbCBlbnF1ZXVlKFJlZlB0cjxKU0M6OkFycmF5QnVmZmVy
PiYmKTsKICAgICBib29sIGVucXVldWUoSlNDOjpKU1ZhbHVlKTsKKyAgICAKICAgICB2b2lkIGVy
cm9yKGNvbnN0IEV4Y2VwdGlvbiYpOwogICAgIHZvaWQgY2xvc2UoKTsKIAorICAgIEpTRE9NR2xv
YmFsT2JqZWN0JiBnbG9iYWxPYmplY3QoKSBjb25zdDsKKwogcHJpdmF0ZToKICAgICBKU1JlYWRh
YmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXImIGpzQ29udHJvbGxlcigpIGNvbnN0OwogCi0gICAg
SlNET01HbG9iYWxPYmplY3QmIGdsb2JhbE9iamVjdCgpIGNvbnN0OwotCiAgICAgLy8gVGhlIG93
bmVyIG9mIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIgaXMgcmVzcG9uc2libGUgdG8g
a2VlcCB1bmNvbGxlY3RlZCB0aGUgSlNSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLgog
ICAgIEpTUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlciogbV9qc0NvbnRyb2xsZXIgeyBu
dWxscHRyIH07CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvQmxvYi5jcHAKaW5kZXggZjYxNGExZWNkMzE3MjBi
NDVlODdlYzYxZDg5YzQwOGU4YjgyM2QzNy4uMGM0YjExNGQ5OTAyYjQwZWE1NTU2YmFjN2JiMmM3
YWQxYzc3YmVhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9CbG9iLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9maWxlYXBpL0Jsb2IuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAj
aW5jbHVkZSAiQmxvYkxvYWRlci5oIgogI2luY2x1ZGUgIkJsb2JQYXJ0LmgiCiAjaW5jbHVkZSAi
QmxvYlVSTC5oIgorI2luY2x1ZGUgIkV2ZW50TG9vcC5oIgogI2luY2x1ZGUgIkZpbGUuaCIKICNp
bmNsdWRlICJKU0RPTVByb21pc2VEZWZlcnJlZC5oIgogI2luY2x1ZGUgIlBvbGljeUNvbnRhaW5l
ci5oIgpAQCAtNDIsNiArNDMsNyBAQAogI2luY2x1ZGUgIlJlYWRhYmxlU3RyZWFtU291cmNlLmgi
CiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1
ZmZlci5oIgorI2luY2x1ZGUgIlRhc2tTb3VyY2UuaCIKICNpbmNsdWRlICJUaHJlYWRhYmxlQmxv
YlJlZ2lzdHJ5LmgiCiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KICNpbmNsdWRl
IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KQEAgLTI3NywxMiArMjc5LDI1IEBAIEV4Y2VwdGlvbk9y
PFJlZjxSZWFkYWJsZVN0cmVhbT4+IEJsb2I6OnN0cmVhbSgpCiAgICAgICAgIH0KICAgICAgICAg
dm9pZCBkaWRGYWlsKEV4Y2VwdGlvbkNvZGUgY29kZSkgZmluYWwKICAgICAgICAgewotICAgICAg
ICAgICAgRXhjZXB0aW9uIGV4Y2VwdGlvbiB7IGNvZGUgfTsKLSAgICAgICAgICAgIGlmICghbV9p
c1N0YXJ0ZWQpIHsKLSAgICAgICAgICAgICAgICBtX2V4Y2VwdGlvbiA9IFdURk1vdmUoZXhjZXB0
aW9uKTsKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAvLyBCbG9iU3RyZWFt
U291cmNlOjpkaWRGYWlsKCkgbWF5IGJlIGNhbGxlZCBkdXJpbmcgYSBHQyBzd2VlcC4gSGVuY2Us
IHdlIGNhbm5vdCB0aHJvdyBhbiBleGNlcHRpb24gCisgICAgICAgICAgICAvLyBzeW5jaHJvbm91
c2x5IGZyb20gdGhlcmUgYXMgdGhpcyBtYXkgcmVzdWx0IGluIG9iamVjdCBhbGxvY2F0aW9uICh3
aGljaCBpcyBub3QgYWxsb3dlZCBkdXJpbmcgc3dlZXApLiAgCisgICAgICAgICAgICAvLyBJbnN0
ZWFkLCB3ZSB3aWxsIGVucXVldWUgYSB0YXNrIHRvIGRvIHRoZSB0aGUgdGhyb3cgbGF0ZXIuIEFk
ZGl0aW9uYWxseSwgaWYgZGlkRmFpbCgpIGlzIGNhbGxlZCBkdXJpbmcgCisgICAgICAgICAgICAv
LyBWTSBzaHV0IGRvd24sIHRoZW4gd2Ugc2tpcCB0aGUgZW5xdWV1aW5nIG9mIHRoZSB0YXNrIGFz
IHRoZSB0YXNrIHF1ZXVlIG1heSBhbHJlYWR5IGhhdmUgc2h1dCBkb3duLgorICAgICAgICAKKyAg
ICAgICAgICAgIGF1dG8mIGdsb2JhbE9iamVjdCA9IGNvbnRyb2xsZXIoKS5nbG9iYWxPYmplY3Qo
KTsKKyAgICAgICAgICAgIGF1dG8mIHZtID0gZ2xvYmFsT2JqZWN0LnZtKCk7CisKKyAgICAgICAg
ICAgIGlmICghdm0uc2h1dHRpbmdEb3duKCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvKiBjb250
ZXh0ID0gZ2xvYmFsT2JqZWN0LnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICAgICAgICAg
ICAgICBjb250ZXh0LT5ldmVudExvb3AoKS5xdWV1ZVRhc2soVGFza1NvdXJjZTo6SW50ZXJuYWxB
c3luY1Rhc2ssIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gUmVmIHsgKnRoaXMgfSwgY29kZV0gewor
ICAgICAgICAgICAgICAgICAgICBFeGNlcHRpb24gZXhjZXB0aW9uIHsgY29kZSB9OworICAgICAg
ICAgICAgICAgICAgICBpZiAoIW1faXNTdGFydGVkKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBtX2V4Y2VwdGlvbiA9IFdURk1vdmUoZXhjZXB0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBj
b250cm9sbGVyKCkuZXJyb3IoZXhjZXB0aW9uKTsKKyAgICAgICAgICAgICAgICB9KTsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGNvbnRyb2xsZXIoKS5lcnJvcihleGNlcHRpb24pOwogICAg
ICAgICB9CiAKICAgICAgICAgVW5pcXVlUmVmPEZpbGVSZWFkZXJMb2FkZXI+IG1fbG9hZGVyOwpA
QCAtMjkyLDYgKzMwNyw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxSZWFkYWJsZVN0cmVhbT4+IEJsb2I6
OnN0cmVhbSgpCiAKICAgICBhdXRvKiBjb250ZXh0ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
OwogICAgIGF1dG8qIGdsb2JhbE9iamVjdCA9IGNvbnRleHQgPyBjb250ZXh0LT5nbG9iYWxPYmpl
Y3QoKSA6IG51bGxwdHI7CisKICAgICBpZiAoIWdsb2JhbE9iamVjdCkKICAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07CiAgICAgcmV0dXJuIFJlYWRhYmxlU3Ry
ZWFtOjpjcmVhdGUoKmdsb2JhbE9iamVjdCwgYWRvcHRSZWYoKm5ldyBCbG9iU3RyZWFtU291cmNl
KCpjb250ZXh0LCAqdGhpcykpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>453025</attachid>
            <date>2022-02-23 13:59:02 -0800</date>
            <delta_ts>2022-02-25 16:29:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237060-20220223135901.patch</filename>
            <type>text/plain</type>
            <size>1552</size>
            <attacher name="Brandon">brandonstewart</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwMzc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjA5M2U1ZjI2MTY1MDI3
MGI3NTc2ZTQ2YTg3YzFkMWQ4OTAyMGRiZC4uZTZiZWY2MjIzODk4ZWIwMTVlMTNhYTZkY2NmNDRk
NjczN2M2NmI1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDIyLTAyLTIzICBCcmFu
ZG9uIFN0ZXdhcnQgIDxicmFuZG9uc3Rld2FydEBhcHBsZS5jb20+CisKKyAgICAgICAgRG8gbm90
IHRyaWdnZXIgZGlkRmFpbCBkdXJpbmcgRmlsZVJlYWRlckxvYWRlciBEZXN0cnVjdGlvbgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3MDYwCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU2V0dGluZyBjYW5j
ZWwoKSBpbnN0ZWFkIG9mIHRlcm1pbmF0ZSgpIHdpbGwgcHJldmVudCB0aGUgZGlkRmFpbCgpIG1l
dGhvZCBmcm9tIGJlaW5nIHRyaWdnZXJlZC4KKyAgICAgICAgVGhpcyBtZXRob2QgaGFzIHRoZSB1
bmZvcnR1bmF0ZSBzaWRlIGVmZmVjdCBvZiB0cnlpbmcgdG8gYWxsb2NhdGUgbWVtb3J5LCB3aGlj
aCBpcyBub3QgYWxsb3dlZCB3aGVuCisgICAgICAgIHVuZGVyIGdvaW5nIGEgc3dlZXAgZXZlbnQu
CisKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsZVJlYWRlckxvYWRlcjo6fkZpbGVSZWFkZXJMb2FkZXIpOgorCiAyMDIyLTAyLTIz
ICBEaWVnbyBQaW5vIEdhcmNpYSAgPGRwaW5vQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10g
VW5yZXZpZXdlZCwgYnVpbGQgZml4IGZvciBEZWJpYW4gU3RhYmxlIGFmdGVyIHIyOTAzNjYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlckxvYWRlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIuY3BwCmluZGV4IGJkOTg5YmEw
YmY2ZmZiNWEzNmEwOGRiMGUxMjU2OTkyNTM0MTM3N2MuLjJmZTVhZjFmOThkMzZkZGM4OWYzOWNj
YzE3ZDdiNzBlYzkzMzllOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmls
ZVJlYWRlckxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVy
TG9hZGVyLmNwcApAQCAtNjgsNyArNjgsOCBAQCBGaWxlUmVhZGVyTG9hZGVyOjpGaWxlUmVhZGVy
TG9hZGVyKFJlYWRUeXBlIHJlYWRUeXBlLCBGaWxlUmVhZGVyTG9hZGVyQ2xpZW50KiBjbAogCiBG
aWxlUmVhZGVyTG9hZGVyOjp+RmlsZVJlYWRlckxvYWRlcigpCiB7Ci0gICAgdGVybWluYXRlKCk7
CisgICAgY2FuY2VsKCk7CisKICAgICBpZiAoIW1fdXJsRm9yUmVhZGluZy5pc0VtcHR5KCkpCiAg
ICAgICAgIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnVucmVnaXN0ZXJCbG9iVVJMKG1fdXJsRm9y
UmVhZGluZyk7CiB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>