<?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>210346</bug_id>
          
          <creation_ts>2020-04-10 10:29:50 -0700</creation_ts>
          <short_desc>[GTK][WPE] Replace evil strtok() calls with fscanf() in MemoryPressureMonitor.cpp</short_desc>
          <delta_ts>2020-04-18 10:17:18 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>209942</dependson>
          <blocked>210345</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Pablo Saavedra">psaavedra</reporter>
          <assigned_to name="Pablo Saavedra">psaavedra</assigned_to>
          <cc>annulen</cc>
    
    <cc>aperez</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>cgarcia</cc>
    
    <cc>clopez</cc>
    
    <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1640253</commentid>
    <comment_count>0</comment_count>
    <who name="Pablo Saavedra">psaavedra</who>
    <bug_when>2020-04-10 10:29:50 -0700</bug_when>
    <thetext>Related to https://bugs.webkit.org/show_bug.cgi?id=209942
See details in https://bugs.webkit.org/show_bug.cgi?id=209942#c18


&gt; Source/WebKit/UIProcess/linux/MemoryPressureMonitor.cpp:173
&gt;  // 1:name=systemd:/user.slice/user-1000.slice/user@1000.service/gnome-terminal-server.service


These lines look quite suitable to be parsed with fscanf():

  while (!feof(inputFile)) {
      char name[40 + 1];
      char path[PATH_MAX + 1];
      fscanf(&quot;%*u:%40[^:]:%&quot; STRINGIFY(PATH_MAX) &quot;[^\n]&quot;, name, path);
      if (!strcmp(name, &quot;name=systemd&quot;))
          return CString(path);
  }

  // Not found
  return CString();

With the STRINGIFY() macro being the usual preprocessor trick:

  #define STRINGIFY_EXPANDED(val) #val
  #define STRINGIFY(val) STRINGIFY_EXPANDED(val)

&gt; Source/WebKit/UIProcess/linux/MemoryPressureMonitor.cpp:217
&gt; +    while (char* line = fgets(buffer, 128, memInfoFile)) {


Idea: instead of going line-by-line and using evil strtok(), take advantage of… fscanf() again!

   memoryTotal = memoryFree = activeFile = inactiveFile = slabReclaimable = notSet;
   while (!feof(memInfoFile)) {
       char token[50 + 1];
       size_t amount;
       if (fscanf(memInfoFile, &quot;%50s%zukB&quot;, token, &amp;amount) != 2)
           break;

       if (!strcmp(token, &quot;MemTotal:&quot;))
           memoryTotal = amount;
       else if (!strcmp(token, &quot;MemFree:&quot;))
           memoryFree = amount;
       else ...

      if (memoryTotal != notSet &amp;&amp; memoryFree != notSet &amp;&amp; activeFile != notSet &amp;&amp; inactiveFile != notSet &amp;&amp; slabReclaimable != notSet)
          break;
   }

Note how this avoids needing to manually split the input in tokens ourselves: instead we let fscanf() do the hard work of parsing the input and doing numeric conversions.

&gt; Source/WebKit/UIProcess/linux/MemoryPressureMonitor.cpp:420
&gt; +    return value;


This whole function can be implemented as:

  size_t CGroupMemoryController::getCgroupFileValue(FILE* file)
  {
      size_t value;
      return (file &amp;&amp; fscanf(file, &quot;%zu&quot;, &amp;value) == 1) ? value : notSet;
  }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640661</commentid>
    <comment_count>1</comment_count>
      <attachid>396217</attachid>
    <who name="Pablo Saavedra">psaavedra</who>
    <bug_when>2020-04-12 03:18:16 -0700</bug_when>
    <thetext>Created attachment 396217
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640662</commentid>
    <comment_count>2</comment_count>
      <attachid>396217</attachid>
    <who name="Pablo Saavedra">psaavedra</who>
    <bug_when>2020-04-12 03:21:52 -0700</bug_when>
    <thetext>Comment on attachment 396217
patch

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

&gt; Source/WebKit/UIProcess/linux/MemoryPressureMonitor.cpp:66
&gt;  static size_t lowWatermarkPages(FILE* zoneInfoFile)

See notes in comment #1 from 210345 https://bugs.webkit.org/show_bug.cgi?id=210345#c1. Probably we want just to remove this code because memAvailable is already in /proc/meminfo since Linux 3.14 LTS and this is already EOL since 2016 so there is no reason to maintain this code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640946</commentid>
    <comment_count>3</comment_count>
      <attachid>396217</attachid>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2020-04-13 10:06:56 -0700</bug_when>
    <thetext>Comment on attachment 396217
patch

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

I think this is going in the right direction (thanks!) but I have
a few questions and comment, please check them below 😄️

&gt;&gt; Source/WebKit/UIProcess/linux/MemoryPressureMonitor.cpp:66
&gt;&gt;  static size_t lowWatermarkPages(FILE* zoneInfoFile)
&gt; 
&gt; See notes in comment #1 from 210345 https://bugs.webkit.org/show_bug.cgi?id=210345#c1. Probably we want just to remove this code because memAvailable is already in /proc/meminfo since Linux 3.14 LTS and this is already EOL since 2016 so there is no reason to maintain this code.

We would like to decide whether we want to keep supporting kernels
older than 3.14 — but I think it&apos;s better to play safe and keep the
code for now.

If (or when) we decide to remove it, we can use a new bug for that.

&gt; Source/WebKit/UIProcess/linux/MemoryPressureMonitor.cpp:77
&gt; +        r = fscanf(zoneInfoFile, &quot; Node %*u, zone %128[^\n]\n&quot;, buffer);

Well, 128 bytes sounds a bit too much for the zone names, but at the same time
it&apos;s not that much… so let&apos;s just leave it as is 😉️

Note that you should use “%127[^\n]” because fscanf() will read at most 127
characters and *then* add the &apos;\0&apos; terminator, which is character number 128.
When using fscanf() I find it clearer to use something like:

   char buffer[128 + 1];  // +1 makes it clearer that we need space for \0
   fscanf(f, &quot;%128s&quot;, buffer);

(Actually, you did just this below!)

&gt; Source/WebKit/UIProcess/linux/MemoryPressureMonitor.cpp:80
&gt; +        r = fscanf(zoneInfoFile, &quot;%s&quot;, buffer);

This is unsafe, please indicate a field width corresponding to the
size of the buffer as part of the format string:

  r = fscanf(zoneInfoFile, &quot;%127s&quot;, buffer);
                             ^^^

&gt; Source/WebKit/UIProcess/linux/MemoryPressureMonitor.cpp:81
&gt; +        if (r == 1 &amp;&amp; inNormalZone &amp;&amp; !strcmp(buffer, &quot;low&quot;)) {

How does this work? The “low” keyword is a few tokens *after* the zone name.
Wouldn&apos;t you need a nested loop here reading tokens until “low” is seen?

&gt; Source/WebKit/UIProcess/linux/MemoryPressureMonitor.cpp:168
&gt; +        // int scanResult = fscanf(cgroupControllerFile, &quot;%*u:%40[^:]:%4096[^\n]&quot;, name, path);

Please remove this commented statement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1641263</commentid>
    <comment_count>4</comment_count>
    <who name="Pablo Saavedra">psaavedra</who>
    <bug_when>2020-04-13 23:27:51 -0700</bug_when>
    <thetext>(In reply to Adrian Perez from comment #3)
&gt; Comment on attachment 396217 [details]
&gt; patch
&gt; 

&gt; &gt; Source/WebKit/UIProcess/linux/MemoryPressureMonitor.cpp:81
&gt; &gt; +        if (r == 1 &amp;&amp; inNormalZone &amp;&amp; !strcmp(buffer, &quot;low&quot;)) {
&gt; 
&gt; How does this work? The “low” keyword is a few tokens *after* the zone name.
&gt; Wouldn&apos;t you need a nested loop here reading tokens until “low” is seen?
&gt; 

The fscanf() reads the input stream file until the argument list is successfully  filled. In the context of the `while (!feof(zoneInfoFile))` loop:

- the first `fscanf(zoneInfoFile, &quot; Node %*u, zone %128[^\n]\n&quot;, buffer);` 
  iterates the `Node` sections.
- Then, when we found a Normal node, we start to read each single  
  `fscanf(zoneInfoFile, &quot;%128s&quot;, buffer);` until find the `low` token.
- Finally, we read the next token which is the actual `low` value. 

In this second scanning  of the file I read the content one by one because the format of each row is not consistent (2, 3 or 6 values):

Node 0, zone   Normal
  pages free     27303
        min      20500
        low      24089
        high     27678
        spanned  3414016
        present  3414016
        managed  3337293
        protection: (0, 0, 0, 0, 0)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1641265</commentid>
    <comment_count>5</comment_count>
      <attachid>396384</attachid>
    <who name="Pablo Saavedra">psaavedra</who>
    <bug_when>2020-04-13 23:32:45 -0700</bug_when>
    <thetext>Created attachment 396384
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1642676</commentid>
    <comment_count>6</comment_count>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2020-04-17 08:15:26 -0700</bug_when>
    <thetext>(In reply to Pablo Saavedra from comment #4)
&gt; (In reply to Adrian Perez from comment #3)
&gt; &gt; Comment on attachment 396217 [details]
&gt; &gt; patch
&gt; &gt; 
&gt; 
&gt; &gt; &gt; Source/WebKit/UIProcess/linux/MemoryPressureMonitor.cpp:81
&gt; &gt; &gt; +        if (r == 1 &amp;&amp; inNormalZone &amp;&amp; !strcmp(buffer, &quot;low&quot;)) {
&gt; &gt; 
&gt; &gt; How does this work? The “low” keyword is a few tokens *after* the zone name.
&gt; &gt; Wouldn&apos;t you need a nested loop here reading tokens until “low” is seen?
&gt; &gt; 
&gt; 
&gt; The fscanf() reads the input stream file until the argument list is
&gt; successfully  filled. In the context of the `while (!feof(zoneInfoFile))`
&gt; loop:
&gt; 
&gt; - the first `fscanf(zoneInfoFile, &quot; Node %*u, zone %128[^\n]\n&quot;, buffer);` 
&gt;   iterates the `Node` sections.
&gt; - Then, when we found a Normal node, we start to read each single  
&gt;   `fscanf(zoneInfoFile, &quot;%128s&quot;, buffer);` until find the `low` token.
&gt; - Finally, we read the next token which is the actual `low` value. 
&gt; 
&gt; In this second scanning  of the file I read the content one by one because
&gt; the format of each row is not consistent (2, 3 or 6 values):
&gt; 
&gt; Node 0, zone   Normal
&gt;   pages free     27303
&gt;         min      20500
&gt;         low      24089
&gt;         high     27678
&gt;         spanned  3414016
&gt;         present  3414016
&gt;         managed  3337293
&gt;         protection: (0, 0, 0, 0, 0)

Thanks for the explanation, I get it now, but it&apos;s definitely not easy
to understand taking a quick look. Knowing that the “low” keyword must
be always contained inside a “Node” section, I was expecting a nested
loop (the outer one only searching for “Node ... Normal” lines, the
inner one picking the value of the “low“ keyword).

I guess this is fine as-is but I would add a comment explaining how it
works at the beginning of the loop.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1642680</commentid>
    <comment_count>7</comment_count>
      <attachid>396384</attachid>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2020-04-17 08:23:29 -0700</bug_when>
    <thetext>Comment on attachment 396384
patch

Other than the hardcoded buffer sizes, the parsing logic looks
good, and it&apos;s nice that using fscanf() in all this code avoids
the need for temporary memory allocations — which is important
when there isn&apos;t much left :)

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

&gt; Source/WebKit/UIProcess/linux/MemoryPressureMonitor.cpp:69
&gt; +    char buffer[128 + 1];

Please use a constant for the buffer size:

  #define ZONEINFO_TOKEN_BUFFER_SIZE 128

and then here:

  char buffer[ZONEINFO_TOKEN_BUFFER_SIZE + 1];

&gt; Source/WebKit/UIProcess/linux/MemoryPressureMonitor.cpp:77
&gt; +        r = fscanf(zoneInfoFile, &quot; Node %*u, zone %128[^\n]\n&quot;, buffer);

…then here you can use:

  int r = fscanf(zoneInfoFile, &quot;Node %*u, zone %&quot; STRINGIFY(ZONEINFO_TOKEN_BUFFER_SIZE) &quot;[^\n]\n&quot;, buffer);

instead of hardcoding the buffer sizeo in the input format string.

&gt; Source/WebKit/UIProcess/linux/MemoryPressureMonitor.cpp:80
&gt; +        r = fscanf(zoneInfoFile, &quot;%128s&quot;, buffer);

Here you could use fscanf(…, &quot;%&quot; STRINGIFY(ZONEINFO_TOKEN_BUFFER_SIZE) &quot;s&quot;, buffer)
instead of hardcoding the token buffer length.

&gt; Source/WebKit/UIProcess/linux/MemoryPressureMonitor.cpp:166
&gt; +        char name[40 + 1];

Same here, you could define CGROUP_NAME_BUFFER_SIZE.

&gt; Source/WebKit/UIProcess/linux/MemoryPressureMonitor.cpp:190
&gt; +        char token[50 + 1];

And here too: MEMINFO_TOKEN_BUFFER_SIZE.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1642971</commentid>
    <comment_count>8</comment_count>
      <attachid>396845</attachid>
    <who name="Pablo Saavedra">psaavedra</who>
    <bug_when>2020-04-18 06:33:32 -0700</bug_when>
    <thetext>Created attachment 396845
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1643022</commentid>
    <comment_count>9</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-04-18 10:17:17 -0700</bug_when>
    <thetext>Committed r260318: &lt;https://trac.webkit.org/changeset/260318&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 396845.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>396217</attachid>
            <date>2020-04-12 03:18:16 -0700</date>
            <delta_ts>2020-04-13 23:30:59 -0700</delta_ts>
            <desc>patch</desc>
            <filename>bug-210346-20200412121812.patch</filename>
            <type>text/plain</type>
            <size>9035</size>
            <attacher name="Pablo Saavedra">psaavedra</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU5OTQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDUyMzk3MzY1MGU4OTVhMTA5
ZDE5MWU5YzQ2NzIyZGExYmNjMDYwODguLmQ0YjIzODlhMmYyNjQ5MjkxN2ZmNzEwNzY4OTBjN2U2
ZTE2ODRjMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMjAtMDQtMTIgIFBhYmxvIFNh
YXZlZHJhICA8cHNhYXZlZHJhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS11bV1BFXSBSZXBs
YWNlIGV2aWwgc3RydG9rKCkgY2FsbHMgd2l0aCBmc2NhbmYoKSBpbiBNZW1vcnlQcmVzc3VyZU1v
bml0b3IuY3BwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTAzNDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFVJUHJvY2Vzcy9saW51eC9NZW1vcnlQcmVzc3VyZU1vbml0b3IuY3BwOgorICAgICAgICAo
V2ViS2l0Ojpsb3dXYXRlcm1hcmtQYWdlcyk6CisgICAgICAgIChXZWJLaXQ6OmdldENncm91cENv
bnRyb2xsZXJQYXRoKToKKyAgICAgICAgKFdlYktpdDo6c3lzdGVtTWVtb3J5VXNlZEFzUGVyY2Vu
dGFnZSk6CisgICAgICAgIChXZWJLaXQ6OkNHcm91cE1lbW9yeUNvbnRyb2xsZXI6OmdldENncm91
cEZpbGVWYWx1ZSk6CisKIDIwMjAtMDQtMTIgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNp
YUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIFVzZSBnZGtfd2luZG93X21vdmVfdG9fcmVj
dCgpIHRvIHBvc2l0aW9uIHBvcHVwIG1lbnVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9saW51eC9NZW1vcnlQcmVzc3VyZU1vbml0b3IuY3BwIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvbGludXgvTWVtb3J5UHJlc3N1cmVNb25pdG9yLmNwcAppbmRleCAwYTA0ZjA0OGVk
YzliMjU3OTE1NzEwODJmYzA2YTFkMzc1ODdmZjJkLi5iYjVjYzRlYmE0OGRhYmE5ZTcyOGU4MDVm
ZDAxMDhhNTNjMTU5NTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9saW51
eC9NZW1vcnlQcmVzc3VyZU1vbml0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2xpbnV4L01lbW9yeVByZXNzdXJlTW9uaXRvci5jcHAKQEAgLTYwLDQ0ICs2MCwyOCBAQCBzdGF0
aWMgY29uc3QgY2hhciogc19wcm9jWm9uZWluZm8gPSAiL3Byb2Mvem9uZWluZm8iOwogc3RhdGlj
IGNvbnN0IGNoYXIqIHNfcHJvY1NlbGZDZ3JvdXAgPSAiL3Byb2Mvc2VsZi9jZ3JvdXAiOwogc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIG1heENncm91cFBhdGggPSA0MDk2OyAvLyBQQVRIX01BWCA9IDQw
OTYgZnJvbSAoTGludXgpIGluY2x1ZGUvdWFwaS9saW51eC9saW1pdHMuaAogCisjZGVmaW5lIFNU
UklOR0lGWV9FWFBBTkRFRCh2YWwpICN2YWwKKyNkZWZpbmUgU1RSSU5HSUZZKHZhbCkgU1RSSU5H
SUZZX0VYUEFOREVEKHZhbCkKKwogc3RhdGljIHNpemVfdCBsb3dXYXRlcm1hcmtQYWdlcyhGSUxF
KiB6b25lSW5mb0ZpbGUpCiB7Ci0gICAgaWYgKCF6b25lSW5mb0ZpbGUpCi0gICAgICAgIHJldHVy
biBub3RTZXQ7Ci0KLSAgICBpZiAoZnNlZWsoem9uZUluZm9GaWxlLCAwLCBTRUVLX1NFVCkpCi0g
ICAgICAgIHJldHVybiBub3RTZXQ7Ci0KICAgICBzaXplX3QgbG93ID0gMDsKLSAgICBib29sIGlu
Wm9uZSA9IGZhbHNlOwotICAgIGJvb2wgZm91bmRMb3cgPSBmYWxzZTsKICAgICBjaGFyIGJ1ZmZl
clsxMjhdOwotICAgIHdoaWxlIChjaGFyKiBsaW5lID0gZmdldHMoYnVmZmVyLCAxMjgsIHpvbmVJ
bmZvRmlsZSkpIHsKLSAgICAgICAgaWYgKCFzdHJuY21wKGxpbmUsICJOb2RlIiwgNCkpIHsKLSAg
ICAgICAgICAgIGluWm9uZSA9IHRydWU7Ci0gICAgICAgICAgICBmb3VuZExvdyA9IGZhbHNlOwot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KKyAgICBib29sIGluTm9ybWFsWm9uZSA9
IGZhbHNlOwogCi0gICAgICAgIGNoYXIqIHRva2VuID0gc3RydG9rKGxpbmUsICIgIik7Ci0gICAg
ICAgIGlmICghdG9rZW4pCi0gICAgICAgICAgICBjb250aW51ZTsKKyAgICBpZiAoIXpvbmVJbmZv
RmlsZSB8fCBmc2Vlayh6b25lSW5mb0ZpbGUsIDAsIFNFRUtfU0VUKSkKKyAgICAgICAgcmV0dXJu
IG5vdFNldDsKIAotICAgICAgICBpZiAoIXN0cmNtcCh0b2tlbiwgImxvdyIpKSB7Ci0gICAgICAg
ICAgICBpZiAoIWluWm9uZSB8fCBmb3VuZExvdykgewotICAgICAgICAgICAgICAgIGxvdyA9IG5v
dFNldDsKKyAgICB3aGlsZSAoIWZlb2Yoem9uZUluZm9GaWxlKSkgeworICAgICAgICBpbnQgcjsK
KyAgICAgICAgciA9IGZzY2FuZih6b25lSW5mb0ZpbGUsICIgTm9kZSAlKnUsIHpvbmUgJTEyOFte
XG5dXG4iLCBidWZmZXIpOworICAgICAgICBpZiAociA9PSAyICYmICFzdHJjbXAoYnVmZmVyLCAi
Tm9ybWFsIikpCisgICAgICAgICAgICBpbk5vcm1hbFpvbmUgPSB0cnVlOworICAgICAgICByID0g
ZnNjYW5mKHpvbmVJbmZvRmlsZSwgIiVzIiwgYnVmZmVyKTsKKyAgICAgICAgaWYgKHIgPT0gMSAm
JiBpbk5vcm1hbFpvbmUgJiYgIXN0cmNtcChidWZmZXIsICJsb3ciKSkgeworICAgICAgICAgICAg
ciA9IGZzY2FuZih6b25lSW5mb0ZpbGUsICIlenUiLCAmbG93KTsKKyAgICAgICAgICAgIGlmIChy
ID09IDEpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB0b2tlbiA9IHN0cnRvayhudWxscHRyLCAiICIpOwotICAgICAgICAgICAgaWYgKCF0b2tlbikg
ewotICAgICAgICAgICAgICAgIGxvdyA9IG5vdFNldDsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJvb2wgb2sgPSB0cnVlOwotICAgICAgICAgICAg
YXV0byB2YWx1ZSA9IHRvSW50ZWdyYWxUeXBlPHNpemVfdD4odG9rZW4sIHN0cmxlbih0b2tlbiks
ICZvayk7Ci0gICAgICAgICAgICBpZiAob2spCi0gICAgICAgICAgICAgICAgbG93ICs9IHZhbHVl
OwotICAgICAgICAgICAgZm91bmRMb3cgPSB0cnVlOwogICAgICAgICB9CiAgICAgfQogICAgIHJl
dHVybiBsb3c7CkBAIC0xNzUsMjkgKzE1OSwyMCBAQCBGSUxFKiBnZXRDZ3JvdXBGaWxlKENTdHJp
bmcgY2dyb3VwQ29udHJvbGxlck5hbWUsIENTdHJpbmcgY2dyb3VwQ29udHJvbGxlclBhdGgsCiBz
dGF0aWMgQ1N0cmluZyBnZXRDZ3JvdXBDb250cm9sbGVyUGF0aChGSUxFKiBjZ3JvdXBDb250cm9s
bGVyRmlsZSwgY29uc3QgY2hhciogY29udHJvbGxlck5hbWUpCiB7CiAgICAgQ1N0cmluZyBjZ3Jv
dXBNZW1vcnlDb250cm9sbGVyUGF0aDsKLSAgICBpZiAoIWNncm91cENvbnRyb2xsZXJGaWxlKQot
ICAgICAgICByZXR1cm4gQ1N0cmluZygpOwotCi0gICAgaWYgKGZzZWVrKGNncm91cENvbnRyb2xs
ZXJGaWxlLCAwLCBTRUVLX1NFVCkpCisgICAgaWYgKCFjZ3JvdXBDb250cm9sbGVyRmlsZSB8fCBm
c2VlayhjZ3JvdXBDb250cm9sbGVyRmlsZSwgMCwgU0VFS19TRVQpKQogICAgICAgICByZXR1cm4g
Q1N0cmluZygpOwogCi0gICAgY2hhciBidWZmZXJbbWF4Q2dyb3VwUGF0aF07Ci0gICAgd2hpbGUg
KGNoYXIqIGxpbmUgPSBmZ2V0cyhidWZmZXIsIG1heENncm91cFBhdGgsIGNncm91cENvbnRyb2xs
ZXJGaWxlKSkgewotICAgICAgICBjaGFyKiB0b2tlbiA9IHN0cnRvayhsaW5lLCAiXG4iKTsKLSAg
ICAgICAgaWYgKCF0b2tlbikKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIHRva2VuID0g
c3RydG9rKHRva2VuLCAiOiIpOwotICAgICAgICB0b2tlbiA9IHN0cnRvayhudWxscHRyLCAiOiIp
OwotICAgICAgICBpZiAoIXN0cmNtcCh0b2tlbiwgY29udHJvbGxlck5hbWUpKSB7Ci0gICAgICAg
ICAgICB0b2tlbiA9IHN0cnRvayhudWxscHRyLCAiOiIpOwotICAgICAgICAgICAgY2dyb3VwTWVt
b3J5Q29udHJvbGxlclBhdGggPSBDU3RyaW5nKHRva2VuKTsKLSAgICAgICAgICAgIHJldHVybiBj
Z3JvdXBNZW1vcnlDb250cm9sbGVyUGF0aDsKLSAgICAgICAgfQotICAgICAgICBpZiAoIXN0cm5j
bXAodG9rZW4sICJuYW1lPXN5c3RlbWQiLCAxMikpIHsKLSAgICAgICAgICAgIHRva2VuID0gc3Ry
dG9rKG51bGxwdHIsICI6Iik7Ci0gICAgICAgICAgICBjZ3JvdXBNZW1vcnlDb250cm9sbGVyUGF0
aCA9IENTdHJpbmcodG9rZW4pOwotICAgICAgICB9CisgICAgd2hpbGUgKCFmZW9mKGNncm91cENv
bnRyb2xsZXJGaWxlKSkgeworICAgICAgICBjaGFyIG5hbWVbNDAgKyAxXTsKKyAgICAgICAgY2hh
ciBwYXRoW21heENncm91cFBhdGggKyAxXTsKKyAgICAgICAgLy8gaW50IHNjYW5SZXN1bHQgPSBm
c2NhbmYoY2dyb3VwQ29udHJvbGxlckZpbGUsICIlKnU6JTQwW146XTolNDA5NlteXG5dIiwgbmFt
ZSwgcGF0aCk7CisgICAgICAgIGludCBzY2FuUmVzdWx0ID0gZnNjYW5mKGNncm91cENvbnRyb2xs
ZXJGaWxlLCAiJSp1OiU0MFteOl06JSIgU1RSSU5HSUZZKFBBVEhfTUFYKSAiW15cbl0iLCBuYW1l
LCBwYXRoKTsKKyAgICAgICAgaWYgKHNjYW5SZXN1bHQgIT0gMikKKyAgICAgICAgICAgIHJldHVy
biBDU3RyaW5nKCk7CisgICAgICAgIGlmICghc3RyY21wKG5hbWUsIGNvbnRyb2xsZXJOYW1lKSkK
KyAgICAgICAgICAgIHJldHVybiBDU3RyaW5nKHBhdGgpOworICAgICAgICBpZiAoIXN0cmNtcChu
YW1lLCAibmFtZT1zeXN0ZW1kIikpCisgICAgICAgICAgICBjZ3JvdXBNZW1vcnlDb250cm9sbGVy
UGF0aCA9IENTdHJpbmcocGF0aCk7CiAgICAgfQogICAgIHJldHVybiBjZ3JvdXBNZW1vcnlDb250
cm9sbGVyUGF0aDsKIH0KQEAgLTIwNSw2NSArMTgwLDI5IEBAIHN0YXRpYyBDU3RyaW5nIGdldENn
cm91cENvbnRyb2xsZXJQYXRoKEZJTEUqIGNncm91cENvbnRyb2xsZXJGaWxlLCBjb25zdCBjaGFy
KiBjCiAKIHN0YXRpYyBpbnQgc3lzdGVtTWVtb3J5VXNlZEFzUGVyY2VudGFnZShGSUxFKiBtZW1J
bmZvRmlsZSwgRklMRSogem9uZUluZm9GaWxlLCBDR3JvdXBNZW1vcnlDb250cm9sbGVyKiBtZW1v
cnlDb250cm9sbGVyKQogewotICAgIGlmICghbWVtSW5mb0ZpbGUpCi0gICAgICAgIHJldHVybiAt
MTsKLQotICAgIGlmIChmc2VlayhtZW1JbmZvRmlsZSwgMCwgU0VFS19TRVQpKQorICAgIGlmICgh
bWVtSW5mb0ZpbGUgfHwgZnNlZWsobWVtSW5mb0ZpbGUsIDAsIFNFRUtfU0VUKSkKICAgICAgICAg
cmV0dXJuIC0xOwogCiAgICAgc2l6ZV90IG1lbW9yeUF2YWlsYWJsZSwgbWVtb3J5VG90YWwsIG1l
bW9yeUZyZWUsIGFjdGl2ZUZpbGUsIGluYWN0aXZlRmlsZSwgc2xhYlJlY2xhaW1hYmxlOwogICAg
IG1lbW9yeUF2YWlsYWJsZSA9IG1lbW9yeVRvdGFsID0gbWVtb3J5RnJlZSA9IGFjdGl2ZUZpbGUg
PSBpbmFjdGl2ZUZpbGUgPSBzbGFiUmVjbGFpbWFibGUgPSBub3RTZXQ7Ci0gICAgY2hhciBidWZm
ZXJbMTI4XTsKLSAgICB3aGlsZSAoY2hhciogbGluZSA9IGZnZXRzKGJ1ZmZlciwgMTI4LCBtZW1J
bmZvRmlsZSkpIHsKLSAgICAgICAgY2hhciogdG9rZW4gPSBzdHJ0b2sobGluZSwgIiAiKTsKLSAg
ICAgICAgYm9vbCBvayA9IHRydWU7Ci0gICAgICAgIGlmICghdG9rZW4pCi0gICAgICAgICAgICBi
cmVhazsKIAotICAgICAgICBpZiAoIXN0cmNtcCh0b2tlbiwgIk1lbUF2YWlsYWJsZToiKSkgewot
ICAgICAgICAgICAgaWYgKCh0b2tlbiA9IHN0cnRvayhudWxscHRyLCAiICIpKSkgewotICAgICAg
ICAgICAgICAgIG1lbW9yeUF2YWlsYWJsZSA9IHRvSW50ZWdyYWxUeXBlPHNpemVfdD4odG9rZW4s
IHN0cmxlbih0b2tlbiksICZvayk7Ci0gICAgICAgICAgICAgICAgaWYgKCFvaykKLSAgICAgICAg
ICAgICAgICAgICAgbWVtb3J5QXZhaWxhYmxlID0gbm90U2V0OwotICAgICAgICAgICAgICAgIGlm
IChtZW1vcnlUb3RhbCAhPSBub3RTZXQpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAodG9rZW4sICJNZW1Ub3RhbDoi
KSkgewotICAgICAgICAgICAgaWYgKCh0b2tlbiA9IHN0cnRvayhudWxscHRyLCAiICIpKSkgewot
ICAgICAgICAgICAgICAgIG1lbW9yeVRvdGFsID0gdG9JbnRlZ3JhbFR5cGU8c2l6ZV90Pih0b2tl
biwgc3RybGVuKHRva2VuKSwgJm9rKTsKLSAgICAgICAgICAgICAgICBpZiAoIW9rKQotICAgICAg
ICAgICAgICAgICAgICBtZW1vcnlUb3RhbCA9IG5vdFNldDsKLSAgICAgICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAodG9rZW4s
ICJNZW1GcmVlOiIpKSB7Ci0gICAgICAgICAgICBpZiAoKHRva2VuID0gc3RydG9rKG51bGxwdHIs
ICIgIikpKSB7Ci0gICAgICAgICAgICAgICAgbWVtb3J5RnJlZSA9IHRvSW50ZWdyYWxUeXBlPHNp
emVfdD4odG9rZW4sIHN0cmxlbih0b2tlbiksICZvayk7Ci0gICAgICAgICAgICAgICAgaWYgKCFv
aykKLSAgICAgICAgICAgICAgICAgICAgbWVtb3J5RnJlZSA9IG5vdFNldDsKLSAgICAgICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9IGVsc2UgaWYgKCFzdHJj
bXAodG9rZW4sICJBY3RpdmUoZmlsZSk6IikpIHsKLSAgICAgICAgICAgIGlmICgodG9rZW4gPSBz
dHJ0b2sobnVsbHB0ciwgIiAiKSkpIHsKLSAgICAgICAgICAgICAgICBhY3RpdmVGaWxlID0gdG9J
bnRlZ3JhbFR5cGU8c2l6ZV90Pih0b2tlbiwgc3RybGVuKHRva2VuKSwgJm9rKTsKLSAgICAgICAg
ICAgICAgICBpZiAoIW9rKQotICAgICAgICAgICAgICAgICAgICBhY3RpdmVGaWxlID0gbm90U2V0
OwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0g
ZWxzZSBpZiAoIXN0cmNtcCh0b2tlbiwgIkluYWN0aXZlKGZpbGUpOiIpKSB7Ci0gICAgICAgICAg
ICBpZiAoKHRva2VuID0gc3RydG9rKG51bGxwdHIsICIgIikpKSB7Ci0gICAgICAgICAgICAgICAg
aW5hY3RpdmVGaWxlID0gdG9JbnRlZ3JhbFR5cGU8c2l6ZV90Pih0b2tlbiwgc3RybGVuKHRva2Vu
KSwgJm9rKTsKLSAgICAgICAgICAgICAgICBpZiAoIW9rKQotICAgICAgICAgICAgICAgICAgICBp
bmFjdGl2ZUZpbGUgPSBub3RTZXQ7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKHRva2VuLCAiU1JlY2xhaW1hYmxl
OiIpKSB7Ci0gICAgICAgICAgICBpZiAoKHRva2VuID0gc3RydG9rKG51bGxwdHIsICIgIikpKSB7
Ci0gICAgICAgICAgICAgICAgc2xhYlJlY2xhaW1hYmxlID0gdG9JbnRlZ3JhbFR5cGU8c2l6ZV90
Pih0b2tlbiwgc3RybGVuKHRva2VuKSwgJm9rKTsKLSAgICAgICAgICAgICAgICBpZiAoIW9rKQot
ICAgICAgICAgICAgICAgICAgICBzbGFiUmVjbGFpbWFibGUgPSBub3RTZXQ7Ci0gICAgICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAgIHdoaWxlICgh
ZmVvZihtZW1JbmZvRmlsZSkpIHsKKyAgICAgICAgY2hhciB0b2tlbls1MCArIDFdOworICAgICAg
ICBzaXplX3QgYW1vdW50OworICAgICAgICBpZiAoZnNjYW5mKG1lbUluZm9GaWxlLCAiJTUwcyV6
dWtCIiwgdG9rZW4sICZhbW91bnQpICE9IDIpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgaWYgKCFzdHJjbXAodG9rZW4sICJNZW1Ub3RhbDoiKSkKKyAgICAgICAgICAgIG1lbW9yeVRv
dGFsID0gYW1vdW50OworICAgICAgICBlbHNlIGlmICghc3RyY21wKHRva2VuLCAiTWVtRnJlZToi
KSkKKyAgICAgICAgICAgIG1lbW9yeUZyZWUgPSBhbW91bnQ7CisgICAgICAgIGVsc2UgaWYgKCFz
dHJjbXAodG9rZW4sICJNZW1BdmFpbGFibGU6IikpCisgICAgICAgICAgICBtZW1vcnlBdmFpbGFi
bGUgPSBhbW91bnQ7CisgICAgICAgIGVsc2UgaWYgKCFzdHJjbXAodG9rZW4sICJBY3RpdmUoZmls
ZSk6IikpCisgICAgICAgICAgICBhY3RpdmVGaWxlID0gYW1vdW50OworICAgICAgICBlbHNlIGlm
ICghc3RyY21wKHRva2VuLCAiSW5hY3RpdmUoZmlsZSk6IikpCisgICAgICAgICAgICBpbmFjdGl2
ZUZpbGUgPSBhbW91bnQ7CisgICAgICAgIGVsc2UgaWYgKCFzdHJjbXAodG9rZW4sICJTUmVjbGFp
bWFibGU6IikpCisgICAgICAgICAgICBzbGFiUmVjbGFpbWFibGUgPSBhbW91bnQ7CiAKICAgICAg
ICAgaWYgKG1lbW9yeVRvdGFsICE9IG5vdFNldCAmJiBtZW1vcnlGcmVlICE9IG5vdFNldCAmJiBh
Y3RpdmVGaWxlICE9IG5vdFNldCAmJiBpbmFjdGl2ZUZpbGUgIT0gbm90U2V0ICYmIHNsYWJSZWNs
YWltYWJsZSAhPSBub3RTZXQpCiAgICAgICAgICAgICBicmVhazsKQEAgLTQwMiwyMiArMzQxLDEx
IEBAIHZvaWQgQ0dyb3VwTWVtb3J5Q29udHJvbGxlcjo6ZGlzcG9zZU1lbW9yeUNvbnRyb2xsZXIo
KQogCiBzaXplX3QgQ0dyb3VwTWVtb3J5Q29udHJvbGxlcjo6Z2V0Q2dyb3VwRmlsZVZhbHVlKEZJ
TEUgKmZpbGUpCiB7Ci0gICAgY2hhciBidWZmZXJbMTI4XTsKLSAgICBjaGFyKiB0b2tlbjsKLSAg
ICBib29sIG9rID0gdHJ1ZTsKLQotICAgIGlmICghZmlsZSkKKyAgICBpZiAoIWZpbGUgfHwgZnNl
ZWsoZmlsZSwgMCwgU0VFS19TRVQpKQogICAgICAgICByZXR1cm4gbm90U2V0OwogCi0gICAgaWYg
KGZzZWVrKGZpbGUsIDAsIFNFRUtfU0VUKSkKLSAgICAgICAgcmV0dXJuIG5vdFNldDsKLQotICAg
IHRva2VuID0gZmdldHMoYnVmZmVyLCAxMjgsIGZpbGUpOwotCi0gICAgc2l6ZV90IHZhbHVlID0g
dG9JbnRlZ3JhbFR5cGU8c2l6ZV90Pih0b2tlbiwgc3RybGVuKHRva2VuKSwgJm9rKTsKLSAgICBp
ZiAoIW9rKQotICAgICAgICB2YWx1ZSA9IG5vdFNldDsKLSAgICByZXR1cm4gdmFsdWU7CisgICAg
c2l6ZV90IHZhbHVlOworICAgIHJldHVybiAoZnNjYW5mKGZpbGUsICIlenUiLCAmdmFsdWUpID09
IDEpID8gdmFsdWUgOiBub3RTZXQ7CiB9CiAKIHNpemVfdCBDR3JvdXBNZW1vcnlDb250cm9sbGVy
OjpnZXRNZW1vcnlUb3RhbFdpdGhDZ3JvdXAoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>396384</attachid>
            <date>2020-04-13 23:32:45 -0700</date>
            <delta_ts>2020-04-18 06:33:27 -0700</delta_ts>
            <desc>patch</desc>
            <filename>bug-210346-20200414083229.patch</filename>
            <type>text/plain</type>
            <size>8970</size>
            <attacher name="Pablo Saavedra">psaavedra</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU5OTQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDUyMzk3MzY1MGU4OTVhMTA5
ZDE5MWU5YzQ2NzIyZGExYmNjMDYwODguLmQ0YjIzODlhMmYyNjQ5MjkxN2ZmNzEwNzY4OTBjN2U2
ZTE2ODRjMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMjAtMDQtMTIgIFBhYmxvIFNh
YXZlZHJhICA8cHNhYXZlZHJhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS11bV1BFXSBSZXBs
YWNlIGV2aWwgc3RydG9rKCkgY2FsbHMgd2l0aCBmc2NhbmYoKSBpbiBNZW1vcnlQcmVzc3VyZU1v
bml0b3IuY3BwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTAzNDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFVJUHJvY2Vzcy9saW51eC9NZW1vcnlQcmVzc3VyZU1vbml0b3IuY3BwOgorICAgICAgICAo
V2ViS2l0Ojpsb3dXYXRlcm1hcmtQYWdlcyk6CisgICAgICAgIChXZWJLaXQ6OmdldENncm91cENv
bnRyb2xsZXJQYXRoKToKKyAgICAgICAgKFdlYktpdDo6c3lzdGVtTWVtb3J5VXNlZEFzUGVyY2Vu
dGFnZSk6CisgICAgICAgIChXZWJLaXQ6OkNHcm91cE1lbW9yeUNvbnRyb2xsZXI6OmdldENncm91
cEZpbGVWYWx1ZSk6CisKIDIwMjAtMDQtMTIgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNp
YUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIFVzZSBnZGtfd2luZG93X21vdmVfdG9fcmVj
dCgpIHRvIHBvc2l0aW9uIHBvcHVwIG1lbnVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9saW51eC9NZW1vcnlQcmVzc3VyZU1vbml0b3IuY3BwIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvbGludXgvTWVtb3J5UHJlc3N1cmVNb25pdG9yLmNwcAppbmRleCAwYTA0ZjA0OGVk
YzliMjU3OTE1NzEwODJmYzA2YTFkMzc1ODdmZjJkLi41Nzc3MzBiMjM0MDZmZTk2M2M5ZjU1OTc1
YTcyZWMxZjhiODZhNjQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9saW51
eC9NZW1vcnlQcmVzc3VyZU1vbml0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2xpbnV4L01lbW9yeVByZXNzdXJlTW9uaXRvci5jcHAKQEAgLTYwLDQ0ICs2MCwyOCBAQCBzdGF0
aWMgY29uc3QgY2hhciogc19wcm9jWm9uZWluZm8gPSAiL3Byb2Mvem9uZWluZm8iOwogc3RhdGlj
IGNvbnN0IGNoYXIqIHNfcHJvY1NlbGZDZ3JvdXAgPSAiL3Byb2Mvc2VsZi9jZ3JvdXAiOwogc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIG1heENncm91cFBhdGggPSA0MDk2OyAvLyBQQVRIX01BWCA9IDQw
OTYgZnJvbSAoTGludXgpIGluY2x1ZGUvdWFwaS9saW51eC9saW1pdHMuaAogCisjZGVmaW5lIFNU
UklOR0lGWV9FWFBBTkRFRCh2YWwpICN2YWwKKyNkZWZpbmUgU1RSSU5HSUZZKHZhbCkgU1RSSU5H
SUZZX0VYUEFOREVEKHZhbCkKKwogc3RhdGljIHNpemVfdCBsb3dXYXRlcm1hcmtQYWdlcyhGSUxF
KiB6b25lSW5mb0ZpbGUpCiB7Ci0gICAgaWYgKCF6b25lSW5mb0ZpbGUpCi0gICAgICAgIHJldHVy
biBub3RTZXQ7Ci0KLSAgICBpZiAoZnNlZWsoem9uZUluZm9GaWxlLCAwLCBTRUVLX1NFVCkpCi0g
ICAgICAgIHJldHVybiBub3RTZXQ7Ci0KICAgICBzaXplX3QgbG93ID0gMDsKLSAgICBib29sIGlu
Wm9uZSA9IGZhbHNlOwotICAgIGJvb2wgZm91bmRMb3cgPSBmYWxzZTsKLSAgICBjaGFyIGJ1ZmZl
clsxMjhdOwotICAgIHdoaWxlIChjaGFyKiBsaW5lID0gZmdldHMoYnVmZmVyLCAxMjgsIHpvbmVJ
bmZvRmlsZSkpIHsKLSAgICAgICAgaWYgKCFzdHJuY21wKGxpbmUsICJOb2RlIiwgNCkpIHsKLSAg
ICAgICAgICAgIGluWm9uZSA9IHRydWU7Ci0gICAgICAgICAgICBmb3VuZExvdyA9IGZhbHNlOwot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KKyAgICBjaGFyIGJ1ZmZlclsxMjggKyAx
XTsKKyAgICBib29sIGluTm9ybWFsWm9uZSA9IGZhbHNlOwogCi0gICAgICAgIGNoYXIqIHRva2Vu
ID0gc3RydG9rKGxpbmUsICIgIik7Ci0gICAgICAgIGlmICghdG9rZW4pCi0gICAgICAgICAgICBj
b250aW51ZTsKKyAgICBpZiAoIXpvbmVJbmZvRmlsZSB8fCBmc2Vlayh6b25lSW5mb0ZpbGUsIDAs
IFNFRUtfU0VUKSkKKyAgICAgICAgcmV0dXJuIG5vdFNldDsKIAotICAgICAgICBpZiAoIXN0cmNt
cCh0b2tlbiwgImxvdyIpKSB7Ci0gICAgICAgICAgICBpZiAoIWluWm9uZSB8fCBmb3VuZExvdykg
ewotICAgICAgICAgICAgICAgIGxvdyA9IG5vdFNldDsKKyAgICB3aGlsZSAoIWZlb2Yoem9uZUlu
Zm9GaWxlKSkgeworICAgICAgICBpbnQgcjsKKyAgICAgICAgciA9IGZzY2FuZih6b25lSW5mb0Zp
bGUsICIgTm9kZSAlKnUsIHpvbmUgJTEyOFteXG5dXG4iLCBidWZmZXIpOworICAgICAgICBpZiAo
ciA9PSAyICYmICFzdHJjbXAoYnVmZmVyLCAiTm9ybWFsIikpCisgICAgICAgICAgICBpbk5vcm1h
bFpvbmUgPSB0cnVlOworICAgICAgICByID0gZnNjYW5mKHpvbmVJbmZvRmlsZSwgIiUxMjhzIiwg
YnVmZmVyKTsKKyAgICAgICAgaWYgKHIgPT0gMSAmJiBpbk5vcm1hbFpvbmUgJiYgIXN0cmNtcChi
dWZmZXIsICJsb3ciKSkgeworICAgICAgICAgICAgciA9IGZzY2FuZih6b25lSW5mb0ZpbGUsICIl
enUiLCAmbG93KTsKKyAgICAgICAgICAgIGlmIChyID09IDEpCiAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0b2tlbiA9IHN0cnRvayhudWxscHRyLCAi
ICIpOwotICAgICAgICAgICAgaWYgKCF0b2tlbikgewotICAgICAgICAgICAgICAgIGxvdyA9IG5v
dFNldDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGJvb2wgb2sgPSB0cnVlOwotICAgICAgICAgICAgYXV0byB2YWx1ZSA9IHRvSW50ZWdyYWxUeXBl
PHNpemVfdD4odG9rZW4sIHN0cmxlbih0b2tlbiksICZvayk7Ci0gICAgICAgICAgICBpZiAob2sp
Ci0gICAgICAgICAgICAgICAgbG93ICs9IHZhbHVlOwotICAgICAgICAgICAgZm91bmRMb3cgPSB0
cnVlOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBsb3c7CkBAIC0xNzUsMjkgKzE1OSwy
MCBAQCBGSUxFKiBnZXRDZ3JvdXBGaWxlKENTdHJpbmcgY2dyb3VwQ29udHJvbGxlck5hbWUsIENT
dHJpbmcgY2dyb3VwQ29udHJvbGxlclBhdGgsCiBzdGF0aWMgQ1N0cmluZyBnZXRDZ3JvdXBDb250
cm9sbGVyUGF0aChGSUxFKiBjZ3JvdXBDb250cm9sbGVyRmlsZSwgY29uc3QgY2hhciogY29udHJv
bGxlck5hbWUpCiB7CiAgICAgQ1N0cmluZyBjZ3JvdXBNZW1vcnlDb250cm9sbGVyUGF0aDsKLSAg
ICBpZiAoIWNncm91cENvbnRyb2xsZXJGaWxlKQotICAgICAgICByZXR1cm4gQ1N0cmluZygpOwot
Ci0gICAgaWYgKGZzZWVrKGNncm91cENvbnRyb2xsZXJGaWxlLCAwLCBTRUVLX1NFVCkpCisgICAg
aWYgKCFjZ3JvdXBDb250cm9sbGVyRmlsZSB8fCBmc2VlayhjZ3JvdXBDb250cm9sbGVyRmlsZSwg
MCwgU0VFS19TRVQpKQogICAgICAgICByZXR1cm4gQ1N0cmluZygpOwogCi0gICAgY2hhciBidWZm
ZXJbbWF4Q2dyb3VwUGF0aF07Ci0gICAgd2hpbGUgKGNoYXIqIGxpbmUgPSBmZ2V0cyhidWZmZXIs
IG1heENncm91cFBhdGgsIGNncm91cENvbnRyb2xsZXJGaWxlKSkgewotICAgICAgICBjaGFyKiB0
b2tlbiA9IHN0cnRvayhsaW5lLCAiXG4iKTsKLSAgICAgICAgaWYgKCF0b2tlbikKLSAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgIHRva2VuID0gc3RydG9rKHRva2VuLCAiOiIpOwotICAgICAg
ICB0b2tlbiA9IHN0cnRvayhudWxscHRyLCAiOiIpOwotICAgICAgICBpZiAoIXN0cmNtcCh0b2tl
biwgY29udHJvbGxlck5hbWUpKSB7Ci0gICAgICAgICAgICB0b2tlbiA9IHN0cnRvayhudWxscHRy
LCAiOiIpOwotICAgICAgICAgICAgY2dyb3VwTWVtb3J5Q29udHJvbGxlclBhdGggPSBDU3RyaW5n
KHRva2VuKTsKLSAgICAgICAgICAgIHJldHVybiBjZ3JvdXBNZW1vcnlDb250cm9sbGVyUGF0aDsK
LSAgICAgICAgfQotICAgICAgICBpZiAoIXN0cm5jbXAodG9rZW4sICJuYW1lPXN5c3RlbWQiLCAx
MikpIHsKLSAgICAgICAgICAgIHRva2VuID0gc3RydG9rKG51bGxwdHIsICI6Iik7Ci0gICAgICAg
ICAgICBjZ3JvdXBNZW1vcnlDb250cm9sbGVyUGF0aCA9IENTdHJpbmcodG9rZW4pOworICAgIHdo
aWxlICghZmVvZihjZ3JvdXBDb250cm9sbGVyRmlsZSkpIHsKKyAgICAgICAgY2hhciBuYW1lWzQw
ICsgMV07CisgICAgICAgIGNoYXIgcGF0aFttYXhDZ3JvdXBQYXRoICsgMV07CisgICAgICAgIGlu
dCBzY2FuUmVzdWx0ID0gZnNjYW5mKGNncm91cENvbnRyb2xsZXJGaWxlLCAiJSp1OiU0MFteOl06
JSIgU1RSSU5HSUZZKFBBVEhfTUFYKSAiW15cbl0iLCBuYW1lLCBwYXRoKTsKKyAgICAgICAgaWYg
KHNjYW5SZXN1bHQgIT0gMikKKyAgICAgICAgICAgIHJldHVybiBDU3RyaW5nKCk7CisgICAgICAg
IGlmICghc3RyY21wKG5hbWUsIGNvbnRyb2xsZXJOYW1lKSkgeworICAgICAgICAgICAgcmV0dXJu
IENTdHJpbmcocGF0aCk7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKCFzdHJjbXAobmFtZSwgIm5h
bWU9c3lzdGVtZCIpKQorICAgICAgICAgICAgY2dyb3VwTWVtb3J5Q29udHJvbGxlclBhdGggPSBD
U3RyaW5nKHBhdGgpOwogICAgIH0KICAgICByZXR1cm4gY2dyb3VwTWVtb3J5Q29udHJvbGxlclBh
dGg7CiB9CkBAIC0yMDUsNjUgKzE4MCwyOSBAQCBzdGF0aWMgQ1N0cmluZyBnZXRDZ3JvdXBDb250
cm9sbGVyUGF0aChGSUxFKiBjZ3JvdXBDb250cm9sbGVyRmlsZSwgY29uc3QgY2hhciogYwogCiBz
dGF0aWMgaW50IHN5c3RlbU1lbW9yeVVzZWRBc1BlcmNlbnRhZ2UoRklMRSogbWVtSW5mb0ZpbGUs
IEZJTEUqIHpvbmVJbmZvRmlsZSwgQ0dyb3VwTWVtb3J5Q29udHJvbGxlciogbWVtb3J5Q29udHJv
bGxlcikKIHsKLSAgICBpZiAoIW1lbUluZm9GaWxlKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAg
ICBpZiAoZnNlZWsobWVtSW5mb0ZpbGUsIDAsIFNFRUtfU0VUKSkKKyAgICBpZiAoIW1lbUluZm9G
aWxlIHx8IGZzZWVrKG1lbUluZm9GaWxlLCAwLCBTRUVLX1NFVCkpCiAgICAgICAgIHJldHVybiAt
MTsKIAogICAgIHNpemVfdCBtZW1vcnlBdmFpbGFibGUsIG1lbW9yeVRvdGFsLCBtZW1vcnlGcmVl
LCBhY3RpdmVGaWxlLCBpbmFjdGl2ZUZpbGUsIHNsYWJSZWNsYWltYWJsZTsKICAgICBtZW1vcnlB
dmFpbGFibGUgPSBtZW1vcnlUb3RhbCA9IG1lbW9yeUZyZWUgPSBhY3RpdmVGaWxlID0gaW5hY3Rp
dmVGaWxlID0gc2xhYlJlY2xhaW1hYmxlID0gbm90U2V0OwotICAgIGNoYXIgYnVmZmVyWzEyOF07
Ci0gICAgd2hpbGUgKGNoYXIqIGxpbmUgPSBmZ2V0cyhidWZmZXIsIDEyOCwgbWVtSW5mb0ZpbGUp
KSB7Ci0gICAgICAgIGNoYXIqIHRva2VuID0gc3RydG9rKGxpbmUsICIgIik7Ci0gICAgICAgIGJv
b2wgb2sgPSB0cnVlOwotICAgICAgICBpZiAoIXRva2VuKQotICAgICAgICAgICAgYnJlYWs7CiAK
LSAgICAgICAgaWYgKCFzdHJjbXAodG9rZW4sICJNZW1BdmFpbGFibGU6IikpIHsKLSAgICAgICAg
ICAgIGlmICgodG9rZW4gPSBzdHJ0b2sobnVsbHB0ciwgIiAiKSkpIHsKLSAgICAgICAgICAgICAg
ICBtZW1vcnlBdmFpbGFibGUgPSB0b0ludGVncmFsVHlwZTxzaXplX3Q+KHRva2VuLCBzdHJsZW4o
dG9rZW4pLCAmb2spOwotICAgICAgICAgICAgICAgIGlmICghb2spCi0gICAgICAgICAgICAgICAg
ICAgIG1lbW9yeUF2YWlsYWJsZSA9IG5vdFNldDsKLSAgICAgICAgICAgICAgICBpZiAobWVtb3J5
VG90YWwgIT0gbm90U2V0KQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKHRva2VuLCAiTWVtVG90YWw6IikpIHsKLSAg
ICAgICAgICAgIGlmICgodG9rZW4gPSBzdHJ0b2sobnVsbHB0ciwgIiAiKSkpIHsKLSAgICAgICAg
ICAgICAgICBtZW1vcnlUb3RhbCA9IHRvSW50ZWdyYWxUeXBlPHNpemVfdD4odG9rZW4sIHN0cmxl
bih0b2tlbiksICZvayk7Ci0gICAgICAgICAgICAgICAgaWYgKCFvaykKLSAgICAgICAgICAgICAg
ICAgICAgbWVtb3J5VG90YWwgPSBub3RTZXQ7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKHRva2VuLCAiTWVtRnJl
ZToiKSkgewotICAgICAgICAgICAgaWYgKCh0b2tlbiA9IHN0cnRvayhudWxscHRyLCAiICIpKSkg
ewotICAgICAgICAgICAgICAgIG1lbW9yeUZyZWUgPSB0b0ludGVncmFsVHlwZTxzaXplX3Q+KHRv
a2VuLCBzdHJsZW4odG9rZW4pLCAmb2spOwotICAgICAgICAgICAgICAgIGlmICghb2spCi0gICAg
ICAgICAgICAgICAgICAgIG1lbW9yeUZyZWUgPSBub3RTZXQ7Ci0gICAgICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKHRva2Vu
LCAiQWN0aXZlKGZpbGUpOiIpKSB7Ci0gICAgICAgICAgICBpZiAoKHRva2VuID0gc3RydG9rKG51
bGxwdHIsICIgIikpKSB7Ci0gICAgICAgICAgICAgICAgYWN0aXZlRmlsZSA9IHRvSW50ZWdyYWxU
eXBlPHNpemVfdD4odG9rZW4sIHN0cmxlbih0b2tlbiksICZvayk7Ci0gICAgICAgICAgICAgICAg
aWYgKCFvaykKLSAgICAgICAgICAgICAgICAgICAgYWN0aXZlRmlsZSA9IG5vdFNldDsKLSAgICAg
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9IGVsc2UgaWYg
KCFzdHJjbXAodG9rZW4sICJJbmFjdGl2ZShmaWxlKToiKSkgewotICAgICAgICAgICAgaWYgKCh0
b2tlbiA9IHN0cnRvayhudWxscHRyLCAiICIpKSkgewotICAgICAgICAgICAgICAgIGluYWN0aXZl
RmlsZSA9IHRvSW50ZWdyYWxUeXBlPHNpemVfdD4odG9rZW4sIHN0cmxlbih0b2tlbiksICZvayk7
Ci0gICAgICAgICAgICAgICAgaWYgKCFvaykKLSAgICAgICAgICAgICAgICAgICAgaW5hY3RpdmVG
aWxlID0gbm90U2V0OwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcCh0b2tlbiwgIlNSZWNsYWltYWJsZToiKSkgewot
ICAgICAgICAgICAgaWYgKCh0b2tlbiA9IHN0cnRvayhudWxscHRyLCAiICIpKSkgewotICAgICAg
ICAgICAgICAgIHNsYWJSZWNsYWltYWJsZSA9IHRvSW50ZWdyYWxUeXBlPHNpemVfdD4odG9rZW4s
IHN0cmxlbih0b2tlbiksICZvayk7Ci0gICAgICAgICAgICAgICAgaWYgKCFvaykKLSAgICAgICAg
ICAgICAgICAgICAgc2xhYlJlY2xhaW1hYmxlID0gbm90U2V0OwotICAgICAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICB3aGlsZSAoIWZlb2YobWVt
SW5mb0ZpbGUpKSB7CisgICAgICAgIGNoYXIgdG9rZW5bNTAgKyAxXTsKKyAgICAgICAgc2l6ZV90
IGFtb3VudDsKKyAgICAgICAgaWYgKGZzY2FuZihtZW1JbmZvRmlsZSwgIiU1MHMlenVrQiIsIHRv
a2VuLCAmYW1vdW50KSAhPSAyKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmICgh
c3RyY21wKHRva2VuLCAiTWVtVG90YWw6IikpCisgICAgICAgICAgICBtZW1vcnlUb3RhbCA9IGFt
b3VudDsKKyAgICAgICAgZWxzZSBpZiAoIXN0cmNtcCh0b2tlbiwgIk1lbUZyZWU6IikpCisgICAg
ICAgICAgICBtZW1vcnlGcmVlID0gYW1vdW50OworICAgICAgICBlbHNlIGlmICghc3RyY21wKHRv
a2VuLCAiTWVtQXZhaWxhYmxlOiIpKQorICAgICAgICAgICAgbWVtb3J5QXZhaWxhYmxlID0gYW1v
dW50OworICAgICAgICBlbHNlIGlmICghc3RyY21wKHRva2VuLCAiQWN0aXZlKGZpbGUpOiIpKQor
ICAgICAgICAgICAgYWN0aXZlRmlsZSA9IGFtb3VudDsKKyAgICAgICAgZWxzZSBpZiAoIXN0cmNt
cCh0b2tlbiwgIkluYWN0aXZlKGZpbGUpOiIpKQorICAgICAgICAgICAgaW5hY3RpdmVGaWxlID0g
YW1vdW50OworICAgICAgICBlbHNlIGlmICghc3RyY21wKHRva2VuLCAiU1JlY2xhaW1hYmxlOiIp
KQorICAgICAgICAgICAgc2xhYlJlY2xhaW1hYmxlID0gYW1vdW50OwogCiAgICAgICAgIGlmICht
ZW1vcnlUb3RhbCAhPSBub3RTZXQgJiYgbWVtb3J5RnJlZSAhPSBub3RTZXQgJiYgYWN0aXZlRmls
ZSAhPSBub3RTZXQgJiYgaW5hY3RpdmVGaWxlICE9IG5vdFNldCAmJiBzbGFiUmVjbGFpbWFibGUg
IT0gbm90U2V0KQogICAgICAgICAgICAgYnJlYWs7CkBAIC00MDIsMjIgKzM0MSwxMSBAQCB2b2lk
IENHcm91cE1lbW9yeUNvbnRyb2xsZXI6OmRpc3Bvc2VNZW1vcnlDb250cm9sbGVyKCkKIAogc2l6
ZV90IENHcm91cE1lbW9yeUNvbnRyb2xsZXI6OmdldENncm91cEZpbGVWYWx1ZShGSUxFICpmaWxl
KQogewotICAgIGNoYXIgYnVmZmVyWzEyOF07Ci0gICAgY2hhciogdG9rZW47Ci0gICAgYm9vbCBv
ayA9IHRydWU7Ci0KLSAgICBpZiAoIWZpbGUpCisgICAgaWYgKCFmaWxlIHx8IGZzZWVrKGZpbGUs
IDAsIFNFRUtfU0VUKSkKICAgICAgICAgcmV0dXJuIG5vdFNldDsKIAotICAgIGlmIChmc2Vlayhm
aWxlLCAwLCBTRUVLX1NFVCkpCi0gICAgICAgIHJldHVybiBub3RTZXQ7Ci0KLSAgICB0b2tlbiA9
IGZnZXRzKGJ1ZmZlciwgMTI4LCBmaWxlKTsKLQotICAgIHNpemVfdCB2YWx1ZSA9IHRvSW50ZWdy
YWxUeXBlPHNpemVfdD4odG9rZW4sIHN0cmxlbih0b2tlbiksICZvayk7Ci0gICAgaWYgKCFvaykK
LSAgICAgICAgdmFsdWUgPSBub3RTZXQ7Ci0gICAgcmV0dXJuIHZhbHVlOworICAgIHNpemVfdCB2
YWx1ZTsKKyAgICByZXR1cm4gKGZzY2FuZihmaWxlLCAiJXp1IiwgJnZhbHVlKSA9PSAxKSA/IHZh
bHVlIDogbm90U2V0OwogfQogCiBzaXplX3QgQ0dyb3VwTWVtb3J5Q29udHJvbGxlcjo6Z2V0TWVt
b3J5VG90YWxXaXRoQ2dyb3VwKCkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>396845</attachid>
            <date>2020-04-18 06:33:32 -0700</date>
            <delta_ts>2020-04-18 10:17:17 -0700</delta_ts>
            <desc>patch</desc>
            <filename>bug-210346-20200418153308.patch</filename>
            <type>text/plain</type>
            <size>9309</size>
            <attacher name="Pablo Saavedra">psaavedra</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU5OTQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDUyMzk3MzY1MGU4OTVhMTA5
ZDE5MWU5YzQ2NzIyZGExYmNjMDYwODguLjJmYWRjOTMwOGU4ODU2ZjhjYmMzZWFmNzdmMWJmMGU3
M2QxMzAyZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMjAtMDQtMTIgIFBhYmxvIFNh
YXZlZHJhICA8cHNhYXZlZHJhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS11bV1BFXSBSZXBs
YWNlIGV2aWwgc3RydG9rKCkgY2FsbHMgd2l0aCBmc2NhbmYoKSBpbiBNZW1vcnlQcmVzc3VyZU1v
bml0b3IuY3BwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTAzNDYKKworICAgICAgICBSZXZpZXdlZCBieSBBZHJpYW4gUGVyZXogZGUgQ2FzdHJvLgor
CisgICAgICAgICogVUlQcm9jZXNzL2xpbnV4L01lbW9yeVByZXNzdXJlTW9uaXRvci5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6Omxvd1dhdGVybWFya1BhZ2VzKToKKyAgICAgICAgKFdlYktpdDo6Z2V0
Q2dyb3VwQ29udHJvbGxlclBhdGgpOgorICAgICAgICAoV2ViS2l0OjpzeXN0ZW1NZW1vcnlVc2Vk
QXNQZXJjZW50YWdlKToKKyAgICAgICAgKFdlYktpdDo6Q0dyb3VwTWVtb3J5Q29udHJvbGxlcjo6
Z2V0Q2dyb3VwRmlsZVZhbHVlKToKKwogMjAyMC0wNC0xMiAgQ2FybG9zIEdhcmNpYSBDYW1wb3Mg
IDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gVXNlIGdka193aW5kb3dfbW92
ZV90b19yZWN0KCkgdG8gcG9zaXRpb24gcG9wdXAgbWVudXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2xpbnV4L01lbW9yeVByZXNzdXJlTW9uaXRvci5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9saW51eC9NZW1vcnlQcmVzc3VyZU1vbml0b3IuY3BwCmluZGV4IDBh
MDRmMDQ4ZWRjOWIyNTc5MTU3MTA4MmZjMDZhMWQzNzU4N2ZmMmQuLmVlNDM5MmMwOGVlOTFjM2Ex
ZDM1MTIyMzIwMTAzMzEzNzhhMzE3NDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL2xpbnV4L01lbW9yeVByZXNzdXJlTW9uaXRvci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvbGludXgvTWVtb3J5UHJlc3N1cmVNb25pdG9yLmNwcApAQCAtNjAsNDQgKzYwLDMx
IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBzX3Byb2Nab25laW5mbyA9ICIvcHJvYy96b25laW5mbyI7
CiBzdGF0aWMgY29uc3QgY2hhciogc19wcm9jU2VsZkNncm91cCA9ICIvcHJvYy9zZWxmL2Nncm91
cCI7CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4Q2dyb3VwUGF0aCA9IDQwOTY7IC8vIFBBVEhf
TUFYID0gNDA5NiBmcm9tIChMaW51eCkgaW5jbHVkZS91YXBpL2xpbnV4L2xpbWl0cy5oCiAKKyNk
ZWZpbmUgQ0dST1VQX05BTUVfQlVGRkVSX1NJWkUgNDAKKyNkZWZpbmUgTUVNSU5GT19UT0tFTl9C
VUZGRVJfU0laRSA1MAorI2RlZmluZSBTVFJJTkdJRllfRVhQQU5ERUQodmFsKSAjdmFsCisjZGVm
aW5lIFNUUklOR0lGWSh2YWwpIFNUUklOR0lGWV9FWFBBTkRFRCh2YWwpCisjZGVmaW5lIFpPTkVJ
TkZPX1RPS0VOX0JVRkZFUl9TSVpFIDEyOAorCiBzdGF0aWMgc2l6ZV90IGxvd1dhdGVybWFya1Bh
Z2VzKEZJTEUqIHpvbmVJbmZvRmlsZSkKIHsKLSAgICBpZiAoIXpvbmVJbmZvRmlsZSkKLSAgICAg
ICAgcmV0dXJuIG5vdFNldDsKLQotICAgIGlmIChmc2Vlayh6b25lSW5mb0ZpbGUsIDAsIFNFRUtf
U0VUKSkKLSAgICAgICAgcmV0dXJuIG5vdFNldDsKLQogICAgIHNpemVfdCBsb3cgPSAwOwotICAg
IGJvb2wgaW5ab25lID0gZmFsc2U7Ci0gICAgYm9vbCBmb3VuZExvdyA9IGZhbHNlOwotICAgIGNo
YXIgYnVmZmVyWzEyOF07Ci0gICAgd2hpbGUgKGNoYXIqIGxpbmUgPSBmZ2V0cyhidWZmZXIsIDEy
OCwgem9uZUluZm9GaWxlKSkgewotICAgICAgICBpZiAoIXN0cm5jbXAobGluZSwgIk5vZGUiLCA0
KSkgewotICAgICAgICAgICAgaW5ab25lID0gdHJ1ZTsKLSAgICAgICAgICAgIGZvdW5kTG93ID0g
ZmFsc2U7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQorICAgIGNoYXIgYnVmZmVy
W1pPTkVJTkZPX1RPS0VOX0JVRkZFUl9TSVpFICsgMV07CisgICAgYm9vbCBpbk5vcm1hbFpvbmUg
PSBmYWxzZTsKIAotICAgICAgICBjaGFyKiB0b2tlbiA9IHN0cnRvayhsaW5lLCAiICIpOwotICAg
ICAgICBpZiAoIXRva2VuKQotICAgICAgICAgICAgY29udGludWU7CisgICAgaWYgKCF6b25lSW5m
b0ZpbGUgfHwgZnNlZWsoem9uZUluZm9GaWxlLCAwLCBTRUVLX1NFVCkpCisgICAgICAgIHJldHVy
biBub3RTZXQ7CiAKLSAgICAgICAgaWYgKCFzdHJjbXAodG9rZW4sICJsb3ciKSkgewotICAgICAg
ICAgICAgaWYgKCFpblpvbmUgfHwgZm91bmRMb3cpIHsKLSAgICAgICAgICAgICAgICBsb3cgPSBu
b3RTZXQ7CisgICAgd2hpbGUgKCFmZW9mKHpvbmVJbmZvRmlsZSkpIHsKKyAgICAgICAgaW50IHI7
CisgICAgICAgIHIgPSBmc2NhbmYoem9uZUluZm9GaWxlLCAiIE5vZGUgJSp1LCB6b25lICUiIFNU
UklOR0lGWShaT05FSU5GT19UT0tFTl9CVUZGRVJfU0laRSkgIlteXG5dXG4iLCBidWZmZXIpOwor
ICAgICAgICBpZiAociA9PSAyICYmICFzdHJjbXAoYnVmZmVyLCAiTm9ybWFsIikpCisgICAgICAg
ICAgICBpbk5vcm1hbFpvbmUgPSB0cnVlOworICAgICAgICByID0gZnNjYW5mKHpvbmVJbmZvRmls
ZSwgIiUiIFNUUklOR0lGWShaT05FSU5GT19UT0tFTl9CVUZGRVJfU0laRSkgInMiLCBidWZmZXIp
OworICAgICAgICBpZiAociA9PSAxICYmIGluTm9ybWFsWm9uZSAmJiAhc3RyY21wKGJ1ZmZlciwg
ImxvdyIpKSB7CisgICAgICAgICAgICByID0gZnNjYW5mKHpvbmVJbmZvRmlsZSwgIiV6dSIsICZs
b3cpOworICAgICAgICAgICAgaWYgKHIgPT0gMSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHRva2VuID0gc3RydG9rKG51bGxwdHIsICIgIik7Ci0g
ICAgICAgICAgICBpZiAoIXRva2VuKSB7Ci0gICAgICAgICAgICAgICAgbG93ID0gbm90U2V0Owot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYm9vbCBv
ayA9IHRydWU7Ci0gICAgICAgICAgICBhdXRvIHZhbHVlID0gdG9JbnRlZ3JhbFR5cGU8c2l6ZV90
Pih0b2tlbiwgc3RybGVuKHRva2VuKSwgJm9rKTsKLSAgICAgICAgICAgIGlmIChvaykKLSAgICAg
ICAgICAgICAgICBsb3cgKz0gdmFsdWU7Ci0gICAgICAgICAgICBmb3VuZExvdyA9IHRydWU7CiAg
ICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIGxvdzsKQEAgLTE3NSwyOSArMTYyLDIwIEBAIEZJ
TEUqIGdldENncm91cEZpbGUoQ1N0cmluZyBjZ3JvdXBDb250cm9sbGVyTmFtZSwgQ1N0cmluZyBj
Z3JvdXBDb250cm9sbGVyUGF0aCwKIHN0YXRpYyBDU3RyaW5nIGdldENncm91cENvbnRyb2xsZXJQ
YXRoKEZJTEUqIGNncm91cENvbnRyb2xsZXJGaWxlLCBjb25zdCBjaGFyKiBjb250cm9sbGVyTmFt
ZSkKIHsKICAgICBDU3RyaW5nIGNncm91cE1lbW9yeUNvbnRyb2xsZXJQYXRoOwotICAgIGlmICgh
Y2dyb3VwQ29udHJvbGxlckZpbGUpCi0gICAgICAgIHJldHVybiBDU3RyaW5nKCk7Ci0KLSAgICBp
ZiAoZnNlZWsoY2dyb3VwQ29udHJvbGxlckZpbGUsIDAsIFNFRUtfU0VUKSkKKyAgICBpZiAoIWNn
cm91cENvbnRyb2xsZXJGaWxlIHx8IGZzZWVrKGNncm91cENvbnRyb2xsZXJGaWxlLCAwLCBTRUVL
X1NFVCkpCiAgICAgICAgIHJldHVybiBDU3RyaW5nKCk7CiAKLSAgICBjaGFyIGJ1ZmZlclttYXhD
Z3JvdXBQYXRoXTsKLSAgICB3aGlsZSAoY2hhciogbGluZSA9IGZnZXRzKGJ1ZmZlciwgbWF4Q2dy
b3VwUGF0aCwgY2dyb3VwQ29udHJvbGxlckZpbGUpKSB7Ci0gICAgICAgIGNoYXIqIHRva2VuID0g
c3RydG9rKGxpbmUsICJcbiIpOwotICAgICAgICBpZiAoIXRva2VuKQotICAgICAgICAgICAgYnJl
YWs7Ci0KLSAgICAgICAgdG9rZW4gPSBzdHJ0b2sodG9rZW4sICI6Iik7Ci0gICAgICAgIHRva2Vu
ID0gc3RydG9rKG51bGxwdHIsICI6Iik7Ci0gICAgICAgIGlmICghc3RyY21wKHRva2VuLCBjb250
cm9sbGVyTmFtZSkpIHsKLSAgICAgICAgICAgIHRva2VuID0gc3RydG9rKG51bGxwdHIsICI6Iik7
Ci0gICAgICAgICAgICBjZ3JvdXBNZW1vcnlDb250cm9sbGVyUGF0aCA9IENTdHJpbmcodG9rZW4p
OwotICAgICAgICAgICAgcmV0dXJuIGNncm91cE1lbW9yeUNvbnRyb2xsZXJQYXRoOwotICAgICAg
ICB9Ci0gICAgICAgIGlmICghc3RybmNtcCh0b2tlbiwgIm5hbWU9c3lzdGVtZCIsIDEyKSkgewot
ICAgICAgICAgICAgdG9rZW4gPSBzdHJ0b2sobnVsbHB0ciwgIjoiKTsKLSAgICAgICAgICAgIGNn
cm91cE1lbW9yeUNvbnRyb2xsZXJQYXRoID0gQ1N0cmluZyh0b2tlbik7CisgICAgd2hpbGUgKCFm
ZW9mKGNncm91cENvbnRyb2xsZXJGaWxlKSkgeworICAgICAgICBjaGFyIG5hbWVbQ0dST1VQX05B
TUVfQlVGRkVSX1NJWkUgKyAxXTsKKyAgICAgICAgY2hhciBwYXRoW21heENncm91cFBhdGggKyAx
XTsKKyAgICAgICAgaW50IHNjYW5SZXN1bHQgPSBmc2NhbmYoY2dyb3VwQ29udHJvbGxlckZpbGUs
ICIlKnU6JSIgU1RSSU5HSUZZKENHUk9VUF9OQU1FX0JVRkZFUl9TSVpFKSAiW146XTolIiBTVFJJ
TkdJRlkoUEFUSF9NQVgpICJbXlxuXSIsIG5hbWUsIHBhdGgpOworICAgICAgICBpZiAoc2NhblJl
c3VsdCAhPSAyKQorICAgICAgICAgICAgcmV0dXJuIENTdHJpbmcoKTsKKyAgICAgICAgaWYgKCFz
dHJjbXAobmFtZSwgY29udHJvbGxlck5hbWUpKSB7CisgICAgICAgICAgICByZXR1cm4gQ1N0cmlu
ZyhwYXRoKTsKICAgICAgICAgfQorICAgICAgICBpZiAoIXN0cmNtcChuYW1lLCAibmFtZT1zeXN0
ZW1kIikpCisgICAgICAgICAgICBjZ3JvdXBNZW1vcnlDb250cm9sbGVyUGF0aCA9IENTdHJpbmco
cGF0aCk7CiAgICAgfQogICAgIHJldHVybiBjZ3JvdXBNZW1vcnlDb250cm9sbGVyUGF0aDsKIH0K
QEAgLTIwNSw2NSArMTgzLDI5IEBAIHN0YXRpYyBDU3RyaW5nIGdldENncm91cENvbnRyb2xsZXJQ
YXRoKEZJTEUqIGNncm91cENvbnRyb2xsZXJGaWxlLCBjb25zdCBjaGFyKiBjCiAKIHN0YXRpYyBp
bnQgc3lzdGVtTWVtb3J5VXNlZEFzUGVyY2VudGFnZShGSUxFKiBtZW1JbmZvRmlsZSwgRklMRSog
em9uZUluZm9GaWxlLCBDR3JvdXBNZW1vcnlDb250cm9sbGVyKiBtZW1vcnlDb250cm9sbGVyKQog
ewotICAgIGlmICghbWVtSW5mb0ZpbGUpCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIGlmIChm
c2VlayhtZW1JbmZvRmlsZSwgMCwgU0VFS19TRVQpKQorICAgIGlmICghbWVtSW5mb0ZpbGUgfHwg
ZnNlZWsobWVtSW5mb0ZpbGUsIDAsIFNFRUtfU0VUKSkKICAgICAgICAgcmV0dXJuIC0xOwogCiAg
ICAgc2l6ZV90IG1lbW9yeUF2YWlsYWJsZSwgbWVtb3J5VG90YWwsIG1lbW9yeUZyZWUsIGFjdGl2
ZUZpbGUsIGluYWN0aXZlRmlsZSwgc2xhYlJlY2xhaW1hYmxlOwogICAgIG1lbW9yeUF2YWlsYWJs
ZSA9IG1lbW9yeVRvdGFsID0gbWVtb3J5RnJlZSA9IGFjdGl2ZUZpbGUgPSBpbmFjdGl2ZUZpbGUg
PSBzbGFiUmVjbGFpbWFibGUgPSBub3RTZXQ7Ci0gICAgY2hhciBidWZmZXJbMTI4XTsKLSAgICB3
aGlsZSAoY2hhciogbGluZSA9IGZnZXRzKGJ1ZmZlciwgMTI4LCBtZW1JbmZvRmlsZSkpIHsKLSAg
ICAgICAgY2hhciogdG9rZW4gPSBzdHJ0b2sobGluZSwgIiAiKTsKLSAgICAgICAgYm9vbCBvayA9
IHRydWU7Ci0gICAgICAgIGlmICghdG9rZW4pCi0gICAgICAgICAgICBicmVhazsKIAotICAgICAg
ICBpZiAoIXN0cmNtcCh0b2tlbiwgIk1lbUF2YWlsYWJsZToiKSkgewotICAgICAgICAgICAgaWYg
KCh0b2tlbiA9IHN0cnRvayhudWxscHRyLCAiICIpKSkgewotICAgICAgICAgICAgICAgIG1lbW9y
eUF2YWlsYWJsZSA9IHRvSW50ZWdyYWxUeXBlPHNpemVfdD4odG9rZW4sIHN0cmxlbih0b2tlbiks
ICZvayk7Ci0gICAgICAgICAgICAgICAgaWYgKCFvaykKLSAgICAgICAgICAgICAgICAgICAgbWVt
b3J5QXZhaWxhYmxlID0gbm90U2V0OwotICAgICAgICAgICAgICAgIGlmIChtZW1vcnlUb3RhbCAh
PSBub3RTZXQpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg
ICAgICB9IGVsc2UgaWYgKCFzdHJjbXAodG9rZW4sICJNZW1Ub3RhbDoiKSkgewotICAgICAgICAg
ICAgaWYgKCh0b2tlbiA9IHN0cnRvayhudWxscHRyLCAiICIpKSkgewotICAgICAgICAgICAgICAg
IG1lbW9yeVRvdGFsID0gdG9JbnRlZ3JhbFR5cGU8c2l6ZV90Pih0b2tlbiwgc3RybGVuKHRva2Vu
KSwgJm9rKTsKLSAgICAgICAgICAgICAgICBpZiAoIW9rKQotICAgICAgICAgICAgICAgICAgICBt
ZW1vcnlUb3RhbCA9IG5vdFNldDsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAodG9rZW4sICJNZW1GcmVlOiIpKSB7
Ci0gICAgICAgICAgICBpZiAoKHRva2VuID0gc3RydG9rKG51bGxwdHIsICIgIikpKSB7Ci0gICAg
ICAgICAgICAgICAgbWVtb3J5RnJlZSA9IHRvSW50ZWdyYWxUeXBlPHNpemVfdD4odG9rZW4sIHN0
cmxlbih0b2tlbiksICZvayk7Ci0gICAgICAgICAgICAgICAgaWYgKCFvaykKLSAgICAgICAgICAg
ICAgICAgICAgbWVtb3J5RnJlZSA9IG5vdFNldDsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAodG9rZW4sICJBY3Rp
dmUoZmlsZSk6IikpIHsKLSAgICAgICAgICAgIGlmICgodG9rZW4gPSBzdHJ0b2sobnVsbHB0ciwg
IiAiKSkpIHsKLSAgICAgICAgICAgICAgICBhY3RpdmVGaWxlID0gdG9JbnRlZ3JhbFR5cGU8c2l6
ZV90Pih0b2tlbiwgc3RybGVuKHRva2VuKSwgJm9rKTsKLSAgICAgICAgICAgICAgICBpZiAoIW9r
KQotICAgICAgICAgICAgICAgICAgICBhY3RpdmVGaWxlID0gbm90U2V0OwotICAgICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0gZWxzZSBpZiAoIXN0cmNt
cCh0b2tlbiwgIkluYWN0aXZlKGZpbGUpOiIpKSB7Ci0gICAgICAgICAgICBpZiAoKHRva2VuID0g
c3RydG9rKG51bGxwdHIsICIgIikpKSB7Ci0gICAgICAgICAgICAgICAgaW5hY3RpdmVGaWxlID0g
dG9JbnRlZ3JhbFR5cGU8c2l6ZV90Pih0b2tlbiwgc3RybGVuKHRva2VuKSwgJm9rKTsKLSAgICAg
ICAgICAgICAgICBpZiAoIW9rKQotICAgICAgICAgICAgICAgICAgICBpbmFjdGl2ZUZpbGUgPSBu
b3RTZXQ7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfSBlbHNlIGlmICghc3RyY21wKHRva2VuLCAiU1JlY2xhaW1hYmxlOiIpKSB7Ci0gICAgICAg
ICAgICBpZiAoKHRva2VuID0gc3RydG9rKG51bGxwdHIsICIgIikpKSB7Ci0gICAgICAgICAgICAg
ICAgc2xhYlJlY2xhaW1hYmxlID0gdG9JbnRlZ3JhbFR5cGU8c2l6ZV90Pih0b2tlbiwgc3RybGVu
KHRva2VuKSwgJm9rKTsKLSAgICAgICAgICAgICAgICBpZiAoIW9rKQotICAgICAgICAgICAgICAg
ICAgICBzbGFiUmVjbGFpbWFibGUgPSBub3RTZXQ7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAgIHdoaWxlICghZmVvZihtZW1JbmZvRmls
ZSkpIHsKKyAgICAgICAgY2hhciB0b2tlbltNRU1JTkZPX1RPS0VOX0JVRkZFUl9TSVpFICsgMV07
CisgICAgICAgIHNpemVfdCBhbW91bnQ7CisgICAgICAgIGlmIChmc2NhbmYobWVtSW5mb0ZpbGUs
ICIlIiBTVFJJTkdJRlkoTUVNSU5GT19UT0tFTl9CVUZGRVJfU0laRSkgInMlenVrQiIsIHRva2Vu
LCAmYW1vdW50KSAhPSAyKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmICghc3Ry
Y21wKHRva2VuLCAiTWVtVG90YWw6IikpCisgICAgICAgICAgICBtZW1vcnlUb3RhbCA9IGFtb3Vu
dDsKKyAgICAgICAgZWxzZSBpZiAoIXN0cmNtcCh0b2tlbiwgIk1lbUZyZWU6IikpCisgICAgICAg
ICAgICBtZW1vcnlGcmVlID0gYW1vdW50OworICAgICAgICBlbHNlIGlmICghc3RyY21wKHRva2Vu
LCAiTWVtQXZhaWxhYmxlOiIpKQorICAgICAgICAgICAgbWVtb3J5QXZhaWxhYmxlID0gYW1vdW50
OworICAgICAgICBlbHNlIGlmICghc3RyY21wKHRva2VuLCAiQWN0aXZlKGZpbGUpOiIpKQorICAg
ICAgICAgICAgYWN0aXZlRmlsZSA9IGFtb3VudDsKKyAgICAgICAgZWxzZSBpZiAoIXN0cmNtcCh0
b2tlbiwgIkluYWN0aXZlKGZpbGUpOiIpKQorICAgICAgICAgICAgaW5hY3RpdmVGaWxlID0gYW1v
dW50OworICAgICAgICBlbHNlIGlmICghc3RyY21wKHRva2VuLCAiU1JlY2xhaW1hYmxlOiIpKQor
ICAgICAgICAgICAgc2xhYlJlY2xhaW1hYmxlID0gYW1vdW50OwogCiAgICAgICAgIGlmIChtZW1v
cnlUb3RhbCAhPSBub3RTZXQgJiYgbWVtb3J5RnJlZSAhPSBub3RTZXQgJiYgYWN0aXZlRmlsZSAh
PSBub3RTZXQgJiYgaW5hY3RpdmVGaWxlICE9IG5vdFNldCAmJiBzbGFiUmVjbGFpbWFibGUgIT0g
bm90U2V0KQogICAgICAgICAgICAgYnJlYWs7CkBAIC00MDIsMjIgKzM0NCwxMSBAQCB2b2lkIENH
cm91cE1lbW9yeUNvbnRyb2xsZXI6OmRpc3Bvc2VNZW1vcnlDb250cm9sbGVyKCkKIAogc2l6ZV90
IENHcm91cE1lbW9yeUNvbnRyb2xsZXI6OmdldENncm91cEZpbGVWYWx1ZShGSUxFICpmaWxlKQog
ewotICAgIGNoYXIgYnVmZmVyWzEyOF07Ci0gICAgY2hhciogdG9rZW47Ci0gICAgYm9vbCBvayA9
IHRydWU7Ci0KLSAgICBpZiAoIWZpbGUpCisgICAgaWYgKCFmaWxlIHx8IGZzZWVrKGZpbGUsIDAs
IFNFRUtfU0VUKSkKICAgICAgICAgcmV0dXJuIG5vdFNldDsKIAotICAgIGlmIChmc2VlayhmaWxl
LCAwLCBTRUVLX1NFVCkpCi0gICAgICAgIHJldHVybiBub3RTZXQ7Ci0KLSAgICB0b2tlbiA9IGZn
ZXRzKGJ1ZmZlciwgMTI4LCBmaWxlKTsKLQotICAgIHNpemVfdCB2YWx1ZSA9IHRvSW50ZWdyYWxU
eXBlPHNpemVfdD4odG9rZW4sIHN0cmxlbih0b2tlbiksICZvayk7Ci0gICAgaWYgKCFvaykKLSAg
ICAgICAgdmFsdWUgPSBub3RTZXQ7Ci0gICAgcmV0dXJuIHZhbHVlOworICAgIHNpemVfdCB2YWx1
ZTsKKyAgICByZXR1cm4gKGZzY2FuZihmaWxlLCAiJXp1IiwgJnZhbHVlKSA9PSAxKSA/IHZhbHVl
IDogbm90U2V0OwogfQogCiBzaXplX3QgQ0dyb3VwTWVtb3J5Q29udHJvbGxlcjo6Z2V0TWVtb3J5
VG90YWxXaXRoQ2dyb3VwKCkK
</data>

          </attachment>
      

    </bug>

</bugzilla>