<?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>268239</bug_id>
          
          <creation_ts>2024-01-27 17:49:37 -0800</creation_ts>
          <short_desc>AX: Depending on the timing of Document::flushDeferredAXObjectCacheUpdate(), AXObjectCache::performDeferredCacheUpdate can be run with dirty layout</short_desc>
          <delta_ts>2024-01-31 11:14:05 -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>Accessibility</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="Tyler Wilcock">tyler_w</reporter>
          <assigned_to name="Tyler Wilcock">tyler_w</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>andresg_22</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cdumez</cc>
    
    <cc>cfleizach</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>jcraig</cc>
    
    <cc>kangil.han</cc>
    
    <cc>samuel_white</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>2008226</commentid>
    <comment_count>0</comment_count>
    <who name="Tyler Wilcock">tyler_w</who>
    <bug_when>2024-01-27 17:49:37 -0800</bug_when>
    <thetext>This causes incorrect accessibility tree updates.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2008227</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2024-01-27 17:49:46 -0800</bug_when>
    <thetext>&lt;rdar://problem/121760427&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2008228</commentid>
    <comment_count>2</comment_count>
      <attachid>469575</attachid>
    <who name="Tyler Wilcock">tyler_w</who>
    <bug_when>2024-01-27 17:59:08 -0800</bug_when>
    <thetext>Created attachment 469575
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2008235</commentid>
    <comment_count>3</comment_count>
      <attachid>469577</attachid>
    <who name="Tyler Wilcock">tyler_w</who>
    <bug_when>2024-01-27 19:22:02 -0800</bug_when>
    <thetext>Created attachment 469577
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2008246</commentid>
    <comment_count>4</comment_count>
      <attachid>469577</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2024-01-27 22:56:38 -0800</bug_when>
    <thetext>Comment on attachment 469577
Patch

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

&gt; Source/WebCore/accessibility/AXObjectCache.cpp:3980
&gt; +        if (m_cacheUpdateDeferredCount &gt;= 3 &amp;&amp; !Accessibility::inRenderTreeOrStyleUpdate(document())) {

is it also an assertion condition that we wouldn&apos;t be rendering anything right now?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2008256</commentid>
    <comment_count>5</comment_count>
      <attachid>469580</attachid>
    <who name="Tyler Wilcock">tyler_w</who>
    <bug_when>2024-01-28 01:14:00 -0800</bug_when>
    <thetext>Created attachment 469580
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2008468</commentid>
    <comment_count>6</comment_count>
      <attachid>469597</attachid>
    <who name="Tyler Wilcock">tyler_w</who>
    <bug_when>2024-01-29 07:59:56 -0800</bug_when>
    <thetext>Created attachment 469597
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2008769</commentid>
    <comment_count>7</comment_count>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2024-01-29 18:15:57 -0800</bug_when>
    <thetext>(In reply to Tyler Wilcock from comment #6)
&gt; Created attachment 469597 [details]
&gt; Patch

diff --git a/Source/WebCore/accessibility/AXCoreObject.cpp b/Source/WebCore/accessibility/AXCoreObject.cpp
index 8f2b1827e33e..8749e3e775d8 100644
--- a/Source/WebCore/accessibility/AXCoreObject.cpp
+++ b/Source/WebCore/accessibility/AXCoreObject.cpp
@@ -28,6 +28,7 @@

 #include &quot;config.h&quot;
 #include &quot;AXCoreObject.h&quot;
+#include &quot;LocalFrameView.h&quot;

 namespace WebCore {

@@ -595,4 +596,16 @@ void AXCoreObject::appendRadioButtonGroupMembers(AccessibilityChildrenVector&amp; li
     }
 }

+namespace Accessibility {
+
+bool inRenderTreeOrStyleUpdate(const Document&amp; document)
+{
+    if (document.inStyleRecalc() || document.inRenderTreeUpdate())
+        return true;
+    auto* view = document.view();
+    return view &amp;&amp; view-&gt;layoutContext().isInRenderTreeLayout();
+}
+
+} // namespace Accessibility
+
 } // namespace WebCore
diff --git a/Source/WebCore/accessibility/AXCoreObject.h b/Source/WebCore/accessibility/AXCoreObject.h
index c95c64fcb2a6..763c064fa104 100644
--- a/Source/WebCore/accessibility/AXCoreObject.h
+++ b/Source/WebCore/accessibility/AXCoreObject.h
@@ -1662,6 +1662,8 @@ template&lt;typename T, typename U&gt; inline T retrieveAutoreleasedValueFromMainThrea
 }
 #endif

+bool inRenderTreeOrStyleUpdate(const Document&amp;);
+
 } // namespace Accessibility

 inline bool AXCoreObject::isDescendantOfObject(const AXCoreObject* axObject) const
diff --git a/Source/WebCore/accessibility/AXObjectCache.cpp b/Source/WebCore/accessibility/AXObjectCache.cpp
index 78a330da4c5c..bd3127dcf1d4 100644
--- a/Source/WebCore/accessibility/AXObjectCache.cpp
+++ b/Source/WebCore/accessibility/AXObjectCache.cpp
@@ -3965,15 +3965,6 @@ bool AXObjectCache::nodeIsTextControl(const Node* node)
     return axObject &amp;&amp; axObject-&gt;isTextControl();
 }

-void AXObjectCache::performCacheUpdateTimerFired()
-{
-    // If there&apos;s a pending layout, let the layout trigger the AX update.
-    if (!document().view() || document().view()-&gt;needsLayout())
-        return;
-
-    performDeferredCacheUpdate();
-}
-
 void AXObjectCache::performDeferredCacheUpdate()
 {
     AXTRACE(makeString(&quot;AXObjectCache::performDeferredCacheUpdate 0x&quot;_s, hex(reinterpret_cast&lt;uintptr_t&gt;(this))));
@@ -3983,6 +3974,23 @@ void AXObjectCache::performDeferredCacheUpdate()
     }
     SetForScope performingDeferredCacheUpdate(m_performingDeferredCacheUpdate, true);

+    // It&apos;s unexpected for this function to run in the middle of a render tree or style update.
+    ASSERT(!Accessibility::inRenderTreeOrStyleUpdate(document()));

AG: is Accessibility::inRenderTreeOrStyleUpdate equivalent to layout dirty? If so, we know we&apos;ll hit this assert in some cases, because that&apos;s the bug we are dealing with.

+
+    if (!document().view() || document().view()-&gt;needsLayout()) {
+        // Layout became dirty while waiting to performDeferredCacheUpdate, and we require clean layout
+        // to update the accessibility tree correctly in this function.
+        if (m_cacheUpdateDeferredCount &gt;= 3 &amp;&amp; !Accessibility::inRenderTreeOrStyleUpdate(document())) {
+            // Layout is being thrashed before we get a chance to update, so stop waiting and just force it.
+            m_cacheUpdateDeferredCount = 0;
+            document().updateLayoutIgnorePendingStylesheets();

AG: we are doing this when there is no view, unlike before this change. Does that matter? or we should return if there is now view.

AG: why not to do document().updateLayoutIgnorePendingStylesheets the first time? I.e., if it is good after three attempts, why not do it in the first try.

+        } else {
+            // Wait for layout to trigger another async cache update.
+            ++m_cacheUpdateDeferredCount;
+            return;
+        }
+    }
+
     bool markedRelationsDirty = false;
     auto markRelationsDirty = [&amp;] () {
         if (!markedRelationsDirty) {
diff --git a/Source/WebCore/accessibility/AXObjectCache.h b/Source/WebCore/accessibility/AXObjectCache.h
index 3e806cb1a840..c819f3814d29 100644
--- a/Source/WebCore/accessibility/AXObjectCache.h
+++ b/Source/WebCore/accessibility/AXObjectCache.h
@@ -587,7 +587,7 @@ private:

     void focusCurrentModal();

-    void performCacheUpdateTimerFired();
+    void performCacheUpdateTimerFired() { performDeferredCacheUpdate(); }

     void postTextStateChangeNotification(AccessibilityObject*, const AXTextStateChangeIntent&amp;, const VisibleSelection&amp;);

@@ -734,6 +734,8 @@ private:
     bool m_performingDeferredCacheUpdate { false };
     double m_loadingProgress { 0 };

+    unsigned m_cacheUpdateDeferredCount { 0 };
+
     // Relationships between objects.
     HashMap&lt;AXID, AXRelations&gt; m_relations;
     bool m_relationsNeedUpdate { true };</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2008773</commentid>
    <comment_count>8</comment_count>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2024-01-29 18:27:24 -0800</bug_when>
    <thetext>diff --git a/Source/WebCore/accessibility/AccessibilityRenderObject.cpp b/Source/WebCore/accessibility/AccessibilityRenderObject.cpp
index 0c272a4954c7..de7cc173d7af 100644
--- a/Source/WebCore/accessibility/AccessibilityRenderObject.cpp
+++ b/Source/WebCore/accessibility/AccessibilityRenderObject.cpp
@@ -1112,8 +1112,11 @@ bool AccessibilityRenderObject::computeAccessibilityIsIgnored() const

     if (WeakPtr renderText = dynamicDowncast&lt;RenderText&gt;(m_renderer.get())) {
         // Text elements with no rendered text, or only whitespace should not be part of the AX tree.
-        if (!renderText-&gt;hasRenderedText())
+        if (!renderText-&gt;hasRenderedText()) {
+            // Layout must be clean to make the right decision here (because hasRenderedText() can return false solely because layout is dirty).
+            ASSERT(!renderText-&gt;needsLayout() || !renderText-&gt;text().length());

AG: This is the cause of the bug, right? Not clear to me how we are preventing this from happening with the change in the performDeferredCacheUpdate.

             return true;
+        }

         if (renderText-&gt;text().containsOnly&lt;isASCIIWhitespace&gt;()) {
 #if ENABLE(AX_THREAD_TEXT_APIS)
diff --git a/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp b/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp
index 8f8605257851..47d153f944ed 100644
--- a/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp
+++ b/Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp
@@ -144,7 +144,7 @@ Ref&lt;AXIsolatedTree&gt; AXIsolatedTree::create(AXObjectCache&amp; axObjectCache)
     }

     auto&amp; document = axObjectCache.document();
-    if (!document.view()-&gt;layoutContext().isInRenderTreeLayout() &amp;&amp; !document.inRenderTreeUpdate() &amp;&amp; !document.inStyleRecalc())
+    if (!Accessibility::inRenderTreeOrStyleUpdate(document))
         document.updateLayoutIgnorePendingStylesheets();

     tree-&gt;m_maxTreeDepth = document.settings().maximumHTMLParserDOMTreeDepth();</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2008778</commentid>
    <comment_count>9</comment_count>
    <who name="Tyler Wilcock">tyler_w</who>
    <bug_when>2024-01-29 18:51:55 -0800</bug_when>
    <thetext>(In reply to Andres Gonzalez from comment #7)
&gt; (In reply to Tyler Wilcock from comment #6)
&gt; +    // It&apos;s unexpected for this function to run in the middle of a render
&gt; tree or style update.
&gt; +    ASSERT(!Accessibility::inRenderTreeOrStyleUpdate(document()));
&gt; 
&gt; AG: is Accessibility::inRenderTreeOrStyleUpdate equivalent to layout dirty?
&gt; If so, we know we&apos;ll hit this assert in some cases, because that&apos;s the bug
&gt; we are dealing with.
TW: They&apos;re not equivalent. inRenderTreeOrStyleUpdate is true when we&apos;re in the
middle of a render tree update (i.e. actively tearing down or creating new renderers) or style recalculation. Dirty layout is a flag only indicating layout needs to be recomputed, not that anything is actively in progress, so they&apos;re different states. Layout must not happen when either of these two processes are in progress, and it&apos;s also unexpected that we ever call performDeferredCacheUpdate while either are in progress.

&gt; +    if (!document().view() || document().view()-&gt;needsLayout()) {
&gt; +        // Layout became dirty while waiting to performDeferredCacheUpdate,
&gt; and we require clean layout
&gt; +        // to update the accessibility tree correctly in this function.
&gt; +        if (m_cacheUpdateDeferredCount &gt;= 3 &amp;&amp;
&gt; !Accessibility::inRenderTreeOrStyleUpdate(document())) {
&gt; +            // Layout is being thrashed before we get a chance to update,
&gt; so stop waiting and just force it.
&gt; +            m_cacheUpdateDeferredCount = 0;
&gt; +            document().updateLayoutIgnorePendingStylesheets();
&gt; 
&gt; AG: we are doing this when there is no view, unlike before this change. Does
&gt; that matter? or we should return if there is now view.
TW: Good point! I think we should just return if there is no view.

&gt; AG: why not to do document().updateLayoutIgnorePendingStylesheets the first
&gt; time? I.e., if it is good after three attempts, why not do it in the first
&gt; try.
TW: Layout is expensive, so the idea with this was to &quot;latch on&quot; to a layout that already happened if it&apos;s possible to do so rather than triggering one ourselves. This also increases de-duplication opportunities. But if it gets continuously thrashed between clean and dirty and we can&apos;t ride on the back of a clean layout, then we force one because we have to actually update eventually.

But in retrospect, maybe this behavior is confusing...the function name is &quot;performDeferredCacheUpdate&quot;, so it would be confusing for callers to use it expecting the AX tree state to be up-to-date afterwards, but it actually got deferred due to dirty layout. What do you think is the best route forward?

&gt;      if (WeakPtr renderText = dynamicDowncast&lt;RenderText&gt;(m_renderer.get())) {
&gt;          // Text elements with no rendered text, or only whitespace should not be part of the AX tree.
&gt; -        if (!renderText-&gt;hasRenderedText())
&gt; +        if (!renderText-&gt;hasRenderedText()) {
&gt; +            // Layout must be clean to make the right decision here (because hasRenderedText() can return false solely because layout is dirty).
&gt; +            ASSERT(!renderText-&gt;needsLayout() || !renderText-&gt;text().length());
&gt; 
&gt; AG: This is the cause of the bug, right? Not clear to me how we are preventing this from happening with the change in the performDeferredCacheUpdate.
TW: Before, we used to guarantee that layout was clean before handling deferred children change updates (critical in updating the isolated tree correctly), https://bugs.webkit.org/show_bug.cgi?id=256403 broke that guarantee. This patch fixes it.

It is, however, true that `computeAccessibilityIsIgnored` can be called at any time, i.e. outside of performDeferredCacheUpdate where we again guarantee layout is clean. But this problem also existed before https://bugs.webkit.org/show_bug.cgi?id=256403, so this patch at least moves us back in the right direction. Guaranteeing layout is clean from all the places computeAccessibilityIsIgnored can be called is something we should tackle in the future (is it possible?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2008984</commentid>
    <comment_count>10</comment_count>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2024-01-30 09:24:03 -0800</bug_when>
    <thetext>(In reply to Tyler Wilcock from comment #9)
&gt; (In reply to Andres Gonzalez from comment #7)
&gt; &gt; (In reply to Tyler Wilcock from comment #6)
&gt; &gt; +    // It&apos;s unexpected for this function to run in the middle of a render
&gt; &gt; tree or style update.
&gt; &gt; +    ASSERT(!Accessibility::inRenderTreeOrStyleUpdate(document()));
&gt; &gt; 
&gt; &gt; AG: is Accessibility::inRenderTreeOrStyleUpdate equivalent to layout dirty?
&gt; &gt; If so, we know we&apos;ll hit this assert in some cases, because that&apos;s the bug
&gt; &gt; we are dealing with.
&gt; TW: They&apos;re not equivalent. inRenderTreeOrStyleUpdate is true when we&apos;re in
&gt; the
&gt; middle of a render tree update (i.e. actively tearing down or creating new
&gt; renderers) or style recalculation. Dirty layout is a flag only indicating
&gt; layout needs to be recomputed, not that anything is actively in progress, so
&gt; they&apos;re different states. Layout must not happen when either of these two
&gt; processes are in progress, and it&apos;s also unexpected that we ever call
&gt; performDeferredCacheUpdate while either are in progress.

AG: thanks for the clarification.

&gt; 
&gt; &gt; +    if (!document().view() || document().view()-&gt;needsLayout()) {
&gt; &gt; +        // Layout became dirty while waiting to performDeferredCacheUpdate,
&gt; &gt; and we require clean layout
&gt; &gt; +        // to update the accessibility tree correctly in this function.
&gt; &gt; +        if (m_cacheUpdateDeferredCount &gt;= 3 &amp;&amp;
&gt; &gt; !Accessibility::inRenderTreeOrStyleUpdate(document())) {
&gt; &gt; +            // Layout is being thrashed before we get a chance to update,
&gt; &gt; so stop waiting and just force it.
&gt; &gt; +            m_cacheUpdateDeferredCount = 0;
&gt; &gt; +            document().updateLayoutIgnorePendingStylesheets();
&gt; &gt; 
&gt; &gt; AG: we are doing this when there is no view, unlike before this change. Does
&gt; &gt; that matter? or we should return if there is now view.
&gt; TW: Good point! I think we should just return if there is no view.
&gt; 
&gt; &gt; AG: why not to do document().updateLayoutIgnorePendingStylesheets the first
&gt; &gt; time? I.e., if it is good after three attempts, why not do it in the first
&gt; &gt; try.
&gt; TW: Layout is expensive, so the idea with this was to &quot;latch on&quot; to a layout
&gt; that already happened if it&apos;s possible to do so rather than triggering one
&gt; ourselves. This also increases de-duplication opportunities. But if it gets
&gt; continuously thrashed between clean and dirty and we can&apos;t ride on the back
&gt; of a clean layout, then we force one because we have to actually update
&gt; eventually.
&gt; 
&gt; But in retrospect, maybe this behavior is confusing...the function name is
&gt; &quot;performDeferredCacheUpdate&quot;, so it would be confusing for callers to use it
&gt; expecting the AX tree state to be up-to-date afterwards, but it actually got
&gt; deferred due to dirty layout. What do you think is the best route forward?

AG: Could you please add a comment explaining this rationale in this patch? I think there are some open questions in this issue that we need to think about. The reason this call was moved from the post layout task to an event queue is because some of our processing in this method can trigger JS execution, and that in turn can trigger a layout. So, what would it happen if that is still happening in the middle of the execution of this method? Wouldn&apos;t be better to avoid triggering any JS, and thus be able to run as a post layout task?

&gt; 
&gt; &gt;      if (WeakPtr renderText = dynamicDowncast&lt;RenderText&gt;(m_renderer.get())) {
&gt; &gt;          // Text elements with no rendered text, or only whitespace should not be part of the AX tree.
&gt; &gt; -        if (!renderText-&gt;hasRenderedText())
&gt; &gt; +        if (!renderText-&gt;hasRenderedText()) {
&gt; &gt; +            // Layout must be clean to make the right decision here (because hasRenderedText() can return false solely because layout is dirty).
&gt; &gt; +            ASSERT(!renderText-&gt;needsLayout() || !renderText-&gt;text().length());
&gt; &gt; 
&gt; &gt; AG: This is the cause of the bug, right? Not clear to me how we are preventing this from happening with the change in the performDeferredCacheUpdate.
&gt; TW: Before, we used to guarantee that layout was clean before handling
&gt; deferred children change updates (critical in updating the isolated tree
&gt; correctly), https://bugs.webkit.org/show_bug.cgi?id=256403 broke that
&gt; guarantee. This patch fixes it.
&gt; 
&gt; It is, however, true that `computeAccessibilityIsIgnored` can be called at
&gt; any time, i.e. outside of performDeferredCacheUpdate where we again
&gt; guarantee layout is clean. But this problem also existed before
&gt; https://bugs.webkit.org/show_bug.cgi?id=256403, so this patch at least moves
&gt; us back in the right direction. Guaranteeing layout is clean from all the
&gt; places computeAccessibilityIsIgnored can be called is something we should
&gt; tackle in the future (is it possible?)

AG: the fact that we can trigger a layout just by checking whether an object should be ignored or not, it is troublesome. So I think we are going to address that root problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2009099</commentid>
    <comment_count>11</comment_count>
      <attachid>469622</attachid>
    <who name="Tyler Wilcock">tyler_w</who>
    <bug_when>2024-01-30 14:23:30 -0800</bug_when>
    <thetext>Created attachment 469622
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2009165</commentid>
    <comment_count>12</comment_count>
    <who name="Tyler Wilcock">tyler_w</who>
    <bug_when>2024-01-30 17:06:18 -0800</bug_when>
    <thetext>&gt; &gt; (In reply to Andres Gonzalez from comment #7)
&gt; &gt; &gt; +    if (!document().view() || document().view()-&gt;needsLayout()) {
&gt; &gt; &gt; +        // Layout became dirty while waiting to performDeferredCacheUpdate,
&gt; &gt; &gt; and we require clean layout
&gt; &gt; &gt; +        // to update the accessibility tree correctly in this function.
&gt; &gt; &gt; +        if (m_cacheUpdateDeferredCount &gt;= 3 &amp;&amp;
&gt; &gt; &gt; !Accessibility::inRenderTreeOrStyleUpdate(document())) {
&gt; &gt; &gt; +            // Layout is being thrashed before we get a chance to update,
&gt; &gt; &gt; so stop waiting and just force it.
&gt; &gt; &gt; +            m_cacheUpdateDeferredCount = 0;
&gt; &gt; &gt; +            document().updateLayoutIgnorePendingStylesheets();
&gt; &gt; &gt; 
&gt; &gt; &gt; AG: why not to do document().updateLayoutIgnorePendingStylesheets the first
&gt; &gt; &gt; time? I.e., if it is good after three attempts, why not do it in the first
&gt; &gt; &gt; try.
&gt; &gt; TW: Layout is expensive, so the idea with this was to &quot;latch on&quot; to a layout
&gt; &gt; that already happened if it&apos;s possible to do so rather than triggering one
&gt; &gt; ourselves. This also increases de-duplication opportunities. But if it gets
&gt; &gt; continuously thrashed between clean and dirty and we can&apos;t ride on the back
&gt; &gt; of a clean layout, then we force one because we have to actually update
&gt; &gt; eventually.
&gt; &gt; 
&gt; &gt; But in retrospect, maybe this behavior is confusing...the function name is
&gt; &gt; &quot;performDeferredCacheUpdate&quot;, so it would be confusing for callers to use it
&gt; &gt; expecting the AX tree state to be up-to-date afterwards, but it actually got
&gt; &gt; deferred due to dirty layout. What do you think is the best route forward?
&gt; 
&gt; AG: Could you please add a comment explaining this rationale in this patch?
&gt; I think there are some open questions in this issue that we need to think
&gt; about. The reason this call was moved from the post layout task to an event
&gt; queue is because some of our processing in this method can trigger JS
&gt; execution, and that in turn can trigger a layout. So, what would it happen
&gt; if that is still happening in the middle of the execution of this method?
&gt; Wouldn&apos;t be better to avoid triggering any JS, and thus be able to run as a
&gt; post layout task?
TW: Added this rationale to the commit message! I also added a ForceLayout flag since the last patch, allowing callers to explicitly opt in to or out of this deferral behavior, addressing the problem I mentioned above (it would otherwise be confusing for some callers for the AX tree not to be updated after performDeferredCacheUpdate). Let me know if you don&apos;t agree with this or have some other idea here.

You said &quot;Wouldn&apos;t it be better to avoid triggering any JS, and thus be able to run as a post layout task?&quot;

Possibly, but that could bring other problems. One way we can trigger JS through the cache update AXObjectCache::focusCurrentModal() by calling AccessibilityNodeObject::setFocused(). We would have to make just this part async, which might come with unexpected focusing behavior for users, e.g. trampling author focus. There  may be other ways we can trigger JS that we&apos;d have to account for too, not sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2009419</commentid>
    <comment_count>13</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2024-01-31 11:13:46 -0800</bug_when>
    <thetext>Committed 273844@main (0025697e6026): &lt;https://commits.webkit.org/273844@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 469622.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>469575</attachid>
            <date>2024-01-27 17:59:08 -0800</date>
            <delta_ts>2024-01-27 19:22:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-268239-20240127175907.patch</filename>
            <type>text/plain</type>
            <size>14816</size>
            <attacher name="Tyler Wilcock">tyler_w</attacher>
            
              <data encoding="base64">RnJvbSA2ZWFmYjljZmMxZTRhMWEyN2JiNjUwMjEzZWExMzc4NThkNGQzZjBkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBUeWxlciBXaWxjb2NrIDx0eWxlcl93QGFwcGxlLmNvbT4KRGF0
ZTogU2F0LCAyNyBKYW4gMjAyNCAxNzo0OTo0NSAtMDgwMApTdWJqZWN0OiBbUEFUQ0hdIEFYOiBE
ZXBlbmRpbmcgb24gdGhlIHRpbWluZyBvZgogRG9jdW1lbnQ6OmZsdXNoRGVmZXJyZWRBWE9iamVj
dENhY2hlVXBkYXRlKCksCiBBWE9iamVjdENhY2hlOjpwZXJmb3JtRGVmZXJyZWRDYWNoZVVwZGF0
ZSBjYW4gYmUgcnVuIHdpdGggZGlydHkgbGF5b3V0CiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjY4MjM5IHJkYXI6Ly9wcm9ibGVtLzEyMTc2MDQyNwoKUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCgpJbiBidWc6CgpodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjU2NDAzIChEZWZlciBBWCBvYmplY3QgY2FjaGUgdXBkYXRlIGFzIGFuIGV2
ZW50IGxvb3AgdGFzayBpbnN0ZWFkIG9mIGEgcG9zdCBsYXlvdXQgdGFzaykKCkFYT2JqZWN0Q2Fj
aGU6OnBlcmZyb21EZWZlcnJlZENhY2hlVXBkYXRlIHdhcyBtb3ZlZCBmcm9tIGJlaW5nIGEgc3lu
Y2hyb25vdXMgcG9zdC1sYXlvdXQgdGFzayB0byBhbiBhc3luY2hyb25vdXMgb25lLApydW5uaW5n
IHdoZW4gcG9zc2libGUgdmlhIHRoZSBFdmVudExvb3AuCgpUaGUgcHJvYmxlbSB3aXRoIHRoaXMg
aXMgdGhhdCBieSB0aGUgdGltZSBEb2N1bWVudDo6Zmx1c2hEZWZlcnJlZEFYT2JqZWN0Q2FjaGVV
cGRhdGUoKSBhY3R1YWxseSBmaXJlcywgbGF5b3V0IG1heSBoYXZlCmJlY29tZSBkaXJ0eSBhZ2Fp
biwgd2hpY2ggbWVhbnMgQVhPYmplY3RDYWNoZTo6cGVyZm9ybURlZmVycmVkQ2FjaGVVcGRhdGUg
bWFrZXMgaW5jb3JyZWN0IHVwZGF0ZXMgdG8gdGhlIGFjY2Vzc2liaWxpdHkKdHJlZS4gQXMgb25l
IHNwZWNpZmljIGV4YW1wbGUsIGl0IGNhbiBjYXVzZSB1cyB0byBjb21wdXRlIHRoZSB3cm9uZyBp
Z25vcmVkIHZhbHVlIGZvciBSZW5kZXJUZXh0cywgYXMgd2UgY2hlY2sKUmVuZGVyVGV4dDo6aGFz
UmVuZGVyZWRUZXh0IHdoaWNoIG1heSB1bmV4cGVjdGVkbHkgcmV0dXJuIGZhbHNlIG9ubHkgYmVj
YXVzZSB0aGUgbGF5b3V0IGlzIGRpcnR5LgoKV2l0aCB0aGlzIHBhdGNoLCBwZXJmb3JtRGVmZXJy
ZWRDYWNoZVVwZGF0ZSBub3cgZGV0ZWN0cyB3aGVuIGxheW91dCBpcyBkaXJ0eSwgYW5kIGVpdGhl
ciB3YWl0cyBhbm90aGVyIHJvdW5kIGluIHRoZSBldmVudApsb29wIG9yIGZvcmNlcyBhIGxheW91
dCBpZiBuZWNlc3NhcnkuCgoqIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvdHJlZS11cGRhdGUt
d2l0aC1kaXJ0eS1sYXlvdXQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKiBMYXlvdXRUZXN0cy9hY2Nl
c3NpYmlsaXR5L3RyZWUtdXBkYXRlLXdpdGgtZGlydHktbGF5b3V0Lmh0bWw6IEFkZGVkLgoqIExh
eW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvVGVzdEV4cGVjdGF0aW9uczogRGlzYWJsZSBuZXcgdGVz
dC4KKiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9pb3MvVGVzdEV4cGVjdGF0aW9uczogRW5hYmxlIG5l
dyB0ZXN0LgoqIExheW91dFRlc3RzL3BsYXRmb3JtL2lvcy9hY2Nlc3NpYmlsaXR5L3RyZWUtdXBk
YXRlLXdpdGgtZGlydHktbGF5b3V0LWV4cGVjdGVkLnR4dDogQWRkZWQuCiogU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BWENvcmVPYmplY3QuY3BwOgooV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eTo6aW5SZW5kZXJUcmVlT3JTdHlsZVVwZGF0ZSk6IEFkZGVkLgoqIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQVhDb3JlT2JqZWN0Lmg6CiogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BWE9iamVjdENhY2hlLmNwcDoKKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnBlcmZvcm1EZWZl
cnJlZENhY2hlVXBkYXRlKToKKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnBlcmZvcm1DYWNoZVVw
ZGF0ZVRpbWVyRmlyZWQpOiBEZWxldGVkLgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QVhPYmplY3RDYWNoZS5oOgooV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6cGVyZm9ybUNhY2hlVXBk
YXRlVGltZXJGaXJlZCk6CiogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5T2JqZWN0LmNwcDoKKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OnVwZGF0ZUJhY2tp
bmdTdG9yZSk6CiogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJ
c29sYXRlZFRyZWUuY3BwOgooV2ViQ29yZTo6QVhJc29sYXRlZFRyZWU6OmNyZWF0ZSk6Ci0tLQog
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWENvcmVPYmplY3QuY3BwIHwgMTMgKysrKysK
IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhDb3JlT2JqZWN0LmggICB8ICAyICsKIC4u
Li9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAgICB8IDIzICsrKysrLS0t
CiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaCAgfCAgNCArLQog
Li4uL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAgICAgIHwgIDIgKy0KIC4u
Li9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcCAgICAgICAgICAgICB8ICAzICsKIC4uLi9p
c29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWUuY3BwICAgICAgICAgICB8ICAyICstCiAuLi50cmVl
LXVwZGF0ZS13aXRoLWRpcnR5LWxheW91dC1leHBlY3RlZC50eHQgfCAzNiArKysrKysrKysrKysK
IC4uLi90cmVlLXVwZGF0ZS13aXRoLWRpcnR5LWxheW91dC5odG1sICAgICAgICB8IDU2ICsrKysr
KysrKysrKysrKysrKysKIExheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvVGVzdEV4cGVjdGF0aW9u
cyAgICB8ICAxICsKIExheW91dFRlc3RzL3BsYXRmb3JtL2lvcy9UZXN0RXhwZWN0YXRpb25zICAg
ICB8ICAxICsKIC4uLnRyZWUtdXBkYXRlLXdpdGgtZGlydHktbGF5b3V0LWV4cGVjdGVkLnR4dCB8
IDI0ICsrKysrKysrCiAxMiBmaWxlcyBjaGFuZ2VkLCAxNTUgaW5zZXJ0aW9ucygrKSwgMTIgZGVs
ZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS90
cmVlLXVwZGF0ZS13aXRoLWRpcnR5LWxheW91dC1leHBlY3RlZC50eHQKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3RyZWUtdXBkYXRlLXdpdGgtZGlydHktbGF5
b3V0Lmh0bWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9pb3MvYWNj
ZXNzaWJpbGl0eS90cmVlLXVwZGF0ZS13aXRoLWRpcnR5LWxheW91dC1leHBlY3RlZC50eHQKCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYQ29yZU9iamVjdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYQ29yZU9iamVjdC5jcHAKaW5kZXggOGYy
YjE4MjdlMzNlLi44NzQ5ZTNlNzc1ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQVhDb3JlT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FYQ29yZU9iamVjdC5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkFYQ29yZU9iamVjdC5oIgorI2luY2x1ZGUgIkxvY2FsRnJhbWVWaWV3
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTk1LDQgKzU5NiwxNiBAQCB2b2lkIEFY
Q29yZU9iamVjdDo6YXBwZW5kUmFkaW9CdXR0b25Hcm91cE1lbWJlcnMoQWNjZXNzaWJpbGl0eUNo
aWxkcmVuVmVjdG9yJiBsaQogICAgIH0KIH0KIAorbmFtZXNwYWNlIEFjY2Vzc2liaWxpdHkgewor
Citib29sIGluUmVuZGVyVHJlZU9yU3R5bGVVcGRhdGUoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50
KQoreworICAgIGlmIChkb2N1bWVudC5pblN0eWxlUmVjYWxjKCkgfHwgZG9jdW1lbnQuaW5SZW5k
ZXJUcmVlVXBkYXRlKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGF1dG8qIHZpZXcgPSBk
b2N1bWVudC52aWV3KCk7CisgICAgcmV0dXJuIHZpZXcgJiYgdmlldy0+bGF5b3V0Q29udGV4dCgp
LmlzSW5SZW5kZXJUcmVlTGF5b3V0KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEFjY2Vzc2liaWxp
dHkKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BWENvcmVPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQVhDb3JlT2JqZWN0LmgKaW5kZXggYzk1YzY0ZmNiMmE2Li43NjNjMDY0ZmExMDQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhDb3JlT2JqZWN0LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWENvcmVPYmplY3QuaApAQCAtMTY2Miw2ICsx
NjYyLDggQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIFQgcmV0cmll
dmVBdXRvcmVsZWFzZWRWYWx1ZUZyb21NYWluVGhyZWEKIH0KICNlbmRpZgogCitib29sIGluUmVu
ZGVyVHJlZU9yU3R5bGVVcGRhdGUoY29uc3QgRG9jdW1lbnQmKTsKKwogfSAvLyBuYW1lc3BhY2Ug
QWNjZXNzaWJpbGl0eQogCiBpbmxpbmUgYm9vbCBBWENvcmVPYmplY3Q6OmlzRGVzY2VuZGFudE9m
T2JqZWN0KGNvbnN0IEFYQ29yZU9iamVjdCogYXhPYmplY3QpIGNvbnN0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAppbmRleCA3OGEzMzBkYTRjNWMu
LmNiNjcwMmNjM2IwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
WE9iamVjdENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2Jq
ZWN0Q2FjaGUuY3BwCkBAIC0zOTY1LDE1ICszOTY1LDYgQEAgYm9vbCBBWE9iamVjdENhY2hlOjpu
b2RlSXNUZXh0Q29udHJvbChjb25zdCBOb2RlKiBub2RlKQogICAgIHJldHVybiBheE9iamVjdCAm
JiBheE9iamVjdC0+aXNUZXh0Q29udHJvbCgpOwogfQogCi12b2lkIEFYT2JqZWN0Q2FjaGU6OnBl
cmZvcm1DYWNoZVVwZGF0ZVRpbWVyRmlyZWQoKQotewotICAgIC8vIElmIHRoZXJlJ3MgYSBwZW5k
aW5nIGxheW91dCwgbGV0IHRoZSBsYXlvdXQgdHJpZ2dlciB0aGUgQVggdXBkYXRlLgotICAgIGlm
ICghZG9jdW1lbnQoKS52aWV3KCkgfHwgZG9jdW1lbnQoKS52aWV3KCktPm5lZWRzTGF5b3V0KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIHBlcmZvcm1EZWZlcnJlZENhY2hlVXBkYXRlKCk7Ci19
Ci0KIHZvaWQgQVhPYmplY3RDYWNoZTo6cGVyZm9ybURlZmVycmVkQ2FjaGVVcGRhdGUoKQogewog
ICAgIEFYVFJBQ0UobWFrZVN0cmluZygiQVhPYmplY3RDYWNoZTo6cGVyZm9ybURlZmVycmVkQ2Fj
aGVVcGRhdGUgMHgiX3MsIGhleChyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4odGhpcykpKSk7
CkBAIC0zOTgzLDYgKzM5NzQsMjAgQEAgdm9pZCBBWE9iamVjdENhY2hlOjpwZXJmb3JtRGVmZXJy
ZWRDYWNoZVVwZGF0ZSgpCiAgICAgfQogICAgIFNldEZvclNjb3BlIHBlcmZvcm1pbmdEZWZlcnJl
ZENhY2hlVXBkYXRlKG1fcGVyZm9ybWluZ0RlZmVycmVkQ2FjaGVVcGRhdGUsIHRydWUpOwogCisg
ICAgaWYgKCFkb2N1bWVudCgpLnZpZXcoKSB8fCBkb2N1bWVudCgpLnZpZXcoKS0+bmVlZHNMYXlv
dXQoKSkgeworICAgICAgICAvLyBMYXlvdXQgYmVjYW1lIGRpcnR5IHdoaWxlIHdhaXRpbmcgdG8g
cGVyZm9ybURlZmVycmVkQ2FjaGVVcGRhdGUsIGFuZCB3ZSByZXF1aXJlIGNsZWFuIGxheW91dAor
ICAgICAgICAvLyB0byB1cGRhdGUgdGhlIGFjY2Vzc2liaWxpdHkgdHJlZSBjb3JyZWN0bHkgaW4g
dGhpcyBmdW5jdGlvbi4KKyAgICAgICAgaWYgKG1fY2FjaGVVcGRhdGVEZWZlcnJlZENvdW50ID49
IDMgJiYgIUFjY2Vzc2liaWxpdHk6OmluUmVuZGVyVHJlZU9yU3R5bGVVcGRhdGUoZG9jdW1lbnQo
KSkpIHsKKyAgICAgICAgICAgIC8vIExheW91dCBpcyBiZWluZyB0aHJhc2hlZCBiZWZvcmUgd2Ug
Z2V0IGEgY2hhbmNlIHRvIHVwZGF0ZSwgc28gc3RvcCB3YWl0aW5nIGFuZCBqdXN0IGZvcmNlIGl0
LgorICAgICAgICAgICAgbV9jYWNoZVVwZGF0ZURlZmVycmVkQ291bnQgPSAwOworICAgICAgICAg
ICAgZG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFdhaXQgZm9yIGxheW91dCB0byB0cmlnZ2Vy
IGFub3RoZXIgYXN5bmMgY2FjaGUgdXBkYXRlLgorICAgICAgICAgICAgKyttX2NhY2hlVXBkYXRl
RGVmZXJyZWRDb3VudDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKwog
ICAgIGJvb2wgbWFya2VkUmVsYXRpb25zRGlydHkgPSBmYWxzZTsKICAgICBhdXRvIG1hcmtSZWxh
dGlvbnNEaXJ0eSA9IFsmXSAoKSB7CiAgICAgICAgIGlmICghbWFya2VkUmVsYXRpb25zRGlydHkp
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNo
ZS5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgKaW5kZXgg
M2U4MDZjYjFhODQwLi5jODE5ZjM4MTRkMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQVhPYmplY3RDYWNoZS5oCkBAIC01ODcsNyArNTg3LDcgQEAgcHJpdmF0ZToKIAogICAg
IHZvaWQgZm9jdXNDdXJyZW50TW9kYWwoKTsKICAgICAKLSAgICB2b2lkIHBlcmZvcm1DYWNoZVVw
ZGF0ZVRpbWVyRmlyZWQoKTsKKyAgICB2b2lkIHBlcmZvcm1DYWNoZVVwZGF0ZVRpbWVyRmlyZWQo
KSB7IHBlcmZvcm1EZWZlcnJlZENhY2hlVXBkYXRlKCk7IH0KIAogICAgIHZvaWQgcG9zdFRleHRT
dGF0ZUNoYW5nZU5vdGlmaWNhdGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0KiwgY29uc3QgQVhUZXh0
U3RhdGVDaGFuZ2VJbnRlbnQmLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CiAKQEAgLTczNCw2
ICs3MzQsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9wZXJmb3JtaW5nRGVmZXJyZWRDYWNoZVVw
ZGF0ZSB7IGZhbHNlIH07CiAgICAgZG91YmxlIG1fbG9hZGluZ1Byb2dyZXNzIHsgMCB9OwogCisg
ICAgdW5zaWduZWQgbV9jYWNoZVVwZGF0ZURlZmVycmVkQ291bnQgeyAwIH07CisKICAgICAvLyBS
ZWxhdGlvbnNoaXBzIGJldHdlZW4gb2JqZWN0cy4KICAgICBIYXNoTWFwPEFYSUQsIEFYUmVsYXRp
b25zPiBtX3JlbGF0aW9uczsKICAgICBib29sIG1fcmVsYXRpb25zTmVlZFVwZGF0ZSB7IHRydWUg
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlP
YmplY3QuY3BwCmluZGV4IGIwM2Y2ZTZjYTY1Ni4uM2JmMzlmZGI2ZjNhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKQEAg
LTIwNjcsNyArMjA2Nyw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eU9iamVjdDo6dXBkYXRlQmFja2lu
Z1N0b3JlKCkKICAgICAvLyBVcGRhdGluZyB0aGUgbGF5b3V0IG1heSBkZWxldGUgdGhpcyBvYmpl
Y3QuCiAgICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IHByb3RlY3RlZFRoaXModGhpcyk7
CiAgICAgaWYgKGF1dG8qIGRvY3VtZW50ID0gdGhpcy0+ZG9jdW1lbnQoKSkgewotICAgICAgICBp
ZiAoIWRvY3VtZW50LT52aWV3KCktPmxheW91dENvbnRleHQoKS5pc0luUmVuZGVyVHJlZUxheW91
dCgpICYmICFkb2N1bWVudC0+aW5SZW5kZXJUcmVlVXBkYXRlKCkgJiYgIWRvY3VtZW50LT5pblN0
eWxlUmVjYWxjKCkpCisgICAgICAgIGlmICghQWNjZXNzaWJpbGl0eTo6aW5SZW5kZXJUcmVlT3JT
dHlsZVVwZGF0ZSgqZG9jdW1lbnQpKQogICAgICAgICAgICAgZG9jdW1lbnQtPnVwZGF0ZUxheW91
dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAK
aW5kZXggMGMyNzJhNDk1NGM3Li4zZTcyYmRhZDVmMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcApA
QCAtMTA1Nyw2ICsxMDU3LDkgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpjb21w
dXRlQWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpIGNvbnN0CiAgICAgaWYgKCFtX3JlbmRlcmVyKQog
ICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNvbXB1dGVBY2Nlc3NpYmls
aXR5SXNJZ25vcmVkKCk7CiAKKyAgICAvLyBJZiBsYXlvdXQgaXMgZGlydHksIHdlIG1heSBtYWtl
IGluY29ycmVjdCBkZWNpc2lvbnMgYWJvdXQgd2hldGhlciB0byBpZ25vcmUgdGhpcyBvYmplY3Qu
CisgICAgQVNTRVJUKCFtX3JlbmRlcmVyLT5uZWVkc0xheW91dCgpKTsKKwogICAgIC8vIENoZWNr
IGZpcnN0IGlmIGFueSBvZiB0aGUgY29tbW9uIHJlYXNvbnMgY2F1c2UgdGhpcyBlbGVtZW50IHRv
IGJlIGlnbm9yZWQuCiAgICAgLy8gVGhlbiBwcm9jZXNzIG90aGVyIHVzZSBjYXNlcyB0aGF0IG5l
ZWQgdG8gYmUgYXBwbGllZCB0byBhbGwgdGhlIHZhcmlvdXMgcm9sZXMKICAgICAvLyB0aGF0IEFj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3RzIHRha2Ugb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5jcHAK
aW5kZXggOGY4NjA1MjU3ODUxLi40N2QxNTNmOTQ0ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5j
cHAKQEAgLTE0NCw3ICsxNDQsNyBAQCBSZWY8QVhJc29sYXRlZFRyZWU+IEFYSXNvbGF0ZWRUcmVl
OjpjcmVhdGUoQVhPYmplY3RDYWNoZSYgYXhPYmplY3RDYWNoZSkKICAgICB9CiAKICAgICBhdXRv
JiBkb2N1bWVudCA9IGF4T2JqZWN0Q2FjaGUuZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50
LnZpZXcoKS0+bGF5b3V0Q29udGV4dCgpLmlzSW5SZW5kZXJUcmVlTGF5b3V0KCkgJiYgIWRvY3Vt
ZW50LmluUmVuZGVyVHJlZVVwZGF0ZSgpICYmICFkb2N1bWVudC5pblN0eWxlUmVjYWxjKCkpCisg
ICAgaWYgKCFBY2Nlc3NpYmlsaXR5OjppblJlbmRlclRyZWVPclN0eWxlVXBkYXRlKGRvY3VtZW50
KSkKICAgICAgICAgZG9jdW1lbnQudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRz
KCk7CiAKICAgICB0cmVlLT5tX21heFRyZWVEZXB0aCA9IGRvY3VtZW50LnNldHRpbmdzKCkubWF4
aW11bUhUTUxQYXJzZXJET01UcmVlRGVwdGgoKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Fj
Y2Vzc2liaWxpdHkvdHJlZS11cGRhdGUtd2l0aC1kaXJ0eS1sYXlvdXQtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS90cmVlLXVwZGF0ZS13aXRoLWRpcnR5LWxheW91dC1l
eHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi40MmZi
ZTQ1ZTY2MzYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3Ry
ZWUtdXBkYXRlLXdpdGgtZGlydHktbGF5b3V0LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDM2IEBA
CitUaGlzIHRlc3QgZW5zdXJlcyB3ZSBkb24ndCBtYWtlIGluY29ycmVjdCB1cGRhdGVzIHRvIHRo
ZSBhY2Nlc3NpYmlsaXR5IHRyZWUgZHVlIHRvIGRpcnR5IGxheW91dC4KKworCit7QVhSb2xlOiBB
WFdlYkFyZWF9CisKK3sjbWFpbiBBWFJvbGU6IEFYR3JvdXB9CisKK3tBWFJvbGU6IEFYQnV0dG9u
fQorCit7QVhSb2xlOiBBWEdyb3VwfQorCit7QVhSb2xlOiBBWFN0YXRpY1RleHQgQVhWYWx1ZTog
UGFyYWdyYXBoIG9uZX0KKwore0FYUm9sZTogQVhHcm91cH0KKwore0FYUm9sZTogQVhTdGF0aWNU
ZXh0IEFYVmFsdWU6IFBhcmFncmFwaCB0d299CisKK3tBWFJvbGU6IEFYR3JvdXB9CisKK3tBWFJv
bGU6IEFYU3RhdGljVGV4dCBBWFZhbHVlOiBQYXJhZ3JhcGggdGhyZWV9CisKK3tBWFJvbGU6IEFY
R3JvdXB9CisKK3tBWFJvbGU6IEFYU3RhdGljVGV4dCBBWFZhbHVlOiBQYXJhZ3JhcGggZm91cn0K
KworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCitCdXR0
b24gb25lCitQYXJhZ3JhcGggb25lCisKK1BhcmFncmFwaCB0d28KKworUGFyYWdyYXBoIHRocmVl
CisKK1BhcmFncmFwaCBmb3VyCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5
L3RyZWUtdXBkYXRlLXdpdGgtZGlydHktbGF5b3V0Lmh0bWwgYi9MYXlvdXRUZXN0cy9hY2Nlc3Np
YmlsaXR5L3RyZWUtdXBkYXRlLXdpdGgtZGlydHktbGF5b3V0Lmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4xOGVmYzg0NGZmODAKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3RyZWUtdXBkYXRlLXdpdGgtZGlydHktbGF5b3V0
Lmh0bWwKQEAgLTAsMCArMSw1NiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9E
VEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMv
YWNjZXNzaWJpbGl0eS1oZWxwZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291
cmNlcy9qcy10ZXN0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IGlkPSJib2R5Ij4KKwor
PG1haW4gaWQ9Im1haW4iPgorICAgIDxidXR0b24+QnV0dG9uIG9uZTwvYnV0dG9uPgorICAgIDxw
PlBhcmFncmFwaCBvbmU8L3A+CisgICAgPHA+UGFyYWdyYXBoIHR3bzwvcD4KKyAgICA8cD5QYXJh
Z3JhcGggdGhyZWU8L3A+Cis8L21haW4+CisKKzxzY3JpcHQ+Cit2YXIgb3V0cHV0ID0gIlRoaXMg
dGVzdCBlbnN1cmVzIHdlIGRvbid0IG1ha2UgaW5jb3JyZWN0IHVwZGF0ZXMgdG8gdGhlIGFjY2Vz
c2liaWxpdHkgdHJlZSBkdWUgdG8gZGlydHkgbGF5b3V0LlxuXG4iOworCitpZiAod2luZG93LmFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyKSB7CisgICAgd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVl
OworICAgIC8vIFRvdWNoIHRoZSB0cmVlIHRvIGVuc3VyZSB0aGUgQVhPYmplY3RDYWNoZSBpcyBj
cmVhdGVkLgorICAgIHRvdWNoQWNjZXNzaWJpbGl0eVRyZWUoYWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXIucm9vdEVsZW1lbnQpOworCisgICAgdmFyIHNjYWxlID0gMC4xOworICAgIC8vIFJlcGVhdGVk
bHkgZGlydHkgbGF5b3V0IGJ5IGNoYW5naW5nIHRoZSBwYWdlIHNjYWxvciBmYWN0b3IuCisgICAg
c2V0SW50ZXJ2YWwoYXN5bmMgZnVuY3Rpb24gKCkgeworICAgICAgICBpbnRlcm5hbHMuc2V0UGFn
ZVNjYWxlRmFjdG9yKHNjYWxlLCAwLCAwKTsKKworICAgICAgICBzY2FsZSArPSAwLjAxOworICAg
ICAgICBpZiAoc2NhbGUgPj0gNSkKKyAgICAgICAgICAgIHNjYWxlID0gMC4xOworICAgIH0sIDAp
OworCisgICAgdmFyIHRyYXZlcnNhbE91dHB1dDsKKyAgICBzZXRUaW1lb3V0KGFzeW5jIGZ1bmN0
aW9uKCkgeworICAgICAgICBpbnRlcm5hbHMuc2V0UGFnZVNjYWxlRmFjdG9yKDIsIDAsIDApOwor
CisgICAgICAgIGNvbnN0IG5ld1BhcmFncmFwaCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInAi
KTsKKyAgICAgICAgbmV3UGFyYWdyYXBoLmlubmVyVGV4dCA9ICJQYXJhZ3JhcGggZm91ciI7Cisg
ICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWluIikuYXBwZW5kQ2hpbGQobmV3UGFy
YWdyYXBoKTsKKyAgICAgICAgaW50ZXJuYWxzLnNldFBhZ2VTY2FsZUZhY3RvcigyLjUsIDAsIDAp
OworCisgICAgICAgIGF3YWl0IHdhaXRGb3IoKCkgPT4geworICAgICAgICAgICAgdHJhdmVyc2Fs
T3V0cHV0ID0gZHVtcEFYU2VhcmNoVHJhdmVyc2FsKGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLnJv
b3RFbGVtZW50KTsKKyAgICAgICAgICAgIHJldHVybiB0cmF2ZXJzYWxPdXRwdXQuaW5jbHVkZXMo
IlBhcmFncmFwaCBmb3VyIik7CisgICAgICAgIH0pOworICAgICAgICBvdXRwdXQgKz0gdHJhdmVy
c2FsT3V0cHV0OworCisgICAgICAgIGRlYnVnKG91dHB1dCk7CisgICAgICAgIGZpbmlzaEpTVGVz
dCgpOworICAgIH0sIDApOworfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CisKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91
dFRlc3RzL3BsYXRmb3JtL2dsaWIvVGVzdEV4cGVjdGF0aW9ucwppbmRleCAyNzBhZWRiZDFhNWIu
LjUyYzE5MTU1MjhlOCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9UZXN0
RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvVGVzdEV4cGVjdGF0
aW9ucwpAQCAtNTE2LDYgKzUxNiw3IEBAIGFjY2Vzc2liaWxpdHkvZGlzcGxheS1jb250ZW50cy9z
ZWFyY2gtdHJhdmVyc2FsLmh0bWwgWyBTa2lwIF0KIGFjY2Vzc2liaWxpdHkvZW1wdHktdGV4dC11
bmRlci1lbGVtZW50LWNhY2hlZC5odG1sIFsgU2tpcCBdCiBhY2Nlc3NpYmlsaXR5L3NlYXJjaC10
cmF2ZXJzYWwtYWZ0ZXItcm9sZS1jaGFuZ2UuaHRtbCBbIFNraXAgXQogYWNjZXNzaWJpbGl0eS90
YWJsZS1zZWFyY2gtdHJhdmVyc2FsLmh0bWwgWyBTa2lwIF0KK2FjY2Vzc2liaWxpdHkvdHJlZS11
cGRhdGUtd2l0aC1kaXJ0eS1sYXlvdXQuaHRtbCBbIFNraXAgXQogYWNjZXNzaWJpbGl0eS9keW5h
bWljYWxseS1jaGFuZ2luZy1pZnJhbWUtcmVtYWlucy1hY2Nlc3NpYmxlLmh0bWwgWyBTa2lwIF0K
IGFjY2Vzc2liaWxpdHkvaWdub3JlLW1vZGFscy13aXRob3V0LWFueS1jb250ZW50Lmh0bWwgWyBT
a2lwIF0KIGFjY2Vzc2liaWxpdHkvaWZyYW1lLXdpdGgtcm9sZS5odG1sIFsgU2tpcCBdCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9pb3MvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91
dFRlc3RzL3BsYXRmb3JtL2lvcy9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDVmN2RhNWE5NmQ1Mi4u
NDZhMzU5YTdjYjYyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9pb3MvVGVzdEV4
cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9pb3MvVGVzdEV4cGVjdGF0aW9u
cwpAQCAtMjI0Nyw2ICsyMjQ3LDcgQEAgYWNjZXNzaWJpbGl0eS90YWJsZS1kaXNwbGF5LWJsb2Nr
Lmh0bWwgWyBQYXNzIF0KIGFjY2Vzc2liaWxpdHkvdGFibGUtZGlzcGxheS1mbGV4Lmh0bWwgWyBQ
YXNzIF0KIGFjY2Vzc2liaWxpdHkvdGFibGUtZGlzcGxheS1ncmlkLmh0bWwgWyBQYXNzIF0KIGFj
Y2Vzc2liaWxpdHkvdGFibGUtZGlzcGxheS1pbmxpbmUtYmxvY2suaHRtbCBbIFBhc3MgXQorYWNj
ZXNzaWJpbGl0eS90cmVlLXVwZGF0ZS13aXRoLWRpcnR5LWxheW91dC5odG1sIFsgUGFzcyBdCiBh
Y2Nlc3NpYmlsaXR5L3VybC10ZXN0Lmh0bWwgWyBQYXNzIF0KIGFjY2Vzc2liaWxpdHkvdmlkZW8t
ZWxlbWVudC11cmwtYXR0cmlidXRlLmh0bWwgWyBQYXNzIF0KIGFjY2Vzc2liaWxpdHkvdmlzaWJs
ZS1jaGFyYWN0ZXItcmFuZ2UtYmFzaWMuaHRtbCBbIFBhc3MgXQpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vaW9zL2FjY2Vzc2liaWxpdHkvdHJlZS11cGRhdGUtd2l0aC1kaXJ0eS1s
YXlvdXQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vaW9zL2FjY2Vzc2liaWxp
dHkvdHJlZS11cGRhdGUtd2l0aC1kaXJ0eS1sYXlvdXQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMWJkYjAwYWJkNTliCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vaW9zL2FjY2Vzc2liaWxpdHkvdHJlZS11cGRhdGUt
d2l0aC1kaXJ0eS1sYXlvdXQtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjQgQEAKK1RoaXMgdGVz
dCBlbnN1cmVzIHdlIGRvbid0IG1ha2UgaW5jb3JyZWN0IHVwZGF0ZXMgdG8gdGhlIGFjY2Vzc2li
aWxpdHkgdHJlZSBkdWUgdG8gZGlydHkgbGF5b3V0LgorCisKK3tCdXR0b259CisKK3tTdGF0aWNU
ZXh0IEFYTGFiZWw6IFBhcmFncmFwaCBvbmV9CisKK3tTdGF0aWNUZXh0IEFYTGFiZWw6IFBhcmFn
cmFwaCB0d299CisKK3tTdGF0aWNUZXh0IEFYTGFiZWw6IFBhcmFncmFwaCB0aHJlZX0KKwore1N0
YXRpY1RleHQgQVhMYWJlbDogUGFyYWdyYXBoIGZvdXJ9CisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFy
c2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorQnV0dG9uIG9uZQorUGFyYWdyYXBoIG9uZQor
CitQYXJhZ3JhcGggdHdvCisKK1BhcmFncmFwaCB0aHJlZQorCitQYXJhZ3JhcGggZm91cgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>469577</attachid>
            <date>2024-01-27 19:22:02 -0800</date>
            <delta_ts>2024-01-28 01:13:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-268239-20240127192201.patch</filename>
            <type>text/plain</type>
            <size>17501</size>
            <attacher name="Tyler Wilcock">tyler_w</attacher>
            
              <data encoding="base64">RnJvbSAyOTBjOWNlMmQ3MGQxYjI1NWM1MmVkZTE4YzgwOGY4YTRkZTQzMTk1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBUeWxlciBXaWxjb2NrIDx0eWxlcl93QGFwcGxlLmNvbT4KRGF0
ZTogU2F0LCAyNyBKYW4gMjAyNCAxNzo0OTo0NSAtMDgwMApTdWJqZWN0OiBbUEFUQ0hdIEFYOiBE
ZXBlbmRpbmcgb24gdGhlIHRpbWluZyBvZgogRG9jdW1lbnQ6OmZsdXNoRGVmZXJyZWRBWE9iamVj
dENhY2hlVXBkYXRlKCksCiBBWE9iamVjdENhY2hlOjpwZXJmb3JtRGVmZXJyZWRDYWNoZVVwZGF0
ZSBjYW4gYmUgcnVuIHdpdGggZGlydHkgbGF5b3V0CiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjY4MjM5IHJkYXI6Ly9wcm9ibGVtLzEyMTc2MDQyNwoKUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCgpJbiBidWc6CgpodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjU2NDAzIChEZWZlciBBWCBvYmplY3QgY2FjaGUgdXBkYXRlIGFzIGFuIGV2
ZW50IGxvb3AgdGFzayBpbnN0ZWFkIG9mIGEgcG9zdCBsYXlvdXQgdGFzaykKCkFYT2JqZWN0Q2Fj
aGU6OnBlcmZyb21EZWZlcnJlZENhY2hlVXBkYXRlIHdhcyBtb3ZlZCBmcm9tIGJlaW5nIGEgc3lu
Y2hyb25vdXMgcG9zdC1sYXlvdXQgdGFzayB0byBhbiBhc3luY2hyb25vdXMgb25lLApydW5uaW5n
IHdoZW4gcG9zc2libGUgdmlhIHRoZSBFdmVudExvb3AuCgpUaGUgcHJvYmxlbSB3aXRoIHRoaXMg
aXMgdGhhdCBieSB0aGUgdGltZSBEb2N1bWVudDo6Zmx1c2hEZWZlcnJlZEFYT2JqZWN0Q2FjaGVV
cGRhdGUoKSBhY3R1YWxseSBmaXJlcywgbGF5b3V0IG1heSBoYXZlCmJlY29tZSBkaXJ0eSBhZ2Fp
biwgd2hpY2ggbWVhbnMgQVhPYmplY3RDYWNoZTo6cGVyZm9ybURlZmVycmVkQ2FjaGVVcGRhdGUg
bWFrZXMgaW5jb3JyZWN0IHVwZGF0ZXMgdG8gdGhlIGFjY2Vzc2liaWxpdHkKdHJlZS4gQXMgb25l
IHNwZWNpZmljIGV4YW1wbGUsIGl0IGNhbiBjYXVzZSB1cyB0byBjb21wdXRlIHRoZSB3cm9uZyBp
Z25vcmVkIHZhbHVlIGZvciBSZW5kZXJUZXh0cywgYXMgd2UgY2hlY2sKUmVuZGVyVGV4dDo6aGFz
UmVuZGVyZWRUZXh0IHdoaWNoIG1heSB1bmV4cGVjdGVkbHkgcmV0dXJuIGZhbHNlIG9ubHkgYmVj
YXVzZSB0aGUgbGF5b3V0IGlzIGRpcnR5LgoKV2l0aCB0aGlzIHBhdGNoLCBwZXJmb3JtRGVmZXJy
ZWRDYWNoZVVwZGF0ZSBub3cgZGV0ZWN0cyB3aGVuIGxheW91dCBpcyBkaXJ0eSwgYW5kIGVpdGhl
ciB3YWl0cyBhbm90aGVyIHJvdW5kIGluIHRoZSBldmVudApsb29wIG9yIGZvcmNlcyBhIGxheW91
dCBpZiBuZWNlc3NhcnkuCgoqIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvdHJlZS11cGRhdGUt
d2l0aC1kaXJ0eS1sYXlvdXQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKiBMYXlvdXRUZXN0cy9hY2Nl
c3NpYmlsaXR5L3RyZWUtdXBkYXRlLXdpdGgtZGlydHktbGF5b3V0Lmh0bWw6IEFkZGVkLgoqIExh
eW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvVGVzdEV4cGVjdGF0aW9uczogRGlzYWJsZSBuZXcgdGVz
dC4KKiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9pb3MvVGVzdEV4cGVjdGF0aW9uczogRW5hYmxlIG5l
dyB0ZXN0LgoqIExheW91dFRlc3RzL3BsYXRmb3JtL2lvcy9hY2Nlc3NpYmlsaXR5L3RyZWUtdXBk
YXRlLXdpdGgtZGlydHktbGF5b3V0LWV4cGVjdGVkLnR4dDogQWRkZWQuCiogU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BWENvcmVPYmplY3QuY3BwOgooV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eTo6aW5SZW5kZXJUcmVlT3JTdHlsZVVwZGF0ZSk6IEFkZGVkLgoqIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQVhDb3JlT2JqZWN0Lmg6CiogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BWE9iamVjdENhY2hlLmNwcDoKKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnBlcmZvcm1EZWZl
cnJlZENhY2hlVXBkYXRlKToKKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnBlcmZvcm1DYWNoZVVw
ZGF0ZVRpbWVyRmlyZWQpOiBEZWxldGVkLgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QVhPYmplY3RDYWNoZS5oOgooV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6cGVyZm9ybUNhY2hlVXBk
YXRlVGltZXJGaXJlZCk6CiogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5T2JqZWN0LmNwcDoKKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OnVwZGF0ZUJhY2tp
bmdTdG9yZSk6CiogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJ
c29sYXRlZFRyZWUuY3BwOgooV2ViQ29yZTo6QVhJc29sYXRlZFRyZWU6OmNyZWF0ZSk6CiogTGF5
b3V0VGVzdHMvcmVzb3VyY2VzL2FjY2Vzc2liaWxpdHktaGVscGVyLmpzOgotLS0KIFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhDb3JlT2JqZWN0LmNwcCB8IDEzICsrKysrCiBTb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYQ29yZU9iamVjdC5oICAgfCAgMiArCiAuLi4vV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwICAgfCAyMyArKysrKy0tLQogU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmggIHwgIDQgKy0KIC4uLi9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwICAgICB8ICAyICstCiAuLi4vQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdC5jcHAgICAgICAgICAgICAgfCAgMyArCiAuLi4vaXNvbGF0ZWR0
cmVlL0FYSXNvbGF0ZWRUcmVlLmNwcCAgICAgICAgICAgfCAgMiArLQogLi4udHJlZS11cGRhdGUt
d2l0aC1kaXJ0eS1sYXlvdXQtZXhwZWN0ZWQudHh0IHwgMzYgKysrKysrKysrKysrCiAuLi4vdHJl
ZS11cGRhdGUtd2l0aC1kaXJ0eS1sYXlvdXQuaHRtbCAgICAgICAgfCA1OCArKysrKysrKysrKysr
KysrKysrCiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL1Rlc3RFeHBlY3RhdGlvbnMgICAgfCAg
MSArCiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9pb3MvVGVzdEV4cGVjdGF0aW9ucyAgICAgfCAgMSAr
CiAuLi50cmVlLXVwZGF0ZS13aXRoLWRpcnR5LWxheW91dC1leHBlY3RlZC50eHQgfCAyNCArKysr
KysrKwogTGF5b3V0VGVzdHMvcmVzb3VyY2VzL2FjY2Vzc2liaWxpdHktaGVscGVyLmpzIHwgNDAg
KysrKysrKystLS0tLQogMTMgZmlsZXMgY2hhbmdlZCwgMTgzIGluc2VydGlvbnMoKyksIDI2IGRl
bGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkv
dHJlZS11cGRhdGUtd2l0aC1kaXJ0eS1sYXlvdXQtZXhwZWN0ZWQudHh0CiBjcmVhdGUgbW9kZSAx
MDA2NDQgTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS90cmVlLXVwZGF0ZS13aXRoLWRpcnR5LWxh
eW91dC5odG1sCiBjcmVhdGUgbW9kZSAxMDA2NDQgTGF5b3V0VGVzdHMvcGxhdGZvcm0vaW9zL2Fj
Y2Vzc2liaWxpdHkvdHJlZS11cGRhdGUtd2l0aC1kaXJ0eS1sYXlvdXQtZXhwZWN0ZWQudHh0Cgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWENvcmVPYmplY3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWENvcmVPYmplY3QuY3BwCmluZGV4IDhm
MmIxODI3ZTMzZS4uODc0OWUzZTc3NWQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FYQ29yZU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BWENvcmVPYmplY3QuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJBWENvcmVPYmplY3QuaCIKKyNpbmNsdWRlICJMb2NhbEZyYW1lVmll
dy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTU5NSw0ICs1OTYsMTYgQEAgdm9pZCBB
WENvcmVPYmplY3Q6OmFwcGVuZFJhZGlvQnV0dG9uR3JvdXBNZW1iZXJzKEFjY2Vzc2liaWxpdHlD
aGlsZHJlblZlY3RvciYgbGkKICAgICB9CiB9CiAKK25hbWVzcGFjZSBBY2Nlc3NpYmlsaXR5IHsK
KworYm9vbCBpblJlbmRlclRyZWVPclN0eWxlVXBkYXRlKGNvbnN0IERvY3VtZW50JiBkb2N1bWVu
dCkKK3sKKyAgICBpZiAoZG9jdW1lbnQuaW5TdHlsZVJlY2FsYygpIHx8IGRvY3VtZW50LmluUmVu
ZGVyVHJlZVVwZGF0ZSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBhdXRvKiB2aWV3ID0g
ZG9jdW1lbnQudmlldygpOworICAgIHJldHVybiB2aWV3ICYmIHZpZXctPmxheW91dENvbnRleHQo
KS5pc0luUmVuZGVyVHJlZUxheW91dCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBBY2Nlc3NpYmls
aXR5CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQVhDb3JlT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FYQ29yZU9iamVjdC5oCmluZGV4IGM5NWM2NGZjYjJhNi4uNzYzYzA2NGZhMTA0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYQ29yZU9iamVjdC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhDb3JlT2JqZWN0LmgKQEAgLTE2NjIsNiAr
MTY2Miw4IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGlubGluZSBUIHJldHJp
ZXZlQXV0b3JlbGVhc2VkVmFsdWVGcm9tTWFpblRocmVhCiB9CiAjZW5kaWYKIAorYm9vbCBpblJl
bmRlclRyZWVPclN0eWxlVXBkYXRlKGNvbnN0IERvY3VtZW50Jik7CisKIH0gLy8gbmFtZXNwYWNl
IEFjY2Vzc2liaWxpdHkKIAogaW5saW5lIGJvb2wgQVhDb3JlT2JqZWN0Ojppc0Rlc2NlbmRhbnRP
Zk9iamVjdChjb25zdCBBWENvcmVPYmplY3QqIGF4T2JqZWN0KSBjb25zdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKaW5kZXggNzhhMzMwZGE0YzVj
Li5jYjY3MDJjYzNiMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QVhPYmplY3RDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9i
amVjdENhY2hlLmNwcApAQCAtMzk2NSwxNSArMzk2NSw2IEBAIGJvb2wgQVhPYmplY3RDYWNoZTo6
bm9kZUlzVGV4dENvbnRyb2woY29uc3QgTm9kZSogbm9kZSkKICAgICByZXR1cm4gYXhPYmplY3Qg
JiYgYXhPYmplY3QtPmlzVGV4dENvbnRyb2woKTsKIH0KIAotdm9pZCBBWE9iamVjdENhY2hlOjpw
ZXJmb3JtQ2FjaGVVcGRhdGVUaW1lckZpcmVkKCkKLXsKLSAgICAvLyBJZiB0aGVyZSdzIGEgcGVu
ZGluZyBsYXlvdXQsIGxldCB0aGUgbGF5b3V0IHRyaWdnZXIgdGhlIEFYIHVwZGF0ZS4KLSAgICBp
ZiAoIWRvY3VtZW50KCkudmlldygpIHx8IGRvY3VtZW50KCkudmlldygpLT5uZWVkc0xheW91dCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBwZXJmb3JtRGVmZXJyZWRDYWNoZVVwZGF0ZSgpOwot
fQotCiB2b2lkIEFYT2JqZWN0Q2FjaGU6OnBlcmZvcm1EZWZlcnJlZENhY2hlVXBkYXRlKCkKIHsK
ICAgICBBWFRSQUNFKG1ha2VTdHJpbmcoIkFYT2JqZWN0Q2FjaGU6OnBlcmZvcm1EZWZlcnJlZENh
Y2hlVXBkYXRlIDB4Il9zLCBoZXgocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHRoaXMpKSkp
OwpAQCAtMzk4Myw2ICszOTc0LDIwIEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6cGVyZm9ybURlZmVy
cmVkQ2FjaGVVcGRhdGUoKQogICAgIH0KICAgICBTZXRGb3JTY29wZSBwZXJmb3JtaW5nRGVmZXJy
ZWRDYWNoZVVwZGF0ZShtX3BlcmZvcm1pbmdEZWZlcnJlZENhY2hlVXBkYXRlLCB0cnVlKTsKIAor
ICAgIGlmICghZG9jdW1lbnQoKS52aWV3KCkgfHwgZG9jdW1lbnQoKS52aWV3KCktPm5lZWRzTGF5
b3V0KCkpIHsKKyAgICAgICAgLy8gTGF5b3V0IGJlY2FtZSBkaXJ0eSB3aGlsZSB3YWl0aW5nIHRv
IHBlcmZvcm1EZWZlcnJlZENhY2hlVXBkYXRlLCBhbmQgd2UgcmVxdWlyZSBjbGVhbiBsYXlvdXQK
KyAgICAgICAgLy8gdG8gdXBkYXRlIHRoZSBhY2Nlc3NpYmlsaXR5IHRyZWUgY29ycmVjdGx5IGlu
IHRoaXMgZnVuY3Rpb24uCisgICAgICAgIGlmIChtX2NhY2hlVXBkYXRlRGVmZXJyZWRDb3VudCA+
PSAzICYmICFBY2Nlc3NpYmlsaXR5OjppblJlbmRlclRyZWVPclN0eWxlVXBkYXRlKGRvY3VtZW50
KCkpKSB7CisgICAgICAgICAgICAvLyBMYXlvdXQgaXMgYmVpbmcgdGhyYXNoZWQgYmVmb3JlIHdl
IGdldCBhIGNoYW5jZSB0byB1cGRhdGUsIHNvIHN0b3Agd2FpdGluZyBhbmQganVzdCBmb3JjZSBp
dC4KKyAgICAgICAgICAgIG1fY2FjaGVVcGRhdGVEZWZlcnJlZENvdW50ID0gMDsKKyAgICAgICAg
ICAgIGRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBXYWl0IGZvciBsYXlvdXQgdG8gdHJpZ2dl
ciBhbm90aGVyIGFzeW5jIGNhY2hlIHVwZGF0ZS4KKyAgICAgICAgICAgICsrbV9jYWNoZVVwZGF0
ZURlZmVycmVkQ291bnQ7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisK
ICAgICBib29sIG1hcmtlZFJlbGF0aW9uc0RpcnR5ID0gZmFsc2U7CiAgICAgYXV0byBtYXJrUmVs
YXRpb25zRGlydHkgPSBbJl0gKCkgewogICAgICAgICBpZiAoIW1hcmtlZFJlbGF0aW9uc0RpcnR5
KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2Fj
aGUuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCmluZGV4
IDNlODA2Y2IxYTg0MC4uYzgxOWYzODE0ZDI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FYT2JqZWN0Q2FjaGUuaApAQCAtNTg3LDcgKzU4Nyw3IEBAIHByaXZhdGU6CiAKICAg
ICB2b2lkIGZvY3VzQ3VycmVudE1vZGFsKCk7CiAgICAgCi0gICAgdm9pZCBwZXJmb3JtQ2FjaGVV
cGRhdGVUaW1lckZpcmVkKCk7CisgICAgdm9pZCBwZXJmb3JtQ2FjaGVVcGRhdGVUaW1lckZpcmVk
KCkgeyBwZXJmb3JtRGVmZXJyZWRDYWNoZVVwZGF0ZSgpOyB9CiAKICAgICB2b2lkIHBvc3RUZXh0
U3RhdGVDaGFuZ2VOb3RpZmljYXRpb24oQWNjZXNzaWJpbGl0eU9iamVjdCosIGNvbnN0IEFYVGV4
dFN0YXRlQ2hhbmdlSW50ZW50JiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOwogCkBAIC03MzQs
NiArNzM0LDggQEAgcHJpdmF0ZToKICAgICBib29sIG1fcGVyZm9ybWluZ0RlZmVycmVkQ2FjaGVV
cGRhdGUgeyBmYWxzZSB9OwogICAgIGRvdWJsZSBtX2xvYWRpbmdQcm9ncmVzcyB7IDAgfTsKIAor
ICAgIHVuc2lnbmVkIG1fY2FjaGVVcGRhdGVEZWZlcnJlZENvdW50IHsgMCB9OworCiAgICAgLy8g
UmVsYXRpb25zaGlwcyBiZXR3ZWVuIG9iamVjdHMuCiAgICAgSGFzaE1hcDxBWElELCBBWFJlbGF0
aW9ucz4gbV9yZWxhdGlvbnM7CiAgICAgYm9vbCBtX3JlbGF0aW9uc05lZWRVcGRhdGUgeyB0cnVl
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
T2JqZWN0LmNwcAppbmRleCBiMDNmNmU2Y2E2NTYuLjNiZjM5ZmRiNmYzYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCkBA
IC0yMDY3LDcgKzIwNjcsNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnVwZGF0ZUJhY2tp
bmdTdG9yZSgpCiAgICAgLy8gVXBkYXRpbmcgdGhlIGxheW91dCBtYXkgZGVsZXRlIHRoaXMgb2Jq
ZWN0LgogICAgIFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBwcm90ZWN0ZWRUaGlzKHRoaXMp
OwogICAgIGlmIChhdXRvKiBkb2N1bWVudCA9IHRoaXMtPmRvY3VtZW50KCkpIHsKLSAgICAgICAg
aWYgKCFkb2N1bWVudC0+dmlldygpLT5sYXlvdXRDb250ZXh0KCkuaXNJblJlbmRlclRyZWVMYXlv
dXQoKSAmJiAhZG9jdW1lbnQtPmluUmVuZGVyVHJlZVVwZGF0ZSgpICYmICFkb2N1bWVudC0+aW5T
dHlsZVJlY2FsYygpKQorICAgICAgICBpZiAoIUFjY2Vzc2liaWxpdHk6OmluUmVuZGVyVHJlZU9y
U3R5bGVVcGRhdGUoKmRvY3VtZW50KSkKICAgICAgICAgICAgIGRvY3VtZW50LT51cGRhdGVMYXlv
dXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3Bw
CmluZGV4IDBjMjcyYTQ5NTRjNy4uM2U3MmJkYWQ1ZjE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAK
QEAgLTEwNTcsNiArMTA1Nyw5IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Y29t
cHV0ZUFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25zdAogICAgIGlmICghbV9yZW5kZXJlcikK
ICAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojpjb21wdXRlQWNjZXNzaWJp
bGl0eUlzSWdub3JlZCgpOwogCisgICAgLy8gSWYgbGF5b3V0IGlzIGRpcnR5LCB3ZSBtYXkgbWFr
ZSBpbmNvcnJlY3QgZGVjaXNpb25zIGFib3V0IHdoZXRoZXIgdG8gaWdub3JlIHRoaXMgb2JqZWN0
LgorICAgIEFTU0VSVCghbV9yZW5kZXJlci0+bmVlZHNMYXlvdXQoKSk7CisKICAgICAvLyBDaGVj
ayBmaXJzdCBpZiBhbnkgb2YgdGhlIGNvbW1vbiByZWFzb25zIGNhdXNlIHRoaXMgZWxlbWVudCB0
byBiZSBpZ25vcmVkLgogICAgIC8vIFRoZW4gcHJvY2VzcyBvdGhlciB1c2UgY2FzZXMgdGhhdCBu
ZWVkIHRvIGJlIGFwcGxpZWQgdG8gYWxsIHRoZSB2YXJpb3VzIHJvbGVzCiAgICAgLy8gdGhhdCBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0cyB0YWtlIG9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWUuY3BwIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWUuY3Bw
CmluZGV4IDhmODYwNTI1Nzg1MS4uNDdkMTUzZjk0NGVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWUu
Y3BwCkBAIC0xNDQsNyArMTQ0LDcgQEAgUmVmPEFYSXNvbGF0ZWRUcmVlPiBBWElzb2xhdGVkVHJl
ZTo6Y3JlYXRlKEFYT2JqZWN0Q2FjaGUmIGF4T2JqZWN0Q2FjaGUpCiAgICAgfQogCiAgICAgYXV0
byYgZG9jdW1lbnQgPSBheE9iamVjdENhY2hlLmRvY3VtZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVu
dC52aWV3KCktPmxheW91dENvbnRleHQoKS5pc0luUmVuZGVyVHJlZUxheW91dCgpICYmICFkb2N1
bWVudC5pblJlbmRlclRyZWVVcGRhdGUoKSAmJiAhZG9jdW1lbnQuaW5TdHlsZVJlY2FsYygpKQor
ICAgIGlmICghQWNjZXNzaWJpbGl0eTo6aW5SZW5kZXJUcmVlT3JTdHlsZVVwZGF0ZShkb2N1bWVu
dCkpCiAgICAgICAgIGRvY3VtZW50LnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0
cygpOwogCiAgICAgdHJlZS0+bV9tYXhUcmVlRGVwdGggPSBkb2N1bWVudC5zZXR0aW5ncygpLm1h
eGltdW1IVE1MUGFyc2VyRE9NVHJlZURlcHRoKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9h
Y2Nlc3NpYmlsaXR5L3RyZWUtdXBkYXRlLXdpdGgtZGlydHktbGF5b3V0LWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvdHJlZS11cGRhdGUtd2l0aC1kaXJ0eS1sYXlvdXQt
ZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNDJm
YmU0NWU2NjM2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS90
cmVlLXVwZGF0ZS13aXRoLWRpcnR5LWxheW91dC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwzNiBA
QAorVGhpcyB0ZXN0IGVuc3VyZXMgd2UgZG9uJ3QgbWFrZSBpbmNvcnJlY3QgdXBkYXRlcyB0byB0
aGUgYWNjZXNzaWJpbGl0eSB0cmVlIGR1ZSB0byBkaXJ0eSBsYXlvdXQuCisKKwore0FYUm9sZTog
QVhXZWJBcmVhfQorCit7I21haW4gQVhSb2xlOiBBWEdyb3VwfQorCit7QVhSb2xlOiBBWEJ1dHRv
bn0KKwore0FYUm9sZTogQVhHcm91cH0KKwore0FYUm9sZTogQVhTdGF0aWNUZXh0IEFYVmFsdWU6
IFBhcmFncmFwaCBvbmV9CisKK3tBWFJvbGU6IEFYR3JvdXB9CisKK3tBWFJvbGU6IEFYU3RhdGlj
VGV4dCBBWFZhbHVlOiBQYXJhZ3JhcGggdHdvfQorCit7QVhSb2xlOiBBWEdyb3VwfQorCit7QVhS
b2xlOiBBWFN0YXRpY1RleHQgQVhWYWx1ZTogUGFyYWdyYXBoIHRocmVlfQorCit7QVhSb2xlOiBB
WEdyb3VwfQorCit7QVhSb2xlOiBBWFN0YXRpY1RleHQgQVhWYWx1ZTogUGFyYWdyYXBoIGZvdXJ9
CisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorQnV0
dG9uIG9uZQorUGFyYWdyYXBoIG9uZQorCitQYXJhZ3JhcGggdHdvCisKK1BhcmFncmFwaCB0aHJl
ZQorCitQYXJhZ3JhcGggZm91cgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0
eS90cmVlLXVwZGF0ZS13aXRoLWRpcnR5LWxheW91dC5odG1sIGIvTGF5b3V0VGVzdHMvYWNjZXNz
aWJpbGl0eS90cmVlLXVwZGF0ZS13aXRoLWRpcnR5LWxheW91dC5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uY2NmYjZhMjRhNTk4Ci0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS90cmVlLXVwZGF0ZS13aXRoLWRpcnR5LWxheW91
dC5odG1sCkBAIC0wLDAgKzEsNTggQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8v
RFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2Vz
L2FjY2Vzc2liaWxpdHktaGVscGVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNv
dXJjZXMvanMtdGVzdC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBpZD0iYm9keSI+CisK
KzxtYWluIGlkPSJtYWluIj4KKyAgICA8YnV0dG9uPkJ1dHRvbiBvbmU8L2J1dHRvbj4KKyAgICA8
cD5QYXJhZ3JhcGggb25lPC9wPgorICAgIDxwPlBhcmFncmFwaCB0d288L3A+CisgICAgPHA+UGFy
YWdyYXBoIHRocmVlPC9wPgorPC9tYWluPgorCis8c2NyaXB0PgordmFyIG91dHB1dCA9ICJUaGlz
IHRlc3QgZW5zdXJlcyB3ZSBkb24ndCBtYWtlIGluY29ycmVjdCB1cGRhdGVzIHRvIHRoZSBhY2Nl
c3NpYmlsaXR5IHRyZWUgZHVlIHRvIGRpcnR5IGxheW91dC5cblxuIjsKKworaWYgKHdpbmRvdy5h
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlcikgeworICAgIHdpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1
ZTsKKyAgICAvLyBUb3VjaCB0aGUgdHJlZSB0byBlbnN1cmUgdGhlIEFYT2JqZWN0Q2FjaGUgaXMg
Y3JlYXRlZC4KKyAgICB0b3VjaEFjY2Vzc2liaWxpdHlUcmVlKGFjY2Vzc2liaWxpdHlDb250cm9s
bGVyLnJvb3RFbGVtZW50KTsKKworICAgIHZhciBzY2FsZSA9IDAuMTsKKyAgICAvLyBSZXBlYXRl
ZGx5IGRpcnR5IGxheW91dCBieSBjaGFuZ2luZyB0aGUgcGFnZSBzY2Fsb3IgZmFjdG9yLgorICAg
IHNldEludGVydmFsKGFzeW5jIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaW50ZXJuYWxzLnNldFBh
Z2VTY2FsZUZhY3RvcihzY2FsZSwgMCwgMCk7CisKKyAgICAgICAgc2NhbGUgKz0gMC4wMTsKKyAg
ICAgICAgaWYgKHNjYWxlID49IDQpCisgICAgICAgICAgICBzY2FsZSA9IDAuMTsKKyAgICB9LCAw
KTsKKworICAgIHZhciB0cmF2ZXJzYWxPdXRwdXQ7CisgICAgc2V0VGltZW91dChhc3luYyBmdW5j
dGlvbigpIHsKKyAgICAgICAgaW50ZXJuYWxzLnNldFBhZ2VTY2FsZUZhY3RvcigyLCAwLCAwKTsK
KworICAgICAgICBjb25zdCBuZXdQYXJhZ3JhcGggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJw
Iik7CisgICAgICAgIG5ld1BhcmFncmFwaC5pbm5lclRleHQgPSAiUGFyYWdyYXBoIGZvdXIiOwor
ICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWFpbiIpLmFwcGVuZENoaWxkKG5ld1Bh
cmFncmFwaCk7CisgICAgICAgIGludGVybmFscy5zZXRQYWdlU2NhbGVGYWN0b3IoMi41LCAwLCAw
KTsKKworICAgICAgICBhd2FpdCB3YWl0Rm9yKCgpID0+IHsKKyAgICAgICAgICAgIC8vIERlcGVu
ZGluZyBvbiB0aGUgc2NhbGUgZmFjdG9yIGF0IHRoZSB0aW1lIHdlIHRyYXZlcnNlLCB0aGVyZSBt
YXkgYmUgc2Nyb2xsYmFycyBwcmVzZW50LiBUaGV5IGFyZW4ndCBpbXBvcnRhbnQKKyAgICAgICAg
ICAgIC8vIGZvciB0aGlzIHRlc3QsIGFuZCBtYWtlIGl0IGZsYWtleSwgc28gZXhjbHVkZSB0aGVt
IGZyb20gdGhlIG91dHB1dC4KKyAgICAgICAgICAgIHRyYXZlcnNhbE91dHB1dCA9IGR1bXBBWFNl
YXJjaFRyYXZlcnNhbChhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5yb290RWxlbWVudCwgeyBleGNs
dWRlUm9sZXM6IFsic2Nyb2xsYmFyIl0gfSk7CisgICAgICAgICAgICByZXR1cm4gdHJhdmVyc2Fs
T3V0cHV0LmluY2x1ZGVzKCJQYXJhZ3JhcGggZm91ciIpOworICAgICAgICB9KTsKKyAgICAgICAg
b3V0cHV0ICs9IHRyYXZlcnNhbE91dHB1dDsKKworICAgICAgICBkZWJ1ZyhvdXRwdXQpOworICAg
ICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9LCAwKTsKK30KKzwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL1Rlc3RFeHBl
Y3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL1Rlc3RFeHBlY3RhdGlvbnMKaW5k
ZXggMjcwYWVkYmQxYTViLi41MmMxOTE1NTI4ZTggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3Bs
YXRmb3JtL2dsaWIvVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9n
bGliL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTUxNiw2ICs1MTYsNyBAQCBhY2Nlc3NpYmlsaXR5L2Rp
c3BsYXktY29udGVudHMvc2VhcmNoLXRyYXZlcnNhbC5odG1sIFsgU2tpcCBdCiBhY2Nlc3NpYmls
aXR5L2VtcHR5LXRleHQtdW5kZXItZWxlbWVudC1jYWNoZWQuaHRtbCBbIFNraXAgXQogYWNjZXNz
aWJpbGl0eS9zZWFyY2gtdHJhdmVyc2FsLWFmdGVyLXJvbGUtY2hhbmdlLmh0bWwgWyBTa2lwIF0K
IGFjY2Vzc2liaWxpdHkvdGFibGUtc2VhcmNoLXRyYXZlcnNhbC5odG1sIFsgU2tpcCBdCithY2Nl
c3NpYmlsaXR5L3RyZWUtdXBkYXRlLXdpdGgtZGlydHktbGF5b3V0Lmh0bWwgWyBTa2lwIF0KIGFj
Y2Vzc2liaWxpdHkvZHluYW1pY2FsbHktY2hhbmdpbmctaWZyYW1lLXJlbWFpbnMtYWNjZXNzaWJs
ZS5odG1sIFsgU2tpcCBdCiBhY2Nlc3NpYmlsaXR5L2lnbm9yZS1tb2RhbHMtd2l0aG91dC1hbnkt
Y29udGVudC5odG1sIFsgU2tpcCBdCiBhY2Nlc3NpYmlsaXR5L2lmcmFtZS13aXRoLXJvbGUuaHRt
bCBbIFNraXAgXQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vaW9zL1Rlc3RFeHBl
Y3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9pb3MvVGVzdEV4cGVjdGF0aW9ucwppbmRl
eCA1ZjdkYTVhOTZkNTIuLjQ2YTM1OWE3Y2I2MiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vaW9zL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vaW9z
L1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTIyNDcsNiArMjI0Nyw3IEBAIGFjY2Vzc2liaWxpdHkvdGFi
bGUtZGlzcGxheS1ibG9jay5odG1sIFsgUGFzcyBdCiBhY2Nlc3NpYmlsaXR5L3RhYmxlLWRpc3Bs
YXktZmxleC5odG1sIFsgUGFzcyBdCiBhY2Nlc3NpYmlsaXR5L3RhYmxlLWRpc3BsYXktZ3JpZC5o
dG1sIFsgUGFzcyBdCiBhY2Nlc3NpYmlsaXR5L3RhYmxlLWRpc3BsYXktaW5saW5lLWJsb2NrLmh0
bWwgWyBQYXNzIF0KK2FjY2Vzc2liaWxpdHkvdHJlZS11cGRhdGUtd2l0aC1kaXJ0eS1sYXlvdXQu
aHRtbCBbIFBhc3MgXQogYWNjZXNzaWJpbGl0eS91cmwtdGVzdC5odG1sIFsgUGFzcyBdCiBhY2Nl
c3NpYmlsaXR5L3ZpZGVvLWVsZW1lbnQtdXJsLWF0dHJpYnV0ZS5odG1sIFsgUGFzcyBdCiBhY2Nl
c3NpYmlsaXR5L3Zpc2libGUtY2hhcmFjdGVyLXJhbmdlLWJhc2ljLmh0bWwgWyBQYXNzIF0KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2lvcy9hY2Nlc3NpYmlsaXR5L3RyZWUtdXBk
YXRlLXdpdGgtZGlydHktbGF5b3V0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3Jt
L2lvcy9hY2Nlc3NpYmlsaXR5L3RyZWUtdXBkYXRlLXdpdGgtZGlydHktbGF5b3V0LWV4cGVjdGVk
LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjFiZGIwMGFiZDU5
YgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2lvcy9hY2Nlc3NpYmls
aXR5L3RyZWUtdXBkYXRlLXdpdGgtZGlydHktbGF5b3V0LWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDI0IEBACitUaGlzIHRlc3QgZW5zdXJlcyB3ZSBkb24ndCBtYWtlIGluY29ycmVjdCB1cGRhdGVz
IHRvIHRoZSBhY2Nlc3NpYmlsaXR5IHRyZWUgZHVlIHRvIGRpcnR5IGxheW91dC4KKworCit7QnV0
dG9ufQorCit7U3RhdGljVGV4dCBBWExhYmVsOiBQYXJhZ3JhcGggb25lfQorCit7U3RhdGljVGV4
dCBBWExhYmVsOiBQYXJhZ3JhcGggdHdvfQorCit7U3RhdGljVGV4dCBBWExhYmVsOiBQYXJhZ3Jh
cGggdGhyZWV9CisKK3tTdGF0aWNUZXh0IEFYTGFiZWw6IFBhcmFncmFwaCBmb3VyfQorCitQQVNT
IHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKK0J1dHRvbiBvbmUK
K1BhcmFncmFwaCBvbmUKKworUGFyYWdyYXBoIHR3bworCitQYXJhZ3JhcGggdGhyZWUKKworUGFy
YWdyYXBoIGZvdXIKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3Jlc291cmNlcy9hY2Nlc3NpYmls
aXR5LWhlbHBlci5qcyBiL0xheW91dFRlc3RzL3Jlc291cmNlcy9hY2Nlc3NpYmlsaXR5LWhlbHBl
ci5qcwppbmRleCBkOTdjNDgzZTgyOTMuLjljMTVhNWNjMmVhYyAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvcmVzb3VyY2VzL2FjY2Vzc2liaWxpdHktaGVscGVyLmpzCisrKyBiL0xheW91dFRlc3Rz
L3Jlc291cmNlcy9hY2Nlc3NpYmlsaXR5LWhlbHBlci5qcwpAQCAtMjQsMjYgKzI0LDM4IEBAIGZ1
bmN0aW9uIGR1bXBBWFRhYmxlKGF4RWxlbWVudCwgb3B0aW9ucykgewogfQogCiAvLyBEdW1wcyB0
aGUgcmVzdWx0IG9mIGEgdHJhdmVyc2FsIHZpYSB0aGUgVUkgZWxlbWVudCBzZWFyY2ggQVBJICh3
aGljaCBpcyB3aGF0IHNvbWUgQVRzIHVzZSkuCi1mdW5jdGlvbiBkdW1wQVhTZWFyY2hUcmF2ZXJz
YWwoYXhFbGVtZW50KSB7CisvLyBgb3B0aW9uc2AgaXMgYW4gb2JqZWN0IHdpdGggdGhlc2Uga2V5
czoKKy8vICAgKiBgZXhjbHVkZVJvbGVzYDogQXJyYXkgb2Ygc3RyaW5ncyByZXByZXNlbnRpbmcg
cm9sZXMgeW91IGRvbid0IHdhbnQgdG8gaW5jbHVkZSBpbiB0aGUgb3V0cHV0LgorLy8gICAgICAg
ICAgICAgICAgICAgICBDYXNlIGluc2Vuc2l0aXZlLCBwYXJ0aWFsIG1hdGNoIGlzIGZpbmUsIGUu
Zy4gInNjcm9sbGJhciIgd2lsbCBleGNsdWRlICJBWFNjcm9sbEJhciIuCitmdW5jdGlvbiBkdW1w
QVhTZWFyY2hUcmF2ZXJzYWwoYXhFbGVtZW50LCBvcHRpb25zID0geyB9KSB7CiAgICAgbGV0IG91
dHB1dCA9ICIiOwotICAgIGZ1bmN0aW9uIGVsZW1lbnREZXNjcmlwdGlvbihheEVsZW1lbnQpIHsK
LSAgICAgICAgaWYgKCFheEVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm4gIm51bGwiOwotCi0g
ICAgICAgIGNvbnN0IHJvbGUgPSBheEVsZW1lbnQucm9sZTsKLSAgICAgICAgY29uc3QgaWQgPSBh
eEVsZW1lbnQuZG9tSWRlbnRpZmllcjsKLSAgICAgICAgbGV0IHJlc3VsdCA9IGAke2lkID8gYCMk
e2lkfSBgIDogIiJ9JHtyb2xlfWA7Ci0gICAgICAgIGlmIChyb2xlLmluY2x1ZGVzKCJTdGF0aWNU
ZXh0IikpCi0gICAgICAgICAgICByZXN1bHQgKz0gYCAke2FjY2Vzc2liaWxpdHlDb250cm9sbGVy
LnBsYXRmb3JtTmFtZSA9PT0gImlvcyIgPyBheEVsZW1lbnQuZGVzY3JpcHRpb24gOiBheEVsZW1l
bnQuc3RyaW5nVmFsdWV9YDsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KICAgICBs
ZXQgc2VhcmNoUmVzdWx0ID0gbnVsbDsKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICBzZWFy
Y2hSZXN1bHQgPSBheEVsZW1lbnQudWlFbGVtZW50Rm9yU2VhcmNoUHJlZGljYXRlKHNlYXJjaFJl
c3VsdCwgdHJ1ZSwgIkFYQW55VHlwZVNlYXJjaEtleSIsICIiLCBmYWxzZSk7CiAgICAgICAgIGlm
ICghc2VhcmNoUmVzdWx0KQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIG91dHB1dCArPSBg
XG57JHtlbGVtZW50RGVzY3JpcHRpb24oc2VhcmNoUmVzdWx0KX19XG5gOworCisgICAgICAgIGNv
bnN0IHJvbGUgPSBzZWFyY2hSZXN1bHQucm9sZTsKKworICAgICAgICBsZXQgZXhjbHVkZWQgPSBm
YWxzZTsKKyAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucz8uZXhjbHVkZVJvbGVzKSkg
eworICAgICAgICAgICAgZm9yIChjb25zdCBleGNsdWRlZFJvbGUgb2Ygb3B0aW9ucy5leGNsdWRl
Um9sZXMpIHsKKyAgICAgICAgICAgICAgICBpZiAocm9sZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVz
KGV4Y2x1ZGVkUm9sZS50b0xvd2VyQ2FzZSgpKSkgeworICAgICAgICAgICAgICAgICAgICBleGNs
dWRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChleGNsdWRlZCkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGNvbnN0IGlkID0gc2VhcmNoUmVzdWx0LmRv
bUlkZW50aWZpZXI7CisgICAgICAgIGxldCByZXN1bHREZXNjcmlwdGlvbiA9IGAke2lkID8gYCMk
e2lkfSBgIDogIiJ9JHtyb2xlfWA7CisgICAgICAgIGlmIChyb2xlLmluY2x1ZGVzKCJTdGF0aWNU
ZXh0IikpCisgICAgICAgICAgICByZXN1bHREZXNjcmlwdGlvbiArPSBgICR7YWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXIucGxhdGZvcm1OYW1lID09PSAiaW9zIiA/IHNlYXJjaFJlc3VsdC5kZXNjcmlw
dGlvbiA6IHNlYXJjaFJlc3VsdC5zdHJpbmdWYWx1ZX1gOworCisgICAgICAgIG91dHB1dCArPSBg
XG57JHtyZXN1bHREZXNjcmlwdGlvbn19XG5gOwogICAgIH0KICAgICByZXR1cm4gb3V0cHV0Owog
fQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>469580</attachid>
            <date>2024-01-28 01:14:00 -0800</date>
            <delta_ts>2024-01-29 07:59:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-268239-20240128011359.patch</filename>
            <type>text/plain</type>
            <size>18355</size>
            <attacher name="Tyler Wilcock">tyler_w</attacher>
            
              <data encoding="base64">RnJvbSAwMjkxZDZmNDAwYTNkMzk4YzNhYTBkYjJlNTNjNGVhNDEzZDY0ZjEwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBUeWxlciBXaWxjb2NrIDx0eWxlcl93QGFwcGxlLmNvbT4KRGF0
ZTogU2F0LCAyNyBKYW4gMjAyNCAxNzo0OTo0NSAtMDgwMApTdWJqZWN0OiBbUEFUQ0hdIEFYOiBE
ZXBlbmRpbmcgb24gdGhlIHRpbWluZyBvZgogRG9jdW1lbnQ6OmZsdXNoRGVmZXJyZWRBWE9iamVj
dENhY2hlVXBkYXRlKCksCiBBWE9iamVjdENhY2hlOjpwZXJmb3JtRGVmZXJyZWRDYWNoZVVwZGF0
ZSBjYW4gYmUgcnVuIHdpdGggZGlydHkgbGF5b3V0CiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjY4MjM5IHJkYXI6Ly9wcm9ibGVtLzEyMTc2MDQyNwoKUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCgpJbiBidWc6CgpodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjU2NDAzIChEZWZlciBBWCBvYmplY3QgY2FjaGUgdXBkYXRlIGFzIGFuIGV2
ZW50IGxvb3AgdGFzayBpbnN0ZWFkIG9mIGEgcG9zdCBsYXlvdXQgdGFzaykKCkFYT2JqZWN0Q2Fj
aGU6OnBlcmZyb21EZWZlcnJlZENhY2hlVXBkYXRlIHdhcyBtb3ZlZCBmcm9tIGJlaW5nIGEgc3lu
Y2hyb25vdXMgcG9zdC1sYXlvdXQgdGFzayB0byBhbiBhc3luY2hyb25vdXMgb25lLApydW5uaW5n
IHdoZW4gcG9zc2libGUgdmlhIHRoZSBFdmVudExvb3AuCgpUaGUgcHJvYmxlbSB3aXRoIHRoaXMg
aXMgdGhhdCBieSB0aGUgdGltZSBEb2N1bWVudDo6Zmx1c2hEZWZlcnJlZEFYT2JqZWN0Q2FjaGVV
cGRhdGUoKSBhY3R1YWxseSBmaXJlcywgbGF5b3V0IG1heSBoYXZlCmJlY29tZSBkaXJ0eSBhZ2Fp
biwgd2hpY2ggbWVhbnMgQVhPYmplY3RDYWNoZTo6cGVyZm9ybURlZmVycmVkQ2FjaGVVcGRhdGUg
bWFrZXMgaW5jb3JyZWN0IHVwZGF0ZXMgdG8gdGhlIGFjY2Vzc2liaWxpdHkKdHJlZS4gQXMgb25l
IHNwZWNpZmljIGV4YW1wbGUsIGl0IGNhbiBjYXVzZSB1cyB0byBjb21wdXRlIHRoZSB3cm9uZyBp
Z25vcmVkIHZhbHVlIGZvciBSZW5kZXJUZXh0cywgYXMgd2UgY2hlY2sKUmVuZGVyVGV4dDo6aGFz
UmVuZGVyZWRUZXh0IHdoaWNoIG1heSB1bmV4cGVjdGVkbHkgcmV0dXJuIGZhbHNlIG9ubHkgYmVj
YXVzZSB0aGUgbGF5b3V0IGlzIGRpcnR5LgoKV2l0aCB0aGlzIHBhdGNoLCBwZXJmb3JtRGVmZXJy
ZWRDYWNoZVVwZGF0ZSBub3cgZGV0ZWN0cyB3aGVuIGxheW91dCBpcyBkaXJ0eSwgYW5kIGVpdGhl
ciB3YWl0cyBhbm90aGVyIHJvdW5kIGluIHRoZSBldmVudApsb29wIG9yIGZvcmNlcyBhIGxheW91
dCBpZiBuZWNlc3NhcnkuCgoqIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvdHJlZS11cGRhdGUt
d2l0aC1kaXJ0eS1sYXlvdXQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKiBMYXlvdXRUZXN0cy9hY2Nl
c3NpYmlsaXR5L3RyZWUtdXBkYXRlLXdpdGgtZGlydHktbGF5b3V0Lmh0bWw6IEFkZGVkLgoqIExh
eW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvVGVzdEV4cGVjdGF0aW9uczogRGlzYWJsZSBuZXcgdGVz
dC4KKiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9pb3MvVGVzdEV4cGVjdGF0aW9uczogRW5hYmxlIG5l
dyB0ZXN0LgoqIExheW91dFRlc3RzL3BsYXRmb3JtL2lvcy9hY2Nlc3NpYmlsaXR5L3RyZWUtdXBk
YXRlLXdpdGgtZGlydHktbGF5b3V0LWV4cGVjdGVkLnR4dDogQWRkZWQuCiogU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BWENvcmVPYmplY3QuY3BwOgooV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eTo6aW5SZW5kZXJUcmVlT3JTdHlsZVVwZGF0ZSk6IEFkZGVkLgoqIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQVhDb3JlT2JqZWN0Lmg6CiogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BWE9iamVjdENhY2hlLmNwcDoKKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnBlcmZvcm1EZWZl
cnJlZENhY2hlVXBkYXRlKToKKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnBlcmZvcm1DYWNoZVVw
ZGF0ZVRpbWVyRmlyZWQpOiBEZWxldGVkLgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QVhPYmplY3RDYWNoZS5oOgooV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6cGVyZm9ybUNhY2hlVXBk
YXRlVGltZXJGaXJlZCk6CiogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5T2JqZWN0LmNwcDoKKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OnVwZGF0ZUJhY2tp
bmdTdG9yZSk6CiogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJ
c29sYXRlZFRyZWUuY3BwOgooV2ViQ29yZTo6QVhJc29sYXRlZFRyZWU6OmNyZWF0ZSk6CiogTGF5
b3V0VGVzdHMvcmVzb3VyY2VzL2FjY2Vzc2liaWxpdHktaGVscGVyLmpzOgotLS0KIFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhDb3JlT2JqZWN0LmNwcCB8IDEzICsrKysrCiBTb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYQ29yZU9iamVjdC5oICAgfCAgMiArCiAuLi4vV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwICAgfCAyNiArKysrKystLS0KIFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oICB8ICA0ICstCiAuLi4vYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcCAgICAgfCAgMiArLQogLi4uL0FjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QuY3BwICAgICAgICAgICAgIHwgIDMgKwogLi4uL2lzb2xhdGVk
dHJlZS9BWElzb2xhdGVkVHJlZS5jcHAgICAgICAgICAgIHwgIDIgKy0KIC4uLnRyZWUtdXBkYXRl
LXdpdGgtZGlydHktbGF5b3V0LWV4cGVjdGVkLnR4dCB8IDM2ICsrKysrKysrKysrKwogLi4uL3Ry
ZWUtdXBkYXRlLXdpdGgtZGlydHktbGF5b3V0Lmh0bWwgICAgICAgIHwgNTggKysrKysrKysrKysr
KysrKysrKwogTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9UZXN0RXhwZWN0YXRpb25zICAgIHwg
IDEgKwogTGF5b3V0VGVzdHMvcGxhdGZvcm0vaW9zL1Rlc3RFeHBlY3RhdGlvbnMgICAgIHwgIDEg
KwogLi4udHJlZS11cGRhdGUtd2l0aC1kaXJ0eS1sYXlvdXQtZXhwZWN0ZWQudHh0IHwgMjQgKysr
KysrKysKIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azEvVGVzdEV4cGVjdGF0aW9ucyB8ICAy
ICsKIExheW91dFRlc3RzL3Jlc291cmNlcy9hY2Nlc3NpYmlsaXR5LWhlbHBlci5qcyB8IDQwICsr
KysrKysrLS0tLS0KIDE0IGZpbGVzIGNoYW5nZWQsIDE4OCBpbnNlcnRpb25zKCspLCAyNiBkZWxl
dGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3Ry
ZWUtdXBkYXRlLXdpdGgtZGlydHktbGF5b3V0LWV4cGVjdGVkLnR4dAogY3JlYXRlIG1vZGUgMTAw
NjQ0IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvdHJlZS11cGRhdGUtd2l0aC1kaXJ0eS1sYXlv
dXQuaHRtbAogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL3BsYXRmb3JtL2lvcy9hY2Nl
c3NpYmlsaXR5L3RyZWUtdXBkYXRlLXdpdGgtZGlydHktbGF5b3V0LWV4cGVjdGVkLnR4dAoKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhDb3JlT2JqZWN0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhDb3JlT2JqZWN0LmNwcAppbmRleCA4ZjJi
MTgyN2UzM2UuLjg3NDllM2U3NzVkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BWENvcmVPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQVhDb3JlT2JqZWN0LmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiQVhDb3JlT2JqZWN0LmgiCisjaW5jbHVkZSAiTG9jYWxGcmFtZVZpZXcu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01OTUsNCArNTk2LDE2IEBAIHZvaWQgQVhD
b3JlT2JqZWN0OjphcHBlbmRSYWRpb0J1dHRvbkdyb3VwTWVtYmVycyhBY2Nlc3NpYmlsaXR5Q2hp
bGRyZW5WZWN0b3ImIGxpCiAgICAgfQogfQogCituYW1lc3BhY2UgQWNjZXNzaWJpbGl0eSB7CisK
K2Jvb2wgaW5SZW5kZXJUcmVlT3JTdHlsZVVwZGF0ZShjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQp
Cit7CisgICAgaWYgKGRvY3VtZW50LmluU3R5bGVSZWNhbGMoKSB8fCBkb2N1bWVudC5pblJlbmRl
clRyZWVVcGRhdGUoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgYXV0byogdmlldyA9IGRv
Y3VtZW50LnZpZXcoKTsKKyAgICByZXR1cm4gdmlldyAmJiB2aWV3LT5sYXlvdXRDb250ZXh0KCku
aXNJblJlbmRlclRyZWVMYXlvdXQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgQWNjZXNzaWJpbGl0
eQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FYQ29yZU9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BWENvcmVPYmplY3QuaAppbmRleCBjOTVjNjRmY2IyYTYuLjc2M2MwNjRmYTEwNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWENvcmVPYmplY3QuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYQ29yZU9iamVjdC5oCkBAIC0xNjYyLDYgKzE2
NjIsOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBpbmxpbmUgVCByZXRyaWV2
ZUF1dG9yZWxlYXNlZFZhbHVlRnJvbU1haW5UaHJlYQogfQogI2VuZGlmCiAKK2Jvb2wgaW5SZW5k
ZXJUcmVlT3JTdHlsZVVwZGF0ZShjb25zdCBEb2N1bWVudCYpOworCiB9IC8vIG5hbWVzcGFjZSBB
Y2Nlc3NpYmlsaXR5CiAKIGlubGluZSBib29sIEFYQ29yZU9iamVjdDo6aXNEZXNjZW5kYW50T2ZP
YmplY3QoY29uc3QgQVhDb3JlT2JqZWN0KiBheE9iamVjdCkgY29uc3QKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCmluZGV4IDc4YTMzMGRhNGM1Yy4u
YmQzMTI3ZGNmMWQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FY
T2JqZWN0Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmpl
Y3RDYWNoZS5jcHAKQEAgLTM5NjUsMTUgKzM5NjUsNiBAQCBib29sIEFYT2JqZWN0Q2FjaGU6Om5v
ZGVJc1RleHRDb250cm9sKGNvbnN0IE5vZGUqIG5vZGUpCiAgICAgcmV0dXJuIGF4T2JqZWN0ICYm
IGF4T2JqZWN0LT5pc1RleHRDb250cm9sKCk7CiB9CiAKLXZvaWQgQVhPYmplY3RDYWNoZTo6cGVy
Zm9ybUNhY2hlVXBkYXRlVGltZXJGaXJlZCgpCi17Ci0gICAgLy8gSWYgdGhlcmUncyBhIHBlbmRp
bmcgbGF5b3V0LCBsZXQgdGhlIGxheW91dCB0cmlnZ2VyIHRoZSBBWCB1cGRhdGUuCi0gICAgaWYg
KCFkb2N1bWVudCgpLnZpZXcoKSB8fCBkb2N1bWVudCgpLnZpZXcoKS0+bmVlZHNMYXlvdXQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgcGVyZm9ybURlZmVycmVkQ2FjaGVVcGRhdGUoKTsKLX0K
LQogdm9pZCBBWE9iamVjdENhY2hlOjpwZXJmb3JtRGVmZXJyZWRDYWNoZVVwZGF0ZSgpCiB7CiAg
ICAgQVhUUkFDRShtYWtlU3RyaW5nKCJBWE9iamVjdENhY2hlOjpwZXJmb3JtRGVmZXJyZWRDYWNo
ZVVwZGF0ZSAweCJfcywgaGV4KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih0aGlzKSkpKTsK
QEAgLTM5ODMsNiArMzk3NCwyMyBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OnBlcmZvcm1EZWZlcnJl
ZENhY2hlVXBkYXRlKCkKICAgICB9CiAgICAgU2V0Rm9yU2NvcGUgcGVyZm9ybWluZ0RlZmVycmVk
Q2FjaGVVcGRhdGUobV9wZXJmb3JtaW5nRGVmZXJyZWRDYWNoZVVwZGF0ZSwgdHJ1ZSk7CiAKKyAg
ICAvLyBJdCdzIHVuZXhwZWN0ZWQgZm9yIHRoaXMgZnVuY3Rpb24gdG8gcnVuIGluIHRoZSBtaWRk
bGUgb2YgYSByZW5kZXIgdHJlZSBvciBzdHlsZSB1cGRhdGUuCisgICAgQVNTRVJUKCFBY2Nlc3Np
YmlsaXR5OjppblJlbmRlclRyZWVPclN0eWxlVXBkYXRlKGRvY3VtZW50KCkpKTsKKworICAgIGlm
ICghZG9jdW1lbnQoKS52aWV3KCkgfHwgZG9jdW1lbnQoKS52aWV3KCktPm5lZWRzTGF5b3V0KCkp
IHsKKyAgICAgICAgLy8gTGF5b3V0IGJlY2FtZSBkaXJ0eSB3aGlsZSB3YWl0aW5nIHRvIHBlcmZv
cm1EZWZlcnJlZENhY2hlVXBkYXRlLCBhbmQgd2UgcmVxdWlyZSBjbGVhbiBsYXlvdXQKKyAgICAg
ICAgLy8gdG8gdXBkYXRlIHRoZSBhY2Nlc3NpYmlsaXR5IHRyZWUgY29ycmVjdGx5IGluIHRoaXMg
ZnVuY3Rpb24uCisgICAgICAgIGlmIChtX2NhY2hlVXBkYXRlRGVmZXJyZWRDb3VudCA+PSAzICYm
ICFBY2Nlc3NpYmlsaXR5OjppblJlbmRlclRyZWVPclN0eWxlVXBkYXRlKGRvY3VtZW50KCkpKSB7
CisgICAgICAgICAgICAvLyBMYXlvdXQgaXMgYmVpbmcgdGhyYXNoZWQgYmVmb3JlIHdlIGdldCBh
IGNoYW5jZSB0byB1cGRhdGUsIHNvIHN0b3Agd2FpdGluZyBhbmQganVzdCBmb3JjZSBpdC4KKyAg
ICAgICAgICAgIG1fY2FjaGVVcGRhdGVEZWZlcnJlZENvdW50ID0gMDsKKyAgICAgICAgICAgIGRv
Y3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAvLyBXYWl0IGZvciBsYXlvdXQgdG8gdHJpZ2dlciBhbm90
aGVyIGFzeW5jIGNhY2hlIHVwZGF0ZS4KKyAgICAgICAgICAgICsrbV9jYWNoZVVwZGF0ZURlZmVy
cmVkQ291bnQ7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKICAgICBi
b29sIG1hcmtlZFJlbGF0aW9uc0RpcnR5ID0gZmFsc2U7CiAgICAgYXV0byBtYXJrUmVsYXRpb25z
RGlydHkgPSBbJl0gKCkgewogICAgICAgICBpZiAoIW1hcmtlZFJlbGF0aW9uc0RpcnR5KSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaCBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCmluZGV4IDNlODA2
Y2IxYTg0MC4uYzgxOWYzODE0ZDI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FYT2JqZWN0Q2FjaGUuaApAQCAtNTg3LDcgKzU4Nyw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lk
IGZvY3VzQ3VycmVudE1vZGFsKCk7CiAgICAgCi0gICAgdm9pZCBwZXJmb3JtQ2FjaGVVcGRhdGVU
aW1lckZpcmVkKCk7CisgICAgdm9pZCBwZXJmb3JtQ2FjaGVVcGRhdGVUaW1lckZpcmVkKCkgeyBw
ZXJmb3JtRGVmZXJyZWRDYWNoZVVwZGF0ZSgpOyB9CiAKICAgICB2b2lkIHBvc3RUZXh0U3RhdGVD
aGFuZ2VOb3RpZmljYXRpb24oQWNjZXNzaWJpbGl0eU9iamVjdCosIGNvbnN0IEFYVGV4dFN0YXRl
Q2hhbmdlSW50ZW50JiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOwogCkBAIC03MzQsNiArNzM0
LDggQEAgcHJpdmF0ZToKICAgICBib29sIG1fcGVyZm9ybWluZ0RlZmVycmVkQ2FjaGVVcGRhdGUg
eyBmYWxzZSB9OwogICAgIGRvdWJsZSBtX2xvYWRpbmdQcm9ncmVzcyB7IDAgfTsKIAorICAgIHVu
c2lnbmVkIG1fY2FjaGVVcGRhdGVEZWZlcnJlZENvdW50IHsgMCB9OworCiAgICAgLy8gUmVsYXRp
b25zaGlwcyBiZXR3ZWVuIG9iamVjdHMuCiAgICAgSGFzaE1hcDxBWElELCBBWFJlbGF0aW9ucz4g
bV9yZWxhdGlvbnM7CiAgICAgYm9vbCBtX3JlbGF0aW9uc05lZWRVcGRhdGUgeyB0cnVlIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmpl
Y3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0
LmNwcAppbmRleCBiMDNmNmU2Y2E2NTYuLjNiZjM5ZmRiNmYzYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCkBAIC0yMDY3
LDcgKzIwNjcsNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnVwZGF0ZUJhY2tpbmdTdG9y
ZSgpCiAgICAgLy8gVXBkYXRpbmcgdGhlIGxheW91dCBtYXkgZGVsZXRlIHRoaXMgb2JqZWN0Lgog
ICAgIFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAg
IGlmIChhdXRvKiBkb2N1bWVudCA9IHRoaXMtPmRvY3VtZW50KCkpIHsKLSAgICAgICAgaWYgKCFk
b2N1bWVudC0+dmlldygpLT5sYXlvdXRDb250ZXh0KCkuaXNJblJlbmRlclRyZWVMYXlvdXQoKSAm
JiAhZG9jdW1lbnQtPmluUmVuZGVyVHJlZVVwZGF0ZSgpICYmICFkb2N1bWVudC0+aW5TdHlsZVJl
Y2FsYygpKQorICAgICAgICBpZiAoIUFjY2Vzc2liaWxpdHk6OmluUmVuZGVyVHJlZU9yU3R5bGVV
cGRhdGUoKmRvY3VtZW50KSkKICAgICAgICAgICAgIGRvY3VtZW50LT51cGRhdGVMYXlvdXRJZ25v
cmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCmluZGV4
IDBjMjcyYTQ5NTRjNy4uM2U3MmJkYWQ1ZjE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKQEAgLTEw
NTcsNiArMTA1Nyw5IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Y29tcHV0ZUFj
Y2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25zdAogICAgIGlmICghbV9yZW5kZXJlcikKICAgICAg
ICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojpjb21wdXRlQWNjZXNzaWJpbGl0eUlz
SWdub3JlZCgpOwogCisgICAgLy8gSWYgbGF5b3V0IGlzIGRpcnR5LCB3ZSBtYXkgbWFrZSBpbmNv
cnJlY3QgZGVjaXNpb25zIGFib3V0IHdoZXRoZXIgdG8gaWdub3JlIHRoaXMgb2JqZWN0LgorICAg
IEFTU0VSVCghbV9yZW5kZXJlci0+bmVlZHNMYXlvdXQoKSk7CisKICAgICAvLyBDaGVjayBmaXJz
dCBpZiBhbnkgb2YgdGhlIGNvbW1vbiByZWFzb25zIGNhdXNlIHRoaXMgZWxlbWVudCB0byBiZSBp
Z25vcmVkLgogICAgIC8vIFRoZW4gcHJvY2VzcyBvdGhlciB1c2UgY2FzZXMgdGhhdCBuZWVkIHRv
IGJlIGFwcGxpZWQgdG8gYWxsIHRoZSB2YXJpb3VzIHJvbGVzCiAgICAgLy8gdGhhdCBBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0cyB0YWtlIG9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWUuY3BwIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWUuY3BwCmluZGV4
IDhmODYwNTI1Nzg1MS4uNDdkMTUzZjk0NGVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWUuY3BwCkBA
IC0xNDQsNyArMTQ0LDcgQEAgUmVmPEFYSXNvbGF0ZWRUcmVlPiBBWElzb2xhdGVkVHJlZTo6Y3Jl
YXRlKEFYT2JqZWN0Q2FjaGUmIGF4T2JqZWN0Q2FjaGUpCiAgICAgfQogCiAgICAgYXV0byYgZG9j
dW1lbnQgPSBheE9iamVjdENhY2hlLmRvY3VtZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVudC52aWV3
KCktPmxheW91dENvbnRleHQoKS5pc0luUmVuZGVyVHJlZUxheW91dCgpICYmICFkb2N1bWVudC5p
blJlbmRlclRyZWVVcGRhdGUoKSAmJiAhZG9jdW1lbnQuaW5TdHlsZVJlY2FsYygpKQorICAgIGlm
ICghQWNjZXNzaWJpbGl0eTo6aW5SZW5kZXJUcmVlT3JTdHlsZVVwZGF0ZShkb2N1bWVudCkpCiAg
ICAgICAgIGRvY3VtZW50LnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwog
CiAgICAgdHJlZS0+bV9tYXhUcmVlRGVwdGggPSBkb2N1bWVudC5zZXR0aW5ncygpLm1heGltdW1I
VE1MUGFyc2VyRE9NVHJlZURlcHRoKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9hY2Nlc3Np
YmlsaXR5L3RyZWUtdXBkYXRlLXdpdGgtZGlydHktbGF5b3V0LWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL2FjY2Vzc2liaWxpdHkvdHJlZS11cGRhdGUtd2l0aC1kaXJ0eS1sYXlvdXQtZXhwZWN0
ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNDJmYmU0NWU2
NjM2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS90cmVlLXVw
ZGF0ZS13aXRoLWRpcnR5LWxheW91dC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwzNiBAQAorVGhp
cyB0ZXN0IGVuc3VyZXMgd2UgZG9uJ3QgbWFrZSBpbmNvcnJlY3QgdXBkYXRlcyB0byB0aGUgYWNj
ZXNzaWJpbGl0eSB0cmVlIGR1ZSB0byBkaXJ0eSBsYXlvdXQuCisKKwore0FYUm9sZTogQVhXZWJB
cmVhfQorCit7I21haW4gQVhSb2xlOiBBWEdyb3VwfQorCit7QVhSb2xlOiBBWEJ1dHRvbn0KKwor
e0FYUm9sZTogQVhHcm91cH0KKwore0FYUm9sZTogQVhTdGF0aWNUZXh0IEFYVmFsdWU6IFBhcmFn
cmFwaCBvbmV9CisKK3tBWFJvbGU6IEFYR3JvdXB9CisKK3tBWFJvbGU6IEFYU3RhdGljVGV4dCBB
WFZhbHVlOiBQYXJhZ3JhcGggdHdvfQorCit7QVhSb2xlOiBBWEdyb3VwfQorCit7QVhSb2xlOiBB
WFN0YXRpY1RleHQgQVhWYWx1ZTogUGFyYWdyYXBoIHRocmVlfQorCit7QVhSb2xlOiBBWEdyb3Vw
fQorCit7QVhSb2xlOiBBWFN0YXRpY1RleHQgQVhWYWx1ZTogUGFyYWdyYXBoIGZvdXJ9CisKK1BB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorQnV0dG9uIG9u
ZQorUGFyYWdyYXBoIG9uZQorCitQYXJhZ3JhcGggdHdvCisKK1BhcmFncmFwaCB0aHJlZQorCitQ
YXJhZ3JhcGggZm91cgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS90cmVl
LXVwZGF0ZS13aXRoLWRpcnR5LWxheW91dC5odG1sIGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0
eS90cmVlLXVwZGF0ZS13aXRoLWRpcnR5LWxheW91dC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMC4uY2NmYjZhMjRhNTk4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS90cmVlLXVwZGF0ZS13aXRoLWRpcnR5LWxheW91dC5odG1s
CkBAIC0wLDAgKzEsNTggQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhU
TUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2FjY2Vz
c2liaWxpdHktaGVscGVyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMv
anMtdGVzdC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBpZD0iYm9keSI+CisKKzxtYWlu
IGlkPSJtYWluIj4KKyAgICA8YnV0dG9uPkJ1dHRvbiBvbmU8L2J1dHRvbj4KKyAgICA8cD5QYXJh
Z3JhcGggb25lPC9wPgorICAgIDxwPlBhcmFncmFwaCB0d288L3A+CisgICAgPHA+UGFyYWdyYXBo
IHRocmVlPC9wPgorPC9tYWluPgorCis8c2NyaXB0PgordmFyIG91dHB1dCA9ICJUaGlzIHRlc3Qg
ZW5zdXJlcyB3ZSBkb24ndCBtYWtlIGluY29ycmVjdCB1cGRhdGVzIHRvIHRoZSBhY2Nlc3NpYmls
aXR5IHRyZWUgZHVlIHRvIGRpcnR5IGxheW91dC5cblxuIjsKKworaWYgKHdpbmRvdy5hY2Nlc3Np
YmlsaXR5Q29udHJvbGxlcikgeworICAgIHdpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKyAg
ICAvLyBUb3VjaCB0aGUgdHJlZSB0byBlbnN1cmUgdGhlIEFYT2JqZWN0Q2FjaGUgaXMgY3JlYXRl
ZC4KKyAgICB0b3VjaEFjY2Vzc2liaWxpdHlUcmVlKGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLnJv
b3RFbGVtZW50KTsKKworICAgIHZhciBzY2FsZSA9IDAuMTsKKyAgICAvLyBSZXBlYXRlZGx5IGRp
cnR5IGxheW91dCBieSBjaGFuZ2luZyB0aGUgcGFnZSBzY2Fsb3IgZmFjdG9yLgorICAgIHNldElu
dGVydmFsKGFzeW5jIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaW50ZXJuYWxzLnNldFBhZ2VTY2Fs
ZUZhY3RvcihzY2FsZSwgMCwgMCk7CisKKyAgICAgICAgc2NhbGUgKz0gMC4wMTsKKyAgICAgICAg
aWYgKHNjYWxlID49IDQpCisgICAgICAgICAgICBzY2FsZSA9IDAuMTsKKyAgICB9LCAwKTsKKwor
ICAgIHZhciB0cmF2ZXJzYWxPdXRwdXQ7CisgICAgc2V0VGltZW91dChhc3luYyBmdW5jdGlvbigp
IHsKKyAgICAgICAgaW50ZXJuYWxzLnNldFBhZ2VTY2FsZUZhY3RvcigyLCAwLCAwKTsKKworICAg
ICAgICBjb25zdCBuZXdQYXJhZ3JhcGggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwIik7Cisg
ICAgICAgIG5ld1BhcmFncmFwaC5pbm5lclRleHQgPSAiUGFyYWdyYXBoIGZvdXIiOworICAgICAg
ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWFpbiIpLmFwcGVuZENoaWxkKG5ld1BhcmFncmFw
aCk7CisgICAgICAgIGludGVybmFscy5zZXRQYWdlU2NhbGVGYWN0b3IoMi41LCAwLCAwKTsKKwor
ICAgICAgICBhd2FpdCB3YWl0Rm9yKCgpID0+IHsKKyAgICAgICAgICAgIC8vIERlcGVuZGluZyBv
biB0aGUgc2NhbGUgZmFjdG9yIGF0IHRoZSB0aW1lIHdlIHRyYXZlcnNlLCB0aGVyZSBtYXkgYmUg
c2Nyb2xsYmFycyBwcmVzZW50LiBUaGV5IGFyZW4ndCBpbXBvcnRhbnQKKyAgICAgICAgICAgIC8v
IGZvciB0aGlzIHRlc3QsIGFuZCBtYWtlIGl0IGZsYWtleSwgc28gZXhjbHVkZSB0aGVtIGZyb20g
dGhlIG91dHB1dC4KKyAgICAgICAgICAgIHRyYXZlcnNhbE91dHB1dCA9IGR1bXBBWFNlYXJjaFRy
YXZlcnNhbChhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5yb290RWxlbWVudCwgeyBleGNsdWRlUm9s
ZXM6IFsic2Nyb2xsYmFyIl0gfSk7CisgICAgICAgICAgICByZXR1cm4gdHJhdmVyc2FsT3V0cHV0
LmluY2x1ZGVzKCJQYXJhZ3JhcGggZm91ciIpOworICAgICAgICB9KTsKKyAgICAgICAgb3V0cHV0
ICs9IHRyYXZlcnNhbE91dHB1dDsKKworICAgICAgICBkZWJ1ZyhvdXRwdXQpOworICAgICAgICBm
aW5pc2hKU1Rlc3QoKTsKKyAgICB9LCAwKTsKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL1Rlc3RFeHBlY3RhdGlv
bnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggMjcw
YWVkYmQxYTViLi41MmMxOTE1NTI4ZTggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3Jt
L2dsaWIvVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL1Rl
c3RFeHBlY3RhdGlvbnMKQEAgLTUxNiw2ICs1MTYsNyBAQCBhY2Nlc3NpYmlsaXR5L2Rpc3BsYXkt
Y29udGVudHMvc2VhcmNoLXRyYXZlcnNhbC5odG1sIFsgU2tpcCBdCiBhY2Nlc3NpYmlsaXR5L2Vt
cHR5LXRleHQtdW5kZXItZWxlbWVudC1jYWNoZWQuaHRtbCBbIFNraXAgXQogYWNjZXNzaWJpbGl0
eS9zZWFyY2gtdHJhdmVyc2FsLWFmdGVyLXJvbGUtY2hhbmdlLmh0bWwgWyBTa2lwIF0KIGFjY2Vz
c2liaWxpdHkvdGFibGUtc2VhcmNoLXRyYXZlcnNhbC5odG1sIFsgU2tpcCBdCithY2Nlc3NpYmls
aXR5L3RyZWUtdXBkYXRlLXdpdGgtZGlydHktbGF5b3V0Lmh0bWwgWyBTa2lwIF0KIGFjY2Vzc2li
aWxpdHkvZHluYW1pY2FsbHktY2hhbmdpbmctaWZyYW1lLXJlbWFpbnMtYWNjZXNzaWJsZS5odG1s
IFsgU2tpcCBdCiBhY2Nlc3NpYmlsaXR5L2lnbm9yZS1tb2RhbHMtd2l0aG91dC1hbnktY29udGVu
dC5odG1sIFsgU2tpcCBdCiBhY2Nlc3NpYmlsaXR5L2lmcmFtZS13aXRoLXJvbGUuaHRtbCBbIFNr
aXAgXQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vaW9zL1Rlc3RFeHBlY3RhdGlv
bnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9pb3MvVGVzdEV4cGVjdGF0aW9ucwppbmRleCA1Zjdk
YTVhOTZkNTIuLjQ2YTM1OWE3Y2I2MiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
aW9zL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vaW9zL1Rlc3RF
eHBlY3RhdGlvbnMKQEAgLTIyNDcsNiArMjI0Nyw3IEBAIGFjY2Vzc2liaWxpdHkvdGFibGUtZGlz
cGxheS1ibG9jay5odG1sIFsgUGFzcyBdCiBhY2Nlc3NpYmlsaXR5L3RhYmxlLWRpc3BsYXktZmxl
eC5odG1sIFsgUGFzcyBdCiBhY2Nlc3NpYmlsaXR5L3RhYmxlLWRpc3BsYXktZ3JpZC5odG1sIFsg
UGFzcyBdCiBhY2Nlc3NpYmlsaXR5L3RhYmxlLWRpc3BsYXktaW5saW5lLWJsb2NrLmh0bWwgWyBQ
YXNzIF0KK2FjY2Vzc2liaWxpdHkvdHJlZS11cGRhdGUtd2l0aC1kaXJ0eS1sYXlvdXQuaHRtbCBb
IFBhc3MgXQogYWNjZXNzaWJpbGl0eS91cmwtdGVzdC5odG1sIFsgUGFzcyBdCiBhY2Nlc3NpYmls
aXR5L3ZpZGVvLWVsZW1lbnQtdXJsLWF0dHJpYnV0ZS5odG1sIFsgUGFzcyBdCiBhY2Nlc3NpYmls
aXR5L3Zpc2libGUtY2hhcmFjdGVyLXJhbmdlLWJhc2ljLmh0bWwgWyBQYXNzIF0KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2lvcy9hY2Nlc3NpYmlsaXR5L3RyZWUtdXBkYXRlLXdp
dGgtZGlydHktbGF5b3V0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2lvcy9h
Y2Nlc3NpYmlsaXR5L3RyZWUtdXBkYXRlLXdpdGgtZGlydHktbGF5b3V0LWV4cGVjdGVkLnR4dApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjFiZGIwMGFiZDU5YgotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2lvcy9hY2Nlc3NpYmlsaXR5L3Ry
ZWUtdXBkYXRlLXdpdGgtZGlydHktbGF5b3V0LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDI0IEBA
CitUaGlzIHRlc3QgZW5zdXJlcyB3ZSBkb24ndCBtYWtlIGluY29ycmVjdCB1cGRhdGVzIHRvIHRo
ZSBhY2Nlc3NpYmlsaXR5IHRyZWUgZHVlIHRvIGRpcnR5IGxheW91dC4KKworCit7QnV0dG9ufQor
Cit7U3RhdGljVGV4dCBBWExhYmVsOiBQYXJhZ3JhcGggb25lfQorCit7U3RhdGljVGV4dCBBWExh
YmVsOiBQYXJhZ3JhcGggdHdvfQorCit7U3RhdGljVGV4dCBBWExhYmVsOiBQYXJhZ3JhcGggdGhy
ZWV9CisKK3tTdGF0aWNUZXh0IEFYTGFiZWw6IFBhcmFncmFwaCBmb3VyfQorCitQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKK0J1dHRvbiBvbmUKK1BhcmFn
cmFwaCBvbmUKKworUGFyYWdyYXBoIHR3bworCitQYXJhZ3JhcGggdGhyZWUKKworUGFyYWdyYXBo
IGZvdXIKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azEvVGVzdEV4cGVj
dGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azEvVGVzdEV4cGVjdGF0aW9ucwpp
bmRleCBlZjhiZDE4MWUwYjUuLmY4MDYxMTMzOTY2NiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vbWFjLXdrMS9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRm
b3JtL21hYy13azEvVGVzdEV4cGVjdGF0aW9ucwpAQCAtMTUzNyw2ICsxNTM3LDggQEAgZWRpdGlu
Zy9zcGVsbGluZy9zcGVsbGluZy1pbnNlcnQtaHRtbC5odG1sIFsgUGFzcyBUaW1lb3V0IF0KIGVk
aXRpbmcvc3BlbGxpbmcvc3BlbGxjaGVjay1hc3luYy5odG1sIFsgRmFpbHVyZSBdCiBlZGl0aW5n
L3NwZWxsaW5nL3NwZWxsaW5nLXVuaWZpZWQtZW11bGF0aW9uLmh0bWwgWyBGYWlsdXJlIF0KIAor
YWNjZXNzaWJpbGl0eS90cmVlLXVwZGF0ZS13aXRoLWRpcnR5LWxheW91dC5odG1sIFsgU2tpcCBd
CisKICMgVGhlIGluZXJ0IGF0dHJpYnV0ZSBpc24ndCBtYWtpbmcgb2JqZWN0cyBpbmFjY2Vzc2li
bGUgb24gV0sxLgogYWNjZXNzaWJpbGl0eS9ub2RlLW9ubHktaW5lcnQtb2JqZWN0Lmh0bWwgWyBG
YWlsdXJlIF0KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcmVzb3VyY2VzL2FjY2Vzc2liaWxp
dHktaGVscGVyLmpzIGIvTGF5b3V0VGVzdHMvcmVzb3VyY2VzL2FjY2Vzc2liaWxpdHktaGVscGVy
LmpzCmluZGV4IGQ5N2M0ODNlODI5My4uOWMxNWE1Y2MyZWFjIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9yZXNvdXJjZXMvYWNjZXNzaWJpbGl0eS1oZWxwZXIuanMKKysrIGIvTGF5b3V0VGVzdHMv
cmVzb3VyY2VzL2FjY2Vzc2liaWxpdHktaGVscGVyLmpzCkBAIC0yNCwyNiArMjQsMzggQEAgZnVu
Y3Rpb24gZHVtcEFYVGFibGUoYXhFbGVtZW50LCBvcHRpb25zKSB7CiB9CiAKIC8vIER1bXBzIHRo
ZSByZXN1bHQgb2YgYSB0cmF2ZXJzYWwgdmlhIHRoZSBVSSBlbGVtZW50IHNlYXJjaCBBUEkgKHdo
aWNoIGlzIHdoYXQgc29tZSBBVHMgdXNlKS4KLWZ1bmN0aW9uIGR1bXBBWFNlYXJjaFRyYXZlcnNh
bChheEVsZW1lbnQpIHsKKy8vIGBvcHRpb25zYCBpcyBhbiBvYmplY3Qgd2l0aCB0aGVzZSBrZXlz
OgorLy8gICAqIGBleGNsdWRlUm9sZXNgOiBBcnJheSBvZiBzdHJpbmdzIHJlcHJlc2VudGluZyBy
b2xlcyB5b3UgZG9uJ3Qgd2FudCB0byBpbmNsdWRlIGluIHRoZSBvdXRwdXQuCisvLyAgICAgICAg
ICAgICAgICAgICAgIENhc2UgaW5zZW5zaXRpdmUsIHBhcnRpYWwgbWF0Y2ggaXMgZmluZSwgZS5n
LiAic2Nyb2xsYmFyIiB3aWxsIGV4Y2x1ZGUgIkFYU2Nyb2xsQmFyIi4KK2Z1bmN0aW9uIGR1bXBB
WFNlYXJjaFRyYXZlcnNhbChheEVsZW1lbnQsIG9wdGlvbnMgPSB7IH0pIHsKICAgICBsZXQgb3V0
cHV0ID0gIiI7Ci0gICAgZnVuY3Rpb24gZWxlbWVudERlc2NyaXB0aW9uKGF4RWxlbWVudCkgewot
ICAgICAgICBpZiAoIWF4RWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybiAibnVsbCI7Ci0KLSAg
ICAgICAgY29uc3Qgcm9sZSA9IGF4RWxlbWVudC5yb2xlOwotICAgICAgICBjb25zdCBpZCA9IGF4
RWxlbWVudC5kb21JZGVudGlmaWVyOwotICAgICAgICBsZXQgcmVzdWx0ID0gYCR7aWQgPyBgIyR7
aWR9IGAgOiAiIn0ke3JvbGV9YDsKLSAgICAgICAgaWYgKHJvbGUuaW5jbHVkZXMoIlN0YXRpY1Rl
eHQiKSkKLSAgICAgICAgICAgIHJlc3VsdCArPSBgICR7YWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIu
cGxhdGZvcm1OYW1lID09PSAiaW9zIiA/IGF4RWxlbWVudC5kZXNjcmlwdGlvbiA6IGF4RWxlbWVu
dC5zdHJpbmdWYWx1ZX1gOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQogICAgIGxl
dCBzZWFyY2hSZXN1bHQgPSBudWxsOwogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIHNlYXJj
aFJlc3VsdCA9IGF4RWxlbWVudC51aUVsZW1lbnRGb3JTZWFyY2hQcmVkaWNhdGUoc2VhcmNoUmVz
dWx0LCB0cnVlLCAiQVhBbnlUeXBlU2VhcmNoS2V5IiwgIiIsIGZhbHNlKTsKICAgICAgICAgaWYg
KCFzZWFyY2hSZXN1bHQpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgb3V0cHV0ICs9IGBc
bnske2VsZW1lbnREZXNjcmlwdGlvbihzZWFyY2hSZXN1bHQpfX1cbmA7CisKKyAgICAgICAgY29u
c3Qgcm9sZSA9IHNlYXJjaFJlc3VsdC5yb2xlOworCisgICAgICAgIGxldCBleGNsdWRlZCA9IGZh
bHNlOworICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zPy5leGNsdWRlUm9sZXMpKSB7
CisgICAgICAgICAgICBmb3IgKGNvbnN0IGV4Y2x1ZGVkUm9sZSBvZiBvcHRpb25zLmV4Y2x1ZGVS
b2xlcykgeworICAgICAgICAgICAgICAgIGlmIChyb2xlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMo
ZXhjbHVkZWRSb2xlLnRvTG93ZXJDYXNlKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIGV4Y2x1
ZGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGV4Y2x1ZGVkKQorICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgY29uc3QgaWQgPSBzZWFyY2hSZXN1bHQuZG9t
SWRlbnRpZmllcjsKKyAgICAgICAgbGV0IHJlc3VsdERlc2NyaXB0aW9uID0gYCR7aWQgPyBgIyR7
aWR9IGAgOiAiIn0ke3JvbGV9YDsKKyAgICAgICAgaWYgKHJvbGUuaW5jbHVkZXMoIlN0YXRpY1Rl
eHQiKSkKKyAgICAgICAgICAgIHJlc3VsdERlc2NyaXB0aW9uICs9IGAgJHthY2Nlc3NpYmlsaXR5
Q29udHJvbGxlci5wbGF0Zm9ybU5hbWUgPT09ICJpb3MiID8gc2VhcmNoUmVzdWx0LmRlc2NyaXB0
aW9uIDogc2VhcmNoUmVzdWx0LnN0cmluZ1ZhbHVlfWA7CisKKyAgICAgICAgb3V0cHV0ICs9IGBc
bnske3Jlc3VsdERlc2NyaXB0aW9ufX1cbmA7CiAgICAgfQogICAgIHJldHVybiBvdXRwdXQ7CiB9
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>469597</attachid>
            <date>2024-01-29 07:59:56 -0800</date>
            <delta_ts>2024-01-30 14:23:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-268239-20240129075956.patch</filename>
            <type>text/plain</type>
            <size>18545</size>
            <attacher name="Tyler Wilcock">tyler_w</attacher>
            
              <data encoding="base64">RnJvbSBiYzgwOTdkN2VhZDZhNmM2MTAyMDgyNGI2NGEwM2RkNTAwY2FjZTM1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBUeWxlciBXaWxjb2NrIDx0eWxlcl93QGFwcGxlLmNvbT4KRGF0
ZTogU2F0LCAyNyBKYW4gMjAyNCAxNzo0OTo0NSAtMDgwMApTdWJqZWN0OiBbUEFUQ0hdIEFYOiBE
ZXBlbmRpbmcgb24gdGhlIHRpbWluZyBvZgogRG9jdW1lbnQ6OmZsdXNoRGVmZXJyZWRBWE9iamVj
dENhY2hlVXBkYXRlKCksCiBBWE9iamVjdENhY2hlOjpwZXJmb3JtRGVmZXJyZWRDYWNoZVVwZGF0
ZSBjYW4gYmUgcnVuIHdpdGggZGlydHkgbGF5b3V0CiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjY4MjM5IHJkYXI6Ly9wcm9ibGVtLzEyMTc2MDQyNwoKUmV2aWV3ZWQg
YnkgQ2hyaXMgRmxlaXphY2guCgpJbiBidWc6CgpodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjU2NDAzIChEZWZlciBBWCBvYmplY3QgY2FjaGUgdXBkYXRlIGFzIGFuIGV2
ZW50IGxvb3AgdGFzayBpbnN0ZWFkIG9mIGEgcG9zdCBsYXlvdXQgdGFzaykKCkFYT2JqZWN0Q2Fj
aGU6OnBlcmZyb21EZWZlcnJlZENhY2hlVXBkYXRlIHdhcyBtb3ZlZCBmcm9tIGJlaW5nIGEgc3lu
Y2hyb25vdXMgcG9zdC1sYXlvdXQgdGFzayB0byBhbiBhc3luY2hyb25vdXMgb25lLApydW5uaW5n
IHdoZW4gcG9zc2libGUgdmlhIHRoZSBFdmVudExvb3AuCgpUaGUgcHJvYmxlbSB3aXRoIHRoaXMg
aXMgdGhhdCBieSB0aGUgdGltZSBEb2N1bWVudDo6Zmx1c2hEZWZlcnJlZEFYT2JqZWN0Q2FjaGVV
cGRhdGUoKSBhY3R1YWxseSBmaXJlcywgbGF5b3V0IG1heSBoYXZlCmJlY29tZSBkaXJ0eSBhZ2Fp
biwgd2hpY2ggbWVhbnMgQVhPYmplY3RDYWNoZTo6cGVyZm9ybURlZmVycmVkQ2FjaGVVcGRhdGUg
bWFrZXMgaW5jb3JyZWN0IHVwZGF0ZXMgdG8gdGhlIGFjY2Vzc2liaWxpdHkKdHJlZS4gQXMgb25l
IHNwZWNpZmljIGV4YW1wbGUsIGl0IGNhbiBjYXVzZSB1cyB0byBjb21wdXRlIHRoZSB3cm9uZyBp
Z25vcmVkIHZhbHVlIGZvciBSZW5kZXJUZXh0cywgYXMgd2UgY2hlY2sKUmVuZGVyVGV4dDo6aGFz
UmVuZGVyZWRUZXh0IHdoaWNoIG1heSB1bmV4cGVjdGVkbHkgcmV0dXJuIGZhbHNlIG9ubHkgYmVj
YXVzZSB0aGUgbGF5b3V0IGlzIGRpcnR5LgoKV2l0aCB0aGlzIHBhdGNoLCBwZXJmb3JtRGVmZXJy
ZWRDYWNoZVVwZGF0ZSBub3cgZGV0ZWN0cyB3aGVuIGxheW91dCBpcyBkaXJ0eSwgYW5kIGVpdGhl
ciB3YWl0cyBhbm90aGVyIHJvdW5kIGluIHRoZSBldmVudApsb29wIG9yIGZvcmNlcyBhIGxheW91
dCBpZiBuZWNlc3NhcnkuCgoqIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvdHJlZS11cGRhdGUt
d2l0aC1kaXJ0eS1sYXlvdXQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKiBMYXlvdXRUZXN0cy9hY2Nl
c3NpYmlsaXR5L3RyZWUtdXBkYXRlLXdpdGgtZGlydHktbGF5b3V0Lmh0bWw6IEFkZGVkLgoqIExh
eW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvVGVzdEV4cGVjdGF0aW9uczogRGlzYWJsZSBuZXcgdGVz
dC4KKiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9pb3MvVGVzdEV4cGVjdGF0aW9uczogRW5hYmxlIG5l
dyB0ZXN0LgoqIExheW91dFRlc3RzL3BsYXRmb3JtL2lvcy9hY2Nlc3NpYmlsaXR5L3RyZWUtdXBk
YXRlLXdpdGgtZGlydHktbGF5b3V0LWV4cGVjdGVkLnR4dDogQWRkZWQuCiogU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BWENvcmVPYmplY3QuY3BwOgooV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eTo6aW5SZW5kZXJUcmVlT3JTdHlsZVVwZGF0ZSk6IEFkZGVkLgoqIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQVhDb3JlT2JqZWN0Lmg6CiogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BWE9iamVjdENhY2hlLmNwcDoKKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnBlcmZvcm1EZWZl
cnJlZENhY2hlVXBkYXRlKToKKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnBlcmZvcm1DYWNoZVVw
ZGF0ZVRpbWVyRmlyZWQpOiBEZWxldGVkLgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QVhPYmplY3RDYWNoZS5oOgooV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6cGVyZm9ybUNhY2hlVXBk
YXRlVGltZXJGaXJlZCk6CiogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5T2JqZWN0LmNwcDoKKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OnVwZGF0ZUJhY2tp
bmdTdG9yZSk6CiogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJ
c29sYXRlZFRyZWUuY3BwOgooV2ViQ29yZTo6QVhJc29sYXRlZFRyZWU6OmNyZWF0ZSk6CiogTGF5
b3V0VGVzdHMvcmVzb3VyY2VzL2FjY2Vzc2liaWxpdHktaGVscGVyLmpzOgotLS0KIFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhDb3JlT2JqZWN0LmNwcCB8IDEzICsrKysrCiBTb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYQ29yZU9iamVjdC5oICAgfCAgMiArCiAuLi4vV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwICAgfCAyNiArKysrKystLS0KIFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oICB8ICA0ICstCiAuLi4vYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcCAgICAgfCAgMiArLQogLi4uL0FjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QuY3BwICAgICAgICAgICAgIHwgIDUgKy0KIC4uLi9pc29sYXRl
ZHRyZWUvQVhJc29sYXRlZFRyZWUuY3BwICAgICAgICAgICB8ICAyICstCiAuLi50cmVlLXVwZGF0
ZS13aXRoLWRpcnR5LWxheW91dC1leHBlY3RlZC50eHQgfCAzNiArKysrKysrKysrKysKIC4uLi90
cmVlLXVwZGF0ZS13aXRoLWRpcnR5LWxheW91dC5odG1sICAgICAgICB8IDU4ICsrKysrKysrKysr
KysrKysrKysKIExheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvVGVzdEV4cGVjdGF0aW9ucyAgICB8
ICAxICsKIExheW91dFRlc3RzL3BsYXRmb3JtL2lvcy9UZXN0RXhwZWN0YXRpb25zICAgICB8ICAx
ICsKIC4uLnRyZWUtdXBkYXRlLXdpdGgtZGlydHktbGF5b3V0LWV4cGVjdGVkLnR4dCB8IDI0ICsr
KysrKysrCiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2sxL1Rlc3RFeHBlY3RhdGlvbnMgfCAg
MiArCiBMYXlvdXRUZXN0cy9yZXNvdXJjZXMvYWNjZXNzaWJpbGl0eS1oZWxwZXIuanMgfCA0MCAr
KysrKysrKy0tLS0tCiAxNCBmaWxlcyBjaGFuZ2VkLCAxODkgaW5zZXJ0aW9ucygrKSwgMjcgZGVs
ZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS90
cmVlLXVwZGF0ZS13aXRoLWRpcnR5LWxheW91dC1leHBlY3RlZC50eHQKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3RyZWUtdXBkYXRlLXdpdGgtZGlydHktbGF5
b3V0Lmh0bWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9pb3MvYWNj
ZXNzaWJpbGl0eS90cmVlLXVwZGF0ZS13aXRoLWRpcnR5LWxheW91dC1leHBlY3RlZC50eHQKCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYQ29yZU9iamVjdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYQ29yZU9iamVjdC5jcHAKaW5kZXggOGYy
YjE4MjdlMzNlLi44NzQ5ZTNlNzc1ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQVhDb3JlT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FYQ29yZU9iamVjdC5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkFYQ29yZU9iamVjdC5oIgorI2luY2x1ZGUgIkxvY2FsRnJhbWVWaWV3
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTk1LDQgKzU5NiwxNiBAQCB2b2lkIEFY
Q29yZU9iamVjdDo6YXBwZW5kUmFkaW9CdXR0b25Hcm91cE1lbWJlcnMoQWNjZXNzaWJpbGl0eUNo
aWxkcmVuVmVjdG9yJiBsaQogICAgIH0KIH0KIAorbmFtZXNwYWNlIEFjY2Vzc2liaWxpdHkgewor
Citib29sIGluUmVuZGVyVHJlZU9yU3R5bGVVcGRhdGUoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50
KQoreworICAgIGlmIChkb2N1bWVudC5pblN0eWxlUmVjYWxjKCkgfHwgZG9jdW1lbnQuaW5SZW5k
ZXJUcmVlVXBkYXRlKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGF1dG8qIHZpZXcgPSBk
b2N1bWVudC52aWV3KCk7CisgICAgcmV0dXJuIHZpZXcgJiYgdmlldy0+bGF5b3V0Q29udGV4dCgp
LmlzSW5SZW5kZXJUcmVlTGF5b3V0KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEFjY2Vzc2liaWxp
dHkKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BWENvcmVPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQVhDb3JlT2JqZWN0LmgKaW5kZXggYzk1YzY0ZmNiMmE2Li43NjNjMDY0ZmExMDQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhDb3JlT2JqZWN0LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWENvcmVPYmplY3QuaApAQCAtMTY2Miw2ICsx
NjYyLDggQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIFQgcmV0cmll
dmVBdXRvcmVsZWFzZWRWYWx1ZUZyb21NYWluVGhyZWEKIH0KICNlbmRpZgogCitib29sIGluUmVu
ZGVyVHJlZU9yU3R5bGVVcGRhdGUoY29uc3QgRG9jdW1lbnQmKTsKKwogfSAvLyBuYW1lc3BhY2Ug
QWNjZXNzaWJpbGl0eQogCiBpbmxpbmUgYm9vbCBBWENvcmVPYmplY3Q6OmlzRGVzY2VuZGFudE9m
T2JqZWN0KGNvbnN0IEFYQ29yZU9iamVjdCogYXhPYmplY3QpIGNvbnN0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAppbmRleCA3OGEzMzBkYTRjNWMu
LmJkMzEyN2RjZjFkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
WE9iamVjdENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2Jq
ZWN0Q2FjaGUuY3BwCkBAIC0zOTY1LDE1ICszOTY1LDYgQEAgYm9vbCBBWE9iamVjdENhY2hlOjpu
b2RlSXNUZXh0Q29udHJvbChjb25zdCBOb2RlKiBub2RlKQogICAgIHJldHVybiBheE9iamVjdCAm
JiBheE9iamVjdC0+aXNUZXh0Q29udHJvbCgpOwogfQogCi12b2lkIEFYT2JqZWN0Q2FjaGU6OnBl
cmZvcm1DYWNoZVVwZGF0ZVRpbWVyRmlyZWQoKQotewotICAgIC8vIElmIHRoZXJlJ3MgYSBwZW5k
aW5nIGxheW91dCwgbGV0IHRoZSBsYXlvdXQgdHJpZ2dlciB0aGUgQVggdXBkYXRlLgotICAgIGlm
ICghZG9jdW1lbnQoKS52aWV3KCkgfHwgZG9jdW1lbnQoKS52aWV3KCktPm5lZWRzTGF5b3V0KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIHBlcmZvcm1EZWZlcnJlZENhY2hlVXBkYXRlKCk7Ci19
Ci0KIHZvaWQgQVhPYmplY3RDYWNoZTo6cGVyZm9ybURlZmVycmVkQ2FjaGVVcGRhdGUoKQogewog
ICAgIEFYVFJBQ0UobWFrZVN0cmluZygiQVhPYmplY3RDYWNoZTo6cGVyZm9ybURlZmVycmVkQ2Fj
aGVVcGRhdGUgMHgiX3MsIGhleChyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4odGhpcykpKSk7
CkBAIC0zOTgzLDYgKzM5NzQsMjMgQEAgdm9pZCBBWE9iamVjdENhY2hlOjpwZXJmb3JtRGVmZXJy
ZWRDYWNoZVVwZGF0ZSgpCiAgICAgfQogICAgIFNldEZvclNjb3BlIHBlcmZvcm1pbmdEZWZlcnJl
ZENhY2hlVXBkYXRlKG1fcGVyZm9ybWluZ0RlZmVycmVkQ2FjaGVVcGRhdGUsIHRydWUpOwogCisg
ICAgLy8gSXQncyB1bmV4cGVjdGVkIGZvciB0aGlzIGZ1bmN0aW9uIHRvIHJ1biBpbiB0aGUgbWlk
ZGxlIG9mIGEgcmVuZGVyIHRyZWUgb3Igc3R5bGUgdXBkYXRlLgorICAgIEFTU0VSVCghQWNjZXNz
aWJpbGl0eTo6aW5SZW5kZXJUcmVlT3JTdHlsZVVwZGF0ZShkb2N1bWVudCgpKSk7CisKKyAgICBp
ZiAoIWRvY3VtZW50KCkudmlldygpIHx8IGRvY3VtZW50KCkudmlldygpLT5uZWVkc0xheW91dCgp
KSB7CisgICAgICAgIC8vIExheW91dCBiZWNhbWUgZGlydHkgd2hpbGUgd2FpdGluZyB0byBwZXJm
b3JtRGVmZXJyZWRDYWNoZVVwZGF0ZSwgYW5kIHdlIHJlcXVpcmUgY2xlYW4gbGF5b3V0CisgICAg
ICAgIC8vIHRvIHVwZGF0ZSB0aGUgYWNjZXNzaWJpbGl0eSB0cmVlIGNvcnJlY3RseSBpbiB0aGlz
IGZ1bmN0aW9uLgorICAgICAgICBpZiAobV9jYWNoZVVwZGF0ZURlZmVycmVkQ291bnQgPj0gMyAm
JiAhQWNjZXNzaWJpbGl0eTo6aW5SZW5kZXJUcmVlT3JTdHlsZVVwZGF0ZShkb2N1bWVudCgpKSkg
eworICAgICAgICAgICAgLy8gTGF5b3V0IGlzIGJlaW5nIHRocmFzaGVkIGJlZm9yZSB3ZSBnZXQg
YSBjaGFuY2UgdG8gdXBkYXRlLCBzbyBzdG9wIHdhaXRpbmcgYW5kIGp1c3QgZm9yY2UgaXQuCisg
ICAgICAgICAgICBtX2NhY2hlVXBkYXRlRGVmZXJyZWRDb3VudCA9IDA7CisgICAgICAgICAgICBk
b2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgLy8gV2FpdCBmb3IgbGF5b3V0IHRvIHRyaWdnZXIgYW5v
dGhlciBhc3luYyBjYWNoZSB1cGRhdGUuCisgICAgICAgICAgICArK21fY2FjaGVVcGRhdGVEZWZl
cnJlZENvdW50OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCiAgICAg
Ym9vbCBtYXJrZWRSZWxhdGlvbnNEaXJ0eSA9IGZhbHNlOwogICAgIGF1dG8gbWFya1JlbGF0aW9u
c0RpcnR5ID0gWyZdICgpIHsKICAgICAgICAgaWYgKCFtYXJrZWRSZWxhdGlvbnNEaXJ0eSkgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAppbmRleCAzZTgw
NmNiMWE4NDAuLmM4MTlmMzgxNGQyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BWE9iamVjdENhY2hlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BWE9iamVjdENhY2hlLmgKQEAgLTU4Nyw3ICs1ODcsNyBAQCBwcml2YXRlOgogCiAgICAgdm9p
ZCBmb2N1c0N1cnJlbnRNb2RhbCgpOwogICAgIAotICAgIHZvaWQgcGVyZm9ybUNhY2hlVXBkYXRl
VGltZXJGaXJlZCgpOworICAgIHZvaWQgcGVyZm9ybUNhY2hlVXBkYXRlVGltZXJGaXJlZCgpIHsg
cGVyZm9ybURlZmVycmVkQ2FjaGVVcGRhdGUoKTsgfQogCiAgICAgdm9pZCBwb3N0VGV4dFN0YXRl
Q2hhbmdlTm90aWZpY2F0aW9uKEFjY2Vzc2liaWxpdHlPYmplY3QqLCBjb25zdCBBWFRleHRTdGF0
ZUNoYW5nZUludGVudCYsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKTsKIApAQCAtNzM0LDYgKzcz
NCw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3BlcmZvcm1pbmdEZWZlcnJlZENhY2hlVXBkYXRl
IHsgZmFsc2UgfTsKICAgICBkb3VibGUgbV9sb2FkaW5nUHJvZ3Jlc3MgeyAwIH07CiAKKyAgICB1
bnNpZ25lZCBtX2NhY2hlVXBkYXRlRGVmZXJyZWRDb3VudCB7IDAgfTsKKwogICAgIC8vIFJlbGF0
aW9uc2hpcHMgYmV0d2VlbiBvYmplY3RzLgogICAgIEhhc2hNYXA8QVhJRCwgQVhSZWxhdGlvbnM+
IG1fcmVsYXRpb25zOwogICAgIGJvb2wgbV9yZWxhdGlvbnNOZWVkVXBkYXRlIHsgdHJ1ZSB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2Jq
ZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVj
dC5jcHAKaW5kZXggYjAzZjZlNmNhNjU2Li4zYmYzOWZkYjZmM2EgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApAQCAtMjA2
Nyw3ICsyMDY3LDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojp1cGRhdGVCYWNraW5nU3Rv
cmUoKQogICAgIC8vIFVwZGF0aW5nIHRoZSBsYXlvdXQgbWF5IGRlbGV0ZSB0aGlzIG9iamVjdC4K
ICAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAg
ICBpZiAoYXV0byogZG9jdW1lbnQgPSB0aGlzLT5kb2N1bWVudCgpKSB7Ci0gICAgICAgIGlmICgh
ZG9jdW1lbnQtPnZpZXcoKS0+bGF5b3V0Q29udGV4dCgpLmlzSW5SZW5kZXJUcmVlTGF5b3V0KCkg
JiYgIWRvY3VtZW50LT5pblJlbmRlclRyZWVVcGRhdGUoKSAmJiAhZG9jdW1lbnQtPmluU3R5bGVS
ZWNhbGMoKSkKKyAgICAgICAgaWYgKCFBY2Nlc3NpYmlsaXR5OjppblJlbmRlclRyZWVPclN0eWxl
VXBkYXRlKCpkb2N1bWVudCkpCiAgICAgICAgICAgICBkb2N1bWVudC0+dXBkYXRlTGF5b3V0SWdu
b3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAppbmRl
eCAwYzI3MmE0OTU0YzcuLmRlN2NjMTczZDdhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCkBAIC0x
MTEyLDggKzExMTIsMTEgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpjb21wdXRl
QWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpIGNvbnN0CiAKICAgICBpZiAoV2Vha1B0ciByZW5kZXJU
ZXh0ID0gZHluYW1pY0Rvd25jYXN0PFJlbmRlclRleHQ+KG1fcmVuZGVyZXIuZ2V0KCkpKSB7CiAg
ICAgICAgIC8vIFRleHQgZWxlbWVudHMgd2l0aCBubyByZW5kZXJlZCB0ZXh0LCBvciBvbmx5IHdo
aXRlc3BhY2Ugc2hvdWxkIG5vdCBiZSBwYXJ0IG9mIHRoZSBBWCB0cmVlLgotICAgICAgICBpZiAo
IXJlbmRlclRleHQtPmhhc1JlbmRlcmVkVGV4dCgpKQorICAgICAgICBpZiAoIXJlbmRlclRleHQt
Pmhhc1JlbmRlcmVkVGV4dCgpKSB7CisgICAgICAgICAgICAvLyBMYXlvdXQgbXVzdCBiZSBjbGVh
biB0byBtYWtlIHRoZSByaWdodCBkZWNpc2lvbiBoZXJlIChiZWNhdXNlIGhhc1JlbmRlcmVkVGV4
dCgpIGNhbiByZXR1cm4gZmFsc2Ugc29sZWx5IGJlY2F1c2UgbGF5b3V0IGlzIGRpcnR5KS4KKyAg
ICAgICAgICAgIEFTU0VSVCghcmVuZGVyVGV4dC0+bmVlZHNMYXlvdXQoKSB8fCAhcmVuZGVyVGV4
dC0+dGV4dCgpLmxlbmd0aCgpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CiAKICAgICAgICAgaWYgKHJlbmRlclRleHQtPnRleHQoKS5jb250YWluc09ubHk8aXNBU0NJSVdo
aXRlc3BhY2U+KCkpIHsKICNpZiBFTkFCTEUoQVhfVEhSRUFEX1RFWFRfQVBJUykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRU
cmVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNv
bGF0ZWRUcmVlLmNwcAppbmRleCA4Zjg2MDUyNTc4NTEuLjQ3ZDE1M2Y5NDRlZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRy
ZWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FY
SXNvbGF0ZWRUcmVlLmNwcApAQCAtMTQ0LDcgKzE0NCw3IEBAIFJlZjxBWElzb2xhdGVkVHJlZT4g
QVhJc29sYXRlZFRyZWU6OmNyZWF0ZShBWE9iamVjdENhY2hlJiBheE9iamVjdENhY2hlKQogICAg
IH0KIAogICAgIGF1dG8mIGRvY3VtZW50ID0gYXhPYmplY3RDYWNoZS5kb2N1bWVudCgpOwotICAg
IGlmICghZG9jdW1lbnQudmlldygpLT5sYXlvdXRDb250ZXh0KCkuaXNJblJlbmRlclRyZWVMYXlv
dXQoKSAmJiAhZG9jdW1lbnQuaW5SZW5kZXJUcmVlVXBkYXRlKCkgJiYgIWRvY3VtZW50LmluU3R5
bGVSZWNhbGMoKSkKKyAgICBpZiAoIUFjY2Vzc2liaWxpdHk6OmluUmVuZGVyVHJlZU9yU3R5bGVV
cGRhdGUoZG9jdW1lbnQpKQogICAgICAgICBkb2N1bWVudC51cGRhdGVMYXlvdXRJZ25vcmVQZW5k
aW5nU3R5bGVzaGVldHMoKTsKIAogICAgIHRyZWUtPm1fbWF4VHJlZURlcHRoID0gZG9jdW1lbnQu
c2V0dGluZ3MoKS5tYXhpbXVtSFRNTFBhcnNlckRPTVRyZWVEZXB0aCgpOwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS90cmVlLXVwZGF0ZS13aXRoLWRpcnR5LWxheW91dC1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3RyZWUtdXBkYXRlLXdpdGgt
ZGlydHktbGF5b3V0LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAuLjQyZmJlNDVlNjYzNgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Fj
Y2Vzc2liaWxpdHkvdHJlZS11cGRhdGUtd2l0aC1kaXJ0eS1sYXlvdXQtZXhwZWN0ZWQudHh0CkBA
IC0wLDAgKzEsMzYgQEAKK1RoaXMgdGVzdCBlbnN1cmVzIHdlIGRvbid0IG1ha2UgaW5jb3JyZWN0
IHVwZGF0ZXMgdG8gdGhlIGFjY2Vzc2liaWxpdHkgdHJlZSBkdWUgdG8gZGlydHkgbGF5b3V0Lgor
CisKK3tBWFJvbGU6IEFYV2ViQXJlYX0KKworeyNtYWluIEFYUm9sZTogQVhHcm91cH0KKwore0FY
Um9sZTogQVhCdXR0b259CisKK3tBWFJvbGU6IEFYR3JvdXB9CisKK3tBWFJvbGU6IEFYU3RhdGlj
VGV4dCBBWFZhbHVlOiBQYXJhZ3JhcGggb25lfQorCit7QVhSb2xlOiBBWEdyb3VwfQorCit7QVhS
b2xlOiBBWFN0YXRpY1RleHQgQVhWYWx1ZTogUGFyYWdyYXBoIHR3b30KKwore0FYUm9sZTogQVhH
cm91cH0KKwore0FYUm9sZTogQVhTdGF0aWNUZXh0IEFYVmFsdWU6IFBhcmFncmFwaCB0aHJlZX0K
Kwore0FYUm9sZTogQVhHcm91cH0KKwore0FYUm9sZTogQVhTdGF0aWNUZXh0IEFYVmFsdWU6IFBh
cmFncmFwaCBmb3VyfQorCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1Qg
Q09NUExFVEUKK0J1dHRvbiBvbmUKK1BhcmFncmFwaCBvbmUKKworUGFyYWdyYXBoIHR3bworCitQ
YXJhZ3JhcGggdGhyZWUKKworUGFyYWdyYXBoIGZvdXIKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2FjY2Vzc2liaWxpdHkvdHJlZS11cGRhdGUtd2l0aC1kaXJ0eS1sYXlvdXQuaHRtbCBiL0xheW91
dFRlc3RzL2FjY2Vzc2liaWxpdHkvdHJlZS11cGRhdGUtd2l0aC1kaXJ0eS1sYXlvdXQuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmNjZmI2YTI0YTU5OAotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvdHJlZS11cGRhdGUtd2l0
aC1kaXJ0eS1sYXlvdXQuaHRtbApAQCAtMCwwICsxLDU4IEBACis8IURPQ1RZUEUgSFRNTCBQVUJM
SUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9
Ii4uL3Jlc291cmNlcy9hY2Nlc3NpYmlsaXR5LWhlbHBlci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkg
aWQ9ImJvZHkiPgorCis8bWFpbiBpZD0ibWFpbiI+CisgICAgPGJ1dHRvbj5CdXR0b24gb25lPC9i
dXR0b24+CisgICAgPHA+UGFyYWdyYXBoIG9uZTwvcD4KKyAgICA8cD5QYXJhZ3JhcGggdHdvPC9w
PgorICAgIDxwPlBhcmFncmFwaCB0aHJlZTwvcD4KKzwvbWFpbj4KKworPHNjcmlwdD4KK3ZhciBv
dXRwdXQgPSAiVGhpcyB0ZXN0IGVuc3VyZXMgd2UgZG9uJ3QgbWFrZSBpbmNvcnJlY3QgdXBkYXRl
cyB0byB0aGUgYWNjZXNzaWJpbGl0eSB0cmVlIGR1ZSB0byBkaXJ0eSBsYXlvdXQuXG5cbiI7CisK
K2lmICh3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpIHsKKyAgICB3aW5kb3cuanNUZXN0
SXNBc3luYyA9IHRydWU7CisgICAgLy8gVG91Y2ggdGhlIHRyZWUgdG8gZW5zdXJlIHRoZSBBWE9i
amVjdENhY2hlIGlzIGNyZWF0ZWQuCisgICAgdG91Y2hBY2Nlc3NpYmlsaXR5VHJlZShhY2Nlc3Np
YmlsaXR5Q29udHJvbGxlci5yb290RWxlbWVudCk7CisKKyAgICB2YXIgc2NhbGUgPSAwLjE7Cisg
ICAgLy8gUmVwZWF0ZWRseSBkaXJ0eSBsYXlvdXQgYnkgY2hhbmdpbmcgdGhlIHBhZ2Ugc2NhbG9y
IGZhY3Rvci4KKyAgICBzZXRJbnRlcnZhbChhc3luYyBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlu
dGVybmFscy5zZXRQYWdlU2NhbGVGYWN0b3Ioc2NhbGUsIDAsIDApOworCisgICAgICAgIHNjYWxl
ICs9IDAuMDE7CisgICAgICAgIGlmIChzY2FsZSA+PSA0KQorICAgICAgICAgICAgc2NhbGUgPSAw
LjE7CisgICAgfSwgMCk7CisKKyAgICB2YXIgdHJhdmVyc2FsT3V0cHV0OworICAgIHNldFRpbWVv
dXQoYXN5bmMgZnVuY3Rpb24oKSB7CisgICAgICAgIGludGVybmFscy5zZXRQYWdlU2NhbGVGYWN0
b3IoMiwgMCwgMCk7CisKKyAgICAgICAgY29uc3QgbmV3UGFyYWdyYXBoID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgicCIpOworICAgICAgICBuZXdQYXJhZ3JhcGguaW5uZXJUZXh0ID0gIlBhcmFn
cmFwaCBmb3VyIjsKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1haW4iKS5hcHBl
bmRDaGlsZChuZXdQYXJhZ3JhcGgpOworICAgICAgICBpbnRlcm5hbHMuc2V0UGFnZVNjYWxlRmFj
dG9yKDIuNSwgMCwgMCk7CisKKyAgICAgICAgYXdhaXQgd2FpdEZvcigoKSA9PiB7CisgICAgICAg
ICAgICAvLyBEZXBlbmRpbmcgb24gdGhlIHNjYWxlIGZhY3RvciBhdCB0aGUgdGltZSB3ZSB0cmF2
ZXJzZSwgdGhlcmUgbWF5IGJlIHNjcm9sbGJhcnMgcHJlc2VudC4gVGhleSBhcmVuJ3QgaW1wb3J0
YW50CisgICAgICAgICAgICAvLyBmb3IgdGhpcyB0ZXN0LCBhbmQgbWFrZSBpdCBmbGFrZXksIHNv
IGV4Y2x1ZGUgdGhlbSBmcm9tIHRoZSBvdXRwdXQuCisgICAgICAgICAgICB0cmF2ZXJzYWxPdXRw
dXQgPSBkdW1wQVhTZWFyY2hUcmF2ZXJzYWwoYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIucm9vdEVs
ZW1lbnQsIHsgZXhjbHVkZVJvbGVzOiBbInNjcm9sbGJhciJdIH0pOworICAgICAgICAgICAgcmV0
dXJuIHRyYXZlcnNhbE91dHB1dC5pbmNsdWRlcygiUGFyYWdyYXBoIGZvdXIiKTsKKyAgICAgICAg
fSk7CisgICAgICAgIG91dHB1dCArPSB0cmF2ZXJzYWxPdXRwdXQ7CisKKyAgICAgICAgZGVidWco
b3V0cHV0KTsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfSwgMCk7Cit9Cis8L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
Z2xpYi9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9UZXN0RXhw
ZWN0YXRpb25zCmluZGV4IDI3MGFlZGJkMWE1Yi4uNTJjMTkxNTUyOGU4IDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vZ2xpYi9UZXN0RXhwZWN0YXRpb25zCkBAIC01MTYsNiArNTE2LDcgQEAgYWNj
ZXNzaWJpbGl0eS9kaXNwbGF5LWNvbnRlbnRzL3NlYXJjaC10cmF2ZXJzYWwuaHRtbCBbIFNraXAg
XQogYWNjZXNzaWJpbGl0eS9lbXB0eS10ZXh0LXVuZGVyLWVsZW1lbnQtY2FjaGVkLmh0bWwgWyBT
a2lwIF0KIGFjY2Vzc2liaWxpdHkvc2VhcmNoLXRyYXZlcnNhbC1hZnRlci1yb2xlLWNoYW5nZS5o
dG1sIFsgU2tpcCBdCiBhY2Nlc3NpYmlsaXR5L3RhYmxlLXNlYXJjaC10cmF2ZXJzYWwuaHRtbCBb
IFNraXAgXQorYWNjZXNzaWJpbGl0eS90cmVlLXVwZGF0ZS13aXRoLWRpcnR5LWxheW91dC5odG1s
IFsgU2tpcCBdCiBhY2Nlc3NpYmlsaXR5L2R5bmFtaWNhbGx5LWNoYW5naW5nLWlmcmFtZS1yZW1h
aW5zLWFjY2Vzc2libGUuaHRtbCBbIFNraXAgXQogYWNjZXNzaWJpbGl0eS9pZ25vcmUtbW9kYWxz
LXdpdGhvdXQtYW55LWNvbnRlbnQuaHRtbCBbIFNraXAgXQogYWNjZXNzaWJpbGl0eS9pZnJhbWUt
d2l0aC1yb2xlLmh0bWwgWyBTa2lwIF0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3Jt
L2lvcy9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vaW9zL1Rlc3RFeHBl
Y3RhdGlvbnMKaW5kZXggNWY3ZGE1YTk2ZDUyLi40NmEzNTlhN2NiNjIgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL3BsYXRmb3JtL2lvcy9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3Rz
L3BsYXRmb3JtL2lvcy9UZXN0RXhwZWN0YXRpb25zCkBAIC0yMjQ3LDYgKzIyNDcsNyBAQCBhY2Nl
c3NpYmlsaXR5L3RhYmxlLWRpc3BsYXktYmxvY2suaHRtbCBbIFBhc3MgXQogYWNjZXNzaWJpbGl0
eS90YWJsZS1kaXNwbGF5LWZsZXguaHRtbCBbIFBhc3MgXQogYWNjZXNzaWJpbGl0eS90YWJsZS1k
aXNwbGF5LWdyaWQuaHRtbCBbIFBhc3MgXQogYWNjZXNzaWJpbGl0eS90YWJsZS1kaXNwbGF5LWlu
bGluZS1ibG9jay5odG1sIFsgUGFzcyBdCithY2Nlc3NpYmlsaXR5L3RyZWUtdXBkYXRlLXdpdGgt
ZGlydHktbGF5b3V0Lmh0bWwgWyBQYXNzIF0KIGFjY2Vzc2liaWxpdHkvdXJsLXRlc3QuaHRtbCBb
IFBhc3MgXQogYWNjZXNzaWJpbGl0eS92aWRlby1lbGVtZW50LXVybC1hdHRyaWJ1dGUuaHRtbCBb
IFBhc3MgXQogYWNjZXNzaWJpbGl0eS92aXNpYmxlLWNoYXJhY3Rlci1yYW5nZS1iYXNpYy5odG1s
IFsgUGFzcyBdCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9pb3MvYWNjZXNzaWJp
bGl0eS90cmVlLXVwZGF0ZS13aXRoLWRpcnR5LWxheW91dC1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9pb3MvYWNjZXNzaWJpbGl0eS90cmVlLXVwZGF0ZS13aXRoLWRpcnR5LWxh
eW91dC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
Li4xYmRiMDBhYmQ1OWIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9p
b3MvYWNjZXNzaWJpbGl0eS90cmVlLXVwZGF0ZS13aXRoLWRpcnR5LWxheW91dC1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSwyNCBAQAorVGhpcyB0ZXN0IGVuc3VyZXMgd2UgZG9uJ3QgbWFrZSBpbmNv
cnJlY3QgdXBkYXRlcyB0byB0aGUgYWNjZXNzaWJpbGl0eSB0cmVlIGR1ZSB0byBkaXJ0eSBsYXlv
dXQuCisKKwore0J1dHRvbn0KKwore1N0YXRpY1RleHQgQVhMYWJlbDogUGFyYWdyYXBoIG9uZX0K
Kwore1N0YXRpY1RleHQgQVhMYWJlbDogUGFyYWdyYXBoIHR3b30KKwore1N0YXRpY1RleHQgQVhM
YWJlbDogUGFyYWdyYXBoIHRocmVlfQorCit7U3RhdGljVGV4dCBBWExhYmVsOiBQYXJhZ3JhcGgg
Zm91cn0KKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRF
CitCdXR0b24gb25lCitQYXJhZ3JhcGggb25lCisKK1BhcmFncmFwaCB0d28KKworUGFyYWdyYXBo
IHRocmVlCisKK1BhcmFncmFwaCBmb3VyCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9tYWMtd2sxL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2sx
L1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggZWY4YmQxODFlMGI1Li5mODA2MTEzMzk2NjYgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azEvVGVzdEV4cGVjdGF0aW9ucworKysg
Yi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2sxL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTE1Mzcs
NiArMTUzNyw4IEBAIGVkaXRpbmcvc3BlbGxpbmcvc3BlbGxpbmctaW5zZXJ0LWh0bWwuaHRtbCBb
IFBhc3MgVGltZW91dCBdCiBlZGl0aW5nL3NwZWxsaW5nL3NwZWxsY2hlY2stYXN5bmMuaHRtbCBb
IEZhaWx1cmUgXQogZWRpdGluZy9zcGVsbGluZy9zcGVsbGluZy11bmlmaWVkLWVtdWxhdGlvbi5o
dG1sIFsgRmFpbHVyZSBdCiAKK2FjY2Vzc2liaWxpdHkvdHJlZS11cGRhdGUtd2l0aC1kaXJ0eS1s
YXlvdXQuaHRtbCBbIFNraXAgXQorCiAjIFRoZSBpbmVydCBhdHRyaWJ1dGUgaXNuJ3QgbWFraW5n
IG9iamVjdHMgaW5hY2Nlc3NpYmxlIG9uIFdLMS4KIGFjY2Vzc2liaWxpdHkvbm9kZS1vbmx5LWlu
ZXJ0LW9iamVjdC5odG1sIFsgRmFpbHVyZSBdCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3Jl
c291cmNlcy9hY2Nlc3NpYmlsaXR5LWhlbHBlci5qcyBiL0xheW91dFRlc3RzL3Jlc291cmNlcy9h
Y2Nlc3NpYmlsaXR5LWhlbHBlci5qcwppbmRleCBkOTdjNDgzZTgyOTMuLjljMTVhNWNjMmVhYyAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcmVzb3VyY2VzL2FjY2Vzc2liaWxpdHktaGVscGVyLmpz
CisrKyBiL0xheW91dFRlc3RzL3Jlc291cmNlcy9hY2Nlc3NpYmlsaXR5LWhlbHBlci5qcwpAQCAt
MjQsMjYgKzI0LDM4IEBAIGZ1bmN0aW9uIGR1bXBBWFRhYmxlKGF4RWxlbWVudCwgb3B0aW9ucykg
ewogfQogCiAvLyBEdW1wcyB0aGUgcmVzdWx0IG9mIGEgdHJhdmVyc2FsIHZpYSB0aGUgVUkgZWxl
bWVudCBzZWFyY2ggQVBJICh3aGljaCBpcyB3aGF0IHNvbWUgQVRzIHVzZSkuCi1mdW5jdGlvbiBk
dW1wQVhTZWFyY2hUcmF2ZXJzYWwoYXhFbGVtZW50KSB7CisvLyBgb3B0aW9uc2AgaXMgYW4gb2Jq
ZWN0IHdpdGggdGhlc2Uga2V5czoKKy8vICAgKiBgZXhjbHVkZVJvbGVzYDogQXJyYXkgb2Ygc3Ry
aW5ncyByZXByZXNlbnRpbmcgcm9sZXMgeW91IGRvbid0IHdhbnQgdG8gaW5jbHVkZSBpbiB0aGUg
b3V0cHV0LgorLy8gICAgICAgICAgICAgICAgICAgICBDYXNlIGluc2Vuc2l0aXZlLCBwYXJ0aWFs
IG1hdGNoIGlzIGZpbmUsIGUuZy4gInNjcm9sbGJhciIgd2lsbCBleGNsdWRlICJBWFNjcm9sbEJh
ciIuCitmdW5jdGlvbiBkdW1wQVhTZWFyY2hUcmF2ZXJzYWwoYXhFbGVtZW50LCBvcHRpb25zID0g
eyB9KSB7CiAgICAgbGV0IG91dHB1dCA9ICIiOwotICAgIGZ1bmN0aW9uIGVsZW1lbnREZXNjcmlw
dGlvbihheEVsZW1lbnQpIHsKLSAgICAgICAgaWYgKCFheEVsZW1lbnQpCi0gICAgICAgICAgICBy
ZXR1cm4gIm51bGwiOwotCi0gICAgICAgIGNvbnN0IHJvbGUgPSBheEVsZW1lbnQucm9sZTsKLSAg
ICAgICAgY29uc3QgaWQgPSBheEVsZW1lbnQuZG9tSWRlbnRpZmllcjsKLSAgICAgICAgbGV0IHJl
c3VsdCA9IGAke2lkID8gYCMke2lkfSBgIDogIiJ9JHtyb2xlfWA7Ci0gICAgICAgIGlmIChyb2xl
LmluY2x1ZGVzKCJTdGF0aWNUZXh0IikpCi0gICAgICAgICAgICByZXN1bHQgKz0gYCAke2FjY2Vz
c2liaWxpdHlDb250cm9sbGVyLnBsYXRmb3JtTmFtZSA9PT0gImlvcyIgPyBheEVsZW1lbnQuZGVz
Y3JpcHRpb24gOiBheEVsZW1lbnQuc3RyaW5nVmFsdWV9YDsKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICB9Ci0KICAgICBsZXQgc2VhcmNoUmVzdWx0ID0gbnVsbDsKICAgICB3aGlsZSAodHJ1
ZSkgewogICAgICAgICBzZWFyY2hSZXN1bHQgPSBheEVsZW1lbnQudWlFbGVtZW50Rm9yU2VhcmNo
UHJlZGljYXRlKHNlYXJjaFJlc3VsdCwgdHJ1ZSwgIkFYQW55VHlwZVNlYXJjaEtleSIsICIiLCBm
YWxzZSk7CiAgICAgICAgIGlmICghc2VhcmNoUmVzdWx0KQogICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIG91dHB1dCArPSBgXG57JHtlbGVtZW50RGVzY3JpcHRpb24oc2VhcmNoUmVzdWx0KX19
XG5gOworCisgICAgICAgIGNvbnN0IHJvbGUgPSBzZWFyY2hSZXN1bHQucm9sZTsKKworICAgICAg
ICBsZXQgZXhjbHVkZWQgPSBmYWxzZTsKKyAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9u
cz8uZXhjbHVkZVJvbGVzKSkgeworICAgICAgICAgICAgZm9yIChjb25zdCBleGNsdWRlZFJvbGUg
b2Ygb3B0aW9ucy5leGNsdWRlUm9sZXMpIHsKKyAgICAgICAgICAgICAgICBpZiAocm9sZS50b0xv
d2VyQ2FzZSgpLmluY2x1ZGVzKGV4Y2x1ZGVkUm9sZS50b0xvd2VyQ2FzZSgpKSkgeworICAgICAg
ICAgICAgICAgICAgICBleGNsdWRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IGlmIChleGNsdWRlZCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGNvbnN0IGlk
ID0gc2VhcmNoUmVzdWx0LmRvbUlkZW50aWZpZXI7CisgICAgICAgIGxldCByZXN1bHREZXNjcmlw
dGlvbiA9IGAke2lkID8gYCMke2lkfSBgIDogIiJ9JHtyb2xlfWA7CisgICAgICAgIGlmIChyb2xl
LmluY2x1ZGVzKCJTdGF0aWNUZXh0IikpCisgICAgICAgICAgICByZXN1bHREZXNjcmlwdGlvbiAr
PSBgICR7YWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIucGxhdGZvcm1OYW1lID09PSAiaW9zIiA/IHNl
YXJjaFJlc3VsdC5kZXNjcmlwdGlvbiA6IHNlYXJjaFJlc3VsdC5zdHJpbmdWYWx1ZX1gOworCisg
ICAgICAgIG91dHB1dCArPSBgXG57JHtyZXN1bHREZXNjcmlwdGlvbn19XG5gOwogICAgIH0KICAg
ICByZXR1cm4gb3V0cHV0OwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>469622</attachid>
            <date>2024-01-30 14:23:30 -0800</date>
            <delta_ts>2024-01-31 11:13:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-268239-20240130142329.patch</filename>
            <type>text/plain</type>
            <size>20556</size>
            <attacher name="Tyler Wilcock">tyler_w</attacher>
            
              <data encoding="base64">RnJvbSAxOWY4NzM0ZTg3NGFmNjM3YjQyNjMyNTJhYjJmZWRlZjk0OWUxNjE5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBUeWxlciBXaWxjb2NrIDx0eWxlcl93QGFwcGxlLmNvbT4KRGF0
ZTogU2F0LCAyNyBKYW4gMjAyNCAxNzo0OTo0NSAtMDgwMApTdWJqZWN0OiBbUEFUQ0hdIEFYOiBE
ZXBlbmRpbmcgb24gdGhlIHRpbWluZyBvZgogRG9jdW1lbnQ6OmZsdXNoRGVmZXJyZWRBWE9iamVj
dENhY2hlVXBkYXRlKCksCiBBWE9iamVjdENhY2hlOjpwZXJmb3JtRGVmZXJyZWRDYWNoZVVwZGF0
ZSBjYW4gYmUgcnVuIHdpdGggZGlydHkgbGF5b3V0CiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjY4MjM5IHJkYXI6Ly9wcm9ibGVtLzEyMTc2MDQyNwoKUmV2aWV3ZWQg
YnkgQ2hyaXMgRmxlaXphY2ggYW5kIEFuZHJlcyBHb256YWxlei4KCkluIGJ1ZzoKCmh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTY0MDMgKERlZmVyIEFYIG9iamVjdCBj
YWNoZSB1cGRhdGUgYXMgYW4gZXZlbnQgbG9vcCB0YXNrIGluc3RlYWQgb2YgYSBwb3N0IGxheW91
dCB0YXNrKQoKQVhPYmplY3RDYWNoZTo6cGVyZnJvbURlZmVycmVkQ2FjaGVVcGRhdGUgd2FzIG1v
dmVkIGZyb20gYmVpbmcgYSBzeW5jaHJvbm91cyBwb3N0LWxheW91dCB0YXNrIHRvIGFuIGFzeW5j
aHJvbm91cyBvbmUsCnJ1bm5pbmcgd2hlbiBwb3NzaWJsZSB2aWEgdGhlIEV2ZW50TG9vcC4KClRo
ZSBwcm9ibGVtIHdpdGggdGhpcyBpcyB0aGF0IGJ5IHRoZSB0aW1lIERvY3VtZW50OjpmbHVzaERl
ZmVycmVkQVhPYmplY3RDYWNoZVVwZGF0ZSgpIGFjdHVhbGx5IGZpcmVzLCBsYXlvdXQgbWF5IGhh
dmUKYmVjb21lIGRpcnR5IGFnYWluLCB3aGljaCBtZWFucyBBWE9iamVjdENhY2hlOjpwZXJmb3Jt
RGVmZXJyZWRDYWNoZVVwZGF0ZSBtYWtlcyBpbmNvcnJlY3QgdXBkYXRlcyB0byB0aGUgYWNjZXNz
aWJpbGl0eQp0cmVlLiBBcyBvbmUgc3BlY2lmaWMgZXhhbXBsZSwgaXQgY2FuIGNhdXNlIHVzIHRv
IGNvbXB1dGUgdGhlIHdyb25nIGlnbm9yZWQgdmFsdWUgZm9yIFJlbmRlclRleHRzLCBhcyB3ZSBj
aGVjawpSZW5kZXJUZXh0OjpoYXNSZW5kZXJlZFRleHQgd2hpY2ggbWF5IHVuZXhwZWN0ZWRseSBy
ZXR1cm4gZmFsc2Ugb25seSBiZWNhdXNlIHRoZSBsYXlvdXQgaXMgZGlydHkuCgpXaXRoIHRoaXMg
cGF0Y2gsIHBlcmZvcm1EZWZlcnJlZENhY2hlVXBkYXRlIG5vdyBkZXRlY3RzIHdoZW4gbGF5b3V0
IGlzIGRpcnR5LCBhbmQgZWl0aGVyIHdhaXRzIGFub3RoZXIgcm91bmQgaW4gdGhlIGV2ZW50Cmxv
b3Agb3IgZm9yY2VzIGEgbGF5b3V0IGlmIG5lY2Vzc2FyeS4gV2FpdGluZyBmb3IgYSBjbGVhbiBs
YXlvdXQgcmF0aGVyIHRoYW4gZm9yY2luZyBvbmUgaXMgaWRlYWwsIGFzIGxheW91dCBpcyBleHBl
bnNpdmUuCgoqIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvdHJlZS11cGRhdGUtd2l0aC1kaXJ0
eS1sYXlvdXQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5
L3RyZWUtdXBkYXRlLXdpdGgtZGlydHktbGF5b3V0Lmh0bWw6IEFkZGVkLgoqIExheW91dFRlc3Rz
L3BsYXRmb3JtL2dsaWIvVGVzdEV4cGVjdGF0aW9uczogRGlzYWJsZSBuZXcgdGVzdC4KKiBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9pb3MvVGVzdEV4cGVjdGF0aW9uczogRW5hYmxlIG5ldyB0ZXN0Lgoq
IExheW91dFRlc3RzL3BsYXRmb3JtL2lvcy9hY2Nlc3NpYmlsaXR5L3RyZWUtdXBkYXRlLXdpdGgt
ZGlydHktbGF5b3V0LWV4cGVjdGVkLnR4dDogQWRkZWQuCiogU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BWENvcmVPYmplY3QuY3BwOgooV2ViQ29yZTo6QWNjZXNzaWJpbGl0eTo6aW5SZW5k
ZXJUcmVlT3JTdHlsZVVwZGF0ZSk6IEFkZGVkLgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQVhDb3JlT2JqZWN0Lmg6CiogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVj
dENhY2hlLmNwcDoKKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnBlcmZvcm1EZWZlcnJlZENhY2hl
VXBkYXRlKToKKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnBlcmZvcm1DYWNoZVVwZGF0ZVRpbWVy
RmlyZWQpOiBEZWxldGVkLgoqIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RD
YWNoZS5oOgooV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6cGVyZm9ybUNhY2hlVXBkYXRlVGltZXJG
aXJlZCk6CiogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0
LmNwcDoKKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OnVwZGF0ZUJhY2tpbmdTdG9yZSk6
CiogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRy
ZWUuY3BwOgooV2ViQ29yZTo6QVhJc29sYXRlZFRyZWU6OmNyZWF0ZSk6CiogTGF5b3V0VGVzdHMv
cmVzb3VyY2VzL2FjY2Vzc2liaWxpdHktaGVscGVyLmpzOgotLS0KIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQVhDb3JlT2JqZWN0LmNwcCB8IDEzICsrKysrCiBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FYQ29yZU9iamVjdC5oICAgfCAgNCArKwogLi4uL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcCAgIHwgMzEgKysrKysrLS0tLQogU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmggIHwgIDYgKy0KIC4uLi9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwICAgICB8ICA4ICstLQogLi4uL0FjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3QuY3BwICAgICAgICAgICAgIHwgIDUgKy0KIC4uLi9pc29sYXRlZHRyZWUv
QVhJc29sYXRlZFRyZWUuY3BwICAgICAgICAgICB8ICAyICstCiBTb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuY3BwICAgICAgICAgICAgICAgfCAgMiArLQogLi4udHJlZS11cGRhdGUtd2l0aC1k
aXJ0eS1sYXlvdXQtZXhwZWN0ZWQudHh0IHwgMzYgKysrKysrKysrKysrCiAuLi4vdHJlZS11cGRh
dGUtd2l0aC1kaXJ0eS1sYXlvdXQuaHRtbCAgICAgICAgfCA1OCArKysrKysrKysrKysrKysrKysr
CiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL1Rlc3RFeHBlY3RhdGlvbnMgICAgfCAgMSArCiBM
YXlvdXRUZXN0cy9wbGF0Zm9ybS9pb3MvVGVzdEV4cGVjdGF0aW9ucyAgICAgfCAgMSArCiAuLi50
cmVlLXVwZGF0ZS13aXRoLWRpcnR5LWxheW91dC1leHBlY3RlZC50eHQgfCAyNCArKysrKysrKwog
TGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMS9UZXN0RXhwZWN0YXRpb25zIHwgIDIgKwogTGF5
b3V0VGVzdHMvcmVzb3VyY2VzL2FjY2Vzc2liaWxpdHktaGVscGVyLmpzIHwgNDAgKysrKysrKyst
LS0tLQogMTUgZmlsZXMgY2hhbmdlZCwgMjAwIGluc2VydGlvbnMoKyksIDMzIGRlbGV0aW9ucygt
KQogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvdHJlZS11cGRh
dGUtd2l0aC1kaXJ0eS1sYXlvdXQtZXhwZWN0ZWQudHh0CiBjcmVhdGUgbW9kZSAxMDA2NDQgTGF5
b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS90cmVlLXVwZGF0ZS13aXRoLWRpcnR5LWxheW91dC5odG1s
CiBjcmVhdGUgbW9kZSAxMDA2NDQgTGF5b3V0VGVzdHMvcGxhdGZvcm0vaW9zL2FjY2Vzc2liaWxp
dHkvdHJlZS11cGRhdGUtd2l0aC1kaXJ0eS1sYXlvdXQtZXhwZWN0ZWQudHh0CgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWENvcmVPYmplY3QuY3BwIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWENvcmVPYmplY3QuY3BwCmluZGV4IDhmMmIxODI3ZTMz
ZS4uODc0OWUzZTc3NWQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FYQ29yZU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWENv
cmVPYmplY3QuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJBWENvcmVPYmplY3QuaCIKKyNpbmNsdWRlICJMb2NhbEZyYW1lVmlldy5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTU5NSw0ICs1OTYsMTYgQEAgdm9pZCBBWENvcmVPYmpl
Y3Q6OmFwcGVuZFJhZGlvQnV0dG9uR3JvdXBNZW1iZXJzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZl
Y3RvciYgbGkKICAgICB9CiB9CiAKK25hbWVzcGFjZSBBY2Nlc3NpYmlsaXR5IHsKKworYm9vbCBp
blJlbmRlclRyZWVPclN0eWxlVXBkYXRlKGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCkKK3sKKyAg
ICBpZiAoZG9jdW1lbnQuaW5TdHlsZVJlY2FsYygpIHx8IGRvY3VtZW50LmluUmVuZGVyVHJlZVVw
ZGF0ZSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBhdXRvKiB2aWV3ID0gZG9jdW1lbnQu
dmlldygpOworICAgIHJldHVybiB2aWV3ICYmIHZpZXctPmxheW91dENvbnRleHQoKS5pc0luUmVu
ZGVyVHJlZUxheW91dCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBBY2Nlc3NpYmlsaXR5CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQVhDb3JlT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYQ29y
ZU9iamVjdC5oCmluZGV4IGM5NWM2NGZjYjJhNi4uZjBkYmYzMmJiYzJiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYQ29yZU9iamVjdC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhDb3JlT2JqZWN0LmgKQEAgLTc3MCw2ICs3NzAsOCBAQCBl
bnVtIGNsYXNzIFNwaW5CdXR0b25UeXBlIDogYm9vbCB7CiAgICAgQ29tcG9zaXRlCiB9OwogCitl
bnVtIGNsYXNzIEZvcmNlTGF5b3V0IDogYm9vbCB7IE5vLCBZZXMgfTsKKwogLy8gVXNlIHRoaXMg
c3RydWN0IHRvIHN0b3JlIHRoZSBpc0lnbm9yZWQgZGF0YSB0aGF0IGRlcGVuZHMgb24gdGhlIHBh
cmVudHMsIHNvIHRoYXQgaW4gYWRkQ2hpbGRyZW4oKQogLy8gd2UgYXZvaWQgZ29pbmcgdXAgdGhl
IHBhcmVudCBjaGFpbiBmb3IgZWFjaCBlbGVtZW50IHdoaWxlIHRyYXZlcnNpbmcgdGhlIHRyZWUg
d2l0aCB1c2VmdWwgaW5mb3JtYXRpb24gYWxyZWFkeS4KIHN0cnVjdCBBY2Nlc3NpYmlsaXR5SXNJ
Z25vcmVkRnJvbVBhcmVudERhdGEgewpAQCAtMTY2Miw2ICsxNjY0LDggQEAgdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVT4gaW5saW5lIFQgcmV0cmlldmVBdXRvcmVsZWFzZWRWYWx1ZUZy
b21NYWluVGhyZWEKIH0KICNlbmRpZgogCitib29sIGluUmVuZGVyVHJlZU9yU3R5bGVVcGRhdGUo
Y29uc3QgRG9jdW1lbnQmKTsKKwogfSAvLyBuYW1lc3BhY2UgQWNjZXNzaWJpbGl0eQogCiBpbmxp
bmUgYm9vbCBBWENvcmVPYmplY3Q6OmlzRGVzY2VuZGFudE9mT2JqZWN0KGNvbnN0IEFYQ29yZU9i
amVjdCogYXhPYmplY3QpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
WE9iamVjdENhY2hlLmNwcAppbmRleCA3OGEzMzBkYTRjNWMuLmMxZWVlMzFkZTUzZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCkBAIC0zOTY1
LDE2ICszOTY1LDcgQEAgYm9vbCBBWE9iamVjdENhY2hlOjpub2RlSXNUZXh0Q29udHJvbChjb25z
dCBOb2RlKiBub2RlKQogICAgIHJldHVybiBheE9iamVjdCAmJiBheE9iamVjdC0+aXNUZXh0Q29u
dHJvbCgpOwogfQogCi12b2lkIEFYT2JqZWN0Q2FjaGU6OnBlcmZvcm1DYWNoZVVwZGF0ZVRpbWVy
RmlyZWQoKQotewotICAgIC8vIElmIHRoZXJlJ3MgYSBwZW5kaW5nIGxheW91dCwgbGV0IHRoZSBs
YXlvdXQgdHJpZ2dlciB0aGUgQVggdXBkYXRlLgotICAgIGlmICghZG9jdW1lbnQoKS52aWV3KCkg
fHwgZG9jdW1lbnQoKS52aWV3KCktPm5lZWRzTGF5b3V0KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIHBlcmZvcm1EZWZlcnJlZENhY2hlVXBkYXRlKCk7Ci19Ci0KLXZvaWQgQVhPYmplY3RDYWNo
ZTo6cGVyZm9ybURlZmVycmVkQ2FjaGVVcGRhdGUoKQordm9pZCBBWE9iamVjdENhY2hlOjpwZXJm
b3JtRGVmZXJyZWRDYWNoZVVwZGF0ZShGb3JjZUxheW91dCBmb3JjZUxheW91dCkKIHsKICAgICBB
WFRSQUNFKG1ha2VTdHJpbmcoIkFYT2JqZWN0Q2FjaGU6OnBlcmZvcm1EZWZlcnJlZENhY2hlVXBk
YXRlIDB4Il9zLCBoZXgocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHRoaXMpKSkpOwogICAg
IGlmIChtX3BlcmZvcm1pbmdEZWZlcnJlZENhY2hlVXBkYXRlKSB7CkBAIC0zOTgzLDYgKzM5NzQs
MjYgQEAgdm9pZCBBWE9iamVjdENhY2hlOjpwZXJmb3JtRGVmZXJyZWRDYWNoZVVwZGF0ZSgpCiAg
ICAgfQogICAgIFNldEZvclNjb3BlIHBlcmZvcm1pbmdEZWZlcnJlZENhY2hlVXBkYXRlKG1fcGVy
Zm9ybWluZ0RlZmVycmVkQ2FjaGVVcGRhdGUsIHRydWUpOwogCisgICAgLy8gSXQncyB1bmV4cGVj
dGVkIGZvciB0aGlzIGZ1bmN0aW9uIHRvIHJ1biBpbiB0aGUgbWlkZGxlIG9mIGEgcmVuZGVyIHRy
ZWUgb3Igc3R5bGUgdXBkYXRlLgorICAgIEFTU0VSVCghQWNjZXNzaWJpbGl0eTo6aW5SZW5kZXJU
cmVlT3JTdHlsZVVwZGF0ZShkb2N1bWVudCgpKSk7CisKKyAgICBpZiAoIWRvY3VtZW50KCkudmll
dygpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoZG9jdW1lbnQoKS52aWV3KCktPm5lZWRz
TGF5b3V0KCkpIHsKKyAgICAgICAgLy8gTGF5b3V0IGJlY2FtZSBkaXJ0eSB3aGlsZSB3YWl0aW5n
IHRvIHBlcmZvcm1EZWZlcnJlZENhY2hlVXBkYXRlLCBhbmQgd2UgcmVxdWlyZSBjbGVhbiBsYXlv
dXQKKyAgICAgICAgLy8gdG8gdXBkYXRlIHRoZSBhY2Nlc3NpYmlsaXR5IHRyZWUgY29ycmVjdGx5
IGluIHRoaXMgZnVuY3Rpb24uCisgICAgICAgIGlmICgobV9jYWNoZVVwZGF0ZURlZmVycmVkQ291
bnQgPj0gMyB8fCBmb3JjZUxheW91dCA9PSBGb3JjZUxheW91dDo6WWVzKSAmJiAhQWNjZXNzaWJp
bGl0eTo6aW5SZW5kZXJUcmVlT3JTdHlsZVVwZGF0ZShkb2N1bWVudCgpKSkgeworICAgICAgICAg
ICAgLy8gTGF5b3V0IGlzIGJlaW5nIHRocmFzaGVkIGJlZm9yZSB3ZSBnZXQgYSBjaGFuY2UgdG8g
dXBkYXRlLCBzbyBzdG9wIHdhaXRpbmcgYW5kIGp1c3QgZm9yY2UgaXQuCisgICAgICAgICAgICBt
X2NhY2hlVXBkYXRlRGVmZXJyZWRDb3VudCA9IDA7CisgICAgICAgICAgICBkb2N1bWVudCgpLnVw
ZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgLy8gV2FpdCBmb3IgbGF5b3V0IHRvIHRyaWdnZXIgYW5vdGhlciBhc3luYyBj
YWNoZSB1cGRhdGUuCisgICAgICAgICAgICArK21fY2FjaGVVcGRhdGVEZWZlcnJlZENvdW50Owor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCiAgICAgYm9vbCBtYXJrZWRS
ZWxhdGlvbnNEaXJ0eSA9IGZhbHNlOwogICAgIGF1dG8gbWFya1JlbGF0aW9uc0RpcnR5ID0gWyZd
ICgpIHsKICAgICAgICAgaWYgKCFtYXJrZWRSZWxhdGlvbnNEaXJ0eSkgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAppbmRleCAzZTgwNmNiMWE4NDAuLjIz
NmI0YjNlNTIxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9i
amVjdENhY2hlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENh
Y2hlLmgKQEAgLTQ3Nyw3ICs0NzcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZWZlclJlY29tcHV0
ZVRhYmxlQ2VsbFNsb3RzKEFjY2Vzc2liaWxpdHlUYWJsZSYpOwogICAgIHZvaWQgZGVmZXJUZXh0
Q2hhbmdlZElmTmVlZGVkKE5vZGUqKTsKICAgICB2b2lkIGRlZmVyU2VsZWN0ZWRDaGlsZHJlbkNo
YW5nZWRJZk5lZWRlZChFbGVtZW50Jik7Ci0gICAgdm9pZCBwZXJmb3JtRGVmZXJyZWRDYWNoZVVw
ZGF0ZSgpOworICAgIHZvaWQgcGVyZm9ybURlZmVycmVkQ2FjaGVVcGRhdGUoRm9yY2VMYXlvdXQp
OwogICAgIHZvaWQgZGVmZXJUZXh0UmVwbGFjZW1lbnROb3RpZmljYXRpb25Gb3JUZXh0Q29udHJv
bChIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCYsIGNvbnN0IFN0cmluZyYgcHJldmlvdXNWYWx1
ZSk7CiAKICAgICBzdGQ6Om9wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5nZU1hdGNoZXNUZXh0TmVh
clJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgU3RyaW5nJik7CkBAIC01ODcsNyArNTg3
LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZm9jdXNDdXJyZW50TW9kYWwoKTsKICAgICAKLSAg
ICB2b2lkIHBlcmZvcm1DYWNoZVVwZGF0ZVRpbWVyRmlyZWQoKTsKKyAgICB2b2lkIHBlcmZvcm1D
YWNoZVVwZGF0ZVRpbWVyRmlyZWQoKSB7IHBlcmZvcm1EZWZlcnJlZENhY2hlVXBkYXRlKEZvcmNl
TGF5b3V0OjpObyk7IH0KIAogICAgIHZvaWQgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlv
bihBY2Nlc3NpYmlsaXR5T2JqZWN0KiwgY29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQmLCBj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJik7CiAKQEAgLTczNCw2ICs3MzQsOCBAQCBwcml2YXRlOgog
ICAgIGJvb2wgbV9wZXJmb3JtaW5nRGVmZXJyZWRDYWNoZVVwZGF0ZSB7IGZhbHNlIH07CiAgICAg
ZG91YmxlIG1fbG9hZGluZ1Byb2dyZXNzIHsgMCB9OwogCisgICAgdW5zaWduZWQgbV9jYWNoZVVw
ZGF0ZURlZmVycmVkQ291bnQgeyAwIH07CisKICAgICAvLyBSZWxhdGlvbnNoaXBzIGJldHdlZW4g
b2JqZWN0cy4KICAgICBIYXNoTWFwPEFYSUQsIEFYUmVsYXRpb25zPiBtX3JlbGF0aW9uczsKICAg
ICBib29sIG1fcmVsYXRpb25zTmVlZFVwZGF0ZSB7IHRydWUgfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCmluZGV4IDQ2MGFh
MzcxNDdkNi4uOWUwNzA1MzY5NTY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKQEAgLTIwNjYsMTMgKzIwNjYsMTMgQEAg
dm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojp1cGRhdGVCYWNraW5nU3RvcmUoKQogICAgIC8vIFVw
ZGF0aW5nIHRoZSBsYXlvdXQgbWF5IGRlbGV0ZSB0aGlzIG9iamVjdC4KICAgICBSZWZQdHI8QWNj
ZXNzaWJpbGl0eU9iamVjdD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBpZiAoYXV0byogZG9j
dW1lbnQgPSB0aGlzLT5kb2N1bWVudCgpKSB7Ci0gICAgICAgIGlmICghZG9jdW1lbnQtPnZpZXco
KS0+bGF5b3V0Q29udGV4dCgpLmlzSW5SZW5kZXJUcmVlTGF5b3V0KCkgJiYgIWRvY3VtZW50LT5p
blJlbmRlclRyZWVVcGRhdGUoKSAmJiAhZG9jdW1lbnQtPmluU3R5bGVSZWNhbGMoKSkKKyAgICAg
ICAgaWYgKCFBY2Nlc3NpYmlsaXR5OjppblJlbmRlclRyZWVPclN0eWxlVXBkYXRlKCpkb2N1bWVu
dCkpCiAgICAgICAgICAgICBkb2N1bWVudC0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxl
c2hlZXRzKCk7CiAgICAgfQogCi0gICAgaWYgKGF1dG8gY2FjaGUgPSBheE9iamVjdENhY2hlKCkp
Ci0gICAgICAgIGNhY2hlLT5wZXJmb3JtRGVmZXJyZWRDYWNoZVVwZGF0ZSgpOwotICAgIAorICAg
IGlmIChhdXRvKiBjYWNoZSA9IGF4T2JqZWN0Q2FjaGUoKSkKKyAgICAgICAgY2FjaGUtPnBlcmZv
cm1EZWZlcnJlZENhY2hlVXBkYXRlKEZvcmNlTGF5b3V0OjpZZXMpOworCiAgICAgdXBkYXRlQ2hp
bGRyZW5JZk5lY2Vzc2FyeSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAppbmRleCAwYzI3MmE0
OTU0YzcuLmRlN2NjMTczZDdhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCkBAIC0xMTEyLDggKzEx
MTIsMTEgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpjb21wdXRlQWNjZXNzaWJp
bGl0eUlzSWdub3JlZCgpIGNvbnN0CiAKICAgICBpZiAoV2Vha1B0ciByZW5kZXJUZXh0ID0gZHlu
YW1pY0Rvd25jYXN0PFJlbmRlclRleHQ+KG1fcmVuZGVyZXIuZ2V0KCkpKSB7CiAgICAgICAgIC8v
IFRleHQgZWxlbWVudHMgd2l0aCBubyByZW5kZXJlZCB0ZXh0LCBvciBvbmx5IHdoaXRlc3BhY2Ug
c2hvdWxkIG5vdCBiZSBwYXJ0IG9mIHRoZSBBWCB0cmVlLgotICAgICAgICBpZiAoIXJlbmRlclRl
eHQtPmhhc1JlbmRlcmVkVGV4dCgpKQorICAgICAgICBpZiAoIXJlbmRlclRleHQtPmhhc1JlbmRl
cmVkVGV4dCgpKSB7CisgICAgICAgICAgICAvLyBMYXlvdXQgbXVzdCBiZSBjbGVhbiB0byBtYWtl
IHRoZSByaWdodCBkZWNpc2lvbiBoZXJlIChiZWNhdXNlIGhhc1JlbmRlcmVkVGV4dCgpIGNhbiBy
ZXR1cm4gZmFsc2Ugc29sZWx5IGJlY2F1c2UgbGF5b3V0IGlzIGRpcnR5KS4KKyAgICAgICAgICAg
IEFTU0VSVCghcmVuZGVyVGV4dC0+bmVlZHNMYXlvdXQoKSB8fCAhcmVuZGVyVGV4dC0+dGV4dCgp
Lmxlbmd0aCgpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CiAKICAgICAg
ICAgaWYgKHJlbmRlclRleHQtPnRleHQoKS5jb250YWluc09ubHk8aXNBU0NJSVdoaXRlc3BhY2U+
KCkpIHsKICNpZiBFTkFCTEUoQVhfVEhSRUFEX1RFWFRfQVBJUykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVl
LmNwcAppbmRleCBlNjI1ZmVjNjRlOTAuLmJhNWYyMGUwZjFjYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRU
cmVlLmNwcApAQCAtMTQ0LDcgKzE0NCw3IEBAIFJlZjxBWElzb2xhdGVkVHJlZT4gQVhJc29sYXRl
ZFRyZWU6OmNyZWF0ZShBWE9iamVjdENhY2hlJiBheE9iamVjdENhY2hlKQogICAgIH0KIAogICAg
IGF1dG8mIGRvY3VtZW50ID0gYXhPYmplY3RDYWNoZS5kb2N1bWVudCgpOwotICAgIGlmICghZG9j
dW1lbnQudmlldygpLT5sYXlvdXRDb250ZXh0KCkuaXNJblJlbmRlclRyZWVMYXlvdXQoKSAmJiAh
ZG9jdW1lbnQuaW5SZW5kZXJUcmVlVXBkYXRlKCkgJiYgIWRvY3VtZW50LmluU3R5bGVSZWNhbGMo
KSkKKyAgICBpZiAoIUFjY2Vzc2liaWxpdHk6OmluUmVuZGVyVHJlZU9yU3R5bGVVcGRhdGUoZG9j
dW1lbnQpKQogICAgICAgICBkb2N1bWVudC51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVz
aGVldHMoKTsKIAogICAgIHRyZWUtPm1fbWF4VHJlZURlcHRoID0gZG9jdW1lbnQuc2V0dGluZ3Mo
KS5tYXhpbXVtSFRNTFBhcnNlckRPTVRyZWVEZXB0aCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAK
aW5kZXggYzE4ZWU2MGIzMTZkLi5kOWJhN2I4ODg3Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cApAQCAtNTQxNSw3ICs1NDE1LDcgQEAgdm9pZCBEb2N1bWVudDo6Zmx1c2hEZWZlcnJlZEFYT2Jq
ZWN0Q2FjaGVVcGRhdGUoKQogICAgIG1fc2NoZWR1bGVkRGVmZXJyZWRBWE9iamVjdENhY2hlVXBk
YXRlID0gZmFsc2U7CiAKICAgICBpZiAoQ2hlY2tlZFB0ciBjYWNoZSA9IGV4aXN0aW5nQVhPYmpl
Y3RDYWNoZSgpKQotICAgICAgICBjYWNoZS0+cGVyZm9ybURlZmVycmVkQ2FjaGVVcGRhdGUoKTsK
KyAgICAgICAgY2FjaGUtPnBlcmZvcm1EZWZlcnJlZENhY2hlVXBkYXRlKEZvcmNlTGF5b3V0OjpO
byk7CiB9CiAKIHZvaWQgRG9jdW1lbnQ6OnVwZGF0ZUFjY2Vzc2liaWxpdHlPYmplY3RSZWdpb25z
KCkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvdHJlZS11cGRhdGUtd2l0
aC1kaXJ0eS1sYXlvdXQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS90
cmVlLXVwZGF0ZS13aXRoLWRpcnR5LWxheW91dC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi40MmZiZTQ1ZTY2MzYKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3RyZWUtdXBkYXRlLXdpdGgtZGlydHktbGF5b3V0
LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDM2IEBACitUaGlzIHRlc3QgZW5zdXJlcyB3ZSBkb24n
dCBtYWtlIGluY29ycmVjdCB1cGRhdGVzIHRvIHRoZSBhY2Nlc3NpYmlsaXR5IHRyZWUgZHVlIHRv
IGRpcnR5IGxheW91dC4KKworCit7QVhSb2xlOiBBWFdlYkFyZWF9CisKK3sjbWFpbiBBWFJvbGU6
IEFYR3JvdXB9CisKK3tBWFJvbGU6IEFYQnV0dG9ufQorCit7QVhSb2xlOiBBWEdyb3VwfQorCit7
QVhSb2xlOiBBWFN0YXRpY1RleHQgQVhWYWx1ZTogUGFyYWdyYXBoIG9uZX0KKwore0FYUm9sZTog
QVhHcm91cH0KKwore0FYUm9sZTogQVhTdGF0aWNUZXh0IEFYVmFsdWU6IFBhcmFncmFwaCB0d299
CisKK3tBWFJvbGU6IEFYR3JvdXB9CisKK3tBWFJvbGU6IEFYU3RhdGljVGV4dCBBWFZhbHVlOiBQ
YXJhZ3JhcGggdGhyZWV9CisKK3tBWFJvbGU6IEFYR3JvdXB9CisKK3tBWFJvbGU6IEFYU3RhdGlj
VGV4dCBBWFZhbHVlOiBQYXJhZ3JhcGggZm91cn0KKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCitCdXR0b24gb25lCitQYXJhZ3JhcGggb25lCisKK1Bh
cmFncmFwaCB0d28KKworUGFyYWdyYXBoIHRocmVlCisKK1BhcmFncmFwaCBmb3VyCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3RyZWUtdXBkYXRlLXdpdGgtZGlydHktbGF5
b3V0Lmh0bWwgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3RyZWUtdXBkYXRlLXdpdGgtZGly
dHktbGF5b3V0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5j
Y2ZiNmEyNGE1OTgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5
L3RyZWUtdXBkYXRlLXdpdGgtZGlydHktbGF5b3V0Lmh0bWwKQEAgLTAsMCArMSw1OCBAQAorPCFE
T0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVh
ZD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvYWNjZXNzaWJpbGl0eS1oZWxwZXIuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LmpzIj48L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5IGlkPSJib2R5Ij4KKworPG1haW4gaWQ9Im1haW4iPgorICAgIDxidXR0
b24+QnV0dG9uIG9uZTwvYnV0dG9uPgorICAgIDxwPlBhcmFncmFwaCBvbmU8L3A+CisgICAgPHA+
UGFyYWdyYXBoIHR3bzwvcD4KKyAgICA8cD5QYXJhZ3JhcGggdGhyZWU8L3A+Cis8L21haW4+CisK
KzxzY3JpcHQ+Cit2YXIgb3V0cHV0ID0gIlRoaXMgdGVzdCBlbnN1cmVzIHdlIGRvbid0IG1ha2Ug
aW5jb3JyZWN0IHVwZGF0ZXMgdG8gdGhlIGFjY2Vzc2liaWxpdHkgdHJlZSBkdWUgdG8gZGlydHkg
bGF5b3V0LlxuXG4iOworCitpZiAod2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKSB7Cisg
ICAgd2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOworICAgIC8vIFRvdWNoIHRoZSB0cmVlIHRv
IGVuc3VyZSB0aGUgQVhPYmplY3RDYWNoZSBpcyBjcmVhdGVkLgorICAgIHRvdWNoQWNjZXNzaWJp
bGl0eVRyZWUoYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIucm9vdEVsZW1lbnQpOworCisgICAgdmFy
IHNjYWxlID0gMC4xOworICAgIC8vIFJlcGVhdGVkbHkgZGlydHkgbGF5b3V0IGJ5IGNoYW5naW5n
IHRoZSBwYWdlIHNjYWxvciBmYWN0b3IuCisgICAgc2V0SW50ZXJ2YWwoYXN5bmMgZnVuY3Rpb24g
KCkgeworICAgICAgICBpbnRlcm5hbHMuc2V0UGFnZVNjYWxlRmFjdG9yKHNjYWxlLCAwLCAwKTsK
KworICAgICAgICBzY2FsZSArPSAwLjAxOworICAgICAgICBpZiAoc2NhbGUgPj0gNCkKKyAgICAg
ICAgICAgIHNjYWxlID0gMC4xOworICAgIH0sIDApOworCisgICAgdmFyIHRyYXZlcnNhbE91dHB1
dDsKKyAgICBzZXRUaW1lb3V0KGFzeW5jIGZ1bmN0aW9uKCkgeworICAgICAgICBpbnRlcm5hbHMu
c2V0UGFnZVNjYWxlRmFjdG9yKDIsIDAsIDApOworCisgICAgICAgIGNvbnN0IG5ld1BhcmFncmFw
aCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInAiKTsKKyAgICAgICAgbmV3UGFyYWdyYXBoLmlu
bmVyVGV4dCA9ICJQYXJhZ3JhcGggZm91ciI7CisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJtYWluIikuYXBwZW5kQ2hpbGQobmV3UGFyYWdyYXBoKTsKKyAgICAgICAgaW50ZXJuYWxz
LnNldFBhZ2VTY2FsZUZhY3RvcigyLjUsIDAsIDApOworCisgICAgICAgIGF3YWl0IHdhaXRGb3Io
KCkgPT4geworICAgICAgICAgICAgLy8gRGVwZW5kaW5nIG9uIHRoZSBzY2FsZSBmYWN0b3IgYXQg
dGhlIHRpbWUgd2UgdHJhdmVyc2UsIHRoZXJlIG1heSBiZSBzY3JvbGxiYXJzIHByZXNlbnQuIFRo
ZXkgYXJlbid0IGltcG9ydGFudAorICAgICAgICAgICAgLy8gZm9yIHRoaXMgdGVzdCwgYW5kIG1h
a2UgaXQgZmxha2V5LCBzbyBleGNsdWRlIHRoZW0gZnJvbSB0aGUgb3V0cHV0LgorICAgICAgICAg
ICAgdHJhdmVyc2FsT3V0cHV0ID0gZHVtcEFYU2VhcmNoVHJhdmVyc2FsKGFjY2Vzc2liaWxpdHlD
b250cm9sbGVyLnJvb3RFbGVtZW50LCB7IGV4Y2x1ZGVSb2xlczogWyJzY3JvbGxiYXIiXSB9KTsK
KyAgICAgICAgICAgIHJldHVybiB0cmF2ZXJzYWxPdXRwdXQuaW5jbHVkZXMoIlBhcmFncmFwaCBm
b3VyIik7CisgICAgICAgIH0pOworICAgICAgICBvdXRwdXQgKz0gdHJhdmVyc2FsT3V0cHV0Owor
CisgICAgICAgIGRlYnVnKG91dHB1dCk7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0s
IDApOworfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CisKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3BsYXRmb3JtL2dsaWIvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRm
b3JtL2dsaWIvVGVzdEV4cGVjdGF0aW9ucwppbmRleCAzNmQwNTUwOTdhMGQuLjJmZTFkNmEwNzkw
YiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9UZXN0RXhwZWN0YXRpb25z
CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvVGVzdEV4cGVjdGF0aW9ucwpAQCAtNTE2
LDYgKzUxNiw3IEBAIGFjY2Vzc2liaWxpdHkvZGlzcGxheS1jb250ZW50cy9zZWFyY2gtdHJhdmVy
c2FsLmh0bWwgWyBTa2lwIF0KIGFjY2Vzc2liaWxpdHkvZW1wdHktdGV4dC11bmRlci1lbGVtZW50
LWNhY2hlZC5odG1sIFsgU2tpcCBdCiBhY2Nlc3NpYmlsaXR5L3NlYXJjaC10cmF2ZXJzYWwtYWZ0
ZXItcm9sZS1jaGFuZ2UuaHRtbCBbIFNraXAgXQogYWNjZXNzaWJpbGl0eS90YWJsZS1zZWFyY2gt
dHJhdmVyc2FsLmh0bWwgWyBTa2lwIF0KK2FjY2Vzc2liaWxpdHkvdHJlZS11cGRhdGUtd2l0aC1k
aXJ0eS1sYXlvdXQuaHRtbCBbIFNraXAgXQogYWNjZXNzaWJpbGl0eS9keW5hbWljYWxseS1jaGFu
Z2luZy1pZnJhbWUtcmVtYWlucy1hY2Nlc3NpYmxlLmh0bWwgWyBTa2lwIF0KIGFjY2Vzc2liaWxp
dHkvaWdub3JlLW1vZGFscy13aXRob3V0LWFueS1jb250ZW50Lmh0bWwgWyBTa2lwIF0KIGFjY2Vz
c2liaWxpdHkvaWZyYW1lLXdpdGgtcm9sZS5odG1sIFsgU2tpcCBdCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9pb3MvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRm
b3JtL2lvcy9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDVmN2RhNWE5NmQ1Mi4uNDZhMzU5YTdjYjYy
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9pb3MvVGVzdEV4cGVjdGF0aW9ucwor
KysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9pb3MvVGVzdEV4cGVjdGF0aW9ucwpAQCAtMjI0Nyw2
ICsyMjQ3LDcgQEAgYWNjZXNzaWJpbGl0eS90YWJsZS1kaXNwbGF5LWJsb2NrLmh0bWwgWyBQYXNz
IF0KIGFjY2Vzc2liaWxpdHkvdGFibGUtZGlzcGxheS1mbGV4Lmh0bWwgWyBQYXNzIF0KIGFjY2Vz
c2liaWxpdHkvdGFibGUtZGlzcGxheS1ncmlkLmh0bWwgWyBQYXNzIF0KIGFjY2Vzc2liaWxpdHkv
dGFibGUtZGlzcGxheS1pbmxpbmUtYmxvY2suaHRtbCBbIFBhc3MgXQorYWNjZXNzaWJpbGl0eS90
cmVlLXVwZGF0ZS13aXRoLWRpcnR5LWxheW91dC5odG1sIFsgUGFzcyBdCiBhY2Nlc3NpYmlsaXR5
L3VybC10ZXN0Lmh0bWwgWyBQYXNzIF0KIGFjY2Vzc2liaWxpdHkvdmlkZW8tZWxlbWVudC11cmwt
YXR0cmlidXRlLmh0bWwgWyBQYXNzIF0KIGFjY2Vzc2liaWxpdHkvdmlzaWJsZS1jaGFyYWN0ZXIt
cmFuZ2UtYmFzaWMuaHRtbCBbIFBhc3MgXQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vaW9zL2FjY2Vzc2liaWxpdHkvdHJlZS11cGRhdGUtd2l0aC1kaXJ0eS1sYXlvdXQtZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vaW9zL2FjY2Vzc2liaWxpdHkvdHJlZS11cGRh
dGUtd2l0aC1kaXJ0eS1sYXlvdXQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMC4uMWJkYjAwYWJkNTliCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vaW9zL2FjY2Vzc2liaWxpdHkvdHJlZS11cGRhdGUtd2l0aC1kaXJ0eS1s
YXlvdXQtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjQgQEAKK1RoaXMgdGVzdCBlbnN1cmVzIHdl
IGRvbid0IG1ha2UgaW5jb3JyZWN0IHVwZGF0ZXMgdG8gdGhlIGFjY2Vzc2liaWxpdHkgdHJlZSBk
dWUgdG8gZGlydHkgbGF5b3V0LgorCisKK3tCdXR0b259CisKK3tTdGF0aWNUZXh0IEFYTGFiZWw6
IFBhcmFncmFwaCBvbmV9CisKK3tTdGF0aWNUZXh0IEFYTGFiZWw6IFBhcmFncmFwaCB0d299CisK
K3tTdGF0aWNUZXh0IEFYTGFiZWw6IFBhcmFncmFwaCB0aHJlZX0KKwore1N0YXRpY1RleHQgQVhM
YWJlbDogUGFyYWdyYXBoIGZvdXJ9CisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUK
KworVEVTVCBDT01QTEVURQorQnV0dG9uIG9uZQorUGFyYWdyYXBoIG9uZQorCitQYXJhZ3JhcGgg
dHdvCisKK1BhcmFncmFwaCB0aHJlZQorCitQYXJhZ3JhcGggZm91cgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMS9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vbWFjLXdrMS9UZXN0RXhwZWN0YXRpb25zCmluZGV4IGMyNTQxMzhmYWExYy4uODhh
NGRiZjMwNzQzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2sxL1Rlc3RF
eHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMS9UZXN0RXhwZWN0
YXRpb25zCkBAIC0xNTM4LDYgKzE1MzgsOCBAQCBlZGl0aW5nL3NwZWxsaW5nL3NwZWxsaW5nLWlu
c2VydC1odG1sLmh0bWwgWyBQYXNzIFRpbWVvdXQgXQogZWRpdGluZy9zcGVsbGluZy9zcGVsbGNo
ZWNrLWFzeW5jLmh0bWwgWyBGYWlsdXJlIF0KIGVkaXRpbmcvc3BlbGxpbmcvc3BlbGxpbmctdW5p
ZmllZC1lbXVsYXRpb24uaHRtbCBbIEZhaWx1cmUgXQogCithY2Nlc3NpYmlsaXR5L3RyZWUtdXBk
YXRlLXdpdGgtZGlydHktbGF5b3V0Lmh0bWwgWyBTa2lwIF0KKwogIyBUaGUgaW5lcnQgYXR0cmli
dXRlIGlzbid0IG1ha2luZyBvYmplY3RzIGluYWNjZXNzaWJsZSBvbiBXSzEuCiBhY2Nlc3NpYmls
aXR5L25vZGUtb25seS1pbmVydC1vYmplY3QuaHRtbCBbIEZhaWx1cmUgXQogCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9yZXNvdXJjZXMvYWNjZXNzaWJpbGl0eS1oZWxwZXIuanMgYi9MYXlvdXRU
ZXN0cy9yZXNvdXJjZXMvYWNjZXNzaWJpbGl0eS1oZWxwZXIuanMKaW5kZXggZDk3YzQ4M2U4Mjkz
Li45YzE1YTVjYzJlYWMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3Jlc291cmNlcy9hY2Nlc3Np
YmlsaXR5LWhlbHBlci5qcworKysgYi9MYXlvdXRUZXN0cy9yZXNvdXJjZXMvYWNjZXNzaWJpbGl0
eS1oZWxwZXIuanMKQEAgLTI0LDI2ICsyNCwzOCBAQCBmdW5jdGlvbiBkdW1wQVhUYWJsZShheEVs
ZW1lbnQsIG9wdGlvbnMpIHsKIH0KIAogLy8gRHVtcHMgdGhlIHJlc3VsdCBvZiBhIHRyYXZlcnNh
bCB2aWEgdGhlIFVJIGVsZW1lbnQgc2VhcmNoIEFQSSAod2hpY2ggaXMgd2hhdCBzb21lIEFUcyB1
c2UpLgotZnVuY3Rpb24gZHVtcEFYU2VhcmNoVHJhdmVyc2FsKGF4RWxlbWVudCkgeworLy8gYG9w
dGlvbnNgIGlzIGFuIG9iamVjdCB3aXRoIHRoZXNlIGtleXM6CisvLyAgICogYGV4Y2x1ZGVSb2xl
c2A6IEFycmF5IG9mIHN0cmluZ3MgcmVwcmVzZW50aW5nIHJvbGVzIHlvdSBkb24ndCB3YW50IHRv
IGluY2x1ZGUgaW4gdGhlIG91dHB1dC4KKy8vICAgICAgICAgICAgICAgICAgICAgQ2FzZSBpbnNl
bnNpdGl2ZSwgcGFydGlhbCBtYXRjaCBpcyBmaW5lLCBlLmcuICJzY3JvbGxiYXIiIHdpbGwgZXhj
bHVkZSAiQVhTY3JvbGxCYXIiLgorZnVuY3Rpb24gZHVtcEFYU2VhcmNoVHJhdmVyc2FsKGF4RWxl
bWVudCwgb3B0aW9ucyA9IHsgfSkgewogICAgIGxldCBvdXRwdXQgPSAiIjsKLSAgICBmdW5jdGlv
biBlbGVtZW50RGVzY3JpcHRpb24oYXhFbGVtZW50KSB7Ci0gICAgICAgIGlmICghYXhFbGVtZW50
KQotICAgICAgICAgICAgcmV0dXJuICJudWxsIjsKLQotICAgICAgICBjb25zdCByb2xlID0gYXhF
bGVtZW50LnJvbGU7Ci0gICAgICAgIGNvbnN0IGlkID0gYXhFbGVtZW50LmRvbUlkZW50aWZpZXI7
Ci0gICAgICAgIGxldCByZXN1bHQgPSBgJHtpZCA/IGAjJHtpZH0gYCA6ICIifSR7cm9sZX1gOwot
ICAgICAgICBpZiAocm9sZS5pbmNsdWRlcygiU3RhdGljVGV4dCIpKQotICAgICAgICAgICAgcmVz
dWx0ICs9IGAgJHthY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5wbGF0Zm9ybU5hbWUgPT09ICJpb3Mi
ID8gYXhFbGVtZW50LmRlc2NyaXB0aW9uIDogYXhFbGVtZW50LnN0cmluZ1ZhbHVlfWA7Ci0gICAg
ICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCiAgICAgbGV0IHNlYXJjaFJlc3VsdCA9IG51bGw7
CiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgc2VhcmNoUmVzdWx0ID0gYXhFbGVtZW50LnVp
RWxlbWVudEZvclNlYXJjaFByZWRpY2F0ZShzZWFyY2hSZXN1bHQsIHRydWUsICJBWEFueVR5cGVT
ZWFyY2hLZXkiLCAiIiwgZmFsc2UpOwogICAgICAgICBpZiAoIXNlYXJjaFJlc3VsdCkKICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBvdXRwdXQgKz0gYFxueyR7ZWxlbWVudERlc2NyaXB0aW9u
KHNlYXJjaFJlc3VsdCl9fVxuYDsKKworICAgICAgICBjb25zdCByb2xlID0gc2VhcmNoUmVzdWx0
LnJvbGU7CisKKyAgICAgICAgbGV0IGV4Y2x1ZGVkID0gZmFsc2U7CisgICAgICAgIGlmIChBcnJh
eS5pc0FycmF5KG9wdGlvbnM/LmV4Y2x1ZGVSb2xlcykpIHsKKyAgICAgICAgICAgIGZvciAoY29u
c3QgZXhjbHVkZWRSb2xlIG9mIG9wdGlvbnMuZXhjbHVkZVJvbGVzKSB7CisgICAgICAgICAgICAg
ICAgaWYgKHJvbGUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhleGNsdWRlZFJvbGUudG9Mb3dlckNh
c2UoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgZXhjbHVkZWQgPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoZXhjbHVkZWQpCisgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICBjb25zdCBpZCA9IHNlYXJjaFJlc3VsdC5kb21JZGVudGlmaWVyOworICAgICAgICBs
ZXQgcmVzdWx0RGVzY3JpcHRpb24gPSBgJHtpZCA/IGAjJHtpZH0gYCA6ICIifSR7cm9sZX1gOwor
ICAgICAgICBpZiAocm9sZS5pbmNsdWRlcygiU3RhdGljVGV4dCIpKQorICAgICAgICAgICAgcmVz
dWx0RGVzY3JpcHRpb24gKz0gYCAke2FjY2Vzc2liaWxpdHlDb250cm9sbGVyLnBsYXRmb3JtTmFt
ZSA9PT0gImlvcyIgPyBzZWFyY2hSZXN1bHQuZGVzY3JpcHRpb24gOiBzZWFyY2hSZXN1bHQuc3Ry
aW5nVmFsdWV9YDsKKworICAgICAgICBvdXRwdXQgKz0gYFxueyR7cmVzdWx0RGVzY3JpcHRpb259
fVxuYDsKICAgICB9CiAgICAgcmV0dXJuIG91dHB1dDsKIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>