<?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>135763</bug_id>
          
          <creation_ts>2014-08-08 11:39:06 -0700</creation_ts>
          <short_desc>Web Inspector: Introduce an inspector Abstract Syntax Tree.</short_desc>
          <delta_ts>2014-08-18 13:55:20 -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>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>burg</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>graouts</cc>
    
    <cc>joepeck</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1027898</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-08-08 11:39:06 -0700</bug_when>
    <thetext>Create a wrapper around the esprima abstract syntax tree and provide helper methods for manipulating the tree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1027899</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2014-08-08 11:39:15 -0700</bug_when>
    <thetext>&lt;rdar://problem/17961862&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1027912</commentid>
    <comment_count>2</comment_count>
      <attachid>236296</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-08-08 12:29:59 -0700</bug_when>
    <thetext>Created attachment 236296
work in progress

This is the AST portion of type information patch. See following comment for a few comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1027915</commentid>
    <comment_count>3</comment_count>
      <attachid>236296</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-08-08 12:36:05 -0700</bug_when>
    <thetext>Comment on attachment 236296
work in progress

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

&gt; Source/WebInspectorUI/UserInterface/Controllers/FormatterSourceMap.js:45
&gt;      originalToFormatted: function(lineNumber, columnNumber)

Maybe this file should be a separate patch.

&gt; Source/WebInspectorUI/UserInterface/Models/Script.js:137
&gt; +        if (this.content) {

This code path still needs to be tested, but I&apos;m waiting for debugging to not be broken to have this code path be taken.

&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:759
&gt; +        result.range = node.range;

Right now, range is relative to the text we pass in, but this doesn&apos;t account for the offsets in inline script tags. Type profiling currently isn&apos;t enabled for inline script tags, it&apos;s only enabled in JS files. Maybe we want to keep it this way. But if we ever want to change it to work for inline script tags, we should consider that these ranges can be offset by WebInspector.Script&apos;s range (there are probably a few other changes that need to be made as well).

&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:766
&gt; +/* This is a nice starting off point if you want to write a recursive function:

Should I nix this comment?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1027999</commentid>
    <comment_count>4</comment_count>
      <attachid>236296</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-08-08 16:35:47 -0700</bug_when>
    <thetext>Comment on attachment 236296
work in progress

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

&gt; Source/WebInspectorUI/UserInterface/Models/Script.js:142
&gt; +                    self._makeSyntaxTree(self.content); 

This code seems a bit rough. All of the options seem to do the same thing, with a different argument to makeSyntaxTree(). Is there a reason for the 100ms delay?
Also, it seems that self.content could be a different value when the callback executes than when the if-condition is evaluated.

I would do something like:

var result = null;
if (this.content)
    result = Promise.resolve(this.content);
else if (/* long test */)
    result = Promise.resolve(this._resource.content);
else
    result = this.requestContent(); // could be combined with first branch; depends on https://bugs.webkit.org/show_bug.cgi?id=135777

result = result.then(function(sourceText) { self._makeSyntaxTree(sourceText); });
return result;


This will always execute _makeSyntaxTree asynchronously even if we already have it.

&gt; Source/WebInspectorUI/UserInterface/Models/Script.js:222
&gt; +        if (this._scriptSyntaxTreeDidLoadCallback) {

This callback thingy is overly coupled with callers. If you do want callback-passing style, it should be an argument to _makeSyntaxTree. I would prefer the promise-based approach above, though.

&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:28
&gt; +    console.assert(script &amp;&amp; script instanceof WebInspector.Script, script)

semicolon;

&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:33
&gt; +        var esprimaAST = WebInspector._esprima.parse(sourceText, { range : true });

nit: spacing like so:

{range: true}

Also, I think you could replace uses of AST and ast here with syntaxTree.

&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:35
&gt; +    } catch(e) {

Should this exception be handled here? Is there anything we can do with this class if the code is unparseable? I wonder if we could handle this one level higher.

&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:36
&gt; +        console.error(&quot;Couldn&apos;t parse JavaScript File: &quot; + script.url + &quot;\n&quot; + e.message);

Passing e.message as its own argument will allow it to show in the console as a TreeOutline, rather than stringifying it.

console.error(&quot;...&quot;, e.message);

&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:43
&gt; +// Note that this corresponds identically to an enum in JavaSciptCore/runtime/HighFidelityTypeProfiler.h

&quot;This should be kept in sync with the enum in ...&quot;

&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:45
&gt; +    TypeProfilerSearchDescriptorNormal: 1,

No need to prefix enum elements with the enum name. It would read like: WebInspector.ScriptSyntaxTree.TypeProfilerSearchDescriptor.TypeProfilerSearchDescriptorNormal, which is redundant.

&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:99
&gt; +    forEachNode: function(func)

func=callback

&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:104
&gt; +    filter: function(func, startNode) 

func=predicate?

&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:106
&gt; +        startNode = startNode || this._ast;

check arguments. (null? callable? a node? hopefully the node is in the tree..)

&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:125
&gt; +        function forEach(node, state)

forEach=filterWithinRange? anything is a better name than forEach.

&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:157
&gt; +        function filter(node)

filter=hasNonFunctionType?

&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:182
&gt; +        function forEach(node) {

Pick a more descriptive name.

&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:183
&gt; +            var Types = WebInspector.ScriptSyntaxTree.NodeType;

I know it reads better if shortened, but it makes it harder to find/replace.

&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:262
&gt; +        case Types.AssignmentExpression:

Same comment as above.

&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:465
&gt; +    // This function translates from esprima&apos;s AST to ours. Mostly, this is just the identity function, but there are a few nodes and a few properties that are renamed.

Would prefer keeping lines to 100 columns or less.

&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:467
&gt; +    // ConditionalExpression is renamed to TernaryExpression.

Do these AST nodes have any relationship to JSC&apos;s AST nodes? I&apos;m not quite sure why these specific things were renamed.

&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:474
&gt; +        switch(node.type) {

nit: switch (

&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:475
&gt; +        case &apos;AssignmentExpression&apos;:

In inspector code, we try to use the full name for string constants. This makes it much easier to do find/replace.

&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:760
&gt; +        result._attachments = {}; // This is an object for which you can add fields to an AST node without worrying about polluting the syntax-related fields of the node.

Put this comment on its own line.

&gt;&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:766
&gt;&gt; +/* This is a nice starting off point if you want to write a recursive function:
&gt; 
&gt; Should I nix this comment?

I think so, yes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028034</commentid>
    <comment_count>5</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-08-08 19:19:12 -0700</bug_when>
    <thetext>Thanks again for the comments.

(In reply to comment #4)
&gt; (From update of attachment 236296 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=236296&amp;action=review
&gt; 
&gt; &gt; Source/WebInspectorUI/UserInterface/Models/Script.js:142
&gt; &gt; +                    self._makeSyntaxTree(self.content); 
&gt; 
&gt; This code seems a bit rough. All of the options seem to do the same thing, with a different argument to makeSyntaxTree(). Is there a reason for the 100ms delay?

No, I was testing to see if it improved responsiveness when parsing a huge file, and it doesn&apos;t.

&gt; Also, it seems that self.content could be a different value when the callback executes than when the if-condition is evaluated.
&gt; 
&gt; I would do something like:
&gt; 
&gt; var result = null;
&gt; if (this.content)
&gt;     result = Promise.resolve(this.content);
&gt; else if (/* long test */)
&gt;     result = Promise.resolve(this._resource.content);
&gt; else
&gt;     result = this.requestContent(); // could be combined with first branch; depends on https://bugs.webkit.org/show_bug.cgi?id=135777
&gt; 
&gt; result = result.then(function(sourceText) { self._makeSyntaxTree(sourceText); });
&gt; return result;
&gt; 

Yeah. This is much nicer. I think my nasty code originates from me being a promise n00b. I think this also gets rid of the necessity to have the ugly private callback (Given requestContent is changed to a promise based API).

&gt; &gt; Source/WebInspectorUI/UserInterface/Models/Script.js:222
&gt; &gt; +        if (this._scriptSyntaxTreeDidLoadCallback) {
&gt; 
&gt; This callback thingy is overly coupled with callers. If you do want callback-passing style, it should be an argument to _makeSyntaxTree. I would prefer the promise-based approach above, though.


&gt; &gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:33
&gt; &gt; +        var esprimaAST = WebInspector._esprima.parse(sourceText, { range : true });
&gt; 
&gt; nit: spacing like so:
&gt; 
&gt; {range: true}
&gt; 
&gt; Also, I think you could replace uses of AST and ast here with syntaxTree.
&gt; 
&gt; &gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:35
&gt; &gt; +    } catch(e) {
&gt; 
&gt; Should this exception be handled here? Is there anything we can do with this class if the code is unparseable? I wonder if we could handle this one level higher.

Maybe this is the correct solution, that way Script will just set it&apos;s AST to null, which is expected behavior that it might be null.

&gt; 
&gt; &gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:36
&gt; &gt; +        console.error(&quot;Couldn&apos;t parse JavaScript File: &quot; + script.url + &quot;\n&quot; + e.message);
&gt; 
&gt; Passing e.message as its own argument will allow it to show in the console as a TreeOutline, rather than stringifying it.
&gt; 
&gt; console.error(&quot;...&quot;, e.message);

Yeah this is nicer. I think I will just pass the whole error though, which seems like the better approach.

&gt; &gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:99
&gt; &gt; +    forEachNode: function(func)
&gt; 
&gt; func=callback

To me, callback doesn&apos;t seem right. Because I think of a callback as only being called once. While this function is called for every node. I&apos;m not sure what the best name for it would be though.

&gt; 
&gt; &gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:104
&gt; &gt; +    filter: function(func, startNode) 
&gt; 
&gt; func=predicate?

I agree.

&gt; 
&gt; &gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:106
&gt; &gt; +        startNode = startNode || this._ast;
&gt; 
&gt; check arguments. (null? callable? a node? hopefully the node is in the tree..)

This is actually never null, I think I had the null check in there from something I used to do but no longer do. I don&apos;t think there is any good way to assert that the node is in the tree without killing performance unless we attach a pointer to each node that points to the AST. What do you think we should do?

&gt; 
&gt; &gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:125
&gt; &gt; +        function forEach(node, state)
&gt; 
&gt; forEach=filterWithinRange? anything is a better name than forEach.
&gt; 
&gt; &gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:157
&gt; &gt; +        function filter(node)
&gt; 
&gt; filter=hasNonFunctionType?
&gt; 
&gt; &gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:182
&gt; &gt; +        function forEach(node) {
&gt; 
&gt; Pick a more descriptive name.
&gt; 
&gt; &gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:183
&gt; &gt; +            var Types = WebInspector.ScriptSyntaxTree.NodeType;
&gt; 
&gt; I know it reads better if shortened, but it makes it harder to find/replace.
&gt; 
&gt; &gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:262
&gt; &gt; +        case Types.AssignmentExpression:
&gt; 
&gt; Same comment as above.
&gt; 
&gt; &gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:465
&gt; &gt; +    // This function translates from esprima&apos;s AST to ours. Mostly, this is just the identity function, but there are a few nodes and a few properties that are renamed.
&gt; 
&gt; Would prefer keeping lines to 100 columns or less.
&gt; 
&gt; &gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:467
&gt; &gt; +    // ConditionalExpression is renamed to TernaryExpression.
&gt; 
&gt; Do these AST nodes have any relationship to JSC&apos;s AST nodes? I&apos;m not quite sure why these specific things were renamed.

- Purely for aesthetic taste. I think prefix/postfix should be separate nodes.
- I would also say FunctionCall =&gt; FunctionCallExpression, but I suppose we can just keep it CallExpression.
- Also, I&apos;m okay with moving from TernaryExpression =&gt; ConditionalExpression. It seems like many ASTs name ternary expressions this way. I just happen to disagree with that name. 

What are your thoughts on the naming?

As to what JSC does, I don&apos;t remember off the top of my head. JSC has a crazy AST that has different nodes for all kinds of stuff. I know it does separate prefix/postfix nodes, but I think it goes further and has nodes for:
bar++
foo.bar++
foo[&quot;bar&quot;]++</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028035</commentid>
    <comment_count>6</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-08-08 19:22:28 -0700</bug_when>
    <thetext>(In reply to comment #5)

&gt; &gt; 
&gt; &gt; &gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:125
&gt; &gt; &gt; +        function forEach(node, state)
&gt; &gt; 
&gt; &gt; forEach=filterWithinRange? anything is a better name than forEach.
&gt; &gt; 
&gt; &gt; &gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:157
&gt; &gt; &gt; +        function filter(node)
&gt; &gt; 
&gt; &gt; filter=hasNonFunctionType?
&gt; &gt; 
&gt; &gt; &gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:182
&gt; &gt; &gt; +        function forEach(node) {
&gt; &gt; 
&gt; &gt; Pick a more descriptive name.
&gt; &gt; 
&gt; &gt; &gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:183
&gt; &gt; &gt; +            var Types = WebInspector.ScriptSyntaxTree.NodeType;
&gt; &gt; 
&gt; &gt; I know it reads better if shortened, but it makes it harder to find/replace.
&gt; &gt; 
&gt; &gt; &gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:262
&gt; &gt; &gt; +        case Types.AssignmentExpression:
&gt; &gt; 
&gt; &gt; Same comment as above.
&gt; &gt; 
&gt; &gt; &gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:465
&gt; &gt; &gt; +    // This function translates from esprima&apos;s AST to ours. Mostly, this is just the identity function, but there are a few nodes and a few properties that are renamed.
&gt; &gt; 
&gt; &gt; Would prefer keeping lines to 100 columns or less.

(Sorry, this should all have been nixed from the above reply).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028036</commentid>
    <comment_count>7</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-08-08 19:25:02 -0700</bug_when>
    <thetext>Also, I replied in textual form to your comments, so when viewing them in context, their locations all got skewed, so just look at it in textual form.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028037</commentid>
    <comment_count>8</comment_count>
      <attachid>236296</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-08-08 19:26:56 -0700</bug_when>
    <thetext>Comment on attachment 236296
work in progress

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

&gt;&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:475
&gt;&gt; +        case &apos;AssignmentExpression&apos;:
&gt; 
&gt; In inspector code, we try to use the full name for string constants. This makes it much easier to do find/replace.

These constants are ever only used within this function because they are the names of the nodes inside esprima&apos;s AST.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028301</commentid>
    <comment_count>9</comment_count>
      <attachid>236397</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-08-11 13:51:49 -0700</bug_when>
    <thetext>Created attachment 236397
patch

Changes accounted for. Let me know what you think</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028329</commentid>
    <comment_count>10</comment_count>
      <attachid>236397</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2014-08-11 14:47:36 -0700</bug_when>
    <thetext>Comment on attachment 236397
patch

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

&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:32
&gt; +    var esprimaSyntaxTree = WebInspector._esprima.parse(sourceText, {range: true});

Can we control this entry point? I think WebInspector.Esprima or just Esprima would be best. The underscore denotes private and looks like a layering violation.

&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:43
&gt; +    AssignmentExpression: &apos;AssignmentExpression&apos;,

Use double quotes. (Apples through the file.)

We like to make the string something like: &quot;script-syntax-tree-node-type-assignment-expression&quot; so it is not ambiguous and debuggable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028692</commentid>
    <comment_count>11</comment_count>
      <attachid>236491</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-08-12 18:41:20 -0700</bug_when>
    <thetext>Created attachment 236491
patch

This patch adds an Abstract Syntax Tree to the Web inspector. 
This syntax tree is modeled off the Esprima.js syntax tree
which complies with the Mozilla Parser API:
https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey/Parser_API
Script is the owner of the Web Inspector syntax tree, and has an API
for accessing its syntax tree property.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028961</commentid>
    <comment_count>12</comment_count>
      <attachid>236491</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-08-13 16:59:25 -0700</bug_when>
    <thetext>Comment on attachment 236491
patch

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

This looks good. Some cleanup suggestions. I&apos;d like to see one more patch then this should be good to land.

&gt; Source/WebInspectorUI/ChangeLog:21
&gt; +        (WebInspector.Script.prototype.requestScriptSyntaxTree.else.makeSyntaxTreeAfterTimeout):

Heh this line can be removed.

&gt; Source/WebInspectorUI/UserInterface/Models/Script.js:134
&gt; +        var self = this;

Style: We avoid self = this idioms and instead bind functions with &quot;this&quot;. So you should remove this and bind where necessary.

&gt; Source/WebInspectorUI/UserInterface/Models/Script.js:137
&gt; +            setTimeout(function() { callback(self._scriptSyntaxTree); }, 0);

So this would be:

    setTimeout(function() { callback(this._scriptSyntaxTree; }.bind(this), 0);

&gt; Source/WebInspectorUI/UserInterface/Models/Script.js:162
&gt; +        if (this.content)
&gt; +            makeSyntaxTreeAfterTimeout = function() { makeSyntaxTreeAndCallCallback(self.content); };
&gt; +        else if (this._resource &amp;&amp; this._resource.type === WebInspector.Resource.Type.Script &amp;&amp; this._resource.finished &amp;&amp; this._resource.content)
&gt; +            makeSyntaxTreeAfterTimeout = function() { makeSyntaxTreeAndCallCallback(self._resource.content); };
&gt; +        else {
&gt; +            makeSyntaxTreeAfterTimeout = function() 
&gt; +            {
&gt; +                self.requestContent(function(error, sourceText) {
&gt; +                    makeSyntaxTreeAndCallCallback(sourceText);
&gt; +                });
&gt; +            };
&gt; +        }
&gt; +
&gt; +        setTimeout(makeSyntaxTreeAfterTimeout, 0);

This is a lot of indirection. For example requestContent already ensures a setTimeout of its own. How about:

    var content = this.content;
    if (!content &amp;&amp; this._resource &amp;&amp; this._resource.type === WebInspector.Resource.Type.Script &amp;&amp; this._resource.finished)
        content = this._resource.content
    if (content) {
        setTimeout(makeSyntaxTreeAndCallCallback.bind(this), 0, content);
        return;
    }

    this.requestContent(function(error, sourceText) {
        makeSyntaxTreeAndCallCallback.call(this, sourceText);
    }.bind(this));

&gt; Source/WebInspectorUI/UserInterface/Models/Script.js:216
&gt; +    _makeSyntaxTree: function(sourceText) {
&gt; +        if (!sourceText)
&gt; +            return;

I think you can also early return if this._scriptSyntaxTree is non-null.

This can happen if requestScriptSyntaxTree is called multiple times early on. As it will queue a task to run &quot;_makeSyntaxTree&quot; multiple times. And we want to avoid duplicating that work as it is an expensive operation.

&gt; Source/WebInspectorUI/UserInterface/Models/Script.js:222
&gt; +            this._scriptSyntaxTree = null;

Nit: This line can be removed, the syntax tree will already be null.

&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:30
&gt; +    console.assert(script &amp;&amp; script instanceof WebInspector.Script, script);
&gt; +    WebInspector.Object.call(this);
&gt; +    this._script = script;

Style: Lets put newlines between these lines for readability. See other constructors like WebInspector.Probe or WebInspector.ProbeSet constructors.

&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:45
&gt; +WebInspector.ScriptSyntaxTree.NodeType = {
&gt; +    AssignmentExpression: &quot;script-syntax-tree-node-type-assignment-expression&quot;,
&gt; +    ArrayExpression: &quot;script-syntax-tree-node-type-array-expression&quot;,
&gt; +    BlockStatement: &quot;script-syntax-tree-node-type-block-statement&quot;,

Call me crash, but I think removing the &quot;script-syntax-tree-node-type-&quot; prefix would actually be beneficial here. So these 3 would just be:

    AssignmentExpression: &quot;assignment-expression&quot;,
    ArrayExpression: &quot;array-expression&quot;,
    BlockStatement: &quot;block-statement&quot;,

Etc.

&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:94
&gt; +    forEachNode: function(func)
&gt; +    {
&gt; +        this._recurse(this._syntaxTree, func, this._defaultParserState());
&gt; +    },

I like Brian&apos;s suggestion of naming the parameter &quot;callback&quot;.

You were hesitant about using &quot;callback&quot; because it can be called more than once. But I think that ship has sailed. Even Array.prototype.forEach terminology calls its function parameter a callback:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach

    arr.forEach(callback[, thisArg])

&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:96
&gt; +    filter: function(predicateFunction, startNode) 

I like the name &quot;predicate&quot; over &quot;predicateFunction&quot;. We know a predicate is a function.

&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:117
&gt; +        var start = 0;
&gt; +        var end = 1;

Lets make these &quot;const&quot;. They are just helper words for indexes into the range pair, they are not variables expected to change.

&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:120
&gt; +            // prog_start    range     program end

Might as well spell this out to &quot;program start&quot;. Add a few more spaces to each of the lines to make it look this good. I found this comment helpful.

&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:125
&gt; +            // If a node&apos;s range ends before the range we&apos;re interested in starts, we don&apos;t need to search any of its
&gt; +            // enclosing ranges, because, by definition, those enclosing ranges are contained within this node&apos;s outer range.

Nit: &quot;within this node&apos;s outer range&quot; =&gt; &quot;within this node&apos;s range&quot;. The new term outer range is confusing and made me think of something else.

&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:129
&gt; +            // We are only insterested in nodes whose start pos is within our range.

Typo: &quot;insterested&quot; =&gt; &quot;interested&quot;

&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:157
&gt; +        var hasReturnStatement = false;

Might as well make this &quot;hasNonEmptyReturnStatement&quot; for clarity.

&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:183
&gt; +                node.params.forEach(function (param) {

Style: No space between function and param list.

&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:211
&gt; +

Nit: console.assert(allRequests.length === allRequestNodes.length);

&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:224
&gt; +            var i;
&gt; +            var node;
&gt; +            var typeInformation;
&gt; +            for (i = 0; i &lt; typeInformationArray.length; i++) {
&gt; +                node = allRequestNodes[i];
&gt; +                typeInformation = typeInformationArray[i];

Style: Put the &apos;var&apos;s with their variables. No need for hoisting the var up yourself.

&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:276
&gt; +        case WebInspector.ScriptSyntaxTree.NodeType.BreakStatement:
&gt; +            func(node, state);
&gt; +            break;

Nit: In perhaps my lamest nit ever, break statements may have labels. I suspect this should be the same as ContinueStatement.

Example program:

    outer:
    while (true) {
      console.log(&quot;outer&quot;);
      while (true) {
      console.log(&quot;inner&quot;);
        break outer;
      }
    }

Esprima tree:

    {
        &quot;type&quot;: &quot;BreakStatement&quot;,
        &quot;label&quot;: {
            &quot;type&quot;: &quot;Identifier&quot;,
            &quot;name&quot;: &quot;outer&quot;
        }
    }

Note: you do handle this in other cases.

&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:453
&gt; +    _recurseArray: function(array, func, state) 
&gt; +    {
&gt; +        function forEach(node) {
&gt; +            this._recurse(node, func, state);
&gt; +        }
&gt; +
&gt; +        array.forEach(forEach.bind(this));
&gt; +    },

Nit: Unnecessary bind! Heh. How about:

    function each(node) {
        this._recurse(node, func, state);
    }

    array.forEach(each, this);

The duplicate &quot;forEach&quot; names are confusing.

&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:761
&gt; +};
&gt; +/*
&gt; + * Copyright (C) 2014 Apple Inc. All rights reserved.
&gt; + *

Oops, looks like this file got duplicated. I don&apos;t know which you want to keep. There are subtle differences. The bottom half has TernaryExpression and the top doesn&apos;t.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029190</commentid>
    <comment_count>13</comment_count>
      <attachid>236614</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-08-14 13:23:47 -0700</bug_when>
    <thetext>Created attachment 236614
patch

Updated with Joe&apos;s suggestions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029377</commentid>
    <comment_count>14</comment_count>
      <attachid>236614</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2014-08-15 10:39:43 -0700</bug_when>
    <thetext>Comment on attachment 236614
patch

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

I&apos;ll let Joe look again before cq+, but I think r+.

&gt; Source/WebInspectorUI/UserInterface/Models/Script.js:215
&gt; +        try {
&gt; +            this._scriptSyntaxTree = new WebInspector.ScriptSyntaxTree(sourceText, this);
&gt; +        } catch(error) {
&gt; +            console.error(&quot;Couldn&apos;t parse JavaScript File: &quot; + this._url, error);
&gt; +        }

I assume this catches exceptions from Esprima? We should catch those exceptions inside the WebInspector.ScriptSyntaxTree class and log the error there. Clients of WebInspector.ScriptSyntaxTree should not need to care about Esprima exceptions, that is a layering violation.

&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:109
&gt; +        }
&gt; +        this._recurse(startNode, filter, this._defaultParserState());

I like newlines between lines like this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029381</commentid>
    <comment_count>15</comment_count>
      <attachid>236614</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2014-08-15 10:54:20 -0700</bug_when>
    <thetext>Comment on attachment 236614
patch

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

&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:184
&gt; +                node.params.forEach(function(param) {

for (..of..)?

&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:211
&gt; +        nodesToUpdate.forEach(gatherTypeInformationRequestForNode);

Ditto.

&gt; Source/WebInspectorUI/UserInterface/Models/ScriptSyntaxTree.js:453
&gt; +        function each(node) {
&gt; +            this._recurse(node, callback, state);
&gt; +        }
&gt; +
&gt; +        array.forEach(each.bind(this), this);

for (..of..)!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029449</commentid>
    <comment_count>16</comment_count>
      <attachid>236674</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-08-15 13:26:28 -0700</bug_when>
    <thetext>Created attachment 236674
patch

for(...of...) to rule them all.

Also added a property on the SyntaxTree indicating if it was successfully parsed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029492</commentid>
    <comment_count>17</comment_count>
      <attachid>236674</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-08-15 15:54:20 -0700</bug_when>
    <thetext>Comment on attachment 236674
patch

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

Looks good to me. A few style ignorable style nits.

&gt; Source/WebInspectorUI/UserInterface/Models/Script.js:135
&gt; +        if (this._scriptSyntaxTree) {
&gt; +            setTimeout(function() { callback(this._scriptSyntaxTree); }.bind(this), 0);

Now that I read this, I think this might be more efficient, avoiding the bind.

    setTimeout(function(tree) { callback(tree); }, 0, this._scriptSyntaxTree);

&gt; Source/WebInspectorUI/UserInterface/Models/Script.js:140
&gt; +        var makeSyntaxTreeAndCallCallback = function(content)
&gt; +        {

Style: I would prefer this style for the closure:

    function makeSyntaxTreeAndCallCallback(content) {
        ...
    }.bind(this)

&gt; Source/WebInspectorUI/UserInterface/Models/Script.js:207
&gt; +    _makeSyntaxTree: function(sourceText) {

Style: brace on new line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029510</commentid>
    <comment_count>18</comment_count>
      <attachid>236688</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-08-15 16:24:15 -0700</bug_when>
    <thetext>Created attachment 236688
patch

style fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029837</commentid>
    <comment_count>19</comment_count>
      <attachid>236688</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-08-18 13:19:53 -0700</bug_when>
    <thetext>Comment on attachment 236688
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029858</commentid>
    <comment_count>20</comment_count>
      <attachid>236688</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-08-18 13:55:14 -0700</bug_when>
    <thetext>Comment on attachment 236688
patch

Clearing flags on attachment: 236688

Committed r172722: &lt;http://trac.webkit.org/changeset/172722&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029859</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-08-18 13:55:20 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236296</attachid>
            <date>2014-08-08 12:29:59 -0700</date>
            <delta_ts>2014-08-11 13:51:49 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>37326</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9NYWluLmh0bWwJ
KHJldmlzaW9uIDE3MjM0OCkKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L01haW4uaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMjYwLDYgKzI2MSw3IEBACiAgICAgPHNjcmlw
dCBzcmM9Ik1vZGVscy9TY3JpcHRUaW1lbGluZVJlY29yZC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNj
cmlwdCBzcmM9Ik1vZGVscy9TZXR0aW5nLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0i
TW9kZWxzL1NvdXJjZUNvZGVQb3NpdGlvbi5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9
Ik1vZGVscy9TY3JpcHRTeW50YXhUcmVlLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0i
TW9kZWxzL1NvdXJjZUNvZGVSZXZpc2lvbi5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9
Ik1vZGVscy9Tb3VyY2VDb2RlVGV4dFJhbmdlLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNy
Yz0iTW9kZWxzL1NvdXJjZUNvZGVUaW1lbGluZS5qcyI+PC9zY3JpcHQ+CkluZGV4OiBTb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Gb3JtYXR0ZXJTb3VyY2VN
YXAuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
Q29udHJvbGxlcnMvRm9ybWF0dGVyU291cmNlTWFwLmpzCShyZXZpc2lvbiAxNzIzNDgpCisrKyBT
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Gb3JtYXR0ZXJT
b3VyY2VNYXAuanMJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDE1ICs0NSwyNyBAQCBXZWJJbnNwZWN0
b3IuRm9ybWF0dGVyU291cmNlTWFwLnByb3RvdHlwCiAgICAgb3JpZ2luYWxUb0Zvcm1hdHRlZDog
ZnVuY3Rpb24obGluZU51bWJlciwgY29sdW1uTnVtYmVyKQogICAgIHsKICAgICAgICAgdmFyIG9y
aWdpbmFsUG9zaXRpb24gPSB0aGlzLl9sb2NhdGlvblRvUG9zaXRpb24odGhpcy5fb3JpZ2luYWxM
aW5lRW5kaW5ncywgbGluZU51bWJlciB8fCAwLCBjb2x1bW5OdW1iZXIgfHwgMCk7CisgICAgICAg
IHJldHVybiB0aGlzLm9yaWdpbmFsUG9zaXRpb25Ub0Zvcm1hdHRlZChvcmlnaW5hbFBvc2l0aW9u
KTsKKyAgICB9LAorCisgICAgb3JpZ2luYWxQb3NpdGlvblRvRm9ybWF0dGVkOiBmdW5jdGlvbihv
cmlnaW5hbFBvc2l0aW9uKQorICAgIHsKICAgICAgICAgdmFyIGZvcm1hdHRlZFBvc2l0aW9uID0g
dGhpcy5fY29udmVydFBvc2l0aW9uKHRoaXMuX21hcHBpbmcub3JpZ2luYWwsIHRoaXMuX21hcHBp
bmcuZm9ybWF0dGVkLCBvcmlnaW5hbFBvc2l0aW9uKTsKICAgICAgICAgcmV0dXJuIHRoaXMuX3Bv
c2l0aW9uVG9Mb2NhdGlvbih0aGlzLl9mb3JtYXR0ZWRMaW5lRW5kaW5ncywgZm9ybWF0dGVkUG9z
aXRpb24pOwogICAgIH0sCiAKKwogICAgIGZvcm1hdHRlZFRvT3JpZ2luYWw6IGZ1bmN0aW9uKGxp
bmVOdW1iZXIsIGNvbHVtbk51bWJlcikKICAgICB7CisgICAgICAgIHZhciBvcmlnaW5hbFBvc2l0
aW9uID0gdGhpcy5mb3JtYXR0ZWRUb09yaWdpbmFsT2Zmc2V0KGxpbmVOdW1iZXIsIGNvbHVtbk51
bWJlcik7CisgICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlvblRvTG9jYXRpb24odGhpcy5fb3Jp
Z2luYWxMaW5lRW5kaW5ncywgb3JpZ2luYWxQb3NpdGlvbik7CisgICAgfSwKKworICAgIGZvcm1h
dHRlZFRvT3JpZ2luYWxPZmZzZXQ6IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikK
KyAgICB7CiAgICAgICAgIHZhciBmb3JtYXR0ZWRQb3NpdGlvbiA9IHRoaXMuX2xvY2F0aW9uVG9Q
b3NpdGlvbih0aGlzLl9mb3JtYXR0ZWRMaW5lRW5kaW5ncywgbGluZU51bWJlciB8fCAwLCBjb2x1
bW5OdW1iZXIgfHwgMCk7CiAgICAgICAgIHZhciBvcmlnaW5hbFBvc2l0aW9uID0gdGhpcy5fY29u
dmVydFBvc2l0aW9uKHRoaXMuX21hcHBpbmcuZm9ybWF0dGVkLCB0aGlzLl9tYXBwaW5nLm9yaWdp
bmFsLCBmb3JtYXR0ZWRQb3NpdGlvbik7Ci0gICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlvblRv
TG9jYXRpb24odGhpcy5fb3JpZ2luYWxMaW5lRW5kaW5ncywgb3JpZ2luYWxQb3NpdGlvbik7Cisg
ICAgICAgIHJldHVybiBvcmlnaW5hbFBvc2l0aW9uOwogICAgIH0sCiAKICAgICAvLyBQcml2YXRl
CkluZGV4OiBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvU2NyaXB0
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01v
ZGVscy9TY3JpcHQuanMJKHJldmlzaW9uIDE3MjM0OCkKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL01vZGVscy9TY3JpcHQuanMJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYg
KzQxLDkgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdCA9IGZ1bmN0aW9uKGlkLCByYW5nZQogCiAgICAg
aWYgKHNvdXJjZU1hcFVSTCkKICAgICAgICAgV2ViSW5zcGVjdG9yLnNvdXJjZU1hcE1hbmFnZXIu
ZG93bmxvYWRTb3VyY2VNYXAoc291cmNlTWFwVVJMLCB0aGlzLl91cmwsIHRoaXMpOworCisgICAg
dGhpcy5fc2NyaXB0U3ludGF4VHJlZSA9IG51bGw7CisgICAgdGhpcy5fc2NyaXB0U3ludGF4VHJl
ZURpZExvYWRDYWxsYmFjayA9IG51bGw7CiB9OwogCiBXZWJJbnNwZWN0b3IuU2NyaXB0LlR5cGVJ
ZGVudGlmaWVyID0gInNjcmlwdCI7CkBAIC0xMjcsNiArMTMwLDQxIEBAIFdlYkluc3BlY3Rvci5T
Y3JpcHQucHJvdG90eXBlID0gewogICAgICAgICBjb29raWVbV2ViSW5zcGVjdG9yLlNjcmlwdC5E
aXNwbGF5TmFtZUNvb2tpZUtleV0gPSB0aGlzLmRpc3BsYXlOYW1lOwogICAgIH0sCiAKKyAgICBy
ZXF1ZXN0U2NyaXB0U3ludGF4VHJlZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIHNl
bGYgPSB0aGlzOworICAgICAgICB2YXIgcHJvbWlzZUZ1bmN0aW9uID0gbnVsbAorICAgICAgICBp
ZiAodGhpcy5jb250ZW50KSB7CisgICAgICAgICAgICBwcm9taXNlRnVuY3Rpb24gPSBmdW5jdGlv
bihyZXNvbHZlKSB7CisgICAgICAgICAgICAgICAgc2VsZi5fc2NyaXB0U3ludGF4VHJlZURpZExv
YWRDYWxsYmFjayA9IHJlc29sdmU7CisgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coIjFzdCBjaG9pY2UiKTsKKyAg
ICAgICAgICAgICAgICAgICAgc2VsZi5fbWFrZVN5bnRheFRyZWUoc2VsZi5jb250ZW50KTsgCisg
ICAgICAgICAgICAgICAgfSwgMTAwKTsKKyAgICAgICAgICAgIH07CisgICAgICAgIH0gZWxzZSBp
ZiAodGhpcy5fcmVzb3VyY2UgJiYgdGhpcy5fcmVzb3VyY2UudHlwZSA9PT0gV2ViSW5zcGVjdG9y
LlJlc291cmNlLlR5cGUuU2NyaXB0ICYmIHRoaXMuX3Jlc291cmNlLmZpbmlzaGVkICYmIHRoaXMu
X3Jlc291cmNlLmNvbnRlbnQpIHsKKyAgICAgICAgICAgIHByb21pc2VGdW5jdGlvbiA9IGZ1bmN0
aW9uKHJlc29sdmUpIHsKKyAgICAgICAgICAgICAgICBzZWxmLl9zY3JpcHRTeW50YXhUcmVlRGlk
TG9hZENhbGxiYWNrID0gcmVzb2x2ZTsKKyAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0
aW9uKCkgeyAKKyAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coIjJuZCBjaG9pY2UiKQor
ICAgICAgICAgICAgICAgICAgICBzZWxmLl9tYWtlU3ludGF4VHJlZShzZWxmLl9yZXNvdXJjZS5j
b250ZW50KTsgCisgICAgICAgICAgICAgICAgfSwgMTAwKTsKKyAgICAgICAgICAgIH07CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwcm9taXNlRnVuY3Rpb24gPSBmdW5jdGlvbihyZXNv
bHZlKSB7CisgICAgICAgICAgICAgICAgc2VsZi5fc2NyaXB0U3ludGF4VHJlZURpZExvYWRDYWxs
YmFjayA9IHJlc29sdmU7CisgICAgICAgICAgICAgICAgc2VsZi5yZXF1ZXN0Q29udGVudChmdW5j
dGlvbihlcnJvciwgc291cmNlVGV4dCkgeworICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxv
ZygiM3JkIGNob2ljZSIpOworICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9u
KCkgeworICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbWFrZVN5bnRheFRyZWUoc291cmNl
VGV4dCk7CisgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7CisgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNl
KHByb21pc2VGdW5jdGlvbik7CisgICAgfSwKKwogICAgIC8vIFByaXZhdGUKIAogICAgIF9yZXNv
bHZlUmVzb3VyY2U6IGZ1bmN0aW9uKCkKQEAgLTE3NCw2ICsyMTIsMTcgQEAgV2ViSW5zcGVjdG9y
LlNjcmlwdC5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gbnVsbDsK
KyAgICB9LAorCisgICAgX21ha2VTeW50YXhUcmVlOiBmdW5jdGlvbihzb3VyY2VUZXh0KSB7Cisg
ICAgICAgIGlmICghc291cmNlVGV4dCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB0
aGlzLl9zY3JpcHRTeW50YXhUcmVlID0gbmV3IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVl
KHNvdXJjZVRleHQsIHRoaXMpOworICAgICAgICBpZiAodGhpcy5fc2NyaXB0U3ludGF4VHJlZURp
ZExvYWRDYWxsYmFjaykgeworICAgICAgICAgICAgdGhpcy5fc2NyaXB0U3ludGF4VHJlZURpZExv
YWRDYWxsYmFjaygpOworICAgICAgICAgICAgdGhpcy5fc2NyaXB0U3ludGF4VHJlZURpZExvYWRD
YWxsYmFjayA9IG51bGw7CisgICAgICAgIH0KICAgICB9CiB9OwogCkluZGV4OiBTb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvU2NyaXB0U3ludGF4VHJlZS5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvU2Ny
aXB0U3ludGF4VHJlZS5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL01vZGVscy9TY3JpcHRTeW50YXhUcmVlLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsODEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRy
ZWUgPSBmdW5jdGlvbihzb3VyY2VUZXh0LCBzY3JpcHQpIAoreworICAgIGNvbnNvbGUuYXNzZXJ0
KHNjcmlwdCAmJiBzY3JpcHQgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuU2NyaXB0LCBzY3JpcHQp
CisgICAgV2ViSW5zcGVjdG9yLk9iamVjdC5jYWxsKHRoaXMpOworICAgIHRoaXMuX3NjcmlwdCA9
IHNjcmlwdDsKKworICAgIHRyeSB7CisgICAgICAgIHZhciBlc3ByaW1hQVNUID0gV2ViSW5zcGVj
dG9yLl9lc3ByaW1hLnBhcnNlKHNvdXJjZVRleHQsIHsgcmFuZ2UgOiB0cnVlIH0pOworICAgICAg
ICB0aGlzLl9hc3QgPSB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChlc3ByaW1hQVNUKTsKKyAgICB9
IGNhdGNoKGUpIHsKKyAgICAgICAgY29uc29sZS5lcnJvcigiQ291bGRuJ3QgcGFyc2UgSmF2YVNj
cmlwdCBGaWxlOiAiICsgc2NyaXB0LnVybCArICJcbiIgKyBlLm1lc3NhZ2UpOworICAgICAgICB0
aGlzLl9hc3QgPSBudWxsOworICAgIH0KKworICAgIHRoaXMuX29yaWdpbmFsU291cmNlVGV4dCA9
IHNvdXJjZVRleHQ7Cit9OworCisvLyBOb3RlIHRoYXQgdGhpcyBjb3JyZXNwb25kcyBpZGVudGlj
YWxseSB0byBhbiBlbnVtIGluIEphdmFTY2lwdENvcmUvcnVudGltZS9IaWdoRmlkZWxpdHlUeXBl
UHJvZmlsZXIuaAorV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuVHlwZVByb2ZpbGVyU2Vh
cmNoRGVzY3JpcHRvciA9IHsKKyAgICBUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yTm9ybWFs
OiAxLAorICAgIFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3JGdW5jdGlvblJldHVybjogMgor
fTsKKworV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUgPSB7CisgICAgQXNz
aWdubWVudEV4cHJlc3Npb246ICdBc3NpZ25tZW50RXhwcmVzc2lvbicsCisgICAgQXJyYXlFeHBy
ZXNzaW9uOiAnQXJyYXlFeHByZXNzaW9uJywKKyAgICBCbG9ja1N0YXRlbWVudDogJ0Jsb2NrU3Rh
dGVtZW50JywKKyAgICBCaW5hcnlFeHByZXNzaW9uOiAnQmluYXJ5RXhwcmVzc2lvbicsCisgICAg
QnJlYWtTdGF0ZW1lbnQ6ICdCcmVha1N0YXRlbWVudCcsCisgICAgQ2F0Y2hDbGF1c2U6ICdDYXRj
aENsYXVzZScsCisgICAgQ29udGludWVTdGF0ZW1lbnQ6ICdDb250aW51ZVN0YXRlbWVudCcsCisg
ICAgRG9XaGlsZVN0YXRlbWVudDogJ0RvV2hpbGVTdGF0ZW1lbnQnLAorICAgIERlYnVnZ2VyU3Rh
dGVtZW50OiAnRGVidWdnZXJTdGF0ZW1lbnQnLAorICAgIEVtcHR5U3RhdGVtZW50OiAnRW1wdHlT
dGF0ZW1lbnQnLAorICAgIEV4cHJlc3Npb25TdGF0ZW1lbnQ6ICdFeHByZXNzaW9uU3RhdGVtZW50
JywKKyAgICBGb3JTdGF0ZW1lbnQ6ICdGb3JTdGF0ZW1lbnQnLAorICAgIEZvckluU3RhdGVtZW50
OiAnRm9ySW5TdGF0ZW1lbnQnLAorICAgIEZ1bmN0aW9uQ2FsbDogJ0Z1bmN0aW9uQ2FsbCcsCisg
ICAgRnVuY3Rpb25EZWNsYXJhdGlvbjogJ0Z1bmN0aW9uRGVjbGFyYXRpb24nLAorICAgIEZ1bmN0
aW9uRXhwcmVzc2lvbjogJ0Z1bmN0aW9uRXhwcmVzc2lvbicsCisgICAgSWRlbnRpZmllcjogJ0lk
ZW50aWZpZXInLAorICAgIElmU3RhdGVtZW50OiAnSWZTdGF0ZW1lbnQnLAorICAgIExpdGVyYWw6
ICdMaXRlcmFsJywKKyAgICBMYWJlbGVkU3RhdGVtZW50OiAnTGFiZWxlZFN0YXRlbWVudCcsCisg
ICAgTG9naWNhbEV4cHJlc3Npb246ICdMb2dpY2FsRXhwcmVzc2lvbicsCisgICAgTWVtYmVyRXhw
cmVzc2lvbjogJ01lbWJlckV4cHJlc3Npb24nLAorICAgIE5ld0V4cHJlc3Npb246ICdOZXdFeHBy
ZXNzaW9uJywKKyAgICBPYmplY3RFeHByZXNzaW9uOiAnT2JqZWN0RXhwcmVzc2lvbicsCisgICAg
UG9zdGZpeEV4cHJlc3Npb246J1Bvc3RmaXhFeHByZXNzaW9uJywKKyAgICBQcm9ncmFtOiAnUHJv
Z3JhbScsCisgICAgUHJvcGVydHk6ICdQcm9wZXJ0eScsCisgICAgUHJlZml4RXhwcmVzc2lvbjon
UHJlZml4RXhwcmVzc2lvbicsCisgICAgUmV0dXJuU3RhdGVtZW50OiAnUmV0dXJuU3RhdGVtZW50
JywKKyAgICBTZXF1ZW5jZUV4cHJlc3Npb246ICdTZXF1ZW5jZUV4cHJlc3Npb24nLAorICAgIFN3
aXRjaFN0YXRlbWVudDogJ1N3aXRjaFN0YXRlbWVudCcsCisgICAgU3dpdGNoQ2FzZTogJ1N3aXRj
aENhc2UnLAorICAgIFRlcm5hcnlFeHByZXNzaW9uOiAnVGVybmFyeUV4cHJlc3Npb24nLAorICAg
IFRoaXNFeHByZXNzaW9uOiAnVGhpc0V4cHJlc3Npb24nLAorICAgIFRocm93U3RhdGVtZW50OiAn
VGhyb3dTdGF0ZW1lbnQnLAorICAgIFRyeVN0YXRlbWVudDogJ1RyeVN0YXRlbWVudCcsCisgICAg
VW5hcnlFeHByZXNzaW9uOiAnVW5hcnlFeHByZXNzaW9uJywKKyAgICBWYXJpYWJsZURlY2xhcmF0
aW9uOiAnVmFyaWFibGVEZWNsYXJhdGlvbicsCisgICAgVmFyaWFibGVEZWNsYXJhdG9yOiAnVmFy
aWFibGVEZWNsYXJhdG9yJywKKyAgICBXaGlsZVN0YXRlbWVudDogJ1doaWxlU3RhdGVtZW50JywK
KyAgICBXaXRoU3RhdGVtZW50OiAnV2l0aFN0YXRlbWVudCcKK307CisKK1dlYkluc3BlY3Rvci5T
Y3JpcHRTeW50YXhUcmVlLnByb3RvdHlwZSA9IHsKKyAgICBjb25zdHJ1Y3RvcjogV2ViSW5zcGVj
dG9yLlNjcmlwdFN5bnRheFRyZWUsCisgICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuT2JqZWN0
LnByb3RvdHlwZSwKKworICAgIC8vIFB1YmxpYworCisgICAgZm9yRWFjaE5vZGU6IGZ1bmN0aW9u
KGZ1bmMpCisgICAgeworICAgICAgICB0aGlzLl9yZWN1cnNlKHRoaXMuX2FzdCwgZnVuYywgdGhp
cy5fZGVmYXVsdFBhcnNlclN0YXRlKCkpOworICAgIH0sCisKKyAgICBmaWx0ZXI6IGZ1bmN0aW9u
KGZ1bmMsIHN0YXJ0Tm9kZSkgCisgICAgeworICAgICAgICBzdGFydE5vZGUgPSBzdGFydE5vZGUg
fHwgdGhpcy5fYXN0OworICAgICAgICB2YXIgbm9kZXMgPSBbXTsKKyAgICAgICAgZnVuY3Rpb24g
ZmlsdGVyKG5vZGUsIHN0YXRlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZnVuYyhub2Rl
KSkKKyAgICAgICAgICAgICAgICBub2Rlcy5wdXNoKG5vZGUpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIHN0YXRlLnNraXBDaGlsZE5vZGVzID0gdHJ1ZTsgCisgICAgICAgIH0K
KyAgICAgICAgdGhpcy5fcmVjdXJzZShzdGFydE5vZGUsIGZpbHRlciwgdGhpcy5fZGVmYXVsdFBh
cnNlclN0YXRlKCkpOworCisgICAgICAgIHJldHVybiBub2RlczsKKyAgICB9LAorCisgICAgZmls
dGVyQnlSYW5nZTogZnVuY3Rpb24oc3RhcnRPZmZzZXQsIGVuZE9mZnNldCkKKyAgICB7CisgICAg
ICAgIHZhciBhbGxOb2RlcyA9IFtdOworICAgICAgICB2YXIgc3RhcnQgPSAwOworICAgICAgICB2
YXIgZW5kID0gMTsKKyAgICAgICAgZnVuY3Rpb24gZm9yRWFjaChub2RlLCBzdGF0ZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgLy8gcHJvZ19zdGFydCAgICByYW5nZSAgICAgcHJvZ3JhbSBlbmQK
KyAgICAgICAgICAgIC8vIFsgICAgICAgICAgICAgWyAgIF0gICAgICAgICAgICAgICBdCisgICAg
ICAgICAgICAvLyAgICAgICAgICBbIF0gWyBbXSAgXSAgWyBdCisKKyAgICAgICAgICAgIC8vIElm
IGEgbm9kZSdzIHJhbmdlIGVuZHMgYmVmb3JlIHRoZSByYW5nZSB3ZSdyZSBpbnRlcmVzdGVkIGlu
IHN0YXJ0cywgd2UgZG9uJ3QgbmVlZCB0byBzZWFyY2ggYW55IG9mIGl0cworICAgICAgICAgICAg
Ly8gZW5jbG9zaW5nIHJhbmdlcywgYmVjYXVzZSwgYnkgZGVmaW5pdGlvbiwgdGhvc2UgZW5jbG9z
aW5nIHJhbmdlcyBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIG5vZGUncyBvdXRlciByYW5nZS4K
KyAgICAgICAgICAgIGlmIChub2RlLnJhbmdlW2VuZF0gPCBzdGFydE9mZnNldCkKKyAgICAgICAg
ICAgICAgICBzdGF0ZS5za2lwQ2hpbGROb2RlcyA9IHRydWU7CisKKyAgICAgICAgICAgIC8vIFdl
IGFyZSBvbmx5IGluc3RlcmVzdGVkIGluIG5vZGVzIHdob3NlIHN0YXJ0IHBvcyBpcyB3aXRoaW4g
b3VyIHJhbmdlLgorICAgICAgICAgICAgaWYgKHN0YXJ0T2Zmc2V0IDw9IG5vZGUucmFuZ2Vbc3Rh
cnRdICYmIG5vZGUucmFuZ2Vbc3RhcnRdIDw9IGVuZE9mZnNldCkKKyAgICAgICAgICAgICAgICBh
bGxOb2Rlcy5wdXNoKG5vZGUpOworCisgICAgICAgICAgICAvLyBPbmNlIHdlIHNlZSBub2RlcyB0
aGF0IHN0YXJ0IGJleW9uZCBvdXIgcmFuZ2UsIHdlIGNhbiBxdWl0IHRyYXZlcnNpbmcgdGhlIEFT
VC4gV2UgY2FuIGRvIHRoaXMgc2FmZWx5CisgICAgICAgICAgICAvLyBiZWNhdXNlIHdlIGtub3cg
dGhlIEFTVCBpcyB0cmF2ZXJzZWQgdXNpbmcgZGVwdGggZmlyc3Qgc2VhcmNoLCBzbyBpdCB3aWxs
IHRyYXZlcnNlIGludG8gZW5jbG9zaW5nIHJhbmdlcworICAgICAgICAgICAgLy8gYmVmb3JlIGl0
IHRyYXZlcnNlcyBpbnRvIGFkamFjZW50IHJhbmdlcy4KKyAgICAgICAgICAgIGlmIChub2RlLnJh
bmdlW3N0YXJ0XSA+IGVuZE9mZnNldCkKKyAgICAgICAgICAgICAgICBzdGF0ZS5zaG91bGRTdG9w
RWFybHkgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5mb3JFYWNoTm9kZShmb3JF
YWNoKTsKKworICAgICAgICByZXR1cm4gYWxsTm9kZXM7CisgICAgfSwKKworICAgIGNvbnRhaW5z
Tm9uRW1wdHlSZXR1cm5TdGF0ZW1lbnQ6IGZ1bmN0aW9uKHN0YXJ0Tm9kZSkKKyAgICB7CisgICAg
ICAgIGlmIChzdGFydE5vZGUuX2F0dGFjaG1lbnRzLl9oYXNOb25FbXB0eVJldHVyblN0YXRlbWVu
dCAhPT0gdW5kZWZpbmVkKQorICAgICAgICAgICAgcmV0dXJuIHN0YXJ0Tm9kZS5fYXR0YWNobWVu
dHMuX2hhc05vbkVtcHR5UmV0dXJuU3RhdGVtZW50OworCisgICAgICAgIGZ1bmN0aW9uIGZpbHRl
cihub2RlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbm9kZS50eXBlICE9PSBXZWJJ
bnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5GdW5jdGlvbkV4cHJlc3Npb24gJiYg
bm9kZS50eXBlICE9PSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5GdW5j
dGlvbkRlY2xhcmF0aW9uOworICAgICAgICB9CisKKyAgICAgICAgdmFyIG5vZGVzID0gdGhpcy5m
aWx0ZXIoZmlsdGVyLCBzdGFydE5vZGUpOworICAgICAgICB2YXIgaGFzUmV0dXJuU3RhdGVtZW50
ID0gZmFsc2U7CisgICAgICAgIHZhciByZXR1cm5TdGF0ZW1lbnRUeXBlID0gV2ViSW5zcGVjdG9y
LlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuUmV0dXJuU3RhdGVtZW50OworICAgICAgICBmb3Ig
KHZhciBub2RlIG9mIG5vZGVzKSB7CisgICAgICAgICAgICBpZiAobm9kZS50eXBlID09PSByZXR1
cm5TdGF0ZW1lbnRUeXBlICYmIG5vZGUuYXJndW1lbnQpIHsKKyAgICAgICAgICAgICAgICBoYXNS
ZXR1cm5TdGF0ZW1lbnQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgICAKKyAgICAgICAgc3RhcnROb2RlLl9hdHRhY2htZW50
cy5faGFzTm9uRW1wdHlSZXR1cm5TdGF0ZW1lbnQgPSBoYXNSZXR1cm5TdGF0ZW1lbnQ7CisKKyAg
ICAgICAgcmV0dXJuIGhhc1JldHVyblN0YXRlbWVudDsKKyAgICB9LAorCisgICAgdXBkYXRlVHlw
ZXM6IGZ1bmN0aW9uKHNvdXJjZUlELCBub2Rlc1RvVXBkYXRlLCBjYWxsYmFjaykgCisgICAgewor
ICAgICAgICB2YXIgYWxsUmVxdWVzdHMgPSBbXTsKKyAgICAgICAgdmFyIGFsbFJlcXVlc3ROb2Rl
cyA9IFtdOworCisgICAgICAgIGZ1bmN0aW9uIGZvckVhY2gobm9kZSkgeworICAgICAgICAgICAg
dmFyIFR5cGVzID0gV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGU7CisgICAg
ICAgICAgICBzd2l0Y2gobm9kZS50eXBlKSB7CisgICAgICAgICAgICBjYXNlIFR5cGVzLkZ1bmN0
aW9uRGVjbGFyYXRpb246CisgICAgICAgICAgICBjYXNlIFR5cGVzLkZ1bmN0aW9uRXhwcmVzc2lv
bjoKKyAgICAgICAgICAgICAgICBub2RlLnBhcmFtcy5mb3JFYWNoKGZ1bmN0aW9uIChwYXJhbSkg
eworICAgICAgICAgICAgICAgICAgICBhbGxSZXF1ZXN0cy5wdXNoKHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHR5cGVJbmZvcm1hdGlvbkRlc2NyaXB0b3I6IFdlYkluc3BlY3Rvci5TY3JpcHRT
eW50YXhUcmVlLlR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3IuVHlwZVByb2ZpbGVyU2VhcmNo
RGVzY3JpcHRvck5vcm1hbCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUlEOiBzb3Vy
Y2VJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpdm90OiBwYXJhbS5yYW5nZVswXQorICAg
ICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgYWxsUmVxdWVzdE5vZGVz
LnB1c2gocGFyYW0pOworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgYWxs
UmVxdWVzdHMucHVzaCh7CisgICAgICAgICAgICAgICAgICAgIHR5cGVJbmZvcm1hdGlvbkRlc2Ny
aXB0b3I6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLlR5cGVQcm9maWxlclNlYXJjaERl
c2NyaXB0b3IuVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvckZ1bmN0aW9uUmV0dXJuLAorICAg
ICAgICAgICAgICAgICAgICBzb3VyY2VJRDogc291cmNlSUQsCisgICAgICAgICAgICAgICAgICAg
IGRpdm90OiBub2RlLmJvZHkucmFuZ2VbMF0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgICAgICBhbGxSZXF1ZXN0Tm9kZXMucHVzaChub2RlKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgVHlwZXMuVmFyaWFibGVEZWNsYXJhdG9yOgorICAgICAgICAg
ICAgICAgIGFsbFJlcXVlc3RzLnB1c2goeworICAgICAgICAgICAgICAgICAgICB0eXBlSW5mb3Jt
YXRpb25EZXNjcmlwdG9yOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5UeXBlUHJvZmls
ZXJTZWFyY2hEZXNjcmlwdG9yLlR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3JOb3JtYWwsCisg
ICAgICAgICAgICAgICAgICAgIHNvdXJjZUlEOiBzb3VyY2VJRCwKKyAgICAgICAgICAgICAgICAg
ICAgZGl2b3Q6IG5vZGUuaWQucmFuZ2VbMF0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgICAgICBhbGxSZXF1ZXN0Tm9kZXMucHVzaChub2RlKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG5vZGVzVG9VcGRhdGUuZm9y
RWFjaChmb3JFYWNoKTsKKworICAgICAgICBmdW5jdGlvbiBoYW5kbGVUeXBlcyhlcnJvciwgdHlw
ZUluZm9ybWF0aW9uQXJyYXkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChlcnJvcikKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHR5cGVJ
bmZvcm1hdGlvbkFycmF5Lmxlbmd0aCA9PT0gYWxsUmVxdWVzdHMubGVuZ3RoKTsKKworICAgICAg
ICAgICAgdmFyIGk7CisgICAgICAgICAgICB2YXIgbm9kZTsKKyAgICAgICAgICAgIHZhciB0eXBl
SW5mb3JtYXRpb247CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdHlwZUluZm9ybWF0aW9u
QXJyYXkubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBub2RlID0gYWxsUmVxdWVzdE5v
ZGVzW2ldOworICAgICAgICAgICAgICAgIHR5cGVJbmZvcm1hdGlvbiA9IHR5cGVJbmZvcm1hdGlv
bkFycmF5W2ldOworICAgICAgICAgICAgICAgIGlmIChhbGxSZXF1ZXN0c1tpXS50eXBlSW5mb3Jt
YXRpb25EZXNjcmlwdG9yID09PSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5UeXBlUHJv
ZmlsZXJTZWFyY2hEZXNjcmlwdG9yLlR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3JGdW5jdGlv
blJldHVybikKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5fYXR0YWNobWVudHMuX3JldHVyblR5
cGVzID0gdHlwZUluZm9ybWF0aW9uOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgbm9kZS5fYXR0YWNobWVudHMuX3R5cGVzID0gdHlwZUluZm9ybWF0aW9uOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBjYWxsYmFjaygpOworICAgICAgICB9CisKKyAgICAg
ICAgUnVudGltZUFnZW50LmdldFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0cyhhbGxS
ZXF1ZXN0cywgaGFuZGxlVHlwZXMpOworICAgIH0sCisKKyAgICAvLyBQcml2YXRlCisKKyAgICBf
ZGVmYXVsdFBhcnNlclN0YXRlOiBmdW5jdGlvbigpIAorICAgIHsKKyAgICAgICAgcmV0dXJuIHsK
KyAgICAgICAgICAgIHNob3VsZFN0b3BFYXJseTogZmFsc2UsCisgICAgICAgICAgICBza2lwQ2hp
bGROb2RlczogZmFsc2UKKyAgICAgICAgfTsKKyAgICB9LAorCisgICAgX3JlY3Vyc2U6IGZ1bmN0
aW9uKG5vZGUsIGZ1bmMsIHN0YXRlKSAKKyAgICB7CisgICAgICAgIGlmICghbm9kZSkKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoc3RhdGUuc2hvdWxkU3RvcEVhcmx5IHx8IHN0
YXRlLnNraXBDaGlsZE5vZGVzKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciBU
eXBlcyA9IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlOworCisgICAgICAg
IHN3aXRjaChub2RlLnR5cGUpIHsKKyAgICAgICAgY2FzZSBUeXBlcy5Bc3NpZ25tZW50RXhwcmVz
c2lvbjoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5f
cmVjdXJzZShub2RlLmxlZnQsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vy
c2Uobm9kZS5yaWdodCwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgVHlwZXMuQXJyYXlFeHByZXNzaW9uOgorICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0
ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlQXJyYXkobm9kZS5lbGVtZW50cywgZnVuYywg
c3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuQmxvY2tTdGF0
ZW1lbnQ6CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMu
X3JlY3Vyc2VBcnJheShub2RlLmJvZHksIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFR5cGVzLkJpbmFyeUV4cHJlc3Npb246CisgICAgICAgICAgICBmdW5j
KG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5sZWZ0LCBmdW5j
LCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUucmlnaHQsIGZ1bmMsIHN0
YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVzLkJyZWFrU3RhdGVt
ZW50OgorICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBUeXBlcy5DYXRjaENsYXVzZToKKyAgICAgICAgICAgIGZ1bmMobm9kZSwg
c3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLnBhcmFtLCBmdW5jLCBzdGF0
ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuYm9keSwgZnVuYywgc3RhdGUpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuQ29udGludWVTdGF0ZW1lbnQ6
CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vy
c2Uobm9kZS5sYWJlbCwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgVHlwZXMuRG9XaGlsZVN0YXRlbWVudDoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3Rh
dGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmJvZHksIGZ1bmMsIHN0YXRlKTsK
KyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5wcmVkaWNhdGUsIGZ1bmMsIHN0YXRlKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVzLkRlYnVnZ2VyU3RhdGVtZW50
OgorICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBUeXBlcy5FbXB0eVN0YXRlbWVudDoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwg
c3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuRXhwcmVzc2lv
blN0YXRlbWVudDoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAg
dGhpcy5fcmVjdXJzZShub2RlLmV4cHJlc3Npb24sIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFR5cGVzLkZvclN0YXRlbWVudDoKKyAgICAgICAgICAgIGZ1
bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmluaXQsIGZ1
bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5wcmVkaWNhdGUsIGZ1
bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS51cGRhdGUsIGZ1bmMs
IHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5ib2R5LCBmdW5jLCBzdGF0
ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlcy5Gb3JJblN0YXRlbWVu
dDoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVj
dXJzZShub2RlLmxlZnQsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uo
bm9kZS5yaWdodCwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2Rl
LmJvZHksIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5
cGVzLkZ1bmN0aW9uQ2FsbDoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAg
ICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmNhbGxlZSwgZnVuYywgc3RhdGUpOworICAgICAgICAg
ICAgdGhpcy5fcmVjdXJzZUFycmF5KG5vZGUuYXJndW1lbnRzLCBmdW5jLCBzdGF0ZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlcy5GdW5jdGlvbkRlY2xhcmF0aW9uOgor
ICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNl
KG5vZGUuaWQsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2VBcnJheShu
b2RlLnBhcmFtcywgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2Rl
LmJvZHksIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5
cGVzLkZ1bmN0aW9uRXhwcmVzc2lvbjoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOwor
ICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmlkLCBmdW5jLCBzdGF0ZSk7CisgICAgICAg
ICAgICB0aGlzLl9yZWN1cnNlQXJyYXkobm9kZS5wYXJhbXMsIGZ1bmMsIHN0YXRlKTsKKyAgICAg
ICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5ib2R5LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlcy5JZGVudGlmaWVyOgorICAgICAgICAgICAgZnVu
Yyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlcy5J
ZlN0YXRlbWVudDoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAg
dGhpcy5fcmVjdXJzZShub2RlLnByZWRpY2F0ZSwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAg
dGhpcy5fcmVjdXJzZShub2RlLmNvbnNlcXVlbnQsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAg
IHRoaXMuX3JlY3Vyc2Uobm9kZS5hbHRlcm5hdGUsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFR5cGVzLkxpdGVyYWw6CisgICAgICAgICAgICBmdW5jKG5v
ZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVzLkxhYmVs
ZWRTdGF0ZW1lbnQ6CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAg
IHRoaXMuX3JlY3Vyc2Uobm9kZS5sYWJlbCwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgdGhp
cy5fcmVjdXJzZShub2RlLmJvZHksIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFR5cGVzLkxvZ2ljYWxFeHByZXNzaW9uOgorICAgICAgICAgICAgZnVuYyhu
b2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUubGVmdCwgZnVuYywg
c3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLnJpZ2h0LCBmdW5jLCBzdGF0
ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlcy5NZW1iZXJFeHByZXNz
aW9uOgorICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9y
ZWN1cnNlKG5vZGUub2JqZWN0LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1
cnNlKG5vZGUucHJvcGVydHksIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFR5cGVzLk5ld0V4cHJlc3Npb246CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0
YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5jYWxsZWUsIGZ1bmMsIHN0YXRl
KTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2VBcnJheShub2RlLmFyZ3VtZW50cywgZnVuYywg
c3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuT2JqZWN0RXhw
cmVzc2lvbjoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhp
cy5fcmVjdXJzZUFycmF5KG5vZGUucHJvcGVydGllcywgZnVuYywgc3RhdGUpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuUHJlZml4RXhwcmVzc2lvbjoKKyAgICAgICAg
ICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmFy
Z3VtZW50LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBU
eXBlcy5Qcm9ncmFtOgorICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAg
ICB0aGlzLl9yZWN1cnNlQXJyYXkobm9kZS5ib2R5LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlcy5Qcm9wZXJ0eToKKyAgICAgICAgICAgIGZ1bmMo
bm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmtleSwgZnVuYywg
c3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLnZhbHVlLCBmdW5jLCBzdGF0
ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlcy5Qb3N0Zml4RXhwcmVz
c2lvbjoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5f
cmVjdXJzZShub2RlLmFyZ3VtZW50LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBUeXBlcy5SZXR1cm5TdGF0ZW1lbnQ6CisgICAgICAgICAgICBmdW5jKG5v
ZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5hcmd1bWVudCwgZnVu
Yywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuU2VxdWVu
Y2VFeHByZXNzaW9uOgorICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAg
ICB0aGlzLl9yZWN1cnNlQXJyYXkobm9kZS5leHByZXNzaW9ucywgZnVuYywgc3RhdGUpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuU3dpdGNoU3RhdGVtZW50OgorICAg
ICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5v
ZGUuZGlzY3JpbWluYW50LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNl
QXJyYXkobm9kZS5jYXNlcywgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgVHlwZXMuU3dpdGNoQ2FzZToKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUp
OworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLnByZWRpY2F0ZSwgZnVuYywgc3RhdGUp
OworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZUFycmF5KG5vZGUuY29uc2VxdWVudCwgZnVuYywg
c3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuVGVybmFyeUV4
cHJlc3Npb246CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRo
aXMuX3JlY3Vyc2Uobm9kZS5wcmVkaWNhdGUsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIHRo
aXMuX3JlY3Vyc2Uobm9kZS5jb25zZXF1ZW50LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICB0
aGlzLl9yZWN1cnNlKG5vZGUuYWx0ZXJuYXRlLCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBUeXBlcy5UaGlzRXhwcmVzc2lvbjoKKyAgICAgICAgICAgIGZ1
bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMu
VGhyb3dTdGF0ZW1lbnQ6CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAg
ICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5hcmd1bWVudCwgZnVuYywgc3RhdGUpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuVHJ5U3RhdGVtZW50OgorICAgICAgICAgICAg
ZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuYmxvY2ss
IGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2VBcnJheShub2RlLmd1YXJk
ZWRIYW5kbGVycywgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZUFycmF5
KG5vZGUuaGFuZGxlcnMsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uo
bm9kZS5maW5hbGl6ZXIsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFR5cGVzLlVuYXJ5RXhwcmVzc2lvbjoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3Rh
dGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmFyZ3VtZW50LCBmdW5jLCBzdGF0
ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlcy5WYXJpYWJsZURlY2xh
cmF0aW9uOgorICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlz
Ll9yZWN1cnNlQXJyYXkobm9kZS5kZWNsYXJhdGlvbnMsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVzLlZhcmlhYmxlRGVjbGFyYXRvcjoKKyAgICAg
ICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2Rl
LmlkLCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuaW5pdCwg
ZnVuYywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuV2hp
bGVTdGF0ZW1lbnQ6CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAg
IHRoaXMuX3JlY3Vyc2Uobm9kZS5wcmVkaWNhdGUsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAg
IHRoaXMuX3JlY3Vyc2Uobm9kZS5ib2R5LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBUeXBlcy5XaXRoU3RhdGVtZW50OgorICAgICAgICAgICAgZnVuYyhu
b2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUub2JqZWN0LCBmdW5j
LCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuYm9keSwgZnVuYywgc3Rh
dGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzdGF0ZS5za2lw
Q2hpbGROb2RlcyA9IGZhbHNlOworICAgIH0sCisKKyAgICBfcmVjdXJzZUFycmF5IDogZnVuY3Rp
b24oYXJyYXksIGZ1bmMsIHN0YXRlKSAKKyAgICB7CisgICAgICAgIGZ1bmN0aW9uIGZvckVhY2go
bm9kZSkgeworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLCBmdW5jLCBzdGF0ZSk7Cisg
ICAgICAgIH0KKworICAgICAgICBhcnJheS5mb3JFYWNoKGZvckVhY2guYmluZCh0aGlzKSk7Cisg
ICAgfSwKKyAgICAKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIHRyYW5zbGF0ZXMgZnJvbSBlc3ByaW1h
J3MgQVNUIHRvIG91cnMuIE1vc3RseSwgdGhpcyBpcyBqdXN0IHRoZSBpZGVudGl0eSBmdW5jdGlv
biwgYnV0IHRoZXJlIGFyZSBhIGZldyBub2RlcyBhbmQgYSBmZXcgcHJvcGVydGllcyB0aGF0IGFy
ZSByZW5hbWVkLgorICAgIC8vIFNwZWNpZmljYWxseSwgJ3Rlc3QnIHByb3BlcnR5IGlzIHJlbmFt
ZWQgdG8gJ3ByZWRpY2F0ZScsIHByZWZpeC9wb3N0Zml4IG5vZGVzIGFyZSBub3cgdG8gc2VwYXJh
dGUgbm9kZXMsIENhbGxFeHByZXNzaW9uIGlzIHJlbmFtZWQgdG8gRnVuY3Rpb25DYWxsLCBhbmQg
CisgICAgLy8gQ29uZGl0aW9uYWxFeHByZXNzaW9uIGlzIHJlbmFtZWQgdG8gVGVybmFyeUV4cHJl
c3Npb24uCisgICAgX2NyZWF0ZUludGVybmFsQVNUIDogZnVuY3Rpb24obm9kZSkgCisgICAgewor
ICAgICAgICBpZiAoIW5vZGUpCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKworICAgICAgICB2
YXIgcmVzdWx0ID0gbnVsbDsKKyAgICAgICAgc3dpdGNoKG5vZGUudHlwZSkgeworICAgICAgICBj
YXNlICdBc3NpZ25tZW50RXhwcmVzc2lvbic6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAg
ICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUu
QXNzaWdubWVudEV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgb3BlcmF0b3I6IG5vZGUub3Bl
cmF0b3IsCisgICAgICAgICAgICAgICAgbGVmdDogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9k
ZS5sZWZ0KSwKKyAgICAgICAgICAgICAgICByaWdodDogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qo
bm9kZS5yaWdodCkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSAnQXJyYXlFeHByZXNzaW9uJzoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAg
ICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5BcnJh
eUV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgZWxlbWVudHM6IG5vZGUuZWxlbWVudHMubWFw
KHRoaXMuX2NyZWF0ZUludGVybmFsQVNULmJpbmQodGhpcykpCisgICAgICAgICAgICB9OworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ0Jsb2NrU3RhdGVtZW50JzoKKyAgICAgICAg
ICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0
U3ludGF4VHJlZS5Ob2RlVHlwZS5CbG9ja1N0YXRlbWVudCwKKyAgICAgICAgICAgICAgICBib2R5
OiBub2RlLmJvZHkubWFwKHRoaXMuX2NyZWF0ZUludGVybmFsQVNULmJpbmQodGhpcykpCisgICAg
ICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ0JpbmFyeUV4cHJl
c3Npb24nOgorICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdl
Ykluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkJpbmFyeUV4cHJlc3Npb24sCisg
ICAgICAgICAgICAgICAgb3BlcmF0b3I6IG5vZGUub3BlcmF0b3IsCisgICAgICAgICAgICAgICAg
bGVmdDogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS5sZWZ0KSwKKyAgICAgICAgICAgICAg
ICByaWdodDogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS5yaWdodCkKKyAgICAgICAgICAg
IH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnQnJlYWtTdGF0ZW1lbnQnOgor
ICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rv
ci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkJyZWFrU3RhdGVtZW50LAorICAgICAgICAgICAg
ICAgIGxhYmVsOiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLmxhYmVsKQorICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdDYWxsRXhwcmVzc2lvbic6
CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVj
dG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuRnVuY3Rpb25DYWxsLAorICAgICAgICAgICAg
ICAgIGNhbGxlZTogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS5jYWxsZWUpLAorICAgICAg
ICAgICAgICAgIGFyZ3VtZW50czogbm9kZS5hcmd1bWVudHMubWFwKHRoaXMuX2NyZWF0ZUludGVy
bmFsQVNULmJpbmQodGhpcykpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgJ0NhdGNoQ2xhdXNlJzoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAg
ICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5D
YXRjaENsYXVzZSwKKyAgICAgICAgICAgICAgICBwYXJhbTogdGhpcy5fY3JlYXRlSW50ZXJuYWxB
U1Qobm9kZS5wYXJhbSksCisgICAgICAgICAgICAgICAgYm9keTogdGhpcy5fY3JlYXRlSW50ZXJu
YWxBU1Qobm9kZS5ib2R5KQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlICdDb25kaXRpb25hbEV4cHJlc3Npb24nOgorICAgICAgICAgICAgcmVzdWx0ID0g
eworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5v
ZGVUeXBlLlRlcm5hcnlFeHByZXNzaW9uLAorICAgICAgICAgICAgICAgIHByZWRpY2F0ZTogdGhp
cy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS50ZXN0KSwKKyAgICAgICAgICAgICAgICBjb25zZXF1
ZW50OiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLmNvbnNlcXVlbnQpLAorICAgICAgICAg
ICAgICAgIGFsdGVybmF0ZTogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS5hbHRlcm5hdGUp
CisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ0NvbnRp
bnVlU3RhdGVtZW50JzoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0
eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5Db250aW51ZVN0YXRl
bWVudCwKKyAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9k
ZS5sYWJlbCkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSAnRG9XaGlsZVN0YXRlbWVudCc6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAg
ICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuRG9XaGls
ZVN0YXRlbWVudCwKKyAgICAgICAgICAgICAgICBib2R5OiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFT
VChub2RlLmJvZHkpLAorICAgICAgICAgICAgICAgIHByZWRpY2F0ZTogdGhpcy5fY3JlYXRlSW50
ZXJuYWxBU1Qobm9kZS50ZXN0KQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlICdEZWJ1Z2dlclN0YXRlbWVudCc6CisgICAgICAgICAgICByZXN1bHQgPSB7
CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9k
ZVR5cGUuRGVidWdnZXJTdGF0ZW1lbnQKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSAnRW1wdHlTdGF0ZW1lbnQnOgorICAgICAgICAgICAgcmVzdWx0ID0g
eworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5v
ZGVUeXBlLkVtcHR5U3RhdGVtZW50CisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgJ0V4cHJlc3Npb25TdGF0ZW1lbnQnOgorICAgICAgICAgICAgcmVzdWx0
ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVl
Lk5vZGVUeXBlLkV4cHJlc3Npb25TdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgZXhwcmVzc2lv
bjogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS5leHByZXNzaW9uKQorICAgICAgICAgICAg
fTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdGb3JTdGF0ZW1lbnQnOgorICAg
ICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5T
Y3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkZvclN0YXRlbWVudCwKKyAgICAgICAgICAgICAgICBp
bml0OiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLmluaXQpLAorICAgICAgICAgICAgICAg
IHByZWRpY2F0ZTogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS50ZXN0KSwKKyAgICAgICAg
ICAgICAgICB1cGRhdGU6IHRoaXMuX2NyZWF0ZUludGVybmFsQVNUKG5vZGUudXBkYXRlKSwKKyAg
ICAgICAgICAgICAgICBib2R5OiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLmJvZHkpCisg
ICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ0ZvckluU3Rh
dGVtZW50JzoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBX
ZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5Gb3JJblN0YXRlbWVudCwKKyAg
ICAgICAgICAgICAgICBsZWZ0OiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLmxlZnQpLAor
ICAgICAgICAgICAgICAgIHJpZ2h0OiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLnJpZ2h0
KSwKKyAgICAgICAgICAgICAgICBib2R5OiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLmJv
ZHkpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ0Z1
bmN0aW9uRGVjbGFyYXRpb24nOgorICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAg
ICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkZ1bmN0aW9u
RGVjbGFyYXRpb24sCisgICAgICAgICAgICAgICAgaWQ6IHRoaXMuX2NyZWF0ZUludGVybmFsQVNU
KG5vZGUuaWQpLAorICAgICAgICAgICAgICAgIHBhcmFtczogbm9kZS5wYXJhbXMubWFwKHRoaXMu
X2NyZWF0ZUludGVybmFsQVNULmJpbmQodGhpcykpLAorICAgICAgICAgICAgICAgIGJvZHk6IHRo
aXMuX2NyZWF0ZUludGVybmFsQVNUKG5vZGUuYm9keSksCisgICAgICAgICAgICAgICAgaXNHZXR0
ZXJPclNldHRlcjogZmFsc2UgLy8gVGhpcyBpcyBvYnZpb3VzLCBidXQgaXMgY29udmVuaWVudCBu
b25lIHRoZSBsZXNzIGIvYyBEZWNsYXJhdGlvbnMgYW5kIEV4cHJlc3Npb25zIGFyZSBvZnRlbiBp
bnRlcnR3aW5lZC4KKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSAnRnVuY3Rpb25FeHByZXNzaW9uJzoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAg
ICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5G
dW5jdGlvbkV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgaWQ6IHRoaXMuX2NyZWF0ZUludGVy
bmFsQVNUKG5vZGUuaWQpLAorICAgICAgICAgICAgICAgIHBhcmFtczogbm9kZS5wYXJhbXMubWFw
KHRoaXMuX2NyZWF0ZUludGVybmFsQVNULmJpbmQodGhpcykpLAorICAgICAgICAgICAgICAgIGJv
ZHk6IHRoaXMuX2NyZWF0ZUludGVybmFsQVNUKG5vZGUuYm9keSksCisgICAgICAgICAgICAgICAg
aXNHZXR0ZXJPclNldHRlcjogZmFsc2UgLy8gSWYgdHJ1ZSwgaXQgaXMgc2V0IGluIHRoZSBQcm9w
ZXJ0eSBBU1Qgbm9kZS4KKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSAnSWRlbnRpZmllcic6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAg
ICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuSWRlbnRp
ZmllciwKKyAgICAgICAgICAgICAgICBuYW1lOiBub2RlLm5hbWUKKyAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnSWZTdGF0ZW1lbnQnOgorICAgICAgICAg
ICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRT
eW50YXhUcmVlLk5vZGVUeXBlLklmU3RhdGVtZW50LAorICAgICAgICAgICAgICAgIHByZWRpY2F0
ZTogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS50ZXN0KSwKKyAgICAgICAgICAgICAgICBj
b25zZXF1ZW50OiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLmNvbnNlcXVlbnQpLAorICAg
ICAgICAgICAgICAgIGFsdGVybmF0ZTogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS5hbHRl
cm5hdGUpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
J0xpdGVyYWwnOgorICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6
IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkxpdGVyYWwsCisgICAgICAg
ICAgICAgICAgdmFsdWU6IG5vZGUudmFsdWUsCisgICAgICAgICAgICAgICAgcmF3OiBub2RlLnJh
dworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdMYWJl
bGVkU3RhdGVtZW50JzoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0
eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5MYWJlbGVkU3RhdGVt
ZW50LAorICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2Rl
LmxhYmVsKSwKKyAgICAgICAgICAgICAgICBib2R5OiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChu
b2RlLmJvZHkpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgJ0xvZ2ljYWxFeHByZXNzaW9uJzoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAg
ICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5Mb2dp
Y2FsRXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICBsZWZ0OiB0aGlzLl9jcmVhdGVJbnRlcm5h
bEFTVChub2RlLmxlZnQpLAorICAgICAgICAgICAgICAgIHJpZ2h0OiB0aGlzLl9jcmVhdGVJbnRl
cm5hbEFTVChub2RlLnJpZ2h0KQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlICdNZW1iZXJFeHByZXNzaW9uJzoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsK
KyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2Rl
VHlwZS5NZW1iZXJFeHByZXNzaW9uLAorICAgICAgICAgICAgICAgIG9iamVjdDogdGhpcy5fY3Jl
YXRlSW50ZXJuYWxBU1Qobm9kZS5vYmplY3QpLAorICAgICAgICAgICAgICAgIHByb3BlcnR5OiB0
aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLnByb3BlcnR5KQorICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdOZXdFeHByZXNzaW9uJzoKKyAgICAgICAg
ICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0
U3ludGF4VHJlZS5Ob2RlVHlwZS5OZXdFeHByZXNzaW9uLAorICAgICAgICAgICAgICAgIGNhbGxl
ZTogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS5jYWxsZWUpLAorICAgICAgICAgICAgICAg
IGFyZ3VtZW50czogbm9kZS5hcmd1bWVudHMubWFwKHRoaXMuX2NyZWF0ZUludGVybmFsQVNULmJp
bmQodGhpcykpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgJ09iamVjdEV4cHJlc3Npb24nOgorICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAg
ICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLk9iamVj
dEV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgcHJvcGVydGllczogbm9kZS5wcm9wZXJ0aWVz
Lm1hcCh0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVC5iaW5kKHRoaXMpKQorICAgICAgICAgICAgfTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdQcm9ncmFtJzoKKyAgICAgICAgICAg
IHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3lu
dGF4VHJlZS5Ob2RlVHlwZS5Qcm9ncmFtLAorICAgICAgICAgICAgICAgIGJvZHk6IG5vZGUuYm9k
eS5tYXAodGhpcy5fY3JlYXRlSW50ZXJuYWxBU1QuYmluZCh0aGlzKSkKKyAgICAgICAgICAgIH07
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnUHJvcGVydHknOgorICAgICAgICAg
ICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRT
eW50YXhUcmVlLk5vZGVUeXBlLlByb3BlcnR5LAorICAgICAgICAgICAgICAgIGtleTogdGhpcy5f
Y3JlYXRlSW50ZXJuYWxBU1Qobm9kZS5rZXkpLAorICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlz
Ll9jcmVhdGVJbnRlcm5hbEFTVChub2RlLnZhbHVlKSwKKyAgICAgICAgICAgICAgICBraW5kOiBu
b2RlLmtpbmQKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBpZiAocmVzdWx0LmtpbmQgPT09
ICJnZXQiIHx8IHJlc3VsdC5raW5kID09PSAic2V0IikgeworICAgICAgICAgICAgICAgIHJlc3Vs
dC52YWx1ZS5pc0dldHRlck9yU2V0dGVyID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXN1bHQu
dmFsdWUuZ2V0dGVyT3JTZXR0ZXJSYW5nZSA9IHJlc3VsdC5rZXkucmFuZ2U7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnUmV0dXJuU3RhdGVtZW50JzoK
KyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0
b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5SZXR1cm5TdGF0ZW1lbnQsCisgICAgICAgICAg
ICAgICAgYXJndW1lbnQ6IHRoaXMuX2NyZWF0ZUludGVybmFsQVNUKG5vZGUuYXJndW1lbnQpCisg
ICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ1NlcXVlbmNl
RXhwcmVzc2lvbic6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlw
ZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuU2VxdWVuY2VFeHByZXNz
aW9uLAorICAgICAgICAgICAgICAgIGV4cHJlc3Npb25zOiBub2RlLmV4cHJlc3Npb25zLm1hcCh0
aGlzLl9jcmVhdGVJbnRlcm5hbEFTVC5iaW5kKHRoaXMpKQorICAgICAgICAgICAgfTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdTd2l0Y2hTdGF0ZW1lbnQnOgorICAgICAgICAg
ICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRT
eW50YXhUcmVlLk5vZGVUeXBlLlN3aXRjaFN0YXRlbWVudCwKKyAgICAgICAgICAgICAgICBkaXNj
cmltaW5hbnQ6IHRoaXMuX2NyZWF0ZUludGVybmFsQVNUKG5vZGUuZGlzY3JpbWluYW50KSwKKyAg
ICAgICAgICAgICAgICBjYXNlczogbm9kZS5jYXNlcy5tYXAodGhpcy5fY3JlYXRlSW50ZXJuYWxB
U1QuYmluZCh0aGlzKSkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSAnU3dpdGNoQ2FzZSc6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAg
ICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuU3dpdGNo
Q2FzZSwKKyAgICAgICAgICAgICAgICBwcmVkaWNhdGU6IHRoaXMuX2NyZWF0ZUludGVybmFsQVNU
KG5vZGUudGVzdCksCisgICAgICAgICAgICAgICAgY29uc2VxdWVudDogbm9kZS5jb25zZXF1ZW50
Lm1hcCh0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVC5iaW5kKHRoaXMpKQorICAgICAgICAgICAgfTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdUaGlzRXhwcmVzc2lvbic6CisgICAg
ICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNj
cmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuVGhpc0V4cHJlc3Npb24KKyAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnVGhyb3dTdGF0ZW1lbnQnOgorICAgICAg
ICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3Jp
cHRTeW50YXhUcmVlLk5vZGVUeXBlLlRocm93U3RhdGVtZW50LAorICAgICAgICAgICAgICAgIGFy
Z3VtZW50OiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLmFyZ3VtZW50KQorICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdUcnlTdGF0ZW1lbnQnOgor
ICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rv
ci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlRyeVN0YXRlbWVudCwKKyAgICAgICAgICAgICAg
ICBibG9jazogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS5ibG9jayksCisgICAgICAgICAg
ICAgICAgLy8gRklYTUU6IFdoYXQgYXJlIGd1YXJkZWQgaGFuZGxlcnM/CisgICAgICAgICAgICAg
ICAgZ3VhcmRlZEhhbmRsZXJzOiBub2RlLmd1YXJkZWRIYW5kbGVycy5tYXAodGhpcy5fY3JlYXRl
SW50ZXJuYWxBU1QuYmluZCh0aGlzKSksCisgICAgICAgICAgICAgICAgaGFuZGxlcnM6IG5vZGUu
aGFuZGxlcnMubWFwKHRoaXMuX2NyZWF0ZUludGVybmFsQVNULmJpbmQodGhpcykpLAorICAgICAg
ICAgICAgICAgIGZpbmFsaXplcjogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS5maW5hbGl6
ZXIpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ1Vu
YXJ5RXhwcmVzc2lvbic6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAg
dHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuVW5hcnlFeHByZXNz
aW9uLAorICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBub2RlLm9wZXJhdG9yLAorICAgICAgICAg
ICAgICAgIGFyZ3VtZW50OiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLmFyZ3VtZW50KQor
ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdVcGRhdGVF
eHByZXNzaW9uJzoKKyAgICAgICAgICAgIC8vIFByZWZpeC9wb3N0Zml4IGV4cHJlc3Npb25zIGlu
IGVzcHJpbWEuCisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTog
KG5vZGUucHJlZml4ID8gV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuUHJl
Zml4RXhwcmVzc2lvbiA6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlBv
c3RmaXhFeHByZXNzaW9uKSwKKyAgICAgICAgICAgICAgICBvcGVyYXRvcjogbm9kZS5vcGVyYXRv
ciwKKyAgICAgICAgICAgICAgICBhcmd1bWVudDogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9k
ZS5hcmd1bWVudCkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSAnVmFyaWFibGVEZWNsYXJhdGlvbic6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAg
ICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUu
VmFyaWFibGVEZWNsYXJhdGlvbiwKKyAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnM6IG5vZGUu
ZGVjbGFyYXRpb25zLm1hcCh0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVC5iaW5kKHRoaXMpKQorICAg
ICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdWYXJpYWJsZURl
Y2xhcmF0b3InOgorICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6
IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlZhcmlhYmxlRGVjbGFyYXRv
ciwKKyAgICAgICAgICAgICAgICBpZDogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS5pZCks
CisgICAgICAgICAgICAgICAgaW5pdDogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS5pbml0
KQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdXaGls
ZVN0YXRlbWVudCc6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlw
ZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuV2hpbGVTdGF0ZW1lbnQs
CisgICAgICAgICAgICAgICAgcHJlZGljYXRlOiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2Rl
LnRlc3QpLAorICAgICAgICAgICAgICAgIGJvZHk6IHRoaXMuX2NyZWF0ZUludGVybmFsQVNUKG5v
ZGUuYm9keSkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSAnV2l0aFN0YXRlbWVudCc6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAg
ICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuV2l0aFN0YXRl
bWVudCwKKyAgICAgICAgICAgICAgICBvYmplY3Q6IHRoaXMuX2NyZWF0ZUludGVybmFsQVNUKG5v
ZGUub2JqZWN0KSwKKyAgICAgICAgICAgICAgICBib2R5OiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFT
VChub2RlLmJvZHkpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIHJlc3VsdC5yYW5nZSA9IG5vZGUucmFuZ2U7CisgICAgICAg
IHJlc3VsdC5fYXR0YWNobWVudHMgPSB7fTsgLy8gVGhpcyBpcyBhbiBvYmplY3QgZm9yIHdoaWNo
IHlvdSBjYW4gYWRkIGZpZWxkcyB0byBhbiBBU1Qgbm9kZSB3aXRob3V0IHdvcnJ5aW5nIGFib3V0
IHBvbGx1dGluZyB0aGUgc3ludGF4LXJlbGF0ZWQgZmllbGRzIG9mIHRoZSBub2RlLgorCisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorfTsKKworLyogVGhpcyBpcyBhIG5pY2Ugc3RhcnRp
bmcgb2ZmIHBvaW50IGlmIHlvdSB3YW50IHRvIHdyaXRlIGEgcmVjdXJzaXZlIGZ1bmN0aW9uOgor
ICoKKyAqICAgdmFyIFR5cGVzID0gV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5
cGU7CisgKiAgIHN3aXRjaCAoLi4uKSB7CisgKiAgIGNhc2UgVHlwZXMuQXNzaWdubWVudEV4cHJl
c3Npb246CisgKiAgIGNhc2UgVHlwZXMuQXJyYXlFeHByZXNzaW9uOgorICogICBjYXNlIFR5cGVz
LkJsb2NrU3RhdGVtZW50OgorICogICBjYXNlIFR5cGVzLkJpbmFyeUV4cHJlc3Npb246CisgKiAg
IGNhc2UgVHlwZXMuQnJlYWtTdGF0ZW1lbnQ6CisgKiAgIGNhc2UgVHlwZXMuQ2F0Y2hDbGF1c2U6
CisgKiAgIGNhc2UgVHlwZXMuQ29udGludWVTdGF0ZW1lbnQ6CisgKiAgIGNhc2UgVHlwZXMuRG9X
aGlsZVN0YXRlbWVudDoKKyAqICAgY2FzZSBUeXBlcy5EZWJ1Z2dlclN0YXRlbWVudDoKKyAqICAg
Y2FzZSBUeXBlcy5FbXB0eVN0YXRlbWVudDoKKyAqICAgY2FzZSBUeXBlcy5FeHByZXNzaW9uU3Rh
dGVtZW50OgorICogICBjYXNlIFR5cGVzLkZvclN0YXRlbWVudDoKKyAqICAgY2FzZSBUeXBlcy5G
b3JJblN0YXRlbWVudDoKKyAqICAgY2FzZSBUeXBlcy5GdW5jdGlvbkNhbGw6CisgKiAgIGNhc2Ug
VHlwZXMuRnVuY3Rpb25EZWNsYXJhdGlvbjoKKyAqICAgY2FzZSBUeXBlcy5GdW5jdGlvbkV4cHJl
c3Npb246CisgKiAgIGNhc2UgVHlwZXMuSWRlbnRpZmllcjoKKyAqICAgY2FzZSBUeXBlcy5JZlN0
YXRlbWVudDoKKyAqICAgY2FzZSBUeXBlcy5MaXRlcmFsOgorICogICBjYXNlIFR5cGVzLkxhYmVs
ZWRTdGF0ZW1lbnQ6CisgKiAgIGNhc2UgVHlwZXMuTG9naWNhbEV4cHJlc3Npb246CisgKiAgIGNh
c2UgVHlwZXMuTWVtYmVyRXhwcmVzc2lvbjoKKyAqICAgY2FzZSBUeXBlcy5OZXdFeHByZXNzaW9u
OgorICogICBjYXNlIFR5cGVzLk9iamVjdEV4cHJlc3Npb246CisgKiAgIGNhc2UgVHlwZXMuUHJl
Zml4RXhwcmVzc2lvbjoKKyAqICAgY2FzZSBUeXBlcy5Qcm9ncmFtOgorICogICBjYXNlIFR5cGVz
LlByb3BlcnR5OgorICogICBjYXNlIFR5cGVzLlBvc3RmaXhFeHByZXNzaW9uOgorICogICBjYXNl
IFR5cGVzLlJldHVyblN0YXRlbWVudDoKKyAqICAgY2FzZSBUeXBlcy5TZXF1ZW5jZUV4cHJlc3Np
b246CisgKiAgIGNhc2UgVHlwZXMuU3dpdGNoU3RhdGVtZW50OgorICogICBjYXNlIFR5cGVzLlN3
aXRjaENhc2U6CisgKiAgIGNhc2UgVHlwZXMuVGVybmFyeUV4cHJlc3Npb246CisgKiAgIGNhc2Ug
VHlwZXMuVGhpc0V4cHJlc3Npb246CisgKiAgIGNhc2UgVHlwZXMuVGhyb3dTdGF0ZW1lbnQ6Cisg
KiAgIGNhc2UgVHlwZXMuVHJ5U3RhdGVtZW50OgorICogICBjYXNlIFR5cGVzLlVuYXJ5RXhwcmVz
c2lvbjoKKyAqICAgY2FzZSBUeXBlcy5WYXJpYWJsZURlY2xhcmF0aW9uOgorICogICBjYXNlIFR5
cGVzLlZhcmlhYmxlRGVjbGFyYXRvcjoKKyAqICAgY2FzZSBUeXBlcy5XaGlsZVN0YXRlbWVudDoK
KyAqICAgY2FzZSBUeXBlcy5XaXRoU3RhdGVtZW50OgorICogICB9CisgKgorKi8K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236397</attachid>
            <date>2014-08-11 13:51:49 -0700</date>
            <delta_ts>2014-08-12 18:41:20 -0700</delta_ts>
            <desc>patch</desc>
            <filename>ast-patch.diff</filename>
            <type>text/plain</type>
            <size>35253</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9NYWluLmh0bWwJ
KHJldmlzaW9uIDE3MjQwMykKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L01haW4uaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMjYxLDYgKzI2Miw3IEBACiAgICAgPHNjcmlw
dCBzcmM9Ik1vZGVscy9TY3JpcHRUaW1lbGluZVJlY29yZC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNj
cmlwdCBzcmM9Ik1vZGVscy9TZXR0aW5nLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0i
TW9kZWxzL1NvdXJjZUNvZGVQb3NpdGlvbi5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9
Ik1vZGVscy9TY3JpcHRTeW50YXhUcmVlLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0i
TW9kZWxzL1NvdXJjZUNvZGVSZXZpc2lvbi5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9
Ik1vZGVscy9Tb3VyY2VDb2RlVGV4dFJhbmdlLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNy
Yz0iTW9kZWxzL1NvdXJjZUNvZGVUaW1lbGluZS5qcyI+PC9zY3JpcHQ+CkluZGV4OiBTb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvU2NyaXB0LmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9TY3JpcHQuanMJ
KHJldmlzaW9uIDE3MjQwMykKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L01vZGVscy9TY3JpcHQuanMJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDggQEAgV2ViSW5z
cGVjdG9yLlNjcmlwdCA9IGZ1bmN0aW9uKGlkLCByYW5nZQogCiAgICAgaWYgKHNvdXJjZU1hcFVS
TCkKICAgICAgICAgV2ViSW5zcGVjdG9yLnNvdXJjZU1hcE1hbmFnZXIuZG93bmxvYWRTb3VyY2VN
YXAoc291cmNlTWFwVVJMLCB0aGlzLl91cmwsIHRoaXMpOworCisgICAgdGhpcy5fc2NyaXB0U3lu
dGF4VHJlZSA9IG51bGw7CiB9OwogCiBXZWJJbnNwZWN0b3IuU2NyaXB0LlR5cGVJZGVudGlmaWVy
ID0gInNjcmlwdCI7CkBAIC0xMjcsNiArMTI5LDMwIEBAIFdlYkluc3BlY3Rvci5TY3JpcHQucHJv
dG90eXBlID0gewogICAgICAgICBjb29raWVbV2ViSW5zcGVjdG9yLlNjcmlwdC5EaXNwbGF5TmFt
ZUNvb2tpZUtleV0gPSB0aGlzLmRpc3BsYXlOYW1lOwogICAgIH0sCiAKKyAgICByZXF1ZXN0U2Ny
aXB0U3ludGF4VHJlZTogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIHNlbGYgPSB0aGlz
OworICAgICAgICB2YXIgcHJvbWlzZSA9IG51bGwKKyAgICAgICAgaWYgKHRoaXMuY29udGVudCkK
KyAgICAgICAgICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodGhpcy5jb250ZW50KTsKKyAg
ICAgICAgZWxzZSBpZiAodGhpcy5fcmVzb3VyY2UgJiYgdGhpcy5fcmVzb3VyY2UudHlwZSA9PT0g
V2ViSW5zcGVjdG9yLlJlc291cmNlLlR5cGUuU2NyaXB0ICYmIHRoaXMuX3Jlc291cmNlLmZpbmlz
aGVkICYmIHRoaXMuX3Jlc291cmNlLmNvbnRlbnQpCisgICAgICAgICAgICBwcm9taXNlID0gUHJv
bWlzZS5yZXNvbHZlKHRoaXMuX3Jlc291cmNlLmNvbnRlbnQpOworICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlKSB7CisgICAg
ICAgICAgICAgICAgc2VsZi5yZXF1ZXN0Q29udGVudChmdW5jdGlvbihlcnJvciwgc291cmNlVGV4
dCkgeworICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHNvdXJjZVRleHQpOworICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgICAgICBwcm9taXNl
ID0gcHJvbWlzZS50aGVuKGZ1bmN0aW9uKHNvdXJjZVRleHQpIHsgCisgICAgICAgICAgICBzZWxm
Ll9tYWtlU3ludGF4VHJlZShzb3VyY2VUZXh0KTsgCisgICAgICAgICAgICByZXR1cm4gc2VsZi5f
c2NyaXB0U3ludGF4VHJlZTsgCisgICAgICAgIH0pOworCisgICAgICAgIHJldHVybiBwcm9taXNl
OworICAgIH0sCisKICAgICAvLyBQcml2YXRlCiAKICAgICBfcmVzb2x2ZVJlc291cmNlOiBmdW5j
dGlvbigpCkBAIC0xNzQsNiArMjAwLDE4IEBAIFdlYkluc3BlY3Rvci5TY3JpcHQucHJvdG90eXBl
ID0gewogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfSwKKworICAgIF9t
YWtlU3ludGF4VHJlZTogZnVuY3Rpb24oc291cmNlVGV4dCkgeworICAgICAgICBpZiAoIXNvdXJj
ZVRleHQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAg
IHRoaXMuX3NjcmlwdFN5bnRheFRyZWUgPSBuZXcgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRy
ZWUoc291cmNlVGV4dCwgdGhpcyk7CisgICAgICAgIH0gY2F0Y2goZXJyb3IpIHsKKyAgICAgICAg
ICAgIGNvbnNvbGUuZXJyb3IoIkNvdWxkbid0IHBhcnNlIEphdmFTY3JpcHQgRmlsZTogIiArIHRo
aXMuX3VybCwgZXJyb3IpOworICAgICAgICAgICAgdGhpcy5fc2NyaXB0U3ludGF4VHJlZSA9IG51
bGw7CisgICAgICAgIH0KICAgICB9CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9Nb2RlbHMvU2NyaXB0U3ludGF4VHJlZS5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvU2NyaXB0U3ludGF4VHJl
ZS5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L01vZGVscy9TY3JpcHRTeW50YXhUcmVlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzYx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUgPSBmdW5jdGlv
bihzb3VyY2VUZXh0LCBzY3JpcHQpCit7CisgICAgY29uc29sZS5hc3NlcnQoc2NyaXB0ICYmIHNj
cmlwdCBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5TY3JpcHQsIHNjcmlwdCk7CisgICAgV2ViSW5z
cGVjdG9yLk9iamVjdC5jYWxsKHRoaXMpOworICAgIHRoaXMuX3NjcmlwdCA9IHNjcmlwdDsKKwor
ICAgIHZhciBlc3ByaW1hU3ludGF4VHJlZSA9IFdlYkluc3BlY3Rvci5fZXNwcmltYS5wYXJzZShz
b3VyY2VUZXh0LCB7cmFuZ2U6IHRydWV9KTsKKyAgICB0aGlzLl9zeW50YXhUcmVlID0gdGhpcy5f
Y3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKGVzcHJpbWFTeW50YXhUcmVlKTsKK307CisKKy8vIFRo
aXMgc2hvdWxkIGJlIGtlcHQgaW4gc3luYyB3aXRoIGFuIGVudW0gaW4gSmF2YVNjaXB0Q29yZS9y
dW50aW1lL0hpZ2hGaWRlbGl0eVR5cGVQcm9maWxlci5oCitXZWJJbnNwZWN0b3IuU2NyaXB0U3lu
dGF4VHJlZS5UeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yID0geworICAgIE5vcm1hbEV4cHJl
c3Npb246IDEsCisgICAgRnVuY3Rpb25SZXR1cm46IDIKK307CisKK1dlYkluc3BlY3Rvci5TY3Jp
cHRTeW50YXhUcmVlLk5vZGVUeXBlID0geworICAgIEFzc2lnbm1lbnRFeHByZXNzaW9uOiAnQXNz
aWdubWVudEV4cHJlc3Npb24nLAorICAgIEFycmF5RXhwcmVzc2lvbjogJ0FycmF5RXhwcmVzc2lv
bicsCisgICAgQmxvY2tTdGF0ZW1lbnQ6ICdCbG9ja1N0YXRlbWVudCcsCisgICAgQmluYXJ5RXhw
cmVzc2lvbjogJ0JpbmFyeUV4cHJlc3Npb24nLAorICAgIEJyZWFrU3RhdGVtZW50OiAnQnJlYWtT
dGF0ZW1lbnQnLAorICAgIENhdGNoQ2xhdXNlOiAnQ2F0Y2hDbGF1c2UnLAorICAgIENvbnRpbnVl
U3RhdGVtZW50OiAnQ29udGludWVTdGF0ZW1lbnQnLAorICAgIERvV2hpbGVTdGF0ZW1lbnQ6ICdE
b1doaWxlU3RhdGVtZW50JywKKyAgICBEZWJ1Z2dlclN0YXRlbWVudDogJ0RlYnVnZ2VyU3RhdGVt
ZW50JywKKyAgICBFbXB0eVN0YXRlbWVudDogJ0VtcHR5U3RhdGVtZW50JywKKyAgICBFeHByZXNz
aW9uU3RhdGVtZW50OiAnRXhwcmVzc2lvblN0YXRlbWVudCcsCisgICAgRm9yU3RhdGVtZW50OiAn
Rm9yU3RhdGVtZW50JywKKyAgICBGb3JJblN0YXRlbWVudDogJ0ZvckluU3RhdGVtZW50JywKKyAg
ICBGdW5jdGlvbkNhbGxFeHByZXNzaW9uOiAnRnVuY3Rpb25DYWxsRXhwcmVzc2lvbicsCisgICAg
RnVuY3Rpb25EZWNsYXJhdGlvbjogJ0Z1bmN0aW9uRGVjbGFyYXRpb24nLAorICAgIEZ1bmN0aW9u
RXhwcmVzc2lvbjogJ0Z1bmN0aW9uRXhwcmVzc2lvbicsCisgICAgSWRlbnRpZmllcjogJ0lkZW50
aWZpZXInLAorICAgIElmU3RhdGVtZW50OiAnSWZTdGF0ZW1lbnQnLAorICAgIExpdGVyYWw6ICdM
aXRlcmFsJywKKyAgICBMYWJlbGVkU3RhdGVtZW50OiAnTGFiZWxlZFN0YXRlbWVudCcsCisgICAg
TG9naWNhbEV4cHJlc3Npb246ICdMb2dpY2FsRXhwcmVzc2lvbicsCisgICAgTWVtYmVyRXhwcmVz
c2lvbjogJ01lbWJlckV4cHJlc3Npb24nLAorICAgIE5ld0V4cHJlc3Npb246ICdOZXdFeHByZXNz
aW9uJywKKyAgICBPYmplY3RFeHByZXNzaW9uOiAnT2JqZWN0RXhwcmVzc2lvbicsCisgICAgUG9z
dGZpeEV4cHJlc3Npb246J1Bvc3RmaXhFeHByZXNzaW9uJywKKyAgICBQcm9ncmFtOiAnUHJvZ3Jh
bScsCisgICAgUHJvcGVydHk6ICdQcm9wZXJ0eScsCisgICAgUHJlZml4RXhwcmVzc2lvbjonUHJl
Zml4RXhwcmVzc2lvbicsCisgICAgUmV0dXJuU3RhdGVtZW50OiAnUmV0dXJuU3RhdGVtZW50JywK
KyAgICBTZXF1ZW5jZUV4cHJlc3Npb246ICdTZXF1ZW5jZUV4cHJlc3Npb24nLAorICAgIFN3aXRj
aFN0YXRlbWVudDogJ1N3aXRjaFN0YXRlbWVudCcsCisgICAgU3dpdGNoQ2FzZTogJ1N3aXRjaENh
c2UnLAorICAgIFRlcm5hcnlFeHByZXNzaW9uOiAnVGVybmFyeUV4cHJlc3Npb24nLAorICAgIFRo
aXNFeHByZXNzaW9uOiAnVGhpc0V4cHJlc3Npb24nLAorICAgIFRocm93U3RhdGVtZW50OiAnVGhy
b3dTdGF0ZW1lbnQnLAorICAgIFRyeVN0YXRlbWVudDogJ1RyeVN0YXRlbWVudCcsCisgICAgVW5h
cnlFeHByZXNzaW9uOiAnVW5hcnlFeHByZXNzaW9uJywKKyAgICBWYXJpYWJsZURlY2xhcmF0aW9u
OiAnVmFyaWFibGVEZWNsYXJhdGlvbicsCisgICAgVmFyaWFibGVEZWNsYXJhdG9yOiAnVmFyaWFi
bGVEZWNsYXJhdG9yJywKKyAgICBXaGlsZVN0YXRlbWVudDogJ1doaWxlU3RhdGVtZW50JywKKyAg
ICBXaXRoU3RhdGVtZW50OiAnV2l0aFN0YXRlbWVudCcKK307CisKK1dlYkluc3BlY3Rvci5TY3Jp
cHRTeW50YXhUcmVlLnByb3RvdHlwZSA9IHsKKyAgICBjb25zdHJ1Y3RvcjogV2ViSW5zcGVjdG9y
LlNjcmlwdFN5bnRheFRyZWUsCisgICAgX19wcm90b19fOiBXZWJJbnNwZWN0b3IuT2JqZWN0LnBy
b3RvdHlwZSwKKworICAgIC8vIFB1YmxpYworCisgICAgZm9yRWFjaE5vZGU6IGZ1bmN0aW9uKGZ1
bmMpCisgICAgeworICAgICAgICB0aGlzLl9yZWN1cnNlKHRoaXMuX3N5bnRheFRyZWUsIGZ1bmMs
IHRoaXMuX2RlZmF1bHRQYXJzZXJTdGF0ZSgpKTsKKyAgICB9LAorCisgICAgZmlsdGVyOiBmdW5j
dGlvbihwcmVkaWNhdGVGdW5jdGlvbiwgc3RhcnROb2RlKSAKKyAgICB7CisgICAgICAgIGNvbnNv
bGUuYXNzZXJ0KHN0YXJ0Tm9kZSk7CisKKyAgICAgICAgdmFyIG5vZGVzID0gW107CisgICAgICAg
IGZ1bmN0aW9uIGZpbHRlcihub2RlLCBzdGF0ZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KHByZWRpY2F0ZUZ1bmN0aW9uKG5vZGUpKQorICAgICAgICAgICAgICAgIG5vZGVzLnB1c2gobm9k
ZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc3RhdGUuc2tpcENoaWxkTm9k
ZXMgPSB0cnVlOyAKKyAgICAgICAgfQorICAgICAgICB0aGlzLl9yZWN1cnNlKHN0YXJ0Tm9kZSwg
ZmlsdGVyLCB0aGlzLl9kZWZhdWx0UGFyc2VyU3RhdGUoKSk7CisKKyAgICAgICAgcmV0dXJuIG5v
ZGVzOworICAgIH0sCisKKyAgICBmaWx0ZXJCeVJhbmdlOiBmdW5jdGlvbihzdGFydE9mZnNldCwg
ZW5kT2Zmc2V0KQorICAgIHsKKyAgICAgICAgdmFyIGFsbE5vZGVzID0gW107CisgICAgICAgIHZh
ciBzdGFydCA9IDA7CisgICAgICAgIHZhciBlbmQgPSAxOworICAgICAgICBmdW5jdGlvbiBmaWx0
ZXJGb3JOb2Rlc0luUmFuZ2Uobm9kZSwgc3RhdGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8v
IHByb2dfc3RhcnQgICAgcmFuZ2UgICAgIHByb2dyYW0gZW5kCisgICAgICAgICAgICAvLyBbICAg
ICAgICAgICAgIFsgICBdICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgLy8gICAgICAgICAg
WyBdIFsgW10gIF0gIFsgXQorCisgICAgICAgICAgICAvLyBJZiBhIG5vZGUncyByYW5nZSBlbmRz
IGJlZm9yZSB0aGUgcmFuZ2Ugd2UncmUgaW50ZXJlc3RlZCBpbiBzdGFydHMsIHdlIGRvbid0IG5l
ZWQgdG8gc2VhcmNoIGFueSBvZiBpdHMKKyAgICAgICAgICAgIC8vIGVuY2xvc2luZyByYW5nZXMs
IGJlY2F1c2UsIGJ5IGRlZmluaXRpb24sIHRob3NlIGVuY2xvc2luZyByYW5nZXMgYXJlIGNvbnRh
aW5lZCB3aXRoaW4gdGhpcyBub2RlJ3Mgb3V0ZXIgcmFuZ2UuCisgICAgICAgICAgICBpZiAobm9k
ZS5yYW5nZVtlbmRdIDwgc3RhcnRPZmZzZXQpCisgICAgICAgICAgICAgICAgc3RhdGUuc2tpcENo
aWxkTm9kZXMgPSB0cnVlOworCisgICAgICAgICAgICAvLyBXZSBhcmUgb25seSBpbnN0ZXJlc3Rl
ZCBpbiBub2RlcyB3aG9zZSBzdGFydCBwb3MgaXMgd2l0aGluIG91ciByYW5nZS4KKyAgICAgICAg
ICAgIGlmIChzdGFydE9mZnNldCA8PSBub2RlLnJhbmdlW3N0YXJ0XSAmJiBub2RlLnJhbmdlW3N0
YXJ0XSA8PSBlbmRPZmZzZXQpCisgICAgICAgICAgICAgICAgYWxsTm9kZXMucHVzaChub2RlKTsK
KworICAgICAgICAgICAgLy8gT25jZSB3ZSBzZWUgbm9kZXMgdGhhdCBzdGFydCBiZXlvbmQgb3Vy
IHJhbmdlLCB3ZSBjYW4gcXVpdCB0cmF2ZXJzaW5nIHRoZSBBU1QuIFdlIGNhbiBkbyB0aGlzIHNh
ZmVseQorICAgICAgICAgICAgLy8gYmVjYXVzZSB3ZSBrbm93IHRoZSBBU1QgaXMgdHJhdmVyc2Vk
IHVzaW5nIGRlcHRoIGZpcnN0IHNlYXJjaCwgc28gaXQgd2lsbCB0cmF2ZXJzZSBpbnRvIGVuY2xv
c2luZyByYW5nZXMKKyAgICAgICAgICAgIC8vIGJlZm9yZSBpdCB0cmF2ZXJzZXMgaW50byBhZGph
Y2VudCByYW5nZXMuCisgICAgICAgICAgICBpZiAobm9kZS5yYW5nZVtzdGFydF0gPiBlbmRPZmZz
ZXQpCisgICAgICAgICAgICAgICAgc3RhdGUuc2hvdWxkU3RvcEVhcmx5ID0gdHJ1ZTsKKyAgICAg
ICAgfQorCisgICAgICAgIHRoaXMuZm9yRWFjaE5vZGUoZmlsdGVyRm9yTm9kZXNJblJhbmdlKTsK
KworICAgICAgICByZXR1cm4gYWxsTm9kZXM7CisgICAgfSwKKworICAgIGNvbnRhaW5zTm9uRW1w
dHlSZXR1cm5TdGF0ZW1lbnQ6IGZ1bmN0aW9uKHN0YXJ0Tm9kZSkKKyAgICB7CisgICAgICAgIGlm
IChzdGFydE5vZGUuX2F0dGFjaG1lbnRzLl9oYXNOb25FbXB0eVJldHVyblN0YXRlbWVudCAhPT0g
dW5kZWZpbmVkKQorICAgICAgICAgICAgcmV0dXJuIHN0YXJ0Tm9kZS5fYXR0YWNobWVudHMuX2hh
c05vbkVtcHR5UmV0dXJuU3RhdGVtZW50OworCisgICAgICAgIGZ1bmN0aW9uIHJlbW92ZUZ1bmN0
aW9uc0ZpbHRlcihub2RlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbm9kZS50eXBl
ICE9PSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5GdW5jdGlvbkV4cHJl
c3Npb24gCisgICAgICAgICAgICAgICAgJiYgbm9kZS50eXBlICE9PSBXZWJJbnNwZWN0b3IuU2Ny
aXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5GdW5jdGlvbkRlY2xhcmF0aW9uOworICAgICAgICB9CisK
KyAgICAgICAgdmFyIG5vZGVzID0gdGhpcy5maWx0ZXIocmVtb3ZlRnVuY3Rpb25zRmlsdGVyLCBz
dGFydE5vZGUpOworICAgICAgICB2YXIgaGFzUmV0dXJuU3RhdGVtZW50ID0gZmFsc2U7CisgICAg
ICAgIHZhciByZXR1cm5TdGF0ZW1lbnRUeXBlID0gV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRy
ZWUuTm9kZVR5cGUuUmV0dXJuU3RhdGVtZW50OworICAgICAgICBmb3IgKHZhciBub2RlIG9mIG5v
ZGVzKSB7CisgICAgICAgICAgICBpZiAobm9kZS50eXBlID09PSByZXR1cm5TdGF0ZW1lbnRUeXBl
ICYmIG5vZGUuYXJndW1lbnQpIHsKKyAgICAgICAgICAgICAgICBoYXNSZXR1cm5TdGF0ZW1lbnQg
PSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgICAKKyAgICAgICAgc3RhcnROb2RlLl9hdHRhY2htZW50cy5faGFzTm9uRW1wdHlS
ZXR1cm5TdGF0ZW1lbnQgPSBoYXNSZXR1cm5TdGF0ZW1lbnQ7CisKKyAgICAgICAgcmV0dXJuIGhh
c1JldHVyblN0YXRlbWVudDsKKyAgICB9LAorCisgICAgdXBkYXRlVHlwZXM6IGZ1bmN0aW9uKHNv
dXJjZUlELCBub2Rlc1RvVXBkYXRlLCBjYWxsYmFjaykgCisgICAgeworICAgICAgICBjb25zb2xl
LmFzc2VydChBcnJheS5pc0FycmF5KG5vZGVzVG9VcGRhdGUpKTsKKworICAgICAgICB2YXIgYWxs
UmVxdWVzdHMgPSBbXTsKKyAgICAgICAgdmFyIGFsbFJlcXVlc3ROb2RlcyA9IFtdOworCisgICAg
ICAgIGZ1bmN0aW9uIGdhdGhlclR5cGVJbmZvcm1hdGlvblJlcXVlc3RGb3JOb2RlKG5vZGUpIAor
ICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUudHlwZSkgeworICAgICAgICAgICAg
Y2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5GdW5jdGlvbkRlY2xh
cmF0aW9uOgorICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5O
b2RlVHlwZS5GdW5jdGlvbkV4cHJlc3Npb246CisgICAgICAgICAgICAgICAgbm9kZS5wYXJhbXMu
Zm9yRWFjaChmdW5jdGlvbiAocGFyYW0pIHsKKyAgICAgICAgICAgICAgICAgICAgYWxsUmVxdWVz
dHMucHVzaCh7CisgICAgICAgICAgICAgICAgICAgICAgICB0eXBlSW5mb3JtYXRpb25EZXNjcmlw
dG9yOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5UeXBlUHJvZmlsZXJTZWFyY2hEZXNj
cmlwdG9yLk5vcm1hbEV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VJ
RDogc291cmNlSUQsCisgICAgICAgICAgICAgICAgICAgICAgICBkaXZvdDogcGFyYW0ucmFuZ2Vb
MF0KKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIGFsbFJlcXVl
c3ROb2Rlcy5wdXNoKHBhcmFtKTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAg
ICAgIGFsbFJlcXVlc3RzLnB1c2goeworICAgICAgICAgICAgICAgICAgICB0eXBlSW5mb3JtYXRp
b25EZXNjcmlwdG9yOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5UeXBlUHJvZmlsZXJT
ZWFyY2hEZXNjcmlwdG9yLkZ1bmN0aW9uUmV0dXJuLAorICAgICAgICAgICAgICAgICAgICBzb3Vy
Y2VJRDogc291cmNlSUQsCisgICAgICAgICAgICAgICAgICAgIGRpdm90OiBub2RlLmJvZHkucmFu
Z2VbMF0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBhbGxSZXF1ZXN0Tm9k
ZXMucHVzaChub2RlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
V2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuVmFyaWFibGVEZWNsYXJhdG9y
OgorICAgICAgICAgICAgICAgIGFsbFJlcXVlc3RzLnB1c2goeworICAgICAgICAgICAgICAgICAg
ICB0eXBlSW5mb3JtYXRpb25EZXNjcmlwdG9yOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJl
ZS5UeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yLk5vcm1hbEV4cHJlc3Npb24sCisgICAgICAg
ICAgICAgICAgICAgIHNvdXJjZUlEOiBzb3VyY2VJRCwKKyAgICAgICAgICAgICAgICAgICAgZGl2
b3Q6IG5vZGUuaWQucmFuZ2VbMF0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAg
ICBhbGxSZXF1ZXN0Tm9kZXMucHVzaChub2RlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG5vZGVzVG9VcGRhdGUuZm9yRWFjaChn
YXRoZXJUeXBlSW5mb3JtYXRpb25SZXF1ZXN0Rm9yTm9kZSk7CisKKyAgICAgICAgZnVuY3Rpb24g
aGFuZGxlVHlwZXMoZXJyb3IsIHR5cGVJbmZvcm1hdGlvbkFycmF5KQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAoZXJyb3IpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAg
ICBjb25zb2xlLmFzc2VydCh0eXBlSW5mb3JtYXRpb25BcnJheS5sZW5ndGggPT09IGFsbFJlcXVl
c3RzLmxlbmd0aCk7CisKKyAgICAgICAgICAgIHZhciBpOworICAgICAgICAgICAgdmFyIG5vZGU7
CisgICAgICAgICAgICB2YXIgdHlwZUluZm9ybWF0aW9uOworICAgICAgICAgICAgZm9yIChpID0g
MDsgaSA8IHR5cGVJbmZvcm1hdGlvbkFycmF5Lmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAg
ICAgbm9kZSA9IGFsbFJlcXVlc3ROb2Rlc1tpXTsKKyAgICAgICAgICAgICAgICB0eXBlSW5mb3Jt
YXRpb24gPSB0eXBlSW5mb3JtYXRpb25BcnJheVtpXTsKKyAgICAgICAgICAgICAgICBpZiAoYWxs
UmVxdWVzdHNbaV0udHlwZUluZm9ybWF0aW9uRGVzY3JpcHRvciA9PT0gV2ViSW5zcGVjdG9yLlNj
cmlwdFN5bnRheFRyZWUuVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvci5GdW5jdGlvblJldHVy
bikKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5fYXR0YWNobWVudHMuX3JldHVyblR5cGVzID0g
dHlwZUluZm9ybWF0aW9uOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgbm9kZS5fYXR0YWNobWVudHMuX3R5cGVzID0gdHlwZUluZm9ybWF0aW9uOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBjYWxsYmFjaygpOworICAgICAgICB9CisKKyAgICAgICAgUnVu
dGltZUFnZW50LmdldFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0cyhhbGxSZXF1ZXN0
cywgaGFuZGxlVHlwZXMpOworICAgIH0sCisKKyAgICAvLyBQcml2YXRlCisKKyAgICBfZGVmYXVs
dFBhcnNlclN0YXRlOiBmdW5jdGlvbigpIAorICAgIHsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAg
ICAgICAgIHNob3VsZFN0b3BFYXJseTogZmFsc2UsCisgICAgICAgICAgICBza2lwQ2hpbGROb2Rl
czogZmFsc2UKKyAgICAgICAgfTsKKyAgICB9LAorCisgICAgX3JlY3Vyc2U6IGZ1bmN0aW9uKG5v
ZGUsIGZ1bmMsIHN0YXRlKSAKKyAgICB7CisgICAgICAgIGlmICghbm9kZSkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBpZiAoc3RhdGUuc2hvdWxkU3RvcEVhcmx5IHx8IHN0YXRlLnNr
aXBDaGlsZE5vZGVzKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHN3aXRjaCAobm9k
ZS50eXBlKSB7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9k
ZVR5cGUuQXNzaWdubWVudEV4cHJlc3Npb246CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRl
KTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5sZWZ0LCBmdW5jLCBzdGF0ZSk7Cisg
ICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUucmlnaHQsIGZ1bmMsIHN0YXRlKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVl
Lk5vZGVUeXBlLkFycmF5RXhwcmVzc2lvbjoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUp
OworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZUFycmF5KG5vZGUuZWxlbWVudHMsIGZ1bmMsIHN0
YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3Jp
cHRTeW50YXhUcmVlLk5vZGVUeXBlLkJsb2NrU3RhdGVtZW50OgorICAgICAgICAgICAgZnVuYyhu
b2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlQXJyYXkobm9kZS5ib2R5LCBm
dW5jLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0
b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5CaW5hcnlFeHByZXNzaW9uOgorICAgICAgICAg
ICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUubGVm
dCwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLnJpZ2h0LCBm
dW5jLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0
b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5CcmVha1N0YXRlbWVudDoKKyAgICAgICAgICAg
IGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2Vi
SW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuQ2F0Y2hDbGF1c2U6CisgICAgICAg
ICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5w
YXJhbSwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmJvZHks
IGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkluc3Bl
Y3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkNvbnRpbnVlU3RhdGVtZW50OgorICAgICAg
ICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUu
bGFiZWwsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdl
Ykluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkRvV2hpbGVTdGF0ZW1lbnQ6Cisg
ICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uo
bm9kZS5ib2R5LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUu
cHJlZGljYXRlLCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5EZWJ1Z2dlclN0YXRlbWVu
dDoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuRW1wdHlT
dGF0ZW1lbnQ6CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBl
LkV4cHJlc3Npb25TdGF0ZW1lbnQ6CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAg
ICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5leHByZXNzaW9uLCBmdW5jLCBzdGF0ZSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4
VHJlZS5Ob2RlVHlwZS5Gb3JTdGF0ZW1lbnQ6CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRl
KTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5pbml0LCBmdW5jLCBzdGF0ZSk7Cisg
ICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUucHJlZGljYXRlLCBmdW5jLCBzdGF0ZSk7Cisg
ICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUudXBkYXRlLCBmdW5jLCBzdGF0ZSk7CisgICAg
ICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuYm9keSwgZnVuYywgc3RhdGUpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9k
ZVR5cGUuRm9ySW5TdGF0ZW1lbnQ6CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAg
ICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5sZWZ0LCBmdW5jLCBzdGF0ZSk7CisgICAgICAg
ICAgICB0aGlzLl9yZWN1cnNlKG5vZGUucmlnaHQsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAg
IHRoaXMuX3JlY3Vyc2Uobm9kZS5ib2R5LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5G
dW5jdGlvbkNhbGxFeHByZXNzaW9uOgorICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7Cisg
ICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuY2FsbGVlLCBmdW5jLCBzdGF0ZSk7CisgICAg
ICAgICAgICB0aGlzLl9yZWN1cnNlQXJyYXkobm9kZS5hcmd1bWVudHMsIGZ1bmMsIHN0YXRlKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50
YXhUcmVlLk5vZGVUeXBlLkZ1bmN0aW9uRGVjbGFyYXRpb246CisgICAgICAgICAgICBmdW5jKG5v
ZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5pZCwgZnVuYywgc3Rh
dGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZUFycmF5KG5vZGUucGFyYW1zLCBmdW5jLCBz
dGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuYm9keSwgZnVuYywgc3RhdGUp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5
bnRheFRyZWUuTm9kZVR5cGUuRnVuY3Rpb25FeHByZXNzaW9uOgorICAgICAgICAgICAgZnVuYyhu
b2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuaWQsIGZ1bmMsIHN0
YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2VBcnJheShub2RlLnBhcmFtcywgZnVuYywg
c3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmJvZHksIGZ1bmMsIHN0YXRl
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRT
eW50YXhUcmVlLk5vZGVUeXBlLklkZW50aWZpZXI6CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0
YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3Jp
cHRTeW50YXhUcmVlLk5vZGVUeXBlLklmU3RhdGVtZW50OgorICAgICAgICAgICAgZnVuYyhub2Rl
LCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUucHJlZGljYXRlLCBmdW5j
LCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuY29uc2VxdWVudCwgZnVu
Yywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmFsdGVybmF0ZSwgZnVu
Yywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9y
LlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuTGl0ZXJhbDoKKyAgICAgICAgICAgIGZ1bmMobm9k
ZSwgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9y
LlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuTGFiZWxlZFN0YXRlbWVudDoKKyAgICAgICAgICAg
IGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmxhYmVs
LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuYm9keSwgZnVu
Yywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9y
LlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuTG9naWNhbEV4cHJlc3Npb246CisgICAgICAgICAg
ICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5sZWZ0
LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUucmlnaHQsIGZ1
bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rv
ci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLk1lbWJlckV4cHJlc3Npb246CisgICAgICAgICAg
ICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5vYmpl
Y3QsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5wcm9wZXJ0
eSwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5z
cGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuTmV3RXhwcmVzc2lvbjoKKyAgICAgICAg
ICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmNh
bGxlZSwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZUFycmF5KG5vZGUu
YXJndW1lbnRzLCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5PYmplY3RFeHByZXNzaW9u
OgorICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1
cnNlQXJyYXkobm9kZS5wcm9wZXJ0aWVzLCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5Q
cmVmaXhFeHByZXNzaW9uOgorICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAg
ICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuYXJndW1lbnQsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5v
ZGVUeXBlLlByb2dyYW06CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAg
ICAgIHRoaXMuX3JlY3Vyc2VBcnJheShub2RlLmJvZHksIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5v
ZGVUeXBlLlByb3BlcnR5OgorICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAg
ICAgICB0aGlzLl9yZWN1cnNlKG5vZGUua2V5LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICB0
aGlzLl9yZWN1cnNlKG5vZGUudmFsdWUsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlBv
c3RmaXhFeHByZXNzaW9uOgorICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAg
ICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuYXJndW1lbnQsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5v
ZGVUeXBlLlJldHVyblN0YXRlbWVudDoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOwor
ICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmFyZ3VtZW50LCBmdW5jLCBzdGF0ZSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4
VHJlZS5Ob2RlVHlwZS5TZXF1ZW5jZUV4cHJlc3Npb246CisgICAgICAgICAgICBmdW5jKG5vZGUs
IHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2VBcnJheShub2RlLmV4cHJlc3Npb25z
LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNw
ZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5Td2l0Y2hTdGF0ZW1lbnQ6CisgICAgICAg
ICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5k
aXNjcmltaW5hbnQsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2VBcnJh
eShub2RlLmNhc2VzLCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5Td2l0Y2hDYXNlOgor
ICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNl
KG5vZGUucHJlZGljYXRlLCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNl
QXJyYXkobm9kZS5jb25zZXF1ZW50LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5UZXJu
YXJ5RXhwcmVzc2lvbjoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAg
ICAgdGhpcy5fcmVjdXJzZShub2RlLnByZWRpY2F0ZSwgZnVuYywgc3RhdGUpOworICAgICAgICAg
ICAgdGhpcy5fcmVjdXJzZShub2RlLmNvbnNlcXVlbnQsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAg
ICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5hbHRlcm5hdGUsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5v
ZGVUeXBlLlRoaXNFeHByZXNzaW9uOgorICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4
VHJlZS5Ob2RlVHlwZS5UaHJvd1N0YXRlbWVudDoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3Rh
dGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmFyZ3VtZW50LCBmdW5jLCBzdGF0
ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0
U3ludGF4VHJlZS5Ob2RlVHlwZS5UcnlTdGF0ZW1lbnQ6CisgICAgICAgICAgICBmdW5jKG5vZGUs
IHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5ibG9jaywgZnVuYywgc3Rh
dGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZUFycmF5KG5vZGUuZ3VhcmRlZEhhbmRsZXJz
LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlQXJyYXkobm9kZS5oYW5k
bGVycywgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmZpbmFs
aXplciwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2Vi
SW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuVW5hcnlFeHByZXNzaW9uOgorICAg
ICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5v
ZGUuYXJndW1lbnQsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlZhcmlhYmxlRGVjbGFy
YXRpb246CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMu
X3JlY3Vyc2VBcnJheShub2RlLmRlY2xhcmF0aW9ucywgZnVuYywgc3RhdGUpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9k
ZVR5cGUuVmFyaWFibGVEZWNsYXJhdG9yOgorICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7
CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuaWQsIGZ1bmMsIHN0YXRlKTsKKyAgICAg
ICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5pbml0LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2Rl
VHlwZS5XaGlsZVN0YXRlbWVudDoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAg
ICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLnByZWRpY2F0ZSwgZnVuYywgc3RhdGUpOworICAg
ICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmJvZHksIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5v
ZGVUeXBlLldpdGhTdGF0ZW1lbnQ6CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAg
ICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5vYmplY3QsIGZ1bmMsIHN0YXRlKTsKKyAgICAg
ICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5ib2R5LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRlLnNraXBDaGlsZE5vZGVzID0gZmFs
c2U7CisgICAgfSwKKworICAgIF9yZWN1cnNlQXJyYXkgOiBmdW5jdGlvbihhcnJheSwgZnVuYywg
c3RhdGUpIAorICAgIHsKKyAgICAgICAgZnVuY3Rpb24gZm9yRWFjaChub2RlKSB7CisgICAgICAg
ICAgICB0aGlzLl9yZWN1cnNlKG5vZGUsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGFycmF5LmZvckVhY2goZm9yRWFjaC5iaW5kKHRoaXMpKTsKKyAgICB9LAorICAgIAorICAg
IC8vIFRoaXMgZnVuY3Rpb24gdHJhbnNsYXRlcyBmcm9tIGVzcHJpbWEncyBBYnN0cmFjdCBTeW50
YXggVHJlZSB0byBvdXJzLiBNb3N0bHksIHRoaXMgaXMganVzdCB0aGUgCisgICAgLy8gaWRlbnRp
dHkgZnVuY3Rpb24sIGJ1dCB0aGVyZSBhcmUgYSBmZXcgbm9kZXMgYW5kIGEgZmV3IHByb3BlcnRp
ZXMgdGhhdCBhcmUgcmVuYW1lZC4gU3BlY2lmaWNhbGx5LAorICAgIC8vICd0ZXN0JyBwcm9wZXJ0
eSBpcyByZW5hbWVkIHRvICdwcmVkaWNhdGUnLCBwcmVmaXgvcG9zdGZpeCBub2RlcyBhcmUgbm93
IHRvIHNlcGFyYXRlIG5vZGVzLCAKKyAgICAvLyBDYWxsRXhwcmVzc2lvbiBpcyByZW5hbWVkIHRv
IEZ1bmN0aW9uQ2FsbEV4cHJlc3Npb24sIGFuZCBDb25kaXRpb25hbEV4cHJlc3Npb24gaXMgcmVu
YW1lZCB0byBUZXJuYXJ5RXhwcmVzc2lvbi4KKyAgICBfY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVl
IDogZnVuY3Rpb24obm9kZSkgCisgICAgeworICAgICAgICBpZiAoIW5vZGUpCisgICAgICAgICAg
ICByZXR1cm4gbnVsbDsKKworICAgICAgICB2YXIgcmVzdWx0ID0gbnVsbDsKKyAgICAgICAgc3dp
dGNoIChub2RlLnR5cGUpIHsKKyAgICAgICAgY2FzZSAnQXNzaWdubWVudEV4cHJlc3Npb24nOgor
ICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rv
ci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkFzc2lnbm1lbnRFeHByZXNzaW9uLAorICAgICAg
ICAgICAgICAgIG9wZXJhdG9yOiBub2RlLm9wZXJhdG9yLAorICAgICAgICAgICAgICAgIGxlZnQ6
IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmxlZnQpLAorICAgICAgICAgICAg
ICAgIHJpZ2h0OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5yaWdodCkKKyAg
ICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnQXJyYXlFeHBy
ZXNzaW9uJzoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBX
ZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5BcnJheUV4cHJlc3Npb24sCisg
ICAgICAgICAgICAgICAgZWxlbWVudHM6IG5vZGUuZWxlbWVudHMubWFwKHRoaXMuX2NyZWF0ZUlu
dGVybmFsU3ludGF4VHJlZS5iaW5kKHRoaXMpKQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlICdCbG9ja1N0YXRlbWVudCc6CisgICAgICAgICAgICByZXN1
bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRy
ZWUuTm9kZVR5cGUuQmxvY2tTdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgYm9keTogbm9kZS5i
b2R5Lm1hcCh0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUuYmluZCh0aGlzKSkKKyAgICAg
ICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnQmluYXJ5RXhwcmVz
c2lvbic6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2Vi
SW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuQmluYXJ5RXhwcmVzc2lvbiwKKyAg
ICAgICAgICAgICAgICBvcGVyYXRvcjogbm9kZS5vcGVyYXRvciwKKyAgICAgICAgICAgICAgICBs
ZWZ0OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5sZWZ0KSwKKyAgICAgICAg
ICAgICAgICByaWdodDogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUucmlnaHQp
CisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ0JyZWFr
U3RhdGVtZW50JzoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0eXBl
OiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5CcmVha1N0YXRlbWVudCwK
KyAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5v
ZGUubGFiZWwpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgJ0NhbGxFeHByZXNzaW9uJzoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAg
ICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5GdW5jdGlv
bkNhbGxFeHByZXNzaW9uLAorICAgICAgICAgICAgICAgIGNhbGxlZTogdGhpcy5fY3JlYXRlSW50
ZXJuYWxTeW50YXhUcmVlKG5vZGUuY2FsbGVlKSwKKyAgICAgICAgICAgICAgICBhcmd1bWVudHM6
IG5vZGUuYXJndW1lbnRzLm1hcCh0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUuYmluZCh0
aGlzKSkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAn
Q2F0Y2hDbGF1c2UnOgorICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5
cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkNhdGNoQ2xhdXNlLAor
ICAgICAgICAgICAgICAgIHBhcmFtOiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9k
ZS5wYXJhbSksCisgICAgICAgICAgICAgICAgYm9keTogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50
YXhUcmVlKG5vZGUuYm9keSkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSAnQ29uZGl0aW9uYWxFeHByZXNzaW9uJzoKKyAgICAgICAgICAgIHJlc3VsdCA9
IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5O
b2RlVHlwZS5UZXJuYXJ5RXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICBwcmVkaWNhdGU6IHRo
aXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLnRlc3QpLAorICAgICAgICAgICAgICAg
IGNvbnNlcXVlbnQ6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmNvbnNlcXVl
bnQpLAorICAgICAgICAgICAgICAgIGFsdGVybmF0ZTogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50
YXhUcmVlKG5vZGUuYWx0ZXJuYXRlKQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlICdDb250aW51ZVN0YXRlbWVudCc6CisgICAgICAgICAgICByZXN1bHQg
PSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUu
Tm9kZVR5cGUuQ29udGludWVTdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMu
X2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmxhYmVsKQorICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdEb1doaWxlU3RhdGVtZW50JzoKKyAgICAg
ICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2Ny
aXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5Eb1doaWxlU3RhdGVtZW50LAorICAgICAgICAgICAgICAg
IGJvZHk6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmJvZHkpLAorICAgICAg
ICAgICAgICAgIHByZWRpY2F0ZTogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUu
dGVzdCkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAn
RGVidWdnZXJTdGF0ZW1lbnQnOgorICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAg
ICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkRlYnVnZ2Vy
U3RhdGVtZW50CisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgJ0VtcHR5U3RhdGVtZW50JzoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAg
ICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5FbXB0eVN0
YXRlbWVudAorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
ICdFeHByZXNzaW9uU3RhdGVtZW50JzoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAg
ICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5FeHBy
ZXNzaW9uU3RhdGVtZW50LAorICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IHRoaXMuX2NyZWF0
ZUludGVybmFsU3ludGF4VHJlZShub2RlLmV4cHJlc3Npb24pCisgICAgICAgICAgICB9OworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ0ZvclN0YXRlbWVudCc6CisgICAgICAgICAg
ICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5
bnRheFRyZWUuTm9kZVR5cGUuRm9yU3RhdGVtZW50LAorICAgICAgICAgICAgICAgIGluaXQ6IHRo
aXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmluaXQpLAorICAgICAgICAgICAgICAg
IHByZWRpY2F0ZTogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUudGVzdCksCisg
ICAgICAgICAgICAgICAgdXBkYXRlOiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9k
ZS51cGRhdGUpLAorICAgICAgICAgICAgICAgIGJvZHk6IHRoaXMuX2NyZWF0ZUludGVybmFsU3lu
dGF4VHJlZShub2RlLmJvZHkpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgJ0ZvckluU3RhdGVtZW50JzoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAg
ICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlw
ZS5Gb3JJblN0YXRlbWVudCwKKyAgICAgICAgICAgICAgICBsZWZ0OiB0aGlzLl9jcmVhdGVJbnRl
cm5hbFN5bnRheFRyZWUobm9kZS5sZWZ0KSwKKyAgICAgICAgICAgICAgICByaWdodDogdGhpcy5f
Y3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUucmlnaHQpLAorICAgICAgICAgICAgICAgIGJv
ZHk6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmJvZHkpCisgICAgICAgICAg
ICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ0Z1bmN0aW9uRGVjbGFyYXRp
b24nOgorICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYklu
c3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkZ1bmN0aW9uRGVjbGFyYXRpb24sCisg
ICAgICAgICAgICAgICAgaWQ6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmlk
KSwKKyAgICAgICAgICAgICAgICBwYXJhbXM6IG5vZGUucGFyYW1zLm1hcCh0aGlzLl9jcmVhdGVJ
bnRlcm5hbFN5bnRheFRyZWUuYmluZCh0aGlzKSksCisgICAgICAgICAgICAgICAgYm9keTogdGhp
cy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUuYm9keSksCisgICAgICAgICAgICAgICAg
aXNHZXR0ZXJPclNldHRlcjogZmFsc2UgLy8gVGhpcyBpcyBvYnZpb3VzLCBidXQgaXMgY29udmVu
aWVudCBub25lIHRoZSBsZXNzIGIvYyBEZWNsYXJhdGlvbnMgYW5kIEV4cHJlc3Npb25zIGFyZSBv
ZnRlbiBpbnRlcnR3aW5lZC4KKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSAnRnVuY3Rpb25FeHByZXNzaW9uJzoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsK
KyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2Rl
VHlwZS5GdW5jdGlvbkV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgaWQ6IHRoaXMuX2NyZWF0
ZUludGVybmFsU3ludGF4VHJlZShub2RlLmlkKSwKKyAgICAgICAgICAgICAgICBwYXJhbXM6IG5v
ZGUucGFyYW1zLm1hcCh0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUuYmluZCh0aGlzKSks
CisgICAgICAgICAgICAgICAgYm9keTogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5v
ZGUuYm9keSksCisgICAgICAgICAgICAgICAgaXNHZXR0ZXJPclNldHRlcjogZmFsc2UgLy8gSWYg
dHJ1ZSwgaXQgaXMgc2V0IGluIHRoZSBQcm9wZXJ0eSBBU1Qgbm9kZS4KKyAgICAgICAgICAgIH07
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnSWRlbnRpZmllcic6CisgICAgICAg
ICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlw
dFN5bnRheFRyZWUuTm9kZVR5cGUuSWRlbnRpZmllciwKKyAgICAgICAgICAgICAgICBuYW1lOiBu
b2RlLm5hbWUKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSAnSWZTdGF0ZW1lbnQnOgorICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAg
IHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLklmU3RhdGVtZW50
LAorICAgICAgICAgICAgICAgIHByZWRpY2F0ZTogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhU
cmVlKG5vZGUudGVzdCksCisgICAgICAgICAgICAgICAgY29uc2VxdWVudDogdGhpcy5fY3JlYXRl
SW50ZXJuYWxTeW50YXhUcmVlKG5vZGUuY29uc2VxdWVudCksCisgICAgICAgICAgICAgICAgYWx0
ZXJuYXRlOiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5hbHRlcm5hdGUpCisg
ICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ0xpdGVyYWwn
OgorICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3Bl
Y3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkxpdGVyYWwsCisgICAgICAgICAgICAgICAg
dmFsdWU6IG5vZGUudmFsdWUsCisgICAgICAgICAgICAgICAgcmF3OiBub2RlLnJhdworICAgICAg
ICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdMYWJlbGVkU3RhdGVt
ZW50JzoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJ
bnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5MYWJlbGVkU3RhdGVtZW50LAorICAg
ICAgICAgICAgICAgIGxhYmVsOiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5s
YWJlbCksCisgICAgICAgICAgICAgICAgYm9keTogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhU
cmVlKG5vZGUuYm9keSkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSAnTG9naWNhbEV4cHJlc3Npb24nOgorICAgICAgICAgICAgcmVzdWx0ID0geworICAg
ICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBl
LkxvZ2ljYWxFeHByZXNzaW9uLAorICAgICAgICAgICAgICAgIGxlZnQ6IHRoaXMuX2NyZWF0ZUlu
dGVybmFsU3ludGF4VHJlZShub2RlLmxlZnQpLAorICAgICAgICAgICAgICAgIHJpZ2h0OiB0aGlz
Ll9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5yaWdodCkKKyAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnTWVtYmVyRXhwcmVzc2lvbic6CisgICAg
ICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNj
cmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuTWVtYmVyRXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAg
ICBvYmplY3Q6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLm9iamVjdCksCisg
ICAgICAgICAgICAgICAgcHJvcGVydHk6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShu
b2RlLnByb3BlcnR5KQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlICdOZXdFeHByZXNzaW9uJzoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAg
ICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5OZXdF
eHByZXNzaW9uLAorICAgICAgICAgICAgICAgIGNhbGxlZTogdGhpcy5fY3JlYXRlSW50ZXJuYWxT
eW50YXhUcmVlKG5vZGUuY2FsbGVlKSwKKyAgICAgICAgICAgICAgICBhcmd1bWVudHM6IG5vZGUu
YXJndW1lbnRzLm1hcCh0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUuYmluZCh0aGlzKSkK
KyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnT2JqZWN0
RXhwcmVzc2lvbic6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlw
ZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuT2JqZWN0RXhwcmVzc2lv
biwKKyAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBub2RlLnByb3BlcnRpZXMubWFwKHRoaXMu
X2NyZWF0ZUludGVybmFsU3ludGF4VHJlZS5iaW5kKHRoaXMpKQorICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdQcm9ncmFtJzoKKyAgICAgICAgICAgIHJl
c3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4
VHJlZS5Ob2RlVHlwZS5Qcm9ncmFtLAorICAgICAgICAgICAgICAgIGJvZHk6IG5vZGUuYm9keS5t
YXAodGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlLmJpbmQodGhpcykpCisgICAgICAgICAg
ICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ1Byb3BlcnR5JzoKKyAgICAg
ICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2Ny
aXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5Qcm9wZXJ0eSwKKyAgICAgICAgICAgICAgICBrZXk6IHRo
aXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmtleSksCisgICAgICAgICAgICAgICAg
dmFsdWU6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLnZhbHVlKSwKKyAgICAg
ICAgICAgICAgICBraW5kOiBub2RlLmtpbmQKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBp
ZiAocmVzdWx0LmtpbmQgPT09ICJnZXQiIHx8IHJlc3VsdC5raW5kID09PSAic2V0IikgeworICAg
ICAgICAgICAgICAgIHJlc3VsdC52YWx1ZS5pc0dldHRlck9yU2V0dGVyID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICByZXN1bHQudmFsdWUuZ2V0dGVyT3JTZXR0ZXJSYW5nZSA9IHJlc3VsdC5rZXku
cmFuZ2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAn
UmV0dXJuU3RhdGVtZW50JzoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAg
ICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5SZXR1cm5TdGF0
ZW1lbnQsCisgICAgICAgICAgICAgICAgYXJndW1lbnQ6IHRoaXMuX2NyZWF0ZUludGVybmFsU3lu
dGF4VHJlZShub2RlLmFyZ3VtZW50KQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlICdTZXF1ZW5jZUV4cHJlc3Npb24nOgorICAgICAgICAgICAgcmVzdWx0
ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVl
Lk5vZGVUeXBlLlNlcXVlbmNlRXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICBleHByZXNzaW9u
czogbm9kZS5leHByZXNzaW9ucy5tYXAodGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlLmJp
bmQodGhpcykpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgJ1N3aXRjaFN0YXRlbWVudCc6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAg
ICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuU3dpdGNo
U3RhdGVtZW50LAorICAgICAgICAgICAgICAgIGRpc2NyaW1pbmFudDogdGhpcy5fY3JlYXRlSW50
ZXJuYWxTeW50YXhUcmVlKG5vZGUuZGlzY3JpbWluYW50KSwKKyAgICAgICAgICAgICAgICBjYXNl
czogbm9kZS5jYXNlcy5tYXAodGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlLmJpbmQodGhp
cykpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ1N3
aXRjaENhc2UnOgorICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6
IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlN3aXRjaENhc2UsCisgICAg
ICAgICAgICAgICAgcHJlZGljYXRlOiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9k
ZS50ZXN0KSwKKyAgICAgICAgICAgICAgICBjb25zZXF1ZW50OiBub2RlLmNvbnNlcXVlbnQubWFw
KHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZS5iaW5kKHRoaXMpKQorICAgICAgICAgICAg
fTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdUaGlzRXhwcmVzc2lvbic6Cisg
ICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9y
LlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuVGhpc0V4cHJlc3Npb24KKyAgICAgICAgICAgIH07
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnVGhyb3dTdGF0ZW1lbnQnOgorICAg
ICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5T
Y3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlRocm93U3RhdGVtZW50LAorICAgICAgICAgICAgICAg
IGFyZ3VtZW50OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5hcmd1bWVudCkK
KyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnVHJ5U3Rh
dGVtZW50JzoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBX
ZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5UcnlTdGF0ZW1lbnQsCisgICAg
ICAgICAgICAgICAgYmxvY2s6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmJs
b2NrKSwKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2hhdCBhcmUgZ3VhcmRlZCBoYW5kbGVy
cz8KKyAgICAgICAgICAgICAgICBndWFyZGVkSGFuZGxlcnM6IG5vZGUuZ3VhcmRlZEhhbmRsZXJz
Lm1hcCh0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUuYmluZCh0aGlzKSksCisgICAgICAg
ICAgICAgICAgaGFuZGxlcnM6IG5vZGUuaGFuZGxlcnMubWFwKHRoaXMuX2NyZWF0ZUludGVybmFs
U3ludGF4VHJlZS5iaW5kKHRoaXMpKSwKKyAgICAgICAgICAgICAgICBmaW5hbGl6ZXI6IHRoaXMu
X2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmZpbmFsaXplcikKKyAgICAgICAgICAgIH07
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnVW5hcnlFeHByZXNzaW9uJzoKKyAg
ICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3Iu
U2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5VbmFyeUV4cHJlc3Npb24sCisgICAgICAgICAgICAg
ICAgb3BlcmF0b3I6IG5vZGUub3BlcmF0b3IsCisgICAgICAgICAgICAgICAgYXJndW1lbnQ6IHRo
aXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmFyZ3VtZW50KQorICAgICAgICAgICAg
fTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdVcGRhdGVFeHByZXNzaW9uJzoK
KyAgICAgICAgICAgIC8vIFByZWZpeC9wb3N0Zml4IGV4cHJlc3Npb25zIGluIGVzcHJpbWEuCisg
ICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogKG5vZGUucHJlZml4
ID8gV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuUHJlZml4RXhwcmVzc2lv
biA6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlBvc3RmaXhFeHByZXNz
aW9uKSwKKyAgICAgICAgICAgICAgICBvcGVyYXRvcjogbm9kZS5vcGVyYXRvciwKKyAgICAgICAg
ICAgICAgICBhcmd1bWVudDogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUuYXJn
dW1lbnQpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
J1ZhcmlhYmxlRGVjbGFyYXRpb24nOgorICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAg
ICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlZhcmlh
YmxlRGVjbGFyYXRpb24sCisgICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zOiBub2RlLmRlY2xh
cmF0aW9ucy5tYXAodGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlLmJpbmQodGhpcykpCisg
ICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ1ZhcmlhYmxl
RGVjbGFyYXRvcic6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlw
ZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuVmFyaWFibGVEZWNsYXJh
dG9yLAorICAgICAgICAgICAgICAgIGlkOiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUo
bm9kZS5pZCksCisgICAgICAgICAgICAgICAgaW5pdDogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50
YXhUcmVlKG5vZGUuaW5pdCkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSAnV2hpbGVTdGF0ZW1lbnQnOgorICAgICAgICAgICAgcmVzdWx0ID0geworICAg
ICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBl
LldoaWxlU3RhdGVtZW50LAorICAgICAgICAgICAgICAgIHByZWRpY2F0ZTogdGhpcy5fY3JlYXRl
SW50ZXJuYWxTeW50YXhUcmVlKG5vZGUudGVzdCksCisgICAgICAgICAgICAgICAgYm9keTogdGhp
cy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUuYm9keSkKKyAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnV2l0aFN0YXRlbWVudCc6CisgICAgICAg
ICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlw
dFN5bnRheFRyZWUuTm9kZVR5cGUuV2l0aFN0YXRlbWVudCwKKyAgICAgICAgICAgICAgICBvYmpl
Y3Q6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLm9iamVjdCksCisgICAgICAg
ICAgICAgICAgYm9keTogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUuYm9keSkK
KyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgcmVzdWx0LnJhbmdlID0gbm9kZS5yYW5nZTsKKyAgICAgICAgLy8gVGhpcyBpcyBh
biBvYmplY3QgZm9yIHdoaWNoIHlvdSBjYW4gYWRkIGZpZWxkcyB0byBhbiBBU1Qgbm9kZSB3aXRo
b3V0IHdvcnJ5aW5nIGFib3V0IHBvbGx1dGluZyB0aGUgc3ludGF4LXJlbGF0ZWQgZmllbGRzIG9m
IHRoZSBub2RlLgorICAgICAgICByZXN1bHQuX2F0dGFjaG1lbnRzID0ge307IAorCisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236491</attachid>
            <date>2014-08-12 18:41:20 -0700</date>
            <delta_ts>2014-08-14 13:23:47 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>73595</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwkocmV2aXNpb24gMTcyNTA5KQorKysgU291cmNl
L1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBA
CisyMDE0LTA4LTEyICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFdlYiBJbnNwZWN0b3I6IEludHJvZHVjZSBhbiBpbnNwZWN0b3IgQWJzdHJhY3QgU3ludGF4IFRy
ZWUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzU3
NjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlz
IHBhdGNoIGFkZHMgYW4gQWJzdHJhY3QgU3ludGF4IFRyZWUgdG8gdGhlIFdlYiBpbnNwZWN0b3Iu
IAorICAgICAgICBUaGlzIHN5bnRheCB0cmVlIGlzIG1vZGVsZWQgb2ZmIHRoZSBFc3ByaW1hLmpz
IHN5bnRheCB0cmVlCisgICAgICAgIHdoaWNoIGNvbXBsaWVzIHdpdGggdGhlIE1vemlsbGEgUGFy
c2VyIEFQSToKKyAgICAgICAgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9j
cy9Nb3ppbGxhL1Byb2plY3RzL1NwaWRlck1vbmtleS9QYXJzZXJfQVBJCisgICAgICAgIFNjcmlw
dCBpcyB0aGUgb3duZXIgb2YgdGhlIFdlYiBJbnNwZWN0b3Igc3ludGF4IHRyZWUsIGFuZCBoYXMg
YW4gQVBJCisgICAgICAgIGZvciBhY2Nlc3NpbmcgaXRzIHN5bnRheCB0cmVlIHByb3BlcnR5Lgor
CisgICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Fc3ByaW1hL2VzcHJpbWEuanM6Cisg
ICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6CisgICAgICAgICogVXNlckludGVyZmFj
ZS9Nb2RlbHMvU2NyaXB0LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0LnByb3RvdHlwZS5yZXF1ZXN0U2NyaXB0U3ludGF4VHJl
ZS5tYWtlU3ludGF4VHJlZUFuZENhbGxDYWxsYmFjayk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
U2NyaXB0LnByb3RvdHlwZS5yZXF1ZXN0U2NyaXB0U3ludGF4VHJlZS5tYWtlU3ludGF4VHJlZUFm
dGVyVGltZW91dCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0LnByb3RvdHlwZS5yZXF1
ZXN0U2NyaXB0U3ludGF4VHJlZS5lbHNlLm1ha2VTeW50YXhUcmVlQWZ0ZXJUaW1lb3V0KToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHQucHJvdG90eXBlLl9yZXNvbHZlUmVzb3VyY2UpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdC5wcm90b3R5cGUuX21ha2VTeW50YXhUcmVlKToK
KyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01vZGVscy9TY3JpcHRTeW50YXhUcmVlLmpzOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLnByb3RvdHlwZS5mb3JFYWNoTm9kZSk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5wcm90b3R5cGUuKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLnByb3RvdHlwZS5maWx0ZXIpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUucHJvdG90eXBlLmZpbHRlckZvck5vZGVz
SW5SYW5nZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5wcm90b3R5
cGUuZmlsdGVyQnlSYW5nZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJl
ZS5wcm90b3R5cGUuY29udGFpbnNOb25FbXB0eVJldHVyblN0YXRlbWVudC5yZW1vdmVGdW5jdGlv
bnNGaWx0ZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUucHJvdG90
eXBlLmNvbnRhaW5zTm9uRW1wdHlSZXR1cm5TdGF0ZW1lbnQpOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlNjcmlwdFN5bnRheFRyZWUucHJvdG90eXBlLmhhbmRsZVR5cGVzKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLnByb3RvdHlwZS51cGRhdGVUeXBlcyk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5wcm90b3R5cGUuX2RlZmF1bHRQYXJz
ZXJTdGF0ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5wcm90b3R5
cGUuX3JlY3Vyc2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUucHJv
dG90eXBlLl9yZWN1cnNlQXJyYXkpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRh
eFRyZWUucHJvdG90eXBlLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUpOgorCiAyMDE0LTA4LTEy
ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIElu
c3BlY3RvcjogVGltZWxpbmUgc2VsZWN0aW9uIHJhbmdlIGNyZWF0aW9uIGRvZXMgbm90IHdvcmsg
d2hlbiBjbGlja2luZyBldmVudCBidWJibGUgb3IgbmVhciBib3R0b20gb2Ygb3ZlcnZpZXcKSW5k
ZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9NYWluLmh0bWwJKHJl
dmlzaW9uIDE3MjUwOSkKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01h
aW4uaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMjYwLDYgKzI2MCw3IEBACiAgICAgPHNjcmlwdCBz
cmM9Ik1vZGVscy9SZXZpc2lvbi5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9Ik1vZGVs
cy9TY29wZUNoYWluTm9kZS5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9Ik1vZGVscy9T
Y3JpcHQuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJNb2RlbHMvU2NyaXB0U3ludGF4
VHJlZS5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9Ik1vZGVscy9TY3JpcHRUaW1lbGlu
ZVJlY29yZC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9Ik1vZGVscy9TZXR0aW5nLmpz
Ij48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iTW9kZWxzL1NvdXJjZUNvZGVQb3NpdGlvbi5q
cyI+PC9zY3JpcHQ+CkluZGV4OiBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9F
eHRlcm5hbC9Fc3ByaW1hL2VzcHJpbWEuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvRXNwcmltYS9lc3ByaW1hLmpzCShyZXZpc2lv
biAxNzI1MDkpCisrKyBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRlcm5h
bC9Fc3ByaW1hL2VzcHJpbWEuanMJKHdvcmtpbmcgY29weSkKQEAgLTMyLDkgKzMyLDkgQEAKICov
CiAKIC8vIFdlYktpdCBNb2RpZmljYXRpb25zOgotLy8gLSBUaGUgb25seSBlZGl0IG1hZGUgdG8g
dGhpcyBmaWxlIGlzIHRoZSB1c2UgJ1dlYkluc3BlY3Rvci5fZXNwcmltYScgYXMgdGhlICdleHBv
cnRzJyBvYmplY3QgZm9yIGVzcHJpbWEuIAotLy8gICBUaGUgY29kZSB0aGF0IGRldGVybWluZXMg
dGhlIGNvbnRleHQgZXNwcmltYSBpcyBsb2FkZWQgaW4gKG5vZGUuanMsIHRoZSBicm93c2VyLCBl
dGMuKSBoYXMgYmVlbiByZXBsYWNlZCB3aXRoIGEgcmVmZXJlbmNlIHRvICdXZWJJbnNwZWN0b3Iu
X2VzcHJpbWEnLgotV2ViSW5zcGVjdG9yLl9lc3ByaW1hID0ge307CisvLyAtIFRoZSBvbmx5IGVk
aXQgbWFkZSB0byB0aGlzIGZpbGUgaXMgdGhlIHVzZSAnV2ViSW5zcGVjdG9yLkVzcHJpbWEnIGFz
IHRoZSAnZXhwb3J0cycgb2JqZWN0IGZvciBlc3ByaW1hLiAKKy8vICAgVGhlIGNvZGUgdGhhdCBk
ZXRlcm1pbmVzIHRoZSBjb250ZXh0IGVzcHJpbWEgaXMgbG9hZGVkIGluIChub2RlLmpzLCB0aGUg
YnJvd3NlciwgZXRjLikgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBhIHJlZmVyZW5jZSB0byAnV2Vi
SW5zcGVjdG9yLkVzcHJpbWEnLgorV2ViSW5zcGVjdG9yLkVzcHJpbWEgPSB7fTsKIAogKGZ1bmN0
aW9uIChleHBvcnRzKSB7CiAgICAgJ3VzZSBzdHJpY3QnOwpAQCAtMzczMiw0ICszNzMyLDQgQEAg
V2ViSW5zcGVjdG9yLl9lc3ByaW1hID0ge307CiAgICAgICAgIHJldHVybiB0eXBlczsKICAgICB9
KCkpOwogCi19KShXZWJJbnNwZWN0b3IuX2VzcHJpbWEpOworfSkoV2ViSW5zcGVjdG9yLkVzcHJp
bWEpOwpJbmRleDogU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1Nj
cmlwdC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9Nb2RlbHMvU2NyaXB0LmpzCShyZXZpc2lvbiAxNzI1MDkpCisrKyBTb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvU2NyaXB0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC00
MSw2ICs0MSw4IEBAIFdlYkluc3BlY3Rvci5TY3JpcHQgPSBmdW5jdGlvbihpZCwgcmFuZ2UKIAog
ICAgIGlmIChzb3VyY2VNYXBVUkwpCiAgICAgICAgIFdlYkluc3BlY3Rvci5zb3VyY2VNYXBNYW5h
Z2VyLmRvd25sb2FkU291cmNlTWFwKHNvdXJjZU1hcFVSTCwgdGhpcy5fdXJsLCB0aGlzKTsKKwor
ICAgIHRoaXMuX3NjcmlwdFN5bnRheFRyZWUgPSBudWxsOwogfTsKIAogV2ViSW5zcGVjdG9yLlNj
cmlwdC5UeXBlSWRlbnRpZmllciA9ICJzY3JpcHQiOwpAQCAtMTI3LDYgKzEyOSwzOSBAQCBXZWJJ
bnNwZWN0b3IuU2NyaXB0LnByb3RvdHlwZSA9IHsKICAgICAgICAgY29va2llW1dlYkluc3BlY3Rv
ci5TY3JpcHQuRGlzcGxheU5hbWVDb29raWVLZXldID0gdGhpcy5kaXNwbGF5TmFtZTsKICAgICB9
LAogCisgICAgcmVxdWVzdFNjcmlwdFN5bnRheFRyZWU6IGZ1bmN0aW9uKGNhbGxiYWNrKQorICAg
IHsKKyAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworCisgICAgICAgIGlmICh0aGlzLl9zY3JpcHRT
eW50YXhUcmVlKSB7CisgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBjYWxsYmFj
ayhzZWxmLl9zY3JpcHRTeW50YXhUcmVlKTsgfSwgMCk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICB2YXIgbWFrZVN5bnRheFRyZWVBZnRlclRpbWVvdXQgPSBudWxs
OworCisgICAgICAgIGZ1bmN0aW9uIG1ha2VTeW50YXhUcmVlQW5kQ2FsbENhbGxiYWNrKGNvbnRl
bnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNlbGYuX21ha2VTeW50YXhUcmVlKGNvbnRlbnQp
OworICAgICAgICAgICAgY2FsbGJhY2soc2VsZi5fc2NyaXB0U3ludGF4VHJlZSk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAodGhpcy5jb250ZW50KQorICAgICAgICAgICAgbWFrZVN5bnRheFRy
ZWVBZnRlclRpbWVvdXQgPSBmdW5jdGlvbigpIHsgbWFrZVN5bnRheFRyZWVBbmRDYWxsQ2FsbGJh
Y2soc2VsZi5jb250ZW50KTsgfTsKKyAgICAgICAgZWxzZSBpZiAodGhpcy5fcmVzb3VyY2UgJiYg
dGhpcy5fcmVzb3VyY2UudHlwZSA9PT0gV2ViSW5zcGVjdG9yLlJlc291cmNlLlR5cGUuU2NyaXB0
ICYmIHRoaXMuX3Jlc291cmNlLmZpbmlzaGVkICYmIHRoaXMuX3Jlc291cmNlLmNvbnRlbnQpCisg
ICAgICAgICAgICBtYWtlU3ludGF4VHJlZUFmdGVyVGltZW91dCA9IGZ1bmN0aW9uKCkgeyBtYWtl
U3ludGF4VHJlZUFuZENhbGxDYWxsYmFjayhzZWxmLl9yZXNvdXJjZS5jb250ZW50KTsgfTsKKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICBtYWtlU3ludGF4VHJlZUFmdGVyVGltZW91dCA9IGZ1
bmN0aW9uKCkgCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc2VsZi5yZXF1ZXN0Q29u
dGVudChmdW5jdGlvbihlcnJvciwgc291cmNlVGV4dCkgeworICAgICAgICAgICAgICAgICAgICBt
YWtlU3ludGF4VHJlZUFuZENhbGxDYWxsYmFjayhzb3VyY2VUZXh0KTsKKyAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKworICAgICAgICBzZXRUaW1lb3V0KG1h
a2VTeW50YXhUcmVlQWZ0ZXJUaW1lb3V0LCAwKTsKKyAgICB9LAorCiAgICAgLy8gUHJpdmF0ZQog
CiAgICAgX3Jlc29sdmVSZXNvdXJjZTogZnVuY3Rpb24oKQpAQCAtMTc0LDYgKzIwOSwxOCBAQCBX
ZWJJbnNwZWN0b3IuU2NyaXB0LnByb3RvdHlwZSA9IHsKICAgICAgICAgfQogCiAgICAgICAgIHJl
dHVybiBudWxsOworICAgIH0sCisKKyAgICBfbWFrZVN5bnRheFRyZWU6IGZ1bmN0aW9uKHNvdXJj
ZVRleHQpIHsKKyAgICAgICAgaWYgKCFzb3VyY2VUZXh0KQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB0aGlzLl9zY3JpcHRTeW50YXhUcmVlID0gbmV3
IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlKHNvdXJjZVRleHQsIHRoaXMpOworICAgICAg
ICB9IGNhdGNoKGVycm9yKSB7CisgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJDb3VsZG4ndCBw
YXJzZSBKYXZhU2NyaXB0IEZpbGU6ICIgKyB0aGlzLl91cmwsIGVycm9yKTsKKyAgICAgICAgICAg
IHRoaXMuX3NjcmlwdFN5bnRheFRyZWUgPSBudWxsOworICAgICAgICB9CiAgICAgfQogfTsKIApJ
bmRleDogU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1NjcmlwdFN5
bnRheFRyZWUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvTW9kZWxzL1NjcmlwdFN5bnRheFRyZWUuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvU2NyaXB0U3ludGF4VHJlZS5qcwko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1MTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitXZWJJbnNwZWN0
b3IuU2NyaXB0U3ludGF4VHJlZSA9IGZ1bmN0aW9uKHNvdXJjZVRleHQsIHNjcmlwdCkKK3sKKyAg
ICBjb25zb2xlLmFzc2VydChzY3JpcHQgJiYgc2NyaXB0IGluc3RhbmNlb2YgV2ViSW5zcGVjdG9y
LlNjcmlwdCwgc2NyaXB0KTsKKyAgICBXZWJJbnNwZWN0b3IuT2JqZWN0LmNhbGwodGhpcyk7Cisg
ICAgdGhpcy5fc2NyaXB0ID0gc2NyaXB0OworCisgICAgdmFyIGVzcHJpbWFTeW50YXhUcmVlID0g
V2ViSW5zcGVjdG9yLkVzcHJpbWEucGFyc2Uoc291cmNlVGV4dCwge3JhbmdlOiB0cnVlfSk7Cisg
ICAgdGhpcy5fc3ludGF4VHJlZSA9IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShlc3By
aW1hU3ludGF4VHJlZSk7Cit9OworCisvLyBUaGlzIHNob3VsZCBiZSBrZXB0IGluIHN5bmMgd2l0
aCBhbiBlbnVtIGluIEphdmFTY2lwdENvcmUvcnVudGltZS9IaWdoRmlkZWxpdHlUeXBlUHJvZmls
ZXIuaAorV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuVHlwZVByb2ZpbGVyU2VhcmNoRGVz
Y3JpcHRvciA9IHsKKyAgICBOb3JtYWxFeHByZXNzaW9uOiAxLAorICAgIEZ1bmN0aW9uUmV0dXJu
OiAyCit9OworCitXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZSA9IHsKKyAg
ICBBc3NpZ25tZW50RXhwcmVzc2lvbjogInNjcmlwdC1zeW50YXgtdHJlZS1ub2RlLXR5cGUtYXNz
aWdubWVudC1leHByZXNzaW9uIiwKKyAgICBBcnJheUV4cHJlc3Npb246ICJzY3JpcHQtc3ludGF4
LXRyZWUtbm9kZS10eXBlLWFycmF5LWV4cHJlc3Npb24iLAorICAgIEJsb2NrU3RhdGVtZW50OiAi
c2NyaXB0LXN5bnRheC10cmVlLW5vZGUtdHlwZS1ibG9jay1zdGF0ZW1lbnQiLAorICAgIEJpbmFy
eUV4cHJlc3Npb246ICJzY3JpcHQtc3ludGF4LXRyZWUtbm9kZS10eXBlLWJpbmFyeS1leHByZXNz
aW9uIiwKKyAgICBCcmVha1N0YXRlbWVudDogInNjcmlwdC1zeW50YXgtdHJlZS1ub2RlLXR5cGUt
YnJlYWstc3RhdGVtZW50IiwKKyAgICBDYWxsRXhwcmVzc2lvbjogInNjcmlwdC1zeW50YXgtdHJl
ZS1ub2RlLXR5cGUtY2FsbC1leHByZXNzaW9uIiwKKyAgICBDYXRjaENsYXVzZTogInNjcmlwdC1z
eW50YXgtdHJlZS1ub2RlLXR5cGUtY2F0Y2gtY2xhdXNlIiwKKyAgICBDb25kaXRpb25hbEV4cHJl
c3Npb246ICJzY3JpcHQtc3ludGF4LXRyZWUtbm9kZS10eXBlLWNvbmRpdGlvbmFsLWV4cHJlc3Np
b24iLAorICAgIENvbnRpbnVlU3RhdGVtZW50OiAic2NyaXB0LXN5bnRheC10cmVlLW5vZGUtdHlw
ZS1jb250aW51ZS1zdGF0ZW1lbnQiLAorICAgIERvV2hpbGVTdGF0ZW1lbnQ6ICJzY3JpcHQtc3lu
dGF4LXRyZWUtbm9kZS10eXBlLWRvLXdoaWxlLXN0YXRlbWVudCIsCisgICAgRGVidWdnZXJTdGF0
ZW1lbnQ6ICJzY3JpcHQtc3ludGF4LXRyZWUtbm9kZS10eXBlLWRlYnVnZ2VyLXN0YXRlbWVudCIs
CisgICAgRW1wdHlTdGF0ZW1lbnQ6ICJzY3JpcHQtc3ludGF4LXRyZWUtbm9kZS10eXBlLWVtcHR5
LXN0YXRlbWVudCIsCisgICAgRXhwcmVzc2lvblN0YXRlbWVudDogInNjcmlwdC1zeW50YXgtdHJl
ZS1ub2RlLXR5cGUtZXhwcmVzc2lvbi1zdGF0ZW1lbnQiLAorICAgIEZvclN0YXRlbWVudDogInNj
cmlwdC1zeW50YXgtdHJlZS1ub2RlLXR5cGUtZm9yLXN0YXRlbWVudCIsCisgICAgRm9ySW5TdGF0
ZW1lbnQ6ICJzY3JpcHQtc3ludGF4LXRyZWUtbm9kZS10eXBlLWZvci1pbi1zdGF0ZW1lbnQiLAor
ICAgIEZ1bmN0aW9uRGVjbGFyYXRpb246ICJzY3JpcHQtc3ludGF4LXRyZWUtbm9kZS10eXBlLWZ1
bmN0aW9uLWRlY2xhcmF0aW9uIiwKKyAgICBGdW5jdGlvbkV4cHJlc3Npb246ICJzY3JpcHQtc3lu
dGF4LXRyZWUtbm9kZS10eXBlLWZ1bmN0aW9uLWV4cHJlc3Npb24iLAorICAgIElkZW50aWZpZXI6
ICJzY3JpcHQtc3ludGF4LXRyZWUtbm9kZS10eXBlLWlkZW50aWZpZXIiLAorICAgIElmU3RhdGVt
ZW50OiAic2NyaXB0LXN5bnRheC10cmVlLW5vZGUtdHlwZS1pZi1zdGF0ZW1lbnQiLAorICAgIExp
dGVyYWw6ICJzY3JpcHQtc3ludGF4LXRyZWUtbm9kZS10eXBlLWxpdGVyYWwiLAorICAgIExhYmVs
ZWRTdGF0ZW1lbnQ6ICJzY3JpcHQtc3ludGF4LXRyZWUtbm9kZS10eXBlLWxhYmVsZWQtc3RhdGVt
ZW50IiwKKyAgICBMb2dpY2FsRXhwcmVzc2lvbjogInNjcmlwdC1zeW50YXgtdHJlZS1ub2RlLXR5
cGUtbG9naWNhbC1leHByZXNzaW9uIiwKKyAgICBNZW1iZXJFeHByZXNzaW9uOiAic2NyaXB0LXN5
bnRheC10cmVlLW5vZGUtdHlwZS1tZW1iZXItZXhwcmVzc2lvbiIsCisgICAgTmV3RXhwcmVzc2lv
bjogInNjcmlwdC1zeW50YXgtdHJlZS1ub2RlLXR5cGUtbmV3LWV4cHJlc3Npb24iLAorICAgIE9i
amVjdEV4cHJlc3Npb246ICJzY3JpcHQtc3ludGF4LXRyZWUtbm9kZS10eXBlLW9iamVjdEV4cHJl
c3Npb24iLAorICAgIFByb2dyYW06ICJzY3JpcHQtc3ludGF4LXRyZWUtbm9kZS10eXBlLXByb2dy
YW0iLAorICAgIFByb3BlcnR5OiAic2NyaXB0LXN5bnRheC10cmVlLW5vZGUtdHlwZS1wcm9wZXJ0
eSIsCisgICAgUmV0dXJuU3RhdGVtZW50OiAic2NyaXB0LXN5bnRheC10cmVlLW5vZGUtdHlwZS1y
ZXR1cm4tc3RhdGVtZW50IiwKKyAgICBTZXF1ZW5jZUV4cHJlc3Npb246ICJzY3JpcHQtc3ludGF4
LXRyZWUtbm9kZS10eXBlLXNlcXVlbmNlLWV4cHJlc3Npb24iLAorICAgIFN3aXRjaFN0YXRlbWVu
dDogInNjcmlwdC1zeW50YXgtdHJlZS1ub2RlLXR5cGUtc3dpdGNoLXN0YXRlbWVudCIsCisgICAg
U3dpdGNoQ2FzZTogInNjcmlwdC1zeW50YXgtdHJlZS1ub2RlLXR5cGUtc3dpdGNoLWNhc2UiLAor
ICAgIFRoaXNFeHByZXNzaW9uOiAic2NyaXB0LXN5bnRheC10cmVlLW5vZGUtdHlwZS10aGlzLWV4
cHJlc3Npb24iLAorICAgIFRocm93U3RhdGVtZW50OiAic2NyaXB0LXN5bnRheC10cmVlLW5vZGUt
dHlwZS10aHJvdy1zdGF0ZW1lbnQiLAorICAgIFRyeVN0YXRlbWVudDogInNjcmlwdC1zeW50YXgt
dHJlZS1ub2RlLXR5cGUtdHJ5LXN0YXRlbWVudCIsCisgICAgVW5hcnlFeHByZXNzaW9uOiAic2Ny
aXB0LXN5bnRheC10cmVlLW5vZGUtdHlwZS11bmFyeS1leHByZXNzaW9uIiwKKyAgICBVcGRhdGVF
eHByZXNzaW9uOiAic2NyaXB0LXN5bnRheC10cmVlLW5vZGUtdHlwZS11cGRhdGUtZXhwcmVzc2lv
biIsCisgICAgVmFyaWFibGVEZWNsYXJhdGlvbjogInNjcmlwdC1zeW50YXgtdHJlZS1ub2RlLXR5
cGUtdmFyaWFibGUtZGVjbGFyYXRpb24iLAorICAgIFZhcmlhYmxlRGVjbGFyYXRvcjogInNjcmlw
dC1zeW50YXgtdHJlZS1ub2RlLXR5cGUtdmFyaWFibGUtZGVjbGFyYXRvciIsCisgICAgV2hpbGVT
dGF0ZW1lbnQ6ICJzY3JpcHQtc3ludGF4LXRyZWUtbm9kZS10eXBlLXdoaWxlLXN0YXRlbWVudCIs
CisgICAgV2l0aFN0YXRlbWVudDogInNjcmlwdC1zeW50YXgtdHJlZS1ub2RlLXR5cGUtd2l0aC1z
dGF0ZW1lbnQiCit9OworCitXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5wcm90b3R5cGUg
PSB7CisgICAgY29uc3RydWN0b3I6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLAorICAg
IF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGUsCisKKyAgICAvLyBQdWJs
aWMKKworICAgIGZvckVhY2hOb2RlOiBmdW5jdGlvbihmdW5jKQorICAgIHsKKyAgICAgICAgdGhp
cy5fcmVjdXJzZSh0aGlzLl9zeW50YXhUcmVlLCBmdW5jLCB0aGlzLl9kZWZhdWx0UGFyc2VyU3Rh
dGUoKSk7CisgICAgfSwKKworICAgIGZpbHRlcjogZnVuY3Rpb24ocHJlZGljYXRlRnVuY3Rpb24s
IHN0YXJ0Tm9kZSkgCisgICAgeworICAgICAgICBjb25zb2xlLmFzc2VydChzdGFydE5vZGUpOwor
CisgICAgICAgIHZhciBub2RlcyA9IFtdOworICAgICAgICBmdW5jdGlvbiBmaWx0ZXIobm9kZSwg
c3RhdGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChwcmVkaWNhdGVGdW5jdGlvbihub2Rl
KSkKKyAgICAgICAgICAgICAgICBub2Rlcy5wdXNoKG5vZGUpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIHN0YXRlLnNraXBDaGlsZE5vZGVzID0gdHJ1ZTsgCisgICAgICAgIH0K
KyAgICAgICAgdGhpcy5fcmVjdXJzZShzdGFydE5vZGUsIGZpbHRlciwgdGhpcy5fZGVmYXVsdFBh
cnNlclN0YXRlKCkpOworCisgICAgICAgIHJldHVybiBub2RlczsKKyAgICB9LAorCisgICAgZmls
dGVyQnlSYW5nZTogZnVuY3Rpb24oc3RhcnRPZmZzZXQsIGVuZE9mZnNldCkKKyAgICB7CisgICAg
ICAgIHZhciBhbGxOb2RlcyA9IFtdOworICAgICAgICB2YXIgc3RhcnQgPSAwOworICAgICAgICB2
YXIgZW5kID0gMTsKKyAgICAgICAgZnVuY3Rpb24gZmlsdGVyRm9yTm9kZXNJblJhbmdlKG5vZGUs
IHN0YXRlKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBwcm9nX3N0YXJ0ICAgIHJhbmdlICAg
ICBwcm9ncmFtIGVuZAorICAgICAgICAgICAgLy8gWyAgICAgICAgICAgICBbICAgXSAgICAgICAg
ICAgICAgIF0KKyAgICAgICAgICAgIC8vICAgICAgICAgIFsgXSBbIFtdICBdICBbIF0KKworICAg
ICAgICAgICAgLy8gSWYgYSBub2RlJ3MgcmFuZ2UgZW5kcyBiZWZvcmUgdGhlIHJhbmdlIHdlJ3Jl
IGludGVyZXN0ZWQgaW4gc3RhcnRzLCB3ZSBkb24ndCBuZWVkIHRvIHNlYXJjaCBhbnkgb2YgaXRz
CisgICAgICAgICAgICAvLyBlbmNsb3NpbmcgcmFuZ2VzLCBiZWNhdXNlLCBieSBkZWZpbml0aW9u
LCB0aG9zZSBlbmNsb3NpbmcgcmFuZ2VzIGFyZSBjb250YWluZWQgd2l0aGluIHRoaXMgbm9kZSdz
IG91dGVyIHJhbmdlLgorICAgICAgICAgICAgaWYgKG5vZGUucmFuZ2VbZW5kXSA8IHN0YXJ0T2Zm
c2V0KQorICAgICAgICAgICAgICAgIHN0YXRlLnNraXBDaGlsZE5vZGVzID0gdHJ1ZTsKKworICAg
ICAgICAgICAgLy8gV2UgYXJlIG9ubHkgaW5zdGVyZXN0ZWQgaW4gbm9kZXMgd2hvc2Ugc3RhcnQg
cG9zIGlzIHdpdGhpbiBvdXIgcmFuZ2UuCisgICAgICAgICAgICBpZiAoc3RhcnRPZmZzZXQgPD0g
bm9kZS5yYW5nZVtzdGFydF0gJiYgbm9kZS5yYW5nZVtzdGFydF0gPD0gZW5kT2Zmc2V0KQorICAg
ICAgICAgICAgICAgIGFsbE5vZGVzLnB1c2gobm9kZSk7CisKKyAgICAgICAgICAgIC8vIE9uY2Ug
d2Ugc2VlIG5vZGVzIHRoYXQgc3RhcnQgYmV5b25kIG91ciByYW5nZSwgd2UgY2FuIHF1aXQgdHJh
dmVyc2luZyB0aGUgQVNULiBXZSBjYW4gZG8gdGhpcyBzYWZlbHkKKyAgICAgICAgICAgIC8vIGJl
Y2F1c2Ugd2Uga25vdyB0aGUgQVNUIGlzIHRyYXZlcnNlZCB1c2luZyBkZXB0aCBmaXJzdCBzZWFy
Y2gsIHNvIGl0IHdpbGwgdHJhdmVyc2UgaW50byBlbmNsb3NpbmcgcmFuZ2VzCisgICAgICAgICAg
ICAvLyBiZWZvcmUgaXQgdHJhdmVyc2VzIGludG8gYWRqYWNlbnQgcmFuZ2VzLgorICAgICAgICAg
ICAgaWYgKG5vZGUucmFuZ2Vbc3RhcnRdID4gZW5kT2Zmc2V0KQorICAgICAgICAgICAgICAgIHN0
YXRlLnNob3VsZFN0b3BFYXJseSA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLmZv
ckVhY2hOb2RlKGZpbHRlckZvck5vZGVzSW5SYW5nZSk7CisKKyAgICAgICAgcmV0dXJuIGFsbE5v
ZGVzOworICAgIH0sCisKKyAgICBjb250YWluc05vbkVtcHR5UmV0dXJuU3RhdGVtZW50OiBmdW5j
dGlvbihzdGFydE5vZGUpCisgICAgeworICAgICAgICBpZiAoc3RhcnROb2RlLl9hdHRhY2htZW50
cy5faGFzTm9uRW1wdHlSZXR1cm5TdGF0ZW1lbnQgIT09IHVuZGVmaW5lZCkKKyAgICAgICAgICAg
IHJldHVybiBzdGFydE5vZGUuX2F0dGFjaG1lbnRzLl9oYXNOb25FbXB0eVJldHVyblN0YXRlbWVu
dDsKKworICAgICAgICBmdW5jdGlvbiByZW1vdmVGdW5jdGlvbnNGaWx0ZXIobm9kZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIG5vZGUudHlwZSAhPT0gV2ViSW5zcGVjdG9yLlNjcmlw
dFN5bnRheFRyZWUuTm9kZVR5cGUuRnVuY3Rpb25FeHByZXNzaW9uIAorICAgICAgICAgICAgICAg
ICYmIG5vZGUudHlwZSAhPT0gV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUu
RnVuY3Rpb25EZWNsYXJhdGlvbjsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBub2RlcyA9IHRo
aXMuZmlsdGVyKHJlbW92ZUZ1bmN0aW9uc0ZpbHRlciwgc3RhcnROb2RlKTsKKyAgICAgICAgdmFy
IGhhc1JldHVyblN0YXRlbWVudCA9IGZhbHNlOworICAgICAgICB2YXIgcmV0dXJuU3RhdGVtZW50
VHlwZSA9IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlJldHVyblN0YXRl
bWVudDsKKyAgICAgICAgZm9yICh2YXIgbm9kZSBvZiBub2RlcykgeworICAgICAgICAgICAgaWYg
KG5vZGUudHlwZSA9PT0gcmV0dXJuU3RhdGVtZW50VHlwZSAmJiBub2RlLmFyZ3VtZW50KSB7Cisg
ICAgICAgICAgICAgICAgaGFzUmV0dXJuU3RhdGVtZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAgCisgICAgICAgIHN0
YXJ0Tm9kZS5fYXR0YWNobWVudHMuX2hhc05vbkVtcHR5UmV0dXJuU3RhdGVtZW50ID0gaGFzUmV0
dXJuU3RhdGVtZW50OworCisgICAgICAgIHJldHVybiBoYXNSZXR1cm5TdGF0ZW1lbnQ7CisgICAg
fSwKKworICAgIHVwZGF0ZVR5cGVzOiBmdW5jdGlvbihzb3VyY2VJRCwgbm9kZXNUb1VwZGF0ZSwg
Y2FsbGJhY2spIAorICAgIHsKKyAgICAgICAgY29uc29sZS5hc3NlcnQoQXJyYXkuaXNBcnJheShu
b2Rlc1RvVXBkYXRlKSk7CisKKyAgICAgICAgdmFyIGFsbFJlcXVlc3RzID0gW107CisgICAgICAg
IHZhciBhbGxSZXF1ZXN0Tm9kZXMgPSBbXTsKKworICAgICAgICBmdW5jdGlvbiBnYXRoZXJUeXBl
SW5mb3JtYXRpb25SZXF1ZXN0Rm9yTm9kZShub2RlKSAKKyAgICAgICAgeworICAgICAgICAgICAg
c3dpdGNoIChub2RlLnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlw
dFN5bnRheFRyZWUuTm9kZVR5cGUuRnVuY3Rpb25EZWNsYXJhdGlvbjoKKyAgICAgICAgICAgIGNh
c2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuRnVuY3Rpb25FeHByZXNz
aW9uOgorICAgICAgICAgICAgICAgIG5vZGUucGFyYW1zLmZvckVhY2goZnVuY3Rpb24gKHBhcmFt
KSB7CisgICAgICAgICAgICAgICAgICAgIGFsbFJlcXVlc3RzLnB1c2goeworICAgICAgICAgICAg
ICAgICAgICAgICAgdHlwZUluZm9ybWF0aW9uRGVzY3JpcHRvcjogV2ViSW5zcGVjdG9yLlNjcmlw
dFN5bnRheFRyZWUuVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvci5Ob3JtYWxFeHByZXNzaW9u
LAorICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlSUQ6IHNvdXJjZUlELAorICAgICAgICAg
ICAgICAgICAgICAgICAgZGl2b3Q6IHBhcmFtLnJhbmdlWzBdCisgICAgICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgICAgICAgICBhbGxSZXF1ZXN0Tm9kZXMucHVzaChwYXJhbSk7Cisg
ICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICBhbGxSZXF1ZXN0cy5wdXNoKHsK
KyAgICAgICAgICAgICAgICAgICAgdHlwZUluZm9ybWF0aW9uRGVzY3JpcHRvcjogV2ViSW5zcGVj
dG9yLlNjcmlwdFN5bnRheFRyZWUuVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvci5GdW5jdGlv
blJldHVybiwKKyAgICAgICAgICAgICAgICAgICAgc291cmNlSUQ6IHNvdXJjZUlELAorICAgICAg
ICAgICAgICAgICAgICBkaXZvdDogbm9kZS5ib2R5LnJhbmdlWzBdCisgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICAgICAgYWxsUmVxdWVzdE5vZGVzLnB1c2gobm9kZSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50
YXhUcmVlLk5vZGVUeXBlLlZhcmlhYmxlRGVjbGFyYXRvcjoKKyAgICAgICAgICAgICAgICBhbGxS
ZXF1ZXN0cy5wdXNoKHsKKyAgICAgICAgICAgICAgICAgICAgdHlwZUluZm9ybWF0aW9uRGVzY3Jp
cHRvcjogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuVHlwZVByb2ZpbGVyU2VhcmNoRGVz
Y3JpcHRvci5Ob3JtYWxFeHByZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICBzb3VyY2VJRDog
c291cmNlSUQsCisgICAgICAgICAgICAgICAgICAgIGRpdm90OiBub2RlLmlkLnJhbmdlWzBdCisg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgYWxsUmVxdWVzdE5vZGVzLnB1c2go
bm9kZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICBub2Rlc1RvVXBkYXRlLmZvckVhY2goZ2F0aGVyVHlwZUluZm9ybWF0aW9uUmVx
dWVzdEZvck5vZGUpOworCisgICAgICAgIGZ1bmN0aW9uIGhhbmRsZVR5cGVzKGVycm9yLCB0eXBl
SW5mb3JtYXRpb25BcnJheSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGVycm9yKQorICAg
ICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgY29uc29sZS5hc3NlcnQodHlwZUlu
Zm9ybWF0aW9uQXJyYXkubGVuZ3RoID09PSBhbGxSZXF1ZXN0cy5sZW5ndGgpOworCisgICAgICAg
ICAgICB2YXIgaTsKKyAgICAgICAgICAgIHZhciBub2RlOworICAgICAgICAgICAgdmFyIHR5cGVJ
bmZvcm1hdGlvbjsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0eXBlSW5mb3JtYXRpb25B
cnJheS5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIG5vZGUgPSBhbGxSZXF1ZXN0Tm9k
ZXNbaV07CisgICAgICAgICAgICAgICAgdHlwZUluZm9ybWF0aW9uID0gdHlwZUluZm9ybWF0aW9u
QXJyYXlbaV07CisgICAgICAgICAgICAgICAgaWYgKGFsbFJlcXVlc3RzW2ldLnR5cGVJbmZvcm1h
dGlvbkRlc2NyaXB0b3IgPT09IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLlR5cGVQcm9m
aWxlclNlYXJjaERlc2NyaXB0b3IuRnVuY3Rpb25SZXR1cm4pCisgICAgICAgICAgICAgICAgICAg
IG5vZGUuX2F0dGFjaG1lbnRzLl9yZXR1cm5UeXBlcyA9IHR5cGVJbmZvcm1hdGlvbjsKKyAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG5vZGUuX2F0dGFjaG1lbnRzLl90
eXBlcyA9IHR5cGVJbmZvcm1hdGlvbjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2Fs
bGJhY2soKTsKKyAgICAgICAgfQorCisgICAgICAgIFJ1bnRpbWVBZ2VudC5nZXRSdW50aW1lVHlw
ZXNGb3JWYXJpYWJsZXNBdE9mZnNldHMoYWxsUmVxdWVzdHMsIGhhbmRsZVR5cGVzKTsKKyAgICB9
LAorCisgICAgLy8gUHJpdmF0ZQorCisgICAgX2RlZmF1bHRQYXJzZXJTdGF0ZTogZnVuY3Rpb24o
KSAKKyAgICB7CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBzaG91bGRTdG9wRWFybHk6
IGZhbHNlLAorICAgICAgICAgICAgc2tpcENoaWxkTm9kZXM6IGZhbHNlCisgICAgICAgIH07Cisg
ICAgfSwKKworICAgIF9yZWN1cnNlOiBmdW5jdGlvbihub2RlLCBmdW5jLCBzdGF0ZSkgCisgICAg
eworICAgICAgICBpZiAoIW5vZGUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYg
KHN0YXRlLnNob3VsZFN0b3BFYXJseSB8fCBzdGF0ZS5za2lwQ2hpbGROb2RlcykKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBzd2l0Y2ggKG5vZGUudHlwZSkgeworICAgICAgICBjYXNl
IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkFzc2lnbm1lbnRFeHByZXNz
aW9uOgorICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9y
ZWN1cnNlKG5vZGUubGVmdCwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJz
ZShub2RlLnJpZ2h0LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5BcnJheUV4cHJlc3Np
b246CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3Jl
Y3Vyc2VBcnJheShub2RlLmVsZW1lbnRzLCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5C
bG9ja1N0YXRlbWVudDoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAg
ICAgdGhpcy5fcmVjdXJzZUFycmF5KG5vZGUuYm9keSwgZnVuYywgc3RhdGUpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9k
ZVR5cGUuQmluYXJ5RXhwcmVzc2lvbjoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOwor
ICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmxlZnQsIGZ1bmMsIHN0YXRlKTsKKyAgICAg
ICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5yaWdodCwgZnVuYywgc3RhdGUpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9k
ZVR5cGUuQnJlYWtTdGF0ZW1lbnQ6CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhU
cmVlLk5vZGVUeXBlLkNhdGNoQ2xhdXNlOgorICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7
CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUucGFyYW0sIGZ1bmMsIHN0YXRlKTsKKyAg
ICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5ib2R5LCBmdW5jLCBzdGF0ZSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5O
b2RlVHlwZS5DYWxsRXhwcmVzc2lvbjoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOwor
ICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmNhbGxlZSwgZnVuYywgc3RhdGUpOworICAg
ICAgICAgICAgdGhpcy5fcmVjdXJzZUFycmF5KG5vZGUuYXJndW1lbnRzLCBmdW5jLCBzdGF0ZSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3lu
dGF4VHJlZS5Ob2RlVHlwZS5Db250aW51ZVN0YXRlbWVudDoKKyAgICAgICAgICAgIGZ1bmMobm9k
ZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmxhYmVsLCBmdW5jLCBz
dGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2Ny
aXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5Eb1doaWxlU3RhdGVtZW50OgorICAgICAgICAgICAgZnVu
Yyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuYm9keSwgZnVu
Yywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLnRlc3QsIGZ1bmMsIHN0
YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3Jp
cHRTeW50YXhUcmVlLk5vZGVUeXBlLkRlYnVnZ2VyU3RhdGVtZW50OgorICAgICAgICAgICAgZnVu
Yyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNw
ZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5FbXB0eVN0YXRlbWVudDoKKyAgICAgICAg
ICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
V2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuRXhwcmVzc2lvblN0YXRlbWVu
dDoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVj
dXJzZShub2RlLmV4cHJlc3Npb24sIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkZvclN0
YXRlbWVudDoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhp
cy5fcmVjdXJzZShub2RlLmluaXQsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3Jl
Y3Vyc2Uobm9kZS50ZXN0LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNl
KG5vZGUudXBkYXRlLCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5v
ZGUuYm9keSwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
V2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuRm9ySW5TdGF0ZW1lbnQ6Cisg
ICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uo
bm9kZS5sZWZ0LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUu
cmlnaHQsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5ib2R5
LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNw
ZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5GdW5jdGlvbkRlY2xhcmF0aW9uOgorICAg
ICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5v
ZGUuaWQsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2VBcnJheShub2Rl
LnBhcmFtcywgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmJv
ZHksIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYklu
c3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkZ1bmN0aW9uRXhwcmVzc2lvbjoKKyAg
ICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShu
b2RlLmlkLCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlQXJyYXkobm9k
ZS5wYXJhbXMsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5i
b2R5LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJJ
bnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5JZGVudGlmaWVyOgorICAgICAgICAg
ICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBX
ZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5JZlN0YXRlbWVudDoKKyAgICAg
ICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2Rl
LnRlc3QsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5jb25z
ZXF1ZW50LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuYWx0
ZXJuYXRlLCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBX
ZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5MaXRlcmFsOgorICAgICAgICAg
ICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBX
ZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5MYWJlbGVkU3RhdGVtZW50Ogor
ICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNl
KG5vZGUubGFiZWwsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9k
ZS5ib2R5LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBX
ZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5Mb2dpY2FsRXhwcmVzc2lvbjoK
KyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJz
ZShub2RlLmxlZnQsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9k
ZS5yaWdodCwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
V2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuTWVtYmVyRXhwcmVzc2lvbjoK
KyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJz
ZShub2RlLm9iamVjdCwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShu
b2RlLnByb3BlcnR5LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5OZXdFeHByZXNzaW9u
OgorICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1
cnNlKG5vZGUuY2FsbGVlLCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNl
QXJyYXkobm9kZS5hcmd1bWVudHMsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLk9iamVj
dEV4cHJlc3Npb246CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAg
IHRoaXMuX3JlY3Vyc2VBcnJheShub2RlLnByb3BlcnRpZXMsIGZ1bmMsIHN0YXRlKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVl
Lk5vZGVUeXBlLlByb2dyYW06CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAg
ICAgICAgIHRoaXMuX3JlY3Vyc2VBcnJheShub2RlLmJvZHksIGZ1bmMsIHN0YXRlKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVl
Lk5vZGVUeXBlLlByb3BlcnR5OgorICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAg
ICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUua2V5LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAg
ICB0aGlzLl9yZWN1cnNlKG5vZGUudmFsdWUsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBl
LlJldHVyblN0YXRlbWVudDoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAg
ICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmFyZ3VtZW50LCBmdW5jLCBzdGF0ZSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5O
b2RlVHlwZS5TZXF1ZW5jZUV4cHJlc3Npb246CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRl
KTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2VBcnJheShub2RlLmV4cHJlc3Npb25zLCBmdW5j
LCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3Iu
U2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5Td2l0Y2hTdGF0ZW1lbnQ6CisgICAgICAgICAgICBm
dW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5kaXNjcmlt
aW5hbnQsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2VBcnJheShub2Rl
LmNhc2VzLCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBX
ZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5Td2l0Y2hDYXNlOgorICAgICAg
ICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUu
dGVzdCwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZUFycmF5KG5vZGUu
Y29uc2VxdWVudCwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuQ29uZGl0aW9uYWxFeHBy
ZXNzaW9uOgorICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlz
Ll9yZWN1cnNlKG5vZGUudGVzdCwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVj
dXJzZShub2RlLmNvbnNlcXVlbnQsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3Jl
Y3Vyc2Uobm9kZS5hbHRlcm5hdGUsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlRoaXNF
eHByZXNzaW9uOgorICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlw
ZS5UaHJvd1N0YXRlbWVudDoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAg
ICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmFyZ3VtZW50LCBmdW5jLCBzdGF0ZSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5O
b2RlVHlwZS5UcnlTdGF0ZW1lbnQ6CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAg
ICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5ibG9jaywgZnVuYywgc3RhdGUpOworICAgICAg
ICAgICAgdGhpcy5fcmVjdXJzZUFycmF5KG5vZGUuZ3VhcmRlZEhhbmRsZXJzLCBmdW5jLCBzdGF0
ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlQXJyYXkobm9kZS5oYW5kbGVycywgZnVuYywg
c3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmZpbmFsaXplciwgZnVuYywg
c3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNj
cmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuVW5hcnlFeHByZXNzaW9uOgorICAgICAgICAgICAgZnVu
Yyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuYXJndW1lbnQs
IGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkluc3Bl
Y3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlVwZGF0ZUV4cHJlc3Npb246CisgICAgICAg
ICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5h
cmd1bWVudCwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
V2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuVmFyaWFibGVEZWNsYXJhdGlv
bjoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVj
dXJzZUFycmF5KG5vZGUuZGVjbGFyYXRpb25zLCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlw
ZS5WYXJpYWJsZURlY2xhcmF0b3I6CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAg
ICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5pZCwgZnVuYywgc3RhdGUpOworICAgICAgICAg
ICAgdGhpcy5fcmVjdXJzZShub2RlLmluaXQsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBl
LldoaWxlU3RhdGVtZW50OgorICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAg
ICAgICB0aGlzLl9yZWN1cnNlKG5vZGUudGVzdCwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAg
dGhpcy5fcmVjdXJzZShub2RlLmJvZHksIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLldp
dGhTdGF0ZW1lbnQ6CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAg
IHRoaXMuX3JlY3Vyc2Uobm9kZS5vYmplY3QsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIHRo
aXMuX3JlY3Vyc2Uobm9kZS5ib2R5LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorCisgICAgICAgIHN0YXRlLnNraXBDaGlsZE5vZGVzID0gZmFsc2U7CisgICAg
fSwKKworICAgIF9yZWN1cnNlQXJyYXk6IGZ1bmN0aW9uKGFycmF5LCBmdW5jLCBzdGF0ZSkgCisg
ICAgeworICAgICAgICBmdW5jdGlvbiBmb3JFYWNoKG5vZGUpIHsKKyAgICAgICAgICAgIHRoaXMu
X3JlY3Vyc2Uobm9kZSwgZnVuYywgc3RhdGUpOworICAgICAgICB9CisKKyAgICAgICAgYXJyYXku
Zm9yRWFjaChmb3JFYWNoLmJpbmQodGhpcykpOworICAgIH0sCisgICAgCisgICAgLy8gVGhpcyBm
dW5jdGlvbiB0cmFuc2xhdGVzIGZyb20gZXNwcmltYSdzIEFic3RyYWN0IFN5bnRheCBUcmVlIHRv
IG91cnMuIAorICAgIC8vIE1vc3RseSwgdGhpcyBpcyBqdXN0IHRoZSBpZGVudGl0eSBmdW5jdGlv
bi4gV2UndmUgYWRkZWQgYW4gZXh0cmEgaXNHZXR0ZXJPclNldHRlciBwcm9wZXJ0eSBmb3IgZnVu
Y3Rpb25zLgorICAgIC8vIE91ciBBU1QgY29tcGxpZXMgd2l0aCB0aGUgTW96aWxsYSBwYXJzZXIg
QVBJOgorICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvTW96
aWxsYS9Qcm9qZWN0cy9TcGlkZXJNb25rZXkvUGFyc2VyX0FQSQorICAgIF9jcmVhdGVJbnRlcm5h
bFN5bnRheFRyZWU6IGZ1bmN0aW9uKG5vZGUpIAorICAgIHsKKyAgICAgICAgaWYgKCFub2RlKQor
ICAgICAgICAgICAgcmV0dXJuIG51bGw7CisKKyAgICAgICAgdmFyIHJlc3VsdCA9IG51bGw7Cisg
ICAgICAgIHN3aXRjaCAobm9kZS50eXBlKSB7CisgICAgICAgIGNhc2UgIkFzc2lnbm1lbnRFeHBy
ZXNzaW9uIjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBX
ZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5Bc3NpZ25tZW50RXhwcmVzc2lv
biwKKyAgICAgICAgICAgICAgICBvcGVyYXRvcjogbm9kZS5vcGVyYXRvciwKKyAgICAgICAgICAg
ICAgICBsZWZ0OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5sZWZ0KSwKKyAg
ICAgICAgICAgICAgICByaWdodDogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUu
cmlnaHQpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
IkFycmF5RXhwcmVzc2lvbiI6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAg
ICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuQXJyYXlFeHBy
ZXNzaW9uLAorICAgICAgICAgICAgICAgIGVsZW1lbnRzOiBub2RlLmVsZW1lbnRzLm1hcCh0aGlz
Ll9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUuYmluZCh0aGlzKSkKKyAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiQmxvY2tTdGF0ZW1lbnQiOgorICAgICAg
ICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3Jp
cHRTeW50YXhUcmVlLk5vZGVUeXBlLkJsb2NrU3RhdGVtZW50LAorICAgICAgICAgICAgICAgIGJv
ZHk6IG5vZGUuYm9keS5tYXAodGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlLmJpbmQodGhp
cykpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgIkJp
bmFyeUV4cHJlc3Npb24iOgorICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAg
IHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkJpbmFyeUV4cHJl
c3Npb24sCisgICAgICAgICAgICAgICAgb3BlcmF0b3I6IG5vZGUub3BlcmF0b3IsCisgICAgICAg
ICAgICAgICAgbGVmdDogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUubGVmdCks
CisgICAgICAgICAgICAgICAgcmlnaHQ6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShu
b2RlLnJpZ2h0KQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlICJCcmVha1N0YXRlbWVudCI6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAg
ICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuQnJlYWtT
dGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuX2NyZWF0ZUludGVybmFsU3lu
dGF4VHJlZShub2RlLmxhYmVsKQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlICJDYWxsRXhwcmVzc2lvbiI6CisgICAgICAgICAgICByZXN1bHQgPSB7Cisg
ICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5
cGUuQ2FsbEV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgY2FsbGVlOiB0aGlzLl9jcmVhdGVJ
bnRlcm5hbFN5bnRheFRyZWUobm9kZS5jYWxsZWUpLAorICAgICAgICAgICAgICAgIGFyZ3VtZW50
czogbm9kZS5hcmd1bWVudHMubWFwKHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZS5iaW5k
KHRoaXMpKQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
ICJDYXRjaENsYXVzZSI6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAg
dHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuQ2F0Y2hDbGF1c2Us
CisgICAgICAgICAgICAgICAgcGFyYW06IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShu
b2RlLnBhcmFtKSwKKyAgICAgICAgICAgICAgICBib2R5OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5
bnRheFRyZWUobm9kZS5ib2R5KQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlICJDb25kaXRpb25hbEV4cHJlc3Npb24iOgorICAgICAgICAgICAgcmVzdWx0
ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVl
Lk5vZGVUeXBlLkNvbmRpdGlvbmFsRXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICB0ZXN0OiB0
aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS50ZXN0KSwKKyAgICAgICAgICAgICAg
ICBjb25zZXF1ZW50OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5jb25zZXF1
ZW50KSwKKyAgICAgICAgICAgICAgICBhbHRlcm5hdGU6IHRoaXMuX2NyZWF0ZUludGVybmFsU3lu
dGF4VHJlZShub2RlLmFsdGVybmF0ZSkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSAiQ29udGludWVTdGF0ZW1lbnQiOgorICAgICAgICAgICAgcmVzdWx0
ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVl
Lk5vZGVUeXBlLkNvbnRpbnVlU3RhdGVtZW50LAorICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlz
Ll9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5sYWJlbCkKKyAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiRG9XaGlsZVN0YXRlbWVudCI6CisgICAg
ICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNj
cmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuRG9XaGlsZVN0YXRlbWVudCwKKyAgICAgICAgICAgICAg
ICBib2R5OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5ib2R5KSwKKyAgICAg
ICAgICAgICAgICB0ZXN0OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS50ZXN0
KQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJEZWJ1
Z2dlclN0YXRlbWVudCI6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAg
dHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuRGVidWdnZXJTdGF0
ZW1lbnQKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAi
RW1wdHlTdGF0ZW1lbnQiOgorICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAg
IHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkVtcHR5U3RhdGVt
ZW50CisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgIkV4
cHJlc3Npb25TdGF0ZW1lbnQiOgorICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAg
ICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkV4cHJlc3Np
b25TdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogdGhpcy5fY3JlYXRlSW50
ZXJuYWxTeW50YXhUcmVlKG5vZGUuZXhwcmVzc2lvbikKKyAgICAgICAgICAgIH07CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiRm9yU3RhdGVtZW50IjoKKyAgICAgICAgICAgIHJl
c3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4
VHJlZS5Ob2RlVHlwZS5Gb3JTdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgaW5pdDogdGhpcy5f
Y3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUuaW5pdCksCisgICAgICAgICAgICAgICAgdGVz
dDogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUudGVzdCksCisgICAgICAgICAg
ICAgICAgdXBkYXRlOiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS51cGRhdGUp
LAorICAgICAgICAgICAgICAgIGJvZHk6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShu
b2RlLmJvZHkpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgIkZvckluU3RhdGVtZW50IjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAg
ICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5Gb3JJblN0
YXRlbWVudCwKKyAgICAgICAgICAgICAgICBsZWZ0OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRh
eFRyZWUobm9kZS5sZWZ0KSwKKyAgICAgICAgICAgICAgICByaWdodDogdGhpcy5fY3JlYXRlSW50
ZXJuYWxTeW50YXhUcmVlKG5vZGUucmlnaHQpLAorICAgICAgICAgICAgICAgIGJvZHk6IHRoaXMu
X2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmJvZHkpCisgICAgICAgICAgICB9OworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgIkZ1bmN0aW9uRGVjbGFyYXRpb24iOgorICAg
ICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5T
Y3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkZ1bmN0aW9uRGVjbGFyYXRpb24sCisgICAgICAgICAg
ICAgICAgaWQ6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmlkKSwKKyAgICAg
ICAgICAgICAgICBwYXJhbXM6IG5vZGUucGFyYW1zLm1hcCh0aGlzLl9jcmVhdGVJbnRlcm5hbFN5
bnRheFRyZWUuYmluZCh0aGlzKSksCisgICAgICAgICAgICAgICAgYm9keTogdGhpcy5fY3JlYXRl
SW50ZXJuYWxTeW50YXhUcmVlKG5vZGUuYm9keSksCisgICAgICAgICAgICAgICAgaXNHZXR0ZXJP
clNldHRlcjogZmFsc2UgLy8gVGhpcyBpcyBvYnZpb3VzLCBidXQgaXMgY29udmVuaWVudCBub25l
IHRoZSBsZXNzIGIvYyBEZWNsYXJhdGlvbnMgYW5kIEV4cHJlc3Npb25zIGFyZSBvZnRlbiBpbnRl
cnR3aW5lZC4KKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSAiRnVuY3Rpb25FeHByZXNzaW9uIjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAg
ICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5GdW5j
dGlvbkV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgaWQ6IHRoaXMuX2NyZWF0ZUludGVybmFs
U3ludGF4VHJlZShub2RlLmlkKSwKKyAgICAgICAgICAgICAgICBwYXJhbXM6IG5vZGUucGFyYW1z
Lm1hcCh0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUuYmluZCh0aGlzKSksCisgICAgICAg
ICAgICAgICAgYm9keTogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUuYm9keSks
CisgICAgICAgICAgICAgICAgaXNHZXR0ZXJPclNldHRlcjogZmFsc2UgLy8gSWYgdHJ1ZSwgaXQg
aXMgc2V0IGluIHRoZSBQcm9wZXJ0eSBBU1Qgbm9kZS4KKyAgICAgICAgICAgIH07CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiSWRlbnRpZmllciI6CisgICAgICAgICAgICByZXN1
bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRy
ZWUuTm9kZVR5cGUuSWRlbnRpZmllciwKKyAgICAgICAgICAgICAgICBuYW1lOiBub2RlLm5hbWUK
KyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiSWZTdGF0
ZW1lbnQiOgorICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdl
Ykluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLklmU3RhdGVtZW50LAorICAgICAg
ICAgICAgICAgIHRlc3Q6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLnRlc3Qp
LAorICAgICAgICAgICAgICAgIGNvbnNlcXVlbnQ6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4
VHJlZShub2RlLmNvbnNlcXVlbnQpLAorICAgICAgICAgICAgICAgIGFsdGVybmF0ZTogdGhpcy5f
Y3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUuYWx0ZXJuYXRlKQorICAgICAgICAgICAgfTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJMaXRlcmFsIjoKKyAgICAgICAgICAg
IHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3lu
dGF4VHJlZS5Ob2RlVHlwZS5MaXRlcmFsLAorICAgICAgICAgICAgICAgIHZhbHVlOiBub2RlLnZh
bHVlLAorICAgICAgICAgICAgICAgIHJhdzogbm9kZS5yYXcKKyAgICAgICAgICAgIH07CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiTGFiZWxlZFN0YXRlbWVudCI6CisgICAgICAg
ICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlw
dFN5bnRheFRyZWUuTm9kZVR5cGUuTGFiZWxlZFN0YXRlbWVudCwKKyAgICAgICAgICAgICAgICBs
YWJlbDogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUubGFiZWwpLAorICAgICAg
ICAgICAgICAgIGJvZHk6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmJvZHkp
CisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgIkxvZ2lj
YWxFeHByZXNzaW9uIjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0
eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5Mb2dpY2FsRXhwcmVz
c2lvbiwKKyAgICAgICAgICAgICAgICBsZWZ0OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRy
ZWUobm9kZS5sZWZ0KSwKKyAgICAgICAgICAgICAgICByaWdodDogdGhpcy5fY3JlYXRlSW50ZXJu
YWxTeW50YXhUcmVlKG5vZGUucmlnaHQpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgIk1lbWJlckV4cHJlc3Npb24iOgorICAgICAgICAgICAgcmVzdWx0
ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVl
Lk5vZGVUeXBlLk1lbWJlckV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgb2JqZWN0OiB0aGlz
Ll9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5vYmplY3QpLAorICAgICAgICAgICAgICAg
IHByb3BlcnR5OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5wcm9wZXJ0eSkK
KyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiTmV3RXhw
cmVzc2lvbiI6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTog
V2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuTmV3RXhwcmVzc2lvbiwKKyAg
ICAgICAgICAgICAgICBjYWxsZWU6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2Rl
LmNhbGxlZSksCisgICAgICAgICAgICAgICAgYXJndW1lbnRzOiBub2RlLmFyZ3VtZW50cy5tYXAo
dGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlLmJpbmQodGhpcykpCisgICAgICAgICAgICB9
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgIk9iamVjdEV4cHJlc3Npb24iOgor
ICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rv
ci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLk9iamVjdEV4cHJlc3Npb24sCisgICAgICAgICAg
ICAgICAgcHJvcGVydGllczogbm9kZS5wcm9wZXJ0aWVzLm1hcCh0aGlzLl9jcmVhdGVJbnRlcm5h
bFN5bnRheFRyZWUuYmluZCh0aGlzKSkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSAiUHJvZ3JhbSI6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAg
ICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUu
UHJvZ3JhbSwKKyAgICAgICAgICAgICAgICBib2R5OiBub2RlLmJvZHkubWFwKHRoaXMuX2NyZWF0
ZUludGVybmFsU3ludGF4VHJlZS5iaW5kKHRoaXMpKQorICAgICAgICAgICAgfTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlICJQcm9wZXJ0eSI6CisgICAgICAgICAgICByZXN1bHQg
PSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUu
Tm9kZVR5cGUuUHJvcGVydHksCisgICAgICAgICAgICAgICAga2V5OiB0aGlzLl9jcmVhdGVJbnRl
cm5hbFN5bnRheFRyZWUobm9kZS5rZXkpLAorICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLl9j
cmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS52YWx1ZSksCisgICAgICAgICAgICAgICAga2lu
ZDogbm9kZS5raW5kCisgICAgICAgICAgICB9OworICAgICAgICAgICAgaWYgKHJlc3VsdC5raW5k
ID09PSAiZ2V0IiB8fCByZXN1bHQua2luZCA9PT0gInNldCIpIHsKKyAgICAgICAgICAgICAgICBy
ZXN1bHQudmFsdWUuaXNHZXR0ZXJPclNldHRlciA9IHRydWU7CisgICAgICAgICAgICAgICAgcmVz
dWx0LnZhbHVlLmdldHRlck9yU2V0dGVyUmFuZ2UgPSByZXN1bHQua2V5LnJhbmdlOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgIlJldHVyblN0YXRlbWVu
dCI6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5z
cGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuUmV0dXJuU3RhdGVtZW50LAorICAgICAg
ICAgICAgICAgIGFyZ3VtZW50OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5h
cmd1bWVudCkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSAiU2VxdWVuY2VFeHByZXNzaW9uIjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAg
ICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5TZXF1
ZW5jZUV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnM6IG5vZGUuZXhwcmVz
c2lvbnMubWFwKHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZS5iaW5kKHRoaXMpKQorICAg
ICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJTd2l0Y2hTdGF0
ZW1lbnQiOgorICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdl
Ykluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlN3aXRjaFN0YXRlbWVudCwKKyAg
ICAgICAgICAgICAgICBkaXNjcmltaW5hbnQ6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJl
ZShub2RlLmRpc2NyaW1pbmFudCksCisgICAgICAgICAgICAgICAgY2FzZXM6IG5vZGUuY2FzZXMu
bWFwKHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZS5iaW5kKHRoaXMpKQorICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJTd2l0Y2hDYXNlIjoKKyAg
ICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3Iu
U2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5Td2l0Y2hDYXNlLAorICAgICAgICAgICAgICAgIHRl
c3Q6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLnRlc3QpLAorICAgICAgICAg
ICAgICAgIGNvbnNlcXVlbnQ6IG5vZGUuY29uc2VxdWVudC5tYXAodGhpcy5fY3JlYXRlSW50ZXJu
YWxTeW50YXhUcmVlLmJpbmQodGhpcykpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgIlRoaXNFeHByZXNzaW9uIjoKKyAgICAgICAgICAgIHJlc3VsdCA9
IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5O
b2RlVHlwZS5UaGlzRXhwcmVzc2lvbgorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlICJUaHJvd1N0YXRlbWVudCI6CisgICAgICAgICAgICByZXN1bHQgPSB7
CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9k
ZVR5cGUuVGhyb3dTdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgYXJndW1lbnQ6IHRoaXMuX2Ny
ZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmFyZ3VtZW50KQorICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJUcnlTdGF0ZW1lbnQiOgorICAgICAgICAg
ICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRT
eW50YXhUcmVlLk5vZGVUeXBlLlRyeVN0YXRlbWVudCwKKyAgICAgICAgICAgICAgICBibG9jazog
dGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUuYmxvY2spLAorICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBXaGF0IGFyZSBndWFyZGVkIGhhbmRsZXJzPworICAgICAgICAgICAgICAg
IGd1YXJkZWRIYW5kbGVyczogbm9kZS5ndWFyZGVkSGFuZGxlcnMubWFwKHRoaXMuX2NyZWF0ZUlu
dGVybmFsU3ludGF4VHJlZS5iaW5kKHRoaXMpKSwKKyAgICAgICAgICAgICAgICBoYW5kbGVyczog
bm9kZS5oYW5kbGVycy5tYXAodGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlLmJpbmQodGhp
cykpLAorICAgICAgICAgICAgICAgIGZpbmFsaXplcjogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50
YXhUcmVlKG5vZGUuZmluYWxpemVyKQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlICJVbmFyeUV4cHJlc3Npb24iOgorICAgICAgICAgICAgcmVzdWx0ID0g
eworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5v
ZGVUeXBlLlVuYXJ5RXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICBvcGVyYXRvcjogbm9kZS5v
cGVyYXRvciwKKyAgICAgICAgICAgICAgICBhcmd1bWVudDogdGhpcy5fY3JlYXRlSW50ZXJuYWxT
eW50YXhUcmVlKG5vZGUuYXJndW1lbnQpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgIlVwZGF0ZUV4cHJlc3Npb24iOgorICAgICAgICAgICAgcmVzdWx0
ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVl
Lk5vZGVUeXBlLlVwZGF0ZUV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgb3BlcmF0b3I6IG5v
ZGUub3BlcmF0b3IsCisgICAgICAgICAgICAgICAgcHJlZml4OiBub2RlLnByZWZpeCwKKyAgICAg
ICAgICAgICAgICBhcmd1bWVudDogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUu
YXJndW1lbnQpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgIlZhcmlhYmxlRGVjbGFyYXRpb24iOgorICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAg
ICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlZh
cmlhYmxlRGVjbGFyYXRpb24sCisgICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zOiBub2RlLmRl
Y2xhcmF0aW9ucy5tYXAodGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlLmJpbmQodGhpcykp
CisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgIlZhcmlh
YmxlRGVjbGFyYXRvciI6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAg
dHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuVmFyaWFibGVEZWNs
YXJhdG9yLAorICAgICAgICAgICAgICAgIGlkOiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRy
ZWUobm9kZS5pZCksCisgICAgICAgICAgICAgICAgaW5pdDogdGhpcy5fY3JlYXRlSW50ZXJuYWxT
eW50YXhUcmVlKG5vZGUuaW5pdCkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSAiV2hpbGVTdGF0ZW1lbnQiOgorICAgICAgICAgICAgcmVzdWx0ID0gewor
ICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVU
eXBlLldoaWxlU3RhdGVtZW50LAorICAgICAgICAgICAgICAgIHRlc3Q6IHRoaXMuX2NyZWF0ZUlu
dGVybmFsU3ludGF4VHJlZShub2RlLnRlc3QpLAorICAgICAgICAgICAgICAgIGJvZHk6IHRoaXMu
X2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmJvZHkpCisgICAgICAgICAgICB9OworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgIldpdGhTdGF0ZW1lbnQiOgorICAgICAgICAg
ICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRT
eW50YXhUcmVlLk5vZGVUeXBlLldpdGhTdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgb2JqZWN0
OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5vYmplY3QpLAorICAgICAgICAg
ICAgICAgIGJvZHk6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmJvZHkpCisg
ICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBjb25zb2xlLmVycm9yKCJVbnN1cHBvcnRlZCBTeW50YXggVHJlZSBOb2RlOiAiICsg
bm9kZS50eXBlLCBub2RlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmVzdWx0LnJh
bmdlID0gbm9kZS5yYW5nZTsKKyAgICAgICAgLy8gVGhpcyBpcyBhbiBvYmplY3QgZm9yIHdoaWNo
IHlvdSBjYW4gYWRkIGZpZWxkcyB0byBhbiBBU1Qgbm9kZSB3aXRob3V0IHdvcnJ5aW5nIGFib3V0
IHBvbGx1dGluZyB0aGUgc3ludGF4LXJlbGF0ZWQgZmllbGRzIG9mIHRoZSBub2RlLgorICAgICAg
ICByZXN1bHQuX2F0dGFjaG1lbnRzID0ge307IAorCisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorfTsKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCitXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZSA9IGZ1
bmN0aW9uKHNvdXJjZVRleHQsIHNjcmlwdCkKK3sKKyAgICBjb25zb2xlLmFzc2VydChzY3JpcHQg
JiYgc2NyaXB0IGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLlNjcmlwdCwgc2NyaXB0KTsKKyAgICBX
ZWJJbnNwZWN0b3IuT2JqZWN0LmNhbGwodGhpcyk7CisgICAgdGhpcy5fc2NyaXB0ID0gc2NyaXB0
OworCisgICAgdmFyIGVzcHJpbWFTeW50YXhUcmVlID0gV2ViSW5zcGVjdG9yLl9lc3ByaW1hLnBh
cnNlKHNvdXJjZVRleHQsIHtyYW5nZTogdHJ1ZX0pOworICAgIHRoaXMuX3N5bnRheFRyZWUgPSB0
aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUoZXNwcmltYVN5bnRheFRyZWUpOworfTsKKwor
Ly8gVGhpcyBzaG91bGQgYmUga2VwdCBpbiBzeW5jIHdpdGggYW4gZW51bSBpbiBKYXZhU2NpcHRD
b3JlL3J1bnRpbWUvSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyLmgKK1dlYkluc3BlY3Rvci5TY3Jp
cHRTeW50YXhUcmVlLlR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3IgPSB7CisgICAgTm9ybWFs
RXhwcmVzc2lvbjogMSwKKyAgICBGdW5jdGlvblJldHVybjogMgorfTsKKworV2ViSW5zcGVjdG9y
LlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUgPSB7CisgICAgQXNzaWdubWVudEV4cHJlc3Npb246
ICJzY3JpcHQtc3ludGF4LXRyZWUtbm9kZS10eXBlLWFzc2lnbm1lbnQtZXhwcmVzc2lvbiIsCisg
ICAgQXJyYXlFeHByZXNzaW9uOiAic2NyaXB0LXN5bnRheC10cmVlLW5vZGUtdHlwZS1hcnJheS1l
eHByZXNzaW9uIiwKKyAgICBCbG9ja1N0YXRlbWVudDogInNjcmlwdC1zeW50YXgtdHJlZS1ub2Rl
LXR5cGUtYmxvY2stc3RhdGVtZW50IiwKKyAgICBCaW5hcnlFeHByZXNzaW9uOiAic2NyaXB0LXN5
bnRheC10cmVlLW5vZGUtdHlwZS1iaW5hcnktZXhwcmVzc2lvbiIsCisgICAgQnJlYWtTdGF0ZW1l
bnQ6ICJzY3JpcHQtc3ludGF4LXRyZWUtbm9kZS10eXBlLWJyZWFrLXN0YXRlbWVudCIsCisgICAg
Q2F0Y2hDbGF1c2U6ICJzY3JpcHQtc3ludGF4LXRyZWUtbm9kZS10eXBlLWNhdGNoLWNsYXVzZSIs
CisgICAgQ29udGludWVTdGF0ZW1lbnQ6ICJzY3JpcHQtc3ludGF4LXRyZWUtbm9kZS10eXBlLWNv
bnRpbnVlLXN0YXRlbWVudCIsCisgICAgRG9XaGlsZVN0YXRlbWVudDogInNjcmlwdC1zeW50YXgt
dHJlZS1ub2RlLXR5cGUtZG8td2hpbGUtc3RhdGVtZW50IiwKKyAgICBEZWJ1Z2dlclN0YXRlbWVu
dDogInNjcmlwdC1zeW50YXgtdHJlZS1ub2RlLXR5cGUtZGVidWdnZXItc3RhdGVtZW50IiwKKyAg
ICBFbXB0eVN0YXRlbWVudDogInNjcmlwdC1zeW50YXgtdHJlZS1ub2RlLXR5cGUtZW1wdHktc3Rh
dGVtZW50IiwKKyAgICBFeHByZXNzaW9uU3RhdGVtZW50OiAic2NyaXB0LXN5bnRheC10cmVlLW5v
ZGUtdHlwZS1leHByZXNzaW9uLXN0YXRlbWVudCIsCisgICAgRm9yU3RhdGVtZW50OiAic2NyaXB0
LXN5bnRheC10cmVlLW5vZGUtdHlwZS1mb3Itc3RhdGVtZW50IiwKKyAgICBGb3JJblN0YXRlbWVu
dDogInNjcmlwdC1zeW50YXgtdHJlZS1ub2RlLXR5cGUtZm9yLWluLXN0YXRlbWVudCIsCisgICAg
RnVuY3Rpb25DYWxsRXhwcmVzc2lvbjogInNjcmlwdC1zeW50YXgtdHJlZS1ub2RlLXR5cGUtZnVu
Y3Rpb24tY2FsbC1leHByZXNzaW9uIiwKKyAgICBGdW5jdGlvbkRlY2xhcmF0aW9uOiAic2NyaXB0
LXN5bnRheC10cmVlLW5vZGUtdHlwZS1mdW5jdGlvbi1kZWNsYXJhdGlvbiIsCisgICAgRnVuY3Rp
b25FeHByZXNzaW9uOiAic2NyaXB0LXN5bnRheC10cmVlLW5vZGUtdHlwZS1mdW5jdGlvbi1leHBy
ZXNzaW9uIiwKKyAgICBJZGVudGlmaWVyOiAic2NyaXB0LXN5bnRheC10cmVlLW5vZGUtdHlwZS1p
ZGVudGlmaWVyIiwKKyAgICBJZlN0YXRlbWVudDogInNjcmlwdC1zeW50YXgtdHJlZS1ub2RlLXR5
cGUtaWYtc3RhdGVtZW50IiwKKyAgICBMaXRlcmFsOiAic2NyaXB0LXN5bnRheC10cmVlLW5vZGUt
dHlwZS1saXRlcmFsIiwKKyAgICBMYWJlbGVkU3RhdGVtZW50OiAic2NyaXB0LXN5bnRheC10cmVl
LW5vZGUtdHlwZS1sYWJlbGVkLXN0YXRlbWVudCIsCisgICAgTG9naWNhbEV4cHJlc3Npb246ICJz
Y3JpcHQtc3ludGF4LXRyZWUtbm9kZS10eXBlLWxvZ2ljYWwtZXhwcmVzc2lvbiIsCisgICAgTWVt
YmVyRXhwcmVzc2lvbjogInNjcmlwdC1zeW50YXgtdHJlZS1ub2RlLXR5cGUtbWVtYmVyLWV4cHJl
c3Npb24iLAorICAgIE5ld0V4cHJlc3Npb246ICJzY3JpcHQtc3ludGF4LXRyZWUtbm9kZS10eXBl
LW5ldy1leHByZXNzaW9uIiwKKyAgICBPYmplY3RFeHByZXNzaW9uOiAic2NyaXB0LXN5bnRheC10
cmVlLW5vZGUtdHlwZS1vYmplY3RFeHByZXNzaW9uIiwKKyAgICBQb3N0Zml4RXhwcmVzc2lvbjog
InNjcmlwdC1zeW50YXgtdHJlZS1ub2RlLXR5cGUtcG9zdGZpeC1leHByZXNzaW9uIiwKKyAgICBQ
cmVmaXhFeHByZXNzaW9uOiAic2NyaXB0LXN5bnRheC10cmVlLW5vZGUtdHlwZS1wcmVmaXgtZXhw
cmVzc2lvbiIsCisgICAgUHJvZ3JhbTogInNjcmlwdC1zeW50YXgtdHJlZS1ub2RlLXR5cGUtcHJv
Z3JhbSIsCisgICAgUHJvcGVydHk6ICJzY3JpcHQtc3ludGF4LXRyZWUtbm9kZS10eXBlLXByb3Bl
cnR5IiwKKyAgICBSZXR1cm5TdGF0ZW1lbnQ6ICJzY3JpcHQtc3ludGF4LXRyZWUtbm9kZS10eXBl
LXJldHVybi1zdGF0ZW1lbnQiLAorICAgIFNlcXVlbmNlRXhwcmVzc2lvbjogInNjcmlwdC1zeW50
YXgtdHJlZS1ub2RlLXR5cGUtc2VxdWVuY2UtZXhwcmVzc2lvbiIsCisgICAgU3dpdGNoU3RhdGVt
ZW50OiAic2NyaXB0LXN5bnRheC10cmVlLW5vZGUtdHlwZS1zd2l0Y2gtc3RhdGVtZW50IiwKKyAg
ICBTd2l0Y2hDYXNlOiAic2NyaXB0LXN5bnRheC10cmVlLW5vZGUtdHlwZS1zd2l0Y2gtY2FzZSIs
CisgICAgVGVybmFyeUV4cHJlc3Npb246ICJzY3JpcHQtc3ludGF4LXRyZWUtbm9kZS10eXBlLXRl
cm5hcnktZXhwcmVzc2lvbiIsCisgICAgVGhpc0V4cHJlc3Npb246ICJzY3JpcHQtc3ludGF4LXRy
ZWUtbm9kZS10eXBlLXRoaXMtZXhwcmVzc2lvbiIsCisgICAgVGhyb3dTdGF0ZW1lbnQ6ICJzY3Jp
cHQtc3ludGF4LXRyZWUtbm9kZS10eXBlLXRocm93LXN0YXRlbWVudCIsCisgICAgVHJ5U3RhdGVt
ZW50OiAic2NyaXB0LXN5bnRheC10cmVlLW5vZGUtdHlwZS10cnktc3RhdGVtZW50IiwKKyAgICBV
bmFyeUV4cHJlc3Npb246ICJzY3JpcHQtc3ludGF4LXRyZWUtbm9kZS10eXBlLXVuYXJ5LWV4cHJl
c3Npb24iLAorICAgIFZhcmlhYmxlRGVjbGFyYXRpb246ICJzY3JpcHQtc3ludGF4LXRyZWUtbm9k
ZS10eXBlLXZhcmlhYmxlLWRlY2xhcmF0aW9uIiwKKyAgICBWYXJpYWJsZURlY2xhcmF0b3I6ICJz
Y3JpcHQtc3ludGF4LXRyZWUtbm9kZS10eXBlLXZhcmlhYmxlLWRlY2xhcmF0b3IiLAorICAgIFdo
aWxlU3RhdGVtZW50OiAic2NyaXB0LXN5bnRheC10cmVlLW5vZGUtdHlwZS13aGlsZS1zdGF0ZW1l
bnQiLAorICAgIFdpdGhTdGF0ZW1lbnQ6ICJzY3JpcHQtc3ludGF4LXRyZWUtbm9kZS10eXBlLXdp
dGgtc3RhdGVtZW50IgorfTsKKworV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUucHJvdG90
eXBlID0geworICAgIGNvbnN0cnVjdG9yOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZSwK
KyAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlLAorCisgICAgLy8g
UHVibGljCisKKyAgICBmb3JFYWNoTm9kZTogZnVuY3Rpb24oZnVuYykKKyAgICB7CisgICAgICAg
IHRoaXMuX3JlY3Vyc2UodGhpcy5fc3ludGF4VHJlZSwgZnVuYywgdGhpcy5fZGVmYXVsdFBhcnNl
clN0YXRlKCkpOworICAgIH0sCisKKyAgICBmaWx0ZXI6IGZ1bmN0aW9uKHByZWRpY2F0ZUZ1bmN0
aW9uLCBzdGFydE5vZGUpIAorICAgIHsKKyAgICAgICAgY29uc29sZS5hc3NlcnQoc3RhcnROb2Rl
KTsKKworICAgICAgICB2YXIgbm9kZXMgPSBbXTsKKyAgICAgICAgZnVuY3Rpb24gZmlsdGVyKG5v
ZGUsIHN0YXRlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAocHJlZGljYXRlRnVuY3Rpb24o
bm9kZSkpCisgICAgICAgICAgICAgICAgbm9kZXMucHVzaChub2RlKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBzdGF0ZS5za2lwQ2hpbGROb2RlcyA9IHRydWU7IAorICAgICAg
ICB9CisgICAgICAgIHRoaXMuX3JlY3Vyc2Uoc3RhcnROb2RlLCBmaWx0ZXIsIHRoaXMuX2RlZmF1
bHRQYXJzZXJTdGF0ZSgpKTsKKworICAgICAgICByZXR1cm4gbm9kZXM7CisgICAgfSwKKworICAg
IGZpbHRlckJ5UmFuZ2U6IGZ1bmN0aW9uKHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpCisgICAgewor
ICAgICAgICB2YXIgYWxsTm9kZXMgPSBbXTsKKyAgICAgICAgdmFyIHN0YXJ0ID0gMDsKKyAgICAg
ICAgdmFyIGVuZCA9IDE7CisgICAgICAgIGZ1bmN0aW9uIGZpbHRlckZvck5vZGVzSW5SYW5nZShu
b2RlLCBzdGF0ZSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gcHJvZ19zdGFydCAgICByYW5n
ZSAgICAgcHJvZ3JhbSBlbmQKKyAgICAgICAgICAgIC8vIFsgICAgICAgICAgICAgWyAgIF0gICAg
ICAgICAgICAgICBdCisgICAgICAgICAgICAvLyAgICAgICAgICBbIF0gWyBbXSAgXSAgWyBdCisK
KyAgICAgICAgICAgIC8vIElmIGEgbm9kZSdzIHJhbmdlIGVuZHMgYmVmb3JlIHRoZSByYW5nZSB3
ZSdyZSBpbnRlcmVzdGVkIGluIHN0YXJ0cywgd2UgZG9uJ3QgbmVlZCB0byBzZWFyY2ggYW55IG9m
IGl0cworICAgICAgICAgICAgLy8gZW5jbG9zaW5nIHJhbmdlcywgYmVjYXVzZSwgYnkgZGVmaW5p
dGlvbiwgdGhvc2UgZW5jbG9zaW5nIHJhbmdlcyBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGlzIG5v
ZGUncyBvdXRlciByYW5nZS4KKyAgICAgICAgICAgIGlmIChub2RlLnJhbmdlW2VuZF0gPCBzdGFy
dE9mZnNldCkKKyAgICAgICAgICAgICAgICBzdGF0ZS5za2lwQ2hpbGROb2RlcyA9IHRydWU7CisK
KyAgICAgICAgICAgIC8vIFdlIGFyZSBvbmx5IGluc3RlcmVzdGVkIGluIG5vZGVzIHdob3NlIHN0
YXJ0IHBvcyBpcyB3aXRoaW4gb3VyIHJhbmdlLgorICAgICAgICAgICAgaWYgKHN0YXJ0T2Zmc2V0
IDw9IG5vZGUucmFuZ2Vbc3RhcnRdICYmIG5vZGUucmFuZ2Vbc3RhcnRdIDw9IGVuZE9mZnNldCkK
KyAgICAgICAgICAgICAgICBhbGxOb2Rlcy5wdXNoKG5vZGUpOworCisgICAgICAgICAgICAvLyBP
bmNlIHdlIHNlZSBub2RlcyB0aGF0IHN0YXJ0IGJleW9uZCBvdXIgcmFuZ2UsIHdlIGNhbiBxdWl0
IHRyYXZlcnNpbmcgdGhlIEFTVC4gV2UgY2FuIGRvIHRoaXMgc2FmZWx5CisgICAgICAgICAgICAv
LyBiZWNhdXNlIHdlIGtub3cgdGhlIEFTVCBpcyB0cmF2ZXJzZWQgdXNpbmcgZGVwdGggZmlyc3Qg
c2VhcmNoLCBzbyBpdCB3aWxsIHRyYXZlcnNlIGludG8gZW5jbG9zaW5nIHJhbmdlcworICAgICAg
ICAgICAgLy8gYmVmb3JlIGl0IHRyYXZlcnNlcyBpbnRvIGFkamFjZW50IHJhbmdlcy4KKyAgICAg
ICAgICAgIGlmIChub2RlLnJhbmdlW3N0YXJ0XSA+IGVuZE9mZnNldCkKKyAgICAgICAgICAgICAg
ICBzdGF0ZS5zaG91bGRTdG9wRWFybHkgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgdGhp
cy5mb3JFYWNoTm9kZShmaWx0ZXJGb3JOb2Rlc0luUmFuZ2UpOworCisgICAgICAgIHJldHVybiBh
bGxOb2RlczsKKyAgICB9LAorCisgICAgY29udGFpbnNOb25FbXB0eVJldHVyblN0YXRlbWVudDog
ZnVuY3Rpb24oc3RhcnROb2RlKQorICAgIHsKKyAgICAgICAgaWYgKHN0YXJ0Tm9kZS5fYXR0YWNo
bWVudHMuX2hhc05vbkVtcHR5UmV0dXJuU3RhdGVtZW50ICE9PSB1bmRlZmluZWQpCisgICAgICAg
ICAgICByZXR1cm4gc3RhcnROb2RlLl9hdHRhY2htZW50cy5faGFzTm9uRW1wdHlSZXR1cm5TdGF0
ZW1lbnQ7CisKKyAgICAgICAgZnVuY3Rpb24gcmVtb3ZlRnVuY3Rpb25zRmlsdGVyKG5vZGUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBub2RlLnR5cGUgIT09IFdlYkluc3BlY3Rvci5T
Y3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkZ1bmN0aW9uRXhwcmVzc2lvbiAKKyAgICAgICAgICAg
ICAgICAmJiBub2RlLnR5cGUgIT09IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVU
eXBlLkZ1bmN0aW9uRGVjbGFyYXRpb247CisgICAgICAgIH0KKworICAgICAgICB2YXIgbm9kZXMg
PSB0aGlzLmZpbHRlcihyZW1vdmVGdW5jdGlvbnNGaWx0ZXIsIHN0YXJ0Tm9kZSk7CisgICAgICAg
IHZhciBoYXNSZXR1cm5TdGF0ZW1lbnQgPSBmYWxzZTsKKyAgICAgICAgdmFyIHJldHVyblN0YXRl
bWVudFR5cGUgPSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5SZXR1cm5T
dGF0ZW1lbnQ7CisgICAgICAgIGZvciAodmFyIG5vZGUgb2Ygbm9kZXMpIHsKKyAgICAgICAgICAg
IGlmIChub2RlLnR5cGUgPT09IHJldHVyblN0YXRlbWVudFR5cGUgJiYgbm9kZS5hcmd1bWVudCkg
eworICAgICAgICAgICAgICAgIGhhc1JldHVyblN0YXRlbWVudCA9IHRydWU7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgIAorICAgICAg
ICBzdGFydE5vZGUuX2F0dGFjaG1lbnRzLl9oYXNOb25FbXB0eVJldHVyblN0YXRlbWVudCA9IGhh
c1JldHVyblN0YXRlbWVudDsKKworICAgICAgICByZXR1cm4gaGFzUmV0dXJuU3RhdGVtZW50Owor
ICAgIH0sCisKKyAgICB1cGRhdGVUeXBlczogZnVuY3Rpb24oc291cmNlSUQsIG5vZGVzVG9VcGRh
dGUsIGNhbGxiYWNrKSAKKyAgICB7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KEFycmF5LmlzQXJy
YXkobm9kZXNUb1VwZGF0ZSkpOworCisgICAgICAgIHZhciBhbGxSZXF1ZXN0cyA9IFtdOworICAg
ICAgICB2YXIgYWxsUmVxdWVzdE5vZGVzID0gW107CisKKyAgICAgICAgZnVuY3Rpb24gZ2F0aGVy
VHlwZUluZm9ybWF0aW9uUmVxdWVzdEZvck5vZGUobm9kZSkgCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHN3aXRjaCAobm9kZS50eXBlKSB7CisgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5T
Y3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkZ1bmN0aW9uRGVjbGFyYXRpb246CisgICAgICAgICAg
ICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkZ1bmN0aW9uRXhw
cmVzc2lvbjoKKyAgICAgICAgICAgICAgICBub2RlLnBhcmFtcy5mb3JFYWNoKGZ1bmN0aW9uIChw
YXJhbSkgeworICAgICAgICAgICAgICAgICAgICBhbGxSZXF1ZXN0cy5wdXNoKHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHR5cGVJbmZvcm1hdGlvbkRlc2NyaXB0b3I6IFdlYkluc3BlY3Rvci5T
Y3JpcHRTeW50YXhUcmVlLlR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3IuTm9ybWFsRXhwcmVz
c2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUlEOiBzb3VyY2VJRCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGRpdm90OiBwYXJhbS5yYW5nZVswXQorICAgICAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgYWxsUmVxdWVzdE5vZGVzLnB1c2gocGFyYW0p
OworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgYWxsUmVxdWVzdHMucHVz
aCh7CisgICAgICAgICAgICAgICAgICAgIHR5cGVJbmZvcm1hdGlvbkRlc2NyaXB0b3I6IFdlYklu
c3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLlR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3IuRnVu
Y3Rpb25SZXR1cm4sCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZUlEOiBzb3VyY2VJRCwKKyAg
ICAgICAgICAgICAgICAgICAgZGl2b3Q6IG5vZGUuYm9keS5yYW5nZVswXQorICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgICAgIGFsbFJlcXVlc3ROb2Rlcy5wdXNoKG5vZGUpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0
U3ludGF4VHJlZS5Ob2RlVHlwZS5WYXJpYWJsZURlY2xhcmF0b3I6CisgICAgICAgICAgICAgICAg
YWxsUmVxdWVzdHMucHVzaCh7CisgICAgICAgICAgICAgICAgICAgIHR5cGVJbmZvcm1hdGlvbkRl
c2NyaXB0b3I6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLlR5cGVQcm9maWxlclNlYXJj
aERlc2NyaXB0b3IuTm9ybWFsRXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgc291cmNl
SUQ6IHNvdXJjZUlELAorICAgICAgICAgICAgICAgICAgICBkaXZvdDogbm9kZS5pZC5yYW5nZVsw
XQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIGFsbFJlcXVlc3ROb2Rlcy5w
dXNoKG5vZGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgbm9kZXNUb1VwZGF0ZS5mb3JFYWNoKGdhdGhlclR5cGVJbmZvcm1hdGlv
blJlcXVlc3RGb3JOb2RlKTsKKworICAgICAgICBmdW5jdGlvbiBoYW5kbGVUeXBlcyhlcnJvciwg
dHlwZUluZm9ybWF0aW9uQXJyYXkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChlcnJvcikK
KyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHR5
cGVJbmZvcm1hdGlvbkFycmF5Lmxlbmd0aCA9PT0gYWxsUmVxdWVzdHMubGVuZ3RoKTsKKworICAg
ICAgICAgICAgdmFyIGk7CisgICAgICAgICAgICB2YXIgbm9kZTsKKyAgICAgICAgICAgIHZhciB0
eXBlSW5mb3JtYXRpb247CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdHlwZUluZm9ybWF0
aW9uQXJyYXkubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBub2RlID0gYWxsUmVxdWVz
dE5vZGVzW2ldOworICAgICAgICAgICAgICAgIHR5cGVJbmZvcm1hdGlvbiA9IHR5cGVJbmZvcm1h
dGlvbkFycmF5W2ldOworICAgICAgICAgICAgICAgIGlmIChhbGxSZXF1ZXN0c1tpXS50eXBlSW5m
b3JtYXRpb25EZXNjcmlwdG9yID09PSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5UeXBl
UHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yLkZ1bmN0aW9uUmV0dXJuKQorICAgICAgICAgICAgICAg
ICAgICBub2RlLl9hdHRhY2htZW50cy5fcmV0dXJuVHlwZXMgPSB0eXBlSW5mb3JtYXRpb247Cisg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBub2RlLl9hdHRhY2htZW50
cy5fdHlwZXMgPSB0eXBlSW5mb3JtYXRpb247CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGNhbGxiYWNrKCk7CisgICAgICAgIH0KKworICAgICAgICBSdW50aW1lQWdlbnQuZ2V0UnVudGlt
ZVR5cGVzRm9yVmFyaWFibGVzQXRPZmZzZXRzKGFsbFJlcXVlc3RzLCBoYW5kbGVUeXBlcyk7Cisg
ICAgfSwKKworICAgIC8vIFByaXZhdGUKKworICAgIF9kZWZhdWx0UGFyc2VyU3RhdGU6IGZ1bmN0
aW9uKCkgCisgICAgeworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgc2hvdWxkU3RvcEVh
cmx5OiBmYWxzZSwKKyAgICAgICAgICAgIHNraXBDaGlsZE5vZGVzOiBmYWxzZQorICAgICAgICB9
OworICAgIH0sCisKKyAgICBfcmVjdXJzZTogZnVuY3Rpb24obm9kZSwgZnVuYywgc3RhdGUpIAor
ICAgIHsKKyAgICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IGlmIChzdGF0ZS5zaG91bGRTdG9wRWFybHkgfHwgc3RhdGUuc2tpcENoaWxkTm9kZXMpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgc3dpdGNoIChub2RlLnR5cGUpIHsKKyAgICAgICAg
Y2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5Bc3NpZ25tZW50RXhw
cmVzc2lvbjoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhp
cy5fcmVjdXJzZShub2RlLmxlZnQsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3Jl
Y3Vyc2Uobm9kZS5yaWdodCwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuQXJyYXlFeHBy
ZXNzaW9uOgorICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlz
Ll9yZWN1cnNlQXJyYXkobm9kZS5lbGVtZW50cywgZnVuYywgc3RhdGUpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5
cGUuQmxvY2tTdGF0ZW1lbnQ6CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAg
ICAgICAgIHRoaXMuX3JlY3Vyc2VBcnJheShub2RlLmJvZHksIGZ1bmMsIHN0YXRlKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVl
Lk5vZGVUeXBlLkJpbmFyeUV4cHJlc3Npb246CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRl
KTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5sZWZ0LCBmdW5jLCBzdGF0ZSk7Cisg
ICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUucmlnaHQsIGZ1bmMsIHN0YXRlKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVl
Lk5vZGVUeXBlLkJyZWFrU3RhdGVtZW50OgorICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3lu
dGF4VHJlZS5Ob2RlVHlwZS5DYXRjaENsYXVzZToKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3Rh
dGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLnBhcmFtLCBmdW5jLCBzdGF0ZSk7
CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuYm9keSwgZnVuYywgc3RhdGUpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRy
ZWUuTm9kZVR5cGUuQ29udGludWVTdGF0ZW1lbnQ6CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0
YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5sYWJlbCwgZnVuYywgc3RhdGUp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5
bnRheFRyZWUuTm9kZVR5cGUuRG9XaGlsZVN0YXRlbWVudDoKKyAgICAgICAgICAgIGZ1bmMobm9k
ZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmJvZHksIGZ1bmMsIHN0
YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5wcmVkaWNhdGUsIGZ1bmMsIHN0
YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3Jp
cHRTeW50YXhUcmVlLk5vZGVUeXBlLkRlYnVnZ2VyU3RhdGVtZW50OgorICAgICAgICAgICAgZnVu
Yyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNw
ZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5FbXB0eVN0YXRlbWVudDoKKyAgICAgICAg
ICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
V2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuRXhwcmVzc2lvblN0YXRlbWVu
dDoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVj
dXJzZShub2RlLmV4cHJlc3Npb24sIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkZvclN0
YXRlbWVudDoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhp
cy5fcmVjdXJzZShub2RlLmluaXQsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3Jl
Y3Vyc2Uobm9kZS5wcmVkaWNhdGUsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3Jl
Y3Vyc2Uobm9kZS51cGRhdGUsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vy
c2Uobm9kZS5ib2R5LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5Gb3JJblN0YXRlbWVu
dDoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVj
dXJzZShub2RlLmxlZnQsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uo
bm9kZS5yaWdodCwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2Rl
LmJvZHksIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdl
Ykluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkZ1bmN0aW9uQ2FsbEV4cHJlc3Np
b246CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3Jl
Y3Vyc2Uobm9kZS5jYWxsZWUsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vy
c2VBcnJheShub2RlLmFyZ3VtZW50cywgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuRnVu
Y3Rpb25EZWNsYXJhdGlvbjoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAg
ICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmlkLCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICB0
aGlzLl9yZWN1cnNlQXJyYXkobm9kZS5wYXJhbXMsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAg
IHRoaXMuX3JlY3Vyc2Uobm9kZS5ib2R5LCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5G
dW5jdGlvbkV4cHJlc3Npb246CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAg
ICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5pZCwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAg
dGhpcy5fcmVjdXJzZUFycmF5KG5vZGUucGFyYW1zLCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAg
ICB0aGlzLl9yZWN1cnNlKG5vZGUuYm9keSwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUu
SWRlbnRpZmllcjoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5
cGUuSWZTdGF0ZW1lbnQ6CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAg
ICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5wcmVkaWNhdGUsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAg
ICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5jb25zZXF1ZW50LCBmdW5jLCBzdGF0ZSk7CisgICAgICAg
ICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuYWx0ZXJuYXRlLCBmdW5jLCBzdGF0ZSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5O
b2RlVHlwZS5MaXRlcmFsOgorICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5O
b2RlVHlwZS5MYWJlbGVkU3RhdGVtZW50OgorICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7
CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUubGFiZWwsIGZ1bmMsIHN0YXRlKTsKKyAg
ICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5ib2R5LCBmdW5jLCBzdGF0ZSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5O
b2RlVHlwZS5Mb2dpY2FsRXhwcmVzc2lvbjoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUp
OworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmxlZnQsIGZ1bmMsIHN0YXRlKTsKKyAg
ICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5yaWdodCwgZnVuYywgc3RhdGUpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUu
Tm9kZVR5cGUuTWVtYmVyRXhwcmVzc2lvbjoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUp
OworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLm9iamVjdCwgZnVuYywgc3RhdGUpOwor
ICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLnByb3BlcnR5LCBmdW5jLCBzdGF0ZSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4
VHJlZS5Ob2RlVHlwZS5OZXdFeHByZXNzaW9uOgorICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0
ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuY2FsbGVlLCBmdW5jLCBzdGF0ZSk7
CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlQXJyYXkobm9kZS5hcmd1bWVudHMsIGZ1bmMsIHN0
YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3Jp
cHRTeW50YXhUcmVlLk5vZGVUeXBlLk9iamVjdEV4cHJlc3Npb246CisgICAgICAgICAgICBmdW5j
KG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2VBcnJheShub2RlLnByb3Bl
cnRpZXMsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdl
Ykluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlByZWZpeEV4cHJlc3Npb246Cisg
ICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uo
bm9kZS5hcmd1bWVudCwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuUHJvZ3JhbToKKyAg
ICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZUFy
cmF5KG5vZGUuYm9keSwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuUHJvcGVydHk6Cisg
ICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uo
bm9kZS5rZXksIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS52
YWx1ZSwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2Vi
SW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuUG9zdGZpeEV4cHJlc3Npb246Cisg
ICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uo
bm9kZS5hcmd1bWVudCwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuUmV0dXJuU3RhdGVt
ZW50OgorICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9y
ZWN1cnNlKG5vZGUuYXJndW1lbnQsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlNlcXVl
bmNlRXhwcmVzc2lvbjoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAg
ICAgdGhpcy5fcmVjdXJzZUFycmF5KG5vZGUuZXhwcmVzc2lvbnMsIGZ1bmMsIHN0YXRlKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhU
cmVlLk5vZGVUeXBlLlN3aXRjaFN0YXRlbWVudDoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3Rh
dGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmRpc2NyaW1pbmFudCwgZnVuYywg
c3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZUFycmF5KG5vZGUuY2FzZXMsIGZ1bmMs
IHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5T
Y3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlN3aXRjaENhc2U6CisgICAgICAgICAgICBmdW5jKG5v
ZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5wcmVkaWNhdGUsIGZ1
bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2VBcnJheShub2RlLmNvbnNlcXVl
bnQsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYklu
c3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlRlcm5hcnlFeHByZXNzaW9uOgorICAg
ICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5v
ZGUucHJlZGljYXRlLCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5v
ZGUuY29uc2VxdWVudCwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShu
b2RlLmFsdGVybmF0ZSwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuVGhpc0V4cHJlc3Np
b246CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlRocm93
U3RhdGVtZW50OgorICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0
aGlzLl9yZWN1cnNlKG5vZGUuYXJndW1lbnQsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBl
LlRyeVN0YXRlbWVudDoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAg
ICAgdGhpcy5fcmVjdXJzZShub2RlLmJsb2NrLCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICB0
aGlzLl9yZWN1cnNlQXJyYXkobm9kZS5ndWFyZGVkSGFuZGxlcnMsIGZ1bmMsIHN0YXRlKTsKKyAg
ICAgICAgICAgIHRoaXMuX3JlY3Vyc2VBcnJheShub2RlLmhhbmRsZXJzLCBmdW5jLCBzdGF0ZSk7
CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuZmluYWxpemVyLCBmdW5jLCBzdGF0ZSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3lu
dGF4VHJlZS5Ob2RlVHlwZS5VbmFyeUV4cHJlc3Npb246CisgICAgICAgICAgICBmdW5jKG5vZGUs
IHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5hcmd1bWVudCwgZnVuYywg
c3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNj
cmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuVmFyaWFibGVEZWNsYXJhdGlvbjoKKyAgICAgICAgICAg
IGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZUFycmF5KG5vZGUu
ZGVjbGFyYXRpb25zLCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5WYXJpYWJsZURlY2xh
cmF0b3I6CisgICAgICAgICAgICBmdW5jKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMu
X3JlY3Vyc2Uobm9kZS5pZCwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJz
ZShub2RlLmluaXQsIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLldoaWxlU3RhdGVtZW50
OgorICAgICAgICAgICAgZnVuYyhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1
cnNlKG5vZGUucHJlZGljYXRlLCBmdW5jLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1
cnNlKG5vZGUuYm9keSwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuV2l0aFN0YXRlbWVu
dDoKKyAgICAgICAgICAgIGZ1bmMobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVj
dXJzZShub2RlLm9iamVjdCwgZnVuYywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJz
ZShub2RlLmJvZHksIGZ1bmMsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisKKyAgICAgICAgc3RhdGUuc2tpcENoaWxkTm9kZXMgPSBmYWxzZTsKKyAgICB9LAorCisgICAg
X3JlY3Vyc2VBcnJheSA6IGZ1bmN0aW9uKGFycmF5LCBmdW5jLCBzdGF0ZSkgCisgICAgeworICAg
ICAgICBmdW5jdGlvbiBmb3JFYWNoKG5vZGUpIHsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uo
bm9kZSwgZnVuYywgc3RhdGUpOworICAgICAgICB9CisKKyAgICAgICAgYXJyYXkuZm9yRWFjaChm
b3JFYWNoLmJpbmQodGhpcykpOworICAgIH0sCisgICAgCisgICAgLy8gVGhpcyBmdW5jdGlvbiB0
cmFuc2xhdGVzIGZyb20gZXNwcmltYSdzIEFic3RyYWN0IFN5bnRheCBUcmVlIHRvIG91cnMuIE1v
c3RseSwgdGhpcyBpcyBqdXN0IHRoZSAKKyAgICAvLyBpZGVudGl0eSBmdW5jdGlvbiwgYnV0IHRo
ZXJlIGFyZSBhIGZldyBub2RlcyBhbmQgYSBmZXcgcHJvcGVydGllcyB0aGF0IGFyZSByZW5hbWVk
LiBTcGVjaWZpY2FsbHksCisgICAgLy8gJ3Rlc3QnIHByb3BlcnR5IGlzIHJlbmFtZWQgdG8gJ3By
ZWRpY2F0ZScsIHByZWZpeC9wb3N0Zml4IG5vZGVzIGFyZSBub3cgdG8gc2VwYXJhdGUgbm9kZXMs
IAorICAgIC8vIENhbGxFeHByZXNzaW9uIGlzIHJlbmFtZWQgdG8gRnVuY3Rpb25DYWxsRXhwcmVz
c2lvbiwgYW5kIENvbmRpdGlvbmFsRXhwcmVzc2lvbiBpcyByZW5hbWVkIHRvIFRlcm5hcnlFeHBy
ZXNzaW9uLgorICAgIF9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUgOiBmdW5jdGlvbihub2RlKSAK
KyAgICB7CisgICAgICAgIGlmICghbm9kZSkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworCisg
ICAgICAgIHZhciByZXN1bHQgPSBudWxsOworICAgICAgICBzd2l0Y2ggKG5vZGUudHlwZSkgewor
ICAgICAgICBjYXNlICJBc3NpZ25tZW50RXhwcmVzc2lvbiI6CisgICAgICAgICAgICByZXN1bHQg
PSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUu
Tm9kZVR5cGUuQXNzaWdubWVudEV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgb3BlcmF0b3I6
IG5vZGUub3BlcmF0b3IsCisgICAgICAgICAgICAgICAgbGVmdDogdGhpcy5fY3JlYXRlSW50ZXJu
YWxTeW50YXhUcmVlKG5vZGUubGVmdCksCisgICAgICAgICAgICAgICAgcmlnaHQ6IHRoaXMuX2Ny
ZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLnJpZ2h0KQorICAgICAgICAgICAgfTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJBcnJheUV4cHJlc3Npb24iOgorICAgICAgICAg
ICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRT
eW50YXhUcmVlLk5vZGVUeXBlLkFycmF5RXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICBlbGVt
ZW50czogbm9kZS5lbGVtZW50cy5tYXAodGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlLmJp
bmQodGhpcykpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgIkJsb2NrU3RhdGVtZW50IjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAg
ICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5CbG9ja1N0
YXRlbWVudCwKKyAgICAgICAgICAgICAgICBib2R5OiBub2RlLmJvZHkubWFwKHRoaXMuX2NyZWF0
ZUludGVybmFsU3ludGF4VHJlZS5iaW5kKHRoaXMpKQorICAgICAgICAgICAgfTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlICJCaW5hcnlFeHByZXNzaW9uIjoKKyAgICAgICAgICAg
IHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3lu
dGF4VHJlZS5Ob2RlVHlwZS5CaW5hcnlFeHByZXNzaW9uLAorICAgICAgICAgICAgICAgIG9wZXJh
dG9yOiBub2RlLm9wZXJhdG9yLAorICAgICAgICAgICAgICAgIGxlZnQ6IHRoaXMuX2NyZWF0ZUlu
dGVybmFsU3ludGF4VHJlZShub2RlLmxlZnQpLAorICAgICAgICAgICAgICAgIHJpZ2h0OiB0aGlz
Ll9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5yaWdodCkKKyAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiQnJlYWtTdGF0ZW1lbnQiOgorICAgICAg
ICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3Jp
cHRTeW50YXhUcmVlLk5vZGVUeXBlLkJyZWFrU3RhdGVtZW50LAorICAgICAgICAgICAgICAgIGxh
YmVsOiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5sYWJlbCkKKyAgICAgICAg
ICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiQ2FsbEV4cHJlc3Npb24i
OgorICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3Bl
Y3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkZ1bmN0aW9uQ2FsbEV4cHJlc3Npb24sCisg
ICAgICAgICAgICAgICAgY2FsbGVlOiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9k
ZS5jYWxsZWUpLAorICAgICAgICAgICAgICAgIGFyZ3VtZW50czogbm9kZS5hcmd1bWVudHMubWFw
KHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZS5iaW5kKHRoaXMpKQorICAgICAgICAgICAg
fTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJDYXRjaENsYXVzZSI6CisgICAg
ICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNj
cmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuQ2F0Y2hDbGF1c2UsCisgICAgICAgICAgICAgICAgcGFy
YW06IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLnBhcmFtKSwKKyAgICAgICAg
ICAgICAgICBib2R5OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5ib2R5KQor
ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJDb25kaXRp
b25hbEV4cHJlc3Npb24iOgorICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAg
IHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlRlcm5hcnlFeHBy
ZXNzaW9uLAorICAgICAgICAgICAgICAgIHByZWRpY2F0ZTogdGhpcy5fY3JlYXRlSW50ZXJuYWxT
eW50YXhUcmVlKG5vZGUudGVzdCksCisgICAgICAgICAgICAgICAgY29uc2VxdWVudDogdGhpcy5f
Y3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUuY29uc2VxdWVudCksCisgICAgICAgICAgICAg
ICAgYWx0ZXJuYXRlOiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5hbHRlcm5h
dGUpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgIkNv
bnRpbnVlU3RhdGVtZW50IjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAg
ICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5Db250aW51ZVN0
YXRlbWVudCwKKyAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50
YXhUcmVlKG5vZGUubGFiZWwpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgIkRvV2hpbGVTdGF0ZW1lbnQiOgorICAgICAgICAgICAgcmVzdWx0ID0gewor
ICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVU
eXBlLkRvV2hpbGVTdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgYm9keTogdGhpcy5fY3JlYXRl
SW50ZXJuYWxTeW50YXhUcmVlKG5vZGUuYm9keSksCisgICAgICAgICAgICAgICAgcHJlZGljYXRl
OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS50ZXN0KQorICAgICAgICAgICAg
fTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJEZWJ1Z2dlclN0YXRlbWVudCI6
CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVj
dG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuRGVidWdnZXJTdGF0ZW1lbnQKKyAgICAgICAg
ICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiRW1wdHlTdGF0ZW1lbnQi
OgorICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3Bl
Y3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkVtcHR5U3RhdGVtZW50CisgICAgICAgICAg
ICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgIkV4cHJlc3Npb25TdGF0ZW1l
bnQiOgorICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYklu
c3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkV4cHJlc3Npb25TdGF0ZW1lbnQsCisg
ICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVl
KG5vZGUuZXhwcmVzc2lvbikKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSAiRm9yU3RhdGVtZW50IjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAg
ICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5G
b3JTdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgaW5pdDogdGhpcy5fY3JlYXRlSW50ZXJuYWxT
eW50YXhUcmVlKG5vZGUuaW5pdCksCisgICAgICAgICAgICAgICAgcHJlZGljYXRlOiB0aGlzLl9j
cmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS50ZXN0KSwKKyAgICAgICAgICAgICAgICB1cGRh
dGU6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLnVwZGF0ZSksCisgICAgICAg
ICAgICAgICAgYm9keTogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUuYm9keSkK
KyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiRm9ySW5T
dGF0ZW1lbnQiOgorICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6
IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkZvckluU3RhdGVtZW50LAor
ICAgICAgICAgICAgICAgIGxlZnQ6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2Rl
LmxlZnQpLAorICAgICAgICAgICAgICAgIHJpZ2h0OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRh
eFRyZWUobm9kZS5yaWdodCksCisgICAgICAgICAgICAgICAgYm9keTogdGhpcy5fY3JlYXRlSW50
ZXJuYWxTeW50YXhUcmVlKG5vZGUuYm9keSkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSAiRnVuY3Rpb25EZWNsYXJhdGlvbiI6CisgICAgICAgICAgICBy
ZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRh
eFRyZWUuTm9kZVR5cGUuRnVuY3Rpb25EZWNsYXJhdGlvbiwKKyAgICAgICAgICAgICAgICBpZDog
dGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUuaWQpLAorICAgICAgICAgICAgICAg
IHBhcmFtczogbm9kZS5wYXJhbXMubWFwKHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZS5i
aW5kKHRoaXMpKSwKKyAgICAgICAgICAgICAgICBib2R5OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5
bnRheFRyZWUobm9kZS5ib2R5KSwKKyAgICAgICAgICAgICAgICBpc0dldHRlck9yU2V0dGVyOiBm
YWxzZSAvLyBUaGlzIGlzIG9idmlvdXMsIGJ1dCBpcyBjb252ZW5pZW50IG5vbmUgdGhlIGxlc3Mg
Yi9jIERlY2xhcmF0aW9ucyBhbmQgRXhwcmVzc2lvbnMgYXJlIG9mdGVuIGludGVydHdpbmVkLgor
ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJGdW5jdGlv
bkV4cHJlc3Npb24iOgorICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5
cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkZ1bmN0aW9uRXhwcmVz
c2lvbiwKKyAgICAgICAgICAgICAgICBpZDogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVl
KG5vZGUuaWQpLAorICAgICAgICAgICAgICAgIHBhcmFtczogbm9kZS5wYXJhbXMubWFwKHRoaXMu
X2NyZWF0ZUludGVybmFsU3ludGF4VHJlZS5iaW5kKHRoaXMpKSwKKyAgICAgICAgICAgICAgICBi
b2R5OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5ib2R5KSwKKyAgICAgICAg
ICAgICAgICBpc0dldHRlck9yU2V0dGVyOiBmYWxzZSAvLyBJZiB0cnVlLCBpdCBpcyBzZXQgaW4g
dGhlIFByb3BlcnR5IEFTVCBub2RlLgorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlICJJZGVudGlmaWVyIjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAg
ICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlw
ZS5JZGVudGlmaWVyLAorICAgICAgICAgICAgICAgIG5hbWU6IG5vZGUubmFtZQorICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJJZlN0YXRlbWVudCI6Cisg
ICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9y
LlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuSWZTdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAg
cHJlZGljYXRlOiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS50ZXN0KSwKKyAg
ICAgICAgICAgICAgICBjb25zZXF1ZW50OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUo
bm9kZS5jb25zZXF1ZW50KSwKKyAgICAgICAgICAgICAgICBhbHRlcm5hdGU6IHRoaXMuX2NyZWF0
ZUludGVybmFsU3ludGF4VHJlZShub2RlLmFsdGVybmF0ZSkKKyAgICAgICAgICAgIH07CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiTGl0ZXJhbCI6CisgICAgICAgICAgICByZXN1
bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRy
ZWUuTm9kZVR5cGUuTGl0ZXJhbCwKKyAgICAgICAgICAgICAgICB2YWx1ZTogbm9kZS52YWx1ZSwK
KyAgICAgICAgICAgICAgICByYXc6IG5vZGUucmF3CisgICAgICAgICAgICB9OworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgIkxhYmVsZWRTdGF0ZW1lbnQiOgorICAgICAgICAgICAg
cmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50
YXhUcmVlLk5vZGVUeXBlLkxhYmVsZWRTdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgbGFiZWw6
IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmxhYmVsKSwKKyAgICAgICAgICAg
ICAgICBib2R5OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5ib2R5KQorICAg
ICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJMb2dpY2FsRXhw
cmVzc2lvbiI6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTog
V2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuTG9naWNhbEV4cHJlc3Npb24s
CisgICAgICAgICAgICAgICAgbGVmdDogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5v
ZGUubGVmdCksCisgICAgICAgICAgICAgICAgcmlnaHQ6IHRoaXMuX2NyZWF0ZUludGVybmFsU3lu
dGF4VHJlZShub2RlLnJpZ2h0KQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlICJNZW1iZXJFeHByZXNzaW9uIjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsK
KyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2Rl
VHlwZS5NZW1iZXJFeHByZXNzaW9uLAorICAgICAgICAgICAgICAgIG9iamVjdDogdGhpcy5fY3Jl
YXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUub2JqZWN0KSwKKyAgICAgICAgICAgICAgICBwcm9w
ZXJ0eTogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUucHJvcGVydHkpCisgICAg
ICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgIk5ld0V4cHJlc3Np
b24iOgorICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYklu
c3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLk5ld0V4cHJlc3Npb24sCisgICAgICAg
ICAgICAgICAgY2FsbGVlOiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5jYWxs
ZWUpLAorICAgICAgICAgICAgICAgIGFyZ3VtZW50czogbm9kZS5hcmd1bWVudHMubWFwKHRoaXMu
X2NyZWF0ZUludGVybmFsU3ludGF4VHJlZS5iaW5kKHRoaXMpKQorICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJPYmplY3RFeHByZXNzaW9uIjoKKyAgICAg
ICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2Ny
aXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5PYmplY3RFeHByZXNzaW9uLAorICAgICAgICAgICAgICAg
IHByb3BlcnRpZXM6IG5vZGUucHJvcGVydGllcy5tYXAodGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50
YXhUcmVlLmJpbmQodGhpcykpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgIlByb2dyYW0iOgorICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAg
ICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlByb2dy
YW0sCisgICAgICAgICAgICAgICAgYm9keTogbm9kZS5ib2R5Lm1hcCh0aGlzLl9jcmVhdGVJbnRl
cm5hbFN5bnRheFRyZWUuYmluZCh0aGlzKSkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSAiUHJvcGVydHkiOgorICAgICAgICAgICAgcmVzdWx0ID0gewor
ICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVU
eXBlLlByb3BlcnR5LAorICAgICAgICAgICAgICAgIGtleTogdGhpcy5fY3JlYXRlSW50ZXJuYWxT
eW50YXhUcmVlKG5vZGUua2V5KSwKKyAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5fY3JlYXRl
SW50ZXJuYWxTeW50YXhUcmVlKG5vZGUudmFsdWUpLAorICAgICAgICAgICAgICAgIGtpbmQ6IG5v
ZGUua2luZAorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQua2luZCA9PT0g
ImdldCIgfHwgcmVzdWx0LmtpbmQgPT09ICJzZXQiKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0
LnZhbHVlLmlzR2V0dGVyT3JTZXR0ZXIgPSB0cnVlOworICAgICAgICAgICAgICAgIHJlc3VsdC52
YWx1ZS5nZXR0ZXJPclNldHRlclJhbmdlID0gcmVzdWx0LmtleS5yYW5nZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJSZXR1cm5TdGF0ZW1lbnQiOgor
ICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rv
ci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlJldHVyblN0YXRlbWVudCwKKyAgICAgICAgICAg
ICAgICBhcmd1bWVudDogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUuYXJndW1l
bnQpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgIlNl
cXVlbmNlRXhwcmVzc2lvbiI6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAg
ICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuU2VxdWVuY2VF
eHByZXNzaW9uLAorICAgICAgICAgICAgICAgIGV4cHJlc3Npb25zOiBub2RlLmV4cHJlc3Npb25z
Lm1hcCh0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUuYmluZCh0aGlzKSkKKyAgICAgICAg
ICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiU3dpdGNoU3RhdGVtZW50
IjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNw
ZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5Td2l0Y2hTdGF0ZW1lbnQsCisgICAgICAg
ICAgICAgICAgZGlzY3JpbWluYW50OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9k
ZS5kaXNjcmltaW5hbnQpLAorICAgICAgICAgICAgICAgIGNhc2VzOiBub2RlLmNhc2VzLm1hcCh0
aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUuYmluZCh0aGlzKSkKKyAgICAgICAgICAgIH07
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiU3dpdGNoQ2FzZSI6CisgICAgICAg
ICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlw
dFN5bnRheFRyZWUuTm9kZVR5cGUuU3dpdGNoQ2FzZSwKKyAgICAgICAgICAgICAgICBwcmVkaWNh
dGU6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLnRlc3QpLAorICAgICAgICAg
ICAgICAgIGNvbnNlcXVlbnQ6IG5vZGUuY29uc2VxdWVudC5tYXAodGhpcy5fY3JlYXRlSW50ZXJu
YWxTeW50YXhUcmVlLmJpbmQodGhpcykpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgIlRoaXNFeHByZXNzaW9uIjoKKyAgICAgICAgICAgIHJlc3VsdCA9
IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5O
b2RlVHlwZS5UaGlzRXhwcmVzc2lvbgorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlICJUaHJvd1N0YXRlbWVudCI6CisgICAgICAgICAgICByZXN1bHQgPSB7
CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9k
ZVR5cGUuVGhyb3dTdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgYXJndW1lbnQ6IHRoaXMuX2Ny
ZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmFyZ3VtZW50KQorICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJUcnlTdGF0ZW1lbnQiOgorICAgICAgICAg
ICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRT
eW50YXhUcmVlLk5vZGVUeXBlLlRyeVN0YXRlbWVudCwKKyAgICAgICAgICAgICAgICBibG9jazog
dGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUuYmxvY2spLAorICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBXaGF0IGFyZSBndWFyZGVkIGhhbmRsZXJzPworICAgICAgICAgICAgICAg
IGd1YXJkZWRIYW5kbGVyczogbm9kZS5ndWFyZGVkSGFuZGxlcnMubWFwKHRoaXMuX2NyZWF0ZUlu
dGVybmFsU3ludGF4VHJlZS5iaW5kKHRoaXMpKSwKKyAgICAgICAgICAgICAgICBoYW5kbGVyczog
bm9kZS5oYW5kbGVycy5tYXAodGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlLmJpbmQodGhp
cykpLAorICAgICAgICAgICAgICAgIGZpbmFsaXplcjogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50
YXhUcmVlKG5vZGUuZmluYWxpemVyKQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlICJVbmFyeUV4cHJlc3Npb24iOgorICAgICAgICAgICAgcmVzdWx0ID0g
eworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5v
ZGVUeXBlLlVuYXJ5RXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICBvcGVyYXRvcjogbm9kZS5v
cGVyYXRvciwKKyAgICAgICAgICAgICAgICBhcmd1bWVudDogdGhpcy5fY3JlYXRlSW50ZXJuYWxT
eW50YXhUcmVlKG5vZGUuYXJndW1lbnQpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgIlVwZGF0ZUV4cHJlc3Npb24iOgorICAgICAgICAgICAgLy8gUHJl
Zml4L3Bvc3RmaXggZXhwcmVzc2lvbnMgaW4gZXNwcmltYS4KKyAgICAgICAgICAgIHJlc3VsdCA9
IHsKKyAgICAgICAgICAgICAgICB0eXBlOiAobm9kZS5wcmVmaXggPyBXZWJJbnNwZWN0b3IuU2Ny
aXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5QcmVmaXhFeHByZXNzaW9uIDogV2ViSW5zcGVjdG9yLlNj
cmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuUG9zdGZpeEV4cHJlc3Npb24pLAorICAgICAgICAgICAg
ICAgIG9wZXJhdG9yOiBub2RlLm9wZXJhdG9yLAorICAgICAgICAgICAgICAgIGFyZ3VtZW50OiB0
aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5hcmd1bWVudCkKKyAgICAgICAgICAg
IH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiVmFyaWFibGVEZWNsYXJhdGlv
biI6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5z
cGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuVmFyaWFibGVEZWNsYXJhdGlvbiwKKyAg
ICAgICAgICAgICAgICBkZWNsYXJhdGlvbnM6IG5vZGUuZGVjbGFyYXRpb25zLm1hcCh0aGlzLl9j
cmVhdGVJbnRlcm5hbFN5bnRheFRyZWUuYmluZCh0aGlzKSkKKyAgICAgICAgICAgIH07CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiVmFyaWFibGVEZWNsYXJhdG9yIjoKKyAgICAg
ICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2Ny
aXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5WYXJpYWJsZURlY2xhcmF0b3IsCisgICAgICAgICAgICAg
ICAgaWQ6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmlkKSwKKyAgICAgICAg
ICAgICAgICBpbml0OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5pbml0KQor
ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJXaGlsZVN0
YXRlbWVudCI6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTog
V2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuV2hpbGVTdGF0ZW1lbnQsCisg
ICAgICAgICAgICAgICAgcHJlZGljYXRlOiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUo
bm9kZS50ZXN0KSwKKyAgICAgICAgICAgICAgICBib2R5OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5
bnRheFRyZWUobm9kZS5ib2R5KQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlICJXaXRoU3RhdGVtZW50IjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAg
ICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlw
ZS5XaXRoU3RhdGVtZW50LAorICAgICAgICAgICAgICAgIG9iamVjdDogdGhpcy5fY3JlYXRlSW50
ZXJuYWxTeW50YXhUcmVlKG5vZGUub2JqZWN0KSwKKyAgICAgICAgICAgICAgICBib2R5OiB0aGlz
Ll9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5ib2R5KQorICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXN1bHQucmFu
Z2UgPSBub2RlLnJhbmdlOworICAgICAgICAvLyBUaGlzIGlzIGFuIG9iamVjdCBmb3Igd2hpY2gg
eW91IGNhbiBhZGQgZmllbGRzIHRvIGFuIEFTVCBub2RlIHdpdGhvdXQgd29ycnlpbmcgYWJvdXQg
cG9sbHV0aW5nIHRoZSBzeW50YXgtcmVsYXRlZCBmaWVsZHMgb2YgdGhlIG5vZGUuCisgICAgICAg
IHJlc3VsdC5fYXR0YWNobWVudHMgPSB7fTsgCisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9Cit9Owo=
</data>
<flag name="review"
          id="261119"
          type_id="1"
          status="-"
          setter="joepeck"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236614</attachid>
            <date>2014-08-14 13:23:47 -0700</date>
            <delta_ts>2014-08-15 13:26:28 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>38927</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwkocmV2aXNpb24gMTcyNjAwKQorKysgU291cmNl
L1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5IEBA
CisyMDE0LTA4LTE0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFdlYiBJbnNwZWN0b3I6IEludHJvZHVjZSBhbiBpbnNwZWN0b3IgQWJzdHJhY3QgU3ludGF4IFRy
ZWUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzU3
NjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlz
IHBhdGNoIGFkZHMgYW4gQWJzdHJhY3QgU3ludGF4IFRyZWUgdG8gdGhlIFdlYiBpbnNwZWN0b3Iu
IAorICAgICAgICBUaGlzIHN5bnRheCB0cmVlIGlzIG1vZGVsZWQgb2ZmIHRoZSBFc3ByaW1hLmpz
IHN5bnRheCB0cmVlCisgICAgICAgIHdoaWNoIGNvbXBsaWVzIHdpdGggdGhlIE1vemlsbGEgUGFy
c2VyIEFQSToKKyAgICAgICAgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9j
cy9Nb3ppbGxhL1Byb2plY3RzL1NwaWRlck1vbmtleS9QYXJzZXJfQVBJCisgICAgICAgIFNjcmlw
dCBpcyB0aGUgb3duZXIgb2YgdGhlIFdlYiBJbnNwZWN0b3Igc3ludGF4IHRyZWUsIGFuZCBoYXMg
YW4gQVBJCisgICAgICAgIGZvciBhY2Nlc3NpbmcgaXRzIHN5bnRheCB0cmVlIHByb3BlcnR5Lgor
CisgICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Fc3ByaW1hL2VzcHJpbWEuanM6Cisg
ICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6CisgICAgICAgICogVXNlckludGVyZmFj
ZS9Nb2RlbHMvU2NyaXB0LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0LnByb3RvdHlwZS5yZXF1ZXN0U2NyaXB0U3ludGF4VHJl
ZS5tYWtlU3ludGF4VHJlZUFuZENhbGxDYWxsYmFjayk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
U2NyaXB0LnByb3RvdHlwZS5fcmVzb2x2ZVJlc291cmNlKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5TY3JpcHQucHJvdG90eXBlLl9tYWtlU3ludGF4VHJlZSk6CisgICAgICAgICogVXNlckludGVy
ZmFjZS9Nb2RlbHMvU2NyaXB0U3ludGF4VHJlZS5qczogQWRkZWQuCisgICAgICAgIChXZWJJbnNw
ZWN0b3IuU2NyaXB0U3ludGF4VHJlZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0U3lu
dGF4VHJlZS5wcm90b3R5cGUuZm9yRWFjaE5vZGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNj
cmlwdFN5bnRheFRyZWUucHJvdG90eXBlLik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0
U3ludGF4VHJlZS5wcm90b3R5cGUuZmlsdGVyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3Jp
cHRTeW50YXhUcmVlLnByb3RvdHlwZS5maWx0ZXJGb3JOb2Rlc0luUmFuZ2UpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUucHJvdG90eXBlLmZpbHRlckJ5UmFuZ2UpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUucHJvdG90eXBlLmNvbnRhaW5z
Tm9uRW1wdHlSZXR1cm5TdGF0ZW1lbnQucmVtb3ZlRnVuY3Rpb25zRmlsdGVyKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLnByb3RvdHlwZS5jb250YWluc05vbkVtcHR5
UmV0dXJuU3RhdGVtZW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVl
LnByb3RvdHlwZS51cGRhdGVUeXBlcyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0U3lu
dGF4VHJlZS5wcm90b3R5cGUuX2RlZmF1bHRQYXJzZXJTdGF0ZSk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5wcm90b3R5cGUuX3JlY3Vyc2UpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUucHJvdG90eXBlLl9yZWN1cnNlQXJyYXkpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUucHJvdG90eXBlLl9jcmVhdGVJbnRl
cm5hbFN5bnRheFRyZWUpOgorCiAyMDE0LTA4LTEzICBKb25vIFdlbGxzICA8am9ub3dlbGxzQGFw
cGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBlc2xpbnQgY29uZmlndXJhdGlvbiBz
aG91bGQgYmUgc3RvcmVkIGFzIC5lc2xpbnRyYwpJbmRleDogU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvTWFpbi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRtbAkocmV2aXNpb24gMTcyNTk2KQorKysgU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5odG1sCSh3b3JraW5nIGNvcHkpCkBA
IC0yNjAsNiArMjYwLDcgQEAKICAgICA8c2NyaXB0IHNyYz0iTW9kZWxzL1JldmlzaW9uLmpzIj48
L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iTW9kZWxzL1Njb3BlQ2hhaW5Ob2RlLmpzIj48L3Nj
cmlwdD4KICAgICA8c2NyaXB0IHNyYz0iTW9kZWxzL1NjcmlwdC5qcyI+PC9zY3JpcHQ+CisgICAg
PHNjcmlwdCBzcmM9Ik1vZGVscy9TY3JpcHRTeW50YXhUcmVlLmpzIj48L3NjcmlwdD4KICAgICA8
c2NyaXB0IHNyYz0iTW9kZWxzL1NjcmlwdFRpbWVsaW5lUmVjb3JkLmpzIj48L3NjcmlwdD4KICAg
ICA8c2NyaXB0IHNyYz0iTW9kZWxzL1NldHRpbmcuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQg
c3JjPSJNb2RlbHMvU291cmNlQ29kZVBvc2l0aW9uLmpzIj48L3NjcmlwdD4KSW5kZXg6IFNvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0VzcHJpbWEvZXNwcmltYS5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9FeHRl
cm5hbC9Fc3ByaW1hL2VzcHJpbWEuanMJKHJldmlzaW9uIDE3MjU5NikKKysrIFNvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL0VzcHJpbWEvZXNwcmltYS5qcwkod29y
a2luZyBjb3B5KQpAQCAtMzIsOSArMzIsOSBAQAogKi8KIAogLy8gV2ViS2l0IE1vZGlmaWNhdGlv
bnM6Ci0vLyAtIFRoZSBvbmx5IGVkaXQgbWFkZSB0byB0aGlzIGZpbGUgaXMgdGhlIHVzZSAnV2Vi
SW5zcGVjdG9yLl9lc3ByaW1hJyBhcyB0aGUgJ2V4cG9ydHMnIG9iamVjdCBmb3IgZXNwcmltYS4g
Ci0vLyAgIFRoZSBjb2RlIHRoYXQgZGV0ZXJtaW5lcyB0aGUgY29udGV4dCBlc3ByaW1hIGlzIGxv
YWRlZCBpbiAobm9kZS5qcywgdGhlIGJyb3dzZXIsIGV0Yy4pIGhhcyBiZWVuIHJlcGxhY2VkIHdp
dGggYSByZWZlcmVuY2UgdG8gJ1dlYkluc3BlY3Rvci5fZXNwcmltYScuCi1XZWJJbnNwZWN0b3Iu
X2VzcHJpbWEgPSB7fTsKKy8vIC0gVGhlIG9ubHkgZWRpdCBtYWRlIHRvIHRoaXMgZmlsZSBpcyB0
aGUgdXNlICdXZWJJbnNwZWN0b3IuRXNwcmltYScgYXMgdGhlICdleHBvcnRzJyBvYmplY3QgZm9y
IGVzcHJpbWEuIAorLy8gICBUaGUgY29kZSB0aGF0IGRldGVybWluZXMgdGhlIGNvbnRleHQgZXNw
cmltYSBpcyBsb2FkZWQgaW4gKG5vZGUuanMsIHRoZSBicm93c2VyLCBldGMuKSBoYXMgYmVlbiBy
ZXBsYWNlZCB3aXRoIGEgcmVmZXJlbmNlIHRvICdXZWJJbnNwZWN0b3IuRXNwcmltYScuCitXZWJJ
bnNwZWN0b3IuRXNwcmltYSA9IHt9OwogCiAoZnVuY3Rpb24gKGV4cG9ydHMpIHsKICAgICAndXNl
IHN0cmljdCc7CkBAIC0zNzMyLDQgKzM3MzIsNCBAQCBXZWJJbnNwZWN0b3IuX2VzcHJpbWEgPSB7
fTsKICAgICAgICAgcmV0dXJuIHR5cGVzOwogICAgIH0oKSk7CiAKLX0pKFdlYkluc3BlY3Rvci5f
ZXNwcmltYSk7Cit9KShXZWJJbnNwZWN0b3IuRXNwcmltYSk7CkluZGV4OiBTb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvU2NyaXB0LmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9TY3JpcHQuanMJKHJldmlz
aW9uIDE3MjU5NikKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVs
cy9TY3JpcHQuanMJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDggQEAgV2ViSW5zcGVjdG9y
LlNjcmlwdCA9IGZ1bmN0aW9uKGlkLCByYW5nZQogCiAgICAgaWYgKHNvdXJjZU1hcFVSTCkKICAg
ICAgICAgV2ViSW5zcGVjdG9yLnNvdXJjZU1hcE1hbmFnZXIuZG93bmxvYWRTb3VyY2VNYXAoc291
cmNlTWFwVVJMLCB0aGlzLl91cmwsIHRoaXMpOworCisgICAgdGhpcy5fc2NyaXB0U3ludGF4VHJl
ZSA9IG51bGw7CiB9OwogCiBXZWJJbnNwZWN0b3IuU2NyaXB0LlR5cGVJZGVudGlmaWVyID0gInNj
cmlwdCI7CkBAIC0xMjcsNiArMTI5LDMyIEBAIFdlYkluc3BlY3Rvci5TY3JpcHQucHJvdG90eXBl
ID0gewogICAgICAgICBjb29raWVbV2ViSW5zcGVjdG9yLlNjcmlwdC5EaXNwbGF5TmFtZUNvb2tp
ZUtleV0gPSB0aGlzLmRpc3BsYXlOYW1lOwogICAgIH0sCiAKKyAgICByZXF1ZXN0U2NyaXB0U3lu
dGF4VHJlZTogZnVuY3Rpb24oY2FsbGJhY2spCisgICAgeworICAgICAgICBpZiAodGhpcy5fc2Ny
aXB0U3ludGF4VHJlZSkgeworICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgY2Fs
bGJhY2sodGhpcy5fc2NyaXB0U3ludGF4VHJlZSk7IH0uYmluZCh0aGlzKSwgMCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB2YXIgbWFrZVN5bnRheFRyZWVBbmRD
YWxsQ2FsbGJhY2sgPSBmdW5jdGlvbihjb250ZW50KQorICAgICAgICB7CisgICAgICAgICAgICB0
aGlzLl9tYWtlU3ludGF4VHJlZShjb250ZW50KTsKKyAgICAgICAgICAgIGNhbGxiYWNrKHRoaXMu
X3NjcmlwdFN5bnRheFRyZWUpOworICAgICAgICB9LmJpbmQodGhpcyk7CisKKyAgICAgICAgdmFy
IGNvbnRlbnQgPSB0aGlzLmNvbnRlbnQ7CisgICAgICAgIGlmICghY29udGVudCAmJiB0aGlzLl9y
ZXNvdXJjZSAmJiB0aGlzLl9yZXNvdXJjZS50eXBlID09PSBXZWJJbnNwZWN0b3IuUmVzb3VyY2Uu
VHlwZS5TY3JpcHQgJiYgdGhpcy5fcmVzb3VyY2UuZmluaXNoZWQpCisgICAgICAgICAgICBjb250
ZW50ID0gdGhpcy5fcmVzb3VyY2UuY29udGVudDsKKyAgICAgICAgaWYgKGNvbnRlbnQpIHsKKyAg
ICAgICAgICAgIHNldFRpbWVvdXQobWFrZVN5bnRheFRyZWVBbmRDYWxsQ2FsbGJhY2ssIDAsIGNv
bnRlbnQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5y
ZXF1ZXN0Q29udGVudChmdW5jdGlvbihlcnJvciwgc291cmNlVGV4dCkgeworICAgICAgICAgICAg
bWFrZVN5bnRheFRyZWVBbmRDYWxsQ2FsbGJhY2soZXJyb3IgPyBudWxsIDogc291cmNlVGV4dCk7
CisgICAgICAgIH0pOworICAgIH0sCisKICAgICAvLyBQcml2YXRlCiAKICAgICBfcmVzb2x2ZVJl
c291cmNlOiBmdW5jdGlvbigpCkBAIC0xNzQsNiArMjAyLDE3IEBAIFdlYkluc3BlY3Rvci5TY3Jp
cHQucHJvdG90eXBlID0gewogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIG51bGw7CisgICAg
fSwKKworICAgIF9tYWtlU3ludGF4VHJlZTogZnVuY3Rpb24oc291cmNlVGV4dCkgeworICAgICAg
ICBpZiAodGhpcy5fc2NyaXB0U3ludGF4VHJlZSB8fCAhc291cmNlVGV4dCkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgdGhpcy5fc2NyaXB0U3ludGF4
VHJlZSA9IG5ldyBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZShzb3VyY2VUZXh0LCB0aGlz
KTsKKyAgICAgICAgfSBjYXRjaChlcnJvcikgeworICAgICAgICAgICAgY29uc29sZS5lcnJvcigi
Q291bGRuJ3QgcGFyc2UgSmF2YVNjcmlwdCBGaWxlOiAiICsgdGhpcy5fdXJsLCBlcnJvcik7Cisg
ICAgICAgIH0KICAgICB9CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9Nb2RlbHMvU2NyaXB0U3ludGF4VHJlZS5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvU2NyaXB0U3ludGF4VHJlZS5qcwko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVs
cy9TY3JpcHRTeW50YXhUcmVlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzU5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUgPSBmdW5jdGlvbihzb3Vy
Y2VUZXh0LCBzY3JpcHQpCit7CisgICAgY29uc29sZS5hc3NlcnQoc2NyaXB0ICYmIHNjcmlwdCBp
bnN0YW5jZW9mIFdlYkluc3BlY3Rvci5TY3JpcHQsIHNjcmlwdCk7CisKKyAgICBXZWJJbnNwZWN0
b3IuT2JqZWN0LmNhbGwodGhpcyk7CisgICAgdGhpcy5fc2NyaXB0ID0gc2NyaXB0OworCisgICAg
dmFyIGVzcHJpbWFTeW50YXhUcmVlID0gV2ViSW5zcGVjdG9yLkVzcHJpbWEucGFyc2Uoc291cmNl
VGV4dCwge3JhbmdlOiB0cnVlfSk7CisgICAgdGhpcy5fc3ludGF4VHJlZSA9IHRoaXMuX2NyZWF0
ZUludGVybmFsU3ludGF4VHJlZShlc3ByaW1hU3ludGF4VHJlZSk7Cit9OworCisvLyBUaGlzIHNo
b3VsZCBiZSBrZXB0IGluIHN5bmMgd2l0aCBhbiBlbnVtIGluIEphdmFTY2lwdENvcmUvcnVudGlt
ZS9IaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIuaAorV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRy
ZWUuVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvciA9IHsKKyAgICBOb3JtYWxFeHByZXNzaW9u
OiAxLAorICAgIEZ1bmN0aW9uUmV0dXJuOiAyCit9OworCitXZWJJbnNwZWN0b3IuU2NyaXB0U3lu
dGF4VHJlZS5Ob2RlVHlwZSA9IHsKKyAgICBBc3NpZ25tZW50RXhwcmVzc2lvbjogImFzc2lnbm1l
bnQtZXhwcmVzc2lvbiIsCisgICAgQXJyYXlFeHByZXNzaW9uOiAiZXhwcmVzc2lvbiIsCisgICAg
QmxvY2tTdGF0ZW1lbnQ6ICJibG9jay1zdGF0ZW1lbnQiLAorICAgIEJpbmFyeUV4cHJlc3Npb246
ICJiaW5hcnktZXhwcmVzc2lvbiIsCisgICAgQnJlYWtTdGF0ZW1lbnQ6ICJicmVhay1zdGF0ZW1l
bnQiLAorICAgIENhbGxFeHByZXNzaW9uOiAiY2FsbC1leHByZXNzaW9uIiwKKyAgICBDYXRjaENs
YXVzZTogImNhdGNoLWNsYXVzZSIsCisgICAgQ29uZGl0aW9uYWxFeHByZXNzaW9uOiAiY29uZGl0
aW9uYWwtZXhwcmVzc2lvbiIsCisgICAgQ29udGludWVTdGF0ZW1lbnQ6ICJjb250aW51ZS1zdGF0
ZW1lbnQiLAorICAgIERvV2hpbGVTdGF0ZW1lbnQ6ICJkby13aGlsZS1zdGF0ZW1lbnQiLAorICAg
IERlYnVnZ2VyU3RhdGVtZW50OiAiZGVidWdnZXItc3RhdGVtZW50IiwKKyAgICBFbXB0eVN0YXRl
bWVudDogImVtcHR5LXN0YXRlbWVudCIsCisgICAgRXhwcmVzc2lvblN0YXRlbWVudDogImV4cHJl
c3Npb24tc3RhdGVtZW50IiwKKyAgICBGb3JTdGF0ZW1lbnQ6ICJmb3Itc3RhdGVtZW50IiwKKyAg
ICBGb3JJblN0YXRlbWVudDogImZvci1pbi1zdGF0ZW1lbnQiLAorICAgIEZ1bmN0aW9uRGVjbGFy
YXRpb246ICJmdW5jdGlvbi1kZWNsYXJhdGlvbiIsCisgICAgRnVuY3Rpb25FeHByZXNzaW9uOiAi
ZnVuY3Rpb24tZXhwcmVzc2lvbiIsCisgICAgSWRlbnRpZmllcjogImlkZW50aWZpZXIiLAorICAg
IElmU3RhdGVtZW50OiAiaWYtc3RhdGVtZW50IiwKKyAgICBMaXRlcmFsOiAibGl0ZXJhbCIsCisg
ICAgTGFiZWxlZFN0YXRlbWVudDogImxhYmVsZWQtc3RhdGVtZW50IiwKKyAgICBMb2dpY2FsRXhw
cmVzc2lvbjogImxvZ2ljYWwtZXhwcmVzc2lvbiIsCisgICAgTWVtYmVyRXhwcmVzc2lvbjogIm1l
bWJlci1leHByZXNzaW9uIiwKKyAgICBOZXdFeHByZXNzaW9uOiAibmV3LWV4cHJlc3Npb24iLAor
ICAgIE9iamVjdEV4cHJlc3Npb246ICJvYmplY3RFeHByZXNzaW9uIiwKKyAgICBQcm9ncmFtOiAi
cHJvZ3JhbSIsCisgICAgUHJvcGVydHk6ICJwcm9wZXJ0eSIsCisgICAgUmV0dXJuU3RhdGVtZW50
OiAicmV0dXJuLXN0YXRlbWVudCIsCisgICAgU2VxdWVuY2VFeHByZXNzaW9uOiAic2VxdWVuY2Ut
ZXhwcmVzc2lvbiIsCisgICAgU3dpdGNoU3RhdGVtZW50OiAic3dpdGNoLXN0YXRlbWVudCIsCisg
ICAgU3dpdGNoQ2FzZTogInN3aXRjaC1jYXNlIiwKKyAgICBUaGlzRXhwcmVzc2lvbjogInRoaXMt
ZXhwcmVzc2lvbiIsCisgICAgVGhyb3dTdGF0ZW1lbnQ6ICJ0aHJvdy1zdGF0ZW1lbnQiLAorICAg
IFRyeVN0YXRlbWVudDogInRyeS1zdGF0ZW1lbnQiLAorICAgIFVuYXJ5RXhwcmVzc2lvbjogInVu
YXJ5LWV4cHJlc3Npb24iLAorICAgIFVwZGF0ZUV4cHJlc3Npb246ICJ1cGRhdGUtZXhwcmVzc2lv
biIsCisgICAgVmFyaWFibGVEZWNsYXJhdGlvbjogInZhcmlhYmxlLWRlY2xhcmF0aW9uIiwKKyAg
ICBWYXJpYWJsZURlY2xhcmF0b3I6ICJ2YXJpYWJsZS1kZWNsYXJhdG9yIiwKKyAgICBXaGlsZVN0
YXRlbWVudDogIndoaWxlLXN0YXRlbWVudCIsCisgICAgV2l0aFN0YXRlbWVudDogIndpdGgtc3Rh
dGVtZW50IgorfTsKKworV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUucHJvdG90eXBlID0g
eworICAgIGNvbnN0cnVjdG9yOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZSwKKyAgICBf
X3Byb3RvX186IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlLAorCisgICAgLy8gUHVibGlj
CisKKyAgICBmb3JFYWNoTm9kZTogZnVuY3Rpb24oY2FsbGJhY2spCisgICAgeworICAgICAgICB0
aGlzLl9yZWN1cnNlKHRoaXMuX3N5bnRheFRyZWUsIGNhbGxiYWNrLCB0aGlzLl9kZWZhdWx0UGFy
c2VyU3RhdGUoKSk7CisgICAgfSwKKworICAgIGZpbHRlcjogZnVuY3Rpb24ocHJlZGljYXRlLCBz
dGFydE5vZGUpIAorICAgIHsKKyAgICAgICAgY29uc29sZS5hc3NlcnQoc3RhcnROb2RlKTsKKwor
ICAgICAgICB2YXIgbm9kZXMgPSBbXTsKKyAgICAgICAgZnVuY3Rpb24gZmlsdGVyKG5vZGUsIHN0
YXRlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAocHJlZGljYXRlKG5vZGUpKQorICAgICAg
ICAgICAgICAgIG5vZGVzLnB1c2gobm9kZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgc3RhdGUuc2tpcENoaWxkTm9kZXMgPSB0cnVlOyAKKyAgICAgICAgfQorICAgICAgICB0
aGlzLl9yZWN1cnNlKHN0YXJ0Tm9kZSwgZmlsdGVyLCB0aGlzLl9kZWZhdWx0UGFyc2VyU3RhdGUo
KSk7CisKKyAgICAgICAgcmV0dXJuIG5vZGVzOworICAgIH0sCisKKyAgICBmaWx0ZXJCeVJhbmdl
OiBmdW5jdGlvbihzdGFydE9mZnNldCwgZW5kT2Zmc2V0KQorICAgIHsKKyAgICAgICAgdmFyIGFs
bE5vZGVzID0gW107CisgICAgICAgIGNvbnN0IHN0YXJ0ID0gMDsKKyAgICAgICAgY29uc3QgZW5k
ID0gMTsKKyAgICAgICAgZnVuY3Rpb24gZmlsdGVyRm9yTm9kZXNJblJhbmdlKG5vZGUsIHN0YXRl
KQorICAgICAgICB7CisgICAgICAgICAgICAvLyBwcm9ncmFtIHN0YXJ0ICAgICAgICByYW5nZSAg
ICAgICAgICAgIHByb2dyYW0gZW5kCisgICAgICAgICAgICAvLyBbICAgICAgICAgICAgICAgICBb
ICAgICAgICAgXSAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgIC8vICAgICAgICAgICAgWyBd
ICBbICAgWyAgICAgICAgXSBdICBbIF0KKworICAgICAgICAgICAgLy8gSWYgYSBub2RlJ3MgcmFu
Z2UgZW5kcyBiZWZvcmUgdGhlIHJhbmdlIHdlJ3JlIGludGVyZXN0ZWQgaW4gc3RhcnRzLCB3ZSBk
b24ndCBuZWVkIHRvIHNlYXJjaCBhbnkgb2YgaXRzCisgICAgICAgICAgICAvLyBlbmNsb3Npbmcg
cmFuZ2VzLCBiZWNhdXNlLCBieSBkZWZpbml0aW9uLCB0aG9zZSBlbmNsb3NpbmcgcmFuZ2VzIGFy
ZSBjb250YWluZWQgd2l0aGluIHRoaXMgbm9kZSdzIHJhbmdlLgorICAgICAgICAgICAgaWYgKG5v
ZGUucmFuZ2VbZW5kXSA8IHN0YXJ0T2Zmc2V0KQorICAgICAgICAgICAgICAgIHN0YXRlLnNraXBD
aGlsZE5vZGVzID0gdHJ1ZTsKKworICAgICAgICAgICAgLy8gV2UgYXJlIG9ubHkgaW50ZXJlc3Rl
ZCBpbiBub2RlcyB3aG9zZSBzdGFydCBwb3NpdGlvbiBpcyB3aXRoaW4gb3VyIHJhbmdlLgorICAg
ICAgICAgICAgaWYgKHN0YXJ0T2Zmc2V0IDw9IG5vZGUucmFuZ2Vbc3RhcnRdICYmIG5vZGUucmFu
Z2Vbc3RhcnRdIDw9IGVuZE9mZnNldCkKKyAgICAgICAgICAgICAgICBhbGxOb2Rlcy5wdXNoKG5v
ZGUpOworCisgICAgICAgICAgICAvLyBPbmNlIHdlIHNlZSBub2RlcyB0aGF0IHN0YXJ0IGJleW9u
ZCBvdXIgcmFuZ2UsIHdlIGNhbiBxdWl0IHRyYXZlcnNpbmcgdGhlIEFTVC4gV2UgY2FuIGRvIHRo
aXMgc2FmZWx5CisgICAgICAgICAgICAvLyBiZWNhdXNlIHdlIGtub3cgdGhlIEFTVCBpcyB0cmF2
ZXJzZWQgdXNpbmcgZGVwdGggZmlyc3Qgc2VhcmNoLCBzbyBpdCB3aWxsIHRyYXZlcnNlIGludG8g
ZW5jbG9zaW5nIHJhbmdlcworICAgICAgICAgICAgLy8gYmVmb3JlIGl0IHRyYXZlcnNlcyBpbnRv
IGFkamFjZW50IHJhbmdlcy4KKyAgICAgICAgICAgIGlmIChub2RlLnJhbmdlW3N0YXJ0XSA+IGVu
ZE9mZnNldCkKKyAgICAgICAgICAgICAgICBzdGF0ZS5zaG91bGRTdG9wRWFybHkgPSB0cnVlOwor
ICAgICAgICB9CisKKyAgICAgICAgdGhpcy5mb3JFYWNoTm9kZShmaWx0ZXJGb3JOb2Rlc0luUmFu
Z2UpOworCisgICAgICAgIHJldHVybiBhbGxOb2RlczsKKyAgICB9LAorCisgICAgY29udGFpbnNO
b25FbXB0eVJldHVyblN0YXRlbWVudDogZnVuY3Rpb24oc3RhcnROb2RlKQorICAgIHsKKyAgICAg
ICAgaWYgKHN0YXJ0Tm9kZS5fYXR0YWNobWVudHMuX2hhc05vbkVtcHR5UmV0dXJuU3RhdGVtZW50
ICE9PSB1bmRlZmluZWQpCisgICAgICAgICAgICByZXR1cm4gc3RhcnROb2RlLl9hdHRhY2htZW50
cy5faGFzTm9uRW1wdHlSZXR1cm5TdGF0ZW1lbnQ7CisKKyAgICAgICAgZnVuY3Rpb24gcmVtb3Zl
RnVuY3Rpb25zRmlsdGVyKG5vZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBub2Rl
LnR5cGUgIT09IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkZ1bmN0aW9u
RXhwcmVzc2lvbiAKKyAgICAgICAgICAgICAgICAmJiBub2RlLnR5cGUgIT09IFdlYkluc3BlY3Rv
ci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkZ1bmN0aW9uRGVjbGFyYXRpb247CisgICAgICAg
IH0KKworICAgICAgICB2YXIgbm9kZXMgPSB0aGlzLmZpbHRlcihyZW1vdmVGdW5jdGlvbnNGaWx0
ZXIsIHN0YXJ0Tm9kZSk7CisgICAgICAgIHZhciBoYXNOb25FbXB0eVJldHVyblN0YXRlbWVudCA9
IGZhbHNlOworICAgICAgICB2YXIgcmV0dXJuU3RhdGVtZW50VHlwZSA9IFdlYkluc3BlY3Rvci5T
Y3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlJldHVyblN0YXRlbWVudDsKKyAgICAgICAgZm9yICh2
YXIgbm9kZSBvZiBub2RlcykgeworICAgICAgICAgICAgaWYgKG5vZGUudHlwZSA9PT0gcmV0dXJu
U3RhdGVtZW50VHlwZSAmJiBub2RlLmFyZ3VtZW50KSB7CisgICAgICAgICAgICAgICAgaGFzTm9u
RW1wdHlSZXR1cm5TdGF0ZW1lbnQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgICAKKyAgICAgICAgc3RhcnROb2RlLl9hdHRh
Y2htZW50cy5faGFzTm9uRW1wdHlSZXR1cm5TdGF0ZW1lbnQgPSBoYXNOb25FbXB0eVJldHVyblN0
YXRlbWVudDsKKworICAgICAgICByZXR1cm4gaGFzTm9uRW1wdHlSZXR1cm5TdGF0ZW1lbnQ7Cisg
ICAgfSwKKworICAgIHVwZGF0ZVR5cGVzOiBmdW5jdGlvbihzb3VyY2VJRCwgbm9kZXNUb1VwZGF0
ZSwgY2FsbGJhY2spIAorICAgIHsKKyAgICAgICAgY29uc29sZS5hc3NlcnQoQXJyYXkuaXNBcnJh
eShub2Rlc1RvVXBkYXRlKSk7CisKKyAgICAgICAgdmFyIGFsbFJlcXVlc3RzID0gW107CisgICAg
ICAgIHZhciBhbGxSZXF1ZXN0Tm9kZXMgPSBbXTsKKworICAgICAgICBmdW5jdGlvbiBnYXRoZXJU
eXBlSW5mb3JtYXRpb25SZXF1ZXN0Rm9yTm9kZShub2RlKSAKKyAgICAgICAgeworICAgICAgICAg
ICAgc3dpdGNoIChub2RlLnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNj
cmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuRnVuY3Rpb25EZWNsYXJhdGlvbjoKKyAgICAgICAgICAg
IGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuRnVuY3Rpb25FeHBy
ZXNzaW9uOgorICAgICAgICAgICAgICAgIG5vZGUucGFyYW1zLmZvckVhY2goZnVuY3Rpb24ocGFy
YW0pIHsKKyAgICAgICAgICAgICAgICAgICAgYWxsUmVxdWVzdHMucHVzaCh7CisgICAgICAgICAg
ICAgICAgICAgICAgICB0eXBlSW5mb3JtYXRpb25EZXNjcmlwdG9yOiBXZWJJbnNwZWN0b3IuU2Ny
aXB0U3ludGF4VHJlZS5UeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yLk5vcm1hbEV4cHJlc3Np
b24sCisgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VJRDogc291cmNlSUQsCisgICAgICAg
ICAgICAgICAgICAgICAgICBkaXZvdDogcGFyYW0ucmFuZ2VbMF0KKyAgICAgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICAgICAgICAgIGFsbFJlcXVlc3ROb2Rlcy5wdXNoKHBhcmFtKTsK
KyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIGFsbFJlcXVlc3RzLnB1c2go
eworICAgICAgICAgICAgICAgICAgICB0eXBlSW5mb3JtYXRpb25EZXNjcmlwdG9yOiBXZWJJbnNw
ZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5UeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yLkZ1bmN0
aW9uUmV0dXJuLAorICAgICAgICAgICAgICAgICAgICBzb3VyY2VJRDogc291cmNlSUQsCisgICAg
ICAgICAgICAgICAgICAgIGRpdm90OiBub2RlLmJvZHkucmFuZ2VbMF0KKyAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgICAgICBhbGxSZXF1ZXN0Tm9kZXMucHVzaChub2RlKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5
bnRheFRyZWUuTm9kZVR5cGUuVmFyaWFibGVEZWNsYXJhdG9yOgorICAgICAgICAgICAgICAgIGFs
bFJlcXVlc3RzLnB1c2goeworICAgICAgICAgICAgICAgICAgICB0eXBlSW5mb3JtYXRpb25EZXNj
cmlwdG9yOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5UeXBlUHJvZmlsZXJTZWFyY2hE
ZXNjcmlwdG9yLk5vcm1hbEV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZUlE
OiBzb3VyY2VJRCwKKyAgICAgICAgICAgICAgICAgICAgZGl2b3Q6IG5vZGUuaWQucmFuZ2VbMF0K
KyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBhbGxSZXF1ZXN0Tm9kZXMucHVz
aChub2RlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIG5vZGVzVG9VcGRhdGUuZm9yRWFjaChnYXRoZXJUeXBlSW5mb3JtYXRpb25S
ZXF1ZXN0Rm9yTm9kZSk7CisKKyAgICAgICAgY29uc29sZS5hc3NlcnQoYWxsUmVxdWVzdHMubGVu
Z3RoID09PSBhbGxSZXF1ZXN0Tm9kZXMubGVuZ3RoKTsKKworICAgICAgICBmdW5jdGlvbiBoYW5k
bGVUeXBlcyhlcnJvciwgdHlwZUluZm9ybWF0aW9uQXJyYXkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChlcnJvcikKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGNv
bnNvbGUuYXNzZXJ0KHR5cGVJbmZvcm1hdGlvbkFycmF5Lmxlbmd0aCA9PT0gYWxsUmVxdWVzdHMu
bGVuZ3RoKTsKKworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0eXBlSW5mb3JtYXRp
b25BcnJheS5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIHZhciBub2RlID0gYWxsUmVx
dWVzdE5vZGVzW2ldOworICAgICAgICAgICAgICAgIHZhciB0eXBlSW5mb3JtYXRpb24gPSB0eXBl
SW5mb3JtYXRpb25BcnJheVtpXTsKKyAgICAgICAgICAgICAgICBpZiAoYWxsUmVxdWVzdHNbaV0u
dHlwZUluZm9ybWF0aW9uRGVzY3JpcHRvciA9PT0gV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRy
ZWUuVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvci5GdW5jdGlvblJldHVybikKKyAgICAgICAg
ICAgICAgICAgICAgbm9kZS5fYXR0YWNobWVudHMuX3JldHVyblR5cGVzID0gdHlwZUluZm9ybWF0
aW9uOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5fYXR0
YWNobWVudHMuX3R5cGVzID0gdHlwZUluZm9ybWF0aW9uOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBjYWxsYmFjaygpOworICAgICAgICB9CisKKyAgICAgICAgUnVudGltZUFnZW50Lmdl
dFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0cyhhbGxSZXF1ZXN0cywgaGFuZGxlVHlw
ZXMpOworICAgIH0sCisKKyAgICAvLyBQcml2YXRlCisKKyAgICBfZGVmYXVsdFBhcnNlclN0YXRl
OiBmdW5jdGlvbigpIAorICAgIHsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIHNob3Vs
ZFN0b3BFYXJseTogZmFsc2UsCisgICAgICAgICAgICBza2lwQ2hpbGROb2RlczogZmFsc2UKKyAg
ICAgICAgfTsKKyAgICB9LAorCisgICAgX3JlY3Vyc2U6IGZ1bmN0aW9uKG5vZGUsIGNhbGxiYWNr
LCBzdGF0ZSkgCisgICAgeworICAgICAgICBpZiAoIW5vZGUpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgaWYgKHN0YXRlLnNob3VsZFN0b3BFYXJseSB8fCBzdGF0ZS5za2lwQ2hpbGRO
b2RlcykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBzd2l0Y2ggKG5vZGUudHlwZSkg
eworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkFz
c2lnbm1lbnRFeHByZXNzaW9uOgorICAgICAgICAgICAgY2FsbGJhY2sobm9kZSwgc3RhdGUpOwor
ICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmxlZnQsIGNhbGxiYWNrLCBzdGF0ZSk7Cisg
ICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUucmlnaHQsIGNhbGxiYWNrLCBzdGF0ZSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4
VHJlZS5Ob2RlVHlwZS5BcnJheUV4cHJlc3Npb246CisgICAgICAgICAgICBjYWxsYmFjayhub2Rl
LCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlQXJyYXkobm9kZS5lbGVtZW50cywg
Y2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYklu
c3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkJsb2NrU3RhdGVtZW50OgorICAgICAg
ICAgICAgY2FsbGJhY2sobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZUFy
cmF5KG5vZGUuYm9keSwgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkJpbmFyeUV4
cHJlc3Npb246CisgICAgICAgICAgICBjYWxsYmFjayhub2RlLCBzdGF0ZSk7CisgICAgICAgICAg
ICB0aGlzLl9yZWN1cnNlKG5vZGUubGVmdCwgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAg
IHRoaXMuX3JlY3Vyc2Uobm9kZS5yaWdodCwgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVU
eXBlLkJyZWFrU3RhdGVtZW50OgorICAgICAgICAgICAgY2FsbGJhY2sobm9kZSwgc3RhdGUpOwor
ICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmxhYmVsLCBjYWxsYmFjaywgc3RhdGUpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRh
eFRyZWUuTm9kZVR5cGUuQ2F0Y2hDbGF1c2U6CisgICAgICAgICAgICBjYWxsYmFjayhub2RlLCBz
dGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUucGFyYW0sIGNhbGxiYWNrLCBz
dGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuYm9keSwgY2FsbGJhY2ssIHN0
YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3Jp
cHRTeW50YXhUcmVlLk5vZGVUeXBlLkNhbGxFeHByZXNzaW9uOgorICAgICAgICAgICAgY2FsbGJh
Y2sobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmNhbGxlZSwg
Y2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2VBcnJheShub2RlLmFy
Z3VtZW50cywgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkNvbnRpbnVlU3RhdGVt
ZW50OgorICAgICAgICAgICAgY2FsbGJhY2sobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhp
cy5fcmVjdXJzZShub2RlLmxhYmVsLCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUu
RG9XaGlsZVN0YXRlbWVudDoKKyAgICAgICAgICAgIGNhbGxiYWNrKG5vZGUsIHN0YXRlKTsKKyAg
ICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5ib2R5LCBjYWxsYmFjaywgc3RhdGUpOworICAg
ICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLnRlc3QsIGNhbGxiYWNrLCBzdGF0ZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJl
ZS5Ob2RlVHlwZS5EZWJ1Z2dlclN0YXRlbWVudDoKKyAgICAgICAgICAgIGNhbGxiYWNrKG5vZGUs
IHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5T
Y3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkVtcHR5U3RhdGVtZW50OgorICAgICAgICAgICAgY2Fs
bGJhY2sobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2Vi
SW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuRXhwcmVzc2lvblN0YXRlbWVudDoK
KyAgICAgICAgICAgIGNhbGxiYWNrKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3Jl
Y3Vyc2Uobm9kZS5leHByZXNzaW9uLCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUu
Rm9yU3RhdGVtZW50OgorICAgICAgICAgICAgY2FsbGJhY2sobm9kZSwgc3RhdGUpOworICAgICAg
ICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmluaXQsIGNhbGxiYWNrLCBzdGF0ZSk7CisgICAgICAg
ICAgICB0aGlzLl9yZWN1cnNlKG5vZGUudGVzdCwgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAg
ICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS51cGRhdGUsIGNhbGxiYWNrLCBzdGF0ZSk7CisgICAgICAg
ICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuYm9keSwgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5v
ZGVUeXBlLkZvckluU3RhdGVtZW50OgorICAgICAgICAgICAgY2FsbGJhY2sobm9kZSwgc3RhdGUp
OworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmxlZnQsIGNhbGxiYWNrLCBzdGF0ZSk7
CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUucmlnaHQsIGNhbGxiYWNrLCBzdGF0ZSk7
CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuYm9keSwgY2FsbGJhY2ssIHN0YXRlKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50
YXhUcmVlLk5vZGVUeXBlLkZ1bmN0aW9uRGVjbGFyYXRpb246CisgICAgICAgICAgICBjYWxsYmFj
ayhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuaWQsIGNhbGxi
YWNrLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlQXJyYXkobm9kZS5wYXJhbXMs
IGNhbGxiYWNrLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuYm9keSwg
Y2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYklu
c3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkZ1bmN0aW9uRXhwcmVzc2lvbjoKKyAg
ICAgICAgICAgIGNhbGxiYWNrKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vy
c2Uobm9kZS5pZCwgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2VB
cnJheShub2RlLnBhcmFtcywgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3Jl
Y3Vyc2Uobm9kZS5ib2R5LCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuSWRlbnRp
ZmllcjoKKyAgICAgICAgICAgIGNhbGxiYWNrKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBl
LklmU3RhdGVtZW50OgorICAgICAgICAgICAgY2FsbGJhY2sobm9kZSwgc3RhdGUpOworICAgICAg
ICAgICAgdGhpcy5fcmVjdXJzZShub2RlLnRlc3QsIGNhbGxiYWNrLCBzdGF0ZSk7CisgICAgICAg
ICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuY29uc2VxdWVudCwgY2FsbGJhY2ssIHN0YXRlKTsKKyAg
ICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5hbHRlcm5hdGUsIGNhbGxiYWNrLCBzdGF0ZSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3lu
dGF4VHJlZS5Ob2RlVHlwZS5MaXRlcmFsOgorICAgICAgICAgICAgY2FsbGJhY2sobm9kZSwgc3Rh
dGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlw
dFN5bnRheFRyZWUuTm9kZVR5cGUuTGFiZWxlZFN0YXRlbWVudDoKKyAgICAgICAgICAgIGNhbGxi
YWNrKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5sYWJlbCwg
Y2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5ib2R5LCBj
YWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5z
cGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuTG9naWNhbEV4cHJlc3Npb246CisgICAg
ICAgICAgICBjYWxsYmFjayhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNl
KG5vZGUubGVmdCwgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uo
bm9kZS5yaWdodCwgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLk1lbWJlckV4cHJl
c3Npb246CisgICAgICAgICAgICBjYWxsYmFjayhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0
aGlzLl9yZWN1cnNlKG5vZGUub2JqZWN0LCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAg
dGhpcy5fcmVjdXJzZShub2RlLnByb3BlcnR5LCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9k
ZVR5cGUuTmV3RXhwcmVzc2lvbjoKKyAgICAgICAgICAgIGNhbGxiYWNrKG5vZGUsIHN0YXRlKTsK
KyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5jYWxsZWUsIGNhbGxiYWNrLCBzdGF0ZSk7
CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlQXJyYXkobm9kZS5hcmd1bWVudHMsIGNhbGxiYWNr
LCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3Iu
U2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5PYmplY3RFeHByZXNzaW9uOgorICAgICAgICAgICAg
Y2FsbGJhY2sobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZUFycmF5KG5v
ZGUucHJvcGVydGllcywgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlByb2dyYW06
CisgICAgICAgICAgICBjYWxsYmFjayhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9y
ZWN1cnNlQXJyYXkobm9kZS5ib2R5LCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUu
UHJvcGVydHk6CisgICAgICAgICAgICBjYWxsYmFjayhub2RlLCBzdGF0ZSk7CisgICAgICAgICAg
ICB0aGlzLl9yZWN1cnNlKG5vZGUua2V5LCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAg
dGhpcy5fcmVjdXJzZShub2RlLnZhbHVlLCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5
cGUuUmV0dXJuU3RhdGVtZW50OgorICAgICAgICAgICAgY2FsbGJhY2sobm9kZSwgc3RhdGUpOwor
ICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmFyZ3VtZW50LCBjYWxsYmFjaywgc3RhdGUp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5
bnRheFRyZWUuTm9kZVR5cGUuU2VxdWVuY2VFeHByZXNzaW9uOgorICAgICAgICAgICAgY2FsbGJh
Y2sobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZUFycmF5KG5vZGUuZXhw
cmVzc2lvbnMsIGNhbGxiYWNrLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5Td2l0Y2hTdGF0ZW1l
bnQ6CisgICAgICAgICAgICBjYWxsYmFjayhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlz
Ll9yZWN1cnNlKG5vZGUuZGlzY3JpbWluYW50LCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAg
ICAgdGhpcy5fcmVjdXJzZUFycmF5KG5vZGUuY2FzZXMsIGNhbGxiYWNrLCBzdGF0ZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJl
ZS5Ob2RlVHlwZS5Td2l0Y2hDYXNlOgorICAgICAgICAgICAgY2FsbGJhY2sobm9kZSwgc3RhdGUp
OworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLnRlc3QsIGNhbGxiYWNrLCBzdGF0ZSk7
CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlQXJyYXkobm9kZS5jb25zZXF1ZW50LCBjYWxsYmFj
aywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9y
LlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuQ29uZGl0aW9uYWxFeHByZXNzaW9uOgorICAgICAg
ICAgICAgY2FsbGJhY2sobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShu
b2RlLnRlc3QsIGNhbGxiYWNrLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5v
ZGUuY29uc2VxdWVudCwgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vy
c2Uobm9kZS5hbHRlcm5hdGUsIGNhbGxiYWNrLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5UaGlz
RXhwcmVzc2lvbjoKKyAgICAgICAgICAgIGNhbGxiYWNrKG5vZGUsIHN0YXRlKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5v
ZGVUeXBlLlRocm93U3RhdGVtZW50OgorICAgICAgICAgICAgY2FsbGJhY2sobm9kZSwgc3RhdGUp
OworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmFyZ3VtZW50LCBjYWxsYmFjaywgc3Rh
dGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlw
dFN5bnRheFRyZWUuTm9kZVR5cGUuVHJ5U3RhdGVtZW50OgorICAgICAgICAgICAgY2FsbGJhY2so
bm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmJsb2NrLCBjYWxs
YmFjaywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZUFycmF5KG5vZGUuZ3VhcmRl
ZEhhbmRsZXJzLCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZUFy
cmF5KG5vZGUuaGFuZGxlcnMsIGNhbGxiYWNrLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9y
ZWN1cnNlKG5vZGUuZmluYWxpemVyLCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUu
VW5hcnlFeHByZXNzaW9uOgorICAgICAgICAgICAgY2FsbGJhY2sobm9kZSwgc3RhdGUpOworICAg
ICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmFyZ3VtZW50LCBjYWxsYmFjaywgc3RhdGUpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRh
eFRyZWUuTm9kZVR5cGUuVXBkYXRlRXhwcmVzc2lvbjoKKyAgICAgICAgICAgIGNhbGxiYWNrKG5v
ZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5hcmd1bWVudCwgY2Fs
bGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkluc3Bl
Y3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlZhcmlhYmxlRGVjbGFyYXRpb246CisgICAg
ICAgICAgICBjYWxsYmFjayhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNl
QXJyYXkobm9kZS5kZWNsYXJhdGlvbnMsIGNhbGxiYWNrLCBzdGF0ZSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlw
ZS5WYXJpYWJsZURlY2xhcmF0b3I6CisgICAgICAgICAgICBjYWxsYmFjayhub2RlLCBzdGF0ZSk7
CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuaWQsIGNhbGxiYWNrLCBzdGF0ZSk7Cisg
ICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuaW5pdCwgY2FsbGJhY2ssIHN0YXRlKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhU
cmVlLk5vZGVUeXBlLldoaWxlU3RhdGVtZW50OgorICAgICAgICAgICAgY2FsbGJhY2sobm9kZSwg
c3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLnRlc3QsIGNhbGxiYWNrLCBz
dGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuYm9keSwgY2FsbGJhY2ssIHN0
YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3Jp
cHRTeW50YXhUcmVlLk5vZGVUeXBlLldpdGhTdGF0ZW1lbnQ6CisgICAgICAgICAgICBjYWxsYmFj
ayhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUub2JqZWN0LCBj
YWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmJvZHksIGNh
bGxiYWNrLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg
IHN0YXRlLnNraXBDaGlsZE5vZGVzID0gZmFsc2U7CisgICAgfSwKKworICAgIF9yZWN1cnNlQXJy
YXk6IGZ1bmN0aW9uKGFycmF5LCBjYWxsYmFjaywgc3RhdGUpIAorICAgIHsKKyAgICAgICAgZnVu
Y3Rpb24gZWFjaChub2RlKSB7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUsIGNhbGxi
YWNrLCBzdGF0ZSk7CisgICAgICAgIH0KKworICAgICAgICBhcnJheS5mb3JFYWNoKGVhY2guYmlu
ZCh0aGlzKSwgdGhpcyk7CisgICAgfSwKKyAgICAKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIHRyYW5z
bGF0ZXMgZnJvbSBlc3ByaW1hJ3MgQWJzdHJhY3QgU3ludGF4IFRyZWUgdG8gb3Vycy4gCisgICAg
Ly8gTW9zdGx5LCB0aGlzIGlzIGp1c3QgdGhlIGlkZW50aXR5IGZ1bmN0aW9uLiBXZSd2ZSBhZGRl
ZCBhbiBleHRyYSBpc0dldHRlck9yU2V0dGVyIHByb3BlcnR5IGZvciBmdW5jdGlvbnMuCisgICAg
Ly8gT3VyIEFTVCBjb21wbGllcyB3aXRoIHRoZSBNb3ppbGxhIHBhcnNlciBBUEk6CisgICAgLy8g
aHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9Nb3ppbGxhL1Byb2plY3Rz
L1NwaWRlck1vbmtleS9QYXJzZXJfQVBJCisgICAgX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZTog
ZnVuY3Rpb24obm9kZSkgCisgICAgeworICAgICAgICBpZiAoIW5vZGUpCisgICAgICAgICAgICBy
ZXR1cm4gbnVsbDsKKworICAgICAgICB2YXIgcmVzdWx0ID0gbnVsbDsKKyAgICAgICAgc3dpdGNo
IChub2RlLnR5cGUpIHsKKyAgICAgICAgY2FzZSAiQXNzaWdubWVudEV4cHJlc3Npb24iOgorICAg
ICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5T
Y3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkFzc2lnbm1lbnRFeHByZXNzaW9uLAorICAgICAgICAg
ICAgICAgIG9wZXJhdG9yOiBub2RlLm9wZXJhdG9yLAorICAgICAgICAgICAgICAgIGxlZnQ6IHRo
aXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmxlZnQpLAorICAgICAgICAgICAgICAg
IHJpZ2h0OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5yaWdodCkKKyAgICAg
ICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiQXJyYXlFeHByZXNz
aW9uIjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJ
bnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5BcnJheUV4cHJlc3Npb24sCisgICAg
ICAgICAgICAgICAgZWxlbWVudHM6IG5vZGUuZWxlbWVudHMubWFwKHRoaXMuX2NyZWF0ZUludGVy
bmFsU3ludGF4VHJlZS5iaW5kKHRoaXMpKQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlICJCbG9ja1N0YXRlbWVudCI6CisgICAgICAgICAgICByZXN1bHQg
PSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUu
Tm9kZVR5cGUuQmxvY2tTdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgYm9keTogbm9kZS5ib2R5
Lm1hcCh0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUuYmluZCh0aGlzKSkKKyAgICAgICAg
ICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiQmluYXJ5RXhwcmVzc2lv
biI6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5z
cGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuQmluYXJ5RXhwcmVzc2lvbiwKKyAgICAg
ICAgICAgICAgICBvcGVyYXRvcjogbm9kZS5vcGVyYXRvciwKKyAgICAgICAgICAgICAgICBsZWZ0
OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5sZWZ0KSwKKyAgICAgICAgICAg
ICAgICByaWdodDogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUucmlnaHQpCisg
ICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgIkJyZWFrU3Rh
dGVtZW50IjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBX
ZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5CcmVha1N0YXRlbWVudCwKKyAg
ICAgICAgICAgICAgICBsYWJlbDogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUu
bGFiZWwpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
IkNhbGxFeHByZXNzaW9uIjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAg
ICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5DYWxsRXhwcmVz
c2lvbiwKKyAgICAgICAgICAgICAgICBjYWxsZWU6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4
VHJlZShub2RlLmNhbGxlZSksCisgICAgICAgICAgICAgICAgYXJndW1lbnRzOiBub2RlLmFyZ3Vt
ZW50cy5tYXAodGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlLmJpbmQodGhpcykpCisgICAg
ICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgIkNhdGNoQ2xhdXNl
IjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNw
ZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5DYXRjaENsYXVzZSwKKyAgICAgICAgICAg
ICAgICBwYXJhbTogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUucGFyYW0pLAor
ICAgICAgICAgICAgICAgIGJvZHk6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2Rl
LmJvZHkpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
IkNvbmRpdGlvbmFsRXhwcmVzc2lvbiI6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAg
ICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuQ29u
ZGl0aW9uYWxFeHByZXNzaW9uLAorICAgICAgICAgICAgICAgIHRlc3Q6IHRoaXMuX2NyZWF0ZUlu
dGVybmFsU3ludGF4VHJlZShub2RlLnRlc3QpLAorICAgICAgICAgICAgICAgIGNvbnNlcXVlbnQ6
IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmNvbnNlcXVlbnQpLAorICAgICAg
ICAgICAgICAgIGFsdGVybmF0ZTogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUu
YWx0ZXJuYXRlKQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlICJDb250aW51ZVN0YXRlbWVudCI6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAg
ICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuQ29u
dGludWVTdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuX2NyZWF0ZUludGVy
bmFsU3ludGF4VHJlZShub2RlLmxhYmVsKQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlICJEb1doaWxlU3RhdGVtZW50IjoKKyAgICAgICAgICAgIHJlc3Vs
dCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJl
ZS5Ob2RlVHlwZS5Eb1doaWxlU3RhdGVtZW50LAorICAgICAgICAgICAgICAgIGJvZHk6IHRoaXMu
X2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmJvZHkpLAorICAgICAgICAgICAgICAgIHRl
c3Q6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLnRlc3QpCisgICAgICAgICAg
ICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgIkRlYnVnZ2VyU3RhdGVtZW50
IjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNw
ZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5EZWJ1Z2dlclN0YXRlbWVudAorICAgICAg
ICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJFbXB0eVN0YXRlbWVu
dCI6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5z
cGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuRW1wdHlTdGF0ZW1lbnQKKyAgICAgICAg
ICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiRXhwcmVzc2lvblN0YXRl
bWVudCI6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2Vi
SW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuRXhwcmVzc2lvblN0YXRlbWVudCwK
KyAgICAgICAgICAgICAgICBleHByZXNzaW9uOiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRy
ZWUobm9kZS5leHByZXNzaW9uKQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlICJGb3JTdGF0ZW1lbnQiOgorICAgICAgICAgICAgcmVzdWx0ID0geworICAg
ICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBl
LkZvclN0YXRlbWVudCwKKyAgICAgICAgICAgICAgICBpbml0OiB0aGlzLl9jcmVhdGVJbnRlcm5h
bFN5bnRheFRyZWUobm9kZS5pbml0KSwKKyAgICAgICAgICAgICAgICB0ZXN0OiB0aGlzLl9jcmVh
dGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS50ZXN0KSwKKyAgICAgICAgICAgICAgICB1cGRhdGU6
IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLnVwZGF0ZSksCisgICAgICAgICAg
ICAgICAgYm9keTogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUuYm9keSkKKyAg
ICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiRm9ySW5TdGF0
ZW1lbnQiOgorICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdl
Ykluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkZvckluU3RhdGVtZW50LAorICAg
ICAgICAgICAgICAgIGxlZnQ6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmxl
ZnQpLAorICAgICAgICAgICAgICAgIHJpZ2h0OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRy
ZWUobm9kZS5yaWdodCksCisgICAgICAgICAgICAgICAgYm9keTogdGhpcy5fY3JlYXRlSW50ZXJu
YWxTeW50YXhUcmVlKG5vZGUuYm9keSkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSAiRnVuY3Rpb25EZWNsYXJhdGlvbiI6CisgICAgICAgICAgICByZXN1
bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRy
ZWUuTm9kZVR5cGUuRnVuY3Rpb25EZWNsYXJhdGlvbiwKKyAgICAgICAgICAgICAgICBpZDogdGhp
cy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUuaWQpLAorICAgICAgICAgICAgICAgIHBh
cmFtczogbm9kZS5wYXJhbXMubWFwKHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZS5iaW5k
KHRoaXMpKSwKKyAgICAgICAgICAgICAgICBib2R5OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRh
eFRyZWUobm9kZS5ib2R5KSwKKyAgICAgICAgICAgICAgICBpc0dldHRlck9yU2V0dGVyOiBmYWxz
ZSAvLyBUaGlzIGlzIG9idmlvdXMsIGJ1dCBpcyBjb252ZW5pZW50IG5vbmUgdGhlIGxlc3MgYi9j
IERlY2xhcmF0aW9ucyBhbmQgRXhwcmVzc2lvbnMgYXJlIG9mdGVuIGludGVydHdpbmVkLgorICAg
ICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJGdW5jdGlvbkV4
cHJlc3Npb24iOgorICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6
IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkZ1bmN0aW9uRXhwcmVzc2lv
biwKKyAgICAgICAgICAgICAgICBpZDogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5v
ZGUuaWQpLAorICAgICAgICAgICAgICAgIHBhcmFtczogbm9kZS5wYXJhbXMubWFwKHRoaXMuX2Ny
ZWF0ZUludGVybmFsU3ludGF4VHJlZS5iaW5kKHRoaXMpKSwKKyAgICAgICAgICAgICAgICBib2R5
OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5ib2R5KSwKKyAgICAgICAgICAg
ICAgICBpc0dldHRlck9yU2V0dGVyOiBmYWxzZSAvLyBJZiB0cnVlLCBpdCBpcyBzZXQgaW4gdGhl
IFByb3BlcnR5IEFTVCBub2RlLgorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlICJJZGVudGlmaWVyIjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAg
ICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5J
ZGVudGlmaWVyLAorICAgICAgICAgICAgICAgIG5hbWU6IG5vZGUubmFtZQorICAgICAgICAgICAg
fTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJJZlN0YXRlbWVudCI6CisgICAg
ICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNj
cmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuSWZTdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgdGVz
dDogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUudGVzdCksCisgICAgICAgICAg
ICAgICAgY29uc2VxdWVudDogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUuY29u
c2VxdWVudCksCisgICAgICAgICAgICAgICAgYWx0ZXJuYXRlOiB0aGlzLl9jcmVhdGVJbnRlcm5h
bFN5bnRheFRyZWUobm9kZS5hbHRlcm5hdGUpCisgICAgICAgICAgICB9OworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgIkxpdGVyYWwiOgorICAgICAgICAgICAgcmVzdWx0ID0gewor
ICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVU
eXBlLkxpdGVyYWwsCisgICAgICAgICAgICAgICAgdmFsdWU6IG5vZGUudmFsdWUsCisgICAgICAg
ICAgICAgICAgcmF3OiBub2RlLnJhdworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlICJMYWJlbGVkU3RhdGVtZW50IjoKKyAgICAgICAgICAgIHJlc3VsdCA9
IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5O
b2RlVHlwZS5MYWJlbGVkU3RhdGVtZW50LAorICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLl9j
cmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5sYWJlbCksCisgICAgICAgICAgICAgICAgYm9k
eTogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUuYm9keSkKKyAgICAgICAgICAg
IH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiTG9naWNhbEV4cHJlc3Npb24i
OgorICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3Bl
Y3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkxvZ2ljYWxFeHByZXNzaW9uLAorICAgICAg
ICAgICAgICAgIGxlZnQ6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmxlZnQp
LAorICAgICAgICAgICAgICAgIHJpZ2h0OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUo
bm9kZS5yaWdodCkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSAiTWVtYmVyRXhwcmVzc2lvbiI6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAg
ICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuTWVt
YmVyRXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICBvYmplY3Q6IHRoaXMuX2NyZWF0ZUludGVy
bmFsU3ludGF4VHJlZShub2RlLm9iamVjdCksCisgICAgICAgICAgICAgICAgcHJvcGVydHk6IHRo
aXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLnByb3BlcnR5KQorICAgICAgICAgICAg
fTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJOZXdFeHByZXNzaW9uIjoKKyAg
ICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3Iu
U2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5OZXdFeHByZXNzaW9uLAorICAgICAgICAgICAgICAg
IGNhbGxlZTogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUuY2FsbGVlKSwKKyAg
ICAgICAgICAgICAgICBhcmd1bWVudHM6IG5vZGUuYXJndW1lbnRzLm1hcCh0aGlzLl9jcmVhdGVJ
bnRlcm5hbFN5bnRheFRyZWUuYmluZCh0aGlzKSkKKyAgICAgICAgICAgIH07CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSAiT2JqZWN0RXhwcmVzc2lvbiI6CisgICAgICAgICAgICBy
ZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRh
eFRyZWUuTm9kZVR5cGUuT2JqZWN0RXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICBwcm9wZXJ0
aWVzOiBub2RlLnByb3BlcnRpZXMubWFwKHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZS5i
aW5kKHRoaXMpKQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlICJQcm9ncmFtIjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0
eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5Qcm9ncmFtLAorICAg
ICAgICAgICAgICAgIGJvZHk6IG5vZGUuYm9keS5tYXAodGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50
YXhUcmVlLmJpbmQodGhpcykpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgIlByb3BlcnR5IjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAg
ICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5Qcm9w
ZXJ0eSwKKyAgICAgICAgICAgICAgICBrZXk6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJl
ZShub2RlLmtleSksCisgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuX2NyZWF0ZUludGVybmFs
U3ludGF4VHJlZShub2RlLnZhbHVlKSwKKyAgICAgICAgICAgICAgICBraW5kOiBub2RlLmtpbmQK
KyAgICAgICAgICAgIH07CisgICAgICAgICAgICBpZiAocmVzdWx0LmtpbmQgPT09ICJnZXQiIHx8
IHJlc3VsdC5raW5kID09PSAic2V0IikgeworICAgICAgICAgICAgICAgIHJlc3VsdC52YWx1ZS5p
c0dldHRlck9yU2V0dGVyID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXN1bHQudmFsdWUuZ2V0
dGVyT3JTZXR0ZXJSYW5nZSA9IHJlc3VsdC5rZXkucmFuZ2U7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiUmV0dXJuU3RhdGVtZW50IjoKKyAgICAgICAg
ICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0
U3ludGF4VHJlZS5Ob2RlVHlwZS5SZXR1cm5TdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgYXJn
dW1lbnQ6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmFyZ3VtZW50KQorICAg
ICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJTZXF1ZW5jZUV4
cHJlc3Npb24iOgorICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6
IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlNlcXVlbmNlRXhwcmVzc2lv
biwKKyAgICAgICAgICAgICAgICBleHByZXNzaW9uczogbm9kZS5leHByZXNzaW9ucy5tYXAodGhp
cy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlLmJpbmQodGhpcykpCisgICAgICAgICAgICB9Owor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgIlN3aXRjaFN0YXRlbWVudCI6CisgICAg
ICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNj
cmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuU3dpdGNoU3RhdGVtZW50LAorICAgICAgICAgICAgICAg
IGRpc2NyaW1pbmFudDogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUuZGlzY3Jp
bWluYW50KSwKKyAgICAgICAgICAgICAgICBjYXNlczogbm9kZS5jYXNlcy5tYXAodGhpcy5fY3Jl
YXRlSW50ZXJuYWxTeW50YXhUcmVlLmJpbmQodGhpcykpCisgICAgICAgICAgICB9OworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgIlN3aXRjaENhc2UiOgorICAgICAgICAgICAgcmVz
dWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhU
cmVlLk5vZGVUeXBlLlN3aXRjaENhc2UsCisgICAgICAgICAgICAgICAgdGVzdDogdGhpcy5fY3Jl
YXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUudGVzdCksCisgICAgICAgICAgICAgICAgY29uc2Vx
dWVudDogbm9kZS5jb25zZXF1ZW50Lm1hcCh0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUu
YmluZCh0aGlzKSkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSAiVGhpc0V4cHJlc3Npb24iOgorICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAg
ICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlRoaXNF
eHByZXNzaW9uCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgIlRocm93U3RhdGVtZW50IjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAg
ICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5UaHJvd1N0
YXRlbWVudCwKKyAgICAgICAgICAgICAgICBhcmd1bWVudDogdGhpcy5fY3JlYXRlSW50ZXJuYWxT
eW50YXhUcmVlKG5vZGUuYXJndW1lbnQpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgIlRyeVN0YXRlbWVudCI6CisgICAgICAgICAgICByZXN1bHQgPSB7
CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9k
ZVR5cGUuVHJ5U3RhdGVtZW50LAorICAgICAgICAgICAgICAgIGJsb2NrOiB0aGlzLl9jcmVhdGVJ
bnRlcm5hbFN5bnRheFRyZWUobm9kZS5ibG9jayksCisgICAgICAgICAgICAgICAgLy8gRklYTUU6
IFdoYXQgYXJlIGd1YXJkZWQgaGFuZGxlcnM/CisgICAgICAgICAgICAgICAgZ3VhcmRlZEhhbmRs
ZXJzOiBub2RlLmd1YXJkZWRIYW5kbGVycy5tYXAodGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhU
cmVlLmJpbmQodGhpcykpLAorICAgICAgICAgICAgICAgIGhhbmRsZXJzOiBub2RlLmhhbmRsZXJz
Lm1hcCh0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUuYmluZCh0aGlzKSksCisgICAgICAg
ICAgICAgICAgZmluYWxpemVyOiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5m
aW5hbGl6ZXIpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgIlVuYXJ5RXhwcmVzc2lvbiI6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAg
ICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuVW5hcnlF
eHByZXNzaW9uLAorICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBub2RlLm9wZXJhdG9yLAorICAg
ICAgICAgICAgICAgIGFyZ3VtZW50OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9k
ZS5hcmd1bWVudCkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSAiVXBkYXRlRXhwcmVzc2lvbiI6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAg
ICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuVXBk
YXRlRXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICBvcGVyYXRvcjogbm9kZS5vcGVyYXRvciwK
KyAgICAgICAgICAgICAgICBwcmVmaXg6IG5vZGUucHJlZml4LAorICAgICAgICAgICAgICAgIGFy
Z3VtZW50OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5hcmd1bWVudCkKKyAg
ICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiVmFyaWFibGVE
ZWNsYXJhdGlvbiI6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlw
ZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuVmFyaWFibGVEZWNsYXJh
dGlvbiwKKyAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnM6IG5vZGUuZGVjbGFyYXRpb25zLm1h
cCh0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUuYmluZCh0aGlzKSkKKyAgICAgICAgICAg
IH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiVmFyaWFibGVEZWNsYXJhdG9y
IjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNw
ZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5WYXJpYWJsZURlY2xhcmF0b3IsCisgICAg
ICAgICAgICAgICAgaWQ6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmlkKSwK
KyAgICAgICAgICAgICAgICBpbml0OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9k
ZS5pbml0KQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
ICJXaGlsZVN0YXRlbWVudCI6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAg
ICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuV2hpbGVTdGF0
ZW1lbnQsCisgICAgICAgICAgICAgICAgdGVzdDogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhU
cmVlKG5vZGUudGVzdCksCisgICAgICAgICAgICAgICAgYm9keTogdGhpcy5fY3JlYXRlSW50ZXJu
YWxTeW50YXhUcmVlKG5vZGUuYm9keSkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSAiV2l0aFN0YXRlbWVudCI6CisgICAgICAgICAgICByZXN1bHQgPSB7
CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9k
ZVR5cGUuV2l0aFN0YXRlbWVudCwKKyAgICAgICAgICAgICAgICBvYmplY3Q6IHRoaXMuX2NyZWF0
ZUludGVybmFsU3ludGF4VHJlZShub2RlLm9iamVjdCksCisgICAgICAgICAgICAgICAgYm9keTog
dGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUuYm9keSkKKyAgICAgICAgICAgIH07
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGNvbnNv
bGUuZXJyb3IoIlVuc3VwcG9ydGVkIFN5bnRheCBUcmVlIE5vZGU6ICIgKyBub2RlLnR5cGUsIG5v
ZGUpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXN1bHQucmFuZ2UgPSBub2RlLnJh
bmdlOworICAgICAgICAvLyBUaGlzIGlzIGFuIG9iamVjdCBmb3Igd2hpY2ggeW91IGNhbiBhZGQg
ZmllbGRzIHRvIGFuIEFTVCBub2RlIHdpdGhvdXQgd29ycnlpbmcgYWJvdXQgcG9sbHV0aW5nIHRo
ZSBzeW50YXgtcmVsYXRlZCBmaWVsZHMgb2YgdGhlIG5vZGUuCisgICAgICAgIHJlc3VsdC5fYXR0
YWNobWVudHMgPSB7fTsgCisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cit9Owo=
</data>
<flag name="review"
          id="261276"
          type_id="1"
          status="+"
          setter="timothy"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236674</attachid>
            <date>2014-08-15 13:26:28 -0700</date>
            <delta_ts>2014-08-15 16:24:15 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>38564</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwkocmV2aXNpb24gMTcyNjQ0KQorKysgU291cmNl
L1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1IEBA
CisyMDE0LTA4LTE1ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFdlYiBJbnNwZWN0b3I6IEludHJvZHVjZSBhbiBpbnNwZWN0b3IgQWJzdHJhY3QgU3ludGF4IFRy
ZWUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzU3
NjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlz
IHBhdGNoIGFkZHMgYW4gQWJzdHJhY3QgU3ludGF4IFRyZWUgdG8gdGhlIFdlYiBpbnNwZWN0b3Iu
IAorICAgICAgICBUaGlzIHN5bnRheCB0cmVlIGlzIG1vZGVsZWQgb2ZmIHRoZSBFc3ByaW1hLmpz
IHN5bnRheCB0cmVlCisgICAgICAgIHdoaWNoIGNvbXBsaWVzIHdpdGggdGhlIE1vemlsbGEgUGFy
c2VyIEFQSToKKyAgICAgICAgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9j
cy9Nb3ppbGxhL1Byb2plY3RzL1NwaWRlck1vbmtleS9QYXJzZXJfQVBJCisgICAgICAgIFNjcmlw
dCBpcyB0aGUgb3duZXIgb2YgdGhlIFdlYiBJbnNwZWN0b3Igc3ludGF4IHRyZWUsIGFuZCBoYXMg
YW4gQVBJCisgICAgICAgIGZvciBhY2Nlc3NpbmcgaXRzIHN5bnRheCB0cmVlIHByb3BlcnR5Lgor
CisgICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Fc3ByaW1hL2VzcHJpbWEuanM6Cisg
ICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6CisgICAgICAgICogVXNlckludGVyZmFj
ZS9Nb2RlbHMvU2NyaXB0LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0LnByb3RvdHlwZS5yZXF1ZXN0U2NyaXB0U3ludGF4VHJl
ZS5tYWtlU3ludGF4VHJlZUFuZENhbGxDYWxsYmFjayk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
U2NyaXB0LnByb3RvdHlwZS5fcmVzb2x2ZVJlc291cmNlKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5TY3JpcHQucHJvdG90eXBlLl9tYWtlU3ludGF4VHJlZSk6CisKIDIwMTQtMDgtMTUgIFRpbW90
aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6
IExlZ2FjeSBNYWMgdG9vbGJhciBhcHBlYXJhbmNlIGxvb2tzIHdyb25nCkluZGV4OiBTb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9NYWluLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5odG1sCShyZXZpc2lvbiAxNzI1
OTYpCisrKyBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9NYWluLmh0bWwJKHdv
cmtpbmcgY29weSkKQEAgLTI2MCw2ICsyNjAsNyBAQAogICAgIDxzY3JpcHQgc3JjPSJNb2RlbHMv
UmV2aXNpb24uanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJNb2RlbHMvU2NvcGVDaGFp
bk5vZGUuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJNb2RlbHMvU2NyaXB0LmpzIj48
L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iTW9kZWxzL1NjcmlwdFN5bnRheFRyZWUuanMiPjwv
c2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJNb2RlbHMvU2NyaXB0VGltZWxpbmVSZWNvcmQuanMi
Pjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJNb2RlbHMvU2V0dGluZy5qcyI+PC9zY3JpcHQ+
CiAgICAgPHNjcmlwdCBzcmM9Ik1vZGVscy9Tb3VyY2VDb2RlUG9zaXRpb24uanMiPjwvc2NyaXB0
PgpJbmRleDogU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvRXNw
cmltYS9lc3ByaW1hLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL0V4dGVybmFsL0VzcHJpbWEvZXNwcmltYS5qcwkocmV2aXNpb24gMTcyNTk2KQor
KysgU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvRXNwcmltYS9l
c3ByaW1hLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw5ICszMiw5IEBACiAqLwogCiAvLyBXZWJL
aXQgTW9kaWZpY2F0aW9uczoKLS8vIC0gVGhlIG9ubHkgZWRpdCBtYWRlIHRvIHRoaXMgZmlsZSBp
cyB0aGUgdXNlICdXZWJJbnNwZWN0b3IuX2VzcHJpbWEnIGFzIHRoZSAnZXhwb3J0cycgb2JqZWN0
IGZvciBlc3ByaW1hLiAKLS8vICAgVGhlIGNvZGUgdGhhdCBkZXRlcm1pbmVzIHRoZSBjb250ZXh0
IGVzcHJpbWEgaXMgbG9hZGVkIGluIChub2RlLmpzLCB0aGUgYnJvd3NlciwgZXRjLikgaGFzIGJl
ZW4gcmVwbGFjZWQgd2l0aCBhIHJlZmVyZW5jZSB0byAnV2ViSW5zcGVjdG9yLl9lc3ByaW1hJy4K
LVdlYkluc3BlY3Rvci5fZXNwcmltYSA9IHt9OworLy8gLSBUaGUgb25seSBlZGl0IG1hZGUgdG8g
dGhpcyBmaWxlIGlzIHRoZSB1c2UgJ1dlYkluc3BlY3Rvci5Fc3ByaW1hJyBhcyB0aGUgJ2V4cG9y
dHMnIG9iamVjdCBmb3IgZXNwcmltYS4gCisvLyAgIFRoZSBjb2RlIHRoYXQgZGV0ZXJtaW5lcyB0
aGUgY29udGV4dCBlc3ByaW1hIGlzIGxvYWRlZCBpbiAobm9kZS5qcywgdGhlIGJyb3dzZXIsIGV0
Yy4pIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggYSByZWZlcmVuY2UgdG8gJ1dlYkluc3BlY3Rvci5F
c3ByaW1hJy4KK1dlYkluc3BlY3Rvci5Fc3ByaW1hID0ge307CiAKIChmdW5jdGlvbiAoZXhwb3J0
cykgewogICAgICd1c2Ugc3RyaWN0JzsKQEAgLTM3MzIsNCArMzczMiw0IEBAIFdlYkluc3BlY3Rv
ci5fZXNwcmltYSA9IHt9OwogICAgICAgICByZXR1cm4gdHlwZXM7CiAgICAgfSgpKTsKIAotfSko
V2ViSW5zcGVjdG9yLl9lc3ByaW1hKTsKK30pKFdlYkluc3BlY3Rvci5Fc3ByaW1hKTsKSW5kZXg6
IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9TY3JpcHQuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1Nj
cmlwdC5qcwkocmV2aXNpb24gMTcyNTk2KQorKysgU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvTW9kZWxzL1NjcmlwdC5qcwkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsOCBA
QCBXZWJJbnNwZWN0b3IuU2NyaXB0ID0gZnVuY3Rpb24oaWQsIHJhbmdlCiAKICAgICBpZiAoc291
cmNlTWFwVVJMKQogICAgICAgICBXZWJJbnNwZWN0b3Iuc291cmNlTWFwTWFuYWdlci5kb3dubG9h
ZFNvdXJjZU1hcChzb3VyY2VNYXBVUkwsIHRoaXMuX3VybCwgdGhpcyk7CisKKyAgICB0aGlzLl9z
Y3JpcHRTeW50YXhUcmVlID0gbnVsbDsKIH07CiAKIFdlYkluc3BlY3Rvci5TY3JpcHQuVHlwZUlk
ZW50aWZpZXIgPSAic2NyaXB0IjsKQEAgLTEyNyw2ICsxMjksMzIgQEAgV2ViSW5zcGVjdG9yLlNj
cmlwdC5wcm90b3R5cGUgPSB7CiAgICAgICAgIGNvb2tpZVtXZWJJbnNwZWN0b3IuU2NyaXB0LkRp
c3BsYXlOYW1lQ29va2llS2V5XSA9IHRoaXMuZGlzcGxheU5hbWU7CiAgICAgfSwKIAorICAgIHJl
cXVlc3RTY3JpcHRTeW50YXhUcmVlOiBmdW5jdGlvbihjYWxsYmFjaykKKyAgICB7CisgICAgICAg
IGlmICh0aGlzLl9zY3JpcHRTeW50YXhUcmVlKSB7CisgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1
bmN0aW9uKCkgeyBjYWxsYmFjayh0aGlzLl9zY3JpcHRTeW50YXhUcmVlKTsgfS5iaW5kKHRoaXMp
LCAwKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBtYWtl
U3ludGF4VHJlZUFuZENhbGxDYWxsYmFjayA9IGZ1bmN0aW9uKGNvbnRlbnQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHRoaXMuX21ha2VTeW50YXhUcmVlKGNvbnRlbnQpOworICAgICAgICAgICAg
Y2FsbGJhY2sodGhpcy5fc2NyaXB0U3ludGF4VHJlZSk7CisgICAgICAgIH0uYmluZCh0aGlzKTsK
KworICAgICAgICB2YXIgY29udGVudCA9IHRoaXMuY29udGVudDsKKyAgICAgICAgaWYgKCFjb250
ZW50ICYmIHRoaXMuX3Jlc291cmNlICYmIHRoaXMuX3Jlc291cmNlLnR5cGUgPT09IFdlYkluc3Bl
Y3Rvci5SZXNvdXJjZS5UeXBlLlNjcmlwdCAmJiB0aGlzLl9yZXNvdXJjZS5maW5pc2hlZCkKKyAg
ICAgICAgICAgIGNvbnRlbnQgPSB0aGlzLl9yZXNvdXJjZS5jb250ZW50OworICAgICAgICBpZiAo
Y29udGVudCkgeworICAgICAgICAgICAgc2V0VGltZW91dChtYWtlU3ludGF4VHJlZUFuZENhbGxD
YWxsYmFjaywgMCwgY29udGVudCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICB0aGlzLnJlcXVlc3RDb250ZW50KGZ1bmN0aW9uKGVycm9yLCBzb3VyY2VUZXh0KSB7
CisgICAgICAgICAgICBtYWtlU3ludGF4VHJlZUFuZENhbGxDYWxsYmFjayhlcnJvciA/IG51bGwg
OiBzb3VyY2VUZXh0KTsKKyAgICAgICAgfSk7CisgICAgfSwKKwogICAgIC8vIFByaXZhdGUKIAog
ICAgIF9yZXNvbHZlUmVzb3VyY2U6IGZ1bmN0aW9uKCkKQEAgLTE3NCw2ICsyMDIsMTMgQEAgV2Vi
SW5zcGVjdG9yLlNjcmlwdC5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1
cm4gbnVsbDsKKyAgICB9LAorCisgICAgX21ha2VTeW50YXhUcmVlOiBmdW5jdGlvbihzb3VyY2VU
ZXh0KSB7CisgICAgICAgIGlmICh0aGlzLl9zY3JpcHRTeW50YXhUcmVlIHx8ICFzb3VyY2VUZXh0
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuX3NjcmlwdFN5bnRheFRyZWUg
PSBuZXcgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUoc291cmNlVGV4dCwgdGhpcyk7CiAg
ICAgfQogfTsKIApJbmRleDogU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9k
ZWxzL1NjcmlwdFN5bnRheFRyZWUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvTW9kZWxzL1NjcmlwdFN5bnRheFRyZWUuanMJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvU2NyaXB0U3lu
dGF4VHJlZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
K1dlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlID0gZnVuY3Rpb24oc291cmNlVGV4dCwgc2Ny
aXB0KQoreworICAgIGNvbnNvbGUuYXNzZXJ0KHNjcmlwdCAmJiBzY3JpcHQgaW5zdGFuY2VvZiBX
ZWJJbnNwZWN0b3IuU2NyaXB0LCBzY3JpcHQpOworCisgICAgV2ViSW5zcGVjdG9yLk9iamVjdC5j
YWxsKHRoaXMpOworICAgIHRoaXMuX3NjcmlwdCA9IHNjcmlwdDsKKworICAgIHRyeSB7CisgICAg
ICAgIHZhciBlc3ByaW1hU3ludGF4VHJlZSA9IFdlYkluc3BlY3Rvci5Fc3ByaW1hLnBhcnNlKHNv
dXJjZVRleHQsIHtyYW5nZTogdHJ1ZX0pOworICAgICAgICB0aGlzLl9zeW50YXhUcmVlID0gdGhp
cy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKGVzcHJpbWFTeW50YXhUcmVlKTsKKyAgICAgICAg
dGhpcy5fcGFyc2VkU3VjY2Vzc2Z1bGx5ID0gdHJ1ZTsKKyAgICB9IGNhdGNoIChlcnJvcikgewor
ICAgICAgICB0aGlzLl9wYXJzZWRTdWNjZXNzZnVsbHkgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5f
c3ludGF4VHJlZSA9IG51bGw7CisgICAgICAgIGNvbnNvbGUuZXJyb3IoIkNvdWxkbid0IHBhcnNl
IEphdmFTY3JpcHQgRmlsZTogIiArIHNjcmlwdC51cmwsIGVycm9yKTsKKyAgICB9Cit9OworCisv
LyBUaGlzIHNob3VsZCBiZSBrZXB0IGluIHN5bmMgd2l0aCBhbiBlbnVtIGluIEphdmFTY2lwdENv
cmUvcnVudGltZS9IaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIuaAorV2ViSW5zcGVjdG9yLlNjcmlw
dFN5bnRheFRyZWUuVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvciA9IHsKKyAgICBOb3JtYWxF
eHByZXNzaW9uOiAxLAorICAgIEZ1bmN0aW9uUmV0dXJuOiAyCit9OworCitXZWJJbnNwZWN0b3Iu
U2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZSA9IHsKKyAgICBBc3NpZ25tZW50RXhwcmVzc2lvbjog
ImFzc2lnbm1lbnQtZXhwcmVzc2lvbiIsCisgICAgQXJyYXlFeHByZXNzaW9uOiAiZXhwcmVzc2lv
biIsCisgICAgQmxvY2tTdGF0ZW1lbnQ6ICJibG9jay1zdGF0ZW1lbnQiLAorICAgIEJpbmFyeUV4
cHJlc3Npb246ICJiaW5hcnktZXhwcmVzc2lvbiIsCisgICAgQnJlYWtTdGF0ZW1lbnQ6ICJicmVh
ay1zdGF0ZW1lbnQiLAorICAgIENhbGxFeHByZXNzaW9uOiAiY2FsbC1leHByZXNzaW9uIiwKKyAg
ICBDYXRjaENsYXVzZTogImNhdGNoLWNsYXVzZSIsCisgICAgQ29uZGl0aW9uYWxFeHByZXNzaW9u
OiAiY29uZGl0aW9uYWwtZXhwcmVzc2lvbiIsCisgICAgQ29udGludWVTdGF0ZW1lbnQ6ICJjb250
aW51ZS1zdGF0ZW1lbnQiLAorICAgIERvV2hpbGVTdGF0ZW1lbnQ6ICJkby13aGlsZS1zdGF0ZW1l
bnQiLAorICAgIERlYnVnZ2VyU3RhdGVtZW50OiAiZGVidWdnZXItc3RhdGVtZW50IiwKKyAgICBF
bXB0eVN0YXRlbWVudDogImVtcHR5LXN0YXRlbWVudCIsCisgICAgRXhwcmVzc2lvblN0YXRlbWVu
dDogImV4cHJlc3Npb24tc3RhdGVtZW50IiwKKyAgICBGb3JTdGF0ZW1lbnQ6ICJmb3Itc3RhdGVt
ZW50IiwKKyAgICBGb3JJblN0YXRlbWVudDogImZvci1pbi1zdGF0ZW1lbnQiLAorICAgIEZ1bmN0
aW9uRGVjbGFyYXRpb246ICJmdW5jdGlvbi1kZWNsYXJhdGlvbiIsCisgICAgRnVuY3Rpb25FeHBy
ZXNzaW9uOiAiZnVuY3Rpb24tZXhwcmVzc2lvbiIsCisgICAgSWRlbnRpZmllcjogImlkZW50aWZp
ZXIiLAorICAgIElmU3RhdGVtZW50OiAiaWYtc3RhdGVtZW50IiwKKyAgICBMaXRlcmFsOiAibGl0
ZXJhbCIsCisgICAgTGFiZWxlZFN0YXRlbWVudDogImxhYmVsZWQtc3RhdGVtZW50IiwKKyAgICBM
b2dpY2FsRXhwcmVzc2lvbjogImxvZ2ljYWwtZXhwcmVzc2lvbiIsCisgICAgTWVtYmVyRXhwcmVz
c2lvbjogIm1lbWJlci1leHByZXNzaW9uIiwKKyAgICBOZXdFeHByZXNzaW9uOiAibmV3LWV4cHJl
c3Npb24iLAorICAgIE9iamVjdEV4cHJlc3Npb246ICJvYmplY3RFeHByZXNzaW9uIiwKKyAgICBQ
cm9ncmFtOiAicHJvZ3JhbSIsCisgICAgUHJvcGVydHk6ICJwcm9wZXJ0eSIsCisgICAgUmV0dXJu
U3RhdGVtZW50OiAicmV0dXJuLXN0YXRlbWVudCIsCisgICAgU2VxdWVuY2VFeHByZXNzaW9uOiAi
c2VxdWVuY2UtZXhwcmVzc2lvbiIsCisgICAgU3dpdGNoU3RhdGVtZW50OiAic3dpdGNoLXN0YXRl
bWVudCIsCisgICAgU3dpdGNoQ2FzZTogInN3aXRjaC1jYXNlIiwKKyAgICBUaGlzRXhwcmVzc2lv
bjogInRoaXMtZXhwcmVzc2lvbiIsCisgICAgVGhyb3dTdGF0ZW1lbnQ6ICJ0aHJvdy1zdGF0ZW1l
bnQiLAorICAgIFRyeVN0YXRlbWVudDogInRyeS1zdGF0ZW1lbnQiLAorICAgIFVuYXJ5RXhwcmVz
c2lvbjogInVuYXJ5LWV4cHJlc3Npb24iLAorICAgIFVwZGF0ZUV4cHJlc3Npb246ICJ1cGRhdGUt
ZXhwcmVzc2lvbiIsCisgICAgVmFyaWFibGVEZWNsYXJhdGlvbjogInZhcmlhYmxlLWRlY2xhcmF0
aW9uIiwKKyAgICBWYXJpYWJsZURlY2xhcmF0b3I6ICJ2YXJpYWJsZS1kZWNsYXJhdG9yIiwKKyAg
ICBXaGlsZVN0YXRlbWVudDogIndoaWxlLXN0YXRlbWVudCIsCisgICAgV2l0aFN0YXRlbWVudDog
IndpdGgtc3RhdGVtZW50IgorfTsKKworV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUucHJv
dG90eXBlID0geworICAgIGNvbnN0cnVjdG9yOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJl
ZSwKKyAgICBfX3Byb3RvX186IFdlYkluc3BlY3Rvci5PYmplY3QucHJvdG90eXBlLAorCisgICAg
Ly8gUHVibGljCisgICAgCisgICAgZ2V0IHBhcnNlZFN1Y2Nlc3NmdWxseSgpCisgICAgeworICAg
ICAgICByZXR1cm4gdGhpcy5fcGFyc2VkU3VjY2Vzc2Z1bGx5OworICAgIH0sCisKKyAgICBmb3JF
YWNoTm9kZTogZnVuY3Rpb24oY2FsbGJhY2spCisgICAgeworICAgICAgICBjb25zb2xlLmFzc2Vy
dCh0aGlzLl9wYXJzZWRTdWNjZXNzZnVsbHkpOworICAgICAgICBpZiAoIXRoaXMuX3BhcnNlZFN1
Y2Nlc3NmdWxseSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB0aGlzLl9yZWN1cnNl
KHRoaXMuX3N5bnRheFRyZWUsIGNhbGxiYWNrLCB0aGlzLl9kZWZhdWx0UGFyc2VyU3RhdGUoKSk7
CisgICAgfSwKKworICAgIGZpbHRlcjogZnVuY3Rpb24ocHJlZGljYXRlLCBzdGFydE5vZGUpIAor
ICAgIHsKKyAgICAgICAgY29uc29sZS5hc3NlcnQoc3RhcnROb2RlICYmIHRoaXMuX3BhcnNlZFN1
Y2Nlc3NmdWxseSk7CisgICAgICAgIGlmICghdGhpcy5fcGFyc2VkU3VjY2Vzc2Z1bGx5KQorICAg
ICAgICAgICAgcmV0dXJuIFtdOworCisgICAgICAgIHZhciBub2RlcyA9IFtdOworICAgICAgICBm
dW5jdGlvbiBmaWx0ZXIobm9kZSwgc3RhdGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChw
cmVkaWNhdGUobm9kZSkpCisgICAgICAgICAgICAgICAgbm9kZXMucHVzaChub2RlKTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzdGF0ZS5za2lwQ2hpbGROb2RlcyA9IHRydWU7
IAorICAgICAgICB9CisKKyAgICAgICAgdGhpcy5fcmVjdXJzZShzdGFydE5vZGUsIGZpbHRlciwg
dGhpcy5fZGVmYXVsdFBhcnNlclN0YXRlKCkpOworCisgICAgICAgIHJldHVybiBub2RlczsKKyAg
ICB9LAorCisgICAgZmlsdGVyQnlSYW5nZTogZnVuY3Rpb24oc3RhcnRPZmZzZXQsIGVuZE9mZnNl
dCkKKyAgICB7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX3BhcnNlZFN1Y2Nlc3NmdWxs
eSk7CisgICAgICAgIGlmICghdGhpcy5fcGFyc2VkU3VjY2Vzc2Z1bGx5KQorICAgICAgICAgICAg
cmV0dXJuIFtdOworICAgICAgICAKKyAgICAgICAgdmFyIGFsbE5vZGVzID0gW107CisgICAgICAg
IGNvbnN0IHN0YXJ0ID0gMDsKKyAgICAgICAgY29uc3QgZW5kID0gMTsKKyAgICAgICAgZnVuY3Rp
b24gZmlsdGVyRm9yTm9kZXNJblJhbmdlKG5vZGUsIHN0YXRlKQorICAgICAgICB7CisgICAgICAg
ICAgICAvLyBwcm9ncmFtIHN0YXJ0ICAgICAgICByYW5nZSAgICAgICAgICAgIHByb2dyYW0gZW5k
CisgICAgICAgICAgICAvLyBbICAgICAgICAgICAgICAgICBbICAgICAgICAgXSAgICAgICAgICAg
ICAgIF0KKyAgICAgICAgICAgIC8vICAgICAgICAgICAgWyBdICBbICAgWyAgICAgICAgXSBdICBb
IF0KKworICAgICAgICAgICAgLy8gSWYgYSBub2RlJ3MgcmFuZ2UgZW5kcyBiZWZvcmUgdGhlIHJh
bmdlIHdlJ3JlIGludGVyZXN0ZWQgaW4gc3RhcnRzLCB3ZSBkb24ndCBuZWVkIHRvIHNlYXJjaCBh
bnkgb2YgaXRzCisgICAgICAgICAgICAvLyBlbmNsb3NpbmcgcmFuZ2VzLCBiZWNhdXNlLCBieSBk
ZWZpbml0aW9uLCB0aG9zZSBlbmNsb3NpbmcgcmFuZ2VzIGFyZSBjb250YWluZWQgd2l0aGluIHRo
aXMgbm9kZSdzIHJhbmdlLgorICAgICAgICAgICAgaWYgKG5vZGUucmFuZ2VbZW5kXSA8IHN0YXJ0
T2Zmc2V0KQorICAgICAgICAgICAgICAgIHN0YXRlLnNraXBDaGlsZE5vZGVzID0gdHJ1ZTsKKwor
ICAgICAgICAgICAgLy8gV2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiBub2RlcyB3aG9zZSBzdGFy
dCBwb3NpdGlvbiBpcyB3aXRoaW4gb3VyIHJhbmdlLgorICAgICAgICAgICAgaWYgKHN0YXJ0T2Zm
c2V0IDw9IG5vZGUucmFuZ2Vbc3RhcnRdICYmIG5vZGUucmFuZ2Vbc3RhcnRdIDw9IGVuZE9mZnNl
dCkKKyAgICAgICAgICAgICAgICBhbGxOb2Rlcy5wdXNoKG5vZGUpOworCisgICAgICAgICAgICAv
LyBPbmNlIHdlIHNlZSBub2RlcyB0aGF0IHN0YXJ0IGJleW9uZCBvdXIgcmFuZ2UsIHdlIGNhbiBx
dWl0IHRyYXZlcnNpbmcgdGhlIEFTVC4gV2UgY2FuIGRvIHRoaXMgc2FmZWx5CisgICAgICAgICAg
ICAvLyBiZWNhdXNlIHdlIGtub3cgdGhlIEFTVCBpcyB0cmF2ZXJzZWQgdXNpbmcgZGVwdGggZmly
c3Qgc2VhcmNoLCBzbyBpdCB3aWxsIHRyYXZlcnNlIGludG8gZW5jbG9zaW5nIHJhbmdlcworICAg
ICAgICAgICAgLy8gYmVmb3JlIGl0IHRyYXZlcnNlcyBpbnRvIGFkamFjZW50IHJhbmdlcy4KKyAg
ICAgICAgICAgIGlmIChub2RlLnJhbmdlW3N0YXJ0XSA+IGVuZE9mZnNldCkKKyAgICAgICAgICAg
ICAgICBzdGF0ZS5zaG91bGRTdG9wRWFybHkgPSB0cnVlOworICAgICAgICB9CisKKyAgICAgICAg
dGhpcy5mb3JFYWNoTm9kZShmaWx0ZXJGb3JOb2Rlc0luUmFuZ2UpOworCisgICAgICAgIHJldHVy
biBhbGxOb2RlczsKKyAgICB9LAorCisgICAgY29udGFpbnNOb25FbXB0eVJldHVyblN0YXRlbWVu
dDogZnVuY3Rpb24oc3RhcnROb2RlKQorICAgIHsKKyAgICAgICAgY29uc29sZS5hc3NlcnQoc3Rh
cnROb2RlICYmIHRoaXMuX3BhcnNlZFN1Y2Nlc3NmdWxseSk7CisgICAgICAgIGlmICghdGhpcy5f
cGFyc2VkU3VjY2Vzc2Z1bGx5KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAg
IGlmIChzdGFydE5vZGUuX2F0dGFjaG1lbnRzLl9oYXNOb25FbXB0eVJldHVyblN0YXRlbWVudCAh
PT0gdW5kZWZpbmVkKQorICAgICAgICAgICAgcmV0dXJuIHN0YXJ0Tm9kZS5fYXR0YWNobWVudHMu
X2hhc05vbkVtcHR5UmV0dXJuU3RhdGVtZW50OworCisgICAgICAgIGZ1bmN0aW9uIHJlbW92ZUZ1
bmN0aW9uc0ZpbHRlcihub2RlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbm9kZS50
eXBlICE9PSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5GdW5jdGlvbkV4
cHJlc3Npb24gCisgICAgICAgICAgICAgICAgJiYgbm9kZS50eXBlICE9PSBXZWJJbnNwZWN0b3Iu
U2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5GdW5jdGlvbkRlY2xhcmF0aW9uOworICAgICAgICB9
CisKKyAgICAgICAgdmFyIG5vZGVzID0gdGhpcy5maWx0ZXIocmVtb3ZlRnVuY3Rpb25zRmlsdGVy
LCBzdGFydE5vZGUpOworICAgICAgICB2YXIgaGFzTm9uRW1wdHlSZXR1cm5TdGF0ZW1lbnQgPSBm
YWxzZTsKKyAgICAgICAgdmFyIHJldHVyblN0YXRlbWVudFR5cGUgPSBXZWJJbnNwZWN0b3IuU2Ny
aXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5SZXR1cm5TdGF0ZW1lbnQ7CisgICAgICAgIGZvciAodmFy
IG5vZGUgb2Ygbm9kZXMpIHsKKyAgICAgICAgICAgIGlmIChub2RlLnR5cGUgPT09IHJldHVyblN0
YXRlbWVudFR5cGUgJiYgbm9kZS5hcmd1bWVudCkgeworICAgICAgICAgICAgICAgIGhhc05vbkVt
cHR5UmV0dXJuU3RhdGVtZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAgCisgICAgICAgIHN0YXJ0Tm9kZS5fYXR0YWNo
bWVudHMuX2hhc05vbkVtcHR5UmV0dXJuU3RhdGVtZW50ID0gaGFzTm9uRW1wdHlSZXR1cm5TdGF0
ZW1lbnQ7CisKKyAgICAgICAgcmV0dXJuIGhhc05vbkVtcHR5UmV0dXJuU3RhdGVtZW50OworICAg
IH0sCisKKyAgICB1cGRhdGVUeXBlczogZnVuY3Rpb24oc291cmNlSUQsIG5vZGVzVG9VcGRhdGUs
IGNhbGxiYWNrKSAKKyAgICB7CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KEFycmF5LmlzQXJyYXko
bm9kZXNUb1VwZGF0ZSkgJiYgdGhpcy5fcGFyc2VkU3VjY2Vzc2Z1bGx5KTsKKyAgICAgICAgaWYg
KCF0aGlzLl9wYXJzZWRTdWNjZXNzZnVsbHkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgdmFyIGFsbFJlcXVlc3RzID0gW107CisgICAgICAgIHZhciBhbGxSZXF1ZXN0Tm9kZXMgPSBb
XTsKKworICAgICAgICBmb3IgKHZhciBub2RlIG9mIG5vZGVzVG9VcGRhdGUpIHsKKyAgICAgICAg
ICAgIHN3aXRjaCAobm9kZS50eXBlKSB7CisgICAgICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5T
Y3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkZ1bmN0aW9uRGVjbGFyYXRpb246CisgICAgICAgICAg
ICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkZ1bmN0aW9uRXhw
cmVzc2lvbjoKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBwYXJhbSBvZiBub2RlLnBhcmFtcykg
eworICAgICAgICAgICAgICAgICAgICBhbGxSZXF1ZXN0cy5wdXNoKHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHR5cGVJbmZvcm1hdGlvbkRlc2NyaXB0b3I6IFdlYkluc3BlY3Rvci5TY3JpcHRT
eW50YXhUcmVlLlR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3IuTm9ybWFsRXhwcmVzc2lvbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUlEOiBzb3VyY2VJRCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGRpdm90OiBwYXJhbS5yYW5nZVswXQorICAgICAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgICAgICAgICAgYWxsUmVxdWVzdE5vZGVzLnB1c2gocGFyYW0pOworICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGFsbFJlcXVlc3RzLnB1c2goeworICAg
ICAgICAgICAgICAgICAgICB0eXBlSW5mb3JtYXRpb25EZXNjcmlwdG9yOiBXZWJJbnNwZWN0b3Iu
U2NyaXB0U3ludGF4VHJlZS5UeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yLkZ1bmN0aW9uUmV0
dXJuLAorICAgICAgICAgICAgICAgICAgICBzb3VyY2VJRDogc291cmNlSUQsCisgICAgICAgICAg
ICAgICAgICAgIGRpdm90OiBub2RlLmJvZHkucmFuZ2VbMF0KKyAgICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgICAgICBhbGxSZXF1ZXN0Tm9kZXMucHVzaChub2RlKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRy
ZWUuTm9kZVR5cGUuVmFyaWFibGVEZWNsYXJhdG9yOgorICAgICAgICAgICAgICAgIGFsbFJlcXVl
c3RzLnB1c2goeworICAgICAgICAgICAgICAgICAgICB0eXBlSW5mb3JtYXRpb25EZXNjcmlwdG9y
OiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5UeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlw
dG9yLk5vcm1hbEV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZUlEOiBzb3Vy
Y2VJRCwKKyAgICAgICAgICAgICAgICAgICAgZGl2b3Q6IG5vZGUuaWQucmFuZ2VbMF0KKyAgICAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBhbGxSZXF1ZXN0Tm9kZXMucHVzaChub2Rl
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIGNvbnNvbGUuYXNzZXJ0KGFsbFJlcXVlc3RzLmxlbmd0aCA9PT0gYWxsUmVxdWVzdE5v
ZGVzLmxlbmd0aCk7CisKKyAgICAgICAgZnVuY3Rpb24gaGFuZGxlVHlwZXMoZXJyb3IsIHR5cGVJ
bmZvcm1hdGlvbkFycmF5KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZXJyb3IpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBjb25zb2xlLmFzc2VydCh0eXBlSW5m
b3JtYXRpb25BcnJheS5sZW5ndGggPT09IGFsbFJlcXVlc3RzLmxlbmd0aCk7CisKKyAgICAgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHlwZUluZm9ybWF0aW9uQXJyYXkubGVuZ3RoOyBpKysp
IHsKKyAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IGFsbFJlcXVlc3ROb2Rlc1tpXTsKKyAgICAg
ICAgICAgICAgICB2YXIgdHlwZUluZm9ybWF0aW9uID0gdHlwZUluZm9ybWF0aW9uQXJyYXlbaV07
CisgICAgICAgICAgICAgICAgaWYgKGFsbFJlcXVlc3RzW2ldLnR5cGVJbmZvcm1hdGlvbkRlc2Ny
aXB0b3IgPT09IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLlR5cGVQcm9maWxlclNlYXJj
aERlc2NyaXB0b3IuRnVuY3Rpb25SZXR1cm4pCisgICAgICAgICAgICAgICAgICAgIG5vZGUuX2F0
dGFjaG1lbnRzLl9yZXR1cm5UeXBlcyA9IHR5cGVJbmZvcm1hdGlvbjsKKyAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG5vZGUuX2F0dGFjaG1lbnRzLl90eXBlcyA9IHR5
cGVJbmZvcm1hdGlvbjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FsbGJhY2soKTsK
KyAgICAgICAgfQorCisgICAgICAgIFJ1bnRpbWVBZ2VudC5nZXRSdW50aW1lVHlwZXNGb3JWYXJp
YWJsZXNBdE9mZnNldHMoYWxsUmVxdWVzdHMsIGhhbmRsZVR5cGVzKTsKKyAgICB9LAorCisgICAg
Ly8gUHJpdmF0ZQorCisgICAgX2RlZmF1bHRQYXJzZXJTdGF0ZTogZnVuY3Rpb24oKSAKKyAgICB7
CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBzaG91bGRTdG9wRWFybHk6IGZhbHNlLAor
ICAgICAgICAgICAgc2tpcENoaWxkTm9kZXM6IGZhbHNlCisgICAgICAgIH07CisgICAgfSwKKwor
ICAgIF9yZWN1cnNlOiBmdW5jdGlvbihub2RlLCBjYWxsYmFjaywgc3RhdGUpIAorICAgIHsKKyAg
ICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChzdGF0
ZS5zaG91bGRTdG9wRWFybHkgfHwgc3RhdGUuc2tpcENoaWxkTm9kZXMpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgc3dpdGNoIChub2RlLnR5cGUpIHsKKyAgICAgICAgY2FzZSBXZWJJ
bnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5Bc3NpZ25tZW50RXhwcmVzc2lvbjoK
KyAgICAgICAgICAgIGNhbGxiYWNrKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3Jl
Y3Vyc2Uobm9kZS5sZWZ0LCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVj
dXJzZShub2RlLnJpZ2h0LCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuQXJyYXlF
eHByZXNzaW9uOgorICAgICAgICAgICAgY2FsbGJhY2sobm9kZSwgc3RhdGUpOworICAgICAgICAg
ICAgdGhpcy5fcmVjdXJzZUFycmF5KG5vZGUuZWxlbWVudHMsIGNhbGxiYWNrLCBzdGF0ZSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4
VHJlZS5Ob2RlVHlwZS5CbG9ja1N0YXRlbWVudDoKKyAgICAgICAgICAgIGNhbGxiYWNrKG5vZGUs
IHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2VBcnJheShub2RlLmJvZHksIGNhbGxi
YWNrLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0
b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5CaW5hcnlFeHByZXNzaW9uOgorICAgICAgICAg
ICAgY2FsbGJhY2sobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2Rl
LmxlZnQsIGNhbGxiYWNrLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUu
cmlnaHQsIGNhbGxiYWNrLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5CcmVha1N0YXRlbWVudDoK
KyAgICAgICAgICAgIGNhbGxiYWNrKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3Jl
Y3Vyc2Uobm9kZS5sYWJlbCwgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkNhdGNo
Q2xhdXNlOgorICAgICAgICAgICAgY2FsbGJhY2sobm9kZSwgc3RhdGUpOworICAgICAgICAgICAg
dGhpcy5fcmVjdXJzZShub2RlLnBhcmFtLCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAg
dGhpcy5fcmVjdXJzZShub2RlLmJvZHksIGNhbGxiYWNrLCBzdGF0ZSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlw
ZS5DYWxsRXhwcmVzc2lvbjoKKyAgICAgICAgICAgIGNhbGxiYWNrKG5vZGUsIHN0YXRlKTsKKyAg
ICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5jYWxsZWUsIGNhbGxiYWNrLCBzdGF0ZSk7Cisg
ICAgICAgICAgICB0aGlzLl9yZWN1cnNlQXJyYXkobm9kZS5hcmd1bWVudHMsIGNhbGxiYWNrLCBz
dGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2Ny
aXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5Db250aW51ZVN0YXRlbWVudDoKKyAgICAgICAgICAgIGNh
bGxiYWNrKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5sYWJl
bCwgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdl
Ykluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkRvV2hpbGVTdGF0ZW1lbnQ6Cisg
ICAgICAgICAgICBjYWxsYmFjayhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1
cnNlKG5vZGUuYm9keSwgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vy
c2Uobm9kZS50ZXN0LCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuRGVidWdnZXJT
dGF0ZW1lbnQ6CisgICAgICAgICAgICBjYWxsYmFjayhub2RlLCBzdGF0ZSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2Rl
VHlwZS5FbXB0eVN0YXRlbWVudDoKKyAgICAgICAgICAgIGNhbGxiYWNrKG5vZGUsIHN0YXRlKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50
YXhUcmVlLk5vZGVUeXBlLkV4cHJlc3Npb25TdGF0ZW1lbnQ6CisgICAgICAgICAgICBjYWxsYmFj
ayhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuZXhwcmVzc2lv
biwgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdl
Ykluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkZvclN0YXRlbWVudDoKKyAgICAg
ICAgICAgIGNhbGxiYWNrKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uo
bm9kZS5pbml0LCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShu
b2RlLnRlc3QsIGNhbGxiYWNrLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5v
ZGUudXBkYXRlLCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShu
b2RlLmJvZHksIGNhbGxiYWNrLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5Gb3JJblN0YXRlbWVu
dDoKKyAgICAgICAgICAgIGNhbGxiYWNrKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMu
X3JlY3Vyc2Uobm9kZS5sZWZ0LCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5f
cmVjdXJzZShub2RlLnJpZ2h0LCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5f
cmVjdXJzZShub2RlLmJvZHksIGNhbGxiYWNrLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5GdW5j
dGlvbkRlY2xhcmF0aW9uOgorICAgICAgICAgICAgY2FsbGJhY2sobm9kZSwgc3RhdGUpOworICAg
ICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmlkLCBjYWxsYmFjaywgc3RhdGUpOworICAgICAg
ICAgICAgdGhpcy5fcmVjdXJzZUFycmF5KG5vZGUucGFyYW1zLCBjYWxsYmFjaywgc3RhdGUpOwor
ICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmJvZHksIGNhbGxiYWNrLCBzdGF0ZSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4
VHJlZS5Ob2RlVHlwZS5GdW5jdGlvbkV4cHJlc3Npb246CisgICAgICAgICAgICBjYWxsYmFjayhu
b2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuaWQsIGNhbGxiYWNr
LCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlQXJyYXkobm9kZS5wYXJhbXMsIGNh
bGxiYWNrLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuYm9keSwgY2Fs
bGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkluc3Bl
Y3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLklkZW50aWZpZXI6CisgICAgICAgICAgICBj
YWxsYmFjayhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBX
ZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5JZlN0YXRlbWVudDoKKyAgICAg
ICAgICAgIGNhbGxiYWNrKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uo
bm9kZS50ZXN0LCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShu
b2RlLmNvbnNlcXVlbnQsIGNhbGxiYWNrLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1
cnNlKG5vZGUuYWx0ZXJuYXRlLCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuTGl0
ZXJhbDoKKyAgICAgICAgICAgIGNhbGxiYWNrKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBl
LkxhYmVsZWRTdGF0ZW1lbnQ6CisgICAgICAgICAgICBjYWxsYmFjayhub2RlLCBzdGF0ZSk7Cisg
ICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUubGFiZWwsIGNhbGxiYWNrLCBzdGF0ZSk7Cisg
ICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuYm9keSwgY2FsbGJhY2ssIHN0YXRlKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhU
cmVlLk5vZGVUeXBlLkxvZ2ljYWxFeHByZXNzaW9uOgorICAgICAgICAgICAgY2FsbGJhY2sobm9k
ZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmxlZnQsIGNhbGxiYWNr
LCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUucmlnaHQsIGNhbGxiYWNr
LCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3Iu
U2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5NZW1iZXJFeHByZXNzaW9uOgorICAgICAgICAgICAg
Y2FsbGJhY2sobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLm9i
amVjdCwgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5w
cm9wZXJ0eSwgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLk5ld0V4cHJlc3Npb246
CisgICAgICAgICAgICBjYWxsYmFjayhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9y
ZWN1cnNlKG5vZGUuY2FsbGVlLCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5f
cmVjdXJzZUFycmF5KG5vZGUuYXJndW1lbnRzLCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9k
ZVR5cGUuT2JqZWN0RXhwcmVzc2lvbjoKKyAgICAgICAgICAgIGNhbGxiYWNrKG5vZGUsIHN0YXRl
KTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2VBcnJheShub2RlLnByb3BlcnRpZXMsIGNhbGxi
YWNrLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0
b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5Qcm9ncmFtOgorICAgICAgICAgICAgY2FsbGJh
Y2sobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZUFycmF5KG5vZGUuYm9k
eSwgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdl
Ykluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlByb3BlcnR5OgorICAgICAgICAg
ICAgY2FsbGJhY2sobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2Rl
LmtleSwgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS52
YWx1ZSwgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlJldHVyblN0YXRlbWVudDoK
KyAgICAgICAgICAgIGNhbGxiYWNrKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3Jl
Y3Vyc2Uobm9kZS5hcmd1bWVudCwgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlNl
cXVlbmNlRXhwcmVzc2lvbjoKKyAgICAgICAgICAgIGNhbGxiYWNrKG5vZGUsIHN0YXRlKTsKKyAg
ICAgICAgICAgIHRoaXMuX3JlY3Vyc2VBcnJheShub2RlLmV4cHJlc3Npb25zLCBjYWxsYmFjaywg
c3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNj
cmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuU3dpdGNoU3RhdGVtZW50OgorICAgICAgICAgICAgY2Fs
bGJhY2sobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmRpc2Ny
aW1pbmFudCwgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2VBcnJh
eShub2RlLmNhc2VzLCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuU3dpdGNoQ2Fz
ZToKKyAgICAgICAgICAgIGNhbGxiYWNrKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMu
X3JlY3Vyc2Uobm9kZS50ZXN0LCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5f
cmVjdXJzZUFycmF5KG5vZGUuY29uc2VxdWVudCwgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5v
ZGVUeXBlLkNvbmRpdGlvbmFsRXhwcmVzc2lvbjoKKyAgICAgICAgICAgIGNhbGxiYWNrKG5vZGUs
IHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS50ZXN0LCBjYWxsYmFjaywg
c3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmNvbnNlcXVlbnQsIGNhbGxi
YWNrLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuYWx0ZXJuYXRlLCBj
YWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5z
cGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuVGhpc0V4cHJlc3Npb246CisgICAgICAg
ICAgICBjYWxsYmFjayhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5UaHJvd1N0YXRlbWVu
dDoKKyAgICAgICAgICAgIGNhbGxiYWNrKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMu
X3JlY3Vyc2Uobm9kZS5hcmd1bWVudCwgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBl
LlRyeVN0YXRlbWVudDoKKyAgICAgICAgICAgIGNhbGxiYWNrKG5vZGUsIHN0YXRlKTsKKyAgICAg
ICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5ibG9jaywgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAg
ICAgICAgIHRoaXMuX3JlY3Vyc2VBcnJheShub2RlLmd1YXJkZWRIYW5kbGVycywgY2FsbGJhY2ss
IHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2VBcnJheShub2RlLmhhbmRsZXJzLCBj
YWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmZpbmFsaXpl
ciwgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdl
Ykluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlVuYXJ5RXhwcmVzc2lvbjoKKyAg
ICAgICAgICAgIGNhbGxiYWNrKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vy
c2Uobm9kZS5hcmd1bWVudCwgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlVwZGF0
ZUV4cHJlc3Npb246CisgICAgICAgICAgICBjYWxsYmFjayhub2RlLCBzdGF0ZSk7CisgICAgICAg
ICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuYXJndW1lbnQsIGNhbGxiYWNrLCBzdGF0ZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJl
ZS5Ob2RlVHlwZS5WYXJpYWJsZURlY2xhcmF0aW9uOgorICAgICAgICAgICAgY2FsbGJhY2sobm9k
ZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZUFycmF5KG5vZGUuZGVjbGFyYXRp
b25zLCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
V2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuVmFyaWFibGVEZWNsYXJhdG9y
OgorICAgICAgICAgICAgY2FsbGJhY2sobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5f
cmVjdXJzZShub2RlLmlkLCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVj
dXJzZShub2RlLmluaXQsIGNhbGxiYWNrLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5XaGlsZVN0
YXRlbWVudDoKKyAgICAgICAgICAgIGNhbGxiYWNrKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAg
IHRoaXMuX3JlY3Vyc2Uobm9kZS50ZXN0LCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAg
dGhpcy5fcmVjdXJzZShub2RlLmJvZHksIGNhbGxiYWNrLCBzdGF0ZSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlw
ZS5XaXRoU3RhdGVtZW50OgorICAgICAgICAgICAgY2FsbGJhY2sobm9kZSwgc3RhdGUpOworICAg
ICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLm9iamVjdCwgY2FsbGJhY2ssIHN0YXRlKTsKKyAg
ICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5ib2R5LCBjYWxsYmFjaywgc3RhdGUpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzdGF0ZS5za2lwQ2hpbGROb2Rl
cyA9IGZhbHNlOworICAgIH0sCisKKyAgICBfcmVjdXJzZUFycmF5OiBmdW5jdGlvbihhcnJheSwg
Y2FsbGJhY2ssIHN0YXRlKSAKKyAgICB7CisgICAgICAgIGZvciAodmFyIG5vZGUgb2YgYXJyYXkp
CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUsIGNhbGxiYWNrLCBzdGF0ZSk7CisgICAg
fSwKKyAgICAKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIHRyYW5zbGF0ZXMgZnJvbSBlc3ByaW1hJ3Mg
QWJzdHJhY3QgU3ludGF4IFRyZWUgdG8gb3Vycy4gCisgICAgLy8gTW9zdGx5LCB0aGlzIGlzIGp1
c3QgdGhlIGlkZW50aXR5IGZ1bmN0aW9uLiBXZSd2ZSBhZGRlZCBhbiBleHRyYSBpc0dldHRlck9y
U2V0dGVyIHByb3BlcnR5IGZvciBmdW5jdGlvbnMuCisgICAgLy8gT3VyIEFTVCBjb21wbGllcyB3
aXRoIHRoZSBNb3ppbGxhIHBhcnNlciBBUEk6CisgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96
aWxsYS5vcmcvZW4tVVMvZG9jcy9Nb3ppbGxhL1Byb2plY3RzL1NwaWRlck1vbmtleS9QYXJzZXJf
QVBJCisgICAgX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZTogZnVuY3Rpb24obm9kZSkgCisgICAg
eworICAgICAgICBpZiAoIW5vZGUpCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKworICAgICAg
ICB2YXIgcmVzdWx0ID0gbnVsbDsKKyAgICAgICAgc3dpdGNoIChub2RlLnR5cGUpIHsKKyAgICAg
ICAgY2FzZSAiQXNzaWdubWVudEV4cHJlc3Npb24iOgorICAgICAgICAgICAgcmVzdWx0ID0gewor
ICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVU
eXBlLkFzc2lnbm1lbnRFeHByZXNzaW9uLAorICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBub2Rl
Lm9wZXJhdG9yLAorICAgICAgICAgICAgICAgIGxlZnQ6IHRoaXMuX2NyZWF0ZUludGVybmFsU3lu
dGF4VHJlZShub2RlLmxlZnQpLAorICAgICAgICAgICAgICAgIHJpZ2h0OiB0aGlzLl9jcmVhdGVJ
bnRlcm5hbFN5bnRheFRyZWUobm9kZS5yaWdodCkKKyAgICAgICAgICAgIH07CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSAiQXJyYXlFeHByZXNzaW9uIjoKKyAgICAgICAgICAgIHJl
c3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4
VHJlZS5Ob2RlVHlwZS5BcnJheUV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgZWxlbWVudHM6
IG5vZGUuZWxlbWVudHMubWFwKHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZS5iaW5kKHRo
aXMpKQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJC
bG9ja1N0YXRlbWVudCI6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAg
dHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuQmxvY2tTdGF0ZW1l
bnQsCisgICAgICAgICAgICAgICAgYm9keTogbm9kZS5ib2R5Lm1hcCh0aGlzLl9jcmVhdGVJbnRl
cm5hbFN5bnRheFRyZWUuYmluZCh0aGlzKSkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSAiQmluYXJ5RXhwcmVzc2lvbiI6CisgICAgICAgICAgICByZXN1
bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRy
ZWUuTm9kZVR5cGUuQmluYXJ5RXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICBvcGVyYXRvcjog
bm9kZS5vcGVyYXRvciwKKyAgICAgICAgICAgICAgICBsZWZ0OiB0aGlzLl9jcmVhdGVJbnRlcm5h
bFN5bnRheFRyZWUobm9kZS5sZWZ0KSwKKyAgICAgICAgICAgICAgICByaWdodDogdGhpcy5fY3Jl
YXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUucmlnaHQpCisgICAgICAgICAgICB9OworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgIkJyZWFrU3RhdGVtZW50IjoKKyAgICAgICAgICAg
IHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3lu
dGF4VHJlZS5Ob2RlVHlwZS5CcmVha1N0YXRlbWVudCwKKyAgICAgICAgICAgICAgICBsYWJlbDog
dGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUubGFiZWwpCisgICAgICAgICAgICB9
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgIkNhbGxFeHByZXNzaW9uIjoKKyAg
ICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3Iu
U2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5DYWxsRXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAg
ICBjYWxsZWU6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmNhbGxlZSksCisg
ICAgICAgICAgICAgICAgYXJndW1lbnRzOiBub2RlLmFyZ3VtZW50cy5tYXAodGhpcy5fY3JlYXRl
SW50ZXJuYWxTeW50YXhUcmVlLmJpbmQodGhpcykpCisgICAgICAgICAgICB9OworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgIkNhdGNoQ2xhdXNlIjoKKyAgICAgICAgICAgIHJlc3Vs
dCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJl
ZS5Ob2RlVHlwZS5DYXRjaENsYXVzZSwKKyAgICAgICAgICAgICAgICBwYXJhbTogdGhpcy5fY3Jl
YXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUucGFyYW0pLAorICAgICAgICAgICAgICAgIGJvZHk6
IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmJvZHkpCisgICAgICAgICAgICB9
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgIkNvbmRpdGlvbmFsRXhwcmVzc2lv
biI6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5z
cGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuQ29uZGl0aW9uYWxFeHByZXNzaW9uLAor
ICAgICAgICAgICAgICAgIHRlc3Q6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2Rl
LnRlc3QpLAorICAgICAgICAgICAgICAgIGNvbnNlcXVlbnQ6IHRoaXMuX2NyZWF0ZUludGVybmFs
U3ludGF4VHJlZShub2RlLmNvbnNlcXVlbnQpLAorICAgICAgICAgICAgICAgIGFsdGVybmF0ZTog
dGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUuYWx0ZXJuYXRlKQorICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJDb250aW51ZVN0YXRlbWVu
dCI6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5z
cGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuQ29udGludWVTdGF0ZW1lbnQsCisgICAg
ICAgICAgICAgICAgbGFiZWw6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmxh
YmVsKQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJE
b1doaWxlU3RhdGVtZW50IjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAg
ICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5Eb1doaWxlU3Rh
dGVtZW50LAorICAgICAgICAgICAgICAgIGJvZHk6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4
VHJlZShub2RlLmJvZHkpLAorICAgICAgICAgICAgICAgIHRlc3Q6IHRoaXMuX2NyZWF0ZUludGVy
bmFsU3ludGF4VHJlZShub2RlLnRlc3QpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgIkRlYnVnZ2VyU3RhdGVtZW50IjoKKyAgICAgICAgICAgIHJlc3Vs
dCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJl
ZS5Ob2RlVHlwZS5EZWJ1Z2dlclN0YXRlbWVudAorICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlICJFbXB0eVN0YXRlbWVudCI6CisgICAgICAgICAgICByZXN1
bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRy
ZWUuTm9kZVR5cGUuRW1wdHlTdGF0ZW1lbnQKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSAiRXhwcmVzc2lvblN0YXRlbWVudCI6CisgICAgICAgICAgICBy
ZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRh
eFRyZWUuTm9kZVR5cGUuRXhwcmVzc2lvblN0YXRlbWVudCwKKyAgICAgICAgICAgICAgICBleHBy
ZXNzaW9uOiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5leHByZXNzaW9uKQor
ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJGb3JTdGF0
ZW1lbnQiOgorICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdl
Ykluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkZvclN0YXRlbWVudCwKKyAgICAg
ICAgICAgICAgICBpbml0OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5pbml0
KSwKKyAgICAgICAgICAgICAgICB0ZXN0OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUo
bm9kZS50ZXN0KSwKKyAgICAgICAgICAgICAgICB1cGRhdGU6IHRoaXMuX2NyZWF0ZUludGVybmFs
U3ludGF4VHJlZShub2RlLnVwZGF0ZSksCisgICAgICAgICAgICAgICAgYm9keTogdGhpcy5fY3Jl
YXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUuYm9keSkKKyAgICAgICAgICAgIH07CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiRm9ySW5TdGF0ZW1lbnQiOgorICAgICAgICAgICAg
cmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50
YXhUcmVlLk5vZGVUeXBlLkZvckluU3RhdGVtZW50LAorICAgICAgICAgICAgICAgIGxlZnQ6IHRo
aXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmxlZnQpLAorICAgICAgICAgICAgICAg
IHJpZ2h0OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5yaWdodCksCisgICAg
ICAgICAgICAgICAgYm9keTogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUuYm9k
eSkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiRnVu
Y3Rpb25EZWNsYXJhdGlvbiI6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAg
ICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuRnVuY3Rpb25E
ZWNsYXJhdGlvbiwKKyAgICAgICAgICAgICAgICBpZDogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50
YXhUcmVlKG5vZGUuaWQpLAorICAgICAgICAgICAgICAgIHBhcmFtczogbm9kZS5wYXJhbXMubWFw
KHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZS5iaW5kKHRoaXMpKSwKKyAgICAgICAgICAg
ICAgICBib2R5OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5ib2R5KSwKKyAg
ICAgICAgICAgICAgICBpc0dldHRlck9yU2V0dGVyOiBmYWxzZSAvLyBUaGlzIGlzIG9idmlvdXMs
IGJ1dCBpcyBjb252ZW5pZW50IG5vbmUgdGhlIGxlc3MgYi9jIERlY2xhcmF0aW9ucyBhbmQgRXhw
cmVzc2lvbnMgYXJlIG9mdGVuIGludGVydHdpbmVkLgorICAgICAgICAgICAgfTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlICJGdW5jdGlvbkV4cHJlc3Npb24iOgorICAgICAgICAg
ICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRT
eW50YXhUcmVlLk5vZGVUeXBlLkZ1bmN0aW9uRXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICBp
ZDogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUuaWQpLAorICAgICAgICAgICAg
ICAgIHBhcmFtczogbm9kZS5wYXJhbXMubWFwKHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJl
ZS5iaW5kKHRoaXMpKSwKKyAgICAgICAgICAgICAgICBib2R5OiB0aGlzLl9jcmVhdGVJbnRlcm5h
bFN5bnRheFRyZWUobm9kZS5ib2R5KSwKKyAgICAgICAgICAgICAgICBpc0dldHRlck9yU2V0dGVy
OiBmYWxzZSAvLyBJZiB0cnVlLCBpdCBpcyBzZXQgaW4gdGhlIFByb3BlcnR5IEFTVCBub2RlLgor
ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJJZGVudGlm
aWVyIjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJ
bnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5JZGVudGlmaWVyLAorICAgICAgICAg
ICAgICAgIG5hbWU6IG5vZGUubmFtZQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlICJJZlN0YXRlbWVudCI6CisgICAgICAgICAgICByZXN1bHQgPSB7Cisg
ICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5
cGUuSWZTdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgdGVzdDogdGhpcy5fY3JlYXRlSW50ZXJu
YWxTeW50YXhUcmVlKG5vZGUudGVzdCksCisgICAgICAgICAgICAgICAgY29uc2VxdWVudDogdGhp
cy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUuY29uc2VxdWVudCksCisgICAgICAgICAg
ICAgICAgYWx0ZXJuYXRlOiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5hbHRl
cm5hdGUpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
IkxpdGVyYWwiOgorICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6
IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkxpdGVyYWwsCisgICAgICAg
ICAgICAgICAgdmFsdWU6IG5vZGUudmFsdWUsCisgICAgICAgICAgICAgICAgcmF3OiBub2RlLnJh
dworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJMYWJl
bGVkU3RhdGVtZW50IjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0
eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5MYWJlbGVkU3RhdGVt
ZW50LAorICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRy
ZWUobm9kZS5sYWJlbCksCisgICAgICAgICAgICAgICAgYm9keTogdGhpcy5fY3JlYXRlSW50ZXJu
YWxTeW50YXhUcmVlKG5vZGUuYm9keSkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSAiTG9naWNhbEV4cHJlc3Npb24iOgorICAgICAgICAgICAgcmVzdWx0
ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVl
Lk5vZGVUeXBlLkxvZ2ljYWxFeHByZXNzaW9uLAorICAgICAgICAgICAgICAgIGxlZnQ6IHRoaXMu
X2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmxlZnQpLAorICAgICAgICAgICAgICAgIHJp
Z2h0OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5yaWdodCkKKyAgICAgICAg
ICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiTWVtYmVyRXhwcmVzc2lv
biI6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5z
cGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuTWVtYmVyRXhwcmVzc2lvbiwKKyAgICAg
ICAgICAgICAgICBvYmplY3Q6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLm9i
amVjdCksCisgICAgICAgICAgICAgICAgcHJvcGVydHk6IHRoaXMuX2NyZWF0ZUludGVybmFsU3lu
dGF4VHJlZShub2RlLnByb3BlcnR5KQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlICJOZXdFeHByZXNzaW9uIjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsK
KyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2Rl
VHlwZS5OZXdFeHByZXNzaW9uLAorICAgICAgICAgICAgICAgIGNhbGxlZTogdGhpcy5fY3JlYXRl
SW50ZXJuYWxTeW50YXhUcmVlKG5vZGUuY2FsbGVlKSwKKyAgICAgICAgICAgICAgICBhcmd1bWVu
dHM6IG5vZGUuYXJndW1lbnRzLm1hcCh0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUuYmlu
ZCh0aGlzKSkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSAiT2JqZWN0RXhwcmVzc2lvbiI6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAg
ICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuT2JqZWN0
RXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBub2RlLnByb3BlcnRpZXMu
bWFwKHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZS5iaW5kKHRoaXMpKQorICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJQcm9ncmFtIjoKKyAgICAg
ICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2Ny
aXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5Qcm9ncmFtLAorICAgICAgICAgICAgICAgIGJvZHk6IG5v
ZGUuYm9keS5tYXAodGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlLmJpbmQodGhpcykpCisg
ICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgIlByb3BlcnR5
IjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNw
ZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5Qcm9wZXJ0eSwKKyAgICAgICAgICAgICAg
ICBrZXk6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmtleSksCisgICAgICAg
ICAgICAgICAgdmFsdWU6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLnZhbHVl
KSwKKyAgICAgICAgICAgICAgICBraW5kOiBub2RlLmtpbmQKKyAgICAgICAgICAgIH07CisgICAg
ICAgICAgICBpZiAocmVzdWx0LmtpbmQgPT09ICJnZXQiIHx8IHJlc3VsdC5raW5kID09PSAic2V0
IikgeworICAgICAgICAgICAgICAgIHJlc3VsdC52YWx1ZS5pc0dldHRlck9yU2V0dGVyID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICByZXN1bHQudmFsdWUuZ2V0dGVyT3JTZXR0ZXJSYW5nZSA9IHJl
c3VsdC5rZXkucmFuZ2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSAiUmV0dXJuU3RhdGVtZW50IjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAg
ICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5S
ZXR1cm5TdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgYXJndW1lbnQ6IHRoaXMuX2NyZWF0ZUlu
dGVybmFsU3ludGF4VHJlZShub2RlLmFyZ3VtZW50KQorICAgICAgICAgICAgfTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlICJTZXF1ZW5jZUV4cHJlc3Npb24iOgorICAgICAgICAg
ICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRT
eW50YXhUcmVlLk5vZGVUeXBlLlNlcXVlbmNlRXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICBl
eHByZXNzaW9uczogbm9kZS5leHByZXNzaW9ucy5tYXAodGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50
YXhUcmVlLmJpbmQodGhpcykpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgIlN3aXRjaFN0YXRlbWVudCI6CisgICAgICAgICAgICByZXN1bHQgPSB7Cisg
ICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5
cGUuU3dpdGNoU3RhdGVtZW50LAorICAgICAgICAgICAgICAgIGRpc2NyaW1pbmFudDogdGhpcy5f
Y3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUuZGlzY3JpbWluYW50KSwKKyAgICAgICAgICAg
ICAgICBjYXNlczogbm9kZS5jYXNlcy5tYXAodGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVl
LmJpbmQodGhpcykpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgIlN3aXRjaENhc2UiOgorICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAg
ICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlN3aXRjaENh
c2UsCisgICAgICAgICAgICAgICAgdGVzdDogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVl
KG5vZGUudGVzdCksCisgICAgICAgICAgICAgICAgY29uc2VxdWVudDogbm9kZS5jb25zZXF1ZW50
Lm1hcCh0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUuYmluZCh0aGlzKSkKKyAgICAgICAg
ICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiVGhpc0V4cHJlc3Npb24i
OgorICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3Bl
Y3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlRoaXNFeHByZXNzaW9uCisgICAgICAgICAg
ICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgIlRocm93U3RhdGVtZW50IjoK
KyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0
b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5UaHJvd1N0YXRlbWVudCwKKyAgICAgICAgICAg
ICAgICBhcmd1bWVudDogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUuYXJndW1l
bnQpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgIlRy
eVN0YXRlbWVudCI6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlw
ZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuVHJ5U3RhdGVtZW50LAor
ICAgICAgICAgICAgICAgIGJsb2NrOiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9k
ZS5ibG9jayksCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdoYXQgYXJlIGd1YXJkZWQgaGFu
ZGxlcnM/CisgICAgICAgICAgICAgICAgZ3VhcmRlZEhhbmRsZXJzOiBub2RlLmd1YXJkZWRIYW5k
bGVycy5tYXAodGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlLmJpbmQodGhpcykpLAorICAg
ICAgICAgICAgICAgIGhhbmRsZXJzOiBub2RlLmhhbmRsZXJzLm1hcCh0aGlzLl9jcmVhdGVJbnRl
cm5hbFN5bnRheFRyZWUuYmluZCh0aGlzKSksCisgICAgICAgICAgICAgICAgZmluYWxpemVyOiB0
aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5maW5hbGl6ZXIpCisgICAgICAgICAg
ICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgIlVuYXJ5RXhwcmVzc2lvbiI6
CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVj
dG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuVW5hcnlFeHByZXNzaW9uLAorICAgICAgICAg
ICAgICAgIG9wZXJhdG9yOiBub2RlLm9wZXJhdG9yLAorICAgICAgICAgICAgICAgIGFyZ3VtZW50
OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5hcmd1bWVudCkKKyAgICAgICAg
ICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiVXBkYXRlRXhwcmVzc2lv
biI6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5z
cGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuVXBkYXRlRXhwcmVzc2lvbiwKKyAgICAg
ICAgICAgICAgICBvcGVyYXRvcjogbm9kZS5vcGVyYXRvciwKKyAgICAgICAgICAgICAgICBwcmVm
aXg6IG5vZGUucHJlZml4LAorICAgICAgICAgICAgICAgIGFyZ3VtZW50OiB0aGlzLl9jcmVhdGVJ
bnRlcm5hbFN5bnRheFRyZWUobm9kZS5hcmd1bWVudCkKKyAgICAgICAgICAgIH07CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiVmFyaWFibGVEZWNsYXJhdGlvbiI6CisgICAgICAg
ICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlw
dFN5bnRheFRyZWUuTm9kZVR5cGUuVmFyaWFibGVEZWNsYXJhdGlvbiwKKyAgICAgICAgICAgICAg
ICBkZWNsYXJhdGlvbnM6IG5vZGUuZGVjbGFyYXRpb25zLm1hcCh0aGlzLl9jcmVhdGVJbnRlcm5h
bFN5bnRheFRyZWUuYmluZCh0aGlzKSkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSAiVmFyaWFibGVEZWNsYXJhdG9yIjoKKyAgICAgICAgICAgIHJlc3Vs
dCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJl
ZS5Ob2RlVHlwZS5WYXJpYWJsZURlY2xhcmF0b3IsCisgICAgICAgICAgICAgICAgaWQ6IHRoaXMu
X2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmlkKSwKKyAgICAgICAgICAgICAgICBpbml0
OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5pbml0KQorICAgICAgICAgICAg
fTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJXaGlsZVN0YXRlbWVudCI6Cisg
ICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9y
LlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuV2hpbGVTdGF0ZW1lbnQsCisgICAgICAgICAgICAg
ICAgdGVzdDogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUudGVzdCksCisgICAg
ICAgICAgICAgICAgYm9keTogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUuYm9k
eSkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiV2l0
aFN0YXRlbWVudCI6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlw
ZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuV2l0aFN0YXRlbWVudCwK
KyAgICAgICAgICAgICAgICBvYmplY3Q6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShu
b2RlLm9iamVjdCksCisgICAgICAgICAgICAgICAgYm9keTogdGhpcy5fY3JlYXRlSW50ZXJuYWxT
eW50YXhUcmVlKG5vZGUuYm9keSkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIlVuc3VwcG9ydGVk
IFN5bnRheCBUcmVlIE5vZGU6ICIgKyBub2RlLnR5cGUsIG5vZGUpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICByZXN1bHQucmFuZ2UgPSBub2RlLnJhbmdlOworICAgICAgICAvLyBUaGlz
IGlzIGFuIG9iamVjdCBmb3Igd2hpY2ggeW91IGNhbiBhZGQgZmllbGRzIHRvIGFuIEFTVCBub2Rl
IHdpdGhvdXQgd29ycnlpbmcgYWJvdXQgcG9sbHV0aW5nIHRoZSBzeW50YXgtcmVsYXRlZCBmaWVs
ZHMgb2YgdGhlIG5vZGUuCisgICAgICAgIHJlc3VsdC5fYXR0YWNobWVudHMgPSB7fTsgCisKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cit9Owo=
</data>
<flag name="review"
          id="261344"
          type_id="1"
          status="+"
          setter="joepeck"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236688</attachid>
            <date>2014-08-15 16:24:15 -0700</date>
            <delta_ts>2014-08-18 13:55:14 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>39613</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwkocmV2aXNpb24gMTcyNjU4KQorKysgU291cmNl
L1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQwIEBA
CisyMDE0LTA4LTE1ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFdlYiBJbnNwZWN0b3I6IEludHJvZHVjZSBhbiBpbnNwZWN0b3IgQWJzdHJhY3QgU3ludGF4IFRy
ZWUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzU3
NjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlz
IHBhdGNoIGFkZHMgYW4gQWJzdHJhY3QgU3ludGF4IFRyZWUgdG8gdGhlIFdlYiBpbnNwZWN0b3Iu
IAorICAgICAgICBUaGlzIHN5bnRheCB0cmVlIGlzIG1vZGVsZWQgb2ZmIHRoZSBFc3ByaW1hLmpz
IHN5bnRheCB0cmVlCisgICAgICAgIHdoaWNoIGNvbXBsaWVzIHdpdGggdGhlIE1vemlsbGEgUGFy
c2VyIEFQSToKKyAgICAgICAgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9j
cy9Nb3ppbGxhL1Byb2plY3RzL1NwaWRlck1vbmtleS9QYXJzZXJfQVBJCisgICAgICAgIFNjcmlw
dCBpcyB0aGUgb3duZXIgb2YgdGhlIFdlYiBJbnNwZWN0b3Igc3ludGF4IHRyZWUsIGFuZCBoYXMg
YW4gQVBJCisgICAgICAgIGZvciBhY2Nlc3NpbmcgaXRzIHN5bnRheCB0cmVlIHByb3BlcnR5Lgor
CisgICAgICAgICogVXNlckludGVyZmFjZS9FeHRlcm5hbC9Fc3ByaW1hL2VzcHJpbWEuanM6Cisg
ICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6CisgICAgICAgICogVXNlckludGVyZmFj
ZS9Nb2RlbHMvU2NyaXB0LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdCk6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0LnByb3RvdHlwZS5yZXF1ZXN0U2NyaXB0U3ludGF4VHJl
ZS5tYWtlU3ludGF4VHJlZUFuZENhbGxDYWxsYmFjayk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
U2NyaXB0LnByb3RvdHlwZS5fcmVzb2x2ZVJlc291cmNlKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5TY3JpcHQucHJvdG90eXBlLl9tYWtlU3ludGF4VHJlZSk6CisgICAgICAgICogVXNlckludGVy
ZmFjZS9Nb2RlbHMvU2NyaXB0U3ludGF4VHJlZS5qczogQWRkZWQuCisgICAgICAgIChXZWJJbnNw
ZWN0b3IuU2NyaXB0U3ludGF4VHJlZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0U3lu
dGF4VHJlZS5wcm90b3R5cGUuZ2V0IHBhcnNlZFN1Y2Nlc3NmdWxseSk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5wcm90b3R5cGUuZm9yRWFjaE5vZGUpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUucHJvdG90eXBlLik6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5wcm90b3R5cGUuZmlsdGVyKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLnByb3RvdHlwZS5maWx0ZXJGb3JOb2Rlc0lu
UmFuZ2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUucHJvdG90eXBl
LmZpbHRlckJ5UmFuZ2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUu
cHJvdG90eXBlLmNvbnRhaW5zTm9uRW1wdHlSZXR1cm5TdGF0ZW1lbnQucmVtb3ZlRnVuY3Rpb25z
RmlsdGVyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLnByb3RvdHlw
ZS5jb250YWluc05vbkVtcHR5UmV0dXJuU3RhdGVtZW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5TY3JpcHRTeW50YXhUcmVlLnByb3RvdHlwZS51cGRhdGVUeXBlcyk6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5wcm90b3R5cGUuX2RlZmF1bHRQYXJzZXJTdGF0ZSk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5wcm90b3R5cGUuX3JlY3Vy
c2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUucHJvdG90eXBlLl9y
ZWN1cnNlQXJyYXkpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUucHJv
dG90eXBlLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUpOgorCiAyMDE0LTA4LTE1ICBCcmlhbiBK
LiBCdXJnICA8YnVyZ0Bjcy53YXNoaW5ndG9uLmVkdT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9y
OiByZXdyaXRlIENvZGVHZW5lcmF0b3JJbnNwZWN0b3IgdG8gYmUgbW9kdWxhciBhbmQgdGVzdGFi
bGUKSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9NYWluLmh0
bWwJKHJldmlzaW9uIDE3MjY1NCkKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL01haW4uaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMjYwLDYgKzI2MCw3IEBACiAgICAgPHNj
cmlwdCBzcmM9Ik1vZGVscy9SZXZpc2lvbi5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9
Ik1vZGVscy9TY29wZUNoYWluTm9kZS5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9Ik1v
ZGVscy9TY3JpcHQuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJNb2RlbHMvU2NyaXB0
U3ludGF4VHJlZS5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9Ik1vZGVscy9TY3JpcHRU
aW1lbGluZVJlY29yZC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9Ik1vZGVscy9TZXR0
aW5nLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iTW9kZWxzL1NvdXJjZUNvZGVQb3Np
dGlvbi5qcyI+PC9zY3JpcHQ+CkluZGV4OiBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9FeHRlcm5hbC9Fc3ByaW1hL2VzcHJpbWEuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
Ykluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvRXNwcmltYS9lc3ByaW1hLmpzCShy
ZXZpc2lvbiAxNzI2NTQpCisrKyBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9F
eHRlcm5hbC9Fc3ByaW1hL2VzcHJpbWEuanMJKHdvcmtpbmcgY29weSkKQEAgLTMyLDkgKzMyLDkg
QEAKICovCiAKIC8vIFdlYktpdCBNb2RpZmljYXRpb25zOgotLy8gLSBUaGUgb25seSBlZGl0IG1h
ZGUgdG8gdGhpcyBmaWxlIGlzIHRoZSB1c2UgJ1dlYkluc3BlY3Rvci5fZXNwcmltYScgYXMgdGhl
ICdleHBvcnRzJyBvYmplY3QgZm9yIGVzcHJpbWEuIAotLy8gICBUaGUgY29kZSB0aGF0IGRldGVy
bWluZXMgdGhlIGNvbnRleHQgZXNwcmltYSBpcyBsb2FkZWQgaW4gKG5vZGUuanMsIHRoZSBicm93
c2VyLCBldGMuKSBoYXMgYmVlbiByZXBsYWNlZCB3aXRoIGEgcmVmZXJlbmNlIHRvICdXZWJJbnNw
ZWN0b3IuX2VzcHJpbWEnLgotV2ViSW5zcGVjdG9yLl9lc3ByaW1hID0ge307CisvLyAtIFRoZSBv
bmx5IGVkaXQgbWFkZSB0byB0aGlzIGZpbGUgaXMgdGhlIHVzZSAnV2ViSW5zcGVjdG9yLkVzcHJp
bWEnIGFzIHRoZSAnZXhwb3J0cycgb2JqZWN0IGZvciBlc3ByaW1hLiAKKy8vICAgVGhlIGNvZGUg
dGhhdCBkZXRlcm1pbmVzIHRoZSBjb250ZXh0IGVzcHJpbWEgaXMgbG9hZGVkIGluIChub2RlLmpz
LCB0aGUgYnJvd3NlciwgZXRjLikgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBhIHJlZmVyZW5jZSB0
byAnV2ViSW5zcGVjdG9yLkVzcHJpbWEnLgorV2ViSW5zcGVjdG9yLkVzcHJpbWEgPSB7fTsKIAog
KGZ1bmN0aW9uIChleHBvcnRzKSB7CiAgICAgJ3VzZSBzdHJpY3QnOwpAQCAtMzczMiw0ICszNzMy
LDQgQEAgV2ViSW5zcGVjdG9yLl9lc3ByaW1hID0ge307CiAgICAgICAgIHJldHVybiB0eXBlczsK
ICAgICB9KCkpOwogCi19KShXZWJJbnNwZWN0b3IuX2VzcHJpbWEpOworfSkoV2ViSW5zcGVjdG9y
LkVzcHJpbWEpOwpJbmRleDogU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9k
ZWxzL1NjcmlwdC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlcklu
dGVyZmFjZS9Nb2RlbHMvU2NyaXB0LmpzCShyZXZpc2lvbiAxNzI2NTQpCisrKyBTb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvU2NyaXB0LmpzCSh3b3JraW5nIGNvcHkp
CkBAIC00MSw2ICs0MSw4IEBAIFdlYkluc3BlY3Rvci5TY3JpcHQgPSBmdW5jdGlvbihpZCwgcmFu
Z2UKIAogICAgIGlmIChzb3VyY2VNYXBVUkwpCiAgICAgICAgIFdlYkluc3BlY3Rvci5zb3VyY2VN
YXBNYW5hZ2VyLmRvd25sb2FkU291cmNlTWFwKHNvdXJjZU1hcFVSTCwgdGhpcy5fdXJsLCB0aGlz
KTsKKworICAgIHRoaXMuX3NjcmlwdFN5bnRheFRyZWUgPSBudWxsOwogfTsKIAogV2ViSW5zcGVj
dG9yLlNjcmlwdC5UeXBlSWRlbnRpZmllciA9ICJzY3JpcHQiOwpAQCAtMTI3LDYgKzEyOSwzMiBA
QCBXZWJJbnNwZWN0b3IuU2NyaXB0LnByb3RvdHlwZSA9IHsKICAgICAgICAgY29va2llW1dlYklu
c3BlY3Rvci5TY3JpcHQuRGlzcGxheU5hbWVDb29raWVLZXldID0gdGhpcy5kaXNwbGF5TmFtZTsK
ICAgICB9LAogCisgICAgcmVxdWVzdFNjcmlwdFN5bnRheFRyZWU6IGZ1bmN0aW9uKGNhbGxiYWNr
KQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX3NjcmlwdFN5bnRheFRyZWUpIHsKKyAgICAgICAg
ICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGNhbGxiYWNrKHRoaXMuX3NjcmlwdFN5bnRheFRy
ZWUpOyB9LmJpbmQodGhpcyksIDApOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgdmFyIG1ha2VTeW50YXhUcmVlQW5kQ2FsbENhbGxiYWNrID0gZnVuY3Rpb24oY29u
dGVudCkKKyAgICAgICAgeworICAgICAgICAgICAgdGhpcy5fbWFrZVN5bnRheFRyZWUoY29udGVu
dCk7CisgICAgICAgICAgICBjYWxsYmFjayh0aGlzLl9zY3JpcHRTeW50YXhUcmVlKTsKKyAgICAg
ICAgfS5iaW5kKHRoaXMpOworCisgICAgICAgIHZhciBjb250ZW50ID0gdGhpcy5jb250ZW50Owor
ICAgICAgICBpZiAoIWNvbnRlbnQgJiYgdGhpcy5fcmVzb3VyY2UgJiYgdGhpcy5fcmVzb3VyY2Uu
dHlwZSA9PT0gV2ViSW5zcGVjdG9yLlJlc291cmNlLlR5cGUuU2NyaXB0ICYmIHRoaXMuX3Jlc291
cmNlLmZpbmlzaGVkKQorICAgICAgICAgICAgY29udGVudCA9IHRoaXMuX3Jlc291cmNlLmNvbnRl
bnQ7CisgICAgICAgIGlmIChjb250ZW50KSB7CisgICAgICAgICAgICBzZXRUaW1lb3V0KG1ha2VT
eW50YXhUcmVlQW5kQ2FsbENhbGxiYWNrLCAwLCBjb250ZW50KTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIHRoaXMucmVxdWVzdENvbnRlbnQoZnVuY3Rpb24oZXJy
b3IsIHNvdXJjZVRleHQpIHsKKyAgICAgICAgICAgIG1ha2VTeW50YXhUcmVlQW5kQ2FsbENhbGxi
YWNrKGVycm9yID8gbnVsbCA6IHNvdXJjZVRleHQpOworICAgICAgICB9KTsKKyAgICB9LAorCiAg
ICAgLy8gUHJpdmF0ZQogCiAgICAgX3Jlc29sdmVSZXNvdXJjZTogZnVuY3Rpb24oKQpAQCAtMTc0
LDYgKzIwMiwxNCBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0LnByb3RvdHlwZSA9IHsKICAgICAgICAg
fQogCiAgICAgICAgIHJldHVybiBudWxsOworICAgIH0sCisKKyAgICBfbWFrZVN5bnRheFRyZWU6
IGZ1bmN0aW9uKHNvdXJjZVRleHQpIAorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX3NjcmlwdFN5
bnRheFRyZWUgfHwgIXNvdXJjZVRleHQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
dGhpcy5fc2NyaXB0U3ludGF4VHJlZSA9IG5ldyBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJl
ZShzb3VyY2VUZXh0LCB0aGlzKTsKICAgICB9CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvU2NyaXB0U3ludGF4VHJlZS5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvU2NyaXB0U3lu
dGF4VHJlZS5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL01vZGVscy9TY3JpcHRTeW50YXhUcmVlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNzgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUgPSBm
dW5jdGlvbihzb3VyY2VUZXh0LCBzY3JpcHQpCit7CisgICAgY29uc29sZS5hc3NlcnQoc2NyaXB0
ICYmIHNjcmlwdCBpbnN0YW5jZW9mIFdlYkluc3BlY3Rvci5TY3JpcHQsIHNjcmlwdCk7CisKKyAg
ICBXZWJJbnNwZWN0b3IuT2JqZWN0LmNhbGwodGhpcyk7CisgICAgdGhpcy5fc2NyaXB0ID0gc2Ny
aXB0OworCisgICAgdHJ5IHsKKyAgICAgICAgdmFyIGVzcHJpbWFTeW50YXhUcmVlID0gV2ViSW5z
cGVjdG9yLkVzcHJpbWEucGFyc2Uoc291cmNlVGV4dCwge3JhbmdlOiB0cnVlfSk7CisgICAgICAg
IHRoaXMuX3N5bnRheFRyZWUgPSB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUoZXNwcmlt
YVN5bnRheFRyZWUpOworICAgICAgICB0aGlzLl9wYXJzZWRTdWNjZXNzZnVsbHkgPSB0cnVlOwor
ICAgIH0gY2F0Y2ggKGVycm9yKSB7CisgICAgICAgIHRoaXMuX3BhcnNlZFN1Y2Nlc3NmdWxseSA9
IGZhbHNlOworICAgICAgICB0aGlzLl9zeW50YXhUcmVlID0gbnVsbDsKKyAgICAgICAgY29uc29s
ZS5lcnJvcigiQ291bGRuJ3QgcGFyc2UgSmF2YVNjcmlwdCBGaWxlOiAiICsgc2NyaXB0LnVybCwg
ZXJyb3IpOworICAgIH0KK307CisKKy8vIFRoaXMgc2hvdWxkIGJlIGtlcHQgaW4gc3luYyB3aXRo
IGFuIGVudW0gaW4gSmF2YVNjaXB0Q29yZS9ydW50aW1lL0hpZ2hGaWRlbGl0eVR5cGVQcm9maWxl
ci5oCitXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5UeXBlUHJvZmlsZXJTZWFyY2hEZXNj
cmlwdG9yID0geworICAgIE5vcm1hbEV4cHJlc3Npb246IDEsCisgICAgRnVuY3Rpb25SZXR1cm46
IDIKK307CisKK1dlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlID0geworICAg
IEFzc2lnbm1lbnRFeHByZXNzaW9uOiAiYXNzaWdubWVudC1leHByZXNzaW9uIiwKKyAgICBBcnJh
eUV4cHJlc3Npb246ICJleHByZXNzaW9uIiwKKyAgICBCbG9ja1N0YXRlbWVudDogImJsb2NrLXN0
YXRlbWVudCIsCisgICAgQmluYXJ5RXhwcmVzc2lvbjogImJpbmFyeS1leHByZXNzaW9uIiwKKyAg
ICBCcmVha1N0YXRlbWVudDogImJyZWFrLXN0YXRlbWVudCIsCisgICAgQ2FsbEV4cHJlc3Npb246
ICJjYWxsLWV4cHJlc3Npb24iLAorICAgIENhdGNoQ2xhdXNlOiAiY2F0Y2gtY2xhdXNlIiwKKyAg
ICBDb25kaXRpb25hbEV4cHJlc3Npb246ICJjb25kaXRpb25hbC1leHByZXNzaW9uIiwKKyAgICBD
b250aW51ZVN0YXRlbWVudDogImNvbnRpbnVlLXN0YXRlbWVudCIsCisgICAgRG9XaGlsZVN0YXRl
bWVudDogImRvLXdoaWxlLXN0YXRlbWVudCIsCisgICAgRGVidWdnZXJTdGF0ZW1lbnQ6ICJkZWJ1
Z2dlci1zdGF0ZW1lbnQiLAorICAgIEVtcHR5U3RhdGVtZW50OiAiZW1wdHktc3RhdGVtZW50IiwK
KyAgICBFeHByZXNzaW9uU3RhdGVtZW50OiAiZXhwcmVzc2lvbi1zdGF0ZW1lbnQiLAorICAgIEZv
clN0YXRlbWVudDogImZvci1zdGF0ZW1lbnQiLAorICAgIEZvckluU3RhdGVtZW50OiAiZm9yLWlu
LXN0YXRlbWVudCIsCisgICAgRnVuY3Rpb25EZWNsYXJhdGlvbjogImZ1bmN0aW9uLWRlY2xhcmF0
aW9uIiwKKyAgICBGdW5jdGlvbkV4cHJlc3Npb246ICJmdW5jdGlvbi1leHByZXNzaW9uIiwKKyAg
ICBJZGVudGlmaWVyOiAiaWRlbnRpZmllciIsCisgICAgSWZTdGF0ZW1lbnQ6ICJpZi1zdGF0ZW1l
bnQiLAorICAgIExpdGVyYWw6ICJsaXRlcmFsIiwKKyAgICBMYWJlbGVkU3RhdGVtZW50OiAibGFi
ZWxlZC1zdGF0ZW1lbnQiLAorICAgIExvZ2ljYWxFeHByZXNzaW9uOiAibG9naWNhbC1leHByZXNz
aW9uIiwKKyAgICBNZW1iZXJFeHByZXNzaW9uOiAibWVtYmVyLWV4cHJlc3Npb24iLAorICAgIE5l
d0V4cHJlc3Npb246ICJuZXctZXhwcmVzc2lvbiIsCisgICAgT2JqZWN0RXhwcmVzc2lvbjogIm9i
amVjdEV4cHJlc3Npb24iLAorICAgIFByb2dyYW06ICJwcm9ncmFtIiwKKyAgICBQcm9wZXJ0eTog
InByb3BlcnR5IiwKKyAgICBSZXR1cm5TdGF0ZW1lbnQ6ICJyZXR1cm4tc3RhdGVtZW50IiwKKyAg
ICBTZXF1ZW5jZUV4cHJlc3Npb246ICJzZXF1ZW5jZS1leHByZXNzaW9uIiwKKyAgICBTd2l0Y2hT
dGF0ZW1lbnQ6ICJzd2l0Y2gtc3RhdGVtZW50IiwKKyAgICBTd2l0Y2hDYXNlOiAic3dpdGNoLWNh
c2UiLAorICAgIFRoaXNFeHByZXNzaW9uOiAidGhpcy1leHByZXNzaW9uIiwKKyAgICBUaHJvd1N0
YXRlbWVudDogInRocm93LXN0YXRlbWVudCIsCisgICAgVHJ5U3RhdGVtZW50OiAidHJ5LXN0YXRl
bWVudCIsCisgICAgVW5hcnlFeHByZXNzaW9uOiAidW5hcnktZXhwcmVzc2lvbiIsCisgICAgVXBk
YXRlRXhwcmVzc2lvbjogInVwZGF0ZS1leHByZXNzaW9uIiwKKyAgICBWYXJpYWJsZURlY2xhcmF0
aW9uOiAidmFyaWFibGUtZGVjbGFyYXRpb24iLAorICAgIFZhcmlhYmxlRGVjbGFyYXRvcjogInZh
cmlhYmxlLWRlY2xhcmF0b3IiLAorICAgIFdoaWxlU3RhdGVtZW50OiAid2hpbGUtc3RhdGVtZW50
IiwKKyAgICBXaXRoU3RhdGVtZW50OiAid2l0aC1zdGF0ZW1lbnQiCit9OworCitXZWJJbnNwZWN0
b3IuU2NyaXB0U3ludGF4VHJlZS5wcm90b3R5cGUgPSB7CisgICAgY29uc3RydWN0b3I6IFdlYklu
c3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLAorICAgIF9fcHJvdG9fXzogV2ViSW5zcGVjdG9yLk9i
amVjdC5wcm90b3R5cGUsCisKKyAgICAvLyBQdWJsaWMKKyAgICAKKyAgICBnZXQgcGFyc2VkU3Vj
Y2Vzc2Z1bGx5KCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9wYXJzZWRTdWNjZXNzZnVs
bHk7CisgICAgfSwKKworICAgIGZvckVhY2hOb2RlOiBmdW5jdGlvbihjYWxsYmFjaykKKyAgICB7
CisgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX3BhcnNlZFN1Y2Nlc3NmdWxseSk7CisgICAg
ICAgIGlmICghdGhpcy5fcGFyc2VkU3VjY2Vzc2Z1bGx5KQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIHRoaXMuX3JlY3Vyc2UodGhpcy5fc3ludGF4VHJlZSwgY2FsbGJhY2ssIHRoaXMu
X2RlZmF1bHRQYXJzZXJTdGF0ZSgpKTsKKyAgICB9LAorCisgICAgZmlsdGVyOiBmdW5jdGlvbihw
cmVkaWNhdGUsIHN0YXJ0Tm9kZSkgCisgICAgeworICAgICAgICBjb25zb2xlLmFzc2VydChzdGFy
dE5vZGUgJiYgdGhpcy5fcGFyc2VkU3VjY2Vzc2Z1bGx5KTsKKyAgICAgICAgaWYgKCF0aGlzLl9w
YXJzZWRTdWNjZXNzZnVsbHkpCisgICAgICAgICAgICByZXR1cm4gW107CisKKyAgICAgICAgdmFy
IG5vZGVzID0gW107CisgICAgICAgIGZ1bmN0aW9uIGZpbHRlcihub2RlLCBzdGF0ZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKHByZWRpY2F0ZShub2RlKSkKKyAgICAgICAgICAgICAgICBu
b2Rlcy5wdXNoKG5vZGUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHN0YXRl
LnNraXBDaGlsZE5vZGVzID0gdHJ1ZTsgCisgICAgICAgIH0KKworICAgICAgICB0aGlzLl9yZWN1
cnNlKHN0YXJ0Tm9kZSwgZmlsdGVyLCB0aGlzLl9kZWZhdWx0UGFyc2VyU3RhdGUoKSk7CisKKyAg
ICAgICAgcmV0dXJuIG5vZGVzOworICAgIH0sCisKKyAgICBmaWx0ZXJCeVJhbmdlOiBmdW5jdGlv
bihzdGFydE9mZnNldCwgZW5kT2Zmc2V0KQorICAgIHsKKyAgICAgICAgY29uc29sZS5hc3NlcnQo
dGhpcy5fcGFyc2VkU3VjY2Vzc2Z1bGx5KTsKKyAgICAgICAgaWYgKCF0aGlzLl9wYXJzZWRTdWNj
ZXNzZnVsbHkpCisgICAgICAgICAgICByZXR1cm4gW107CisgICAgICAgIAorICAgICAgICB2YXIg
YWxsTm9kZXMgPSBbXTsKKyAgICAgICAgY29uc3Qgc3RhcnQgPSAwOworICAgICAgICBjb25zdCBl
bmQgPSAxOworICAgICAgICBmdW5jdGlvbiBmaWx0ZXJGb3JOb2Rlc0luUmFuZ2Uobm9kZSwgc3Rh
dGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIHByb2dyYW0gc3RhcnQgICAgICAgIHJhbmdl
ICAgICAgICAgICAgcHJvZ3JhbSBlbmQKKyAgICAgICAgICAgIC8vIFsgICAgICAgICAgICAgICAg
IFsgICAgICAgICBdICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgLy8gICAgICAgICAgICBb
IF0gIFsgICBbICAgICAgICBdIF0gIFsgXQorCisgICAgICAgICAgICAvLyBJZiBhIG5vZGUncyBy
YW5nZSBlbmRzIGJlZm9yZSB0aGUgcmFuZ2Ugd2UncmUgaW50ZXJlc3RlZCBpbiBzdGFydHMsIHdl
IGRvbid0IG5lZWQgdG8gc2VhcmNoIGFueSBvZiBpdHMKKyAgICAgICAgICAgIC8vIGVuY2xvc2lu
ZyByYW5nZXMsIGJlY2F1c2UsIGJ5IGRlZmluaXRpb24sIHRob3NlIGVuY2xvc2luZyByYW5nZXMg
YXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBub2RlJ3MgcmFuZ2UuCisgICAgICAgICAgICBpZiAo
bm9kZS5yYW5nZVtlbmRdIDwgc3RhcnRPZmZzZXQpCisgICAgICAgICAgICAgICAgc3RhdGUuc2tp
cENoaWxkTm9kZXMgPSB0cnVlOworCisgICAgICAgICAgICAvLyBXZSBhcmUgb25seSBpbnRlcmVz
dGVkIGluIG5vZGVzIHdob3NlIHN0YXJ0IHBvc2l0aW9uIGlzIHdpdGhpbiBvdXIgcmFuZ2UuCisg
ICAgICAgICAgICBpZiAoc3RhcnRPZmZzZXQgPD0gbm9kZS5yYW5nZVtzdGFydF0gJiYgbm9kZS5y
YW5nZVtzdGFydF0gPD0gZW5kT2Zmc2V0KQorICAgICAgICAgICAgICAgIGFsbE5vZGVzLnB1c2go
bm9kZSk7CisKKyAgICAgICAgICAgIC8vIE9uY2Ugd2Ugc2VlIG5vZGVzIHRoYXQgc3RhcnQgYmV5
b25kIG91ciByYW5nZSwgd2UgY2FuIHF1aXQgdHJhdmVyc2luZyB0aGUgQVNULiBXZSBjYW4gZG8g
dGhpcyBzYWZlbHkKKyAgICAgICAgICAgIC8vIGJlY2F1c2Ugd2Uga25vdyB0aGUgQVNUIGlzIHRy
YXZlcnNlZCB1c2luZyBkZXB0aCBmaXJzdCBzZWFyY2gsIHNvIGl0IHdpbGwgdHJhdmVyc2UgaW50
byBlbmNsb3NpbmcgcmFuZ2VzCisgICAgICAgICAgICAvLyBiZWZvcmUgaXQgdHJhdmVyc2VzIGlu
dG8gYWRqYWNlbnQgcmFuZ2VzLgorICAgICAgICAgICAgaWYgKG5vZGUucmFuZ2Vbc3RhcnRdID4g
ZW5kT2Zmc2V0KQorICAgICAgICAgICAgICAgIHN0YXRlLnNob3VsZFN0b3BFYXJseSA9IHRydWU7
CisgICAgICAgIH0KKworICAgICAgICB0aGlzLmZvckVhY2hOb2RlKGZpbHRlckZvck5vZGVzSW5S
YW5nZSk7CisKKyAgICAgICAgcmV0dXJuIGFsbE5vZGVzOworICAgIH0sCisKKyAgICBjb250YWlu
c05vbkVtcHR5UmV0dXJuU3RhdGVtZW50OiBmdW5jdGlvbihzdGFydE5vZGUpCisgICAgeworICAg
ICAgICBjb25zb2xlLmFzc2VydChzdGFydE5vZGUgJiYgdGhpcy5fcGFyc2VkU3VjY2Vzc2Z1bGx5
KTsKKyAgICAgICAgaWYgKCF0aGlzLl9wYXJzZWRTdWNjZXNzZnVsbHkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKHN0YXJ0Tm9kZS5fYXR0YWNobWVudHMuX2hhc05v
bkVtcHR5UmV0dXJuU3RhdGVtZW50ICE9PSB1bmRlZmluZWQpCisgICAgICAgICAgICByZXR1cm4g
c3RhcnROb2RlLl9hdHRhY2htZW50cy5faGFzTm9uRW1wdHlSZXR1cm5TdGF0ZW1lbnQ7CisKKyAg
ICAgICAgZnVuY3Rpb24gcmVtb3ZlRnVuY3Rpb25zRmlsdGVyKG5vZGUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBub2RlLnR5cGUgIT09IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhU
cmVlLk5vZGVUeXBlLkZ1bmN0aW9uRXhwcmVzc2lvbiAKKyAgICAgICAgICAgICAgICAmJiBub2Rl
LnR5cGUgIT09IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkZ1bmN0aW9u
RGVjbGFyYXRpb247CisgICAgICAgIH0KKworICAgICAgICB2YXIgbm9kZXMgPSB0aGlzLmZpbHRl
cihyZW1vdmVGdW5jdGlvbnNGaWx0ZXIsIHN0YXJ0Tm9kZSk7CisgICAgICAgIHZhciBoYXNOb25F
bXB0eVJldHVyblN0YXRlbWVudCA9IGZhbHNlOworICAgICAgICB2YXIgcmV0dXJuU3RhdGVtZW50
VHlwZSA9IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlJldHVyblN0YXRl
bWVudDsKKyAgICAgICAgZm9yICh2YXIgbm9kZSBvZiBub2RlcykgeworICAgICAgICAgICAgaWYg
KG5vZGUudHlwZSA9PT0gcmV0dXJuU3RhdGVtZW50VHlwZSAmJiBub2RlLmFyZ3VtZW50KSB7Cisg
ICAgICAgICAgICAgICAgaGFzTm9uRW1wdHlSZXR1cm5TdGF0ZW1lbnQgPSB0cnVlOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgICAKKyAg
ICAgICAgc3RhcnROb2RlLl9hdHRhY2htZW50cy5faGFzTm9uRW1wdHlSZXR1cm5TdGF0ZW1lbnQg
PSBoYXNOb25FbXB0eVJldHVyblN0YXRlbWVudDsKKworICAgICAgICByZXR1cm4gaGFzTm9uRW1w
dHlSZXR1cm5TdGF0ZW1lbnQ7CisgICAgfSwKKworICAgIHVwZGF0ZVR5cGVzOiBmdW5jdGlvbihz
b3VyY2VJRCwgbm9kZXNUb1VwZGF0ZSwgY2FsbGJhY2spIAorICAgIHsKKyAgICAgICAgY29uc29s
ZS5hc3NlcnQoQXJyYXkuaXNBcnJheShub2Rlc1RvVXBkYXRlKSAmJiB0aGlzLl9wYXJzZWRTdWNj
ZXNzZnVsbHkpOworICAgICAgICBpZiAoIXRoaXMuX3BhcnNlZFN1Y2Nlc3NmdWxseSkKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICB2YXIgYWxsUmVxdWVzdHMgPSBbXTsKKyAgICAgICAg
dmFyIGFsbFJlcXVlc3ROb2RlcyA9IFtdOworCisgICAgICAgIGZvciAodmFyIG5vZGUgb2Ygbm9k
ZXNUb1VwZGF0ZSkgeworICAgICAgICAgICAgc3dpdGNoIChub2RlLnR5cGUpIHsKKyAgICAgICAg
ICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuRnVuY3Rpb25E
ZWNsYXJhdGlvbjoKKyAgICAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRy
ZWUuTm9kZVR5cGUuRnVuY3Rpb25FeHByZXNzaW9uOgorICAgICAgICAgICAgICAgIGZvciAodmFy
IHBhcmFtIG9mIG5vZGUucGFyYW1zKSB7CisgICAgICAgICAgICAgICAgICAgIGFsbFJlcXVlc3Rz
LnB1c2goeworICAgICAgICAgICAgICAgICAgICAgICAgdHlwZUluZm9ybWF0aW9uRGVzY3JpcHRv
cjogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3Jp
cHRvci5Ob3JtYWxFeHByZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlSUQ6
IHNvdXJjZUlELAorICAgICAgICAgICAgICAgICAgICAgICAgZGl2b3Q6IHBhcmFtLnJhbmdlWzBd
CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICBhbGxSZXF1ZXN0
Tm9kZXMucHVzaChwYXJhbSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
YWxsUmVxdWVzdHMucHVzaCh7CisgICAgICAgICAgICAgICAgICAgIHR5cGVJbmZvcm1hdGlvbkRl
c2NyaXB0b3I6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLlR5cGVQcm9maWxlclNlYXJj
aERlc2NyaXB0b3IuRnVuY3Rpb25SZXR1cm4sCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZUlE
OiBzb3VyY2VJRCwKKyAgICAgICAgICAgICAgICAgICAgZGl2b3Q6IG5vZGUuYm9keS5yYW5nZVsw
XQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIGFsbFJlcXVlc3ROb2Rlcy5w
dXNoKG5vZGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBXZWJJ
bnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5WYXJpYWJsZURlY2xhcmF0b3I6Cisg
ICAgICAgICAgICAgICAgYWxsUmVxdWVzdHMucHVzaCh7CisgICAgICAgICAgICAgICAgICAgIHR5
cGVJbmZvcm1hdGlvbkRlc2NyaXB0b3I6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLlR5
cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3IuTm9ybWFsRXhwcmVzc2lvbiwKKyAgICAgICAgICAg
ICAgICAgICAgc291cmNlSUQ6IHNvdXJjZUlELAorICAgICAgICAgICAgICAgICAgICBkaXZvdDog
bm9kZS5pZC5yYW5nZVswXQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIGFs
bFJlcXVlc3ROb2Rlcy5wdXNoKG5vZGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgY29uc29sZS5hc3NlcnQoYWxsUmVxdWVzdHMu
bGVuZ3RoID09PSBhbGxSZXF1ZXN0Tm9kZXMubGVuZ3RoKTsKKworICAgICAgICBmdW5jdGlvbiBo
YW5kbGVUeXBlcyhlcnJvciwgdHlwZUluZm9ybWF0aW9uQXJyYXkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChlcnJvcikKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAg
IGNvbnNvbGUuYXNzZXJ0KHR5cGVJbmZvcm1hdGlvbkFycmF5Lmxlbmd0aCA9PT0gYWxsUmVxdWVz
dHMubGVuZ3RoKTsKKworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0eXBlSW5mb3Jt
YXRpb25BcnJheS5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIHZhciBub2RlID0gYWxs
UmVxdWVzdE5vZGVzW2ldOworICAgICAgICAgICAgICAgIHZhciB0eXBlSW5mb3JtYXRpb24gPSB0
eXBlSW5mb3JtYXRpb25BcnJheVtpXTsKKyAgICAgICAgICAgICAgICBpZiAoYWxsUmVxdWVzdHNb
aV0udHlwZUluZm9ybWF0aW9uRGVzY3JpcHRvciA9PT0gV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRh
eFRyZWUuVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvci5GdW5jdGlvblJldHVybikKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZS5fYXR0YWNobWVudHMuX3JldHVyblR5cGVzID0gdHlwZUluZm9y
bWF0aW9uOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5f
YXR0YWNobWVudHMuX3R5cGVzID0gdHlwZUluZm9ybWF0aW9uOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBjYWxsYmFjaygpOworICAgICAgICB9CisKKyAgICAgICAgUnVudGltZUFnZW50
LmdldFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0cyhhbGxSZXF1ZXN0cywgaGFuZGxl
VHlwZXMpOworICAgIH0sCisKKyAgICAvLyBQcml2YXRlCisKKyAgICBfZGVmYXVsdFBhcnNlclN0
YXRlOiBmdW5jdGlvbigpIAorICAgIHsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIHNo
b3VsZFN0b3BFYXJseTogZmFsc2UsCisgICAgICAgICAgICBza2lwQ2hpbGROb2RlczogZmFsc2UK
KyAgICAgICAgfTsKKyAgICB9LAorCisgICAgX3JlY3Vyc2U6IGZ1bmN0aW9uKG5vZGUsIGNhbGxi
YWNrLCBzdGF0ZSkgCisgICAgeworICAgICAgICBpZiAoIW5vZGUpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgaWYgKHN0YXRlLnNob3VsZFN0b3BFYXJseSB8fCBzdGF0ZS5za2lwQ2hp
bGROb2RlcykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBzd2l0Y2ggKG5vZGUudHlw
ZSkgeworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBl
LkFzc2lnbm1lbnRFeHByZXNzaW9uOgorICAgICAgICAgICAgY2FsbGJhY2sobm9kZSwgc3RhdGUp
OworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmxlZnQsIGNhbGxiYWNrLCBzdGF0ZSk7
CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUucmlnaHQsIGNhbGxiYWNrLCBzdGF0ZSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3lu
dGF4VHJlZS5Ob2RlVHlwZS5BcnJheUV4cHJlc3Npb246CisgICAgICAgICAgICBjYWxsYmFjayhu
b2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlQXJyYXkobm9kZS5lbGVtZW50
cywgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdl
Ykluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkJsb2NrU3RhdGVtZW50OgorICAg
ICAgICAgICAgY2FsbGJhY2sobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJz
ZUFycmF5KG5vZGUuYm9keSwgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkJpbmFy
eUV4cHJlc3Npb246CisgICAgICAgICAgICBjYWxsYmFjayhub2RlLCBzdGF0ZSk7CisgICAgICAg
ICAgICB0aGlzLl9yZWN1cnNlKG5vZGUubGVmdCwgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAg
ICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5yaWdodCwgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5v
ZGVUeXBlLkJyZWFrU3RhdGVtZW50OgorICAgICAgICAgICAgY2FsbGJhY2sobm9kZSwgc3RhdGUp
OworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmxhYmVsLCBjYWxsYmFjaywgc3RhdGUp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5
bnRheFRyZWUuTm9kZVR5cGUuQ2F0Y2hDbGF1c2U6CisgICAgICAgICAgICBjYWxsYmFjayhub2Rl
LCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUucGFyYW0sIGNhbGxiYWNr
LCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuYm9keSwgY2FsbGJhY2ss
IHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5T
Y3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkNhbGxFeHByZXNzaW9uOgorICAgICAgICAgICAgY2Fs
bGJhY2sobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmNhbGxl
ZSwgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2VBcnJheShub2Rl
LmFyZ3VtZW50cywgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkNvbnRpbnVlU3Rh
dGVtZW50OgorICAgICAgICAgICAgY2FsbGJhY2sobm9kZSwgc3RhdGUpOworICAgICAgICAgICAg
dGhpcy5fcmVjdXJzZShub2RlLmxhYmVsLCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5
cGUuRG9XaGlsZVN0YXRlbWVudDoKKyAgICAgICAgICAgIGNhbGxiYWNrKG5vZGUsIHN0YXRlKTsK
KyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5ib2R5LCBjYWxsYmFjaywgc3RhdGUpOwor
ICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLnRlc3QsIGNhbGxiYWNrLCBzdGF0ZSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4
VHJlZS5Ob2RlVHlwZS5EZWJ1Z2dlclN0YXRlbWVudDoKKyAgICAgICAgICAgIGNhbGxiYWNrKG5v
ZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rv
ci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkVtcHR5U3RhdGVtZW50OgorICAgICAgICAgICAg
Y2FsbGJhY2sobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
V2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuRXhwcmVzc2lvblN0YXRlbWVu
dDoKKyAgICAgICAgICAgIGNhbGxiYWNrKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMu
X3JlY3Vyc2Uobm9kZS5leHByZXNzaW9uLCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5
cGUuRm9yU3RhdGVtZW50OgorICAgICAgICAgICAgY2FsbGJhY2sobm9kZSwgc3RhdGUpOworICAg
ICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmluaXQsIGNhbGxiYWNrLCBzdGF0ZSk7CisgICAg
ICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUudGVzdCwgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAg
ICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS51cGRhdGUsIGNhbGxiYWNrLCBzdGF0ZSk7CisgICAg
ICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuYm9keSwgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVl
Lk5vZGVUeXBlLkZvckluU3RhdGVtZW50OgorICAgICAgICAgICAgY2FsbGJhY2sobm9kZSwgc3Rh
dGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmxlZnQsIGNhbGxiYWNrLCBzdGF0
ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUucmlnaHQsIGNhbGxiYWNrLCBzdGF0
ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuYm9keSwgY2FsbGJhY2ssIHN0YXRl
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRT
eW50YXhUcmVlLk5vZGVUeXBlLkZ1bmN0aW9uRGVjbGFyYXRpb246CisgICAgICAgICAgICBjYWxs
YmFjayhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuaWQsIGNh
bGxiYWNrLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlQXJyYXkobm9kZS5wYXJh
bXMsIGNhbGxiYWNrLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuYm9k
eSwgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdl
Ykluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkZ1bmN0aW9uRXhwcmVzc2lvbjoK
KyAgICAgICAgICAgIGNhbGxiYWNrKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3Jl
Y3Vyc2Uobm9kZS5pZCwgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vy
c2VBcnJheShub2RlLnBhcmFtcywgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMu
X3JlY3Vyc2Uobm9kZS5ib2R5LCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuSWRl
bnRpZmllcjoKKyAgICAgICAgICAgIGNhbGxiYWNrKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVU
eXBlLklmU3RhdGVtZW50OgorICAgICAgICAgICAgY2FsbGJhY2sobm9kZSwgc3RhdGUpOworICAg
ICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLnRlc3QsIGNhbGxiYWNrLCBzdGF0ZSk7CisgICAg
ICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuY29uc2VxdWVudCwgY2FsbGJhY2ssIHN0YXRlKTsK
KyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5hbHRlcm5hdGUsIGNhbGxiYWNrLCBzdGF0
ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0
U3ludGF4VHJlZS5Ob2RlVHlwZS5MaXRlcmFsOgorICAgICAgICAgICAgY2FsbGJhY2sobm9kZSwg
c3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNj
cmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuTGFiZWxlZFN0YXRlbWVudDoKKyAgICAgICAgICAgIGNh
bGxiYWNrKG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5sYWJl
bCwgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5ib2R5
LCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2Vi
SW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuTG9naWNhbEV4cHJlc3Npb246Cisg
ICAgICAgICAgICBjYWxsYmFjayhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1
cnNlKG5vZGUubGVmdCwgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vy
c2Uobm9kZS5yaWdodCwgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLk1lbWJlckV4
cHJlc3Npb246CisgICAgICAgICAgICBjYWxsYmFjayhub2RlLCBzdGF0ZSk7CisgICAgICAgICAg
ICB0aGlzLl9yZWN1cnNlKG5vZGUub2JqZWN0LCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAg
ICAgdGhpcy5fcmVjdXJzZShub2RlLnByb3BlcnR5LCBjYWxsYmFjaywgc3RhdGUpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUu
Tm9kZVR5cGUuTmV3RXhwcmVzc2lvbjoKKyAgICAgICAgICAgIGNhbGxiYWNrKG5vZGUsIHN0YXRl
KTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5jYWxsZWUsIGNhbGxiYWNrLCBzdGF0
ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlQXJyYXkobm9kZS5hcmd1bWVudHMsIGNhbGxi
YWNrLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0
b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5PYmplY3RFeHByZXNzaW9uOgorICAgICAgICAg
ICAgY2FsbGJhY2sobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZUFycmF5
KG5vZGUucHJvcGVydGllcywgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlByb2dy
YW06CisgICAgICAgICAgICBjYWxsYmFjayhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlz
Ll9yZWN1cnNlQXJyYXkobm9kZS5ib2R5LCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5
cGUuUHJvcGVydHk6CisgICAgICAgICAgICBjYWxsYmFjayhub2RlLCBzdGF0ZSk7CisgICAgICAg
ICAgICB0aGlzLl9yZWN1cnNlKG5vZGUua2V5LCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAg
ICAgdGhpcy5fcmVjdXJzZShub2RlLnZhbHVlLCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9k
ZVR5cGUuUmV0dXJuU3RhdGVtZW50OgorICAgICAgICAgICAgY2FsbGJhY2sobm9kZSwgc3RhdGUp
OworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmFyZ3VtZW50LCBjYWxsYmFjaywgc3Rh
dGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlw
dFN5bnRheFRyZWUuTm9kZVR5cGUuU2VxdWVuY2VFeHByZXNzaW9uOgorICAgICAgICAgICAgY2Fs
bGJhY2sobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZUFycmF5KG5vZGUu
ZXhwcmVzc2lvbnMsIGNhbGxiYWNrLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5Td2l0Y2hTdGF0
ZW1lbnQ6CisgICAgICAgICAgICBjYWxsYmFjayhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0
aGlzLl9yZWN1cnNlKG5vZGUuZGlzY3JpbWluYW50LCBjYWxsYmFjaywgc3RhdGUpOworICAgICAg
ICAgICAgdGhpcy5fcmVjdXJzZUFycmF5KG5vZGUuY2FzZXMsIGNhbGxiYWNrLCBzdGF0ZSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4
VHJlZS5Ob2RlVHlwZS5Td2l0Y2hDYXNlOgorICAgICAgICAgICAgY2FsbGJhY2sobm9kZSwgc3Rh
dGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLnRlc3QsIGNhbGxiYWNrLCBzdGF0
ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlQXJyYXkobm9kZS5jb25zZXF1ZW50LCBjYWxs
YmFjaywgc3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVj
dG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuQ29uZGl0aW9uYWxFeHByZXNzaW9uOgorICAg
ICAgICAgICAgY2FsbGJhY2sobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJz
ZShub2RlLnRlc3QsIGNhbGxiYWNrLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNl
KG5vZGUuY29uc2VxdWVudCwgY2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3Jl
Y3Vyc2Uobm9kZS5hbHRlcm5hdGUsIGNhbGxiYWNrLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5U
aGlzRXhwcmVzc2lvbjoKKyAgICAgICAgICAgIGNhbGxiYWNrKG5vZGUsIHN0YXRlKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVl
Lk5vZGVUeXBlLlRocm93U3RhdGVtZW50OgorICAgICAgICAgICAgY2FsbGJhY2sobm9kZSwgc3Rh
dGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmFyZ3VtZW50LCBjYWxsYmFjaywg
c3RhdGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNj
cmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuVHJ5U3RhdGVtZW50OgorICAgICAgICAgICAgY2FsbGJh
Y2sobm9kZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmJsb2NrLCBj
YWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZUFycmF5KG5vZGUuZ3Vh
cmRlZEhhbmRsZXJzLCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJz
ZUFycmF5KG5vZGUuaGFuZGxlcnMsIGNhbGxiYWNrLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlz
Ll9yZWN1cnNlKG5vZGUuZmluYWxpemVyLCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5
cGUuVW5hcnlFeHByZXNzaW9uOgorICAgICAgICAgICAgY2FsbGJhY2sobm9kZSwgc3RhdGUpOwor
ICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmFyZ3VtZW50LCBjYWxsYmFjaywgc3RhdGUp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLlNjcmlwdFN5
bnRheFRyZWUuTm9kZVR5cGUuVXBkYXRlRXhwcmVzc2lvbjoKKyAgICAgICAgICAgIGNhbGxiYWNr
KG5vZGUsIHN0YXRlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5hcmd1bWVudCwg
Y2FsbGJhY2ssIHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYklu
c3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlZhcmlhYmxlRGVjbGFyYXRpb246Cisg
ICAgICAgICAgICBjYWxsYmFjayhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1
cnNlQXJyYXkobm9kZS5kZWNsYXJhdGlvbnMsIGNhbGxiYWNrLCBzdGF0ZSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2Rl
VHlwZS5WYXJpYWJsZURlY2xhcmF0b3I6CisgICAgICAgICAgICBjYWxsYmFjayhub2RlLCBzdGF0
ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuaWQsIGNhbGxiYWNrLCBzdGF0ZSk7
CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuaW5pdCwgY2FsbGJhY2ssIHN0YXRlKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5TY3JpcHRTeW50
YXhUcmVlLk5vZGVUeXBlLldoaWxlU3RhdGVtZW50OgorICAgICAgICAgICAgY2FsbGJhY2sobm9k
ZSwgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLnRlc3QsIGNhbGxiYWNr
LCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuYm9keSwgY2FsbGJhY2ss
IHN0YXRlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFdlYkluc3BlY3Rvci5T
Y3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLldpdGhTdGF0ZW1lbnQ6CisgICAgICAgICAgICBjYWxs
YmFjayhub2RlLCBzdGF0ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUub2JqZWN0
LCBjYWxsYmFjaywgc3RhdGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmJvZHks
IGNhbGxiYWNrLCBzdGF0ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg
ICAgIHN0YXRlLnNraXBDaGlsZE5vZGVzID0gZmFsc2U7CisgICAgfSwKKworICAgIF9yZWN1cnNl
QXJyYXk6IGZ1bmN0aW9uKGFycmF5LCBjYWxsYmFjaywgc3RhdGUpIAorICAgIHsKKyAgICAgICAg
Zm9yICh2YXIgbm9kZSBvZiBhcnJheSkKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZSwg
Y2FsbGJhY2ssIHN0YXRlKTsKKyAgICB9LAorICAgIAorICAgIC8vIFRoaXMgZnVuY3Rpb24gdHJh
bnNsYXRlcyBmcm9tIGVzcHJpbWEncyBBYnN0cmFjdCBTeW50YXggVHJlZSB0byBvdXJzLiAKKyAg
ICAvLyBNb3N0bHksIHRoaXMgaXMganVzdCB0aGUgaWRlbnRpdHkgZnVuY3Rpb24uIFdlJ3ZlIGFk
ZGVkIGFuIGV4dHJhIGlzR2V0dGVyT3JTZXR0ZXIgcHJvcGVydHkgZm9yIGZ1bmN0aW9ucy4KKyAg
ICAvLyBPdXIgQVNUIGNvbXBsaWVzIHdpdGggdGhlIE1vemlsbGEgcGFyc2VyIEFQSToKKyAgICAv
LyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL01vemlsbGEvUHJvamVj
dHMvU3BpZGVyTW9ua2V5L1BhcnNlcl9BUEkKKyAgICBfY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVl
OiBmdW5jdGlvbihub2RlKSAKKyAgICB7CisgICAgICAgIGlmICghbm9kZSkKKyAgICAgICAgICAg
IHJldHVybiBudWxsOworCisgICAgICAgIHZhciByZXN1bHQgPSBudWxsOworICAgICAgICBzd2l0
Y2ggKG5vZGUudHlwZSkgeworICAgICAgICBjYXNlICJBc3NpZ25tZW50RXhwcmVzc2lvbiI6Cisg
ICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9y
LlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuQXNzaWdubWVudEV4cHJlc3Npb24sCisgICAgICAg
ICAgICAgICAgb3BlcmF0b3I6IG5vZGUub3BlcmF0b3IsCisgICAgICAgICAgICAgICAgbGVmdDog
dGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUubGVmdCksCisgICAgICAgICAgICAg
ICAgcmlnaHQ6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLnJpZ2h0KQorICAg
ICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJBcnJheUV4cHJl
c3Npb24iOgorICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdl
Ykluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkFycmF5RXhwcmVzc2lvbiwKKyAg
ICAgICAgICAgICAgICBlbGVtZW50czogbm9kZS5lbGVtZW50cy5tYXAodGhpcy5fY3JlYXRlSW50
ZXJuYWxTeW50YXhUcmVlLmJpbmQodGhpcykpCisgICAgICAgICAgICB9OworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgIkJsb2NrU3RhdGVtZW50IjoKKyAgICAgICAgICAgIHJlc3Vs
dCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJl
ZS5Ob2RlVHlwZS5CbG9ja1N0YXRlbWVudCwKKyAgICAgICAgICAgICAgICBib2R5OiBub2RlLmJv
ZHkubWFwKHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZS5iaW5kKHRoaXMpKQorICAgICAg
ICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJCaW5hcnlFeHByZXNz
aW9uIjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJ
bnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5CaW5hcnlFeHByZXNzaW9uLAorICAg
ICAgICAgICAgICAgIG9wZXJhdG9yOiBub2RlLm9wZXJhdG9yLAorICAgICAgICAgICAgICAgIGxl
ZnQ6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmxlZnQpLAorICAgICAgICAg
ICAgICAgIHJpZ2h0OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5yaWdodCkK
KyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiQnJlYWtT
dGF0ZW1lbnQiOgorICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6
IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkJyZWFrU3RhdGVtZW50LAor
ICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9k
ZS5sYWJlbCkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSAiQ2FsbEV4cHJlc3Npb24iOgorICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAg
ICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkNhbGxFeHBy
ZXNzaW9uLAorICAgICAgICAgICAgICAgIGNhbGxlZTogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50
YXhUcmVlKG5vZGUuY2FsbGVlKSwKKyAgICAgICAgICAgICAgICBhcmd1bWVudHM6IG5vZGUuYXJn
dW1lbnRzLm1hcCh0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUuYmluZCh0aGlzKSkKKyAg
ICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiQ2F0Y2hDbGF1
c2UiOgorICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYklu
c3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkNhdGNoQ2xhdXNlLAorICAgICAgICAg
ICAgICAgIHBhcmFtOiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5wYXJhbSks
CisgICAgICAgICAgICAgICAgYm9keTogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5v
ZGUuYm9keSkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSAiQ29uZGl0aW9uYWxFeHByZXNzaW9uIjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAg
ICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5D
b25kaXRpb25hbEV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgdGVzdDogdGhpcy5fY3JlYXRl
SW50ZXJuYWxTeW50YXhUcmVlKG5vZGUudGVzdCksCisgICAgICAgICAgICAgICAgY29uc2VxdWVu
dDogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUuY29uc2VxdWVudCksCisgICAg
ICAgICAgICAgICAgYWx0ZXJuYXRlOiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9k
ZS5hbHRlcm5hdGUpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgIkNvbnRpbnVlU3RhdGVtZW50IjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAg
ICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5D
b250aW51ZVN0YXRlbWVudCwKKyAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5fY3JlYXRlSW50
ZXJuYWxTeW50YXhUcmVlKG5vZGUubGFiZWwpCisgICAgICAgICAgICB9OworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgIkRvV2hpbGVTdGF0ZW1lbnQiOgorICAgICAgICAgICAgcmVz
dWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhU
cmVlLk5vZGVUeXBlLkRvV2hpbGVTdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgYm9keTogdGhp
cy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUuYm9keSksCisgICAgICAgICAgICAgICAg
dGVzdDogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUudGVzdCkKKyAgICAgICAg
ICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiRGVidWdnZXJTdGF0ZW1l
bnQiOgorICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYklu
c3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLkRlYnVnZ2VyU3RhdGVtZW50CisgICAg
ICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgIkVtcHR5U3RhdGVt
ZW50IjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJ
bnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5FbXB0eVN0YXRlbWVudAorICAgICAg
ICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJFeHByZXNzaW9uU3Rh
dGVtZW50IjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBX
ZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5FeHByZXNzaW9uU3RhdGVtZW50
LAorICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4
VHJlZShub2RlLmV4cHJlc3Npb24pCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgIkZvclN0YXRlbWVudCI6CisgICAgICAgICAgICByZXN1bHQgPSB7Cisg
ICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5
cGUuRm9yU3RhdGVtZW50LAorICAgICAgICAgICAgICAgIGluaXQ6IHRoaXMuX2NyZWF0ZUludGVy
bmFsU3ludGF4VHJlZShub2RlLmluaXQpLAorICAgICAgICAgICAgICAgIHRlc3Q6IHRoaXMuX2Ny
ZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLnRlc3QpLAorICAgICAgICAgICAgICAgIHVwZGF0
ZTogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUudXBkYXRlKSwKKyAgICAgICAg
ICAgICAgICBib2R5OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5ib2R5KQor
ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJGb3JJblN0
YXRlbWVudCI6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTog
V2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuRm9ySW5TdGF0ZW1lbnQsCisg
ICAgICAgICAgICAgICAgbGVmdDogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUu
bGVmdCksCisgICAgICAgICAgICAgICAgcmlnaHQ6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4
VHJlZShub2RlLnJpZ2h0KSwKKyAgICAgICAgICAgICAgICBib2R5OiB0aGlzLl9jcmVhdGVJbnRl
cm5hbFN5bnRheFRyZWUobm9kZS5ib2R5KQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlICJGdW5jdGlvbkRlY2xhcmF0aW9uIjoKKyAgICAgICAgICAgIHJl
c3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4
VHJlZS5Ob2RlVHlwZS5GdW5jdGlvbkRlY2xhcmF0aW9uLAorICAgICAgICAgICAgICAgIGlkOiB0
aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5pZCksCisgICAgICAgICAgICAgICAg
cGFyYW1zOiBub2RlLnBhcmFtcy5tYXAodGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlLmJp
bmQodGhpcykpLAorICAgICAgICAgICAgICAgIGJvZHk6IHRoaXMuX2NyZWF0ZUludGVybmFsU3lu
dGF4VHJlZShub2RlLmJvZHkpLAorICAgICAgICAgICAgICAgIGlzR2V0dGVyT3JTZXR0ZXI6IGZh
bHNlIC8vIFRoaXMgaXMgb2J2aW91cywgYnV0IGlzIGNvbnZlbmllbnQgbm9uZSB0aGUgbGVzcyBi
L2MgRGVjbGFyYXRpb25zIGFuZCBFeHByZXNzaW9ucyBhcmUgb2Z0ZW4gaW50ZXJ0d2luZWQuCisg
ICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgIkZ1bmN0aW9u
RXhwcmVzc2lvbiI6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlw
ZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuRnVuY3Rpb25FeHByZXNz
aW9uLAorICAgICAgICAgICAgICAgIGlkOiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUo
bm9kZS5pZCksCisgICAgICAgICAgICAgICAgcGFyYW1zOiBub2RlLnBhcmFtcy5tYXAodGhpcy5f
Y3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlLmJpbmQodGhpcykpLAorICAgICAgICAgICAgICAgIGJv
ZHk6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmJvZHkpLAorICAgICAgICAg
ICAgICAgIGlzR2V0dGVyT3JTZXR0ZXI6IGZhbHNlIC8vIElmIHRydWUsIGl0IGlzIHNldCBpbiB0
aGUgUHJvcGVydHkgQVNUIG5vZGUuCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgIklkZW50aWZpZXIiOgorICAgICAgICAgICAgcmVzdWx0ID0geworICAg
ICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBl
LklkZW50aWZpZXIsCisgICAgICAgICAgICAgICAgbmFtZTogbm9kZS5uYW1lCisgICAgICAgICAg
ICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgIklmU3RhdGVtZW50IjoKKyAg
ICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3Iu
U2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5JZlN0YXRlbWVudCwKKyAgICAgICAgICAgICAgICB0
ZXN0OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS50ZXN0KSwKKyAgICAgICAg
ICAgICAgICBjb25zZXF1ZW50OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5j
b25zZXF1ZW50KSwKKyAgICAgICAgICAgICAgICBhbHRlcm5hdGU6IHRoaXMuX2NyZWF0ZUludGVy
bmFsU3ludGF4VHJlZShub2RlLmFsdGVybmF0ZSkKKyAgICAgICAgICAgIH07CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSAiTGl0ZXJhbCI6CisgICAgICAgICAgICByZXN1bHQgPSB7
CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9k
ZVR5cGUuTGl0ZXJhbCwKKyAgICAgICAgICAgICAgICB2YWx1ZTogbm9kZS52YWx1ZSwKKyAgICAg
ICAgICAgICAgICByYXc6IG5vZGUucmF3CisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgIkxhYmVsZWRTdGF0ZW1lbnQiOgorICAgICAgICAgICAgcmVzdWx0
ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVl
Lk5vZGVUeXBlLkxhYmVsZWRTdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMu
X2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmxhYmVsKSwKKyAgICAgICAgICAgICAgICBi
b2R5OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5ib2R5KQorICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJMb2dpY2FsRXhwcmVzc2lv
biI6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5z
cGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuTG9naWNhbEV4cHJlc3Npb24sCisgICAg
ICAgICAgICAgICAgbGVmdDogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUubGVm
dCksCisgICAgICAgICAgICAgICAgcmlnaHQ6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJl
ZShub2RlLnJpZ2h0KQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlICJNZW1iZXJFeHByZXNzaW9uIjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAg
ICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5N
ZW1iZXJFeHByZXNzaW9uLAorICAgICAgICAgICAgICAgIG9iamVjdDogdGhpcy5fY3JlYXRlSW50
ZXJuYWxTeW50YXhUcmVlKG5vZGUub2JqZWN0KSwKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eTog
dGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUucHJvcGVydHkpCisgICAgICAgICAg
ICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgIk5ld0V4cHJlc3Npb24iOgor
ICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rv
ci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLk5ld0V4cHJlc3Npb24sCisgICAgICAgICAgICAg
ICAgY2FsbGVlOiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5jYWxsZWUpLAor
ICAgICAgICAgICAgICAgIGFyZ3VtZW50czogbm9kZS5hcmd1bWVudHMubWFwKHRoaXMuX2NyZWF0
ZUludGVybmFsU3ludGF4VHJlZS5iaW5kKHRoaXMpKQorICAgICAgICAgICAgfTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlICJPYmplY3RFeHByZXNzaW9uIjoKKyAgICAgICAgICAg
IHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3lu
dGF4VHJlZS5Ob2RlVHlwZS5PYmplY3RFeHByZXNzaW9uLAorICAgICAgICAgICAgICAgIHByb3Bl
cnRpZXM6IG5vZGUucHJvcGVydGllcy5tYXAodGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVl
LmJpbmQodGhpcykpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgIlByb2dyYW0iOgorICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAg
IHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlByb2dyYW0sCisg
ICAgICAgICAgICAgICAgYm9keTogbm9kZS5ib2R5Lm1hcCh0aGlzLl9jcmVhdGVJbnRlcm5hbFN5
bnRheFRyZWUuYmluZCh0aGlzKSkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSAiUHJvcGVydHkiOgorICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAg
ICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlBy
b3BlcnR5LAorICAgICAgICAgICAgICAgIGtleTogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhU
cmVlKG5vZGUua2V5KSwKKyAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5fY3JlYXRlSW50ZXJu
YWxTeW50YXhUcmVlKG5vZGUudmFsdWUpLAorICAgICAgICAgICAgICAgIGtpbmQ6IG5vZGUua2lu
ZAorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQua2luZCA9PT0gImdldCIg
fHwgcmVzdWx0LmtpbmQgPT09ICJzZXQiKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0LnZhbHVl
LmlzR2V0dGVyT3JTZXR0ZXIgPSB0cnVlOworICAgICAgICAgICAgICAgIHJlc3VsdC52YWx1ZS5n
ZXR0ZXJPclNldHRlclJhbmdlID0gcmVzdWx0LmtleS5yYW5nZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJSZXR1cm5TdGF0ZW1lbnQiOgorICAgICAg
ICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3Jp
cHRTeW50YXhUcmVlLk5vZGVUeXBlLlJldHVyblN0YXRlbWVudCwKKyAgICAgICAgICAgICAgICBh
cmd1bWVudDogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUuYXJndW1lbnQpCisg
ICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgIlNlcXVlbmNl
RXhwcmVzc2lvbiI6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlw
ZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuU2VxdWVuY2VFeHByZXNz
aW9uLAorICAgICAgICAgICAgICAgIGV4cHJlc3Npb25zOiBub2RlLmV4cHJlc3Npb25zLm1hcCh0
aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUuYmluZCh0aGlzKSkKKyAgICAgICAgICAgIH07
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiU3dpdGNoU3RhdGVtZW50IjoKKyAg
ICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3Iu
U2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5Td2l0Y2hTdGF0ZW1lbnQsCisgICAgICAgICAgICAg
ICAgZGlzY3JpbWluYW50OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5kaXNj
cmltaW5hbnQpLAorICAgICAgICAgICAgICAgIGNhc2VzOiBub2RlLmNhc2VzLm1hcCh0aGlzLl9j
cmVhdGVJbnRlcm5hbFN5bnRheFRyZWUuYmluZCh0aGlzKSkKKyAgICAgICAgICAgIH07CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiU3dpdGNoQ2FzZSI6CisgICAgICAgICAgICBy
ZXN1bHQgPSB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRh
eFRyZWUuTm9kZVR5cGUuU3dpdGNoQ2FzZSwKKyAgICAgICAgICAgICAgICB0ZXN0OiB0aGlzLl9j
cmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS50ZXN0KSwKKyAgICAgICAgICAgICAgICBjb25z
ZXF1ZW50OiBub2RlLmNvbnNlcXVlbnQubWFwKHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJl
ZS5iaW5kKHRoaXMpKQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlICJUaGlzRXhwcmVzc2lvbiI6CisgICAgICAgICAgICByZXN1bHQgPSB7CisgICAgICAg
ICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNjcmlwdFN5bnRheFRyZWUuTm9kZVR5cGUuVGhp
c0V4cHJlc3Npb24KKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSAiVGhyb3dTdGF0ZW1lbnQiOgorICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAg
ICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlRocm93
U3RhdGVtZW50LAorICAgICAgICAgICAgICAgIGFyZ3VtZW50OiB0aGlzLl9jcmVhdGVJbnRlcm5h
bFN5bnRheFRyZWUobm9kZS5hcmd1bWVudCkKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSAiVHJ5U3RhdGVtZW50IjoKKyAgICAgICAgICAgIHJlc3VsdCA9
IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5O
b2RlVHlwZS5UcnlTdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgYmxvY2s6IHRoaXMuX2NyZWF0
ZUludGVybmFsU3ludGF4VHJlZShub2RlLmJsb2NrKSwKKyAgICAgICAgICAgICAgICAvLyBGSVhN
RTogV2hhdCBhcmUgZ3VhcmRlZCBoYW5kbGVycz8KKyAgICAgICAgICAgICAgICBndWFyZGVkSGFu
ZGxlcnM6IG5vZGUuZ3VhcmRlZEhhbmRsZXJzLm1hcCh0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRh
eFRyZWUuYmluZCh0aGlzKSksCisgICAgICAgICAgICAgICAgaGFuZGxlcnM6IG5vZGUuaGFuZGxl
cnMubWFwKHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZS5iaW5kKHRoaXMpKSwKKyAgICAg
ICAgICAgICAgICBmaW5hbGl6ZXI6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2Rl
LmZpbmFsaXplcikKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSAiVW5hcnlFeHByZXNzaW9uIjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAg
ICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5VbmFy
eUV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgb3BlcmF0b3I6IG5vZGUub3BlcmF0b3IsCisg
ICAgICAgICAgICAgICAgYXJndW1lbnQ6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShu
b2RlLmFyZ3VtZW50KQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlICJVcGRhdGVFeHByZXNzaW9uIjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAg
ICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5V
cGRhdGVFeHByZXNzaW9uLAorICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBub2RlLm9wZXJhdG9y
LAorICAgICAgICAgICAgICAgIHByZWZpeDogbm9kZS5wcmVmaXgsCisgICAgICAgICAgICAgICAg
YXJndW1lbnQ6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShub2RlLmFyZ3VtZW50KQor
ICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJWYXJpYWJs
ZURlY2xhcmF0aW9uIjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAgICAgICB0
eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5WYXJpYWJsZURlY2xh
cmF0aW9uLAorICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uczogbm9kZS5kZWNsYXJhdGlvbnMu
bWFwKHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZS5iaW5kKHRoaXMpKQorICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJWYXJpYWJsZURlY2xhcmF0
b3IiOgorICAgICAgICAgICAgcmVzdWx0ID0geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYklu
c3BlY3Rvci5TY3JpcHRTeW50YXhUcmVlLk5vZGVUeXBlLlZhcmlhYmxlRGVjbGFyYXRvciwKKyAg
ICAgICAgICAgICAgICBpZDogdGhpcy5fY3JlYXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUuaWQp
LAorICAgICAgICAgICAgICAgIGluaXQ6IHRoaXMuX2NyZWF0ZUludGVybmFsU3ludGF4VHJlZShu
b2RlLmluaXQpCisgICAgICAgICAgICB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgIldoaWxlU3RhdGVtZW50IjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHsKKyAgICAgICAgICAg
ICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5Ob2RlVHlwZS5XaGlsZVN0
YXRlbWVudCwKKyAgICAgICAgICAgICAgICB0ZXN0OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRh
eFRyZWUobm9kZS50ZXN0KSwKKyAgICAgICAgICAgICAgICBib2R5OiB0aGlzLl9jcmVhdGVJbnRl
cm5hbFN5bnRheFRyZWUobm9kZS5ib2R5KQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlICJXaXRoU3RhdGVtZW50IjoKKyAgICAgICAgICAgIHJlc3VsdCA9
IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU2NyaXB0U3ludGF4VHJlZS5O
b2RlVHlwZS5XaXRoU3RhdGVtZW50LAorICAgICAgICAgICAgICAgIG9iamVjdDogdGhpcy5fY3Jl
YXRlSW50ZXJuYWxTeW50YXhUcmVlKG5vZGUub2JqZWN0KSwKKyAgICAgICAgICAgICAgICBib2R5
OiB0aGlzLl9jcmVhdGVJbnRlcm5hbFN5bnRheFRyZWUobm9kZS5ib2R5KQorICAgICAgICAgICAg
fTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgY29u
c29sZS5lcnJvcigiVW5zdXBwb3J0ZWQgU3ludGF4IFRyZWUgTm9kZTogIiArIG5vZGUudHlwZSwg
bm9kZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJlc3VsdC5yYW5nZSA9IG5vZGUu
cmFuZ2U7CisgICAgICAgIC8vIFRoaXMgaXMgYW4gb2JqZWN0IGZvciB3aGljaCB5b3UgY2FuIGFk
ZCBmaWVsZHMgdG8gYW4gQVNUIG5vZGUgd2l0aG91dCB3b3JyeWluZyBhYm91dCBwb2xsdXRpbmcg
dGhlIHN5bnRheC1yZWxhdGVkIGZpZWxkcyBvZiB0aGUgbm9kZS4KKyAgICAgICAgcmVzdWx0Ll9h
dHRhY2htZW50cyA9IHt9OyAKKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KK307Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>