<?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>142599</bug_id>
          
          <creation_ts>2015-03-11 15:50:26 -0700</creation_ts>
          <short_desc>Web Inspector: Split ConsoleMessageImpl into the View and the Model</short_desc>
          <delta_ts>2015-04-14 12:32:58 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=143719</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>142712</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikita Vasilyev">nvasilyev</reporter>
          <assigned_to name="Joseph Pecoraro">joepeck</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>graouts</cc>
    
    <cc>joepeck</cc>
    
    <cc>jonowells</cc>
    
    <cc>mattbaker</cc>
    
    <cc>mkwst</cc>
    
    <cc>nvasilyev</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1076469</commentid>
    <comment_count>0</comment_count>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2015-03-11 15:50:26 -0700</bug_when>
    <thetext>This issue is for refactoring only, it has no UI changes.


1. Merge ConsoleMessage and ConsoleMessageImpl.

WebInspector.ConsoleMessageImpl inherits from WebInspector.ConsoleMessage. However, WebInspector.ConsoleMessageImpl gets instantiated only by WebInspector.ConsoleMessage.create, which makes the two tightly coupled and defeats the purpose of inheritance.

ConsoleMessage isn’t used by anything other than ConsoleMessageImpl, so there is no point of keeping them both – they should be merged.


2. Split ConsoleMessage(Impl) into the View and the Model.

Model will hold the data and some logic but no DOM operations, all DOM operations will go to the view.

I believe, it should be possible to have more than one view for a single model, although, I don’t yet know a use case for that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076470</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-03-11 15:50:51 -0700</bug_when>
    <thetext>&lt;rdar://problem/20128435&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076472</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-03-11 15:51:14 -0700</bug_when>
    <thetext>&lt;rdar://problem/20128453&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076984</commentid>
    <comment_count>3</comment_count>
      <attachid>248596</attachid>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2015-03-13 12:07:07 -0700</bug_when>
    <thetext>Created attachment 248596
WIP

Not quite finished, but it works and has no bugs what I know of.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077003</commentid>
    <comment_count>4</comment_count>
      <attachid>248596</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-03-13 13:13:28 -0700</bug_when>
    <thetext>Comment on attachment 248596
WIP

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

&gt; Source/WebInspectorUI/UserInterface/Main.html:230
&gt; +    &lt;script src=&quot;Models/ConsoleMessage.js&quot;&gt;&lt;/script&gt;

This file is missing... I can&apos;t really review the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077005</commentid>
    <comment_count>5</comment_count>
      <attachid>248596</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-03-13 13:16:48 -0700</bug_when>
    <thetext>Comment on attachment 248596
WIP

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

&gt; Source/WebInspectorUI/UserInterface/Controllers/LogManager.js:51
&gt; +        var consoleMessage = new WebInspector.ConsoleMessage(source, level, text, null, type, url, line, column, repeatCount, parameters, stackTrace, null);

There is this mysterious &quot;null&quot; property between &quot;text&quot; and &quot;type&quot;. What is it? Can it just be removed? Otherwise, it should move to the end.

&gt; Source/WebInspectorUI/UserInterface/Views/ConsoleCommandResult.js:39
&gt; +    var model = new WebInspector.ConsoleMessage(

Style: Spread out over multiple lines like this makes it hard to read.

&gt; Source/WebInspectorUI/UserInterface/Views/ConsoleCommandResult.js:43
&gt; +        null,

Here it is again.

&gt; Source/WebInspectorUI/UserInterface/Views/ConsoleCommandResult.js:84
&gt; +WebInspector.ConsoleCommandResult.prototype.__proto__ = WebInspector.ConsoleMessageView.prototype;

We should switch to new class style:

    Foo.prototype = {
        constructor: Foo,
        __proto__ = WebInspector.ConsoleMessageView.prototype,
        ...
    };

&gt; Source/WebInspectorUI/UserInterface/Views/LegacyConsoleMessageImpl.js:734
&gt; +    clone: function()

Same here, these should be the new method syntax.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077009</commentid>
    <comment_count>6</comment_count>
      <attachid>248603</attachid>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2015-03-13 13:23:10 -0700</bug_when>
    <thetext>Created attachment 248603
WIP

Added missing Models/ConsoleMessage.js.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077011</commentid>
    <comment_count>7</comment_count>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2015-03-13 13:29:47 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Comment on attachment 248596 [details]
&gt; WIP
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=248596&amp;action=review
&gt; 
&gt; &gt; Source/WebInspectorUI/UserInterface/Controllers/LogManager.js:51
&gt; &gt; +        var consoleMessage = new WebInspector.ConsoleMessage(source, level, text, null, type, url, line, column, repeatCount, parameters, stackTrace, null);
&gt; 
&gt; There is this mysterious &quot;null&quot; property between &quot;text&quot; and &quot;type&quot;. What is
&gt; it? Can it just be removed? Otherwise, it should move to the end.

It’s linkifier copied over from http://trac.webkit.org/browser/trunk/Source/WebInspectorUI/UserInterface/Views/ConsoleMessage.js#L64. I agree that it should be moved to the end.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077014</commentid>
    <comment_count>8</comment_count>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2015-03-13 13:32:24 -0700</bug_when>
    <thetext>Overall, does this address the initial goal of the rewrite, e.g. does it make testing easier (possible)? I’m not familiar with the Console tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1077124</commentid>
    <comment_count>9</comment_count>
      <attachid>248603</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-03-13 21:38:19 -0700</bug_when>
    <thetext>Comment on attachment 248603
WIP

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

&gt; Source/WebInspectorUI/UserInterface/Models/ConsoleMessage.js:31
&gt; +
&gt; +

Style: Extra newline here, should just be 1.

&gt; Source/WebInspectorUI/UserInterface/Models/ConsoleMessage.js:32
&gt; +WebInspector.ConsoleMessage = function(source, level, message, linkifier, type, url, line, column, repeatCount, parameters, stackTrace, request) {

Style: Brace should be on its own line.

&gt; Source/WebInspectorUI/UserInterface/Models/ConsoleMessage.js:36
&gt; +    this._linkifier = linkifier || null; // Unused.

Unused? Lets get rid of it.

&gt; Source/WebInspectorUI/UserInterface/Models/ConsoleMessage.js:49
&gt; +};

Style: There are a lot of style issues here. This should follow the new class guidelines.
http://trac.webkit.org/wiki/WebInspectorCodingStyleGuide#Newclassskeleton

Affecting this file:

1. This should subclass WebInspector.Object, and so should call WebInspector.Object in the constructor.
2. Member variables should be private with &quot;_&quot;s.
3. Prototype should have &quot;constructor&quot; and &quot;__proto__&quot; properties.
4. Prototype should have &quot;Public&quot; and &quot;Private&quot; section.
5. We should start adopting the new method syntax for object literals (&quot;foo()&quot; instead of &quot;foo: function()&quot;).

&gt; Source/WebInspectorUI/UserInterface/Models/ConsoleMessage.js:148
&gt; +WebInspector.ConsoleMessage.create = function(source, level, message, type, url, line, column, repeatCount, parameters, stackTrace, request)
&gt; +{
&gt; +    console.warn(&quot;ConsoleMessage#create is deprecated, please don&apos;t use it.&quot;);
&gt; +    return new WebInspector.ConsoleMessageImpl(source, level, message, null, type, url, line, column, repeatCount, parameters, stackTrace, request);
&gt; +};

Instead of issuing a warning, this patch should go through and actually replace callers of &quot;create&quot; with constructor calls.

I&apos;m going to stop the review here. I&apos;m confused by what this patch is supposed to do.

Since this still has &quot;LegacyConsoleMessage&quot; and &quot;LegacyConsoleMessageImpl&quot; it sounds like this should be multiple patches that can be clear distinct changes. Easy to review, and test on your end.

  1. One patch that renames &quot;ConsoleMessage&quot; and &quot;ConsoleMessageImpl&quot; to &quot;LegacyConsoleMessage&quot; and &quot;LegacyConsoleMessage&quot;. Both the files and the JavaScript classes and call sites.
    =&gt; clean code, clearly using the old classes
  2. One patch that adds the new &quot;Models/ConsoleMessage&quot; and &quot;Views/ConsoleMessageView&quot; classes. New, clean, versions.
    =&gt; clean code, clearly introducing new clean classes following our existing code guidelines and patterns for Models and Views
  3. One patch that moves existing code over from LegacyConsole* to the new non-Legacy Console* classes. This can remove the Legacy* classes at the same time.
    =&gt; that will mean removing ALL the old code, and moving everything to the new code, and since you renamed all the Old code to &quot;Legacy&quot; this should be pretty easy!

Also, please include ChangeLogs for the patch with at least a brief description of the changes happening.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1078634</commentid>
    <comment_count>10</comment_count>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2015-03-19 14:20:21 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Style: There are a lot of style issues here. This should follow the new
&gt; class guidelines.
&gt; http://trac.webkit.org/wiki/WebInspectorCodingStyleGuide#Newclassskeleton
&gt; 
&gt; Affecting this file:
&gt; 
&gt; 1. This should subclass WebInspector.Object, and so should call
&gt; WebInspector.Object in the constructor.
&gt; 2. Member variables should be private with &quot;_&quot;s.

Should I add a getter and a setter for each one of them like so:

    get source()
    {
        return this._source;
    },

    set source(value)
    {
        this._source = value;
    }

?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1078675</commentid>
    <comment_count>11</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2015-03-19 16:09:08 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; Style: There are a lot of style issues here. This should follow the new
&gt; &gt; class guidelines.
&gt; &gt; http://trac.webkit.org/wiki/WebInspectorCodingStyleGuide#Newclassskeleton
&gt; &gt; 
&gt; &gt; Affecting this file:
&gt; &gt; 
&gt; &gt; 1. This should subclass WebInspector.Object, and so should call
&gt; &gt; WebInspector.Object in the constructor.
&gt; &gt; 2. Member variables should be private with &quot;_&quot;s.
&gt; 
&gt; Should I add a getter and a setter for each one of them like so:
&gt; 
&gt;     get source()
&gt;     {
&gt;         return this._source;
&gt;     },
&gt; 
&gt;     set source(value)
&gt;     {
&gt;         this._source = value;
&gt;     }
&gt; 
&gt; ?

Anything that needs to be public and used by another file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1078679</commentid>
    <comment_count>12</comment_count>
      <attachid>249071</attachid>
    <who name="Nikita Vasilyev">nvasilyev</who>
    <bug_when>2015-03-19 16:21:45 -0700</bug_when>
    <thetext>Created attachment 249071
Patch

Note that this patch doesn&apos;t:
 - touch WebInspector.IssueMessage yet
 - use ECMAScript class syntax</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079025</commentid>
    <comment_count>13</comment_count>
      <attachid>249071</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-03-20 20:43:24 -0700</bug_when>
    <thetext>Comment on attachment 249071
Patch

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

This is much better! I stopped the review just shy of the bulk of DOM creation because I know that is just copied code. I&apos;d like to see another version cleaning up things some more.

&gt; Source/WebInspectorUI/UserInterface/Controllers/LogManager.js:-51
&gt; -        var consoleMessage = WebInspector.LegacyConsoleMessage.create(source, level, text, type, url, line, column, repeatCount, parameters, stackTrace, null);

Sounds like you remove all uses of LegacyConsole*. So we can (and should) remove the files with this change.

&gt; Source/WebInspectorUI/UserInterface/Controllers/LogManager.js:51
&gt; +        var consoleMessage = new WebInspector.ConsoleMessage(source, level, text, type, url, line, column, repeatCount, parameters, stackTrace, null);

It worries me a bit that we are passing the raw &quot;stackTrace&quot; object into ConsoleMessage. We should probably create a Model class for a stack trace. It is used in multiple places. But for now, this seems okay.

&gt; Source/WebInspectorUI/UserInterface/Controllers/LogManager.js:52
&gt; +        var consoleMessageView = new WebInspector.ConsoleMessageView(consoleMessage);

Lets drop this View creation inside the Controller. Ideally Controllers will not know about views at all. Just model objects.

&gt; Source/WebInspectorUI/UserInterface/Controllers/LogManager.js:54
&gt; +        this.dispatchEventToListeners(WebInspector.LogManager.Event.MessageAdded, {message: consoleMessageView});

This should send the event with the Model object. Listeners can create views for it if they want.

&gt; Source/WebInspectorUI/UserInterface/Controllers/LogManager.js:56
&gt; +        console.assert(!consoleMessageView._element || !consoleMessageView._element.parentNode, &quot;This console message shouldn&apos;t be added to a view. To add it you need to use clone().&quot;);

This shouldn&apos;t be needed anymore. Instead of cloning ConsoleMessage (the old style) all we should need to do now is create a new ConsoleMessageView(model). So this assert no longer makes sense.

&gt; Source/WebInspectorUI/UserInterface/Main.html:298
&gt;      &lt;script src=&quot;Views/LegacyConsoleMessage.js&quot;&gt;&lt;/script&gt;

Remove these old classes.

&gt; Source/WebInspectorUI/UserInterface/Models/ConsoleMessage.js:3
&gt; + * Copyright (C) 2007, 2008, 2013 Apple Inc.  All rights reserved.

Incude 2015.

&gt; Source/WebInspectorUI/UserInterface/Models/ConsoleMessage.js:31
&gt; +WebInspector.ConsoleMessage = function(source, level, message, type, url, line, column, repeatCount, parameters, stackTrace, request)

We should convert to classes. I realize that happened after this patch went up.

&gt; Source/WebInspectorUI/UserInterface/Models/ConsoleMessage.js:43
&gt; +    this._repeatCount = repeatCount;

I think this should be || 0. It is optional in the protocol.

&gt; Source/WebInspectorUI/UserInterface/Models/ConsoleMessage.js:44
&gt; +    this._totalRepeatCount = repeatCount;

Doesn&apos;t look like this ever changes. So we should just remove it.

&gt; Source/WebInspectorUI/UserInterface/Models/ConsoleMessage.js:95
&gt; +    get repeatCount()
&gt; +    {
&gt; +        return this._repeatCount;
&gt; +    },

It looks like there is code that tries to update this:

            this._previousMessage.repeatCount = count - (this._previousMessage.ignoredCount || 0);
            this._previousMessage.updateRepeatCount();

So it sounds like there should be a setter somewhere. And if so, probably an Event to get dispatched from the model to update a view.

&gt; Source/WebInspectorUI/UserInterface/Models/ConsoleMessage.js:100
&gt; +    get totalRepeatCount()
&gt; +    {
&gt; +        return this._totalRepeatCount;
&gt; +    },

Unused.

&gt; Source/WebInspectorUI/UserInterface/Models/ConsoleMessage.js:117
&gt; +    isErrorOrWarning: function()

Style: use new method syntax: &quot;isErrorOrWarning()&quot; here and in all methods below.

&gt; Source/WebInspectorUI/UserInterface/Models/ConsoleMessage.js:119
&gt; +        return (this.level === WebInspector.ConsoleMessage.MessageLevel.Warning || this.level === WebInspector.ConsoleMessage.MessageLevel.Error);

Style: Parenthesis not needed.

We may want to call this &quot;isIssue&quot;.

&gt; Source/WebInspectorUI/UserInterface/Models/ConsoleMessage.js:137
&gt; +    isEqual: function(msg)

Style: we try not to abbreviate, lets name this &quot;other&quot;.

&gt; Source/WebInspectorUI/UserInterface/Models/ConsoleMessage.js:155
&gt; +            var l = this._stackTrace;
&gt; +            var r = msg._stackTrace;
&gt; +            for (var i = 0; i &lt; l.length; i++) {
&gt; +                if (l[i].url !== r[i].url ||
&gt; +                l[i].functionName !== r[i].functionName ||
&gt; +                l[i].lineNumber !== r[i].lineNumber ||
&gt; +                l[i].columnNumber !== r[i].columnNumber)
&gt; +                    return false;

Style: Indentation looks wrong.

If we create a StackTrace model object, this would be easier. (StackTrace.prototype.isEqual)

We may want to just add a deepEqual function, that assumes non-cyclic objects passed into it.

That said, this doesn&apos;t check if &quot;l.length&quot; differs from &quot;r.length&quot; so this could be wrong (in an extremely unlikely case).

&gt; Source/WebInspectorUI/UserInterface/Models/ConsoleMessage.js:165
&gt; +        return (this.source === msg.source)
&gt; +            &amp;&amp; (this.type === msg.type)
&gt; +            &amp;&amp; (this.level === msg.level)
&gt; +            &amp;&amp; (this.line === msg.line)
&gt; +            &amp;&amp; (this.url === msg.url)
&gt; +            &amp;&amp; (this.message === msg.message)
&gt; +            &amp;&amp; (this._request === msg._request);

Style: these parenthesis are unnecessary.

&gt; Source/WebInspectorUI/UserInterface/Models/ConsoleMessage.js:171
&gt; +    clone: function()
&gt; +    {
&gt; +        return new WebInspector.ConsoleMessage(this.source, this.level, this._messageText, this.type, this.url, this.line, this.column, this.repeatCount, this._parameters, this._stackTrace, this._request);
&gt; +    },

We should remove this, in favor of &quot;new WebInspector.ConsoleMessageView&quot; in JavaScriptLogViewController.js.

&gt; Source/WebInspectorUI/UserInterface/Models/ConsoleMessage.js:175
&gt; +        switch (this.model.level) {

This should be &quot;this._level&quot;.

&gt; Source/WebInspectorUI/UserInterface/Models/ConsoleMessage.js:176
&gt; +            case WebInspector.ConsoleMessage.MessageLevel.Tip:

Style: &quot;case&quot; should line up with &quot;switch&quot;.

&gt; Source/WebInspectorUI/UserInterface/Models/ConsoleMessage.js:189
&gt; +    shouldDumpStackTrace: function()

This sounds like it should be a ConsoleMessageView decision. The model just is. The View determines how to show it.

&gt; Source/WebInspectorUI/UserInterface/Models/ConsoleMessage.js:191
&gt; +        return !!this._stackTrace &amp;&amp; this._stackTrace.length &amp;&amp; (this.source === WebInspector.ConsoleMessage.MessageSource.Network || this.level === WebInspector.ConsoleMessage.MessageLevel.Error || this.type === WebInspector.ConsoleMessage.MessageType.Trace);

Style: This would be much better written with early returns:

    if (!this.stackTrace || !this.stackTrace.length)
        return false;

    if (this.source === ....)
        return true;

    return false;

&gt; Source/WebInspectorUI/UserInterface/Views/ConsoleCommandResult.js:30
&gt;  WebInspector.ConsoleCommandResult = function(result, wasThrown, originatingCommand, savedResultIndex)

Seems this should be a Model object that is a ConsoleMessage subclass.

All View logic can just check &quot;message instanceof ConsoleCommandResult&quot; to know whether to treat it like a command result or not. Much like how we deal with WebInspector.SourceCode &lt;-&gt; WebInspector.Resource.

&gt; Source/WebInspectorUI/UserInterface/Views/ConsoleCommandResult.js:33
&gt;      this.originatingCommand = originatingCommand;

Originating command doesn&apos;t appear to be used anywhere. Lets remove it.

&gt; Source/WebInspectorUI/UserInterface/Views/ConsoleCommandResult.js:34
&gt;      this.savedResultIndex = savedResultIndex;

This should be &quot;_savedResultIndex&quot; with a getter below.

&gt; Source/WebInspectorUI/UserInterface/Views/ConsoleCommandResult.js:39
&gt; +    var model = new WebInspector.ConsoleMessage(WebInspector.ConsoleMessage.MessageSource.JS, level, &quot;&quot;, WebInspector.ConsoleMessage.MessageType.Result, undefined, undefined, undefined, undefined, [result]);

These undefined look gross. Maybe we should re-order the parameters of the constructor to put the more likely to be used ones earlier.

&gt; Source/WebInspectorUI/UserInterface/Views/ConsoleCommandResult.js:41
&gt; +    WebInspector.ConsoleMessageView.call(this, model);

Then this could just be removed.

&gt; Source/WebInspectorUI/UserInterface/Views/ConsoleCommandResult.js:63
&gt;      toMessageElement: function()
&gt;      {
&gt; -        var element = WebInspector.LegacyConsoleMessageImpl.prototype.toMessageElement.call(this);
&gt; +        var element = WebInspector.ConsoleMessageView.prototype.toMessageElement.call(this);
&gt;          element.classList.add(&quot;console-user-command-result&quot;);
&gt;          if (!element.getAttribute(&quot;data-labelprefix&quot;))
&gt;              element.setAttribute(&quot;data-labelprefix&quot;, WebInspector.UIString(&quot;Output: &quot;));

So this could should move inside ConsoleMessageView.

&gt; Source/WebInspectorUI/UserInterface/Views/ConsoleMessageView.js:3
&gt; + * Copyright (C) 2007, 2008, 2013 Apple Inc.  All rights reserved.

2015.

&gt; Source/WebInspectorUI/UserInterface/Views/ConsoleMessageView.js:35
&gt; +    this.model = model;

this._model. And of course update uses within the class.

&gt; Source/WebInspectorUI/UserInterface/Views/ConsoleMessageView.js:55
&gt; +    enforcesClipboardPrefixString: true,

When moving to classes, this will need to be made a getter, since properties are not allowed on classes.

&gt; Source/WebInspectorUI/UserInterface/Views/ConsoleMessageView.js:62
&gt; +    // Some of these getters match the ones on WebInspector.IssueMessage.
&gt; +    // Remove them once we remove WebInspector.IssueMessage.
&gt; +    get source()
&gt; +    {
&gt; +        return this.model.source;
&gt; +    },

Ideally we should be able to remove these. Anyone who uses the view to access model state (ConsoleMessageView.source) should instead have been using (ConsoleMessage.source). This cleanup can be done later.

&gt; Source/WebInspectorUI/UserInterface/Views/ConsoleMessageView.js:97
&gt; +    get totalRepeatCount()
&gt; +    {
&gt; +        return this.model.totalRepeatCount;
&gt; +    },

Unused.

&gt; Source/WebInspectorUI/UserInterface/Views/ConsoleMessageView.js:109
&gt; +    decorateMessageElement: function(element)
&gt; +    {
&gt; +        if (this._element)
&gt; +            return this._element;

Does this early bail make sense? Given an element it returns a completely different element?

Seems this is only used in one place. Just inline it into toMessageElement.

&gt; Source/WebInspectorUI/UserInterface/Views/ConsoleMessageView.js:162
&gt; +        if (!this.repeatCountElement) {

this._repeatCountElement, it is private.

&gt; Source/WebInspectorUI/UserInterface/Views/ConsoleMessageView.js:164
&gt; +            this.repeatCountElement.className = &quot;bubble&quot;;

A better class name would be &quot;repeat-count&quot;.

&gt; Source/WebInspectorUI/UserInterface/Views/ConsoleMessageView.js:183
&gt; +            clipboardString = this._formattedMessage.querySelector(&quot;span&quot;).innerText;

We shouldn&apos;t need to resort to querySelector. We are the view, we created the elements. This should just be something like, &quot;this._fooElement.innerText&quot;.

&gt; Source/WebInspectorUI/UserInterface/Views/ConsoleMessageView.js:223
&gt; +    clone: function(isDeep)
&gt; +    {
&gt; +        var newModel = isDeep ? this.model.clone() : this.model;
&gt; +        return new WebInspector.ConsoleMessageView(newModel);
&gt; +    },

Remove clone.

&gt; Source/WebInspectorUI/UserInterface/Views/ConsoleMessageView.js:243
&gt; +    get _messageText()
&gt; +    {
&gt; +        return this.model.messageText;
&gt; +    },
&gt; +
&gt; +    set _messageText(value)
&gt; +    {
&gt; +        this.model.messageText = value;
&gt; +    },

I don&apos;t think you need any of these _ getters / setters... If anyone is using them, something is wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083478</commentid>
    <comment_count>14</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-04-07 16:38:42 -0700</bug_when>
    <thetext>I&apos;m taking this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083757</commentid>
    <comment_count>15</comment_count>
      <attachid>250391</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-04-08 15:42:49 -0700</bug_when>
    <thetext>Created attachment 250391
[PATCH] Proposed Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083762</commentid>
    <comment_count>16</comment_count>
      <attachid>250391</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2015-04-08 16:12:34 -0700</bug_when>
    <thetext>Comment on attachment 250391
[PATCH] Proposed Fix

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

Sweet!

&gt; Source/WebInspectorUI/UserInterface/Models/ConsoleMessage.js:35
&gt; +        this._source = source;
&gt; +        this._level = level;

|| WebInspector.Foo ?

&gt; Source/WebInspectorUI/UserInterface/Models/ConsoleMessage.js:36
&gt; +        this._messageText = message;

|| &quot;&quot; ?

&gt; Source/WebInspectorUI/UserInterface/Models/ConsoleMessage.js:45
&gt; +        this._parameters = parameters;
&gt; +        this._stackTrace = stackTrace;
&gt; +        this._request = request;

|| []?
|| []?
|| null ?

&gt; Source/WebInspectorUI/UserInterface/Views/ConsoleCommandView.jsSource/WebInspectorUI/UserInterface/Views/ConsoleCommand.js:47
&gt; +        // FIXME: LogContentView should use higher level objects.
&gt; +        this._element.__commandView = this;

Should use Symbol here.

&gt; Source/WebInspectorUI/UserInterface/Views/ConsoleMessageView.js:46
&gt; +        this._element.__message = this._message;
&gt; +        this._element.__messageView = this;

Symbol?

&gt; Source/WebInspectorUI/UserInterface/Views/ConsoleMessageView.js:349
&gt; +        };
&gt; +        var formatter = formatters[type] || this._formatParameterAsValue;

Nit: Newline.

&gt; Source/WebInspectorUI/UserInterface/Views/ConsoleMessageView.js:470
&gt; +                }
&gt; +                var span = document.createElement(&quot;span&quot;);

Nit: Newline.

&gt; Source/WebInspectorUI/UserInterface/Views/ConsoleMessageView.js:526
&gt; +    }
&gt; +
&gt; +
&gt; +    _userProvidedColumnNames(columnNamesArgument)

Nit: Double newline.

&gt; Source/WebInspectorUI/UserInterface/Views/LogContentView.js:296
&gt; +            var messageView = messageElement.__messageView || messageElement.__commandView;

Symbol would be used here.

&gt; Source/WebInspectorUI/UserInterface/Views/LogContentView.js:675
&gt; +            var visible = showsAll || messageElement.__commandView instanceof WebInspector.ConsoleCommandView || messageElement.__message instanceof WebInspector.ConsoleCommandResultMessage;

And here.

&gt; Source/WebInspectorUI/UserInterface/Views/LogContentView.js:677
&gt; +                switch(messageElement.__message.level) {

And here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083792</commentid>
    <comment_count>17</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-04-08 17:41:44 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; Comment on attachment 250391 [details]
&gt; [PATCH] Proposed Fix
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=250391&amp;action=review
&gt; 
&gt; Sweet!
&gt; 
&gt; &gt; Source/WebInspectorUI/UserInterface/Models/ConsoleMessage.js:35
&gt; &gt; +        this._source = source;
&gt; &gt; +        this._level = level;
&gt; 
&gt; || WebInspector.Foo ?

These should actually be required and be asserted.

&gt; &gt; Source/WebInspectorUI/UserInterface/Models/ConsoleMessage.js:36
&gt; &gt; +        this._messageText = message;
&gt; 
&gt; || &quot;&quot; ?
&gt; 
&gt; &gt; Source/WebInspectorUI/UserInterface/Models/ConsoleMessage.js:45
&gt; &gt; +        this._parameters = parameters;
&gt; &gt; +        this._stackTrace = stackTrace;
&gt; &gt; +        this._request = request;
&gt; 
&gt; || []?
&gt; || []?
&gt; || null ?

I prefer undefined over an empty array. I don&apos;t know if there is any benefit to undefined/null. I know we have been doing null in the past though. The one benefit I see to undefined is in JSON printing it&apos;ll just not show up in JSON.stringify which I&apos;ve been using in tests.

Source/WebInspectorUI/UserInterface/Views/ConsoleCommandView.jsSource/WebInspectorUI/UserInterface/Views/ConsoleCommand.js:47
&gt; &gt; +        // FIXME: LogContentView should use higher level objects.
&gt; &gt; +        this._element.__commandView = this;
&gt; 
&gt; Should use Symbol here.
&gt; 
&gt; &gt; Source/WebInspectorUI/UserInterface/Views/ConsoleMessageView.js:46
&gt; &gt; +        this._element.__message = this._message;
&gt; &gt; +        this._element.__messageView = this;
&gt; 
&gt; Symbol?

I think ultimately these should just be eliminated, so I&apos;m avoiding cleaning up using Symbols.

For example I made the &quot;IgnoredRepeatCount&quot; a symbol since that was a legit case being cleaned up. I didn&apos;t want to clean this up in this patch if we will just remove them. I made these double underscore so they can be easily searchable when this gets fixed up later and when we move to a clean syntax / new approach it&apos;ll be clear.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083806</commentid>
    <comment_count>18</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-04-08 18:39:48 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/182579</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083815</commentid>
    <comment_count>19</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-04-08 19:46:28 -0700</bug_when>
    <thetext>The new &apos;LayoutTests/inspector/console/console-api.html&apos; test is failing (timing out) on Windows. :-(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083826</commentid>
    <comment_count>20</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-04-08 20:22:59 -0700</bug_when>
    <thetext>Test fix in: http://trac.webkit.org/changeset/182583</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083830</commentid>
    <comment_count>21</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-04-08 20:30:36 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; The new &apos;LayoutTests/inspector/console/console-api.html&apos; test is failing
&gt; (timing out) on Windows. :-(

Err my test fix was for something else, but... if my theory about inter-locked inspector test failures turns out to be true, it might have been the cause of this.

My theory right now is that when another inspector test fails, it causes a lock on something that causes other inspector tests to time-out. If true, that would explain why random tests timeout.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1085041</commentid>
    <comment_count>22</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-04-13 20:28:06 -0700</bug_when>
    <thetext>This test is very slow on Mac too, timing out in debug build half of the time:

https://webkit-test-results.appspot.com/dashboards/flakiness_dashboard.html#showAllRuns=true&amp;tests=inspector%2Fconsole%2Fconsole-api.html</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248596</attachid>
            <date>2015-03-13 12:07:07 -0700</date>
            <delta_ts>2015-03-13 13:23:10 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>patch.patch</filename>
            <type>text/plain</type>
            <size>103508</size>
            <attacher name="Nikita Vasilyev">nvasilyev</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xs
ZXJzL0xvZ01hbmFnZXIuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9D
b250cm9sbGVycy9Mb2dNYW5hZ2VyLmpzCmluZGV4IGEwOWQzMGYuLmE1NjdkMzIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0xvZ01h
bmFnZXIuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJv
bGxlcnMvTG9nTWFuYWdlci5qcwpAQCAtNDgsMTEgKzQ4LDEyIEBAIFdlYkluc3BlY3Rvci5Mb2dN
YW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgLy8gQ2FsbGVkIGZyb20gV2ViSW5zcGVjdG9y
LkNvbnNvbGVPYnNlcnZlci4KIAogICAgICAgICAvLyBGSVhNRTogUGFzcyBhIHJlcXVlc3QuIFdl
IG5lZWQgYSB3YXkgdG8gZ2V0IGl0IGZyb20gdGhlIHJlcXVlc3QgSUQuCi0gICAgICAgIHZhciBj
b25zb2xlTWVzc2FnZSA9IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5jcmVhdGUoc291cmNl
LCBsZXZlbCwgdGV4dCwgdHlwZSwgdXJsLCBsaW5lLCBjb2x1bW4sIHJlcGVhdENvdW50LCBwYXJh
bWV0ZXJzLCBzdGFja1RyYWNlLCBudWxsKTsKKyAgICAgICAgdmFyIGNvbnNvbGVNZXNzYWdlID0g
bmV3IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZShzb3VyY2UsIGxldmVsLCB0ZXh0LCBudWxs
LCB0eXBlLCB1cmwsIGxpbmUsIGNvbHVtbiwgcmVwZWF0Q291bnQsIHBhcmFtZXRlcnMsIHN0YWNr
VHJhY2UsIG51bGwpOworICAgICAgICB2YXIgY29uc29sZU1lc3NhZ2VWaWV3ID0gbmV3IFdlYklu
c3BlY3Rvci5Db25zb2xlTWVzc2FnZVZpZXcoY29uc29sZU1lc3NhZ2UpOwogCi0gICAgICAgIHRo
aXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5Mb2dNYW5hZ2VyLkV2ZW50
Lk1lc3NhZ2VBZGRlZCwge21lc3NhZ2U6IGNvbnNvbGVNZXNzYWdlfSk7CisgICAgICAgIHRoaXMu
ZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5Mb2dNYW5hZ2VyLkV2ZW50Lk1l
c3NhZ2VBZGRlZCwge21lc3NhZ2U6IGNvbnNvbGVNZXNzYWdlVmlld30pOwogCi0gICAgICAgIGNv
bnNvbGUuYXNzZXJ0KCFjb25zb2xlTWVzc2FnZS5fZWxlbWVudCB8fCAhY29uc29sZU1lc3NhZ2Uu
X2VsZW1lbnQucGFyZW50Tm9kZSwgIlRoaXMgY29uc29sZSBtZXNzYWdlIHNob3VsZG4ndCBiZSBh
ZGRlZCB0byBhIHZpZXcuIFRvIGFkZCBpdCB5b3UgbmVlZCB0byB1c2UgY2xvbmUoKS4iKTsKKyAg
ICAgICAgY29uc29sZS5hc3NlcnQoIWNvbnNvbGVNZXNzYWdlVmlldy5fZWxlbWVudCB8fCAhY29u
c29sZU1lc3NhZ2VWaWV3Ll9lbGVtZW50LnBhcmVudE5vZGUsICJUaGlzIGNvbnNvbGUgbWVzc2Fn
ZSBzaG91bGRuJ3QgYmUgYWRkZWQgdG8gYSB2aWV3LiBUbyBhZGQgaXQgeW91IG5lZWQgdG8gdXNl
IGNsb25lKCkuIik7CiAgICAgfSwKIAogICAgIG1lc3NhZ2VzQ2xlYXJlZDogZnVuY3Rpb24oKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5odG1s
IGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5odG1sCmluZGV4IDA5
YTU5OTQuLmM4MWE0MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL01haW4uaHRtbAorKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9NYWluLmh0bWwKQEAgLTIyNyw2ICsyMjcsNyBAQAogICAgIDxzY3JpcHQgc3JjPSJNb2RlbHMv
Q29sbGVjdGlvbkVudHJ5LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iTW9kZWxzL0Nv
bGxlY3Rpb25FbnRyeVByZXZpZXcuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJNb2Rl
bHMvQ29sb3IuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJNb2RlbHMvQ29uc29sZU1l
c3NhZ2UuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJNb2RlbHMvQ29udGVudEZsb3cu
anMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJNb2RlbHMvQ29va2llU3RvcmFnZU9iamVj
dC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9Ik1vZGVscy9ET01Ob2RlLmpzIj48L3Nj
cmlwdD4KQEAgLTI5MSw3ICsyOTIsNyBAQAogICAgIDxzY3JpcHQgc3JjPSJNb2RlbHMvVHlwZVNl
dC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9Ik1vZGVscy9Vbml0QmV6aWVyLmpzIj48
L3NjcmlwdD4KIAotICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9Db25zb2xlTWVzc2FnZS5qcyI+PC9z
Y3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlZpZXdzL0NvbnNvbGVNZXNzYWdlVmlldy5qcyI+PC9z
Y3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IlZpZXdzL0NvbnRlbnRWaWV3LmpzIj48L3NjcmlwdD4K
ICAgICA8c2NyaXB0IHNyYz0iVmlld3MvRGF0YUdyaWQuanMiPjwvc2NyaXB0PgogICAgIDxzY3Jp
cHQgc3JjPSJWaWV3cy9EZXRhaWxzU2VjdGlvblJvdy5qcyI+PC9zY3JpcHQ+CkBAIC0zMDYsNyAr
MzA3LDcgQEAKICAgICA8c2NyaXB0IHNyYz0iVmlld3MvVHJlZU91dGxpbmUuanMiPjwvc2NyaXB0
PgogCiAgICAgPHNjcmlwdCBzcmM9IlZpZXdzL0J1dHRvbk5hdmlnYXRpb25JdGVtLmpzIj48L3Nj
cmlwdD4KLSAgICA8c2NyaXB0IHNyYz0iVmlld3MvQ29uc29sZU1lc3NhZ2VJbXBsLmpzIj48L3Nj
cmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iVmlld3MvTGVnYWN5Q29uc29sZU1lc3NhZ2VJbXBsLmpz
Ij48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iVmlld3MvRE9NVHJlZUNvbnRlbnRWaWV3Lmpz
Ij48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iVmlld3MvRGV0YWlsc1NpZGViYXJQYW5lbC5q
cyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IlZpZXdzL0dlbmVyYWxUcmVlRWxlbWVudC5q
cyI+PC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9WaWV3cy9Db25zb2xlQ29tbWFuZFJlc3VsdC5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0NvbnNvbGVDb21tYW5kUmVzdWx0LmpzCmluZGV4IDgyYjA4
OTguLjdiYmIwMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL1ZpZXdzL0NvbnNvbGVDb21tYW5kUmVzdWx0LmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0NvbnNvbGVDb21tYW5kUmVzdWx0LmpzCkBAIC0zMCwx
MyArMzAsMjYgQEAKIFdlYkluc3BlY3Rvci5Db25zb2xlQ29tbWFuZFJlc3VsdCA9IGZ1bmN0aW9u
KHJlc3VsdCwgd2FzVGhyb3duLCBvcmlnaW5hdGluZ0NvbW1hbmQsIHNhdmVkUmVzdWx0SW5kZXgp
CiB7CiAgICAgdmFyIGxldmVsID0gKHdhc1Rocm93biA/IFdlYkluc3BlY3Rvci5Db25zb2xlTWVz
c2FnZS5NZXNzYWdlTGV2ZWwuRXJyb3IgOiBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVz
c2FnZUxldmVsLkxvZyk7Ci0gICAgdGhpcy5vcmlnaW5hdGluZ0NvbW1hbmQgPSBvcmlnaW5hdGlu
Z0NvbW1hbmQ7CisgICAgdGhpcy5vcmlnaW5hdGluZ0NvbW1hbmQgPSBvcmlnaW5hdGluZ0NvbW1h
bmQ7IC8vIE5vdCB1c2VkPwogICAgIHRoaXMuc2F2ZWRSZXN1bHRJbmRleCA9IHNhdmVkUmVzdWx0
SW5kZXg7CiAKICAgICBpZiAodGhpcy5zYXZlZFJlc3VsdEluZGV4ICYmIHRoaXMuc2F2ZWRSZXN1
bHRJbmRleCA+IFdlYkluc3BlY3Rvci5Db25zb2xlQ29tbWFuZFJlc3VsdC5tYXhpbXVtU2F2ZWRS
ZXN1bHRJbmRleCkKICAgICAgICAgV2ViSW5zcGVjdG9yLkNvbnNvbGVDb21tYW5kUmVzdWx0Lm1h
eGltdW1TYXZlZFJlc3VsdEluZGV4ID0gdGhpcy5zYXZlZFJlc3VsdEluZGV4OwogCi0gICAgV2Vi
SW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlSW1wbC5jYWxsKHRoaXMsIFdlYkluc3BlY3Rvci5Db25z
b2xlTWVzc2FnZS5NZXNzYWdlU291cmNlLkpTLCBsZXZlbCwgIiIsIG51bGwsIFdlYkluc3BlY3Rv
ci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5SZXN1bHQsIHVuZGVmaW5lZCwgdW5kZWZpbmVk
LCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgW3Jlc3VsdF0pOworICAgIHZhciBtb2RlbCA9IG5ldyBX
ZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UoCisgICAgICAgIFdlYkluc3BlY3Rvci5Db25zb2xl
TWVzc2FnZS5NZXNzYWdlU291cmNlLkpTLAorICAgICAgICBsZXZlbCwKKyAgICAgICAgIiIsCisg
ICAgICAgIG51bGwsCisgICAgICAgIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdl
VHlwZS5SZXN1bHQsCisgICAgICAgIHVuZGVmaW5lZCwKKyAgICAgICAgdW5kZWZpbmVkLAorICAg
ICAgICB1bmRlZmluZWQsCisgICAgICAgIHVuZGVmaW5lZCwKKyAgICAgICAgW3Jlc3VsdF0KKyAg
ICApOworCisgICAgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlVmlldy5jYWxsKHRoaXMsIG1v
ZGVsKTsKIH07CiAKIFdlYkluc3BlY3Rvci5Db25zb2xlQ29tbWFuZFJlc3VsdC5tYXhpbXVtU2F2
ZWRSZXN1bHRJbmRleCA9IDA7CkBAIC00NCw3ICs1Nyw3IEBAIFdlYkluc3BlY3Rvci5Db25zb2xl
Q29tbWFuZFJlc3VsdC5tYXhpbXVtU2F2ZWRSZXN1bHRJbmRleCA9IDA7CiBXZWJJbnNwZWN0b3Iu
Q29uc29sZUNvbW1hbmRSZXN1bHQuY2xlYXJNYXhpbXVtU2F2ZWRSZXN1bHRJbmRleCA9IGZ1bmN0
aW9uKCkKIHsKICAgICBXZWJJbnNwZWN0b3IuQ29uc29sZUNvbW1hbmRSZXN1bHQubWF4aW11bVNh
dmVkUmVzdWx0SW5kZXggPSAwOwotfQorfTsKIAogV2ViSW5zcGVjdG9yLkNvbnNvbGVDb21tYW5k
UmVzdWx0LnByb3RvdHlwZSA9IHsKICAgICBjb25zdHJ1Y3RvcjogV2ViSW5zcGVjdG9yLkNvbnNv
bGVDb21tYW5kUmVzdWx0LApAQCAtNTUsNyArNjgsNyBAQCBXZWJJbnNwZWN0b3IuQ29uc29sZUNv
bW1hbmRSZXN1bHQucHJvdG90eXBlID0gewogCiAgICAgdG9NZXNzYWdlRWxlbWVudDogZnVuY3Rp
b24oKQogICAgIHsKLSAgICAgICAgdmFyIGVsZW1lbnQgPSBXZWJJbnNwZWN0b3IuQ29uc29sZU1l
c3NhZ2VJbXBsLnByb3RvdHlwZS50b01lc3NhZ2VFbGVtZW50LmNhbGwodGhpcyk7CisgICAgICAg
IHZhciBlbGVtZW50ID0gV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlVmlldy5wcm90b3R5cGUu
dG9NZXNzYWdlRWxlbWVudC5jYWxsKHRoaXMpOwogICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5h
ZGQoImNvbnNvbGUtdXNlci1jb21tYW5kLXJlc3VsdCIpOwogICAgICAgICBpZiAoIWVsZW1lbnQu
Z2V0QXR0cmlidXRlKCJkYXRhLWxhYmVscHJlZml4IikpCiAgICAgICAgICAgICBlbGVtZW50LnNl
dEF0dHJpYnV0ZSgiZGF0YS1sYWJlbHByZWZpeCIsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiT3V0
cHV0OiAiKSk7CkBAIC02OCw0ICs4MSw0IEBAIFdlYkluc3BlY3Rvci5Db25zb2xlQ29tbWFuZFJl
c3VsdC5wcm90b3R5cGUgPSB7CiAgICAgfQogfTsKIAotV2ViSW5zcGVjdG9yLkNvbnNvbGVDb21t
YW5kUmVzdWx0LnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3Nh
Z2VJbXBsLnByb3RvdHlwZTsKK1dlYkluc3BlY3Rvci5Db25zb2xlQ29tbWFuZFJlc3VsdC5wcm90
b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlVmlldy5wcm90b3R5
cGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3
cy9Db25zb2xlTWVzc2FnZS5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L1ZpZXdzL0NvbnNvbGVNZXNzYWdlLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MGFjZDgyLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L1ZpZXdzL0NvbnNvbGVNZXNzYWdlLmpzCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMyBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEpvc2VwaCBQZWNvcmFybwotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFw
cGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotV2ViSW5zcGVjdG9yLkNv
bnNvbGVNZXNzYWdlID0gZnVuY3Rpb24oc291cmNlLCBsZXZlbCwgdXJsLCBsaW5lLCBjb2x1bW4s
IHJlcGVhdENvdW50KQotewotICAgIHRoaXMuc291cmNlID0gc291cmNlOwotICAgIHRoaXMubGV2
ZWwgPSBsZXZlbDsKLSAgICB0aGlzLnVybCA9IHVybCB8fCBudWxsOwotICAgIHRoaXMubGluZSA9
IGxpbmUgfHwgMDsKLSAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbiB8fCAwOwotCi0gICAgcmVwZWF0
Q291bnQgPSByZXBlYXRDb3VudCB8fCAxOwotICAgIHRoaXMucmVwZWF0Q291bnQgPSByZXBlYXRD
b3VudDsKLSAgICB0aGlzLnJlcGVhdERlbHRhID0gcmVwZWF0Q291bnQ7Ci0gICAgdGhpcy50b3Rh
bFJlcGVhdENvdW50ID0gcmVwZWF0Q291bnQ7Ci19OwotCi1XZWJJbnNwZWN0b3IuQ29uc29sZU1l
c3NhZ2UucHJvdG90eXBlID0gewotICAgIGlzRXJyb3JPcldhcm5pbmc6IGZ1bmN0aW9uKCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiAodGhpcy5sZXZlbCA9PT0gV2ViSW5zcGVjdG9yLkNvbnNvbGVN
ZXNzYWdlLk1lc3NhZ2VMZXZlbC5XYXJuaW5nIHx8IHRoaXMubGV2ZWwgPT09IFdlYkluc3BlY3Rv
ci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuRXJyb3IpOwotICAgIH0sCi0KLSAgICB1cGRh
dGVSZXBlYXRDb3VudDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgLy8gSW1wbGVtZW50ZWQg
YnkgY29uY3JldGUgaW5zdGFuY2VzCi0gICAgfSwKLQotICAgIGNsb25lOiBmdW5jdGlvbigpCi0g
ICAgewotICAgICAgICAvLyBJbXBsZW1lbnRlZCBieSBjb25jcmV0ZSBpbnN0YW5jZXMKLSAgICB9
Ci19OwotCi1XZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuY3JlYXRlID0gZnVuY3Rpb24oc291
cmNlLCBsZXZlbCwgbWVzc2FnZSwgdHlwZSwgdXJsLCBsaW5lLCBjb2x1bW4sIHJlcGVhdENvdW50
LCBwYXJhbWV0ZXJzLCBzdGFja1RyYWNlLCByZXF1ZXN0KQotewotICAgIHJldHVybiBuZXcgV2Vi
SW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlSW1wbChzb3VyY2UsIGxldmVsLCBtZXNzYWdlLCBudWxs
LCB0eXBlLCB1cmwsIGxpbmUsIGNvbHVtbiwgcmVwZWF0Q291bnQsIHBhcmFtZXRlcnMsIHN0YWNr
VHJhY2UsIHJlcXVlc3QpOwotfTsKLQotLy8gRklYTUU6IFN3aXRjaCB0byBDb25zb2xlQWdlbnQu
Q29uc29sZU1lc3NhZ2VTb3VyY2UuCi1XZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2Fn
ZVNvdXJjZSA9IHsKLSAgICBIVE1MOiAiaHRtbCIsCi0gICAgWE1MOiAieG1sIiwKLSAgICBKUzog
ImphdmFzY3JpcHQiLAotICAgIE5ldHdvcms6ICJuZXR3b3JrIiwKLSAgICBDb25zb2xlQVBJOiAi
Y29uc29sZS1hcGkiLAotICAgIE90aGVyOiAib3RoZXIiCi19OwotCi0vLyBGSVhNRTogU3dpdGNo
IHRvIENvbnNvbGVBZ2VudC5Db25zb2xlTWVzc2FnZVR5cGUuCi1XZWJJbnNwZWN0b3IuQ29uc29s
ZU1lc3NhZ2UuTWVzc2FnZVR5cGUgPSB7Ci0gICAgTG9nOiAibG9nIiwKLSAgICBEaXI6ICJkaXIi
LAotICAgIERpclhNTDogImRpcnhtbCIsCi0gICAgVGFibGU6ICJ0YWJsZSIsCi0gICAgVHJhY2U6
ICJ0cmFjZSIsCi0gICAgU3RhcnRHcm91cDogInN0YXJ0R3JvdXAiLAotICAgIFN0YXJ0R3JvdXBD
b2xsYXBzZWQ6ICJzdGFydEdyb3VwQ29sbGFwc2VkIiwKLSAgICBFbmRHcm91cDogImVuZEdyb3Vw
IiwKLSAgICBBc3NlcnQ6ICJhc3NlcnQiLAotICAgIFJlc3VsdDogInJlc3VsdCIKLX07Ci0KLS8v
IEZJWE1FOiBTd2l0Y2ggdG8gQ29uc29sZUFnZW50LkNvbnNvbGVNZXNzYWdlTGV2ZWwuCi1XZWJJ
bnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsID0gewotICAgIFRpcDogInRpcCIs
Ci0gICAgTG9nOiAibG9nIiwKLSAgICBXYXJuaW5nOiAid2FybmluZyIsCi0gICAgRXJyb3I6ICJl
cnJvciIsCi0gICAgRGVidWc6ICJkZWJ1ZyIKLX07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Db25zb2xlTWVzc2FnZUltcGwuanMgYi9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Db25zb2xlTWVzc2FnZUltcGwu
anMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzNWRiY2MuLjAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvQ29uc29sZU1lc3NhZ2VJ
bXBsLmpzCisrKyAvZGV2L251bGwKQEAgLTEsODAwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDcsIDIwMDgsIDIwMTMgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAwOSBKb3NlcGggUGVjb3Jhcm8KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
IDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLVdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZUltcGwg
PSBmdW5jdGlvbihzb3VyY2UsIGxldmVsLCBtZXNzYWdlLCBsaW5raWZpZXIsIHR5cGUsIHVybCwg
bGluZSwgY29sdW1uLCByZXBlYXRDb3VudCwgcGFyYW1ldGVycywgc3RhY2tUcmFjZSwgcmVxdWVz
dCkKLXsKLSAgICBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuY2FsbCh0aGlzLCBzb3VyY2Us
IGxldmVsLCB1cmwsIGxpbmUsIGNvbHVtbiwgcmVwZWF0Q291bnQpOwotCi0gICAgdGhpcy5fbGlu
a2lmaWVyID0gbGlua2lmaWVyOwotICAgIHRoaXMudHlwZSA9IHR5cGUgfHwgV2ViSW5zcGVjdG9y
LkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLkxvZzsKLSAgICB0aGlzLl9tZXNzYWdlVGV4dCA9
IG1lc3NhZ2U7Ci0gICAgdGhpcy5fcGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7Ci0gICAgdGhpcy5f
c3RhY2tUcmFjZSA9IHN0YWNrVHJhY2U7Ci0gICAgdGhpcy5fcmVxdWVzdCA9IHJlcXVlc3Q7Ci0K
LSAgICB0aGlzLl9jdXN0b21Gb3JtYXR0ZXJzID0gewotICAgICAgICAib2JqZWN0IjogdGhpcy5f
Zm9ybWF0UGFyYW1ldGVyQXNPYmplY3QsCi0gICAgICAgICJlcnJvciI6IHRoaXMuX2Zvcm1hdFBh
cmFtZXRlckFzT2JqZWN0LAotICAgICAgICAibWFwIjogdGhpcy5fZm9ybWF0UGFyYW1ldGVyQXNP
YmplY3QsCi0gICAgICAgICJzZXQiOiB0aGlzLl9mb3JtYXRQYXJhbWV0ZXJBc09iamVjdCwKLSAg
ICAgICAgIndlYWttYXAiOiB0aGlzLl9mb3JtYXRQYXJhbWV0ZXJBc09iamVjdCwKLSAgICAgICAg
Iml0ZXJhdG9yIjogdGhpcy5fZm9ybWF0UGFyYW1ldGVyQXNPYmplY3QsCi0gICAgICAgICJhcnJh
eSI6ICB0aGlzLl9mb3JtYXRQYXJhbWV0ZXJBc0FycmF5LAotICAgICAgICAibm9kZSI6ICAgdGhp
cy5fZm9ybWF0UGFyYW1ldGVyQXNOb2RlLAotICAgICAgICAic3RyaW5nIjogdGhpcy5fZm9ybWF0
UGFyYW1ldGVyQXNTdHJpbmcKLSAgICB9OwotfTsKLQotV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNz
YWdlSW1wbC5wcm90b3R5cGUgPSB7Ci0KLSAgICBlbmZvcmNlc0NsaXBib2FyZFByZWZpeFN0cmlu
ZzogdHJ1ZSwKLQotICAgIF9mb3JtYXRNZXNzYWdlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAg
ICB0aGlzLl9mb3JtYXR0ZWRNZXNzYWdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIp
OwotICAgICAgICB0aGlzLl9mb3JtYXR0ZWRNZXNzYWdlLmNsYXNzTmFtZSA9ICJjb25zb2xlLW1l
c3NhZ2UtdGV4dCI7Ci0KLSAgICAgICAgdmFyIG1lc3NhZ2VUZXh0OwotICAgICAgICBpZiAodGhp
cy5zb3VyY2UgPT09IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNlLkNv
bnNvbGVBUEkpIHsKLSAgICAgICAgICAgIHN3aXRjaCAodGhpcy50eXBlKSB7Ci0gICAgICAgICAg
ICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuVHJhY2U6
Ci0gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VUZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5v
ZGUoImNvbnNvbGUudHJhY2UoKSIpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5B
c3NlcnQ6Ci0gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gW1dlYkluc3BlY3Rvci5VSVN0
cmluZygiQXNzZXJ0aW9uIGZhaWxlZDoiKV07Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0aGlz
Ll9wYXJhbWV0ZXJzKQotICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3MuY29uY2F0
KHRoaXMuX3BhcmFtZXRlcnMpOwotICAgICAgICAgICAgICAgICAgICBtZXNzYWdlVGV4dCA9IHRo
aXMuX2Zvcm1hdChhcmdzKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuRGlyOgot
ICAgICAgICAgICAgICAgICAgICB2YXIgb2JqID0gdGhpcy5fcGFyYW1ldGVycyA/IHRoaXMuX3Bh
cmFtZXRlcnNbMF0gOiB1bmRlZmluZWQ7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0g
WyIlTyIsIG9ial07Ci0gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VUZXh0ID0gdGhpcy5fZm9y
bWF0KGFyZ3MpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IHRoaXMuX3BhcmFtZXRlcnMg
fHwgW3RoaXMuX21lc3NhZ2VUZXh0XTsKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZVRleHQg
PSB0aGlzLl9mb3JtYXQoYXJncyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAo
dGhpcy5zb3VyY2UgPT09IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNl
Lk5ldHdvcmspIHsKLSAgICAgICAgICAgIGlmICh0aGlzLl9yZXF1ZXN0KSB7Ci0gICAgICAgICAg
ICAgICAgdGhpcy5fc3RhY2tUcmFjZSA9IHRoaXMuX3JlcXVlc3Quc3RhY2tUcmFjZTsKLSAgICAg
ICAgICAgICAgICBpZiAodGhpcy5fcmVxdWVzdC5pbml0aWF0b3IgJiYgdGhpcy5fcmVxdWVzdC5p
bml0aWF0b3IudXJsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMudXJsID0gdGhpcy5fcmVx
dWVzdC5pbml0aWF0b3IudXJsOwotICAgICAgICAgICAgICAgICAgICB0aGlzLmxpbmUgPSB0aGlz
Ll9yZXF1ZXN0LmluaXRpYXRvci5saW5lTnVtYmVyOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBtZXNzYWdlVGV4dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsK
LSAgICAgICAgICAgICAgICBpZiAodGhpcy5sZXZlbCA9PT0gV2ViSW5zcGVjdG9yLkNvbnNvbGVN
ZXNzYWdlLk1lc3NhZ2VMZXZlbC5FcnJvcikgewotICAgICAgICAgICAgICAgICAgICBtZXNzYWdl
VGV4dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0aGlzLl9yZXF1ZXN0LnJl
cXVlc3RNZXRob2QgKyAiICIpKTsKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZVRleHQuYXBw
ZW5kQ2hpbGQoV2ViSW5zcGVjdG9yLmxpbmtpZnlSZXF1ZXN0QXNOb2RlKHRoaXMuX3JlcXVlc3Qp
KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3JlcXVlc3QuZmFpbGVkKQotICAgICAg
ICAgICAgICAgICAgICAgICAgbWVzc2FnZVRleHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRl
VGV4dE5vZGUoIiAiICsgdGhpcy5fcmVxdWVzdC5sb2NhbGl6ZWRGYWlsRGVzY3JpcHRpb24pKTsK
LSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2Fn
ZVRleHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiAiICsgdGhpcy5fcmVx
dWVzdC5zdGF0dXNDb2RlICsgIiAoIiArIHRoaXMuX3JlcXVlc3Quc3RhdHVzVGV4dCArICIpIikp
OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBmcmFn
bWVudCA9IFdlYkluc3BlY3Rvci5saW5raWZ5U3RyaW5nQXNGcmFnbWVudFdpdGhDdXN0b21MaW5r
aWZpZXIodGhpcy5fbWVzc2FnZVRleHQsIFdlYkluc3BlY3Rvci5saW5raWZ5UmVxdWVzdEFzTm9k
ZS5iaW5kKG51bGwsIHRoaXMuX3JlcXVlc3QsICIiKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1l
c3NhZ2VUZXh0LmFwcGVuZENoaWxkKGZyYWdtZW50KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmICh0aGlzLnVybCkgewotICAgICAg
ICAgICAgICAgICAgICB2YXIgYW5jaG9yID0gV2ViSW5zcGVjdG9yLmxpbmtpZnlVUkxBc05vZGUo
dGhpcy51cmwsIHRoaXMudXJsLCAiY29uc29sZS1tZXNzYWdlLXVybCIpOwotICAgICAgICAgICAg
ICAgICAgICB0aGlzLl9mb3JtYXR0ZWRNZXNzYWdlLmFwcGVuZENoaWxkKGFuY2hvcik7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1lc3NhZ2VUZXh0ID0gdGhpcy5fZm9ybWF0
KFt0aGlzLl9tZXNzYWdlVGV4dF0pOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgdmFyIGFyZ3MgPSB0aGlzLl9wYXJhbWV0ZXJzIHx8IFt0aGlzLl9tZXNzYWdl
VGV4dF07Ci0gICAgICAgICAgICBtZXNzYWdlVGV4dCA9IHRoaXMuX2Zvcm1hdChhcmdzKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmICh0aGlzLnNvdXJjZSAhPT0gV2ViSW5zcGVjdG9yLkNvbnNv
bGVNZXNzYWdlLk1lc3NhZ2VTb3VyY2UuTmV0d29yayB8fCB0aGlzLl9yZXF1ZXN0KSB7Ci0gICAg
ICAgICAgICB2YXIgZmlyc3ROb25OYXRpdmVDYWxsRnJhbWUgPSB0aGlzLl9maXJzdE5vbk5hdGl2
ZUNhbGxGcmFtZSgpOwotICAgICAgICAgICAgaWYgKGZpcnN0Tm9uTmF0aXZlQ2FsbEZyYW1lKSB7
Ci0gICAgICAgICAgICAgICAgdmFyIHVybEVsZW1lbnQgPSB0aGlzLl9saW5raWZ5Q2FsbEZyYW1l
KGZpcnN0Tm9uTmF0aXZlQ2FsbEZyYW1lKTsKLSAgICAgICAgICAgICAgICB0aGlzLl9mb3JtYXR0
ZWRNZXNzYWdlLmFwcGVuZENoaWxkKHVybEVsZW1lbnQpOwotICAgICAgICAgICAgfSBlbHNlIGlm
ICh0aGlzLnVybCAmJiAhdGhpcy5fc2hvdWxkSGlkZVVSTCh0aGlzLnVybCkpIHsKLSAgICAgICAg
ICAgICAgICB2YXIgdXJsRWxlbWVudCA9IHRoaXMuX2xpbmtpZnlMb2NhdGlvbih0aGlzLnVybCwg
dGhpcy5saW5lLCB0aGlzLmNvbHVtbik7Ci0gICAgICAgICAgICAgICAgdGhpcy5fZm9ybWF0dGVk
TWVzc2FnZS5hcHBlbmRDaGlsZCh1cmxFbGVtZW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotCi0gICAgICAgIHRoaXMuX2Zvcm1hdHRlZE1lc3NhZ2UuYXBwZW5kQ2hpbGQobWVzc2FnZVRl
eHQpOwotCi0gICAgICAgIGlmICh0aGlzLnNhdmVkUmVzdWx0SW5kZXgpIHsKLSAgICAgICAgICAg
IHZhciBzYXZlZFZhcmlhYmxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4i
KTsKLSAgICAgICAgICAgIHNhdmVkVmFyaWFibGVFbGVtZW50LmNsYXNzTmFtZSA9ICJjb25zb2xl
LXNhdmVkLXZhcmlhYmxlIjsKLSAgICAgICAgICAgIHNhdmVkVmFyaWFibGVFbGVtZW50LnRleHRD
b250ZW50ID0gIiA9ICQiICsgdGhpcy5zYXZlZFJlc3VsdEluZGV4OwotICAgICAgICAgICAgaWYg
KHRoaXMuX29iamVjdFRyZWUpCi0gICAgICAgICAgICAgICAgdGhpcy5fb2JqZWN0VHJlZS5hcHBl
bmRUaXRsZVN1ZmZpeChzYXZlZFZhcmlhYmxlRWxlbWVudCk7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgdGhpcy5fZm9ybWF0dGVkTWVzc2FnZS5hcHBlbmRDaGlsZChzYXZlZFZh
cmlhYmxlRWxlbWVudCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodGhpcy5fc2hvdWxkRHVt
cFN0YWNrVHJhY2UoKSkgewotICAgICAgICAgICAgdmFyIG9sID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgib2wiKTsKLSAgICAgICAgICAgIG9sLmNsYXNzTmFtZSA9ICJvdXRsaW5lLWRpc2Nsb3N1
cmUiOwotICAgICAgICAgICAgdmFyIHRyZWVPdXRsaW5lID0gbmV3IFRyZWVPdXRsaW5lKG9sKTsK
LQotICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSB0aGlzLl9mb3JtYXR0ZWRNZXNzYWdlOwotICAg
ICAgICAgICAgdmFyIHJvb3QgPSBuZXcgVHJlZUVsZW1lbnQoY29udGVudCwgbnVsbCwgdHJ1ZSk7
Ci0gICAgICAgICAgICBjb250ZW50LnRyZWVFbGVtZW50Rm9yVGVzdCA9IHJvb3Q7Ci0gICAgICAg
ICAgICB0cmVlT3V0bGluZS5hcHBlbmRDaGlsZChyb290KTsKLSAgICAgICAgICAgIGlmICh0aGlz
LnR5cGUgPT09IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5UcmFjZSkK
LSAgICAgICAgICAgICAgICByb290LmV4cGFuZCgpOwotCi0gICAgICAgICAgICB0aGlzLl9wb3B1
bGF0ZVN0YWNrVHJhY2VUcmVlRWxlbWVudChyb290KTsKLSAgICAgICAgICAgIHRoaXMuX2Zvcm1h
dHRlZE1lc3NhZ2UgPSBvbDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFRoaXMgaXMgdXNlZCBm
b3IgaW5saW5lIG1lc3NhZ2UgYnViYmxlcyBpbiBTb3VyY2VGcmFtZXMsIG9yIG90aGVyIHBsYWlu
LXRleHQgcmVwcmVzZW50YXRpb25zLgotICAgICAgICB0aGlzLl9tZXNzYWdlID0gbWVzc2FnZVRl
eHQudGV4dENvbnRlbnQ7Ci0gICAgfSwKLQotICAgIF9zaG91bGREdW1wU3RhY2tUcmFjZTogZnVu
Y3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuICEhdGhpcy5fc3RhY2tUcmFjZSAmJiB0aGlz
Ll9zdGFja1RyYWNlLmxlbmd0aCAmJiAodGhpcy5zb3VyY2UgPT09IFdlYkluc3BlY3Rvci5Db25z
b2xlTWVzc2FnZS5NZXNzYWdlU291cmNlLk5ldHdvcmsgfHwgdGhpcy5sZXZlbCA9PT0gV2ViSW5z
cGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5FcnJvciB8fCB0aGlzLnR5cGUgPT09
IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5UcmFjZSk7Ci0gICAgfSwK
LQotICAgIF9zaG91bGRIaWRlVVJMOiBmdW5jdGlvbih1cmwpCi0gICAgewotICAgICAgICByZXR1
cm4gdXJsID09PSAidW5kZWZpbmVkIiB8fCB1cmwgPT09ICJbbmF0aXZlIGNvZGVdIjsKLSAgICB9
LAotCi0gICAgX2ZpcnN0Tm9uTmF0aXZlQ2FsbEZyYW1lOiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICBpZiAoIXRoaXMuX3N0YWNrVHJhY2UpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLQot
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3N0YWNrVHJhY2UubGVuZ3RoOyBpKysp
IHsKLSAgICAgICAgICAgIHZhciBmcmFtZSA9IHRoaXMuX3N0YWNrVHJhY2VbaV07Ci0gICAgICAg
ICAgICBpZiAoIWZyYW1lLnVybCB8fCBmcmFtZS51cmwgPT09ICJbbmF0aXZlIGNvZGVdIikKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHJldHVybiBmcmFtZTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0sCi0KLSAgICBnZXQgbWVzc2FnZSgp
Ci0gICAgewotICAgICAgICAvLyBmb3JjZSBtZXNzYWdlIGZvcm1hdHRpbmcKLSAgICAgICAgdmFy
IGZvcm1hdHRlZE1lc3NhZ2UgPSB0aGlzLmZvcm1hdHRlZE1lc3NhZ2U7Ci0gICAgICAgIHJldHVy
biB0aGlzLl9tZXNzYWdlOwotICAgIH0sCi0KLSAgICBnZXQgZm9ybWF0dGVkTWVzc2FnZSgpCi0g
ICAgewotICAgICAgICBpZiAoIXRoaXMuX2Zvcm1hdHRlZE1lc3NhZ2UpCi0gICAgICAgICAgICB0
aGlzLl9mb3JtYXRNZXNzYWdlKCk7Ci0gICAgICAgIHJldHVybiB0aGlzLl9mb3JtYXR0ZWRNZXNz
YWdlOwotICAgIH0sCi0KLSAgICBfbGlua2lmeUxvY2F0aW9uOiBmdW5jdGlvbih1cmwsIGxpbmVO
dW1iZXIsIGNvbHVtbk51bWJlcikKLSAgICB7Ci0gICAgICAgIC8vIENvbnNvbGVNZXNzYWdlIHN0
YWNrIHRyYWNlIGxpbmUgbnVtYmVycyBhcmUgb25lLWJhc2VkLgotICAgICAgICBsaW5lTnVtYmVy
ID0gbGluZU51bWJlciA/IGxpbmVOdW1iZXIgLSAxIDogMDsKLQotICAgICAgICByZXR1cm4gV2Vi
SW5zcGVjdG9yLmxpbmtpZnlMb2NhdGlvbih1cmwsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwg
ImNvbnNvbGUtbWVzc2FnZS11cmwiKTsKLSAgICB9LAotCi0gICAgX2xpbmtpZnlDYWxsRnJhbWU6
IGZ1bmN0aW9uKGNhbGxGcmFtZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9saW5raWZ5
TG9jYXRpb24oY2FsbEZyYW1lLnVybCwgY2FsbEZyYW1lLmxpbmVOdW1iZXIsIGNhbGxGcmFtZS5j
b2x1bW5OdW1iZXIpOwotICAgIH0sCi0KLSAgICBpc0Vycm9yT3JXYXJuaW5nOiBmdW5jdGlvbigp
Ci0gICAgewotICAgICAgICByZXR1cm4gKHRoaXMubGV2ZWwgPT09IFdlYkluc3BlY3Rvci5Db25z
b2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuV2FybmluZyB8fCB0aGlzLmxldmVsID09PSBXZWJJbnNw
ZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkVycm9yKTsKLSAgICB9LAotCi0gICAg
X2Zvcm1hdDogZnVuY3Rpb24ocGFyYW1ldGVycykKLSAgICB7Ci0gICAgICAgIC8vIFRoaXMgbm9k
ZSBpcyB1c2VkIGxpa2UgYSBCdWlsZGVyLiBWYWx1ZXMgYXJlIGNvbnRpbnVhbGx5IGFwcGVuZGVk
IG9udG8gaXQuCi0gICAgICAgIHZhciBmb3JtYXR0ZWRSZXN1bHQgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJzcGFuIik7Ci0gICAgICAgIGlmICghcGFyYW1ldGVycy5sZW5ndGgpCi0gICAgICAg
ICAgICByZXR1cm4gZm9ybWF0dGVkUmVzdWx0OwotCi0gICAgICAgIC8vIEZvcm1hdHRpbmcgY29k
ZSBiZWxvdyBhc3N1bWVzIHRoYXQgcGFyYW1ldGVycyBhcmUgYWxsIHdyYXBwZXJzIHdoZXJlYXMg
ZnJvbnRlbmQgY29uc29sZQotICAgICAgICAvLyBBUEkgYWxsb3dzIHBhc3NpbmcgYXJiaXRyYXJ5
IHZhbHVlcyBhcyBtZXNzYWdlcyAoc3RyaW5ncywgbnVtYmVycywgZXRjLikuIFdyYXAgdGhlbSBo
ZXJlLgotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtZXRlcnMubGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBPbmx5IHBhc3MgcnVudGltZSB3cmFwcGVycyBoZXJl
LgotICAgICAgICAgICAgaWYgKHBhcmFtZXRlcnNbaV0gaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3Iu
UmVtb3RlT2JqZWN0KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBp
ZiAodHlwZW9mIHBhcmFtZXRlcnNbaV0gPT09ICJvYmplY3QiKQotICAgICAgICAgICAgICAgIHBh
cmFtZXRlcnNbaV0gPSBXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0LmZyb21QYXlsb2FkKHBhcmFt
ZXRlcnNbaV0pOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHBhcmFtZXRlcnNb
aV0gPSBXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0LmZyb21QcmltaXRpdmVWYWx1ZShwYXJhbWV0
ZXJzW2ldKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFRoZXJlIGNhbiBiZSBzdHJpbmcgbG9n
IGFuZCBzdHJpbmcgZXZhbCByZXN1bHQuIFdlIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlbSBiYXNl
ZCBvbiBtZXNzYWdlIHR5cGUuCi0gICAgICAgIHZhciBzaG91bGRGb3JtYXRNZXNzYWdlID0gV2Vi
SW5zcGVjdG9yLlJlbW90ZU9iamVjdC50eXBlKHBhcmFtZXRlcnNbMF0pID09PSAic3RyaW5nIiAm
JiB0aGlzLnR5cGUgIT09IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5S
ZXN1bHQ7Ci0KLSAgICAgICAgaWYgKHNob3VsZEZvcm1hdE1lc3NhZ2UpIHsKLSAgICAgICAgICAg
IC8vIE11bHRpcGxlIHBhcmFtZXRlcnMgd2l0aCB0aGUgZmlyc3QgYmVpbmcgYSBmb3JtYXQgc3Ry
aW5nLiBTYXZlIHVudXNlZCBzdWJzdGl0dXRpb25zLgotICAgICAgICAgICAgdmFyIHJlc3VsdCA9
IHRoaXMuX2Zvcm1hdFdpdGhTdWJzdGl0dXRpb25TdHJpbmcocGFyYW1ldGVycywgZm9ybWF0dGVk
UmVzdWx0KTsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMgPSByZXN1bHQudW51c2VkU3Vic3RpdHV0
aW9uczsKLSAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJzLmxlbmd0aCkKLSAgICAgICAgICAgICAg
ICBmb3JtYXR0ZWRSZXN1bHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiAi
KSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodGhpcy50eXBlID09PSBXZWJJbnNwZWN0b3Iu
Q29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuVGFibGUpIHsKLSAgICAgICAgICAgIGZvcm1hdHRl
ZFJlc3VsdC5hcHBlbmRDaGlsZCh0aGlzLl9mb3JtYXRQYXJhbWV0ZXJBc1RhYmxlKHBhcmFtZXRl
cnMpKTsKLSAgICAgICAgICAgIHJldHVybiBmb3JtYXR0ZWRSZXN1bHQ7Ci0gICAgICAgIH0KLQot
ICAgICAgICAvLyBTaW5nbGUgcGFyYW1ldGVyLCBvciB1bnVzZWQgc3Vic3RpdHV0aW9ucyBmcm9t
IGFib3ZlLgotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtZXRlcnMubGVuZ3RoOyAr
K2kpIHsKLSAgICAgICAgICAgIC8vIElubGluZSBzdHJpbmdzIHdoZW4gZm9ybWF0dGluZy4KLSAg
ICAgICAgICAgIGlmIChzaG91bGRGb3JtYXRNZXNzYWdlICYmIHBhcmFtZXRlcnNbaV0udHlwZSA9
PT0gInN0cmluZyIpIHsKLSAgICAgICAgICAgICAgICB2YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoInNwYW4iKTsKLSAgICAgICAgICAgICAgICBzcGFuLmNsYXNzTGlzdC5hZGQoInR5
cGUtc3RyaW5nIik7Ci0gICAgICAgICAgICAgICAgc3Bhbi50ZXh0Q29udGVudCA9IHBhcmFtZXRl
cnNbaV0uZGVzY3JpcHRpb247Ci0gICAgICAgICAgICAgICAgZm9ybWF0dGVkUmVzdWx0LmFwcGVu
ZENoaWxkKHNwYW4pOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgZm9ybWF0
dGVkUmVzdWx0LmFwcGVuZENoaWxkKHRoaXMuX2Zvcm1hdFBhcmFtZXRlcihwYXJhbWV0ZXJzW2ld
LCBmYWxzZSkpOwotCi0gICAgICAgICAgICBpZiAoaSA8IHBhcmFtZXRlcnMubGVuZ3RoIC0gMSAm
JiAhdGhpcy5faXNFeHBhbmRhYmxlKHBhcmFtZXRlcnNbaV0pKQotICAgICAgICAgICAgICAgIGZv
cm1hdHRlZFJlc3VsdC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiICIpKTsK
LQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmb3JtYXR0ZWRSZXN1bHQ7Ci0gICAgfSwKLQot
ICAgIF9pc0V4cGFuZGFibGU6IGZ1bmN0aW9uKHJlbW90ZU9iamVjdCkgewotICAgICAgICBpZiAo
IXJlbW90ZU9iamVjdCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAo
cmVtb3RlT2JqZWN0Lmhhc0NoaWxkcmVuICYmIHJlbW90ZU9iamVjdC5wcmV2aWV3ICYmIHJlbW90
ZU9iamVjdC5wcmV2aWV3Lmxvc3NsZXNzKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgICAgIHJldHVybiByZW1vdGVPYmplY3QuaGFzQ2hpbGRyZW47Ci0gICAgfSwKLQotICAgIF9m
b3JtYXRQYXJhbWV0ZXI6IGZ1bmN0aW9uKG91dHB1dCwgZm9yY2VPYmplY3RGb3JtYXQpCi0gICAg
ewotICAgICAgICB2YXIgdHlwZTsKLSAgICAgICAgaWYgKGZvcmNlT2JqZWN0Rm9ybWF0KQotICAg
ICAgICAgICAgdHlwZSA9ICJvYmplY3QiOwotICAgICAgICBlbHNlIGlmIChvdXRwdXQgaW5zdGFu
Y2VvZiBXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0KQotICAgICAgICAgICAgdHlwZSA9IG91dHB1
dC5zdWJ0eXBlIHx8IG91dHB1dC50eXBlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0eXBl
ID0gdHlwZW9mIG91dHB1dDsKLQotICAgICAgICB2YXIgZm9ybWF0dGVyID0gdGhpcy5fY3VzdG9t
Rm9ybWF0dGVyc1t0eXBlXTsKLSAgICAgICAgaWYgKCFmb3JtYXR0ZXIpCi0gICAgICAgICAgICBm
b3JtYXR0ZXIgPSB0aGlzLl9mb3JtYXRQYXJhbWV0ZXJBc1ZhbHVlOwotCi0gICAgICAgIHZhciBz
cGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwotCi0gICAgICAgIGlmICh0aGlz
Ll9pc0V4cGFuZGFibGUob3V0cHV0KSkKLSAgICAgICAgICAgIHNwYW4uY2xhc3NMaXN0LmFkZCgi
ZXhwYW5kYWJsZSIpOwotCi0gICAgICAgIGZvcm1hdHRlci5jYWxsKHRoaXMsIG91dHB1dCwgc3Bh
biwgZm9yY2VPYmplY3RGb3JtYXQpOwotICAgICAgICByZXR1cm4gc3BhbjsKLSAgICB9LAotCi0g
ICAgX2Zvcm1hdFBhcmFtZXRlckFzVmFsdWU6IGZ1bmN0aW9uKHZhbHVlLCBlbGVtKQotICAgIHsK
LSAgICAgICAgZWxlbS5hcHBlbmRDaGlsZChXZWJJbnNwZWN0b3IuRm9ybWF0dGVkVmFsdWUuY3Jl
YXRlRWxlbWVudEZvclJlbW90ZU9iamVjdCh2YWx1ZSkpOwotICAgIH0sCi0KLSAgICBfZm9ybWF0
UGFyYW1ldGVyQXNPYmplY3Q6IGZ1bmN0aW9uKG9iaiwgZWxlbSwgZm9yY2VFeHBhbnNpb24pCi0g
ICAgewotICAgICAgICB0aGlzLl9vYmplY3RUcmVlID0gbmV3IFdlYkluc3BlY3Rvci5PYmplY3RU
cmVlVmlldyhvYmosIFdlYkluc3BlY3Rvci5PYmplY3RUcmVlVmlldy5Nb2RlLlByb3BlcnRpZXMs
IHRoaXMuX3Jvb3RQcm9wZXJ0eVBhdGhGb3JPYmplY3Qob2JqKSwgZm9yY2VFeHBhbnNpb24pOwot
ICAgICAgICBlbGVtLmFwcGVuZENoaWxkKHRoaXMuX29iamVjdFRyZWUuZWxlbWVudCk7Ci0gICAg
fSwKLQotICAgIF9mb3JtYXRQYXJhbWV0ZXJBc1N0cmluZzogZnVuY3Rpb24ob3V0cHV0LCBlbGVt
KQotICAgIHsKLSAgICAgICAgdmFyIHNwYW4gPSBXZWJJbnNwZWN0b3IuRm9ybWF0dGVkVmFsdWUu
Y3JlYXRlTGlua2lmaWVkRWxlbWVudFN0cmluZyhvdXRwdXQuZGVzY3JpcHRpb24pOwotICAgICAg
ICBlbGVtLmFwcGVuZENoaWxkKHNwYW4pOwotICAgIH0sCi0KLSAgICBfZm9ybWF0UGFyYW1ldGVy
QXNOb2RlOiBmdW5jdGlvbihvYmplY3QsIGVsZW0pCi0gICAgewotICAgICAgICB2YXIgc3BhbiA9
IFdlYkluc3BlY3Rvci5Gb3JtYXR0ZWRWYWx1ZS5jcmVhdGVFbGVtZW50Rm9yTm9kZShvYmplY3Qp
OwotICAgICAgICBlbGVtLmFwcGVuZENoaWxkKHNwYW4pOwotICAgIH0sCi0KLSAgICBfZm9ybWF0
UGFyYW1ldGVyQXNBcnJheTogZnVuY3Rpb24oYXJyLCBlbGVtKQotICAgIHsKLSAgICAgICAgdGhp
cy5fb2JqZWN0VHJlZSA9IG5ldyBXZWJJbnNwZWN0b3IuT2JqZWN0VHJlZVZpZXcoYXJyLCBXZWJJ
bnNwZWN0b3IuT2JqZWN0VHJlZVZpZXcuTW9kZS5Qcm9wZXJ0aWVzLCB0aGlzLl9yb290UHJvcGVy
dHlQYXRoRm9yT2JqZWN0KGFycikpOwotICAgICAgICBlbGVtLmFwcGVuZENoaWxkKHRoaXMuX29i
amVjdFRyZWUuZWxlbWVudCk7Ci0gICAgfSwKLQotICAgIF9yb290UHJvcGVydHlQYXRoRm9yT2Jq
ZWN0OiBmdW5jdGlvbihvYmplY3QpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuc2F2ZWRSZXN1
bHRJbmRleCkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotCi0gICAgICAgIHJldHVybiBuZXcg
V2ViSW5zcGVjdG9yLlByb3BlcnR5UGF0aChvYmplY3QsICIkIiArIHRoaXMuc2F2ZWRSZXN1bHRJ
bmRleCk7Ci0gICAgfSwKLQotICAgIF91c2VyUHJvdmlkZWRDb2x1bW5OYW1lczogZnVuY3Rpb24o
Y29sdW1uTmFtZXNBcmd1bWVudCkKLSAgICB7Ci0gICAgICAgIGlmICghY29sdW1uTmFtZXNBcmd1
bWVudCkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotCi0gICAgICAgIHZhciByZW1vdGVPYmpl
Y3QgPSBXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0LmZyb21QYXlsb2FkKGNvbHVtbk5hbWVzQXJn
dW1lbnQpOwotCi0gICAgICAgIC8vIFNpbmdsZSBwcmltaXRpdmUgYXJndW1lbnQuCi0gICAgICAg
IGlmIChyZW1vdGVPYmplY3QudHlwZSA9PT0gInN0cmluZyIgfHwgcmVtb3RlT2JqZWN0LnR5cGUg
PT09ICJudW1iZXIiKQotICAgICAgICAgICAgcmV0dXJuIFtTdHJpbmcoY29sdW1uTmFtZXNBcmd1
bWVudC52YWx1ZSldOwotCi0gICAgICAgIC8vIElnbm9yZSBldmVyeXRoaW5nIHRoYXQgaXMgbm90
IGFuIGFycmF5IHdpdGggcHJvcGVydHkgcHJldmlld3MuCi0gICAgICAgIGlmIChyZW1vdGVPYmpl
Y3QudHlwZSAhPT0gIm9iamVjdCIgfHwgcmVtb3RlT2JqZWN0LnN1YnR5cGUgIT09ICJhcnJheSIg
fHwgIXJlbW90ZU9iamVjdC5wcmV2aWV3IHx8ICFyZW1vdGVPYmplY3QucHJldmlldy5wcm9wZXJ0
eVByZXZpZXdzKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAgLy8gQXJyYXku
IExvb2sgaW50byB0aGUgcHJldmlldyBhbmQgZ2V0IHN0cmluZyB2YWx1ZXMuCi0gICAgICAgIHZh
ciBleHRyYWN0ZWRDb2x1bW5OYW1lcyA9IFtdOwotICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eVBy
ZXZpZXcgb2YgcmVtb3RlT2JqZWN0LnByZXZpZXcucHJvcGVydHlQcmV2aWV3cykgewotICAgICAg
ICAgICAgaWYgKHByb3BlcnR5UHJldmlldy50eXBlID09PSAic3RyaW5nIiB8fCBwcm9wZXJ0eVBy
ZXZpZXcudHlwZSA9PT0gIm51bWJlciIpCi0gICAgICAgICAgICAgICAgZXh0cmFjdGVkQ29sdW1u
TmFtZXMucHVzaChTdHJpbmcocHJvcGVydHlQcmV2aWV3LnZhbHVlKSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICByZXR1cm4gZXh0cmFjdGVkQ29sdW1uTmFtZXMubGVuZ3RoID8gZXh0cmFjdGVkQ29s
dW1uTmFtZXMgOiBudWxsOwotICAgIH0sCi0KLSAgICBfZm9ybWF0UGFyYW1ldGVyQXNUYWJsZTog
ZnVuY3Rpb24ocGFyYW1ldGVycykKLSAgICB7Ci0gICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwotICAgICAgICB2YXIgdGFibGUgPSBwYXJhbWV0ZXJz
WzBdOwotICAgICAgICBpZiAoIXRhYmxlIHx8ICF0YWJsZS5wcmV2aWV3KQotICAgICAgICAgICAg
cmV0dXJuIGVsZW1lbnQ7Ci0KLSAgICAgICAgdmFyIHJvd3MgPSBbXTsKLSAgICAgICAgdmFyIGNv
bHVtbk5hbWVzID0gW107Ci0gICAgICAgIHZhciBmbGF0VmFsdWVzID0gW107Ci0gICAgICAgIHZh
ciBwcmV2aWV3ID0gdGFibGUucHJldmlldzsKLSAgICAgICAgdmFyIHVzZXJQcm92aWRlZENvbHVt
bk5hbWVzID0gZmFsc2U7Ci0KLSAgICAgICAgLy8gVXNlciBwcm92aWRlZCBjb2x1bW5OYW1lcy4K
LSAgICAgICAgdmFyIGV4dHJhY3RlZENvbHVtbk5hbWVzID0gdGhpcy5fdXNlclByb3ZpZGVkQ29s
dW1uTmFtZXMocGFyYW1ldGVyc1sxXSk7Ci0gICAgICAgIGlmIChleHRyYWN0ZWRDb2x1bW5OYW1l
cykgewotICAgICAgICAgICAgdXNlclByb3ZpZGVkQ29sdW1uTmFtZXMgPSB0cnVlOwotICAgICAg
ICAgICAgY29sdW1uTmFtZXMgPSBleHRyYWN0ZWRDb2x1bW5OYW1lczsKLSAgICAgICAgfQotCi0g
ICAgICAgIC8vIENoZWNrIGZpcnN0IGZvciB2YWx1ZVByZXZpZXdzIGluIHRoZSBwcm9wZXJ0aWVz
IG1lYW5pbmcgdGhpcyB3YXMgYW4gYXJyYXkgb2Ygb2JqZWN0cy4KLSAgICAgICAgaWYgKHByZXZp
ZXcucHJvcGVydHlQcmV2aWV3cykgewotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBw
cmV2aWV3LnByb3BlcnR5UHJldmlld3MubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICB2
YXIgcm93UHJvcGVydHkgPSBwcmV2aWV3LnByb3BlcnR5UHJldmlld3NbaV07Ci0gICAgICAgICAg
ICAgICAgdmFyIHJvd1ByZXZpZXcgPSByb3dQcm9wZXJ0eS52YWx1ZVByZXZpZXc7Ci0gICAgICAg
ICAgICAgICAgaWYgKCFyb3dQcmV2aWV3KQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICAgICAgICAgIHZhciByb3dWYWx1ZSA9IHt9OwotICAgICAgICAgICAgICAgIGNv
bnN0IG1heENvbHVtbnNUb1JlbmRlciA9IDEwOwotICAgICAgICAgICAgICAgIGZvciAodmFyIGog
PSAwOyBqIDwgcm93UHJldmlldy5wcm9wZXJ0eVByZXZpZXdzLmxlbmd0aDsgKytqKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHZhciBjZWxsUHJvcGVydHkgPSByb3dQcmV2aWV3LnByb3BlcnR5UHJl
dmlld3Nbal07Ci0gICAgICAgICAgICAgICAgICAgIHZhciBjb2x1bW5SZW5kZXJlZCA9IGNvbHVt
bk5hbWVzLmNvbnRhaW5zKGNlbGxQcm9wZXJ0eS5uYW1lKTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKCFjb2x1bW5SZW5kZXJlZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzZXJQ
cm92aWRlZENvbHVtbk5hbWVzIHx8IGNvbHVtbk5hbWVzLmxlbmd0aCA9PT0gbWF4Q29sdW1uc1Rv
UmVuZGVyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgICAgICAgICAgICAgY29sdW1uUmVuZGVyZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAg
ICAgICAgY29sdW1uTmFtZXMucHVzaChjZWxsUHJvcGVydHkubmFtZSk7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICByb3dWYWx1ZVtjZWxsUHJvcGVydHkubmFt
ZV0gPSBXZWJJbnNwZWN0b3IuRm9ybWF0dGVkVmFsdWUuY3JlYXRlRWxlbWVudEZvclByb3BlcnR5
UHJldmlldyhjZWxsUHJvcGVydHkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICByb3dzLnB1c2goW3Jvd1Byb3BlcnR5Lm5hbWUsIHJvd1ZhbHVlXSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJZiB0aGVyZSB3ZXJlIHZhbHVlUHJldmlld3MsIGNv
bnZlcnQgdG8gYSBmbGF0IGxpc3QuCi0gICAgICAgIGlmIChyb3dzLmxlbmd0aCkgewotICAgICAg
ICAgICAgY29uc3QgZW1EYXNoID0gIlx1MjAxNCI7Ci0gICAgICAgICAgICBjb2x1bW5OYW1lcy51
bnNoaWZ0KFdlYkluc3BlY3Rvci5VSVN0cmluZygiKEluZGV4KSIpKTsKLSAgICAgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgIHZh
ciByb3dOYW1lID0gcm93c1tpXVswXTsKLSAgICAgICAgICAgICAgICB2YXIgcm93VmFsdWUgPSBy
b3dzW2ldWzFdOwotICAgICAgICAgICAgICAgIGZsYXRWYWx1ZXMucHVzaChyb3dOYW1lKTsKLSAg
ICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMTsgaiA8IGNvbHVtbk5hbWVzLmxlbmd0aDsgKytq
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBjb2x1bW5OYW1lID0gY29sdW1uTmFtZXNbal07
Ci0gICAgICAgICAgICAgICAgICAgIGlmICghKGNvbHVtbk5hbWUgaW4gcm93VmFsdWUpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgZmxhdFZhbHVlcy5wdXNoKGVtRGFzaCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGZsYXRWYWx1ZXMucHVzaChy
b3dWYWx1ZVtjb2x1bW5OYW1lXSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgdGhlcmUgd2VyZSBubyB2YWx1ZSBQcmV2aWV3cywg
dGhlbiBjaGVjayBmb3IgYW4gYXJyYXkgb2YgdmFsdWVzLgotICAgICAgICBpZiAoIWZsYXRWYWx1
ZXMubGVuZ3RoICYmIHByZXZpZXcucHJvcGVydHlQcmV2aWV3cykgewotICAgICAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBwcmV2aWV3LnByb3BlcnR5UHJldmlld3MubGVuZ3RoOyArK2kpIHsK
LSAgICAgICAgICAgICAgICB2YXIgcm93UHJvcGVydHkgPSBwcmV2aWV3LnByb3BlcnR5UHJldmll
d3NbaV07Ci0gICAgICAgICAgICAgICAgaWYgKCEoInZhbHVlIiBpbiByb3dQcm9wZXJ0eSkpCi0g
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAgaWYgKCFjb2x1
bW5OYW1lcy5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAgICAgY29sdW1uTmFtZXMucHVzaChX
ZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkluZGV4IikpOwotICAgICAgICAgICAgICAgICAgICBjb2x1
bW5OYW1lcy5wdXNoKFdlYkluc3BlY3Rvci5VSVN0cmluZygiVmFsdWUiKSk7Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgZmxhdFZhbHVlcy5wdXNoKHJvd1Byb3BlcnR5Lm5h
bWUpOwotICAgICAgICAgICAgICAgIGZsYXRWYWx1ZXMucHVzaChXZWJJbnNwZWN0b3IuRm9ybWF0
dGVkVmFsdWUuY3JlYXRlRWxlbWVudEZvclByb3BlcnR5UHJldmlldyhyb3dQcm9wZXJ0eSkpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgbG9zc2xlc3Mgb3Igbm90
IHRhYmxlIGRhdGEsIG91dHB1dCB0aGUgb2JqZWN0IHNvIGZ1bGwgZGF0YSBjYW4gYmUgZ290dGVu
LgotICAgICAgICBpZiAoIXByZXZpZXcubG9zc2xlc3MgfHwgIWZsYXRWYWx1ZXMubGVuZ3RoKSB7
Ci0gICAgICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX2Zvcm1hdFBhcmFtZXRlcih0
YWJsZSkpOwotICAgICAgICAgICAgaWYgKCFmbGF0VmFsdWVzLmxlbmd0aCkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZWxlbWVudDsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBkYXRhR3JpZENv
bnRhaW5lciA9IGVsZW1lbnQuY3JlYXRlQ2hpbGQoInNwYW4iKTsKLSAgICAgICAgdmFyIGRhdGFH
cmlkID0gV2ViSW5zcGVjdG9yLkRhdGFHcmlkLmNyZWF0ZVNvcnRhYmxlRGF0YUdyaWQoY29sdW1u
TmFtZXMsIGZsYXRWYWx1ZXMpOwotICAgICAgICBkYXRhR3JpZC5lbGVtZW50LmNsYXNzTGlzdC5h
ZGQoImlubGluZSIpOwotICAgICAgICBkYXRhR3JpZENvbnRhaW5lci5hcHBlbmRDaGlsZChkYXRh
R3JpZC5lbGVtZW50KTsKLQotICAgICAgICByZXR1cm4gZWxlbWVudDsKLSAgICB9LAotCi0gICAg
X2Zvcm1hdFdpdGhTdWJzdGl0dXRpb25TdHJpbmc6IGZ1bmN0aW9uKHBhcmFtZXRlcnMsIGZvcm1h
dHRlZFJlc3VsdCkKLSAgICB7Ci0gICAgICAgIHZhciBmb3JtYXR0ZXJzID0ge307Ci0KLSAgICAg
ICAgZnVuY3Rpb24gcGFyYW1ldGVyRm9ybWF0dGVyKGZvcmNlLCBvYmopCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9mb3JtYXRQYXJhbWV0ZXIob2JqLCBmb3JjZSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBzdHJpbmdGb3JtYXR0ZXIob2JqKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gb2JqLmRlc2NyaXB0aW9uOwotICAgICAgICB9Ci0KLSAgICAg
ICAgZnVuY3Rpb24gZmxvYXRGb3JtYXR0ZXIob2JqKQotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAodHlwZW9mIG9iai52YWx1ZSAhPT0gIm51bWJlciIpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IHBhcnNlRmxvYXQob2JqLmRlc2NyaXB0aW9uKTsKLSAgICAgICAgICAgIHJldHVybiBvYmoudmFs
dWU7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBpbnRlZ2VyRm9ybWF0dGVyKG9iaikK
LSAgICAgICAgewotICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmoudmFsdWUgIT09ICJudW1iZXIi
KQotICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUludChvYmouZGVzY3JpcHRpb24pOwotICAg
ICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3Iob2JqLnZhbHVlKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHZhciBjdXJyZW50U3R5bGUgPSBudWxsOwotICAgICAgICBmdW5jdGlvbiBzdHlsZUZvcm1h
dHRlcihvYmopCi0gICAgICAgIHsKLSAgICAgICAgICAgIGN1cnJlbnRTdHlsZSA9IHt9OwotICAg
ICAgICAgICAgdmFyIGJ1ZmZlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKLSAg
ICAgICAgICAgIGJ1ZmZlci5zZXRBdHRyaWJ1dGUoInN0eWxlIiwgb2JqLmRlc2NyaXB0aW9uKTsK
LSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnVmZmVyLnN0eWxlLmxlbmd0aDsgaSsr
KSB7Ci0gICAgICAgICAgICAgICAgdmFyIHByb3BlcnR5ID0gYnVmZmVyLnN0eWxlW2ldOwotICAg
ICAgICAgICAgICAgIGlmIChpc1doaXRlbGlzdGVkUHJvcGVydHkocHJvcGVydHkpKQotICAgICAg
ICAgICAgICAgICAgICBjdXJyZW50U3R5bGVbcHJvcGVydHldID0gYnVmZmVyLnN0eWxlW3Byb3Bl
cnR5XTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGlzV2hp
dGVsaXN0ZWRQcm9wZXJ0eShwcm9wZXJ0eSkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIHBy
ZWZpeGVzID0gWyJiYWNrZ3JvdW5kIiwgImJvcmRlciIsICJjb2xvciIsICJmb250IiwgImxpbmUi
LCAibWFyZ2luIiwgInBhZGRpbmciLCAidGV4dCIsICItd2Via2l0LWJhY2tncm91bmQiLCAiLXdl
YmtpdC1ib3JkZXIiLCAiLXdlYmtpdC1mb250IiwgIi13ZWJraXQtbWFyZ2luIiwgIi13ZWJraXQt
cGFkZGluZyIsICItd2Via2l0LXRleHQiXTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgcHJlZml4ZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBpZiAocHJvcGVydHku
c3RhcnRzV2l0aChwcmVmaXhlc1tpXSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gRmlyZWJ1ZyB1c2VzICVvIGZvciBmb3JtYXR0aW5nIG9iamVjdHMuCi0gICAg
ICAgIGZvcm1hdHRlcnMubyA9IHBhcmFtZXRlckZvcm1hdHRlci5iaW5kKHRoaXMsIGZhbHNlKTsK
LSAgICAgICAgZm9ybWF0dGVycy5zID0gc3RyaW5nRm9ybWF0dGVyOwotICAgICAgICBmb3JtYXR0
ZXJzLmYgPSBmbG9hdEZvcm1hdHRlcjsKLQotICAgICAgICAvLyBGaXJlYnVnIGFsbG93cyBib3Ro
ICVpIGFuZCAlZCBmb3IgZm9ybWF0dGluZyBpbnRlZ2Vycy4KLSAgICAgICAgZm9ybWF0dGVycy5p
ID0gaW50ZWdlckZvcm1hdHRlcjsKLSAgICAgICAgZm9ybWF0dGVycy5kID0gaW50ZWdlckZvcm1h
dHRlcjsKLQotICAgICAgICAvLyBGaXJlYnVnIHVzZXMgJWMgZm9yIHN0eWxpbmcgdGhlIG1lc3Nh
Z2UuCi0gICAgICAgIGZvcm1hdHRlcnMuYyA9IHN0eWxlRm9ybWF0dGVyOwotCi0gICAgICAgIC8v
IFN1cHBvcnQgJU8gdG8gZm9yY2Ugb2JqZWN0IGZvcm1hdHRpbmcsIGluc3RlYWQgb2YgdGhlIHR5
cGUtYmFzZWQgJW8gZm9ybWF0dGluZy4KLSAgICAgICAgZm9ybWF0dGVycy5PID0gcGFyYW1ldGVy
Rm9ybWF0dGVyLmJpbmQodGhpcywgdHJ1ZSk7Ci0KLSAgICAgICAgZnVuY3Rpb24gYXBwZW5kKGEs
IGIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChiIGluc3RhbmNlb2YgTm9kZSkKLSAgICAg
ICAgICAgICAgICBhLmFwcGVuZENoaWxkKGIpOwotICAgICAgICAgICAgZWxzZSBpZiAoYikgewot
ICAgICAgICAgICAgICAgIHZhciB0b0FwcGVuZCA9IFdlYkluc3BlY3Rvci5saW5raWZ5U3RyaW5n
QXNGcmFnbWVudChiLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIGlmIChjdXJyZW50U3R5
bGUpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJzcGFuIik7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBjdXJy
ZW50U3R5bGUpCi0gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyLnN0eWxlW2tleV0gPSBj
dXJyZW50U3R5bGVba2V5XTsKLSAgICAgICAgICAgICAgICAgICAgd3JhcHBlci5hcHBlbmRDaGls
ZCh0b0FwcGVuZCk7Ci0gICAgICAgICAgICAgICAgICAgIHRvQXBwZW5kID0gd3JhcHBlcjsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdmFyIHNwYW4gPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJzcGFuIik7Ci0gICAgICAgICAgICAgICAgc3Bhbi5jbGFzc05hbWUgPSAidHlw
ZS1zdHJpbmciOwotICAgICAgICAgICAgICAgIHNwYW4uYXBwZW5kQ2hpbGQodG9BcHBlbmQpOwot
ICAgICAgICAgICAgICAgIGEuYXBwZW5kQ2hpbGQoc3Bhbik7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICByZXR1cm4gYTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFN0cmluZy5mb3JtYXQg
ZG9lcyB0cmVhdCBmb3JtYXR0ZWRSZXN1bHQgbGlrZSBhIEJ1aWxkZXIsIHJlc3VsdCBpcyBhbiBv
YmplY3QuCi0gICAgICAgIHJldHVybiBTdHJpbmcuZm9ybWF0KHBhcmFtZXRlcnNbMF0uZGVzY3Jp
cHRpb24sIHBhcmFtZXRlcnMuc2xpY2UoMSksIGZvcm1hdHRlcnMsIGZvcm1hdHRlZFJlc3VsdCwg
YXBwZW5kKTsKLSAgICB9LAotCi0gICAgZGVjb3JhdGVNZXNzYWdlRWxlbWVudDogZnVuY3Rpb24o
ZWxlbWVudCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9lbGVtZW50KQotICAgICAgICAgICAg
cmV0dXJuIHRoaXMuX2VsZW1lbnQ7Ci0KLSAgICAgICAgZWxlbWVudC5tZXNzYWdlID0gdGhpczsK
LSAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjb25zb2xlLW1lc3NhZ2UiKTsKLQotICAg
ICAgICB0aGlzLl9lbGVtZW50ID0gZWxlbWVudDsKLQotICAgICAgICBzd2l0Y2ggKHRoaXMubGV2
ZWwpIHsKLSAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3Nh
Z2VMZXZlbC5UaXA6Ci0gICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjb25z
b2xlLXRpcC1sZXZlbCIpOwotICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCJk
YXRhLWxhYmVscHJlZml4IiwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJUaXA6ICIpKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVN
ZXNzYWdlLk1lc3NhZ2VMZXZlbC5Mb2c6Ci0gICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xp
c3QuYWRkKCJjb25zb2xlLWxvZy1sZXZlbCIpOwotICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0
QXR0cmlidXRlKCJkYXRhLWxhYmVscHJlZml4IiwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJMb2c6
ICIpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVj
dG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5EZWJ1ZzoKLSAgICAgICAgICAgICAgICBl
bGVtZW50LmNsYXNzTGlzdC5hZGQoImNvbnNvbGUtZGVidWctbGV2ZWwiKTsKLSAgICAgICAgICAg
ICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgiZGF0YS1sYWJlbHByZWZpeCIsIFdlYkluc3BlY3Rv
ci5VSVN0cmluZygiRGVidWc6ICIpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5XYXJuaW5n
OgotICAgICAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiY29uc29sZS13YXJuaW5n
LWxldmVsIik7Ci0gICAgICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoImRhdGEtbGFi
ZWxwcmVmaXgiLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIldhcm5pbmc6ICIpKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNz
YWdlLk1lc3NhZ2VMZXZlbC5FcnJvcjoKLSAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlz
dC5hZGQoImNvbnNvbGUtZXJyb3ItbGV2ZWwiKTsKLSAgICAgICAgICAgICAgICBlbGVtZW50LnNl
dEF0dHJpYnV0ZSgiZGF0YS1sYWJlbHByZWZpeCIsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiRXJy
b3I6ICIpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
ICh0aGlzLnR5cGUgPT09IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5T
dGFydEdyb3VwIHx8IHRoaXMudHlwZSA9PT0gV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1l
c3NhZ2VUeXBlLlN0YXJ0R3JvdXBDb2xsYXBzZWQpCi0gICAgICAgICAgICBlbGVtZW50LmNsYXNz
TGlzdC5hZGQoImNvbnNvbGUtZ3JvdXAtdGl0bGUiKTsKLQotICAgICAgICBlbGVtZW50LmFwcGVu
ZENoaWxkKHRoaXMuZm9ybWF0dGVkTWVzc2FnZSk7Ci0KLSAgICAgICAgaWYgKHRoaXMucmVwZWF0
Q291bnQgPiAxKQotICAgICAgICAgICAgdGhpcy51cGRhdGVSZXBlYXRDb3VudCgpOwotCi0gICAg
ICAgIHJldHVybiBlbGVtZW50OwotICAgIH0sCi0KLSAgICB0b01lc3NhZ2VFbGVtZW50OiBmdW5j
dGlvbigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fZWxlbWVudCkKLSAgICAgICAgICAgIHJl
dHVybiB0aGlzLl9lbGVtZW50OwotCi0gICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgiZGl2Iik7Ci0KLSAgICAgICAgcmV0dXJuIHRoaXMuZGVjb3JhdGVNZXNzYWdl
RWxlbWVudChlbGVtZW50KTsKLSAgICB9LAotCi0gICAgX3BvcHVsYXRlU3RhY2tUcmFjZVRyZWVF
bGVtZW50OiBmdW5jdGlvbihwYXJlbnRUcmVlRWxlbWVudCkKLSAgICB7Ci0gICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgdGhpcy5fc3RhY2tUcmFjZS5sZW5ndGg7IGkrKykgewotICAgICAgICAg
ICAgdmFyIGZyYW1lID0gdGhpcy5fc3RhY2tUcmFjZVtpXTsKLQotICAgICAgICAgICAgdmFyIGNv
bnRlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICAgICAgICAgIHZhciBt
ZXNzYWdlVGV4dEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci0gICAg
ICAgICAgICBtZXNzYWdlVGV4dEVsZW1lbnQuY2xhc3NOYW1lID0gImNvbnNvbGUtbWVzc2FnZS10
ZXh0IjsKLSAgICAgICAgICAgIHZhciBmdW5jdGlvbk5hbWUgPSBmcmFtZS5mdW5jdGlvbk5hbWUg
fHwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIoYW5vbnltb3VzIGZ1bmN0aW9uKSIpOwotICAgICAg
ICAgICAgbWVzc2FnZVRleHRFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHRO
b2RlKGZ1bmN0aW9uTmFtZSkpOwotICAgICAgICAgICAgY29udGVudC5hcHBlbmRDaGlsZChtZXNz
YWdlVGV4dEVsZW1lbnQpOwotCi0gICAgICAgICAgICBpZiAoZnJhbWUudXJsICYmICF0aGlzLl9z
aG91bGRIaWRlVVJMKGZyYW1lLnVybCkpIHsKLSAgICAgICAgICAgICAgICB2YXIgdXJsRWxlbWVu
dCA9IHRoaXMuX2xpbmtpZnlDYWxsRnJhbWUoZnJhbWUpOwotICAgICAgICAgICAgICAgIGNvbnRl
bnQuYXBwZW5kQ2hpbGQodXJsRWxlbWVudCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IHZhciB0cmVlRWxlbWVudCA9IG5ldyBUcmVlRWxlbWVudChjb250ZW50KTsKLSAgICAgICAgICAg
IHBhcmVudFRyZWVFbGVtZW50LmFwcGVuZENoaWxkKHRyZWVFbGVtZW50KTsKLSAgICAgICAgfQot
ICAgIH0sCi0KLSAgICB1cGRhdGVSZXBlYXRDb3VudDogZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlm
ICghdGhpcy5yZXBlYXRDb3VudEVsZW1lbnQpIHsKLSAgICAgICAgICAgIHRoaXMucmVwZWF0Q291
bnRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwotICAgICAgICAgICAg
dGhpcy5yZXBlYXRDb3VudEVsZW1lbnQuY2xhc3NOYW1lID0gImJ1YmJsZSI7Ci0KLSAgICAgICAg
ICAgIHRoaXMuX2VsZW1lbnQuaW5zZXJ0QmVmb3JlKHRoaXMucmVwZWF0Q291bnRFbGVtZW50LCB0
aGlzLl9lbGVtZW50LmZpcnN0Q2hpbGQpOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMucmVwZWF0
Q291bnRFbGVtZW50LnRleHRDb250ZW50ID0gdGhpcy5yZXBlYXRDb3VudDsKLSAgICB9LAotCi0g
ICAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBzb3VyY2VTdHJpbmc7
Ci0gICAgICAgIHN3aXRjaCAodGhpcy5zb3VyY2UpIHsKLSAgICAgICAgICAgIGNhc2UgV2ViSW5z
cGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VTb3VyY2UuSFRNTDoKLSAgICAgICAgICAgICAg
ICBzb3VyY2VTdHJpbmcgPSAiSFRNTCI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNlLlhNTDoK
LSAgICAgICAgICAgICAgICBzb3VyY2VTdHJpbmcgPSAiWE1MIjsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3Nh
Z2VTb3VyY2UuSlM6Ci0gICAgICAgICAgICAgICAgc291cmNlU3RyaW5nID0gIkpTIjsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVN
ZXNzYWdlLk1lc3NhZ2VTb3VyY2UuTmV0d29yazoKLSAgICAgICAgICAgICAgICBzb3VyY2VTdHJp
bmcgPSAiTmV0d29yayI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNlLkNvbnNvbGVBUEk6Ci0g
ICAgICAgICAgICAgICAgc291cmNlU3RyaW5nID0gIkNvbnNvbGVBUEkiOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2Uu
TWVzc2FnZVNvdXJjZS5PdGhlcjoKLSAgICAgICAgICAgICAgICBzb3VyY2VTdHJpbmcgPSAiT3Ro
ZXIiOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIHR5
cGVTdHJpbmc7Ci0gICAgICAgIHN3aXRjaCAodGhpcy50eXBlKSB7Ci0gICAgICAgICAgICBjYXNl
IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5Mb2c6Ci0gICAgICAgICAg
ICAgICAgdHlwZVN0cmluZyA9ICJMb2ciOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuRGlyOgot
ICAgICAgICAgICAgICAgIHR5cGVTdHJpbmcgPSAiRGlyIjsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VU
eXBlLkRpclhNTDoKLSAgICAgICAgICAgICAgICB0eXBlU3RyaW5nID0gIkRpciBYTUwiOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29s
ZU1lc3NhZ2UuTWVzc2FnZVR5cGUuVHJhY2U6Ci0gICAgICAgICAgICAgICAgdHlwZVN0cmluZyA9
ICJUcmFjZSI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdlYklu
c3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5TdGFydEdyb3VwQ29sbGFwc2VkOgot
ICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUu
U3RhcnRHcm91cDoKLSAgICAgICAgICAgICAgICB0eXBlU3RyaW5nID0gIlN0YXJ0IEdyb3VwIjsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNv
bnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLkVuZEdyb3VwOgotICAgICAgICAgICAgICAgIHR5cGVT
dHJpbmcgPSAiRW5kIEdyb3VwIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLkFzc2VydDoKLSAg
ICAgICAgICAgICAgICB0eXBlU3RyaW5nID0gIkFzc2VydCI7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdl
VHlwZS5SZXN1bHQ6Ci0gICAgICAgICAgICAgICAgdHlwZVN0cmluZyA9ICJSZXN1bHQiOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHNvdXJjZVN0
cmluZyArICIgIiArIHR5cGVTdHJpbmcgKyAiICIgKyB0aGlzLmxldmVsU3RyaW5nICsgIjogIiAr
IHRoaXMuZm9ybWF0dGVkTWVzc2FnZS50ZXh0Q29udGVudCArICJcbiIgKyB0aGlzLnVybCArICIg
bGluZSAiICsgdGhpcy5saW5lOwotICAgIH0sCi0KLSAgICBnZXQgdGV4dCgpCi0gICAgewotICAg
ICAgICByZXR1cm4gdGhpcy5fbWVzc2FnZVRleHQ7Ci0gICAgfSwKLQotICAgIGlzRXF1YWw6IGZ1
bmN0aW9uKG1zZykKLSAgICB7Ci0gICAgICAgIGlmICghbXNnKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgICAgIGlmICh0aGlzLl9zdGFja1RyYWNlKSB7Ci0gICAgICAgICAgICBp
ZiAoIW1zZy5fc3RhY2tUcmFjZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICB2YXIgbCA9IHRoaXMuX3N0YWNrVHJhY2U7Ci0gICAgICAgICAgICB2YXIgciA9IG1z
Zy5fc3RhY2tUcmFjZTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbC5sZW5ndGg7
IGkrKykgewotICAgICAgICAgICAgICAgIGlmIChsW2ldLnVybCAhPT0gcltpXS51cmwgfHwKLSAg
ICAgICAgICAgICAgICAgICAgbFtpXS5mdW5jdGlvbk5hbWUgIT09IHJbaV0uZnVuY3Rpb25OYW1l
IHx8Ci0gICAgICAgICAgICAgICAgICAgIGxbaV0ubGluZU51bWJlciAhPT0gcltpXS5saW5lTnVt
YmVyIHx8Ci0gICAgICAgICAgICAgICAgICAgIGxbaV0uY29sdW1uTnVtYmVyICE9PSByW2ldLmNv
bHVtbk51bWJlcikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuICh0aGlzLnNvdXJjZSA9PT0gbXNnLnNv
dXJjZSkKLSAgICAgICAgICAgICYmICh0aGlzLnR5cGUgPT09IG1zZy50eXBlKQotICAgICAgICAg
ICAgJiYgKHRoaXMubGV2ZWwgPT09IG1zZy5sZXZlbCkKLSAgICAgICAgICAgICYmICh0aGlzLmxp
bmUgPT09IG1zZy5saW5lKQotICAgICAgICAgICAgJiYgKHRoaXMudXJsID09PSBtc2cudXJsKQot
ICAgICAgICAgICAgJiYgKHRoaXMubWVzc2FnZSA9PT0gbXNnLm1lc3NhZ2UpCi0gICAgICAgICAg
ICAmJiAodGhpcy5fcmVxdWVzdCA9PT0gbXNnLl9yZXF1ZXN0KTsKLSAgICB9LAotCi0gICAgZ2V0
IHN0YWNrVHJhY2UoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3N0YWNrVHJhY2U7Ci0g
ICAgfSwKLQotICAgIGNsb25lOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gV2Vi
SW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLmNyZWF0ZSh0aGlzLnNvdXJjZSwgdGhpcy5sZXZlbCwg
dGhpcy5fbWVzc2FnZVRleHQsIHRoaXMudHlwZSwgdGhpcy51cmwsIHRoaXMubGluZSwgdGhpcy5j
b2x1bW4sIHRoaXMucmVwZWF0Q291bnQsIHRoaXMuX3BhcmFtZXRlcnMsIHRoaXMuX3N0YWNrVHJh
Y2UsIHRoaXMuX3JlcXVlc3QpOwotICAgIH0sCi0KLSAgICBnZXQgbGV2ZWxTdHJpbmcoKQotICAg
IHsKLSAgICAgICAgc3dpdGNoICh0aGlzLmxldmVsKSB7Ci0gICAgICAgICAgICBjYXNlIFdlYklu
c3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuVGlwOgotICAgICAgICAgICAgICAg
IHJldHVybiAiVGlwIjsKLSAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNz
YWdlLk1lc3NhZ2VMZXZlbC5Mb2c6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJMb2ciOwotICAg
ICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLldh
cm5pbmc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJXYXJuaW5nIjsKLSAgICAgICAgICAgIGNh
c2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5EZWJ1ZzoKLSAgICAg
ICAgICAgICAgICByZXR1cm4gIkRlYnVnIjsKLSAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9y
LkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5FcnJvcjoKLSAgICAgICAgICAgICAgICByZXR1
cm4gIkVycm9yIjsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBnZXQgY2xpcGJvYXJkUHJlZml4
U3RyaW5nKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAiWyIgKyB0aGlzLmxldmVsU3RyaW5nICsg
Il0gIjsKLSAgICB9LAotCi0gICAgdG9DbGlwYm9hcmRTdHJpbmc6IGZ1bmN0aW9uKGlzUHJlZml4
T3B0aW9uYWwpCi0gICAgewotICAgICAgICB2YXIgaXNUcmFjZSA9IHRoaXMuX3Nob3VsZER1bXBT
dGFja1RyYWNlKCk7Ci0KLSAgICAgICAgdmFyIGNsaXBib2FyZFN0cmluZyA9ICIiOwotICAgICAg
ICBpZiAodGhpcy5fZm9ybWF0dGVkTWVzc2FnZSAmJiAhaXNUcmFjZSkKLSAgICAgICAgICAgIGNs
aXBib2FyZFN0cmluZyA9IHRoaXMuX2Zvcm1hdHRlZE1lc3NhZ2UucXVlcnlTZWxlY3Rvcigic3Bh
biIpLmlubmVyVGV4dDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2xpcGJvYXJkU3RyaW5n
ID0gdGhpcy50eXBlID09PSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUu
VHJhY2UgPyAiY29uc29sZS50cmFjZSgpIiA6IHRoaXMuX21lc3NhZ2UgfHwgdGhpcy5fbWVzc2Fn
ZVRleHQ7Ci0KLSAgICAgICAgaWYgKCFpc1ByZWZpeE9wdGlvbmFsIHx8IHRoaXMuZW5mb3JjZXND
bGlwYm9hcmRQcmVmaXhTdHJpbmcpCi0gICAgICAgICAgICBjbGlwYm9hcmRTdHJpbmcgPSB0aGlz
LmNsaXBib2FyZFByZWZpeFN0cmluZyArIGNsaXBib2FyZFN0cmluZzsKLQotICAgICAgICBpZiAo
aXNUcmFjZSkgewotICAgICAgICAgICAgdGhpcy5fc3RhY2tUcmFjZS5mb3JFYWNoKGZ1bmN0aW9u
KGZyYW1lKSB7Ci0gICAgICAgICAgICAgICAgY2xpcGJvYXJkU3RyaW5nICs9ICJcblx0IiArIChm
cmFtZS5mdW5jdGlvbk5hbWUgfHwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIoYW5vbnltb3VzIGZ1
bmN0aW9uKSIpKTsKLSAgICAgICAgICAgICAgICBpZiAoZnJhbWUudXJsKQotICAgICAgICAgICAg
ICAgICAgICBjbGlwYm9hcmRTdHJpbmcgKz0gIiAoIiArIFdlYkluc3BlY3Rvci5kaXNwbGF5TmFt
ZUZvclVSTChmcmFtZS51cmwpICsgIiwgbGluZSAiICsgZnJhbWUubGluZU51bWJlciArICIpIjsK
LSAgICAgICAgICAgIH0pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdmFyIHJlcGVh
dFN0cmluZyA9IHRoaXMucmVwZWF0Q291bnQgPiAxID8gIngiICsgdGhpcy5yZXBlYXRDb3VudCA6
ICIiOwotCi0gICAgICAgICAgICB2YXIgdXJsTGluZSA9ICIiOwotICAgICAgICAgICAgaWYgKHRo
aXMudXJsKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGNvbXBvbmVudHMgPSBbV2ViSW5zcGVjdG9y
LmRpc3BsYXlOYW1lRm9yVVJMKHRoaXMudXJsKSwgImxpbmUgIiArIHRoaXMubGluZV07Ci0gICAg
ICAgICAgICAgICAgaWYgKHJlcGVhdFN0cmluZykKLSAgICAgICAgICAgICAgICAgICAgY29tcG9u
ZW50cy5wdXNoKHJlcGVhdFN0cmluZyk7Ci0gICAgICAgICAgICAgICAgdXJsTGluZSA9ICIgKCIg
KyBjb21wb25lbnRzLmpvaW4oIiwgIikgKyAiKSI7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHJl
cGVhdFN0cmluZykKLSAgICAgICAgICAgICAgICB1cmxMaW5lID0gIiAoIiArIHJlcGVhdFN0cmlu
ZyArICIpIjsKLQotICAgICAgICAgICAgaWYgKHVybExpbmUpIHsKLSAgICAgICAgICAgICAgICB2
YXIgbGluZXMgPSBjbGlwYm9hcmRTdHJpbmcuc3BsaXQoIlxuIik7Ci0gICAgICAgICAgICAgICAg
bGluZXNbMF0gKz0gdXJsTGluZTsKLSAgICAgICAgICAgICAgICBjbGlwYm9hcmRTdHJpbmcgPSBs
aW5lcy5qb2luKCJcbiIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0
dXJuIGNsaXBib2FyZFN0cmluZzsKLSAgICB9Ci19OwotCi1XZWJJbnNwZWN0b3IuQ29uc29sZU1l
c3NhZ2VJbXBsLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3Nh
Z2UucHJvdG90eXBlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvVmlld3MvQ29uc29sZU1lc3NhZ2VWaWV3LmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvVmlld3MvQ29uc29sZU1lc3NhZ2VWaWV3LmpzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1ZTUwYTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Db25zb2xlTWVzc2FnZVZpZXcuanMK
QEAgLTAsMCArMSw3OTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTMg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBK
b3NlcGggUGVjb3Jhcm8KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1l
IG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKworV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlVmlldyA9IGZ1bmN0aW9uKG1vZGVsKQor
eworCXRoaXMubW9kZWwgPSBtb2RlbDsKKworCXRoaXMuX2N1c3RvbUZvcm1hdHRlcnMgPSB7CisJ
CSJvYmplY3QiOiB0aGlzLl9mb3JtYXRQYXJhbWV0ZXJBc09iamVjdCwKKwkJImVycm9yIjogdGhp
cy5fZm9ybWF0UGFyYW1ldGVyQXNPYmplY3QsCisJCSJtYXAiOiB0aGlzLl9mb3JtYXRQYXJhbWV0
ZXJBc09iamVjdCwKKwkJInNldCI6IHRoaXMuX2Zvcm1hdFBhcmFtZXRlckFzT2JqZWN0LAorCQki
d2Vha21hcCI6IHRoaXMuX2Zvcm1hdFBhcmFtZXRlckFzT2JqZWN0LAorCQkiaXRlcmF0b3IiOiB0
aGlzLl9mb3JtYXRQYXJhbWV0ZXJBc09iamVjdCwKKwkJImFycmF5IjogIHRoaXMuX2Zvcm1hdFBh
cmFtZXRlckFzQXJyYXksCisJCSJub2RlIjogICB0aGlzLl9mb3JtYXRQYXJhbWV0ZXJBc05vZGUs
CisJCSJzdHJpbmciOiB0aGlzLl9mb3JtYXRQYXJhbWV0ZXJBc1N0cmluZworCX07Cit9OworCisK
K1dlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZVZpZXcucHJvdG90eXBlID0geworCWVuZm9yY2Vz
Q2xpcGJvYXJkUHJlZml4U3RyaW5nOiB0cnVlLAorCisJZ2V0IHNvdXJjZSgpIHsKKwkJY29uc29s
ZS5lcnJvcigiQ29uc29sZU1lc3NhZ2VWaWV3I3NvdXJjZSBpcyBkZXByZWNhdGVkLCB1c2UgQ29u
c29sZU1lc3NhZ2VWaWV3I21vZGVsLnNvdXJjZSBpbnN0ZWFkIik7CisJCXJldHVybiB0aGlzLm1v
ZGVsLnNvdXJjZTsKKwl9LAorCXNldCBzb3VyY2UodmFsdWUpIHsKKwkJY29uc29sZS5lcnJvcigi
Q29uc29sZU1lc3NhZ2VWaWV3I3NvdXJjZSBpcyBkZXByZWNhdGVkLCB1c2UgQ29uc29sZU1lc3Nh
Z2VWaWV3I21vZGVsLnNvdXJjZSBpbnN0ZWFkIik7CisJCXRoaXMubW9kZWwuc291cmNlID0gdmFs
dWU7CisJfSwKKworCWdldCBsZXZlbCgpIHsKKwkJY29uc29sZS5lcnJvcigiQ29uc29sZU1lc3Nh
Z2VWaWV3I2xldmVsIGlzIGRlcHJlY2F0ZWQsIHVzZSBDb25zb2xlTWVzc2FnZVZpZXcjbW9kZWwu
bGV2ZWwgaW5zdGVhZCIpOworCQlyZXR1cm4gdGhpcy5tb2RlbC5sZXZlbDsKKwl9LAorCXNldCBs
ZXZlbCh2YWx1ZSkgeworCQljb25zb2xlLmVycm9yKCJDb25zb2xlTWVzc2FnZVZpZXcjbGV2ZWwg
aXMgZGVwcmVjYXRlZCwgdXNlIENvbnNvbGVNZXNzYWdlVmlldyNtb2RlbC5sZXZlbCBpbnN0ZWFk
Iik7CisJCXRoaXMubW9kZWwubGV2ZWwgPSB2YWx1ZTsKKwl9LAorCisJZ2V0IF9tZXNzYWdlVGV4
dCgpIHsKKwkJY29uc29sZS5lcnJvcigiQ29uc29sZU1lc3NhZ2VWaWV3I19tZXNzYWdlVGV4dCBp
cyBkZXByZWNhdGVkLCB1c2UgQ29uc29sZU1lc3NhZ2VWaWV3I21vZGVsLl9tZXNzYWdlVGV4dCBp
bnN0ZWFkIik7CisJCXJldHVybiB0aGlzLm1vZGVsLl9tZXNzYWdlVGV4dDsKKwl9LAorCXNldCBf
bWVzc2FnZVRleHQodmFsdWUpIHsKKwkJY29uc29sZS5lcnJvcigiQ29uc29sZU1lc3NhZ2VWaWV3
I19tZXNzYWdlVGV4dCBpcyBkZXByZWNhdGVkLCB1c2UgQ29uc29sZU1lc3NhZ2VWaWV3I21vZGVs
Ll9tZXNzYWdlVGV4dCBpbnN0ZWFkIik7CisJCXRoaXMubW9kZWwuX21lc3NhZ2VUZXh0ID0gdmFs
dWU7CisJfSwKKworCWdldCBfbGlua2lmaWVyKCkgeworCQljb25zb2xlLmVycm9yKCJDb25zb2xl
TWVzc2FnZVZpZXcjX2xpbmtpZmllciBpcyBkZXByZWNhdGVkLCB1c2UgQ29uc29sZU1lc3NhZ2VW
aWV3I21vZGVsLl9saW5raWZpZXIgaW5zdGVhZCIpOworCQlyZXR1cm4gdGhpcy5tb2RlbC5fbGlu
a2lmaWVyOworCX0sCisJc2V0IF9saW5raWZpZXIodmFsdWUpIHsKKwkJY29uc29sZS5lcnJvcigi
Q29uc29sZU1lc3NhZ2VWaWV3I19saW5raWZpZXIgaXMgZGVwcmVjYXRlZCwgdXNlIENvbnNvbGVN
ZXNzYWdlVmlldyNtb2RlbC5fbGlua2lmaWVyIGluc3RlYWQiKTsKKwkJdGhpcy5tb2RlbC5fbGlu
a2lmaWVyID0gdmFsdWU7CisJfSwKKworCWdldCB0eXBlKCkgeworCQljb25zb2xlLmVycm9yKCJD
b25zb2xlTWVzc2FnZVZpZXcjdHlwZSBpcyBkZXByZWNhdGVkLCB1c2UgQ29uc29sZU1lc3NhZ2VW
aWV3I21vZGVsLnR5cGUgaW5zdGVhZCIpOworCQlyZXR1cm4gdGhpcy5tb2RlbC50eXBlIHx8ICcn
OworCX0sCisJc2V0IHR5cGUodmFsdWUpIHsKKwkJY29uc29sZS5lcnJvcigiQ29uc29sZU1lc3Nh
Z2VWaWV3I3R5cGUgaXMgZGVwcmVjYXRlZCwgdXNlIENvbnNvbGVNZXNzYWdlVmlldyNtb2RlbC50
eXBlIGluc3RlYWQiKTsKKwkJdGhpcy5tb2RlbC50eXBlID0gdmFsdWU7CisJfSwKKworCWdldCB1
cmwoKSB7CisJCWNvbnNvbGUuZXJyb3IoIkNvbnNvbGVNZXNzYWdlVmlldyN1cmwgaXMgZGVwcmVj
YXRlZCwgdXNlIENvbnNvbGVNZXNzYWdlVmlldyNtb2RlbC51cmwgaW5zdGVhZCIpOworCQlyZXR1
cm4gdGhpcy5tb2RlbC51cmwgfHwgJyc7CisJfSwKKwlzZXQgdXJsKHZhbHVlKSB7CisJCWNvbnNv
bGUuZXJyb3IoIkNvbnNvbGVNZXNzYWdlVmlldyN1cmwgaXMgZGVwcmVjYXRlZCwgdXNlIENvbnNv
bGVNZXNzYWdlVmlldyNtb2RlbC51cmwgaW5zdGVhZCIpOworCQl0aGlzLm1vZGVsLnVybCA9IHZh
bHVlOworCX0sCisKKwlnZXQgbGluZSgpIHsKKwkJY29uc29sZS5lcnJvcigiQ29uc29sZU1lc3Nh
Z2VWaWV3I2xpbmUgaXMgZGVwcmVjYXRlZCwgdXNlIENvbnNvbGVNZXNzYWdlVmlldyNtb2RlbC5s
aW5lIGluc3RlYWQiKTsKKwkJcmV0dXJuIHRoaXMubW9kZWwubGluZSB8fCAnJzsKKwl9LAorCXNl
dCBsaW5lKHZhbHVlKSB7CisJCWNvbnNvbGUuZXJyb3IoIkNvbnNvbGVNZXNzYWdlVmlldyNsaW5l
IGlzIGRlcHJlY2F0ZWQsIHVzZSBDb25zb2xlTWVzc2FnZVZpZXcjbW9kZWwubGluZSBpbnN0ZWFk
Iik7CisJCXRoaXMubW9kZWwubGluZSA9IHZhbHVlOworCX0sCisKKwlnZXQgY29sdW1uKCkgewor
CQljb25zb2xlLmVycm9yKCJDb25zb2xlTWVzc2FnZVZpZXcjY29sdW1uIGlzIGRlcHJlY2F0ZWQs
IHVzZSBDb25zb2xlTWVzc2FnZVZpZXcjbW9kZWwuY29sdW1uIGluc3RlYWQiKTsKKwkJcmV0dXJu
IHRoaXMubW9kZWwuY29sdW1uIHx8ICcnOworCX0sCisJc2V0IGNvbHVtbih2YWx1ZSkgeworCQlj
b25zb2xlLmVycm9yKCJDb25zb2xlTWVzc2FnZVZpZXcjY29sdW1uIGlzIGRlcHJlY2F0ZWQsIHVz
ZSBDb25zb2xlTWVzc2FnZVZpZXcjbW9kZWwuY29sdW1uIGluc3RlYWQiKTsKKwkJdGhpcy5tb2Rl
bC5jb2x1bW4gPSB2YWx1ZTsKKwl9LAorCisJZ2V0IHJlcGVhdENvdW50KCkgeworCQljb25zb2xl
LmVycm9yKCJDb25zb2xlTWVzc2FnZVZpZXcjcmVwZWF0Q291bnQgaXMgZGVwcmVjYXRlZCwgdXNl
IENvbnNvbGVNZXNzYWdlVmlldyNtb2RlbC5yZXBlYXRDb3VudCBpbnN0ZWFkIik7CisJCXJldHVy
biB0aGlzLm1vZGVsLnJlcGVhdENvdW50OworCX0sCisJc2V0IHJlcGVhdENvdW50KGNvdW50KSB7
CisJCWNvbnNvbGUuZXJyb3IoIkNvbnNvbGVNZXNzYWdlVmlldyNyZXBlYXRDb3VudCBpcyBkZXBy
ZWNhdGVkLCB1c2UgQ29uc29sZU1lc3NhZ2VWaWV3I21vZGVsLnJlcGVhdENvdW50IGluc3RlYWQi
KTsKKwkJdGhpcy5tb2RlbC5yZXBlYXRDb3VudCA9IGNvdW50OworCX0sCisKKwlnZXQgcmVwZWF0
RGVsdGEoKSB7CisJCWNvbnNvbGUuZXJyb3IoIkNvbnNvbGVNZXNzYWdlVmlldyNyZXBlYXREZWx0
YSBpcyBkZXByZWNhdGVkLCB1c2UgQ29uc29sZU1lc3NhZ2VWaWV3I21vZGVsLnJlcGVhdERlbHRh
IGluc3RlYWQiKTsKKwkJcmV0dXJuIHRoaXMubW9kZWwucmVwZWF0RGVsdGE7CisJfSwKKwlzZXQg
cmVwZWF0RGVsdGEodmFsdWUpIHsKKwkJY29uc29sZS5lcnJvcigiQ29uc29sZU1lc3NhZ2VWaWV3
I3JlcGVhdERlbHRhIGlzIGRlcHJlY2F0ZWQsIHVzZSBDb25zb2xlTWVzc2FnZVZpZXcjbW9kZWwu
cmVwZWF0RGVsdGEgaW5zdGVhZCIpOworCQl0aGlzLm1vZGVsLnJlcGVhdERlbHRhID0gdmFsdWU7
CisJfSwKKworCWdldCB0b3RhbFJlcGVhdENvdW50KCkgeworCQljb25zb2xlLmVycm9yKCJDb25z
b2xlTWVzc2FnZVZpZXcjdG90YWxSZXBlYXRDb3VudCBpcyBkZXByZWNhdGVkLCB1c2UgQ29uc29s
ZU1lc3NhZ2VWaWV3I21vZGVsLnRvdGFsUmVwZWF0Q291bnQgaW5zdGVhZCIpOworCQlyZXR1cm4g
dGhpcy5tb2RlbC50b3RhbFJlcGVhdENvdW50OworCX0sCisJc2V0IHRvdGFsUmVwZWF0Q291bnQo
dmFsdWUpIHsKKwkJY29uc29sZS5lcnJvcigiQ29uc29sZU1lc3NhZ2VWaWV3I3RvdGFsUmVwZWF0
Q291bnQgaXMgZGVwcmVjYXRlZCwgdXNlIENvbnNvbGVNZXNzYWdlVmlldyNtb2RlbC50b3RhbFJl
cGVhdENvdW50IGluc3RlYWQiKTsKKwkJdGhpcy5tb2RlbC50b3RhbFJlcGVhdENvdW50ID0gdmFs
dWU7CisJfSwKKworCWdldCBfcGFyYW1ldGVycygpIHsKKwkJY29uc29sZS5lcnJvcigiQ29uc29s
ZU1lc3NhZ2VWaWV3I19wYXJhbWV0ZXJzIGlzIGRlcHJlY2F0ZWQsIHVzZSBDb25zb2xlTWVzc2Fn
ZVZpZXcjbW9kZWwuX3BhcmFtZXRlcnMgaW5zdGVhZCIpOworCQlyZXR1cm4gdGhpcy5tb2RlbC5f
cGFyYW1ldGVyczsKKwl9LAorCXNldCBfcGFyYW1ldGVycyh2YWx1ZSkgeworCQljb25zb2xlLmVy
cm9yKCJDb25zb2xlTWVzc2FnZVZpZXcjX3BhcmFtZXRlcnMgaXMgZGVwcmVjYXRlZCwgdXNlIENv
bnNvbGVNZXNzYWdlVmlldyNtb2RlbC5fcGFyYW1ldGVycyBpbnN0ZWFkIik7CisJCXRoaXMubW9k
ZWwuX3BhcmFtZXRlcnMgPSB2YWx1ZTsKKwl9LAorCisJZ2V0IF9zdGFja1RyYWNlKCkgeworCQlj
b25zb2xlLmVycm9yKCJDb25zb2xlTWVzc2FnZVZpZXcjX3N0YWNrVHJhY2UgaXMgZGVwcmVjYXRl
ZCwgdXNlIENvbnNvbGVNZXNzYWdlVmlldyNtb2RlbC5fc3RhY2tUcmFjZSBpbnN0ZWFkIik7CisJ
CXJldHVybiB0aGlzLm1vZGVsLl9zdGFja1RyYWNlOworCX0sCisJc2V0IF9zdGFja1RyYWNlKHZh
bHVlKSB7CisJCWNvbnNvbGUuZXJyb3IoIkNvbnNvbGVNZXNzYWdlVmlldyNfc3RhY2tUcmFjZSBp
cyBkZXByZWNhdGVkLCB1c2UgQ29uc29sZU1lc3NhZ2VWaWV3I21vZGVsLl9zdGFja1RyYWNlIGlu
c3RlYWQiKTsKKwkJdGhpcy5tb2RlbC5fc3RhY2tUcmFjZSA9IHZhbHVlOworCX0sCisKKwlnZXQg
X3JlcXVlc3QoKSB7CisJCWNvbnNvbGUuZXJyb3IoIkNvbnNvbGVNZXNzYWdlVmlldyNfcmVxdWVz
dCBpcyBkZXByZWNhdGVkLCB1c2UgQ29uc29sZU1lc3NhZ2VWaWV3I21vZGVsLl9yZXF1ZXN0IGlu
c3RlYWQiKTsKKwkJcmV0dXJuIHRoaXMubW9kZWwuX3JlcXVlc3Q7CisJfSwKKwlzZXQgX3JlcXVl
c3QodmFsdWUpIHsKKwkJY29uc29sZS5lcnJvcigiQ29uc29sZU1lc3NhZ2VWaWV3I19yZXF1ZXN0
IGlzIGRlcHJlY2F0ZWQsIHVzZSBDb25zb2xlTWVzc2FnZVZpZXcjbW9kZWwuX3JlcXVlc3QgaW5z
dGVhZCIpOworCQl0aGlzLm1vZGVsLl9yZXF1ZXN0ID0gdmFsdWU7CisJfSwKKworCV9mb3JtYXRN
ZXNzYWdlOiBmdW5jdGlvbigpCisJeworCQl0aGlzLl9mb3JtYXR0ZWRNZXNzYWdlID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOworCQl0aGlzLl9mb3JtYXR0ZWRNZXNzYWdlLmNsYXNz
TmFtZSA9ICJjb25zb2xlLW1lc3NhZ2UtdGV4dCI7CisKKwkJdmFyIG1lc3NhZ2VUZXh0OworCQl2
YXIgbW9kZWwgPSB0aGlzLm1vZGVsOworCisJCXZhciB1cmwgPSBtb2RlbC51cmw7CisJCXZhciBs
aW5lID0gbW9kZWwubGluZTsKKworCQlpZiAobW9kZWwuc291cmNlID09PSBXZWJJbnNwZWN0b3Iu
Q29uc29sZU1lc3NhZ2UuTWVzc2FnZVNvdXJjZS5Db25zb2xlQVBJKSB7CisJCQlzd2l0Y2ggKG1v
ZGVsLnR5cGUpIHsKKwkJCQljYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdl
VHlwZS5UcmFjZToKKwkJCQkJbWVzc2FnZVRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgi
Y29uc29sZS50cmFjZSgpIik7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgV2ViSW5zcGVjdG9yLkNv
bnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLkFzc2VydDoKKwkJCQkJdmFyIGFyZ3MgPSBbV2ViSW5z
cGVjdG9yLlVJU3RyaW5nKCJBc3NlcnRpb24gZmFpbGVkOiIpXTsKKwkJCQkJaWYgKG1vZGVsLl9w
YXJhbWV0ZXJzKQorCQkJCQkJYXJncyA9IGFyZ3MuY29uY2F0KG1vZGVsLl9wYXJhbWV0ZXJzKTsK
KwkJCQkJbWVzc2FnZVRleHQgPSB0aGlzLl9mb3JtYXQoYXJncyk7CisJCQkJCWJyZWFrOworCQkJ
CWNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLkRpcjoKKwkJCQkJ
dmFyIG9iaiA9IG1vZGVsLl9wYXJhbWV0ZXJzID8gbW9kZWwuX3BhcmFtZXRlcnNbMF0gOiB1bmRl
ZmluZWQ7CisJCQkJCXZhciBhcmdzID0gWyIlTyIsIG9ial07CisJCQkJCW1lc3NhZ2VUZXh0ID0g
dGhpcy5fZm9ybWF0KGFyZ3MpOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQl2YXIg
YXJncyA9IG1vZGVsLl9wYXJhbWV0ZXJzIHx8IFttb2RlbC5fbWVzc2FnZVRleHRdOworCQkJCQlt
ZXNzYWdlVGV4dCA9IHRoaXMuX2Zvcm1hdChhcmdzKTsKKwkJCX0KKwkJfSBlbHNlIGlmIChtb2Rl
bC5zb3VyY2UgPT09IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNlLk5l
dHdvcmspIHsKKwkJCXZhciByZXF1ZXN0ID0gbW9kZWwuX3JlcXVlc3Q7CisJCQlpZiAocmVxdWVz
dCkgeworCQkJCW1vZGVsLl9zdGFja1RyYWNlID0gcmVxdWVzdC5zdGFja1RyYWNlOworCQkJCWlm
IChyZXF1ZXN0LmluaXRpYXRvciAmJiByZXF1ZXN0LmluaXRpYXRvci51cmwpIHsKKwkJCQkJdXJs
ID0gcmVxdWVzdC5pbml0aWF0b3IudXJsOworCQkJCQlsaW5lID0gcmVxdWVzdC5pbml0aWF0b3Iu
bGluZU51bWJlcjsKKwkJCQl9CisJCQkJbWVzc2FnZVRleHQgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJzcGFuIik7CisJCQkJaWYgKG1vZGVsLmxldmVsID09PSBXZWJJbnNwZWN0b3IuQ29uc29s
ZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkVycm9yKSB7CisJCQkJCW1lc3NhZ2VUZXh0LmFwcGVuZENo
aWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHJlcXVlc3QucmVxdWVzdE1ldGhvZCArICIgIikp
OworCQkJCQltZXNzYWdlVGV4dC5hcHBlbmRDaGlsZChXZWJJbnNwZWN0b3IubGlua2lmeVJlcXVl
c3RBc05vZGUocmVxdWVzdCkpOworCQkJCQlpZiAocmVxdWVzdC5mYWlsZWQpCisJCQkJCQltZXNz
YWdlVGV4dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiICIgKyByZXF1ZXN0
LmxvY2FsaXplZEZhaWxEZXNjcmlwdGlvbikpOworCQkJCQllbHNlCisJCQkJCQltZXNzYWdlVGV4
dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiICIgKyByZXF1ZXN0LnN0YXR1
c0NvZGUgKyAiICgiICsgcmVxdWVzdC5zdGF0dXNUZXh0ICsgIikiKSk7CisJCQkJfSBlbHNlIHsK
KwkJCQkJdmFyIGZyYWdtZW50ID0gV2ViSW5zcGVjdG9yLmxpbmtpZnlTdHJpbmdBc0ZyYWdtZW50
V2l0aEN1c3RvbUxpbmtpZmllcihtb2RlbC5fbWVzc2FnZVRleHQsIFdlYkluc3BlY3Rvci5saW5r
aWZ5UmVxdWVzdEFzTm9kZS5iaW5kKG51bGwsIHJlcXVlc3QsICIiKSk7CisJCQkJCW1lc3NhZ2VU
ZXh0LmFwcGVuZENoaWxkKGZyYWdtZW50KTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWlmICht
b2RlbC51cmwpIHsKKwkJCQkJdmFyIGFuY2hvciA9IFdlYkluc3BlY3Rvci5saW5raWZ5VVJMQXNO
b2RlKHVybCwgdXJsLCAiY29uc29sZS1tZXNzYWdlLXVybCIpOworCQkJCQl0aGlzLl9mb3JtYXR0
ZWRNZXNzYWdlLmFwcGVuZENoaWxkKGFuY2hvcik7CisJCQkJfQorCQkJCW1lc3NhZ2VUZXh0ID0g
dGhpcy5fZm9ybWF0KFttb2RlbC5fbWVzc2FnZVRleHRdKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJ
CXZhciBhcmdzID0gbW9kZWwuX3BhcmFtZXRlcnMgfHwgW21vZGVsLl9tZXNzYWdlVGV4dF07CisJ
CQltZXNzYWdlVGV4dCA9IHRoaXMuX2Zvcm1hdChhcmdzKTsKKwkJfQorCisJCWlmIChtb2RlbC5z
b3VyY2UgIT09IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNlLk5ldHdv
cmsgfHwgbW9kZWwuX3JlcXVlc3QpIHsKKwkJCXZhciBmaXJzdE5vbk5hdGl2ZUNhbGxGcmFtZSA9
IG1vZGVsLmZpcnN0Tm9uTmF0aXZlQ2FsbEZyYW1lKCk7CisJCQlpZiAoZmlyc3ROb25OYXRpdmVD
YWxsRnJhbWUpIHsKKwkJCQl2YXIgdXJsRWxlbWVudCA9IHRoaXMuX2xpbmtpZnlDYWxsRnJhbWUo
Zmlyc3ROb25OYXRpdmVDYWxsRnJhbWUpOworCQkJCXRoaXMuX2Zvcm1hdHRlZE1lc3NhZ2UuYXBw
ZW5kQ2hpbGQodXJsRWxlbWVudCk7CisJCQl9IGVsc2UgaWYgKHVybCAmJiAhdGhpcy5fc2hvdWxk
SGlkZVVSTCh1cmwpKSB7CisJCQkJdmFyIHVybEVsZW1lbnQgPSB0aGlzLl9saW5raWZ5TG9jYXRp
b24odXJsLCBsaW5lLCBtb2RlbC5jb2x1bW4pOworCQkJCXRoaXMuX2Zvcm1hdHRlZE1lc3NhZ2Uu
YXBwZW5kQ2hpbGQodXJsRWxlbWVudCk7CisJCQl9CisJCX0KKworCQl0aGlzLl9mb3JtYXR0ZWRN
ZXNzYWdlLmFwcGVuZENoaWxkKG1lc3NhZ2VUZXh0KTsKKworCQlpZiAodGhpcy5zYXZlZFJlc3Vs
dEluZGV4KSB7CisJCQl2YXIgc2F2ZWRWYXJpYWJsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJzcGFuIik7CisJCQlzYXZlZFZhcmlhYmxlRWxlbWVudC5jbGFzc05hbWUgPSAiY29u
c29sZS1zYXZlZC12YXJpYWJsZSI7CisJCQlzYXZlZFZhcmlhYmxlRWxlbWVudC50ZXh0Q29udGVu
dCA9ICIgPSAkIiArIHRoaXMuc2F2ZWRSZXN1bHRJbmRleDsKKwkJCWlmICh0aGlzLl9vYmplY3RU
cmVlKQorCQkJCXRoaXMuX29iamVjdFRyZWUuYXBwZW5kVGl0bGVTdWZmaXgoc2F2ZWRWYXJpYWJs
ZUVsZW1lbnQpOworCQkJZWxzZQorCQkJCXRoaXMuX2Zvcm1hdHRlZE1lc3NhZ2UuYXBwZW5kQ2hp
bGQoc2F2ZWRWYXJpYWJsZUVsZW1lbnQpOworCQl9CisKKwkJaWYgKHRoaXMubW9kZWwuc2hvdWxk
RHVtcFN0YWNrVHJhY2UoKSkgeworCQkJdmFyIG9sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
b2wiKTsKKwkJCW9sLmNsYXNzTmFtZSA9ICJvdXRsaW5lLWRpc2Nsb3N1cmUiOworCQkJdmFyIHRy
ZWVPdXRsaW5lID0gbmV3IFRyZWVPdXRsaW5lKG9sKTsKKworCQkJdmFyIGNvbnRlbnQgPSB0aGlz
Ll9mb3JtYXR0ZWRNZXNzYWdlOworCQkJdmFyIHJvb3QgPSBuZXcgVHJlZUVsZW1lbnQoY29udGVu
dCwgbnVsbCwgdHJ1ZSk7CisJCQljb250ZW50LnRyZWVFbGVtZW50Rm9yVGVzdCA9IHJvb3Q7CisJ
CQl0cmVlT3V0bGluZS5hcHBlbmRDaGlsZChyb290KTsKKwkJCWlmIChtb2RlbC50eXBlID09PSBX
ZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuVHJhY2UpCisJCQkJcm9vdC5l
eHBhbmQoKTsKKworCQkJdGhpcy5fcG9wdWxhdGVTdGFja1RyYWNlVHJlZUVsZW1lbnQocm9vdCk7
CisJCQl0aGlzLl9mb3JtYXR0ZWRNZXNzYWdlID0gb2w7CisJCX0KKworCQkvLyBUaGlzIGlzIHVz
ZWQgZm9yIGlubGluZSBtZXNzYWdlIGJ1YmJsZXMgaW4gU291cmNlRnJhbWVzLCBvciBvdGhlciBw
bGFpbi10ZXh0IHJlcHJlc2VudGF0aW9ucy4KKwkJLy8gQG52YXNpbHlldjogc2hvdWxkIGl0IGJl
IGluIHRoZSBtb2RlbD8gTm90IHN1cmUuCisJCXRoaXMuX21lc3NhZ2UgPSBtZXNzYWdlVGV4dC50
ZXh0Q29udGVudDsKKwl9LAorCisJX3Nob3VsZEhpZGVVUkw6IGZ1bmN0aW9uKHVybCkKKwl7CisJ
CWlmICh1cmwgPT09ICJ1bmRlZmluZWQiKQorCQkJY29uc29sZS53YXJuKCJDb25zb2xlTWVzc2Fn
ZVZpZXcjX3Nob3VsZEhpZGVVUkwodXJsKTogdXJsIHNob3VsZCBuZXZlciBiZSBcInVuZGVmaW5l
ZFwiLiIpOworCisJCS8vQEZJWE1FOiByZW1vdmUgYHVybCA9PT0gInVuZGVmaW5lZCJgIGNoZWNr
LgorCQlyZXR1cm4gdXJsID09PSAidW5kZWZpbmVkIiB8fCB1cmwgPT09ICJbbmF0aXZlIGNvZGVd
IjsKKwl9LAorCisJZ2V0IGZvcm1hdHRlZE1lc3NhZ2UoKQorCXsKKwkJaWYgKCF0aGlzLl9mb3Jt
YXR0ZWRNZXNzYWdlKQorCQkJdGhpcy5fZm9ybWF0TWVzc2FnZSgpOworCQlyZXR1cm4gdGhpcy5f
Zm9ybWF0dGVkTWVzc2FnZTsKKwl9LAorCisJX2xpbmtpZnlMb2NhdGlvbjogZnVuY3Rpb24odXJs
LCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpCisJeworCQkvLyBDb25zb2xlTWVzc2FnZSBzdGFj
ayB0cmFjZSBsaW5lIG51bWJlcnMgYXJlIG9uZS1iYXNlZC4KKwkJbGluZU51bWJlciA9IGxpbmVO
dW1iZXIgPyBsaW5lTnVtYmVyIC0gMSA6IDA7CisKKwkJcmV0dXJuIFdlYkluc3BlY3Rvci5saW5r
aWZ5TG9jYXRpb24odXJsLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsICJjb25zb2xlLW1lc3Nh
Z2UtdXJsIik7CisJfSwKKworCV9saW5raWZ5Q2FsbEZyYW1lOiBmdW5jdGlvbihjYWxsRnJhbWUp
CisJeworCQlyZXR1cm4gdGhpcy5fbGlua2lmeUxvY2F0aW9uKGNhbGxGcmFtZS51cmwsIGNhbGxG
cmFtZS5saW5lTnVtYmVyLCBjYWxsRnJhbWUuY29sdW1uTnVtYmVyKTsKKwl9LAorCisJX2Zvcm1h
dDogZnVuY3Rpb24ocGFyYW1ldGVycykKKwl7CisJCS8vIFRoaXMgbm9kZSBpcyB1c2VkIGxpa2Ug
YSBCdWlsZGVyLiBWYWx1ZXMgYXJlIGNvbnRpbnVhbGx5IGFwcGVuZGVkIG9udG8gaXQuCisJCXZh
ciBmb3JtYXR0ZWRSZXN1bHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisJCWlm
ICghcGFyYW1ldGVycy5sZW5ndGgpCisJCQlyZXR1cm4gZm9ybWF0dGVkUmVzdWx0OworCisJCS8v
IEZvcm1hdHRpbmcgY29kZSBiZWxvdyBhc3N1bWVzIHRoYXQgcGFyYW1ldGVycyBhcmUgYWxsIHdy
YXBwZXJzIHdoZXJlYXMgZnJvbnRlbmQgY29uc29sZQorCQkvLyBBUEkgYWxsb3dzIHBhc3Npbmcg
YXJiaXRyYXJ5IHZhbHVlcyBhcyBtZXNzYWdlcyAoc3RyaW5ncywgbnVtYmVycywgZXRjLikuIFdy
YXAgdGhlbSBoZXJlLgorCQlmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtZXRlcnMubGVuZ3RoOyAr
K2kpIHsKKwkJCS8vIEZJWE1FOiBPbmx5IHBhc3MgcnVudGltZSB3cmFwcGVycyBoZXJlLgorCQkJ
aWYgKHBhcmFtZXRlcnNbaV0gaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0KQor
CQkJCWNvbnRpbnVlOworCisJCQlpZiAodHlwZW9mIHBhcmFtZXRlcnNbaV0gPT09ICJvYmplY3Qi
KQorCQkJCXBhcmFtZXRlcnNbaV0gPSBXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0LmZyb21QYXls
b2FkKHBhcmFtZXRlcnNbaV0pOworCQkJZWxzZQorCQkJCXBhcmFtZXRlcnNbaV0gPSBXZWJJbnNw
ZWN0b3IuUmVtb3RlT2JqZWN0LmZyb21QcmltaXRpdmVWYWx1ZShwYXJhbWV0ZXJzW2ldKTsKKwkJ
fQorCisJCS8vIFRoZXJlIGNhbiBiZSBzdHJpbmcgbG9nIGFuZCBzdHJpbmcgZXZhbCByZXN1bHQu
IFdlIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlbSBiYXNlZCBvbiBtZXNzYWdlIHR5cGUuCisJCXZh
ciBzaG91bGRGb3JtYXRNZXNzYWdlID0gV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdC50eXBlKHBh
cmFtZXRlcnNbMF0pID09PSAic3RyaW5nIiAmJiB0aGlzLm1vZGVsLnR5cGUgIT09IFdlYkluc3Bl
Y3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5SZXN1bHQ7CisKKwkJaWYgKHNob3VsZEZv
cm1hdE1lc3NhZ2UpIHsKKwkJCS8vIE11bHRpcGxlIHBhcmFtZXRlcnMgd2l0aCB0aGUgZmlyc3Qg
YmVpbmcgYSBmb3JtYXQgc3RyaW5nLiBTYXZlIHVudXNlZCBzdWJzdGl0dXRpb25zLgorCQkJdmFy
IHJlc3VsdCA9IHRoaXMuX2Zvcm1hdFdpdGhTdWJzdGl0dXRpb25TdHJpbmcocGFyYW1ldGVycywg
Zm9ybWF0dGVkUmVzdWx0KTsKKwkJCXBhcmFtZXRlcnMgPSByZXN1bHQudW51c2VkU3Vic3RpdHV0
aW9uczsKKwkJCWlmIChwYXJhbWV0ZXJzLmxlbmd0aCkKKwkJCQlmb3JtYXR0ZWRSZXN1bHQuYXBw
ZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiAiKSk7CisJCX0KKworCQlpZiAodGhp
cy5tb2RlbC50eXBlID09PSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUu
VGFibGUpIHsKKwkJCWZvcm1hdHRlZFJlc3VsdC5hcHBlbmRDaGlsZCh0aGlzLl9mb3JtYXRQYXJh
bWV0ZXJBc1RhYmxlKHBhcmFtZXRlcnMpKTsKKwkJCXJldHVybiBmb3JtYXR0ZWRSZXN1bHQ7CisJ
CX0KKworCQkvLyBTaW5nbGUgcGFyYW1ldGVyLCBvciB1bnVzZWQgc3Vic3RpdHV0aW9ucyBmcm9t
IGFib3ZlLgorCQlmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtZXRlcnMubGVuZ3RoOyArK2kpIHsK
KwkJCS8vIElubGluZSBzdHJpbmdzIHdoZW4gZm9ybWF0dGluZy4KKwkJCWlmIChzaG91bGRGb3Jt
YXRNZXNzYWdlICYmIHBhcmFtZXRlcnNbaV0udHlwZSA9PT0gInN0cmluZyIpIHsKKwkJCQl2YXIg
c3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKwkJCQlzcGFuLmNsYXNzTGlz
dC5hZGQoInR5cGUtc3RyaW5nIik7CisJCQkJc3Bhbi50ZXh0Q29udGVudCA9IHBhcmFtZXRlcnNb
aV0uZGVzY3JpcHRpb247CisJCQkJZm9ybWF0dGVkUmVzdWx0LmFwcGVuZENoaWxkKHNwYW4pOwor
CQkJfSBlbHNlCisJCQkJZm9ybWF0dGVkUmVzdWx0LmFwcGVuZENoaWxkKHRoaXMuX2Zvcm1hdFBh
cmFtZXRlcihwYXJhbWV0ZXJzW2ldLCBmYWxzZSkpOworCisJCQlpZiAoaSA8IHBhcmFtZXRlcnMu
bGVuZ3RoIC0gMSAmJiAhdGhpcy5faXNFeHBhbmRhYmxlKHBhcmFtZXRlcnNbaV0pKQorCQkJCWZv
cm1hdHRlZFJlc3VsdC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiICIpKTsK
KworCQl9CisJCXJldHVybiBmb3JtYXR0ZWRSZXN1bHQ7CisJfSwKKworCV9pc0V4cGFuZGFibGU6
IGZ1bmN0aW9uKHJlbW90ZU9iamVjdCkgeworCQlpZiAoIXJlbW90ZU9iamVjdCkKKwkJCXJldHVy
biBmYWxzZTsKKworCQlpZiAocmVtb3RlT2JqZWN0Lmhhc0NoaWxkcmVuICYmIHJlbW90ZU9iamVj
dC5wcmV2aWV3ICYmIHJlbW90ZU9iamVjdC5wcmV2aWV3Lmxvc3NsZXNzKQorCQkJcmV0dXJuIGZh
bHNlOworCisJCXJldHVybiByZW1vdGVPYmplY3QuaGFzQ2hpbGRyZW47CisJfSwKKworCisJX2Zv
cm1hdFBhcmFtZXRlcjogZnVuY3Rpb24ob3V0cHV0LCBmb3JjZU9iamVjdEZvcm1hdCkKKwl7CisJ
CXZhciB0eXBlOworCQlpZiAoZm9yY2VPYmplY3RGb3JtYXQpCisJCQl0eXBlID0gIm9iamVjdCI7
CisJCWVsc2UgaWYgKG91dHB1dCBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5SZW1vdGVPYmplY3Qp
CisJCQl0eXBlID0gb3V0cHV0LnN1YnR5cGUgfHwgb3V0cHV0LnR5cGU7CisJCWVsc2UKKwkJCXR5
cGUgPSB0eXBlb2Ygb3V0cHV0OworCisJCXZhciBmb3JtYXR0ZXIgPSB0aGlzLl9jdXN0b21Gb3Jt
YXR0ZXJzW3R5cGVdOworCQlpZiAoIWZvcm1hdHRlcikKKwkJCWZvcm1hdHRlciA9IHRoaXMuX2Zv
cm1hdFBhcmFtZXRlckFzVmFsdWU7CisKKwkJdmFyIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJzcGFuIik7CisKKwkJaWYgKHRoaXMuX2lzRXhwYW5kYWJsZShvdXRwdXQpKQorCQkJc3Bh
bi5jbGFzc0xpc3QuYWRkKCJleHBhbmRhYmxlIik7CisKKwkJZm9ybWF0dGVyLmNhbGwodGhpcywg
b3V0cHV0LCBzcGFuLCBmb3JjZU9iamVjdEZvcm1hdCk7CisJCXJldHVybiBzcGFuOworCX0sCisK
KwlfZm9ybWF0UGFyYW1ldGVyQXNWYWx1ZTogZnVuY3Rpb24odmFsdWUsIGVsZW0pCisJeworCQll
bGVtLmFwcGVuZENoaWxkKFdlYkluc3BlY3Rvci5Gb3JtYXR0ZWRWYWx1ZS5jcmVhdGVFbGVtZW50
Rm9yUmVtb3RlT2JqZWN0KHZhbHVlKSk7CisJfSwKKworCV9mb3JtYXRQYXJhbWV0ZXJBc09iamVj
dDogZnVuY3Rpb24ob2JqLCBlbGVtLCBmb3JjZUV4cGFuc2lvbikKKwl7CisJCXRoaXMuX29iamVj
dFRyZWUgPSBuZXcgV2ViSW5zcGVjdG9yLk9iamVjdFRyZWVWaWV3KG9iaiwgV2ViSW5zcGVjdG9y
Lk9iamVjdFRyZWVWaWV3Lk1vZGUuUHJvcGVydGllcywgdGhpcy5fcm9vdFByb3BlcnR5UGF0aEZv
ck9iamVjdChvYmopLCBmb3JjZUV4cGFuc2lvbik7CisJCWVsZW0uYXBwZW5kQ2hpbGQodGhpcy5f
b2JqZWN0VHJlZS5lbGVtZW50KTsKKwl9LAorCisJX2Zvcm1hdFBhcmFtZXRlckFzU3RyaW5nOiBm
dW5jdGlvbihvdXRwdXQsIGVsZW0pCisJeworCQl2YXIgc3BhbiA9IFdlYkluc3BlY3Rvci5Gb3Jt
YXR0ZWRWYWx1ZS5jcmVhdGVMaW5raWZpZWRFbGVtZW50U3RyaW5nKG91dHB1dC5kZXNjcmlwdGlv
bik7CisJCWVsZW0uYXBwZW5kQ2hpbGQoc3Bhbik7CisJfSwKKworCV9mb3JtYXRQYXJhbWV0ZXJB
c05vZGU6IGZ1bmN0aW9uKG9iamVjdCwgZWxlbSkKKwl7CisJCXZhciBzcGFuID0gV2ViSW5zcGVj
dG9yLkZvcm1hdHRlZFZhbHVlLmNyZWF0ZUVsZW1lbnRGb3JOb2RlKG9iamVjdCk7CisJCWVsZW0u
YXBwZW5kQ2hpbGQoc3Bhbik7CisJfSwKKworCV9mb3JtYXRQYXJhbWV0ZXJBc0FycmF5OiBmdW5j
dGlvbihhcnIsIGVsZW0pCisJeworCQl0aGlzLl9vYmplY3RUcmVlID0gbmV3IFdlYkluc3BlY3Rv
ci5PYmplY3RUcmVlVmlldyhhcnIsIFdlYkluc3BlY3Rvci5PYmplY3RUcmVlVmlldy5Nb2RlLlBy
b3BlcnRpZXMsIHRoaXMuX3Jvb3RQcm9wZXJ0eVBhdGhGb3JPYmplY3QoYXJyKSk7CisJCWVsZW0u
YXBwZW5kQ2hpbGQodGhpcy5fb2JqZWN0VHJlZS5lbGVtZW50KTsKKwl9LAorCisJX3Jvb3RQcm9w
ZXJ0eVBhdGhGb3JPYmplY3Q6IGZ1bmN0aW9uKG9iamVjdCkKKwl7CisJCWlmICghdGhpcy5zYXZl
ZFJlc3VsdEluZGV4KQorCQkJcmV0dXJuIG51bGw7CisKKwkJcmV0dXJuIG5ldyBXZWJJbnNwZWN0
b3IuUHJvcGVydHlQYXRoKG9iamVjdCwgIiQiICsgdGhpcy5zYXZlZFJlc3VsdEluZGV4KTsKKwl9
LAorCisJX3VzZXJQcm92aWRlZENvbHVtbk5hbWVzOiBmdW5jdGlvbihjb2x1bW5OYW1lc0FyZ3Vt
ZW50KQorCXsKKwkJaWYgKCFjb2x1bW5OYW1lc0FyZ3VtZW50KQorCQkJcmV0dXJuIG51bGw7CisK
KwkJdmFyIHJlbW90ZU9iamVjdCA9IFdlYkluc3BlY3Rvci5SZW1vdGVPYmplY3QuZnJvbVBheWxv
YWQoY29sdW1uTmFtZXNBcmd1bWVudCk7CisKKwkJLy8gU2luZ2xlIHByaW1pdGl2ZSBhcmd1bWVu
dC4KKwkJaWYgKHJlbW90ZU9iamVjdC50eXBlID09PSAic3RyaW5nIiB8fCByZW1vdGVPYmplY3Qu
dHlwZSA9PT0gIm51bWJlciIpCisJCQlyZXR1cm4gW1N0cmluZyhjb2x1bW5OYW1lc0FyZ3VtZW50
LnZhbHVlKV07CisKKwkJLy8gSWdub3JlIGV2ZXJ5dGhpbmcgdGhhdCBpcyBub3QgYW4gYXJyYXkg
d2l0aCBwcm9wZXJ0eSBwcmV2aWV3cy4KKwkJaWYgKHJlbW90ZU9iamVjdC50eXBlICE9PSAib2Jq
ZWN0IiB8fCByZW1vdGVPYmplY3Quc3VidHlwZSAhPT0gImFycmF5IiB8fCAhcmVtb3RlT2JqZWN0
LnByZXZpZXcgfHwgIXJlbW90ZU9iamVjdC5wcmV2aWV3LnByb3BlcnR5UHJldmlld3MpCisJCQly
ZXR1cm4gbnVsbDsKKworCQkvLyBBcnJheS4gTG9vayBpbnRvIHRoZSBwcmV2aWV3IGFuZCBnZXQg
c3RyaW5nIHZhbHVlcy4KKwkJdmFyIGV4dHJhY3RlZENvbHVtbk5hbWVzID0gW107CisJCWZvciAo
dmFyIHByb3BlcnR5UHJldmlldyBvZiByZW1vdGVPYmplY3QucHJldmlldy5wcm9wZXJ0eVByZXZp
ZXdzKSB7CisJCQlpZiAocHJvcGVydHlQcmV2aWV3LnR5cGUgPT09ICJzdHJpbmciIHx8IHByb3Bl
cnR5UHJldmlldy50eXBlID09PSAibnVtYmVyIikKKwkJCQlleHRyYWN0ZWRDb2x1bW5OYW1lcy5w
dXNoKFN0cmluZyhwcm9wZXJ0eVByZXZpZXcudmFsdWUpKTsKKwkJfQorCisJCXJldHVybiBleHRy
YWN0ZWRDb2x1bW5OYW1lcy5sZW5ndGggPyBleHRyYWN0ZWRDb2x1bW5OYW1lcyA6IG51bGw7CisJ
fSwKKworCV9mb3JtYXRQYXJhbWV0ZXJBc1RhYmxlOiBmdW5jdGlvbihwYXJhbWV0ZXJzKQorCXsK
KwkJdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisJCXZhciB0
YWJsZSA9IHBhcmFtZXRlcnNbMF07CisJCWlmICghdGFibGUgfHwgIXRhYmxlLnByZXZpZXcpCisJ
CQlyZXR1cm4gZWxlbWVudDsKKworCQl2YXIgcm93cyA9IFtdOworCQl2YXIgY29sdW1uTmFtZXMg
PSBbXTsKKwkJdmFyIGZsYXRWYWx1ZXMgPSBbXTsKKwkJdmFyIHByZXZpZXcgPSB0YWJsZS5wcmV2
aWV3OworCQl2YXIgdXNlclByb3ZpZGVkQ29sdW1uTmFtZXMgPSBmYWxzZTsKKworCQkvLyBVc2Vy
IHByb3ZpZGVkIGNvbHVtbk5hbWVzLgorCQl2YXIgZXh0cmFjdGVkQ29sdW1uTmFtZXMgPSB0aGlz
Ll91c2VyUHJvdmlkZWRDb2x1bW5OYW1lcyhwYXJhbWV0ZXJzWzFdKTsKKwkJaWYgKGV4dHJhY3Rl
ZENvbHVtbk5hbWVzKSB7CisJCQl1c2VyUHJvdmlkZWRDb2x1bW5OYW1lcyA9IHRydWU7CisJCQlj
b2x1bW5OYW1lcyA9IGV4dHJhY3RlZENvbHVtbk5hbWVzOworCQl9CisKKwkJLy8gQ2hlY2sgZmly
c3QgZm9yIHZhbHVlUHJldmlld3MgaW4gdGhlIHByb3BlcnRpZXMgbWVhbmluZyB0aGlzIHdhcyBh
biBhcnJheSBvZiBvYmplY3RzLgorCQlpZiAocHJldmlldy5wcm9wZXJ0eVByZXZpZXdzKSB7CisJ
CQlmb3IgKHZhciBpID0gMDsgaSA8IHByZXZpZXcucHJvcGVydHlQcmV2aWV3cy5sZW5ndGg7ICsr
aSkgeworCQkJCXZhciByb3dQcm9wZXJ0eSA9IHByZXZpZXcucHJvcGVydHlQcmV2aWV3c1tpXTsK
KwkJCQl2YXIgcm93UHJldmlldyA9IHJvd1Byb3BlcnR5LnZhbHVlUHJldmlldzsKKwkJCQlpZiAo
IXJvd1ByZXZpZXcpCisJCQkJCWNvbnRpbnVlOworCisJCQkJdmFyIHJvd1ZhbHVlID0ge307CisJ
CQkJY29uc3QgbWF4Q29sdW1uc1RvUmVuZGVyID0gMTA7CisJCQkJZm9yICh2YXIgaiA9IDA7IGog
PCByb3dQcmV2aWV3LnByb3BlcnR5UHJldmlld3MubGVuZ3RoOyArK2opIHsKKwkJCQkJdmFyIGNl
bGxQcm9wZXJ0eSA9IHJvd1ByZXZpZXcucHJvcGVydHlQcmV2aWV3c1tqXTsKKwkJCQkJdmFyIGNv
bHVtblJlbmRlcmVkID0gY29sdW1uTmFtZXMuY29udGFpbnMoY2VsbFByb3BlcnR5Lm5hbWUpOwor
CQkJCQlpZiAoIWNvbHVtblJlbmRlcmVkKSB7CisJCQkJCQlpZiAodXNlclByb3ZpZGVkQ29sdW1u
TmFtZXMgfHwgY29sdW1uTmFtZXMubGVuZ3RoID09PSBtYXhDb2x1bW5zVG9SZW5kZXIpCisJCQkJ
CQkJY29udGludWU7CisJCQkJCQljb2x1bW5SZW5kZXJlZCA9IHRydWU7CisJCQkJCQljb2x1bW5O
YW1lcy5wdXNoKGNlbGxQcm9wZXJ0eS5uYW1lKTsKKwkJCQkJfQorCisJCQkJCXJvd1ZhbHVlW2Nl
bGxQcm9wZXJ0eS5uYW1lXSA9IFdlYkluc3BlY3Rvci5Gb3JtYXR0ZWRWYWx1ZS5jcmVhdGVFbGVt
ZW50Rm9yUHJvcGVydHlQcmV2aWV3KGNlbGxQcm9wZXJ0eSk7CisJCQkJfQorCQkJCXJvd3MucHVz
aChbcm93UHJvcGVydHkubmFtZSwgcm93VmFsdWVdKTsKKwkJCX0KKwkJfQorCisJCS8vIElmIHRo
ZXJlIHdlcmUgdmFsdWVQcmV2aWV3cywgY29udmVydCB0byBhIGZsYXQgbGlzdC4KKwkJaWYgKHJv
d3MubGVuZ3RoKSB7CisJCQljb25zdCBlbURhc2ggPSAiXHUyMDE0IjsKKwkJCWNvbHVtbk5hbWVz
LnVuc2hpZnQoV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIoSW5kZXgpIikpOworCQkJZm9yICh2YXIg
aSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgKytpKSB7CisJCQkJdmFyIHJvd05hbWUgPSByb3dzW2ld
WzBdOworCQkJCXZhciByb3dWYWx1ZSA9IHJvd3NbaV1bMV07CisJCQkJZmxhdFZhbHVlcy5wdXNo
KHJvd05hbWUpOworCQkJCWZvciAodmFyIGogPSAxOyBqIDwgY29sdW1uTmFtZXMubGVuZ3RoOyAr
K2opIHsKKwkJCQkJdmFyIGNvbHVtbk5hbWUgPSBjb2x1bW5OYW1lc1tqXTsKKwkJCQkJaWYgKCEo
Y29sdW1uTmFtZSBpbiByb3dWYWx1ZSkpCisJCQkJCQlmbGF0VmFsdWVzLnB1c2goZW1EYXNoKTsK
KwkJCQkJZWxzZQorCQkJCQkJZmxhdFZhbHVlcy5wdXNoKHJvd1ZhbHVlW2NvbHVtbk5hbWVdKTsK
KwkJCQl9CisJCQl9CisJCX0KKworCQkvLyBJZiB0aGVyZSB3ZXJlIG5vIHZhbHVlIFByZXZpZXdz
LCB0aGVuIGNoZWNrIGZvciBhbiBhcnJheSBvZiB2YWx1ZXMuCisJCWlmICghZmxhdFZhbHVlcy5s
ZW5ndGggJiYgcHJldmlldy5wcm9wZXJ0eVByZXZpZXdzKSB7CisJCQlmb3IgKHZhciBpID0gMDsg
aSA8IHByZXZpZXcucHJvcGVydHlQcmV2aWV3cy5sZW5ndGg7ICsraSkgeworCQkJCXZhciByb3dQ
cm9wZXJ0eSA9IHByZXZpZXcucHJvcGVydHlQcmV2aWV3c1tpXTsKKwkJCQlpZiAoISgidmFsdWUi
IGluIHJvd1Byb3BlcnR5KSkKKwkJCQkJY29udGludWU7CisKKwkJCQlpZiAoIWNvbHVtbk5hbWVz
Lmxlbmd0aCkgeworCQkJCQljb2x1bW5OYW1lcy5wdXNoKFdlYkluc3BlY3Rvci5VSVN0cmluZygi
SW5kZXgiKSk7CisJCQkJCWNvbHVtbk5hbWVzLnB1c2goV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJW
YWx1ZSIpKTsKKwkJCQl9CisKKwkJCQlmbGF0VmFsdWVzLnB1c2gocm93UHJvcGVydHkubmFtZSk7
CisJCQkJZmxhdFZhbHVlcy5wdXNoKFdlYkluc3BlY3Rvci5Gb3JtYXR0ZWRWYWx1ZS5jcmVhdGVF
bGVtZW50Rm9yUHJvcGVydHlQcmV2aWV3KHJvd1Byb3BlcnR5KSk7CisJCQl9CisJCX0KKworCQkv
LyBJZiBsb3NzbGVzcyBvciBub3QgdGFibGUgZGF0YSwgb3V0cHV0IHRoZSBvYmplY3Qgc28gZnVs
bCBkYXRhIGNhbiBiZSBnb3R0ZW4uCisJCWlmICghcHJldmlldy5sb3NzbGVzcyB8fCAhZmxhdFZh
bHVlcy5sZW5ndGgpIHsKKwkJCWVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fZm9ybWF0UGFyYW1l
dGVyKHRhYmxlKSk7CisJCQlpZiAoIWZsYXRWYWx1ZXMubGVuZ3RoKQorCQkJCXJldHVybiBlbGVt
ZW50OworCQl9CisKKwkJdmFyIGRhdGFHcmlkQ29udGFpbmVyID0gZWxlbWVudC5jcmVhdGVDaGls
ZCgic3BhbiIpOworCQl2YXIgZGF0YUdyaWQgPSBXZWJJbnNwZWN0b3IuRGF0YUdyaWQuY3JlYXRl
U29ydGFibGVEYXRhR3JpZChjb2x1bW5OYW1lcywgZmxhdFZhbHVlcyk7CisJCWRhdGFHcmlkLmVs
ZW1lbnQuY2xhc3NMaXN0LmFkZCgiaW5saW5lIik7CisJCWRhdGFHcmlkQ29udGFpbmVyLmFwcGVu
ZENoaWxkKGRhdGFHcmlkLmVsZW1lbnQpOworCisJCXJldHVybiBlbGVtZW50OworCX0sCisKKwlf
Zm9ybWF0V2l0aFN1YnN0aXR1dGlvblN0cmluZzogZnVuY3Rpb24ocGFyYW1ldGVycywgZm9ybWF0
dGVkUmVzdWx0KQorCXsKKwkJdmFyIGZvcm1hdHRlcnMgPSB7fTsKKworCQlmdW5jdGlvbiBwYXJh
bWV0ZXJGb3JtYXR0ZXIoZm9yY2UsIG9iaikKKwkJeworCQkJcmV0dXJuIHRoaXMuX2Zvcm1hdFBh
cmFtZXRlcihvYmosIGZvcmNlKTsKKwkJfQorCisJCWZ1bmN0aW9uIHN0cmluZ0Zvcm1hdHRlcihv
YmopCisJCXsKKwkJCXJldHVybiBvYmouZGVzY3JpcHRpb247CisJCX0KKworCQlmdW5jdGlvbiBm
bG9hdEZvcm1hdHRlcihvYmopCisJCXsKKwkJCWlmICh0eXBlb2Ygb2JqLnZhbHVlICE9PSAibnVt
YmVyIikKKwkJCQlyZXR1cm4gcGFyc2VGbG9hdChvYmouZGVzY3JpcHRpb24pOworCQkJcmV0dXJu
IG9iai52YWx1ZTsKKwkJfQorCisJCWZ1bmN0aW9uIGludGVnZXJGb3JtYXR0ZXIob2JqKQorCQl7
CisJCQlpZiAodHlwZW9mIG9iai52YWx1ZSAhPT0gIm51bWJlciIpCisJCQkJcmV0dXJuIHBhcnNl
SW50KG9iai5kZXNjcmlwdGlvbik7CisJCQlyZXR1cm4gTWF0aC5mbG9vcihvYmoudmFsdWUpOwor
CQl9CisKKwkJdmFyIGN1cnJlbnRTdHlsZSA9IG51bGw7CisJCWZ1bmN0aW9uIHN0eWxlRm9ybWF0
dGVyKG9iaikKKwkJeworCQkJY3VycmVudFN0eWxlID0ge307CisJCQl2YXIgYnVmZmVyID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOworCQkJYnVmZmVyLnNldEF0dHJpYnV0ZSgic3R5
bGUiLCBvYmouZGVzY3JpcHRpb24pOworCQkJZm9yICh2YXIgaSA9IDA7IGkgPCBidWZmZXIuc3R5
bGUubGVuZ3RoOyBpKyspIHsKKwkJCQl2YXIgcHJvcGVydHkgPSBidWZmZXIuc3R5bGVbaV07CisJ
CQkJaWYgKGlzV2hpdGVsaXN0ZWRQcm9wZXJ0eShwcm9wZXJ0eSkpCisJCQkJCWN1cnJlbnRTdHls
ZVtwcm9wZXJ0eV0gPSBidWZmZXIuc3R5bGVbcHJvcGVydHldOworCQkJfQorCQl9CisKKwkJZnVu
Y3Rpb24gaXNXaGl0ZWxpc3RlZFByb3BlcnR5KHByb3BlcnR5KQorCQl7CisJCQl2YXIgcHJlZml4
ZXMgPSBbImJhY2tncm91bmQiLCAiYm9yZGVyIiwgImNvbG9yIiwgImZvbnQiLCAibGluZSIsICJt
YXJnaW4iLCAicGFkZGluZyIsICJ0ZXh0IiwgIi13ZWJraXQtYmFja2dyb3VuZCIsICItd2Via2l0
LWJvcmRlciIsICItd2Via2l0LWZvbnQiLCAiLXdlYmtpdC1tYXJnaW4iLCAiLXdlYmtpdC1wYWRk
aW5nIiwgIi13ZWJraXQtdGV4dCJdOworCQkJZm9yICh2YXIgaSA9IDA7IGkgPCBwcmVmaXhlcy5s
ZW5ndGg7IGkrKykgeworCQkJCWlmIChwcm9wZXJ0eS5zdGFydHNXaXRoKHByZWZpeGVzW2ldKSkK
KwkJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQkvLyBG
aXJlYnVnIHVzZXMgJW8gZm9yIGZvcm1hdHRpbmcgb2JqZWN0cy4KKwkJZm9ybWF0dGVycy5vID0g
cGFyYW1ldGVyRm9ybWF0dGVyLmJpbmQodGhpcywgZmFsc2UpOworCQlmb3JtYXR0ZXJzLnMgPSBz
dHJpbmdGb3JtYXR0ZXI7CisJCWZvcm1hdHRlcnMuZiA9IGZsb2F0Rm9ybWF0dGVyOworCisJCS8v
IEZpcmVidWcgYWxsb3dzIGJvdGggJWkgYW5kICVkIGZvciBmb3JtYXR0aW5nIGludGVnZXJzLgor
CQlmb3JtYXR0ZXJzLmkgPSBpbnRlZ2VyRm9ybWF0dGVyOworCQlmb3JtYXR0ZXJzLmQgPSBpbnRl
Z2VyRm9ybWF0dGVyOworCisJCS8vIEZpcmVidWcgdXNlcyAlYyBmb3Igc3R5bGluZyB0aGUgbWVz
c2FnZS4KKwkJZm9ybWF0dGVycy5jID0gc3R5bGVGb3JtYXR0ZXI7CisKKwkJLy8gU3VwcG9ydCAl
TyB0byBmb3JjZSBvYmplY3QgZm9ybWF0dGluZywgaW5zdGVhZCBvZiB0aGUgdHlwZS1iYXNlZCAl
byBmb3JtYXR0aW5nLgorCQlmb3JtYXR0ZXJzLk8gPSBwYXJhbWV0ZXJGb3JtYXR0ZXIuYmluZCh0
aGlzLCB0cnVlKTsKKworCQlmdW5jdGlvbiBhcHBlbmQoYSwgYikKKwkJeworCQkJaWYgKGIgaW5z
dGFuY2VvZiBOb2RlKQorCQkJCWEuYXBwZW5kQ2hpbGQoYik7CisJCQllbHNlIGlmIChiKSB7CisJ
CQkJdmFyIHRvQXBwZW5kID0gV2ViSW5zcGVjdG9yLmxpbmtpZnlTdHJpbmdBc0ZyYWdtZW50KGIu
dG9TdHJpbmcoKSk7CisJCQkJaWYgKGN1cnJlbnRTdHlsZSkgeworCQkJCQl2YXIgd3JhcHBlciA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKwkJCQkJZm9yICh2YXIga2V5IGluIGN1
cnJlbnRTdHlsZSkKKwkJCQkJCXdyYXBwZXIuc3R5bGVba2V5XSA9IGN1cnJlbnRTdHlsZVtrZXld
OworCQkJCQl3cmFwcGVyLmFwcGVuZENoaWxkKHRvQXBwZW5kKTsKKwkJCQkJdG9BcHBlbmQgPSB3
cmFwcGVyOworCQkJCX0KKwkJCQl2YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNw
YW4iKTsKKwkJCQlzcGFuLmNsYXNzTmFtZSA9ICJ0eXBlLXN0cmluZyI7CisJCQkJc3Bhbi5hcHBl
bmRDaGlsZCh0b0FwcGVuZCk7CisJCQkJYS5hcHBlbmRDaGlsZChzcGFuKTsKKwkJCX0KKwkJCXJl
dHVybiBhOworCQl9CisKKwkJLy8gU3RyaW5nLmZvcm1hdCBkb2VzIHRyZWF0IGZvcm1hdHRlZFJl
c3VsdCBsaWtlIGEgQnVpbGRlciwgcmVzdWx0IGlzIGFuIG9iamVjdC4KKwkJcmV0dXJuIFN0cmlu
Zy5mb3JtYXQocGFyYW1ldGVyc1swXS5kZXNjcmlwdGlvbiwgcGFyYW1ldGVycy5zbGljZSgxKSwg
Zm9ybWF0dGVycywgZm9ybWF0dGVkUmVzdWx0LCBhcHBlbmQpOworCX0sCisKKwlkZWNvcmF0ZU1l
c3NhZ2VFbGVtZW50OiBmdW5jdGlvbihlbGVtZW50KQorCXsKKwkJaWYgKHRoaXMuX2VsZW1lbnQp
CisJCQlyZXR1cm4gdGhpcy5fZWxlbWVudDsKKworCQllbGVtZW50Lm1lc3NhZ2UgPSB0aGlzOwor
CQllbGVtZW50LmNsYXNzTGlzdC5hZGQoImNvbnNvbGUtbWVzc2FnZSIpOworCisJCXRoaXMuX2Vs
ZW1lbnQgPSBlbGVtZW50OworCisJCXN3aXRjaCAodGhpcy5sZXZlbCkgeworCQkJY2FzZSBXZWJJ
bnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLlRpcDoKKwkJCQllbGVtZW50LmNs
YXNzTGlzdC5hZGQoImNvbnNvbGUtdGlwLWxldmVsIik7CisJCQkJZWxlbWVudC5zZXRBdHRyaWJ1
dGUoImRhdGEtbGFiZWxwcmVmaXgiLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlRpcDogIikpOwor
CQkJCWJyZWFrOworCQkJY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxl
dmVsLkxvZzoKKwkJCQllbGVtZW50LmNsYXNzTGlzdC5hZGQoImNvbnNvbGUtbG9nLWxldmVsIik7
CisJCQkJZWxlbWVudC5zZXRBdHRyaWJ1dGUoImRhdGEtbGFiZWxwcmVmaXgiLCBXZWJJbnNwZWN0
b3IuVUlTdHJpbmcoIkxvZzogIikpOworCQkJCWJyZWFrOworCQkJY2FzZSBXZWJJbnNwZWN0b3Iu
Q29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkRlYnVnOgorCQkJCWVsZW1lbnQuY2xhc3NMaXN0
LmFkZCgiY29uc29sZS1kZWJ1Zy1sZXZlbCIpOworCQkJCWVsZW1lbnQuc2V0QXR0cmlidXRlKCJk
YXRhLWxhYmVscHJlZml4IiwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJEZWJ1ZzogIikpOworCQkJ
CWJyZWFrOworCQkJY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVs
Lldhcm5pbmc6CisJCQkJZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjb25zb2xlLXdhcm5pbmctbGV2
ZWwiKTsKKwkJCQllbGVtZW50LnNldEF0dHJpYnV0ZSgiZGF0YS1sYWJlbHByZWZpeCIsIFdlYklu
c3BlY3Rvci5VSVN0cmluZygiV2FybmluZzogIikpOworCQkJCWJyZWFrOworCQkJY2FzZSBXZWJJ
bnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkVycm9yOgorCQkJCWVsZW1lbnQu
Y2xhc3NMaXN0LmFkZCgiY29uc29sZS1lcnJvci1sZXZlbCIpOworCQkJCWVsZW1lbnQuc2V0QXR0
cmlidXRlKCJkYXRhLWxhYmVscHJlZml4IiwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJFcnJvcjog
IikpOworCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKHRoaXMubW9kZWwudHlwZSA9PT0gV2ViSW5z
cGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLlN0YXJ0R3JvdXAgfHwgdGhpcy5tb2Rl
bC50eXBlID09PSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuU3RhcnRH
cm91cENvbGxhcHNlZCkKKwkJCWVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiY29uc29sZS1ncm91cC10
aXRsZSIpOworCisJCWVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5mb3JtYXR0ZWRNZXNzYWdlKTsK
KworCQlpZiAodGhpcy5tb2RlbC5yZXBlYXRDb3VudCA+IDEpCisJCQl0aGlzLnVwZGF0ZVJlcGVh
dENvdW50KCk7CisKKwkJcmV0dXJuIGVsZW1lbnQ7CisJfSwKKworCXRvTWVzc2FnZUVsZW1lbnQ6
IGZ1bmN0aW9uKCkKKwl7CisJCWlmICh0aGlzLl9lbGVtZW50KQorCQkJcmV0dXJuIHRoaXMuX2Vs
ZW1lbnQ7CisKKwkJdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsK
KworCQlyZXR1cm4gdGhpcy5kZWNvcmF0ZU1lc3NhZ2VFbGVtZW50KGVsZW1lbnQpOworCX0sCisK
KwlfcG9wdWxhdGVTdGFja1RyYWNlVHJlZUVsZW1lbnQ6IGZ1bmN0aW9uKHBhcmVudFRyZWVFbGVt
ZW50KQorCXsKKwkJZm9yIChmcmFtZSBvZiB0aGlzLm1vZGVsLl9zdGFja1RyYWNlKSB7CisJCQl2
YXIgY29udGVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworCQkJdmFyIG1lc3Nh
Z2VUZXh0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKwkJCW1lc3Nh
Z2VUZXh0RWxlbWVudC5jbGFzc05hbWUgPSAiY29uc29sZS1tZXNzYWdlLXRleHQiOworCQkJdmFy
IGZ1bmN0aW9uTmFtZSA9IGZyYW1lLmZ1bmN0aW9uTmFtZSB8fCBXZWJJbnNwZWN0b3IuVUlTdHJp
bmcoIihhbm9ueW1vdXMgZnVuY3Rpb24pIik7CisJCQltZXNzYWdlVGV4dEVsZW1lbnQuYXBwZW5k
Q2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZnVuY3Rpb25OYW1lKSk7CisJCQljb250ZW50
LmFwcGVuZENoaWxkKG1lc3NhZ2VUZXh0RWxlbWVudCk7CisKKwkJCWlmIChmcmFtZS51cmwgJiYg
IXRoaXMuX3Nob3VsZEhpZGVVUkwoZnJhbWUudXJsKSkgeworCQkJCXZhciB1cmxFbGVtZW50ID0g
dGhpcy5fbGlua2lmeUNhbGxGcmFtZShmcmFtZSk7CisJCQkJY29udGVudC5hcHBlbmRDaGlsZCh1
cmxFbGVtZW50KTsKKwkJCX0KKworCQkJdmFyIHRyZWVFbGVtZW50ID0gbmV3IFRyZWVFbGVtZW50
KGNvbnRlbnQpOworCQkJcGFyZW50VHJlZUVsZW1lbnQuYXBwZW5kQ2hpbGQodHJlZUVsZW1lbnQp
OworCQl9CisJfSwKKworCXVwZGF0ZVJlcGVhdENvdW50OiBmdW5jdGlvbigpCisJeworCQlpZiAo
IXRoaXMucmVwZWF0Q291bnRFbGVtZW50KSB7CisJCQl0aGlzLnJlcGVhdENvdW50RWxlbWVudCA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKwkJCXRoaXMucmVwZWF0Q291bnRFbGVt
ZW50LmNsYXNzTmFtZSA9ICJidWJibGUiOworCisJCQl0aGlzLl9lbGVtZW50Lmluc2VydEJlZm9y
ZSh0aGlzLnJlcGVhdENvdW50RWxlbWVudCwgdGhpcy5fZWxlbWVudC5maXJzdENoaWxkKTsKKwkJ
fQorCQl0aGlzLnJlcGVhdENvdW50RWxlbWVudC50ZXh0Q29udGVudCA9IHRoaXMubW9kZWwucmVw
ZWF0Q291bnQ7CisJfSwKKworCisJZ2V0IGNsaXBib2FyZFByZWZpeFN0cmluZygpCisJeworCQly
ZXR1cm4gIlsiICsgdGhpcy5sZXZlbFN0cmluZyArICJdICI7CisJfSwKKworCXRvQ2xpcGJvYXJk
U3RyaW5nOiBmdW5jdGlvbihpc1ByZWZpeE9wdGlvbmFsKQorCXsKKwkJdmFyIGlzVHJhY2UgPSB0
aGlzLm1vZGVsLnNob3VsZER1bXBTdGFja1RyYWNlKCk7CisKKwkJdmFyIGNsaXBib2FyZFN0cmlu
ZyA9ICIiOworCQlpZiAodGhpcy5fZm9ybWF0dGVkTWVzc2FnZSAmJiAhaXNUcmFjZSkKKwkJCWNs
aXBib2FyZFN0cmluZyA9IHRoaXMuX2Zvcm1hdHRlZE1lc3NhZ2UucXVlcnlTZWxlY3Rvcigic3Bh
biIpLmlubmVyVGV4dDsKKwkJZWxzZQorCQkJY2xpcGJvYXJkU3RyaW5nID0gdGhpcy5tb2RlbC50
eXBlID09PSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuVHJhY2UgPyAi
Y29uc29sZS50cmFjZSgpIiA6IHRoaXMuX21lc3NhZ2UgfHwgdGhpcy5fbWVzc2FnZVRleHQ7CisK
KwkJaWYgKCFpc1ByZWZpeE9wdGlvbmFsIHx8IHRoaXMuZW5mb3JjZXNDbGlwYm9hcmRQcmVmaXhT
dHJpbmcpCisJCQljbGlwYm9hcmRTdHJpbmcgPSB0aGlzLmNsaXBib2FyZFByZWZpeFN0cmluZyAr
IGNsaXBib2FyZFN0cmluZzsKKworCQlpZiAoaXNUcmFjZSkgeworCQkJZm9yICh2YXIgZnJhbWUg
b2YgdGhpcy5tb2RlbC5fc3RhY2tUcmFjZSkgeworCQkJCWNsaXBib2FyZFN0cmluZyArPSAiXG5c
dCIgKyAoZnJhbWUuZnVuY3Rpb25OYW1lIHx8IFdlYkluc3BlY3Rvci5VSVN0cmluZygiKGFub255
bW91cyBmdW5jdGlvbikiKSk7CisJCQkJaWYgKGZyYW1lLnVybCkKKwkJCQkJY2xpcGJvYXJkU3Ry
aW5nICs9ICIgKCIgKyBXZWJJbnNwZWN0b3IuZGlzcGxheU5hbWVGb3JVUkwoZnJhbWUudXJsKSAr
ICIsIGxpbmUgIiArIGZyYW1lLmxpbmVOdW1iZXIgKyAiKSI7CisJCQl9CisJCX0gZWxzZSB7CisJ
CQl2YXIgcmVwZWF0Q291bnQgPSB0aGlzLm1vZGVsLnJlcGVhdENvdW50OworCQkJdmFyIHJlcGVh
dFN0cmluZyA9IHJlcGVhdENvdW50ID4gMSA/ICJ4IiArIHJlcGVhdENvdW50IDogIiI7CisKKwkJ
CXZhciB1cmxMaW5lID0gIiI7CisJCQlpZiAodGhpcy5tb2RlbC51cmwpIHsKKwkJCQl2YXIgY29t
cG9uZW50cyA9IFtXZWJJbnNwZWN0b3IuZGlzcGxheU5hbWVGb3JVUkwodGhpcy5tb2RlbC51cmwp
LCAibGluZSAiICsgdGhpcy5tb2RlbC5saW5lXTsKKwkJCQlpZiAocmVwZWF0U3RyaW5nKQorCQkJ
CQljb21wb25lbnRzLnB1c2gocmVwZWF0U3RyaW5nKTsKKwkJCQl1cmxMaW5lID0gIiAoIiArIGNv
bXBvbmVudHMuam9pbigiLCAiKSArICIpIjsKKwkJCX0gZWxzZSBpZiAocmVwZWF0U3RyaW5nKQor
CQkJCXVybExpbmUgPSAiICgiICsgcmVwZWF0U3RyaW5nICsgIikiOworCisJCQlpZiAodXJsTGlu
ZSkgeworCQkJCXZhciBsaW5lcyA9IGNsaXBib2FyZFN0cmluZy5zcGxpdCgiXG4iKTsKKwkJCQls
aW5lc1swXSArPSB1cmxMaW5lOworCQkJCWNsaXBib2FyZFN0cmluZyA9IGxpbmVzLmpvaW4oIlxu
Iik7CisJCQl9CisJCX0KKworCQlyZXR1cm4gY2xpcGJvYXJkU3RyaW5nOworCX0sCisKKwljbG9u
ZTogZnVuY3Rpb24oaXNEZWVwKSB7CisJCXZhciBuZXdNb2RlbCA9IGlzRGVlcCA/IHRoaXMubW9k
ZWwuY2xvbmUoKSA6IHRoaXMubW9kZWw7CisJCXJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkNvbnNv
bGVNZXNzYWdlVmlldyhuZXdNb2RlbCk7CisJfSwKKworCWlzRXF1YWw6IGZ1bmN0aW9uKG1zZykg
eworCQlpZiAoIW1zZykKKwkJCXJldHVybiBmYWxzZTsKKworCQlyZXR1cm4gdGhpcy5tb2RlbC5p
c0VxdWFsKG1zZy5tb2RlbCk7CisJfQorfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0xlZ2FjeUNvbnNvbGVNZXNzYWdlSW1wbC5qcyBiL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0xlZ2FjeUNvbnNvbGVNZXNz
YWdlSW1wbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjI3YTY3Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmll
d3MvTGVnYWN5Q29uc29sZU1lc3NhZ2VJbXBsLmpzCkBAIC0wLDAgKzEsODAwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDEzIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSm9zZXBoIFBlY29yYXJvCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBu
b3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitXZWJJbnNwZWN0b3IuQ29uc29sZU1l
c3NhZ2VJbXBsID0gZnVuY3Rpb24oc291cmNlLCBsZXZlbCwgbWVzc2FnZSwgbGlua2lmaWVyLCB0
eXBlLCB1cmwsIGxpbmUsIGNvbHVtbiwgcmVwZWF0Q291bnQsIHBhcmFtZXRlcnMsIHN0YWNrVHJh
Y2UsIHJlcXVlc3QpCit7CisgICAgY29uc29sZS5lcnJvcigiQ29uc29sZU1lc3NhZ2VJbXBsIGlz
IGRlcHJlY2F0ZWQsIHVzZSBDb25zb2xlTWVzc2FnZSBhbmQgQ29uc29sZU1lc3NhZ2VWaWV3IGlu
c3RlYWQiKTsKKworICAgIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5jYWxsKHRoaXMsIHNv
dXJjZSwgbGV2ZWwsIHVybCwgbGluZSwgY29sdW1uLCByZXBlYXRDb3VudCk7CisKKyAgICB0aGlz
Ll9saW5raWZpZXIgPSBsaW5raWZpZXI7CisgICAgdGhpcy50eXBlID0gdHlwZSB8fCBXZWJJbnNw
ZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuTG9nOworICAgIHRoaXMuX21lc3NhZ2VU
ZXh0ID0gbWVzc2FnZTsKKyAgICB0aGlzLl9wYXJhbWV0ZXJzID0gcGFyYW1ldGVyczsKKyAgICB0
aGlzLl9zdGFja1RyYWNlID0gc3RhY2tUcmFjZTsKKyAgICB0aGlzLl9yZXF1ZXN0ID0gcmVxdWVz
dDsKKworICAgIHRoaXMuX2N1c3RvbUZvcm1hdHRlcnMgPSB7CisgICAgICAgICJvYmplY3QiOiB0
aGlzLl9mb3JtYXRQYXJhbWV0ZXJBc09iamVjdCwKKyAgICAgICAgImVycm9yIjogdGhpcy5fZm9y
bWF0UGFyYW1ldGVyQXNPYmplY3QsCisgICAgICAgICJtYXAiOiB0aGlzLl9mb3JtYXRQYXJhbWV0
ZXJBc09iamVjdCwKKyAgICAgICAgInNldCI6IHRoaXMuX2Zvcm1hdFBhcmFtZXRlckFzT2JqZWN0
LAorICAgICAgICAid2Vha21hcCI6IHRoaXMuX2Zvcm1hdFBhcmFtZXRlckFzT2JqZWN0LAorICAg
ICAgICAiaXRlcmF0b3IiOiB0aGlzLl9mb3JtYXRQYXJhbWV0ZXJBc09iamVjdCwKKyAgICAgICAg
ImFycmF5IjogIHRoaXMuX2Zvcm1hdFBhcmFtZXRlckFzQXJyYXksCisgICAgICAgICJub2RlIjog
ICB0aGlzLl9mb3JtYXRQYXJhbWV0ZXJBc05vZGUsCisgICAgICAgICJzdHJpbmciOiB0aGlzLl9m
b3JtYXRQYXJhbWV0ZXJBc1N0cmluZworICAgIH07Cit9OworCitXZWJJbnNwZWN0b3IuQ29uc29s
ZU1lc3NhZ2VJbXBsLnByb3RvdHlwZSA9IHsKKworICAgIGVuZm9yY2VzQ2xpcGJvYXJkUHJlZml4
U3RyaW5nOiB0cnVlLAorCisgICAgX2Zvcm1hdE1lc3NhZ2U6IGZ1bmN0aW9uKCkKKyAgICB7Cisg
ICAgICAgIHRoaXMuX2Zvcm1hdHRlZE1lc3NhZ2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJz
cGFuIik7CisgICAgICAgIHRoaXMuX2Zvcm1hdHRlZE1lc3NhZ2UuY2xhc3NOYW1lID0gImNvbnNv
bGUtbWVzc2FnZS10ZXh0IjsKKworICAgICAgICB2YXIgbWVzc2FnZVRleHQ7CisgICAgICAgIGlm
ICh0aGlzLnNvdXJjZSA9PT0gV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VTb3Vy
Y2UuQ29uc29sZUFQSSkgeworICAgICAgICAgICAgc3dpdGNoICh0aGlzLnR5cGUpIHsKKyAgICAg
ICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5U
cmFjZToKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZVRleHQgPSBkb2N1bWVudC5jcmVhdGVU
ZXh0Tm9kZSgiY29uc29sZS50cmFjZSgpIik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VU
eXBlLkFzc2VydDoKKyAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBbV2ViSW5zcGVjdG9y
LlVJU3RyaW5nKCJBc3NlcnRpb24gZmFpbGVkOiIpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHRoaXMuX3BhcmFtZXRlcnMpCisgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJncy5j
b25jYXQodGhpcy5fcGFyYW1ldGVycyk7CisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VUZXh0
ID0gdGhpcy5fZm9ybWF0KGFyZ3MpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5E
aXI6CisgICAgICAgICAgICAgICAgICAgIHZhciBvYmogPSB0aGlzLl9wYXJhbWV0ZXJzID8gdGhp
cy5fcGFyYW1ldGVyc1swXSA6IHVuZGVmaW5lZDsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGFy
Z3MgPSBbIiVPIiwgb2JqXTsKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZVRleHQgPSB0aGlz
Ll9mb3JtYXQoYXJncyk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gdGhpcy5fcGFyYW1l
dGVycyB8fCBbdGhpcy5fbWVzc2FnZVRleHRdOworICAgICAgICAgICAgICAgICAgICBtZXNzYWdl
VGV4dCA9IHRoaXMuX2Zvcm1hdChhcmdzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
IGlmICh0aGlzLnNvdXJjZSA9PT0gV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VT
b3VyY2UuTmV0d29yaykgeworICAgICAgICAgICAgaWYgKHRoaXMuX3JlcXVlc3QpIHsKKyAgICAg
ICAgICAgICAgICB0aGlzLl9zdGFja1RyYWNlID0gdGhpcy5fcmVxdWVzdC5zdGFja1RyYWNlOwor
ICAgICAgICAgICAgICAgIGlmICh0aGlzLl9yZXF1ZXN0LmluaXRpYXRvciAmJiB0aGlzLl9yZXF1
ZXN0LmluaXRpYXRvci51cmwpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy51cmwgPSB0aGlz
Ll9yZXF1ZXN0LmluaXRpYXRvci51cmw7CisgICAgICAgICAgICAgICAgICAgIHRoaXMubGluZSA9
IHRoaXMuX3JlcXVlc3QuaW5pdGlhdG9yLmxpbmVOdW1iZXI7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIG1lc3NhZ2VUZXh0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3Bh
biIpOworICAgICAgICAgICAgICAgIGlmICh0aGlzLmxldmVsID09PSBXZWJJbnNwZWN0b3IuQ29u
c29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkVycm9yKSB7CisgICAgICAgICAgICAgICAgICAgIG1l
c3NhZ2VUZXh0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRoaXMuX3JlcXVl
c3QucmVxdWVzdE1ldGhvZCArICIgIikpOworICAgICAgICAgICAgICAgICAgICBtZXNzYWdlVGV4
dC5hcHBlbmRDaGlsZChXZWJJbnNwZWN0b3IubGlua2lmeVJlcXVlc3RBc05vZGUodGhpcy5fcmVx
dWVzdCkpOworICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fcmVxdWVzdC5mYWlsZWQpCisg
ICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlVGV4dC5hcHBlbmRDaGlsZChkb2N1bWVudC5j
cmVhdGVUZXh0Tm9kZSgiICIgKyB0aGlzLl9yZXF1ZXN0LmxvY2FsaXplZEZhaWxEZXNjcmlwdGlv
bikpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBt
ZXNzYWdlVGV4dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiICIgKyB0aGlz
Ll9yZXF1ZXN0LnN0YXR1c0NvZGUgKyAiICgiICsgdGhpcy5fcmVxdWVzdC5zdGF0dXNUZXh0ICsg
IikiKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdmFy
IGZyYWdtZW50ID0gV2ViSW5zcGVjdG9yLmxpbmtpZnlTdHJpbmdBc0ZyYWdtZW50V2l0aEN1c3Rv
bUxpbmtpZmllcih0aGlzLl9tZXNzYWdlVGV4dCwgV2ViSW5zcGVjdG9yLmxpbmtpZnlSZXF1ZXN0
QXNOb2RlLmJpbmQobnVsbCwgdGhpcy5fcmVxdWVzdCwgIiIpKTsKKyAgICAgICAgICAgICAgICAg
ICAgbWVzc2FnZVRleHQuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMudXJsKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHZhciBhbmNob3IgPSBXZWJJbnNwZWN0b3IubGlua2lmeVVSTEFz
Tm9kZSh0aGlzLnVybCwgdGhpcy51cmwsICJjb25zb2xlLW1lc3NhZ2UtdXJsIik7CisgICAgICAg
ICAgICAgICAgICAgIHRoaXMuX2Zvcm1hdHRlZE1lc3NhZ2UuYXBwZW5kQ2hpbGQoYW5jaG9yKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbWVzc2FnZVRleHQgPSB0aGlzLl9m
b3JtYXQoW3RoaXMuX21lc3NhZ2VUZXh0XSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICB2YXIgYXJncyA9IHRoaXMuX3BhcmFtZXRlcnMgfHwgW3RoaXMuX21l
c3NhZ2VUZXh0XTsKKyAgICAgICAgICAgIG1lc3NhZ2VUZXh0ID0gdGhpcy5fZm9ybWF0KGFyZ3Mp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRoaXMuc291cmNlICE9PSBXZWJJbnNwZWN0b3Iu
Q29uc29sZU1lc3NhZ2UuTWVzc2FnZVNvdXJjZS5OZXR3b3JrIHx8IHRoaXMuX3JlcXVlc3QpIHsK
KyAgICAgICAgICAgIHZhciBmaXJzdE5vbk5hdGl2ZUNhbGxGcmFtZSA9IHRoaXMuX2ZpcnN0Tm9u
TmF0aXZlQ2FsbEZyYW1lKCk7CisgICAgICAgICAgICBpZiAoZmlyc3ROb25OYXRpdmVDYWxsRnJh
bWUpIHsKKyAgICAgICAgICAgICAgICB2YXIgdXJsRWxlbWVudCA9IHRoaXMuX2xpbmtpZnlDYWxs
RnJhbWUoZmlyc3ROb25OYXRpdmVDYWxsRnJhbWUpOworICAgICAgICAgICAgICAgIHRoaXMuX2Zv
cm1hdHRlZE1lc3NhZ2UuYXBwZW5kQ2hpbGQodXJsRWxlbWVudCk7CisgICAgICAgICAgICB9IGVs
c2UgaWYgKHRoaXMudXJsICYmICF0aGlzLl9zaG91bGRIaWRlVVJMKHRoaXMudXJsKSkgeworICAg
ICAgICAgICAgICAgIHZhciB1cmxFbGVtZW50ID0gdGhpcy5fbGlua2lmeUxvY2F0aW9uKHRoaXMu
dXJsLCB0aGlzLmxpbmUsIHRoaXMuY29sdW1uKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9mb3Jt
YXR0ZWRNZXNzYWdlLmFwcGVuZENoaWxkKHVybEVsZW1lbnQpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgdGhpcy5fZm9ybWF0dGVkTWVzc2FnZS5hcHBlbmRDaGlsZChtZXNz
YWdlVGV4dCk7CisKKyAgICAgICAgaWYgKHRoaXMuc2F2ZWRSZXN1bHRJbmRleCkgeworICAgICAg
ICAgICAgdmFyIHNhdmVkVmFyaWFibGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
c3BhbiIpOworICAgICAgICAgICAgc2F2ZWRWYXJpYWJsZUVsZW1lbnQuY2xhc3NOYW1lID0gImNv
bnNvbGUtc2F2ZWQtdmFyaWFibGUiOworICAgICAgICAgICAgc2F2ZWRWYXJpYWJsZUVsZW1lbnQu
dGV4dENvbnRlbnQgPSAiID0gJCIgKyB0aGlzLnNhdmVkUmVzdWx0SW5kZXg7CisgICAgICAgICAg
ICBpZiAodGhpcy5fb2JqZWN0VHJlZSkKKyAgICAgICAgICAgICAgICB0aGlzLl9vYmplY3RUcmVl
LmFwcGVuZFRpdGxlU3VmZml4KHNhdmVkVmFyaWFibGVFbGVtZW50KTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICB0aGlzLl9mb3JtYXR0ZWRNZXNzYWdlLmFwcGVuZENoaWxkKHNh
dmVkVmFyaWFibGVFbGVtZW50KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0aGlzLm1vZGVs
LnNob3VsZER1bXBTdGFja1RyYWNlKCkpIHsKKyAgICAgICAgICAgIHZhciBvbCA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoIm9sIik7CisgICAgICAgICAgICBvbC5jbGFzc05hbWUgPSAib3V0bGlu
ZS1kaXNjbG9zdXJlIjsKKyAgICAgICAgICAgIHZhciB0cmVlT3V0bGluZSA9IG5ldyBUcmVlT3V0
bGluZShvbCk7CisKKyAgICAgICAgICAgIHZhciBjb250ZW50ID0gdGhpcy5fZm9ybWF0dGVkTWVz
c2FnZTsKKyAgICAgICAgICAgIHZhciByb290ID0gbmV3IFRyZWVFbGVtZW50KGNvbnRlbnQsIG51
bGwsIHRydWUpOworICAgICAgICAgICAgY29udGVudC50cmVlRWxlbWVudEZvclRlc3QgPSByb290
OworICAgICAgICAgICAgdHJlZU91dGxpbmUuYXBwZW5kQ2hpbGQocm9vdCk7CisgICAgICAgICAg
ICBpZiAodGhpcy50eXBlID09PSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5
cGUuVHJhY2UpCisgICAgICAgICAgICAgICAgcm9vdC5leHBhbmQoKTsKKworICAgICAgICAgICAg
dGhpcy5fcG9wdWxhdGVTdGFja1RyYWNlVHJlZUVsZW1lbnQocm9vdCk7CisgICAgICAgICAgICB0
aGlzLl9mb3JtYXR0ZWRNZXNzYWdlID0gb2w7CisgICAgICAgIH0KKworICAgICAgICAvLyBUaGlz
IGlzIHVzZWQgZm9yIGlubGluZSBtZXNzYWdlIGJ1YmJsZXMgaW4gU291cmNlRnJhbWVzLCBvciBv
dGhlciBwbGFpbi10ZXh0IHJlcHJlc2VudGF0aW9ucy4KKyAgICAgICAgdGhpcy5fbWVzc2FnZSA9
IG1lc3NhZ2VUZXh0LnRleHRDb250ZW50OworICAgIH0sCisKKyAgICBfc2hvdWxkRHVtcFN0YWNr
VHJhY2U6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiAhIXRoaXMuX3N0YWNrVHJh
Y2UgJiYgdGhpcy5fc3RhY2tUcmFjZS5sZW5ndGggJiYgKHRoaXMuc291cmNlID09PSBXZWJJbnNw
ZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVNvdXJjZS5OZXR3b3JrIHx8IHRoaXMubGV2ZWwg
PT09IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuRXJyb3IgfHwgdGhp
cy50eXBlID09PSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuVHJhY2Up
OworICAgIH0sCisKKyAgICBfc2hvdWxkSGlkZVVSTDogZnVuY3Rpb24odXJsKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHVybCA9PT0gInVuZGVmaW5lZCIgfHwgdXJsID09PSAiW25hdGl2ZSBjb2Rl
XSI7CisgICAgfSwKKworICAgIF9maXJzdE5vbk5hdGl2ZUNhbGxGcmFtZTogZnVuY3Rpb24oKQor
ICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl9zdGFja1RyYWNlKQorICAgICAgICAgICAgcmV0dXJu
IG51bGw7CisKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zdGFja1RyYWNlLmxl
bmd0aDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgZnJhbWUgPSB0aGlzLl9zdGFja1RyYWNlW2ld
OworICAgICAgICAgICAgaWYgKCFmcmFtZS51cmwgfHwgZnJhbWUudXJsID09PSAiW25hdGl2ZSBj
b2RlXSIpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICByZXR1cm4gZnJh
bWU7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9LAorCisgICAgZ2V0
IG1lc3NhZ2UoKQorICAgIHsKKyAgICAgICAgLy8gZm9yY2UgbWVzc2FnZSBmb3JtYXR0aW5nCisg
ICAgICAgIHZhciBmb3JtYXR0ZWRNZXNzYWdlID0gdGhpcy5mb3JtYXR0ZWRNZXNzYWdlOworICAg
ICAgICByZXR1cm4gdGhpcy5fbWVzc2FnZTsKKyAgICB9LAorCisgICAgZ2V0IGZvcm1hdHRlZE1l
c3NhZ2UoKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl9mb3JtYXR0ZWRNZXNzYWdlKQorICAg
ICAgICAgICAgdGhpcy5fZm9ybWF0TWVzc2FnZSgpOworICAgICAgICByZXR1cm4gdGhpcy5fZm9y
bWF0dGVkTWVzc2FnZTsKKyAgICB9LAorCisgICAgX2xpbmtpZnlMb2NhdGlvbjogZnVuY3Rpb24o
dXJsLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpCisgICAgeworICAgICAgICAvLyBDb25zb2xl
TWVzc2FnZSBzdGFjayB0cmFjZSBsaW5lIG51bWJlcnMgYXJlIG9uZS1iYXNlZC4KKyAgICAgICAg
bGluZU51bWJlciA9IGxpbmVOdW1iZXIgPyBsaW5lTnVtYmVyIC0gMSA6IDA7CisKKyAgICAgICAg
cmV0dXJuIFdlYkluc3BlY3Rvci5saW5raWZ5TG9jYXRpb24odXJsLCBsaW5lTnVtYmVyLCBjb2x1
bW5OdW1iZXIsICJjb25zb2xlLW1lc3NhZ2UtdXJsIik7CisgICAgfSwKKworICAgIF9saW5raWZ5
Q2FsbEZyYW1lOiBmdW5jdGlvbihjYWxsRnJhbWUpCisgICAgeworICAgICAgICByZXR1cm4gdGhp
cy5fbGlua2lmeUxvY2F0aW9uKGNhbGxGcmFtZS51cmwsIGNhbGxGcmFtZS5saW5lTnVtYmVyLCBj
YWxsRnJhbWUuY29sdW1uTnVtYmVyKTsKKyAgICB9LAorCisgICAgaXNFcnJvck9yV2FybmluZzog
ZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuICh0aGlzLmxldmVsID09PSBXZWJJbnNw
ZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLldhcm5pbmcgfHwgdGhpcy5sZXZlbCA9
PT0gV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5FcnJvcik7CisgICAg
fSwKKworICAgIF9mb3JtYXQ6IGZ1bmN0aW9uKHBhcmFtZXRlcnMpCisgICAgeworICAgICAgICAv
LyBUaGlzIG5vZGUgaXMgdXNlZCBsaWtlIGEgQnVpbGRlci4gVmFsdWVzIGFyZSBjb250aW51YWxs
eSBhcHBlbmRlZCBvbnRvIGl0LgorICAgICAgICB2YXIgZm9ybWF0dGVkUmVzdWx0ID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOworICAgICAgICBpZiAoIXBhcmFtZXRlcnMubGVuZ3Ro
KQorICAgICAgICAgICAgcmV0dXJuIGZvcm1hdHRlZFJlc3VsdDsKKworICAgICAgICAvLyBGb3Jt
YXR0aW5nIGNvZGUgYmVsb3cgYXNzdW1lcyB0aGF0IHBhcmFtZXRlcnMgYXJlIGFsbCB3cmFwcGVy
cyB3aGVyZWFzIGZyb250ZW5kIGNvbnNvbGUKKyAgICAgICAgLy8gQVBJIGFsbG93cyBwYXNzaW5n
IGFyYml0cmFyeSB2YWx1ZXMgYXMgbWVzc2FnZXMgKHN0cmluZ3MsIG51bWJlcnMsIGV0Yy4pLiBX
cmFwIHRoZW0gaGVyZS4KKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLmxl
bmd0aDsgKytpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogT25seSBwYXNzIHJ1bnRpbWUgd3Jh
cHBlcnMgaGVyZS4KKyAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJzW2ldIGluc3RhbmNlb2YgV2Vi
SW5zcGVjdG9yLlJlbW90ZU9iamVjdCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAg
ICAgICAgICAgaWYgKHR5cGVvZiBwYXJhbWV0ZXJzW2ldID09PSAib2JqZWN0IikKKyAgICAgICAg
ICAgICAgICBwYXJhbWV0ZXJzW2ldID0gV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdC5mcm9tUGF5
bG9hZChwYXJhbWV0ZXJzW2ldKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBw
YXJhbWV0ZXJzW2ldID0gV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdC5mcm9tUHJpbWl0aXZlVmFs
dWUocGFyYW1ldGVyc1tpXSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBUaGVyZSBjYW4gYmUg
c3RyaW5nIGxvZyBhbmQgc3RyaW5nIGV2YWwgcmVzdWx0LiBXZSBkaXN0aW5ndWlzaCBiZXR3ZWVu
IHRoZW0gYmFzZWQgb24gbWVzc2FnZSB0eXBlLgorICAgICAgICB2YXIgc2hvdWxkRm9ybWF0TWVz
c2FnZSA9IFdlYkluc3BlY3Rvci5SZW1vdGVPYmplY3QudHlwZShwYXJhbWV0ZXJzWzBdKSA9PT0g
InN0cmluZyIgJiYgdGhpcy50eXBlICE9PSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVz
c2FnZVR5cGUuUmVzdWx0OworCisgICAgICAgIGlmIChzaG91bGRGb3JtYXRNZXNzYWdlKSB7Cisg
ICAgICAgICAgICAvLyBNdWx0aXBsZSBwYXJhbWV0ZXJzIHdpdGggdGhlIGZpcnN0IGJlaW5nIGEg
Zm9ybWF0IHN0cmluZy4gU2F2ZSB1bnVzZWQgc3Vic3RpdHV0aW9ucy4KKyAgICAgICAgICAgIHZh
ciByZXN1bHQgPSB0aGlzLl9mb3JtYXRXaXRoU3Vic3RpdHV0aW9uU3RyaW5nKHBhcmFtZXRlcnMs
IGZvcm1hdHRlZFJlc3VsdCk7CisgICAgICAgICAgICBwYXJhbWV0ZXJzID0gcmVzdWx0LnVudXNl
ZFN1YnN0aXR1dGlvbnM7CisgICAgICAgICAgICBpZiAocGFyYW1ldGVycy5sZW5ndGgpCisgICAg
ICAgICAgICAgICAgZm9ybWF0dGVkUmVzdWx0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRl
eHROb2RlKCIgIikpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gV2Vi
SW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLlRhYmxlKSB7CisgICAgICAgICAg
ICBmb3JtYXR0ZWRSZXN1bHQuYXBwZW5kQ2hpbGQodGhpcy5fZm9ybWF0UGFyYW1ldGVyQXNUYWJs
ZShwYXJhbWV0ZXJzKSk7CisgICAgICAgICAgICByZXR1cm4gZm9ybWF0dGVkUmVzdWx0OworICAg
ICAgICB9CisKKyAgICAgICAgLy8gU2luZ2xlIHBhcmFtZXRlciwgb3IgdW51c2VkIHN1YnN0aXR1
dGlvbnMgZnJvbSBhYm92ZS4KKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJhbWV0ZXJz
Lmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAvLyBJbmxpbmUgc3RyaW5ncyB3aGVuIGZvcm1h
dHRpbmcuCisgICAgICAgICAgICBpZiAoc2hvdWxkRm9ybWF0TWVzc2FnZSAmJiBwYXJhbWV0ZXJz
W2ldLnR5cGUgPT09ICJzdHJpbmciKSB7CisgICAgICAgICAgICAgICAgdmFyIHNwYW4gPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisgICAgICAgICAgICAgICAgc3Bhbi5jbGFzc0xp
c3QuYWRkKCJ0eXBlLXN0cmluZyIpOworICAgICAgICAgICAgICAgIHNwYW4udGV4dENvbnRlbnQg
PSBwYXJhbWV0ZXJzW2ldLmRlc2NyaXB0aW9uOworICAgICAgICAgICAgICAgIGZvcm1hdHRlZFJl
c3VsdC5hcHBlbmRDaGlsZChzcGFuKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
ICAgIGZvcm1hdHRlZFJlc3VsdC5hcHBlbmRDaGlsZCh0aGlzLl9mb3JtYXRQYXJhbWV0ZXIocGFy
YW1ldGVyc1tpXSwgZmFsc2UpKTsKKworICAgICAgICAgICAgaWYgKGkgPCBwYXJhbWV0ZXJzLmxl
bmd0aCAtIDEgJiYgIXRoaXMuX2lzRXhwYW5kYWJsZShwYXJhbWV0ZXJzW2ldKSkKKyAgICAgICAg
ICAgICAgICBmb3JtYXR0ZWRSZXN1bHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5v
ZGUoIiAiKSk7CisKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZm9ybWF0dGVkUmVzdWx0Owor
ICAgIH0sCisKKyAgICBfaXNFeHBhbmRhYmxlOiBmdW5jdGlvbihyZW1vdGVPYmplY3QpIHsKKyAg
ICAgICAgaWYgKCFyZW1vdGVPYmplY3QpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgaWYgKHJlbW90ZU9iamVjdC5oYXNDaGlsZHJlbiAmJiByZW1vdGVPYmplY3QucHJldmll
dyAmJiByZW1vdGVPYmplY3QucHJldmlldy5sb3NzbGVzcykKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICByZXR1cm4gcmVtb3RlT2JqZWN0Lmhhc0NoaWxkcmVuOworICAgIH0s
CisKKyAgICBfZm9ybWF0UGFyYW1ldGVyOiBmdW5jdGlvbihvdXRwdXQsIGZvcmNlT2JqZWN0Rm9y
bWF0KQorICAgIHsKKyAgICAgICAgdmFyIHR5cGU7CisgICAgICAgIGlmIChmb3JjZU9iamVjdEZv
cm1hdCkKKyAgICAgICAgICAgIHR5cGUgPSAib2JqZWN0IjsKKyAgICAgICAgZWxzZSBpZiAob3V0
cHV0IGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdCkKKyAgICAgICAgICAgIHR5
cGUgPSBvdXRwdXQuc3VidHlwZSB8fCBvdXRwdXQudHlwZTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgdHlwZSA9IHR5cGVvZiBvdXRwdXQ7CisKKyAgICAgICAgdmFyIGZvcm1hdHRlciA9IHRo
aXMuX2N1c3RvbUZvcm1hdHRlcnNbdHlwZV07CisgICAgICAgIGlmICghZm9ybWF0dGVyKQorICAg
ICAgICAgICAgZm9ybWF0dGVyID0gdGhpcy5fZm9ybWF0UGFyYW1ldGVyQXNWYWx1ZTsKKworICAg
ICAgICB2YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKworICAgICAg
ICBpZiAodGhpcy5faXNFeHBhbmRhYmxlKG91dHB1dCkpCisgICAgICAgICAgICBzcGFuLmNsYXNz
TGlzdC5hZGQoImV4cGFuZGFibGUiKTsKKworICAgICAgICBmb3JtYXR0ZXIuY2FsbCh0aGlzLCBv
dXRwdXQsIHNwYW4sIGZvcmNlT2JqZWN0Rm9ybWF0KTsKKyAgICAgICAgcmV0dXJuIHNwYW47Cisg
ICAgfSwKKworICAgIF9mb3JtYXRQYXJhbWV0ZXJBc1ZhbHVlOiBmdW5jdGlvbih2YWx1ZSwgZWxl
bSkKKyAgICB7CisgICAgICAgIGVsZW0uYXBwZW5kQ2hpbGQoV2ViSW5zcGVjdG9yLkZvcm1hdHRl
ZFZhbHVlLmNyZWF0ZUVsZW1lbnRGb3JSZW1vdGVPYmplY3QodmFsdWUpKTsKKyAgICB9LAorCisg
ICAgX2Zvcm1hdFBhcmFtZXRlckFzT2JqZWN0OiBmdW5jdGlvbihvYmosIGVsZW0sIGZvcmNlRXhw
YW5zaW9uKQorICAgIHsKKyAgICAgICAgdGhpcy5fb2JqZWN0VHJlZSA9IG5ldyBXZWJJbnNwZWN0
b3IuT2JqZWN0VHJlZVZpZXcob2JqLCBXZWJJbnNwZWN0b3IuT2JqZWN0VHJlZVZpZXcuTW9kZS5Q
cm9wZXJ0aWVzLCB0aGlzLl9yb290UHJvcGVydHlQYXRoRm9yT2JqZWN0KG9iaiksIGZvcmNlRXhw
YW5zaW9uKTsKKyAgICAgICAgZWxlbS5hcHBlbmRDaGlsZCh0aGlzLl9vYmplY3RUcmVlLmVsZW1l
bnQpOworICAgIH0sCisKKyAgICBfZm9ybWF0UGFyYW1ldGVyQXNTdHJpbmc6IGZ1bmN0aW9uKG91
dHB1dCwgZWxlbSkKKyAgICB7CisgICAgICAgIHZhciBzcGFuID0gV2ViSW5zcGVjdG9yLkZvcm1h
dHRlZFZhbHVlLmNyZWF0ZUxpbmtpZmllZEVsZW1lbnRTdHJpbmcob3V0cHV0LmRlc2NyaXB0aW9u
KTsKKyAgICAgICAgZWxlbS5hcHBlbmRDaGlsZChzcGFuKTsKKyAgICB9LAorCisgICAgX2Zvcm1h
dFBhcmFtZXRlckFzTm9kZTogZnVuY3Rpb24ob2JqZWN0LCBlbGVtKQorICAgIHsKKyAgICAgICAg
dmFyIHNwYW4gPSBXZWJJbnNwZWN0b3IuRm9ybWF0dGVkVmFsdWUuY3JlYXRlRWxlbWVudEZvck5v
ZGUob2JqZWN0KTsKKyAgICAgICAgZWxlbS5hcHBlbmRDaGlsZChzcGFuKTsKKyAgICB9LAorCisg
ICAgX2Zvcm1hdFBhcmFtZXRlckFzQXJyYXk6IGZ1bmN0aW9uKGFyciwgZWxlbSkKKyAgICB7Cisg
ICAgICAgIHRoaXMuX29iamVjdFRyZWUgPSBuZXcgV2ViSW5zcGVjdG9yLk9iamVjdFRyZWVWaWV3
KGFyciwgV2ViSW5zcGVjdG9yLk9iamVjdFRyZWVWaWV3Lk1vZGUuUHJvcGVydGllcywgdGhpcy5f
cm9vdFByb3BlcnR5UGF0aEZvck9iamVjdChhcnIpKTsKKyAgICAgICAgZWxlbS5hcHBlbmRDaGls
ZCh0aGlzLl9vYmplY3RUcmVlLmVsZW1lbnQpOworICAgIH0sCisKKyAgICBfcm9vdFByb3BlcnR5
UGF0aEZvck9iamVjdDogZnVuY3Rpb24ob2JqZWN0KQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlz
LnNhdmVkUmVzdWx0SW5kZXgpCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKworICAgICAgICBy
ZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5Qcm9wZXJ0eVBhdGgob2JqZWN0LCAiJCIgKyB0aGlzLnNh
dmVkUmVzdWx0SW5kZXgpOworICAgIH0sCisKKyAgICBfdXNlclByb3ZpZGVkQ29sdW1uTmFtZXM6
IGZ1bmN0aW9uKGNvbHVtbk5hbWVzQXJndW1lbnQpCisgICAgeworICAgICAgICBpZiAoIWNvbHVt
bk5hbWVzQXJndW1lbnQpCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKworICAgICAgICB2YXIg
cmVtb3RlT2JqZWN0ID0gV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdC5mcm9tUGF5bG9hZChjb2x1
bW5OYW1lc0FyZ3VtZW50KTsKKworICAgICAgICAvLyBTaW5nbGUgcHJpbWl0aXZlIGFyZ3VtZW50
LgorICAgICAgICBpZiAocmVtb3RlT2JqZWN0LnR5cGUgPT09ICJzdHJpbmciIHx8IHJlbW90ZU9i
amVjdC50eXBlID09PSAibnVtYmVyIikKKyAgICAgICAgICAgIHJldHVybiBbU3RyaW5nKGNvbHVt
bk5hbWVzQXJndW1lbnQudmFsdWUpXTsKKworICAgICAgICAvLyBJZ25vcmUgZXZlcnl0aGluZyB0
aGF0IGlzIG5vdCBhbiBhcnJheSB3aXRoIHByb3BlcnR5IHByZXZpZXdzLgorICAgICAgICBpZiAo
cmVtb3RlT2JqZWN0LnR5cGUgIT09ICJvYmplY3QiIHx8IHJlbW90ZU9iamVjdC5zdWJ0eXBlICE9
PSAiYXJyYXkiIHx8ICFyZW1vdGVPYmplY3QucHJldmlldyB8fCAhcmVtb3RlT2JqZWN0LnByZXZp
ZXcucHJvcGVydHlQcmV2aWV3cykKKyAgICAgICAgICAgIHJldHVybiBudWxsOworCisgICAgICAg
IC8vIEFycmF5LiBMb29rIGludG8gdGhlIHByZXZpZXcgYW5kIGdldCBzdHJpbmcgdmFsdWVzLgor
ICAgICAgICB2YXIgZXh0cmFjdGVkQ29sdW1uTmFtZXMgPSBbXTsKKyAgICAgICAgZm9yICh2YXIg
cHJvcGVydHlQcmV2aWV3IG9mIHJlbW90ZU9iamVjdC5wcmV2aWV3LnByb3BlcnR5UHJldmlld3Mp
IHsKKyAgICAgICAgICAgIGlmIChwcm9wZXJ0eVByZXZpZXcudHlwZSA9PT0gInN0cmluZyIgfHwg
cHJvcGVydHlQcmV2aWV3LnR5cGUgPT09ICJudW1iZXIiKQorICAgICAgICAgICAgICAgIGV4dHJh
Y3RlZENvbHVtbk5hbWVzLnB1c2goU3RyaW5nKHByb3BlcnR5UHJldmlldy52YWx1ZSkpOworICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIGV4dHJhY3RlZENvbHVtbk5hbWVzLmxlbmd0aCA/IGV4
dHJhY3RlZENvbHVtbk5hbWVzIDogbnVsbDsKKyAgICB9LAorCisgICAgX2Zvcm1hdFBhcmFtZXRl
ckFzVGFibGU6IGZ1bmN0aW9uKHBhcmFtZXRlcnMpCisgICAgeworICAgICAgICB2YXIgZWxlbWVu
dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICAgICAgdmFyIHRhYmxlID0g
cGFyYW1ldGVyc1swXTsKKyAgICAgICAgaWYgKCF0YWJsZSB8fCAhdGFibGUucHJldmlldykKKyAg
ICAgICAgICAgIHJldHVybiBlbGVtZW50OworCisgICAgICAgIHZhciByb3dzID0gW107CisgICAg
ICAgIHZhciBjb2x1bW5OYW1lcyA9IFtdOworICAgICAgICB2YXIgZmxhdFZhbHVlcyA9IFtdOwor
ICAgICAgICB2YXIgcHJldmlldyA9IHRhYmxlLnByZXZpZXc7CisgICAgICAgIHZhciB1c2VyUHJv
dmlkZWRDb2x1bW5OYW1lcyA9IGZhbHNlOworCisgICAgICAgIC8vIFVzZXIgcHJvdmlkZWQgY29s
dW1uTmFtZXMuCisgICAgICAgIHZhciBleHRyYWN0ZWRDb2x1bW5OYW1lcyA9IHRoaXMuX3VzZXJQ
cm92aWRlZENvbHVtbk5hbWVzKHBhcmFtZXRlcnNbMV0pOworICAgICAgICBpZiAoZXh0cmFjdGVk
Q29sdW1uTmFtZXMpIHsKKyAgICAgICAgICAgIHVzZXJQcm92aWRlZENvbHVtbk5hbWVzID0gdHJ1
ZTsKKyAgICAgICAgICAgIGNvbHVtbk5hbWVzID0gZXh0cmFjdGVkQ29sdW1uTmFtZXM7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBDaGVjayBmaXJzdCBmb3IgdmFsdWVQcmV2aWV3cyBpbiB0aGUg
cHJvcGVydGllcyBtZWFuaW5nIHRoaXMgd2FzIGFuIGFycmF5IG9mIG9iamVjdHMuCisgICAgICAg
IGlmIChwcmV2aWV3LnByb3BlcnR5UHJldmlld3MpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgcHJldmlldy5wcm9wZXJ0eVByZXZpZXdzLmxlbmd0aDsgKytpKSB7CisgICAgICAg
ICAgICAgICAgdmFyIHJvd1Byb3BlcnR5ID0gcHJldmlldy5wcm9wZXJ0eVByZXZpZXdzW2ldOwor
ICAgICAgICAgICAgICAgIHZhciByb3dQcmV2aWV3ID0gcm93UHJvcGVydHkudmFsdWVQcmV2aWV3
OworICAgICAgICAgICAgICAgIGlmICghcm93UHJldmlldykKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgICAgICAgICB2YXIgcm93VmFsdWUgPSB7fTsKKyAgICAgICAg
ICAgICAgICBjb25zdCBtYXhDb2x1bW5zVG9SZW5kZXIgPSAxMDsKKyAgICAgICAgICAgICAgICBm
b3IgKHZhciBqID0gMDsgaiA8IHJvd1ByZXZpZXcucHJvcGVydHlQcmV2aWV3cy5sZW5ndGg7ICsr
aikgeworICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbFByb3BlcnR5ID0gcm93UHJldmlldy5w
cm9wZXJ0eVByZXZpZXdzW2pdOworICAgICAgICAgICAgICAgICAgICB2YXIgY29sdW1uUmVuZGVy
ZWQgPSBjb2x1bW5OYW1lcy5jb250YWlucyhjZWxsUHJvcGVydHkubmFtZSk7CisgICAgICAgICAg
ICAgICAgICAgIGlmICghY29sdW1uUmVuZGVyZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmICh1c2VyUHJvdmlkZWRDb2x1bW5OYW1lcyB8fCBjb2x1bW5OYW1lcy5sZW5ndGggPT09IG1h
eENvbHVtbnNUb1JlbmRlcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtblJlbmRlcmVkID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbHVtbk5hbWVzLnB1c2goY2VsbFByb3BlcnR5Lm5hbWUpOworICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgcm93VmFsdWVbY2VsbFBy
b3BlcnR5Lm5hbWVdID0gV2ViSW5zcGVjdG9yLkZvcm1hdHRlZFZhbHVlLmNyZWF0ZUVsZW1lbnRG
b3JQcm9wZXJ0eVByZXZpZXcoY2VsbFByb3BlcnR5KTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgcm93cy5wdXNoKFtyb3dQcm9wZXJ0eS5uYW1lLCByb3dWYWx1ZV0pOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgdGhlcmUgd2VyZSB2YWx1ZVBy
ZXZpZXdzLCBjb252ZXJ0IHRvIGEgZmxhdCBsaXN0LgorICAgICAgICBpZiAocm93cy5sZW5ndGgp
IHsKKyAgICAgICAgICAgIGNvbnN0IGVtRGFzaCA9ICJcdTIwMTQiOworICAgICAgICAgICAgY29s
dW1uTmFtZXMudW5zaGlmdChXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIihJbmRleCkiKSk7CisgICAg
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyArK2kpIHsKKyAgICAgICAg
ICAgICAgICB2YXIgcm93TmFtZSA9IHJvd3NbaV1bMF07CisgICAgICAgICAgICAgICAgdmFyIHJv
d1ZhbHVlID0gcm93c1tpXVsxXTsKKyAgICAgICAgICAgICAgICBmbGF0VmFsdWVzLnB1c2gocm93
TmFtZSk7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCBjb2x1bW5OYW1lcy5s
ZW5ndGg7ICsraikgeworICAgICAgICAgICAgICAgICAgICB2YXIgY29sdW1uTmFtZSA9IGNvbHVt
bk5hbWVzW2pdOworICAgICAgICAgICAgICAgICAgICBpZiAoIShjb2x1bW5OYW1lIGluIHJvd1Zh
bHVlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZsYXRWYWx1ZXMucHVzaChlbURhc2gpOwor
ICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBmbGF0VmFs
dWVzLnB1c2gocm93VmFsdWVbY29sdW1uTmFtZV0pOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHRoZXJlIHdlcmUgbm8gdmFsdWUg
UHJldmlld3MsIHRoZW4gY2hlY2sgZm9yIGFuIGFycmF5IG9mIHZhbHVlcy4KKyAgICAgICAgaWYg
KCFmbGF0VmFsdWVzLmxlbmd0aCAmJiBwcmV2aWV3LnByb3BlcnR5UHJldmlld3MpIHsKKyAgICAg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJldmlldy5wcm9wZXJ0eVByZXZpZXdzLmxlbmd0
aDsgKytpKSB7CisgICAgICAgICAgICAgICAgdmFyIHJvd1Byb3BlcnR5ID0gcHJldmlldy5wcm9w
ZXJ0eVByZXZpZXdzW2ldOworICAgICAgICAgICAgICAgIGlmICghKCJ2YWx1ZSIgaW4gcm93UHJv
cGVydHkpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAg
IGlmICghY29sdW1uTmFtZXMubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbHVtbk5h
bWVzLnB1c2goV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJJbmRleCIpKTsKKyAgICAgICAgICAgICAg
ICAgICAgY29sdW1uTmFtZXMucHVzaChXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlZhbHVlIikpOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGZsYXRWYWx1ZXMucHVzaChyb3dQ
cm9wZXJ0eS5uYW1lKTsKKyAgICAgICAgICAgICAgICBmbGF0VmFsdWVzLnB1c2goV2ViSW5zcGVj
dG9yLkZvcm1hdHRlZFZhbHVlLmNyZWF0ZUVsZW1lbnRGb3JQcm9wZXJ0eVByZXZpZXcocm93UHJv
cGVydHkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIGxvc3Ns
ZXNzIG9yIG5vdCB0YWJsZSBkYXRhLCBvdXRwdXQgdGhlIG9iamVjdCBzbyBmdWxsIGRhdGEgY2Fu
IGJlIGdvdHRlbi4KKyAgICAgICAgaWYgKCFwcmV2aWV3Lmxvc3NsZXNzIHx8ICFmbGF0VmFsdWVz
Lmxlbmd0aCkgeworICAgICAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9mb3JtYXRQ
YXJhbWV0ZXIodGFibGUpKTsKKyAgICAgICAgICAgIGlmICghZmxhdFZhbHVlcy5sZW5ndGgpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgICAgIH0KKworICAgICAgICB2YXIg
ZGF0YUdyaWRDb250YWluZXIgPSBlbGVtZW50LmNyZWF0ZUNoaWxkKCJzcGFuIik7CisgICAgICAg
IHZhciBkYXRhR3JpZCA9IFdlYkluc3BlY3Rvci5EYXRhR3JpZC5jcmVhdGVTb3J0YWJsZURhdGFH
cmlkKGNvbHVtbk5hbWVzLCBmbGF0VmFsdWVzKTsKKyAgICAgICAgZGF0YUdyaWQuZWxlbWVudC5j
bGFzc0xpc3QuYWRkKCJpbmxpbmUiKTsKKyAgICAgICAgZGF0YUdyaWRDb250YWluZXIuYXBwZW5k
Q2hpbGQoZGF0YUdyaWQuZWxlbWVudCk7CisKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAg
fSwKKworICAgIF9mb3JtYXRXaXRoU3Vic3RpdHV0aW9uU3RyaW5nOiBmdW5jdGlvbihwYXJhbWV0
ZXJzLCBmb3JtYXR0ZWRSZXN1bHQpCisgICAgeworICAgICAgICB2YXIgZm9ybWF0dGVycyA9IHt9
OworCisgICAgICAgIGZ1bmN0aW9uIHBhcmFtZXRlckZvcm1hdHRlcihmb3JjZSwgb2JqKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9ybWF0UGFyYW1ldGVyKG9iaiwgZm9y
Y2UpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gc3RyaW5nRm9ybWF0dGVyKG9iaikK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG9iai5kZXNjcmlwdGlvbjsKKyAgICAgICAg
fQorCisgICAgICAgIGZ1bmN0aW9uIGZsb2F0Rm9ybWF0dGVyKG9iaikKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKHR5cGVvZiBvYmoudmFsdWUgIT09ICJudW1iZXIiKQorICAgICAgICAgICAg
ICAgIHJldHVybiBwYXJzZUZsb2F0KG9iai5kZXNjcmlwdGlvbik7CisgICAgICAgICAgICByZXR1
cm4gb2JqLnZhbHVlOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gaW50ZWdlckZvcm1h
dHRlcihvYmopCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqLnZhbHVlICE9
PSAibnVtYmVyIikKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQob2JqLmRlc2NyaXB0
aW9uKTsKKyAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKG9iai52YWx1ZSk7CisgICAgICAg
IH0KKworICAgICAgICB2YXIgY3VycmVudFN0eWxlID0gbnVsbDsKKyAgICAgICAgZnVuY3Rpb24g
c3R5bGVGb3JtYXR0ZXIob2JqKQorICAgICAgICB7CisgICAgICAgICAgICBjdXJyZW50U3R5bGUg
PSB7fTsKKyAgICAgICAgICAgIHZhciBidWZmZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJz
cGFuIik7CisgICAgICAgICAgICBidWZmZXIuc2V0QXR0cmlidXRlKCJzdHlsZSIsIG9iai5kZXNj
cmlwdGlvbik7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ1ZmZlci5zdHlsZS5s
ZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIHZhciBwcm9wZXJ0eSA9IGJ1ZmZlci5zdHls
ZVtpXTsKKyAgICAgICAgICAgICAgICBpZiAoaXNXaGl0ZWxpc3RlZFByb3BlcnR5KHByb3BlcnR5
KSkKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFN0eWxlW3Byb3BlcnR5XSA9IGJ1ZmZlci5z
dHlsZVtwcm9wZXJ0eV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmdW5j
dGlvbiBpc1doaXRlbGlzdGVkUHJvcGVydHkocHJvcGVydHkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHZhciBwcmVmaXhlcyA9IFsiYmFja2dyb3VuZCIsICJib3JkZXIiLCAiY29sb3IiLCAiZm9u
dCIsICJsaW5lIiwgIm1hcmdpbiIsICJwYWRkaW5nIiwgInRleHQiLCAiLXdlYmtpdC1iYWNrZ3Jv
dW5kIiwgIi13ZWJraXQtYm9yZGVyIiwgIi13ZWJraXQtZm9udCIsICItd2Via2l0LW1hcmdpbiIs
ICItd2Via2l0LXBhZGRpbmciLCAiLXdlYmtpdC10ZXh0Il07CisgICAgICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IHByZWZpeGVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYg
KHByb3BlcnR5LnN0YXJ0c1dpdGgocHJlZml4ZXNbaV0pKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIEZpcmVidWcgdXNlcyAlbyBmb3IgZm9ybWF0dGluZyBvYmpl
Y3RzLgorICAgICAgICBmb3JtYXR0ZXJzLm8gPSBwYXJhbWV0ZXJGb3JtYXR0ZXIuYmluZCh0aGlz
LCBmYWxzZSk7CisgICAgICAgIGZvcm1hdHRlcnMucyA9IHN0cmluZ0Zvcm1hdHRlcjsKKyAgICAg
ICAgZm9ybWF0dGVycy5mID0gZmxvYXRGb3JtYXR0ZXI7CisKKyAgICAgICAgLy8gRmlyZWJ1ZyBh
bGxvd3MgYm90aCAlaSBhbmQgJWQgZm9yIGZvcm1hdHRpbmcgaW50ZWdlcnMuCisgICAgICAgIGZv
cm1hdHRlcnMuaSA9IGludGVnZXJGb3JtYXR0ZXI7CisgICAgICAgIGZvcm1hdHRlcnMuZCA9IGlu
dGVnZXJGb3JtYXR0ZXI7CisKKyAgICAgICAgLy8gRmlyZWJ1ZyB1c2VzICVjIGZvciBzdHlsaW5n
IHRoZSBtZXNzYWdlLgorICAgICAgICBmb3JtYXR0ZXJzLmMgPSBzdHlsZUZvcm1hdHRlcjsKKwor
ICAgICAgICAvLyBTdXBwb3J0ICVPIHRvIGZvcmNlIG9iamVjdCBmb3JtYXR0aW5nLCBpbnN0ZWFk
IG9mIHRoZSB0eXBlLWJhc2VkICVvIGZvcm1hdHRpbmcuCisgICAgICAgIGZvcm1hdHRlcnMuTyA9
IHBhcmFtZXRlckZvcm1hdHRlci5iaW5kKHRoaXMsIHRydWUpOworCisgICAgICAgIGZ1bmN0aW9u
IGFwcGVuZChhLCBiKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoYiBpbnN0YW5jZW9mIE5v
ZGUpCisgICAgICAgICAgICAgICAgYS5hcHBlbmRDaGlsZChiKTsKKyAgICAgICAgICAgIGVsc2Ug
aWYgKGIpIHsKKyAgICAgICAgICAgICAgICB2YXIgdG9BcHBlbmQgPSBXZWJJbnNwZWN0b3IubGlu
a2lmeVN0cmluZ0FzRnJhZ21lbnQoYi50b1N0cmluZygpKTsKKyAgICAgICAgICAgICAgICBpZiAo
Y3VycmVudFN0eWxlKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciB3cmFwcGVyID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOworICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBr
ZXkgaW4gY3VycmVudFN0eWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlci5zdHls
ZVtrZXldID0gY3VycmVudFN0eWxlW2tleV07CisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXIu
YXBwZW5kQ2hpbGQodG9BcHBlbmQpOworICAgICAgICAgICAgICAgICAgICB0b0FwcGVuZCA9IHdy
YXBwZXI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHZhciBzcGFuID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOworICAgICAgICAgICAgICAgIHNwYW4uY2xhc3NO
YW1lID0gInR5cGUtc3RyaW5nIjsKKyAgICAgICAgICAgICAgICBzcGFuLmFwcGVuZENoaWxkKHRv
QXBwZW5kKTsKKyAgICAgICAgICAgICAgICBhLmFwcGVuZENoaWxkKHNwYW4pOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIGE7CisgICAgICAgIH0KKworICAgICAgICAvLyBTdHJp
bmcuZm9ybWF0IGRvZXMgdHJlYXQgZm9ybWF0dGVkUmVzdWx0IGxpa2UgYSBCdWlsZGVyLCByZXN1
bHQgaXMgYW4gb2JqZWN0LgorICAgICAgICByZXR1cm4gU3RyaW5nLmZvcm1hdChwYXJhbWV0ZXJz
WzBdLmRlc2NyaXB0aW9uLCBwYXJhbWV0ZXJzLnNsaWNlKDEpLCBmb3JtYXR0ZXJzLCBmb3JtYXR0
ZWRSZXN1bHQsIGFwcGVuZCk7CisgICAgfSwKKworICAgIGRlY29yYXRlTWVzc2FnZUVsZW1lbnQ6
IGZ1bmN0aW9uKGVsZW1lbnQpCisgICAgeworICAgICAgICBpZiAodGhpcy5fZWxlbWVudCkKKyAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9lbGVtZW50OworCisgICAgICAgIGVsZW1lbnQubWVzc2Fn
ZSA9IHRoaXM7CisgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiY29uc29sZS1tZXNzYWdl
Iik7CisKKyAgICAgICAgdGhpcy5fZWxlbWVudCA9IGVsZW1lbnQ7CisKKyAgICAgICAgc3dpdGNo
ICh0aGlzLmxldmVsKSB7CisgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVz
c2FnZS5NZXNzYWdlTGV2ZWwuVGlwOgorICAgICAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0
LmFkZCgiY29uc29sZS10aXAtbGV2ZWwiKTsKKyAgICAgICAgICAgICAgICBlbGVtZW50LnNldEF0
dHJpYnV0ZSgiZGF0YS1sYWJlbHByZWZpeCIsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiVGlwOiAi
KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rv
ci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuTG9nOgorICAgICAgICAgICAgICAgIGVsZW1l
bnQuY2xhc3NMaXN0LmFkZCgiY29uc29sZS1sb2ctbGV2ZWwiKTsKKyAgICAgICAgICAgICAgICBl
bGVtZW50LnNldEF0dHJpYnV0ZSgiZGF0YS1sYWJlbHByZWZpeCIsIFdlYkluc3BlY3Rvci5VSVN0
cmluZygiTG9nOiAiKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuRGVidWc6CisgICAgICAg
ICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjb25zb2xlLWRlYnVnLWxldmVsIik7Cisg
ICAgICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoImRhdGEtbGFiZWxwcmVmaXgiLCBX
ZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkRlYnVnOiAiKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2
ZWwuV2FybmluZzoKKyAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoImNvbnNv
bGUtd2FybmluZy1sZXZlbCIpOworICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRl
KCJkYXRhLWxhYmVscHJlZml4IiwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJXYXJuaW5nOiAiKSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5D
b25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuRXJyb3I6CisgICAgICAgICAgICAgICAgZWxlbWVu
dC5jbGFzc0xpc3QuYWRkKCJjb25zb2xlLWVycm9yLWxldmVsIik7CisgICAgICAgICAgICAgICAg
ZWxlbWVudC5zZXRBdHRyaWJ1dGUoImRhdGEtbGFiZWxwcmVmaXgiLCBXZWJJbnNwZWN0b3IuVUlT
dHJpbmcoIkVycm9yOiAiKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAodGhpcy50eXBlID09PSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVz
c2FnZVR5cGUuU3RhcnRHcm91cCB8fCB0aGlzLnR5cGUgPT09IFdlYkluc3BlY3Rvci5Db25zb2xl
TWVzc2FnZS5NZXNzYWdlVHlwZS5TdGFydEdyb3VwQ29sbGFwc2VkKQorICAgICAgICAgICAgZWxl
bWVudC5jbGFzc0xpc3QuYWRkKCJjb25zb2xlLWdyb3VwLXRpdGxlIik7CisKKyAgICAgICAgZWxl
bWVudC5hcHBlbmRDaGlsZCh0aGlzLmZvcm1hdHRlZE1lc3NhZ2UpOworCisgICAgICAgIGlmICh0
aGlzLnJlcGVhdENvdW50ID4gMSkKKyAgICAgICAgICAgIHRoaXMudXBkYXRlUmVwZWF0Q291bnQo
KTsKKworICAgICAgICByZXR1cm4gZWxlbWVudDsKKyAgICB9LAorCisgICAgdG9NZXNzYWdlRWxl
bWVudDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX2VsZW1lbnQpCisgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fZWxlbWVudDsKKworICAgICAgICB2YXIgZWxlbWVudCA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworCisgICAgICAgIHJldHVybiB0aGlzLmRlY29y
YXRlTWVzc2FnZUVsZW1lbnQoZWxlbWVudCk7CisgICAgfSwKKworICAgIF9wb3B1bGF0ZVN0YWNr
VHJhY2VUcmVlRWxlbWVudDogZnVuY3Rpb24ocGFyZW50VHJlZUVsZW1lbnQpCisgICAgeworICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3N0YWNrVHJhY2UubGVuZ3RoOyBpKyspIHsK
KyAgICAgICAgICAgIHZhciBmcmFtZSA9IHRoaXMuX3N0YWNrVHJhY2VbaV07CisKKyAgICAgICAg
ICAgIHZhciBjb250ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAg
ICAgICB2YXIgbWVzc2FnZVRleHRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3Bh
biIpOworICAgICAgICAgICAgbWVzc2FnZVRleHRFbGVtZW50LmNsYXNzTmFtZSA9ICJjb25zb2xl
LW1lc3NhZ2UtdGV4dCI7CisgICAgICAgICAgICB2YXIgZnVuY3Rpb25OYW1lID0gZnJhbWUuZnVu
Y3Rpb25OYW1lIHx8IFdlYkluc3BlY3Rvci5VSVN0cmluZygiKGFub255bW91cyBmdW5jdGlvbiki
KTsKKyAgICAgICAgICAgIG1lc3NhZ2VUZXh0RWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5j
cmVhdGVUZXh0Tm9kZShmdW5jdGlvbk5hbWUpKTsKKyAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5k
Q2hpbGQobWVzc2FnZVRleHRFbGVtZW50KTsKKworICAgICAgICAgICAgaWYgKGZyYW1lLnVybCAm
JiAhdGhpcy5fc2hvdWxkSGlkZVVSTChmcmFtZS51cmwpKSB7CisgICAgICAgICAgICAgICAgdmFy
IHVybEVsZW1lbnQgPSB0aGlzLl9saW5raWZ5Q2FsbEZyYW1lKGZyYW1lKTsKKyAgICAgICAgICAg
ICAgICBjb250ZW50LmFwcGVuZENoaWxkKHVybEVsZW1lbnQpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICB2YXIgdHJlZUVsZW1lbnQgPSBuZXcgVHJlZUVsZW1lbnQoY29udGVudCk7Cisg
ICAgICAgICAgICBwYXJlbnRUcmVlRWxlbWVudC5hcHBlbmRDaGlsZCh0cmVlRWxlbWVudCk7Cisg
ICAgICAgIH0KKyAgICB9LAorCisgICAgdXBkYXRlUmVwZWF0Q291bnQ6IGZ1bmN0aW9uKCkgewor
ICAgICAgICBpZiAoIXRoaXMucmVwZWF0Q291bnRFbGVtZW50KSB7CisgICAgICAgICAgICB0aGlz
LnJlcGVhdENvdW50RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAg
ICAgICAgICAgIHRoaXMucmVwZWF0Q291bnRFbGVtZW50LmNsYXNzTmFtZSA9ICJidWJibGUiOwor
CisgICAgICAgICAgICB0aGlzLl9lbGVtZW50Lmluc2VydEJlZm9yZSh0aGlzLnJlcGVhdENvdW50
RWxlbWVudCwgdGhpcy5fZWxlbWVudC5maXJzdENoaWxkKTsKKyAgICAgICAgfQorICAgICAgICB0
aGlzLnJlcGVhdENvdW50RWxlbWVudC50ZXh0Q29udGVudCA9IHRoaXMucmVwZWF0Q291bnQ7Cisg
ICAgfSwKKworICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgc291
cmNlU3RyaW5nOworICAgICAgICBzd2l0Y2ggKHRoaXMuc291cmNlKSB7CisgICAgICAgICAgICBj
YXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNlLkhUTUw6CisgICAg
ICAgICAgICAgICAgc291cmNlU3RyaW5nID0gIkhUTUwiOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVNv
dXJjZS5YTUw6CisgICAgICAgICAgICAgICAgc291cmNlU3RyaW5nID0gIlhNTCI7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVz
c2FnZS5NZXNzYWdlU291cmNlLkpTOgorICAgICAgICAgICAgICAgIHNvdXJjZVN0cmluZyA9ICJK
UyI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rv
ci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNlLk5ldHdvcms6CisgICAgICAgICAgICAgICAg
c291cmNlU3RyaW5nID0gIk5ldHdvcmsiOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVNvdXJjZS5Db25z
b2xlQVBJOgorICAgICAgICAgICAgICAgIHNvdXJjZVN0cmluZyA9ICJDb25zb2xlQVBJIjsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNv
bGVNZXNzYWdlLk1lc3NhZ2VTb3VyY2UuT3RoZXI6CisgICAgICAgICAgICAgICAgc291cmNlU3Ry
aW5nID0gIk90aGVyIjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg
ICAgIHZhciB0eXBlU3RyaW5nOworICAgICAgICBzd2l0Y2ggKHRoaXMudHlwZSkgeworICAgICAg
ICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuTG9nOgor
ICAgICAgICAgICAgICAgIHR5cGVTdHJpbmcgPSAiTG9nIjsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VU
eXBlLkRpcjoKKyAgICAgICAgICAgICAgICB0eXBlU3RyaW5nID0gIkRpciI7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2Fn
ZS5NZXNzYWdlVHlwZS5EaXJYTUw6CisgICAgICAgICAgICAgICAgdHlwZVN0cmluZyA9ICJEaXIg
WE1MIjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVj
dG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLlRyYWNlOgorICAgICAgICAgICAgICAgIHR5
cGVTdHJpbmcgPSAiVHJhY2UiOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuU3RhcnRHcm91cENv
bGxhcHNlZDoKKyAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1l
c3NhZ2VUeXBlLlN0YXJ0R3JvdXA6CisgICAgICAgICAgICAgICAgdHlwZVN0cmluZyA9ICJTdGFy
dCBHcm91cCI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdlYklu
c3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5FbmRHcm91cDoKKyAgICAgICAgICAg
ICAgICB0eXBlU3RyaW5nID0gIkVuZCBHcm91cCI7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5B
c3NlcnQ6CisgICAgICAgICAgICAgICAgdHlwZVN0cmluZyA9ICJBc3NlcnQiOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3Nh
Z2UuTWVzc2FnZVR5cGUuUmVzdWx0OgorICAgICAgICAgICAgICAgIHR5cGVTdHJpbmcgPSAiUmVz
dWx0IjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVy
biBzb3VyY2VTdHJpbmcgKyAiICIgKyB0eXBlU3RyaW5nICsgIiAiICsgdGhpcy5sZXZlbFN0cmlu
ZyArICI6ICIgKyB0aGlzLmZvcm1hdHRlZE1lc3NhZ2UudGV4dENvbnRlbnQgKyAiXG4iICsgdGhp
cy51cmwgKyAiIGxpbmUgIiArIHRoaXMubGluZTsKKyAgICB9LAorCisgICAgZ2V0IHRleHQoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX21lc3NhZ2VUZXh0OworICAgIH0sCisKKyAgICBp
c0VxdWFsOiBmdW5jdGlvbihtc2cpCisgICAgeworICAgICAgICBpZiAoIW1zZykKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAodGhpcy5fc3RhY2tUcmFjZSkgeworICAg
ICAgICAgICAgaWYgKCFtc2cuX3N0YWNrVHJhY2UpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgdmFyIGwgPSB0aGlzLl9zdGFja1RyYWNlOworICAgICAgICAgICAg
dmFyIHIgPSBtc2cuX3N0YWNrVHJhY2U7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGwubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAobFtpXS51cmwgIT09IHJbaV0u
dXJsIHx8CisgICAgICAgICAgICAgICAgICAgIGxbaV0uZnVuY3Rpb25OYW1lICE9PSByW2ldLmZ1
bmN0aW9uTmFtZSB8fAorICAgICAgICAgICAgICAgICAgICBsW2ldLmxpbmVOdW1iZXIgIT09IHJb
aV0ubGluZU51bWJlciB8fAorICAgICAgICAgICAgICAgICAgICBsW2ldLmNvbHVtbk51bWJlciAh
PT0gcltpXS5jb2x1bW5OdW1iZXIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAodGhpcy5zb3VyY2Ug
PT09IG1zZy5zb3VyY2UpCisgICAgICAgICAgICAmJiAodGhpcy50eXBlID09PSBtc2cudHlwZSkK
KyAgICAgICAgICAgICYmICh0aGlzLmxldmVsID09PSBtc2cubGV2ZWwpCisgICAgICAgICAgICAm
JiAodGhpcy5saW5lID09PSBtc2cubGluZSkKKyAgICAgICAgICAgICYmICh0aGlzLnVybCA9PT0g
bXNnLnVybCkKKyAgICAgICAgICAgICYmICh0aGlzLm1lc3NhZ2UgPT09IG1zZy5tZXNzYWdlKQor
ICAgICAgICAgICAgJiYgKHRoaXMuX3JlcXVlc3QgPT09IG1zZy5fcmVxdWVzdCk7CisgICAgfSwK
KworICAgIGdldCBzdGFja1RyYWNlKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9zdGFj
a1RyYWNlOworICAgIH0sCisKKyAgICBjbG9uZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5jcmVhdGUodGhpcy5zb3VyY2UsIHRo
aXMubGV2ZWwsIHRoaXMuX21lc3NhZ2VUZXh0LCB0aGlzLnR5cGUsIHRoaXMudXJsLCB0aGlzLmxp
bmUsIHRoaXMuY29sdW1uLCB0aGlzLnJlcGVhdENvdW50LCB0aGlzLl9wYXJhbWV0ZXJzLCB0aGlz
Ll9zdGFja1RyYWNlLCB0aGlzLl9yZXF1ZXN0KTsKKyAgICB9LAorCisgICAgZ2V0IGxldmVsU3Ry
aW5nKCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodGhpcy5sZXZlbCkgeworICAgICAgICAgICAg
Y2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLlRpcDoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gIlRpcCI7CisgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5D
b25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuTG9nOgorICAgICAgICAgICAgICAgIHJldHVybiAi
TG9nIjsKKyAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3Nh
Z2VMZXZlbC5XYXJuaW5nOgorICAgICAgICAgICAgICAgIHJldHVybiAiV2FybmluZyI7CisgICAg
ICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuRGVi
dWc6CisgICAgICAgICAgICAgICAgcmV0dXJuICJEZWJ1ZyI7CisgICAgICAgICAgICBjYXNlIFdl
Ykluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuRXJyb3I6CisgICAgICAgICAg
ICAgICAgcmV0dXJuICJFcnJvciI7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgZ2V0IGNsaXBi
b2FyZFByZWZpeFN0cmluZygpCisgICAgeworICAgICAgICByZXR1cm4gIlsiICsgdGhpcy5sZXZl
bFN0cmluZyArICJdICI7CisgICAgfSwKKworICAgIHRvQ2xpcGJvYXJkU3RyaW5nOiBmdW5jdGlv
bihpc1ByZWZpeE9wdGlvbmFsKQorICAgIHsKKyAgICAgICAgdmFyIGlzVHJhY2UgPSB0aGlzLm1v
ZGVsLnNob3VsZER1bXBTdGFja1RyYWNlKCk7CisKKyAgICAgICAgdmFyIGNsaXBib2FyZFN0cmlu
ZyA9ICIiOworICAgICAgICBpZiAodGhpcy5fZm9ybWF0dGVkTWVzc2FnZSAmJiAhaXNUcmFjZSkK
KyAgICAgICAgICAgIGNsaXBib2FyZFN0cmluZyA9IHRoaXMuX2Zvcm1hdHRlZE1lc3NhZ2UucXVl
cnlTZWxlY3Rvcigic3BhbiIpLmlubmVyVGV4dDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
Y2xpcGJvYXJkU3RyaW5nID0gdGhpcy50eXBlID09PSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3Nh
Z2UuTWVzc2FnZVR5cGUuVHJhY2UgPyAiY29uc29sZS50cmFjZSgpIiA6IHRoaXMuX21lc3NhZ2Ug
fHwgdGhpcy5tb2RlbC5fbWVzc2FnZVRleHQ7CisKKyAgICAgICAgaWYgKCFpc1ByZWZpeE9wdGlv
bmFsIHx8IHRoaXMuZW5mb3JjZXNDbGlwYm9hcmRQcmVmaXhTdHJpbmcpCisgICAgICAgICAgICBj
bGlwYm9hcmRTdHJpbmcgPSB0aGlzLmNsaXBib2FyZFByZWZpeFN0cmluZyArIGNsaXBib2FyZFN0
cmluZzsKKworICAgICAgICBpZiAoaXNUcmFjZSkgeworICAgICAgICAgICAgdGhpcy5fc3RhY2tU
cmFjZS5mb3JFYWNoKGZ1bmN0aW9uKGZyYW1lKSB7CisgICAgICAgICAgICAgICAgY2xpcGJvYXJk
U3RyaW5nICs9ICJcblx0IiArIChmcmFtZS5mdW5jdGlvbk5hbWUgfHwgV2ViSW5zcGVjdG9yLlVJ
U3RyaW5nKCIoYW5vbnltb3VzIGZ1bmN0aW9uKSIpKTsKKyAgICAgICAgICAgICAgICBpZiAoZnJh
bWUudXJsKQorICAgICAgICAgICAgICAgICAgICBjbGlwYm9hcmRTdHJpbmcgKz0gIiAoIiArIFdl
Ykluc3BlY3Rvci5kaXNwbGF5TmFtZUZvclVSTChmcmFtZS51cmwpICsgIiwgbGluZSAiICsgZnJh
bWUubGluZU51bWJlciArICIpIjsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgdmFyIHJlcGVhdFN0cmluZyA9IHRoaXMucmVwZWF0Q291bnQgPiAxID8gIngi
ICsgdGhpcy5yZXBlYXRDb3VudCA6ICIiOworCisgICAgICAgICAgICB2YXIgdXJsTGluZSA9ICIi
OworICAgICAgICAgICAgaWYgKHRoaXMudXJsKSB7CisgICAgICAgICAgICAgICAgdmFyIGNvbXBv
bmVudHMgPSBbV2ViSW5zcGVjdG9yLmRpc3BsYXlOYW1lRm9yVVJMKHRoaXMudXJsKSwgImxpbmUg
IiArIHRoaXMubGluZV07CisgICAgICAgICAgICAgICAgaWYgKHJlcGVhdFN0cmluZykKKyAgICAg
ICAgICAgICAgICAgICAgY29tcG9uZW50cy5wdXNoKHJlcGVhdFN0cmluZyk7CisgICAgICAgICAg
ICAgICAgdXJsTGluZSA9ICIgKCIgKyBjb21wb25lbnRzLmpvaW4oIiwgIikgKyAiKSI7CisgICAg
ICAgICAgICB9IGVsc2UgaWYgKHJlcGVhdFN0cmluZykKKyAgICAgICAgICAgICAgICB1cmxMaW5l
ID0gIiAoIiArIHJlcGVhdFN0cmluZyArICIpIjsKKworICAgICAgICAgICAgaWYgKHVybExpbmUp
IHsKKyAgICAgICAgICAgICAgICB2YXIgbGluZXMgPSBjbGlwYm9hcmRTdHJpbmcuc3BsaXQoIlxu
Iik7CisgICAgICAgICAgICAgICAgbGluZXNbMF0gKz0gdXJsTGluZTsKKyAgICAgICAgICAgICAg
ICBjbGlwYm9hcmRTdHJpbmcgPSBsaW5lcy5qb2luKCJcbiIpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIGNsaXBib2FyZFN0cmluZzsKKyAgICB9Cit9Owo=
</data>
<flag name="review"
          id="273477"
          type_id="1"
          status="-"
          setter="joepeck"
    />
    <flag name="commit-queue"
          id="273478"
          type_id="3"
          status="-"
          setter="nvasilyev"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>248603</attachid>
            <date>2015-03-13 13:23:10 -0700</date>
            <delta_ts>2015-03-19 16:21:45 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>patch.patch</filename>
            <type>text/plain</type>
            <size>110231</size>
            <attacher name="Nikita Vasilyev">nvasilyev</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xs
ZXJzL0xvZ01hbmFnZXIuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9D
b250cm9sbGVycy9Mb2dNYW5hZ2VyLmpzCmluZGV4IGEwOWQzMGYuLmE1NjdkMzIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0xvZ01h
bmFnZXIuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJv
bGxlcnMvTG9nTWFuYWdlci5qcwpAQCAtNDgsMTEgKzQ4LDEyIEBAIFdlYkluc3BlY3Rvci5Mb2dN
YW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgLy8gQ2FsbGVkIGZyb20gV2ViSW5zcGVjdG9y
LkNvbnNvbGVPYnNlcnZlci4KIAogICAgICAgICAvLyBGSVhNRTogUGFzcyBhIHJlcXVlc3QuIFdl
IG5lZWQgYSB3YXkgdG8gZ2V0IGl0IGZyb20gdGhlIHJlcXVlc3QgSUQuCi0gICAgICAgIHZhciBj
b25zb2xlTWVzc2FnZSA9IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5jcmVhdGUoc291cmNl
LCBsZXZlbCwgdGV4dCwgdHlwZSwgdXJsLCBsaW5lLCBjb2x1bW4sIHJlcGVhdENvdW50LCBwYXJh
bWV0ZXJzLCBzdGFja1RyYWNlLCBudWxsKTsKKyAgICAgICAgdmFyIGNvbnNvbGVNZXNzYWdlID0g
bmV3IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZShzb3VyY2UsIGxldmVsLCB0ZXh0LCBudWxs
LCB0eXBlLCB1cmwsIGxpbmUsIGNvbHVtbiwgcmVwZWF0Q291bnQsIHBhcmFtZXRlcnMsIHN0YWNr
VHJhY2UsIG51bGwpOworICAgICAgICB2YXIgY29uc29sZU1lc3NhZ2VWaWV3ID0gbmV3IFdlYklu
c3BlY3Rvci5Db25zb2xlTWVzc2FnZVZpZXcoY29uc29sZU1lc3NhZ2UpOwogCi0gICAgICAgIHRo
aXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5Mb2dNYW5hZ2VyLkV2ZW50
Lk1lc3NhZ2VBZGRlZCwge21lc3NhZ2U6IGNvbnNvbGVNZXNzYWdlfSk7CisgICAgICAgIHRoaXMu
ZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5Mb2dNYW5hZ2VyLkV2ZW50Lk1l
c3NhZ2VBZGRlZCwge21lc3NhZ2U6IGNvbnNvbGVNZXNzYWdlVmlld30pOwogCi0gICAgICAgIGNv
bnNvbGUuYXNzZXJ0KCFjb25zb2xlTWVzc2FnZS5fZWxlbWVudCB8fCAhY29uc29sZU1lc3NhZ2Uu
X2VsZW1lbnQucGFyZW50Tm9kZSwgIlRoaXMgY29uc29sZSBtZXNzYWdlIHNob3VsZG4ndCBiZSBh
ZGRlZCB0byBhIHZpZXcuIFRvIGFkZCBpdCB5b3UgbmVlZCB0byB1c2UgY2xvbmUoKS4iKTsKKyAg
ICAgICAgY29uc29sZS5hc3NlcnQoIWNvbnNvbGVNZXNzYWdlVmlldy5fZWxlbWVudCB8fCAhY29u
c29sZU1lc3NhZ2VWaWV3Ll9lbGVtZW50LnBhcmVudE5vZGUsICJUaGlzIGNvbnNvbGUgbWVzc2Fn
ZSBzaG91bGRuJ3QgYmUgYWRkZWQgdG8gYSB2aWV3LiBUbyBhZGQgaXQgeW91IG5lZWQgdG8gdXNl
IGNsb25lKCkuIik7CiAgICAgfSwKIAogICAgIG1lc3NhZ2VzQ2xlYXJlZDogZnVuY3Rpb24oKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5odG1s
IGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5odG1sCmluZGV4IDA5
YTU5OTQuLmM4MWE0MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL01haW4uaHRtbAorKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9NYWluLmh0bWwKQEAgLTIyNyw2ICsyMjcsNyBAQAogICAgIDxzY3JpcHQgc3JjPSJNb2RlbHMv
Q29sbGVjdGlvbkVudHJ5LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iTW9kZWxzL0Nv
bGxlY3Rpb25FbnRyeVByZXZpZXcuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJNb2Rl
bHMvQ29sb3IuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJNb2RlbHMvQ29uc29sZU1l
c3NhZ2UuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJNb2RlbHMvQ29udGVudEZsb3cu
anMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJNb2RlbHMvQ29va2llU3RvcmFnZU9iamVj
dC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9Ik1vZGVscy9ET01Ob2RlLmpzIj48L3Nj
cmlwdD4KQEAgLTI5MSw3ICsyOTIsNyBAQAogICAgIDxzY3JpcHQgc3JjPSJNb2RlbHMvVHlwZVNl
dC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9Ik1vZGVscy9Vbml0QmV6aWVyLmpzIj48
L3NjcmlwdD4KIAotICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9Db25zb2xlTWVzc2FnZS5qcyI+PC9z
Y3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlZpZXdzL0NvbnNvbGVNZXNzYWdlVmlldy5qcyI+PC9z
Y3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IlZpZXdzL0NvbnRlbnRWaWV3LmpzIj48L3NjcmlwdD4K
ICAgICA8c2NyaXB0IHNyYz0iVmlld3MvRGF0YUdyaWQuanMiPjwvc2NyaXB0PgogICAgIDxzY3Jp
cHQgc3JjPSJWaWV3cy9EZXRhaWxzU2VjdGlvblJvdy5qcyI+PC9zY3JpcHQ+CkBAIC0zMDYsNyAr
MzA3LDcgQEAKICAgICA8c2NyaXB0IHNyYz0iVmlld3MvVHJlZU91dGxpbmUuanMiPjwvc2NyaXB0
PgogCiAgICAgPHNjcmlwdCBzcmM9IlZpZXdzL0J1dHRvbk5hdmlnYXRpb25JdGVtLmpzIj48L3Nj
cmlwdD4KLSAgICA8c2NyaXB0IHNyYz0iVmlld3MvQ29uc29sZU1lc3NhZ2VJbXBsLmpzIj48L3Nj
cmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iVmlld3MvTGVnYWN5Q29uc29sZU1lc3NhZ2VJbXBsLmpz
Ij48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iVmlld3MvRE9NVHJlZUNvbnRlbnRWaWV3Lmpz
Ij48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iVmlld3MvRGV0YWlsc1NpZGViYXJQYW5lbC5q
cyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IlZpZXdzL0dlbmVyYWxUcmVlRWxlbWVudC5q
cyI+PC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9Nb2RlbHMvQ29uc29sZU1lc3NhZ2UuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9Nb2RlbHMvQ29uc29sZU1lc3NhZ2UuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uYzU5MGZkMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9Db25zb2xlTWVzc2FnZS5qcwpAQCAtMCwwICsx
LDE4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMyBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEpvc2VwaCBQZWNv
cmFybworICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUg
SW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCitXZWJJ
bnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UgPSBmdW5jdGlvbihzb3VyY2UsIGxldmVsLCBtZXNzYWdl
LCBsaW5raWZpZXIsIHR5cGUsIHVybCwgbGluZSwgY29sdW1uLCByZXBlYXRDb3VudCwgcGFyYW1l
dGVycywgc3RhY2tUcmFjZSwgcmVxdWVzdCkgeworICAgIHRoaXMuc291cmNlID0gc291cmNlOwor
ICAgIHRoaXMubGV2ZWwgPSBsZXZlbDsKKyAgICB0aGlzLl9tZXNzYWdlVGV4dCA9IG1lc3NhZ2U7
CisgICAgdGhpcy5fbGlua2lmaWVyID0gbGlua2lmaWVyIHx8IG51bGw7IC8vIFVudXNlZC4KKyAg
ICB0aGlzLnR5cGUgPSB0eXBlIHx8IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdl
VHlwZS5Mb2c7CisgICAgdGhpcy51cmwgPSB1cmwgfHwgIiI7CisgICAgdGhpcy5saW5lID0gbGlu
ZSB8fCAwOworICAgIHRoaXMuY29sdW1uID0gY29sdW1uIHx8IDA7CisKKyAgICB0aGlzLnJlcGVh
dENvdW50ID0gcmVwZWF0Q291bnQ7CisgICAgdGhpcy5yZXBlYXREZWx0YSA9IHJlcGVhdENvdW50
OyAvLyBVbnVzZWQuCisgICAgdGhpcy50b3RhbFJlcGVhdENvdW50ID0gcmVwZWF0Q291bnQ7CisK
KyAgICB0aGlzLl9wYXJhbWV0ZXJzID0gcGFyYW1ldGVyczsKKyAgICB0aGlzLl9zdGFja1RyYWNl
ID0gc3RhY2tUcmFjZTsKKyAgICB0aGlzLl9yZXF1ZXN0ID0gcmVxdWVzdDsKK307CisKKworV2Vi
SW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLnByb3RvdHlwZSA9IHsKKyAgICBpc0Vycm9yT3JXYXJu
aW5nOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gKHRoaXMubGV2ZWwgPT09IFdl
Ykluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuV2FybmluZyB8fCB0aGlzLmxl
dmVsID09PSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkVycm9yKTsK
KyAgICB9LAorCisgICAgZmlyc3ROb25OYXRpdmVDYWxsRnJhbWU6IGZ1bmN0aW9uKCkKKyAgICB7
CisgICAgICAgIHZhciBzdGFja1RyYWNlID0gdGhpcy5fc3RhY2tUcmFjZTsKKyAgICAgICAgaWYg
KCFzdGFja1RyYWNlKQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisKKyAgICAgICAgZm9yICh2
YXIgZnJhbWUgb2Ygc3RhY2tUcmFjZSkgeworICAgICAgICAgICAgaWYgKCFmcmFtZS51cmwgfHwg
ZnJhbWUudXJsID09PSAiW25hdGl2ZSBjb2RlXSIpCisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICByZXR1cm4gZnJhbWU7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4g
bnVsbDsKKyAgICB9LAorCisgICAgaXNFcXVhbDogZnVuY3Rpb24obXNnKQorICAgIHsKKyAgICAg
ICAgaWYgKCFtc2cpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKG1z
ZyA9PT0gdGhpcykKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIGlmICh0aGlz
Ll9zdGFja1RyYWNlKSB7CisgICAgICAgICAgICBpZiAoIW1zZy5fc3RhY2tUcmFjZSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB2YXIgbCA9IHRoaXMuX3N0YWNr
VHJhY2U7CisgICAgICAgICAgICB2YXIgciA9IG1zZy5fc3RhY2tUcmFjZTsKKyAgICAgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgbC5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGlm
IChsW2ldLnVybCAhPT0gcltpXS51cmwgfHwKKyAgICAgICAgICAgICAgICBsW2ldLmZ1bmN0aW9u
TmFtZSAhPT0gcltpXS5mdW5jdGlvbk5hbWUgfHwKKyAgICAgICAgICAgICAgICBsW2ldLmxpbmVO
dW1iZXIgIT09IHJbaV0ubGluZU51bWJlciB8fAorICAgICAgICAgICAgICAgIGxbaV0uY29sdW1u
TnVtYmVyICE9PSByW2ldLmNvbHVtbk51bWJlcikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuICh0aGlz
LnNvdXJjZSA9PT0gbXNnLnNvdXJjZSkKKyAgICAgICAgICAgICYmICh0aGlzLnR5cGUgPT09IG1z
Zy50eXBlKQorICAgICAgICAgICAgJiYgKHRoaXMubGV2ZWwgPT09IG1zZy5sZXZlbCkKKyAgICAg
ICAgICAgICYmICh0aGlzLmxpbmUgPT09IG1zZy5saW5lKQorICAgICAgICAgICAgJiYgKHRoaXMu
dXJsID09PSBtc2cudXJsKQorICAgICAgICAgICAgJiYgKHRoaXMubWVzc2FnZSA9PT0gbXNnLm1l
c3NhZ2UpCisgICAgICAgICAgICAmJiAodGhpcy5fcmVxdWVzdCA9PT0gbXNnLl9yZXF1ZXN0KTsK
KyAgICB9LAorCisgICAgY2xvbmU6IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gbmV3IFdl
Ykluc3BlY3Rvci5Db25zb2xlTWVzc2FnZSgKKyAgICAgICAgICAgIHRoaXMuc291cmNlLAorICAg
ICAgICAgICAgdGhpcy5sZXZlbCwKKyAgICAgICAgICAgIHRoaXMuX21lc3NhZ2VUZXh0LAorICAg
ICAgICAgICAgdGhpcy5fbGlua2lmaWVyLAorICAgICAgICAgICAgdGhpcy50eXBlLAorICAgICAg
ICAgICAgdGhpcy51cmwsCisgICAgICAgICAgICB0aGlzLmxpbmUsCisgICAgICAgICAgICB0aGlz
LmNvbHVtbiwKKyAgICAgICAgICAgIHRoaXMucmVwZWF0Q291bnQsCisgICAgICAgICAgICB0aGlz
Ll9wYXJhbWV0ZXJzLAorICAgICAgICAgICAgdGhpcy5fc3RhY2tUcmFjZSwKKyAgICAgICAgICAg
IHRoaXMuX3JlcXVlc3QKKyAgICAgICAgKTsKKyAgICB9LAorCisgICAgZ2V0IGxldmVsU3RyaW5n
KCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodGhpcy5sZXZlbCkgeworICAgICAgICAgICAgY2Fz
ZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLlRpcDoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gIlRpcCI7CisgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25z
b2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuTG9nOgorICAgICAgICAgICAgICAgIHJldHVybiAiTG9n
IjsKKyAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VM
ZXZlbC5XYXJuaW5nOgorICAgICAgICAgICAgICAgIHJldHVybiAiV2FybmluZyI7CisgICAgICAg
ICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuRGVidWc6
CisgICAgICAgICAgICAgICAgcmV0dXJuICJEZWJ1ZyI7CisgICAgICAgICAgICBjYXNlIFdlYklu
c3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuRXJyb3I6CisgICAgICAgICAgICAg
ICAgcmV0dXJuICJFcnJvciI7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgc2hvdWxkRHVtcFN0
YWNrVHJhY2U6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiAhIXRoaXMuX3N0YWNr
VHJhY2UgJiYgdGhpcy5fc3RhY2tUcmFjZS5sZW5ndGggJiYgKHRoaXMuc291cmNlID09PSBXZWJJ
bnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVNvdXJjZS5OZXR3b3JrIHx8IHRoaXMubGV2
ZWwgPT09IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuRXJyb3IgfHwg
dGhpcy50eXBlID09PSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuVHJh
Y2UpOworICAgIH0KK307CisKKworV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLmNyZWF0ZSA9
IGZ1bmN0aW9uKHNvdXJjZSwgbGV2ZWwsIG1lc3NhZ2UsIHR5cGUsIHVybCwgbGluZSwgY29sdW1u
LCByZXBlYXRDb3VudCwgcGFyYW1ldGVycywgc3RhY2tUcmFjZSwgcmVxdWVzdCkKK3sKKyAgICBj
b25zb2xlLndhcm4oIkNvbnNvbGVNZXNzYWdlI2NyZWF0ZSBpcyBkZXByZWNhdGVkLCBwbGVhc2Ug
ZG9uJ3QgdXNlIGl0LiIpOworICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNz
YWdlSW1wbChzb3VyY2UsIGxldmVsLCBtZXNzYWdlLCBudWxsLCB0eXBlLCB1cmwsIGxpbmUsIGNv
bHVtbiwgcmVwZWF0Q291bnQsIHBhcmFtZXRlcnMsIHN0YWNrVHJhY2UsIHJlcXVlc3QpOworfTsK
KworLy8gRklYTUU6IFN3aXRjaCB0byBDb25zb2xlQWdlbnQuQ29uc29sZU1lc3NhZ2VTb3VyY2Uu
CitXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVNvdXJjZSA9IHsKKyAgICBIVE1M
OiAiaHRtbCIsCisgICAgWE1MOiAieG1sIiwKKyAgICBKUzogImphdmFzY3JpcHQiLAorICAgIE5l
dHdvcms6ICJuZXR3b3JrIiwKKyAgICBDb25zb2xlQVBJOiAiY29uc29sZS1hcGkiLAorICAgIE90
aGVyOiAib3RoZXIiCit9OworCisvLyBGSVhNRTogU3dpdGNoIHRvIENvbnNvbGVBZ2VudC5Db25z
b2xlTWVzc2FnZVR5cGUuCitXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUg
PSB7CisgICAgTG9nOiAibG9nIiwKKyAgICBEaXI6ICJkaXIiLAorICAgIERpclhNTDogImRpcnht
bCIsCisgICAgVGFibGU6ICJ0YWJsZSIsCisgICAgVHJhY2U6ICJ0cmFjZSIsCisgICAgU3RhcnRH
cm91cDogInN0YXJ0R3JvdXAiLAorICAgIFN0YXJ0R3JvdXBDb2xsYXBzZWQ6ICJzdGFydEdyb3Vw
Q29sbGFwc2VkIiwKKyAgICBFbmRHcm91cDogImVuZEdyb3VwIiwKKyAgICBBc3NlcnQ6ICJhc3Nl
cnQiLAorICAgIFJlc3VsdDogInJlc3VsdCIKK307CisKKy8vIEZJWE1FOiBTd2l0Y2ggdG8gQ29u
c29sZUFnZW50LkNvbnNvbGVNZXNzYWdlTGV2ZWwuCitXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3Nh
Z2UuTWVzc2FnZUxldmVsID0geworICAgIFRpcDogInRpcCIsCisgICAgTG9nOiAibG9nIiwKKyAg
ICBXYXJuaW5nOiAid2FybmluZyIsCisgICAgRXJyb3I6ICJlcnJvciIsCisgICAgRGVidWc6ICJk
ZWJ1ZyIKK307CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9WaWV3cy9Db25zb2xlQ29tbWFuZFJlc3VsdC5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL1ZpZXdzL0NvbnNvbGVDb21tYW5kUmVzdWx0LmpzCmluZGV4IDgyYjA4OTgu
LjdiYmIwMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L1ZpZXdzL0NvbnNvbGVDb21tYW5kUmVzdWx0LmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0NvbnNvbGVDb21tYW5kUmVzdWx0LmpzCkBAIC0zMCwxMyAr
MzAsMjYgQEAKIFdlYkluc3BlY3Rvci5Db25zb2xlQ29tbWFuZFJlc3VsdCA9IGZ1bmN0aW9uKHJl
c3VsdCwgd2FzVGhyb3duLCBvcmlnaW5hdGluZ0NvbW1hbmQsIHNhdmVkUmVzdWx0SW5kZXgpCiB7
CiAgICAgdmFyIGxldmVsID0gKHdhc1Rocm93biA/IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2Fn
ZS5NZXNzYWdlTGV2ZWwuRXJyb3IgOiBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2Fn
ZUxldmVsLkxvZyk7Ci0gICAgdGhpcy5vcmlnaW5hdGluZ0NvbW1hbmQgPSBvcmlnaW5hdGluZ0Nv
bW1hbmQ7CisgICAgdGhpcy5vcmlnaW5hdGluZ0NvbW1hbmQgPSBvcmlnaW5hdGluZ0NvbW1hbmQ7
IC8vIE5vdCB1c2VkPwogICAgIHRoaXMuc2F2ZWRSZXN1bHRJbmRleCA9IHNhdmVkUmVzdWx0SW5k
ZXg7CiAKICAgICBpZiAodGhpcy5zYXZlZFJlc3VsdEluZGV4ICYmIHRoaXMuc2F2ZWRSZXN1bHRJ
bmRleCA+IFdlYkluc3BlY3Rvci5Db25zb2xlQ29tbWFuZFJlc3VsdC5tYXhpbXVtU2F2ZWRSZXN1
bHRJbmRleCkKICAgICAgICAgV2ViSW5zcGVjdG9yLkNvbnNvbGVDb21tYW5kUmVzdWx0Lm1heGlt
dW1TYXZlZFJlc3VsdEluZGV4ID0gdGhpcy5zYXZlZFJlc3VsdEluZGV4OwogCi0gICAgV2ViSW5z
cGVjdG9yLkNvbnNvbGVNZXNzYWdlSW1wbC5jYWxsKHRoaXMsIFdlYkluc3BlY3Rvci5Db25zb2xl
TWVzc2FnZS5NZXNzYWdlU291cmNlLkpTLCBsZXZlbCwgIiIsIG51bGwsIFdlYkluc3BlY3Rvci5D
b25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5SZXN1bHQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1
bmRlZmluZWQsIHVuZGVmaW5lZCwgW3Jlc3VsdF0pOworICAgIHZhciBtb2RlbCA9IG5ldyBXZWJJ
bnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UoCisgICAgICAgIFdlYkluc3BlY3Rvci5Db25zb2xlTWVz
c2FnZS5NZXNzYWdlU291cmNlLkpTLAorICAgICAgICBsZXZlbCwKKyAgICAgICAgIiIsCisgICAg
ICAgIG51bGwsCisgICAgICAgIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlw
ZS5SZXN1bHQsCisgICAgICAgIHVuZGVmaW5lZCwKKyAgICAgICAgdW5kZWZpbmVkLAorICAgICAg
ICB1bmRlZmluZWQsCisgICAgICAgIHVuZGVmaW5lZCwKKyAgICAgICAgW3Jlc3VsdF0KKyAgICAp
OworCisgICAgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlVmlldy5jYWxsKHRoaXMsIG1vZGVs
KTsKIH07CiAKIFdlYkluc3BlY3Rvci5Db25zb2xlQ29tbWFuZFJlc3VsdC5tYXhpbXVtU2F2ZWRS
ZXN1bHRJbmRleCA9IDA7CkBAIC00NCw3ICs1Nyw3IEBAIFdlYkluc3BlY3Rvci5Db25zb2xlQ29t
bWFuZFJlc3VsdC5tYXhpbXVtU2F2ZWRSZXN1bHRJbmRleCA9IDA7CiBXZWJJbnNwZWN0b3IuQ29u
c29sZUNvbW1hbmRSZXN1bHQuY2xlYXJNYXhpbXVtU2F2ZWRSZXN1bHRJbmRleCA9IGZ1bmN0aW9u
KCkKIHsKICAgICBXZWJJbnNwZWN0b3IuQ29uc29sZUNvbW1hbmRSZXN1bHQubWF4aW11bVNhdmVk
UmVzdWx0SW5kZXggPSAwOwotfQorfTsKIAogV2ViSW5zcGVjdG9yLkNvbnNvbGVDb21tYW5kUmVz
dWx0LnByb3RvdHlwZSA9IHsKICAgICBjb25zdHJ1Y3RvcjogV2ViSW5zcGVjdG9yLkNvbnNvbGVD
b21tYW5kUmVzdWx0LApAQCAtNTUsNyArNjgsNyBAQCBXZWJJbnNwZWN0b3IuQ29uc29sZUNvbW1h
bmRSZXN1bHQucHJvdG90eXBlID0gewogCiAgICAgdG9NZXNzYWdlRWxlbWVudDogZnVuY3Rpb24o
KQogICAgIHsKLSAgICAgICAgdmFyIGVsZW1lbnQgPSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3Nh
Z2VJbXBsLnByb3RvdHlwZS50b01lc3NhZ2VFbGVtZW50LmNhbGwodGhpcyk7CisgICAgICAgIHZh
ciBlbGVtZW50ID0gV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlVmlldy5wcm90b3R5cGUudG9N
ZXNzYWdlRWxlbWVudC5jYWxsKHRoaXMpOwogICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQo
ImNvbnNvbGUtdXNlci1jb21tYW5kLXJlc3VsdCIpOwogICAgICAgICBpZiAoIWVsZW1lbnQuZ2V0
QXR0cmlidXRlKCJkYXRhLWxhYmVscHJlZml4IikpCiAgICAgICAgICAgICBlbGVtZW50LnNldEF0
dHJpYnV0ZSgiZGF0YS1sYWJlbHByZWZpeCIsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiT3V0cHV0
OiAiKSk7CkBAIC02OCw0ICs4MSw0IEBAIFdlYkluc3BlY3Rvci5Db25zb2xlQ29tbWFuZFJlc3Vs
dC5wcm90b3R5cGUgPSB7CiAgICAgfQogfTsKIAotV2ViSW5zcGVjdG9yLkNvbnNvbGVDb21tYW5k
UmVzdWx0LnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VJ
bXBsLnByb3RvdHlwZTsKK1dlYkluc3BlY3Rvci5Db25zb2xlQ29tbWFuZFJlc3VsdC5wcm90b3R5
cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlVmlldy5wcm90b3R5cGU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9D
b25zb2xlTWVzc2FnZS5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Zp
ZXdzL0NvbnNvbGVNZXNzYWdlLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMGFj
ZDgyLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Zp
ZXdzL0NvbnNvbGVNZXNzYWdlLmpzCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAxMyBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEpvc2VwaCBQZWNvcmFybwotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxl
Iikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotV2ViSW5zcGVjdG9yLkNvbnNv
bGVNZXNzYWdlID0gZnVuY3Rpb24oc291cmNlLCBsZXZlbCwgdXJsLCBsaW5lLCBjb2x1bW4sIHJl
cGVhdENvdW50KQotewotICAgIHRoaXMuc291cmNlID0gc291cmNlOwotICAgIHRoaXMubGV2ZWwg
PSBsZXZlbDsKLSAgICB0aGlzLnVybCA9IHVybCB8fCBudWxsOwotICAgIHRoaXMubGluZSA9IGxp
bmUgfHwgMDsKLSAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbiB8fCAwOwotCi0gICAgcmVwZWF0Q291
bnQgPSByZXBlYXRDb3VudCB8fCAxOwotICAgIHRoaXMucmVwZWF0Q291bnQgPSByZXBlYXRDb3Vu
dDsKLSAgICB0aGlzLnJlcGVhdERlbHRhID0gcmVwZWF0Q291bnQ7Ci0gICAgdGhpcy50b3RhbFJl
cGVhdENvdW50ID0gcmVwZWF0Q291bnQ7Ci19OwotCi1XZWJJbnNwZWN0b3IuQ29uc29sZU1lc3Nh
Z2UucHJvdG90eXBlID0gewotICAgIGlzRXJyb3JPcldhcm5pbmc6IGZ1bmN0aW9uKCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiAodGhpcy5sZXZlbCA9PT0gV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNz
YWdlLk1lc3NhZ2VMZXZlbC5XYXJuaW5nIHx8IHRoaXMubGV2ZWwgPT09IFdlYkluc3BlY3Rvci5D
b25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuRXJyb3IpOwotICAgIH0sCi0KLSAgICB1cGRhdGVS
ZXBlYXRDb3VudDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgLy8gSW1wbGVtZW50ZWQgYnkg
Y29uY3JldGUgaW5zdGFuY2VzCi0gICAgfSwKLQotICAgIGNsb25lOiBmdW5jdGlvbigpCi0gICAg
ewotICAgICAgICAvLyBJbXBsZW1lbnRlZCBieSBjb25jcmV0ZSBpbnN0YW5jZXMKLSAgICB9Ci19
OwotCi1XZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuY3JlYXRlID0gZnVuY3Rpb24oc291cmNl
LCBsZXZlbCwgbWVzc2FnZSwgdHlwZSwgdXJsLCBsaW5lLCBjb2x1bW4sIHJlcGVhdENvdW50LCBw
YXJhbWV0ZXJzLCBzdGFja1RyYWNlLCByZXF1ZXN0KQotewotICAgIHJldHVybiBuZXcgV2ViSW5z
cGVjdG9yLkNvbnNvbGVNZXNzYWdlSW1wbChzb3VyY2UsIGxldmVsLCBtZXNzYWdlLCBudWxsLCB0
eXBlLCB1cmwsIGxpbmUsIGNvbHVtbiwgcmVwZWF0Q291bnQsIHBhcmFtZXRlcnMsIHN0YWNrVHJh
Y2UsIHJlcXVlc3QpOwotfTsKLQotLy8gRklYTUU6IFN3aXRjaCB0byBDb25zb2xlQWdlbnQuQ29u
c29sZU1lc3NhZ2VTb3VyY2UuCi1XZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVNv
dXJjZSA9IHsKLSAgICBIVE1MOiAiaHRtbCIsCi0gICAgWE1MOiAieG1sIiwKLSAgICBKUzogImph
dmFzY3JpcHQiLAotICAgIE5ldHdvcms6ICJuZXR3b3JrIiwKLSAgICBDb25zb2xlQVBJOiAiY29u
c29sZS1hcGkiLAotICAgIE90aGVyOiAib3RoZXIiCi19OwotCi0vLyBGSVhNRTogU3dpdGNoIHRv
IENvbnNvbGVBZ2VudC5Db25zb2xlTWVzc2FnZVR5cGUuCi1XZWJJbnNwZWN0b3IuQ29uc29sZU1l
c3NhZ2UuTWVzc2FnZVR5cGUgPSB7Ci0gICAgTG9nOiAibG9nIiwKLSAgICBEaXI6ICJkaXIiLAot
ICAgIERpclhNTDogImRpcnhtbCIsCi0gICAgVGFibGU6ICJ0YWJsZSIsCi0gICAgVHJhY2U6ICJ0
cmFjZSIsCi0gICAgU3RhcnRHcm91cDogInN0YXJ0R3JvdXAiLAotICAgIFN0YXJ0R3JvdXBDb2xs
YXBzZWQ6ICJzdGFydEdyb3VwQ29sbGFwc2VkIiwKLSAgICBFbmRHcm91cDogImVuZEdyb3VwIiwK
LSAgICBBc3NlcnQ6ICJhc3NlcnQiLAotICAgIFJlc3VsdDogInJlc3VsdCIKLX07Ci0KLS8vIEZJ
WE1FOiBTd2l0Y2ggdG8gQ29uc29sZUFnZW50LkNvbnNvbGVNZXNzYWdlTGV2ZWwuCi1XZWJJbnNw
ZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsID0gewotICAgIFRpcDogInRpcCIsCi0g
ICAgTG9nOiAibG9nIiwKLSAgICBXYXJuaW5nOiAid2FybmluZyIsCi0gICAgRXJyb3I6ICJlcnJv
ciIsCi0gICAgRGVidWc6ICJkZWJ1ZyIKLX07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Db25zb2xlTWVzc2FnZUltcGwuanMgYi9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Db25zb2xlTWVzc2FnZUltcGwuanMK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzNWRiY2MuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvQ29uc29sZU1lc3NhZ2VJbXBs
LmpzCisrKyAvZGV2L251bGwKQEAgLTEsODAwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDcsIDIwMDgsIDIwMTMgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAwOSBKb3NlcGggUGVjb3Jhcm8KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMu
ICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
Ci0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLVdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZUltcGwgPSBm
dW5jdGlvbihzb3VyY2UsIGxldmVsLCBtZXNzYWdlLCBsaW5raWZpZXIsIHR5cGUsIHVybCwgbGlu
ZSwgY29sdW1uLCByZXBlYXRDb3VudCwgcGFyYW1ldGVycywgc3RhY2tUcmFjZSwgcmVxdWVzdCkK
LXsKLSAgICBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuY2FsbCh0aGlzLCBzb3VyY2UsIGxl
dmVsLCB1cmwsIGxpbmUsIGNvbHVtbiwgcmVwZWF0Q291bnQpOwotCi0gICAgdGhpcy5fbGlua2lm
aWVyID0gbGlua2lmaWVyOwotICAgIHRoaXMudHlwZSA9IHR5cGUgfHwgV2ViSW5zcGVjdG9yLkNv
bnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLkxvZzsKLSAgICB0aGlzLl9tZXNzYWdlVGV4dCA9IG1l
c3NhZ2U7Ci0gICAgdGhpcy5fcGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7Ci0gICAgdGhpcy5fc3Rh
Y2tUcmFjZSA9IHN0YWNrVHJhY2U7Ci0gICAgdGhpcy5fcmVxdWVzdCA9IHJlcXVlc3Q7Ci0KLSAg
ICB0aGlzLl9jdXN0b21Gb3JtYXR0ZXJzID0gewotICAgICAgICAib2JqZWN0IjogdGhpcy5fZm9y
bWF0UGFyYW1ldGVyQXNPYmplY3QsCi0gICAgICAgICJlcnJvciI6IHRoaXMuX2Zvcm1hdFBhcmFt
ZXRlckFzT2JqZWN0LAotICAgICAgICAibWFwIjogdGhpcy5fZm9ybWF0UGFyYW1ldGVyQXNPYmpl
Y3QsCi0gICAgICAgICJzZXQiOiB0aGlzLl9mb3JtYXRQYXJhbWV0ZXJBc09iamVjdCwKLSAgICAg
ICAgIndlYWttYXAiOiB0aGlzLl9mb3JtYXRQYXJhbWV0ZXJBc09iamVjdCwKLSAgICAgICAgIml0
ZXJhdG9yIjogdGhpcy5fZm9ybWF0UGFyYW1ldGVyQXNPYmplY3QsCi0gICAgICAgICJhcnJheSI6
ICB0aGlzLl9mb3JtYXRQYXJhbWV0ZXJBc0FycmF5LAotICAgICAgICAibm9kZSI6ICAgdGhpcy5f
Zm9ybWF0UGFyYW1ldGVyQXNOb2RlLAotICAgICAgICAic3RyaW5nIjogdGhpcy5fZm9ybWF0UGFy
YW1ldGVyQXNTdHJpbmcKLSAgICB9OwotfTsKLQotV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdl
SW1wbC5wcm90b3R5cGUgPSB7Ci0KLSAgICBlbmZvcmNlc0NsaXBib2FyZFByZWZpeFN0cmluZzog
dHJ1ZSwKLQotICAgIF9mb3JtYXRNZXNzYWdlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0
aGlzLl9mb3JtYXR0ZWRNZXNzYWdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwot
ICAgICAgICB0aGlzLl9mb3JtYXR0ZWRNZXNzYWdlLmNsYXNzTmFtZSA9ICJjb25zb2xlLW1lc3Nh
Z2UtdGV4dCI7Ci0KLSAgICAgICAgdmFyIG1lc3NhZ2VUZXh0OwotICAgICAgICBpZiAodGhpcy5z
b3VyY2UgPT09IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNlLkNvbnNv
bGVBUEkpIHsKLSAgICAgICAgICAgIHN3aXRjaCAodGhpcy50eXBlKSB7Ci0gICAgICAgICAgICAg
ICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuVHJhY2U6Ci0g
ICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VUZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUo
ImNvbnNvbGUudHJhY2UoKSIpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5Bc3Nl
cnQ6Ci0gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gW1dlYkluc3BlY3Rvci5VSVN0cmlu
ZygiQXNzZXJ0aW9uIGZhaWxlZDoiKV07Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9w
YXJhbWV0ZXJzKQotICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3MuY29uY2F0KHRo
aXMuX3BhcmFtZXRlcnMpOwotICAgICAgICAgICAgICAgICAgICBtZXNzYWdlVGV4dCA9IHRoaXMu
X2Zvcm1hdChhcmdzKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuRGlyOgotICAg
ICAgICAgICAgICAgICAgICB2YXIgb2JqID0gdGhpcy5fcGFyYW1ldGVycyA/IHRoaXMuX3BhcmFt
ZXRlcnNbMF0gOiB1bmRlZmluZWQ7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gWyIl
TyIsIG9ial07Ci0gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VUZXh0ID0gdGhpcy5fZm9ybWF0
KGFyZ3MpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IHRoaXMuX3BhcmFtZXRlcnMgfHwg
W3RoaXMuX21lc3NhZ2VUZXh0XTsKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZVRleHQgPSB0
aGlzLl9mb3JtYXQoYXJncyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAodGhp
cy5zb3VyY2UgPT09IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNlLk5l
dHdvcmspIHsKLSAgICAgICAgICAgIGlmICh0aGlzLl9yZXF1ZXN0KSB7Ci0gICAgICAgICAgICAg
ICAgdGhpcy5fc3RhY2tUcmFjZSA9IHRoaXMuX3JlcXVlc3Quc3RhY2tUcmFjZTsKLSAgICAgICAg
ICAgICAgICBpZiAodGhpcy5fcmVxdWVzdC5pbml0aWF0b3IgJiYgdGhpcy5fcmVxdWVzdC5pbml0
aWF0b3IudXJsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMudXJsID0gdGhpcy5fcmVxdWVz
dC5pbml0aWF0b3IudXJsOwotICAgICAgICAgICAgICAgICAgICB0aGlzLmxpbmUgPSB0aGlzLl9y
ZXF1ZXN0LmluaXRpYXRvci5saW5lTnVtYmVyOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBtZXNzYWdlVGV4dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKLSAg
ICAgICAgICAgICAgICBpZiAodGhpcy5sZXZlbCA9PT0gV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNz
YWdlLk1lc3NhZ2VMZXZlbC5FcnJvcikgewotICAgICAgICAgICAgICAgICAgICBtZXNzYWdlVGV4
dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0aGlzLl9yZXF1ZXN0LnJlcXVl
c3RNZXRob2QgKyAiICIpKTsKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZVRleHQuYXBwZW5k
Q2hpbGQoV2ViSW5zcGVjdG9yLmxpbmtpZnlSZXF1ZXN0QXNOb2RlKHRoaXMuX3JlcXVlc3QpKTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3JlcXVlc3QuZmFpbGVkKQotICAgICAgICAg
ICAgICAgICAgICAgICAgbWVzc2FnZVRleHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4
dE5vZGUoIiAiICsgdGhpcy5fcmVxdWVzdC5sb2NhbGl6ZWRGYWlsRGVzY3JpcHRpb24pKTsKLSAg
ICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZVRl
eHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiAiICsgdGhpcy5fcmVxdWVz
dC5zdGF0dXNDb2RlICsgIiAoIiArIHRoaXMuX3JlcXVlc3Quc3RhdHVzVGV4dCArICIpIikpOwot
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBmcmFnbWVu
dCA9IFdlYkluc3BlY3Rvci5saW5raWZ5U3RyaW5nQXNGcmFnbWVudFdpdGhDdXN0b21MaW5raWZp
ZXIodGhpcy5fbWVzc2FnZVRleHQsIFdlYkluc3BlY3Rvci5saW5raWZ5UmVxdWVzdEFzTm9kZS5i
aW5kKG51bGwsIHRoaXMuX3JlcXVlc3QsICIiKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1lc3Nh
Z2VUZXh0LmFwcGVuZENoaWxkKGZyYWdtZW50KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmICh0aGlzLnVybCkgewotICAgICAgICAg
ICAgICAgICAgICB2YXIgYW5jaG9yID0gV2ViSW5zcGVjdG9yLmxpbmtpZnlVUkxBc05vZGUodGhp
cy51cmwsIHRoaXMudXJsLCAiY29uc29sZS1tZXNzYWdlLXVybCIpOwotICAgICAgICAgICAgICAg
ICAgICB0aGlzLl9mb3JtYXR0ZWRNZXNzYWdlLmFwcGVuZENoaWxkKGFuY2hvcik7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1lc3NhZ2VUZXh0ID0gdGhpcy5fZm9ybWF0KFt0
aGlzLl9tZXNzYWdlVGV4dF0pOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgdmFyIGFyZ3MgPSB0aGlzLl9wYXJhbWV0ZXJzIHx8IFt0aGlzLl9tZXNzYWdlVGV4
dF07Ci0gICAgICAgICAgICBtZXNzYWdlVGV4dCA9IHRoaXMuX2Zvcm1hdChhcmdzKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmICh0aGlzLnNvdXJjZSAhPT0gV2ViSW5zcGVjdG9yLkNvbnNvbGVN
ZXNzYWdlLk1lc3NhZ2VTb3VyY2UuTmV0d29yayB8fCB0aGlzLl9yZXF1ZXN0KSB7Ci0gICAgICAg
ICAgICB2YXIgZmlyc3ROb25OYXRpdmVDYWxsRnJhbWUgPSB0aGlzLl9maXJzdE5vbk5hdGl2ZUNh
bGxGcmFtZSgpOwotICAgICAgICAgICAgaWYgKGZpcnN0Tm9uTmF0aXZlQ2FsbEZyYW1lKSB7Ci0g
ICAgICAgICAgICAgICAgdmFyIHVybEVsZW1lbnQgPSB0aGlzLl9saW5raWZ5Q2FsbEZyYW1lKGZp
cnN0Tm9uTmF0aXZlQ2FsbEZyYW1lKTsKLSAgICAgICAgICAgICAgICB0aGlzLl9mb3JtYXR0ZWRN
ZXNzYWdlLmFwcGVuZENoaWxkKHVybEVsZW1lbnQpOwotICAgICAgICAgICAgfSBlbHNlIGlmICh0
aGlzLnVybCAmJiAhdGhpcy5fc2hvdWxkSGlkZVVSTCh0aGlzLnVybCkpIHsKLSAgICAgICAgICAg
ICAgICB2YXIgdXJsRWxlbWVudCA9IHRoaXMuX2xpbmtpZnlMb2NhdGlvbih0aGlzLnVybCwgdGhp
cy5saW5lLCB0aGlzLmNvbHVtbik7Ci0gICAgICAgICAgICAgICAgdGhpcy5fZm9ybWF0dGVkTWVz
c2FnZS5hcHBlbmRDaGlsZCh1cmxFbGVtZW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgICAgIHRoaXMuX2Zvcm1hdHRlZE1lc3NhZ2UuYXBwZW5kQ2hpbGQobWVzc2FnZVRleHQp
OwotCi0gICAgICAgIGlmICh0aGlzLnNhdmVkUmVzdWx0SW5kZXgpIHsKLSAgICAgICAgICAgIHZh
ciBzYXZlZFZhcmlhYmxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsK
LSAgICAgICAgICAgIHNhdmVkVmFyaWFibGVFbGVtZW50LmNsYXNzTmFtZSA9ICJjb25zb2xlLXNh
dmVkLXZhcmlhYmxlIjsKLSAgICAgICAgICAgIHNhdmVkVmFyaWFibGVFbGVtZW50LnRleHRDb250
ZW50ID0gIiA9ICQiICsgdGhpcy5zYXZlZFJlc3VsdEluZGV4OwotICAgICAgICAgICAgaWYgKHRo
aXMuX29iamVjdFRyZWUpCi0gICAgICAgICAgICAgICAgdGhpcy5fb2JqZWN0VHJlZS5hcHBlbmRU
aXRsZVN1ZmZpeChzYXZlZFZhcmlhYmxlRWxlbWVudCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgdGhpcy5fZm9ybWF0dGVkTWVzc2FnZS5hcHBlbmRDaGlsZChzYXZlZFZhcmlh
YmxlRWxlbWVudCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodGhpcy5fc2hvdWxkRHVtcFN0
YWNrVHJhY2UoKSkgewotICAgICAgICAgICAgdmFyIG9sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgib2wiKTsKLSAgICAgICAgICAgIG9sLmNsYXNzTmFtZSA9ICJvdXRsaW5lLWRpc2Nsb3N1cmUi
OwotICAgICAgICAgICAgdmFyIHRyZWVPdXRsaW5lID0gbmV3IFRyZWVPdXRsaW5lKG9sKTsKLQot
ICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSB0aGlzLl9mb3JtYXR0ZWRNZXNzYWdlOwotICAgICAg
ICAgICAgdmFyIHJvb3QgPSBuZXcgVHJlZUVsZW1lbnQoY29udGVudCwgbnVsbCwgdHJ1ZSk7Ci0g
ICAgICAgICAgICBjb250ZW50LnRyZWVFbGVtZW50Rm9yVGVzdCA9IHJvb3Q7Ci0gICAgICAgICAg
ICB0cmVlT3V0bGluZS5hcHBlbmRDaGlsZChyb290KTsKLSAgICAgICAgICAgIGlmICh0aGlzLnR5
cGUgPT09IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5UcmFjZSkKLSAg
ICAgICAgICAgICAgICByb290LmV4cGFuZCgpOwotCi0gICAgICAgICAgICB0aGlzLl9wb3B1bGF0
ZVN0YWNrVHJhY2VUcmVlRWxlbWVudChyb290KTsKLSAgICAgICAgICAgIHRoaXMuX2Zvcm1hdHRl
ZE1lc3NhZ2UgPSBvbDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFRoaXMgaXMgdXNlZCBmb3Ig
aW5saW5lIG1lc3NhZ2UgYnViYmxlcyBpbiBTb3VyY2VGcmFtZXMsIG9yIG90aGVyIHBsYWluLXRl
eHQgcmVwcmVzZW50YXRpb25zLgotICAgICAgICB0aGlzLl9tZXNzYWdlID0gbWVzc2FnZVRleHQu
dGV4dENvbnRlbnQ7Ci0gICAgfSwKLQotICAgIF9zaG91bGREdW1wU3RhY2tUcmFjZTogZnVuY3Rp
b24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuICEhdGhpcy5fc3RhY2tUcmFjZSAmJiB0aGlzLl9z
dGFja1RyYWNlLmxlbmd0aCAmJiAodGhpcy5zb3VyY2UgPT09IFdlYkluc3BlY3Rvci5Db25zb2xl
TWVzc2FnZS5NZXNzYWdlU291cmNlLk5ldHdvcmsgfHwgdGhpcy5sZXZlbCA9PT0gV2ViSW5zcGVj
dG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5FcnJvciB8fCB0aGlzLnR5cGUgPT09IFdl
Ykluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5UcmFjZSk7Ci0gICAgfSwKLQot
ICAgIF9zaG91bGRIaWRlVVJMOiBmdW5jdGlvbih1cmwpCi0gICAgewotICAgICAgICByZXR1cm4g
dXJsID09PSAidW5kZWZpbmVkIiB8fCB1cmwgPT09ICJbbmF0aXZlIGNvZGVdIjsKLSAgICB9LAot
Ci0gICAgX2ZpcnN0Tm9uTmF0aXZlQ2FsbEZyYW1lOiBmdW5jdGlvbigpCi0gICAgewotICAgICAg
ICBpZiAoIXRoaXMuX3N0YWNrVHJhY2UpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLQotICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3N0YWNrVHJhY2UubGVuZ3RoOyBpKyspIHsK
LSAgICAgICAgICAgIHZhciBmcmFtZSA9IHRoaXMuX3N0YWNrVHJhY2VbaV07Ci0gICAgICAgICAg
ICBpZiAoIWZyYW1lLnVybCB8fCBmcmFtZS51cmwgPT09ICJbbmF0aXZlIGNvZGVdIikKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHJldHVybiBmcmFtZTsKLSAgICAgICAg
fQotCi0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0sCi0KLSAgICBnZXQgbWVzc2FnZSgpCi0g
ICAgewotICAgICAgICAvLyBmb3JjZSBtZXNzYWdlIGZvcm1hdHRpbmcKLSAgICAgICAgdmFyIGZv
cm1hdHRlZE1lc3NhZ2UgPSB0aGlzLmZvcm1hdHRlZE1lc3NhZ2U7Ci0gICAgICAgIHJldHVybiB0
aGlzLl9tZXNzYWdlOwotICAgIH0sCi0KLSAgICBnZXQgZm9ybWF0dGVkTWVzc2FnZSgpCi0gICAg
ewotICAgICAgICBpZiAoIXRoaXMuX2Zvcm1hdHRlZE1lc3NhZ2UpCi0gICAgICAgICAgICB0aGlz
Ll9mb3JtYXRNZXNzYWdlKCk7Ci0gICAgICAgIHJldHVybiB0aGlzLl9mb3JtYXR0ZWRNZXNzYWdl
OwotICAgIH0sCi0KLSAgICBfbGlua2lmeUxvY2F0aW9uOiBmdW5jdGlvbih1cmwsIGxpbmVOdW1i
ZXIsIGNvbHVtbk51bWJlcikKLSAgICB7Ci0gICAgICAgIC8vIENvbnNvbGVNZXNzYWdlIHN0YWNr
IHRyYWNlIGxpbmUgbnVtYmVycyBhcmUgb25lLWJhc2VkLgotICAgICAgICBsaW5lTnVtYmVyID0g
bGluZU51bWJlciA/IGxpbmVOdW1iZXIgLSAxIDogMDsKLQotICAgICAgICByZXR1cm4gV2ViSW5z
cGVjdG9yLmxpbmtpZnlMb2NhdGlvbih1cmwsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgImNv
bnNvbGUtbWVzc2FnZS11cmwiKTsKLSAgICB9LAotCi0gICAgX2xpbmtpZnlDYWxsRnJhbWU6IGZ1
bmN0aW9uKGNhbGxGcmFtZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9saW5raWZ5TG9j
YXRpb24oY2FsbEZyYW1lLnVybCwgY2FsbEZyYW1lLmxpbmVOdW1iZXIsIGNhbGxGcmFtZS5jb2x1
bW5OdW1iZXIpOwotICAgIH0sCi0KLSAgICBpc0Vycm9yT3JXYXJuaW5nOiBmdW5jdGlvbigpCi0g
ICAgewotICAgICAgICByZXR1cm4gKHRoaXMubGV2ZWwgPT09IFdlYkluc3BlY3Rvci5Db25zb2xl
TWVzc2FnZS5NZXNzYWdlTGV2ZWwuV2FybmluZyB8fCB0aGlzLmxldmVsID09PSBXZWJJbnNwZWN0
b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkVycm9yKTsKLSAgICB9LAotCi0gICAgX2Zv
cm1hdDogZnVuY3Rpb24ocGFyYW1ldGVycykKLSAgICB7Ci0gICAgICAgIC8vIFRoaXMgbm9kZSBp
cyB1c2VkIGxpa2UgYSBCdWlsZGVyLiBWYWx1ZXMgYXJlIGNvbnRpbnVhbGx5IGFwcGVuZGVkIG9u
dG8gaXQuCi0gICAgICAgIHZhciBmb3JtYXR0ZWRSZXN1bHQgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJzcGFuIik7Ci0gICAgICAgIGlmICghcGFyYW1ldGVycy5sZW5ndGgpCi0gICAgICAgICAg
ICByZXR1cm4gZm9ybWF0dGVkUmVzdWx0OwotCi0gICAgICAgIC8vIEZvcm1hdHRpbmcgY29kZSBi
ZWxvdyBhc3N1bWVzIHRoYXQgcGFyYW1ldGVycyBhcmUgYWxsIHdyYXBwZXJzIHdoZXJlYXMgZnJv
bnRlbmQgY29uc29sZQotICAgICAgICAvLyBBUEkgYWxsb3dzIHBhc3NpbmcgYXJiaXRyYXJ5IHZh
bHVlcyBhcyBtZXNzYWdlcyAoc3RyaW5ncywgbnVtYmVycywgZXRjLikuIFdyYXAgdGhlbSBoZXJl
LgotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtZXRlcnMubGVuZ3RoOyArK2kpIHsK
LSAgICAgICAgICAgIC8vIEZJWE1FOiBPbmx5IHBhc3MgcnVudGltZSB3cmFwcGVycyBoZXJlLgot
ICAgICAgICAgICAgaWYgKHBhcmFtZXRlcnNbaV0gaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuUmVt
b3RlT2JqZWN0KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBpZiAo
dHlwZW9mIHBhcmFtZXRlcnNbaV0gPT09ICJvYmplY3QiKQotICAgICAgICAgICAgICAgIHBhcmFt
ZXRlcnNbaV0gPSBXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0LmZyb21QYXlsb2FkKHBhcmFtZXRl
cnNbaV0pOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHBhcmFtZXRlcnNbaV0g
PSBXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0LmZyb21QcmltaXRpdmVWYWx1ZShwYXJhbWV0ZXJz
W2ldKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFRoZXJlIGNhbiBiZSBzdHJpbmcgbG9nIGFu
ZCBzdHJpbmcgZXZhbCByZXN1bHQuIFdlIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlbSBiYXNlZCBv
biBtZXNzYWdlIHR5cGUuCi0gICAgICAgIHZhciBzaG91bGRGb3JtYXRNZXNzYWdlID0gV2ViSW5z
cGVjdG9yLlJlbW90ZU9iamVjdC50eXBlKHBhcmFtZXRlcnNbMF0pID09PSAic3RyaW5nIiAmJiB0
aGlzLnR5cGUgIT09IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5SZXN1
bHQ7Ci0KLSAgICAgICAgaWYgKHNob3VsZEZvcm1hdE1lc3NhZ2UpIHsKLSAgICAgICAgICAgIC8v
IE11bHRpcGxlIHBhcmFtZXRlcnMgd2l0aCB0aGUgZmlyc3QgYmVpbmcgYSBmb3JtYXQgc3RyaW5n
LiBTYXZlIHVudXNlZCBzdWJzdGl0dXRpb25zLgotICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRo
aXMuX2Zvcm1hdFdpdGhTdWJzdGl0dXRpb25TdHJpbmcocGFyYW1ldGVycywgZm9ybWF0dGVkUmVz
dWx0KTsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMgPSByZXN1bHQudW51c2VkU3Vic3RpdHV0aW9u
czsKLSAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJzLmxlbmd0aCkKLSAgICAgICAgICAgICAgICBm
b3JtYXR0ZWRSZXN1bHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiAiKSk7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodGhpcy50eXBlID09PSBXZWJJbnNwZWN0b3IuQ29u
c29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuVGFibGUpIHsKLSAgICAgICAgICAgIGZvcm1hdHRlZFJl
c3VsdC5hcHBlbmRDaGlsZCh0aGlzLl9mb3JtYXRQYXJhbWV0ZXJBc1RhYmxlKHBhcmFtZXRlcnMp
KTsKLSAgICAgICAgICAgIHJldHVybiBmb3JtYXR0ZWRSZXN1bHQ7Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyBTaW5nbGUgcGFyYW1ldGVyLCBvciB1bnVzZWQgc3Vic3RpdHV0aW9ucyBmcm9tIGFi
b3ZlLgotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtZXRlcnMubGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgICAgIC8vIElubGluZSBzdHJpbmdzIHdoZW4gZm9ybWF0dGluZy4KLSAgICAg
ICAgICAgIGlmIChzaG91bGRGb3JtYXRNZXNzYWdlICYmIHBhcmFtZXRlcnNbaV0udHlwZSA9PT0g
InN0cmluZyIpIHsKLSAgICAgICAgICAgICAgICB2YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoInNwYW4iKTsKLSAgICAgICAgICAgICAgICBzcGFuLmNsYXNzTGlzdC5hZGQoInR5cGUt
c3RyaW5nIik7Ci0gICAgICAgICAgICAgICAgc3Bhbi50ZXh0Q29udGVudCA9IHBhcmFtZXRlcnNb
aV0uZGVzY3JpcHRpb247Ci0gICAgICAgICAgICAgICAgZm9ybWF0dGVkUmVzdWx0LmFwcGVuZENo
aWxkKHNwYW4pOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgZm9ybWF0dGVk
UmVzdWx0LmFwcGVuZENoaWxkKHRoaXMuX2Zvcm1hdFBhcmFtZXRlcihwYXJhbWV0ZXJzW2ldLCBm
YWxzZSkpOwotCi0gICAgICAgICAgICBpZiAoaSA8IHBhcmFtZXRlcnMubGVuZ3RoIC0gMSAmJiAh
dGhpcy5faXNFeHBhbmRhYmxlKHBhcmFtZXRlcnNbaV0pKQotICAgICAgICAgICAgICAgIGZvcm1h
dHRlZFJlc3VsdC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiICIpKTsKLQot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmb3JtYXR0ZWRSZXN1bHQ7Ci0gICAgfSwKLQotICAg
IF9pc0V4cGFuZGFibGU6IGZ1bmN0aW9uKHJlbW90ZU9iamVjdCkgewotICAgICAgICBpZiAoIXJl
bW90ZU9iamVjdCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAocmVt
b3RlT2JqZWN0Lmhhc0NoaWxkcmVuICYmIHJlbW90ZU9iamVjdC5wcmV2aWV3ICYmIHJlbW90ZU9i
amVjdC5wcmV2aWV3Lmxvc3NsZXNzKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
ICAgIHJldHVybiByZW1vdGVPYmplY3QuaGFzQ2hpbGRyZW47Ci0gICAgfSwKLQotICAgIF9mb3Jt
YXRQYXJhbWV0ZXI6IGZ1bmN0aW9uKG91dHB1dCwgZm9yY2VPYmplY3RGb3JtYXQpCi0gICAgewot
ICAgICAgICB2YXIgdHlwZTsKLSAgICAgICAgaWYgKGZvcmNlT2JqZWN0Rm9ybWF0KQotICAgICAg
ICAgICAgdHlwZSA9ICJvYmplY3QiOwotICAgICAgICBlbHNlIGlmIChvdXRwdXQgaW5zdGFuY2Vv
ZiBXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0KQotICAgICAgICAgICAgdHlwZSA9IG91dHB1dC5z
dWJ0eXBlIHx8IG91dHB1dC50eXBlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0eXBlID0g
dHlwZW9mIG91dHB1dDsKLQotICAgICAgICB2YXIgZm9ybWF0dGVyID0gdGhpcy5fY3VzdG9tRm9y
bWF0dGVyc1t0eXBlXTsKLSAgICAgICAgaWYgKCFmb3JtYXR0ZXIpCi0gICAgICAgICAgICBmb3Jt
YXR0ZXIgPSB0aGlzLl9mb3JtYXRQYXJhbWV0ZXJBc1ZhbHVlOwotCi0gICAgICAgIHZhciBzcGFu
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwotCi0gICAgICAgIGlmICh0aGlzLl9p
c0V4cGFuZGFibGUob3V0cHV0KSkKLSAgICAgICAgICAgIHNwYW4uY2xhc3NMaXN0LmFkZCgiZXhw
YW5kYWJsZSIpOwotCi0gICAgICAgIGZvcm1hdHRlci5jYWxsKHRoaXMsIG91dHB1dCwgc3Bhbiwg
Zm9yY2VPYmplY3RGb3JtYXQpOwotICAgICAgICByZXR1cm4gc3BhbjsKLSAgICB9LAotCi0gICAg
X2Zvcm1hdFBhcmFtZXRlckFzVmFsdWU6IGZ1bmN0aW9uKHZhbHVlLCBlbGVtKQotICAgIHsKLSAg
ICAgICAgZWxlbS5hcHBlbmRDaGlsZChXZWJJbnNwZWN0b3IuRm9ybWF0dGVkVmFsdWUuY3JlYXRl
RWxlbWVudEZvclJlbW90ZU9iamVjdCh2YWx1ZSkpOwotICAgIH0sCi0KLSAgICBfZm9ybWF0UGFy
YW1ldGVyQXNPYmplY3Q6IGZ1bmN0aW9uKG9iaiwgZWxlbSwgZm9yY2VFeHBhbnNpb24pCi0gICAg
ewotICAgICAgICB0aGlzLl9vYmplY3RUcmVlID0gbmV3IFdlYkluc3BlY3Rvci5PYmplY3RUcmVl
VmlldyhvYmosIFdlYkluc3BlY3Rvci5PYmplY3RUcmVlVmlldy5Nb2RlLlByb3BlcnRpZXMsIHRo
aXMuX3Jvb3RQcm9wZXJ0eVBhdGhGb3JPYmplY3Qob2JqKSwgZm9yY2VFeHBhbnNpb24pOwotICAg
ICAgICBlbGVtLmFwcGVuZENoaWxkKHRoaXMuX29iamVjdFRyZWUuZWxlbWVudCk7Ci0gICAgfSwK
LQotICAgIF9mb3JtYXRQYXJhbWV0ZXJBc1N0cmluZzogZnVuY3Rpb24ob3V0cHV0LCBlbGVtKQot
ICAgIHsKLSAgICAgICAgdmFyIHNwYW4gPSBXZWJJbnNwZWN0b3IuRm9ybWF0dGVkVmFsdWUuY3Jl
YXRlTGlua2lmaWVkRWxlbWVudFN0cmluZyhvdXRwdXQuZGVzY3JpcHRpb24pOwotICAgICAgICBl
bGVtLmFwcGVuZENoaWxkKHNwYW4pOwotICAgIH0sCi0KLSAgICBfZm9ybWF0UGFyYW1ldGVyQXNO
b2RlOiBmdW5jdGlvbihvYmplY3QsIGVsZW0pCi0gICAgewotICAgICAgICB2YXIgc3BhbiA9IFdl
Ykluc3BlY3Rvci5Gb3JtYXR0ZWRWYWx1ZS5jcmVhdGVFbGVtZW50Rm9yTm9kZShvYmplY3QpOwot
ICAgICAgICBlbGVtLmFwcGVuZENoaWxkKHNwYW4pOwotICAgIH0sCi0KLSAgICBfZm9ybWF0UGFy
YW1ldGVyQXNBcnJheTogZnVuY3Rpb24oYXJyLCBlbGVtKQotICAgIHsKLSAgICAgICAgdGhpcy5f
b2JqZWN0VHJlZSA9IG5ldyBXZWJJbnNwZWN0b3IuT2JqZWN0VHJlZVZpZXcoYXJyLCBXZWJJbnNw
ZWN0b3IuT2JqZWN0VHJlZVZpZXcuTW9kZS5Qcm9wZXJ0aWVzLCB0aGlzLl9yb290UHJvcGVydHlQ
YXRoRm9yT2JqZWN0KGFycikpOwotICAgICAgICBlbGVtLmFwcGVuZENoaWxkKHRoaXMuX29iamVj
dFRyZWUuZWxlbWVudCk7Ci0gICAgfSwKLQotICAgIF9yb290UHJvcGVydHlQYXRoRm9yT2JqZWN0
OiBmdW5jdGlvbihvYmplY3QpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMuc2F2ZWRSZXN1bHRJ
bmRleCkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotCi0gICAgICAgIHJldHVybiBuZXcgV2Vi
SW5zcGVjdG9yLlByb3BlcnR5UGF0aChvYmplY3QsICIkIiArIHRoaXMuc2F2ZWRSZXN1bHRJbmRl
eCk7Ci0gICAgfSwKLQotICAgIF91c2VyUHJvdmlkZWRDb2x1bW5OYW1lczogZnVuY3Rpb24oY29s
dW1uTmFtZXNBcmd1bWVudCkKLSAgICB7Ci0gICAgICAgIGlmICghY29sdW1uTmFtZXNBcmd1bWVu
dCkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotCi0gICAgICAgIHZhciByZW1vdGVPYmplY3Qg
PSBXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0LmZyb21QYXlsb2FkKGNvbHVtbk5hbWVzQXJndW1l
bnQpOwotCi0gICAgICAgIC8vIFNpbmdsZSBwcmltaXRpdmUgYXJndW1lbnQuCi0gICAgICAgIGlm
IChyZW1vdGVPYmplY3QudHlwZSA9PT0gInN0cmluZyIgfHwgcmVtb3RlT2JqZWN0LnR5cGUgPT09
ICJudW1iZXIiKQotICAgICAgICAgICAgcmV0dXJuIFtTdHJpbmcoY29sdW1uTmFtZXNBcmd1bWVu
dC52YWx1ZSldOwotCi0gICAgICAgIC8vIElnbm9yZSBldmVyeXRoaW5nIHRoYXQgaXMgbm90IGFu
IGFycmF5IHdpdGggcHJvcGVydHkgcHJldmlld3MuCi0gICAgICAgIGlmIChyZW1vdGVPYmplY3Qu
dHlwZSAhPT0gIm9iamVjdCIgfHwgcmVtb3RlT2JqZWN0LnN1YnR5cGUgIT09ICJhcnJheSIgfHwg
IXJlbW90ZU9iamVjdC5wcmV2aWV3IHx8ICFyZW1vdGVPYmplY3QucHJldmlldy5wcm9wZXJ0eVBy
ZXZpZXdzKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAgLy8gQXJyYXkuIExv
b2sgaW50byB0aGUgcHJldmlldyBhbmQgZ2V0IHN0cmluZyB2YWx1ZXMuCi0gICAgICAgIHZhciBl
eHRyYWN0ZWRDb2x1bW5OYW1lcyA9IFtdOwotICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eVByZXZp
ZXcgb2YgcmVtb3RlT2JqZWN0LnByZXZpZXcucHJvcGVydHlQcmV2aWV3cykgewotICAgICAgICAg
ICAgaWYgKHByb3BlcnR5UHJldmlldy50eXBlID09PSAic3RyaW5nIiB8fCBwcm9wZXJ0eVByZXZp
ZXcudHlwZSA9PT0gIm51bWJlciIpCi0gICAgICAgICAgICAgICAgZXh0cmFjdGVkQ29sdW1uTmFt
ZXMucHVzaChTdHJpbmcocHJvcGVydHlQcmV2aWV3LnZhbHVlKSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICByZXR1cm4gZXh0cmFjdGVkQ29sdW1uTmFtZXMubGVuZ3RoID8gZXh0cmFjdGVkQ29sdW1u
TmFtZXMgOiBudWxsOwotICAgIH0sCi0KLSAgICBfZm9ybWF0UGFyYW1ldGVyQXNUYWJsZTogZnVu
Y3Rpb24ocGFyYW1ldGVycykKLSAgICB7Ci0gICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgic3BhbiIpOwotICAgICAgICB2YXIgdGFibGUgPSBwYXJhbWV0ZXJzWzBd
OwotICAgICAgICBpZiAoIXRhYmxlIHx8ICF0YWJsZS5wcmV2aWV3KQotICAgICAgICAgICAgcmV0
dXJuIGVsZW1lbnQ7Ci0KLSAgICAgICAgdmFyIHJvd3MgPSBbXTsKLSAgICAgICAgdmFyIGNvbHVt
bk5hbWVzID0gW107Ci0gICAgICAgIHZhciBmbGF0VmFsdWVzID0gW107Ci0gICAgICAgIHZhciBw
cmV2aWV3ID0gdGFibGUucHJldmlldzsKLSAgICAgICAgdmFyIHVzZXJQcm92aWRlZENvbHVtbk5h
bWVzID0gZmFsc2U7Ci0KLSAgICAgICAgLy8gVXNlciBwcm92aWRlZCBjb2x1bW5OYW1lcy4KLSAg
ICAgICAgdmFyIGV4dHJhY3RlZENvbHVtbk5hbWVzID0gdGhpcy5fdXNlclByb3ZpZGVkQ29sdW1u
TmFtZXMocGFyYW1ldGVyc1sxXSk7Ci0gICAgICAgIGlmIChleHRyYWN0ZWRDb2x1bW5OYW1lcykg
ewotICAgICAgICAgICAgdXNlclByb3ZpZGVkQ29sdW1uTmFtZXMgPSB0cnVlOwotICAgICAgICAg
ICAgY29sdW1uTmFtZXMgPSBleHRyYWN0ZWRDb2x1bW5OYW1lczsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8vIENoZWNrIGZpcnN0IGZvciB2YWx1ZVByZXZpZXdzIGluIHRoZSBwcm9wZXJ0aWVzIG1l
YW5pbmcgdGhpcyB3YXMgYW4gYXJyYXkgb2Ygb2JqZWN0cy4KLSAgICAgICAgaWYgKHByZXZpZXcu
cHJvcGVydHlQcmV2aWV3cykgewotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcmV2
aWV3LnByb3BlcnR5UHJldmlld3MubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICB2YXIg
cm93UHJvcGVydHkgPSBwcmV2aWV3LnByb3BlcnR5UHJldmlld3NbaV07Ci0gICAgICAgICAgICAg
ICAgdmFyIHJvd1ByZXZpZXcgPSByb3dQcm9wZXJ0eS52YWx1ZVByZXZpZXc7Ci0gICAgICAgICAg
ICAgICAgaWYgKCFyb3dQcmV2aWV3KQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLQot
ICAgICAgICAgICAgICAgIHZhciByb3dWYWx1ZSA9IHt9OwotICAgICAgICAgICAgICAgIGNvbnN0
IG1heENvbHVtbnNUb1JlbmRlciA9IDEwOwotICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAw
OyBqIDwgcm93UHJldmlldy5wcm9wZXJ0eVByZXZpZXdzLmxlbmd0aDsgKytqKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHZhciBjZWxsUHJvcGVydHkgPSByb3dQcmV2aWV3LnByb3BlcnR5UHJldmll
d3Nbal07Ci0gICAgICAgICAgICAgICAgICAgIHZhciBjb2x1bW5SZW5kZXJlZCA9IGNvbHVtbk5h
bWVzLmNvbnRhaW5zKGNlbGxQcm9wZXJ0eS5uYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KCFjb2x1bW5SZW5kZXJlZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzZXJQcm92
aWRlZENvbHVtbk5hbWVzIHx8IGNvbHVtbk5hbWVzLmxlbmd0aCA9PT0gbWF4Q29sdW1uc1RvUmVu
ZGVyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
ICAgICAgICAgICAgY29sdW1uUmVuZGVyZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAg
ICAgY29sdW1uTmFtZXMucHVzaChjZWxsUHJvcGVydHkubmFtZSk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgICAgICByb3dWYWx1ZVtjZWxsUHJvcGVydHkubmFtZV0g
PSBXZWJJbnNwZWN0b3IuRm9ybWF0dGVkVmFsdWUuY3JlYXRlRWxlbWVudEZvclByb3BlcnR5UHJl
dmlldyhjZWxsUHJvcGVydHkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBy
b3dzLnB1c2goW3Jvd1Byb3BlcnR5Lm5hbWUsIHJvd1ZhbHVlXSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQotICAgICAgICAvLyBJZiB0aGVyZSB3ZXJlIHZhbHVlUHJldmlld3MsIGNvbnZl
cnQgdG8gYSBmbGF0IGxpc3QuCi0gICAgICAgIGlmIChyb3dzLmxlbmd0aCkgewotICAgICAgICAg
ICAgY29uc3QgZW1EYXNoID0gIlx1MjAxNCI7Ci0gICAgICAgICAgICBjb2x1bW5OYW1lcy51bnNo
aWZ0KFdlYkluc3BlY3Rvci5VSVN0cmluZygiKEluZGV4KSIpKTsKLSAgICAgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgIHZhciBy
b3dOYW1lID0gcm93c1tpXVswXTsKLSAgICAgICAgICAgICAgICB2YXIgcm93VmFsdWUgPSByb3dz
W2ldWzFdOwotICAgICAgICAgICAgICAgIGZsYXRWYWx1ZXMucHVzaChyb3dOYW1lKTsKLSAgICAg
ICAgICAgICAgICBmb3IgKHZhciBqID0gMTsgaiA8IGNvbHVtbk5hbWVzLmxlbmd0aDsgKytqKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHZhciBjb2x1bW5OYW1lID0gY29sdW1uTmFtZXNbal07Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICghKGNvbHVtbk5hbWUgaW4gcm93VmFsdWUpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgZmxhdFZhbHVlcy5wdXNoKGVtRGFzaCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGZsYXRWYWx1ZXMucHVzaChyb3dW
YWx1ZVtjb2x1bW5OYW1lXSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgLy8gSWYgdGhlcmUgd2VyZSBubyB2YWx1ZSBQcmV2aWV3cywgdGhl
biBjaGVjayBmb3IgYW4gYXJyYXkgb2YgdmFsdWVzLgotICAgICAgICBpZiAoIWZsYXRWYWx1ZXMu
bGVuZ3RoICYmIHByZXZpZXcucHJvcGVydHlQcmV2aWV3cykgewotICAgICAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBwcmV2aWV3LnByb3BlcnR5UHJldmlld3MubGVuZ3RoOyArK2kpIHsKLSAg
ICAgICAgICAgICAgICB2YXIgcm93UHJvcGVydHkgPSBwcmV2aWV3LnByb3BlcnR5UHJldmlld3Nb
aV07Ci0gICAgICAgICAgICAgICAgaWYgKCEoInZhbHVlIiBpbiByb3dQcm9wZXJ0eSkpCi0gICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAgaWYgKCFjb2x1bW5O
YW1lcy5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICAgICAgY29sdW1uTmFtZXMucHVzaChXZWJJ
bnNwZWN0b3IuVUlTdHJpbmcoIkluZGV4IikpOwotICAgICAgICAgICAgICAgICAgICBjb2x1bW5O
YW1lcy5wdXNoKFdlYkluc3BlY3Rvci5VSVN0cmluZygiVmFsdWUiKSk7Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgZmxhdFZhbHVlcy5wdXNoKHJvd1Byb3BlcnR5Lm5hbWUp
OwotICAgICAgICAgICAgICAgIGZsYXRWYWx1ZXMucHVzaChXZWJJbnNwZWN0b3IuRm9ybWF0dGVk
VmFsdWUuY3JlYXRlRWxlbWVudEZvclByb3BlcnR5UHJldmlldyhyb3dQcm9wZXJ0eSkpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgbG9zc2xlc3Mgb3Igbm90IHRh
YmxlIGRhdGEsIG91dHB1dCB0aGUgb2JqZWN0IHNvIGZ1bGwgZGF0YSBjYW4gYmUgZ290dGVuLgot
ICAgICAgICBpZiAoIXByZXZpZXcubG9zc2xlc3MgfHwgIWZsYXRWYWx1ZXMubGVuZ3RoKSB7Ci0g
ICAgICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX2Zvcm1hdFBhcmFtZXRlcih0YWJs
ZSkpOwotICAgICAgICAgICAgaWYgKCFmbGF0VmFsdWVzLmxlbmd0aCkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZWxlbWVudDsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciBkYXRhR3JpZENvbnRh
aW5lciA9IGVsZW1lbnQuY3JlYXRlQ2hpbGQoInNwYW4iKTsKLSAgICAgICAgdmFyIGRhdGFHcmlk
ID0gV2ViSW5zcGVjdG9yLkRhdGFHcmlkLmNyZWF0ZVNvcnRhYmxlRGF0YUdyaWQoY29sdW1uTmFt
ZXMsIGZsYXRWYWx1ZXMpOwotICAgICAgICBkYXRhR3JpZC5lbGVtZW50LmNsYXNzTGlzdC5hZGQo
ImlubGluZSIpOwotICAgICAgICBkYXRhR3JpZENvbnRhaW5lci5hcHBlbmRDaGlsZChkYXRhR3Jp
ZC5lbGVtZW50KTsKLQotICAgICAgICByZXR1cm4gZWxlbWVudDsKLSAgICB9LAotCi0gICAgX2Zv
cm1hdFdpdGhTdWJzdGl0dXRpb25TdHJpbmc6IGZ1bmN0aW9uKHBhcmFtZXRlcnMsIGZvcm1hdHRl
ZFJlc3VsdCkKLSAgICB7Ci0gICAgICAgIHZhciBmb3JtYXR0ZXJzID0ge307Ci0KLSAgICAgICAg
ZnVuY3Rpb24gcGFyYW1ldGVyRm9ybWF0dGVyKGZvcmNlLCBvYmopCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9mb3JtYXRQYXJhbWV0ZXIob2JqLCBmb3JjZSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBmdW5jdGlvbiBzdHJpbmdGb3JtYXR0ZXIob2JqKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gb2JqLmRlc2NyaXB0aW9uOwotICAgICAgICB9Ci0KLSAgICAgICAg
ZnVuY3Rpb24gZmxvYXRGb3JtYXR0ZXIob2JqKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
dHlwZW9mIG9iai52YWx1ZSAhPT0gIm51bWJlciIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHBh
cnNlRmxvYXQob2JqLmRlc2NyaXB0aW9uKTsKLSAgICAgICAgICAgIHJldHVybiBvYmoudmFsdWU7
Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBpbnRlZ2VyRm9ybWF0dGVyKG9iaikKLSAg
ICAgICAgewotICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmoudmFsdWUgIT09ICJudW1iZXIiKQot
ICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUludChvYmouZGVzY3JpcHRpb24pOwotICAgICAg
ICAgICAgcmV0dXJuIE1hdGguZmxvb3Iob2JqLnZhbHVlKTsKLSAgICAgICAgfQotCi0gICAgICAg
IHZhciBjdXJyZW50U3R5bGUgPSBudWxsOwotICAgICAgICBmdW5jdGlvbiBzdHlsZUZvcm1hdHRl
cihvYmopCi0gICAgICAgIHsKLSAgICAgICAgICAgIGN1cnJlbnRTdHlsZSA9IHt9OwotICAgICAg
ICAgICAgdmFyIGJ1ZmZlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKLSAgICAg
ICAgICAgIGJ1ZmZlci5zZXRBdHRyaWJ1dGUoInN0eWxlIiwgb2JqLmRlc2NyaXB0aW9uKTsKLSAg
ICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnVmZmVyLnN0eWxlLmxlbmd0aDsgaSsrKSB7
Ci0gICAgICAgICAgICAgICAgdmFyIHByb3BlcnR5ID0gYnVmZmVyLnN0eWxlW2ldOwotICAgICAg
ICAgICAgICAgIGlmIChpc1doaXRlbGlzdGVkUHJvcGVydHkocHJvcGVydHkpKQotICAgICAgICAg
ICAgICAgICAgICBjdXJyZW50U3R5bGVbcHJvcGVydHldID0gYnVmZmVyLnN0eWxlW3Byb3BlcnR5
XTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZ1bmN0aW9uIGlzV2hpdGVs
aXN0ZWRQcm9wZXJ0eShwcm9wZXJ0eSkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIHByZWZp
eGVzID0gWyJiYWNrZ3JvdW5kIiwgImJvcmRlciIsICJjb2xvciIsICJmb250IiwgImxpbmUiLCAi
bWFyZ2luIiwgInBhZGRpbmciLCAidGV4dCIsICItd2Via2l0LWJhY2tncm91bmQiLCAiLXdlYmtp
dC1ib3JkZXIiLCAiLXdlYmtpdC1mb250IiwgIi13ZWJraXQtbWFyZ2luIiwgIi13ZWJraXQtcGFk
ZGluZyIsICItd2Via2l0LXRleHQiXTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
cHJlZml4ZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBpZiAocHJvcGVydHkuc3Rh
cnRzV2l0aChwcmVmaXhlc1tpXSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gRmlyZWJ1ZyB1c2VzICVvIGZvciBmb3JtYXR0aW5nIG9iamVjdHMuCi0gICAgICAg
IGZvcm1hdHRlcnMubyA9IHBhcmFtZXRlckZvcm1hdHRlci5iaW5kKHRoaXMsIGZhbHNlKTsKLSAg
ICAgICAgZm9ybWF0dGVycy5zID0gc3RyaW5nRm9ybWF0dGVyOwotICAgICAgICBmb3JtYXR0ZXJz
LmYgPSBmbG9hdEZvcm1hdHRlcjsKLQotICAgICAgICAvLyBGaXJlYnVnIGFsbG93cyBib3RoICVp
IGFuZCAlZCBmb3IgZm9ybWF0dGluZyBpbnRlZ2Vycy4KLSAgICAgICAgZm9ybWF0dGVycy5pID0g
aW50ZWdlckZvcm1hdHRlcjsKLSAgICAgICAgZm9ybWF0dGVycy5kID0gaW50ZWdlckZvcm1hdHRl
cjsKLQotICAgICAgICAvLyBGaXJlYnVnIHVzZXMgJWMgZm9yIHN0eWxpbmcgdGhlIG1lc3NhZ2Uu
Ci0gICAgICAgIGZvcm1hdHRlcnMuYyA9IHN0eWxlRm9ybWF0dGVyOwotCi0gICAgICAgIC8vIFN1
cHBvcnQgJU8gdG8gZm9yY2Ugb2JqZWN0IGZvcm1hdHRpbmcsIGluc3RlYWQgb2YgdGhlIHR5cGUt
YmFzZWQgJW8gZm9ybWF0dGluZy4KLSAgICAgICAgZm9ybWF0dGVycy5PID0gcGFyYW1ldGVyRm9y
bWF0dGVyLmJpbmQodGhpcywgdHJ1ZSk7Ci0KLSAgICAgICAgZnVuY3Rpb24gYXBwZW5kKGEsIGIp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChiIGluc3RhbmNlb2YgTm9kZSkKLSAgICAgICAg
ICAgICAgICBhLmFwcGVuZENoaWxkKGIpOwotICAgICAgICAgICAgZWxzZSBpZiAoYikgewotICAg
ICAgICAgICAgICAgIHZhciB0b0FwcGVuZCA9IFdlYkluc3BlY3Rvci5saW5raWZ5U3RyaW5nQXNG
cmFnbWVudChiLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIGlmIChjdXJyZW50U3R5bGUp
IHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJzcGFuIik7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBjdXJyZW50
U3R5bGUpCi0gICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVyLnN0eWxlW2tleV0gPSBjdXJy
ZW50U3R5bGVba2V5XTsKLSAgICAgICAgICAgICAgICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZCh0
b0FwcGVuZCk7Ci0gICAgICAgICAgICAgICAgICAgIHRvQXBwZW5kID0gd3JhcHBlcjsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdmFyIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJzcGFuIik7Ci0gICAgICAgICAgICAgICAgc3Bhbi5jbGFzc05hbWUgPSAidHlwZS1z
dHJpbmciOwotICAgICAgICAgICAgICAgIHNwYW4uYXBwZW5kQ2hpbGQodG9BcHBlbmQpOwotICAg
ICAgICAgICAgICAgIGEuYXBwZW5kQ2hpbGQoc3Bhbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICByZXR1cm4gYTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFN0cmluZy5mb3JtYXQgZG9l
cyB0cmVhdCBmb3JtYXR0ZWRSZXN1bHQgbGlrZSBhIEJ1aWxkZXIsIHJlc3VsdCBpcyBhbiBvYmpl
Y3QuCi0gICAgICAgIHJldHVybiBTdHJpbmcuZm9ybWF0KHBhcmFtZXRlcnNbMF0uZGVzY3JpcHRp
b24sIHBhcmFtZXRlcnMuc2xpY2UoMSksIGZvcm1hdHRlcnMsIGZvcm1hdHRlZFJlc3VsdCwgYXBw
ZW5kKTsKLSAgICB9LAotCi0gICAgZGVjb3JhdGVNZXNzYWdlRWxlbWVudDogZnVuY3Rpb24oZWxl
bWVudCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9lbGVtZW50KQotICAgICAgICAgICAgcmV0
dXJuIHRoaXMuX2VsZW1lbnQ7Ci0KLSAgICAgICAgZWxlbWVudC5tZXNzYWdlID0gdGhpczsKLSAg
ICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjb25zb2xlLW1lc3NhZ2UiKTsKLQotICAgICAg
ICB0aGlzLl9lbGVtZW50ID0gZWxlbWVudDsKLQotICAgICAgICBzd2l0Y2ggKHRoaXMubGV2ZWwp
IHsKLSAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VM
ZXZlbC5UaXA6Ci0gICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjb25zb2xl
LXRpcC1sZXZlbCIpOwotICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCJkYXRh
LWxhYmVscHJlZml4IiwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJUaXA6ICIpKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNz
YWdlLk1lc3NhZ2VMZXZlbC5Mb2c6Ci0gICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3Qu
YWRkKCJjb25zb2xlLWxvZy1sZXZlbCIpOwotICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0
cmlidXRlKCJkYXRhLWxhYmVscHJlZml4IiwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJMb2c6ICIp
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9y
LkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5EZWJ1ZzoKLSAgICAgICAgICAgICAgICBlbGVt
ZW50LmNsYXNzTGlzdC5hZGQoImNvbnNvbGUtZGVidWctbGV2ZWwiKTsKLSAgICAgICAgICAgICAg
ICBlbGVtZW50LnNldEF0dHJpYnV0ZSgiZGF0YS1sYWJlbHByZWZpeCIsIFdlYkluc3BlY3Rvci5V
SVN0cmluZygiRGVidWc6ICIpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5XYXJuaW5nOgot
ICAgICAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiY29uc29sZS13YXJuaW5nLWxl
dmVsIik7Ci0gICAgICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoImRhdGEtbGFiZWxw
cmVmaXgiLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIldhcm5pbmc6ICIpKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdl
Lk1lc3NhZ2VMZXZlbC5FcnJvcjoKLSAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5h
ZGQoImNvbnNvbGUtZXJyb3ItbGV2ZWwiKTsKLSAgICAgICAgICAgICAgICBlbGVtZW50LnNldEF0
dHJpYnV0ZSgiZGF0YS1sYWJlbHByZWZpeCIsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiRXJyb3I6
ICIpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0
aGlzLnR5cGUgPT09IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5TdGFy
dEdyb3VwIHx8IHRoaXMudHlwZSA9PT0gV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3Nh
Z2VUeXBlLlN0YXJ0R3JvdXBDb2xsYXBzZWQpCi0gICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlz
dC5hZGQoImNvbnNvbGUtZ3JvdXAtdGl0bGUiKTsKLQotICAgICAgICBlbGVtZW50LmFwcGVuZENo
aWxkKHRoaXMuZm9ybWF0dGVkTWVzc2FnZSk7Ci0KLSAgICAgICAgaWYgKHRoaXMucmVwZWF0Q291
bnQgPiAxKQotICAgICAgICAgICAgdGhpcy51cGRhdGVSZXBlYXRDb3VudCgpOwotCi0gICAgICAg
IHJldHVybiBlbGVtZW50OwotICAgIH0sCi0KLSAgICB0b01lc3NhZ2VFbGVtZW50OiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fZWxlbWVudCkKLSAgICAgICAgICAgIHJldHVy
biB0aGlzLl9lbGVtZW50OwotCi0gICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgiZGl2Iik7Ci0KLSAgICAgICAgcmV0dXJuIHRoaXMuZGVjb3JhdGVNZXNzYWdlRWxl
bWVudChlbGVtZW50KTsKLSAgICB9LAotCi0gICAgX3BvcHVsYXRlU3RhY2tUcmFjZVRyZWVFbGVt
ZW50OiBmdW5jdGlvbihwYXJlbnRUcmVlRWxlbWVudCkKLSAgICB7Ci0gICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgdGhpcy5fc3RhY2tUcmFjZS5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAg
dmFyIGZyYW1lID0gdGhpcy5fc3RhY2tUcmFjZVtpXTsKLQotICAgICAgICAgICAgdmFyIGNvbnRl
bnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICAgICAgICAgIHZhciBtZXNz
YWdlVGV4dEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci0gICAgICAg
ICAgICBtZXNzYWdlVGV4dEVsZW1lbnQuY2xhc3NOYW1lID0gImNvbnNvbGUtbWVzc2FnZS10ZXh0
IjsKLSAgICAgICAgICAgIHZhciBmdW5jdGlvbk5hbWUgPSBmcmFtZS5mdW5jdGlvbk5hbWUgfHwg
V2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIoYW5vbnltb3VzIGZ1bmN0aW9uKSIpOwotICAgICAgICAg
ICAgbWVzc2FnZVRleHRFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2Rl
KGZ1bmN0aW9uTmFtZSkpOwotICAgICAgICAgICAgY29udGVudC5hcHBlbmRDaGlsZChtZXNzYWdl
VGV4dEVsZW1lbnQpOwotCi0gICAgICAgICAgICBpZiAoZnJhbWUudXJsICYmICF0aGlzLl9zaG91
bGRIaWRlVVJMKGZyYW1lLnVybCkpIHsKLSAgICAgICAgICAgICAgICB2YXIgdXJsRWxlbWVudCA9
IHRoaXMuX2xpbmtpZnlDYWxsRnJhbWUoZnJhbWUpOwotICAgICAgICAgICAgICAgIGNvbnRlbnQu
YXBwZW5kQ2hpbGQodXJsRWxlbWVudCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZh
ciB0cmVlRWxlbWVudCA9IG5ldyBUcmVlRWxlbWVudChjb250ZW50KTsKLSAgICAgICAgICAgIHBh
cmVudFRyZWVFbGVtZW50LmFwcGVuZENoaWxkKHRyZWVFbGVtZW50KTsKLSAgICAgICAgfQotICAg
IH0sCi0KLSAgICB1cGRhdGVSZXBlYXRDb3VudDogZnVuY3Rpb24oKSB7Ci0gICAgICAgIGlmICgh
dGhpcy5yZXBlYXRDb3VudEVsZW1lbnQpIHsKLSAgICAgICAgICAgIHRoaXMucmVwZWF0Q291bnRF
bGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwotICAgICAgICAgICAgdGhp
cy5yZXBlYXRDb3VudEVsZW1lbnQuY2xhc3NOYW1lID0gImJ1YmJsZSI7Ci0KLSAgICAgICAgICAg
IHRoaXMuX2VsZW1lbnQuaW5zZXJ0QmVmb3JlKHRoaXMucmVwZWF0Q291bnRFbGVtZW50LCB0aGlz
Ll9lbGVtZW50LmZpcnN0Q2hpbGQpOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMucmVwZWF0Q291
bnRFbGVtZW50LnRleHRDb250ZW50ID0gdGhpcy5yZXBlYXRDb3VudDsKLSAgICB9LAotCi0gICAg
dG9TdHJpbmc6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBzb3VyY2VTdHJpbmc7Ci0g
ICAgICAgIHN3aXRjaCAodGhpcy5zb3VyY2UpIHsKLSAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVj
dG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VTb3VyY2UuSFRNTDoKLSAgICAgICAgICAgICAgICBz
b3VyY2VTdHJpbmcgPSAiSFRNTCI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNlLlhNTDoKLSAg
ICAgICAgICAgICAgICBzb3VyY2VTdHJpbmcgPSAiWE1MIjsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VT
b3VyY2UuSlM6Ci0gICAgICAgICAgICAgICAgc291cmNlU3RyaW5nID0gIkpTIjsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNz
YWdlLk1lc3NhZ2VTb3VyY2UuTmV0d29yazoKLSAgICAgICAgICAgICAgICBzb3VyY2VTdHJpbmcg
PSAiTmV0d29yayI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdl
Ykluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNlLkNvbnNvbGVBUEk6Ci0gICAg
ICAgICAgICAgICAgc291cmNlU3RyaW5nID0gIkNvbnNvbGVBUEkiOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVz
c2FnZVNvdXJjZS5PdGhlcjoKLSAgICAgICAgICAgICAgICBzb3VyY2VTdHJpbmcgPSAiT3RoZXIi
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIHR5cGVT
dHJpbmc7Ci0gICAgICAgIHN3aXRjaCAodGhpcy50eXBlKSB7Ci0gICAgICAgICAgICBjYXNlIFdl
Ykluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5Mb2c6Ci0gICAgICAgICAgICAg
ICAgdHlwZVN0cmluZyA9ICJMb2ciOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuRGlyOgotICAg
ICAgICAgICAgICAgIHR5cGVTdHJpbmcgPSAiRGlyIjsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBl
LkRpclhNTDoKLSAgICAgICAgICAgICAgICB0eXBlU3RyaW5nID0gIkRpciBYTUwiOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1l
c3NhZ2UuTWVzc2FnZVR5cGUuVHJhY2U6Ci0gICAgICAgICAgICAgICAgdHlwZVN0cmluZyA9ICJU
cmFjZSI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdlYkluc3Bl
Y3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5TdGFydEdyb3VwQ29sbGFwc2VkOgotICAg
ICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuU3Rh
cnRHcm91cDoKLSAgICAgICAgICAgICAgICB0eXBlU3RyaW5nID0gIlN0YXJ0IEdyb3VwIjsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNv
bGVNZXNzYWdlLk1lc3NhZ2VUeXBlLkVuZEdyb3VwOgotICAgICAgICAgICAgICAgIHR5cGVTdHJp
bmcgPSAiRW5kIEdyb3VwIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNh
c2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLkFzc2VydDoKLSAgICAg
ICAgICAgICAgICB0eXBlU3RyaW5nID0gIkFzc2VydCI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlw
ZS5SZXN1bHQ6Ci0gICAgICAgICAgICAgICAgdHlwZVN0cmluZyA9ICJSZXN1bHQiOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHNvdXJjZVN0cmlu
ZyArICIgIiArIHR5cGVTdHJpbmcgKyAiICIgKyB0aGlzLmxldmVsU3RyaW5nICsgIjogIiArIHRo
aXMuZm9ybWF0dGVkTWVzc2FnZS50ZXh0Q29udGVudCArICJcbiIgKyB0aGlzLnVybCArICIgbGlu
ZSAiICsgdGhpcy5saW5lOwotICAgIH0sCi0KLSAgICBnZXQgdGV4dCgpCi0gICAgewotICAgICAg
ICByZXR1cm4gdGhpcy5fbWVzc2FnZVRleHQ7Ci0gICAgfSwKLQotICAgIGlzRXF1YWw6IGZ1bmN0
aW9uKG1zZykKLSAgICB7Ci0gICAgICAgIGlmICghbXNnKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgICAgIGlmICh0aGlzLl9zdGFja1RyYWNlKSB7Ci0gICAgICAgICAgICBpZiAo
IW1zZy5fc3RhY2tUcmFjZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICB2YXIgbCA9IHRoaXMuX3N0YWNrVHJhY2U7Ci0gICAgICAgICAgICB2YXIgciA9IG1zZy5f
c3RhY2tUcmFjZTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbC5sZW5ndGg7IGkr
KykgewotICAgICAgICAgICAgICAgIGlmIChsW2ldLnVybCAhPT0gcltpXS51cmwgfHwKLSAgICAg
ICAgICAgICAgICAgICAgbFtpXS5mdW5jdGlvbk5hbWUgIT09IHJbaV0uZnVuY3Rpb25OYW1lIHx8
Ci0gICAgICAgICAgICAgICAgICAgIGxbaV0ubGluZU51bWJlciAhPT0gcltpXS5saW5lTnVtYmVy
IHx8Ci0gICAgICAgICAgICAgICAgICAgIGxbaV0uY29sdW1uTnVtYmVyICE9PSByW2ldLmNvbHVt
bk51bWJlcikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuICh0aGlzLnNvdXJjZSA9PT0gbXNnLnNvdXJj
ZSkKLSAgICAgICAgICAgICYmICh0aGlzLnR5cGUgPT09IG1zZy50eXBlKQotICAgICAgICAgICAg
JiYgKHRoaXMubGV2ZWwgPT09IG1zZy5sZXZlbCkKLSAgICAgICAgICAgICYmICh0aGlzLmxpbmUg
PT09IG1zZy5saW5lKQotICAgICAgICAgICAgJiYgKHRoaXMudXJsID09PSBtc2cudXJsKQotICAg
ICAgICAgICAgJiYgKHRoaXMubWVzc2FnZSA9PT0gbXNnLm1lc3NhZ2UpCi0gICAgICAgICAgICAm
JiAodGhpcy5fcmVxdWVzdCA9PT0gbXNnLl9yZXF1ZXN0KTsKLSAgICB9LAotCi0gICAgZ2V0IHN0
YWNrVHJhY2UoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3N0YWNrVHJhY2U7Ci0gICAg
fSwKLQotICAgIGNsb25lOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gV2ViSW5z
cGVjdG9yLkNvbnNvbGVNZXNzYWdlLmNyZWF0ZSh0aGlzLnNvdXJjZSwgdGhpcy5sZXZlbCwgdGhp
cy5fbWVzc2FnZVRleHQsIHRoaXMudHlwZSwgdGhpcy51cmwsIHRoaXMubGluZSwgdGhpcy5jb2x1
bW4sIHRoaXMucmVwZWF0Q291bnQsIHRoaXMuX3BhcmFtZXRlcnMsIHRoaXMuX3N0YWNrVHJhY2Us
IHRoaXMuX3JlcXVlc3QpOwotICAgIH0sCi0KLSAgICBnZXQgbGV2ZWxTdHJpbmcoKQotICAgIHsK
LSAgICAgICAgc3dpdGNoICh0aGlzLmxldmVsKSB7Ci0gICAgICAgICAgICBjYXNlIFdlYkluc3Bl
Y3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuVGlwOgotICAgICAgICAgICAgICAgIHJl
dHVybiAiVGlwIjsKLSAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdl
Lk1lc3NhZ2VMZXZlbC5Mb2c6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJMb2ciOwotICAgICAg
ICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLldhcm5p
bmc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJXYXJuaW5nIjsKLSAgICAgICAgICAgIGNhc2Ug
V2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5EZWJ1ZzoKLSAgICAgICAg
ICAgICAgICByZXR1cm4gIkRlYnVnIjsKLSAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNv
bnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5FcnJvcjoKLSAgICAgICAgICAgICAgICByZXR1cm4g
IkVycm9yIjsKLSAgICAgICAgfQotICAgIH0sCi0KLSAgICBnZXQgY2xpcGJvYXJkUHJlZml4U3Ry
aW5nKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAiWyIgKyB0aGlzLmxldmVsU3RyaW5nICsgIl0g
IjsKLSAgICB9LAotCi0gICAgdG9DbGlwYm9hcmRTdHJpbmc6IGZ1bmN0aW9uKGlzUHJlZml4T3B0
aW9uYWwpCi0gICAgewotICAgICAgICB2YXIgaXNUcmFjZSA9IHRoaXMuX3Nob3VsZER1bXBTdGFj
a1RyYWNlKCk7Ci0KLSAgICAgICAgdmFyIGNsaXBib2FyZFN0cmluZyA9ICIiOwotICAgICAgICBp
ZiAodGhpcy5fZm9ybWF0dGVkTWVzc2FnZSAmJiAhaXNUcmFjZSkKLSAgICAgICAgICAgIGNsaXBi
b2FyZFN0cmluZyA9IHRoaXMuX2Zvcm1hdHRlZE1lc3NhZ2UucXVlcnlTZWxlY3Rvcigic3BhbiIp
LmlubmVyVGV4dDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2xpcGJvYXJkU3RyaW5nID0g
dGhpcy50eXBlID09PSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuVHJh
Y2UgPyAiY29uc29sZS50cmFjZSgpIiA6IHRoaXMuX21lc3NhZ2UgfHwgdGhpcy5fbWVzc2FnZVRl
eHQ7Ci0KLSAgICAgICAgaWYgKCFpc1ByZWZpeE9wdGlvbmFsIHx8IHRoaXMuZW5mb3JjZXNDbGlw
Ym9hcmRQcmVmaXhTdHJpbmcpCi0gICAgICAgICAgICBjbGlwYm9hcmRTdHJpbmcgPSB0aGlzLmNs
aXBib2FyZFByZWZpeFN0cmluZyArIGNsaXBib2FyZFN0cmluZzsKLQotICAgICAgICBpZiAoaXNU
cmFjZSkgewotICAgICAgICAgICAgdGhpcy5fc3RhY2tUcmFjZS5mb3JFYWNoKGZ1bmN0aW9uKGZy
YW1lKSB7Ci0gICAgICAgICAgICAgICAgY2xpcGJvYXJkU3RyaW5nICs9ICJcblx0IiArIChmcmFt
ZS5mdW5jdGlvbk5hbWUgfHwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIoYW5vbnltb3VzIGZ1bmN0
aW9uKSIpKTsKLSAgICAgICAgICAgICAgICBpZiAoZnJhbWUudXJsKQotICAgICAgICAgICAgICAg
ICAgICBjbGlwYm9hcmRTdHJpbmcgKz0gIiAoIiArIFdlYkluc3BlY3Rvci5kaXNwbGF5TmFtZUZv
clVSTChmcmFtZS51cmwpICsgIiwgbGluZSAiICsgZnJhbWUubGluZU51bWJlciArICIpIjsKLSAg
ICAgICAgICAgIH0pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdmFyIHJlcGVhdFN0
cmluZyA9IHRoaXMucmVwZWF0Q291bnQgPiAxID8gIngiICsgdGhpcy5yZXBlYXRDb3VudCA6ICIi
OwotCi0gICAgICAgICAgICB2YXIgdXJsTGluZSA9ICIiOwotICAgICAgICAgICAgaWYgKHRoaXMu
dXJsKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGNvbXBvbmVudHMgPSBbV2ViSW5zcGVjdG9yLmRp
c3BsYXlOYW1lRm9yVVJMKHRoaXMudXJsKSwgImxpbmUgIiArIHRoaXMubGluZV07Ci0gICAgICAg
ICAgICAgICAgaWYgKHJlcGVhdFN0cmluZykKLSAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50
cy5wdXNoKHJlcGVhdFN0cmluZyk7Ci0gICAgICAgICAgICAgICAgdXJsTGluZSA9ICIgKCIgKyBj
b21wb25lbnRzLmpvaW4oIiwgIikgKyAiKSI7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHJlcGVh
dFN0cmluZykKLSAgICAgICAgICAgICAgICB1cmxMaW5lID0gIiAoIiArIHJlcGVhdFN0cmluZyAr
ICIpIjsKLQotICAgICAgICAgICAgaWYgKHVybExpbmUpIHsKLSAgICAgICAgICAgICAgICB2YXIg
bGluZXMgPSBjbGlwYm9hcmRTdHJpbmcuc3BsaXQoIlxuIik7Ci0gICAgICAgICAgICAgICAgbGlu
ZXNbMF0gKz0gdXJsTGluZTsKLSAgICAgICAgICAgICAgICBjbGlwYm9hcmRTdHJpbmcgPSBsaW5l
cy5qb2luKCJcbiIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJu
IGNsaXBib2FyZFN0cmluZzsKLSAgICB9Ci19OwotCi1XZWJJbnNwZWN0b3IuQ29uc29sZU1lc3Nh
Z2VJbXBsLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2Uu
cHJvdG90eXBlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvVmlld3MvQ29uc29sZU1lc3NhZ2VWaWV3LmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvVmlld3MvQ29uc29sZU1lc3NhZ2VWaWV3LmpzCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjY1ZTUwYTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Db25zb2xlTWVzc2FnZVZpZXcuanMKQEAg
LTAsMCArMSw3OTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMTMgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBKb3Nl
cGggUGVjb3Jhcm8KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9m
IEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
CisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KworV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlVmlldyA9IGZ1bmN0aW9uKG1vZGVsKQorewor
CXRoaXMubW9kZWwgPSBtb2RlbDsKKworCXRoaXMuX2N1c3RvbUZvcm1hdHRlcnMgPSB7CisJCSJv
YmplY3QiOiB0aGlzLl9mb3JtYXRQYXJhbWV0ZXJBc09iamVjdCwKKwkJImVycm9yIjogdGhpcy5f
Zm9ybWF0UGFyYW1ldGVyQXNPYmplY3QsCisJCSJtYXAiOiB0aGlzLl9mb3JtYXRQYXJhbWV0ZXJB
c09iamVjdCwKKwkJInNldCI6IHRoaXMuX2Zvcm1hdFBhcmFtZXRlckFzT2JqZWN0LAorCQkid2Vh
a21hcCI6IHRoaXMuX2Zvcm1hdFBhcmFtZXRlckFzT2JqZWN0LAorCQkiaXRlcmF0b3IiOiB0aGlz
Ll9mb3JtYXRQYXJhbWV0ZXJBc09iamVjdCwKKwkJImFycmF5IjogIHRoaXMuX2Zvcm1hdFBhcmFt
ZXRlckFzQXJyYXksCisJCSJub2RlIjogICB0aGlzLl9mb3JtYXRQYXJhbWV0ZXJBc05vZGUsCisJ
CSJzdHJpbmciOiB0aGlzLl9mb3JtYXRQYXJhbWV0ZXJBc1N0cmluZworCX07Cit9OworCisKK1dl
Ykluc3BlY3Rvci5Db25zb2xlTWVzc2FnZVZpZXcucHJvdG90eXBlID0geworCWVuZm9yY2VzQ2xp
cGJvYXJkUHJlZml4U3RyaW5nOiB0cnVlLAorCisJZ2V0IHNvdXJjZSgpIHsKKwkJY29uc29sZS5l
cnJvcigiQ29uc29sZU1lc3NhZ2VWaWV3I3NvdXJjZSBpcyBkZXByZWNhdGVkLCB1c2UgQ29uc29s
ZU1lc3NhZ2VWaWV3I21vZGVsLnNvdXJjZSBpbnN0ZWFkIik7CisJCXJldHVybiB0aGlzLm1vZGVs
LnNvdXJjZTsKKwl9LAorCXNldCBzb3VyY2UodmFsdWUpIHsKKwkJY29uc29sZS5lcnJvcigiQ29u
c29sZU1lc3NhZ2VWaWV3I3NvdXJjZSBpcyBkZXByZWNhdGVkLCB1c2UgQ29uc29sZU1lc3NhZ2VW
aWV3I21vZGVsLnNvdXJjZSBpbnN0ZWFkIik7CisJCXRoaXMubW9kZWwuc291cmNlID0gdmFsdWU7
CisJfSwKKworCWdldCBsZXZlbCgpIHsKKwkJY29uc29sZS5lcnJvcigiQ29uc29sZU1lc3NhZ2VW
aWV3I2xldmVsIGlzIGRlcHJlY2F0ZWQsIHVzZSBDb25zb2xlTWVzc2FnZVZpZXcjbW9kZWwubGV2
ZWwgaW5zdGVhZCIpOworCQlyZXR1cm4gdGhpcy5tb2RlbC5sZXZlbDsKKwl9LAorCXNldCBsZXZl
bCh2YWx1ZSkgeworCQljb25zb2xlLmVycm9yKCJDb25zb2xlTWVzc2FnZVZpZXcjbGV2ZWwgaXMg
ZGVwcmVjYXRlZCwgdXNlIENvbnNvbGVNZXNzYWdlVmlldyNtb2RlbC5sZXZlbCBpbnN0ZWFkIik7
CisJCXRoaXMubW9kZWwubGV2ZWwgPSB2YWx1ZTsKKwl9LAorCisJZ2V0IF9tZXNzYWdlVGV4dCgp
IHsKKwkJY29uc29sZS5lcnJvcigiQ29uc29sZU1lc3NhZ2VWaWV3I19tZXNzYWdlVGV4dCBpcyBk
ZXByZWNhdGVkLCB1c2UgQ29uc29sZU1lc3NhZ2VWaWV3I21vZGVsLl9tZXNzYWdlVGV4dCBpbnN0
ZWFkIik7CisJCXJldHVybiB0aGlzLm1vZGVsLl9tZXNzYWdlVGV4dDsKKwl9LAorCXNldCBfbWVz
c2FnZVRleHQodmFsdWUpIHsKKwkJY29uc29sZS5lcnJvcigiQ29uc29sZU1lc3NhZ2VWaWV3I19t
ZXNzYWdlVGV4dCBpcyBkZXByZWNhdGVkLCB1c2UgQ29uc29sZU1lc3NhZ2VWaWV3I21vZGVsLl9t
ZXNzYWdlVGV4dCBpbnN0ZWFkIik7CisJCXRoaXMubW9kZWwuX21lc3NhZ2VUZXh0ID0gdmFsdWU7
CisJfSwKKworCWdldCBfbGlua2lmaWVyKCkgeworCQljb25zb2xlLmVycm9yKCJDb25zb2xlTWVz
c2FnZVZpZXcjX2xpbmtpZmllciBpcyBkZXByZWNhdGVkLCB1c2UgQ29uc29sZU1lc3NhZ2VWaWV3
I21vZGVsLl9saW5raWZpZXIgaW5zdGVhZCIpOworCQlyZXR1cm4gdGhpcy5tb2RlbC5fbGlua2lm
aWVyOworCX0sCisJc2V0IF9saW5raWZpZXIodmFsdWUpIHsKKwkJY29uc29sZS5lcnJvcigiQ29u
c29sZU1lc3NhZ2VWaWV3I19saW5raWZpZXIgaXMgZGVwcmVjYXRlZCwgdXNlIENvbnNvbGVNZXNz
YWdlVmlldyNtb2RlbC5fbGlua2lmaWVyIGluc3RlYWQiKTsKKwkJdGhpcy5tb2RlbC5fbGlua2lm
aWVyID0gdmFsdWU7CisJfSwKKworCWdldCB0eXBlKCkgeworCQljb25zb2xlLmVycm9yKCJDb25z
b2xlTWVzc2FnZVZpZXcjdHlwZSBpcyBkZXByZWNhdGVkLCB1c2UgQ29uc29sZU1lc3NhZ2VWaWV3
I21vZGVsLnR5cGUgaW5zdGVhZCIpOworCQlyZXR1cm4gdGhpcy5tb2RlbC50eXBlIHx8ICcnOwor
CX0sCisJc2V0IHR5cGUodmFsdWUpIHsKKwkJY29uc29sZS5lcnJvcigiQ29uc29sZU1lc3NhZ2VW
aWV3I3R5cGUgaXMgZGVwcmVjYXRlZCwgdXNlIENvbnNvbGVNZXNzYWdlVmlldyNtb2RlbC50eXBl
IGluc3RlYWQiKTsKKwkJdGhpcy5tb2RlbC50eXBlID0gdmFsdWU7CisJfSwKKworCWdldCB1cmwo
KSB7CisJCWNvbnNvbGUuZXJyb3IoIkNvbnNvbGVNZXNzYWdlVmlldyN1cmwgaXMgZGVwcmVjYXRl
ZCwgdXNlIENvbnNvbGVNZXNzYWdlVmlldyNtb2RlbC51cmwgaW5zdGVhZCIpOworCQlyZXR1cm4g
dGhpcy5tb2RlbC51cmwgfHwgJyc7CisJfSwKKwlzZXQgdXJsKHZhbHVlKSB7CisJCWNvbnNvbGUu
ZXJyb3IoIkNvbnNvbGVNZXNzYWdlVmlldyN1cmwgaXMgZGVwcmVjYXRlZCwgdXNlIENvbnNvbGVN
ZXNzYWdlVmlldyNtb2RlbC51cmwgaW5zdGVhZCIpOworCQl0aGlzLm1vZGVsLnVybCA9IHZhbHVl
OworCX0sCisKKwlnZXQgbGluZSgpIHsKKwkJY29uc29sZS5lcnJvcigiQ29uc29sZU1lc3NhZ2VW
aWV3I2xpbmUgaXMgZGVwcmVjYXRlZCwgdXNlIENvbnNvbGVNZXNzYWdlVmlldyNtb2RlbC5saW5l
IGluc3RlYWQiKTsKKwkJcmV0dXJuIHRoaXMubW9kZWwubGluZSB8fCAnJzsKKwl9LAorCXNldCBs
aW5lKHZhbHVlKSB7CisJCWNvbnNvbGUuZXJyb3IoIkNvbnNvbGVNZXNzYWdlVmlldyNsaW5lIGlz
IGRlcHJlY2F0ZWQsIHVzZSBDb25zb2xlTWVzc2FnZVZpZXcjbW9kZWwubGluZSBpbnN0ZWFkIik7
CisJCXRoaXMubW9kZWwubGluZSA9IHZhbHVlOworCX0sCisKKwlnZXQgY29sdW1uKCkgeworCQlj
b25zb2xlLmVycm9yKCJDb25zb2xlTWVzc2FnZVZpZXcjY29sdW1uIGlzIGRlcHJlY2F0ZWQsIHVz
ZSBDb25zb2xlTWVzc2FnZVZpZXcjbW9kZWwuY29sdW1uIGluc3RlYWQiKTsKKwkJcmV0dXJuIHRo
aXMubW9kZWwuY29sdW1uIHx8ICcnOworCX0sCisJc2V0IGNvbHVtbih2YWx1ZSkgeworCQljb25z
b2xlLmVycm9yKCJDb25zb2xlTWVzc2FnZVZpZXcjY29sdW1uIGlzIGRlcHJlY2F0ZWQsIHVzZSBD
b25zb2xlTWVzc2FnZVZpZXcjbW9kZWwuY29sdW1uIGluc3RlYWQiKTsKKwkJdGhpcy5tb2RlbC5j
b2x1bW4gPSB2YWx1ZTsKKwl9LAorCisJZ2V0IHJlcGVhdENvdW50KCkgeworCQljb25zb2xlLmVy
cm9yKCJDb25zb2xlTWVzc2FnZVZpZXcjcmVwZWF0Q291bnQgaXMgZGVwcmVjYXRlZCwgdXNlIENv
bnNvbGVNZXNzYWdlVmlldyNtb2RlbC5yZXBlYXRDb3VudCBpbnN0ZWFkIik7CisJCXJldHVybiB0
aGlzLm1vZGVsLnJlcGVhdENvdW50OworCX0sCisJc2V0IHJlcGVhdENvdW50KGNvdW50KSB7CisJ
CWNvbnNvbGUuZXJyb3IoIkNvbnNvbGVNZXNzYWdlVmlldyNyZXBlYXRDb3VudCBpcyBkZXByZWNh
dGVkLCB1c2UgQ29uc29sZU1lc3NhZ2VWaWV3I21vZGVsLnJlcGVhdENvdW50IGluc3RlYWQiKTsK
KwkJdGhpcy5tb2RlbC5yZXBlYXRDb3VudCA9IGNvdW50OworCX0sCisKKwlnZXQgcmVwZWF0RGVs
dGEoKSB7CisJCWNvbnNvbGUuZXJyb3IoIkNvbnNvbGVNZXNzYWdlVmlldyNyZXBlYXREZWx0YSBp
cyBkZXByZWNhdGVkLCB1c2UgQ29uc29sZU1lc3NhZ2VWaWV3I21vZGVsLnJlcGVhdERlbHRhIGlu
c3RlYWQiKTsKKwkJcmV0dXJuIHRoaXMubW9kZWwucmVwZWF0RGVsdGE7CisJfSwKKwlzZXQgcmVw
ZWF0RGVsdGEodmFsdWUpIHsKKwkJY29uc29sZS5lcnJvcigiQ29uc29sZU1lc3NhZ2VWaWV3I3Jl
cGVhdERlbHRhIGlzIGRlcHJlY2F0ZWQsIHVzZSBDb25zb2xlTWVzc2FnZVZpZXcjbW9kZWwucmVw
ZWF0RGVsdGEgaW5zdGVhZCIpOworCQl0aGlzLm1vZGVsLnJlcGVhdERlbHRhID0gdmFsdWU7CisJ
fSwKKworCWdldCB0b3RhbFJlcGVhdENvdW50KCkgeworCQljb25zb2xlLmVycm9yKCJDb25zb2xl
TWVzc2FnZVZpZXcjdG90YWxSZXBlYXRDb3VudCBpcyBkZXByZWNhdGVkLCB1c2UgQ29uc29sZU1l
c3NhZ2VWaWV3I21vZGVsLnRvdGFsUmVwZWF0Q291bnQgaW5zdGVhZCIpOworCQlyZXR1cm4gdGhp
cy5tb2RlbC50b3RhbFJlcGVhdENvdW50OworCX0sCisJc2V0IHRvdGFsUmVwZWF0Q291bnQodmFs
dWUpIHsKKwkJY29uc29sZS5lcnJvcigiQ29uc29sZU1lc3NhZ2VWaWV3I3RvdGFsUmVwZWF0Q291
bnQgaXMgZGVwcmVjYXRlZCwgdXNlIENvbnNvbGVNZXNzYWdlVmlldyNtb2RlbC50b3RhbFJlcGVh
dENvdW50IGluc3RlYWQiKTsKKwkJdGhpcy5tb2RlbC50b3RhbFJlcGVhdENvdW50ID0gdmFsdWU7
CisJfSwKKworCWdldCBfcGFyYW1ldGVycygpIHsKKwkJY29uc29sZS5lcnJvcigiQ29uc29sZU1l
c3NhZ2VWaWV3I19wYXJhbWV0ZXJzIGlzIGRlcHJlY2F0ZWQsIHVzZSBDb25zb2xlTWVzc2FnZVZp
ZXcjbW9kZWwuX3BhcmFtZXRlcnMgaW5zdGVhZCIpOworCQlyZXR1cm4gdGhpcy5tb2RlbC5fcGFy
YW1ldGVyczsKKwl9LAorCXNldCBfcGFyYW1ldGVycyh2YWx1ZSkgeworCQljb25zb2xlLmVycm9y
KCJDb25zb2xlTWVzc2FnZVZpZXcjX3BhcmFtZXRlcnMgaXMgZGVwcmVjYXRlZCwgdXNlIENvbnNv
bGVNZXNzYWdlVmlldyNtb2RlbC5fcGFyYW1ldGVycyBpbnN0ZWFkIik7CisJCXRoaXMubW9kZWwu
X3BhcmFtZXRlcnMgPSB2YWx1ZTsKKwl9LAorCisJZ2V0IF9zdGFja1RyYWNlKCkgeworCQljb25z
b2xlLmVycm9yKCJDb25zb2xlTWVzc2FnZVZpZXcjX3N0YWNrVHJhY2UgaXMgZGVwcmVjYXRlZCwg
dXNlIENvbnNvbGVNZXNzYWdlVmlldyNtb2RlbC5fc3RhY2tUcmFjZSBpbnN0ZWFkIik7CisJCXJl
dHVybiB0aGlzLm1vZGVsLl9zdGFja1RyYWNlOworCX0sCisJc2V0IF9zdGFja1RyYWNlKHZhbHVl
KSB7CisJCWNvbnNvbGUuZXJyb3IoIkNvbnNvbGVNZXNzYWdlVmlldyNfc3RhY2tUcmFjZSBpcyBk
ZXByZWNhdGVkLCB1c2UgQ29uc29sZU1lc3NhZ2VWaWV3I21vZGVsLl9zdGFja1RyYWNlIGluc3Rl
YWQiKTsKKwkJdGhpcy5tb2RlbC5fc3RhY2tUcmFjZSA9IHZhbHVlOworCX0sCisKKwlnZXQgX3Jl
cXVlc3QoKSB7CisJCWNvbnNvbGUuZXJyb3IoIkNvbnNvbGVNZXNzYWdlVmlldyNfcmVxdWVzdCBp
cyBkZXByZWNhdGVkLCB1c2UgQ29uc29sZU1lc3NhZ2VWaWV3I21vZGVsLl9yZXF1ZXN0IGluc3Rl
YWQiKTsKKwkJcmV0dXJuIHRoaXMubW9kZWwuX3JlcXVlc3Q7CisJfSwKKwlzZXQgX3JlcXVlc3Qo
dmFsdWUpIHsKKwkJY29uc29sZS5lcnJvcigiQ29uc29sZU1lc3NhZ2VWaWV3I19yZXF1ZXN0IGlz
IGRlcHJlY2F0ZWQsIHVzZSBDb25zb2xlTWVzc2FnZVZpZXcjbW9kZWwuX3JlcXVlc3QgaW5zdGVh
ZCIpOworCQl0aGlzLm1vZGVsLl9yZXF1ZXN0ID0gdmFsdWU7CisJfSwKKworCV9mb3JtYXRNZXNz
YWdlOiBmdW5jdGlvbigpCisJeworCQl0aGlzLl9mb3JtYXR0ZWRNZXNzYWdlID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgic3BhbiIpOworCQl0aGlzLl9mb3JtYXR0ZWRNZXNzYWdlLmNsYXNzTmFt
ZSA9ICJjb25zb2xlLW1lc3NhZ2UtdGV4dCI7CisKKwkJdmFyIG1lc3NhZ2VUZXh0OworCQl2YXIg
bW9kZWwgPSB0aGlzLm1vZGVsOworCisJCXZhciB1cmwgPSBtb2RlbC51cmw7CisJCXZhciBsaW5l
ID0gbW9kZWwubGluZTsKKworCQlpZiAobW9kZWwuc291cmNlID09PSBXZWJJbnNwZWN0b3IuQ29u
c29sZU1lc3NhZ2UuTWVzc2FnZVNvdXJjZS5Db25zb2xlQVBJKSB7CisJCQlzd2l0Y2ggKG1vZGVs
LnR5cGUpIHsKKwkJCQljYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlw
ZS5UcmFjZToKKwkJCQkJbWVzc2FnZVRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiY29u
c29sZS50cmFjZSgpIik7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgV2ViSW5zcGVjdG9yLkNvbnNv
bGVNZXNzYWdlLk1lc3NhZ2VUeXBlLkFzc2VydDoKKwkJCQkJdmFyIGFyZ3MgPSBbV2ViSW5zcGVj
dG9yLlVJU3RyaW5nKCJBc3NlcnRpb24gZmFpbGVkOiIpXTsKKwkJCQkJaWYgKG1vZGVsLl9wYXJh
bWV0ZXJzKQorCQkJCQkJYXJncyA9IGFyZ3MuY29uY2F0KG1vZGVsLl9wYXJhbWV0ZXJzKTsKKwkJ
CQkJbWVzc2FnZVRleHQgPSB0aGlzLl9mb3JtYXQoYXJncyk7CisJCQkJCWJyZWFrOworCQkJCWNh
c2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLkRpcjoKKwkJCQkJdmFy
IG9iaiA9IG1vZGVsLl9wYXJhbWV0ZXJzID8gbW9kZWwuX3BhcmFtZXRlcnNbMF0gOiB1bmRlZmlu
ZWQ7CisJCQkJCXZhciBhcmdzID0gWyIlTyIsIG9ial07CisJCQkJCW1lc3NhZ2VUZXh0ID0gdGhp
cy5fZm9ybWF0KGFyZ3MpOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQl2YXIgYXJn
cyA9IG1vZGVsLl9wYXJhbWV0ZXJzIHx8IFttb2RlbC5fbWVzc2FnZVRleHRdOworCQkJCQltZXNz
YWdlVGV4dCA9IHRoaXMuX2Zvcm1hdChhcmdzKTsKKwkJCX0KKwkJfSBlbHNlIGlmIChtb2RlbC5z
b3VyY2UgPT09IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNlLk5ldHdv
cmspIHsKKwkJCXZhciByZXF1ZXN0ID0gbW9kZWwuX3JlcXVlc3Q7CisJCQlpZiAocmVxdWVzdCkg
eworCQkJCW1vZGVsLl9zdGFja1RyYWNlID0gcmVxdWVzdC5zdGFja1RyYWNlOworCQkJCWlmIChy
ZXF1ZXN0LmluaXRpYXRvciAmJiByZXF1ZXN0LmluaXRpYXRvci51cmwpIHsKKwkJCQkJdXJsID0g
cmVxdWVzdC5pbml0aWF0b3IudXJsOworCQkJCQlsaW5lID0gcmVxdWVzdC5pbml0aWF0b3IubGlu
ZU51bWJlcjsKKwkJCQl9CisJCQkJbWVzc2FnZVRleHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJzcGFuIik7CisJCQkJaWYgKG1vZGVsLmxldmVsID09PSBXZWJJbnNwZWN0b3IuQ29uc29sZU1l
c3NhZ2UuTWVzc2FnZUxldmVsLkVycm9yKSB7CisJCQkJCW1lc3NhZ2VUZXh0LmFwcGVuZENoaWxk
KGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHJlcXVlc3QucmVxdWVzdE1ldGhvZCArICIgIikpOwor
CQkJCQltZXNzYWdlVGV4dC5hcHBlbmRDaGlsZChXZWJJbnNwZWN0b3IubGlua2lmeVJlcXVlc3RB
c05vZGUocmVxdWVzdCkpOworCQkJCQlpZiAocmVxdWVzdC5mYWlsZWQpCisJCQkJCQltZXNzYWdl
VGV4dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiICIgKyByZXF1ZXN0Lmxv
Y2FsaXplZEZhaWxEZXNjcmlwdGlvbikpOworCQkJCQllbHNlCisJCQkJCQltZXNzYWdlVGV4dC5h
cHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiICIgKyByZXF1ZXN0LnN0YXR1c0Nv
ZGUgKyAiICgiICsgcmVxdWVzdC5zdGF0dXNUZXh0ICsgIikiKSk7CisJCQkJfSBlbHNlIHsKKwkJ
CQkJdmFyIGZyYWdtZW50ID0gV2ViSW5zcGVjdG9yLmxpbmtpZnlTdHJpbmdBc0ZyYWdtZW50V2l0
aEN1c3RvbUxpbmtpZmllcihtb2RlbC5fbWVzc2FnZVRleHQsIFdlYkluc3BlY3Rvci5saW5raWZ5
UmVxdWVzdEFzTm9kZS5iaW5kKG51bGwsIHJlcXVlc3QsICIiKSk7CisJCQkJCW1lc3NhZ2VUZXh0
LmFwcGVuZENoaWxkKGZyYWdtZW50KTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWlmIChtb2Rl
bC51cmwpIHsKKwkJCQkJdmFyIGFuY2hvciA9IFdlYkluc3BlY3Rvci5saW5raWZ5VVJMQXNOb2Rl
KHVybCwgdXJsLCAiY29uc29sZS1tZXNzYWdlLXVybCIpOworCQkJCQl0aGlzLl9mb3JtYXR0ZWRN
ZXNzYWdlLmFwcGVuZENoaWxkKGFuY2hvcik7CisJCQkJfQorCQkJCW1lc3NhZ2VUZXh0ID0gdGhp
cy5fZm9ybWF0KFttb2RlbC5fbWVzc2FnZVRleHRdKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXZh
ciBhcmdzID0gbW9kZWwuX3BhcmFtZXRlcnMgfHwgW21vZGVsLl9tZXNzYWdlVGV4dF07CisJCQlt
ZXNzYWdlVGV4dCA9IHRoaXMuX2Zvcm1hdChhcmdzKTsKKwkJfQorCisJCWlmIChtb2RlbC5zb3Vy
Y2UgIT09IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNlLk5ldHdvcmsg
fHwgbW9kZWwuX3JlcXVlc3QpIHsKKwkJCXZhciBmaXJzdE5vbk5hdGl2ZUNhbGxGcmFtZSA9IG1v
ZGVsLmZpcnN0Tm9uTmF0aXZlQ2FsbEZyYW1lKCk7CisJCQlpZiAoZmlyc3ROb25OYXRpdmVDYWxs
RnJhbWUpIHsKKwkJCQl2YXIgdXJsRWxlbWVudCA9IHRoaXMuX2xpbmtpZnlDYWxsRnJhbWUoZmly
c3ROb25OYXRpdmVDYWxsRnJhbWUpOworCQkJCXRoaXMuX2Zvcm1hdHRlZE1lc3NhZ2UuYXBwZW5k
Q2hpbGQodXJsRWxlbWVudCk7CisJCQl9IGVsc2UgaWYgKHVybCAmJiAhdGhpcy5fc2hvdWxkSGlk
ZVVSTCh1cmwpKSB7CisJCQkJdmFyIHVybEVsZW1lbnQgPSB0aGlzLl9saW5raWZ5TG9jYXRpb24o
dXJsLCBsaW5lLCBtb2RlbC5jb2x1bW4pOworCQkJCXRoaXMuX2Zvcm1hdHRlZE1lc3NhZ2UuYXBw
ZW5kQ2hpbGQodXJsRWxlbWVudCk7CisJCQl9CisJCX0KKworCQl0aGlzLl9mb3JtYXR0ZWRNZXNz
YWdlLmFwcGVuZENoaWxkKG1lc3NhZ2VUZXh0KTsKKworCQlpZiAodGhpcy5zYXZlZFJlc3VsdElu
ZGV4KSB7CisJCQl2YXIgc2F2ZWRWYXJpYWJsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJzcGFuIik7CisJCQlzYXZlZFZhcmlhYmxlRWxlbWVudC5jbGFzc05hbWUgPSAiY29uc29s
ZS1zYXZlZC12YXJpYWJsZSI7CisJCQlzYXZlZFZhcmlhYmxlRWxlbWVudC50ZXh0Q29udGVudCA9
ICIgPSAkIiArIHRoaXMuc2F2ZWRSZXN1bHRJbmRleDsKKwkJCWlmICh0aGlzLl9vYmplY3RUcmVl
KQorCQkJCXRoaXMuX29iamVjdFRyZWUuYXBwZW5kVGl0bGVTdWZmaXgoc2F2ZWRWYXJpYWJsZUVs
ZW1lbnQpOworCQkJZWxzZQorCQkJCXRoaXMuX2Zvcm1hdHRlZE1lc3NhZ2UuYXBwZW5kQ2hpbGQo
c2F2ZWRWYXJpYWJsZUVsZW1lbnQpOworCQl9CisKKwkJaWYgKHRoaXMubW9kZWwuc2hvdWxkRHVt
cFN0YWNrVHJhY2UoKSkgeworCQkJdmFyIG9sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib2wi
KTsKKwkJCW9sLmNsYXNzTmFtZSA9ICJvdXRsaW5lLWRpc2Nsb3N1cmUiOworCQkJdmFyIHRyZWVP
dXRsaW5lID0gbmV3IFRyZWVPdXRsaW5lKG9sKTsKKworCQkJdmFyIGNvbnRlbnQgPSB0aGlzLl9m
b3JtYXR0ZWRNZXNzYWdlOworCQkJdmFyIHJvb3QgPSBuZXcgVHJlZUVsZW1lbnQoY29udGVudCwg
bnVsbCwgdHJ1ZSk7CisJCQljb250ZW50LnRyZWVFbGVtZW50Rm9yVGVzdCA9IHJvb3Q7CisJCQl0
cmVlT3V0bGluZS5hcHBlbmRDaGlsZChyb290KTsKKwkJCWlmIChtb2RlbC50eXBlID09PSBXZWJJ
bnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuVHJhY2UpCisJCQkJcm9vdC5leHBh
bmQoKTsKKworCQkJdGhpcy5fcG9wdWxhdGVTdGFja1RyYWNlVHJlZUVsZW1lbnQocm9vdCk7CisJ
CQl0aGlzLl9mb3JtYXR0ZWRNZXNzYWdlID0gb2w7CisJCX0KKworCQkvLyBUaGlzIGlzIHVzZWQg
Zm9yIGlubGluZSBtZXNzYWdlIGJ1YmJsZXMgaW4gU291cmNlRnJhbWVzLCBvciBvdGhlciBwbGFp
bi10ZXh0IHJlcHJlc2VudGF0aW9ucy4KKwkJLy8gQG52YXNpbHlldjogc2hvdWxkIGl0IGJlIGlu
IHRoZSBtb2RlbD8gTm90IHN1cmUuCisJCXRoaXMuX21lc3NhZ2UgPSBtZXNzYWdlVGV4dC50ZXh0
Q29udGVudDsKKwl9LAorCisJX3Nob3VsZEhpZGVVUkw6IGZ1bmN0aW9uKHVybCkKKwl7CisJCWlm
ICh1cmwgPT09ICJ1bmRlZmluZWQiKQorCQkJY29uc29sZS53YXJuKCJDb25zb2xlTWVzc2FnZVZp
ZXcjX3Nob3VsZEhpZGVVUkwodXJsKTogdXJsIHNob3VsZCBuZXZlciBiZSBcInVuZGVmaW5lZFwi
LiIpOworCisJCS8vQEZJWE1FOiByZW1vdmUgYHVybCA9PT0gInVuZGVmaW5lZCJgIGNoZWNrLgor
CQlyZXR1cm4gdXJsID09PSAidW5kZWZpbmVkIiB8fCB1cmwgPT09ICJbbmF0aXZlIGNvZGVdIjsK
Kwl9LAorCisJZ2V0IGZvcm1hdHRlZE1lc3NhZ2UoKQorCXsKKwkJaWYgKCF0aGlzLl9mb3JtYXR0
ZWRNZXNzYWdlKQorCQkJdGhpcy5fZm9ybWF0TWVzc2FnZSgpOworCQlyZXR1cm4gdGhpcy5fZm9y
bWF0dGVkTWVzc2FnZTsKKwl9LAorCisJX2xpbmtpZnlMb2NhdGlvbjogZnVuY3Rpb24odXJsLCBs
aW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpCisJeworCQkvLyBDb25zb2xlTWVzc2FnZSBzdGFjayB0
cmFjZSBsaW5lIG51bWJlcnMgYXJlIG9uZS1iYXNlZC4KKwkJbGluZU51bWJlciA9IGxpbmVOdW1i
ZXIgPyBsaW5lTnVtYmVyIC0gMSA6IDA7CisKKwkJcmV0dXJuIFdlYkluc3BlY3Rvci5saW5raWZ5
TG9jYXRpb24odXJsLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsICJjb25zb2xlLW1lc3NhZ2Ut
dXJsIik7CisJfSwKKworCV9saW5raWZ5Q2FsbEZyYW1lOiBmdW5jdGlvbihjYWxsRnJhbWUpCisJ
eworCQlyZXR1cm4gdGhpcy5fbGlua2lmeUxvY2F0aW9uKGNhbGxGcmFtZS51cmwsIGNhbGxGcmFt
ZS5saW5lTnVtYmVyLCBjYWxsRnJhbWUuY29sdW1uTnVtYmVyKTsKKwl9LAorCisJX2Zvcm1hdDog
ZnVuY3Rpb24ocGFyYW1ldGVycykKKwl7CisJCS8vIFRoaXMgbm9kZSBpcyB1c2VkIGxpa2UgYSBC
dWlsZGVyLiBWYWx1ZXMgYXJlIGNvbnRpbnVhbGx5IGFwcGVuZGVkIG9udG8gaXQuCisJCXZhciBm
b3JtYXR0ZWRSZXN1bHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisJCWlmICgh
cGFyYW1ldGVycy5sZW5ndGgpCisJCQlyZXR1cm4gZm9ybWF0dGVkUmVzdWx0OworCisJCS8vIEZv
cm1hdHRpbmcgY29kZSBiZWxvdyBhc3N1bWVzIHRoYXQgcGFyYW1ldGVycyBhcmUgYWxsIHdyYXBw
ZXJzIHdoZXJlYXMgZnJvbnRlbmQgY29uc29sZQorCQkvLyBBUEkgYWxsb3dzIHBhc3NpbmcgYXJi
aXRyYXJ5IHZhbHVlcyBhcyBtZXNzYWdlcyAoc3RyaW5ncywgbnVtYmVycywgZXRjLikuIFdyYXAg
dGhlbSBoZXJlLgorCQlmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtZXRlcnMubGVuZ3RoOyArK2kp
IHsKKwkJCS8vIEZJWE1FOiBPbmx5IHBhc3MgcnVudGltZSB3cmFwcGVycyBoZXJlLgorCQkJaWYg
KHBhcmFtZXRlcnNbaV0gaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0KQorCQkJ
CWNvbnRpbnVlOworCisJCQlpZiAodHlwZW9mIHBhcmFtZXRlcnNbaV0gPT09ICJvYmplY3QiKQor
CQkJCXBhcmFtZXRlcnNbaV0gPSBXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0LmZyb21QYXlsb2Fk
KHBhcmFtZXRlcnNbaV0pOworCQkJZWxzZQorCQkJCXBhcmFtZXRlcnNbaV0gPSBXZWJJbnNwZWN0
b3IuUmVtb3RlT2JqZWN0LmZyb21QcmltaXRpdmVWYWx1ZShwYXJhbWV0ZXJzW2ldKTsKKwkJfQor
CisJCS8vIFRoZXJlIGNhbiBiZSBzdHJpbmcgbG9nIGFuZCBzdHJpbmcgZXZhbCByZXN1bHQuIFdl
IGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlbSBiYXNlZCBvbiBtZXNzYWdlIHR5cGUuCisJCXZhciBz
aG91bGRGb3JtYXRNZXNzYWdlID0gV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdC50eXBlKHBhcmFt
ZXRlcnNbMF0pID09PSAic3RyaW5nIiAmJiB0aGlzLm1vZGVsLnR5cGUgIT09IFdlYkluc3BlY3Rv
ci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5SZXN1bHQ7CisKKwkJaWYgKHNob3VsZEZvcm1h
dE1lc3NhZ2UpIHsKKwkJCS8vIE11bHRpcGxlIHBhcmFtZXRlcnMgd2l0aCB0aGUgZmlyc3QgYmVp
bmcgYSBmb3JtYXQgc3RyaW5nLiBTYXZlIHVudXNlZCBzdWJzdGl0dXRpb25zLgorCQkJdmFyIHJl
c3VsdCA9IHRoaXMuX2Zvcm1hdFdpdGhTdWJzdGl0dXRpb25TdHJpbmcocGFyYW1ldGVycywgZm9y
bWF0dGVkUmVzdWx0KTsKKwkJCXBhcmFtZXRlcnMgPSByZXN1bHQudW51c2VkU3Vic3RpdHV0aW9u
czsKKwkJCWlmIChwYXJhbWV0ZXJzLmxlbmd0aCkKKwkJCQlmb3JtYXR0ZWRSZXN1bHQuYXBwZW5k
Q2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiAiKSk7CisJCX0KKworCQlpZiAodGhpcy5t
b2RlbC50eXBlID09PSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuVGFi
bGUpIHsKKwkJCWZvcm1hdHRlZFJlc3VsdC5hcHBlbmRDaGlsZCh0aGlzLl9mb3JtYXRQYXJhbWV0
ZXJBc1RhYmxlKHBhcmFtZXRlcnMpKTsKKwkJCXJldHVybiBmb3JtYXR0ZWRSZXN1bHQ7CisJCX0K
KworCQkvLyBTaW5nbGUgcGFyYW1ldGVyLCBvciB1bnVzZWQgc3Vic3RpdHV0aW9ucyBmcm9tIGFi
b3ZlLgorCQlmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtZXRlcnMubGVuZ3RoOyArK2kpIHsKKwkJ
CS8vIElubGluZSBzdHJpbmdzIHdoZW4gZm9ybWF0dGluZy4KKwkJCWlmIChzaG91bGRGb3JtYXRN
ZXNzYWdlICYmIHBhcmFtZXRlcnNbaV0udHlwZSA9PT0gInN0cmluZyIpIHsKKwkJCQl2YXIgc3Bh
biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKwkJCQlzcGFuLmNsYXNzTGlzdC5h
ZGQoInR5cGUtc3RyaW5nIik7CisJCQkJc3Bhbi50ZXh0Q29udGVudCA9IHBhcmFtZXRlcnNbaV0u
ZGVzY3JpcHRpb247CisJCQkJZm9ybWF0dGVkUmVzdWx0LmFwcGVuZENoaWxkKHNwYW4pOworCQkJ
fSBlbHNlCisJCQkJZm9ybWF0dGVkUmVzdWx0LmFwcGVuZENoaWxkKHRoaXMuX2Zvcm1hdFBhcmFt
ZXRlcihwYXJhbWV0ZXJzW2ldLCBmYWxzZSkpOworCisJCQlpZiAoaSA8IHBhcmFtZXRlcnMubGVu
Z3RoIC0gMSAmJiAhdGhpcy5faXNFeHBhbmRhYmxlKHBhcmFtZXRlcnNbaV0pKQorCQkJCWZvcm1h
dHRlZFJlc3VsdC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiICIpKTsKKwor
CQl9CisJCXJldHVybiBmb3JtYXR0ZWRSZXN1bHQ7CisJfSwKKworCV9pc0V4cGFuZGFibGU6IGZ1
bmN0aW9uKHJlbW90ZU9iamVjdCkgeworCQlpZiAoIXJlbW90ZU9iamVjdCkKKwkJCXJldHVybiBm
YWxzZTsKKworCQlpZiAocmVtb3RlT2JqZWN0Lmhhc0NoaWxkcmVuICYmIHJlbW90ZU9iamVjdC5w
cmV2aWV3ICYmIHJlbW90ZU9iamVjdC5wcmV2aWV3Lmxvc3NsZXNzKQorCQkJcmV0dXJuIGZhbHNl
OworCisJCXJldHVybiByZW1vdGVPYmplY3QuaGFzQ2hpbGRyZW47CisJfSwKKworCisJX2Zvcm1h
dFBhcmFtZXRlcjogZnVuY3Rpb24ob3V0cHV0LCBmb3JjZU9iamVjdEZvcm1hdCkKKwl7CisJCXZh
ciB0eXBlOworCQlpZiAoZm9yY2VPYmplY3RGb3JtYXQpCisJCQl0eXBlID0gIm9iamVjdCI7CisJ
CWVsc2UgaWYgKG91dHB1dCBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5SZW1vdGVPYmplY3QpCisJ
CQl0eXBlID0gb3V0cHV0LnN1YnR5cGUgfHwgb3V0cHV0LnR5cGU7CisJCWVsc2UKKwkJCXR5cGUg
PSB0eXBlb2Ygb3V0cHV0OworCisJCXZhciBmb3JtYXR0ZXIgPSB0aGlzLl9jdXN0b21Gb3JtYXR0
ZXJzW3R5cGVdOworCQlpZiAoIWZvcm1hdHRlcikKKwkJCWZvcm1hdHRlciA9IHRoaXMuX2Zvcm1h
dFBhcmFtZXRlckFzVmFsdWU7CisKKwkJdmFyIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJzcGFuIik7CisKKwkJaWYgKHRoaXMuX2lzRXhwYW5kYWJsZShvdXRwdXQpKQorCQkJc3Bhbi5j
bGFzc0xpc3QuYWRkKCJleHBhbmRhYmxlIik7CisKKwkJZm9ybWF0dGVyLmNhbGwodGhpcywgb3V0
cHV0LCBzcGFuLCBmb3JjZU9iamVjdEZvcm1hdCk7CisJCXJldHVybiBzcGFuOworCX0sCisKKwlf
Zm9ybWF0UGFyYW1ldGVyQXNWYWx1ZTogZnVuY3Rpb24odmFsdWUsIGVsZW0pCisJeworCQllbGVt
LmFwcGVuZENoaWxkKFdlYkluc3BlY3Rvci5Gb3JtYXR0ZWRWYWx1ZS5jcmVhdGVFbGVtZW50Rm9y
UmVtb3RlT2JqZWN0KHZhbHVlKSk7CisJfSwKKworCV9mb3JtYXRQYXJhbWV0ZXJBc09iamVjdDog
ZnVuY3Rpb24ob2JqLCBlbGVtLCBmb3JjZUV4cGFuc2lvbikKKwl7CisJCXRoaXMuX29iamVjdFRy
ZWUgPSBuZXcgV2ViSW5zcGVjdG9yLk9iamVjdFRyZWVWaWV3KG9iaiwgV2ViSW5zcGVjdG9yLk9i
amVjdFRyZWVWaWV3Lk1vZGUuUHJvcGVydGllcywgdGhpcy5fcm9vdFByb3BlcnR5UGF0aEZvck9i
amVjdChvYmopLCBmb3JjZUV4cGFuc2lvbik7CisJCWVsZW0uYXBwZW5kQ2hpbGQodGhpcy5fb2Jq
ZWN0VHJlZS5lbGVtZW50KTsKKwl9LAorCisJX2Zvcm1hdFBhcmFtZXRlckFzU3RyaW5nOiBmdW5j
dGlvbihvdXRwdXQsIGVsZW0pCisJeworCQl2YXIgc3BhbiA9IFdlYkluc3BlY3Rvci5Gb3JtYXR0
ZWRWYWx1ZS5jcmVhdGVMaW5raWZpZWRFbGVtZW50U3RyaW5nKG91dHB1dC5kZXNjcmlwdGlvbik7
CisJCWVsZW0uYXBwZW5kQ2hpbGQoc3Bhbik7CisJfSwKKworCV9mb3JtYXRQYXJhbWV0ZXJBc05v
ZGU6IGZ1bmN0aW9uKG9iamVjdCwgZWxlbSkKKwl7CisJCXZhciBzcGFuID0gV2ViSW5zcGVjdG9y
LkZvcm1hdHRlZFZhbHVlLmNyZWF0ZUVsZW1lbnRGb3JOb2RlKG9iamVjdCk7CisJCWVsZW0uYXBw
ZW5kQ2hpbGQoc3Bhbik7CisJfSwKKworCV9mb3JtYXRQYXJhbWV0ZXJBc0FycmF5OiBmdW5jdGlv
bihhcnIsIGVsZW0pCisJeworCQl0aGlzLl9vYmplY3RUcmVlID0gbmV3IFdlYkluc3BlY3Rvci5P
YmplY3RUcmVlVmlldyhhcnIsIFdlYkluc3BlY3Rvci5PYmplY3RUcmVlVmlldy5Nb2RlLlByb3Bl
cnRpZXMsIHRoaXMuX3Jvb3RQcm9wZXJ0eVBhdGhGb3JPYmplY3QoYXJyKSk7CisJCWVsZW0uYXBw
ZW5kQ2hpbGQodGhpcy5fb2JqZWN0VHJlZS5lbGVtZW50KTsKKwl9LAorCisJX3Jvb3RQcm9wZXJ0
eVBhdGhGb3JPYmplY3Q6IGZ1bmN0aW9uKG9iamVjdCkKKwl7CisJCWlmICghdGhpcy5zYXZlZFJl
c3VsdEluZGV4KQorCQkJcmV0dXJuIG51bGw7CisKKwkJcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3Iu
UHJvcGVydHlQYXRoKG9iamVjdCwgIiQiICsgdGhpcy5zYXZlZFJlc3VsdEluZGV4KTsKKwl9LAor
CisJX3VzZXJQcm92aWRlZENvbHVtbk5hbWVzOiBmdW5jdGlvbihjb2x1bW5OYW1lc0FyZ3VtZW50
KQorCXsKKwkJaWYgKCFjb2x1bW5OYW1lc0FyZ3VtZW50KQorCQkJcmV0dXJuIG51bGw7CisKKwkJ
dmFyIHJlbW90ZU9iamVjdCA9IFdlYkluc3BlY3Rvci5SZW1vdGVPYmplY3QuZnJvbVBheWxvYWQo
Y29sdW1uTmFtZXNBcmd1bWVudCk7CisKKwkJLy8gU2luZ2xlIHByaW1pdGl2ZSBhcmd1bWVudC4K
KwkJaWYgKHJlbW90ZU9iamVjdC50eXBlID09PSAic3RyaW5nIiB8fCByZW1vdGVPYmplY3QudHlw
ZSA9PT0gIm51bWJlciIpCisJCQlyZXR1cm4gW1N0cmluZyhjb2x1bW5OYW1lc0FyZ3VtZW50LnZh
bHVlKV07CisKKwkJLy8gSWdub3JlIGV2ZXJ5dGhpbmcgdGhhdCBpcyBub3QgYW4gYXJyYXkgd2l0
aCBwcm9wZXJ0eSBwcmV2aWV3cy4KKwkJaWYgKHJlbW90ZU9iamVjdC50eXBlICE9PSAib2JqZWN0
IiB8fCByZW1vdGVPYmplY3Quc3VidHlwZSAhPT0gImFycmF5IiB8fCAhcmVtb3RlT2JqZWN0LnBy
ZXZpZXcgfHwgIXJlbW90ZU9iamVjdC5wcmV2aWV3LnByb3BlcnR5UHJldmlld3MpCisJCQlyZXR1
cm4gbnVsbDsKKworCQkvLyBBcnJheS4gTG9vayBpbnRvIHRoZSBwcmV2aWV3IGFuZCBnZXQgc3Ry
aW5nIHZhbHVlcy4KKwkJdmFyIGV4dHJhY3RlZENvbHVtbk5hbWVzID0gW107CisJCWZvciAodmFy
IHByb3BlcnR5UHJldmlldyBvZiByZW1vdGVPYmplY3QucHJldmlldy5wcm9wZXJ0eVByZXZpZXdz
KSB7CisJCQlpZiAocHJvcGVydHlQcmV2aWV3LnR5cGUgPT09ICJzdHJpbmciIHx8IHByb3BlcnR5
UHJldmlldy50eXBlID09PSAibnVtYmVyIikKKwkJCQlleHRyYWN0ZWRDb2x1bW5OYW1lcy5wdXNo
KFN0cmluZyhwcm9wZXJ0eVByZXZpZXcudmFsdWUpKTsKKwkJfQorCisJCXJldHVybiBleHRyYWN0
ZWRDb2x1bW5OYW1lcy5sZW5ndGggPyBleHRyYWN0ZWRDb2x1bW5OYW1lcyA6IG51bGw7CisJfSwK
KworCV9mb3JtYXRQYXJhbWV0ZXJBc1RhYmxlOiBmdW5jdGlvbihwYXJhbWV0ZXJzKQorCXsKKwkJ
dmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisJCXZhciB0YWJs
ZSA9IHBhcmFtZXRlcnNbMF07CisJCWlmICghdGFibGUgfHwgIXRhYmxlLnByZXZpZXcpCisJCQly
ZXR1cm4gZWxlbWVudDsKKworCQl2YXIgcm93cyA9IFtdOworCQl2YXIgY29sdW1uTmFtZXMgPSBb
XTsKKwkJdmFyIGZsYXRWYWx1ZXMgPSBbXTsKKwkJdmFyIHByZXZpZXcgPSB0YWJsZS5wcmV2aWV3
OworCQl2YXIgdXNlclByb3ZpZGVkQ29sdW1uTmFtZXMgPSBmYWxzZTsKKworCQkvLyBVc2VyIHBy
b3ZpZGVkIGNvbHVtbk5hbWVzLgorCQl2YXIgZXh0cmFjdGVkQ29sdW1uTmFtZXMgPSB0aGlzLl91
c2VyUHJvdmlkZWRDb2x1bW5OYW1lcyhwYXJhbWV0ZXJzWzFdKTsKKwkJaWYgKGV4dHJhY3RlZENv
bHVtbk5hbWVzKSB7CisJCQl1c2VyUHJvdmlkZWRDb2x1bW5OYW1lcyA9IHRydWU7CisJCQljb2x1
bW5OYW1lcyA9IGV4dHJhY3RlZENvbHVtbk5hbWVzOworCQl9CisKKwkJLy8gQ2hlY2sgZmlyc3Qg
Zm9yIHZhbHVlUHJldmlld3MgaW4gdGhlIHByb3BlcnRpZXMgbWVhbmluZyB0aGlzIHdhcyBhbiBh
cnJheSBvZiBvYmplY3RzLgorCQlpZiAocHJldmlldy5wcm9wZXJ0eVByZXZpZXdzKSB7CisJCQlm
b3IgKHZhciBpID0gMDsgaSA8IHByZXZpZXcucHJvcGVydHlQcmV2aWV3cy5sZW5ndGg7ICsraSkg
eworCQkJCXZhciByb3dQcm9wZXJ0eSA9IHByZXZpZXcucHJvcGVydHlQcmV2aWV3c1tpXTsKKwkJ
CQl2YXIgcm93UHJldmlldyA9IHJvd1Byb3BlcnR5LnZhbHVlUHJldmlldzsKKwkJCQlpZiAoIXJv
d1ByZXZpZXcpCisJCQkJCWNvbnRpbnVlOworCisJCQkJdmFyIHJvd1ZhbHVlID0ge307CisJCQkJ
Y29uc3QgbWF4Q29sdW1uc1RvUmVuZGVyID0gMTA7CisJCQkJZm9yICh2YXIgaiA9IDA7IGogPCBy
b3dQcmV2aWV3LnByb3BlcnR5UHJldmlld3MubGVuZ3RoOyArK2opIHsKKwkJCQkJdmFyIGNlbGxQ
cm9wZXJ0eSA9IHJvd1ByZXZpZXcucHJvcGVydHlQcmV2aWV3c1tqXTsKKwkJCQkJdmFyIGNvbHVt
blJlbmRlcmVkID0gY29sdW1uTmFtZXMuY29udGFpbnMoY2VsbFByb3BlcnR5Lm5hbWUpOworCQkJ
CQlpZiAoIWNvbHVtblJlbmRlcmVkKSB7CisJCQkJCQlpZiAodXNlclByb3ZpZGVkQ29sdW1uTmFt
ZXMgfHwgY29sdW1uTmFtZXMubGVuZ3RoID09PSBtYXhDb2x1bW5zVG9SZW5kZXIpCisJCQkJCQkJ
Y29udGludWU7CisJCQkJCQljb2x1bW5SZW5kZXJlZCA9IHRydWU7CisJCQkJCQljb2x1bW5OYW1l
cy5wdXNoKGNlbGxQcm9wZXJ0eS5uYW1lKTsKKwkJCQkJfQorCisJCQkJCXJvd1ZhbHVlW2NlbGxQ
cm9wZXJ0eS5uYW1lXSA9IFdlYkluc3BlY3Rvci5Gb3JtYXR0ZWRWYWx1ZS5jcmVhdGVFbGVtZW50
Rm9yUHJvcGVydHlQcmV2aWV3KGNlbGxQcm9wZXJ0eSk7CisJCQkJfQorCQkJCXJvd3MucHVzaChb
cm93UHJvcGVydHkubmFtZSwgcm93VmFsdWVdKTsKKwkJCX0KKwkJfQorCisJCS8vIElmIHRoZXJl
IHdlcmUgdmFsdWVQcmV2aWV3cywgY29udmVydCB0byBhIGZsYXQgbGlzdC4KKwkJaWYgKHJvd3Mu
bGVuZ3RoKSB7CisJCQljb25zdCBlbURhc2ggPSAiXHUyMDE0IjsKKwkJCWNvbHVtbk5hbWVzLnVu
c2hpZnQoV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIoSW5kZXgpIikpOworCQkJZm9yICh2YXIgaSA9
IDA7IGkgPCByb3dzLmxlbmd0aDsgKytpKSB7CisJCQkJdmFyIHJvd05hbWUgPSByb3dzW2ldWzBd
OworCQkJCXZhciByb3dWYWx1ZSA9IHJvd3NbaV1bMV07CisJCQkJZmxhdFZhbHVlcy5wdXNoKHJv
d05hbWUpOworCQkJCWZvciAodmFyIGogPSAxOyBqIDwgY29sdW1uTmFtZXMubGVuZ3RoOyArK2op
IHsKKwkJCQkJdmFyIGNvbHVtbk5hbWUgPSBjb2x1bW5OYW1lc1tqXTsKKwkJCQkJaWYgKCEoY29s
dW1uTmFtZSBpbiByb3dWYWx1ZSkpCisJCQkJCQlmbGF0VmFsdWVzLnB1c2goZW1EYXNoKTsKKwkJ
CQkJZWxzZQorCQkJCQkJZmxhdFZhbHVlcy5wdXNoKHJvd1ZhbHVlW2NvbHVtbk5hbWVdKTsKKwkJ
CQl9CisJCQl9CisJCX0KKworCQkvLyBJZiB0aGVyZSB3ZXJlIG5vIHZhbHVlIFByZXZpZXdzLCB0
aGVuIGNoZWNrIGZvciBhbiBhcnJheSBvZiB2YWx1ZXMuCisJCWlmICghZmxhdFZhbHVlcy5sZW5n
dGggJiYgcHJldmlldy5wcm9wZXJ0eVByZXZpZXdzKSB7CisJCQlmb3IgKHZhciBpID0gMDsgaSA8
IHByZXZpZXcucHJvcGVydHlQcmV2aWV3cy5sZW5ndGg7ICsraSkgeworCQkJCXZhciByb3dQcm9w
ZXJ0eSA9IHByZXZpZXcucHJvcGVydHlQcmV2aWV3c1tpXTsKKwkJCQlpZiAoISgidmFsdWUiIGlu
IHJvd1Byb3BlcnR5KSkKKwkJCQkJY29udGludWU7CisKKwkJCQlpZiAoIWNvbHVtbk5hbWVzLmxl
bmd0aCkgeworCQkJCQljb2x1bW5OYW1lcy5wdXNoKFdlYkluc3BlY3Rvci5VSVN0cmluZygiSW5k
ZXgiKSk7CisJCQkJCWNvbHVtbk5hbWVzLnB1c2goV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJWYWx1
ZSIpKTsKKwkJCQl9CisKKwkJCQlmbGF0VmFsdWVzLnB1c2gocm93UHJvcGVydHkubmFtZSk7CisJ
CQkJZmxhdFZhbHVlcy5wdXNoKFdlYkluc3BlY3Rvci5Gb3JtYXR0ZWRWYWx1ZS5jcmVhdGVFbGVt
ZW50Rm9yUHJvcGVydHlQcmV2aWV3KHJvd1Byb3BlcnR5KSk7CisJCQl9CisJCX0KKworCQkvLyBJ
ZiBsb3NzbGVzcyBvciBub3QgdGFibGUgZGF0YSwgb3V0cHV0IHRoZSBvYmplY3Qgc28gZnVsbCBk
YXRhIGNhbiBiZSBnb3R0ZW4uCisJCWlmICghcHJldmlldy5sb3NzbGVzcyB8fCAhZmxhdFZhbHVl
cy5sZW5ndGgpIHsKKwkJCWVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fZm9ybWF0UGFyYW1ldGVy
KHRhYmxlKSk7CisJCQlpZiAoIWZsYXRWYWx1ZXMubGVuZ3RoKQorCQkJCXJldHVybiBlbGVtZW50
OworCQl9CisKKwkJdmFyIGRhdGFHcmlkQ29udGFpbmVyID0gZWxlbWVudC5jcmVhdGVDaGlsZCgi
c3BhbiIpOworCQl2YXIgZGF0YUdyaWQgPSBXZWJJbnNwZWN0b3IuRGF0YUdyaWQuY3JlYXRlU29y
dGFibGVEYXRhR3JpZChjb2x1bW5OYW1lcywgZmxhdFZhbHVlcyk7CisJCWRhdGFHcmlkLmVsZW1l
bnQuY2xhc3NMaXN0LmFkZCgiaW5saW5lIik7CisJCWRhdGFHcmlkQ29udGFpbmVyLmFwcGVuZENo
aWxkKGRhdGFHcmlkLmVsZW1lbnQpOworCisJCXJldHVybiBlbGVtZW50OworCX0sCisKKwlfZm9y
bWF0V2l0aFN1YnN0aXR1dGlvblN0cmluZzogZnVuY3Rpb24ocGFyYW1ldGVycywgZm9ybWF0dGVk
UmVzdWx0KQorCXsKKwkJdmFyIGZvcm1hdHRlcnMgPSB7fTsKKworCQlmdW5jdGlvbiBwYXJhbWV0
ZXJGb3JtYXR0ZXIoZm9yY2UsIG9iaikKKwkJeworCQkJcmV0dXJuIHRoaXMuX2Zvcm1hdFBhcmFt
ZXRlcihvYmosIGZvcmNlKTsKKwkJfQorCisJCWZ1bmN0aW9uIHN0cmluZ0Zvcm1hdHRlcihvYmop
CisJCXsKKwkJCXJldHVybiBvYmouZGVzY3JpcHRpb247CisJCX0KKworCQlmdW5jdGlvbiBmbG9h
dEZvcm1hdHRlcihvYmopCisJCXsKKwkJCWlmICh0eXBlb2Ygb2JqLnZhbHVlICE9PSAibnVtYmVy
IikKKwkJCQlyZXR1cm4gcGFyc2VGbG9hdChvYmouZGVzY3JpcHRpb24pOworCQkJcmV0dXJuIG9i
ai52YWx1ZTsKKwkJfQorCisJCWZ1bmN0aW9uIGludGVnZXJGb3JtYXR0ZXIob2JqKQorCQl7CisJ
CQlpZiAodHlwZW9mIG9iai52YWx1ZSAhPT0gIm51bWJlciIpCisJCQkJcmV0dXJuIHBhcnNlSW50
KG9iai5kZXNjcmlwdGlvbik7CisJCQlyZXR1cm4gTWF0aC5mbG9vcihvYmoudmFsdWUpOworCQl9
CisKKwkJdmFyIGN1cnJlbnRTdHlsZSA9IG51bGw7CisJCWZ1bmN0aW9uIHN0eWxlRm9ybWF0dGVy
KG9iaikKKwkJeworCQkJY3VycmVudFN0eWxlID0ge307CisJCQl2YXIgYnVmZmVyID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOworCQkJYnVmZmVyLnNldEF0dHJpYnV0ZSgic3R5bGUi
LCBvYmouZGVzY3JpcHRpb24pOworCQkJZm9yICh2YXIgaSA9IDA7IGkgPCBidWZmZXIuc3R5bGUu
bGVuZ3RoOyBpKyspIHsKKwkJCQl2YXIgcHJvcGVydHkgPSBidWZmZXIuc3R5bGVbaV07CisJCQkJ
aWYgKGlzV2hpdGVsaXN0ZWRQcm9wZXJ0eShwcm9wZXJ0eSkpCisJCQkJCWN1cnJlbnRTdHlsZVtw
cm9wZXJ0eV0gPSBidWZmZXIuc3R5bGVbcHJvcGVydHldOworCQkJfQorCQl9CisKKwkJZnVuY3Rp
b24gaXNXaGl0ZWxpc3RlZFByb3BlcnR5KHByb3BlcnR5KQorCQl7CisJCQl2YXIgcHJlZml4ZXMg
PSBbImJhY2tncm91bmQiLCAiYm9yZGVyIiwgImNvbG9yIiwgImZvbnQiLCAibGluZSIsICJtYXJn
aW4iLCAicGFkZGluZyIsICJ0ZXh0IiwgIi13ZWJraXQtYmFja2dyb3VuZCIsICItd2Via2l0LWJv
cmRlciIsICItd2Via2l0LWZvbnQiLCAiLXdlYmtpdC1tYXJnaW4iLCAiLXdlYmtpdC1wYWRkaW5n
IiwgIi13ZWJraXQtdGV4dCJdOworCQkJZm9yICh2YXIgaSA9IDA7IGkgPCBwcmVmaXhlcy5sZW5n
dGg7IGkrKykgeworCQkJCWlmIChwcm9wZXJ0eS5zdGFydHNXaXRoKHByZWZpeGVzW2ldKSkKKwkJ
CQkJcmV0dXJuIHRydWU7CisJCQl9CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKworCQkvLyBGaXJl
YnVnIHVzZXMgJW8gZm9yIGZvcm1hdHRpbmcgb2JqZWN0cy4KKwkJZm9ybWF0dGVycy5vID0gcGFy
YW1ldGVyRm9ybWF0dGVyLmJpbmQodGhpcywgZmFsc2UpOworCQlmb3JtYXR0ZXJzLnMgPSBzdHJp
bmdGb3JtYXR0ZXI7CisJCWZvcm1hdHRlcnMuZiA9IGZsb2F0Rm9ybWF0dGVyOworCisJCS8vIEZp
cmVidWcgYWxsb3dzIGJvdGggJWkgYW5kICVkIGZvciBmb3JtYXR0aW5nIGludGVnZXJzLgorCQlm
b3JtYXR0ZXJzLmkgPSBpbnRlZ2VyRm9ybWF0dGVyOworCQlmb3JtYXR0ZXJzLmQgPSBpbnRlZ2Vy
Rm9ybWF0dGVyOworCisJCS8vIEZpcmVidWcgdXNlcyAlYyBmb3Igc3R5bGluZyB0aGUgbWVzc2Fn
ZS4KKwkJZm9ybWF0dGVycy5jID0gc3R5bGVGb3JtYXR0ZXI7CisKKwkJLy8gU3VwcG9ydCAlTyB0
byBmb3JjZSBvYmplY3QgZm9ybWF0dGluZywgaW5zdGVhZCBvZiB0aGUgdHlwZS1iYXNlZCAlbyBm
b3JtYXR0aW5nLgorCQlmb3JtYXR0ZXJzLk8gPSBwYXJhbWV0ZXJGb3JtYXR0ZXIuYmluZCh0aGlz
LCB0cnVlKTsKKworCQlmdW5jdGlvbiBhcHBlbmQoYSwgYikKKwkJeworCQkJaWYgKGIgaW5zdGFu
Y2VvZiBOb2RlKQorCQkJCWEuYXBwZW5kQ2hpbGQoYik7CisJCQllbHNlIGlmIChiKSB7CisJCQkJ
dmFyIHRvQXBwZW5kID0gV2ViSW5zcGVjdG9yLmxpbmtpZnlTdHJpbmdBc0ZyYWdtZW50KGIudG9T
dHJpbmcoKSk7CisJCQkJaWYgKGN1cnJlbnRTdHlsZSkgeworCQkJCQl2YXIgd3JhcHBlciA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKwkJCQkJZm9yICh2YXIga2V5IGluIGN1cnJl
bnRTdHlsZSkKKwkJCQkJCXdyYXBwZXIuc3R5bGVba2V5XSA9IGN1cnJlbnRTdHlsZVtrZXldOwor
CQkJCQl3cmFwcGVyLmFwcGVuZENoaWxkKHRvQXBwZW5kKTsKKwkJCQkJdG9BcHBlbmQgPSB3cmFw
cGVyOworCQkJCX0KKwkJCQl2YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4i
KTsKKwkJCQlzcGFuLmNsYXNzTmFtZSA9ICJ0eXBlLXN0cmluZyI7CisJCQkJc3Bhbi5hcHBlbmRD
aGlsZCh0b0FwcGVuZCk7CisJCQkJYS5hcHBlbmRDaGlsZChzcGFuKTsKKwkJCX0KKwkJCXJldHVy
biBhOworCQl9CisKKwkJLy8gU3RyaW5nLmZvcm1hdCBkb2VzIHRyZWF0IGZvcm1hdHRlZFJlc3Vs
dCBsaWtlIGEgQnVpbGRlciwgcmVzdWx0IGlzIGFuIG9iamVjdC4KKwkJcmV0dXJuIFN0cmluZy5m
b3JtYXQocGFyYW1ldGVyc1swXS5kZXNjcmlwdGlvbiwgcGFyYW1ldGVycy5zbGljZSgxKSwgZm9y
bWF0dGVycywgZm9ybWF0dGVkUmVzdWx0LCBhcHBlbmQpOworCX0sCisKKwlkZWNvcmF0ZU1lc3Nh
Z2VFbGVtZW50OiBmdW5jdGlvbihlbGVtZW50KQorCXsKKwkJaWYgKHRoaXMuX2VsZW1lbnQpCisJ
CQlyZXR1cm4gdGhpcy5fZWxlbWVudDsKKworCQllbGVtZW50Lm1lc3NhZ2UgPSB0aGlzOworCQll
bGVtZW50LmNsYXNzTGlzdC5hZGQoImNvbnNvbGUtbWVzc2FnZSIpOworCisJCXRoaXMuX2VsZW1l
bnQgPSBlbGVtZW50OworCisJCXN3aXRjaCAodGhpcy5sZXZlbCkgeworCQkJY2FzZSBXZWJJbnNw
ZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLlRpcDoKKwkJCQllbGVtZW50LmNsYXNz
TGlzdC5hZGQoImNvbnNvbGUtdGlwLWxldmVsIik7CisJCQkJZWxlbWVudC5zZXRBdHRyaWJ1dGUo
ImRhdGEtbGFiZWxwcmVmaXgiLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlRpcDogIikpOworCQkJ
CWJyZWFrOworCQkJY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVs
LkxvZzoKKwkJCQllbGVtZW50LmNsYXNzTGlzdC5hZGQoImNvbnNvbGUtbG9nLWxldmVsIik7CisJ
CQkJZWxlbWVudC5zZXRBdHRyaWJ1dGUoImRhdGEtbGFiZWxwcmVmaXgiLCBXZWJJbnNwZWN0b3Iu
VUlTdHJpbmcoIkxvZzogIikpOworCQkJCWJyZWFrOworCQkJY2FzZSBXZWJJbnNwZWN0b3IuQ29u
c29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkRlYnVnOgorCQkJCWVsZW1lbnQuY2xhc3NMaXN0LmFk
ZCgiY29uc29sZS1kZWJ1Zy1sZXZlbCIpOworCQkJCWVsZW1lbnQuc2V0QXR0cmlidXRlKCJkYXRh
LWxhYmVscHJlZml4IiwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJEZWJ1ZzogIikpOworCQkJCWJy
ZWFrOworCQkJY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLldh
cm5pbmc6CisJCQkJZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjb25zb2xlLXdhcm5pbmctbGV2ZWwi
KTsKKwkJCQllbGVtZW50LnNldEF0dHJpYnV0ZSgiZGF0YS1sYWJlbHByZWZpeCIsIFdlYkluc3Bl
Y3Rvci5VSVN0cmluZygiV2FybmluZzogIikpOworCQkJCWJyZWFrOworCQkJY2FzZSBXZWJJbnNw
ZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkVycm9yOgorCQkJCWVsZW1lbnQuY2xh
c3NMaXN0LmFkZCgiY29uc29sZS1lcnJvci1sZXZlbCIpOworCQkJCWVsZW1lbnQuc2V0QXR0cmli
dXRlKCJkYXRhLWxhYmVscHJlZml4IiwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJFcnJvcjogIikp
OworCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKHRoaXMubW9kZWwudHlwZSA9PT0gV2ViSW5zcGVj
dG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLlN0YXJ0R3JvdXAgfHwgdGhpcy5tb2RlbC50
eXBlID09PSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuU3RhcnRHcm91
cENvbGxhcHNlZCkKKwkJCWVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiY29uc29sZS1ncm91cC10aXRs
ZSIpOworCisJCWVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5mb3JtYXR0ZWRNZXNzYWdlKTsKKwor
CQlpZiAodGhpcy5tb2RlbC5yZXBlYXRDb3VudCA+IDEpCisJCQl0aGlzLnVwZGF0ZVJlcGVhdENv
dW50KCk7CisKKwkJcmV0dXJuIGVsZW1lbnQ7CisJfSwKKworCXRvTWVzc2FnZUVsZW1lbnQ6IGZ1
bmN0aW9uKCkKKwl7CisJCWlmICh0aGlzLl9lbGVtZW50KQorCQkJcmV0dXJuIHRoaXMuX2VsZW1l
bnQ7CisKKwkJdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKwor
CQlyZXR1cm4gdGhpcy5kZWNvcmF0ZU1lc3NhZ2VFbGVtZW50KGVsZW1lbnQpOworCX0sCisKKwlf
cG9wdWxhdGVTdGFja1RyYWNlVHJlZUVsZW1lbnQ6IGZ1bmN0aW9uKHBhcmVudFRyZWVFbGVtZW50
KQorCXsKKwkJZm9yIChmcmFtZSBvZiB0aGlzLm1vZGVsLl9zdGFja1RyYWNlKSB7CisJCQl2YXIg
Y29udGVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworCQkJdmFyIG1lc3NhZ2VU
ZXh0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKwkJCW1lc3NhZ2VU
ZXh0RWxlbWVudC5jbGFzc05hbWUgPSAiY29uc29sZS1tZXNzYWdlLXRleHQiOworCQkJdmFyIGZ1
bmN0aW9uTmFtZSA9IGZyYW1lLmZ1bmN0aW9uTmFtZSB8fCBXZWJJbnNwZWN0b3IuVUlTdHJpbmco
Iihhbm9ueW1vdXMgZnVuY3Rpb24pIik7CisJCQltZXNzYWdlVGV4dEVsZW1lbnQuYXBwZW5kQ2hp
bGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZnVuY3Rpb25OYW1lKSk7CisJCQljb250ZW50LmFw
cGVuZENoaWxkKG1lc3NhZ2VUZXh0RWxlbWVudCk7CisKKwkJCWlmIChmcmFtZS51cmwgJiYgIXRo
aXMuX3Nob3VsZEhpZGVVUkwoZnJhbWUudXJsKSkgeworCQkJCXZhciB1cmxFbGVtZW50ID0gdGhp
cy5fbGlua2lmeUNhbGxGcmFtZShmcmFtZSk7CisJCQkJY29udGVudC5hcHBlbmRDaGlsZCh1cmxF
bGVtZW50KTsKKwkJCX0KKworCQkJdmFyIHRyZWVFbGVtZW50ID0gbmV3IFRyZWVFbGVtZW50KGNv
bnRlbnQpOworCQkJcGFyZW50VHJlZUVsZW1lbnQuYXBwZW5kQ2hpbGQodHJlZUVsZW1lbnQpOwor
CQl9CisJfSwKKworCXVwZGF0ZVJlcGVhdENvdW50OiBmdW5jdGlvbigpCisJeworCQlpZiAoIXRo
aXMucmVwZWF0Q291bnRFbGVtZW50KSB7CisJCQl0aGlzLnJlcGVhdENvdW50RWxlbWVudCA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKwkJCXRoaXMucmVwZWF0Q291bnRFbGVtZW50
LmNsYXNzTmFtZSA9ICJidWJibGUiOworCisJCQl0aGlzLl9lbGVtZW50Lmluc2VydEJlZm9yZSh0
aGlzLnJlcGVhdENvdW50RWxlbWVudCwgdGhpcy5fZWxlbWVudC5maXJzdENoaWxkKTsKKwkJfQor
CQl0aGlzLnJlcGVhdENvdW50RWxlbWVudC50ZXh0Q29udGVudCA9IHRoaXMubW9kZWwucmVwZWF0
Q291bnQ7CisJfSwKKworCisJZ2V0IGNsaXBib2FyZFByZWZpeFN0cmluZygpCisJeworCQlyZXR1
cm4gIlsiICsgdGhpcy5sZXZlbFN0cmluZyArICJdICI7CisJfSwKKworCXRvQ2xpcGJvYXJkU3Ry
aW5nOiBmdW5jdGlvbihpc1ByZWZpeE9wdGlvbmFsKQorCXsKKwkJdmFyIGlzVHJhY2UgPSB0aGlz
Lm1vZGVsLnNob3VsZER1bXBTdGFja1RyYWNlKCk7CisKKwkJdmFyIGNsaXBib2FyZFN0cmluZyA9
ICIiOworCQlpZiAodGhpcy5fZm9ybWF0dGVkTWVzc2FnZSAmJiAhaXNUcmFjZSkKKwkJCWNsaXBi
b2FyZFN0cmluZyA9IHRoaXMuX2Zvcm1hdHRlZE1lc3NhZ2UucXVlcnlTZWxlY3Rvcigic3BhbiIp
LmlubmVyVGV4dDsKKwkJZWxzZQorCQkJY2xpcGJvYXJkU3RyaW5nID0gdGhpcy5tb2RlbC50eXBl
ID09PSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuVHJhY2UgPyAiY29u
c29sZS50cmFjZSgpIiA6IHRoaXMuX21lc3NhZ2UgfHwgdGhpcy5fbWVzc2FnZVRleHQ7CisKKwkJ
aWYgKCFpc1ByZWZpeE9wdGlvbmFsIHx8IHRoaXMuZW5mb3JjZXNDbGlwYm9hcmRQcmVmaXhTdHJp
bmcpCisJCQljbGlwYm9hcmRTdHJpbmcgPSB0aGlzLmNsaXBib2FyZFByZWZpeFN0cmluZyArIGNs
aXBib2FyZFN0cmluZzsKKworCQlpZiAoaXNUcmFjZSkgeworCQkJZm9yICh2YXIgZnJhbWUgb2Yg
dGhpcy5tb2RlbC5fc3RhY2tUcmFjZSkgeworCQkJCWNsaXBib2FyZFN0cmluZyArPSAiXG5cdCIg
KyAoZnJhbWUuZnVuY3Rpb25OYW1lIHx8IFdlYkluc3BlY3Rvci5VSVN0cmluZygiKGFub255bW91
cyBmdW5jdGlvbikiKSk7CisJCQkJaWYgKGZyYW1lLnVybCkKKwkJCQkJY2xpcGJvYXJkU3RyaW5n
ICs9ICIgKCIgKyBXZWJJbnNwZWN0b3IuZGlzcGxheU5hbWVGb3JVUkwoZnJhbWUudXJsKSArICIs
IGxpbmUgIiArIGZyYW1lLmxpbmVOdW1iZXIgKyAiKSI7CisJCQl9CisJCX0gZWxzZSB7CisJCQl2
YXIgcmVwZWF0Q291bnQgPSB0aGlzLm1vZGVsLnJlcGVhdENvdW50OworCQkJdmFyIHJlcGVhdFN0
cmluZyA9IHJlcGVhdENvdW50ID4gMSA/ICJ4IiArIHJlcGVhdENvdW50IDogIiI7CisKKwkJCXZh
ciB1cmxMaW5lID0gIiI7CisJCQlpZiAodGhpcy5tb2RlbC51cmwpIHsKKwkJCQl2YXIgY29tcG9u
ZW50cyA9IFtXZWJJbnNwZWN0b3IuZGlzcGxheU5hbWVGb3JVUkwodGhpcy5tb2RlbC51cmwpLCAi
bGluZSAiICsgdGhpcy5tb2RlbC5saW5lXTsKKwkJCQlpZiAocmVwZWF0U3RyaW5nKQorCQkJCQlj
b21wb25lbnRzLnB1c2gocmVwZWF0U3RyaW5nKTsKKwkJCQl1cmxMaW5lID0gIiAoIiArIGNvbXBv
bmVudHMuam9pbigiLCAiKSArICIpIjsKKwkJCX0gZWxzZSBpZiAocmVwZWF0U3RyaW5nKQorCQkJ
CXVybExpbmUgPSAiICgiICsgcmVwZWF0U3RyaW5nICsgIikiOworCisJCQlpZiAodXJsTGluZSkg
eworCQkJCXZhciBsaW5lcyA9IGNsaXBib2FyZFN0cmluZy5zcGxpdCgiXG4iKTsKKwkJCQlsaW5l
c1swXSArPSB1cmxMaW5lOworCQkJCWNsaXBib2FyZFN0cmluZyA9IGxpbmVzLmpvaW4oIlxuIik7
CisJCQl9CisJCX0KKworCQlyZXR1cm4gY2xpcGJvYXJkU3RyaW5nOworCX0sCisKKwljbG9uZTog
ZnVuY3Rpb24oaXNEZWVwKSB7CisJCXZhciBuZXdNb2RlbCA9IGlzRGVlcCA/IHRoaXMubW9kZWwu
Y2xvbmUoKSA6IHRoaXMubW9kZWw7CisJCXJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkNvbnNvbGVN
ZXNzYWdlVmlldyhuZXdNb2RlbCk7CisJfSwKKworCWlzRXF1YWw6IGZ1bmN0aW9uKG1zZykgewor
CQlpZiAoIW1zZykKKwkJCXJldHVybiBmYWxzZTsKKworCQlyZXR1cm4gdGhpcy5tb2RlbC5pc0Vx
dWFsKG1zZy5tb2RlbCk7CisJfQorfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0xlZ2FjeUNvbnNvbGVNZXNzYWdlSW1wbC5qcyBiL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0xlZ2FjeUNvbnNvbGVNZXNzYWdl
SW1wbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjI3YTY3Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3Mv
TGVnYWN5Q29uc29sZU1lc3NhZ2VJbXBsLmpzCkBAIC0wLDAgKzEsODAwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDEzIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSm9zZXBoIFBlY29yYXJvCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3Ig
dGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3Nh
Z2VJbXBsID0gZnVuY3Rpb24oc291cmNlLCBsZXZlbCwgbWVzc2FnZSwgbGlua2lmaWVyLCB0eXBl
LCB1cmwsIGxpbmUsIGNvbHVtbiwgcmVwZWF0Q291bnQsIHBhcmFtZXRlcnMsIHN0YWNrVHJhY2Us
IHJlcXVlc3QpCit7CisgICAgY29uc29sZS5lcnJvcigiQ29uc29sZU1lc3NhZ2VJbXBsIGlzIGRl
cHJlY2F0ZWQsIHVzZSBDb25zb2xlTWVzc2FnZSBhbmQgQ29uc29sZU1lc3NhZ2VWaWV3IGluc3Rl
YWQiKTsKKworICAgIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5jYWxsKHRoaXMsIHNvdXJj
ZSwgbGV2ZWwsIHVybCwgbGluZSwgY29sdW1uLCByZXBlYXRDb3VudCk7CisKKyAgICB0aGlzLl9s
aW5raWZpZXIgPSBsaW5raWZpZXI7CisgICAgdGhpcy50eXBlID0gdHlwZSB8fCBXZWJJbnNwZWN0
b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuTG9nOworICAgIHRoaXMuX21lc3NhZ2VUZXh0
ID0gbWVzc2FnZTsKKyAgICB0aGlzLl9wYXJhbWV0ZXJzID0gcGFyYW1ldGVyczsKKyAgICB0aGlz
Ll9zdGFja1RyYWNlID0gc3RhY2tUcmFjZTsKKyAgICB0aGlzLl9yZXF1ZXN0ID0gcmVxdWVzdDsK
KworICAgIHRoaXMuX2N1c3RvbUZvcm1hdHRlcnMgPSB7CisgICAgICAgICJvYmplY3QiOiB0aGlz
Ll9mb3JtYXRQYXJhbWV0ZXJBc09iamVjdCwKKyAgICAgICAgImVycm9yIjogdGhpcy5fZm9ybWF0
UGFyYW1ldGVyQXNPYmplY3QsCisgICAgICAgICJtYXAiOiB0aGlzLl9mb3JtYXRQYXJhbWV0ZXJB
c09iamVjdCwKKyAgICAgICAgInNldCI6IHRoaXMuX2Zvcm1hdFBhcmFtZXRlckFzT2JqZWN0LAor
ICAgICAgICAid2Vha21hcCI6IHRoaXMuX2Zvcm1hdFBhcmFtZXRlckFzT2JqZWN0LAorICAgICAg
ICAiaXRlcmF0b3IiOiB0aGlzLl9mb3JtYXRQYXJhbWV0ZXJBc09iamVjdCwKKyAgICAgICAgImFy
cmF5IjogIHRoaXMuX2Zvcm1hdFBhcmFtZXRlckFzQXJyYXksCisgICAgICAgICJub2RlIjogICB0
aGlzLl9mb3JtYXRQYXJhbWV0ZXJBc05vZGUsCisgICAgICAgICJzdHJpbmciOiB0aGlzLl9mb3Jt
YXRQYXJhbWV0ZXJBc1N0cmluZworICAgIH07Cit9OworCitXZWJJbnNwZWN0b3IuQ29uc29sZU1l
c3NhZ2VJbXBsLnByb3RvdHlwZSA9IHsKKworICAgIGVuZm9yY2VzQ2xpcGJvYXJkUHJlZml4U3Ry
aW5nOiB0cnVlLAorCisgICAgX2Zvcm1hdE1lc3NhZ2U6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAg
ICAgIHRoaXMuX2Zvcm1hdHRlZE1lc3NhZ2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFu
Iik7CisgICAgICAgIHRoaXMuX2Zvcm1hdHRlZE1lc3NhZ2UuY2xhc3NOYW1lID0gImNvbnNvbGUt
bWVzc2FnZS10ZXh0IjsKKworICAgICAgICB2YXIgbWVzc2FnZVRleHQ7CisgICAgICAgIGlmICh0
aGlzLnNvdXJjZSA9PT0gV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VTb3VyY2Uu
Q29uc29sZUFQSSkgeworICAgICAgICAgICAgc3dpdGNoICh0aGlzLnR5cGUpIHsKKyAgICAgICAg
ICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5UcmFj
ZToKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZVRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0
Tm9kZSgiY29uc29sZS50cmFjZSgpIik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBl
LkFzc2VydDoKKyAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBbV2ViSW5zcGVjdG9yLlVJ
U3RyaW5nKCJBc3NlcnRpb24gZmFpbGVkOiIpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRo
aXMuX3BhcmFtZXRlcnMpCisgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gYXJncy5jb25j
YXQodGhpcy5fcGFyYW1ldGVycyk7CisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VUZXh0ID0g
dGhpcy5fZm9ybWF0KGFyZ3MpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5EaXI6
CisgICAgICAgICAgICAgICAgICAgIHZhciBvYmogPSB0aGlzLl9wYXJhbWV0ZXJzID8gdGhpcy5f
cGFyYW1ldGVyc1swXSA6IHVuZGVmaW5lZDsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3Mg
PSBbIiVPIiwgb2JqXTsKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZVRleHQgPSB0aGlzLl9m
b3JtYXQoYXJncyk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gdGhpcy5fcGFyYW1ldGVy
cyB8fCBbdGhpcy5fbWVzc2FnZVRleHRdOworICAgICAgICAgICAgICAgICAgICBtZXNzYWdlVGV4
dCA9IHRoaXMuX2Zvcm1hdChhcmdzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlm
ICh0aGlzLnNvdXJjZSA9PT0gV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VTb3Vy
Y2UuTmV0d29yaykgeworICAgICAgICAgICAgaWYgKHRoaXMuX3JlcXVlc3QpIHsKKyAgICAgICAg
ICAgICAgICB0aGlzLl9zdGFja1RyYWNlID0gdGhpcy5fcmVxdWVzdC5zdGFja1RyYWNlOworICAg
ICAgICAgICAgICAgIGlmICh0aGlzLl9yZXF1ZXN0LmluaXRpYXRvciAmJiB0aGlzLl9yZXF1ZXN0
LmluaXRpYXRvci51cmwpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy51cmwgPSB0aGlzLl9y
ZXF1ZXN0LmluaXRpYXRvci51cmw7CisgICAgICAgICAgICAgICAgICAgIHRoaXMubGluZSA9IHRo
aXMuX3JlcXVlc3QuaW5pdGlhdG9yLmxpbmVOdW1iZXI7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIG1lc3NhZ2VUZXh0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIp
OworICAgICAgICAgICAgICAgIGlmICh0aGlzLmxldmVsID09PSBXZWJJbnNwZWN0b3IuQ29uc29s
ZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkVycm9yKSB7CisgICAgICAgICAgICAgICAgICAgIG1lc3Nh
Z2VUZXh0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRoaXMuX3JlcXVlc3Qu
cmVxdWVzdE1ldGhvZCArICIgIikpOworICAgICAgICAgICAgICAgICAgICBtZXNzYWdlVGV4dC5h
cHBlbmRDaGlsZChXZWJJbnNwZWN0b3IubGlua2lmeVJlcXVlc3RBc05vZGUodGhpcy5fcmVxdWVz
dCkpOworICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fcmVxdWVzdC5mYWlsZWQpCisgICAg
ICAgICAgICAgICAgICAgICAgICBtZXNzYWdlVGV4dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVh
dGVUZXh0Tm9kZSgiICIgKyB0aGlzLl9yZXF1ZXN0LmxvY2FsaXplZEZhaWxEZXNjcmlwdGlvbikp
OworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBtZXNz
YWdlVGV4dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiICIgKyB0aGlzLl9y
ZXF1ZXN0LnN0YXR1c0NvZGUgKyAiICgiICsgdGhpcy5fcmVxdWVzdC5zdGF0dXNUZXh0ICsgIiki
KSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGZy
YWdtZW50ID0gV2ViSW5zcGVjdG9yLmxpbmtpZnlTdHJpbmdBc0ZyYWdtZW50V2l0aEN1c3RvbUxp
bmtpZmllcih0aGlzLl9tZXNzYWdlVGV4dCwgV2ViSW5zcGVjdG9yLmxpbmtpZnlSZXF1ZXN0QXNO
b2RlLmJpbmQobnVsbCwgdGhpcy5fcmVxdWVzdCwgIiIpKTsKKyAgICAgICAgICAgICAgICAgICAg
bWVzc2FnZVRleHQuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMudXJsKSB7CisgICAg
ICAgICAgICAgICAgICAgIHZhciBhbmNob3IgPSBXZWJJbnNwZWN0b3IubGlua2lmeVVSTEFzTm9k
ZSh0aGlzLnVybCwgdGhpcy51cmwsICJjb25zb2xlLW1lc3NhZ2UtdXJsIik7CisgICAgICAgICAg
ICAgICAgICAgIHRoaXMuX2Zvcm1hdHRlZE1lc3NhZ2UuYXBwZW5kQ2hpbGQoYW5jaG9yKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbWVzc2FnZVRleHQgPSB0aGlzLl9mb3Jt
YXQoW3RoaXMuX21lc3NhZ2VUZXh0XSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICB2YXIgYXJncyA9IHRoaXMuX3BhcmFtZXRlcnMgfHwgW3RoaXMuX21lc3Nh
Z2VUZXh0XTsKKyAgICAgICAgICAgIG1lc3NhZ2VUZXh0ID0gdGhpcy5fZm9ybWF0KGFyZ3MpOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKHRoaXMuc291cmNlICE9PSBXZWJJbnNwZWN0b3IuQ29u
c29sZU1lc3NhZ2UuTWVzc2FnZVNvdXJjZS5OZXR3b3JrIHx8IHRoaXMuX3JlcXVlc3QpIHsKKyAg
ICAgICAgICAgIHZhciBmaXJzdE5vbk5hdGl2ZUNhbGxGcmFtZSA9IHRoaXMuX2ZpcnN0Tm9uTmF0
aXZlQ2FsbEZyYW1lKCk7CisgICAgICAgICAgICBpZiAoZmlyc3ROb25OYXRpdmVDYWxsRnJhbWUp
IHsKKyAgICAgICAgICAgICAgICB2YXIgdXJsRWxlbWVudCA9IHRoaXMuX2xpbmtpZnlDYWxsRnJh
bWUoZmlyc3ROb25OYXRpdmVDYWxsRnJhbWUpOworICAgICAgICAgICAgICAgIHRoaXMuX2Zvcm1h
dHRlZE1lc3NhZ2UuYXBwZW5kQ2hpbGQodXJsRWxlbWVudCk7CisgICAgICAgICAgICB9IGVsc2Ug
aWYgKHRoaXMudXJsICYmICF0aGlzLl9zaG91bGRIaWRlVVJMKHRoaXMudXJsKSkgeworICAgICAg
ICAgICAgICAgIHZhciB1cmxFbGVtZW50ID0gdGhpcy5fbGlua2lmeUxvY2F0aW9uKHRoaXMudXJs
LCB0aGlzLmxpbmUsIHRoaXMuY29sdW1uKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9mb3JtYXR0
ZWRNZXNzYWdlLmFwcGVuZENoaWxkKHVybEVsZW1lbnQpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgdGhpcy5fZm9ybWF0dGVkTWVzc2FnZS5hcHBlbmRDaGlsZChtZXNzYWdl
VGV4dCk7CisKKyAgICAgICAgaWYgKHRoaXMuc2F2ZWRSZXN1bHRJbmRleCkgeworICAgICAgICAg
ICAgdmFyIHNhdmVkVmFyaWFibGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3Bh
biIpOworICAgICAgICAgICAgc2F2ZWRWYXJpYWJsZUVsZW1lbnQuY2xhc3NOYW1lID0gImNvbnNv
bGUtc2F2ZWQtdmFyaWFibGUiOworICAgICAgICAgICAgc2F2ZWRWYXJpYWJsZUVsZW1lbnQudGV4
dENvbnRlbnQgPSAiID0gJCIgKyB0aGlzLnNhdmVkUmVzdWx0SW5kZXg7CisgICAgICAgICAgICBp
ZiAodGhpcy5fb2JqZWN0VHJlZSkKKyAgICAgICAgICAgICAgICB0aGlzLl9vYmplY3RUcmVlLmFw
cGVuZFRpdGxlU3VmZml4KHNhdmVkVmFyaWFibGVFbGVtZW50KTsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICB0aGlzLl9mb3JtYXR0ZWRNZXNzYWdlLmFwcGVuZENoaWxkKHNhdmVk
VmFyaWFibGVFbGVtZW50KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0aGlzLm1vZGVsLnNo
b3VsZER1bXBTdGFja1RyYWNlKCkpIHsKKyAgICAgICAgICAgIHZhciBvbCA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoIm9sIik7CisgICAgICAgICAgICBvbC5jbGFzc05hbWUgPSAib3V0bGluZS1k
aXNjbG9zdXJlIjsKKyAgICAgICAgICAgIHZhciB0cmVlT3V0bGluZSA9IG5ldyBUcmVlT3V0bGlu
ZShvbCk7CisKKyAgICAgICAgICAgIHZhciBjb250ZW50ID0gdGhpcy5fZm9ybWF0dGVkTWVzc2Fn
ZTsKKyAgICAgICAgICAgIHZhciByb290ID0gbmV3IFRyZWVFbGVtZW50KGNvbnRlbnQsIG51bGws
IHRydWUpOworICAgICAgICAgICAgY29udGVudC50cmVlRWxlbWVudEZvclRlc3QgPSByb290Owor
ICAgICAgICAgICAgdHJlZU91dGxpbmUuYXBwZW5kQ2hpbGQocm9vdCk7CisgICAgICAgICAgICBp
ZiAodGhpcy50eXBlID09PSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUu
VHJhY2UpCisgICAgICAgICAgICAgICAgcm9vdC5leHBhbmQoKTsKKworICAgICAgICAgICAgdGhp
cy5fcG9wdWxhdGVTdGFja1RyYWNlVHJlZUVsZW1lbnQocm9vdCk7CisgICAgICAgICAgICB0aGlz
Ll9mb3JtYXR0ZWRNZXNzYWdlID0gb2w7CisgICAgICAgIH0KKworICAgICAgICAvLyBUaGlzIGlz
IHVzZWQgZm9yIGlubGluZSBtZXNzYWdlIGJ1YmJsZXMgaW4gU291cmNlRnJhbWVzLCBvciBvdGhl
ciBwbGFpbi10ZXh0IHJlcHJlc2VudGF0aW9ucy4KKyAgICAgICAgdGhpcy5fbWVzc2FnZSA9IG1l
c3NhZ2VUZXh0LnRleHRDb250ZW50OworICAgIH0sCisKKyAgICBfc2hvdWxkRHVtcFN0YWNrVHJh
Y2U6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiAhIXRoaXMuX3N0YWNrVHJhY2Ug
JiYgdGhpcy5fc3RhY2tUcmFjZS5sZW5ndGggJiYgKHRoaXMuc291cmNlID09PSBXZWJJbnNwZWN0
b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVNvdXJjZS5OZXR3b3JrIHx8IHRoaXMubGV2ZWwgPT09
IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuRXJyb3IgfHwgdGhpcy50
eXBlID09PSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuVHJhY2UpOwor
ICAgIH0sCisKKyAgICBfc2hvdWxkSGlkZVVSTDogZnVuY3Rpb24odXJsKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHVybCA9PT0gInVuZGVmaW5lZCIgfHwgdXJsID09PSAiW25hdGl2ZSBjb2RlXSI7
CisgICAgfSwKKworICAgIF9maXJzdE5vbk5hdGl2ZUNhbGxGcmFtZTogZnVuY3Rpb24oKQorICAg
IHsKKyAgICAgICAgaWYgKCF0aGlzLl9zdGFja1RyYWNlKQorICAgICAgICAgICAgcmV0dXJuIG51
bGw7CisKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zdGFja1RyYWNlLmxlbmd0
aDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgZnJhbWUgPSB0aGlzLl9zdGFja1RyYWNlW2ldOwor
ICAgICAgICAgICAgaWYgKCFmcmFtZS51cmwgfHwgZnJhbWUudXJsID09PSAiW25hdGl2ZSBjb2Rl
XSIpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICByZXR1cm4gZnJhbWU7
CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9LAorCisgICAgZ2V0IG1l
c3NhZ2UoKQorICAgIHsKKyAgICAgICAgLy8gZm9yY2UgbWVzc2FnZSBmb3JtYXR0aW5nCisgICAg
ICAgIHZhciBmb3JtYXR0ZWRNZXNzYWdlID0gdGhpcy5mb3JtYXR0ZWRNZXNzYWdlOworICAgICAg
ICByZXR1cm4gdGhpcy5fbWVzc2FnZTsKKyAgICB9LAorCisgICAgZ2V0IGZvcm1hdHRlZE1lc3Nh
Z2UoKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl9mb3JtYXR0ZWRNZXNzYWdlKQorICAgICAg
ICAgICAgdGhpcy5fZm9ybWF0TWVzc2FnZSgpOworICAgICAgICByZXR1cm4gdGhpcy5fZm9ybWF0
dGVkTWVzc2FnZTsKKyAgICB9LAorCisgICAgX2xpbmtpZnlMb2NhdGlvbjogZnVuY3Rpb24odXJs
LCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpCisgICAgeworICAgICAgICAvLyBDb25zb2xlTWVz
c2FnZSBzdGFjayB0cmFjZSBsaW5lIG51bWJlcnMgYXJlIG9uZS1iYXNlZC4KKyAgICAgICAgbGlu
ZU51bWJlciA9IGxpbmVOdW1iZXIgPyBsaW5lTnVtYmVyIC0gMSA6IDA7CisKKyAgICAgICAgcmV0
dXJuIFdlYkluc3BlY3Rvci5saW5raWZ5TG9jYXRpb24odXJsLCBsaW5lTnVtYmVyLCBjb2x1bW5O
dW1iZXIsICJjb25zb2xlLW1lc3NhZ2UtdXJsIik7CisgICAgfSwKKworICAgIF9saW5raWZ5Q2Fs
bEZyYW1lOiBmdW5jdGlvbihjYWxsRnJhbWUpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5f
bGlua2lmeUxvY2F0aW9uKGNhbGxGcmFtZS51cmwsIGNhbGxGcmFtZS5saW5lTnVtYmVyLCBjYWxs
RnJhbWUuY29sdW1uTnVtYmVyKTsKKyAgICB9LAorCisgICAgaXNFcnJvck9yV2FybmluZzogZnVu
Y3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuICh0aGlzLmxldmVsID09PSBXZWJJbnNwZWN0
b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLldhcm5pbmcgfHwgdGhpcy5sZXZlbCA9PT0g
V2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5FcnJvcik7CisgICAgfSwK
KworICAgIF9mb3JtYXQ6IGZ1bmN0aW9uKHBhcmFtZXRlcnMpCisgICAgeworICAgICAgICAvLyBU
aGlzIG5vZGUgaXMgdXNlZCBsaWtlIGEgQnVpbGRlci4gVmFsdWVzIGFyZSBjb250aW51YWxseSBh
cHBlbmRlZCBvbnRvIGl0LgorICAgICAgICB2YXIgZm9ybWF0dGVkUmVzdWx0ID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgic3BhbiIpOworICAgICAgICBpZiAoIXBhcmFtZXRlcnMubGVuZ3RoKQor
ICAgICAgICAgICAgcmV0dXJuIGZvcm1hdHRlZFJlc3VsdDsKKworICAgICAgICAvLyBGb3JtYXR0
aW5nIGNvZGUgYmVsb3cgYXNzdW1lcyB0aGF0IHBhcmFtZXRlcnMgYXJlIGFsbCB3cmFwcGVycyB3
aGVyZWFzIGZyb250ZW5kIGNvbnNvbGUKKyAgICAgICAgLy8gQVBJIGFsbG93cyBwYXNzaW5nIGFy
Yml0cmFyeSB2YWx1ZXMgYXMgbWVzc2FnZXMgKHN0cmluZ3MsIG51bWJlcnMsIGV0Yy4pLiBXcmFw
IHRoZW0gaGVyZS4KKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLmxlbmd0
aDsgKytpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogT25seSBwYXNzIHJ1bnRpbWUgd3JhcHBl
cnMgaGVyZS4KKyAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJzW2ldIGluc3RhbmNlb2YgV2ViSW5z
cGVjdG9yLlJlbW90ZU9iamVjdCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICAgICAgaWYgKHR5cGVvZiBwYXJhbWV0ZXJzW2ldID09PSAib2JqZWN0IikKKyAgICAgICAgICAg
ICAgICBwYXJhbWV0ZXJzW2ldID0gV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdC5mcm9tUGF5bG9h
ZChwYXJhbWV0ZXJzW2ldKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwYXJh
bWV0ZXJzW2ldID0gV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdC5mcm9tUHJpbWl0aXZlVmFsdWUo
cGFyYW1ldGVyc1tpXSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBUaGVyZSBjYW4gYmUgc3Ry
aW5nIGxvZyBhbmQgc3RyaW5nIGV2YWwgcmVzdWx0LiBXZSBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRo
ZW0gYmFzZWQgb24gbWVzc2FnZSB0eXBlLgorICAgICAgICB2YXIgc2hvdWxkRm9ybWF0TWVzc2Fn
ZSA9IFdlYkluc3BlY3Rvci5SZW1vdGVPYmplY3QudHlwZShwYXJhbWV0ZXJzWzBdKSA9PT0gInN0
cmluZyIgJiYgdGhpcy50eXBlICE9PSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2Fn
ZVR5cGUuUmVzdWx0OworCisgICAgICAgIGlmIChzaG91bGRGb3JtYXRNZXNzYWdlKSB7CisgICAg
ICAgICAgICAvLyBNdWx0aXBsZSBwYXJhbWV0ZXJzIHdpdGggdGhlIGZpcnN0IGJlaW5nIGEgZm9y
bWF0IHN0cmluZy4gU2F2ZSB1bnVzZWQgc3Vic3RpdHV0aW9ucy4KKyAgICAgICAgICAgIHZhciBy
ZXN1bHQgPSB0aGlzLl9mb3JtYXRXaXRoU3Vic3RpdHV0aW9uU3RyaW5nKHBhcmFtZXRlcnMsIGZv
cm1hdHRlZFJlc3VsdCk7CisgICAgICAgICAgICBwYXJhbWV0ZXJzID0gcmVzdWx0LnVudXNlZFN1
YnN0aXR1dGlvbnM7CisgICAgICAgICAgICBpZiAocGFyYW1ldGVycy5sZW5ndGgpCisgICAgICAg
ICAgICAgICAgZm9ybWF0dGVkUmVzdWx0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHRO
b2RlKCIgIikpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gV2ViSW5z
cGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLlRhYmxlKSB7CisgICAgICAgICAgICBm
b3JtYXR0ZWRSZXN1bHQuYXBwZW5kQ2hpbGQodGhpcy5fZm9ybWF0UGFyYW1ldGVyQXNUYWJsZShw
YXJhbWV0ZXJzKSk7CisgICAgICAgICAgICByZXR1cm4gZm9ybWF0dGVkUmVzdWx0OworICAgICAg
ICB9CisKKyAgICAgICAgLy8gU2luZ2xlIHBhcmFtZXRlciwgb3IgdW51c2VkIHN1YnN0aXR1dGlv
bnMgZnJvbSBhYm92ZS4KKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLmxl
bmd0aDsgKytpKSB7CisgICAgICAgICAgICAvLyBJbmxpbmUgc3RyaW5ncyB3aGVuIGZvcm1hdHRp
bmcuCisgICAgICAgICAgICBpZiAoc2hvdWxkRm9ybWF0TWVzc2FnZSAmJiBwYXJhbWV0ZXJzW2ld
LnR5cGUgPT09ICJzdHJpbmciKSB7CisgICAgICAgICAgICAgICAgdmFyIHNwYW4gPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisgICAgICAgICAgICAgICAgc3Bhbi5jbGFzc0xpc3Qu
YWRkKCJ0eXBlLXN0cmluZyIpOworICAgICAgICAgICAgICAgIHNwYW4udGV4dENvbnRlbnQgPSBw
YXJhbWV0ZXJzW2ldLmRlc2NyaXB0aW9uOworICAgICAgICAgICAgICAgIGZvcm1hdHRlZFJlc3Vs
dC5hcHBlbmRDaGlsZChzcGFuKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAg
IGZvcm1hdHRlZFJlc3VsdC5hcHBlbmRDaGlsZCh0aGlzLl9mb3JtYXRQYXJhbWV0ZXIocGFyYW1l
dGVyc1tpXSwgZmFsc2UpKTsKKworICAgICAgICAgICAgaWYgKGkgPCBwYXJhbWV0ZXJzLmxlbmd0
aCAtIDEgJiYgIXRoaXMuX2lzRXhwYW5kYWJsZShwYXJhbWV0ZXJzW2ldKSkKKyAgICAgICAgICAg
ICAgICBmb3JtYXR0ZWRSZXN1bHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUo
IiAiKSk7CisKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZm9ybWF0dGVkUmVzdWx0OworICAg
IH0sCisKKyAgICBfaXNFeHBhbmRhYmxlOiBmdW5jdGlvbihyZW1vdGVPYmplY3QpIHsKKyAgICAg
ICAgaWYgKCFyZW1vdGVPYmplY3QpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAg
ICAgaWYgKHJlbW90ZU9iamVjdC5oYXNDaGlsZHJlbiAmJiByZW1vdGVPYmplY3QucHJldmlldyAm
JiByZW1vdGVPYmplY3QucHJldmlldy5sb3NzbGVzcykKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgICAgICByZXR1cm4gcmVtb3RlT2JqZWN0Lmhhc0NoaWxkcmVuOworICAgIH0sCisK
KyAgICBfZm9ybWF0UGFyYW1ldGVyOiBmdW5jdGlvbihvdXRwdXQsIGZvcmNlT2JqZWN0Rm9ybWF0
KQorICAgIHsKKyAgICAgICAgdmFyIHR5cGU7CisgICAgICAgIGlmIChmb3JjZU9iamVjdEZvcm1h
dCkKKyAgICAgICAgICAgIHR5cGUgPSAib2JqZWN0IjsKKyAgICAgICAgZWxzZSBpZiAob3V0cHV0
IGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdCkKKyAgICAgICAgICAgIHR5cGUg
PSBvdXRwdXQuc3VidHlwZSB8fCBvdXRwdXQudHlwZTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgdHlwZSA9IHR5cGVvZiBvdXRwdXQ7CisKKyAgICAgICAgdmFyIGZvcm1hdHRlciA9IHRoaXMu
X2N1c3RvbUZvcm1hdHRlcnNbdHlwZV07CisgICAgICAgIGlmICghZm9ybWF0dGVyKQorICAgICAg
ICAgICAgZm9ybWF0dGVyID0gdGhpcy5fZm9ybWF0UGFyYW1ldGVyQXNWYWx1ZTsKKworICAgICAg
ICB2YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKworICAgICAgICBp
ZiAodGhpcy5faXNFeHBhbmRhYmxlKG91dHB1dCkpCisgICAgICAgICAgICBzcGFuLmNsYXNzTGlz
dC5hZGQoImV4cGFuZGFibGUiKTsKKworICAgICAgICBmb3JtYXR0ZXIuY2FsbCh0aGlzLCBvdXRw
dXQsIHNwYW4sIGZvcmNlT2JqZWN0Rm9ybWF0KTsKKyAgICAgICAgcmV0dXJuIHNwYW47CisgICAg
fSwKKworICAgIF9mb3JtYXRQYXJhbWV0ZXJBc1ZhbHVlOiBmdW5jdGlvbih2YWx1ZSwgZWxlbSkK
KyAgICB7CisgICAgICAgIGVsZW0uYXBwZW5kQ2hpbGQoV2ViSW5zcGVjdG9yLkZvcm1hdHRlZFZh
bHVlLmNyZWF0ZUVsZW1lbnRGb3JSZW1vdGVPYmplY3QodmFsdWUpKTsKKyAgICB9LAorCisgICAg
X2Zvcm1hdFBhcmFtZXRlckFzT2JqZWN0OiBmdW5jdGlvbihvYmosIGVsZW0sIGZvcmNlRXhwYW5z
aW9uKQorICAgIHsKKyAgICAgICAgdGhpcy5fb2JqZWN0VHJlZSA9IG5ldyBXZWJJbnNwZWN0b3Iu
T2JqZWN0VHJlZVZpZXcob2JqLCBXZWJJbnNwZWN0b3IuT2JqZWN0VHJlZVZpZXcuTW9kZS5Qcm9w
ZXJ0aWVzLCB0aGlzLl9yb290UHJvcGVydHlQYXRoRm9yT2JqZWN0KG9iaiksIGZvcmNlRXhwYW5z
aW9uKTsKKyAgICAgICAgZWxlbS5hcHBlbmRDaGlsZCh0aGlzLl9vYmplY3RUcmVlLmVsZW1lbnQp
OworICAgIH0sCisKKyAgICBfZm9ybWF0UGFyYW1ldGVyQXNTdHJpbmc6IGZ1bmN0aW9uKG91dHB1
dCwgZWxlbSkKKyAgICB7CisgICAgICAgIHZhciBzcGFuID0gV2ViSW5zcGVjdG9yLkZvcm1hdHRl
ZFZhbHVlLmNyZWF0ZUxpbmtpZmllZEVsZW1lbnRTdHJpbmcob3V0cHV0LmRlc2NyaXB0aW9uKTsK
KyAgICAgICAgZWxlbS5hcHBlbmRDaGlsZChzcGFuKTsKKyAgICB9LAorCisgICAgX2Zvcm1hdFBh
cmFtZXRlckFzTm9kZTogZnVuY3Rpb24ob2JqZWN0LCBlbGVtKQorICAgIHsKKyAgICAgICAgdmFy
IHNwYW4gPSBXZWJJbnNwZWN0b3IuRm9ybWF0dGVkVmFsdWUuY3JlYXRlRWxlbWVudEZvck5vZGUo
b2JqZWN0KTsKKyAgICAgICAgZWxlbS5hcHBlbmRDaGlsZChzcGFuKTsKKyAgICB9LAorCisgICAg
X2Zvcm1hdFBhcmFtZXRlckFzQXJyYXk6IGZ1bmN0aW9uKGFyciwgZWxlbSkKKyAgICB7CisgICAg
ICAgIHRoaXMuX29iamVjdFRyZWUgPSBuZXcgV2ViSW5zcGVjdG9yLk9iamVjdFRyZWVWaWV3KGFy
ciwgV2ViSW5zcGVjdG9yLk9iamVjdFRyZWVWaWV3Lk1vZGUuUHJvcGVydGllcywgdGhpcy5fcm9v
dFByb3BlcnR5UGF0aEZvck9iamVjdChhcnIpKTsKKyAgICAgICAgZWxlbS5hcHBlbmRDaGlsZCh0
aGlzLl9vYmplY3RUcmVlLmVsZW1lbnQpOworICAgIH0sCisKKyAgICBfcm9vdFByb3BlcnR5UGF0
aEZvck9iamVjdDogZnVuY3Rpb24ob2JqZWN0KQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLnNh
dmVkUmVzdWx0SW5kZXgpCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKworICAgICAgICByZXR1
cm4gbmV3IFdlYkluc3BlY3Rvci5Qcm9wZXJ0eVBhdGgob2JqZWN0LCAiJCIgKyB0aGlzLnNhdmVk
UmVzdWx0SW5kZXgpOworICAgIH0sCisKKyAgICBfdXNlclByb3ZpZGVkQ29sdW1uTmFtZXM6IGZ1
bmN0aW9uKGNvbHVtbk5hbWVzQXJndW1lbnQpCisgICAgeworICAgICAgICBpZiAoIWNvbHVtbk5h
bWVzQXJndW1lbnQpCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKworICAgICAgICB2YXIgcmVt
b3RlT2JqZWN0ID0gV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdC5mcm9tUGF5bG9hZChjb2x1bW5O
YW1lc0FyZ3VtZW50KTsKKworICAgICAgICAvLyBTaW5nbGUgcHJpbWl0aXZlIGFyZ3VtZW50Lgor
ICAgICAgICBpZiAocmVtb3RlT2JqZWN0LnR5cGUgPT09ICJzdHJpbmciIHx8IHJlbW90ZU9iamVj
dC50eXBlID09PSAibnVtYmVyIikKKyAgICAgICAgICAgIHJldHVybiBbU3RyaW5nKGNvbHVtbk5h
bWVzQXJndW1lbnQudmFsdWUpXTsKKworICAgICAgICAvLyBJZ25vcmUgZXZlcnl0aGluZyB0aGF0
IGlzIG5vdCBhbiBhcnJheSB3aXRoIHByb3BlcnR5IHByZXZpZXdzLgorICAgICAgICBpZiAocmVt
b3RlT2JqZWN0LnR5cGUgIT09ICJvYmplY3QiIHx8IHJlbW90ZU9iamVjdC5zdWJ0eXBlICE9PSAi
YXJyYXkiIHx8ICFyZW1vdGVPYmplY3QucHJldmlldyB8fCAhcmVtb3RlT2JqZWN0LnByZXZpZXcu
cHJvcGVydHlQcmV2aWV3cykKKyAgICAgICAgICAgIHJldHVybiBudWxsOworCisgICAgICAgIC8v
IEFycmF5LiBMb29rIGludG8gdGhlIHByZXZpZXcgYW5kIGdldCBzdHJpbmcgdmFsdWVzLgorICAg
ICAgICB2YXIgZXh0cmFjdGVkQ29sdW1uTmFtZXMgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgcHJv
cGVydHlQcmV2aWV3IG9mIHJlbW90ZU9iamVjdC5wcmV2aWV3LnByb3BlcnR5UHJldmlld3MpIHsK
KyAgICAgICAgICAgIGlmIChwcm9wZXJ0eVByZXZpZXcudHlwZSA9PT0gInN0cmluZyIgfHwgcHJv
cGVydHlQcmV2aWV3LnR5cGUgPT09ICJudW1iZXIiKQorICAgICAgICAgICAgICAgIGV4dHJhY3Rl
ZENvbHVtbk5hbWVzLnB1c2goU3RyaW5nKHByb3BlcnR5UHJldmlldy52YWx1ZSkpOworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIGV4dHJhY3RlZENvbHVtbk5hbWVzLmxlbmd0aCA/IGV4dHJh
Y3RlZENvbHVtbk5hbWVzIDogbnVsbDsKKyAgICB9LAorCisgICAgX2Zvcm1hdFBhcmFtZXRlckFz
VGFibGU6IGZ1bmN0aW9uKHBhcmFtZXRlcnMpCisgICAgeworICAgICAgICB2YXIgZWxlbWVudCA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICAgICAgdmFyIHRhYmxlID0gcGFy
YW1ldGVyc1swXTsKKyAgICAgICAgaWYgKCF0YWJsZSB8fCAhdGFibGUucHJldmlldykKKyAgICAg
ICAgICAgIHJldHVybiBlbGVtZW50OworCisgICAgICAgIHZhciByb3dzID0gW107CisgICAgICAg
IHZhciBjb2x1bW5OYW1lcyA9IFtdOworICAgICAgICB2YXIgZmxhdFZhbHVlcyA9IFtdOworICAg
ICAgICB2YXIgcHJldmlldyA9IHRhYmxlLnByZXZpZXc7CisgICAgICAgIHZhciB1c2VyUHJvdmlk
ZWRDb2x1bW5OYW1lcyA9IGZhbHNlOworCisgICAgICAgIC8vIFVzZXIgcHJvdmlkZWQgY29sdW1u
TmFtZXMuCisgICAgICAgIHZhciBleHRyYWN0ZWRDb2x1bW5OYW1lcyA9IHRoaXMuX3VzZXJQcm92
aWRlZENvbHVtbk5hbWVzKHBhcmFtZXRlcnNbMV0pOworICAgICAgICBpZiAoZXh0cmFjdGVkQ29s
dW1uTmFtZXMpIHsKKyAgICAgICAgICAgIHVzZXJQcm92aWRlZENvbHVtbk5hbWVzID0gdHJ1ZTsK
KyAgICAgICAgICAgIGNvbHVtbk5hbWVzID0gZXh0cmFjdGVkQ29sdW1uTmFtZXM7CisgICAgICAg
IH0KKworICAgICAgICAvLyBDaGVjayBmaXJzdCBmb3IgdmFsdWVQcmV2aWV3cyBpbiB0aGUgcHJv
cGVydGllcyBtZWFuaW5nIHRoaXMgd2FzIGFuIGFycmF5IG9mIG9iamVjdHMuCisgICAgICAgIGlm
IChwcmV2aWV3LnByb3BlcnR5UHJldmlld3MpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgcHJldmlldy5wcm9wZXJ0eVByZXZpZXdzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAg
ICAgICAgdmFyIHJvd1Byb3BlcnR5ID0gcHJldmlldy5wcm9wZXJ0eVByZXZpZXdzW2ldOworICAg
ICAgICAgICAgICAgIHZhciByb3dQcmV2aWV3ID0gcm93UHJvcGVydHkudmFsdWVQcmV2aWV3Owor
ICAgICAgICAgICAgICAgIGlmICghcm93UHJldmlldykKKyAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgICAgICAgICB2YXIgcm93VmFsdWUgPSB7fTsKKyAgICAgICAgICAg
ICAgICBjb25zdCBtYXhDb2x1bW5zVG9SZW5kZXIgPSAxMDsKKyAgICAgICAgICAgICAgICBmb3Ig
KHZhciBqID0gMDsgaiA8IHJvd1ByZXZpZXcucHJvcGVydHlQcmV2aWV3cy5sZW5ndGg7ICsraikg
eworICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbFByb3BlcnR5ID0gcm93UHJldmlldy5wcm9w
ZXJ0eVByZXZpZXdzW2pdOworICAgICAgICAgICAgICAgICAgICB2YXIgY29sdW1uUmVuZGVyZWQg
PSBjb2x1bW5OYW1lcy5jb250YWlucyhjZWxsUHJvcGVydHkubmFtZSk7CisgICAgICAgICAgICAg
ICAgICAgIGlmICghY29sdW1uUmVuZGVyZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICh1c2VyUHJvdmlkZWRDb2x1bW5OYW1lcyB8fCBjb2x1bW5OYW1lcy5sZW5ndGggPT09IG1heENv
bHVtbnNUb1JlbmRlcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbHVtblJlbmRlcmVkID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbHVtbk5hbWVzLnB1c2goY2VsbFByb3BlcnR5Lm5hbWUpOworICAgICAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgcm93VmFsdWVbY2VsbFByb3Bl
cnR5Lm5hbWVdID0gV2ViSW5zcGVjdG9yLkZvcm1hdHRlZFZhbHVlLmNyZWF0ZUVsZW1lbnRGb3JQ
cm9wZXJ0eVByZXZpZXcoY2VsbFByb3BlcnR5KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgcm93cy5wdXNoKFtyb3dQcm9wZXJ0eS5uYW1lLCByb3dWYWx1ZV0pOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgdGhlcmUgd2VyZSB2YWx1ZVByZXZp
ZXdzLCBjb252ZXJ0IHRvIGEgZmxhdCBsaXN0LgorICAgICAgICBpZiAocm93cy5sZW5ndGgpIHsK
KyAgICAgICAgICAgIGNvbnN0IGVtRGFzaCA9ICJcdTIwMTQiOworICAgICAgICAgICAgY29sdW1u
TmFtZXMudW5zaGlmdChXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIihJbmRleCkiKSk7CisgICAgICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAg
ICAgICB2YXIgcm93TmFtZSA9IHJvd3NbaV1bMF07CisgICAgICAgICAgICAgICAgdmFyIHJvd1Zh
bHVlID0gcm93c1tpXVsxXTsKKyAgICAgICAgICAgICAgICBmbGF0VmFsdWVzLnB1c2gocm93TmFt
ZSk7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCBjb2x1bW5OYW1lcy5sZW5n
dGg7ICsraikgeworICAgICAgICAgICAgICAgICAgICB2YXIgY29sdW1uTmFtZSA9IGNvbHVtbk5h
bWVzW2pdOworICAgICAgICAgICAgICAgICAgICBpZiAoIShjb2x1bW5OYW1lIGluIHJvd1ZhbHVl
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZsYXRWYWx1ZXMucHVzaChlbURhc2gpOworICAg
ICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBmbGF0VmFsdWVz
LnB1c2gocm93VmFsdWVbY29sdW1uTmFtZV0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHRoZXJlIHdlcmUgbm8gdmFsdWUgUHJl
dmlld3MsIHRoZW4gY2hlY2sgZm9yIGFuIGFycmF5IG9mIHZhbHVlcy4KKyAgICAgICAgaWYgKCFm
bGF0VmFsdWVzLmxlbmd0aCAmJiBwcmV2aWV3LnByb3BlcnR5UHJldmlld3MpIHsKKyAgICAgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJldmlldy5wcm9wZXJ0eVByZXZpZXdzLmxlbmd0aDsg
KytpKSB7CisgICAgICAgICAgICAgICAgdmFyIHJvd1Byb3BlcnR5ID0gcHJldmlldy5wcm9wZXJ0
eVByZXZpZXdzW2ldOworICAgICAgICAgICAgICAgIGlmICghKCJ2YWx1ZSIgaW4gcm93UHJvcGVy
dHkpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIGlm
ICghY29sdW1uTmFtZXMubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbHVtbk5hbWVz
LnB1c2goV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJJbmRleCIpKTsKKyAgICAgICAgICAgICAgICAg
ICAgY29sdW1uTmFtZXMucHVzaChXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIlZhbHVlIikpOworICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGZsYXRWYWx1ZXMucHVzaChyb3dQcm9w
ZXJ0eS5uYW1lKTsKKyAgICAgICAgICAgICAgICBmbGF0VmFsdWVzLnB1c2goV2ViSW5zcGVjdG9y
LkZvcm1hdHRlZFZhbHVlLmNyZWF0ZUVsZW1lbnRGb3JQcm9wZXJ0eVByZXZpZXcocm93UHJvcGVy
dHkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIGxvc3NsZXNz
IG9yIG5vdCB0YWJsZSBkYXRhLCBvdXRwdXQgdGhlIG9iamVjdCBzbyBmdWxsIGRhdGEgY2FuIGJl
IGdvdHRlbi4KKyAgICAgICAgaWYgKCFwcmV2aWV3Lmxvc3NsZXNzIHx8ICFmbGF0VmFsdWVzLmxl
bmd0aCkgeworICAgICAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9mb3JtYXRQYXJh
bWV0ZXIodGFibGUpKTsKKyAgICAgICAgICAgIGlmICghZmxhdFZhbHVlcy5sZW5ndGgpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgICAgIH0KKworICAgICAgICB2YXIgZGF0
YUdyaWRDb250YWluZXIgPSBlbGVtZW50LmNyZWF0ZUNoaWxkKCJzcGFuIik7CisgICAgICAgIHZh
ciBkYXRhR3JpZCA9IFdlYkluc3BlY3Rvci5EYXRhR3JpZC5jcmVhdGVTb3J0YWJsZURhdGFHcmlk
KGNvbHVtbk5hbWVzLCBmbGF0VmFsdWVzKTsKKyAgICAgICAgZGF0YUdyaWQuZWxlbWVudC5jbGFz
c0xpc3QuYWRkKCJpbmxpbmUiKTsKKyAgICAgICAgZGF0YUdyaWRDb250YWluZXIuYXBwZW5kQ2hp
bGQoZGF0YUdyaWQuZWxlbWVudCk7CisKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgfSwK
KworICAgIF9mb3JtYXRXaXRoU3Vic3RpdHV0aW9uU3RyaW5nOiBmdW5jdGlvbihwYXJhbWV0ZXJz
LCBmb3JtYXR0ZWRSZXN1bHQpCisgICAgeworICAgICAgICB2YXIgZm9ybWF0dGVycyA9IHt9Owor
CisgICAgICAgIGZ1bmN0aW9uIHBhcmFtZXRlckZvcm1hdHRlcihmb3JjZSwgb2JqKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZm9ybWF0UGFyYW1ldGVyKG9iaiwgZm9yY2Up
OworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gc3RyaW5nRm9ybWF0dGVyKG9iaikKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG9iai5kZXNjcmlwdGlvbjsKKyAgICAgICAgfQor
CisgICAgICAgIGZ1bmN0aW9uIGZsb2F0Rm9ybWF0dGVyKG9iaikKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKHR5cGVvZiBvYmoudmFsdWUgIT09ICJudW1iZXIiKQorICAgICAgICAgICAgICAg
IHJldHVybiBwYXJzZUZsb2F0KG9iai5kZXNjcmlwdGlvbik7CisgICAgICAgICAgICByZXR1cm4g
b2JqLnZhbHVlOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gaW50ZWdlckZvcm1hdHRl
cihvYmopCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqLnZhbHVlICE9PSAi
bnVtYmVyIikKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQob2JqLmRlc2NyaXB0aW9u
KTsKKyAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKG9iai52YWx1ZSk7CisgICAgICAgIH0K
KworICAgICAgICB2YXIgY3VycmVudFN0eWxlID0gbnVsbDsKKyAgICAgICAgZnVuY3Rpb24gc3R5
bGVGb3JtYXR0ZXIob2JqKQorICAgICAgICB7CisgICAgICAgICAgICBjdXJyZW50U3R5bGUgPSB7
fTsKKyAgICAgICAgICAgIHZhciBidWZmZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFu
Iik7CisgICAgICAgICAgICBidWZmZXIuc2V0QXR0cmlidXRlKCJzdHlsZSIsIG9iai5kZXNjcmlw
dGlvbik7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ1ZmZlci5zdHlsZS5sZW5n
dGg7IGkrKykgeworICAgICAgICAgICAgICAgIHZhciBwcm9wZXJ0eSA9IGJ1ZmZlci5zdHlsZVtp
XTsKKyAgICAgICAgICAgICAgICBpZiAoaXNXaGl0ZWxpc3RlZFByb3BlcnR5KHByb3BlcnR5KSkK
KyAgICAgICAgICAgICAgICAgICAgY3VycmVudFN0eWxlW3Byb3BlcnR5XSA9IGJ1ZmZlci5zdHls
ZVtwcm9wZXJ0eV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlv
biBpc1doaXRlbGlzdGVkUHJvcGVydHkocHJvcGVydHkpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHZhciBwcmVmaXhlcyA9IFsiYmFja2dyb3VuZCIsICJib3JkZXIiLCAiY29sb3IiLCAiZm9udCIs
ICJsaW5lIiwgIm1hcmdpbiIsICJwYWRkaW5nIiwgInRleHQiLCAiLXdlYmtpdC1iYWNrZ3JvdW5k
IiwgIi13ZWJraXQtYm9yZGVyIiwgIi13ZWJraXQtZm9udCIsICItd2Via2l0LW1hcmdpbiIsICIt
d2Via2l0LXBhZGRpbmciLCAiLXdlYmtpdC10ZXh0Il07CisgICAgICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHByZWZpeGVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKHBy
b3BlcnR5LnN0YXJ0c1dpdGgocHJlZml4ZXNbaV0pKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIEZpcmVidWcgdXNlcyAlbyBmb3IgZm9ybWF0dGluZyBvYmplY3Rz
LgorICAgICAgICBmb3JtYXR0ZXJzLm8gPSBwYXJhbWV0ZXJGb3JtYXR0ZXIuYmluZCh0aGlzLCBm
YWxzZSk7CisgICAgICAgIGZvcm1hdHRlcnMucyA9IHN0cmluZ0Zvcm1hdHRlcjsKKyAgICAgICAg
Zm9ybWF0dGVycy5mID0gZmxvYXRGb3JtYXR0ZXI7CisKKyAgICAgICAgLy8gRmlyZWJ1ZyBhbGxv
d3MgYm90aCAlaSBhbmQgJWQgZm9yIGZvcm1hdHRpbmcgaW50ZWdlcnMuCisgICAgICAgIGZvcm1h
dHRlcnMuaSA9IGludGVnZXJGb3JtYXR0ZXI7CisgICAgICAgIGZvcm1hdHRlcnMuZCA9IGludGVn
ZXJGb3JtYXR0ZXI7CisKKyAgICAgICAgLy8gRmlyZWJ1ZyB1c2VzICVjIGZvciBzdHlsaW5nIHRo
ZSBtZXNzYWdlLgorICAgICAgICBmb3JtYXR0ZXJzLmMgPSBzdHlsZUZvcm1hdHRlcjsKKworICAg
ICAgICAvLyBTdXBwb3J0ICVPIHRvIGZvcmNlIG9iamVjdCBmb3JtYXR0aW5nLCBpbnN0ZWFkIG9m
IHRoZSB0eXBlLWJhc2VkICVvIGZvcm1hdHRpbmcuCisgICAgICAgIGZvcm1hdHRlcnMuTyA9IHBh
cmFtZXRlckZvcm1hdHRlci5iaW5kKHRoaXMsIHRydWUpOworCisgICAgICAgIGZ1bmN0aW9uIGFw
cGVuZChhLCBiKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoYiBpbnN0YW5jZW9mIE5vZGUp
CisgICAgICAgICAgICAgICAgYS5hcHBlbmRDaGlsZChiKTsKKyAgICAgICAgICAgIGVsc2UgaWYg
KGIpIHsKKyAgICAgICAgICAgICAgICB2YXIgdG9BcHBlbmQgPSBXZWJJbnNwZWN0b3IubGlua2lm
eVN0cmluZ0FzRnJhZ21lbnQoYi50b1N0cmluZygpKTsKKyAgICAgICAgICAgICAgICBpZiAoY3Vy
cmVudFN0eWxlKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciB3cmFwcGVyID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgic3BhbiIpOworICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkg
aW4gY3VycmVudFN0eWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlci5zdHlsZVtr
ZXldID0gY3VycmVudFN0eWxlW2tleV07CisgICAgICAgICAgICAgICAgICAgIHdyYXBwZXIuYXBw
ZW5kQ2hpbGQodG9BcHBlbmQpOworICAgICAgICAgICAgICAgICAgICB0b0FwcGVuZCA9IHdyYXBw
ZXI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHZhciBzcGFuID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOworICAgICAgICAgICAgICAgIHNwYW4uY2xhc3NOYW1l
ID0gInR5cGUtc3RyaW5nIjsKKyAgICAgICAgICAgICAgICBzcGFuLmFwcGVuZENoaWxkKHRvQXBw
ZW5kKTsKKyAgICAgICAgICAgICAgICBhLmFwcGVuZENoaWxkKHNwYW4pOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuIGE7CisgICAgICAgIH0KKworICAgICAgICAvLyBTdHJpbmcu
Zm9ybWF0IGRvZXMgdHJlYXQgZm9ybWF0dGVkUmVzdWx0IGxpa2UgYSBCdWlsZGVyLCByZXN1bHQg
aXMgYW4gb2JqZWN0LgorICAgICAgICByZXR1cm4gU3RyaW5nLmZvcm1hdChwYXJhbWV0ZXJzWzBd
LmRlc2NyaXB0aW9uLCBwYXJhbWV0ZXJzLnNsaWNlKDEpLCBmb3JtYXR0ZXJzLCBmb3JtYXR0ZWRS
ZXN1bHQsIGFwcGVuZCk7CisgICAgfSwKKworICAgIGRlY29yYXRlTWVzc2FnZUVsZW1lbnQ6IGZ1
bmN0aW9uKGVsZW1lbnQpCisgICAgeworICAgICAgICBpZiAodGhpcy5fZWxlbWVudCkKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9lbGVtZW50OworCisgICAgICAgIGVsZW1lbnQubWVzc2FnZSA9
IHRoaXM7CisgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiY29uc29sZS1tZXNzYWdlIik7
CisKKyAgICAgICAgdGhpcy5fZWxlbWVudCA9IGVsZW1lbnQ7CisKKyAgICAgICAgc3dpdGNoICh0
aGlzLmxldmVsKSB7CisgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2Fn
ZS5NZXNzYWdlTGV2ZWwuVGlwOgorICAgICAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFk
ZCgiY29uc29sZS10aXAtbGV2ZWwiKTsKKyAgICAgICAgICAgICAgICBlbGVtZW50LnNldEF0dHJp
YnV0ZSgiZGF0YS1sYWJlbHByZWZpeCIsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiVGlwOiAiKSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5D
b25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuTG9nOgorICAgICAgICAgICAgICAgIGVsZW1lbnQu
Y2xhc3NMaXN0LmFkZCgiY29uc29sZS1sb2ctbGV2ZWwiKTsKKyAgICAgICAgICAgICAgICBlbGVt
ZW50LnNldEF0dHJpYnV0ZSgiZGF0YS1sYWJlbHByZWZpeCIsIFdlYkluc3BlY3Rvci5VSVN0cmlu
ZygiTG9nOiAiKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdl
Ykluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuRGVidWc6CisgICAgICAgICAg
ICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjb25zb2xlLWRlYnVnLWxldmVsIik7CisgICAg
ICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoImRhdGEtbGFiZWxwcmVmaXgiLCBXZWJJ
bnNwZWN0b3IuVUlTdHJpbmcoIkRlYnVnOiAiKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwu
V2FybmluZzoKKyAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoImNvbnNvbGUt
d2FybmluZy1sZXZlbCIpOworICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCJk
YXRhLWxhYmVscHJlZml4IiwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJXYXJuaW5nOiAiKSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25z
b2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuRXJyb3I6CisgICAgICAgICAgICAgICAgZWxlbWVudC5j
bGFzc0xpc3QuYWRkKCJjb25zb2xlLWVycm9yLWxldmVsIik7CisgICAgICAgICAgICAgICAgZWxl
bWVudC5zZXRBdHRyaWJ1dGUoImRhdGEtbGFiZWxwcmVmaXgiLCBXZWJJbnNwZWN0b3IuVUlTdHJp
bmcoIkVycm9yOiAiKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAodGhpcy50eXBlID09PSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2Fn
ZVR5cGUuU3RhcnRHcm91cCB8fCB0aGlzLnR5cGUgPT09IFdlYkluc3BlY3Rvci5Db25zb2xlTWVz
c2FnZS5NZXNzYWdlVHlwZS5TdGFydEdyb3VwQ29sbGFwc2VkKQorICAgICAgICAgICAgZWxlbWVu
dC5jbGFzc0xpc3QuYWRkKCJjb25zb2xlLWdyb3VwLXRpdGxlIik7CisKKyAgICAgICAgZWxlbWVu
dC5hcHBlbmRDaGlsZCh0aGlzLmZvcm1hdHRlZE1lc3NhZ2UpOworCisgICAgICAgIGlmICh0aGlz
LnJlcGVhdENvdW50ID4gMSkKKyAgICAgICAgICAgIHRoaXMudXBkYXRlUmVwZWF0Q291bnQoKTsK
KworICAgICAgICByZXR1cm4gZWxlbWVudDsKKyAgICB9LAorCisgICAgdG9NZXNzYWdlRWxlbWVu
dDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX2VsZW1lbnQpCisgICAgICAg
ICAgICByZXR1cm4gdGhpcy5fZWxlbWVudDsKKworICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworCisgICAgICAgIHJldHVybiB0aGlzLmRlY29yYXRl
TWVzc2FnZUVsZW1lbnQoZWxlbWVudCk7CisgICAgfSwKKworICAgIF9wb3B1bGF0ZVN0YWNrVHJh
Y2VUcmVlRWxlbWVudDogZnVuY3Rpb24ocGFyZW50VHJlZUVsZW1lbnQpCisgICAgeworICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3N0YWNrVHJhY2UubGVuZ3RoOyBpKyspIHsKKyAg
ICAgICAgICAgIHZhciBmcmFtZSA9IHRoaXMuX3N0YWNrVHJhY2VbaV07CisKKyAgICAgICAgICAg
IHZhciBjb250ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAgICAg
ICB2YXIgbWVzc2FnZVRleHRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIp
OworICAgICAgICAgICAgbWVzc2FnZVRleHRFbGVtZW50LmNsYXNzTmFtZSA9ICJjb25zb2xlLW1l
c3NhZ2UtdGV4dCI7CisgICAgICAgICAgICB2YXIgZnVuY3Rpb25OYW1lID0gZnJhbWUuZnVuY3Rp
b25OYW1lIHx8IFdlYkluc3BlY3Rvci5VSVN0cmluZygiKGFub255bW91cyBmdW5jdGlvbikiKTsK
KyAgICAgICAgICAgIG1lc3NhZ2VUZXh0RWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVh
dGVUZXh0Tm9kZShmdW5jdGlvbk5hbWUpKTsKKyAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kQ2hp
bGQobWVzc2FnZVRleHRFbGVtZW50KTsKKworICAgICAgICAgICAgaWYgKGZyYW1lLnVybCAmJiAh
dGhpcy5fc2hvdWxkSGlkZVVSTChmcmFtZS51cmwpKSB7CisgICAgICAgICAgICAgICAgdmFyIHVy
bEVsZW1lbnQgPSB0aGlzLl9saW5raWZ5Q2FsbEZyYW1lKGZyYW1lKTsKKyAgICAgICAgICAgICAg
ICBjb250ZW50LmFwcGVuZENoaWxkKHVybEVsZW1lbnQpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICB2YXIgdHJlZUVsZW1lbnQgPSBuZXcgVHJlZUVsZW1lbnQoY29udGVudCk7CisgICAg
ICAgICAgICBwYXJlbnRUcmVlRWxlbWVudC5hcHBlbmRDaGlsZCh0cmVlRWxlbWVudCk7CisgICAg
ICAgIH0KKyAgICB9LAorCisgICAgdXBkYXRlUmVwZWF0Q291bnQ6IGZ1bmN0aW9uKCkgeworICAg
ICAgICBpZiAoIXRoaXMucmVwZWF0Q291bnRFbGVtZW50KSB7CisgICAgICAgICAgICB0aGlzLnJl
cGVhdENvdW50RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICAg
ICAgICAgIHRoaXMucmVwZWF0Q291bnRFbGVtZW50LmNsYXNzTmFtZSA9ICJidWJibGUiOworCisg
ICAgICAgICAgICB0aGlzLl9lbGVtZW50Lmluc2VydEJlZm9yZSh0aGlzLnJlcGVhdENvdW50RWxl
bWVudCwgdGhpcy5fZWxlbWVudC5maXJzdENoaWxkKTsKKyAgICAgICAgfQorICAgICAgICB0aGlz
LnJlcGVhdENvdW50RWxlbWVudC50ZXh0Q29udGVudCA9IHRoaXMucmVwZWF0Q291bnQ7CisgICAg
fSwKKworICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgc291cmNl
U3RyaW5nOworICAgICAgICBzd2l0Y2ggKHRoaXMuc291cmNlKSB7CisgICAgICAgICAgICBjYXNl
IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNlLkhUTUw6CisgICAgICAg
ICAgICAgICAgc291cmNlU3RyaW5nID0gIkhUTUwiOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVNvdXJj
ZS5YTUw6CisgICAgICAgICAgICAgICAgc291cmNlU3RyaW5nID0gIlhNTCI7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2Fn
ZS5NZXNzYWdlU291cmNlLkpTOgorICAgICAgICAgICAgICAgIHNvdXJjZVN0cmluZyA9ICJKUyI7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5D
b25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNlLk5ldHdvcms6CisgICAgICAgICAgICAgICAgc291
cmNlU3RyaW5nID0gIk5ldHdvcmsiOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVNvdXJjZS5Db25zb2xl
QVBJOgorICAgICAgICAgICAgICAgIHNvdXJjZVN0cmluZyA9ICJDb25zb2xlQVBJIjsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVN
ZXNzYWdlLk1lc3NhZ2VTb3VyY2UuT3RoZXI6CisgICAgICAgICAgICAgICAgc291cmNlU3RyaW5n
ID0gIk90aGVyIjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg
IHZhciB0eXBlU3RyaW5nOworICAgICAgICBzd2l0Y2ggKHRoaXMudHlwZSkgeworICAgICAgICAg
ICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuTG9nOgorICAg
ICAgICAgICAgICAgIHR5cGVTdHJpbmcgPSAiTG9nIjsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBl
LkRpcjoKKyAgICAgICAgICAgICAgICB0eXBlU3RyaW5nID0gIkRpciI7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5N
ZXNzYWdlVHlwZS5EaXJYTUw6CisgICAgICAgICAgICAgICAgdHlwZVN0cmluZyA9ICJEaXIgWE1M
IjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9y
LkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLlRyYWNlOgorICAgICAgICAgICAgICAgIHR5cGVT
dHJpbmcgPSAiVHJhY2UiOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuU3RhcnRHcm91cENvbGxh
cHNlZDoKKyAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3Nh
Z2VUeXBlLlN0YXJ0R3JvdXA6CisgICAgICAgICAgICAgICAgdHlwZVN0cmluZyA9ICJTdGFydCBH
cm91cCI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdlYkluc3Bl
Y3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5FbmRHcm91cDoKKyAgICAgICAgICAgICAg
ICB0eXBlU3RyaW5nID0gIkVuZCBHcm91cCI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5Bc3Nl
cnQ6CisgICAgICAgICAgICAgICAgdHlwZVN0cmluZyA9ICJBc3NlcnQiOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2Uu
TWVzc2FnZVR5cGUuUmVzdWx0OgorICAgICAgICAgICAgICAgIHR5cGVTdHJpbmcgPSAiUmVzdWx0
IjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBz
b3VyY2VTdHJpbmcgKyAiICIgKyB0eXBlU3RyaW5nICsgIiAiICsgdGhpcy5sZXZlbFN0cmluZyAr
ICI6ICIgKyB0aGlzLmZvcm1hdHRlZE1lc3NhZ2UudGV4dENvbnRlbnQgKyAiXG4iICsgdGhpcy51
cmwgKyAiIGxpbmUgIiArIHRoaXMubGluZTsKKyAgICB9LAorCisgICAgZ2V0IHRleHQoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX21lc3NhZ2VUZXh0OworICAgIH0sCisKKyAgICBpc0Vx
dWFsOiBmdW5jdGlvbihtc2cpCisgICAgeworICAgICAgICBpZiAoIW1zZykKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAodGhpcy5fc3RhY2tUcmFjZSkgeworICAgICAg
ICAgICAgaWYgKCFtc2cuX3N0YWNrVHJhY2UpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgdmFyIGwgPSB0aGlzLl9zdGFja1RyYWNlOworICAgICAgICAgICAgdmFy
IHIgPSBtc2cuX3N0YWNrVHJhY2U7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGwu
bGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAobFtpXS51cmwgIT09IHJbaV0udXJs
IHx8CisgICAgICAgICAgICAgICAgICAgIGxbaV0uZnVuY3Rpb25OYW1lICE9PSByW2ldLmZ1bmN0
aW9uTmFtZSB8fAorICAgICAgICAgICAgICAgICAgICBsW2ldLmxpbmVOdW1iZXIgIT09IHJbaV0u
bGluZU51bWJlciB8fAorICAgICAgICAgICAgICAgICAgICBsW2ldLmNvbHVtbk51bWJlciAhPT0g
cltpXS5jb2x1bW5OdW1iZXIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAodGhpcy5zb3VyY2UgPT09
IG1zZy5zb3VyY2UpCisgICAgICAgICAgICAmJiAodGhpcy50eXBlID09PSBtc2cudHlwZSkKKyAg
ICAgICAgICAgICYmICh0aGlzLmxldmVsID09PSBtc2cubGV2ZWwpCisgICAgICAgICAgICAmJiAo
dGhpcy5saW5lID09PSBtc2cubGluZSkKKyAgICAgICAgICAgICYmICh0aGlzLnVybCA9PT0gbXNn
LnVybCkKKyAgICAgICAgICAgICYmICh0aGlzLm1lc3NhZ2UgPT09IG1zZy5tZXNzYWdlKQorICAg
ICAgICAgICAgJiYgKHRoaXMuX3JlcXVlc3QgPT09IG1zZy5fcmVxdWVzdCk7CisgICAgfSwKKwor
ICAgIGdldCBzdGFja1RyYWNlKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9zdGFja1Ry
YWNlOworICAgIH0sCisKKyAgICBjbG9uZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5jcmVhdGUodGhpcy5zb3VyY2UsIHRoaXMu
bGV2ZWwsIHRoaXMuX21lc3NhZ2VUZXh0LCB0aGlzLnR5cGUsIHRoaXMudXJsLCB0aGlzLmxpbmUs
IHRoaXMuY29sdW1uLCB0aGlzLnJlcGVhdENvdW50LCB0aGlzLl9wYXJhbWV0ZXJzLCB0aGlzLl9z
dGFja1RyYWNlLCB0aGlzLl9yZXF1ZXN0KTsKKyAgICB9LAorCisgICAgZ2V0IGxldmVsU3RyaW5n
KCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodGhpcy5sZXZlbCkgeworICAgICAgICAgICAgY2Fz
ZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLlRpcDoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gIlRpcCI7CisgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25z
b2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuTG9nOgorICAgICAgICAgICAgICAgIHJldHVybiAiTG9n
IjsKKyAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VM
ZXZlbC5XYXJuaW5nOgorICAgICAgICAgICAgICAgIHJldHVybiAiV2FybmluZyI7CisgICAgICAg
ICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuRGVidWc6
CisgICAgICAgICAgICAgICAgcmV0dXJuICJEZWJ1ZyI7CisgICAgICAgICAgICBjYXNlIFdlYklu
c3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuRXJyb3I6CisgICAgICAgICAgICAg
ICAgcmV0dXJuICJFcnJvciI7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgZ2V0IGNsaXBib2Fy
ZFByZWZpeFN0cmluZygpCisgICAgeworICAgICAgICByZXR1cm4gIlsiICsgdGhpcy5sZXZlbFN0
cmluZyArICJdICI7CisgICAgfSwKKworICAgIHRvQ2xpcGJvYXJkU3RyaW5nOiBmdW5jdGlvbihp
c1ByZWZpeE9wdGlvbmFsKQorICAgIHsKKyAgICAgICAgdmFyIGlzVHJhY2UgPSB0aGlzLm1vZGVs
LnNob3VsZER1bXBTdGFja1RyYWNlKCk7CisKKyAgICAgICAgdmFyIGNsaXBib2FyZFN0cmluZyA9
ICIiOworICAgICAgICBpZiAodGhpcy5fZm9ybWF0dGVkTWVzc2FnZSAmJiAhaXNUcmFjZSkKKyAg
ICAgICAgICAgIGNsaXBib2FyZFN0cmluZyA9IHRoaXMuX2Zvcm1hdHRlZE1lc3NhZ2UucXVlcnlT
ZWxlY3Rvcigic3BhbiIpLmlubmVyVGV4dDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY2xp
cGJvYXJkU3RyaW5nID0gdGhpcy50eXBlID09PSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2Uu
TWVzc2FnZVR5cGUuVHJhY2UgPyAiY29uc29sZS50cmFjZSgpIiA6IHRoaXMuX21lc3NhZ2UgfHwg
dGhpcy5tb2RlbC5fbWVzc2FnZVRleHQ7CisKKyAgICAgICAgaWYgKCFpc1ByZWZpeE9wdGlvbmFs
IHx8IHRoaXMuZW5mb3JjZXNDbGlwYm9hcmRQcmVmaXhTdHJpbmcpCisgICAgICAgICAgICBjbGlw
Ym9hcmRTdHJpbmcgPSB0aGlzLmNsaXBib2FyZFByZWZpeFN0cmluZyArIGNsaXBib2FyZFN0cmlu
ZzsKKworICAgICAgICBpZiAoaXNUcmFjZSkgeworICAgICAgICAgICAgdGhpcy5fc3RhY2tUcmFj
ZS5mb3JFYWNoKGZ1bmN0aW9uKGZyYW1lKSB7CisgICAgICAgICAgICAgICAgY2xpcGJvYXJkU3Ry
aW5nICs9ICJcblx0IiArIChmcmFtZS5mdW5jdGlvbk5hbWUgfHwgV2ViSW5zcGVjdG9yLlVJU3Ry
aW5nKCIoYW5vbnltb3VzIGZ1bmN0aW9uKSIpKTsKKyAgICAgICAgICAgICAgICBpZiAoZnJhbWUu
dXJsKQorICAgICAgICAgICAgICAgICAgICBjbGlwYm9hcmRTdHJpbmcgKz0gIiAoIiArIFdlYklu
c3BlY3Rvci5kaXNwbGF5TmFtZUZvclVSTChmcmFtZS51cmwpICsgIiwgbGluZSAiICsgZnJhbWUu
bGluZU51bWJlciArICIpIjsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgdmFyIHJlcGVhdFN0cmluZyA9IHRoaXMucmVwZWF0Q291bnQgPiAxID8gIngiICsg
dGhpcy5yZXBlYXRDb3VudCA6ICIiOworCisgICAgICAgICAgICB2YXIgdXJsTGluZSA9ICIiOwor
ICAgICAgICAgICAgaWYgKHRoaXMudXJsKSB7CisgICAgICAgICAgICAgICAgdmFyIGNvbXBvbmVu
dHMgPSBbV2ViSW5zcGVjdG9yLmRpc3BsYXlOYW1lRm9yVVJMKHRoaXMudXJsKSwgImxpbmUgIiAr
IHRoaXMubGluZV07CisgICAgICAgICAgICAgICAgaWYgKHJlcGVhdFN0cmluZykKKyAgICAgICAg
ICAgICAgICAgICAgY29tcG9uZW50cy5wdXNoKHJlcGVhdFN0cmluZyk7CisgICAgICAgICAgICAg
ICAgdXJsTGluZSA9ICIgKCIgKyBjb21wb25lbnRzLmpvaW4oIiwgIikgKyAiKSI7CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKHJlcGVhdFN0cmluZykKKyAgICAgICAgICAgICAgICB1cmxMaW5lID0g
IiAoIiArIHJlcGVhdFN0cmluZyArICIpIjsKKworICAgICAgICAgICAgaWYgKHVybExpbmUpIHsK
KyAgICAgICAgICAgICAgICB2YXIgbGluZXMgPSBjbGlwYm9hcmRTdHJpbmcuc3BsaXQoIlxuIik7
CisgICAgICAgICAgICAgICAgbGluZXNbMF0gKz0gdXJsTGluZTsKKyAgICAgICAgICAgICAgICBj
bGlwYm9hcmRTdHJpbmcgPSBsaW5lcy5qb2luKCJcbiIpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIGNsaXBib2FyZFN0cmluZzsKKyAgICB9Cit9Owo=
</data>
<flag name="review"
          id="273485"
          type_id="1"
          status="-"
          setter="joepeck"
    />
    <flag name="commit-queue"
          id="273486"
          type_id="3"
          status="-"
          setter="nvasilyev"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>249071</attachid>
            <date>2015-03-19 16:21:45 -0700</date>
            <delta_ts>2015-04-08 15:42:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.patch</filename>
            <type>text/plain</type>
            <size>47943</size>
            <attacher name="Nikita Vasilyev">nvasilyev</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IGM3ZTc0NzMuLjJjOWNiYmIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk0IEBACisyMDE1LTAzLTE5ICBOaWtpdGEgVmFzaWx5
ZXYgIDxudmFzaWx5ZXZAYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IFNwbGl0
IENvbnNvbGVNZXNzYWdlSW1wbCBpbnRvIHRoZSBWaWV3IGFuZCB0aGUgTW9kZWwKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjU5OQorCisgICAgICAg
IEludHJvZHVjZSBDb25zb2xlTWVzc2FnZSBtb2RlbCBjbGFzcyBhbmQgQ29uc29sZU1lc3NhZ2VW
aWV3IHRvIHJlcGxhY2UKKyAgICAgICAgTGVnYWN5Q29uc29sZU1lc3NhZ2UgYW5kIExlZ2FjeUNv
bnNvbGVNZXNzYWdlSW1wbC4KKworICAgICAgICBDb25zb2xlTWVzc2FnZSBjbGFzcyBkb2Vzbid0
IGhhdmUgYW55IERPTSByZWxhdGVkIG1ldGhvZHMgYW5kIGNhbiBiZQorICAgICAgICB1c2VkIGZv
ciB0ZXN0aW5nLiBBbGwgRE9NIG9wZXJhdGlvbnMgaGF2ZSBtb3ZlZCB0byBDb25zb2xlTWVzc2Fn
ZVZpZXcuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBVc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0xvZ01hbmFnZXIuanM6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuTG9nTWFuYWdlci5wcm90b3R5cGUubWVzc2FnZVdhc0FkZGVkKToKKyAgICAgICAg
KiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDoKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01vZGVs
cy9Db25zb2xlTWVzc2FnZS5qczogQWRkZWQuCisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29s
ZU1lc3NhZ2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLnByb3RvdHlw
ZS5nZXQgc291cmNlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5wcm90
b3R5cGUuZ2V0IGxldmVsKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5w
cm90b3R5cGUuZ2V0IG1lc3NhZ2VUZXh0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xl
TWVzc2FnZS5wcm90b3R5cGUuZ2V0IHR5cGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNv
bGVNZXNzYWdlLnByb3RvdHlwZS5nZXQgdXJsKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Db25z
b2xlTWVzc2FnZS5wcm90b3R5cGUuZ2V0IGxpbmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNv
bnNvbGVNZXNzYWdlLnByb3RvdHlwZS5nZXQgY29sdW1uKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5Db25zb2xlTWVzc2FnZS5wcm90b3R5cGUuZ2V0IHJlcGVhdENvdW50KToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5wcm90b3R5cGUuZ2V0IHRvdGFsUmVwZWF0Q291bnQp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLnByb3RvdHlwZS5nZXQgcGFy
YW1ldGVycyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UucHJvdG90eXBl
LmdldCBzdGFja1RyYWNlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5w
cm90b3R5cGUuZ2V0IHJlcXVlc3QpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNz
YWdlLnByb3RvdHlwZS5pc0Vycm9yT3JXYXJuaW5nKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5D
b25zb2xlTWVzc2FnZS5wcm90b3R5cGUuZmlyc3ROb25OYXRpdmVDYWxsRnJhbWUpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLnByb3RvdHlwZS5pc0VxdWFsKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5wcm90b3R5cGUuY2xvbmUpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLnByb3RvdHlwZS5nZXQgbGV2ZWxTdHJpbmcp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLnByb3RvdHlwZS5zaG91bGRE
dW1wU3RhY2tUcmFjZSk6CisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9Db25zb2xlQ29t
bWFuZFJlc3VsdC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlQ29tbWFuZFJlc3Vs
dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZUNvbW1hbmRSZXN1bHQuY2xlYXJNYXhp
bXVtU2F2ZWRSZXN1bHRJbmRleCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZUNvbW1h
bmRSZXN1bHQucHJvdG90eXBlLnRvTWVzc2FnZUVsZW1lbnQpOgorICAgICAgICAqIFVzZXJJbnRl
cmZhY2UvVmlld3MvQ29uc29sZU1lc3NhZ2VWaWV3LmpzOiBBZGRlZC4KKyAgICAgICAgKFdlYklu
c3BlY3Rvci5Db25zb2xlTWVzc2FnZVZpZXcpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNv
bGVNZXNzYWdlVmlldy5wcm90b3R5cGUuZ2V0IHNvdXJjZSk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuQ29uc29sZU1lc3NhZ2VWaWV3LnByb3RvdHlwZS5nZXQgbGV2ZWwpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlVmlldy5wcm90b3R5cGUuZ2V0IHR5cGUpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlVmlldy5wcm90b3R5cGUuZ2V0IHVybCk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VWaWV3LnByb3RvdHlwZS5nZXQgbGlu
ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VWaWV3LnByb3RvdHlwZS5n
ZXQgY29sdW1uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZVZpZXcucHJv
dG90eXBlLmdldCByZXBlYXRDb3VudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZU1l
c3NhZ2VWaWV3LnByb3RvdHlwZS5nZXQgdG90YWxSZXBlYXRDb3VudCk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VWaWV3LnByb3RvdHlwZS5nZXQgZm9ybWF0dGVkTWVzc2Fn
ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VWaWV3LnByb3RvdHlwZS5k
ZWNvcmF0ZU1lc3NhZ2VFbGVtZW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlTWVz
c2FnZVZpZXcucHJvdG90eXBlLnRvTWVzc2FnZUVsZW1lbnQpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkNvbnNvbGVNZXNzYWdlVmlldy5wcm90b3R5cGUudXBkYXRlUmVwZWF0Q291bnQpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlVmlldy5wcm90b3R5cGUuZ2V0IGNsaXBi
b2FyZFByZWZpeFN0cmluZyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VW
aWV3LnByb3RvdHlwZS50b0NsaXBib2FyZFN0cmluZyk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
Q29uc29sZU1lc3NhZ2VWaWV3LnByb3RvdHlwZS5jbG9uZSk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuQ29uc29sZU1lc3NhZ2VWaWV3LnByb3RvdHlwZS5pc0VxdWFsKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5Db25zb2xlTWVzc2FnZVZpZXcucHJvdG90eXBlLmdldCBfbWVzc2FnZVRleHQpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlVmlldy5wcm90b3R5cGUuc2V0IF9t
ZXNzYWdlVGV4dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VWaWV3LnBy
b3RvdHlwZS5nZXQgX3BhcmFtZXRlcnMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVN
ZXNzYWdlVmlldy5wcm90b3R5cGUuc2V0IF9wYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5Db25zb2xlTWVzc2FnZVZpZXcucHJvdG90eXBlLmdldCBfc3RhY2tUcmFjZSk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VWaWV3LnByb3RvdHlwZS5zZXQgX3N0YWNr
VHJhY2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlVmlldy5wcm90b3R5
cGUuZ2V0IF9yZXF1ZXN0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZVZp
ZXcucHJvdG90eXBlLnNldCBfcmVxdWVzdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29s
ZU1lc3NhZ2VWaWV3LnByb3RvdHlwZS5fZm9ybWF0TWVzc2FnZSk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuQ29uc29sZU1lc3NhZ2VWaWV3LnByb3RvdHlwZS5fc2hvdWxkSGlkZVVSTCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VWaWV3LnByb3RvdHlwZS5fbGlua2lmeUxv
Y2F0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZVZpZXcucHJvdG90
eXBlLl9saW5raWZ5Q2FsbEZyYW1lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlTWVz
c2FnZVZpZXcucHJvdG90eXBlLl9mb3JtYXQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNv
bGVNZXNzYWdlVmlldy5wcm90b3R5cGUuX2lzRXhwYW5kYWJsZSk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuQ29uc29sZU1lc3NhZ2VWaWV3LnByb3RvdHlwZS5fZm9ybWF0UGFyYW1ldGVyKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZVZpZXcucHJvdG90eXBlLl9mb3JtYXRQ
YXJhbWV0ZXJBc1ZhbHVlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZVZp
ZXcucHJvdG90eXBlLl9mb3JtYXRQYXJhbWV0ZXJBc09iamVjdCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuQ29uc29sZU1lc3NhZ2VWaWV3LnByb3RvdHlwZS5fZm9ybWF0UGFyYW1ldGVyQXNTdHJp
bmcpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlVmlldy5wcm90b3R5cGUu
X2Zvcm1hdFBhcmFtZXRlckFzTm9kZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZU1l
c3NhZ2VWaWV3LnByb3RvdHlwZS5fZm9ybWF0UGFyYW1ldGVyQXNBcnJheSk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VWaWV3LnByb3RvdHlwZS5fcm9vdFByb3BlcnR5UGF0
aEZvck9iamVjdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VWaWV3LnBy
b3RvdHlwZS5fdXNlclByb3ZpZGVkQ29sdW1uTmFtZXMpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkNvbnNvbGVNZXNzYWdlVmlldy5wcm90b3R5cGUuX2Zvcm1hdFBhcmFtZXRlckFzVGFibGUpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlVmlldy5wcm90b3R5cGUuKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZVZpZXcucHJvdG90eXBlLnN0cmluZ0Zv
cm1hdHRlcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VWaWV3LnByb3Rv
dHlwZS5mbG9hdEZvcm1hdHRlcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3Nh
Z2VWaWV3LnByb3RvdHlwZS5pbnRlZ2VyRm9ybWF0dGVyKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5Db25zb2xlTWVzc2FnZVZpZXcucHJvdG90eXBlLnN0eWxlRm9ybWF0dGVyKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZVZpZXcucHJvdG90eXBlLmlzV2hpdGVsaXN0ZWRQ
cm9wZXJ0eSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VWaWV3LnByb3Rv
dHlwZS5hcHBlbmQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlVmlldy5w
cm90b3R5cGUuX2Zvcm1hdFdpdGhTdWJzdGl0dXRpb25TdHJpbmcpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkNvbnNvbGVNZXNzYWdlVmlldy5wcm90b3R5cGUuX3BvcHVsYXRlU3RhY2tUcmFjZVRy
ZWVFbGVtZW50KToKKwogMjAxNS0wMy0xOCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBw
bGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFJlcGxhY2UgbGFzdCB1c2Ugb2YgT2Jq
ZWN0UHJvcGVydGllc1NlY3Rpb24gd2l0aCBPYmplY3RUcmVlVmlldwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvTG9nTWFuYWdlci5q
cyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0xvZ01h
bmFnZXIuanMKaW5kZXggZDhmOGRiZC4uODZkZTg4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvTG9nTWFuYWdlci5qcworKysgYi9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Mb2dNYW5hZ2Vy
LmpzCkBAIC00OCwxMSArNDgsMTIgQEAgV2ViSW5zcGVjdG9yLkxvZ01hbmFnZXIucHJvdG90eXBl
ID0gewogICAgICAgICAvLyBDYWxsZWQgZnJvbSBXZWJJbnNwZWN0b3IuQ29uc29sZU9ic2VydmVy
LgogCiAgICAgICAgIC8vIEZJWE1FOiBQYXNzIGEgcmVxdWVzdC4gV2UgbmVlZCBhIHdheSB0byBn
ZXQgaXQgZnJvbSB0aGUgcmVxdWVzdCBJRC4KLSAgICAgICAgdmFyIGNvbnNvbGVNZXNzYWdlID0g
V2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlLmNyZWF0ZShzb3VyY2UsIGxldmVsLCB0
ZXh0LCB0eXBlLCB1cmwsIGxpbmUsIGNvbHVtbiwgcmVwZWF0Q291bnQsIHBhcmFtZXRlcnMsIHN0
YWNrVHJhY2UsIG51bGwpOworICAgICAgICB2YXIgY29uc29sZU1lc3NhZ2UgPSBuZXcgV2ViSW5z
cGVjdG9yLkNvbnNvbGVNZXNzYWdlKHNvdXJjZSwgbGV2ZWwsIHRleHQsIHR5cGUsIHVybCwgbGlu
ZSwgY29sdW1uLCByZXBlYXRDb3VudCwgcGFyYW1ldGVycywgc3RhY2tUcmFjZSwgbnVsbCk7Cisg
ICAgICAgIHZhciBjb25zb2xlTWVzc2FnZVZpZXcgPSBuZXcgV2ViSW5zcGVjdG9yLkNvbnNvbGVN
ZXNzYWdlVmlldyhjb25zb2xlTWVzc2FnZSk7CiAKLSAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50
VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkxvZ01hbmFnZXIuRXZlbnQuTWVzc2FnZUFkZGVkLCB7
bWVzc2FnZTogY29uc29sZU1lc3NhZ2V9KTsKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9M
aXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkxvZ01hbmFnZXIuRXZlbnQuTWVzc2FnZUFkZGVkLCB7bWVz
c2FnZTogY29uc29sZU1lc3NhZ2VWaWV3fSk7CiAKLSAgICAgICAgY29uc29sZS5hc3NlcnQoIWNv
bnNvbGVNZXNzYWdlLl9lbGVtZW50IHx8ICFjb25zb2xlTWVzc2FnZS5fZWxlbWVudC5wYXJlbnRO
b2RlLCAiVGhpcyBjb25zb2xlIG1lc3NhZ2Ugc2hvdWxkbid0IGJlIGFkZGVkIHRvIGEgdmlldy4g
VG8gYWRkIGl0IHlvdSBuZWVkIHRvIHVzZSBjbG9uZSgpLiIpOworICAgICAgICBjb25zb2xlLmFz
c2VydCghY29uc29sZU1lc3NhZ2VWaWV3Ll9lbGVtZW50IHx8ICFjb25zb2xlTWVzc2FnZVZpZXcu
X2VsZW1lbnQucGFyZW50Tm9kZSwgIlRoaXMgY29uc29sZSBtZXNzYWdlIHNob3VsZG4ndCBiZSBh
ZGRlZCB0byBhIHZpZXcuIFRvIGFkZCBpdCB5b3UgbmVlZCB0byB1c2UgY2xvbmUoKS4iKTsKICAg
ICB9LAogCiAgICAgbWVzc2FnZXNDbGVhcmVkOiBmdW5jdGlvbigpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9NYWluLmh0bWwgYi9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9NYWluLmh0bWwKaW5kZXggYjBkYzIyYS4uNDcwYWIwZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5odG1s
CisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRtbApAQCAt
MjI5LDYgKzIyOSw3IEBACiAgICAgPHNjcmlwdCBzcmM9Ik1vZGVscy9Db2xsZWN0aW9uRW50cnku
anMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJNb2RlbHMvQ29sbGVjdGlvbkVudHJ5UHJl
dmlldy5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9Ik1vZGVscy9Db2xvci5qcyI+PC9z
Y3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ik1vZGVscy9Db25zb2xlTWVzc2FnZS5qcyI+PC9zY3Jp
cHQ+CiAgICAgPHNjcmlwdCBzcmM9Ik1vZGVscy9Db250ZW50Rmxvdy5qcyI+PC9zY3JpcHQ+CiAg
ICAgPHNjcmlwdCBzcmM9Ik1vZGVscy9Db29raWVTdG9yYWdlT2JqZWN0LmpzIj48L3NjcmlwdD4K
ICAgICA8c2NyaXB0IHNyYz0iTW9kZWxzL0RPTU5vZGUuanMiPjwvc2NyaXB0PgpAQCAtMjk1LDYg
KzI5Niw3IEBACiAgICAgPHNjcmlwdCBzcmM9Ik1vZGVscy9Vbml0QmV6aWVyLmpzIj48L3Njcmlw
dD4KIAogICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9MZWdhY3lDb25zb2xlTWVzc2FnZS5qcyI+PC9z
Y3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlZpZXdzL0NvbnNvbGVNZXNzYWdlVmlldy5qcyI+PC9z
Y3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IlZpZXdzL0NvbnRlbnRWaWV3LmpzIj48L3NjcmlwdD4K
ICAgICA8c2NyaXB0IHNyYz0iVmlld3MvRGF0YUdyaWQuanMiPjwvc2NyaXB0PgogICAgIDxzY3Jp
cHQgc3JjPSJWaWV3cy9EZXRhaWxzU2VjdGlvblJvdy5qcyI+PC9zY3JpcHQ+CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvQ29uc29sZU1lc3Nh
Z2UuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvQ29uc29s
ZU1lc3NhZ2UuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkzZTU1MQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01v
ZGVscy9Db25zb2xlTWVzc2FnZS5qcwpAQCAtMCwwICsxLDIyNiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNywgMjAwOCwgMjAxMyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA5IEpvc2VwaCBQZWNvcmFybworICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBu
YW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlID0g
ZnVuY3Rpb24oc291cmNlLCBsZXZlbCwgbWVzc2FnZSwgdHlwZSwgdXJsLCBsaW5lLCBjb2x1bW4s
IHJlcGVhdENvdW50LCBwYXJhbWV0ZXJzLCBzdGFja1RyYWNlLCByZXF1ZXN0KQoreworICAgIFdl
Ykluc3BlY3Rvci5PYmplY3QuY2FsbCh0aGlzKTsKKworICAgIHRoaXMuX3NvdXJjZSA9IHNvdXJj
ZTsKKyAgICB0aGlzLl9sZXZlbCA9IGxldmVsOworICAgIHRoaXMuX21lc3NhZ2VUZXh0ID0gbWVz
c2FnZTsKKyAgICB0aGlzLl90eXBlID0gdHlwZSB8fCBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3Nh
Z2UuTWVzc2FnZVR5cGUuTG9nOworICAgIHRoaXMuX3VybCA9IHVybCB8fCAiIjsKKyAgICB0aGlz
Ll9saW5lID0gbGluZSB8fCAwOworICAgIHRoaXMuX2NvbHVtbiA9IGNvbHVtbiB8fCAwOworCisg
ICAgdGhpcy5fcmVwZWF0Q291bnQgPSByZXBlYXRDb3VudDsKKyAgICB0aGlzLl90b3RhbFJlcGVh
dENvdW50ID0gcmVwZWF0Q291bnQ7CisKKyAgICB0aGlzLl9wYXJhbWV0ZXJzID0gcGFyYW1ldGVy
czsKKyAgICB0aGlzLl9zdGFja1RyYWNlID0gc3RhY2tUcmFjZTsKKyAgICB0aGlzLl9yZXF1ZXN0
ID0gcmVxdWVzdDsKK307CisKK1dlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5wcm90b3R5cGUg
PSB7CisgICAgY29uc3RydWN0b3I6IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZSwKKyAgICBf
X3Byb3RvX186IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlLAorCisgICAgLy8gUHVibGlj
CisKKyAgICBnZXQgc291cmNlKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9zb3VyY2U7
CisgICAgfSwKKworICAgIGdldCBsZXZlbCgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5f
bGV2ZWw7CisgICAgfSwKKworICAgIGdldCBtZXNzYWdlVGV4dCgpCisgICAgeworICAgICAgICBy
ZXR1cm4gdGhpcy5fbWVzc2FnZVRleHQ7CisgICAgfSwKKworICAgIGdldCB0eXBlKCkKKyAgICB7
CisgICAgICAgIHJldHVybiB0aGlzLl90eXBlOworICAgIH0sCisKKyAgICBnZXQgdXJsKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiB0aGlzLl91cmw7CisgICAgfSwKKworICAgIGdldCBsaW5lKCkK
KyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9saW5lOworICAgIH0sCisKKyAgICBnZXQgY29s
dW1uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9jb2x1bW47CisgICAgfSwKKworICAg
IGdldCByZXBlYXRDb3VudCgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fcmVwZWF0Q291
bnQ7CisgICAgfSwKKworICAgIGdldCB0b3RhbFJlcGVhdENvdW50KCkKKyAgICB7CisgICAgICAg
IHJldHVybiB0aGlzLl90b3RhbFJlcGVhdENvdW50OworICAgIH0sCisKKyAgICBnZXQgcGFyYW1l
dGVycygpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fcGFyYW1ldGVyczsKKyAgICB9LAor
CisgICAgZ2V0IHN0YWNrVHJhY2UoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3N0YWNr
VHJhY2U7CisgICAgfSwKKworICAgIGdldCByZXF1ZXN0KCkKKyAgICB7CisgICAgICAgIHJldHVy
biB0aGlzLl9yZXF1ZXN0OworICAgIH0sCisKKyAgICBpc0Vycm9yT3JXYXJuaW5nOiBmdW5jdGlv
bigpCisgICAgeworICAgICAgICByZXR1cm4gKHRoaXMubGV2ZWwgPT09IFdlYkluc3BlY3Rvci5D
b25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuV2FybmluZyB8fCB0aGlzLmxldmVsID09PSBXZWJJ
bnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkVycm9yKTsKKyAgICB9LAorCisg
ICAgZmlyc3ROb25OYXRpdmVDYWxsRnJhbWU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZh
ciBzdGFja1RyYWNlID0gdGhpcy5fc3RhY2tUcmFjZTsKKyAgICAgICAgaWYgKCFzdGFja1RyYWNl
KQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisKKyAgICAgICAgZm9yICh2YXIgZnJhbWUgb2Yg
c3RhY2tUcmFjZSkgeworICAgICAgICAgICAgaWYgKCFmcmFtZS51cmwgfHwgZnJhbWUudXJsID09
PSAiW25hdGl2ZSBjb2RlXSIpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICByZXR1cm4gZnJhbWU7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9
LAorCisgICAgaXNFcXVhbDogZnVuY3Rpb24obXNnKQorICAgIHsKKyAgICAgICAgaWYgKCFtc2cp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKG1zZyA9PT0gdGhpcykK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIGlmICh0aGlzLl9zdGFja1RyYWNl
KSB7CisgICAgICAgICAgICBpZiAoIW1zZy5fc3RhY2tUcmFjZSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB2YXIgbCA9IHRoaXMuX3N0YWNrVHJhY2U7CisgICAg
ICAgICAgICB2YXIgciA9IG1zZy5fc3RhY2tUcmFjZTsKKyAgICAgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgbC5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGlmIChsW2ldLnVybCAh
PT0gcltpXS51cmwgfHwKKyAgICAgICAgICAgICAgICBsW2ldLmZ1bmN0aW9uTmFtZSAhPT0gcltp
XS5mdW5jdGlvbk5hbWUgfHwKKyAgICAgICAgICAgICAgICBsW2ldLmxpbmVOdW1iZXIgIT09IHJb
aV0ubGluZU51bWJlciB8fAorICAgICAgICAgICAgICAgIGxbaV0uY29sdW1uTnVtYmVyICE9PSBy
W2ldLmNvbHVtbk51bWJlcikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuICh0aGlzLnNvdXJjZSA9PT0g
bXNnLnNvdXJjZSkKKyAgICAgICAgICAgICYmICh0aGlzLnR5cGUgPT09IG1zZy50eXBlKQorICAg
ICAgICAgICAgJiYgKHRoaXMubGV2ZWwgPT09IG1zZy5sZXZlbCkKKyAgICAgICAgICAgICYmICh0
aGlzLmxpbmUgPT09IG1zZy5saW5lKQorICAgICAgICAgICAgJiYgKHRoaXMudXJsID09PSBtc2cu
dXJsKQorICAgICAgICAgICAgJiYgKHRoaXMubWVzc2FnZSA9PT0gbXNnLm1lc3NhZ2UpCisgICAg
ICAgICAgICAmJiAodGhpcy5fcmVxdWVzdCA9PT0gbXNnLl9yZXF1ZXN0KTsKKyAgICB9LAorCisg
ICAgY2xvbmU6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVj
dG9yLkNvbnNvbGVNZXNzYWdlKHRoaXMuc291cmNlLCB0aGlzLmxldmVsLCB0aGlzLl9tZXNzYWdl
VGV4dCwgdGhpcy50eXBlLCB0aGlzLnVybCwgdGhpcy5saW5lLCB0aGlzLmNvbHVtbiwgdGhpcy5y
ZXBlYXRDb3VudCwgdGhpcy5fcGFyYW1ldGVycywgdGhpcy5fc3RhY2tUcmFjZSwgdGhpcy5fcmVx
dWVzdCk7CisgICAgfSwKKworICAgIGdldCBsZXZlbFN0cmluZygpCisgICAgeworICAgICAgICBz
d2l0Y2ggKHRoaXMubW9kZWwubGV2ZWwpIHsKKyAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9y
LkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5UaXA6CisgICAgICAgICAgICAgICAgcmV0dXJu
ICJUaXAiOworICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVz
c2FnZUxldmVsLkxvZzoKKyAgICAgICAgICAgICAgICByZXR1cm4gIkxvZyI7CisgICAgICAgICAg
ICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuV2FybmluZzoK
KyAgICAgICAgICAgICAgICByZXR1cm4gIldhcm5pbmciOworICAgICAgICAgICAgY2FzZSBXZWJJ
bnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkRlYnVnOgorICAgICAgICAgICAg
ICAgIHJldHVybiAiRGVidWciOworICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29s
ZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkVycm9yOgorICAgICAgICAgICAgICAgIHJldHVybiAiRXJy
b3IiOworICAgICAgICB9CisgICAgfSwKKworICAgIHNob3VsZER1bXBTdGFja1RyYWNlOiBmdW5j
dGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gISF0aGlzLl9zdGFja1RyYWNlICYmIHRoaXMu
X3N0YWNrVHJhY2UubGVuZ3RoICYmICh0aGlzLnNvdXJjZSA9PT0gV2ViSW5zcGVjdG9yLkNvbnNv
bGVNZXNzYWdlLk1lc3NhZ2VTb3VyY2UuTmV0d29yayB8fCB0aGlzLmxldmVsID09PSBXZWJJbnNw
ZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkVycm9yIHx8IHRoaXMudHlwZSA9PT0g
V2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLlRyYWNlKTsKKyAgICB9Cit9
OworCisvLyBGSVhNRTogU3dpdGNoIHRvIENvbnNvbGVBZ2VudC5Db25zb2xlTWVzc2FnZVNvdXJj
ZS4KK1dlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNlID0geworICAgIEhU
TUw6ICJodG1sIiwKKyAgICBYTUw6ICJ4bWwiLAorICAgIEpTOiAiamF2YXNjcmlwdCIsCisgICAg
TmV0d29yazogIm5ldHdvcmsiLAorICAgIENvbnNvbGVBUEk6ICJjb25zb2xlLWFwaSIsCisgICAg
T3RoZXI6ICJvdGhlciIKK307CisKKy8vIEZJWE1FOiBTd2l0Y2ggdG8gQ29uc29sZUFnZW50LkNv
bnNvbGVNZXNzYWdlVHlwZS4KK1dlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlw
ZSA9IHsKKyAgICBMb2c6ICJsb2ciLAorICAgIERpcjogImRpciIsCisgICAgRGlyWE1MOiAiZGly
eG1sIiwKKyAgICBUYWJsZTogInRhYmxlIiwKKyAgICBUcmFjZTogInRyYWNlIiwKKyAgICBTdGFy
dEdyb3VwOiAic3RhcnRHcm91cCIsCisgICAgU3RhcnRHcm91cENvbGxhcHNlZDogInN0YXJ0R3Jv
dXBDb2xsYXBzZWQiLAorICAgIEVuZEdyb3VwOiAiZW5kR3JvdXAiLAorICAgIEFzc2VydDogImFz
c2VydCIsCisgICAgUmVzdWx0OiAicmVzdWx0IgorfTsKKworLy8gRklYTUU6IFN3aXRjaCB0byBD
b25zb2xlQWdlbnQuQ29uc29sZU1lc3NhZ2VMZXZlbC4KK1dlYkluc3BlY3Rvci5Db25zb2xlTWVz
c2FnZS5NZXNzYWdlTGV2ZWwgPSB7CisgICAgVGlwOiAidGlwIiwKKyAgICBMb2c6ICJsb2ciLAor
ICAgIFdhcm5pbmc6ICJ3YXJuaW5nIiwKKyAgICBFcnJvcjogImVycm9yIiwKKyAgICBEZWJ1Zzog
ImRlYnVnIgorfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL1ZpZXdzL0NvbnNvbGVDb21tYW5kUmVzdWx0LmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvVmlld3MvQ29uc29sZUNvbW1hbmRSZXN1bHQuanMKaW5kZXggZTdjMGY1
OS4uNTY0ZTllMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvVmlld3MvQ29uc29sZUNvbW1hbmRSZXN1bHQuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvVmlld3MvQ29uc29sZUNvbW1hbmRSZXN1bHQuanMKQEAgLTI5LDE0
ICsyOSwxNiBAQAogCiBXZWJJbnNwZWN0b3IuQ29uc29sZUNvbW1hbmRSZXN1bHQgPSBmdW5jdGlv
bihyZXN1bHQsIHdhc1Rocm93biwgb3JpZ2luYXRpbmdDb21tYW5kLCBzYXZlZFJlc3VsdEluZGV4
KQogewotICAgIHZhciBsZXZlbCA9ICh3YXNUaHJvd24gPyBXZWJJbnNwZWN0b3IuTGVnYWN5Q29u
c29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkVycm9yIDogV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNv
bGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5Mb2cpOworICAgIHZhciBsZXZlbCA9ICh3YXNUaHJvd24g
PyBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkVycm9yIDogV2ViSW5z
cGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5Mb2cpOwogICAgIHRoaXMub3JpZ2lu
YXRpbmdDb21tYW5kID0gb3JpZ2luYXRpbmdDb21tYW5kOwogICAgIHRoaXMuc2F2ZWRSZXN1bHRJ
bmRleCA9IHNhdmVkUmVzdWx0SW5kZXg7CiAKICAgICBpZiAodGhpcy5zYXZlZFJlc3VsdEluZGV4
ICYmIHRoaXMuc2F2ZWRSZXN1bHRJbmRleCA+IFdlYkluc3BlY3Rvci5Db25zb2xlQ29tbWFuZFJl
c3VsdC5tYXhpbXVtU2F2ZWRSZXN1bHRJbmRleCkKICAgICAgICAgV2ViSW5zcGVjdG9yLkNvbnNv
bGVDb21tYW5kUmVzdWx0Lm1heGltdW1TYXZlZFJlc3VsdEluZGV4ID0gdGhpcy5zYXZlZFJlc3Vs
dEluZGV4OwogCi0gICAgV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlSW1wbC5jYWxs
KHRoaXMsIFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNlLkpT
LCBsZXZlbCwgIiIsIG51bGwsIFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZS5NZXNz
YWdlVHlwZS5SZXN1bHQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5l
ZCwgW3Jlc3VsdF0pOworICAgIHZhciBtb2RlbCA9IG5ldyBXZWJJbnNwZWN0b3IuQ29uc29sZU1l
c3NhZ2UoV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VTb3VyY2UuSlMsIGxldmVs
LCAiIiwgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLlJlc3VsdCwgdW5k
ZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBbcmVzdWx0XSk7CisKKyAg
ICBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VWaWV3LmNhbGwodGhpcywgbW9kZWwpOwogfTsK
IAogV2ViSW5zcGVjdG9yLkNvbnNvbGVDb21tYW5kUmVzdWx0Lm1heGltdW1TYXZlZFJlc3VsdElu
ZGV4ID0gMDsKQEAgLTQ0LDcgKzQ2LDcgQEAgV2ViSW5zcGVjdG9yLkNvbnNvbGVDb21tYW5kUmVz
dWx0Lm1heGltdW1TYXZlZFJlc3VsdEluZGV4ID0gMDsKIFdlYkluc3BlY3Rvci5Db25zb2xlQ29t
bWFuZFJlc3VsdC5jbGVhck1heGltdW1TYXZlZFJlc3VsdEluZGV4ID0gZnVuY3Rpb24oKQogewog
ICAgIFdlYkluc3BlY3Rvci5Db25zb2xlQ29tbWFuZFJlc3VsdC5tYXhpbXVtU2F2ZWRSZXN1bHRJ
bmRleCA9IDA7Ci19Cit9OwogCiBXZWJJbnNwZWN0b3IuQ29uc29sZUNvbW1hbmRSZXN1bHQucHJv
dG90eXBlID0gewogICAgIGNvbnN0cnVjdG9yOiBXZWJJbnNwZWN0b3IuQ29uc29sZUNvbW1hbmRS
ZXN1bHQsCkBAIC01NSw3ICs1Nyw3IEBAIFdlYkluc3BlY3Rvci5Db25zb2xlQ29tbWFuZFJlc3Vs
dC5wcm90b3R5cGUgPSB7CiAKICAgICB0b01lc3NhZ2VFbGVtZW50OiBmdW5jdGlvbigpCiAgICAg
ewotICAgICAgICB2YXIgZWxlbWVudCA9IFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2Fn
ZUltcGwucHJvdG90eXBlLnRvTWVzc2FnZUVsZW1lbnQuY2FsbCh0aGlzKTsKKyAgICAgICAgdmFy
IGVsZW1lbnQgPSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VWaWV3LnByb3RvdHlwZS50b01l
c3NhZ2VFbGVtZW50LmNhbGwodGhpcyk7CiAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgi
Y29uc29sZS11c2VyLWNvbW1hbmQtcmVzdWx0Iik7CiAgICAgICAgIGlmICghZWxlbWVudC5nZXRB
dHRyaWJ1dGUoImRhdGEtbGFiZWxwcmVmaXgiKSkKICAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0
cmlidXRlKCJkYXRhLWxhYmVscHJlZml4IiwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJPdXRwdXQ6
ICIpKTsKQEAgLTY4LDQgKzcwLDQgQEAgV2ViSW5zcGVjdG9yLkNvbnNvbGVDb21tYW5kUmVzdWx0
LnByb3RvdHlwZSA9IHsKICAgICB9CiB9OwogCi1XZWJJbnNwZWN0b3IuQ29uc29sZUNvbW1hbmRS
ZXN1bHQucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVz
c2FnZUltcGwucHJvdG90eXBlOworV2ViSW5zcGVjdG9yLkNvbnNvbGVDb21tYW5kUmVzdWx0LnBy
b3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VWaWV3LnByb3Rv
dHlwZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Zp
ZXdzL0NvbnNvbGVNZXNzYWdlVmlldy5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL1ZpZXdzL0NvbnNvbGVNZXNzYWdlVmlldy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi43MzQwODRkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvQ29uc29sZU1lc3NhZ2VWaWV3LmpzCkBAIC0wLDAg
KzEsNzU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDEzIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSm9zZXBoIFBl
Y29yYXJvCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBs
ZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICog
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitXZWJJ
bnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VWaWV3ID0gZnVuY3Rpb24obW9kZWwpCit7CisgICAgV2Vi
SW5zcGVjdG9yLk9iamVjdC5jYWxsKHRoaXMpOworCisgICAgdGhpcy5tb2RlbCA9IG1vZGVsOwor
ICAgIHRoaXMuX2N1c3RvbUZvcm1hdHRlcnMgPSB7CisgICAgICAgICJvYmplY3QiOiB0aGlzLl9m
b3JtYXRQYXJhbWV0ZXJBc09iamVjdCwKKyAgICAgICAgImVycm9yIjogdGhpcy5fZm9ybWF0UGFy
YW1ldGVyQXNPYmplY3QsCisgICAgICAgICJtYXAiOiB0aGlzLl9mb3JtYXRQYXJhbWV0ZXJBc09i
amVjdCwKKyAgICAgICAgInNldCI6IHRoaXMuX2Zvcm1hdFBhcmFtZXRlckFzT2JqZWN0LAorICAg
ICAgICAid2Vha21hcCI6IHRoaXMuX2Zvcm1hdFBhcmFtZXRlckFzT2JqZWN0LAorICAgICAgICAi
aXRlcmF0b3IiOiB0aGlzLl9mb3JtYXRQYXJhbWV0ZXJBc09iamVjdCwKKyAgICAgICAgImFycmF5
IjogdGhpcy5fZm9ybWF0UGFyYW1ldGVyQXNBcnJheSwKKyAgICAgICAgIm5vZGUiOiB0aGlzLl9m
b3JtYXRQYXJhbWV0ZXJBc05vZGUsCisgICAgICAgICJzdHJpbmciOiB0aGlzLl9mb3JtYXRQYXJh
bWV0ZXJBc1N0cmluZworICAgIH07Cit9OworCitXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VW
aWV3LnByb3RvdHlwZSA9IHsKKyAgICBjb25zdHJ1Y3RvcjogV2ViSW5zcGVjdG9yLkNvbnNvbGVN
ZXNzYWdlVmlldywKKyAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBl
LAorCisgICAgLy8gUHVibGljCisKKyAgICBlbmZvcmNlc0NsaXBib2FyZFByZWZpeFN0cmluZzog
dHJ1ZSwKKworICAgIC8vIFNvbWUgb2YgdGhlc2UgZ2V0dGVycyBtYXRjaCB0aGUgb25lcyBvbiBX
ZWJJbnNwZWN0b3IuSXNzdWVNZXNzYWdlLgorICAgIC8vIFJlbW92ZSB0aGVtIG9uY2Ugd2UgcmVt
b3ZlIFdlYkluc3BlY3Rvci5Jc3N1ZU1lc3NhZ2UuCisgICAgZ2V0IHNvdXJjZSgpCisgICAgewor
ICAgICAgICByZXR1cm4gdGhpcy5tb2RlbC5zb3VyY2U7CisgICAgfSwKKworICAgIGdldCBsZXZl
bCgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5tb2RlbC5sZXZlbDsKKyAgICB9LAorCisg
ICAgZ2V0IHR5cGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwudHlwZTsKKyAg
ICB9LAorCisgICAgZ2V0IHVybCgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5tb2RlbC51
cmw7CisgICAgfSwKKworICAgIGdldCBsaW5lKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlz
Lm1vZGVsLmxpbmU7CisgICAgfSwKKworICAgIGdldCBjb2x1bW4oKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHRoaXMubW9kZWwuY29sdW1uOworICAgIH0sCisKKyAgICBnZXQgcmVwZWF0Q291bnQo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwucmVwZWF0Q291bnQ7CisgICAgfSwK
KworICAgIGdldCB0b3RhbFJlcGVhdENvdW50KCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlz
Lm1vZGVsLnRvdGFsUmVwZWF0Q291bnQ7CisgICAgfSwKKworICAgIGdldCBmb3JtYXR0ZWRNZXNz
YWdlKCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5fZm9ybWF0dGVkTWVzc2FnZSkKKyAgICAg
ICAgICAgIHRoaXMuX2Zvcm1hdE1lc3NhZ2UoKTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1h
dHRlZE1lc3NhZ2U7CisgICAgfSwKKworICAgIGRlY29yYXRlTWVzc2FnZUVsZW1lbnQ6IGZ1bmN0
aW9uKGVsZW1lbnQpCisgICAgeworICAgICAgICBpZiAodGhpcy5fZWxlbWVudCkKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzLl9lbGVtZW50OworCisgICAgICAgIGVsZW1lbnQubWVzc2FnZSA9IHRo
aXM7CisgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiY29uc29sZS1tZXNzYWdlIik7CisK
KyAgICAgICAgdGhpcy5fZWxlbWVudCA9IGVsZW1lbnQ7CisKKyAgICAgICAgc3dpdGNoICh0aGlz
LmxldmVsKSB7CisgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5N
ZXNzYWdlTGV2ZWwuVGlwOgorICAgICAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgi
Y29uc29sZS10aXAtbGV2ZWwiKTsKKyAgICAgICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0
ZSgiZGF0YS1sYWJlbHByZWZpeCIsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiVGlwOiAiKSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25z
b2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuTG9nOgorICAgICAgICAgICAgICAgIGVsZW1lbnQuY2xh
c3NMaXN0LmFkZCgiY29uc29sZS1sb2ctbGV2ZWwiKTsKKyAgICAgICAgICAgICAgICBlbGVtZW50
LnNldEF0dHJpYnV0ZSgiZGF0YS1sYWJlbHByZWZpeCIsIFdlYkluc3BlY3Rvci5VSVN0cmluZygi
TG9nOiAiKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdlYklu
c3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuRGVidWc6CisgICAgICAgICAgICAg
ICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjb25zb2xlLWRlYnVnLWxldmVsIik7CisgICAgICAg
ICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoImRhdGEtbGFiZWxwcmVmaXgiLCBXZWJJbnNw
ZWN0b3IuVUlTdHJpbmcoIkRlYnVnOiAiKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuV2Fy
bmluZzoKKyAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoImNvbnNvbGUtd2Fy
bmluZy1sZXZlbCIpOworICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCJkYXRh
LWxhYmVscHJlZml4IiwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJXYXJuaW5nOiAiKSk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xl
TWVzc2FnZS5NZXNzYWdlTGV2ZWwuRXJyb3I6CisgICAgICAgICAgICAgICAgZWxlbWVudC5jbGFz
c0xpc3QuYWRkKCJjb25zb2xlLWVycm9yLWxldmVsIik7CisgICAgICAgICAgICAgICAgZWxlbWVu
dC5zZXRBdHRyaWJ1dGUoImRhdGEtbGFiZWxwcmVmaXgiLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmco
IkVycm9yOiAiKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAodGhpcy5tb2RlbC50eXBlID09PSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVz
c2FnZVR5cGUuU3RhcnRHcm91cCB8fCB0aGlzLm1vZGVsLnR5cGUgPT09IFdlYkluc3BlY3Rvci5D
b25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5TdGFydEdyb3VwQ29sbGFwc2VkKQorICAgICAgICAg
ICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjb25zb2xlLWdyb3VwLXRpdGxlIik7CisKKyAgICAg
ICAgZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmZvcm1hdHRlZE1lc3NhZ2UpOworCisgICAgICAg
IGlmICh0aGlzLm1vZGVsLnJlcGVhdENvdW50ID4gMSkKKyAgICAgICAgICAgIHRoaXMudXBkYXRl
UmVwZWF0Q291bnQoKTsKKworICAgICAgICByZXR1cm4gZWxlbWVudDsKKyAgICB9LAorCisgICAg
dG9NZXNzYWdlRWxlbWVudDogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX2Vs
ZW1lbnQpCisgICAgICAgICAgICByZXR1cm4gdGhpcy5fZWxlbWVudDsKKworICAgICAgICB2YXIg
ZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworCisgICAgICAgIHJldHVy
biB0aGlzLmRlY29yYXRlTWVzc2FnZUVsZW1lbnQoZWxlbWVudCk7CisgICAgfSwKKworICAgIHVw
ZGF0ZVJlcGVhdENvdW50OiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAoIXRoaXMucmVw
ZWF0Q291bnRFbGVtZW50KSB7CisgICAgICAgICAgICB0aGlzLnJlcGVhdENvdW50RWxlbWVudCA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICAgICAgICAgIHRoaXMucmVwZWF0
Q291bnRFbGVtZW50LmNsYXNzTmFtZSA9ICJidWJibGUiOworCisgICAgICAgICAgICB0aGlzLl9l
bGVtZW50Lmluc2VydEJlZm9yZSh0aGlzLnJlcGVhdENvdW50RWxlbWVudCwgdGhpcy5fZWxlbWVu
dC5maXJzdENoaWxkKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLnJlcGVhdENvdW50RWxlbWVu
dC50ZXh0Q29udGVudCA9IHRoaXMubW9kZWwucmVwZWF0Q291bnQ7CisgICAgfSwKKworCisgICAg
Z2V0IGNsaXBib2FyZFByZWZpeFN0cmluZygpCisgICAgeworICAgICAgICByZXR1cm4gIlsiICsg
dGhpcy5tb2RlbC5sZXZlbFN0cmluZyArICJdICI7CisgICAgfSwKKworICAgIHRvQ2xpcGJvYXJk
U3RyaW5nOiBmdW5jdGlvbihpc1ByZWZpeE9wdGlvbmFsKQorICAgIHsKKyAgICAgICAgdmFyIGlz
VHJhY2UgPSB0aGlzLm1vZGVsLnNob3VsZER1bXBTdGFja1RyYWNlKCk7CisKKyAgICAgICAgdmFy
IGNsaXBib2FyZFN0cmluZyA9ICIiOworICAgICAgICBpZiAodGhpcy5fZm9ybWF0dGVkTWVzc2Fn
ZSAmJiAhaXNUcmFjZSkKKyAgICAgICAgICAgIGNsaXBib2FyZFN0cmluZyA9IHRoaXMuX2Zvcm1h
dHRlZE1lc3NhZ2UucXVlcnlTZWxlY3Rvcigic3BhbiIpLmlubmVyVGV4dDsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgY2xpcGJvYXJkU3RyaW5nID0gdGhpcy5tb2RlbC50eXBlID09PSBXZWJJ
bnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuVHJhY2UgPyAiY29uc29sZS50cmFj
ZSgpIiA6IHRoaXMuX21lc3NhZ2UgfHwgdGhpcy5tb2RlbC5tZXNzYWdlVGV4dDsKKworICAgICAg
ICBpZiAoIWlzUHJlZml4T3B0aW9uYWwgfHwgdGhpcy5lbmZvcmNlc0NsaXBib2FyZFByZWZpeFN0
cmluZykKKyAgICAgICAgICAgIGNsaXBib2FyZFN0cmluZyA9IHRoaXMuY2xpcGJvYXJkUHJlZml4
U3RyaW5nICsgY2xpcGJvYXJkU3RyaW5nOworCisgICAgICAgIGlmIChpc1RyYWNlKSB7CisgICAg
ICAgICAgICBmb3IgKHZhciBmcmFtZSBvZiB0aGlzLm1vZGVsLnN0YWNrVHJhY2UpIHsKKyAgICAg
ICAgICAgICAgICBjbGlwYm9hcmRTdHJpbmcgKz0gIlxuXHQiICsgKGZyYW1lLmZ1bmN0aW9uTmFt
ZSB8fCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIihhbm9ueW1vdXMgZnVuY3Rpb24pIikpOworICAg
ICAgICAgICAgICAgIGlmIChmcmFtZS51cmwpCisgICAgICAgICAgICAgICAgICAgIGNsaXBib2Fy
ZFN0cmluZyArPSAiICgiICsgV2ViSW5zcGVjdG9yLmRpc3BsYXlOYW1lRm9yVVJMKGZyYW1lLnVy
bCkgKyAiLCBsaW5lICIgKyBmcmFtZS5saW5lTnVtYmVyICsgIikiOworICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFyIHJlcGVhdENvdW50ID0gdGhpcy5tb2Rl
bC5yZXBlYXRDb3VudDsKKyAgICAgICAgICAgIHZhciByZXBlYXRTdHJpbmcgPSByZXBlYXRDb3Vu
dCA+IDEgPyAieCIgKyByZXBlYXRDb3VudCA6ICIiOworCisgICAgICAgICAgICB2YXIgdXJsTGlu
ZSA9ICIiOworICAgICAgICAgICAgaWYgKHRoaXMubW9kZWwudXJsKSB7CisgICAgICAgICAgICAg
ICAgdmFyIGNvbXBvbmVudHMgPSBbV2ViSW5zcGVjdG9yLmRpc3BsYXlOYW1lRm9yVVJMKHRoaXMu
bW9kZWwudXJsKSwgImxpbmUgIiArIHRoaXMubW9kZWwubGluZV07CisgICAgICAgICAgICAgICAg
aWYgKHJlcGVhdFN0cmluZykKKyAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5wdXNoKHJl
cGVhdFN0cmluZyk7CisgICAgICAgICAgICAgICAgdXJsTGluZSA9ICIgKCIgKyBjb21wb25lbnRz
LmpvaW4oIiwgIikgKyAiKSI7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHJlcGVhdFN0cmluZykK
KyAgICAgICAgICAgICAgICB1cmxMaW5lID0gIiAoIiArIHJlcGVhdFN0cmluZyArICIpIjsKKwor
ICAgICAgICAgICAgaWYgKHVybExpbmUpIHsKKyAgICAgICAgICAgICAgICB2YXIgbGluZXMgPSBj
bGlwYm9hcmRTdHJpbmcuc3BsaXQoIlxuIik7CisgICAgICAgICAgICAgICAgbGluZXNbMF0gKz0g
dXJsTGluZTsKKyAgICAgICAgICAgICAgICBjbGlwYm9hcmRTdHJpbmcgPSBsaW5lcy5qb2luKCJc
biIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGNsaXBib2Fy
ZFN0cmluZzsKKyAgICB9LAorCisgICAgY2xvbmU6IGZ1bmN0aW9uKGlzRGVlcCkKKyAgICB7Cisg
ICAgICAgIHZhciBuZXdNb2RlbCA9IGlzRGVlcCA/IHRoaXMubW9kZWwuY2xvbmUoKSA6IHRoaXMu
bW9kZWw7CisgICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlVmll
dyhuZXdNb2RlbCk7CisgICAgfSwKKworICAgIGlzRXF1YWw6IGZ1bmN0aW9uKG1zZykKKyAgICB7
CisgICAgICAgIGlmICghbXNnKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAg
IHJldHVybiB0aGlzLm1vZGVsLmlzRXF1YWwobXNnLm1vZGVsKTsKKyAgICB9LAorCisgICAgLy8g
UHJpdmF0ZQorCisgICAgZ2V0IF9tZXNzYWdlVGV4dCgpCisgICAgeworICAgICAgICByZXR1cm4g
dGhpcy5tb2RlbC5tZXNzYWdlVGV4dDsKKyAgICB9LAorCisgICAgc2V0IF9tZXNzYWdlVGV4dCh2
YWx1ZSkKKyAgICB7CisgICAgICAgIHRoaXMubW9kZWwubWVzc2FnZVRleHQgPSB2YWx1ZTsKKyAg
ICB9LAorCisgICAgZ2V0IF9wYXJhbWV0ZXJzKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlz
Lm1vZGVsLnBhcmFtZXRlcnM7CisgICAgfSwKKworICAgIHNldCBfcGFyYW1ldGVycyh2YWx1ZSkK
KyAgICB7CisgICAgICAgIHRoaXMubW9kZWwucGFyYW1ldGVycyA9IHZhbHVlOworICAgIH0sCisK
KyAgICBnZXQgX3N0YWNrVHJhY2UoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwu
c3RhY2tUcmFjZTsKKyAgICB9LAorCisgICAgc2V0IF9zdGFja1RyYWNlKHZhbHVlKQorICAgIHsK
KyAgICAgICAgdGhpcy5tb2RlbC5zdGFja1RyYWNlID0gdmFsdWU7CisgICAgfSwKKworICAgIGdl
dCBfcmVxdWVzdCgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5tb2RlbC5yZXF1ZXN0Owor
ICAgIH0sCisKKyAgICBzZXQgX3JlcXVlc3QodmFsdWUpCisgICAgeworICAgICAgICB0aGlzLm1v
ZGVsLnJlcXVlc3QgPSB2YWx1ZTsKKyAgICB9LAorCisgICAgX2Zvcm1hdE1lc3NhZ2U6IGZ1bmN0
aW9uKCkKKyAgICB7CisgICAgICAgIHRoaXMuX2Zvcm1hdHRlZE1lc3NhZ2UgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJzcGFuIik7CisgICAgICAgIHRoaXMuX2Zvcm1hdHRlZE1lc3NhZ2UuY2xh
c3NOYW1lID0gImNvbnNvbGUtbWVzc2FnZS10ZXh0IjsKKworICAgICAgICB2YXIgbWVzc2FnZVRl
eHQ7CisgICAgICAgIHZhciBtb2RlbCA9IHRoaXMubW9kZWw7CisKKyAgICAgICAgdmFyIHVybCA9
IG1vZGVsLnVybDsKKyAgICAgICAgdmFyIGxpbmUgPSBtb2RlbC5saW5lOworCisgICAgICAgIGlm
IChtb2RlbC5zb3VyY2UgPT09IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlU291
cmNlLkNvbnNvbGVBUEkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAobW9kZWwudHlwZSkgeworICAg
ICAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBl
LlRyYWNlOgorICAgICAgICAgICAgICAgICAgICBtZXNzYWdlVGV4dCA9IGRvY3VtZW50LmNyZWF0
ZVRleHROb2RlKCJjb25zb2xlLnRyYWNlKCkiKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2Fn
ZVR5cGUuQXNzZXJ0OgorICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IFtXZWJJbnNwZWN0
b3IuVUlTdHJpbmcoIkFzc2VydGlvbiBmYWlsZWQ6IildOworICAgICAgICAgICAgICAgICAgICBp
ZiAobW9kZWwucGFyYW1ldGVycykKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdz
LmNvbmNhdChtb2RlbC5wYXJhbWV0ZXJzKTsKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZVRl
eHQgPSB0aGlzLl9mb3JtYXQoYXJncyk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBl
LkRpcjoKKyAgICAgICAgICAgICAgICAgICAgdmFyIG9iaiA9IG1vZGVsLnBhcmFtZXRlcnMgPyBt
b2RlbC5wYXJhbWV0ZXJzWzBdIDogdW5kZWZpbmVkOworICAgICAgICAgICAgICAgICAgICB2YXIg
YXJncyA9IFsiJU8iLCBvYmpdOworICAgICAgICAgICAgICAgICAgICBtZXNzYWdlVGV4dCA9IHRo
aXMuX2Zvcm1hdChhcmdzKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBtb2RlbC5wYXJh
bWV0ZXJzIHx8IFttb2RlbC5tZXNzYWdlVGV4dF07CisgICAgICAgICAgICAgICAgICAgIG1lc3Nh
Z2VUZXh0ID0gdGhpcy5fZm9ybWF0KGFyZ3MpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVs
c2UgaWYgKG1vZGVsLnNvdXJjZSA9PT0gV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3Nh
Z2VTb3VyY2UuTmV0d29yaykgeworICAgICAgICAgICAgdmFyIHJlcXVlc3QgPSBtb2RlbC5yZXF1
ZXN0OworICAgICAgICAgICAgaWYgKHJlcXVlc3QpIHsKKyAgICAgICAgICAgICAgICBtb2RlbC5z
dGFja1RyYWNlID0gcmVxdWVzdC5zdGFja1RyYWNlOworICAgICAgICAgICAgICAgIGlmIChyZXF1
ZXN0LmluaXRpYXRvciAmJiByZXF1ZXN0LmluaXRpYXRvci51cmwpIHsKKyAgICAgICAgICAgICAg
ICAgICAgdXJsID0gcmVxdWVzdC5pbml0aWF0b3IudXJsOworICAgICAgICAgICAgICAgICAgICBs
aW5lID0gcmVxdWVzdC5pbml0aWF0b3IubGluZU51bWJlcjsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgbWVzc2FnZVRleHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFu
Iik7CisgICAgICAgICAgICAgICAgaWYgKG1vZGVsLmxldmVsID09PSBXZWJJbnNwZWN0b3IuQ29u
c29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkVycm9yKSB7CisgICAgICAgICAgICAgICAgICAgIG1l
c3NhZ2VUZXh0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHJlcXVlc3QucmVx
dWVzdE1ldGhvZCArICIgIikpOworICAgICAgICAgICAgICAgICAgICBtZXNzYWdlVGV4dC5hcHBl
bmRDaGlsZChXZWJJbnNwZWN0b3IubGlua2lmeVJlcXVlc3RBc05vZGUocmVxdWVzdCkpOworICAg
ICAgICAgICAgICAgICAgICBpZiAocmVxdWVzdC5mYWlsZWQpCisgICAgICAgICAgICAgICAgICAg
ICAgICBtZXNzYWdlVGV4dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiICIg
KyByZXF1ZXN0LmxvY2FsaXplZEZhaWxEZXNjcmlwdGlvbikpOworICAgICAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlVGV4dC5hcHBlbmRDaGlsZChk
b2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiICIgKyByZXF1ZXN0LnN0YXR1c0NvZGUgKyAiICgiICsg
cmVxdWVzdC5zdGF0dXNUZXh0ICsgIikiKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgdmFyIGZyYWdtZW50ID0gV2ViSW5zcGVjdG9yLmxpbmtpZnlTdHJp
bmdBc0ZyYWdtZW50V2l0aEN1c3RvbUxpbmtpZmllcihtb2RlbC5tZXNzYWdlVGV4dCwgV2ViSW5z
cGVjdG9yLmxpbmtpZnlSZXF1ZXN0QXNOb2RlLmJpbmQobnVsbCwgcmVxdWVzdCwgIiIpKTsKKyAg
ICAgICAgICAgICAgICAgICAgbWVzc2FnZVRleHQuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYg
KG1vZGVsLnVybCkgeworICAgICAgICAgICAgICAgICAgICB2YXIgYW5jaG9yID0gV2ViSW5zcGVj
dG9yLmxpbmtpZnlVUkxBc05vZGUodXJsLCB1cmwsICJjb25zb2xlLW1lc3NhZ2UtdXJsIik7Cisg
ICAgICAgICAgICAgICAgICAgIHRoaXMuX2Zvcm1hdHRlZE1lc3NhZ2UuYXBwZW5kQ2hpbGQoYW5j
aG9yKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbWVzc2FnZVRleHQgPSB0
aGlzLl9mb3JtYXQoW21vZGVsLm1lc3NhZ2VUZXh0XSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICB2YXIgYXJncyA9IG1vZGVsLnBhcmFtZXRlcnMgfHwgW21v
ZGVsLm1lc3NhZ2VUZXh0XTsKKyAgICAgICAgICAgIG1lc3NhZ2VUZXh0ID0gdGhpcy5fZm9ybWF0
KGFyZ3MpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1vZGVsLnNvdXJjZSAhPT0gV2ViSW5z
cGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VTb3VyY2UuTmV0d29yayB8fCBtb2RlbC5yZXF1
ZXN0KSB7CisgICAgICAgICAgICB2YXIgZmlyc3ROb25OYXRpdmVDYWxsRnJhbWUgPSBtb2RlbC5m
aXJzdE5vbk5hdGl2ZUNhbGxGcmFtZSgpOworICAgICAgICAgICAgaWYgKGZpcnN0Tm9uTmF0aXZl
Q2FsbEZyYW1lKSB7CisgICAgICAgICAgICAgICAgdmFyIHVybEVsZW1lbnQgPSB0aGlzLl9saW5r
aWZ5Q2FsbEZyYW1lKGZpcnN0Tm9uTmF0aXZlQ2FsbEZyYW1lKTsKKyAgICAgICAgICAgICAgICB0
aGlzLl9mb3JtYXR0ZWRNZXNzYWdlLmFwcGVuZENoaWxkKHVybEVsZW1lbnQpOworICAgICAgICAg
ICAgfSBlbHNlIGlmICh1cmwgJiYgIXRoaXMuX3Nob3VsZEhpZGVVUkwodXJsKSkgeworICAgICAg
ICAgICAgICAgIHZhciB1cmxFbGVtZW50ID0gdGhpcy5fbGlua2lmeUxvY2F0aW9uKHVybCwgbGlu
ZSwgbW9kZWwuY29sdW1uKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9mb3JtYXR0ZWRNZXNzYWdl
LmFwcGVuZENoaWxkKHVybEVsZW1lbnQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgdGhpcy5fZm9ybWF0dGVkTWVzc2FnZS5hcHBlbmRDaGlsZChtZXNzYWdlVGV4dCk7CisK
KyAgICAgICAgaWYgKHRoaXMuc2F2ZWRSZXN1bHRJbmRleCkgeworICAgICAgICAgICAgdmFyIHNh
dmVkVmFyaWFibGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOworICAg
ICAgICAgICAgc2F2ZWRWYXJpYWJsZUVsZW1lbnQuY2xhc3NOYW1lID0gImNvbnNvbGUtc2F2ZWQt
dmFyaWFibGUiOworICAgICAgICAgICAgc2F2ZWRWYXJpYWJsZUVsZW1lbnQudGV4dENvbnRlbnQg
PSAiID0gJCIgKyB0aGlzLnNhdmVkUmVzdWx0SW5kZXg7CisgICAgICAgICAgICBpZiAodGhpcy5f
b2JqZWN0VHJlZSkKKyAgICAgICAgICAgICAgICB0aGlzLl9vYmplY3RUcmVlLmFwcGVuZFRpdGxl
U3VmZml4KHNhdmVkVmFyaWFibGVFbGVtZW50KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICB0aGlzLl9mb3JtYXR0ZWRNZXNzYWdlLmFwcGVuZENoaWxkKHNhdmVkVmFyaWFibGVF
bGVtZW50KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0aGlzLm1vZGVsLnNob3VsZER1bXBT
dGFja1RyYWNlKCkpIHsKKyAgICAgICAgICAgIHZhciBvbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoIm9sIik7CisgICAgICAgICAgICBvbC5jbGFzc05hbWUgPSAib3V0bGluZS1kaXNjbG9zdXJl
IjsKKyAgICAgICAgICAgIHZhciB0cmVlT3V0bGluZSA9IG5ldyBUcmVlT3V0bGluZShvbCk7CisK
KyAgICAgICAgICAgIHZhciBjb250ZW50ID0gdGhpcy5fZm9ybWF0dGVkTWVzc2FnZTsKKyAgICAg
ICAgICAgIHZhciByb290ID0gbmV3IFRyZWVFbGVtZW50KGNvbnRlbnQsIG51bGwsIHRydWUpOwor
ICAgICAgICAgICAgY29udGVudC50cmVlRWxlbWVudEZvclRlc3QgPSByb290OworICAgICAgICAg
ICAgdHJlZU91dGxpbmUuYXBwZW5kQ2hpbGQocm9vdCk7CisgICAgICAgICAgICBpZiAobW9kZWwu
dHlwZSA9PT0gV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLlRyYWNlKQor
ICAgICAgICAgICAgICAgIHJvb3QuZXhwYW5kKCk7CisKKyAgICAgICAgICAgIHRoaXMuX3BvcHVs
YXRlU3RhY2tUcmFjZVRyZWVFbGVtZW50KHJvb3QpOworICAgICAgICAgICAgdGhpcy5fZm9ybWF0
dGVkTWVzc2FnZSA9IG9sOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5fbWVzc2FnZSA9IG1l
c3NhZ2VUZXh0LnRleHRDb250ZW50OworICAgIH0sCisKKyAgICBfc2hvdWxkSGlkZVVSTDogZnVu
Y3Rpb24odXJsKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHVybCA9PT0gInVuZGVmaW5lZCIgfHwg
dXJsID09PSAiW25hdGl2ZSBjb2RlXSI7CisgICAgfSwKKworICAgIF9saW5raWZ5TG9jYXRpb246
IGZ1bmN0aW9uKHVybCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyKQorICAgIHsKKyAgICAgICAg
Ly8gQ29uc29sZU1lc3NhZ2Ugc3RhY2sgdHJhY2UgbGluZSBudW1iZXJzIGFyZSBvbmUtYmFzZWQu
CisgICAgICAgIGxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyID8gbGluZU51bWJlciAtIDEgOiAwOwor
CisgICAgICAgIHJldHVybiBXZWJJbnNwZWN0b3IubGlua2lmeUxvY2F0aW9uKHVybCwgbGluZU51
bWJlciwgY29sdW1uTnVtYmVyLCAiY29uc29sZS1tZXNzYWdlLXVybCIpOworICAgIH0sCisKKyAg
ICBfbGlua2lmeUNhbGxGcmFtZTogZnVuY3Rpb24oY2FsbEZyYW1lKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHRoaXMuX2xpbmtpZnlMb2NhdGlvbihjYWxsRnJhbWUudXJsLCBjYWxsRnJhbWUubGlu
ZU51bWJlciwgY2FsbEZyYW1lLmNvbHVtbk51bWJlcik7CisgICAgfSwKKworICAgIF9mb3JtYXQ6
IGZ1bmN0aW9uKHBhcmFtZXRlcnMpCisgICAgeworICAgICAgICAvLyBUaGlzIG5vZGUgaXMgdXNl
ZCBsaWtlIGEgQnVpbGRlci4gVmFsdWVzIGFyZSBjb250aW51YWxseSBhcHBlbmRlZCBvbnRvIGl0
LgorICAgICAgICB2YXIgZm9ybWF0dGVkUmVzdWx0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
c3BhbiIpOworICAgICAgICBpZiAoIXBhcmFtZXRlcnMubGVuZ3RoKQorICAgICAgICAgICAgcmV0
dXJuIGZvcm1hdHRlZFJlc3VsdDsKKworICAgICAgICAvLyBGb3JtYXR0aW5nIGNvZGUgYmVsb3cg
YXNzdW1lcyB0aGF0IHBhcmFtZXRlcnMgYXJlIGFsbCB3cmFwcGVycyB3aGVyZWFzIGZyb250ZW5k
IGNvbnNvbGUKKyAgICAgICAgLy8gQVBJIGFsbG93cyBwYXNzaW5nIGFyYml0cmFyeSB2YWx1ZXMg
YXMgbWVzc2FnZXMgKHN0cmluZ3MsIG51bWJlcnMsIGV0Yy4pLiBXcmFwIHRoZW0gaGVyZS4KKyAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLmxlbmd0aDsgKytpKSB7CisgICAg
ICAgICAgICAvLyBGSVhNRTogT25seSBwYXNzIHJ1bnRpbWUgd3JhcHBlcnMgaGVyZS4KKyAgICAg
ICAgICAgIGlmIChwYXJhbWV0ZXJzW2ldIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlJlbW90ZU9i
amVjdCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYgKHR5cGVv
ZiBwYXJhbWV0ZXJzW2ldID09PSAib2JqZWN0IikKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJz
W2ldID0gV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdC5mcm9tUGF5bG9hZChwYXJhbWV0ZXJzW2ld
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzW2ldID0gV2Vi
SW5zcGVjdG9yLlJlbW90ZU9iamVjdC5mcm9tUHJpbWl0aXZlVmFsdWUocGFyYW1ldGVyc1tpXSk7
CisgICAgICAgIH0KKworICAgICAgICAvLyBUaGVyZSBjYW4gYmUgc3RyaW5nIGxvZyBhbmQgc3Ry
aW5nIGV2YWwgcmVzdWx0LiBXZSBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZW0gYmFzZWQgb24gbWVz
c2FnZSB0eXBlLgorICAgICAgICB2YXIgc2hvdWxkRm9ybWF0TWVzc2FnZSA9IFdlYkluc3BlY3Rv
ci5SZW1vdGVPYmplY3QudHlwZShwYXJhbWV0ZXJzWzBdKSA9PT0gInN0cmluZyIgJiYgdGhpcy5t
b2RlbC50eXBlICE9PSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuUmVz
dWx0OworCisgICAgICAgIGlmIChzaG91bGRGb3JtYXRNZXNzYWdlKSB7CisgICAgICAgICAgICAv
LyBNdWx0aXBsZSBwYXJhbWV0ZXJzIHdpdGggdGhlIGZpcnN0IGJlaW5nIGEgZm9ybWF0IHN0cmlu
Zy4gU2F2ZSB1bnVzZWQgc3Vic3RpdHV0aW9ucy4KKyAgICAgICAgICAgIHZhciByZXN1bHQgPSB0
aGlzLl9mb3JtYXRXaXRoU3Vic3RpdHV0aW9uU3RyaW5nKHBhcmFtZXRlcnMsIGZvcm1hdHRlZFJl
c3VsdCk7CisgICAgICAgICAgICBwYXJhbWV0ZXJzID0gcmVzdWx0LnVudXNlZFN1YnN0aXR1dGlv
bnM7CisgICAgICAgICAgICBpZiAocGFyYW1ldGVycy5sZW5ndGgpCisgICAgICAgICAgICAgICAg
Zm9ybWF0dGVkUmVzdWx0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIgIikp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRoaXMubW9kZWwudHlwZSA9PT0gV2ViSW5zcGVj
dG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLlRhYmxlKSB7CisgICAgICAgICAgICBmb3Jt
YXR0ZWRSZXN1bHQuYXBwZW5kQ2hpbGQodGhpcy5fZm9ybWF0UGFyYW1ldGVyQXNUYWJsZShwYXJh
bWV0ZXJzKSk7CisgICAgICAgICAgICByZXR1cm4gZm9ybWF0dGVkUmVzdWx0OworICAgICAgICB9
CisKKyAgICAgICAgLy8gU2luZ2xlIHBhcmFtZXRlciwgb3IgdW51c2VkIHN1YnN0aXR1dGlvbnMg
ZnJvbSBhYm92ZS4KKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLmxlbmd0
aDsgKytpKSB7CisgICAgICAgICAgICAvLyBJbmxpbmUgc3RyaW5ncyB3aGVuIGZvcm1hdHRpbmcu
CisgICAgICAgICAgICBpZiAoc2hvdWxkRm9ybWF0TWVzc2FnZSAmJiBwYXJhbWV0ZXJzW2ldLnR5
cGUgPT09ICJzdHJpbmciKSB7CisgICAgICAgICAgICAgICAgdmFyIHNwYW4gPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJzcGFuIik7CisgICAgICAgICAgICAgICAgc3Bhbi5jbGFzc0xpc3QuYWRk
KCJ0eXBlLXN0cmluZyIpOworICAgICAgICAgICAgICAgIHNwYW4udGV4dENvbnRlbnQgPSBwYXJh
bWV0ZXJzW2ldLmRlc2NyaXB0aW9uOworICAgICAgICAgICAgICAgIGZvcm1hdHRlZFJlc3VsdC5h
cHBlbmRDaGlsZChzcGFuKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGZv
cm1hdHRlZFJlc3VsdC5hcHBlbmRDaGlsZCh0aGlzLl9mb3JtYXRQYXJhbWV0ZXIocGFyYW1ldGVy
c1tpXSwgZmFsc2UpKTsKKworICAgICAgICAgICAgaWYgKGkgPCBwYXJhbWV0ZXJzLmxlbmd0aCAt
IDEgJiYgIXRoaXMuX2lzRXhwYW5kYWJsZShwYXJhbWV0ZXJzW2ldKSkKKyAgICAgICAgICAgICAg
ICBmb3JtYXR0ZWRSZXN1bHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiAi
KSk7CisKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZm9ybWF0dGVkUmVzdWx0OworICAgIH0s
CisKKyAgICBfaXNFeHBhbmRhYmxlOiBmdW5jdGlvbihyZW1vdGVPYmplY3QpCisgICAgeworICAg
ICAgICBpZiAoIXJlbW90ZU9iamVjdCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICBpZiAocmVtb3RlT2JqZWN0Lmhhc0NoaWxkcmVuICYmIHJlbW90ZU9iamVjdC5wcmV2aWV3
ICYmIHJlbW90ZU9iamVjdC5wcmV2aWV3Lmxvc3NsZXNzKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgIHJldHVybiByZW1vdGVPYmplY3QuaGFzQ2hpbGRyZW47CisgICAgfSwK
KworCisgICAgX2Zvcm1hdFBhcmFtZXRlcjogZnVuY3Rpb24ob3V0cHV0LCBmb3JjZU9iamVjdEZv
cm1hdCkKKyAgICB7CisgICAgICAgIHZhciB0eXBlOworICAgICAgICBpZiAoZm9yY2VPYmplY3RG
b3JtYXQpCisgICAgICAgICAgICB0eXBlID0gIm9iamVjdCI7CisgICAgICAgIGVsc2UgaWYgKG91
dHB1dCBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5SZW1vdGVPYmplY3QpCisgICAgICAgICAgICB0
eXBlID0gb3V0cHV0LnN1YnR5cGUgfHwgb3V0cHV0LnR5cGU7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHR5cGUgPSB0eXBlb2Ygb3V0cHV0OworCisgICAgICAgIHZhciBmb3JtYXR0ZXIgPSB0
aGlzLl9jdXN0b21Gb3JtYXR0ZXJzW3R5cGVdOworICAgICAgICBpZiAoIWZvcm1hdHRlcikKKyAg
ICAgICAgICAgIGZvcm1hdHRlciA9IHRoaXMuX2Zvcm1hdFBhcmFtZXRlckFzVmFsdWU7CisKKyAg
ICAgICAgdmFyIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisKKyAgICAg
ICAgaWYgKHRoaXMuX2lzRXhwYW5kYWJsZShvdXRwdXQpKQorICAgICAgICAgICAgc3Bhbi5jbGFz
c0xpc3QuYWRkKCJleHBhbmRhYmxlIik7CisKKyAgICAgICAgZm9ybWF0dGVyLmNhbGwodGhpcywg
b3V0cHV0LCBzcGFuLCBmb3JjZU9iamVjdEZvcm1hdCk7CisgICAgICAgIHJldHVybiBzcGFuOwor
ICAgIH0sCisKKyAgICBfZm9ybWF0UGFyYW1ldGVyQXNWYWx1ZTogZnVuY3Rpb24odmFsdWUsIGVs
ZW0pCisgICAgeworICAgICAgICBlbGVtLmFwcGVuZENoaWxkKFdlYkluc3BlY3Rvci5Gb3JtYXR0
ZWRWYWx1ZS5jcmVhdGVFbGVtZW50Rm9yUmVtb3RlT2JqZWN0KHZhbHVlKSk7CisgICAgfSwKKwor
ICAgIF9mb3JtYXRQYXJhbWV0ZXJBc09iamVjdDogZnVuY3Rpb24ob2JqLCBlbGVtLCBmb3JjZUV4
cGFuc2lvbikKKyAgICB7CisgICAgICAgIHRoaXMuX29iamVjdFRyZWUgPSBuZXcgV2ViSW5zcGVj
dG9yLk9iamVjdFRyZWVWaWV3KG9iaiwgV2ViSW5zcGVjdG9yLk9iamVjdFRyZWVWaWV3Lk1vZGUu
UHJvcGVydGllcywgdGhpcy5fcm9vdFByb3BlcnR5UGF0aEZvck9iamVjdChvYmopLCBmb3JjZUV4
cGFuc2lvbik7CisgICAgICAgIGVsZW0uYXBwZW5kQ2hpbGQodGhpcy5fb2JqZWN0VHJlZS5lbGVt
ZW50KTsKKyAgICB9LAorCisgICAgX2Zvcm1hdFBhcmFtZXRlckFzU3RyaW5nOiBmdW5jdGlvbihv
dXRwdXQsIGVsZW0pCisgICAgeworICAgICAgICB2YXIgc3BhbiA9IFdlYkluc3BlY3Rvci5Gb3Jt
YXR0ZWRWYWx1ZS5jcmVhdGVMaW5raWZpZWRFbGVtZW50U3RyaW5nKG91dHB1dC5kZXNjcmlwdGlv
bik7CisgICAgICAgIGVsZW0uYXBwZW5kQ2hpbGQoc3Bhbik7CisgICAgfSwKKworICAgIF9mb3Jt
YXRQYXJhbWV0ZXJBc05vZGU6IGZ1bmN0aW9uKG9iamVjdCwgZWxlbSkKKyAgICB7CisgICAgICAg
IHZhciBzcGFuID0gV2ViSW5zcGVjdG9yLkZvcm1hdHRlZFZhbHVlLmNyZWF0ZUVsZW1lbnRGb3JO
b2RlKG9iamVjdCk7CisgICAgICAgIGVsZW0uYXBwZW5kQ2hpbGQoc3Bhbik7CisgICAgfSwKKwor
ICAgIF9mb3JtYXRQYXJhbWV0ZXJBc0FycmF5OiBmdW5jdGlvbihhcnIsIGVsZW0pCisgICAgewor
ICAgICAgICB0aGlzLl9vYmplY3RUcmVlID0gbmV3IFdlYkluc3BlY3Rvci5PYmplY3RUcmVlVmll
dyhhcnIsIFdlYkluc3BlY3Rvci5PYmplY3RUcmVlVmlldy5Nb2RlLlByb3BlcnRpZXMsIHRoaXMu
X3Jvb3RQcm9wZXJ0eVBhdGhGb3JPYmplY3QoYXJyKSk7CisgICAgICAgIGVsZW0uYXBwZW5kQ2hp
bGQodGhpcy5fb2JqZWN0VHJlZS5lbGVtZW50KTsKKyAgICB9LAorCisgICAgX3Jvb3RQcm9wZXJ0
eVBhdGhGb3JPYmplY3Q6IGZ1bmN0aW9uKG9iamVjdCkKKyAgICB7CisgICAgICAgIGlmICghdGhp
cy5zYXZlZFJlc3VsdEluZGV4KQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisKKyAgICAgICAg
cmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuUHJvcGVydHlQYXRoKG9iamVjdCwgIiQiICsgdGhpcy5z
YXZlZFJlc3VsdEluZGV4KTsKKyAgICB9LAorCisgICAgX3VzZXJQcm92aWRlZENvbHVtbk5hbWVz
OiBmdW5jdGlvbihjb2x1bW5OYW1lc0FyZ3VtZW50KQorICAgIHsKKyAgICAgICAgaWYgKCFjb2x1
bW5OYW1lc0FyZ3VtZW50KQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisKKyAgICAgICAgdmFy
IHJlbW90ZU9iamVjdCA9IFdlYkluc3BlY3Rvci5SZW1vdGVPYmplY3QuZnJvbVBheWxvYWQoY29s
dW1uTmFtZXNBcmd1bWVudCk7CisKKyAgICAgICAgLy8gU2luZ2xlIHByaW1pdGl2ZSBhcmd1bWVu
dC4KKyAgICAgICAgaWYgKHJlbW90ZU9iamVjdC50eXBlID09PSAic3RyaW5nIiB8fCByZW1vdGVP
YmplY3QudHlwZSA9PT0gIm51bWJlciIpCisgICAgICAgICAgICByZXR1cm4gW1N0cmluZyhjb2x1
bW5OYW1lc0FyZ3VtZW50LnZhbHVlKV07CisKKyAgICAgICAgLy8gSWdub3JlIGV2ZXJ5dGhpbmcg
dGhhdCBpcyBub3QgYW4gYXJyYXkgd2l0aCBwcm9wZXJ0eSBwcmV2aWV3cy4KKyAgICAgICAgaWYg
KHJlbW90ZU9iamVjdC50eXBlICE9PSAib2JqZWN0IiB8fCByZW1vdGVPYmplY3Quc3VidHlwZSAh
PT0gImFycmF5IiB8fCAhcmVtb3RlT2JqZWN0LnByZXZpZXcgfHwgIXJlbW90ZU9iamVjdC5wcmV2
aWV3LnByb3BlcnR5UHJldmlld3MpCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKworICAgICAg
ICAvLyBBcnJheS4gTG9vayBpbnRvIHRoZSBwcmV2aWV3IGFuZCBnZXQgc3RyaW5nIHZhbHVlcy4K
KyAgICAgICAgdmFyIGV4dHJhY3RlZENvbHVtbk5hbWVzID0gW107CisgICAgICAgIGZvciAodmFy
IHByb3BlcnR5UHJldmlldyBvZiByZW1vdGVPYmplY3QucHJldmlldy5wcm9wZXJ0eVByZXZpZXdz
KSB7CisgICAgICAgICAgICBpZiAocHJvcGVydHlQcmV2aWV3LnR5cGUgPT09ICJzdHJpbmciIHx8
IHByb3BlcnR5UHJldmlldy50eXBlID09PSAibnVtYmVyIikKKyAgICAgICAgICAgICAgICBleHRy
YWN0ZWRDb2x1bW5OYW1lcy5wdXNoKFN0cmluZyhwcm9wZXJ0eVByZXZpZXcudmFsdWUpKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiBleHRyYWN0ZWRDb2x1bW5OYW1lcy5sZW5ndGggPyBl
eHRyYWN0ZWRDb2x1bW5OYW1lcyA6IG51bGw7CisgICAgfSwKKworICAgIF9mb3JtYXRQYXJhbWV0
ZXJBc1RhYmxlOiBmdW5jdGlvbihwYXJhbWV0ZXJzKQorICAgIHsKKyAgICAgICAgdmFyIGVsZW1l
bnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisgICAgICAgIHZhciB0YWJsZSA9
IHBhcmFtZXRlcnNbMF07CisgICAgICAgIGlmICghdGFibGUgfHwgIXRhYmxlLnByZXZpZXcpCisg
ICAgICAgICAgICByZXR1cm4gZWxlbWVudDsKKworICAgICAgICB2YXIgcm93cyA9IFtdOworICAg
ICAgICB2YXIgY29sdW1uTmFtZXMgPSBbXTsKKyAgICAgICAgdmFyIGZsYXRWYWx1ZXMgPSBbXTsK
KyAgICAgICAgdmFyIHByZXZpZXcgPSB0YWJsZS5wcmV2aWV3OworICAgICAgICB2YXIgdXNlclBy
b3ZpZGVkQ29sdW1uTmFtZXMgPSBmYWxzZTsKKworICAgICAgICAvLyBVc2VyIHByb3ZpZGVkIGNv
bHVtbk5hbWVzLgorICAgICAgICB2YXIgZXh0cmFjdGVkQ29sdW1uTmFtZXMgPSB0aGlzLl91c2Vy
UHJvdmlkZWRDb2x1bW5OYW1lcyhwYXJhbWV0ZXJzWzFdKTsKKyAgICAgICAgaWYgKGV4dHJhY3Rl
ZENvbHVtbk5hbWVzKSB7CisgICAgICAgICAgICB1c2VyUHJvdmlkZWRDb2x1bW5OYW1lcyA9IHRy
dWU7CisgICAgICAgICAgICBjb2x1bW5OYW1lcyA9IGV4dHJhY3RlZENvbHVtbk5hbWVzOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gQ2hlY2sgZmlyc3QgZm9yIHZhbHVlUHJldmlld3MgaW4gdGhl
IHByb3BlcnRpZXMgbWVhbmluZyB0aGlzIHdhcyBhbiBhcnJheSBvZiBvYmplY3RzLgorICAgICAg
ICBpZiAocHJldmlldy5wcm9wZXJ0eVByZXZpZXdzKSB7CisgICAgICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHByZXZpZXcucHJvcGVydHlQcmV2aWV3cy5sZW5ndGg7ICsraSkgeworICAgICAg
ICAgICAgICAgIHZhciByb3dQcm9wZXJ0eSA9IHByZXZpZXcucHJvcGVydHlQcmV2aWV3c1tpXTsK
KyAgICAgICAgICAgICAgICB2YXIgcm93UHJldmlldyA9IHJvd1Byb3BlcnR5LnZhbHVlUHJldmll
dzsKKyAgICAgICAgICAgICAgICBpZiAoIXJvd1ByZXZpZXcpCisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgdmFyIHJvd1ZhbHVlID0ge307CisgICAgICAg
ICAgICAgICAgY29uc3QgbWF4Q29sdW1uc1RvUmVuZGVyID0gMTA7CisgICAgICAgICAgICAgICAg
Zm9yICh2YXIgaiA9IDA7IGogPCByb3dQcmV2aWV3LnByb3BlcnR5UHJldmlld3MubGVuZ3RoOyAr
K2opIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGNlbGxQcm9wZXJ0eSA9IHJvd1ByZXZpZXcu
cHJvcGVydHlQcmV2aWV3c1tqXTsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGNvbHVtblJlbmRl
cmVkID0gY29sdW1uTmFtZXMuY29udGFpbnMoY2VsbFByb3BlcnR5Lm5hbWUpOworICAgICAgICAg
ICAgICAgICAgICBpZiAoIWNvbHVtblJlbmRlcmVkKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAodXNlclByb3ZpZGVkQ29sdW1uTmFtZXMgfHwgY29sdW1uTmFtZXMubGVuZ3RoID09PSBt
YXhDb2x1bW5zVG9SZW5kZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5SZW5kZXJlZCA9IHRydWU7CisgICAgICAg
ICAgICAgICAgICAgICAgICBjb2x1bW5OYW1lcy5wdXNoKGNlbGxQcm9wZXJ0eS5uYW1lKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHJvd1ZhbHVlW2NlbGxQ
cm9wZXJ0eS5uYW1lXSA9IFdlYkluc3BlY3Rvci5Gb3JtYXR0ZWRWYWx1ZS5jcmVhdGVFbGVtZW50
Rm9yUHJvcGVydHlQcmV2aWV3KGNlbGxQcm9wZXJ0eSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIHJvd3MucHVzaChbcm93UHJvcGVydHkubmFtZSwgcm93VmFsdWVdKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHRoZXJlIHdlcmUgdmFsdWVQ
cmV2aWV3cywgY29udmVydCB0byBhIGZsYXQgbGlzdC4KKyAgICAgICAgaWYgKHJvd3MubGVuZ3Ro
KSB7CisgICAgICAgICAgICBjb25zdCBlbURhc2ggPSAiXHUyMDE0IjsKKyAgICAgICAgICAgIGNv
bHVtbk5hbWVzLnVuc2hpZnQoV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIoSW5kZXgpIikpOworICAg
ICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgKytpKSB7CisgICAgICAg
ICAgICAgICAgdmFyIHJvd05hbWUgPSByb3dzW2ldWzBdOworICAgICAgICAgICAgICAgIHZhciBy
b3dWYWx1ZSA9IHJvd3NbaV1bMV07CisgICAgICAgICAgICAgICAgZmxhdFZhbHVlcy5wdXNoKHJv
d05hbWUpOworICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAxOyBqIDwgY29sdW1uTmFtZXMu
bGVuZ3RoOyArK2opIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGNvbHVtbk5hbWUgPSBjb2x1
bW5OYW1lc1tqXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCEoY29sdW1uTmFtZSBpbiByb3dW
YWx1ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBmbGF0VmFsdWVzLnB1c2goZW1EYXNoKTsK
KyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgZmxhdFZh
bHVlcy5wdXNoKHJvd1ZhbHVlW2NvbHVtbk5hbWVdKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBJZiB0aGVyZSB3ZXJlIG5vIHZhbHVl
IFByZXZpZXdzLCB0aGVuIGNoZWNrIGZvciBhbiBhcnJheSBvZiB2YWx1ZXMuCisgICAgICAgIGlm
ICghZmxhdFZhbHVlcy5sZW5ndGggJiYgcHJldmlldy5wcm9wZXJ0eVByZXZpZXdzKSB7CisgICAg
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByZXZpZXcucHJvcGVydHlQcmV2aWV3cy5sZW5n
dGg7ICsraSkgeworICAgICAgICAgICAgICAgIHZhciByb3dQcm9wZXJ0eSA9IHByZXZpZXcucHJv
cGVydHlQcmV2aWV3c1tpXTsKKyAgICAgICAgICAgICAgICBpZiAoISgidmFsdWUiIGluIHJvd1By
b3BlcnR5KSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAg
ICBpZiAoIWNvbHVtbk5hbWVzLmxlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICBjb2x1bW5O
YW1lcy5wdXNoKFdlYkluc3BlY3Rvci5VSVN0cmluZygiSW5kZXgiKSk7CisgICAgICAgICAgICAg
ICAgICAgIGNvbHVtbk5hbWVzLnB1c2goV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJWYWx1ZSIpKTsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBmbGF0VmFsdWVzLnB1c2gocm93
UHJvcGVydHkubmFtZSk7CisgICAgICAgICAgICAgICAgZmxhdFZhbHVlcy5wdXNoKFdlYkluc3Bl
Y3Rvci5Gb3JtYXR0ZWRWYWx1ZS5jcmVhdGVFbGVtZW50Rm9yUHJvcGVydHlQcmV2aWV3KHJvd1By
b3BlcnR5KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBJZiBsb3Nz
bGVzcyBvciBub3QgdGFibGUgZGF0YSwgb3V0cHV0IHRoZSBvYmplY3Qgc28gZnVsbCBkYXRhIGNh
biBiZSBnb3R0ZW4uCisgICAgICAgIGlmICghcHJldmlldy5sb3NzbGVzcyB8fCAhZmxhdFZhbHVl
cy5sZW5ndGgpIHsKKyAgICAgICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fZm9ybWF0
UGFyYW1ldGVyKHRhYmxlKSk7CisgICAgICAgICAgICBpZiAoIWZsYXRWYWx1ZXMubGVuZ3RoKQor
ICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50OworICAgICAgICB9CisKKyAgICAgICAgdmFy
IGRhdGFHcmlkQ29udGFpbmVyID0gZWxlbWVudC5jcmVhdGVDaGlsZCgic3BhbiIpOworICAgICAg
ICB2YXIgZGF0YUdyaWQgPSBXZWJJbnNwZWN0b3IuRGF0YUdyaWQuY3JlYXRlU29ydGFibGVEYXRh
R3JpZChjb2x1bW5OYW1lcywgZmxhdFZhbHVlcyk7CisgICAgICAgIGRhdGFHcmlkLmVsZW1lbnQu
Y2xhc3NMaXN0LmFkZCgiaW5saW5lIik7CisgICAgICAgIGRhdGFHcmlkQ29udGFpbmVyLmFwcGVu
ZENoaWxkKGRhdGFHcmlkLmVsZW1lbnQpOworCisgICAgICAgIHJldHVybiBlbGVtZW50OworICAg
IH0sCisKKyAgICBfZm9ybWF0V2l0aFN1YnN0aXR1dGlvblN0cmluZzogZnVuY3Rpb24ocGFyYW1l
dGVycywgZm9ybWF0dGVkUmVzdWx0KQorICAgIHsKKyAgICAgICAgdmFyIGZvcm1hdHRlcnMgPSB7
fTsKKworICAgICAgICBmdW5jdGlvbiBwYXJhbWV0ZXJGb3JtYXR0ZXIoZm9yY2UsIG9iaikKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1hdFBhcmFtZXRlcihvYmosIGZv
cmNlKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHN0cmluZ0Zvcm1hdHRlcihvYmop
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBvYmouZGVzY3JpcHRpb247CisgICAgICAg
IH0KKworICAgICAgICBmdW5jdGlvbiBmbG9hdEZvcm1hdHRlcihvYmopCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmICh0eXBlb2Ygb2JqLnZhbHVlICE9PSAibnVtYmVyIikKKyAgICAgICAgICAg
ICAgICByZXR1cm4gcGFyc2VGbG9hdChvYmouZGVzY3JpcHRpb24pOworICAgICAgICAgICAgcmV0
dXJuIG9iai52YWx1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGludGVnZXJGb3Jt
YXR0ZXIob2JqKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodHlwZW9mIG9iai52YWx1ZSAh
PT0gIm51bWJlciIpCisgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KG9iai5kZXNjcmlw
dGlvbik7CisgICAgICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihvYmoudmFsdWUpOworICAgICAg
ICB9CisKKyAgICAgICAgdmFyIGN1cnJlbnRTdHlsZSA9IG51bGw7CisgICAgICAgIGZ1bmN0aW9u
IHN0eWxlRm9ybWF0dGVyKG9iaikKKyAgICAgICAgeworICAgICAgICAgICAgY3VycmVudFN0eWxl
ID0ge307CisgICAgICAgICAgICB2YXIgYnVmZmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
c3BhbiIpOworICAgICAgICAgICAgYnVmZmVyLnNldEF0dHJpYnV0ZSgic3R5bGUiLCBvYmouZGVz
Y3JpcHRpb24pOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidWZmZXIuc3R5bGUu
bGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgcHJvcGVydHkgPSBidWZmZXIuc3R5
bGVbaV07CisgICAgICAgICAgICAgICAgaWYgKGlzV2hpdGVsaXN0ZWRQcm9wZXJ0eShwcm9wZXJ0
eSkpCisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTdHlsZVtwcm9wZXJ0eV0gPSBidWZmZXIu
c3R5bGVbcHJvcGVydHldOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZnVu
Y3Rpb24gaXNXaGl0ZWxpc3RlZFByb3BlcnR5KHByb3BlcnR5KQorICAgICAgICB7CisgICAgICAg
ICAgICB2YXIgcHJlZml4ZXMgPSBbImJhY2tncm91bmQiLCAiYm9yZGVyIiwgImNvbG9yIiwgImZv
bnQiLCAibGluZSIsICJtYXJnaW4iLCAicGFkZGluZyIsICJ0ZXh0IiwgIi13ZWJraXQtYmFja2dy
b3VuZCIsICItd2Via2l0LWJvcmRlciIsICItd2Via2l0LWZvbnQiLCAiLXdlYmtpdC1tYXJnaW4i
LCAiLXdlYmtpdC1wYWRkaW5nIiwgIi13ZWJraXQtdGV4dCJdOworICAgICAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBwcmVmaXhlcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGlm
IChwcm9wZXJ0eS5zdGFydHNXaXRoKHByZWZpeGVzW2ldKSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBGaXJlYnVnIHVzZXMgJW8gZm9yIGZvcm1hdHRpbmcgb2Jq
ZWN0cy4KKyAgICAgICAgZm9ybWF0dGVycy5vID0gcGFyYW1ldGVyRm9ybWF0dGVyLmJpbmQodGhp
cywgZmFsc2UpOworICAgICAgICBmb3JtYXR0ZXJzLnMgPSBzdHJpbmdGb3JtYXR0ZXI7CisgICAg
ICAgIGZvcm1hdHRlcnMuZiA9IGZsb2F0Rm9ybWF0dGVyOworCisgICAgICAgIC8vIEZpcmVidWcg
YWxsb3dzIGJvdGggJWkgYW5kICVkIGZvciBmb3JtYXR0aW5nIGludGVnZXJzLgorICAgICAgICBm
b3JtYXR0ZXJzLmkgPSBpbnRlZ2VyRm9ybWF0dGVyOworICAgICAgICBmb3JtYXR0ZXJzLmQgPSBp
bnRlZ2VyRm9ybWF0dGVyOworCisgICAgICAgIC8vIEZpcmVidWcgdXNlcyAlYyBmb3Igc3R5bGlu
ZyB0aGUgbWVzc2FnZS4KKyAgICAgICAgZm9ybWF0dGVycy5jID0gc3R5bGVGb3JtYXR0ZXI7CisK
KyAgICAgICAgLy8gU3VwcG9ydCAlTyB0byBmb3JjZSBvYmplY3QgZm9ybWF0dGluZywgaW5zdGVh
ZCBvZiB0aGUgdHlwZS1iYXNlZCAlbyBmb3JtYXR0aW5nLgorICAgICAgICBmb3JtYXR0ZXJzLk8g
PSBwYXJhbWV0ZXJGb3JtYXR0ZXIuYmluZCh0aGlzLCB0cnVlKTsKKworICAgICAgICBmdW5jdGlv
biBhcHBlbmQoYSwgYikKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGIgaW5zdGFuY2VvZiBO
b2RlKQorICAgICAgICAgICAgICAgIGEuYXBwZW5kQ2hpbGQoYik7CisgICAgICAgICAgICBlbHNl
IGlmIChiKSB7CisgICAgICAgICAgICAgICAgdmFyIHRvQXBwZW5kID0gV2ViSW5zcGVjdG9yLmxp
bmtpZnlTdHJpbmdBc0ZyYWdtZW50KGIudG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgaWYg
KGN1cnJlbnRTdHlsZSkgeworICAgICAgICAgICAgICAgICAgICB2YXIgd3JhcHBlciA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIg
a2V5IGluIGN1cnJlbnRTdHlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXIuc3R5
bGVba2V5XSA9IGN1cnJlbnRTdHlsZVtrZXldOworICAgICAgICAgICAgICAgICAgICB3cmFwcGVy
LmFwcGVuZENoaWxkKHRvQXBwZW5kKTsKKyAgICAgICAgICAgICAgICAgICAgdG9BcHBlbmQgPSB3
cmFwcGVyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2YXIgc3BhbiA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICAgICAgICAgICAgICBzcGFuLmNsYXNz
TmFtZSA9ICJ0eXBlLXN0cmluZyI7CisgICAgICAgICAgICAgICAgc3Bhbi5hcHBlbmRDaGlsZCh0
b0FwcGVuZCk7CisgICAgICAgICAgICAgICAgYS5hcHBlbmRDaGlsZChzcGFuKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHJldHVybiBhOworICAgICAgICB9CisKKyAgICAgICAgLy8gU3Ry
aW5nLmZvcm1hdCBkb2VzIHRyZWF0IGZvcm1hdHRlZFJlc3VsdCBsaWtlIGEgQnVpbGRlciwgcmVz
dWx0IGlzIGFuIG9iamVjdC4KKyAgICAgICAgcmV0dXJuIFN0cmluZy5mb3JtYXQocGFyYW1ldGVy
c1swXS5kZXNjcmlwdGlvbiwgcGFyYW1ldGVycy5zbGljZSgxKSwgZm9ybWF0dGVycywgZm9ybWF0
dGVkUmVzdWx0LCBhcHBlbmQpOworICAgIH0sCisKKyAgICBfcG9wdWxhdGVTdGFja1RyYWNlVHJl
ZUVsZW1lbnQ6IGZ1bmN0aW9uKHBhcmVudFRyZWVFbGVtZW50KQorICAgIHsKKyAgICAgICAgZm9y
IChmcmFtZSBvZiB0aGlzLm1vZGVsLnN0YWNrVHJhY2UpIHsKKyAgICAgICAgICAgIHZhciBjb250
ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAgICAgICB2YXIgbWVz
c2FnZVRleHRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOworICAgICAg
ICAgICAgbWVzc2FnZVRleHRFbGVtZW50LmNsYXNzTmFtZSA9ICJjb25zb2xlLW1lc3NhZ2UtdGV4
dCI7CisgICAgICAgICAgICB2YXIgZnVuY3Rpb25OYW1lID0gZnJhbWUuZnVuY3Rpb25OYW1lIHx8
IFdlYkluc3BlY3Rvci5VSVN0cmluZygiKGFub255bW91cyBmdW5jdGlvbikiKTsKKyAgICAgICAg
ICAgIG1lc3NhZ2VUZXh0RWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9k
ZShmdW5jdGlvbk5hbWUpKTsKKyAgICAgICAgICAgIGNvbnRlbnQuYXBwZW5kQ2hpbGQobWVzc2Fn
ZVRleHRFbGVtZW50KTsKKworICAgICAgICAgICAgaWYgKGZyYW1lLnVybCAmJiAhdGhpcy5fc2hv
dWxkSGlkZVVSTChmcmFtZS51cmwpKSB7CisgICAgICAgICAgICAgICAgdmFyIHVybEVsZW1lbnQg
PSB0aGlzLl9saW5raWZ5Q2FsbEZyYW1lKGZyYW1lKTsKKyAgICAgICAgICAgICAgICBjb250ZW50
LmFwcGVuZENoaWxkKHVybEVsZW1lbnQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2
YXIgdHJlZUVsZW1lbnQgPSBuZXcgVHJlZUVsZW1lbnQoY29udGVudCk7CisgICAgICAgICAgICBw
YXJlbnRUcmVlRWxlbWVudC5hcHBlbmRDaGlsZCh0cmVlRWxlbWVudCk7CisgICAgICAgIH0KKyAg
ICB9CisKK307CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9WaWV3cy9MZWdhY3lDb25zb2xlTWVzc2FnZUltcGwuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9WaWV3cy9MZWdhY3lDb25zb2xlTWVzc2FnZUltcGwuanMKaW5kZXgg
ZjNhOWQ2NS4uNWYwNDZmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvVmlld3MvTGVnYWN5Q29uc29sZU1lc3NhZ2VJbXBsLmpzCisrKyBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0xlZ2FjeUNvbnNvbGVNZXNzYWdlSW1w
bC5qcwpAQCAtNjI2LDcgKzYyNiw4IEBAIFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2Fn
ZUltcGwucHJvdG90eXBlID0gewogICAgICAgICB9CiAgICAgfSwKIAotICAgIHVwZGF0ZVJlcGVh
dENvdW50OiBmdW5jdGlvbigpIHsKKyAgICB1cGRhdGVSZXBlYXRDb3VudDogZnVuY3Rpb24oKQor
ICAgIHsKICAgICAgICAgaWYgKCF0aGlzLnJlcGVhdENvdW50RWxlbWVudCkgewogICAgICAgICAg
ICAgdGhpcy5yZXBlYXRDb3VudEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFu
Iik7CiAgICAgICAgICAgICB0aGlzLnJlcGVhdENvdW50RWxlbWVudC5jbGFzc05hbWUgPSAiYnVi
YmxlIjsK
</data>
<flag name="review"
          id="273907"
          type_id="1"
          status="-"
          setter="joepeck"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250391</attachid>
            <date>2015-04-08 15:42:49 -0700</date>
            <delta_ts>2015-04-08 16:12:34 -0700</delta_ts>
            <desc>[PATCH] Proposed Fix</desc>
            <filename>model.patch</filename>
            <type>text/plain</type>
            <size>140306</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBjOTk3NWJmLi5hMjE2MjRiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTUtMDQt
MDggIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIg
SW5zcGVjdG9yOiBTcGxpdCBDb25zb2xlTWVzc2FnZUltcGwgaW50byB0aGUgVmlldyBhbmQgdGhl
IE1vZGVsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NDI1OTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IGluc3BlY3Rvci9jb25zb2xlL2NvbnNvbGUtYXBpLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogaW5zcGVjdG9yL2NvbnNvbGUvY29uc29sZS1hcGkuaHRtbDogQWRkZWQuCisgICAgICAg
IEFkZCBhIGJhc2ljIHRlc3QgZm9yIGNvbnNvbGUgQVBJcyBjcmVhdGluZyB0aGUgbmV3IENvbnNv
bGVNZXNzYWdlIG1vZGVsIG9iamVjdHMuCisKIDIwMTUtMDQtMDcgIEpvc2VwaCBQZWNvcmFybyAg
PHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBFUzY6IFNob3cg
U3ltYm9sIHByb3BlcnRpZXMgb24gT2JqZWN0cwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5z
cGVjdG9yL2NvbnNvbGUvY29uc29sZS1hcGktZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW5z
cGVjdG9yL2NvbnNvbGUvY29uc29sZS1hcGktZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjk4NzUyYjkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9pbnNwZWN0b3IvY29uc29sZS9jb25zb2xlLWFwaS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw1
OTcgQEAKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxOiBjb25zb2xlLmxvZworQ09OU09MRSBNRVNT
QUdFOiBsaW5lIDE6IGNvbnNvbGUud2FybgorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDE6IGNvbnNv
bGUuZXJyb3IKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxOiBjb25zb2xlLmRlYnVnCitDT05TT0xF
IE1FU1NBR0U6IGxpbmUgMTogY29uc29sZS5pbmZvCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMTog
YXNzZXJ0aW9uIG1lc3NhZ2UKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxOiBzdHJpbmcgbWVzc2Fn
ZQorQ09OU09MRSBNRVNTQUdFOiBsaW5lIDE6IG1lc3NhZ2UKK0NPTlNPTEUgTUVTU0FHRTogbGlu
ZSAxOiBtZXNzYWdlCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMTogbWVzc2FnZQorQ09OU09MRSBN
RVNTQUdFOiBsaW5lIDE6IG1lc3NhZ2UKK0NPTlNPTEUgTUVTU0FHRTogbGluZSAxOiBtZXNzYWdl
CitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMTogW29iamVjdCBPYmplY3RdCitDT05TT0xFIE1FU1NB
R0U6IGxpbmUgMTogW29iamVjdCBPYmplY3RdCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMTogZ3Jv
dXBOYW1lCitDT05TT0xFIE1FU1NBR0U6IGdyb3VwTmFtZQorQ09OU09MRSBNRVNTQUdFOiBsaW5l
IDE6IGNvbGxhcHNlZEdyb3VwTmFtZQorQ09OU09MRSBNRVNTQUdFOiBjb2xsYXBzZWRHcm91cE5h
bWUKKworU1RFUDogY29uc29sZS5sb2coJ2NvbnNvbGUubG9nJykKK3sKKyAgIl9zb3VyY2UiOiAi
Y29uc29sZS1hcGkiLAorICAiX2xldmVsIjogImxvZyIsCisgICJfbWVzc2FnZVRleHQiOiAiY29u
c29sZS5sb2ciLAorICAiX3R5cGUiOiAibG9nIiwKKyAgIl91cmwiOiBudWxsLAorICAiX2xpbmUi
OiAxLAorICAiX2NvbHVtbiI6IDEyLAorICAiX3JlcGVhdENvdW50IjogMSwKKyAgIl9wYXJhbWV0
ZXJzIjogWworICAgIHsKKyAgICAgICJfdHlwZSI6ICJzdHJpbmciLAorICAgICAgIl9kZXNjcmlw
dGlvbiI6ICJjb25zb2xlLmxvZyIsCisgICAgICAiX2hhc0NoaWxkcmVuIjogZmFsc2UsCisgICAg
ICAiX3ZhbHVlIjogImNvbnNvbGUubG9nIgorICAgIH0KKyAgXSwKKyAgIl9zdGFja1RyYWNlIjog
IjxmaWx0ZXJlZD4iLAorICAiX3JlcXVlc3QiOiBudWxsCit9CisKK1NURVA6IGNvbnNvbGUud2Fy
bignY29uc29sZS53YXJuJykKK3sKKyAgIl9zb3VyY2UiOiAiY29uc29sZS1hcGkiLAorICAiX2xl
dmVsIjogIndhcm5pbmciLAorICAiX21lc3NhZ2VUZXh0IjogImNvbnNvbGUud2FybiIsCisgICJf
dHlwZSI6ICJsb2ciLAorICAiX3VybCI6IG51bGwsCisgICJfbGluZSI6IDEsCisgICJfY29sdW1u
IjogMTMsCisgICJfcmVwZWF0Q291bnQiOiAxLAorICAiX3BhcmFtZXRlcnMiOiBbCisgICAgewor
ICAgICAgIl90eXBlIjogInN0cmluZyIsCisgICAgICAiX2Rlc2NyaXB0aW9uIjogImNvbnNvbGUu
d2FybiIsCisgICAgICAiX2hhc0NoaWxkcmVuIjogZmFsc2UsCisgICAgICAiX3ZhbHVlIjogImNv
bnNvbGUud2FybiIKKyAgICB9CisgIF0sCisgICJfc3RhY2tUcmFjZSI6ICI8ZmlsdGVyZWQ+IiwK
KyAgIl9yZXF1ZXN0IjogbnVsbAorfQorCitTVEVQOiBjb25zb2xlLmVycm9yKCdjb25zb2xlLmVy
cm9yJykKK3sKKyAgIl9zb3VyY2UiOiAiY29uc29sZS1hcGkiLAorICAiX2xldmVsIjogImVycm9y
IiwKKyAgIl9tZXNzYWdlVGV4dCI6ICJjb25zb2xlLmVycm9yIiwKKyAgIl90eXBlIjogImxvZyIs
CisgICJfdXJsIjogbnVsbCwKKyAgIl9saW5lIjogMSwKKyAgIl9jb2x1bW4iOiAxNCwKKyAgIl9y
ZXBlYXRDb3VudCI6IDEsCisgICJfcGFyYW1ldGVycyI6IFsKKyAgICB7CisgICAgICAiX3R5cGUi
OiAic3RyaW5nIiwKKyAgICAgICJfZGVzY3JpcHRpb24iOiAiY29uc29sZS5lcnJvciIsCisgICAg
ICAiX2hhc0NoaWxkcmVuIjogZmFsc2UsCisgICAgICAiX3ZhbHVlIjogImNvbnNvbGUuZXJyb3Ii
CisgICAgfQorICBdLAorICAiX3N0YWNrVHJhY2UiOiAiPGZpbHRlcmVkPiIsCisgICJfcmVxdWVz
dCI6IG51bGwKK30KKworU1RFUDogY29uc29sZS5kZWJ1ZygnY29uc29sZS5kZWJ1ZycpCit7Cisg
ICJfc291cmNlIjogImNvbnNvbGUtYXBpIiwKKyAgIl9sZXZlbCI6ICJkZWJ1ZyIsCisgICJfbWVz
c2FnZVRleHQiOiAiY29uc29sZS5kZWJ1ZyIsCisgICJfdHlwZSI6ICJsb2ciLAorICAiX3VybCI6
IG51bGwsCisgICJfbGluZSI6IDEsCisgICJfY29sdW1uIjogMTQsCisgICJfcmVwZWF0Q291bnQi
OiAxLAorICAiX3BhcmFtZXRlcnMiOiBbCisgICAgeworICAgICAgIl90eXBlIjogInN0cmluZyIs
CisgICAgICAiX2Rlc2NyaXB0aW9uIjogImNvbnNvbGUuZGVidWciLAorICAgICAgIl9oYXNDaGls
ZHJlbiI6IGZhbHNlLAorICAgICAgIl92YWx1ZSI6ICJjb25zb2xlLmRlYnVnIgorICAgIH0KKyAg
XSwKKyAgIl9zdGFja1RyYWNlIjogIjxmaWx0ZXJlZD4iLAorICAiX3JlcXVlc3QiOiBudWxsCit9
CisKK1NURVA6IGNvbnNvbGUuaW5mbygnY29uc29sZS5pbmZvJykKK3sKKyAgIl9zb3VyY2UiOiAi
Y29uc29sZS1hcGkiLAorICAiX2xldmVsIjogImxvZyIsCisgICJfbWVzc2FnZVRleHQiOiAiY29u
c29sZS5pbmZvIiwKKyAgIl90eXBlIjogImxvZyIsCisgICJfdXJsIjogbnVsbCwKKyAgIl9saW5l
IjogMSwKKyAgIl9jb2x1bW4iOiAxMywKKyAgIl9yZXBlYXRDb3VudCI6IDEsCisgICJfcGFyYW1l
dGVycyI6IFsKKyAgICB7CisgICAgICAiX3R5cGUiOiAic3RyaW5nIiwKKyAgICAgICJfZGVzY3Jp
cHRpb24iOiAiY29uc29sZS5pbmZvIiwKKyAgICAgICJfaGFzQ2hpbGRyZW4iOiBmYWxzZSwKKyAg
ICAgICJfdmFsdWUiOiAiY29uc29sZS5pbmZvIgorICAgIH0KKyAgXSwKKyAgIl9zdGFja1RyYWNl
IjogIjxmaWx0ZXJlZD4iLAorICAiX3JlcXVlc3QiOiBudWxsCit9CisKK1NURVA6IGNvbnNvbGUu
YXNzZXJ0KGZhbHNlLCAnYXNzZXJ0aW9uIG1lc3NhZ2UnKQoreworICAiX3NvdXJjZSI6ICJjb25z
b2xlLWFwaSIsCisgICJfbGV2ZWwiOiAiZXJyb3IiLAorICAiX21lc3NhZ2VUZXh0IjogImFzc2Vy
dGlvbiBtZXNzYWdlIiwKKyAgIl90eXBlIjogImFzc2VydCIsCisgICJfdXJsIjogbnVsbCwKKyAg
Il9saW5lIjogMSwKKyAgIl9jb2x1bW4iOiAxNSwKKyAgIl9yZXBlYXRDb3VudCI6IDEsCisgICJf
cGFyYW1ldGVycyI6IFsKKyAgICB7CisgICAgICAiX3R5cGUiOiAic3RyaW5nIiwKKyAgICAgICJf
ZGVzY3JpcHRpb24iOiAiYXNzZXJ0aW9uIG1lc3NhZ2UiLAorICAgICAgIl9oYXNDaGlsZHJlbiI6
IGZhbHNlLAorICAgICAgIl92YWx1ZSI6ICJhc3NlcnRpb24gbWVzc2FnZSIKKyAgICB9CisgIF0s
CisgICJfc3RhY2tUcmFjZSI6ICI8ZmlsdGVyZWQ+IiwKKyAgIl9yZXF1ZXN0IjogbnVsbAorfQor
CitTVEVQOiBjb25zb2xlLnRyYWNlKCkKK3sKKyAgIl9zb3VyY2UiOiAiY29uc29sZS1hcGkiLAor
ICAiX2xldmVsIjogImxvZyIsCisgICJfbWVzc2FnZVRleHQiOiAiIiwKKyAgIl90eXBlIjogInRy
YWNlIiwKKyAgIl91cmwiOiBudWxsLAorICAiX2xpbmUiOiAxLAorICAiX2NvbHVtbiI6IDE0LAor
ICAiX3JlcGVhdENvdW50IjogMSwKKyAgIl9zdGFja1RyYWNlIjogIjxmaWx0ZXJlZD4iLAorICAi
X3JlcXVlc3QiOiBudWxsCit9CisKK1NURVA6IGNvbnNvbGUubG9nKCdzdHJpbmcgbWVzc2FnZScs
IHN0cmluZykKK3sKKyAgIl9zb3VyY2UiOiAiY29uc29sZS1hcGkiLAorICAiX2xldmVsIjogImxv
ZyIsCisgICJfbWVzc2FnZVRleHQiOiAic3RyaW5nIG1lc3NhZ2UiLAorICAiX3R5cGUiOiAibG9n
IiwKKyAgIl91cmwiOiBudWxsLAorICAiX2xpbmUiOiAxLAorICAiX2NvbHVtbiI6IDEyLAorICAi
X3JlcGVhdENvdW50IjogMSwKKyAgIl9wYXJhbWV0ZXJzIjogWworICAgIHsKKyAgICAgICJfdHlw
ZSI6ICJzdHJpbmciLAorICAgICAgIl9kZXNjcmlwdGlvbiI6ICJzdHJpbmcgbWVzc2FnZSIsCisg
ICAgICAiX2hhc0NoaWxkcmVuIjogZmFsc2UsCisgICAgICAiX3ZhbHVlIjogInN0cmluZyBtZXNz
YWdlIgorICAgIH0sCisgICAgeworICAgICAgIl90eXBlIjogInN0cmluZyIsCisgICAgICAiX2Rl
c2NyaXB0aW9uIjogInN0cmluZyIsCisgICAgICAiX2hhc0NoaWxkcmVuIjogZmFsc2UsCisgICAg
ICAiX3ZhbHVlIjogInN0cmluZyIKKyAgICB9CisgIF0sCisgICJfc3RhY2tUcmFjZSI6ICI8Zmls
dGVyZWQ+IiwKKyAgIl9yZXF1ZXN0IjogbnVsbAorfQorCitTVEVQOiBjb25zb2xlLmxvZygnbWVz
c2FnZScsIG9iamVjdCwgb2JqZWN0KQoreworICAiX3NvdXJjZSI6ICJjb25zb2xlLWFwaSIsCisg
ICJfbGV2ZWwiOiAibG9nIiwKKyAgIl9tZXNzYWdlVGV4dCI6ICJtZXNzYWdlIiwKKyAgIl90eXBl
IjogImxvZyIsCisgICJfdXJsIjogbnVsbCwKKyAgIl9saW5lIjogMSwKKyAgIl9jb2x1bW4iOiAx
MiwKKyAgIl9yZXBlYXRDb3VudCI6IDEsCisgICJfcGFyYW1ldGVycyI6IFsKKyAgICB7CisgICAg
ICAiX3R5cGUiOiAic3RyaW5nIiwKKyAgICAgICJfZGVzY3JpcHRpb24iOiAibWVzc2FnZSIsCisg
ICAgICAiX2hhc0NoaWxkcmVuIjogZmFsc2UsCisgICAgICAiX3ZhbHVlIjogIm1lc3NhZ2UiCisg
ICAgfSwKKyAgICB7CisgICAgICAiX3R5cGUiOiAib2JqZWN0IiwKKyAgICAgICJfb2JqZWN0SWQi
OiAiPGZpbHRlcmVkPiIsCisgICAgICAiX2Rlc2NyaXB0aW9uIjogIk9iamVjdCIsCisgICAgICAi
X2hhc0NoaWxkcmVuIjogdHJ1ZSwKKyAgICAgICJfcHJldmlldyI6IHsKKyAgICAgICAgIl90eXBl
IjogIm9iamVjdCIsCisgICAgICAgICJfZGVzY3JpcHRpb24iOiAiT2JqZWN0IiwKKyAgICAgICAg
Il9sb3NzbGVzcyI6IHRydWUsCisgICAgICAgICJfb3ZlcmZsb3ciOiBmYWxzZSwKKyAgICAgICAg
Il9wcm9wZXJ0aWVzIjogWworICAgICAgICAgIHsKKyAgICAgICAgICAgICJfbmFtZSI6ICJhIiwK
KyAgICAgICAgICAgICJfdHlwZSI6ICJudW1iZXIiLAorICAgICAgICAgICAgIl92YWx1ZSI6ICIx
IgorICAgICAgICAgIH0KKyAgICAgICAgXSwKKyAgICAgICAgIl9lbnRyaWVzIjogbnVsbAorICAg
ICAgfQorICAgIH0sCisgICAgeworICAgICAgIl90eXBlIjogIm9iamVjdCIsCisgICAgICAiX29i
amVjdElkIjogIjxmaWx0ZXJlZD4iLAorICAgICAgIl9kZXNjcmlwdGlvbiI6ICJPYmplY3QiLAor
ICAgICAgIl9oYXNDaGlsZHJlbiI6IHRydWUsCisgICAgICAiX3ByZXZpZXciOiB7CisgICAgICAg
ICJfdHlwZSI6ICJvYmplY3QiLAorICAgICAgICAiX2Rlc2NyaXB0aW9uIjogIk9iamVjdCIsCisg
ICAgICAgICJfbG9zc2xlc3MiOiB0cnVlLAorICAgICAgICAiX292ZXJmbG93IjogZmFsc2UsCisg
ICAgICAgICJfcHJvcGVydGllcyI6IFsKKyAgICAgICAgICB7CisgICAgICAgICAgICAiX25hbWUi
OiAiYSIsCisgICAgICAgICAgICAiX3R5cGUiOiAibnVtYmVyIiwKKyAgICAgICAgICAgICJfdmFs
dWUiOiAiMSIKKyAgICAgICAgICB9CisgICAgICAgIF0sCisgICAgICAgICJfZW50cmllcyI6IG51
bGwKKyAgICAgIH0KKyAgICB9CisgIF0sCisgICJfc3RhY2tUcmFjZSI6ICI8ZmlsdGVyZWQ+IiwK
KyAgIl9yZXF1ZXN0IjogbnVsbAorfQorCitTVEVQOiBjb25zb2xlLmVycm9yKCdtZXNzYWdlJywg
b2JqZWN0KQoreworICAiX3NvdXJjZSI6ICJjb25zb2xlLWFwaSIsCisgICJfbGV2ZWwiOiAiZXJy
b3IiLAorICAiX21lc3NhZ2VUZXh0IjogIm1lc3NhZ2UiLAorICAiX3R5cGUiOiAibG9nIiwKKyAg
Il91cmwiOiBudWxsLAorICAiX2xpbmUiOiAxLAorICAiX2NvbHVtbiI6IDE0LAorICAiX3JlcGVh
dENvdW50IjogMSwKKyAgIl9wYXJhbWV0ZXJzIjogWworICAgIHsKKyAgICAgICJfdHlwZSI6ICJz
dHJpbmciLAorICAgICAgIl9kZXNjcmlwdGlvbiI6ICJtZXNzYWdlIiwKKyAgICAgICJfaGFzQ2hp
bGRyZW4iOiBmYWxzZSwKKyAgICAgICJfdmFsdWUiOiAibWVzc2FnZSIKKyAgICB9LAorICAgIHsK
KyAgICAgICJfdHlwZSI6ICJvYmplY3QiLAorICAgICAgIl9vYmplY3RJZCI6ICI8ZmlsdGVyZWQ+
IiwKKyAgICAgICJfZGVzY3JpcHRpb24iOiAiT2JqZWN0IiwKKyAgICAgICJfaGFzQ2hpbGRyZW4i
OiB0cnVlLAorICAgICAgIl9wcmV2aWV3IjogeworICAgICAgICAiX3R5cGUiOiAib2JqZWN0IiwK
KyAgICAgICAgIl9kZXNjcmlwdGlvbiI6ICJPYmplY3QiLAorICAgICAgICAiX2xvc3NsZXNzIjog
dHJ1ZSwKKyAgICAgICAgIl9vdmVyZmxvdyI6IGZhbHNlLAorICAgICAgICAiX3Byb3BlcnRpZXMi
OiBbCisgICAgICAgICAgeworICAgICAgICAgICAgIl9uYW1lIjogImEiLAorICAgICAgICAgICAg
Il90eXBlIjogIm51bWJlciIsCisgICAgICAgICAgICAiX3ZhbHVlIjogIjEiCisgICAgICAgICAg
fQorICAgICAgICBdLAorICAgICAgICAiX2VudHJpZXMiOiBudWxsCisgICAgICB9CisgICAgfQor
ICBdLAorICAiX3N0YWNrVHJhY2UiOiAiPGZpbHRlcmVkPiIsCisgICJfcmVxdWVzdCI6IG51bGwK
K30KKworU1RFUDogY29uc29sZS53YXJuKCdtZXNzYWdlJywgb2JqZWN0KQoreworICAiX3NvdXJj
ZSI6ICJjb25zb2xlLWFwaSIsCisgICJfbGV2ZWwiOiAid2FybmluZyIsCisgICJfbWVzc2FnZVRl
eHQiOiAibWVzc2FnZSIsCisgICJfdHlwZSI6ICJsb2ciLAorICAiX3VybCI6IG51bGwsCisgICJf
bGluZSI6IDEsCisgICJfY29sdW1uIjogMTMsCisgICJfcmVwZWF0Q291bnQiOiAxLAorICAiX3Bh
cmFtZXRlcnMiOiBbCisgICAgeworICAgICAgIl90eXBlIjogInN0cmluZyIsCisgICAgICAiX2Rl
c2NyaXB0aW9uIjogIm1lc3NhZ2UiLAorICAgICAgIl9oYXNDaGlsZHJlbiI6IGZhbHNlLAorICAg
ICAgIl92YWx1ZSI6ICJtZXNzYWdlIgorICAgIH0sCisgICAgeworICAgICAgIl90eXBlIjogIm9i
amVjdCIsCisgICAgICAiX29iamVjdElkIjogIjxmaWx0ZXJlZD4iLAorICAgICAgIl9kZXNjcmlw
dGlvbiI6ICJPYmplY3QiLAorICAgICAgIl9oYXNDaGlsZHJlbiI6IHRydWUsCisgICAgICAiX3By
ZXZpZXciOiB7CisgICAgICAgICJfdHlwZSI6ICJvYmplY3QiLAorICAgICAgICAiX2Rlc2NyaXB0
aW9uIjogIk9iamVjdCIsCisgICAgICAgICJfbG9zc2xlc3MiOiB0cnVlLAorICAgICAgICAiX292
ZXJmbG93IjogZmFsc2UsCisgICAgICAgICJfcHJvcGVydGllcyI6IFsKKyAgICAgICAgICB7Cisg
ICAgICAgICAgICAiX25hbWUiOiAiYSIsCisgICAgICAgICAgICAiX3R5cGUiOiAibnVtYmVyIiwK
KyAgICAgICAgICAgICJfdmFsdWUiOiAiMSIKKyAgICAgICAgICB9CisgICAgICAgIF0sCisgICAg
ICAgICJfZW50cmllcyI6IG51bGwKKyAgICAgIH0KKyAgICB9CisgIF0sCisgICJfc3RhY2tUcmFj
ZSI6ICI8ZmlsdGVyZWQ+IiwKKyAgIl9yZXF1ZXN0IjogbnVsbAorfQorCitTVEVQOiBjb25zb2xl
LmRlYnVnKCdtZXNzYWdlJywgb2JqZWN0KQoreworICAiX3NvdXJjZSI6ICJjb25zb2xlLWFwaSIs
CisgICJfbGV2ZWwiOiAiZGVidWciLAorICAiX21lc3NhZ2VUZXh0IjogIm1lc3NhZ2UiLAorICAi
X3R5cGUiOiAibG9nIiwKKyAgIl91cmwiOiBudWxsLAorICAiX2xpbmUiOiAxLAorICAiX2NvbHVt
biI6IDE0LAorICAiX3JlcGVhdENvdW50IjogMSwKKyAgIl9wYXJhbWV0ZXJzIjogWworICAgIHsK
KyAgICAgICJfdHlwZSI6ICJzdHJpbmciLAorICAgICAgIl9kZXNjcmlwdGlvbiI6ICJtZXNzYWdl
IiwKKyAgICAgICJfaGFzQ2hpbGRyZW4iOiBmYWxzZSwKKyAgICAgICJfdmFsdWUiOiAibWVzc2Fn
ZSIKKyAgICB9LAorICAgIHsKKyAgICAgICJfdHlwZSI6ICJvYmplY3QiLAorICAgICAgIl9vYmpl
Y3RJZCI6ICI8ZmlsdGVyZWQ+IiwKKyAgICAgICJfZGVzY3JpcHRpb24iOiAiT2JqZWN0IiwKKyAg
ICAgICJfaGFzQ2hpbGRyZW4iOiB0cnVlLAorICAgICAgIl9wcmV2aWV3IjogeworICAgICAgICAi
X3R5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgIl9kZXNjcmlwdGlvbiI6ICJPYmplY3QiLAorICAg
ICAgICAiX2xvc3NsZXNzIjogdHJ1ZSwKKyAgICAgICAgIl9vdmVyZmxvdyI6IGZhbHNlLAorICAg
ICAgICAiX3Byb3BlcnRpZXMiOiBbCisgICAgICAgICAgeworICAgICAgICAgICAgIl9uYW1lIjog
ImEiLAorICAgICAgICAgICAgIl90eXBlIjogIm51bWJlciIsCisgICAgICAgICAgICAiX3ZhbHVl
IjogIjEiCisgICAgICAgICAgfQorICAgICAgICBdLAorICAgICAgICAiX2VudHJpZXMiOiBudWxs
CisgICAgICB9CisgICAgfQorICBdLAorICAiX3N0YWNrVHJhY2UiOiAiPGZpbHRlcmVkPiIsCisg
ICJfcmVxdWVzdCI6IG51bGwKK30KKworU1RFUDogY29uc29sZS5pbmZvKCdtZXNzYWdlJywgb2Jq
ZWN0KQoreworICAiX3NvdXJjZSI6ICJjb25zb2xlLWFwaSIsCisgICJfbGV2ZWwiOiAibG9nIiwK
KyAgIl9tZXNzYWdlVGV4dCI6ICJtZXNzYWdlIiwKKyAgIl90eXBlIjogImxvZyIsCisgICJfdXJs
IjogbnVsbCwKKyAgIl9saW5lIjogMSwKKyAgIl9jb2x1bW4iOiAxMywKKyAgIl9yZXBlYXRDb3Vu
dCI6IDEsCisgICJfcGFyYW1ldGVycyI6IFsKKyAgICB7CisgICAgICAiX3R5cGUiOiAic3RyaW5n
IiwKKyAgICAgICJfZGVzY3JpcHRpb24iOiAibWVzc2FnZSIsCisgICAgICAiX2hhc0NoaWxkcmVu
IjogZmFsc2UsCisgICAgICAiX3ZhbHVlIjogIm1lc3NhZ2UiCisgICAgfSwKKyAgICB7CisgICAg
ICAiX3R5cGUiOiAib2JqZWN0IiwKKyAgICAgICJfb2JqZWN0SWQiOiAiPGZpbHRlcmVkPiIsCisg
ICAgICAiX2Rlc2NyaXB0aW9uIjogIk9iamVjdCIsCisgICAgICAiX2hhc0NoaWxkcmVuIjogdHJ1
ZSwKKyAgICAgICJfcHJldmlldyI6IHsKKyAgICAgICAgIl90eXBlIjogIm9iamVjdCIsCisgICAg
ICAgICJfZGVzY3JpcHRpb24iOiAiT2JqZWN0IiwKKyAgICAgICAgIl9sb3NzbGVzcyI6IHRydWUs
CisgICAgICAgICJfb3ZlcmZsb3ciOiBmYWxzZSwKKyAgICAgICAgIl9wcm9wZXJ0aWVzIjogWwor
ICAgICAgICAgIHsKKyAgICAgICAgICAgICJfbmFtZSI6ICJhIiwKKyAgICAgICAgICAgICJfdHlw
ZSI6ICJudW1iZXIiLAorICAgICAgICAgICAgIl92YWx1ZSI6ICIxIgorICAgICAgICAgIH0KKyAg
ICAgICAgXSwKKyAgICAgICAgIl9lbnRyaWVzIjogbnVsbAorICAgICAgfQorICAgIH0KKyAgXSwK
KyAgIl9zdGFja1RyYWNlIjogIjxmaWx0ZXJlZD4iLAorICAiX3JlcXVlc3QiOiBudWxsCit9CisK
K1NURVA6IGNvbnNvbGUuZGlyKG9iamVjdCkKK3sKKyAgIl9zb3VyY2UiOiAiY29uc29sZS1hcGki
LAorICAiX2xldmVsIjogImxvZyIsCisgICJfbWVzc2FnZVRleHQiOiAiW29iamVjdCBPYmplY3Rd
IiwKKyAgIl90eXBlIjogImRpciIsCisgICJfdXJsIjogbnVsbCwKKyAgIl9saW5lIjogMSwKKyAg
Il9jb2x1bW4iOiAxMiwKKyAgIl9yZXBlYXRDb3VudCI6IDEsCisgICJfcGFyYW1ldGVycyI6IFsK
KyAgICB7CisgICAgICAiX3R5cGUiOiAib2JqZWN0IiwKKyAgICAgICJfb2JqZWN0SWQiOiAiPGZp
bHRlcmVkPiIsCisgICAgICAiX2Rlc2NyaXB0aW9uIjogIk9iamVjdCIsCisgICAgICAiX2hhc0No
aWxkcmVuIjogdHJ1ZSwKKyAgICAgICJfcHJldmlldyI6IHsKKyAgICAgICAgIl90eXBlIjogIm9i
amVjdCIsCisgICAgICAgICJfZGVzY3JpcHRpb24iOiAiT2JqZWN0IiwKKyAgICAgICAgIl9sb3Nz
bGVzcyI6IHRydWUsCisgICAgICAgICJfb3ZlcmZsb3ciOiBmYWxzZSwKKyAgICAgICAgIl9wcm9w
ZXJ0aWVzIjogWworICAgICAgICAgIHsKKyAgICAgICAgICAgICJfbmFtZSI6ICJhIiwKKyAgICAg
ICAgICAgICJfdHlwZSI6ICJudW1iZXIiLAorICAgICAgICAgICAgIl92YWx1ZSI6ICIxIgorICAg
ICAgICAgIH0KKyAgICAgICAgXSwKKyAgICAgICAgIl9lbnRyaWVzIjogbnVsbAorICAgICAgfQor
ICAgIH0KKyAgXSwKKyAgIl9zdGFja1RyYWNlIjogIjxmaWx0ZXJlZD4iLAorICAiX3JlcXVlc3Qi
OiBudWxsCit9CisKK1NURVA6IGNvbnNvbGUuZGlyeG1sKG9iamVjdCkKK3sKKyAgIl9zb3VyY2Ui
OiAiY29uc29sZS1hcGkiLAorICAiX2xldmVsIjogImxvZyIsCisgICJfbWVzc2FnZVRleHQiOiAi
W29iamVjdCBPYmplY3RdIiwKKyAgIl90eXBlIjogImRpcnhtbCIsCisgICJfdXJsIjogbnVsbCwK
KyAgIl9saW5lIjogMSwKKyAgIl9jb2x1bW4iOiAxNSwKKyAgIl9yZXBlYXRDb3VudCI6IDEsCisg
ICJfcGFyYW1ldGVycyI6IFsKKyAgICB7CisgICAgICAiX3R5cGUiOiAib2JqZWN0IiwKKyAgICAg
ICJfb2JqZWN0SWQiOiAiPGZpbHRlcmVkPiIsCisgICAgICAiX2Rlc2NyaXB0aW9uIjogIk9iamVj
dCIsCisgICAgICAiX2hhc0NoaWxkcmVuIjogdHJ1ZSwKKyAgICAgICJfcHJldmlldyI6IHsKKyAg
ICAgICAgIl90eXBlIjogIm9iamVjdCIsCisgICAgICAgICJfZGVzY3JpcHRpb24iOiAiT2JqZWN0
IiwKKyAgICAgICAgIl9sb3NzbGVzcyI6IHRydWUsCisgICAgICAgICJfb3ZlcmZsb3ciOiBmYWxz
ZSwKKyAgICAgICAgIl9wcm9wZXJ0aWVzIjogWworICAgICAgICAgIHsKKyAgICAgICAgICAgICJf
bmFtZSI6ICJhIiwKKyAgICAgICAgICAgICJfdHlwZSI6ICJudW1iZXIiLAorICAgICAgICAgICAg
Il92YWx1ZSI6ICIxIgorICAgICAgICAgIH0KKyAgICAgICAgXSwKKyAgICAgICAgIl9lbnRyaWVz
IjogbnVsbAorICAgICAgfQorICAgIH0KKyAgXSwKKyAgIl9zdGFja1RyYWNlIjogIjxmaWx0ZXJl
ZD4iLAorICAiX3JlcXVlc3QiOiBudWxsCit9CisKK1NURVA6IGNvbnNvbGUuZ3JvdXAoJ2dyb3Vw
TmFtZScpCit7CisgICJfc291cmNlIjogImNvbnNvbGUtYXBpIiwKKyAgIl9sZXZlbCI6ICJsb2ci
LAorICAiX21lc3NhZ2VUZXh0IjogImdyb3VwTmFtZSIsCisgICJfdHlwZSI6ICJzdGFydEdyb3Vw
IiwKKyAgIl91cmwiOiBudWxsLAorICAiX2xpbmUiOiAxLAorICAiX2NvbHVtbiI6IDE0LAorICAi
X3JlcGVhdENvdW50IjogMSwKKyAgIl9wYXJhbWV0ZXJzIjogWworICAgIHsKKyAgICAgICJfdHlw
ZSI6ICJzdHJpbmciLAorICAgICAgIl9kZXNjcmlwdGlvbiI6ICJncm91cE5hbWUiLAorICAgICAg
Il9oYXNDaGlsZHJlbiI6IGZhbHNlLAorICAgICAgIl92YWx1ZSI6ICJncm91cE5hbWUiCisgICAg
fQorICBdLAorICAiX3N0YWNrVHJhY2UiOiAiPGZpbHRlcmVkPiIsCisgICJfcmVxdWVzdCI6IG51
bGwKK30KKworU1RFUDogY29uc29sZS5ncm91cEVuZCgnZ3JvdXBOYW1lJykKK3sKKyAgIl9zb3Vy
Y2UiOiAiY29uc29sZS1hcGkiLAorICAiX2xldmVsIjogImxvZyIsCisgICJfbWVzc2FnZVRleHQi
OiAiZ3JvdXBOYW1lIiwKKyAgIl90eXBlIjogImVuZEdyb3VwIiwKKyAgIl91cmwiOiBudWxsLAor
ICAiX2xpbmUiOiAwLAorICAiX2NvbHVtbiI6IDAsCisgICJfcmVwZWF0Q291bnQiOiAxLAorICAi
X3BhcmFtZXRlcnMiOiBbCisgICAgeworICAgICAgIl90eXBlIjogInN0cmluZyIsCisgICAgICAi
X2Rlc2NyaXB0aW9uIjogImdyb3VwTmFtZSIsCisgICAgICAiX2hhc0NoaWxkcmVuIjogZmFsc2Us
CisgICAgICAiX3ZhbHVlIjogImdyb3VwTmFtZSIKKyAgICB9CisgIF0sCisgICJfc3RhY2tUcmFj
ZSI6ICI8ZmlsdGVyZWQ+IiwKKyAgIl9yZXF1ZXN0IjogbnVsbAorfQorCitTVEVQOiBjb25zb2xl
Lmdyb3VwQ29sbGFwc2VkKCdjb2xsYXBzZWRHcm91cE5hbWUnKQoreworICAiX3NvdXJjZSI6ICJj
b25zb2xlLWFwaSIsCisgICJfbGV2ZWwiOiAibG9nIiwKKyAgIl9tZXNzYWdlVGV4dCI6ICJjb2xs
YXBzZWRHcm91cE5hbWUiLAorICAiX3R5cGUiOiAic3RhcnRHcm91cENvbGxhcHNlZCIsCisgICJf
dXJsIjogbnVsbCwKKyAgIl9saW5lIjogMSwKKyAgIl9jb2x1bW4iOiAyMywKKyAgIl9yZXBlYXRD
b3VudCI6IDEsCisgICJfcGFyYW1ldGVycyI6IFsKKyAgICB7CisgICAgICAiX3R5cGUiOiAic3Ry
aW5nIiwKKyAgICAgICJfZGVzY3JpcHRpb24iOiAiY29sbGFwc2VkR3JvdXBOYW1lIiwKKyAgICAg
ICJfaGFzQ2hpbGRyZW4iOiBmYWxzZSwKKyAgICAgICJfdmFsdWUiOiAiY29sbGFwc2VkR3JvdXBO
YW1lIgorICAgIH0KKyAgXSwKKyAgIl9zdGFja1RyYWNlIjogIjxmaWx0ZXJlZD4iLAorICAiX3Jl
cXVlc3QiOiBudWxsCit9CisKK1NURVA6IGNvbnNvbGUuZ3JvdXBFbmQoJ2NvbGxhcHNlZEdyb3Vw
TmFtZScpCit7CisgICJfc291cmNlIjogImNvbnNvbGUtYXBpIiwKKyAgIl9sZXZlbCI6ICJsb2ci
LAorICAiX21lc3NhZ2VUZXh0IjogImNvbGxhcHNlZEdyb3VwTmFtZSIsCisgICJfdHlwZSI6ICJl
bmRHcm91cCIsCisgICJfdXJsIjogbnVsbCwKKyAgIl9saW5lIjogMCwKKyAgIl9jb2x1bW4iOiAw
LAorICAiX3JlcGVhdENvdW50IjogMSwKKyAgIl9wYXJhbWV0ZXJzIjogWworICAgIHsKKyAgICAg
ICJfdHlwZSI6ICJzdHJpbmciLAorICAgICAgIl9kZXNjcmlwdGlvbiI6ICJjb2xsYXBzZWRHcm91
cE5hbWUiLAorICAgICAgIl9oYXNDaGlsZHJlbiI6IGZhbHNlLAorICAgICAgIl92YWx1ZSI6ICJj
b2xsYXBzZWRHcm91cE5hbWUiCisgICAgfQorICBdLAorICAiX3N0YWNrVHJhY2UiOiAiPGZpbHRl
cmVkPiIsCisgICJfcmVxdWVzdCI6IG51bGwKK30KKworU1RFUDogY29uc29sZS5jb3VudCgpCit7
CisgICJfc291cmNlIjogImNvbnNvbGUtYXBpIiwKKyAgIl9sZXZlbCI6ICJkZWJ1ZyIsCisgICJf
bWVzc2FnZVRleHQiOiAiOiAxIiwKKyAgIl90eXBlIjogImxvZyIsCisgICJfdXJsIjogbnVsbCwK
KyAgIl9saW5lIjogMSwKKyAgIl9jb2x1bW4iOiAxNCwKKyAgIl9yZXBlYXRDb3VudCI6IDEsCisg
ICJfc3RhY2tUcmFjZSI6ICI8ZmlsdGVyZWQ+IiwKKyAgIl9yZXF1ZXN0IjogbnVsbAorfQorCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY29uc29sZS9jb25zb2xlLWFwaS5odG1s
IGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2NvbnNvbGUvY29uc29sZS1hcGkuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2NkNTk3Ci0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL2NvbnNvbGUvY29uc29sZS1hcGkuaHRtbApAQCAtMCwwICsx
LDYxIEBACis8IWRvY3R5cGUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2
PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCI+Cis8c2Ny
aXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi8uLi9odHRwL3Rlc3RzL2luc3BlY3Rv
ci9pbnNwZWN0b3ItdGVzdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgordmFyIHN0cmluZyA9ICJz
dHJpbmciOwordmFyIG9iamVjdCA9IHthOjF9OworCitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICB2
YXIgY3VycmVudFN0ZXBJbmRleCA9IDA7CisgICAgdmFyIHN0ZXBzID0gWworICAgICAgICAiY29u
c29sZS5sb2coJ2NvbnNvbGUubG9nJykiLAorICAgICAgICAiY29uc29sZS53YXJuKCdjb25zb2xl
Lndhcm4nKSIsCisgICAgICAgICJjb25zb2xlLmVycm9yKCdjb25zb2xlLmVycm9yJykiLAorICAg
ICAgICAiY29uc29sZS5kZWJ1ZygnY29uc29sZS5kZWJ1ZycpIiwKKyAgICAgICAgImNvbnNvbGUu
aW5mbygnY29uc29sZS5pbmZvJykiLAorICAgICAgICAiY29uc29sZS5hc3NlcnQoZmFsc2UsICdh
c3NlcnRpb24gbWVzc2FnZScpIiwKKyAgICAgICAgImNvbnNvbGUudHJhY2UoKSIsCisgICAgICAg
ICJjb25zb2xlLmxvZygnc3RyaW5nIG1lc3NhZ2UnLCBzdHJpbmcpIiwKKyAgICAgICAgImNvbnNv
bGUubG9nKCdtZXNzYWdlJywgb2JqZWN0LCBvYmplY3QpIiwKKyAgICAgICAgImNvbnNvbGUuZXJy
b3IoJ21lc3NhZ2UnLCBvYmplY3QpIiwKKyAgICAgICAgImNvbnNvbGUud2FybignbWVzc2FnZScs
IG9iamVjdCkiLAorICAgICAgICAiY29uc29sZS5kZWJ1ZygnbWVzc2FnZScsIG9iamVjdCkiLAor
ICAgICAgICAiY29uc29sZS5pbmZvKCdtZXNzYWdlJywgb2JqZWN0KSIsCisgICAgICAgICJjb25z
b2xlLmRpcihvYmplY3QpIiwKKyAgICAgICAgImNvbnNvbGUuZGlyeG1sKG9iamVjdCkiLAorICAg
ICAgICAiY29uc29sZS5ncm91cCgnZ3JvdXBOYW1lJykiLAorICAgICAgICAiY29uc29sZS5ncm91
cEVuZCgnZ3JvdXBOYW1lJykiLAorICAgICAgICAiY29uc29sZS5ncm91cENvbGxhcHNlZCgnY29s
bGFwc2VkR3JvdXBOYW1lJykiLAorICAgICAgICAiY29uc29sZS5ncm91cEVuZCgnY29sbGFwc2Vk
R3JvdXBOYW1lJykiLAorICAgICAgICAiY29uc29sZS5jb3VudCgpIiwKKyAgICBdOworCisgICAg
ZnVuY3Rpb24gcmVtb3RlT2JqZWN0SlNPTkZpbHRlcihrZXksIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgaWYgKGtleSA9PT0gIl9vYmplY3RJZCIgfHwga2V5ID09PSAiX3N0YWNrVHJhY2UiKQorICAg
ICAgICAgICAgcmV0dXJuICI8ZmlsdGVyZWQ+IjsKKworICAgICAgICByZXR1cm4gdmFsdWU7Cisg
ICAgfQorCisgICAgV2ViSW5zcGVjdG9yLmxvZ01hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJ
bnNwZWN0b3IuTG9nTWFuYWdlci5FdmVudC5NZXNzYWdlQWRkZWQsIGZ1bmN0aW9uKGV2ZW50KSB7
CisgICAgICAgIHZhciBtZXNzYWdlID0gZXZlbnQuZGF0YS5tZXNzYWdlOworICAgICAgICBJbnNw
ZWN0b3JUZXN0LmFzc2VydChtZXNzYWdlIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLkNvbnNvbGVN
ZXNzYWdlKTsKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIlxuU1RFUDogIiArIHN0ZXBzW2N1
cnJlbnRTdGVwSW5kZXhdKTsKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coSlNPTi5zdHJpbmdp
ZnkobWVzc2FnZSwgcmVtb3RlT2JqZWN0SlNPTkZpbHRlciwgIiAgIikpOworCisgICAgICAgIGlm
ICgrK2N1cnJlbnRTdGVwSW5kZXggPj0gc3RlcHMubGVuZ3RoKQorICAgICAgICAgICAgSW5zcGVj
dG9yVGVzdC5jb21wbGV0ZVRlc3QoKTsKKyAgICB9KTsKKworICAgIGZvciAodmFyIHN0ZXAgb2Yg
c3RlcHMpCisgICAgICAgIFdlYkluc3BlY3Rvci5ydW50aW1lTWFuYWdlci5ldmFsdWF0ZUluSW5z
cGVjdGVkV2luZG93KHN0ZXAsICJ0ZXN0IiwgZmFsc2UsIHRydWUsIGZhbHNlLCB0cnVlLCBmYWxz
ZSwgZnVuY3Rpb24oKXt9KTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJy
dW5UZXN0KCk7Ij4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4
IGYxYWM1NmQuLjY2NGE1MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2
NSBAQAorMjAxNS0wNC0wOCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgor
CisgICAgICAgIFdlYiBJbnNwZWN0b3I6IFNwbGl0IENvbnNvbGVNZXNzYWdlSW1wbCBpbnRvIHRo
ZSBWaWV3IGFuZCB0aGUgTW9kZWwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE0MjU5OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogVXNlckludGVyZmFjZS9Nb2RlbHMvQ29uc29sZU1lc3NhZ2UuanM6IEFk
ZGVkLgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5wcm90b3R5cGUuZ2V0IHNvdXJjZSk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UucHJvdG90eXBlLmdldCBsZXZlbCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UucHJvdG90eXBlLmdldCBtZXNzYWdlVGV4
dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UucHJvdG90eXBlLmdldCB0
eXBlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5wcm90b3R5cGUuZ2V0
IHVybCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UucHJvdG90eXBlLmdl
dCBsaW5lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5wcm90b3R5cGUu
Z2V0IGNvbHVtbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UucHJvdG90
eXBlLmdldCByZXBlYXRDb3VudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3Nh
Z2UucHJvdG90eXBlLmdldCBwYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Db25z
b2xlTWVzc2FnZS5wcm90b3R5cGUuZ2V0IHN0YWNrVHJhY2UpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkNvbnNvbGVNZXNzYWdlLnByb3RvdHlwZS5nZXQgcmVxdWVzdCk6CisgICAgICAgIE5ldyBy
ZWFkb25seSBtb2RlbCBvYmplY3QgZm9yIGNvbnNvbGUgbWVzc2FnZXMuCisKKyAgICAgICAgKiBV
c2VySW50ZXJmYWNlL01haW4uaHRtbDoKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Rlc3QuaHRt
bDoKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0Jhc2UvVGVzdC5qczoKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5sb2FkZWQpOgorICAgICAgICBMb2FkIHRoZSBuZXcgZmlsZXMgaW4gdGhlIG1haW4g
LyB0ZXN0IHBhZ2UuCisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdzL0xlZ2FjeUNvbnNv
bGVNZXNzYWdlLmpzOiBSZW1vdmVkLgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3MvTGVn
YWN5Q29uc29sZU1lc3NhZ2VJbXBsLmpzOiBSZW1vdmVkLgorICAgICAgICBSZW1vdmUgTGVnYWN5
IHZlcnNpb25zLgorCisgICAgICAgICogVXNlckludGVyZmFjZS9Db250cm9sbGVycy9KYXZhU2Ny
aXB0UnVudGltZUNvbXBsZXRpb25Qcm92aWRlci5qczoKKyAgICAgICAgKiBVc2VySW50ZXJmYWNl
L0NvbnRyb2xsZXJzL0phdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlci5qczoKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkphdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlci5wcm90b3R5cGUuc3RhcnROZXdTZXNz
aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIu
cHJvdG90eXBlLmFwcGVuZEltbWVkaWF0ZUV4ZWN1dGlvbldpdGhSZXN1bHQuc2F2ZVJlc3VsdENh
bGxiYWNrKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xs
ZXIucHJvdG90eXBlLmFwcGVuZEltbWVkaWF0ZUV4ZWN1dGlvbldpdGhSZXN1bHQpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlci5wcm90b3R5cGUuYXBw
ZW5kQ29uc29sZU1lc3NhZ2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRMb2dW
aWV3Q29udHJvbGxlci5wcm90b3R5cGUudXBkYXRlUHJldmlvdXNNZXNzYWdlUmVwZWF0Q291bnQp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlci5wcm90
b3R5cGUuY29uc29sZVByb21wdFRleHRDb21taXR0ZWQucHJpbnRSZXN1bHQpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkphdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlci5wcm90b3R5cGUuY29uc29s
ZVByb21wdFRleHRDb21taXR0ZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRM
b2dWaWV3Q29udHJvbGxlci5wcm90b3R5cGUuX2FwcGVuZENvbnNvbGVNZXNzYWdlVmlldyk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLnByb3RvdHlw
ZS5fYXBwZW5kQ29uc29sZU1lc3NhZ2UpOiBEZWxldGVkLgorICAgICAgICBVcGRhdGUgTG9nVmll
d0NvbnRyb2xsZXIgdG8gY3JlYXRlIENvbnNvbGVNZXNzYWdlVmlld3MgZnJvbSBDb25zb2xlTWVz
c2FnZXMgd2hlbiBhcHBsaWNhYmxlLgorICAgICAgICBBbHNvIGNsYXJpZnkgd2hlbiB3ZSBoYXZl
IGEgdmlldyB2ZXJzdXMgbW9kZWwgb2JqZWN0LgorCisgICAgICAgICogVXNlckludGVyZmFjZS9Q
cm90b2NvbC9Db25zb2xlT2JzZXJ2ZXIuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29s
ZU9ic2VydmVyLnByb3RvdHlwZS5tZXNzYWdlQWRkZWQpOgorICAgICAgICAqIFVzZXJJbnRlcmZh
Y2UvQ29udHJvbGxlcnMvTG9nTWFuYWdlci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dN
YW5hZ2VyLnByb3RvdHlwZS5tZXNzYWdlV2FzQWRkZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkxvZ01hbmFnZXIucHJvdG90eXBlLm1lc3NhZ2VzQ2xlYXJlZCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuTG9nTWFuYWdlci5wcm90b3R5cGUuX21haW5SZXNvdXJjZURpZENoYW5nZSk6CisgICAg
ICAgIENyZWF0ZSBtb2RlbCBvYmplY3RzIGFuZCBpc3N1ZSBldmVudHMgZm9yIHRoZSBtb2RlbCBv
YmplY3RzLgorCisgICAgICAgICogVXNlckludGVyZmFjZS9Nb2RlbHMvRGVmYXVsdERhc2hib2Fy
ZC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EZWZhdWx0RGFzaGJvYXJkLnByb3RvdHlwZS5f
Y29uc29sZU1lc3NhZ2VBZGRlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRGVmYXVsdERhc2hi
b2FyZC5wcm90b3R5cGUuX2luY3JlbWVudENvbnNvbGVNZXNzYWdlVHlwZSk6CisgICAgICAgIFVw
ZGF0ZSBub3cgdGhhdCB0aGUgZXZlbnQgZ2l2ZXMgdXMgYSBtb2RlbCBvYmplY3QuCisKKyAgICAg
ICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdzL0NvbnNvbGVNZXNzYWdlVmlldy5qczogQWRkZWQuCisg
ICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VWaWV3KToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5Db25zb2xlTWVzc2FnZVZpZXcucHJvdG90eXBlLmdldCBlbGVtZW50KToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZVZpZXcucHJvdG90eXBlLmdldCBtZXNzYWdl
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZVZpZXcucHJvdG90eXBlLmdl
dCByZXBlYXRDb3VudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VWaWV3
LnByb3RvdHlwZS5zZXQgcmVwZWF0Q291bnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNv
bGVNZXNzYWdlVmlldy5wcm90b3R5cGUudG9DbGlwYm9hcmRTdHJpbmcpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlVmlldy5wcm90b3R5cGUuX2FwcGVuZE1lc3NhZ2VUZXh0
QW5kQXJndW1lbnRzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZVZpZXcu
cHJvdG90eXBlLl9hcHBlbmRTYXZlZFJlc3VsdEluZGV4KToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5Db25zb2xlTWVzc2FnZVZpZXcucHJvdG90eXBlLl9hcHBlbmRMb2NhdGlvbkxpbmspOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlVmlldy5wcm90b3R5cGUuX2FwcGVuZFBh
cmFtZXRlcnMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlVmlldy5wcm90
b3R5cGUuX2FwcGVuZFN0YWNrVHJhY2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVN
ZXNzYWdlVmlldy5wcm90b3R5cGUuX2FwcGVuZEZvcm1hdHRlZEFyZ3VtZW50cyk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VWaWV3LnByb3RvdHlwZS5fZm9ybWF0UGFyYW1l
dGVyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZVZpZXcucHJvdG90eXBl
Ll9mb3JtYXRQYXJhbWV0ZXJBc1ZhbHVlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xl
TWVzc2FnZVZpZXcucHJvdG90eXBlLl9mb3JtYXRQYXJhbWV0ZXJBc1N0cmluZyk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VWaWV3LnByb3RvdHlwZS5fZm9ybWF0UGFyYW1l
dGVyQXNOb2RlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZVZpZXcucHJv
dG90eXBlLl9mb3JtYXRQYXJhbWV0ZXJBc09iamVjdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
Q29uc29sZU1lc3NhZ2VWaWV3LnByb3RvdHlwZS5fZm9ybWF0UGFyYW1ldGVyQXNBcnJheSk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VWaWV3LnByb3RvdHlwZS5fcm9vdFBy
b3BlcnR5UGF0aEZvck9iamVjdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3Nh
Z2VWaWV3LnByb3RvdHlwZS5fZm9ybWF0V2l0aFN1YnN0aXR1dGlvblN0cmluZy5wYXJhbWV0ZXJG
b3JtYXR0ZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlVmlldy5wcm90
b3R5cGUuX2Zvcm1hdFdpdGhTdWJzdGl0dXRpb25TdHJpbmcuc3RyaW5nRm9ybWF0dGVyKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZVZpZXcucHJvdG90eXBlLl9mb3JtYXRX
aXRoU3Vic3RpdHV0aW9uU3RyaW5nLmZsb2F0Rm9ybWF0dGVyKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5Db25zb2xlTWVzc2FnZVZpZXcucHJvdG90eXBlLl9mb3JtYXRXaXRoU3Vic3RpdHV0aW9u
U3RyaW5nLmludGVnZXJGb3JtYXR0ZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVN
ZXNzYWdlVmlldy5wcm90b3R5cGUuX2Zvcm1hdFdpdGhTdWJzdGl0dXRpb25TdHJpbmcuc3R5bGVG
b3JtYXR0ZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlVmlldy5wcm90
b3R5cGUuX2Zvcm1hdFdpdGhTdWJzdGl0dXRpb25TdHJpbmcuaXNXaGl0ZWxpc3RlZFByb3BlcnR5
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZVZpZXcucHJvdG90eXBlLl9m
b3JtYXRXaXRoU3Vic3RpdHV0aW9uU3RyaW5nLmFwcGVuZCk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuQ29uc29sZU1lc3NhZ2VWaWV3LnByb3RvdHlwZS5fZm9ybWF0V2l0aFN1YnN0aXR1dGlvblN0
cmluZyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VWaWV3LnByb3RvdHlw
ZS5fc2hvdWxkU2hvd1N0YWNrVHJhY2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVN
ZXNzYWdlVmlldy5wcm90b3R5cGUuX3Nob3VsZEhpZGVVUkwpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkNvbnNvbGVNZXNzYWdlVmlldy5wcm90b3R5cGUuX2ZpcnN0Tm9uTmF0aXZlQ2FsbEZyYW1l
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZVZpZXcucHJvdG90eXBlLl9s
aW5raWZ5TG9jYXRpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlVmll
dy5wcm90b3R5cGUuX2xpbmtpZnlDYWxsRnJhbWUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNv
bnNvbGVNZXNzYWdlVmlldy5wcm90b3R5cGUuX3VzZXJQcm92aWRlZENvbHVtbk5hbWVzKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZVZpZXcucHJvdG90eXBlLl9mb3JtYXRQ
YXJhbWV0ZXJBc1RhYmxlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZVZp
ZXcucHJvdG90eXBlLl9sZXZlbFN0cmluZyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29s
ZU1lc3NhZ2VWaWV3LnByb3RvdHlwZS5fZW5mb3JjZXNDbGlwYm9hcmRQcmVmaXhTdHJpbmcpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlVmlldy5wcm90b3R5cGUuX2NsaXBi
b2FyZFByZWZpeFN0cmluZyk6CisgICAgICAgIE5ldyBWaWV3IGNsYXNzIGZvciBhIENvbnNvbGVN
ZXNzYWdlLiBUaGlzIGlzIGEgbmVhciBkaXJlY3QgcG9ydCBvZiB0aGUgb2xkIGNvZGUKKyAgICAg
ICAgdG8gYSB2aWV3IGNsYXNzIHRoYXQgaGFzIGEgcm9vdCBlbGVtZW50LgorCisgICAgICAgICog
VXNlckludGVyZmFjZS9Nb2RlbHMvQ29uc29sZUNvbW1hbmRSZXN1bHRNZXNzYWdlLmpzOiBSZW5h
bWVkIGZyb20gU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvQ29uc29s
ZUNvbW1hbmRSZXN1bHQuanMuCisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZUNvbW1hbmRS
ZXN1bHRNZXNzYWdlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlQ29tbWFuZFJlc3Vs
dE1lc3NhZ2UuY2xlYXJNYXhpbXVtU2F2ZWRSZXN1bHRJbmRleCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuQ29uc29sZUNvbW1hbmRSZXN1bHRNZXNzYWdlLnByb3RvdHlwZS5nZXQgc2F2ZWRSZXN1
bHRJbmRleCk6CisgICAgICAgIFJlbmFtZSwgYXMgdGhpcyBpcyBhIENvbnNvbGVNZXNzYWdlIHN1
YmNsYXNzIHdpdGggYSBzcGVjaWZpYyB0eXBlIGZvciBjb25zb2xlIGV2YWx1YXRpb24gcmVzdWx0
cy4KKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3MvQ29uc29sZUNvbW1hbmRWaWV3Lmpz
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3Mv
Q29uc29sZUNvbW1hbmQuanMuCisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZUNvbW1hbmRW
aWV3KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlQ29tbWFuZFZpZXcucHJvdG90eXBl
LmdldCBlbGVtZW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlQ29tbWFuZFZpZXcu
cHJvdG90eXBlLmdldCBjb21tYW5kVGV4dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29s
ZUNvbW1hbmRWaWV3LnByb3RvdHlwZS5nZXQgbWVzc2FnZSk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuQ29uc29sZUNvbW1hbmRWaWV3LnByb3RvdHlwZS50b0NsaXBib2FyZFN0cmluZyk6CisgICAg
ICAgICogVXNlckludGVyZmFjZS9WaWV3cy9Db25zb2xlR3JvdXAuanM6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuQ29uc29sZUdyb3VwKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Db25zb2xlR3Jv
dXAucHJvdG90eXBlLmdldCBwYXJlbnRHcm91cCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29u
c29sZUdyb3VwLnByb3RvdHlwZS5yZW5kZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNv
bGVHcm91cC5wcm90b3R5cGUuYWRkTWVzc2FnZVZpZXcpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkNvbnNvbGVHcm91cC5wcm90b3R5cGUuYXBwZW5kKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5D
b25zb2xlR3JvdXAucHJvdG90eXBlLl90aXRsZU1vdXNlRG93bik6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuQ29uc29sZUdyb3VwLnByb3RvdHlwZS5hZGRNZXNzYWdlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5Db25zb2xlR3JvdXAucHJvdG90eXBlLl90aXRsZUNsaWNrZWQpOiBE
ZWxldGVkLgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3MvQ29uc29sZVNlc3Npb24uanM6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29uc29sZVNlc3Npb24pOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkNvbnNvbGVTZXNzaW9uLnByb3RvdHlwZS5hZGRNZXNzYWdlVmlldyk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuQ29uc29sZVNlc3Npb24ucHJvdG90eXBlLmFwcGVuZCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuQ29uc29sZVNlc3Npb24ucHJvdG90eXBlLmFkZE1lc3NhZ2UpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvbnNvbGVTZXNzaW9uLnByb3RvdHlwZS5oYXNN
ZXNzYWdlcyk6IERlbGV0ZWQuCisgICAgICAgIENvbnZlcnQgdG8gY2xhc3NlcywgYW5kIGNsYXJp
ZnkgdGhlc2UgZGVhbCB3aXRoIFZpZXcgb2JqZWN0cy4KKworICAgICAgICAqIFVzZXJJbnRlcmZh
Y2UvVmlld3MvTG9nQ29udGVudFZpZXcuY3NzOgorICAgICAgICAoLmNvbnNvbGUtbWVzc2FnZSAu
cmVwZWF0LWNvdW50KToKKyAgICAgICAgKC5jb25zb2xlLW1lc3NhZ2UgLmJ1YmJsZSk6IERlbGV0
ZWQuCisgICAgICAgIEJldHRlciBjbGFzcyBuYW1lIGZvciB0aGUgcmVwZWF0IGNvdW50IGVsZW1l
bnQuCisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdzL0xvZ0NvbnRlbnRWaWV3LmpzOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZS5kaWRBcHBlbmRD
b25zb2xlTWVzc2FnZVZpZXcpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3
LnByb3RvdHlwZS5fZm9ybWF0TWVzc2FnZXNBc0RhdGEpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fbWVzc2FnZUFkZGVkKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX3VwZGF0ZU1lc3NhZ2VzU2VsZWN0aW9u
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX3NlbGVj
dEFsbE1lc3NhZ2VzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90
b3R5cGUuX2FsbE1lc3NhZ2VFbGVtZW50cyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29u
dGVudFZpZXcucHJvdG90eXBlLl91bmZpbHRlcmVkTWVzc2FnZUVsZW1lbnRzKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX3Zpc2libGVNZXNzYWdlRWxl
bWVudHMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZS5f
c2NvcGVCYXJTZWxlY3Rpb25EaWRDaGFuZ2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0Nv
bnRlbnRWaWV3LnByb3RvdHlwZS5fZmlsdGVyTWVzc2FnZUVsZW1lbnRzKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX3VwQXJyb3dXYXNQcmVzc2VkKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX2Rvd25BcnJv
d1dhc1ByZXNzZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3Rv
dHlwZS5fcHJldmlvdXNNZXNzYWdlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50
Vmlldy5wcm90b3R5cGUuX25leHRNZXNzYWdlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Mb2dD
b250ZW50Vmlldy5wcm90b3R5cGUuX3BlcmZvcm1TZWFyY2gpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZS5faGlnaGxpZ2h0UmFuZ2VzKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX3JlYXBwZW5kUHJvdmlzaW9u
YWxNZXNzYWdlcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90
eXBlLmRpZEFwcGVuZENvbnNvbGVNZXNzYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX2FsbE1lc3NhZ2VzKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUuX3VuZmlsdGVyZWRN
ZXNzYWdlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcu
cHJvdG90eXBlLl92aXNpYmxlTWVzc2FnZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZS5fZmlsdGVyTWVzc2FnZXMpOiBEZWxldGVkLgor
ICAgICAgICBSZW5hbWUgbG90cyBvZiB0aGluZ3MgdG8gbWFrZSBpdCBjbGVhciB3aGVuIHdlIGFy
ZSBkZWFsaW5nIHdpdGgKKyAgICAgICAgZWxlbWVudHMsIG1vZGVsIG9iamVjdHMsIG9yIHZpZXcg
b2JqZWN0cy4gVGhpcyBjbGFzcyBpcyBzdGlsbCBoZWF2aWx5CisgICAgICAgIGRlYWxpbmcgd2l0
aCBlbGVtZW50cywgYW5kIG5lZWRzIHRvIGJlIGNsZWFuZWQgdXAgbGF0ZXIuCisKIDIwMTUtMDQt
MDcgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIg
SW5zcGVjdG9yOiBFUzY6IFNob3cgU3ltYm9sIHByb3BlcnRpZXMgb24gT2JqZWN0cwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9UZXN0LmpzIGIv
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9UZXN0LmpzCmluZGV4IDI3
MzIwN2UuLjRmNWNkYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL0Jhc2UvVGVzdC5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9CYXNlL1Rlc3QuanMKQEAgLTM3LDYgKzM3LDcgQEAgV2ViSW5zcGVjdG9yLmxvYWRlZCA9
IGZ1bmN0aW9uKCkKICAgICAvLyBUaGUgaW5pdGlhbGl6YXRpb24gb3JkZXIgc2hvdWxkIG1hdGNo
IHRoZSBzYW1lIGluIE1haW4uanMuCiAgICAgSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rlckluc3Bl
Y3RvckRpc3BhdGNoZXIobmV3IFdlYkluc3BlY3Rvci5JbnNwZWN0b3JPYnNlcnZlcik7CiAgICAg
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlclBhZ2VEaXNwYXRjaGVyKG5ldyBXZWJJbnNwZWN0b3Iu
UGFnZU9ic2VydmVyKTsKKyAgICBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29uc29sZURpc3Bh
dGNoZXIobmV3IFdlYkluc3BlY3Rvci5Db25zb2xlT2JzZXJ2ZXIpOwogICAgIEluc3BlY3RvckJh
Y2tlbmQucmVnaXN0ZXJET01EaXNwYXRjaGVyKG5ldyBXZWJJbnNwZWN0b3IuRE9NT2JzZXJ2ZXIp
OwogICAgIEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJOZXR3b3JrRGlzcGF0Y2hlcihuZXcgV2Vi
SW5zcGVjdG9yLk5ldHdvcmtPYnNlcnZlcik7CiAgICAgSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rl
ckRlYnVnZ2VyRGlzcGF0Y2hlcihuZXcgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyT2JzZXJ2ZXIpOwpA
QCAtNTAsNiArNTEsOCBAQCBXZWJJbnNwZWN0b3IubG9hZGVkID0gZnVuY3Rpb24oKQogICAgIHRo
aXMuZnJhbWVSZXNvdXJjZU1hbmFnZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkZyYW1lUmVzb3VyY2VN
YW5hZ2VyOwogICAgIHRoaXMuZG9tVHJlZU1hbmFnZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkRPTVRy
ZWVNYW5hZ2VyOwogICAgIHRoaXMuY3NzU3R5bGVNYW5hZ2VyID0gbmV3IFdlYkluc3BlY3Rvci5D
U1NTdHlsZU1hbmFnZXI7CisgICAgdGhpcy5sb2dNYW5hZ2VyID0gbmV3IFdlYkluc3BlY3Rvci5M
b2dNYW5hZ2VyOworICAgIHRoaXMuaXNzdWVNYW5hZ2VyID0gbmV3IFdlYkluc3BlY3Rvci5Jc3N1
ZU1hbmFnZXI7CiAgICAgdGhpcy5ydW50aW1lTWFuYWdlciA9IG5ldyBXZWJJbnNwZWN0b3IuUnVu
dGltZU1hbmFnZXI7CiAgICAgdGhpcy50aW1lbGluZU1hbmFnZXIgPSBuZXcgV2ViSW5zcGVjdG9y
LlRpbWVsaW5lTWFuYWdlcjsKICAgICB0aGlzLmRlYnVnZ2VyTWFuYWdlciA9IG5ldyBXZWJJbnNw
ZWN0b3IuRGVidWdnZXJNYW5hZ2VyOwpAQCAtNjMsNiArNjYsNyBAQCBXZWJJbnNwZWN0b3IubG9h
ZGVkID0gZnVuY3Rpb24oKQogCiAgICAgLy8gRW5hYmxlIGFnZW50cy4KICAgICBJbnNwZWN0b3JB
Z2VudC5lbmFibGUoKTsKKyAgICBDb25zb2xlQWdlbnQuZW5hYmxlKCk7CiAKICAgICAvLyBQZXJm
b3JtIG9uZS10aW1lIHRhc2tzLgogICAgIFdlYkluc3BlY3Rvci5DU1NDb21wbGV0aW9ucy5yZXF1
ZXN0Q1NTTmFtZUNvbXBsZXRpb25zKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIu
anMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9KYXZh
U2NyaXB0TG9nVmlld0NvbnRyb2xsZXIuanMKaW5kZXggZTViNDA2ZS4uNDRlY2NiNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvSmF2
YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0phdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlci5qcwpA
QCAtNDQsNyArNDQsNyBAQCBXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVy
ID0gY2xhc3MgSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyIGV4dAogICAgICAgICB0aGlzLmRl
bGVnYXRlID0gZGVsZWdhdGU7CiAKICAgICAgICAgdGhpcy5fY2xlYXJlZCA9IHRydWU7Ci0gICAg
ICAgIHRoaXMuX3ByZXZpb3VzTWVzc2FnZSA9IG51bGw7CisgICAgICAgIHRoaXMuX3ByZXZpb3Vz
TWVzc2FnZVZpZXcgPSBudWxsOwogICAgICAgICB0aGlzLl9yZXBlYXRDb3VudFdhc0ludGVycnVw
dGVkID0gZmFsc2U7CiAKICAgICAgICAgdGhpcy5fc2Vzc2lvbnMgPSBbXTsKQEAgLTEwNiw5ICsx
MDYsOSBAQCBXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyID0gY2xhc3Mg
SmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyIGV4dAogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAKLSAgICAgICAgdmFyIGNvbnNvbGVTZXNzaW9uID0gbmV3IFdlYkluc3BlY3Rvci5D
b25zb2xlU2Vzc2lvbigpOworICAgICAgICB2YXIgY29uc29sZVNlc3Npb24gPSBuZXcgV2ViSW5z
cGVjdG9yLkNvbnNvbGVTZXNzaW9uOwogCi0gICAgICAgIHRoaXMuX3ByZXZpb3VzTWVzc2FnZSA9
IG51bGw7CisgICAgICAgIHRoaXMuX3ByZXZpb3VzTWVzc2FnZVZpZXcgPSBudWxsOwogICAgICAg
ICB0aGlzLl9yZXBlYXRDb3VudFdhc0ludGVycnVwdGVkID0gZmFsc2U7CiAKICAgICAgICAgdGhp
cy5fc2Vzc2lvbnMucHVzaChjb25zb2xlU2Vzc2lvbik7CkBAIC0xMjQsMTMgKzEyNCwxNCBAQCBX
ZWJJbnNwZWN0b3IuSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyID0gY2xhc3MgSmF2YVNjcmlw
dExvZ1ZpZXdDb250cm9sbGVyIGV4dAogICAgIHsKICAgICAgICAgY29uc29sZS5hc3NlcnQocmVz
dWx0IGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdCk7CiAKLSAgICAgICAgdmFy
IGNvbW1hbmRNZXNzYWdlID0gbmV3IFdlYkluc3BlY3Rvci5Db25zb2xlQ29tbWFuZCh0ZXh0KTsK
LSAgICAgICAgdGhpcy5fYXBwZW5kQ29uc29sZU1lc3NhZ2UoY29tbWFuZE1lc3NhZ2UsIHRydWUp
OworICAgICAgICB2YXIgY29tbWFuZE1lc3NhZ2VWaWV3ID0gbmV3IFdlYkluc3BlY3Rvci5Db25z
b2xlQ29tbWFuZFZpZXcodGV4dCk7CisgICAgICAgIHRoaXMuX2FwcGVuZENvbnNvbGVNZXNzYWdl
Vmlldyhjb21tYW5kTWVzc2FnZVZpZXcsIHRydWUpOwogCiAgICAgICAgIGZ1bmN0aW9uIHNhdmVS
ZXN1bHRDYWxsYmFjayhzYXZlZFJlc3VsdEluZGV4KQogICAgICAgICB7Ci0gICAgICAgICAgICB2
YXIgY29tbWFuZFJlc3VsdE1lc3NhZ2UgPSBuZXcgV2ViSW5zcGVjdG9yLkNvbnNvbGVDb21tYW5k
UmVzdWx0KHJlc3VsdCwgZmFsc2UsIGNvbW1hbmRNZXNzYWdlLCBzYXZlZFJlc3VsdEluZGV4KTsK
LSAgICAgICAgICAgIHRoaXMuX2FwcGVuZENvbnNvbGVNZXNzYWdlKGNvbW1hbmRSZXN1bHRNZXNz
YWdlLCB0cnVlKTsKKyAgICAgICAgICAgIHZhciBjb21tYW5kUmVzdWx0TWVzc2FnZSA9IG5ldyBX
ZWJJbnNwZWN0b3IuQ29uc29sZUNvbW1hbmRSZXN1bHRNZXNzYWdlKHJlc3VsdCwgZmFsc2UsIHNh
dmVkUmVzdWx0SW5kZXgpOworICAgICAgICAgICAgdmFyIGNvbW1hbmRSZXN1bHRNZXNzYWdlVmll
dyA9IG5ldyBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VWaWV3KGNvbW1hbmRSZXN1bHRNZXNz
YWdlKTsKKyAgICAgICAgICAgIHRoaXMuX2FwcGVuZENvbnNvbGVNZXNzYWdlVmlldyhjb21tYW5k
UmVzdWx0TWVzc2FnZVZpZXcsIHRydWUpOwogICAgICAgICB9CiAKICAgICAgICAgV2ViSW5zcGVj
dG9yLnJ1bnRpbWVNYW5hZ2VyLnNhdmVSZXN1bHQocmVzdWx0LCBzYXZlUmVzdWx0Q2FsbGJhY2su
YmluZCh0aGlzKSk7CkBAIC0xMzgsMzYgKzEzOSwzMCBAQCBXZWJJbnNwZWN0b3IuSmF2YVNjcmlw
dExvZ1ZpZXdDb250cm9sbGVyID0gY2xhc3MgSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyIGV4
dAogCiAgICAgYXBwZW5kQ29uc29sZU1lc3NhZ2UoY29uc29sZU1lc3NhZ2UpCiAgICAgewotICAg
ICAgICAvLyBDbG9uZSB0aGUgbWVzc2FnZSBzaW5jZSB0aGVyZSBtaWdodCBiZSBtdWx0aXBsZSBj
bGllbnRzIHVzaW5nIHRoZSBtZXNzYWdlLAotICAgICAgICAvLyBhbmQgc2luY2UgdGhlIG1lc3Nh
Z2UgaGFzIGEgRE9NIGVsZW1lbnQgaXQgY2FuJ3QgYmUgdHdvIHBsYWNlcyBhdCBvbmNlLgotICAg
ICAgICB2YXIgbWVzc2FnZUNsb25lID0gY29uc29sZU1lc3NhZ2UuY2xvbmUoKTsKLQotICAgICAg
ICB0aGlzLl9hcHBlbmRDb25zb2xlTWVzc2FnZShtZXNzYWdlQ2xvbmUpOwotCi0gICAgICAgIHJl
dHVybiBtZXNzYWdlQ2xvbmU7CisgICAgICAgIHZhciBjb25zb2xlTWVzc2FnZVZpZXcgPSBuZXcg
V2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlVmlldyhjb25zb2xlTWVzc2FnZSk7CisgICAgICAg
IHRoaXMuX2FwcGVuZENvbnNvbGVNZXNzYWdlVmlldyhjb25zb2xlTWVzc2FnZVZpZXcpOworICAg
ICAgICByZXR1cm4gY29uc29sZU1lc3NhZ2VWaWV3OwogICAgIH0KIAogICAgIHVwZGF0ZVByZXZp
b3VzTWVzc2FnZVJlcGVhdENvdW50KGNvdW50KQogICAgIHsKLSAgICAgICAgY29uc29sZS5hc3Nl
cnQodGhpcy5fcHJldmlvdXNNZXNzYWdlKTsKLSAgICAgICAgaWYgKCF0aGlzLl9wcmV2aW91c01l
c3NhZ2UpCisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX3ByZXZpb3VzTWVzc2FnZVZpZXcp
OworICAgICAgICBpZiAoIXRoaXMuX3ByZXZpb3VzTWVzc2FnZVZpZXcpCiAgICAgICAgICAgICBy
ZXR1cm47CiAKKyAgICAgICAgdmFyIHByZXZpb3VzSWdub3JlZENvdW50ID0gdGhpcy5fcHJldmlv
dXNNZXNzYWdlVmlld1tXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9sbGVyLkln
bm9yZWRSZXBlYXRDb3VudF0gfHwgMDsKKyAgICAgICAgdmFyIHByZXZpb3VzVmlzaWJsZUNvdW50
ID0gdGhpcy5fcHJldmlvdXNNZXNzYWdlVmlldy5yZXBlYXRDb3VudDsKKwogICAgICAgICBpZiAo
IXRoaXMuX3JlcGVhdENvdW50V2FzSW50ZXJydXB0ZWQpIHsKLSAgICAgICAgICAgIHRoaXMuX3By
ZXZpb3VzTWVzc2FnZS5yZXBlYXRDb3VudCA9IGNvdW50IC0gKHRoaXMuX3ByZXZpb3VzTWVzc2Fn
ZS5pZ25vcmVkQ291bnQgfHwgMCk7Ci0gICAgICAgICAgICB0aGlzLl9wcmV2aW91c01lc3NhZ2Uu
dXBkYXRlUmVwZWF0Q291bnQoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHZhciBu
ZXdNZXNzYWdlID0gdGhpcy5fcHJldmlvdXNNZXNzYWdlLmNsb25lKCk7Ci0KLSAgICAgICAgICAg
IC8vIElmIHRoaXMgbWVzc2FnZSBpcyByZXBlYXRlZCBhZnRlciBiZWluZyBjbG9uZWQsIG1lc3Nh
Z2VSZXBlYXRDb3VudFVwZGF0ZWQgd2lsbCBiZSBjYWxsZWQgd2l0aCBhCi0gICAgICAgICAgICAv
LyBjb3VudCB0aGF0IGluY2x1ZGVzIHRoZSBjb3VudCBvZiB0aGlzIG1lc3NhZ2UgYmVmb3JlIGNs
b25pbmcuIFdlIHNob3VsZCBpZ25vcmUgaW5zdGFuY2VzIG9mIHRoaXMKLSAgICAgICAgICAgIC8v
IGxvZyB0aGF0IG9jY3VycmVkIGJlZm9yZSB3ZSBjbG9uZWQsIHNvIHNldCBhIHByb3BlcnR5IG9u
IHRoZSBtZXNzYWdlIHdpdGggdGhlIG51bWJlciBvZiBwcmV2aW91cwotICAgICAgICAgICAgLy8g
aW5zdGFuY2VzIG9mIHRoaXMgbG9nIHRoYXQgd2Ugc2hvdWxkIGlnbm9yZS4KLSAgICAgICAgICAg
IG5ld01lc3NhZ2UuaWdub3JlZENvdW50ID0gbmV3TWVzc2FnZS5yZXBlYXRDb3VudCArICh0aGlz
Ll9wcmV2aW91c01lc3NhZ2UuaWdub3JlZENvdW50IHx8IDApOwotICAgICAgICAgICAgbmV3TWVz
c2FnZS5yZXBlYXRDb3VudCA9IDE7Ci0KLSAgICAgICAgICAgIHRoaXMuX2FwcGVuZENvbnNvbGVN
ZXNzYWdlKG5ld01lc3NhZ2UpOworICAgICAgICAgICAgdGhpcy5fcHJldmlvdXNNZXNzYWdlVmll
dy5yZXBlYXRDb3VudCA9IGNvdW50IC0gcHJldmlvdXNJZ25vcmVkQ291bnQ7CisgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KKworICAgICAgICB2YXIgY29uc29sZU1lc3NhZ2UgPSB0aGlz
Ll9wcmV2aW91c01lc3NhZ2VWaWV3Lm1lc3NhZ2U7CisgICAgICAgIHZhciBkdXBsaWNhdGVkQ29u
c29sZU1lc3NhZ2VWaWV3ID0gbmV3IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZVZpZXcoY29u
c29sZU1lc3NhZ2UpOworICAgICAgICBkdXBsaWNhdGVkQ29uc29sZU1lc3NhZ2VWaWV3W1dlYklu
c3BlY3Rvci5KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIuSWdub3JlZFJlcGVhdENvdW50XSA9
IHByZXZpb3VzSWdub3JlZENvdW50ICsgcHJldmlvdXNWaXNpYmxlQ291bnQ7CisgICAgICAgIGR1
cGxpY2F0ZWRDb25zb2xlTWVzc2FnZVZpZXcucmVwZWF0Q291bnQgPSAxOworICAgICAgICB0aGlz
Ll9hcHBlbmRDb25zb2xlTWVzc2FnZVZpZXcoZHVwbGljYXRlZENvbnNvbGVNZXNzYWdlVmlldyk7
CiAgICAgfQogCiAgICAgaXNTY3JvbGxlZFRvQm90dG9tKCkKQEAgLTIyNSwxNSArMjIwLDE3IEBA
IFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIgPSBjbGFzcyBKYXZhU2Ny
aXB0TG9nVmlld0NvbnRyb2xsZXIgZXh0CiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydCh0
ZXh0KTsKIAotICAgICAgICB2YXIgY29tbWFuZE1lc3NhZ2UgPSBuZXcgV2ViSW5zcGVjdG9yLkNv
bnNvbGVDb21tYW5kKHRleHQpOwotICAgICAgICB0aGlzLl9hcHBlbmRDb25zb2xlTWVzc2FnZShj
b21tYW5kTWVzc2FnZSwgdHJ1ZSk7CisgICAgICAgIHZhciBjb21tYW5kTWVzc2FnZVZpZXcgPSBu
ZXcgV2ViSW5zcGVjdG9yLkNvbnNvbGVDb21tYW5kVmlldyh0ZXh0KTsKKyAgICAgICAgdGhpcy5f
YXBwZW5kQ29uc29sZU1lc3NhZ2VWaWV3KGNvbW1hbmRNZXNzYWdlVmlldywgdHJ1ZSk7CiAKICAg
ICAgICAgZnVuY3Rpb24gcHJpbnRSZXN1bHQocmVzdWx0LCB3YXNUaHJvd24sIHNhdmVkUmVzdWx0
SW5kZXgpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghcmVzdWx0IHx8IHRoaXMuX2NsZWFy
ZWQpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgICAgICB0aGlzLl9hcHBlbmRD
b25zb2xlTWVzc2FnZShuZXcgV2ViSW5zcGVjdG9yLkNvbnNvbGVDb21tYW5kUmVzdWx0KHJlc3Vs
dCwgd2FzVGhyb3duLCBjb21tYW5kTWVzc2FnZSwgc2F2ZWRSZXN1bHRJbmRleCksIHRydWUpOwor
ICAgICAgICAgICAgdmFyIGNvbW1hbmRSZXN1bHRNZXNzYWdlID0gbmV3IFdlYkluc3BlY3Rvci5D
b25zb2xlQ29tbWFuZFJlc3VsdE1lc3NhZ2UocmVzdWx0LCB3YXNUaHJvd24sIHNhdmVkUmVzdWx0
SW5kZXgpOworICAgICAgICAgICAgdmFyIGNvbW1hbmRSZXN1bHRNZXNzYWdlVmlldyA9IG5ldyBX
ZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VWaWV3KGNvbW1hbmRSZXN1bHRNZXNzYWdlKTsKKyAg
ICAgICAgICAgIHRoaXMuX2FwcGVuZENvbnNvbGVNZXNzYWdlVmlldyhjb21tYW5kUmVzdWx0TWVz
c2FnZVZpZXcsIHRydWUpOwogICAgICAgICB9CiAKICAgICAgICAgdGV4dCArPSAiXG4vLyMgc291
cmNlVVJMPV9fV2ViSW5zcGVjdG9yQ29uc29sZV9fXG4iOwpAQCAtMjYzLDcgKzI2MCw3IEBAIFdl
Ykluc3BlY3Rvci5KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIgPSBjbGFzcyBKYXZhU2NyaXB0
TG9nVmlld0NvbnRyb2xsZXIgZXh0CiAgICAgICAgIHRoaXMuZGVsZWdhdGUuaGlnaGxpZ2h0UHJl
dmlvdXNTZWFyY2hNYXRjaCgpOwogICAgIH0KIAotICAgIF9hcHBlbmRDb25zb2xlTWVzc2FnZSht
c2csIHJlcGVhdENvdW50V2FzSW50ZXJydXB0ZWQpCisgICAgX2FwcGVuZENvbnNvbGVNZXNzYWdl
VmlldyhtZXNzYWdlVmlldywgcmVwZWF0Q291bnRXYXNJbnRlcnJ1cHRlZCkKICAgICB7CiAgICAg
ICAgIHZhciB3YXNTY3JvbGxlZFRvQm90dG9tID0gdGhpcy5pc1Njcm9sbGVkVG9Cb3R0b20oKTsK
IApAQCAtMjcxLDI4ICsyNjgsMjkgQEAgV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRMb2dWaWV3Q29u
dHJvbGxlciA9IGNsYXNzIEphdmFTY3JpcHRMb2dWaWV3Q29udHJvbGxlciBleHQKICAgICAgICAg
dGhpcy5fcmVwZWF0Q291bnRXYXNJbnRlcnJ1cHRlZCA9IHJlcGVhdENvdW50V2FzSW50ZXJydXB0
ZWQgfHwgZmFsc2U7CiAKICAgICAgICAgaWYgKCFyZXBlYXRDb3VudFdhc0ludGVycnVwdGVkKQot
ICAgICAgICAgICAgdGhpcy5fcHJldmlvdXNNZXNzYWdlID0gbXNnOworICAgICAgICAgICAgdGhp
cy5fcHJldmlvdXNNZXNzYWdlVmlldyA9IG1lc3NhZ2VWaWV3OwogCi0gICAgICAgIGlmIChtc2cu
dHlwZSA9PT0gV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLkVu
ZEdyb3VwKSB7CisgICAgICAgIGlmIChtZXNzYWdlVmlldy5tZXNzYWdlLnR5cGUgPT09IFdlYklu
c3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5FbmRHcm91cCkgewogICAgICAgICAg
ICAgdmFyIHBhcmVudEdyb3VwID0gdGhpcy5fY3VycmVudENvbnNvbGVHcm91cC5wYXJlbnRHcm91
cDsKICAgICAgICAgICAgIGlmIChwYXJlbnRHcm91cCkKICAgICAgICAgICAgICAgICB0aGlzLl9j
dXJyZW50Q29uc29sZUdyb3VwID0gcGFyZW50R3JvdXA7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBpZiAobXNnLnR5cGUgPT09IFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2Fn
ZS5NZXNzYWdlVHlwZS5TdGFydEdyb3VwIHx8IG1zZy50eXBlID09PSBXZWJJbnNwZWN0b3IuTGVn
YWN5Q29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuU3RhcnRHcm91cENvbGxhcHNlZCkgeworICAg
ICAgICAgICAgaWYgKG1lc3NhZ2VWaWV3Lm1lc3NhZ2UudHlwZSA9PT0gV2ViSW5zcGVjdG9yLkNv
bnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLlN0YXJ0R3JvdXAgfHwgbWVzc2FnZVZpZXcubWVzc2Fn
ZS50eXBlID09PSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuU3RhcnRH
cm91cENvbGxhcHNlZCkgewogICAgICAgICAgICAgICAgIHZhciBncm91cCA9IG5ldyBXZWJJbnNw
ZWN0b3IuQ29uc29sZUdyb3VwKHRoaXMuX2N1cnJlbnRDb25zb2xlR3JvdXApOwotICAgICAgICAg
ICAgICAgIHZhciBncm91cEVsZW1lbnQgPSBncm91cC5yZW5kZXIobXNnKTsKKyAgICAgICAgICAg
ICAgICB2YXIgZ3JvdXBFbGVtZW50ID0gZ3JvdXAucmVuZGVyKG1lc3NhZ2VWaWV3KTsKICAgICAg
ICAgICAgICAgICB0aGlzLl9jdXJyZW50Q29uc29sZUdyb3VwLmFwcGVuZChncm91cEVsZW1lbnQp
OwogICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRDb25zb2xlR3JvdXAgPSBncm91cDsKICAg
ICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRDb25zb2xlR3Jv
dXAuYWRkTWVzc2FnZShtc2cpOworICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRDb25zb2xl
R3JvdXAuYWRkTWVzc2FnZVZpZXcobWVzc2FnZVZpZXcpOwogICAgICAgICB9CiAKLSAgICAgICAg
aWYgKG1zZy50eXBlID09PSBXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2UuTWVzc2Fn
ZVR5cGUuUmVzdWx0IHx8IHdhc1Njcm9sbGVkVG9Cb3R0b20pCisgICAgICAgIGlmIChtZXNzYWdl
Vmlldy5tZXNzYWdlLnR5cGUgPT09IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdl
VHlwZS5SZXN1bHQgfHwgd2FzU2Nyb2xsZWRUb0JvdHRvbSkKICAgICAgICAgICAgIHRoaXMuc2Ny
b2xsVG9Cb3R0b20oKTsKIAotICAgICAgICBpZiAodGhpcy5kZWxlZ2F0ZSAmJiB0eXBlb2YgdGhp
cy5kZWxlZ2F0ZS5kaWRBcHBlbmRDb25zb2xlTWVzc2FnZSA9PT0gImZ1bmN0aW9uIikKLSAgICAg
ICAgICAgIHRoaXMuZGVsZWdhdGUuZGlkQXBwZW5kQ29uc29sZU1lc3NhZ2UobXNnKTsKKyAgICAg
ICAgaWYgKHRoaXMuZGVsZWdhdGUgJiYgdHlwZW9mIHRoaXMuZGVsZWdhdGUuZGlkQXBwZW5kQ29u
c29sZU1lc3NhZ2VWaWV3ID09PSAiZnVuY3Rpb24iKQorICAgICAgICAgICAgdGhpcy5kZWxlZ2F0
ZS5kaWRBcHBlbmRDb25zb2xlTWVzc2FnZVZpZXcobWVzc2FnZVZpZXcpOwogICAgIH0KIH07CiAK
IFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0TG9nVmlld0NvbnRyb2xsZXIuQ2FjaGVkUHJvcGVydGll
c0R1cmF0aW9uID0gMzAwMDA7CitXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdExvZ1ZpZXdDb250cm9s
bGVyLklnbm9yZWRSZXBlYXRDb3VudCA9IFN5bWJvbCgiaWdub3JlZC1yZXBlYXQtY291bnQiKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xs
ZXJzL0phdmFTY3JpcHRSdW50aW1lQ29tcGxldGlvblByb3ZpZGVyLmpzIGIvU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvSmF2YVNjcmlwdFJ1bnRpbWVDb21w
bGV0aW9uUHJvdmlkZXIuanMKaW5kZXggYjA5ODJmYS4uNGM3ODI2OSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvSmF2YVNjcmlwdFJ1
bnRpbWVDb21wbGV0aW9uUHJvdmlkZXIuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvSmF2YVNjcmlwdFJ1bnRpbWVDb21wbGV0aW9uUHJvdmlk
ZXIuanMKQEAgLTE4MCw3ICsxODAsNyBAQCBXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdFJ1bnRpbWVD
b21wbGV0aW9uUHJvdmlkZXIgPSBjbGFzcyBKYXZhU2NyaXB0UnVudGltZUNvbXBsZQogICAgICAg
ICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzW2NvbW1hbmRMaW5lQVBJW2ldXSA9IHRydWU7CiAK
ICAgICAgICAgICAgICAgICAvLyBGSVhNRTogRHVlIHRvIGNhY2hpbmcsIHNvbWV0aW1lcyBvbGQg
JG4gdmFsdWVzIHNob3cgdXAgYXMgY29tcGxldGlvbiByZXN1bHRzIGV2ZW4gdGhvdWdoIHRoZXkg
YXJlIG5vdCBhdmFpbGFibGUuIFdlIHNob3VsZCBjbGVhciB0aGF0IHByb2FjdGl2ZWx5LgotICAg
ICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IFdlYkluc3BlY3Rvci5Db25zb2xlQ29t
bWFuZFJlc3VsdC5tYXhpbXVtU2F2ZWRSZXN1bHRJbmRleDsgKytpKQorICAgICAgICAgICAgICAg
IGZvciAodmFyIGkgPSAxOyBpIDw9IFdlYkluc3BlY3Rvci5Db25zb2xlQ29tbWFuZFJlc3VsdE1l
c3NhZ2UubWF4aW11bVNhdmVkUmVzdWx0SW5kZXg7ICsraSkKICAgICAgICAgICAgICAgICAgICAg
cHJvcGVydHlOYW1lc1siJCIgKyBpXSA9IHRydWU7CiAgICAgICAgICAgICB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0xvZ01h
bmFnZXIuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVy
cy9Mb2dNYW5hZ2VyLmpzCmluZGV4IGE2YWFiOWUuLjExNzM5MjQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0xvZ01hbmFnZXIuanMK
KysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvTG9n
TWFuYWdlci5qcwpAQCAtMzgsMTkgKzM4LDIxIEBAIFdlYkluc3BlY3Rvci5Mb2dNYW5hZ2VyID0g
Y2xhc3MgTG9nTWFuYWdlciBleHRlbmRzIFdlYkluc3BlY3Rvci5PYmplY3QKICAgICB7CiAgICAg
ICAgIC8vIENhbGxlZCBmcm9tIFdlYkluc3BlY3Rvci5Db25zb2xlT2JzZXJ2ZXIuCiAKLSAgICAg
ICAgLy8gRklYTUU6IFBhc3MgYSByZXF1ZXN0LiBXZSBuZWVkIGEgd2F5IHRvIGdldCBpdCBmcm9t
IHRoZSByZXF1ZXN0IElELgotICAgICAgICB2YXIgY29uc29sZU1lc3NhZ2UgPSBXZWJJbnNwZWN0
b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2UuY3JlYXRlKHNvdXJjZSwgbGV2ZWwsIHRleHQsIHR5cGUs
IHVybCwgbGluZSwgY29sdW1uLCByZXBlYXRDb3VudCwgcGFyYW1ldGVycywgc3RhY2tUcmFjZSwg
bnVsbCk7CisgICAgICAgIC8vIEZJWE1FOiBzdGFja1RyYWNlIHNob3VsZCBiZSBjb252ZXJ0ZWQg
dG8gYSBtb2RlbCBvYmplY3QuCisgICAgICAgIC8vIEZJWE1FOiBHZXQgYSByZXF1ZXN0IGZyb20g
cmVxdWVzdCBJRC4KIAotICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJ
bnNwZWN0b3IuTG9nTWFuYWdlci5FdmVudC5NZXNzYWdlQWRkZWQsIHttZXNzYWdlOiBjb25zb2xl
TWVzc2FnZX0pOworICAgICAgICBpZiAocGFyYW1ldGVycykKKyAgICAgICAgICAgIHBhcmFtZXRl
cnMgPSBwYXJhbWV0ZXJzLm1hcChmdW5jdGlvbih4KSB7IHJldHVybiBXZWJJbnNwZWN0b3IuUmVt
b3RlT2JqZWN0LmZyb21QYXlsb2FkKHgpOyB9KTsKIAotICAgICAgICBjb25zb2xlLmFzc2VydCgh
Y29uc29sZU1lc3NhZ2UuX2VsZW1lbnQgfHwgIWNvbnNvbGVNZXNzYWdlLl9lbGVtZW50LnBhcmVu
dE5vZGUsICJUaGlzIGNvbnNvbGUgbWVzc2FnZSBzaG91bGRuJ3QgYmUgYWRkZWQgdG8gYSB2aWV3
LiBUbyBhZGQgaXQgeW91IG5lZWQgdG8gdXNlIGNsb25lKCkuIik7CisgICAgICAgIHZhciBtZXNz
YWdlID0gbmV3IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZShzb3VyY2UsIGxldmVsLCB0ZXh0
LCB0eXBlLCB1cmwsIGxpbmUsIGNvbHVtbiwgcmVwZWF0Q291bnQsIHBhcmFtZXRlcnMsIHN0YWNr
VHJhY2UsIG51bGwpOworICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJ
bnNwZWN0b3IuTG9nTWFuYWdlci5FdmVudC5NZXNzYWdlQWRkZWQsIHttZXNzYWdlfSk7CiAgICAg
fQogCiAgICAgbWVzc2FnZXNDbGVhcmVkKCkKICAgICB7CiAgICAgICAgIC8vIENhbGxlZCBmcm9t
IFdlYkluc3BlY3Rvci5Db25zb2xlT2JzZXJ2ZXIuCiAKLSAgICAgICAgV2ViSW5zcGVjdG9yLkNv
bnNvbGVDb21tYW5kUmVzdWx0LmNsZWFyTWF4aW11bVNhdmVkUmVzdWx0SW5kZXgoKTsKKyAgICAg
ICAgV2ViSW5zcGVjdG9yLkNvbnNvbGVDb21tYW5kUmVzdWx0TWVzc2FnZS5jbGVhck1heGltdW1T
YXZlZFJlc3VsdEluZGV4KCk7CiAKICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBjbGVhciBt
ZXNzYWdlcyBvbiByZWxvYWRzLiBXZSBjYW4ndCBkZXRlcm1pbmUgdGhhdCBlYXNpbHkgcmlnaHQg
bm93LgogICAgICAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9ibGVtLzEzNzY3MDc5PiBDb25zb2xl
Lm1lc3NhZ2VzQ2xlYXJlZCBzaG91bGQgaW5jbHVkZSBhIHJlYXNvbgpAQCAtOTAsNyArOTIsNyBA
QCBXZWJJbnNwZWN0b3IuTG9nTWFuYWdlciA9IGNsYXNzIExvZ01hbmFnZXIgZXh0ZW5kcyBXZWJJ
bnNwZWN0b3IuT2JqZWN0CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hF
dmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5Mb2dNYW5hZ2VyLkV2ZW50LlNlc3Npb25TdGFy
dGVkKTsKIAotICAgICAgICBXZWJJbnNwZWN0b3IuQ29uc29sZUNvbW1hbmRSZXN1bHQuY2xlYXJN
YXhpbXVtU2F2ZWRSZXN1bHRJbmRleCgpOworICAgICAgICBXZWJJbnNwZWN0b3IuQ29uc29sZUNv
bW1hbmRSZXN1bHRNZXNzYWdlLmNsZWFyTWF4aW11bVNhdmVkUmVzdWx0SW5kZXgoKTsKIAogICAg
ICAgICBkZWxldGUgdGhpcy5fc2hvdWxkQ2xlYXJNZXNzYWdlczsKICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9NYWluLmh0bWwgYi9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9NYWluLmh0bWwKaW5kZXggMDI4NDY3Zi4uMmIx
NWFhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFp
bi5odG1sCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRt
bApAQCAtMjA3LDYgKzIwNyw3IEBACiAgICAgPHNjcmlwdCBzcmM9IlByb3RvY29sL1RpbWVsaW5l
T2JzZXJ2ZXIuanMiPjwvc2NyaXB0PgogCiAgICAgPHNjcmlwdCBzcmM9Ik1vZGVscy9CcmVha3Bv
aW50QWN0aW9uLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iTW9kZWxzL0NvbnNvbGVN
ZXNzYWdlLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iTW9kZWxzL1NvdXJjZUNvZGUu
anMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJNb2RlbHMvU291cmNlQ29kZUxvY2F0aW9u
LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iTW9kZWxzL1RpbWVsaW5lLmpzIj48L3Nj
cmlwdD4KQEAgLTIzMCw2ICsyMzEsNyBAQAogICAgIDxzY3JpcHQgc3JjPSJNb2RlbHMvQ29sbGVj
dGlvbkVudHJ5LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iTW9kZWxzL0NvbGxlY3Rp
b25FbnRyeVByZXZpZXcuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJNb2RlbHMvQ29s
b3IuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJNb2RlbHMvQ29uc29sZUNvbW1hbmRS
ZXN1bHRNZXNzYWdlLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iTW9kZWxzL0NvbnRl
bnRGbG93LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iTW9kZWxzL0Nvb2tpZVN0b3Jh
Z2VPYmplY3QuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJNb2RlbHMvRE9NTm9kZS5q
cyI+PC9zY3JpcHQ+CkBAIC0yOTUsNyArMjk3LDggQEAKICAgICA8c2NyaXB0IHNyYz0iTW9kZWxz
L1R5cGVTZXQuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJNb2RlbHMvVW5pdEJlemll
ci5qcyI+PC9zY3JpcHQ+CiAKLSAgICA8c2NyaXB0IHNyYz0iVmlld3MvTGVnYWN5Q29uc29sZU1l
c3NhZ2UuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9Db25zb2xlQ29tbWFu
ZFZpZXcuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9Db25zb2xlTWVzc2Fn
ZVZpZXcuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9Db250ZW50Vmlldy5q
cyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IlZpZXdzL0RhdGFHcmlkLmpzIj48L3Njcmlw
dD4KICAgICA8c2NyaXB0IHNyYz0iVmlld3MvRGV0YWlsc1NlY3Rpb25Sb3cuanMiPjwvc2NyaXB0
PgpAQCAtMzEwLDcgKzMxMyw2IEBACiAgICAgPHNjcmlwdCBzcmM9IlZpZXdzL1RyZWVPdXRsaW5l
LmpzIj48L3NjcmlwdD4KIAogICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9CdXR0b25OYXZpZ2F0aW9u
SXRlbS5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCBzcmM9IlZpZXdzL0xlZ2FjeUNvbnNvbGVN
ZXNzYWdlSW1wbC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IlZpZXdzL0RPTVRyZWVD
b250ZW50Vmlldy5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IlZpZXdzL0RldGFpbHNT
aWRlYmFyUGFuZWwuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJWaWV3cy9HZW5lcmFs
VHJlZUVsZW1lbnQuanMiPjwvc2NyaXB0PgpAQCAtMzUxLDggKzM1Myw2IEBACiAgICAgPHNjcmlw
dCBzcmM9IlZpZXdzL0NvbG9yV2hlZWwuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJW
aWV3cy9Db21wbGV0aW9uU3VnZ2VzdGlvbnNWaWV3LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0
IHNyYz0iVmlld3MvQ29tcHV0ZWRTdHlsZURldGFpbHNQYW5lbC5qcyI+PC9zY3JpcHQ+Ci0gICAg
PHNjcmlwdCBzcmM9IlZpZXdzL0NvbnNvbGVDb21tYW5kLmpzIj48L3NjcmlwdD4KLSAgICA8c2Ny
aXB0IHNyYz0iVmlld3MvQ29uc29sZUNvbW1hbmRSZXN1bHQuanMiPjwvc2NyaXB0PgogICAgIDxz
Y3JpcHQgc3JjPSJWaWV3cy9Db25zb2xlR3JvdXAuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQg
c3JjPSJWaWV3cy9Db25zb2xlUHJvbXB0LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0i
Vmlld3MvQ29uc29sZVNlc3Npb24uanMiPjwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvQ29uc29sZUNvbW1hbmRSZXN1bHQuanMg
Yi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvQ29uc29sZUNvbW1h
bmRSZXN1bHRNZXNzYWdlLmpzCnNpbWlsYXJpdHkgaW5kZXggNTAlCnJlbmFtZSBmcm9tIFNvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0NvbnNvbGVDb21tYW5kUmVzdWx0
LmpzCnJlbmFtZSB0byBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMv
Q29uc29sZUNvbW1hbmRSZXN1bHRNZXNzYWdlLmpzCmluZGV4IGU3YzBmNTkuLjk5Nzg0ZWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0NvbnNv
bGVDb21tYW5kUmVzdWx0LmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL01vZGVscy9Db25zb2xlQ29tbWFuZFJlc3VsdE1lc3NhZ2UuanMKQEAgLTI3LDQ1ICsyNywz
NSBAQAogICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi1XZWJJbnNwZWN0b3IuQ29uc29sZUNvbW1hbmRSZXN1
bHQgPSBmdW5jdGlvbihyZXN1bHQsIHdhc1Rocm93biwgb3JpZ2luYXRpbmdDb21tYW5kLCBzYXZl
ZFJlc3VsdEluZGV4KQorV2ViSW5zcGVjdG9yLkNvbnNvbGVDb21tYW5kUmVzdWx0TWVzc2FnZSA9
IGNsYXNzIENvbnNvbGVDb21tYW5kUmVzdWx0IGV4dGVuZHMgV2ViSW5zcGVjdG9yLkNvbnNvbGVN
ZXNzYWdlCiB7Ci0gICAgdmFyIGxldmVsID0gKHdhc1Rocm93biA/IFdlYkluc3BlY3Rvci5MZWdh
Y3lDb25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuRXJyb3IgOiBXZWJJbnNwZWN0b3IuTGVnYWN5
Q29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkxvZyk7Ci0gICAgdGhpcy5vcmlnaW5hdGluZ0Nv
bW1hbmQgPSBvcmlnaW5hdGluZ0NvbW1hbmQ7Ci0gICAgdGhpcy5zYXZlZFJlc3VsdEluZGV4ID0g
c2F2ZWRSZXN1bHRJbmRleDsKKyAgICBjb25zdHJ1Y3RvcihyZXN1bHQsIHdhc1Rocm93biwgc2F2
ZWRSZXN1bHRJbmRleCkKKyAgICB7CisgICAgICAgIHZhciBzb3VyY2UgPSBXZWJJbnNwZWN0b3Iu
Q29uc29sZU1lc3NhZ2UuTWVzc2FnZVNvdXJjZS5KUzsKKyAgICAgICAgdmFyIGxldmVsID0gKHdh
c1Rocm93biA/IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuRXJyb3Ig
OiBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkxvZyk7CisgICAgICAg
IHZhciB0eXBlID0gV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLlJlc3Vs
dDsKIAotICAgIGlmICh0aGlzLnNhdmVkUmVzdWx0SW5kZXggJiYgdGhpcy5zYXZlZFJlc3VsdElu
ZGV4ID4gV2ViSW5zcGVjdG9yLkNvbnNvbGVDb21tYW5kUmVzdWx0Lm1heGltdW1TYXZlZFJlc3Vs
dEluZGV4KQotICAgICAgICBXZWJJbnNwZWN0b3IuQ29uc29sZUNvbW1hbmRSZXN1bHQubWF4aW11
bVNhdmVkUmVzdWx0SW5kZXggPSB0aGlzLnNhdmVkUmVzdWx0SW5kZXg7CisgICAgICAgIHN1cGVy
KHNvdXJjZSwgbGV2ZWwsICIiLCB0eXBlLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVk
LCAwLCBbcmVzdWx0XSwgdW5kZWZpbmVkLCB1bmRlZmluZWQpOwogCi0gICAgV2ViSW5zcGVjdG9y
LkxlZ2FjeUNvbnNvbGVNZXNzYWdlSW1wbC5jYWxsKHRoaXMsIFdlYkluc3BlY3Rvci5MZWdhY3lD
b25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNlLkpTLCBsZXZlbCwgIiIsIG51bGwsIFdlYkluc3Bl
Y3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5SZXN1bHQsIHVuZGVmaW5lZCwg
dW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgW3Jlc3VsdF0pOwotfTsKKyAgICAgICAg
dGhpcy5fc2F2ZWRSZXN1bHRJbmRleCA9IHNhdmVkUmVzdWx0SW5kZXg7CiAKLVdlYkluc3BlY3Rv
ci5Db25zb2xlQ29tbWFuZFJlc3VsdC5tYXhpbXVtU2F2ZWRSZXN1bHRJbmRleCA9IDA7CisgICAg
ICAgIGlmICh0aGlzLl9zYXZlZFJlc3VsdEluZGV4ICYmIHRoaXMuX3NhdmVkUmVzdWx0SW5kZXgg
PiBXZWJJbnNwZWN0b3IuQ29uc29sZUNvbW1hbmRSZXN1bHRNZXNzYWdlLm1heGltdW1TYXZlZFJl
c3VsdEluZGV4KQorICAgICAgICAgICAgV2ViSW5zcGVjdG9yLkNvbnNvbGVDb21tYW5kUmVzdWx0
TWVzc2FnZS5tYXhpbXVtU2F2ZWRSZXN1bHRJbmRleCA9IHRoaXMuX3NhdmVkUmVzdWx0SW5kZXg7
CisgICAgfQogCi1XZWJJbnNwZWN0b3IuQ29uc29sZUNvbW1hbmRSZXN1bHQuY2xlYXJNYXhpbXVt
U2F2ZWRSZXN1bHRJbmRleCA9IGZ1bmN0aW9uKCkKLXsKLSAgICBXZWJJbnNwZWN0b3IuQ29uc29s
ZUNvbW1hbmRSZXN1bHQubWF4aW11bVNhdmVkUmVzdWx0SW5kZXggPSAwOwotfQorICAgIC8vIFN0
YXRpYwogCi1XZWJJbnNwZWN0b3IuQ29uc29sZUNvbW1hbmRSZXN1bHQucHJvdG90eXBlID0gewot
ICAgIGNvbnN0cnVjdG9yOiBXZWJJbnNwZWN0b3IuQ29uc29sZUNvbW1hbmRSZXN1bHQsCisgICAg
c3RhdGljIGNsZWFyTWF4aW11bVNhdmVkUmVzdWx0SW5kZXgoKQorICAgIHsKKyAgICAgICAgV2Vi
SW5zcGVjdG9yLkNvbnNvbGVDb21tYW5kUmVzdWx0TWVzc2FnZS5tYXhpbXVtU2F2ZWRSZXN1bHRJ
bmRleCA9IDA7CisgICAgfQogCiAgICAgLy8gUHVibGljCiAKLSAgICBlbmZvcmNlc0NsaXBib2Fy
ZFByZWZpeFN0cmluZzogZmFsc2UsCi0KLSAgICB0b01lc3NhZ2VFbGVtZW50OiBmdW5jdGlvbigp
CisgICAgZ2V0IHNhdmVkUmVzdWx0SW5kZXgoKQogICAgIHsKLSAgICAgICAgdmFyIGVsZW1lbnQg
PSBXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2VJbXBsLnByb3RvdHlwZS50b01lc3Nh
Z2VFbGVtZW50LmNhbGwodGhpcyk7Ci0gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiY29u
c29sZS11c2VyLWNvbW1hbmQtcmVzdWx0Iik7Ci0gICAgICAgIGlmICghZWxlbWVudC5nZXRBdHRy
aWJ1dGUoImRhdGEtbGFiZWxwcmVmaXgiKSkKLSAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmli
dXRlKCJkYXRhLWxhYmVscHJlZml4IiwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJPdXRwdXQ6ICIp
KTsKLSAgICAgICAgcmV0dXJuIGVsZW1lbnQ7Ci0gICAgfSwKLQotICAgIGdldCBjbGlwYm9hcmRQ
cmVmaXhTdHJpbmcoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICI8ICI7CisgICAgICAgIHJldHVy
biB0aGlzLl9zYXZlZFJlc3VsdEluZGV4OwogICAgIH0KIH07CiAKLVdlYkluc3BlY3Rvci5Db25z
b2xlQ29tbWFuZFJlc3VsdC5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLkxlZ2Fj
eUNvbnNvbGVNZXNzYWdlSW1wbC5wcm90b3R5cGU7CitXZWJJbnNwZWN0b3IuQ29uc29sZUNvbW1h
bmRSZXN1bHRNZXNzYWdlLm1heGltdW1TYXZlZFJlc3VsdEluZGV4ID0gMDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9Db25zb2xlTWVzc2Fn
ZS5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9Db25zb2xl
TWVzc2FnZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODA1YzdlCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9k
ZWxzL0NvbnNvbGVNZXNzYWdlLmpzCkBAIC0wLDAgKzEsMTQyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworV2Vi
SW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlID0gY2xhc3MgQ29uc29sZU1lc3NhZ2UgZXh0ZW5kcyBX
ZWJJbnNwZWN0b3IuT2JqZWN0Cit7CisgICAgY29uc3RydWN0b3Ioc291cmNlLCBsZXZlbCwgbWVz
c2FnZSwgdHlwZSwgdXJsLCBsaW5lLCBjb2x1bW4sIHJlcGVhdENvdW50LCBwYXJhbWV0ZXJzLCBz
dGFja1RyYWNlLCByZXF1ZXN0KQorICAgIHsKKyAgICAgICAgc3VwZXIoKTsKKworICAgICAgICBj
b25zb2xlLmFzc2VydCghcGFyYW1ldGVycyB8fCBwYXJhbWV0ZXJzLmV2ZXJ5KGZ1bmN0aW9uKHgp
IHsgcmV0dXJuIHggaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0OyB9KSk7CisK
KyAgICAgICAgdGhpcy5fc291cmNlID0gc291cmNlOworICAgICAgICB0aGlzLl9sZXZlbCA9IGxl
dmVsOworICAgICAgICB0aGlzLl9tZXNzYWdlVGV4dCA9IG1lc3NhZ2U7CisgICAgICAgIHRoaXMu
X3R5cGUgPSB0eXBlIHx8IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5M
b2c7CisgICAgICAgIHRoaXMuX3VybCA9IHVybCB8fCBudWxsOworICAgICAgICB0aGlzLl9saW5l
ID0gbGluZSB8fCAwOworICAgICAgICB0aGlzLl9jb2x1bW4gPSBjb2x1bW4gfHwgMDsKKworICAg
ICAgICB0aGlzLl9yZXBlYXRDb3VudCA9IHJlcGVhdENvdW50IHx8IDA7CisgICAgICAgIHRoaXMu
X3BhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzOworICAgICAgICB0aGlzLl9zdGFja1RyYWNlID0gc3Rh
Y2tUcmFjZTsKKyAgICAgICAgdGhpcy5fcmVxdWVzdCA9IHJlcXVlc3Q7CisgICAgfQorCisgICAg
Ly8gUHVibGljCisKKyAgICBnZXQgc291cmNlKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlz
Ll9zb3VyY2U7CisgICAgfQorCisgICAgZ2V0IGxldmVsKCkKKyAgICB7CisgICAgICAgIHJldHVy
biB0aGlzLl9sZXZlbDsKKyAgICB9CisKKyAgICBnZXQgbWVzc2FnZVRleHQoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHRoaXMuX21lc3NhZ2VUZXh0OworICAgIH0KKworICAgIGdldCB0eXBlKCkK
KyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl90eXBlOworICAgIH0KKworICAgIGdldCB1cmwo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3VybDsKKyAgICB9CisKKyAgICBnZXQgbGlu
ZSgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fbGluZTsKKyAgICB9CisKKyAgICBnZXQg
Y29sdW1uKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9jb2x1bW47CisgICAgfQorCisg
ICAgZ2V0IHJlcGVhdENvdW50KCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9yZXBlYXRD
b3VudDsKKyAgICB9CisKKyAgICBnZXQgcGFyYW1ldGVycygpCisgICAgeworICAgICAgICByZXR1
cm4gdGhpcy5fcGFyYW1ldGVyczsKKyAgICB9CisKKyAgICBnZXQgc3RhY2tUcmFjZSgpCisgICAg
eworICAgICAgICByZXR1cm4gdGhpcy5fc3RhY2tUcmFjZTsKKyAgICB9CisKKyAgICBnZXQgcmVx
dWVzdCgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fcmVxdWVzdDsKKyAgICB9Cit9Owor
CitXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVNvdXJjZSA9IHsKKyAgICBIVE1M
OiAiaHRtbCIsCisgICAgWE1MOiAieG1sIiwKKyAgICBKUzogImphdmFzY3JpcHQiLAorICAgIE5l
dHdvcms6ICJuZXR3b3JrIiwKKyAgICBDb25zb2xlQVBJOiAiY29uc29sZS1hcGkiLAorICAgIFN0
b3JhZ2U6ICJzdG9yYWdlIiwKKyAgICBBcHBjYWNoZTogImFwcGNhY2hlIiwKKyAgICBSZW5kZXJp
bmc6ICJyZW5kZXJpbmciLAorICAgIENTUzogImNzcyIsCisgICAgU2VjdXJpdHk6ICJzZWN1cml0
eSIsCisgICAgT3RoZXI6ICJvdGhlciIsCit9OworCitXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3Nh
Z2UuTWVzc2FnZVR5cGUgPSB7CisgICAgTG9nOiAibG9nIiwKKyAgICBEaXI6ICJkaXIiLAorICAg
IERpclhNTDogImRpcnhtbCIsCisgICAgVGFibGU6ICJ0YWJsZSIsCisgICAgVHJhY2U6ICJ0cmFj
ZSIsCisgICAgU3RhcnRHcm91cDogInN0YXJ0R3JvdXAiLAorICAgIFN0YXJ0R3JvdXBDb2xsYXBz
ZWQ6ICJzdGFydEdyb3VwQ29sbGFwc2VkIiwKKyAgICBFbmRHcm91cDogImVuZEdyb3VwIiwKKyAg
ICBBc3NlcnQ6ICJhc3NlcnQiLAorICAgIFRpbWluZzogInRpbWluZyIsCisgICAgUHJvZmlsZTog
InByb2ZpbGUiLAorICAgIFByb2ZpbGVFbmQ6ICJwcm9maWxlRW5kIiwKKyAgICBSZXN1bHQ6ICJy
ZXN1bHQiLCAvLyBGcm9udGVuZCBPbmx5LgorfTsKKworV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNz
YWdlLk1lc3NhZ2VMZXZlbCA9IHsKKyAgICBUaXA6ICJ0aXAiLCAvLyBDT01QQVRJQklMSVRZIChp
T1MgNikKKyAgICBMb2c6ICJsb2ciLAorICAgIFdhcm5pbmc6ICJ3YXJuaW5nIiwKKyAgICBFcnJv
cjogImVycm9yIiwKKyAgICBEZWJ1ZzogImRlYnVnIiwKK307CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvRGVmYXVsdERhc2hib2FyZC5qcyBi
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9EZWZhdWx0RGFzaGJv
YXJkLmpzCmluZGV4IGNlZWU2ZTYuLjFlY2JiZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9EZWZhdWx0RGFzaGJvYXJkLmpzCisrKyBiL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9EZWZhdWx0RGFzaGJvYXJk
LmpzCkBAIC0yMzMsNyArMjMzLDcgQEAgV2ViSW5zcGVjdG9yLkRlZmF1bHREYXNoYm9hcmQgPSBj
bGFzcyBEZWZhdWx0RGFzaGJvYXJkIGV4dGVuZHMgV2ViSW5zcGVjdG9yLk9iamUKICAgICB7CiAg
ICAgICAgIHZhciBtZXNzYWdlID0gZXZlbnQuZGF0YS5tZXNzYWdlOwogICAgICAgICB0aGlzLl9s
YXN0Q29uc29sZU1lc3NhZ2VUeXBlID0gbWVzc2FnZS5sZXZlbDsKLSAgICAgICAgdGhpcy5faW5j
cmVtZW50Q29uc29sZU1lc3NhZ2VUeXBlKG1lc3NhZ2UubGV2ZWwsIG1lc3NhZ2UudG90YWxSZXBl
YXRDb3VudCk7CisgICAgICAgIHRoaXMuX2luY3JlbWVudENvbnNvbGVNZXNzYWdlVHlwZShtZXNz
YWdlLmxldmVsLCBtZXNzYWdlLnJlcGVhdENvdW50KTsKICAgICB9CiAKICAgICBfY29uc29sZU1l
c3NhZ2VXYXNSZXBlYXRlZChldmVudCkKQEAgLTI0NCwxMyArMjQ0LDEzIEBAIFdlYkluc3BlY3Rv
ci5EZWZhdWx0RGFzaGJvYXJkID0gY2xhc3MgRGVmYXVsdERhc2hib2FyZCBleHRlbmRzIFdlYklu
c3BlY3Rvci5PYmplCiAgICAgX2luY3JlbWVudENvbnNvbGVNZXNzYWdlVHlwZSh0eXBlLCBpbmNy
ZW1lbnQpCiAgICAgewogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBXZWJJ
bnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkxvZzoKKyAgICAgICAg
Y2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkxvZzoKICAgICAg
ICAgICAgIHRoaXMubG9ncyArPSBpbmNyZW1lbnQ7CiAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLldh
cm5pbmc6CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VM
ZXZlbC5XYXJuaW5nOgogICAgICAgICAgICAgdGhpcy5pc3N1ZXMgKz0gaW5jcmVtZW50OwogICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVN
ZXNzYWdlLk1lc3NhZ2VMZXZlbC5FcnJvcjoKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29u
c29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkVycm9yOgogICAgICAgICAgICAgdGhpcy5lcnJvcnMg
Kz0gaW5jcmVtZW50OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Byb3RvY29sL0NvbnNvbGVPYnNl
cnZlci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Byb3RvY29sL0Nv
bnNvbGVPYnNlcnZlci5qcwppbmRleCBjZmMyZmMwLi5iNjFmNzIxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Qcm90b2NvbC9Db25zb2xlT2JzZXJ2ZXIu
anMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvUHJvdG9jb2wvQ29u
c29sZU9ic2VydmVyLmpzCkBAIC0yOSw2ICsyOSw4IEBAIFdlYkluc3BlY3Rvci5Db25zb2xlT2Jz
ZXJ2ZXIgPSBjbGFzcyBDb25zb2xlT2JzZXJ2ZXIKIAogICAgIG1lc3NhZ2VBZGRlZChtZXNzYWdl
KQogICAgIHsKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBjb252ZXJ0ICJUaXAiIHRvICJM
b2ciIGhlcmUgaW1tZWRpYXRlbHkuCisKICAgICAgICAgaWYgKG1lc3NhZ2UudHlwZSA9PT0gImFz
c2VydCIgJiYgIW1lc3NhZ2UudGV4dCkKICAgICAgICAgICAgIG1lc3NhZ2UudGV4dCA9IFdlYklu
c3BlY3Rvci5VSVN0cmluZygiQXNzZXJ0aW9uIik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Rlc3QuaHRtbCBiL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL1Rlc3QuaHRtbAppbmRleCA4MjI2Mzk5Li44MzNiYTc2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9UZXN0Lmh0bWwKKysrIGIv
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVGVzdC5odG1sCkBAIC01MCw2ICs1
MCw3IEBACiAKICAgICA8c2NyaXB0IHNyYz0iUHJvdG9jb2wvSW5zcGVjdG9yT2JzZXJ2ZXIuanMi
Pjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJQcm90b2NvbC9DU1NPYnNlcnZlci5qcyI+PC9z
Y3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlByb3RvY29sL0NvbnNvbGVPYnNlcnZlci5qcyI+PC9z
Y3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IlByb3RvY29sL0RPTU9ic2VydmVyLmpzIj48L3Njcmlw
dD4KICAgICA8c2NyaXB0IHNyYz0iUHJvdG9jb2wvRE9NU3RvcmFnZU9ic2VydmVyLmpzIj48L3Nj
cmlwdD4KICAgICA8c2NyaXB0IHNyYz0iUHJvdG9jb2wvRGVidWdnZXJPYnNlcnZlci5qcyI+PC9z
Y3JpcHQ+CkBAIC02MSw2ICs2Miw3IEBACiAgICAgPHNjcmlwdCBzcmM9IlByb3RvY29sL1RpbWVs
aW5lT2JzZXJ2ZXIuanMiPjwvc2NyaXB0PgogCiAgICAgPHNjcmlwdCBzcmM9Ik1vZGVscy9CcmVh
a3BvaW50QWN0aW9uLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iTW9kZWxzL0NvbnNv
bGVNZXNzYWdlLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iTW9kZWxzL1NvdXJjZUNv
ZGUuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJNb2RlbHMvU291cmNlQ29kZUxvY2F0
aW9uLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iTW9kZWxzL1RpbWVsaW5lLmpzIj48
L3NjcmlwdD4KQEAgLTkwLDYgKzkyLDcgQEAKICAgICA8c2NyaXB0IHNyYz0iTW9kZWxzL0luZGV4
ZWREYXRhYmFzZS5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9Ik1vZGVscy9JbmRleGVk
RGF0YWJhc2VPYmplY3RTdG9yZS5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9Ik1vZGVs
cy9JbmRleGVkRGF0YWJhc2VPYmplY3RTdG9yZUluZGV4LmpzIj48L3NjcmlwdD4KKyAgICA8c2Ny
aXB0IHNyYz0iTW9kZWxzL0lzc3VlTWVzc2FnZS5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBz
cmM9Ik1vZGVscy9MYXlvdXRUaW1lbGluZVJlY29yZC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlw
dCBzcmM9Ik1vZGVscy9MYXp5U291cmNlQ29kZUxvY2F0aW9uLmpzIj48L3NjcmlwdD4KICAgICA8
c2NyaXB0IHNyYz0iTW9kZWxzL05ldHdvcmtUaW1lbGluZS5qcyI+PC9zY3JpcHQ+CkBAIC0xMjcs
NiArMTMwLDggQEAKICAgICA8c2NyaXB0IHNyYz0iQ29udHJvbGxlcnMvRE9NVHJlZU1hbmFnZXIu
anMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJDb250cm9sbGVycy9EZWJ1Z2dlck1hbmFn
ZXIuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJDb250cm9sbGVycy9GcmFtZVJlc291
cmNlTWFuYWdlci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xsZXJzL0lz
c3VlTWFuYWdlci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xsZXJzL0xv
Z01hbmFnZXIuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJDb250cm9sbGVycy9Qcm9i
ZU1hbmFnZXIuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJDb250cm9sbGVycy9SZXBs
YXlNYW5hZ2VyLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iQ29udHJvbGxlcnMvUnVu
dGltZU1hbmFnZXIuanMiPjwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvVmlld3MvQ29uc29sZUNvbW1hbmQuanMgYi9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Db25zb2xlQ29tbWFuZFZpZXcuanMKc2ltaWxh
cml0eSBpbmRleCA2MCUKcmVuYW1lIGZyb20gU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvVmlld3MvQ29uc29sZUNvbW1hbmQuanMKcmVuYW1lIHRvIFNvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0NvbnNvbGVDb21tYW5kVmlldy5qcwppbmRleCBhOWM1
M2Y4Li43ZDQ5ODRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9WaWV3cy9Db25zb2xlQ29tbWFuZC5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9WaWV3cy9Db25zb2xlQ29tbWFuZFZpZXcuanMKQEAgLTI3LDU2ICsyNyw0
OCBAQAogICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi1XZWJJbnNwZWN0b3IuQ29uc29sZUNvbW1hbmQgPSBm
dW5jdGlvbihjb21tYW5kKQorV2ViSW5zcGVjdG9yLkNvbnNvbGVDb21tYW5kVmlldyA9IGNsYXNz
IENvbnNvbGVDb21tYW5kVmlldyBleHRlbmRzIFdlYkluc3BlY3Rvci5PYmplY3QKIHsKLSAgICAv
LyBGSVhNRTogQ29udmVydCB0aGlzIHRvIGEgV2ViSW5zcGVjdG9yLk9iamVjdCBzdWJjbGFzcywg
YW5kIGNhbGwgc3VwZXIoKS4KLSAgICAvLyBXZWJJbnNwZWN0b3IuT2JqZWN0LmNhbGwodGhpcyk7
CisgICAgY29uc3RydWN0b3IoY29tbWFuZFRleHQpCisgICAgeworICAgICAgICBzdXBlcigpOwog
Ci0gICAgdGhpcy5jb21tYW5kID0gY29tbWFuZDsKLX07CisgICAgICAgIHRoaXMuX2NvbW1hbmRU
ZXh0ID0gY29tbWFuZFRleHQ7CiAKLVdlYkluc3BlY3Rvci5Db25zb2xlQ29tbWFuZC5wcm90b3R5
cGUgPSB7Ci0gICAgY29uc3RydWN0b3I6IFdlYkluc3BlY3Rvci5Db25zb2xlQ29tbWFuZCwKLQot
ICAgIC8vIFB1YmxpYwotCi0gICAgZGVjb3JhdGVNZXNzYWdlRWxlbWVudDogZnVuY3Rpb24oZWxl
bWVudCkgewotICAgICAgICBpZiAodGhpcy5fZWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybiB0
aGlzLl9lbGVtZW50OwotCi0gICAgICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50OwotICAgICAg
ICB0aGlzLl9lbGVtZW50LmNvbW1hbmQgPSB0aGlzOworICAgICAgICB0aGlzLl9lbGVtZW50ID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgICAgIHRoaXMuX2VsZW1lbnQuY2xh
c3NMaXN0LmFkZCgiY29uc29sZS11c2VyLWNvbW1hbmQiKTsKICAgICAgICAgdGhpcy5fZWxlbWVu
dC5zZXRBdHRyaWJ1dGUoImRhdGEtbGFiZWxwcmVmaXgiLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmco
IklucHV0OiAiKSk7CiAKLSAgICAgICAgdGhpcy5fZm9ybWF0Q29tbWFuZCgpOwotICAgICAgICB0
aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX2Zvcm1hdHRlZENvbW1hbmQpOworICAgICAg
ICB0aGlzLl9mb3JtYXR0ZWRDb21tYW5kRWxlbWVudCA9IHRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hp
bGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpKTsKKyAgICAgICAgdGhpcy5fZm9ybWF0
dGVkQ29tbWFuZEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiY29uc29sZS1tZXNzYWdlLXRleHQiKTsK
KyAgICAgICAgdGhpcy5fZm9ybWF0dGVkQ29tbWFuZEVsZW1lbnQudGV4dENvbnRlbnQgPSB0aGlz
Ll9jb21tYW5kVGV4dDsKIAorICAgICAgICAvLyBGSVhNRTogTG9nQ29udGVudFZpZXcgc2hvdWxk
IHVzZSBoaWdoZXIgbGV2ZWwgb2JqZWN0cy4KKyAgICAgICAgdGhpcy5fZWxlbWVudC5fX2NvbW1h
bmRWaWV3ID0gdGhpczsKKworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG5vdCBuZWVkIHRv
IGZha2UgYSBDb25zb2xlTWVzc2FnZSBoZXJlLgorICAgICAgICB0aGlzLl9tZXNzYWdlID0gbmV3
IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZTsKKyAgICB9CisKKyAgICAvLyBQdWJsaWMKKwor
ICAgIGdldCBlbGVtZW50KCkKKyAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLl9lbGVtZW50Owot
ICAgIH0sCisgICAgfQogCi0gICAgdG9NZXNzYWdlRWxlbWVudDogZnVuY3Rpb24oKQorICAgIGdl
dCBjb21tYW5kVGV4dCgpCiAgICAgewotICAgICAgICBpZiAodGhpcy5fZWxlbWVudCkKLSAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9lbGVtZW50OworICAgICAgICByZXR1cm4gdGhpcy5fY29tbWFu
ZFRleHQ7CisgICAgfQogCi0gICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgiZGl2Iik7Ci0gICAgICAgIHJldHVybiB0aGlzLmRlY29yYXRlTWVzc2FnZUVsZW1lbnQo
ZWxlbWVudCk7Ci0gICAgfSwKLQotICAgIC8vIFByaXZhdGUKLQotICAgIF9mb3JtYXRDb21tYW5k
OiBmdW5jdGlvbigpCisgICAgZ2V0IG1lc3NhZ2UoKQogICAgIHsKLSAgICAgICAgdGhpcy5fZm9y
bWF0dGVkQ29tbWFuZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKLSAgICAgICAg
dGhpcy5fZm9ybWF0dGVkQ29tbWFuZC5jbGFzc05hbWUgPSAiY29uc29sZS1tZXNzYWdlLXRleHQg
c291cmNlLWNvZGUiOwotICAgICAgICB0aGlzLl9mb3JtYXR0ZWRDb21tYW5kLnRleHRDb250ZW50
ID0gdGhpcy5jb21tYW5kOwotICAgIH0sCisgICAgICAgIHJldHVybiB0aGlzLl9tZXNzYWdlOwor
ICAgIH0KIAotICAgIHRvQ2xpcGJvYXJkU3RyaW5nOiBmdW5jdGlvbihpc1ByZWZpeE9wdGlvbmFs
KQorICAgIHRvQ2xpcGJvYXJkU3RyaW5nKGlzUHJlZml4T3B0aW9uYWwpCiAgICAgewotICAgICAg
ICByZXR1cm4gKGlzUHJlZml4T3B0aW9uYWwgPyAiIiA6ICI+ICIpICsgdGhpcy5jb21tYW5kOwor
ICAgICAgICByZXR1cm4gKGlzUHJlZml4T3B0aW9uYWwgPyAiIiA6ICI+ICIpICsgdGhpcy5fY29t
bWFuZFRleHQ7CiAgICAgfQogfTsKLQotV2ViSW5zcGVjdG9yLkNvbnNvbGVDb21tYW5kLnByb3Rv
dHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlwZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0NvbnNvbGVHcm91
cC5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0NvbnNvbGVH
cm91cC5qcwppbmRleCA5MDU2ZjVmLi44ZTYyMTAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Db25zb2xlR3JvdXAuanMKKysrIGIvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvQ29uc29sZUdyb3VwLmpzCkBAIC0y
NywzMSArMjcsMzUgQEAKICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotV2ViSW5zcGVjdG9yLkNvbnNvbGVH
cm91cCA9IGZ1bmN0aW9uKHBhcmVudEdyb3VwKQorV2ViSW5zcGVjdG9yLkNvbnNvbGVHcm91cCA9
IGNsYXNzIENvbnNvbGVHcm91cCBleHRlbmRzIFdlYkluc3BlY3Rvci5PYmplY3QKIHsKLSAgICAv
LyBGSVhNRTogQ29udmVydCB0aGlzIHRvIGEgV2ViSW5zcGVjdG9yLk9iamVjdCBzdWJjbGFzcywg
YW5kIGNhbGwgc3VwZXIoKS4KLSAgICAvLyBXZWJJbnNwZWN0b3IuT2JqZWN0LmNhbGwodGhpcyk7
CisgICAgY29uc3RydWN0b3IocGFyZW50R3JvdXApCisgICAgeworICAgICAgICBzdXBlcigpOwog
Ci0gICAgdGhpcy5wYXJlbnRHcm91cCA9IHBhcmVudEdyb3VwOwotfTsKLQotV2ViSW5zcGVjdG9y
LkNvbnNvbGVHcm91cC5wcm90b3R5cGUgPSB7Ci0gICAgY29uc3RydWN0b3I6IFdlYkluc3BlY3Rv
ci5Db25zb2xlR3JvdXAsCisgICAgICAgIHRoaXMuX3BhcmVudEdyb3VwID0gcGFyZW50R3JvdXA7
CisgICAgfQogCiAgICAgLy8gUHVibGljCiAKLSAgICByZW5kZXI6IGZ1bmN0aW9uKG1lc3NhZ2Up
CisgICAgZ2V0IHBhcmVudEdyb3VwKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9wYXJl
bnRHcm91cDsKKyAgICB9CisKKyAgICByZW5kZXIobWVzc2FnZVZpZXcpCiAgICAgewogICAgICAg
ICB2YXIgZ3JvdXBFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAg
ICAgIGdyb3VwRWxlbWVudC5jbGFzc05hbWUgPSAiY29uc29sZS1ncm91cCI7CiAgICAgICAgIGdy
b3VwRWxlbWVudC5ncm91cCA9IHRoaXM7CiAgICAgICAgIHRoaXMuZWxlbWVudCA9IGdyb3VwRWxl
bWVudDsKIAotICAgICAgICB2YXIgdGl0bGVFbGVtZW50ID0gbWVzc2FnZS50b01lc3NhZ2VFbGVt
ZW50KCk7CisgICAgICAgIHZhciB0aXRsZUVsZW1lbnQgPSBtZXNzYWdlVmlldy5lbGVtZW50Owog
ICAgICAgICB0aXRsZUVsZW1lbnQuY2xhc3NMaXN0LmFkZChXZWJJbnNwZWN0b3IuTG9nQ29udGVu
dFZpZXcuSXRlbVdyYXBwZXJTdHlsZUNsYXNzTmFtZSk7CiAgICAgICAgIHRpdGxlRWxlbWVudC5h
ZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX3RpdGxlQ2xpY2tlZC5iaW5kKHRoaXMpKTsK
ICAgICAgICAgdGl0bGVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIHRoaXMu
X3RpdGxlTW91c2VEb3duLmJpbmQodGhpcykpOwotICAgICAgICBpZiAoZ3JvdXBFbGVtZW50ICYm
IG1lc3NhZ2UudHlwZSA9PT0gV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlLk1lc3Nh
Z2VUeXBlLlN0YXJ0R3JvdXBDb2xsYXBzZWQpCisKKyAgICAgICAgaWYgKGdyb3VwRWxlbWVudCAm
JiBtZXNzYWdlVmlldy5tZXNzYWdlLnR5cGUgPT09IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2Fn
ZS5NZXNzYWdlVHlwZS5TdGFydEdyb3VwQ29sbGFwc2VkKQogICAgICAgICAgICAgZ3JvdXBFbGVt
ZW50LmNsYXNzTGlzdC5hZGQoImNvbGxhcHNlZCIpOwogCiAgICAgICAgIGdyb3VwRWxlbWVudC5h
cHBlbmRDaGlsZCh0aXRsZUVsZW1lbnQpOwpAQCAtNjIsMjggKzY2LDI4IEBAIFdlYkluc3BlY3Rv
ci5Db25zb2xlR3JvdXAucHJvdG90eXBlID0gewogICAgICAgICBncm91cEVsZW1lbnQuYXBwZW5k
Q2hpbGQobWVzc2FnZXNFbGVtZW50KTsKIAogICAgICAgICByZXR1cm4gZ3JvdXBFbGVtZW50Owot
ICAgIH0sCisgICAgfQogCi0gICAgYWRkTWVzc2FnZTogZnVuY3Rpb24obWVzc2FnZSkKKyAgICBh
ZGRNZXNzYWdlVmlldyhtZXNzYWdlVmlldykKICAgICB7Ci0gICAgICAgIHZhciBlbGVtZW50ID0g
bWVzc2FnZS50b01lc3NhZ2VFbGVtZW50KCk7CisgICAgICAgIHZhciBlbGVtZW50ID0gbWVzc2Fn
ZVZpZXcuZWxlbWVudDsKICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKFdlYkluc3BlY3Rv
ci5Mb2dDb250ZW50Vmlldy5JdGVtV3JhcHBlclN0eWxlQ2xhc3NOYW1lKTsKICAgICAgICAgdGhp
cy5hcHBlbmQoZWxlbWVudCk7Ci0gICAgfSwKKyAgICB9CiAKLSAgICBhcHBlbmQ6IGZ1bmN0aW9u
KG1lc3NhZ2VFbGVtZW50KQorICAgIGFwcGVuZChtZXNzYWdlT3JHcm91cEVsZW1lbnQpCiAgICAg
ewotICAgICAgICB0aGlzLl9tZXNzYWdlc0VsZW1lbnQuYXBwZW5kQ2hpbGQobWVzc2FnZUVsZW1l
bnQpOwotICAgIH0sCisgICAgICAgIHRoaXMuX21lc3NhZ2VzRWxlbWVudC5hcHBlbmRDaGlsZCht
ZXNzYWdlT3JHcm91cEVsZW1lbnQpOworICAgIH0KIAogICAgIC8vIFByaXZhdGUKIAotICAgIF90
aXRsZU1vdXNlRG93bjogZnVuY3Rpb24oZXZlbnQpCisgICAgX3RpdGxlTW91c2VEb3duKGV2ZW50
KQogICAgIHsKICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKLSAgICB9LAorICAgIH0K
IAotICAgIF90aXRsZUNsaWNrZWQ6IGZ1bmN0aW9uKGV2ZW50KQorICAgIF90aXRsZUNsaWNrZWQo
ZXZlbnQpCiAgICAgewogICAgICAgICB2YXIgZ3JvdXBUaXRsZUVsZW1lbnQgPSBldmVudC50YXJn
ZXQuZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhDbGFzcygiY29uc29sZS1ncm91cC10aXRsZSIpOwog
ICAgICAgICBpZiAoZ3JvdXBUaXRsZUVsZW1lbnQpIHsKQEAgLTk3LDUgKzEwMSwzIEBAIFdlYklu
c3BlY3Rvci5Db25zb2xlR3JvdXAucHJvdG90eXBlID0gewogICAgICAgICB9CiAgICAgfQogfTsK
LQotV2ViSW5zcGVjdG9yLkNvbnNvbGVHcm91cC5wcm90b3R5cGUuX19wcm90b19fID0gV2ViSW5z
cGVjdG9yLk9iamVjdC5wcm90b3R5cGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9WaWV3cy9Db25zb2xlTWVzc2FnZVZpZXcuanMgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Db25zb2xlTWVzc2FnZVZpZXcuanMKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODcyMTZjNwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0NvbnNvbGVNZXNz
YWdlVmlldy5qcwpAQCAtMCwwICsxLDY3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBH
b29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNywg
MjAwOCwgMjAxMy0yMDE1IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgSm9zZXBoIFBlY29yYXJvCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAg
TmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9m
CisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCitXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2VWaWV3ID0gY2xh
c3MgQ29uc29sZU1lc3NhZ2VWaWV3IGV4dGVuZHMgV2ViSW5zcGVjdG9yLk9iamVjdAoreworICAg
IGNvbnN0cnVjdG9yKG1lc3NhZ2UpCisgICAgeworICAgICAgICBzdXBlcigpOworCisgICAgICAg
IGNvbnNvbGUuYXNzZXJ0KG1lc3NhZ2UgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuQ29uc29sZU1l
c3NhZ2UpOworCisgICAgICAgIHRoaXMuX21lc3NhZ2UgPSBtZXNzYWdlOworCisgICAgICAgIHRo
aXMuX2VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgdGhp
cy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjb25zb2xlLW1lc3NhZ2UiKTsKKworICAgICAgICAv
LyBGSVhNRTogTG9nQ29udGVudFZpZXcgc2hvdWxkIHVzZSBoaWdoZXIgbGV2ZWwgb2JqZWN0cy4K
KyAgICAgICAgdGhpcy5fZWxlbWVudC5fX21lc3NhZ2UgPSB0aGlzLl9tZXNzYWdlOworICAgICAg
ICB0aGlzLl9lbGVtZW50Ll9fbWVzc2FnZVZpZXcgPSB0aGlzOworCisgICAgICAgIHN3aXRjaCAo
dGhpcy5fbWVzc2FnZS5sZXZlbCkgeworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xl
TWVzc2FnZS5NZXNzYWdlTGV2ZWwuVGlwOiAvLyBDT01QQVRJQklMSVRZIChpT1MgNikuCisgICAg
ICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5Mb2c6Cisg
ICAgICAgICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoImNvbnNvbGUtbG9nLWxldmVs
Iik7CisgICAgICAgICAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgiZGF0YS1sYWJlbHBy
ZWZpeCIsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiTG9nOiAiKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVs
LkRlYnVnOgorICAgICAgICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjb25zb2xl
LWRlYnVnLWxldmVsIik7CisgICAgICAgICAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgi
ZGF0YS1sYWJlbHByZWZpeCIsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiRGVidWc6ICIpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2Fn
ZS5NZXNzYWdlTGV2ZWwuV2FybmluZzoKKyAgICAgICAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NM
aXN0LmFkZCgiY29uc29sZS13YXJuaW5nLWxldmVsIik7CisgICAgICAgICAgICB0aGlzLl9lbGVt
ZW50LnNldEF0dHJpYnV0ZSgiZGF0YS1sYWJlbHByZWZpeCIsIFdlYkluc3BlY3Rvci5VSVN0cmlu
ZygiV2FybmluZzogIikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5z
cGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5FcnJvcjoKKyAgICAgICAgICAgIHRo
aXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZCgiY29uc29sZS1lcnJvci1sZXZlbCIpOworICAgICAg
ICAgICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoImRhdGEtbGFiZWxwcmVmaXgiLCBXZWJJ
bnNwZWN0b3IuVUlTdHJpbmcoIkVycm9yOiAiKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmICh0aGlzLl9tZXNzYWdlLnR5cGUgPT09IFdlYkluc3BlY3Rvci5D
b25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5SZXN1bHQpIHsKKyAgICAgICAgICAgIHRoaXMuX2Vs
ZW1lbnQuY2xhc3NMaXN0LmFkZCgiY29uc29sZS11c2VyLWNvbW1hbmQtcmVzdWx0Iik7CisgICAg
ICAgICAgICBpZiAoIXRoaXMuX2VsZW1lbnQuZ2V0QXR0cmlidXRlKCJkYXRhLWxhYmVscHJlZml4
IikpCisgICAgICAgICAgICAgICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoImRhdGEtbGFi
ZWxwcmVmaXgiLCBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIk91dHB1dDogIikpOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKHRoaXMuX21lc3NhZ2UudHlwZSA9PT0gV2ViSW5zcGVjdG9yLkNvbnNv
bGVNZXNzYWdlLk1lc3NhZ2VUeXBlLlN0YXJ0R3JvdXAgfHwgdGhpcy5fbWVzc2FnZS50eXBlID09
PSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuU3RhcnRHcm91cENvbGxh
cHNlZCkKKyAgICAgICAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZCgiY29uc29sZS1n
cm91cC10aXRsZSIpOworCisgICAgICAgIHRoaXMuX2FwcGVuZExvY2F0aW9uTGluaygpOworCisg
ICAgICAgIHRoaXMuX21lc3NhZ2VUZXh0RWxlbWVudCA9IHRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hp
bGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpKTsKKyAgICAgICAgdGhpcy5fbWVzc2Fn
ZVRleHRFbGVtZW50LmNsYXNzTGlzdC5hZGQoImNvbnNvbGUtbWVzc2FnZS10ZXh0Iik7CisgICAg
ICAgIHRoaXMuX2FwcGVuZE1lc3NhZ2VUZXh0QW5kQXJndW1lbnRzKHRoaXMuX21lc3NhZ2VUZXh0
RWxlbWVudCk7CisgICAgICAgIHRoaXMuX2FwcGVuZFNhdmVkUmVzdWx0SW5kZXgoKTsKKworICAg
ICAgICB0aGlzLl9hcHBlbmRQYXJhbWV0ZXJzKCk7CisgICAgICAgIHRoaXMuX2FwcGVuZFN0YWNr
VHJhY2UoKTsKKworICAgICAgICB0aGlzLnJlcGVhdENvdW50ID0gdGhpcy5fbWVzc2FnZS5yZXBl
YXRDb3VudDsKKyAgICB9CisKKyAgICAvLyBQdWJsaWMKKworICAgIGdldCBlbGVtZW50KCkKKyAg
ICB7CisgICAgICAgIHJldHVybiB0aGlzLl9lbGVtZW50OworICAgIH0KKworICAgIGdldCBtZXNz
YWdlKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9tZXNzYWdlOworICAgIH0KKyAgICAK
KyAgICBnZXQgcmVwZWF0Q291bnQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3JlcGVh
dENvdW50OworICAgIH0KKworICAgIHNldCByZXBlYXRDb3VudChjb3VudCkKKyAgICB7CisgICAg
ICAgIGNvbnNvbGUuYXNzZXJ0KHR5cGVvZiBjb3VudCA9PT0gIm51bWJlciIpOworCisgICAgICAg
IGlmICh0aGlzLl9yZXBlYXRDb3VudCA9PT0gY291bnQpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgdGhpcy5fcmVwZWF0Q291bnQgPSBjb3VudDsKKworICAgICAgICBpZiAoY291bnQg
PD0gMSkgeworICAgICAgICAgICAgaWYgKHRoaXMuX3JlcGVhdENvdW50RWxlbWVudCkgeworICAg
ICAgICAgICAgICAgIHRoaXMuX3JlcGVhdENvdW50RWxlbWVudC5yZW1vdmUoKTsKKyAgICAgICAg
ICAgICAgICB0aGlzLl9yZXBlYXRDb3VudEVsZW1lbnQgPSBudWxsOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCF0aGlzLl9yZXBl
YXRDb3VudEVsZW1lbnQpIHsKKyAgICAgICAgICAgIHRoaXMuX3JlcGVhdENvdW50RWxlbWVudCA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICAgICAgICAgIHRoaXMuX3JlcGVh
dENvdW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKCJyZXBlYXQtY291bnQiKTsKKyAgICAgICAgICAg
IHRoaXMuX2VsZW1lbnQuaW5zZXJ0QmVmb3JlKHRoaXMuX3JlcGVhdENvdW50RWxlbWVudCwgdGhp
cy5fZWxlbWVudC5maXJzdENoaWxkKTsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuX3JlcGVh
dENvdW50RWxlbWVudC50ZXh0Q29udGVudCA9IGNvdW50OworICAgIH0KKworICAgIHRvQ2xpcGJv
YXJkU3RyaW5nKGlzUHJlZml4T3B0aW9uYWwpCisgICAgeworICAgICAgICB2YXIgY2xpcGJvYXJk
U3RyaW5nID0gdGhpcy5fbWVzc2FnZVRleHRFbGVtZW50LmlubmVyVGV4dDsKKworICAgICAgICBp
ZiAodGhpcy5fbWVzc2FnZS50eXBlID09PSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVz
c2FnZVR5cGUuVHJhY2UpCisgICAgICAgICAgICBjbGlwYm9hcmRTdHJpbmcgPSAiY29uc29sZS50
cmFjZSgpIjsKKworICAgICAgICB2YXIgaGFzU3RhY2tUcmFjZSA9IHRoaXMuX3Nob3VsZFNob3dT
dGFja1RyYWNlKCk7CisgICAgICAgIGlmIChoYXNTdGFja1RyYWNlKSB7CisgICAgICAgICAgICB0
aGlzLl9tZXNzYWdlLnN0YWNrVHJhY2UuZm9yRWFjaChmdW5jdGlvbihmcmFtZSkgeworICAgICAg
ICAgICAgICAgIGNsaXBib2FyZFN0cmluZyArPSAiXG5cdCIgKyAoZnJhbWUuZnVuY3Rpb25OYW1l
IHx8IFdlYkluc3BlY3Rvci5VSVN0cmluZygiKGFub255bW91cyBmdW5jdGlvbikiKSk7CisgICAg
ICAgICAgICAgICAgaWYgKGZyYW1lLnVybCkKKyAgICAgICAgICAgICAgICAgICAgY2xpcGJvYXJk
U3RyaW5nICs9ICIgKCIgKyBXZWJJbnNwZWN0b3IuZGlzcGxheU5hbWVGb3JVUkwoZnJhbWUudXJs
KSArICIsIGxpbmUgIiArIGZyYW1lLmxpbmVOdW1iZXIgKyAiKSI7CisgICAgICAgICAgICB9KTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhciByZXBlYXRTdHJpbmcgPSB0aGlzLnJl
cGVhdENvdW50ID4gMSA/ICJ4IiArIHRoaXMucmVwZWF0Q291bnQgOiAiIjsKKyAgICAgICAgICAg
IHZhciB1cmxMaW5lID0gIiI7CisgICAgICAgICAgICBpZiAodGhpcy5fbWVzc2FnZS51cmwpIHsK
KyAgICAgICAgICAgICAgICB2YXIgY29tcG9uZW50cyA9IFtXZWJJbnNwZWN0b3IuZGlzcGxheU5h
bWVGb3JVUkwodGhpcy5fbWVzc2FnZS51cmwpLCAibGluZSAiICsgdGhpcy5fbWVzc2FnZS5saW5l
XTsKKyAgICAgICAgICAgICAgICBpZiAocmVwZWF0U3RyaW5nKQorICAgICAgICAgICAgICAgICAg
ICBjb21wb25lbnRzLnB1c2gocmVwZWF0U3RyaW5nKTsKKyAgICAgICAgICAgICAgICB1cmxMaW5l
ID0gIiAoIiArIGNvbXBvbmVudHMuam9pbigiLCAiKSArICIpIjsKKyAgICAgICAgICAgIH0gZWxz
ZSBpZiAocmVwZWF0U3RyaW5nKQorICAgICAgICAgICAgICAgIHVybExpbmUgPSAiICgiICsgcmVw
ZWF0U3RyaW5nICsgIikiOworCisgICAgICAgICAgICBpZiAodXJsTGluZSkgeworICAgICAgICAg
ICAgICAgIHZhciBsaW5lcyA9IGNsaXBib2FyZFN0cmluZy5zcGxpdCgiXG4iKTsKKyAgICAgICAg
ICAgICAgICBsaW5lc1swXSArPSB1cmxMaW5lOworICAgICAgICAgICAgICAgIGNsaXBib2FyZFN0
cmluZyA9IGxpbmVzLmpvaW4oIlxuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoIWlzUHJlZml4T3B0aW9uYWwgfHwgdGhpcy5fZW5mb3JjZXNDbGlwYm9hcmRQcmVm
aXhTdHJpbmcoKSkKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9jbGlwYm9hcmRQcmVmaXhTdHJp
bmcoKSArIGNsaXBib2FyZFN0cmluZzsKKyAgICAgICAgcmV0dXJuIGNsaXBib2FyZFN0cmluZzsK
KyAgICB9CisKKyAgICAvLyBQcml2YXRlCisKKyAgICBfYXBwZW5kTWVzc2FnZVRleHRBbmRBcmd1
bWVudHMoZWxlbWVudCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9tZXNzYWdlLnNvdXJjZSA9
PT0gV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VTb3VyY2UuQ29uc29sZUFQSSkg
eworICAgICAgICAgICAgc3dpdGNoICh0aGlzLl9tZXNzYWdlLnR5cGUpIHsKKyAgICAgICAgICAg
IGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLlRyYWNlOgorICAg
ICAgICAgICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUo
ImNvbnNvbGUudHJhY2UoKSIpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAg
ICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuQXNzZXJ0Ogor
ICAgICAgICAgICAgICAgIHZhciBhcmdzID0gW1dlYkluc3BlY3Rvci5VSVN0cmluZygiQXNzZXJ0
aW9uIGZhaWxlZDoiKV07CisgICAgICAgICAgICAgICAgaWYgKHRoaXMuX21lc3NhZ2UucGFyYW1l
dGVycykKKyAgICAgICAgICAgICAgICAgICAgYXJncy5jb25jYXQodGhpcy5fbWVzc2FnZS5wYXJh
bWV0ZXJzKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9hcHBlbmRGb3JtYXR0ZWRBcmd1bWVudHMo
ZWxlbWVudCwgYXJncyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNh
c2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLkRpcjoKKyAgICAgICAg
ICAgICAgICB2YXIgb2JqID0gdGhpcy5fbWVzc2FnZS5wYXJhbWV0ZXJzID8gdGhpcy5fbWVzc2Fn
ZS5wYXJhbWV0ZXJzWzBdIDogdW5kZWZpbmVkOworICAgICAgICAgICAgICAgIHRoaXMuX2FwcGVu
ZEZvcm1hdHRlZEFyZ3VtZW50cyhlbGVtZW50LCBbIiVPIiwgb2JqXSk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdl
Lk1lc3NhZ2VUeXBlLlRhYmxlOgorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgbWVz
c2FnZVRleHQ/CisgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSB0aGlzLl9tZXNzYWdlLnBhcmFt
ZXRlcnMgfHwgW3RoaXMuX21lc3NhZ2UubWVzc2FnZVRleHRdOworICAgICAgICAgICAgICAgIGVs
ZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fZm9ybWF0UGFyYW1ldGVyQXNUYWJsZShhcmdzKSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgdmFyIGFyZ3MgPSB0aGlzLl9tZXNzYWdlLnBhcmFtZXRlcnMgfHwgW3RoaXMuX21lc3Nh
Z2UubWVzc2FnZVRleHRdOworICAgICAgICAgICAgICAgIHRoaXMuX2FwcGVuZEZvcm1hdHRlZEFy
Z3VtZW50cyhlbGVtZW50LCBhcmdzKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1F
OiBCZXR0ZXIgaGFuZGxlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNl
Lk5ldHdvcmsuCisKKyAgICAgICAgdmFyIGFyZ3MgPSB0aGlzLl9tZXNzYWdlLnBhcmFtZXRlcnMg
fHwgW3RoaXMuX21lc3NhZ2UubWVzc2FnZVRleHRdOworICAgICAgICB0aGlzLl9hcHBlbmRGb3Jt
YXR0ZWRBcmd1bWVudHMoZWxlbWVudCwgYXJncyk7CisgICAgfQorCisgICAgX2FwcGVuZFNhdmVk
UmVzdWx0SW5kZXgoZWxlbWVudCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5fbWVzc2FnZS5z
YXZlZFJlc3VsdEluZGV4KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNvbnNvbGUu
YXNzZXJ0KHRoaXMuX21lc3NhZ2UgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuQ29uc29sZUNvbW1h
bmRSZXN1bHRNZXNzYWdlKTsKKyAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5fbWVzc2FnZS50
eXBlID09PSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuUmVzdWx0KTsK
KworICAgICAgICB2YXIgc2F2ZWRWYXJpYWJsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJzcGFuIik7CisgICAgICAgIHNhdmVkVmFyaWFibGVFbGVtZW50LmNsYXNzTGlzdC5hZGQo
ImNvbnNvbGUtc2F2ZWQtdmFyaWFibGUiKTsKKyAgICAgICAgc2F2ZWRWYXJpYWJsZUVsZW1lbnQu
dGV4dENvbnRlbnQgPSAiID0gJCIgKyB0aGlzLl9tZXNzYWdlLnNhdmVkUmVzdWx0SW5kZXg7CisK
KyAgICAgICAgaWYgKHRoaXMuX29iamVjdFRyZWUpCisgICAgICAgICAgICB0aGlzLl9vYmplY3RU
cmVlLmFwcGVuZFRpdGxlU3VmZml4KHNhdmVkVmFyaWFibGVFbGVtZW50KTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgdGhpcy5fbWVzc2FnZVRleHRFbGVtZW50LmFwcGVuZENoaWxkKHNhdmVk
VmFyaWFibGVFbGVtZW50KTsKKyAgICB9ICAgIAorCisgICAgX2FwcGVuZExvY2F0aW9uTGluaygp
CisgICAgeworICAgICAgICAvLyBGSVhNRTogQmV0dGVyIGhhbmRsZSBXZWJJbnNwZWN0b3IuQ29u
c29sZU1lc3NhZ2UuTWVzc2FnZVNvdXJjZS5OZXR3b3JrLgorICAgICAgICBpZiAodGhpcy5fbWVz
c2FnZS5zb3VyY2UgPT09IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNl
Lk5ldHdvcmsgfHwgdGhpcy5fbWVzc2FnZS5yZXF1ZXN0KQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIHZhciBmaXJzdE5vbk5hdGl2ZUNhbGxGcmFtZSA9IHRoaXMuX2ZpcnN0Tm9uTmF0
aXZlQ2FsbEZyYW1lKCk7CisgICAgICAgIGlmIChmaXJzdE5vbk5hdGl2ZUNhbGxGcmFtZSkgewor
ICAgICAgICAgICAgdmFyIHVybEVsZW1lbnQgPSB0aGlzLl9saW5raWZ5Q2FsbEZyYW1lKGZpcnN0
Tm9uTmF0aXZlQ2FsbEZyYW1lKTsKKyAgICAgICAgICAgIHRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hp
bGQodXJsRWxlbWVudCk7CisgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fbWVzc2FnZS51cmwgJiYg
IXRoaXMuX3Nob3VsZEhpZGVVUkwodGhpcy5fbWVzc2FnZS51cmwpKSB7CisgICAgICAgICAgICB2
YXIgdXJsRWxlbWVudCA9IHRoaXMuX2xpbmtpZnlMb2NhdGlvbih0aGlzLl9tZXNzYWdlLnVybCwg
dGhpcy5fbWVzc2FnZS5saW5lLCB0aGlzLl9tZXNzYWdlLmNvbHVtbik7CisgICAgICAgICAgICB0
aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKHVybEVsZW1lbnQpOworICAgICAgICB9CisgICAgfQor
CisgICAgX2FwcGVuZFBhcmFtZXRlcnMoKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IFRvIGJl
IGltcGxlbWVudGVkIGZvciB0aGUgbmV3IENvbnNvbGUgZGVzaWduLgorICAgIH0KKworICAgIF9h
cHBlbmRTdGFja1RyYWNlKCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBUbyBiZSByZS13cml0
dGVuIGluIHRoZSBuZXcgQ29uc29sZSBkZXNpZ24uCisKKyAgICAgICAgaWYgKCF0aGlzLl9zaG91
bGRTaG93U3RhY2tUcmFjZSgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBv
bCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm9sIik7CisgICAgICAgIG9sLmNsYXNzTmFtZSA9
ICJvdXRsaW5lLWRpc2Nsb3N1cmUiOworICAgICAgICB2YXIgdHJlZU91dGxpbmUgPSBuZXcgV2Vi
SW5zcGVjdG9yLlRyZWVPdXRsaW5lKG9sKTsKKyAgICAgICAgdmFyIHJvb3QgPSBuZXcgV2ViSW5z
cGVjdG9yLlRyZWVFbGVtZW50KHRoaXMuX21lc3NhZ2VUZXh0RWxlbWVudCwgbnVsbCwgdHJ1ZSk7
CisgICAgICAgIHRyZWVPdXRsaW5lLmFwcGVuZENoaWxkKHJvb3QpOworCisgICAgICAgIGlmICh0
aGlzLl9tZXNzYWdlLnR5cGUgPT09IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdl
VHlwZS5UcmFjZSkKKyAgICAgICAgICAgIHJvb3QuZXhwYW5kKCk7CisKKyAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCB0aGlzLl9tZXNzYWdlLnN0YWNrVHJhY2UubGVuZ3RoOyBpKyspIHsKKyAg
ICAgICAgICAgIHZhciBmcmFtZSA9IHRoaXMuX21lc3NhZ2Uuc3RhY2tUcmFjZVtpXTsKKworICAg
ICAgICAgICAgdmFyIGNvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAg
ICAgICAgICAgIHZhciBtZXNzYWdlVGV4dEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJzcGFuIik7CisgICAgICAgICAgICBtZXNzYWdlVGV4dEVsZW1lbnQuY2xhc3NOYW1lID0gImNv
bnNvbGUtbWVzc2FnZS10ZXh0IjsKKyAgICAgICAgICAgIHZhciBmdW5jdGlvbk5hbWUgPSBmcmFt
ZS5mdW5jdGlvbk5hbWUgfHwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIoYW5vbnltb3VzIGZ1bmN0
aW9uKSIpOworICAgICAgICAgICAgbWVzc2FnZVRleHRFbGVtZW50LmFwcGVuZENoaWxkKGRvY3Vt
ZW50LmNyZWF0ZVRleHROb2RlKGZ1bmN0aW9uTmFtZSkpOworICAgICAgICAgICAgY29udGVudC5h
cHBlbmRDaGlsZChtZXNzYWdlVGV4dEVsZW1lbnQpOworCisgICAgICAgICAgICBpZiAoZnJhbWUu
dXJsICYmICF0aGlzLl9zaG91bGRIaWRlVVJMKGZyYW1lLnVybCkpIHsKKyAgICAgICAgICAgICAg
ICB2YXIgdXJsRWxlbWVudCA9IHRoaXMuX2xpbmtpZnlDYWxsRnJhbWUoZnJhbWUpOworICAgICAg
ICAgICAgICAgIGNvbnRlbnQuYXBwZW5kQ2hpbGQodXJsRWxlbWVudCk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHZhciB0cmVlRWxlbWVudCA9IG5ldyBXZWJJbnNwZWN0b3IuVHJlZUVs
ZW1lbnQoY29udGVudCk7CisgICAgICAgICAgICByb290LmFwcGVuZENoaWxkKHRyZWVFbGVtZW50
KTsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMuX21lc3NhZ2VUZXh0RWxlbWVudCA9IG9sOwor
ICAgICAgICB0aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX21lc3NhZ2VUZXh0RWxlbWVu
dCk7CisgICAgfQorCisgICAgX2FwcGVuZEZvcm1hdHRlZEFyZ3VtZW50cyhlbGVtZW50LCBwYXJh
bWV0ZXJzKQorICAgIHsKKyAgICAgICAgaWYgKCFwYXJhbWV0ZXJzLmxlbmd0aCkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICAvLyBGSVhNRTogT25seSBwYXNzIFJlbW90ZU9iamVjdHMg
aGVyZSBzbyB3ZSBjYW4gYXZvaWQgdGhpcyB3b3JrLgorICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IHBhcmFtZXRlcnMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJz
W2ldIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdCkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXJhbWV0ZXJzW2ldID09PSAi
b2JqZWN0IikKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzW2ldID0gV2ViSW5zcGVjdG9yLlJl
bW90ZU9iamVjdC5mcm9tUGF5bG9hZChwYXJhbWV0ZXJzW2ldKTsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzW2ldID0gV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVj
dC5mcm9tUHJpbWl0aXZlVmFsdWUocGFyYW1ldGVyc1tpXSk7CisgICAgICAgIH0KKworICAgICAg
ICB2YXIgYnVpbGRlckVsZW1lbnQgPSBlbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoInNwYW4iKSk7CisKKyAgICAgICAgLy8gRm9ybWF0IHN0cmluZy4KKyAgICAgICAg
dmFyIHNob3VsZEZvcm1hdFdpdGhTdHJpbmdTdWJzdGl0dXRpb24gPSBXZWJJbnNwZWN0b3IuUmVt
b3RlT2JqZWN0LnR5cGUocGFyYW1ldGVyc1swXSkgPT09ICJzdHJpbmciICYmIHRoaXMuX21lc3Nh
Z2UudHlwZSAhPT0gV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLlJlc3Vs
dDsKKyAgICAgICAgaWYgKHNob3VsZEZvcm1hdFdpdGhTdHJpbmdTdWJzdGl0dXRpb24pIHsKKyAg
ICAgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLl9mb3JtYXRXaXRoU3Vic3RpdHV0aW9uU3RyaW5n
KHBhcmFtZXRlcnMsIGJ1aWxkZXJFbGVtZW50KTsKKyAgICAgICAgICAgIHBhcmFtZXRlcnMgPSBy
ZXN1bHQudW51c2VkU3Vic3RpdHV0aW9uczsKKyAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJzLmxl
bmd0aCkKKyAgICAgICAgICAgICAgICBidWlsZGVyRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVu
dC5jcmVhdGVUZXh0Tm9kZSgiICIpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEluZGl2aWR1
YWwgb2JqZWN0cy4KKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLmxlbmd0
aDsgKytpKSB7CisgICAgICAgICAgICBidWlsZGVyRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9m
b3JtYXRQYXJhbWV0ZXIocGFyYW1ldGVyc1tpXSwgZmFsc2UpKTsKKyAgICAgICAgICAgIGlmIChp
IDwgcGFyYW1ldGVycy5sZW5ndGggLSAxKQorICAgICAgICAgICAgICAgIGJ1aWxkZXJFbGVtZW50
LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIgIikpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgX2Zvcm1hdFBhcmFtZXRlcihwYXJhbWV0ZXIsIGZvcmNlT2JqZWN0Rm9ybWF0
KQorICAgIHsKKyAgICAgICAgdmFyIHR5cGU7CisgICAgICAgIGlmIChmb3JjZU9iamVjdEZvcm1h
dCkKKyAgICAgICAgICAgIHR5cGUgPSAib2JqZWN0IjsKKyAgICAgICAgZWxzZSBpZiAocGFyYW1l
dGVyIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdCkKKyAgICAgICAgICAgIHR5
cGUgPSBwYXJhbWV0ZXIuc3VidHlwZSB8fCBwYXJhbWV0ZXIudHlwZTsKKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICBjb25zb2xlLmFzc2VydChmYWxzZSwgIm5vIGxvbmdlciByZWFjaGFibGUi
KTsKKyAgICAgICAgICAgIHR5cGUgPSB0eXBlb2YgcGFyYW1ldGVyOworICAgICAgICB9CisKKyAg
ICAgICAgdmFyIGZvcm1hdHRlcnMgPSB7CisgICAgICAgICAgICAib2JqZWN0IjogdGhpcy5fZm9y
bWF0UGFyYW1ldGVyQXNPYmplY3QsCisgICAgICAgICAgICAiZXJyb3IiOiB0aGlzLl9mb3JtYXRQ
YXJhbWV0ZXJBc09iamVjdCwKKyAgICAgICAgICAgICJtYXAiOiB0aGlzLl9mb3JtYXRQYXJhbWV0
ZXJBc09iamVjdCwKKyAgICAgICAgICAgICJzZXQiOiB0aGlzLl9mb3JtYXRQYXJhbWV0ZXJBc09i
amVjdCwKKyAgICAgICAgICAgICJ3ZWFrbWFwIjogdGhpcy5fZm9ybWF0UGFyYW1ldGVyQXNPYmpl
Y3QsCisgICAgICAgICAgICAiaXRlcmF0b3IiOiB0aGlzLl9mb3JtYXRQYXJhbWV0ZXJBc09iamVj
dCwKKyAgICAgICAgICAgICJjbGFzcyI6IHRoaXMuX2Zvcm1hdFBhcmFtZXRlckFzT2JqZWN0LAor
ICAgICAgICAgICAgImFycmF5IjogdGhpcy5fZm9ybWF0UGFyYW1ldGVyQXNBcnJheSwKKyAgICAg
ICAgICAgICJub2RlIjogdGhpcy5fZm9ybWF0UGFyYW1ldGVyQXNOb2RlLAorICAgICAgICAgICAg
InN0cmluZyI6IHRoaXMuX2Zvcm1hdFBhcmFtZXRlckFzU3RyaW5nLAorICAgICAgICB9OworICAg
ICAgICB2YXIgZm9ybWF0dGVyID0gZm9ybWF0dGVyc1t0eXBlXSB8fCB0aGlzLl9mb3JtYXRQYXJh
bWV0ZXJBc1ZhbHVlOworCisgICAgICAgIHZhciBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgic3BhbiIpOworICAgICAgICBmb3JtYXR0ZXIuY2FsbCh0aGlzLCBwYXJhbWV0ZXIsIHNwYW4s
IGZvcmNlT2JqZWN0Rm9ybWF0KTsKKyAgICAgICAgcmV0dXJuIHNwYW47CisgICAgfQorCisgICAg
X2Zvcm1hdFBhcmFtZXRlckFzVmFsdWUodmFsdWUsIGVsZW1lbnQpCisgICAgeworICAgICAgICBl
bGVtZW50LmFwcGVuZENoaWxkKFdlYkluc3BlY3Rvci5Gb3JtYXR0ZWRWYWx1ZS5jcmVhdGVFbGVt
ZW50Rm9yUmVtb3RlT2JqZWN0KHZhbHVlKSk7CisgICAgfQorCisgICAgX2Zvcm1hdFBhcmFtZXRl
ckFzU3RyaW5nKG9iamVjdCwgZWxlbWVudCkKKyAgICB7CisgICAgICAgIGVsZW1lbnQuYXBwZW5k
Q2hpbGQoV2ViSW5zcGVjdG9yLkZvcm1hdHRlZFZhbHVlLmNyZWF0ZUxpbmtpZmllZEVsZW1lbnRT
dHJpbmcob2JqZWN0LmRlc2NyaXB0aW9uKSk7CisgICAgfQorCisgICAgX2Zvcm1hdFBhcmFtZXRl
ckFzTm9kZShvYmplY3QsIGVsZW1lbnQpCisgICAgeworICAgICAgICBlbGVtZW50LmFwcGVuZENo
aWxkKFdlYkluc3BlY3Rvci5Gb3JtYXR0ZWRWYWx1ZS5jcmVhdGVFbGVtZW50Rm9yTm9kZShvYmpl
Y3QpKTsKKyAgICB9CisKKyAgICBfZm9ybWF0UGFyYW1ldGVyQXNPYmplY3Qob2JqZWN0LCBlbGVt
ZW50LCBmb3JjZUV4cGFuc2lvbikKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgaGF2
ZSBhIGJldHRlciBPYmplY3RUcmVlVmlldyBtb2RlIGZvciBjbGFzc2VzIChzdGF0aWMgbWV0aG9k
cyBhbmQgbWV0aG9kcykuCisgICAgICAgIC8vIEZJWE1FOiBPbmx5IG5lZWQgdG8gYXNzaWduIHRv
IG9iamVjdFRyZWUgaWYgdGhpcyBpcyBhIENvbnNvbGVNZXNzYWdlUmVzdWx0LiBXZSBzaG91bGQg
YXNzZXJ0IHRoYXQuCisgICAgICAgIHRoaXMuX29iamVjdFRyZWUgPSBuZXcgV2ViSW5zcGVjdG9y
Lk9iamVjdFRyZWVWaWV3KG9iamVjdCwgbnVsbCwgdGhpcy5fcm9vdFByb3BlcnR5UGF0aEZvck9i
amVjdChvYmplY3QpLCBmb3JjZUV4cGFuc2lvbik7CisgICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hp
bGQodGhpcy5fb2JqZWN0VHJlZS5lbGVtZW50KTsKKyAgICB9CisKKyAgICBfZm9ybWF0UGFyYW1l
dGVyQXNBcnJheShhcnJheSwgZWxlbWVudCkKKyAgICB7CisgICAgICAgIHRoaXMuX29iamVjdFRy
ZWUgPSBuZXcgV2ViSW5zcGVjdG9yLk9iamVjdFRyZWVWaWV3KGFycmF5LCBXZWJJbnNwZWN0b3Iu
T2JqZWN0VHJlZVZpZXcuTW9kZS5Qcm9wZXJ0aWVzLCB0aGlzLl9yb290UHJvcGVydHlQYXRoRm9y
T2JqZWN0KGFycmF5KSk7CisgICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5fb2JqZWN0
VHJlZS5lbGVtZW50KTsKKyAgICB9CisKKyAgICBfcm9vdFByb3BlcnR5UGF0aEZvck9iamVjdChv
YmplY3QpCisgICAgeworICAgICAgICBpZiAoIXRoaXMuX21lc3NhZ2Uuc2F2ZWRSZXN1bHRJbmRl
eCkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworCisgICAgICAgIHJldHVybiBuZXcgV2ViSW5z
cGVjdG9yLlByb3BlcnR5UGF0aChvYmplY3QsICIkIiArIHRoaXMuc2F2ZWRSZXN1bHRJbmRleCk7
CisgICAgfQorCisgICAgX2Zvcm1hdFdpdGhTdWJzdGl0dXRpb25TdHJpbmcocGFyYW1ldGVycywg
Zm9ybWF0dGVkUmVzdWx0KQorICAgIHsKKyAgICAgICAgZnVuY3Rpb24gcGFyYW1ldGVyRm9ybWF0
dGVyKGZvcmNlLCBvYmopCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb3Jt
YXRQYXJhbWV0ZXIob2JqLCBmb3JjZSk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBz
dHJpbmdGb3JtYXR0ZXIob2JqKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gb2JqLmRl
c2NyaXB0aW9uOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gZmxvYXRGb3JtYXR0ZXIo
b2JqKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodHlwZW9mIG9iai52YWx1ZSAhPT0gIm51
bWJlciIpCisgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQob2JqLmRlc2NyaXB0aW9u
KTsKKyAgICAgICAgICAgIHJldHVybiBvYmoudmFsdWU7CisgICAgICAgIH0KKworICAgICAgICBm
dW5jdGlvbiBpbnRlZ2VyRm9ybWF0dGVyKG9iaikKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KHR5cGVvZiBvYmoudmFsdWUgIT09ICJudW1iZXIiKQorICAgICAgICAgICAgICAgIHJldHVybiBw
YXJzZUludChvYmouZGVzY3JpcHRpb24pOworICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3Io
b2JqLnZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBjdXJyZW50U3R5bGUgPSBudWxs
OworICAgICAgICBmdW5jdGlvbiBzdHlsZUZvcm1hdHRlcihvYmopCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGN1cnJlbnRTdHlsZSA9IHt9OworICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICAgICAgICAgIGJ1ZmZlci5zZXRBdHRyaWJ1
dGUoInN0eWxlIiwgb2JqLmRlc2NyaXB0aW9uKTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgYnVmZmVyLnN0eWxlLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgdmFyIHBy
b3BlcnR5ID0gYnVmZmVyLnN0eWxlW2ldOworICAgICAgICAgICAgICAgIGlmIChpc1doaXRlbGlz
dGVkUHJvcGVydHkocHJvcGVydHkpKQorICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3R5bGVb
cHJvcGVydHldID0gYnVmZmVyLnN0eWxlW3Byb3BlcnR5XTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGlzV2hpdGVsaXN0ZWRQcm9wZXJ0eShwcm9wZXJ0eSkK
KyAgICAgICAgeworICAgICAgICAgICAgZm9yICh2YXIgcHJlZml4IG9mIFsiYmFja2dyb3VuZCIs
ICJib3JkZXIiLCAiY29sb3IiLCAiZm9udCIsICJsaW5lIiwgIm1hcmdpbiIsICJwYWRkaW5nIiwg
InRleHQiXSkgeworICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5zdGFydHNXaXRoKHByZWZp
eCkgfHwgcHJvcGVydHkuc3RhcnRzV2l0aCgiLXdlYmtpdC0iICsgcHJlZml4KSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICAvLyBGaXJlYnVnIHVzZXMgJW8gZm9yIGZv
cm1hdHRpbmcgb2JqZWN0cy4KKyAgICAgICAgdmFyIGZvcm1hdHRlcnMgPSB7fTsKKyAgICAgICAg
Zm9ybWF0dGVycy5vID0gcGFyYW1ldGVyRm9ybWF0dGVyLmJpbmQodGhpcywgZmFsc2UpOworICAg
ICAgICBmb3JtYXR0ZXJzLnMgPSBzdHJpbmdGb3JtYXR0ZXI7CisgICAgICAgIGZvcm1hdHRlcnMu
ZiA9IGZsb2F0Rm9ybWF0dGVyOworCisgICAgICAgIC8vIEZpcmVidWcgYWxsb3dzIGJvdGggJWkg
YW5kICVkIGZvciBmb3JtYXR0aW5nIGludGVnZXJzLgorICAgICAgICBmb3JtYXR0ZXJzLmkgPSBp
bnRlZ2VyRm9ybWF0dGVyOworICAgICAgICBmb3JtYXR0ZXJzLmQgPSBpbnRlZ2VyRm9ybWF0dGVy
OworCisgICAgICAgIC8vIEZpcmVidWcgdXNlcyAlYyBmb3Igc3R5bGluZyB0aGUgbWVzc2FnZS4K
KyAgICAgICAgZm9ybWF0dGVycy5jID0gc3R5bGVGb3JtYXR0ZXI7CisKKyAgICAgICAgLy8gU3Vw
cG9ydCAlTyB0byBmb3JjZSBvYmplY3QgZm9ybWF0dGluZywgaW5zdGVhZCBvZiB0aGUgdHlwZS1i
YXNlZCAlbyBmb3JtYXR0aW5nLgorICAgICAgICBmb3JtYXR0ZXJzLk8gPSBwYXJhbWV0ZXJGb3Jt
YXR0ZXIuYmluZCh0aGlzLCB0cnVlKTsKKworICAgICAgICBmdW5jdGlvbiBhcHBlbmQoYSwgYikK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKGIgaW5zdGFuY2VvZiBOb2RlKQorICAgICAgICAg
ICAgICAgIGEuYXBwZW5kQ2hpbGQoYik7CisgICAgICAgICAgICBlbHNlIGlmIChiKSB7CisgICAg
ICAgICAgICAgICAgdmFyIHRvQXBwZW5kID0gV2ViSW5zcGVjdG9yLmxpbmtpZnlTdHJpbmdBc0Zy
YWdtZW50KGIudG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRTdHlsZSkg
eworICAgICAgICAgICAgICAgICAgICB2YXIgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoInNwYW4iKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGN1cnJlbnRT
dHlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXIuc3R5bGVba2V5XSA9IGN1cnJl
bnRTdHlsZVtrZXldOworICAgICAgICAgICAgICAgICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKHRv
QXBwZW5kKTsKKyAgICAgICAgICAgICAgICAgICAgdG9BcHBlbmQgPSB3cmFwcGVyOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoInNwYW4iKTsKKyAgICAgICAgICAgICAgICBzcGFuLmNsYXNzTmFtZSA9ICJ0eXBlLXN0
cmluZyI7CisgICAgICAgICAgICAgICAgc3Bhbi5hcHBlbmRDaGlsZCh0b0FwcGVuZCk7CisgICAg
ICAgICAgICAgICAgYS5hcHBlbmRDaGlsZChzcGFuKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHJldHVybiBhOworICAgICAgICB9CisKKyAgICAgICAgLy8gU3RyaW5nLmZvcm1hdCBkb2Vz
IHRyZWF0IGZvcm1hdHRlZFJlc3VsdCBsaWtlIGEgQnVpbGRlciwgcmVzdWx0IGlzIGFuIG9iamVj
dC4KKyAgICAgICAgcmV0dXJuIFN0cmluZy5mb3JtYXQocGFyYW1ldGVyc1swXS5kZXNjcmlwdGlv
biwgcGFyYW1ldGVycy5zbGljZSgxKSwgZm9ybWF0dGVycywgZm9ybWF0dGVkUmVzdWx0LCBhcHBl
bmQpOworICAgIH0KKworICAgIF9zaG91bGRTaG93U3RhY2tUcmFjZSgpCisgICAgeworICAgICAg
ICBpZiAoIXRoaXMuX21lc3NhZ2Uuc3RhY2tUcmFjZSB8fCAhdGhpcy5fbWVzc2FnZS5zdGFja1Ry
YWNlLmxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICByZXR1cm4g
dGhpcy5fbWVzc2FnZS5zb3VyY2UgPT09IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNz
YWdlU291cmNlLk5ldHdvcmsKKyAgICAgICAgICAgIHx8IHRoaXMuX21lc3NhZ2UubGV2ZWwgPT09
IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuRXJyb3IKKyAgICAgICAg
ICAgIHx8IHRoaXMuX21lc3NhZ2UudHlwZSA9PT0gV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdl
Lk1lc3NhZ2VUeXBlLlRyYWNlOworICAgIH0KKworICAgIF9zaG91bGRIaWRlVVJMKHVybCkKKyAg
ICB7CisgICAgICAgIHJldHVybiB1cmwgPT09ICJ1bmRlZmluZWQiIHx8IHVybCA9PT0gIltuYXRp
dmUgY29kZV0iOworICAgIH0KKworICAgIF9maXJzdE5vbk5hdGl2ZUNhbGxGcmFtZSgpCisgICAg
eworICAgICAgICBpZiAoIXRoaXMuX21lc3NhZ2Uuc3RhY2tUcmFjZSkKKyAgICAgICAgICAgIHJl
dHVybiBudWxsOworCisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbWVzc2FnZS5z
dGFja1RyYWNlLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgZnJhbWUgPSB0aGlzLl9t
ZXNzYWdlLnN0YWNrVHJhY2VbaV07CisgICAgICAgICAgICBpZiAoIWZyYW1lLnVybCB8fCBmcmFt
ZS51cmwgPT09ICJbbmF0aXZlIGNvZGVdIikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIHJldHVybiBmcmFtZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBudWxs
OworICAgIH0KKworICAgIF9saW5raWZ5TG9jYXRpb24odXJsLCBsaW5lTnVtYmVyLCBjb2x1bW5O
dW1iZXIpCisgICAgeworICAgICAgICAvLyBDb25zb2xlTWVzc2FnZSBzdGFjayB0cmFjZSBsaW5l
IG51bWJlcnMgYXJlIG9uZS1iYXNlZC4KKyAgICAgICAgbGluZU51bWJlciA9IGxpbmVOdW1iZXIg
PyBsaW5lTnVtYmVyIC0gMSA6IDA7CisgICAgICAgIGNvbHVtbk51bWJlciA9IGNvbHVtbk51bWJl
ciA/IGNvbHVtbk51bWJlciAtIDEgOiAwOworICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLmxp
bmtpZnlMb2NhdGlvbih1cmwsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgImNvbnNvbGUtbWVz
c2FnZS11cmwiKTsKKyAgICB9CisKKyAgICBfbGlua2lmeUNhbGxGcmFtZShjYWxsRnJhbWUpCisg
ICAgeworICAgICAgICByZXR1cm4gdGhpcy5fbGlua2lmeUxvY2F0aW9uKGNhbGxGcmFtZS51cmws
IGNhbGxGcmFtZS5saW5lTnVtYmVyLCBjYWxsRnJhbWUuY29sdW1uTnVtYmVyKTsKKyAgICB9CisK
KworICAgIF91c2VyUHJvdmlkZWRDb2x1bW5OYW1lcyhjb2x1bW5OYW1lc0FyZ3VtZW50KQorICAg
IHsKKyAgICAgICAgaWYgKCFjb2x1bW5OYW1lc0FyZ3VtZW50KQorICAgICAgICAgICAgcmV0dXJu
IG51bGw7CisKKyAgICAgICAgdmFyIHJlbW90ZU9iamVjdCA9IFdlYkluc3BlY3Rvci5SZW1vdGVP
YmplY3QuZnJvbVBheWxvYWQoY29sdW1uTmFtZXNBcmd1bWVudCk7CisKKyAgICAgICAgLy8gU2lu
Z2xlIHByaW1pdGl2ZSBhcmd1bWVudC4KKyAgICAgICAgaWYgKHJlbW90ZU9iamVjdC50eXBlID09
PSAic3RyaW5nIiB8fCByZW1vdGVPYmplY3QudHlwZSA9PT0gIm51bWJlciIpCisgICAgICAgICAg
ICByZXR1cm4gW1N0cmluZyhjb2x1bW5OYW1lc0FyZ3VtZW50LnZhbHVlKV07CisKKyAgICAgICAg
Ly8gSWdub3JlIGV2ZXJ5dGhpbmcgdGhhdCBpcyBub3QgYW4gYXJyYXkgd2l0aCBwcm9wZXJ0eSBw
cmV2aWV3cy4KKyAgICAgICAgaWYgKHJlbW90ZU9iamVjdC50eXBlICE9PSAib2JqZWN0IiB8fCBy
ZW1vdGVPYmplY3Quc3VidHlwZSAhPT0gImFycmF5IiB8fCAhcmVtb3RlT2JqZWN0LnByZXZpZXcg
fHwgIXJlbW90ZU9iamVjdC5wcmV2aWV3LnByb3BlcnR5UHJldmlld3MpCisgICAgICAgICAgICBy
ZXR1cm4gbnVsbDsKKworICAgICAgICAvLyBBcnJheS4gTG9vayBpbnRvIHRoZSBwcmV2aWV3IGFu
ZCBnZXQgc3RyaW5nIHZhbHVlcy4KKyAgICAgICAgdmFyIGV4dHJhY3RlZENvbHVtbk5hbWVzID0g
W107CisgICAgICAgIGZvciAodmFyIHByb3BlcnR5UHJldmlldyBvZiByZW1vdGVPYmplY3QucHJl
dmlldy5wcm9wZXJ0eVByZXZpZXdzKSB7CisgICAgICAgICAgICBpZiAocHJvcGVydHlQcmV2aWV3
LnR5cGUgPT09ICJzdHJpbmciIHx8IHByb3BlcnR5UHJldmlldy50eXBlID09PSAibnVtYmVyIikK
KyAgICAgICAgICAgICAgICBleHRyYWN0ZWRDb2x1bW5OYW1lcy5wdXNoKFN0cmluZyhwcm9wZXJ0
eVByZXZpZXcudmFsdWUpKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBleHRyYWN0ZWRD
b2x1bW5OYW1lcy5sZW5ndGggPyBleHRyYWN0ZWRDb2x1bW5OYW1lcyA6IG51bGw7CisgICAgfQor
CisgICAgX2Zvcm1hdFBhcmFtZXRlckFzVGFibGUocGFyYW1ldGVycykKKyAgICB7CisgICAgICAg
IHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOworICAgICAgICB2
YXIgdGFibGUgPSBwYXJhbWV0ZXJzWzBdOworICAgICAgICBpZiAoIXRhYmxlIHx8ICF0YWJsZS5w
cmV2aWV3KQorICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CisKKyAgICAgICAgdmFyIHJvd3Mg
PSBbXTsKKyAgICAgICAgdmFyIGNvbHVtbk5hbWVzID0gW107CisgICAgICAgIHZhciBmbGF0VmFs
dWVzID0gW107CisgICAgICAgIHZhciBwcmV2aWV3ID0gdGFibGUucHJldmlldzsKKyAgICAgICAg
dmFyIHVzZXJQcm92aWRlZENvbHVtbk5hbWVzID0gZmFsc2U7CisKKyAgICAgICAgLy8gVXNlciBw
cm92aWRlZCBjb2x1bW5OYW1lcy4KKyAgICAgICAgdmFyIGV4dHJhY3RlZENvbHVtbk5hbWVzID0g
dGhpcy5fdXNlclByb3ZpZGVkQ29sdW1uTmFtZXMocGFyYW1ldGVyc1sxXSk7CisgICAgICAgIGlm
IChleHRyYWN0ZWRDb2x1bW5OYW1lcykgeworICAgICAgICAgICAgdXNlclByb3ZpZGVkQ29sdW1u
TmFtZXMgPSB0cnVlOworICAgICAgICAgICAgY29sdW1uTmFtZXMgPSBleHRyYWN0ZWRDb2x1bW5O
YW1lczsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENoZWNrIGZpcnN0IGZvciB2YWx1ZVByZXZp
ZXdzIGluIHRoZSBwcm9wZXJ0aWVzIG1lYW5pbmcgdGhpcyB3YXMgYW4gYXJyYXkgb2Ygb2JqZWN0
cy4KKyAgICAgICAgaWYgKHByZXZpZXcucHJvcGVydHlQcmV2aWV3cykgeworICAgICAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBwcmV2aWV3LnByb3BlcnR5UHJldmlld3MubGVuZ3RoOyArK2kp
IHsKKyAgICAgICAgICAgICAgICB2YXIgcm93UHJvcGVydHkgPSBwcmV2aWV3LnByb3BlcnR5UHJl
dmlld3NbaV07CisgICAgICAgICAgICAgICAgdmFyIHJvd1ByZXZpZXcgPSByb3dQcm9wZXJ0eS52
YWx1ZVByZXZpZXc7CisgICAgICAgICAgICAgICAgaWYgKCFyb3dQcmV2aWV3KQorICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIHZhciByb3dWYWx1ZSA9IHt9
OworICAgICAgICAgICAgICAgIHZhciBtYXhDb2x1bW5zVG9SZW5kZXIgPSAxMDsKKyAgICAgICAg
ICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHJvd1ByZXZpZXcucHJvcGVydHlQcmV2aWV3cy5s
ZW5ndGg7ICsraikgeworICAgICAgICAgICAgICAgICAgICB2YXIgY2VsbFByb3BlcnR5ID0gcm93
UHJldmlldy5wcm9wZXJ0eVByZXZpZXdzW2pdOworICAgICAgICAgICAgICAgICAgICB2YXIgY29s
dW1uUmVuZGVyZWQgPSBjb2x1bW5OYW1lcy5pbmNsdWRlcyhjZWxsUHJvcGVydHkubmFtZSk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICghY29sdW1uUmVuZGVyZWQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh1c2VyUHJvdmlkZWRDb2x1bW5OYW1lcyB8fCBjb2x1bW5OYW1lcy5sZW5n
dGggPT09IG1heENvbHVtbnNUb1JlbmRlcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtblJlbmRlcmVkID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbk5hbWVzLnB1c2goY2VsbFByb3BlcnR5Lm5h
bWUpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgcm93VmFs
dWVbY2VsbFByb3BlcnR5Lm5hbWVdID0gV2ViSW5zcGVjdG9yLkZvcm1hdHRlZFZhbHVlLmNyZWF0
ZUVsZW1lbnRGb3JQcm9wZXJ0eVByZXZpZXcoY2VsbFByb3BlcnR5KTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgcm93cy5wdXNoKFtyb3dQcm9wZXJ0eS5uYW1lLCByb3dWYWx1
ZV0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgdGhlcmUgd2Vy
ZSB2YWx1ZVByZXZpZXdzLCBjb252ZXJ0IHRvIGEgZmxhdCBsaXN0LgorICAgICAgICBpZiAocm93
cy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHZhciBlbURhc2ggPSAiXHUyMDE0IjsKKyAgICAgICAg
ICAgIGNvbHVtbk5hbWVzLnVuc2hpZnQoV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIoSW5kZXgpIikp
OworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgKytpKSB7Cisg
ICAgICAgICAgICAgICAgdmFyIHJvd05hbWUgPSByb3dzW2ldWzBdOworICAgICAgICAgICAgICAg
IHZhciByb3dWYWx1ZSA9IHJvd3NbaV1bMV07CisgICAgICAgICAgICAgICAgZmxhdFZhbHVlcy5w
dXNoKHJvd05hbWUpOworICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAxOyBqIDwgY29sdW1u
TmFtZXMubGVuZ3RoOyArK2opIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGNvbHVtbk5hbWUg
PSBjb2x1bW5OYW1lc1tqXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCEoY29sdW1uTmFtZSBp
biByb3dWYWx1ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBmbGF0VmFsdWVzLnB1c2goZW1E
YXNoKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAg
ZmxhdFZhbHVlcy5wdXNoKHJvd1ZhbHVlW2NvbHVtbk5hbWVdKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBJZiB0aGVyZSB3ZXJlIG5v
IHZhbHVlIFByZXZpZXdzLCB0aGVuIGNoZWNrIGZvciBhbiBhcnJheSBvZiB2YWx1ZXMuCisgICAg
ICAgIGlmICghZmxhdFZhbHVlcy5sZW5ndGggJiYgcHJldmlldy5wcm9wZXJ0eVByZXZpZXdzKSB7
CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByZXZpZXcucHJvcGVydHlQcmV2aWV3
cy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIHZhciByb3dQcm9wZXJ0eSA9IHByZXZp
ZXcucHJvcGVydHlQcmV2aWV3c1tpXTsKKyAgICAgICAgICAgICAgICBpZiAoISgidmFsdWUiIGlu
IHJvd1Byb3BlcnR5KSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
ICAgICAgICBpZiAoIWNvbHVtbk5hbWVzLmxlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICBj
b2x1bW5OYW1lcy5wdXNoKFdlYkluc3BlY3Rvci5VSVN0cmluZygiSW5kZXgiKSk7CisgICAgICAg
ICAgICAgICAgICAgIGNvbHVtbk5hbWVzLnB1c2goV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJWYWx1
ZSIpKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBmbGF0VmFsdWVzLnB1
c2gocm93UHJvcGVydHkubmFtZSk7CisgICAgICAgICAgICAgICAgZmxhdFZhbHVlcy5wdXNoKFdl
Ykluc3BlY3Rvci5Gb3JtYXR0ZWRWYWx1ZS5jcmVhdGVFbGVtZW50Rm9yUHJvcGVydHlQcmV2aWV3
KHJvd1Byb3BlcnR5KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBJ
ZiBsb3NzbGVzcyBvciBub3QgdGFibGUgZGF0YSwgb3V0cHV0IHRoZSBvYmplY3Qgc28gZnVsbCBk
YXRhIGNhbiBiZSBnb3R0ZW4uCisgICAgICAgIGlmICghcHJldmlldy5sb3NzbGVzcyB8fCAhZmxh
dFZhbHVlcy5sZW5ndGgpIHsKKyAgICAgICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5f
Zm9ybWF0UGFyYW1ldGVyKHRhYmxlKSk7CisgICAgICAgICAgICBpZiAoIWZsYXRWYWx1ZXMubGVu
Z3RoKQorICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50OworICAgICAgICB9CisKKyAgICAg
ICAgdmFyIGRhdGFHcmlkID0gV2ViSW5zcGVjdG9yLkRhdGFHcmlkLmNyZWF0ZVNvcnRhYmxlRGF0
YUdyaWQoY29sdW1uTmFtZXMsIGZsYXRWYWx1ZXMpOworICAgICAgICBkYXRhR3JpZC5lbGVtZW50
LmNsYXNzTGlzdC5hZGQoImlubGluZSIpOworICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKGRh
dGFHcmlkLmVsZW1lbnQpOworCisgICAgICAgIHJldHVybiBlbGVtZW50OworICAgIH0KKworICAg
IF9sZXZlbFN0cmluZygpCisgICAgeworICAgICAgICBzd2l0Y2ggKHRoaXMuX21lc3NhZ2UubGV2
ZWwpIHsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxl
dmVsLlRpcDoKKyAgICAgICAgICAgIHJldHVybiAiVGlwIjsKKyAgICAgICAgY2FzZSBXZWJJbnNw
ZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkxvZzoKKyAgICAgICAgICAgIHJldHVy
biAiTG9nIjsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2Fn
ZUxldmVsLldhcm5pbmc6CisgICAgICAgICAgICByZXR1cm4gIldhcm5pbmciOworICAgICAgICBj
YXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuRGVidWc6CisgICAg
ICAgICAgICByZXR1cm4gIkRlYnVnIjsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29s
ZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkVycm9yOgorICAgICAgICAgICAgcmV0dXJuICJFcnJvciI7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBfZW5mb3JjZXNDbGlwYm9hcmRQcmVmaXhTdHJpbmco
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX21lc3NhZ2UudHlwZSAhPT0gV2ViSW5zcGVj
dG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLlJlc3VsdDsKKyAgICB9CisKKyAgICBfY2xp
cGJvYXJkUHJlZml4U3RyaW5nKCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9tZXNzYWdlLnR5
cGUgPT09IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5SZXN1bHQpCisg
ICAgICAgICAgICByZXR1cm4gIjwgIjsKKworICAgICAgICByZXR1cm4gIlsiICsgdGhpcy5fbGV2
ZWxTdHJpbmcoKSArICJdICI7CisgICAgfQorfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0NvbnNvbGVTZXNzaW9uLmpzIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvQ29uc29sZVNlc3Npb24uanMKaW5kZXgg
YzYxNTllMS4uMmVkMDBjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvVmlld3MvQ29uc29sZVNlc3Npb24uanMKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvVmlld3MvQ29uc29sZVNlc3Npb24uanMKQEAgLTI2LDM2ICsyNiwz
NCBAQAogICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi1XZWJJbnNwZWN0b3IuQ29uc29sZVNlc3Npb24gPSBm
dW5jdGlvbigpCitXZWJJbnNwZWN0b3IuQ29uc29sZVNlc3Npb24gPSBjbGFzcyBDb25zb2xlU2Vz
c2lvbiBleHRlbmRzIFdlYkluc3BlY3Rvci5PYmplY3QKIHsKLSAgICAvLyBGSVhNRTogQ29udmVy
dCB0aGlzIHRvIGEgV2ViSW5zcGVjdG9yLk9iamVjdCBzdWJjbGFzcywgYW5kIGNhbGwgc3VwZXIo
KS4KLSAgICAvLyBXZWJJbnNwZWN0b3IuT2JqZWN0LmNhbGwodGhpcyk7CisgICAgY29uc3RydWN0
b3IoKQorICAgIHsKKyAgICAgICAgc3VwZXIoKTsKIAotICAgIHZhciBlbGVtZW50ID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgZWxlbWVudC5jbGFzc05hbWUgPSAiY29uc29s
ZS1zZXNzaW9uIjsKLSAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50OwotICAgIHRoaXMuX21lc3Nh
Z2VzRWxlbWVudCA9IGVsZW1lbnQ7Ci19OworICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9ICJjb25z
b2xlLXNlc3Npb24iOworICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50OworICAgICAgICB0
aGlzLl9tZXNzYWdlc0VsZW1lbnQgPSBlbGVtZW50OworICAgIH0KIAotV2ViSW5zcGVjdG9yLkNv
bnNvbGVTZXNzaW9uLnByb3RvdHlwZSA9IHsKLSAgICBjb25zdHJ1Y3RvcjogV2ViSW5zcGVjdG9y
LkNvbnNvbGVTZXNzaW9uLAorICAgIC8vIFB1YmxpYwogCi0gICAgYWRkTWVzc2FnZTogZnVuY3Rp
b24obWVzc2FnZSkKKyAgICBhZGRNZXNzYWdlVmlldyhtZXNzYWdlVmlldykKICAgICB7Ci0gICAg
ICAgIHZhciBtZXNzYWdlRWxlbWVudCA9IG1lc3NhZ2UudG9NZXNzYWdlRWxlbWVudCgpOworICAg
ICAgICB2YXIgbWVzc2FnZUVsZW1lbnQgPSBtZXNzYWdlVmlldy5lbGVtZW50OwogICAgICAgICBt
ZXNzYWdlRWxlbWVudC5jbGFzc0xpc3QuYWRkKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5J
dGVtV3JhcHBlclN0eWxlQ2xhc3NOYW1lKTsKICAgICAgICAgdGhpcy5fbWVzc2FnZXNFbGVtZW50
LmFwcGVuZENoaWxkKG1lc3NhZ2VFbGVtZW50KTsKLSAgICB9LAorICAgIH0KIAotICAgIGFwcGVu
ZDogZnVuY3Rpb24obWVzc2FnZUVsZW1lbnQpCisgICAgYXBwZW5kKG1lc3NhZ2VPckdyb3VwRWxl
bWVudCkKICAgICB7Ci0gICAgICAgIHRoaXMuX21lc3NhZ2VzRWxlbWVudC5hcHBlbmRDaGlsZCht
ZXNzYWdlRWxlbWVudCk7Ci0gICAgfSwKKyAgICAgICAgdGhpcy5fbWVzc2FnZXNFbGVtZW50LmFw
cGVuZENoaWxkKG1lc3NhZ2VPckdyb3VwRWxlbWVudCk7CisgICAgfQogCi0gICAgaGFzTWVzc2Fn
ZXM6IGZ1bmN0aW9uKCkKKyAgICBoYXNNZXNzYWdlcygpCiAgICAgewogICAgICAgICByZXR1cm4g
ISF0aGlzLl9tZXNzYWdlc0VsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg7CiAgICAgfQogfTsKLQot
V2ViSW5zcGVjdG9yLkNvbnNvbGVTZXNzaW9uLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNw
ZWN0b3IuT2JqZWN0LnByb3RvdHlwZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0xlZ2FjeUNvbnNvbGVNZXNzYWdlLmpzIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvTGVnYWN5Q29uc29sZU1lc3NhZ2UuanMK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmOGQ3MTIuLjAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvTGVnYWN5Q29uc29sZU1lc3Nh
Z2UuanMKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDA3LCAyMDA4LCAyMDEzIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDkgSm9zZXBoIFBlY29yYXJvCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVz
IG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi1XZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2Ug
PSBmdW5jdGlvbihzb3VyY2UsIGxldmVsLCB1cmwsIGxpbmUsIGNvbHVtbiwgcmVwZWF0Q291bnQp
Ci17Ci0gICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7Ci0gICAgdGhpcy5sZXZlbCA9IGxldmVsOwot
ICAgIHRoaXMudXJsID0gdXJsIHx8IG51bGw7Ci0gICAgdGhpcy5saW5lID0gbGluZSB8fCAwOwot
ICAgIHRoaXMuY29sdW1uID0gY29sdW1uIHx8IDA7Ci0KLSAgICByZXBlYXRDb3VudCA9IHJlcGVh
dENvdW50IHx8IDE7Ci0gICAgdGhpcy5yZXBlYXRDb3VudCA9IHJlcGVhdENvdW50OwotICAgIHRo
aXMucmVwZWF0RGVsdGEgPSByZXBlYXRDb3VudDsKLSAgICB0aGlzLnRvdGFsUmVwZWF0Q291bnQg
PSByZXBlYXRDb3VudDsKLX07Ci0KLVdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZS5w
cm90b3R5cGUgPSB7Ci0gICAgaXNFcnJvck9yV2FybmluZzogZnVuY3Rpb24oKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuICh0aGlzLmxldmVsID09PSBXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1l
c3NhZ2UuTWVzc2FnZUxldmVsLldhcm5pbmcgfHwgdGhpcy5sZXZlbCA9PT0gV2ViSW5zcGVjdG9y
LkxlZ2FjeUNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5FcnJvcik7Ci0gICAgfSwKLQotICAg
IHVwZGF0ZVJlcGVhdENvdW50OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICAvLyBJbXBsZW1l
bnRlZCBieSBjb25jcmV0ZSBpbnN0YW5jZXMKLSAgICB9LAotCi0gICAgY2xvbmU6IGZ1bmN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIC8vIEltcGxlbWVudGVkIGJ5IGNvbmNyZXRlIGluc3RhbmNlcwot
ICAgIH0KLX07Ci0KLVdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZS5jcmVhdGUgPSBm
dW5jdGlvbihzb3VyY2UsIGxldmVsLCBtZXNzYWdlLCB0eXBlLCB1cmwsIGxpbmUsIGNvbHVtbiwg
cmVwZWF0Q291bnQsIHBhcmFtZXRlcnMsIHN0YWNrVHJhY2UsIHJlcXVlc3QpCi17Ci0gICAgcmV0
dXJuIG5ldyBXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2VJbXBsKHNvdXJjZSwgbGV2
ZWwsIG1lc3NhZ2UsIG51bGwsIHR5cGUsIHVybCwgbGluZSwgY29sdW1uLCByZXBlYXRDb3VudCwg
cGFyYW1ldGVycywgc3RhY2tUcmFjZSwgcmVxdWVzdCk7Ci19OwotCi0vLyBGSVhNRTogU3dpdGNo
IHRvIENvbnNvbGVBZ2VudC5Db25zb2xlTWVzc2FnZVNvdXJjZS4KLVdlYkluc3BlY3Rvci5MZWdh
Y3lDb25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNlID0gewotICAgIEhUTUw6ICJodG1sIiwKLSAg
ICBYTUw6ICJ4bWwiLAotICAgIEpTOiAiamF2YXNjcmlwdCIsCi0gICAgTmV0d29yazogIm5ldHdv
cmsiLAotICAgIENvbnNvbGVBUEk6ICJjb25zb2xlLWFwaSIsCi0gICAgT3RoZXI6ICJvdGhlciIK
LX07Ci0KLS8vIEZJWE1FOiBTd2l0Y2ggdG8gQ29uc29sZUFnZW50LkNvbnNvbGVNZXNzYWdlVHlw
ZS4KLVdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZSA9IHsKLSAg
ICBMb2c6ICJsb2ciLAotICAgIERpcjogImRpciIsCi0gICAgRGlyWE1MOiAiZGlyeG1sIiwKLSAg
ICBUYWJsZTogInRhYmxlIiwKLSAgICBUcmFjZTogInRyYWNlIiwKLSAgICBTdGFydEdyb3VwOiAi
c3RhcnRHcm91cCIsCi0gICAgU3RhcnRHcm91cENvbGxhcHNlZDogInN0YXJ0R3JvdXBDb2xsYXBz
ZWQiLAotICAgIEVuZEdyb3VwOiAiZW5kR3JvdXAiLAotICAgIEFzc2VydDogImFzc2VydCIsCi0g
ICAgUmVzdWx0OiAicmVzdWx0IgotfTsKLQotLy8gRklYTUU6IFN3aXRjaCB0byBDb25zb2xlQWdl
bnQuQ29uc29sZU1lc3NhZ2VMZXZlbC4KLVdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2Fn
ZS5NZXNzYWdlTGV2ZWwgPSB7Ci0gICAgVGlwOiAidGlwIiwKLSAgICBMb2c6ICJsb2ciLAotICAg
IFdhcm5pbmc6ICJ3YXJuaW5nIiwKLSAgICBFcnJvcjogImVycm9yIiwKLSAgICBEZWJ1ZzogImRl
YnVnIgotfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L1ZpZXdzL0xlZ2FjeUNvbnNvbGVNZXNzYWdlSW1wbC5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0xlZ2FjeUNvbnNvbGVNZXNzYWdlSW1wbC5qcwpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBhOGI0NS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9MZWdhY3lDb25zb2xlTWVzc2FnZUltcGwu
anMKKysrIC9kZXYvbnVsbApAQCAtMSw4MDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAwNywgMjAwOCwgMjAxMyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDA5IEpvc2VwaCBQZWNvcmFybwotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBv
ZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
LSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlSW1w
bCA9IGZ1bmN0aW9uKHNvdXJjZSwgbGV2ZWwsIG1lc3NhZ2UsIGxpbmtpZmllciwgdHlwZSwgdXJs
LCBsaW5lLCBjb2x1bW4sIHJlcGVhdENvdW50LCBwYXJhbWV0ZXJzLCBzdGFja1RyYWNlLCByZXF1
ZXN0KQotewotICAgIFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZS5jYWxsKHRoaXMs
IHNvdXJjZSwgbGV2ZWwsIHVybCwgbGluZSwgY29sdW1uLCByZXBlYXRDb3VudCk7Ci0KLSAgICB0
aGlzLl9saW5raWZpZXIgPSBsaW5raWZpZXI7Ci0gICAgdGhpcy50eXBlID0gdHlwZSB8fCBXZWJJ
bnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuTG9nOwotICAgIHRoaXMu
X21lc3NhZ2VUZXh0ID0gbWVzc2FnZTsKLSAgICB0aGlzLl9wYXJhbWV0ZXJzID0gcGFyYW1ldGVy
czsKLSAgICB0aGlzLl9zdGFja1RyYWNlID0gc3RhY2tUcmFjZTsKLSAgICB0aGlzLl9yZXF1ZXN0
ID0gcmVxdWVzdDsKLQotICAgIHRoaXMuX2N1c3RvbUZvcm1hdHRlcnMgPSB7Ci0gICAgICAgICJv
YmplY3QiOiB0aGlzLl9mb3JtYXRQYXJhbWV0ZXJBc09iamVjdCwKLSAgICAgICAgImVycm9yIjog
dGhpcy5fZm9ybWF0UGFyYW1ldGVyQXNPYmplY3QsCi0gICAgICAgICJtYXAiOiB0aGlzLl9mb3Jt
YXRQYXJhbWV0ZXJBc09iamVjdCwKLSAgICAgICAgInNldCI6IHRoaXMuX2Zvcm1hdFBhcmFtZXRl
ckFzT2JqZWN0LAotICAgICAgICAid2Vha21hcCI6IHRoaXMuX2Zvcm1hdFBhcmFtZXRlckFzT2Jq
ZWN0LAotICAgICAgICAiaXRlcmF0b3IiOiB0aGlzLl9mb3JtYXRQYXJhbWV0ZXJBc09iamVjdCwK
LSAgICAgICAgImNsYXNzIjogdGhpcy5fZm9ybWF0UGFyYW1ldGVyQXNPYmplY3QsCi0gICAgICAg
ICJhcnJheSI6ICB0aGlzLl9mb3JtYXRQYXJhbWV0ZXJBc0FycmF5LAotICAgICAgICAibm9kZSI6
ICAgdGhpcy5fZm9ybWF0UGFyYW1ldGVyQXNOb2RlLAotICAgICAgICAic3RyaW5nIjogdGhpcy5f
Zm9ybWF0UGFyYW1ldGVyQXNTdHJpbmcKLSAgICB9OwotfTsKLQotV2ViSW5zcGVjdG9yLkxlZ2Fj
eUNvbnNvbGVNZXNzYWdlSW1wbC5wcm90b3R5cGUgPSB7Ci0KLSAgICBlbmZvcmNlc0NsaXBib2Fy
ZFByZWZpeFN0cmluZzogdHJ1ZSwKLQotICAgIF9mb3JtYXRNZXNzYWdlOiBmdW5jdGlvbigpCi0g
ICAgewotICAgICAgICB0aGlzLl9mb3JtYXR0ZWRNZXNzYWdlID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgic3BhbiIpOwotICAgICAgICB0aGlzLl9mb3JtYXR0ZWRNZXNzYWdlLmNsYXNzTmFtZSA9
ICJjb25zb2xlLW1lc3NhZ2UtdGV4dCI7Ci0KLSAgICAgICAgdmFyIG1lc3NhZ2VUZXh0OwotICAg
ICAgICBpZiAodGhpcy5zb3VyY2UgPT09IFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2Fn
ZS5NZXNzYWdlU291cmNlLkNvbnNvbGVBUEkpIHsKLSAgICAgICAgICAgIHN3aXRjaCAodGhpcy50
eXBlKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1l
c3NhZ2UuTWVzc2FnZVR5cGUuVHJhY2U6Ci0gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VUZXh0
ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoImNvbnNvbGUudHJhY2UoKSIpOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5MZWdh
Y3lDb25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5Bc3NlcnQ6Ci0gICAgICAgICAgICAgICAgICAg
IHZhciBhcmdzID0gW1dlYkluc3BlY3Rvci5VSVN0cmluZygiQXNzZXJ0aW9uIGZhaWxlZDoiKV07
Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9wYXJhbWV0ZXJzKQotICAgICAgICAgICAg
ICAgICAgICAgICAgYXJncyA9IGFyZ3MuY29uY2F0KHRoaXMuX3BhcmFtZXRlcnMpOwotICAgICAg
ICAgICAgICAgICAgICBtZXNzYWdlVGV4dCA9IHRoaXMuX2Zvcm1hdChhcmdzKTsKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuTGVn
YWN5Q29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuRGlyOgotICAgICAgICAgICAgICAgICAgICB2
YXIgb2JqID0gdGhpcy5fcGFyYW1ldGVycyA/IHRoaXMuX3BhcmFtZXRlcnNbMF0gOiB1bmRlZmlu
ZWQ7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gWyIlTyIsIG9ial07Ci0gICAgICAg
ICAgICAgICAgICAgIG1lc3NhZ2VUZXh0ID0gdGhpcy5fZm9ybWF0KGFyZ3MpOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgICAgICB2YXIgYXJncyA9IHRoaXMuX3BhcmFtZXRlcnMgfHwgW3RoaXMuX21lc3NhZ2VUZXh0
XTsKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZVRleHQgPSB0aGlzLl9mb3JtYXQoYXJncyk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zb3VyY2UgPT09IFdlYklu
c3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNlLk5ldHdvcmspIHsKLSAg
ICAgICAgICAgIGlmICh0aGlzLl9yZXF1ZXN0KSB7Ci0gICAgICAgICAgICAgICAgdGhpcy5fc3Rh
Y2tUcmFjZSA9IHRoaXMuX3JlcXVlc3Quc3RhY2tUcmFjZTsKLSAgICAgICAgICAgICAgICBpZiAo
dGhpcy5fcmVxdWVzdC5pbml0aWF0b3IgJiYgdGhpcy5fcmVxdWVzdC5pbml0aWF0b3IudXJsKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMudXJsID0gdGhpcy5fcmVxdWVzdC5pbml0aWF0b3Iu
dXJsOwotICAgICAgICAgICAgICAgICAgICB0aGlzLmxpbmUgPSB0aGlzLl9yZXF1ZXN0LmluaXRp
YXRvci5saW5lTnVtYmVyOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtZXNz
YWdlVGV4dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKLSAgICAgICAgICAgICAg
ICBpZiAodGhpcy5sZXZlbCA9PT0gV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlLk1l
c3NhZ2VMZXZlbC5FcnJvcikgewotICAgICAgICAgICAgICAgICAgICBtZXNzYWdlVGV4dC5hcHBl
bmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0aGlzLl9yZXF1ZXN0LnJlcXVlc3RNZXRo
b2QgKyAiICIpKTsKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZVRleHQuYXBwZW5kQ2hpbGQo
V2ViSW5zcGVjdG9yLmxpbmtpZnlSZXF1ZXN0QXNOb2RlKHRoaXMuX3JlcXVlc3QpKTsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHRoaXMuX3JlcXVlc3QuZmFpbGVkKQotICAgICAgICAgICAgICAg
ICAgICAgICAgbWVzc2FnZVRleHQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUo
IiAiICsgdGhpcy5fcmVxdWVzdC5sb2NhbGl6ZWRGYWlsRGVzY3JpcHRpb24pKTsKLSAgICAgICAg
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZVRleHQuYXBw
ZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiAiICsgdGhpcy5fcmVxdWVzdC5zdGF0
dXNDb2RlICsgIiAoIiArIHRoaXMuX3JlcXVlc3Quc3RhdHVzVGV4dCArICIpIikpOwotICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBmcmFnbWVudCA9IFdl
Ykluc3BlY3Rvci5saW5raWZ5U3RyaW5nQXNGcmFnbWVudFdpdGhDdXN0b21MaW5raWZpZXIodGhp
cy5fbWVzc2FnZVRleHQsIFdlYkluc3BlY3Rvci5saW5raWZ5UmVxdWVzdEFzTm9kZS5iaW5kKG51
bGwsIHRoaXMuX3JlcXVlc3QsICIiKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VUZXh0
LmFwcGVuZENoaWxkKGZyYWdtZW50KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIGlmICh0aGlzLnVybCkgewotICAgICAgICAgICAgICAg
ICAgICB2YXIgYW5jaG9yID0gV2ViSW5zcGVjdG9yLmxpbmtpZnlVUkxBc05vZGUodGhpcy51cmws
IHRoaXMudXJsLCAiY29uc29sZS1tZXNzYWdlLXVybCIpOwotICAgICAgICAgICAgICAgICAgICB0
aGlzLl9mb3JtYXR0ZWRNZXNzYWdlLmFwcGVuZENoaWxkKGFuY2hvcik7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIG1lc3NhZ2VUZXh0ID0gdGhpcy5fZm9ybWF0KFt0aGlzLl9t
ZXNzYWdlVGV4dF0pOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgdmFyIGFyZ3MgPSB0aGlzLl9wYXJhbWV0ZXJzIHx8IFt0aGlzLl9tZXNzYWdlVGV4dF07Ci0g
ICAgICAgICAgICBtZXNzYWdlVGV4dCA9IHRoaXMuX2Zvcm1hdChhcmdzKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmICh0aGlzLnNvdXJjZSAhPT0gV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVN
ZXNzYWdlLk1lc3NhZ2VTb3VyY2UuTmV0d29yayB8fCB0aGlzLl9yZXF1ZXN0KSB7Ci0gICAgICAg
ICAgICB2YXIgZmlyc3ROb25OYXRpdmVDYWxsRnJhbWUgPSB0aGlzLl9maXJzdE5vbk5hdGl2ZUNh
bGxGcmFtZSgpOwotICAgICAgICAgICAgaWYgKGZpcnN0Tm9uTmF0aXZlQ2FsbEZyYW1lKSB7Ci0g
ICAgICAgICAgICAgICAgdmFyIHVybEVsZW1lbnQgPSB0aGlzLl9saW5raWZ5Q2FsbEZyYW1lKGZp
cnN0Tm9uTmF0aXZlQ2FsbEZyYW1lKTsKLSAgICAgICAgICAgICAgICB0aGlzLl9mb3JtYXR0ZWRN
ZXNzYWdlLmFwcGVuZENoaWxkKHVybEVsZW1lbnQpOwotICAgICAgICAgICAgfSBlbHNlIGlmICh0
aGlzLnVybCAmJiAhdGhpcy5fc2hvdWxkSGlkZVVSTCh0aGlzLnVybCkpIHsKLSAgICAgICAgICAg
ICAgICB2YXIgdXJsRWxlbWVudCA9IHRoaXMuX2xpbmtpZnlMb2NhdGlvbih0aGlzLnVybCwgdGhp
cy5saW5lLCB0aGlzLmNvbHVtbik7Ci0gICAgICAgICAgICAgICAgdGhpcy5fZm9ybWF0dGVkTWVz
c2FnZS5hcHBlbmRDaGlsZCh1cmxFbGVtZW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgICAgIHRoaXMuX2Zvcm1hdHRlZE1lc3NhZ2UuYXBwZW5kQ2hpbGQobWVzc2FnZVRleHQp
OwotCi0gICAgICAgIGlmICh0aGlzLnNhdmVkUmVzdWx0SW5kZXgpIHsKLSAgICAgICAgICAgIHZh
ciBzYXZlZFZhcmlhYmxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsK
LSAgICAgICAgICAgIHNhdmVkVmFyaWFibGVFbGVtZW50LmNsYXNzTmFtZSA9ICJjb25zb2xlLXNh
dmVkLXZhcmlhYmxlIjsKLSAgICAgICAgICAgIHNhdmVkVmFyaWFibGVFbGVtZW50LnRleHRDb250
ZW50ID0gIiA9ICQiICsgdGhpcy5zYXZlZFJlc3VsdEluZGV4OwotICAgICAgICAgICAgaWYgKHRo
aXMuX29iamVjdFRyZWUpCi0gICAgICAgICAgICAgICAgdGhpcy5fb2JqZWN0VHJlZS5hcHBlbmRU
aXRsZVN1ZmZpeChzYXZlZFZhcmlhYmxlRWxlbWVudCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgdGhpcy5fZm9ybWF0dGVkTWVzc2FnZS5hcHBlbmRDaGlsZChzYXZlZFZhcmlh
YmxlRWxlbWVudCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodGhpcy5fc2hvdWxkRHVtcFN0
YWNrVHJhY2UoKSkgewotICAgICAgICAgICAgdmFyIG9sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgib2wiKTsKLSAgICAgICAgICAgIG9sLmNsYXNzTmFtZSA9ICJvdXRsaW5lLWRpc2Nsb3N1cmUi
OwotICAgICAgICAgICAgdmFyIHRyZWVPdXRsaW5lID0gbmV3IFdlYkluc3BlY3Rvci5UcmVlT3V0
bGluZShvbCk7Ci0KLSAgICAgICAgICAgIHZhciBjb250ZW50ID0gdGhpcy5fZm9ybWF0dGVkTWVz
c2FnZTsKLSAgICAgICAgICAgIHZhciByb290ID0gbmV3IFdlYkluc3BlY3Rvci5UcmVlRWxlbWVu
dChjb250ZW50LCBudWxsLCB0cnVlKTsKLSAgICAgICAgICAgIHRyZWVPdXRsaW5lLmFwcGVuZENo
aWxkKHJvb3QpOwotICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gV2ViSW5zcGVjdG9yLkxl
Z2FjeUNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLlRyYWNlKQotICAgICAgICAgICAgICAgIHJv
b3QuZXhwYW5kKCk7Ci0KLSAgICAgICAgICAgIHRoaXMuX3BvcHVsYXRlU3RhY2tUcmFjZVRyZWVF
bGVtZW50KHJvb3QpOwotICAgICAgICAgICAgdGhpcy5fZm9ybWF0dGVkTWVzc2FnZSA9IG9sOwot
ICAgICAgICB9Ci0KLSAgICAgICAgLy8gVGhpcyBpcyB1c2VkIGZvciBpbmxpbmUgbWVzc2FnZSBi
dWJibGVzIGluIFNvdXJjZUZyYW1lcywgb3Igb3RoZXIgcGxhaW4tdGV4dCByZXByZXNlbnRhdGlv
bnMuCi0gICAgICAgIHRoaXMuX21lc3NhZ2UgPSBtZXNzYWdlVGV4dC50ZXh0Q29udGVudDsKLSAg
ICB9LAotCi0gICAgX3Nob3VsZER1bXBTdGFja1RyYWNlOiBmdW5jdGlvbigpCi0gICAgewotICAg
ICAgICByZXR1cm4gISF0aGlzLl9zdGFja1RyYWNlICYmIHRoaXMuX3N0YWNrVHJhY2UubGVuZ3Ro
ICYmICh0aGlzLnNvdXJjZSA9PT0gV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlLk1l
c3NhZ2VTb3VyY2UuTmV0d29yayB8fCB0aGlzLmxldmVsID09PSBXZWJJbnNwZWN0b3IuTGVnYWN5
Q29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkVycm9yIHx8IHRoaXMudHlwZSA9PT0gV2ViSW5z
cGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLlRyYWNlKTsKLSAgICB9LAot
Ci0gICAgX3Nob3VsZEhpZGVVUkw6IGZ1bmN0aW9uKHVybCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biB1cmwgPT09ICJ1bmRlZmluZWQiIHx8IHVybCA9PT0gIltuYXRpdmUgY29kZV0iOwotICAgIH0s
Ci0KLSAgICBfZmlyc3ROb25OYXRpdmVDYWxsRnJhbWU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIGlmICghdGhpcy5fc3RhY2tUcmFjZSkKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotCi0g
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc3RhY2tUcmFjZS5sZW5ndGg7IGkrKykg
ewotICAgICAgICAgICAgdmFyIGZyYW1lID0gdGhpcy5fc3RhY2tUcmFjZVtpXTsKLSAgICAgICAg
ICAgIGlmICghZnJhbWUudXJsIHx8IGZyYW1lLnVybCA9PT0gIltuYXRpdmUgY29kZV0iKQotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgcmV0dXJuIGZyYW1lOwotICAgICAg
ICB9Ci0KLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfSwKLQotICAgIGdldCBtZXNzYWdlKCkK
LSAgICB7Ci0gICAgICAgIC8vIGZvcmNlIG1lc3NhZ2UgZm9ybWF0dGluZwotICAgICAgICB2YXIg
Zm9ybWF0dGVkTWVzc2FnZSA9IHRoaXMuZm9ybWF0dGVkTWVzc2FnZTsKLSAgICAgICAgcmV0dXJu
IHRoaXMuX21lc3NhZ2U7Ci0gICAgfSwKLQotICAgIGdldCBmb3JtYXR0ZWRNZXNzYWdlKCkKLSAg
ICB7Ci0gICAgICAgIGlmICghdGhpcy5fZm9ybWF0dGVkTWVzc2FnZSkKLSAgICAgICAgICAgIHRo
aXMuX2Zvcm1hdE1lc3NhZ2UoKTsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1hdHRlZE1lc3Nh
Z2U7Ci0gICAgfSwKLQotICAgIF9saW5raWZ5TG9jYXRpb246IGZ1bmN0aW9uKHVybCwgbGluZU51
bWJlciwgY29sdW1uTnVtYmVyKQotICAgIHsKLSAgICAgICAgLy8gQ29uc29sZU1lc3NhZ2Ugc3Rh
Y2sgdHJhY2UgbGluZSBudW1iZXJzIGFyZSBvbmUtYmFzZWQuCi0gICAgICAgIGxpbmVOdW1iZXIg
PSBsaW5lTnVtYmVyID8gbGluZU51bWJlciAtIDEgOiAwOwotICAgICAgICBjb2x1bW5OdW1iZXIg
PSBjb2x1bW5OdW1iZXIgPyBjb2x1bW5OdW1iZXIgLSAxIDogMDsKLQotICAgICAgICByZXR1cm4g
V2ViSW5zcGVjdG9yLmxpbmtpZnlMb2NhdGlvbih1cmwsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJl
ciwgImNvbnNvbGUtbWVzc2FnZS11cmwiKTsKLSAgICB9LAotCi0gICAgX2xpbmtpZnlDYWxsRnJh
bWU6IGZ1bmN0aW9uKGNhbGxGcmFtZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9saW5r
aWZ5TG9jYXRpb24oY2FsbEZyYW1lLnVybCwgY2FsbEZyYW1lLmxpbmVOdW1iZXIsIGNhbGxGcmFt
ZS5jb2x1bW5OdW1iZXIpOwotICAgIH0sCi0KLSAgICBpc0Vycm9yT3JXYXJuaW5nOiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICByZXR1cm4gKHRoaXMubGV2ZWwgPT09IFdlYkluc3BlY3Rvci5M
ZWdhY3lDb25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuV2FybmluZyB8fCB0aGlzLmxldmVsID09
PSBXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLkVycm9yKTsK
LSAgICB9LAotCi0gICAgX2Zvcm1hdDogZnVuY3Rpb24ocGFyYW1ldGVycykKLSAgICB7Ci0gICAg
ICAgIC8vIFRoaXMgbm9kZSBpcyB1c2VkIGxpa2UgYSBCdWlsZGVyLiBWYWx1ZXMgYXJlIGNvbnRp
bnVhbGx5IGFwcGVuZGVkIG9udG8gaXQuCi0gICAgICAgIHZhciBmb3JtYXR0ZWRSZXN1bHQgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci0gICAgICAgIGlmICghcGFyYW1ldGVycy5s
ZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gZm9ybWF0dGVkUmVzdWx0OwotCi0gICAgICAgIC8v
IEZvcm1hdHRpbmcgY29kZSBiZWxvdyBhc3N1bWVzIHRoYXQgcGFyYW1ldGVycyBhcmUgYWxsIHdy
YXBwZXJzIHdoZXJlYXMgZnJvbnRlbmQgY29uc29sZQotICAgICAgICAvLyBBUEkgYWxsb3dzIHBh
c3NpbmcgYXJiaXRyYXJ5IHZhbHVlcyBhcyBtZXNzYWdlcyAoc3RyaW5ncywgbnVtYmVycywgZXRj
LikuIFdyYXAgdGhlbSBoZXJlLgotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtZXRl
cnMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBPbmx5IHBhc3MgcnVudGlt
ZSB3cmFwcGVycyBoZXJlLgotICAgICAgICAgICAgaWYgKHBhcmFtZXRlcnNbaV0gaW5zdGFuY2Vv
ZiBXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
Ci0gICAgICAgICAgICBpZiAodHlwZW9mIHBhcmFtZXRlcnNbaV0gPT09ICJvYmplY3QiKQotICAg
ICAgICAgICAgICAgIHBhcmFtZXRlcnNbaV0gPSBXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0LmZy
b21QYXlsb2FkKHBhcmFtZXRlcnNbaV0pOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIHBhcmFtZXRlcnNbaV0gPSBXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0LmZyb21QcmltaXRp
dmVWYWx1ZShwYXJhbWV0ZXJzW2ldKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFRoZXJlIGNh
biBiZSBzdHJpbmcgbG9nIGFuZCBzdHJpbmcgZXZhbCByZXN1bHQuIFdlIGRpc3Rpbmd1aXNoIGJl
dHdlZW4gdGhlbSBiYXNlZCBvbiBtZXNzYWdlIHR5cGUuCi0gICAgICAgIHZhciBzaG91bGRGb3Jt
YXRNZXNzYWdlID0gV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdC50eXBlKHBhcmFtZXRlcnNbMF0p
ID09PSAic3RyaW5nIiAmJiB0aGlzLnR5cGUgIT09IFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xl
TWVzc2FnZS5NZXNzYWdlVHlwZS5SZXN1bHQ7Ci0KLSAgICAgICAgaWYgKHNob3VsZEZvcm1hdE1l
c3NhZ2UpIHsKLSAgICAgICAgICAgIC8vIE11bHRpcGxlIHBhcmFtZXRlcnMgd2l0aCB0aGUgZmly
c3QgYmVpbmcgYSBmb3JtYXQgc3RyaW5nLiBTYXZlIHVudXNlZCBzdWJzdGl0dXRpb25zLgotICAg
ICAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuX2Zvcm1hdFdpdGhTdWJzdGl0dXRpb25TdHJpbmco
cGFyYW1ldGVycywgZm9ybWF0dGVkUmVzdWx0KTsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMgPSBy
ZXN1bHQudW51c2VkU3Vic3RpdHV0aW9uczsKLSAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJzLmxl
bmd0aCkKLSAgICAgICAgICAgICAgICBmb3JtYXR0ZWRSZXN1bHQuYXBwZW5kQ2hpbGQoZG9jdW1l
bnQuY3JlYXRlVGV4dE5vZGUoIiAiKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodGhpcy50
eXBlID09PSBXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuVGFi
bGUpIHsKLSAgICAgICAgICAgIGZvcm1hdHRlZFJlc3VsdC5hcHBlbmRDaGlsZCh0aGlzLl9mb3Jt
YXRQYXJhbWV0ZXJBc1RhYmxlKHBhcmFtZXRlcnMpKTsKLSAgICAgICAgICAgIHJldHVybiBmb3Jt
YXR0ZWRSZXN1bHQ7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBTaW5nbGUgcGFyYW1ldGVyLCBv
ciB1bnVzZWQgc3Vic3RpdHV0aW9ucyBmcm9tIGFib3ZlLgotICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHBhcmFtZXRlcnMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIC8vIElubGluZSBz
dHJpbmdzIHdoZW4gZm9ybWF0dGluZy4KLSAgICAgICAgICAgIGlmIChzaG91bGRGb3JtYXRNZXNz
YWdlICYmIHBhcmFtZXRlcnNbaV0udHlwZSA9PT0gInN0cmluZyIpIHsKLSAgICAgICAgICAgICAg
ICB2YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKLSAgICAgICAgICAg
ICAgICBzcGFuLmNsYXNzTGlzdC5hZGQoInR5cGUtc3RyaW5nIik7Ci0gICAgICAgICAgICAgICAg
c3Bhbi50ZXh0Q29udGVudCA9IHBhcmFtZXRlcnNbaV0uZGVzY3JpcHRpb247Ci0gICAgICAgICAg
ICAgICAgZm9ybWF0dGVkUmVzdWx0LmFwcGVuZENoaWxkKHNwYW4pOwotICAgICAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICAgICAgZm9ybWF0dGVkUmVzdWx0LmFwcGVuZENoaWxkKHRoaXMuX2Zv
cm1hdFBhcmFtZXRlcihwYXJhbWV0ZXJzW2ldLCBmYWxzZSkpOwotCi0gICAgICAgICAgICBpZiAo
aSA8IHBhcmFtZXRlcnMubGVuZ3RoIC0gMSAmJiAhdGhpcy5faXNFeHBhbmRhYmxlKHBhcmFtZXRl
cnNbaV0pKQotICAgICAgICAgICAgICAgIGZvcm1hdHRlZFJlc3VsdC5hcHBlbmRDaGlsZChkb2N1
bWVudC5jcmVhdGVUZXh0Tm9kZSgiICIpKTsKLQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBm
b3JtYXR0ZWRSZXN1bHQ7Ci0gICAgfSwKLQotICAgIF9pc0V4cGFuZGFibGU6IGZ1bmN0aW9uKHJl
bW90ZU9iamVjdCkgewotICAgICAgICBpZiAoIXJlbW90ZU9iamVjdCkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgICAgICBpZiAocmVtb3RlT2JqZWN0Lmhhc0NoaWxkcmVuICYmIHJl
bW90ZU9iamVjdC5wcmV2aWV3ICYmIHJlbW90ZU9iamVjdC5wcmV2aWV3Lmxvc3NsZXNzKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHJldHVybiByZW1vdGVPYmplY3QuaGFz
Q2hpbGRyZW47Ci0gICAgfSwKLQotICAgIF9mb3JtYXRQYXJhbWV0ZXI6IGZ1bmN0aW9uKG91dHB1
dCwgZm9yY2VPYmplY3RGb3JtYXQpCi0gICAgewotICAgICAgICB2YXIgdHlwZTsKLSAgICAgICAg
aWYgKGZvcmNlT2JqZWN0Rm9ybWF0KQotICAgICAgICAgICAgdHlwZSA9ICJvYmplY3QiOwotICAg
ICAgICBlbHNlIGlmIChvdXRwdXQgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0
KQotICAgICAgICAgICAgdHlwZSA9IG91dHB1dC5zdWJ0eXBlIHx8IG91dHB1dC50eXBlOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICB0eXBlID0gdHlwZW9mIG91dHB1dDsKLQotICAgICAgICB2
YXIgZm9ybWF0dGVyID0gdGhpcy5fY3VzdG9tRm9ybWF0dGVyc1t0eXBlXTsKLSAgICAgICAgaWYg
KCFmb3JtYXR0ZXIpCi0gICAgICAgICAgICBmb3JtYXR0ZXIgPSB0aGlzLl9mb3JtYXRQYXJhbWV0
ZXJBc1ZhbHVlOwotCi0gICAgICAgIHZhciBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
c3BhbiIpOwotCi0gICAgICAgIGlmICh0aGlzLl9pc0V4cGFuZGFibGUob3V0cHV0KSkKLSAgICAg
ICAgICAgIHNwYW4uY2xhc3NMaXN0LmFkZCgiZXhwYW5kYWJsZSIpOwotCi0gICAgICAgIGZvcm1h
dHRlci5jYWxsKHRoaXMsIG91dHB1dCwgc3BhbiwgZm9yY2VPYmplY3RGb3JtYXQpOwotICAgICAg
ICByZXR1cm4gc3BhbjsKLSAgICB9LAotCi0gICAgX2Zvcm1hdFBhcmFtZXRlckFzVmFsdWU6IGZ1
bmN0aW9uKHZhbHVlLCBlbGVtKQotICAgIHsKLSAgICAgICAgZWxlbS5hcHBlbmRDaGlsZChXZWJJ
bnNwZWN0b3IuRm9ybWF0dGVkVmFsdWUuY3JlYXRlRWxlbWVudEZvclJlbW90ZU9iamVjdCh2YWx1
ZSkpOwotICAgIH0sCi0KLSAgICBfZm9ybWF0UGFyYW1ldGVyQXNPYmplY3Q6IGZ1bmN0aW9uKG9i
aiwgZWxlbSwgZm9yY2VFeHBhbnNpb24pCi0gICAgewotICAgICAgICAvLyBGSVhNRTogU2hvdWxk
IGhhdmUgYSBiZXR0ZXIgT2JqZWN0VHJlZVZpZXcgbW9kZSBmb3IgY2xhc3NlcyAoc3RhdGljIG1l
dGhvZHMgYW5kIG1ldGhvZHMpLgotICAgICAgICB0aGlzLl9vYmplY3RUcmVlID0gbmV3IFdlYklu
c3BlY3Rvci5PYmplY3RUcmVlVmlldyhvYmosIG51bGwsIHRoaXMuX3Jvb3RQcm9wZXJ0eVBhdGhG
b3JPYmplY3Qob2JqKSwgZm9yY2VFeHBhbnNpb24pOwotICAgICAgICBlbGVtLmFwcGVuZENoaWxk
KHRoaXMuX29iamVjdFRyZWUuZWxlbWVudCk7Ci0gICAgfSwKLQotICAgIF9mb3JtYXRQYXJhbWV0
ZXJBc1N0cmluZzogZnVuY3Rpb24ob3V0cHV0LCBlbGVtKQotICAgIHsKLSAgICAgICAgdmFyIHNw
YW4gPSBXZWJJbnNwZWN0b3IuRm9ybWF0dGVkVmFsdWUuY3JlYXRlTGlua2lmaWVkRWxlbWVudFN0
cmluZyhvdXRwdXQuZGVzY3JpcHRpb24pOwotICAgICAgICBlbGVtLmFwcGVuZENoaWxkKHNwYW4p
OwotICAgIH0sCi0KLSAgICBfZm9ybWF0UGFyYW1ldGVyQXNOb2RlOiBmdW5jdGlvbihvYmplY3Qs
IGVsZW0pCi0gICAgewotICAgICAgICB2YXIgc3BhbiA9IFdlYkluc3BlY3Rvci5Gb3JtYXR0ZWRW
YWx1ZS5jcmVhdGVFbGVtZW50Rm9yTm9kZShvYmplY3QpOwotICAgICAgICBlbGVtLmFwcGVuZENo
aWxkKHNwYW4pOwotICAgIH0sCi0KLSAgICBfZm9ybWF0UGFyYW1ldGVyQXNBcnJheTogZnVuY3Rp
b24oYXJyLCBlbGVtKQotICAgIHsKLSAgICAgICAgdGhpcy5fb2JqZWN0VHJlZSA9IG5ldyBXZWJJ
bnNwZWN0b3IuT2JqZWN0VHJlZVZpZXcoYXJyLCBXZWJJbnNwZWN0b3IuT2JqZWN0VHJlZVZpZXcu
TW9kZS5Qcm9wZXJ0aWVzLCB0aGlzLl9yb290UHJvcGVydHlQYXRoRm9yT2JqZWN0KGFycikpOwot
ICAgICAgICBlbGVtLmFwcGVuZENoaWxkKHRoaXMuX29iamVjdFRyZWUuZWxlbWVudCk7Ci0gICAg
fSwKLQotICAgIF9yb290UHJvcGVydHlQYXRoRm9yT2JqZWN0OiBmdW5jdGlvbihvYmplY3QpCi0g
ICAgewotICAgICAgICBpZiAoIXRoaXMuc2F2ZWRSZXN1bHRJbmRleCkKLSAgICAgICAgICAgIHJl
dHVybiBudWxsOwotCi0gICAgICAgIHJldHVybiBuZXcgV2ViSW5zcGVjdG9yLlByb3BlcnR5UGF0
aChvYmplY3QsICIkIiArIHRoaXMuc2F2ZWRSZXN1bHRJbmRleCk7Ci0gICAgfSwKLQotICAgIF91
c2VyUHJvdmlkZWRDb2x1bW5OYW1lczogZnVuY3Rpb24oY29sdW1uTmFtZXNBcmd1bWVudCkKLSAg
ICB7Ci0gICAgICAgIGlmICghY29sdW1uTmFtZXNBcmd1bWVudCkKLSAgICAgICAgICAgIHJldHVy
biBudWxsOwotCi0gICAgICAgIHZhciByZW1vdGVPYmplY3QgPSBXZWJJbnNwZWN0b3IuUmVtb3Rl
T2JqZWN0LmZyb21QYXlsb2FkKGNvbHVtbk5hbWVzQXJndW1lbnQpOwotCi0gICAgICAgIC8vIFNp
bmdsZSBwcmltaXRpdmUgYXJndW1lbnQuCi0gICAgICAgIGlmIChyZW1vdGVPYmplY3QudHlwZSA9
PT0gInN0cmluZyIgfHwgcmVtb3RlT2JqZWN0LnR5cGUgPT09ICJudW1iZXIiKQotICAgICAgICAg
ICAgcmV0dXJuIFtTdHJpbmcoY29sdW1uTmFtZXNBcmd1bWVudC52YWx1ZSldOwotCi0gICAgICAg
IC8vIElnbm9yZSBldmVyeXRoaW5nIHRoYXQgaXMgbm90IGFuIGFycmF5IHdpdGggcHJvcGVydHkg
cHJldmlld3MuCi0gICAgICAgIGlmIChyZW1vdGVPYmplY3QudHlwZSAhPT0gIm9iamVjdCIgfHwg
cmVtb3RlT2JqZWN0LnN1YnR5cGUgIT09ICJhcnJheSIgfHwgIXJlbW90ZU9iamVjdC5wcmV2aWV3
IHx8ICFyZW1vdGVPYmplY3QucHJldmlldy5wcm9wZXJ0eVByZXZpZXdzKQotICAgICAgICAgICAg
cmV0dXJuIG51bGw7Ci0KLSAgICAgICAgLy8gQXJyYXkuIExvb2sgaW50byB0aGUgcHJldmlldyBh
bmQgZ2V0IHN0cmluZyB2YWx1ZXMuCi0gICAgICAgIHZhciBleHRyYWN0ZWRDb2x1bW5OYW1lcyA9
IFtdOwotICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eVByZXZpZXcgb2YgcmVtb3RlT2JqZWN0LnBy
ZXZpZXcucHJvcGVydHlQcmV2aWV3cykgewotICAgICAgICAgICAgaWYgKHByb3BlcnR5UHJldmll
dy50eXBlID09PSAic3RyaW5nIiB8fCBwcm9wZXJ0eVByZXZpZXcudHlwZSA9PT0gIm51bWJlciIp
Ci0gICAgICAgICAgICAgICAgZXh0cmFjdGVkQ29sdW1uTmFtZXMucHVzaChTdHJpbmcocHJvcGVy
dHlQcmV2aWV3LnZhbHVlKSk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZXh0cmFjdGVk
Q29sdW1uTmFtZXMubGVuZ3RoID8gZXh0cmFjdGVkQ29sdW1uTmFtZXMgOiBudWxsOwotICAgIH0s
Ci0KLSAgICBfZm9ybWF0UGFyYW1ldGVyQXNUYWJsZTogZnVuY3Rpb24ocGFyYW1ldGVycykKLSAg
ICB7Ci0gICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIp
OwotICAgICAgICB2YXIgdGFibGUgPSBwYXJhbWV0ZXJzWzBdOwotICAgICAgICBpZiAoIXRhYmxl
IHx8ICF0YWJsZS5wcmV2aWV3KQotICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7Ci0KLSAgICAg
ICAgdmFyIHJvd3MgPSBbXTsKLSAgICAgICAgdmFyIGNvbHVtbk5hbWVzID0gW107Ci0gICAgICAg
IHZhciBmbGF0VmFsdWVzID0gW107Ci0gICAgICAgIHZhciBwcmV2aWV3ID0gdGFibGUucHJldmll
dzsKLSAgICAgICAgdmFyIHVzZXJQcm92aWRlZENvbHVtbk5hbWVzID0gZmFsc2U7Ci0KLSAgICAg
ICAgLy8gVXNlciBwcm92aWRlZCBjb2x1bW5OYW1lcy4KLSAgICAgICAgdmFyIGV4dHJhY3RlZENv
bHVtbk5hbWVzID0gdGhpcy5fdXNlclByb3ZpZGVkQ29sdW1uTmFtZXMocGFyYW1ldGVyc1sxXSk7
Ci0gICAgICAgIGlmIChleHRyYWN0ZWRDb2x1bW5OYW1lcykgewotICAgICAgICAgICAgdXNlclBy
b3ZpZGVkQ29sdW1uTmFtZXMgPSB0cnVlOwotICAgICAgICAgICAgY29sdW1uTmFtZXMgPSBleHRy
YWN0ZWRDb2x1bW5OYW1lczsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIENoZWNrIGZpcnN0IGZv
ciB2YWx1ZVByZXZpZXdzIGluIHRoZSBwcm9wZXJ0aWVzIG1lYW5pbmcgdGhpcyB3YXMgYW4gYXJy
YXkgb2Ygb2JqZWN0cy4KLSAgICAgICAgaWYgKHByZXZpZXcucHJvcGVydHlQcmV2aWV3cykgewot
ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcmV2aWV3LnByb3BlcnR5UHJldmlld3Mu
bGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICB2YXIgcm93UHJvcGVydHkgPSBwcmV2aWV3
LnByb3BlcnR5UHJldmlld3NbaV07Ci0gICAgICAgICAgICAgICAgdmFyIHJvd1ByZXZpZXcgPSBy
b3dQcm9wZXJ0eS52YWx1ZVByZXZpZXc7Ci0gICAgICAgICAgICAgICAgaWYgKCFyb3dQcmV2aWV3
KQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgICAgIHZhciBy
b3dWYWx1ZSA9IHt9OwotICAgICAgICAgICAgICAgIGNvbnN0IG1heENvbHVtbnNUb1JlbmRlciA9
IDEwOwotICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcm93UHJldmlldy5wcm9w
ZXJ0eVByZXZpZXdzLmxlbmd0aDsgKytqKSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhciBjZWxs
UHJvcGVydHkgPSByb3dQcmV2aWV3LnByb3BlcnR5UHJldmlld3Nbal07Ci0gICAgICAgICAgICAg
ICAgICAgIHZhciBjb2x1bW5SZW5kZXJlZCA9IGNvbHVtbk5hbWVzLmluY2x1ZGVzKGNlbGxQcm9w
ZXJ0eS5uYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFjb2x1bW5SZW5kZXJlZCkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzZXJQcm92aWRlZENvbHVtbk5hbWVzIHx8IGNv
bHVtbk5hbWVzLmxlbmd0aCA9PT0gbWF4Q29sdW1uc1RvUmVuZGVyKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uUmVu
ZGVyZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uTmFtZXMucHVzaChj
ZWxsUHJvcGVydHkubmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgICAgICByb3dWYWx1ZVtjZWxsUHJvcGVydHkubmFtZV0gPSBXZWJJbnNwZWN0b3IuRm9ybWF0
dGVkVmFsdWUuY3JlYXRlRWxlbWVudEZvclByb3BlcnR5UHJldmlldyhjZWxsUHJvcGVydHkpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByb3dzLnB1c2goW3Jvd1Byb3BlcnR5
Lm5hbWUsIHJvd1ZhbHVlXSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAv
LyBJZiB0aGVyZSB3ZXJlIHZhbHVlUHJldmlld3MsIGNvbnZlcnQgdG8gYSBmbGF0IGxpc3QuCi0g
ICAgICAgIGlmIChyb3dzLmxlbmd0aCkgewotICAgICAgICAgICAgY29uc3QgZW1EYXNoID0gIlx1
MjAxNCI7Ci0gICAgICAgICAgICBjb2x1bW5OYW1lcy51bnNoaWZ0KFdlYkluc3BlY3Rvci5VSVN0
cmluZygiKEluZGV4KSIpKTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93cy5s
ZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgIHZhciByb3dOYW1lID0gcm93c1tpXVswXTsK
LSAgICAgICAgICAgICAgICB2YXIgcm93VmFsdWUgPSByb3dzW2ldWzFdOwotICAgICAgICAgICAg
ICAgIGZsYXRWYWx1ZXMucHVzaChyb3dOYW1lKTsKLSAgICAgICAgICAgICAgICBmb3IgKHZhciBq
ID0gMTsgaiA8IGNvbHVtbk5hbWVzLmxlbmd0aDsgKytqKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHZhciBjb2x1bW5OYW1lID0gY29sdW1uTmFtZXNbal07Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICghKGNvbHVtbk5hbWUgaW4gcm93VmFsdWUpKQotICAgICAgICAgICAgICAgICAgICAgICAgZmxh
dFZhbHVlcy5wdXNoKGVtRGFzaCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGZsYXRWYWx1ZXMucHVzaChyb3dWYWx1ZVtjb2x1bW5OYW1lXSk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8g
SWYgdGhlcmUgd2VyZSBubyB2YWx1ZSBQcmV2aWV3cywgdGhlbiBjaGVjayBmb3IgYW4gYXJyYXkg
b2YgdmFsdWVzLgotICAgICAgICBpZiAoIWZsYXRWYWx1ZXMubGVuZ3RoICYmIHByZXZpZXcucHJv
cGVydHlQcmV2aWV3cykgewotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcmV2aWV3
LnByb3BlcnR5UHJldmlld3MubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgICAgICB2YXIgcm93
UHJvcGVydHkgPSBwcmV2aWV3LnByb3BlcnR5UHJldmlld3NbaV07Ci0gICAgICAgICAgICAgICAg
aWYgKCEoInZhbHVlIiBpbiByb3dQcm9wZXJ0eSkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotCi0gICAgICAgICAgICAgICAgaWYgKCFjb2x1bW5OYW1lcy5sZW5ndGgpIHsKLSAgICAg
ICAgICAgICAgICAgICAgY29sdW1uTmFtZXMucHVzaChXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIklu
ZGV4IikpOwotICAgICAgICAgICAgICAgICAgICBjb2x1bW5OYW1lcy5wdXNoKFdlYkluc3BlY3Rv
ci5VSVN0cmluZygiVmFsdWUiKSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgZmxhdFZhbHVlcy5wdXNoKHJvd1Byb3BlcnR5Lm5hbWUpOwotICAgICAgICAgICAgICAgIGZs
YXRWYWx1ZXMucHVzaChXZWJJbnNwZWN0b3IuRm9ybWF0dGVkVmFsdWUuY3JlYXRlRWxlbWVudEZv
clByb3BlcnR5UHJldmlldyhyb3dQcm9wZXJ0eSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gSWYgbG9zc2xlc3Mgb3Igbm90IHRhYmxlIGRhdGEsIG91dHB1dCB0aGUg
b2JqZWN0IHNvIGZ1bGwgZGF0YSBjYW4gYmUgZ290dGVuLgotICAgICAgICBpZiAoIXByZXZpZXcu
bG9zc2xlc3MgfHwgIWZsYXRWYWx1ZXMubGVuZ3RoKSB7Ci0gICAgICAgICAgICBlbGVtZW50LmFw
cGVuZENoaWxkKHRoaXMuX2Zvcm1hdFBhcmFtZXRlcih0YWJsZSkpOwotICAgICAgICAgICAgaWYg
KCFmbGF0VmFsdWVzLmxlbmd0aCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudDsKLSAg
ICAgICAgfQotCi0gICAgICAgIHZhciBkYXRhR3JpZCA9IFdlYkluc3BlY3Rvci5EYXRhR3JpZC5j
cmVhdGVTb3J0YWJsZURhdGFHcmlkKGNvbHVtbk5hbWVzLCBmbGF0VmFsdWVzKTsKLSAgICAgICAg
ZGF0YUdyaWQuZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJpbmxpbmUiKTsKLSAgICAgICAgZWxlbWVu
dC5hcHBlbmRDaGlsZChkYXRhR3JpZC5lbGVtZW50KTsKLQotICAgICAgICByZXR1cm4gZWxlbWVu
dDsKLSAgICB9LAotCi0gICAgX2Zvcm1hdFdpdGhTdWJzdGl0dXRpb25TdHJpbmc6IGZ1bmN0aW9u
KHBhcmFtZXRlcnMsIGZvcm1hdHRlZFJlc3VsdCkKLSAgICB7Ci0gICAgICAgIHZhciBmb3JtYXR0
ZXJzID0ge307Ci0KLSAgICAgICAgZnVuY3Rpb24gcGFyYW1ldGVyRm9ybWF0dGVyKGZvcmNlLCBv
YmopCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb3JtYXRQYXJhbWV0ZXIo
b2JqLCBmb3JjZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBzdHJpbmdGb3JtYXR0
ZXIob2JqKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gb2JqLmRlc2NyaXB0aW9uOwot
ICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb24gZmxvYXRGb3JtYXR0ZXIob2JqKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBpZiAodHlwZW9mIG9iai52YWx1ZSAhPT0gIm51bWJlciIpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQob2JqLmRlc2NyaXB0aW9uKTsKLSAgICAgICAg
ICAgIHJldHVybiBvYmoudmFsdWU7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5jdGlvbiBpbnRl
Z2VyRm9ybWF0dGVyKG9iaikKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmou
dmFsdWUgIT09ICJudW1iZXIiKQotICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUludChvYmou
ZGVzY3JpcHRpb24pOwotICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3Iob2JqLnZhbHVlKTsK
LSAgICAgICAgfQotCi0gICAgICAgIHZhciBjdXJyZW50U3R5bGUgPSBudWxsOwotICAgICAgICBm
dW5jdGlvbiBzdHlsZUZvcm1hdHRlcihvYmopCi0gICAgICAgIHsKLSAgICAgICAgICAgIGN1cnJl
bnRTdHlsZSA9IHt9OwotICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoInNwYW4iKTsKLSAgICAgICAgICAgIGJ1ZmZlci5zZXRBdHRyaWJ1dGUoInN0eWxlIiwg
b2JqLmRlc2NyaXB0aW9uKTsKLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnVmZmVy
LnN0eWxlLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgdmFyIHByb3BlcnR5ID0gYnVm
ZmVyLnN0eWxlW2ldOwotICAgICAgICAgICAgICAgIGlmIChpc1doaXRlbGlzdGVkUHJvcGVydHko
cHJvcGVydHkpKQotICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3R5bGVbcHJvcGVydHldID0g
YnVmZmVyLnN0eWxlW3Byb3BlcnR5XTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAg
ICAgIGZ1bmN0aW9uIGlzV2hpdGVsaXN0ZWRQcm9wZXJ0eShwcm9wZXJ0eSkKLSAgICAgICAgewot
ICAgICAgICAgICAgdmFyIHByZWZpeGVzID0gWyJiYWNrZ3JvdW5kIiwgImJvcmRlciIsICJjb2xv
ciIsICJmb250IiwgImxpbmUiLCAibWFyZ2luIiwgInBhZGRpbmciLCAidGV4dCIsICItd2Via2l0
LWJhY2tncm91bmQiLCAiLXdlYmtpdC1ib3JkZXIiLCAiLXdlYmtpdC1mb250IiwgIi13ZWJraXQt
bWFyZ2luIiwgIi13ZWJraXQtcGFkZGluZyIsICItd2Via2l0LXRleHQiXTsKLSAgICAgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgcHJlZml4ZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAg
ICAgICBpZiAocHJvcGVydHkuc3RhcnRzV2l0aChwcmVmaXhlc1tpXSkpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRmlyZWJ1ZyB1c2VzICVvIGZvciBmb3JtYXR0
aW5nIG9iamVjdHMuCi0gICAgICAgIGZvcm1hdHRlcnMubyA9IHBhcmFtZXRlckZvcm1hdHRlci5i
aW5kKHRoaXMsIGZhbHNlKTsKLSAgICAgICAgZm9ybWF0dGVycy5zID0gc3RyaW5nRm9ybWF0dGVy
OwotICAgICAgICBmb3JtYXR0ZXJzLmYgPSBmbG9hdEZvcm1hdHRlcjsKLQotICAgICAgICAvLyBG
aXJlYnVnIGFsbG93cyBib3RoICVpIGFuZCAlZCBmb3IgZm9ybWF0dGluZyBpbnRlZ2Vycy4KLSAg
ICAgICAgZm9ybWF0dGVycy5pID0gaW50ZWdlckZvcm1hdHRlcjsKLSAgICAgICAgZm9ybWF0dGVy
cy5kID0gaW50ZWdlckZvcm1hdHRlcjsKLQotICAgICAgICAvLyBGaXJlYnVnIHVzZXMgJWMgZm9y
IHN0eWxpbmcgdGhlIG1lc3NhZ2UuCi0gICAgICAgIGZvcm1hdHRlcnMuYyA9IHN0eWxlRm9ybWF0
dGVyOwotCi0gICAgICAgIC8vIFN1cHBvcnQgJU8gdG8gZm9yY2Ugb2JqZWN0IGZvcm1hdHRpbmcs
IGluc3RlYWQgb2YgdGhlIHR5cGUtYmFzZWQgJW8gZm9ybWF0dGluZy4KLSAgICAgICAgZm9ybWF0
dGVycy5PID0gcGFyYW1ldGVyRm9ybWF0dGVyLmJpbmQodGhpcywgdHJ1ZSk7Ci0KLSAgICAgICAg
ZnVuY3Rpb24gYXBwZW5kKGEsIGIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChiIGluc3Rh
bmNlb2YgTm9kZSkKLSAgICAgICAgICAgICAgICBhLmFwcGVuZENoaWxkKGIpOwotICAgICAgICAg
ICAgZWxzZSBpZiAoYikgewotICAgICAgICAgICAgICAgIHZhciB0b0FwcGVuZCA9IFdlYkluc3Bl
Y3Rvci5saW5raWZ5U3RyaW5nQXNGcmFnbWVudChiLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAg
ICAgIGlmIChjdXJyZW50U3R5bGUpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIHdyYXBwZXIg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci0gICAgICAgICAgICAgICAgICAgIGZv
ciAodmFyIGtleSBpbiBjdXJyZW50U3R5bGUpCi0gICAgICAgICAgICAgICAgICAgICAgICB3cmFw
cGVyLnN0eWxlW2tleV0gPSBjdXJyZW50U3R5bGVba2V5XTsKLSAgICAgICAgICAgICAgICAgICAg
d3JhcHBlci5hcHBlbmRDaGlsZCh0b0FwcGVuZCk7Ci0gICAgICAgICAgICAgICAgICAgIHRvQXBw
ZW5kID0gd3JhcHBlcjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdmFyIHNw
YW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci0gICAgICAgICAgICAgICAgc3Bh
bi5jbGFzc05hbWUgPSAidHlwZS1zdHJpbmciOwotICAgICAgICAgICAgICAgIHNwYW4uYXBwZW5k
Q2hpbGQodG9BcHBlbmQpOwotICAgICAgICAgICAgICAgIGEuYXBwZW5kQ2hpbGQoc3Bhbik7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gYTsKLSAgICAgICAgfQotCi0gICAgICAg
IC8vIFN0cmluZy5mb3JtYXQgZG9lcyB0cmVhdCBmb3JtYXR0ZWRSZXN1bHQgbGlrZSBhIEJ1aWxk
ZXIsIHJlc3VsdCBpcyBhbiBvYmplY3QuCi0gICAgICAgIHJldHVybiBTdHJpbmcuZm9ybWF0KHBh
cmFtZXRlcnNbMF0uZGVzY3JpcHRpb24sIHBhcmFtZXRlcnMuc2xpY2UoMSksIGZvcm1hdHRlcnMs
IGZvcm1hdHRlZFJlc3VsdCwgYXBwZW5kKTsKLSAgICB9LAotCi0gICAgZGVjb3JhdGVNZXNzYWdl
RWxlbWVudDogZnVuY3Rpb24oZWxlbWVudCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9lbGVt
ZW50KQotICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQ7Ci0KLSAgICAgICAgZWxlbWVu
dC5tZXNzYWdlID0gdGhpczsKLSAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjb25zb2xl
LW1lc3NhZ2UiKTsKLQotICAgICAgICB0aGlzLl9lbGVtZW50ID0gZWxlbWVudDsKLQotICAgICAg
ICBzd2l0Y2ggKHRoaXMubGV2ZWwpIHsKLSAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkxl
Z2FjeUNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5UaXA6Ci0gICAgICAgICAgICAgICAgZWxl
bWVudC5jbGFzc0xpc3QuYWRkKCJjb25zb2xlLXRpcC1sZXZlbCIpOwotICAgICAgICAgICAgICAg
IGVsZW1lbnQuc2V0QXR0cmlidXRlKCJkYXRhLWxhYmVscHJlZml4IiwgV2ViSW5zcGVjdG9yLlVJ
U3RyaW5nKCJUaXA6ICIpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNh
c2UgV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5Mb2c6Ci0g
ICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKCJjb25zb2xlLWxvZy1sZXZlbCIp
OwotICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCJkYXRhLWxhYmVscHJlZml4
IiwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJMb2c6ICIpKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlLk1l
c3NhZ2VMZXZlbC5EZWJ1ZzoKLSAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQo
ImNvbnNvbGUtZGVidWctbGV2ZWwiKTsKLSAgICAgICAgICAgICAgICBlbGVtZW50LnNldEF0dHJp
YnV0ZSgiZGF0YS1sYWJlbHByZWZpeCIsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiRGVidWc6ICIp
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9y
LkxlZ2FjeUNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5XYXJuaW5nOgotICAgICAgICAgICAg
ICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgiY29uc29sZS13YXJuaW5nLWxldmVsIik7Ci0gICAg
ICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoImRhdGEtbGFiZWxwcmVmaXgiLCBXZWJJ
bnNwZWN0b3IuVUlTdHJpbmcoIldhcm5pbmc6ICIpKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlLk1lc3Nh
Z2VMZXZlbC5FcnJvcjoKLSAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoImNv
bnNvbGUtZXJyb3ItbGV2ZWwiKTsKLSAgICAgICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0
ZSgiZGF0YS1sYWJlbHByZWZpeCIsIFdlYkluc3BlY3Rvci5VSVN0cmluZygiRXJyb3I6ICIpKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0aGlzLnR5
cGUgPT09IFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5TdGFy
dEdyb3VwIHx8IHRoaXMudHlwZSA9PT0gV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdl
Lk1lc3NhZ2VUeXBlLlN0YXJ0R3JvdXBDb2xsYXBzZWQpCi0gICAgICAgICAgICBlbGVtZW50LmNs
YXNzTGlzdC5hZGQoImNvbnNvbGUtZ3JvdXAtdGl0bGUiKTsKLQotICAgICAgICBlbGVtZW50LmFw
cGVuZENoaWxkKHRoaXMuZm9ybWF0dGVkTWVzc2FnZSk7Ci0KLSAgICAgICAgaWYgKHRoaXMucmVw
ZWF0Q291bnQgPiAxKQotICAgICAgICAgICAgdGhpcy51cGRhdGVSZXBlYXRDb3VudCgpOwotCi0g
ICAgICAgIHJldHVybiBlbGVtZW50OwotICAgIH0sCi0KLSAgICB0b01lc3NhZ2VFbGVtZW50OiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fZWxlbWVudCkKLSAgICAgICAgICAg
IHJldHVybiB0aGlzLl9lbGVtZW50OwotCi0gICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0KLSAgICAgICAgcmV0dXJuIHRoaXMuZGVjb3JhdGVNZXNz
YWdlRWxlbWVudChlbGVtZW50KTsKLSAgICB9LAotCi0gICAgX3BvcHVsYXRlU3RhY2tUcmFjZVRy
ZWVFbGVtZW50OiBmdW5jdGlvbihwYXJlbnRUcmVlRWxlbWVudCkKLSAgICB7Ci0gICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc3RhY2tUcmFjZS5sZW5ndGg7IGkrKykgewotICAgICAg
ICAgICAgdmFyIGZyYW1lID0gdGhpcy5fc3RhY2tUcmFjZVtpXTsKLQotICAgICAgICAgICAgdmFy
IGNvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICAgICAgICAgIHZh
ciBtZXNzYWdlVGV4dEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci0g
ICAgICAgICAgICBtZXNzYWdlVGV4dEVsZW1lbnQuY2xhc3NOYW1lID0gImNvbnNvbGUtbWVzc2Fn
ZS10ZXh0IjsKLSAgICAgICAgICAgIHZhciBmdW5jdGlvbk5hbWUgPSBmcmFtZS5mdW5jdGlvbk5h
bWUgfHwgV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCIoYW5vbnltb3VzIGZ1bmN0aW9uKSIpOwotICAg
ICAgICAgICAgbWVzc2FnZVRleHRFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRl
eHROb2RlKGZ1bmN0aW9uTmFtZSkpOwotICAgICAgICAgICAgY29udGVudC5hcHBlbmRDaGlsZCht
ZXNzYWdlVGV4dEVsZW1lbnQpOwotCi0gICAgICAgICAgICBpZiAoZnJhbWUudXJsICYmICF0aGlz
Ll9zaG91bGRIaWRlVVJMKGZyYW1lLnVybCkpIHsKLSAgICAgICAgICAgICAgICB2YXIgdXJsRWxl
bWVudCA9IHRoaXMuX2xpbmtpZnlDYWxsRnJhbWUoZnJhbWUpOwotICAgICAgICAgICAgICAgIGNv
bnRlbnQuYXBwZW5kQ2hpbGQodXJsRWxlbWVudCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIHZhciB0cmVlRWxlbWVudCA9IG5ldyBXZWJJbnNwZWN0b3IuVHJlZUVsZW1lbnQoY29udGVu
dCk7Ci0gICAgICAgICAgICBwYXJlbnRUcmVlRWxlbWVudC5hcHBlbmRDaGlsZCh0cmVlRWxlbWVu
dCk7Ci0gICAgICAgIH0KLSAgICB9LAotCi0gICAgdXBkYXRlUmVwZWF0Q291bnQ6IGZ1bmN0aW9u
KCkgewotICAgICAgICBpZiAoIXRoaXMucmVwZWF0Q291bnRFbGVtZW50KSB7Ci0gICAgICAgICAg
ICB0aGlzLnJlcGVhdENvdW50RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4i
KTsKLSAgICAgICAgICAgIHRoaXMucmVwZWF0Q291bnRFbGVtZW50LmNsYXNzTmFtZSA9ICJidWJi
bGUiOwotCi0gICAgICAgICAgICB0aGlzLl9lbGVtZW50Lmluc2VydEJlZm9yZSh0aGlzLnJlcGVh
dENvdW50RWxlbWVudCwgdGhpcy5fZWxlbWVudC5maXJzdENoaWxkKTsKLSAgICAgICAgfQotICAg
ICAgICB0aGlzLnJlcGVhdENvdW50RWxlbWVudC50ZXh0Q29udGVudCA9IHRoaXMucmVwZWF0Q291
bnQ7Ci0gICAgfSwKLQotICAgIHRvU3RyaW5nOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2
YXIgc291cmNlU3RyaW5nOwotICAgICAgICBzd2l0Y2ggKHRoaXMuc291cmNlKSB7Ci0gICAgICAg
ICAgICBjYXNlIFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNl
LkhUTUw6Ci0gICAgICAgICAgICAgICAgc291cmNlU3RyaW5nID0gIkhUTUwiOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29s
ZU1lc3NhZ2UuTWVzc2FnZVNvdXJjZS5YTUw6Ci0gICAgICAgICAgICAgICAgc291cmNlU3RyaW5n
ID0gIlhNTCI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdlYklu
c3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNlLkpTOgotICAgICAgICAg
ICAgICAgIHNvdXJjZVN0cmluZyA9ICJKUyI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZS5NZXNzYWdlU291
cmNlLk5ldHdvcms6Ci0gICAgICAgICAgICAgICAgc291cmNlU3RyaW5nID0gIk5ldHdvcmsiOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuTGVn
YWN5Q29uc29sZU1lc3NhZ2UuTWVzc2FnZVNvdXJjZS5Db25zb2xlQVBJOgotICAgICAgICAgICAg
ICAgIHNvdXJjZVN0cmluZyA9ICJDb25zb2xlQVBJIjsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlLk1lc3Nh
Z2VTb3VyY2UuT3RoZXI6Ci0gICAgICAgICAgICAgICAgc291cmNlU3RyaW5nID0gIk90aGVyIjsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHZhciB0eXBlU3Ry
aW5nOwotICAgICAgICBzd2l0Y2ggKHRoaXMudHlwZSkgewotICAgICAgICAgICAgY2FzZSBXZWJJ
bnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuTG9nOgotICAgICAgICAg
ICAgICAgIHR5cGVTdHJpbmcgPSAiTG9nIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBl
LkRpcjoKLSAgICAgICAgICAgICAgICB0eXBlU3RyaW5nID0gIkRpciI7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVz
c2FnZS5NZXNzYWdlVHlwZS5EaXJYTUw6Ci0gICAgICAgICAgICAgICAgdHlwZVN0cmluZyA9ICJE
aXIgWE1MIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgV2ViSW5z
cGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLlRyYWNlOgotICAgICAgICAg
ICAgICAgIHR5cGVTdHJpbmcgPSAiVHJhY2UiOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5
cGUuU3RhcnRHcm91cENvbGxhcHNlZDoKLSAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkxl
Z2FjeUNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLlN0YXJ0R3JvdXA6Ci0gICAgICAgICAgICAg
ICAgdHlwZVN0cmluZyA9ICJTdGFydCBHcm91cCI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZS5NZXNzYWdl
VHlwZS5FbmRHcm91cDoKLSAgICAgICAgICAgICAgICB0eXBlU3RyaW5nID0gIkVuZCBHcm91cCI7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5M
ZWdhY3lDb25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5Bc3NlcnQ6Ci0gICAgICAgICAgICAgICAg
dHlwZVN0cmluZyA9ICJBc3NlcnQiOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuUmVz
dWx0OgotICAgICAgICAgICAgICAgIHR5cGVTdHJpbmcgPSAiUmVzdWx0IjsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBzb3VyY2VTdHJpbmcgKyAi
ICIgKyB0eXBlU3RyaW5nICsgIiAiICsgdGhpcy5sZXZlbFN0cmluZyArICI6ICIgKyB0aGlzLmZv
cm1hdHRlZE1lc3NhZ2UudGV4dENvbnRlbnQgKyAiXG4iICsgdGhpcy51cmwgKyAiIGxpbmUgIiAr
IHRoaXMubGluZTsKLSAgICB9LAotCi0gICAgZ2V0IHRleHQoKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIHRoaXMuX21lc3NhZ2VUZXh0OwotICAgIH0sCi0KLSAgICBpc0VxdWFsOiBmdW5jdGlvbiht
c2cpCi0gICAgewotICAgICAgICBpZiAoIW1zZykKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgICAgICBpZiAodGhpcy5fc3RhY2tUcmFjZSkgewotICAgICAgICAgICAgaWYgKCFtc2cu
X3N0YWNrVHJhY2UpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
dmFyIGwgPSB0aGlzLl9zdGFja1RyYWNlOwotICAgICAgICAgICAgdmFyIHIgPSBtc2cuX3N0YWNr
VHJhY2U7Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGwubGVuZ3RoOyBpKyspIHsK
LSAgICAgICAgICAgICAgICBpZiAobFtpXS51cmwgIT09IHJbaV0udXJsIHx8Ci0gICAgICAgICAg
ICAgICAgICAgIGxbaV0uZnVuY3Rpb25OYW1lICE9PSByW2ldLmZ1bmN0aW9uTmFtZSB8fAotICAg
ICAgICAgICAgICAgICAgICBsW2ldLmxpbmVOdW1iZXIgIT09IHJbaV0ubGluZU51bWJlciB8fAot
ICAgICAgICAgICAgICAgICAgICBsW2ldLmNvbHVtbk51bWJlciAhPT0gcltpXS5jb2x1bW5OdW1i
ZXIpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotCi0gICAgICAgIHJldHVybiAodGhpcy5zb3VyY2UgPT09IG1zZy5zb3VyY2UpCi0g
ICAgICAgICAgICAmJiAodGhpcy50eXBlID09PSBtc2cudHlwZSkKLSAgICAgICAgICAgICYmICh0
aGlzLmxldmVsID09PSBtc2cubGV2ZWwpCi0gICAgICAgICAgICAmJiAodGhpcy5saW5lID09PSBt
c2cubGluZSkKLSAgICAgICAgICAgICYmICh0aGlzLnVybCA9PT0gbXNnLnVybCkKLSAgICAgICAg
ICAgICYmICh0aGlzLm1lc3NhZ2UgPT09IG1zZy5tZXNzYWdlKQotICAgICAgICAgICAgJiYgKHRo
aXMuX3JlcXVlc3QgPT09IG1zZy5fcmVxdWVzdCk7Ci0gICAgfSwKLQotICAgIGdldCBzdGFja1Ry
YWNlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9zdGFja1RyYWNlOwotICAgIH0sCi0K
LSAgICBjbG9uZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rv
ci5MZWdhY3lDb25zb2xlTWVzc2FnZS5jcmVhdGUodGhpcy5zb3VyY2UsIHRoaXMubGV2ZWwsIHRo
aXMuX21lc3NhZ2VUZXh0LCB0aGlzLnR5cGUsIHRoaXMudXJsLCB0aGlzLmxpbmUsIHRoaXMuY29s
dW1uLCB0aGlzLnJlcGVhdENvdW50LCB0aGlzLl9wYXJhbWV0ZXJzLCB0aGlzLl9zdGFja1RyYWNl
LCB0aGlzLl9yZXF1ZXN0KTsKLSAgICB9LAotCi0gICAgZ2V0IGxldmVsU3RyaW5nKCkKLSAgICB7
Ci0gICAgICAgIHN3aXRjaCAodGhpcy5sZXZlbCkgewotICAgICAgICAgICAgY2FzZSBXZWJJbnNw
ZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLlRpcDoKLSAgICAgICAgICAg
ICAgICByZXR1cm4gIlRpcCI7Ci0gICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5MZWdhY3lD
b25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuTG9nOgotICAgICAgICAgICAgICAgIHJldHVybiAi
TG9nIjsKLSAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdl
Lk1lc3NhZ2VMZXZlbC5XYXJuaW5nOgotICAgICAgICAgICAgICAgIHJldHVybiAiV2FybmluZyI7
Ci0gICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZS5NZXNz
YWdlTGV2ZWwuRGVidWc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJEZWJ1ZyI7Ci0gICAgICAg
ICAgICBjYXNlIFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwu
RXJyb3I6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJFcnJvciI7Ci0gICAgICAgIH0KLSAgICB9
LAotCi0gICAgZ2V0IGNsaXBib2FyZFByZWZpeFN0cmluZygpCi0gICAgewotICAgICAgICByZXR1
cm4gIlsiICsgdGhpcy5sZXZlbFN0cmluZyArICJdICI7Ci0gICAgfSwKLQotICAgIHRvQ2xpcGJv
YXJkU3RyaW5nOiBmdW5jdGlvbihpc1ByZWZpeE9wdGlvbmFsKQotICAgIHsKLSAgICAgICAgdmFy
IGlzVHJhY2UgPSB0aGlzLl9zaG91bGREdW1wU3RhY2tUcmFjZSgpOwotCi0gICAgICAgIHZhciBj
bGlwYm9hcmRTdHJpbmcgPSAiIjsKLSAgICAgICAgaWYgKHRoaXMuX2Zvcm1hdHRlZE1lc3NhZ2Ug
JiYgIWlzVHJhY2UpCi0gICAgICAgICAgICBjbGlwYm9hcmRTdHJpbmcgPSB0aGlzLl9mb3JtYXR0
ZWRNZXNzYWdlLnF1ZXJ5U2VsZWN0b3IoInNwYW4iKS5pbm5lclRleHQ7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIGNsaXBib2FyZFN0cmluZyA9IHRoaXMudHlwZSA9PT0gV2ViSW5zcGVjdG9y
LkxlZ2FjeUNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLlRyYWNlID8gImNvbnNvbGUudHJhY2Uo
KSIgOiB0aGlzLl9tZXNzYWdlIHx8IHRoaXMuX21lc3NhZ2VUZXh0OwotCi0gICAgICAgIGlmICgh
aXNQcmVmaXhPcHRpb25hbCB8fCB0aGlzLmVuZm9yY2VzQ2xpcGJvYXJkUHJlZml4U3RyaW5nKQot
ICAgICAgICAgICAgY2xpcGJvYXJkU3RyaW5nID0gdGhpcy5jbGlwYm9hcmRQcmVmaXhTdHJpbmcg
KyBjbGlwYm9hcmRTdHJpbmc7Ci0KLSAgICAgICAgaWYgKGlzVHJhY2UpIHsKLSAgICAgICAgICAg
IHRoaXMuX3N0YWNrVHJhY2UuZm9yRWFjaChmdW5jdGlvbihmcmFtZSkgewotICAgICAgICAgICAg
ICAgIGNsaXBib2FyZFN0cmluZyArPSAiXG5cdCIgKyAoZnJhbWUuZnVuY3Rpb25OYW1lIHx8IFdl
Ykluc3BlY3Rvci5VSVN0cmluZygiKGFub255bW91cyBmdW5jdGlvbikiKSk7Ci0gICAgICAgICAg
ICAgICAgaWYgKGZyYW1lLnVybCkKLSAgICAgICAgICAgICAgICAgICAgY2xpcGJvYXJkU3RyaW5n
ICs9ICIgKCIgKyBXZWJJbnNwZWN0b3IuZGlzcGxheU5hbWVGb3JVUkwoZnJhbWUudXJsKSArICIs
IGxpbmUgIiArIGZyYW1lLmxpbmVOdW1iZXIgKyAiKSI7Ci0gICAgICAgICAgICB9KTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHZhciByZXBlYXRTdHJpbmcgPSB0aGlzLnJlcGVhdENv
dW50ID4gMSA/ICJ4IiArIHRoaXMucmVwZWF0Q291bnQgOiAiIjsKLQotICAgICAgICAgICAgdmFy
IHVybExpbmUgPSAiIjsKLSAgICAgICAgICAgIGlmICh0aGlzLnVybCkgewotICAgICAgICAgICAg
ICAgIHZhciBjb21wb25lbnRzID0gW1dlYkluc3BlY3Rvci5kaXNwbGF5TmFtZUZvclVSTCh0aGlz
LnVybCksICJsaW5lICIgKyB0aGlzLmxpbmVdOwotICAgICAgICAgICAgICAgIGlmIChyZXBlYXRT
dHJpbmcpCi0gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMucHVzaChyZXBlYXRTdHJpbmcp
OwotICAgICAgICAgICAgICAgIHVybExpbmUgPSAiICgiICsgY29tcG9uZW50cy5qb2luKCIsICIp
ICsgIikiOwotICAgICAgICAgICAgfSBlbHNlIGlmIChyZXBlYXRTdHJpbmcpCi0gICAgICAgICAg
ICAgICAgdXJsTGluZSA9ICIgKCIgKyByZXBlYXRTdHJpbmcgKyAiKSI7Ci0KLSAgICAgICAgICAg
IGlmICh1cmxMaW5lKSB7Ci0gICAgICAgICAgICAgICAgdmFyIGxpbmVzID0gY2xpcGJvYXJkU3Ry
aW5nLnNwbGl0KCJcbiIpOwotICAgICAgICAgICAgICAgIGxpbmVzWzBdICs9IHVybExpbmU7Ci0g
ICAgICAgICAgICAgICAgY2xpcGJvYXJkU3RyaW5nID0gbGluZXMuam9pbigiXG4iKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBjbGlwYm9hcmRTdHJpbmc7Ci0g
ICAgfQotfTsKLQotV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlSW1wbC5wcm90b3R5
cGUuX19wcm90b19fID0gV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlLnByb3RvdHlw
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdz
L0xvZ0NvbnRlbnRWaWV3LmNzcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L1ZpZXdzL0xvZ0NvbnRlbnRWaWV3LmNzcwppbmRleCBjMjUzZmQ1Li5hNjNkNzA0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Mb2dDb250ZW50
Vmlldy5jc3MKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3Mv
TG9nQ29udGVudFZpZXcuY3NzCkBAIC0xMTEsNyArMTExLDcgQEAKICAgICB3aWR0aDogMTJweDsK
IH0KIAotLmNvbnNvbGUtbWVzc2FnZSAuYnViYmxlIHsKKy5jb25zb2xlLW1lc3NhZ2UgLnJlcGVh
dC1jb3VudCB7CiAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgIGhlaWdodDogMTVweDsK
ICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMTI4LCAxNTEsIDE4OSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Mb2dDb250ZW50Vmlldy5q
cyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0xvZ0NvbnRlbnRW
aWV3LmpzCmluZGV4IDU4MDFlZGYuLmI5ZDkzNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0xvZ0NvbnRlbnRWaWV3LmpzCisrKyBiL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL0xvZ0NvbnRlbnRWaWV3LmpzCkBA
IC0yMyw2ICsyMyw4IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8K
IAorLy8gRklYTUU6IExvZ0NvbnRlbnRWaWV3IGRvZXMgYSBsb3Qgb2YgZWxlbWVudCBtYW5pcHVs
YXRpb24uIEl0IHNob3VsZCBkZWFsIHdpdGggaGlnaGVyIGxldmVsIG9iamVjdHMuCisKIFdlYklu
c3BlY3Rvci5Mb2dDb250ZW50VmlldyA9IGZ1bmN0aW9uKHJlcHJlc2VudGVkT2JqZWN0KQogewog
ICAgIFdlYkluc3BlY3Rvci5Db250ZW50Vmlldy5jYWxsKHRoaXMsIHJlcHJlc2VudGVkT2JqZWN0
KTsKQEAgLTE3MSwyNSArMTczLDI2IEBAIFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90
b3R5cGUgPSB7CiAgICAgICAgIFdlYkluc3BlY3Rvci5sb2dNYW5hZ2VyLnJlcXVlc3RDbGVhck1l
c3NhZ2VzKCk7CiAgICAgfSwKIAotICAgIGRpZEFwcGVuZENvbnNvbGVNZXNzYWdlOiBmdW5jdGlv
bihtZXNzYWdlKQorICAgIGRpZEFwcGVuZENvbnNvbGVNZXNzYWdlVmlldzogZnVuY3Rpb24obWVz
c2FnZVZpZXcpCiAgICAgewogICAgICAgICBXZWJJbnNwZWN0b3IucXVpY2tDb25zb2xlLnVwZGF0
ZUxheW91dCgpOwogCiAgICAgICAgIC8vIE5lc3QgdGhlIG1lc3NhZ2UuCi0gICAgICAgIGlmICht
ZXNzYWdlLnR5cGUgIT09IFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZS5NZXNzYWdl
VHlwZS5FbmRHcm91cCkgeworICAgICAgICB2YXIgdHlwZSA9IG1lc3NhZ2VWaWV3Lm1lc3NhZ2Uu
dHlwZTsKKyAgICAgICAgaWYgKHR5cGUgIT09IFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5N
ZXNzYWdlVHlwZS5FbmRHcm91cCkgewogICAgICAgICAgICAgdmFyIHggPSAxNiAqIHRoaXMuX25l
c3RpbmdMZXZlbDsKLSAgICAgICAgICAgIHZhciBtZXNzYWdlRWxlbWVudCA9IG1lc3NhZ2UudG9N
ZXNzYWdlRWxlbWVudCgpOworICAgICAgICAgICAgdmFyIG1lc3NhZ2VFbGVtZW50ID0gbWVzc2Fn
ZVZpZXcuZWxlbWVudDsKICAgICAgICAgICAgIG1lc3NhZ2VFbGVtZW50LnN0eWxlLmxlZnQgPSB4
ICsgInB4IjsKICAgICAgICAgICAgIG1lc3NhZ2VFbGVtZW50LnN0eWxlLndpZHRoID0gImNhbGMo
MTAwJSAtICIgKyB4ICsgInB4KSI7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBVcGRhdGUgdGhl
IG5lc3RpbmcgbGV2ZWwuCi0gICAgICAgIHN3aXRjaCAobWVzc2FnZS50eXBlKSB7Ci0gICAgICAg
IGNhc2UgV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLlN0YXJ0
R3JvdXA6Ci0gICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlLk1l
c3NhZ2VUeXBlLlN0YXJ0R3JvdXBDb2xsYXBzZWQ6CisgICAgICAgIHN3aXRjaCAodHlwZSkgewor
ICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5TdGFy
dEdyb3VwOgorICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdl
VHlwZS5TdGFydEdyb3VwQ29sbGFwc2VkOgogICAgICAgICAgICAgKyt0aGlzLl9uZXN0aW5nTGV2
ZWw7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuTGVnYWN5
Q29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuRW5kR3JvdXA6CisgICAgICAgIGNhc2UgV2ViSW5z
cGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VUeXBlLkVuZEdyb3VwOgogICAgICAgICAgICAg
LS10aGlzLl9uZXN0aW5nTGV2ZWw7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAt
MjAyLDcgKzIwNSw3IEBAIFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUgPSB7
CiAKICAgICAgICAgLy8gV2Ugb25seSBhdXRvIHNob3cgdGhlIGNvbnNvbGUgaWYgdGhlIG1lc3Nh
Z2UgaXMgYSByZXN1bHQuCiAgICAgICAgIC8vIFRoaXMgaXMgd2hlbiB0aGUgdXNlciBldmFsdWF0
ZWQgc29tZXRoaW5nIGRpcmVjdGx5IGluIHRoZSBwcm9tcHQuCi0gICAgICAgIGlmIChtZXNzYWdl
LnR5cGUgIT09IFdlYkluc3BlY3Rvci5MZWdhY3lDb25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5S
ZXN1bHQpCisgICAgICAgIGlmICh0eXBlICE9PSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2Uu
TWVzc2FnZVR5cGUuUmVzdWx0KQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGlmICgh
V2ViSW5zcGVjdG9yLmlzU2hvd2luZ0NvbnNvbGVWaWV3KCkpCkBAIC0yNzgsMTAgKzI4MSwxMCBA
QCBXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlID0gewogCiAgICAgX2Zvcm1h
dE1lc3NhZ2VzQXNEYXRhOiBmdW5jdGlvbihvbmx5U2VsZWN0ZWQpCiAgICAgewotICAgICAgICB2
YXIgbWVzc2FnZXMgPSB0aGlzLl9hbGxNZXNzYWdlcygpOworICAgICAgICB2YXIgbWVzc2FnZXMg
PSB0aGlzLl9hbGxNZXNzYWdlRWxlbWVudHMoKTsKIAogICAgICAgICBpZiAob25seVNlbGVjdGVk
KSB7Ci0gICAgICAgICAgICBtZXNzYWdlcyA9IHRoaXMuX2FsbE1lc3NhZ2VzKCkuZmlsdGVyKGZ1
bmN0aW9uKG1lc3NhZ2UpIHsKKyAgICAgICAgICAgIG1lc3NhZ2VzID0gbWVzc2FnZXMuZmlsdGVy
KGZ1bmN0aW9uKG1lc3NhZ2UpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZS5jbGFz
c0xpc3QuY29udGFpbnMoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LlNlbGVjdGVkU3R5bGVD
bGFzc05hbWUpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KQEAgLTI4OSwxNiArMjkyLDE0
IEBAIFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUgPSB7CiAgICAgICAgIHZh
ciBkYXRhID0gIiI7CiAKICAgICAgICAgdmFyIGlzUHJlZml4T3B0aW9uYWwgPSBtZXNzYWdlcy5s
ZW5ndGggPD0gMSAmJiBvbmx5U2VsZWN0ZWQ7Ci0gICAgICAgIG1lc3NhZ2VzLmZvckVhY2goZnVu
Y3Rpb24gKG1lc3NhZ2VFbGVtZW50LCBpbmRleCkgewotICAgICAgICAgICAgdmFyIG1lc3NhZ2VP
YmplY3QgPSBtZXNzYWdlRWxlbWVudC5tZXNzYWdlOwotICAgICAgICAgICAgaWYgKCFtZXNzYWdl
T2JqZWN0KQotICAgICAgICAgICAgICAgIG1lc3NhZ2VPYmplY3QgPSBtZXNzYWdlRWxlbWVudC5j
b21tYW5kOwotICAgICAgICAgICAgaWYgKCFtZXNzYWdlT2JqZWN0KQorICAgICAgICBtZXNzYWdl
cy5mb3JFYWNoKGZ1bmN0aW9uKG1lc3NhZ2VFbGVtZW50LCBpbmRleCkgeworICAgICAgICAgICAg
dmFyIG1lc3NhZ2VWaWV3ID0gbWVzc2FnZUVsZW1lbnQuX19tZXNzYWdlVmlldyB8fCBtZXNzYWdl
RWxlbWVudC5fX2NvbW1hbmRWaWV3OworICAgICAgICAgICAgaWYgKCFtZXNzYWdlVmlldykKICAg
ICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgICAgIGlmIChpbmRleCA+IDApCiAgICAg
ICAgICAgICAgICAgZGF0YSArPSAiXG4iOwotICAgICAgICAgICAgZGF0YSArPSBtZXNzYWdlT2Jq
ZWN0LnRvQ2xpcGJvYXJkU3RyaW5nKGlzUHJlZml4T3B0aW9uYWwpOworICAgICAgICAgICAgZGF0
YSArPSBtZXNzYWdlVmlldy50b0NsaXBib2FyZFN0cmluZyhpc1ByZWZpeE9wdGlvbmFsKTsKICAg
ICAgICAgfSk7CiAKICAgICAgICAgcmV0dXJuIGRhdGE7CkBAIC0zMjksOSArMzMwLDkgQEAgV2Vi
SW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZSA9IHsKICAgICAgICAgaWYgKHRoaXMu
X3N0YXJ0ZWRQcm92aXNpb25hbExvYWQpCiAgICAgICAgICAgICB0aGlzLl9wcm92aXNpb25hbE1l
c3NhZ2VzLnB1c2goZXZlbnQuZGF0YS5tZXNzYWdlKTsKIAotICAgICAgICB2YXIgbWVzc2FnZSA9
IHRoaXMuX2xvZ1ZpZXdDb250cm9sbGVyLmFwcGVuZENvbnNvbGVNZXNzYWdlKGV2ZW50LmRhdGEu
bWVzc2FnZSk7Ci0gICAgICAgIGlmIChtZXNzYWdlLnR5cGUgIT09IFdlYkluc3BlY3Rvci5MZWdh
Y3lDb25zb2xlTWVzc2FnZS5NZXNzYWdlVHlwZS5FbmRHcm91cCkKLSAgICAgICAgICAgIHRoaXMu
X2ZpbHRlck1lc3NhZ2VzKFttZXNzYWdlLnRvTWVzc2FnZUVsZW1lbnQoKV0pOworICAgICAgICB2
YXIgbWVzc2FnZVZpZXcgPSB0aGlzLl9sb2dWaWV3Q29udHJvbGxlci5hcHBlbmRDb25zb2xlTWVz
c2FnZShldmVudC5kYXRhLm1lc3NhZ2UpOworICAgICAgICBpZiAobWVzc2FnZVZpZXcubWVzc2Fn
ZS50eXBlICE9PSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuRW5kR3Jv
dXApCisgICAgICAgICAgICB0aGlzLl9maWx0ZXJNZXNzYWdlRWxlbWVudHMoW21lc3NhZ2VWaWV3
LmVsZW1lbnRdKTsKICAgICB9LAogCiAgICAgX3ByZXZpb3VzTWVzc2FnZVJlcGVhdENvdW50VXBk
YXRlZDogZnVuY3Rpb24oZXZlbnQpCkBAIC00OTMsNyArNDk0LDcgQEAgV2ViSW5zcGVjdG9yLkxv
Z0NvbnRlbnRWaWV3LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHRoaXMuX2NsZWFyTWVzc2Fn
ZXNTZWxlY3Rpb24oKTsKIAogICAgICAgICBpZiAocmFuZ2VTZWxlY3Rpb24pIHsKLSAgICAgICAg
ICAgIHZhciBtZXNzYWdlcyA9IHRoaXMuX3Zpc2libGVNZXNzYWdlcygpOworICAgICAgICAgICAg
dmFyIG1lc3NhZ2VzID0gdGhpcy5fdmlzaWJsZU1lc3NhZ2VFbGVtZW50cygpOwogCiAgICAgICAg
ICAgICB2YXIgcmVmSW5kZXggPSB0aGlzLl9yZWZlcmVuY2VNZXNzYWdlRm9yUmFuZ2VTZWxlY3Rp
b24gPyBtZXNzYWdlcy5pbmRleE9mKHRoaXMuX3JlZmVyZW5jZU1lc3NhZ2VGb3JSYW5nZVNlbGVj
dGlvbikgOiAwOwogICAgICAgICAgICAgdmFyIHRhcmdldEluZGV4ID0gbWVzc2FnZXMuaW5kZXhP
ZihtZXNzYWdlKTsKQEAgLTU5OSw3ICs2MDAsNyBAQCBXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZp
ZXcucHJvdG90eXBlID0gewogICAgIHsKICAgICAgICAgdGhpcy5fY2xlYXJNZXNzYWdlc1NlbGVj
dGlvbigpOwogCi0gICAgICAgIHZhciBtZXNzYWdlcyA9IHRoaXMuX3Zpc2libGVNZXNzYWdlcygp
OworICAgICAgICB2YXIgbWVzc2FnZXMgPSB0aGlzLl92aXNpYmxlTWVzc2FnZUVsZW1lbnRzKCk7
CiAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVzc2FnZXMubGVuZ3RoOyArK2kpIHsKICAg
ICAgICAgICAgIHZhciBtZXNzYWdlID0gbWVzc2FnZXNbaV07CiAgICAgICAgICAgICBtZXNzYWdl
LmNsYXNzTGlzdC5hZGQoV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LlNlbGVjdGVkU3R5bGVD
bGFzc05hbWUpOwpAQCAtNjA3LDIxICs2MDgsMjEgQEAgV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRW
aWV3LnByb3RvdHlwZSA9IHsKICAgICAgICAgfQogICAgIH0sCiAKLSAgICBfYWxsTWVzc2FnZXM6
IGZ1bmN0aW9uKCkKKyAgICBfYWxsTWVzc2FnZUVsZW1lbnRzOiBmdW5jdGlvbigpCiAgICAgewog
ICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLm1lc3NhZ2VzRWxlbWVudC5xdWVyeVNlbGVj
dG9yQWxsKCIuY29uc29sZS1tZXNzYWdlLCAuY29uc29sZS11c2VyLWNvbW1hbmQiKSk7CiAgICAg
fSwKIAotICAgIF91bmZpbHRlcmVkTWVzc2FnZXM6IGZ1bmN0aW9uKCkKKyAgICBfdW5maWx0ZXJl
ZE1lc3NhZ2VFbGVtZW50czogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMu
X2FsbE1lc3NhZ2VzKCkuZmlsdGVyKGZ1bmN0aW9uKG1lc3NhZ2UpIHsKKyAgICAgICAgcmV0dXJu
IHRoaXMuX2FsbE1lc3NhZ2VFbGVtZW50cygpLmZpbHRlcihmdW5jdGlvbihtZXNzYWdlKSB7CiAg
ICAgICAgICAgICByZXR1cm4gIW1lc3NhZ2UuY2xhc3NMaXN0LmNvbnRhaW5zKFdlYkluc3BlY3Rv
ci5Mb2dDb250ZW50Vmlldy5GaWx0ZXJlZE91dFN0eWxlQ2xhc3NOYW1lKTsKICAgICAgICAgfSk7
CiAgICAgfSwKIAotICAgIF92aXNpYmxlTWVzc2FnZXM6IGZ1bmN0aW9uKCkKKyAgICBfdmlzaWJs
ZU1lc3NhZ2VFbGVtZW50czogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgdmFyIHVuZmlsdGVy
ZWRNZXNzYWdlcyA9IHRoaXMuX3VuZmlsdGVyZWRNZXNzYWdlcygpOworICAgICAgICB2YXIgdW5m
aWx0ZXJlZE1lc3NhZ2VzID0gdGhpcy5fdW5maWx0ZXJlZE1lc3NhZ2VFbGVtZW50cygpOwogCiAg
ICAgICAgIGlmICghdGhpcy5zZWFyY2hJblByb2dyZXNzKQogICAgICAgICAgICAgcmV0dXJuIHVu
ZmlsdGVyZWRNZXNzYWdlczsKQEAgLTY2MCwzOCArNjYxLDM5IEBAIFdlYkluc3BlY3Rvci5Mb2dD
b250ZW50Vmlldy5wcm90b3R5cGUgPSB7CiAKICAgICBfc2NvcGVCYXJTZWxlY3Rpb25EaWRDaGFu
Z2U6IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKLSAgICAgICAgdGhpcy5fZmlsdGVyTWVzc2FnZXMo
dGhpcy5fYWxsTWVzc2FnZXMoKSk7CisgICAgICAgIHRoaXMuX2ZpbHRlck1lc3NhZ2VFbGVtZW50
cyh0aGlzLl9hbGxNZXNzYWdlRWxlbWVudHMoKSk7CiAgICAgfSwKIAotICAgIF9maWx0ZXJNZXNz
YWdlczogZnVuY3Rpb24obWVzc2FnZXMpCisgICAgX2ZpbHRlck1lc3NhZ2VFbGVtZW50czogZnVu
Y3Rpb24obWVzc2FnZUVsZW1lbnRzKQogICAgIHsKICAgICAgICAgdmFyIHNob3dzQWxsID0gdGhp
cy5fc2NvcGVCYXIuaXRlbShXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcuU2NvcGVzLkFsbCku
c2VsZWN0ZWQ7CiAgICAgICAgIHZhciBzaG93c0Vycm9ycyA9IHRoaXMuX3Njb3BlQmFyLml0ZW0o
V2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LlNjb3Blcy5FcnJvcnMpLnNlbGVjdGVkOwogICAg
ICAgICB2YXIgc2hvd3NXYXJuaW5ncyA9IHRoaXMuX3Njb3BlQmFyLml0ZW0oV2ViSW5zcGVjdG9y
LkxvZ0NvbnRlbnRWaWV3LlNjb3Blcy5XYXJuaW5ncykuc2VsZWN0ZWQ7CiAgICAgICAgIHZhciBz
aG93c0xvZ3MgPSB0aGlzLl9zY29wZUJhci5pdGVtKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmll
dy5TY29wZXMuTG9ncykuc2VsZWN0ZWQ7CiAKLSAgICAgICAgbWVzc2FnZXMuZm9yRWFjaChmdW5j
dGlvbihtZXNzYWdlKSB7Ci0gICAgICAgICAgICB2YXIgdmlzaWJsZSA9IHNob3dzQWxsIHx8IG1l
c3NhZ2UuY29tbWFuZCBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5Db25zb2xlQ29tbWFuZCB8fCBt
ZXNzYWdlLm1lc3NhZ2UgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuQ29uc29sZUNvbW1hbmRSZXN1
bHQ7CisgICAgICAgIG1lc3NhZ2VFbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uKG1lc3NhZ2VFbGVt
ZW50KSB7CisgICAgICAgICAgICB2YXIgdmlzaWJsZSA9IHNob3dzQWxsIHx8IG1lc3NhZ2VFbGVt
ZW50Ll9fY29tbWFuZFZpZXcgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuQ29uc29sZUNvbW1hbmRW
aWV3IHx8IG1lc3NhZ2VFbGVtZW50Ll9fbWVzc2FnZSBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5D
b25zb2xlQ29tbWFuZFJlc3VsdE1lc3NhZ2U7CiAgICAgICAgICAgICBpZiAoIXZpc2libGUpIHsK
LSAgICAgICAgICAgICAgICBzd2l0Y2gobWVzc2FnZS5tZXNzYWdlLmxldmVsKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlLk1lc3Nh
Z2VMZXZlbC5XYXJuaW5nOgotICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZSA9IHNob3dz
V2FybmluZ3M7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVs
LkVycm9yOgotICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZSA9IHNob3dzRXJyb3JzOwot
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2Ug
V2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VMZXZlbC5Mb2c6Ci0gICAg
ICAgICAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkxlZ2FjeUNvbnNvbGVNZXNzYWdlLk1l
c3NhZ2VMZXZlbC5EZWJ1ZzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGUgPSBzaG93
c0xvZ3M7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBz
d2l0Y2gobWVzc2FnZUVsZW1lbnQuX19tZXNzYWdlLmxldmVsKSB7CisgICAgICAgICAgICAgICAg
Y2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLldhcm5pbmc6Cisg
ICAgICAgICAgICAgICAgICAgIHZpc2libGUgPSBzaG93c1dhcm5pbmdzOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xl
TWVzc2FnZS5NZXNzYWdlTGV2ZWwuRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHZpc2libGUg
PSBzaG93c0Vycm9yczsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZUxldmVsLlRpcDogLy8g
Q09NUEFUSUJJTElUWSAoaU9TIDYpOiBUcmVhdCBUaXBzIGxpa2UgTG9ncy4KKyAgICAgICAgICAg
ICAgICBjYXNlIFdlYkluc3BlY3Rvci5Db25zb2xlTWVzc2FnZS5NZXNzYWdlTGV2ZWwuTG9nOgor
ICAgICAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VM
ZXZlbC5EZWJ1ZzoKKyAgICAgICAgICAgICAgICAgICAgdmlzaWJsZSA9IHNob3dzTG9nczsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICB2YXIgY2xhc3NMaXN0ID0gbWVzc2FnZS5jbGFzc0xpc3Q7CisgICAg
ICAgICAgICB2YXIgY2xhc3NMaXN0ID0gbWVzc2FnZUVsZW1lbnQuY2xhc3NMaXN0OwogICAgICAg
ICAgICAgaWYgKHZpc2libGUpCiAgICAgICAgICAgICAgICAgY2xhc3NMaXN0LnJlbW92ZShXZWJJ
bnNwZWN0b3IuTG9nQ29udGVudFZpZXcuRmlsdGVyZWRPdXRTdHlsZUNsYXNzTmFtZSk7CiAgICAg
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZE1lc3NhZ2VzLnJl
bW92ZShtZXNzYWdlKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZE1lc3NhZ2VzLnJl
bW92ZShtZXNzYWdlRWxlbWVudCk7CiAgICAgICAgICAgICAgICAgY2xhc3NMaXN0LnJlbW92ZShX
ZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcuU2VsZWN0ZWRTdHlsZUNsYXNzTmFtZSk7CiAgICAg
ICAgICAgICAgICAgY2xhc3NMaXN0LmFkZChXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcuRmls
dGVyZWRPdXRTdHlsZUNsYXNzTmFtZSk7CiAgICAgICAgICAgICB9CkBAIC03NDQsNyArNzQ2LDcg
QEAgV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZSA9IHsKIAogICAgIF91cEFy
cm93V2FzUHJlc3NlZDogZnVuY3Rpb24oZXZlbnQpCiAgICAgewotICAgICAgICB2YXIgbWVzc2Fn
ZXMgPSB0aGlzLl92aXNpYmxlTWVzc2FnZXMoKTsKKyAgICAgICAgdmFyIG1lc3NhZ2VzID0gdGhp
cy5fdmlzaWJsZU1lc3NhZ2VFbGVtZW50cygpOwogCiAgICAgICAgIGlmICghdGhpcy5fc2VsZWN0
ZWRNZXNzYWdlcy5sZW5ndGgpIHsKICAgICAgICAgICAgIGlmIChtZXNzYWdlcy5sZW5ndGgpCkBA
IC03NjYsNyArNzY4LDcgQEAgV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZSA9
IHsKIAogICAgIF9kb3duQXJyb3dXYXNQcmVzc2VkOiBmdW5jdGlvbihldmVudCkKICAgICB7Ci0g
ICAgICAgIHZhciBtZXNzYWdlcyA9IHRoaXMuX3Zpc2libGVNZXNzYWdlcygpOworICAgICAgICB2
YXIgbWVzc2FnZXMgPSB0aGlzLl92aXNpYmxlTWVzc2FnZUVsZW1lbnRzKCk7CiAKICAgICAgICAg
aWYgKCF0aGlzLl9zZWxlY3RlZE1lc3NhZ2VzLmxlbmd0aCkgewogICAgICAgICAgICAgaWYgKG1l
c3NhZ2VzLmxlbmd0aCkKQEAgLTg2MSw3ICs4NjMsNyBAQCBXZWJJbnNwZWN0b3IuTG9nQ29udGVu
dFZpZXcucHJvdG90eXBlID0gewogCiAgICAgX3ByZXZpb3VzTWVzc2FnZTogZnVuY3Rpb24obWVz
c2FnZSkKICAgICB7Ci0gICAgICAgIHZhciBtZXNzYWdlcyA9IHRoaXMuX3Zpc2libGVNZXNzYWdl
cygpOworICAgICAgICB2YXIgbWVzc2FnZXMgPSB0aGlzLl92aXNpYmxlTWVzc2FnZUVsZW1lbnRz
KCk7CiAgICAgICAgIGZvciAodmFyIGkgPSBtZXNzYWdlcy5pbmRleE9mKG1lc3NhZ2UpIC0gMTsg
aSA+PSAwOyAtLWkpIHsKICAgICAgICAgICAgIGlmICh0aGlzLl9pc01lc3NhZ2VWaXNpYmxlKG1l
c3NhZ2VzW2ldKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbWVzc2FnZXNbaV07CkBAIC04NzAs
NyArODcyLDcgQEAgV2ViSW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZSA9IHsKIAog
ICAgIF9uZXh0TWVzc2FnZTogZnVuY3Rpb24obWVzc2FnZSkKICAgICB7Ci0gICAgICAgIHZhciBt
ZXNzYWdlcyA9IHRoaXMuX3Zpc2libGVNZXNzYWdlcygpOworICAgICAgICB2YXIgbWVzc2FnZXMg
PSB0aGlzLl92aXNpYmxlTWVzc2FnZUVsZW1lbnRzKCk7CiAgICAgICAgIGZvciAodmFyIGkgPSBt
ZXNzYWdlcy5pbmRleE9mKG1lc3NhZ2UpICsgMTsgaSA8IG1lc3NhZ2VzLmxlbmd0aDsgKytpKSB7
CiAgICAgICAgICAgICBpZiAodGhpcy5faXNNZXNzYWdlVmlzaWJsZShtZXNzYWdlc1tpXSkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2VzW2ldOwpAQCAtOTEwLDcgKzkxMiw3IEBAIFdl
Ykluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX3Nl
bGVjdGVkU2VhcmNoTWF0aElzVmFsaWQgPSBmYWxzZTsKIAogICAgICAgICB2YXIgc2VhcmNoUmVn
ZXggPSBuZXcgUmVnRXhwKHNlYXJjaFRlcm1zLmVzY2FwZUZvclJlZ0V4cCgpLCAiZ2kiKTsKLSAg
ICAgICAgdGhpcy5fdW5maWx0ZXJlZE1lc3NhZ2VzKCkuZm9yRWFjaChmdW5jdGlvbihtZXNzYWdl
KSB7CisgICAgICAgIHRoaXMuX3VuZmlsdGVyZWRNZXNzYWdlRWxlbWVudHMoKS5mb3JFYWNoKGZ1
bmN0aW9uKG1lc3NhZ2UpIHsKICAgICAgICAgICAgIHZhciBtYXRjaFJhbmdlcyA9IFtdOwogICAg
ICAgICAgICAgdmFyIHRleHQgPSBtZXNzYWdlLnRleHRDb250ZW50OwogICAgICAgICAgICAgdmFy
IG1hdGNoID0gc2VhcmNoUmVnZXguZXhlYyh0ZXh0KTsKQEAgLTkyMyw3ICs5MjUsNyBAQCBXZWJJ
bnNwZWN0b3IuTG9nQ29udGVudFZpZXcucHJvdG90eXBlID0gewogICAgICAgICAgICAgICAgIHRo
aXMuX2hpZ2hsaWdodFJhbmdlcyhtZXNzYWdlLCBtYXRjaFJhbmdlcyk7CiAKICAgICAgICAgICAg
IHZhciBjbGFzc0xpc3QgPSBtZXNzYWdlLmNsYXNzTGlzdDsKLSAgICAgICAgICAgIGlmICghaXNF
bXB0eU9iamVjdChtYXRjaFJhbmdlcykgfHwgbWVzc2FnZS5jb21tYW5kIGluc3RhbmNlb2YgV2Vi
SW5zcGVjdG9yLkNvbnNvbGVDb21tYW5kIHx8IG1lc3NhZ2UubWVzc2FnZSBpbnN0YW5jZW9mIFdl
Ykluc3BlY3Rvci5Db25zb2xlQ29tbWFuZFJlc3VsdCkKKyAgICAgICAgICAgIGlmICghaXNFbXB0
eU9iamVjdChtYXRjaFJhbmdlcykgfHwgbWVzc2FnZS5jb21tYW5kIGluc3RhbmNlb2YgV2ViSW5z
cGVjdG9yLkNvbnNvbGVDb21tYW5kIHx8IG1lc3NhZ2UubWVzc2FnZSBpbnN0YW5jZW9mIFdlYklu
c3BlY3Rvci5Db25zb2xlQ29tbWFuZFJlc3VsdE1lc3NhZ2UpCiAgICAgICAgICAgICAgICAgY2xh
c3NMaXN0LnJlbW92ZShXZWJJbnNwZWN0b3IuTG9nQ29udGVudFZpZXcuRmlsdGVyZWRPdXRCeVNl
YXJjaFN0eWxlQ2xhc3NOYW1lKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBj
bGFzc0xpc3QuYWRkKFdlYkluc3BlY3Rvci5Mb2dDb250ZW50Vmlldy5GaWx0ZXJlZE91dEJ5U2Vh
cmNoU3R5bGVDbGFzc05hbWUpOwpAQCAtOTQxLDEyICs5NDMsOCBAQCBXZWJJbnNwZWN0b3IuTG9n
Q29udGVudFZpZXcucHJvdG90eXBlID0gewogCiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGhpZ2hs
aWdodGVkRWxlbWVudHMubGVuZ3RoID09PSBtYXRjaFJhbmdlcy5sZW5ndGgpOwogCi0gICAgICAg
IG1hdGNoUmFuZ2VzLmZvckVhY2goZnVuY3Rpb24gKHJhbmdlLCBpbmRleCkgewotICAgICAgICAg
ICAgdGhpcy5fc2VhcmNoTWF0Y2hlcy5wdXNoKHsKLSAgICAgICAgICAgICAgICBtZXNzYWdlLAot
ICAgICAgICAgICAgICAgIHJhbmdlLAotICAgICAgICAgICAgICAgIGhpZ2hsaWdodDogaGlnaGxp
Z2h0ZWRFbGVtZW50c1tpbmRleF0KLSAgICAgICAgICAgIH0pOworICAgICAgICBtYXRjaFJhbmdl
cy5mb3JFYWNoKGZ1bmN0aW9uKHJhbmdlLCBpbmRleCkgeworICAgICAgICAgICAgdGhpcy5fc2Vh
cmNoTWF0Y2hlcy5wdXNoKHttZXNzYWdlLCByYW5nZSwgaGlnaGxpZ2h0OiBoaWdobGlnaHRlZEVs
ZW1lbnRzW2luZGV4XX0pOwogCiAgICAgICAgICAgICBpZiAodGhpcy5fc2VsZWN0ZWRTZWFyY2hN
YXRjaCAmJiAhdGhpcy5fc2VsZWN0ZWRTZWFyY2hNYXRoSXNWYWxpZCAmJiB0aGlzLl9zZWxlY3Rl
ZFNlYXJjaE1hdGNoLm1lc3NhZ2UgPT09IG1lc3NhZ2UpIHsKICAgICAgICAgICAgICAgICB0aGlz
Ll9zZWxlY3RlZFNlYXJjaE1hdGhJc1ZhbGlkID0gdGhpcy5fcmFuZ2VzT3ZlcmxhcCh0aGlzLl9z
ZWxlY3RlZFNlYXJjaE1hdGNoLnJhbmdlLCByYW5nZSk7CkBAIC05OTIsOSArOTkwLDkgQEAgV2Vi
SW5zcGVjdG9yLkxvZ0NvbnRlbnRWaWV3LnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5fc3Rh
cnRlZFByb3Zpc2lvbmFsTG9hZCA9IGZhbHNlOwogCiAgICAgICAgIGZvciAodmFyIHByb3Zpc2lv
bmFsTWVzc2FnZSBvZiB0aGlzLl9wcm92aXNpb25hbE1lc3NhZ2VzKSB7Ci0gICAgICAgICAgICB2
YXIgbWVzc2FnZSA9IHRoaXMuX2xvZ1ZpZXdDb250cm9sbGVyLmFwcGVuZENvbnNvbGVNZXNzYWdl
KHByb3Zpc2lvbmFsTWVzc2FnZSk7Ci0gICAgICAgICAgICBpZiAobWVzc2FnZS50eXBlICE9PSBX
ZWJJbnNwZWN0b3IuTGVnYWN5Q29uc29sZU1lc3NhZ2UuTWVzc2FnZVR5cGUuRW5kR3JvdXApCi0g
ICAgICAgICAgICAgICAgdGhpcy5fZmlsdGVyTWVzc2FnZXMoW21lc3NhZ2UudG9NZXNzYWdlRWxl
bWVudCgpXSk7CisgICAgICAgICAgICB2YXIgbWVzc2FnZVZpZXcgPSB0aGlzLl9sb2dWaWV3Q29u
dHJvbGxlci5hcHBlbmRDb25zb2xlTWVzc2FnZShwcm92aXNpb25hbE1lc3NhZ2UpOworICAgICAg
ICAgICAgaWYgKG1lc3NhZ2UudHlwZSAhPT0gV2ViSW5zcGVjdG9yLkNvbnNvbGVNZXNzYWdlLk1l
c3NhZ2VUeXBlLkVuZEdyb3VwKQorICAgICAgICAgICAgICAgIHRoaXMuX2ZpbHRlck1lc3NhZ2VF
bGVtZW50cyhbbWVzc2FnZVZpZXcuZWxlbWVudF0pOwogICAgICAgICB9CiAKICAgICAgICAgdGhp
cy5fcHJvdmlzaW9uYWxNZXNzYWdlcyA9IFtdOwo=
</data>
<flag name="review"
          id="275177"
          type_id="1"
          status="+"
          setter="timothy"
    />
          </attachment>
      

    </bug>

</bugzilla>