<?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>50565</bug_id>
          
          <creation_ts>2010-12-06 05:59:18 -0800</creation_ts>
          <short_desc>Web Inspector: Enable CSS property editing name/value-wise (like Firebug does)</short_desc>
          <delta_ts>2010-12-13 07:08:01 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexander Pavlov (apavlov)">apavlov</reporter>
          <assigned_to name="Alexander Pavlov (apavlov)">apavlov</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>317578</commentid>
    <comment_count>0</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-12-06 05:59:18 -0800</bug_when>
    <thetext>Currently, every CSS property is represented by a solid chunk of text containing the entire syntax. A more usable option is to have separate input fields both for the property name and value. Generally, many users want the CSS editing UX to be closer to the Firebug&apos;s.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317607</commentid>
    <comment_count>1</comment_count>
      <attachid>75691</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-12-06 07:21:33 -0800</bug_when>
    <thetext>Created attachment 75691
[PATCH] Suggested solution</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317683</commentid>
    <comment_count>2</comment_count>
      <attachid>75691</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-12-06 09:55:59 -0800</bug_when>
    <thetext>Comment on attachment 75691
[PATCH] Suggested solution

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

Not quite a thorough review. Normally I apply these kinds of UI change patches to
get a feel for how things work. It would help if you included a video, or include
a nice description in the ChangeLog! I&apos;ll try to apply this later today!

&gt; WebCore/inspector/front-end/StylesSidebarPane.js:1471
&gt; +        if (!selectElement)
&gt; +            selectElement = this.nameElement; // no arguments passed in - edit the name element by default

Nit: Comment as a sentence. Capital and period.

&gt; WebCore/inspector/front-end/StylesSidebarPane.js:1539
&gt; +        }

^^ These two functions (nameFinishHandler and valueFinishHandler) have very similar
code. Only the first condition is different. They should share more code.

&gt; WebCore/inspector/front-end/inspector.js:1998
&gt; +    function keyDownEventListener(event) {

Nit: brace on next line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318029</commentid>
    <comment_count>3</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-12-06 20:23:28 -0800</bug_when>
    <thetext>Arg, I didn&apos;t get around to applying this today. I&apos;ll update+build overnight, and
try to apply it tomorrow morning.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318255</commentid>
    <comment_count>4</comment_count>
      <attachid>75824</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-12-07 09:36:51 -0800</bug_when>
    <thetext>Created attachment 75824
[PATCH] Nits fixed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318291</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-07 10:19:43 -0800</bug_when>
    <thetext>Attachment 75824 did not pass style-queue:

Failed to run &quot;[u&apos;git&apos;, u&apos;reset&apos;, u&apos;--hard&apos;, u&apos;refs/remotes/trunk&apos;]&quot; exit_code: 128
error: Could not write new index file.
fatal: Could not reset index file to revision &apos;refs/remotes/trunk&apos;.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318329</commentid>
    <comment_count>6</comment_count>
      <attachid>75691</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-12-07 11:06:33 -0800</bug_when>
    <thetext>Comment on attachment 75691
[PATCH] Suggested solution

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

Alexander this patch feels really good! It is much easier to tab complete a property
and go into a value! I did manage to hit an ASSERT, but I&apos;m not sure if it was related
to your changes, and I couldn&apos;t reproduce it. I would like to know if you think you
can remove the small, but noticeable, delay between tabs and the UI updating.

In case you think you can deduce how the ASSERT could happen, the ASSERT was:

  InspectorStyleSheet.cpp:192: (setPropertyText)
  if (overwrite) {
    ASSERT(index &lt; allProperties.size());

I will r- for now so some of the above comments can be addressed, but I really like
the way this patch is going.


&gt; WebCore/inspector/front-end/StylesSidebarPane.js:1744
&gt;          // Make the Changes and trigger the moveToNextCallback after updating

Nit: Could you fix this old code and add a period on the comment.

&gt; WebCore/inspector/front-end/StylesSidebarPane.js:1748
&gt; +        if (userInput !== previousContent &amp;&amp; !this._newProperty || shouldCommitNewProperty) { // only if something changed, or adding a new property and need to commit it

Nit: I don&apos;t think comment actually improves anything.
Also, the condition could use more parens to be explicit. For example:

  false &amp;&amp; false || true    - is true, but requires the programmer to remember the precedence
  (false &amp;&amp; false) || true  - is the same, but much easier to read.

&gt; WebCore/inspector/front-end/StylesSidebarPane.js:1750
&gt; +            var propertyText = blankInput || (this._newProperty &amp;&amp; /^\s*$/.test(this.valueElement.textContent)) ? &quot;&quot; : (isEditingName ? (userInput.replace(/:/g, &quot;&quot;) + &quot;: &quot; + this.valueElement.textContent) : (this.nameElement.textContent + &quot;: &quot; + userInput));

Call me old fashioned but nested ternaries is a bit messy. I think this 
would be much clearer as an if/else chain.

&gt; WebCore/inspector/front-end/StylesSidebarPane.js:1792
&gt; +                if (alreadyNew &amp;&amp; !valueChanged &amp;&amp; (isEditingName ^ moveDirection === &quot;backward&quot;))

Nice use of XOR here. I think this could benefit from either another set of parens
to make the precedence explicit:

  (isEditingName ^ (moveDirection === &quot;backward&quot;))

Or storing the move check into a local:

  var isMovingBackward = moveDirection === &quot;backward&quot;;
  ... (isEditingName ^ isMovingBackward) ...

Similar to what you did above with `var moveToOther`

&gt; WebCore/inspector/front-end/inspector.js:2017
&gt; +        } else if (result &amp;&amp; result.indexOf(&quot;move-&quot;) === 0) {
&gt; +            moveDirection = result.substring(5);
&gt; +            if (event.keyIdentifier !== &quot;U+0009&quot;) {
&gt; +                // Emulate &quot;Tab&quot; keydown event.
&gt; +                var evt = document.createEvent(&quot;KeyboardEvent&quot;);
&gt; +                evt.initKeyboardEvent(&quot;keydown&quot;, true, true, null, &quot;U+0009&quot;, &quot;&quot;);
&gt; +                element.dispatchEvent(evt);
&gt; +            }
&gt; +        }

We don&apos;t normally emulate events. We should just be able to directly call the code
that the simulated keydown would run. Can you do that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318343</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-07 11:20:47 -0800</bug_when>
    <thetext>Attachment 75824 did not pass style-queue:

Failed to run &quot;[u&apos;git&apos;, u&apos;reset&apos;, u&apos;--hard&apos;, u&apos;refs/remotes/trunk&apos;]&quot; exit_code: 128
error: Could not write new index file.
fatal: Could not reset index file to revision &apos;refs/remotes/trunk&apos;.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318389</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-07 12:22:12 -0800</bug_when>
    <thetext>Attachment 75824 did not pass style-queue:

Failed to run &quot;[u&apos;git&apos;, u&apos;reset&apos;, u&apos;--hard&apos;, u&apos;refs/remotes/trunk&apos;]&quot; exit_code: 128
error: Could not write new index file.
fatal: Could not reset index file to revision &apos;refs/remotes/trunk&apos;.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318611</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-12-07 21:42:08 -0800</bug_when>
    <thetext>Attachment 75824 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/update-webkit&apos;]&quot; exit_code: 2
Updating OpenSource
Incomplete data: Delta source ended unexpectedly at /usr/lib/git-core/git-svn line 5061

Died at WebKitTools/Scripts/update-webkit line 132.


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318729</commentid>
    <comment_count>10</comment_count>
      <attachid>75889</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-12-08 04:41:31 -0800</bug_when>
    <thetext>Created attachment 75889
[PATCH] Comments addressed. Also added tabbing between all rules shown for the given element</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318735</commentid>
    <comment_count>11</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-12-08 05:06:00 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 75691 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=75691&amp;action=review
&gt; 
&gt; Alexander this patch feels really good! It is much easier to tab complete a property
&gt; and go into a value! I did manage to hit an ASSERT, but I&apos;m not sure if it was related
&gt; to your changes, and I couldn&apos;t reproduce it. I would like to know if you think you
&gt; can remove the small, but noticeable, delay between tabs and the UI updating.

I will look into what&apos;s going on. The delay is also noticeable for me in a debug build.

&gt; In case you think you can deduce how the ASSERT could happen, the ASSERT was:
&gt; 
&gt;   InspectorStyleSheet.cpp:192: (setPropertyText)
&gt;   if (overwrite) {
&gt;     ASSERT(index &lt; allProperties.size());

Could it have been a series of very quick actions (possibly hitting some race)?
 
&gt; I will r- for now so some of the above comments can be addressed, but I really like
&gt; the way this patch is going.

All the comments were addressed in the patch just attached.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318757</commentid>
    <comment_count>12</comment_count>
      <attachid>75889</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-12-08 07:01:01 -0800</bug_when>
    <thetext>Comment on attachment 75889
[PATCH] Comments addressed. Also added tabbing between all rules shown for the given element

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

&gt; WebCore/inspector/front-end/StylesSidebarPane.js:709
&gt; +        var sectionArraysByPseudoId = WebInspector.panels.elements.sidebarPanes.styles.sections;

It might make sense to push it to the Section.js (i.e. implement generic nextSiblint / previousSibling there).

&gt; WebCore/inspector/front-end/StylesSidebarPane.js:1567
&gt; +            var isFieldInputTerminated = isEditingName ? (event.keyIdentifier === &quot;U+00BA&quot; &amp;&amp; event.shiftKey) : (event.keyIdentifier === &quot;U+00BA&quot; &amp;&amp; !event.shiftKey &amp;&amp; shouldCommitValueSemicolon(event.target.textContent, event.target.selectionLeftOffset));

You should use keypress + WebInspector.KeyboardShortcut.Keys.*

&gt; WebCore/inspector/front-end/inspector.js:1922
&gt; +WebInspector.startEditing = function(element, committedCallback, cancelledCallback, context, config)

What is the difference between customFinishHandler and committedCallback? They should either all be in config or outside.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318798</commentid>
    <comment_count>13</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-12-08 08:36:51 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 75889 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=75889&amp;action=review
&gt; 
&gt; &gt; WebCore/inspector/front-end/StylesSidebarPane.js:709
&gt; &gt; +        var sectionArraysByPseudoId = WebInspector.panels.elements.sidebarPanes.styles.sections;
&gt; 
&gt; It might make sense to push it to the Section.js (i.e. implement generic nextSiblint / previousSibling there).

Done.

&gt; &gt; WebCore/inspector/front-end/StylesSidebarPane.js:1567
&gt; &gt; +            var isFieldInputTerminated = isEditingName ? (event.keyIdentifier === &quot;U+00BA&quot; &amp;&amp; event.shiftKey) : (event.keyIdentifier === &quot;U+00BA&quot; &amp;&amp; !event.shiftKey &amp;&amp; shouldCommitValueSemicolon(event.target.textContent, event.target.selectionLeftOffset));
&gt; 
&gt; You should use keypress + WebInspector.KeyboardShortcut.Keys.*

keypress is not generated for the Tab key

&gt; &gt; WebCore/inspector/front-end/inspector.js:1922
&gt; &gt; +WebInspector.startEditing = function(element, committedCallback, cancelledCallback, context, config)
&gt; 
&gt; What is the difference between customFinishHandler and committedCallback? They should either all be in config or outside.

Changed method signature.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318803</commentid>
    <comment_count>14</comment_count>
      <attachid>75907</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-12-08 08:43:52 -0800</bug_when>
    <thetext>Created attachment 75907
[PATCH] Comments from pfeldman addressed, WebInspector.startEditing() signature changed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318830</commentid>
    <comment_count>15</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-12-08 09:36:12 -0800</bug_when>
    <thetext>&gt; I will look into what&apos;s going on. The delay is also noticeable for me in a debug build.

Thanks!


&gt; &gt; In case you think you can deduce how the ASSERT could happen, the ASSERT was:
&gt; &gt; 
&gt; &gt;   InspectorStyleSheet.cpp:192: (setPropertyText)
&gt; &gt;   if (overwrite) {
&gt; &gt;     ASSERT(index &lt; allProperties.size());
&gt; 
&gt; Could it have been a series of very quick actions (possibly hitting some race)?

I think it is likely that it was a race condition. When it crashed I had just done
a shift tab after changing an invalid rule&apos;s value to the empty string.
I was just trying a bunch of different things =). However, I couldn&apos;t reproduce
this after a restart, which makes me think it might be a race condition.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318838</commentid>
    <comment_count>16</comment_count>
      <attachid>75907</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-12-08 09:50:40 -0800</bug_when>
    <thetext>Comment on attachment 75907
[PATCH] Comments from pfeldman addressed, WebInspector.startEditing() signature changed

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

&gt; WebCore/ChangeLog:13
&gt; +        For CSS property editing, the property name and value have become two fields separated
&gt; +        by a colon (rather than one field containing the full property text.) A user can tab
&gt; +        between the name and value fields forward and backward. A colon typed in the name field
&gt; +        and a semicolon in the value field (unless found inside a string) act as a Tab and focus
&gt; +        the next editable field (while applying the entire property value.) Once a rule boundary
&gt; +        is reached, the editing starts for the next rule selector/previous style blank property.

When I applied this, typing a color or semicolon in those positions did not act as a tab.

&gt; WebCore/inspector/front-end/StylesSidebarPane.js:1549
&gt; +            // FIXME: the &quot;:&quot;/&quot;;&quot; detection does not work for non-US layouts due to the event being keydown rather than keypress.

Is that true? I have a US layout and it wasn&apos;t working for me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318858</commentid>
    <comment_count>17</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-12-08 10:11:02 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 75907 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=75907&amp;action=review
&gt; 
&gt; &gt; WebCore/ChangeLog:13
&gt; &gt; +        For CSS property editing, the property name and value have become two fields separated
&gt; &gt; +        by a colon (rather than one field containing the full property text.) A user can tab
&gt; &gt; +        between the name and value fields forward and backward. A colon typed in the name field
&gt; &gt; +        and a semicolon in the value field (unless found inside a string) act as a Tab and focus
&gt; &gt; +        the next editable field (while applying the entire property value.) Once a rule boundary
&gt; &gt; +        is reached, the editing starts for the next rule selector/previous style blank property.
&gt; 
&gt; When I applied this, typing a color or semicolon in those positions did not act as a tab.
&gt; 
&gt; &gt; WebCore/inspector/front-end/StylesSidebarPane.js:1549
&gt; &gt; +            // FIXME: the &quot;:&quot;/&quot;;&quot; detection does not work for non-US layouts due to the event being keydown rather than keypress.
&gt; 
&gt; Is that true? I have a US layout and it wasn&apos;t working for me.

Hmm... Thanks for the report. You are obviously using a Mac, and I&apos;m on Windows. My guess was that keycodes for the keydown event should roughly be the same but that may easily prove wrong - will look into that tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>319419</commentid>
    <comment_count>18</comment_count>
      <attachid>76052</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-12-09 05:33:49 -0800</bug_when>
    <thetext>Created attachment 76052
[PATCH] Fixed handling of ;/: on Mac

For some reason, Mac reports the ;/: keydown event keyIdentifier as U+003A rather than U+00BA.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>319421</commentid>
    <comment_count>19</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-12-09 05:36:48 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; (In reply to comment #16)
&gt; &gt; &gt; WebCore/inspector/front-end/StylesSidebarPane.js:1549
&gt; &gt; &gt; +            // FIXME: the &quot;:&quot;/&quot;;&quot; detection does not work for non-US layouts due to the event being keydown rather than keypress.
&gt; &gt; 
&gt; &gt; Is that true? I have a US layout and it wasn&apos;t working for me.
&gt; 
&gt; Hmm... Thanks for the report. You are obviously using a Mac, and I&apos;m on Windows. My guess was that keycodes for the keydown event should roughly be the same but that may easily prove wrong - will look into that tomorrow.

Fixed &quot;:&quot;/&quot;;&quot; detection for Mac - using event.keyCode rather than event.keyIdentifier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>319514</commentid>
    <comment_count>20</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-12-09 09:37:23 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; Created an attachment (id=76052) [details]
&gt; [PATCH] Fixed handling of ;/: on Mac
&gt; 
&gt; For some reason, Mac reports the ;/: keydown event keyIdentifier as U+003A rather than U+00BA.

Sounds like a bug! Could you file a bug on this?


&gt; (In reply to comment #17)
&gt; Fixed &quot;:&quot;/&quot;;&quot; detection for Mac - using event.keyCode rather than event.keyIdentifier.

Nice! I&apos;ll check this tomorrow morning and likely approve the patch. Other reviewers
feel free to review this earlier, it looked good to me but I just wanted to verify this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>320197</commentid>
    <comment_count>21</comment_count>
      <attachid>76052</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2010-12-10 09:12:38 -0800</bug_when>
    <thetext>Comment on attachment 76052
[PATCH] Fixed handling of ;/: on Mac

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

r=me, with some comments below. Pavel might want to comment, since they were
originally his comments. Looks and feels slightly better than the first patch.
Thanks!

&gt; WebCore/ChangeLog:13
&gt; +        the next editable field (while applying the entire property value.) Once a rule boundary
&gt; +        is reached, the editing starts for the next rule selector/previous style blank property.

Nit: Starting with &quot;Once a rule...&quot; could be a separate paragraph since it is separate behavior.
And you can simplify this by saying that you now allow for tabbing through all &quot;editable&quot; styles,
even across selector boundaries.

&gt; WebCore/inspector/front-end/inspector.js:1922
&gt; +// Available config fields:
&gt; +// commitHandler: Function - handles editing &quot;commit&quot; outcome
&gt; +// cancelHandler: Function - handles editing &quot;cancel&quot; outcome
&gt; +// customFinishHandler: Function|undefined - custom finish handler for the editing session
&gt; +// multiline: true|false - whether the edited element is multiline
&gt; +WebInspector.startEditing = function(element, config, context)

Why couldn&apos;t context just be included in config? Or is config for entirely optional arguments?
This was Pavel&apos;s review comment, so I&apos;d like to see what he thinks of your approach. If context
is required, I would have preferred the following signature:

  WebInspector.startEditing = function(element, context, options)

To have code that uses it look cleanly like:

  WebInspector.startEditing(elem, tagName, {
      multiline: true,
      commitHandler: handler
      ...
  });</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>321098</commentid>
    <comment_count>22</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-12-13 07:07:22 -0800</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
        M       LayoutTests/ChangeLog
        M       LayoutTests/inspector/console-dir.html
        M       LayoutTests/inspector/styles-add-blank-property.html
        M       WebCore/ChangeLog
        M       WebCore/inspector/front-end/BreakpointsSidebarPane.js
        M       WebCore/inspector/front-end/DataGrid.js
        M       WebCore/inspector/front-end/ElementsTreeOutline.js
        M       WebCore/inspector/front-end/MetricsSidebarPane.js
        M       WebCore/inspector/front-end/ObjectPropertiesSection.js
        M       WebCore/inspector/front-end/Section.js
        M       WebCore/inspector/front-end/SourceFrame.js
        M       WebCore/inspector/front-end/StylesSidebarPane.js
        M       WebCore/inspector/front-end/TextViewer.js
        M       WebCore/inspector/front-end/WatchExpressionsSidebarPane.js
        M       WebCore/inspector/front-end/inspector.css
        M       WebCore/inspector/front-end/inspector.js
        M       WebCore/inspector/front-end/treeoutline.js
Committed r73913</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75691</attachid>
            <date>2010-12-06 07:21:33 -0800</date>
            <delta_ts>2010-12-08 04:41:31 -0800</delta_ts>
            <desc>[PATCH] Suggested solution</desc>
            <filename>firebugcss.patch</filename>
            <type>text/plain</type>
            <size>28062</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">Y29tbWl0IDljZjQxMzdhNTYxNzE0ZTZiNDUyYzJmNTlmODJjYWM5MGE3NDBiYzkKQXV0aG9yOiBB
bGV4YW5kZXIgUGF2bG92IDxhcGF2bG92QGNocm9taXVtLm9yZz4KRGF0ZTogICBGcmkgRGVjIDMg
MjA6MDc6NDMgMjAxMCArMDMwMAoKICAgIEZpcmVidWctbGlrZSBDU1MgZWRpdGluZyBpbiB0aGUg
U3R5bGVzIHBhbmUKCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKaW5kZXggOWRjYzhjNi4uMzAzN2FjYyAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEy
IEBACisyMDEwLTEyLTA2ICBBbGV4YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIElu
c3BlY3RvcjogRW5hYmxlIENTUyBwcm9wZXJ0eSBlZGl0aW5nIG5hbWUvdmFsdWUtd2lzZSAobGlr
ZSBGaXJlYnVnIGRvZXMpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD01MDU2NQorCisgICAgICAgICogaW5zcGVjdG9yL3N0eWxlcy1hZGQtYmxhbmstcHJv
cGVydHkuaHRtbDoKKwogMjAxMC0xMi0wNSAgUm9iIEJ1aXMgIDxyd2xidWlzQGdtYWlsLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBOaWtvbGFzIFppbW1lcm1hbm4uCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLWFkZC1ibGFuay1wcm9wZXJ0eS5odG1sIGIvTGF5
b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy1hZGQtYmxhbmstcHJvcGVydHkuaHRtbAppbmRleCAw
MTNjMzExLi5mZDM2YTk1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVz
LWFkZC1ibGFuay1wcm9wZXJ0eS5odG1sCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHls
ZXMtYWRkLWJsYW5rLXByb3BlcnR5Lmh0bWwKQEAgLTM5LDggKzM5LDkgQEAgZnVuY3Rpb24gZnJv
bnRlbmRfZHVtcEluc3BlY3RlZFN0eWxlKHRlc3RDb250cm9sbGVyKQogCiAgICAgdmFyIGV2dCA9
IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCJLZXlib2FyZEV2ZW50Iik7CiAgICAgZXZ0LmluaXRLZXli
b2FyZEV2ZW50KCJrZXlkb3duIiwgdHJ1ZSAvKiBjYW4gYnViYmxlICovLCB0cnVlIC8qIGNhbiBj
YW5jZWwgKi8sIG51bGwgLyogdmlldyAqLywgIkVudGVyIiwgIiIpOwotICAgIHRyZWVFbGVtZW50
Lmxpc3RJdGVtRWxlbWVudC50ZXh0Q29udGVudCA9ICJ0ZXh0LWRlY29yYXRpb246IG5vbmUiOwot
ICAgIHRyZWVFbGVtZW50Lmxpc3RJdGVtRWxlbWVudC5kaXNwYXRjaEV2ZW50KGV2dCk7CisgICAg
dHJlZUVsZW1lbnQubmFtZUVsZW1lbnQudGV4dENvbnRlbnQgPSAidGV4dC1kZWNvcmF0aW9uIjsK
KyAgICB0cmVlRWxlbWVudC52YWx1ZUVsZW1lbnQudGV4dENvbnRlbnQgPSAibm9uZSI7CisgICAg
dHJlZUVsZW1lbnQubmFtZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChldnQpOwogCiAgICAgdGVzdENv
bnRyb2xsZXIucnVuQWZ0ZXJQZW5kaW5nRGlzcGF0Y2hlcyhmcm9udGVuZF9kdW1wUmVzdWx0cy5i
aW5kKHRoaXMsIHRlc3RDb250cm9sbGVyKSk7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5n
ZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDYwODhkOWIuLmY5ODA5NDYgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MjcgQEAKKzIwMTAtMTItMDYgIEFsZXhhbmRlciBQYXZsb3YgIDxhcGF2bG92QGNocm9taXVtLm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWIg
SW5zcGVjdG9yOiBFbmFibGUgQ1NTIHByb3BlcnR5IGVkaXRpbmcgbmFtZS92YWx1ZS13aXNlIChs
aWtlIEZpcmVidWcgZG9lcykKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTUwNTY1CisKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1lbnRz
VHJlZU91dGxpbmUuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVu
dC5wcm90b3R5cGUuX3N0YXJ0RWRpdGluZ0FzSFRNTCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zy
b250LWVuZC9TdHlsZXNTaWRlYmFyUGFuZS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdHls
ZVByb3BlcnRpZXNTZWN0aW9uLnByb3RvdHlwZS5hZGROZXdCbGFua1Byb3BlcnR5KToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnRpZXNTZWN0aW9uLnByb3RvdHlwZS5lZGl0aW5n
U2VsZWN0b3JDb21taXR0ZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydHlU
cmVlRWxlbWVudC5wcm90b3R5cGUuKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZVByb3Bl
cnR5VHJlZUVsZW1lbnQucHJvdG90eXBlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5k
L1RleHRWaWV3ZXIuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5wcm90b3R5
cGUuX2hhbmRsZURvdWJsZUNsaWNrKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2lu
c3BlY3Rvci5jc3M6CisgICAgICAgICguY2hpbGQtZWRpdGluZyk6CisgICAgICAgICogaW5zcGVj
dG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3Iuc3RhcnRF
ZGl0aW5nLmRlZmF1bHRGaW5pc2hIYW5kbGVyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5zdGFy
dEVkaXRpbmcpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvdHJlZW91dGxpbmUuanM6
CisgICAgICAgIChUcmVlRWxlbWVudC5wcm90b3R5cGUuc2VsZWN0KToKKwogMjAxMC0xMi0wNSAg
S2VudCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZC4g
UnVuIHNvcnQtWGNvZGUtcHJvamVjdC1maWxlLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0VsZW1lbnRzVHJlZU91dGxpbmUuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvRWxlbWVudHNUcmVlT3V0bGluZS5qcwppbmRleCAwMmE3OTExLi5jY2EzMDQ2IDEw
MDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNUcmVlT3V0bGlu
ZS5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNUcmVlT3V0bGlu
ZS5qcwpAQCAtOTgwLDcgKzk4MCw3IEBAIFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50
LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKCk7CiAgICAg
ICAgIH0KIAotICAgICAgICB0aGlzLl9lZGl0aW5nID0gV2ViSW5zcGVjdG9yLnN0YXJ0RWRpdGlu
Zyh0aGlzLl9odG1sRWRpdEVsZW1lbnQsIGNvbW1pdC5iaW5kKHRoaXMpLCBkaXNwb3NlLmJpbmQo
dGhpcyksIG51bGwsIHRydWUpOworICAgICAgICB0aGlzLl9lZGl0aW5nID0gV2ViSW5zcGVjdG9y
LnN0YXJ0RWRpdGluZyh0aGlzLl9odG1sRWRpdEVsZW1lbnQsIGNvbW1pdC5iaW5kKHRoaXMpLCBk
aXNwb3NlLmJpbmQodGhpcyksIG51bGwsIHsgbXVsdGlsaW5lOiB0cnVlIH0pOwogICAgIH0sCiAK
ICAgICBfYXR0cmlidXRlRWRpdGluZ0NvbW1pdHRlZDogZnVuY3Rpb24oZWxlbWVudCwgbmV3VGV4
dCwgb2xkVGV4dCwgYXR0cmlidXRlTmFtZSwgbW92ZURpcmVjdGlvbikKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TdHlsZXNTaWRlYmFyUGFuZS5qcyBiL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9TdHlsZXNTaWRlYmFyUGFuZS5qcwppbmRleCBkYjcyNDg2Li40
NDY4ZTJmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU3R5bGVzU2lk
ZWJhclBhbmUuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1N0eWxlc1NpZGVi
YXJQYW5lLmpzCkBAIC03OTUsNiArNzk1LDcgQEAgV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydGll
c1NlY3Rpb24ucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLnByb3BlcnRpZXNUcmVlT3V0bGlu
ZS5hcHBlbmRDaGlsZChpdGVtKTsKICAgICAgICAgaXRlbS5saXN0SXRlbUVsZW1lbnQudGV4dENv
bnRlbnQgPSAiIjsKICAgICAgICAgaXRlbS5fbmV3UHJvcGVydHkgPSB0cnVlOworICAgICAgICBp
dGVtLnVwZGF0ZVRpdGxlKCk7CiAgICAgICAgIHJldHVybiBpdGVtOwogICAgIH0sCiAKQEAgLTg5
MCw3ICs4OTEsNyBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5
cGUgPSB7CiAgICAgICAgICAgICAgICAgdGhpcy5hZGROZXdCbGFua1Byb3BlcnR5KCkuc3RhcnRF
ZGl0aW5nKCk7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICB2YXIgaXRlbSA9
IHRoaXMucHJvcGVydGllc1RyZWVPdXRsaW5lLmNoaWxkcmVuWzBdCi0gICAgICAgICAgICAgICAg
aXRlbS5zdGFydEVkaXRpbmcoaXRlbS52YWx1ZUVsZW1lbnQpOworICAgICAgICAgICAgICAgIGl0
ZW0uc3RhcnRFZGl0aW5nKGl0ZW0ubmFtZUVsZW1lbnQpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAKQEAgLTEzNDYsOCArMTM0NywxMSBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRy
ZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5saXN0SXRlbUVsZW1lbnQuYXBw
ZW5kQ2hpbGQodmFsdWVFbGVtZW50KTsKICAgICAgICAgdGhpcy5saXN0SXRlbUVsZW1lbnQuYXBw
ZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIjsiKSk7CiAKLSAgICAgICAgaWYgKCF0
aGlzLnBhcnNlZE9rKQorICAgICAgICBpZiAoIXRoaXMucGFyc2VkT2spIHsKKyAgICAgICAgICAg
IC8vIEF2b2lkIGhhdmluZyBsb25naGFuZHMgdW5kZXIgYW4gaW52YWxpZCBzaG9ydGhhbmQuCisg
ICAgICAgICAgICB0aGlzLmhhc0NoaWxkcmVuID0gZmFsc2U7CiAgICAgICAgICAgICB0aGlzLmxp
c3RJdGVtRWxlbWVudC5hZGRTdHlsZUNsYXNzKCJub3QtcGFyc2VkLW9rIik7CisgICAgICAgIH0K
ICAgICAgICAgaWYgKHRoaXMucHJvcGVydHkuaW5hY3RpdmUpCiAgICAgICAgICAgICB0aGlzLmxp
c3RJdGVtRWxlbWVudC5hZGRTdHlsZUNsYXNzKCJpbmFjdGl2ZSIpOwogCkBAIC0xNDYwLDYwICsx
NDY0LDE1MCBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlw
ZSA9IHsKICAgICAgICAgaWYgKHRoaXMucGFyZW50LnNob3J0aGFuZCkKICAgICAgICAgICAgIHJl
dHVybjsKIAotICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLmlzQmVpbmdFZGl0ZWQodGhpcy5saXN0
SXRlbUVsZW1lbnQpIHx8ICh0aGlzLnRyZWVPdXRsaW5lLnNlY3Rpb24gJiYgIXRoaXMudHJlZU91
dGxpbmUuc2VjdGlvbi5lZGl0YWJsZSkpCisgICAgICAgIGlmICh0aGlzLnRyZWVPdXRsaW5lLnNl
Y3Rpb24gJiYgIXRoaXMudHJlZU91dGxpbmUuc2VjdGlvbi5lZGl0YWJsZSkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBpZiAoIXNlbGVjdEVsZW1lbnQpCisgICAgICAgICAgICBzZWxl
Y3RFbGVtZW50ID0gdGhpcy5uYW1lRWxlbWVudDsgLy8gbm8gYXJndW1lbnRzIHBhc3NlZCBpbiAt
IGVkaXQgdGhlIG5hbWUgZWxlbWVudCBieSBkZWZhdWx0CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHNlbGVjdEVsZW1lbnQgPSBzZWxlY3RFbGVtZW50LmVuY2xvc2luZ05vZGVPclNlbGZXaXRo
Q2xhc3MoIndlYmtpdC1jc3MtcHJvcGVydHkiKSB8fCBzZWxlY3RFbGVtZW50LmVuY2xvc2luZ05v
ZGVPclNlbGZXaXRoQ2xhc3MoInZhbHVlIik7CisKKyAgICAgICAgdmFyIGlzRWRpdGluZ05hbWUg
PSBzZWxlY3RFbGVtZW50ID09PSB0aGlzLm5hbWVFbGVtZW50OworICAgICAgICBpZiAoIWlzRWRp
dGluZ05hbWUgJiYgc2VsZWN0RWxlbWVudCAhPT0gdGhpcy52YWx1ZUVsZW1lbnQpIHsKKyAgICAg
ICAgICAgIC8vIERvdWJsZS1jbGljayBpbiB0aGUgTEkgLSBzdGFydCBlZGl0aW5nIHZhbHVlLgor
ICAgICAgICAgICAgaXNFZGl0aW5nTmFtZSA9IGZhbHNlOworICAgICAgICAgICAgc2VsZWN0RWxl
bWVudCA9IHRoaXMudmFsdWVFbGVtZW50OworICAgICAgICB9CisKKyAgICAgICAgaWYgKFdlYklu
c3BlY3Rvci5pc0JlaW5nRWRpdGVkKHNlbGVjdEVsZW1lbnQpKQogICAgICAgICAgICAgcmV0dXJu
OwogCiAgICAgICAgIHZhciBjb250ZXh0ID0gewogICAgICAgICAgICAgZXhwYW5kZWQ6IHRoaXMu
ZXhwYW5kZWQsCiAgICAgICAgICAgICBoYXNDaGlsZHJlbjogdGhpcy5oYXNDaGlsZHJlbiwKLSAg
ICAgICAgICAgIGtleURvd25MaXN0ZW5lcjogdGhpcy5lZGl0aW5nS2V5RG93bi5iaW5kKHRoaXMp
LAotICAgICAgICAgICAga2V5UHJlc3NMaXN0ZW5lcjogdGhpcy5lZGl0aW5nS2V5UHJlc3MuYmlu
ZCh0aGlzKQorICAgICAgICAgICAga2V5RG93bkxpc3RlbmVyOiBpc0VkaXRpbmdOYW1lID8gdGhp
cy5lZGl0aW5nTmFtZUtleURvd24uYmluZCh0aGlzKSA6IHRoaXMuZWRpdGluZ1ZhbHVlS2V5RG93
bi5iaW5kKHRoaXMpLAorICAgICAgICAgICAga2V5UHJlc3NMaXN0ZW5lcjogaXNFZGl0aW5nTmFt
ZSA/IHRoaXMuZWRpdGluZ05hbWVLZXlQcmVzcy5iaW5kKHRoaXMpIDogdGhpcy5lZGl0aW5nVmFs
dWVLZXlQcmVzcy5iaW5kKHRoaXMpLAorICAgICAgICAgICAgaXNFZGl0aW5nTmFtZTogaXNFZGl0
aW5nTmFtZSwKICAgICAgICAgfTsKIAogICAgICAgICAvLyBMaWUgYWJvdXQgb3VyIGNoaWxkcmVu
IHRvIHByZXZlbnQgZXhwYW5kaW5nIG9uIGRvdWJsZSBjbGljayBhbmQgdG8gY29sbGFwc2Ugc2hv
cnRoYW5kcy4KICAgICAgICAgdGhpcy5oYXNDaGlsZHJlbiA9IGZhbHNlOwogCi0gICAgICAgIGlm
ICghc2VsZWN0RWxlbWVudCkKLSAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQgPSB0aGlzLmxpc3RJ
dGVtRWxlbWVudDsKKyAgICAgICAgc2VsZWN0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlk
b3duIiwgY29udGV4dC5rZXlEb3duTGlzdGVuZXIsIGZhbHNlKTsKKyAgICAgICAgc2VsZWN0RWxl
bWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlwcmVzcyIsIGNvbnRleHQua2V5UHJlc3NMaXN0ZW5l
ciwgZmFsc2UpOworICAgICAgICBpZiAoc2VsZWN0RWxlbWVudC5wYXJlbnRFbGVtZW50KQorICAg
ICAgICAgICAgc2VsZWN0RWxlbWVudC5wYXJlbnRFbGVtZW50LmFkZFN0eWxlQ2xhc3MoImNoaWxk
LWVkaXRpbmciKTsKKyAgICAgICAgc2VsZWN0RWxlbWVudC50ZXh0Q29udGVudCA9IHNlbGVjdEVs
ZW1lbnQudGV4dENvbnRlbnQ7IC8vIHJlbW92ZSBjb2xvciBzd2F0Y2ggYW5kIHRoZSBsaWtlCiAK
LSAgICAgICAgdGhpcy5saXN0SXRlbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIs
IGNvbnRleHQua2V5RG93bkxpc3RlbmVyLCBmYWxzZSk7Ci0gICAgICAgIHRoaXMubGlzdEl0ZW1F
bGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleXByZXNzIiwgY29udGV4dC5rZXlQcmVzc0xpc3Rl
bmVyLCBmYWxzZSk7CisgICAgICAgIGZ1bmN0aW9uIHNob3VsZENvbW1pdFZhbHVlU2VtaWNvbG9u
KHRleHQsIGN1cnNvclBvc2l0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgb3BlblF1
b3RlID0gIiI7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGN1cnNvclBvc2l0aW9u
OyArK2kpIHsKKyAgICAgICAgICAgICAgICB2YXIgY2ggPSB0ZXh0W2ldOworICAgICAgICAgICAg
ICAgIGlmIChjaCA9PT0gIlxcIiAmJiBvcGVuUXVvdGUgIT09ICIiKQorICAgICAgICAgICAgICAg
ICAgICArK2k7IC8vIHNraXAgbmV4dCBjaGFyYWN0ZXIgaW5zaWRlIHN0cmluZworICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKCFvcGVuUXVvdGUgJiYgKGNoID09PSAiXCIiIHx8IGNoID09PSAiJyIp
KQorICAgICAgICAgICAgICAgICAgICBvcGVuUXVvdGUgPSBjaDsKKyAgICAgICAgICAgICAgICBl
bHNlIGlmIChvcGVuUXVvdGUgPT09IGNoKQorICAgICAgICAgICAgICAgICAgICBvcGVuUXVvdGUg
PSAiIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiAhb3BlblF1b3RlOworICAg
ICAgICB9CiAKLSAgICAgICAgV2ViSW5zcGVjdG9yLnN0YXJ0RWRpdGluZyh0aGlzLmxpc3RJdGVt
RWxlbWVudCwgdGhpcy5lZGl0aW5nQ29tbWl0dGVkLmJpbmQodGhpcyksIHRoaXMuZWRpdGluZ0Nh
bmNlbGxlZC5iaW5kKHRoaXMpLCBjb250ZXh0KTsKKyAgICAgICAgZnVuY3Rpb24gbmFtZUZpbmlz
aEhhbmRsZXIoY29udGV4dCwgZXZlbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpc0Vu
dGVyS2V5KGV2ZW50KSB8fCBldmVudC5rZXlJZGVudGlmaWVyID09PSAiVSswMEJBIiAmJiBldmVu
dC5zaGlmdEtleSkgeworICAgICAgICAgICAgICAgIC8vIEVudGVyIG9yIGNvbG9uCisgICAgICAg
ICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Im1vdmUtZm9yd2FyZCI7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleUNvZGUgPT09
IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0LktleXMuRXNjLmNvZGUpCisgICAgICAgICAg
ICAgICAgcmV0dXJuICJjYW5jZWwiOworICAgICAgICAgICAgZWxzZSBpZiAoZXZlbnQua2V5SWRl
bnRpZmllciA9PT0gIlUrMDAwOSIpIC8vIFRhYiBrZXkKKyAgICAgICAgICAgICAgICByZXR1cm4g
Im1vdmUtIiArIChldmVudC5zaGlmdEtleSA/ICJiYWNrd2FyZCIgOiAiZm9yd2FyZCIpOworICAg
ICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gdmFsdWVGaW5pc2hIYW5kbGVyKGNvbnRleHQsIGV2
ZW50KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaXNFbnRlcktleShldmVudCkgfHwgZXZl
bnQua2V5SWRlbnRpZmllciA9PT0gIlUrMDBCQSIgJiYgIWV2ZW50LnNoaWZ0S2V5ICYmIHNob3Vs
ZENvbW1pdFZhbHVlU2VtaWNvbG9uKGV2ZW50LnRhcmdldC50ZXh0Q29udGVudCwgZXZlbnQudGFy
Z2V0LnNlbGVjdGlvbkxlZnRPZmZzZXQpKSB7CisgICAgICAgICAgICAgICAgLy8gRW50ZXIgb3Ig
c2VtaWNvbG9uCisgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gIm1vdmUtZm9yd2FyZCI7CisgICAgICAgICAgICB9IGVsc2UgaWYg
KGV2ZW50LmtleUNvZGUgPT09IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0LktleXMuRXNj
LmNvZGUpCisgICAgICAgICAgICAgICAgcmV0dXJuICJjYW5jZWwiOworICAgICAgICAgICAgZWxz
ZSBpZiAoZXZlbnQua2V5SWRlbnRpZmllciA9PT0gIlUrMDAwOSIpIC8vIFRhYiBrZXkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gIm1vdmUtIiArIChldmVudC5zaGlmdEtleSA/ICJiYWNrd2FyZCIg
OiAiZm9yd2FyZCIpOworICAgICAgICB9CisKKyAgICAgICAgV2ViSW5zcGVjdG9yLnN0YXJ0RWRp
dGluZyhzZWxlY3RFbGVtZW50LCB0aGlzLmVkaXRpbmdDb21taXR0ZWQuYmluZCh0aGlzKSwgdGhp
cy5lZGl0aW5nQ2FuY2VsbGVkLmJpbmQodGhpcyksIGNvbnRleHQsCisgICAgICAgICAgICB7IGN1
c3RvbUZpbmlzaEhhbmRsZXI6IGlzRWRpdGluZ05hbWUgPyBuYW1lRmluaXNoSGFuZGxlci5iaW5k
KHRoaXMsIGNvbnRleHQpIDogdmFsdWVGaW5pc2hIYW5kbGVyLmJpbmQodGhpcywgY29udGV4dCkg
fSApOwogICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuc2V0QmFzZUFuZEV4dGVudChzZWxl
Y3RFbGVtZW50LCAwLCBzZWxlY3RFbGVtZW50LCAxKTsKICAgICB9LAogCi0gICAgZWRpdGluZ0tl
eVByZXNzOiBmdW5jdGlvbihldmVudCkKKyAgICBlZGl0aW5nTmFtZUtleVByZXNzOiBmdW5jdGlv
bihldmVudCkKICAgICB7Ci0gICAgICAgIHZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0
aW9uKCk7Ci0gICAgICAgIHZhciBjb2xvbkluZGV4ID0gdGhpcy5saXN0SXRlbUVsZW1lbnQudGV4
dENvbnRlbnQuaW5kZXhPZigiOiIpOwotICAgICAgICB2YXIgc2VsZWN0aW9uTGVmdE9mZnNldCA9
IGV2ZW50LnRhcmdldC5zZWxlY3Rpb25MZWZ0T2Zmc2V0OwotCi0gICAgICAgIGlmIChjb2xvbklu
ZGV4IDwgMCB8fCBzZWxlY3Rpb25MZWZ0T2Zmc2V0IDw9IGNvbG9uSW5kZXgpIHsKLSAgICAgICAg
ICAgIC8vIENvbXBsZXRlIHByb3BlcnR5IG5hbWVzLgotICAgICAgICAgICAgdmFyIGNoYXJhY3Rl
ciA9IGV2ZW50LmRhdGEudG9Mb3dlckNhc2UoKTsKLSAgICAgICAgICAgIGlmIChjaGFyYWN0ZXIg
JiYgL1thLXotXS8udGVzdChjaGFyYWN0ZXIpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHByZWZp
eCA9IHNlbGVjdGlvbi5hbmNob3JOb2RlLnRleHRDb250ZW50LnN1YnN0cmluZygwLCBzZWxlY3Rp
b24uYW5jaG9yT2Zmc2V0KTsKLSAgICAgICAgICAgICAgICB2YXIgcHJvcGVydHkgPSBXZWJJbnNw
ZWN0b3IuQ1NTQ29tcGxldGlvbnMuZmlyc3RTdGFydHNXaXRoKHByZWZpeCArIGNoYXJhY3Rlcik7
Ci0KLSAgICAgICAgICAgICAgICBpZiAoIXNlbGVjdGlvbi5pc0NvbGxhcHNlZCkKLSAgICAgICAg
ICAgICAgICAgICAgc2VsZWN0aW9uLmRlbGV0ZUZyb21Eb2N1bWVudCgpOwotCi0gICAgICAgICAg
ICAgICAgdGhpcy5yZXN0b3JlTmFtZUVsZW1lbnQoKTsKLQotICAgICAgICAgICAgICAgIGlmIChw
cm9wZXJ0eSkgewotICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHkgIT09IHRoaXMubmFt
ZUVsZW1lbnQudGV4dENvbnRlbnQpCi0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5hbWVF
bGVtZW50LnRleHRDb250ZW50ID0gcHJvcGVydHk7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMu
bmFtZUVsZW1lbnQuZmlyc3RDaGlsZC5zZWxlY3QocHJlZml4Lmxlbmd0aCArIDEpOwotICAgICAg
ICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwotICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgLy8gQ29tcGxldGUgcHJvcGVydHkgbmFtZXMuCisgICAgICAgIHZhciBjaGFyYWN0
ZXIgPSBldmVudC5kYXRhLnRvTG93ZXJDYXNlKCk7CisgICAgICAgIGlmIChjaGFyYWN0ZXIgJiYg
L1thLXotXS8udGVzdChjaGFyYWN0ZXIpKSB7CisgICAgICAgICAgICB2YXIgc2VsZWN0aW9uID0g
d2luZG93LmdldFNlbGVjdGlvbigpOworICAgICAgICAgICAgdmFyIHByZWZpeCA9IHNlbGVjdGlv
bi5hbmNob3JOb2RlLnRleHRDb250ZW50LnN1YnN0cmluZygwLCBzZWxlY3Rpb24uYW5jaG9yT2Zm
c2V0KTsKKyAgICAgICAgICAgIHZhciBwcm9wZXJ0eSA9IFdlYkluc3BlY3Rvci5DU1NDb21wbGV0
aW9ucy5maXJzdFN0YXJ0c1dpdGgocHJlZml4ICsgY2hhcmFjdGVyKTsKKworICAgICAgICAgICAg
aWYgKCFzZWxlY3Rpb24uaXNDb2xsYXBzZWQpCisgICAgICAgICAgICAgICAgc2VsZWN0aW9uLmRl
bGV0ZUZyb21Eb2N1bWVudCgpOworCisgICAgICAgICAgICB0aGlzLnJlc3RvcmVOYW1lRWxlbWVu
dCgpOworCisgICAgICAgICAgICBpZiAocHJvcGVydHkpIHsKKyAgICAgICAgICAgICAgICBpZiAo
cHJvcGVydHkgIT09IHRoaXMubmFtZUVsZW1lbnQudGV4dENvbnRlbnQpCisgICAgICAgICAgICAg
ICAgICAgIHRoaXMubmFtZUVsZW1lbnQudGV4dENvbnRlbnQgPSBwcm9wZXJ0eTsKKyAgICAgICAg
ICAgICAgICB0aGlzLm5hbWVFbGVtZW50LmZpcnN0Q2hpbGQuc2VsZWN0KHByZWZpeC5sZW5ndGgg
KyAxKTsKKyAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAg
ICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxk
IGNvbXBsZXRlIHByb3BlcnR5IHZhbHVlcy4KICAgICAgICAgfQogICAgIH0sCiAKLSAgICBlZGl0
aW5nS2V5RG93bjogZnVuY3Rpb24oZXZlbnQpCisgICAgZWRpdGluZ1ZhbHVlS2V5UHJlc3M6IGZ1
bmN0aW9uKGV2ZW50KQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGNvbXBs
ZXRlIHByb3BlcnR5IHZhbHVlcy4KKyAgICB9LAorCisgICAgZWRpdGluZ05hbWVLZXlEb3duOiBm
dW5jdGlvbihldmVudCkKKyAgICB7CisgICAgICAgIHZhciBzaG93TmV4dDsKKyAgICAgICAgaWYg
KGV2ZW50LmtleUlkZW50aWZpZXIgPT09ICJVcCIpCisgICAgICAgICAgICBzaG93TmV4dCA9IGZh
bHNlOworICAgICAgICBlbHNlIGlmIChldmVudC5rZXlJZGVudGlmaWVyID09PSAiRG93biIpCisg
ICAgICAgICAgICBzaG93TmV4dCA9IHRydWU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICB2YXIgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwor
ICAgICAgICBpZiAoIXNlbGVjdGlvbi5yYW5nZUNvdW50KQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIHZhciBzZWxlY3Rpb25SYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApOwor
ICAgICAgICBpZiAoc2VsZWN0aW9uUmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIgIT09IHRo
aXMubmFtZUVsZW1lbnQgJiYgIXNlbGVjdGlvblJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVy
LmlzRGVzY2VuZGFudCh0aGlzLm5hbWVFbGVtZW50KSkKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBjb25zdCBzdHlsZVZhbHVlRGVsaW1ldGVycyA9ICIgXHRcblwiJzo7LC8oKSI7Cisg
ICAgICAgIHZhciB3b3JkUmFuZ2UgPSBzZWxlY3Rpb25SYW5nZS5zdGFydENvbnRhaW5lci5yYW5n
ZU9mV29yZChzZWxlY3Rpb25SYW5nZS5zdGFydE9mZnNldCwgc3R5bGVWYWx1ZURlbGltZXRlcnMs
IHRoaXMubmFtZUVsZW1lbnQpOworICAgICAgICB2YXIgd29yZFN0cmluZyA9IHdvcmRSYW5nZS50
b1N0cmluZygpOworICAgICAgICB2YXIgcHJlZml4ID0gc2VsZWN0aW9uUmFuZ2Uuc3RhcnRDb250
YWluZXIudGV4dENvbnRlbnQuc3Vic3RyaW5nKDAsIHNlbGVjdGlvblJhbmdlLnN0YXJ0T2Zmc2V0
KTsKKyAgICAgICAgdmFyIHByb3BlcnR5OworCisgICAgICAgIGlmIChzaG93TmV4dCkKKyAgICAg
ICAgICAgIHByb3BlcnR5ID0gV2ViSW5zcGVjdG9yLkNTU0NvbXBsZXRpb25zLm5leHQod29yZFN0
cmluZywgcHJlZml4KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvcGVydHkgPSBXZWJJ
bnNwZWN0b3IuQ1NTQ29tcGxldGlvbnMucHJldmlvdXMod29yZFN0cmluZywgcHJlZml4KTsKKwor
ICAgICAgICBpZiAocHJvcGVydHkpIHsKKyAgICAgICAgICAgIHRoaXMubmFtZUVsZW1lbnQudGV4
dENvbnRlbnQgPSBwcm9wZXJ0eTsKKyAgICAgICAgICAgIHRoaXMubmFtZUVsZW1lbnQuZmlyc3RD
aGlsZC5zZWxlY3Qoc2VsZWN0aW9uUmFuZ2Uuc3RhcnRPZmZzZXQpOworICAgICAgICB9CisgICAg
ICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisgICAgfSwKKworICAgIGVkaXRpbmdWYWx1ZUtl
eURvd246IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKICAgICAgICAgdmFyIGFycm93S2V5UHJlc3Nl
ZCA9IChldmVudC5rZXlJZGVudGlmaWVyID09PSAiVXAiIHx8IGV2ZW50LmtleUlkZW50aWZpZXIg
PT09ICJEb3duIik7CiAgICAgICAgIHZhciBwYWdlS2V5UHJlc3NlZCA9IChldmVudC5rZXlJZGVu
dGlmaWVyID09PSAiUGFnZVVwIiB8fCBldmVudC5rZXlJZGVudGlmaWVyID09PSAiUGFnZURvd24i
KTsKQEAgLTE1MjUsMzMgKzE2MTksMTEgQEAgV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVl
RWxlbWVudC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgdmFy
IHNlbGVjdGlvblJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7Ci0gICAgICAgIGlmIChz
ZWxlY3Rpb25SYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lciAhPT0gdGhpcy5saXN0SXRlbUVs
ZW1lbnQgJiYgIXNlbGVjdGlvblJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLmlzRGVzY2Vu
ZGFudCh0aGlzLmxpc3RJdGVtRWxlbWVudCkpCisgICAgICAgIGlmIChzZWxlY3Rpb25SYW5nZS5j
b21tb25BbmNlc3RvckNvbnRhaW5lciAhPT0gdGhpcy52YWx1ZUVsZW1lbnQgJiYgIXNlbGVjdGlv
blJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLmlzRGVzY2VuZGFudCh0aGlzLnZhbHVlRWxl
bWVudCkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgLy8gSWYgdGhlcmUgYXJlIHNl
dmVyYWwgcHJvcGVydGllcyBpbiB0aGUgdGV4dCwgZG8gbm90IGhhbmRsZSBpbmNyZW1lbnRzL2Rl
Y3JlbWVudHMuCi0gICAgICAgIHZhciB0ZXh0ID0gZXZlbnQudGFyZ2V0LnRleHRDb250ZW50LnRy
aW0oKTsKLSAgICAgICAgdmFyIG9wZW5RdW90ZTsKLSAgICAgICAgdmFyIHdhc0VzY2FwZSA9IGZh
bHNlOwotICAgICAgICAvLyBFeGNsdWRlIHRoZSBsYXN0IGNoYXJhY3RlciBmcm9tIHRoZSBjaGVj
ayBzaW5jZSBpdCBpcyBhbGxvd2VkIHRvIGJlICI7Ii4KLSAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCB0ZXh0Lmxlbmd0aCAtIDE7ICsraSkgewotICAgICAgICAgICAgdmFyIGNoID0gdGV4dC5j
aGFyQXQoaSk7Ci0gICAgICAgICAgICBpZiAoY2ggPT09ICJcXCIpIHsKLSAgICAgICAgICAgICAg
ICB3YXNFc2NhcGUgPSB0cnVlOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgaWYgKGNoID09PSAiOyIgJiYgIW9wZW5RdW90ZSkKLSAgICAgICAg
ICAgICAgICByZXR1cm47IC8vIERvIG5vdCBoYW5kbGUgbmFtZS92YWx1ZSBzaGlmdHMgaWYgdGhl
IHByb3BlcnR5IGlzIGNvbXBvdW5kLgotICAgICAgICAgICAgaWYgKChjaCA9PT0gIiciIHx8IGNo
ID09PSAiXCIiKSAmJiAhd2FzRXNjYXBlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFvcGVuUXVv
dGUpCi0gICAgICAgICAgICAgICAgICAgIG9wZW5RdW90ZSA9IGNoOwotICAgICAgICAgICAgICAg
IGVsc2UgaWYgKGNoID09PSBvcGVuUXVvdGUpCi0gICAgICAgICAgICAgICAgICAgIG9wZW5RdW90
ZSA9IG51bGw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB3YXNFc2NhcGUgPSBmYWxzZTsK
LSAgICAgICAgfQotCiAgICAgICAgIGNvbnN0IHN0eWxlVmFsdWVEZWxpbWV0ZXJzID0gIiBcdFxu
XCInOjssLygpIjsKLSAgICAgICAgdmFyIHdvcmRSYW5nZSA9IHNlbGVjdGlvblJhbmdlLnN0YXJ0
Q29udGFpbmVyLnJhbmdlT2ZXb3JkKHNlbGVjdGlvblJhbmdlLnN0YXJ0T2Zmc2V0LCBzdHlsZVZh
bHVlRGVsaW1ldGVycywgdGhpcy5saXN0SXRlbUVsZW1lbnQpOworICAgICAgICB2YXIgd29yZFJh
bmdlID0gc2VsZWN0aW9uUmFuZ2Uuc3RhcnRDb250YWluZXIucmFuZ2VPZldvcmQoc2VsZWN0aW9u
UmFuZ2Uuc3RhcnRPZmZzZXQsIHN0eWxlVmFsdWVEZWxpbWV0ZXJzLCB0aGlzLnZhbHVlRWxlbWVu
dCk7CiAgICAgICAgIHZhciB3b3JkU3RyaW5nID0gd29yZFJhbmdlLnRvU3RyaW5nKCk7CiAgICAg
ICAgIHZhciByZXBsYWNlbWVudFN0cmluZyA9IHdvcmRTdHJpbmc7CiAKQEAgLTE1OTMsMjIgKzE2
NjUsNiBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZSA9
IHsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgcmVwbGFjZW1lbnRTdHJpbmcgPSBwcmVm
aXggKyBudW1iZXIgKyBzdWZmaXg7Ci0gICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uLmNvbnRh
aW5zTm9kZSh0aGlzLm5hbWVFbGVtZW50LCB0cnVlKSkgewotICAgICAgICAgICAgdmFyIHByZWZp
eCA9IHNlbGVjdGlvblJhbmdlLnN0YXJ0Q29udGFpbmVyLnRleHRDb250ZW50LnN1YnN0cmluZygw
LCBzZWxlY3Rpb25SYW5nZS5zdGFydE9mZnNldCk7Ci0gICAgICAgICAgICB2YXIgcHJvcGVydHk7
Ci0KLSAgICAgICAgICAgIGlmIChldmVudC5rZXlJZGVudGlmaWVyID09PSAiVXAiKQotICAgICAg
ICAgICAgICAgIHByb3BlcnR5ID0gV2ViSW5zcGVjdG9yLkNTU0NvbXBsZXRpb25zLnByZXZpb3Vz
KHdvcmRTdHJpbmcsIHByZWZpeCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChldmVudC5rZXlJZGVu
dGlmaWVyID09PSAiRG93biIpCi0gICAgICAgICAgICAgICAgcHJvcGVydHkgPSBXZWJJbnNwZWN0
b3IuQ1NTQ29tcGxldGlvbnMubmV4dCh3b3JkU3RyaW5nLCBwcmVmaXgpOwotCi0gICAgICAgICAg
ICB2YXIgc3RhcnRPZmZzZXQgPSBzZWxlY3Rpb25SYW5nZS5zdGFydE9mZnNldDsKLSAgICAgICAg
ICAgIGlmIChwcm9wZXJ0eSkgewotICAgICAgICAgICAgICAgIHRoaXMubmFtZUVsZW1lbnQudGV4
dENvbnRlbnQgPSBwcm9wZXJ0eTsKLSAgICAgICAgICAgICAgICB0aGlzLm5hbWVFbGVtZW50LmZp
cnN0Q2hpbGQuc2VsZWN0KHN0YXJ0T2Zmc2V0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Ci0gICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQgY3ljbGUgdGhyb3VnaCBr
bm93biBrZXl3b3JkcyBmb3IgdGhlIGN1cnJlbnQgcHJvcGVydHkgdmFsdWUuCiAgICAgICAgIH0K
QEAgLTE2MzIsNyArMTY4OCw5IEBAIFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1l
bnQucHJvdG90eXBlID0gewogICAgICAgICAgICAgLy8gaWYgdGhlIGVkaXRpbmcgaXMgY2FuY2Vs
ZWQgYW5kIGJlZm9yZSBlYWNoIGFwcGx5LgogICAgICAgICAgICAgdGhpcy5vcmlnaW5hbFByb3Bl
cnR5VGV4dCA9IHRoaXMucHJvcGVydHkucHJvcGVydHlUZXh0OwogICAgICAgICB9Ci0gICAgICAg
IHRoaXMuYXBwbHlTdHlsZVRleHQodGhpcy5saXN0SXRlbUVsZW1lbnQudGV4dENvbnRlbnQpOwor
CisgICAgICAgIC8vIFN5bnRoZXNpemUgcHJvcGVydHkgdGV4dCBkaXNyZWdhcmRpbmcgYW55IGNv
bW1lbnRzLCBjdXN0b20gd2hpdGVzcGFjZSBldGMuCisgICAgICAgIHRoaXMuYXBwbHlTdHlsZVRl
eHQodGhpcy5uYW1lRWxlbWVudC50ZXh0Q29udGVudCArICI6ICIgKyB0aGlzLnZhbHVlRWxlbWVu
dC50ZXh0Q29udGVudCk7CiAgICAgfSwKIAogICAgIGVkaXRpbmdFbmRlZDogZnVuY3Rpb24oY29u
dGV4dCkKQEAgLTE2NDAsOCArMTY5OCwxMiBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRy
ZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5oYXNDaGlsZHJlbiA9IGNvbnRl
eHQuaGFzQ2hpbGRyZW47CiAgICAgICAgIGlmIChjb250ZXh0LmV4cGFuZGVkKQogICAgICAgICAg
ICAgdGhpcy5leHBhbmQoKTsKLSAgICAgICAgdGhpcy5saXN0SXRlbUVsZW1lbnQucmVtb3ZlRXZl
bnRMaXN0ZW5lcigia2V5ZG93biIsIGNvbnRleHQua2V5RG93bkxpc3RlbmVyLCBmYWxzZSk7Ci0g
ICAgICAgIHRoaXMubGlzdEl0ZW1FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleXByZXNz
IiwgY29udGV4dC5rZXlQcmVzc0xpc3RlbmVyLCBmYWxzZSk7CisgICAgICAgIHZhciBlZGl0ZWRF
bGVtZW50ID0gY29udGV4dC5pc0VkaXRpbmdOYW1lID8gdGhpcy5uYW1lRWxlbWVudCA6IHRoaXMu
dmFsdWVFbGVtZW50OworICAgICAgICBlZGl0ZWRFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIo
ImtleWRvd24iLCBjb250ZXh0LmtleURvd25MaXN0ZW5lciwgZmFsc2UpOworICAgICAgICBlZGl0
ZWRFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleXByZXNzIiwgY29udGV4dC5rZXlQcmVz
c0xpc3RlbmVyLCBmYWxzZSk7CisgICAgICAgIGlmIChlZGl0ZWRFbGVtZW50LnBhcmVudEVsZW1l
bnQpCisgICAgICAgICAgICBlZGl0ZWRFbGVtZW50LnBhcmVudEVsZW1lbnQucmVtb3ZlU3R5bGVD
bGFzcygiY2hpbGQtZWRpdGluZyIpOworCiAgICAgICAgIGRlbGV0ZSB0aGlzLm9yaWdpbmFsUHJv
cGVydHlUZXh0OwogICAgIH0sCiAKQEAgLTE2NjEsMjkgKzE3MjMsNDAgQEAgV2ViSW5zcGVjdG9y
LlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAgICAgZWRpdGluZ0NvbW1p
dHRlZDogZnVuY3Rpb24oZWxlbWVudCwgdXNlcklucHV0LCBwcmV2aW91c0NvbnRlbnQsIGNvbnRl
eHQsIG1vdmVEaXJlY3Rpb24pCiAgICAgewogICAgICAgICB0aGlzLmVkaXRpbmdFbmRlZChjb250
ZXh0KTsKKyAgICAgICAgdmFyIGlzRWRpdGluZ05hbWUgPSBjb250ZXh0LmlzRWRpdGluZ05hbWU7
CiAKICAgICAgICAgLy8gRGV0ZXJtaW5lIHdoZXJlIHRvIG1vdmUgdG8gYmVmb3JlIG1ha2luZyBj
aGFuZ2VzCiAgICAgICAgIHZhciBuZXdQcm9wZXJ0eSwgbW92ZVRvUHJvcGVydHlOYW1lLCBtb3Zl
VG9TZWxlY3RvcjsKICAgICAgICAgdmFyIG1vdmVUbyA9IHRoaXM7Ci0gICAgICAgIGRvIHsKLSAg
ICAgICAgICAgIG1vdmVUbyA9IChtb3ZlRGlyZWN0aW9uID09PSAiZm9yd2FyZCIgPyBtb3ZlVG8u
bmV4dFNpYmxpbmcgOiBtb3ZlVG8ucHJldmlvdXNTaWJsaW5nKTsKLSAgICAgICAgfSB3aGlsZSht
b3ZlVG8gJiYgIW1vdmVUby5zZWxlY3RhYmxlKTsKLQotICAgICAgICBpZiAobW92ZVRvKQotICAg
ICAgICAgICAgbW92ZVRvUHJvcGVydHlOYW1lID0gbW92ZVRvLm5hbWU7Ci0gICAgICAgIGVsc2Ug
aWYgKG1vdmVEaXJlY3Rpb24gPT09ICJmb3J3YXJkIikKLSAgICAgICAgICAgIG5ld1Byb3BlcnR5
ID0gdHJ1ZTsKLSAgICAgICAgZWxzZSBpZiAobW92ZURpcmVjdGlvbiA9PT0gImJhY2t3YXJkIiAm
JiB0aGlzLnRyZWVPdXRsaW5lLnNlY3Rpb24ucnVsZSkKLSAgICAgICAgICAgIG1vdmVUb1NlbGVj
dG9yID0gdHJ1ZTsKKyAgICAgICAgaWYgKG1vdmVEaXJlY3Rpb24gPT09ICJmb3J3YXJkIiAmJiAh
aXNFZGl0aW5nTmFtZSB8fCBtb3ZlRGlyZWN0aW9uID09PSAiYmFja3dhcmQiICYmIGlzRWRpdGlu
Z05hbWUpIHsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBtb3ZlVG8gPSAobW92
ZURpcmVjdGlvbiA9PT0gImZvcndhcmQiID8gbW92ZVRvLm5leHRTaWJsaW5nIDogbW92ZVRvLnBy
ZXZpb3VzU2libGluZyk7CisgICAgICAgICAgICB9IHdoaWxlKG1vdmVUbyAmJiAhbW92ZVRvLnNl
bGVjdGFibGUpOworCisgICAgICAgICAgIGlmIChtb3ZlVG8pCisgICAgICAgICAgICAgICAgbW92
ZVRvUHJvcGVydHlOYW1lID0gbW92ZVRvLm5hbWU7CisgICAgICAgICAgICBlbHNlIGlmIChtb3Zl
RGlyZWN0aW9uID09PSAiZm9yd2FyZCIgJiYgKCF0aGlzLl9uZXdQcm9wZXJ0eSB8fCB1c2VySW5w
dXQpKQorICAgICAgICAgICAgICAgIG5ld1Byb3BlcnR5ID0gdHJ1ZTsKKyAgICAgICAgICAgIGVs
c2UgaWYgKG1vdmVEaXJlY3Rpb24gPT09ICJiYWNrd2FyZCIgJiYgdGhpcy50cmVlT3V0bGluZS5z
ZWN0aW9uLnJ1bGUpCisgICAgICAgICAgICAgICAgbW92ZVRvU2VsZWN0b3IgPSB0cnVlOworICAg
ICAgICB9CiAKICAgICAgICAgLy8gTWFrZSB0aGUgQ2hhbmdlcyBhbmQgdHJpZ2dlciB0aGUgbW92
ZVRvTmV4dENhbGxiYWNrIGFmdGVyIHVwZGF0aW5nCiAgICAgICAgIHZhciBibGFua0lucHV0ID0g
L15ccyokLy50ZXN0KHVzZXJJbnB1dCk7Ci0gICAgICAgIGlmICh1c2VySW5wdXQgIT09IHByZXZp
b3VzQ29udGVudCB8fCAodGhpcy5fbmV3UHJvcGVydHkgJiYgYmxhbmtJbnB1dCkpIHsgLy8gb25s
eSBpZiBzb21ldGhpbmcgY2hhbmdlZCwgb3IgYWRkaW5nIGEgbmV3IHN0eWxlIGFuZCBpdCB3YXMg
YmxhbmsKKyAgICAgICAgdmFyIG1vdmVUb090aGVyID0gKGlzRWRpdGluZ05hbWUgXiAobW92ZURp
cmVjdGlvbiA9PT0gImZvcndhcmQiKSk7CisgICAgICAgIHZhciBzaG91bGRDb21taXROZXdQcm9w
ZXJ0eSA9IHRoaXMuX25ld1Byb3BlcnR5ICYmICghbW92ZURpcmVjdGlvbiAmJiAhaXNFZGl0aW5n
TmFtZSB8fCBtb3ZlVG9PdGhlciB8fCAoaXNFZGl0aW5nTmFtZSAmJiBibGFua0lucHV0KSk7Cisg
ICAgICAgIGlmICh1c2VySW5wdXQgIT09IHByZXZpb3VzQ29udGVudCAmJiAhdGhpcy5fbmV3UHJv
cGVydHkgfHwgc2hvdWxkQ29tbWl0TmV3UHJvcGVydHkpIHsgLy8gb25seSBpZiBzb21ldGhpbmcg
Y2hhbmdlZCwgb3IgYWRkaW5nIGEgbmV3IHByb3BlcnR5IGFuZCBuZWVkIHRvIGNvbW1pdCBpdAog
ICAgICAgICAgICAgdGhpcy50cmVlT3V0bGluZS5zZWN0aW9uLl9hZnRlclVwZGF0ZSA9IG1vdmVU
b05leHRDYWxsYmFjay5iaW5kKHRoaXMsIHRoaXMuX25ld1Byb3BlcnR5LCAhYmxhbmtJbnB1dCk7
Ci0gICAgICAgICAgICB0aGlzLmFwcGx5U3R5bGVUZXh0KHVzZXJJbnB1dCwgdHJ1ZSk7Ci0gICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgdmFyIHByb3BlcnR5VGV4dCA9IGJsYW5rSW5wdXQgfHwg
KHRoaXMuX25ld1Byb3BlcnR5ICYmIC9eXHMqJC8udGVzdCh0aGlzLnZhbHVlRWxlbWVudC50ZXh0
Q29udGVudCkpID8gIiIgOiAoaXNFZGl0aW5nTmFtZSA/ICh1c2VySW5wdXQucmVwbGFjZSgvOi9n
LCAiIikgKyAiOiAiICsgdGhpcy52YWx1ZUVsZW1lbnQudGV4dENvbnRlbnQpIDogKHRoaXMubmFt
ZUVsZW1lbnQudGV4dENvbnRlbnQgKyAiOiAiICsgdXNlcklucHV0KSk7CisgICAgICAgICAgICB0
aGlzLmFwcGx5U3R5bGVUZXh0KHByb3BlcnR5VGV4dCwgdHJ1ZSk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBpZiAoIXRoaXMuX25ld1Byb3BlcnR5KQorICAgICAgICAgICAgICAgIHRo
aXMudXBkYXRlVGl0bGUoKTsKICAgICAgICAgICAgIG1vdmVUb05leHRDYWxsYmFjayh0aGlzLl9u
ZXdQcm9wZXJ0eSwgZmFsc2UsIHRoaXMudHJlZU91dGxpbmUuc2VjdGlvbiwgZmFsc2UpOworICAg
ICAgICB9CisKIAorICAgICAgICB2YXIgbW92ZVRvSW5kZXggPSBtb3ZlVG8gJiYgdGhpcy50cmVl
T3V0bGluZSA/IHRoaXMudHJlZU91dGxpbmUuY2hpbGRyZW4uaW5kZXhPZihtb3ZlVG8pIDogLTE7
CiAgICAgICAgIC8vIFRoZSBDYWxsYmFjayB0byBzdGFydCBlZGl0aW5nIHRoZSBuZXh0IHByb3Bl
cnR5CiAgICAgICAgIGZ1bmN0aW9uIG1vdmVUb05leHRDYWxsYmFjayhhbHJlYWR5TmV3LCB2YWx1
ZUNoYW5nZWQsIHNlY3Rpb24pCiAgICAgICAgIHsKQEAgLTE2OTIsMjQgKzE3NjUsMzEgQEAgV2Vi
SW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAKICAgICAg
ICAgICAgIC8vIFVzZXIganVzdCB0YWJiZWQgdGhyb3VnaCB3aXRob3V0IGNoYW5nZXMKICAgICAg
ICAgICAgIGlmIChtb3ZlVG8gJiYgbW92ZVRvLnBhcmVudCkgewotICAgICAgICAgICAgICAgIG1v
dmVUby5zdGFydEVkaXRpbmcobW92ZVRvLnZhbHVlRWxlbWVudCk7CisgICAgICAgICAgICAgICAg
bW92ZVRvLnN0YXJ0RWRpdGluZyghaXNFZGl0aW5nTmFtZSA/IG1vdmVUby5uYW1lRWxlbWVudCA6
IG1vdmVUby52YWx1ZUVsZW1lbnQpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgLy8gVXNlciBoYXMgbWFkZSBhIGNoYW5nZSB0aGVuIHRhYmJl
ZCwgd2lwaW5nIGFsbCB0aGUgb3JpZ2luYWwgdHJlZUVsZW1lbnRzLAogICAgICAgICAgICAgLy8g
cmVjYWxjdWxhdGUgdGhlIG5ldyB0cmVlRWxlbWVudCBmb3IgdGhlIHNhbWUgcHJvcGVydHkgd2Ug
d2VyZSBnb2luZyB0byBlZGl0IG5leHQKLSAgICAgICAgICAgIC8vIEZJWE1FKGFwYXZsb3YpOiB0
aGlzIHdpbGwgbm90IHdvcmsgZm9yIG11bHRpcGxlIHNhbWUtbmFtZWQgcHJvcGVydGllcyBpbiBh
IHN0eWxlCi0gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgKHRoZSBmaXJzdCBvbmUgd2ls
bCBhbHdheXMgYmUgcmV0dXJuZWQpLgogICAgICAgICAgICAgaWYgKG1vdmVUbyAmJiAhbW92ZVRv
LnBhcmVudCkgewotICAgICAgICAgICAgICAgIHZhciB0cmVlRWxlbWVudCA9IHNlY3Rpb24uZmlu
ZFRyZWVFbGVtZW50V2l0aE5hbWUobW92ZVRvUHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAgICAg
ICBpZiAodHJlZUVsZW1lbnQpCi0gICAgICAgICAgICAgICAgICAgIHRyZWVFbGVtZW50LnN0YXJ0
RWRpdGluZyh0cmVlRWxlbWVudC52YWx1ZUVsZW1lbnQpOwotICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICB2YXIgcHJvcGVydHlFbGVtZW50cyA9IHNlY3Rpb24ucHJvcGVy
dGllc1RyZWVPdXRsaW5lLmNoaWxkcmVuOworICAgICAgICAgICAgICAgIGlmIChtb3ZlRGlyZWN0
aW9uID09PSAiZm9yd2FyZCIgJiYgYmxhbmtJbnB1dCAmJiAhaXNFZGl0aW5nTmFtZSkKKyAgICAg
ICAgICAgICAgICAgICAgLS1tb3ZlVG9JbmRleDsKKyAgICAgICAgICAgICAgICBpZiAobW92ZVRv
SW5kZXggPj0gcHJvcGVydHlFbGVtZW50cy5sZW5ndGggJiYgIXRoaXMuX25ld1Byb3BlcnR5KQor
ICAgICAgICAgICAgICAgICAgICBuZXdQcm9wZXJ0eSA9IHRydWU7CisgICAgICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHZhciB0cmVlRWxlbWVudCA9IG1vdmVUb0luZGV4
ID49IDAgPyBwcm9wZXJ0eUVsZW1lbnRzW21vdmVUb0luZGV4XSA6IG51bGw7CisgICAgICAgICAg
ICAgICAgICAgIGlmICh0cmVlRWxlbWVudCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdHJl
ZUVsZW1lbnQuc3RhcnRFZGl0aW5nKCFpc0VkaXRpbmdOYW1lID8gdHJlZUVsZW1lbnQubmFtZUVs
ZW1lbnQgOiB0cmVlRWxlbWVudC52YWx1ZUVsZW1lbnQpOworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFhbHJlYWR5TmV3KQor
ICAgICAgICAgICAgICAgICAgICAgICAgbW92ZVRvU2VsZWN0b3IgPSB0cnVlOworICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IGF0
dHJpYnV0ZSBpbiB0aGlzIHNlY3Rpb24KICAgICAgICAgICAgIGlmIChuZXdQcm9wZXJ0eSkgewot
ICAgICAgICAgICAgICAgIGlmIChhbHJlYWR5TmV3ICYmICF2YWx1ZUNoYW5nZWQpCisgICAgICAg
ICAgICAgICAgaWYgKGFscmVhZHlOZXcgJiYgIXZhbHVlQ2hhbmdlZCAmJiAoaXNFZGl0aW5nTmFt
ZSBeIG1vdmVEaXJlY3Rpb24gPT09ICJiYWNrd2FyZCIpKQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAKICAgICAgICAgICAgICAgICBzZWN0aW9uLmFkZE5ld0JsYW5rUHJvcGVydHkoKS5z
dGFydEVkaXRpbmcoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9U
ZXh0Vmlld2VyLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RleHRWaWV3ZXIuanMK
aW5kZXggOWFkNWU0OS4uYjdmN2NhNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL1RleHRWaWV3ZXIuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Rl
eHRWaWV3ZXIuanMKQEAgLTI2OCw3ICsyNjgsNyBAQCBXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5w
cm90b3R5cGUgPSB7CiAgICAgICAgIHZhciBvbGRDb250ZW50ID0gbGluZVJvdy5sYXN0Q2hpbGQu
aW5uZXJIVE1MOwogICAgICAgICB2YXIgY2FuY2VsRWRpdGluZ0NhbGxiYWNrID0gdGhpcy5fY2Fu
Y2VsRWRpdGluZ0xpbmUuYmluZCh0aGlzLCBsaW5lUm93Lmxhc3RDaGlsZCwgb2xkQ29udGVudCk7
CiAgICAgICAgIHZhciBjb21taXRFZGl0aW5nQ2FsbGJhY2sgPSB0aGlzLl9jb21taXRFZGl0aW5n
TGluZS5iaW5kKHRoaXMsIGxpbmVSb3cubGluZU51bWJlciwgbGluZVJvdy5sYXN0Q2hpbGQsIGNh
bmNlbEVkaXRpbmdDYWxsYmFjayk7Ci0gICAgICAgIHRoaXMuX2VkaXRpbmdMaW5lID0gV2ViSW5z
cGVjdG9yLnN0YXJ0RWRpdGluZyhsaW5lUm93Lmxhc3RDaGlsZCwgY29tbWl0RWRpdGluZ0NhbGxi
YWNrLCBjYW5jZWxFZGl0aW5nQ2FsbGJhY2ssIG51bGwsIHRydWUpOworICAgICAgICB0aGlzLl9l
ZGl0aW5nTGluZSA9IFdlYkluc3BlY3Rvci5zdGFydEVkaXRpbmcobGluZVJvdy5sYXN0Q2hpbGQs
IGNvbW1pdEVkaXRpbmdDYWxsYmFjaywgY2FuY2VsRWRpdGluZ0NhbGxiYWNrLCBudWxsLCB7IG11
bHRpbGluZTogdHJ1ZSB9KTsKICAgICB9LAogCiAgICAgX2NvbW1pdEVkaXRpbmdMaW5lOiBmdW5j
dGlvbihsaW5lTnVtYmVyLCBlbGVtZW50LCBjYW5jZWxFZGl0aW5nQ2FsbGJhY2spCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmNzcyBiL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuY3NzCmluZGV4IDk2NTY4OWIuLmM5MDg0Mjcg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuY3NzCisr
KyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuY3NzCkBAIC0xNDI0LDYg
KzE0MjQsMTIgQEAgYm9keS5pbmFjdGl2ZSAucGxhY2FyZC5zZWxlY3RlZCB7CiAgICAgdGV4dC1k
ZWNvcmF0aW9uOiBub25lICFpbXBvcnRhbnQ7CiB9CiAKKy5jaGlsZC1lZGl0aW5nIHsKKyAgICBj
b2xvcjogYmxhY2sgIWltcG9ydGFudDsKKyAgICB0ZXh0LWRlY29yYXRpb246IG5vbmUgIWltcG9y
dGFudDsKKyAgICBvdmVyZmxvdzogdmlzaWJsZSAhaW1wb3J0YW50OworfQorCiAuZWRpdGluZyBi
ciB7CiAgICAgZGlzcGxheTogbm9uZTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9pbnNwZWN0b3IuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5z
cGVjdG9yLmpzCmluZGV4IGY3MWI4OWEuLmNkZTFjMzMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL2luc3BlY3Rvci5qcwpAQCAtMTkxNiwxMCArMTkxNiwxNCBAQCBXZWJJbnNwZWN0b3Iu
aXNFZGl0aW5nQW55RmllbGQgPSBmdW5jdGlvbigpCiAgICAgcmV0dXJuIHRoaXMuX19lZGl0aW5n
OwogfQogCi1XZWJJbnNwZWN0b3Iuc3RhcnRFZGl0aW5nID0gZnVuY3Rpb24oZWxlbWVudCwgY29t
bWl0dGVkQ2FsbGJhY2ssIGNhbmNlbGxlZENhbGxiYWNrLCBjb250ZXh0LCBtdWx0aWxpbmUpCisv
LyBBdmFpbGFibGUgY29uZmlnIGZpZWxkczoKKy8vIG11bHRpbGluZTogdHJ1ZXxmYWxzZSAtIHdo
ZXRoZXIgdGhlIGVkaXRlZCBlbGVtZW50IGlzIG11bHRpbGluZQorLy8gY3VzdG9tRmluaXNoSGFu
ZGxlcjogRnVuY3Rpb24gLSBjdXN0b20gZmluaXNoIGhhbmRsZXIgZm9yIHRoZSBlZGl0aW5nIHNl
c3Npb24KK1dlYkluc3BlY3Rvci5zdGFydEVkaXRpbmcgPSBmdW5jdGlvbihlbGVtZW50LCBjb21t
aXR0ZWRDYWxsYmFjaywgY2FuY2VsbGVkQ2FsbGJhY2ssIGNvbnRleHQsIGNvbmZpZykKIHsKICAg
ICBpZiAoZWxlbWVudC5fX2VkaXRpbmcpCiAgICAgICAgIHJldHVybjsKKyAgICBjb25maWcgPSBj
b25maWcgfHwge307CiAgICAgZWxlbWVudC5fX2VkaXRpbmcgPSB0cnVlOwogICAgIFdlYkluc3Bl
Y3Rvci5fX2VkaXRpbmcgPSB0cnVlOwogCkBAIC0xOTc4LDIwICsxOTgyLDM5IEBAIFdlYkluc3Bl
Y3Rvci5zdGFydEVkaXRpbmcgPSBmdW5jdGlvbihlbGVtZW50LCBjb21taXR0ZWRDYWxsYmFjaywg
Y2FuY2VsbGVkQ2FsbGJhCiAgICAgICAgICAgICBjb21taXR0ZWRDYWxsYmFjayh0aGlzLCBnZXRD
b250ZW50KHRoaXMpLCBvbGRUZXh0LCBjb250ZXh0LCBtb3ZlRGlyZWN0aW9uKTsKICAgICB9CiAK
LSAgICBmdW5jdGlvbiBrZXlEb3duRXZlbnRMaXN0ZW5lcihldmVudCkgeworICAgIGZ1bmN0aW9u
IGRlZmF1bHRGaW5pc2hIYW5kbGVyKGV2ZW50KQorICAgIHsKICAgICAgICAgdmFyIGlzTWV0YU9y
Q3RybCA9IFdlYkluc3BlY3Rvci5pc01hYygpID8KICAgICAgICAgICAgIGV2ZW50Lm1ldGFLZXkg
JiYgIWV2ZW50LnNoaWZ0S2V5ICYmICFldmVudC5jdHJsS2V5ICYmICFldmVudC5hbHRLZXkgOgog
ICAgICAgICAgICAgZXZlbnQuY3RybEtleSAmJiAhZXZlbnQuc2hpZnRLZXkgJiYgIWV2ZW50Lm1l
dGFLZXkgJiYgIWV2ZW50LmFsdEtleTsKLSAgICAgICAgaWYgKGlzRW50ZXJLZXkoZXZlbnQpICYm
ICghbXVsdGlsaW5lIHx8IGlzTWV0YU9yQ3RybCkpIHsKKyAgICAgICAgaWYgKGlzRW50ZXJLZXko
ZXZlbnQpICYmICghY29uZmlnLm11bHRpbGluZSB8fCBpc01ldGFPckN0cmwpKQorICAgICAgICAg
ICAgcmV0dXJuICJjb21taXQiOworICAgICAgICBlbHNlIGlmIChldmVudC5rZXlDb2RlID09PSBX
ZWJJbnNwZWN0b3IuS2V5Ym9hcmRTaG9ydGN1dC5LZXlzLkVzYy5jb2RlKQorICAgICAgICAgICAg
cmV0dXJuICJjYW5jZWwiOworICAgICAgICBlbHNlIGlmIChldmVudC5rZXlJZGVudGlmaWVyID09
PSAiVSswMDA5IikgLy8gVGFiIGtleQorICAgICAgICAgICAgcmV0dXJuICJtb3ZlLSIgKyAoZXZl
bnQuc2hpZnRLZXkgPyAiYmFja3dhcmQiIDogImZvcndhcmQiKTsKKyAgICB9CisKKyAgICBmdW5j
dGlvbiBrZXlEb3duRXZlbnRMaXN0ZW5lcihldmVudCkgeworICAgICAgICB2YXIgaGFuZGxlciA9
IGNvbmZpZy5jdXN0b21GaW5pc2hIYW5kbGVyIHx8IGRlZmF1bHRGaW5pc2hIYW5kbGVyOworICAg
ICAgICB2YXIgcmVzdWx0ID0gaGFuZGxlcihldmVudCk7CisgICAgICAgIGlmIChyZXN1bHQgPT09
ICJjb21taXQiKSB7CiAgICAgICAgICAgICBlZGl0aW5nQ29tbWl0dGVkLmNhbGwoZWxlbWVudCk7
CiAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgZXZlbnQu
c3RvcFByb3BhZ2F0aW9uKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5Q29kZSA9PT0g
V2ViSW5zcGVjdG9yLktleWJvYXJkU2hvcnRjdXQuS2V5cy5Fc2MuY29kZSkgeworICAgICAgICB9
IGVsc2UgaWYgKHJlc3VsdCA9PT0gImNhbmNlbCIpIHsKICAgICAgICAgICAgIGVkaXRpbmdDYW5j
ZWxsZWQuY2FsbChlbGVtZW50KTsKICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7
CiAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKLSAgICAgICAgfSBlbHNlIGlm
IChldmVudC5rZXlJZGVudGlmaWVyID09PSAiVSswMDA5IikgLy8gVGFiIGtleQotICAgICAgICAg
ICAgbW92ZURpcmVjdGlvbiA9IChldmVudC5zaGlmdEtleSA/ICJiYWNrd2FyZCIgOiAiZm9yd2Fy
ZCIpOworICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCAmJiByZXN1bHQuaW5kZXhPZigibW92ZS0i
KSA9PT0gMCkgeworICAgICAgICAgICAgbW92ZURpcmVjdGlvbiA9IHJlc3VsdC5zdWJzdHJpbmco
NSk7CisgICAgICAgICAgICBpZiAoZXZlbnQua2V5SWRlbnRpZmllciAhPT0gIlUrMDAwOSIpIHsK
KyAgICAgICAgICAgICAgICAvLyBFbXVsYXRlICJUYWIiIGtleWRvd24gZXZlbnQuCisgICAgICAg
ICAgICAgICAgdmFyIGV2dCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCJLZXlib2FyZEV2ZW50Iik7
CisgICAgICAgICAgICAgICAgZXZ0LmluaXRLZXlib2FyZEV2ZW50KCJrZXlkb3duIiwgdHJ1ZSwg
dHJ1ZSwgbnVsbCwgIlUrMDAwOSIsICIiKTsKKyAgICAgICAgICAgICAgICBlbGVtZW50LmRpc3Bh
dGNoRXZlbnQoZXZ0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KIAogICAgIGVs
ZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsIGJsdXJFdmVudExpc3RlbmVyLCBmYWxzZSk7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdHJlZW91dGxpbmUuanMg
Yi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdHJlZW91dGxpbmUuanMKaW5kZXggYTFlMDUy
Zi4uMjdiYzgzOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3RyZWVv
dXRsaW5lLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC90cmVlb3V0bGluZS5q
cwpAQCAtODIxLDYgKzgyMSwxMCBAQCBUcmVlRWxlbWVudC5wcm90b3R5cGUuc2VsZWN0ID0gZnVu
Y3Rpb24oc3VwcmVzc09uU2VsZWN0LCBzZWxlY3RlZEJ5VXNlcikKIAogICAgIHRoaXMuc2VsZWN0
ZWQgPSB0cnVlOwogICAgIHRoaXMudHJlZU91dGxpbmUuX2NoaWxkcmVuTGlzdE5vZGUuZm9jdXMo
KTsKKworICAgIC8vIEZvY3VzaW5nIG9uIGFub3RoZXIgbm9kZSBtYXkgZGV0YWNoICJ0aGlzIiBm
cm9tIHRyZWUuCisgICAgaWYgKCF0aGlzLnRyZWVPdXRsaW5lKQorICAgICAgICByZXR1cm47CiAg
ICAgdGhpcy50cmVlT3V0bGluZS5zZWxlY3RlZFRyZWVFbGVtZW50ID0gdGhpczsKICAgICBpZiAo
dGhpcy5fbGlzdEl0ZW1Ob2RlKQogICAgICAgICB0aGlzLl9saXN0SXRlbU5vZGUuYWRkU3R5bGVD
bGFzcygic2VsZWN0ZWQiKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75824</attachid>
            <date>2010-12-07 09:36:51 -0800</date>
            <delta_ts>2010-12-08 04:41:31 -0800</delta_ts>
            <desc>[PATCH] Nits fixed</desc>
            <filename>firebugcss.patch</filename>
            <type>text/plain</type>
            <size>28225</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">Y29tbWl0IDcwMDNjOWYzMWRjMzI4YTMyY2ZjYmQ5MmI2MGQyNmE0OWE4MjM1MTgKQXV0aG9yOiBB
bGV4YW5kZXIgUGF2bG92IDxhcGF2bG92QGNocm9taXVtLm9yZz4KRGF0ZTogICBGcmkgRGVjIDMg
MjA6MDc6NDMgMjAxMCArMDMwMAoKICAgIEZpcmVidWctbGlrZSBDU1MgZWRpdGluZyBpbiB0aGUg
U3R5bGVzIHBhbmUKCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKaW5kZXggNWIzOTg2ZS4uNTVmN2RiNSAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEy
IEBACisyMDEwLTEyLTA2ICBBbGV4YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIElu
c3BlY3RvcjogRW5hYmxlIENTUyBwcm9wZXJ0eSBlZGl0aW5nIG5hbWUvdmFsdWUtd2lzZSAobGlr
ZSBGaXJlYnVnIGRvZXMpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD01MDU2NQorCisgICAgICAgICogaW5zcGVjdG9yL3N0eWxlcy1hZGQtYmxhbmstcHJv
cGVydHkuaHRtbDoKKwogMjAxMC0xMi0wNyAgSnVzdGluIFNjaHVoICA8anNjaHVoQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBOaWtvbGFzIFppbW1lcm1hbm4uCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLWFkZC1ibGFuay1wcm9wZXJ0eS5odG1s
IGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy1hZGQtYmxhbmstcHJvcGVydHkuaHRtbApp
bmRleCAwMTNjMzExLi5mZDM2YTk1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
c3R5bGVzLWFkZC1ibGFuay1wcm9wZXJ0eS5odG1sCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rv
ci9zdHlsZXMtYWRkLWJsYW5rLXByb3BlcnR5Lmh0bWwKQEAgLTM5LDggKzM5LDkgQEAgZnVuY3Rp
b24gZnJvbnRlbmRfZHVtcEluc3BlY3RlZFN0eWxlKHRlc3RDb250cm9sbGVyKQogCiAgICAgdmFy
IGV2dCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCJLZXlib2FyZEV2ZW50Iik7CiAgICAgZXZ0Lmlu
aXRLZXlib2FyZEV2ZW50KCJrZXlkb3duIiwgdHJ1ZSAvKiBjYW4gYnViYmxlICovLCB0cnVlIC8q
IGNhbiBjYW5jZWwgKi8sIG51bGwgLyogdmlldyAqLywgIkVudGVyIiwgIiIpOwotICAgIHRyZWVF
bGVtZW50Lmxpc3RJdGVtRWxlbWVudC50ZXh0Q29udGVudCA9ICJ0ZXh0LWRlY29yYXRpb246IG5v
bmUiOwotICAgIHRyZWVFbGVtZW50Lmxpc3RJdGVtRWxlbWVudC5kaXNwYXRjaEV2ZW50KGV2dCk7
CisgICAgdHJlZUVsZW1lbnQubmFtZUVsZW1lbnQudGV4dENvbnRlbnQgPSAidGV4dC1kZWNvcmF0
aW9uIjsKKyAgICB0cmVlRWxlbWVudC52YWx1ZUVsZW1lbnQudGV4dENvbnRlbnQgPSAibm9uZSI7
CisgICAgdHJlZUVsZW1lbnQubmFtZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChldnQpOwogCiAgICAg
dGVzdENvbnRyb2xsZXIucnVuQWZ0ZXJQZW5kaW5nRGlzcGF0Y2hlcyhmcm9udGVuZF9kdW1wUmVz
dWx0cy5iaW5kKHRoaXMsIHRlc3RDb250cm9sbGVyKSk7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDRmYmViNzEuLmZmNTljODEgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzMgQEAKKzIwMTAtMTItMDYgIEFsZXhhbmRlciBQYXZsb3YgIDxhcGF2bG92QGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBXZWIgSW5zcGVjdG9yOiBFbmFibGUgQ1NTIHByb3BlcnR5IGVkaXRpbmcgbmFtZS92YWx1ZS13
aXNlIChsaWtlIEZpcmVidWcgZG9lcykKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTUwNTY1CisKKyAgICAgICAgRm9yIENTUyBwcm9wZXJ0eSBlZGl0aW5n
LCB0aGUgcHJvcGVydHkgbmFtZSBhbmQgdmFsdWUgaGF2ZSBiZWNvbWUgdHdvIGZpZWxkcyBzZXBh
cmF0ZWQKKyAgICAgICAgYnkgYSBjb2xvbiAocmF0aGVyIHRoYW4gb25lIGZpZWxkIGNvbnRhaW5p
bmcgdGhlIGZ1bGwgcHJvcGVydHkgdGV4dC4pIEEgdXNlciBjYW4gdGFiCisgICAgICAgIGJldHdl
ZW4gdGhlIG5hbWUgYW5kIHZhbHVlIGZpZWxkcyBmb3J3YXJkIGFuZCBiYWNrd2FyZC4gQSBjb2xv
biB0eXBlZCBpbiB0aGUgbmFtZSBmaWVsZAorICAgICAgICBhbmQgYSBzZW1pY29sb24gaW4gdGhl
IHZhbHVlIGZpZWxkICh1bmxlc3MgZm91bmQgaW5zaWRlIGEgc3RyaW5nKSBhY3QgYXMgYSBUYWIg
YW5kIGZvY3VzCisgICAgICAgIHRoZSBuZXh0IGVkaXRhYmxlIGZpZWxkICh3aGlsZSBhcHBseWlu
ZyB0aGUgZW50aXJlIHByb3BlcnR5IHZhbHVlLikKKworICAgICAgICAqIGluc3BlY3Rvci9mcm9u
dC1lbmQvRWxlbWVudHNUcmVlT3V0bGluZS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVt
ZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZS5fc3RhcnRFZGl0aW5nQXNIVE1MKToKKyAgICAgICAg
KiBpbnNwZWN0b3IvZnJvbnQtZW5kL1N0eWxlc1NpZGViYXJQYW5lLmpzOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLlN0eWxlUHJvcGVydGllc1NlY3Rpb24ucHJvdG90eXBlLmFkZE5ld0JsYW5rUHJv
cGVydHkpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydGllc1NlY3Rpb24ucHJv
dG90eXBlLmVkaXRpbmdTZWxlY3RvckNvbW1pdHRlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
U3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZS4pOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9mcm9udC1lbmQvVGV4dFZpZXdlci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0
Vmlld2VyLnByb3RvdHlwZS5faGFuZGxlRG91YmxlQ2xpY2spOgorICAgICAgICAqIGluc3BlY3Rv
ci9mcm9udC1lbmQvaW5zcGVjdG9yLmNzczoKKyAgICAgICAgKC5jaGlsZC1lZGl0aW5nKToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qczoKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5zdGFydEVkaXRpbmcuZGVmYXVsdEZpbmlzaEhhbmRsZXIpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLnN0YXJ0RWRpdGluZyk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC90
cmVlb3V0bGluZS5qczoKKyAgICAgICAgKFRyZWVFbGVtZW50LnByb3RvdHlwZS5zZWxlY3QpOgor
CiAyMDEwLTEyLTA3ICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IEFuZHJlYXMgS2xpbmcuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNUcmVlT3V0bGluZS5qcyBiL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9FbGVtZW50c1RyZWVPdXRsaW5lLmpzCmluZGV4IDAyYTc5MTEuLmNjYTMw
NDYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1RyZWVP
dXRsaW5lLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1RyZWVP
dXRsaW5lLmpzCkBAIC05ODAsNyArOTgwLDcgQEAgV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVs
ZW1lbnQucHJvdG90eXBlID0gewogICAgICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24oKTsK
ICAgICAgICAgfQogCi0gICAgICAgIHRoaXMuX2VkaXRpbmcgPSBXZWJJbnNwZWN0b3Iuc3RhcnRF
ZGl0aW5nKHRoaXMuX2h0bWxFZGl0RWxlbWVudCwgY29tbWl0LmJpbmQodGhpcyksIGRpc3Bvc2Uu
YmluZCh0aGlzKSwgbnVsbCwgdHJ1ZSk7CisgICAgICAgIHRoaXMuX2VkaXRpbmcgPSBXZWJJbnNw
ZWN0b3Iuc3RhcnRFZGl0aW5nKHRoaXMuX2h0bWxFZGl0RWxlbWVudCwgY29tbWl0LmJpbmQodGhp
cyksIGRpc3Bvc2UuYmluZCh0aGlzKSwgbnVsbCwgeyBtdWx0aWxpbmU6IHRydWUgfSk7CiAgICAg
fSwKIAogICAgIF9hdHRyaWJ1dGVFZGl0aW5nQ29tbWl0dGVkOiBmdW5jdGlvbihlbGVtZW50LCBu
ZXdUZXh0LCBvbGRUZXh0LCBhdHRyaWJ1dGVOYW1lLCBtb3ZlRGlyZWN0aW9uKQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1N0eWxlc1NpZGViYXJQYW5lLmpzIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1N0eWxlc1NpZGViYXJQYW5lLmpzCmluZGV4IGRiNzI0
ODYuLjE2ZWRhNGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TdHls
ZXNTaWRlYmFyUGFuZS5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU3R5bGVz
U2lkZWJhclBhbmUuanMKQEAgLTc5NSw2ICs3OTUsNyBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQcm9w
ZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMucHJvcGVydGllc1RyZWVP
dXRsaW5lLmFwcGVuZENoaWxkKGl0ZW0pOwogICAgICAgICBpdGVtLmxpc3RJdGVtRWxlbWVudC50
ZXh0Q29udGVudCA9ICIiOwogICAgICAgICBpdGVtLl9uZXdQcm9wZXJ0eSA9IHRydWU7CisgICAg
ICAgIGl0ZW0udXBkYXRlVGl0bGUoKTsKICAgICAgICAgcmV0dXJuIGl0ZW07CiAgICAgfSwKIApA
QCAtODkwLDcgKzg5MSw3IEBAIFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnRpZXNTZWN0aW9uLnBy
b3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICB0aGlzLmFkZE5ld0JsYW5rUHJvcGVydHkoKS5z
dGFydEVkaXRpbmcoKTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIHZhciBp
dGVtID0gdGhpcy5wcm9wZXJ0aWVzVHJlZU91dGxpbmUuY2hpbGRyZW5bMF0KLSAgICAgICAgICAg
ICAgICBpdGVtLnN0YXJ0RWRpdGluZyhpdGVtLnZhbHVlRWxlbWVudCk7CisgICAgICAgICAgICAg
ICAgaXRlbS5zdGFydEVkaXRpbmcoaXRlbS5uYW1lRWxlbWVudCk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KIApAQCAtMTM0Niw4ICsxMzQ3LDExIEBAIFdlYkluc3BlY3Rvci5TdHlsZVByb3Bl
cnR5VHJlZUVsZW1lbnQucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLmxpc3RJdGVtRWxlbWVu
dC5hcHBlbmRDaGlsZCh2YWx1ZUVsZW1lbnQpOwogICAgICAgICB0aGlzLmxpc3RJdGVtRWxlbWVu
dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiOyIpKTsKIAotICAgICAgICBp
ZiAoIXRoaXMucGFyc2VkT2spCisgICAgICAgIGlmICghdGhpcy5wYXJzZWRPaykgeworICAgICAg
ICAgICAgLy8gQXZvaWQgaGF2aW5nIGxvbmdoYW5kcyB1bmRlciBhbiBpbnZhbGlkIHNob3J0aGFu
ZC4KKyAgICAgICAgICAgIHRoaXMuaGFzQ2hpbGRyZW4gPSBmYWxzZTsKICAgICAgICAgICAgIHRo
aXMubGlzdEl0ZW1FbGVtZW50LmFkZFN0eWxlQ2xhc3MoIm5vdC1wYXJzZWQtb2siKTsKKyAgICAg
ICAgfQogICAgICAgICBpZiAodGhpcy5wcm9wZXJ0eS5pbmFjdGl2ZSkKICAgICAgICAgICAgIHRo
aXMubGlzdEl0ZW1FbGVtZW50LmFkZFN0eWxlQ2xhc3MoImluYWN0aXZlIik7CiAKQEAgLTE0NjAs
NjAgKzE0NjQsMTQwIEBAIFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQucHJv
dG90eXBlID0gewogICAgICAgICBpZiAodGhpcy5wYXJlbnQuc2hvcnRoYW5kKQogICAgICAgICAg
ICAgcmV0dXJuOwogCi0gICAgICAgIGlmIChXZWJJbnNwZWN0b3IuaXNCZWluZ0VkaXRlZCh0aGlz
Lmxpc3RJdGVtRWxlbWVudCkgfHwgKHRoaXMudHJlZU91dGxpbmUuc2VjdGlvbiAmJiAhdGhpcy50
cmVlT3V0bGluZS5zZWN0aW9uLmVkaXRhYmxlKSkKKyAgICAgICAgaWYgKHRoaXMudHJlZU91dGxp
bmUuc2VjdGlvbiAmJiAhdGhpcy50cmVlT3V0bGluZS5zZWN0aW9uLmVkaXRhYmxlKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICghc2VsZWN0RWxlbWVudCkKKyAgICAgICAgICAg
IHNlbGVjdEVsZW1lbnQgPSB0aGlzLm5hbWVFbGVtZW50OyAvLyBObyBhcmd1bWVudHMgcGFzc2Vk
IGluIC0gZWRpdCB0aGUgbmFtZSBlbGVtZW50IGJ5IGRlZmF1bHQuCisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHNlbGVjdEVsZW1lbnQgPSBzZWxlY3RFbGVtZW50LmVuY2xvc2luZ05vZGVPclNl
bGZXaXRoQ2xhc3MoIndlYmtpdC1jc3MtcHJvcGVydHkiKSB8fCBzZWxlY3RFbGVtZW50LmVuY2xv
c2luZ05vZGVPclNlbGZXaXRoQ2xhc3MoInZhbHVlIik7CisKKyAgICAgICAgdmFyIGlzRWRpdGlu
Z05hbWUgPSBzZWxlY3RFbGVtZW50ID09PSB0aGlzLm5hbWVFbGVtZW50OworICAgICAgICBpZiAo
IWlzRWRpdGluZ05hbWUgJiYgc2VsZWN0RWxlbWVudCAhPT0gdGhpcy52YWx1ZUVsZW1lbnQpIHsK
KyAgICAgICAgICAgIC8vIERvdWJsZS1jbGljayBpbiB0aGUgTEkgLSBzdGFydCBlZGl0aW5nIHZh
bHVlLgorICAgICAgICAgICAgaXNFZGl0aW5nTmFtZSA9IGZhbHNlOworICAgICAgICAgICAgc2Vs
ZWN0RWxlbWVudCA9IHRoaXMudmFsdWVFbGVtZW50OworICAgICAgICB9CisKKyAgICAgICAgaWYg
KFdlYkluc3BlY3Rvci5pc0JlaW5nRWRpdGVkKHNlbGVjdEVsZW1lbnQpKQogICAgICAgICAgICAg
cmV0dXJuOwogCiAgICAgICAgIHZhciBjb250ZXh0ID0gewogICAgICAgICAgICAgZXhwYW5kZWQ6
IHRoaXMuZXhwYW5kZWQsCiAgICAgICAgICAgICBoYXNDaGlsZHJlbjogdGhpcy5oYXNDaGlsZHJl
biwKLSAgICAgICAgICAgIGtleURvd25MaXN0ZW5lcjogdGhpcy5lZGl0aW5nS2V5RG93bi5iaW5k
KHRoaXMpLAotICAgICAgICAgICAga2V5UHJlc3NMaXN0ZW5lcjogdGhpcy5lZGl0aW5nS2V5UHJl
c3MuYmluZCh0aGlzKQorICAgICAgICAgICAga2V5RG93bkxpc3RlbmVyOiBpc0VkaXRpbmdOYW1l
ID8gdGhpcy5lZGl0aW5nTmFtZUtleURvd24uYmluZCh0aGlzKSA6IHRoaXMuZWRpdGluZ1ZhbHVl
S2V5RG93bi5iaW5kKHRoaXMpLAorICAgICAgICAgICAga2V5UHJlc3NMaXN0ZW5lcjogaXNFZGl0
aW5nTmFtZSA/IHRoaXMuZWRpdGluZ05hbWVLZXlQcmVzcy5iaW5kKHRoaXMpIDogdGhpcy5lZGl0
aW5nVmFsdWVLZXlQcmVzcy5iaW5kKHRoaXMpLAorICAgICAgICAgICAgaXNFZGl0aW5nTmFtZTog
aXNFZGl0aW5nTmFtZSwKICAgICAgICAgfTsKIAogICAgICAgICAvLyBMaWUgYWJvdXQgb3VyIGNo
aWxkcmVuIHRvIHByZXZlbnQgZXhwYW5kaW5nIG9uIGRvdWJsZSBjbGljayBhbmQgdG8gY29sbGFw
c2Ugc2hvcnRoYW5kcy4KICAgICAgICAgdGhpcy5oYXNDaGlsZHJlbiA9IGZhbHNlOwogCi0gICAg
ICAgIGlmICghc2VsZWN0RWxlbWVudCkKLSAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQgPSB0aGlz
Lmxpc3RJdGVtRWxlbWVudDsKKyAgICAgICAgc2VsZWN0RWxlbWVudC5hZGRFdmVudExpc3RlbmVy
KCJrZXlkb3duIiwgY29udGV4dC5rZXlEb3duTGlzdGVuZXIsIGZhbHNlKTsKKyAgICAgICAgc2Vs
ZWN0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlwcmVzcyIsIGNvbnRleHQua2V5UHJlc3NM
aXN0ZW5lciwgZmFsc2UpOworICAgICAgICBpZiAoc2VsZWN0RWxlbWVudC5wYXJlbnRFbGVtZW50
KQorICAgICAgICAgICAgc2VsZWN0RWxlbWVudC5wYXJlbnRFbGVtZW50LmFkZFN0eWxlQ2xhc3Mo
ImNoaWxkLWVkaXRpbmciKTsKKyAgICAgICAgc2VsZWN0RWxlbWVudC50ZXh0Q29udGVudCA9IHNl
bGVjdEVsZW1lbnQudGV4dENvbnRlbnQ7IC8vIHJlbW92ZSBjb2xvciBzd2F0Y2ggYW5kIHRoZSBs
aWtlCiAKLSAgICAgICAgdGhpcy5saXN0SXRlbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5
ZG93biIsIGNvbnRleHQua2V5RG93bkxpc3RlbmVyLCBmYWxzZSk7Ci0gICAgICAgIHRoaXMubGlz
dEl0ZW1FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleXByZXNzIiwgY29udGV4dC5rZXlQcmVz
c0xpc3RlbmVyLCBmYWxzZSk7CisgICAgICAgIGZ1bmN0aW9uIHNob3VsZENvbW1pdFZhbHVlU2Vt
aWNvbG9uKHRleHQsIGN1cnNvclBvc2l0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBG
SVhNRTogc2hvdWxkIHRoaXMgYWNjb3VudCBmb3Igc2VtaWNvbG9ucyBpbnNpZGUgY29tbWVudHM/
CisgICAgICAgICAgICB2YXIgb3BlblF1b3RlID0gIiI7CisgICAgICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGN1cnNvclBvc2l0aW9uOyArK2kpIHsKKyAgICAgICAgICAgICAgICB2YXIgY2gg
PSB0ZXh0W2ldOworICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gIlxcIiAmJiBvcGVuUXVvdGUg
IT09ICIiKQorICAgICAgICAgICAgICAgICAgICArK2k7IC8vIHNraXAgbmV4dCBjaGFyYWN0ZXIg
aW5zaWRlIHN0cmluZworICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFvcGVuUXVvdGUgJiYgKGNo
ID09PSAiXCIiIHx8IGNoID09PSAiJyIpKQorICAgICAgICAgICAgICAgICAgICBvcGVuUXVvdGUg
PSBjaDsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChvcGVuUXVvdGUgPT09IGNoKQorICAgICAg
ICAgICAgICAgICAgICBvcGVuUXVvdGUgPSAiIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHJldHVybiAhb3BlblF1b3RlOworICAgICAgICB9CiAKLSAgICAgICAgV2ViSW5zcGVjdG9yLnN0
YXJ0RWRpdGluZyh0aGlzLmxpc3RJdGVtRWxlbWVudCwgdGhpcy5lZGl0aW5nQ29tbWl0dGVkLmJp
bmQodGhpcyksIHRoaXMuZWRpdGluZ0NhbmNlbGxlZC5iaW5kKHRoaXMpLCBjb250ZXh0KTsKKyAg
ICAgICAgZnVuY3Rpb24gbmFtZVZhbHVlRmluaXNoSGFuZGxlcihjb250ZXh0LCBpc0VkaXRpbmdO
YW1lLCBldmVudCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGlzRmllbGRJbnB1dFRlcm1p
bmF0ZWQgPSBpc0VkaXRpbmdOYW1lID8gKGV2ZW50LmtleUlkZW50aWZpZXIgPT09ICJVKzAwQkEi
ICYmIGV2ZW50LnNoaWZ0S2V5KSA6IChldmVudC5rZXlJZGVudGlmaWVyID09PSAiVSswMEJBIiAm
JiAhZXZlbnQuc2hpZnRLZXkgJiYgc2hvdWxkQ29tbWl0VmFsdWVTZW1pY29sb24oZXZlbnQudGFy
Z2V0LnRleHRDb250ZW50LCBldmVudC50YXJnZXQuc2VsZWN0aW9uTGVmdE9mZnNldCkpOworICAg
ICAgICAgICAgaWYgKGlzRW50ZXJLZXkoZXZlbnQpIHx8IGlzRmllbGRJbnB1dFRlcm1pbmF0ZWQp
IHsKKyAgICAgICAgICAgICAgICAvLyBFbnRlciBvciBjb2xvbiAoZm9yIG5hbWUpL3NlbWljb2xv
biBvdXRzaWRlIG9mIHN0cmluZyAoZm9yIHZhbHVlKS4KKyAgICAgICAgICAgICAgICBldmVudC5w
cmV2ZW50RGVmYXVsdCgpOworICAgICAgICAgICAgICAgIHJldHVybiAibW92ZS1mb3J3YXJkIjsK
KyAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5Q29kZSA9PT0gV2ViSW5zcGVjdG9yLktl
eWJvYXJkU2hvcnRjdXQuS2V5cy5Fc2MuY29kZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gImNh
bmNlbCI7CisgICAgICAgICAgICBlbHNlIGlmIChldmVudC5rZXlJZGVudGlmaWVyID09PSAiVSsw
MDA5IikgLy8gVGFiIGtleS4KKyAgICAgICAgICAgICAgICByZXR1cm4gIm1vdmUtIiArIChldmVu
dC5zaGlmdEtleSA/ICJiYWNrd2FyZCIgOiAiZm9yd2FyZCIpOworICAgICAgICB9CisKKyAgICAg
ICAgV2ViSW5zcGVjdG9yLnN0YXJ0RWRpdGluZyhzZWxlY3RFbGVtZW50LCB0aGlzLmVkaXRpbmdD
b21taXR0ZWQuYmluZCh0aGlzKSwgdGhpcy5lZGl0aW5nQ2FuY2VsbGVkLmJpbmQodGhpcyksIGNv
bnRleHQsCisgICAgICAgICAgICB7IGN1c3RvbUZpbmlzaEhhbmRsZXI6IG5hbWVWYWx1ZUZpbmlz
aEhhbmRsZXIuYmluZCh0aGlzLCBjb250ZXh0LCBpc0VkaXRpbmdOYW1lKSB9ICk7CiAgICAgICAg
IHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5zZXRCYXNlQW5kRXh0ZW50KHNlbGVjdEVsZW1lbnQsIDAs
IHNlbGVjdEVsZW1lbnQsIDEpOwogICAgIH0sCiAKLSAgICBlZGl0aW5nS2V5UHJlc3M6IGZ1bmN0
aW9uKGV2ZW50KQorICAgIGVkaXRpbmdOYW1lS2V5UHJlc3M6IGZ1bmN0aW9uKGV2ZW50KQogICAg
IHsKLSAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKLSAgICAg
ICAgdmFyIGNvbG9uSW5kZXggPSB0aGlzLmxpc3RJdGVtRWxlbWVudC50ZXh0Q29udGVudC5pbmRl
eE9mKCI6Iik7Ci0gICAgICAgIHZhciBzZWxlY3Rpb25MZWZ0T2Zmc2V0ID0gZXZlbnQudGFyZ2V0
LnNlbGVjdGlvbkxlZnRPZmZzZXQ7Ci0KLSAgICAgICAgaWYgKGNvbG9uSW5kZXggPCAwIHx8IHNl
bGVjdGlvbkxlZnRPZmZzZXQgPD0gY29sb25JbmRleCkgewotICAgICAgICAgICAgLy8gQ29tcGxl
dGUgcHJvcGVydHkgbmFtZXMuCi0gICAgICAgICAgICB2YXIgY2hhcmFjdGVyID0gZXZlbnQuZGF0
YS50b0xvd2VyQ2FzZSgpOwotICAgICAgICAgICAgaWYgKGNoYXJhY3RlciAmJiAvW2Etei1dLy50
ZXN0KGNoYXJhY3RlcikpIHsKLSAgICAgICAgICAgICAgICB2YXIgcHJlZml4ID0gc2VsZWN0aW9u
LmFuY2hvck5vZGUudGV4dENvbnRlbnQuc3Vic3RyaW5nKDAsIHNlbGVjdGlvbi5hbmNob3JPZmZz
ZXQpOwotICAgICAgICAgICAgICAgIHZhciBwcm9wZXJ0eSA9IFdlYkluc3BlY3Rvci5DU1NDb21w
bGV0aW9ucy5maXJzdFN0YXJ0c1dpdGgocHJlZml4ICsgY2hhcmFjdGVyKTsKLQotICAgICAgICAg
ICAgICAgIGlmICghc2VsZWN0aW9uLmlzQ29sbGFwc2VkKQotICAgICAgICAgICAgICAgICAgICBz
ZWxlY3Rpb24uZGVsZXRlRnJvbURvY3VtZW50KCk7Ci0KLSAgICAgICAgICAgICAgICB0aGlzLnJl
c3RvcmVOYW1lRWxlbWVudCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5KSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eSAhPT0gdGhpcy5uYW1lRWxlbWVudC50ZXh0
Q29udGVudCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmFtZUVsZW1lbnQudGV4dENv
bnRlbnQgPSBwcm9wZXJ0eTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5uYW1lRWxlbWVudC5m
aXJzdENoaWxkLnNlbGVjdChwcmVmaXgubGVuZ3RoICsgMSk7Ci0gICAgICAgICAgICAgICAgICAg
IGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAvLyBD
b21wbGV0ZSBwcm9wZXJ0eSBuYW1lcy4KKyAgICAgICAgdmFyIGNoYXJhY3RlciA9IGV2ZW50LmRh
dGEudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgaWYgKGNoYXJhY3RlciAmJiAvW2Etei1dLy50ZXN0
KGNoYXJhY3RlcikpIHsKKyAgICAgICAgICAgIHZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2Vs
ZWN0aW9uKCk7CisgICAgICAgICAgICB2YXIgcHJlZml4ID0gc2VsZWN0aW9uLmFuY2hvck5vZGUu
dGV4dENvbnRlbnQuc3Vic3RyaW5nKDAsIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQpOworICAgICAg
ICAgICAgdmFyIHByb3BlcnR5ID0gV2ViSW5zcGVjdG9yLkNTU0NvbXBsZXRpb25zLmZpcnN0U3Rh
cnRzV2l0aChwcmVmaXggKyBjaGFyYWN0ZXIpOworCisgICAgICAgICAgICBpZiAoIXNlbGVjdGlv
bi5pc0NvbGxhcHNlZCkKKyAgICAgICAgICAgICAgICBzZWxlY3Rpb24uZGVsZXRlRnJvbURvY3Vt
ZW50KCk7CisKKyAgICAgICAgICAgIHRoaXMucmVzdG9yZU5hbWVFbGVtZW50KCk7CisKKyAgICAg
ICAgICAgIGlmIChwcm9wZXJ0eSkgeworICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eSAhPT0g
dGhpcy5uYW1lRWxlbWVudC50ZXh0Q29udGVudCkKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5u
YW1lRWxlbWVudC50ZXh0Q29udGVudCA9IHByb3BlcnR5OworICAgICAgICAgICAgICAgIHRoaXMu
bmFtZUVsZW1lbnQuZmlyc3RDaGlsZC5zZWxlY3QocHJlZml4Lmxlbmd0aCArIDEpOworICAgICAg
ICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICB9Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgY29tcGxldGUgcHJv
cGVydHkgdmFsdWVzLgogICAgICAgICB9CiAgICAgfSwKIAotICAgIGVkaXRpbmdLZXlEb3duOiBm
dW5jdGlvbihldmVudCkKKyAgICBlZGl0aW5nVmFsdWVLZXlQcmVzczogZnVuY3Rpb24oZXZlbnQp
CisgICAgeworICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgY29tcGxldGUgcHJvcGVydHkg
dmFsdWVzLgorICAgIH0sCisKKyAgICBlZGl0aW5nTmFtZUtleURvd246IGZ1bmN0aW9uKGV2ZW50
KQorICAgIHsKKyAgICAgICAgdmFyIHNob3dOZXh0OworICAgICAgICBpZiAoZXZlbnQua2V5SWRl
bnRpZmllciA9PT0gIlVwIikKKyAgICAgICAgICAgIHNob3dOZXh0ID0gZmFsc2U7CisgICAgICAg
IGVsc2UgaWYgKGV2ZW50LmtleUlkZW50aWZpZXIgPT09ICJEb3duIikKKyAgICAgICAgICAgIHNo
b3dOZXh0ID0gdHJ1ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIHZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CisgICAgICAgIGlmICgh
c2VsZWN0aW9uLnJhbmdlQ291bnQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdmFy
IHNlbGVjdGlvblJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7CisgICAgICAgIGlmIChz
ZWxlY3Rpb25SYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lciAhPT0gdGhpcy5uYW1lRWxlbWVu
dCAmJiAhc2VsZWN0aW9uUmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIuaXNEZXNjZW5kYW50
KHRoaXMubmFtZUVsZW1lbnQpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNvbnN0
IHN0eWxlVmFsdWVEZWxpbWV0ZXJzID0gIiBcdFxuXCInOjssLygpIjsKKyAgICAgICAgdmFyIHdv
cmRSYW5nZSA9IHNlbGVjdGlvblJhbmdlLnN0YXJ0Q29udGFpbmVyLnJhbmdlT2ZXb3JkKHNlbGVj
dGlvblJhbmdlLnN0YXJ0T2Zmc2V0LCBzdHlsZVZhbHVlRGVsaW1ldGVycywgdGhpcy5uYW1lRWxl
bWVudCk7CisgICAgICAgIHZhciB3b3JkU3RyaW5nID0gd29yZFJhbmdlLnRvU3RyaW5nKCk7Cisg
ICAgICAgIHZhciBwcmVmaXggPSBzZWxlY3Rpb25SYW5nZS5zdGFydENvbnRhaW5lci50ZXh0Q29u
dGVudC5zdWJzdHJpbmcoMCwgc2VsZWN0aW9uUmFuZ2Uuc3RhcnRPZmZzZXQpOworICAgICAgICB2
YXIgcHJvcGVydHk7CisKKyAgICAgICAgaWYgKHNob3dOZXh0KQorICAgICAgICAgICAgcHJvcGVy
dHkgPSBXZWJJbnNwZWN0b3IuQ1NTQ29tcGxldGlvbnMubmV4dCh3b3JkU3RyaW5nLCBwcmVmaXgp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm9wZXJ0eSA9IFdlYkluc3BlY3Rvci5DU1ND
b21wbGV0aW9ucy5wcmV2aW91cyh3b3JkU3RyaW5nLCBwcmVmaXgpOworCisgICAgICAgIGlmIChw
cm9wZXJ0eSkgeworICAgICAgICAgICAgdGhpcy5uYW1lRWxlbWVudC50ZXh0Q29udGVudCA9IHBy
b3BlcnR5OworICAgICAgICAgICAgdGhpcy5uYW1lRWxlbWVudC5maXJzdENoaWxkLnNlbGVjdChz
ZWxlY3Rpb25SYW5nZS5zdGFydE9mZnNldCk7CisgICAgICAgIH0KKyAgICAgICAgZXZlbnQucHJl
dmVudERlZmF1bHQoKTsKKyAgICB9LAorCisgICAgZWRpdGluZ1ZhbHVlS2V5RG93bjogZnVuY3Rp
b24oZXZlbnQpCiAgICAgewogICAgICAgICB2YXIgYXJyb3dLZXlQcmVzc2VkID0gKGV2ZW50Lmtl
eUlkZW50aWZpZXIgPT09ICJVcCIgfHwgZXZlbnQua2V5SWRlbnRpZmllciA9PT0gIkRvd24iKTsK
ICAgICAgICAgdmFyIHBhZ2VLZXlQcmVzc2VkID0gKGV2ZW50LmtleUlkZW50aWZpZXIgPT09ICJQ
YWdlVXAiIHx8IGV2ZW50LmtleUlkZW50aWZpZXIgPT09ICJQYWdlRG93biIpOwpAQCAtMTUyNSwz
MyArMTYwOSwxMSBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3Rv
dHlwZSA9IHsKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICB2YXIgc2VsZWN0aW9uUmFu
Z2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTsKLSAgICAgICAgaWYgKHNlbGVjdGlvblJhbmdl
LmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyICE9PSB0aGlzLmxpc3RJdGVtRWxlbWVudCAmJiAhc2Vs
ZWN0aW9uUmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIuaXNEZXNjZW5kYW50KHRoaXMubGlz
dEl0ZW1FbGVtZW50KSkKKyAgICAgICAgaWYgKHNlbGVjdGlvblJhbmdlLmNvbW1vbkFuY2VzdG9y
Q29udGFpbmVyICE9PSB0aGlzLnZhbHVlRWxlbWVudCAmJiAhc2VsZWN0aW9uUmFuZ2UuY29tbW9u
QW5jZXN0b3JDb250YWluZXIuaXNEZXNjZW5kYW50KHRoaXMudmFsdWVFbGVtZW50KSkKICAgICAg
ICAgICAgIHJldHVybjsKIAotICAgICAgICAvLyBJZiB0aGVyZSBhcmUgc2V2ZXJhbCBwcm9wZXJ0
aWVzIGluIHRoZSB0ZXh0LCBkbyBub3QgaGFuZGxlIGluY3JlbWVudHMvZGVjcmVtZW50cy4KLSAg
ICAgICAgdmFyIHRleHQgPSBldmVudC50YXJnZXQudGV4dENvbnRlbnQudHJpbSgpOwotICAgICAg
ICB2YXIgb3BlblF1b3RlOwotICAgICAgICB2YXIgd2FzRXNjYXBlID0gZmFsc2U7Ci0gICAgICAg
IC8vIEV4Y2x1ZGUgdGhlIGxhc3QgY2hhcmFjdGVyIGZyb20gdGhlIGNoZWNrIHNpbmNlIGl0IGlz
IGFsbG93ZWQgdG8gYmUgIjsiLgotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRleHQubGVu
Z3RoIC0gMTsgKytpKSB7Ci0gICAgICAgICAgICB2YXIgY2ggPSB0ZXh0LmNoYXJBdChpKTsKLSAg
ICAgICAgICAgIGlmIChjaCA9PT0gIlxcIikgewotICAgICAgICAgICAgICAgIHdhc0VzY2FwZSA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBpZiAoY2ggPT09ICI7IiAmJiAhb3BlblF1b3RlKQotICAgICAgICAgICAgICAgIHJldHVy
bjsgLy8gRG8gbm90IGhhbmRsZSBuYW1lL3ZhbHVlIHNoaWZ0cyBpZiB0aGUgcHJvcGVydHkgaXMg
Y29tcG91bmQuCi0gICAgICAgICAgICBpZiAoKGNoID09PSAiJyIgfHwgY2ggPT09ICJcIiIpICYm
ICF3YXNFc2NhcGUpIHsKLSAgICAgICAgICAgICAgICBpZiAoIW9wZW5RdW90ZSkKLSAgICAgICAg
ICAgICAgICAgICAgb3BlblF1b3RlID0gY2g7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoY2gg
PT09IG9wZW5RdW90ZSkKLSAgICAgICAgICAgICAgICAgICAgb3BlblF1b3RlID0gbnVsbDsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHdhc0VzY2FwZSA9IGZhbHNlOwotICAgICAgICB9Ci0K
ICAgICAgICAgY29uc3Qgc3R5bGVWYWx1ZURlbGltZXRlcnMgPSAiIFx0XG5cIic6OywvKCkiOwot
ICAgICAgICB2YXIgd29yZFJhbmdlID0gc2VsZWN0aW9uUmFuZ2Uuc3RhcnRDb250YWluZXIucmFu
Z2VPZldvcmQoc2VsZWN0aW9uUmFuZ2Uuc3RhcnRPZmZzZXQsIHN0eWxlVmFsdWVEZWxpbWV0ZXJz
LCB0aGlzLmxpc3RJdGVtRWxlbWVudCk7CisgICAgICAgIHZhciB3b3JkUmFuZ2UgPSBzZWxlY3Rp
b25SYW5nZS5zdGFydENvbnRhaW5lci5yYW5nZU9mV29yZChzZWxlY3Rpb25SYW5nZS5zdGFydE9m
ZnNldCwgc3R5bGVWYWx1ZURlbGltZXRlcnMsIHRoaXMudmFsdWVFbGVtZW50KTsKICAgICAgICAg
dmFyIHdvcmRTdHJpbmcgPSB3b3JkUmFuZ2UudG9TdHJpbmcoKTsKICAgICAgICAgdmFyIHJlcGxh
Y2VtZW50U3RyaW5nID0gd29yZFN0cmluZzsKIApAQCAtMTU5MywyMiArMTY1NSw2IEBAIFdlYklu
c3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlID0gewogICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICByZXBsYWNlbWVudFN0cmluZyA9IHByZWZpeCArIG51bWJlciAr
IHN1ZmZpeDsKLSAgICAgICAgfSBlbHNlIGlmIChzZWxlY3Rpb24uY29udGFpbnNOb2RlKHRoaXMu
bmFtZUVsZW1lbnQsIHRydWUpKSB7Ci0gICAgICAgICAgICB2YXIgcHJlZml4ID0gc2VsZWN0aW9u
UmFuZ2Uuc3RhcnRDb250YWluZXIudGV4dENvbnRlbnQuc3Vic3RyaW5nKDAsIHNlbGVjdGlvblJh
bmdlLnN0YXJ0T2Zmc2V0KTsKLSAgICAgICAgICAgIHZhciBwcm9wZXJ0eTsKLQotICAgICAgICAg
ICAgaWYgKGV2ZW50LmtleUlkZW50aWZpZXIgPT09ICJVcCIpCi0gICAgICAgICAgICAgICAgcHJv
cGVydHkgPSBXZWJJbnNwZWN0b3IuQ1NTQ29tcGxldGlvbnMucHJldmlvdXMod29yZFN0cmluZywg
cHJlZml4KTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGV2ZW50LmtleUlkZW50aWZpZXIgPT09ICJE
b3duIikKLSAgICAgICAgICAgICAgICBwcm9wZXJ0eSA9IFdlYkluc3BlY3Rvci5DU1NDb21wbGV0
aW9ucy5uZXh0KHdvcmRTdHJpbmcsIHByZWZpeCk7Ci0KLSAgICAgICAgICAgIHZhciBzdGFydE9m
ZnNldCA9IHNlbGVjdGlvblJhbmdlLnN0YXJ0T2Zmc2V0OwotICAgICAgICAgICAgaWYgKHByb3Bl
cnR5KSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5uYW1lRWxlbWVudC50ZXh0Q29udGVudCA9IHBy
b3BlcnR5OwotICAgICAgICAgICAgICAgIHRoaXMubmFtZUVsZW1lbnQuZmlyc3RDaGlsZC5zZWxl
Y3Qoc3RhcnRPZmZzZXQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZXZlbnQucHJldmVu
dERlZmF1bHQoKTsKLSAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBjeWNsZSB0aHJvdWdoIGtub3duIGtleXdvcmRz
IGZvciB0aGUgY3VycmVudCBwcm9wZXJ0eSB2YWx1ZS4KICAgICAgICAgfQpAQCAtMTYzMiw3ICsx
Njc4LDkgQEAgV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUg
PSB7CiAgICAgICAgICAgICAvLyBpZiB0aGUgZWRpdGluZyBpcyBjYW5jZWxlZCBhbmQgYmVmb3Jl
IGVhY2ggYXBwbHkuCiAgICAgICAgICAgICB0aGlzLm9yaWdpbmFsUHJvcGVydHlUZXh0ID0gdGhp
cy5wcm9wZXJ0eS5wcm9wZXJ0eVRleHQ7CiAgICAgICAgIH0KLSAgICAgICAgdGhpcy5hcHBseVN0
eWxlVGV4dCh0aGlzLmxpc3RJdGVtRWxlbWVudC50ZXh0Q29udGVudCk7CisKKyAgICAgICAgLy8g
U3ludGhlc2l6ZSBwcm9wZXJ0eSB0ZXh0IGRpc3JlZ2FyZGluZyBhbnkgY29tbWVudHMsIGN1c3Rv
bSB3aGl0ZXNwYWNlIGV0Yy4KKyAgICAgICAgdGhpcy5hcHBseVN0eWxlVGV4dCh0aGlzLm5hbWVF
bGVtZW50LnRleHRDb250ZW50ICsgIjogIiArIHRoaXMudmFsdWVFbGVtZW50LnRleHRDb250ZW50
KTsKICAgICB9LAogCiAgICAgZWRpdGluZ0VuZGVkOiBmdW5jdGlvbihjb250ZXh0KQpAQCAtMTY0
MCw4ICsxNjg4LDEyIEBAIFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQucHJv
dG90eXBlID0gewogICAgICAgICB0aGlzLmhhc0NoaWxkcmVuID0gY29udGV4dC5oYXNDaGlsZHJl
bjsKICAgICAgICAgaWYgKGNvbnRleHQuZXhwYW5kZWQpCiAgICAgICAgICAgICB0aGlzLmV4cGFu
ZCgpOwotICAgICAgICB0aGlzLmxpc3RJdGVtRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJr
ZXlkb3duIiwgY29udGV4dC5rZXlEb3duTGlzdGVuZXIsIGZhbHNlKTsKLSAgICAgICAgdGhpcy5s
aXN0SXRlbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5cHJlc3MiLCBjb250ZXh0Lmtl
eVByZXNzTGlzdGVuZXIsIGZhbHNlKTsKKyAgICAgICAgdmFyIGVkaXRlZEVsZW1lbnQgPSBjb250
ZXh0LmlzRWRpdGluZ05hbWUgPyB0aGlzLm5hbWVFbGVtZW50IDogdGhpcy52YWx1ZUVsZW1lbnQ7
CisgICAgICAgIGVkaXRlZEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIGNv
bnRleHQua2V5RG93bkxpc3RlbmVyLCBmYWxzZSk7CisgICAgICAgIGVkaXRlZEVsZW1lbnQucmVt
b3ZlRXZlbnRMaXN0ZW5lcigia2V5cHJlc3MiLCBjb250ZXh0LmtleVByZXNzTGlzdGVuZXIsIGZh
bHNlKTsKKyAgICAgICAgaWYgKGVkaXRlZEVsZW1lbnQucGFyZW50RWxlbWVudCkKKyAgICAgICAg
ICAgIGVkaXRlZEVsZW1lbnQucGFyZW50RWxlbWVudC5yZW1vdmVTdHlsZUNsYXNzKCJjaGlsZC1l
ZGl0aW5nIik7CisKICAgICAgICAgZGVsZXRlIHRoaXMub3JpZ2luYWxQcm9wZXJ0eVRleHQ7CiAg
ICAgfSwKIApAQCAtMTY2MSwyOSArMTcxMyw0MCBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0
eVRyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAgICBlZGl0aW5nQ29tbWl0dGVkOiBmdW5jdGlv
bihlbGVtZW50LCB1c2VySW5wdXQsIHByZXZpb3VzQ29udGVudCwgY29udGV4dCwgbW92ZURpcmVj
dGlvbikKICAgICB7CiAgICAgICAgIHRoaXMuZWRpdGluZ0VuZGVkKGNvbnRleHQpOworICAgICAg
ICB2YXIgaXNFZGl0aW5nTmFtZSA9IGNvbnRleHQuaXNFZGl0aW5nTmFtZTsKIAogICAgICAgICAv
LyBEZXRlcm1pbmUgd2hlcmUgdG8gbW92ZSB0byBiZWZvcmUgbWFraW5nIGNoYW5nZXMKICAgICAg
ICAgdmFyIG5ld1Byb3BlcnR5LCBtb3ZlVG9Qcm9wZXJ0eU5hbWUsIG1vdmVUb1NlbGVjdG9yOwog
ICAgICAgICB2YXIgbW92ZVRvID0gdGhpczsKLSAgICAgICAgZG8gewotICAgICAgICAgICAgbW92
ZVRvID0gKG1vdmVEaXJlY3Rpb24gPT09ICJmb3J3YXJkIiA/IG1vdmVUby5uZXh0U2libGluZyA6
IG1vdmVUby5wcmV2aW91c1NpYmxpbmcpOwotICAgICAgICB9IHdoaWxlKG1vdmVUbyAmJiAhbW92
ZVRvLnNlbGVjdGFibGUpOwotCi0gICAgICAgIGlmIChtb3ZlVG8pCi0gICAgICAgICAgICBtb3Zl
VG9Qcm9wZXJ0eU5hbWUgPSBtb3ZlVG8ubmFtZTsKLSAgICAgICAgZWxzZSBpZiAobW92ZURpcmVj
dGlvbiA9PT0gImZvcndhcmQiKQotICAgICAgICAgICAgbmV3UHJvcGVydHkgPSB0cnVlOwotICAg
ICAgICBlbHNlIGlmIChtb3ZlRGlyZWN0aW9uID09PSAiYmFja3dhcmQiICYmIHRoaXMudHJlZU91
dGxpbmUuc2VjdGlvbi5ydWxlKQotICAgICAgICAgICAgbW92ZVRvU2VsZWN0b3IgPSB0cnVlOwor
ICAgICAgICBpZiAobW92ZURpcmVjdGlvbiA9PT0gImZvcndhcmQiICYmICFpc0VkaXRpbmdOYW1l
IHx8IG1vdmVEaXJlY3Rpb24gPT09ICJiYWNrd2FyZCIgJiYgaXNFZGl0aW5nTmFtZSkgeworICAg
ICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIG1vdmVUbyA9IChtb3ZlRGlyZWN0aW9uID09
PSAiZm9yd2FyZCIgPyBtb3ZlVG8ubmV4dFNpYmxpbmcgOiBtb3ZlVG8ucHJldmlvdXNTaWJsaW5n
KTsKKyAgICAgICAgICAgIH0gd2hpbGUobW92ZVRvICYmICFtb3ZlVG8uc2VsZWN0YWJsZSk7CisK
KyAgICAgICAgICAgaWYgKG1vdmVUbykKKyAgICAgICAgICAgICAgICBtb3ZlVG9Qcm9wZXJ0eU5h
bWUgPSBtb3ZlVG8ubmFtZTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG1vdmVEaXJlY3Rpb24gPT09
ICJmb3J3YXJkIiAmJiAoIXRoaXMuX25ld1Byb3BlcnR5IHx8IHVzZXJJbnB1dCkpCisgICAgICAg
ICAgICAgICAgbmV3UHJvcGVydHkgPSB0cnVlOworICAgICAgICAgICAgZWxzZSBpZiAobW92ZURp
cmVjdGlvbiA9PT0gImJhY2t3YXJkIiAmJiB0aGlzLnRyZWVPdXRsaW5lLnNlY3Rpb24ucnVsZSkK
KyAgICAgICAgICAgICAgICBtb3ZlVG9TZWxlY3RvciA9IHRydWU7CisgICAgICAgIH0KIAogICAg
ICAgICAvLyBNYWtlIHRoZSBDaGFuZ2VzIGFuZCB0cmlnZ2VyIHRoZSBtb3ZlVG9OZXh0Q2FsbGJh
Y2sgYWZ0ZXIgdXBkYXRpbmcKICAgICAgICAgdmFyIGJsYW5rSW5wdXQgPSAvXlxzKiQvLnRlc3Qo
dXNlcklucHV0KTsKLSAgICAgICAgaWYgKHVzZXJJbnB1dCAhPT0gcHJldmlvdXNDb250ZW50IHx8
ICh0aGlzLl9uZXdQcm9wZXJ0eSAmJiBibGFua0lucHV0KSkgeyAvLyBvbmx5IGlmIHNvbWV0aGlu
ZyBjaGFuZ2VkLCBvciBhZGRpbmcgYSBuZXcgc3R5bGUgYW5kIGl0IHdhcyBibGFuaworICAgICAg
ICB2YXIgbW92ZVRvT3RoZXIgPSAoaXNFZGl0aW5nTmFtZSBeIChtb3ZlRGlyZWN0aW9uID09PSAi
Zm9yd2FyZCIpKTsKKyAgICAgICAgdmFyIHNob3VsZENvbW1pdE5ld1Byb3BlcnR5ID0gdGhpcy5f
bmV3UHJvcGVydHkgJiYgKCFtb3ZlRGlyZWN0aW9uICYmICFpc0VkaXRpbmdOYW1lIHx8IG1vdmVU
b090aGVyIHx8IChpc0VkaXRpbmdOYW1lICYmIGJsYW5rSW5wdXQpKTsKKyAgICAgICAgaWYgKHVz
ZXJJbnB1dCAhPT0gcHJldmlvdXNDb250ZW50ICYmICF0aGlzLl9uZXdQcm9wZXJ0eSB8fCBzaG91
bGRDb21taXROZXdQcm9wZXJ0eSkgeyAvLyBvbmx5IGlmIHNvbWV0aGluZyBjaGFuZ2VkLCBvciBh
ZGRpbmcgYSBuZXcgcHJvcGVydHkgYW5kIG5lZWQgdG8gY29tbWl0IGl0CiAgICAgICAgICAgICB0
aGlzLnRyZWVPdXRsaW5lLnNlY3Rpb24uX2FmdGVyVXBkYXRlID0gbW92ZVRvTmV4dENhbGxiYWNr
LmJpbmQodGhpcywgdGhpcy5fbmV3UHJvcGVydHksICFibGFua0lucHV0KTsKLSAgICAgICAgICAg
IHRoaXMuYXBwbHlTdHlsZVRleHQodXNlcklucHV0LCB0cnVlKTsKLSAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICB2YXIgcHJvcGVydHlUZXh0ID0gYmxhbmtJbnB1dCB8fCAodGhpcy5fbmV3UHJv
cGVydHkgJiYgL15ccyokLy50ZXN0KHRoaXMudmFsdWVFbGVtZW50LnRleHRDb250ZW50KSkgPyAi
IiA6IChpc0VkaXRpbmdOYW1lID8gKHVzZXJJbnB1dC5yZXBsYWNlKC86L2csICIiKSArICI6ICIg
KyB0aGlzLnZhbHVlRWxlbWVudC50ZXh0Q29udGVudCkgOiAodGhpcy5uYW1lRWxlbWVudC50ZXh0
Q29udGVudCArICI6ICIgKyB1c2VySW5wdXQpKTsKKyAgICAgICAgICAgIHRoaXMuYXBwbHlTdHls
ZVRleHQocHJvcGVydHlUZXh0LCB0cnVlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IGlmICghdGhpcy5fbmV3UHJvcGVydHkpCisgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUaXRs
ZSgpOwogICAgICAgICAgICAgbW92ZVRvTmV4dENhbGxiYWNrKHRoaXMuX25ld1Byb3BlcnR5LCBm
YWxzZSwgdGhpcy50cmVlT3V0bGluZS5zZWN0aW9uLCBmYWxzZSk7CisgICAgICAgIH0KKwogCisg
ICAgICAgIHZhciBtb3ZlVG9JbmRleCA9IG1vdmVUbyAmJiB0aGlzLnRyZWVPdXRsaW5lID8gdGhp
cy50cmVlT3V0bGluZS5jaGlsZHJlbi5pbmRleE9mKG1vdmVUbykgOiAtMTsKICAgICAgICAgLy8g
VGhlIENhbGxiYWNrIHRvIHN0YXJ0IGVkaXRpbmcgdGhlIG5leHQgcHJvcGVydHkKICAgICAgICAg
ZnVuY3Rpb24gbW92ZVRvTmV4dENhbGxiYWNrKGFscmVhZHlOZXcsIHZhbHVlQ2hhbmdlZCwgc2Vj
dGlvbikKICAgICAgICAgewpAQCAtMTY5MiwyNCArMTc1NSwzMSBAQCBXZWJJbnNwZWN0b3IuU3R5
bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKIAogICAgICAgICAgICAgLy8gVXNl
ciBqdXN0IHRhYmJlZCB0aHJvdWdoIHdpdGhvdXQgY2hhbmdlcwogICAgICAgICAgICAgaWYgKG1v
dmVUbyAmJiBtb3ZlVG8ucGFyZW50KSB7Ci0gICAgICAgICAgICAgICAgbW92ZVRvLnN0YXJ0RWRp
dGluZyhtb3ZlVG8udmFsdWVFbGVtZW50KTsKKyAgICAgICAgICAgICAgICBtb3ZlVG8uc3RhcnRF
ZGl0aW5nKCFpc0VkaXRpbmdOYW1lID8gbW92ZVRvLm5hbWVFbGVtZW50IDogbW92ZVRvLnZhbHVl
RWxlbWVudCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICAvLyBVc2VyIGhhcyBtYWRlIGEgY2hhbmdlIHRoZW4gdGFiYmVkLCB3aXBpbmcgYWxs
IHRoZSBvcmlnaW5hbCB0cmVlRWxlbWVudHMsCiAgICAgICAgICAgICAvLyByZWNhbGN1bGF0ZSB0
aGUgbmV3IHRyZWVFbGVtZW50IGZvciB0aGUgc2FtZSBwcm9wZXJ0eSB3ZSB3ZXJlIGdvaW5nIHRv
IGVkaXQgbmV4dAotICAgICAgICAgICAgLy8gRklYTUUoYXBhdmxvdik6IHRoaXMgd2lsbCBub3Qg
d29yayBmb3IgbXVsdGlwbGUgc2FtZS1uYW1lZCBwcm9wZXJ0aWVzIGluIGEgc3R5bGUKLSAgICAg
ICAgICAgIC8vICAgICAgICAgICAgICAgICAodGhlIGZpcnN0IG9uZSB3aWxsIGFsd2F5cyBiZSBy
ZXR1cm5lZCkuCiAgICAgICAgICAgICBpZiAobW92ZVRvICYmICFtb3ZlVG8ucGFyZW50KSB7Ci0g
ICAgICAgICAgICAgICAgdmFyIHRyZWVFbGVtZW50ID0gc2VjdGlvbi5maW5kVHJlZUVsZW1lbnRX
aXRoTmFtZShtb3ZlVG9Qcm9wZXJ0eU5hbWUpOwotICAgICAgICAgICAgICAgIGlmICh0cmVlRWxl
bWVudCkKLSAgICAgICAgICAgICAgICAgICAgdHJlZUVsZW1lbnQuc3RhcnRFZGl0aW5nKHRyZWVF
bGVtZW50LnZhbHVlRWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgICAgIHZhciBwcm9wZXJ0eUVsZW1lbnRzID0gc2VjdGlvbi5wcm9wZXJ0aWVzVHJlZU91dGxp
bmUuY2hpbGRyZW47CisgICAgICAgICAgICAgICAgaWYgKG1vdmVEaXJlY3Rpb24gPT09ICJmb3J3
YXJkIiAmJiBibGFua0lucHV0ICYmICFpc0VkaXRpbmdOYW1lKQorICAgICAgICAgICAgICAgICAg
ICAtLW1vdmVUb0luZGV4OworICAgICAgICAgICAgICAgIGlmIChtb3ZlVG9JbmRleCA+PSBwcm9w
ZXJ0eUVsZW1lbnRzLmxlbmd0aCAmJiAhdGhpcy5fbmV3UHJvcGVydHkpCisgICAgICAgICAgICAg
ICAgICAgIG5ld1Byb3BlcnR5ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIHRyZWVFbGVtZW50ID0gbW92ZVRvSW5kZXggPj0gMCA/IHByb3Bl
cnR5RWxlbWVudHNbbW92ZVRvSW5kZXhdIDogbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHRyZWVFbGVtZW50KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0cmVlRWxlbWVudC5zdGFy
dEVkaXRpbmcoIWlzRWRpdGluZ05hbWUgPyB0cmVlRWxlbWVudC5uYW1lRWxlbWVudCA6IHRyZWVF
bGVtZW50LnZhbHVlRWxlbWVudCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWFscmVhZHlOZXcpCisgICAgICAgICAgICAg
ICAgICAgICAgICBtb3ZlVG9TZWxlY3RvciA9IHRydWU7CisgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBDcmVhdGUgYSBuZXcgYXR0cmlidXRlIGluIHRo
aXMgc2VjdGlvbgogICAgICAgICAgICAgaWYgKG5ld1Byb3BlcnR5KSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKGFscmVhZHlOZXcgJiYgIXZhbHVlQ2hhbmdlZCkKKyAgICAgICAgICAgICAgICBpZiAo
YWxyZWFkeU5ldyAmJiAhdmFsdWVDaGFuZ2VkICYmIChpc0VkaXRpbmdOYW1lIF4gbW92ZURpcmVj
dGlvbiA9PT0gImJhY2t3YXJkIikpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAg
ICAgICAgICAgICAgIHNlY3Rpb24uYWRkTmV3QmxhbmtQcm9wZXJ0eSgpLnN0YXJ0RWRpdGluZygp
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1RleHRWaWV3ZXIuanMg
Yi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGV4dFZpZXdlci5qcwppbmRleCA5YWQ1ZTQ5
Li5iN2Y3Y2E2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGV4dFZp
ZXdlci5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGV4dFZpZXdlci5qcwpA
QCAtMjY4LDcgKzI2OCw3IEBAIFdlYkluc3BlY3Rvci5UZXh0Vmlld2VyLnByb3RvdHlwZSA9IHsK
ICAgICAgICAgdmFyIG9sZENvbnRlbnQgPSBsaW5lUm93Lmxhc3RDaGlsZC5pbm5lckhUTUw7CiAg
ICAgICAgIHZhciBjYW5jZWxFZGl0aW5nQ2FsbGJhY2sgPSB0aGlzLl9jYW5jZWxFZGl0aW5nTGlu
ZS5iaW5kKHRoaXMsIGxpbmVSb3cubGFzdENoaWxkLCBvbGRDb250ZW50KTsKICAgICAgICAgdmFy
IGNvbW1pdEVkaXRpbmdDYWxsYmFjayA9IHRoaXMuX2NvbW1pdEVkaXRpbmdMaW5lLmJpbmQodGhp
cywgbGluZVJvdy5saW5lTnVtYmVyLCBsaW5lUm93Lmxhc3RDaGlsZCwgY2FuY2VsRWRpdGluZ0Nh
bGxiYWNrKTsKLSAgICAgICAgdGhpcy5fZWRpdGluZ0xpbmUgPSBXZWJJbnNwZWN0b3Iuc3RhcnRF
ZGl0aW5nKGxpbmVSb3cubGFzdENoaWxkLCBjb21taXRFZGl0aW5nQ2FsbGJhY2ssIGNhbmNlbEVk
aXRpbmdDYWxsYmFjaywgbnVsbCwgdHJ1ZSk7CisgICAgICAgIHRoaXMuX2VkaXRpbmdMaW5lID0g
V2ViSW5zcGVjdG9yLnN0YXJ0RWRpdGluZyhsaW5lUm93Lmxhc3RDaGlsZCwgY29tbWl0RWRpdGlu
Z0NhbGxiYWNrLCBjYW5jZWxFZGl0aW5nQ2FsbGJhY2ssIG51bGwsIHsgbXVsdGlsaW5lOiB0cnVl
IH0pOwogICAgIH0sCiAKICAgICBfY29tbWl0RWRpdGluZ0xpbmU6IGZ1bmN0aW9uKGxpbmVOdW1i
ZXIsIGVsZW1lbnQsIGNhbmNlbEVkaXRpbmdDYWxsYmFjaykKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuY3NzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL2luc3BlY3Rvci5jc3MKaW5kZXggOTY1Njg5Yi4uYzkwODQyNyAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5jc3MKKysrIGIvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5jc3MKQEAgLTE0MjQsNiArMTQyNCwxMiBAQCBi
b2R5LmluYWN0aXZlIC5wbGFjYXJkLnNlbGVjdGVkIHsKICAgICB0ZXh0LWRlY29yYXRpb246IG5v
bmUgIWltcG9ydGFudDsKIH0KIAorLmNoaWxkLWVkaXRpbmcgeworICAgIGNvbG9yOiBibGFjayAh
aW1wb3J0YW50OworICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZSAhaW1wb3J0YW50OworICAgIG92
ZXJmbG93OiB2aXNpYmxlICFpbXBvcnRhbnQ7Cit9CisKIC5lZGl0aW5nIGJyIHsKICAgICBkaXNw
bGF5OiBub25lOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2lu
c3BlY3Rvci5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKaW5k
ZXggZjcxYjg5YS4uNjVlZTUxYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL2luc3BlY3Rvci5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVj
dG9yLmpzCkBAIC0xOTE2LDEwICsxOTE2LDE0IEBAIFdlYkluc3BlY3Rvci5pc0VkaXRpbmdBbnlG
aWVsZCA9IGZ1bmN0aW9uKCkKICAgICByZXR1cm4gdGhpcy5fX2VkaXRpbmc7CiB9CiAKLVdlYklu
c3BlY3Rvci5zdGFydEVkaXRpbmcgPSBmdW5jdGlvbihlbGVtZW50LCBjb21taXR0ZWRDYWxsYmFj
aywgY2FuY2VsbGVkQ2FsbGJhY2ssIGNvbnRleHQsIG11bHRpbGluZSkKKy8vIEF2YWlsYWJsZSBj
b25maWcgZmllbGRzOgorLy8gbXVsdGlsaW5lOiB0cnVlfGZhbHNlIC0gd2hldGhlciB0aGUgZWRp
dGVkIGVsZW1lbnQgaXMgbXVsdGlsaW5lCisvLyBjdXN0b21GaW5pc2hIYW5kbGVyOiBGdW5jdGlv
biAtIGN1c3RvbSBmaW5pc2ggaGFuZGxlciBmb3IgdGhlIGVkaXRpbmcgc2Vzc2lvbgorV2ViSW5z
cGVjdG9yLnN0YXJ0RWRpdGluZyA9IGZ1bmN0aW9uKGVsZW1lbnQsIGNvbW1pdHRlZENhbGxiYWNr
LCBjYW5jZWxsZWRDYWxsYmFjaywgY29udGV4dCwgY29uZmlnKQogewogICAgIGlmIChlbGVtZW50
Ll9fZWRpdGluZykKICAgICAgICAgcmV0dXJuOworICAgIGNvbmZpZyA9IGNvbmZpZyB8fCB7fTsK
ICAgICBlbGVtZW50Ll9fZWRpdGluZyA9IHRydWU7CiAgICAgV2ViSW5zcGVjdG9yLl9fZWRpdGlu
ZyA9IHRydWU7CiAKQEAgLTE5NzgsMjAgKzE5ODIsNDAgQEAgV2ViSW5zcGVjdG9yLnN0YXJ0RWRp
dGluZyA9IGZ1bmN0aW9uKGVsZW1lbnQsIGNvbW1pdHRlZENhbGxiYWNrLCBjYW5jZWxsZWRDYWxs
YmEKICAgICAgICAgICAgIGNvbW1pdHRlZENhbGxiYWNrKHRoaXMsIGdldENvbnRlbnQodGhpcyks
IG9sZFRleHQsIGNvbnRleHQsIG1vdmVEaXJlY3Rpb24pOwogICAgIH0KIAotICAgIGZ1bmN0aW9u
IGtleURvd25FdmVudExpc3RlbmVyKGV2ZW50KSB7CisgICAgZnVuY3Rpb24gZGVmYXVsdEZpbmlz
aEhhbmRsZXIoZXZlbnQpCisgICAgewogICAgICAgICB2YXIgaXNNZXRhT3JDdHJsID0gV2ViSW5z
cGVjdG9yLmlzTWFjKCkgPwogICAgICAgICAgICAgZXZlbnQubWV0YUtleSAmJiAhZXZlbnQuc2hp
ZnRLZXkgJiYgIWV2ZW50LmN0cmxLZXkgJiYgIWV2ZW50LmFsdEtleSA6CiAgICAgICAgICAgICBl
dmVudC5jdHJsS2V5ICYmICFldmVudC5zaGlmdEtleSAmJiAhZXZlbnQubWV0YUtleSAmJiAhZXZl
bnQuYWx0S2V5OwotICAgICAgICBpZiAoaXNFbnRlcktleShldmVudCkgJiYgKCFtdWx0aWxpbmUg
fHwgaXNNZXRhT3JDdHJsKSkgeworICAgICAgICBpZiAoaXNFbnRlcktleShldmVudCkgJiYgKCFj
b25maWcubXVsdGlsaW5lIHx8IGlzTWV0YU9yQ3RybCkpCisgICAgICAgICAgICByZXR1cm4gImNv
bW1pdCI7CisgICAgICAgIGVsc2UgaWYgKGV2ZW50LmtleUNvZGUgPT09IFdlYkluc3BlY3Rvci5L
ZXlib2FyZFNob3J0Y3V0LktleXMuRXNjLmNvZGUpCisgICAgICAgICAgICByZXR1cm4gImNhbmNl
bCI7CisgICAgICAgIGVsc2UgaWYgKGV2ZW50LmtleUlkZW50aWZpZXIgPT09ICJVKzAwMDkiKSAv
LyBUYWIga2V5CisgICAgICAgICAgICByZXR1cm4gIm1vdmUtIiArIChldmVudC5zaGlmdEtleSA/
ICJiYWNrd2FyZCIgOiAiZm9yd2FyZCIpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGtleURvd25F
dmVudExpc3RlbmVyKGV2ZW50KQorICAgIHsKKyAgICAgICAgdmFyIGhhbmRsZXIgPSBjb25maWcu
Y3VzdG9tRmluaXNoSGFuZGxlciB8fCBkZWZhdWx0RmluaXNoSGFuZGxlcjsKKyAgICAgICAgdmFy
IHJlc3VsdCA9IGhhbmRsZXIoZXZlbnQpOworICAgICAgICBpZiAocmVzdWx0ID09PSAiY29tbWl0
IikgewogICAgICAgICAgICAgZWRpdGluZ0NvbW1pdHRlZC5jYWxsKGVsZW1lbnQpOwogICAgICAg
ICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9w
YWdhdGlvbigpOwotICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleUNvZGUgPT09IFdlYkluc3Bl
Y3Rvci5LZXlib2FyZFNob3J0Y3V0LktleXMuRXNjLmNvZGUpIHsKKyAgICAgICAgfSBlbHNlIGlm
IChyZXN1bHQgPT09ICJjYW5jZWwiKSB7CiAgICAgICAgICAgICBlZGl0aW5nQ2FuY2VsbGVkLmNh
bGwoZWxlbWVudCk7CiAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAg
ICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQu
a2V5SWRlbnRpZmllciA9PT0gIlUrMDAwOSIpIC8vIFRhYiBrZXkKLSAgICAgICAgICAgIG1vdmVE
aXJlY3Rpb24gPSAoZXZlbnQuc2hpZnRLZXkgPyAiYmFja3dhcmQiIDogImZvcndhcmQiKTsKKyAg
ICAgICAgfSBlbHNlIGlmIChyZXN1bHQgJiYgcmVzdWx0LmluZGV4T2YoIm1vdmUtIikgPT09IDAp
IHsKKyAgICAgICAgICAgIG1vdmVEaXJlY3Rpb24gPSByZXN1bHQuc3Vic3RyaW5nKDUpOworICAg
ICAgICAgICAgaWYgKGV2ZW50LmtleUlkZW50aWZpZXIgIT09ICJVKzAwMDkiKSB7CisgICAgICAg
ICAgICAgICAgLy8gRW11bGF0ZSAiVGFiIiBrZXlkb3duIGV2ZW50LgorICAgICAgICAgICAgICAg
IHZhciBldnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgiS2V5Ym9hcmRFdmVudCIpOworICAgICAg
ICAgICAgICAgIGV2dC5pbml0S2V5Ym9hcmRFdmVudCgia2V5ZG93biIsIHRydWUsIHRydWUsIG51
bGwsICJVKzAwMDkiLCAiIik7CisgICAgICAgICAgICAgICAgZWxlbWVudC5kaXNwYXRjaEV2ZW50
KGV2dCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAKICAgICBlbGVtZW50LmFk
ZEV2ZW50TGlzdGVuZXIoImJsdXIiLCBibHVyRXZlbnRMaXN0ZW5lciwgZmFsc2UpOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3RyZWVvdXRsaW5lLmpzIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3RyZWVvdXRsaW5lLmpzCmluZGV4IGExZTA1MmYuLjI3YmM4
MzkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC90cmVlb3V0bGluZS5q
cworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdHJlZW91dGxpbmUuanMKQEAgLTgy
MSw2ICs4MjEsMTAgQEAgVHJlZUVsZW1lbnQucHJvdG90eXBlLnNlbGVjdCA9IGZ1bmN0aW9uKHN1
cHJlc3NPblNlbGVjdCwgc2VsZWN0ZWRCeVVzZXIpCiAKICAgICB0aGlzLnNlbGVjdGVkID0gdHJ1
ZTsKICAgICB0aGlzLnRyZWVPdXRsaW5lLl9jaGlsZHJlbkxpc3ROb2RlLmZvY3VzKCk7CisKKyAg
ICAvLyBGb2N1c2luZyBvbiBhbm90aGVyIG5vZGUgbWF5IGRldGFjaCAidGhpcyIgZnJvbSB0cmVl
LgorICAgIGlmICghdGhpcy50cmVlT3V0bGluZSkKKyAgICAgICAgcmV0dXJuOwogICAgIHRoaXMu
dHJlZU91dGxpbmUuc2VsZWN0ZWRUcmVlRWxlbWVudCA9IHRoaXM7CiAgICAgaWYgKHRoaXMuX2xp
c3RJdGVtTm9kZSkKICAgICAgICAgdGhpcy5fbGlzdEl0ZW1Ob2RlLmFkZFN0eWxlQ2xhc3MoInNl
bGVjdGVkIik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75889</attachid>
            <date>2010-12-08 04:41:31 -0800</date>
            <delta_ts>2010-12-08 08:43:52 -0800</delta_ts>
            <desc>[PATCH] Comments addressed. Also added tabbing between all rules shown for the given element</desc>
            <filename>firebugcss.patch</filename>
            <type>text/plain</type>
            <size>33249</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">Y29tbWl0IDFlZDJlOTZiMTViYzhhZTk3ODE2MmIxMTZhMzQzYWNhZDIzMGQ5M2IKQXV0aG9yOiBB
bGV4YW5kZXIgUGF2bG92IDxhcGF2bG92QGNocm9taXVtLm9yZz4KRGF0ZTogICBGcmkgRGVjIDMg
MjA6MDc6NDMgMjAxMCArMDMwMAoKICAgIEZpcmVidWctbGlrZSBDU1MgZWRpdGluZyBpbiB0aGUg
U3R5bGVzIHBhbmUKCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKaW5kZXggM2JiMWI4My4uOGIzMmUxZSAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEy
IEBACisyMDEwLTEyLTA4ICBBbGV4YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIElu
c3BlY3RvcjogRW5hYmxlIENTUyBwcm9wZXJ0eSBlZGl0aW5nIG5hbWUvdmFsdWUtd2lzZSAobGlr
ZSBGaXJlYnVnIGRvZXMpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD01MDU2NQorCisgICAgICAgICogaW5zcGVjdG9yL3N0eWxlcy1hZGQtYmxhbmstcHJv
cGVydHkuaHRtbDoKKwogMjAxMC0xMi0wOCAgRGFpIE1pa3VydWJlICA8ZG1pa3VydWJlQGdvb2ds
ZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VudCBUYW11cmEuCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLWFkZC1ibGFuay1wcm9wZXJ0eS5odG1sIGIvTGF5
b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy1hZGQtYmxhbmstcHJvcGVydHkuaHRtbAppbmRleCAw
MTNjMzExLi5mZDM2YTk1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVz
LWFkZC1ibGFuay1wcm9wZXJ0eS5odG1sCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHls
ZXMtYWRkLWJsYW5rLXByb3BlcnR5Lmh0bWwKQEAgLTM5LDggKzM5LDkgQEAgZnVuY3Rpb24gZnJv
bnRlbmRfZHVtcEluc3BlY3RlZFN0eWxlKHRlc3RDb250cm9sbGVyKQogCiAgICAgdmFyIGV2dCA9
IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCJLZXlib2FyZEV2ZW50Iik7CiAgICAgZXZ0LmluaXRLZXli
b2FyZEV2ZW50KCJrZXlkb3duIiwgdHJ1ZSAvKiBjYW4gYnViYmxlICovLCB0cnVlIC8qIGNhbiBj
YW5jZWwgKi8sIG51bGwgLyogdmlldyAqLywgIkVudGVyIiwgIiIpOwotICAgIHRyZWVFbGVtZW50
Lmxpc3RJdGVtRWxlbWVudC50ZXh0Q29udGVudCA9ICJ0ZXh0LWRlY29yYXRpb246IG5vbmUiOwot
ICAgIHRyZWVFbGVtZW50Lmxpc3RJdGVtRWxlbWVudC5kaXNwYXRjaEV2ZW50KGV2dCk7CisgICAg
dHJlZUVsZW1lbnQubmFtZUVsZW1lbnQudGV4dENvbnRlbnQgPSAidGV4dC1kZWNvcmF0aW9uIjsK
KyAgICB0cmVlRWxlbWVudC52YWx1ZUVsZW1lbnQudGV4dENvbnRlbnQgPSAibm9uZSI7CisgICAg
dHJlZUVsZW1lbnQubmFtZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChldnQpOwogCiAgICAgdGVzdENv
bnRyb2xsZXIucnVuQWZ0ZXJQZW5kaW5nRGlzcGF0Y2hlcyhmcm9udGVuZF9kdW1wUmVzdWx0cy5i
aW5kKHRoaXMsIHRlc3RDb250cm9sbGVyKSk7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5n
ZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDhjZWM5YWEuLmRmZTU5N2QgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MzUgQEAKKzIwMTAtMTItMDggIEFsZXhhbmRlciBQYXZsb3YgIDxhcGF2bG92QGNocm9taXVtLm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWIg
SW5zcGVjdG9yOiBFbmFibGUgQ1NTIHByb3BlcnR5IGVkaXRpbmcgbmFtZS92YWx1ZS13aXNlIChs
aWtlIEZpcmVidWcgZG9lcykKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTUwNTY1CisKKyAgICAgICAgRm9yIENTUyBwcm9wZXJ0eSBlZGl0aW5nLCB0aGUg
cHJvcGVydHkgbmFtZSBhbmQgdmFsdWUgaGF2ZSBiZWNvbWUgdHdvIGZpZWxkcyBzZXBhcmF0ZWQK
KyAgICAgICAgYnkgYSBjb2xvbiAocmF0aGVyIHRoYW4gb25lIGZpZWxkIGNvbnRhaW5pbmcgdGhl
IGZ1bGwgcHJvcGVydHkgdGV4dC4pIEEgdXNlciBjYW4gdGFiCisgICAgICAgIGJldHdlZW4gdGhl
IG5hbWUgYW5kIHZhbHVlIGZpZWxkcyBmb3J3YXJkIGFuZCBiYWNrd2FyZC4gQSBjb2xvbiB0eXBl
ZCBpbiB0aGUgbmFtZSBmaWVsZAorICAgICAgICBhbmQgYSBzZW1pY29sb24gaW4gdGhlIHZhbHVl
IGZpZWxkICh1bmxlc3MgZm91bmQgaW5zaWRlIGEgc3RyaW5nKSBhY3QgYXMgYSBUYWIgYW5kIGZv
Y3VzCisgICAgICAgIHRoZSBuZXh0IGVkaXRhYmxlIGZpZWxkICh3aGlsZSBhcHBseWluZyB0aGUg
ZW50aXJlIHByb3BlcnR5IHZhbHVlLikKKworICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQv
RWxlbWVudHNUcmVlT3V0bGluZS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1Ry
ZWVFbGVtZW50LnByb3RvdHlwZS5fc3RhcnRFZGl0aW5nQXNIVE1MKToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvZnJvbnQtZW5kL1N0eWxlc1NpZGViYXJQYW5lLmpzOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlN0eWxlUHJvcGVydGllc1NlY3Rpb24ucHJvdG90eXBlLm5leHRFZGl0YWJsZVNpYmxpbmcp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydGllc1NlY3Rpb24ucHJvdG90eXBl
LnByZXZpb3VzRWRpdGFibGVTaWJsaW5nKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZVBy
b3BlcnRpZXNTZWN0aW9uLnByb3RvdHlwZS5hZGROZXdCbGFua1Byb3BlcnR5KToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnRpZXNTZWN0aW9uLnByb3RvdHlwZS5lZGl0aW5nU2Vs
ZWN0b3JDb21taXR0ZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVl
RWxlbWVudC5wcm90b3R5cGUuKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5
VHJlZUVsZW1lbnQucHJvdG90eXBlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1Rl
eHRWaWV3ZXIuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dFZpZXdlci5wcm90b3R5cGUu
X2hhbmRsZURvdWJsZUNsaWNrKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2luc3Bl
Y3Rvci5jc3M6CisgICAgICAgICguY2hpbGQtZWRpdGluZyk6CisgICAgICAgICogaW5zcGVjdG9y
L2Zyb250LWVuZC9pbnNwZWN0b3IuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3Iuc3RhcnRFZGl0
aW5nLmRlZmF1bHRGaW5pc2hIYW5kbGVyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5zdGFydEVk
aXRpbmcpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvdHJlZW91dGxpbmUuanM6Cisg
ICAgICAgIChUcmVlRWxlbWVudC5wcm90b3R5cGUuc2VsZWN0KToKKwogMjAxMC0xMi0wOCAgWXV0
YSBLaXRhbXVyYSAgPHl1dGFrQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCBy
b2xsaW5nIG91dCByNzM0OTIuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvRWxlbWVudHNUcmVlT3V0bGluZS5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9F
bGVtZW50c1RyZWVPdXRsaW5lLmpzCmluZGV4IDAyYTc5MTEuLmNjYTMwNDYgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1RyZWVPdXRsaW5lLmpzCisrKyBi
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FbGVtZW50c1RyZWVPdXRsaW5lLmpzCkBAIC05
ODAsNyArOTgwLDcgQEAgV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBl
ID0gewogICAgICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24oKTsKICAgICAgICAgfQogCi0g
ICAgICAgIHRoaXMuX2VkaXRpbmcgPSBXZWJJbnNwZWN0b3Iuc3RhcnRFZGl0aW5nKHRoaXMuX2h0
bWxFZGl0RWxlbWVudCwgY29tbWl0LmJpbmQodGhpcyksIGRpc3Bvc2UuYmluZCh0aGlzKSwgbnVs
bCwgdHJ1ZSk7CisgICAgICAgIHRoaXMuX2VkaXRpbmcgPSBXZWJJbnNwZWN0b3Iuc3RhcnRFZGl0
aW5nKHRoaXMuX2h0bWxFZGl0RWxlbWVudCwgY29tbWl0LmJpbmQodGhpcyksIGRpc3Bvc2UuYmlu
ZCh0aGlzKSwgbnVsbCwgeyBtdWx0aWxpbmU6IHRydWUgfSk7CiAgICAgfSwKIAogICAgIF9hdHRy
aWJ1dGVFZGl0aW5nQ29tbWl0dGVkOiBmdW5jdGlvbihlbGVtZW50LCBuZXdUZXh0LCBvbGRUZXh0
LCBhdHRyaWJ1dGVOYW1lLCBtb3ZlRGlyZWN0aW9uKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL1N0eWxlc1NpZGViYXJQYW5lLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1N0eWxlc1NpZGViYXJQYW5lLmpzCmluZGV4IGRiNzI0ODYuLmVkY2EyMjMgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TdHlsZXNTaWRlYmFyUGFuZS5q
cworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU3R5bGVzU2lkZWJhclBhbmUuanMK
QEAgLTcwNCw2ICs3MDQsNDQgQEAgV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydGllc1NlY3Rpb24u
cHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9LAogCisgICAgbmV4dEVk
aXRhYmxlU2libGluZzogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIHNlY3Rpb25BcnJh
eXNCeVBzZXVkb0lkID0gV2ViSW5zcGVjdG9yLnBhbmVscy5lbGVtZW50cy5zaWRlYmFyUGFuZXMu
c3R5bGVzLnNlY3Rpb25zOworICAgICAgICB2YXIgcmV0dXJuTmV4dDsKKyAgICAgICAgZm9yICh2
YXIgcHNldWRvSWQgaW4gc2VjdGlvbkFycmF5c0J5UHNldWRvSWQpIHsKKyAgICAgICAgICAgIHZh
ciBzZWN0aW9ucyA9IHNlY3Rpb25BcnJheXNCeVBzZXVkb0lkW3BzZXVkb0lkXTsKKyAgICAgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VjdGlvbnMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAg
ICAgICAgICB2YXIgc2VjdGlvbiA9IHNlY3Rpb25zW2ldOworICAgICAgICAgICAgICAgIGNvbnNv
bGUubG9nKHNlY3Rpb24udGl0bGVFbGVtZW50LnRleHRDb250ZW50KTsKKyAgICAgICAgICAgICAg
ICBpZiAocmV0dXJuTmV4dCAmJiBzZWN0aW9uLmVkaXRhYmxlKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gc2VjdGlvbjsKKworICAgICAgICAgICAgICAgIGlmIChzZWN0aW9uID09PSB0aGlz
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm5OZXh0ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9LAorCisgICAgcHJldmlvdXNF
ZGl0YWJsZVNpYmxpbmc6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBzZWN0aW9uQXJy
YXlzQnlQc2V1ZG9JZCA9IFdlYkluc3BlY3Rvci5wYW5lbHMuZWxlbWVudHMuc2lkZWJhclBhbmVz
LnN0eWxlcy5zZWN0aW9uczsKKyAgICAgICAgdmFyIHByZXZpb3VzU2VjdGlvbiA9IG51bGw7Cisg
ICAgICAgIGZvciAodmFyIHBzZXVkb0lkIGluIHNlY3Rpb25BcnJheXNCeVBzZXVkb0lkKSB7Cisg
ICAgICAgICAgICB2YXIgc2VjdGlvbnMgPSBzZWN0aW9uQXJyYXlzQnlQc2V1ZG9JZFtwc2V1ZG9J
ZF07CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlY3Rpb25zLmxlbmd0aDsgKytp
KSB7CisgICAgICAgICAgICAgICAgdmFyIHNlY3Rpb24gPSBzZWN0aW9uc1tpXTsKKyAgICAgICAg
ICAgICAgICBjb25zb2xlLmxvZyhzZWN0aW9uLnRpdGxlRWxlbWVudC50ZXh0Q29udGVudCk7Cisg
ICAgICAgICAgICAgICAgaWYgKHNlY3Rpb24gPT09IHRoaXMpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBwcmV2aW91c1NlY3Rpb247CisKKyAgICAgICAgICAgICAgICBpZiAoc2VjdGlvbi5l
ZGl0YWJsZSkKKyAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNTZWN0aW9uID0gc2VjdGlvbjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9LAor
CiAgICAgdXBkYXRlOiBmdW5jdGlvbihmdWxsKQogICAgIHsKICAgICAgICAgaWYgKGZ1bGwpIHsK
QEAgLTc5NSw2ICs4MzMsNyBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0aWVzU2VjdGlvbi5w
cm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMucHJvcGVydGllc1RyZWVPdXRsaW5lLmFwcGVuZENo
aWxkKGl0ZW0pOwogICAgICAgICBpdGVtLmxpc3RJdGVtRWxlbWVudC50ZXh0Q29udGVudCA9ICIi
OwogICAgICAgICBpdGVtLl9uZXdQcm9wZXJ0eSA9IHRydWU7CisgICAgICAgIGl0ZW0udXBkYXRl
VGl0bGUoKTsKICAgICAgICAgcmV0dXJuIGl0ZW07CiAgICAgfSwKIApAQCAtODgyLDE1ICs5MjEs
MjQgQEAgV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydGllc1NlY3Rpb24ucHJvdG90eXBlID0gewog
ICAgIGVkaXRpbmdTZWxlY3RvckNvbW1pdHRlZDogZnVuY3Rpb24oZWxlbWVudCwgbmV3Q29udGVu
dCwgb2xkQ29udGVudCwgY29udGV4dCwgbW92ZURpcmVjdGlvbikKICAgICB7CiAgICAgICAgIGZ1
bmN0aW9uIG1vdmVUb05leHRJZk5lZWRlZCgpIHsKLSAgICAgICAgICAgIGlmICghbW92ZURpcmVj
dGlvbiB8fCBtb3ZlRGlyZWN0aW9uICE9PSAiZm9yd2FyZCIpCisgICAgICAgICAgICBpZiAoIW1v
dmVEaXJlY3Rpb24pCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICB0aGlz
LmV4cGFuZCgpOwotICAgICAgICAgICAgaWYgKHRoaXMucHJvcGVydGllc1RyZWVPdXRsaW5lLmNo
aWxkcmVuLmxlbmd0aCA9PT0gMCkKLSAgICAgICAgICAgICAgICB0aGlzLmFkZE5ld0JsYW5rUHJv
cGVydHkoKS5zdGFydEVkaXRpbmcoKTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAg
ICAgIHZhciBpdGVtID0gdGhpcy5wcm9wZXJ0aWVzVHJlZU91dGxpbmUuY2hpbGRyZW5bMF0KLSAg
ICAgICAgICAgICAgICBpdGVtLnN0YXJ0RWRpdGluZyhpdGVtLnZhbHVlRWxlbWVudCk7CisgICAg
ICAgICAgICBpZiAobW92ZURpcmVjdGlvbiA9PT0gImZvcndhcmQiKSB7CisgICAgICAgICAgICAg
ICAgdGhpcy5leHBhbmQoKTsKKyAgICAgICAgICAgICAgICBpZiAodGhpcy5wcm9wZXJ0aWVzVHJl
ZU91dGxpbmUuY2hpbGRyZW4ubGVuZ3RoID09PSAwKQorICAgICAgICAgICAgICAgICAgICB0aGlz
LmFkZE5ld0JsYW5rUHJvcGVydHkoKS5zdGFydEVkaXRpbmcoKTsKKyAgICAgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB0aGlzLnByb3BlcnRpZXNUcmVl
T3V0bGluZS5jaGlsZHJlblswXQorICAgICAgICAgICAgICAgICAgICBpdGVtLnN0YXJ0RWRpdGlu
ZyhpdGVtLm5hbWVFbGVtZW50KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIHZhciBwcmV2aW91c1NlY3Rpb24gPSB0aGlzLnByZXZpb3Vz
RWRpdGFibGVTaWJsaW5nKCk7CisgICAgICAgICAgICAgICAgaWYgKCFwcmV2aW91c1NlY3Rpb24p
CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgICAgIHByZXZpb3Vz
U2VjdGlvbi5leHBhbmQoKTsKKyAgICAgICAgICAgICAgICBwcmV2aW91c1NlY3Rpb24uYWRkTmV3
QmxhbmtQcm9wZXJ0eSgpLnN0YXJ0RWRpdGluZygpOwogICAgICAgICAgICAgfQogICAgICAgICB9
CiAKQEAgLTEzNDYsOCArMTM5NCwxMSBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVF
bGVtZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5saXN0SXRlbUVsZW1lbnQuYXBwZW5k
Q2hpbGQodmFsdWVFbGVtZW50KTsKICAgICAgICAgdGhpcy5saXN0SXRlbUVsZW1lbnQuYXBwZW5k
Q2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIjsiKSk7CiAKLSAgICAgICAgaWYgKCF0aGlz
LnBhcnNlZE9rKQorICAgICAgICBpZiAoIXRoaXMucGFyc2VkT2spIHsKKyAgICAgICAgICAgIC8v
IEF2b2lkIGhhdmluZyBsb25naGFuZHMgdW5kZXIgYW4gaW52YWxpZCBzaG9ydGhhbmQuCisgICAg
ICAgICAgICB0aGlzLmhhc0NoaWxkcmVuID0gZmFsc2U7CiAgICAgICAgICAgICB0aGlzLmxpc3RJ
dGVtRWxlbWVudC5hZGRTdHlsZUNsYXNzKCJub3QtcGFyc2VkLW9rIik7CisgICAgICAgIH0KICAg
ICAgICAgaWYgKHRoaXMucHJvcGVydHkuaW5hY3RpdmUpCiAgICAgICAgICAgICB0aGlzLmxpc3RJ
dGVtRWxlbWVudC5hZGRTdHlsZUNsYXNzKCJpbmFjdGl2ZSIpOwogCkBAIC0xNDYwLDYwICsxNTEx
LDE0MCBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZSA9
IHsKICAgICAgICAgaWYgKHRoaXMucGFyZW50LnNob3J0aGFuZCkKICAgICAgICAgICAgIHJldHVy
bjsKIAotICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLmlzQmVpbmdFZGl0ZWQodGhpcy5saXN0SXRl
bUVsZW1lbnQpIHx8ICh0aGlzLnRyZWVPdXRsaW5lLnNlY3Rpb24gJiYgIXRoaXMudHJlZU91dGxp
bmUuc2VjdGlvbi5lZGl0YWJsZSkpCisgICAgICAgIGlmICh0aGlzLnRyZWVPdXRsaW5lLnNlY3Rp
b24gJiYgIXRoaXMudHJlZU91dGxpbmUuc2VjdGlvbi5lZGl0YWJsZSkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBpZiAoIXNlbGVjdEVsZW1lbnQpCisgICAgICAgICAgICBzZWxlY3RF
bGVtZW50ID0gdGhpcy5uYW1lRWxlbWVudDsgLy8gTm8gYXJndW1lbnRzIHBhc3NlZCBpbiAtIGVk
aXQgdGhlIG5hbWUgZWxlbWVudCBieSBkZWZhdWx0LgorICAgICAgICBlbHNlCisgICAgICAgICAg
ICBzZWxlY3RFbGVtZW50ID0gc2VsZWN0RWxlbWVudC5lbmNsb3NpbmdOb2RlT3JTZWxmV2l0aENs
YXNzKCJ3ZWJraXQtY3NzLXByb3BlcnR5IikgfHwgc2VsZWN0RWxlbWVudC5lbmNsb3NpbmdOb2Rl
T3JTZWxmV2l0aENsYXNzKCJ2YWx1ZSIpOworCisgICAgICAgIHZhciBpc0VkaXRpbmdOYW1lID0g
c2VsZWN0RWxlbWVudCA9PT0gdGhpcy5uYW1lRWxlbWVudDsKKyAgICAgICAgaWYgKCFpc0VkaXRp
bmdOYW1lICYmIHNlbGVjdEVsZW1lbnQgIT09IHRoaXMudmFsdWVFbGVtZW50KSB7CisgICAgICAg
ICAgICAvLyBEb3VibGUtY2xpY2sgaW4gdGhlIExJIC0gc3RhcnQgZWRpdGluZyB2YWx1ZS4KKyAg
ICAgICAgICAgIGlzRWRpdGluZ05hbWUgPSBmYWxzZTsKKyAgICAgICAgICAgIHNlbGVjdEVsZW1l
bnQgPSB0aGlzLnZhbHVlRWxlbWVudDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChXZWJJbnNw
ZWN0b3IuaXNCZWluZ0VkaXRlZChzZWxlY3RFbGVtZW50KSkKICAgICAgICAgICAgIHJldHVybjsK
IAogICAgICAgICB2YXIgY29udGV4dCA9IHsKICAgICAgICAgICAgIGV4cGFuZGVkOiB0aGlzLmV4
cGFuZGVkLAogICAgICAgICAgICAgaGFzQ2hpbGRyZW46IHRoaXMuaGFzQ2hpbGRyZW4sCi0gICAg
ICAgICAgICBrZXlEb3duTGlzdGVuZXI6IHRoaXMuZWRpdGluZ0tleURvd24uYmluZCh0aGlzKSwK
LSAgICAgICAgICAgIGtleVByZXNzTGlzdGVuZXI6IHRoaXMuZWRpdGluZ0tleVByZXNzLmJpbmQo
dGhpcykKKyAgICAgICAgICAgIGtleURvd25MaXN0ZW5lcjogaXNFZGl0aW5nTmFtZSA/IHRoaXMu
ZWRpdGluZ05hbWVLZXlEb3duLmJpbmQodGhpcykgOiB0aGlzLmVkaXRpbmdWYWx1ZUtleURvd24u
YmluZCh0aGlzKSwKKyAgICAgICAgICAgIGtleVByZXNzTGlzdGVuZXI6IGlzRWRpdGluZ05hbWUg
PyB0aGlzLmVkaXRpbmdOYW1lS2V5UHJlc3MuYmluZCh0aGlzKSA6IHRoaXMuZWRpdGluZ1ZhbHVl
S2V5UHJlc3MuYmluZCh0aGlzKSwKKyAgICAgICAgICAgIGlzRWRpdGluZ05hbWU6IGlzRWRpdGlu
Z05hbWUsCiAgICAgICAgIH07CiAKICAgICAgICAgLy8gTGllIGFib3V0IG91ciBjaGlsZHJlbiB0
byBwcmV2ZW50IGV4cGFuZGluZyBvbiBkb3VibGUgY2xpY2sgYW5kIHRvIGNvbGxhcHNlIHNob3J0
aGFuZHMuCiAgICAgICAgIHRoaXMuaGFzQ2hpbGRyZW4gPSBmYWxzZTsKIAotICAgICAgICBpZiAo
IXNlbGVjdEVsZW1lbnQpCi0gICAgICAgICAgICBzZWxlY3RFbGVtZW50ID0gdGhpcy5saXN0SXRl
bUVsZW1lbnQ7CisgICAgICAgIHNlbGVjdEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93
biIsIGNvbnRleHQua2V5RG93bkxpc3RlbmVyLCBmYWxzZSk7CisgICAgICAgIHNlbGVjdEVsZW1l
bnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5cHJlc3MiLCBjb250ZXh0LmtleVByZXNzTGlzdGVuZXIs
IGZhbHNlKTsKKyAgICAgICAgaWYgKHNlbGVjdEVsZW1lbnQucGFyZW50RWxlbWVudCkKKyAgICAg
ICAgICAgIHNlbGVjdEVsZW1lbnQucGFyZW50RWxlbWVudC5hZGRTdHlsZUNsYXNzKCJjaGlsZC1l
ZGl0aW5nIik7CisgICAgICAgIHNlbGVjdEVsZW1lbnQudGV4dENvbnRlbnQgPSBzZWxlY3RFbGVt
ZW50LnRleHRDb250ZW50OyAvLyByZW1vdmUgY29sb3Igc3dhdGNoIGFuZCB0aGUgbGlrZQorCisg
ICAgICAgIGZ1bmN0aW9uIHNob3VsZENvbW1pdFZhbHVlU2VtaWNvbG9uKHRleHQsIGN1cnNvclBv
c2l0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBGSVhNRTogc2hvdWxkIHRoaXMgYWNj
b3VudCBmb3Igc2VtaWNvbG9ucyBpbnNpZGUgY29tbWVudHM/CisgICAgICAgICAgICB2YXIgb3Bl
blF1b3RlID0gIiI7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGN1cnNvclBvc2l0
aW9uOyArK2kpIHsKKyAgICAgICAgICAgICAgICB2YXIgY2ggPSB0ZXh0W2ldOworICAgICAgICAg
ICAgICAgIGlmIChjaCA9PT0gIlxcIiAmJiBvcGVuUXVvdGUgIT09ICIiKQorICAgICAgICAgICAg
ICAgICAgICArK2k7IC8vIHNraXAgbmV4dCBjaGFyYWN0ZXIgaW5zaWRlIHN0cmluZworICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKCFvcGVuUXVvdGUgJiYgKGNoID09PSAiXCIiIHx8IGNoID09PSAi
JyIpKQorICAgICAgICAgICAgICAgICAgICBvcGVuUXVvdGUgPSBjaDsKKyAgICAgICAgICAgICAg
ICBlbHNlIGlmIChvcGVuUXVvdGUgPT09IGNoKQorICAgICAgICAgICAgICAgICAgICBvcGVuUXVv
dGUgPSAiIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiAhb3BlblF1b3RlOwor
ICAgICAgICB9CiAKLSAgICAgICAgdGhpcy5saXN0SXRlbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5l
cigia2V5ZG93biIsIGNvbnRleHQua2V5RG93bkxpc3RlbmVyLCBmYWxzZSk7Ci0gICAgICAgIHRo
aXMubGlzdEl0ZW1FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleXByZXNzIiwgY29udGV4dC5r
ZXlQcmVzc0xpc3RlbmVyLCBmYWxzZSk7CisgICAgICAgIGZ1bmN0aW9uIG5hbWVWYWx1ZUZpbmlz
aEhhbmRsZXIoY29udGV4dCwgaXNFZGl0aW5nTmFtZSwgZXZlbnQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHZhciBpc0ZpZWxkSW5wdXRUZXJtaW5hdGVkID0gaXNFZGl0aW5nTmFtZSA/IChldmVu
dC5rZXlJZGVudGlmaWVyID09PSAiVSswMEJBIiAmJiBldmVudC5zaGlmdEtleSkgOiAoZXZlbnQu
a2V5SWRlbnRpZmllciA9PT0gIlUrMDBCQSIgJiYgIWV2ZW50LnNoaWZ0S2V5ICYmIHNob3VsZENv
bW1pdFZhbHVlU2VtaWNvbG9uKGV2ZW50LnRhcmdldC50ZXh0Q29udGVudCwgZXZlbnQudGFyZ2V0
LnNlbGVjdGlvbkxlZnRPZmZzZXQpKTsKKyAgICAgICAgICAgIGlmIChpc0VudGVyS2V5KGV2ZW50
KSB8fCBpc0ZpZWxkSW5wdXRUZXJtaW5hdGVkKSB7CisgICAgICAgICAgICAgICAgLy8gRW50ZXIg
b3IgY29sb24gKGZvciBuYW1lKS9zZW1pY29sb24gb3V0c2lkZSBvZiBzdHJpbmcgKGZvciB2YWx1
ZSkuCisgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gIm1vdmUtZm9yd2FyZCI7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50
LmtleUNvZGUgPT09IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0LktleXMuRXNjLmNvZGUp
CisgICAgICAgICAgICAgICAgcmV0dXJuICJjYW5jZWwiOworICAgICAgICAgICAgZWxzZSBpZiAo
ZXZlbnQua2V5SWRlbnRpZmllciA9PT0gIlUrMDAwOSIpIC8vIFRhYiBrZXkuCisgICAgICAgICAg
ICAgICAgcmV0dXJuICJtb3ZlLSIgKyAoZXZlbnQuc2hpZnRLZXkgPyAiYmFja3dhcmQiIDogImZv
cndhcmQiKTsKKyAgICAgICAgfQogCi0gICAgICAgIFdlYkluc3BlY3Rvci5zdGFydEVkaXRpbmco
dGhpcy5saXN0SXRlbUVsZW1lbnQsIHRoaXMuZWRpdGluZ0NvbW1pdHRlZC5iaW5kKHRoaXMpLCB0
aGlzLmVkaXRpbmdDYW5jZWxsZWQuYmluZCh0aGlzKSwgY29udGV4dCk7CisgICAgICAgIFdlYklu
c3BlY3Rvci5zdGFydEVkaXRpbmcoc2VsZWN0RWxlbWVudCwgdGhpcy5lZGl0aW5nQ29tbWl0dGVk
LmJpbmQodGhpcyksIHRoaXMuZWRpdGluZ0NhbmNlbGxlZC5iaW5kKHRoaXMpLCBjb250ZXh0LAor
ICAgICAgICAgICAgeyBjdXN0b21GaW5pc2hIYW5kbGVyOiBuYW1lVmFsdWVGaW5pc2hIYW5kbGVy
LmJpbmQodGhpcywgY29udGV4dCwgaXNFZGl0aW5nTmFtZSkgfSApOwogICAgICAgICB3aW5kb3cu
Z2V0U2VsZWN0aW9uKCkuc2V0QmFzZUFuZEV4dGVudChzZWxlY3RFbGVtZW50LCAwLCBzZWxlY3RF
bGVtZW50LCAxKTsKICAgICB9LAogCi0gICAgZWRpdGluZ0tleVByZXNzOiBmdW5jdGlvbihldmVu
dCkKKyAgICBlZGl0aW5nTmFtZUtleVByZXNzOiBmdW5jdGlvbihldmVudCkKICAgICB7Ci0gICAg
ICAgIHZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7Ci0gICAgICAgIHZhciBj
b2xvbkluZGV4ID0gdGhpcy5saXN0SXRlbUVsZW1lbnQudGV4dENvbnRlbnQuaW5kZXhPZigiOiIp
OwotICAgICAgICB2YXIgc2VsZWN0aW9uTGVmdE9mZnNldCA9IGV2ZW50LnRhcmdldC5zZWxlY3Rp
b25MZWZ0T2Zmc2V0OwotCi0gICAgICAgIGlmIChjb2xvbkluZGV4IDwgMCB8fCBzZWxlY3Rpb25M
ZWZ0T2Zmc2V0IDw9IGNvbG9uSW5kZXgpIHsKLSAgICAgICAgICAgIC8vIENvbXBsZXRlIHByb3Bl
cnR5IG5hbWVzLgotICAgICAgICAgICAgdmFyIGNoYXJhY3RlciA9IGV2ZW50LmRhdGEudG9Mb3dl
ckNhc2UoKTsKLSAgICAgICAgICAgIGlmIChjaGFyYWN0ZXIgJiYgL1thLXotXS8udGVzdChjaGFy
YWN0ZXIpKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHByZWZpeCA9IHNlbGVjdGlvbi5hbmNob3JO
b2RlLnRleHRDb250ZW50LnN1YnN0cmluZygwLCBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0KTsKLSAg
ICAgICAgICAgICAgICB2YXIgcHJvcGVydHkgPSBXZWJJbnNwZWN0b3IuQ1NTQ29tcGxldGlvbnMu
Zmlyc3RTdGFydHNXaXRoKHByZWZpeCArIGNoYXJhY3Rlcik7Ci0KLSAgICAgICAgICAgICAgICBp
ZiAoIXNlbGVjdGlvbi5pc0NvbGxhcHNlZCkKLSAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9u
LmRlbGV0ZUZyb21Eb2N1bWVudCgpOwotCi0gICAgICAgICAgICAgICAgdGhpcy5yZXN0b3JlTmFt
ZUVsZW1lbnQoKTsKLQotICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eSkgewotICAgICAgICAg
ICAgICAgICAgICBpZiAocHJvcGVydHkgIT09IHRoaXMubmFtZUVsZW1lbnQudGV4dENvbnRlbnQp
Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5hbWVFbGVtZW50LnRleHRDb250ZW50ID0g
cHJvcGVydHk7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMubmFtZUVsZW1lbnQuZmlyc3RDaGls
ZC5zZWxlY3QocHJlZml4Lmxlbmd0aCArIDEpOwotICAgICAgICAgICAgICAgICAgICBldmVudC5w
cmV2ZW50RGVmYXVsdCgpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgLy8gQ29tcGxldGUg
cHJvcGVydHkgbmFtZXMuCisgICAgICAgIHZhciBjaGFyYWN0ZXIgPSBldmVudC5kYXRhLnRvTG93
ZXJDYXNlKCk7CisgICAgICAgIGlmIChjaGFyYWN0ZXIgJiYgL1thLXotXS8udGVzdChjaGFyYWN0
ZXIpKSB7CisgICAgICAgICAgICB2YXIgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigp
OworICAgICAgICAgICAgdmFyIHByZWZpeCA9IHNlbGVjdGlvbi5hbmNob3JOb2RlLnRleHRDb250
ZW50LnN1YnN0cmluZygwLCBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0KTsKKyAgICAgICAgICAgIHZh
ciBwcm9wZXJ0eSA9IFdlYkluc3BlY3Rvci5DU1NDb21wbGV0aW9ucy5maXJzdFN0YXJ0c1dpdGgo
cHJlZml4ICsgY2hhcmFjdGVyKTsKKworICAgICAgICAgICAgaWYgKCFzZWxlY3Rpb24uaXNDb2xs
YXBzZWQpCisgICAgICAgICAgICAgICAgc2VsZWN0aW9uLmRlbGV0ZUZyb21Eb2N1bWVudCgpOwor
CisgICAgICAgICAgICB0aGlzLnJlc3RvcmVOYW1lRWxlbWVudCgpOworCisgICAgICAgICAgICBp
ZiAocHJvcGVydHkpIHsKKyAgICAgICAgICAgICAgICBpZiAocHJvcGVydHkgIT09IHRoaXMubmFt
ZUVsZW1lbnQudGV4dENvbnRlbnQpCisgICAgICAgICAgICAgICAgICAgIHRoaXMubmFtZUVsZW1l
bnQudGV4dENvbnRlbnQgPSBwcm9wZXJ0eTsKKyAgICAgICAgICAgICAgICB0aGlzLm5hbWVFbGVt
ZW50LmZpcnN0Q2hpbGQuc2VsZWN0KHByZWZpeC5sZW5ndGggKyAxKTsKKyAgICAgICAgICAgICAg
ICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGNvbXBsZXRlIHByb3BlcnR5IHZh
bHVlcy4KICAgICAgICAgfQogICAgIH0sCiAKLSAgICBlZGl0aW5nS2V5RG93bjogZnVuY3Rpb24o
ZXZlbnQpCisgICAgZWRpdGluZ1ZhbHVlS2V5UHJlc3M6IGZ1bmN0aW9uKGV2ZW50KQorICAgIHsK
KyAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGNvbXBsZXRlIHByb3BlcnR5IHZhbHVlcy4K
KyAgICB9LAorCisgICAgZWRpdGluZ05hbWVLZXlEb3duOiBmdW5jdGlvbihldmVudCkKKyAgICB7
CisgICAgICAgIHZhciBzaG93TmV4dDsKKyAgICAgICAgaWYgKGV2ZW50LmtleUlkZW50aWZpZXIg
PT09ICJVcCIpCisgICAgICAgICAgICBzaG93TmV4dCA9IGZhbHNlOworICAgICAgICBlbHNlIGlm
IChldmVudC5rZXlJZGVudGlmaWVyID09PSAiRG93biIpCisgICAgICAgICAgICBzaG93TmV4dCA9
IHRydWU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2YXIg
c2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOworICAgICAgICBpZiAoIXNlbGVjdGlv
bi5yYW5nZUNvdW50KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBzZWxlY3Rp
b25SYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApOworICAgICAgICBpZiAoc2VsZWN0aW9u
UmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIgIT09IHRoaXMubmFtZUVsZW1lbnQgJiYgIXNl
bGVjdGlvblJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLmlzRGVzY2VuZGFudCh0aGlzLm5h
bWVFbGVtZW50KSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjb25zdCBzdHlsZVZh
bHVlRGVsaW1ldGVycyA9ICIgXHRcblwiJzo7LC8oKSI7CisgICAgICAgIHZhciB3b3JkUmFuZ2Ug
PSBzZWxlY3Rpb25SYW5nZS5zdGFydENvbnRhaW5lci5yYW5nZU9mV29yZChzZWxlY3Rpb25SYW5n
ZS5zdGFydE9mZnNldCwgc3R5bGVWYWx1ZURlbGltZXRlcnMsIHRoaXMubmFtZUVsZW1lbnQpOwor
ICAgICAgICB2YXIgd29yZFN0cmluZyA9IHdvcmRSYW5nZS50b1N0cmluZygpOworICAgICAgICB2
YXIgcHJlZml4ID0gc2VsZWN0aW9uUmFuZ2Uuc3RhcnRDb250YWluZXIudGV4dENvbnRlbnQuc3Vi
c3RyaW5nKDAsIHNlbGVjdGlvblJhbmdlLnN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgdmFyIHByb3Bl
cnR5OworCisgICAgICAgIGlmIChzaG93TmV4dCkKKyAgICAgICAgICAgIHByb3BlcnR5ID0gV2Vi
SW5zcGVjdG9yLkNTU0NvbXBsZXRpb25zLm5leHQod29yZFN0cmluZywgcHJlZml4KTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgcHJvcGVydHkgPSBXZWJJbnNwZWN0b3IuQ1NTQ29tcGxldGlv
bnMucHJldmlvdXMod29yZFN0cmluZywgcHJlZml4KTsKKworICAgICAgICBpZiAocHJvcGVydHkp
IHsKKyAgICAgICAgICAgIHRoaXMubmFtZUVsZW1lbnQudGV4dENvbnRlbnQgPSBwcm9wZXJ0eTsK
KyAgICAgICAgICAgIHRoaXMubmFtZUVsZW1lbnQuZmlyc3RDaGlsZC5zZWxlY3Qoc2VsZWN0aW9u
UmFuZ2Uuc3RhcnRPZmZzZXQpOworICAgICAgICB9CisgICAgICAgIGV2ZW50LnByZXZlbnREZWZh
dWx0KCk7CisgICAgfSwKKworICAgIGVkaXRpbmdWYWx1ZUtleURvd246IGZ1bmN0aW9uKGV2ZW50
KQogICAgIHsKICAgICAgICAgdmFyIGFycm93S2V5UHJlc3NlZCA9IChldmVudC5rZXlJZGVudGlm
aWVyID09PSAiVXAiIHx8IGV2ZW50LmtleUlkZW50aWZpZXIgPT09ICJEb3duIik7CiAgICAgICAg
IHZhciBwYWdlS2V5UHJlc3NlZCA9IChldmVudC5rZXlJZGVudGlmaWVyID09PSAiUGFnZVVwIiB8
fCBldmVudC5rZXlJZGVudGlmaWVyID09PSAiUGFnZURvd24iKTsKQEAgLTE1MjUsMzMgKzE2NTYs
MTEgQEAgV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7
CiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgdmFyIHNlbGVjdGlvblJhbmdlID0gc2Vs
ZWN0aW9uLmdldFJhbmdlQXQoMCk7Ci0gICAgICAgIGlmIChzZWxlY3Rpb25SYW5nZS5jb21tb25B
bmNlc3RvckNvbnRhaW5lciAhPT0gdGhpcy5saXN0SXRlbUVsZW1lbnQgJiYgIXNlbGVjdGlvblJh
bmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLmlzRGVzY2VuZGFudCh0aGlzLmxpc3RJdGVtRWxl
bWVudCkpCisgICAgICAgIGlmIChzZWxlY3Rpb25SYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5l
ciAhPT0gdGhpcy52YWx1ZUVsZW1lbnQgJiYgIXNlbGVjdGlvblJhbmdlLmNvbW1vbkFuY2VzdG9y
Q29udGFpbmVyLmlzRGVzY2VuZGFudCh0aGlzLnZhbHVlRWxlbWVudCkpCiAgICAgICAgICAgICBy
ZXR1cm47CiAKLSAgICAgICAgLy8gSWYgdGhlcmUgYXJlIHNldmVyYWwgcHJvcGVydGllcyBpbiB0
aGUgdGV4dCwgZG8gbm90IGhhbmRsZSBpbmNyZW1lbnRzL2RlY3JlbWVudHMuCi0gICAgICAgIHZh
ciB0ZXh0ID0gZXZlbnQudGFyZ2V0LnRleHRDb250ZW50LnRyaW0oKTsKLSAgICAgICAgdmFyIG9w
ZW5RdW90ZTsKLSAgICAgICAgdmFyIHdhc0VzY2FwZSA9IGZhbHNlOwotICAgICAgICAvLyBFeGNs
dWRlIHRoZSBsYXN0IGNoYXJhY3RlciBmcm9tIHRoZSBjaGVjayBzaW5jZSBpdCBpcyBhbGxvd2Vk
IHRvIGJlICI7Ii4KLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aCAtIDE7
ICsraSkgewotICAgICAgICAgICAgdmFyIGNoID0gdGV4dC5jaGFyQXQoaSk7Ci0gICAgICAgICAg
ICBpZiAoY2ggPT09ICJcXCIpIHsKLSAgICAgICAgICAgICAgICB3YXNFc2NhcGUgPSB0cnVlOwot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg
KGNoID09PSAiOyIgJiYgIW9wZW5RdW90ZSkKLSAgICAgICAgICAgICAgICByZXR1cm47IC8vIERv
IG5vdCBoYW5kbGUgbmFtZS92YWx1ZSBzaGlmdHMgaWYgdGhlIHByb3BlcnR5IGlzIGNvbXBvdW5k
LgotICAgICAgICAgICAgaWYgKChjaCA9PT0gIiciIHx8IGNoID09PSAiXCIiKSAmJiAhd2FzRXNj
YXBlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFvcGVuUXVvdGUpCi0gICAgICAgICAgICAgICAg
ICAgIG9wZW5RdW90ZSA9IGNoOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoID09PSBvcGVu
UXVvdGUpCi0gICAgICAgICAgICAgICAgICAgIG9wZW5RdW90ZSA9IG51bGw7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB3YXNFc2NhcGUgPSBmYWxzZTsKLSAgICAgICAgfQotCiAgICAgICAg
IGNvbnN0IHN0eWxlVmFsdWVEZWxpbWV0ZXJzID0gIiBcdFxuXCInOjssLygpIjsKLSAgICAgICAg
dmFyIHdvcmRSYW5nZSA9IHNlbGVjdGlvblJhbmdlLnN0YXJ0Q29udGFpbmVyLnJhbmdlT2ZXb3Jk
KHNlbGVjdGlvblJhbmdlLnN0YXJ0T2Zmc2V0LCBzdHlsZVZhbHVlRGVsaW1ldGVycywgdGhpcy5s
aXN0SXRlbUVsZW1lbnQpOworICAgICAgICB2YXIgd29yZFJhbmdlID0gc2VsZWN0aW9uUmFuZ2Uu
c3RhcnRDb250YWluZXIucmFuZ2VPZldvcmQoc2VsZWN0aW9uUmFuZ2Uuc3RhcnRPZmZzZXQsIHN0
eWxlVmFsdWVEZWxpbWV0ZXJzLCB0aGlzLnZhbHVlRWxlbWVudCk7CiAgICAgICAgIHZhciB3b3Jk
U3RyaW5nID0gd29yZFJhbmdlLnRvU3RyaW5nKCk7CiAgICAgICAgIHZhciByZXBsYWNlbWVudFN0
cmluZyA9IHdvcmRTdHJpbmc7CiAKQEAgLTE1OTMsMjIgKzE3MDIsNiBAQCBXZWJJbnNwZWN0b3Iu
U3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgcmVwbGFjZW1lbnRTdHJpbmcgPSBwcmVmaXggKyBudW1iZXIgKyBzdWZmaXg7
Ci0gICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uLmNvbnRhaW5zTm9kZSh0aGlzLm5hbWVFbGVt
ZW50LCB0cnVlKSkgewotICAgICAgICAgICAgdmFyIHByZWZpeCA9IHNlbGVjdGlvblJhbmdlLnN0
YXJ0Q29udGFpbmVyLnRleHRDb250ZW50LnN1YnN0cmluZygwLCBzZWxlY3Rpb25SYW5nZS5zdGFy
dE9mZnNldCk7Ci0gICAgICAgICAgICB2YXIgcHJvcGVydHk7Ci0KLSAgICAgICAgICAgIGlmIChl
dmVudC5rZXlJZGVudGlmaWVyID09PSAiVXAiKQotICAgICAgICAgICAgICAgIHByb3BlcnR5ID0g
V2ViSW5zcGVjdG9yLkNTU0NvbXBsZXRpb25zLnByZXZpb3VzKHdvcmRTdHJpbmcsIHByZWZpeCk7
Ci0gICAgICAgICAgICBlbHNlIGlmIChldmVudC5rZXlJZGVudGlmaWVyID09PSAiRG93biIpCi0g
ICAgICAgICAgICAgICAgcHJvcGVydHkgPSBXZWJJbnNwZWN0b3IuQ1NTQ29tcGxldGlvbnMubmV4
dCh3b3JkU3RyaW5nLCBwcmVmaXgpOwotCi0gICAgICAgICAgICB2YXIgc3RhcnRPZmZzZXQgPSBz
ZWxlY3Rpb25SYW5nZS5zdGFydE9mZnNldDsKLSAgICAgICAgICAgIGlmIChwcm9wZXJ0eSkgewot
ICAgICAgICAgICAgICAgIHRoaXMubmFtZUVsZW1lbnQudGV4dENvbnRlbnQgPSBwcm9wZXJ0eTsK
LSAgICAgICAgICAgICAgICB0aGlzLm5hbWVFbGVtZW50LmZpcnN0Q2hpbGQuc2VsZWN0KHN0YXJ0
T2Zmc2V0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0
KCk7Ci0gICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAv
LyBGSVhNRTogdGhpcyBzaG91bGQgY3ljbGUgdGhyb3VnaCBrbm93biBrZXl3b3JkcyBmb3IgdGhl
IGN1cnJlbnQgcHJvcGVydHkgdmFsdWUuCiAgICAgICAgIH0KQEAgLTE2MzIsNyArMTcyNSw5IEBA
IFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlID0gewogICAg
ICAgICAgICAgLy8gaWYgdGhlIGVkaXRpbmcgaXMgY2FuY2VsZWQgYW5kIGJlZm9yZSBlYWNoIGFw
cGx5LgogICAgICAgICAgICAgdGhpcy5vcmlnaW5hbFByb3BlcnR5VGV4dCA9IHRoaXMucHJvcGVy
dHkucHJvcGVydHlUZXh0OwogICAgICAgICB9Ci0gICAgICAgIHRoaXMuYXBwbHlTdHlsZVRleHQo
dGhpcy5saXN0SXRlbUVsZW1lbnQudGV4dENvbnRlbnQpOworCisgICAgICAgIC8vIFN5bnRoZXNp
emUgcHJvcGVydHkgdGV4dCBkaXNyZWdhcmRpbmcgYW55IGNvbW1lbnRzLCBjdXN0b20gd2hpdGVz
cGFjZSBldGMuCisgICAgICAgIHRoaXMuYXBwbHlTdHlsZVRleHQodGhpcy5uYW1lRWxlbWVudC50
ZXh0Q29udGVudCArICI6ICIgKyB0aGlzLnZhbHVlRWxlbWVudC50ZXh0Q29udGVudCk7CiAgICAg
fSwKIAogICAgIGVkaXRpbmdFbmRlZDogZnVuY3Rpb24oY29udGV4dCkKQEAgLTE2NDAsOCArMTcz
NSwxMiBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZSA9
IHsKICAgICAgICAgdGhpcy5oYXNDaGlsZHJlbiA9IGNvbnRleHQuaGFzQ2hpbGRyZW47CiAgICAg
ICAgIGlmIChjb250ZXh0LmV4cGFuZGVkKQogICAgICAgICAgICAgdGhpcy5leHBhbmQoKTsKLSAg
ICAgICAgdGhpcy5saXN0SXRlbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIs
IGNvbnRleHQua2V5RG93bkxpc3RlbmVyLCBmYWxzZSk7Ci0gICAgICAgIHRoaXMubGlzdEl0ZW1F
bGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleXByZXNzIiwgY29udGV4dC5rZXlQcmVzc0xp
c3RlbmVyLCBmYWxzZSk7CisgICAgICAgIHZhciBlZGl0ZWRFbGVtZW50ID0gY29udGV4dC5pc0Vk
aXRpbmdOYW1lID8gdGhpcy5uYW1lRWxlbWVudCA6IHRoaXMudmFsdWVFbGVtZW50OworICAgICAg
ICBlZGl0ZWRFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLCBjb250ZXh0Lmtl
eURvd25MaXN0ZW5lciwgZmFsc2UpOworICAgICAgICBlZGl0ZWRFbGVtZW50LnJlbW92ZUV2ZW50
TGlzdGVuZXIoImtleXByZXNzIiwgY29udGV4dC5rZXlQcmVzc0xpc3RlbmVyLCBmYWxzZSk7Cisg
ICAgICAgIGlmIChlZGl0ZWRFbGVtZW50LnBhcmVudEVsZW1lbnQpCisgICAgICAgICAgICBlZGl0
ZWRFbGVtZW50LnBhcmVudEVsZW1lbnQucmVtb3ZlU3R5bGVDbGFzcygiY2hpbGQtZWRpdGluZyIp
OworCiAgICAgICAgIGRlbGV0ZSB0aGlzLm9yaWdpbmFsUHJvcGVydHlUZXh0OwogICAgIH0sCiAK
QEAgLTE2NjEsNjEgKzE3NjAsOTYgQEAgV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxl
bWVudC5wcm90b3R5cGUgPSB7CiAgICAgZWRpdGluZ0NvbW1pdHRlZDogZnVuY3Rpb24oZWxlbWVu
dCwgdXNlcklucHV0LCBwcmV2aW91c0NvbnRlbnQsIGNvbnRleHQsIG1vdmVEaXJlY3Rpb24pCiAg
ICAgewogICAgICAgICB0aGlzLmVkaXRpbmdFbmRlZChjb250ZXh0KTsKKyAgICAgICAgdmFyIGlz
RWRpdGluZ05hbWUgPSBjb250ZXh0LmlzRWRpdGluZ05hbWU7CiAKICAgICAgICAgLy8gRGV0ZXJt
aW5lIHdoZXJlIHRvIG1vdmUgdG8gYmVmb3JlIG1ha2luZyBjaGFuZ2VzCi0gICAgICAgIHZhciBu
ZXdQcm9wZXJ0eSwgbW92ZVRvUHJvcGVydHlOYW1lLCBtb3ZlVG9TZWxlY3RvcjsKKyAgICAgICAg
dmFyIGNyZWF0ZU5ld1Byb3BlcnR5LCBtb3ZlVG9Qcm9wZXJ0eU5hbWUsIG1vdmVUb1NlbGVjdG9y
OwogICAgICAgICB2YXIgbW92ZVRvID0gdGhpczsKLSAgICAgICAgZG8gewotICAgICAgICAgICAg
bW92ZVRvID0gKG1vdmVEaXJlY3Rpb24gPT09ICJmb3J3YXJkIiA/IG1vdmVUby5uZXh0U2libGlu
ZyA6IG1vdmVUby5wcmV2aW91c1NpYmxpbmcpOwotICAgICAgICB9IHdoaWxlKG1vdmVUbyAmJiAh
bW92ZVRvLnNlbGVjdGFibGUpOwotCi0gICAgICAgIGlmIChtb3ZlVG8pCi0gICAgICAgICAgICBt
b3ZlVG9Qcm9wZXJ0eU5hbWUgPSBtb3ZlVG8ubmFtZTsKLSAgICAgICAgZWxzZSBpZiAobW92ZURp
cmVjdGlvbiA9PT0gImZvcndhcmQiKQotICAgICAgICAgICAgbmV3UHJvcGVydHkgPSB0cnVlOwot
ICAgICAgICBlbHNlIGlmIChtb3ZlRGlyZWN0aW9uID09PSAiYmFja3dhcmQiICYmIHRoaXMudHJl
ZU91dGxpbmUuc2VjdGlvbi5ydWxlKQotICAgICAgICAgICAgbW92ZVRvU2VsZWN0b3IgPSB0cnVl
OwotCi0gICAgICAgIC8vIE1ha2UgdGhlIENoYW5nZXMgYW5kIHRyaWdnZXIgdGhlIG1vdmVUb05l
eHRDYWxsYmFjayBhZnRlciB1cGRhdGluZworICAgICAgICB2YXIgbW92ZVRvT3RoZXIgPSAoaXNF
ZGl0aW5nTmFtZSBeIChtb3ZlRGlyZWN0aW9uID09PSAiZm9yd2FyZCIpKTsKKyAgICAgICAgdmFy
IGFiYW5kb25OZXdQcm9wZXJ0eSA9IHRoaXMuX25ld1Byb3BlcnR5ICYmICF1c2VySW5wdXQgJiYg
KG1vdmVUb090aGVyIHx8IGlzRWRpdGluZ05hbWUpOworICAgICAgICBpZiAobW92ZURpcmVjdGlv
biA9PT0gImZvcndhcmQiICYmICFpc0VkaXRpbmdOYW1lIHx8IG1vdmVEaXJlY3Rpb24gPT09ICJi
YWNrd2FyZCIgJiYgaXNFZGl0aW5nTmFtZSkgeworICAgICAgICAgICAgZG8geworICAgICAgICAg
ICAgICAgIG1vdmVUbyA9IChtb3ZlRGlyZWN0aW9uID09PSAiZm9yd2FyZCIgPyBtb3ZlVG8ubmV4
dFNpYmxpbmcgOiBtb3ZlVG8ucHJldmlvdXNTaWJsaW5nKTsKKyAgICAgICAgICAgIH0gd2hpbGUo
bW92ZVRvICYmICFtb3ZlVG8uc2VsZWN0YWJsZSk7CisKKyAgICAgICAgICAgaWYgKG1vdmVUbykK
KyAgICAgICAgICAgICAgICBtb3ZlVG9Qcm9wZXJ0eU5hbWUgPSBtb3ZlVG8ubmFtZTsKKyAgICAg
ICAgICAgIGVsc2UgaWYgKG1vdmVEaXJlY3Rpb24gPT09ICJmb3J3YXJkIiAmJiAoIXRoaXMuX25l
d1Byb3BlcnR5IHx8IHVzZXJJbnB1dCkpCisgICAgICAgICAgICAgICAgY3JlYXRlTmV3UHJvcGVy
dHkgPSB0cnVlOworICAgICAgICAgICAgZWxzZSBpZiAobW92ZURpcmVjdGlvbiA9PT0gImJhY2t3
YXJkIiAmJiB0aGlzLnRyZWVPdXRsaW5lLnNlY3Rpb24ucnVsZSkKKyAgICAgICAgICAgICAgICBt
b3ZlVG9TZWxlY3RvciA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBNYWtlIHRoZSBD
aGFuZ2VzIGFuZCB0cmlnZ2VyIHRoZSBtb3ZlVG9OZXh0Q2FsbGJhY2sgYWZ0ZXIgdXBkYXRpbmcu
CiAgICAgICAgIHZhciBibGFua0lucHV0ID0gL15ccyokLy50ZXN0KHVzZXJJbnB1dCk7Ci0gICAg
ICAgIGlmICh1c2VySW5wdXQgIT09IHByZXZpb3VzQ29udGVudCB8fCAodGhpcy5fbmV3UHJvcGVy
dHkgJiYgYmxhbmtJbnB1dCkpIHsgLy8gb25seSBpZiBzb21ldGhpbmcgY2hhbmdlZCwgb3IgYWRk
aW5nIGEgbmV3IHN0eWxlIGFuZCBpdCB3YXMgYmxhbmsKLSAgICAgICAgICAgIHRoaXMudHJlZU91
dGxpbmUuc2VjdGlvbi5fYWZ0ZXJVcGRhdGUgPSBtb3ZlVG9OZXh0Q2FsbGJhY2suYmluZCh0aGlz
LCB0aGlzLl9uZXdQcm9wZXJ0eSwgIWJsYW5rSW5wdXQpOwotICAgICAgICAgICAgdGhpcy5hcHBs
eVN0eWxlVGV4dCh1c2VySW5wdXQsIHRydWUpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
IG1vdmVUb05leHRDYWxsYmFjayh0aGlzLl9uZXdQcm9wZXJ0eSwgZmFsc2UsIHRoaXMudHJlZU91
dGxpbmUuc2VjdGlvbiwgZmFsc2UpOworICAgICAgICB2YXIgc2hvdWxkQ29tbWl0TmV3UHJvcGVy
dHkgPSB0aGlzLl9uZXdQcm9wZXJ0eSAmJiAobW92ZVRvT3RoZXIgfHwgKCFtb3ZlRGlyZWN0aW9u
ICYmICFpc0VkaXRpbmdOYW1lKSB8fCAoaXNFZGl0aW5nTmFtZSAmJiBibGFua0lucHV0KSk7CiAK
LSAgICAgICAgLy8gVGhlIENhbGxiYWNrIHRvIHN0YXJ0IGVkaXRpbmcgdGhlIG5leHQgcHJvcGVy
dHkKKyAgICAgICAgaWYgKCh1c2VySW5wdXQgIT09IHByZXZpb3VzQ29udGVudCAmJiAhdGhpcy5f
bmV3UHJvcGVydHkpIHx8IHNob3VsZENvbW1pdE5ld1Byb3BlcnR5KSB7CisgICAgICAgICAgICB0
aGlzLnRyZWVPdXRsaW5lLnNlY3Rpb24uX2FmdGVyVXBkYXRlID0gbW92ZVRvTmV4dENhbGxiYWNr
LmJpbmQodGhpcywgdGhpcy5fbmV3UHJvcGVydHksICFibGFua0lucHV0LCB0aGlzLnRyZWVPdXRs
aW5lLnNlY3Rpb24pOworICAgICAgICAgICAgdmFyIHByb3BlcnR5VGV4dDsKKyAgICAgICAgICAg
IGlmIChibGFua0lucHV0IHx8ICh0aGlzLl9uZXdQcm9wZXJ0eSAmJiAvXlxzKiQvLnRlc3QodGhp
cy52YWx1ZUVsZW1lbnQudGV4dENvbnRlbnQpKSkKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eVRl
eHQgPSAiIjsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChpc0VkaXRp
bmdOYW1lKQorICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVRleHQgPSB1c2VySW5wdXQgKyAi
OiAiICsgdGhpcy52YWx1ZUVsZW1lbnQudGV4dENvbnRlbnQ7CisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVRleHQgPSB0aGlzLm5hbWVFbGVtZW50LnRl
eHRDb250ZW50ICsgIjogIiArIHVzZXJJbnB1dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHRoaXMuYXBwbHlTdHlsZVRleHQocHJvcGVydHlUZXh0LCB0cnVlKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGlmICghdGhpcy5fbmV3UHJvcGVydHkpCisgICAgICAgICAgICAgICAg
dGhpcy51cGRhdGVUaXRsZSgpOworICAgICAgICAgICAgbW92ZVRvTmV4dENhbGxiYWNrKHRoaXMu
X25ld1Byb3BlcnR5LCBmYWxzZSwgdGhpcy50cmVlT3V0bGluZS5zZWN0aW9uKTsKKyAgICAgICAg
fQorCisgICAgICAgIHZhciBtb3ZlVG9JbmRleCA9IG1vdmVUbyAmJiB0aGlzLnRyZWVPdXRsaW5l
ID8gdGhpcy50cmVlT3V0bGluZS5jaGlsZHJlbi5pbmRleE9mKG1vdmVUbykgOiAtMTsKKworICAg
ICAgICAvLyBUaGUgQ2FsbGJhY2sgdG8gc3RhcnQgZWRpdGluZyB0aGUgbmV4dC9wcmV2aW91cyBw
cm9wZXJ0eS9zZWxlY3Rvci4KICAgICAgICAgZnVuY3Rpb24gbW92ZVRvTmV4dENhbGxiYWNrKGFs
cmVhZHlOZXcsIHZhbHVlQ2hhbmdlZCwgc2VjdGlvbikKICAgICAgICAgewogICAgICAgICAgICAg
aWYgKCFtb3ZlRGlyZWN0aW9uKQogICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAg
ICAgLy8gVXNlciBqdXN0IHRhYmJlZCB0aHJvdWdoIHdpdGhvdXQgY2hhbmdlcworICAgICAgICAg
ICAgLy8gVXNlciBqdXN0IHRhYmJlZCB0aHJvdWdoIHdpdGhvdXQgY2hhbmdlcy4KICAgICAgICAg
ICAgIGlmIChtb3ZlVG8gJiYgbW92ZVRvLnBhcmVudCkgewotICAgICAgICAgICAgICAgIG1vdmVU
by5zdGFydEVkaXRpbmcobW92ZVRvLnZhbHVlRWxlbWVudCk7CisgICAgICAgICAgICAgICAgbW92
ZVRvLnN0YXJ0RWRpdGluZyghaXNFZGl0aW5nTmFtZSA/IG1vdmVUby5uYW1lRWxlbWVudCA6IG1v
dmVUby52YWx1ZUVsZW1lbnQpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgLy8gVXNlciBoYXMgbWFkZSBhIGNoYW5nZSB0aGVuIHRhYmJlZCwg
d2lwaW5nIGFsbCB0aGUgb3JpZ2luYWwgdHJlZUVsZW1lbnRzLAotICAgICAgICAgICAgLy8gcmVj
YWxjdWxhdGUgdGhlIG5ldyB0cmVlRWxlbWVudCBmb3IgdGhlIHNhbWUgcHJvcGVydHkgd2Ugd2Vy
ZSBnb2luZyB0byBlZGl0IG5leHQKLSAgICAgICAgICAgIC8vIEZJWE1FKGFwYXZsb3YpOiB0aGlz
IHdpbGwgbm90IHdvcmsgZm9yIG11bHRpcGxlIHNhbWUtbmFtZWQgcHJvcGVydGllcyBpbiBhIHN0
eWxlCi0gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgKHRoZSBmaXJzdCBvbmUgd2lsbCBh
bHdheXMgYmUgcmV0dXJuZWQpLgorICAgICAgICAgICAgLy8gVXNlciBoYXMgbWFkZSBhIGNoYW5n
ZSB0aGVuIHRhYmJlZCwgd2lwaW5nIGFsbCB0aGUgb3JpZ2luYWwgdHJlZUVsZW1lbnRzLgorICAg
ICAgICAgICAgLy8gUmVjYWxjdWxhdGUgdGhlIG5ldyB0cmVlRWxlbWVudCBmb3IgdGhlIHNhbWUg
cHJvcGVydHkgd2Ugd2VyZSBnb2luZyB0byBlZGl0IG5leHQuCiAgICAgICAgICAgICBpZiAobW92
ZVRvICYmICFtb3ZlVG8ucGFyZW50KSB7Ci0gICAgICAgICAgICAgICAgdmFyIHRyZWVFbGVtZW50
ID0gc2VjdGlvbi5maW5kVHJlZUVsZW1lbnRXaXRoTmFtZShtb3ZlVG9Qcm9wZXJ0eU5hbWUpOwot
ICAgICAgICAgICAgICAgIGlmICh0cmVlRWxlbWVudCkKLSAgICAgICAgICAgICAgICAgICAgdHJl
ZUVsZW1lbnQuc3RhcnRFZGl0aW5nKHRyZWVFbGVtZW50LnZhbHVlRWxlbWVudCk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIHZhciBwcm9wZXJ0eUVsZW1lbnRzID0g
c2VjdGlvbi5wcm9wZXJ0aWVzVHJlZU91dGxpbmUuY2hpbGRyZW47CisgICAgICAgICAgICAgICAg
aWYgKG1vdmVEaXJlY3Rpb24gPT09ICJmb3J3YXJkIiAmJiBibGFua0lucHV0ICYmICFpc0VkaXRp
bmdOYW1lKQorICAgICAgICAgICAgICAgICAgICAtLW1vdmVUb0luZGV4OworICAgICAgICAgICAg
ICAgIGlmIChtb3ZlVG9JbmRleCA+PSBwcm9wZXJ0eUVsZW1lbnRzLmxlbmd0aCAmJiAhdGhpcy5f
bmV3UHJvcGVydHkpCisgICAgICAgICAgICAgICAgICAgIGNyZWF0ZU5ld1Byb3BlcnR5ID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHRyZWVF
bGVtZW50ID0gbW92ZVRvSW5kZXggPj0gMCA/IHByb3BlcnR5RWxlbWVudHNbbW92ZVRvSW5kZXhd
IDogbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRyZWVFbGVtZW50KSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICB0cmVlRWxlbWVudC5zdGFydEVkaXRpbmcoIWlzRWRpdGluZ05hbWUg
PyB0cmVlRWxlbWVudC5uYW1lRWxlbWVudCA6IHRyZWVFbGVtZW50LnZhbHVlRWxlbWVudCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoIWFscmVhZHlOZXcpCisgICAgICAgICAgICAgICAgICAgICAgICBtb3ZlVG9TZWxlY3Rv
ciA9IHRydWU7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICAvLyBDcmVhdGUgYSBuZXcgYXR0cmlidXRlIGluIHRoaXMgc2VjdGlvbgotICAgICAgICAgICAg
aWYgKG5ld1Byb3BlcnR5KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGFscmVhZHlOZXcgJiYgIXZh
bHVlQ2hhbmdlZCkKKyAgICAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyBhdHRyaWJ1dGUgaW4gdGhp
cyBzZWN0aW9uIChvciBtb3ZlIHRvIG5leHQgZWRpdGFibGUgc2VsZWN0b3IgaWYgcG9zc2libGUp
LgorICAgICAgICAgICAgaWYgKGNyZWF0ZU5ld1Byb3BlcnR5KSB7CisgICAgICAgICAgICAgICAg
aWYgKGFscmVhZHlOZXcgJiYgIXZhbHVlQ2hhbmdlZCAmJiAoaXNFZGl0aW5nTmFtZSBeIChtb3Zl
RGlyZWN0aW9uID09PSAiYmFja3dhcmQiKSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
IAogICAgICAgICAgICAgICAgIHNlY3Rpb24uYWRkTmV3QmxhbmtQcm9wZXJ0eSgpLnN0YXJ0RWRp
dGluZygpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAorICAgICAg
ICAgICAgaWYgKGFiYW5kb25OZXdQcm9wZXJ0eSkgeworICAgICAgICAgICAgICAgIHZhciBzZWN0
aW9uVG9FZGl0ID0gbW92ZURpcmVjdGlvbiA9PT0gImJhY2t3YXJkIiA/IHNlY3Rpb24gOiBzZWN0
aW9uLm5leHRFZGl0YWJsZVNpYmxpbmcoKTsKKyAgICAgICAgICAgICAgICBpZiAoc2VjdGlvblRv
RWRpdCAmJiBzZWN0aW9uVG9FZGl0LnJ1bGUpCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25U
b0VkaXQuc3RhcnRFZGl0aW5nU2VsZWN0b3IoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisKICAgICAgICAgICAgIGlmIChtb3ZlVG9TZWxlY3RvcikKICAgICAgICAg
ICAgICAgICBzZWN0aW9uLnN0YXJ0RWRpdGluZ1NlbGVjdG9yKCk7CiAgICAgICAgIH0KQEAgLTE3
MjUsMTYgKzE4NTksMTMgQEAgV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5w
cm90b3R5cGUgPSB7CiAgICAgewogICAgICAgICB2YXIgc2VjdGlvbiA9IHRoaXMudHJlZU91dGxp
bmUuc2VjdGlvbjsKICAgICAgICAgdmFyIGVsZW1lbnRzUGFuZWwgPSBXZWJJbnNwZWN0b3IucGFu
ZWxzLmVsZW1lbnRzOwotICAgICAgICBzdHlsZVRleHQgPSBzdHlsZVRleHQucmVwbGFjZSgvXHMv
ZywgIiAiKS50cmltKCk7IC8vIHJlcGxhY2UgJm5ic3A7IHdpdGggd2hpdGVzcGFjZS4KKyAgICAg
ICAgc3R5bGVUZXh0ID0gc3R5bGVUZXh0LnJlcGxhY2UoL1xzL2csICIgIikudHJpbSgpOyAvLyBS
ZXBsYWNlICZuYnNwOyB3aXRoIHdoaXRlc3BhY2UuCiAgICAgICAgIHZhciBzdHlsZVRleHRMZW5n
dGggPSBzdHlsZVRleHQubGVuZ3RoOwotICAgICAgICBpZiAoIXN0eWxlVGV4dExlbmd0aCAmJiB1
cGRhdGVJbnRlcmZhY2UpIHsKLSAgICAgICAgICAgIGlmICh0aGlzLl9uZXdQcm9wZXJ0eSkgewot
ICAgICAgICAgICAgICAgIC8vIFRoZSB1c2VyIGRlbGV0ZWQgZXZlcnl0aGluZywgc28gcmVtb3Zl
IHRoZSB0cmVlIGVsZW1lbnQgYW5kIHVwZGF0ZS4KLSAgICAgICAgICAgICAgICB0aGlzLnBhcmVu
dC5yZW1vdmVDaGlsZCh0aGlzKTsKLSAgICAgICAgICAgICAgICBzZWN0aW9uLmFmdGVyVXBkYXRl
KCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICAgICAgZGVsZXRlIHNlY3Rpb24uX2FmdGVyVXBkYXRlOworICAgICAgICBpZiAoIXN0eWxl
VGV4dExlbmd0aCAmJiB1cGRhdGVJbnRlcmZhY2UgJiYgdGhpcy5fbmV3UHJvcGVydHkpIHsKKyAg
ICAgICAgICAgIC8vIFRoZSB1c2VyIGRlbGV0ZWQgZXZlcnl0aGluZywgc28gcmVtb3ZlIHRoZSB0
cmVlIGVsZW1lbnQgYW5kIHVwZGF0ZS4KKyAgICAgICAgICAgIHRoaXMucGFyZW50LnJlbW92ZUNo
aWxkKHRoaXMpOworICAgICAgICAgICAgc2VjdGlvbi5hZnRlclVwZGF0ZSgpOworICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2sobmV3U3R5
bGUpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGV4dFZpZXdlci5q
cyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0Vmlld2VyLmpzCmluZGV4IDlhZDVl
NDkuLmI3ZjdjYTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0
Vmlld2VyLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0Vmlld2VyLmpz
CkBAIC0yNjgsNyArMjY4LDcgQEAgV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBlID0g
ewogICAgICAgICB2YXIgb2xkQ29udGVudCA9IGxpbmVSb3cubGFzdENoaWxkLmlubmVySFRNTDsK
ICAgICAgICAgdmFyIGNhbmNlbEVkaXRpbmdDYWxsYmFjayA9IHRoaXMuX2NhbmNlbEVkaXRpbmdM
aW5lLmJpbmQodGhpcywgbGluZVJvdy5sYXN0Q2hpbGQsIG9sZENvbnRlbnQpOwogICAgICAgICB2
YXIgY29tbWl0RWRpdGluZ0NhbGxiYWNrID0gdGhpcy5fY29tbWl0RWRpdGluZ0xpbmUuYmluZCh0
aGlzLCBsaW5lUm93LmxpbmVOdW1iZXIsIGxpbmVSb3cubGFzdENoaWxkLCBjYW5jZWxFZGl0aW5n
Q2FsbGJhY2spOwotICAgICAgICB0aGlzLl9lZGl0aW5nTGluZSA9IFdlYkluc3BlY3Rvci5zdGFy
dEVkaXRpbmcobGluZVJvdy5sYXN0Q2hpbGQsIGNvbW1pdEVkaXRpbmdDYWxsYmFjaywgY2FuY2Vs
RWRpdGluZ0NhbGxiYWNrLCBudWxsLCB0cnVlKTsKKyAgICAgICAgdGhpcy5fZWRpdGluZ0xpbmUg
PSBXZWJJbnNwZWN0b3Iuc3RhcnRFZGl0aW5nKGxpbmVSb3cubGFzdENoaWxkLCBjb21taXRFZGl0
aW5nQ2FsbGJhY2ssIGNhbmNlbEVkaXRpbmdDYWxsYmFjaywgbnVsbCwgeyBtdWx0aWxpbmU6IHRy
dWUgfSk7CiAgICAgfSwKIAogICAgIF9jb21taXRFZGl0aW5nTGluZTogZnVuY3Rpb24obGluZU51
bWJlciwgZWxlbWVudCwgY2FuY2VsRWRpdGluZ0NhbGxiYWNrKQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5jc3MgYi9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvaW5zcGVjdG9yLmNzcwppbmRleCA5NjU2ODliLi5jOTA4NDI3IDEwMDY0NAotLS0g
YS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmNzcworKysgYi9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmNzcwpAQCAtMTQyNCw2ICsxNDI0LDEyIEBA
IGJvZHkuaW5hY3RpdmUgLnBsYWNhcmQuc2VsZWN0ZWQgewogICAgIHRleHQtZGVjb3JhdGlvbjog
bm9uZSAhaW1wb3J0YW50OwogfQogCisuY2hpbGQtZWRpdGluZyB7CisgICAgY29sb3I6IGJsYWNr
ICFpbXBvcnRhbnQ7CisgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lICFpbXBvcnRhbnQ7CisgICAg
b3ZlcmZsb3c6IHZpc2libGUgIWltcG9ydGFudDsKK30KKwogLmVkaXRpbmcgYnIgewogICAgIGRp
c3BsYXk6IG5vbmU7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
aW5zcGVjdG9yLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcwpp
bmRleCBmNzFiODlhLi5mNDFjNWZkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvaW5zcGVjdG9yLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNw
ZWN0b3IuanMKQEAgLTE5MTYsMTAgKzE5MTYsMTQgQEAgV2ViSW5zcGVjdG9yLmlzRWRpdGluZ0Fu
eUZpZWxkID0gZnVuY3Rpb24oKQogICAgIHJldHVybiB0aGlzLl9fZWRpdGluZzsKIH0KIAotV2Vi
SW5zcGVjdG9yLnN0YXJ0RWRpdGluZyA9IGZ1bmN0aW9uKGVsZW1lbnQsIGNvbW1pdHRlZENhbGxi
YWNrLCBjYW5jZWxsZWRDYWxsYmFjaywgY29udGV4dCwgbXVsdGlsaW5lKQorLy8gQXZhaWxhYmxl
IGNvbmZpZyBmaWVsZHM6CisvLyBtdWx0aWxpbmU6IHRydWV8ZmFsc2UgLSB3aGV0aGVyIHRoZSBl
ZGl0ZWQgZWxlbWVudCBpcyBtdWx0aWxpbmUKKy8vIGN1c3RvbUZpbmlzaEhhbmRsZXI6IEZ1bmN0
aW9uIC0gY3VzdG9tIGZpbmlzaCBoYW5kbGVyIGZvciB0aGUgZWRpdGluZyBzZXNzaW9uCitXZWJJ
bnNwZWN0b3Iuc3RhcnRFZGl0aW5nID0gZnVuY3Rpb24oZWxlbWVudCwgY29tbWl0dGVkQ2FsbGJh
Y2ssIGNhbmNlbGxlZENhbGxiYWNrLCBjb250ZXh0LCBjb25maWcpCiB7CiAgICAgaWYgKGVsZW1l
bnQuX19lZGl0aW5nKQogICAgICAgICByZXR1cm47CisgICAgY29uZmlnID0gY29uZmlnIHx8IHt9
OwogICAgIGVsZW1lbnQuX19lZGl0aW5nID0gdHJ1ZTsKICAgICBXZWJJbnNwZWN0b3IuX19lZGl0
aW5nID0gdHJ1ZTsKIApAQCAtMTk3OCwyMCArMTk4MiwzNiBAQCBXZWJJbnNwZWN0b3Iuc3RhcnRF
ZGl0aW5nID0gZnVuY3Rpb24oZWxlbWVudCwgY29tbWl0dGVkQ2FsbGJhY2ssIGNhbmNlbGxlZENh
bGxiYQogICAgICAgICAgICAgY29tbWl0dGVkQ2FsbGJhY2sodGhpcywgZ2V0Q29udGVudCh0aGlz
KSwgb2xkVGV4dCwgY29udGV4dCwgbW92ZURpcmVjdGlvbik7CiAgICAgfQogCi0gICAgZnVuY3Rp
b24ga2V5RG93bkV2ZW50TGlzdGVuZXIoZXZlbnQpIHsKKyAgICBmdW5jdGlvbiBkZWZhdWx0Rmlu
aXNoSGFuZGxlcihldmVudCkKKyAgICB7CiAgICAgICAgIHZhciBpc01ldGFPckN0cmwgPSBXZWJJ
bnNwZWN0b3IuaXNNYWMoKSA/CiAgICAgICAgICAgICBldmVudC5tZXRhS2V5ICYmICFldmVudC5z
aGlmdEtleSAmJiAhZXZlbnQuY3RybEtleSAmJiAhZXZlbnQuYWx0S2V5IDoKICAgICAgICAgICAg
IGV2ZW50LmN0cmxLZXkgJiYgIWV2ZW50LnNoaWZ0S2V5ICYmICFldmVudC5tZXRhS2V5ICYmICFl
dmVudC5hbHRLZXk7Ci0gICAgICAgIGlmIChpc0VudGVyS2V5KGV2ZW50KSAmJiAoIW11bHRpbGlu
ZSB8fCBpc01ldGFPckN0cmwpKSB7CisgICAgICAgIGlmIChpc0VudGVyS2V5KGV2ZW50KSAmJiAo
IWNvbmZpZy5tdWx0aWxpbmUgfHwgaXNNZXRhT3JDdHJsKSkKKyAgICAgICAgICAgIHJldHVybiAi
Y29tbWl0IjsKKyAgICAgICAgZWxzZSBpZiAoZXZlbnQua2V5Q29kZSA9PT0gV2ViSW5zcGVjdG9y
LktleWJvYXJkU2hvcnRjdXQuS2V5cy5Fc2MuY29kZSkKKyAgICAgICAgICAgIHJldHVybiAiY2Fu
Y2VsIjsKKyAgICAgICAgZWxzZSBpZiAoZXZlbnQua2V5SWRlbnRpZmllciA9PT0gIlUrMDAwOSIp
IC8vIFRhYiBrZXkKKyAgICAgICAgICAgIHJldHVybiAibW92ZS0iICsgKGV2ZW50LnNoaWZ0S2V5
ID8gImJhY2t3YXJkIiA6ICJmb3J3YXJkIik7CisgICAgfQorCisgICAgZnVuY3Rpb24ga2V5RG93
bkV2ZW50TGlzdGVuZXIoZXZlbnQpCisgICAgeworICAgICAgICB2YXIgaGFuZGxlciA9IGNvbmZp
Zy5jdXN0b21GaW5pc2hIYW5kbGVyIHx8IGRlZmF1bHRGaW5pc2hIYW5kbGVyOworICAgICAgICB2
YXIgcmVzdWx0ID0gaGFuZGxlcihldmVudCk7CisgICAgICAgIGlmIChyZXN1bHQgPT09ICJjb21t
aXQiKSB7CiAgICAgICAgICAgICBlZGl0aW5nQ29tbWl0dGVkLmNhbGwoZWxlbWVudCk7CiAgICAg
ICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgZXZlbnQuc3RvcFBy
b3BhZ2F0aW9uKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5Q29kZSA9PT0gV2ViSW5z
cGVjdG9yLktleWJvYXJkU2hvcnRjdXQuS2V5cy5Fc2MuY29kZSkgeworICAgICAgICB9IGVsc2Ug
aWYgKHJlc3VsdCA9PT0gImNhbmNlbCIpIHsKICAgICAgICAgICAgIGVkaXRpbmdDYW5jZWxsZWQu
Y2FsbChlbGVtZW50KTsKICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAg
ICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKLSAgICAgICAgfSBlbHNlIGlmIChldmVu
dC5rZXlJZGVudGlmaWVyID09PSAiVSswMDA5IikgLy8gVGFiIGtleQotICAgICAgICAgICAgbW92
ZURpcmVjdGlvbiA9IChldmVudC5zaGlmdEtleSA/ICJiYWNrd2FyZCIgOiAiZm9yd2FyZCIpOwor
ICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdCAmJiByZXN1bHQuaW5kZXhPZigibW92ZS0iKSA9PT0g
MCkgeworICAgICAgICAgICAgbW92ZURpcmVjdGlvbiA9IHJlc3VsdC5zdWJzdHJpbmcoNSk7Cisg
ICAgICAgICAgICBpZiAoZXZlbnQua2V5SWRlbnRpZmllciAhPT0gIlUrMDAwOSIpCisgICAgICAg
ICAgICAgICAgYmx1ckV2ZW50TGlzdGVuZXIoKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGVs
ZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsIGJsdXJFdmVudExpc3RlbmVyLCBmYWxzZSk7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdHJlZW91dGxpbmUuanMg
Yi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvdHJlZW91dGxpbmUuanMKaW5kZXggYTFlMDUy
Zi4uMjdiYzgzOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3RyZWVv
dXRsaW5lLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC90cmVlb3V0bGluZS5q
cwpAQCAtODIxLDYgKzgyMSwxMCBAQCBUcmVlRWxlbWVudC5wcm90b3R5cGUuc2VsZWN0ID0gZnVu
Y3Rpb24oc3VwcmVzc09uU2VsZWN0LCBzZWxlY3RlZEJ5VXNlcikKIAogICAgIHRoaXMuc2VsZWN0
ZWQgPSB0cnVlOwogICAgIHRoaXMudHJlZU91dGxpbmUuX2NoaWxkcmVuTGlzdE5vZGUuZm9jdXMo
KTsKKworICAgIC8vIEZvY3VzaW5nIG9uIGFub3RoZXIgbm9kZSBtYXkgZGV0YWNoICJ0aGlzIiBm
cm9tIHRyZWUuCisgICAgaWYgKCF0aGlzLnRyZWVPdXRsaW5lKQorICAgICAgICByZXR1cm47CiAg
ICAgdGhpcy50cmVlT3V0bGluZS5zZWxlY3RlZFRyZWVFbGVtZW50ID0gdGhpczsKICAgICBpZiAo
dGhpcy5fbGlzdEl0ZW1Ob2RlKQogICAgICAgICB0aGlzLl9saXN0SXRlbU5vZGUuYWRkU3R5bGVD
bGFzcygic2VsZWN0ZWQiKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75907</attachid>
            <date>2010-12-08 08:43:52 -0800</date>
            <delta_ts>2010-12-09 05:33:49 -0800</delta_ts>
            <desc>[PATCH] Comments from pfeldman addressed, WebInspector.startEditing() signature changed</desc>
            <filename>firebugcss.patch</filename>
            <type>text/plain</type>
            <size>44794</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">Y29tbWl0IDRjNjc4ZGNjYzIwMWU0MWU0NDJkN2Y1MjIyY2Y0YmU1YjY4MTEzZmUKQXV0aG9yOiBB
bGV4YW5kZXIgUGF2bG92IDxhcGF2bG92QGNocm9taXVtLm9yZz4KRGF0ZTogICBGcmkgRGVjIDMg
MjA6MDc6NDMgMjAxMCArMDMwMAoKICAgIEZpcmVidWctbGlrZSBDU1MgZWRpdGluZyBpbiB0aGUg
U3R5bGVzIHBhbmUKCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKaW5kZXggM2JiMWI4My4uY2NhNTJlYSAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEz
IEBACisyMDEwLTEyLTA4ICBBbGV4YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIElu
c3BlY3RvcjogRW5hYmxlIENTUyBwcm9wZXJ0eSBlZGl0aW5nIG5hbWUvdmFsdWUtd2lzZSAobGlr
ZSBGaXJlYnVnIGRvZXMpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD01MDU2NQorCisgICAgICAgICogaW5zcGVjdG9yL2NvbnNvbGUtZGlyLmh0bWw6Cisg
ICAgICAgICogaW5zcGVjdG9yL3N0eWxlcy1hZGQtYmxhbmstcHJvcGVydHkuaHRtbDoKKwogMjAx
MC0xMi0wOCAgRGFpIE1pa3VydWJlICA8ZG1pa3VydWJlQGdvb2dsZS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgS2VudCBUYW11cmEuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0
b3IvY29uc29sZS1kaXIuaHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9jb25zb2xlLWRpci5o
dG1sCmluZGV4IDUzZjdkYmUuLjE5MmY3MTAgMTAwNzU1Ci0tLSBhL0xheW91dFRlc3RzL2luc3Bl
Y3Rvci9jb25zb2xlLWRpci5odG1sCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9jb25zb2xl
LWRpci5odG1sCkBAIC0zNyw5ICszNyw5IEBAIGZ1bmN0aW9uIGZyb250ZW5kX2V4cGFuZEFuZER1
bXBDb25zb2xlTWVzc2FnZXModGVzdENvbnRyb2xsZXIpCiAgICAgICAgIHZhciBlbGVtZW50ID0g
bWVzc2FnZXNbaV0udG9NZXNzYWdlRWxlbWVudCgpOwogICAgICAgICB2YXIgbm9kZSA9IGVsZW1l
bnQudHJhdmVyc2VOZXh0Tm9kZShlbGVtZW50KTsKICAgICAgICAgd2hpbGUgKG5vZGUpIHsKLSAg
ICAgICAgICAgIGlmIChub2RlLnNlY3Rpb25Gb3JUZXN0KSB7Ci0gICAgICAgICAgICAgICAgbWVz
c2FnZXNbaV0uc2VjdGlvbiA9IG5vZGUuc2VjdGlvbkZvclRlc3Q7Ci0gICAgICAgICAgICAgICAg
bm9kZS5zZWN0aW9uRm9yVGVzdC5leHBhbmRlZCA9IHRydWU7CisgICAgICAgICAgICBpZiAobm9k
ZS5fc2VjdGlvbikgeworICAgICAgICAgICAgICAgIG1lc3NhZ2VzW2ldLnNlY3Rpb24gPSBub2Rl
Ll9zZWN0aW9uOworICAgICAgICAgICAgICAgIG5vZGUuX3NlY3Rpb24uZXhwYW5kZWQgPSB0cnVl
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbm9k
ZSA9IG5vZGUudHJhdmVyc2VOZXh0Tm9kZShlbGVtZW50KTsKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2luc3BlY3Rvci9zdHlsZXMtYWRkLWJsYW5rLXByb3BlcnR5Lmh0bWwgYi9MYXlvdXRUZXN0
cy9pbnNwZWN0b3Ivc3R5bGVzLWFkZC1ibGFuay1wcm9wZXJ0eS5odG1sCmluZGV4IDAxM2MzMTEu
LmZkMzZhOTUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMtYWRkLWJs
YW5rLXByb3BlcnR5Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy1hZGQt
YmxhbmstcHJvcGVydHkuaHRtbApAQCAtMzksOCArMzksOSBAQCBmdW5jdGlvbiBmcm9udGVuZF9k
dW1wSW5zcGVjdGVkU3R5bGUodGVzdENvbnRyb2xsZXIpCiAKICAgICB2YXIgZXZ0ID0gZG9jdW1l
bnQuY3JlYXRlRXZlbnQoIktleWJvYXJkRXZlbnQiKTsKICAgICBldnQuaW5pdEtleWJvYXJkRXZl
bnQoImtleWRvd24iLCB0cnVlIC8qIGNhbiBidWJibGUgKi8sIHRydWUgLyogY2FuIGNhbmNlbCAq
LywgbnVsbCAvKiB2aWV3ICovLCAiRW50ZXIiLCAiIik7Ci0gICAgdHJlZUVsZW1lbnQubGlzdEl0
ZW1FbGVtZW50LnRleHRDb250ZW50ID0gInRleHQtZGVjb3JhdGlvbjogbm9uZSI7Ci0gICAgdHJl
ZUVsZW1lbnQubGlzdEl0ZW1FbGVtZW50LmRpc3BhdGNoRXZlbnQoZXZ0KTsKKyAgICB0cmVlRWxl
bWVudC5uYW1lRWxlbWVudC50ZXh0Q29udGVudCA9ICJ0ZXh0LWRlY29yYXRpb24iOworICAgIHRy
ZWVFbGVtZW50LnZhbHVlRWxlbWVudC50ZXh0Q29udGVudCA9ICJub25lIjsKKyAgICB0cmVlRWxl
bWVudC5uYW1lRWxlbWVudC5kaXNwYXRjaEV2ZW50KGV2dCk7CiAKICAgICB0ZXN0Q29udHJvbGxl
ci5ydW5BZnRlclBlbmRpbmdEaXNwYXRjaGVzKGZyb250ZW5kX2R1bXBSZXN1bHRzLmJpbmQodGhp
cywgdGVzdENvbnRyb2xsZXIpKTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIv
V2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGNlYzlhYS4uMmZlNzQ2YiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1OCBAQAor
MjAxMC0xMi0wOCAgQWxleGFuZGVyIFBhdmxvdiAgPGFwYXZsb3ZAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IEVuYWJsZSBDU1MgcHJvcGVydHkgZWRpdGluZyBuYW1lL3ZhbHVlLXdpc2UgKGxpa2UgRmly
ZWJ1ZyBkb2VzKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTA1NjUKKworICAgICAgICBGb3IgQ1NTIHByb3BlcnR5IGVkaXRpbmcsIHRoZSBwcm9wZXJ0
eSBuYW1lIGFuZCB2YWx1ZSBoYXZlIGJlY29tZSB0d28gZmllbGRzIHNlcGFyYXRlZAorICAgICAg
ICBieSBhIGNvbG9uIChyYXRoZXIgdGhhbiBvbmUgZmllbGQgY29udGFpbmluZyB0aGUgZnVsbCBw
cm9wZXJ0eSB0ZXh0LikgQSB1c2VyIGNhbiB0YWIKKyAgICAgICAgYmV0d2VlbiB0aGUgbmFtZSBh
bmQgdmFsdWUgZmllbGRzIGZvcndhcmQgYW5kIGJhY2t3YXJkLiBBIGNvbG9uIHR5cGVkIGluIHRo
ZSBuYW1lIGZpZWxkCisgICAgICAgIGFuZCBhIHNlbWljb2xvbiBpbiB0aGUgdmFsdWUgZmllbGQg
KHVubGVzcyBmb3VuZCBpbnNpZGUgYSBzdHJpbmcpIGFjdCBhcyBhIFRhYiBhbmQgZm9jdXMKKyAg
ICAgICAgdGhlIG5leHQgZWRpdGFibGUgZmllbGQgKHdoaWxlIGFwcGx5aW5nIHRoZSBlbnRpcmUg
cHJvcGVydHkgdmFsdWUuKSBPbmNlIGEgcnVsZSBib3VuZGFyeQorICAgICAgICBpcyByZWFjaGVk
LCB0aGUgZWRpdGluZyBzdGFydHMgZm9yIHRoZSBuZXh0IHJ1bGUgc2VsZWN0b3IvcHJldmlvdXMg
c3R5bGUgYmxhbmsgcHJvcGVydHkuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0Jy
ZWFrcG9pbnRzU2lkZWJhclBhbmUuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuWEhSQnJlYWtw
b2ludHNTaWRlYmFyUGFuZS5wcm90b3R5cGUuX3N0YXJ0RWRpdGluZ0JyZWFrcG9pbnQpOgorICAg
ICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRGF0YUdyaWQuanM6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuRGF0YUdyaWQucHJvdG90eXBlLl9zdGFydEVkaXRpbmdDb2x1bW5PZkRhdGFHcmlkTm9k
ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRGF0YUdyaWQucHJvdG90eXBlLl9zdGFydEVkaXRp
bmcpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNUcmVlT3V0bGluZS5q
czoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZS5f
c3RhcnRFZGl0aW5nQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1Ry
ZWVFbGVtZW50LnByb3RvdHlwZS5fc3RhcnRFZGl0aW5nVGV4dE5vZGUpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBlLl9zdGFydEVkaXRpbmdUYWdO
YW1lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlw
ZS5fc3RhcnRFZGl0aW5nQXNIVE1MKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL01l
dHJpY3NTaWRlYmFyUGFuZS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5NZXRyaWNzU2lkZWJh
clBhbmUucHJvdG90eXBlLnN0YXJ0RWRpdGluZyk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250
LWVuZC9PYmplY3RQcm9wZXJ0aWVzU2VjdGlvbi5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5P
YmplY3RQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZS5zdGFydEVkaXRpbmcpOgorICAgICAg
ICAqIGluc3BlY3Rvci9mcm9udC1lbmQvU2VjdGlvbi5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5TZWN0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TZWN0aW9uLnByb3RvdHlwZS5nZXQg
c3VidGl0bGVBc1RleHRGb3JUZXN0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TZWN0aW9uLnBy
b3RvdHlwZS5nZXQgbmV4dFNpYmxpbmcpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNlY3Rpb24u
cHJvdG90eXBlLmdldCBwcmV2aW91c1NpYmxpbmcpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9u
dC1lbmQvU291cmNlRnJhbWUuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUu
cHJvdG90eXBlLl9lZGl0QnJlYWtwb2ludENvbmRpdGlvbik6CisgICAgICAgICogaW5zcGVjdG9y
L2Zyb250LWVuZC9TdHlsZXNTaWRlYmFyUGFuZS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5T
dHlsZVByb3BlcnRpZXNTZWN0aW9uLnByb3RvdHlwZS5uZXh0RWRpdGFibGVTaWJsaW5nKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnRpZXNTZWN0aW9uLnByb3RvdHlwZS5wcmV2
aW91c0VkaXRhYmxlU2libGluZyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0
aWVzU2VjdGlvbi5wcm90b3R5cGUuYWRkTmV3QmxhbmtQcm9wZXJ0eSk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuU3R5bGVQcm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGUuc3RhcnRFZGl0aW5nU2Vs
ZWN0b3IpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydGllc1NlY3Rpb24ucHJv
dG90eXBlLmVkaXRpbmdTZWxlY3RvckNvbW1pdHRlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
U3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZS4pOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9mcm9udC1lbmQvVGV4dFZpZXdlci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0
Vmlld2VyLnByb3RvdHlwZS5faGFuZGxlRG91YmxlQ2xpY2spOgorICAgICAgICAqIGluc3BlY3Rv
ci9mcm9udC1lbmQvV2F0Y2hFeHByZXNzaW9uc1NpZGViYXJQYW5lLmpzOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLldhdGNoRXhwcmVzc2lvblRyZWVFbGVtZW50LnByb3RvdHlwZS5zdGFydEVkaXRp
bmcpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmNzczoKKyAgICAg
ICAgKC5jaGlsZC1lZGl0aW5nKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2luc3Bl
Y3Rvci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5zdGFydEVkaXRpbmcuZGVmYXVsdEZpbmlz
aEhhbmRsZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLnN0YXJ0RWRpdGluZyk6CisgICAgICAg
ICogaW5zcGVjdG9yL2Zyb250LWVuZC90cmVlb3V0bGluZS5qczoKKyAgICAgICAgKFRyZWVFbGVt
ZW50LnByb3RvdHlwZS5zZWxlY3QpOgorCiAyMDEwLTEyLTA4ICBZdXRhIEtpdGFtdXJhICA8eXV0
YWtAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI3MzQ5
Mi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50c1Np
ZGViYXJQYW5lLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRzU2lk
ZWJhclBhbmUuanMKaW5kZXggNDcxOTRkYS4uZTVkZGIwYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRzU2lkZWJhclBhbmUuanMKKysrIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRzU2lkZWJhclBhbmUuanMKQEAgLTE0NSw3
ICsxNDUsNyBAQCBXZWJJbnNwZWN0b3IuWEhSQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5wcm90b3R5
cGUgPSB7CiAKICAgICAgICAgdmFyIGNvbW1pdEhhbmRsZXIgPSB0aGlzLl9oaWRlRWRpdEJyZWFr
cG9pbnREaWFsb2cuYmluZCh0aGlzLCBpbnB1dEVsZW1lbnQsIHRydWUsIGJyZWFrcG9pbnRJdGVt
KTsKICAgICAgICAgdmFyIGNhbmNlbEhhbmRsZXIgPSB0aGlzLl9oaWRlRWRpdEJyZWFrcG9pbnRE
aWFsb2cuYmluZCh0aGlzLCBpbnB1dEVsZW1lbnQsIGZhbHNlLCBicmVha3BvaW50SXRlbSk7Ci0g
ICAgICAgIFdlYkluc3BlY3Rvci5zdGFydEVkaXRpbmcoaW5wdXRFbGVtZW50LCBjb21taXRIYW5k
bGVyLCBjYW5jZWxIYW5kbGVyKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLnN0YXJ0RWRpdGluZyhp
bnB1dEVsZW1lbnQsIHsgY29tbWl0SGFuZGxlcjogY29tbWl0SGFuZGxlciwgY2FuY2VsSGFuZGxl
cjogY2FuY2VsSGFuZGxlciB9KTsKICAgICB9LAogCiAgICAgX2hpZGVFZGl0QnJlYWtwb2ludERp
YWxvZzogZnVuY3Rpb24oaW5wdXRFbGVtZW50LCBhY2NlcHQsIGJyZWFrcG9pbnRJdGVtKQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RhdGFHcmlkLmpzIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RhdGFHcmlkLmpzCmluZGV4IDkwMjA2MmMuLjRhNTFhYzMg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EYXRhR3JpZC5qcworKysg
Yi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGF0YUdyaWQuanMKQEAgLTE2OSw3ICsxNjks
NyBAQCBXZWJJbnNwZWN0b3IuRGF0YUdyaWQucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9l
ZGl0aW5nTm9kZS5zZWxlY3QoKTsKIAogICAgICAgICB2YXIgZWxlbWVudCA9IHRoaXMuX2VkaXRp
bmdOb2RlLl9lbGVtZW50LmNoaWxkcmVuW2NvbHVtbl07Ci0gICAgICAgIFdlYkluc3BlY3Rvci5z
dGFydEVkaXRpbmcoZWxlbWVudCwgdGhpcy5fZWRpdGluZ0NvbW1pdHRlZC5iaW5kKHRoaXMpLCB0
aGlzLl9lZGl0aW5nQ2FuY2VsbGVkLmJpbmQodGhpcyksIGVsZW1lbnQudGV4dENvbnRlbnQpOwor
ICAgICAgICBXZWJJbnNwZWN0b3Iuc3RhcnRFZGl0aW5nKGVsZW1lbnQsIHsgY29tbWl0SGFuZGxl
cjogdGhpcy5fZWRpdGluZ0NvbW1pdHRlZC5iaW5kKHRoaXMpLCBjYW5jZWxIYW5kbGVyOiB0aGlz
Ll9lZGl0aW5nQ2FuY2VsbGVkLmJpbmQodGhpcykgfSwgZWxlbWVudC50ZXh0Q29udGVudCk7CiAg
ICAgICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5zZXRCYXNlQW5kRXh0ZW50KGVsZW1lbnQsIDAs
IGVsZW1lbnQsIDEpOwogICAgIH0sCiAKQEAgLTE5MSw3ICsxOTEsNyBAQCBXZWJJbnNwZWN0b3Iu
RGF0YUdyaWQucHJvdG90eXBlID0gewogICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0RWRp
dGluZ0NvbHVtbk9mRGF0YUdyaWROb2RlKHRoaXMuX2VkaXRpbmdOb2RlLCAwKTsKIAogICAgICAg
ICB0aGlzLl9lZGl0aW5nID0gdHJ1ZTsKLSAgICAgICAgV2ViSW5zcGVjdG9yLnN0YXJ0RWRpdGlu
ZyhlbGVtZW50LCB0aGlzLl9lZGl0aW5nQ29tbWl0dGVkLmJpbmQodGhpcyksIHRoaXMuX2VkaXRp
bmdDYW5jZWxsZWQuYmluZCh0aGlzKSwgZWxlbWVudC50ZXh0Q29udGVudCk7CisgICAgICAgIFdl
Ykluc3BlY3Rvci5zdGFydEVkaXRpbmcoZWxlbWVudCwgeyBjb21taXRIYW5kbGVyOiB0aGlzLl9l
ZGl0aW5nQ29tbWl0dGVkLmJpbmQodGhpcyksIGNhbmNlbEhhbmRsZXI6IHRoaXMuX2VkaXRpbmdD
YW5jZWxsZWQuYmluZCh0aGlzKSB9LCBlbGVtZW50LnRleHRDb250ZW50KTsKICAgICAgICAgd2lu
ZG93LmdldFNlbGVjdGlvbigpLnNldEJhc2VBbmRFeHRlbnQoZWxlbWVudCwgMCwgZWxlbWVudCwg
MSk7CiAgICAgfSwKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0Vs
ZW1lbnRzVHJlZU91dGxpbmUuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVu
dHNUcmVlT3V0bGluZS5qcwppbmRleCAwMmE3OTExLi4yMjhmNzI0IDEwMDY0NAotLS0gYS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNUcmVlT3V0bGluZS5qcworKysgYi9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNUcmVlT3V0bGluZS5qcwpAQCAtODcyLDcg
Kzg3Miw3IEBAIFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsK
ICAgICAgICAgLy8gUmVtb3ZlIHplcm8td2lkdGggc3BhY2VzIHRoYXQgd2VyZSBhZGRlZCBieSBu
b2RlVGl0bGVJbmZvLgogICAgICAgICByZW1vdmVaZXJvV2lkdGhTcGFjZVJlY3Vyc2l2ZShhdHRy
aWJ1dGUpOwogCi0gICAgICAgIHRoaXMuX2VkaXRpbmcgPSBXZWJJbnNwZWN0b3Iuc3RhcnRFZGl0
aW5nKGF0dHJpYnV0ZSwgdGhpcy5fYXR0cmlidXRlRWRpdGluZ0NvbW1pdHRlZC5iaW5kKHRoaXMp
LCB0aGlzLl9lZGl0aW5nQ2FuY2VsbGVkLmJpbmQodGhpcyksIGF0dHJpYnV0ZU5hbWUpOworICAg
ICAgICB0aGlzLl9lZGl0aW5nID0gV2ViSW5zcGVjdG9yLnN0YXJ0RWRpdGluZyhhdHRyaWJ1dGUs
IHsgY29tbWl0SGFuZGxlcjogdGhpcy5fYXR0cmlidXRlRWRpdGluZ0NvbW1pdHRlZC5iaW5kKHRo
aXMpLCBjYW5jZWxIYW5kbGVyOiB0aGlzLl9lZGl0aW5nQ2FuY2VsbGVkLmJpbmQodGhpcykgfSwg
YXR0cmlidXRlTmFtZSk7CiAgICAgICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5zZXRCYXNlQW5k
RXh0ZW50KGVsZW1lbnRGb3JTZWxlY3Rpb24sIDAsIGVsZW1lbnRGb3JTZWxlY3Rpb24sIDEpOwog
CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtODgzLDcgKzg4Myw3IEBAIFdlYkluc3BlY3Rvci5F
bGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgaWYgKFdlYkluc3BlY3Rv
ci5pc0JlaW5nRWRpdGVkKHRleHROb2RlKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCi0g
ICAgICAgIHRoaXMuX2VkaXRpbmcgPSBXZWJJbnNwZWN0b3Iuc3RhcnRFZGl0aW5nKHRleHROb2Rl
LCB0aGlzLl90ZXh0Tm9kZUVkaXRpbmdDb21taXR0ZWQuYmluZCh0aGlzKSwgdGhpcy5fZWRpdGlu
Z0NhbmNlbGxlZC5iaW5kKHRoaXMpKTsKKyAgICAgICAgdGhpcy5fZWRpdGluZyA9IFdlYkluc3Bl
Y3Rvci5zdGFydEVkaXRpbmcodGV4dE5vZGUsIHsgY29tbWl0SGFuZGxlcjogdGhpcy5fdGV4dE5v
ZGVFZGl0aW5nQ29tbWl0dGVkLmJpbmQodGhpcyksIGNhbmNlbEhhbmRsZXI6IHRoaXMuX2VkaXRp
bmdDYW5jZWxsZWQuYmluZCh0aGlzKSB9LCBudWxsKTsKICAgICAgICAgd2luZG93LmdldFNlbGVj
dGlvbigpLnNldEJhc2VBbmRFeHRlbnQodGV4dE5vZGUsIDAsIHRleHROb2RlLCAxKTsKIAogICAg
ICAgICByZXR1cm4gdHJ1ZTsKQEAgLTkyNiw3ICs5MjYsNyBAQCBXZWJJbnNwZWN0b3IuRWxlbWVu
dHNUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgdGFnTmFtZUVsZW1lbnQuYWRk
RXZlbnRMaXN0ZW5lcigna2V5dXAnLCBrZXl1cExpc3RlbmVyLCBmYWxzZSk7CiAKLSAgICAgICAg
dGhpcy5fZWRpdGluZyA9IFdlYkluc3BlY3Rvci5zdGFydEVkaXRpbmcodGFnTmFtZUVsZW1lbnQs
IGVkaXRpbmdDb21pdHRlZC5iaW5kKHRoaXMpLCBlZGl0aW5nQ2FuY2VsbGVkLmJpbmQodGhpcyks
IHRhZ05hbWUpOworICAgICAgICB0aGlzLl9lZGl0aW5nID0gV2ViSW5zcGVjdG9yLnN0YXJ0RWRp
dGluZyh0YWdOYW1lRWxlbWVudCwgeyBjb21taXRIYW5kbGVyOiBlZGl0aW5nQ29taXR0ZWQuYmlu
ZCh0aGlzKSwgY2FuY2VsSGFuZGxlcjogZWRpdGluZ0NhbmNlbGxlZC5iaW5kKHRoaXMpIH0sIHRh
Z05hbWUpOwogICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuc2V0QmFzZUFuZEV4dGVudCh0
YWdOYW1lRWxlbWVudCwgMCwgdGFnTmFtZUVsZW1lbnQsIDEpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9LApAQCAtOTgwLDcgKzk4MCw3IEBAIFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVF
bGVtZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKCk7
CiAgICAgICAgIH0KIAotICAgICAgICB0aGlzLl9lZGl0aW5nID0gV2ViSW5zcGVjdG9yLnN0YXJ0
RWRpdGluZyh0aGlzLl9odG1sRWRpdEVsZW1lbnQsIGNvbW1pdC5iaW5kKHRoaXMpLCBkaXNwb3Nl
LmJpbmQodGhpcyksIG51bGwsIHRydWUpOworICAgICAgICB0aGlzLl9lZGl0aW5nID0gV2ViSW5z
cGVjdG9yLnN0YXJ0RWRpdGluZyh0aGlzLl9odG1sRWRpdEVsZW1lbnQsIHsgY29tbWl0SGFuZGxl
cjogY29tbWl0LmJpbmQodGhpcyksIGNhbmNlbEhhbmRsZXI6IGRpc3Bvc2UuYmluZCh0aGlzKSwg
bXVsdGlsaW5lOiB0cnVlIH0sIG51bGwpOwogICAgIH0sCiAKICAgICBfYXR0cmlidXRlRWRpdGlu
Z0NvbW1pdHRlZDogZnVuY3Rpb24oZWxlbWVudCwgbmV3VGV4dCwgb2xkVGV4dCwgYXR0cmlidXRl
TmFtZSwgbW92ZURpcmVjdGlvbikKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9NZXRyaWNzU2lkZWJhclBhbmUuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
TWV0cmljc1NpZGViYXJQYW5lLmpzCmluZGV4IDM3ODRjZTguLjU2MGU0OTUgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9NZXRyaWNzU2lkZWJhclBhbmUuanMKKysrIGIv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL01ldHJpY3NTaWRlYmFyUGFuZS5qcwpAQCAtMTc1
LDcgKzE3NSw3IEBAIFdlYkluc3BlY3Rvci5NZXRyaWNzU2lkZWJhclBhbmUucHJvdG90eXBlID0g
ewogCiAgICAgICAgIHZhciBjb250ZXh0ID0geyBib3g6IGJveCwgc3R5bGVQcm9wZXJ0eTogc3R5
bGVQcm9wZXJ0eSB9OwogCi0gICAgICAgIFdlYkluc3BlY3Rvci5zdGFydEVkaXRpbmcodGFyZ2V0
RWxlbWVudCwgdGhpcy5lZGl0aW5nQ29tbWl0dGVkLmJpbmQodGhpcyksIHRoaXMuZWRpdGluZ0Nh
bmNlbGxlZC5iaW5kKHRoaXMpLCBjb250ZXh0KTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLnN0YXJ0
RWRpdGluZyh0YXJnZXRFbGVtZW50LCB7IGNvbW1pdEhhbmRsZXI6IHRoaXMuZWRpdGluZ0NvbW1p
dHRlZC5iaW5kKHRoaXMpLCBjYW5jZWxIYW5kbGVyOiB0aGlzLmVkaXRpbmdDYW5jZWxsZWQuYmlu
ZCh0aGlzKSB9LCBjb250ZXh0KTsKICAgICB9LAogCiAgICAgZWRpdGluZ0NhbmNlbGxlZDogZnVu
Y3Rpb24oZWxlbWVudCwgY29udGV4dCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9PYmplY3RQcm9wZXJ0aWVzU2VjdGlvbi5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9PYmplY3RQcm9wZXJ0aWVzU2VjdGlvbi5qcwppbmRleCA2NGUyMTRmLi40MGFhYmI1
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvT2JqZWN0UHJvcGVydGll
c1NlY3Rpb24uanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL09iamVjdFByb3Bl
cnRpZXNTZWN0aW9uLmpzCkBAIC0yMzgsNyArMjM4LDcgQEAgV2ViSW5zcGVjdG9yLk9iamVjdFBy
b3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlID0gewogCiAgICAgICAgIHRoaXMubGlzdEl0ZW1F
bGVtZW50LmFkZFN0eWxlQ2xhc3MoImVkaXRpbmctc3ViLXBhcnQiKTsKIAotICAgICAgICBXZWJJ
bnNwZWN0b3Iuc3RhcnRFZGl0aW5nKHRoaXMudmFsdWVFbGVtZW50LCB0aGlzLmVkaXRpbmdDb21t
aXR0ZWQuYmluZCh0aGlzKSwgdGhpcy5lZGl0aW5nQ2FuY2VsbGVkLmJpbmQodGhpcyksIGNvbnRl
eHQpOworICAgICAgICBXZWJJbnNwZWN0b3Iuc3RhcnRFZGl0aW5nKHRoaXMudmFsdWVFbGVtZW50
LCB7IGNvbW1pdEhhbmRsZXI6IHRoaXMuZWRpdGluZ0NvbW1pdHRlZC5iaW5kKHRoaXMpLCBjYW5j
ZWxIYW5kbGVyOiB0aGlzLmVkaXRpbmdDYW5jZWxsZWQuYmluZCh0aGlzKSB9LCBjb250ZXh0KTsK
ICAgICB9LAogCiAgICAgZWRpdGluZ0VuZGVkOiBmdW5jdGlvbihjb250ZXh0KQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NlY3Rpb24uanMgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvU2VjdGlvbi5qcwppbmRleCBhMTg2ZDQzLi41Y2FhNzhiIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2VjdGlvbi5qcworKysgYi9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvU2VjdGlvbi5qcwpAQCAtMzEsNyArMzEsNyBAQCBXZWJJbnNw
ZWN0b3IuU2VjdGlvbiA9IGZ1bmN0aW9uKHRpdGxlLCBzdWJ0aXRsZSkKIHsKICAgICB0aGlzLmVs
ZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICB0aGlzLmVsZW1lbnQu
Y2xhc3NOYW1lID0gInNlY3Rpb24iOwotICAgIHRoaXMuZWxlbWVudC5zZWN0aW9uRm9yVGVzdCA9
IHRoaXM7CisgICAgdGhpcy5lbGVtZW50Ll9zZWN0aW9uID0gdGhpczsKIAogICAgIHRoaXMuaGVh
ZGVyRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgIHRoaXMuaGVh
ZGVyRWxlbWVudC5jbGFzc05hbWUgPSAiaGVhZGVyIjsKQEAgLTg1LDE1ICs4NSwxNSBAQCBXZWJJ
bnNwZWN0b3IuU2VjdGlvbi5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuc3VidGl0bGVFbGVt
ZW50LnRleHRDb250ZW50ID0geDsKICAgICB9LAogCi0gICAgZ2V0IHN1YnRpdGxlQXNUZXh0Rm9y
VGVzdCgpDQotICAgIHsNCi0gICAgICAgIHZhciByZXN1bHQgPSB0aGlzLnN1YnRpdGxlRWxlbWVu
dC50ZXh0Q29udGVudDsNCi0gICAgICAgIHZhciBjaGlsZCA9IHRoaXMuc3VidGl0bGVFbGVtZW50
LnF1ZXJ5U2VsZWN0b3IoIltkYXRhLXVuY29weWFibGVdIik7DQotICAgICAgICBpZiAoY2hpbGQp
IHsNCi0gICAgICAgICAgICB2YXIgbGlua0RhdGEgPSBjaGlsZC5nZXRBdHRyaWJ1dGUoImRhdGEt
dW5jb3B5YWJsZSIpOw0KLSAgICAgICAgICAgIGlmIChsaW5rRGF0YSkNCi0gICAgICAgICAgICAg
ICAgcmVzdWx0ICs9IGxpbmtEYXRhOw0KLSAgICAgICAgfQ0KKyAgICBnZXQgc3VidGl0bGVBc1Rl
eHRGb3JUZXN0KCkKKyAgICB7CisgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLnN1YnRpdGxlRWxl
bWVudC50ZXh0Q29udGVudDsKKyAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5zdWJ0aXRsZUVsZW1l
bnQucXVlcnlTZWxlY3RvcigiW2RhdGEtdW5jb3B5YWJsZV0iKTsKKyAgICAgICAgaWYgKGNoaWxk
KSB7CisgICAgICAgICAgICB2YXIgbGlua0RhdGEgPSBjaGlsZC5nZXRBdHRyaWJ1dGUoImRhdGEt
dW5jb3B5YWJsZSIpOworICAgICAgICAgICAgaWYgKGxpbmtEYXRhKQorICAgICAgICAgICAgICAg
IHJlc3VsdCArPSBsaW5rRGF0YTsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgIH0sCiAKQEAgLTEyNCw2ICsxMjQsMjYgQEAgV2ViSW5zcGVjdG9yLlNlY3Rpb24ucHJvdG90
eXBlID0gewogICAgICAgICB9CiAgICAgfSwKIAorICAgIGdldCBuZXh0U2libGluZygpCisgICAg
eworICAgICAgICB2YXIgY3VyRWxlbWVudCA9IHRoaXMuZWxlbWVudDsKKyAgICAgICAgZG8gewor
ICAgICAgICAgICAgY3VyRWxlbWVudCA9IGN1ckVsZW1lbnQubmV4dFNpYmxpbmc7CisgICAgICAg
IH0gd2hpbGUgKGN1ckVsZW1lbnQgJiYgIWN1ckVsZW1lbnQuX3NlY3Rpb24pOworCisgICAgICAg
IHJldHVybiBjdXJFbGVtZW50ID8gY3VyRWxlbWVudC5fc2VjdGlvbiA6IG51bGw7CisgICAgfSwK
KworICAgIGdldCBwcmV2aW91c1NpYmxpbmcoKQorICAgIHsKKyAgICAgICAgdmFyIGN1ckVsZW1l
bnQgPSB0aGlzLmVsZW1lbnQ7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGN1ckVsZW1lbnQg
PSBjdXJFbGVtZW50LnByZXZpb3VzU2libGluZzsKKyAgICAgICAgfSB3aGlsZSAoY3VyRWxlbWVu
dCAmJiAhY3VyRWxlbWVudC5fc2VjdGlvbik7CisKKyAgICAgICAgcmV0dXJuIGN1ckVsZW1lbnQg
PyBjdXJFbGVtZW50Ll9zZWN0aW9uIDogbnVsbDsKKyAgICB9LAorCiAgICAgZXhwYW5kOiBmdW5j
dGlvbigpCiAgICAgewogICAgICAgICBpZiAodGhpcy5fZXhwYW5kZWQpCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanMgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanMKaW5kZXggOGUwNzdjZC4uMjQzYTI1NCAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpzCisrKyBi
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qcwpAQCAtNzE5LDcgKzcx
OSw3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHZh
ciBkaXNtaXNzZWRIYW5kbGVyID0gZGlzbWlzc2VkLmJpbmQodGhpcyk7CiAgICAgICAgIHRoaXMu
X2NvbmRpdGlvbkVkaXRvckVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsIGRpc21pc3Nl
ZEhhbmRsZXIsIGZhbHNlKTsKIAotICAgICAgICBXZWJJbnNwZWN0b3Iuc3RhcnRFZGl0aW5nKHRo
aXMuX2NvbmRpdGlvbkVkaXRvckVsZW1lbnQsIGNvbW1pdHRlZC5iaW5kKHRoaXMpLCBkaXNtaXNz
ZWRIYW5kbGVyKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLnN0YXJ0RWRpdGluZyh0aGlzLl9jb25k
aXRpb25FZGl0b3JFbGVtZW50LCB7IGNvbW1pdEhhbmRsZXI6IGNvbW1pdHRlZC5iaW5kKHRoaXMp
LCBjYW5jZWxIYW5kbGVyOiBkaXNtaXNzZWRIYW5kbGVyIH0sIG51bGwpOwogICAgICAgICB0aGlz
Ll9jb25kaXRpb25FZGl0b3JFbGVtZW50LnZhbHVlID0gYnJlYWtwb2ludC5jb25kaXRpb247CiAg
ICAgICAgIHRoaXMuX2NvbmRpdGlvbkVkaXRvckVsZW1lbnQuc2VsZWN0KCk7CiAgICAgfSwKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TdHlsZXNTaWRlYmFyUGFuZS5q
cyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TdHlsZXNTaWRlYmFyUGFuZS5qcwppbmRl
eCBkYjcyNDg2Li4xYTljMWYyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvU3R5bGVzU2lkZWJhclBhbmUuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1N0eWxlc1NpZGViYXJQYW5lLmpzCkBAIC03MDQsNiArNzA0LDI2IEBAIFdlYkluc3BlY3Rvci5T
dHlsZVByb3BlcnRpZXNTZWN0aW9uLnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfSwKIAorICAgIG5leHRFZGl0YWJsZVNpYmxpbmc6IGZ1bmN0aW9uKCkKKyAgICB7Cisg
ICAgICAgIHZhciBjdXJTZWN0aW9uID0gdGhpczsKKyAgICAgICAgZG8geworICAgICAgICAgICAg
Y3VyU2VjdGlvbiA9IGN1clNlY3Rpb24ubmV4dFNpYmxpbmc7CisgICAgICAgIH0gd2hpbGUgKGN1
clNlY3Rpb24gJiYgIWN1clNlY3Rpb24uZWRpdGFibGUpOworCisgICAgICAgIHJldHVybiBjdXJT
ZWN0aW9uOworICAgIH0sCisKKyAgICBwcmV2aW91c0VkaXRhYmxlU2libGluZzogZnVuY3Rpb24o
KQorICAgIHsKKyAgICAgICAgdmFyIGN1clNlY3Rpb24gPSB0aGlzOworICAgICAgICBkbyB7Cisg
ICAgICAgICAgICBjdXJTZWN0aW9uID0gY3VyU2VjdGlvbi5wcmV2aW91c1NpYmxpbmc7CisgICAg
ICAgIH0gd2hpbGUgKGN1clNlY3Rpb24gJiYgIWN1clNlY3Rpb24uZWRpdGFibGUpOworCisgICAg
ICAgIHJldHVybiBjdXJTZWN0aW9uOworICAgIH0sCisKICAgICB1cGRhdGU6IGZ1bmN0aW9uKGZ1
bGwpCiAgICAgewogICAgICAgICBpZiAoZnVsbCkgewpAQCAtNzk1LDYgKzgxNSw3IEBAIFdlYklu
c3BlY3Rvci5TdHlsZVByb3BlcnRpZXNTZWN0aW9uLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhp
cy5wcm9wZXJ0aWVzVHJlZU91dGxpbmUuYXBwZW5kQ2hpbGQoaXRlbSk7CiAgICAgICAgIGl0ZW0u
bGlzdEl0ZW1FbGVtZW50LnRleHRDb250ZW50ID0gIiI7CiAgICAgICAgIGl0ZW0uX25ld1Byb3Bl
cnR5ID0gdHJ1ZTsKKyAgICAgICAgaXRlbS51cGRhdGVUaXRsZSgpOwogICAgICAgICByZXR1cm4g
aXRlbTsKICAgICB9LAogCkBAIC04NzUsMjIgKzg5NiwzMSBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQ
cm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmIChXZWJJbnNwZWN0b3Iu
aXNCZWluZ0VkaXRlZChlbGVtZW50KSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBX
ZWJJbnNwZWN0b3Iuc3RhcnRFZGl0aW5nKHRoaXMuX3NlbGVjdG9yRWxlbWVudCwgdGhpcy5lZGl0
aW5nU2VsZWN0b3JDb21taXR0ZWQuYmluZCh0aGlzKSwgdGhpcy5lZGl0aW5nU2VsZWN0b3JDYW5j
ZWxsZWQuYmluZCh0aGlzKSwgbnVsbCk7CisgICAgICAgIFdlYkluc3BlY3Rvci5zdGFydEVkaXRp
bmcodGhpcy5fc2VsZWN0b3JFbGVtZW50LCB7IGNvbW1pdEhhbmRsZXI6IHRoaXMuZWRpdGluZ1Nl
bGVjdG9yQ29tbWl0dGVkLmJpbmQodGhpcyksIGNhbmNlbEhhbmRsZXI6IHRoaXMuZWRpdGluZ1Nl
bGVjdG9yQ2FuY2VsbGVkLmJpbmQodGhpcykgfSwgbnVsbCk7CiAgICAgICAgIHdpbmRvdy5nZXRT
ZWxlY3Rpb24oKS5zZXRCYXNlQW5kRXh0ZW50KGVsZW1lbnQsIDAsIGVsZW1lbnQsIDEpOwogICAg
IH0sCiAKICAgICBlZGl0aW5nU2VsZWN0b3JDb21taXR0ZWQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5l
d0NvbnRlbnQsIG9sZENvbnRlbnQsIGNvbnRleHQsIG1vdmVEaXJlY3Rpb24pCiAgICAgewogICAg
ICAgICBmdW5jdGlvbiBtb3ZlVG9OZXh0SWZOZWVkZWQoKSB7Ci0gICAgICAgICAgICBpZiAoIW1v
dmVEaXJlY3Rpb24gfHwgbW92ZURpcmVjdGlvbiAhPT0gImZvcndhcmQiKQorICAgICAgICAgICAg
aWYgKCFtb3ZlRGlyZWN0aW9uKQogICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAg
ICAgdGhpcy5leHBhbmQoKTsKLSAgICAgICAgICAgIGlmICh0aGlzLnByb3BlcnRpZXNUcmVlT3V0
bGluZS5jaGlsZHJlbi5sZW5ndGggPT09IDApCi0gICAgICAgICAgICAgICAgdGhpcy5hZGROZXdC
bGFua1Byb3BlcnR5KCkuc3RhcnRFZGl0aW5nKCk7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgICAgICB2YXIgaXRlbSA9IHRoaXMucHJvcGVydGllc1RyZWVPdXRsaW5lLmNoaWxkcmVu
WzBdCi0gICAgICAgICAgICAgICAgaXRlbS5zdGFydEVkaXRpbmcoaXRlbS52YWx1ZUVsZW1lbnQp
OworICAgICAgICAgICAgaWYgKG1vdmVEaXJlY3Rpb24gPT09ICJmb3J3YXJkIikgeworICAgICAg
ICAgICAgICAgIHRoaXMuZXhwYW5kKCk7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMucHJvcGVy
dGllc1RyZWVPdXRsaW5lLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkKKyAgICAgICAgICAgICAgICAg
ICAgdGhpcy5hZGROZXdCbGFua1Byb3BlcnR5KCkuc3RhcnRFZGl0aW5nKCk7CisgICAgICAgICAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBpdGVtID0gdGhpcy5wcm9wZXJ0
aWVzVHJlZU91dGxpbmUuY2hpbGRyZW5bMF0KKyAgICAgICAgICAgICAgICAgICAgaXRlbS5zdGFy
dEVkaXRpbmcoaXRlbS5uYW1lRWxlbWVudCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YXIgcHJldmlvdXNTZWN0aW9uID0gdGhpcy5w
cmV2aW91c0VkaXRhYmxlU2libGluZygpOworICAgICAgICAgICAgICAgIGlmICghcHJldmlvdXNT
ZWN0aW9uKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgICAgICBw
cmV2aW91c1NlY3Rpb24uZXhwYW5kKCk7CisgICAgICAgICAgICAgICAgcHJldmlvdXNTZWN0aW9u
LmFkZE5ld0JsYW5rUHJvcGVydHkoKS5zdGFydEVkaXRpbmcoKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogCkBAIC0xMzQ2LDggKzEzNzYsMTEgQEAgV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVy
dHlUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMubGlzdEl0ZW1FbGVtZW50
LmFwcGVuZENoaWxkKHZhbHVlRWxlbWVudCk7CiAgICAgICAgIHRoaXMubGlzdEl0ZW1FbGVtZW50
LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCI7IikpOwogCi0gICAgICAgIGlm
ICghdGhpcy5wYXJzZWRPaykKKyAgICAgICAgaWYgKCF0aGlzLnBhcnNlZE9rKSB7CisgICAgICAg
ICAgICAvLyBBdm9pZCBoYXZpbmcgbG9uZ2hhbmRzIHVuZGVyIGFuIGludmFsaWQgc2hvcnRoYW5k
LgorICAgICAgICAgICAgdGhpcy5oYXNDaGlsZHJlbiA9IGZhbHNlOwogICAgICAgICAgICAgdGhp
cy5saXN0SXRlbUVsZW1lbnQuYWRkU3R5bGVDbGFzcygibm90LXBhcnNlZC1vayIpOworICAgICAg
ICB9CiAgICAgICAgIGlmICh0aGlzLnByb3BlcnR5LmluYWN0aXZlKQogICAgICAgICAgICAgdGhp
cy5saXN0SXRlbUVsZW1lbnQuYWRkU3R5bGVDbGFzcygiaW5hY3RpdmUiKTsKIApAQCAtMTQ2MCw2
MCArMTQ5MywxNDEgQEAgV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5wcm90
b3R5cGUgPSB7CiAgICAgICAgIGlmICh0aGlzLnBhcmVudC5zaG9ydGhhbmQpCiAgICAgICAgICAg
ICByZXR1cm47CiAKLSAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5pc0JlaW5nRWRpdGVkKHRoaXMu
bGlzdEl0ZW1FbGVtZW50KSB8fCAodGhpcy50cmVlT3V0bGluZS5zZWN0aW9uICYmICF0aGlzLnRy
ZWVPdXRsaW5lLnNlY3Rpb24uZWRpdGFibGUpKQorICAgICAgICBpZiAodGhpcy50cmVlT3V0bGlu
ZS5zZWN0aW9uICYmICF0aGlzLnRyZWVPdXRsaW5lLnNlY3Rpb24uZWRpdGFibGUpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKCFzZWxlY3RFbGVtZW50KQorICAgICAgICAgICAg
c2VsZWN0RWxlbWVudCA9IHRoaXMubmFtZUVsZW1lbnQ7IC8vIE5vIGFyZ3VtZW50cyBwYXNzZWQg
aW4gLSBlZGl0IHRoZSBuYW1lIGVsZW1lbnQgYnkgZGVmYXVsdC4KKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgc2VsZWN0RWxlbWVudCA9IHNlbGVjdEVsZW1lbnQuZW5jbG9zaW5nTm9kZU9yU2Vs
ZldpdGhDbGFzcygid2Via2l0LWNzcy1wcm9wZXJ0eSIpIHx8IHNlbGVjdEVsZW1lbnQuZW5jbG9z
aW5nTm9kZU9yU2VsZldpdGhDbGFzcygidmFsdWUiKTsKKworICAgICAgICB2YXIgaXNFZGl0aW5n
TmFtZSA9IHNlbGVjdEVsZW1lbnQgPT09IHRoaXMubmFtZUVsZW1lbnQ7CisgICAgICAgIGlmICgh
aXNFZGl0aW5nTmFtZSAmJiBzZWxlY3RFbGVtZW50ICE9PSB0aGlzLnZhbHVlRWxlbWVudCkgewor
ICAgICAgICAgICAgLy8gRG91YmxlLWNsaWNrIGluIHRoZSBMSSAtIHN0YXJ0IGVkaXRpbmcgdmFs
dWUuCisgICAgICAgICAgICBpc0VkaXRpbmdOYW1lID0gZmFsc2U7CisgICAgICAgICAgICBzZWxl
Y3RFbGVtZW50ID0gdGhpcy52YWx1ZUVsZW1lbnQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
V2ViSW5zcGVjdG9yLmlzQmVpbmdFZGl0ZWQoc2VsZWN0RWxlbWVudCkpCiAgICAgICAgICAgICBy
ZXR1cm47CiAKICAgICAgICAgdmFyIGNvbnRleHQgPSB7CiAgICAgICAgICAgICBleHBhbmRlZDog
dGhpcy5leHBhbmRlZCwKICAgICAgICAgICAgIGhhc0NoaWxkcmVuOiB0aGlzLmhhc0NoaWxkcmVu
LAotICAgICAgICAgICAga2V5RG93bkxpc3RlbmVyOiB0aGlzLmVkaXRpbmdLZXlEb3duLmJpbmQo
dGhpcyksCi0gICAgICAgICAgICBrZXlQcmVzc0xpc3RlbmVyOiB0aGlzLmVkaXRpbmdLZXlQcmVz
cy5iaW5kKHRoaXMpCisgICAgICAgICAgICBrZXlEb3duTGlzdGVuZXI6IGlzRWRpdGluZ05hbWUg
PyB0aGlzLmVkaXRpbmdOYW1lS2V5RG93bi5iaW5kKHRoaXMpIDogdGhpcy5lZGl0aW5nVmFsdWVL
ZXlEb3duLmJpbmQodGhpcyksCisgICAgICAgICAgICBrZXlQcmVzc0xpc3RlbmVyOiBpc0VkaXRp
bmdOYW1lID8gdGhpcy5lZGl0aW5nTmFtZUtleVByZXNzLmJpbmQodGhpcykgOiB0aGlzLmVkaXRp
bmdWYWx1ZUtleVByZXNzLmJpbmQodGhpcyksCisgICAgICAgICAgICBpc0VkaXRpbmdOYW1lOiBp
c0VkaXRpbmdOYW1lLAogICAgICAgICB9OwogCiAgICAgICAgIC8vIExpZSBhYm91dCBvdXIgY2hp
bGRyZW4gdG8gcHJldmVudCBleHBhbmRpbmcgb24gZG91YmxlIGNsaWNrIGFuZCB0byBjb2xsYXBz
ZSBzaG9ydGhhbmRzLgogICAgICAgICB0aGlzLmhhc0NoaWxkcmVuID0gZmFsc2U7CiAKLSAgICAg
ICAgaWYgKCFzZWxlY3RFbGVtZW50KQotICAgICAgICAgICAgc2VsZWN0RWxlbWVudCA9IHRoaXMu
bGlzdEl0ZW1FbGVtZW50OworICAgICAgICBzZWxlY3RFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIo
ImtleWRvd24iLCBjb250ZXh0LmtleURvd25MaXN0ZW5lciwgZmFsc2UpOworICAgICAgICBzZWxl
Y3RFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleXByZXNzIiwgY29udGV4dC5rZXlQcmVzc0xp
c3RlbmVyLCBmYWxzZSk7CisgICAgICAgIGlmIChzZWxlY3RFbGVtZW50LnBhcmVudEVsZW1lbnQp
CisgICAgICAgICAgICBzZWxlY3RFbGVtZW50LnBhcmVudEVsZW1lbnQuYWRkU3R5bGVDbGFzcygi
Y2hpbGQtZWRpdGluZyIpOworICAgICAgICBzZWxlY3RFbGVtZW50LnRleHRDb250ZW50ID0gc2Vs
ZWN0RWxlbWVudC50ZXh0Q29udGVudDsgLy8gcmVtb3ZlIGNvbG9yIHN3YXRjaCBhbmQgdGhlIGxp
a2UKKworICAgICAgICBmdW5jdGlvbiBzaG91bGRDb21taXRWYWx1ZVNlbWljb2xvbih0ZXh0LCBj
dXJzb3JQb3NpdGlvbikKKyAgICAgICAgeworICAgICAgICAgICAgLy8gRklYTUU6IHNob3VsZCB0
aGlzIGFjY291bnQgZm9yIHNlbWljb2xvbnMgaW5zaWRlIGNvbW1lbnRzPworICAgICAgICAgICAg
dmFyIG9wZW5RdW90ZSA9ICIiOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjdXJz
b3JQb3NpdGlvbjsgKytpKSB7CisgICAgICAgICAgICAgICAgdmFyIGNoID0gdGV4dFtpXTsKKyAg
ICAgICAgICAgICAgICBpZiAoY2ggPT09ICJcXCIgJiYgb3BlblF1b3RlICE9PSAiIikKKyAgICAg
ICAgICAgICAgICAgICAgKytpOyAvLyBza2lwIG5leHQgY2hhcmFjdGVyIGluc2lkZSBzdHJpbmcK
KyAgICAgICAgICAgICAgICBlbHNlIGlmICghb3BlblF1b3RlICYmIChjaCA9PT0gIlwiIiB8fCBj
aCA9PT0gIiciKSkKKyAgICAgICAgICAgICAgICAgICAgb3BlblF1b3RlID0gY2g7CisgICAgICAg
ICAgICAgICAgZWxzZSBpZiAob3BlblF1b3RlID09PSBjaCkKKyAgICAgICAgICAgICAgICAgICAg
b3BlblF1b3RlID0gIiI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gIW9wZW5R
dW90ZTsKKyAgICAgICAgfQogCi0gICAgICAgIHRoaXMubGlzdEl0ZW1FbGVtZW50LmFkZEV2ZW50
TGlzdGVuZXIoImtleWRvd24iLCBjb250ZXh0LmtleURvd25MaXN0ZW5lciwgZmFsc2UpOwotICAg
ICAgICB0aGlzLmxpc3RJdGVtRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlwcmVzcyIsIGNv
bnRleHQua2V5UHJlc3NMaXN0ZW5lciwgZmFsc2UpOworICAgICAgICBmdW5jdGlvbiBuYW1lVmFs
dWVGaW5pc2hIYW5kbGVyKGNvbnRleHQsIGlzRWRpdGluZ05hbWUsIGV2ZW50KQorICAgICAgICB7
CisgICAgICAgICAgICAvLyBGSVhNRTogdGhlICI6Ii8iOyIgZGV0ZWN0aW9uIGRvZXMgbm90IHdv
cmsgZm9yIG5vbi1VUyBsYXlvdXRzIGR1ZSB0byB0aGUgZXZlbnQgYmVpbmcga2V5ZG93biByYXRo
ZXIgdGhhbiBrZXlwcmVzcy4KKyAgICAgICAgICAgIHZhciBpc0ZpZWxkSW5wdXRUZXJtaW5hdGVk
ID0gaXNFZGl0aW5nTmFtZSA/IChldmVudC5rZXlJZGVudGlmaWVyID09PSAiVSswMEJBIiAmJiBl
dmVudC5zaGlmdEtleSkgOiAoZXZlbnQua2V5SWRlbnRpZmllciA9PT0gIlUrMDBCQSIgJiYgIWV2
ZW50LnNoaWZ0S2V5ICYmIHNob3VsZENvbW1pdFZhbHVlU2VtaWNvbG9uKGV2ZW50LnRhcmdldC50
ZXh0Q29udGVudCwgZXZlbnQudGFyZ2V0LnNlbGVjdGlvbkxlZnRPZmZzZXQpKTsKKyAgICAgICAg
ICAgIGlmIChpc0VudGVyS2V5KGV2ZW50KSB8fCBpc0ZpZWxkSW5wdXRUZXJtaW5hdGVkKSB7Cisg
ICAgICAgICAgICAgICAgLy8gRW50ZXIgb3IgY29sb24gKGZvciBuYW1lKS9zZW1pY29sb24gb3V0
c2lkZSBvZiBzdHJpbmcgKGZvciB2YWx1ZSkuCisgICAgICAgICAgICAgICAgZXZlbnQucHJldmVu
dERlZmF1bHQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gIm1vdmUtZm9yd2FyZCI7CisgICAg
ICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleUNvZGUgPT09IFdlYkluc3BlY3Rvci5LZXlib2Fy
ZFNob3J0Y3V0LktleXMuRXNjLmNvZGUpCisgICAgICAgICAgICAgICAgcmV0dXJuICJjYW5jZWwi
OworICAgICAgICAgICAgZWxzZSBpZiAoZXZlbnQua2V5SWRlbnRpZmllciA9PT0gIlUrMDAwOSIp
IC8vIFRhYiBrZXkuCisgICAgICAgICAgICAgICAgcmV0dXJuICJtb3ZlLSIgKyAoZXZlbnQuc2hp
ZnRLZXkgPyAiYmFja3dhcmQiIDogImZvcndhcmQiKTsKKyAgICAgICAgfQogCi0gICAgICAgIFdl
Ykluc3BlY3Rvci5zdGFydEVkaXRpbmcodGhpcy5saXN0SXRlbUVsZW1lbnQsIHRoaXMuZWRpdGlu
Z0NvbW1pdHRlZC5iaW5kKHRoaXMpLCB0aGlzLmVkaXRpbmdDYW5jZWxsZWQuYmluZCh0aGlzKSwg
Y29udGV4dCk7CisgICAgICAgIFdlYkluc3BlY3Rvci5zdGFydEVkaXRpbmcoc2VsZWN0RWxlbWVu
dCwKKyAgICAgICAgICAgIHsgY29tbWl0SGFuZGxlcjogdGhpcy5lZGl0aW5nQ29tbWl0dGVkLmJp
bmQodGhpcyksIGNhbmNlbEhhbmRsZXI6IHRoaXMuZWRpdGluZ0NhbmNlbGxlZC5iaW5kKHRoaXMp
LCBjdXN0b21GaW5pc2hIYW5kbGVyOiBuYW1lVmFsdWVGaW5pc2hIYW5kbGVyLmJpbmQodGhpcywg
Y29udGV4dCwgaXNFZGl0aW5nTmFtZSkgfSwgY29udGV4dCk7CiAgICAgICAgIHdpbmRvdy5nZXRT
ZWxlY3Rpb24oKS5zZXRCYXNlQW5kRXh0ZW50KHNlbGVjdEVsZW1lbnQsIDAsIHNlbGVjdEVsZW1l
bnQsIDEpOwogICAgIH0sCiAKLSAgICBlZGl0aW5nS2V5UHJlc3M6IGZ1bmN0aW9uKGV2ZW50KQor
ICAgIGVkaXRpbmdOYW1lS2V5UHJlc3M6IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKLSAgICAgICAg
dmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKLSAgICAgICAgdmFyIGNvbG9u
SW5kZXggPSB0aGlzLmxpc3RJdGVtRWxlbWVudC50ZXh0Q29udGVudC5pbmRleE9mKCI6Iik7Ci0g
ICAgICAgIHZhciBzZWxlY3Rpb25MZWZ0T2Zmc2V0ID0gZXZlbnQudGFyZ2V0LnNlbGVjdGlvbkxl
ZnRPZmZzZXQ7Ci0KLSAgICAgICAgaWYgKGNvbG9uSW5kZXggPCAwIHx8IHNlbGVjdGlvbkxlZnRP
ZmZzZXQgPD0gY29sb25JbmRleCkgewotICAgICAgICAgICAgLy8gQ29tcGxldGUgcHJvcGVydHkg
bmFtZXMuCi0gICAgICAgICAgICB2YXIgY2hhcmFjdGVyID0gZXZlbnQuZGF0YS50b0xvd2VyQ2Fz
ZSgpOwotICAgICAgICAgICAgaWYgKGNoYXJhY3RlciAmJiAvW2Etei1dLy50ZXN0KGNoYXJhY3Rl
cikpIHsKLSAgICAgICAgICAgICAgICB2YXIgcHJlZml4ID0gc2VsZWN0aW9uLmFuY2hvck5vZGUu
dGV4dENvbnRlbnQuc3Vic3RyaW5nKDAsIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQpOwotICAgICAg
ICAgICAgICAgIHZhciBwcm9wZXJ0eSA9IFdlYkluc3BlY3Rvci5DU1NDb21wbGV0aW9ucy5maXJz
dFN0YXJ0c1dpdGgocHJlZml4ICsgY2hhcmFjdGVyKTsKLQotICAgICAgICAgICAgICAgIGlmICgh
c2VsZWN0aW9uLmlzQ29sbGFwc2VkKQotICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24uZGVs
ZXRlRnJvbURvY3VtZW50KCk7Ci0KLSAgICAgICAgICAgICAgICB0aGlzLnJlc3RvcmVOYW1lRWxl
bWVudCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5KSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChwcm9wZXJ0eSAhPT0gdGhpcy5uYW1lRWxlbWVudC50ZXh0Q29udGVudCkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmFtZUVsZW1lbnQudGV4dENvbnRlbnQgPSBwcm9w
ZXJ0eTsKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5uYW1lRWxlbWVudC5maXJzdENoaWxkLnNl
bGVjdChwcmVmaXgubGVuZ3RoICsgMSk7Ci0gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZl
bnREZWZhdWx0KCk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAvLyBDb21wbGV0ZSBwcm9w
ZXJ0eSBuYW1lcy4KKyAgICAgICAgdmFyIGNoYXJhY3RlciA9IGV2ZW50LmRhdGEudG9Mb3dlckNh
c2UoKTsKKyAgICAgICAgaWYgKGNoYXJhY3RlciAmJiAvW2Etei1dLy50ZXN0KGNoYXJhY3Rlcikp
IHsKKyAgICAgICAgICAgIHZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7Cisg
ICAgICAgICAgICB2YXIgcHJlZml4ID0gc2VsZWN0aW9uLmFuY2hvck5vZGUudGV4dENvbnRlbnQu
c3Vic3RyaW5nKDAsIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQpOworICAgICAgICAgICAgdmFyIHBy
b3BlcnR5ID0gV2ViSW5zcGVjdG9yLkNTU0NvbXBsZXRpb25zLmZpcnN0U3RhcnRzV2l0aChwcmVm
aXggKyBjaGFyYWN0ZXIpOworCisgICAgICAgICAgICBpZiAoIXNlbGVjdGlvbi5pc0NvbGxhcHNl
ZCkKKyAgICAgICAgICAgICAgICBzZWxlY3Rpb24uZGVsZXRlRnJvbURvY3VtZW50KCk7CisKKyAg
ICAgICAgICAgIHRoaXMucmVzdG9yZU5hbWVFbGVtZW50KCk7CisKKyAgICAgICAgICAgIGlmIChw
cm9wZXJ0eSkgeworICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eSAhPT0gdGhpcy5uYW1lRWxl
bWVudC50ZXh0Q29udGVudCkKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5uYW1lRWxlbWVudC50
ZXh0Q29udGVudCA9IHByb3BlcnR5OworICAgICAgICAgICAgICAgIHRoaXMubmFtZUVsZW1lbnQu
Zmlyc3RDaGlsZC5zZWxlY3QocHJlZml4Lmxlbmd0aCArIDEpOworICAgICAgICAgICAgICAgIGV2
ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgY29tcGxldGUgcHJvcGVydHkgdmFsdWVz
LgogICAgICAgICB9CiAgICAgfSwKIAotICAgIGVkaXRpbmdLZXlEb3duOiBmdW5jdGlvbihldmVu
dCkKKyAgICBlZGl0aW5nVmFsdWVLZXlQcmVzczogZnVuY3Rpb24oZXZlbnQpCisgICAgeworICAg
ICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgY29tcGxldGUgcHJvcGVydHkgdmFsdWVzLgorICAg
IH0sCisKKyAgICBlZGl0aW5nTmFtZUtleURvd246IGZ1bmN0aW9uKGV2ZW50KQorICAgIHsKKyAg
ICAgICAgdmFyIHNob3dOZXh0OworICAgICAgICBpZiAoZXZlbnQua2V5SWRlbnRpZmllciA9PT0g
IlVwIikKKyAgICAgICAgICAgIHNob3dOZXh0ID0gZmFsc2U7CisgICAgICAgIGVsc2UgaWYgKGV2
ZW50LmtleUlkZW50aWZpZXIgPT09ICJEb3duIikKKyAgICAgICAgICAgIHNob3dOZXh0ID0gdHJ1
ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBzZWxl
Y3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CisgICAgICAgIGlmICghc2VsZWN0aW9uLnJh
bmdlQ291bnQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdmFyIHNlbGVjdGlvblJh
bmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7CisgICAgICAgIGlmIChzZWxlY3Rpb25SYW5n
ZS5jb21tb25BbmNlc3RvckNvbnRhaW5lciAhPT0gdGhpcy5uYW1lRWxlbWVudCAmJiAhc2VsZWN0
aW9uUmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIuaXNEZXNjZW5kYW50KHRoaXMubmFtZUVs
ZW1lbnQpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNvbnN0IHN0eWxlVmFsdWVE
ZWxpbWV0ZXJzID0gIiBcdFxuXCInOjssLygpIjsKKyAgICAgICAgdmFyIHdvcmRSYW5nZSA9IHNl
bGVjdGlvblJhbmdlLnN0YXJ0Q29udGFpbmVyLnJhbmdlT2ZXb3JkKHNlbGVjdGlvblJhbmdlLnN0
YXJ0T2Zmc2V0LCBzdHlsZVZhbHVlRGVsaW1ldGVycywgdGhpcy5uYW1lRWxlbWVudCk7CisgICAg
ICAgIHZhciB3b3JkU3RyaW5nID0gd29yZFJhbmdlLnRvU3RyaW5nKCk7CisgICAgICAgIHZhciBw
cmVmaXggPSBzZWxlY3Rpb25SYW5nZS5zdGFydENvbnRhaW5lci50ZXh0Q29udGVudC5zdWJzdHJp
bmcoMCwgc2VsZWN0aW9uUmFuZ2Uuc3RhcnRPZmZzZXQpOworICAgICAgICB2YXIgcHJvcGVydHk7
CisKKyAgICAgICAgaWYgKHNob3dOZXh0KQorICAgICAgICAgICAgcHJvcGVydHkgPSBXZWJJbnNw
ZWN0b3IuQ1NTQ29tcGxldGlvbnMubmV4dCh3b3JkU3RyaW5nLCBwcmVmaXgpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBwcm9wZXJ0eSA9IFdlYkluc3BlY3Rvci5DU1NDb21wbGV0aW9ucy5w
cmV2aW91cyh3b3JkU3RyaW5nLCBwcmVmaXgpOworCisgICAgICAgIGlmIChwcm9wZXJ0eSkgewor
ICAgICAgICAgICAgdGhpcy5uYW1lRWxlbWVudC50ZXh0Q29udGVudCA9IHByb3BlcnR5OworICAg
ICAgICAgICAgdGhpcy5uYW1lRWxlbWVudC5maXJzdENoaWxkLnNlbGVjdChzZWxlY3Rpb25SYW5n
ZS5zdGFydE9mZnNldCk7CisgICAgICAgIH0KKyAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQo
KTsKKyAgICB9LAorCisgICAgZWRpdGluZ1ZhbHVlS2V5RG93bjogZnVuY3Rpb24oZXZlbnQpCiAg
ICAgewogICAgICAgICB2YXIgYXJyb3dLZXlQcmVzc2VkID0gKGV2ZW50LmtleUlkZW50aWZpZXIg
PT09ICJVcCIgfHwgZXZlbnQua2V5SWRlbnRpZmllciA9PT0gIkRvd24iKTsKICAgICAgICAgdmFy
IHBhZ2VLZXlQcmVzc2VkID0gKGV2ZW50LmtleUlkZW50aWZpZXIgPT09ICJQYWdlVXAiIHx8IGV2
ZW50LmtleUlkZW50aWZpZXIgPT09ICJQYWdlRG93biIpOwpAQCAtMTUyNSwzMyArMTYzOSwxMSBA
QCBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAg
ICAgICAgICAgIHJldHVybjsKIAogICAgICAgICB2YXIgc2VsZWN0aW9uUmFuZ2UgPSBzZWxlY3Rp
b24uZ2V0UmFuZ2VBdCgwKTsKLSAgICAgICAgaWYgKHNlbGVjdGlvblJhbmdlLmNvbW1vbkFuY2Vz
dG9yQ29udGFpbmVyICE9PSB0aGlzLmxpc3RJdGVtRWxlbWVudCAmJiAhc2VsZWN0aW9uUmFuZ2Uu
Y29tbW9uQW5jZXN0b3JDb250YWluZXIuaXNEZXNjZW5kYW50KHRoaXMubGlzdEl0ZW1FbGVtZW50
KSkKKyAgICAgICAgaWYgKHNlbGVjdGlvblJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyICE9
PSB0aGlzLnZhbHVlRWxlbWVudCAmJiAhc2VsZWN0aW9uUmFuZ2UuY29tbW9uQW5jZXN0b3JDb250
YWluZXIuaXNEZXNjZW5kYW50KHRoaXMudmFsdWVFbGVtZW50KSkKICAgICAgICAgICAgIHJldHVy
bjsKIAotICAgICAgICAvLyBJZiB0aGVyZSBhcmUgc2V2ZXJhbCBwcm9wZXJ0aWVzIGluIHRoZSB0
ZXh0LCBkbyBub3QgaGFuZGxlIGluY3JlbWVudHMvZGVjcmVtZW50cy4KLSAgICAgICAgdmFyIHRl
eHQgPSBldmVudC50YXJnZXQudGV4dENvbnRlbnQudHJpbSgpOwotICAgICAgICB2YXIgb3BlblF1
b3RlOwotICAgICAgICB2YXIgd2FzRXNjYXBlID0gZmFsc2U7Ci0gICAgICAgIC8vIEV4Y2x1ZGUg
dGhlIGxhc3QgY2hhcmFjdGVyIGZyb20gdGhlIGNoZWNrIHNpbmNlIGl0IGlzIGFsbG93ZWQgdG8g
YmUgIjsiLgotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRleHQubGVuZ3RoIC0gMTsgKytp
KSB7Ci0gICAgICAgICAgICB2YXIgY2ggPSB0ZXh0LmNoYXJBdChpKTsKLSAgICAgICAgICAgIGlm
IChjaCA9PT0gIlxcIikgewotICAgICAgICAgICAgICAgIHdhc0VzY2FwZSA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoY2gg
PT09ICI7IiAmJiAhb3BlblF1b3RlKQotICAgICAgICAgICAgICAgIHJldHVybjsgLy8gRG8gbm90
IGhhbmRsZSBuYW1lL3ZhbHVlIHNoaWZ0cyBpZiB0aGUgcHJvcGVydHkgaXMgY29tcG91bmQuCi0g
ICAgICAgICAgICBpZiAoKGNoID09PSAiJyIgfHwgY2ggPT09ICJcIiIpICYmICF3YXNFc2NhcGUp
IHsKLSAgICAgICAgICAgICAgICBpZiAoIW9wZW5RdW90ZSkKLSAgICAgICAgICAgICAgICAgICAg
b3BlblF1b3RlID0gY2g7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoY2ggPT09IG9wZW5RdW90
ZSkKLSAgICAgICAgICAgICAgICAgICAgb3BlblF1b3RlID0gbnVsbDsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHdhc0VzY2FwZSA9IGZhbHNlOwotICAgICAgICB9Ci0KICAgICAgICAgY29u
c3Qgc3R5bGVWYWx1ZURlbGltZXRlcnMgPSAiIFx0XG5cIic6OywvKCkiOwotICAgICAgICB2YXIg
d29yZFJhbmdlID0gc2VsZWN0aW9uUmFuZ2Uuc3RhcnRDb250YWluZXIucmFuZ2VPZldvcmQoc2Vs
ZWN0aW9uUmFuZ2Uuc3RhcnRPZmZzZXQsIHN0eWxlVmFsdWVEZWxpbWV0ZXJzLCB0aGlzLmxpc3RJ
dGVtRWxlbWVudCk7CisgICAgICAgIHZhciB3b3JkUmFuZ2UgPSBzZWxlY3Rpb25SYW5nZS5zdGFy
dENvbnRhaW5lci5yYW5nZU9mV29yZChzZWxlY3Rpb25SYW5nZS5zdGFydE9mZnNldCwgc3R5bGVW
YWx1ZURlbGltZXRlcnMsIHRoaXMudmFsdWVFbGVtZW50KTsKICAgICAgICAgdmFyIHdvcmRTdHJp
bmcgPSB3b3JkUmFuZ2UudG9TdHJpbmcoKTsKICAgICAgICAgdmFyIHJlcGxhY2VtZW50U3RyaW5n
ID0gd29yZFN0cmluZzsKIApAQCAtMTU5MywyMiArMTY4NSw2IEBAIFdlYkluc3BlY3Rvci5TdHls
ZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlID0gewogICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICByZXBsYWNlbWVudFN0cmluZyA9IHByZWZpeCArIG51bWJlciArIHN1ZmZpeDsKLSAg
ICAgICAgfSBlbHNlIGlmIChzZWxlY3Rpb24uY29udGFpbnNOb2RlKHRoaXMubmFtZUVsZW1lbnQs
IHRydWUpKSB7Ci0gICAgICAgICAgICB2YXIgcHJlZml4ID0gc2VsZWN0aW9uUmFuZ2Uuc3RhcnRD
b250YWluZXIudGV4dENvbnRlbnQuc3Vic3RyaW5nKDAsIHNlbGVjdGlvblJhbmdlLnN0YXJ0T2Zm
c2V0KTsKLSAgICAgICAgICAgIHZhciBwcm9wZXJ0eTsKLQotICAgICAgICAgICAgaWYgKGV2ZW50
LmtleUlkZW50aWZpZXIgPT09ICJVcCIpCi0gICAgICAgICAgICAgICAgcHJvcGVydHkgPSBXZWJJ
bnNwZWN0b3IuQ1NTQ29tcGxldGlvbnMucHJldmlvdXMod29yZFN0cmluZywgcHJlZml4KTsKLSAg
ICAgICAgICAgIGVsc2UgaWYgKGV2ZW50LmtleUlkZW50aWZpZXIgPT09ICJEb3duIikKLSAgICAg
ICAgICAgICAgICBwcm9wZXJ0eSA9IFdlYkluc3BlY3Rvci5DU1NDb21wbGV0aW9ucy5uZXh0KHdv
cmRTdHJpbmcsIHByZWZpeCk7Ci0KLSAgICAgICAgICAgIHZhciBzdGFydE9mZnNldCA9IHNlbGVj
dGlvblJhbmdlLnN0YXJ0T2Zmc2V0OwotICAgICAgICAgICAgaWYgKHByb3BlcnR5KSB7Ci0gICAg
ICAgICAgICAgICAgdGhpcy5uYW1lRWxlbWVudC50ZXh0Q29udGVudCA9IHByb3BlcnR5OwotICAg
ICAgICAgICAgICAgIHRoaXMubmFtZUVsZW1lbnQuZmlyc3RDaGlsZC5zZWxlY3Qoc3RhcnRPZmZz
ZXQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsK
LSAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIEZJ
WE1FOiB0aGlzIHNob3VsZCBjeWNsZSB0aHJvdWdoIGtub3duIGtleXdvcmRzIGZvciB0aGUgY3Vy
cmVudCBwcm9wZXJ0eSB2YWx1ZS4KICAgICAgICAgfQpAQCAtMTYzMiw3ICsxNzA4LDkgQEAgV2Vi
SW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAgICAgICAg
ICAgICAvLyBpZiB0aGUgZWRpdGluZyBpcyBjYW5jZWxlZCBhbmQgYmVmb3JlIGVhY2ggYXBwbHku
CiAgICAgICAgICAgICB0aGlzLm9yaWdpbmFsUHJvcGVydHlUZXh0ID0gdGhpcy5wcm9wZXJ0eS5w
cm9wZXJ0eVRleHQ7CiAgICAgICAgIH0KLSAgICAgICAgdGhpcy5hcHBseVN0eWxlVGV4dCh0aGlz
Lmxpc3RJdGVtRWxlbWVudC50ZXh0Q29udGVudCk7CisKKyAgICAgICAgLy8gU3ludGhlc2l6ZSBw
cm9wZXJ0eSB0ZXh0IGRpc3JlZ2FyZGluZyBhbnkgY29tbWVudHMsIGN1c3RvbSB3aGl0ZXNwYWNl
IGV0Yy4KKyAgICAgICAgdGhpcy5hcHBseVN0eWxlVGV4dCh0aGlzLm5hbWVFbGVtZW50LnRleHRD
b250ZW50ICsgIjogIiArIHRoaXMudmFsdWVFbGVtZW50LnRleHRDb250ZW50KTsKICAgICB9LAog
CiAgICAgZWRpdGluZ0VuZGVkOiBmdW5jdGlvbihjb250ZXh0KQpAQCAtMTY0MCw4ICsxNzE4LDEy
IEBAIFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlID0gewog
ICAgICAgICB0aGlzLmhhc0NoaWxkcmVuID0gY29udGV4dC5oYXNDaGlsZHJlbjsKICAgICAgICAg
aWYgKGNvbnRleHQuZXhwYW5kZWQpCiAgICAgICAgICAgICB0aGlzLmV4cGFuZCgpOwotICAgICAg
ICB0aGlzLmxpc3RJdGVtRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgY29u
dGV4dC5rZXlEb3duTGlzdGVuZXIsIGZhbHNlKTsKLSAgICAgICAgdGhpcy5saXN0SXRlbUVsZW1l
bnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5cHJlc3MiLCBjb250ZXh0LmtleVByZXNzTGlzdGVu
ZXIsIGZhbHNlKTsKKyAgICAgICAgdmFyIGVkaXRlZEVsZW1lbnQgPSBjb250ZXh0LmlzRWRpdGlu
Z05hbWUgPyB0aGlzLm5hbWVFbGVtZW50IDogdGhpcy52YWx1ZUVsZW1lbnQ7CisgICAgICAgIGVk
aXRlZEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIGNvbnRleHQua2V5RG93
bkxpc3RlbmVyLCBmYWxzZSk7CisgICAgICAgIGVkaXRlZEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0
ZW5lcigia2V5cHJlc3MiLCBjb250ZXh0LmtleVByZXNzTGlzdGVuZXIsIGZhbHNlKTsKKyAgICAg
ICAgaWYgKGVkaXRlZEVsZW1lbnQucGFyZW50RWxlbWVudCkKKyAgICAgICAgICAgIGVkaXRlZEVs
ZW1lbnQucGFyZW50RWxlbWVudC5yZW1vdmVTdHlsZUNsYXNzKCJjaGlsZC1lZGl0aW5nIik7CisK
ICAgICAgICAgZGVsZXRlIHRoaXMub3JpZ2luYWxQcm9wZXJ0eVRleHQ7CiAgICAgfSwKIApAQCAt
MTY2MSw2MSArMTc0Myw5NiBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50
LnByb3RvdHlwZSA9IHsKICAgICBlZGl0aW5nQ29tbWl0dGVkOiBmdW5jdGlvbihlbGVtZW50LCB1
c2VySW5wdXQsIHByZXZpb3VzQ29udGVudCwgY29udGV4dCwgbW92ZURpcmVjdGlvbikKICAgICB7
CiAgICAgICAgIHRoaXMuZWRpdGluZ0VuZGVkKGNvbnRleHQpOworICAgICAgICB2YXIgaXNFZGl0
aW5nTmFtZSA9IGNvbnRleHQuaXNFZGl0aW5nTmFtZTsKIAogICAgICAgICAvLyBEZXRlcm1pbmUg
d2hlcmUgdG8gbW92ZSB0byBiZWZvcmUgbWFraW5nIGNoYW5nZXMKLSAgICAgICAgdmFyIG5ld1By
b3BlcnR5LCBtb3ZlVG9Qcm9wZXJ0eU5hbWUsIG1vdmVUb1NlbGVjdG9yOworICAgICAgICB2YXIg
Y3JlYXRlTmV3UHJvcGVydHksIG1vdmVUb1Byb3BlcnR5TmFtZSwgbW92ZVRvU2VsZWN0b3I7CiAg
ICAgICAgIHZhciBtb3ZlVG8gPSB0aGlzOwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBtb3Zl
VG8gPSAobW92ZURpcmVjdGlvbiA9PT0gImZvcndhcmQiID8gbW92ZVRvLm5leHRTaWJsaW5nIDog
bW92ZVRvLnByZXZpb3VzU2libGluZyk7Ci0gICAgICAgIH0gd2hpbGUobW92ZVRvICYmICFtb3Zl
VG8uc2VsZWN0YWJsZSk7Ci0KLSAgICAgICAgaWYgKG1vdmVUbykKLSAgICAgICAgICAgIG1vdmVU
b1Byb3BlcnR5TmFtZSA9IG1vdmVUby5uYW1lOwotICAgICAgICBlbHNlIGlmIChtb3ZlRGlyZWN0
aW9uID09PSAiZm9yd2FyZCIpCi0gICAgICAgICAgICBuZXdQcm9wZXJ0eSA9IHRydWU7Ci0gICAg
ICAgIGVsc2UgaWYgKG1vdmVEaXJlY3Rpb24gPT09ICJiYWNrd2FyZCIgJiYgdGhpcy50cmVlT3V0
bGluZS5zZWN0aW9uLnJ1bGUpCi0gICAgICAgICAgICBtb3ZlVG9TZWxlY3RvciA9IHRydWU7Cisg
ICAgICAgIHZhciBtb3ZlVG9PdGhlciA9IChpc0VkaXRpbmdOYW1lIF4gKG1vdmVEaXJlY3Rpb24g
PT09ICJmb3J3YXJkIikpOworICAgICAgICB2YXIgYWJhbmRvbk5ld1Byb3BlcnR5ID0gdGhpcy5f
bmV3UHJvcGVydHkgJiYgIXVzZXJJbnB1dCAmJiAobW92ZVRvT3RoZXIgfHwgaXNFZGl0aW5nTmFt
ZSk7CisgICAgICAgIGlmIChtb3ZlRGlyZWN0aW9uID09PSAiZm9yd2FyZCIgJiYgIWlzRWRpdGlu
Z05hbWUgfHwgbW92ZURpcmVjdGlvbiA9PT0gImJhY2t3YXJkIiAmJiBpc0VkaXRpbmdOYW1lKSB7
CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgbW92ZVRvID0gKG1vdmVEaXJlY3Rp
b24gPT09ICJmb3J3YXJkIiA/IG1vdmVUby5uZXh0U2libGluZyA6IG1vdmVUby5wcmV2aW91c1Np
YmxpbmcpOworICAgICAgICAgICAgfSB3aGlsZShtb3ZlVG8gJiYgIW1vdmVUby5zZWxlY3RhYmxl
KTsKKworICAgICAgICAgICBpZiAobW92ZVRvKQorICAgICAgICAgICAgICAgIG1vdmVUb1Byb3Bl
cnR5TmFtZSA9IG1vdmVUby5uYW1lOworICAgICAgICAgICAgZWxzZSBpZiAobW92ZURpcmVjdGlv
biA9PT0gImZvcndhcmQiICYmICghdGhpcy5fbmV3UHJvcGVydHkgfHwgdXNlcklucHV0KSkKKyAg
ICAgICAgICAgICAgICBjcmVhdGVOZXdQcm9wZXJ0eSA9IHRydWU7CisgICAgICAgICAgICBlbHNl
IGlmIChtb3ZlRGlyZWN0aW9uID09PSAiYmFja3dhcmQiICYmIHRoaXMudHJlZU91dGxpbmUuc2Vj
dGlvbi5ydWxlKQorICAgICAgICAgICAgICAgIG1vdmVUb1NlbGVjdG9yID0gdHJ1ZTsKKyAgICAg
ICAgfQogCi0gICAgICAgIC8vIE1ha2UgdGhlIENoYW5nZXMgYW5kIHRyaWdnZXIgdGhlIG1vdmVU
b05leHRDYWxsYmFjayBhZnRlciB1cGRhdGluZworICAgICAgICAvLyBNYWtlIHRoZSBDaGFuZ2Vz
IGFuZCB0cmlnZ2VyIHRoZSBtb3ZlVG9OZXh0Q2FsbGJhY2sgYWZ0ZXIgdXBkYXRpbmcuCiAgICAg
ICAgIHZhciBibGFua0lucHV0ID0gL15ccyokLy50ZXN0KHVzZXJJbnB1dCk7Ci0gICAgICAgIGlm
ICh1c2VySW5wdXQgIT09IHByZXZpb3VzQ29udGVudCB8fCAodGhpcy5fbmV3UHJvcGVydHkgJiYg
YmxhbmtJbnB1dCkpIHsgLy8gb25seSBpZiBzb21ldGhpbmcgY2hhbmdlZCwgb3IgYWRkaW5nIGEg
bmV3IHN0eWxlIGFuZCBpdCB3YXMgYmxhbmsKLSAgICAgICAgICAgIHRoaXMudHJlZU91dGxpbmUu
c2VjdGlvbi5fYWZ0ZXJVcGRhdGUgPSBtb3ZlVG9OZXh0Q2FsbGJhY2suYmluZCh0aGlzLCB0aGlz
Ll9uZXdQcm9wZXJ0eSwgIWJsYW5rSW5wdXQpOwotICAgICAgICAgICAgdGhpcy5hcHBseVN0eWxl
VGV4dCh1c2VySW5wdXQsIHRydWUpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1vdmVU
b05leHRDYWxsYmFjayh0aGlzLl9uZXdQcm9wZXJ0eSwgZmFsc2UsIHRoaXMudHJlZU91dGxpbmUu
c2VjdGlvbiwgZmFsc2UpOworICAgICAgICB2YXIgc2hvdWxkQ29tbWl0TmV3UHJvcGVydHkgPSB0
aGlzLl9uZXdQcm9wZXJ0eSAmJiAobW92ZVRvT3RoZXIgfHwgKCFtb3ZlRGlyZWN0aW9uICYmICFp
c0VkaXRpbmdOYW1lKSB8fCAoaXNFZGl0aW5nTmFtZSAmJiBibGFua0lucHV0KSk7CiAKLSAgICAg
ICAgLy8gVGhlIENhbGxiYWNrIHRvIHN0YXJ0IGVkaXRpbmcgdGhlIG5leHQgcHJvcGVydHkKKyAg
ICAgICAgaWYgKCh1c2VySW5wdXQgIT09IHByZXZpb3VzQ29udGVudCAmJiAhdGhpcy5fbmV3UHJv
cGVydHkpIHx8IHNob3VsZENvbW1pdE5ld1Byb3BlcnR5KSB7CisgICAgICAgICAgICB0aGlzLnRy
ZWVPdXRsaW5lLnNlY3Rpb24uX2FmdGVyVXBkYXRlID0gbW92ZVRvTmV4dENhbGxiYWNrLmJpbmQo
dGhpcywgdGhpcy5fbmV3UHJvcGVydHksICFibGFua0lucHV0LCB0aGlzLnRyZWVPdXRsaW5lLnNl
Y3Rpb24pOworICAgICAgICAgICAgdmFyIHByb3BlcnR5VGV4dDsKKyAgICAgICAgICAgIGlmIChi
bGFua0lucHV0IHx8ICh0aGlzLl9uZXdQcm9wZXJ0eSAmJiAvXlxzKiQvLnRlc3QodGhpcy52YWx1
ZUVsZW1lbnQudGV4dENvbnRlbnQpKSkKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eVRleHQgPSAi
IjsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChpc0VkaXRpbmdOYW1l
KQorICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVRleHQgPSB1c2VySW5wdXQgKyAiOiAiICsg
dGhpcy52YWx1ZUVsZW1lbnQudGV4dENvbnRlbnQ7CisgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICBwcm9wZXJ0eVRleHQgPSB0aGlzLm5hbWVFbGVtZW50LnRleHRDb250
ZW50ICsgIjogIiArIHVzZXJJbnB1dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMu
YXBwbHlTdHlsZVRleHQocHJvcGVydHlUZXh0LCB0cnVlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGlmICghdGhpcy5fbmV3UHJvcGVydHkpCisgICAgICAgICAgICAgICAgdGhpcy51
cGRhdGVUaXRsZSgpOworICAgICAgICAgICAgbW92ZVRvTmV4dENhbGxiYWNrKHRoaXMuX25ld1By
b3BlcnR5LCBmYWxzZSwgdGhpcy50cmVlT3V0bGluZS5zZWN0aW9uKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHZhciBtb3ZlVG9JbmRleCA9IG1vdmVUbyAmJiB0aGlzLnRyZWVPdXRsaW5lID8gdGhp
cy50cmVlT3V0bGluZS5jaGlsZHJlbi5pbmRleE9mKG1vdmVUbykgOiAtMTsKKworICAgICAgICAv
LyBUaGUgQ2FsbGJhY2sgdG8gc3RhcnQgZWRpdGluZyB0aGUgbmV4dC9wcmV2aW91cyBwcm9wZXJ0
eS9zZWxlY3Rvci4KICAgICAgICAgZnVuY3Rpb24gbW92ZVRvTmV4dENhbGxiYWNrKGFscmVhZHlO
ZXcsIHZhbHVlQ2hhbmdlZCwgc2VjdGlvbikKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFt
b3ZlRGlyZWN0aW9uKQogICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgLy8g
VXNlciBqdXN0IHRhYmJlZCB0aHJvdWdoIHdpdGhvdXQgY2hhbmdlcworICAgICAgICAgICAgLy8g
VXNlciBqdXN0IHRhYmJlZCB0aHJvdWdoIHdpdGhvdXQgY2hhbmdlcy4KICAgICAgICAgICAgIGlm
IChtb3ZlVG8gJiYgbW92ZVRvLnBhcmVudCkgewotICAgICAgICAgICAgICAgIG1vdmVUby5zdGFy
dEVkaXRpbmcobW92ZVRvLnZhbHVlRWxlbWVudCk7CisgICAgICAgICAgICAgICAgbW92ZVRvLnN0
YXJ0RWRpdGluZyghaXNFZGl0aW5nTmFtZSA/IG1vdmVUby5uYW1lRWxlbWVudCA6IG1vdmVUby52
YWx1ZUVsZW1lbnQpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgLy8gVXNlciBoYXMgbWFkZSBhIGNoYW5nZSB0aGVuIHRhYmJlZCwgd2lwaW5n
IGFsbCB0aGUgb3JpZ2luYWwgdHJlZUVsZW1lbnRzLAotICAgICAgICAgICAgLy8gcmVjYWxjdWxh
dGUgdGhlIG5ldyB0cmVlRWxlbWVudCBmb3IgdGhlIHNhbWUgcHJvcGVydHkgd2Ugd2VyZSBnb2lu
ZyB0byBlZGl0IG5leHQKLSAgICAgICAgICAgIC8vIEZJWE1FKGFwYXZsb3YpOiB0aGlzIHdpbGwg
bm90IHdvcmsgZm9yIG11bHRpcGxlIHNhbWUtbmFtZWQgcHJvcGVydGllcyBpbiBhIHN0eWxlCi0g
ICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgKHRoZSBmaXJzdCBvbmUgd2lsbCBhbHdheXMg
YmUgcmV0dXJuZWQpLgorICAgICAgICAgICAgLy8gVXNlciBoYXMgbWFkZSBhIGNoYW5nZSB0aGVu
IHRhYmJlZCwgd2lwaW5nIGFsbCB0aGUgb3JpZ2luYWwgdHJlZUVsZW1lbnRzLgorICAgICAgICAg
ICAgLy8gUmVjYWxjdWxhdGUgdGhlIG5ldyB0cmVlRWxlbWVudCBmb3IgdGhlIHNhbWUgcHJvcGVy
dHkgd2Ugd2VyZSBnb2luZyB0byBlZGl0IG5leHQuCiAgICAgICAgICAgICBpZiAobW92ZVRvICYm
ICFtb3ZlVG8ucGFyZW50KSB7Ci0gICAgICAgICAgICAgICAgdmFyIHRyZWVFbGVtZW50ID0gc2Vj
dGlvbi5maW5kVHJlZUVsZW1lbnRXaXRoTmFtZShtb3ZlVG9Qcm9wZXJ0eU5hbWUpOwotICAgICAg
ICAgICAgICAgIGlmICh0cmVlRWxlbWVudCkKLSAgICAgICAgICAgICAgICAgICAgdHJlZUVsZW1l
bnQuc3RhcnRFZGl0aW5nKHRyZWVFbGVtZW50LnZhbHVlRWxlbWVudCk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgIHZhciBwcm9wZXJ0eUVsZW1lbnRzID0gc2VjdGlv
bi5wcm9wZXJ0aWVzVHJlZU91dGxpbmUuY2hpbGRyZW47CisgICAgICAgICAgICAgICAgaWYgKG1v
dmVEaXJlY3Rpb24gPT09ICJmb3J3YXJkIiAmJiBibGFua0lucHV0ICYmICFpc0VkaXRpbmdOYW1l
KQorICAgICAgICAgICAgICAgICAgICAtLW1vdmVUb0luZGV4OworICAgICAgICAgICAgICAgIGlm
IChtb3ZlVG9JbmRleCA+PSBwcm9wZXJ0eUVsZW1lbnRzLmxlbmd0aCAmJiAhdGhpcy5fbmV3UHJv
cGVydHkpCisgICAgICAgICAgICAgICAgICAgIGNyZWF0ZU5ld1Byb3BlcnR5ID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHRyZWVFbGVtZW50
ID0gbW92ZVRvSW5kZXggPj0gMCA/IHByb3BlcnR5RWxlbWVudHNbbW92ZVRvSW5kZXhdIDogbnVs
bDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRyZWVFbGVtZW50KSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICB0cmVlRWxlbWVudC5zdGFydEVkaXRpbmcoIWlzRWRpdGluZ05hbWUgPyB0cmVl
RWxlbWVudC5uYW1lRWxlbWVudCA6IHRyZWVFbGVtZW50LnZhbHVlRWxlbWVudCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
IWFscmVhZHlOZXcpCisgICAgICAgICAgICAgICAgICAgICAgICBtb3ZlVG9TZWxlY3RvciA9IHRy
dWU7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAvLyBD
cmVhdGUgYSBuZXcgYXR0cmlidXRlIGluIHRoaXMgc2VjdGlvbgotICAgICAgICAgICAgaWYgKG5l
d1Byb3BlcnR5KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGFscmVhZHlOZXcgJiYgIXZhbHVlQ2hh
bmdlZCkKKyAgICAgICAgICAgIC8vIENyZWF0ZSBhIG5ldyBhdHRyaWJ1dGUgaW4gdGhpcyBzZWN0
aW9uIChvciBtb3ZlIHRvIG5leHQgZWRpdGFibGUgc2VsZWN0b3IgaWYgcG9zc2libGUpLgorICAg
ICAgICAgICAgaWYgKGNyZWF0ZU5ld1Byb3BlcnR5KSB7CisgICAgICAgICAgICAgICAgaWYgKGFs
cmVhZHlOZXcgJiYgIXZhbHVlQ2hhbmdlZCAmJiAoaXNFZGl0aW5nTmFtZSBeIChtb3ZlRGlyZWN0
aW9uID09PSAiYmFja3dhcmQiKSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAg
ICAgICAgICAgICAgIHNlY3Rpb24uYWRkTmV3QmxhbmtQcm9wZXJ0eSgpLnN0YXJ0RWRpdGluZygp
OwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAg
aWYgKGFiYW5kb25OZXdQcm9wZXJ0eSkgeworICAgICAgICAgICAgICAgIHZhciBzZWN0aW9uVG9F
ZGl0ID0gbW92ZURpcmVjdGlvbiA9PT0gImJhY2t3YXJkIiA/IHNlY3Rpb24gOiBzZWN0aW9uLm5l
eHRFZGl0YWJsZVNpYmxpbmcoKTsKKyAgICAgICAgICAgICAgICBpZiAoc2VjdGlvblRvRWRpdCAm
JiBzZWN0aW9uVG9FZGl0LnJ1bGUpCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25Ub0VkaXQu
c3RhcnRFZGl0aW5nU2VsZWN0b3IoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisKICAgICAgICAgICAgIGlmIChtb3ZlVG9TZWxlY3RvcikKICAgICAgICAgICAgICAg
ICBzZWN0aW9uLnN0YXJ0RWRpdGluZ1NlbGVjdG9yKCk7CiAgICAgICAgIH0KQEAgLTE3MjUsMTYg
KzE4NDIsMTMgQEAgV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5
cGUgPSB7CiAgICAgewogICAgICAgICB2YXIgc2VjdGlvbiA9IHRoaXMudHJlZU91dGxpbmUuc2Vj
dGlvbjsKICAgICAgICAgdmFyIGVsZW1lbnRzUGFuZWwgPSBXZWJJbnNwZWN0b3IucGFuZWxzLmVs
ZW1lbnRzOwotICAgICAgICBzdHlsZVRleHQgPSBzdHlsZVRleHQucmVwbGFjZSgvXHMvZywgIiAi
KS50cmltKCk7IC8vIHJlcGxhY2UgJm5ic3A7IHdpdGggd2hpdGVzcGFjZS4KKyAgICAgICAgc3R5
bGVUZXh0ID0gc3R5bGVUZXh0LnJlcGxhY2UoL1xzL2csICIgIikudHJpbSgpOyAvLyBSZXBsYWNl
ICZuYnNwOyB3aXRoIHdoaXRlc3BhY2UuCiAgICAgICAgIHZhciBzdHlsZVRleHRMZW5ndGggPSBz
dHlsZVRleHQubGVuZ3RoOwotICAgICAgICBpZiAoIXN0eWxlVGV4dExlbmd0aCAmJiB1cGRhdGVJ
bnRlcmZhY2UpIHsKLSAgICAgICAgICAgIGlmICh0aGlzLl9uZXdQcm9wZXJ0eSkgewotICAgICAg
ICAgICAgICAgIC8vIFRoZSB1c2VyIGRlbGV0ZWQgZXZlcnl0aGluZywgc28gcmVtb3ZlIHRoZSB0
cmVlIGVsZW1lbnQgYW5kIHVwZGF0ZS4KLSAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5yZW1v
dmVDaGlsZCh0aGlzKTsKLSAgICAgICAgICAgICAgICBzZWN0aW9uLmFmdGVyVXBkYXRlKCk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAg
ICAgZGVsZXRlIHNlY3Rpb24uX2FmdGVyVXBkYXRlOworICAgICAgICBpZiAoIXN0eWxlVGV4dExl
bmd0aCAmJiB1cGRhdGVJbnRlcmZhY2UgJiYgdGhpcy5fbmV3UHJvcGVydHkpIHsKKyAgICAgICAg
ICAgIC8vIFRoZSB1c2VyIGRlbGV0ZWQgZXZlcnl0aGluZywgc28gcmVtb3ZlIHRoZSB0cmVlIGVs
ZW1lbnQgYW5kIHVwZGF0ZS4KKyAgICAgICAgICAgIHRoaXMucGFyZW50LnJlbW92ZUNoaWxkKHRo
aXMpOworICAgICAgICAgICAgc2VjdGlvbi5hZnRlclVwZGF0ZSgpOworICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAKICAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2sobmV3U3R5bGUpCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGV4dFZpZXdlci5qcyBiL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0Vmlld2VyLmpzCmluZGV4IDlhZDVlNDkuLjky
NzMwYTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0Vmlld2Vy
LmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0Vmlld2VyLmpzCkBAIC0y
NjgsNyArMjY4LDcgQEAgV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBlID0gewogICAg
ICAgICB2YXIgb2xkQ29udGVudCA9IGxpbmVSb3cubGFzdENoaWxkLmlubmVySFRNTDsKICAgICAg
ICAgdmFyIGNhbmNlbEVkaXRpbmdDYWxsYmFjayA9IHRoaXMuX2NhbmNlbEVkaXRpbmdMaW5lLmJp
bmQodGhpcywgbGluZVJvdy5sYXN0Q2hpbGQsIG9sZENvbnRlbnQpOwogICAgICAgICB2YXIgY29t
bWl0RWRpdGluZ0NhbGxiYWNrID0gdGhpcy5fY29tbWl0RWRpdGluZ0xpbmUuYmluZCh0aGlzLCBs
aW5lUm93LmxpbmVOdW1iZXIsIGxpbmVSb3cubGFzdENoaWxkLCBjYW5jZWxFZGl0aW5nQ2FsbGJh
Y2spOwotICAgICAgICB0aGlzLl9lZGl0aW5nTGluZSA9IFdlYkluc3BlY3Rvci5zdGFydEVkaXRp
bmcobGluZVJvdy5sYXN0Q2hpbGQsIGNvbW1pdEVkaXRpbmdDYWxsYmFjaywgY2FuY2VsRWRpdGlu
Z0NhbGxiYWNrLCBudWxsLCB0cnVlKTsKKyAgICAgICAgdGhpcy5fZWRpdGluZ0xpbmUgPSBXZWJJ
bnNwZWN0b3Iuc3RhcnRFZGl0aW5nKGxpbmVSb3cubGFzdENoaWxkLCB7IGNvbW1pdEhhbmRsZXI6
IGNvbW1pdEVkaXRpbmdDYWxsYmFjaywgY2FuY2VsSGFuZGxlcjogY2FuY2VsRWRpdGluZ0NhbGxi
YWNrLCBtdWx0aWxpbmU6IHRydWUgfSwgbnVsbCk7CiAgICAgfSwKIAogICAgIF9jb21taXRFZGl0
aW5nTGluZTogZnVuY3Rpb24obGluZU51bWJlciwgZWxlbWVudCwgY2FuY2VsRWRpdGluZ0NhbGxi
YWNrKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dhdGNoRXhwcmVz
c2lvbnNTaWRlYmFyUGFuZS5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XYXRjaEV4
cHJlc3Npb25zU2lkZWJhclBhbmUuanMKaW5kZXggNDQwNjNhMy4uNDczNGM5OCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dhdGNoRXhwcmVzc2lvbnNTaWRlYmFyUGFu
ZS5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2F0Y2hFeHByZXNzaW9uc1Np
ZGViYXJQYW5lLmpzCkBAIC0yNDAsNyArMjQwLDcgQEAgV2ViSW5zcGVjdG9yLldhdGNoRXhwcmVz
c2lvblRyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKIAogICAgICAgICB0aGlzLmxpc3RJdGVtRWxl
bWVudC5hZGRTdHlsZUNsYXNzKCJlZGl0aW5nLXN1Yi1wYXJ0Iik7CiAKLSAgICAgICAgV2ViSW5z
cGVjdG9yLnN0YXJ0RWRpdGluZyh0aGlzLm5hbWVFbGVtZW50LCB0aGlzLmVkaXRpbmdDb21taXR0
ZWQuYmluZCh0aGlzKSwgdGhpcy5lZGl0aW5nQ2FuY2VsbGVkLmJpbmQodGhpcyksIGNvbnRleHQp
OworICAgICAgICBXZWJJbnNwZWN0b3Iuc3RhcnRFZGl0aW5nKHRoaXMubmFtZUVsZW1lbnQsIHsg
Y29tbWl0SGFuZGxlcjogdGhpcy5lZGl0aW5nQ29tbWl0dGVkLmJpbmQodGhpcyksIGNhbmNlbEhh
bmRsZXI6IHRoaXMuZWRpdGluZ0NhbmNlbGxlZC5iaW5kKHRoaXMpIH0sIGNvbnRleHQpOwogICAg
IH0sCiAKICAgICBlZGl0aW5nQ2FuY2VsbGVkOiBmdW5jdGlvbihlbGVtZW50LCBjb250ZXh0KQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5jc3MgYi9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmNzcwppbmRleCA5NjU2ODliLi5j
OTA4NDI3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9y
LmNzcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmNzcwpAQCAt
MTQyNCw2ICsxNDI0LDEyIEBAIGJvZHkuaW5hY3RpdmUgLnBsYWNhcmQuc2VsZWN0ZWQgewogICAg
IHRleHQtZGVjb3JhdGlvbjogbm9uZSAhaW1wb3J0YW50OwogfQogCisuY2hpbGQtZWRpdGluZyB7
CisgICAgY29sb3I6IGJsYWNrICFpbXBvcnRhbnQ7CisgICAgdGV4dC1kZWNvcmF0aW9uOiBub25l
ICFpbXBvcnRhbnQ7CisgICAgb3ZlcmZsb3c6IHZpc2libGUgIWltcG9ydGFudDsKK30KKwogLmVk
aXRpbmcgYnIgewogICAgIGRpc3BsYXk6IG5vbmU7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL2luc3BlY3Rvci5qcwppbmRleCBmNzFiODlhLi5iNWJhZDJkIDEwMDY0NAotLS0gYS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKQEAgLTE5MTYsMTIgKzE5MTYsMTkgQEAgV2ViSW5z
cGVjdG9yLmlzRWRpdGluZ0FueUZpZWxkID0gZnVuY3Rpb24oKQogICAgIHJldHVybiB0aGlzLl9f
ZWRpdGluZzsKIH0KIAotV2ViSW5zcGVjdG9yLnN0YXJ0RWRpdGluZyA9IGZ1bmN0aW9uKGVsZW1l
bnQsIGNvbW1pdHRlZENhbGxiYWNrLCBjYW5jZWxsZWRDYWxsYmFjaywgY29udGV4dCwgbXVsdGls
aW5lKQorLy8gQXZhaWxhYmxlIGNvbmZpZyBmaWVsZHM6CisvLyBjb21taXRIYW5kbGVyOiBGdW5j
dGlvbiAtIGhhbmRsZXMgZWRpdGluZyAiY29tbWl0IiBvdXRjb21lCisvLyBjYW5jZWxIYW5kbGVy
OiBGdW5jdGlvbiAtIGhhbmRsZXMgZWRpdGluZyAiY2FuY2VsIiBvdXRjb21lCisvLyBjdXN0b21G
aW5pc2hIYW5kbGVyOiBGdW5jdGlvbnx1bmRlZmluZWQgLSBjdXN0b20gZmluaXNoIGhhbmRsZXIg
Zm9yIHRoZSBlZGl0aW5nIHNlc3Npb24KKy8vIG11bHRpbGluZTogdHJ1ZXxmYWxzZSAtIHdoZXRo
ZXIgdGhlIGVkaXRlZCBlbGVtZW50IGlzIG11bHRpbGluZQorV2ViSW5zcGVjdG9yLnN0YXJ0RWRp
dGluZyA9IGZ1bmN0aW9uKGVsZW1lbnQsIGNvbmZpZywgY29udGV4dCkKIHsKICAgICBpZiAoZWxl
bWVudC5fX2VkaXRpbmcpCiAgICAgICAgIHJldHVybjsKICAgICBlbGVtZW50Ll9fZWRpdGluZyA9
IHRydWU7CiAgICAgV2ViSW5zcGVjdG9yLl9fZWRpdGluZyA9IHRydWU7CisgICAgdmFyIGNvbW1p
dHRlZENhbGxiYWNrID0gY29uZmlnLmNvbW1pdEhhbmRsZXI7CisgICAgdmFyIGNhbmNlbGxlZENh
bGxiYWNrID0gY29uZmlnLmNhbmNlbEhhbmRsZXI7CiAKICAgICB2YXIgb2xkVGV4dCA9IGdldENv
bnRlbnQoZWxlbWVudCk7CiAgICAgdmFyIG1vdmVEaXJlY3Rpb24gPSAiIjsKQEAgLTE5NzgsMjAg
KzE5ODUsMzYgQEAgV2ViSW5zcGVjdG9yLnN0YXJ0RWRpdGluZyA9IGZ1bmN0aW9uKGVsZW1lbnQs
IGNvbW1pdHRlZENhbGxiYWNrLCBjYW5jZWxsZWRDYWxsYmEKICAgICAgICAgICAgIGNvbW1pdHRl
ZENhbGxiYWNrKHRoaXMsIGdldENvbnRlbnQodGhpcyksIG9sZFRleHQsIGNvbnRleHQsIG1vdmVE
aXJlY3Rpb24pOwogICAgIH0KIAotICAgIGZ1bmN0aW9uIGtleURvd25FdmVudExpc3RlbmVyKGV2
ZW50KSB7CisgICAgZnVuY3Rpb24gZGVmYXVsdEZpbmlzaEhhbmRsZXIoZXZlbnQpCisgICAgewog
ICAgICAgICB2YXIgaXNNZXRhT3JDdHJsID0gV2ViSW5zcGVjdG9yLmlzTWFjKCkgPwogICAgICAg
ICAgICAgZXZlbnQubWV0YUtleSAmJiAhZXZlbnQuc2hpZnRLZXkgJiYgIWV2ZW50LmN0cmxLZXkg
JiYgIWV2ZW50LmFsdEtleSA6CiAgICAgICAgICAgICBldmVudC5jdHJsS2V5ICYmICFldmVudC5z
aGlmdEtleSAmJiAhZXZlbnQubWV0YUtleSAmJiAhZXZlbnQuYWx0S2V5OwotICAgICAgICBpZiAo
aXNFbnRlcktleShldmVudCkgJiYgKCFtdWx0aWxpbmUgfHwgaXNNZXRhT3JDdHJsKSkgeworICAg
ICAgICBpZiAoaXNFbnRlcktleShldmVudCkgJiYgKCFjb25maWcubXVsdGlsaW5lIHx8IGlzTWV0
YU9yQ3RybCkpCisgICAgICAgICAgICByZXR1cm4gImNvbW1pdCI7CisgICAgICAgIGVsc2UgaWYg
KGV2ZW50LmtleUNvZGUgPT09IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0LktleXMuRXNj
LmNvZGUpCisgICAgICAgICAgICByZXR1cm4gImNhbmNlbCI7CisgICAgICAgIGVsc2UgaWYgKGV2
ZW50LmtleUlkZW50aWZpZXIgPT09ICJVKzAwMDkiKSAvLyBUYWIga2V5CisgICAgICAgICAgICBy
ZXR1cm4gIm1vdmUtIiArIChldmVudC5zaGlmdEtleSA/ICJiYWNrd2FyZCIgOiAiZm9yd2FyZCIp
OworICAgIH0KKworICAgIGZ1bmN0aW9uIGtleURvd25FdmVudExpc3RlbmVyKGV2ZW50KQorICAg
IHsKKyAgICAgICAgdmFyIGhhbmRsZXIgPSBjb25maWcuY3VzdG9tRmluaXNoSGFuZGxlciB8fCBk
ZWZhdWx0RmluaXNoSGFuZGxlcjsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGhhbmRsZXIoZXZlbnQp
OworICAgICAgICBpZiAocmVzdWx0ID09PSAiY29tbWl0IikgewogICAgICAgICAgICAgZWRpdGlu
Z0NvbW1pdHRlZC5jYWxsKGVsZW1lbnQpOwogICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1
bHQoKTsKICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwotICAgICAgICB9IGVs
c2UgaWYgKGV2ZW50LmtleUNvZGUgPT09IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0Lktl
eXMuRXNjLmNvZGUpIHsKKyAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQgPT09ICJjYW5jZWwiKSB7
CiAgICAgICAgICAgICBlZGl0aW5nQ2FuY2VsbGVkLmNhbGwoZWxlbWVudCk7CiAgICAgICAgICAg
ICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0
aW9uKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5SWRlbnRpZmllciA9PT0gIlUrMDAw
OSIpIC8vIFRhYiBrZXkKLSAgICAgICAgICAgIG1vdmVEaXJlY3Rpb24gPSAoZXZlbnQuc2hpZnRL
ZXkgPyAiYmFja3dhcmQiIDogImZvcndhcmQiKTsKKyAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQg
JiYgcmVzdWx0LmluZGV4T2YoIm1vdmUtIikgPT09IDApIHsKKyAgICAgICAgICAgIG1vdmVEaXJl
Y3Rpb24gPSByZXN1bHQuc3Vic3RyaW5nKDUpOworICAgICAgICAgICAgaWYgKGV2ZW50LmtleUlk
ZW50aWZpZXIgIT09ICJVKzAwMDkiKQorICAgICAgICAgICAgICAgIGJsdXJFdmVudExpc3RlbmVy
KCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImJs
dXIiLCBibHVyRXZlbnRMaXN0ZW5lciwgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL3RyZWVvdXRsaW5lLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL3RyZWVvdXRsaW5lLmpzCmluZGV4IGExZTA1MmYuLjI3YmM4MzkgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC90cmVlb3V0bGluZS5qcworKysgYi9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvdHJlZW91dGxpbmUuanMKQEAgLTgyMSw2ICs4MjEsMTAgQEAgVHJl
ZUVsZW1lbnQucHJvdG90eXBlLnNlbGVjdCA9IGZ1bmN0aW9uKHN1cHJlc3NPblNlbGVjdCwgc2Vs
ZWN0ZWRCeVVzZXIpCiAKICAgICB0aGlzLnNlbGVjdGVkID0gdHJ1ZTsKICAgICB0aGlzLnRyZWVP
dXRsaW5lLl9jaGlsZHJlbkxpc3ROb2RlLmZvY3VzKCk7CisKKyAgICAvLyBGb2N1c2luZyBvbiBh
bm90aGVyIG5vZGUgbWF5IGRldGFjaCAidGhpcyIgZnJvbSB0cmVlLgorICAgIGlmICghdGhpcy50
cmVlT3V0bGluZSkKKyAgICAgICAgcmV0dXJuOwogICAgIHRoaXMudHJlZU91dGxpbmUuc2VsZWN0
ZWRUcmVlRWxlbWVudCA9IHRoaXM7CiAgICAgaWYgKHRoaXMuX2xpc3RJdGVtTm9kZSkKICAgICAg
ICAgdGhpcy5fbGlzdEl0ZW1Ob2RlLmFkZFN0eWxlQ2xhc3MoInNlbGVjdGVkIik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76052</attachid>
            <date>2010-12-09 05:33:49 -0800</date>
            <delta_ts>2010-12-10 09:12:38 -0800</delta_ts>
            <desc>[PATCH] Fixed handling of ;/: on Mac</desc>
            <filename>firebugcss.patch</filename>
            <type>text/plain</type>
            <size>44893</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">Y29tbWl0IGMwZmVmYjFlYTk2Yzg3ZDFkNmE3ZWI5NzQ4Yjc3ZjcxM2ExY2Y5ZWIKQXV0aG9yOiBB
bGV4YW5kZXIgUGF2bG92IDxhcGF2bG92QGNocm9taXVtLm9yZz4KRGF0ZTogICBGcmkgRGVjIDMg
MjA6MDc6NDMgMjAxMCArMDMwMAoKICAgIEZpcmVidWctbGlrZSBDU1MgZWRpdGluZyBpbiB0aGUg
U3R5bGVzIHBhbmUKCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKaW5kZXggMDgzZTJkZS4uYTA5Y2VjMCAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEz
IEBACisyMDEwLTEyLTA4ICBBbGV4YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIElu
c3BlY3RvcjogRW5hYmxlIENTUyBwcm9wZXJ0eSBlZGl0aW5nIG5hbWUvdmFsdWUtd2lzZSAobGlr
ZSBGaXJlYnVnIGRvZXMpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD01MDU2NQorCisgICAgICAgICogaW5zcGVjdG9yL2NvbnNvbGUtZGlyLmh0bWw6Cisg
ICAgICAgICogaW5zcGVjdG9yL3N0eWxlcy1hZGQtYmxhbmstcHJvcGVydHkuaHRtbDoKKwogMjAx
MC0xMi0wOSAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBOb3QgcmV2aWV3ZWQuIFJlYmFzZWxpbmVkIENocm9taXVtIGV4cGVjdGF0aW9ucy4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9jb25zb2xlLWRpci5odG1sIGIvTGF5b3V0VGVz
dHMvaW5zcGVjdG9yL2NvbnNvbGUtZGlyLmh0bWwKaW5kZXggNTNmN2RiZS4uMTkyZjcxMCAxMDA3
NTUKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2NvbnNvbGUtZGlyLmh0bWwKKysrIGIvTGF5
b3V0VGVzdHMvaW5zcGVjdG9yL2NvbnNvbGUtZGlyLmh0bWwKQEAgLTM3LDkgKzM3LDkgQEAgZnVu
Y3Rpb24gZnJvbnRlbmRfZXhwYW5kQW5kRHVtcENvbnNvbGVNZXNzYWdlcyh0ZXN0Q29udHJvbGxl
cikKICAgICAgICAgdmFyIGVsZW1lbnQgPSBtZXNzYWdlc1tpXS50b01lc3NhZ2VFbGVtZW50KCk7
CiAgICAgICAgIHZhciBub2RlID0gZWxlbWVudC50cmF2ZXJzZU5leHROb2RlKGVsZW1lbnQpOwog
ICAgICAgICB3aGlsZSAobm9kZSkgewotICAgICAgICAgICAgaWYgKG5vZGUuc2VjdGlvbkZvclRl
c3QpIHsKLSAgICAgICAgICAgICAgICBtZXNzYWdlc1tpXS5zZWN0aW9uID0gbm9kZS5zZWN0aW9u
Rm9yVGVzdDsKLSAgICAgICAgICAgICAgICBub2RlLnNlY3Rpb25Gb3JUZXN0LmV4cGFuZGVkID0g
dHJ1ZTsKKyAgICAgICAgICAgIGlmIChub2RlLl9zZWN0aW9uKSB7CisgICAgICAgICAgICAgICAg
bWVzc2FnZXNbaV0uc2VjdGlvbiA9IG5vZGUuX3NlY3Rpb247CisgICAgICAgICAgICAgICAgbm9k
ZS5fc2VjdGlvbi5leHBhbmRlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBub2RlID0gbm9kZS50cmF2ZXJzZU5leHROb2RlKGVsZW1l
bnQpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy1hZGQtYmxhbmst
cHJvcGVydHkuaHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMtYWRkLWJsYW5rLXBy
b3BlcnR5Lmh0bWwKaW5kZXggMDEzYzMxMS4uZmQzNmE5NSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvaW5zcGVjdG9yL3N0eWxlcy1hZGQtYmxhbmstcHJvcGVydHkuaHRtbAorKysgYi9MYXlvdXRU
ZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLWFkZC1ibGFuay1wcm9wZXJ0eS5odG1sCkBAIC0zOSw4ICsz
OSw5IEBAIGZ1bmN0aW9uIGZyb250ZW5kX2R1bXBJbnNwZWN0ZWRTdHlsZSh0ZXN0Q29udHJvbGxl
cikKIAogICAgIHZhciBldnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgiS2V5Ym9hcmRFdmVudCIp
OwogICAgIGV2dC5pbml0S2V5Ym9hcmRFdmVudCgia2V5ZG93biIsIHRydWUgLyogY2FuIGJ1YmJs
ZSAqLywgdHJ1ZSAvKiBjYW4gY2FuY2VsICovLCBudWxsIC8qIHZpZXcgKi8sICJFbnRlciIsICIi
KTsKLSAgICB0cmVlRWxlbWVudC5saXN0SXRlbUVsZW1lbnQudGV4dENvbnRlbnQgPSAidGV4dC1k
ZWNvcmF0aW9uOiBub25lIjsKLSAgICB0cmVlRWxlbWVudC5saXN0SXRlbUVsZW1lbnQuZGlzcGF0
Y2hFdmVudChldnQpOworICAgIHRyZWVFbGVtZW50Lm5hbWVFbGVtZW50LnRleHRDb250ZW50ID0g
InRleHQtZGVjb3JhdGlvbiI7CisgICAgdHJlZUVsZW1lbnQudmFsdWVFbGVtZW50LnRleHRDb250
ZW50ID0gIm5vbmUiOworICAgIHRyZWVFbGVtZW50Lm5hbWVFbGVtZW50LmRpc3BhdGNoRXZlbnQo
ZXZ0KTsKIAogICAgIHRlc3RDb250cm9sbGVyLnJ1bkFmdGVyUGVuZGluZ0Rpc3BhdGNoZXMoZnJv
bnRlbmRfZHVtcFJlc3VsdHMuYmluZCh0aGlzLCB0ZXN0Q29udHJvbGxlcikpOwogfQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwNmI0OGI4
Li41ZmUyMTBlIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0No
YW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDEwLTEyLTA4ICBBbGV4YW5kZXIgUGF2bG92ICA8
YXBhdmxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogRW5hYmxlIENTUyBwcm9wZXJ0eSBlZGl0aW5n
IG5hbWUvdmFsdWUtd2lzZSAobGlrZSBGaXJlYnVnIGRvZXMpCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MDU2NQorCisgICAgICAgIEZvciBDU1MgcHJv
cGVydHkgZWRpdGluZywgdGhlIHByb3BlcnR5IG5hbWUgYW5kIHZhbHVlIGhhdmUgYmVjb21lIHR3
byBmaWVsZHMgc2VwYXJhdGVkCisgICAgICAgIGJ5IGEgY29sb24gKHJhdGhlciB0aGFuIG9uZSBm
aWVsZCBjb250YWluaW5nIHRoZSBmdWxsIHByb3BlcnR5IHRleHQuKSBBIHVzZXIgY2FuIHRhYgor
ICAgICAgICBiZXR3ZWVuIHRoZSBuYW1lIGFuZCB2YWx1ZSBmaWVsZHMgZm9yd2FyZCBhbmQgYmFj
a3dhcmQuIEEgY29sb24gdHlwZWQgaW4gdGhlIG5hbWUgZmllbGQKKyAgICAgICAgYW5kIGEgc2Vt
aWNvbG9uIGluIHRoZSB2YWx1ZSBmaWVsZCAodW5sZXNzIGZvdW5kIGluc2lkZSBhIHN0cmluZykg
YWN0IGFzIGEgVGFiIGFuZCBmb2N1cworICAgICAgICB0aGUgbmV4dCBlZGl0YWJsZSBmaWVsZCAo
d2hpbGUgYXBwbHlpbmcgdGhlIGVudGlyZSBwcm9wZXJ0eSB2YWx1ZS4pIE9uY2UgYSBydWxlIGJv
dW5kYXJ5CisgICAgICAgIGlzIHJlYWNoZWQsIHRoZSBlZGl0aW5nIHN0YXJ0cyBmb3IgdGhlIG5l
eHQgcnVsZSBzZWxlY3Rvci9wcmV2aW91cyBzdHlsZSBibGFuayBwcm9wZXJ0eS4KKworICAgICAg
ICAqIGluc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5qczoKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5YSFJCcmVha3BvaW50c1NpZGViYXJQYW5lLnByb3RvdHlwZS5fc3Rh
cnRFZGl0aW5nQnJlYWtwb2ludCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9EYXRh
R3JpZC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRhR3JpZC5wcm90b3R5cGUuX3N0YXJ0
RWRpdGluZ0NvbHVtbk9mRGF0YUdyaWROb2RlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EYXRh
R3JpZC5wcm90b3R5cGUuX3N0YXJ0RWRpdGluZyk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250
LWVuZC9FbGVtZW50c1RyZWVPdXRsaW5lLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkVsZW1l
bnRzVHJlZUVsZW1lbnQucHJvdG90eXBlLl9zdGFydEVkaXRpbmdBdHRyaWJ1dGUpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkVsZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBlLl9zdGFydEVkaXRp
bmdUZXh0Tm9kZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5w
cm90b3R5cGUuX3N0YXJ0RWRpdGluZ1RhZ05hbWUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkVs
ZW1lbnRzVHJlZUVsZW1lbnQucHJvdG90eXBlLl9zdGFydEVkaXRpbmdBc0hUTUwpOgorICAgICAg
ICAqIGluc3BlY3Rvci9mcm9udC1lbmQvTWV0cmljc1NpZGViYXJQYW5lLmpzOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLk1ldHJpY3NTaWRlYmFyUGFuZS5wcm90b3R5cGUuc3RhcnRFZGl0aW5nKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL09iamVjdFByb3BlcnRpZXNTZWN0aW9uLmpz
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLk9iamVjdFByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90
eXBlLnN0YXJ0RWRpdGluZyk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9TZWN0aW9u
LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNlY3Rpb24pOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlNlY3Rpb24ucHJvdG90eXBlLmdldCBzdWJ0aXRsZUFzVGV4dEZvclRlc3QpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlNlY3Rpb24ucHJvdG90eXBlLmdldCBuZXh0U2libGluZyk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuU2VjdGlvbi5wcm90b3R5cGUuZ2V0IHByZXZpb3VzU2libGluZyk6
CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qczoKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuX2VkaXRCcmVha3BvaW50Q29uZGl0
aW9uKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1N0eWxlc1NpZGViYXJQYW5lLmpz
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydGllc1NlY3Rpb24ucHJvdG90eXBl
Lm5leHRFZGl0YWJsZVNpYmxpbmcpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVy
dGllc1NlY3Rpb24ucHJvdG90eXBlLnByZXZpb3VzRWRpdGFibGVTaWJsaW5nKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnRpZXNTZWN0aW9uLnByb3RvdHlwZS5hZGROZXdCbGFu
a1Byb3BlcnR5KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnRpZXNTZWN0aW9u
LnByb3RvdHlwZS5zdGFydEVkaXRpbmdTZWxlY3Rvcik6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
U3R5bGVQcm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGUuZWRpdGluZ1NlbGVjdG9yQ29tbWl0dGVk
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90
eXBlLik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnBy
b3RvdHlwZSk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0Vmlld2VyLmpzOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBlLl9oYW5kbGVEb3VibGVD
bGljayk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9XYXRjaEV4cHJlc3Npb25zU2lk
ZWJhclBhbmUuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuV2F0Y2hFeHByZXNzaW9uVHJlZUVs
ZW1lbnQucHJvdG90eXBlLnN0YXJ0RWRpdGluZyk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250
LWVuZC9pbnNwZWN0b3IuY3NzOgorICAgICAgICAoLmNoaWxkLWVkaXRpbmcpOgorICAgICAgICAq
IGluc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LnN0YXJ0RWRpdGluZy5kZWZhdWx0RmluaXNoSGFuZGxlcik6CisgICAgICAgIChXZWJJbnNwZWN0
b3Iuc3RhcnRFZGl0aW5nKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL3RyZWVvdXRs
aW5lLmpzOgorICAgICAgICAoVHJlZUVsZW1lbnQucHJvdG90eXBlLnNlbGVjdCk6CisKIDIwMTAt
MTItMDkgIEd1c3Rhdm8gTm9yb25oYSBTaWx2YSAgPGd1c3Rhdm8ubm9yb25oYUBjb2xsYWJvcmEu
Y28udWs+CiAKICAgICAgICAgQnVpbGQgZml4IGZvciBHVEsrMy4gVXNlIGZ1bmN0aW9ucyBhZGRl
ZCBmb3IgR1RLKyAyLjI0IHRvIGdldCB0aGUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9CcmVha3BvaW50c1NpZGViYXJQYW5lLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0JyZWFrcG9pbnRzU2lkZWJhclBhbmUuanMKaW5kZXggNDcxOTRkYS4uZTVkZGIw
YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRzU2lk
ZWJhclBhbmUuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRz
U2lkZWJhclBhbmUuanMKQEAgLTE0NSw3ICsxNDUsNyBAQCBXZWJJbnNwZWN0b3IuWEhSQnJlYWtw
b2ludHNTaWRlYmFyUGFuZS5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgdmFyIGNvbW1pdEhhbmRs
ZXIgPSB0aGlzLl9oaWRlRWRpdEJyZWFrcG9pbnREaWFsb2cuYmluZCh0aGlzLCBpbnB1dEVsZW1l
bnQsIHRydWUsIGJyZWFrcG9pbnRJdGVtKTsKICAgICAgICAgdmFyIGNhbmNlbEhhbmRsZXIgPSB0
aGlzLl9oaWRlRWRpdEJyZWFrcG9pbnREaWFsb2cuYmluZCh0aGlzLCBpbnB1dEVsZW1lbnQsIGZh
bHNlLCBicmVha3BvaW50SXRlbSk7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5zdGFydEVkaXRpbmco
aW5wdXRFbGVtZW50LCBjb21taXRIYW5kbGVyLCBjYW5jZWxIYW5kbGVyKTsKKyAgICAgICAgV2Vi
SW5zcGVjdG9yLnN0YXJ0RWRpdGluZyhpbnB1dEVsZW1lbnQsIHsgY29tbWl0SGFuZGxlcjogY29t
bWl0SGFuZGxlciwgY2FuY2VsSGFuZGxlcjogY2FuY2VsSGFuZGxlciB9KTsKICAgICB9LAogCiAg
ICAgX2hpZGVFZGl0QnJlYWtwb2ludERpYWxvZzogZnVuY3Rpb24oaW5wdXRFbGVtZW50LCBhY2Nl
cHQsIGJyZWFrcG9pbnRJdGVtKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL0RhdGFHcmlkLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RhdGFHcmlkLmpz
CmluZGV4IDkwMjA2MmMuLjRhNTFhYzMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9EYXRhR3JpZC5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGF0
YUdyaWQuanMKQEAgLTE2OSw3ICsxNjksNyBAQCBXZWJJbnNwZWN0b3IuRGF0YUdyaWQucHJvdG90
eXBlID0gewogICAgICAgICB0aGlzLl9lZGl0aW5nTm9kZS5zZWxlY3QoKTsKIAogICAgICAgICB2
YXIgZWxlbWVudCA9IHRoaXMuX2VkaXRpbmdOb2RlLl9lbGVtZW50LmNoaWxkcmVuW2NvbHVtbl07
Ci0gICAgICAgIFdlYkluc3BlY3Rvci5zdGFydEVkaXRpbmcoZWxlbWVudCwgdGhpcy5fZWRpdGlu
Z0NvbW1pdHRlZC5iaW5kKHRoaXMpLCB0aGlzLl9lZGl0aW5nQ2FuY2VsbGVkLmJpbmQodGhpcyks
IGVsZW1lbnQudGV4dENvbnRlbnQpOworICAgICAgICBXZWJJbnNwZWN0b3Iuc3RhcnRFZGl0aW5n
KGVsZW1lbnQsIHsgY29tbWl0SGFuZGxlcjogdGhpcy5fZWRpdGluZ0NvbW1pdHRlZC5iaW5kKHRo
aXMpLCBjYW5jZWxIYW5kbGVyOiB0aGlzLl9lZGl0aW5nQ2FuY2VsbGVkLmJpbmQodGhpcykgfSwg
ZWxlbWVudC50ZXh0Q29udGVudCk7CiAgICAgICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5zZXRC
YXNlQW5kRXh0ZW50KGVsZW1lbnQsIDAsIGVsZW1lbnQsIDEpOwogICAgIH0sCiAKQEAgLTE5MSw3
ICsxOTEsNyBAQCBXZWJJbnNwZWN0b3IuRGF0YUdyaWQucHJvdG90eXBlID0gewogICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX3N0YXJ0RWRpdGluZ0NvbHVtbk9mRGF0YUdyaWROb2RlKHRoaXMuX2Vk
aXRpbmdOb2RlLCAwKTsKIAogICAgICAgICB0aGlzLl9lZGl0aW5nID0gdHJ1ZTsKLSAgICAgICAg
V2ViSW5zcGVjdG9yLnN0YXJ0RWRpdGluZyhlbGVtZW50LCB0aGlzLl9lZGl0aW5nQ29tbWl0dGVk
LmJpbmQodGhpcyksIHRoaXMuX2VkaXRpbmdDYW5jZWxsZWQuYmluZCh0aGlzKSwgZWxlbWVudC50
ZXh0Q29udGVudCk7CisgICAgICAgIFdlYkluc3BlY3Rvci5zdGFydEVkaXRpbmcoZWxlbWVudCwg
eyBjb21taXRIYW5kbGVyOiB0aGlzLl9lZGl0aW5nQ29tbWl0dGVkLmJpbmQodGhpcyksIGNhbmNl
bEhhbmRsZXI6IHRoaXMuX2VkaXRpbmdDYW5jZWxsZWQuYmluZCh0aGlzKSB9LCBlbGVtZW50LnRl
eHRDb250ZW50KTsKICAgICAgICAgd2luZG93LmdldFNlbGVjdGlvbigpLnNldEJhc2VBbmRFeHRl
bnQoZWxlbWVudCwgMCwgZWxlbWVudCwgMSk7CiAgICAgfSwKIApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0VsZW1lbnRzVHJlZU91dGxpbmUuanMgYi9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNUcmVlT3V0bGluZS5qcwppbmRleCAwMmE3OTExLi4y
MjhmNzI0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNU
cmVlT3V0bGluZS5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRWxlbWVudHNU
cmVlT3V0bGluZS5qcwpAQCAtODcyLDcgKzg3Miw3IEBAIFdlYkluc3BlY3Rvci5FbGVtZW50c1Ry
ZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgLy8gUmVtb3ZlIHplcm8td2lkdGggc3Bh
Y2VzIHRoYXQgd2VyZSBhZGRlZCBieSBub2RlVGl0bGVJbmZvLgogICAgICAgICByZW1vdmVaZXJv
V2lkdGhTcGFjZVJlY3Vyc2l2ZShhdHRyaWJ1dGUpOwogCi0gICAgICAgIHRoaXMuX2VkaXRpbmcg
PSBXZWJJbnNwZWN0b3Iuc3RhcnRFZGl0aW5nKGF0dHJpYnV0ZSwgdGhpcy5fYXR0cmlidXRlRWRp
dGluZ0NvbW1pdHRlZC5iaW5kKHRoaXMpLCB0aGlzLl9lZGl0aW5nQ2FuY2VsbGVkLmJpbmQodGhp
cyksIGF0dHJpYnV0ZU5hbWUpOworICAgICAgICB0aGlzLl9lZGl0aW5nID0gV2ViSW5zcGVjdG9y
LnN0YXJ0RWRpdGluZyhhdHRyaWJ1dGUsIHsgY29tbWl0SGFuZGxlcjogdGhpcy5fYXR0cmlidXRl
RWRpdGluZ0NvbW1pdHRlZC5iaW5kKHRoaXMpLCBjYW5jZWxIYW5kbGVyOiB0aGlzLl9lZGl0aW5n
Q2FuY2VsbGVkLmJpbmQodGhpcykgfSwgYXR0cmlidXRlTmFtZSk7CiAgICAgICAgIHdpbmRvdy5n
ZXRTZWxlY3Rpb24oKS5zZXRCYXNlQW5kRXh0ZW50KGVsZW1lbnRGb3JTZWxlY3Rpb24sIDAsIGVs
ZW1lbnRGb3JTZWxlY3Rpb24sIDEpOwogCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtODgzLDcg
Kzg4Myw3IEBAIFdlYkluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsK
ICAgICAgICAgaWYgKFdlYkluc3BlY3Rvci5pc0JlaW5nRWRpdGVkKHRleHROb2RlKSkKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgICAgIHRoaXMuX2VkaXRpbmcgPSBXZWJJbnNwZWN0
b3Iuc3RhcnRFZGl0aW5nKHRleHROb2RlLCB0aGlzLl90ZXh0Tm9kZUVkaXRpbmdDb21taXR0ZWQu
YmluZCh0aGlzKSwgdGhpcy5fZWRpdGluZ0NhbmNlbGxlZC5iaW5kKHRoaXMpKTsKKyAgICAgICAg
dGhpcy5fZWRpdGluZyA9IFdlYkluc3BlY3Rvci5zdGFydEVkaXRpbmcodGV4dE5vZGUsIHsgY29t
bWl0SGFuZGxlcjogdGhpcy5fdGV4dE5vZGVFZGl0aW5nQ29tbWl0dGVkLmJpbmQodGhpcyksIGNh
bmNlbEhhbmRsZXI6IHRoaXMuX2VkaXRpbmdDYW5jZWxsZWQuYmluZCh0aGlzKSB9LCBudWxsKTsK
ICAgICAgICAgd2luZG93LmdldFNlbGVjdGlvbigpLnNldEJhc2VBbmRFeHRlbnQodGV4dE5vZGUs
IDAsIHRleHROb2RlLCAxKTsKIAogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTkyNiw3ICs5MjYs
NyBAQCBXZWJJbnNwZWN0b3IuRWxlbWVudHNUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAKICAg
ICAgICAgdGFnTmFtZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCBrZXl1cExpc3Rl
bmVyLCBmYWxzZSk7CiAKLSAgICAgICAgdGhpcy5fZWRpdGluZyA9IFdlYkluc3BlY3Rvci5zdGFy
dEVkaXRpbmcodGFnTmFtZUVsZW1lbnQsIGVkaXRpbmdDb21pdHRlZC5iaW5kKHRoaXMpLCBlZGl0
aW5nQ2FuY2VsbGVkLmJpbmQodGhpcyksIHRhZ05hbWUpOworICAgICAgICB0aGlzLl9lZGl0aW5n
ID0gV2ViSW5zcGVjdG9yLnN0YXJ0RWRpdGluZyh0YWdOYW1lRWxlbWVudCwgeyBjb21taXRIYW5k
bGVyOiBlZGl0aW5nQ29taXR0ZWQuYmluZCh0aGlzKSwgY2FuY2VsSGFuZGxlcjogZWRpdGluZ0Nh
bmNlbGxlZC5iaW5kKHRoaXMpIH0sIHRhZ05hbWUpOwogICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0
aW9uKCkuc2V0QmFzZUFuZEV4dGVudCh0YWdOYW1lRWxlbWVudCwgMCwgdGFnTmFtZUVsZW1lbnQs
IDEpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9LApAQCAtOTgwLDcgKzk4MCw3IEBAIFdl
Ykluc3BlY3Rvci5FbGVtZW50c1RyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAg
IHRoaXMudXBkYXRlU2VsZWN0aW9uKCk7CiAgICAgICAgIH0KIAotICAgICAgICB0aGlzLl9lZGl0
aW5nID0gV2ViSW5zcGVjdG9yLnN0YXJ0RWRpdGluZyh0aGlzLl9odG1sRWRpdEVsZW1lbnQsIGNv
bW1pdC5iaW5kKHRoaXMpLCBkaXNwb3NlLmJpbmQodGhpcyksIG51bGwsIHRydWUpOworICAgICAg
ICB0aGlzLl9lZGl0aW5nID0gV2ViSW5zcGVjdG9yLnN0YXJ0RWRpdGluZyh0aGlzLl9odG1sRWRp
dEVsZW1lbnQsIHsgY29tbWl0SGFuZGxlcjogY29tbWl0LmJpbmQodGhpcyksIGNhbmNlbEhhbmRs
ZXI6IGRpc3Bvc2UuYmluZCh0aGlzKSwgbXVsdGlsaW5lOiB0cnVlIH0sIG51bGwpOwogICAgIH0s
CiAKICAgICBfYXR0cmlidXRlRWRpdGluZ0NvbW1pdHRlZDogZnVuY3Rpb24oZWxlbWVudCwgbmV3
VGV4dCwgb2xkVGV4dCwgYXR0cmlidXRlTmFtZSwgbW92ZURpcmVjdGlvbikKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9NZXRyaWNzU2lkZWJhclBhbmUuanMgYi9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvTWV0cmljc1NpZGViYXJQYW5lLmpzCmluZGV4IDM3ODRj
ZTguLjU2MGU0OTUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9NZXRy
aWNzU2lkZWJhclBhbmUuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL01ldHJp
Y3NTaWRlYmFyUGFuZS5qcwpAQCAtMTc1LDcgKzE3NSw3IEBAIFdlYkluc3BlY3Rvci5NZXRyaWNz
U2lkZWJhclBhbmUucHJvdG90eXBlID0gewogCiAgICAgICAgIHZhciBjb250ZXh0ID0geyBib3g6
IGJveCwgc3R5bGVQcm9wZXJ0eTogc3R5bGVQcm9wZXJ0eSB9OwogCi0gICAgICAgIFdlYkluc3Bl
Y3Rvci5zdGFydEVkaXRpbmcodGFyZ2V0RWxlbWVudCwgdGhpcy5lZGl0aW5nQ29tbWl0dGVkLmJp
bmQodGhpcyksIHRoaXMuZWRpdGluZ0NhbmNlbGxlZC5iaW5kKHRoaXMpLCBjb250ZXh0KTsKKyAg
ICAgICAgV2ViSW5zcGVjdG9yLnN0YXJ0RWRpdGluZyh0YXJnZXRFbGVtZW50LCB7IGNvbW1pdEhh
bmRsZXI6IHRoaXMuZWRpdGluZ0NvbW1pdHRlZC5iaW5kKHRoaXMpLCBjYW5jZWxIYW5kbGVyOiB0
aGlzLmVkaXRpbmdDYW5jZWxsZWQuYmluZCh0aGlzKSB9LCBjb250ZXh0KTsKICAgICB9LAogCiAg
ICAgZWRpdGluZ0NhbmNlbGxlZDogZnVuY3Rpb24oZWxlbWVudCwgY29udGV4dCkKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9PYmplY3RQcm9wZXJ0aWVzU2VjdGlvbi5q
cyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9PYmplY3RQcm9wZXJ0aWVzU2VjdGlvbi5q
cwppbmRleCA2NGUyMTRmLi40MGFhYmI1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvT2JqZWN0UHJvcGVydGllc1NlY3Rpb24uanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL09iamVjdFByb3BlcnRpZXNTZWN0aW9uLmpzCkBAIC0yMzgsNyArMjM4LDcg
QEAgV2ViSW5zcGVjdG9yLk9iamVjdFByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlID0gewog
CiAgICAgICAgIHRoaXMubGlzdEl0ZW1FbGVtZW50LmFkZFN0eWxlQ2xhc3MoImVkaXRpbmctc3Vi
LXBhcnQiKTsKIAotICAgICAgICBXZWJJbnNwZWN0b3Iuc3RhcnRFZGl0aW5nKHRoaXMudmFsdWVF
bGVtZW50LCB0aGlzLmVkaXRpbmdDb21taXR0ZWQuYmluZCh0aGlzKSwgdGhpcy5lZGl0aW5nQ2Fu
Y2VsbGVkLmJpbmQodGhpcyksIGNvbnRleHQpOworICAgICAgICBXZWJJbnNwZWN0b3Iuc3RhcnRF
ZGl0aW5nKHRoaXMudmFsdWVFbGVtZW50LCB7IGNvbW1pdEhhbmRsZXI6IHRoaXMuZWRpdGluZ0Nv
bW1pdHRlZC5iaW5kKHRoaXMpLCBjYW5jZWxIYW5kbGVyOiB0aGlzLmVkaXRpbmdDYW5jZWxsZWQu
YmluZCh0aGlzKSB9LCBjb250ZXh0KTsKICAgICB9LAogCiAgICAgZWRpdGluZ0VuZGVkOiBmdW5j
dGlvbihjb250ZXh0KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Nl
Y3Rpb24uanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2VjdGlvbi5qcwppbmRleCBh
MTg2ZDQzLi41Y2FhNzhiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
U2VjdGlvbi5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2VjdGlvbi5qcwpA
QCAtMzEsNyArMzEsNyBAQCBXZWJJbnNwZWN0b3IuU2VjdGlvbiA9IGZ1bmN0aW9uKHRpdGxlLCBz
dWJ0aXRsZSkKIHsKICAgICB0aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJk
aXYiKTsKICAgICB0aGlzLmVsZW1lbnQuY2xhc3NOYW1lID0gInNlY3Rpb24iOwotICAgIHRoaXMu
ZWxlbWVudC5zZWN0aW9uRm9yVGVzdCA9IHRoaXM7CisgICAgdGhpcy5lbGVtZW50Ll9zZWN0aW9u
ID0gdGhpczsKIAogICAgIHRoaXMuaGVhZGVyRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoImRpdiIpOwogICAgIHRoaXMuaGVhZGVyRWxlbWVudC5jbGFzc05hbWUgPSAiaGVhZGVyIjsK
QEAgLTg1LDE1ICs4NSwxNSBAQCBXZWJJbnNwZWN0b3IuU2VjdGlvbi5wcm90b3R5cGUgPSB7CiAg
ICAgICAgIHRoaXMuc3VidGl0bGVFbGVtZW50LnRleHRDb250ZW50ID0geDsKICAgICB9LAogCi0g
ICAgZ2V0IHN1YnRpdGxlQXNUZXh0Rm9yVGVzdCgpDQotICAgIHsNCi0gICAgICAgIHZhciByZXN1
bHQgPSB0aGlzLnN1YnRpdGxlRWxlbWVudC50ZXh0Q29udGVudDsNCi0gICAgICAgIHZhciBjaGls
ZCA9IHRoaXMuc3VidGl0bGVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIltkYXRhLXVuY29weWFibGVd
Iik7DQotICAgICAgICBpZiAoY2hpbGQpIHsNCi0gICAgICAgICAgICB2YXIgbGlua0RhdGEgPSBj
aGlsZC5nZXRBdHRyaWJ1dGUoImRhdGEtdW5jb3B5YWJsZSIpOw0KLSAgICAgICAgICAgIGlmIChs
aW5rRGF0YSkNCi0gICAgICAgICAgICAgICAgcmVzdWx0ICs9IGxpbmtEYXRhOw0KLSAgICAgICAg
fQ0KKyAgICBnZXQgc3VidGl0bGVBc1RleHRGb3JUZXN0KCkKKyAgICB7CisgICAgICAgIHZhciBy
ZXN1bHQgPSB0aGlzLnN1YnRpdGxlRWxlbWVudC50ZXh0Q29udGVudDsKKyAgICAgICAgdmFyIGNo
aWxkID0gdGhpcy5zdWJ0aXRsZUVsZW1lbnQucXVlcnlTZWxlY3RvcigiW2RhdGEtdW5jb3B5YWJs
ZV0iKTsKKyAgICAgICAgaWYgKGNoaWxkKSB7CisgICAgICAgICAgICB2YXIgbGlua0RhdGEgPSBj
aGlsZC5nZXRBdHRyaWJ1dGUoImRhdGEtdW5jb3B5YWJsZSIpOworICAgICAgICAgICAgaWYgKGxp
bmtEYXRhKQorICAgICAgICAgICAgICAgIHJlc3VsdCArPSBsaW5rRGF0YTsKKyAgICAgICAgfQog
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0sCiAKQEAgLTEyNCw2ICsxMjQsMjYgQEAgV2Vi
SW5zcGVjdG9yLlNlY3Rpb24ucHJvdG90eXBlID0gewogICAgICAgICB9CiAgICAgfSwKIAorICAg
IGdldCBuZXh0U2libGluZygpCisgICAgeworICAgICAgICB2YXIgY3VyRWxlbWVudCA9IHRoaXMu
ZWxlbWVudDsKKyAgICAgICAgZG8geworICAgICAgICAgICAgY3VyRWxlbWVudCA9IGN1ckVsZW1l
bnQubmV4dFNpYmxpbmc7CisgICAgICAgIH0gd2hpbGUgKGN1ckVsZW1lbnQgJiYgIWN1ckVsZW1l
bnQuX3NlY3Rpb24pOworCisgICAgICAgIHJldHVybiBjdXJFbGVtZW50ID8gY3VyRWxlbWVudC5f
c2VjdGlvbiA6IG51bGw7CisgICAgfSwKKworICAgIGdldCBwcmV2aW91c1NpYmxpbmcoKQorICAg
IHsKKyAgICAgICAgdmFyIGN1ckVsZW1lbnQgPSB0aGlzLmVsZW1lbnQ7CisgICAgICAgIGRvIHsK
KyAgICAgICAgICAgIGN1ckVsZW1lbnQgPSBjdXJFbGVtZW50LnByZXZpb3VzU2libGluZzsKKyAg
ICAgICAgfSB3aGlsZSAoY3VyRWxlbWVudCAmJiAhY3VyRWxlbWVudC5fc2VjdGlvbik7CisKKyAg
ICAgICAgcmV0dXJuIGN1ckVsZW1lbnQgPyBjdXJFbGVtZW50Ll9zZWN0aW9uIDogbnVsbDsKKyAg
ICB9LAorCiAgICAgZXhwYW5kOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICBpZiAodGhpcy5f
ZXhwYW5kZWQpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNl
RnJhbWUuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanMKaW5k
ZXggOGYxMDFlMi4uZGY0MjRjYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1NvdXJjZUZyYW1lLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3Vy
Y2VGcmFtZS5qcwpAQCAtNzAyLDcgKzcwMiw3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5w
cm90b3R5cGUgPSB7CiAgICAgICAgIHZhciBkaXNtaXNzZWRIYW5kbGVyID0gZGlzbWlzc2VkLmJp
bmQodGhpcyk7CiAgICAgICAgIHRoaXMuX2NvbmRpdGlvbkVkaXRvckVsZW1lbnQuYWRkRXZlbnRM
aXN0ZW5lcigiYmx1ciIsIGRpc21pc3NlZEhhbmRsZXIsIGZhbHNlKTsKIAotICAgICAgICBXZWJJ
bnNwZWN0b3Iuc3RhcnRFZGl0aW5nKHRoaXMuX2NvbmRpdGlvbkVkaXRvckVsZW1lbnQsIGNvbW1p
dHRlZC5iaW5kKHRoaXMpLCBkaXNtaXNzZWRIYW5kbGVyKTsKKyAgICAgICAgV2ViSW5zcGVjdG9y
LnN0YXJ0RWRpdGluZyh0aGlzLl9jb25kaXRpb25FZGl0b3JFbGVtZW50LCB7IGNvbW1pdEhhbmRs
ZXI6IGNvbW1pdHRlZC5iaW5kKHRoaXMpLCBjYW5jZWxIYW5kbGVyOiBkaXNtaXNzZWRIYW5kbGVy
IH0sIG51bGwpOwogICAgICAgICB0aGlzLl9jb25kaXRpb25FZGl0b3JFbGVtZW50LnZhbHVlID0g
YnJlYWtwb2ludC5jb25kaXRpb247CiAgICAgICAgIHRoaXMuX2NvbmRpdGlvbkVkaXRvckVsZW1l
bnQuc2VsZWN0KCk7CiAgICAgfSwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9TdHlsZXNTaWRlYmFyUGFuZS5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9T
dHlsZXNTaWRlYmFyUGFuZS5qcwppbmRleCBkYjcyNDg2Li4xZjA1NGMwIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU3R5bGVzU2lkZWJhclBhbmUuanMKKysrIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1N0eWxlc1NpZGViYXJQYW5lLmpzCkBAIC03MDQsNiAr
NzA0LDI2IEBAIFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnRpZXNTZWN0aW9uLnByb3RvdHlwZSA9
IHsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSwKIAorICAgIG5leHRFZGl0YWJsZVNpYmxp
bmc6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBjdXJTZWN0aW9uID0gdGhpczsKKyAg
ICAgICAgZG8geworICAgICAgICAgICAgY3VyU2VjdGlvbiA9IGN1clNlY3Rpb24ubmV4dFNpYmxp
bmc7CisgICAgICAgIH0gd2hpbGUgKGN1clNlY3Rpb24gJiYgIWN1clNlY3Rpb24uZWRpdGFibGUp
OworCisgICAgICAgIHJldHVybiBjdXJTZWN0aW9uOworICAgIH0sCisKKyAgICBwcmV2aW91c0Vk
aXRhYmxlU2libGluZzogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIGN1clNlY3Rpb24g
PSB0aGlzOworICAgICAgICBkbyB7CisgICAgICAgICAgICBjdXJTZWN0aW9uID0gY3VyU2VjdGlv
bi5wcmV2aW91c1NpYmxpbmc7CisgICAgICAgIH0gd2hpbGUgKGN1clNlY3Rpb24gJiYgIWN1clNl
Y3Rpb24uZWRpdGFibGUpOworCisgICAgICAgIHJldHVybiBjdXJTZWN0aW9uOworICAgIH0sCisK
ICAgICB1cGRhdGU6IGZ1bmN0aW9uKGZ1bGwpCiAgICAgewogICAgICAgICBpZiAoZnVsbCkgewpA
QCAtNzk1LDYgKzgxNSw3IEBAIFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnRpZXNTZWN0aW9uLnBy
b3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5wcm9wZXJ0aWVzVHJlZU91dGxpbmUuYXBwZW5kQ2hp
bGQoaXRlbSk7CiAgICAgICAgIGl0ZW0ubGlzdEl0ZW1FbGVtZW50LnRleHRDb250ZW50ID0gIiI7
CiAgICAgICAgIGl0ZW0uX25ld1Byb3BlcnR5ID0gdHJ1ZTsKKyAgICAgICAgaXRlbS51cGRhdGVU
aXRsZSgpOwogICAgICAgICByZXR1cm4gaXRlbTsKICAgICB9LAogCkBAIC04NzUsMjIgKzg5Niwz
MSBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGUgPSB7CiAg
ICAgICAgIGlmIChXZWJJbnNwZWN0b3IuaXNCZWluZ0VkaXRlZChlbGVtZW50KSkKICAgICAgICAg
ICAgIHJldHVybjsKIAotICAgICAgICBXZWJJbnNwZWN0b3Iuc3RhcnRFZGl0aW5nKHRoaXMuX3Nl
bGVjdG9yRWxlbWVudCwgdGhpcy5lZGl0aW5nU2VsZWN0b3JDb21taXR0ZWQuYmluZCh0aGlzKSwg
dGhpcy5lZGl0aW5nU2VsZWN0b3JDYW5jZWxsZWQuYmluZCh0aGlzKSwgbnVsbCk7CisgICAgICAg
IFdlYkluc3BlY3Rvci5zdGFydEVkaXRpbmcodGhpcy5fc2VsZWN0b3JFbGVtZW50LCB7IGNvbW1p
dEhhbmRsZXI6IHRoaXMuZWRpdGluZ1NlbGVjdG9yQ29tbWl0dGVkLmJpbmQodGhpcyksIGNhbmNl
bEhhbmRsZXI6IHRoaXMuZWRpdGluZ1NlbGVjdG9yQ2FuY2VsbGVkLmJpbmQodGhpcykgfSwgbnVs
bCk7CiAgICAgICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5zZXRCYXNlQW5kRXh0ZW50KGVsZW1l
bnQsIDAsIGVsZW1lbnQsIDEpOwogICAgIH0sCiAKICAgICBlZGl0aW5nU2VsZWN0b3JDb21taXR0
ZWQ6IGZ1bmN0aW9uKGVsZW1lbnQsIG5ld0NvbnRlbnQsIG9sZENvbnRlbnQsIGNvbnRleHQsIG1v
dmVEaXJlY3Rpb24pCiAgICAgewogICAgICAgICBmdW5jdGlvbiBtb3ZlVG9OZXh0SWZOZWVkZWQo
KSB7Ci0gICAgICAgICAgICBpZiAoIW1vdmVEaXJlY3Rpb24gfHwgbW92ZURpcmVjdGlvbiAhPT0g
ImZvcndhcmQiKQorICAgICAgICAgICAgaWYgKCFtb3ZlRGlyZWN0aW9uKQogICAgICAgICAgICAg
ICAgIHJldHVybjsKIAotICAgICAgICAgICAgdGhpcy5leHBhbmQoKTsKLSAgICAgICAgICAgIGlm
ICh0aGlzLnByb3BlcnRpZXNUcmVlT3V0bGluZS5jaGlsZHJlbi5sZW5ndGggPT09IDApCi0gICAg
ICAgICAgICAgICAgdGhpcy5hZGROZXdCbGFua1Byb3BlcnR5KCkuc3RhcnRFZGl0aW5nKCk7Ci0g
ICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IHRoaXMucHJvcGVy
dGllc1RyZWVPdXRsaW5lLmNoaWxkcmVuWzBdCi0gICAgICAgICAgICAgICAgaXRlbS5zdGFydEVk
aXRpbmcoaXRlbS52YWx1ZUVsZW1lbnQpOworICAgICAgICAgICAgaWYgKG1vdmVEaXJlY3Rpb24g
PT09ICJmb3J3YXJkIikgeworICAgICAgICAgICAgICAgIHRoaXMuZXhwYW5kKCk7CisgICAgICAg
ICAgICAgICAgaWYgKHRoaXMucHJvcGVydGllc1RyZWVPdXRsaW5lLmNoaWxkcmVuLmxlbmd0aCA9
PT0gMCkKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGROZXdCbGFua1Byb3BlcnR5KCkuc3Rh
cnRFZGl0aW5nKCk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IHZhciBpdGVtID0gdGhpcy5wcm9wZXJ0aWVzVHJlZU91dGxpbmUuY2hpbGRyZW5bMF0KKyAgICAg
ICAgICAgICAgICAgICAgaXRlbS5zdGFydEVkaXRpbmcoaXRlbS5uYW1lRWxlbWVudCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YXIg
cHJldmlvdXNTZWN0aW9uID0gdGhpcy5wcmV2aW91c0VkaXRhYmxlU2libGluZygpOworICAgICAg
ICAgICAgICAgIGlmICghcHJldmlvdXNTZWN0aW9uKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgICAgICAgICBwcmV2aW91c1NlY3Rpb24uZXhwYW5kKCk7CisgICAgICAg
ICAgICAgICAgcHJldmlvdXNTZWN0aW9uLmFkZE5ld0JsYW5rUHJvcGVydHkoKS5zdGFydEVkaXRp
bmcoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC0xMzQ2LDggKzEzNzYsMTEgQEAg
V2ViSW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAgICAg
ICAgIHRoaXMubGlzdEl0ZW1FbGVtZW50LmFwcGVuZENoaWxkKHZhbHVlRWxlbWVudCk7CiAgICAg
ICAgIHRoaXMubGlzdEl0ZW1FbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHRO
b2RlKCI7IikpOwogCi0gICAgICAgIGlmICghdGhpcy5wYXJzZWRPaykKKyAgICAgICAgaWYgKCF0
aGlzLnBhcnNlZE9rKSB7CisgICAgICAgICAgICAvLyBBdm9pZCBoYXZpbmcgbG9uZ2hhbmRzIHVu
ZGVyIGFuIGludmFsaWQgc2hvcnRoYW5kLgorICAgICAgICAgICAgdGhpcy5oYXNDaGlsZHJlbiA9
IGZhbHNlOwogICAgICAgICAgICAgdGhpcy5saXN0SXRlbUVsZW1lbnQuYWRkU3R5bGVDbGFzcygi
bm90LXBhcnNlZC1vayIpOworICAgICAgICB9CiAgICAgICAgIGlmICh0aGlzLnByb3BlcnR5Lmlu
YWN0aXZlKQogICAgICAgICAgICAgdGhpcy5saXN0SXRlbUVsZW1lbnQuYWRkU3R5bGVDbGFzcygi
aW5hY3RpdmUiKTsKIApAQCAtMTQ2MCw2MCArMTQ5MywxNDIgQEAgV2ViSW5zcGVjdG9yLlN0eWxl
UHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAgICAgICAgIGlmICh0aGlzLnBhcmVu
dC5zaG9ydGhhbmQpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgaWYgKFdlYkluc3Bl
Y3Rvci5pc0JlaW5nRWRpdGVkKHRoaXMubGlzdEl0ZW1FbGVtZW50KSB8fCAodGhpcy50cmVlT3V0
bGluZS5zZWN0aW9uICYmICF0aGlzLnRyZWVPdXRsaW5lLnNlY3Rpb24uZWRpdGFibGUpKQorICAg
ICAgICBpZiAodGhpcy50cmVlT3V0bGluZS5zZWN0aW9uICYmICF0aGlzLnRyZWVPdXRsaW5lLnNl
Y3Rpb24uZWRpdGFibGUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKCFzZWxl
Y3RFbGVtZW50KQorICAgICAgICAgICAgc2VsZWN0RWxlbWVudCA9IHRoaXMubmFtZUVsZW1lbnQ7
IC8vIE5vIGFyZ3VtZW50cyBwYXNzZWQgaW4gLSBlZGl0IHRoZSBuYW1lIGVsZW1lbnQgYnkgZGVm
YXVsdC4KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2VsZWN0RWxlbWVudCA9IHNlbGVjdEVs
ZW1lbnQuZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhDbGFzcygid2Via2l0LWNzcy1wcm9wZXJ0eSIp
IHx8IHNlbGVjdEVsZW1lbnQuZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhDbGFzcygidmFsdWUiKTsK
KworICAgICAgICB2YXIgaXNFZGl0aW5nTmFtZSA9IHNlbGVjdEVsZW1lbnQgPT09IHRoaXMubmFt
ZUVsZW1lbnQ7CisgICAgICAgIGlmICghaXNFZGl0aW5nTmFtZSAmJiBzZWxlY3RFbGVtZW50ICE9
PSB0aGlzLnZhbHVlRWxlbWVudCkgeworICAgICAgICAgICAgLy8gRG91YmxlLWNsaWNrIGluIHRo
ZSBMSSAtIHN0YXJ0IGVkaXRpbmcgdmFsdWUuCisgICAgICAgICAgICBpc0VkaXRpbmdOYW1lID0g
ZmFsc2U7CisgICAgICAgICAgICBzZWxlY3RFbGVtZW50ID0gdGhpcy52YWx1ZUVsZW1lbnQ7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoV2ViSW5zcGVjdG9yLmlzQmVpbmdFZGl0ZWQoc2VsZWN0
RWxlbWVudCkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgdmFyIGNvbnRleHQgPSB7
CiAgICAgICAgICAgICBleHBhbmRlZDogdGhpcy5leHBhbmRlZCwKICAgICAgICAgICAgIGhhc0No
aWxkcmVuOiB0aGlzLmhhc0NoaWxkcmVuLAotICAgICAgICAgICAga2V5RG93bkxpc3RlbmVyOiB0
aGlzLmVkaXRpbmdLZXlEb3duLmJpbmQodGhpcyksCi0gICAgICAgICAgICBrZXlQcmVzc0xpc3Rl
bmVyOiB0aGlzLmVkaXRpbmdLZXlQcmVzcy5iaW5kKHRoaXMpCisgICAgICAgICAgICBrZXlEb3du
TGlzdGVuZXI6IGlzRWRpdGluZ05hbWUgPyB0aGlzLmVkaXRpbmdOYW1lS2V5RG93bi5iaW5kKHRo
aXMpIDogdGhpcy5lZGl0aW5nVmFsdWVLZXlEb3duLmJpbmQodGhpcyksCisgICAgICAgICAgICBr
ZXlQcmVzc0xpc3RlbmVyOiBpc0VkaXRpbmdOYW1lID8gdGhpcy5lZGl0aW5nTmFtZUtleVByZXNz
LmJpbmQodGhpcykgOiB0aGlzLmVkaXRpbmdWYWx1ZUtleVByZXNzLmJpbmQodGhpcyksCisgICAg
ICAgICAgICBpc0VkaXRpbmdOYW1lOiBpc0VkaXRpbmdOYW1lLAogICAgICAgICB9OwogCiAgICAg
ICAgIC8vIExpZSBhYm91dCBvdXIgY2hpbGRyZW4gdG8gcHJldmVudCBleHBhbmRpbmcgb24gZG91
YmxlIGNsaWNrIGFuZCB0byBjb2xsYXBzZSBzaG9ydGhhbmRzLgogICAgICAgICB0aGlzLmhhc0No
aWxkcmVuID0gZmFsc2U7CiAKLSAgICAgICAgaWYgKCFzZWxlY3RFbGVtZW50KQotICAgICAgICAg
ICAgc2VsZWN0RWxlbWVudCA9IHRoaXMubGlzdEl0ZW1FbGVtZW50OworICAgICAgICBzZWxlY3RF
bGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCBjb250ZXh0LmtleURvd25MaXN0ZW5l
ciwgZmFsc2UpOworICAgICAgICBzZWxlY3RFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleXBy
ZXNzIiwgY29udGV4dC5rZXlQcmVzc0xpc3RlbmVyLCBmYWxzZSk7CisgICAgICAgIGlmIChzZWxl
Y3RFbGVtZW50LnBhcmVudEVsZW1lbnQpCisgICAgICAgICAgICBzZWxlY3RFbGVtZW50LnBhcmVu
dEVsZW1lbnQuYWRkU3R5bGVDbGFzcygiY2hpbGQtZWRpdGluZyIpOworICAgICAgICBzZWxlY3RF
bGVtZW50LnRleHRDb250ZW50ID0gc2VsZWN0RWxlbWVudC50ZXh0Q29udGVudDsgLy8gcmVtb3Zl
IGNvbG9yIHN3YXRjaCBhbmQgdGhlIGxpa2UKKworICAgICAgICBmdW5jdGlvbiBzaG91bGRDb21t
aXRWYWx1ZVNlbWljb2xvbih0ZXh0LCBjdXJzb3JQb3NpdGlvbikKKyAgICAgICAgeworICAgICAg
ICAgICAgLy8gRklYTUU6IHNob3VsZCB0aGlzIGFjY291bnQgZm9yIHNlbWljb2xvbnMgaW5zaWRl
IGNvbW1lbnRzPworICAgICAgICAgICAgdmFyIG9wZW5RdW90ZSA9ICIiOworICAgICAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBjdXJzb3JQb3NpdGlvbjsgKytpKSB7CisgICAgICAgICAgICAg
ICAgdmFyIGNoID0gdGV4dFtpXTsKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICJcXCIgJiYg
b3BlblF1b3RlICE9PSAiIikKKyAgICAgICAgICAgICAgICAgICAgKytpOyAvLyBza2lwIG5leHQg
Y2hhcmFjdGVyIGluc2lkZSBzdHJpbmcKKyAgICAgICAgICAgICAgICBlbHNlIGlmICghb3BlblF1
b3RlICYmIChjaCA9PT0gIlwiIiB8fCBjaCA9PT0gIiciKSkKKyAgICAgICAgICAgICAgICAgICAg
b3BlblF1b3RlID0gY2g7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAob3BlblF1b3RlID09PSBj
aCkKKyAgICAgICAgICAgICAgICAgICAgb3BlblF1b3RlID0gIiI7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICByZXR1cm4gIW9wZW5RdW90ZTsKKyAgICAgICAgfQogCi0gICAgICAgIHRoaXMu
bGlzdEl0ZW1FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCBjb250ZXh0LmtleURv
d25MaXN0ZW5lciwgZmFsc2UpOwotICAgICAgICB0aGlzLmxpc3RJdGVtRWxlbWVudC5hZGRFdmVu
dExpc3RlbmVyKCJrZXlwcmVzcyIsIGNvbnRleHQua2V5UHJlc3NMaXN0ZW5lciwgZmFsc2UpOwor
ICAgICAgICBmdW5jdGlvbiBuYW1lVmFsdWVGaW5pc2hIYW5kbGVyKGNvbnRleHQsIGlzRWRpdGlu
Z05hbWUsIGV2ZW50KQorICAgICAgICB7CisgICAgICAgICAgICAvLyBGSVhNRTogdGhlICI6Ii8i
OyIgZGV0ZWN0aW9uIGRvZXMgbm90IHdvcmsgZm9yIG5vbi1VUyBsYXlvdXRzIGR1ZSB0byB0aGUg
ZXZlbnQgYmVpbmcga2V5ZG93biByYXRoZXIgdGhhbiBrZXlwcmVzcy4KKyAgICAgICAgICAgIHZh
ciBpc0ZpZWxkSW5wdXRUZXJtaW5hdGVkID0gKGV2ZW50LmtleUNvZGUgPT09IFdlYkluc3BlY3Rv
ci5LZXlib2FyZFNob3J0Y3V0LktleXMuU2VtaWNvbG9uLmNvZGUpICYmCisgICAgICAgICAgICAg
ICAgKGlzRWRpdGluZ05hbWUgPyBldmVudC5zaGlmdEtleSA6ICghZXZlbnQuc2hpZnRLZXkgJiYg
c2hvdWxkQ29tbWl0VmFsdWVTZW1pY29sb24oZXZlbnQudGFyZ2V0LnRleHRDb250ZW50LCBldmVu
dC50YXJnZXQuc2VsZWN0aW9uTGVmdE9mZnNldCkpKTsKKyAgICAgICAgICAgIGlmIChpc0VudGVy
S2V5KGV2ZW50KSB8fCBpc0ZpZWxkSW5wdXRUZXJtaW5hdGVkKSB7CisgICAgICAgICAgICAgICAg
Ly8gRW50ZXIgb3IgY29sb24gKGZvciBuYW1lKS9zZW1pY29sb24gb3V0c2lkZSBvZiBzdHJpbmcg
KGZvciB2YWx1ZSkuCisgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gIm1vdmUtZm9yd2FyZCI7CisgICAgICAgICAgICB9IGVsc2Ug
aWYgKGV2ZW50LmtleUNvZGUgPT09IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0LktleXMu
RXNjLmNvZGUpCisgICAgICAgICAgICAgICAgcmV0dXJuICJjYW5jZWwiOworICAgICAgICAgICAg
ZWxzZSBpZiAoZXZlbnQua2V5SWRlbnRpZmllciA9PT0gIlUrMDAwOSIpIC8vIFRhYiBrZXkuCisg
ICAgICAgICAgICAgICAgcmV0dXJuICJtb3ZlLSIgKyAoZXZlbnQuc2hpZnRLZXkgPyAiYmFja3dh
cmQiIDogImZvcndhcmQiKTsKKyAgICAgICAgfQogCi0gICAgICAgIFdlYkluc3BlY3Rvci5zdGFy
dEVkaXRpbmcodGhpcy5saXN0SXRlbUVsZW1lbnQsIHRoaXMuZWRpdGluZ0NvbW1pdHRlZC5iaW5k
KHRoaXMpLCB0aGlzLmVkaXRpbmdDYW5jZWxsZWQuYmluZCh0aGlzKSwgY29udGV4dCk7CisgICAg
ICAgIFdlYkluc3BlY3Rvci5zdGFydEVkaXRpbmcoc2VsZWN0RWxlbWVudCwKKyAgICAgICAgICAg
IHsgY29tbWl0SGFuZGxlcjogdGhpcy5lZGl0aW5nQ29tbWl0dGVkLmJpbmQodGhpcyksIGNhbmNl
bEhhbmRsZXI6IHRoaXMuZWRpdGluZ0NhbmNlbGxlZC5iaW5kKHRoaXMpLCBjdXN0b21GaW5pc2hI
YW5kbGVyOiBuYW1lVmFsdWVGaW5pc2hIYW5kbGVyLmJpbmQodGhpcywgY29udGV4dCwgaXNFZGl0
aW5nTmFtZSkgfSwgY29udGV4dCk7CiAgICAgICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5zZXRC
YXNlQW5kRXh0ZW50KHNlbGVjdEVsZW1lbnQsIDAsIHNlbGVjdEVsZW1lbnQsIDEpOwogICAgIH0s
CiAKLSAgICBlZGl0aW5nS2V5UHJlc3M6IGZ1bmN0aW9uKGV2ZW50KQorICAgIGVkaXRpbmdOYW1l
S2V5UHJlc3M6IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKLSAgICAgICAgdmFyIHNlbGVjdGlvbiA9
IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKLSAgICAgICAgdmFyIGNvbG9uSW5kZXggPSB0aGlzLmxp
c3RJdGVtRWxlbWVudC50ZXh0Q29udGVudC5pbmRleE9mKCI6Iik7Ci0gICAgICAgIHZhciBzZWxl
Y3Rpb25MZWZ0T2Zmc2V0ID0gZXZlbnQudGFyZ2V0LnNlbGVjdGlvbkxlZnRPZmZzZXQ7Ci0KLSAg
ICAgICAgaWYgKGNvbG9uSW5kZXggPCAwIHx8IHNlbGVjdGlvbkxlZnRPZmZzZXQgPD0gY29sb25J
bmRleCkgewotICAgICAgICAgICAgLy8gQ29tcGxldGUgcHJvcGVydHkgbmFtZXMuCi0gICAgICAg
ICAgICB2YXIgY2hhcmFjdGVyID0gZXZlbnQuZGF0YS50b0xvd2VyQ2FzZSgpOwotICAgICAgICAg
ICAgaWYgKGNoYXJhY3RlciAmJiAvW2Etei1dLy50ZXN0KGNoYXJhY3RlcikpIHsKLSAgICAgICAg
ICAgICAgICB2YXIgcHJlZml4ID0gc2VsZWN0aW9uLmFuY2hvck5vZGUudGV4dENvbnRlbnQuc3Vi
c3RyaW5nKDAsIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQpOwotICAgICAgICAgICAgICAgIHZhciBw
cm9wZXJ0eSA9IFdlYkluc3BlY3Rvci5DU1NDb21wbGV0aW9ucy5maXJzdFN0YXJ0c1dpdGgocHJl
Zml4ICsgY2hhcmFjdGVyKTsKLQotICAgICAgICAgICAgICAgIGlmICghc2VsZWN0aW9uLmlzQ29s
bGFwc2VkKQotICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24uZGVsZXRlRnJvbURvY3VtZW50
KCk7Ci0KLSAgICAgICAgICAgICAgICB0aGlzLnJlc3RvcmVOYW1lRWxlbWVudCgpOwotCi0gICAg
ICAgICAgICAgICAgaWYgKHByb3BlcnR5KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwcm9w
ZXJ0eSAhPT0gdGhpcy5uYW1lRWxlbWVudC50ZXh0Q29udGVudCkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXMubmFtZUVsZW1lbnQudGV4dENvbnRlbnQgPSBwcm9wZXJ0eTsKLSAgICAgICAg
ICAgICAgICAgICAgdGhpcy5uYW1lRWxlbWVudC5maXJzdENoaWxkLnNlbGVjdChwcmVmaXgubGVu
Z3RoICsgMSk7Ci0gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Ci0g
ICAgICAgICAgICAgICAgfQorICAgICAgICAvLyBDb21wbGV0ZSBwcm9wZXJ0eSBuYW1lcy4KKyAg
ICAgICAgdmFyIGNoYXJhY3RlciA9IGV2ZW50LmRhdGEudG9Mb3dlckNhc2UoKTsKKyAgICAgICAg
aWYgKGNoYXJhY3RlciAmJiAvW2Etei1dLy50ZXN0KGNoYXJhY3RlcikpIHsKKyAgICAgICAgICAg
IHZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CisgICAgICAgICAgICB2YXIg
cHJlZml4ID0gc2VsZWN0aW9uLmFuY2hvck5vZGUudGV4dENvbnRlbnQuc3Vic3RyaW5nKDAsIHNl
bGVjdGlvbi5hbmNob3JPZmZzZXQpOworICAgICAgICAgICAgdmFyIHByb3BlcnR5ID0gV2ViSW5z
cGVjdG9yLkNTU0NvbXBsZXRpb25zLmZpcnN0U3RhcnRzV2l0aChwcmVmaXggKyBjaGFyYWN0ZXIp
OworCisgICAgICAgICAgICBpZiAoIXNlbGVjdGlvbi5pc0NvbGxhcHNlZCkKKyAgICAgICAgICAg
ICAgICBzZWxlY3Rpb24uZGVsZXRlRnJvbURvY3VtZW50KCk7CisKKyAgICAgICAgICAgIHRoaXMu
cmVzdG9yZU5hbWVFbGVtZW50KCk7CisKKyAgICAgICAgICAgIGlmIChwcm9wZXJ0eSkgeworICAg
ICAgICAgICAgICAgIGlmIChwcm9wZXJ0eSAhPT0gdGhpcy5uYW1lRWxlbWVudC50ZXh0Q29udGVu
dCkKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5uYW1lRWxlbWVudC50ZXh0Q29udGVudCA9IHBy
b3BlcnR5OworICAgICAgICAgICAgICAgIHRoaXMubmFtZUVsZW1lbnQuZmlyc3RDaGlsZC5zZWxl
Y3QocHJlZml4Lmxlbmd0aCArIDEpOworICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZh
dWx0KCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBG
SVhNRTogVGhpcyBzaG91bGQgY29tcGxldGUgcHJvcGVydHkgdmFsdWVzLgogICAgICAgICB9CiAg
ICAgfSwKIAotICAgIGVkaXRpbmdLZXlEb3duOiBmdW5jdGlvbihldmVudCkKKyAgICBlZGl0aW5n
VmFsdWVLZXlQcmVzczogZnVuY3Rpb24oZXZlbnQpCisgICAgeworICAgICAgICAvLyBGSVhNRTog
VGhpcyBzaG91bGQgY29tcGxldGUgcHJvcGVydHkgdmFsdWVzLgorICAgIH0sCisKKyAgICBlZGl0
aW5nTmFtZUtleURvd246IGZ1bmN0aW9uKGV2ZW50KQorICAgIHsKKyAgICAgICAgdmFyIHNob3dO
ZXh0OworICAgICAgICBpZiAoZXZlbnQua2V5SWRlbnRpZmllciA9PT0gIlVwIikKKyAgICAgICAg
ICAgIHNob3dOZXh0ID0gZmFsc2U7CisgICAgICAgIGVsc2UgaWYgKGV2ZW50LmtleUlkZW50aWZp
ZXIgPT09ICJEb3duIikKKyAgICAgICAgICAgIHNob3dOZXh0ID0gdHJ1ZTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBzZWxlY3Rpb24gPSB3aW5kb3cu
Z2V0U2VsZWN0aW9uKCk7CisgICAgICAgIGlmICghc2VsZWN0aW9uLnJhbmdlQ291bnQpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgdmFyIHNlbGVjdGlvblJhbmdlID0gc2VsZWN0aW9u
LmdldFJhbmdlQXQoMCk7CisgICAgICAgIGlmIChzZWxlY3Rpb25SYW5nZS5jb21tb25BbmNlc3Rv
ckNvbnRhaW5lciAhPT0gdGhpcy5uYW1lRWxlbWVudCAmJiAhc2VsZWN0aW9uUmFuZ2UuY29tbW9u
QW5jZXN0b3JDb250YWluZXIuaXNEZXNjZW5kYW50KHRoaXMubmFtZUVsZW1lbnQpKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIGNvbnN0IHN0eWxlVmFsdWVEZWxpbWV0ZXJzID0gIiBc
dFxuXCInOjssLygpIjsKKyAgICAgICAgdmFyIHdvcmRSYW5nZSA9IHNlbGVjdGlvblJhbmdlLnN0
YXJ0Q29udGFpbmVyLnJhbmdlT2ZXb3JkKHNlbGVjdGlvblJhbmdlLnN0YXJ0T2Zmc2V0LCBzdHls
ZVZhbHVlRGVsaW1ldGVycywgdGhpcy5uYW1lRWxlbWVudCk7CisgICAgICAgIHZhciB3b3JkU3Ry
aW5nID0gd29yZFJhbmdlLnRvU3RyaW5nKCk7CisgICAgICAgIHZhciBwcmVmaXggPSBzZWxlY3Rp
b25SYW5nZS5zdGFydENvbnRhaW5lci50ZXh0Q29udGVudC5zdWJzdHJpbmcoMCwgc2VsZWN0aW9u
UmFuZ2Uuc3RhcnRPZmZzZXQpOworICAgICAgICB2YXIgcHJvcGVydHk7CisKKyAgICAgICAgaWYg
KHNob3dOZXh0KQorICAgICAgICAgICAgcHJvcGVydHkgPSBXZWJJbnNwZWN0b3IuQ1NTQ29tcGxl
dGlvbnMubmV4dCh3b3JkU3RyaW5nLCBwcmVmaXgpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBwcm9wZXJ0eSA9IFdlYkluc3BlY3Rvci5DU1NDb21wbGV0aW9ucy5wcmV2aW91cyh3b3JkU3Ry
aW5nLCBwcmVmaXgpOworCisgICAgICAgIGlmIChwcm9wZXJ0eSkgeworICAgICAgICAgICAgdGhp
cy5uYW1lRWxlbWVudC50ZXh0Q29udGVudCA9IHByb3BlcnR5OworICAgICAgICAgICAgdGhpcy5u
YW1lRWxlbWVudC5maXJzdENoaWxkLnNlbGVjdChzZWxlY3Rpb25SYW5nZS5zdGFydE9mZnNldCk7
CisgICAgICAgIH0KKyAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICB9LAorCisg
ICAgZWRpdGluZ1ZhbHVlS2V5RG93bjogZnVuY3Rpb24oZXZlbnQpCiAgICAgewogICAgICAgICB2
YXIgYXJyb3dLZXlQcmVzc2VkID0gKGV2ZW50LmtleUlkZW50aWZpZXIgPT09ICJVcCIgfHwgZXZl
bnQua2V5SWRlbnRpZmllciA9PT0gIkRvd24iKTsKICAgICAgICAgdmFyIHBhZ2VLZXlQcmVzc2Vk
ID0gKGV2ZW50LmtleUlkZW50aWZpZXIgPT09ICJQYWdlVXAiIHx8IGV2ZW50LmtleUlkZW50aWZp
ZXIgPT09ICJQYWdlRG93biIpOwpAQCAtMTUyNSwzMyArMTY0MCwxMSBAQCBXZWJJbnNwZWN0b3Iu
U3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHJldHVy
bjsKIAogICAgICAgICB2YXIgc2VsZWN0aW9uUmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgw
KTsKLSAgICAgICAgaWYgKHNlbGVjdGlvblJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyICE9
PSB0aGlzLmxpc3RJdGVtRWxlbWVudCAmJiAhc2VsZWN0aW9uUmFuZ2UuY29tbW9uQW5jZXN0b3JD
b250YWluZXIuaXNEZXNjZW5kYW50KHRoaXMubGlzdEl0ZW1FbGVtZW50KSkKKyAgICAgICAgaWYg
KHNlbGVjdGlvblJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyICE9PSB0aGlzLnZhbHVlRWxl
bWVudCAmJiAhc2VsZWN0aW9uUmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIuaXNEZXNjZW5k
YW50KHRoaXMudmFsdWVFbGVtZW50KSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAv
LyBJZiB0aGVyZSBhcmUgc2V2ZXJhbCBwcm9wZXJ0aWVzIGluIHRoZSB0ZXh0LCBkbyBub3QgaGFu
ZGxlIGluY3JlbWVudHMvZGVjcmVtZW50cy4KLSAgICAgICAgdmFyIHRleHQgPSBldmVudC50YXJn
ZXQudGV4dENvbnRlbnQudHJpbSgpOwotICAgICAgICB2YXIgb3BlblF1b3RlOwotICAgICAgICB2
YXIgd2FzRXNjYXBlID0gZmFsc2U7Ci0gICAgICAgIC8vIEV4Y2x1ZGUgdGhlIGxhc3QgY2hhcmFj
dGVyIGZyb20gdGhlIGNoZWNrIHNpbmNlIGl0IGlzIGFsbG93ZWQgdG8gYmUgIjsiLgotICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IHRleHQubGVuZ3RoIC0gMTsgKytpKSB7Ci0gICAgICAgICAg
ICB2YXIgY2ggPSB0ZXh0LmNoYXJBdChpKTsKLSAgICAgICAgICAgIGlmIChjaCA9PT0gIlxcIikg
ewotICAgICAgICAgICAgICAgIHdhc0VzY2FwZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoY2ggPT09ICI7IiAmJiAhb3Bl
blF1b3RlKQotICAgICAgICAgICAgICAgIHJldHVybjsgLy8gRG8gbm90IGhhbmRsZSBuYW1lL3Zh
bHVlIHNoaWZ0cyBpZiB0aGUgcHJvcGVydHkgaXMgY29tcG91bmQuCi0gICAgICAgICAgICBpZiAo
KGNoID09PSAiJyIgfHwgY2ggPT09ICJcIiIpICYmICF3YXNFc2NhcGUpIHsKLSAgICAgICAgICAg
ICAgICBpZiAoIW9wZW5RdW90ZSkKLSAgICAgICAgICAgICAgICAgICAgb3BlblF1b3RlID0gY2g7
Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoY2ggPT09IG9wZW5RdW90ZSkKLSAgICAgICAgICAg
ICAgICAgICAgb3BlblF1b3RlID0gbnVsbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHdh
c0VzY2FwZSA9IGZhbHNlOwotICAgICAgICB9Ci0KICAgICAgICAgY29uc3Qgc3R5bGVWYWx1ZURl
bGltZXRlcnMgPSAiIFx0XG5cIic6OywvKCkiOwotICAgICAgICB2YXIgd29yZFJhbmdlID0gc2Vs
ZWN0aW9uUmFuZ2Uuc3RhcnRDb250YWluZXIucmFuZ2VPZldvcmQoc2VsZWN0aW9uUmFuZ2Uuc3Rh
cnRPZmZzZXQsIHN0eWxlVmFsdWVEZWxpbWV0ZXJzLCB0aGlzLmxpc3RJdGVtRWxlbWVudCk7Cisg
ICAgICAgIHZhciB3b3JkUmFuZ2UgPSBzZWxlY3Rpb25SYW5nZS5zdGFydENvbnRhaW5lci5yYW5n
ZU9mV29yZChzZWxlY3Rpb25SYW5nZS5zdGFydE9mZnNldCwgc3R5bGVWYWx1ZURlbGltZXRlcnMs
IHRoaXMudmFsdWVFbGVtZW50KTsKICAgICAgICAgdmFyIHdvcmRTdHJpbmcgPSB3b3JkUmFuZ2Uu
dG9TdHJpbmcoKTsKICAgICAgICAgdmFyIHJlcGxhY2VtZW50U3RyaW5nID0gd29yZFN0cmluZzsK
IApAQCAtMTU5MywyMiArMTY4Niw2IEBAIFdlYkluc3BlY3Rvci5TdHlsZVByb3BlcnR5VHJlZUVs
ZW1lbnQucHJvdG90eXBlID0gewogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICByZXBsYWNl
bWVudFN0cmluZyA9IHByZWZpeCArIG51bWJlciArIHN1ZmZpeDsKLSAgICAgICAgfSBlbHNlIGlm
IChzZWxlY3Rpb24uY29udGFpbnNOb2RlKHRoaXMubmFtZUVsZW1lbnQsIHRydWUpKSB7Ci0gICAg
ICAgICAgICB2YXIgcHJlZml4ID0gc2VsZWN0aW9uUmFuZ2Uuc3RhcnRDb250YWluZXIudGV4dENv
bnRlbnQuc3Vic3RyaW5nKDAsIHNlbGVjdGlvblJhbmdlLnN0YXJ0T2Zmc2V0KTsKLSAgICAgICAg
ICAgIHZhciBwcm9wZXJ0eTsKLQotICAgICAgICAgICAgaWYgKGV2ZW50LmtleUlkZW50aWZpZXIg
PT09ICJVcCIpCi0gICAgICAgICAgICAgICAgcHJvcGVydHkgPSBXZWJJbnNwZWN0b3IuQ1NTQ29t
cGxldGlvbnMucHJldmlvdXMod29yZFN0cmluZywgcHJlZml4KTsKLSAgICAgICAgICAgIGVsc2Ug
aWYgKGV2ZW50LmtleUlkZW50aWZpZXIgPT09ICJEb3duIikKLSAgICAgICAgICAgICAgICBwcm9w
ZXJ0eSA9IFdlYkluc3BlY3Rvci5DU1NDb21wbGV0aW9ucy5uZXh0KHdvcmRTdHJpbmcsIHByZWZp
eCk7Ci0KLSAgICAgICAgICAgIHZhciBzdGFydE9mZnNldCA9IHNlbGVjdGlvblJhbmdlLnN0YXJ0
T2Zmc2V0OwotICAgICAgICAgICAgaWYgKHByb3BlcnR5KSB7Ci0gICAgICAgICAgICAgICAgdGhp
cy5uYW1lRWxlbWVudC50ZXh0Q29udGVudCA9IHByb3BlcnR5OwotICAgICAgICAgICAgICAgIHRo
aXMubmFtZUVsZW1lbnQuZmlyc3RDaGlsZC5zZWxlY3Qoc3RhcnRPZmZzZXQpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKLSAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiB0aGlzIHNob3Vs
ZCBjeWNsZSB0aHJvdWdoIGtub3duIGtleXdvcmRzIGZvciB0aGUgY3VycmVudCBwcm9wZXJ0eSB2
YWx1ZS4KICAgICAgICAgfQpAQCAtMTYzMiw3ICsxNzA5LDkgQEAgV2ViSW5zcGVjdG9yLlN0eWxl
UHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICAvLyBpZiB0aGUg
ZWRpdGluZyBpcyBjYW5jZWxlZCBhbmQgYmVmb3JlIGVhY2ggYXBwbHkuCiAgICAgICAgICAgICB0
aGlzLm9yaWdpbmFsUHJvcGVydHlUZXh0ID0gdGhpcy5wcm9wZXJ0eS5wcm9wZXJ0eVRleHQ7CiAg
ICAgICAgIH0KLSAgICAgICAgdGhpcy5hcHBseVN0eWxlVGV4dCh0aGlzLmxpc3RJdGVtRWxlbWVu
dC50ZXh0Q29udGVudCk7CisKKyAgICAgICAgLy8gU3ludGhlc2l6ZSBwcm9wZXJ0eSB0ZXh0IGRp
c3JlZ2FyZGluZyBhbnkgY29tbWVudHMsIGN1c3RvbSB3aGl0ZXNwYWNlIGV0Yy4KKyAgICAgICAg
dGhpcy5hcHBseVN0eWxlVGV4dCh0aGlzLm5hbWVFbGVtZW50LnRleHRDb250ZW50ICsgIjogIiAr
IHRoaXMudmFsdWVFbGVtZW50LnRleHRDb250ZW50KTsKICAgICB9LAogCiAgICAgZWRpdGluZ0Vu
ZGVkOiBmdW5jdGlvbihjb250ZXh0KQpAQCAtMTY0MCw4ICsxNzE5LDEyIEBAIFdlYkluc3BlY3Rv
ci5TdHlsZVByb3BlcnR5VHJlZUVsZW1lbnQucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLmhh
c0NoaWxkcmVuID0gY29udGV4dC5oYXNDaGlsZHJlbjsKICAgICAgICAgaWYgKGNvbnRleHQuZXhw
YW5kZWQpCiAgICAgICAgICAgICB0aGlzLmV4cGFuZCgpOwotICAgICAgICB0aGlzLmxpc3RJdGVt
RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgY29udGV4dC5rZXlEb3duTGlz
dGVuZXIsIGZhbHNlKTsKLSAgICAgICAgdGhpcy5saXN0SXRlbUVsZW1lbnQucmVtb3ZlRXZlbnRM
aXN0ZW5lcigia2V5cHJlc3MiLCBjb250ZXh0LmtleVByZXNzTGlzdGVuZXIsIGZhbHNlKTsKKyAg
ICAgICAgdmFyIGVkaXRlZEVsZW1lbnQgPSBjb250ZXh0LmlzRWRpdGluZ05hbWUgPyB0aGlzLm5h
bWVFbGVtZW50IDogdGhpcy52YWx1ZUVsZW1lbnQ7CisgICAgICAgIGVkaXRlZEVsZW1lbnQucmVt
b3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIGNvbnRleHQua2V5RG93bkxpc3RlbmVyLCBmYWxz
ZSk7CisgICAgICAgIGVkaXRlZEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5cHJlc3Mi
LCBjb250ZXh0LmtleVByZXNzTGlzdGVuZXIsIGZhbHNlKTsKKyAgICAgICAgaWYgKGVkaXRlZEVs
ZW1lbnQucGFyZW50RWxlbWVudCkKKyAgICAgICAgICAgIGVkaXRlZEVsZW1lbnQucGFyZW50RWxl
bWVudC5yZW1vdmVTdHlsZUNsYXNzKCJjaGlsZC1lZGl0aW5nIik7CisKICAgICAgICAgZGVsZXRl
IHRoaXMub3JpZ2luYWxQcm9wZXJ0eVRleHQ7CiAgICAgfSwKIApAQCAtMTY2MSw2MSArMTc0NCw5
NiBAQCBXZWJJbnNwZWN0b3IuU3R5bGVQcm9wZXJ0eVRyZWVFbGVtZW50LnByb3RvdHlwZSA9IHsK
ICAgICBlZGl0aW5nQ29tbWl0dGVkOiBmdW5jdGlvbihlbGVtZW50LCB1c2VySW5wdXQsIHByZXZp
b3VzQ29udGVudCwgY29udGV4dCwgbW92ZURpcmVjdGlvbikKICAgICB7CiAgICAgICAgIHRoaXMu
ZWRpdGluZ0VuZGVkKGNvbnRleHQpOworICAgICAgICB2YXIgaXNFZGl0aW5nTmFtZSA9IGNvbnRl
eHQuaXNFZGl0aW5nTmFtZTsKIAogICAgICAgICAvLyBEZXRlcm1pbmUgd2hlcmUgdG8gbW92ZSB0
byBiZWZvcmUgbWFraW5nIGNoYW5nZXMKLSAgICAgICAgdmFyIG5ld1Byb3BlcnR5LCBtb3ZlVG9Q
cm9wZXJ0eU5hbWUsIG1vdmVUb1NlbGVjdG9yOworICAgICAgICB2YXIgY3JlYXRlTmV3UHJvcGVy
dHksIG1vdmVUb1Byb3BlcnR5TmFtZSwgbW92ZVRvU2VsZWN0b3I7CiAgICAgICAgIHZhciBtb3Zl
VG8gPSB0aGlzOwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBtb3ZlVG8gPSAobW92ZURpcmVj
dGlvbiA9PT0gImZvcndhcmQiID8gbW92ZVRvLm5leHRTaWJsaW5nIDogbW92ZVRvLnByZXZpb3Vz
U2libGluZyk7Ci0gICAgICAgIH0gd2hpbGUobW92ZVRvICYmICFtb3ZlVG8uc2VsZWN0YWJsZSk7
Ci0KLSAgICAgICAgaWYgKG1vdmVUbykKLSAgICAgICAgICAgIG1vdmVUb1Byb3BlcnR5TmFtZSA9
IG1vdmVUby5uYW1lOwotICAgICAgICBlbHNlIGlmIChtb3ZlRGlyZWN0aW9uID09PSAiZm9yd2Fy
ZCIpCi0gICAgICAgICAgICBuZXdQcm9wZXJ0eSA9IHRydWU7Ci0gICAgICAgIGVsc2UgaWYgKG1v
dmVEaXJlY3Rpb24gPT09ICJiYWNrd2FyZCIgJiYgdGhpcy50cmVlT3V0bGluZS5zZWN0aW9uLnJ1
bGUpCi0gICAgICAgICAgICBtb3ZlVG9TZWxlY3RvciA9IHRydWU7CisgICAgICAgIHZhciBtb3Zl
VG9PdGhlciA9IChpc0VkaXRpbmdOYW1lIF4gKG1vdmVEaXJlY3Rpb24gPT09ICJmb3J3YXJkIikp
OworICAgICAgICB2YXIgYWJhbmRvbk5ld1Byb3BlcnR5ID0gdGhpcy5fbmV3UHJvcGVydHkgJiYg
IXVzZXJJbnB1dCAmJiAobW92ZVRvT3RoZXIgfHwgaXNFZGl0aW5nTmFtZSk7CisgICAgICAgIGlm
IChtb3ZlRGlyZWN0aW9uID09PSAiZm9yd2FyZCIgJiYgIWlzRWRpdGluZ05hbWUgfHwgbW92ZURp
cmVjdGlvbiA9PT0gImJhY2t3YXJkIiAmJiBpc0VkaXRpbmdOYW1lKSB7CisgICAgICAgICAgICBk
byB7CisgICAgICAgICAgICAgICAgbW92ZVRvID0gKG1vdmVEaXJlY3Rpb24gPT09ICJmb3J3YXJk
IiA/IG1vdmVUby5uZXh0U2libGluZyA6IG1vdmVUby5wcmV2aW91c1NpYmxpbmcpOworICAgICAg
ICAgICAgfSB3aGlsZShtb3ZlVG8gJiYgIW1vdmVUby5zZWxlY3RhYmxlKTsKKworICAgICAgICAg
ICBpZiAobW92ZVRvKQorICAgICAgICAgICAgICAgIG1vdmVUb1Byb3BlcnR5TmFtZSA9IG1vdmVU
by5uYW1lOworICAgICAgICAgICAgZWxzZSBpZiAobW92ZURpcmVjdGlvbiA9PT0gImZvcndhcmQi
ICYmICghdGhpcy5fbmV3UHJvcGVydHkgfHwgdXNlcklucHV0KSkKKyAgICAgICAgICAgICAgICBj
cmVhdGVOZXdQcm9wZXJ0eSA9IHRydWU7CisgICAgICAgICAgICBlbHNlIGlmIChtb3ZlRGlyZWN0
aW9uID09PSAiYmFja3dhcmQiICYmIHRoaXMudHJlZU91dGxpbmUuc2VjdGlvbi5ydWxlKQorICAg
ICAgICAgICAgICAgIG1vdmVUb1NlbGVjdG9yID0gdHJ1ZTsKKyAgICAgICAgfQogCi0gICAgICAg
IC8vIE1ha2UgdGhlIENoYW5nZXMgYW5kIHRyaWdnZXIgdGhlIG1vdmVUb05leHRDYWxsYmFjayBh
ZnRlciB1cGRhdGluZworICAgICAgICAvLyBNYWtlIHRoZSBDaGFuZ2VzIGFuZCB0cmlnZ2VyIHRo
ZSBtb3ZlVG9OZXh0Q2FsbGJhY2sgYWZ0ZXIgdXBkYXRpbmcuCiAgICAgICAgIHZhciBibGFua0lu
cHV0ID0gL15ccyokLy50ZXN0KHVzZXJJbnB1dCk7Ci0gICAgICAgIGlmICh1c2VySW5wdXQgIT09
IHByZXZpb3VzQ29udGVudCB8fCAodGhpcy5fbmV3UHJvcGVydHkgJiYgYmxhbmtJbnB1dCkpIHsg
Ly8gb25seSBpZiBzb21ldGhpbmcgY2hhbmdlZCwgb3IgYWRkaW5nIGEgbmV3IHN0eWxlIGFuZCBp
dCB3YXMgYmxhbmsKLSAgICAgICAgICAgIHRoaXMudHJlZU91dGxpbmUuc2VjdGlvbi5fYWZ0ZXJV
cGRhdGUgPSBtb3ZlVG9OZXh0Q2FsbGJhY2suYmluZCh0aGlzLCB0aGlzLl9uZXdQcm9wZXJ0eSwg
IWJsYW5rSW5wdXQpOwotICAgICAgICAgICAgdGhpcy5hcHBseVN0eWxlVGV4dCh1c2VySW5wdXQs
IHRydWUpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1vdmVUb05leHRDYWxsYmFjayh0
aGlzLl9uZXdQcm9wZXJ0eSwgZmFsc2UsIHRoaXMudHJlZU91dGxpbmUuc2VjdGlvbiwgZmFsc2Up
OworICAgICAgICB2YXIgc2hvdWxkQ29tbWl0TmV3UHJvcGVydHkgPSB0aGlzLl9uZXdQcm9wZXJ0
eSAmJiAobW92ZVRvT3RoZXIgfHwgKCFtb3ZlRGlyZWN0aW9uICYmICFpc0VkaXRpbmdOYW1lKSB8
fCAoaXNFZGl0aW5nTmFtZSAmJiBibGFua0lucHV0KSk7CiAKLSAgICAgICAgLy8gVGhlIENhbGxi
YWNrIHRvIHN0YXJ0IGVkaXRpbmcgdGhlIG5leHQgcHJvcGVydHkKKyAgICAgICAgaWYgKCh1c2Vy
SW5wdXQgIT09IHByZXZpb3VzQ29udGVudCAmJiAhdGhpcy5fbmV3UHJvcGVydHkpIHx8IHNob3Vs
ZENvbW1pdE5ld1Byb3BlcnR5KSB7CisgICAgICAgICAgICB0aGlzLnRyZWVPdXRsaW5lLnNlY3Rp
b24uX2FmdGVyVXBkYXRlID0gbW92ZVRvTmV4dENhbGxiYWNrLmJpbmQodGhpcywgdGhpcy5fbmV3
UHJvcGVydHksICFibGFua0lucHV0LCB0aGlzLnRyZWVPdXRsaW5lLnNlY3Rpb24pOworICAgICAg
ICAgICAgdmFyIHByb3BlcnR5VGV4dDsKKyAgICAgICAgICAgIGlmIChibGFua0lucHV0IHx8ICh0
aGlzLl9uZXdQcm9wZXJ0eSAmJiAvXlxzKiQvLnRlc3QodGhpcy52YWx1ZUVsZW1lbnQudGV4dENv
bnRlbnQpKSkKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eVRleHQgPSAiIjsKKyAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChpc0VkaXRpbmdOYW1lKQorICAgICAgICAgICAg
ICAgICAgICBwcm9wZXJ0eVRleHQgPSB1c2VySW5wdXQgKyAiOiAiICsgdGhpcy52YWx1ZUVsZW1l
bnQudGV4dENvbnRlbnQ7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICBwcm9wZXJ0eVRleHQgPSB0aGlzLm5hbWVFbGVtZW50LnRleHRDb250ZW50ICsgIjogIiArIHVz
ZXJJbnB1dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXMuYXBwbHlTdHlsZVRleHQo
cHJvcGVydHlUZXh0LCB0cnVlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICgh
dGhpcy5fbmV3UHJvcGVydHkpCisgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUaXRsZSgpOwor
ICAgICAgICAgICAgbW92ZVRvTmV4dENhbGxiYWNrKHRoaXMuX25ld1Byb3BlcnR5LCBmYWxzZSwg
dGhpcy50cmVlT3V0bGluZS5zZWN0aW9uKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBtb3Zl
VG9JbmRleCA9IG1vdmVUbyAmJiB0aGlzLnRyZWVPdXRsaW5lID8gdGhpcy50cmVlT3V0bGluZS5j
aGlsZHJlbi5pbmRleE9mKG1vdmVUbykgOiAtMTsKKworICAgICAgICAvLyBUaGUgQ2FsbGJhY2sg
dG8gc3RhcnQgZWRpdGluZyB0aGUgbmV4dC9wcmV2aW91cyBwcm9wZXJ0eS9zZWxlY3Rvci4KICAg
ICAgICAgZnVuY3Rpb24gbW92ZVRvTmV4dENhbGxiYWNrKGFscmVhZHlOZXcsIHZhbHVlQ2hhbmdl
ZCwgc2VjdGlvbikKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFtb3ZlRGlyZWN0aW9uKQog
ICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgLy8gVXNlciBqdXN0IHRhYmJl
ZCB0aHJvdWdoIHdpdGhvdXQgY2hhbmdlcworICAgICAgICAgICAgLy8gVXNlciBqdXN0IHRhYmJl
ZCB0aHJvdWdoIHdpdGhvdXQgY2hhbmdlcy4KICAgICAgICAgICAgIGlmIChtb3ZlVG8gJiYgbW92
ZVRvLnBhcmVudCkgewotICAgICAgICAgICAgICAgIG1vdmVUby5zdGFydEVkaXRpbmcobW92ZVRv
LnZhbHVlRWxlbWVudCk7CisgICAgICAgICAgICAgICAgbW92ZVRvLnN0YXJ0RWRpdGluZyghaXNF
ZGl0aW5nTmFtZSA/IG1vdmVUby5uYW1lRWxlbWVudCA6IG1vdmVUby52YWx1ZUVsZW1lbnQpOwog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgLy8g
VXNlciBoYXMgbWFkZSBhIGNoYW5nZSB0aGVuIHRhYmJlZCwgd2lwaW5nIGFsbCB0aGUgb3JpZ2lu
YWwgdHJlZUVsZW1lbnRzLAotICAgICAgICAgICAgLy8gcmVjYWxjdWxhdGUgdGhlIG5ldyB0cmVl
RWxlbWVudCBmb3IgdGhlIHNhbWUgcHJvcGVydHkgd2Ugd2VyZSBnb2luZyB0byBlZGl0IG5leHQK
LSAgICAgICAgICAgIC8vIEZJWE1FKGFwYXZsb3YpOiB0aGlzIHdpbGwgbm90IHdvcmsgZm9yIG11
bHRpcGxlIHNhbWUtbmFtZWQgcHJvcGVydGllcyBpbiBhIHN0eWxlCi0gICAgICAgICAgICAvLyAg
ICAgICAgICAgICAgICAgKHRoZSBmaXJzdCBvbmUgd2lsbCBhbHdheXMgYmUgcmV0dXJuZWQpLgor
ICAgICAgICAgICAgLy8gVXNlciBoYXMgbWFkZSBhIGNoYW5nZSB0aGVuIHRhYmJlZCwgd2lwaW5n
IGFsbCB0aGUgb3JpZ2luYWwgdHJlZUVsZW1lbnRzLgorICAgICAgICAgICAgLy8gUmVjYWxjdWxh
dGUgdGhlIG5ldyB0cmVlRWxlbWVudCBmb3IgdGhlIHNhbWUgcHJvcGVydHkgd2Ugd2VyZSBnb2lu
ZyB0byBlZGl0IG5leHQuCiAgICAgICAgICAgICBpZiAobW92ZVRvICYmICFtb3ZlVG8ucGFyZW50
KSB7Ci0gICAgICAgICAgICAgICAgdmFyIHRyZWVFbGVtZW50ID0gc2VjdGlvbi5maW5kVHJlZUVs
ZW1lbnRXaXRoTmFtZShtb3ZlVG9Qcm9wZXJ0eU5hbWUpOwotICAgICAgICAgICAgICAgIGlmICh0
cmVlRWxlbWVudCkKLSAgICAgICAgICAgICAgICAgICAgdHJlZUVsZW1lbnQuc3RhcnRFZGl0aW5n
KHRyZWVFbGVtZW50LnZhbHVlRWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgIHZhciBwcm9wZXJ0eUVsZW1lbnRzID0gc2VjdGlvbi5wcm9wZXJ0aWVzVHJl
ZU91dGxpbmUuY2hpbGRyZW47CisgICAgICAgICAgICAgICAgaWYgKG1vdmVEaXJlY3Rpb24gPT09
ICJmb3J3YXJkIiAmJiBibGFua0lucHV0ICYmICFpc0VkaXRpbmdOYW1lKQorICAgICAgICAgICAg
ICAgICAgICAtLW1vdmVUb0luZGV4OworICAgICAgICAgICAgICAgIGlmIChtb3ZlVG9JbmRleCA+
PSBwcm9wZXJ0eUVsZW1lbnRzLmxlbmd0aCAmJiAhdGhpcy5fbmV3UHJvcGVydHkpCisgICAgICAg
ICAgICAgICAgICAgIGNyZWF0ZU5ld1Byb3BlcnR5ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHRyZWVFbGVtZW50ID0gbW92ZVRvSW5kZXgg
Pj0gMCA/IHByb3BlcnR5RWxlbWVudHNbbW92ZVRvSW5kZXhdIDogbnVsbDsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHRyZWVFbGVtZW50KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0cmVl
RWxlbWVudC5zdGFydEVkaXRpbmcoIWlzRWRpdGluZ05hbWUgPyB0cmVlRWxlbWVudC5uYW1lRWxl
bWVudCA6IHRyZWVFbGVtZW50LnZhbHVlRWxlbWVudCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWFscmVhZHlOZXcpCisg
ICAgICAgICAgICAgICAgICAgICAgICBtb3ZlVG9TZWxlY3RvciA9IHRydWU7CisgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAvLyBDcmVhdGUgYSBuZXcgYXR0
cmlidXRlIGluIHRoaXMgc2VjdGlvbgotICAgICAgICAgICAgaWYgKG5ld1Byb3BlcnR5KSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGFscmVhZHlOZXcgJiYgIXZhbHVlQ2hhbmdlZCkKKyAgICAgICAg
ICAgIC8vIENyZWF0ZSBhIG5ldyBhdHRyaWJ1dGUgaW4gdGhpcyBzZWN0aW9uIChvciBtb3ZlIHRv
IG5leHQgZWRpdGFibGUgc2VsZWN0b3IgaWYgcG9zc2libGUpLgorICAgICAgICAgICAgaWYgKGNy
ZWF0ZU5ld1Byb3BlcnR5KSB7CisgICAgICAgICAgICAgICAgaWYgKGFscmVhZHlOZXcgJiYgIXZh
bHVlQ2hhbmdlZCAmJiAoaXNFZGl0aW5nTmFtZSBeIChtb3ZlRGlyZWN0aW9uID09PSAiYmFja3dh
cmQiKSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAgICAgICAgIHNl
Y3Rpb24uYWRkTmV3QmxhbmtQcm9wZXJ0eSgpLnN0YXJ0RWRpdGluZygpOwogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgaWYgKGFiYW5kb25OZXdQ
cm9wZXJ0eSkgeworICAgICAgICAgICAgICAgIHZhciBzZWN0aW9uVG9FZGl0ID0gbW92ZURpcmVj
dGlvbiA9PT0gImJhY2t3YXJkIiA/IHNlY3Rpb24gOiBzZWN0aW9uLm5leHRFZGl0YWJsZVNpYmxp
bmcoKTsKKyAgICAgICAgICAgICAgICBpZiAoc2VjdGlvblRvRWRpdCAmJiBzZWN0aW9uVG9FZGl0
LnJ1bGUpCisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25Ub0VkaXQuc3RhcnRFZGl0aW5nU2Vs
ZWN0b3IoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKICAgICAg
ICAgICAgIGlmIChtb3ZlVG9TZWxlY3RvcikKICAgICAgICAgICAgICAgICBzZWN0aW9uLnN0YXJ0
RWRpdGluZ1NlbGVjdG9yKCk7CiAgICAgICAgIH0KQEAgLTE3MjUsMTYgKzE4NDMsMTMgQEAgV2Vi
SW5zcGVjdG9yLlN0eWxlUHJvcGVydHlUcmVlRWxlbWVudC5wcm90b3R5cGUgPSB7CiAgICAgewog
ICAgICAgICB2YXIgc2VjdGlvbiA9IHRoaXMudHJlZU91dGxpbmUuc2VjdGlvbjsKICAgICAgICAg
dmFyIGVsZW1lbnRzUGFuZWwgPSBXZWJJbnNwZWN0b3IucGFuZWxzLmVsZW1lbnRzOwotICAgICAg
ICBzdHlsZVRleHQgPSBzdHlsZVRleHQucmVwbGFjZSgvXHMvZywgIiAiKS50cmltKCk7IC8vIHJl
cGxhY2UgJm5ic3A7IHdpdGggd2hpdGVzcGFjZS4KKyAgICAgICAgc3R5bGVUZXh0ID0gc3R5bGVU
ZXh0LnJlcGxhY2UoL1xzL2csICIgIikudHJpbSgpOyAvLyBSZXBsYWNlICZuYnNwOyB3aXRoIHdo
aXRlc3BhY2UuCiAgICAgICAgIHZhciBzdHlsZVRleHRMZW5ndGggPSBzdHlsZVRleHQubGVuZ3Ro
OwotICAgICAgICBpZiAoIXN0eWxlVGV4dExlbmd0aCAmJiB1cGRhdGVJbnRlcmZhY2UpIHsKLSAg
ICAgICAgICAgIGlmICh0aGlzLl9uZXdQcm9wZXJ0eSkgewotICAgICAgICAgICAgICAgIC8vIFRo
ZSB1c2VyIGRlbGV0ZWQgZXZlcnl0aGluZywgc28gcmVtb3ZlIHRoZSB0cmVlIGVsZW1lbnQgYW5k
IHVwZGF0ZS4KLSAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5yZW1vdmVDaGlsZCh0aGlzKTsK
LSAgICAgICAgICAgICAgICBzZWN0aW9uLmFmdGVyVXBkYXRlKCk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgZGVsZXRlIHNlY3Rp
b24uX2FmdGVyVXBkYXRlOworICAgICAgICBpZiAoIXN0eWxlVGV4dExlbmd0aCAmJiB1cGRhdGVJ
bnRlcmZhY2UgJiYgdGhpcy5fbmV3UHJvcGVydHkpIHsKKyAgICAgICAgICAgIC8vIFRoZSB1c2Vy
IGRlbGV0ZWQgZXZlcnl0aGluZywgc28gcmVtb3ZlIHRoZSB0cmVlIGVsZW1lbnQgYW5kIHVwZGF0
ZS4KKyAgICAgICAgICAgIHRoaXMucGFyZW50LnJlbW92ZUNoaWxkKHRoaXMpOworICAgICAgICAg
ICAgc2VjdGlvbi5hZnRlclVwZGF0ZSgpOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAKICAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2sobmV3U3R5bGUpCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvVGV4dFZpZXdlci5qcyBiL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9UZXh0Vmlld2VyLmpzCmluZGV4IDlhZDVlNDkuLjkyNzMwYTIgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0Vmlld2VyLmpzCisrKyBiL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9UZXh0Vmlld2VyLmpzCkBAIC0yNjgsNyArMjY4LDcgQEAg
V2ViSW5zcGVjdG9yLlRleHRWaWV3ZXIucHJvdG90eXBlID0gewogICAgICAgICB2YXIgb2xkQ29u
dGVudCA9IGxpbmVSb3cubGFzdENoaWxkLmlubmVySFRNTDsKICAgICAgICAgdmFyIGNhbmNlbEVk
aXRpbmdDYWxsYmFjayA9IHRoaXMuX2NhbmNlbEVkaXRpbmdMaW5lLmJpbmQodGhpcywgbGluZVJv
dy5sYXN0Q2hpbGQsIG9sZENvbnRlbnQpOwogICAgICAgICB2YXIgY29tbWl0RWRpdGluZ0NhbGxi
YWNrID0gdGhpcy5fY29tbWl0RWRpdGluZ0xpbmUuYmluZCh0aGlzLCBsaW5lUm93LmxpbmVOdW1i
ZXIsIGxpbmVSb3cubGFzdENoaWxkLCBjYW5jZWxFZGl0aW5nQ2FsbGJhY2spOwotICAgICAgICB0
aGlzLl9lZGl0aW5nTGluZSA9IFdlYkluc3BlY3Rvci5zdGFydEVkaXRpbmcobGluZVJvdy5sYXN0
Q2hpbGQsIGNvbW1pdEVkaXRpbmdDYWxsYmFjaywgY2FuY2VsRWRpdGluZ0NhbGxiYWNrLCBudWxs
LCB0cnVlKTsKKyAgICAgICAgdGhpcy5fZWRpdGluZ0xpbmUgPSBXZWJJbnNwZWN0b3Iuc3RhcnRF
ZGl0aW5nKGxpbmVSb3cubGFzdENoaWxkLCB7IGNvbW1pdEhhbmRsZXI6IGNvbW1pdEVkaXRpbmdD
YWxsYmFjaywgY2FuY2VsSGFuZGxlcjogY2FuY2VsRWRpdGluZ0NhbGxiYWNrLCBtdWx0aWxpbmU6
IHRydWUgfSwgbnVsbCk7CiAgICAgfSwKIAogICAgIF9jb21taXRFZGl0aW5nTGluZTogZnVuY3Rp
b24obGluZU51bWJlciwgZWxlbWVudCwgY2FuY2VsRWRpdGluZ0NhbGxiYWNrKQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1dhdGNoRXhwcmVzc2lvbnNTaWRlYmFyUGFu
ZS5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9XYXRjaEV4cHJlc3Npb25zU2lkZWJh
clBhbmUuanMKaW5kZXggNDQwNjNhMy4uNDczNGM5OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL1dhdGNoRXhwcmVzc2lvbnNTaWRlYmFyUGFuZS5qcworKysgYi9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvV2F0Y2hFeHByZXNzaW9uc1NpZGViYXJQYW5lLmpzCkBA
IC0yNDAsNyArMjQwLDcgQEAgV2ViSW5zcGVjdG9yLldhdGNoRXhwcmVzc2lvblRyZWVFbGVtZW50
LnByb3RvdHlwZSA9IHsKIAogICAgICAgICB0aGlzLmxpc3RJdGVtRWxlbWVudC5hZGRTdHlsZUNs
YXNzKCJlZGl0aW5nLXN1Yi1wYXJ0Iik7CiAKLSAgICAgICAgV2ViSW5zcGVjdG9yLnN0YXJ0RWRp
dGluZyh0aGlzLm5hbWVFbGVtZW50LCB0aGlzLmVkaXRpbmdDb21taXR0ZWQuYmluZCh0aGlzKSwg
dGhpcy5lZGl0aW5nQ2FuY2VsbGVkLmJpbmQodGhpcyksIGNvbnRleHQpOworICAgICAgICBXZWJJ
bnNwZWN0b3Iuc3RhcnRFZGl0aW5nKHRoaXMubmFtZUVsZW1lbnQsIHsgY29tbWl0SGFuZGxlcjog
dGhpcy5lZGl0aW5nQ29tbWl0dGVkLmJpbmQodGhpcyksIGNhbmNlbEhhbmRsZXI6IHRoaXMuZWRp
dGluZ0NhbmNlbGxlZC5iaW5kKHRoaXMpIH0sIGNvbnRleHQpOwogICAgIH0sCiAKICAgICBlZGl0
aW5nQ2FuY2VsbGVkOiBmdW5jdGlvbihlbGVtZW50LCBjb250ZXh0KQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5jc3MgYi9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvaW5zcGVjdG9yLmNzcwppbmRleCA5NjU2ODliLi5jOTA4NDI3IDEwMDY0NAot
LS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmNzcworKysgYi9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmNzcwpAQCAtMTQyNCw2ICsxNDI0LDEy
IEBAIGJvZHkuaW5hY3RpdmUgLnBsYWNhcmQuc2VsZWN0ZWQgewogICAgIHRleHQtZGVjb3JhdGlv
bjogbm9uZSAhaW1wb3J0YW50OwogfQogCisuY2hpbGQtZWRpdGluZyB7CisgICAgY29sb3I6IGJs
YWNrICFpbXBvcnRhbnQ7CisgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lICFpbXBvcnRhbnQ7Cisg
ICAgb3ZlcmZsb3c6IHZpc2libGUgIWltcG9ydGFudDsKK30KKwogLmVkaXRpbmcgYnIgewogICAg
IGRpc3BsYXk6IG5vbmU7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvaW5zcGVjdG9yLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5q
cwppbmRleCBjNDA5MjRjLi5kZjM4ZTQwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvaW5zcGVjdG9yLmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9p
bnNwZWN0b3IuanMKQEAgLTE5MTQsMTIgKzE5MTQsMTkgQEAgV2ViSW5zcGVjdG9yLmlzRWRpdGlu
Z0FueUZpZWxkID0gZnVuY3Rpb24oKQogICAgIHJldHVybiB0aGlzLl9fZWRpdGluZzsKIH0KIAot
V2ViSW5zcGVjdG9yLnN0YXJ0RWRpdGluZyA9IGZ1bmN0aW9uKGVsZW1lbnQsIGNvbW1pdHRlZENh
bGxiYWNrLCBjYW5jZWxsZWRDYWxsYmFjaywgY29udGV4dCwgbXVsdGlsaW5lKQorLy8gQXZhaWxh
YmxlIGNvbmZpZyBmaWVsZHM6CisvLyBjb21taXRIYW5kbGVyOiBGdW5jdGlvbiAtIGhhbmRsZXMg
ZWRpdGluZyAiY29tbWl0IiBvdXRjb21lCisvLyBjYW5jZWxIYW5kbGVyOiBGdW5jdGlvbiAtIGhh
bmRsZXMgZWRpdGluZyAiY2FuY2VsIiBvdXRjb21lCisvLyBjdXN0b21GaW5pc2hIYW5kbGVyOiBG
dW5jdGlvbnx1bmRlZmluZWQgLSBjdXN0b20gZmluaXNoIGhhbmRsZXIgZm9yIHRoZSBlZGl0aW5n
IHNlc3Npb24KKy8vIG11bHRpbGluZTogdHJ1ZXxmYWxzZSAtIHdoZXRoZXIgdGhlIGVkaXRlZCBl
bGVtZW50IGlzIG11bHRpbGluZQorV2ViSW5zcGVjdG9yLnN0YXJ0RWRpdGluZyA9IGZ1bmN0aW9u
KGVsZW1lbnQsIGNvbmZpZywgY29udGV4dCkKIHsKICAgICBpZiAoZWxlbWVudC5fX2VkaXRpbmcp
CiAgICAgICAgIHJldHVybjsKICAgICBlbGVtZW50Ll9fZWRpdGluZyA9IHRydWU7CiAgICAgV2Vi
SW5zcGVjdG9yLl9fZWRpdGluZyA9IHRydWU7CisgICAgdmFyIGNvbW1pdHRlZENhbGxiYWNrID0g
Y29uZmlnLmNvbW1pdEhhbmRsZXI7CisgICAgdmFyIGNhbmNlbGxlZENhbGxiYWNrID0gY29uZmln
LmNhbmNlbEhhbmRsZXI7CiAKICAgICB2YXIgb2xkVGV4dCA9IGdldENvbnRlbnQoZWxlbWVudCk7
CiAgICAgdmFyIG1vdmVEaXJlY3Rpb24gPSAiIjsKQEAgLTE5NzYsMjAgKzE5ODMsMzYgQEAgV2Vi
SW5zcGVjdG9yLnN0YXJ0RWRpdGluZyA9IGZ1bmN0aW9uKGVsZW1lbnQsIGNvbW1pdHRlZENhbGxi
YWNrLCBjYW5jZWxsZWRDYWxsYmEKICAgICAgICAgICAgIGNvbW1pdHRlZENhbGxiYWNrKHRoaXMs
IGdldENvbnRlbnQodGhpcyksIG9sZFRleHQsIGNvbnRleHQsIG1vdmVEaXJlY3Rpb24pOwogICAg
IH0KIAotICAgIGZ1bmN0aW9uIGtleURvd25FdmVudExpc3RlbmVyKGV2ZW50KSB7CisgICAgZnVu
Y3Rpb24gZGVmYXVsdEZpbmlzaEhhbmRsZXIoZXZlbnQpCisgICAgewogICAgICAgICB2YXIgaXNN
ZXRhT3JDdHJsID0gV2ViSW5zcGVjdG9yLmlzTWFjKCkgPwogICAgICAgICAgICAgZXZlbnQubWV0
YUtleSAmJiAhZXZlbnQuc2hpZnRLZXkgJiYgIWV2ZW50LmN0cmxLZXkgJiYgIWV2ZW50LmFsdEtl
eSA6CiAgICAgICAgICAgICBldmVudC5jdHJsS2V5ICYmICFldmVudC5zaGlmdEtleSAmJiAhZXZl
bnQubWV0YUtleSAmJiAhZXZlbnQuYWx0S2V5OwotICAgICAgICBpZiAoaXNFbnRlcktleShldmVu
dCkgJiYgKCFtdWx0aWxpbmUgfHwgaXNNZXRhT3JDdHJsKSkgeworICAgICAgICBpZiAoaXNFbnRl
cktleShldmVudCkgJiYgKCFjb25maWcubXVsdGlsaW5lIHx8IGlzTWV0YU9yQ3RybCkpCisgICAg
ICAgICAgICByZXR1cm4gImNvbW1pdCI7CisgICAgICAgIGVsc2UgaWYgKGV2ZW50LmtleUNvZGUg
PT09IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0LktleXMuRXNjLmNvZGUpCisgICAgICAg
ICAgICByZXR1cm4gImNhbmNlbCI7CisgICAgICAgIGVsc2UgaWYgKGV2ZW50LmtleUlkZW50aWZp
ZXIgPT09ICJVKzAwMDkiKSAvLyBUYWIga2V5CisgICAgICAgICAgICByZXR1cm4gIm1vdmUtIiAr
IChldmVudC5zaGlmdEtleSA/ICJiYWNrd2FyZCIgOiAiZm9yd2FyZCIpOworICAgIH0KKworICAg
IGZ1bmN0aW9uIGtleURvd25FdmVudExpc3RlbmVyKGV2ZW50KQorICAgIHsKKyAgICAgICAgdmFy
IGhhbmRsZXIgPSBjb25maWcuY3VzdG9tRmluaXNoSGFuZGxlciB8fCBkZWZhdWx0RmluaXNoSGFu
ZGxlcjsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGhhbmRsZXIoZXZlbnQpOworICAgICAgICBpZiAo
cmVzdWx0ID09PSAiY29tbWl0IikgewogICAgICAgICAgICAgZWRpdGluZ0NvbW1pdHRlZC5jYWxs
KGVsZW1lbnQpOwogICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAg
ICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwotICAgICAgICB9IGVsc2UgaWYgKGV2ZW50Lmtl
eUNvZGUgPT09IFdlYkluc3BlY3Rvci5LZXlib2FyZFNob3J0Y3V0LktleXMuRXNjLmNvZGUpIHsK
KyAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQgPT09ICJjYW5jZWwiKSB7CiAgICAgICAgICAgICBl
ZGl0aW5nQ2FuY2VsbGVkLmNhbGwoZWxlbWVudCk7CiAgICAgICAgICAgICBldmVudC5wcmV2ZW50
RGVmYXVsdCgpOwogICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7Ci0gICAgICAg
IH0gZWxzZSBpZiAoZXZlbnQua2V5SWRlbnRpZmllciA9PT0gIlUrMDAwOSIpIC8vIFRhYiBrZXkK
LSAgICAgICAgICAgIG1vdmVEaXJlY3Rpb24gPSAoZXZlbnQuc2hpZnRLZXkgPyAiYmFja3dhcmQi
IDogImZvcndhcmQiKTsKKyAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQgJiYgcmVzdWx0LmluZGV4
T2YoIm1vdmUtIikgPT09IDApIHsKKyAgICAgICAgICAgIG1vdmVEaXJlY3Rpb24gPSByZXN1bHQu
c3Vic3RyaW5nKDUpOworICAgICAgICAgICAgaWYgKGV2ZW50LmtleUlkZW50aWZpZXIgIT09ICJV
KzAwMDkiKQorICAgICAgICAgICAgICAgIGJsdXJFdmVudExpc3RlbmVyKCk7CisgICAgICAgIH0K
ICAgICB9CiAKICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCBibHVyRXZlbnRM
aXN0ZW5lciwgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L3RyZWVvdXRsaW5lLmpzIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL3RyZWVvdXRsaW5l
LmpzCmluZGV4IGExZTA1MmYuLjI3YmM4MzkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC90cmVlb3V0bGluZS5qcworKysgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvdHJlZW91dGxpbmUuanMKQEAgLTgyMSw2ICs4MjEsMTAgQEAgVHJlZUVsZW1lbnQucHJvdG90
eXBlLnNlbGVjdCA9IGZ1bmN0aW9uKHN1cHJlc3NPblNlbGVjdCwgc2VsZWN0ZWRCeVVzZXIpCiAK
ICAgICB0aGlzLnNlbGVjdGVkID0gdHJ1ZTsKICAgICB0aGlzLnRyZWVPdXRsaW5lLl9jaGlsZHJl
bkxpc3ROb2RlLmZvY3VzKCk7CisKKyAgICAvLyBGb2N1c2luZyBvbiBhbm90aGVyIG5vZGUgbWF5
IGRldGFjaCAidGhpcyIgZnJvbSB0cmVlLgorICAgIGlmICghdGhpcy50cmVlT3V0bGluZSkKKyAg
ICAgICAgcmV0dXJuOwogICAgIHRoaXMudHJlZU91dGxpbmUuc2VsZWN0ZWRUcmVlRWxlbWVudCA9
IHRoaXM7CiAgICAgaWYgKHRoaXMuX2xpc3RJdGVtTm9kZSkKICAgICAgICAgdGhpcy5fbGlzdEl0
ZW1Ob2RlLmFkZFN0eWxlQ2xhc3MoInNlbGVjdGVkIik7Cg==
</data>
<flag name="review"
          id="66928"
          type_id="1"
          status="+"
          setter="joepeck"
    />
    <flag name="commit-queue"
          id="67117"
          type_id="3"
          status="-"
          setter="joepeck"
    />
          </attachment>
      

    </bug>

</bugzilla>