<?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>204430</bug_id>
          
          <creation_ts>2019-11-20 16:50:52 -0800</creation_ts>
          <short_desc>Web Inspector: add support for new kinds of diagnostic events</short_desc>
          <delta_ts>2019-11-22 12:02:31 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Blaze Burg">bburg</reporter>
          <assigned_to name="Blaze Burg">bburg</assigned_to>
          <cc>bburg</cc>
    
    <cc>hi</cc>
    
    <cc>inspector-bugzilla-changes</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1592209</commentid>
    <comment_count>0</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2019-11-20 16:50:52 -0800</bug_when>
    <thetext>.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592449</commentid>
    <comment_count>1</comment_count>
      <attachid>384074</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2019-11-21 11:10:29 -0800</bug_when>
    <thetext>Created attachment 384074
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592546</commentid>
    <comment_count>2</comment_count>
      <attachid>384074</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2019-11-21 14:53:28 -0800</bug_when>
    <thetext>Comment on attachment 384074
Patch

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

r=me, nice work!

&gt; Source/WebKit/ChangeLog:8
&gt; +        * WebKit.xcodeproj/project.pbxproj: Sort the project after recent changes.

Is this really necessary in this patch? 😅

&gt; Source/WebInspectorUI/UserInterface/Controllers/DiagnosticController.js:30
&gt; +        console.assert(InspectorFrontendHost.supportsDiagnosticLogging);

Will this fail when running inspector tests?

&gt; Source/WebInspectorUI/UserInterface/Controllers/DiagnosticController.js:35
&gt; +        this._autoLogDiagnosticEventsToConsole = WI.settings.debugAutoLogDiagnosticEvents.value;

We normally wrap debug settings with a check for `WI.isDebugUIEnabled()` so that production/engineering builds aren&apos;t able to configure these values.
```
    this._autoLogDiagnosticEventsToConsole = WI.isDebugUIEnabled() ? WI.settings.debugAutoLogDiagnosticEvents.value : WI.settings.debugAutoLogDiagnosticEvents.defaultValue;
```

&gt; Source/WebInspectorUI/UserInterface/Controllers/DiagnosticController.js:44
&gt; +    get diagnosticLoggingAvailable() { return this._diagnosticLoggingAvailable; }

Style: if one of a get-set pair is multi-line, we normally make both multi-line for consistency

&gt; Source/WebInspectorUI/UserInterface/Controllers/DiagnosticController.js:47
&gt; +        if (this._diagnosticLoggingAvailable == available)

Style: `===`

&gt; Source/WebInspectorUI/UserInterface/Controllers/DiagnosticController.js:56
&gt; +        this._recorders.add(recorder);

Should we `console.assert(!this._recorders.has(recorder));`?

&gt; Source/WebInspectorUI/UserInterface/Controllers/DiagnosticController.js:78
&gt; +        this._updateRecorderStates();

Ditto (35)

&gt; Source/WebInspectorUI/UserInterface/Controllers/DiagnosticController.js:83
&gt; +        this._autoLogDiagnosticEventsToConsole = WI.settings.debugAutoLogDiagnosticEvents.value;

Ditto (35)

&gt; Source/WebInspectorUI/UserInterface/Controllers/DiagnosticController.js:88
&gt; +        let isActive = this._diagnosticLoggingAvailable &amp;&amp; WI.settings.debugEnableDiagnosticLogging.value;

Ditto (35)

&gt; Source/WebInspectorUI/UserInterface/Controllers/DiagnosticEventRecorder.js:30
&gt; +        console.assert(controller instanceof WI.DiagnosticController, controller);

Should we also `console.assert(InspectorFrontendHost.supportsDiagnosticLogging);`?

&gt; Source/WebInspectorUI/UserInterface/Controllers/DiagnosticEventRecorder.js:40
&gt; +    get active() { return this._active; }

Ditto (DiagnosticController.js:44)

&gt; Source/WebInspectorUI/UserInterface/Controllers/DiagnosticEventRecorder.js:44
&gt; +        if (this._active == value)

Style: `===`

&gt; Source/WebInspectorUI/UserInterface/Controllers/TabActivityDiagnosticEventRecorder.js:36
&gt; +    // WI.DiagnosticEventRecorder

Style: we normally just use `// Protected`

&gt; Source/WebInspectorUI/UserInterface/Controllers/TabActivityDiagnosticEventRecorder.js:70
&gt; +    handleEvent(event)

This should really be in a `// Public` section given that it&apos;s called by external code.

Also, can we please not use `handleEvent`?  It makes it harder for people to follow/search code, as it&apos;s a totally invisible and sorta edge-case feature of DOM events.  I&apos;d far prefer we use the various callback names directly when adding/removing event listeners.

&gt; LayoutTests/inspector/unit-tests/diagnostic-controller.html:89
&gt; +            recorder.sendEvent(&quot;TestEvent.3&quot;, {&quot;answer&quot;: 42});

Rather than use `42`, could we instead have text in the event that indicates whether we should expect to see it in the output or not?
```
    InspectorTest.log(&quot;Triggering a diagnostic event that should be logged...&quot;);
    recorder.sendEvent(&quot;TestEvent.2&quot;, {&quot;answer&quot;: &quot;should be logged&quot;});

    InspectorTest.log(&quot;Making diagnostics not available...&quot;);
    diagnosticController.diagnosticLoggingAvailable = false;

    InspectorTest.log(&quot;Triggering a diagnostic event that should not be logged...&quot;);
    recorder.sendEvent(&quot;TestEvent.3&quot;, {&quot;answer&quot;: &quot;should not be logged&quot;});
```</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592650</commentid>
    <comment_count>3</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2019-11-21 21:11:24 -0800</bug_when>
    <thetext>(In reply to Devin Rousso from comment #2)
&gt; Comment on attachment 384074 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=384074&amp;action=review
&gt; 
&gt; r=me, nice work!
&gt; 
&gt; &gt; Source/WebKit/ChangeLog:8
&gt; &gt; +        * WebKit.xcodeproj/project.pbxproj: Sort the project after recent changes.
&gt; 
&gt; Is this really necessary in this patch? 😅

I landed this separately.
 
&gt; &gt; Source/WebInspectorUI/UserInterface/Controllers/DiagnosticController.js:30
&gt; &gt; +        console.assert(InspectorFrontendHost.supportsDiagnosticLogging);
&gt; 
&gt; Will this fail when running inspector tests?

It&apos;s incorrect, so I removed it.
&gt; &gt; Source/WebInspectorUI/UserInterface/Controllers/DiagnosticController.js:35
&gt; &gt; +        this._autoLogDiagnosticEventsToConsole = WI.settings.debugAutoLogDiagnosticEvents.value;
&gt; 
&gt; We normally wrap debug settings with a check for `WI.isDebugUIEnabled()` so
&gt; that production/engineering builds aren&apos;t able to configure these values.
&gt; ```
&gt;     this._autoLogDiagnosticEventsToConsole = WI.isDebugUIEnabled() ?
&gt; WI.settings.debugAutoLogDiagnosticEvents.value :
&gt; WI.settings.debugAutoLogDiagnosticEvents.defaultValue;
&gt; ```
&gt; 
&gt; &gt; Source/WebInspectorUI/UserInterface/Controllers/DiagnosticController.js:44
&gt; &gt; +    get diagnosticLoggingAvailable() { return this._diagnosticLoggingAvailable; }
&gt; 
&gt; Style: if one of a get-set pair is multi-line, we normally make both
&gt; multi-line for consistency
&gt; 
&gt; &gt; Source/WebInspectorUI/UserInterface/Controllers/DiagnosticController.js:47
&gt; &gt; +        if (this._diagnosticLoggingAvailable == available)
&gt; 
&gt; Style: `===`
&gt; 
&gt; &gt; Source/WebInspectorUI/UserInterface/Controllers/DiagnosticController.js:56
&gt; &gt; +        this._recorders.add(recorder);
&gt; 
&gt; Should we `console.assert(!this._recorders.has(recorder));`?
&gt; 
&gt; &gt; Source/WebInspectorUI/UserInterface/Controllers/DiagnosticController.js:78
&gt; &gt; +        this._updateRecorderStates();
&gt; 
&gt; Ditto (35)
&gt; 
&gt; &gt; Source/WebInspectorUI/UserInterface/Controllers/DiagnosticController.js:83
&gt; &gt; +        this._autoLogDiagnosticEventsToConsole = WI.settings.debugAutoLogDiagnosticEvents.value;
&gt; 
&gt; Ditto (35)
&gt; 
&gt; &gt; Source/WebInspectorUI/UserInterface/Controllers/DiagnosticController.js:88
&gt; &gt; +        let isActive = this._diagnosticLoggingAvailable &amp;&amp; WI.settings.debugEnableDiagnosticLogging.value;

If this is really the pattern to use... then we should add a different getter that does it automatically.
 
&gt; Ditto (35)
&gt; 
&gt; &gt; Source/WebInspectorUI/UserInterface/Controllers/DiagnosticEventRecorder.js:30
&gt; &gt; +        console.assert(controller instanceof WI.DiagnosticController, controller);
&gt; 
&gt; Should we also
&gt; `console.assert(InspectorFrontendHost.supportsDiagnosticLogging);`?
&gt; 
&gt; &gt; Source/WebInspectorUI/UserInterface/Controllers/DiagnosticEventRecorder.js:40
&gt; &gt; +    get active() { return this._active; }
&gt; 
&gt; Ditto (DiagnosticController.js:44)
&gt; 
&gt; &gt; Source/WebInspectorUI/UserInterface/Controllers/DiagnosticEventRecorder.js:44
&gt; &gt; +        if (this._active == value)
&gt; 
&gt; Style: `===`
&gt; 
&gt; &gt; Source/WebInspectorUI/UserInterface/Controllers/TabActivityDiagnosticEventRecorder.js:36
&gt; &gt; +    // WI.DiagnosticEventRecorder
&gt; 
&gt; Style: we normally just use `// Protected`
&gt; 
&gt; &gt; Source/WebInspectorUI/UserInterface/Controllers/TabActivityDiagnosticEventRecorder.js:70
&gt; &gt; +    handleEvent(event)
&gt; 
&gt; This should really be in a `// Public` section given that it&apos;s called by
&gt; external code.
&gt; 
&gt; Also, can we please not use `handleEvent`?  It makes it harder for people to
&gt; follow/search code, as it&apos;s a totally invisible and sorta edge-case feature
&gt; of DOM events.  I&apos;d far prefer we use the various callback names directly
&gt; when adding/removing event listeners.

Hard shrug. handleEvent is annoying, but so is binding all event listeners and storing them simply to make code slightly easier to search. I found many instances of handleEvent in user event handling code, and just one instance where we bother to bind a class instance method.

&gt; 
&gt; &gt; LayoutTests/inspector/unit-tests/diagnostic-controller.html:89
&gt; &gt; +            recorder.sendEvent(&quot;TestEvent.3&quot;, {&quot;answer&quot;: 42});
&gt; 
&gt; Rather than use `42`, could we instead have text in the event that indicates
&gt; whether we should expect to see it in the output or not?

Good point!

&gt; ```
&gt;     InspectorTest.log(&quot;Triggering a diagnostic event that should be
&gt; logged...&quot;);
&gt;     recorder.sendEvent(&quot;TestEvent.2&quot;, {&quot;answer&quot;: &quot;should be logged&quot;});
&gt; 
&gt;     InspectorTest.log(&quot;Making diagnostics not available...&quot;);
&gt;     diagnosticController.diagnosticLoggingAvailable = false;
&gt; 
&gt;     InspectorTest.log(&quot;Triggering a diagnostic event that should not be
&gt; logged...&quot;);
&gt;     recorder.sendEvent(&quot;TestEvent.3&quot;, {&quot;answer&quot;: &quot;should not be logged&quot;});
&gt; ```</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592939</commentid>
    <comment_count>4</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2019-11-22 12:01:35 -0800</bug_when>
    <thetext>Committed r252790: &lt;https://trac.webkit.org/changeset/252790&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1592940</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-11-22 12:02:31 -0800</bug_when>
    <thetext>&lt;rdar://problem/57436497&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384074</attachid>
            <date>2019-11-21 11:10:29 -0800</date>
            <delta_ts>2019-11-21 14:53:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204430-20191121111029.patch</filename>
            <type>text/plain</type>
            <size>36472</size>
            <attacher name="Blaze Burg">bburg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyNzQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwppbmRleCA3
MjRjMzZlODI5OGRjYmMyZmUyZTUzOTlhOTM0MGFhZGRmNzc1NTBmLi5hNzg0ZWQ2NzgzYTlhNzIz
MTE4NzdiN2ZkOThiNmJhMmUzMTk1MmI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4NCBAQAorMjAxOS0xMS0yMCAgQnJpYW4gQnVyZyAgPGJidXJnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBXZWIgSW5zcGVjdG9yOiBhZGQgc3VwcG9ydCBmb3IgbmV3IGtpbmRzIG9mIGRpYWdu
b3N0aWMgZXZlbnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMDQ0MzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUaGlzIHBhdGNoIHJlc3RydWN0dXJlcyB0aGUgZXhpc3RpbmcgRGlhZ25vc3RpY0NvbnRy
b2xsZXIgdG8gc3VwcG9ydCBtdWx0aXBsZQorICAgICAgICBzZWxmLWNvbnRhaW5lZCBldmVudCBy
ZWNvcmRlcnMuIFRoZSBmaXJzdCBzdWNoIHJlY29yZGVyIGlzIGZvciB0aGUgVGFiQWN0aXZpdHkK
KyAgICAgICAgZGlhZ25vc3RpYyBldmVudC4gTW9yZSB3aWxsIGJlIGFkZGVkIGxhdGVyLgorCisg
ICAgICAgIEFkZCB0d28gZW5naW5lZXJpbmcgc2V0dGluZ3M6IG9uZSB3aGljaCBhdXRvLWxvZ3Mg
ZGlhZ25vc3RpYyBldmVudHMgdG8gSW5zcGVjdG9yXjIgY29uc29sZSwKKyAgICAgICAgYW5kIGFu
b3RoZXIgd2hpY2ggZm9yY2VzIERpYWdub3N0aWNDb250cm9sbGVyIHRvIGJlIGFjdGl2ZSBvciBp
bmFjdGl2ZSByZWdhcmRsZXNzIG9mCisgICAgICAgIHdoZXRoZXIgYSBkaWFnbm9zdGljIGxvZ2dp
bmcgZGVsZWdhdGUgaXMgYWN0dWFsbHkgaW5zdGFsbGVkLiBUaGlzIGlzIGZvciBtYW51YWwgdGVz
dGluZy4KKworICAgICAgICBUaGlzIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgZnVuY3Rp
b25hbGl0eSBjaGFuZ2VzIHRvIGRpYWdub3N0aWMgZXZlbnQgY29sbGVjdGlvbi4KKyAgICAgICAg
VGhlIFRhYkFjdGl2aXR5RGlhZ25vc3RpY2V2ZW50UmVjb3JkZXIgc3RpbGwgbmVlZHMgc29tZSBj
aGFuZ2VzIGZvciBpdCB0byBzYW1wbGUgY29ycmVjdGx5LiAKKworICAgICAgICBOZXcgVGVzdDog
aW5zcGVjdG9yL3VuaXQtdGVzdHMvZGlhZ25vc3RpYy1jb250cm9sbGVyLmh0bWwKKworICAgICAg
ICAqIFVzZXJJbnRlcmZhY2UvQmFzZS9NYWluLmpzOgorICAgICAgICAoV0kuY29udGVudExvYWRl
ZCk6CisgICAgICAgICogVXNlckludGVyZmFjZS9CYXNlL1NldHRpbmcuanM6CisgICAgICAgICog
VXNlckludGVyZmFjZS9Db250cm9sbGVycy9EaWFnbm9zdGljQ29udHJvbGxlci5qczoKKyAgICAg
ICAgKFdJLkRpYWdub3N0aWNDb250cm9sbGVyKToKKyAgICAgICAgKFdJLkRpYWdub3N0aWNDb250
cm9sbGVyLnByb3RvdHlwZS5zZXQgZGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUpOgorICAgICAg
ICAoV0kuRGlhZ25vc3RpY0NvbnRyb2xsZXIucHJvdG90eXBlLmFkZFJlY29yZGVyKToKKyAgICAg
ICAgKFdJLkRpYWdub3N0aWNDb250cm9sbGVyLnByb3RvdHlwZS5sb2dEaWFnbm9zdGljRXZlbnQp
OgorICAgICAgICAoV0kuRGlhZ25vc3RpY0NvbnRyb2xsZXIucHJvdG90eXBlLl9kZWJ1Z0VuYWJs
ZURpYWdub3N0aWNMb2dnaW5nU2V0dGluZ0RpZENoYW5nZSk6CisgICAgICAgIChXSS5EaWFnbm9z
dGljQ29udHJvbGxlci5wcm90b3R5cGUuX2RlYnVnQXV0b0xvZ0RpYWdub3N0aWNFdmVudHNTZXR0
aW5nRGlkQ2hhbmdlKToKKyAgICAgICAgKFdJLkRpYWdub3N0aWNDb250cm9sbGVyLnByb3RvdHlw
ZS5fdXBkYXRlUmVjb3JkZXJTdGF0ZXMpOgorICAgICAgICAoV0kuRGlhZ25vc3RpY0NvbnRyb2xs
ZXIuc3VwcG9ydHNEaWFnbm9zdGljTG9nZ2luZyk6IERlbGV0ZWQuCisgICAgICAgIChXSS5EaWFn
bm9zdGljQ29udHJvbGxlci5wcm90b3R5cGUubG9nRGlhZ25vc3RpY01lc3NhZ2UpOiBEZWxldGVk
LgorICAgICAgICAoV0kuRGlhZ25vc3RpY0NvbnRyb2xsZXIucHJvdG90eXBlLl9kaWRJbnRlcmFj
dFdpdGhUYWJDb250ZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdJLkRpYWdub3N0aWNDb250cm9s
bGVyLnByb3RvdHlwZS5fY2xlYXJUYWJBY3Rpdml0eVRpbWVvdXQpOiBEZWxldGVkLgorICAgICAg
ICAoV0kuRGlhZ25vc3RpY0NvbnRyb2xsZXIucHJvdG90eXBlLl9iZWdpblRhYkFjdGl2aXR5VGlt
ZW91dCk6IERlbGV0ZWQuCisgICAgICAgIChXSS5EaWFnbm9zdGljQ29udHJvbGxlci5wcm90b3R5
cGUuX3N0b3BUcmFja2luZ1RhYkFjdGl2aXR5KTogRGVsZXRlZC4KKyAgICAgICAgKFdJLkRpYWdu
b3N0aWNDb250cm9sbGVyLnByb3RvdHlwZS5faGFuZGxlV2luZG93Rm9jdXMpOiBEZWxldGVkLgor
ICAgICAgICAoV0kuRGlhZ25vc3RpY0NvbnRyb2xsZXIucHJvdG90eXBlLl9oYW5kbGVXaW5kb3dC
bHVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdJLkRpYWdub3N0aWNDb250cm9sbGVyLnByb3RvdHlw
ZS5faGFuZGxlV2luZG93S2V5RG93bik6IERlbGV0ZWQuCisgICAgICAgIChXSS5EaWFnbm9zdGlj
Q29udHJvbGxlci5wcm90b3R5cGUuX2hhbmRsZVdpbmRvd01vdXNlRG93bik6IERlbGV0ZWQuCisg
ICAgICAgIChXSS5EaWFnbm9zdGljQ29udHJvbGxlci5wcm90b3R5cGUuX2hhbmRsZVRhYkJyb3dz
ZXJTZWxlY3RlZFRhYkNvbnRlbnRWaWV3RGlkQ2hhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgUmVz
dHJ1Y3R1cmUgRGlhZ25vc3RpY0NvbnRyb2xsZXIgdG8gYmUgZHVtYmVyLiBJdCBob2xkcyBvbiB0
byBhIGxpc3Qgb2YgcmVjb3JkZXJzIGFuZAorICAgICAgICB0dXJucyB0aGVtIG9uIGFuZCBvZmYu
IEFsbCBldmVudCBsb2dnaW5nIGdvZXMgdGhyb3VnaCBvbmUgZnVubmVsIG1ldGhvZCwgd2hpY2gg
ZG9lcyBub3QKKyAgICAgICAgdXNlIEluc3BlY3RvckZyb250ZW5kSG9zdCBhdCBhbGwgd2hlbiBy
dW5uaW5nIGEgV2ViIEluc3BlY3RvciBsYXlvdXQgdGVzdC4KKworICAgICAgICAqIFVzZXJJbnRl
cmZhY2UvQ29udHJvbGxlcnMvRGlhZ25vc3RpY0V2ZW50UmVjb3JkZXIuanM6IEFkZGVkLgorICAg
ICAgICAoV0kuRGlhZ25vc3RpY0V2ZW50UmVjb3JkZXIpOgorICAgICAgICAoV0kuRGlhZ25vc3Rp
Y0V2ZW50UmVjb3JkZXIucHJvdG90eXBlLmdldCBuYW1lKToKKyAgICAgICAgKFdJLkRpYWdub3N0
aWNFdmVudFJlY29yZGVyLnByb3RvdHlwZS5nZXQgYWN0aXZlKToKKyAgICAgICAgKFdJLkRpYWdu
b3N0aWNFdmVudFJlY29yZGVyLnByb3RvdHlwZS5zZXQgYWN0aXZlKToKKyAgICAgICAgKFdJLkRp
YWdub3N0aWNFdmVudFJlY29yZGVyLnByb3RvdHlwZS5zZXR1cCk6CisgICAgICAgIChXSS5EaWFn
bm9zdGljRXZlbnRSZWNvcmRlci5wcm90b3R5cGUudGVhcmRvd24pOgorICAgICAgICBBZGQgYmFz
ZSBjbGFzcyBmb3IgYWxsIGluZGl2aWR1YWwgZGlhZ25vc3RpYyBldmVudCByZWNvcmRlcnMuCisK
KyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1RhYkFjdGl2aXR5RGlhZ25vc3Rp
Y0V2ZW50UmVjb3JkZXIuanM6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL0NvbnRyb2xsZXJzL0RpYWdub3N0aWNDb250cm9sbGVyLmpzLgorICAgICAgICAo
V0kuVGFiQWN0aXZpdHlEaWFnbm9zdGljRXZlbnRSZWNvcmRlcik6CisgICAgICAgIChXSS5UYWJB
Y3Rpdml0eURpYWdub3N0aWNFdmVudFJlY29yZGVyLnByb3RvdHlwZS5zZXR1cCk6CisgICAgICAg
IChXSS5UYWJBY3Rpdml0eURpYWdub3N0aWNFdmVudFJlY29yZGVyLnByb3RvdHlwZS50ZWFyZG93
bik6CisgICAgICAgIChXSS5UYWJBY3Rpdml0eURpYWdub3N0aWNFdmVudFJlY29yZGVyLnByb3Rv
dHlwZS5oYW5kbGVFdmVudCk6CisgICAgICAgIChXSS5UYWJBY3Rpdml0eURpYWdub3N0aWNFdmVu
dFJlY29yZGVyLnByb3RvdHlwZS5fZGlkSW50ZXJhY3RXaXRoVGFiQ29udGVudCk6CisgICAgICAg
IChXSS5UYWJBY3Rpdml0eURpYWdub3N0aWNFdmVudFJlY29yZGVyLnByb3RvdHlwZS5fY2xlYXJU
YWJBY3Rpdml0eVRpbWVvdXQpOgorICAgICAgICAoV0kuVGFiQWN0aXZpdHlEaWFnbm9zdGljRXZl
bnRSZWNvcmRlci5wcm90b3R5cGUuX2JlZ2luVGFiQWN0aXZpdHlUaW1lb3V0KToKKyAgICAgICAg
KFdJLlRhYkFjdGl2aXR5RGlhZ25vc3RpY0V2ZW50UmVjb3JkZXIucHJvdG90eXBlLl9zdG9wVHJh
Y2tpbmdUYWJBY3Rpdml0eSk6CisgICAgICAgIChXSS5UYWJBY3Rpdml0eURpYWdub3N0aWNFdmVu
dFJlY29yZGVyLnByb3RvdHlwZS5faGFuZGxlV2luZG93Rm9jdXMpOgorICAgICAgICAoV0kuVGFi
QWN0aXZpdHlEaWFnbm9zdGljRXZlbnRSZWNvcmRlci5wcm90b3R5cGUuX2hhbmRsZVdpbmRvd0Js
dXIpOgorICAgICAgICAoV0kuVGFiQWN0aXZpdHlEaWFnbm9zdGljRXZlbnRSZWNvcmRlci5wcm90
b3R5cGUuX2hhbmRsZVdpbmRvd0tleURvd24pOgorICAgICAgICAoV0kuVGFiQWN0aXZpdHlEaWFn
bm9zdGljRXZlbnRSZWNvcmRlci5wcm90b3R5cGUuX2hhbmRsZVdpbmRvd01vdXNlRG93bik6Cisg
ICAgICAgIChXSS5UYWJBY3Rpdml0eURpYWdub3N0aWNFdmVudFJlY29yZGVyLnByb3RvdHlwZS5f
aGFuZGxlVGFiQnJvd3NlclNlbGVjdGVkVGFiQ29udGVudFZpZXdEaWRDaGFuZ2UpOgorICAgICAg
ICBNb3ZlIGFsbCB1c2VyIGFjdGl2aXR5IHRyYWNraW5nIHRvIGhlcmUuIFJlc3RydWN0dXJlIHNv
IHRoYXQgdGhlIHJlY29yZGVyIGNhbiBiZQorICAgICAgICB0dXJuZWQgb24gYW5kIG9mZiAodGhp
cyBhZGRzL3JlbW92ZXMgaXRzIGxpc3RlbmVycyBhbmQgdGltZXJzKS4KKworICAgICAgICAqIFVz
ZXJJbnRlcmZhY2UvTWFpbi5odG1sOiBBZGQgbmV3IGZpbGVzLgorICAgICAgICAqIFVzZXJJbnRl
cmZhY2UvUHJvdG9jb2wvSW5zcGVjdG9yRnJvbnRlbmRBUEkuanM6CisgICAgICAgIChJbnNwZWN0
b3JGcm9udGVuZEFQSS5zZXREaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZSk6CisgICAgICAgIEFk
anVzdCB0aGUgbmFtZSwgYXMgV0kuZGlhZ25vc3RpY0NvbnRyb2xsZXIgaXMgbm8gbG9uZ2VyIHVu
ZGVyc2NvcmUtcHJlZml4ZWQuCisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdzL1NldHRp
bmdzVGFiQ29udGVudFZpZXcuanM6CisgICAgICAgIChXSS5TZXR0aW5nc1RhYkNvbnRlbnRWaWV3
LnByb3RvdHlwZS5fY3JlYXRlRGVidWdTZXR0aW5nc1ZpZXcpOgorICAgICAgICBBZGQgbmV3IHNl
dHRpbmdzLgorCiAyMDE5LTExLTIwICBZdXJ5IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFJFR1JFU1NJT04ocjI1MDYxOCk6IG1haW4g
cmVzb3VyY2UgdmlldyBpcyBlbXB0eSB3aGVuIHBhdXNpbmcgb24gaW5saW5lICdkZWJ1Z2dlcicg
c3RhdGVtZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDk5ZmNjMDYyNjNlNzhjYTI3NmFhYzQ2MTA0ZDc2Nzg2ZGMw
MGE4NGQuLmJhZjNkMGNiYjg1MGNiMThmMWFkOTcxZjA4NGVlZTBmZWE0YjkyOTUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTIgQEAKKzIwMTktMTEtMjAgIEJyaWFuIEJ1cmcgIDxiYnVyZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogYWRkIHN1cHBvcnQgZm9yIG5ldyBraW5kcyBv
ZiBkaWFnbm9zdGljIGV2ZW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjA0NDMwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogU29ydCB0aGUg
cHJvamVjdCBhZnRlciByZWNlbnQgY2hhbmdlcy4KKwogMjAxOS0xMS0yMCAgQ2hhbmdTZW9rIE9o
ICA8Y2hhbmdzZW9rQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW0dUS10gQWRkIEFOR0xFIGJhY2tl
bmQgdG8gR1RLIHBvcnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL0Jhc2UvTWFpbi5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L0Jhc2UvTWFpbi5qcwppbmRleCA3NzVkYzgyYmRiZjE4MjYwNmE4Zjg1MjIzMGU4MDI2MWVhNzJl
YTMxLi5lNzY5YjAwOGVhYTMyNjM0MDQ4NTcxYzJjNmIxNjI4MTgyZWRhZDU0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL01haW4uanMKKysrIGIv
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9NYWluLmpzCkBAIC01NDYs
OCArNTQ2LDEwIEBAIFdJLmNvbnRlbnRMb2FkZWQgPSBmdW5jdGlvbigpCiAgICAgaWYgKFdJLnJ1
bkJvb3RzdHJhcE9wZXJhdGlvbnMpCiAgICAgICAgIFdJLnJ1bkJvb3RzdHJhcE9wZXJhdGlvbnMo
KTsKIAotICAgIGlmIChXSS5EaWFnbm9zdGljQ29udHJvbGxlci5zdXBwb3J0c0RpYWdub3N0aWNM
b2dnaW5nKCkpCi0gICAgICAgIFdJLl9kaWFnbm9zdGljQ29udHJvbGxlciA9IG5ldyBXSS5EaWFn
bm9zdGljQ29udHJvbGxlcjsKKyAgICBpZiAoSW5zcGVjdG9yRnJvbnRlbmRIb3N0LnN1cHBvcnRz
RGlhZ25vc3RpY0xvZ2dpbmcpIHsKKyAgICAgICAgV0kuZGlhZ25vc3RpY0NvbnRyb2xsZXIgPSBu
ZXcgV0kuRGlhZ25vc3RpY0NvbnRyb2xsZXI7CisgICAgICAgIFdJLmRpYWdub3N0aWNDb250cm9s
bGVyLmFkZFJlY29yZGVyKG5ldyBXSS5UYWJBY3Rpdml0eURpYWdub3N0aWNFdmVudFJlY29yZGVy
KFdJLmRpYWdub3N0aWNDb250cm9sbGVyKSk7CisgICAgfQogfTsKIAogV0kucGVyZm9ybU9uZVRp
bWVGcm9udGVuZEluaXRpYWxpemF0aW9uc1VzaW5nVGFyZ2V0ID0gZnVuY3Rpb24odGFyZ2V0KQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9TZXR0
aW5nLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9TZXR0aW5n
LmpzCmluZGV4IDk3YzlkYjg0ZDA1Yzc3MDAwMTY3NjQ2ZThiYzc2YTA0YzA3N2MyODIuLmRiNDky
NWFmZjNjNTViNThhNjgzNTk2M2U5NmE3ZDYyZmY3NzI4MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvU2V0dGluZy5qcworKysgYi9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL1NldHRpbmcuanMKQEAgLTIwOCw2ICsy
MDgsOCBAQCBXSS5zZXR0aW5ncyA9IHsKICAgICBkZWJ1Z0VuYWJsZUxheW91dEZsYXNoaW5nOiBu
ZXcgV0kuU2V0dGluZygiZGVidWctZW5hYmxlLWxheW91dC1mbGFzaGluZyIsIGZhbHNlKSwKICAg
ICBkZWJ1Z0VuYWJsZVN0eWxlRWRpdGluZ0RlYnVnTW9kZTogbmV3IFdJLlNldHRpbmcoImRlYnVn
LWVuYWJsZS1zdHlsZS1lZGl0aW5nLWRlYnVnLW1vZGUiLCBmYWxzZSksCiAgICAgZGVidWdFbmFi
bGVVbmNhdWdodEV4Y2VwdGlvblJlcG9ydGVyOiBuZXcgV0kuU2V0dGluZygiZGVidWctZW5hYmxl
LXVuY2F1Z2h0LWV4Y2VwdGlvbi1yZXBvcnRlciIsIHRydWUpLAorICAgIGRlYnVnRW5hYmxlRGlh
Z25vc3RpY0xvZ2dpbmc6IG5ldyBXSS5TZXR0aW5nKCJkZWJ1Zy1lbmFibGUtZGlhZ25vc3RpYy1s
b2dnaW5nIiwgdHJ1ZSksCisgICAgZGVidWdBdXRvTG9nRGlhZ25vc3RpY0V2ZW50czogbmV3IFdJ
LlNldHRpbmcoImRlYnVnLWF1dG8tbG9nLWRpYWdub3N0aWMtZXZlbnRzIiwgZmFsc2UpLAogICAg
IGRlYnVnTGF5b3V0RGlyZWN0aW9uOiBuZXcgV0kuU2V0dGluZygiZGVidWctbGF5b3V0LWRpcmVj
dGlvbi1vdmVycmlkZSIsICJzeXN0ZW0iKSwKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0RpYWdub3N0aWNDb250cm9sbGVy
LmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvRGlh
Z25vc3RpY0NvbnRyb2xsZXIuanMKaW5kZXggNDRmYzM3YmIzNDg2NTczMDE0M2NiZDE5N2IxNTgw
Zjg3NDYyMDY3YS4uMmViY2YwYzVjYWI5ZDllOTg0ZTkzN2I3M2Y3NzdlYjhiMzMzNWViMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMv
RGlhZ25vc3RpY0NvbnRyb2xsZXIuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvQ29udHJvbGxlcnMvRGlhZ25vc3RpY0NvbnRyb2xsZXIuanMKQEAgLTI3LDExNSAr
MjcsNjYgQEAgV0kuRGlhZ25vc3RpY0NvbnRyb2xsZXIgPSBjbGFzcyBEaWFnbm9zdGljQ29udHJv
bGxlcgogewogICAgIGNvbnN0cnVjdG9yKCkKICAgICB7Ci0gICAgICAgIHRoaXMuX3Nob3VsZExv
Z1RhYkNvbnRlbnRBY3Rpdml0eSA9IHRydWU7Ci0gICAgICAgIHRoaXMuX3RhYkFjdGl2aXR5VGlt
ZW91dElkZW50aWZpZXIgPSAwOworICAgICAgICBjb25zb2xlLmFzc2VydChJbnNwZWN0b3JGcm9u
dGVuZEhvc3Quc3VwcG9ydHNEaWFnbm9zdGljTG9nZ2luZyk7CiAKLSAgICAgICAgV0kuVGFiQnJv
d3Nlci5hZGRFdmVudExpc3RlbmVyKFdJLlRhYkJyb3dzZXIuRXZlbnQuU2VsZWN0ZWRUYWJDb250
ZW50Vmlld0RpZENoYW5nZSwgdGhpcy5faGFuZGxlVGFiQnJvd3NlclNlbGVjdGVkVGFiQ29udGVu
dFZpZXdEaWRDaGFuZ2UsIHRoaXMpOworICAgICAgICB0aGlzLl9kaWFnbm9zdGljTG9nZ2luZ0F2
YWlsYWJsZSA9IGZhbHNlOworICAgICAgICB0aGlzLl9yZWNvcmRlcnMgPSBuZXcgU2V0OwogCi0g
ICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7Ci0gICAgICAgICAgICBjYXB0dXJlOiB0cnVlLAotICAg
ICAgICB9OwotICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCB0aGlzLl9o
YW5kbGVXaW5kb3dGb2N1cy5iaW5kKHRoaXMpLCBvcHRpb25zKTsKLSAgICAgICAgd2luZG93LmFk
ZEV2ZW50TGlzdGVuZXIoImJsdXIiLCB0aGlzLl9oYW5kbGVXaW5kb3dCbHVyLmJpbmQodGhpcyks
IG9wdGlvbnMpOwotICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIHRo
aXMuX2hhbmRsZVdpbmRvd0tleURvd24uYmluZCh0aGlzKSwgb3B0aW9ucyk7Ci0gICAgICAgIHdp
bmRvdy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCB0aGlzLl9oYW5kbGVXaW5kb3dNb3Vz
ZURvd24uYmluZCh0aGlzKSwgb3B0aW9ucyk7Ci0gICAgfQotCi0gICAgLy8gU3RhdGljCisgICAg
ICAgIHRoaXMuX2F1dG9Mb2dEaWFnbm9zdGljRXZlbnRzVG9Db25zb2xlID0gV0kuc2V0dGluZ3Mu
ZGVidWdBdXRvTG9nRGlhZ25vc3RpY0V2ZW50cy52YWx1ZTsKKyAgICAgICAgdGhpcy5fbG9nVG9D
b25zb2xlTWV0aG9kID0gd2luZG93Lkluc3BlY3RvclRlc3QgPyBJbnNwZWN0b3JUZXN0LmxvZy5i
aW5kKEluc3BlY3RvclRlc3QpIDogY29uc29sZS5sb2c7CiAKLSAgICBzdGF0aWMgc3VwcG9ydHNE
aWFnbm9zdGljTG9nZ2luZygpCi0gICAgewotICAgICAgICByZXR1cm4gSW5zcGVjdG9yRnJvbnRl
bmRIb3N0LnN1cHBvcnRzRGlhZ25vc3RpY0xvZ2dpbmc7CisgICAgICAgIFdJLnNldHRpbmdzLmRl
YnVnRW5hYmxlRGlhZ25vc3RpY0xvZ2dpbmcuYWRkRXZlbnRMaXN0ZW5lcihXSS5TZXR0aW5nLkV2
ZW50LkNoYW5nZWQsIHRoaXMuX2RlYnVnRW5hYmxlRGlhZ25vc3RpY0xvZ2dpbmdTZXR0aW5nRGlk
Q2hhbmdlLCB0aGlzKTsKKyAgICAgICAgV0kuc2V0dGluZ3MuZGVidWdBdXRvTG9nRGlhZ25vc3Rp
Y0V2ZW50cy5hZGRFdmVudExpc3RlbmVyKFdJLlNldHRpbmcuRXZlbnQuQ2hhbmdlZCwgdGhpcy5f
ZGVidWdBdXRvTG9nRGlhZ25vc3RpY0V2ZW50c1NldHRpbmdEaWRDaGFuZ2UsIHRoaXMpOwogICAg
IH0KIAogICAgIC8vIFB1YmxpYwogCi0gICAgbG9nRGlhZ25vc3RpY01lc3NhZ2UoZXZlbnROYW1l
LCBwYXlsb2FkKQotICAgIHsKLSAgICAgICAgY29uc29sZS5hc3NlcnQoRGlhZ25vc3RpY0NvbnRy
b2xsZXIuc3VwcG9ydHNEaWFnbm9zdGljTG9nZ2luZygpKTsKLSAgICAgICAgY29uc29sZS5hc3Nl
cnQoT2JqZWN0LnZhbHVlcyhEaWFnbm9zdGljQ29udHJvbGxlci5FdmVudE5hbWUpLmluY2x1ZGVz
KGV2ZW50TmFtZSksICJVbmV4cGVjdGVkIGRpYWdub3N0aWMgZXZlbnQgbmFtZSAiICsgZXZlbnRO
YW1lKTsKLQotICAgICAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3QubG9nRGlhZ25vc3RpY0V2ZW50
KGV2ZW50TmFtZSwgSlNPTi5zdHJpbmdpZnkocGF5bG9hZCkpOwotICAgIH0KLQotICAgIC8vIFBy
aXZhdGUKLQotICAgIF9kaWRJbnRlcmFjdFdpdGhUYWJDb250ZW50KCkKKyAgICBnZXQgZGlhZ25v
c3RpY0xvZ2dpbmdBdmFpbGFibGUoKSB7IHJldHVybiB0aGlzLl9kaWFnbm9zdGljTG9nZ2luZ0F2
YWlsYWJsZTsgfQorICAgIHNldCBkaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZShhdmFpbGFibGUp
CiAgICAgewotICAgICAgICBpZiAoIXRoaXMuX3Nob3VsZExvZ1RhYkNvbnRlbnRBY3Rpdml0eSkK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBsZXQgc2VsZWN0ZWRUYWJDb250ZW50Vmll
dyA9IFdJLnRhYkJyb3dzZXIuc2VsZWN0ZWRUYWJDb250ZW50VmlldzsKLSAgICAgICAgY29uc29s
ZS5hc3NlcnQoc2VsZWN0ZWRUYWJDb250ZW50Vmlldyk7Ci0gICAgICAgIGlmICghc2VsZWN0ZWRU
YWJDb250ZW50VmlldykKKyAgICAgICAgaWYgKHRoaXMuX2RpYWdub3N0aWNMb2dnaW5nQXZhaWxh
YmxlID09IGF2YWlsYWJsZSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBsZXQgdGFi
VHlwZSA9IHNlbGVjdGVkVGFiQ29udGVudFZpZXcudHlwZTsKLSAgICAgICAgbGV0IGludGVydmFs
ID0gRGlhZ25vc3RpY0NvbnRyb2xsZXIuQWN0aXZpdHlUaW1pbmdSZXNvbHV0aW9uOwotICAgICAg
ICB0aGlzLmxvZ0RpYWdub3N0aWNNZXNzYWdlKERpYWdub3N0aWNDb250cm9sbGVyLkV2ZW50TmFt
ZS5UYWJBY3Rpdml0eSwge3RhYlR5cGUsIGludGVydmFsfSk7Ci0KLSAgICAgICAgdGhpcy5fYmVn
aW5UYWJBY3Rpdml0eVRpbWVvdXQoKTsKLSAgICB9Ci0KLSAgICBfY2xlYXJUYWJBY3Rpdml0eVRp
bWVvdXQoKQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMuX3RhYkFjdGl2aXR5VGltZW91dElkZW50
aWZpZXIpIHsKLSAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90YWJBY3Rpdml0eVRpbWVv
dXRJZGVudGlmaWVyKTsKLSAgICAgICAgICAgIHRoaXMuX3RhYkFjdGl2aXR5VGltZW91dElkZW50
aWZpZXIgPSAwOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgX2JlZ2luVGFiQWN0aXZpdHlUaW1l
b3V0KCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3N0b3BUcmFja2luZ1RhYkFjdGl2aXR5KCk7Ci0K
LSAgICAgICAgdGhpcy5fdGFiQWN0aXZpdHlUaW1lb3V0SWRlbnRpZmllciA9IHNldFRpbWVvdXQo
KCkgPT4gewotICAgICAgICAgICAgdGhpcy5fc2hvdWxkTG9nVGFiQ29udGVudEFjdGl2aXR5ID0g
dHJ1ZTsKLSAgICAgICAgICAgIHRoaXMuX3RhYkFjdGl2aXR5VGltZW91dElkZW50aWZpZXIgPSAw
OwotICAgICAgICB9LCBEaWFnbm9zdGljQ29udHJvbGxlci5BY3Rpdml0eVRpbWluZ1Jlc29sdXRp
b24pOworICAgICAgICB0aGlzLl9kaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZSA9IGF2YWlsYWJs
ZTsKKyAgICAgICAgdGhpcy5fdXBkYXRlUmVjb3JkZXJTdGF0ZXMoKTsKICAgICB9CiAKLSAgICBf
c3RvcFRyYWNraW5nVGFiQWN0aXZpdHkoKQorICAgIGFkZFJlY29yZGVyKHJlY29yZGVyKQogICAg
IHsKLSAgICAgICAgdGhpcy5fY2xlYXJUYWJBY3Rpdml0eVRpbWVvdXQoKTsKLSAgICAgICAgdGhp
cy5fc2hvdWxkTG9nVGFiQ29udGVudEFjdGl2aXR5ID0gZmFsc2U7CisgICAgICAgIHRoaXMuX3Jl
Y29yZGVycy5hZGQocmVjb3JkZXIpOworICAgICAgICB0aGlzLl91cGRhdGVSZWNvcmRlclN0YXRl
cygpOwogICAgIH0KIAotICAgIF9oYW5kbGVXaW5kb3dGb2N1cyhldmVudCkKKyAgICBsb2dEaWFn
bm9zdGljRXZlbnQoZXZlbnROYW1lLCBwYXlsb2FkKQogICAgIHsKLSAgICAgICAgaWYgKGV2ZW50
LnRhcmdldCAhPT0gd2luZG93KQorICAgICAgICAvLyBEb24ndCByZWx5IG9uIGEgZGlhZ25vc3Rp
YyBsb2dnaW5nIGRlbGVnYXRlIHRvIHVuaXQgdGVzdCBmcm9udGVuZCBkaWFnbm9zdGljcyBjb2Rl
LgorICAgICAgICBpZiAod2luZG93Lkluc3BlY3RvclRlc3QpIHsKKyAgICAgICAgICAgIHRoaXMu
X2xvZ1RvQ29uc29sZU1ldGhvZChgUmVjZWl2ZWQgZGlhZ25vc3RpYyBldmVudDogJHtldmVudE5h
bWV9ID0+ICR7SlNPTi5zdHJpbmdpZnkocGF5bG9hZCl9YCk7CiAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KIAotICAgICAgICB0aGlzLl9zaG91bGRMb2dUYWJDb250ZW50QWN0aXZpdHkg
PSB0cnVlOwotICAgIH0KLQotICAgIF9oYW5kbGVXaW5kb3dCbHVyKGV2ZW50KQotICAgIHsKLSAg
ICAgICAgaWYgKGV2ZW50LnRhcmdldCAhPT0gd2luZG93KQotICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBpZiAodGhpcy5fYXV0b0xvZ0RpYWdub3N0aWNFdmVudHNUb0NvbnNvbGUpCisgICAg
ICAgICAgICB0aGlzLl9sb2dUb0NvbnNvbGVNZXRob2QoZXZlbnROYW1lLCBwYXlsb2FkKTsKIAot
ICAgICAgICB0aGlzLl9zdG9wVHJhY2tpbmdUYWJBY3Rpdml0eSgpOworICAgICAgICBJbnNwZWN0
b3JGcm9udGVuZEhvc3QubG9nRGlhZ25vc3RpY0V2ZW50KGV2ZW50TmFtZSwgSlNPTi5zdHJpbmdp
ZnkocGF5bG9hZCkpOwogICAgIH0KIAotICAgIF9oYW5kbGVXaW5kb3dLZXlEb3duKGV2ZW50KQor
ICAgIC8vIFByaXZhdGUKKworICAgIF9kZWJ1Z0VuYWJsZURpYWdub3N0aWNMb2dnaW5nU2V0dGlu
Z0RpZENoYW5nZSgpCiAgICAgewotICAgICAgICB0aGlzLl9kaWRJbnRlcmFjdFdpdGhUYWJDb250
ZW50KCk7CisgICAgICAgIHRoaXMuX3VwZGF0ZVJlY29yZGVyU3RhdGVzKCk7CiAgICAgfQogCi0g
ICAgX2hhbmRsZVdpbmRvd01vdXNlRG93bihldmVudCkKKyAgICBfZGVidWdBdXRvTG9nRGlhZ25v
c3RpY0V2ZW50c1NldHRpbmdEaWRDaGFuZ2UoKQogICAgIHsKLSAgICAgICAgdGhpcy5fZGlkSW50
ZXJhY3RXaXRoVGFiQ29udGVudCgpOworICAgICAgICB0aGlzLl9hdXRvTG9nRGlhZ25vc3RpY0V2
ZW50c1RvQ29uc29sZSA9IFdJLnNldHRpbmdzLmRlYnVnQXV0b0xvZ0RpYWdub3N0aWNFdmVudHMu
dmFsdWU7CiAgICAgfQogCi0gICAgX2hhbmRsZVRhYkJyb3dzZXJTZWxlY3RlZFRhYkNvbnRlbnRW
aWV3RGlkQ2hhbmdlKGV2ZW50KQorICAgIF91cGRhdGVSZWNvcmRlclN0YXRlcygpCiAgICAgewot
ICAgICAgICB0aGlzLl9jbGVhclRhYkFjdGl2aXR5VGltZW91dCgpOwotICAgICAgICB0aGlzLl9z
aG91bGRMb2dUYWJDb250ZW50QWN0aXZpdHkgPSB0cnVlOworICAgICAgICBsZXQgaXNBY3RpdmUg
PSB0aGlzLl9kaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZSAmJiBXSS5zZXR0aW5ncy5kZWJ1Z0Vu
YWJsZURpYWdub3N0aWNMb2dnaW5nLnZhbHVlOworICAgICAgICBmb3IgKGxldCByZWNvcmRlciBv
ZiB0aGlzLl9yZWNvcmRlcnMpCisgICAgICAgICAgICByZWNvcmRlci5hY3RpdmUgPSBpc0FjdGl2
ZTsKICAgICB9CiB9OwotCi1XSS5EaWFnbm9zdGljQ29udHJvbGxlci5FdmVudE5hbWUgPSB7Ci0g
ICAgVGFiQWN0aXZpdHk6ICJUYWJBY3Rpdml0eSIsCi19OwotCi1XSS5EaWFnbm9zdGljQ29udHJv
bGxlci5BY3Rpdml0eVRpbWluZ1Jlc29sdXRpb24gPSA2MCAqIDEwMDA7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9EaWFnbm9zdGlj
RXZlbnRSZWNvcmRlci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Nv
bnRyb2xsZXJzL0RpYWdub3N0aWNFdmVudFJlY29yZGVyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ0NzgzOTg3
ZWQ0MDAwZGNlYTkzMTUyNWEzMjE0NjFhNTNkMDA1NTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9EaWFnbm9zdGljRXZl
bnRSZWNvcmRlci5qcwpAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworV0kuRGlhZ25vc3Rp
Y0V2ZW50UmVjb3JkZXIgPSBjbGFzcyBEaWFnbm9zdGljRXZlbnRSZWNvcmRlcgoreworICAgIGNv
bnN0cnVjdG9yKG5hbWUsIGNvbnRyb2xsZXIpCisgICAgeworICAgICAgICBjb25zb2xlLmFzc2Vy
dChjb250cm9sbGVyIGluc3RhbmNlb2YgV0kuRGlhZ25vc3RpY0NvbnRyb2xsZXIsIGNvbnRyb2xs
ZXIpOworCisgICAgICAgIHRoaXMuX25hbWUgPSBuYW1lOworICAgICAgICB0aGlzLl9hY3RpdmUg
PSBmYWxzZTsKKyAgICAgICAgdGhpcy5fY29udHJvbGxlciA9IGNvbnRyb2xsZXI7CisgICAgfQor
CisgICAgLy8gUHVibGljCisKKyAgICBnZXQgbmFtZSgpIHsgcmV0dXJuIHRoaXMuX25hbWU7IH0K
KyAgICBnZXQgYWN0aXZlKCkgeyByZXR1cm4gdGhpcy5fYWN0aXZlOyB9CisKKyAgICBzZXQgYWN0
aXZlKHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZSA9PSB2YWx1ZSkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICB0aGlzLl9hY3RpdmUgPSB2YWx1ZTsKKworICAg
ICAgICBpZiAodGhpcy5fYWN0aXZlKQorICAgICAgICAgICAgdGhpcy5zZXR1cCgpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICB0aGlzLnRlYXJkb3duKCk7CisgICAgfQorCisgICAgLy8gUHJv
dGVjdGVkCisKKyAgICBsb2dEaWFnbm9zdGljRXZlbnQoZXZlbnROYW1lLCBwYXlsb2FkKQorICAg
IHsKKyAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZSkKKyAgICAgICAgICAgIHRoaXMuX2NvbnRyb2xs
ZXIubG9nRGlhZ25vc3RpY0V2ZW50KGV2ZW50TmFtZSwgcGF5bG9hZCk7CisgICAgfQorCisgICAg
c2V0dXAoKQorICAgIHsKKyAgICAgICAgdGhyb3cgV0kuTm90SW1wbGVtZW50ZWRFcnJvci5zdWJj
bGFzc011c3RPdmVycmlkZSgpOworICAgIH0KKworICAgIHRlYXJkb3duKCkKKyAgICB7CisgICAg
ICAgIHRocm93IFdJLk5vdEltcGxlbWVudGVkRXJyb3Iuc3ViY2xhc3NNdXN0T3ZlcnJpZGUoKTsK
KyAgICB9Cit9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvQ29udHJvbGxlcnMvVGFiQWN0aXZpdHlEaWFnbm9zdGljRXZlbnRSZWNvcmRlci5qcyBiL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1RhYkFjdGl2aXR5
RGlhZ25vc3RpY0V2ZW50UmVjb3JkZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjg1Y2QyMDMyMDFmNzMwNjkz
YTM1ZDA4ZjYwN2U0ZWIyZTM1YTQxZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL1RhYkFjdGl2aXR5RGlhZ25vc3RpY0V2
ZW50UmVjb3JkZXIuanMKQEAgLTAsMCArMSwxNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitXSS5UYWJBY3Rp
dml0eURpYWdub3N0aWNFdmVudFJlY29yZGVyID0gY2xhc3MgVGFiQWN0aXZpdHlEaWFnbm9zdGlj
RXZlbnRSZWNvcmRlciBleHRlbmRzIFdJLkRpYWdub3N0aWNFdmVudFJlY29yZGVyCit7CisgICAg
Y29uc3RydWN0b3IoY29udHJvbGxlcikKKyAgICB7CisgICAgICAgIHN1cGVyKCJUYWJBY3Rpdml0
eSIsIGNvbnRyb2xsZXIpOworCisgICAgICAgIHRoaXMuX3Nob3VsZExvZ1RhYkNvbnRlbnRBY3Rp
dml0eSA9IGZhbHNlOworICAgICAgICB0aGlzLl90YWJBY3Rpdml0eVRpbWVvdXRJZGVudGlmaWVy
ID0gMDsKKyAgICB9CisKKyAgICAvLyBXSS5EaWFnbm9zdGljRXZlbnRSZWNvcmRlcgorCisgICAg
c2V0dXAoKQorICAgIHsKKyAgICAgICAgV0kuVGFiQnJvd3Nlci5hZGRFdmVudExpc3RlbmVyKFdJ
LlRhYkJyb3dzZXIuRXZlbnQuU2VsZWN0ZWRUYWJDb250ZW50Vmlld0RpZENoYW5nZSwgdGhpcy5f
aGFuZGxlVGFiQnJvd3NlclNlbGVjdGVkVGFiQ29udGVudFZpZXdEaWRDaGFuZ2UsIHRoaXMpOwor
CisgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7CisgICAgICAgICAgICBjYXB0dXJlOiB0cnVlLAor
ICAgICAgICB9OworICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCB0aGlz
LCBvcHRpb25zKTsKKyAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCB0aGlz
LCBvcHRpb25zKTsKKyAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCB0
aGlzLCBvcHRpb25zKTsKKyAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93
biIsIHRoaXMsIG9wdGlvbnMpOworCisgICAgICAgIHRoaXMuX3Nob3VsZExvZ1RhYkNvbnRlbnRB
Y3Rpdml0eSA9IHRydWU7CisgICAgfQorCisgICAgdGVhcmRvd24oKQorICAgIHsKKyAgICAgICAg
V0kuVGFiQnJvd3Nlci5yZW1vdmVFdmVudExpc3RlbmVyKFdJLlRhYkJyb3dzZXIuRXZlbnQuU2Vs
ZWN0ZWRUYWJDb250ZW50Vmlld0RpZENoYW5nZSwgdGhpcy5faGFuZGxlVGFiQnJvd3NlclNlbGVj
dGVkVGFiQ29udGVudFZpZXdEaWRDaGFuZ2UsIHRoaXMpOworCisgICAgICAgIGNvbnN0IG9wdGlv
bnMgPSB7CisgICAgICAgICAgICBjYXB0dXJlOiB0cnVlLAorICAgICAgICB9OworICAgICAgICB3
aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCB0aGlzLCBvcHRpb25zKTsKKyAgICAg
ICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLCB0aGlzLCBvcHRpb25zKTsKKyAg
ICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLCB0aGlzLCBvcHRpb25z
KTsKKyAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIHRoaXMs
IG9wdGlvbnMpOworCisgICAgICAgIHRoaXMuX3N0b3BUcmFja2luZ1RhYkFjdGl2aXR5KCk7Cisg
ICAgfQorCisgICAgLy8gUHJvdGVjdGVkCisKKyAgICBoYW5kbGVFdmVudChldmVudCkKKyAgICB7
CisgICAgICAgIHN3aXRjaCAoZXZlbnQudHlwZSkgeworICAgICAgICBjYXNlICJmb2N1cyI6Cisg
ICAgICAgICAgICB0aGlzLl9oYW5kbGVXaW5kb3dGb2N1cyhldmVudCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSAiYmx1ciI6CisgICAgICAgICAgICB0aGlzLl9oYW5kbGVXaW5k
b3dCbHVyKGV2ZW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJrZXlkb3du
IjoKKyAgICAgICAgICAgIHRoaXMuX2hhbmRsZVdpbmRvd0tleURvd24oZXZlbnQpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgIm1vdXNlZG93biI6CisgICAgICAgICAgICB0aGlz
Ll9oYW5kbGVXaW5kb3dNb3VzZURvd24oZXZlbnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICAvLyBQcml2YXRlCisKKyAgICBfZGlkSW50ZXJhY3RXaXRoVGFi
Q29udGVudCgpCisgICAgeworICAgICAgICBpZiAoIXRoaXMuX3Nob3VsZExvZ1RhYkNvbnRlbnRB
Y3Rpdml0eSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBsZXQgc2VsZWN0ZWRUYWJD
b250ZW50VmlldyA9IFdJLnRhYkJyb3dzZXIuc2VsZWN0ZWRUYWJDb250ZW50VmlldzsKKyAgICAg
ICAgY29uc29sZS5hc3NlcnQoc2VsZWN0ZWRUYWJDb250ZW50Vmlldyk7CisgICAgICAgIGlmICgh
c2VsZWN0ZWRUYWJDb250ZW50VmlldykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBs
ZXQgdGFiVHlwZSA9IHNlbGVjdGVkVGFiQ29udGVudFZpZXcudHlwZTsKKyAgICAgICAgbGV0IGlu
dGVydmFsID0gVGFiQWN0aXZpdHlEaWFnbm9zdGljRXZlbnRSZWNvcmRlci5BY3Rpdml0eVRpbWlu
Z1Jlc29sdXRpb247CisgICAgICAgIHRoaXMubG9nRGlhZ25vc3RpY0V2ZW50KHRoaXMubmFtZSwg
e3RhYlR5cGUsIGludGVydmFsfSk7CisKKyAgICAgICAgdGhpcy5fYmVnaW5UYWJBY3Rpdml0eVRp
bWVvdXQoKTsKKyAgICB9CisKKyAgICBfY2xlYXJUYWJBY3Rpdml0eVRpbWVvdXQoKQorICAgIHsK
KyAgICAgICAgaWYgKHRoaXMuX3RhYkFjdGl2aXR5VGltZW91dElkZW50aWZpZXIpIHsKKyAgICAg
ICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90YWJBY3Rpdml0eVRpbWVvdXRJZGVudGlmaWVyKTsK
KyAgICAgICAgICAgIHRoaXMuX3RhYkFjdGl2aXR5VGltZW91dElkZW50aWZpZXIgPSAwOworICAg
ICAgICB9CisgICAgfQorCisgICAgX2JlZ2luVGFiQWN0aXZpdHlUaW1lb3V0KCkKKyAgICB7Cisg
ICAgICAgIHRoaXMuX3N0b3BUcmFja2luZ1RhYkFjdGl2aXR5KCk7CisKKyAgICAgICAgdGhpcy5f
dGFiQWN0aXZpdHlUaW1lb3V0SWRlbnRpZmllciA9IHNldFRpbWVvdXQoKCkgPT4geworICAgICAg
ICAgICAgdGhpcy5fc2hvdWxkTG9nVGFiQ29udGVudEFjdGl2aXR5ID0gdHJ1ZTsKKyAgICAgICAg
ICAgIHRoaXMuX3RhYkFjdGl2aXR5VGltZW91dElkZW50aWZpZXIgPSAwOworICAgICAgICB9LCBU
YWJBY3Rpdml0eURpYWdub3N0aWNFdmVudFJlY29yZGVyLkFjdGl2aXR5VGltaW5nUmVzb2x1dGlv
bik7CisgICAgfQorCisgICAgX3N0b3BUcmFja2luZ1RhYkFjdGl2aXR5KCkKKyAgICB7CisgICAg
ICAgIHRoaXMuX2NsZWFyVGFiQWN0aXZpdHlUaW1lb3V0KCk7CisgICAgICAgIHRoaXMuX3Nob3Vs
ZExvZ1RhYkNvbnRlbnRBY3Rpdml0eSA9IGZhbHNlOworICAgIH0KKworICAgIF9oYW5kbGVXaW5k
b3dGb2N1cyhldmVudCkKKyAgICB7CisgICAgICAgIGlmIChldmVudC50YXJnZXQgIT09IHdpbmRv
dykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB0aGlzLl9zaG91bGRMb2dUYWJDb250
ZW50QWN0aXZpdHkgPSB0cnVlOworICAgIH0KKworICAgIF9oYW5kbGVXaW5kb3dCbHVyKGV2ZW50
KQorICAgIHsKKyAgICAgICAgaWYgKGV2ZW50LnRhcmdldCAhPT0gd2luZG93KQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIHRoaXMuX3N0b3BUcmFja2luZ1RhYkFjdGl2aXR5KCk7Cisg
ICAgfQorCisgICAgX2hhbmRsZVdpbmRvd0tleURvd24oZXZlbnQpCisgICAgeworICAgICAgICB0
aGlzLl9kaWRJbnRlcmFjdFdpdGhUYWJDb250ZW50KCk7CisgICAgfQorCisgICAgX2hhbmRsZVdp
bmRvd01vdXNlRG93bihldmVudCkKKyAgICB7CisgICAgICAgIHRoaXMuX2RpZEludGVyYWN0V2l0
aFRhYkNvbnRlbnQoKTsKKyAgICB9CisKKyAgICBfaGFuZGxlVGFiQnJvd3NlclNlbGVjdGVkVGFi
Q29udGVudFZpZXdEaWRDaGFuZ2UoZXZlbnQpCisgICAgeworICAgICAgICB0aGlzLl9jbGVhclRh
YkFjdGl2aXR5VGltZW91dCgpOworICAgICAgICB0aGlzLl9zaG91bGRMb2dUYWJDb250ZW50QWN0
aXZpdHkgPSB0cnVlOworICAgIH0KK307CisKK1dJLlRhYkFjdGl2aXR5RGlhZ25vc3RpY0V2ZW50
UmVjb3JkZXIuQWN0aXZpdHlUaW1pbmdSZXNvbHV0aW9uID0gNjAgKiAxMDAwOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5odG1sIGIvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5odG1sCmluZGV4IGQ5ODU3ODVjODYy
MTg5NmUyNjU2ZmZiZTQ3ZGEyNjE0OGFhMWExNmYuLjYwMDQ0MDM1ZWI1N2FlMjczMmRmODAxN2Mz
MjZmNDI3MDhhNGM2MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL01haW4uaHRtbAorKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9NYWluLmh0bWwKQEAgLTg5OCw2ICs4OTgsOCBAQAogICAgIDxzY3JpcHQgc3JjPSJXb3JrZXJz
L0Zvcm1hdHRlci9Gb3JtYXR0ZXJDb250ZW50QnVpbGRlci5qcyI+PC9zY3JpcHQ+CiAKICAgICA8
c2NyaXB0IHNyYz0iQ29udHJvbGxlcnMvRGlhZ25vc3RpY0NvbnRyb2xsZXIuanMiPjwvc2NyaXB0
PgorICAgIDxzY3JpcHQgc3JjPSJDb250cm9sbGVycy9EaWFnbm9zdGljRXZlbnRSZWNvcmRlci5q
cyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xsZXJzL1RhYkFjdGl2aXR5RGlh
Z25vc3RpY0V2ZW50UmVjb3JkZXIuanMiPjwvc2NyaXB0PgogCiAgICAgPHNjcmlwdCBzcmM9IkJh
c2UvTWFpbi5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IkNvbnRyb2xsZXJzL0FwcENv
bnRyb2xsZXJCYXNlLmpzIj48L3NjcmlwdD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL1Byb3RvY29sL0luc3BlY3RvckZyb250ZW5kQVBJLmpzIGIvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvUHJvdG9jb2wvSW5zcGVjdG9yRnJvbnRl
bmRBUEkuanMKaW5kZXggNTBjYTljYjYyY2E1NGViN2I2MjlkZDEyZTViMTk3ZmFhMGVmOGMxNi4u
YzMxZDc2MmYxMmYyOGJmYTkyNDYyZjcxNTJkZjFiZjA2MzI5YTUwNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvUHJvdG9jb2wvSW5zcGVjdG9yRnJvbnRl
bmRBUEkuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvUHJvdG9j
b2wvSW5zcGVjdG9yRnJvbnRlbmRBUEkuanMKQEAgLTc3LDcgKzc3LDggQEAgSW5zcGVjdG9yRnJv
bnRlbmRBUEkgPSB7CiAKICAgICBzZXREaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZTogZnVuY3Rp
b24oYXZhaWxhYmxlKQogICAgIHsKLSAgICAgICAgLy8gRklYTUU6IHVwZGF0ZSBkaWFnbm9zdGlj
IGF2YWlsYWJpbGl0eSBhbmQgc3RhcnQvc3RvcCBkaWFnbm9zdGljIHJlY29yZGVycy4KKyAgICAg
ICAgaWYgKFdJLmRpYWdub3N0aWNDb250cm9sbGVyKQorICAgICAgICAgICAgV0kuZGlhZ25vc3Rp
Y0NvbnRyb2xsZXIuZGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUgPSBhdmFpbGFibGU7CiAgICAg
fSwKIAogICAgIHNob3dDb25zb2xlOiBmdW5jdGlvbigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9UZXN0Lmh0bWwgYi9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9UZXN0Lmh0bWwKaW5kZXggMjM2ODIyMTRhMmZhOWExN2IzMWYxNWM4
ZmY5NzVmMTcwNDI1Zjc0OC4uMWQ0NDVhMDRjZGViZWVjZmE3YjBjYjA4ZWQ2ZmJiZDRiZjQ2MWU4
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVGVzdC5o
dG1sCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Rlc3QuaHRtbApA
QCAtMjY4LDYgKzI2OCw5IEBACiAgICAgPHNjcmlwdCBzcmM9IlZpZXdzL0VkaXRpbmdTdXBwb3J0
LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iVmlld3MvVmlldy5qcyI+PC9zY3JpcHQ+
CiAKKyAgICA8c2NyaXB0IHNyYz0iQ29udHJvbGxlcnMvRGlhZ25vc3RpY0NvbnRyb2xsZXIuanMi
Pjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJDb250cm9sbGVycy9EaWFnbm9zdGljRXZlbnRS
ZWNvcmRlci5qcyI+PC9zY3JpcHQ+CisKICAgICA8c2NyaXB0IHNyYz0iVmlld3MvUmVzaXplci5q
cyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IlZpZXdzL1RhYmxlLmpzIj48L3NjcmlwdD4K
ICAgICA8c2NyaXB0IHNyYz0iVmlld3MvVGFibGVDb2x1bW4uanMiPjwvc2NyaXB0PgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU2V0dGluZ3NU
YWJDb250ZW50Vmlldy5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Zp
ZXdzL1NldHRpbmdzVGFiQ29udGVudFZpZXcuanMKaW5kZXggOWYwMGQwZDZlNmNmMWYxMjg4ZTE2
NTBiY2Q2YmI3NmIxMDY2OTgxNi4uNDAyM2ZmNWI2NGM5NWNkYTE2ZjkwZTU3MzA4NmJmMzFmZDlk
YTYwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmll
d3MvU2V0dGluZ3NUYWJDb250ZW50Vmlldy5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9WaWV3cy9TZXR0aW5nc1RhYkNvbnRlbnRWaWV3LmpzCkBAIC00NDMsOCAr
NDQzLDEwIEBAIFdJLlNldHRpbmdzVGFiQ29udGVudFZpZXcgPSBjbGFzcyBTZXR0aW5nc1RhYkNv
bnRlbnRWaWV3IGV4dGVuZHMgV0kuVGFiQ29udGVudFZpCiAKICAgICAgICAgdGhpcy5fZGVidWdT
ZXR0aW5nc1ZpZXcuYWRkU2VwYXJhdG9yKCk7CiAKLQotICAgICAgICB0aGlzLl9kZWJ1Z1NldHRp
bmdzVmlldy5hZGRTZXR0aW5nKFdJLnVubG9jYWxpemVkU3RyaW5nKCJVbmNhdWdodCBFeGNlcHRp
b24gUmVwb3J0ZXI6IiksIFdJLnNldHRpbmdzLmRlYnVnRW5hYmxlVW5jYXVnaHRFeGNlcHRpb25S
ZXBvcnRlciwgV0kudW5sb2NhbGl6ZWRTdHJpbmcoIkVuYWJsZWQiKSk7CisgICAgICAgIGxldCBk
aWFnbm9zdGljc0dyb3VwID0gdGhpcy5fZGVidWdTZXR0aW5nc1ZpZXcuYWRkR3JvdXAoV0kudW5s
b2NhbGl6ZWRTdHJpbmcoIkRpYWdub3N0aWNzOiIpKTsKKyAgICAgICAgZGlhZ25vc3RpY3NHcm91
cC5hZGRTZXR0aW5nKFdJLnNldHRpbmdzLmRlYnVnRW5hYmxlVW5jYXVnaHRFeGNlcHRpb25SZXBv
cnRlciwgV0kudW5sb2NhbGl6ZWRTdHJpbmcoIlJlcG9ydCBVbmNhdWdodCBFeGNlcHRpb25zIikp
OworICAgICAgICBkaWFnbm9zdGljc0dyb3VwLmFkZFNldHRpbmcoV0kuc2V0dGluZ3MuZGVidWdF
bmFibGVEaWFnbm9zdGljTG9nZ2luZywgV0kudW5sb2NhbGl6ZWRTdHJpbmcoIkVuYWJsZSBEaWFn
bm9zdGljIExvZ2dpbmciKSk7CisgICAgICAgIGRpYWdub3N0aWNzR3JvdXAuYWRkU2V0dGluZyhX
SS5zZXR0aW5ncy5kZWJ1Z0F1dG9Mb2dEaWFnbm9zdGljRXZlbnRzLCBXSS51bmxvY2FsaXplZFN0
cmluZygiU2hvdyBEaWFnbm9zdGljIEV2ZW50cyBpbiBDb25zb2xlIikpOwogCiAgICAgICAgIHRo
aXMuX2RlYnVnU2V0dGluZ3NWaWV3LmFkZFNlcGFyYXRvcigpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktp
dC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBkN2MyNTQ2OThkMmEyZmM4
MDY4ZTMwZmU4NTNlMjg2Yzc1MWIwYTk1Li41Y2I4MWNjYzIwMmNlNjIxYjNhZDg1MWY1YWJhOWU1
ZTQ3YmIyZmNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKQEAgLTkzMDksNyArOTMwOSw2IEBACiAJCQkJNUM0NjA5RTcyMjQzMTdCNDAwOTk0
M0MyIC8qIF9XS0NvbnRlbnRSdWxlTGlzdEFjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUM0
NjA5RTgyMjQzMTdCQjAwOTk0M0MyIC8qIF9XS0NvbnRlbnRSdWxlTGlzdEFjdGlvbkludGVybmFs
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTU3MDRGODFCRTAxRkY0MDA4NzRBRjEgLyogX1dLQ29u
dGV4dE1lbnVFbGVtZW50SW5mby5oIGluIEhlYWRlcnMgKi8sCi0JCQkJOTk3OUNBNTgyMzdGNDlG
MTAwMzlFQzA1IC8qIF9XS0luc3BlY3RvclByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTVD
NUQyMzhDMjI3QTJDREEwMDBCOUJEQSAvKiBfV0tDdXN0b21IZWFkZXJGaWVsZHMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTgzODkxQjY5MUE2OEJFQkMwMDMwRjM4NiAvKiBfV0tEaWFnbm9zdGljTG9n
Z2luZ0RlbGVnYXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMUE0RkU1QTE4RENFOUZBMDBCNUVB
OEEgLyogX1dLRG93bmxvYWQuaCBpbiBIZWFkZXJzICovLApAQCAtOTMzNiw2ICs5MzM1LDcgQEAK
IAkJCQkzN0E2NEU1NTE4RjM4RTNDMDBFQjMwRjEgLyogX1dLSW5wdXREZWxlZ2F0ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNUNBRkRFNDUyMTMwODQ2MzAwQjFGN0UxIC8qIF9XS0luc3BlY3Rvci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNUNBRkRFNDcyMTMwODQ2QTAwQjFGN0UxIC8qIF9XS0luc3Bl
Y3RvckludGVybmFsLmggaW4gSGVhZGVycyAqLywKKwkJCQk5OTc5Q0E1ODIzN0Y0OUYxMDAzOUVD
MDUgLyogX1dLSW5zcGVjdG9yUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVDMEYwQUIy
MDAwNjU4MjAwNTM2NTM2IC8qIF9XS0luc3BlY3RvcldpbmRvdy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMzFCMzYyOTUyMTQxRUJDRDAwN0JGQTUzIC8qIF9XS0ludGVybmFsRGVidWdGZWF0dXJlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkzMUIzNjI5NzIxNDFFQkQ5MDA3QkZBNTMgLyogX1dLSW50ZXJu
YWxEZWJ1Z0ZlYXR1cmVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCkBAIC05MzUxLDYgKzkzNTEs
NyBAQAogCQkJCTFBOUUzMjg5MTgyMTYzNjkwMEY1RDA0QyAvKiBfV0tSZW1vdGVPYmplY3RSZWdp
c3RyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE5RTMyQTExODIzMDE4OTAwRjVEMDRDIC8qIF9X
S1JlbW90ZU9iamVjdFJlZ2lzdHJ5SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1NUJB
ODEwMUJBMTMxN0UwMDdDRDMzRCAvKiBfV0tSZW1vdGVXZWJJbnNwZWN0b3JWaWV3Q29udHJvbGxl
ci5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTkwRTFFMDkyMzg0QUE1NzAwNDYwMkRGIC8qIF9XS1Jl
bW90ZVdlYkluc3BlY3RvclZpZXdDb250cm9sbGVyUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMzc3MjE2QjgxQTRFNkJFMDAwRENBNzE4IC8qIF9XS1JlbmRlcmluZ1Byb2dyZXNzRXZlbnRz
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxRjYwNEJBQTE4ODlGQkI4MDBFRTAzOTUgLyogX1dLUmVu
ZGVyaW5nUHJvZ3Jlc3NFdmVudHNJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzc2MzEx
RkQxQTNGQjVGNzAwNUEyRTUxIC8qIF9XS1NhbWVEb2N1bWVudE5hdmlnYXRpb25UeXBlLmggaW4g
SGVhZGVycyAqLywKQEAgLTk3NDIsNyArOTc0Myw2IEBACiAJCQkJMUFBNTZGMjkxMUU5MkJDODAw
NjFCODgyIC8qIFBsdWdpbkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBOEVGNENC
MTI1MjQwMzcwMEY3MDY3RiAvKiBQbHVnaW5Db250cm9sbGVyUHJveHkuaCBpbiBIZWFkZXJzICov
LAogCQkJCTFBOEVGOTZGMTI1MkFGNkIwMEY3MDY3RiAvKiBQbHVnaW5Db250cm9sbGVyUHJveHlN
ZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJOTkwRTFFMDkyMzg0QUE1NzAwNDYwMkRGIC8q
IF9XS1JlbW90ZVdlYkluc3BlY3RvclZpZXdDb250cm9sbGVyUHJpdmF0ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMUExNzk3ODAxMzdFRTgyQzAwRjk3RDQ1IC8qIFBsdWdpbkNyZWF0aW9uUGFyYW1l
dGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0MzRjhDOTExNzNBRjUyRDAwN0I3RjM5IC8qIFBs
dWdpbkluZm9ybWF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUVGQ0MxMjExRDAxRjk2MDA4
MjE5RDMgLyogUGx1Z2luSW5mb1N0b3JlLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA1OTcwOGUx
ODk0ZWQzOTMxNGFmOGExNjcyNmRjNGM1MmY2OGI0MDE1Li5hYzgwMTUzM2RiMjg1ZWMxODA2MzY5
ZmVkNThjMzJmNWQ5NDliNzllIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysr
IGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTktMTEtMjEgIEJy
aWFuIEJ1cmcgIDxiYnVyZ0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogYWRk
IHN1cHBvcnQgZm9yIG5ldyBraW5kcyBvZiBkaWFnbm9zdGljIGV2ZW50cworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0NDMwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIG5ldyB0ZXN0IGNhc2VzIGZv
ciBXSS5EaWFnbm9zdGljQ29udHJvbGxlci4KKworICAgICAgICAqIGluc3BlY3Rvci91bml0LXRl
c3RzL2RpYWdub3N0aWMtY29udHJvbGxlci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IGluc3BlY3Rvci91bml0LXRlc3RzL2RpYWdub3N0aWMtY29udHJvbGxlci5odG1sOiBBZGRlZC4K
KwogMjAxOS0xMS0yMSAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmVncmVzc2lvbiAocjI1MjY2MCk6IExheW91dCBUZXN0IHBsYXRmb3JtL2lvcy9tZWRpYXN0
cmVhbS9hdWRpby1tdXRlZC1pbi1iYWNrZ3JvdW5kLXRhYi5odG1sIGlzIGZhaWxpbmcKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci91bml0LXRlc3RzL2RpYWdub3N0aWMtY29udHJv
bGxlci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvdW5pdC10ZXN0cy9kaWFn
bm9zdGljLWNvbnRyb2xsZXItZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ5N2UyMzk5OWVlNzY0
ODc5OTFiNmI0MTZlY2ZkMjkwMzU1MDI4MDUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9pbnNwZWN0b3IvdW5pdC10ZXN0cy9kaWFnbm9zdGljLWNvbnRyb2xsZXItZXhwZWN0ZWQudHh0
CkBAIC0wLDAgKzEsMzcgQEAKKworPT0gUnVubmluZyB0ZXN0IHN1aXRlOiBEaWFnbm9zdGljQ29u
dHJvbGxlcgorLS0gUnVubmluZyB0ZXN0IGNhc2U6IERpYWdub3N0aWNDb250cm9sbGVyLlNldHVw
QW5kVGVhcmRvd24KK1BBU1M6IERpYWdub3N0aWNzIHNob3VsZCBub3QgYmUgYXZhaWxhYmxlIGlu
aXRpYWxseS4KK0FkZGluZyByZWNvcmRlci4uLgorUEFTUzogUmVjb3JkZXIgc2hvdWxkIGJlIGlu
YWN0aXZlIHByaW9yIHRvIGRpYWdub3N0aWNzIGJlY29taW5nIGF2YWlsYWJsZS4KK01ha2luZyBk
aWFnbm9zdGljcyBhdmFpbGFibGUuLi4KK0luIHNldHVwKCkgZm9yIHJlY29yZGVyOiBUZXN0LjEK
K1BBU1M6IFJlY29yZGVyIHNob3VsZCBiZSBhY3RpdmUgYWZ0ZXIgZGlhZ25vc3RpY3MgYXJlIGF2
YWlsYWJsZS4KK1RyaWdnZXJpbmcgYSBkaWFnbm9zdGljIGV2ZW50Li4uCitSZWNlaXZlZCBkaWFn
bm9zdGljIGV2ZW50OiBUZXN0RXZlbnQuMSA9PiB7ImFuc3dlciI6NDJ9CitNYWtpbmcgZGlhZ25v
c3RpY3Mgbm90IGF2YWlsYWJsZS4uLgorSW4gdGVhcmRvd24oKSBmb3IgcmVjb3JkZXI6IFRlc3Qu
MQorUEFTUzogUmVjb3JkZXIgc2hvdWxkIGJlIGluYWN0aXZlIGFmdGVyIGRpYWdub3N0aWNzIGFy
ZSBub3QgbG9uZ2VyIGF2YWlsYWJsZS4KKworLS0gUnVubmluZyB0ZXN0IGNhc2U6IERpYWdub3N0
aWNDb250cm9sbGVyLkFkZFJlY29yZGVyV2hpbGVBY3RpdmUKK01ha2luZyBkaWFnbm9zdGljcyBh
dmFpbGFibGUuLi4KK0FkZGluZyByZWNvcmRlci4uLgorSW4gc2V0dXAoKSBmb3IgcmVjb3JkZXI6
IFRlc3QuMgorVHJpZ2dlcmluZyBhIGRpYWdub3N0aWMgZXZlbnQuLi4KK1JlY2VpdmVkIGRpYWdu
b3N0aWMgZXZlbnQ6IFRlc3RFdmVudC4yID0+IHsiYW5zd2VyIjo0Mn0KK01ha2luZyBkaWFnbm9z
dGljcyBub3QgYXZhaWxhYmxlLi4uCitJbiB0ZWFyZG93bigpIGZvciByZWNvcmRlcjogVGVzdC4y
CitUcmlnZ2VyaW5nIGEgZGlhZ25vc3RpYyBldmVudC4uLgorCistLSBSdW5uaW5nIHRlc3QgY2Fz
ZTogRGlhZ25vc3RpY0NvbnRyb2xsZXIuQWRkUmVjb3JkZXJXaGlsZUluYWN0aXZlCitNYWtpbmcg
ZGlhZ25vc3RpY3Mgbm90IGF2YWlsYWJsZS4uLgorQWRkaW5nIHJlY29yZGVyLi4uCitUcmlnZ2Vy
aW5nIGEgZGlhZ25vc3RpYyBldmVudC4uLgorTWFraW5nIGRpYWdub3N0aWNzIGF2YWlsYWJsZS4u
LgorSW4gc2V0dXAoKSBmb3IgcmVjb3JkZXI6IFRlc3QuMworVHJpZ2dlcmluZyBhIGRpYWdub3N0
aWMgZXZlbnQuLi4KK1JlY2VpdmVkIGRpYWdub3N0aWMgZXZlbnQ6IFRlc3RFdmVudC41ID0+IHsi
YW5zd2VyIjo0Mn0KK01ha2luZyBkaWFnbm9zdGljcyBub3QgYXZhaWxhYmxlLi4uCitJbiB0ZWFy
ZG93bigpIGZvciByZWNvcmRlcjogVGVzdC4zCitUcmlnZ2VyaW5nIGEgZGlhZ25vc3RpYyBldmVu
dC4uLgorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvdW5pdC10ZXN0cy9kaWFn
bm9zdGljLWNvbnRyb2xsZXIuaHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci91bml0LXRlc3Rz
L2RpYWdub3N0aWMtY29udHJvbGxlci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE4MjQ3NzBkNzFiN2NiOGIx
MzNhNzc2YWYzYjllOTU0OGU5YmFiYTcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9p
bnNwZWN0b3IvdW5pdC10ZXN0cy9kaWFnbm9zdGljLWNvbnRyb2xsZXIuaHRtbApAQCAtMCwwICsx
LDEzMiBAQAorPCFkb2N0eXBlIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL2h0dHAvdGVzdHMvaW5zcGVjdG9yL3Jlc291cmNlcy9pbnNwZWN0b3ItdGVzdC5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0PgorZnVuY3Rpb24gdGVzdCgpCit7CisgICAgY2xhc3MgVGVzdFJlY29y
ZGVyIGV4dGVuZHMgV0kuRGlhZ25vc3RpY0V2ZW50UmVjb3JkZXIgeworICAgICAgICBjb25zdHJ1
Y3RvcihuYW1lLCBjb250cm9sbGVyLCB7c2V0dXAsIHRlYXJkb3dufSA9IHt9KSB7CisgICAgICAg
ICAgICBzdXBlcihuYW1lLCBjb250cm9sbGVyKTsKKworICAgICAgICAgICAgdGhpcy5fc2V0dXBD
YWxsYmFjayA9IHNldHVwOworICAgICAgICAgICAgdGhpcy5fdGVhcmRvd25DYWxsYmFjayA9IHRl
YXJkb3duOworICAgICAgICB9CisKKyAgICAgICAgc2V0dXAoKQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAodHlwZW9mIHRoaXMuX3NldHVwQ2FsbGJhY2sgPT09ICJmdW5jdGlvbiIpCisgICAg
ICAgICAgICAgICAgdGhpcy5fc2V0dXBDYWxsYmFjayh0aGlzKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHRlYXJkb3duKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl90
ZWFyZG93bkNhbGxiYWNrID09PSAiZnVuY3Rpb24iKQorICAgICAgICAgICAgICAgIHRoaXMuX3Rl
YXJkb3duQ2FsbGJhY2sodGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBzZW5kRXZlbnQobmFt
ZSwgcGF5bG9hZCkKKyAgICAgICAgeworICAgICAgICAgICAgdGhpcy5sb2dEaWFnbm9zdGljRXZl
bnQobmFtZSwgcGF5bG9hZCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgbGV0IHN1aXRlID0g
SW5zcGVjdG9yVGVzdC5jcmVhdGVTeW5jU3VpdGUoIkRpYWdub3N0aWNDb250cm9sbGVyIik7CisK
KyAgICBzdWl0ZS5hZGRUZXN0Q2FzZSh7CisgICAgICAgIG5hbWU6ICJEaWFnbm9zdGljQ29udHJv
bGxlci5TZXR1cEFuZFRlYXJkb3duIiwKKyAgICAgICAgdGVzdCgpIHsKKyAgICAgICAgICAgIGxl
dCBkaWFnbm9zdGljQ29udHJvbGxlciA9IG5ldyBXSS5EaWFnbm9zdGljQ29udHJvbGxlcjsKKyAg
ICAgICAgICAgIEluc3BlY3RvclRlc3QuZXhwZWN0VGhhdCghZGlhZ25vc3RpY0NvbnRyb2xsZXIu
ZGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUsICJEaWFnbm9zdGljcyBzaG91bGQgbm90IGJlIGF2
YWlsYWJsZSBpbml0aWFsbHkuIik7CisKKyAgICAgICAgICAgIGxldCByZWNvcmRlciA9IG5ldyBU
ZXN0UmVjb3JkZXIoIlRlc3QuMSIsIGRpYWdub3N0aWNDb250cm9sbGVyLCB7CisgICAgICAgICAg
ICAgICAgc2V0dXA6IChyZWNvcmRlcikgPT4gSW5zcGVjdG9yVGVzdC5sb2coIkluIHNldHVwKCkg
Zm9yIHJlY29yZGVyOiAiICsgcmVjb3JkZXIubmFtZSksCisgICAgICAgICAgICAgICAgdGVhcmRv
d246IChyZWNvcmRlcikgPT4gSW5zcGVjdG9yVGVzdC5sb2coIkluIHRlYXJkb3duKCkgZm9yIHJl
Y29yZGVyOiAiICsgcmVjb3JkZXIubmFtZSksCisgICAgICAgICAgICB9KTsKKworICAgICAgICAg
ICAgSW5zcGVjdG9yVGVzdC5sb2coIkFkZGluZyByZWNvcmRlci4uLiIpOworICAgICAgICAgICAg
ZGlhZ25vc3RpY0NvbnRyb2xsZXIuYWRkUmVjb3JkZXIocmVjb3JkZXIpOworICAgICAgICAgICAg
SW5zcGVjdG9yVGVzdC5leHBlY3RUaGF0KCFyZWNvcmRlci5hY3RpdmUsICJSZWNvcmRlciBzaG91
bGQgYmUgaW5hY3RpdmUgcHJpb3IgdG8gZGlhZ25vc3RpY3MgYmVjb21pbmcgYXZhaWxhYmxlLiIp
OworCisKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJNYWtpbmcgZGlhZ25vc3RpY3Mg
YXZhaWxhYmxlLi4uIik7CisgICAgICAgICAgICBkaWFnbm9zdGljQ29udHJvbGxlci5kaWFnbm9z
dGljTG9nZ2luZ0F2YWlsYWJsZSA9IHRydWU7CisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmV4
cGVjdFRoYXQocmVjb3JkZXIuYWN0aXZlLCAiUmVjb3JkZXIgc2hvdWxkIGJlIGFjdGl2ZSBhZnRl
ciBkaWFnbm9zdGljcyBhcmUgYXZhaWxhYmxlLiIpOworCisgICAgICAgICAgICBJbnNwZWN0b3JU
ZXN0LmxvZygiVHJpZ2dlcmluZyBhIGRpYWdub3N0aWMgZXZlbnQuLi4iKTsKKyAgICAgICAgICAg
IHJlY29yZGVyLnNlbmRFdmVudCgiVGVzdEV2ZW50LjEiLCB7ImFuc3dlciI6IDQyfSk7CisKKyAg
ICAgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJNYWtpbmcgZGlhZ25vc3RpY3Mgbm90IGF2YWls
YWJsZS4uLiIpOworICAgICAgICAgICAgZGlhZ25vc3RpY0NvbnRyb2xsZXIuZGlhZ25vc3RpY0xv
Z2dpbmdBdmFpbGFibGUgPSBmYWxzZTsKKworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5leHBl
Y3RUaGF0KCFyZWNvcmRlci5hY3RpdmUsICJSZWNvcmRlciBzaG91bGQgYmUgaW5hY3RpdmUgYWZ0
ZXIgZGlhZ25vc3RpY3MgYXJlIG5vdCBsb25nZXIgYXZhaWxhYmxlLiIpOworICAgICAgICB9Cisg
ICAgfSk7CisKKyAgICBzdWl0ZS5hZGRUZXN0Q2FzZSh7CisgICAgICAgIG5hbWU6ICJEaWFnbm9z
dGljQ29udHJvbGxlci5BZGRSZWNvcmRlcldoaWxlQWN0aXZlIiwKKyAgICAgICAgdGVzdCgpIHsK
KyAgICAgICAgICAgIGxldCBkaWFnbm9zdGljQ29udHJvbGxlciA9IG5ldyBXSS5EaWFnbm9zdGlj
Q29udHJvbGxlcjsKKworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIk1ha2luZyBkaWFn
bm9zdGljcyBhdmFpbGFibGUuLi4iKTsKKyAgICAgICAgICAgIGRpYWdub3N0aWNDb250cm9sbGVy
LmRpYWdub3N0aWNMb2dnaW5nQXZhaWxhYmxlID0gdHJ1ZTsKKworICAgICAgICAgICAgbGV0IHJl
Y29yZGVyID0gbmV3IFRlc3RSZWNvcmRlcigiVGVzdC4yIiwgZGlhZ25vc3RpY0NvbnRyb2xsZXIs
IHsKKyAgICAgICAgICAgICAgICBzZXR1cDogKHJlY29yZGVyKSA9PiBJbnNwZWN0b3JUZXN0Lmxv
ZygiSW4gc2V0dXAoKSBmb3IgcmVjb3JkZXI6ICIgKyByZWNvcmRlci5uYW1lKSwKKyAgICAgICAg
ICAgICAgICB0ZWFyZG93bjogKHJlY29yZGVyKSA9PiBJbnNwZWN0b3JUZXN0LmxvZygiSW4gdGVh
cmRvd24oKSBmb3IgcmVjb3JkZXI6ICIgKyByZWNvcmRlci5uYW1lKSwKKyAgICAgICAgICAgIH0p
OworCisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiQWRkaW5nIHJlY29yZGVyLi4uIik7
CisgICAgICAgICAgICBkaWFnbm9zdGljQ29udHJvbGxlci5hZGRSZWNvcmRlcihyZWNvcmRlcik7
CisKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJUcmlnZ2VyaW5nIGEgZGlhZ25vc3Rp
YyBldmVudC4uLiIpOworICAgICAgICAgICAgcmVjb3JkZXIuc2VuZEV2ZW50KCJUZXN0RXZlbnQu
MiIsIHsiYW5zd2VyIjogNDJ9KTsKKworICAgICAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIk1h
a2luZyBkaWFnbm9zdGljcyBub3QgYXZhaWxhYmxlLi4uIik7CisgICAgICAgICAgICBkaWFnbm9z
dGljQ29udHJvbGxlci5kaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZSA9IGZhbHNlOworCisgICAg
ICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiVHJpZ2dlcmluZyBhIGRpYWdub3N0aWMgZXZlbnQu
Li4iKTsKKyAgICAgICAgICAgIHJlY29yZGVyLnNlbmRFdmVudCgiVGVzdEV2ZW50LjMiLCB7ImFu
c3dlciI6IDQyfSk7CisgICAgICAgIH0KKyAgICB9KTsKKworICAgICAgICBzdWl0ZS5hZGRUZXN0
Q2FzZSh7CisgICAgICAgIG5hbWU6ICJEaWFnbm9zdGljQ29udHJvbGxlci5BZGRSZWNvcmRlcldo
aWxlSW5hY3RpdmUiLAorICAgICAgICB0ZXN0KCkgeworICAgICAgICAgICAgbGV0IGRpYWdub3N0
aWNDb250cm9sbGVyID0gbmV3IFdJLkRpYWdub3N0aWNDb250cm9sbGVyOworCisgICAgICAgICAg
ICBJbnNwZWN0b3JUZXN0LmxvZygiTWFraW5nIGRpYWdub3N0aWNzIG5vdCBhdmFpbGFibGUuLi4i
KTsKKyAgICAgICAgICAgIGRpYWdub3N0aWNDb250cm9sbGVyLmRpYWdub3N0aWNMb2dnaW5nQXZh
aWxhYmxlID0gZmFsc2U7CisKKyAgICAgICAgICAgIGxldCByZWNvcmRlciA9IG5ldyBUZXN0UmVj
b3JkZXIoIlRlc3QuMyIsIGRpYWdub3N0aWNDb250cm9sbGVyLCB7CisgICAgICAgICAgICAgICAg
c2V0dXA6IChyZWNvcmRlcikgPT4gSW5zcGVjdG9yVGVzdC5sb2coIkluIHNldHVwKCkgZm9yIHJl
Y29yZGVyOiAiICsgcmVjb3JkZXIubmFtZSksCisgICAgICAgICAgICAgICAgdGVhcmRvd246IChy
ZWNvcmRlcikgPT4gSW5zcGVjdG9yVGVzdC5sb2coIkluIHRlYXJkb3duKCkgZm9yIHJlY29yZGVy
OiAiICsgcmVjb3JkZXIubmFtZSksCisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgSW5z
cGVjdG9yVGVzdC5sb2coIkFkZGluZyByZWNvcmRlci4uLiIpOworICAgICAgICAgICAgZGlhZ25v
c3RpY0NvbnRyb2xsZXIuYWRkUmVjb3JkZXIocmVjb3JkZXIpOworCisgICAgICAgICAgICBJbnNw
ZWN0b3JUZXN0LmxvZygiVHJpZ2dlcmluZyBhIGRpYWdub3N0aWMgZXZlbnQuLi4iKTsKKyAgICAg
ICAgICAgIHJlY29yZGVyLnNlbmRFdmVudCgiVGVzdEV2ZW50LjQiLCB7ImFuc3dlciI6IDQyfSk7
CisKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QubG9nKCJNYWtpbmcgZGlhZ25vc3RpY3MgYXZh
aWxhYmxlLi4uIik7CisgICAgICAgICAgICBkaWFnbm9zdGljQ29udHJvbGxlci5kaWFnbm9zdGlj
TG9nZ2luZ0F2YWlsYWJsZSA9IHRydWU7CisKKyAgICAgICAgICAgIEluc3BlY3RvclRlc3QubG9n
KCJUcmlnZ2VyaW5nIGEgZGlhZ25vc3RpYyBldmVudC4uLiIpOworICAgICAgICAgICAgcmVjb3Jk
ZXIuc2VuZEV2ZW50KCJUZXN0RXZlbnQuNSIsIHsiYW5zd2VyIjogNDJ9KTsKKworICAgICAgICAg
ICAgSW5zcGVjdG9yVGVzdC5sb2coIk1ha2luZyBkaWFnbm9zdGljcyBub3QgYXZhaWxhYmxlLi4u
Iik7CisgICAgICAgICAgICBkaWFnbm9zdGljQ29udHJvbGxlci5kaWFnbm9zdGljTG9nZ2luZ0F2
YWlsYWJsZSA9IGZhbHNlOworCisgICAgICAgICAgICBJbnNwZWN0b3JUZXN0LmxvZygiVHJpZ2dl
cmluZyBhIGRpYWdub3N0aWMgZXZlbnQuLi4iKTsKKyAgICAgICAgICAgIHJlY29yZGVyLnNlbmRF
dmVudCgiVGVzdEV2ZW50LjYiLCB7ImFuc3dlciI6IDQyfSk7CisgICAgICAgIH0KKyAgICB9KTsK
KworICAgIHN1aXRlLnJ1blRlc3RDYXNlc0FuZEZpbmlzaCgpOworfQorPC9zY3JpcHQ+Cis8L2hl
YWQ+Cis8Ym9keSBvbkxvYWQ9InJ1blRlc3QoKSI+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>
<flag name="review"
          id="399866"
          type_id="1"
          status="+"
          setter="hi"
    />
          </attachment>
      

    </bug>

</bugzilla>