<?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>202424</bug_id>
          
          <creation_ts>2019-10-01 12:37:57 -0700</creation_ts>
          <short_desc>[ews] Add API endpoint to retry failed builds for a patch</short_desc>
          <delta_ts>2019-10-02 13:08:19 -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>Tools / Tests</component>
          <version>Other</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=196599</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Aakash Jain">aakash_jain</reporter>
          <assigned_to name="Aakash Jain">aakash_jain</assigned_to>
          <cc>aakash_jain</cc>
    
    <cc>ap</cc>
    
    <cc>jbedard</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1575651</commentid>
    <comment_count>0</comment_count>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2019-10-01 12:37:57 -0700</bug_when>
    <thetext>Add API endpoint to retry failed builds for a patch. This would allow us to implement the functionality required in Bug 196599: &apos;EWS should have a way to retry a patch&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575699</commentid>
    <comment_count>1</comment_count>
      <attachid>379942</attachid>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2019-10-01 13:27:54 -0700</bug_when>
    <thetext>Created attachment 379942
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575734</commentid>
    <comment_count>2</comment_count>
      <attachid>379942</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-10-01 14:18:43 -0700</bug_when>
    <thetext>Comment on attachment 379942
Patch

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

&gt; Tools/BuildSlaveSupport/ews-app/ews/views/retrypatch.py:48
&gt; +        except:

Can we be be more specific about the kind of errors we&apos;re catching here? At the moment, we&apos;re catching everything.

&gt; Tools/BuildSlaveSupport/ews-app/ews/views/retrypatch.py:51
&gt; +        builds_to_retry = StatusBubble().find_failed_builds_for_patch(patch_id)

I understand the logic here, I just question it&apos;s wisdom. We&apos;re automatically retrying only the builds which failed, not the successful ones. Particularly with layout tests, I&apos;m not sure this is a good idea....imagine a case where someone lands a patch which fixes your patch on iOS, but breaks it on MacOS.

&gt; Tools/BuildSlaveSupport/ews-app/ews/views/retrypatch.py:58
&gt; +            rc = Buildbot.retry_build(build.builder_id, build.number)

I don&apos;t think rc is very useful here.

&gt; Tools/BuildSlaveSupport/ews-app/ews/views/statusbubble.py:212
&gt; +    def find_failed_builds_for_patch(self, patch_id):

What are our plans to test this function? I feel like we should be able to test this function now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575949</commentid>
    <comment_count>3</comment_count>
      <attachid>379942</attachid>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2019-10-02 05:14:25 -0700</bug_when>
    <thetext>Comment on attachment 379942
Patch

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

&gt;&gt; Tools/BuildSlaveSupport/ews-app/ews/views/retrypatch.py:48
&gt;&gt; +        except:
&gt; 
&gt; Can we be be more specific about the kind of errors we&apos;re catching here? At the moment, we&apos;re catching everything.

This is to catch any errors in converting patch_id to integer. It can be ValueError(when patch_id is not a integer), or TypeError (when patch_id is missing).

I agree that it&apos;s good to catch specific exceptions. However, in this case being generic also seems fine, since if we can&apos;t get the patch_id for any reason, there is no point in continuing or even crashing.

&gt;&gt; Tools/BuildSlaveSupport/ews-app/ews/views/retrypatch.py:51
&gt;&gt; +        builds_to_retry = StatusBubble().find_failed_builds_for_patch(patch_id)
&gt; 
&gt; I understand the logic here, I just question it&apos;s wisdom. We&apos;re automatically retrying only the builds which failed, not the successful ones. Particularly with layout tests, I&apos;m not sure this is a good idea....imagine a case where someone lands a patch which fixes your patch on iOS, but breaks it on MacOS.

This one is not an automatic retry. This is a manual retry, done by pressing a button by engineers. (See #4 in https://lists.webkit.org/pipermail/webkit-dev/2019-September/030804.html)

Note that EWS is run on every patch for every configuration by default. If some EWS bubbles are red for a given patch, and any engineer believes that EWS is incorrect (maybe because of flaky tests, infrastructure issue, patch being part of patch-series which was processed too soon etc.), then he/she can press the &apos;Retry failed builds&apos; button to retry those builds.

A new uploaded patch (e.g.: to fix previous failures) is always processed on every EWS queue by default.

&gt;&gt; Tools/BuildSlaveSupport/ews-app/ews/views/retrypatch.py:58
&gt;&gt; +            rc = Buildbot.retry_build(build.builder_id, build.number)
&gt; 
&gt; I don&apos;t think rc is very useful here.

The other option I considered was following (but didn&apos;t find it as readable as this one). Let me know if you prefer this.

if not Buildbot.retry_build(build.builder_id, build.number):

&gt;&gt; Tools/BuildSlaveSupport/ews-app/ews/views/statusbubble.py:212
&gt;&gt; +    def find_failed_builds_for_patch(self, patch_id):
&gt; 
&gt; What are our plans to test this function? I feel like we should be able to test this function now.

I tested in manually with various scenarios (using http://ews.webkit-uat.org/retry/). We don&apos;t have unit-tests for django app yet. I will add unit-tests separately in https://bugs.webkit.org/show_bug.cgi?id=202452</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575975</commentid>
    <comment_count>4</comment_count>
      <attachid>379942</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-10-02 07:38:14 -0700</bug_when>
    <thetext>Comment on attachment 379942
Patch

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

&gt;&gt;&gt; Tools/BuildSlaveSupport/ews-app/ews/views/retrypatch.py:48
&gt;&gt;&gt; +        except:
&gt;&gt; 
&gt;&gt; Can we be be more specific about the kind of errors we&apos;re catching here? At the moment, we&apos;re catching everything.
&gt; 
&gt; This is to catch any errors in converting patch_id to integer. It can be ValueError(when patch_id is not a integer), or TypeError (when patch_id is missing).
&gt; 
&gt; I agree that it&apos;s good to catch specific exceptions. However, in this case being generic also seems fine, since if we can&apos;t get the patch_id for any reason, there is no point in continuing or even crashing.

I think the bigger problem is that since Python is interpreted, this will also catch syntax errors. In that case, the response will not be indicative of the actual error.

&gt;&gt;&gt; Tools/BuildSlaveSupport/ews-app/ews/views/retrypatch.py:51
&gt;&gt;&gt; +        builds_to_retry = StatusBubble().find_failed_builds_for_patch(patch_id)
&gt;&gt; 
&gt;&gt; I understand the logic here, I just question it&apos;s wisdom. We&apos;re automatically retrying only the builds which failed, not the successful ones. Particularly with layout tests, I&apos;m not sure this is a good idea....imagine a case where someone lands a patch which fixes your patch on iOS, but breaks it on MacOS.
&gt; 
&gt; This one is not an automatic retry. This is a manual retry, done by pressing a button by engineers. (See #4 in https://lists.webkit.org/pipermail/webkit-dev/2019-September/030804.html)
&gt; 
&gt; Note that EWS is run on every patch for every configuration by default. If some EWS bubbles are red for a given patch, and any engineer believes that EWS is incorrect (maybe because of flaky tests, infrastructure issue, patch being part of patch-series which was processed too soon etc.), then he/she can press the &apos;Retry failed builds&apos; button to retry those builds.
&gt; 
&gt; A new uploaded patch (e.g.: to fix previous failures) is always processed on every EWS queue by default.

I&apos;m ok with this as is, but we should keep an eye on it. I can see it potentially being a problem.

&gt;&gt;&gt; Tools/BuildSlaveSupport/ews-app/ews/views/retrypatch.py:58
&gt;&gt;&gt; +            rc = Buildbot.retry_build(build.builder_id, build.number)
&gt;&gt; 
&gt;&gt; I don&apos;t think rc is very useful here.
&gt; 
&gt; The other option I considered was following (but didn&apos;t find it as readable as this one). Let me know if you prefer this.
&gt; 
&gt; if not Buildbot.retry_build(build.builder_id, build.number):

I would prefer this other option, but not particularly strongly. (Also note that the WebKit Style guide would say to use &apos;not rc&apos; instead of &apos;rc != True&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1576088</commentid>
    <comment_count>5</comment_count>
      <attachid>380043</attachid>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2019-10-02 11:37:29 -0700</bug_when>
    <thetext>Created attachment 380043
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1576124</commentid>
    <comment_count>6</comment_count>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2019-10-02 13:07:41 -0700</bug_when>
    <thetext>Committed r250623: &lt;https://trac.webkit.org/changeset/250623&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1576126</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-10-02 13:08:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/55921240&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379942</attachid>
            <date>2019-10-01 13:27:54 -0700</date>
            <delta_ts>2019-10-02 11:37:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202424-20191001162752.patch</filename>
            <type>text/plain</type>
            <size>7221</size>
            <attacher name="Aakash Jain">aakash_jain</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI1MDU3NikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDIwIEBACisyMDE5LTEwLTAxICBBYWthc2ggSmFpbiAgPGFha2FzaF9qYWluQGFwcGxlLmNv
bT4KKworICAgICAgICBbZXdzXSBBZGQgQVBJIGVuZHBvaW50IHRvIHJldHJ5IGZhaWxlZCBidWls
ZHMgZm9yIGEgcGF0Y2gKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIwMjQyNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogQnVpbGRTbGF2ZVN1cHBvcnQvZXdzLWFwcC9ld3MvdXJscy5weTogQWRkZWQgdXJs
IG1hcHBpbmcgZm9yIC9yZXRyeS4KKyAgICAgICAgKiBCdWlsZFNsYXZlU3VwcG9ydC9ld3MtYXBw
L2V3cy92aWV3cy9yZXRyeXBhdGNoLnB5OiBBZGRlZC4KKyAgICAgICAgKFJldHJ5UGF0Y2guZ2V0
KTogRGlzcGxheSB0aGUgd2ViLWZvcm0gdG8gcmV0cnkgdGhlIHBhdGNoLiBSZXRyeSBidXR0b24g
d2hpY2ggd2lsbCBiZSBhZGRlZCBzb29uIHdpbGwgCisgICAgICAgIHVzZSB0aGlzIGZvcm0uCisg
ICAgICAgIChSZXRyeVBhdGNoLnBvc3QpOiBIYW5kbGUgdGhlIHBvc3QgcmVxdWVzdCBhbmQgcmV0
cnkgdGhlIHBhdGNoLgorICAgICAgICAqIEJ1aWxkU2xhdmVTdXBwb3J0L2V3cy1hcHAvZXdzL3Zp
ZXdzL3N0YXR1c2J1YmJsZS5weToKKyAgICAgICAgKFN0YXR1c0J1YmJsZS5maW5kX2ZhaWxlZF9i
dWlsZHNfZm9yX3BhdGNoKTogTWV0aG9kIHRvIGZpbmQgZmFpbGVkIGJ1aWxkcyBmb3IgYSBwYXRj
aC4KKyAgICAgICAgKiBCdWlsZFNsYXZlU3VwcG9ydC9ld3MtYXBwL2V3cy90ZW1wbGF0ZXMvcmV0
cnkuaHRtbDogQWRkZWQsIHNpbWlsYXIgdG8gc3VibWl0dG9ld3MuaHRtbC4gVGhpcworICAgICAg
ICBhbGxvd3MgdG8gcmV0cnkgYSBwYXRjaCB0aHJvdWdoIGEgd2ViLWZvcm0gYXMgd2VsbC4KKwog
MjAxOS0xMC0wMSAgQWFrYXNoIEphaW4gIDxhYWthc2hfamFpbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgRm9sbG93LXVwIGZpeCB0byByMjUwNTcyIHRvIGZpeCBhIHR5cG8uCkluZGV4OiBUb29scy9C
dWlsZFNsYXZlU3VwcG9ydC9ld3MtYXBwL2V3cy91cmxzLnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L0J1aWxkU2xhdmVTdXBwb3J0L2V3cy1hcHAvZXdzL3VybHMucHkJKHJldmlzaW9uIDI1MDU3NikK
KysrIFRvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2V3cy1hcHAvZXdzL3VybHMucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTI1LDYgKzI1LDcgQEAgZnJvbSBkamFuZ28uY29uZi51cmxzIGltcG9ydCB1cmwK
IGZyb20gZXdzLnZpZXdzLmluZGV4IGltcG9ydCBJbmRleAogZnJvbSBld3Mudmlld3MucmVzdWx0
cyBpbXBvcnQgUmVzdWx0cwogZnJvbSBld3Mudmlld3Muc3RhdHVzYnViYmxlIGltcG9ydCBTdGF0
dXNCdWJibGUKK2Zyb20gZXdzLnZpZXdzLnJldHJ5cGF0Y2ggaW1wb3J0IFJldHJ5UGF0Y2gKIGZy
b20gZXdzLnZpZXdzLnN1Ym1pdHRvZXdzIGltcG9ydCBTdWJtaXRUb0VXUwogCiBhcHBfbmFtZSA9
ICdld3MnCkBAIC0zNSw2ICszNiw4IEBAIHVybHBhdHRlcm5zID0gWwogICAgIHVybChyJ15yZXN1
bHRzLyQnLCBSZXN1bHRzLmFzX3ZpZXcoKSwgbmFtZT0ncmVzdWx0cycpLAogICAgICMgZXg6IC9z
dGF0dXMtYnViYmxlLzUKICAgICB1cmwocidec3RhdHVzLWJ1YmJsZS8oP1A8cGF0Y2hfaWQ+WzAt
OV0rKS8kJywgU3RhdHVzQnViYmxlLmFzX3ZpZXcoKSwgbmFtZT0nc3RhdHVzYnViYmxlJyksCisg
ICAgIyBleDogL3JldHJ5LworICAgIHVybChyJ15yZXRyeS8kJywgUmV0cnlQYXRjaC5hc192aWV3
KCksIG5hbWU9J3JldHJ5cGF0Y2gnKSwKICAgICAjIGV4OiAvc3VibWl0LXRvLWV3cy8KICAgICB1
cmwocidec3VibWl0LXRvLWV3cy8kJywgU3VibWl0VG9FV1MuYXNfdmlldygpLCBuYW1lPSdzdWJt
aXR0b2V3cycpLAogXQpJbmRleDogVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvZXdzLWFwcC9ld3Mv
dGVtcGxhdGVzL3JldHJ5Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQnVpbGRTbGF2ZVN1cHBv
cnQvZXdzLWFwcC9ld3MvdGVtcGxhdGVzL3JldHJ5Lmh0bWwJKG5vbmV4aXN0ZW50KQorKysgVG9v
bHMvQnVpbGRTbGF2ZVN1cHBvcnQvZXdzLWFwcC9ld3MvdGVtcGxhdGVzL3JldHJ5Lmh0bWwJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwzIEBACis8Zm9ybSBuYW1lPSJyZXRyeSIgbWV0aG9kPSJQ
T1NUIj57JSBjc3JmX3Rva2VuICV9CitBdHRhY2htZW50IGlkIG9mIHBhdGNoIHRvIHJldHJ5OiA8
aW5wdXQgbmFtZT0icGF0Y2hfaWQiPjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJSZXRyeSBm
YWlsZWQgYnVpbGRzIj4KKzwvZm9ybT4KSW5kZXg6IFRvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2V3
cy1hcHAvZXdzL3ZpZXdzL3JldHJ5cGF0Y2gucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQnVpbGRT
bGF2ZVN1cHBvcnQvZXdzLWFwcC9ld3Mvdmlld3MvcmV0cnlwYXRjaC5weQkobm9uZXhpc3RlbnQp
CisrKyBUb29scy9CdWlsZFNsYXZlU3VwcG9ydC9ld3MtYXBwL2V3cy92aWV3cy9yZXRyeXBhdGNo
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjcgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB1bmljb2RlX2xpdGVy
YWxzCisKK2ltcG9ydCBsb2dnaW5nCisKK2Zyb20gZGphbmdvLmh0dHAgaW1wb3J0IEh0dHBSZXNw
b25zZQorZnJvbSBkamFuZ28uc2hvcnRjdXRzIGltcG9ydCByZW5kZXIKK2Zyb20gZGphbmdvLnZp
ZXdzIGltcG9ydCBWaWV3Citmcm9tIGRqYW5nby52aWV3cy5kZWNvcmF0b3JzLmNsaWNramFja2lu
ZyBpbXBvcnQgeGZyYW1lX29wdGlvbnNfZXhlbXB0CisKK2Zyb20gZXdzLmNvbW1vbi5idWlsZGJv
dCBpbXBvcnQgQnVpbGRib3QKK2Zyb20gZXdzLm1vZGVscy5wYXRjaCBpbXBvcnQgUGF0Y2gKK2Zy
b20gZXdzLnZpZXdzLnN0YXR1c2J1YmJsZSBpbXBvcnQgU3RhdHVzQnViYmxlCisKK19sb2cgPSBs
b2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKKworCitjbGFzcyBSZXRyeVBhdGNoKFZpZXcpOgor
ICAgIGRlZiBnZXQoc2VsZiwgcmVxdWVzdCk6CisgICAgICAgIHJldHVybiByZW5kZXIocmVxdWVz
dCwgJ3JldHJ5Lmh0bWwnLCB7fSkKKworICAgIEB4ZnJhbWVfb3B0aW9uc19leGVtcHQKKyAgICBk
ZWYgcG9zdChzZWxmLCByZXF1ZXN0KToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGF0Y2hf
aWQgPSByZXF1ZXN0LlBPU1QuZ2V0KCdwYXRjaF9pZCcpCisgICAgICAgICAgICBwYXRjaF9pZCA9
IGludChwYXRjaF9pZCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgcmV0dXJuIEh0dHBS
ZXNwb25zZSgnSW52YWxpZCBwYXRjaCBpZDoge30nLmZvcm1hdChyZXF1ZXN0LlBPU1QuZ2V0KCdw
YXRjaF9pZCcpKSkKKworICAgICAgICBidWlsZHNfdG9fcmV0cnkgPSBTdGF0dXNCdWJibGUoKS5m
aW5kX2ZhaWxlZF9idWlsZHNfZm9yX3BhdGNoKHBhdGNoX2lkKQorICAgICAgICBfbG9nLmluZm8o
J1JldHJ5aW5nIHBhdGNoOiB7fS4gRmFpbGVkIGJ1aWxkczoge30nLmZvcm1hdChwYXRjaF9pZCwg
YnVpbGRzX3RvX3JldHJ5KSkKKyAgICAgICAgaWYgbm90IGJ1aWxkc190b19yZXRyeToKKyAgICAg
ICAgICAgIHJldHVybiBIdHRwUmVzcG9uc2UoJ05vIHJlY2VudCBmYWlsZWQgYnVpbGQocykgZm91
bmQgZm9yIHBhdGNoIHt9LicuZm9ybWF0KHBhdGNoX2lkKSkKKworICAgICAgICBmYWlsZWRfdG9f
cmV0cnlfYnVpbGRzID0gW10KKyAgICAgICAgZm9yIGJ1aWxkIGluIGJ1aWxkc190b19yZXRyeToK
KyAgICAgICAgICAgIHJjID0gQnVpbGRib3QucmV0cnlfYnVpbGQoYnVpbGQuYnVpbGRlcl9pZCwg
YnVpbGQubnVtYmVyKQorICAgICAgICAgICAgaWYgcmMgIT0gVHJ1ZToKKyAgICAgICAgICAgICAg
ICBmYWlsZWRfdG9fcmV0cnlfYnVpbGRzLmFwcGVuZChidWlsZCkKKworICAgICAgICBpZiBsZW4o
ZmFpbGVkX3RvX3JldHJ5X2J1aWxkcykgPiAwOgorICAgICAgICAgICAgbWVzc2FnZSA9ICdGYWls
ZWQgdG8gcmV0cnkge30gYnVpbGQocykgZm9yIHBhdGNoIHt9LicuZm9ybWF0KGxlbihmYWlsZWRf
dG9fcmV0cnlfYnVpbGRzKSwgcGF0Y2hfaWQpCisgICAgICAgICAgICBtZXNzYWdlICs9ICcgUGxl
YXNlIGNvbnRhY3QgYWRtaW5Ad2Via2l0Lm9yZyBpZiB0aGUgcHJvYmxlbSBwZXJzaXN0LicKKyAg
ICAgICAgICAgIF9sb2cud2FybihtZXNzYWdlKQorICAgICAgICAgICAgcmV0dXJuIEh0dHBSZXNw
b25zZShtZXNzYWdlKQorICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNlKCdTdWJtaXR0ZWQge30g
YnVpbGQocykgdG8gRVdTIGZvciByZXRyeSBmb3IgcGF0Y2gge30uJy5mb3JtYXQobGVuKGJ1aWxk
c190b19yZXRyeSksIHBhdGNoX2lkKSkKSW5kZXg6IFRvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2V3
cy1hcHAvZXdzL3ZpZXdzL3N0YXR1c2J1YmJsZS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9CdWls
ZFNsYXZlU3VwcG9ydC9ld3MtYXBwL2V3cy92aWV3cy9zdGF0dXNidWJibGUucHkJKHJldmlzaW9u
IDI1MDU3NikKKysrIFRvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2V3cy1hcHAvZXdzL3ZpZXdzL3N0
YXR1c2J1YmJsZS5weQkod29ya2luZyBjb3B5KQpAQCAtMjA5LDYgKzIwOSwxOSBAQCBjbGFzcyBT
dGF0dXNCdWJibGUoVmlldyk6CiAgICAgZGVmIGdldF9idWlsZHNfZm9yX3F1ZXVlKHNlbGYsIHBh
dGNoLCBxdWV1ZSk6CiAgICAgICAgIHJldHVybiBbYnVpbGQgZm9yIGJ1aWxkIGluIHBhdGNoLmJ1
aWxkX3NldC5hbGwoKSBpZiBidWlsZC5idWlsZGVyX2Rpc3BsYXlfbmFtZSA9PSBxdWV1ZV0KIAor
ICAgIGRlZiBmaW5kX2ZhaWxlZF9idWlsZHNfZm9yX3BhdGNoKHNlbGYsIHBhdGNoX2lkKToKKyAg
ICAgICAgcGF0Y2ggPSBQYXRjaC5nZXRfcGF0Y2gocGF0Y2hfaWQpCisgICAgICAgIGlmIG5vdCBw
YXRjaDoKKyAgICAgICAgICAgIHJldHVybiBbXQorICAgICAgICBmYWlsZWRfYnVpbGRzID0gW10K
KyAgICAgICAgZm9yIHF1ZXVlIGluIFN0YXR1c0J1YmJsZS5BTExfUVVFVUVTOgorICAgICAgICAg
ICAgYnVpbGQsIF8gPSBzZWxmLmdldF9sYXRlc3RfYnVpbGRfZm9yX3F1ZXVlKHBhdGNoLCBxdWV1
ZSkKKyAgICAgICAgICAgIGlmIG5vdCBidWlsZDoKKyAgICAgICAgICAgICAgICBjb250aW51ZQor
ICAgICAgICAgICAgaWYgYnVpbGQucmVzdWx0IGluIChCdWlsZGJvdC5GQUlMVVJFLCBCdWlsZGJv
dC5FWENFUFRJT04sIEJ1aWxkYm90LkNBTkNFTExFRCk6CisgICAgICAgICAgICAgICAgZmFpbGVk
X2J1aWxkcy5hcHBlbmQoYnVpbGQpCisgICAgICAgIHJldHVybiBmYWlsZWRfYnVpbGRzCisKICAg
ICBkZWYgX3Nob3VsZF9zaG93X2J1YmJsZV9mb3JfYnVpbGQoc2VsZiwgYnVpbGQpOgogICAgICAg
ICBpZiBidWlsZCBhbmQgYnVpbGQucmVzdWx0ID09IEJ1aWxkYm90LlNLSVBQRUQgYW5kIHJlLnNl
YXJjaChyJ1BhdGNoIC4qIGRvZXNuXCd0IGhhdmUgcmVsZXZhbnQgY2hhbmdlcycsIGJ1aWxkLnN0
YXRlX3N0cmluZyk6CiAgICAgICAgICAgICByZXR1cm4gRmFsc2UK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>380043</attachid>
            <date>2019-10-02 11:37:29 -0700</date>
            <delta_ts>2019-10-02 12:39:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202424-20191002143728.patch</filename>
            <type>text/plain</type>
            <size>7246</size>
            <attacher name="Aakash Jain">aakash_jain</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI1MDYxNikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDIwIEBACisyMDE5LTEwLTAxICBBYWthc2ggSmFpbiAgPGFha2FzaF9qYWluQGFwcGxlLmNv
bT4KKworICAgICAgICBbZXdzXSBBZGQgQVBJIGVuZHBvaW50IHRvIHJldHJ5IGZhaWxlZCBidWls
ZHMgZm9yIGEgcGF0Y2gKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIwMjQyNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogQnVpbGRTbGF2ZVN1cHBvcnQvZXdzLWFwcC9ld3MvdXJscy5weTogQWRkZWQgdXJs
IG1hcHBpbmcgZm9yIC9yZXRyeS4KKyAgICAgICAgKiBCdWlsZFNsYXZlU3VwcG9ydC9ld3MtYXBw
L2V3cy92aWV3cy9yZXRyeXBhdGNoLnB5OiBBZGRlZC4KKyAgICAgICAgKFJldHJ5UGF0Y2guZ2V0
KTogRGlzcGxheSB0aGUgd2ViLWZvcm0gdG8gcmV0cnkgdGhlIHBhdGNoLiBSZXRyeSBidXR0b24g
d2hpY2ggd2lsbCBiZSBhZGRlZCBzb29uIHdpbGwgCisgICAgICAgIHVzZSB0aGlzIGZvcm0uCisg
ICAgICAgIChSZXRyeVBhdGNoLnBvc3QpOiBIYW5kbGUgdGhlIHBvc3QgcmVxdWVzdCBhbmQgcmV0
cnkgdGhlIHBhdGNoLgorICAgICAgICAqIEJ1aWxkU2xhdmVTdXBwb3J0L2V3cy1hcHAvZXdzL3Zp
ZXdzL3N0YXR1c2J1YmJsZS5weToKKyAgICAgICAgKFN0YXR1c0J1YmJsZS5maW5kX2ZhaWxlZF9i
dWlsZHNfZm9yX3BhdGNoKTogTWV0aG9kIHRvIGZpbmQgZmFpbGVkIGJ1aWxkcyBmb3IgYSBwYXRj
aC4KKyAgICAgICAgKiBCdWlsZFNsYXZlU3VwcG9ydC9ld3MtYXBwL2V3cy90ZW1wbGF0ZXMvcmV0
cnkuaHRtbDogQWRkZWQsIHNpbWlsYXIgdG8gc3VibWl0dG9ld3MuaHRtbC4gVGhpcworICAgICAg
ICBhbGxvd3MgdG8gcmV0cnkgYSBwYXRjaCB0aHJvdWdoIGEgd2ViLWZvcm0gYXMgd2VsbC4KKwog
MjAxOS0xMC0wMiAgQWFrYXNoIEphaW4gIDxhYWthc2hfamFpbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgW2V3c10gd2luZG93cyBvciB3aW5jYWlybyBxdWV1ZSBzaG91bGQgdXNlIGRlbCBpbnN0ZWFk
IG9mIHJtIGNvbW1hbmQKSW5kZXg6IFRvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2V3cy1hcHAvZXdz
L3VybHMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvZXdzLWFwcC9l
d3MvdXJscy5weQkocmV2aXNpb24gMjUwNjE2KQorKysgVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQv
ZXdzLWFwcC9ld3MvdXJscy5weQkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQCBmcm9t
IGRqYW5nby5jb25mLnVybHMgaW1wb3J0IHVybAogZnJvbSBld3Mudmlld3MuaW5kZXggaW1wb3J0
IEluZGV4CiBmcm9tIGV3cy52aWV3cy5yZXN1bHRzIGltcG9ydCBSZXN1bHRzCiBmcm9tIGV3cy52
aWV3cy5zdGF0dXNidWJibGUgaW1wb3J0IFN0YXR1c0J1YmJsZQorZnJvbSBld3Mudmlld3MucmV0
cnlwYXRjaCBpbXBvcnQgUmV0cnlQYXRjaAogZnJvbSBld3Mudmlld3Muc3VibWl0dG9ld3MgaW1w
b3J0IFN1Ym1pdFRvRVdTCiAKIGFwcF9uYW1lID0gJ2V3cycKQEAgLTMzLDYgKzM0LDggQEAgdXJs
cGF0dGVybnMgPSBbCiAgICAgdXJsKHInXiQnLCBJbmRleC5hc192aWV3KCksIG5hbWU9J2luZGV4
JyksCiAgICAgIyBleDogL3Jlc3VsdHMvCiAgICAgdXJsKHInXnJlc3VsdHMvJCcsIFJlc3VsdHMu
YXNfdmlldygpLCBuYW1lPSdyZXN1bHRzJyksCisgICAgIyBleDogL3JldHJ5LworICAgIHVybChy
J15yZXRyeS8kJywgUmV0cnlQYXRjaC5hc192aWV3KCksIG5hbWU9J3JldHJ5cGF0Y2gnKSwKICAg
ICAjIGV4OiAvc3RhdHVzLWJ1YmJsZS81CiAgICAgdXJsKHInXnN0YXR1cy1idWJibGUvKD9QPHBh
dGNoX2lkPlswLTldKykvJCcsIFN0YXR1c0J1YmJsZS5hc192aWV3KCksIG5hbWU9J3N0YXR1c2J1
YmJsZScpLAogICAgICMgZXg6IC9zdWJtaXQtdG8tZXdzLwpJbmRleDogVG9vbHMvQnVpbGRTbGF2
ZVN1cHBvcnQvZXdzLWFwcC9ld3MvdGVtcGxhdGVzL3JldHJ5Lmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvZXdzLWFwcC9ld3MvdGVtcGxhdGVzL3JldHJ5Lmh0bWwJ
KG5vbmV4aXN0ZW50KQorKysgVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvZXdzLWFwcC9ld3MvdGVt
cGxhdGVzL3JldHJ5Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzIEBACis8Zm9ybSBu
YW1lPSJyZXRyeSIgbWV0aG9kPSJQT1NUIj57JSBjc3JmX3Rva2VuICV9CitBdHRhY2htZW50IGlk
IG9mIHBhdGNoIHRvIHJldHJ5OiA8aW5wdXQgbmFtZT0icGF0Y2hfaWQiPjxpbnB1dCB0eXBlPSJz
dWJtaXQiIHZhbHVlPSJSZXRyeSBmYWlsZWQgYnVpbGRzIj4KKzwvZm9ybT4KSW5kZXg6IFRvb2xz
L0J1aWxkU2xhdmVTdXBwb3J0L2V3cy1hcHAvZXdzL3ZpZXdzL3JldHJ5cGF0Y2gucHkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvZXdzLWFwcC9ld3Mvdmlld3MvcmV0cnlw
YXRjaC5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9CdWlsZFNsYXZlU3VwcG9ydC9ld3MtYXBw
L2V3cy92aWV3cy9yZXRyeXBhdGNoLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjYgQEAK
KyMgQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMK
KyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwK
KyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworZnJvbSBfX2Z1dHVyZV9f
IGltcG9ydCB1bmljb2RlX2xpdGVyYWxzCisKK2ltcG9ydCBsb2dnaW5nCisKK2Zyb20gZGphbmdv
Lmh0dHAgaW1wb3J0IEh0dHBSZXNwb25zZQorZnJvbSBkamFuZ28uc2hvcnRjdXRzIGltcG9ydCBy
ZW5kZXIKK2Zyb20gZGphbmdvLnZpZXdzIGltcG9ydCBWaWV3Citmcm9tIGRqYW5nby52aWV3cy5k
ZWNvcmF0b3JzLmNsaWNramFja2luZyBpbXBvcnQgeGZyYW1lX29wdGlvbnNfZXhlbXB0CisKK2Zy
b20gZXdzLmNvbW1vbi5idWlsZGJvdCBpbXBvcnQgQnVpbGRib3QKK2Zyb20gZXdzLm1vZGVscy5w
YXRjaCBpbXBvcnQgUGF0Y2gKK2Zyb20gZXdzLnZpZXdzLnN0YXR1c2J1YmJsZSBpbXBvcnQgU3Rh
dHVzQnViYmxlCisKK19sb2cgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKKworCitjbGFz
cyBSZXRyeVBhdGNoKFZpZXcpOgorICAgIGRlZiBnZXQoc2VsZiwgcmVxdWVzdCk6CisgICAgICAg
IHJldHVybiByZW5kZXIocmVxdWVzdCwgJ3JldHJ5Lmh0bWwnLCB7fSkKKworICAgIEB4ZnJhbWVf
b3B0aW9uc19leGVtcHQKKyAgICBkZWYgcG9zdChzZWxmLCByZXF1ZXN0KToKKyAgICAgICAgdHJ5
OgorICAgICAgICAgICAgcGF0Y2hfaWQgPSByZXF1ZXN0LlBPU1QuZ2V0KCdwYXRjaF9pZCcpCisg
ICAgICAgICAgICBwYXRjaF9pZCA9IGludChwYXRjaF9pZCkKKyAgICAgICAgZXhjZXB0IChWYWx1
ZUVycm9yLCBUeXBlRXJyb3IpIGFzIGU6CisgICAgICAgICAgICByZXR1cm4gSHR0cFJlc3BvbnNl
KCdJbnZhbGlkIHBhdGNoIGlkOiB7fScuZm9ybWF0KHJlcXVlc3QuUE9TVC5nZXQoJ3BhdGNoX2lk
JykpKQorCisgICAgICAgIGJ1aWxkc190b19yZXRyeSA9IFN0YXR1c0J1YmJsZSgpLmZpbmRfZmFp
bGVkX2J1aWxkc19mb3JfcGF0Y2gocGF0Y2hfaWQpCisgICAgICAgIF9sb2cuaW5mbygnUmV0cnlp
bmcgcGF0Y2g6IHt9LiBGYWlsZWQgYnVpbGRzOiB7fScuZm9ybWF0KHBhdGNoX2lkLCBidWlsZHNf
dG9fcmV0cnkpKQorICAgICAgICBpZiBub3QgYnVpbGRzX3RvX3JldHJ5OgorICAgICAgICAgICAg
cmV0dXJuIEh0dHBSZXNwb25zZSgnTm8gcmVjZW50IGZhaWxlZCBidWlsZChzKSBmb3VuZCBmb3Ig
cGF0Y2gge30uJy5mb3JtYXQocGF0Y2hfaWQpKQorCisgICAgICAgIGZhaWxlZF90b19yZXRyeV9i
dWlsZHMgPSBbXQorICAgICAgICBmb3IgYnVpbGQgaW4gYnVpbGRzX3RvX3JldHJ5OgorICAgICAg
ICAgICAgaWYgbm90IEJ1aWxkYm90LnJldHJ5X2J1aWxkKGJ1aWxkLmJ1aWxkZXJfaWQsIGJ1aWxk
Lm51bWJlcik6CisgICAgICAgICAgICAgICAgZmFpbGVkX3RvX3JldHJ5X2J1aWxkcy5hcHBlbmQo
YnVpbGQpCisKKyAgICAgICAgaWYgbGVuKGZhaWxlZF90b19yZXRyeV9idWlsZHMpID4gMDoKKyAg
ICAgICAgICAgIG1lc3NhZ2UgPSAnRmFpbGVkIHRvIHJldHJ5IHt9IGJ1aWxkKHMpIGZvciBwYXRj
aCB7fS4nLmZvcm1hdChsZW4oZmFpbGVkX3RvX3JldHJ5X2J1aWxkcyksIHBhdGNoX2lkKQorICAg
ICAgICAgICAgbWVzc2FnZSArPSAnIFBsZWFzZSBjb250YWN0IGFkbWluQHdlYmtpdC5vcmcgaWYg
dGhlIHByb2JsZW0gcGVyc2lzdC4nCisgICAgICAgICAgICBfbG9nLndhcm4obWVzc2FnZSkKKyAg
ICAgICAgICAgIHJldHVybiBIdHRwUmVzcG9uc2UobWVzc2FnZSkKKyAgICAgICAgcmV0dXJuIEh0
dHBSZXNwb25zZSgnU3VibWl0dGVkIHt9IGJ1aWxkKHMpIHRvIEVXUyBmb3IgcmV0cnkgZm9yIHBh
dGNoIHt9LicuZm9ybWF0KGxlbihidWlsZHNfdG9fcmV0cnkpLCBwYXRjaF9pZCkpCkluZGV4OiBU
b29scy9CdWlsZFNsYXZlU3VwcG9ydC9ld3MtYXBwL2V3cy92aWV3cy9zdGF0dXNidWJibGUucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvZXdzLWFwcC9ld3Mvdmlld3Mv
c3RhdHVzYnViYmxlLnB5CShyZXZpc2lvbiAyNTA2MTYpCisrKyBUb29scy9CdWlsZFNsYXZlU3Vw
cG9ydC9ld3MtYXBwL2V3cy92aWV3cy9zdGF0dXNidWJibGUucHkJKHdvcmtpbmcgY29weSkKQEAg
LTIwOSw2ICsyMDksMTkgQEAgY2xhc3MgU3RhdHVzQnViYmxlKFZpZXcpOgogICAgIGRlZiBnZXRf
YnVpbGRzX2Zvcl9xdWV1ZShzZWxmLCBwYXRjaCwgcXVldWUpOgogICAgICAgICByZXR1cm4gW2J1
aWxkIGZvciBidWlsZCBpbiBwYXRjaC5idWlsZF9zZXQuYWxsKCkgaWYgYnVpbGQuYnVpbGRlcl9k
aXNwbGF5X25hbWUgPT0gcXVldWVdCiAKKyAgICBkZWYgZmluZF9mYWlsZWRfYnVpbGRzX2Zvcl9w
YXRjaChzZWxmLCBwYXRjaF9pZCk6CisgICAgICAgIHBhdGNoID0gUGF0Y2guZ2V0X3BhdGNoKHBh
dGNoX2lkKQorICAgICAgICBpZiBub3QgcGF0Y2g6CisgICAgICAgICAgICByZXR1cm4gW10KKyAg
ICAgICAgZmFpbGVkX2J1aWxkcyA9IFtdCisgICAgICAgIGZvciBxdWV1ZSBpbiBTdGF0dXNCdWJi
bGUuQUxMX1FVRVVFUzoKKyAgICAgICAgICAgIGJ1aWxkLCBfID0gc2VsZi5nZXRfbGF0ZXN0X2J1
aWxkX2Zvcl9xdWV1ZShwYXRjaCwgcXVldWUpCisgICAgICAgICAgICBpZiBub3QgYnVpbGQ6Cisg
ICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGJ1aWxkLnJlc3VsdCBpbiAo
QnVpbGRib3QuRkFJTFVSRSwgQnVpbGRib3QuRVhDRVBUSU9OLCBCdWlsZGJvdC5DQU5DRUxMRUQp
OgorICAgICAgICAgICAgICAgIGZhaWxlZF9idWlsZHMuYXBwZW5kKGJ1aWxkKQorICAgICAgICBy
ZXR1cm4gZmFpbGVkX2J1aWxkcworCiAgICAgZGVmIF9zaG91bGRfc2hvd19idWJibGVfZm9yX2J1
aWxkKHNlbGYsIGJ1aWxkKToKICAgICAgICAgaWYgYnVpbGQgYW5kIGJ1aWxkLnJlc3VsdCA9PSBC
dWlsZGJvdC5TS0lQUEVEIGFuZCByZS5zZWFyY2gocidQYXRjaCAuKiBkb2VzblwndCBoYXZlIHJl
bGV2YW50IGNoYW5nZXMnLCBidWlsZC5zdGF0ZV9zdHJpbmcpOgogICAgICAgICAgICAgcmV0dXJu
IEZhbHNlCg==
</data>
<flag name="review"
          id="395754"
          type_id="1"
          status="+"
          setter="jbedard"
    />
          </attachment>
      

    </bug>

</bugzilla>