<?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>61179</bug_id>
          
          <creation_ts>2011-05-20 02:09:29 -0700</creation_ts>
          <short_desc>Web Inspector: [Chromium] Add an ability to look up and explore an object from a heap profile</short_desc>
          <delta_ts>2011-10-17 06:42:18 -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 (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>69234</dependson>
    
    <dependson>70039</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mikhail Naganov">mnaganov</reporter>
          <assigned_to name="Mikhail Naganov">mnaganov</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>dglazkov</cc>
    
    <cc>gustavo</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>406961</commentid>
    <comment_count>0</comment_count>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2011-05-20 02:09:29 -0700</bug_when>
    <thetext>As not all properties can be stored in heap profiles (esp. for DOM wrappers), it is very important to be able to take an object and explore it in the console.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453910</commentid>
    <comment_count>1</comment_count>
      <attachid>104521</attachid>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2011-08-19 10:24:07 -0700</bug_when>
    <thetext>Created attachment 104521
WIP: A prototype implementation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453973</commentid>
    <comment_count>2</comment_count>
      <attachid>104521</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-08-19 12:11:26 -0700</bug_when>
    <thetext>Comment on attachment 104521
WIP: A prototype implementation

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

Overall looks good. Could you please get rid of the copypaste and we can give it green light.

&gt; Source/WebCore/inspector/Inspector.json:1840
&gt; +                    { &quot;name&quot;: &quot;objectId&quot;, &quot;type&quot;: &quot;integer&quot; }

You should probably start expanding your type definitions in this JSON.

&gt; Source/WebCore/inspector/front-end/DetailedHeapshotGridNodes.js:273
&gt; +        if (this._type === &quot;string&quot;) {

This looks like a nasty copypaste. You could either create a new class ObjectPopover.js (preferred) or place this code into the ObjectPropertiesSection.

&gt; Source/WebCore/inspector/front-end/DetailedHeapshotView.js:1048
&gt; +        var element = hover[0];

Not nice</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475408</commentid>
    <comment_count>3</comment_count>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2011-09-29 07:10:26 -0700</bug_when>
    <thetext>*** Bug 61176 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475412</commentid>
    <comment_count>4</comment_count>
      <attachid>109160</attachid>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2011-09-29 07:15:48 -0700</bug_when>
    <thetext>Created attachment 109160
Patch

Might not compile on the cr-linux bot, as the new V8 version hasn&apos;t been pushed yet.

Also, contains 3 style violations:

Source/WebCore/inspector/InspectorProfilerAgent.cpp:382:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InspectorProfilerAgent.h:94:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
-- These two can&apos;t be fixed, as in Inspector RPC we pass results this way. --

Source/WebCore/bindings/v8/ScriptProfiler.cpp:92:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
-- Results of &apos;if&apos; branches are different types, so &apos;?:&apos; can&apos;t be used. --</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475414</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-29 07:17:07 -0700</bug_when>
    <thetext>Attachment 109160 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/inspector/InspectorProfilerAgent.cpp:382:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InspectorProfilerAgent.h:94:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/bindings/v8/ScriptProfiler.cpp:92:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Total errors found: 3 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475415</commentid>
    <comment_count>6</comment_count>
      <attachid>109160</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-09-29 07:19:48 -0700</bug_when>
    <thetext>Comment on attachment 109160
Patch

Attachment 109160 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/9900083</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475419</commentid>
    <comment_count>7</comment_count>
      <attachid>109160</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-09-29 07:22:38 -0700</bug_when>
    <thetext>Comment on attachment 109160
Patch

Attachment 109160 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/9893332</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475421</commentid>
    <comment_count>8</comment_count>
      <attachid>109162</attachid>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2011-09-29 07:29:31 -0700</bug_when>
    <thetext>Created attachment 109162
Add JSC stubs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475423</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-29 07:31:55 -0700</bug_when>
    <thetext>Attachment 109162 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/inspector/InspectorProfilerAgent.cpp:382:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InspectorProfilerAgent.h:94:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/bindings/v8/ScriptProfiler.cpp:92:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Total errors found: 3 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475424</commentid>
    <comment_count>10</comment_count>
      <attachid>109162</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-29 07:34:29 -0700</bug_when>
    <thetext>Comment on attachment 109162
Add JSC stubs

Attachment 109162 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9880917</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475425</commentid>
    <comment_count>11</comment_count>
      <attachid>109162</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-09-29 07:35:35 -0700</bug_when>
    <thetext>Comment on attachment 109162
Add JSC stubs

Attachment 109162 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/9889387</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475427</commentid>
    <comment_count>12</comment_count>
      <attachid>109163</attachid>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2011-09-29 07:39:38 -0700</bug_when>
    <thetext>Created attachment 109163
JSC fix again</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475428</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-29 07:43:16 -0700</bug_when>
    <thetext>Attachment 109163 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/inspector/InspectorProfilerAgent.cpp:382:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InspectorProfilerAgent.h:94:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/bindings/v8/ScriptProfiler.cpp:92:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Total errors found: 3 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475473</commentid>
    <comment_count>14</comment_count>
      <attachid>109163</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-29 09:47:33 -0700</bug_when>
    <thetext>Comment on attachment 109163
JSC fix again

Attachment 109163 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9898134</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476054</commentid>
    <comment_count>15</comment_count>
      <attachid>109163</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-09-30 06:17:32 -0700</bug_when>
    <thetext>Comment on attachment 109163
JSC fix again

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

Overall looks good. A number of nits to be fixed prior to landing.

&gt; Source/WebCore/bindings/js/ScriptProfiler.cpp:45
&gt; +PassRefPtr&lt;InspectorValue&gt; ScriptProfiler::getObjectByHeapObjectId(unsigned, InjectedScriptManager*)

While we use &quot;get&quot; prefixes in the protocol, regular WebCore classes should not have those.

&gt; Source/WebCore/bindings/v8/ScriptProfiler.cpp:83
&gt; +    v8::HandleScope scope;

Blank line here would be great.

&gt; Source/WebCore/bindings/v8/ScriptProfiler.cpp:87
&gt; +    v8::Handle&lt;v8::Object&gt; object(value.As&lt;v8::Object&gt;());

ditto

&gt;&gt; Source/WebCore/bindings/v8/ScriptProfiler.cpp:92
&gt;&gt; +    if (!injectedScript.hasNoValue())
&gt; 
&gt; An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]

Please follow the suggested style.

&gt; Source/WebCore/inspector/Inspector.json:1947
&gt; +                    { &quot;name&quot;: &quot;objectId&quot;, &quot;type&quot;: &quot;integer&quot; }

You should define class for your ids in the long run.

&gt; Source/WebCore/inspector/InspectorProfilerAgent.cpp:384
&gt; +    if (m_frontend) {

no need to check for front-end.

&gt; Source/WebCore/inspector/InspectorProfilerAgent.cpp:386
&gt; +        heapObject-&gt;asObject(result);

Since this result is not optional (according to the protocol), you can&apos;t pass null here. You should assign errorString.

&gt; Source/WebCore/inspector/front-end/DetailedHeapshotGridNodes.js:189
&gt; +    } else if (node.flags &amp; tree.snapshot.nodeFlags.canBeQueried) {

no need for {}

&gt; Source/WebCore/inspector/front-end/DetailedHeapshotGridNodes.js:274
&gt; +        if (this._type === &quot;string&quot;) {

no need for {}

&gt; Source/WebCore/inspector/front-end/DetailedHeapshotGridNodes.js:275
&gt; +            callback({ type: &quot;string&quot;, description: this._name });

Use WebInspector.RemoteObject.fromPrimitiveValue(this._name)

&gt; Source/WebCore/inspector/front-end/DetailedHeapshotGridNodes.js:279
&gt; +                if (object.type)

You should check for the error here.

&gt; Source/WebCore/inspector/front-end/DetailedHeapshotGridNodes.js:282
&gt; +                    callback({ type: &quot;null&quot;, description: WebInspector.UIString(&quot;Not available&quot;) });

ditto

&gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:995
&gt; +        var list = [];

A test for this method would be great.

&gt; Source/WebCore/inspector/front-end/Popover.js:292
&gt; +WebInspector.ObjectPopoverHelper = function(panelElement, getAnchor, queryObject, onHide, disableOnClick)

Please extract this in a separate change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476764</commentid>
    <comment_count>16</comment_count>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2011-10-02 21:56:45 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 109163 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=109163&amp;action=review
&gt; 
&gt; Overall looks good. A number of nits to be fixed prior to landing.
&gt; 
&gt; &gt; Source/WebCore/bindings/js/ScriptProfiler.cpp:45
&gt; &gt; +PassRefPtr&lt;InspectorValue&gt; ScriptProfiler::getObjectByHeapObjectId(unsigned, InjectedScriptManager*)
&gt; 
&gt; While we use &quot;get&quot; prefixes in the protocol, regular WebCore classes should not have those.
&gt; 

Done.

&gt; &gt; Source/WebCore/bindings/v8/ScriptProfiler.cpp:83
&gt; &gt; +    v8::HandleScope scope;
&gt; 
&gt; Blank line here would be great.
&gt;

Done.
 
&gt; &gt; Source/WebCore/bindings/v8/ScriptProfiler.cpp:87
&gt; &gt; +    v8::Handle&lt;v8::Object&gt; object(value.As&lt;v8::Object&gt;());
&gt; 
&gt; ditto
&gt;

Done.
 
&gt; &gt;&gt; Source/WebCore/bindings/v8/ScriptProfiler.cpp:92
&gt; &gt;&gt; +    if (!injectedScript.hasNoValue())
&gt; &gt; 
&gt; &gt; An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
&gt; 
&gt; Please follow the suggested style.
&gt; 

Done.

&gt; &gt; Source/WebCore/inspector/Inspector.json:1947
&gt; &gt; +                    { &quot;name&quot;: &quot;objectId&quot;, &quot;type&quot;: &quot;integer&quot; }
&gt; 
&gt; You should define class for your ids in the long run.
&gt;

Thanks, I&apos;ll consider that.
 
&gt; &gt; Source/WebCore/inspector/InspectorProfilerAgent.cpp:384
&gt; &gt; +    if (m_frontend) {
&gt; 
&gt; no need to check for front-end.
&gt; 

Done.

&gt; &gt; Source/WebCore/inspector/InspectorProfilerAgent.cpp:386
&gt; &gt; +        heapObject-&gt;asObject(result);
&gt; 
&gt; Since this result is not optional (according to the protocol), you can&apos;t pass null here. You should assign errorString.
&gt;

Done.
 
&gt; &gt; Source/WebCore/inspector/front-end/DetailedHeapshotGridNodes.js:189
&gt; &gt; +    } else if (node.flags &amp; tree.snapshot.nodeFlags.canBeQueried) {
&gt; 
&gt; no need for {}
&gt; 

Done.

&gt; &gt; Source/WebCore/inspector/front-end/DetailedHeapshotGridNodes.js:274
&gt; &gt; +        if (this._type === &quot;string&quot;) {
&gt; 
&gt; no need for {}
&gt;

Done.

&gt; &gt; Source/WebCore/inspector/front-end/DetailedHeapshotGridNodes.js:275
&gt; &gt; +            callback({ type: &quot;string&quot;, description: this._name });
&gt; 
&gt; Use WebInspector.RemoteObject.fromPrimitiveValue(this._name)
&gt; 

Done.

&gt; &gt; Source/WebCore/inspector/front-end/DetailedHeapshotGridNodes.js:279
&gt; &gt; +                if (object.type)
&gt; 
&gt; You should check for the error here.
&gt; 

Done.

&gt; &gt; Source/WebCore/inspector/front-end/DetailedHeapshotGridNodes.js:282
&gt; &gt; +                    callback({ type: &quot;null&quot;, description: WebInspector.UIString(&quot;Not available&quot;) });
&gt; 
&gt; ditto
&gt; 

Done.

&gt; &gt; Source/WebCore/inspector/front-end/HeapSnapshot.js:995
&gt; &gt; +        var list = [];
&gt; 
&gt; A test for this method would be great.
&gt;

Adding...
 
&gt; &gt; Source/WebCore/inspector/front-end/Popover.js:292
&gt; &gt; +WebInspector.ObjectPopoverHelper = function(panelElement, getAnchor, queryObject, onHide, disableOnClick)
&gt; 
&gt; Please extract this in a separate change.

Extracted as https://bugs.webkit.org/show_bug.cgi?id=69234</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477944</commentid>
    <comment_count>17</comment_count>
      <attachid>109687</attachid>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2011-10-04 14:20:02 -0700</bug_when>
    <thetext>Created attachment 109687
Comments addressed, test added

Still will not compile on cr-linux, V8 push should happen soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477950</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-04 14:23:43 -0700</bug_when>
    <thetext>Attachment 109687 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/insp...&quot; exit_code: 1

Source/WebCore/inspector/InspectorProfilerAgent.cpp:382:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/inspector/InspectorProfilerAgent.h:94:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 2 in 19 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478010</commentid>
    <comment_count>19</comment_count>
      <attachid>109687</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-04 15:33:57 -0700</bug_when>
    <thetext>Comment on attachment 109687
Comments addressed, test added

Attachment 109687 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9944529</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483109</commentid>
    <comment_count>20</comment_count>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2011-10-13 04:09:59 -0700</bug_when>
    <thetext>Manually committed http://trac.webkit.org/changeset/97362


commit 3d65d067f74ec42ee5334fbf61de6a4731d001e2
Author: Mikhail Naganov &lt;mnaganov@chromium.org&gt;
Date:   Wed Aug 3 15:28:43 2011 +0100

    Web Inspector: [Chromium] Add an ability to look up and explore an object from a heap profile.
    https://bugs.webkit.org/show_bug.cgi?id=61179
    
    This is exteremely helpful when dealing with DOM wrappers, as
    their properties are mostly implemented with getters and thus not
    stored in heap snapshots.
    
    Reviewed by Pavel Feldman.
    
    * English.lproj/localizedStrings.js:
    * bindings/js/ScriptProfiler.cpp:
    (WebCore::ScriptProfiler::objectByHeapObjectId):
    * bindings/js/ScriptProfiler.h:
    * bindings/v8/ScriptProfiler.cpp:
    (WebCore::ScriptProfiler::objectByHeapObjectId):
    * bindings/v8/ScriptProfiler.h:
    * inspector/Inspector.json:
    * inspector/InspectorController.cpp:
    (WebCore::InspectorController::InspectorController):
    * inspector/InspectorProfilerAgent.cpp:
    (WebCore::InspectorProfilerAgent::create):
    (WebCore::InspectorProfilerAgent::InspectorProfilerAgent):
    (WebCore::InspectorProfilerAgent::getObjectByHeapObjectId):
    * inspector/InspectorProfilerAgent.h:
    * inspector/front-end/DetailedHeapshotGridNodes.js:
    (WebInspector.HeapSnapshotGridNode.prototype.hasHoverMessage.false.queryObjectContent):
    (WebInspector.HeapSnapshotGenericObjectNode):
    (WebInspector.HeapSnapshotGenericObjectNode.prototype.get data):
    (WebInspector.HeapSnapshotGenericObjectNode.prototype.queryObjectContent.else.formatResult):
    (WebInspector.HeapSnapshotGenericObjectNode.prototype.queryObjectContent):
    (WebInspector.HeapSnapshotGenericObjectNode.prototype.shortenWindowURL):
    * inspector/front-end/DetailedHeapshotView.js:
    (WebInspector.DetailedHeapshotView.prototype._showObjectPopover):
    * inspector/front-end/HeapSnapshot.js:
    (WebInspector.HeapSnapshotNode.prototype.get canBeQueried):
    (WebInspector.HeapSnapshotNode.prototype.get flags):
    (WebInspector.HeapSnapshotNode.prototype.get isDOMWindow):
    (WebInspector.HeapSnapshot.prototype._init):
    (WebInspector.HeapSnapshot.prototype.dispose):
    (WebInspector.HeapSnapshot.prototype._flagsOfNode):
    (WebInspector.HeapSnapshot.prototype._calculateFlags):
    (WebInspector.HeapSnapshot.prototype.updateStaticData):
    (WebInspector.HeapSnapshotNodesProvider.prototype._serialize):
    * inspector/front-end/HeapSnapshotProxy.js:
    (WebInspector.HeapSnapshotProxy.prototype.get nodeFlags):
    * inspector/front-end/RemoteObject.js:
    (WebInspector.RemoteObject.fromError):
    * inspector/front-end/heapProfiler.css:
    (.detailed-heapshot-view tr:not(.selected) td.object-column span.highlight):
    
    * inspector/profiler/heap-snapshot-expected.txt:
    * inspector/profiler/heap-snapshot-test.js:
    (initialize_HeapSnapshotTest.InspectorTest.createHeapSnapshotMockWithDOM):
    (initialize_HeapSnapshotTest):
    * inspector/profiler/heap-snapshot.html:</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483317</commentid>
    <comment_count>21</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-10-13 11:03:03 -0700</bug_when>
    <thetext>Sorry guys, had to roll it out, since it was using the API in V8 and that has been reverted: http://trac.webkit.org/changeset/97372</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485096</commentid>
    <comment_count>22</comment_count>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2011-10-17 06:22:08 -0700</bug_when>
    <thetext>Re-applied again as http://trac.webkit.org/changeset/97611

V8 has been pushed w/o the new GC, but with the required API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485099</commentid>
    <comment_count>23</comment_count>
      <attachid>109687</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-10-17 06:32:18 -0700</bug_when>
    <thetext>Comment on attachment 109687
Comments addressed, test added

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

&gt; Source/WebCore/bindings/v8/ScriptProfiler.cpp:79
&gt; +    // As ids are unique, it doesn&apos;t matter which HeapSnapshot owns HeapGraphNode.
&gt; +    // We need to find first HeapSnapshot containing a node with the specified id.
&gt; +    const v8::HeapGraphNode* node = 0;
&gt; +    for (int i = 0, l = v8::HeapProfiler::GetSnapshotsCount(); i &lt; l; ++i) {
&gt; +        const v8::HeapSnapshot* snapshot = v8::HeapProfiler::GetSnapshot(i);
&gt; +        node = snapshot-&gt;GetNodeById(id);
&gt; +        if (node)
&gt; +            break;
&gt; +    }

The complexity of this method is N*ln2(K) where N is the number of snapshots and K is the number of nodes.
As far as Id is a monotonic function you can have a maxId property in the each snapshot and find the object with complexity ln2(N) + ln2(K)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485104</commentid>
    <comment_count>24</comment_count>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2011-10-17 06:37:59 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; (From update of attachment 109687 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=109687&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/bindings/v8/ScriptProfiler.cpp:79
&gt; &gt; +    // As ids are unique, it doesn&apos;t matter which HeapSnapshot owns HeapGraphNode.
&gt; &gt; +    // We need to find first HeapSnapshot containing a node with the specified id.
&gt; &gt; +    const v8::HeapGraphNode* node = 0;
&gt; &gt; +    for (int i = 0, l = v8::HeapProfiler::GetSnapshotsCount(); i &lt; l; ++i) {
&gt; &gt; +        const v8::HeapSnapshot* snapshot = v8::HeapProfiler::GetSnapshot(i);
&gt; &gt; +        node = snapshot-&gt;GetNodeById(id);
&gt; &gt; +        if (node)
&gt; &gt; +            break;
&gt; &gt; +    }
&gt; 
&gt; The complexity of this method is N*ln2(K) where N is the number of snapshots and K is the number of nodes.
&gt; As far as Id is a monotonic function you can have a maxId property in the each snapshot and find the object with complexity ln2(N) + ln2(K)

Right, but N isn&apos;t big usually. Sure, we can optimize it anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485111</commentid>
    <comment_count>25</comment_count>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2011-10-17 06:42:18 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; (In reply to comment #23)
&gt; &gt; (From update of attachment 109687 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=109687&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/bindings/v8/ScriptProfiler.cpp:79
&gt; &gt; &gt; +    // As ids are unique, it doesn&apos;t matter which HeapSnapshot owns HeapGraphNode.
&gt; &gt; &gt; +    // We need to find first HeapSnapshot containing a node with the specified id.
&gt; &gt; &gt; +    const v8::HeapGraphNode* node = 0;
&gt; &gt; &gt; +    for (int i = 0, l = v8::HeapProfiler::GetSnapshotsCount(); i &lt; l; ++i) {
&gt; &gt; &gt; +        const v8::HeapSnapshot* snapshot = v8::HeapProfiler::GetSnapshot(i);
&gt; &gt; &gt; +        node = snapshot-&gt;GetNodeById(id);
&gt; &gt; &gt; +        if (node)
&gt; &gt; &gt; +            break;
&gt; &gt; &gt; +    }
&gt; &gt; 
&gt; &gt; The complexity of this method is N*ln2(K) where N is the number of snapshots and K is the number of nodes.
&gt; &gt; As far as Id is a monotonic function you can have a maxId property in the each snapshot and find the object with complexity ln2(N) + ln2(K)
&gt; 
&gt; Right, but N isn&apos;t big usually. Sure, we can optimize it anyway.

I&apos;d like to see this property in the snapshots just for minimize the complexity in my patch :)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104521</attachid>
            <date>2011-08-19 10:24:07 -0700</date>
            <delta_ts>2011-09-29 07:15:48 -0700</delta_ts>
            <desc>WIP: A prototype implementation</desc>
            <filename>evaluate-heap-objects.patch</filename>
            <type>text/plain</type>
            <size>14261</size>
            <attacher name="Mikhail Naganov">mnaganov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmNwcAppbmRleCA3
MTg4YzMyLi40NzkwNmNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9T
Y3JpcHRQcm9maWxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0
UHJvZmlsZXIuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiU2NyaXB0UHJvZmlsZXIuaCIKIAorI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0LmgiCiAj
aW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiAjaW5jbHVkZSAiUmV0YWluZWRET01JbmZvLmgi
CiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCkBAIC02NCw2ICs2NSwzMSBAQCB2b2lkIFNjcmlwdFBy
b2ZpbGVyOjpjb2xsZWN0R2FyYmFnZSgpCiAgICAgdjg6OlY4OjpMb3dNZW1vcnlOb3RpZmljYXRp
b24oKTsKIH0KIAorUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gU2NyaXB0UHJvZmlsZXI6Omdl
dE9iamVjdEJ5SGVhcE9iamVjdElkKHVuc2lnbmVkIGlkLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIq
IGluamVjdGVkU2NyaXB0TWFuYWdlcikKK3sKKyAgICAvLyBBcyBpZHMgYXJlIHVuaXF1ZSwgaXQg
ZG9lc24ndCBtYXR0ZXIsIEhlYXBHcmFwaE5vZGUgZnJvbSB3aGljaCBIZWFwU25hcHNob3QKKyAg
ICAvLyB3aWxsIGJlIHVzZWQuIFdlIG5lZWQgdG8gZmluZCBmaXJzdCBIZWFwU25hcHNob3QgY29u
dGFpbmluZyBhIG5vZGUgd2l0aCB0aGUKKyAgICAvLyBzcGVjaWZpZWQgaWQuCisgICAgY29uc3Qg
djg6OkhlYXBHcmFwaE5vZGUqIG5vZGUgPSAwOworICAgIGZvciAoaW50IGkgPSAwLCBsID0gdjg6
OkhlYXBQcm9maWxlcjo6R2V0U25hcHNob3RzQ291bnQoKTsgaSA8IGw7ICsraSkgeworICAgICAg
ICBjb25zdCB2ODo6SGVhcFNuYXBzaG90KiBzbmFwc2hvdCA9IHY4OjpIZWFwUHJvZmlsZXI6Okdl
dFNuYXBzaG90KGkpOworICAgICAgICBub2RlID0gc25hcHNob3QtPkdldE5vZGVCeUlkKGlkKTsK
KyAgICAgICAgaWYgKG5vZGUpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKCFu
b2RlKQorICAgICAgICByZXR1cm4gMDsKKyAgICB2ODo6SGFuZGxlU2NvcGUgc2NvcGU7CisgICAg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlID0gbm9kZS0+R2V0SGVhcFZhbHVlKCk7CisgICAg
aWYgKCF2YWx1ZS0+SXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiBvYmplY3QodmFsdWUuQXM8djg6Ok9iamVjdD4oKSk7CisgICAgdjg6Okxv
Y2FsPHY4OjpDb250ZXh0PiBjb250ZXh0ID0gb2JqZWN0LT5DcmVhdGlvbkNvbnRleHQoKTsKKyAg
ICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUgPSBTY3JpcHRTdGF0ZTo6Zm9yQ29udGV4dChjb250
ZXh0KTsKKyAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IGluamVjdGVkU2NyaXB0
TWFuYWdlci0+aW5qZWN0ZWRTY3JpcHRGb3Ioc2NyaXB0U3RhdGUpOworICAgIHJldHVybiAhaW5q
ZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpID8gaW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdCh2YWx1
ZSwgIiIpIDogMDsKK30KKwogbmFtZXNwYWNlIHsKIAogY2xhc3MgQWN0aXZpdHlDb250cm9sQWRh
cHRlciA6IHB1YmxpYyB2ODo6QWN0aXZpdHlDb250cm9sIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9TY3JpcHRQcm9maWxlci5oCmluZGV4IDkyYTk4MGIuLjI3MDZlOTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0UHJvZmlsZXIuaApAQCAtMzksNyArMzksOCBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEluc3BlY3Rvck9iamVjdDsKK2NsYXNz
IEluamVjdGVkU2NyaXB0TWFuYWdlcjsKK2NsYXNzIEluc3BlY3RvclZhbHVlOwogCiBjbGFzcyBT
Y3JpcHRQcm9maWxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2NyaXB0UHJvZmlsZXIp
OwpAQCAtNTQsNiArNTUsNyBAQCBwdWJsaWM6CiAgICAgfTsKIAogICAgIHN0YXRpYyB2b2lkIGNv
bGxlY3RHYXJiYWdlKCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGdl
dE9iamVjdEJ5SGVhcE9iamVjdElkKHVuc2lnbmVkIGlkLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIq
IGluamVjdGVkU2NyaXB0TWFuYWdlcik7CiAgICAgc3RhdGljIHZvaWQgc3RhcnQoU2NyaXB0U3Rh
dGUqIHN0YXRlLCBjb25zdCBTdHJpbmcmIHRpdGxlKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxT
Y3JpcHRQcm9maWxlPiBzdG9wKFNjcmlwdFN0YXRlKiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB0aXRs
ZSk7CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2NyaXB0SGVhcFNuYXBzaG90PiB0YWtlSGVhcFNu
YXBzaG90KGNvbnN0IFN0cmluZyYgdGl0bGUsIEhlYXBTbmFwc2hvdFByb2dyZXNzKik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24gYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24KaW5kZXggZGIyYjk4OC4uYzUxZjIyNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbgpAQCAtMTgzMyw2ICsxODMz
LDE1IEBACiAgICAgICAgICAgICB9LAogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICJu
YW1lIjogImNvbGxlY3RHYXJiYWdlIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAibmFtZSI6ICJnZXRPYmplY3RCeUhlYXBPYmplY3RJZCIsCisgICAgICAg
ICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
b2JqZWN0SWQiLCAidHlwZSI6ICJpbnRlZ2VyIiB9CisgICAgICAgICAgICAgICAgXSwKKyAgICAg
ICAgICAgICAgICAicmV0dXJucyI6IFsKKyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJy
ZXN1bHQiLCAiJHJlZiI6ICJSdW50aW1lLlJlbW90ZU9iamVjdCIsICJkZXNjcmlwdGlvbiI6ICJF
dmFsdWF0aW9uIHJlc3VsdC4iIH0KKyAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICB9CiAg
ICAgICAgIF0sCiAgICAgICAgICJldmVudHMiOiBbCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggMjU4OWFlYi4uYWE0MzkwZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcApA
QCAtMTE3LDcgKzExNyw3IEBAIEluc3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xs
ZXIoUGFnZSogcGFnZSwgSW5zcGVjdG9yQ2xpZW50KiBpbnNwZWN0b3JDCiAjaWYgRU5BQkxFKEpB
VkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgLCBtX2RlYnVnZ2VyQWdlbnQoUGFnZURlYnVnZ2VyQWdl
bnQ6OmNyZWF0ZShtX2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0KCksIG1fc3RhdGUuZ2V0KCksIHBh
Z2UsIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmdldCgpKSkKICAgICAsIG1fZG9tRGVidWdnZXJB
Z2VudChJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpjcmVhdGUobV9pbnN0cnVtZW50aW5nQWdl
bnRzLmdldCgpLCBtX3N0YXRlLmdldCgpLCBtX2RvbUFnZW50LmdldCgpLCBtX2RlYnVnZ2VyQWdl
bnQuZ2V0KCksIG1faW5zcGVjdG9yQWdlbnQuZ2V0KCkpKQotICAgICwgbV9wcm9maWxlckFnZW50
KEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmNyZWF0ZShtX2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0
KCksIG1fY29uc29sZUFnZW50LmdldCgpLCBwYWdlLCBtX3N0YXRlLmdldCgpKSkKKyAgICAsIG1f
cHJvZmlsZXJBZ2VudChJbnNwZWN0b3JQcm9maWxlckFnZW50OjpjcmVhdGUobV9pbnN0cnVtZW50
aW5nQWdlbnRzLmdldCgpLCBtX2NvbnNvbGVBZ2VudC5nZXQoKSwgcGFnZSwgbV9zdGF0ZS5nZXQo
KSwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuZ2V0KCkpKQogI2VuZGlmCiAjaWYgRU5BQkxFKFdP
UktFUlMpCiAgICAgLCBtX3dvcmtlckFnZW50KEluc3BlY3RvcldvcmtlckFnZW50OjpjcmVhdGUo
bV9pbnN0cnVtZW50aW5nQWdlbnRzLmdldCgpLCBtX3N0YXRlLmdldCgpKSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcAppbmRleCBi
YjUzZTczLi5iOTVkYjJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwCkBAIC02MiwxNiArNjIsMTcgQEAgc3RhdGljIGNvbnN0
IGNoYXIqIGNvbnN0IFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZSA9ICJvcmcud2Via2l0LnByb2Zp
bGVzLnVzZXItaW4KIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBDUFVQcm9maWxlVHlwZSA9ICJD
UFUiOwogc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IEhlYXBQcm9maWxlVHlwZSA9ICJIRUFQIjsK
IAotUGFzc093blB0cjxJbnNwZWN0b3JQcm9maWxlckFnZW50PiBJbnNwZWN0b3JQcm9maWxlckFn
ZW50OjpjcmVhdGUoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgSW5z
cGVjdG9yQ29uc29sZUFnZW50KiBjb25zb2xlQWdlbnQsIFBhZ2UqIGluc3BlY3RlZFBhZ2UsIElu
c3BlY3RvclN0YXRlKiBpbnNwZWN0b3JTdGF0ZSkKK1Bhc3NPd25QdHI8SW5zcGVjdG9yUHJvZmls
ZXJBZ2VudD4gSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Y3JlYXRlKEluc3RydW1lbnRpbmdBZ2Vu
dHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEluc3BlY3RvckNvbnNvbGVBZ2VudCogY29uc29sZUFn
ZW50LCBQYWdlKiBpbnNwZWN0ZWRQYWdlLCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUs
IEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQogewotICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudChpbnN0cnVtZW50aW5nQWdl
bnRzLCBjb25zb2xlQWdlbnQsIGluc3BlY3RlZFBhZ2UsIGluc3BlY3RvclN0YXRlKSk7CisgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBJbnNwZWN0b3JQcm9maWxlckFnZW50KGluc3RydW1lbnRpbmdB
Z2VudHMsIGNvbnNvbGVBZ2VudCwgaW5zcGVjdGVkUGFnZSwgaW5zcGVjdG9yU3RhdGUsIGluamVj
dGVkU2NyaXB0TWFuYWdlcikpOwogfQogCi1JbnNwZWN0b3JQcm9maWxlckFnZW50OjpJbnNwZWN0
b3JQcm9maWxlckFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMs
IEluc3BlY3RvckNvbnNvbGVBZ2VudCogY29uc29sZUFnZW50LCBQYWdlKiBpbnNwZWN0ZWRQYWdl
LCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUpCitJbnNwZWN0b3JQcm9maWxlckFnZW50
OjpJbnNwZWN0b3JQcm9maWxlckFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRp
bmdBZ2VudHMsIEluc3BlY3RvckNvbnNvbGVBZ2VudCogY29uc29sZUFnZW50LCBQYWdlKiBpbnNw
ZWN0ZWRQYWdlLCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUsIEluamVjdGVkU2NyaXB0
TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQogICAgIDogbV9pbnN0cnVtZW50aW5nQWdl
bnRzKGluc3RydW1lbnRpbmdBZ2VudHMpCiAgICAgLCBtX2NvbnNvbGVBZ2VudChjb25zb2xlQWdl
bnQpCiAgICAgLCBtX2luc3BlY3RlZFBhZ2UoaW5zcGVjdGVkUGFnZSkKICAgICAsIG1faW5zcGVj
dG9yU3RhdGUoaW5zcGVjdG9yU3RhdGUpCisgICAgLCBtX2luamVjdGVkU2NyaXB0TWFuYWdlcihp
bmplY3RlZFNjcmlwdE1hbmFnZXIpCiAgICAgLCBtX2Zyb250ZW5kKDApCiAgICAgLCBtX2VuYWJs
ZWQoZmFsc2UpCiAgICAgLCBtX3JlY29yZGluZ1VzZXJJbml0aWF0ZWRQcm9maWxlKGZhbHNlKQpA
QCAtMzc4LDYgKzM3OSwxNyBAQCB2b2lkIEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OnRvZ2dsZVJl
Y29yZEJ1dHRvbihib29sIGlzUHJvZmlsaW5nKQogICAgICAgICBtX2Zyb250ZW5kLT5zZXRSZWNv
cmRpbmdQcm9maWxlKGlzUHJvZmlsaW5nKTsKIH0KIAordm9pZCBJbnNwZWN0b3JQcm9maWxlckFn
ZW50OjpnZXRPYmplY3RCeUhlYXBPYmplY3RJZChFcnJvclN0cmluZyosIGludCBpZCwgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4qIHJlc3VsdCkKK3sKKyAgICBpZiAobV9mcm9udGVuZCkgeworICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGhlYXBPYmplY3QgPSBTY3JpcHRQcm9maWxlcjo6
Z2V0T2JqZWN0QnlIZWFwT2JqZWN0SWQoaWQsIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKTsKKyAg
ICAgICAgaWYgKGhlYXBPYmplY3QpCisgICAgICAgICAgICBoZWFwT2JqZWN0LT5hc09iamVjdChy
ZXN1bHQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBJbnNwZWN0b3JTdHJpbmc6OmNyZWF0
ZSgiTGl2ZSBvYmplY3Qgbm90IGZvdW5kLiIpLT5hc09iamVjdChyZXN1bHQpOworICAgIH0KK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRf
REVCVUdHRVIpICYmIEVOQUJMRShJTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuaAppbmRleCA0MDk0MWU4Li4zNTA1MDE5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2Vu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50
LmgKQEAgLTQxLDYgKzQxLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBJbmpl
Y3RlZFNjcmlwdE1hbmFnZXI7CiBjbGFzcyBJbnNwZWN0b3JBcnJheTsKIGNsYXNzIEluc3BlY3Rv
ckNvbnNvbGVBZ2VudDsKIGNsYXNzIEluc3BlY3RvckZyb250ZW5kOwpAQCAtNTYsNyArNTcsNyBA
QCB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKIGNsYXNzIEluc3BlY3RvclByb2ZpbGVyQWdl
bnQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvclByb2ZpbGVyQWdlbnQpOyBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxJ
bnNwZWN0b3JQcm9maWxlckFnZW50PiBjcmVhdGUoSW5zdHJ1bWVudGluZ0FnZW50cyosIEluc3Bl
Y3RvckNvbnNvbGVBZ2VudCosIFBhZ2UqLCBJbnNwZWN0b3JTdGF0ZSopOworICAgIHN0YXRpYyBQ
YXNzT3duUHRyPEluc3BlY3RvclByb2ZpbGVyQWdlbnQ+IGNyZWF0ZShJbnN0cnVtZW50aW5nQWdl
bnRzKiwgSW5zcGVjdG9yQ29uc29sZUFnZW50KiwgUGFnZSosIEluc3BlY3RvclN0YXRlKiwgSW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyKik7CiAgICAgdmlydHVhbCB+SW5zcGVjdG9yUHJvZmlsZXJBZ2Vu
dCgpOwogCiAgICAgdm9pZCBhZGRQcm9maWxlKFBhc3NSZWZQdHI8U2NyaXB0UHJvZmlsZT4gcHJw
UHJvZmlsZSwgdW5zaWduZWQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpOwpA
QCAtOTAsNiArOTEsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCB0YWtlSGVhcFNuYXBzaG90KEVycm9y
U3RyaW5nKik7CiAgICAgdm9pZCB0b2dnbGVSZWNvcmRCdXR0b24oYm9vbCBpc1Byb2ZpbGluZyk7
CiAKKyAgICB2b2lkIGdldE9iamVjdEJ5SGVhcE9iamVjdElkKEVycm9yU3RyaW5nKiwgaW50IGlk
LCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiogcmVzdWx0KTsKKyAgICAKIHByaXZhdGU6CiAgICAg
dHlwZWRlZiBIYXNoTWFwPHVuc2lnbmVkIGludCwgUmVmUHRyPFNjcmlwdFByb2ZpbGU+ID4gUHJv
ZmlsZXNNYXA7CiAgICAgdHlwZWRlZiBIYXNoTWFwPHVuc2lnbmVkIGludCwgUmVmUHRyPFNjcmlw
dEhlYXBTbmFwc2hvdD4gPiBIZWFwU25hcHNob3RzTWFwOwpAQCAtOTcsNyArMTAwLDcgQEAgcHJp
dmF0ZToKICAgICB2b2lkIHJlc2V0RnJvbnRlbmRQcm9maWxlcygpOwogICAgIHZvaWQgcmVzdG9y
ZUVuYWJsZW1lbnQoKTsKIAotICAgIEluc3BlY3RvclByb2ZpbGVyQWdlbnQoSW5zdHJ1bWVudGlu
Z0FnZW50cyosIEluc3BlY3RvckNvbnNvbGVBZ2VudCosIFBhZ2UqLCBJbnNwZWN0b3JTdGF0ZSop
OworICAgIEluc3BlY3RvclByb2ZpbGVyQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIEluc3Bl
Y3RvckNvbnNvbGVBZ2VudCosIFBhZ2UqLCBJbnNwZWN0b3JTdGF0ZSosIEluamVjdGVkU2NyaXB0
TWFuYWdlciopOwogICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVQcm9maWxl
SGVhZGVyKGNvbnN0IFNjcmlwdFByb2ZpbGUmIHByb2ZpbGUpOwogICAgIFBhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBjcmVhdGVTbmFwc2hvdEhlYWRlcihjb25zdCBTY3JpcHRIZWFwU25hcHNo
b3QmIHNuYXBzaG90KTsKIApAQCAtMTA1LDYgKzEwOCw3IEBAIHByaXZhdGU6CiAgICAgSW5zcGVj
dG9yQ29uc29sZUFnZW50KiBtX2NvbnNvbGVBZ2VudDsKICAgICBQYWdlKiBtX2luc3BlY3RlZFBh
Z2U7CiAgICAgSW5zcGVjdG9yU3RhdGUqIG1faW5zcGVjdG9yU3RhdGU7CisgICAgSW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyKiBtX2luamVjdGVkU2NyaXB0TWFuYWdlcjsKICAgICBJbnNwZWN0b3JGcm9u
dGVuZDo6UHJvZmlsZXIqIG1fZnJvbnRlbmQ7CiAgICAgYm9vbCBtX2VuYWJsZWQ7CiAgICAgYm9v
bCBtX3JlY29yZGluZ1VzZXJJbml0aWF0ZWRQcm9maWxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EZXRhaWxlZEhlYXBzaG90R3JpZE5vZGVzLmpzIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EZXRhaWxlZEhlYXBzaG90R3JpZE5v
ZGVzLmpzCmluZGV4IGZhNzkxYTYuLjRiNjY0MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvRGV0YWlsZWRIZWFwc2hvdEdyaWROb2Rlcy5qcworKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RldGFpbGVkSGVhcHNob3RHcmlkTm9k
ZXMuanMKQEAgLTU2LDkgKzU2LDkgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEdyaWROb2Rl
LnByb3RvdHlwZSA9IHsKIAogICAgIGhhc0hvdmVyTWVzc2FnZTogZmFsc2UsCiAKLSAgICBob3Zl
ck1lc3NhZ2U6IGZ1bmN0aW9uKGNhbGxiYWNrKQorICAgIGhvdmVyTWVzc2FnZTogZnVuY3Rpb24o
KQogICAgIHsKLSAgICAgICAgY2FsbGJhY2soIiIpOworICAgICAgICByZXR1cm4gW107CiAgICAg
fSwKIAogICAgIF9wb3B1bGF0ZTogZnVuY3Rpb24oZXZlbnQpCkBAIC0xODUsOSArMTg1LDkgQEAg
V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEdlbmVyaWNPYmplY3ROb2RlID0gZnVuY3Rpb24odHJl
ZSwgbm9kZSkKICAgICBpZiAodGhpcy5fdHlwZSA9PT0gInN0cmluZyIpCiAgICAgICAgIHRoaXMu
aGFzSG92ZXJNZXNzYWdlID0gdHJ1ZTsKICAgICBlbHNlIGlmICh0aGlzLl90eXBlID09PSAib2Jq
ZWN0IiAmJiB0aGlzLmlzRE9NV2luZG93KHRoaXMuX25hbWUpKSB7Ci0gICAgICAgIHZhciB1cmwg
PSBbXTsKLSAgICAgICAgdGhpcy5fbmFtZSA9IHRoaXMuc2hvcnRlbldpbmRvd1VSTCh0aGlzLl9u
YW1lLCBmYWxzZSwgdXJsKTsKLSAgICAgICAgdGhpcy5fdXJsID0gdXJsWzBdOworICAgICAgICB0
aGlzLl9uYW1lID0gdGhpcy5zaG9ydGVuV2luZG93VVJMKHRoaXMuX25hbWUsIGZhbHNlKTsKKyAg
ICAgICAgdGhpcy5oYXNIb3Zlck1lc3NhZ2UgPSB0cnVlOworICAgIH0gZWxzZSB7CiAgICAgICAg
IHRoaXMuaGFzSG92ZXJNZXNzYWdlID0gdHJ1ZTsKICAgICB9CiB9OwpAQCAtMjY4LDEyICsyNjgs
MzcgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEdlbmVyaWNPYmplY3ROb2RlLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2VuaGFuY2VEYXRhID8gdGhpcy5fZW5oYW5jZURh
dGEoZGF0YSkgOiBkYXRhOwogICAgIH0sCiAKLSAgICBob3Zlck1lc3NhZ2U6IGZ1bmN0aW9uKGNh
bGxiYWNrKQorICAgIGhvdmVyTWVzc2FnZTogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgaWYg
KHRoaXMuX3R5cGUgPT09ICJzdHJpbmciKQotICAgICAgICAgICAgY2FsbGJhY2soIlwiIiArIHRo
aXMuX25hbWUgKyAiXCIiLCAiY29uc29sZS1mb3JtYXR0ZWQtc3RyaW5nIik7Ci0gICAgICAgIGVs
c2UgaWYgKHRoaXMuX3VybCkKLSAgICAgICAgICAgIGNhbGxiYWNrKHRoaXMuX3VybCwgImNvbnNv
bGUtZm9ybWF0dGVkLW9iamVjdCIpOworICAgICAgICBpZiAodGhpcy5fdHlwZSA9PT0gInN0cmlu
ZyIpIHsKKyAgICAgICAgICAgIHZhciBzdHJpbmdDb250ZW50RWxlbWVudCA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICAgICAgICAgIHN0cmluZ0NvbnRlbnRFbGVtZW50LmNs
YXNzTmFtZSA9ICJtb25vc3BhY2UiOworICAgICAgICAgICAgc3RyaW5nQ29udGVudEVsZW1lbnQu
c3R5bGUud2hpdGVTcGFjZSA9ICJwcmUiOworICAgICAgICAgICAgc3RyaW5nQ29udGVudEVsZW1l
bnQudGV4dENvbnRlbnQgPSAiXCIiICsgdGhpcy5fbmFtZSArICJcIiI7CisgICAgICAgICAgICBz
dHJpbmdDb250ZW50RWxlbWVudC5jbGFzc05hbWUgKz0gIiBjb25zb2xlLWZvcm1hdHRlZC1zdHJp
bmciOworICAgICAgICAgICAgcmV0dXJuIFtzdHJpbmdDb250ZW50RWxlbWVudF07CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICB2YXIgcG9wdXBDb250ZW50RWxlbWVudCA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICAgICAgdmFyIHRpdGxlRWxlbWVudCA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICAgICAgICAgICAgdGl0bGVFbGVtZW50LmNs
YXNzTmFtZSA9ICJzb3VyY2UtZnJhbWUtcG9wb3Zlci10aXRsZSBtb25vc3BhY2UiOworICAgICAg
ICAgICAgcG9wdXBDb250ZW50RWxlbWVudC5hcHBlbmRDaGlsZCh0aXRsZUVsZW1lbnQpOworICAg
ICAgICAgICAgZnVuY3Rpb24gZm9ybWF0KGVycm9yLCBvYmplY3QpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgaWYgKCFvYmplY3QudHlwZSkgeworICAgICAgICAgICAgICAgICAgICB0
aXRsZUVsZW1lbnQudGV4dENvbnRlbnQgPSBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkNhbid0IHNo
b3cgb2JqZWN0IGNvbnRlbnRzLiIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBXZWJJbnNwZWN0b3Iu
UmVtb3RlT2JqZWN0LmZyb21QYXlsb2FkKG9iamVjdCk7CisgICAgICAgICAgICAgICAgdGl0bGVF
bGVtZW50LnRleHRDb250ZW50ID0gcmVzdWx0LmRlc2NyaXB0aW9uOworICAgICAgICAgICAgICAg
IHZhciBzZWN0aW9uID0gbmV3IFdlYkluc3BlY3Rvci5PYmplY3RQcm9wZXJ0aWVzU2VjdGlvbihy
ZXN1bHQpOworICAgICAgICAgICAgICAgIHNlY3Rpb24uZXhwYW5kZWQgPSB0cnVlOworICAgICAg
ICAgICAgICAgIHNlY3Rpb24uZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJzb3VyY2UtZnJhbWUtcG9w
b3Zlci10cmVlIik7CisgICAgICAgICAgICAgICAgc2VjdGlvbi5oZWFkZXJFbGVtZW50LmFkZFN0
eWxlQ2xhc3MoImhpZGRlbiIpOworICAgICAgICAgICAgICAgIHBvcHVwQ29udGVudEVsZW1lbnQu
YXBwZW5kQ2hpbGQoc2VjdGlvbi5lbGVtZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IFByb2ZpbGVyQWdlbnQuZ2V0T2JqZWN0QnlIZWFwT2JqZWN0SWQodGhpcy5zbmFwc2hvdE5vZGVJ
ZCwgZm9ybWF0KTsKKyAgICAgICAgICAgIHJldHVybiBbcG9wdXBDb250ZW50RWxlbWVudCwgMzAw
LCAyNTBdOworICAgICAgICB9CiAgICAgfSwKIAogICAgIGdldCBfcmV0YWluZWRTaXplUGVyY2Vu
dCgpCkBAIC0zMDAsMTQgKzMyNSwxMiBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90R2VuZXJp
Y09iamVjdE5vZGUucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gZnVsbE5hbWUuc3Vic3Ry
KDAsIDkpID09PSAiRE9NV2luZG93IjsKICAgICB9LAogCi0gICAgc2hvcnRlbldpbmRvd1VSTDog
ZnVuY3Rpb24oZnVsbE5hbWUsIGhhc09iamVjdElkLCBmdWxsVVJMUHRyKQorICAgIHNob3J0ZW5X
aW5kb3dVUkw6IGZ1bmN0aW9uKGZ1bGxOYW1lLCBoYXNPYmplY3RJZCkKICAgICB7CiAgICAgICAg
IHZhciBzdGFydFBvcyA9IGZ1bGxOYW1lLmluZGV4T2YoIi8iKTsKICAgICAgICAgdmFyIGVuZFBv
cyA9IGhhc09iamVjdElkID8gZnVsbE5hbWUuaW5kZXhPZigiQCIpIDogZnVsbE5hbWUubGVuZ3Ro
OwogICAgICAgICBpZiAoc3RhcnRQb3MgIT09IC0xICYmIGVuZFBvcyAhPT0gLTEpIHsKICAgICAg
ICAgICAgIHZhciBmdWxsVVJMID0gZnVsbE5hbWUuc3Vic3RyaW5nKHN0YXJ0UG9zICsgMSwgZW5k
UG9zKS50cmltTGVmdCgpOwotICAgICAgICAgICAgaWYgKGZ1bGxVUkxQdHIpCi0gICAgICAgICAg
ICAgICAgZnVsbFVSTFB0clswXSA9IGZ1bGxVUkw7CiAgICAgICAgICAgICB2YXIgdXJsID0gZnVs
bFVSTC50cmltVVJMKCk7CiAgICAgICAgICAgICBpZiAodXJsLmxlbmd0aCA+IDQwKQogICAgICAg
ICAgICAgICAgIHVybCA9IHVybC50cmltTWlkZGxlKDQwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGV0YWlsZWRIZWFwc2hvdFZpZXcuanMgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RldGFpbGVkSGVhcHNob3RWaWV3LmpzCmlu
ZGV4IDg1ZjMwZjIuLjNjZmY1NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvRGV0YWlsZWRIZWFwc2hvdFZpZXcuanMKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9EZXRhaWxlZEhlYXBzaG90Vmlldy5qcwpAQCAtMTA0NCwxOCAr
MTA0NCwxMiBAQCBXZWJJbnNwZWN0b3IuRGV0YWlsZWRIZWFwc2hvdFZpZXcucHJvdG90eXBlID0g
ewogCiAgICAgX3Nob3dTdHJpbmdDb250ZW50UG9wdXA6IGZ1bmN0aW9uKHNwYW4pCiAgICAgewot
ICAgICAgICB2YXIgc3RyaW5nQ29udGVudEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJzcGFuIik7Ci0gICAgICAgIHN0cmluZ0NvbnRlbnRFbGVtZW50LmNsYXNzTmFtZSA9ICJtb25v
c3BhY2UiOwotICAgICAgICBzdHJpbmdDb250ZW50RWxlbWVudC5zdHlsZS53aGl0ZVNwYWNlID0g
InByZSI7Ci0KLSAgICAgICAgdmFyIHBvcG92ZXIgPSBuZXcgV2ViSW5zcGVjdG9yLlBvcG92ZXIo
c3RyaW5nQ29udGVudEVsZW1lbnQpOwotICAgICAgICBmdW5jdGlvbiBkaXNwbGF5U3RyaW5nKG5h
bWUsIGNsYXNzTmFtZSkKLSAgICAgICAgewotICAgICAgICAgICAgc3RyaW5nQ29udGVudEVsZW1l
bnQudGV4dENvbnRlbnQgPSBuYW1lOwotICAgICAgICAgICAgc3RyaW5nQ29udGVudEVsZW1lbnQu
Y2xhc3NOYW1lICs9ICIgIiArIGNsYXNzTmFtZTsKLSAgICAgICAgICAgIHBvcG92ZXIuc2hvdyhz
cGFuKTsKLSAgICAgICAgfQotICAgICAgICBzcGFuLm5vZGUuaG92ZXJNZXNzYWdlKGRpc3BsYXlT
dHJpbmcpOworICAgICAgICB2YXIgaG92ZXIgPSBzcGFuLm5vZGUuaG92ZXJNZXNzYWdlKCk7Cisg
ICAgICAgIHZhciBlbGVtZW50ID0gaG92ZXJbMF07CisgICAgICAgIHZhciB3aWR0aCA9IGhvdmVy
WzFdOworICAgICAgICB2YXIgaGVpZ2h0ID0gaG92ZXJbMl07ICAgICAgICAKKyAgICAgICAgdmFy
IHBvcG92ZXIgPSBuZXcgV2ViSW5zcGVjdG9yLlBvcG92ZXIoZWxlbWVudCk7CisgICAgICAgIHBv
cG92ZXIuc2hvdyhzcGFuLCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgICAgcmV0dXJuIHBvcG92ZXI7
CiAgICAgfSwKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109160</attachid>
            <date>2011-09-29 07:15:48 -0700</date>
            <delta_ts>2011-09-29 07:29:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch-61179</filename>
            <type>text/plain</type>
            <size>32385</size>
            <attacher name="Mikhail Naganov">mnaganov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBiNzY3ZmRjLi5lZjljMWM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjMg
QEAKKzIwMTEtMDktMjkgIE1pa2hhaWwgTmFnYW5vdiAgPG1uYWdhbm92QGNocm9taXVtLm9yZz4K
KworICAgICAgICBXZWIgSW5zcGVjdG9yOiBbQ2hyb21pdW1dIEFkZCBhbiBhYmlsaXR5IHRvIGxv
b2sgdXAgYW5kIGV4cGxvcmUgYW4gb2JqZWN0IGZyb20gYSBoZWFwIHByb2ZpbGUuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MTE3OQorCisgICAgICAg
IFRoaXMgaXMgZXh0ZXJlbWVseSBoZWxwZnVsIHdoZW4gZGVhbGluZyB3aXRoIERPTSB3cmFwcGVy
cywgYXMKKyAgICAgICAgdGhlaXIgcHJvcGVydGllcyBhcmUgbW9zdGx5IGltcGxlbWVudGVkIHdp
dGggZ2V0dGVycyBhbmQgdGh1cyBub3QKKyAgICAgICAgc3RvcmVkIGluIGhlYXAgc25hcHNob3Rz
LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogRW5n
bGlzaC5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Nj
cmlwdFByb2ZpbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFByb2ZpbGVyOjpnZXRP
YmplY3RCeUhlYXBPYmplY3RJZCk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0UHJvZmls
ZXIuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yLmpzb246CisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
UHJvZmlsZXJBZ2VudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2Zp
bGVyQWdlbnQ6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yUHJvZmlsZXJBZ2VudDo6Z2V0T2JqZWN0QnlIZWFwT2JqZWN0SWQpOgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9y
L2Zyb250LWVuZC9EZXRhaWxlZEhlYXBzaG90R3JpZE5vZGVzLmpzOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdEdyaWROb2RlLnByb3RvdHlwZS5oYXNIb3Zlck1lc3NhZ2UuZmFs
c2UucXVlcnlPYmplY3RDb250ZW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNo
b3RHZW5lcmljT2JqZWN0Tm9kZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
R2VuZXJpY09iamVjdE5vZGUucHJvdG90eXBlLmdldCBkYXRhKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3RHZW5lcmljT2JqZWN0Tm9kZS5wcm90b3R5cGUucXVlcnlPYmplY3RD
b250ZW50LmVsc2UuZm9ybWF0UmVzdWx0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3RHZW5lcmljT2JqZWN0Tm9kZS5wcm90b3R5cGUucXVlcnlPYmplY3RDb250ZW50KToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RHZW5lcmljT2JqZWN0Tm9kZS5wcm90b3R5
cGUuc2hvcnRlbldpbmRvd1VSTCk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9EZXRh
aWxlZEhlYXBzaG90Vmlldy5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EZXRhaWxlZEhlYXBz
aG90Vmlldy5wcm90b3R5cGUuX3Nob3dPYmplY3RQb3BvdmVyKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3ROb2RlLnByb3RvdHlwZS5nZXQgY2FuQmVRdWVyaWVkKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3ROb2RlLnByb3RvdHlwZS5nZXQgZmxhZ3MpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGUucHJvdG90eXBlLmdldCBpc0RPTVdpbmRvdyk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90LnByb3RvdHlwZS5faW5pdCk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90LnByb3RvdHlwZS5kaXNwb3NlKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3QucHJvdG90eXBlLl9mbGFnc09mTm9kZSk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90LnByb3RvdHlwZS5fY2FsY3VsYXRl
RmxhZ3MpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdC5wcm90b3R5cGUudXBk
YXRlU3RhdGljRGF0YSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZXNQ
cm92aWRlci5wcm90b3R5cGUuX3NlcmlhbGl6ZSk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250
LWVuZC9IZWFwU25hcHNob3RQcm94eS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3RQcm94eS5wcm90b3R5cGUuZ2V0IG5vZGVGbGFncyk6CisgICAgICAgICogaW5zcGVjdG9y
L2Zyb250LWVuZC9PYmplY3RQcm9wZXJ0aWVzU2VjdGlvbi5qczoKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5PYmplY3RQcm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGUub25Qcm9wZXJ0aWVzUmVjZWl2
ZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLk9iamVjdFByb3BlcnRpZXNTZWN0aW9uLnByb3Rv
dHlwZS51cGRhdGUuY2FsbGJhY2spOgorICAgICAgICAoV2ViSW5zcGVjdG9yLk9iamVjdFByb3Bl
cnRpZXNTZWN0aW9uLnByb3RvdHlwZS51cGRhdGUpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9u
dC1lbmQvUG9wb3Zlci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5PYmplY3RQb3BvdmVySGVs
cGVyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5PYmplY3RQb3BvdmVySGVscGVyLnByb3RvdHlw
ZS5fc2hvd09iamVjdFBvcG92ZXIuc2hvd09iamVjdFBvcG92ZXIuZWxzZS5zZWN0aW9uLm9uUHJv
cGVydGllc1JlY2VpdmVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5PYmplY3RQb3BvdmVySGVs
cGVyLnByb3RvdHlwZS5fc2hvd09iamVjdFBvcG92ZXIpOgorICAgICAgICAqIGluc3BlY3Rvci9m
cm9udC1lbmQvU291cmNlRnJhbWUuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJh
bWUucHJvdG90eXBlLl9pbml0aWFsaXplVGV4dFZpZXdlcik6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuU291cmNlRnJhbWUucHJvdG90eXBlLl9tb3VzZURvd24pOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5fb25TaG93UG9wb3Zlci5zaG93T2JqZWN0UG9wb3Zl
cik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLl9vblNob3dQ
b3BvdmVyKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2hlYXBQcm9maWxlci5jc3M6
CisgICAgICAgICguZGV0YWlsZWQtaGVhcHNob3QtdmlldyB0cjpub3QoLnNlbGVjdGVkKSB0ZC5v
YmplY3QtY29sdW1uIHNwYW4uaGlnaGxpZ2h0KToKKwogMjAxMS0wOS0yOSAgVnNldm9sb2QgVmxh
c292ICA8dnNldmlrQGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBNYWtl
IHNlYXJjaC1pbi1yZXNvdXJjZSB0ZXN0IHNpbXBsZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9FbmdsaXNoLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanMgYi9Tb3VyY2UvV2ViQ29yZS9F
bmdsaXNoLmxwcm9qL2xvY2FsaXplZFN0cmluZ3MuanMKaW5kZXggYTNjZWZhMTgzODIyNTU0OThj
OWU5N2QzZDFjNzU4MmY4NjlkYzNiOS4uMjAwNDFkNTAwN2NhMjJmNzlhODAyNzFiZGRkMThiM2U1
OGZhYjEyZSAxMDA2NDQKR0lUIGJpbmFyeSBwYXRjaApkZWx0YSA4Mwp6Y21acXEhfkVfS145R2lH
bFRTQGpiQGdNJlhEREclVWBTKnIxTDkxRTkzWXRsQnZUb2I3LUU2cXdtX2BKZktRYioKRzB+WXx7
Q2xjaVYKCmRlbHRhIDkKUWNtYUYmaHE+aHNeOUdpRzAyX2hAQkxEeVoKCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRQcm9maWxlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9TY3JpcHRQcm9maWxlci5jcHAKaW5kZXggZmI0ZTk3NS4uZGMwZmIy
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0UHJvZmlsZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmNwcApA
QCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNjcmlwdFBy
b2ZpbGVyLmgiCiAKKyNpbmNsdWRlICJJbmplY3RlZFNjcmlwdC5oIgogI2luY2x1ZGUgIkluc3Bl
Y3RvclZhbHVlcy5oIgogI2luY2x1ZGUgIlJldGFpbmVkRE9NSW5mby5oIgogI2luY2x1ZGUgIlY4
QmluZGluZy5oIgpAQCAtNjUsNiArNjYsMzUgQEAgdm9pZCBTY3JpcHRQcm9maWxlcjo6Y29sbGVj
dEdhcmJhZ2UoKQogICAgIHdoaWxlICghdjg6OlY4OjpJZGxlTm90aWZpY2F0aW9uKCkpIHsgfQog
fQogCitQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBTY3JpcHRQcm9maWxlcjo6Z2V0T2JqZWN0
QnlIZWFwT2JqZWN0SWQodW5zaWduZWQgaWQsIEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyKQoreworICAgIC8vIEFzIGlkcyBhcmUgdW5pcXVlLCBpdCBkb2Vzbid0
IG1hdHRlciwgSGVhcEdyYXBoTm9kZSBmcm9tIHdoaWNoIEhlYXBTbmFwc2hvdAorICAgIC8vIHdp
bGwgYmUgdXNlZC4gV2UgbmVlZCB0byBmaW5kIGZpcnN0IEhlYXBTbmFwc2hvdCBjb250YWluaW5n
IGEgbm9kZSB3aXRoIHRoZQorICAgIC8vIHNwZWNpZmllZCBpZC4KKyAgICBjb25zdCB2ODo6SGVh
cEdyYXBoTm9kZSogbm9kZSA9IDA7CisgICAgZm9yIChpbnQgaSA9IDAsIGwgPSB2ODo6SGVhcFBy
b2ZpbGVyOjpHZXRTbmFwc2hvdHNDb3VudCgpOyBpIDwgbDsgKytpKSB7CisgICAgICAgIGNvbnN0
IHY4OjpIZWFwU25hcHNob3QqIHNuYXBzaG90ID0gdjg6OkhlYXBQcm9maWxlcjo6R2V0U25hcHNo
b3QoaSk7CisgICAgICAgIG5vZGUgPSBzbmFwc2hvdC0+R2V0Tm9kZUJ5SWQoaWQpOworICAgICAg
ICBpZiAobm9kZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAoIW5vZGUpCisg
ICAgICAgIHJldHVybiBJbnNwZWN0b3JWYWx1ZTo6bnVsbCgpOworICAgIHY4OjpIYW5kbGVTY29w
ZSBzY29wZTsKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUgPSBub2RlLT5HZXRIZWFw
VmFsdWUoKTsKKyAgICBpZiAoIXZhbHVlLT5Jc09iamVjdCgpKQorICAgICAgICByZXR1cm4gSW5z
cGVjdG9yVmFsdWU6Om51bGwoKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCh2
YWx1ZS5Bczx2ODo6T2JqZWN0PigpKTsKKyAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGNyZWF0
aW9uQ29udGV4dCA9IG9iamVjdC0+Q3JlYXRpb25Db250ZXh0KCk7CisgICAgdjg6OkNvbnRleHQ6
OlNjb3BlIGNyZWF0aW9uU2NvcGUoY3JlYXRpb25Db250ZXh0KTsKKyAgICBTY3JpcHRTdGF0ZSog
c2NyaXB0U3RhdGUgPSBTY3JpcHRTdGF0ZTo6Zm9yQ29udGV4dChjcmVhdGlvbkNvbnRleHQpOwor
ICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gaW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
LT5pbmplY3RlZFNjcmlwdEZvcihzY3JpcHRTdGF0ZSk7CisgICAgaWYgKCFpbmplY3RlZFNjcmlw
dC5oYXNOb1ZhbHVlKCkpCisgICAgICAgIHJldHVybiBpbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0
KHZhbHVlLCAiIik7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gSW5zcGVjdG9yVmFsdWU6Om51
bGwoKTsKK30KKwogbmFtZXNwYWNlIHsKIAogY2xhc3MgQWN0aXZpdHlDb250cm9sQWRhcHRlciA6
IHB1YmxpYyB2ODo6QWN0aXZpdHlDb250cm9sIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9TY3JpcHRQcm9maWxlci5oCmluZGV4IDkyYTk4MGIuLmM0OTVlMzYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0UHJvZmlsZXIuaApAQCAtMzksNyArMzksOCBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEluc3BlY3Rvck9iamVjdDsKK2NsYXNzIEluamVj
dGVkU2NyaXB0TWFuYWdlcjsKK2NsYXNzIEluc3BlY3RvclZhbHVlOwogCiBjbGFzcyBTY3JpcHRQ
cm9maWxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2NyaXB0UHJvZmlsZXIpOwpAQCAt
NTQsNiArNTUsNyBAQCBwdWJsaWM6CiAgICAgfTsKIAogICAgIHN0YXRpYyB2b2lkIGNvbGxlY3RH
YXJiYWdlKCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGdldE9iamVj
dEJ5SGVhcE9iamVjdElkKHVuc2lnbmVkIGlkLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqKTsKICAg
ICBzdGF0aWMgdm9pZCBzdGFydChTY3JpcHRTdGF0ZSogc3RhdGUsIGNvbnN0IFN0cmluZyYgdGl0
bGUpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNjcmlwdFByb2ZpbGU+IHN0b3AoU2NyaXB0U3Rh
dGUqIHN0YXRlLCBjb25zdCBTdHJpbmcmIHRpdGxlKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxT
Y3JpcHRIZWFwU25hcHNob3Q+IHRha2VIZWFwU25hcHNob3QoY29uc3QgU3RyaW5nJiB0aXRsZSwg
SGVhcFNuYXBzaG90UHJvZ3Jlc3MqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3IuanNvbiBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3Iu
anNvbgppbmRleCAwOWQyZGI2Li5hMDVkYjAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yLmpzb24KKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3Rvci5qc29uCkBAIC0xOTQwLDYgKzE5NDAsMTUgQEAKICAgICAgICAgICAgIH0sCiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgIm5hbWUiOiAiY29sbGVjdEdhcmJhZ2UiCisgICAg
ICAgICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJuYW1lIjogImdldE9i
amVjdEJ5SGVhcE9iamVjdElkIiwKKyAgICAgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAg
ICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJvYmplY3RJZCIsICJ0eXBlIjogImludGVnZXIi
IH0KKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgICJyZXR1cm5zIjogWworICAg
ICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInJlc3VsdCIsICIkcmVmIjogIlJ1bnRpbWUuUmVt
b3RlT2JqZWN0IiwgImRlc2NyaXB0aW9uIjogIkV2YWx1YXRpb24gcmVzdWx0LiIgfQorICAgICAg
ICAgICAgICAgIF0KICAgICAgICAgICAgIH0KICAgICAgICAgXSwKICAgICAgICAgImV2ZW50cyI6
IFsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9s
bGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNw
cAppbmRleCA0NGFlMmEyLi5kMTNhZTNkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtMTE1LDcgKzExNSw3IEBAIEluc3BlY3Rv
ckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xsZXIoUGFnZSogcGFnZSwgSW5zcGVjdG9yQ2xp
ZW50KiBpbnNwZWN0b3JDCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgLCBt
X2RlYnVnZ2VyQWdlbnQoUGFnZURlYnVnZ2VyQWdlbnQ6OmNyZWF0ZShtX2luc3RydW1lbnRpbmdB
Z2VudHMuZ2V0KCksIG1fc3RhdGUuZ2V0KCksIHBhZ2UsIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
LmdldCgpKSkKICAgICAsIG1fZG9tRGVidWdnZXJBZ2VudChJbnNwZWN0b3JET01EZWJ1Z2dlckFn
ZW50OjpjcmVhdGUobV9pbnN0cnVtZW50aW5nQWdlbnRzLmdldCgpLCBtX3N0YXRlLmdldCgpLCBt
X2RvbUFnZW50LmdldCgpLCBtX2RlYnVnZ2VyQWdlbnQuZ2V0KCksIG1faW5zcGVjdG9yQWdlbnQu
Z2V0KCkpKQotICAgICwgbV9wcm9maWxlckFnZW50KEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmNy
ZWF0ZShtX2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0KCksIG1fY29uc29sZUFnZW50LmdldCgpLCBw
YWdlLCBtX3N0YXRlLmdldCgpKSkKKyAgICAsIG1fcHJvZmlsZXJBZ2VudChJbnNwZWN0b3JQcm9m
aWxlckFnZW50OjpjcmVhdGUobV9pbnN0cnVtZW50aW5nQWdlbnRzLmdldCgpLCBtX2NvbnNvbGVB
Z2VudC5nZXQoKSwgcGFnZSwgbV9zdGF0ZS5nZXQoKSwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIu
Z2V0KCkpKQogI2VuZGlmCiAjaWYgRU5BQkxFKFdPUktFUlMpCiAgICAgLCBtX3dvcmtlckFnZW50
KEluc3BlY3RvcldvcmtlckFnZW50OjpjcmVhdGUobV9pbnN0cnVtZW50aW5nQWdlbnRzLmdldCgp
LCBtX3N0YXRlLmdldCgpKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JQcm9maWxlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JQcm9maWxlckFnZW50LmNwcAppbmRleCBiYjUzZTczLi5lZjA0NDI0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwCkBA
IC02MiwxNiArNjIsMTcgQEAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IFVzZXJJbml0aWF0ZWRQ
cm9maWxlTmFtZSA9ICJvcmcud2Via2l0LnByb2ZpbGVzLnVzZXItaW4KIHN0YXRpYyBjb25zdCBj
aGFyKiBjb25zdCBDUFVQcm9maWxlVHlwZSA9ICJDUFUiOwogc3RhdGljIGNvbnN0IGNoYXIqIGNv
bnN0IEhlYXBQcm9maWxlVHlwZSA9ICJIRUFQIjsKIAotUGFzc093blB0cjxJbnNwZWN0b3JQcm9m
aWxlckFnZW50PiBJbnNwZWN0b3JQcm9maWxlckFnZW50OjpjcmVhdGUoSW5zdHJ1bWVudGluZ0Fn
ZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgSW5zcGVjdG9yQ29uc29sZUFnZW50KiBjb25zb2xl
QWdlbnQsIFBhZ2UqIGluc3BlY3RlZFBhZ2UsIEluc3BlY3RvclN0YXRlKiBpbnNwZWN0b3JTdGF0
ZSkKK1Bhc3NPd25QdHI8SW5zcGVjdG9yUHJvZmlsZXJBZ2VudD4gSW5zcGVjdG9yUHJvZmlsZXJB
Z2VudDo6Y3JlYXRlKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIElu
c3BlY3RvckNvbnNvbGVBZ2VudCogY29uc29sZUFnZW50LCBQYWdlKiBpbnNwZWN0ZWRQYWdlLCBJ
bnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUsIEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyKQogewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgSW5zcGVjdG9y
UHJvZmlsZXJBZ2VudChpbnN0cnVtZW50aW5nQWdlbnRzLCBjb25zb2xlQWdlbnQsIGluc3BlY3Rl
ZFBhZ2UsIGluc3BlY3RvclN0YXRlKSk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbnNwZWN0
b3JQcm9maWxlckFnZW50KGluc3RydW1lbnRpbmdBZ2VudHMsIGNvbnNvbGVBZ2VudCwgaW5zcGVj
dGVkUGFnZSwgaW5zcGVjdG9yU3RhdGUsIGluamVjdGVkU2NyaXB0TWFuYWdlcikpOwogfQogCi1J
bnNwZWN0b3JQcm9maWxlckFnZW50OjpJbnNwZWN0b3JQcm9maWxlckFnZW50KEluc3RydW1lbnRp
bmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEluc3BlY3RvckNvbnNvbGVBZ2VudCogY29u
c29sZUFnZW50LCBQYWdlKiBpbnNwZWN0ZWRQYWdlLCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9y
U3RhdGUpCitJbnNwZWN0b3JQcm9maWxlckFnZW50OjpJbnNwZWN0b3JQcm9maWxlckFnZW50KElu
c3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEluc3BlY3RvckNvbnNvbGVB
Z2VudCogY29uc29sZUFnZW50LCBQYWdlKiBpbnNwZWN0ZWRQYWdlLCBJbnNwZWN0b3JTdGF0ZSog
aW5zcGVjdG9yU3RhdGUsIEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyKQogICAgIDogbV9pbnN0cnVtZW50aW5nQWdlbnRzKGluc3RydW1lbnRpbmdBZ2VudHMpCiAg
ICAgLCBtX2NvbnNvbGVBZ2VudChjb25zb2xlQWdlbnQpCiAgICAgLCBtX2luc3BlY3RlZFBhZ2Uo
aW5zcGVjdGVkUGFnZSkKICAgICAsIG1faW5zcGVjdG9yU3RhdGUoaW5zcGVjdG9yU3RhdGUpCisg
ICAgLCBtX2luamVjdGVkU2NyaXB0TWFuYWdlcihpbmplY3RlZFNjcmlwdE1hbmFnZXIpCiAgICAg
LCBtX2Zyb250ZW5kKDApCiAgICAgLCBtX2VuYWJsZWQoZmFsc2UpCiAgICAgLCBtX3JlY29yZGlu
Z1VzZXJJbml0aWF0ZWRQcm9maWxlKGZhbHNlKQpAQCAtMzc4LDYgKzM3OSwxNCBAQCB2b2lkIElu
c3BlY3RvclByb2ZpbGVyQWdlbnQ6OnRvZ2dsZVJlY29yZEJ1dHRvbihib29sIGlzUHJvZmlsaW5n
KQogICAgICAgICBtX2Zyb250ZW5kLT5zZXRSZWNvcmRpbmdQcm9maWxlKGlzUHJvZmlsaW5nKTsK
IH0KIAordm9pZCBJbnNwZWN0b3JQcm9maWxlckFnZW50OjpnZXRPYmplY3RCeUhlYXBPYmplY3RJ
ZChFcnJvclN0cmluZyosIGludCBpZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIHJlc3VsdCkK
K3sKKyAgICBpZiAobV9mcm9udGVuZCkgeworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
IGhlYXBPYmplY3QgPSBTY3JpcHRQcm9maWxlcjo6Z2V0T2JqZWN0QnlIZWFwT2JqZWN0SWQoaWQs
IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKTsKKyAgICAgICAgaGVhcE9iamVjdC0+YXNPYmplY3Qo
cmVzdWx0KTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8v
IEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKSAmJiBFTkFCTEUoSU5TUEVDVE9SKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmgKaW5kZXgg
NDA5NDFlOC4uZWVkN2UyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclByb2ZpbGVyQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yUHJvZmlsZXJBZ2VudC5oCkBAIC00MSw2ICs0MSw3IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorY2xhc3MgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwogY2xhc3MgSW5zcGVjdG9yQXJy
YXk7CiBjbGFzcyBJbnNwZWN0b3JDb25zb2xlQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JGcm9udGVu
ZDsKQEAgLTU2LDcgKzU3LDcgQEAgdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiBjbGFzcyBJ
bnNwZWN0b3JQcm9maWxlckFnZW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0
b3JQcm9maWxlckFnZW50KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NPd25QdHI8SW5zcGVjdG9yUHJvZmlsZXJBZ2VudD4gY3JlYXRlKEluc3RydW1l
bnRpbmdBZ2VudHMqLCBJbnNwZWN0b3JDb25zb2xlQWdlbnQqLCBQYWdlKiwgSW5zcGVjdG9yU3Rh
dGUqKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxJbnNwZWN0b3JQcm9maWxlckFnZW50PiBjcmVh
dGUoSW5zdHJ1bWVudGluZ0FnZW50cyosIEluc3BlY3RvckNvbnNvbGVBZ2VudCosIFBhZ2UqLCBJ
bnNwZWN0b3JTdGF0ZSosIEluamVjdGVkU2NyaXB0TWFuYWdlciopOwogICAgIHZpcnR1YWwgfklu
c3BlY3RvclByb2ZpbGVyQWdlbnQoKTsKIAogICAgIHZvaWQgYWRkUHJvZmlsZShQYXNzUmVmUHRy
PFNjcmlwdFByb2ZpbGU+IHBycFByb2ZpbGUsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0
cmluZyYgc291cmNlVVJMKTsKQEAgLTkwLDYgKzkxLDggQEAgcHVibGljOgogICAgIHZvaWQgdGFr
ZUhlYXBTbmFwc2hvdChFcnJvclN0cmluZyopOwogICAgIHZvaWQgdG9nZ2xlUmVjb3JkQnV0dG9u
KGJvb2wgaXNQcm9maWxpbmcpOwogCisgICAgdm9pZCBnZXRPYmplY3RCeUhlYXBPYmplY3RJZChF
cnJvclN0cmluZyosIGludCBpZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIHJlc3VsdCk7CisK
IHByaXZhdGU6CiAgICAgdHlwZWRlZiBIYXNoTWFwPHVuc2lnbmVkIGludCwgUmVmUHRyPFNjcmlw
dFByb2ZpbGU+ID4gUHJvZmlsZXNNYXA7CiAgICAgdHlwZWRlZiBIYXNoTWFwPHVuc2lnbmVkIGlu
dCwgUmVmUHRyPFNjcmlwdEhlYXBTbmFwc2hvdD4gPiBIZWFwU25hcHNob3RzTWFwOwpAQCAtOTcs
NyArMTAwLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlc2V0RnJvbnRlbmRQcm9maWxlcygpOwog
ICAgIHZvaWQgcmVzdG9yZUVuYWJsZW1lbnQoKTsKIAotICAgIEluc3BlY3RvclByb2ZpbGVyQWdl
bnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIEluc3BlY3RvckNvbnNvbGVBZ2VudCosIFBhZ2UqLCBJ
bnNwZWN0b3JTdGF0ZSopOworICAgIEluc3BlY3RvclByb2ZpbGVyQWdlbnQoSW5zdHJ1bWVudGlu
Z0FnZW50cyosIEluc3BlY3RvckNvbnNvbGVBZ2VudCosIFBhZ2UqLCBJbnNwZWN0b3JTdGF0ZSos
IEluamVjdGVkU2NyaXB0TWFuYWdlciopOwogICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBjcmVhdGVQcm9maWxlSGVhZGVyKGNvbnN0IFNjcmlwdFByb2ZpbGUmIHByb2ZpbGUpOwogICAg
IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVTbmFwc2hvdEhlYWRlcihjb25zdCBT
Y3JpcHRIZWFwU25hcHNob3QmIHNuYXBzaG90KTsKIApAQCAtMTA1LDYgKzEwOCw3IEBAIHByaXZh
dGU6CiAgICAgSW5zcGVjdG9yQ29uc29sZUFnZW50KiBtX2NvbnNvbGVBZ2VudDsKICAgICBQYWdl
KiBtX2luc3BlY3RlZFBhZ2U7CiAgICAgSW5zcGVjdG9yU3RhdGUqIG1faW5zcGVjdG9yU3RhdGU7
CisgICAgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBtX2luamVjdGVkU2NyaXB0TWFuYWdlcjsKICAg
ICBJbnNwZWN0b3JGcm9udGVuZDo6UHJvZmlsZXIqIG1fZnJvbnRlbmQ7CiAgICAgYm9vbCBtX2Vu
YWJsZWQ7CiAgICAgYm9vbCBtX3JlY29yZGluZ1VzZXJJbml0aWF0ZWRQcm9maWxlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EZXRhaWxlZEhlYXBzaG90
R3JpZE5vZGVzLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EZXRhaWxl
ZEhlYXBzaG90R3JpZE5vZGVzLmpzCmluZGV4IDc2MTAxMmMuLjQzN2M5MGIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGV0YWlsZWRIZWFwc2hvdEdyaWRO
b2Rlcy5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RldGFpbGVk
SGVhcHNob3RHcmlkTm9kZXMuanMKQEAgLTU2LDkgKzU2LDggQEAgV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdEdyaWROb2RlLnByb3RvdHlwZSA9IHsKIAogICAgIGhhc0hvdmVyTWVzc2FnZTogZmFs
c2UsCiAKLSAgICBob3Zlck1lc3NhZ2U6IGZ1bmN0aW9uKGNhbGxiYWNrKQorICAgIHF1ZXJ5T2Jq
ZWN0Q29udGVudDogZnVuY3Rpb24oY2FsbGJhY2spCiAgICAgewotICAgICAgICBjYWxsYmFjaygi
Iik7CiAgICAgfSwKIAogICAgIF9wb3B1bGF0ZTogZnVuY3Rpb24oZXZlbnQpCkBAIC0xODUsOSAr
MTg0LDkgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEdlbmVyaWNPYmplY3ROb2RlID0gZnVu
Y3Rpb24odHJlZSwgbm9kZSkKICAgICBpZiAodGhpcy5fdHlwZSA9PT0gInN0cmluZyIpCiAgICAg
ICAgIHRoaXMuaGFzSG92ZXJNZXNzYWdlID0gdHJ1ZTsKICAgICBlbHNlIGlmICh0aGlzLl90eXBl
ID09PSAib2JqZWN0IiAmJiB0aGlzLmlzRE9NV2luZG93KHRoaXMuX25hbWUpKSB7Ci0gICAgICAg
IHZhciB1cmwgPSBbXTsKLSAgICAgICAgdGhpcy5fbmFtZSA9IHRoaXMuc2hvcnRlbldpbmRvd1VS
TCh0aGlzLl9uYW1lLCBmYWxzZSwgdXJsKTsKLSAgICAgICAgdGhpcy5fdXJsID0gdXJsWzBdOwor
ICAgICAgICB0aGlzLl9uYW1lID0gdGhpcy5zaG9ydGVuV2luZG93VVJMKHRoaXMuX25hbWUsIGZh
bHNlKTsKKyAgICAgICAgdGhpcy5oYXNIb3Zlck1lc3NhZ2UgPSB0cnVlOworICAgIH0gZWxzZSBp
ZiAobm9kZS5mbGFncyAmIHRyZWUuc25hcHNob3Qubm9kZUZsYWdzLmNhbkJlUXVlcmllZCkgewog
ICAgICAgICB0aGlzLmhhc0hvdmVyTWVzc2FnZSA9IHRydWU7CiAgICAgfQogfTsKQEAgLTI1OSw2
ICsyNTgsOCBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90R2VuZXJpY09iamVjdE5vZGUucHJv
dG90eXBlID0gewogICAgICAgICAgICAgICAgIHZhbHVlICs9ICIgW10iOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH07CisgICAgICAgIGlmICh0aGlzLmhhc0hvdmVyTWVzc2FnZSkKKyAg
ICAgICAgICAgIHZhbHVlU3R5bGUgKz0gIiBoaWdobGlnaHQiOwogICAgICAgICBkYXRhWyJvYmpl
Y3QiXSA9IHsgdmFsdWVTdHlsZTogdmFsdWVTdHlsZSwgdmFsdWU6IHZhbHVlICsgIiBAIiArIHRo
aXMuc25hcHNob3ROb2RlSWQgfTsKIAogICAgICAgICB2YXIgdmlldyA9IHRoaXMuZGF0YUdyaWQu
c25hcHNob3RWaWV3OwpAQCAtMjY4LDEyICsyNjksMjAgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdEdlbmVyaWNPYmplY3ROb2RlLnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIHRoaXMu
X2VuaGFuY2VEYXRhID8gdGhpcy5fZW5oYW5jZURhdGEoZGF0YSkgOiBkYXRhOwogICAgIH0sCiAK
LSAgICBob3Zlck1lc3NhZ2U6IGZ1bmN0aW9uKGNhbGxiYWNrKQorICAgIHF1ZXJ5T2JqZWN0Q29u
dGVudDogZnVuY3Rpb24oY2FsbGJhY2spCiAgICAgewotICAgICAgICBpZiAodGhpcy5fdHlwZSA9
PT0gInN0cmluZyIpCi0gICAgICAgICAgICBjYWxsYmFjaygiXCIiICsgdGhpcy5fbmFtZSArICJc
IiIsICJjb25zb2xlLWZvcm1hdHRlZC1zdHJpbmciKTsKLSAgICAgICAgZWxzZSBpZiAodGhpcy5f
dXJsKQotICAgICAgICAgICAgY2FsbGJhY2sodGhpcy5fdXJsLCAiY29uc29sZS1mb3JtYXR0ZWQt
b2JqZWN0Iik7CisgICAgICAgIGlmICh0aGlzLl90eXBlID09PSAic3RyaW5nIikgeworICAgICAg
ICAgICAgY2FsbGJhY2soeyB0eXBlOiAic3RyaW5nIiwgZGVzY3JpcHRpb246IHRoaXMuX25hbWUg
fSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmdW5jdGlvbiBmb3JtYXRSZXN1bHQo
ZXJyb3IsIG9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAob2JqZWN0
LnR5cGUpCisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKFdlYkluc3BlY3Rvci5SZW1vdGVP
YmplY3QuZnJvbVBheWxvYWQob2JqZWN0KSwgISFlcnJvcik7ICAgIAorICAgICAgICAgICAgICAg
IGVsc2UgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayh7
IHR5cGU6ICJudWxsIiwgZGVzY3JpcHRpb246IFdlYkluc3BlY3Rvci5VSVN0cmluZygiTm90IGF2
YWlsYWJsZSIpIH0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUHJvZmlsZXJBZ2VudC5n
ZXRPYmplY3RCeUhlYXBPYmplY3RJZCh0aGlzLnNuYXBzaG90Tm9kZUlkLCBmb3JtYXRSZXN1bHQp
OworICAgICAgICB9CiAgICAgfSwKIAogICAgIGdldCBfcmV0YWluZWRTaXplUGVyY2VudCgpCkBA
IC0zMDAsMTQgKzMwOSwxMiBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90R2VuZXJpY09iamVj
dE5vZGUucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gZnVsbE5hbWUuc3Vic3RyKDAsIDkp
ID09PSAiRE9NV2luZG93IjsKICAgICB9LAogCi0gICAgc2hvcnRlbldpbmRvd1VSTDogZnVuY3Rp
b24oZnVsbE5hbWUsIGhhc09iamVjdElkLCBmdWxsVVJMUHRyKQorICAgIHNob3J0ZW5XaW5kb3dV
Ukw6IGZ1bmN0aW9uKGZ1bGxOYW1lLCBoYXNPYmplY3RJZCkKICAgICB7CiAgICAgICAgIHZhciBz
dGFydFBvcyA9IGZ1bGxOYW1lLmluZGV4T2YoIi8iKTsKICAgICAgICAgdmFyIGVuZFBvcyA9IGhh
c09iamVjdElkID8gZnVsbE5hbWUuaW5kZXhPZigiQCIpIDogZnVsbE5hbWUubGVuZ3RoOwogICAg
ICAgICBpZiAoc3RhcnRQb3MgIT09IC0xICYmIGVuZFBvcyAhPT0gLTEpIHsKICAgICAgICAgICAg
IHZhciBmdWxsVVJMID0gZnVsbE5hbWUuc3Vic3RyaW5nKHN0YXJ0UG9zICsgMSwgZW5kUG9zKS50
cmltTGVmdCgpOwotICAgICAgICAgICAgaWYgKGZ1bGxVUkxQdHIpCi0gICAgICAgICAgICAgICAg
ZnVsbFVSTFB0clswXSA9IGZ1bGxVUkw7CiAgICAgICAgICAgICB2YXIgdXJsID0gZnVsbFVSTC50
cmltVVJMKCk7CiAgICAgICAgICAgICBpZiAodXJsLmxlbmd0aCA+IDQwKQogICAgICAgICAgICAg
ICAgIHVybCA9IHVybC50cmltTWlkZGxlKDQwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvRGV0YWlsZWRIZWFwc2hvdFZpZXcuanMgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RldGFpbGVkSGVhcHNob3RWaWV3LmpzCmluZGV4IDAw
OTY2NTEuLjYxNWY4YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvRGV0YWlsZWRIZWFwc2hvdFZpZXcuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9EZXRhaWxlZEhlYXBzaG90Vmlldy5qcwpAQCAtNjIxLDcgKzYyMSw3IEBA
IFdlYkluc3BlY3Rvci5EZXRhaWxlZEhlYXBzaG90VmlldyA9IGZ1bmN0aW9uKHBhcmVudCwgcHJv
ZmlsZSkKICAgICB0aGlzLmhlbHBCdXR0b24gPSBuZXcgV2ViSW5zcGVjdG9yLlN0YXR1c0JhckJ1
dHRvbigiIiwgImhlYXBzaG90LWhlbHAtc3RhdHVzLWJhci1pdGVtIHN0YXR1cy1iYXItaXRlbSIp
OwogICAgIHRoaXMuaGVscEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX2hl
bHBDbGlja2VkLmJpbmQodGhpcyksIGZhbHNlKTsKIAotICAgIHZhciBwb3BvdmVySGVscGVyID0g
bmV3IFdlYkluc3BlY3Rvci5Qb3BvdmVySGVscGVyKHRoaXMuZWxlbWVudCwgdGhpcy5fZ2V0SG92
ZXJBbmNob3IuYmluZCh0aGlzKSwgdGhpcy5fc2hvd1N0cmluZ0NvbnRlbnRQb3BvdmVyLmJpbmQo
dGhpcykpOworICAgIHZhciBwb3BvdmVySGVscGVyID0gbmV3IFdlYkluc3BlY3Rvci5PYmplY3RQ
b3BvdmVySGVscGVyKHRoaXMuZWxlbWVudCwgdGhpcy5fZ2V0SG92ZXJBbmNob3IuYmluZCh0aGlz
KSwgdGhpcy5fc2hvd09iamVjdFBvcG92ZXIuYmluZCh0aGlzKSwgbnVsbCwgdHJ1ZSk7CiAKICAg
ICB0aGlzLl9sb2FkUHJvZmlsZSh0aGlzLl9wcm9maWxlVWlkLCBwcm9maWxlQ2FsbGJhY2suYmlu
ZCh0aGlzKSk7CiAKQEAgLTEwNjYsMTkgKzEwNjYsOSBAQCBXZWJJbnNwZWN0b3IuRGV0YWlsZWRI
ZWFwc2hvdFZpZXcucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLnJlZnJlc2hTaG93QXNQZXJj
ZW50cygpOwogICAgIH0sCiAKLSAgICBfc2hvd1N0cmluZ0NvbnRlbnRQb3BvdmVyOiBmdW5jdGlv
bihhbmNob3IsIHBvcG92ZXIpCisgICAgX3Nob3dPYmplY3RQb3BvdmVyOiBmdW5jdGlvbihlbGVt
ZW50LCBzaG93Q2FsbGJhY2spCiAgICAgewotICAgICAgICB2YXIgc3RyaW5nQ29udGVudEVsZW1l
bnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci0gICAgICAgIHN0cmluZ0NvbnRl
bnRFbGVtZW50LmNsYXNzTmFtZSA9ICJtb25vc3BhY2UiOwotICAgICAgICBzdHJpbmdDb250ZW50
RWxlbWVudC5zdHlsZS53aGl0ZVNwYWNlID0gInByZSI7Ci0KLSAgICAgICAgZnVuY3Rpb24gZGlz
cGxheVN0cmluZyhuYW1lLCBjbGFzc05hbWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0cmlu
Z0NvbnRlbnRFbGVtZW50LnRleHRDb250ZW50ID0gbmFtZTsKLSAgICAgICAgICAgIHN0cmluZ0Nv
bnRlbnRFbGVtZW50LmNsYXNzTmFtZSArPSAiICIgKyBjbGFzc05hbWU7Ci0gICAgICAgICAgICBw
b3BvdmVyLnNob3coc3RyaW5nQ29udGVudEVsZW1lbnQsIGFuY2hvcik7Ci0gICAgICAgIH0KLSAg
ICAgICAgYW5jaG9yLm5vZGUuaG92ZXJNZXNzYWdlKGRpc3BsYXlTdHJpbmcpOworICAgICAgICBl
bGVtZW50Lm5vZGUucXVlcnlPYmplY3RDb250ZW50KHNob3dDYWxsYmFjayk7CiAgICAgfSwKIAog
ICAgIF9oZWxwQ2xpY2tlZDogZnVuY3Rpb24oZXZlbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdC5qcyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90LmpzCmluZGV4IDkwNDBlYTMuLjMzZjkx
OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNu
YXBzaG90LmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNu
YXBzaG90LmpzCkBAIC00OTQsNiArNDk0LDEyIEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RO
b2RlID0gZnVuY3Rpb24oc25hcHNob3QsIG5vZGVJbmRleCkKIH0KIAogV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdE5vZGUucHJvdG90eXBlID0geworICAgIGdldCBjYW5CZVF1ZXJpZWQoKQorICAg
IHsKKyAgICAgICAgdmFyIGZsYWdzID0gdGhpcy5fc25hcHNob3QuX2ZsYWdzT2ZOb2RlKHRoaXMp
OworICAgICAgICByZXR1cm4gISEoZmxhZ3MgJiB0aGlzLl9zbmFwc2hvdC5fbm9kZUZsYWdzLmNh
bkJlUXVlcmllZCk7CisgICAgfSwKKwogICAgIGdldCBjbGFzc05hbWUoKQogICAgIHsKICAgICAg
ICAgc3dpdGNoICh0aGlzLnR5cGUpIHsKQEAgLTUyOSw2ICs1MzUsMTEgQEAgV2ViSW5zcGVjdG9y
LkhlYXBTbmFwc2hvdE5vZGUucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gdGhpcy5fbm9k
ZXNbdGhpcy5ub2RlSW5kZXggKyB0aGlzLl9zbmFwc2hvdC5fZWRnZXNDb3VudE9mZnNldF07CiAg
ICAgfSwKIAorICAgIGdldCBmbGFncygpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fc25h
cHNob3QuX2ZsYWdzT2ZOb2RlKHRoaXMpOworICAgIH0sCisKICAgICBnZXQgaWQoKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIHRoaXMuX25vZGVzW3RoaXMubm9kZUluZGV4ICsgdGhpcy5fc25hcHNo
b3QuX25vZGVJZE9mZnNldF07CkBAIC01NDQsNiArNTU1LDExIEBAIFdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3ROb2RlLnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGUoKSA9
PT0gdGhpcy5fc25hcHNob3QuX25vZGVIaWRkZW5UeXBlOwogICAgIH0sCiAKKyAgICBnZXQgaXNE
T01XaW5kb3coKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMubmFtZS5zdWJzdHIoMCwgOSkg
PT09ICJET01XaW5kb3ciOworICAgIH0sCisKICAgICBnZXQgaXNSb290KCkKICAgICB7CiAgICAg
ICAgIHJldHVybiB0aGlzLm5vZGVJbmRleCA9PT0gdGhpcy5fc25hcHNob3QuX3Jvb3ROb2RlSW5k
ZXg7CkBAIC02ODIsNiArNjk4LDggQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdC5wcm90b3R5
cGUgPSB7CiAgICAgICAgIHRoaXMuX2VkZ2VJbnZpc2libGVUeXBlID0gdGhpcy5fZWRnZVR5cGVz
Lmxlbmd0aDsKICAgICAgICAgdGhpcy5fZWRnZVR5cGVzLnB1c2goImludmlzaWJsZSIpOwogCisg
ICAgICAgIHRoaXMuX25vZGVGbGFncyA9IHsgY2FuQmVRdWVyaWVkOiAxIH07CisKICAgICAgICAg
dGhpcy5fbWFya0ludmlzaWJsZUVkZ2VzKCk7CiAgICAgfSwKIApAQCAtNjk5LDYgKzcxNyw3IEBA
IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3QucHJvdG90eXBlID0gewogICAgICAgICBkZWxldGUg
dGhpcy5fYmFzZU5vZGVJZHM7CiAgICAgICAgIGRlbGV0ZSB0aGlzLl9kb21pbmF0ZWROb2RlczsK
ICAgICAgICAgZGVsZXRlIHRoaXMuX2RvbWluYXRlZEluZGV4OworICAgICAgICBkZWxldGUgdGhp
cy5fZmxhZ3M7CiAgICAgfSwKIAogICAgIGdldCBfYWxsTm9kZXMoKQpAQCAtNzYzLDYgKzc4Miwx
MyBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90LnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0
dXJuIG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90QXJyYXlTbGljZSh0aGlzLCAiX2RvbWlu
YXRlZE5vZGVzIiwgZG9taW5hdGVkSW5kZXhGcm9tLCBkb21pbmF0ZWRJbmRleFRvKTsKICAgICB9
LAogCisgICAgX2ZsYWdzT2ZOb2RlOiBmdW5jdGlvbihub2RlKQorICAgIHsKKyAgICAgICAgaWYg
KCF0aGlzLl9mbGFncykKKyAgICAgICAgICAgIHRoaXMuX2NhbGN1bGF0ZUZsYWdzKCk7CisgICAg
ICAgIHJldHVybiB0aGlzLl9mbGFnc1tub2RlLm5vZGVJbmRleF07CisgICAgfSwKKwogICAgIGFn
Z3JlZ2F0ZXM6IGZ1bmN0aW9uKHNvcnRlZEluZGV4ZXMpCiAgICAgewogICAgICAgICBpZiAoIXRo
aXMuX2FnZ3JlZ2F0ZXMpCkBAIC05NTksNiArOTg1LDMyIEBAIFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3QucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gYSA8IGIgPyAtMSA6IChhID4gYiA/
IDEgOiAwKTsKICAgICB9LAogCisgICAgX2NhbGN1bGF0ZUZsYWdzOiBmdW5jdGlvbigpCisgICAg
eworICAgICAgICB2YXIgZmxhZyA9IHRoaXMuX25vZGVGbGFncy5jYW5CZVF1ZXJpZWQ7CisgICAg
ICAgIHRoaXMuX2ZsYWdzID0gbmV3IEFycmF5KHRoaXMubm9kZUNvdW50KTsKKyAgICAgICAgLy8g
QWxsb3cgcnVudGltZSBwcm9wZXJ0aWVzIHF1ZXJ5IGZvciBvYmplY3RzIGFjY2Vzc2libGUgZnJv
bSBET01XaW5kb3cgb2JqZWN0cworICAgICAgICAvLyB2aWEgcmVndWxhciBwcm9wZXJ0aWVzLCBh
bmQgZm9yIERPTSB3cmFwcGVycy4gVHJ5aW5nIHRvIGFjY2VzcyByYW5kb20gb2JqZWN0cworICAg
ICAgICAvLyBjYW4gY2F1c2UgYSBjcmFzaCBkdWUgdG8gaW5zb25zaXN0ZW50IHN0YXRlIG9mIGlu
dGVybmFsIHByb3BlcnRpZXMgb2Ygd3JhcHBlcnMuCisgICAgICAgIHZhciBsaXN0ID0gW107Cisg
ICAgICAgIGZvciAodmFyIGl0ZXIgPSB0aGlzLnJvb3ROb2RlLmVkZ2VzOyBpdGVyLmhhc05leHQo
KTsgaXRlci5uZXh0KCkpIHsKKyAgICAgICAgICAgIGlmIChpdGVyLmVkZ2Uubm9kZS5pc0RPTVdp
bmRvdykKKyAgICAgICAgICAgICAgICBsaXN0LnB1c2goaXRlci5lZGdlLm5vZGUpOworICAgICAg
ICB9CisgICAgICAgIHdoaWxlIChsaXN0Lmxlbmd0aCkgeworICAgICAgICAgICAgdmFyIG5vZGUg
PSBsaXN0LnNoaWZ0KCk7CisgICAgICAgICAgICBpZiAobm9kZS5jYW5CZVF1ZXJpZWQpIGNvbnRp
bnVlOworICAgICAgICAgICAgdGhpcy5fZmxhZ3Nbbm9kZS5ub2RlSW5kZXhdID0gZmxhZzsKKyAg
ICAgICAgICAgIGZvciAodmFyIGl0ZXIgPSBub2RlLmVkZ2VzOyBpdGVyLmhhc05leHQoKTsgaXRl
ci5uZXh0KCkpIHsKKyAgICAgICAgICAgICAgICB2YXIgZWRnZSA9IGl0ZXIuZWRnZTsKKyAgICAg
ICAgICAgICAgICBpZiAoIWVkZ2UuaXNIaWRkZW4gJiYgIWVkZ2UuaXNJbnZpc2libGUgJiYKKyAg
ICAgICAgICAgICAgICAgICAgZWRnZS5uYW1lICYmICghZWRnZS5pc0ludGVybmFsIHx8IGVkZ2Uu
bmFtZSA9PT0gIm5hdGl2ZSIpICYmCisgICAgICAgICAgICAgICAgICAgICFlZGdlLm5vZGUuY2Fu
QmVRdWVyaWVkKQorICAgICAgICAgICAgICAgICAgICBsaXN0LnB1c2goZWRnZS5ub2RlKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0sCisKICAgICBiYXNlU25hcHNob3RIYXNOb2Rl
OiBmdW5jdGlvbihiYXNlU25hcHNob3RJZCwgY2xhc3NOYW1lLCBub2RlSWQpCiAgICAgewogICAg
ICAgICByZXR1cm4gdGhpcy5fYmFzZU5vZGVJZHNbYmFzZVNuYXBzaG90SWRdW2NsYXNzTmFtZV0u
YmluYXJ5SW5kZXhPZihub2RlSWQsIHRoaXMuX251bWJlcnNDb21wYXJhdG9yKSAhPT0gLTE7CkBA
IC0xMDE0LDcgKzEwNjYsNyBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90LnByb3RvdHlwZSA9
IHsKIAogICAgIHVwZGF0ZVN0YXRpY0RhdGE6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIHJl
dHVybiB7bm9kZUNvdW50OiB0aGlzLm5vZGVDb3VudCwgcm9vdE5vZGVJbmRleDogdGhpcy5fcm9v
dE5vZGVJbmRleCwgdG90YWxTaXplOiB0aGlzLnRvdGFsU2l6ZSwgdWlkOiB0aGlzLnVpZH07Cisg
ICAgICAgIHJldHVybiB7bm9kZUNvdW50OiB0aGlzLm5vZGVDb3VudCwgcm9vdE5vZGVJbmRleDog
dGhpcy5fcm9vdE5vZGVJbmRleCwgdG90YWxTaXplOiB0aGlzLnRvdGFsU2l6ZSwgdWlkOiB0aGlz
LnVpZCwgbm9kZUZsYWdzOiB0aGlzLl9ub2RlRmxhZ3N9OwogICAgIH0KIH07CiAKQEAgLTEyMzUs
NyArMTI4Nyw3IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2Rlc1Byb3ZpZGVyID0gZnVu
Y3Rpb24oc25hcHNob3QsIGZpbHRlciwgbm9kZUluZGV4ZXMpCiBXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90Tm9kZXNQcm92aWRlci5wcm90b3R5cGUgPSB7CiAgICAgX3NlcmlhbGl6ZTogZnVuY3Rp
b24obm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiB7aWQ6IG5vZGUuaWQsIG5hbWU6IG5vZGUu
bmFtZSwgbm9kZUluZGV4OiBub2RlLm5vZGVJbmRleCwgcmV0YWluZWRTaXplOiBub2RlLnJldGFp
bmVkU2l6ZSwgc2VsZlNpemU6IG5vZGUuc2VsZlNpemUsIHR5cGU6IG5vZGUudHlwZX07CisgICAg
ICAgIHJldHVybiB7aWQ6IG5vZGUuaWQsIG5hbWU6IG5vZGUubmFtZSwgbm9kZUluZGV4OiBub2Rl
Lm5vZGVJbmRleCwgcmV0YWluZWRTaXplOiBub2RlLnJldGFpbmVkU2l6ZSwgc2VsZlNpemU6IG5v
ZGUuc2VsZlNpemUsIHR5cGU6IG5vZGUudHlwZSwgZmxhZ3M6IG5vZGUuZmxhZ3N9OwogICAgIH0s
CiAKICAgICBzb3J0OiBmdW5jdGlvbihjb21wYXJhdG9yLCBsZWZ0Qm91bmQsIHJpZ2h0Qm91bmQs
IGNvdW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9I
ZWFwU25hcHNob3RQcm94eS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
SGVhcFNuYXBzaG90UHJveHkuanMKaW5kZXggNDRhMDU0NC4uN2Y1N2QzNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RQcm94eS5qcwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdFByb3h5
LmpzCkBAIC0zNzAsNiArMzcwLDExIEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm94eS5w
cm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuY2FsbE1ldGhvZChjYWxsYmFjaywgIm5vZGVGaWVs
ZFZhbHVlc0J5SW5kZXgiLCBmaWVsZE5hbWUsIGluZGV4ZXMpOwogICAgIH0sCiAKKyAgICBnZXQg
bm9kZUZsYWdzKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9zdGF0aWNEYXRhLm5vZGVG
bGFnczsKKyAgICB9LAorCiAgICAgcHVzaEJhc2VJZHM6IGZ1bmN0aW9uKHNuYXBzaG90SWQsIGNs
YXNzTmFtZSwgbm9kZUlkcykKICAgICB7CiAgICAgICAgIHRoaXMuY2FsbE1ldGhvZChudWxsLCAi
cHVzaEJhc2VJZHMiLCBzbmFwc2hvdElkLCBjbGFzc05hbWUsIG5vZGVJZHMpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9PYmplY3RQcm9wZXJ0aWVzU2Vj
dGlvbi5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvT2JqZWN0UHJvcGVy
dGllc1NlY3Rpb24uanMKaW5kZXggOTYyNmM3Ni4uZTg2MjVlYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9PYmplY3RQcm9wZXJ0aWVzU2VjdGlvbi5qcwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL09iamVjdFByb3BlcnRpZXNT
ZWN0aW9uLmpzCkBAIC00Miw2ICs0MiwxMCBAQCBXZWJJbnNwZWN0b3IuT2JqZWN0UHJvcGVydGll
c1NlY3Rpb24ucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLnVwZGF0ZSgpOwogICAgIH0sCiAK
KyAgICBvblByb3BlcnRpZXNSZWNlaXZlZDogZnVuY3Rpb24ocHJvcGVydGllcykKKyAgICB7Cisg
ICAgfSwKKwogICAgIHVwZGF0ZTogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgdmFyIHNlbGYg
PSB0aGlzOwpAQCAtNDksNiArNTMsNyBAQCBXZWJJbnNwZWN0b3IuT2JqZWN0UHJvcGVydGllc1Nl
Y3Rpb24ucHJvdG90eXBlID0gewogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIXByb3BlcnRp
ZXMpCiAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgc2VsZi5vblByb3BlcnRp
ZXNSZWNlaXZlZChwcm9wZXJ0aWVzKTsKICAgICAgICAgICAgIHNlbGYudXBkYXRlUHJvcGVydGll
cyhwcm9wZXJ0aWVzKTsKICAgICAgICAgfQogICAgICAgICBpZiAodGhpcy5pZ25vcmVIYXNPd25Q
cm9wZXJ0eSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
UG9wb3Zlci5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUG9wb3Zlci5q
cwppbmRleCAxMjFjYmU4Li44ODE5ODlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL1BvcG92ZXIuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9Qb3BvdmVyLmpzCkBAIC0yODgsMyArMjg4LDY4IEBAIFdlYkluc3BlY3Rvci5Q
b3BvdmVySGVscGVyLnByb3RvdHlwZSA9IHsKICAgICAgICAgfQogICAgIH0KIH0KKworV2ViSW5z
cGVjdG9yLk9iamVjdFBvcG92ZXJIZWxwZXIgPSBmdW5jdGlvbihwYW5lbEVsZW1lbnQsIGdldEFu
Y2hvciwgcXVlcnlPYmplY3QsIG9uSGlkZSwgZGlzYWJsZU9uQ2xpY2spCit7CisgICAgV2ViSW5z
cGVjdG9yLlBvcG92ZXJIZWxwZXIuY2FsbCh0aGlzLCBwYW5lbEVsZW1lbnQsIGdldEFuY2hvciwg
dGhpcy5fc2hvd09iamVjdFBvcG92ZXIuYmluZCh0aGlzKSwgb25IaWRlLCBkaXNhYmxlT25DbGlj
ayk7CisgICAgdGhpcy5fcXVlcnlPYmplY3QgPSBxdWVyeU9iamVjdDsKKyAgICBwYW5lbEVsZW1l
bnQuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIiwgdGhpcy5oaWRlUG9wb3Zlci5iaW5kKHRoaXMp
LCB0cnVlKTsKK307CisKK1dlYkluc3BlY3Rvci5PYmplY3RQb3BvdmVySGVscGVyLnByb3RvdHlw
ZSA9IHsKKyAgICBfc2hvd09iamVjdFBvcG92ZXI6IGZ1bmN0aW9uKGVsZW1lbnQsIHBvcG92ZXIp
CisgICAgeworICAgICAgICBmdW5jdGlvbiBzaG93T2JqZWN0UG9wb3ZlcihyZXN1bHQsIHdhc1Ro
cm93bikKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHBvcG92ZXIuZGlzcG9zZWQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKHdhc1Rocm93bikgeworICAgICAg
ICAgICAgICAgIHRoaXMuaGlkZVBvcG92ZXIoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgcG9wb3ZlckNvbnRlbnRFbGVtZW50ID0gbnVs
bDsKKyAgICAgICAgICAgIGlmIChyZXN1bHQudHlwZSAhPT0gIm9iamVjdCIpIHsKKyAgICAgICAg
ICAgICAgICBwb3BvdmVyQ29udGVudEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJz
cGFuIik7CisgICAgICAgICAgICAgICAgcG9wb3ZlckNvbnRlbnRFbGVtZW50LmNsYXNzTmFtZSA9
ICJtb25vc3BhY2UgY29uc29sZS1mb3JtYXR0ZWQtIiArIHJlc3VsdC50eXBlOworICAgICAgICAg
ICAgICAgIHBvcG92ZXJDb250ZW50RWxlbWVudC5zdHlsZS53aGl0ZVNwYWNlID0gInByZSI7Cisg
ICAgICAgICAgICAgICAgcG9wb3ZlckNvbnRlbnRFbGVtZW50LnRleHRDb250ZW50ID0gcmVzdWx0
LmRlc2NyaXB0aW9uOworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQudHlwZSA9PT0gInN0cmlu
ZyIpCisgICAgICAgICAgICAgICAgICAgIHBvcG92ZXJDb250ZW50RWxlbWVudC50ZXh0Q29udGVu
dCA9ICJcIiIgKyBwb3BvdmVyQ29udGVudEVsZW1lbnQudGV4dENvbnRlbnQgKyAiXCIiOworICAg
ICAgICAgICAgICAgIHBvcG92ZXIuc2hvdyhwb3BvdmVyQ29udGVudEVsZW1lbnQsIGVsZW1lbnQp
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwb3BvdmVyQ29udGVudEVs
ZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKworICAgICAgICAgICAgICAg
IHZhciB0aXRsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAg
ICAgICAgICAgICB0aXRsZUVsZW1lbnQuY2xhc3NOYW1lID0gInNvdXJjZS1mcmFtZS1wb3BvdmVy
LXRpdGxlIG1vbm9zcGFjZSI7CisgICAgICAgICAgICAgICAgdGl0bGVFbGVtZW50LnRleHRDb250
ZW50ID0gcmVzdWx0LmRlc2NyaXB0aW9uOworICAgICAgICAgICAgICAgIHBvcG92ZXJDb250ZW50
RWxlbWVudC5hcHBlbmRDaGlsZCh0aXRsZUVsZW1lbnQpOworCisgICAgICAgICAgICAgICAgdmFy
IHNlY3Rpb24gPSBuZXcgV2ViSW5zcGVjdG9yLk9iamVjdFByb3BlcnRpZXNTZWN0aW9uKHJlc3Vs
dCk7CisgICAgICAgICAgICAgICAgLy8gRm9yIEhUTUwgRE9NIHdyYXBwZXJzLCBhcHBlbmQgIiNp
ZCIgdG8gdGl0bGUsIGlmIG5vdCBlbXB0eS4KKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmRl
c2NyaXB0aW9uLnN1YnN0cigwLCA0KSA9PT0gIkhUTUwiKSB7CisgICAgICAgICAgICAgICAgICAg
IHNlY3Rpb24ub25Qcm9wZXJ0aWVzUmVjZWl2ZWQgPSBmdW5jdGlvbihwcm9wZXJ0aWVzKQorICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAocHJvcGVydGllc1tpXS5uYW1lID09PSAiaWQiKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzW2ldLnZhbHVlLmRlc2NyaXB0aW9uKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGVFbGVtZW50LnRleHRDb250ZW50
ICs9ICIjIiArIHByb3BlcnRpZXNbaV0udmFsdWUuZGVzY3JpcHRpb247CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2VjdGlvbi5leHBhbmRlZCA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgc2VjdGlvbi5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoInNvdXJjZS1mcmFt
ZS1wb3BvdmVyLXRyZWUiKTsKKyAgICAgICAgICAgICAgICBzZWN0aW9uLmhlYWRlckVsZW1lbnQu
YWRkU3R5bGVDbGFzcygiaGlkZGVuIik7CisgICAgICAgICAgICAgICAgcG9wb3ZlckNvbnRlbnRF
bGVtZW50LmFwcGVuZENoaWxkKHNlY3Rpb24uZWxlbWVudCk7CisKKyAgICAgICAgICAgICAgICBj
b25zdCBwb3BvdmVyV2lkdGggPSAzMDA7CisgICAgICAgICAgICAgICAgY29uc3QgcG9wb3Zlckhl
aWdodCA9IDI1MDsKKyAgICAgICAgICAgICAgICBwb3BvdmVyLnNob3cocG9wb3ZlckNvbnRlbnRF
bGVtZW50LCBlbGVtZW50LCBwb3BvdmVyV2lkdGgsIHBvcG92ZXJIZWlnaHQpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMuX3F1ZXJ5T2JqZWN0KGVsZW1lbnQsIHNob3dP
YmplY3RQb3BvdmVyLmJpbmQodGhpcykpOworICAgIH0KK30KKworV2ViSW5zcGVjdG9yLk9iamVj
dFBvcG92ZXJIZWxwZXIucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5Qb3BvdmVy
SGVscGVyLnByb3RvdHlwZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvU291cmNlRnJhbWUuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1NvdXJjZUZyYW1lLmpzCmluZGV4IDA3YjE5MTEuLjk4MDFlYTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanMKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qcwpAQCAtMjg5LDEw
ICsyODksOSBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogCiAgICAg
ICAgIHZhciBlbGVtZW50ID0gdGhpcy5fdGV4dFZpZXdlci5lbGVtZW50OwogICAgICAgICBpZiAo
dGhpcy5fZGVsZWdhdGUuZGVidWdnaW5nU3VwcG9ydGVkKCkpIHsKLSAgICAgICAgICAgIHRoaXMu
X3BvcG92ZXJIZWxwZXIgPSBuZXcgV2ViSW5zcGVjdG9yLlBvcG92ZXJIZWxwZXIoZWxlbWVudCwK
KyAgICAgICAgICAgIHRoaXMuX3BvcG92ZXJIZWxwZXIgPSBuZXcgV2ViSW5zcGVjdG9yLk9iamVj
dFBvcG92ZXJIZWxwZXIoZWxlbWVudCwKICAgICAgICAgICAgICAgICB0aGlzLl9nZXRQb3BvdmVy
QW5jaG9yLmJpbmQodGhpcyksIHRoaXMuX29uU2hvd1BvcG92ZXIuYmluZCh0aGlzKSwgdGhpcy5f
b25IaWRlUG9wb3Zlci5iaW5kKHRoaXMpLCB0cnVlKTsKICAgICAgICAgICAgIGVsZW1lbnQuYWRk
RXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgdGhpcy5fbW91c2VEb3duLmJpbmQodGhpcyksIHRy
dWUpOwotICAgICAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLCB0aGlz
Ll9zY3JvbGwuYmluZCh0aGlzKSwgdHJ1ZSk7CiAgICAgICAgIH0KIAogICAgICAgICB0aGlzLl90
ZXh0Vmlld2VyLmJlZ2luVXBkYXRlcygpOwpAQCAtNjQyLDE2ICs2NDEsOCBAQCBXZWJJbnNwZWN0
b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gdGhpcy5fZGVsZWdh
dGUuc3VnZ2VzdGVkRmlsZU5hbWUoKTsKICAgICB9LAogCi0gICAgX3Njcm9sbDogZnVuY3Rpb24o
ZXZlbnQpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fcG9wb3ZlckhlbHBlcikKLSAgICAgICAg
ICAgIHRoaXMuX3BvcG92ZXJIZWxwZXIuaGlkZVBvcG92ZXIoKTsKLSAgICB9LAotCiAgICAgX21v
dXNlRG93bjogZnVuY3Rpb24oZXZlbnQpCiAgICAgewotICAgICAgICBpZiAodGhpcy5fcG9wb3Zl
ckhlbHBlcikKLSAgICAgICAgICAgIHRoaXMuX3BvcG92ZXJIZWxwZXIuaGlkZVBvcG92ZXIoKTsK
ICAgICAgICAgaWYgKGV2ZW50LmJ1dHRvbiAhPSAwIHx8IGV2ZW50LmFsdEtleSB8fCBldmVudC5j
dHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIHZh
ciB0YXJnZXQgPSBldmVudC50YXJnZXQuZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhDbGFzcygid2Vi
a2l0LWxpbmUtbnVtYmVyIik7CkBAIC03MzAsNyArNzIxLDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJj
ZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIGNvbnRhaW5lcjsKICAgICB9LAog
Ci0gICAgX29uU2hvd1BvcG92ZXI6IGZ1bmN0aW9uKGVsZW1lbnQsIHBvcG92ZXIpCisgICAgX29u
U2hvd1BvcG92ZXI6IGZ1bmN0aW9uKGVsZW1lbnQsIHNob3dDYWxsYmFjaykKICAgICB7CiAgICAg
ICAgIGlmICghdGhpcy5fdGV4dFZpZXdlci5yZWFkT25seSkgewogICAgICAgICAgICAgdGhpcy5f
cG9wb3ZlckhlbHBlci5oaWRlUG9wb3ZlcigpOwpAQCAtNzQwLDM5ICs3MzEsMTEgQEAgV2ViSW5z
cGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKIAogICAgICAgICBmdW5jdGlvbiBzaG93
T2JqZWN0UG9wb3ZlcihyZXN1bHQsIHdhc1Rocm93bikKICAgICAgICAgewotICAgICAgICAgICAg
aWYgKHBvcG92ZXIuZGlzcG9zZWQpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgaWYgKHdhc1Rocm93biB8fCAhdGhpcy5fZGVsZWdhdGUuZGVidWdnZXJQYXVzZWQoKSkgewor
ICAgICAgICAgICAgaWYgKCF0aGlzLl9kZWxlZ2F0ZS5kZWJ1Z2dlclBhdXNlZCgpKSB7CiAgICAg
ICAgICAgICAgICAgdGhpcy5fcG9wb3ZlckhlbHBlci5oaWRlUG9wb3ZlcigpOwogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZhciBwb3BvdmVyQ29u
dGVudEVsZW1lbnQgPSBudWxsOwotICAgICAgICAgICAgaWYgKHJlc3VsdC50eXBlICE9PSAib2Jq
ZWN0IikgewotICAgICAgICAgICAgICAgIHBvcG92ZXJDb250ZW50RWxlbWVudCA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKLSAgICAgICAgICAgICAgICBwb3BvdmVyQ29udGVudEVs
ZW1lbnQuY2xhc3NOYW1lID0gIm1vbm9zcGFjZSBjb25zb2xlLWZvcm1hdHRlZC0iICsgcmVzdWx0
LnR5cGU7Ci0gICAgICAgICAgICAgICAgcG9wb3ZlckNvbnRlbnRFbGVtZW50LnN0eWxlLndoaXRl
U3BhY2UgPSAicHJlIjsKLSAgICAgICAgICAgICAgICBwb3BvdmVyQ29udGVudEVsZW1lbnQudGV4
dENvbnRlbnQgPSByZXN1bHQuZGVzY3JpcHRpb247Ci0gICAgICAgICAgICAgICAgaWYgKHJlc3Vs
dC50eXBlID09PSAic3RyaW5nIikKLSAgICAgICAgICAgICAgICAgICAgcG9wb3ZlckNvbnRlbnRF
bGVtZW50LnRleHRDb250ZW50ID0gIlwiIiArIHBvcG92ZXJDb250ZW50RWxlbWVudC50ZXh0Q29u
dGVudCArICJcIiI7Ci0gICAgICAgICAgICAgICAgcG9wb3Zlci5zaG93KHBvcG92ZXJDb250ZW50
RWxlbWVudCwgZWxlbWVudCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IHZhciBwb3BvdmVyQ29udGVudEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYi
KTsKLQotICAgICAgICAgICAgICAgIHZhciB0aXRsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCJkaXYiKTsKLSAgICAgICAgICAgICAgICB0aXRsZUVsZW1lbnQuY2xhc3NOYW1lID0g
InNvdXJjZS1mcmFtZS1wb3BvdmVyLXRpdGxlIG1vbm9zcGFjZSI7Ci0gICAgICAgICAgICAgICAg
dGl0bGVFbGVtZW50LnRleHRDb250ZW50ID0gcmVzdWx0LmRlc2NyaXB0aW9uOwotICAgICAgICAg
ICAgICAgIHBvcG92ZXJDb250ZW50RWxlbWVudC5hcHBlbmRDaGlsZCh0aXRsZUVsZW1lbnQpOwot
Ci0gICAgICAgICAgICAgICAgdmFyIHNlY3Rpb24gPSBuZXcgV2ViSW5zcGVjdG9yLk9iamVjdFBy
b3BlcnRpZXNTZWN0aW9uKHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgc2VjdGlvbi5leHBhbmRl
ZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgc2VjdGlvbi5lbGVtZW50LmFkZFN0eWxlQ2xhc3Mo
InNvdXJjZS1mcmFtZS1wb3BvdmVyLXRyZWUiKTsKLSAgICAgICAgICAgICAgICBzZWN0aW9uLmhl
YWRlckVsZW1lbnQuYWRkU3R5bGVDbGFzcygiaGlkZGVuIik7Ci0gICAgICAgICAgICAgICAgcG9w
b3ZlckNvbnRlbnRFbGVtZW50LmFwcGVuZENoaWxkKHNlY3Rpb24uZWxlbWVudCk7Ci0KLSAgICAg
ICAgICAgICAgICBjb25zdCBwb3BvdmVyV2lkdGggPSAzMDA7Ci0gICAgICAgICAgICAgICAgY29u
c3QgcG9wb3ZlckhlaWdodCA9IDI1MDsKLSAgICAgICAgICAgICAgICBwb3BvdmVyLnNob3cocG9w
b3ZlckNvbnRlbnRFbGVtZW50LCBlbGVtZW50LCBwb3BvdmVyV2lkdGgsIHBvcG92ZXJIZWlnaHQp
OwotICAgICAgICAgICAgfQorICAgICAgICAgICAgc2hvd0NhbGxiYWNrKHJlc3VsdCwgd2FzVGhy
b3duKTsKICAgICAgICAgICAgIHRoaXMuX2hpZ2hsaWdodEVsZW1lbnQuYWRkU3R5bGVDbGFzcygi
c291cmNlLWZyYW1lLWV2YWwtZXhwcmVzc2lvbiIpOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaGVhcFByb2ZpbGVyLmNzcyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaGVhcFByb2ZpbGVyLmNzcwppbmRleCA2
MmJkMGEwLi4wYjM5NmY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJv
bnQtZW5kL2hlYXBQcm9maWxlci5jc3MKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9oZWFwUHJvZmlsZXIuY3NzCkBAIC0xOTQsNiArMTk0LDEwIEBAIGJvZHkuaW5hY3Rp
dmUgLmhlYXAtc25hcHNob3Qtc2lkZWJhci10cmVlLWl0ZW0ud2FpdC5zZWxlY3RlZCAuaWNvbiB7
CiAgICAgbWFyZ2luLXJpZ2h0OiA4cHg7CiB9CiAKKy5kZXRhaWxlZC1oZWFwc2hvdC12aWV3IHRy
Om5vdCguc2VsZWN0ZWQpIHRkLm9iamVjdC1jb2x1bW4gc3Bhbi5oaWdobGlnaHQgeworICAgIGJh
Y2tncm91bmQtY29sb3I6IHJnYigyNTUsIDI1NSwgMjAwKTsKK30KKwogLmhlYXBzaG90LWhlbHAt
c3RhdHVzLWJhci1pdGVtIC5nbHlwaCB7CiAgICAgLXdlYmtpdC1tYXNrLXBvc2l0aW9uOiAtMTYw
cHggMDsKIH0K
</data>
<flag name="commit-queue"
          id="106326"
          type_id="3"
          status="-"
          setter="mnaganov"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109162</attachid>
            <date>2011-09-29 07:29:31 -0700</date>
            <delta_ts>2011-09-29 07:39:38 -0700</delta_ts>
            <desc>Add JSC stubs</desc>
            <filename>patch-61179</filename>
            <type>text/plain</type>
            <size>34149</size>
            <attacher name="Mikhail Naganov">mnaganov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBiNzY3ZmRjLi5lZjFiYjkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjYg
QEAKKzIwMTEtMDktMjkgIE1pa2hhaWwgTmFnYW5vdiAgPG1uYWdhbm92QGNocm9taXVtLm9yZz4K
KworICAgICAgICBXZWIgSW5zcGVjdG9yOiBbQ2hyb21pdW1dIEFkZCBhbiBhYmlsaXR5IHRvIGxv
b2sgdXAgYW5kIGV4cGxvcmUgYW4gb2JqZWN0IGZyb20gYSBoZWFwIHByb2ZpbGUuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MTE3OQorCisgICAgICAg
IFRoaXMgaXMgZXh0ZXJlbWVseSBoZWxwZnVsIHdoZW4gZGVhbGluZyB3aXRoIERPTSB3cmFwcGVy
cywgYXMKKyAgICAgICAgdGhlaXIgcHJvcGVydGllcyBhcmUgbW9zdGx5IGltcGxlbWVudGVkIHdp
dGggZ2V0dGVycyBhbmQgdGh1cyBub3QKKyAgICAgICAgc3RvcmVkIGluIGhlYXAgc25hcHNob3Rz
LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogRW5n
bGlzaC5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1Nj
cmlwdFByb2ZpbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFByb2ZpbGVyOjpnZXRP
YmplY3RCeUhlYXBPYmplY3RJZCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0UHJvZmls
ZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRQcm9maWxlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHRQcm9maWxlcjo6Z2V0T2JqZWN0QnlIZWFwT2JqZWN0SWQpOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmg6CisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3Rvci5qc29uOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNv
bnRyb2xsZXIpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQcm9maWxlckFnZW50OjpJbnNwZWN0b3JQcm9maWxl
ckFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmdldE9i
amVjdEJ5SGVhcE9iamVjdElkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmls
ZXJBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRGV0YWlsZWRIZWFwc2hv
dEdyaWROb2Rlcy5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RHcmlkTm9k
ZS5wcm90b3R5cGUuaGFzSG92ZXJNZXNzYWdlLmZhbHNlLnF1ZXJ5T2JqZWN0Q29udGVudCk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90R2VuZXJpY09iamVjdE5vZGUpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEdlbmVyaWNPYmplY3ROb2RlLnByb3RvdHlw
ZS5nZXQgZGF0YSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90R2VuZXJpY09i
amVjdE5vZGUucHJvdG90eXBlLnF1ZXJ5T2JqZWN0Q29udGVudC5lbHNlLmZvcm1hdFJlc3VsdCk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90R2VuZXJpY09iamVjdE5vZGUucHJv
dG90eXBlLnF1ZXJ5T2JqZWN0Q29udGVudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90R2VuZXJpY09iamVjdE5vZGUucHJvdG90eXBlLnNob3J0ZW5XaW5kb3dVUkwpOgorICAg
ICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRGV0YWlsZWRIZWFwc2hvdFZpZXcuanM6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuRGV0YWlsZWRIZWFwc2hvdFZpZXcucHJvdG90eXBlLl9zaG93T2Jq
ZWN0UG9wb3Zlcik6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3Qu
anM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZS5wcm90b3R5cGUuZ2V0
IGNhbkJlUXVlcmllZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZS5w
cm90b3R5cGUuZ2V0IGZsYWdzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RO
b2RlLnByb3RvdHlwZS5nZXQgaXNET01XaW5kb3cpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdC5wcm90b3R5cGUuX2luaXQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdC5wcm90b3R5cGUuZGlzcG9zZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90LnByb3RvdHlwZS5fZmxhZ3NPZk5vZGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdC5wcm90b3R5cGUuX2NhbGN1bGF0ZUZsYWdzKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3QucHJvdG90eXBlLnVwZGF0ZVN0YXRpY0RhdGEpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGVzUHJvdmlkZXIucHJvdG90eXBlLl9zZXJpYWxp
emUpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90UHJveHkuanM6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJveHkucHJvdG90eXBlLmdldCBu
b2RlRmxhZ3MpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvT2JqZWN0UHJvcGVydGll
c1NlY3Rpb24uanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuT2JqZWN0UHJvcGVydGllc1NlY3Rp
b24ucHJvdG90eXBlLm9uUHJvcGVydGllc1JlY2VpdmVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5PYmplY3RQcm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGUudXBkYXRlLmNhbGxiYWNrKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5PYmplY3RQcm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGUudXBk
YXRlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1BvcG92ZXIuanM6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuT2JqZWN0UG9wb3ZlckhlbHBlcik6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuT2JqZWN0UG9wb3ZlckhlbHBlci5wcm90b3R5cGUuX3Nob3dPYmplY3RQb3BvdmVyLnNob3dP
YmplY3RQb3BvdmVyLmVsc2Uuc2VjdGlvbi5vblByb3BlcnRpZXNSZWNlaXZlZCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuT2JqZWN0UG9wb3ZlckhlbHBlci5wcm90b3R5cGUuX3Nob3dPYmplY3RQ
b3BvdmVyKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpzOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5faW5pdGlhbGl6ZVRl
eHRWaWV3ZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5f
bW91c2VEb3duKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUu
X29uU2hvd1BvcG92ZXIuc2hvd09iamVjdFBvcG92ZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlNvdXJjZUZyYW1lLnByb3RvdHlwZS5fb25TaG93UG9wb3Zlcik6CisgICAgICAgICogaW5zcGVj
dG9yL2Zyb250LWVuZC9oZWFwUHJvZmlsZXIuY3NzOgorICAgICAgICAoLmRldGFpbGVkLWhlYXBz
aG90LXZpZXcgdHI6bm90KC5zZWxlY3RlZCkgdGQub2JqZWN0LWNvbHVtbiBzcGFuLmhpZ2hsaWdo
dCk6CisKIDIwMTEtMDktMjkgIFZzZXZvbG9kIFZsYXNvdiAgPHZzZXZpa0BjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogTWFrZSBzZWFyY2gtaW4tcmVzb3VyY2UgdGVzdCBz
aW1wbGVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvRW5nbGlzaC5scHJvai9sb2NhbGl6
ZWRTdHJpbmdzLmpzIGIvU291cmNlL1dlYkNvcmUvRW5nbGlzaC5scHJvai9sb2NhbGl6ZWRTdHJp
bmdzLmpzCmluZGV4IGEzY2VmYTE4MzgyMjU1NDk4YzllOTdkM2QxYzc1ODJmODY5ZGMzYjkuLjIw
MDQxZDUwMDdjYTIyZjc5YTgwMjcxYmRkZDE4YjNlNThmYWIxMmUgMTAwNjQ0CkdJVCBiaW5hcnkg
cGF0Y2gKZGVsdGEgODMKemNtWnFxIX5FX0teOUdpR2xUU0BqYkBnTSZYRERHJVVgUypyMUw5MUU5
M1l0bEJ2VG9iNy1FNnF3bV9gSmZLUWIqCkcwfll8e0NsY2lWCgpkZWx0YSA5ClFjbWFGJmhxPmhz
XjlHaUcwMl9oQEJMRHlaCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0UHJvZmlsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0UHJv
ZmlsZXIuY3BwCmluZGV4IDM0NjhhZTMuLjMxZTYyNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdFByb2ZpbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY3JpcHRQcm9maWxlci5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRl
ICJTY3JpcHRQcm9maWxlci5oIgogCiAjaW5jbHVkZSAiR0NDb250cm9sbGVyLmgiCisjaW5jbHVk
ZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVk
ZSA8cHJvZmlsZXIvUHJvZmlsZXIuaD4KIApAQCAtNDEsNiArNDIsMTEgQEAgdm9pZCBTY3JpcHRQ
cm9maWxlcjo6Y29sbGVjdEdhcmJhZ2UoKQogICAgIGdjQ29udHJvbGxlcigpLmdhcmJhZ2VDb2xs
ZWN0Tm93KCk7CiB9CiAKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IFNjcmlwdFByb2ZpbGVy
OjpnZXRPYmplY3RCeUhlYXBPYmplY3RJZCh1bnNpZ25lZCwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
KikKK3sKKyAgICByZXR1cm4gSW5zcGVjdG9yVmFsdWU6Om51bGwoKTsKK30KKwogdm9pZCBTY3Jp
cHRQcm9maWxlcjo6c3RhcnQoU2NyaXB0U3RhdGUqIHN0YXRlLCBjb25zdCBTdHJpbmcmIHRpdGxl
KQogewogICAgIEpTQzo6UHJvZmlsZXI6OnByb2ZpbGVyKCktPnN0YXJ0UHJvZmlsaW5nKHN0YXRl
LCBzdHJpbmdUb1VTdHJpbmcodGl0bGUpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdFByb2ZpbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
Y3JpcHRQcm9maWxlci5oCmluZGV4IDA1ZDVlOTIuLmMyMzdmNGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFByb2ZpbGVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0UHJvZmlsZXIuaApAQCAtMzUsNiArMzUsOCBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEluc3BlY3RvclZhbHVlOworCiBjbGFzcyBTY3JpcHRQ
cm9maWxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2NyaXB0UHJvZmlsZXIpOwogcHVi
bGljOgpAQCAtNDgsNiArNTAsNyBAQCBwdWJsaWM6CiAgICAgfTsKIAogICAgIHN0YXRpYyB2b2lk
IGNvbGxlY3RHYXJiYWdlKCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
IGdldE9iamVjdEJ5SGVhcE9iamVjdElkKHVuc2lnbmVkIGlkLCBJbmplY3RlZFNjcmlwdE1hbmFn
ZXIqKTsKICAgICBzdGF0aWMgdm9pZCBzdGFydChTY3JpcHRTdGF0ZSogc3RhdGUsIGNvbnN0IFN0
cmluZyYgdGl0bGUpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNjcmlwdFByb2ZpbGU+IHN0b3Ao
U2NyaXB0U3RhdGUqIHN0YXRlLCBjb25zdCBTdHJpbmcmIHRpdGxlKTsKICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxTY3JpcHRIZWFwU25hcHNob3Q+IHRha2VIZWFwU25hcHNob3QoY29uc3QgU3RyaW5n
JiwgSGVhcFNuYXBzaG90UHJvZ3Jlc3MqKSB7IHJldHVybiAwOyB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRQcm9maWxlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9TY3JpcHRQcm9maWxlci5jcHAKaW5kZXggZmI0ZTk3NS4uZGMwZmIyNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0UHJvZmlsZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmNwcApAQCAt
MzEsNiArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNjcmlwdFByb2Zp
bGVyLmgiCiAKKyNpbmNsdWRlICJJbmplY3RlZFNjcmlwdC5oIgogI2luY2x1ZGUgIkluc3BlY3Rv
clZhbHVlcy5oIgogI2luY2x1ZGUgIlJldGFpbmVkRE9NSW5mby5oIgogI2luY2x1ZGUgIlY4Qmlu
ZGluZy5oIgpAQCAtNjUsNiArNjYsMzUgQEAgdm9pZCBTY3JpcHRQcm9maWxlcjo6Y29sbGVjdEdh
cmJhZ2UoKQogICAgIHdoaWxlICghdjg6OlY4OjpJZGxlTm90aWZpY2F0aW9uKCkpIHsgfQogfQog
CitQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBTY3JpcHRQcm9maWxlcjo6Z2V0T2JqZWN0QnlI
ZWFwT2JqZWN0SWQodW5zaWduZWQgaWQsIEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyKQoreworICAgIC8vIEFzIGlkcyBhcmUgdW5pcXVlLCBpdCBkb2Vzbid0IG1h
dHRlciwgSGVhcEdyYXBoTm9kZSBmcm9tIHdoaWNoIEhlYXBTbmFwc2hvdAorICAgIC8vIHdpbGwg
YmUgdXNlZC4gV2UgbmVlZCB0byBmaW5kIGZpcnN0IEhlYXBTbmFwc2hvdCBjb250YWluaW5nIGEg
bm9kZSB3aXRoIHRoZQorICAgIC8vIHNwZWNpZmllZCBpZC4KKyAgICBjb25zdCB2ODo6SGVhcEdy
YXBoTm9kZSogbm9kZSA9IDA7CisgICAgZm9yIChpbnQgaSA9IDAsIGwgPSB2ODo6SGVhcFByb2Zp
bGVyOjpHZXRTbmFwc2hvdHNDb3VudCgpOyBpIDwgbDsgKytpKSB7CisgICAgICAgIGNvbnN0IHY4
OjpIZWFwU25hcHNob3QqIHNuYXBzaG90ID0gdjg6OkhlYXBQcm9maWxlcjo6R2V0U25hcHNob3Qo
aSk7CisgICAgICAgIG5vZGUgPSBzbmFwc2hvdC0+R2V0Tm9kZUJ5SWQoaWQpOworICAgICAgICBp
ZiAobm9kZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAoIW5vZGUpCisgICAg
ICAgIHJldHVybiBJbnNwZWN0b3JWYWx1ZTo6bnVsbCgpOworICAgIHY4OjpIYW5kbGVTY29wZSBz
Y29wZTsKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUgPSBub2RlLT5HZXRIZWFwVmFs
dWUoKTsKKyAgICBpZiAoIXZhbHVlLT5Jc09iamVjdCgpKQorICAgICAgICByZXR1cm4gSW5zcGVj
dG9yVmFsdWU6Om51bGwoKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCh2YWx1
ZS5Bczx2ODo6T2JqZWN0PigpKTsKKyAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGNyZWF0aW9u
Q29udGV4dCA9IG9iamVjdC0+Q3JlYXRpb25Db250ZXh0KCk7CisgICAgdjg6OkNvbnRleHQ6OlNj
b3BlIGNyZWF0aW9uU2NvcGUoY3JlYXRpb25Db250ZXh0KTsKKyAgICBTY3JpcHRTdGF0ZSogc2Ny
aXB0U3RhdGUgPSBTY3JpcHRTdGF0ZTo6Zm9yQ29udGV4dChjcmVhdGlvbkNvbnRleHQpOworICAg
IEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLT5p
bmplY3RlZFNjcmlwdEZvcihzY3JpcHRTdGF0ZSk7CisgICAgaWYgKCFpbmplY3RlZFNjcmlwdC5o
YXNOb1ZhbHVlKCkpCisgICAgICAgIHJldHVybiBpbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KHZh
bHVlLCAiIik7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gSW5zcGVjdG9yVmFsdWU6Om51bGwo
KTsKK30KKwogbmFtZXNwYWNlIHsKIAogY2xhc3MgQWN0aXZpdHlDb250cm9sQWRhcHRlciA6IHB1
YmxpYyB2ODo6QWN0aXZpdHlDb250cm9sIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9T
Y3JpcHRQcm9maWxlci5oCmluZGV4IDkyYTk4MGIuLmM0OTVlMzYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvU2NyaXB0UHJvZmlsZXIuaApAQCAtMzksNyArMzksOCBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEluc3BlY3Rvck9iamVjdDsKK2NsYXNzIEluamVjdGVk
U2NyaXB0TWFuYWdlcjsKK2NsYXNzIEluc3BlY3RvclZhbHVlOwogCiBjbGFzcyBTY3JpcHRQcm9m
aWxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2NyaXB0UHJvZmlsZXIpOwpAQCAtNTQs
NiArNTUsNyBAQCBwdWJsaWM6CiAgICAgfTsKIAogICAgIHN0YXRpYyB2b2lkIGNvbGxlY3RHYXJi
YWdlKCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGdldE9iamVjdEJ5
SGVhcE9iamVjdElkKHVuc2lnbmVkIGlkLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqKTsKICAgICBz
dGF0aWMgdm9pZCBzdGFydChTY3JpcHRTdGF0ZSogc3RhdGUsIGNvbnN0IFN0cmluZyYgdGl0bGUp
OwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNjcmlwdFByb2ZpbGU+IHN0b3AoU2NyaXB0U3RhdGUq
IHN0YXRlLCBjb25zdCBTdHJpbmcmIHRpdGxlKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTY3Jp
cHRIZWFwU25hcHNob3Q+IHRha2VIZWFwU25hcHNob3QoY29uc3QgU3RyaW5nJiB0aXRsZSwgSGVh
cFNuYXBzaG90UHJvZ3Jlc3MqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3IuanNvbiBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuanNv
bgppbmRleCAwOWQyZGI2Li5hMDVkYjAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yLmpzb24KKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3Rvci5qc29uCkBAIC0xOTQwLDYgKzE5NDAsMTUgQEAKICAgICAgICAgICAgIH0sCiAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgIm5hbWUiOiAiY29sbGVjdEdhcmJhZ2UiCisgICAgICAg
ICAgICB9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJuYW1lIjogImdldE9iamVj
dEJ5SGVhcE9iamVjdElkIiwKKyAgICAgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJvYmplY3RJZCIsICJ0eXBlIjogImludGVnZXIiIH0K
KyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgICJyZXR1cm5zIjogWworICAgICAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInJlc3VsdCIsICIkcmVmIjogIlJ1bnRpbWUuUmVtb3Rl
T2JqZWN0IiwgImRlc2NyaXB0aW9uIjogIkV2YWx1YXRpb24gcmVzdWx0LiIgfQorICAgICAgICAg
ICAgICAgIF0KICAgICAgICAgICAgIH0KICAgICAgICAgXSwKICAgICAgICAgImV2ZW50cyI6IFsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcApp
bmRleCA0NGFlMmEyLi5kMTNhZTNkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtMTE1LDcgKzExNSw3IEBAIEluc3BlY3RvckNv
bnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xsZXIoUGFnZSogcGFnZSwgSW5zcGVjdG9yQ2xpZW50
KiBpbnNwZWN0b3JDCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgLCBtX2Rl
YnVnZ2VyQWdlbnQoUGFnZURlYnVnZ2VyQWdlbnQ6OmNyZWF0ZShtX2luc3RydW1lbnRpbmdBZ2Vu
dHMuZ2V0KCksIG1fc3RhdGUuZ2V0KCksIHBhZ2UsIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmdl
dCgpKSkKICAgICAsIG1fZG9tRGVidWdnZXJBZ2VudChJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50
OjpjcmVhdGUobV9pbnN0cnVtZW50aW5nQWdlbnRzLmdldCgpLCBtX3N0YXRlLmdldCgpLCBtX2Rv
bUFnZW50LmdldCgpLCBtX2RlYnVnZ2VyQWdlbnQuZ2V0KCksIG1faW5zcGVjdG9yQWdlbnQuZ2V0
KCkpKQotICAgICwgbV9wcm9maWxlckFnZW50KEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmNyZWF0
ZShtX2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0KCksIG1fY29uc29sZUFnZW50LmdldCgpLCBwYWdl
LCBtX3N0YXRlLmdldCgpKSkKKyAgICAsIG1fcHJvZmlsZXJBZ2VudChJbnNwZWN0b3JQcm9maWxl
ckFnZW50OjpjcmVhdGUobV9pbnN0cnVtZW50aW5nQWdlbnRzLmdldCgpLCBtX2NvbnNvbGVBZ2Vu
dC5nZXQoKSwgcGFnZSwgbV9zdGF0ZS5nZXQoKSwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuZ2V0
KCkpKQogI2VuZGlmCiAjaWYgRU5BQkxFKFdPUktFUlMpCiAgICAgLCBtX3dvcmtlckFnZW50KElu
c3BlY3RvcldvcmtlckFnZW50OjpjcmVhdGUobV9pbnN0cnVtZW50aW5nQWdlbnRzLmdldCgpLCBt
X3N0YXRlLmdldCgpKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JQcm9maWxlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JQcm9maWxlckFnZW50LmNwcAppbmRleCBiYjUzZTczLi5lZjA0NDI0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwCkBAIC02
MiwxNiArNjIsMTcgQEAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IFVzZXJJbml0aWF0ZWRQcm9m
aWxlTmFtZSA9ICJvcmcud2Via2l0LnByb2ZpbGVzLnVzZXItaW4KIHN0YXRpYyBjb25zdCBjaGFy
KiBjb25zdCBDUFVQcm9maWxlVHlwZSA9ICJDUFUiOwogc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0
IEhlYXBQcm9maWxlVHlwZSA9ICJIRUFQIjsKIAotUGFzc093blB0cjxJbnNwZWN0b3JQcm9maWxl
ckFnZW50PiBJbnNwZWN0b3JQcm9maWxlckFnZW50OjpjcmVhdGUoSW5zdHJ1bWVudGluZ0FnZW50
cyogaW5zdHJ1bWVudGluZ0FnZW50cywgSW5zcGVjdG9yQ29uc29sZUFnZW50KiBjb25zb2xlQWdl
bnQsIFBhZ2UqIGluc3BlY3RlZFBhZ2UsIEluc3BlY3RvclN0YXRlKiBpbnNwZWN0b3JTdGF0ZSkK
K1Bhc3NPd25QdHI8SW5zcGVjdG9yUHJvZmlsZXJBZ2VudD4gSW5zcGVjdG9yUHJvZmlsZXJBZ2Vu
dDo6Y3JlYXRlKEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEluc3Bl
Y3RvckNvbnNvbGVBZ2VudCogY29uc29sZUFnZW50LCBQYWdlKiBpbnNwZWN0ZWRQYWdlLCBJbnNw
ZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUsIEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyKQogewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgSW5zcGVjdG9yUHJv
ZmlsZXJBZ2VudChpbnN0cnVtZW50aW5nQWdlbnRzLCBjb25zb2xlQWdlbnQsIGluc3BlY3RlZFBh
Z2UsIGluc3BlY3RvclN0YXRlKSk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBJbnNwZWN0b3JQ
cm9maWxlckFnZW50KGluc3RydW1lbnRpbmdBZ2VudHMsIGNvbnNvbGVBZ2VudCwgaW5zcGVjdGVk
UGFnZSwgaW5zcGVjdG9yU3RhdGUsIGluamVjdGVkU2NyaXB0TWFuYWdlcikpOwogfQogCi1JbnNw
ZWN0b3JQcm9maWxlckFnZW50OjpJbnNwZWN0b3JQcm9maWxlckFnZW50KEluc3RydW1lbnRpbmdB
Z2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEluc3BlY3RvckNvbnNvbGVBZ2VudCogY29uc29s
ZUFnZW50LCBQYWdlKiBpbnNwZWN0ZWRQYWdlLCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3Rh
dGUpCitJbnNwZWN0b3JQcm9maWxlckFnZW50OjpJbnNwZWN0b3JQcm9maWxlckFnZW50KEluc3Ry
dW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEluc3BlY3RvckNvbnNvbGVBZ2Vu
dCogY29uc29sZUFnZW50LCBQYWdlKiBpbnNwZWN0ZWRQYWdlLCBJbnNwZWN0b3JTdGF0ZSogaW5z
cGVjdG9yU3RhdGUsIEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
KQogICAgIDogbV9pbnN0cnVtZW50aW5nQWdlbnRzKGluc3RydW1lbnRpbmdBZ2VudHMpCiAgICAg
LCBtX2NvbnNvbGVBZ2VudChjb25zb2xlQWdlbnQpCiAgICAgLCBtX2luc3BlY3RlZFBhZ2UoaW5z
cGVjdGVkUGFnZSkKICAgICAsIG1faW5zcGVjdG9yU3RhdGUoaW5zcGVjdG9yU3RhdGUpCisgICAg
LCBtX2luamVjdGVkU2NyaXB0TWFuYWdlcihpbmplY3RlZFNjcmlwdE1hbmFnZXIpCiAgICAgLCBt
X2Zyb250ZW5kKDApCiAgICAgLCBtX2VuYWJsZWQoZmFsc2UpCiAgICAgLCBtX3JlY29yZGluZ1Vz
ZXJJbml0aWF0ZWRQcm9maWxlKGZhbHNlKQpAQCAtMzc4LDYgKzM3OSwxNCBAQCB2b2lkIEluc3Bl
Y3RvclByb2ZpbGVyQWdlbnQ6OnRvZ2dsZVJlY29yZEJ1dHRvbihib29sIGlzUHJvZmlsaW5nKQog
ICAgICAgICBtX2Zyb250ZW5kLT5zZXRSZWNvcmRpbmdQcm9maWxlKGlzUHJvZmlsaW5nKTsKIH0K
IAordm9pZCBJbnNwZWN0b3JQcm9maWxlckFnZW50OjpnZXRPYmplY3RCeUhlYXBPYmplY3RJZChF
cnJvclN0cmluZyosIGludCBpZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIHJlc3VsdCkKK3sK
KyAgICBpZiAobV9mcm9udGVuZCkgeworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGhl
YXBPYmplY3QgPSBTY3JpcHRQcm9maWxlcjo6Z2V0T2JqZWN0QnlIZWFwT2JqZWN0SWQoaWQsIG1f
aW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKTsKKyAgICAgICAgaGVhcE9iamVjdC0+YXNPYmplY3QocmVz
dWx0KTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVO
QUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKSAmJiBFTkFCTEUoSU5TUEVDVE9SKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmgKaW5kZXggNDA5
NDFlOC4uZWVkN2UyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclByb2ZpbGVyQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yUHJvZmlsZXJBZ2VudC5oCkBAIC00MSw2ICs0MSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorY2xhc3MgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwogY2xhc3MgSW5zcGVjdG9yQXJyYXk7
CiBjbGFzcyBJbnNwZWN0b3JDb25zb2xlQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZDsK
QEAgLTU2LDcgKzU3LDcgQEAgdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiBjbGFzcyBJbnNw
ZWN0b3JQcm9maWxlckFnZW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JQ
cm9maWxlckFnZW50KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFBhc3NPd25QdHI8SW5zcGVjdG9yUHJvZmlsZXJBZ2VudD4gY3JlYXRlKEluc3RydW1lbnRp
bmdBZ2VudHMqLCBJbnNwZWN0b3JDb25zb2xlQWdlbnQqLCBQYWdlKiwgSW5zcGVjdG9yU3RhdGUq
KTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxJbnNwZWN0b3JQcm9maWxlckFnZW50PiBjcmVhdGUo
SW5zdHJ1bWVudGluZ0FnZW50cyosIEluc3BlY3RvckNvbnNvbGVBZ2VudCosIFBhZ2UqLCBJbnNw
ZWN0b3JTdGF0ZSosIEluamVjdGVkU2NyaXB0TWFuYWdlciopOwogICAgIHZpcnR1YWwgfkluc3Bl
Y3RvclByb2ZpbGVyQWdlbnQoKTsKIAogICAgIHZvaWQgYWRkUHJvZmlsZShQYXNzUmVmUHRyPFNj
cmlwdFByb2ZpbGU+IHBycFByb2ZpbGUsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmlu
ZyYgc291cmNlVVJMKTsKQEAgLTkwLDYgKzkxLDggQEAgcHVibGljOgogICAgIHZvaWQgdGFrZUhl
YXBTbmFwc2hvdChFcnJvclN0cmluZyopOwogICAgIHZvaWQgdG9nZ2xlUmVjb3JkQnV0dG9uKGJv
b2wgaXNQcm9maWxpbmcpOwogCisgICAgdm9pZCBnZXRPYmplY3RCeUhlYXBPYmplY3RJZChFcnJv
clN0cmluZyosIGludCBpZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIHJlc3VsdCk7CisKIHBy
aXZhdGU6CiAgICAgdHlwZWRlZiBIYXNoTWFwPHVuc2lnbmVkIGludCwgUmVmUHRyPFNjcmlwdFBy
b2ZpbGU+ID4gUHJvZmlsZXNNYXA7CiAgICAgdHlwZWRlZiBIYXNoTWFwPHVuc2lnbmVkIGludCwg
UmVmUHRyPFNjcmlwdEhlYXBTbmFwc2hvdD4gPiBIZWFwU25hcHNob3RzTWFwOwpAQCAtOTcsNyAr
MTAwLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlc2V0RnJvbnRlbmRQcm9maWxlcygpOwogICAg
IHZvaWQgcmVzdG9yZUVuYWJsZW1lbnQoKTsKIAotICAgIEluc3BlY3RvclByb2ZpbGVyQWdlbnQo
SW5zdHJ1bWVudGluZ0FnZW50cyosIEluc3BlY3RvckNvbnNvbGVBZ2VudCosIFBhZ2UqLCBJbnNw
ZWN0b3JTdGF0ZSopOworICAgIEluc3BlY3RvclByb2ZpbGVyQWdlbnQoSW5zdHJ1bWVudGluZ0Fn
ZW50cyosIEluc3BlY3RvckNvbnNvbGVBZ2VudCosIFBhZ2UqLCBJbnNwZWN0b3JTdGF0ZSosIElu
amVjdGVkU2NyaXB0TWFuYWdlciopOwogICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBj
cmVhdGVQcm9maWxlSGVhZGVyKGNvbnN0IFNjcmlwdFByb2ZpbGUmIHByb2ZpbGUpOwogICAgIFBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVTbmFwc2hvdEhlYWRlcihjb25zdCBTY3Jp
cHRIZWFwU25hcHNob3QmIHNuYXBzaG90KTsKIApAQCAtMTA1LDYgKzEwOCw3IEBAIHByaXZhdGU6
CiAgICAgSW5zcGVjdG9yQ29uc29sZUFnZW50KiBtX2NvbnNvbGVBZ2VudDsKICAgICBQYWdlKiBt
X2luc3BlY3RlZFBhZ2U7CiAgICAgSW5zcGVjdG9yU3RhdGUqIG1faW5zcGVjdG9yU3RhdGU7Cisg
ICAgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBtX2luamVjdGVkU2NyaXB0TWFuYWdlcjsKICAgICBJ
bnNwZWN0b3JGcm9udGVuZDo6UHJvZmlsZXIqIG1fZnJvbnRlbmQ7CiAgICAgYm9vbCBtX2VuYWJs
ZWQ7CiAgICAgYm9vbCBtX3JlY29yZGluZ1VzZXJJbml0aWF0ZWRQcm9maWxlOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EZXRhaWxlZEhlYXBzaG90R3Jp
ZE5vZGVzLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EZXRhaWxlZEhl
YXBzaG90R3JpZE5vZGVzLmpzCmluZGV4IDc2MTAxMmMuLjQzN2M5MGIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGV0YWlsZWRIZWFwc2hvdEdyaWROb2Rl
cy5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RldGFpbGVkSGVh
cHNob3RHcmlkTm9kZXMuanMKQEAgLTU2LDkgKzU2LDggQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdEdyaWROb2RlLnByb3RvdHlwZSA9IHsKIAogICAgIGhhc0hvdmVyTWVzc2FnZTogZmFsc2Us
CiAKLSAgICBob3Zlck1lc3NhZ2U6IGZ1bmN0aW9uKGNhbGxiYWNrKQorICAgIHF1ZXJ5T2JqZWN0
Q29udGVudDogZnVuY3Rpb24oY2FsbGJhY2spCiAgICAgewotICAgICAgICBjYWxsYmFjaygiIik7
CiAgICAgfSwKIAogICAgIF9wb3B1bGF0ZTogZnVuY3Rpb24oZXZlbnQpCkBAIC0xODUsOSArMTg0
LDkgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEdlbmVyaWNPYmplY3ROb2RlID0gZnVuY3Rp
b24odHJlZSwgbm9kZSkKICAgICBpZiAodGhpcy5fdHlwZSA9PT0gInN0cmluZyIpCiAgICAgICAg
IHRoaXMuaGFzSG92ZXJNZXNzYWdlID0gdHJ1ZTsKICAgICBlbHNlIGlmICh0aGlzLl90eXBlID09
PSAib2JqZWN0IiAmJiB0aGlzLmlzRE9NV2luZG93KHRoaXMuX25hbWUpKSB7Ci0gICAgICAgIHZh
ciB1cmwgPSBbXTsKLSAgICAgICAgdGhpcy5fbmFtZSA9IHRoaXMuc2hvcnRlbldpbmRvd1VSTCh0
aGlzLl9uYW1lLCBmYWxzZSwgdXJsKTsKLSAgICAgICAgdGhpcy5fdXJsID0gdXJsWzBdOworICAg
ICAgICB0aGlzLl9uYW1lID0gdGhpcy5zaG9ydGVuV2luZG93VVJMKHRoaXMuX25hbWUsIGZhbHNl
KTsKKyAgICAgICAgdGhpcy5oYXNIb3Zlck1lc3NhZ2UgPSB0cnVlOworICAgIH0gZWxzZSBpZiAo
bm9kZS5mbGFncyAmIHRyZWUuc25hcHNob3Qubm9kZUZsYWdzLmNhbkJlUXVlcmllZCkgewogICAg
ICAgICB0aGlzLmhhc0hvdmVyTWVzc2FnZSA9IHRydWU7CiAgICAgfQogfTsKQEAgLTI1OSw2ICsy
NTgsOCBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90R2VuZXJpY09iamVjdE5vZGUucHJvdG90
eXBlID0gewogICAgICAgICAgICAgICAgIHZhbHVlICs9ICIgW10iOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH07CisgICAgICAgIGlmICh0aGlzLmhhc0hvdmVyTWVzc2FnZSkKKyAgICAg
ICAgICAgIHZhbHVlU3R5bGUgKz0gIiBoaWdobGlnaHQiOwogICAgICAgICBkYXRhWyJvYmplY3Qi
XSA9IHsgdmFsdWVTdHlsZTogdmFsdWVTdHlsZSwgdmFsdWU6IHZhbHVlICsgIiBAIiArIHRoaXMu
c25hcHNob3ROb2RlSWQgfTsKIAogICAgICAgICB2YXIgdmlldyA9IHRoaXMuZGF0YUdyaWQuc25h
cHNob3RWaWV3OwpAQCAtMjY4LDEyICsyNjksMjAgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hv
dEdlbmVyaWNPYmplY3ROb2RlLnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2Vu
aGFuY2VEYXRhID8gdGhpcy5fZW5oYW5jZURhdGEoZGF0YSkgOiBkYXRhOwogICAgIH0sCiAKLSAg
ICBob3Zlck1lc3NhZ2U6IGZ1bmN0aW9uKGNhbGxiYWNrKQorICAgIHF1ZXJ5T2JqZWN0Q29udGVu
dDogZnVuY3Rpb24oY2FsbGJhY2spCiAgICAgewotICAgICAgICBpZiAodGhpcy5fdHlwZSA9PT0g
InN0cmluZyIpCi0gICAgICAgICAgICBjYWxsYmFjaygiXCIiICsgdGhpcy5fbmFtZSArICJcIiIs
ICJjb25zb2xlLWZvcm1hdHRlZC1zdHJpbmciKTsKLSAgICAgICAgZWxzZSBpZiAodGhpcy5fdXJs
KQotICAgICAgICAgICAgY2FsbGJhY2sodGhpcy5fdXJsLCAiY29uc29sZS1mb3JtYXR0ZWQtb2Jq
ZWN0Iik7CisgICAgICAgIGlmICh0aGlzLl90eXBlID09PSAic3RyaW5nIikgeworICAgICAgICAg
ICAgY2FsbGJhY2soeyB0eXBlOiAic3RyaW5nIiwgZGVzY3JpcHRpb246IHRoaXMuX25hbWUgfSk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmdW5jdGlvbiBmb3JtYXRSZXN1bHQoZXJy
b3IsIG9iamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAob2JqZWN0LnR5
cGUpCisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKFdlYkluc3BlY3Rvci5SZW1vdGVPYmpl
Y3QuZnJvbVBheWxvYWQob2JqZWN0KSwgISFlcnJvcik7ICAgIAorICAgICAgICAgICAgICAgIGVs
c2UgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayh7IHR5
cGU6ICJudWxsIiwgZGVzY3JpcHRpb246IFdlYkluc3BlY3Rvci5VSVN0cmluZygiTm90IGF2YWls
YWJsZSIpIH0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUHJvZmlsZXJBZ2VudC5nZXRP
YmplY3RCeUhlYXBPYmplY3RJZCh0aGlzLnNuYXBzaG90Tm9kZUlkLCBmb3JtYXRSZXN1bHQpOwor
ICAgICAgICB9CiAgICAgfSwKIAogICAgIGdldCBfcmV0YWluZWRTaXplUGVyY2VudCgpCkBAIC0z
MDAsMTQgKzMwOSwxMiBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90R2VuZXJpY09iamVjdE5v
ZGUucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gZnVsbE5hbWUuc3Vic3RyKDAsIDkpID09
PSAiRE9NV2luZG93IjsKICAgICB9LAogCi0gICAgc2hvcnRlbldpbmRvd1VSTDogZnVuY3Rpb24o
ZnVsbE5hbWUsIGhhc09iamVjdElkLCBmdWxsVVJMUHRyKQorICAgIHNob3J0ZW5XaW5kb3dVUkw6
IGZ1bmN0aW9uKGZ1bGxOYW1lLCBoYXNPYmplY3RJZCkKICAgICB7CiAgICAgICAgIHZhciBzdGFy
dFBvcyA9IGZ1bGxOYW1lLmluZGV4T2YoIi8iKTsKICAgICAgICAgdmFyIGVuZFBvcyA9IGhhc09i
amVjdElkID8gZnVsbE5hbWUuaW5kZXhPZigiQCIpIDogZnVsbE5hbWUubGVuZ3RoOwogICAgICAg
ICBpZiAoc3RhcnRQb3MgIT09IC0xICYmIGVuZFBvcyAhPT0gLTEpIHsKICAgICAgICAgICAgIHZh
ciBmdWxsVVJMID0gZnVsbE5hbWUuc3Vic3RyaW5nKHN0YXJ0UG9zICsgMSwgZW5kUG9zKS50cmlt
TGVmdCgpOwotICAgICAgICAgICAgaWYgKGZ1bGxVUkxQdHIpCi0gICAgICAgICAgICAgICAgZnVs
bFVSTFB0clswXSA9IGZ1bGxVUkw7CiAgICAgICAgICAgICB2YXIgdXJsID0gZnVsbFVSTC50cmlt
VVJMKCk7CiAgICAgICAgICAgICBpZiAodXJsLmxlbmd0aCA+IDQwKQogICAgICAgICAgICAgICAg
IHVybCA9IHVybC50cmltTWlkZGxlKDQwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvRGV0YWlsZWRIZWFwc2hvdFZpZXcuanMgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RldGFpbGVkSGVhcHNob3RWaWV3LmpzCmluZGV4IDAwOTY2
NTEuLjYxNWY4YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvRGV0YWlsZWRIZWFwc2hvdFZpZXcuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9EZXRhaWxlZEhlYXBzaG90Vmlldy5qcwpAQCAtNjIxLDcgKzYyMSw3IEBAIFdl
Ykluc3BlY3Rvci5EZXRhaWxlZEhlYXBzaG90VmlldyA9IGZ1bmN0aW9uKHBhcmVudCwgcHJvZmls
ZSkKICAgICB0aGlzLmhlbHBCdXR0b24gPSBuZXcgV2ViSW5zcGVjdG9yLlN0YXR1c0JhckJ1dHRv
bigiIiwgImhlYXBzaG90LWhlbHAtc3RhdHVzLWJhci1pdGVtIHN0YXR1cy1iYXItaXRlbSIpOwog
ICAgIHRoaXMuaGVscEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuX2hlbHBD
bGlja2VkLmJpbmQodGhpcyksIGZhbHNlKTsKIAotICAgIHZhciBwb3BvdmVySGVscGVyID0gbmV3
IFdlYkluc3BlY3Rvci5Qb3BvdmVySGVscGVyKHRoaXMuZWxlbWVudCwgdGhpcy5fZ2V0SG92ZXJB
bmNob3IuYmluZCh0aGlzKSwgdGhpcy5fc2hvd1N0cmluZ0NvbnRlbnRQb3BvdmVyLmJpbmQodGhp
cykpOworICAgIHZhciBwb3BvdmVySGVscGVyID0gbmV3IFdlYkluc3BlY3Rvci5PYmplY3RQb3Bv
dmVySGVscGVyKHRoaXMuZWxlbWVudCwgdGhpcy5fZ2V0SG92ZXJBbmNob3IuYmluZCh0aGlzKSwg
dGhpcy5fc2hvd09iamVjdFBvcG92ZXIuYmluZCh0aGlzKSwgbnVsbCwgdHJ1ZSk7CiAKICAgICB0
aGlzLl9sb2FkUHJvZmlsZSh0aGlzLl9wcm9maWxlVWlkLCBwcm9maWxlQ2FsbGJhY2suYmluZCh0
aGlzKSk7CiAKQEAgLTEwNjYsMTkgKzEwNjYsOSBAQCBXZWJJbnNwZWN0b3IuRGV0YWlsZWRIZWFw
c2hvdFZpZXcucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLnJlZnJlc2hTaG93QXNQZXJjZW50
cygpOwogICAgIH0sCiAKLSAgICBfc2hvd1N0cmluZ0NvbnRlbnRQb3BvdmVyOiBmdW5jdGlvbihh
bmNob3IsIHBvcG92ZXIpCisgICAgX3Nob3dPYmplY3RQb3BvdmVyOiBmdW5jdGlvbihlbGVtZW50
LCBzaG93Q2FsbGJhY2spCiAgICAgewotICAgICAgICB2YXIgc3RyaW5nQ29udGVudEVsZW1lbnQg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci0gICAgICAgIHN0cmluZ0NvbnRlbnRF
bGVtZW50LmNsYXNzTmFtZSA9ICJtb25vc3BhY2UiOwotICAgICAgICBzdHJpbmdDb250ZW50RWxl
bWVudC5zdHlsZS53aGl0ZVNwYWNlID0gInByZSI7Ci0KLSAgICAgICAgZnVuY3Rpb24gZGlzcGxh
eVN0cmluZyhuYW1lLCBjbGFzc05hbWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0cmluZ0Nv
bnRlbnRFbGVtZW50LnRleHRDb250ZW50ID0gbmFtZTsKLSAgICAgICAgICAgIHN0cmluZ0NvbnRl
bnRFbGVtZW50LmNsYXNzTmFtZSArPSAiICIgKyBjbGFzc05hbWU7Ci0gICAgICAgICAgICBwb3Bv
dmVyLnNob3coc3RyaW5nQ29udGVudEVsZW1lbnQsIGFuY2hvcik7Ci0gICAgICAgIH0KLSAgICAg
ICAgYW5jaG9yLm5vZGUuaG92ZXJNZXNzYWdlKGRpc3BsYXlTdHJpbmcpOworICAgICAgICBlbGVt
ZW50Lm5vZGUucXVlcnlPYmplY3RDb250ZW50KHNob3dDYWxsYmFjayk7CiAgICAgfSwKIAogICAg
IF9oZWxwQ2xpY2tlZDogZnVuY3Rpb24oZXZlbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdC5qcyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90LmpzCmluZGV4IDkwNDBlYTMuLjMzZjkxOTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBz
aG90LmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBz
aG90LmpzCkBAIC00OTQsNiArNDk0LDEyIEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2Rl
ID0gZnVuY3Rpb24oc25hcHNob3QsIG5vZGVJbmRleCkKIH0KIAogV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdE5vZGUucHJvdG90eXBlID0geworICAgIGdldCBjYW5CZVF1ZXJpZWQoKQorICAgIHsK
KyAgICAgICAgdmFyIGZsYWdzID0gdGhpcy5fc25hcHNob3QuX2ZsYWdzT2ZOb2RlKHRoaXMpOwor
ICAgICAgICByZXR1cm4gISEoZmxhZ3MgJiB0aGlzLl9zbmFwc2hvdC5fbm9kZUZsYWdzLmNhbkJl
UXVlcmllZCk7CisgICAgfSwKKwogICAgIGdldCBjbGFzc05hbWUoKQogICAgIHsKICAgICAgICAg
c3dpdGNoICh0aGlzLnR5cGUpIHsKQEAgLTUyOSw2ICs1MzUsMTEgQEAgV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdE5vZGUucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gdGhpcy5fbm9kZXNb
dGhpcy5ub2RlSW5kZXggKyB0aGlzLl9zbmFwc2hvdC5fZWRnZXNDb3VudE9mZnNldF07CiAgICAg
fSwKIAorICAgIGdldCBmbGFncygpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fc25hcHNo
b3QuX2ZsYWdzT2ZOb2RlKHRoaXMpOworICAgIH0sCisKICAgICBnZXQgaWQoKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIHRoaXMuX25vZGVzW3RoaXMubm9kZUluZGV4ICsgdGhpcy5fc25hcHNob3Qu
X25vZGVJZE9mZnNldF07CkBAIC01NDQsNiArNTU1LDExIEBAIFdlYkluc3BlY3Rvci5IZWFwU25h
cHNob3ROb2RlLnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGUoKSA9PT0g
dGhpcy5fc25hcHNob3QuX25vZGVIaWRkZW5UeXBlOwogICAgIH0sCiAKKyAgICBnZXQgaXNET01X
aW5kb3coKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMubmFtZS5zdWJzdHIoMCwgOSkgPT09
ICJET01XaW5kb3ciOworICAgIH0sCisKICAgICBnZXQgaXNSb290KCkKICAgICB7CiAgICAgICAg
IHJldHVybiB0aGlzLm5vZGVJbmRleCA9PT0gdGhpcy5fc25hcHNob3QuX3Jvb3ROb2RlSW5kZXg7
CkBAIC02ODIsNiArNjk4LDggQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdC5wcm90b3R5cGUg
PSB7CiAgICAgICAgIHRoaXMuX2VkZ2VJbnZpc2libGVUeXBlID0gdGhpcy5fZWRnZVR5cGVzLmxl
bmd0aDsKICAgICAgICAgdGhpcy5fZWRnZVR5cGVzLnB1c2goImludmlzaWJsZSIpOwogCisgICAg
ICAgIHRoaXMuX25vZGVGbGFncyA9IHsgY2FuQmVRdWVyaWVkOiAxIH07CisKICAgICAgICAgdGhp
cy5fbWFya0ludmlzaWJsZUVkZ2VzKCk7CiAgICAgfSwKIApAQCAtNjk5LDYgKzcxNyw3IEBAIFdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3QucHJvdG90eXBlID0gewogICAgICAgICBkZWxldGUgdGhp
cy5fYmFzZU5vZGVJZHM7CiAgICAgICAgIGRlbGV0ZSB0aGlzLl9kb21pbmF0ZWROb2RlczsKICAg
ICAgICAgZGVsZXRlIHRoaXMuX2RvbWluYXRlZEluZGV4OworICAgICAgICBkZWxldGUgdGhpcy5f
ZmxhZ3M7CiAgICAgfSwKIAogICAgIGdldCBfYWxsTm9kZXMoKQpAQCAtNzYzLDYgKzc4MiwxMyBA
QCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90LnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJu
IG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90QXJyYXlTbGljZSh0aGlzLCAiX2RvbWluYXRl
ZE5vZGVzIiwgZG9taW5hdGVkSW5kZXhGcm9tLCBkb21pbmF0ZWRJbmRleFRvKTsKICAgICB9LAog
CisgICAgX2ZsYWdzT2ZOb2RlOiBmdW5jdGlvbihub2RlKQorICAgIHsKKyAgICAgICAgaWYgKCF0
aGlzLl9mbGFncykKKyAgICAgICAgICAgIHRoaXMuX2NhbGN1bGF0ZUZsYWdzKCk7CisgICAgICAg
IHJldHVybiB0aGlzLl9mbGFnc1tub2RlLm5vZGVJbmRleF07CisgICAgfSwKKwogICAgIGFnZ3Jl
Z2F0ZXM6IGZ1bmN0aW9uKHNvcnRlZEluZGV4ZXMpCiAgICAgewogICAgICAgICBpZiAoIXRoaXMu
X2FnZ3JlZ2F0ZXMpCkBAIC05NTksNiArOTg1LDMyIEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNo
b3QucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gYSA8IGIgPyAtMSA6IChhID4gYiA/IDEg
OiAwKTsKICAgICB9LAogCisgICAgX2NhbGN1bGF0ZUZsYWdzOiBmdW5jdGlvbigpCisgICAgewor
ICAgICAgICB2YXIgZmxhZyA9IHRoaXMuX25vZGVGbGFncy5jYW5CZVF1ZXJpZWQ7CisgICAgICAg
IHRoaXMuX2ZsYWdzID0gbmV3IEFycmF5KHRoaXMubm9kZUNvdW50KTsKKyAgICAgICAgLy8gQWxs
b3cgcnVudGltZSBwcm9wZXJ0aWVzIHF1ZXJ5IGZvciBvYmplY3RzIGFjY2Vzc2libGUgZnJvbSBE
T01XaW5kb3cgb2JqZWN0cworICAgICAgICAvLyB2aWEgcmVndWxhciBwcm9wZXJ0aWVzLCBhbmQg
Zm9yIERPTSB3cmFwcGVycy4gVHJ5aW5nIHRvIGFjY2VzcyByYW5kb20gb2JqZWN0cworICAgICAg
ICAvLyBjYW4gY2F1c2UgYSBjcmFzaCBkdWUgdG8gaW5zb25zaXN0ZW50IHN0YXRlIG9mIGludGVy
bmFsIHByb3BlcnRpZXMgb2Ygd3JhcHBlcnMuCisgICAgICAgIHZhciBsaXN0ID0gW107CisgICAg
ICAgIGZvciAodmFyIGl0ZXIgPSB0aGlzLnJvb3ROb2RlLmVkZ2VzOyBpdGVyLmhhc05leHQoKTsg
aXRlci5uZXh0KCkpIHsKKyAgICAgICAgICAgIGlmIChpdGVyLmVkZ2Uubm9kZS5pc0RPTVdpbmRv
dykKKyAgICAgICAgICAgICAgICBsaXN0LnB1c2goaXRlci5lZGdlLm5vZGUpOworICAgICAgICB9
CisgICAgICAgIHdoaWxlIChsaXN0Lmxlbmd0aCkgeworICAgICAgICAgICAgdmFyIG5vZGUgPSBs
aXN0LnNoaWZ0KCk7CisgICAgICAgICAgICBpZiAobm9kZS5jYW5CZVF1ZXJpZWQpIGNvbnRpbnVl
OworICAgICAgICAgICAgdGhpcy5fZmxhZ3Nbbm9kZS5ub2RlSW5kZXhdID0gZmxhZzsKKyAgICAg
ICAgICAgIGZvciAodmFyIGl0ZXIgPSBub2RlLmVkZ2VzOyBpdGVyLmhhc05leHQoKTsgaXRlci5u
ZXh0KCkpIHsKKyAgICAgICAgICAgICAgICB2YXIgZWRnZSA9IGl0ZXIuZWRnZTsKKyAgICAgICAg
ICAgICAgICBpZiAoIWVkZ2UuaXNIaWRkZW4gJiYgIWVkZ2UuaXNJbnZpc2libGUgJiYKKyAgICAg
ICAgICAgICAgICAgICAgZWRnZS5uYW1lICYmICghZWRnZS5pc0ludGVybmFsIHx8IGVkZ2UubmFt
ZSA9PT0gIm5hdGl2ZSIpICYmCisgICAgICAgICAgICAgICAgICAgICFlZGdlLm5vZGUuY2FuQmVR
dWVyaWVkKQorICAgICAgICAgICAgICAgICAgICBsaXN0LnB1c2goZWRnZS5ub2RlKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0sCisKICAgICBiYXNlU25hcHNob3RIYXNOb2RlOiBm
dW5jdGlvbihiYXNlU25hcHNob3RJZCwgY2xhc3NOYW1lLCBub2RlSWQpCiAgICAgewogICAgICAg
ICByZXR1cm4gdGhpcy5fYmFzZU5vZGVJZHNbYmFzZVNuYXBzaG90SWRdW2NsYXNzTmFtZV0uYmlu
YXJ5SW5kZXhPZihub2RlSWQsIHRoaXMuX251bWJlcnNDb21wYXJhdG9yKSAhPT0gLTE7CkBAIC0x
MDE0LDcgKzEwNjYsNyBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90LnByb3RvdHlwZSA9IHsK
IAogICAgIHVwZGF0ZVN0YXRpY0RhdGE6IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIHJldHVy
biB7bm9kZUNvdW50OiB0aGlzLm5vZGVDb3VudCwgcm9vdE5vZGVJbmRleDogdGhpcy5fcm9vdE5v
ZGVJbmRleCwgdG90YWxTaXplOiB0aGlzLnRvdGFsU2l6ZSwgdWlkOiB0aGlzLnVpZH07CisgICAg
ICAgIHJldHVybiB7bm9kZUNvdW50OiB0aGlzLm5vZGVDb3VudCwgcm9vdE5vZGVJbmRleDogdGhp
cy5fcm9vdE5vZGVJbmRleCwgdG90YWxTaXplOiB0aGlzLnRvdGFsU2l6ZSwgdWlkOiB0aGlzLnVp
ZCwgbm9kZUZsYWdzOiB0aGlzLl9ub2RlRmxhZ3N9OwogICAgIH0KIH07CiAKQEAgLTEyMzUsNyAr
MTI4Nyw3IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2Rlc1Byb3ZpZGVyID0gZnVuY3Rp
b24oc25hcHNob3QsIGZpbHRlciwgbm9kZUluZGV4ZXMpCiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90Tm9kZXNQcm92aWRlci5wcm90b3R5cGUgPSB7CiAgICAgX3NlcmlhbGl6ZTogZnVuY3Rpb24o
bm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiB7aWQ6IG5vZGUuaWQsIG5hbWU6IG5vZGUubmFt
ZSwgbm9kZUluZGV4OiBub2RlLm5vZGVJbmRleCwgcmV0YWluZWRTaXplOiBub2RlLnJldGFpbmVk
U2l6ZSwgc2VsZlNpemU6IG5vZGUuc2VsZlNpemUsIHR5cGU6IG5vZGUudHlwZX07CisgICAgICAg
IHJldHVybiB7aWQ6IG5vZGUuaWQsIG5hbWU6IG5vZGUubmFtZSwgbm9kZUluZGV4OiBub2RlLm5v
ZGVJbmRleCwgcmV0YWluZWRTaXplOiBub2RlLnJldGFpbmVkU2l6ZSwgc2VsZlNpemU6IG5vZGUu
c2VsZlNpemUsIHR5cGU6IG5vZGUudHlwZSwgZmxhZ3M6IG5vZGUuZmxhZ3N9OwogICAgIH0sCiAK
ICAgICBzb3J0OiBmdW5jdGlvbihjb21wYXJhdG9yLCBsZWZ0Qm91bmQsIHJpZ2h0Qm91bmQsIGNv
dW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFw
U25hcHNob3RQcm94eS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVh
cFNuYXBzaG90UHJveHkuanMKaW5kZXggNDRhMDU0NC4uN2Y1N2QzNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RQcm94eS5qcworKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdFByb3h5Lmpz
CkBAIC0zNzAsNiArMzcwLDExIEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RQcm94eS5wcm90
b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuY2FsbE1ldGhvZChjYWxsYmFjaywgIm5vZGVGaWVsZFZh
bHVlc0J5SW5kZXgiLCBmaWVsZE5hbWUsIGluZGV4ZXMpOwogICAgIH0sCiAKKyAgICBnZXQgbm9k
ZUZsYWdzKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9zdGF0aWNEYXRhLm5vZGVGbGFn
czsKKyAgICB9LAorCiAgICAgcHVzaEJhc2VJZHM6IGZ1bmN0aW9uKHNuYXBzaG90SWQsIGNsYXNz
TmFtZSwgbm9kZUlkcykKICAgICB7CiAgICAgICAgIHRoaXMuY2FsbE1ldGhvZChudWxsLCAicHVz
aEJhc2VJZHMiLCBzbmFwc2hvdElkLCBjbGFzc05hbWUsIG5vZGVJZHMpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9PYmplY3RQcm9wZXJ0aWVzU2VjdGlv
bi5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvT2JqZWN0UHJvcGVydGll
c1NlY3Rpb24uanMKaW5kZXggOTYyNmM3Ni4uZTg2MjVlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9PYmplY3RQcm9wZXJ0aWVzU2VjdGlvbi5qcworKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL09iamVjdFByb3BlcnRpZXNTZWN0
aW9uLmpzCkBAIC00Miw2ICs0MiwxMCBAQCBXZWJJbnNwZWN0b3IuT2JqZWN0UHJvcGVydGllc1Nl
Y3Rpb24ucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLnVwZGF0ZSgpOwogICAgIH0sCiAKKyAg
ICBvblByb3BlcnRpZXNSZWNlaXZlZDogZnVuY3Rpb24ocHJvcGVydGllcykKKyAgICB7CisgICAg
fSwKKwogICAgIHVwZGF0ZTogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgdmFyIHNlbGYgPSB0
aGlzOwpAQCAtNDksNiArNTMsNyBAQCBXZWJJbnNwZWN0b3IuT2JqZWN0UHJvcGVydGllc1NlY3Rp
b24ucHJvdG90eXBlID0gewogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIXByb3BlcnRpZXMp
CiAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgc2VsZi5vblByb3BlcnRpZXNS
ZWNlaXZlZChwcm9wZXJ0aWVzKTsKICAgICAgICAgICAgIHNlbGYudXBkYXRlUHJvcGVydGllcyhw
cm9wZXJ0aWVzKTsKICAgICAgICAgfQogICAgICAgICBpZiAodGhpcy5pZ25vcmVIYXNPd25Qcm9w
ZXJ0eSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUG9w
b3Zlci5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUG9wb3Zlci5qcwpp
bmRleCAxMjFjYmU4Li44ODE5ODlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1BvcG92ZXIuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9Qb3BvdmVyLmpzCkBAIC0yODgsMyArMjg4LDY4IEBAIFdlYkluc3BlY3Rvci5Qb3Bv
dmVySGVscGVyLnByb3RvdHlwZSA9IHsKICAgICAgICAgfQogICAgIH0KIH0KKworV2ViSW5zcGVj
dG9yLk9iamVjdFBvcG92ZXJIZWxwZXIgPSBmdW5jdGlvbihwYW5lbEVsZW1lbnQsIGdldEFuY2hv
ciwgcXVlcnlPYmplY3QsIG9uSGlkZSwgZGlzYWJsZU9uQ2xpY2spCit7CisgICAgV2ViSW5zcGVj
dG9yLlBvcG92ZXJIZWxwZXIuY2FsbCh0aGlzLCBwYW5lbEVsZW1lbnQsIGdldEFuY2hvciwgdGhp
cy5fc2hvd09iamVjdFBvcG92ZXIuYmluZCh0aGlzKSwgb25IaWRlLCBkaXNhYmxlT25DbGljayk7
CisgICAgdGhpcy5fcXVlcnlPYmplY3QgPSBxdWVyeU9iamVjdDsKKyAgICBwYW5lbEVsZW1lbnQu
YWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIiwgdGhpcy5oaWRlUG9wb3Zlci5iaW5kKHRoaXMpLCB0
cnVlKTsKK307CisKK1dlYkluc3BlY3Rvci5PYmplY3RQb3BvdmVySGVscGVyLnByb3RvdHlwZSA9
IHsKKyAgICBfc2hvd09iamVjdFBvcG92ZXI6IGZ1bmN0aW9uKGVsZW1lbnQsIHBvcG92ZXIpCisg
ICAgeworICAgICAgICBmdW5jdGlvbiBzaG93T2JqZWN0UG9wb3ZlcihyZXN1bHQsIHdhc1Rocm93
bikKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHBvcG92ZXIuZGlzcG9zZWQpCisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKHdhc1Rocm93bikgeworICAgICAgICAg
ICAgICAgIHRoaXMuaGlkZVBvcG92ZXIoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICB2YXIgcG9wb3ZlckNvbnRlbnRFbGVtZW50ID0gbnVsbDsK
KyAgICAgICAgICAgIGlmIChyZXN1bHQudHlwZSAhPT0gIm9iamVjdCIpIHsKKyAgICAgICAgICAg
ICAgICBwb3BvdmVyQ29udGVudEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFu
Iik7CisgICAgICAgICAgICAgICAgcG9wb3ZlckNvbnRlbnRFbGVtZW50LmNsYXNzTmFtZSA9ICJt
b25vc3BhY2UgY29uc29sZS1mb3JtYXR0ZWQtIiArIHJlc3VsdC50eXBlOworICAgICAgICAgICAg
ICAgIHBvcG92ZXJDb250ZW50RWxlbWVudC5zdHlsZS53aGl0ZVNwYWNlID0gInByZSI7CisgICAg
ICAgICAgICAgICAgcG9wb3ZlckNvbnRlbnRFbGVtZW50LnRleHRDb250ZW50ID0gcmVzdWx0LmRl
c2NyaXB0aW9uOworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQudHlwZSA9PT0gInN0cmluZyIp
CisgICAgICAgICAgICAgICAgICAgIHBvcG92ZXJDb250ZW50RWxlbWVudC50ZXh0Q29udGVudCA9
ICJcIiIgKyBwb3BvdmVyQ29udGVudEVsZW1lbnQudGV4dENvbnRlbnQgKyAiXCIiOworICAgICAg
ICAgICAgICAgIHBvcG92ZXIuc2hvdyhwb3BvdmVyQ29udGVudEVsZW1lbnQsIGVsZW1lbnQpOwor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwb3BvdmVyQ29udGVudEVsZW1l
bnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKworICAgICAgICAgICAgICAgIHZh
ciB0aXRsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAg
ICAgICAgICB0aXRsZUVsZW1lbnQuY2xhc3NOYW1lID0gInNvdXJjZS1mcmFtZS1wb3BvdmVyLXRp
dGxlIG1vbm9zcGFjZSI7CisgICAgICAgICAgICAgICAgdGl0bGVFbGVtZW50LnRleHRDb250ZW50
ID0gcmVzdWx0LmRlc2NyaXB0aW9uOworICAgICAgICAgICAgICAgIHBvcG92ZXJDb250ZW50RWxl
bWVudC5hcHBlbmRDaGlsZCh0aXRsZUVsZW1lbnQpOworCisgICAgICAgICAgICAgICAgdmFyIHNl
Y3Rpb24gPSBuZXcgV2ViSW5zcGVjdG9yLk9iamVjdFByb3BlcnRpZXNTZWN0aW9uKHJlc3VsdCk7
CisgICAgICAgICAgICAgICAgLy8gRm9yIEhUTUwgRE9NIHdyYXBwZXJzLCBhcHBlbmQgIiNpZCIg
dG8gdGl0bGUsIGlmIG5vdCBlbXB0eS4KKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmRlc2Ny
aXB0aW9uLnN1YnN0cigwLCA0KSA9PT0gIkhUTUwiKSB7CisgICAgICAgICAgICAgICAgICAgIHNl
Y3Rpb24ub25Qcm9wZXJ0aWVzUmVjZWl2ZWQgPSBmdW5jdGlvbihwcm9wZXJ0aWVzKQorICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IHByb3BlcnRpZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAocHJvcGVydGllc1tpXS5uYW1lID09PSAiaWQiKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzW2ldLnZhbHVlLmRlc2NyaXB0aW9uKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGVFbGVtZW50LnRleHRDb250ZW50ICs9
ICIjIiArIHByb3BlcnRpZXNbaV0udmFsdWUuZGVzY3JpcHRpb247CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgc2VjdGlvbi5leHBhbmRlZCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgc2VjdGlvbi5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoInNvdXJjZS1mcmFtZS1w
b3BvdmVyLXRyZWUiKTsKKyAgICAgICAgICAgICAgICBzZWN0aW9uLmhlYWRlckVsZW1lbnQuYWRk
U3R5bGVDbGFzcygiaGlkZGVuIik7CisgICAgICAgICAgICAgICAgcG9wb3ZlckNvbnRlbnRFbGVt
ZW50LmFwcGVuZENoaWxkKHNlY3Rpb24uZWxlbWVudCk7CisKKyAgICAgICAgICAgICAgICBjb25z
dCBwb3BvdmVyV2lkdGggPSAzMDA7CisgICAgICAgICAgICAgICAgY29uc3QgcG9wb3ZlckhlaWdo
dCA9IDI1MDsKKyAgICAgICAgICAgICAgICBwb3BvdmVyLnNob3cocG9wb3ZlckNvbnRlbnRFbGVt
ZW50LCBlbGVtZW50LCBwb3BvdmVyV2lkdGgsIHBvcG92ZXJIZWlnaHQpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIHRoaXMuX3F1ZXJ5T2JqZWN0KGVsZW1lbnQsIHNob3dPYmpl
Y3RQb3BvdmVyLmJpbmQodGhpcykpOworICAgIH0KK30KKworV2ViSW5zcGVjdG9yLk9iamVjdFBv
cG92ZXJIZWxwZXIucHJvdG90eXBlLl9fcHJvdG9fXyA9IFdlYkluc3BlY3Rvci5Qb3BvdmVySGVs
cGVyLnByb3RvdHlwZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvU291cmNlRnJhbWUuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1NvdXJjZUZyYW1lLmpzCmluZGV4IDA3YjE5MTEuLjk4MDFlYTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanMKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qcwpAQCAtMjg5LDEwICsy
ODksOSBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogCiAgICAgICAg
IHZhciBlbGVtZW50ID0gdGhpcy5fdGV4dFZpZXdlci5lbGVtZW50OwogICAgICAgICBpZiAodGhp
cy5fZGVsZWdhdGUuZGVidWdnaW5nU3VwcG9ydGVkKCkpIHsKLSAgICAgICAgICAgIHRoaXMuX3Bv
cG92ZXJIZWxwZXIgPSBuZXcgV2ViSW5zcGVjdG9yLlBvcG92ZXJIZWxwZXIoZWxlbWVudCwKKyAg
ICAgICAgICAgIHRoaXMuX3BvcG92ZXJIZWxwZXIgPSBuZXcgV2ViSW5zcGVjdG9yLk9iamVjdFBv
cG92ZXJIZWxwZXIoZWxlbWVudCwKICAgICAgICAgICAgICAgICB0aGlzLl9nZXRQb3BvdmVyQW5j
aG9yLmJpbmQodGhpcyksIHRoaXMuX29uU2hvd1BvcG92ZXIuYmluZCh0aGlzKSwgdGhpcy5fb25I
aWRlUG9wb3Zlci5iaW5kKHRoaXMpLCB0cnVlKTsKICAgICAgICAgICAgIGVsZW1lbnQuYWRkRXZl
bnRMaXN0ZW5lcigibW91c2Vkb3duIiwgdGhpcy5fbW91c2VEb3duLmJpbmQodGhpcyksIHRydWUp
OwotICAgICAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLCB0aGlzLl9z
Y3JvbGwuYmluZCh0aGlzKSwgdHJ1ZSk7CiAgICAgICAgIH0KIAogICAgICAgICB0aGlzLl90ZXh0
Vmlld2VyLmJlZ2luVXBkYXRlcygpOwpAQCAtNjQyLDE2ICs2NDEsOCBAQCBXZWJJbnNwZWN0b3Iu
U291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gdGhpcy5fZGVsZWdhdGUu
c3VnZ2VzdGVkRmlsZU5hbWUoKTsKICAgICB9LAogCi0gICAgX3Njcm9sbDogZnVuY3Rpb24oZXZl
bnQpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fcG9wb3ZlckhlbHBlcikKLSAgICAgICAgICAg
IHRoaXMuX3BvcG92ZXJIZWxwZXIuaGlkZVBvcG92ZXIoKTsKLSAgICB9LAotCiAgICAgX21vdXNl
RG93bjogZnVuY3Rpb24oZXZlbnQpCiAgICAgewotICAgICAgICBpZiAodGhpcy5fcG9wb3Zlckhl
bHBlcikKLSAgICAgICAgICAgIHRoaXMuX3BvcG92ZXJIZWxwZXIuaGlkZVBvcG92ZXIoKTsKICAg
ICAgICAgaWYgKGV2ZW50LmJ1dHRvbiAhPSAwIHx8IGV2ZW50LmFsdEtleSB8fCBldmVudC5jdHJs
S2V5IHx8IGV2ZW50Lm1ldGFLZXkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIHZhciB0
YXJnZXQgPSBldmVudC50YXJnZXQuZW5jbG9zaW5nTm9kZU9yU2VsZldpdGhDbGFzcygid2Via2l0
LWxpbmUtbnVtYmVyIik7CkBAIC03MzAsNyArNzIxLDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZy
YW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIGNvbnRhaW5lcjsKICAgICB9LAogCi0g
ICAgX29uU2hvd1BvcG92ZXI6IGZ1bmN0aW9uKGVsZW1lbnQsIHBvcG92ZXIpCisgICAgX29uU2hv
d1BvcG92ZXI6IGZ1bmN0aW9uKGVsZW1lbnQsIHNob3dDYWxsYmFjaykKICAgICB7CiAgICAgICAg
IGlmICghdGhpcy5fdGV4dFZpZXdlci5yZWFkT25seSkgewogICAgICAgICAgICAgdGhpcy5fcG9w
b3ZlckhlbHBlci5oaWRlUG9wb3ZlcigpOwpAQCAtNzQwLDM5ICs3MzEsMTEgQEAgV2ViSW5zcGVj
dG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKIAogICAgICAgICBmdW5jdGlvbiBzaG93T2Jq
ZWN0UG9wb3ZlcihyZXN1bHQsIHdhc1Rocm93bikKICAgICAgICAgewotICAgICAgICAgICAgaWYg
KHBvcG92ZXIuZGlzcG9zZWQpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
aWYgKHdhc1Rocm93biB8fCAhdGhpcy5fZGVsZWdhdGUuZGVidWdnZXJQYXVzZWQoKSkgeworICAg
ICAgICAgICAgaWYgKCF0aGlzLl9kZWxlZ2F0ZS5kZWJ1Z2dlclBhdXNlZCgpKSB7CiAgICAgICAg
ICAgICAgICAgdGhpcy5fcG9wb3ZlckhlbHBlci5oaWRlUG9wb3ZlcigpOwogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZhciBwb3BvdmVyQ29udGVu
dEVsZW1lbnQgPSBudWxsOwotICAgICAgICAgICAgaWYgKHJlc3VsdC50eXBlICE9PSAib2JqZWN0
IikgewotICAgICAgICAgICAgICAgIHBvcG92ZXJDb250ZW50RWxlbWVudCA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoInNwYW4iKTsKLSAgICAgICAgICAgICAgICBwb3BvdmVyQ29udGVudEVsZW1l
bnQuY2xhc3NOYW1lID0gIm1vbm9zcGFjZSBjb25zb2xlLWZvcm1hdHRlZC0iICsgcmVzdWx0LnR5
cGU7Ci0gICAgICAgICAgICAgICAgcG9wb3ZlckNvbnRlbnRFbGVtZW50LnN0eWxlLndoaXRlU3Bh
Y2UgPSAicHJlIjsKLSAgICAgICAgICAgICAgICBwb3BvdmVyQ29udGVudEVsZW1lbnQudGV4dENv
bnRlbnQgPSByZXN1bHQuZGVzY3JpcHRpb247Ci0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC50
eXBlID09PSAic3RyaW5nIikKLSAgICAgICAgICAgICAgICAgICAgcG9wb3ZlckNvbnRlbnRFbGVt
ZW50LnRleHRDb250ZW50ID0gIlwiIiArIHBvcG92ZXJDb250ZW50RWxlbWVudC50ZXh0Q29udGVu
dCArICJcIiI7Ci0gICAgICAgICAgICAgICAgcG9wb3Zlci5zaG93KHBvcG92ZXJDb250ZW50RWxl
bWVudCwgZWxlbWVudCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHZh
ciBwb3BvdmVyQ29udGVudEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsK
LQotICAgICAgICAgICAgICAgIHZhciB0aXRsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJkaXYiKTsKLSAgICAgICAgICAgICAgICB0aXRsZUVsZW1lbnQuY2xhc3NOYW1lID0gInNv
dXJjZS1mcmFtZS1wb3BvdmVyLXRpdGxlIG1vbm9zcGFjZSI7Ci0gICAgICAgICAgICAgICAgdGl0
bGVFbGVtZW50LnRleHRDb250ZW50ID0gcmVzdWx0LmRlc2NyaXB0aW9uOwotICAgICAgICAgICAg
ICAgIHBvcG92ZXJDb250ZW50RWxlbWVudC5hcHBlbmRDaGlsZCh0aXRsZUVsZW1lbnQpOwotCi0g
ICAgICAgICAgICAgICAgdmFyIHNlY3Rpb24gPSBuZXcgV2ViSW5zcGVjdG9yLk9iamVjdFByb3Bl
cnRpZXNTZWN0aW9uKHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgc2VjdGlvbi5leHBhbmRlZCA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgc2VjdGlvbi5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoInNv
dXJjZS1mcmFtZS1wb3BvdmVyLXRyZWUiKTsKLSAgICAgICAgICAgICAgICBzZWN0aW9uLmhlYWRl
ckVsZW1lbnQuYWRkU3R5bGVDbGFzcygiaGlkZGVuIik7Ci0gICAgICAgICAgICAgICAgcG9wb3Zl
ckNvbnRlbnRFbGVtZW50LmFwcGVuZENoaWxkKHNlY3Rpb24uZWxlbWVudCk7Ci0KLSAgICAgICAg
ICAgICAgICBjb25zdCBwb3BvdmVyV2lkdGggPSAzMDA7Ci0gICAgICAgICAgICAgICAgY29uc3Qg
cG9wb3ZlckhlaWdodCA9IDI1MDsKLSAgICAgICAgICAgICAgICBwb3BvdmVyLnNob3cocG9wb3Zl
ckNvbnRlbnRFbGVtZW50LCBlbGVtZW50LCBwb3BvdmVyV2lkdGgsIHBvcG92ZXJIZWlnaHQpOwot
ICAgICAgICAgICAgfQorICAgICAgICAgICAgc2hvd0NhbGxiYWNrKHJlc3VsdCwgd2FzVGhyb3du
KTsKICAgICAgICAgICAgIHRoaXMuX2hpZ2hsaWdodEVsZW1lbnQuYWRkU3R5bGVDbGFzcygic291
cmNlLWZyYW1lLWV2YWwtZXhwcmVzc2lvbiIpOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaGVhcFByb2ZpbGVyLmNzcyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaGVhcFByb2ZpbGVyLmNzcwppbmRleCA2MmJk
MGEwLi4wYjM5NmY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL2hlYXBQcm9maWxlci5jc3MKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9oZWFwUHJvZmlsZXIuY3NzCkBAIC0xOTQsNiArMTk0LDEwIEBAIGJvZHkuaW5hY3RpdmUg
LmhlYXAtc25hcHNob3Qtc2lkZWJhci10cmVlLWl0ZW0ud2FpdC5zZWxlY3RlZCAuaWNvbiB7CiAg
ICAgbWFyZ2luLXJpZ2h0OiA4cHg7CiB9CiAKKy5kZXRhaWxlZC1oZWFwc2hvdC12aWV3IHRyOm5v
dCguc2VsZWN0ZWQpIHRkLm9iamVjdC1jb2x1bW4gc3Bhbi5oaWdobGlnaHQgeworICAgIGJhY2tn
cm91bmQtY29sb3I6IHJnYigyNTUsIDI1NSwgMjAwKTsKK30KKwogLmhlYXBzaG90LWhlbHAtc3Rh
dHVzLWJhci1pdGVtIC5nbHlwaCB7CiAgICAgLXdlYmtpdC1tYXNrLXBvc2l0aW9uOiAtMTYwcHgg
MDsKIH0K
</data>
<flag name="commit-queue"
          id="106329"
          type_id="3"
          status="-"
          setter="mnaganov"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109163</attachid>
            <date>2011-09-29 07:39:38 -0700</date>
            <delta_ts>2011-10-04 14:20:02 -0700</delta_ts>
            <desc>JSC fix again</desc>
            <filename>patch-61179</filename>
            <type>text/plain</type>
            <size>34179</size>
            <attacher name="Mikhail Naganov">mnaganov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBiNzY3ZmRjLi5lZjFiYjkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjYg
QEAKKzIwMTEtMDktMjkgIE1pa2hhaWwgTmFnYW5vdiAgPG1uYWdhbm92QGNocm9taXVtLm9yZz4K
KworICAgICAgICBXZWIgSW5zcGVjdG9yOiBbQ2hyb21pdW1dIEFkZCBhbiBhYmlsaXR5IHRvIGxv
b2sgdXAgYW5kIGV4cGxvcmUgYW4gb2JqZWN0IGZyb20gYSBoZWFwIHByb2ZpbGUuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MTE3OQorCisgICAgICAg
IFRoaXMgaXMgZXh0ZXJlbWVseSBoZWxwZnVsIHdoZW4gZGVhbGluZyB3aXRoIERPTSB3cmFwcGVy
cywgYXMKKyAgICAgICAgdGhlaXIgcHJvcGVydGllcyBhcmUgbW9zdGx5IGltcGxlbWVudGVkIHdp
dGggZ2V0dGVycyBhbmQgdGh1cyBub3QKKyAgICAgICAgc3RvcmVkIGluIGhlYXAgc25hcHNob3Rz
LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogRW5n
bGlzaC5scHJvai9sb2NhbGl6ZWRTdHJpbmdzLmpzOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1Nj
cmlwdFByb2ZpbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFByb2ZpbGVyOjpnZXRP
YmplY3RCeUhlYXBPYmplY3RJZCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0UHJvZmls
ZXIuaDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRQcm9maWxlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHRQcm9maWxlcjo6Z2V0T2JqZWN0QnlIZWFwT2JqZWN0SWQpOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmg6CisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3Rvci5qc29uOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNv
bnRyb2xsZXIpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQcm9maWxlckFnZW50OjpJbnNwZWN0b3JQcm9maWxl
ckFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmdldE9i
amVjdEJ5SGVhcE9iamVjdElkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmls
ZXJBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRGV0YWlsZWRIZWFwc2hv
dEdyaWROb2Rlcy5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RHcmlkTm9k
ZS5wcm90b3R5cGUuaGFzSG92ZXJNZXNzYWdlLmZhbHNlLnF1ZXJ5T2JqZWN0Q29udGVudCk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90R2VuZXJpY09iamVjdE5vZGUpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEdlbmVyaWNPYmplY3ROb2RlLnByb3RvdHlw
ZS5nZXQgZGF0YSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90R2VuZXJpY09i
amVjdE5vZGUucHJvdG90eXBlLnF1ZXJ5T2JqZWN0Q29udGVudC5lbHNlLmZvcm1hdFJlc3VsdCk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90R2VuZXJpY09iamVjdE5vZGUucHJv
dG90eXBlLnF1ZXJ5T2JqZWN0Q29udGVudCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90R2VuZXJpY09iamVjdE5vZGUucHJvdG90eXBlLnNob3J0ZW5XaW5kb3dVUkwpOgorICAg
ICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRGV0YWlsZWRIZWFwc2hvdFZpZXcuanM6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuRGV0YWlsZWRIZWFwc2hvdFZpZXcucHJvdG90eXBlLl9zaG93T2Jq
ZWN0UG9wb3Zlcik6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3Qu
anM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZS5wcm90b3R5cGUuZ2V0
IGNhbkJlUXVlcmllZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZS5w
cm90b3R5cGUuZ2V0IGZsYWdzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RO
b2RlLnByb3RvdHlwZS5nZXQgaXNET01XaW5kb3cpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdC5wcm90b3R5cGUuX2luaXQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBT
bmFwc2hvdC5wcm90b3R5cGUuZGlzcG9zZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90LnByb3RvdHlwZS5fZmxhZ3NPZk5vZGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhl
YXBTbmFwc2hvdC5wcm90b3R5cGUuX2NhbGN1bGF0ZUZsYWdzKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5IZWFwU25hcHNob3QucHJvdG90eXBlLnVwZGF0ZVN0YXRpY0RhdGEpOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGVzUHJvdmlkZXIucHJvdG90eXBlLl9zZXJpYWxp
emUpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90UHJveHkuanM6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90UHJveHkucHJvdG90eXBlLmdldCBu
b2RlRmxhZ3MpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvT2JqZWN0UHJvcGVydGll
c1NlY3Rpb24uanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuT2JqZWN0UHJvcGVydGllc1NlY3Rp
b24ucHJvdG90eXBlLm9uUHJvcGVydGllc1JlY2VpdmVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5PYmplY3RQcm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGUudXBkYXRlLmNhbGxiYWNrKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5PYmplY3RQcm9wZXJ0aWVzU2VjdGlvbi5wcm90b3R5cGUudXBk
YXRlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1BvcG92ZXIuanM6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuT2JqZWN0UG9wb3ZlckhlbHBlcik6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuT2JqZWN0UG9wb3ZlckhlbHBlci5wcm90b3R5cGUuX3Nob3dPYmplY3RQb3BvdmVyLnNob3dP
YmplY3RQb3BvdmVyLmVsc2Uuc2VjdGlvbi5vblByb3BlcnRpZXNSZWNlaXZlZCk6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuT2JqZWN0UG9wb3ZlckhlbHBlci5wcm90b3R5cGUuX3Nob3dPYmplY3RQ
b3BvdmVyKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpzOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5faW5pdGlhbGl6ZVRl
eHRWaWV3ZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5f
bW91c2VEb3duKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUu
X29uU2hvd1BvcG92ZXIuc2hvd09iamVjdFBvcG92ZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlNvdXJjZUZyYW1lLnByb3RvdHlwZS5fb25TaG93UG9wb3Zlcik6CisgICAgICAgICogaW5zcGVj
dG9yL2Zyb250LWVuZC9oZWFwUHJvZmlsZXIuY3NzOgorICAgICAgICAoLmRldGFpbGVkLWhlYXBz
aG90LXZpZXcgdHI6bm90KC5zZWxlY3RlZCkgdGQub2JqZWN0LWNvbHVtbiBzcGFuLmhpZ2hsaWdo
dCk6CisKIDIwMTEtMDktMjkgIFZzZXZvbG9kIFZsYXNvdiAgPHZzZXZpa0BjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogTWFrZSBzZWFyY2gtaW4tcmVzb3VyY2UgdGVzdCBz
aW1wbGVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvRW5nbGlzaC5scHJvai9sb2NhbGl6
ZWRTdHJpbmdzLmpzIGIvU291cmNlL1dlYkNvcmUvRW5nbGlzaC5scHJvai9sb2NhbGl6ZWRTdHJp
bmdzLmpzCmluZGV4IGEzY2VmYTE4MzgyMjU1NDk4YzllOTdkM2QxYzc1ODJmODY5ZGMzYjkuLjIw
MDQxZDUwMDdjYTIyZjc5YTgwMjcxYmRkZDE4YjNlNThmYWIxMmUgMTAwNjQ0CkdJVCBiaW5hcnkg
cGF0Y2gKZGVsdGEgODMKemNtWnFxIX5FX0teOUdpR2xUU0BqYkBnTSZYRERHJVVgUypyMUw5MUU5
M1l0bEJ2VG9iNy1FNnF3bV9gSmZLUWIqCkcwfll8e0NsY2lWCgpkZWx0YSA5ClFjbWFGJmhxPmhz
XjlHaUcwMl9oQEJMRHlaCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2NyaXB0UHJvZmlsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0UHJv
ZmlsZXIuY3BwCmluZGV4IDM0NjhhZTMuLjMxZTYyNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdFByb2ZpbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TY3JpcHRQcm9maWxlci5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRl
ICJTY3JpcHRQcm9maWxlci5oIgogCiAjaW5jbHVkZSAiR0NDb250cm9sbGVyLmgiCisjaW5jbHVk
ZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVk
ZSA8cHJvZmlsZXIvUHJvZmlsZXIuaD4KIApAQCAtNDEsNiArNDIsMTEgQEAgdm9pZCBTY3JpcHRQ
cm9maWxlcjo6Y29sbGVjdEdhcmJhZ2UoKQogICAgIGdjQ29udHJvbGxlcigpLmdhcmJhZ2VDb2xs
ZWN0Tm93KCk7CiB9CiAKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IFNjcmlwdFByb2ZpbGVy
OjpnZXRPYmplY3RCeUhlYXBPYmplY3RJZCh1bnNpZ25lZCwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
KikKK3sKKyAgICByZXR1cm4gSW5zcGVjdG9yVmFsdWU6Om51bGwoKTsKK30KKwogdm9pZCBTY3Jp
cHRQcm9maWxlcjo6c3RhcnQoU2NyaXB0U3RhdGUqIHN0YXRlLCBjb25zdCBTdHJpbmcmIHRpdGxl
KQogewogICAgIEpTQzo6UHJvZmlsZXI6OnByb2ZpbGVyKCktPnN0YXJ0UHJvZmlsaW5nKHN0YXRl
LCBzdHJpbmdUb1VTdHJpbmcodGl0bGUpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NjcmlwdFByb2ZpbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
Y3JpcHRQcm9maWxlci5oCmluZGV4IDA1ZDVlOTIuLjFiOTVjZjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFByb2ZpbGVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0UHJvZmlsZXIuaApAQCAtMzUsNiArMzUsOSBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEluamVjdGVkU2NyaXB0TWFuYWdlcjsKK2NsYXNzIElu
c3BlY3RvclZhbHVlOworCiBjbGFzcyBTY3JpcHRQcm9maWxlciB7CiAgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoU2NyaXB0UHJvZmlsZXIpOwogcHVibGljOgpAQCAtNDgsNiArNTEsNyBAQCBwdWJs
aWM6CiAgICAgfTsKIAogICAgIHN0YXRpYyB2b2lkIGNvbGxlY3RHYXJiYWdlKCk7CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGdldE9iamVjdEJ5SGVhcE9iamVjdElkKHVu
c2lnbmVkIGlkLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqKTsKICAgICBzdGF0aWMgdm9pZCBzdGFy
dChTY3JpcHRTdGF0ZSogc3RhdGUsIGNvbnN0IFN0cmluZyYgdGl0bGUpOwogICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFNjcmlwdFByb2ZpbGU+IHN0b3AoU2NyaXB0U3RhdGUqIHN0YXRlLCBjb25zdCBT
dHJpbmcmIHRpdGxlKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTY3JpcHRIZWFwU25hcHNob3Q+
IHRha2VIZWFwU25hcHNob3QoY29uc3QgU3RyaW5nJiwgSGVhcFNuYXBzaG90UHJvZ3Jlc3MqKSB7
IHJldHVybiAwOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3Jp
cHRQcm9maWxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRQcm9maWxl
ci5jcHAKaW5kZXggZmI0ZTk3NS4uZGMwZmIyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvU2NyaXB0UHJvZmlsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIlNjcmlwdFByb2ZpbGVyLmgiCiAKKyNpbmNsdWRlICJJbmplY3Rl
ZFNjcmlwdC5oIgogI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgogI2luY2x1ZGUgIlJldGFp
bmVkRE9NSW5mby5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgpAQCAtNjUsNiArNjYsMzUgQEAg
dm9pZCBTY3JpcHRQcm9maWxlcjo6Y29sbGVjdEdhcmJhZ2UoKQogICAgIHdoaWxlICghdjg6OlY4
OjpJZGxlTm90aWZpY2F0aW9uKCkpIHsgfQogfQogCitQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVl
PiBTY3JpcHRQcm9maWxlcjo6Z2V0T2JqZWN0QnlIZWFwT2JqZWN0SWQodW5zaWduZWQgaWQsIElu
amVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQoreworICAgIC8vIEFz
IGlkcyBhcmUgdW5pcXVlLCBpdCBkb2Vzbid0IG1hdHRlciwgSGVhcEdyYXBoTm9kZSBmcm9tIHdo
aWNoIEhlYXBTbmFwc2hvdAorICAgIC8vIHdpbGwgYmUgdXNlZC4gV2UgbmVlZCB0byBmaW5kIGZp
cnN0IEhlYXBTbmFwc2hvdCBjb250YWluaW5nIGEgbm9kZSB3aXRoIHRoZQorICAgIC8vIHNwZWNp
ZmllZCBpZC4KKyAgICBjb25zdCB2ODo6SGVhcEdyYXBoTm9kZSogbm9kZSA9IDA7CisgICAgZm9y
IChpbnQgaSA9IDAsIGwgPSB2ODo6SGVhcFByb2ZpbGVyOjpHZXRTbmFwc2hvdHNDb3VudCgpOyBp
IDwgbDsgKytpKSB7CisgICAgICAgIGNvbnN0IHY4OjpIZWFwU25hcHNob3QqIHNuYXBzaG90ID0g
djg6OkhlYXBQcm9maWxlcjo6R2V0U25hcHNob3QoaSk7CisgICAgICAgIG5vZGUgPSBzbmFwc2hv
dC0+R2V0Tm9kZUJ5SWQoaWQpOworICAgICAgICBpZiAobm9kZSkKKyAgICAgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBJbnNwZWN0b3JWYWx1ZTo6
bnVsbCgpOworICAgIHY4OjpIYW5kbGVTY29wZSBzY29wZTsKKyAgICB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gdmFsdWUgPSBub2RlLT5HZXRIZWFwVmFsdWUoKTsKKyAgICBpZiAoIXZhbHVlLT5Jc09i
amVjdCgpKQorICAgICAgICByZXR1cm4gSW5zcGVjdG9yVmFsdWU6Om51bGwoKTsKKyAgICB2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCh2YWx1ZS5Bczx2ODo6T2JqZWN0PigpKTsKKyAgICB2
ODo6TG9jYWw8djg6OkNvbnRleHQ+IGNyZWF0aW9uQ29udGV4dCA9IG9iamVjdC0+Q3JlYXRpb25D
b250ZXh0KCk7CisgICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNyZWF0aW9uU2NvcGUoY3JlYXRpb25D
b250ZXh0KTsKKyAgICBTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUgPSBTY3JpcHRTdGF0ZTo6Zm9y
Q29udGV4dChjcmVhdGlvbkNvbnRleHQpOworICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2Ny
aXB0ID0gaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLT5pbmplY3RlZFNjcmlwdEZvcihzY3JpcHRTdGF0
ZSk7CisgICAgaWYgKCFpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCisgICAgICAgIHJldHVy
biBpbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KHZhbHVlLCAiIik7CisgICAgZWxzZQorICAgICAg
ICByZXR1cm4gSW5zcGVjdG9yVmFsdWU6Om51bGwoKTsKK30KKwogbmFtZXNwYWNlIHsKIAogY2xh
c3MgQWN0aXZpdHlDb250cm9sQWRhcHRlciA6IHB1YmxpYyB2ODo6QWN0aXZpdHlDb250cm9sIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRQcm9maWxlci5oCmluZGV4IDkyYTk4
MGIuLmM0OTVlMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Njcmlw
dFByb2ZpbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0UHJvZmls
ZXIuaApAQCAtMzksNyArMzksOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIElu
c3BlY3Rvck9iamVjdDsKK2NsYXNzIEluamVjdGVkU2NyaXB0TWFuYWdlcjsKK2NsYXNzIEluc3Bl
Y3RvclZhbHVlOwogCiBjbGFzcyBTY3JpcHRQcm9maWxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoU2NyaXB0UHJvZmlsZXIpOwpAQCAtNTQsNiArNTUsNyBAQCBwdWJsaWM6CiAgICAgfTsK
IAogICAgIHN0YXRpYyB2b2lkIGNvbGxlY3RHYXJiYWdlKCk7CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yVmFsdWU+IGdldE9iamVjdEJ5SGVhcE9iamVjdElkKHVuc2lnbmVkIGlkLCBJ
bmplY3RlZFNjcmlwdE1hbmFnZXIqKTsKICAgICBzdGF0aWMgdm9pZCBzdGFydChTY3JpcHRTdGF0
ZSogc3RhdGUsIGNvbnN0IFN0cmluZyYgdGl0bGUpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNj
cmlwdFByb2ZpbGU+IHN0b3AoU2NyaXB0U3RhdGUqIHN0YXRlLCBjb25zdCBTdHJpbmcmIHRpdGxl
KTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTY3JpcHRIZWFwU25hcHNob3Q+IHRha2VIZWFwU25h
cHNob3QoY29uc3QgU3RyaW5nJiB0aXRsZSwgSGVhcFNuYXBzaG90UHJvZ3Jlc3MqKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbiBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbgppbmRleCAwOWQyZGI2Li5hMDVkYjAwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24KKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uCkBAIC0xOTQwLDYgKzE5NDAs
MTUgQEAKICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIm5h
bWUiOiAiY29sbGVjdEdhcmJhZ2UiCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICJuYW1lIjogImdldE9iamVjdEJ5SGVhcE9iamVjdElkIiwKKyAgICAgICAg
ICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJv
YmplY3RJZCIsICJ0eXBlIjogImludGVnZXIiIH0KKyAgICAgICAgICAgICAgICBdLAorICAgICAg
ICAgICAgICAgICJyZXR1cm5zIjogWworICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInJl
c3VsdCIsICIkcmVmIjogIlJ1bnRpbWUuUmVtb3RlT2JqZWN0IiwgImRlc2NyaXB0aW9uIjogIkV2
YWx1YXRpb24gcmVzdWx0LiIgfQorICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgIH0KICAg
ICAgICAgXSwKICAgICAgICAgImV2ZW50cyI6IFsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRleCA0NGFlMmEyLi5kMTNhZTNkZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcApA
QCAtMTE1LDcgKzExNSw3IEBAIEluc3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xs
ZXIoUGFnZSogcGFnZSwgSW5zcGVjdG9yQ2xpZW50KiBpbnNwZWN0b3JDCiAjaWYgRU5BQkxFKEpB
VkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgLCBtX2RlYnVnZ2VyQWdlbnQoUGFnZURlYnVnZ2VyQWdl
bnQ6OmNyZWF0ZShtX2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0KCksIG1fc3RhdGUuZ2V0KCksIHBh
Z2UsIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmdldCgpKSkKICAgICAsIG1fZG9tRGVidWdnZXJB
Z2VudChJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpjcmVhdGUobV9pbnN0cnVtZW50aW5nQWdl
bnRzLmdldCgpLCBtX3N0YXRlLmdldCgpLCBtX2RvbUFnZW50LmdldCgpLCBtX2RlYnVnZ2VyQWdl
bnQuZ2V0KCksIG1faW5zcGVjdG9yQWdlbnQuZ2V0KCkpKQotICAgICwgbV9wcm9maWxlckFnZW50
KEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OmNyZWF0ZShtX2luc3RydW1lbnRpbmdBZ2VudHMuZ2V0
KCksIG1fY29uc29sZUFnZW50LmdldCgpLCBwYWdlLCBtX3N0YXRlLmdldCgpKSkKKyAgICAsIG1f
cHJvZmlsZXJBZ2VudChJbnNwZWN0b3JQcm9maWxlckFnZW50OjpjcmVhdGUobV9pbnN0cnVtZW50
aW5nQWdlbnRzLmdldCgpLCBtX2NvbnNvbGVBZ2VudC5nZXQoKSwgcGFnZSwgbV9zdGF0ZS5nZXQo
KSwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuZ2V0KCkpKQogI2VuZGlmCiAjaWYgRU5BQkxFKFdP
UktFUlMpCiAgICAgLCBtX3dvcmtlckFnZW50KEluc3BlY3RvcldvcmtlckFnZW50OjpjcmVhdGUo
bV9pbnN0cnVtZW50aW5nQWdlbnRzLmdldCgpLCBtX3N0YXRlLmdldCgpKSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmNwcAppbmRleCBi
YjUzZTczLi5lZjA0NDI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwCkBAIC02MiwxNiArNjIsMTcgQEAgc3RhdGljIGNvbnN0
IGNoYXIqIGNvbnN0IFVzZXJJbml0aWF0ZWRQcm9maWxlTmFtZSA9ICJvcmcud2Via2l0LnByb2Zp
bGVzLnVzZXItaW4KIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBDUFVQcm9maWxlVHlwZSA9ICJD
UFUiOwogc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IEhlYXBQcm9maWxlVHlwZSA9ICJIRUFQIjsK
IAotUGFzc093blB0cjxJbnNwZWN0b3JQcm9maWxlckFnZW50PiBJbnNwZWN0b3JQcm9maWxlckFn
ZW50OjpjcmVhdGUoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgSW5z
cGVjdG9yQ29uc29sZUFnZW50KiBjb25zb2xlQWdlbnQsIFBhZ2UqIGluc3BlY3RlZFBhZ2UsIElu
c3BlY3RvclN0YXRlKiBpbnNwZWN0b3JTdGF0ZSkKK1Bhc3NPd25QdHI8SW5zcGVjdG9yUHJvZmls
ZXJBZ2VudD4gSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Y3JlYXRlKEluc3RydW1lbnRpbmdBZ2Vu
dHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEluc3BlY3RvckNvbnNvbGVBZ2VudCogY29uc29sZUFn
ZW50LCBQYWdlKiBpbnNwZWN0ZWRQYWdlLCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUs
IEluamVjdGVkU2NyaXB0TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQogewotICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudChpbnN0cnVtZW50aW5nQWdl
bnRzLCBjb25zb2xlQWdlbnQsIGluc3BlY3RlZFBhZ2UsIGluc3BlY3RvclN0YXRlKSk7CisgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBJbnNwZWN0b3JQcm9maWxlckFnZW50KGluc3RydW1lbnRpbmdB
Z2VudHMsIGNvbnNvbGVBZ2VudCwgaW5zcGVjdGVkUGFnZSwgaW5zcGVjdG9yU3RhdGUsIGluamVj
dGVkU2NyaXB0TWFuYWdlcikpOwogfQogCi1JbnNwZWN0b3JQcm9maWxlckFnZW50OjpJbnNwZWN0
b3JQcm9maWxlckFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMs
IEluc3BlY3RvckNvbnNvbGVBZ2VudCogY29uc29sZUFnZW50LCBQYWdlKiBpbnNwZWN0ZWRQYWdl
LCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUpCitJbnNwZWN0b3JQcm9maWxlckFnZW50
OjpJbnNwZWN0b3JQcm9maWxlckFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqIGluc3RydW1lbnRp
bmdBZ2VudHMsIEluc3BlY3RvckNvbnNvbGVBZ2VudCogY29uc29sZUFnZW50LCBQYWdlKiBpbnNw
ZWN0ZWRQYWdlLCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9yU3RhdGUsIEluamVjdGVkU2NyaXB0
TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQogICAgIDogbV9pbnN0cnVtZW50aW5nQWdl
bnRzKGluc3RydW1lbnRpbmdBZ2VudHMpCiAgICAgLCBtX2NvbnNvbGVBZ2VudChjb25zb2xlQWdl
bnQpCiAgICAgLCBtX2luc3BlY3RlZFBhZ2UoaW5zcGVjdGVkUGFnZSkKICAgICAsIG1faW5zcGVj
dG9yU3RhdGUoaW5zcGVjdG9yU3RhdGUpCisgICAgLCBtX2luamVjdGVkU2NyaXB0TWFuYWdlcihp
bmplY3RlZFNjcmlwdE1hbmFnZXIpCiAgICAgLCBtX2Zyb250ZW5kKDApCiAgICAgLCBtX2VuYWJs
ZWQoZmFsc2UpCiAgICAgLCBtX3JlY29yZGluZ1VzZXJJbml0aWF0ZWRQcm9maWxlKGZhbHNlKQpA
QCAtMzc4LDYgKzM3OSwxNCBAQCB2b2lkIEluc3BlY3RvclByb2ZpbGVyQWdlbnQ6OnRvZ2dsZVJl
Y29yZEJ1dHRvbihib29sIGlzUHJvZmlsaW5nKQogICAgICAgICBtX2Zyb250ZW5kLT5zZXRSZWNv
cmRpbmdQcm9maWxlKGlzUHJvZmlsaW5nKTsKIH0KIAordm9pZCBJbnNwZWN0b3JQcm9maWxlckFn
ZW50OjpnZXRPYmplY3RCeUhlYXBPYmplY3RJZChFcnJvclN0cmluZyosIGludCBpZCwgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4qIHJlc3VsdCkKK3sKKyAgICBpZiAobV9mcm9udGVuZCkgeworICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGhlYXBPYmplY3QgPSBTY3JpcHRQcm9maWxlcjo6
Z2V0T2JqZWN0QnlIZWFwT2JqZWN0SWQoaWQsIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKTsKKyAg
ICAgICAgaGVhcE9iamVjdC0+YXNPYmplY3QocmVzdWx0KTsKKyAgICB9Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKSAm
JiBFTkFCTEUoSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclByb2ZpbGVyQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JQcm9maWxlckFnZW50LmgKaW5kZXggNDA5NDFlOC4uZWVkN2UyMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oCkBAIC00MSw2
ICs0MSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgSW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyOwogY2xhc3MgSW5zcGVjdG9yQXJyYXk7CiBjbGFzcyBJbnNwZWN0b3JDb25zb2xlQWdl
bnQ7CiBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZDsKQEAgLTU2LDcgKzU3LDcgQEAgdHlwZWRlZiBT
dHJpbmcgRXJyb3JTdHJpbmc7CiBjbGFzcyBJbnNwZWN0b3JQcm9maWxlckFnZW50IHsKICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JQcm9maWxlckFnZW50KTsgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8SW5zcGVjdG9yUHJv
ZmlsZXJBZ2VudD4gY3JlYXRlKEluc3RydW1lbnRpbmdBZ2VudHMqLCBJbnNwZWN0b3JDb25zb2xl
QWdlbnQqLCBQYWdlKiwgSW5zcGVjdG9yU3RhdGUqKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxJ
bnNwZWN0b3JQcm9maWxlckFnZW50PiBjcmVhdGUoSW5zdHJ1bWVudGluZ0FnZW50cyosIEluc3Bl
Y3RvckNvbnNvbGVBZ2VudCosIFBhZ2UqLCBJbnNwZWN0b3JTdGF0ZSosIEluamVjdGVkU2NyaXB0
TWFuYWdlciopOwogICAgIHZpcnR1YWwgfkluc3BlY3RvclByb2ZpbGVyQWdlbnQoKTsKIAogICAg
IHZvaWQgYWRkUHJvZmlsZShQYXNzUmVmUHRyPFNjcmlwdFByb2ZpbGU+IHBycFByb2ZpbGUsIHVu
c2lnbmVkIGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMKTsKQEAgLTkwLDYgKzkx
LDggQEAgcHVibGljOgogICAgIHZvaWQgdGFrZUhlYXBTbmFwc2hvdChFcnJvclN0cmluZyopOwog
ICAgIHZvaWQgdG9nZ2xlUmVjb3JkQnV0dG9uKGJvb2wgaXNQcm9maWxpbmcpOwogCisgICAgdm9p
ZCBnZXRPYmplY3RCeUhlYXBPYmplY3RJZChFcnJvclN0cmluZyosIGludCBpZCwgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4qIHJlc3VsdCk7CisKIHByaXZhdGU6CiAgICAgdHlwZWRlZiBIYXNoTWFw
PHVuc2lnbmVkIGludCwgUmVmUHRyPFNjcmlwdFByb2ZpbGU+ID4gUHJvZmlsZXNNYXA7CiAgICAg
dHlwZWRlZiBIYXNoTWFwPHVuc2lnbmVkIGludCwgUmVmUHRyPFNjcmlwdEhlYXBTbmFwc2hvdD4g
PiBIZWFwU25hcHNob3RzTWFwOwpAQCAtOTcsNyArMTAwLDcgQEAgcHJpdmF0ZToKICAgICB2b2lk
IHJlc2V0RnJvbnRlbmRQcm9maWxlcygpOwogICAgIHZvaWQgcmVzdG9yZUVuYWJsZW1lbnQoKTsK
IAotICAgIEluc3BlY3RvclByb2ZpbGVyQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIEluc3Bl
Y3RvckNvbnNvbGVBZ2VudCosIFBhZ2UqLCBJbnNwZWN0b3JTdGF0ZSopOworICAgIEluc3BlY3Rv
clByb2ZpbGVyQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIEluc3BlY3RvckNvbnNvbGVBZ2Vu
dCosIFBhZ2UqLCBJbnNwZWN0b3JTdGF0ZSosIEluamVjdGVkU2NyaXB0TWFuYWdlciopOwogICAg
IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjcmVhdGVQcm9maWxlSGVhZGVyKGNvbnN0IFNj
cmlwdFByb2ZpbGUmIHByb2ZpbGUpOwogICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBj
cmVhdGVTbmFwc2hvdEhlYWRlcihjb25zdCBTY3JpcHRIZWFwU25hcHNob3QmIHNuYXBzaG90KTsK
IApAQCAtMTA1LDYgKzEwOCw3IEBAIHByaXZhdGU6CiAgICAgSW5zcGVjdG9yQ29uc29sZUFnZW50
KiBtX2NvbnNvbGVBZ2VudDsKICAgICBQYWdlKiBtX2luc3BlY3RlZFBhZ2U7CiAgICAgSW5zcGVj
dG9yU3RhdGUqIG1faW5zcGVjdG9yU3RhdGU7CisgICAgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiBt
X2luamVjdGVkU2NyaXB0TWFuYWdlcjsKICAgICBJbnNwZWN0b3JGcm9udGVuZDo6UHJvZmlsZXIq
IG1fZnJvbnRlbmQ7CiAgICAgYm9vbCBtX2VuYWJsZWQ7CiAgICAgYm9vbCBtX3JlY29yZGluZ1Vz
ZXJJbml0aWF0ZWRQcm9maWxlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9EZXRhaWxlZEhlYXBzaG90R3JpZE5vZGVzLmpzIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9EZXRhaWxlZEhlYXBzaG90R3JpZE5vZGVzLmpzCmluZGV4IDc2
MTAxMmMuLjQzN2M5MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvRGV0YWlsZWRIZWFwc2hvdEdyaWROb2Rlcy5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0RldGFpbGVkSGVhcHNob3RHcmlkTm9kZXMuanMKQEAgLTU2LDkg
KzU2LDggQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEdyaWROb2RlLnByb3RvdHlwZSA9IHsK
IAogICAgIGhhc0hvdmVyTWVzc2FnZTogZmFsc2UsCiAKLSAgICBob3Zlck1lc3NhZ2U6IGZ1bmN0
aW9uKGNhbGxiYWNrKQorICAgIHF1ZXJ5T2JqZWN0Q29udGVudDogZnVuY3Rpb24oY2FsbGJhY2sp
CiAgICAgewotICAgICAgICBjYWxsYmFjaygiIik7CiAgICAgfSwKIAogICAgIF9wb3B1bGF0ZTog
ZnVuY3Rpb24oZXZlbnQpCkBAIC0xODUsOSArMTg0LDkgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdEdlbmVyaWNPYmplY3ROb2RlID0gZnVuY3Rpb24odHJlZSwgbm9kZSkKICAgICBpZiAodGhp
cy5fdHlwZSA9PT0gInN0cmluZyIpCiAgICAgICAgIHRoaXMuaGFzSG92ZXJNZXNzYWdlID0gdHJ1
ZTsKICAgICBlbHNlIGlmICh0aGlzLl90eXBlID09PSAib2JqZWN0IiAmJiB0aGlzLmlzRE9NV2lu
ZG93KHRoaXMuX25hbWUpKSB7Ci0gICAgICAgIHZhciB1cmwgPSBbXTsKLSAgICAgICAgdGhpcy5f
bmFtZSA9IHRoaXMuc2hvcnRlbldpbmRvd1VSTCh0aGlzLl9uYW1lLCBmYWxzZSwgdXJsKTsKLSAg
ICAgICAgdGhpcy5fdXJsID0gdXJsWzBdOworICAgICAgICB0aGlzLl9uYW1lID0gdGhpcy5zaG9y
dGVuV2luZG93VVJMKHRoaXMuX25hbWUsIGZhbHNlKTsKKyAgICAgICAgdGhpcy5oYXNIb3Zlck1l
c3NhZ2UgPSB0cnVlOworICAgIH0gZWxzZSBpZiAobm9kZS5mbGFncyAmIHRyZWUuc25hcHNob3Qu
bm9kZUZsYWdzLmNhbkJlUXVlcmllZCkgewogICAgICAgICB0aGlzLmhhc0hvdmVyTWVzc2FnZSA9
IHRydWU7CiAgICAgfQogfTsKQEAgLTI1OSw2ICsyNTgsOCBAQCBXZWJJbnNwZWN0b3IuSGVhcFNu
YXBzaG90R2VuZXJpY09iamVjdE5vZGUucHJvdG90eXBlID0gewogICAgICAgICAgICAgICAgIHZh
bHVlICs9ICIgW10iOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH07CisgICAgICAgIGlm
ICh0aGlzLmhhc0hvdmVyTWVzc2FnZSkKKyAgICAgICAgICAgIHZhbHVlU3R5bGUgKz0gIiBoaWdo
bGlnaHQiOwogICAgICAgICBkYXRhWyJvYmplY3QiXSA9IHsgdmFsdWVTdHlsZTogdmFsdWVTdHls
ZSwgdmFsdWU6IHZhbHVlICsgIiBAIiArIHRoaXMuc25hcHNob3ROb2RlSWQgfTsKIAogICAgICAg
ICB2YXIgdmlldyA9IHRoaXMuZGF0YUdyaWQuc25hcHNob3RWaWV3OwpAQCAtMjY4LDEyICsyNjks
MjAgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEdlbmVyaWNPYmplY3ROb2RlLnByb3RvdHlw
ZSA9IHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2VuaGFuY2VEYXRhID8gdGhpcy5fZW5oYW5jZURh
dGEoZGF0YSkgOiBkYXRhOwogICAgIH0sCiAKLSAgICBob3Zlck1lc3NhZ2U6IGZ1bmN0aW9uKGNh
bGxiYWNrKQorICAgIHF1ZXJ5T2JqZWN0Q29udGVudDogZnVuY3Rpb24oY2FsbGJhY2spCiAgICAg
ewotICAgICAgICBpZiAodGhpcy5fdHlwZSA9PT0gInN0cmluZyIpCi0gICAgICAgICAgICBjYWxs
YmFjaygiXCIiICsgdGhpcy5fbmFtZSArICJcIiIsICJjb25zb2xlLWZvcm1hdHRlZC1zdHJpbmci
KTsKLSAgICAgICAgZWxzZSBpZiAodGhpcy5fdXJsKQotICAgICAgICAgICAgY2FsbGJhY2sodGhp
cy5fdXJsLCAiY29uc29sZS1mb3JtYXR0ZWQtb2JqZWN0Iik7CisgICAgICAgIGlmICh0aGlzLl90
eXBlID09PSAic3RyaW5nIikgeworICAgICAgICAgICAgY2FsbGJhY2soeyB0eXBlOiAic3RyaW5n
IiwgZGVzY3JpcHRpb246IHRoaXMuX25hbWUgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBmdW5jdGlvbiBmb3JtYXRSZXN1bHQoZXJyb3IsIG9iamVjdCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBpZiAob2JqZWN0LnR5cGUpCisgICAgICAgICAgICAgICAgICAgIGNh
bGxiYWNrKFdlYkluc3BlY3Rvci5SZW1vdGVPYmplY3QuZnJvbVBheWxvYWQob2JqZWN0KSwgISFl
cnJvcik7ICAgIAorICAgICAgICAgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICBjYWxsYmFjayh7IHR5cGU6ICJudWxsIiwgZGVzY3JpcHRpb246IFdl
Ykluc3BlY3Rvci5VSVN0cmluZygiTm90IGF2YWlsYWJsZSIpIH0pOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgUHJvZmlsZXJBZ2VudC5nZXRPYmplY3RCeUhlYXBPYmplY3RJZCh0aGlzLnNu
YXBzaG90Tm9kZUlkLCBmb3JtYXRSZXN1bHQpOworICAgICAgICB9CiAgICAgfSwKIAogICAgIGdl
dCBfcmV0YWluZWRTaXplUGVyY2VudCgpCkBAIC0zMDAsMTQgKzMwOSwxMiBAQCBXZWJJbnNwZWN0
b3IuSGVhcFNuYXBzaG90R2VuZXJpY09iamVjdE5vZGUucHJvdG90eXBlID0gewogICAgICAgICBy
ZXR1cm4gZnVsbE5hbWUuc3Vic3RyKDAsIDkpID09PSAiRE9NV2luZG93IjsKICAgICB9LAogCi0g
ICAgc2hvcnRlbldpbmRvd1VSTDogZnVuY3Rpb24oZnVsbE5hbWUsIGhhc09iamVjdElkLCBmdWxs
VVJMUHRyKQorICAgIHNob3J0ZW5XaW5kb3dVUkw6IGZ1bmN0aW9uKGZ1bGxOYW1lLCBoYXNPYmpl
Y3RJZCkKICAgICB7CiAgICAgICAgIHZhciBzdGFydFBvcyA9IGZ1bGxOYW1lLmluZGV4T2YoIi8i
KTsKICAgICAgICAgdmFyIGVuZFBvcyA9IGhhc09iamVjdElkID8gZnVsbE5hbWUuaW5kZXhPZigi
QCIpIDogZnVsbE5hbWUubGVuZ3RoOwogICAgICAgICBpZiAoc3RhcnRQb3MgIT09IC0xICYmIGVu
ZFBvcyAhPT0gLTEpIHsKICAgICAgICAgICAgIHZhciBmdWxsVVJMID0gZnVsbE5hbWUuc3Vic3Ry
aW5nKHN0YXJ0UG9zICsgMSwgZW5kUG9zKS50cmltTGVmdCgpOwotICAgICAgICAgICAgaWYgKGZ1
bGxVUkxQdHIpCi0gICAgICAgICAgICAgICAgZnVsbFVSTFB0clswXSA9IGZ1bGxVUkw7CiAgICAg
ICAgICAgICB2YXIgdXJsID0gZnVsbFVSTC50cmltVVJMKCk7CiAgICAgICAgICAgICBpZiAodXJs
Lmxlbmd0aCA+IDQwKQogICAgICAgICAgICAgICAgIHVybCA9IHVybC50cmltTWlkZGxlKDQwKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGV0YWlsZWRI
ZWFwc2hvdFZpZXcuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RldGFp
bGVkSGVhcHNob3RWaWV3LmpzCmluZGV4IDAwOTY2NTEuLjYxNWY4YjQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGV0YWlsZWRIZWFwc2hvdFZpZXcuanMK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EZXRhaWxlZEhlYXBzaG90
Vmlldy5qcwpAQCAtNjIxLDcgKzYyMSw3IEBAIFdlYkluc3BlY3Rvci5EZXRhaWxlZEhlYXBzaG90
VmlldyA9IGZ1bmN0aW9uKHBhcmVudCwgcHJvZmlsZSkKICAgICB0aGlzLmhlbHBCdXR0b24gPSBu
ZXcgV2ViSW5zcGVjdG9yLlN0YXR1c0JhckJ1dHRvbigiIiwgImhlYXBzaG90LWhlbHAtc3RhdHVz
LWJhci1pdGVtIHN0YXR1cy1iYXItaXRlbSIpOwogICAgIHRoaXMuaGVscEJ1dHRvbi5hZGRFdmVu
dExpc3RlbmVyKCJjbGljayIsIHRoaXMuX2hlbHBDbGlja2VkLmJpbmQodGhpcyksIGZhbHNlKTsK
IAotICAgIHZhciBwb3BvdmVySGVscGVyID0gbmV3IFdlYkluc3BlY3Rvci5Qb3BvdmVySGVscGVy
KHRoaXMuZWxlbWVudCwgdGhpcy5fZ2V0SG92ZXJBbmNob3IuYmluZCh0aGlzKSwgdGhpcy5fc2hv
d1N0cmluZ0NvbnRlbnRQb3BvdmVyLmJpbmQodGhpcykpOworICAgIHZhciBwb3BvdmVySGVscGVy
ID0gbmV3IFdlYkluc3BlY3Rvci5PYmplY3RQb3BvdmVySGVscGVyKHRoaXMuZWxlbWVudCwgdGhp
cy5fZ2V0SG92ZXJBbmNob3IuYmluZCh0aGlzKSwgdGhpcy5fc2hvd09iamVjdFBvcG92ZXIuYmlu
ZCh0aGlzKSwgbnVsbCwgdHJ1ZSk7CiAKICAgICB0aGlzLl9sb2FkUHJvZmlsZSh0aGlzLl9wcm9m
aWxlVWlkLCBwcm9maWxlQ2FsbGJhY2suYmluZCh0aGlzKSk7CiAKQEAgLTEwNjYsMTkgKzEwNjYs
OSBAQCBXZWJJbnNwZWN0b3IuRGV0YWlsZWRIZWFwc2hvdFZpZXcucHJvdG90eXBlID0gewogICAg
ICAgICB0aGlzLnJlZnJlc2hTaG93QXNQZXJjZW50cygpOwogICAgIH0sCiAKLSAgICBfc2hvd1N0
cmluZ0NvbnRlbnRQb3BvdmVyOiBmdW5jdGlvbihhbmNob3IsIHBvcG92ZXIpCisgICAgX3Nob3dP
YmplY3RQb3BvdmVyOiBmdW5jdGlvbihlbGVtZW50LCBzaG93Q2FsbGJhY2spCiAgICAgewotICAg
ICAgICB2YXIgc3RyaW5nQ29udGVudEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJz
cGFuIik7Ci0gICAgICAgIHN0cmluZ0NvbnRlbnRFbGVtZW50LmNsYXNzTmFtZSA9ICJtb25vc3Bh
Y2UiOwotICAgICAgICBzdHJpbmdDb250ZW50RWxlbWVudC5zdHlsZS53aGl0ZVNwYWNlID0gInBy
ZSI7Ci0KLSAgICAgICAgZnVuY3Rpb24gZGlzcGxheVN0cmluZyhuYW1lLCBjbGFzc05hbWUpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHN0cmluZ0NvbnRlbnRFbGVtZW50LnRleHRDb250ZW50ID0g
bmFtZTsKLSAgICAgICAgICAgIHN0cmluZ0NvbnRlbnRFbGVtZW50LmNsYXNzTmFtZSArPSAiICIg
KyBjbGFzc05hbWU7Ci0gICAgICAgICAgICBwb3BvdmVyLnNob3coc3RyaW5nQ29udGVudEVsZW1l
bnQsIGFuY2hvcik7Ci0gICAgICAgIH0KLSAgICAgICAgYW5jaG9yLm5vZGUuaG92ZXJNZXNzYWdl
KGRpc3BsYXlTdHJpbmcpOworICAgICAgICBlbGVtZW50Lm5vZGUucXVlcnlPYmplY3RDb250ZW50
KHNob3dDYWxsYmFjayk7CiAgICAgfSwKIAogICAgIF9oZWxwQ2xpY2tlZDogZnVuY3Rpb24oZXZl
bnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBT
bmFwc2hvdC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBz
aG90LmpzCmluZGV4IDkwNDBlYTMuLjMzZjkxOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90LmpzCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90LmpzCkBAIC00OTQsNiArNDk0LDEyIEBA
IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2RlID0gZnVuY3Rpb24oc25hcHNob3QsIG5vZGVJ
bmRleCkKIH0KIAogV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGUucHJvdG90eXBlID0gewor
ICAgIGdldCBjYW5CZVF1ZXJpZWQoKQorICAgIHsKKyAgICAgICAgdmFyIGZsYWdzID0gdGhpcy5f
c25hcHNob3QuX2ZsYWdzT2ZOb2RlKHRoaXMpOworICAgICAgICByZXR1cm4gISEoZmxhZ3MgJiB0
aGlzLl9zbmFwc2hvdC5fbm9kZUZsYWdzLmNhbkJlUXVlcmllZCk7CisgICAgfSwKKwogICAgIGdl
dCBjbGFzc05hbWUoKQogICAgIHsKICAgICAgICAgc3dpdGNoICh0aGlzLnR5cGUpIHsKQEAgLTUy
OSw2ICs1MzUsMTEgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGUucHJvdG90eXBlID0g
ewogICAgICAgICByZXR1cm4gdGhpcy5fbm9kZXNbdGhpcy5ub2RlSW5kZXggKyB0aGlzLl9zbmFw
c2hvdC5fZWRnZXNDb3VudE9mZnNldF07CiAgICAgfSwKIAorICAgIGdldCBmbGFncygpCisgICAg
eworICAgICAgICByZXR1cm4gdGhpcy5fc25hcHNob3QuX2ZsYWdzT2ZOb2RlKHRoaXMpOworICAg
IH0sCisKICAgICBnZXQgaWQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX25vZGVzW3Ro
aXMubm9kZUluZGV4ICsgdGhpcy5fc25hcHNob3QuX25vZGVJZE9mZnNldF07CkBAIC01NDQsNiAr
NTU1LDExIEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2RlLnByb3RvdHlwZSA9IHsKICAg
ICAgICAgcmV0dXJuIHRoaXMuX3R5cGUoKSA9PT0gdGhpcy5fc25hcHNob3QuX25vZGVIaWRkZW5U
eXBlOwogICAgIH0sCiAKKyAgICBnZXQgaXNET01XaW5kb3coKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHRoaXMubmFtZS5zdWJzdHIoMCwgOSkgPT09ICJET01XaW5kb3ciOworICAgIH0sCisKICAg
ICBnZXQgaXNSb290KCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLm5vZGVJbmRleCA9PT0g
dGhpcy5fc25hcHNob3QuX3Jvb3ROb2RlSW5kZXg7CkBAIC02ODIsNiArNjk4LDggQEAgV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX2VkZ2VJbnZp
c2libGVUeXBlID0gdGhpcy5fZWRnZVR5cGVzLmxlbmd0aDsKICAgICAgICAgdGhpcy5fZWRnZVR5
cGVzLnB1c2goImludmlzaWJsZSIpOwogCisgICAgICAgIHRoaXMuX25vZGVGbGFncyA9IHsgY2Fu
QmVRdWVyaWVkOiAxIH07CisKICAgICAgICAgdGhpcy5fbWFya0ludmlzaWJsZUVkZ2VzKCk7CiAg
ICAgfSwKIApAQCAtNjk5LDYgKzcxNyw3IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3QucHJv
dG90eXBlID0gewogICAgICAgICBkZWxldGUgdGhpcy5fYmFzZU5vZGVJZHM7CiAgICAgICAgIGRl
bGV0ZSB0aGlzLl9kb21pbmF0ZWROb2RlczsKICAgICAgICAgZGVsZXRlIHRoaXMuX2RvbWluYXRl
ZEluZGV4OworICAgICAgICBkZWxldGUgdGhpcy5fZmxhZ3M7CiAgICAgfSwKIAogICAgIGdldCBf
YWxsTm9kZXMoKQpAQCAtNzYzLDYgKzc4MiwxMyBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
LnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90QXJyYXlTbGljZSh0aGlzLCAiX2RvbWluYXRlZE5vZGVzIiwgZG9taW5hdGVkSW5kZXhGcm9t
LCBkb21pbmF0ZWRJbmRleFRvKTsKICAgICB9LAogCisgICAgX2ZsYWdzT2ZOb2RlOiBmdW5jdGlv
bihub2RlKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl9mbGFncykKKyAgICAgICAgICAgIHRo
aXMuX2NhbGN1bGF0ZUZsYWdzKCk7CisgICAgICAgIHJldHVybiB0aGlzLl9mbGFnc1tub2RlLm5v
ZGVJbmRleF07CisgICAgfSwKKwogICAgIGFnZ3JlZ2F0ZXM6IGZ1bmN0aW9uKHNvcnRlZEluZGV4
ZXMpCiAgICAgewogICAgICAgICBpZiAoIXRoaXMuX2FnZ3JlZ2F0ZXMpCkBAIC05NTksNiArOTg1
LDMyIEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3QucHJvdG90eXBlID0gewogICAgICAgICBy
ZXR1cm4gYSA8IGIgPyAtMSA6IChhID4gYiA/IDEgOiAwKTsKICAgICB9LAogCisgICAgX2NhbGN1
bGF0ZUZsYWdzOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgZmxhZyA9IHRoaXMuX25v
ZGVGbGFncy5jYW5CZVF1ZXJpZWQ7CisgICAgICAgIHRoaXMuX2ZsYWdzID0gbmV3IEFycmF5KHRo
aXMubm9kZUNvdW50KTsKKyAgICAgICAgLy8gQWxsb3cgcnVudGltZSBwcm9wZXJ0aWVzIHF1ZXJ5
IGZvciBvYmplY3RzIGFjY2Vzc2libGUgZnJvbSBET01XaW5kb3cgb2JqZWN0cworICAgICAgICAv
LyB2aWEgcmVndWxhciBwcm9wZXJ0aWVzLCBhbmQgZm9yIERPTSB3cmFwcGVycy4gVHJ5aW5nIHRv
IGFjY2VzcyByYW5kb20gb2JqZWN0cworICAgICAgICAvLyBjYW4gY2F1c2UgYSBjcmFzaCBkdWUg
dG8gaW5zb25zaXN0ZW50IHN0YXRlIG9mIGludGVybmFsIHByb3BlcnRpZXMgb2Ygd3JhcHBlcnMu
CisgICAgICAgIHZhciBsaXN0ID0gW107CisgICAgICAgIGZvciAodmFyIGl0ZXIgPSB0aGlzLnJv
b3ROb2RlLmVkZ2VzOyBpdGVyLmhhc05leHQoKTsgaXRlci5uZXh0KCkpIHsKKyAgICAgICAgICAg
IGlmIChpdGVyLmVkZ2Uubm9kZS5pc0RPTVdpbmRvdykKKyAgICAgICAgICAgICAgICBsaXN0LnB1
c2goaXRlci5lZGdlLm5vZGUpOworICAgICAgICB9CisgICAgICAgIHdoaWxlIChsaXN0Lmxlbmd0
aCkgeworICAgICAgICAgICAgdmFyIG5vZGUgPSBsaXN0LnNoaWZ0KCk7CisgICAgICAgICAgICBp
ZiAobm9kZS5jYW5CZVF1ZXJpZWQpIGNvbnRpbnVlOworICAgICAgICAgICAgdGhpcy5fZmxhZ3Nb
bm9kZS5ub2RlSW5kZXhdID0gZmxhZzsKKyAgICAgICAgICAgIGZvciAodmFyIGl0ZXIgPSBub2Rl
LmVkZ2VzOyBpdGVyLmhhc05leHQoKTsgaXRlci5uZXh0KCkpIHsKKyAgICAgICAgICAgICAgICB2
YXIgZWRnZSA9IGl0ZXIuZWRnZTsKKyAgICAgICAgICAgICAgICBpZiAoIWVkZ2UuaXNIaWRkZW4g
JiYgIWVkZ2UuaXNJbnZpc2libGUgJiYKKyAgICAgICAgICAgICAgICAgICAgZWRnZS5uYW1lICYm
ICghZWRnZS5pc0ludGVybmFsIHx8IGVkZ2UubmFtZSA9PT0gIm5hdGl2ZSIpICYmCisgICAgICAg
ICAgICAgICAgICAgICFlZGdlLm5vZGUuY2FuQmVRdWVyaWVkKQorICAgICAgICAgICAgICAgICAg
ICBsaXN0LnB1c2goZWRnZS5ub2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0s
CisKICAgICBiYXNlU25hcHNob3RIYXNOb2RlOiBmdW5jdGlvbihiYXNlU25hcHNob3RJZCwgY2xh
c3NOYW1lLCBub2RlSWQpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fYmFzZU5vZGVJZHNb
YmFzZVNuYXBzaG90SWRdW2NsYXNzTmFtZV0uYmluYXJ5SW5kZXhPZihub2RlSWQsIHRoaXMuX251
bWJlcnNDb21wYXJhdG9yKSAhPT0gLTE7CkBAIC0xMDE0LDcgKzEwNjYsNyBAQCBXZWJJbnNwZWN0
b3IuSGVhcFNuYXBzaG90LnByb3RvdHlwZSA9IHsKIAogICAgIHVwZGF0ZVN0YXRpY0RhdGE6IGZ1
bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIHJldHVybiB7bm9kZUNvdW50OiB0aGlzLm5vZGVDb3Vu
dCwgcm9vdE5vZGVJbmRleDogdGhpcy5fcm9vdE5vZGVJbmRleCwgdG90YWxTaXplOiB0aGlzLnRv
dGFsU2l6ZSwgdWlkOiB0aGlzLnVpZH07CisgICAgICAgIHJldHVybiB7bm9kZUNvdW50OiB0aGlz
Lm5vZGVDb3VudCwgcm9vdE5vZGVJbmRleDogdGhpcy5fcm9vdE5vZGVJbmRleCwgdG90YWxTaXpl
OiB0aGlzLnRvdGFsU2l6ZSwgdWlkOiB0aGlzLnVpZCwgbm9kZUZsYWdzOiB0aGlzLl9ub2RlRmxh
Z3N9OwogICAgIH0KIH07CiAKQEAgLTEyMzUsNyArMTI4Nyw3IEBAIFdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3ROb2Rlc1Byb3ZpZGVyID0gZnVuY3Rpb24oc25hcHNob3QsIGZpbHRlciwgbm9kZUlu
ZGV4ZXMpCiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZXNQcm92aWRlci5wcm90b3R5cGUg
PSB7CiAgICAgX3NlcmlhbGl6ZTogZnVuY3Rpb24obm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVy
biB7aWQ6IG5vZGUuaWQsIG5hbWU6IG5vZGUubmFtZSwgbm9kZUluZGV4OiBub2RlLm5vZGVJbmRl
eCwgcmV0YWluZWRTaXplOiBub2RlLnJldGFpbmVkU2l6ZSwgc2VsZlNpemU6IG5vZGUuc2VsZlNp
emUsIHR5cGU6IG5vZGUudHlwZX07CisgICAgICAgIHJldHVybiB7aWQ6IG5vZGUuaWQsIG5hbWU6
IG5vZGUubmFtZSwgbm9kZUluZGV4OiBub2RlLm5vZGVJbmRleCwgcmV0YWluZWRTaXplOiBub2Rl
LnJldGFpbmVkU2l6ZSwgc2VsZlNpemU6IG5vZGUuc2VsZlNpemUsIHR5cGU6IG5vZGUudHlwZSwg
ZmxhZ3M6IG5vZGUuZmxhZ3N9OwogICAgIH0sCiAKICAgICBzb3J0OiBmdW5jdGlvbihjb21wYXJh
dG9yLCBsZWZ0Qm91bmQsIHJpZ2h0Qm91bmQsIGNvdW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RQcm94eS5qcyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90UHJveHkuanMKaW5kZXggNDRh
MDU0NC4uN2Y1N2QzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9IZWFwU25hcHNob3RQcm94eS5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0hlYXBTbmFwc2hvdFByb3h5LmpzCkBAIC0zNzAsNiArMzcwLDExIEBAIFdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3RQcm94eS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuY2Fs
bE1ldGhvZChjYWxsYmFjaywgIm5vZGVGaWVsZFZhbHVlc0J5SW5kZXgiLCBmaWVsZE5hbWUsIGlu
ZGV4ZXMpOwogICAgIH0sCiAKKyAgICBnZXQgbm9kZUZsYWdzKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiB0aGlzLl9zdGF0aWNEYXRhLm5vZGVGbGFnczsKKyAgICB9LAorCiAgICAgcHVzaEJhc2VJ
ZHM6IGZ1bmN0aW9uKHNuYXBzaG90SWQsIGNsYXNzTmFtZSwgbm9kZUlkcykKICAgICB7CiAgICAg
ICAgIHRoaXMuY2FsbE1ldGhvZChudWxsLCAicHVzaEJhc2VJZHMiLCBzbmFwc2hvdElkLCBjbGFz
c05hbWUsIG5vZGVJZHMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9PYmplY3RQcm9wZXJ0aWVzU2VjdGlvbi5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvT2JqZWN0UHJvcGVydGllc1NlY3Rpb24uanMKaW5kZXggOTYyNmM3Ni4u
ZTg2MjVlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9P
YmplY3RQcm9wZXJ0aWVzU2VjdGlvbi5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL09iamVjdFByb3BlcnRpZXNTZWN0aW9uLmpzCkBAIC00Miw2ICs0MiwxMCBAQCBX
ZWJJbnNwZWN0b3IuT2JqZWN0UHJvcGVydGllc1NlY3Rpb24ucHJvdG90eXBlID0gewogICAgICAg
ICB0aGlzLnVwZGF0ZSgpOwogICAgIH0sCiAKKyAgICBvblByb3BlcnRpZXNSZWNlaXZlZDogZnVu
Y3Rpb24ocHJvcGVydGllcykKKyAgICB7CisgICAgfSwKKwogICAgIHVwZGF0ZTogZnVuY3Rpb24o
KQogICAgIHsKICAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwpAQCAtNDksNiArNTMsNyBAQCBXZWJJ
bnNwZWN0b3IuT2JqZWN0UHJvcGVydGllc1NlY3Rpb24ucHJvdG90eXBlID0gewogICAgICAgICB7
CiAgICAgICAgICAgICBpZiAoIXByb3BlcnRpZXMpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgc2VsZi5vblByb3BlcnRpZXNSZWNlaXZlZChwcm9wZXJ0aWVzKTsKICAgICAg
ICAgICAgIHNlbGYudXBkYXRlUHJvcGVydGllcyhwcm9wZXJ0aWVzKTsKICAgICAgICAgfQogICAg
ICAgICBpZiAodGhpcy5pZ25vcmVIYXNPd25Qcm9wZXJ0eSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUG9wb3Zlci5qcyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvUG9wb3Zlci5qcwppbmRleCAxMjFjYmU4Li44ODE5ODlhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1BvcG92ZXIuanMKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Qb3BvdmVyLmpzCkBAIC0yODgs
MyArMjg4LDY4IEBAIFdlYkluc3BlY3Rvci5Qb3BvdmVySGVscGVyLnByb3RvdHlwZSA9IHsKICAg
ICAgICAgfQogICAgIH0KIH0KKworV2ViSW5zcGVjdG9yLk9iamVjdFBvcG92ZXJIZWxwZXIgPSBm
dW5jdGlvbihwYW5lbEVsZW1lbnQsIGdldEFuY2hvciwgcXVlcnlPYmplY3QsIG9uSGlkZSwgZGlz
YWJsZU9uQ2xpY2spCit7CisgICAgV2ViSW5zcGVjdG9yLlBvcG92ZXJIZWxwZXIuY2FsbCh0aGlz
LCBwYW5lbEVsZW1lbnQsIGdldEFuY2hvciwgdGhpcy5fc2hvd09iamVjdFBvcG92ZXIuYmluZCh0
aGlzKSwgb25IaWRlLCBkaXNhYmxlT25DbGljayk7CisgICAgdGhpcy5fcXVlcnlPYmplY3QgPSBx
dWVyeU9iamVjdDsKKyAgICBwYW5lbEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIiwg
dGhpcy5oaWRlUG9wb3Zlci5iaW5kKHRoaXMpLCB0cnVlKTsKK307CisKK1dlYkluc3BlY3Rvci5P
YmplY3RQb3BvdmVySGVscGVyLnByb3RvdHlwZSA9IHsKKyAgICBfc2hvd09iamVjdFBvcG92ZXI6
IGZ1bmN0aW9uKGVsZW1lbnQsIHBvcG92ZXIpCisgICAgeworICAgICAgICBmdW5jdGlvbiBzaG93
T2JqZWN0UG9wb3ZlcihyZXN1bHQsIHdhc1Rocm93bikKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKHBvcG92ZXIuZGlzcG9zZWQpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgaWYgKHdhc1Rocm93bikgeworICAgICAgICAgICAgICAgIHRoaXMuaGlkZVBvcG92ZXIoKTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIg
cG9wb3ZlckNvbnRlbnRFbGVtZW50ID0gbnVsbDsKKyAgICAgICAgICAgIGlmIChyZXN1bHQudHlw
ZSAhPT0gIm9iamVjdCIpIHsKKyAgICAgICAgICAgICAgICBwb3BvdmVyQ29udGVudEVsZW1lbnQg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisgICAgICAgICAgICAgICAgcG9wb3Zl
ckNvbnRlbnRFbGVtZW50LmNsYXNzTmFtZSA9ICJtb25vc3BhY2UgY29uc29sZS1mb3JtYXR0ZWQt
IiArIHJlc3VsdC50eXBlOworICAgICAgICAgICAgICAgIHBvcG92ZXJDb250ZW50RWxlbWVudC5z
dHlsZS53aGl0ZVNwYWNlID0gInByZSI7CisgICAgICAgICAgICAgICAgcG9wb3ZlckNvbnRlbnRF
bGVtZW50LnRleHRDb250ZW50ID0gcmVzdWx0LmRlc2NyaXB0aW9uOworICAgICAgICAgICAgICAg
IGlmIChyZXN1bHQudHlwZSA9PT0gInN0cmluZyIpCisgICAgICAgICAgICAgICAgICAgIHBvcG92
ZXJDb250ZW50RWxlbWVudC50ZXh0Q29udGVudCA9ICJcIiIgKyBwb3BvdmVyQ29udGVudEVsZW1l
bnQudGV4dENvbnRlbnQgKyAiXCIiOworICAgICAgICAgICAgICAgIHBvcG92ZXIuc2hvdyhwb3Bv
dmVyQ29udGVudEVsZW1lbnQsIGVsZW1lbnQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBwb3BvdmVyQ29udGVudEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJkaXYiKTsKKworICAgICAgICAgICAgICAgIHZhciB0aXRsZUVsZW1lbnQgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICAgICAgICAgICAgICB0aXRsZUVsZW1lbnQuY2xhc3NO
YW1lID0gInNvdXJjZS1mcmFtZS1wb3BvdmVyLXRpdGxlIG1vbm9zcGFjZSI7CisgICAgICAgICAg
ICAgICAgdGl0bGVFbGVtZW50LnRleHRDb250ZW50ID0gcmVzdWx0LmRlc2NyaXB0aW9uOworICAg
ICAgICAgICAgICAgIHBvcG92ZXJDb250ZW50RWxlbWVudC5hcHBlbmRDaGlsZCh0aXRsZUVsZW1l
bnQpOworCisgICAgICAgICAgICAgICAgdmFyIHNlY3Rpb24gPSBuZXcgV2ViSW5zcGVjdG9yLk9i
amVjdFByb3BlcnRpZXNTZWN0aW9uKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgLy8gRm9yIEhU
TUwgRE9NIHdyYXBwZXJzLCBhcHBlbmQgIiNpZCIgdG8gdGl0bGUsIGlmIG5vdCBlbXB0eS4KKyAg
ICAgICAgICAgICAgICBpZiAocmVzdWx0LmRlc2NyaXB0aW9uLnN1YnN0cigwLCA0KSA9PT0gIkhU
TUwiKSB7CisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24ub25Qcm9wZXJ0aWVzUmVjZWl2ZWQg
PSBmdW5jdGlvbihwcm9wZXJ0aWVzKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyArK2kp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllc1tpXS5uYW1lID09
PSAiaWQiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVz
W2ldLnZhbHVlLmRlc2NyaXB0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGl0bGVFbGVtZW50LnRleHRDb250ZW50ICs9ICIjIiArIHByb3BlcnRpZXNbaV0udmFsdWUu
ZGVzY3JpcHRpb247CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
c2VjdGlvbi5leHBhbmRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgc2VjdGlvbi5lbGVtZW50
LmFkZFN0eWxlQ2xhc3MoInNvdXJjZS1mcmFtZS1wb3BvdmVyLXRyZWUiKTsKKyAgICAgICAgICAg
ICAgICBzZWN0aW9uLmhlYWRlckVsZW1lbnQuYWRkU3R5bGVDbGFzcygiaGlkZGVuIik7CisgICAg
ICAgICAgICAgICAgcG9wb3ZlckNvbnRlbnRFbGVtZW50LmFwcGVuZENoaWxkKHNlY3Rpb24uZWxl
bWVudCk7CisKKyAgICAgICAgICAgICAgICBjb25zdCBwb3BvdmVyV2lkdGggPSAzMDA7CisgICAg
ICAgICAgICAgICAgY29uc3QgcG9wb3ZlckhlaWdodCA9IDI1MDsKKyAgICAgICAgICAgICAgICBw
b3BvdmVyLnNob3cocG9wb3ZlckNvbnRlbnRFbGVtZW50LCBlbGVtZW50LCBwb3BvdmVyV2lkdGgs
IHBvcG92ZXJIZWlnaHQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMu
X3F1ZXJ5T2JqZWN0KGVsZW1lbnQsIHNob3dPYmplY3RQb3BvdmVyLmJpbmQodGhpcykpOworICAg
IH0KK30KKworV2ViSW5zcGVjdG9yLk9iamVjdFBvcG92ZXJIZWxwZXIucHJvdG90eXBlLl9fcHJv
dG9fXyA9IFdlYkluc3BlY3Rvci5Qb3BvdmVySGVscGVyLnByb3RvdHlwZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanMgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpzCmluZGV4IDA3YjE5
MTEuLjk4MDFlYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvU291cmNlRnJhbWUuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9Tb3VyY2VGcmFtZS5qcwpAQCAtMjg5LDEwICsyODksOSBAQCBXZWJJbnNwZWN0b3IuU291cmNl
RnJhbWUucHJvdG90eXBlID0gewogCiAgICAgICAgIHZhciBlbGVtZW50ID0gdGhpcy5fdGV4dFZp
ZXdlci5lbGVtZW50OwogICAgICAgICBpZiAodGhpcy5fZGVsZWdhdGUuZGVidWdnaW5nU3VwcG9y
dGVkKCkpIHsKLSAgICAgICAgICAgIHRoaXMuX3BvcG92ZXJIZWxwZXIgPSBuZXcgV2ViSW5zcGVj
dG9yLlBvcG92ZXJIZWxwZXIoZWxlbWVudCwKKyAgICAgICAgICAgIHRoaXMuX3BvcG92ZXJIZWxw
ZXIgPSBuZXcgV2ViSW5zcGVjdG9yLk9iamVjdFBvcG92ZXJIZWxwZXIoZWxlbWVudCwKICAgICAg
ICAgICAgICAgICB0aGlzLl9nZXRQb3BvdmVyQW5jaG9yLmJpbmQodGhpcyksIHRoaXMuX29uU2hv
d1BvcG92ZXIuYmluZCh0aGlzKSwgdGhpcy5fb25IaWRlUG9wb3Zlci5iaW5kKHRoaXMpLCB0cnVl
KTsKICAgICAgICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIiwgdGhp
cy5fbW91c2VEb3duLmJpbmQodGhpcyksIHRydWUpOwotICAgICAgICAgICAgZWxlbWVudC5hZGRF
dmVudExpc3RlbmVyKCJzY3JvbGwiLCB0aGlzLl9zY3JvbGwuYmluZCh0aGlzKSwgdHJ1ZSk7CiAg
ICAgICAgIH0KIAogICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLmJlZ2luVXBkYXRlcygpOwpAQCAt
NjQyLDE2ICs2NDEsOCBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewog
ICAgICAgICByZXR1cm4gdGhpcy5fZGVsZWdhdGUuc3VnZ2VzdGVkRmlsZU5hbWUoKTsKICAgICB9
LAogCi0gICAgX3Njcm9sbDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICBpZiAodGhp
cy5fcG9wb3ZlckhlbHBlcikKLSAgICAgICAgICAgIHRoaXMuX3BvcG92ZXJIZWxwZXIuaGlkZVBv
cG92ZXIoKTsKLSAgICB9LAotCiAgICAgX21vdXNlRG93bjogZnVuY3Rpb24oZXZlbnQpCiAgICAg
ewotICAgICAgICBpZiAodGhpcy5fcG9wb3ZlckhlbHBlcikKLSAgICAgICAgICAgIHRoaXMuX3Bv
cG92ZXJIZWxwZXIuaGlkZVBvcG92ZXIoKTsKICAgICAgICAgaWYgKGV2ZW50LmJ1dHRvbiAhPSAw
IHx8IGV2ZW50LmFsdEtleSB8fCBldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQuZW5jbG9z
aW5nTm9kZU9yU2VsZldpdGhDbGFzcygid2Via2l0LWxpbmUtbnVtYmVyIik7CkBAIC03MzAsNyAr
NzIxLDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAg
cmV0dXJuIGNvbnRhaW5lcjsKICAgICB9LAogCi0gICAgX29uU2hvd1BvcG92ZXI6IGZ1bmN0aW9u
KGVsZW1lbnQsIHBvcG92ZXIpCisgICAgX29uU2hvd1BvcG92ZXI6IGZ1bmN0aW9uKGVsZW1lbnQs
IHNob3dDYWxsYmFjaykKICAgICB7CiAgICAgICAgIGlmICghdGhpcy5fdGV4dFZpZXdlci5yZWFk
T25seSkgewogICAgICAgICAgICAgdGhpcy5fcG9wb3ZlckhlbHBlci5oaWRlUG9wb3ZlcigpOwpA
QCAtNzQwLDM5ICs3MzEsMTEgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9
IHsKIAogICAgICAgICBmdW5jdGlvbiBzaG93T2JqZWN0UG9wb3ZlcihyZXN1bHQsIHdhc1Rocm93
bikKICAgICAgICAgewotICAgICAgICAgICAgaWYgKHBvcG92ZXIuZGlzcG9zZWQpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgaWYgKHdhc1Rocm93biB8fCAhdGhpcy5fZGVs
ZWdhdGUuZGVidWdnZXJQYXVzZWQoKSkgeworICAgICAgICAgICAgaWYgKCF0aGlzLl9kZWxlZ2F0
ZS5kZWJ1Z2dlclBhdXNlZCgpKSB7CiAgICAgICAgICAgICAgICAgdGhpcy5fcG9wb3ZlckhlbHBl
ci5oaWRlUG9wb3ZlcigpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHZhciBwb3BvdmVyQ29udGVudEVsZW1lbnQgPSBudWxsOwotICAgICAgICAg
ICAgaWYgKHJlc3VsdC50eXBlICE9PSAib2JqZWN0IikgewotICAgICAgICAgICAgICAgIHBvcG92
ZXJDb250ZW50RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKLSAgICAg
ICAgICAgICAgICBwb3BvdmVyQ29udGVudEVsZW1lbnQuY2xhc3NOYW1lID0gIm1vbm9zcGFjZSBj
b25zb2xlLWZvcm1hdHRlZC0iICsgcmVzdWx0LnR5cGU7Ci0gICAgICAgICAgICAgICAgcG9wb3Zl
ckNvbnRlbnRFbGVtZW50LnN0eWxlLndoaXRlU3BhY2UgPSAicHJlIjsKLSAgICAgICAgICAgICAg
ICBwb3BvdmVyQ29udGVudEVsZW1lbnQudGV4dENvbnRlbnQgPSByZXN1bHQuZGVzY3JpcHRpb247
Ci0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC50eXBlID09PSAic3RyaW5nIikKLSAgICAgICAg
ICAgICAgICAgICAgcG9wb3ZlckNvbnRlbnRFbGVtZW50LnRleHRDb250ZW50ID0gIlwiIiArIHBv
cG92ZXJDb250ZW50RWxlbWVudC50ZXh0Q29udGVudCArICJcIiI7Ci0gICAgICAgICAgICAgICAg
cG9wb3Zlci5zaG93KHBvcG92ZXJDb250ZW50RWxlbWVudCwgZWxlbWVudCk7Ci0gICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHZhciBwb3BvdmVyQ29udGVudEVsZW1lbnQgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLQotICAgICAgICAgICAgICAgIHZhciB0aXRs
ZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLSAgICAgICAgICAgICAg
ICB0aXRsZUVsZW1lbnQuY2xhc3NOYW1lID0gInNvdXJjZS1mcmFtZS1wb3BvdmVyLXRpdGxlIG1v
bm9zcGFjZSI7Ci0gICAgICAgICAgICAgICAgdGl0bGVFbGVtZW50LnRleHRDb250ZW50ID0gcmVz
dWx0LmRlc2NyaXB0aW9uOwotICAgICAgICAgICAgICAgIHBvcG92ZXJDb250ZW50RWxlbWVudC5h
cHBlbmRDaGlsZCh0aXRsZUVsZW1lbnQpOwotCi0gICAgICAgICAgICAgICAgdmFyIHNlY3Rpb24g
PSBuZXcgV2ViSW5zcGVjdG9yLk9iamVjdFByb3BlcnRpZXNTZWN0aW9uKHJlc3VsdCk7Ci0gICAg
ICAgICAgICAgICAgc2VjdGlvbi5leHBhbmRlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgc2Vj
dGlvbi5lbGVtZW50LmFkZFN0eWxlQ2xhc3MoInNvdXJjZS1mcmFtZS1wb3BvdmVyLXRyZWUiKTsK
LSAgICAgICAgICAgICAgICBzZWN0aW9uLmhlYWRlckVsZW1lbnQuYWRkU3R5bGVDbGFzcygiaGlk
ZGVuIik7Ci0gICAgICAgICAgICAgICAgcG9wb3ZlckNvbnRlbnRFbGVtZW50LmFwcGVuZENoaWxk
KHNlY3Rpb24uZWxlbWVudCk7Ci0KLSAgICAgICAgICAgICAgICBjb25zdCBwb3BvdmVyV2lkdGgg
PSAzMDA7Ci0gICAgICAgICAgICAgICAgY29uc3QgcG9wb3ZlckhlaWdodCA9IDI1MDsKLSAgICAg
ICAgICAgICAgICBwb3BvdmVyLnNob3cocG9wb3ZlckNvbnRlbnRFbGVtZW50LCBlbGVtZW50LCBw
b3BvdmVyV2lkdGgsIHBvcG92ZXJIZWlnaHQpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAg
c2hvd0NhbGxiYWNrKHJlc3VsdCwgd2FzVGhyb3duKTsKICAgICAgICAgICAgIHRoaXMuX2hpZ2hs
aWdodEVsZW1lbnQuYWRkU3R5bGVDbGFzcygic291cmNlLWZyYW1lLWV2YWwtZXhwcmVzc2lvbiIp
OwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvaGVhcFByb2ZpbGVyLmNzcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvaGVhcFByb2ZpbGVyLmNzcwppbmRleCA2MmJkMGEwLi4wYjM5NmY0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2hlYXBQcm9maWxlci5jc3MKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9oZWFwUHJvZmlsZXIuY3NzCkBAIC0x
OTQsNiArMTk0LDEwIEBAIGJvZHkuaW5hY3RpdmUgLmhlYXAtc25hcHNob3Qtc2lkZWJhci10cmVl
LWl0ZW0ud2FpdC5zZWxlY3RlZCAuaWNvbiB7CiAgICAgbWFyZ2luLXJpZ2h0OiA4cHg7CiB9CiAK
Ky5kZXRhaWxlZC1oZWFwc2hvdC12aWV3IHRyOm5vdCguc2VsZWN0ZWQpIHRkLm9iamVjdC1jb2x1
bW4gc3Bhbi5oaWdobGlnaHQgeworICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigyNTUsIDI1NSwg
MjAwKTsKK30KKwogLmhlYXBzaG90LWhlbHAtc3RhdHVzLWJhci1pdGVtIC5nbHlwaCB7CiAgICAg
LXdlYmtpdC1tYXNrLXBvc2l0aW9uOiAtMTYwcHggMDsKIH0K
</data>
<flag name="review"
          id="106330"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
    <flag name="commit-queue"
          id="106331"
          type_id="3"
          status="-"
          setter="mnaganov"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109687</attachid>
            <date>2011-10-04 14:20:02 -0700</date>
            <delta_ts>2011-10-17 06:32:18 -0700</delta_ts>
            <desc>Comments addressed, test added</desc>
            <filename>patch-61179</filename>
            <type>text/plain</type>
            <size>30974</size>
            <attacher name="Mikhail Naganov">mnaganov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAwMzBhN2NlLi40NGU1ODdmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTEtMTAt
MDQgIE1pa2hhaWwgTmFnYW5vdiAgPG1uYWdhbm92QGNocm9taXVtLm9yZz4KKworICAgICAgICBX
ZWIgSW5zcGVjdG9yOiBbQ2hyb21pdW1dIEFkZCBhbiBhYmlsaXR5IHRvIGxvb2sgdXAgYW5kIGV4
cGxvcmUgYW4gb2JqZWN0IGZyb20gYSBoZWFwIHByb2ZpbGUuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MTE3OQorCisgICAgICAgIFRoaXMgaXMgZXh0
ZXJlbWVseSBoZWxwZnVsIHdoZW4gZGVhbGluZyB3aXRoIERPTSB3cmFwcGVycywgYXMKKyAgICAg
ICAgdGhlaXIgcHJvcGVydGllcyBhcmUgbW9zdGx5IGltcGxlbWVudGVkIHdpdGggZ2V0dGVycyBh
bmQgdGh1cyBub3QKKyAgICAgICAgc3RvcmVkIGluIGhlYXAgc25hcHNob3RzLgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogaW5zcGVjdG9yL3Byb2Zp
bGVyL2hlYXAtc25hcHNob3QtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGluc3BlY3Rvci9wcm9m
aWxlci9oZWFwLXNuYXBzaG90LXRlc3QuanM6CisgICAgICAgIChpbml0aWFsaXplX0hlYXBTbmFw
c2hvdFRlc3QuSW5zcGVjdG9yVGVzdC5jcmVhdGVIZWFwU25hcHNob3RNb2NrV2l0aERPTSk6Cisg
ICAgICAgIChpbml0aWFsaXplX0hlYXBTbmFwc2hvdFRlc3QpOgorICAgICAgICAqIGluc3BlY3Rv
ci9wcm9maWxlci9oZWFwLXNuYXBzaG90Lmh0bWw6CisKIDIwMTEtMTAtMDQgIFZzZXZvbG9kIFZs
YXNvdiAgPHZzZXZpa0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogUmVt
b3ZlIGh0dHAvdGVzdHMvaW5zcGVjdG9yL25ldHdvcmsvZGlzYWJsZWQtY2FjaGUtY3Jhc2guaHRt
bC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9wcm9maWxlci9oZWFwLXNuYXBz
aG90LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9wcm9maWxlci9oZWFwLXNu
YXBzaG90LWV4cGVjdGVkLnR4dAppbmRleCA3OGUyN2UzLi5hNTA1ZDE3IDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9pbnNwZWN0b3IvcHJvZmlsZXIvaGVhcC1zbmFwc2hvdC1leHBlY3RlZC50eHQK
KysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVyL2hlYXAtc25hcHNob3QtZXhwZWN0
ZWQudHh0CkBAIC0xNyw2ICsxNyw4IEBAIFJ1bm5pbmc6IGhlYXBTbmFwc2hvdFJldGFpbmVyc1Rl
c3QKIAogUnVubmluZzogaGVhcFNuYXBzaG90QWdncmVnYXRlc1Rlc3QKIAorUnVubmluZzogaGVh
cFNuYXBzaG90RmxhZ3NUZXN0CisKIFJ1bm5pbmc6IGhlYXBTbmFwc2hvdE5vZGVzUHJvdmlkZXJU
ZXN0CiAKIFJ1bm5pbmc6IGhlYXBTbmFwc2hvdEVkZ2VzUHJvdmlkZXJUZXN0CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcHJvZmlsZXIvaGVhcC1zbmFwc2hvdC10ZXN0LmpzIGIv
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVyL2hlYXAtc25hcHNob3QtdGVzdC5qcwppbmRl
eCA4OTMzNjVhLi4zMDg0ZGJlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcHJv
ZmlsZXIvaGVhcC1zbmFwc2hvdC10ZXN0LmpzCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9w
cm9maWxlci9oZWFwLXNuYXBzaG90LXRlc3QuanMKQEAgLTY2LDQgKzY2LDQxIEBAIEluc3BlY3Rv
clRlc3QuY3JlYXRlSGVhcFNuYXBzaG90TW9jayA9IGZ1bmN0aW9uKCkKICAgICB9OwogfTsKIAor
SW5zcGVjdG9yVGVzdC5jcmVhdGVIZWFwU25hcHNob3RNb2NrV2l0aERPTSA9IGZ1bmN0aW9uKCkK
K3sKKyAgICByZXR1cm4geworICAgICAgICBzbmFwc2hvdDoge30sCisgICAgICAgIG5vZGVzOiBb
CisgICAgICAgICAgICB7IGZpZWxkczogWyJ0eXBlIiwgIm5hbWUiLCAiaWQiLCAiY2hpbGRyZW5f
Y291bnQiLCAiY2hpbGRyZW4iXSwKKyAgICAgICAgICAgICAgdHlwZXM6IFtbImhpZGRlbiIsICJv
YmplY3QiXSwgIiIsICIiLCAiIiwgeyBmaWVsZHM6IFsidHlwZSIsICJuYW1lX29yX2luZGV4Iiwg
InRvX25vZGUiXSwgdHlwZXM6IFtbImVsZW1lbnQiLCAiaGlkZGVuIiwgImludGVybmFsIl0sICIi
LCAiIl0gfV0gfSwKKyAgICAgICAgICAgIC8vIEEgdHJlZSB3aXRoIERPTVdpbmRvdyBvYmplY3Rz
LgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vICAgIHwtLS0tLT5ET01XaW5kb3ctLS0+
QQorICAgICAgICAgICAgLy8gICAgfCAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAvLyAg
ICB8LS0tLS0+RE9NV2luZG93LS0tPkItLS0+QworICAgICAgICAgICAgLy8gICAgfCAgICAgICAg
fCAgICAgXAorICAgICAgICAgICAgLy8gIChyb290KSAgIGhpZGRlbiAgIC0tLT5ELS1pbnRlcm5h
bCAvICJuYXRpdmUiLS0+TgorICAgICAgICAgICAgLy8gICAgfCAgICAgICAgIFwgICAgICAgICB8
CisgICAgICAgICAgICAvLyAgICB8LS0tLS0+RSAgIEggICAgIGludGVybmFsCisgICAgICAgICAg
ICAvLyAgICB8ICAgICAgICAgICAgICAgICAgIHYKKyAgICAgICAgICAgIC8vICAgIHwtLS0tLT5G
LS0tPkctLS0tLS0+TQorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8qIChyb290KSAqLyAg
ICAwLCAgMCwgIDEsIDQsIDAsICAxLCAxNywgMCwgMiwgMjcsIDAsIDMsIDQwLCAwLCA0LCA0NCwK
KyAgICAgICAgICAgIC8qIERPTVdpbmRvdyAqLyAxLCAxMSwgIDIsIDIsIDAsICAxLCA1MSwgMCwg
MiwgNTUsCisgICAgICAgICAgICAvKiBET01XaW5kb3cgKi8gMSwgMTEsICAzLCAzLCAwLCAgMSwg
NTUsIDAsIDIsIDYyLCAxLCAzLCA3MiwKKyAgICAgICAgICAgIC8qIEUgKi8gICAgICAgICAxLCAg
NSwgIDQsIDAsCisgICAgICAgICAgICAvKiBGICovICAgICAgICAgMSwgIDYsICA1LCAxLCAwLCAg
MSwgNzYsCisgICAgICAgICAgICAvKiBBICovICAgICAgICAgMSwgIDEsICA2LCAwLAorICAgICAg
ICAgICAgLyogQiAqLyAgICAgICAgIDEsICAyLCAgNywgMSwgMCwgIDEsIDgwLAorICAgICAgICAg
ICAgLyogRCAqLyAgICAgICAgIDEsICA0LCAgOCwgMiwgMiwgMTIsIDg0LCAyLCAxLCA4OCwKKyAg
ICAgICAgICAgIC8qIEggKi8gICAgICAgICAxLCAgOCwgIDksIDAsCisgICAgICAgICAgICAvKiBH
ICovICAgICAgICAgMSwgIDcsIDEwLCAwLAorICAgICAgICAgICAgLyogQyAqLyAgICAgICAgIDEs
ICAzLCAxMSwgMCwKKyAgICAgICAgICAgIC8qIE4gKi8gICAgICAgICAxLCAxMCwgMTIsIDAsCisg
ICAgICAgICAgICAvKiBNICovICAgICAgICAgMSwgIDksIDEzLCAwCisgICAgICAgICAgICBdLAor
ICAgICAgICBzdHJpbmdzOiBbIiIsICJBIiwgIkIiLCAiQyIsICJEIiwgIkUiLCAiRiIsICJHIiwg
IkgiLCAiTSIsICJOIiwgIkRPTVdpbmRvdyIsICJuYXRpdmUiXQorICAgIH07Cit9OworCiB9Owpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb2ZpbGVyL2hlYXAtc25hcHNob3Qu
aHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9wcm9maWxlci9oZWFwLXNuYXBzaG90Lmh0bWwK
aW5kZXggYjc4Nzg4MS4uNjNlZmQwYSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9y
L3Byb2ZpbGVyL2hlYXAtc25hcHNob3QuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
cHJvZmlsZXIvaGVhcC1zbmFwc2hvdC5odG1sCkBAIC0xNDgsNiArMTQ4LDMwIEBAIGZ1bmN0aW9u
IHRlc3QoKQogICAgICAgICAgICAgbmV4dCgpOwogICAgICAgICB9LAogCisgICAgICAgIGZ1bmN0
aW9uIGhlYXBTbmFwc2hvdEZsYWdzVGVzdChuZXh0KQorICAgICAgICB7CisgICAgICAgICAgICB2
YXIgc25hcHNob3QgPSBuZXcgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdChJbnNwZWN0b3JUZXN0
LmNyZWF0ZUhlYXBTbmFwc2hvdE1vY2tXaXRoRE9NKCkpOworICAgICAgICAgICAgdmFyIGV4cGVj
dGVkQ2FuQmVRdWVyaWVkID0geworICAgICAgICAgICAgICAgICIiOiBmYWxzZSwKKyAgICAgICAg
ICAgICAgICJBIjogdHJ1ZSwKKyAgICAgICAgICAgICAgICJCIjogdHJ1ZSwKKyAgICAgICAgICAg
ICAgICJDIjogdHJ1ZSwKKyAgICAgICAgICAgICAgICJEIjogdHJ1ZSwKKyAgICAgICAgICAgICAg
ICJFIjogZmFsc2UsCisgICAgICAgICAgICAgICAiRiI6IGZhbHNlLAorICAgICAgICAgICAgICAg
IkciOiBmYWxzZSwKKyAgICAgICAgICAgICAgICJIIjogZmFsc2UsCisgICAgICAgICAgICAgICAi
TSI6IGZhbHNlLAorICAgICAgICAgICAgICAgIk4iOiB0cnVlLAorICAgICAgICAgICAgICAgIkRP
TVdpbmRvdyI6IHRydWUKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBmb3IgKHZhciBub2Rl
cyA9IHNuYXBzaG90Ll9hbGxOb2Rlczsgbm9kZXMuaGFzTmV4dCgpOyBub2Rlcy5uZXh0KCkpIHsK
KyAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IG5vZGVzLml0ZW07CisgICAgICAgICAgICAgICAg
SW5zcGVjdG9yVGVzdC5hc3NlcnRFcXVhbHMoZXhwZWN0ZWRDYW5CZVF1ZXJpZWRbbm9kZS5uYW1l
XSwgbm9kZS5jYW5CZVF1ZXJpZWQsICJjYW5CZVF1ZXJpZWQgb2YgXCIiICsgbm9kZS5uYW1lICsg
IlwiIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBuZXh0KCk7CisgICAgICAgIH0sCisK
ICAgICAgICAgZnVuY3Rpb24gaGVhcFNuYXBzaG90Tm9kZXNQcm92aWRlclRlc3QobmV4dCkKICAg
ICAgICAgewogICAgICAgICAgICAgdmFyIHNuYXBzaG90ID0gbmV3IFdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3QoSW5zcGVjdG9yVGVzdC5jcmVhdGVIZWFwU25hcHNob3RNb2NrKCkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CmluZGV4IDcyZjgxNzYuLmE2OGIwNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSw1NyBAQAogMjAx
MS0xMC0wNCAgTWlraGFpbCBOYWdhbm92ICA8bW5hZ2Fub3ZAY2hyb21pdW0ub3JnPgogCisgICAg
ICAgIFdlYiBJbnNwZWN0b3I6IFtDaHJvbWl1bV0gQWRkIGFuIGFiaWxpdHkgdG8gbG9vayB1cCBh
bmQgZXhwbG9yZSBhbiBvYmplY3QgZnJvbSBhIGhlYXAgcHJvZmlsZS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYxMTc5CisKKyAgICAgICAgVGhpcyBp
cyBleHRlcmVtZWx5IGhlbHBmdWwgd2hlbiBkZWFsaW5nIHdpdGggRE9NIHdyYXBwZXJzLCBhcwor
ICAgICAgICB0aGVpciBwcm9wZXJ0aWVzIGFyZSBtb3N0bHkgaW1wbGVtZW50ZWQgd2l0aCBnZXR0
ZXJzIGFuZCB0aHVzIG5vdAorICAgICAgICBzdG9yZWQgaW4gaGVhcCBzbmFwc2hvdHMuCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBFbmdsaXNoLmxw
cm9qL2xvY2FsaXplZFN0cmluZ3MuanM6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0UHJv
ZmlsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0UHJvZmlsZXI6Om9iamVjdEJ5SGVh
cE9iamVjdElkKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRQcm9maWxlci5oOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNjcmlwdFByb2ZpbGVyOjpvYmplY3RCeUhlYXBPYmplY3RJZCk6CisgICAgICAgICogYmluZGlu
Z3MvdjgvU2NyaXB0UHJvZmlsZXIuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yLmpz
b246CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcik6Cisg
ICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQ6Okluc3BlY3RvclByb2ZpbGVyQWdlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Z2V0T2JqZWN0QnlIZWFwT2Jq
ZWN0SWQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50Lmg6Cisg
ICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9EZXRhaWxlZEhlYXBzaG90R3JpZE5vZGVzLmpz
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEdyaWROb2RlLnByb3RvdHlwZS5o
YXNIb3Zlck1lc3NhZ2UuZmFsc2UucXVlcnlPYmplY3RDb250ZW50KToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3RHZW5lcmljT2JqZWN0Tm9kZSk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuSGVhcFNuYXBzaG90R2VuZXJpY09iamVjdE5vZGUucHJvdG90eXBlLmdldCBkYXRhKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RHZW5lcmljT2JqZWN0Tm9kZS5wcm90
b3R5cGUucXVlcnlPYmplY3RDb250ZW50LmVsc2UuZm9ybWF0UmVzdWx0KToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3RHZW5lcmljT2JqZWN0Tm9kZS5wcm90b3R5cGUucXVlcnlP
YmplY3RDb250ZW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3RHZW5lcmlj
T2JqZWN0Tm9kZS5wcm90b3R5cGUuc2hvcnRlbldpbmRvd1VSTCk6CisgICAgICAgICogaW5zcGVj
dG9yL2Zyb250LWVuZC9EZXRhaWxlZEhlYXBzaG90Vmlldy5qczoKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5EZXRhaWxlZEhlYXBzaG90Vmlldy5wcm90b3R5cGUuX3Nob3dPYmplY3RQb3BvdmVyKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBTbmFwc2hvdC5qczoKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2RlLnByb3RvdHlwZS5nZXQgY2FuQmVRdWVyaWVk
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2RlLnByb3RvdHlwZS5nZXQg
ZmxhZ3MpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGUucHJvdG90eXBl
LmdldCBpc0RPTVdpbmRvdyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90LnBy
b3RvdHlwZS5faW5pdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90LnByb3Rv
dHlwZS5kaXNwb3NlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3QucHJvdG90
eXBlLl9mbGFnc09mTm9kZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90LnBy
b3RvdHlwZS5fY2FsY3VsYXRlRmxhZ3MpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkhlYXBTbmFw
c2hvdC5wcm90b3R5cGUudXBkYXRlU3RhdGljRGF0YSk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
SGVhcFNuYXBzaG90Tm9kZXNQcm92aWRlci5wcm90b3R5cGUuX3NlcmlhbGl6ZSk6CisgICAgICAg
ICogaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RQcm94eS5qczoKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3RQcm94eS5wcm90b3R5cGUuZ2V0IG5vZGVGbGFncyk6Cisg
ICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9SZW1vdGVPYmplY3QuanM6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0LmZyb21FcnJvcik6CisgICAgICAgICogaW5zcGVjdG9y
L2Zyb250LWVuZC9oZWFwUHJvZmlsZXIuY3NzOgorICAgICAgICAoLmRldGFpbGVkLWhlYXBzaG90
LXZpZXcgdHI6bm90KC5zZWxlY3RlZCkgdGQub2JqZWN0LWNvbHVtbiBzcGFuLmhpZ2hsaWdodCk6
CisKKzIwMTEtMTAtMDQgIE1pa2hhaWwgTmFnYW5vdiAgPG1uYWdhbm92QGNocm9taXVtLm9yZz4K
KwogICAgICAgICBXZWIgSW5zcGVjdG9yOiBGYWN0b3Igb3V0IG9iamVjdCBwcm9wZXJ0aWVzIHBv
cHVwLgogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njky
MzQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvRW5nbGlzaC5scHJvai9sb2NhbGl6ZWRT
dHJpbmdzLmpzIGIvU291cmNlL1dlYkNvcmUvRW5nbGlzaC5scHJvai9sb2NhbGl6ZWRTdHJpbmdz
LmpzCmluZGV4IDU0NGZkOGM0YzA5MTYyZDBjOGZjNjg4YjI3OGIyMDM2MjQ0OTU0ZTguLjBlYzE2
ODlhYWI3YzAyNjk2NDA4YzM4NGU3NzBjODNkODAzMTlmZTYgMTAwNjQ0CkdJVCBiaW5hcnkgcGF0
Y2gKZGVsdGEgODMKemNtZG47bnxhPEo8XyVsXlBDaGtCKXp5ejdwUF9fN2ZnekVoNDJVeHNhKTR3
S2tXNkp6VnUlSGIrWEFyPzEzcCNPCkczfHMmVVglbGsqCgpkZWx0YSA5ClJjbWJSRGhrNDZ5PF8l
bF4wc3RFPDErZjRDCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2Ny
aXB0UHJvZmlsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0UHJvZmls
ZXIuY3BwCmluZGV4IDM0NjhhZTMuLjRjODRmYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NjcmlwdFByb2ZpbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TY3JpcHRQcm9maWxlci5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJT
Y3JpcHRQcm9maWxlci5oIgogCiAjaW5jbHVkZSAiR0NDb250cm9sbGVyLmgiCisjaW5jbHVkZSAi
SW5zcGVjdG9yVmFsdWVzLmgiCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSA8
cHJvZmlsZXIvUHJvZmlsZXIuaD4KIApAQCAtNDEsNiArNDIsMTEgQEAgdm9pZCBTY3JpcHRQcm9m
aWxlcjo6Y29sbGVjdEdhcmJhZ2UoKQogICAgIGdjQ29udHJvbGxlcigpLmdhcmJhZ2VDb2xsZWN0
Tm93KCk7CiB9CiAKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IFNjcmlwdFByb2ZpbGVyOjpv
YmplY3RCeUhlYXBPYmplY3RJZCh1bnNpZ25lZCwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKikKK3sK
KyAgICByZXR1cm4gSW5zcGVjdG9yVmFsdWU6Om51bGwoKTsKK30KKwogdm9pZCBTY3JpcHRQcm9m
aWxlcjo6c3RhcnQoU2NyaXB0U3RhdGUqIHN0YXRlLCBjb25zdCBTdHJpbmcmIHRpdGxlKQogewog
ICAgIEpTQzo6UHJvZmlsZXI6OnByb2ZpbGVyKCktPnN0YXJ0UHJvZmlsaW5nKHN0YXRlLCBzdHJp
bmdUb1VTdHJpbmcodGl0bGUpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdFByb2ZpbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRQ
cm9maWxlci5oCmluZGV4IDA1ZDVlOTIuLmVmNjhhYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdFByb2ZpbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2NyaXB0UHJvZmlsZXIuaApAQCAtMzUsNiArMzUsOSBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKK2NsYXNzIEluamVjdGVkU2NyaXB0TWFuYWdlcjsKK2NsYXNzIEluc3BlY3Rv
clZhbHVlOworCiBjbGFzcyBTY3JpcHRQcm9maWxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoU2NyaXB0UHJvZmlsZXIpOwogcHVibGljOgpAQCAtNDgsNiArNTEsNyBAQCBwdWJsaWM6CiAg
ICAgfTsKIAogICAgIHN0YXRpYyB2b2lkIGNvbGxlY3RHYXJiYWdlKCk7CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IG9iamVjdEJ5SGVhcE9iamVjdElkKHVuc2lnbmVkIGlk
LCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqKTsKICAgICBzdGF0aWMgdm9pZCBzdGFydChTY3JpcHRT
dGF0ZSogc3RhdGUsIGNvbnN0IFN0cmluZyYgdGl0bGUpOwogICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFNjcmlwdFByb2ZpbGU+IHN0b3AoU2NyaXB0U3RhdGUqIHN0YXRlLCBjb25zdCBTdHJpbmcmIHRp
dGxlKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTY3JpcHRIZWFwU25hcHNob3Q+IHRha2VIZWFw
U25hcHNob3QoY29uc3QgU3RyaW5nJiwgSGVhcFNuYXBzaG90UHJvZ3Jlc3MqKSB7IHJldHVybiAw
OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRQcm9maWxl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRQcm9maWxlci5jcHAKaW5k
ZXggZmI0ZTk3NS4uYmZjNmE4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvU2NyaXB0UHJvZmlsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nj
cmlwdFByb2ZpbGVyLmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIlNjcmlwdFByb2ZpbGVyLmgiCiAKKyNpbmNsdWRlICJJbmplY3RlZFNjcmlwdC5o
IgogI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgogI2luY2x1ZGUgIlJldGFpbmVkRE9NSW5m
by5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgpAQCAtNjUsNiArNjYsMzQgQEAgdm9pZCBTY3Jp
cHRQcm9maWxlcjo6Y29sbGVjdEdhcmJhZ2UoKQogICAgIHdoaWxlICghdjg6OlY4OjpJZGxlTm90
aWZpY2F0aW9uKCkpIHsgfQogfQogCitQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBTY3JpcHRQ
cm9maWxlcjo6b2JqZWN0QnlIZWFwT2JqZWN0SWQodW5zaWduZWQgaWQsIEluamVjdGVkU2NyaXB0
TWFuYWdlciogaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQoreworICAgIC8vIEFzIGlkcyBhcmUgdW5p
cXVlLCBpdCBkb2Vzbid0IG1hdHRlciB3aGljaCBIZWFwU25hcHNob3Qgb3ducyBIZWFwR3JhcGhO
b2RlLgorICAgIC8vIFdlIG5lZWQgdG8gZmluZCBmaXJzdCBIZWFwU25hcHNob3QgY29udGFpbmlu
ZyBhIG5vZGUgd2l0aCB0aGUgc3BlY2lmaWVkIGlkLgorICAgIGNvbnN0IHY4OjpIZWFwR3JhcGhO
b2RlKiBub2RlID0gMDsKKyAgICBmb3IgKGludCBpID0gMCwgbCA9IHY4OjpIZWFwUHJvZmlsZXI6
OkdldFNuYXBzaG90c0NvdW50KCk7IGkgPCBsOyArK2kpIHsKKyAgICAgICAgY29uc3Qgdjg6Okhl
YXBTbmFwc2hvdCogc25hcHNob3QgPSB2ODo6SGVhcFByb2ZpbGVyOjpHZXRTbmFwc2hvdChpKTsK
KyAgICAgICAgbm9kZSA9IHNuYXBzaG90LT5HZXROb2RlQnlJZChpZCk7CisgICAgICAgIGlmIChu
b2RlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmICghbm9kZSkKKyAgICAgICAg
cmV0dXJuIEluc3BlY3RvclZhbHVlOjpudWxsKCk7CisKKyAgICB2ODo6SGFuZGxlU2NvcGUgc2Nv
cGU7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlID0gbm9kZS0+R2V0SGVhcFZhbHVl
KCk7CisgICAgaWYgKCF2YWx1ZS0+SXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIEluc3BlY3Rv
clZhbHVlOjpudWxsKCk7CisKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCh2YWx1
ZS5Bczx2ODo6T2JqZWN0PigpKTsKKyAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGNyZWF0aW9u
Q29udGV4dCA9IG9iamVjdC0+Q3JlYXRpb25Db250ZXh0KCk7CisgICAgdjg6OkNvbnRleHQ6OlNj
b3BlIGNyZWF0aW9uU2NvcGUoY3JlYXRpb25Db250ZXh0KTsKKyAgICBTY3JpcHRTdGF0ZSogc2Ny
aXB0U3RhdGUgPSBTY3JpcHRTdGF0ZTo6Zm9yQ29udGV4dChjcmVhdGlvbkNvbnRleHQpOworICAg
IEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLT5p
bmplY3RlZFNjcmlwdEZvcihzY3JpcHRTdGF0ZSk7CisgICAgcmV0dXJuICFpbmplY3RlZFNjcmlw
dC5oYXNOb1ZhbHVlKCkgPworICAgICAgICAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPihpbmpl
Y3RlZFNjcmlwdC53cmFwT2JqZWN0KHZhbHVlLCAiIikpLnJlbGVhc2UoKSA6IEluc3BlY3RvclZh
bHVlOjpudWxsKCk7Cit9CisKIG5hbWVzcGFjZSB7CiAKIGNsYXNzIEFjdGl2aXR5Q29udHJvbEFk
YXB0ZXIgOiBwdWJsaWMgdjg6OkFjdGl2aXR5Q29udHJvbCB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRQcm9maWxlci5oIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvU2NyaXB0UHJvZmlsZXIuaAppbmRleCA5MmE5ODBiLi4xMTRhYWUwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRQcm9maWxlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdFByb2ZpbGVyLmgKQEAgLTM5LDcgKzM5LDgg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBJbnNwZWN0b3JPYmplY3Q7CitjbGFz
cyBJbmplY3RlZFNjcmlwdE1hbmFnZXI7CitjbGFzcyBJbnNwZWN0b3JWYWx1ZTsKIAogY2xhc3Mg
U2NyaXB0UHJvZmlsZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNjcmlwdFByb2ZpbGVy
KTsKQEAgLTU0LDYgKzU1LDcgQEAgcHVibGljOgogICAgIH07CiAKICAgICBzdGF0aWMgdm9pZCBj
b2xsZWN0R2FyYmFnZSgpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBv
YmplY3RCeUhlYXBPYmplY3RJZCh1bnNpZ25lZCBpZCwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKik7
CiAgICAgc3RhdGljIHZvaWQgc3RhcnQoU2NyaXB0U3RhdGUqIHN0YXRlLCBjb25zdCBTdHJpbmcm
IHRpdGxlKTsKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTY3JpcHRQcm9maWxlPiBzdG9wKFNjcmlw
dFN0YXRlKiBzdGF0ZSwgY29uc3QgU3RyaW5nJiB0aXRsZSk7CiAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8U2NyaXB0SGVhcFNuYXBzaG90PiB0YWtlSGVhcFNuYXBzaG90KGNvbnN0IFN0cmluZyYgdGl0
bGUsIEhlYXBTbmFwc2hvdFByb2dyZXNzKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yLmpzb24gYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yLmpzb24KaW5kZXggOTZmMWYzZi4uNTM1NDFhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3IuanNvbgpAQCAtMTk5OCw2ICsxOTk4LDE1IEBACiAgICAgICAgICAgICB9LAog
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICJuYW1lIjogImNvbGxlY3RHYXJiYWdlIgor
ICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAibmFtZSI6ICJn
ZXRPYmplY3RCeUhlYXBPYmplY3RJZCIsCisgICAgICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBb
CisgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAib2JqZWN0SWQiLCAidHlwZSI6ICJpbnRl
Z2VyIiB9CisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAicmV0dXJucyI6IFsK
KyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJyZXN1bHQiLCAiJHJlZiI6ICJSdW50aW1l
LlJlbW90ZU9iamVjdCIsICJkZXNjcmlwdGlvbiI6ICJFdmFsdWF0aW9uIHJlc3VsdC4iIH0KKyAg
ICAgICAgICAgICAgICBdCiAgICAgICAgICAgICB9CiAgICAgICAgIF0sCiAgICAgICAgICJldmVu
dHMiOiBbCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29u
dHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxl
ci5jcHAKaW5kZXggNDRhZTJhMi4uZDEzYWUzZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTExNSw3ICsxMTUsNyBAQCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKFBhZ2UqIHBhZ2UsIEluc3BlY3Rv
ckNsaWVudCogaW5zcGVjdG9yQwogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAg
ICwgbV9kZWJ1Z2dlckFnZW50KFBhZ2VEZWJ1Z2dlckFnZW50OjpjcmVhdGUobV9pbnN0cnVtZW50
aW5nQWdlbnRzLmdldCgpLCBtX3N0YXRlLmdldCgpLCBwYWdlLCBtX2luamVjdGVkU2NyaXB0TWFu
YWdlci5nZXQoKSkpCiAgICAgLCBtX2RvbURlYnVnZ2VyQWdlbnQoSW5zcGVjdG9yRE9NRGVidWdn
ZXJBZ2VudDo6Y3JlYXRlKG1faW5zdHJ1bWVudGluZ0FnZW50cy5nZXQoKSwgbV9zdGF0ZS5nZXQo
KSwgbV9kb21BZ2VudC5nZXQoKSwgbV9kZWJ1Z2dlckFnZW50LmdldCgpLCBtX2luc3BlY3RvckFn
ZW50LmdldCgpKSkKLSAgICAsIG1fcHJvZmlsZXJBZ2VudChJbnNwZWN0b3JQcm9maWxlckFnZW50
OjpjcmVhdGUobV9pbnN0cnVtZW50aW5nQWdlbnRzLmdldCgpLCBtX2NvbnNvbGVBZ2VudC5nZXQo
KSwgcGFnZSwgbV9zdGF0ZS5nZXQoKSkpCisgICAgLCBtX3Byb2ZpbGVyQWdlbnQoSW5zcGVjdG9y
UHJvZmlsZXJBZ2VudDo6Y3JlYXRlKG1faW5zdHJ1bWVudGluZ0FnZW50cy5nZXQoKSwgbV9jb25z
b2xlQWdlbnQuZ2V0KCksIHBhZ2UsIG1fc3RhdGUuZ2V0KCksIG1faW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyLmdldCgpKSkKICNlbmRpZgogI2lmIEVOQUJMRShXT1JLRVJTKQogICAgICwgbV93b3JrZXJB
Z2VudChJbnNwZWN0b3JXb3JrZXJBZ2VudDo6Y3JlYXRlKG1faW5zdHJ1bWVudGluZ0FnZW50cy5n
ZXQoKSwgbV9zdGF0ZS5nZXQoKSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAKaW5kZXggYmI1M2U3My4uNTAzNDQyZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmNw
cApAQCAtNjIsMTYgKzYyLDE3IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBVc2VySW5pdGlh
dGVkUHJvZmlsZU5hbWUgPSAib3JnLndlYmtpdC5wcm9maWxlcy51c2VyLWluCiBzdGF0aWMgY29u
c3QgY2hhciogY29uc3QgQ1BVUHJvZmlsZVR5cGUgPSAiQ1BVIjsKIHN0YXRpYyBjb25zdCBjaGFy
KiBjb25zdCBIZWFwUHJvZmlsZVR5cGUgPSAiSEVBUCI7CiAKLVBhc3NPd25QdHI8SW5zcGVjdG9y
UHJvZmlsZXJBZ2VudD4gSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Y3JlYXRlKEluc3RydW1lbnRp
bmdBZ2VudHMqIGluc3RydW1lbnRpbmdBZ2VudHMsIEluc3BlY3RvckNvbnNvbGVBZ2VudCogY29u
c29sZUFnZW50LCBQYWdlKiBpbnNwZWN0ZWRQYWdlLCBJbnNwZWN0b3JTdGF0ZSogaW5zcGVjdG9y
U3RhdGUpCitQYXNzT3duUHRyPEluc3BlY3RvclByb2ZpbGVyQWdlbnQ+IEluc3BlY3RvclByb2Zp
bGVyQWdlbnQ6OmNyZWF0ZShJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRz
LCBJbnNwZWN0b3JDb25zb2xlQWdlbnQqIGNvbnNvbGVBZ2VudCwgUGFnZSogaW5zcGVjdGVkUGFn
ZSwgSW5zcGVjdG9yU3RhdGUqIGluc3BlY3RvclN0YXRlLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIq
IGluamVjdGVkU2NyaXB0TWFuYWdlcikKIHsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IEluc3Bl
Y3RvclByb2ZpbGVyQWdlbnQoaW5zdHJ1bWVudGluZ0FnZW50cywgY29uc29sZUFnZW50LCBpbnNw
ZWN0ZWRQYWdlLCBpbnNwZWN0b3JTdGF0ZSkpOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgSW5z
cGVjdG9yUHJvZmlsZXJBZ2VudChpbnN0cnVtZW50aW5nQWdlbnRzLCBjb25zb2xlQWdlbnQsIGlu
c3BlY3RlZFBhZ2UsIGluc3BlY3RvclN0YXRlLCBpbmplY3RlZFNjcmlwdE1hbmFnZXIpKTsKIH0K
IAotSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6SW5zcGVjdG9yUHJvZmlsZXJBZ2VudChJbnN0cnVt
ZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JDb25zb2xlQWdlbnQq
IGNvbnNvbGVBZ2VudCwgUGFnZSogaW5zcGVjdGVkUGFnZSwgSW5zcGVjdG9yU3RhdGUqIGluc3Bl
Y3RvclN0YXRlKQorSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6SW5zcGVjdG9yUHJvZmlsZXJBZ2Vu
dChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBJbnNwZWN0b3JDb25z
b2xlQWdlbnQqIGNvbnNvbGVBZ2VudCwgUGFnZSogaW5zcGVjdGVkUGFnZSwgSW5zcGVjdG9yU3Rh
dGUqIGluc3BlY3RvclN0YXRlLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqIGluamVjdGVkU2NyaXB0
TWFuYWdlcikKICAgICA6IG1faW5zdHJ1bWVudGluZ0FnZW50cyhpbnN0cnVtZW50aW5nQWdlbnRz
KQogICAgICwgbV9jb25zb2xlQWdlbnQoY29uc29sZUFnZW50KQogICAgICwgbV9pbnNwZWN0ZWRQ
YWdlKGluc3BlY3RlZFBhZ2UpCiAgICAgLCBtX2luc3BlY3RvclN0YXRlKGluc3BlY3RvclN0YXRl
KQorICAgICwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIoaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQog
ICAgICwgbV9mcm9udGVuZCgwKQogICAgICwgbV9lbmFibGVkKGZhbHNlKQogICAgICwgbV9yZWNv
cmRpbmdVc2VySW5pdGlhdGVkUHJvZmlsZShmYWxzZSkKQEAgLTM3OCw2ICszNzksMTUgQEAgdm9p
ZCBJbnNwZWN0b3JQcm9maWxlckFnZW50Ojp0b2dnbGVSZWNvcmRCdXR0b24oYm9vbCBpc1Byb2Zp
bGluZykKICAgICAgICAgbV9mcm9udGVuZC0+c2V0UmVjb3JkaW5nUHJvZmlsZShpc1Byb2ZpbGlu
Zyk7CiB9CiAKK3ZvaWQgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudDo6Z2V0T2JqZWN0QnlIZWFwT2Jq
ZWN0SWQoRXJyb3JTdHJpbmcqIGVycm9yLCBpbnQgaWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
KiByZXN1bHQpCit7CisgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBoZWFwT2JqZWN0ID0gU2Ny
aXB0UHJvZmlsZXI6Om9iamVjdEJ5SGVhcE9iamVjdElkKGlkLCBtX2luamVjdGVkU2NyaXB0TWFu
YWdlcik7CisgICAgaWYgKCFoZWFwT2JqZWN0LT5pc051bGwoKSkKKyAgICAgICAgaGVhcE9iamVj
dC0+YXNPYmplY3QocmVzdWx0KTsKKyAgICBlbHNlCisgICAgICAgICplcnJvciA9ICJPYmplY3Qg
aXMgbm90IGF2YWlsYWJsZS4iOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikgJiYgRU5BQkxFKElOU1BFQ1RPUikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oCmlu
ZGV4IDQwOTQxZTguLmVlZDdlMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JQcm9maWxlckFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclByb2ZpbGVyQWdlbnQuaApAQCAtNDEsNiArNDEsNyBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKK2NsYXNzIEluamVjdGVkU2NyaXB0TWFuYWdlcjsKIGNsYXNzIEluc3BlY3Rv
ckFycmF5OwogY2xhc3MgSW5zcGVjdG9yQ29uc29sZUFnZW50OwogY2xhc3MgSW5zcGVjdG9yRnJv
bnRlbmQ7CkBAIC01Niw3ICs1Nyw3IEBAIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogY2xh
c3MgSW5zcGVjdG9yUHJvZmlsZXJBZ2VudCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5z
cGVjdG9yUHJvZmlsZXJBZ2VudCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzT3duUHRyPEluc3BlY3RvclByb2ZpbGVyQWdlbnQ+IGNyZWF0ZShJbnN0
cnVtZW50aW5nQWdlbnRzKiwgSW5zcGVjdG9yQ29uc29sZUFnZW50KiwgUGFnZSosIEluc3BlY3Rv
clN0YXRlKik7CisgICAgc3RhdGljIFBhc3NPd25QdHI8SW5zcGVjdG9yUHJvZmlsZXJBZ2VudD4g
Y3JlYXRlKEluc3RydW1lbnRpbmdBZ2VudHMqLCBJbnNwZWN0b3JDb25zb2xlQWdlbnQqLCBQYWdl
KiwgSW5zcGVjdG9yU3RhdGUqLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqKTsKICAgICB2aXJ0dWFs
IH5JbnNwZWN0b3JQcm9maWxlckFnZW50KCk7CiAKICAgICB2b2lkIGFkZFByb2ZpbGUoUGFzc1Jl
ZlB0cjxTY3JpcHRQcm9maWxlPiBwcnBQcm9maWxlLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCBjb25z
dCBTdHJpbmcmIHNvdXJjZVVSTCk7CkBAIC05MCw2ICs5MSw4IEBAIHB1YmxpYzoKICAgICB2b2lk
IHRha2VIZWFwU25hcHNob3QoRXJyb3JTdHJpbmcqKTsKICAgICB2b2lkIHRvZ2dsZVJlY29yZEJ1
dHRvbihib29sIGlzUHJvZmlsaW5nKTsKIAorICAgIHZvaWQgZ2V0T2JqZWN0QnlIZWFwT2JqZWN0
SWQoRXJyb3JTdHJpbmcqLCBpbnQgaWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiByZXN1bHQp
OworCiBwcml2YXRlOgogICAgIHR5cGVkZWYgSGFzaE1hcDx1bnNpZ25lZCBpbnQsIFJlZlB0cjxT
Y3JpcHRQcm9maWxlPiA+IFByb2ZpbGVzTWFwOwogICAgIHR5cGVkZWYgSGFzaE1hcDx1bnNpZ25l
ZCBpbnQsIFJlZlB0cjxTY3JpcHRIZWFwU25hcHNob3Q+ID4gSGVhcFNuYXBzaG90c01hcDsKQEAg
LTk3LDcgKzEwMCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZXNldEZyb250ZW5kUHJvZmlsZXMo
KTsKICAgICB2b2lkIHJlc3RvcmVFbmFibGVtZW50KCk7CiAKLSAgICBJbnNwZWN0b3JQcm9maWxl
ckFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqLCBJbnNwZWN0b3JDb25zb2xlQWdlbnQqLCBQYWdl
KiwgSW5zcGVjdG9yU3RhdGUqKTsKKyAgICBJbnNwZWN0b3JQcm9maWxlckFnZW50KEluc3RydW1l
bnRpbmdBZ2VudHMqLCBJbnNwZWN0b3JDb25zb2xlQWdlbnQqLCBQYWdlKiwgSW5zcGVjdG9yU3Rh
dGUqLCBJbmplY3RlZFNjcmlwdE1hbmFnZXIqKTsKICAgICBQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gY3JlYXRlUHJvZmlsZUhlYWRlcihjb25zdCBTY3JpcHRQcm9maWxlJiBwcm9maWxlKTsK
ICAgICBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY3JlYXRlU25hcHNob3RIZWFkZXIoY29u
c3QgU2NyaXB0SGVhcFNuYXBzaG90JiBzbmFwc2hvdCk7CiAKQEAgLTEwNSw2ICsxMDgsNyBAQCBw
cml2YXRlOgogICAgIEluc3BlY3RvckNvbnNvbGVBZ2VudCogbV9jb25zb2xlQWdlbnQ7CiAgICAg
UGFnZSogbV9pbnNwZWN0ZWRQYWdlOwogICAgIEluc3BlY3RvclN0YXRlKiBtX2luc3BlY3RvclN0
YXRlOworICAgIEluamVjdGVkU2NyaXB0TWFuYWdlciogbV9pbmplY3RlZFNjcmlwdE1hbmFnZXI7
CiAgICAgSW5zcGVjdG9yRnJvbnRlbmQ6OlByb2ZpbGVyKiBtX2Zyb250ZW5kOwogICAgIGJvb2wg
bV9lbmFibGVkOwogICAgIGJvb2wgbV9yZWNvcmRpbmdVc2VySW5pdGlhdGVkUHJvZmlsZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGV0YWlsZWRIZWFw
c2hvdEdyaWROb2Rlcy5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGV0
YWlsZWRIZWFwc2hvdEdyaWROb2Rlcy5qcwppbmRleCA3NjEwMTJjLi4yNzlhYjYxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RldGFpbGVkSGVhcHNob3RH
cmlkTm9kZXMuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EZXRh
aWxlZEhlYXBzaG90R3JpZE5vZGVzLmpzCkBAIC01Niw5ICs1Niw4IEBAIFdlYkluc3BlY3Rvci5I
ZWFwU25hcHNob3RHcmlkTm9kZS5wcm90b3R5cGUgPSB7CiAKICAgICBoYXNIb3Zlck1lc3NhZ2U6
IGZhbHNlLAogCi0gICAgaG92ZXJNZXNzYWdlOiBmdW5jdGlvbihjYWxsYmFjaykKKyAgICBxdWVy
eU9iamVjdENvbnRlbnQ6IGZ1bmN0aW9uKGNhbGxiYWNrKQogICAgIHsKLSAgICAgICAgY2FsbGJh
Y2soIiIpOwogICAgIH0sCiAKICAgICBfcG9wdWxhdGU6IGZ1bmN0aW9uKGV2ZW50KQpAQCAtMTg1
LDExICsxODQsMTAgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEdlbmVyaWNPYmplY3ROb2Rl
ID0gZnVuY3Rpb24odHJlZSwgbm9kZSkKICAgICBpZiAodGhpcy5fdHlwZSA9PT0gInN0cmluZyIp
CiAgICAgICAgIHRoaXMuaGFzSG92ZXJNZXNzYWdlID0gdHJ1ZTsKICAgICBlbHNlIGlmICh0aGlz
Ll90eXBlID09PSAib2JqZWN0IiAmJiB0aGlzLmlzRE9NV2luZG93KHRoaXMuX25hbWUpKSB7Ci0g
ICAgICAgIHZhciB1cmwgPSBbXTsKLSAgICAgICAgdGhpcy5fbmFtZSA9IHRoaXMuc2hvcnRlbldp
bmRvd1VSTCh0aGlzLl9uYW1lLCBmYWxzZSwgdXJsKTsKLSAgICAgICAgdGhpcy5fdXJsID0gdXJs
WzBdOworICAgICAgICB0aGlzLl9uYW1lID0gdGhpcy5zaG9ydGVuV2luZG93VVJMKHRoaXMuX25h
bWUsIGZhbHNlKTsKKyAgICAgICAgdGhpcy5oYXNIb3Zlck1lc3NhZ2UgPSB0cnVlOworICAgIH0g
ZWxzZSBpZiAobm9kZS5mbGFncyAmIHRyZWUuc25hcHNob3Qubm9kZUZsYWdzLmNhbkJlUXVlcmll
ZCkKICAgICAgICAgdGhpcy5oYXNIb3Zlck1lc3NhZ2UgPSB0cnVlOwotICAgIH0KIH07CiAKIFdl
Ykluc3BlY3Rvci5IZWFwU25hcHNob3RHZW5lcmljT2JqZWN0Tm9kZS5wcm90b3R5cGUgPSB7CkBA
IC0yNTksNiArMjU3LDggQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdEdlbmVyaWNPYmplY3RO
b2RlLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICB2YWx1ZSArPSAiIFtdIjsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9OworICAgICAgICBpZiAodGhpcy5oYXNIb3Zlck1lc3Nh
Z2UpCisgICAgICAgICAgICB2YWx1ZVN0eWxlICs9ICIgaGlnaGxpZ2h0IjsKICAgICAgICAgZGF0
YVsib2JqZWN0Il0gPSB7IHZhbHVlU3R5bGU6IHZhbHVlU3R5bGUsIHZhbHVlOiB2YWx1ZSArICIg
QCIgKyB0aGlzLnNuYXBzaG90Tm9kZUlkIH07CiAKICAgICAgICAgdmFyIHZpZXcgPSB0aGlzLmRh
dGFHcmlkLnNuYXBzaG90VmlldzsKQEAgLTI2OCwxMiArMjY4LDIwIEBAIFdlYkluc3BlY3Rvci5I
ZWFwU25hcHNob3RHZW5lcmljT2JqZWN0Tm9kZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVy
biB0aGlzLl9lbmhhbmNlRGF0YSA/IHRoaXMuX2VuaGFuY2VEYXRhKGRhdGEpIDogZGF0YTsKICAg
ICB9LAogCi0gICAgaG92ZXJNZXNzYWdlOiBmdW5jdGlvbihjYWxsYmFjaykKKyAgICBxdWVyeU9i
amVjdENvbnRlbnQ6IGZ1bmN0aW9uKGNhbGxiYWNrKQogICAgIHsKICAgICAgICAgaWYgKHRoaXMu
X3R5cGUgPT09ICJzdHJpbmciKQotICAgICAgICAgICAgY2FsbGJhY2soIlwiIiArIHRoaXMuX25h
bWUgKyAiXCIiLCAiY29uc29sZS1mb3JtYXR0ZWQtc3RyaW5nIik7Ci0gICAgICAgIGVsc2UgaWYg
KHRoaXMuX3VybCkKLSAgICAgICAgICAgIGNhbGxiYWNrKHRoaXMuX3VybCwgImNvbnNvbGUtZm9y
bWF0dGVkLW9iamVjdCIpOworICAgICAgICAgICAgY2FsbGJhY2soV2ViSW5zcGVjdG9yLlJlbW90
ZU9iamVjdC5mcm9tUHJpbWl0aXZlVmFsdWUodGhpcy5fbmFtZSkpOworICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIGZ1bmN0aW9uIGZvcm1hdFJlc3VsdChlcnJvciwgb2JqZWN0KQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGlmICghZXJyb3IgJiYgb2JqZWN0LnR5cGUpCisgICAg
ICAgICAgICAgICAgICAgIGNhbGxiYWNrKFdlYkluc3BlY3Rvci5SZW1vdGVPYmplY3QuZnJvbVBh
eWxvYWQob2JqZWN0KSwgISFlcnJvcik7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICBjYWxsYmFjayhXZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0LmZyb21FcnJvcihX
ZWJJbnNwZWN0b3IuVUlTdHJpbmcoIk5vdCBhdmFpbGFibGUiKSkpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgUHJvZmlsZXJBZ2VudC5nZXRPYmplY3RCeUhlYXBPYmplY3RJZCh0aGlzLnNu
YXBzaG90Tm9kZUlkLCBmb3JtYXRSZXN1bHQpOworICAgICAgICB9CiAgICAgfSwKIAogICAgIGdl
dCBfcmV0YWluZWRTaXplUGVyY2VudCgpCkBAIC0zMDAsMTQgKzMwOCwxMiBAQCBXZWJJbnNwZWN0
b3IuSGVhcFNuYXBzaG90R2VuZXJpY09iamVjdE5vZGUucHJvdG90eXBlID0gewogICAgICAgICBy
ZXR1cm4gZnVsbE5hbWUuc3Vic3RyKDAsIDkpID09PSAiRE9NV2luZG93IjsKICAgICB9LAogCi0g
ICAgc2hvcnRlbldpbmRvd1VSTDogZnVuY3Rpb24oZnVsbE5hbWUsIGhhc09iamVjdElkLCBmdWxs
VVJMUHRyKQorICAgIHNob3J0ZW5XaW5kb3dVUkw6IGZ1bmN0aW9uKGZ1bGxOYW1lLCBoYXNPYmpl
Y3RJZCkKICAgICB7CiAgICAgICAgIHZhciBzdGFydFBvcyA9IGZ1bGxOYW1lLmluZGV4T2YoIi8i
KTsKICAgICAgICAgdmFyIGVuZFBvcyA9IGhhc09iamVjdElkID8gZnVsbE5hbWUuaW5kZXhPZigi
QCIpIDogZnVsbE5hbWUubGVuZ3RoOwogICAgICAgICBpZiAoc3RhcnRQb3MgIT09IC0xICYmIGVu
ZFBvcyAhPT0gLTEpIHsKICAgICAgICAgICAgIHZhciBmdWxsVVJMID0gZnVsbE5hbWUuc3Vic3Ry
aW5nKHN0YXJ0UG9zICsgMSwgZW5kUG9zKS50cmltTGVmdCgpOwotICAgICAgICAgICAgaWYgKGZ1
bGxVUkxQdHIpCi0gICAgICAgICAgICAgICAgZnVsbFVSTFB0clswXSA9IGZ1bGxVUkw7CiAgICAg
ICAgICAgICB2YXIgdXJsID0gZnVsbFVSTC50cmltVVJMKCk7CiAgICAgICAgICAgICBpZiAodXJs
Lmxlbmd0aCA+IDQwKQogICAgICAgICAgICAgICAgIHVybCA9IHVybC50cmltTWlkZGxlKDQwKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGV0YWlsZWRI
ZWFwc2hvdFZpZXcuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RldGFp
bGVkSGVhcHNob3RWaWV3LmpzCmluZGV4IDAwOTY2NTEuLjYxNWY4YjQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGV0YWlsZWRIZWFwc2hvdFZpZXcuanMK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EZXRhaWxlZEhlYXBzaG90
Vmlldy5qcwpAQCAtNjIxLDcgKzYyMSw3IEBAIFdlYkluc3BlY3Rvci5EZXRhaWxlZEhlYXBzaG90
VmlldyA9IGZ1bmN0aW9uKHBhcmVudCwgcHJvZmlsZSkKICAgICB0aGlzLmhlbHBCdXR0b24gPSBu
ZXcgV2ViSW5zcGVjdG9yLlN0YXR1c0JhckJ1dHRvbigiIiwgImhlYXBzaG90LWhlbHAtc3RhdHVz
LWJhci1pdGVtIHN0YXR1cy1iYXItaXRlbSIpOwogICAgIHRoaXMuaGVscEJ1dHRvbi5hZGRFdmVu
dExpc3RlbmVyKCJjbGljayIsIHRoaXMuX2hlbHBDbGlja2VkLmJpbmQodGhpcyksIGZhbHNlKTsK
IAotICAgIHZhciBwb3BvdmVySGVscGVyID0gbmV3IFdlYkluc3BlY3Rvci5Qb3BvdmVySGVscGVy
KHRoaXMuZWxlbWVudCwgdGhpcy5fZ2V0SG92ZXJBbmNob3IuYmluZCh0aGlzKSwgdGhpcy5fc2hv
d1N0cmluZ0NvbnRlbnRQb3BvdmVyLmJpbmQodGhpcykpOworICAgIHZhciBwb3BvdmVySGVscGVy
ID0gbmV3IFdlYkluc3BlY3Rvci5PYmplY3RQb3BvdmVySGVscGVyKHRoaXMuZWxlbWVudCwgdGhp
cy5fZ2V0SG92ZXJBbmNob3IuYmluZCh0aGlzKSwgdGhpcy5fc2hvd09iamVjdFBvcG92ZXIuYmlu
ZCh0aGlzKSwgbnVsbCwgdHJ1ZSk7CiAKICAgICB0aGlzLl9sb2FkUHJvZmlsZSh0aGlzLl9wcm9m
aWxlVWlkLCBwcm9maWxlQ2FsbGJhY2suYmluZCh0aGlzKSk7CiAKQEAgLTEwNjYsMTkgKzEwNjYs
OSBAQCBXZWJJbnNwZWN0b3IuRGV0YWlsZWRIZWFwc2hvdFZpZXcucHJvdG90eXBlID0gewogICAg
ICAgICB0aGlzLnJlZnJlc2hTaG93QXNQZXJjZW50cygpOwogICAgIH0sCiAKLSAgICBfc2hvd1N0
cmluZ0NvbnRlbnRQb3BvdmVyOiBmdW5jdGlvbihhbmNob3IsIHBvcG92ZXIpCisgICAgX3Nob3dP
YmplY3RQb3BvdmVyOiBmdW5jdGlvbihlbGVtZW50LCBzaG93Q2FsbGJhY2spCiAgICAgewotICAg
ICAgICB2YXIgc3RyaW5nQ29udGVudEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJz
cGFuIik7Ci0gICAgICAgIHN0cmluZ0NvbnRlbnRFbGVtZW50LmNsYXNzTmFtZSA9ICJtb25vc3Bh
Y2UiOwotICAgICAgICBzdHJpbmdDb250ZW50RWxlbWVudC5zdHlsZS53aGl0ZVNwYWNlID0gInBy
ZSI7Ci0KLSAgICAgICAgZnVuY3Rpb24gZGlzcGxheVN0cmluZyhuYW1lLCBjbGFzc05hbWUpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHN0cmluZ0NvbnRlbnRFbGVtZW50LnRleHRDb250ZW50ID0g
bmFtZTsKLSAgICAgICAgICAgIHN0cmluZ0NvbnRlbnRFbGVtZW50LmNsYXNzTmFtZSArPSAiICIg
KyBjbGFzc05hbWU7Ci0gICAgICAgICAgICBwb3BvdmVyLnNob3coc3RyaW5nQ29udGVudEVsZW1l
bnQsIGFuY2hvcik7Ci0gICAgICAgIH0KLSAgICAgICAgYW5jaG9yLm5vZGUuaG92ZXJNZXNzYWdl
KGRpc3BsYXlTdHJpbmcpOworICAgICAgICBlbGVtZW50Lm5vZGUucXVlcnlPYmplY3RDb250ZW50
KHNob3dDYWxsYmFjayk7CiAgICAgfSwKIAogICAgIF9oZWxwQ2xpY2tlZDogZnVuY3Rpb24oZXZl
bnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0hlYXBT
bmFwc2hvdC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBz
aG90LmpzCmluZGV4IDkwNDBlYTMuLjMzZjkxOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90LmpzCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90LmpzCkBAIC00OTQsNiArNDk0LDEyIEBA
IFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2RlID0gZnVuY3Rpb24oc25hcHNob3QsIG5vZGVJ
bmRleCkKIH0KIAogV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGUucHJvdG90eXBlID0gewor
ICAgIGdldCBjYW5CZVF1ZXJpZWQoKQorICAgIHsKKyAgICAgICAgdmFyIGZsYWdzID0gdGhpcy5f
c25hcHNob3QuX2ZsYWdzT2ZOb2RlKHRoaXMpOworICAgICAgICByZXR1cm4gISEoZmxhZ3MgJiB0
aGlzLl9zbmFwc2hvdC5fbm9kZUZsYWdzLmNhbkJlUXVlcmllZCk7CisgICAgfSwKKwogICAgIGdl
dCBjbGFzc05hbWUoKQogICAgIHsKICAgICAgICAgc3dpdGNoICh0aGlzLnR5cGUpIHsKQEAgLTUy
OSw2ICs1MzUsMTEgQEAgV2ViSW5zcGVjdG9yLkhlYXBTbmFwc2hvdE5vZGUucHJvdG90eXBlID0g
ewogICAgICAgICByZXR1cm4gdGhpcy5fbm9kZXNbdGhpcy5ub2RlSW5kZXggKyB0aGlzLl9zbmFw
c2hvdC5fZWRnZXNDb3VudE9mZnNldF07CiAgICAgfSwKIAorICAgIGdldCBmbGFncygpCisgICAg
eworICAgICAgICByZXR1cm4gdGhpcy5fc25hcHNob3QuX2ZsYWdzT2ZOb2RlKHRoaXMpOworICAg
IH0sCisKICAgICBnZXQgaWQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX25vZGVzW3Ro
aXMubm9kZUluZGV4ICsgdGhpcy5fc25hcHNob3QuX25vZGVJZE9mZnNldF07CkBAIC01NDQsNiAr
NTU1LDExIEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3ROb2RlLnByb3RvdHlwZSA9IHsKICAg
ICAgICAgcmV0dXJuIHRoaXMuX3R5cGUoKSA9PT0gdGhpcy5fc25hcHNob3QuX25vZGVIaWRkZW5U
eXBlOwogICAgIH0sCiAKKyAgICBnZXQgaXNET01XaW5kb3coKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHRoaXMubmFtZS5zdWJzdHIoMCwgOSkgPT09ICJET01XaW5kb3ciOworICAgIH0sCisKICAg
ICBnZXQgaXNSb290KCkKICAgICB7CiAgICAgICAgIHJldHVybiB0aGlzLm5vZGVJbmRleCA9PT0g
dGhpcy5fc25hcHNob3QuX3Jvb3ROb2RlSW5kZXg7CkBAIC02ODIsNiArNjk4LDggQEAgV2ViSW5z
cGVjdG9yLkhlYXBTbmFwc2hvdC5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuX2VkZ2VJbnZp
c2libGVUeXBlID0gdGhpcy5fZWRnZVR5cGVzLmxlbmd0aDsKICAgICAgICAgdGhpcy5fZWRnZVR5
cGVzLnB1c2goImludmlzaWJsZSIpOwogCisgICAgICAgIHRoaXMuX25vZGVGbGFncyA9IHsgY2Fu
QmVRdWVyaWVkOiAxIH07CisKICAgICAgICAgdGhpcy5fbWFya0ludmlzaWJsZUVkZ2VzKCk7CiAg
ICAgfSwKIApAQCAtNjk5LDYgKzcxNyw3IEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3QucHJv
dG90eXBlID0gewogICAgICAgICBkZWxldGUgdGhpcy5fYmFzZU5vZGVJZHM7CiAgICAgICAgIGRl
bGV0ZSB0aGlzLl9kb21pbmF0ZWROb2RlczsKICAgICAgICAgZGVsZXRlIHRoaXMuX2RvbWluYXRl
ZEluZGV4OworICAgICAgICBkZWxldGUgdGhpcy5fZmxhZ3M7CiAgICAgfSwKIAogICAgIGdldCBf
YWxsTm9kZXMoKQpAQCAtNzYzLDYgKzc4MiwxMyBAQCBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90
LnByb3RvdHlwZSA9IHsKICAgICAgICAgcmV0dXJuIG5ldyBXZWJJbnNwZWN0b3IuSGVhcFNuYXBz
aG90QXJyYXlTbGljZSh0aGlzLCAiX2RvbWluYXRlZE5vZGVzIiwgZG9taW5hdGVkSW5kZXhGcm9t
LCBkb21pbmF0ZWRJbmRleFRvKTsKICAgICB9LAogCisgICAgX2ZsYWdzT2ZOb2RlOiBmdW5jdGlv
bihub2RlKQorICAgIHsKKyAgICAgICAgaWYgKCF0aGlzLl9mbGFncykKKyAgICAgICAgICAgIHRo
aXMuX2NhbGN1bGF0ZUZsYWdzKCk7CisgICAgICAgIHJldHVybiB0aGlzLl9mbGFnc1tub2RlLm5v
ZGVJbmRleF07CisgICAgfSwKKwogICAgIGFnZ3JlZ2F0ZXM6IGZ1bmN0aW9uKHNvcnRlZEluZGV4
ZXMpCiAgICAgewogICAgICAgICBpZiAoIXRoaXMuX2FnZ3JlZ2F0ZXMpCkBAIC05NTksNiArOTg1
LDMyIEBAIFdlYkluc3BlY3Rvci5IZWFwU25hcHNob3QucHJvdG90eXBlID0gewogICAgICAgICBy
ZXR1cm4gYSA8IGIgPyAtMSA6IChhID4gYiA/IDEgOiAwKTsKICAgICB9LAogCisgICAgX2NhbGN1
bGF0ZUZsYWdzOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgZmxhZyA9IHRoaXMuX25v
ZGVGbGFncy5jYW5CZVF1ZXJpZWQ7CisgICAgICAgIHRoaXMuX2ZsYWdzID0gbmV3IEFycmF5KHRo
aXMubm9kZUNvdW50KTsKKyAgICAgICAgLy8gQWxsb3cgcnVudGltZSBwcm9wZXJ0aWVzIHF1ZXJ5
IGZvciBvYmplY3RzIGFjY2Vzc2libGUgZnJvbSBET01XaW5kb3cgb2JqZWN0cworICAgICAgICAv
LyB2aWEgcmVndWxhciBwcm9wZXJ0aWVzLCBhbmQgZm9yIERPTSB3cmFwcGVycy4gVHJ5aW5nIHRv
IGFjY2VzcyByYW5kb20gb2JqZWN0cworICAgICAgICAvLyBjYW4gY2F1c2UgYSBjcmFzaCBkdWUg
dG8gaW5zb25zaXN0ZW50IHN0YXRlIG9mIGludGVybmFsIHByb3BlcnRpZXMgb2Ygd3JhcHBlcnMu
CisgICAgICAgIHZhciBsaXN0ID0gW107CisgICAgICAgIGZvciAodmFyIGl0ZXIgPSB0aGlzLnJv
b3ROb2RlLmVkZ2VzOyBpdGVyLmhhc05leHQoKTsgaXRlci5uZXh0KCkpIHsKKyAgICAgICAgICAg
IGlmIChpdGVyLmVkZ2Uubm9kZS5pc0RPTVdpbmRvdykKKyAgICAgICAgICAgICAgICBsaXN0LnB1
c2goaXRlci5lZGdlLm5vZGUpOworICAgICAgICB9CisgICAgICAgIHdoaWxlIChsaXN0Lmxlbmd0
aCkgeworICAgICAgICAgICAgdmFyIG5vZGUgPSBsaXN0LnNoaWZ0KCk7CisgICAgICAgICAgICBp
ZiAobm9kZS5jYW5CZVF1ZXJpZWQpIGNvbnRpbnVlOworICAgICAgICAgICAgdGhpcy5fZmxhZ3Nb
bm9kZS5ub2RlSW5kZXhdID0gZmxhZzsKKyAgICAgICAgICAgIGZvciAodmFyIGl0ZXIgPSBub2Rl
LmVkZ2VzOyBpdGVyLmhhc05leHQoKTsgaXRlci5uZXh0KCkpIHsKKyAgICAgICAgICAgICAgICB2
YXIgZWRnZSA9IGl0ZXIuZWRnZTsKKyAgICAgICAgICAgICAgICBpZiAoIWVkZ2UuaXNIaWRkZW4g
JiYgIWVkZ2UuaXNJbnZpc2libGUgJiYKKyAgICAgICAgICAgICAgICAgICAgZWRnZS5uYW1lICYm
ICghZWRnZS5pc0ludGVybmFsIHx8IGVkZ2UubmFtZSA9PT0gIm5hdGl2ZSIpICYmCisgICAgICAg
ICAgICAgICAgICAgICFlZGdlLm5vZGUuY2FuQmVRdWVyaWVkKQorICAgICAgICAgICAgICAgICAg
ICBsaXN0LnB1c2goZWRnZS5ub2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0s
CisKICAgICBiYXNlU25hcHNob3RIYXNOb2RlOiBmdW5jdGlvbihiYXNlU25hcHNob3RJZCwgY2xh
c3NOYW1lLCBub2RlSWQpCiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fYmFzZU5vZGVJZHNb
YmFzZVNuYXBzaG90SWRdW2NsYXNzTmFtZV0uYmluYXJ5SW5kZXhPZihub2RlSWQsIHRoaXMuX251
bWJlcnNDb21wYXJhdG9yKSAhPT0gLTE7CkBAIC0xMDE0LDcgKzEwNjYsNyBAQCBXZWJJbnNwZWN0
b3IuSGVhcFNuYXBzaG90LnByb3RvdHlwZSA9IHsKIAogICAgIHVwZGF0ZVN0YXRpY0RhdGE6IGZ1
bmN0aW9uKCkKICAgICB7Ci0gICAgICAgIHJldHVybiB7bm9kZUNvdW50OiB0aGlzLm5vZGVDb3Vu
dCwgcm9vdE5vZGVJbmRleDogdGhpcy5fcm9vdE5vZGVJbmRleCwgdG90YWxTaXplOiB0aGlzLnRv
dGFsU2l6ZSwgdWlkOiB0aGlzLnVpZH07CisgICAgICAgIHJldHVybiB7bm9kZUNvdW50OiB0aGlz
Lm5vZGVDb3VudCwgcm9vdE5vZGVJbmRleDogdGhpcy5fcm9vdE5vZGVJbmRleCwgdG90YWxTaXpl
OiB0aGlzLnRvdGFsU2l6ZSwgdWlkOiB0aGlzLnVpZCwgbm9kZUZsYWdzOiB0aGlzLl9ub2RlRmxh
Z3N9OwogICAgIH0KIH07CiAKQEAgLTEyMzUsNyArMTI4Nyw3IEBAIFdlYkluc3BlY3Rvci5IZWFw
U25hcHNob3ROb2Rlc1Byb3ZpZGVyID0gZnVuY3Rpb24oc25hcHNob3QsIGZpbHRlciwgbm9kZUlu
ZGV4ZXMpCiBXZWJJbnNwZWN0b3IuSGVhcFNuYXBzaG90Tm9kZXNQcm92aWRlci5wcm90b3R5cGUg
PSB7CiAgICAgX3NlcmlhbGl6ZTogZnVuY3Rpb24obm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVy
biB7aWQ6IG5vZGUuaWQsIG5hbWU6IG5vZGUubmFtZSwgbm9kZUluZGV4OiBub2RlLm5vZGVJbmRl
eCwgcmV0YWluZWRTaXplOiBub2RlLnJldGFpbmVkU2l6ZSwgc2VsZlNpemU6IG5vZGUuc2VsZlNp
emUsIHR5cGU6IG5vZGUudHlwZX07CisgICAgICAgIHJldHVybiB7aWQ6IG5vZGUuaWQsIG5hbWU6
IG5vZGUubmFtZSwgbm9kZUluZGV4OiBub2RlLm5vZGVJbmRleCwgcmV0YWluZWRTaXplOiBub2Rl
LnJldGFpbmVkU2l6ZSwgc2VsZlNpemU6IG5vZGUuc2VsZlNpemUsIHR5cGU6IG5vZGUudHlwZSwg
ZmxhZ3M6IG5vZGUuZmxhZ3N9OwogICAgIH0sCiAKICAgICBzb3J0OiBmdW5jdGlvbihjb21wYXJh
dG9yLCBsZWZ0Qm91bmQsIHJpZ2h0Qm91bmQsIGNvdW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9IZWFwU25hcHNob3RQcm94eS5qcyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSGVhcFNuYXBzaG90UHJveHkuanMKaW5kZXggNDRh
MDU0NC4uN2Y1N2QzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9IZWFwU25hcHNob3RQcm94eS5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0hlYXBTbmFwc2hvdFByb3h5LmpzCkBAIC0zNzAsNiArMzcwLDExIEBAIFdlYklu
c3BlY3Rvci5IZWFwU25hcHNob3RQcm94eS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuY2Fs
bE1ldGhvZChjYWxsYmFjaywgIm5vZGVGaWVsZFZhbHVlc0J5SW5kZXgiLCBmaWVsZE5hbWUsIGlu
ZGV4ZXMpOwogICAgIH0sCiAKKyAgICBnZXQgbm9kZUZsYWdzKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiB0aGlzLl9zdGF0aWNEYXRhLm5vZGVGbGFnczsKKyAgICB9LAorCiAgICAgcHVzaEJhc2VJ
ZHM6IGZ1bmN0aW9uKHNuYXBzaG90SWQsIGNsYXNzTmFtZSwgbm9kZUlkcykKICAgICB7CiAgICAg
ICAgIHRoaXMuY2FsbE1ldGhvZChudWxsLCAicHVzaEJhc2VJZHMiLCBzbmFwc2hvdElkLCBjbGFz
c05hbWUsIG5vZGVJZHMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9SZW1vdGVPYmplY3QuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1JlbW90ZU9iamVjdC5qcwppbmRleCBhNTNjMjk1Li5jMGVhMWZiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1JlbW90ZU9iamVjdC5qcworKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1JlbW90ZU9iamVjdC5qcwpAQCAtNTQs
NiArNTQsMTEgQEAgV2ViSW5zcGVjdG9yLlJlbW90ZU9iamVjdCA9IGZ1bmN0aW9uKG9iamVjdElk
LCB0eXBlLCBzdWJ0eXBlLCB2YWx1ZSwgZGVzY3JpcHRpb24KICAgICB9CiB9CiAKK1dlYkluc3Bl
Y3Rvci5SZW1vdGVPYmplY3QuZnJvbUVycm9yID0gZnVuY3Rpb24oZXJyb3JEZXNjcmlwdGlvbikK
K3sKKyAgICByZXR1cm4gbmV3IFdlYkluc3BlY3Rvci5SZW1vdGVPYmplY3QobnVsbCwgbnVsbCwg
bnVsbCwgZXJyb3JEZXNjcmlwdGlvbik7Cit9CisKIFdlYkluc3BlY3Rvci5SZW1vdGVPYmplY3Qu
ZnJvbVByaW1pdGl2ZVZhbHVlID0gZnVuY3Rpb24odmFsdWUpCiB7CiAgICAgcmV0dXJuIG5ldyBX
ZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0KG51bGwsIHR5cGVvZiB2YWx1ZSwgbnVsbCwgdmFsdWUp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9oZWFwUHJv
ZmlsZXIuY3NzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9oZWFwUHJvZmls
ZXIuY3NzCmluZGV4IDYyYmQwYTAuLjBiMzk2ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvaGVhcFByb2ZpbGVyLmNzcworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2hlYXBQcm9maWxlci5jc3MKQEAgLTE5NCw2ICsxOTQsMTAg
QEAgYm9keS5pbmFjdGl2ZSAuaGVhcC1zbmFwc2hvdC1zaWRlYmFyLXRyZWUtaXRlbS53YWl0LnNl
bGVjdGVkIC5pY29uIHsKICAgICBtYXJnaW4tcmlnaHQ6IDhweDsKIH0KIAorLmRldGFpbGVkLWhl
YXBzaG90LXZpZXcgdHI6bm90KC5zZWxlY3RlZCkgdGQub2JqZWN0LWNvbHVtbiBzcGFuLmhpZ2hs
aWdodCB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI1NSwgMjU1LCAyMDApOworfQorCiAu
aGVhcHNob3QtaGVscC1zdGF0dXMtYmFyLWl0ZW0gLmdseXBoIHsKICAgICAtd2Via2l0LW1hc2st
cG9zaXRpb246IC0xNjBweCAwOwogfQo=
</data>
<flag name="review"
          id="106982"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
    <flag name="commit-queue"
          id="106983"
          type_id="3"
          status="-"
          setter="mnaganov"
    />
          </attachment>
      

    </bug>

</bugzilla>