<?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>135690</bug_id>
          
          <creation_ts>2014-08-06 23:13:29 -0700</creation_ts>
          <short_desc>Web Inspector: DebuggerManager commands should return promises</short_desc>
          <delta_ts>2014-08-11 14:26:40 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>135772</dependson>
          <blocked>135663</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brian Burg">burg</reporter>
          <assigned_to name="Brian Burg">burg</assigned_to>
          <cc>graouts</cc>
    
    <cc>joepeck</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1027423</commentid>
    <comment_count>0</comment_count>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-08-06 23:13:29 -0700</bug_when>
    <thetext>This could include pause, resume, stepOver, stepInto, stepOut.

Note that these should add one-time listeners to the relevant DebuggerManager events, rather than returning the same promise returned by InspectorBackend commands. The latter may fire before the debugger manager has actually received the relevant event from the backend.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1027424</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2014-08-06 23:13:40 -0700</bug_when>
    <thetext>&lt;rdar://problem/17942179&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1027981</commentid>
    <comment_count>2</comment_count>
      <attachid>236318</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-08-08 15:50:02 -0700</bug_when>
    <thetext>Created attachment 236318
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1027982</commentid>
    <comment_count>3</comment_count>
      <attachid>236318</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-08-08 15:51:03 -0700</bug_when>
    <thetext>Comment on attachment 236318
Patch

This needs to be tested manually once debugging works again. But, feel free to review before then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028076</commentid>
    <comment_count>4</comment_count>
      <attachid>236318</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2014-08-09 23:26:26 -0700</bug_when>
    <thetext>Comment on attachment 236318
Patch

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

&gt; Source/WebInspectorUI/UserInterface/Base/EventListenerSet.js:27
&gt; +WebInspector.EventListener = function(thisObject, fireOnce)

Should be a seperate file.

&gt; Source/WebInspectorUI/UserInterface/Controllers/DebuggerManager.js:158
&gt; +                throw error;

Why throw?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028101</commentid>
    <comment_count>5</comment_count>
      <attachid>236318</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-08-10 08:32:01 -0700</bug_when>
    <thetext>Comment on attachment 236318
Patch

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

&gt;&gt; Source/WebInspectorUI/UserInterface/Base/EventListenerSet.js:27
&gt;&gt; +WebInspector.EventListener = function(thisObject, fireOnce)
&gt; 
&gt; Should be a seperate file.

ok

&gt;&gt; Source/WebInspectorUI/UserInterface/Controllers/DebuggerManager.js:158
&gt;&gt; +                throw error;
&gt; 
&gt; Why throw?

From a catch block, you need to re-throw an exception. Otherwise, the overall chain will be resolved instead of rejected.
We want the promise returned by this method to cause a larger chain to be rejected if any step fails.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028102</commentid>
    <comment_count>6</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2014-08-10 09:36:55 -0700</bug_when>
    <thetext>I thought that might be the case. Still a promise noob here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028118</commentid>
    <comment_count>7</comment_count>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-08-10 16:37:50 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; I thought that might be the case. Still a promise noob here.

I just wrote up some such Promise gotchas on the Inspector style guide page.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028213</commentid>
    <comment_count>8</comment_count>
      <attachid>236318</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2014-08-11 10:21:03 -0700</bug_when>
    <thetext>Comment on attachment 236318
Patch

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

&gt; Source/WebInspectorUI/ChangeLog:26
&gt; +        Web Inspector: Add a helper to avoid leaking single-fire event listeners in Promise chains
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=135772

Should remove this from this patch, which I think you already noticed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028275</commentid>
    <comment_count>9</comment_count>
      <attachid>236318</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-08-11 12:32:27 -0700</bug_when>
    <thetext>Comment on attachment 236318
Patch

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

&gt; Source/WebInspectorUI/UserInterface/Controllers/DebuggerManager.js:148
&gt; +        listener = new WebInspector.EventListener(this, true);

Missing &quot;var&quot; for listener, otherwise this leaks into global scope. [Applies to multiple places in this patch].</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028316</commentid>
    <comment_count>10</comment_count>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-08-11 14:26:40 -0700</bug_when>
    <thetext>Committed r172412: &lt;http://trac.webkit.org/changeset/172412&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236318</attachid>
            <date>2014-08-08 15:50:02 -0700</date>
            <delta_ts>2014-08-11 12:32:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135690-20140808155003.patch</filename>
            <type>text/plain</type>
            <size>29277</size>
            <attacher name="Brian Burg">burg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcyMzU1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwppbmRleCBl
ZWE0MmNiMjM3MGM2Y2E4MWMyNzMyMGI2ZTQ5NWEzNjNkODE2ZDZkLi43YzFmN2Y0ZmFlNWMwYmY3
ZDY5NDU3YTExODAyODg2ZjI0Zjk5YjVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEs
NSArMSw2MCBAQAogMjAxNC0wOC0wOCAgQnJpYW4gSi4gQnVyZyAgPGJ1cmdAY3Mud2FzaGluZ3Rv
bi5lZHU+CiAKKyAgICAgICAgV2ViIEluc3BlY3RvcjogRGVidWdnZXJNYW5hZ2VyIGNvbW1hbmRz
IHNob3VsZCByZXR1cm4gcHJvbWlzZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEzNTY5MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIENvbnZlcnQgdGhlIGV4aXN0aW5nIGRlYnVnZ2VyIGNvbW1hbmRzIHRv
IHJldHVybiBwcm9taXNlcy4gVGhpcworICAgICAgICByZXF1aXJlcyBzZXBhcmF0ZWx5IHdhaXRp
bmcgZm9yIHByb3RvY29sIGNvbW1hbmQncyBwcm9taXNlIHRvIGJlCisgICAgICAgIGZ1bGZpbGxl
ZCwgYXMgd2VsbCBhcyB3YWl0aW5nIGZvciB0aGUgYXBwcm9wcmlhdGUgRGVidWdnZXJNYW5hZ2Vy
CisgICAgICAgIGV2ZW50LiBJZiB0aGUgcHJvdG9jb2wgY29tbWFuZCBwcm9taXNlIGlzIHJlamVj
dGVkLCB0ZWFyIGRvd24gdGhlCisgICAgICAgIHNpbmdsZS1maXJlIGV2ZW50IGxpc3RlbmVyLgor
CisgICAgICAgICogVXNlckludGVyZmFjZS9Db250cm9sbGVycy9EZWJ1Z2dlck1hbmFnZXIuanM6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZS5wYXVzZSk6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLnByb3RvdHlwZS5yZXN1bWUp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUuc3RlcE92
ZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUuc3Rl
cEludG8pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUu
c3RlcE91dCk6CisgICAgICAgICogVXNlckludGVyZmFjZS9Db250cm9sbGVycy9SZXBsYXlNYW5h
Z2VyLmpzOiBVc2UgdGhlIHByb21pc2UtYmFzZWQgQVBJLgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlJlcGxheU1hbmFnZXIucHJvdG90eXBlLl9zdXBwcmVzc0JyZWFrcG9pbnRzQW5kUmVzdW1lSWZO
ZWVkZWQpOgorCisyMDE0LTA4LTA4ICBCcmlhbiBKLiBCdXJnICA8YnVyZ0Bjcy53YXNoaW5ndG9u
LmVkdT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBBZGQgYSBoZWxwZXIgdG8gYXZvaWQgbGVh
a2luZyBzaW5nbGUtZmlyZSBldmVudCBsaXN0ZW5lcnMgaW4gUHJvbWlzZSBjaGFpbnMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTc3MgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEEgY29tbW9uIHBhdHRl
cm4gd2hlbiB3b3JraW5nIHdpdGggcHJvbWlzZSBjaGFpbnMgaXMgdG8gY29udmVydCBhbiBldmVu
dAorICAgICAgICBoYW5kbGVyIGludG8gYSBwcm9taXNlIGJ5IHVzaW5nIGEgc2luZ2xlLWZpcmUg
ZXZlbnQgbGlzdGVuZXIgd2l0aCB0aGUKKyAgICAgICAgcmVzb2x2ZSBjb250aW51YXRpb24gYXMg
dGhlIGNhbGxiYWNrLiBUaGlzIGlzIGZpbmUgaWYgdGhlIGV2ZW50IGZpcmVzOworICAgICAgICBp
ZiBpdCBkb2Vzbid0IGZpcmUsIHRoZW4gdGhlIGV2ZW50IGVtaXR0ZXIgcGVybWFuZW50bHkga2Vl
cHMgYSByZWZlcmVuY2UgdG8gdGhlCisgICAgICAgIHRoaXMtb2JqZWN0IGFuZCB0aGUgY2FsbGJh
Y2suCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIEV2ZW50TGlzdGVuZXIsIGEgcHJveHkgb2Jq
ZWN0IGZvciBldmVudHMgdGhhdCBjYW4gYmUgbWFuaXB1bGF0ZWQKKyAgICAgICAgZnJvbSBtdWx0
aXBsZSBwcm9taXNlIGNhbGxiYWNrIGZ1bmN0aW9ucy4gSWYgYSBwcm9taXNlIGlzIHJlamVjdGVk
LCB0aGUgY2F0Y2gKKyAgICAgICAgYmxvY2sgY2FuIGRpc2Nvbm5lY3QgYW55IGV2ZW50IGxpc3Rl
bmVycyBzZXQgdXAgZWFybGllciBpbiB0aGUgcHJvbWlzZSBjaGFpbi4KKworICAgICAgICBUaGlz
IHBhdGNoIGFsc28gcmVpbXBsZW1lbnRzIEV2ZW50TGlzdGVuZXJTZXQgdG8gdXNlIG11bHRpcGxl
IEV2ZW50TGlzdGVuZXJzLAorICAgICAgICBzaW5jZSB0aGV5IHNoYXJlIHRoZSBzYW1lIGxvZ2lj
IHRvIHVuaWZvcm1seSBoYW5kbGUgSW5zcGVjdG9yIGFuZCBET00gZXZlbnRzLgorCisgICAgICAg
IFRlc3Q6IGluc3BlY3Rvci9ldmVudC1saXN0ZW5lci5odG1sCisgICAgICAgIFRlc3Q6IGluc3Bl
Y3Rvci9ldmVudC1saXN0ZW5lci1zZXQuaHRtbAorCisgICAgICAgICogVXNlckludGVyZmFjZS9C
YXNlL0V2ZW50TGlzdGVuZXJTZXQuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRXZlbnRMaXN0
ZW5lcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRXZlbnRMaXN0ZW5lci5wcm90b3R5cGUudGhp
cy5fY2FsbGJhY2spOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXIucHJvdG90
eXBlLmNvbm5lY3QpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXIucHJvdG90
eXBlLmRpc2Nvbm5lY3QpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJTZXQu
cHJvdG90eXBlLnJlZ2lzdGVyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FdmVudExpc3RlbmVy
U2V0LnByb3RvdHlwZS5pbnN0YWxsKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FdmVudExpc3Rl
bmVyU2V0LnByb3RvdHlwZS51bmluc3RhbGwpOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGVz
dC5odG1sOgorCisyMDE0LTA4LTA4ICBCcmlhbiBKLiBCdXJnICA8YnVyZ0Bjcy53YXNoaW5ndG9u
LmVkdT4KKwogICAgICAgICBXZWIgSW5zcGVjdG9yOiBhZGQgZGVidWdnaW5nIGZsYWcgdG8gSW5z
cGVjdG9yVGVzdCBmb3IgdW5idWZmZXJlZCBsb2dnaW5nIHRvIHN0ZGVycgogICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1NzI2CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvRXZlbnRMaXN0ZW5lclNl
dC5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvRXZlbnRMaXN0
ZW5lclNldC5qcwppbmRleCBmMzUyYWJkNWZkNjEwZTgwOGJmNTJhZThkYWY0MGZjMDM0ZjU3M2U5
Li4xMDE2ZGYxZWJiM2IxM2MwMDI0ZTc0YmJkMTExOGQzZjY2ZTcyMjJlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL0V2ZW50TGlzdGVuZXJTZXQu
anMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9FdmVudExp
c3RlbmVyU2V0LmpzCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMsIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTI0LDYgKzI0LDY5IEBACiAgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgogICovCiAKK1dlYkluc3BlY3Rvci5FdmVudExpc3RlbmVyID0gZnVuY3Rpb24odGhpc09iamVj
dCwgZmlyZU9uY2UpCit7CisgICAgdGhpcy5fdGhpc09iamVjdCA9IHRoaXNPYmplY3Q7CisgICAg
dGhpcy5fZW1pdHRlciA9IG51bGw7CisgICAgdGhpcy5fY2FsbGJhY2sgPSBudWxsOworICAgIHRo
aXMuX2ZpcmVPbmNlID0gZmlyZU9uY2U7Cit9CisKK1dlYkluc3BlY3Rvci5FdmVudExpc3RlbmVy
LnByb3RvdHlwZSA9IHsKKyAgICBjb25uZWN0OiBmdW5jdGlvbihlbWl0dGVyLCB0eXBlLCBjYWxs
YmFjaywgdXNlc0NhcHR1cmUpCisgICAgeworICAgICAgICBjb25zb2xlLmFzc2VydCghdGhpcy5f
ZW1pdHRlciAmJiAhdGhpcy5fY2FsbGJhY2ssICJFdmVudExpc3RlbmVyIGFscmVhZHkgYm91bmQg
dG8gYSBjYWxsYmFjay4iLCB0aGlzKTsKKyAgICAgICAgY29uc29sZS5hc3NlcnQoY2FsbGJhY2ss
ICJNaXNzaW5nIGNhbGxiYWNrIGZvciBldmVudDogIiArIHR5cGUpOworICAgICAgICBjb25zb2xl
LmFzc2VydChlbWl0dGVyLCAiTWlzc2luZyBldmVudCBlbWl0dGVyIGZvciBldmVudDogIiArIHR5
cGUpOworICAgICAgICB2YXIgZW1pdHRlcklzVmFsaWQgPSBlbWl0dGVyICYmIChlbWl0dGVyIGlu
c3RhbmNlb2YgV2ViSW5zcGVjdG9yLk9iamVjdCB8fCBlbWl0dGVyIGluc3RhbmNlb2YgTm9kZSB8
fCAodHlwZW9mIGVtaXR0ZXIuYWRkRXZlbnRMaXN0ZW5lciA9PT0gImZ1bmN0aW9uIikpOworICAg
ICAgICBjb25zb2xlLmFzc2VydChlbWl0dGVySXNWYWxpZCwgICJFdmVudCBlbWl0dGVyICIsIGVt
aXR0ZXIsICIgKHR5cGU6IiArIHR5cGUgKyAiKSBpcyBudWxsIG9yIGRvZXMgbm90IGltcGxlbWVu
dCBOb2RlIG9yIFdlYkluc3BlY3Rvci5PYmplY3QhIik7CisKKyAgICAgICAgaWYgKCFlbWl0dGVy
SXNWYWxpZCB8fCAhdHlwZSB8fCAhY2FsbGJhY2spCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgdGhpcy5fZW1pdHRlciA9IGVtaXR0ZXI7CisgICAgICAgIHRoaXMuX3R5cGUgPSB0eXBl
OworICAgICAgICB0aGlzLl91c2VzQ2FwdHVyZSA9ICEhdXNlc0NhcHR1cmU7CisKKyAgICAgICAg
aWYgKGVtaXR0ZXIgaW5zdGFuY2VvZiBOb2RlKQorICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxs
YmFjay5iaW5kKHRoaXMuX3RoaXNPYmplY3QpOworCisgICAgICAgIGlmICh0aGlzLl9maXJlT25j
ZSkgeworICAgICAgICAgICAgdmFyIGxpc3RlbmVyID0gdGhpczsKKyAgICAgICAgICAgIHRoaXMu
X2NhbGxiYWNrID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgbGlzdGVuZXIuZGlzY29u
bmVjdCgpOworICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgdGhpcy5fY2FsbGJh
Y2sgPSBjYWxsYmFjazsKKworICAgICAgICBpZiAodGhpcy5fZW1pdHRlciBpbnN0YW5jZW9mIE5v
ZGUpCisgICAgICAgICAgICB0aGlzLl9lbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5fdHlw
ZSwgdGhpcy5fY2FsbGJhY2ssIHRoaXMuX3VzZXNDYXB0dXJlKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgdGhpcy5fZW1pdHRlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuX3R5cGUsIHRoaXMu
X2NhbGxiYWNrLCB0aGlzLl90aGlzT2JqZWN0KTsKKyAgICB9LAorCisgICAgZGlzY29ubmVjdDog
ZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgY29uc29sZS5hc3NlcnQodGhpcy5fZW1pdHRlciAm
JiB0aGlzLl9jYWxsYmFjaywgIkV2ZW50TGlzdGVuZXIgaXMgbm90IGJvdW5kIHRvIGEgY2FsbGJh
Y2suIiwgdGhpcyk7CisKKyAgICAgICAgaWYgKCF0aGlzLl9lbWl0dGVyIHx8ICF0aGlzLl9jYWxs
YmFjaykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAodGhpcy5fZW1pdHRlciBp
bnN0YW5jZW9mIE5vZGUpCisgICAgICAgICAgICB0aGlzLl9lbWl0dGVyLnJlbW92ZUV2ZW50TGlz
dGVuZXIodGhpcy5fdHlwZSwgdGhpcy5fY2FsbGJhY2ssIHRoaXMuX3VzZXNDYXB0dXJlKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgdGhpcy5fZW1pdHRlci5yZW1vdmVFdmVudExpc3RlbmVy
KHRoaXMuX3R5cGUsIHRoaXMuX2NhbGxiYWNrLCB0aGlzLl90aGlzT2JqZWN0KTsKKworICAgICAg
ICBpZiAodGhpcy5fZmlyZU9uY2UpCisgICAgICAgICAgICBkZWxldGUgdGhpcy5fdGhpc09iamVj
dDsKKyAgICAgICAgZGVsZXRlIHRoaXMuX2VtaXR0ZXI7CisgICAgICAgIGRlbGV0ZSB0aGlzLl90
eXBlOworICAgICAgICBkZWxldGUgdGhpcy5fY2FsbGJhY2s7CisgICAgfQorfTsKKworCiAvLyBU
aGlzIGNsYXNzIHN1cHBvcnRzIGFkZGluZyBhbmQgcmVtb3ZpbmcgbWFueSBsaXN0ZW5lcnMgYXQg
b25jZS4KIC8vIEFkZCBET00gb3IgSW5zcGVjdG9yIGV2ZW50IGxpc3RlbmVycyB0byB0aGUgc2V0
IHVzaW5nIGByZWdpc3RlcigpYC4KIC8vIFVzZSBgaW5zdGFsbCgpYCBhbmQgYHVuaW5zdGFsbCgp
YCB0byBlbmFibGUgb3IgZGlzYWJsZSBhbGwgbGlzdGVuZXJzCkBAIC0zOCwxNiArMTAxLDE3IEBA
IFdlYkluc3BlY3Rvci5FdmVudExpc3RlbmVyU2V0ID0gZnVuY3Rpb24oZGVmYXVsdFRoaXNPYmpl
Y3QsIG5hbWUpCiB9CiAKIFdlYkluc3BlY3Rvci5FdmVudExpc3RlbmVyU2V0LnByb3RvdHlwZSA9
IHsKLSAgICByZWdpc3RlcjogZnVuY3Rpb24oZW1pdHRlciwgdHlwZSwgbGlzdGVuZXIsIHRoaXNP
YmplY3QsIHVzZUNhcHR1cmUpCisgICAgcmVnaXN0ZXI6IGZ1bmN0aW9uKGVtaXR0ZXIsIHR5cGUs
IGNhbGxiYWNrLCB0aGlzT2JqZWN0LCB1c2VzQ2FwdHVyZSkKICAgICB7Ci0gICAgICAgIGNvbnNv
bGUuYXNzZXJ0KGxpc3RlbmVyLCAiTWlzc2luZyBsaXN0ZW5lciBmb3IgZXZlbnQ6ICIgKyB0eXBl
KTsKLSAgICAgICAgY29uc29sZS5hc3NlcnQoZW1pdHRlciwgIk1pc3NpbmcgZXZlbnQgZW1pdHRl
ciBmb3IgZXZlbnQ6ICIgKyB0eXBlKTsKLSAgICAgICAgY29uc29sZS5hc3NlcnQoZW1pdHRlciBp
bnN0YW5jZW9mIFdlYkluc3BlY3Rvci5PYmplY3QgfHwgZW1pdHRlciBpbnN0YW5jZW9mIE5vZGUg
fHwgKHR5cGVvZiBlbWl0dGVyLmFkZEV2ZW50TGlzdGVuZXIgPT09ICJmdW5jdGlvbiIpLCAiRXZl
bnQgZW1pdHRlciIsIGVtaXR0ZXIsICIgKHR5cGU6IiArIHR5cGUgKyAiKSBkb2VzIG5vdCBpbXBs
ZW1lbnQgTm9kZSBvciBXZWJJbnNwZWN0b3IuT2JqZWN0ISIpOworICAgICAgICBjb25zb2xlLmFz
c2VydChjYWxsYmFjaywgIk1pc3NpbmcgY2FsbGJhY2sgZm9yIGV2ZW50OiAiICsgdHlwZSk7Cisg
ICAgICAgIGNvbnNvbGUuYXNzZXJ0KHR5cGUsICJUcmllZCB0byByZWdpc3RlciBsaXN0ZW5lciBm
b3IgdW5rbm93biBldmVudDogIiArIHR5cGUpOworICAgICAgICB2YXIgZW1pdHRlcklzVmFsaWQg
PSBlbWl0dGVyICYmIChlbWl0dGVyIGluc3RhbmNlb2YgV2ViSW5zcGVjdG9yLk9iamVjdCB8fCBl
bWl0dGVyIGluc3RhbmNlb2YgTm9kZSB8fCAodHlwZW9mIGVtaXR0ZXIuYWRkRXZlbnRMaXN0ZW5l
ciA9PT0gImZ1bmN0aW9uIikpOworICAgICAgICBjb25zb2xlLmFzc2VydChlbWl0dGVySXNWYWxp
ZCwgICJFdmVudCBlbWl0dGVyICIsIGVtaXR0ZXIsICIgKHR5cGU6IiArIHR5cGUgKyAiKSBpcyBu
dWxsIG9yIGRvZXMgbm90IGltcGxlbWVudCBOb2RlIG9yIFdlYkluc3BlY3Rvci5PYmplY3QhIik7
CiAKLSAgICAgICAgaWYgKGVtaXR0ZXIgaW5zdGFuY2VvZiBOb2RlKQotICAgICAgICAgICAgbGlz
dGVuZXIgPSBsaXN0ZW5lci5iaW5kKHRoaXNPYmplY3QgfHwgdGhpcy5fZGVmYXVsdFRoaXNPYmpl
Y3QpOworICAgICAgICBpZiAoIWVtaXR0ZXJJc1ZhbGlkIHx8ICF0eXBlIHx8ICFjYWxsYmFjaykK
KyAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICB0aGlzLl9saXN0ZW5lcnMucHVzaCh7ZW1p
dHRlcjogZW1pdHRlciwgdHlwZTogdHlwZSwgbGlzdGVuZXI6IGxpc3RlbmVyLCB0aGlzT2JqZWN0
OiB0aGlzT2JqZWN0LCB1c2VDYXB0dXJlOiB1c2VDYXB0dXJlfSk7CisgICAgICAgIHRoaXMuX2xp
c3RlbmVycy5wdXNoKHtsaXN0ZW5lcjogbmV3IFdlYkluc3BlY3Rvci5FdmVudExpc3RlbmVyKHRo
aXNPYmplY3QgfHwgdGhpcy5fZGVmYXVsdFRoaXNPYmplY3QpLCBlbWl0dGVyOiBlbWl0dGVyLCB0
eXBlOiB0eXBlLCBjYWxsYmFjazogY2FsbGJhY2ssIHVzZXNDYXB0dXJlOiB1c2VzQ2FwdHVyZX0p
OwogICAgIH0sCiAKICAgICB1bnJlZ2lzdGVyOiBmdW5jdGlvbigpCkBAIC02MCwzMyArMTI0LDI3
IEBAIFdlYkluc3BlY3Rvci5FdmVudExpc3RlbmVyU2V0LnByb3RvdHlwZSA9IHsKICAgICBpbnN0
YWxsOiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICBjb25zb2xlLmFzc2VydCghdGhpcy5faW5z
dGFsbGVkLCAiQWxyZWFkeSBpbnN0YWxsZWQgbGlzdGVuZXIgZ3JvdXA6ICIgKyB0aGlzLm5hbWUp
OworICAgICAgICBpZiAodGhpcy5faW5zdGFsbGVkKQorICAgICAgICAgICAgcmV0dXJuOwogCiAg
ICAgICAgIHRoaXMuX2luc3RhbGxlZCA9IHRydWU7CiAKLSAgICAgICAgZm9yICh2YXIgbGlzdGVu
ZXJEYXRhIG9mIHRoaXMuX2xpc3RlbmVycykgewotICAgICAgICAgICAgaWYgKGxpc3RlbmVyRGF0
YS5lbWl0dGVyIGluc3RhbmNlb2YgTm9kZSkKLSAgICAgICAgICAgICAgICBsaXN0ZW5lckRhdGEu
ZW1pdHRlci5hZGRFdmVudExpc3RlbmVyKGxpc3RlbmVyRGF0YS50eXBlLCBsaXN0ZW5lckRhdGEu
bGlzdGVuZXIsIGxpc3RlbmVyRGF0YS51c2VDYXB0dXJlKTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBsaXN0ZW5lckRhdGEuZW1pdHRlci5hZGRFdmVudExpc3RlbmVyKGxpc3Rl
bmVyRGF0YS50eXBlLCBsaXN0ZW5lckRhdGEubGlzdGVuZXIsIGxpc3RlbmVyRGF0YS50aGlzT2Jq
ZWN0IHx8IHRoaXMuX2RlZmF1bHRUaGlzT2JqZWN0KTsKLSAgICAgICAgfQorICAgICAgICBmb3Ig
KHZhciBkYXRhIG9mIHRoaXMuX2xpc3RlbmVycykKKyAgICAgICAgICAgIGRhdGEubGlzdGVuZXIu
Y29ubmVjdChkYXRhLmVtaXR0ZXIsIGRhdGEudHlwZSwgZGF0YS5jYWxsYmFjaywgZGF0YS51c2Vz
Q2FwdHVyZSk7CiAgICAgfSwKIAogICAgIHVuaW5zdGFsbDogZnVuY3Rpb24odW5yZWdpc3Rlckxp
c3RlbmVycykKICAgICB7CiAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KHRoaXMuX2luc3RhbGxlZCwg
IlRyeWluZyB0byB1bmluc3RhbGwgbGlzdGVuZXIgZ3JvdXAgIiArIHRoaXMubmFtZSArICIsIGJ1
dCBpdCBpc24ndCBpbnN0YWxsZWQuIik7CisgICAgICAgIGlmICghdGhpcy5faW5zdGFsbGVkKQor
ICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIHRoaXMuX2luc3RhbGxlZCA9IGZhbHNlOwog
Ci0gICAgICAgIGZvciAodmFyIGxpc3RlbmVyRGF0YSBvZiB0aGlzLl9saXN0ZW5lcnMpIHsKLSAg
ICAgICAgICAgIGlmIChsaXN0ZW5lckRhdGEuZW1pdHRlciBpbnN0YW5jZW9mIE5vZGUpCi0gICAg
ICAgICAgICAgICAgbGlzdGVuZXJEYXRhLmVtaXR0ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihsaXN0
ZW5lckRhdGEudHlwZSwgbGlzdGVuZXJEYXRhLmxpc3RlbmVyLCBsaXN0ZW5lckRhdGEudXNlQ2Fw
dHVyZSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbGlzdGVuZXJEYXRhLmVt
aXR0ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihsaXN0ZW5lckRhdGEudHlwZSwgbGlzdGVuZXJEYXRh
Lmxpc3RlbmVyLCBsaXN0ZW5lckRhdGEudGhpc09iamVjdCB8fCB0aGlzLl9kZWZhdWx0VGhpc09i
amVjdCk7Ci0gICAgICAgIH0KKyAgICAgICAgZm9yICh2YXIgZGF0YSBvZiB0aGlzLl9saXN0ZW5l
cnMpCisgICAgICAgICAgICBkYXRhLmxpc3RlbmVyLmRpc2Nvbm5lY3QoKTsKIAotICAgICAgICBp
ZiAodW5yZWdpc3Rlckxpc3RlbmVycykgeworICAgICAgICBpZiAodW5yZWdpc3Rlckxpc3RlbmVy
cykKICAgICAgICAgICAgIHRoaXMuX2xpc3RlbmVycyA9IFtdOwotICAgICAgICAgICAgZGVsZXRl
IHRoaXMuX2RlZmF1bHRUaGlzT2JqZWN0OwotICAgICAgICB9CiAgICAgfSwKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0RlYnVn
Z2VyTWFuYWdlci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRy
b2xsZXJzL0RlYnVnZ2VyTWFuYWdlci5qcwppbmRleCBkMjljMzc1Y2YzOTE4NjYyMzU2NDY2YjMw
MWQzYjZhNGU3MGEyMGZlLi4xOWVjOTI1MWU4NjA5MDYyMWJkYzQ4NjY5MThlNTI3ODY2NTY3MTYx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9s
bGVycy9EZWJ1Z2dlck1hbmFnZXIuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvQ29udHJvbGxlcnMvRGVidWdnZXJNYW5hZ2VyLmpzCkBAIC0xNDIsMjcgKzE0Miwx
MDcgQEAgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5wcm90b3R5cGUgPSB7CiAKICAgICBw
YXVzZTogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgRGVidWdnZXJBZ2VudC5wYXVzZSgpOwor
ICAgICAgICBpZiAodGhpcy5fcGF1c2VkKQorICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVz
b2x2ZSgpOworCisgICAgICAgIGxpc3RlbmVyID0gbmV3IFdlYkluc3BlY3Rvci5FdmVudExpc3Rl
bmVyKHRoaXMsIHRydWUpOworCisgICAgICAgIHZhciBtYW5hZ2VyUmVzdWx0ID0gbmV3IFByb21p
c2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7CisgICAgICAgICAgICBsaXN0ZW5lci5jb25u
ZWN0KFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIsIFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1h
bmFnZXIuRXZlbnQuUGF1c2VkLCByZXNvbHZlKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgdmFy
IHByb3RvY29sUmVzdWx0ID0gRGVidWdnZXJBZ2VudC5wYXVzZSgpCisgICAgICAgICAgICAuY2F0
Y2goZnVuY3Rpb24oZXJyb3IpIHsKKyAgICAgICAgICAgICAgICBsaXN0ZW5lci5kaXNjb25uZWN0
KCk7CisgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiRGVidWdnZXJNYW5hZ2VyLnBhdXNl
IGZhaWxlZDogIiwgZXJyb3IpOworICAgICAgICAgICAgICAgIHRocm93IGVycm9yOworICAgICAg
ICAgICAgfSk7CisKKyAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFttYW5hZ2VyUmVzdWx0LCBw
cm90b2NvbFJlc3VsdF0pOwogICAgIH0sCiAKICAgICByZXN1bWU6IGZ1bmN0aW9uKCkKICAgICB7
Ci0gICAgICAgIERlYnVnZ2VyQWdlbnQucmVzdW1lKCk7CisgICAgICAgIGlmICghdGhpcy5fcGF1
c2VkKQorICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOworCisgICAgICAgIGxp
c3RlbmVyID0gbmV3IFdlYkluc3BlY3Rvci5FdmVudExpc3RlbmVyKHRoaXMsIHRydWUpOworCisg
ICAgICAgIHZhciBtYW5hZ2VyUmVzdWx0ID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwg
cmVqZWN0KSB7CisgICAgICAgICAgICBsaXN0ZW5lci5jb25uZWN0KFdlYkluc3BlY3Rvci5kZWJ1
Z2dlck1hbmFnZXIsIFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIuRXZlbnQuUmVzdW1lZCwg
cmVzb2x2ZSk7CisgICAgICAgIH0pOworCisgICAgICAgIHZhciBwcm90b2NvbFJlc3VsdCA9IERl
YnVnZ2VyQWdlbnQucmVzdW1lKCkKKyAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbihlcnJvcikg
eworICAgICAgICAgICAgICAgIGxpc3RlbmVyLmRpc2Nvbm5lY3QoKTsKKyAgICAgICAgICAgICAg
ICBjb25zb2xlLmVycm9yKCJEZWJ1Z2dlck1hbmFnZXIucmVzdW1lIGZhaWxlZDogIiwgZXJyb3Ip
OworICAgICAgICAgICAgICAgIHRocm93IGVycm9yOworICAgICAgICAgICAgfSk7CisKKyAgICAg
ICAgcmV0dXJuIFByb21pc2UuYWxsKFttYW5hZ2VyUmVzdWx0LCBwcm90b2NvbFJlc3VsdF0pOwog
ICAgIH0sCiAKICAgICBzdGVwT3ZlcjogZnVuY3Rpb24oKQogICAgIHsKLSAgICAgICAgRGVidWdn
ZXJBZ2VudC5zdGVwT3ZlcigpOworICAgICAgICBpZiAoIXRoaXMuX3BhdXNlZCkKKyAgICAgICAg
ICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoIkNhbm5vdCBzdGVwIG92ZXIgYmVj
YXVzZSBkZWJ1Z2dlciBpcyBub3QgcGF1c2VkLiIpKTsKKworICAgICAgICBsaXN0ZW5lciA9IG5l
dyBXZWJJbnNwZWN0b3IuRXZlbnRMaXN0ZW5lcih0aGlzLCB0cnVlKTsKKworICAgICAgICB2YXIg
bWFuYWdlclJlc3VsdCA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkgewor
ICAgICAgICAgICAgbGlzdGVuZXIuY29ubmVjdChXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2Vy
LCBXZWJJbnNwZWN0b3IuRGVidWdnZXJNYW5hZ2VyLkV2ZW50LkFjdGl2ZUNhbGxGcmFtZURpZENo
YW5nZSwgcmVzb2x2ZSk7CisgICAgICAgIH0pOworCisgICAgICAgIHZhciBwcm90b2NvbFJlc3Vs
dCA9IERlYnVnZ2VyQWdlbnQuc3RlcE92ZXIoKQorICAgICAgICAgICAgLmNhdGNoKGZ1bmN0aW9u
KGVycm9yKSB7CisgICAgICAgICAgICAgICAgbGlzdGVuZXIuZGlzY29ubmVjdCgpOworICAgICAg
ICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkRlYnVnZ2VyTWFuYWdlci5zdGVwT3ZlciBmYWlsZWQ6
ICIsIGVycm9yKTsKKyAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjsKKyAgICAgICAgICAgIH0p
OworCisgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChbbWFuYWdlclJlc3VsdCwgcHJvdG9jb2xS
ZXN1bHRdKTsKICAgICB9LAogCiAgICAgc3RlcEludG86IGZ1bmN0aW9uKCkKICAgICB7Ci0gICAg
ICAgIERlYnVnZ2VyQWdlbnQuc3RlcEludG8oKTsKKyAgICAgICAgaWYgKCF0aGlzLl9wYXVzZWQp
CisgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJDYW5ub3Qgc3Rl
cCBpbnRvIGJlY2F1c2UgZGVidWdnZXIgaXMgbm90IHBhdXNlZC4iKSk7CisKKyAgICAgICAgbGlz
dGVuZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXIodGhpcywgdHJ1ZSk7CisKKyAg
ICAgICAgdmFyIG1hbmFnZXJSZXN1bHQgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCBy
ZWplY3QpIHsKKyAgICAgICAgICAgIGxpc3RlbmVyLmNvbm5lY3QoV2ViSW5zcGVjdG9yLmRlYnVn
Z2VyTWFuYWdlciwgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTWFuYWdlci5FdmVudC5BY3RpdmVDYWxs
RnJhbWVEaWRDaGFuZ2UsIHJlc29sdmUpOworICAgICAgICB9KTsKKworICAgICAgICB2YXIgcHJv
dG9jb2xSZXN1bHQgPSBEZWJ1Z2dlckFnZW50LnN0ZXBJbnRvKCkKKyAgICAgICAgICAgIC5jYXRj
aChmdW5jdGlvbihlcnJvcikgeworICAgICAgICAgICAgICAgIGxpc3RlbmVyLmRpc2Nvbm5lY3Qo
KTsKKyAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJEZWJ1Z2dlck1hbmFnZXIuc3RlcElu
dG8gZmFpbGVkOiAiLCBlcnJvcik7CisgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7CisgICAg
ICAgICAgICB9KTsKKworICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoW21hbmFnZXJSZXN1bHQs
IHByb3RvY29sUmVzdWx0XSk7CiAgICAgfSwKIAogICAgIHN0ZXBPdXQ6IGZ1bmN0aW9uKCkKICAg
ICB7Ci0gICAgICAgIERlYnVnZ2VyQWdlbnQuc3RlcE91dCgpOworICAgICAgICBpZiAoIXRoaXMu
X3BhdXNlZCkKKyAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoIkNh
bm5vdCBzdGVwIG91dCBiZWNhdXNlIGRlYnVnZ2VyIGlzIG5vdCBwYXVzZWQuIikpOworCisgICAg
ICAgIGxpc3RlbmVyID0gbmV3IFdlYkluc3BlY3Rvci5FdmVudExpc3RlbmVyKHRoaXMsIHRydWUp
OworCisgICAgICAgIHZhciBtYW5hZ2VyUmVzdWx0ID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVz
b2x2ZSwgcmVqZWN0KSB7CisgICAgICAgICAgICBsaXN0ZW5lci5jb25uZWN0KFdlYkluc3BlY3Rv
ci5kZWJ1Z2dlck1hbmFnZXIsIFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1hbmFnZXIuRXZlbnQuQWN0
aXZlQ2FsbEZyYW1lRGlkQ2hhbmdlLCByZXNvbHZlKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAg
dmFyIHByb3RvY29sUmVzdWx0ID0gRGVidWdnZXJBZ2VudC5zdGVwT3V0KCkKKyAgICAgICAgICAg
IC5jYXRjaChmdW5jdGlvbihlcnJvcikgeworICAgICAgICAgICAgICAgIGxpc3RlbmVyLmRpc2Nv
bm5lY3QoKTsKKyAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCJEZWJ1Z2dlck1hbmFnZXIu
c3RlcE91dCBmYWlsZWQ6ICIsIGVycm9yKTsKKyAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjsK
KyAgICAgICAgICAgIH0pOworCisgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChbbWFuYWdlclJl
c3VsdCwgcHJvdG9jb2xSZXN1bHRdKTsKICAgICB9LAogCiAgICAgZ2V0IGFsbEV4Y2VwdGlvbnNC
cmVha3BvaW50KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL0NvbnRyb2xsZXJzL1JlcGxheU1hbmFnZXIuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9Db250cm9sbGVycy9SZXBsYXlNYW5hZ2VyLmpzCmluZGV4IGExYzAyOTlk
ZmJjN2Y4NTE1NWQ1NTdjZTgyMDI5ODg5ODY4MWViOTQuLjQ2YzA1MDUxMzVkZWU0MWYzNWY1ODE2
Zjg0NjZlZTQ1Y2IzNmVjMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL0NvbnRyb2xsZXJzL1JlcGxheU1hbmFnZXIuanMKKysrIGIvU291cmNlL1dlYklu
c3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvUmVwbGF5TWFuYWdlci5qcwpAQCAt
Njc1LDExICs2NzUsOCBAQCBXZWJJbnNwZWN0b3IuUmVwbGF5TWFuYWdlci5wcm90b3R5cGUgPSB7
CiAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsK
ICAgICAgICAgICAgIG1hbmFnZXIuX2JyZWFrcG9pbnRzV2VyZVN1cHByZXNzZWQgPSBXZWJJbnNw
ZWN0b3IuZGVidWdnZXJNYW5hZ2VyLmJyZWFrcG9pbnRzRW5hYmxlZDsKICAgICAgICAgICAgIFdl
Ykluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIuYnJlYWtwb2ludHNFbmFibGVkID0gZmFsc2U7Ci0g
ICAgICAgICAgICBpZiAoIVdlYkluc3BlY3Rvci5kZWJ1Z2dlck1hbmFnZXIucGF1c2VkKQotICAg
ICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7CiAKLSAgICAgICAgICAgIFdlYkluc3BlY3Rv
ci5kZWJ1Z2dlck1hbmFnZXIucmVzdW1lKCk7Ci0gICAgICAgICAgICBXZWJJbnNwZWN0b3IuZGVi
dWdnZXJNYW5hZ2VyLmFkZFNpbmdsZUZpcmVFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1
Z2dlck1hbmFnZXIuRXZlbnQuUmVzdW1lZCwgcmVzb2x2ZSk7CisgICAgICAgICAgICByZXR1cm4g
V2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5yZXN1bWUoKTsKICAgICAgICAgfSk7CiAgICAg
fQogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Rl
c3QuaHRtbCBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Rlc3QuaHRtbApp
bmRleCAxOTNhMjdmNWVkNWMxN2MwZmQ2MTMzYmNhNzY2ODdlOWZmODA0OTE3Li40NTRhYTFjM2Q3
YjZlYzlkMzNjZjdjODQ3OWYzYTFiMGEwZjNhMzMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9UZXN0Lmh0bWwKKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvVGVzdC5odG1sCkBAIC0zNSw2ICszNSw3IEBACiAgICAgPHNjcmlw
dCBzcmM9IkJhc2UvVGVzdC5qcyI+PC9zY3JpcHQ+CiAKICAgICA8c2NyaXB0IHNyYz0iQmFzZS9E
T01VdGlsaXRpZXMuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJCYXNlL0V2ZW50TGlz
dGVuZXJTZXQuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJCYXNlL1VSTFV0aWxpdGll
cy5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IkJhc2UvVXRpbGl0aWVzLmpzIj48L3Nj
cmlwdD4KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCmluZGV4IDNiMDgyZWI5Yjk2NWEzOGY2NDI3ZGJiZjViMTg5NTA0YTA0M2MxMTgu
LjExMmVhYzMxMzNmZjcwNTkwNDU5Y2UyNmNhOWVhMWVmZmU0NGE2NTMgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNSBAQAorMjAxNC0wOC0wOCAgQnJpYW4gSi4gQnVyZyAgPGJ1cmdAY3Mud2FzaGluZ3Rvbi5l
ZHU+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogQWRkIGEgaGVscGVyIHRvIGF2b2lkIGxlYWtp
bmcgc2luZ2xlLWZpcmUgZXZlbnQgbGlzdGVuZXJzIGluIFByb21pc2UgY2hhaW5zCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzU3NzIKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGluc3BlY3Rvci9ldmVu
dC1saXN0ZW5lci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9ldmVu
dC1saXN0ZW5lci1zZXQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Iv
ZXZlbnQtbGlzdGVuZXItc2V0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9ldmVu
dC1saXN0ZW5lci5odG1sOiBBZGRlZC4KKwogMjAxNC0wOC0wNyAgUm9nZXIgRm9uZyAgPHJvZ2Vy
X2ZvbmdAYXBwbGUuY29tPgogCiAgICAgICAgIEFkanVzdG1lbnRzIHRvIEN1ZUJveCBDU1MgV2lk
dGggY2FsY3VsYXRpb25zLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2V2ZW50
LWxpc3RlbmVyLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9ldmVudC1saXN0
ZW5lci1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjE0MGMwODllOTllMmMwNTg0MGFjMjM4NGMw
OWNlNjc3YmMzODQxMQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9l
dmVudC1saXN0ZW5lci1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxNiBAQAorVGVzdGluZyBiYXNp
YyBmdW5jdGlvbmFsaXR5IG9mIFdlYkluc3BlY3Rvci5FdmVudExpc3RlbmVyLgorCitDb25uZWN0
aW5nIHRoZSBsaXN0ZW5lci4KK0ludm9rZWQgY2FsbGJhY2sgZm9yIGthYm9vbSBldmVudC4KK0lu
dm9rZWQgY2FsbGJhY2sgZm9yIGthYm9vbSBldmVudC4KK0Rpc2Nvbm5lY3RpbmcgdGhlIGxpc3Rl
bmVyLgorQ29ubmVjdGluZyB0aGUgbGlzdGVuZXIuCitJbnZva2VkIGNhbGxiYWNrIGZvciBrYWJv
b20gZXZlbnQuCitEaXNjb25uZWN0aW5nIHRoZSBsaXN0ZW5lci4KK0Nvbm5lY3RpbmcgdGhlIGxp
c3RlbmVyLgorRGlzY29ubmVjdGluZyB0aGUgbGlzdGVuZXIuCitDb25uZWN0aW5nIHRoZSBzaW5n
bGUtZmlyZSBsaXN0ZW5lci4KK0ludm9rZWQgY2FsbGJhY2sgZm9yIGthYm9vbSBldmVudC4KK0Rp
c2Nvbm5lY3RpbmcgdGhlIHNpbmdsZS1maXJlIGxpc3RlbmVyLgorSW52b2tlZCBjYWxsYmFjayBm
b3Iga2Fib29tIGV2ZW50LgorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZXZl
bnQtbGlzdGVuZXItc2V0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9ldmVu
dC1saXN0ZW5lci1zZXQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgxMDk4ZjM0ZmM3NTJmYmI2
NjU3NGRmOTY3OTZhZWEwZTRhNWM5ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9p
bnNwZWN0b3IvZXZlbnQtbGlzdGVuZXItc2V0LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDI1IEBA
CitUZXN0aW5nIGJhc2ljIGZ1bmN0aW9uYWxpdHkgb2YgV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVu
ZXJTZXQuCisKK1JlZ2lzdGVyaW5nIGxpc3RlbmVycy4KK0luc3RhbGxpbmcgbGlzdGVuZXJzLgor
RGlzcGF0Y2hpbmcgZXZlbnRzLgorSW52b2tlZCBjYWxsYmFjayBmb3IgZm9vIGV2ZW50LgorSW52
b2tlZCBjYWxsYmFjayBmb3IgYmFyIGV2ZW50LgorSW52b2tlZCBjYWxsYmFjayBmb3IgYmF6IGV2
ZW50LgorVW5pbnN0YWxsaW5nIGFuZCBkaXNjb25uZWN0aW5nIGxpc3RlbmVycy4KK1JlZ2lzdGVy
aW5nIGxpc3RlbmVycy4KK0Rpc3BhdGNoaW5nIGV2ZW50cy4KK0ludm9rZWQgY2FsbGJhY2sgZm9y
IGZvbyBldmVudC4KK0ludm9rZWQgY2FsbGJhY2sgZm9yIGJhciBldmVudC4KK0ludm9rZWQgY2Fs
bGJhY2sgZm9yIGJheiBldmVudC4KK1VuaW5zdGFsbGluZyBsaXN0ZW5lcnMuCitJbnN0YWxsaW5n
IGxpc3RlbmVycy4KK0Rpc3BhdGNoaW5nIGV2ZW50cy4KK0ludm9rZWQgY2FsbGJhY2sgZm9yIGZv
byBldmVudC4KK0ludm9rZWQgY2FsbGJhY2sgZm9yIGJhciBldmVudC4KK0ludm9rZWQgY2FsbGJh
Y2sgZm9yIGJheiBldmVudC4KK1VucmVnaXN0ZXJpbmcgZXZlcnl0aGluZy4KK0Rpc3BhdGNoaW5n
IGV2ZW50cy4KK1VuaW50YWxsaW5nIGFuZCBkaXNjb25uZWN0aW5nIGxpc3RlbmVycy4KK0Rpc3Bh
dGNoaW5nIGV2ZW50cy4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2V2ZW50
LWxpc3RlbmVyLXNldC5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2V2ZW50LWxpc3RlbmVy
LXNldC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcwOTY0YjMyY2JmOGYyMzgxZGQ2NDgzMWVlMmQ2NDFiN2M2
OWUyNGMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZXZlbnQtbGlz
dGVuZXItc2V0Lmh0bWwKQEAgLTAsMCArMSwxMTcgQEAKKzwhZG9jdHlwZSBodG1sPgorPGh0bWw+
Cis8aGVhZD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uL2h0dHAvdGVz
dHMvaW5zcGVjdG9yL2luc3BlY3Rvci10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CitmdW5j
dGlvbiB0ZXN0KCkKK3sKKyAgICBjb25zdCBGb29FdmVudCA9ICJmb28iOworICAgIGNvbnN0IEJh
ckV2ZW50ID0gImJhciI7CisgICAgY29uc3QgQmF6RXZlbnQgPSAiYmF6IjsKKyAgICB2YXIgZW1p
dHRlcjEgPSBuZXcgV2ViSW5zcGVjdG9yLk9iamVjdCgpOworICAgIHZhciBlbWl0dGVyMiA9IG5l
dyBXZWJJbnNwZWN0b3IuT2JqZWN0KCk7CisgICAgdmFyIGNvbnRleHQxID0gbmV3IFdlYkluc3Bl
Y3Rvci5PYmplY3QoKTsKKyAgICB2YXIgY29udGV4dDIgPSBuZXcgV2ViSW5zcGVjdG9yLk9iamVj
dCgpOworICAgIHZhciBkYXRhMSA9IFsxLCAyLCAzXTsKKyAgICB2YXIgZGF0YTIgPSBbNCwgNiwg
OF07CisKKyAgICBmdW5jdGlvbiBmb29DYWxsYmFjayhldmVudCkKKyAgICB7CisgICAgICAgIElu
c3BlY3RvclRlc3QuYXNzZXJ0KHRoaXMgPT09IGNvbnRleHQxLCAiQ2FsbGJhY2sgaW52b2tlZCB3
aXRoIHdyb25nIHx0aGlzfCBiaW5kaW5nLiIpOworICAgICAgICBJbnNwZWN0b3JUZXN0LmFzc2Vy
dChldmVudC50YXJnZXQgPT09IGVtaXR0ZXIxLCAiQ2FsbGJhY2sgaW52b2tlZCB3aXRoIHdyb25n
IGV2ZW50IGVtaXR0ZXIuIik7CisgICAgICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KGV2ZW50LmRh
dGEgPT09IGRhdGExLCAiQ2FsbGJhY2sgaW52b2tlZCB3aXRoIHdyb25nIGV2ZW50IGRhdGEuIik7
CisKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIkludm9rZWQgY2FsbGJhY2sgZm9yIGZvbyBl
dmVudC4iKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBiYXJDYWxsYmFjayhldmVudCkKKyAgICB7
CisgICAgICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KHRoaXMgPT09IGNvbnRleHQxLCAiQ2FsbGJh
Y2sgaW52b2tlZCB3aXRoIHdyb25nIHx0aGlzfCBiaW5kaW5nLiIpOworICAgICAgICBJbnNwZWN0
b3JUZXN0LmFzc2VydChldmVudC50YXJnZXQgPT09IGVtaXR0ZXIxLCAiQ2FsbGJhY2sgaW52b2tl
ZCB3aXRoIHdyb25nIGV2ZW50IGVtaXR0ZXIuIik7CisgICAgICAgIEluc3BlY3RvclRlc3QuYXNz
ZXJ0KGV2ZW50LmRhdGEgPT09IGRhdGEyLCAiQ2FsbGJhY2sgaW52b2tlZCB3aXRoIHdyb25nIGV2
ZW50IGRhdGEuIik7CisKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIkludm9rZWQgY2FsbGJh
Y2sgZm9yIGJhciBldmVudC4iKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBiYXpDYWxsYmFjayhl
dmVudCkKKyAgICB7CisgICAgICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KHRoaXMgPT09IGNvbnRl
eHQyLCAiQ2FsbGJhY2sgaW52b2tlZCB3aXRoIHdyb25nIHx0aGlzfCBiaW5kaW5nLiIpOworICAg
ICAgICBJbnNwZWN0b3JUZXN0LmFzc2VydChldmVudC50YXJnZXQgPT09IGVtaXR0ZXIyLCAiQ2Fs
bGJhY2sgaW52b2tlZCB3aXRoIHdyb25nIGV2ZW50IGVtaXR0ZXIuIik7CisgICAgICAgIEluc3Bl
Y3RvclRlc3QuYXNzZXJ0KGV2ZW50LmRhdGEgPT09IGRhdGEyLCAiQ2FsbGJhY2sgaW52b2tlZCB3
aXRoIHdyb25nIGV2ZW50IGRhdGEuIik7CisKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIklu
dm9rZWQgY2FsbGJhY2sgZm9yIGJheiBldmVudC4iKTsKKyAgICB9CisKKyAgICAvLyBUZXN0IGZv
ciBtdWx0aXBsZSBmaXJpbmdzIG9mIGxpc3RlbmVycyBpbiB0aGUgc2V0LgorCisgICAgdmFyIGxp
c3RlbmVyU2V0ID0gbmV3IFdlYkluc3BlY3Rvci5FdmVudExpc3RlbmVyU2V0KGNvbnRleHQxKTsK
KyAgICBJbnNwZWN0b3JUZXN0LmFzc2VydCghZW1pdHRlcjEuaGFzRXZlbnRMaXN0ZW5lcnMoRm9v
RXZlbnQpLCAiRW1pdHRlciBzaG91bGQgbm90IGhhdmUgYW55IGxpc3RlbmVycy4iKTsKKyAgICBl
bWl0dGVyMS5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoRm9vRXZlbnQsIGRhdGExKTsgLy8gU2hv
dWxkIG5vdCBmaXJlIGFueXRoaW5nLgorCisgICAgSW5zcGVjdG9yVGVzdC5sb2coIlJlZ2lzdGVy
aW5nIGxpc3RlbmVycy4iKTsKKyAgICBsaXN0ZW5lclNldC5yZWdpc3RlcihlbWl0dGVyMSwgRm9v
RXZlbnQsIGZvb0NhbGxiYWNrKTsKKyAgICBsaXN0ZW5lclNldC5yZWdpc3RlcihlbWl0dGVyMSwg
QmFyRXZlbnQsIGJhckNhbGxiYWNrKTsKKyAgICBsaXN0ZW5lclNldC5yZWdpc3RlcihlbWl0dGVy
MiwgQmF6RXZlbnQsIGJhekNhbGxiYWNrLCBjb250ZXh0Mik7CisgICAgSW5zcGVjdG9yVGVzdC5h
c3NlcnQoIWVtaXR0ZXIxLmhhc0V2ZW50TGlzdGVuZXJzKEZvb0V2ZW50KSwgIkVtaXR0ZXIgc2hv
dWxkIG5vdCBoYXZlIGEgbGlzdGVuZXIuIik7CisgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQoIWVt
aXR0ZXIxLmhhc0V2ZW50TGlzdGVuZXJzKEJhckV2ZW50KSwgIkVtaXR0ZXIgc2hvdWxkIG5vdCBo
YXZlIGEgbGlzdGVuZXIuIik7CisgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQoIWVtaXR0ZXIyLmhh
c0V2ZW50TGlzdGVuZXJzKEJhekV2ZW50KSwgIkVtaXR0ZXIgc2hvdWxkIG5vdCBoYXZlIGEgbGlz
dGVuZXIuIik7CisKKyAgICBJbnNwZWN0b3JUZXN0LmxvZygiSW5zdGFsbGluZyBsaXN0ZW5lcnMu
Iik7CisgICAgbGlzdGVuZXJTZXQuaW5zdGFsbCgpOworICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0
KGVtaXR0ZXIxLmhhc0V2ZW50TGlzdGVuZXJzKEZvb0V2ZW50KSwgIkVtaXR0ZXIgc2hvdWxkIGhh
dmUgYSBsaXN0ZW5lci4iKTsKKyAgICBJbnNwZWN0b3JUZXN0LmFzc2VydChlbWl0dGVyMS5oYXNF
dmVudExpc3RlbmVycyhCYXJFdmVudCksICJFbWl0dGVyIHNob3VsZCBoYXZlIGEgbGlzdGVuZXIu
Iik7CisgICAgSW5zcGVjdG9yVGVzdC5hc3NlcnQoZW1pdHRlcjIuaGFzRXZlbnRMaXN0ZW5lcnMo
QmF6RXZlbnQpLCAiRW1pdHRlciBzaG91bGQgaGF2ZSBhIGxpc3RlbmVyLiIpOworCisgICAgSW5z
cGVjdG9yVGVzdC5sb2coIkRpc3BhdGNoaW5nIGV2ZW50cy4iKTsKKyAgICBlbWl0dGVyMS5kaXNw
YXRjaEV2ZW50VG9MaXN0ZW5lcnMoRm9vRXZlbnQsIGRhdGExKTsgLy8gU2hvdWxkIGZpcmUuCisg
ICAgZW1pdHRlcjEuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKEJhckV2ZW50LCBkYXRhMik7IC8v
IFNob3VsZCBmaXJlLgorICAgIGVtaXR0ZXIyLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhCYXpF
dmVudCwgZGF0YTIpOyAvLyBTaG91bGQgZmlyZS4KKyAgICBJbnNwZWN0b3JUZXN0LmxvZygiVW5p
bnN0YWxsaW5nIGFuZCBkaXNjb25uZWN0aW5nIGxpc3RlbmVycy4iKTsKKyAgICBsaXN0ZW5lclNl
dC51bmluc3RhbGwodHJ1ZSk7CisKKyAgICBJbnNwZWN0b3JUZXN0LmxvZygiUmVnaXN0ZXJpbmcg
bGlzdGVuZXJzLiIpOworICAgIGxpc3RlbmVyU2V0LnJlZ2lzdGVyKGVtaXR0ZXIxLCBGb29FdmVu
dCwgZm9vQ2FsbGJhY2spOworICAgIGxpc3RlbmVyU2V0LnJlZ2lzdGVyKGVtaXR0ZXIxLCBCYXJF
dmVudCwgYmFyQ2FsbGJhY2spOworICAgIGxpc3RlbmVyU2V0LnJlZ2lzdGVyKGVtaXR0ZXIyLCBC
YXpFdmVudCwgYmF6Q2FsbGJhY2ssIGNvbnRleHQyKTsKKworICAgIGxpc3RlbmVyU2V0Lmluc3Rh
bGwoKTsKKyAgICBJbnNwZWN0b3JUZXN0LmxvZygiRGlzcGF0Y2hpbmcgZXZlbnRzLiIpOworICAg
IGVtaXR0ZXIxLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhGb29FdmVudCwgZGF0YTEpOyAvLyBT
aG91bGQgZmlyZS4KKyAgICBlbWl0dGVyMS5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoQmFyRXZl
bnQsIGRhdGEyKTsgLy8gU2hvdWxkIGZpcmUuCisgICAgZW1pdHRlcjIuZGlzcGF0Y2hFdmVudFRv
TGlzdGVuZXJzKEJhekV2ZW50LCBkYXRhMik7IC8vIFNob3VsZCBmaXJlLgorICAgIEluc3BlY3Rv
clRlc3QubG9nKCJVbmluc3RhbGxpbmcgbGlzdGVuZXJzLiIpOworICAgIGxpc3RlbmVyU2V0LnVu
aW5zdGFsbCgpOworCisgICAgSW5zcGVjdG9yVGVzdC5sb2coIkluc3RhbGxpbmcgbGlzdGVuZXJz
LiIpOworICAgIGxpc3RlbmVyU2V0Lmluc3RhbGwoKTsKKyAgICBJbnNwZWN0b3JUZXN0LmxvZygi
RGlzcGF0Y2hpbmcgZXZlbnRzLiIpOworICAgIGVtaXR0ZXIxLmRpc3BhdGNoRXZlbnRUb0xpc3Rl
bmVycyhGb29FdmVudCwgZGF0YTEpOyAvLyBTaG91bGQgZmlyZS4KKyAgICBlbWl0dGVyMS5kaXNw
YXRjaEV2ZW50VG9MaXN0ZW5lcnMoQmFyRXZlbnQsIGRhdGEyKTsgLy8gU2hvdWxkIGZpcmUuCisg
ICAgZW1pdHRlcjIuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKEJhekV2ZW50LCBkYXRhMik7IC8v
IFNob3VsZCBmaXJlLgorCisgICAgSW5zcGVjdG9yVGVzdC5sb2coIlVucmVnaXN0ZXJpbmcgZXZl
cnl0aGluZy4iKTsKKyAgICBsaXN0ZW5lclNldC51bnJlZ2lzdGVyKCk7CisgICAgSW5zcGVjdG9y
VGVzdC5sb2coIkRpc3BhdGNoaW5nIGV2ZW50cy4iKTsKKyAgICBlbWl0dGVyMS5kaXNwYXRjaEV2
ZW50VG9MaXN0ZW5lcnMoRm9vRXZlbnQsIGRhdGExKTsgLy8gU2hvdWxkIG5vdCBmaXJlLgorICAg
IGVtaXR0ZXIxLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhCYXJFdmVudCwgZGF0YTIpOyAvLyBT
aG91bGQgbm90IGZpcmUuCisgICAgZW1pdHRlcjIuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKEJh
ekV2ZW50LCBkYXRhMik7IC8vIFNob3VsZCBub3QgZmlyZS4KKworICAgIEluc3BlY3RvclRlc3Qu
bG9nKCJVbmludGFsbGluZyBhbmQgZGlzY29ubmVjdGluZyBsaXN0ZW5lcnMuIik7CisgICAgbGlz
dGVuZXJTZXQudW5pbnN0YWxsKHRydWUpOworICAgIEluc3BlY3RvclRlc3QubG9nKCJEaXNwYXRj
aGluZyBldmVudHMuIik7CisgICAgZW1pdHRlcjEuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKEZv
b0V2ZW50LCBkYXRhMSk7IC8vIFNob3VsZCBub3QgZmlyZS4KKyAgICBlbWl0dGVyMS5kaXNwYXRj
aEV2ZW50VG9MaXN0ZW5lcnMoQmFyRXZlbnQsIGRhdGEyKTsgLy8gU2hvdWxkIG5vdCBmaXJlLgor
ICAgIGVtaXR0ZXIyLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhCYXpFdmVudCwgZGF0YTIpOyAv
LyBTaG91bGQgbm90IGZpcmUuCisKKyAgICBJbnNwZWN0b3JUZXN0LmFzc2VydCghZW1pdHRlcjEu
aGFzRXZlbnRMaXN0ZW5lcnMoRm9vRXZlbnQpLCAiRW1pdHRlciBzaG91bGQgbm90IGhhdmUgYSBs
aXN0ZW5lci4iKTsKKyAgICBJbnNwZWN0b3JUZXN0LmFzc2VydCghZW1pdHRlcjEuaGFzRXZlbnRM
aXN0ZW5lcnMoQmFyRXZlbnQpLCAiRW1pdHRlciBzaG91bGQgbm90IGhhdmUgYSBsaXN0ZW5lci4i
KTsKKyAgICBJbnNwZWN0b3JUZXN0LmFzc2VydCghZW1pdHRlcjIuaGFzRXZlbnRMaXN0ZW5lcnMo
QmF6RXZlbnQpLCAiRW1pdHRlciBzaG91bGQgbm90IGhhdmUgYSBsaXN0ZW5lci4iKTsKKworICAg
IEluc3BlY3RvclRlc3QuY29tcGxldGVUZXN0KCk7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5IG9ubG9hZD0icnVuVGVzdCgpIj4KKyAgICA8cD5UZXN0aW5nIGJhc2ljIGZ1bmN0aW9uYWxp
dHkgb2YgV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXJTZXQuPC9wPgorPC9ib2R5PgorPC9odG1s
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2V2ZW50LWxpc3RlbmVyLmh0bWwg
Yi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZXZlbnQtbGlzdGVuZXIuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4y
Mzg1NzFlYWJmNDk4YzllMjg1ZGE1N2NiY2QxODI5NzNmNzAxM2JmCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2V2ZW50LWxpc3RlbmVyLmh0bWwKQEAgLTAsMCArMSw5
MyBAQAorPCFkb2N0eXBlIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCB0eXBlPSJ0ZXh0
L2phdmFzY3JpcHQiIHNyYz0iLi4vaHR0cC90ZXN0cy9pbnNwZWN0b3IvaW5zcGVjdG9yLXRlc3Qu
anMiPjwvc2NyaXB0PgorPHNjcmlwdD4KK2Z1bmN0aW9uIHRlc3QoKQoreworICAgIGNvbnN0IEth
Ym9vbUV2ZW50ID0gImthYm9vbSI7CisgICAgdmFyIGVtaXR0ZXIgPSBuZXcgV2ViSW5zcGVjdG9y
Lk9iamVjdCgpOworICAgIHZhciBjb250ZXh0ID0gbmV3IFdlYkluc3BlY3Rvci5PYmplY3QoKTsK
KyAgICB2YXIgZGF0YSA9IFsxLCAyLCAzXTsKKworICAgIGZ1bmN0aW9uIGthYm9vbUNhbGxiYWNr
KGV2ZW50KSB7CisgICAgICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0KHRoaXMgPT09IGNvbnRleHQs
ICJDYWxsYmFjayBpbnZva2VkIHdpdGggd3JvbmcgfHRoaXN8IGJpbmRpbmcuIik7CisgICAgICAg
IEluc3BlY3RvclRlc3QuYXNzZXJ0KGV2ZW50LnRhcmdldCA9PT0gZW1pdHRlciwgIkNhbGxiYWNr
IGludm9rZWQgd2l0aCB3cm9uZyBldmVudCBlbWl0dGVyLiIpOworICAgICAgICBJbnNwZWN0b3JU
ZXN0LmFzc2VydChldmVudC5kYXRhID09PSBkYXRhLCAiQ2FsbGJhY2sgaW52b2tlZCB3aXRoIHdy
b25nIGV2ZW50IGRhdGEuIik7CisKKyAgICAgICAgSW5zcGVjdG9yVGVzdC5sb2coIkludm9rZWQg
Y2FsbGJhY2sgZm9yIGthYm9vbSBldmVudC4iKTsKKyAgICB9CisKKyAgICAvLyBUZXN0IGZvciBt
dWx0aXBsZSBmaXJpbmdzIG9mIHRoZSBsaXN0ZW5lci4KKworICAgIHZhciBsaXN0ZW5lciA9IG5l
dyBXZWJJbnNwZWN0b3IuRXZlbnRMaXN0ZW5lcihjb250ZXh0KTsKKyAgICBJbnNwZWN0b3JUZXN0
LmFzc2VydCghZW1pdHRlci5oYXNFdmVudExpc3RlbmVycyhLYWJvb21FdmVudCksICJFbWl0dGVy
IHNob3VsZCBub3QgaGF2ZSBhbnkgbGlzdGVuZXJzLiIpOworICAgIGVtaXR0ZXIuZGlzcGF0Y2hF
dmVudFRvTGlzdGVuZXJzKEthYm9vbUV2ZW50LCBkYXRhKTsgLy8gU2hvdWxkIG5vdCBmaXJlIGFu
eXRoaW5nLgorCisgICAgSW5zcGVjdG9yVGVzdC5sb2coIkNvbm5lY3RpbmcgdGhlIGxpc3RlbmVy
LiIpOworICAgIGxpc3RlbmVyLmNvbm5lY3QoZW1pdHRlciwgS2Fib29tRXZlbnQsIGthYm9vbUNh
bGxiYWNrKTsKKyAgICBJbnNwZWN0b3JUZXN0LmFzc2VydChlbWl0dGVyLmhhc0V2ZW50TGlzdGVu
ZXJzKEthYm9vbUV2ZW50KSwgIkVtaXR0ZXIgc2hvdWxkIGhhdmUgYSBsaXN0ZW5lci4iKTsKKyAg
ICBlbWl0dGVyLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhLYWJvb21FdmVudCwgZGF0YSk7IC8v
IFNob3VsZCBmaXJlLgorICAgIGVtaXR0ZXIuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKEthYm9v
bUV2ZW50LCBkYXRhKTsgLy8gU2hvdWxkIGZpcmUuCisgICAgSW5zcGVjdG9yVGVzdC5sb2coIkRp
c2Nvbm5lY3RpbmcgdGhlIGxpc3RlbmVyLiIpOworICAgIGxpc3RlbmVyLmRpc2Nvbm5lY3QoKTsK
KworICAgIGVtaXR0ZXIuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKEthYm9vbUV2ZW50LCBkYXRh
KTsgLy8gU2hvdWxkIG5vdCBmaXJlIGFueXRoaW5nLgorICAgIEluc3BlY3RvclRlc3QuYXNzZXJ0
KCFlbWl0dGVyLmhhc0V2ZW50TGlzdGVuZXJzKEthYm9vbUV2ZW50KSwgIkVtaXR0ZXIgc2hvdWxk
IG5vdCBoYXZlIGFueSBsaXN0ZW5lcnMuIik7CisKKyAgICAvLyBUZXN0IHJlY29ubmVjdGlvbi4K
KworICAgIEluc3BlY3RvclRlc3QubG9nKCJDb25uZWN0aW5nIHRoZSBsaXN0ZW5lci4iKTsKKyAg
ICBsaXN0ZW5lci5jb25uZWN0KGVtaXR0ZXIsIEthYm9vbUV2ZW50LCBrYWJvb21DYWxsYmFjayk7
CisgICAgZW1pdHRlci5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoS2Fib29tRXZlbnQsIGRhdGEp
OyAvLyBTaG91bGQgZmlyZS4KKyAgICBJbnNwZWN0b3JUZXN0LmxvZygiRGlzY29ubmVjdGluZyB0
aGUgbGlzdGVuZXIuIik7CisgICAgbGlzdGVuZXIuZGlzY29ubmVjdCgpOworCisgICAgLy8gVGVz
dCB1bnVzZWQgbGlzdGVuZXIuCisKKyAgICBJbnNwZWN0b3JUZXN0LmxvZygiQ29ubmVjdGluZyB0
aGUgbGlzdGVuZXIuIik7CisgICAgbGlzdGVuZXIuY29ubmVjdChlbWl0dGVyLCBLYWJvb21FdmVu
dCwga2Fib29tQ2FsbGJhY2spOworICAgIEluc3BlY3RvclRlc3QubG9nKCJEaXNjb25uZWN0aW5n
IHRoZSBsaXN0ZW5lci4iKTsKKyAgICBsaXN0ZW5lci5kaXNjb25uZWN0KCk7CisKKyAgICAvLyBU
ZXN0IGZvciBzaW5nbGUgZmlyaW5nIG9mIHRoZSBsaXN0ZW5lci4KKworICAgIHZhciBzaW5nbGVM
aXN0ZW5lciA9IG5ldyBXZWJJbnNwZWN0b3IuRXZlbnRMaXN0ZW5lcihjb250ZXh0LCB0cnVlKTsK
KyAgICBJbnNwZWN0b3JUZXN0LmFzc2VydCghZW1pdHRlci5oYXNFdmVudExpc3RlbmVycyhLYWJv
b21FdmVudCksICJFbWl0dGVyIHNob3VsZCBub3QgaGF2ZSBhbnkgbGlzdGVuZXJzLiIpOworICAg
IGVtaXR0ZXIuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKEthYm9vbUV2ZW50LCBkYXRhKTsgLy8g
U2hvdWxkIG5vdCBmaXJlIGFueXRoaW5nLgorCisgICAgSW5zcGVjdG9yVGVzdC5sb2coIkNvbm5l
Y3RpbmcgdGhlIHNpbmdsZS1maXJlIGxpc3RlbmVyLiIpOworICAgIHNpbmdsZUxpc3RlbmVyLmNv
bm5lY3QoZW1pdHRlciwgS2Fib29tRXZlbnQsIGthYm9vbUNhbGxiYWNrKTsKKyAgICBJbnNwZWN0
b3JUZXN0LmFzc2VydChlbWl0dGVyLmhhc0V2ZW50TGlzdGVuZXJzKEthYm9vbUV2ZW50KSwgIkVt
aXR0ZXIgc2hvdWxkIGhhdmUgYSBsaXN0ZW5lci4iKTsKKyAgICBlbWl0dGVyLmRpc3BhdGNoRXZl
bnRUb0xpc3RlbmVycyhLYWJvb21FdmVudCwgZGF0YSk7IC8vIFNob3VsZCBmaXJlLgorICAgIElu
c3BlY3RvclRlc3QuYXNzZXJ0KCFlbWl0dGVyLmhhc0V2ZW50TGlzdGVuZXJzKEthYm9vbUV2ZW50
KSwgIkVtaXR0ZXIgc2hvdWxkIG5vdCBoYXZlIGFueSBsaXN0ZW5lcnMuIik7CisgICAgZW1pdHRl
ci5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoS2Fib29tRXZlbnQsIGRhdGEpOyAvLyBTaG91bGQg
bm90IGZpcmUuCisgICAgSW5zcGVjdG9yVGVzdC5sb2coIkRpc2Nvbm5lY3RpbmcgdGhlIHNpbmds
ZS1maXJlIGxpc3RlbmVyLiIpOworICAgIHNpbmdsZUxpc3RlbmVyLmRpc2Nvbm5lY3QoKTsgLy8g
U2hvdWxkIGNhdXNlIGFuIGVycm9yLgorICAgIGVtaXR0ZXIuZGlzcGF0Y2hFdmVudFRvTGlzdGVu
ZXJzKEthYm9vbUV2ZW50LCBkYXRhKTsgLy8gU2hvdWxkIG5vdCBmaXJlLgorCisgICAgLy8gVGVz
dCBmb3IgdmFyaW91cyBlcnJvciBjYXNlcyBhbmQgYWJ1c2UuCisKKyAgICB2YXIgYmFkTGlzdGVu
ZXIgPSBuZXcgV2ViSW5zcGVjdG9yLkV2ZW50TGlzdGVuZXIoY29udGV4dCk7CisgICAgYmFkTGlz
dGVuZXIuY29ubmVjdChkYXRhLCBkYXRhLCBkYXRhKTsgLy8gU2hvdWxkIGNvbXBsYWluIGFib3V0
IG5vbi1jYWxsYWJsZSBjYWxsYmFjay4KKyAgICBiYWRMaXN0ZW5lci5jb25uZWN0KG51bGwsIEth
Ym9vbUV2ZW50LCBrYWJvb21DYWxsYmFjayk7IC8vIFNob3VsZCBjb21wbGFpbiBhYm91dCBub24t
Y2FsbGFibGUgY2FsbGJhY2suCisgICAgYmFkTGlzdGVuZXIuY29ubmVjdChlbWl0dGVyLCBLYWJv
b21FdmVudCwgbnVsbCk7IC8vIFNob3VsZCBjb21wbGFpbiBhYm91dCBub24tY2FsbGFibGUgY2Fs
bGJhY2suCisgICAgYmFkTGlzdGVuZXIuY29ubmVjdChlbWl0dGVyLCBudWxsLCBrYWJvb21DYWxs
YmFjayk7IC8vIFNob3VsZCBjb21wbGFpbiBhYm91dCBudWxsIGV2ZW50LgorCisgICAgdmFyIGJh
ZExpc3RlbmVyMiA9IG5ldyBXZWJJbnNwZWN0b3IuRXZlbnRMaXN0ZW5lcihjb250ZXh0KTsKKyAg
ICBiYWRMaXN0ZW5lcjIuZGlzY29ubmVjdCgpOyAvLyBTaG91bGQgY29tcGxhaW4gYWJvdXQgYWxy
ZWFkeSBkaXNjb25uZWN0ZWQuCisgICAgYmFkTGlzdGVuZXIyLmNvbm5lY3QoZW1pdHRlciwgS2Fi
b29tRXZlbnQsIGthYm9vbUNhbGxiYWNrKTsKKyAgICBiYWRMaXN0ZW5lcjIuY29ubmVjdChlbWl0
dGVyLCBLYWJvb21FdmVudCwga2Fib29tQ2FsbGJhY2spOyAvLyBTaG91bGQgY29tcGxhaW4gYWJv
dXQgYWxyZWFkeSBjb25uZWN0ZWQuCisgICAgZW1pdHRlci5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5l
cnMoS2Fib29tRXZlbnQsIGRhdGEpOyAvLyBTaG91bGQgZmlyZS4KKyAgICBiYWRMaXN0ZW5lcjIu
Y29ubmVjdChlbWl0dGVyLCBLYWJvb21FdmVudCwga2Fib29tQ2FsbGJhY2spOyAvLyBTaG91bGQg
Y29tcGxhaW4gYWJvdXQgYWxyZWFkeSBjb25uZWN0ZWQuCisgICAgYmFkTGlzdGVuZXIyLmRpc2Nv
bm5lY3QoKTsKKyAgICBiYWRMaXN0ZW5lcjIuZGlzY29ubmVjdCgpOyAvLyBTaG91bGQgY29tcGxh
aW4gYWJvdXQgYWxyZWFkeSBkaXNjb25uZWN0ZWQuCisKKyAgICBJbnNwZWN0b3JUZXN0LmNvbXBs
ZXRlVGVzdCgpOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3Qo
KSI+CisgICAgPHA+VGVzdGluZyBiYXNpYyBmdW5jdGlvbmFsaXR5IG9mIFdlYkluc3BlY3Rvci5F
dmVudExpc3RlbmVyLjwvcD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="260917"
          type_id="1"
          status="+"
          setter="timothy"
    />
    <flag name="commit-queue"
          id="260918"
          type_id="3"
          status="-"
          setter="burg"
    />
          </attachment>
      

    </bug>

</bugzilla>