<?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>227098</bug_id>
          
          <creation_ts>2021-06-16 15:07:44 -0700</creation_ts>
          <short_desc>Web Inspector: Styles: should autocomplete `var()` and `attr()` values</short_desc>
          <delta_ts>2021-07-02 07:13:28 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>227097</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Devin Rousso">hi</reporter>
          <assigned_to name="Razvan Caliman">rcaliman</assigned_to>
          <cc>hi</cc>
    
    <cc>inspector-bugzilla-changes</cc>
    
    <cc>nvasilyev</cc>
    
    <cc>pangle</cc>
    
    <cc>rcaliman</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1770421</commentid>
    <comment_count>0</comment_count>
    <who name="Devin Rousso">hi</who>
    <bug_when>2021-06-16 15:07:44 -0700</bug_when>
    <thetext># STEPS TO REPRODUCE
1. inspect any page
2. go to the Styles panel in the details sidebar in the Elements Tab
3. add a new CSS property
4. type `--xyz: red`
5. add a new CSS property
6. type `color: var(`

# EXPECTED
should show `--xyz` etc. in autocompletion

# ACTUAL
no autocompletions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1770422</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-06-16 15:08:10 -0700</bug_when>
    <thetext>&lt;rdar://problem/79418247&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771277</commentid>
    <comment_count>2</comment_count>
      <attachid>431858</attachid>
    <who name="Razvan Caliman">rcaliman</who>
    <bug_when>2021-06-21 07:12:46 -0700</bug_when>
    <thetext>Created attachment 431858
WIP

Request for feedback on general direction</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771278</commentid>
    <comment_count>3</comment_count>
    <who name="Razvan Caliman">rcaliman</who>
    <bug_when>2021-06-21 07:37:38 -0700</bug_when>
    <thetext>This WIP patch is building on the patch from bug 227097 which hasn&apos;t landed yet, therefore it&apos;s now only a request for feedback.

There is prior work for augmenting function completions in `Source/WebInspectorUI/UserInterface/Controllers/CodeMirrorCompletionController.js:588`:

```
this._delegate.completionControllerCSSFunctionValuesNeeded(this, functionName, functionCompletions)
```

However, the delegate doesn&apos;t implement `.completionControllerCSSFunctionValuesNeeded()`. 
The delegate changed over time. It used to be `WI.CSSStyleDeclarationTextEditor`, bug got removed with the legacy style editor in bug 189808.

But the idea seems good. 

---

This patch implements `WI.SpreadsheetCSSStyleDeclarationEditor.completionControllerCSSFunctionValuesNeeded()`, delegated for `WI.SpreadsheetStyleProperty`.

Depending on the function name:
- for &quot;var&quot;, return a list of CSS variable names collected in WI.DOMNodeStyles.allCSSVariables
- for &quot;attr&quot;, return a list of node attribute names (restoring functionality lost when removing `WI.CSSStyleDeclarationTextEditor` in bug 189808)

Should we delegate a few more levels up to `WI.SpreadsheetRulesStyleDetailsPanel`? Or is it acceptable to stop at `WI.SpreadsheetCSSStyleDeclarationEditor`?

---

This does yet handle CSS variable completions in the Sources tab (i.e. implementing `WI.SourceCodeTextEditor.completionControllerCSSFunctionValuesNeeded()`). 
For that, we need to collect *all CSS Variables* declared in all stylesheets since the Sources code editor doesn&apos;t have a concept of a selected node nor does that make sense. Probably left to don in a follow-up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771279</commentid>
    <comment_count>4</comment_count>
      <attachid>431858</attachid>
    <who name="Razvan Caliman">rcaliman</who>
    <bug_when>2021-06-21 07:40:40 -0700</bug_when>
    <thetext>Comment on attachment 431858
WIP

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

&gt; Source/WebInspectorUI/UserInterface/Models/CSSCompletions.js:264
&gt; +    set values(values = [])

Doing this to ensure values can be added on-demand and the resulting list remains sorted.

&gt; Source/WebInspectorUI/UserInterface/Models/CSSKeywordCompletions.js:107
&gt; +    if (functionName === &quot;var&quot; || functionName === &quot;attr&quot;)

`attr(var(--something))` is not supported.

&gt; Source/WebInspectorUI/UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:456
&gt; +            values = this.style.node.attributes().map(attribute =&gt; attribute.name);

Restoring functionality lost with bug 189808. Should this be in a separate bug/patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771323</commentid>
    <comment_count>5</comment_count>
      <attachid>431858</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2021-06-21 09:53:24 -0700</bug_when>
    <thetext>Comment on attachment 431858
WIP

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

&gt;&gt; Source/WebInspectorUI/UserInterface/Models/CSSCompletions.js:264
&gt;&gt; +    set values(values = [])
&gt; 
&gt; Doing this to ensure values can be added on-demand and the resulting list remains sorted.

This is a bit odd as `WI.CSSCompletions` is really meant to be basically readonly.  Instead of allowing the `WI.CSSCompletion` to be entirely modifiable, I wonder if we could just have an `addAll` (i.e. can only extend, not replace) or really more ideally have a way for `WI.CSSKeywordCompletions.forFunction` to do this logic before construction.

Also, having a default parameter here isn&apos;t ideal as that&apos;s only going to be used if `undefined` is provided, and we generally avoid using `undefined` instead of `null`.  I think you&apos;re better off having a `values ||= [];` inside the function instead (FWIW this is our normal pattern).

&gt;&gt; Source/WebInspectorUI/UserInterface/Models/CSSKeywordCompletions.js:107
&gt;&gt; +    if (functionName === &quot;var&quot; || functionName === &quot;attr&quot;)
&gt; 
&gt; `attr(var(--something))` is not supported.

I wonder if we want to autocomplete `attr` on any property other than `content` given that it only works there 🤔

&gt; Source/WebInspectorUI/UserInterface/Models/DOMNodeStyles.js:952
&gt; +        this._allCSSVariables = new Set;

This isn&apos;t really great IMO as a function named `_collectUsedCSSVariables` has a side effect of modifying `_allCSSVariables`.  I&apos;d recommend renaming this function to something more generic (e.g. `_collectCSSVariables`) so that this is more &quot;acceptable&quot;.

&gt; Source/WebInspectorUI/UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:453
&gt; +            values = this.style.nodeStyles.allCSSVariables;

Style: change this into a `return`

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:456
&gt;&gt; +            values = this.style.node.attributes().map(attribute =&gt; attribute.name);
&gt; 
&gt; Restoring functionality lost with bug 189808. Should this be in a separate bug/patch?

Yeah this should probably be a different bug (or you could rename this bug to also include `attr()`.

Style: argument of arrow functions should always have parenthesis

&gt; Source/WebInspectorUI/UserInterface/Views/SpreadsheetStyleProperty.js:988
&gt; +            return { prefix: currentTokenValue, completions: completions.startsWith(currentTokenValue) };

Style: no space after `{` or before `}`</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771338</commentid>
    <comment_count>6</comment_count>
      <attachid>431858</attachid>
    <who name="Razvan Caliman">rcaliman</who>
    <bug_when>2021-06-21 10:37:35 -0700</bug_when>
    <thetext>Comment on attachment 431858
WIP

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

&gt;&gt;&gt; Source/WebInspectorUI/UserInterface/Models/CSSCompletions.js:264
&gt;&gt;&gt; +    set values(values = [])
&gt;&gt; 
&gt;&gt; Doing this to ensure values can be added on-demand and the resulting list remains sorted.
&gt; 
&gt; This is a bit odd as `WI.CSSCompletions` is really meant to be basically readonly.  Instead of allowing the `WI.CSSCompletion` to be entirely modifiable, I wonder if we could just have an `addAll` (i.e. can only extend, not replace) or really more ideally have a way for `WI.CSSKeywordCompletions.forFunction` to do this logic before construction.
&gt; 
&gt; Also, having a default parameter here isn&apos;t ideal as that&apos;s only going to be used if `undefined` is provided, and we generally avoid using `undefined` instead of `null`.  I think you&apos;re better off having a `values ||= [];` inside the function instead (FWIW this is our normal pattern).

&gt; or really more ideally have a way for `WI.CSSKeywordCompletions.forFunction` to do this logic before construction.

Funny, I had a version of the patch doing this and thought it would get flagged during review :) 
Do you mean something like this?

```
-WI.CSSKeywordCompletions.forFunction = function(functionName)
+WI.CSSKeywordCompletions.forFunction = function(functionName, supplementalCompletions = {})
 {
     let suggestions = [&quot;var()&quot;];
 
     if (functionName === &quot;var&quot;)
-        suggestions = [];
+        suggestions = supplementalCompletions?.var || [];
```

&gt;&gt;&gt; Source/WebInspectorUI/UserInterface/Models/CSSKeywordCompletions.js:107
&gt;&gt;&gt; +    if (functionName === &quot;var&quot; || functionName === &quot;attr&quot;)
&gt;&gt; 
&gt;&gt; `attr(var(--something))` is not supported.
&gt; 
&gt; I wonder if we want to autocomplete `attr` on any property other than `content` given that it only works there 🤔

Improbable, but one could put it in a var and that still works.

```
--myvar: attr(class);
content: var(--myvar);
```

&gt;&gt; Source/WebInspectorUI/UserInterface/Models/DOMNodeStyles.js:952
&gt;&gt; +        this._allCSSVariables = new Set;
&gt; 
&gt; This isn&apos;t really great IMO as a function named `_collectUsedCSSVariables` has a side effect of modifying `_allCSSVariables`.  I&apos;d recommend renaming this function to something more generic (e.g. `_collectCSSVariables`) so that this is more &quot;acceptable&quot;.

Yes, the naming is off indeed. I&apos;ll change.

I wanted to avoid doing another pass to grab all variables so I tried to leverage this loop here. 
Still scarred by the 1500 CSS variable scenarios of sites that dump all custom properties to the :root.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771340</commentid>
    <comment_count>7</comment_count>
      <attachid>431858</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2021-06-21 10:42:20 -0700</bug_when>
    <thetext>Comment on attachment 431858
WIP

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

&gt;&gt;&gt;&gt; Source/WebInspectorUI/UserInterface/Models/CSSCompletions.js:264
&gt;&gt;&gt;&gt; +    set values(values = [])
&gt;&gt;&gt; 
&gt;&gt;&gt; Doing this to ensure values can be added on-demand and the resulting list remains sorted.
&gt;&gt; 
&gt;&gt; This is a bit odd as `WI.CSSCompletions` is really meant to be basically readonly.  Instead of allowing the `WI.CSSCompletion` to be entirely modifiable, I wonder if we could just have an `addAll` (i.e. can only extend, not replace) or really more ideally have a way for `WI.CSSKeywordCompletions.forFunction` to do this logic before construction.
&gt;&gt; 
&gt;&gt; Also, having a default parameter here isn&apos;t ideal as that&apos;s only going to be used if `undefined` is provided, and we generally avoid using `undefined` instead of `null`.  I think you&apos;re better off having a `values ||= [];` inside the function instead (FWIW this is our normal pattern).
&gt; 
&gt; 

I think I&apos;d either rename this to `addAll(values)` and keep mostly the same behavior (this is nice for extensibility in other scenarios) or modify `WI.CSSKeywordCompletions.forFunction` to also accept an optional `WI.CSSStyleDeclaration` which would instead take the place of the `completionControllerCSSFunctionValuesNeeded` delegate (this is also nice because then _every_ caller of `WI.CSSKeywordCompletions.forFunction` gets this behavior (assuming they provide a `WI.CSSStyleDeclaration`), instead of only the ones that have a delegate).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771348</commentid>
    <comment_count>8</comment_count>
      <attachid>431858</attachid>
    <who name="Razvan Caliman">rcaliman</who>
    <bug_when>2021-06-21 10:55:44 -0700</bug_when>
    <thetext>Comment on attachment 431858
WIP

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

&gt;&gt;&gt;&gt;&gt; Source/WebInspectorUI/UserInterface/Models/CSSCompletions.js:264
&gt;&gt;&gt;&gt;&gt; +    set values(values = [])
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; Doing this to ensure values can be added on-demand and the resulting list remains sorted.
&gt;&gt;&gt; 
&gt;&gt;&gt; This is a bit odd as `WI.CSSCompletions` is really meant to be basically readonly.  Instead of allowing the `WI.CSSCompletion` to be entirely modifiable, I wonder if we could just have an `addAll` (i.e. can only extend, not replace) or really more ideally have a way for `WI.CSSKeywordCompletions.forFunction` to do this logic before construction.
&gt;&gt;&gt; 
&gt;&gt;&gt; Also, having a default parameter here isn&apos;t ideal as that&apos;s only going to be used if `undefined` is provided, and we generally avoid using `undefined` instead of `null`.  I think you&apos;re better off having a `values ||= [];` inside the function instead (FWIW this is our normal pattern).
&gt;&gt; 
&gt;&gt; 
&gt; 
&gt; I think I&apos;d either rename this to `addAll(values)` and keep mostly the same behavior (this is nice for extensibility in other scenarios) or modify `WI.CSSKeywordCompletions.forFunction` to also accept an optional `WI.CSSStyleDeclaration` which would instead take the place of the `completionControllerCSSFunctionValuesNeeded` delegate (this is also nice because then _every_ caller of `WI.CSSKeywordCompletions.forFunction` gets this behavior (assuming they provide a `WI.CSSStyleDeclaration`), instead of only the ones that have a delegate).

I&apos;d avoid passing in `WI.CSSStyleDeclaration` to `WI.CSSKeywordCompletions.forFunction()` because the Sources panel won&apos;t have one to pass in for context when getting all CSS variables. Its mechanism for getting CSS variables will be different because it&apos;s not constrained to the selected node.

Augmenting `WI.CSSKeywordCompletions.forFunction()` to get an optional list of extra items to pass to `WI.CSSCompletion` constructor will make it possible for Styles and Sources to pass in their own contextual data.

I&apos;m thinking of something like:
```
WI.CSSKeywordCompletions.forFunction = function(functionName, extraFunctionCompletions ={})
{
    let suggestions = [&quot;var()&quot;];

    if (functionName === &quot;var&quot;)
        suggestions = extraFunctionCompletions?.var || [];
...
   return new WI.CSSCompletions(suggestions, true);
}
```</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771400</commentid>
    <comment_count>9</comment_count>
      <attachid>431894</attachid>
    <who name="Razvan Caliman">rcaliman</who>
    <bug_when>2021-06-21 12:26:54 -0700</bug_when>
    <thetext>Created attachment 431894
WIP1.1

Address feedback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771426</commentid>
    <comment_count>10</comment_count>
      <attachid>431894</attachid>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2021-06-21 13:43:44 -0700</bug_when>
    <thetext>Comment on attachment 431894
WIP1.1

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

Patch doesn&apos;t apply; looks like it needs to be rebaselined.

&gt; Source/WebInspectorUI/UserInterface/Models/CSSCompletions.js:267
&gt; +        this._values = this._values.concat(values.slice());

Nit: No need to call `slice`; concat doesn&apos;t modify passed array.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771982</commentid>
    <comment_count>11</comment_count>
      <attachid>432065</attachid>
    <who name="Razvan Caliman">rcaliman</who>
    <bug_when>2021-06-23 10:06:05 -0700</bug_when>
    <thetext>Created attachment 432065
Patch 1.0

Patch based on top of the one from bug 227097</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772007</commentid>
    <comment_count>12</comment_count>
      <attachid>432065</attachid>
    <who name="Patrick Angle">pangle</who>
    <bug_when>2021-06-23 11:15:42 -0700</bug_when>
    <thetext>Comment on attachment 432065
Patch 1.0

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

Awesome work, mostly just some thoughts on naming throughout.

&gt; Source/WebInspectorUI/UserInterface/Models/CSSKeywordCompletions.js:51
&gt; +WI.CSSKeywordCompletions.forPartialPropertyValue = function(text, propertyName, {caretPosition, getFunctionValueCompletions} = {})

Nit: We might want to tweak this variable name, as currently it makes it sound like it is the only provider of function value completions, instead of an additional source of those completions. `additionalFunctionValueCompletionsProvider`?

&gt; Source/WebInspectorUI/UserInterface/Models/DOMNodeStyles.js:50
&gt; +        this._allCSSVariables = new Set;

Nit: If I understand correctly, this isn&apos;t really `all` CSS variables, but the `available` (not convinced this is precisely the right prefix either) CSS variables.

&gt; Source/WebInspectorUI/UserInterface/Views/SpreadsheetStyleProperty.js:342
&gt; +    getFunctionValueCompletions(functionName)

See CSSKeywordCompletions:51

&gt; Source/WebInspectorUI/UserInterface/Views/SpreadsheetStyleProperty.js:348
&gt; +        if (functionName === &quot;var&quot;)
&gt; +            return Array.from(this._property.ownerStyle.nodeStyles.allCSSVariables);
&gt; +
&gt; +        if (functionName === &quot;attr&quot;)
&gt; +            return this._property.ownerStyle.node.attributes().map((attribute) =&gt; attribute.name);

Any reason not to express this as a switch statement? I know with two cases that&apos;s a bit of a wash, but I could see us needing to add to this someday. I&apos;m fine either way, just something to consider.

&gt; Source/WebInspectorUI/UserInterface/Views/SpreadsheetStyleProperty.js:926
&gt; +        return WI.CSSKeywordCompletions.forPartialPropertyValue(text, this._nameElement.textContent.trim(), {caretPosition, getFunctionValueCompletions: this.getFunctionValueCompletions.bind(this)});

See CSSKeywordCompletions:51

&gt; LayoutTests/inspector/unit-tests/css-keyword-completions.html:70
&gt; +                const getFunctionValueCompletions = (functionName) =&gt; {

Can we declare this constant outside of compare expectations? Or, perhaps even better, could we make the additional `var` and `attr` completions optional parameters to `compareExpectations()`? In my opinion `compareExpectations` should do as little as possible to influence the outcome of what we are testing, and where it does it should do so with information from it&apos;s callers instead of inferring a non-empty set of these additional completions.

Also, I understand why you used this exact name (note from CSSKeywordCompletions:51 not withstanding), but would it be clearer that this is being somewhat fakes for these tests to have `mock` in the name somewhere?

&gt; LayoutTests/inspector/unit-tests/css-keyword-completions.html:146
&gt; +            // attr(|

Nit: Can you put the value and caret inside backticks like the examples above, please. Ditto for below comments as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772259</commentid>
    <comment_count>13</comment_count>
      <attachid>432157</attachid>
    <who name="Razvan Caliman">rcaliman</who>
    <bug_when>2021-06-24 06:53:00 -0700</bug_when>
    <thetext>Created attachment 432157
Patch 1.1

Address feedback; Patch based on top of the one from bug 227097</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772260</commentid>
    <comment_count>14</comment_count>
      <attachid>432065</attachid>
    <who name="Razvan Caliman">rcaliman</who>
    <bug_when>2021-06-24 07:07:54 -0700</bug_when>
    <thetext>Comment on attachment 432065
Patch 1.0

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

&gt;&gt; Source/WebInspectorUI/UserInterface/Models/CSSKeywordCompletions.js:51
&gt;&gt; +WI.CSSKeywordCompletions.forPartialPropertyValue = function(text, propertyName, {caretPosition, getFunctionValueCompletions} = {})
&gt; 
&gt; Nit: We might want to tweak this variable name, as currently it makes it sound like it is the only provider of function value completions, instead of an additional source of those completions. `additionalFunctionValueCompletionsProvider`?

Yes, that&apos;s a good idea. Updated.

&gt;&gt; Source/WebInspectorUI/UserInterface/Models/DOMNodeStyles.js:50
&gt;&gt; +        this._allCSSVariables = new Set;
&gt; 
&gt; Nit: If I understand correctly, this isn&apos;t really `all` CSS variables, but the `available` (not convinced this is precisely the right prefix either) CSS variables.

The scope here is the styles for the selected DOM node. In that sense, these are all CSS variables applicable to it.
I&apos;m not sure if the `available` prefix would clarify it any more. 

The case for using `_all` in the context of this file is to distinguish that `_usedCSSVariables` will be a subset of `_allCSSVariables`. 
Still open to a better naming suggestion. I considered dropping `_all` in favor of just `_CSSVariables` but that just adds to the ambiguity.

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/SpreadsheetStyleProperty.js:348
&gt;&gt; +            return this._property.ownerStyle.node.attributes().map((attribute) =&gt; attribute.name);
&gt; 
&gt; Any reason not to express this as a switch statement? I know with two cases that&apos;s a bit of a wash, but I could see us needing to add to this someday. I&apos;m fine either way, just something to consider.

I tried a `switch` statement before, but it looked needlessly complex for the two cases currently handled. 
When more cases are added, perhaps it will then make more sense to switch to `switch` :)

&gt;&gt; LayoutTests/inspector/unit-tests/css-keyword-completions.html:70
&gt;&gt; +                const getFunctionValueCompletions = (functionName) =&gt; {
&gt; 
&gt; Can we declare this constant outside of compare expectations? Or, perhaps even better, could we make the additional `var` and `attr` completions optional parameters to `compareExpectations()`? In my opinion `compareExpectations` should do as little as possible to influence the outcome of what we are testing, and where it does it should do so with information from it&apos;s callers instead of inferring a non-empty set of these additional completions.
&gt; 
&gt; Also, I understand why you used this exact name (note from CSSKeywordCompletions:51 not withstanding), but would it be clearer that this is being somewhat fakes for these tests to have `mock` in the name somewhere?

Extracted the mock provider and added a mock to its name.

Additionally, I configured `compareExpectations()` to accept an argument for a function that provides the contextual function values – the mock.
It did add verbosity to the test cases. I&apos;m not convinced it was worthwhile given that this is a unit-test. But I don&apos;t have strong opinions either way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772261</commentid>
    <comment_count>15</comment_count>
    <who name="Razvan Caliman">rcaliman</who>
    <bug_when>2021-06-24 07:16:44 -0700</bug_when>
    <thetext>&gt; Or, perhaps even better, could we make the additional `var` and `attr` completions optional parameters to `compareExpectations()`?

On closer reading of your comment, I think I understand what you meant. 

Essentially, the test is checking that the provided `additionalFunctionValueCompletionsProvider()` gets called by `WI.CSSKeywordCompletions.forPartialPropertyValue` and its results are appended to the list of completions and sorted.

Therefore, the mock itself doesn&apos;t have to contain any logic. The mock can just be a simple function that returns the list of additional completions. The test will check if these were appended, sorted and filtered accordingly.

Ex:

```
// `attr(|`
compareExpectations(&quot;attr(&quot;, &quot;content&quot;, {
    expectedPrefix: &quot;&quot;,
    expectedCompletions: [&quot;class&quot;, &quot;id&quot;, &quot;var()&quot;],
    additionalFunctionValueCompletionsProvider: () =&gt; { return [&quot;class&quot;, &quot;id&quot;] },
})
```

Do let me know if I misread your suggestion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772262</commentid>
    <comment_count>16</comment_count>
      <attachid>432158</attachid>
    <who name="Razvan Caliman">rcaliman</who>
    <bug_when>2021-06-24 07:18:35 -0700</bug_when>
    <thetext>Created attachment 432158
Patch 1.2

Update test to add inline mocks instead of global mock; Patch based on top of the one from bug 227097</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772381</commentid>
    <comment_count>17</comment_count>
      <attachid>432158</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2021-06-24 11:24:07 -0700</bug_when>
    <thetext>Comment on attachment 432158
Patch 1.2

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

&gt; Source/WebInspectorUI/UserInterface/Models/CSSCompletions.js:266
&gt; +        console.assert(Array.isArray(values), &quot;Expected array of values for additional completion suggestions&quot;);

NIT: These kinds of comments are not useful IMO since this is basically redundant if one reads the code.  For simple assertions like this the code itself is enough.

NIT: For non-falsy checks please also include the argument in the assertion so that if a developer opens inspector^2 they can see what value was passed in
```
    console.assert(Array.isArray(values), values);
```

&gt; Source/WebInspectorUI/UserInterface/Models/CSSCompletions.js:267
&gt; +        this._values = this._values.concat(values);

Please use the utility added in r249301 :)
```
    this._values.pushAll(values);
```

&gt; Source/WebInspectorUI/UserInterface/Models/CSSKeywordCompletions.js:122
&gt; +

Style: unnecessary newline

&gt; Source/WebInspectorUI/UserInterface/Views/SpreadsheetStyleProperty.js:344
&gt; +        if (functionName === &quot;var&quot;)

Personally I prefer using `switch` even for a small number of `case` as it makes future patches cleaner and keeps the blame very straightforward.  Up to you tho :)

&gt; LayoutTests/inspector/unit-tests/css-keyword-completions.html:68
&gt; +                additionalFunctionValueCompletionsProvider ??= () =&gt; {}

Style: missing semicolon

&gt; LayoutTests/inspector/unit-tests/css-keyword-completions.html:140
&gt; +                additionalFunctionValueCompletionsProvider: () =&gt; { return [&quot;class&quot;, &quot;id&quot;] },

You can drop the `{ return` and `}` for these.  You only have to have that for multi-line arrow functions (in accordance with our style) or when the returned value is an object literal.

&gt; LayoutTests/inspector/unit-tests/css-keyword-completions.html:148
&gt; +                additionalFunctionValueCompletionsProvider: () =&gt; { return [&quot;class&quot;, &quot;id&quot;] },

ditto (:140)

&gt; LayoutTests/inspector/unit-tests/css-keyword-completions.html:155
&gt; +                additionalFunctionValueCompletionsProvider: () =&gt; { return [&quot;--one&quot;, &quot;--two&quot;] },

ditto (:140)

&gt; LayoutTests/inspector/unit-tests/css-keyword-completions.html:162
&gt; +                additionalFunctionValueCompletionsProvider: () =&gt; { return [&quot;--one&quot;, &quot;--two&quot;] },

ditto (:140)

&gt; LayoutTests/inspector/unit-tests/css-keyword-completions.html:170
&gt; +                additionalFunctionValueCompletionsProvider: () =&gt; { return [&quot;--one&quot;, &quot;--two&quot;] },

ditto (:140)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1774117</commentid>
    <comment_count>18</comment_count>
      <attachid>432158</attachid>
    <who name="Razvan Caliman">rcaliman</who>
    <bug_when>2021-07-01 08:15:33 -0700</bug_when>
    <thetext>Comment on attachment 432158
Patch 1.2

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

&gt;&gt; Source/WebInspectorUI/UserInterface/Models/CSSCompletions.js:267
&gt;&gt; +        this._values = this._values.concat(values);
&gt; 
&gt; Please use the utility added in r249301 :)
&gt; ```
&gt;     this._values.pushAll(values);
&gt; ```

Neat!

&gt;&gt; Source/WebInspectorUI/UserInterface/Views/SpreadsheetStyleProperty.js:344
&gt;&gt; +        if (functionName === &quot;var&quot;)
&gt; 
&gt; Personally I prefer using `switch` even for a small number of `case` as it makes future patches cleaner and keeps the blame very straightforward.  Up to you tho :)

Yeah, the argument about a cleaner `blame` is a good one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1774119</commentid>
    <comment_count>19</comment_count>
      <attachid>432696</attachid>
    <who name="Razvan Caliman">rcaliman</who>
    <bug_when>2021-07-01 08:18:25 -0700</bug_when>
    <thetext>Created attachment 432696
Patch 1.3

Rebased onto master after Bug 227097 landed. Addressed code review feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1774179</commentid>
    <comment_count>20</comment_count>
      <attachid>432696</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2021-07-01 11:23:14 -0700</bug_when>
    <thetext>Comment on attachment 432696
Patch 1.3

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

r=me, nice work :)

&gt; Source/WebInspectorUI/UserInterface/Models/CSSKeywordCompletions.js:114
&gt; +        completions.addValues(contextualValueCompletions);

We should either not call this if `contextualValueCompletions` is empty or have a check inside `addValues` that bails if the provided array is empty so that we don&apos;t `sort()` unnecessarily.

&gt; Source/WebInspectorUI/UserInterface/Views/SpreadsheetStyleProperty.js:347
&gt; +            return Array.from(this._property.ownerStyle.nodeStyles.allCSSVariables);
&gt; +        case &quot;attr&quot;:

Style: missing newline between</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1774438</commentid>
    <comment_count>21</comment_count>
      <attachid>432696</attachid>
    <who name="Razvan Caliman">rcaliman</who>
    <bug_when>2021-07-02 06:27:40 -0700</bug_when>
    <thetext>Comment on attachment 432696
Patch 1.3

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

&gt;&gt; Source/WebInspectorUI/UserInterface/Models/CSSKeywordCompletions.js:114
&gt;&gt; +        completions.addValues(contextualValueCompletions);
&gt; 
&gt; We should either not call this if `contextualValueCompletions` is empty or have a check inside `addValues` that bails if the provided array is empty so that we don&apos;t `sort()` unnecessarily.

Good idea! I&apos;ll add the check to `WI.Completions.addValues()`</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1774439</commentid>
    <comment_count>22</comment_count>
      <attachid>432784</attachid>
    <who name="Razvan Caliman">rcaliman</who>
    <bug_when>2021-07-02 06:32:02 -0700</bug_when>
    <thetext>Created attachment 432784
Patch 1.4

Carry over R+; Address last nits</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1774449</commentid>
    <comment_count>23</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-07-02 07:13:27 -0700</bug_when>
    <thetext>Committed r279502 (239354@main): &lt;https://commits.webkit.org/239354@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 432784.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431858</attachid>
            <date>2021-06-21 07:12:46 -0700</date>
            <delta_ts>2021-06-21 12:26:50 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-227098-20210621161243.patch</filename>
            <type>text/plain</type>
            <size>5569</size>
            <attacher name="Razvan Caliman">rcaliman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9D
U1NDb21wbGV0aW9ucy5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01v
ZGVscy9DU1NDb21wbGV0aW9ucy5qcwppbmRleCA1YzE4NzdlZmNjNDkzOWE5MWI0ODIwM2FmYzQ3
Mjg1ZTE0Y2Y3ZjI2Li45NWQwNWVkZDViZWM1ZmRiODk5MDBjM2NkNGI0NDE5NDk3NTVmMzMxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvQ1NT
Q29tcGxldGlvbnMuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
TW9kZWxzL0NTU0NvbXBsZXRpb25zLmpzCkBAIC0yNjEsNiArMjYxLDEzIEBAIFdJLkNTU0NvbXBs
ZXRpb25zID0gY2xhc3MgQ1NTQ29tcGxldGlvbnMKICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVl
czsKICAgICB9CiAKKyAgICBzZXQgdmFsdWVzKHZhbHVlcyA9IFtdKQorICAgIHsKKyAgICAgICAg
Y29uc29sZS5hc3NlcnQoQXJyYXkuaXNBcnJheSh2YWx1ZXMpLCAiRXhwZWN0ZWQgYXJyYXkgb2Yg
dmFsdWVzIGZvciBjb21wbGV0aW9uIHN1Z2dlc3Rpb25zIik7CisgICAgICAgIHRoaXMuX3ZhbHVl
cyA9IHZhbHVlcy5zbGljZSgpOworICAgICAgICB0aGlzLl92YWx1ZXMuc29ydCgpOworICAgIH0K
KwogICAgIHN0YXJ0c1dpdGgocHJlZml4KQogICAgIHsKICAgICAgICAgaWYgKCFwcmVmaXgpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvQ1NT
S2V5d29yZENvbXBsZXRpb25zLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvTW9kZWxzL0NTU0tleXdvcmRDb21wbGV0aW9ucy5qcwppbmRleCBiMjc3MTA1OGUxZGNiN2Ez
YzdmMjRmNTUyMGJlMDI3MjE0ZTg1OGI2Li5iYzk0ZjEwMDU1ZGExZTMzMTY5YTFmOWM5MjYxYmIw
Y2RlYzI3NzFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9Nb2RlbHMvQ1NTS2V5d29yZENvbXBsZXRpb25zLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9DU1NLZXl3b3JkQ29tcGxldGlvbnMuanMKQEAgLTEw
NCw3ICsxMDQsNyBAQCBXSS5DU1NLZXl3b3JkQ29tcGxldGlvbnMuZm9yRnVuY3Rpb24gPSBmdW5j
dGlvbihmdW5jdGlvbk5hbWUpCiB7CiAgICAgbGV0IHN1Z2dlc3Rpb25zID0gWyJ2YXIoKSJdOwog
Ci0gICAgaWYgKGZ1bmN0aW9uTmFtZSA9PT0gInZhciIpCisgICAgaWYgKGZ1bmN0aW9uTmFtZSA9
PT0gInZhciIgfHwgZnVuY3Rpb25OYW1lID09PSAiYXR0ciIpCiAgICAgICAgIHN1Z2dlc3Rpb25z
ID0gW107CiAgICAgZWxzZSBpZiAoZnVuY3Rpb25OYW1lID09PSAiY2FsYyIgfHwgZnVuY3Rpb25O
YW1lID09PSAibWluIiB8fCBmdW5jdGlvbk5hbWUgPT09ICJtYXgiKQogICAgICAgICBzdWdnZXN0
aW9ucy5wdXNoKCJjYWxjKCkiLCAibWluKCkiLCAibWF4KCkiKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9ET01Ob2RlU3R5bGVzLmpzIGIv
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0RPTU5vZGVTdHlsZXMu
anMKaW5kZXggZGQwMGU0OTVlMDcyNGE1NzNkODhlYTU5MDI3MjVkYjY4YzIzZmEwYS4uZjRlYWQx
YmQyNDdiMjIxMTYwODkxNDcxNWU0YzhhNzI1ZGQ0MjdhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0RPTU5vZGVTdHlsZXMuanMKKysrIGIv
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0RPTU5vZGVTdHlsZXMu
anMKQEAgLTQ3LDYgKzQ3LDcgQEAgV0kuRE9NTm9kZVN0eWxlcyA9IGNsYXNzIERPTU5vZGVTdHls
ZXMgZXh0ZW5kcyBXSS5PYmplY3QKIAogICAgICAgICB0aGlzLl9wcm9wZXJ0eU5hbWVUb0VmZmVj
dGl2ZVByb3BlcnR5TWFwID0ge307CiAgICAgICAgIHRoaXMuX3VzZWRDU1NWYXJpYWJsZXMgPSBu
ZXcgU2V0OworICAgICAgICB0aGlzLl9hbGxDU1NWYXJpYWJsZXMgPSBuZXcgU2V0OwogCiAgICAg
ICAgIHRoaXMuX3BlbmRpbmdSZWZyZXNoVGFzayA9IG51bGw7CiAgICAgICAgIHRoaXMucmVmcmVz
aCgpOwpAQCAtMTMxLDYgKzEzMiw3IEBAIFdJLkRPTU5vZGVTdHlsZXMgPSBjbGFzcyBET01Ob2Rl
U3R5bGVzIGV4dGVuZHMgV0kuT2JqZWN0CiAgICAgZ2V0IG9yZGVyZWRTdHlsZXMoKSB7IHJldHVy
biB0aGlzLl9vcmRlcmVkU3R5bGVzOyB9CiAgICAgZ2V0IGNvbXB1dGVkUHJpbWFyeUZvbnQoKSB7
IHJldHVybiB0aGlzLl9jb21wdXRlZFByaW1hcnlGb250OyB9CiAgICAgZ2V0IHVzZWRDU1NWYXJp
YWJsZXMoKSB7IHJldHVybiB0aGlzLl91c2VkQ1NTVmFyaWFibGVzOyB9CisgICAgZ2V0IGFsbENT
U1ZhcmlhYmxlcygpIHsgcmV0dXJuIHRoaXMuX2FsbENTU1ZhcmlhYmxlczsgfQogCiAgICAgZ2V0
IG5lZWRzUmVmcmVzaCgpCiAgICAgewpAQCAtOTQ3LDEwICs5NDksMTQgQEAgV0kuRE9NTm9kZVN0
eWxlcyA9IGNsYXNzIERPTU5vZGVTdHlsZXMgZXh0ZW5kcyBXSS5PYmplY3QKIAogICAgIF9jb2xs
ZWN0VXNlZENTU1ZhcmlhYmxlcyhzdHlsZXMpCiAgICAgeworICAgICAgICB0aGlzLl9hbGxDU1NW
YXJpYWJsZXMgPSBuZXcgU2V0OwogICAgICAgICB0aGlzLl91c2VkQ1NTVmFyaWFibGVzID0gbmV3
IFNldDsKIAogICAgICAgICBmb3IgKGxldCBzdHlsZSBvZiBzdHlsZXMpIHsKICAgICAgICAgICAg
IGZvciAobGV0IHByb3BlcnR5IG9mIHN0eWxlLmVuYWJsZWRQcm9wZXJ0aWVzKSB7CisgICAgICAg
ICAgICAgICAgaWYgKHByb3BlcnR5LmlzVmFyaWFibGUpCisgICAgICAgICAgICAgICAgICAgIHRo
aXMuX2FsbENTU1ZhcmlhYmxlcy5hZGQocHJvcGVydHkubmFtZSk7CisKICAgICAgICAgICAgICAg
ICBsZXQgdmFyaWFibGVzID0gV0kuQ1NTUHJvcGVydHkuZmluZFZhcmlhYmxlTmFtZXMocHJvcGVy
dHkudmFsdWUpOwogCiAgICAgICAgICAgICAgICAgaWYgKCFzdHlsZS5pbmhlcml0ZWQpIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NwcmVh
ZHNoZWV0Q1NTU3R5bGVEZWNsYXJhdGlvbkVkaXRvci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NwcmVhZHNoZWV0Q1NTU3R5bGVEZWNsYXJhdGlvbkVkaXRv
ci5qcwppbmRleCBlZGQxNDQ0ZWU2YzNhNGUxMTFjYjc5ZjMyMGIxMDVmODliMTUxYTU5Li45YWI4
OTQzNjVmZTBmZTcwYmQxMWE4NWM5MjU3NzYxMjAxMmYzNjBkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9TcHJlYWRzaGVldENTU1N0eWxlRGVj
bGFyYXRpb25FZGl0b3IuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvVmlld3MvU3ByZWFkc2hlZXRDU1NTdHlsZURlY2xhcmF0aW9uRWRpdG9yLmpzCkBAIC00NDUs
NiArNDQ1LDIxIEBAIFdJLlNwcmVhZHNoZWV0Q1NTU3R5bGVEZWNsYXJhdGlvbkVkaXRvciA9IGNs
YXNzIFNwcmVhZHNoZWV0Q1NTU3R5bGVEZWNsYXJhdGlvbkVkCiAKICAgICAvLyBTcHJlYWRzaGVl
dFN0eWxlUHJvcGVydHkgZGVsZWdhdGUKIAorICAgIGNvbXBsZXRpb25Db250cm9sbGVyQ1NTRnVu
Y3Rpb25WYWx1ZXNOZWVkZWQocHJvcGVydHlWaWV3LCBmdW5jdGlvbk5hbWUpCisgICAgeworICAg
ICAgICBsZXQgdmFsdWVzID0gW107CisgICAgICAgIHN3aXRjaCAoZnVuY3Rpb25OYW1lKSB7Cisg
ICAgICAgIGNhc2UgInZhciI6CisgICAgICAgICAgICB2YWx1ZXMgPSB0aGlzLnN0eWxlLm5vZGVT
dHlsZXMuYWxsQ1NTVmFyaWFibGVzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
ImF0dHIiOgorICAgICAgICAgICAgdmFsdWVzID0gdGhpcy5zdHlsZS5ub2RlLmF0dHJpYnV0ZXMo
KS5tYXAoYXR0cmlidXRlID0+IGF0dHJpYnV0ZS5uYW1lKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHZhbHVlczsKKyAgICB9CisKICAgICBzcHJlYWRz
aGVldFN0eWxlUHJvcGVydHlCbHVyKGV2ZW50LCBwcm9wZXJ0eSkKICAgICB7CiAgICAgICAgIGlm
ICh0aGlzLl9zdXBwcmVzc0JsdXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9WaWV3cy9TcHJlYWRzaGVldFN0eWxlUHJvcGVydHkuanMgYi9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9TcHJlYWRzaGVldFN0eWxlUHJvcGVy
dHkuanMKaW5kZXggNGNmMGQzNjdhN2M5MTdhN2U0YzE4MzY2YTIwNjM3MzJkN2VmNTJmYS4uOWRh
MThlYzQ0MTkyMzFmOThkNGFiMjQ1YzkzZmYxMDg2ZTc5MTk1YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU3ByZWFkc2hlZXRTdHlsZVByb3Bl
cnR5LmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1Nw
cmVhZHNoZWV0U3R5bGVQcm9wZXJ0eS5qcwpAQCAtOTgwLDkgKzk4MCwxMyBAQCBXSS5TcHJlYWRz
aGVldFN0eWxlUHJvcGVydHkgPSBjbGFzcyBTcHJlYWRzaGVldFN0eWxlUHJvcGVydHkgZXh0ZW5k
cyBXSS5PYmplY3QKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIC8vIEZJWE1F
OiA8d2Via2l0Lm9yZy9iLzIyNzA5OD4gU3R5bGVzIHNpZGViYXIgcGFuZWwgc2hvdWxkIGF1dG9j
b21wbGV0ZSBgdmFyKClgIHZhbHVlcy4KLSAgICAgICAgaWYgKGZ1bmN0aW9uTmFtZSkKLSAgICAg
ICAgICAgIHJldHVybiB7IHByZWZpeDogY3VycmVudFRva2VuVmFsdWUsIGNvbXBsZXRpb25zOiBX
SS5DU1NLZXl3b3JkQ29tcGxldGlvbnMuZm9yRnVuY3Rpb24oZnVuY3Rpb25OYW1lKS5zdGFydHNX
aXRoKGN1cnJlbnRUb2tlblZhbHVlKSB9OworICAgICAgICBpZiAoZnVuY3Rpb25OYW1lKSB7Cisg
ICAgICAgICAgICBsZXQgZnVuY3Rpb25WYWx1ZXMgPSB0aGlzLl9kZWxlZ2F0ZT8uY29tcGxldGlv
bkNvbnRyb2xsZXJDU1NGdW5jdGlvblZhbHVlc05lZWRlZD8uKHRoaXMsIGZ1bmN0aW9uTmFtZSkg
fHwgW107CisgICAgICAgICAgICBsZXQgY29tcGxldGlvbnMgPSBXSS5DU1NLZXl3b3JkQ29tcGxl
dGlvbnMuZm9yRnVuY3Rpb24oZnVuY3Rpb25OYW1lKTsKKyAgICAgICAgICAgIGNvbXBsZXRpb25z
LnZhbHVlcyA9IFsuLi5jb21wbGV0aW9ucy52YWx1ZXMsIC4uLmZ1bmN0aW9uVmFsdWVzXTsKKwor
ICAgICAgICAgICAgcmV0dXJuIHsgcHJlZml4OiBjdXJyZW50VG9rZW5WYWx1ZSwgY29tcGxldGlv
bnM6IGNvbXBsZXRpb25zLnN0YXJ0c1dpdGgoY3VycmVudFRva2VuVmFsdWUpIH07CisgICAgICAg
IH0KIAogICAgICAgICByZXR1cm4geyBwcmVmaXg6IGN1cnJlbnRUb2tlblZhbHVlLCBjb21wbGV0
aW9uczogV0kuQ1NTS2V5d29yZENvbXBsZXRpb25zLmZvclByb3BlcnR5KHByb3BlcnR5TmFtZSku
c3RhcnRzV2l0aChjdXJyZW50VG9rZW5WYWx1ZSkgfTsKICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431894</attachid>
            <date>2021-06-21 12:26:54 -0700</date>
            <delta_ts>2021-06-23 10:06:01 -0700</delta_ts>
            <desc>WIP1.1</desc>
            <filename>bug-227098-20210621212651.patch</filename>
            <type>text/plain</type>
            <size>6248</size>
            <attacher name="Razvan Caliman">rcaliman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDg2MmNlMjZhMzdmZmVkZWU5M2U4NmMxOGYxY2Zl
YWE2ZjE0MDlhYWIuLjk5YmJmMDE0MmZhYzc3MmQ0NDQ4MmJiNTgxZDBkOTZjMzFiZTJmODcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDIxLTA2LTIxICBSYXp2
YW4gQ2FsaW1hbiAgPHJjYWxpbWFuQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9y
OiBTdHlsZXM6IHNob3VsZCBhdXRvY29tcGxldGUgYHZhcigpYCB2YWx1ZXMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNzA5OAorICAgICAgICA8cmRh
cjovL3Byb2JsZW0vNzk0MTgyNDc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGNvbXBsZXRpb24gc3VnZ2VzdGlvbnMgaW4g
dGhlIFN0eWxlcyBkZXRhaWxzIHNpZGViYXIgcGFuZWwKKyAgICAgICAgZm9yIENTUyBWYXJpYWJs
ZXMgZm9yIHVzZSB3aXRoIHZhcigpIGFuZCBET00gbm9kZSBhdHRyaWJ1dGVzIGZvciB1c2Ugd2l0
aCBhdHRyKCkuCisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01vZGVscy9DU1NDb21wbGV0aW9u
cy5qczoKKyAgICAgICAgKFdJLkNTU0NvbXBsZXRpb25zLnByb3RvdHlwZS5hZGRWYWx1ZXMpOgor
ICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTW9kZWxzL0RPTU5vZGVTdHlsZXMuanM6CisgICAgICAg
IChXSS5ET01Ob2RlU3R5bGVzKToKKyAgICAgICAgKFdJLkRPTU5vZGVTdHlsZXMucHJvdG90eXBl
LmdldCBhbGxDU1NWYXJpYWJsZXMpOgorICAgICAgICAoV0kuRE9NTm9kZVN0eWxlcy5wcm90b3R5
cGUuX3VwZGF0ZVN0eWxlQ2FzY2FkZSk6CisgICAgICAgIChXSS5ET01Ob2RlU3R5bGVzLnByb3Rv
dHlwZS5fY29sbGVjdENTU1ZhcmlhYmxlcyk6CisgICAgICAgIChXSS5ET01Ob2RlU3R5bGVzLnBy
b3RvdHlwZS5fY29sbGVjdFVzZWRDU1NWYXJpYWJsZXMpOiBEZWxldGVkLgorICAgICAgICAqIFVz
ZXJJbnRlcmZhY2UvVmlld3MvU3ByZWFkc2hlZXRTdHlsZVByb3BlcnR5LmpzOgorICAgICAgICAo
V0kuU3ByZWFkc2hlZXRTdHlsZVByb3BlcnR5LnByb3RvdHlwZS5fdmFsdWVDb21wbGV0aW9uRGF0
YVByb3ZpZGVyKToKKyAgICAgICAgKFdJLlNwcmVhZHNoZWV0U3R5bGVQcm9wZXJ0eS5wcm90b3R5
cGUuX2dldEZ1bmN0aW9uVmFsdWVDb21wbGV0aW9ucyk6CisKIDIwMjEtMDYtMTggIFBhdHJpY2sg
QW5nbGUgIDxwYW5nbGVAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFN0eWxl
czogQXV0b2NvbXBsZXRlIHNob3VsZCBzdXBwb3J0IG1pZC1saW5lIGNvbXBsZXRpb25zIGFuZCBm
dW5jdGlvbiBjb21wbGV0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvTW9kZWxzL0NTU0NvbXBsZXRpb25zLmpzIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0NTU0NvbXBsZXRpb25zLmpzCmluZGV4IDVjMTg3N2Vm
Y2M0OTM5YTkxYjQ4MjAzYWZjNDcyODVlMTRjZjdmMjYuLjEzYjZmODE1NjRiYWY2MmY0YmY4YTVj
YWM2Njg0OGEyN2Y4ZjMxNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL01vZGVscy9DU1NDb21wbGV0aW9ucy5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvQ1NTQ29tcGxldGlvbnMuanMKQEAgLTI2MSw2ICsy
NjEsMTMgQEAgV0kuQ1NTQ29tcGxldGlvbnMgPSBjbGFzcyBDU1NDb21wbGV0aW9ucwogICAgICAg
ICByZXR1cm4gdGhpcy5fdmFsdWVzOwogICAgIH0KIAorICAgIGFkZFZhbHVlcyh2YWx1ZXMpCisg
ICAgeworICAgICAgICBjb25zb2xlLmFzc2VydChBcnJheS5pc0FycmF5KHZhbHVlcyksICJFeHBl
Y3RlZCBhcnJheSBvZiB2YWx1ZXMgZm9yIGFkZGl0aW9uYWwgY29tcGxldGlvbiBzdWdnZXN0aW9u
cyIpOworICAgICAgICB0aGlzLl92YWx1ZXMgPSB0aGlzLl92YWx1ZXMuY29uY2F0KHZhbHVlcy5z
bGljZSgpKTsKKyAgICAgICAgdGhpcy5fdmFsdWVzLnNvcnQoKTsKKyAgICB9CisKICAgICBzdGFy
dHNXaXRoKHByZWZpeCkKICAgICB7CiAgICAgICAgIGlmICghcHJlZml4KQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0RPTU5vZGVTdHlsZXMu
anMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvRE9NTm9kZVN0
eWxlcy5qcwppbmRleCBkZDAwZTQ5NWUwNzI0YTU3M2Q4OGVhNTkwMjcyNWRiNjhjMjNmYTBhLi5j
ZThlY2Y4ZWUxZjc5MTE2YWUwNjc2NDJhNzFmYmNmODU0ZGZmYmZhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvRE9NTm9kZVN0eWxlcy5qcwor
KysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvRE9NTm9kZVN0
eWxlcy5qcwpAQCAtNDcsNiArNDcsNyBAQCBXSS5ET01Ob2RlU3R5bGVzID0gY2xhc3MgRE9NTm9k
ZVN0eWxlcyBleHRlbmRzIFdJLk9iamVjdAogCiAgICAgICAgIHRoaXMuX3Byb3BlcnR5TmFtZVRv
RWZmZWN0aXZlUHJvcGVydHlNYXAgPSB7fTsKICAgICAgICAgdGhpcy5fdXNlZENTU1ZhcmlhYmxl
cyA9IG5ldyBTZXQ7CisgICAgICAgIHRoaXMuX2FsbENTU1ZhcmlhYmxlcyA9IG5ldyBTZXQ7CiAK
ICAgICAgICAgdGhpcy5fcGVuZGluZ1JlZnJlc2hUYXNrID0gbnVsbDsKICAgICAgICAgdGhpcy5y
ZWZyZXNoKCk7CkBAIC0xMzEsNiArMTMyLDcgQEAgV0kuRE9NTm9kZVN0eWxlcyA9IGNsYXNzIERP
TU5vZGVTdHlsZXMgZXh0ZW5kcyBXSS5PYmplY3QKICAgICBnZXQgb3JkZXJlZFN0eWxlcygpIHsg
cmV0dXJuIHRoaXMuX29yZGVyZWRTdHlsZXM7IH0KICAgICBnZXQgY29tcHV0ZWRQcmltYXJ5Rm9u
dCgpIHsgcmV0dXJuIHRoaXMuX2NvbXB1dGVkUHJpbWFyeUZvbnQ7IH0KICAgICBnZXQgdXNlZENT
U1ZhcmlhYmxlcygpIHsgcmV0dXJuIHRoaXMuX3VzZWRDU1NWYXJpYWJsZXM7IH0KKyAgICBnZXQg
YWxsQ1NTVmFyaWFibGVzKCkgeyByZXR1cm4gdGhpcy5fYWxsQ1NTVmFyaWFibGVzOyB9CiAKICAg
ICBnZXQgbmVlZHNSZWZyZXNoKCkKICAgICB7CkBAIC03NjksNyArNzcxLDcgQEAgV0kuRE9NTm9k
ZVN0eWxlcyA9IGNsYXNzIERPTU5vZGVTdHlsZXMgZXh0ZW5kcyBXSS5PYmplY3QKIAogICAgICAg
ICB0aGlzLl9hc3NvY2lhdGVSZWxhdGVkUHJvcGVydGllcyhjYXNjYWRlT3JkZXJlZFN0eWxlRGVj
bGFyYXRpb25zLCB0aGlzLl9wcm9wZXJ0eU5hbWVUb0VmZmVjdGl2ZVByb3BlcnR5TWFwKTsKICAg
ICAgICAgdGhpcy5fbWFya092ZXJyaWRkZW5Qcm9wZXJ0aWVzKGNhc2NhZGVPcmRlcmVkU3R5bGVE
ZWNsYXJhdGlvbnMsIHRoaXMuX3Byb3BlcnR5TmFtZVRvRWZmZWN0aXZlUHJvcGVydHlNYXApOwot
ICAgICAgICB0aGlzLl9jb2xsZWN0VXNlZENTU1ZhcmlhYmxlcyhjYXNjYWRlT3JkZXJlZFN0eWxl
RGVjbGFyYXRpb25zKTsKKyAgICAgICAgdGhpcy5fY29sbGVjdENTU1ZhcmlhYmxlcyhjYXNjYWRl
T3JkZXJlZFN0eWxlRGVjbGFyYXRpb25zKTsKIAogICAgICAgICBmb3IgKGxldCBwc2V1ZG9FbGVt
ZW50SW5mbyBvZiB0aGlzLl9wc2V1ZG9FbGVtZW50cy52YWx1ZXMoKSkgewogICAgICAgICAgICAg
cHNldWRvRWxlbWVudEluZm8ub3JkZXJlZFN0eWxlcyA9IHRoaXMuX2NvbGxlY3RTdHlsZXNJbkNh
c2NhZGVPcmRlcihwc2V1ZG9FbGVtZW50SW5mby5tYXRjaGVkUnVsZXMsIG51bGwsIG51bGwpOwpA
QCAtOTQ1LDEyICs5NDcsMTYgQEAgV0kuRE9NTm9kZVN0eWxlcyA9IGNsYXNzIERPTU5vZGVTdHls
ZXMgZXh0ZW5kcyBXSS5PYmplY3QKICAgICAgICAgfQogICAgIH0KIAotICAgIF9jb2xsZWN0VXNl
ZENTU1ZhcmlhYmxlcyhzdHlsZXMpCisgICAgX2NvbGxlY3RDU1NWYXJpYWJsZXMoc3R5bGVzKQog
ICAgIHsKKyAgICAgICAgdGhpcy5fYWxsQ1NTVmFyaWFibGVzID0gbmV3IFNldDsKICAgICAgICAg
dGhpcy5fdXNlZENTU1ZhcmlhYmxlcyA9IG5ldyBTZXQ7CiAKICAgICAgICAgZm9yIChsZXQgc3R5
bGUgb2Ygc3R5bGVzKSB7CiAgICAgICAgICAgICBmb3IgKGxldCBwcm9wZXJ0eSBvZiBzdHlsZS5l
bmFibGVkUHJvcGVydGllcykgeworICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5pc1Zhcmlh
YmxlKQorICAgICAgICAgICAgICAgICAgICB0aGlzLl9hbGxDU1NWYXJpYWJsZXMuYWRkKHByb3Bl
cnR5Lm5hbWUpOworCiAgICAgICAgICAgICAgICAgbGV0IHZhcmlhYmxlcyA9IFdJLkNTU1Byb3Bl
cnR5LmZpbmRWYXJpYWJsZU5hbWVzKHByb3BlcnR5LnZhbHVlKTsKIAogICAgICAgICAgICAgICAg
IGlmICghc3R5bGUuaW5oZXJpdGVkKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9WaWV3cy9TcHJlYWRzaGVldFN0eWxlUHJvcGVydHkuanMgYi9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9TcHJlYWRzaGVldFN0eWxlUHJv
cGVydHkuanMKaW5kZXggNGNmMGQzNjdhN2M5MTdhN2U0YzE4MzY2YTIwNjM3MzJkN2VmNTJmYS4u
YTgyNGFjMGJjOGQ3NjI5NzRmYTBjZTQyNWQ2MmFjMTA2MTdjNDQ3NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU3ByZWFkc2hlZXRTdHlsZVBy
b3BlcnR5LmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdz
L1NwcmVhZHNoZWV0U3R5bGVQcm9wZXJ0eS5qcwpAQCAtOTgwLDEzICs5ODAsMjcgQEAgV0kuU3By
ZWFkc2hlZXRTdHlsZVByb3BlcnR5ID0gY2xhc3MgU3ByZWFkc2hlZXRTdHlsZVByb3BlcnR5IGV4
dGVuZHMgV0kuT2JqZWN0CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICAvLyBG
SVhNRTogPHdlYmtpdC5vcmcvYi8yMjcwOTg+IFN0eWxlcyBzaWRlYmFyIHBhbmVsIHNob3VsZCBh
dXRvY29tcGxldGUgYHZhcigpYCB2YWx1ZXMuCi0gICAgICAgIGlmIChmdW5jdGlvbk5hbWUpCi0g
ICAgICAgICAgICByZXR1cm4geyBwcmVmaXg6IGN1cnJlbnRUb2tlblZhbHVlLCBjb21wbGV0aW9u
czogV0kuQ1NTS2V5d29yZENvbXBsZXRpb25zLmZvckZ1bmN0aW9uKGZ1bmN0aW9uTmFtZSkuc3Rh
cnRzV2l0aChjdXJyZW50VG9rZW5WYWx1ZSkgfTsKKyAgICAgICAgaWYgKGZ1bmN0aW9uTmFtZSkg
eworICAgICAgICAgICAgbGV0IGNvbXBsZXRpb25zID0gV0kuQ1NTS2V5d29yZENvbXBsZXRpb25z
LmZvckZ1bmN0aW9uKGZ1bmN0aW9uTmFtZSk7CisgICAgICAgICAgICBjb21wbGV0aW9ucy5hZGRW
YWx1ZXModGhpcy5fZ2V0RnVuY3Rpb25WYWx1ZUNvbXBsZXRpb25zKGZ1bmN0aW9uTmFtZSkpOwor
CisgICAgICAgICAgICByZXR1cm4ge3ByZWZpeDogY3VycmVudFRva2VuVmFsdWUsIGNvbXBsZXRp
b25zOiBjb21wbGV0aW9ucy5zdGFydHNXaXRoKGN1cnJlbnRUb2tlblZhbHVlKX07CisgICAgICAg
IH0KIAogICAgICAgICByZXR1cm4geyBwcmVmaXg6IGN1cnJlbnRUb2tlblZhbHVlLCBjb21wbGV0
aW9uczogV0kuQ1NTS2V5d29yZENvbXBsZXRpb25zLmZvclByb3BlcnR5KHByb3BlcnR5TmFtZSku
c3RhcnRzV2l0aChjdXJyZW50VG9rZW5WYWx1ZSkgfTsKICAgICB9CiAKKyAgICBfZ2V0RnVuY3Rp
b25WYWx1ZUNvbXBsZXRpb25zKGZ1bmN0aW9uTmFtZSkKKyAgICB7CisgICAgICAgIGlmIChmdW5j
dGlvbk5hbWUgPT09ICJ2YXIiKQorICAgICAgICAgICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5f
cHJvcGVydHkub3duZXJTdHlsZS5ub2RlU3R5bGVzLmFsbENTU1ZhcmlhYmxlcyk7CisKKyAgICAg
ICAgaWYgKGZ1bmN0aW9uTmFtZSA9PT0gImF0dHIiKQorICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X3Byb3BlcnR5Lm93bmVyU3R5bGUubm9kZS5hdHRyaWJ1dGVzKCkubWFwKChhdHRyaWJ1dGUpID0+
IGF0dHJpYnV0ZS5uYW1lKTsKKworICAgICAgICByZXR1cm4gW107CisgICAgfQorCiAgICAgX3Nl
dHVwSnVtcFRvU3ltYm9sKGVsZW1lbnQpCiAgICAgewogICAgICAgICBlbGVtZW50LmFkZEV2ZW50
TGlzdGVuZXIoIm1vdXNlZG93biIsIChldmVudCkgPT4gewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>432065</attachid>
            <date>2021-06-23 10:06:05 -0700</date>
            <delta_ts>2021-06-24 06:52:56 -0700</delta_ts>
            <desc>Patch 1.0</desc>
            <filename>bug-227098-20210623190602.patch</filename>
            <type>text/plain</type>
            <size>12797</size>
            <attacher name="Razvan Caliman">rcaliman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDNmODI5MmFjZjQ5ZjE4YjM2MDZmYmQ4ZjgyZDE1
MWU5MjQ3ODUyNmMuLjljOTZmOWQ3N2VlN2MxNzEyYjJmMTFlNTY1NzFhMTZhNjNlNDViMmEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDIxLTA2LTIzICBSYXp2
YW4gQ2FsaW1hbiAgPHJjYWxpbWFuQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9y
OiBTdHlsZXM6IHNob3VsZCBhdXRvY29tcGxldGUgYHZhcigpYCBhbmQgYGF0dHIoKWAgdmFsdWVz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcwOTgK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc5NDE4MjQ3PgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBjb21wbGV0aW9uIHN1
Z2dlc3Rpb25zIGluIHRoZSBTdHlsZXMgZGV0YWlscyBzaWRlYmFyIHBhbmVsCisgICAgICAgIGZv
ciBDU1MgVmFyaWFibGVzIGZvciB1c2Ugd2l0aCB2YXIoKSBhbmQgRE9NIG5vZGUgYXR0cmlidXRl
cyBmb3IgdXNlIHdpdGggYXR0cigpLgorCisgICAgICAgICogVXNlckludGVyZmFjZS9Nb2RlbHMv
Q1NTQ29tcGxldGlvbnMuanM6CisgICAgICAgIChXSS5DU1NDb21wbGV0aW9ucy5wcm90b3R5cGUu
YWRkVmFsdWVzKToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01vZGVscy9DU1NLZXl3b3JkQ29t
cGxldGlvbnMuanM6CisgICAgICAgICogVXNlckludGVyZmFjZS9Nb2RlbHMvRE9NTm9kZVN0eWxl
cy5qczoKKyAgICAgICAgKFdJLkRPTU5vZGVTdHlsZXMpOgorICAgICAgICAoV0kuRE9NTm9kZVN0
eWxlcy5wcm90b3R5cGUuZ2V0IGFsbENTU1ZhcmlhYmxlcyk6CisgICAgICAgIChXSS5ET01Ob2Rl
U3R5bGVzLnByb3RvdHlwZS5fdXBkYXRlU3R5bGVDYXNjYWRlKToKKyAgICAgICAgKFdJLkRPTU5v
ZGVTdHlsZXMucHJvdG90eXBlLl9jb2xsZWN0Q1NTVmFyaWFibGVzKToKKyAgICAgICAgKiBVc2Vy
SW50ZXJmYWNlL1ZpZXdzL1NwcmVhZHNoZWV0U3R5bGVQcm9wZXJ0eS5qczoKKyAgICAgICAgKFdJ
LlNwcmVhZHNoZWV0U3R5bGVQcm9wZXJ0eS5wcm90b3R5cGUuZ2V0RnVuY3Rpb25WYWx1ZUNvbXBs
ZXRpb25zKToKKyAgICAgICAgKFdJLlNwcmVhZHNoZWV0U3R5bGVQcm9wZXJ0eS5wcm90b3R5cGUu
X3ZhbHVlQ29tcGxldGlvbkRhdGFQcm92aWRlcik6CisKIDIwMjEtMDYtMjMgIFBhdHJpY2sgQW5n
bGUgIDxwYW5nbGVAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFN0eWxlczog
QXV0b2NvbXBsZXRlIHNob3VsZCBzdXBwb3J0IG1pZC1saW5lIGNvbXBsZXRpb25zIGFuZCBmdW5j
dGlvbiBjb21wbGV0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvTW9kZWxzL0NTU0NvbXBsZXRpb25zLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvTW9kZWxzL0NTU0NvbXBsZXRpb25zLmpzCmluZGV4IDVjMTg3N2VmY2M0
OTM5YTkxYjQ4MjAzYWZjNDcyODVlMTRjZjdmMjYuLjI4ZWU0ZjFkOTllNzc5NmYyOTJiNjk3OTdi
N2JhMGNiZjMyZDZjYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL01vZGVscy9DU1NDb21wbGV0aW9ucy5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9Nb2RlbHMvQ1NTQ29tcGxldGlvbnMuanMKQEAgLTI2MSw2ICsyNjEs
MTMgQEAgV0kuQ1NTQ29tcGxldGlvbnMgPSBjbGFzcyBDU1NDb21wbGV0aW9ucwogICAgICAgICBy
ZXR1cm4gdGhpcy5fdmFsdWVzOwogICAgIH0KIAorICAgIGFkZFZhbHVlcyh2YWx1ZXMpCisgICAg
eworICAgICAgICBjb25zb2xlLmFzc2VydChBcnJheS5pc0FycmF5KHZhbHVlcyksICJFeHBlY3Rl
ZCBhcnJheSBvZiB2YWx1ZXMgZm9yIGFkZGl0aW9uYWwgY29tcGxldGlvbiBzdWdnZXN0aW9ucyIp
OworICAgICAgICB0aGlzLl92YWx1ZXMgPSB0aGlzLl92YWx1ZXMuY29uY2F0KHZhbHVlcyk7Cisg
ICAgICAgIHRoaXMuX3ZhbHVlcy5zb3J0KCk7CisgICAgfQorCiAgICAgc3RhcnRzV2l0aChwcmVm
aXgpCiAgICAgewogICAgICAgICBpZiAoIXByZWZpeCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9DU1NLZXl3b3JkQ29tcGxldGlvbnMuanMg
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvQ1NTS2V5d29yZENv
bXBsZXRpb25zLmpzCmluZGV4IGU3MzAxOTVhOWU4OTQyZGU2NDk2NGE0YjllNzIyYTZkOGUwOTY3
MGUuLjEwMGJhNDkxYWI0YjRiYzI1Yjk2MmYwMDc4OWNjYjFhNzU1M2ZiYjkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9DU1NLZXl3b3JkQ29t
cGxldGlvbnMuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9k
ZWxzL0NTU0tleXdvcmRDb21wbGV0aW9ucy5qcwpAQCAtNDgsNyArNDgsNyBAQCBXSS5DU1NLZXl3
b3JkQ29tcGxldGlvbnMuZm9yUGFydGlhbFByb3BlcnR5TmFtZSA9IGZ1bmN0aW9uKHRleHQsIHtj
YXJldFBvc2l0aW9uLAogICAgIHJldHVybiB7cHJlZml4OiB0ZXh0LCBjb21wbGV0aW9uc307CiB9
OwogCi1XSS5DU1NLZXl3b3JkQ29tcGxldGlvbnMuZm9yUGFydGlhbFByb3BlcnR5VmFsdWUgPSBm
dW5jdGlvbih0ZXh0LCBwcm9wZXJ0eU5hbWUsIHtjYXJldFBvc2l0aW9ufSA9IHt9KQorV0kuQ1NT
S2V5d29yZENvbXBsZXRpb25zLmZvclBhcnRpYWxQcm9wZXJ0eVZhbHVlID0gZnVuY3Rpb24odGV4
dCwgcHJvcGVydHlOYW1lLCB7Y2FyZXRQb3NpdGlvbiwgZ2V0RnVuY3Rpb25WYWx1ZUNvbXBsZXRp
b25zfSA9IHt9KQogewogICAgIGNhcmV0UG9zaXRpb24gPz89IHRleHQubGVuZ3RoOwogCkBAIC0x
MTUsOSArMTE1LDEzIEBAIFdJLkNTU0tleXdvcmRDb21wbGV0aW9ucy5mb3JQYXJ0aWFsUHJvcGVy
dHlWYWx1ZSA9IGZ1bmN0aW9uKHRleHQsIHByb3BlcnR5TmFtZSwKICAgICAgICAgfQogICAgIH0K
IAotICAgIC8vIEZJWE1FOiA8d2Via2l0Lm9yZy9iLzIyNzA5OD4gU3R5bGVzIHNpZGViYXIgcGFu
ZWwgc2hvdWxkIGF1dG9jb21wbGV0ZSBgdmFyKClgIHZhbHVlcy4KLSAgICBpZiAoZnVuY3Rpb25O
YW1lKQotICAgICAgICByZXR1cm4ge3ByZWZpeDogY3VycmVudFRva2VuVmFsdWUsIGNvbXBsZXRp
b25zOiBXSS5DU1NLZXl3b3JkQ29tcGxldGlvbnMuZm9yRnVuY3Rpb24oZnVuY3Rpb25OYW1lKS5z
dGFydHNXaXRoKGN1cnJlbnRUb2tlblZhbHVlKX07CisgICAgaWYgKGZ1bmN0aW9uTmFtZSkgewor
ICAgICAgICBsZXQgY29tcGxldGlvbnMgPSBXSS5DU1NLZXl3b3JkQ29tcGxldGlvbnMuZm9yRnVu
Y3Rpb24oZnVuY3Rpb25OYW1lKTsKKyAgICAgICAgbGV0IGNvbnRleHR1YWxWYWx1ZUNvbXBsZXRp
b25zID0gZ2V0RnVuY3Rpb25WYWx1ZUNvbXBsZXRpb25zPy4oZnVuY3Rpb25OYW1lKSB8fCBbXTsK
KyAgICAgICAgY29tcGxldGlvbnMuYWRkVmFsdWVzKGNvbnRleHR1YWxWYWx1ZUNvbXBsZXRpb25z
KTsKKworICAgICAgICByZXR1cm4ge3ByZWZpeDogY3VycmVudFRva2VuVmFsdWUsIGNvbXBsZXRp
b25zOiBjb21wbGV0aW9ucy5zdGFydHNXaXRoKGN1cnJlbnRUb2tlblZhbHVlKX07CisgICAgfQog
CiAgICAgcmV0dXJuIHtwcmVmaXg6IGN1cnJlbnRUb2tlblZhbHVlLCBjb21wbGV0aW9uczogV0ku
Q1NTS2V5d29yZENvbXBsZXRpb25zLmZvclByb3BlcnR5KHByb3BlcnR5TmFtZSkuc3RhcnRzV2l0
aChjdXJyZW50VG9rZW5WYWx1ZSl9OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9ET01Ob2RlU3R5bGVzLmpzIGIvU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0RPTU5vZGVTdHlsZXMuanMKaW5kZXggZGQw
MGU0OTVlMDcyNGE1NzNkODhlYTU5MDI3MjVkYjY4YzIzZmEwYS4uY2U4ZWNmOGVlMWY3OTExNmFl
MDY3NjQyYTcxZmJjZjg1NGRmZmJmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvTW9kZWxzL0RPTU5vZGVTdHlsZXMuanMKKysrIGIvU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0RPTU5vZGVTdHlsZXMuanMKQEAgLTQ3LDYg
KzQ3LDcgQEAgV0kuRE9NTm9kZVN0eWxlcyA9IGNsYXNzIERPTU5vZGVTdHlsZXMgZXh0ZW5kcyBX
SS5PYmplY3QKIAogICAgICAgICB0aGlzLl9wcm9wZXJ0eU5hbWVUb0VmZmVjdGl2ZVByb3BlcnR5
TWFwID0ge307CiAgICAgICAgIHRoaXMuX3VzZWRDU1NWYXJpYWJsZXMgPSBuZXcgU2V0OworICAg
ICAgICB0aGlzLl9hbGxDU1NWYXJpYWJsZXMgPSBuZXcgU2V0OwogCiAgICAgICAgIHRoaXMuX3Bl
bmRpbmdSZWZyZXNoVGFzayA9IG51bGw7CiAgICAgICAgIHRoaXMucmVmcmVzaCgpOwpAQCAtMTMx
LDYgKzEzMiw3IEBAIFdJLkRPTU5vZGVTdHlsZXMgPSBjbGFzcyBET01Ob2RlU3R5bGVzIGV4dGVu
ZHMgV0kuT2JqZWN0CiAgICAgZ2V0IG9yZGVyZWRTdHlsZXMoKSB7IHJldHVybiB0aGlzLl9vcmRl
cmVkU3R5bGVzOyB9CiAgICAgZ2V0IGNvbXB1dGVkUHJpbWFyeUZvbnQoKSB7IHJldHVybiB0aGlz
Ll9jb21wdXRlZFByaW1hcnlGb250OyB9CiAgICAgZ2V0IHVzZWRDU1NWYXJpYWJsZXMoKSB7IHJl
dHVybiB0aGlzLl91c2VkQ1NTVmFyaWFibGVzOyB9CisgICAgZ2V0IGFsbENTU1ZhcmlhYmxlcygp
IHsgcmV0dXJuIHRoaXMuX2FsbENTU1ZhcmlhYmxlczsgfQogCiAgICAgZ2V0IG5lZWRzUmVmcmVz
aCgpCiAgICAgewpAQCAtNzY5LDcgKzc3MSw3IEBAIFdJLkRPTU5vZGVTdHlsZXMgPSBjbGFzcyBE
T01Ob2RlU3R5bGVzIGV4dGVuZHMgV0kuT2JqZWN0CiAKICAgICAgICAgdGhpcy5fYXNzb2NpYXRl
UmVsYXRlZFByb3BlcnRpZXMoY2FzY2FkZU9yZGVyZWRTdHlsZURlY2xhcmF0aW9ucywgdGhpcy5f
cHJvcGVydHlOYW1lVG9FZmZlY3RpdmVQcm9wZXJ0eU1hcCk7CiAgICAgICAgIHRoaXMuX21hcmtP
dmVycmlkZGVuUHJvcGVydGllcyhjYXNjYWRlT3JkZXJlZFN0eWxlRGVjbGFyYXRpb25zLCB0aGlz
Ll9wcm9wZXJ0eU5hbWVUb0VmZmVjdGl2ZVByb3BlcnR5TWFwKTsKLSAgICAgICAgdGhpcy5fY29s
bGVjdFVzZWRDU1NWYXJpYWJsZXMoY2FzY2FkZU9yZGVyZWRTdHlsZURlY2xhcmF0aW9ucyk7Cisg
ICAgICAgIHRoaXMuX2NvbGxlY3RDU1NWYXJpYWJsZXMoY2FzY2FkZU9yZGVyZWRTdHlsZURlY2xh
cmF0aW9ucyk7CiAKICAgICAgICAgZm9yIChsZXQgcHNldWRvRWxlbWVudEluZm8gb2YgdGhpcy5f
cHNldWRvRWxlbWVudHMudmFsdWVzKCkpIHsKICAgICAgICAgICAgIHBzZXVkb0VsZW1lbnRJbmZv
Lm9yZGVyZWRTdHlsZXMgPSB0aGlzLl9jb2xsZWN0U3R5bGVzSW5DYXNjYWRlT3JkZXIocHNldWRv
RWxlbWVudEluZm8ubWF0Y2hlZFJ1bGVzLCBudWxsLCBudWxsKTsKQEAgLTk0NSwxMiArOTQ3LDE2
IEBAIFdJLkRPTU5vZGVTdHlsZXMgPSBjbGFzcyBET01Ob2RlU3R5bGVzIGV4dGVuZHMgV0kuT2Jq
ZWN0CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBfY29sbGVjdFVzZWRDU1NWYXJpYWJsZXMoc3R5
bGVzKQorICAgIF9jb2xsZWN0Q1NTVmFyaWFibGVzKHN0eWxlcykKICAgICB7CisgICAgICAgIHRo
aXMuX2FsbENTU1ZhcmlhYmxlcyA9IG5ldyBTZXQ7CiAgICAgICAgIHRoaXMuX3VzZWRDU1NWYXJp
YWJsZXMgPSBuZXcgU2V0OwogCiAgICAgICAgIGZvciAobGV0IHN0eWxlIG9mIHN0eWxlcykgewog
ICAgICAgICAgICAgZm9yIChsZXQgcHJvcGVydHkgb2Ygc3R5bGUuZW5hYmxlZFByb3BlcnRpZXMp
IHsKKyAgICAgICAgICAgICAgICBpZiAocHJvcGVydHkuaXNWYXJpYWJsZSkKKyAgICAgICAgICAg
ICAgICAgICAgdGhpcy5fYWxsQ1NTVmFyaWFibGVzLmFkZChwcm9wZXJ0eS5uYW1lKTsKKwogICAg
ICAgICAgICAgICAgIGxldCB2YXJpYWJsZXMgPSBXSS5DU1NQcm9wZXJ0eS5maW5kVmFyaWFibGVO
YW1lcyhwcm9wZXJ0eS52YWx1ZSk7CiAKICAgICAgICAgICAgICAgICBpZiAoIXN0eWxlLmluaGVy
aXRlZCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
Vmlld3MvU3ByZWFkc2hlZXRTdHlsZVByb3BlcnR5LmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvVmlld3MvU3ByZWFkc2hlZXRTdHlsZVByb3BlcnR5LmpzCmluZGV4IDAw
MGVkYjhjZTU3MmY2ZWNmMTE0ZjRlMmU1OTMwMmMyODEzNzRjYTguLjA3YmUxMTNmOTUzNjhkOTYy
ZmZkZTNlYWZlN2QzODdmZDA5ZmYwZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NwcmVhZHNoZWV0U3R5bGVQcm9wZXJ0eS5qcworKysgYi9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9TcHJlYWRzaGVldFN0eWxl
UHJvcGVydHkuanMKQEAgLTMzOSw2ICszMzksMTcgQEAgV0kuU3ByZWFkc2hlZXRTdHlsZVByb3Bl
cnR5ID0gY2xhc3MgU3ByZWFkc2hlZXRTdHlsZVByb3BlcnR5IGV4dGVuZHMgV0kuT2JqZWN0CiAg
ICAgICAgIHJldHVybiBtYXRjaGVzOwogICAgIH0KIAorICAgIGdldEZ1bmN0aW9uVmFsdWVDb21w
bGV0aW9ucyhmdW5jdGlvbk5hbWUpCisgICAgeworICAgICAgICBpZiAoZnVuY3Rpb25OYW1lID09
PSAidmFyIikKKyAgICAgICAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuX3Byb3BlcnR5Lm93
bmVyU3R5bGUubm9kZVN0eWxlcy5hbGxDU1NWYXJpYWJsZXMpOworCisgICAgICAgIGlmIChmdW5j
dGlvbk5hbWUgPT09ICJhdHRyIikKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcm9wZXJ0eS5v
d25lclN0eWxlLm5vZGUuYXR0cmlidXRlcygpLm1hcCgoYXR0cmlidXRlKSA9PiBhdHRyaWJ1dGUu
bmFtZSk7CisKKyAgICAgICAgcmV0dXJuIFtdOworICAgIH0KKwogICAgIC8vIFNwcmVhZHNoZWV0
VGV4dEZpZWxkIGRlbGVnYXRlCiAKICAgICBzcHJlYWRzaGVldFRleHRGaWVsZFdpbGxTdGFydEVk
aXRpbmcodGV4dEZpZWxkKQpAQCAtOTEyLDggKzkyMyw3IEBAIFdJLlNwcmVhZHNoZWV0U3R5bGVQ
cm9wZXJ0eSA9IGNsYXNzIFNwcmVhZHNoZWV0U3R5bGVQcm9wZXJ0eSBleHRlbmRzIFdJLk9iamVj
dAogCiAgICAgX3ZhbHVlQ29tcGxldGlvbkRhdGFQcm92aWRlcih0ZXh0LCB7Y2FyZXRQb3NpdGlv
biwgYWxsb3dFbXB0eVByZWZpeH0gPSB7fSkKICAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiA8d2Vi
a2l0Lm9yZy9iLzIyNzA5OD4gU3R5bGVzIHNpZGViYXIgcGFuZWwgc2hvdWxkIGF1dG9jb21wbGV0
ZSBgdmFyKClgIHZhbHVlcy4KLSAgICAgICAgcmV0dXJuIFdJLkNTU0tleXdvcmRDb21wbGV0aW9u
cy5mb3JQYXJ0aWFsUHJvcGVydHlWYWx1ZSh0ZXh0LCB0aGlzLl9uYW1lRWxlbWVudC50ZXh0Q29u
dGVudC50cmltKCksIHtjYXJldFBvc2l0aW9ufSk7CisgICAgICAgIHJldHVybiBXSS5DU1NLZXl3
b3JkQ29tcGxldGlvbnMuZm9yUGFydGlhbFByb3BlcnR5VmFsdWUodGV4dCwgdGhpcy5fbmFtZUVs
ZW1lbnQudGV4dENvbnRlbnQudHJpbSgpLCB7Y2FyZXRQb3NpdGlvbiwgZ2V0RnVuY3Rpb25WYWx1
ZUNvbXBsZXRpb25zOiB0aGlzLmdldEZ1bmN0aW9uVmFsdWVDb21wbGV0aW9ucy5iaW5kKHRoaXMp
fSk7CiAgICAgfQogCiAgICAgX3NldHVwSnVtcFRvU3ltYm9sKGVsZW1lbnQpCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYWE4
M2EzY2Q5NWQ3NzM0NTM2MjM1ODc5MDM5ZTFjZDBhMzAzMTVlNi4uYWU0MjU3YjQ4ZjJiMzdjZGYx
MmViMGRkNDdjZmNkMzE3NzQ2ZWQ4OSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDIxLTA2LTIz
ICBSYXp2YW4gQ2FsaW1hbiAgPHJjYWxpbWFuQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5z
cGVjdG9yOiBTdHlsZXM6IHNob3VsZCBhdXRvY29tcGxldGUgYHZhcigpYCBhbmQgYGF0dHIoKWAg
dmFsdWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MjcwOTgKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc5NDE4MjQ3PgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCB0ZXN0IGNhc2VzIGZvciBjb250
ZXh0dWFsIENTUyBmdW5jdGlvbiB2YWx1ZSBjb21wbGV0aW9uLgorCisgICAgICAgICogaW5zcGVj
dG9yL3VuaXQtdGVzdHMvY3NzLWtleXdvcmQtY29tcGxldGlvbnMtZXhwZWN0ZWQudHh0OgorICAg
ICAgICAqIGluc3BlY3Rvci91bml0LXRlc3RzL2Nzcy1rZXl3b3JkLWNvbXBsZXRpb25zLmh0bWw6
CisKIDIwMjEtMDYtMjMgIFBhdHJpY2sgQW5nbGUgIDxwYW5nbGVAYXBwbGUuY29tPgogCiAgICAg
ICAgIFdlYiBJbnNwZWN0b3I6IFN0eWxlczogQXV0b2NvbXBsZXRlIHNob3VsZCBzdXBwb3J0IG1p
ZC1saW5lIGNvbXBsZXRpb25zIGFuZCBmdW5jdGlvbiBjb21wbGV0aW9ucwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL3VuaXQtdGVzdHMvY3NzLWtleXdvcmQtY29tcGxldGlvbnMt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3VuaXQtdGVzdHMvY3NzLWtleXdv
cmQtY29tcGxldGlvbnMtZXhwZWN0ZWQudHh0CmluZGV4IDJiMjFjYTg0YThkZjRiN2JkNTEzNzFk
YjY1YjdkNzVlZDIyODNjN2EuLmFiNzMxYjRiOWYwYTFiYTAyMmJlMjU3NzZhOTIyNzliNDA5YTZj
ZjAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci91bml0LXRlc3RzL2Nzcy1rZXl3
b3JkLWNvbXBsZXRpb25zLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
dW5pdC10ZXN0cy9jc3Mta2V5d29yZC1jb21wbGV0aW9ucy1leHBlY3RlZC50eHQKQEAgLTQxLDQg
KzQxLDE5IEBAIFBBU1M6IEFsbCBleHBlY3RlZCBjb21wbGV0aW9ucyB3ZXJlIHByZXNlbnQuCiAt
IFRlc3RpbmcgImdyaWQtdGVtcGxhdGUtY29sdW1uczogW2xpbmVuYW1lMV0gMTAwcHggcmVwZWF0
KCwgW2xpbmVuYW1lMiBsaW5lbmFtZTNdIDE1MHB4KSBbbGluZW5hbWUzXSAxMDBweCBbbGluZW5h
bWU0XSIKIFBBU1M6IEV4cGVjdGVkIHJlc3VsdCBwcmVmaXggdG8gYmUgIiIKIFBBU1M6IEFsbCBl
eHBlY3RlZCBjb21wbGV0aW9ucyB3ZXJlIHByZXNlbnQuCistIFRlc3RpbmcgImNvbnRlbnQ6IGF0
dHIoIgorUEFTUzogRXhwZWN0ZWQgcmVzdWx0IHByZWZpeCB0byBiZSAiIgorUEFTUzogQWxsIGV4
cGVjdGVkIGNvbXBsZXRpb25zIHdlcmUgcHJlc2VudC4KKy0gVGVzdGluZyAiY29udGVudDogYXR0
cihjIgorUEFTUzogRXhwZWN0ZWQgcmVzdWx0IHByZWZpeCB0byBiZSAiYyIKK1BBU1M6IEFsbCBl
eHBlY3RlZCBjb21wbGV0aW9ucyB3ZXJlIHByZXNlbnQuCistIFRlc3RpbmcgImNvbG9yOiB2YXIo
IgorUEFTUzogRXhwZWN0ZWQgcmVzdWx0IHByZWZpeCB0byBiZSAiIgorUEFTUzogQWxsIGV4cGVj
dGVkIGNvbXBsZXRpb25zIHdlcmUgcHJlc2VudC4KKy0gVGVzdGluZyAiY29sb3I6IHZhcigtLW8i
CitQQVNTOiBFeHBlY3RlZCByZXN1bHQgcHJlZml4IHRvIGJlICItLW8iCitQQVNTOiBBbGwgZXhw
ZWN0ZWQgY29tcGxldGlvbnMgd2VyZSBwcmVzZW50LgorLSBUZXN0aW5nICJjb2xvcjogY2FsYygx
ICsgdmFyKCkpIgorUEFTUzogRXhwZWN0ZWQgcmVzdWx0IHByZWZpeCB0byBiZSAiIgorUEFTUzog
QWxsIGV4cGVjdGVkIGNvbXBsZXRpb25zIHdlcmUgcHJlc2VudC4KIApkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaW5zcGVjdG9yL3VuaXQtdGVzdHMvY3NzLWtleXdvcmQtY29tcGxldGlvbnMuaHRt
bCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci91bml0LXRlc3RzL2Nzcy1rZXl3b3JkLWNvbXBsZXRp
b25zLmh0bWwKaW5kZXggYjg2NDdkMmMxNWVhMzI5MzFkMDBlZDQ5NThmMjZiZDQ4MzhkNTcwYS4u
ZmQyMTRmNjhhYmNmNzYxODQ3MDkwZDlmYzY4NmNlNTE0ZDQyMTI4NSAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvaW5zcGVjdG9yL3VuaXQtdGVzdHMvY3NzLWtleXdvcmQtY29tcGxldGlvbnMuaHRt
bAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvdW5pdC10ZXN0cy9jc3Mta2V5d29yZC1jb21w
bGV0aW9ucy5odG1sCkBAIC02Niw5ICs2NiwyMCBAQCBmdW5jdGlvbiB0ZXN0KCkKICAgICAgICAg
ICAgICAgICBleHBlY3RlZFByZWZpeCA/Pz0gdGV4dDsKICAgICAgICAgICAgICAgICBleHBlY3Rl
ZENvbXBsZXRpb25zID8/PSBbXTsKIAorICAgICAgICAgICAgICAgIC8vIE1vY2sgZm9yIHByb3Zp
ZGVyIG9mIGNvbnRleHR1YWwgZnVuY3Rpb24gdmFsdWUgY29tcGxldGlvbnMuCisgICAgICAgICAg
ICAgICAgY29uc3QgZ2V0RnVuY3Rpb25WYWx1ZUNvbXBsZXRpb25zID0gKGZ1bmN0aW9uTmFtZSkg
PT4geworICAgICAgICAgICAgICAgICAgICBpZiAoZnVuY3Rpb25OYW1lID09PSAidmFyIikKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbIi0tb25lIiwgIi0tdHdvIl07CisKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9uTmFtZSA9PT0gImF0dHIiKQorICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIFsiY2xhc3MiLCAiaWQiXTsKKworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gW107CisgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgSW5zcGVj
dG9yVGVzdC5sb2coYC0gVGVzdGluZyAiJHtwcm9wZXJ0eU5hbWV9OiAke3RleHR9ImApOwogCi0g
ICAgICAgICAgICAgICAgbGV0IGNvbXBsZXRpb25SZXN1bHRzID0gV0kuQ1NTS2V5d29yZENvbXBs
ZXRpb25zLmZvclBhcnRpYWxQcm9wZXJ0eVZhbHVlKHRleHQsIHByb3BlcnR5TmFtZSwge2NhcmV0
UG9zaXRpb259KTsKKyAgICAgICAgICAgICAgICBsZXQgY29tcGxldGlvblJlc3VsdHMgPSBXSS5D
U1NLZXl3b3JkQ29tcGxldGlvbnMuZm9yUGFydGlhbFByb3BlcnR5VmFsdWUodGV4dCwgcHJvcGVy
dHlOYW1lLCB7Y2FyZXRQb3NpdGlvbiwgZ2V0RnVuY3Rpb25WYWx1ZUNvbXBsZXRpb25zfSk7CiAg
ICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5leHBlY3RFcXVhbChjb21wbGV0aW9uUmVzdWx0
cy5wcmVmaXgsIGV4cGVjdGVkUHJlZml4LCBgRXhwZWN0ZWQgcmVzdWx0IHByZWZpeCB0byBiZSAi
JHtleHBlY3RlZFByZWZpeH0iYCk7CiAKICAgICAgICAgICAgICAgICAvLyBCZWNhdXNlIGV4cGVj
dGVkIGNvbXBsZXRpb25zIGNvdWxkIGJlIGFkZGVkIGF0IGFueSB0aW1lLCBqdXN0IG1ha2Ugc3Vy
ZSB0aGUgbGlzdCBjb250YWlucyBvdXIgZXhwZWN0ZWQgY29tcGxldGlvbnMsIGluc3RlYWQgb2Yg
ZW5mb3JjaW5nIGFuIGV4YWN0IG1hdGNoIGJldHdlZW4gZXhwZWN0YXRpb25zIGFuZCByZWFsaXR5
LgpAQCAtMTMxLDYgKzE0MiwzOCBAQCBmdW5jdGlvbiB0ZXN0KCkKICAgICAgICAgICAgICAgICBl
eHBlY3RlZFByZWZpeDogIiIsCiAgICAgICAgICAgICAgICAgZXhwZWN0ZWRDb21wbGV0aW9uczog
WyJhdXRvLWZpbGwiLCAiYXV0by1maXQiLCAidmFyKCkiXSwKICAgICAgICAgICAgIH0pOworCisg
ICAgICAgICAgICAvLyBhdHRyKHwKKyAgICAgICAgICAgIGNvbXBhcmVFeHBlY3RhdGlvbnMoImF0
dHIoIiwgImNvbnRlbnQiLCB7CisgICAgICAgICAgICAgICAgZXhwZWN0ZWRQcmVmaXg6ICIiLAor
ICAgICAgICAgICAgICAgIGV4cGVjdGVkQ29tcGxldGlvbnM6IFsiY2xhc3MiLCAiaWQiLCAidmFy
KCkiXSwKKyAgICAgICAgICAgIH0pCisKKyAgICAgICAgICAgIC8vIGF0dHIoY3wpCisgICAgICAg
ICAgICBjb21wYXJlRXhwZWN0YXRpb25zKCJhdHRyKGMiLCAiY29udGVudCIsIHsKKyAgICAgICAg
ICAgICAgICBjYXJldFBvc2l0aW9uOiA2LAorICAgICAgICAgICAgICAgIGV4cGVjdGVkUHJlZml4
OiAiYyIsCisgICAgICAgICAgICAgICAgZXhwZWN0ZWRDb21wbGV0aW9uczogWyJjbGFzcyJdLAor
ICAgICAgICAgICAgfSkKKworICAgICAgICAgICAgLy8gdmFyKHwKKyAgICAgICAgICAgIGNvbXBh
cmVFeHBlY3RhdGlvbnMoInZhcigiLCAiY29sb3IiLCB7CisgICAgICAgICAgICAgICAgZXhwZWN0
ZWRQcmVmaXg6ICIiLAorICAgICAgICAgICAgICAgIGV4cGVjdGVkQ29tcGxldGlvbnM6IFsiLS1v
bmUiLCAiLS10d28iXSwKKyAgICAgICAgICAgIH0pCisKKyAgICAgICAgICAgIC8vIHZhcigtLW98
CisgICAgICAgICAgICBjb21wYXJlRXhwZWN0YXRpb25zKCJ2YXIoLS1vIiwgImNvbG9yIiwgewor
ICAgICAgICAgICAgICAgIGV4cGVjdGVkUHJlZml4OiAiLS1vIiwKKyAgICAgICAgICAgICAgICBl
eHBlY3RlZENvbXBsZXRpb25zOiBbIi0tb25lIl0sCisgICAgICAgICAgICB9KQorCisgICAgICAg
ICAgICAvLyBjYWxjKDEgKyB2YXIofCkpCisgICAgICAgICAgICBjb21wYXJlRXhwZWN0YXRpb25z
KCJjYWxjKDEgKyB2YXIoKSkiLCAiY29sb3IiLCB7CisgICAgICAgICAgICAgICAgY2FyZXRQb3Np
dGlvbjogMTMsCisgICAgICAgICAgICAgICAgZXhwZWN0ZWRQcmVmaXg6ICIiLAorICAgICAgICAg
ICAgICAgIGV4cGVjdGVkQ29tcGxldGlvbnM6IFsiLS1vbmUiLCAiLS10d28iXSwKKyAgICAgICAg
ICAgIH0pCiAgICAgICAgIH0KICAgICB9KTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>432157</attachid>
            <date>2021-06-24 06:53:00 -0700</date>
            <delta_ts>2021-06-24 07:18:31 -0700</delta_ts>
            <desc>Patch 1.1</desc>
            <filename>bug-227098-20210624155257.patch</filename>
            <type>text/plain</type>
            <size>14091</size>
            <attacher name="Razvan Caliman">rcaliman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDNmODI5MmFjZjQ5ZjE4YjM2MDZmYmQ4ZjgyZDE1
MWU5MjQ3ODUyNmMuLjljOTZmOWQ3N2VlN2MxNzEyYjJmMTFlNTY1NzFhMTZhNjNlNDViMmEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDIxLTA2LTIzICBSYXp2
YW4gQ2FsaW1hbiAgPHJjYWxpbWFuQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9y
OiBTdHlsZXM6IHNob3VsZCBhdXRvY29tcGxldGUgYHZhcigpYCBhbmQgYGF0dHIoKWAgdmFsdWVz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcwOTgK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc5NDE4MjQ3PgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBjb21wbGV0aW9uIHN1
Z2dlc3Rpb25zIGluIHRoZSBTdHlsZXMgZGV0YWlscyBzaWRlYmFyIHBhbmVsCisgICAgICAgIGZv
ciBDU1MgVmFyaWFibGVzIGZvciB1c2Ugd2l0aCB2YXIoKSBhbmQgRE9NIG5vZGUgYXR0cmlidXRl
cyBmb3IgdXNlIHdpdGggYXR0cigpLgorCisgICAgICAgICogVXNlckludGVyZmFjZS9Nb2RlbHMv
Q1NTQ29tcGxldGlvbnMuanM6CisgICAgICAgIChXSS5DU1NDb21wbGV0aW9ucy5wcm90b3R5cGUu
YWRkVmFsdWVzKToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01vZGVscy9DU1NLZXl3b3JkQ29t
cGxldGlvbnMuanM6CisgICAgICAgICogVXNlckludGVyZmFjZS9Nb2RlbHMvRE9NTm9kZVN0eWxl
cy5qczoKKyAgICAgICAgKFdJLkRPTU5vZGVTdHlsZXMpOgorICAgICAgICAoV0kuRE9NTm9kZVN0
eWxlcy5wcm90b3R5cGUuZ2V0IGFsbENTU1ZhcmlhYmxlcyk6CisgICAgICAgIChXSS5ET01Ob2Rl
U3R5bGVzLnByb3RvdHlwZS5fdXBkYXRlU3R5bGVDYXNjYWRlKToKKyAgICAgICAgKFdJLkRPTU5v
ZGVTdHlsZXMucHJvdG90eXBlLl9jb2xsZWN0Q1NTVmFyaWFibGVzKToKKyAgICAgICAgKiBVc2Vy
SW50ZXJmYWNlL1ZpZXdzL1NwcmVhZHNoZWV0U3R5bGVQcm9wZXJ0eS5qczoKKyAgICAgICAgKFdJ
LlNwcmVhZHNoZWV0U3R5bGVQcm9wZXJ0eS5wcm90b3R5cGUuZ2V0RnVuY3Rpb25WYWx1ZUNvbXBs
ZXRpb25zKToKKyAgICAgICAgKFdJLlNwcmVhZHNoZWV0U3R5bGVQcm9wZXJ0eS5wcm90b3R5cGUu
X3ZhbHVlQ29tcGxldGlvbkRhdGFQcm92aWRlcik6CisKIDIwMjEtMDYtMjMgIFBhdHJpY2sgQW5n
bGUgIDxwYW5nbGVAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFN0eWxlczog
QXV0b2NvbXBsZXRlIHNob3VsZCBzdXBwb3J0IG1pZC1saW5lIGNvbXBsZXRpb25zIGFuZCBmdW5j
dGlvbiBjb21wbGV0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvTW9kZWxzL0NTU0NvbXBsZXRpb25zLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvTW9kZWxzL0NTU0NvbXBsZXRpb25zLmpzCmluZGV4IDVjMTg3N2VmY2M0
OTM5YTkxYjQ4MjAzYWZjNDcyODVlMTRjZjdmMjYuLjI4ZWU0ZjFkOTllNzc5NmYyOTJiNjk3OTdi
N2JhMGNiZjMyZDZjYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL01vZGVscy9DU1NDb21wbGV0aW9ucy5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9Nb2RlbHMvQ1NTQ29tcGxldGlvbnMuanMKQEAgLTI2MSw2ICsyNjEs
MTMgQEAgV0kuQ1NTQ29tcGxldGlvbnMgPSBjbGFzcyBDU1NDb21wbGV0aW9ucwogICAgICAgICBy
ZXR1cm4gdGhpcy5fdmFsdWVzOwogICAgIH0KIAorICAgIGFkZFZhbHVlcyh2YWx1ZXMpCisgICAg
eworICAgICAgICBjb25zb2xlLmFzc2VydChBcnJheS5pc0FycmF5KHZhbHVlcyksICJFeHBlY3Rl
ZCBhcnJheSBvZiB2YWx1ZXMgZm9yIGFkZGl0aW9uYWwgY29tcGxldGlvbiBzdWdnZXN0aW9ucyIp
OworICAgICAgICB0aGlzLl92YWx1ZXMgPSB0aGlzLl92YWx1ZXMuY29uY2F0KHZhbHVlcyk7Cisg
ICAgICAgIHRoaXMuX3ZhbHVlcy5zb3J0KCk7CisgICAgfQorCiAgICAgc3RhcnRzV2l0aChwcmVm
aXgpCiAgICAgewogICAgICAgICBpZiAoIXByZWZpeCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9DU1NLZXl3b3JkQ29tcGxldGlvbnMuanMg
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvQ1NTS2V5d29yZENv
bXBsZXRpb25zLmpzCmluZGV4IGU3MzAxOTVhOWU4OTQyZGU2NDk2NGE0YjllNzIyYTZkOGUwOTY3
MGUuLjIzNTNkOWZhMjBhMzIyYTFmYjM5ZjY2ZTE4YThiZDg0ZGEwYTNiNmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9DU1NLZXl3b3JkQ29t
cGxldGlvbnMuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9k
ZWxzL0NTU0tleXdvcmRDb21wbGV0aW9ucy5qcwpAQCAtNDgsNyArNDgsNyBAQCBXSS5DU1NLZXl3
b3JkQ29tcGxldGlvbnMuZm9yUGFydGlhbFByb3BlcnR5TmFtZSA9IGZ1bmN0aW9uKHRleHQsIHtj
YXJldFBvc2l0aW9uLAogICAgIHJldHVybiB7cHJlZml4OiB0ZXh0LCBjb21wbGV0aW9uc307CiB9
OwogCi1XSS5DU1NLZXl3b3JkQ29tcGxldGlvbnMuZm9yUGFydGlhbFByb3BlcnR5VmFsdWUgPSBm
dW5jdGlvbih0ZXh0LCBwcm9wZXJ0eU5hbWUsIHtjYXJldFBvc2l0aW9ufSA9IHt9KQorV0kuQ1NT
S2V5d29yZENvbXBsZXRpb25zLmZvclBhcnRpYWxQcm9wZXJ0eVZhbHVlID0gZnVuY3Rpb24odGV4
dCwgcHJvcGVydHlOYW1lLCB7Y2FyZXRQb3NpdGlvbiwgYWRkaXRpb25hbEZ1bmN0aW9uVmFsdWVD
b21wbGV0aW9uc1Byb3ZpZGVyfSA9IHt9KQogewogICAgIGNhcmV0UG9zaXRpb24gPz89IHRleHQu
bGVuZ3RoOwogCkBAIC0xMTUsOSArMTE1LDEzIEBAIFdJLkNTU0tleXdvcmRDb21wbGV0aW9ucy5m
b3JQYXJ0aWFsUHJvcGVydHlWYWx1ZSA9IGZ1bmN0aW9uKHRleHQsIHByb3BlcnR5TmFtZSwKICAg
ICAgICAgfQogICAgIH0KIAotICAgIC8vIEZJWE1FOiA8d2Via2l0Lm9yZy9iLzIyNzA5OD4gU3R5
bGVzIHNpZGViYXIgcGFuZWwgc2hvdWxkIGF1dG9jb21wbGV0ZSBgdmFyKClgIHZhbHVlcy4KLSAg
ICBpZiAoZnVuY3Rpb25OYW1lKQotICAgICAgICByZXR1cm4ge3ByZWZpeDogY3VycmVudFRva2Vu
VmFsdWUsIGNvbXBsZXRpb25zOiBXSS5DU1NLZXl3b3JkQ29tcGxldGlvbnMuZm9yRnVuY3Rpb24o
ZnVuY3Rpb25OYW1lKS5zdGFydHNXaXRoKGN1cnJlbnRUb2tlblZhbHVlKX07CisgICAgaWYgKGZ1
bmN0aW9uTmFtZSkgeworICAgICAgICBsZXQgY29tcGxldGlvbnMgPSBXSS5DU1NLZXl3b3JkQ29t
cGxldGlvbnMuZm9yRnVuY3Rpb24oZnVuY3Rpb25OYW1lKTsKKyAgICAgICAgbGV0IGNvbnRleHR1
YWxWYWx1ZUNvbXBsZXRpb25zID0gYWRkaXRpb25hbEZ1bmN0aW9uVmFsdWVDb21wbGV0aW9uc1By
b3ZpZGVyPy4oZnVuY3Rpb25OYW1lKSB8fCBbXTsKKyAgICAgICAgY29tcGxldGlvbnMuYWRkVmFs
dWVzKGNvbnRleHR1YWxWYWx1ZUNvbXBsZXRpb25zKTsKKworICAgICAgICByZXR1cm4ge3ByZWZp
eDogY3VycmVudFRva2VuVmFsdWUsIGNvbXBsZXRpb25zOiBjb21wbGV0aW9ucy5zdGFydHNXaXRo
KGN1cnJlbnRUb2tlblZhbHVlKX07CisgICAgfQogCiAgICAgcmV0dXJuIHtwcmVmaXg6IGN1cnJl
bnRUb2tlblZhbHVlLCBjb21wbGV0aW9uczogV0kuQ1NTS2V5d29yZENvbXBsZXRpb25zLmZvclBy
b3BlcnR5KHByb3BlcnR5TmFtZSkuc3RhcnRzV2l0aChjdXJyZW50VG9rZW5WYWx1ZSl9OwogfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9E
T01Ob2RlU3R5bGVzLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9k
ZWxzL0RPTU5vZGVTdHlsZXMuanMKaW5kZXggZGQwMGU0OTVlMDcyNGE1NzNkODhlYTU5MDI3MjVk
YjY4YzIzZmEwYS4uY2U4ZWNmOGVlMWY3OTExNmFlMDY3NjQyYTcxZmJjZjg1NGRmZmJmYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0RPTU5v
ZGVTdHlsZXMuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9k
ZWxzL0RPTU5vZGVTdHlsZXMuanMKQEAgLTQ3LDYgKzQ3LDcgQEAgV0kuRE9NTm9kZVN0eWxlcyA9
IGNsYXNzIERPTU5vZGVTdHlsZXMgZXh0ZW5kcyBXSS5PYmplY3QKIAogICAgICAgICB0aGlzLl9w
cm9wZXJ0eU5hbWVUb0VmZmVjdGl2ZVByb3BlcnR5TWFwID0ge307CiAgICAgICAgIHRoaXMuX3Vz
ZWRDU1NWYXJpYWJsZXMgPSBuZXcgU2V0OworICAgICAgICB0aGlzLl9hbGxDU1NWYXJpYWJsZXMg
PSBuZXcgU2V0OwogCiAgICAgICAgIHRoaXMuX3BlbmRpbmdSZWZyZXNoVGFzayA9IG51bGw7CiAg
ICAgICAgIHRoaXMucmVmcmVzaCgpOwpAQCAtMTMxLDYgKzEzMiw3IEBAIFdJLkRPTU5vZGVTdHls
ZXMgPSBjbGFzcyBET01Ob2RlU3R5bGVzIGV4dGVuZHMgV0kuT2JqZWN0CiAgICAgZ2V0IG9yZGVy
ZWRTdHlsZXMoKSB7IHJldHVybiB0aGlzLl9vcmRlcmVkU3R5bGVzOyB9CiAgICAgZ2V0IGNvbXB1
dGVkUHJpbWFyeUZvbnQoKSB7IHJldHVybiB0aGlzLl9jb21wdXRlZFByaW1hcnlGb250OyB9CiAg
ICAgZ2V0IHVzZWRDU1NWYXJpYWJsZXMoKSB7IHJldHVybiB0aGlzLl91c2VkQ1NTVmFyaWFibGVz
OyB9CisgICAgZ2V0IGFsbENTU1ZhcmlhYmxlcygpIHsgcmV0dXJuIHRoaXMuX2FsbENTU1Zhcmlh
YmxlczsgfQogCiAgICAgZ2V0IG5lZWRzUmVmcmVzaCgpCiAgICAgewpAQCAtNzY5LDcgKzc3MSw3
IEBAIFdJLkRPTU5vZGVTdHlsZXMgPSBjbGFzcyBET01Ob2RlU3R5bGVzIGV4dGVuZHMgV0kuT2Jq
ZWN0CiAKICAgICAgICAgdGhpcy5fYXNzb2NpYXRlUmVsYXRlZFByb3BlcnRpZXMoY2FzY2FkZU9y
ZGVyZWRTdHlsZURlY2xhcmF0aW9ucywgdGhpcy5fcHJvcGVydHlOYW1lVG9FZmZlY3RpdmVQcm9w
ZXJ0eU1hcCk7CiAgICAgICAgIHRoaXMuX21hcmtPdmVycmlkZGVuUHJvcGVydGllcyhjYXNjYWRl
T3JkZXJlZFN0eWxlRGVjbGFyYXRpb25zLCB0aGlzLl9wcm9wZXJ0eU5hbWVUb0VmZmVjdGl2ZVBy
b3BlcnR5TWFwKTsKLSAgICAgICAgdGhpcy5fY29sbGVjdFVzZWRDU1NWYXJpYWJsZXMoY2FzY2Fk
ZU9yZGVyZWRTdHlsZURlY2xhcmF0aW9ucyk7CisgICAgICAgIHRoaXMuX2NvbGxlY3RDU1NWYXJp
YWJsZXMoY2FzY2FkZU9yZGVyZWRTdHlsZURlY2xhcmF0aW9ucyk7CiAKICAgICAgICAgZm9yIChs
ZXQgcHNldWRvRWxlbWVudEluZm8gb2YgdGhpcy5fcHNldWRvRWxlbWVudHMudmFsdWVzKCkpIHsK
ICAgICAgICAgICAgIHBzZXVkb0VsZW1lbnRJbmZvLm9yZGVyZWRTdHlsZXMgPSB0aGlzLl9jb2xs
ZWN0U3R5bGVzSW5DYXNjYWRlT3JkZXIocHNldWRvRWxlbWVudEluZm8ubWF0Y2hlZFJ1bGVzLCBu
dWxsLCBudWxsKTsKQEAgLTk0NSwxMiArOTQ3LDE2IEBAIFdJLkRPTU5vZGVTdHlsZXMgPSBjbGFz
cyBET01Ob2RlU3R5bGVzIGV4dGVuZHMgV0kuT2JqZWN0CiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBfY29sbGVjdFVzZWRDU1NWYXJpYWJsZXMoc3R5bGVzKQorICAgIF9jb2xsZWN0Q1NTVmFyaWFi
bGVzKHN0eWxlcykKICAgICB7CisgICAgICAgIHRoaXMuX2FsbENTU1ZhcmlhYmxlcyA9IG5ldyBT
ZXQ7CiAgICAgICAgIHRoaXMuX3VzZWRDU1NWYXJpYWJsZXMgPSBuZXcgU2V0OwogCiAgICAgICAg
IGZvciAobGV0IHN0eWxlIG9mIHN0eWxlcykgewogICAgICAgICAgICAgZm9yIChsZXQgcHJvcGVy
dHkgb2Ygc3R5bGUuZW5hYmxlZFByb3BlcnRpZXMpIHsKKyAgICAgICAgICAgICAgICBpZiAocHJv
cGVydHkuaXNWYXJpYWJsZSkKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWxsQ1NTVmFyaWFi
bGVzLmFkZChwcm9wZXJ0eS5uYW1lKTsKKwogICAgICAgICAgICAgICAgIGxldCB2YXJpYWJsZXMg
PSBXSS5DU1NQcm9wZXJ0eS5maW5kVmFyaWFibGVOYW1lcyhwcm9wZXJ0eS52YWx1ZSk7CiAKICAg
ICAgICAgICAgICAgICBpZiAoIXN0eWxlLmluaGVyaXRlZCkgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU3ByZWFkc2hlZXRTdHlsZVByb3Bl
cnR5LmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU3ByZWFk
c2hlZXRTdHlsZVByb3BlcnR5LmpzCmluZGV4IDAwMGVkYjhjZTU3MmY2ZWNmMTE0ZjRlMmU1OTMw
MmMyODEzNzRjYTguLmUyMmY5OTg1Njc4NTAwNDQ2ZTAzMjI1MWQ0YTYxMmUzY2VmODIyMTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NwcmVh
ZHNoZWV0U3R5bGVQcm9wZXJ0eS5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9WaWV3cy9TcHJlYWRzaGVldFN0eWxlUHJvcGVydHkuanMKQEAgLTMzOSw2ICszMzks
MTcgQEAgV0kuU3ByZWFkc2hlZXRTdHlsZVByb3BlcnR5ID0gY2xhc3MgU3ByZWFkc2hlZXRTdHls
ZVByb3BlcnR5IGV4dGVuZHMgV0kuT2JqZWN0CiAgICAgICAgIHJldHVybiBtYXRjaGVzOwogICAg
IH0KIAorICAgIGFkZGl0aW9uYWxGdW5jdGlvblZhbHVlQ29tcGxldGlvbnNQcm92aWRlcihmdW5j
dGlvbk5hbWUpCisgICAgeworICAgICAgICBpZiAoZnVuY3Rpb25OYW1lID09PSAidmFyIikKKyAg
ICAgICAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuX3Byb3BlcnR5Lm93bmVyU3R5bGUubm9k
ZVN0eWxlcy5hbGxDU1NWYXJpYWJsZXMpOworCisgICAgICAgIGlmIChmdW5jdGlvbk5hbWUgPT09
ICJhdHRyIikKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcm9wZXJ0eS5vd25lclN0eWxlLm5v
ZGUuYXR0cmlidXRlcygpLm1hcCgoYXR0cmlidXRlKSA9PiBhdHRyaWJ1dGUubmFtZSk7CisKKyAg
ICAgICAgcmV0dXJuIFtdOworICAgIH0KKwogICAgIC8vIFNwcmVhZHNoZWV0VGV4dEZpZWxkIGRl
bGVnYXRlCiAKICAgICBzcHJlYWRzaGVldFRleHRGaWVsZFdpbGxTdGFydEVkaXRpbmcodGV4dEZp
ZWxkKQpAQCAtOTEyLDggKzkyMyw3IEBAIFdJLlNwcmVhZHNoZWV0U3R5bGVQcm9wZXJ0eSA9IGNs
YXNzIFNwcmVhZHNoZWV0U3R5bGVQcm9wZXJ0eSBleHRlbmRzIFdJLk9iamVjdAogCiAgICAgX3Zh
bHVlQ29tcGxldGlvbkRhdGFQcm92aWRlcih0ZXh0LCB7Y2FyZXRQb3NpdGlvbiwgYWxsb3dFbXB0
eVByZWZpeH0gPSB7fSkKICAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiA8d2Via2l0Lm9yZy9iLzIy
NzA5OD4gU3R5bGVzIHNpZGViYXIgcGFuZWwgc2hvdWxkIGF1dG9jb21wbGV0ZSBgdmFyKClgIHZh
bHVlcy4KLSAgICAgICAgcmV0dXJuIFdJLkNTU0tleXdvcmRDb21wbGV0aW9ucy5mb3JQYXJ0aWFs
UHJvcGVydHlWYWx1ZSh0ZXh0LCB0aGlzLl9uYW1lRWxlbWVudC50ZXh0Q29udGVudC50cmltKCks
IHtjYXJldFBvc2l0aW9ufSk7CisgICAgICAgIHJldHVybiBXSS5DU1NLZXl3b3JkQ29tcGxldGlv
bnMuZm9yUGFydGlhbFByb3BlcnR5VmFsdWUodGV4dCwgdGhpcy5fbmFtZUVsZW1lbnQudGV4dENv
bnRlbnQudHJpbSgpLCB7Y2FyZXRQb3NpdGlvbiwgYWRkaXRpb25hbEZ1bmN0aW9uVmFsdWVDb21w
bGV0aW9uc1Byb3ZpZGVyOiB0aGlzLmFkZGl0aW9uYWxGdW5jdGlvblZhbHVlQ29tcGxldGlvbnNQ
cm92aWRlci5iaW5kKHRoaXMpfSk7CiAgICAgfQogCiAgICAgX3NldHVwSnVtcFRvU3ltYm9sKGVs
ZW1lbnQpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKaW5kZXggYWE4M2EzY2Q5NWQ3NzM0NTM2MjM1ODc5MDM5ZTFjZDBhMzAzMTVlNi4u
YWU0MjU3YjQ4ZjJiMzdjZGYxMmViMGRkNDdjZmNkMzE3NzQ2ZWQ4OSAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE2IEBACisyMDIxLTA2LTIzICBSYXp2YW4gQ2FsaW1hbiAgPHJjYWxpbWFuQGFwcGxlLmNvbT4K
KworICAgICAgICBXZWIgSW5zcGVjdG9yOiBTdHlsZXM6IHNob3VsZCBhdXRvY29tcGxldGUgYHZh
cigpYCBhbmQgYGF0dHIoKWAgdmFsdWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjcwOTgKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc5NDE4MjQ3
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCB0
ZXN0IGNhc2VzIGZvciBjb250ZXh0dWFsIENTUyBmdW5jdGlvbiB2YWx1ZSBjb21wbGV0aW9uLgor
CisgICAgICAgICogaW5zcGVjdG9yL3VuaXQtdGVzdHMvY3NzLWtleXdvcmQtY29tcGxldGlvbnMt
ZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGluc3BlY3Rvci91bml0LXRlc3RzL2Nzcy1rZXl3b3Jk
LWNvbXBsZXRpb25zLmh0bWw6CisKIDIwMjEtMDYtMjMgIFBhdHJpY2sgQW5nbGUgIDxwYW5nbGVA
YXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFN0eWxlczogQXV0b2NvbXBsZXRl
IHNob3VsZCBzdXBwb3J0IG1pZC1saW5lIGNvbXBsZXRpb25zIGFuZCBmdW5jdGlvbiBjb21wbGV0
aW9ucwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3VuaXQtdGVzdHMvY3NzLWtl
eXdvcmQtY29tcGxldGlvbnMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Vu
aXQtdGVzdHMvY3NzLWtleXdvcmQtY29tcGxldGlvbnMtZXhwZWN0ZWQudHh0CmluZGV4IDJiMjFj
YTg0YThkZjRiN2JkNTEzNzFkYjY1YjdkNzVlZDIyODNjN2EuLmFiNzMxYjRiOWYwYTFiYTAyMmJl
MjU3NzZhOTIyNzliNDA5YTZjZjAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci91
bml0LXRlc3RzL2Nzcy1rZXl3b3JkLWNvbXBsZXRpb25zLWV4cGVjdGVkLnR4dAorKysgYi9MYXlv
dXRUZXN0cy9pbnNwZWN0b3IvdW5pdC10ZXN0cy9jc3Mta2V5d29yZC1jb21wbGV0aW9ucy1leHBl
Y3RlZC50eHQKQEAgLTQxLDQgKzQxLDE5IEBAIFBBU1M6IEFsbCBleHBlY3RlZCBjb21wbGV0aW9u
cyB3ZXJlIHByZXNlbnQuCiAtIFRlc3RpbmcgImdyaWQtdGVtcGxhdGUtY29sdW1uczogW2xpbmVu
YW1lMV0gMTAwcHggcmVwZWF0KCwgW2xpbmVuYW1lMiBsaW5lbmFtZTNdIDE1MHB4KSBbbGluZW5h
bWUzXSAxMDBweCBbbGluZW5hbWU0XSIKIFBBU1M6IEV4cGVjdGVkIHJlc3VsdCBwcmVmaXggdG8g
YmUgIiIKIFBBU1M6IEFsbCBleHBlY3RlZCBjb21wbGV0aW9ucyB3ZXJlIHByZXNlbnQuCistIFRl
c3RpbmcgImNvbnRlbnQ6IGF0dHIoIgorUEFTUzogRXhwZWN0ZWQgcmVzdWx0IHByZWZpeCB0byBi
ZSAiIgorUEFTUzogQWxsIGV4cGVjdGVkIGNvbXBsZXRpb25zIHdlcmUgcHJlc2VudC4KKy0gVGVz
dGluZyAiY29udGVudDogYXR0cihjIgorUEFTUzogRXhwZWN0ZWQgcmVzdWx0IHByZWZpeCB0byBi
ZSAiYyIKK1BBU1M6IEFsbCBleHBlY3RlZCBjb21wbGV0aW9ucyB3ZXJlIHByZXNlbnQuCistIFRl
c3RpbmcgImNvbG9yOiB2YXIoIgorUEFTUzogRXhwZWN0ZWQgcmVzdWx0IHByZWZpeCB0byBiZSAi
IgorUEFTUzogQWxsIGV4cGVjdGVkIGNvbXBsZXRpb25zIHdlcmUgcHJlc2VudC4KKy0gVGVzdGlu
ZyAiY29sb3I6IHZhcigtLW8iCitQQVNTOiBFeHBlY3RlZCByZXN1bHQgcHJlZml4IHRvIGJlICIt
LW8iCitQQVNTOiBBbGwgZXhwZWN0ZWQgY29tcGxldGlvbnMgd2VyZSBwcmVzZW50LgorLSBUZXN0
aW5nICJjb2xvcjogY2FsYygxICsgdmFyKCkpIgorUEFTUzogRXhwZWN0ZWQgcmVzdWx0IHByZWZp
eCB0byBiZSAiIgorUEFTUzogQWxsIGV4cGVjdGVkIGNvbXBsZXRpb25zIHdlcmUgcHJlc2VudC4K
IApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3VuaXQtdGVzdHMvY3NzLWtleXdv
cmQtY29tcGxldGlvbnMuaHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci91bml0LXRlc3RzL2Nz
cy1rZXl3b3JkLWNvbXBsZXRpb25zLmh0bWwKaW5kZXggYjg2NDdkMmMxNWVhMzI5MzFkMDBlZDQ5
NThmMjZiZDQ4MzhkNTcwYS4uYmYwM2IzYTVjNGZhYzU4ODY5NWIxODQ5YmY0MWU3NmMwYjBmYThi
ZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3VuaXQtdGVzdHMvY3NzLWtleXdv
cmQtY29tcGxldGlvbnMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvdW5pdC10ZXN0
cy9jc3Mta2V5d29yZC1jb21wbGV0aW9ucy5odG1sCkBAIC01LDYgKzUsMTcgQEAKIDxzY3JpcHQ+
CiBmdW5jdGlvbiB0ZXN0KCkKIHsKKyAgICAvLyBNb2NrIGZvciBwcm92aWRlciBvZiBjb250ZXh0
dWFsIGZ1bmN0aW9uIHZhbHVlIGNvbXBsZXRpb25zLgorICAgIGNvbnN0IG1vY2tBZGRpdGlvbmFs
RnVuY3Rpb25WYWx1ZUNvbXBsZXRpb25zUHJvdmlkZXIgPSAoZnVuY3Rpb25OYW1lKSA9PiB7Cisg
ICAgICAgIGlmIChmdW5jdGlvbk5hbWUgPT09ICJ2YXIiKQorICAgICAgICAgICAgcmV0dXJuIFsi
LS1vbmUiLCAiLS10d28iXTsKKworICAgICAgICBpZiAoZnVuY3Rpb25OYW1lID09PSAiYXR0ciIp
CisgICAgICAgICAgICByZXR1cm4gWyJjbGFzcyIsICJpZCJdOworCisgICAgICAgIHJldHVybiBb
XTsKKyAgICB9CisKICAgICBsZXQgc3VpdGUgPSBJbnNwZWN0b3JUZXN0LmNyZWF0ZVN5bmNTdWl0
ZSgiQ1NTS2V5d29yZENvbXBsZXRpb25zIik7CiAKICAgICBzdWl0ZS5hZGRUZXN0Q2FzZSh7CkBA
IC02MSwxNCArNzIsMTUgQEAgZnVuY3Rpb24gdGVzdCgpCiAgICAgICAgIG5hbWU6ICJDU1NLZXl3
b3JkQ29tcGxldGlvbnMuZm9yUGFydGlhbFByb3BlcnR5VmFsdWUiLAogICAgICAgICBkZXNjcmlw
dGlvbjogIlRlc3QgZmluZGluZyBrZXl3b3JkIGNvbXBsZXRpb25zIGZvciBwcm92aWRlZCBwYXJ0
aWFsIENTUyBwcm9wZXJ0eSB2YWx1ZXMuIiwKICAgICAgICAgdGVzdCgpIHsKLSAgICAgICAgICAg
IGZ1bmN0aW9uIGNvbXBhcmVFeHBlY3RhdGlvbnModGV4dCwgcHJvcGVydHlOYW1lLCB7Y2FyZXRQ
b3NpdGlvbiwgZXhwZWN0ZWRQcmVmaXgsIGV4cGVjdGVkQ29tcGxldGlvbnN9KSB7CisgICAgICAg
ICAgICBmdW5jdGlvbiBjb21wYXJlRXhwZWN0YXRpb25zKHRleHQsIHByb3BlcnR5TmFtZSwge2Nh
cmV0UG9zaXRpb24sIGV4cGVjdGVkUHJlZml4LCBleHBlY3RlZENvbXBsZXRpb25zLCBhZGRpdGlv
bmFsRnVuY3Rpb25WYWx1ZUNvbXBsZXRpb25zUHJvdmlkZXJ9KSB7CiAgICAgICAgICAgICAgICAg
Y2FyZXRQb3NpdGlvbiA/Pz0gdGV4dC5sZW5ndGg7CiAgICAgICAgICAgICAgICAgZXhwZWN0ZWRQ
cmVmaXggPz89IHRleHQ7CiAgICAgICAgICAgICAgICAgZXhwZWN0ZWRDb21wbGV0aW9ucyA/Pz0g
W107CisgICAgICAgICAgICAgICAgYWRkaXRpb25hbEZ1bmN0aW9uVmFsdWVDb21wbGV0aW9uc1By
b3ZpZGVyID8/PSAoKSA9PiB7fQogCiAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2co
YC0gVGVzdGluZyAiJHtwcm9wZXJ0eU5hbWV9OiAke3RleHR9ImApOwogCi0gICAgICAgICAgICAg
ICAgbGV0IGNvbXBsZXRpb25SZXN1bHRzID0gV0kuQ1NTS2V5d29yZENvbXBsZXRpb25zLmZvclBh
cnRpYWxQcm9wZXJ0eVZhbHVlKHRleHQsIHByb3BlcnR5TmFtZSwge2NhcmV0UG9zaXRpb259KTsK
KyAgICAgICAgICAgICAgICBsZXQgY29tcGxldGlvblJlc3VsdHMgPSBXSS5DU1NLZXl3b3JkQ29t
cGxldGlvbnMuZm9yUGFydGlhbFByb3BlcnR5VmFsdWUodGV4dCwgcHJvcGVydHlOYW1lLCB7Y2Fy
ZXRQb3NpdGlvbiwgYWRkaXRpb25hbEZ1bmN0aW9uVmFsdWVDb21wbGV0aW9uc1Byb3ZpZGVyfSk7
CiAgICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5leHBlY3RFcXVhbChjb21wbGV0aW9uUmVz
dWx0cy5wcmVmaXgsIGV4cGVjdGVkUHJlZml4LCBgRXhwZWN0ZWQgcmVzdWx0IHByZWZpeCB0byBi
ZSAiJHtleHBlY3RlZFByZWZpeH0iYCk7CiAKICAgICAgICAgICAgICAgICAvLyBCZWNhdXNlIGV4
cGVjdGVkIGNvbXBsZXRpb25zIGNvdWxkIGJlIGFkZGVkIGF0IGFueSB0aW1lLCBqdXN0IG1ha2Ug
c3VyZSB0aGUgbGlzdCBjb250YWlucyBvdXIgZXhwZWN0ZWQgY29tcGxldGlvbnMsIGluc3RlYWQg
b2YgZW5mb3JjaW5nIGFuIGV4YWN0IG1hdGNoIGJldHdlZW4gZXhwZWN0YXRpb25zIGFuZCByZWFs
aXR5LgpAQCAtMTMxLDYgKzE0Myw0MyBAQCBmdW5jdGlvbiB0ZXN0KCkKICAgICAgICAgICAgICAg
ICBleHBlY3RlZFByZWZpeDogIiIsCiAgICAgICAgICAgICAgICAgZXhwZWN0ZWRDb21wbGV0aW9u
czogWyJhdXRvLWZpbGwiLCAiYXV0by1maXQiLCAidmFyKCkiXSwKICAgICAgICAgICAgIH0pOwor
CisgICAgICAgICAgICAvLyBgYXR0cih8YAorICAgICAgICAgICAgY29tcGFyZUV4cGVjdGF0aW9u
cygiYXR0cigiLCAiY29udGVudCIsIHsKKyAgICAgICAgICAgICAgICBleHBlY3RlZFByZWZpeDog
IiIsCisgICAgICAgICAgICAgICAgZXhwZWN0ZWRDb21wbGV0aW9uczogWyJjbGFzcyIsICJpZCIs
ICJ2YXIoKSJdLAorICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxGdW5jdGlvblZhbHVlQ29tcGxl
dGlvbnNQcm92aWRlcjogbW9ja0FkZGl0aW9uYWxGdW5jdGlvblZhbHVlQ29tcGxldGlvbnNQcm92
aWRlcgorICAgICAgICAgICAgfSkKKworICAgICAgICAgICAgLy8gYGF0dHIoY3wpYAorICAgICAg
ICAgICAgY29tcGFyZUV4cGVjdGF0aW9ucygiYXR0cihjIiwgImNvbnRlbnQiLCB7CisgICAgICAg
ICAgICAgICAgY2FyZXRQb3NpdGlvbjogNiwKKyAgICAgICAgICAgICAgICBleHBlY3RlZFByZWZp
eDogImMiLAorICAgICAgICAgICAgICAgIGV4cGVjdGVkQ29tcGxldGlvbnM6IFsiY2xhc3MiXSwK
KyAgICAgICAgICAgICAgICBhZGRpdGlvbmFsRnVuY3Rpb25WYWx1ZUNvbXBsZXRpb25zUHJvdmlk
ZXI6IG1vY2tBZGRpdGlvbmFsRnVuY3Rpb25WYWx1ZUNvbXBsZXRpb25zUHJvdmlkZXIKKyAgICAg
ICAgICAgIH0pCisKKyAgICAgICAgICAgIC8vIGB2YXIofGAKKyAgICAgICAgICAgIGNvbXBhcmVF
eHBlY3RhdGlvbnMoInZhcigiLCAiY29sb3IiLCB7CisgICAgICAgICAgICAgICAgZXhwZWN0ZWRQ
cmVmaXg6ICIiLAorICAgICAgICAgICAgICAgIGV4cGVjdGVkQ29tcGxldGlvbnM6IFsiLS1vbmUi
LCAiLS10d28iXSwKKyAgICAgICAgICAgICAgICBhZGRpdGlvbmFsRnVuY3Rpb25WYWx1ZUNvbXBs
ZXRpb25zUHJvdmlkZXI6IG1vY2tBZGRpdGlvbmFsRnVuY3Rpb25WYWx1ZUNvbXBsZXRpb25zUHJv
dmlkZXIKKyAgICAgICAgICAgIH0pCisKKyAgICAgICAgICAgIC8vIGB2YXIoLS1vfGAKKyAgICAg
ICAgICAgIGNvbXBhcmVFeHBlY3RhdGlvbnMoInZhcigtLW8iLCAiY29sb3IiLCB7CisgICAgICAg
ICAgICAgICAgZXhwZWN0ZWRQcmVmaXg6ICItLW8iLAorICAgICAgICAgICAgICAgIGV4cGVjdGVk
Q29tcGxldGlvbnM6IFsiLS1vbmUiXSwKKyAgICAgICAgICAgICAgICBhZGRpdGlvbmFsRnVuY3Rp
b25WYWx1ZUNvbXBsZXRpb25zUHJvdmlkZXI6IG1vY2tBZGRpdGlvbmFsRnVuY3Rpb25WYWx1ZUNv
bXBsZXRpb25zUHJvdmlkZXIKKyAgICAgICAgICAgIH0pCisKKyAgICAgICAgICAgIC8vIGBjYWxj
KDEgKyB2YXIofCkpYAorICAgICAgICAgICAgY29tcGFyZUV4cGVjdGF0aW9ucygiY2FsYygxICsg
dmFyKCkpIiwgImNvbG9yIiwgeworICAgICAgICAgICAgICAgIGNhcmV0UG9zaXRpb246IDEzLAor
ICAgICAgICAgICAgICAgIGV4cGVjdGVkUHJlZml4OiAiIiwKKyAgICAgICAgICAgICAgICBleHBl
Y3RlZENvbXBsZXRpb25zOiBbIi0tb25lIiwgIi0tdHdvIl0sCisgICAgICAgICAgICAgICAgYWRk
aXRpb25hbEZ1bmN0aW9uVmFsdWVDb21wbGV0aW9uc1Byb3ZpZGVyOiBtb2NrQWRkaXRpb25hbEZ1
bmN0aW9uVmFsdWVDb21wbGV0aW9uc1Byb3ZpZGVyCisgICAgICAgICAgICB9KQogICAgICAgICB9
CiAgICAgfSk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>432158</attachid>
            <date>2021-06-24 07:18:35 -0700</date>
            <delta_ts>2021-07-01 08:18:21 -0700</delta_ts>
            <desc>Patch 1.2</desc>
            <filename>bug-227098-20210624161831.patch</filename>
            <type>text/plain</type>
            <size>13555</size>
            <attacher name="Razvan Caliman">rcaliman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDNmODI5MmFjZjQ5ZjE4YjM2MDZmYmQ4ZjgyZDE1
MWU5MjQ3ODUyNmMuLjljOTZmOWQ3N2VlN2MxNzEyYjJmMTFlNTY1NzFhMTZhNjNlNDViMmEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDIxLTA2LTIzICBSYXp2
YW4gQ2FsaW1hbiAgPHJjYWxpbWFuQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9y
OiBTdHlsZXM6IHNob3VsZCBhdXRvY29tcGxldGUgYHZhcigpYCBhbmQgYGF0dHIoKWAgdmFsdWVz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcwOTgK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc5NDE4MjQ3PgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBjb21wbGV0aW9uIHN1
Z2dlc3Rpb25zIGluIHRoZSBTdHlsZXMgZGV0YWlscyBzaWRlYmFyIHBhbmVsCisgICAgICAgIGZv
ciBDU1MgVmFyaWFibGVzIGZvciB1c2Ugd2l0aCB2YXIoKSBhbmQgRE9NIG5vZGUgYXR0cmlidXRl
cyBmb3IgdXNlIHdpdGggYXR0cigpLgorCisgICAgICAgICogVXNlckludGVyZmFjZS9Nb2RlbHMv
Q1NTQ29tcGxldGlvbnMuanM6CisgICAgICAgIChXSS5DU1NDb21wbGV0aW9ucy5wcm90b3R5cGUu
YWRkVmFsdWVzKToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01vZGVscy9DU1NLZXl3b3JkQ29t
cGxldGlvbnMuanM6CisgICAgICAgICogVXNlckludGVyZmFjZS9Nb2RlbHMvRE9NTm9kZVN0eWxl
cy5qczoKKyAgICAgICAgKFdJLkRPTU5vZGVTdHlsZXMpOgorICAgICAgICAoV0kuRE9NTm9kZVN0
eWxlcy5wcm90b3R5cGUuZ2V0IGFsbENTU1ZhcmlhYmxlcyk6CisgICAgICAgIChXSS5ET01Ob2Rl
U3R5bGVzLnByb3RvdHlwZS5fdXBkYXRlU3R5bGVDYXNjYWRlKToKKyAgICAgICAgKFdJLkRPTU5v
ZGVTdHlsZXMucHJvdG90eXBlLl9jb2xsZWN0Q1NTVmFyaWFibGVzKToKKyAgICAgICAgKiBVc2Vy
SW50ZXJmYWNlL1ZpZXdzL1NwcmVhZHNoZWV0U3R5bGVQcm9wZXJ0eS5qczoKKyAgICAgICAgKFdJ
LlNwcmVhZHNoZWV0U3R5bGVQcm9wZXJ0eS5wcm90b3R5cGUuZ2V0RnVuY3Rpb25WYWx1ZUNvbXBs
ZXRpb25zKToKKyAgICAgICAgKFdJLlNwcmVhZHNoZWV0U3R5bGVQcm9wZXJ0eS5wcm90b3R5cGUu
X3ZhbHVlQ29tcGxldGlvbkRhdGFQcm92aWRlcik6CisKIDIwMjEtMDYtMjMgIFBhdHJpY2sgQW5n
bGUgIDxwYW5nbGVAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFN0eWxlczog
QXV0b2NvbXBsZXRlIHNob3VsZCBzdXBwb3J0IG1pZC1saW5lIGNvbXBsZXRpb25zIGFuZCBmdW5j
dGlvbiBjb21wbGV0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvTW9kZWxzL0NTU0NvbXBsZXRpb25zLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvTW9kZWxzL0NTU0NvbXBsZXRpb25zLmpzCmluZGV4IDVjMTg3N2VmY2M0
OTM5YTkxYjQ4MjAzYWZjNDcyODVlMTRjZjdmMjYuLjI4ZWU0ZjFkOTllNzc5NmYyOTJiNjk3OTdi
N2JhMGNiZjMyZDZjYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL01vZGVscy9DU1NDb21wbGV0aW9ucy5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9Nb2RlbHMvQ1NTQ29tcGxldGlvbnMuanMKQEAgLTI2MSw2ICsyNjEs
MTMgQEAgV0kuQ1NTQ29tcGxldGlvbnMgPSBjbGFzcyBDU1NDb21wbGV0aW9ucwogICAgICAgICBy
ZXR1cm4gdGhpcy5fdmFsdWVzOwogICAgIH0KIAorICAgIGFkZFZhbHVlcyh2YWx1ZXMpCisgICAg
eworICAgICAgICBjb25zb2xlLmFzc2VydChBcnJheS5pc0FycmF5KHZhbHVlcyksICJFeHBlY3Rl
ZCBhcnJheSBvZiB2YWx1ZXMgZm9yIGFkZGl0aW9uYWwgY29tcGxldGlvbiBzdWdnZXN0aW9ucyIp
OworICAgICAgICB0aGlzLl92YWx1ZXMgPSB0aGlzLl92YWx1ZXMuY29uY2F0KHZhbHVlcyk7Cisg
ICAgICAgIHRoaXMuX3ZhbHVlcy5zb3J0KCk7CisgICAgfQorCiAgICAgc3RhcnRzV2l0aChwcmVm
aXgpCiAgICAgewogICAgICAgICBpZiAoIXByZWZpeCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9DU1NLZXl3b3JkQ29tcGxldGlvbnMuanMg
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvQ1NTS2V5d29yZENv
bXBsZXRpb25zLmpzCmluZGV4IGU3MzAxOTVhOWU4OTQyZGU2NDk2NGE0YjllNzIyYTZkOGUwOTY3
MGUuLjIzNTNkOWZhMjBhMzIyYTFmYjM5ZjY2ZTE4YThiZDg0ZGEwYTNiNmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9DU1NLZXl3b3JkQ29t
cGxldGlvbnMuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9k
ZWxzL0NTU0tleXdvcmRDb21wbGV0aW9ucy5qcwpAQCAtNDgsNyArNDgsNyBAQCBXSS5DU1NLZXl3
b3JkQ29tcGxldGlvbnMuZm9yUGFydGlhbFByb3BlcnR5TmFtZSA9IGZ1bmN0aW9uKHRleHQsIHtj
YXJldFBvc2l0aW9uLAogICAgIHJldHVybiB7cHJlZml4OiB0ZXh0LCBjb21wbGV0aW9uc307CiB9
OwogCi1XSS5DU1NLZXl3b3JkQ29tcGxldGlvbnMuZm9yUGFydGlhbFByb3BlcnR5VmFsdWUgPSBm
dW5jdGlvbih0ZXh0LCBwcm9wZXJ0eU5hbWUsIHtjYXJldFBvc2l0aW9ufSA9IHt9KQorV0kuQ1NT
S2V5d29yZENvbXBsZXRpb25zLmZvclBhcnRpYWxQcm9wZXJ0eVZhbHVlID0gZnVuY3Rpb24odGV4
dCwgcHJvcGVydHlOYW1lLCB7Y2FyZXRQb3NpdGlvbiwgYWRkaXRpb25hbEZ1bmN0aW9uVmFsdWVD
b21wbGV0aW9uc1Byb3ZpZGVyfSA9IHt9KQogewogICAgIGNhcmV0UG9zaXRpb24gPz89IHRleHQu
bGVuZ3RoOwogCkBAIC0xMTUsOSArMTE1LDEzIEBAIFdJLkNTU0tleXdvcmRDb21wbGV0aW9ucy5m
b3JQYXJ0aWFsUHJvcGVydHlWYWx1ZSA9IGZ1bmN0aW9uKHRleHQsIHByb3BlcnR5TmFtZSwKICAg
ICAgICAgfQogICAgIH0KIAotICAgIC8vIEZJWE1FOiA8d2Via2l0Lm9yZy9iLzIyNzA5OD4gU3R5
bGVzIHNpZGViYXIgcGFuZWwgc2hvdWxkIGF1dG9jb21wbGV0ZSBgdmFyKClgIHZhbHVlcy4KLSAg
ICBpZiAoZnVuY3Rpb25OYW1lKQotICAgICAgICByZXR1cm4ge3ByZWZpeDogY3VycmVudFRva2Vu
VmFsdWUsIGNvbXBsZXRpb25zOiBXSS5DU1NLZXl3b3JkQ29tcGxldGlvbnMuZm9yRnVuY3Rpb24o
ZnVuY3Rpb25OYW1lKS5zdGFydHNXaXRoKGN1cnJlbnRUb2tlblZhbHVlKX07CisgICAgaWYgKGZ1
bmN0aW9uTmFtZSkgeworICAgICAgICBsZXQgY29tcGxldGlvbnMgPSBXSS5DU1NLZXl3b3JkQ29t
cGxldGlvbnMuZm9yRnVuY3Rpb24oZnVuY3Rpb25OYW1lKTsKKyAgICAgICAgbGV0IGNvbnRleHR1
YWxWYWx1ZUNvbXBsZXRpb25zID0gYWRkaXRpb25hbEZ1bmN0aW9uVmFsdWVDb21wbGV0aW9uc1By
b3ZpZGVyPy4oZnVuY3Rpb25OYW1lKSB8fCBbXTsKKyAgICAgICAgY29tcGxldGlvbnMuYWRkVmFs
dWVzKGNvbnRleHR1YWxWYWx1ZUNvbXBsZXRpb25zKTsKKworICAgICAgICByZXR1cm4ge3ByZWZp
eDogY3VycmVudFRva2VuVmFsdWUsIGNvbXBsZXRpb25zOiBjb21wbGV0aW9ucy5zdGFydHNXaXRo
KGN1cnJlbnRUb2tlblZhbHVlKX07CisgICAgfQogCiAgICAgcmV0dXJuIHtwcmVmaXg6IGN1cnJl
bnRUb2tlblZhbHVlLCBjb21wbGV0aW9uczogV0kuQ1NTS2V5d29yZENvbXBsZXRpb25zLmZvclBy
b3BlcnR5KHByb3BlcnR5TmFtZSkuc3RhcnRzV2l0aChjdXJyZW50VG9rZW5WYWx1ZSl9OwogfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9E
T01Ob2RlU3R5bGVzLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9k
ZWxzL0RPTU5vZGVTdHlsZXMuanMKaW5kZXggZGQwMGU0OTVlMDcyNGE1NzNkODhlYTU5MDI3MjVk
YjY4YzIzZmEwYS4uY2U4ZWNmOGVlMWY3OTExNmFlMDY3NjQyYTcxZmJjZjg1NGRmZmJmYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0RPTU5v
ZGVTdHlsZXMuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9k
ZWxzL0RPTU5vZGVTdHlsZXMuanMKQEAgLTQ3LDYgKzQ3LDcgQEAgV0kuRE9NTm9kZVN0eWxlcyA9
IGNsYXNzIERPTU5vZGVTdHlsZXMgZXh0ZW5kcyBXSS5PYmplY3QKIAogICAgICAgICB0aGlzLl9w
cm9wZXJ0eU5hbWVUb0VmZmVjdGl2ZVByb3BlcnR5TWFwID0ge307CiAgICAgICAgIHRoaXMuX3Vz
ZWRDU1NWYXJpYWJsZXMgPSBuZXcgU2V0OworICAgICAgICB0aGlzLl9hbGxDU1NWYXJpYWJsZXMg
PSBuZXcgU2V0OwogCiAgICAgICAgIHRoaXMuX3BlbmRpbmdSZWZyZXNoVGFzayA9IG51bGw7CiAg
ICAgICAgIHRoaXMucmVmcmVzaCgpOwpAQCAtMTMxLDYgKzEzMiw3IEBAIFdJLkRPTU5vZGVTdHls
ZXMgPSBjbGFzcyBET01Ob2RlU3R5bGVzIGV4dGVuZHMgV0kuT2JqZWN0CiAgICAgZ2V0IG9yZGVy
ZWRTdHlsZXMoKSB7IHJldHVybiB0aGlzLl9vcmRlcmVkU3R5bGVzOyB9CiAgICAgZ2V0IGNvbXB1
dGVkUHJpbWFyeUZvbnQoKSB7IHJldHVybiB0aGlzLl9jb21wdXRlZFByaW1hcnlGb250OyB9CiAg
ICAgZ2V0IHVzZWRDU1NWYXJpYWJsZXMoKSB7IHJldHVybiB0aGlzLl91c2VkQ1NTVmFyaWFibGVz
OyB9CisgICAgZ2V0IGFsbENTU1ZhcmlhYmxlcygpIHsgcmV0dXJuIHRoaXMuX2FsbENTU1Zhcmlh
YmxlczsgfQogCiAgICAgZ2V0IG5lZWRzUmVmcmVzaCgpCiAgICAgewpAQCAtNzY5LDcgKzc3MSw3
IEBAIFdJLkRPTU5vZGVTdHlsZXMgPSBjbGFzcyBET01Ob2RlU3R5bGVzIGV4dGVuZHMgV0kuT2Jq
ZWN0CiAKICAgICAgICAgdGhpcy5fYXNzb2NpYXRlUmVsYXRlZFByb3BlcnRpZXMoY2FzY2FkZU9y
ZGVyZWRTdHlsZURlY2xhcmF0aW9ucywgdGhpcy5fcHJvcGVydHlOYW1lVG9FZmZlY3RpdmVQcm9w
ZXJ0eU1hcCk7CiAgICAgICAgIHRoaXMuX21hcmtPdmVycmlkZGVuUHJvcGVydGllcyhjYXNjYWRl
T3JkZXJlZFN0eWxlRGVjbGFyYXRpb25zLCB0aGlzLl9wcm9wZXJ0eU5hbWVUb0VmZmVjdGl2ZVBy
b3BlcnR5TWFwKTsKLSAgICAgICAgdGhpcy5fY29sbGVjdFVzZWRDU1NWYXJpYWJsZXMoY2FzY2Fk
ZU9yZGVyZWRTdHlsZURlY2xhcmF0aW9ucyk7CisgICAgICAgIHRoaXMuX2NvbGxlY3RDU1NWYXJp
YWJsZXMoY2FzY2FkZU9yZGVyZWRTdHlsZURlY2xhcmF0aW9ucyk7CiAKICAgICAgICAgZm9yIChs
ZXQgcHNldWRvRWxlbWVudEluZm8gb2YgdGhpcy5fcHNldWRvRWxlbWVudHMudmFsdWVzKCkpIHsK
ICAgICAgICAgICAgIHBzZXVkb0VsZW1lbnRJbmZvLm9yZGVyZWRTdHlsZXMgPSB0aGlzLl9jb2xs
ZWN0U3R5bGVzSW5DYXNjYWRlT3JkZXIocHNldWRvRWxlbWVudEluZm8ubWF0Y2hlZFJ1bGVzLCBu
dWxsLCBudWxsKTsKQEAgLTk0NSwxMiArOTQ3LDE2IEBAIFdJLkRPTU5vZGVTdHlsZXMgPSBjbGFz
cyBET01Ob2RlU3R5bGVzIGV4dGVuZHMgV0kuT2JqZWN0CiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBfY29sbGVjdFVzZWRDU1NWYXJpYWJsZXMoc3R5bGVzKQorICAgIF9jb2xsZWN0Q1NTVmFyaWFi
bGVzKHN0eWxlcykKICAgICB7CisgICAgICAgIHRoaXMuX2FsbENTU1ZhcmlhYmxlcyA9IG5ldyBT
ZXQ7CiAgICAgICAgIHRoaXMuX3VzZWRDU1NWYXJpYWJsZXMgPSBuZXcgU2V0OwogCiAgICAgICAg
IGZvciAobGV0IHN0eWxlIG9mIHN0eWxlcykgewogICAgICAgICAgICAgZm9yIChsZXQgcHJvcGVy
dHkgb2Ygc3R5bGUuZW5hYmxlZFByb3BlcnRpZXMpIHsKKyAgICAgICAgICAgICAgICBpZiAocHJv
cGVydHkuaXNWYXJpYWJsZSkKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWxsQ1NTVmFyaWFi
bGVzLmFkZChwcm9wZXJ0eS5uYW1lKTsKKwogICAgICAgICAgICAgICAgIGxldCB2YXJpYWJsZXMg
PSBXSS5DU1NQcm9wZXJ0eS5maW5kVmFyaWFibGVOYW1lcyhwcm9wZXJ0eS52YWx1ZSk7CiAKICAg
ICAgICAgICAgICAgICBpZiAoIXN0eWxlLmluaGVyaXRlZCkgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU3ByZWFkc2hlZXRTdHlsZVByb3Bl
cnR5LmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU3ByZWFk
c2hlZXRTdHlsZVByb3BlcnR5LmpzCmluZGV4IDAwMGVkYjhjZTU3MmY2ZWNmMTE0ZjRlMmU1OTMw
MmMyODEzNzRjYTguLmUyMmY5OTg1Njc4NTAwNDQ2ZTAzMjI1MWQ0YTYxMmUzY2VmODIyMTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NwcmVh
ZHNoZWV0U3R5bGVQcm9wZXJ0eS5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9WaWV3cy9TcHJlYWRzaGVldFN0eWxlUHJvcGVydHkuanMKQEAgLTMzOSw2ICszMzks
MTcgQEAgV0kuU3ByZWFkc2hlZXRTdHlsZVByb3BlcnR5ID0gY2xhc3MgU3ByZWFkc2hlZXRTdHls
ZVByb3BlcnR5IGV4dGVuZHMgV0kuT2JqZWN0CiAgICAgICAgIHJldHVybiBtYXRjaGVzOwogICAg
IH0KIAorICAgIGFkZGl0aW9uYWxGdW5jdGlvblZhbHVlQ29tcGxldGlvbnNQcm92aWRlcihmdW5j
dGlvbk5hbWUpCisgICAgeworICAgICAgICBpZiAoZnVuY3Rpb25OYW1lID09PSAidmFyIikKKyAg
ICAgICAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuX3Byb3BlcnR5Lm93bmVyU3R5bGUubm9k
ZVN0eWxlcy5hbGxDU1NWYXJpYWJsZXMpOworCisgICAgICAgIGlmIChmdW5jdGlvbk5hbWUgPT09
ICJhdHRyIikKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcm9wZXJ0eS5vd25lclN0eWxlLm5v
ZGUuYXR0cmlidXRlcygpLm1hcCgoYXR0cmlidXRlKSA9PiBhdHRyaWJ1dGUubmFtZSk7CisKKyAg
ICAgICAgcmV0dXJuIFtdOworICAgIH0KKwogICAgIC8vIFNwcmVhZHNoZWV0VGV4dEZpZWxkIGRl
bGVnYXRlCiAKICAgICBzcHJlYWRzaGVldFRleHRGaWVsZFdpbGxTdGFydEVkaXRpbmcodGV4dEZp
ZWxkKQpAQCAtOTEyLDggKzkyMyw3IEBAIFdJLlNwcmVhZHNoZWV0U3R5bGVQcm9wZXJ0eSA9IGNs
YXNzIFNwcmVhZHNoZWV0U3R5bGVQcm9wZXJ0eSBleHRlbmRzIFdJLk9iamVjdAogCiAgICAgX3Zh
bHVlQ29tcGxldGlvbkRhdGFQcm92aWRlcih0ZXh0LCB7Y2FyZXRQb3NpdGlvbiwgYWxsb3dFbXB0
eVByZWZpeH0gPSB7fSkKICAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiA8d2Via2l0Lm9yZy9iLzIy
NzA5OD4gU3R5bGVzIHNpZGViYXIgcGFuZWwgc2hvdWxkIGF1dG9jb21wbGV0ZSBgdmFyKClgIHZh
bHVlcy4KLSAgICAgICAgcmV0dXJuIFdJLkNTU0tleXdvcmRDb21wbGV0aW9ucy5mb3JQYXJ0aWFs
UHJvcGVydHlWYWx1ZSh0ZXh0LCB0aGlzLl9uYW1lRWxlbWVudC50ZXh0Q29udGVudC50cmltKCks
IHtjYXJldFBvc2l0aW9ufSk7CisgICAgICAgIHJldHVybiBXSS5DU1NLZXl3b3JkQ29tcGxldGlv
bnMuZm9yUGFydGlhbFByb3BlcnR5VmFsdWUodGV4dCwgdGhpcy5fbmFtZUVsZW1lbnQudGV4dENv
bnRlbnQudHJpbSgpLCB7Y2FyZXRQb3NpdGlvbiwgYWRkaXRpb25hbEZ1bmN0aW9uVmFsdWVDb21w
bGV0aW9uc1Byb3ZpZGVyOiB0aGlzLmFkZGl0aW9uYWxGdW5jdGlvblZhbHVlQ29tcGxldGlvbnNQ
cm92aWRlci5iaW5kKHRoaXMpfSk7CiAgICAgfQogCiAgICAgX3NldHVwSnVtcFRvU3ltYm9sKGVs
ZW1lbnQpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKaW5kZXggYWE4M2EzY2Q5NWQ3NzM0NTM2MjM1ODc5MDM5ZTFjZDBhMzAzMTVlNi4u
YWU0MjU3YjQ4ZjJiMzdjZGYxMmViMGRkNDdjZmNkMzE3NzQ2ZWQ4OSAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE2IEBACisyMDIxLTA2LTIzICBSYXp2YW4gQ2FsaW1hbiAgPHJjYWxpbWFuQGFwcGxlLmNvbT4K
KworICAgICAgICBXZWIgSW5zcGVjdG9yOiBTdHlsZXM6IHNob3VsZCBhdXRvY29tcGxldGUgYHZh
cigpYCBhbmQgYGF0dHIoKWAgdmFsdWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjcwOTgKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc5NDE4MjQ3
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCB0
ZXN0IGNhc2VzIGZvciBjb250ZXh0dWFsIENTUyBmdW5jdGlvbiB2YWx1ZSBjb21wbGV0aW9uLgor
CisgICAgICAgICogaW5zcGVjdG9yL3VuaXQtdGVzdHMvY3NzLWtleXdvcmQtY29tcGxldGlvbnMt
ZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGluc3BlY3Rvci91bml0LXRlc3RzL2Nzcy1rZXl3b3Jk
LWNvbXBsZXRpb25zLmh0bWw6CisKIDIwMjEtMDYtMjMgIFBhdHJpY2sgQW5nbGUgIDxwYW5nbGVA
YXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFN0eWxlczogQXV0b2NvbXBsZXRl
IHNob3VsZCBzdXBwb3J0IG1pZC1saW5lIGNvbXBsZXRpb25zIGFuZCBmdW5jdGlvbiBjb21wbGV0
aW9ucwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3VuaXQtdGVzdHMvY3NzLWtl
eXdvcmQtY29tcGxldGlvbnMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Vu
aXQtdGVzdHMvY3NzLWtleXdvcmQtY29tcGxldGlvbnMtZXhwZWN0ZWQudHh0CmluZGV4IDJiMjFj
YTg0YThkZjRiN2JkNTEzNzFkYjY1YjdkNzVlZDIyODNjN2EuLmFiNzMxYjRiOWYwYTFiYTAyMmJl
MjU3NzZhOTIyNzliNDA5YTZjZjAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci91
bml0LXRlc3RzL2Nzcy1rZXl3b3JkLWNvbXBsZXRpb25zLWV4cGVjdGVkLnR4dAorKysgYi9MYXlv
dXRUZXN0cy9pbnNwZWN0b3IvdW5pdC10ZXN0cy9jc3Mta2V5d29yZC1jb21wbGV0aW9ucy1leHBl
Y3RlZC50eHQKQEAgLTQxLDQgKzQxLDE5IEBAIFBBU1M6IEFsbCBleHBlY3RlZCBjb21wbGV0aW9u
cyB3ZXJlIHByZXNlbnQuCiAtIFRlc3RpbmcgImdyaWQtdGVtcGxhdGUtY29sdW1uczogW2xpbmVu
YW1lMV0gMTAwcHggcmVwZWF0KCwgW2xpbmVuYW1lMiBsaW5lbmFtZTNdIDE1MHB4KSBbbGluZW5h
bWUzXSAxMDBweCBbbGluZW5hbWU0XSIKIFBBU1M6IEV4cGVjdGVkIHJlc3VsdCBwcmVmaXggdG8g
YmUgIiIKIFBBU1M6IEFsbCBleHBlY3RlZCBjb21wbGV0aW9ucyB3ZXJlIHByZXNlbnQuCistIFRl
c3RpbmcgImNvbnRlbnQ6IGF0dHIoIgorUEFTUzogRXhwZWN0ZWQgcmVzdWx0IHByZWZpeCB0byBi
ZSAiIgorUEFTUzogQWxsIGV4cGVjdGVkIGNvbXBsZXRpb25zIHdlcmUgcHJlc2VudC4KKy0gVGVz
dGluZyAiY29udGVudDogYXR0cihjIgorUEFTUzogRXhwZWN0ZWQgcmVzdWx0IHByZWZpeCB0byBi
ZSAiYyIKK1BBU1M6IEFsbCBleHBlY3RlZCBjb21wbGV0aW9ucyB3ZXJlIHByZXNlbnQuCistIFRl
c3RpbmcgImNvbG9yOiB2YXIoIgorUEFTUzogRXhwZWN0ZWQgcmVzdWx0IHByZWZpeCB0byBiZSAi
IgorUEFTUzogQWxsIGV4cGVjdGVkIGNvbXBsZXRpb25zIHdlcmUgcHJlc2VudC4KKy0gVGVzdGlu
ZyAiY29sb3I6IHZhcigtLW8iCitQQVNTOiBFeHBlY3RlZCByZXN1bHQgcHJlZml4IHRvIGJlICIt
LW8iCitQQVNTOiBBbGwgZXhwZWN0ZWQgY29tcGxldGlvbnMgd2VyZSBwcmVzZW50LgorLSBUZXN0
aW5nICJjb2xvcjogY2FsYygxICsgdmFyKCkpIgorUEFTUzogRXhwZWN0ZWQgcmVzdWx0IHByZWZp
eCB0byBiZSAiIgorUEFTUzogQWxsIGV4cGVjdGVkIGNvbXBsZXRpb25zIHdlcmUgcHJlc2VudC4K
IApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3VuaXQtdGVzdHMvY3NzLWtleXdv
cmQtY29tcGxldGlvbnMuaHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci91bml0LXRlc3RzL2Nz
cy1rZXl3b3JkLWNvbXBsZXRpb25zLmh0bWwKaW5kZXggYjg2NDdkMmMxNWVhMzI5MzFkMDBlZDQ5
NThmMjZiZDQ4MzhkNTcwYS4uZTY1NTg5MDkyZWE2MjZmOWYxNTkwM2M0MTE0MDQ1N2MyMDg4Yjk3
NyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3VuaXQtdGVzdHMvY3NzLWtleXdv
cmQtY29tcGxldGlvbnMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvdW5pdC10ZXN0
cy9jc3Mta2V5d29yZC1jb21wbGV0aW9ucy5odG1sCkBAIC02MSwxNCArNjEsMTUgQEAgZnVuY3Rp
b24gdGVzdCgpCiAgICAgICAgIG5hbWU6ICJDU1NLZXl3b3JkQ29tcGxldGlvbnMuZm9yUGFydGlh
bFByb3BlcnR5VmFsdWUiLAogICAgICAgICBkZXNjcmlwdGlvbjogIlRlc3QgZmluZGluZyBrZXl3
b3JkIGNvbXBsZXRpb25zIGZvciBwcm92aWRlZCBwYXJ0aWFsIENTUyBwcm9wZXJ0eSB2YWx1ZXMu
IiwKICAgICAgICAgdGVzdCgpIHsKLSAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXBhcmVFeHBlY3Rh
dGlvbnModGV4dCwgcHJvcGVydHlOYW1lLCB7Y2FyZXRQb3NpdGlvbiwgZXhwZWN0ZWRQcmVmaXgs
IGV4cGVjdGVkQ29tcGxldGlvbnN9KSB7CisgICAgICAgICAgICBmdW5jdGlvbiBjb21wYXJlRXhw
ZWN0YXRpb25zKHRleHQsIHByb3BlcnR5TmFtZSwge2NhcmV0UG9zaXRpb24sIGV4cGVjdGVkUHJl
Zml4LCBleHBlY3RlZENvbXBsZXRpb25zLCBhZGRpdGlvbmFsRnVuY3Rpb25WYWx1ZUNvbXBsZXRp
b25zUHJvdmlkZXJ9KSB7CiAgICAgICAgICAgICAgICAgY2FyZXRQb3NpdGlvbiA/Pz0gdGV4dC5s
ZW5ndGg7CiAgICAgICAgICAgICAgICAgZXhwZWN0ZWRQcmVmaXggPz89IHRleHQ7CiAgICAgICAg
ICAgICAgICAgZXhwZWN0ZWRDb21wbGV0aW9ucyA/Pz0gW107CisgICAgICAgICAgICAgICAgYWRk
aXRpb25hbEZ1bmN0aW9uVmFsdWVDb21wbGV0aW9uc1Byb3ZpZGVyID8/PSAoKSA9PiB7fQogCiAg
ICAgICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coYC0gVGVzdGluZyAiJHtwcm9wZXJ0eU5h
bWV9OiAke3RleHR9ImApOwogCi0gICAgICAgICAgICAgICAgbGV0IGNvbXBsZXRpb25SZXN1bHRz
ID0gV0kuQ1NTS2V5d29yZENvbXBsZXRpb25zLmZvclBhcnRpYWxQcm9wZXJ0eVZhbHVlKHRleHQs
IHByb3BlcnR5TmFtZSwge2NhcmV0UG9zaXRpb259KTsKKyAgICAgICAgICAgICAgICBsZXQgY29t
cGxldGlvblJlc3VsdHMgPSBXSS5DU1NLZXl3b3JkQ29tcGxldGlvbnMuZm9yUGFydGlhbFByb3Bl
cnR5VmFsdWUodGV4dCwgcHJvcGVydHlOYW1lLCB7Y2FyZXRQb3NpdGlvbiwgYWRkaXRpb25hbEZ1
bmN0aW9uVmFsdWVDb21wbGV0aW9uc1Byb3ZpZGVyfSk7CiAgICAgICAgICAgICAgICAgSW5zcGVj
dG9yVGVzdC5leHBlY3RFcXVhbChjb21wbGV0aW9uUmVzdWx0cy5wcmVmaXgsIGV4cGVjdGVkUHJl
Zml4LCBgRXhwZWN0ZWQgcmVzdWx0IHByZWZpeCB0byBiZSAiJHtleHBlY3RlZFByZWZpeH0iYCk7
CiAKICAgICAgICAgICAgICAgICAvLyBCZWNhdXNlIGV4cGVjdGVkIGNvbXBsZXRpb25zIGNvdWxk
IGJlIGFkZGVkIGF0IGFueSB0aW1lLCBqdXN0IG1ha2Ugc3VyZSB0aGUgbGlzdCBjb250YWlucyBv
dXIgZXhwZWN0ZWQgY29tcGxldGlvbnMsIGluc3RlYWQgb2YgZW5mb3JjaW5nIGFuIGV4YWN0IG1h
dGNoIGJldHdlZW4gZXhwZWN0YXRpb25zIGFuZCByZWFsaXR5LgpAQCAtMTMxLDYgKzEzMiw0MyBA
QCBmdW5jdGlvbiB0ZXN0KCkKICAgICAgICAgICAgICAgICBleHBlY3RlZFByZWZpeDogIiIsCiAg
ICAgICAgICAgICAgICAgZXhwZWN0ZWRDb21wbGV0aW9uczogWyJhdXRvLWZpbGwiLCAiYXV0by1m
aXQiLCAidmFyKCkiXSwKICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAvLyBgYXR0cih8
YAorICAgICAgICAgICAgY29tcGFyZUV4cGVjdGF0aW9ucygiYXR0cigiLCAiY29udGVudCIsIHsK
KyAgICAgICAgICAgICAgICBleHBlY3RlZFByZWZpeDogIiIsCisgICAgICAgICAgICAgICAgZXhw
ZWN0ZWRDb21wbGV0aW9uczogWyJjbGFzcyIsICJpZCIsICJ2YXIoKSJdLAorICAgICAgICAgICAg
ICAgIGFkZGl0aW9uYWxGdW5jdGlvblZhbHVlQ29tcGxldGlvbnNQcm92aWRlcjogKCkgPT4geyBy
ZXR1cm4gWyJjbGFzcyIsICJpZCJdIH0sCisgICAgICAgICAgICB9KQorCisgICAgICAgICAgICAv
LyBgYXR0cihjfClgCisgICAgICAgICAgICBjb21wYXJlRXhwZWN0YXRpb25zKCJhdHRyKGMiLCAi
Y29udGVudCIsIHsKKyAgICAgICAgICAgICAgICBjYXJldFBvc2l0aW9uOiA2LAorICAgICAgICAg
ICAgICAgIGV4cGVjdGVkUHJlZml4OiAiYyIsCisgICAgICAgICAgICAgICAgZXhwZWN0ZWRDb21w
bGV0aW9uczogWyJjbGFzcyJdLAorICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxGdW5jdGlvblZh
bHVlQ29tcGxldGlvbnNQcm92aWRlcjogKCkgPT4geyByZXR1cm4gWyJjbGFzcyIsICJpZCJdIH0s
CisgICAgICAgICAgICB9KQorCisgICAgICAgICAgICAvLyBgdmFyKHxgCisgICAgICAgICAgICBj
b21wYXJlRXhwZWN0YXRpb25zKCJ2YXIoIiwgImNvbG9yIiwgeworICAgICAgICAgICAgICAgIGV4
cGVjdGVkUHJlZml4OiAiIiwKKyAgICAgICAgICAgICAgICBleHBlY3RlZENvbXBsZXRpb25zOiBb
Ii0tb25lIiwgIi0tdHdvIl0sCisgICAgICAgICAgICAgICAgYWRkaXRpb25hbEZ1bmN0aW9uVmFs
dWVDb21wbGV0aW9uc1Byb3ZpZGVyOiAoKSA9PiB7IHJldHVybiBbIi0tb25lIiwgIi0tdHdvIl0g
fSwKKyAgICAgICAgICAgIH0pCisKKyAgICAgICAgICAgIC8vIGB2YXIoLS1vfGAKKyAgICAgICAg
ICAgIGNvbXBhcmVFeHBlY3RhdGlvbnMoInZhcigtLW8iLCAiY29sb3IiLCB7CisgICAgICAgICAg
ICAgICAgZXhwZWN0ZWRQcmVmaXg6ICItLW8iLAorICAgICAgICAgICAgICAgIGV4cGVjdGVkQ29t
cGxldGlvbnM6IFsiLS1vbmUiXSwKKyAgICAgICAgICAgICAgICBhZGRpdGlvbmFsRnVuY3Rpb25W
YWx1ZUNvbXBsZXRpb25zUHJvdmlkZXI6ICgpID0+IHsgcmV0dXJuIFsiLS1vbmUiLCAiLS10d28i
XSB9LAorICAgICAgICAgICAgfSkKKworICAgICAgICAgICAgLy8gYGNhbGMoMSArIHZhcih8KSlg
CisgICAgICAgICAgICBjb21wYXJlRXhwZWN0YXRpb25zKCJjYWxjKDEgKyB2YXIoKSkiLCAiY29s
b3IiLCB7CisgICAgICAgICAgICAgICAgY2FyZXRQb3NpdGlvbjogMTMsCisgICAgICAgICAgICAg
ICAgZXhwZWN0ZWRQcmVmaXg6ICIiLAorICAgICAgICAgICAgICAgIGV4cGVjdGVkQ29tcGxldGlv
bnM6IFsiLS1vbmUiLCAiLS10d28iXSwKKyAgICAgICAgICAgICAgICBhZGRpdGlvbmFsRnVuY3Rp
b25WYWx1ZUNvbXBsZXRpb25zUHJvdmlkZXI6ICgpID0+IHsgcmV0dXJuIFsiLS1vbmUiLCAiLS10
d28iXSB9LAorICAgICAgICAgICAgfSkKICAgICAgICAgfQogICAgIH0pOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>432696</attachid>
            <date>2021-07-01 08:18:25 -0700</date>
            <delta_ts>2021-07-02 06:31:57 -0700</delta_ts>
            <desc>Patch 1.3</desc>
            <filename>bug-227098-20210701171822.patch</filename>
            <type>text/plain</type>
            <size>14552</size>
            <attacher name="Razvan Caliman">rcaliman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDhlM2U4Y2JiNDM4MjU2ZjFiYzliMDhiNzNiMTU4
OGJlMDM2MTgzYWQuLjIxNWIzYWJmYzRiYjUwODM1NjIwYWY3NmQ1ZjVkOGFkZDA1ZTc1ZjQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDIxLTA3LTAxICBSYXp2
YW4gQ2FsaW1hbiAgPHJjYWxpbWFuQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9y
OiBTdHlsZXM6IHNob3VsZCBhdXRvY29tcGxldGUgYHZhcigpYCBhbmQgYGF0dHIoKWAgdmFsdWVz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcwOTgK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc5NDE4MjQ3PgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBjb21wbGV0aW9uIHN1
Z2dlc3Rpb25zIGluIHRoZSBTdHlsZXMgZGV0YWlscyBzaWRlYmFyIHBhbmVsCisgICAgICAgIGZv
ciBDU1MgVmFyaWFibGVzIGZvciB1c2Ugd2l0aCB2YXIoKSBhbmQgRE9NIG5vZGUgYXR0cmlidXRl
cyBmb3IgdXNlIHdpdGggYXR0cigpLgorCisgICAgICAgICogVXNlckludGVyZmFjZS9Nb2RlbHMv
Q1NTQ29tcGxldGlvbnMuanM6CisgICAgICAgIChXSS5DU1NDb21wbGV0aW9ucy5wcm90b3R5cGUu
YWRkVmFsdWVzKToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01vZGVscy9DU1NLZXl3b3JkQ29t
cGxldGlvbnMuanM6CisgICAgICAgICogVXNlckludGVyZmFjZS9Nb2RlbHMvRE9NTm9kZVN0eWxl
cy5qczoKKyAgICAgICAgKFdJLkRPTU5vZGVTdHlsZXMpOgorICAgICAgICAoV0kuRE9NTm9kZVN0
eWxlcy5wcm90b3R5cGUuZ2V0IGFsbENTU1ZhcmlhYmxlcyk6CisgICAgICAgIChXSS5ET01Ob2Rl
U3R5bGVzLnByb3RvdHlwZS5fdXBkYXRlU3R5bGVDYXNjYWRlKToKKyAgICAgICAgKFdJLkRPTU5v
ZGVTdHlsZXMucHJvdG90eXBlLl9jb2xsZWN0Q1NTVmFyaWFibGVzKToKKyAgICAgICAgKiBVc2Vy
SW50ZXJmYWNlL1ZpZXdzL1NwcmVhZHNoZWV0U3R5bGVQcm9wZXJ0eS5qczoKKyAgICAgICAgKFdJ
LlNwcmVhZHNoZWV0U3R5bGVQcm9wZXJ0eS5wcm90b3R5cGUuZ2V0RnVuY3Rpb25WYWx1ZUNvbXBs
ZXRpb25zKToKKyAgICAgICAgKFdJLlNwcmVhZHNoZWV0U3R5bGVQcm9wZXJ0eS5wcm90b3R5cGUu
X3ZhbHVlQ29tcGxldGlvbkRhdGFQcm92aWRlcik6CisKIDIwMjEtMDYtMzAgIFBhdHJpY2sgQW5n
bGUgIDxwYW5nbGVAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFN0eWxlczog
QXV0b2NvbXBsZXRlIHNob3VsZCBzdXBwb3J0IGZ1bmN0aW9uIGNvbXBsZXRpb25zCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvQ1NTQ29tcGxl
dGlvbnMuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvQ1NT
Q29tcGxldGlvbnMuanMKaW5kZXggNWMxODc3ZWZjYzQ5MzlhOTFiNDgyMDNhZmM0NzI4NWUxNGNm
N2YyNi4uNGE1MTAzMzgxODgyYzE0OWZhNjMxYjQ5NGY0YTkwMWMyZDUwNGYyNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0NTU0NvbXBsZXRp
b25zLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9D
U1NDb21wbGV0aW9ucy5qcwpAQCAtMjYxLDYgKzI2MSwxMyBAQCBXSS5DU1NDb21wbGV0aW9ucyA9
IGNsYXNzIENTU0NvbXBsZXRpb25zCiAgICAgICAgIHJldHVybiB0aGlzLl92YWx1ZXM7CiAgICAg
fQogCisgICAgYWRkVmFsdWVzKHZhbHVlcykKKyAgICB7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0
KEFycmF5LmlzQXJyYXkodmFsdWVzKSwgdmFsdWVzKTsKKyAgICAgICAgdGhpcy5fdmFsdWVzLnB1
c2hBbGwodmFsdWVzKTsKKyAgICAgICAgdGhpcy5fdmFsdWVzLnNvcnQoKTsKKyAgICB9CisKICAg
ICBzdGFydHNXaXRoKHByZWZpeCkKICAgICB7CiAgICAgICAgIGlmICghcHJlZml4KQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL0NTU0tleXdv
cmRDb21wbGV0aW9ucy5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01v
ZGVscy9DU1NLZXl3b3JkQ29tcGxldGlvbnMuanMKaW5kZXggNzNhZTVhZjlmY2ZkYjg1Nzc5ZWJm
Zjk0ODZhODE4MmU3NGJhZGViNy4uYWJkMDIzMzc1ZmM4MDg4ZmNiMzFlNDcyZjU4ZTY1OWY3NTIw
ZDVkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9k
ZWxzL0NTU0tleXdvcmRDb21wbGV0aW9ucy5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9Nb2RlbHMvQ1NTS2V5d29yZENvbXBsZXRpb25zLmpzCkBAIC00NSw3ICs0
NSw3IEBAIFdJLkNTU0tleXdvcmRDb21wbGV0aW9ucy5mb3JQYXJ0aWFsUHJvcGVydHlOYW1lID0g
ZnVuY3Rpb24odGV4dCwge2NhcmV0UG9zaXRpb24sCiAgICAgcmV0dXJuIHtwcmVmaXg6IHRleHQs
IGNvbXBsZXRpb25zOldJLkNTU0NvbXBsZXRpb25zLmNzc05hbWVDb21wbGV0aW9ucy5zdGFydHNX
aXRoKHRleHQpfTsKIH07CiAKLVdJLkNTU0tleXdvcmRDb21wbGV0aW9ucy5mb3JQYXJ0aWFsUHJv
cGVydHlWYWx1ZSA9IGZ1bmN0aW9uKHRleHQsIHByb3BlcnR5TmFtZSwge2NhcmV0UG9zaXRpb259
ID0ge30pCitXSS5DU1NLZXl3b3JkQ29tcGxldGlvbnMuZm9yUGFydGlhbFByb3BlcnR5VmFsdWUg
PSBmdW5jdGlvbih0ZXh0LCBwcm9wZXJ0eU5hbWUsIHtjYXJldFBvc2l0aW9uLCBhZGRpdGlvbmFs
RnVuY3Rpb25WYWx1ZUNvbXBsZXRpb25zUHJvdmlkZXJ9ID0ge30pCiB7CiAgICAgY2FyZXRQb3Np
dGlvbiA/Pz0gdGV4dC5sZW5ndGg7CiAKQEAgLTEwOCw5ICsxMDgsMTIgQEAgV0kuQ1NTS2V5d29y
ZENvbXBsZXRpb25zLmZvclBhcnRpYWxQcm9wZXJ0eVZhbHVlID0gZnVuY3Rpb24odGV4dCwgcHJv
cGVydHlOYW1lLAogICAgICAgICB9CiAgICAgfQogCi0gICAgLy8gRklYTUU6IDx3ZWJraXQub3Jn
L2IvMjI3MDk4PiBTdHlsZXMgc2lkZWJhciBwYW5lbCBzaG91bGQgYXV0b2NvbXBsZXRlIGB2YXIo
KWAgdmFsdWVzLgotICAgIGlmIChmdW5jdGlvbk5hbWUpCi0gICAgICAgIHJldHVybiB7cHJlZml4
OiBjdXJyZW50VG9rZW5WYWx1ZSwgY29tcGxldGlvbnM6IFdJLkNTU0tleXdvcmRDb21wbGV0aW9u
cy5mb3JGdW5jdGlvbihmdW5jdGlvbk5hbWUpLnN0YXJ0c1dpdGgoY3VycmVudFRva2VuVmFsdWUp
fTsKKyAgICBpZiAoZnVuY3Rpb25OYW1lKSB7CisgICAgICAgIGxldCBjb21wbGV0aW9ucyA9IFdJ
LkNTU0tleXdvcmRDb21wbGV0aW9ucy5mb3JGdW5jdGlvbihmdW5jdGlvbk5hbWUpOworICAgICAg
ICBsZXQgY29udGV4dHVhbFZhbHVlQ29tcGxldGlvbnMgPSBhZGRpdGlvbmFsRnVuY3Rpb25WYWx1
ZUNvbXBsZXRpb25zUHJvdmlkZXI/LihmdW5jdGlvbk5hbWUpIHx8IFtdOworICAgICAgICBjb21w
bGV0aW9ucy5hZGRWYWx1ZXMoY29udGV4dHVhbFZhbHVlQ29tcGxldGlvbnMpOworICAgICAgICBy
ZXR1cm4ge3ByZWZpeDogY3VycmVudFRva2VuVmFsdWUsIGNvbXBsZXRpb25zOiBjb21wbGV0aW9u
cy5zdGFydHNXaXRoKGN1cnJlbnRUb2tlblZhbHVlKX07CisgICAgfQogCiAgICAgcmV0dXJuIHtw
cmVmaXg6IGN1cnJlbnRUb2tlblZhbHVlLCBjb21wbGV0aW9uczogV0kuQ1NTS2V5d29yZENvbXBs
ZXRpb25zLmZvclByb3BlcnR5KHByb3BlcnR5TmFtZSkuc3RhcnRzV2l0aChjdXJyZW50VG9rZW5W
YWx1ZSl9OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL01vZGVscy9ET01Ob2RlU3R5bGVzLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvTW9kZWxzL0RPTU5vZGVTdHlsZXMuanMKaW5kZXggZGQwMGU0OTVlMDcyNGE1NzNk
ODhlYTU5MDI3MjVkYjY4YzIzZmEwYS4uY2U4ZWNmOGVlMWY3OTExNmFlMDY3NjQyYTcxZmJjZjg1
NGRmZmJmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
TW9kZWxzL0RPTU5vZGVTdHlsZXMuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvTW9kZWxzL0RPTU5vZGVTdHlsZXMuanMKQEAgLTQ3LDYgKzQ3LDcgQEAgV0kuRE9N
Tm9kZVN0eWxlcyA9IGNsYXNzIERPTU5vZGVTdHlsZXMgZXh0ZW5kcyBXSS5PYmplY3QKIAogICAg
ICAgICB0aGlzLl9wcm9wZXJ0eU5hbWVUb0VmZmVjdGl2ZVByb3BlcnR5TWFwID0ge307CiAgICAg
ICAgIHRoaXMuX3VzZWRDU1NWYXJpYWJsZXMgPSBuZXcgU2V0OworICAgICAgICB0aGlzLl9hbGxD
U1NWYXJpYWJsZXMgPSBuZXcgU2V0OwogCiAgICAgICAgIHRoaXMuX3BlbmRpbmdSZWZyZXNoVGFz
ayA9IG51bGw7CiAgICAgICAgIHRoaXMucmVmcmVzaCgpOwpAQCAtMTMxLDYgKzEzMiw3IEBAIFdJ
LkRPTU5vZGVTdHlsZXMgPSBjbGFzcyBET01Ob2RlU3R5bGVzIGV4dGVuZHMgV0kuT2JqZWN0CiAg
ICAgZ2V0IG9yZGVyZWRTdHlsZXMoKSB7IHJldHVybiB0aGlzLl9vcmRlcmVkU3R5bGVzOyB9CiAg
ICAgZ2V0IGNvbXB1dGVkUHJpbWFyeUZvbnQoKSB7IHJldHVybiB0aGlzLl9jb21wdXRlZFByaW1h
cnlGb250OyB9CiAgICAgZ2V0IHVzZWRDU1NWYXJpYWJsZXMoKSB7IHJldHVybiB0aGlzLl91c2Vk
Q1NTVmFyaWFibGVzOyB9CisgICAgZ2V0IGFsbENTU1ZhcmlhYmxlcygpIHsgcmV0dXJuIHRoaXMu
X2FsbENTU1ZhcmlhYmxlczsgfQogCiAgICAgZ2V0IG5lZWRzUmVmcmVzaCgpCiAgICAgewpAQCAt
NzY5LDcgKzc3MSw3IEBAIFdJLkRPTU5vZGVTdHlsZXMgPSBjbGFzcyBET01Ob2RlU3R5bGVzIGV4
dGVuZHMgV0kuT2JqZWN0CiAKICAgICAgICAgdGhpcy5fYXNzb2NpYXRlUmVsYXRlZFByb3BlcnRp
ZXMoY2FzY2FkZU9yZGVyZWRTdHlsZURlY2xhcmF0aW9ucywgdGhpcy5fcHJvcGVydHlOYW1lVG9F
ZmZlY3RpdmVQcm9wZXJ0eU1hcCk7CiAgICAgICAgIHRoaXMuX21hcmtPdmVycmlkZGVuUHJvcGVy
dGllcyhjYXNjYWRlT3JkZXJlZFN0eWxlRGVjbGFyYXRpb25zLCB0aGlzLl9wcm9wZXJ0eU5hbWVU
b0VmZmVjdGl2ZVByb3BlcnR5TWFwKTsKLSAgICAgICAgdGhpcy5fY29sbGVjdFVzZWRDU1NWYXJp
YWJsZXMoY2FzY2FkZU9yZGVyZWRTdHlsZURlY2xhcmF0aW9ucyk7CisgICAgICAgIHRoaXMuX2Nv
bGxlY3RDU1NWYXJpYWJsZXMoY2FzY2FkZU9yZGVyZWRTdHlsZURlY2xhcmF0aW9ucyk7CiAKICAg
ICAgICAgZm9yIChsZXQgcHNldWRvRWxlbWVudEluZm8gb2YgdGhpcy5fcHNldWRvRWxlbWVudHMu
dmFsdWVzKCkpIHsKICAgICAgICAgICAgIHBzZXVkb0VsZW1lbnRJbmZvLm9yZGVyZWRTdHlsZXMg
PSB0aGlzLl9jb2xsZWN0U3R5bGVzSW5DYXNjYWRlT3JkZXIocHNldWRvRWxlbWVudEluZm8ubWF0
Y2hlZFJ1bGVzLCBudWxsLCBudWxsKTsKQEAgLTk0NSwxMiArOTQ3LDE2IEBAIFdJLkRPTU5vZGVT
dHlsZXMgPSBjbGFzcyBET01Ob2RlU3R5bGVzIGV4dGVuZHMgV0kuT2JqZWN0CiAgICAgICAgIH0K
ICAgICB9CiAKLSAgICBfY29sbGVjdFVzZWRDU1NWYXJpYWJsZXMoc3R5bGVzKQorICAgIF9jb2xs
ZWN0Q1NTVmFyaWFibGVzKHN0eWxlcykKICAgICB7CisgICAgICAgIHRoaXMuX2FsbENTU1Zhcmlh
YmxlcyA9IG5ldyBTZXQ7CiAgICAgICAgIHRoaXMuX3VzZWRDU1NWYXJpYWJsZXMgPSBuZXcgU2V0
OwogCiAgICAgICAgIGZvciAobGV0IHN0eWxlIG9mIHN0eWxlcykgewogICAgICAgICAgICAgZm9y
IChsZXQgcHJvcGVydHkgb2Ygc3R5bGUuZW5hYmxlZFByb3BlcnRpZXMpIHsKKyAgICAgICAgICAg
ICAgICBpZiAocHJvcGVydHkuaXNWYXJpYWJsZSkKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5f
YWxsQ1NTVmFyaWFibGVzLmFkZChwcm9wZXJ0eS5uYW1lKTsKKwogICAgICAgICAgICAgICAgIGxl
dCB2YXJpYWJsZXMgPSBXSS5DU1NQcm9wZXJ0eS5maW5kVmFyaWFibGVOYW1lcyhwcm9wZXJ0eS52
YWx1ZSk7CiAKICAgICAgICAgICAgICAgICBpZiAoIXN0eWxlLmluaGVyaXRlZCkgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU3ByZWFkc2hl
ZXRTdHlsZVByb3BlcnR5LmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
Vmlld3MvU3ByZWFkc2hlZXRTdHlsZVByb3BlcnR5LmpzCmluZGV4IGQ5OTcyMzM0YzQ0Y2E0YmFm
ZDI2MDA5NjE4ZDlhMzVkMWEyNTYwZTAuLmNkYmI5NDMxOWMzODgwMzIyN2RjMzVlMTc2Y2MzMmU2
ODM5Mzc1MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L1ZpZXdzL1NwcmVhZHNoZWV0U3R5bGVQcm9wZXJ0eS5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9TcHJlYWRzaGVldFN0eWxlUHJvcGVydHkuanMKQEAg
LTMzOSw2ICszMzksMTggQEAgV0kuU3ByZWFkc2hlZXRTdHlsZVByb3BlcnR5ID0gY2xhc3MgU3By
ZWFkc2hlZXRTdHlsZVByb3BlcnR5IGV4dGVuZHMgV0kuT2JqZWN0CiAgICAgICAgIHJldHVybiBt
YXRjaGVzOwogICAgIH0KIAorICAgIGFkZGl0aW9uYWxGdW5jdGlvblZhbHVlQ29tcGxldGlvbnNQ
cm92aWRlcihmdW5jdGlvbk5hbWUpCisgICAgeworICAgICAgICBzd2l0Y2ggKGZ1bmN0aW9uTmFt
ZSkgeworICAgICAgICBjYXNlICJ2YXIiOgorICAgICAgICAgICAgcmV0dXJuIEFycmF5LmZyb20o
dGhpcy5fcHJvcGVydHkub3duZXJTdHlsZS5ub2RlU3R5bGVzLmFsbENTU1ZhcmlhYmxlcyk7Cisg
ICAgICAgIGNhc2UgImF0dHIiOgorICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb3BlcnR5Lm93
bmVyU3R5bGUubm9kZS5hdHRyaWJ1dGVzKCkubWFwKChhdHRyaWJ1dGUpID0+IGF0dHJpYnV0ZS5u
YW1lKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBbXTsKKyAgICB9CisKICAgICAvLyBT
cHJlYWRzaGVldFRleHRGaWVsZCBkZWxlZ2F0ZQogCiAgICAgc3ByZWFkc2hlZXRUZXh0RmllbGRX
aWxsU3RhcnRFZGl0aW5nKHRleHRGaWVsZCkKQEAgLTkxMiw5ICs5MjQsOCBAQCBXSS5TcHJlYWRz
aGVldFN0eWxlUHJvcGVydHkgPSBjbGFzcyBTcHJlYWRzaGVldFN0eWxlUHJvcGVydHkgZXh0ZW5k
cyBXSS5PYmplY3QKIAogICAgIF92YWx1ZUNvbXBsZXRpb25EYXRhUHJvdmlkZXIodGV4dCwge2Fs
bG93RW1wdHlQcmVmaXh9ID0ge30pCiAgICAgewotICAgICAgICAvLyBGSVhNRTogPHdlYmtpdC5v
cmcvYi8yMjcwOTg+IFN0eWxlcyBzaWRlYmFyIHBhbmVsIHNob3VsZCBhdXRvY29tcGxldGUgYHZh
cigpYCB2YWx1ZXMuCiAgICAgICAgIC8vIEZJWE1FOiA8d2Via2l0Lm9yZy9iLzIyNzQxMT4gU3R5
bGVzIHNpZGViYXIgcGFuZWwgc2hvdWxkIHN1cHBvcnQgbWlkbGluZSBhbmQgbXVsdGlsaW5lIGNv
bXBsZXRpb25zLgotICAgICAgICByZXR1cm4gV0kuQ1NTS2V5d29yZENvbXBsZXRpb25zLmZvclBh
cnRpYWxQcm9wZXJ0eVZhbHVlKHRleHQsIHRoaXMuX25hbWVFbGVtZW50LnRleHRDb250ZW50LnRy
aW0oKSk7CisgICAgICAgIHJldHVybiBXSS5DU1NLZXl3b3JkQ29tcGxldGlvbnMuZm9yUGFydGlh
bFByb3BlcnR5VmFsdWUodGV4dCwgdGhpcy5fbmFtZUVsZW1lbnQudGV4dENvbnRlbnQudHJpbSgp
LCB7YWRkaXRpb25hbEZ1bmN0aW9uVmFsdWVDb21wbGV0aW9uc1Byb3ZpZGVyOiB0aGlzLmFkZGl0
aW9uYWxGdW5jdGlvblZhbHVlQ29tcGxldGlvbnNQcm92aWRlci5iaW5kKHRoaXMpfSk7CiAgICAg
fQogCiAgICAgX3NldHVwSnVtcFRvU3ltYm9sKGVsZW1lbnQpCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMTUxYjJlODQzNzI4
OWE2ZjQ4MGVmNzVkZTQ2OGZhNmI3YjQ0NjczYS4uOGU1N2I4YTI1MTZjZTBmYWY0MmMxY2E4MjE5
MmNmYmJmYmI5OTcxMiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDIxLTA3LTAxICBSYXp2YW4g
Q2FsaW1hbiAgPHJjYWxpbWFuQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBT
dHlsZXM6IHNob3VsZCBhdXRvY29tcGxldGUgYHZhcigpYCBhbmQgYGF0dHIoKWAgdmFsdWVzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcwOTgKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc5NDE4MjQ3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCB0ZXN0IGNhc2VzIGZvciBjb250ZXh0dWFsIENT
UyBmdW5jdGlvbiB2YWx1ZSBjb21wbGV0aW9uLgorCisgICAgICAgICogaW5zcGVjdG9yL3VuaXQt
dGVzdHMvY3NzLWtleXdvcmQtY29tcGxldGlvbnMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGlu
c3BlY3Rvci91bml0LXRlc3RzL2Nzcy1rZXl3b3JkLWNvbXBsZXRpb25zLmh0bWw6CisKIDIwMjEt
MDctMDEgIEFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFZpc2libGVQ
b3NpdGlvbjo6YWJzb2x1dGVTZWxlY3Rpb25Cb3VuZHNGb3JMaW5lIGZhaWxzIG9uIG11bHRpbGlu
ZSB2ZXJ0aWNhbC1ybCBjb250ZW50CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
dW5pdC10ZXN0cy9jc3Mta2V5d29yZC1jb21wbGV0aW9ucy1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9pbnNwZWN0b3IvdW5pdC10ZXN0cy9jc3Mta2V5d29yZC1jb21wbGV0aW9ucy1leHBlY3Rl
ZC50eHQKaW5kZXggNWQwZGQzNmJiZDJiNjNkZGE3ODA0MTA5ZWZlMGU2YmFiYTM3Yzk5OS4uMTRj
ZDZlYzM4M2E0ZWRiMjcxYzcwY2RjYTg2YzY4ZjNmNWQxZjVmMiAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvaW5zcGVjdG9yL3VuaXQtdGVzdHMvY3NzLWtleXdvcmQtY29tcGxldGlvbnMtZXhwZWN0
ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci91bml0LXRlc3RzL2Nzcy1rZXl3b3Jk
LWNvbXBsZXRpb25zLWV4cGVjdGVkLnR4dApAQCAtNTEsMyArNTEsMjMgQEAgUEFTUzogQWxsIGV4
cGVjdGVkIGNvbXBsZXRpb25zIHdlcmUgcHJlc2VudC4KIFBBU1M6IEV4cGVjdGVkIHJlc3VsdCBw
cmVmaXggdG8gYmUgIiIKIFBBU1M6IEFsbCBleHBlY3RlZCBjb21wbGV0aW9ucyB3ZXJlIHByZXNl
bnQuCiAKKy0tIFJ1bm5pbmcgdGVzdCBjYXNlOiBXSS5DU1NLZXl3b3JkQ29tcGxldGlvbnMuZm9y
UGFydGlhbFByb3BlcnR5VmFsdWUuQXR0cmlidXRlRnVuY3Rpb24KK1BBU1M6IEV4cGVjdGVkIHJl
c3VsdCBwcmVmaXggdG8gYmUgIiIKK1BBU1M6IEFsbCBleHBlY3RlZCBjb21wbGV0aW9ucyB3ZXJl
IHByZXNlbnQuCisKKy0tIFJ1bm5pbmcgdGVzdCBjYXNlOiBXSS5DU1NLZXl3b3JkQ29tcGxldGlv
bnMuZm9yUGFydGlhbFByb3BlcnR5VmFsdWUuTWlkTGluZUF0dHJpYnV0ZUZ1bmN0aW9uCitQQVNT
OiBFeHBlY3RlZCByZXN1bHQgcHJlZml4IHRvIGJlICJjIgorUEFTUzogQWxsIGV4cGVjdGVkIGNv
bXBsZXRpb25zIHdlcmUgcHJlc2VudC4KKworLS0gUnVubmluZyB0ZXN0IGNhc2U6IFdJLkNTU0tl
eXdvcmRDb21wbGV0aW9ucy5mb3JQYXJ0aWFsUHJvcGVydHlWYWx1ZS5WYXJpYWJsZUZ1bmN0aW9u
CitQQVNTOiBFeHBlY3RlZCByZXN1bHQgcHJlZml4IHRvIGJlICIiCitQQVNTOiBBbGwgZXhwZWN0
ZWQgY29tcGxldGlvbnMgd2VyZSBwcmVzZW50LgorCistLSBSdW5uaW5nIHRlc3QgY2FzZTogV0ku
Q1NTS2V5d29yZENvbXBsZXRpb25zLmZvclBhcnRpYWxQcm9wZXJ0eVZhbHVlLlZhcmlhYmxlRnVu
Y3Rpb25GaWx0ZXJlZAorUEFTUzogRXhwZWN0ZWQgcmVzdWx0IHByZWZpeCB0byBiZSAiLS1vIgor
UEFTUzogQWxsIGV4cGVjdGVkIGNvbXBsZXRpb25zIHdlcmUgcHJlc2VudC4KKworLS0gUnVubmlu
ZyB0ZXN0IGNhc2U6IFdJLkNTU0tleXdvcmRDb21wbGV0aW9ucy5mb3JQYXJ0aWFsUHJvcGVydHlW
YWx1ZS5WYXJpYWJsZUZ1bmN0aW9uSW5DYWxjCitQQVNTOiBFeHBlY3RlZCByZXN1bHQgcHJlZml4
IHRvIGJlICIiCitQQVNTOiBBbGwgZXhwZWN0ZWQgY29tcGxldGlvbnMgd2VyZSBwcmVzZW50Lgor
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvdW5pdC10ZXN0cy9jc3Mta2V5d29y
ZC1jb21wbGV0aW9ucy5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3VuaXQtdGVzdHMvY3Nz
LWtleXdvcmQtY29tcGxldGlvbnMuaHRtbAppbmRleCAwNmE3NTMzMDA3MjA0N2VjMzlhM2E5Nzg0
MzI3NzczN2YwMjI0YzkyLi5jMWIyZWNjZTE4MWNkMzRlNTFjZGY0ZDUyMDg5MDE5ZTRiZTk4NWIz
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvdW5pdC10ZXN0cy9jc3Mta2V5d29y
ZC1jb21wbGV0aW9ucy5odG1sCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci91bml0LXRlc3Rz
L2Nzcy1rZXl3b3JkLWNvbXBsZXRpb25zLmh0bWwKQEAgLTY2LDcgKzY2LDcgQEAgZnVuY3Rpb24g
dGVzdCgpCiAgICAgICAgIGV4cGVjdGVkQ29tcGxldGlvbnM6IFsicmFuZ2UiXSwKICAgICB9KTsK
IAotICAgIGZ1bmN0aW9uIGFkZFRlc3RGb3JQYXJ0aWFsUHJvcGVydHlWYWx1ZSh7bmFtZSwgZGVz
Y3JpcHRpb24sIHByb3BlcnR5TmFtZSwgdGV4dCwgY2FyZXRQb3NpdGlvbiwgZXhwZWN0ZWRQcmVm
aXgsIGV4cGVjdGVkQ29tcGxldGlvbnN9KSB7CisgICAgZnVuY3Rpb24gYWRkVGVzdEZvclBhcnRp
YWxQcm9wZXJ0eVZhbHVlKHtuYW1lLCBkZXNjcmlwdGlvbiwgcHJvcGVydHlOYW1lLCB0ZXh0LCBj
YXJldFBvc2l0aW9uLCBleHBlY3RlZFByZWZpeCwgZXhwZWN0ZWRDb21wbGV0aW9ucywgYWRkaXRp
b25hbEZ1bmN0aW9uVmFsdWVDb21wbGV0aW9uc1Byb3ZpZGVyfSkgewogICAgICAgICBzdWl0ZS5h
ZGRUZXN0Q2FzZSh7CiAgICAgICAgICAgICBuYW1lLAogICAgICAgICAgICAgZGVzY3JpcHRpb24s
CkBAIC03NCw4ICs3NCw5IEBAIGZ1bmN0aW9uIHRlc3QoKQogICAgICAgICAgICAgICAgIGNhcmV0
UG9zaXRpb24gPz89IHRleHQubGVuZ3RoOwogICAgICAgICAgICAgICAgIGV4cGVjdGVkUHJlZml4
ID8/PSB0ZXh0OwogICAgICAgICAgICAgICAgIGV4cGVjdGVkQ29tcGxldGlvbnMgPz89IFtdOwor
ICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxGdW5jdGlvblZhbHVlQ29tcGxldGlvbnNQcm92aWRl
ciA/Pz0gKCkgPT4ge307CiAKLSAgICAgICAgICAgICAgICBsZXQgY29tcGxldGlvblJlc3VsdHMg
PSBXSS5DU1NLZXl3b3JkQ29tcGxldGlvbnMuZm9yUGFydGlhbFByb3BlcnR5VmFsdWUodGV4dCwg
cHJvcGVydHlOYW1lLCB7Y2FyZXRQb3NpdGlvbn0pOworICAgICAgICAgICAgICAgIGxldCBjb21w
bGV0aW9uUmVzdWx0cyA9IFdJLkNTU0tleXdvcmRDb21wbGV0aW9ucy5mb3JQYXJ0aWFsUHJvcGVy
dHlWYWx1ZSh0ZXh0LCBwcm9wZXJ0eU5hbWUsIHtjYXJldFBvc2l0aW9uLCBhZGRpdGlvbmFsRnVu
Y3Rpb25WYWx1ZUNvbXBsZXRpb25zUHJvdmlkZXJ9KTsKICAgICAgICAgICAgICAgICBJbnNwZWN0
b3JUZXN0LmV4cGVjdEVxdWFsKGNvbXBsZXRpb25SZXN1bHRzLnByZWZpeCwgZXhwZWN0ZWRQcmVm
aXgsIGBFeHBlY3RlZCByZXN1bHQgcHJlZml4IHRvIGJlICIke2V4cGVjdGVkUHJlZml4fSJgKTsK
IAogICAgICAgICAgICAgICAgIC8vIEJlY2F1c2UgZXhwZWN0ZWQgY29tcGxldGlvbnMgY291bGQg
YmUgYWRkZWQgYXQgYW55IHRpbWUsIGp1c3QgbWFrZSBzdXJlIHRoZSBsaXN0IGNvbnRhaW5zIG91
ciBleHBlY3RlZCBjb21wbGV0aW9ucywgaW5zdGVhZCBvZiBlbmZvcmNpbmcgYW4gZXhhY3QgbWF0
Y2ggYmV0d2VlbiBleHBlY3RhdGlvbnMgYW5kIHJlYWxpdHkuCkBAIC0xNzYsNiArMTc3LDU4IEBA
IGZ1bmN0aW9uIHRlc3QoKQogICAgICAgICBleHBlY3RlZENvbXBsZXRpb25zOiBbImF1dG8tZmls
bCIsICJhdXRvLWZpdCIsICJ2YXIoKSJdLAogICAgIH0pOwogCisgICAgLy8gYGF0dHIofGAKKyAg
ICBhZGRUZXN0Rm9yUGFydGlhbFByb3BlcnR5VmFsdWUoeworICAgICAgICBuYW1lOiAiV0kuQ1NT
S2V5d29yZENvbXBsZXRpb25zLmZvclBhcnRpYWxQcm9wZXJ0eVZhbHVlLkF0dHJpYnV0ZUZ1bmN0
aW9uIiwKKyAgICAgICAgZGVzY3JpcHRpb246ICJUZXN0IHRoYXQgYXR0cmlidXRlIGZ1bmN0aW9u
IHZhbHVlIGNvbXBsZXRpb25zIGZyb20gdGhlIGN1c3RvbSBwcm92aWRlciBhcmUgdXNlZC4iLAor
ICAgICAgICB0ZXh0OiAiYXR0cigiLAorICAgICAgICBleHBlY3RlZFByZWZpeDogIiIsCisgICAg
ICAgIGV4cGVjdGVkQ29tcGxldGlvbnM6IFsiY2xhc3MiLCAiaWQiLCAidmFyKCkiXSwKKyAgICAg
ICAgYWRkaXRpb25hbEZ1bmN0aW9uVmFsdWVDb21wbGV0aW9uc1Byb3ZpZGVyOiAoKSA9PiBbImNs
YXNzIiwgImlkIl0sCisgICAgfSk7CisKKyAgICAvLyBgYXR0cihjfClgCisgICAgYWRkVGVzdEZv
clBhcnRpYWxQcm9wZXJ0eVZhbHVlKHsKKyAgICAgICAgbmFtZTogIldJLkNTU0tleXdvcmRDb21w
bGV0aW9ucy5mb3JQYXJ0aWFsUHJvcGVydHlWYWx1ZS5NaWRMaW5lQXR0cmlidXRlRnVuY3Rpb24i
LAorICAgICAgICBkZXNjcmlwdGlvbjogIlRlc3QgdGhhdCBhdHRyaWJ1dGUgZnVuY3Rpb24gdmFs
dWUgY29tcGxldGlvbnMgaXMgaW5zaWRlIGEgZnVuY3Rpb24gd2l0aCBhIGNsb3NpbmcgcGFyZW50
aGVzaXMgdXNlcyBjb21wbGV0aW9ucyBmcm9tIHRoZSBjdXN0b20gcHJvdmlkZXIiLAorICAgICAg
ICB0ZXh0OiAiYXR0cihjKSIsCisgICAgICAgIGNhcmV0UG9zaXRpb246IDYsCisgICAgICAgIGV4
cGVjdGVkUHJlZml4OiAiYyIsCisgICAgICAgIGV4cGVjdGVkQ29tcGxldGlvbnM6IFsiY2xhc3Mi
XSwKKyAgICAgICAgYWRkaXRpb25hbEZ1bmN0aW9uVmFsdWVDb21wbGV0aW9uc1Byb3ZpZGVyOiAo
KSA9PiBbImNsYXNzIiwgImlkIl0sCisgICAgfSk7CisKKyAgICAvLyBgdmFyKHxgCisgICAgYWRk
VGVzdEZvclBhcnRpYWxQcm9wZXJ0eVZhbHVlKHsKKyAgICAgICAgbmFtZTogIldJLkNTU0tleXdv
cmRDb21wbGV0aW9ucy5mb3JQYXJ0aWFsUHJvcGVydHlWYWx1ZS5WYXJpYWJsZUZ1bmN0aW9uIiwK
KyAgICAgICAgZGVzY3JpcHRpb246ICJUZXN0IHRoYXQgdmFyaWFibGUgZnVuY3Rpb24gdmFsdWUg
Y29tcGxldGlvbnMgZnJvbSB0aGUgY3VzdG9tIHByb3ZpZGVyIGFyZSB1c2VkLiIsCisgICAgICAg
IHRleHQ6ICJ2YXIoIiwKKyAgICAgICAgZXhwZWN0ZWRQcmVmaXg6ICIiLAorICAgICAgICBleHBl
Y3RlZENvbXBsZXRpb25zOiBbIi0tb25lIiwgIi0tdHdvIl0sCisgICAgICAgIGFkZGl0aW9uYWxG
dW5jdGlvblZhbHVlQ29tcGxldGlvbnNQcm92aWRlcjogKCkgPT4gWyItLW9uZSIsICItLXR3byJd
LAorICAgIH0pOworCisgICAgLy8gYHZhcigtLW98YAorICAgIGFkZFRlc3RGb3JQYXJ0aWFsUHJv
cGVydHlWYWx1ZSh7CisgICAgICAgIG5hbWU6ICJXSS5DU1NLZXl3b3JkQ29tcGxldGlvbnMuZm9y
UGFydGlhbFByb3BlcnR5VmFsdWUuVmFyaWFibGVGdW5jdGlvbkZpbHRlcmVkIiwKKyAgICAgICAg
ZGVzY3JpcHRpb246ICJUZXN0IHRoYXQgdmFyaWFibGUgZnVuY3Rpb24gdmFsdWUgY29tcGxldGlv
bnMgZnJvbSB0aGUgY3VzdG9tIHByb3ZpZGVyIGFyZSBmaWx0ZXJlZC4iLAorICAgICAgICB0ZXh0
OiAidmFyKC0tbyIsCisgICAgICAgIGV4cGVjdGVkUHJlZml4OiAiLS1vIiwKKyAgICAgICAgZXhw
ZWN0ZWRDb21wbGV0aW9uczogWyItLW9uZSJdLAorICAgICAgICBhZGRpdGlvbmFsRnVuY3Rpb25W
YWx1ZUNvbXBsZXRpb25zUHJvdmlkZXI6ICgpID0+IFsiLS1vbmUiLCAiLS10d28iXSwKKyAgICB9
KTsKKworICAgIC8vIGBjYWxjKDEgKyB2YXIofCkpYAorICAgIGFkZFRlc3RGb3JQYXJ0aWFsUHJv
cGVydHlWYWx1ZSh7CisgICAgICAgIG5hbWU6ICJXSS5DU1NLZXl3b3JkQ29tcGxldGlvbnMuZm9y
UGFydGlhbFByb3BlcnR5VmFsdWUuVmFyaWFibGVGdW5jdGlvbkluQ2FsYyIsCisgICAgICAgIGRl
c2NyaXB0aW9uOiAiVGVzdCB0aGF0IHZhcmlhYmxlIGZ1bmN0aW9uIHZhbHVlIGNvbXBsZXRpb25z
IGZyb20gdGhlIGN1c3RvbSBwcm92aWRlciBhcmUgdXNlZCB3aGVuIHRoZSB2YXIoKSBpcyBuZXN0
ZWQgaW5zaWRlIGEgY2FsYygpIiwKKyAgICAgICAgdGV4dDogImNhbGMoMSArIHZhcigpKSIsCisg
ICAgICAgIGNhcmV0UG9zaXRpb246IDEzLAorICAgICAgICBleHBlY3RlZFByZWZpeDogIiIsCisg
ICAgICAgIGV4cGVjdGVkQ29tcGxldGlvbnM6IFsiLS1vbmUiLCAiLS10d28iXSwKKyAgICAgICAg
YWRkaXRpb25hbEZ1bmN0aW9uVmFsdWVDb21wbGV0aW9uc1Byb3ZpZGVyOiAoKSA9PiBbIi0tb25l
IiwgIi0tdHdvIl0sCisgICAgfSk7CisKICAgICBzdWl0ZS5ydW5UZXN0Q2FzZXNBbmRGaW5pc2go
KTsKIH0KIDwvc2NyaXB0Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>432784</attachid>
            <date>2021-07-02 06:32:02 -0700</date>
            <delta_ts>2021-07-02 07:13:28 -0700</delta_ts>
            <desc>Patch 1.4</desc>
            <filename>bug-227098-20210702153200.patch</filename>
            <type>text/plain</type>
            <size>14667</size>
            <attacher name="Razvan Caliman">rcaliman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDcxNmNhODM2OTNkMGMwOTZkZmNmNzU5MDg4MzNk
NTNiN2RhODEwZDkuLjg5NWJhMTFjYTIyM2EyZDdiNmZhOGRjODcwZDgyYzRiN2U2ZWY3NDIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDIxLTA3LTAyICBSYXp2
YW4gQ2FsaW1hbiAgPHJjYWxpbWFuQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9y
OiBTdHlsZXM6IHNob3VsZCBhdXRvY29tcGxldGUgYHZhcigpYCBhbmQgYGF0dHIoKWAgdmFsdWVz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjcwOTgK
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc5NDE4MjQ3PgorCisgICAgICAgIFJldmlld2VkIGJ5
IERldmluIFJvdXNzby4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgY29tcGxldGlvbiBzdWdn
ZXN0aW9ucyBpbiB0aGUgU3R5bGVzIGRldGFpbHMgc2lkZWJhciBwYW5lbAorICAgICAgICBmb3Ig
Q1NTIFZhcmlhYmxlcyBmb3IgdXNlIHdpdGggdmFyKCkgYW5kIERPTSBub2RlIGF0dHJpYnV0ZXMg
Zm9yIHVzZSB3aXRoIGF0dHIoKS4KKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTW9kZWxzL0NT
U0NvbXBsZXRpb25zLmpzOgorICAgICAgICAoV0kuQ1NTQ29tcGxldGlvbnMucHJvdG90eXBlLmFk
ZFZhbHVlcyk6CisgICAgICAgICogVXNlckludGVyZmFjZS9Nb2RlbHMvQ1NTS2V5d29yZENvbXBs
ZXRpb25zLmpzOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTW9kZWxzL0RPTU5vZGVTdHlsZXMu
anM6CisgICAgICAgIChXSS5ET01Ob2RlU3R5bGVzKToKKyAgICAgICAgKFdJLkRPTU5vZGVTdHls
ZXMucHJvdG90eXBlLmdldCBhbGxDU1NWYXJpYWJsZXMpOgorICAgICAgICAoV0kuRE9NTm9kZVN0
eWxlcy5wcm90b3R5cGUuX3VwZGF0ZVN0eWxlQ2FzY2FkZSk6CisgICAgICAgIChXSS5ET01Ob2Rl
U3R5bGVzLnByb3RvdHlwZS5fY29sbGVjdENTU1ZhcmlhYmxlcyk6CisgICAgICAgICogVXNlcklu
dGVyZmFjZS9WaWV3cy9TcHJlYWRzaGVldFN0eWxlUHJvcGVydHkuanM6CisgICAgICAgIChXSS5T
cHJlYWRzaGVldFN0eWxlUHJvcGVydHkucHJvdG90eXBlLmdldEZ1bmN0aW9uVmFsdWVDb21wbGV0
aW9ucyk6CisgICAgICAgIChXSS5TcHJlYWRzaGVldFN0eWxlUHJvcGVydHkucHJvdG90eXBlLl92
YWx1ZUNvbXBsZXRpb25EYXRhUHJvdmlkZXIpOgorCiAyMDIxLTA3LTAxICBQYXRyaWNrIEFuZ2xl
ICA8cGFuZ2xlQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBbUmVncmVzc2lv
bjogcjI3OTI3MV0gU291cmNlczogQnJlYWtwb2ludHMgc2VjdGlvbiBpbiBuYXZpZ2F0aW9uIHNp
ZGViYXIgZGlzYXBwZWFycyB3aGVuIFdlYiBJbnNwZWN0b3IgYmVjb21lcyB0YWxsZXIgdGhhbiA2
NTBweApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9k
ZWxzL0NTU0NvbXBsZXRpb25zLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvTW9kZWxzL0NTU0NvbXBsZXRpb25zLmpzCmluZGV4IDVjMTg3N2VmY2M0OTM5YTkxYjQ4MjAz
YWZjNDcyODVlMTRjZjdmMjYuLmRhYzMwNGEyNzQwZDdmY2JkNWJjZWJmNDY4NzY1OTMyODgyNzk5
MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVs
cy9DU1NDb21wbGV0aW9ucy5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9Nb2RlbHMvQ1NTQ29tcGxldGlvbnMuanMKQEAgLTI2MSw2ICsyNjEsMTYgQEAgV0kuQ1NT
Q29tcGxldGlvbnMgPSBjbGFzcyBDU1NDb21wbGV0aW9ucwogICAgICAgICByZXR1cm4gdGhpcy5f
dmFsdWVzOwogICAgIH0KIAorICAgIGFkZFZhbHVlcyh2YWx1ZXMpCisgICAgeworICAgICAgICBj
b25zb2xlLmFzc2VydChBcnJheS5pc0FycmF5KHZhbHVlcyksIHZhbHVlcyk7CisgICAgICAgIGlm
ICghdmFsdWVzLmxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB0aGlzLl92
YWx1ZXMucHVzaEFsbCh2YWx1ZXMpOworICAgICAgICB0aGlzLl92YWx1ZXMuc29ydCgpOworICAg
IH0KKwogICAgIHN0YXJ0c1dpdGgocHJlZml4KQogICAgIHsKICAgICAgICAgaWYgKCFwcmVmaXgp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMv
Q1NTS2V5d29yZENvbXBsZXRpb25zLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvTW9kZWxzL0NTU0tleXdvcmRDb21wbGV0aW9ucy5qcwppbmRleCA3M2FlNWFmOWZjZmRi
ODU3NzllYmZmOTQ4NmE4MTgyZTc0YmFkZWI3Li5hYmQwMjMzNzVmYzgwODhmY2IzMWU0NzJmNThl
NjU5Zjc1MjBkNWQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9Nb2RlbHMvQ1NTS2V5d29yZENvbXBsZXRpb25zLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9DU1NLZXl3b3JkQ29tcGxldGlvbnMuanMKQEAg
LTQ1LDcgKzQ1LDcgQEAgV0kuQ1NTS2V5d29yZENvbXBsZXRpb25zLmZvclBhcnRpYWxQcm9wZXJ0
eU5hbWUgPSBmdW5jdGlvbih0ZXh0LCB7Y2FyZXRQb3NpdGlvbiwKICAgICByZXR1cm4ge3ByZWZp
eDogdGV4dCwgY29tcGxldGlvbnM6V0kuQ1NTQ29tcGxldGlvbnMuY3NzTmFtZUNvbXBsZXRpb25z
LnN0YXJ0c1dpdGgodGV4dCl9OwogfTsKIAotV0kuQ1NTS2V5d29yZENvbXBsZXRpb25zLmZvclBh
cnRpYWxQcm9wZXJ0eVZhbHVlID0gZnVuY3Rpb24odGV4dCwgcHJvcGVydHlOYW1lLCB7Y2FyZXRQ
b3NpdGlvbn0gPSB7fSkKK1dJLkNTU0tleXdvcmRDb21wbGV0aW9ucy5mb3JQYXJ0aWFsUHJvcGVy
dHlWYWx1ZSA9IGZ1bmN0aW9uKHRleHQsIHByb3BlcnR5TmFtZSwge2NhcmV0UG9zaXRpb24sIGFk
ZGl0aW9uYWxGdW5jdGlvblZhbHVlQ29tcGxldGlvbnNQcm92aWRlcn0gPSB7fSkKIHsKICAgICBj
YXJldFBvc2l0aW9uID8/PSB0ZXh0Lmxlbmd0aDsKIApAQCAtMTA4LDkgKzEwOCwxMiBAQCBXSS5D
U1NLZXl3b3JkQ29tcGxldGlvbnMuZm9yUGFydGlhbFByb3BlcnR5VmFsdWUgPSBmdW5jdGlvbih0
ZXh0LCBwcm9wZXJ0eU5hbWUsCiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvLyBGSVhNRTogPHdl
YmtpdC5vcmcvYi8yMjcwOTg+IFN0eWxlcyBzaWRlYmFyIHBhbmVsIHNob3VsZCBhdXRvY29tcGxl
dGUgYHZhcigpYCB2YWx1ZXMuCi0gICAgaWYgKGZ1bmN0aW9uTmFtZSkKLSAgICAgICAgcmV0dXJu
IHtwcmVmaXg6IGN1cnJlbnRUb2tlblZhbHVlLCBjb21wbGV0aW9uczogV0kuQ1NTS2V5d29yZENv
bXBsZXRpb25zLmZvckZ1bmN0aW9uKGZ1bmN0aW9uTmFtZSkuc3RhcnRzV2l0aChjdXJyZW50VG9r
ZW5WYWx1ZSl9OworICAgIGlmIChmdW5jdGlvbk5hbWUpIHsKKyAgICAgICAgbGV0IGNvbXBsZXRp
b25zID0gV0kuQ1NTS2V5d29yZENvbXBsZXRpb25zLmZvckZ1bmN0aW9uKGZ1bmN0aW9uTmFtZSk7
CisgICAgICAgIGxldCBjb250ZXh0dWFsVmFsdWVDb21wbGV0aW9ucyA9IGFkZGl0aW9uYWxGdW5j
dGlvblZhbHVlQ29tcGxldGlvbnNQcm92aWRlcj8uKGZ1bmN0aW9uTmFtZSkgfHwgW107CisgICAg
ICAgIGNvbXBsZXRpb25zLmFkZFZhbHVlcyhjb250ZXh0dWFsVmFsdWVDb21wbGV0aW9ucyk7Cisg
ICAgICAgIHJldHVybiB7cHJlZml4OiBjdXJyZW50VG9rZW5WYWx1ZSwgY29tcGxldGlvbnM6IGNv
bXBsZXRpb25zLnN0YXJ0c1dpdGgoY3VycmVudFRva2VuVmFsdWUpfTsKKyAgICB9CiAKICAgICBy
ZXR1cm4ge3ByZWZpeDogY3VycmVudFRva2VuVmFsdWUsIGNvbXBsZXRpb25zOiBXSS5DU1NLZXl3
b3JkQ29tcGxldGlvbnMuZm9yUHJvcGVydHkocHJvcGVydHlOYW1lKS5zdGFydHNXaXRoKGN1cnJl
bnRUb2tlblZhbHVlKX07CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvTW9kZWxzL0RPTU5vZGVTdHlsZXMuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9Nb2RlbHMvRE9NTm9kZVN0eWxlcy5qcwppbmRleCBkZDAwZTQ5NWUw
NzI0YTU3M2Q4OGVhNTkwMjcyNWRiNjhjMjNmYTBhLi5jZThlY2Y4ZWUxZjc5MTE2YWUwNjc2NDJh
NzFmYmNmODU0ZGZmYmZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9Nb2RlbHMvRE9NTm9kZVN0eWxlcy5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9Nb2RlbHMvRE9NTm9kZVN0eWxlcy5qcwpAQCAtNDcsNiArNDcsNyBA
QCBXSS5ET01Ob2RlU3R5bGVzID0gY2xhc3MgRE9NTm9kZVN0eWxlcyBleHRlbmRzIFdJLk9iamVj
dAogCiAgICAgICAgIHRoaXMuX3Byb3BlcnR5TmFtZVRvRWZmZWN0aXZlUHJvcGVydHlNYXAgPSB7
fTsKICAgICAgICAgdGhpcy5fdXNlZENTU1ZhcmlhYmxlcyA9IG5ldyBTZXQ7CisgICAgICAgIHRo
aXMuX2FsbENTU1ZhcmlhYmxlcyA9IG5ldyBTZXQ7CiAKICAgICAgICAgdGhpcy5fcGVuZGluZ1Jl
ZnJlc2hUYXNrID0gbnVsbDsKICAgICAgICAgdGhpcy5yZWZyZXNoKCk7CkBAIC0xMzEsNiArMTMy
LDcgQEAgV0kuRE9NTm9kZVN0eWxlcyA9IGNsYXNzIERPTU5vZGVTdHlsZXMgZXh0ZW5kcyBXSS5P
YmplY3QKICAgICBnZXQgb3JkZXJlZFN0eWxlcygpIHsgcmV0dXJuIHRoaXMuX29yZGVyZWRTdHls
ZXM7IH0KICAgICBnZXQgY29tcHV0ZWRQcmltYXJ5Rm9udCgpIHsgcmV0dXJuIHRoaXMuX2NvbXB1
dGVkUHJpbWFyeUZvbnQ7IH0KICAgICBnZXQgdXNlZENTU1ZhcmlhYmxlcygpIHsgcmV0dXJuIHRo
aXMuX3VzZWRDU1NWYXJpYWJsZXM7IH0KKyAgICBnZXQgYWxsQ1NTVmFyaWFibGVzKCkgeyByZXR1
cm4gdGhpcy5fYWxsQ1NTVmFyaWFibGVzOyB9CiAKICAgICBnZXQgbmVlZHNSZWZyZXNoKCkKICAg
ICB7CkBAIC03NjksNyArNzcxLDcgQEAgV0kuRE9NTm9kZVN0eWxlcyA9IGNsYXNzIERPTU5vZGVT
dHlsZXMgZXh0ZW5kcyBXSS5PYmplY3QKIAogICAgICAgICB0aGlzLl9hc3NvY2lhdGVSZWxhdGVk
UHJvcGVydGllcyhjYXNjYWRlT3JkZXJlZFN0eWxlRGVjbGFyYXRpb25zLCB0aGlzLl9wcm9wZXJ0
eU5hbWVUb0VmZmVjdGl2ZVByb3BlcnR5TWFwKTsKICAgICAgICAgdGhpcy5fbWFya092ZXJyaWRk
ZW5Qcm9wZXJ0aWVzKGNhc2NhZGVPcmRlcmVkU3R5bGVEZWNsYXJhdGlvbnMsIHRoaXMuX3Byb3Bl
cnR5TmFtZVRvRWZmZWN0aXZlUHJvcGVydHlNYXApOwotICAgICAgICB0aGlzLl9jb2xsZWN0VXNl
ZENTU1ZhcmlhYmxlcyhjYXNjYWRlT3JkZXJlZFN0eWxlRGVjbGFyYXRpb25zKTsKKyAgICAgICAg
dGhpcy5fY29sbGVjdENTU1ZhcmlhYmxlcyhjYXNjYWRlT3JkZXJlZFN0eWxlRGVjbGFyYXRpb25z
KTsKIAogICAgICAgICBmb3IgKGxldCBwc2V1ZG9FbGVtZW50SW5mbyBvZiB0aGlzLl9wc2V1ZG9F
bGVtZW50cy52YWx1ZXMoKSkgewogICAgICAgICAgICAgcHNldWRvRWxlbWVudEluZm8ub3JkZXJl
ZFN0eWxlcyA9IHRoaXMuX2NvbGxlY3RTdHlsZXNJbkNhc2NhZGVPcmRlcihwc2V1ZG9FbGVtZW50
SW5mby5tYXRjaGVkUnVsZXMsIG51bGwsIG51bGwpOwpAQCAtOTQ1LDEyICs5NDcsMTYgQEAgV0ku
RE9NTm9kZVN0eWxlcyA9IGNsYXNzIERPTU5vZGVTdHlsZXMgZXh0ZW5kcyBXSS5PYmplY3QKICAg
ICAgICAgfQogICAgIH0KIAotICAgIF9jb2xsZWN0VXNlZENTU1ZhcmlhYmxlcyhzdHlsZXMpCisg
ICAgX2NvbGxlY3RDU1NWYXJpYWJsZXMoc3R5bGVzKQogICAgIHsKKyAgICAgICAgdGhpcy5fYWxs
Q1NTVmFyaWFibGVzID0gbmV3IFNldDsKICAgICAgICAgdGhpcy5fdXNlZENTU1ZhcmlhYmxlcyA9
IG5ldyBTZXQ7CiAKICAgICAgICAgZm9yIChsZXQgc3R5bGUgb2Ygc3R5bGVzKSB7CiAgICAgICAg
ICAgICBmb3IgKGxldCBwcm9wZXJ0eSBvZiBzdHlsZS5lbmFibGVkUHJvcGVydGllcykgeworICAg
ICAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5pc1ZhcmlhYmxlKQorICAgICAgICAgICAgICAgICAg
ICB0aGlzLl9hbGxDU1NWYXJpYWJsZXMuYWRkKHByb3BlcnR5Lm5hbWUpOworCiAgICAgICAgICAg
ICAgICAgbGV0IHZhcmlhYmxlcyA9IFdJLkNTU1Byb3BlcnR5LmZpbmRWYXJpYWJsZU5hbWVzKHBy
b3BlcnR5LnZhbHVlKTsKIAogICAgICAgICAgICAgICAgIGlmICghc3R5bGUuaW5oZXJpdGVkKSB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9T
cHJlYWRzaGVldFN0eWxlUHJvcGVydHkuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9WaWV3cy9TcHJlYWRzaGVldFN0eWxlUHJvcGVydHkuanMKaW5kZXggZDk5NzIzMzRj
NDRjYTRiYWZkMjYwMDk2MThkOWEzNWQxYTI1NjBlMC4uNmI3Yjg1MDMzNzcwNzIyZjEwODA5ZDZj
MDQ1NmJkM2E1ZDQyZDVhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvVmlld3MvU3ByZWFkc2hlZXRTdHlsZVByb3BlcnR5LmpzCisrKyBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NwcmVhZHNoZWV0U3R5bGVQcm9wZXJ0
eS5qcwpAQCAtMzM5LDYgKzMzOSwxOSBAQCBXSS5TcHJlYWRzaGVldFN0eWxlUHJvcGVydHkgPSBj
bGFzcyBTcHJlYWRzaGVldFN0eWxlUHJvcGVydHkgZXh0ZW5kcyBXSS5PYmplY3QKICAgICAgICAg
cmV0dXJuIG1hdGNoZXM7CiAgICAgfQogCisgICAgYWRkaXRpb25hbEZ1bmN0aW9uVmFsdWVDb21w
bGV0aW9uc1Byb3ZpZGVyKGZ1bmN0aW9uTmFtZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoZnVu
Y3Rpb25OYW1lKSB7CisgICAgICAgIGNhc2UgInZhciI6CisgICAgICAgICAgICByZXR1cm4gQXJy
YXkuZnJvbSh0aGlzLl9wcm9wZXJ0eS5vd25lclN0eWxlLm5vZGVTdHlsZXMuYWxsQ1NTVmFyaWFi
bGVzKTsKKworICAgICAgICBjYXNlICJhdHRyIjoKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9w
cm9wZXJ0eS5vd25lclN0eWxlLm5vZGUuYXR0cmlidXRlcygpLm1hcCgoYXR0cmlidXRlKSA9PiBh
dHRyaWJ1dGUubmFtZSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gW107CisgICAgfQor
CiAgICAgLy8gU3ByZWFkc2hlZXRUZXh0RmllbGQgZGVsZWdhdGUKIAogICAgIHNwcmVhZHNoZWV0
VGV4dEZpZWxkV2lsbFN0YXJ0RWRpdGluZyh0ZXh0RmllbGQpCkBAIC05MTIsOSArOTI1LDggQEAg
V0kuU3ByZWFkc2hlZXRTdHlsZVByb3BlcnR5ID0gY2xhc3MgU3ByZWFkc2hlZXRTdHlsZVByb3Bl
cnR5IGV4dGVuZHMgV0kuT2JqZWN0CiAKICAgICBfdmFsdWVDb21wbGV0aW9uRGF0YVByb3ZpZGVy
KHRleHQsIHthbGxvd0VtcHR5UHJlZml4fSA9IHt9KQogICAgIHsKLSAgICAgICAgLy8gRklYTUU6
IDx3ZWJraXQub3JnL2IvMjI3MDk4PiBTdHlsZXMgc2lkZWJhciBwYW5lbCBzaG91bGQgYXV0b2Nv
bXBsZXRlIGB2YXIoKWAgdmFsdWVzLgogICAgICAgICAvLyBGSVhNRTogPHdlYmtpdC5vcmcvYi8y
Mjc0MTE+IFN0eWxlcyBzaWRlYmFyIHBhbmVsIHNob3VsZCBzdXBwb3J0IG1pZGxpbmUgYW5kIG11
bHRpbGluZSBjb21wbGV0aW9ucy4KLSAgICAgICAgcmV0dXJuIFdJLkNTU0tleXdvcmRDb21wbGV0
aW9ucy5mb3JQYXJ0aWFsUHJvcGVydHlWYWx1ZSh0ZXh0LCB0aGlzLl9uYW1lRWxlbWVudC50ZXh0
Q29udGVudC50cmltKCkpOworICAgICAgICByZXR1cm4gV0kuQ1NTS2V5d29yZENvbXBsZXRpb25z
LmZvclBhcnRpYWxQcm9wZXJ0eVZhbHVlKHRleHQsIHRoaXMuX25hbWVFbGVtZW50LnRleHRDb250
ZW50LnRyaW0oKSwge2FkZGl0aW9uYWxGdW5jdGlvblZhbHVlQ29tcGxldGlvbnNQcm92aWRlcjog
dGhpcy5hZGRpdGlvbmFsRnVuY3Rpb25WYWx1ZUNvbXBsZXRpb25zUHJvdmlkZXIuYmluZCh0aGlz
KX0pOwogICAgIH0KIAogICAgIF9zZXR1cEp1bXBUb1N5bWJvbChlbGVtZW50KQpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDY4
NjBjMjM4NDQ2MmE0MmRjYzhkYjZiNmQ0Nzk0YmZhMjRiNWQ5YzIuLmI1ZWZiZDVhYTc2MmNlNTYz
NDEyYTBkZmUyNGVmOTU5OTAyMWUwYzMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxv
ZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAyMS0wNy0w
MiAgUmF6dmFuIENhbGltYW4gIDxyY2FsaW1hbkBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIElu
c3BlY3RvcjogU3R5bGVzOiBzaG91bGQgYXV0b2NvbXBsZXRlIGB2YXIoKWAgYW5kIGBhdHRyKClg
IHZhbHVlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjI3MDk4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83OTQxODI0Nz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBEZXZpbiBSb3Vzc28uCisKKyAgICAgICAgQWRkIHRlc3QgY2FzZXMgZm9yIGNvbnRl
eHR1YWwgQ1NTIGZ1bmN0aW9uIHZhbHVlIGNvbXBsZXRpb24uCisKKyAgICAgICAgKiBpbnNwZWN0
b3IvdW5pdC10ZXN0cy9jc3Mta2V5d29yZC1jb21wbGV0aW9ucy1leHBlY3RlZC50eHQ6CisgICAg
ICAgICogaW5zcGVjdG9yL3VuaXQtdGVzdHMvY3NzLWtleXdvcmQtY29tcGxldGlvbnMuaHRtbDoK
KwogMjAyMS0wNy0wMiAgWGFiaWVyIFJvZHJpZ3VleiBDYWx2YXIgIDxjYWx2YXJpc0BpZ2FsaWEu
Y29tPgogCiAgICAgICAgIFtHVEtdIG1lZGlhL2V2ZW50LWF0dHJpYnV0ZXMuaHRtbCBmYWlscyBp
ZiBtaXhlciBpcyBub3QgYXQgMTAwJQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9y
L3VuaXQtdGVzdHMvY3NzLWtleXdvcmQtY29tcGxldGlvbnMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvaW5zcGVjdG9yL3VuaXQtdGVzdHMvY3NzLWtleXdvcmQtY29tcGxldGlvbnMtZXhwZWN0
ZWQudHh0CmluZGV4IDVkMGRkMzZiYmQyYjYzZGRhNzgwNDEwOWVmZTBlNmJhYmEzN2M5OTkuLjE0
Y2Q2ZWMzODNhNGVkYjI3MWM3MGNkY2E4NmM2OGYzZjVkMWY1ZjIgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL2luc3BlY3Rvci91bml0LXRlc3RzL2Nzcy1rZXl3b3JkLWNvbXBsZXRpb25zLWV4cGVj
dGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvdW5pdC10ZXN0cy9jc3Mta2V5d29y
ZC1jb21wbGV0aW9ucy1leHBlY3RlZC50eHQKQEAgLTUxLDMgKzUxLDIzIEBAIFBBU1M6IEFsbCBl
eHBlY3RlZCBjb21wbGV0aW9ucyB3ZXJlIHByZXNlbnQuCiBQQVNTOiBFeHBlY3RlZCByZXN1bHQg
cHJlZml4IHRvIGJlICIiCiBQQVNTOiBBbGwgZXhwZWN0ZWQgY29tcGxldGlvbnMgd2VyZSBwcmVz
ZW50LgogCistLSBSdW5uaW5nIHRlc3QgY2FzZTogV0kuQ1NTS2V5d29yZENvbXBsZXRpb25zLmZv
clBhcnRpYWxQcm9wZXJ0eVZhbHVlLkF0dHJpYnV0ZUZ1bmN0aW9uCitQQVNTOiBFeHBlY3RlZCBy
ZXN1bHQgcHJlZml4IHRvIGJlICIiCitQQVNTOiBBbGwgZXhwZWN0ZWQgY29tcGxldGlvbnMgd2Vy
ZSBwcmVzZW50LgorCistLSBSdW5uaW5nIHRlc3QgY2FzZTogV0kuQ1NTS2V5d29yZENvbXBsZXRp
b25zLmZvclBhcnRpYWxQcm9wZXJ0eVZhbHVlLk1pZExpbmVBdHRyaWJ1dGVGdW5jdGlvbgorUEFT
UzogRXhwZWN0ZWQgcmVzdWx0IHByZWZpeCB0byBiZSAiYyIKK1BBU1M6IEFsbCBleHBlY3RlZCBj
b21wbGV0aW9ucyB3ZXJlIHByZXNlbnQuCisKKy0tIFJ1bm5pbmcgdGVzdCBjYXNlOiBXSS5DU1NL
ZXl3b3JkQ29tcGxldGlvbnMuZm9yUGFydGlhbFByb3BlcnR5VmFsdWUuVmFyaWFibGVGdW5jdGlv
bgorUEFTUzogRXhwZWN0ZWQgcmVzdWx0IHByZWZpeCB0byBiZSAiIgorUEFTUzogQWxsIGV4cGVj
dGVkIGNvbXBsZXRpb25zIHdlcmUgcHJlc2VudC4KKworLS0gUnVubmluZyB0ZXN0IGNhc2U6IFdJ
LkNTU0tleXdvcmRDb21wbGV0aW9ucy5mb3JQYXJ0aWFsUHJvcGVydHlWYWx1ZS5WYXJpYWJsZUZ1
bmN0aW9uRmlsdGVyZWQKK1BBU1M6IEV4cGVjdGVkIHJlc3VsdCBwcmVmaXggdG8gYmUgIi0tbyIK
K1BBU1M6IEFsbCBleHBlY3RlZCBjb21wbGV0aW9ucyB3ZXJlIHByZXNlbnQuCisKKy0tIFJ1bm5p
bmcgdGVzdCBjYXNlOiBXSS5DU1NLZXl3b3JkQ29tcGxldGlvbnMuZm9yUGFydGlhbFByb3BlcnR5
VmFsdWUuVmFyaWFibGVGdW5jdGlvbkluQ2FsYworUEFTUzogRXhwZWN0ZWQgcmVzdWx0IHByZWZp
eCB0byBiZSAiIgorUEFTUzogQWxsIGV4cGVjdGVkIGNvbXBsZXRpb25zIHdlcmUgcHJlc2VudC4K
KwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3VuaXQtdGVzdHMvY3NzLWtleXdv
cmQtY29tcGxldGlvbnMuaHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci91bml0LXRlc3RzL2Nz
cy1rZXl3b3JkLWNvbXBsZXRpb25zLmh0bWwKaW5kZXggMDZhNzUzMzAwNzIwNDdlYzM5YTNhOTc4
NDMyNzc3MzdmMDIyNGM5Mi4uYzFiMmVjY2UxODFjZDM0ZTUxY2RmNGQ1MjA4OTAxOWU0YmU5ODVi
MyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3VuaXQtdGVzdHMvY3NzLWtleXdv
cmQtY29tcGxldGlvbnMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvdW5pdC10ZXN0
cy9jc3Mta2V5d29yZC1jb21wbGV0aW9ucy5odG1sCkBAIC02Niw3ICs2Niw3IEBAIGZ1bmN0aW9u
IHRlc3QoKQogICAgICAgICBleHBlY3RlZENvbXBsZXRpb25zOiBbInJhbmdlIl0sCiAgICAgfSk7
CiAKLSAgICBmdW5jdGlvbiBhZGRUZXN0Rm9yUGFydGlhbFByb3BlcnR5VmFsdWUoe25hbWUsIGRl
c2NyaXB0aW9uLCBwcm9wZXJ0eU5hbWUsIHRleHQsIGNhcmV0UG9zaXRpb24sIGV4cGVjdGVkUHJl
Zml4LCBleHBlY3RlZENvbXBsZXRpb25zfSkgeworICAgIGZ1bmN0aW9uIGFkZFRlc3RGb3JQYXJ0
aWFsUHJvcGVydHlWYWx1ZSh7bmFtZSwgZGVzY3JpcHRpb24sIHByb3BlcnR5TmFtZSwgdGV4dCwg
Y2FyZXRQb3NpdGlvbiwgZXhwZWN0ZWRQcmVmaXgsIGV4cGVjdGVkQ29tcGxldGlvbnMsIGFkZGl0
aW9uYWxGdW5jdGlvblZhbHVlQ29tcGxldGlvbnNQcm92aWRlcn0pIHsKICAgICAgICAgc3VpdGUu
YWRkVGVzdENhc2UoewogICAgICAgICAgICAgbmFtZSwKICAgICAgICAgICAgIGRlc2NyaXB0aW9u
LApAQCAtNzQsOCArNzQsOSBAQCBmdW5jdGlvbiB0ZXN0KCkKICAgICAgICAgICAgICAgICBjYXJl
dFBvc2l0aW9uID8/PSB0ZXh0Lmxlbmd0aDsKICAgICAgICAgICAgICAgICBleHBlY3RlZFByZWZp
eCA/Pz0gdGV4dDsKICAgICAgICAgICAgICAgICBleHBlY3RlZENvbXBsZXRpb25zID8/PSBbXTsK
KyAgICAgICAgICAgICAgICBhZGRpdGlvbmFsRnVuY3Rpb25WYWx1ZUNvbXBsZXRpb25zUHJvdmlk
ZXIgPz89ICgpID0+IHt9OwogCi0gICAgICAgICAgICAgICAgbGV0IGNvbXBsZXRpb25SZXN1bHRz
ID0gV0kuQ1NTS2V5d29yZENvbXBsZXRpb25zLmZvclBhcnRpYWxQcm9wZXJ0eVZhbHVlKHRleHQs
IHByb3BlcnR5TmFtZSwge2NhcmV0UG9zaXRpb259KTsKKyAgICAgICAgICAgICAgICBsZXQgY29t
cGxldGlvblJlc3VsdHMgPSBXSS5DU1NLZXl3b3JkQ29tcGxldGlvbnMuZm9yUGFydGlhbFByb3Bl
cnR5VmFsdWUodGV4dCwgcHJvcGVydHlOYW1lLCB7Y2FyZXRQb3NpdGlvbiwgYWRkaXRpb25hbEZ1
bmN0aW9uVmFsdWVDb21wbGV0aW9uc1Byb3ZpZGVyfSk7CiAgICAgICAgICAgICAgICAgSW5zcGVj
dG9yVGVzdC5leHBlY3RFcXVhbChjb21wbGV0aW9uUmVzdWx0cy5wcmVmaXgsIGV4cGVjdGVkUHJl
Zml4LCBgRXhwZWN0ZWQgcmVzdWx0IHByZWZpeCB0byBiZSAiJHtleHBlY3RlZFByZWZpeH0iYCk7
CiAKICAgICAgICAgICAgICAgICAvLyBCZWNhdXNlIGV4cGVjdGVkIGNvbXBsZXRpb25zIGNvdWxk
IGJlIGFkZGVkIGF0IGFueSB0aW1lLCBqdXN0IG1ha2Ugc3VyZSB0aGUgbGlzdCBjb250YWlucyBv
dXIgZXhwZWN0ZWQgY29tcGxldGlvbnMsIGluc3RlYWQgb2YgZW5mb3JjaW5nIGFuIGV4YWN0IG1h
dGNoIGJldHdlZW4gZXhwZWN0YXRpb25zIGFuZCByZWFsaXR5LgpAQCAtMTc2LDYgKzE3Nyw1OCBA
QCBmdW5jdGlvbiB0ZXN0KCkKICAgICAgICAgZXhwZWN0ZWRDb21wbGV0aW9uczogWyJhdXRvLWZp
bGwiLCAiYXV0by1maXQiLCAidmFyKCkiXSwKICAgICB9KTsKIAorICAgIC8vIGBhdHRyKHxgCisg
ICAgYWRkVGVzdEZvclBhcnRpYWxQcm9wZXJ0eVZhbHVlKHsKKyAgICAgICAgbmFtZTogIldJLkNT
U0tleXdvcmRDb21wbGV0aW9ucy5mb3JQYXJ0aWFsUHJvcGVydHlWYWx1ZS5BdHRyaWJ1dGVGdW5j
dGlvbiIsCisgICAgICAgIGRlc2NyaXB0aW9uOiAiVGVzdCB0aGF0IGF0dHJpYnV0ZSBmdW5jdGlv
biB2YWx1ZSBjb21wbGV0aW9ucyBmcm9tIHRoZSBjdXN0b20gcHJvdmlkZXIgYXJlIHVzZWQuIiwK
KyAgICAgICAgdGV4dDogImF0dHIoIiwKKyAgICAgICAgZXhwZWN0ZWRQcmVmaXg6ICIiLAorICAg
ICAgICBleHBlY3RlZENvbXBsZXRpb25zOiBbImNsYXNzIiwgImlkIiwgInZhcigpIl0sCisgICAg
ICAgIGFkZGl0aW9uYWxGdW5jdGlvblZhbHVlQ29tcGxldGlvbnNQcm92aWRlcjogKCkgPT4gWyJj
bGFzcyIsICJpZCJdLAorICAgIH0pOworCisgICAgLy8gYGF0dHIoY3wpYAorICAgIGFkZFRlc3RG
b3JQYXJ0aWFsUHJvcGVydHlWYWx1ZSh7CisgICAgICAgIG5hbWU6ICJXSS5DU1NLZXl3b3JkQ29t
cGxldGlvbnMuZm9yUGFydGlhbFByb3BlcnR5VmFsdWUuTWlkTGluZUF0dHJpYnV0ZUZ1bmN0aW9u
IiwKKyAgICAgICAgZGVzY3JpcHRpb246ICJUZXN0IHRoYXQgYXR0cmlidXRlIGZ1bmN0aW9uIHZh
bHVlIGNvbXBsZXRpb25zIGlzIGluc2lkZSBhIGZ1bmN0aW9uIHdpdGggYSBjbG9zaW5nIHBhcmVu
dGhlc2lzIHVzZXMgY29tcGxldGlvbnMgZnJvbSB0aGUgY3VzdG9tIHByb3ZpZGVyIiwKKyAgICAg
ICAgdGV4dDogImF0dHIoYykiLAorICAgICAgICBjYXJldFBvc2l0aW9uOiA2LAorICAgICAgICBl
eHBlY3RlZFByZWZpeDogImMiLAorICAgICAgICBleHBlY3RlZENvbXBsZXRpb25zOiBbImNsYXNz
Il0sCisgICAgICAgIGFkZGl0aW9uYWxGdW5jdGlvblZhbHVlQ29tcGxldGlvbnNQcm92aWRlcjog
KCkgPT4gWyJjbGFzcyIsICJpZCJdLAorICAgIH0pOworCisgICAgLy8gYHZhcih8YAorICAgIGFk
ZFRlc3RGb3JQYXJ0aWFsUHJvcGVydHlWYWx1ZSh7CisgICAgICAgIG5hbWU6ICJXSS5DU1NLZXl3
b3JkQ29tcGxldGlvbnMuZm9yUGFydGlhbFByb3BlcnR5VmFsdWUuVmFyaWFibGVGdW5jdGlvbiIs
CisgICAgICAgIGRlc2NyaXB0aW9uOiAiVGVzdCB0aGF0IHZhcmlhYmxlIGZ1bmN0aW9uIHZhbHVl
IGNvbXBsZXRpb25zIGZyb20gdGhlIGN1c3RvbSBwcm92aWRlciBhcmUgdXNlZC4iLAorICAgICAg
ICB0ZXh0OiAidmFyKCIsCisgICAgICAgIGV4cGVjdGVkUHJlZml4OiAiIiwKKyAgICAgICAgZXhw
ZWN0ZWRDb21wbGV0aW9uczogWyItLW9uZSIsICItLXR3byJdLAorICAgICAgICBhZGRpdGlvbmFs
RnVuY3Rpb25WYWx1ZUNvbXBsZXRpb25zUHJvdmlkZXI6ICgpID0+IFsiLS1vbmUiLCAiLS10d28i
XSwKKyAgICB9KTsKKworICAgIC8vIGB2YXIoLS1vfGAKKyAgICBhZGRUZXN0Rm9yUGFydGlhbFBy
b3BlcnR5VmFsdWUoeworICAgICAgICBuYW1lOiAiV0kuQ1NTS2V5d29yZENvbXBsZXRpb25zLmZv
clBhcnRpYWxQcm9wZXJ0eVZhbHVlLlZhcmlhYmxlRnVuY3Rpb25GaWx0ZXJlZCIsCisgICAgICAg
IGRlc2NyaXB0aW9uOiAiVGVzdCB0aGF0IHZhcmlhYmxlIGZ1bmN0aW9uIHZhbHVlIGNvbXBsZXRp
b25zIGZyb20gdGhlIGN1c3RvbSBwcm92aWRlciBhcmUgZmlsdGVyZWQuIiwKKyAgICAgICAgdGV4
dDogInZhcigtLW8iLAorICAgICAgICBleHBlY3RlZFByZWZpeDogIi0tbyIsCisgICAgICAgIGV4
cGVjdGVkQ29tcGxldGlvbnM6IFsiLS1vbmUiXSwKKyAgICAgICAgYWRkaXRpb25hbEZ1bmN0aW9u
VmFsdWVDb21wbGV0aW9uc1Byb3ZpZGVyOiAoKSA9PiBbIi0tb25lIiwgIi0tdHdvIl0sCisgICAg
fSk7CisKKyAgICAvLyBgY2FsYygxICsgdmFyKHwpKWAKKyAgICBhZGRUZXN0Rm9yUGFydGlhbFBy
b3BlcnR5VmFsdWUoeworICAgICAgICBuYW1lOiAiV0kuQ1NTS2V5d29yZENvbXBsZXRpb25zLmZv
clBhcnRpYWxQcm9wZXJ0eVZhbHVlLlZhcmlhYmxlRnVuY3Rpb25JbkNhbGMiLAorICAgICAgICBk
ZXNjcmlwdGlvbjogIlRlc3QgdGhhdCB2YXJpYWJsZSBmdW5jdGlvbiB2YWx1ZSBjb21wbGV0aW9u
cyBmcm9tIHRoZSBjdXN0b20gcHJvdmlkZXIgYXJlIHVzZWQgd2hlbiB0aGUgdmFyKCkgaXMgbmVz
dGVkIGluc2lkZSBhIGNhbGMoKSIsCisgICAgICAgIHRleHQ6ICJjYWxjKDEgKyB2YXIoKSkiLAor
ICAgICAgICBjYXJldFBvc2l0aW9uOiAxMywKKyAgICAgICAgZXhwZWN0ZWRQcmVmaXg6ICIiLAor
ICAgICAgICBleHBlY3RlZENvbXBsZXRpb25zOiBbIi0tb25lIiwgIi0tdHdvIl0sCisgICAgICAg
IGFkZGl0aW9uYWxGdW5jdGlvblZhbHVlQ29tcGxldGlvbnNQcm92aWRlcjogKCkgPT4gWyItLW9u
ZSIsICItLXR3byJdLAorICAgIH0pOworCiAgICAgc3VpdGUucnVuVGVzdENhc2VzQW5kRmluaXNo
KCk7CiB9CiA8L3NjcmlwdD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>