<?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>189939</bug_id>
          
          <creation_ts>2018-09-24 17:54:37 -0700</creation_ts>
          <short_desc>lowXYZ in FTLLower should always filter the type of the incoming edge</short_desc>
          <delta_ts>2018-10-03 20:30:07 -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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1463045</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-09-24 17:54:37 -0700</bug_when>
    <thetext>For example, the FTL may know more about data flow than AI, and it needs to inform AI of certain data flow properties. For example, consider this program:


```
bb#1
a: Phi // Let&apos;s say it has an Int32 result, so it goes into the int32 hash table in FTLLower
Branch(...,  #2, #3)

bb#2
ArrayifyToStructure(Cell:@a) // This modifies @a to have some structure
Jump(#3)

bb#3
c: Add(Int32:@something, Int32:@a)
```

When the Add node does lowInt32() for @a, we&apos;ll grab it from the int32 hash table. However, we don&apos;t update the AI value at that point. But we should. We need to make sure that AI knows that @a is an Int32.

Obviously the above program will OSR exit if it reaches bb#2, however, this is totally legal IR.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1463046</commentid>
    <comment_count>1</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-09-24 17:55:21 -0700</bug_when>
    <thetext>&lt;rdar://problem/44407030&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1463047</commentid>
    <comment_count>2</comment_count>
      <attachid>350722</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-09-24 18:05:57 -0700</bug_when>
    <thetext>Created attachment 350722
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1463048</commentid>
    <comment_count>3</comment_count>
      <attachid>350723</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-09-24 18:06:44 -0700</bug_when>
    <thetext>Created attachment 350723
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1463056</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-09-24 18:27:05 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #0)
&gt; For example, the FTL may know more about data flow than AI, and it needs to
&gt; inform AI of certain data flow properties. For example, consider this
&gt; program:
&gt; 
&gt; 
&gt; ```
&gt; bb#1
&gt; a: Phi // Let&apos;s say it has an Int32 result, so it goes into the int32 hash
&gt; table in FTLLower
&gt; Branch(...,  #2, #3)
&gt; 
&gt; bb#2
&gt; ArrayifyToStructure(Cell:@a) // This modifies @a to have some structure
&gt; Jump(#3)
&gt; 
&gt; bb#3
&gt; c: Add(Int32:@something, Int32:@a)
&gt; ```
&gt; 
&gt; When the Add node does lowInt32() for @a, we&apos;ll grab it from the int32 hash
&gt; table. However, we don&apos;t update the AI value at that point. But we should.
&gt; We need to make sure that AI knows that @a is an Int32.

Why?

&gt; 
&gt; Obviously the above program will OSR exit if it reaches bb#2, however, this
&gt; is totally legal IR.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1463059</commentid>
    <comment_count>5</comment_count>
      <attachid>350723</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-09-24 18:28:37 -0700</bug_when>
    <thetext>Comment on attachment 350723
patch

This feels super questionable. AI is supposed to be a value add. It’s supposed to be allowed to be imprecise. This patch seems to suggest that someone is relying on AI being maximally precise, which feels like bad form.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1463061</commentid>
    <comment_count>6</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-09-24 18:34:49 -0700</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #5)
&gt; Comment on attachment 350723 [details]
&gt; patch
&gt; 
&gt; This feels super questionable. AI is supposed to be a value add. It’s
&gt; supposed to be allowed to be imprecise. This patch seems to suggest that
&gt; someone is relying on AI being maximally precise, which feels like bad form.

The lowXYZ nodes are supposed to give you something that is filtered. They&apos;re responsible for doing type checks. So to me, it feels totally correct that they communicate to AI that they did type checks.

This is hitting the assert that says that &quot;you better do an Int32 type check if you are an Int32 use&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1463189</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-09-25 10:41:47 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #6)
&gt; (In reply to Filip Pizlo from comment #5)
&gt; &gt; Comment on attachment 350723 [details]
&gt; &gt; patch
&gt; &gt; 
&gt; &gt; This feels super questionable. AI is supposed to be a value add. It’s
&gt; &gt; supposed to be allowed to be imprecise. This patch seems to suggest that
&gt; &gt; someone is relying on AI being maximally precise, which feels like bad form.
&gt; 
&gt; The lowXYZ nodes are supposed to give you something that is filtered.
&gt; They&apos;re responsible for doing type checks. So to me, it feels totally
&gt; correct that they communicate to AI that they did type checks.

I don’t follow this logic. The low functions are supposed to give you something of the type that you asked for. That doesn’t mean that if AI is pessimistic then they should make it more precise. 

&gt; 
&gt; This is hitting the assert that says that &quot;you better do an Int32 type check
&gt; if you are an Int32 use&quot;.

I disagree with fixing such assertions by making the analysis more precise because AI will never be precise enough to fulfill such assertions. 

Which assertion is this, specifically?  Why not remove it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1463191</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-09-25 10:48:44 -0700</bug_when>
    <thetext>Additionally, it’s super weird that you are using the backend to increase AI precision. That feels totally backward. And super ineffective since the backend pulls in AI state at each block boundary - so I don’t even see how your fix is comprehensive. Any block boundary would cause that assertion to fire again.

It’s important that this code has a clear story for how it works. It should be: the backend uses AI as a service to get additional optimizations. It should not be: the backend brute forces the AI into saying things that make assertions not fire.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1463201</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-09-25 11:03:33 -0700</bug_when>
    <thetext>I think I&apos;m starting to see the issue.

AI is expecting a type check, but the FTL backend isn&apos;t going to do a type check because it magically proved the type using its own tricks - so it didn&apos;t need to do a type check.

Therefore, you&apos;re emulating the type check that would have happened.

That feels less weird now that I get what&apos;s going on.  The basic block thing doesn&apos;t seem like a problem either, since the assertion you&apos;re fixing is one that has to do with per-node checks.  If there was a block boundary, then it would just mean that we&apos;d do this filtering thing at the first use at the top of the block.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464874</commentid>
    <comment_count>10</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-09-30 11:50:08 -0700</bug_when>
    <thetext>I spoke with Phil offline last week. We think we should use this approach because appeasing the &quot;you better do a type check&quot; AI assertion is valuable. We also think we should make my patch not directly call filter, but call an abstraction over filter, named &quot;simulatedTypeCheck&quot; or something similar.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1464875</commentid>
    <comment_count>11</comment_count>
      <attachid>351217</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-09-30 12:09:35 -0700</bug_when>
    <thetext>Created attachment 351217
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1466224</commentid>
    <comment_count>12</comment_count>
      <attachid>351217</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2018-10-03 16:22:46 -0700</bug_when>
    <thetext>Comment on attachment 351217
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1466290</commentid>
    <comment_count>13</comment_count>
      <attachid>351217</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-10-03 20:03:56 -0700</bug_when>
    <thetext>Comment on attachment 351217
patch

Thanks for the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1466292</commentid>
    <comment_count>14</comment_count>
      <attachid>351217</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-10-03 20:30:05 -0700</bug_when>
    <thetext>Comment on attachment 351217
patch

Clearing flags on attachment: 351217

Committed r236824: &lt;https://trac.webkit.org/changeset/236824&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1466293</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-10-03 20:30:07 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>350722</attachid>
            <date>2018-09-24 18:05:57 -0700</date>
            <delta_ts>2018-09-24 18:06:44 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>5983</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMzY0NDcpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE1IEBACisyMDE4LTA5LTI0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIGxvd1hZWiBpbiBGVExMb3dlciBzaG91bGQgYWx3YXlzIGZpbHRlciB0
aGUgdHlwZSBvZiB0aGUgaW5jb21pbmcgZWRnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg5OTM5CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80NDQw
NzAzMD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IHN0cmVzcy9mdGwtc2hvdWxkLWFsd2F5cy1maWx0ZXItZm9yLWxvdy10eXBlLWNoZWNrLWZ1bmN0
aW9ucy5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorICAgICAgICAodGVzdCk6CisKIDIwMTgt
MDktMjQgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgQXJyYXku
cHJvdG90eXBlLmluZGV4T2YgZmFzdCBwYXRoIG5lZWRzIHRvIGVuc3VyZSB0aGUgbGVuZ3RoIGlz
IHN0aWxsIHZhbGlkIGFmdGVyIHBlcmZvcm1pbmcgZWZmZWN0cwpJbmRleDogSlNUZXN0cy9zdHJl
c3MvZnRsLXNob3VsZC1hbHdheXMtZmlsdGVyLWZvci1sb3ctdHlwZS1jaGVjay1mdW5jdGlvbnMu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvZnRsLXNob3VsZC1hbHdheXMtZmlsdGVy
LWZvci1sb3ctdHlwZS1jaGVjay1mdW5jdGlvbnMuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0
cy9zdHJlc3MvZnRsLXNob3VsZC1hbHdheXMtZmlsdGVyLWZvci1sb3ctdHlwZS1jaGVjay1mdW5j
dGlvbnMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMSBAQAorLy9AIHJ1bkRlZmF1bHQo
Ii0tdXNlQ29uY3VycmVudEpJVD0wIiwgIi0taml0UG9saWN5U2NhbGU9MCIsICItLW1heGltdW1J
bmxpbmluZ0RlcHRoPTIiKQorCitmdW5jdGlvbiBmb28oeCwgeSkgeworICAgIHZhciB3ID0gMDsK
KyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHgubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgZm9yICh2
YXIgaiA9IDA7IGogPCB4Lmxlbmd0aDsgKytqKQorICAgICAgICAgICAgdyArPSBmb28oaiwgaSk7
CisgICAgICAgIHlbaV0gPSB3OworICAgIH0KK30KKworZnVuY3Rpb24gdGVzdCh4LCBhMykgewor
ICAgICAgYTEgPSBbXTsKKyAgICAgIGEyID0gW107CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgeDsg
KytpKQorICAgICAgICBhMVtpXSA9IDA7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgMTA7ICsraSkg
eworICAgICAgICBmb28oYTMsIGEyKTsKKyAgICAgICAgZm9vKGEzLCBhMSk7CisgICAgfQorfQor
bm9ERkcodGVzdCk7CisKK2EzID0gW107Citmb3IgKHZhciBpID0gMDsgaSA8IDM7ICsraSkKKyAg
ICBhM1tpXSA9IDA7CisKK2ZvciAodmFyIGkgPSAzOyBpIDw9IDEyOyBpICo9IDIpCisgICAgdGVz
dChpLCBhMyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzNjQxNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwzOCBAQAorMjAxOC0wOS0yNCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4K
KworICAgICAgICBsb3dYWVogaW4gRlRMTG93ZXIgc2hvdWxkIGFsd2F5cyBmaWx0ZXIgdGhlIHR5
cGUgb2YgdGhlIGluY29taW5nIGVkZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE4OTkzOQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDQ0MDcwMzA+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRm9yIGV4
YW1wbGUsIHRoZSBGVEwgbWF5IGtub3cgbW9yZSBhYm91dCBkYXRhIGZsb3cgdGhhbiBBSSwgYW5k
IGl0IG5lZWRzIHRvCisgICAgICAgIGluZm9ybSBBSSBvZiBjZXJ0YWluIGRhdGEgZmxvdyBwcm9w
ZXJ0aWVzLiBGb3IgZXhhbXBsZSwgY29uc2lkZXIgdGhpcyBwcm9ncmFtOgorICAgICAgICAKKyAg
ICAgICAgYGBgCisgICAgICAgIGJiIzEKKyAgICAgICAgYTogUGhpIC8vIExldCdzIHNheSBpdCBo
YXMgYW4gSW50MzIgcmVzdWx0LCBzbyBpdCBnb2VzIGludG8gdGhlIGludDMyIGhhc2ggdGFibGUg
aW4gRlRMTG93ZXIKKyAgICAgICAgQnJhbmNoKC4uLiwgICMyLCAjMykKKyAgICAgICAgCisgICAg
ICAgIGJiIzIKKyAgICAgICAgQXJyYXlpZnlUb1N0cnVjdHVyZShDZWxsOkBhKSAvLyBUaGlzIG1v
ZGlmaWVzIEBhIHRvIGhhdmUgc29tZSBzdHJ1Y3R1cmUKKyAgICAgICAgSnVtcCgjMykKKyAgICAg
ICAgCisgICAgICAgIGJiIzMKKyAgICAgICAgYzogQWRkKEludDMyOkBzb21ldGhpbmcsIEludDMy
OkBhKQorICAgICAgICBgYGAKKyAgICAgICAgCisgICAgICAgIFdoZW4gdGhlIEFkZCBub2RlIGRv
ZXMgbG93SW50MzIoKSBmb3IgQGEsIEZUTCBsb3dlciB1c2VkIHRvIGp1c3QgZ3JhYiBpdAorICAg
ICAgICBmcm9tIHRoZSBpbnQzMiBoYXNoIHRhYmxlIHdpdGhvdXQgZmlsdGVyaW5nIHRoZSBBYnN0
cmFjdFZhbHVlLiBUaGlzIHBhdGNoCisgICAgICAgIG1ha2VzIGl0IHNvIHdlIGZpbHRlciB0aGUg
QWJzdHJhY3RWYWx1ZS4gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBBSQorICAgICAgICBrbm93
cyB0aGF0IEBhIGlzIGFuIEludDMyLCBhbmQgbm90IEludDMyIHVuaW9uIHNvbWUgc3RydWN0dXJl
LgorCisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZU
TDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVQaGkpOgorICAgICAgICAoSlNDOjpGVEw6OkRG
Rzo6TG93ZXJERkdUb0IzOjpsb3dJbnQzMik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dl
ckRGR1RvQjM6Omxvd0NlbGwpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0Iz
Ojpsb3dCb29sZWFuKToKKwogMjAxOC0wOS0yMiAgU2FhbSBiYXJhdGkgIDxzYmFyYXRpQGFwcGxl
LmNvbT4KIAogICAgICAgICBUaGUgc2FtcGxpbmcgc2hvdWxkIG5vdCB1c2UgU3Ryb25nPENvZGVC
bG9jaz4gaW4gaXRzIG1hY2hpbmVMb2NhdGlvbiBmaWVsZApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjM2NDE2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzk2LDYgKzEzOTYsNyBAQCBwcml2YXRlOgogICAgICAgICBMVmFsdWUgcGhpID0g
bV9waGlzLmdldChtX25vZGUpOwogICAgICAgICBtX291dC5tX2Jsb2NrLT5hcHBlbmQocGhpKTsK
IAorCiAgICAgICAgIHN3aXRjaCAobV9ub2RlLT5mbGFncygpICYgTm9kZVJlc3VsdE1hc2spIHsK
ICAgICAgICAgY2FzZSBOb2RlUmVzdWx0RG91YmxlOgogICAgICAgICAgICAgc2V0RG91YmxlKHBo
aSk7CkBAIC0xNDEzLDcgKzE0MTQsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgc2V0SlNWYWx1
ZShwaGkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7CisgICAgICAgICAg
ICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHJlc3VsdCB0eXBlIik7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KQEAgLTE0NjM2LDcgKzE0NjM3LDcgQEAgcHJp
dmF0ZToKICAgICBMVmFsdWUgbG93SW50MzIoRWRnZSBlZGdlLCBPcGVyYW5kU3BlY3VsYXRpb25N
b2RlIG1vZGUgPSBBdXRvbWF0aWNPcGVyYW5kU3BlY3VsYXRpb24pCiAgICAgewogICAgICAgICBB
U1NFUlRfVU5VU0VEKG1vZGUsIG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IChl
ZGdlLnVzZUtpbmQoKSA9PSBJbnQzMlVzZSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBLbm93bkludDMy
VXNlKSk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChlZGdlLT5oYXNDb25zdGFudCgpKSB7CiAg
ICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZWRnZS0+YXNKU1ZhbHVlKCk7CiAgICAgICAgICAg
ICBpZiAoIXZhbHVlLmlzSW50MzIoKSkgewpAQCAtMTQ2NDYsMTIgKzE0NjQ3LDE1IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQuY29u
c3RJbnQzMih2YWx1ZS5hc0ludDMyKCkpOwogICAgICAgICAgICAgcmVzdWx0LT5zZXRPcmlnaW4o
QjM6Ok9yaWdpbihlZGdlLm5vZGUoKSkpOworICAgICAgICAgICAgbV9pbnRlcnByZXRlci5maWx0
ZXIoZWRnZSwgU3BlY0ludDMyT25seSk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICBMb3dlcmVkTm9kZVZhbHVlIHZhbHVlID0gbV9pbnQz
MlZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOwotICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpCisg
ICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkgeworICAgICAgICAgICAgbV9pbnRlcnByZXRlci5m
aWx0ZXIoZWRnZSwgU3BlY0ludDMyT25seSk7CiAgICAgICAgICAgICByZXR1cm4gdmFsdWUudmFs
dWUoKTsKKyAgICAgICAgfQogICAgICAgICAKICAgICAgICAgdmFsdWUgPSBtX3N0cmljdEludDUy
VmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CiAgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkKQEAg
LTE0NzY2LDYgKzE0NzcwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IExWYWx1ZSByZXN1bHQgPSBmcm96ZW5Qb2ludGVyKHZhbHVlKTsKICAgICAgICAgICAgIHJlc3Vs
dC0+c2V0T3JpZ2luKEIzOjpPcmlnaW4oZWRnZS5ub2RlKCkpKTsKKyAgICAgICAgICAgIG1faW50
ZXJwcmV0ZXIuZmlsdGVyKGVkZ2UsIFNwZWNDZWxsQ2hlY2spOwogICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICAgICAgfQogICAgICAgICAKQEAgLTE0ODkzLDEyICsxNDg5OCwxNSBAQCBw
cml2YXRlOgogICAgICAgICAgICAgfQogICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0
LmNvbnN0Qm9vbCh2YWx1ZS5hc0Jvb2xlYW4oKSk7CiAgICAgICAgICAgICByZXN1bHQtPnNldE9y
aWdpbihCMzo6T3JpZ2luKGVkZ2Uubm9kZSgpKSk7CisgICAgICAgICAgICBtX2ludGVycHJldGVy
LmZpbHRlcihlZGdlLCBTcGVjQm9vbGVhbik7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBMb3dlcmVkTm9kZVZhbHVlIHZhbHVlID0gbV9i
b29sZWFuVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7Ci0gICAgICAgIGlmIChpc1ZhbGlkKHZhbHVl
KSkKKyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7CisgICAgICAgICAgICBtX2ludGVycHJl
dGVyLmZpbHRlcihlZGdlLCBTcGVjQm9vbGVhbik7CiAgICAgICAgICAgICByZXR1cm4gdmFsdWUu
dmFsdWUoKTsKKyAgICAgICAgfQogICAgICAgICAKICAgICAgICAgdmFsdWUgPSBtX2pzVmFsdWVW
YWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKICAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>350723</attachid>
            <date>2018-09-24 18:06:44 -0700</date>
            <delta_ts>2018-09-30 12:09:35 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>5360</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMzY0NDcpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE1IEBACisyMDE4LTA5LTI0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIGxvd1hZWiBpbiBGVExMb3dlciBzaG91bGQgYWx3YXlzIGZpbHRlciB0
aGUgdHlwZSBvZiB0aGUgaW5jb21pbmcgZWRnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg5OTM5CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80NDQw
NzAzMD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IHN0cmVzcy9mdGwtc2hvdWxkLWFsd2F5cy1maWx0ZXItZm9yLWxvdy10eXBlLWNoZWNrLWZ1bmN0
aW9ucy5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorICAgICAgICAodGVzdCk6CisKIDIwMTgt
MDktMjQgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgQXJyYXku
cHJvdG90eXBlLmluZGV4T2YgZmFzdCBwYXRoIG5lZWRzIHRvIGVuc3VyZSB0aGUgbGVuZ3RoIGlz
IHN0aWxsIHZhbGlkIGFmdGVyIHBlcmZvcm1pbmcgZWZmZWN0cwpJbmRleDogSlNUZXN0cy9zdHJl
c3MvZnRsLXNob3VsZC1hbHdheXMtZmlsdGVyLWZvci1sb3ctdHlwZS1jaGVjay1mdW5jdGlvbnMu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvZnRsLXNob3VsZC1hbHdheXMtZmlsdGVy
LWZvci1sb3ctdHlwZS1jaGVjay1mdW5jdGlvbnMuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0
cy9zdHJlc3MvZnRsLXNob3VsZC1hbHdheXMtZmlsdGVyLWZvci1sb3ctdHlwZS1jaGVjay1mdW5j
dGlvbnMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMSBAQAorLy9AIHJ1bkRlZmF1bHQo
Ii0tdXNlQ29uY3VycmVudEpJVD0wIiwgIi0taml0UG9saWN5U2NhbGU9MCIsICItLW1heGltdW1J
bmxpbmluZ0RlcHRoPTIiKQorCitmdW5jdGlvbiBmb28oeCwgeSkgeworICAgIHZhciB3ID0gMDsK
KyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHgubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgZm9yICh2
YXIgaiA9IDA7IGogPCB4Lmxlbmd0aDsgKytqKQorICAgICAgICAgICAgdyArPSBmb28oaiwgaSk7
CisgICAgICAgIHlbaV0gPSB3OworICAgIH0KK30KKworZnVuY3Rpb24gdGVzdCh4LCBhMykgewor
ICAgICAgYTEgPSBbXTsKKyAgICAgIGEyID0gW107CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgeDsg
KytpKQorICAgICAgICBhMVtpXSA9IDA7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgMTA7ICsraSkg
eworICAgICAgICBmb28oYTMsIGEyKTsKKyAgICAgICAgZm9vKGEzLCBhMSk7CisgICAgfQorfQor
bm9ERkcodGVzdCk7CisKK2EzID0gW107Citmb3IgKHZhciBpID0gMDsgaSA8IDM7ICsraSkKKyAg
ICBhM1tpXSA9IDA7CisKK2ZvciAodmFyIGkgPSAzOyBpIDw9IDEyOyBpICo9IDIpCisgICAgdGVz
dChpLCBhMyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzNjQxNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwzOCBAQAorMjAxOC0wOS0yNCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4K
KworICAgICAgICBsb3dYWVogaW4gRlRMTG93ZXIgc2hvdWxkIGFsd2F5cyBmaWx0ZXIgdGhlIHR5
cGUgb2YgdGhlIGluY29taW5nIGVkZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE4OTkzOQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDQ0MDcwMzA+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRm9yIGV4
YW1wbGUsIHRoZSBGVEwgbWF5IGtub3cgbW9yZSBhYm91dCBkYXRhIGZsb3cgdGhhbiBBSSwgYW5k
IGl0IG5lZWRzIHRvCisgICAgICAgIGluZm9ybSBBSSBvZiBjZXJ0YWluIGRhdGEgZmxvdyBwcm9w
ZXJ0aWVzLiBGb3IgZXhhbXBsZSwgY29uc2lkZXIgdGhpcyBwcm9ncmFtOgorICAgICAgICAKKyAg
ICAgICAgYGBgCisgICAgICAgIGJiIzEKKyAgICAgICAgYTogUGhpIC8vIExldCdzIHNheSBpdCBo
YXMgYW4gSW50MzIgcmVzdWx0LCBzbyBpdCBnb2VzIGludG8gdGhlIGludDMyIGhhc2ggdGFibGUg
aW4gRlRMTG93ZXIKKyAgICAgICAgQnJhbmNoKC4uLiwgICMyLCAjMykKKyAgICAgICAgCisgICAg
ICAgIGJiIzIKKyAgICAgICAgQXJyYXlpZnlUb1N0cnVjdHVyZShDZWxsOkBhKSAvLyBUaGlzIG1v
ZGlmaWVzIEBhIHRvIGhhdmUgc29tZSBzdHJ1Y3R1cmUKKyAgICAgICAgSnVtcCgjMykKKyAgICAg
ICAgCisgICAgICAgIGJiIzMKKyAgICAgICAgYzogQWRkKEludDMyOkBzb21ldGhpbmcsIEludDMy
OkBhKQorICAgICAgICBgYGAKKyAgICAgICAgCisgICAgICAgIFdoZW4gdGhlIEFkZCBub2RlIGRv
ZXMgbG93SW50MzIoKSBmb3IgQGEsIEZUTCBsb3dlciB1c2VkIHRvIGp1c3QgZ3JhYiBpdAorICAg
ICAgICBmcm9tIHRoZSBpbnQzMiBoYXNoIHRhYmxlIHdpdGhvdXQgZmlsdGVyaW5nIHRoZSBBYnN0
cmFjdFZhbHVlLiBUaGlzIHBhdGNoCisgICAgICAgIG1ha2VzIGl0IHNvIHdlIGZpbHRlciB0aGUg
QWJzdHJhY3RWYWx1ZS4gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBBSQorICAgICAgICBrbm93
cyB0aGF0IEBhIGlzIGFuIEludDMyLCBhbmQgbm90IEludDMyIHVuaW9uIHNvbWUgc3RydWN0dXJl
LgorCisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZU
TDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVQaGkpOgorICAgICAgICAoSlNDOjpGVEw6OkRG
Rzo6TG93ZXJERkdUb0IzOjpsb3dJbnQzMik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dl
ckRGR1RvQjM6Omxvd0NlbGwpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0Iz
Ojpsb3dCb29sZWFuKToKKwogMjAxOC0wOS0yMiAgU2FhbSBiYXJhdGkgIDxzYmFyYXRpQGFwcGxl
LmNvbT4KIAogICAgICAgICBUaGUgc2FtcGxpbmcgc2hvdWxkIG5vdCB1c2UgU3Ryb25nPENvZGVC
bG9jaz4gaW4gaXRzIG1hY2hpbmVMb2NhdGlvbiBmaWVsZApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjM2NDE2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDEzLDcgKzE0MTMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgc2V0SlNWYWx1
ZShwaGkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7CisgICAgICAgICAg
ICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHJlc3VsdCB0eXBlIik7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KQEAgLTE0NjQ2LDEyICsxNDY0NiwxNSBAQCBw
cml2YXRlOgogICAgICAgICAgICAgfQogICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0
LmNvbnN0SW50MzIodmFsdWUuYXNJbnQzMigpKTsKICAgICAgICAgICAgIHJlc3VsdC0+c2V0T3Jp
Z2luKEIzOjpPcmlnaW4oZWRnZS5ub2RlKCkpKTsKKyAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIu
ZmlsdGVyKGVkZ2UsIFNwZWNJbnQzMk9ubHkpOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1ZSA9IG1f
aW50MzJWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKLSAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUp
KQorICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIG1faW50ZXJwcmV0
ZXIuZmlsdGVyKGVkZ2UsIFNwZWNJbnQzMk9ubHkpOwogICAgICAgICAgICAgcmV0dXJuIHZhbHVl
LnZhbHVlKCk7CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZhbHVlID0gbV9zdHJpY3RJ
bnQ1MlZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOwogICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkp
CkBAIC0xNDc2Niw2ICsxNDc2OSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBMVmFsdWUgcmVzdWx0ID0gZnJvemVuUG9pbnRlcih2YWx1ZSk7CiAgICAgICAgICAgICBy
ZXN1bHQtPnNldE9yaWdpbihCMzo6T3JpZ2luKGVkZ2Uubm9kZSgpKSk7CisgICAgICAgICAgICBt
X2ludGVycHJldGVyLmZpbHRlcihlZGdlLCBTcGVjQ2VsbENoZWNrKTsKICAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0xNDg5MywxMiArMTQ4OTcsMTUg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBt
X291dC5jb25zdEJvb2wodmFsdWUuYXNCb29sZWFuKCkpOwogICAgICAgICAgICAgcmVzdWx0LT5z
ZXRPcmlnaW4oQjM6Ok9yaWdpbihlZGdlLm5vZGUoKSkpOworICAgICAgICAgICAgbV9pbnRlcnBy
ZXRlci5maWx0ZXIoZWRnZSwgU3BlY0Jvb2xlYW4pOwogICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1ZSA9
IG1fYm9vbGVhblZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOwotICAgICAgICBpZiAoaXNWYWxpZCh2
YWx1ZSkpCisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkgeworICAgICAgICAgICAgbV9pbnRl
cnByZXRlci5maWx0ZXIoZWRnZSwgU3BlY0Jvb2xlYW4pOwogICAgICAgICAgICAgcmV0dXJuIHZh
bHVlLnZhbHVlKCk7CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZhbHVlID0gbV9qc1Zh
bHVlVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CiAgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkg
ewo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>351217</attachid>
            <date>2018-09-30 12:09:35 -0700</date>
            <delta_ts>2018-10-03 20:30:05 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>6419</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMzY2NDcpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE1IEBACisyMDE4LTA5LTMwICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIGxvd1hZWiBpbiBGVExMb3dlciBzaG91bGQgYWx3YXlzIGZpbHRlciB0
aGUgdHlwZSBvZiB0aGUgaW5jb21pbmcgZWRnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg5OTM5CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80NDQw
NzAzMD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IHN0cmVzcy9mdGwtc2hvdWxkLWFsd2F5cy1maWx0ZXItZm9yLWxvdy10eXBlLWNoZWNrLWZ1bmN0
aW9ucy5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorICAgICAgICAodGVzdCk6CisKIDIwMTgt
MDktMzAgIENhaW8gTGltYSAgPHRpY2Fpb2xpbWFAZ21haWwuY29tPgogCiAgICAgICAgIFtCaWdJ
bnRdIEJpZ0ludC5wcm9wdG90eXBlLnRvU3RyaW5nIGlzIGJyb2tlbiB3aGVuIHJhZGl4IGlzIHBv
d2VyIG9mIDIKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2Z0bC1zaG91bGQtYWx3YXlzLWZpbHRlci1m
b3ItbG93LXR5cGUtY2hlY2stZnVuY3Rpb25zLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3Ry
ZXNzL2Z0bC1zaG91bGQtYWx3YXlzLWZpbHRlci1mb3ItbG93LXR5cGUtY2hlY2stZnVuY3Rpb25z
LmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvc3RyZXNzL2Z0bC1zaG91bGQtYWx3YXlzLWZp
bHRlci1mb3ItbG93LXR5cGUtY2hlY2stZnVuY3Rpb25zLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMzEgQEAKKy8vQCBydW5EZWZhdWx0KCItLXVzZUNvbmN1cnJlbnRKSVQ9MCIsICItLWpp
dFBvbGljeVNjYWxlPTAiLCAiLS1tYXhpbXVtSW5saW5pbmdEZXB0aD0yIikKKworZnVuY3Rpb24g
Zm9vKHgsIHkpIHsKKyAgICB2YXIgdyA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4Lmxl
bmd0aDsgKytpKSB7CisgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgeC5sZW5ndGg7ICsraikK
KyAgICAgICAgICAgIHcgKz0gZm9vKGosIGkpOworICAgICAgICB5W2ldID0gdzsKKyAgICB9Cit9
CisKK2Z1bmN0aW9uIHRlc3QoeCwgYTMpIHsKKyAgICAgIGExID0gW107CisgICAgICBhMiA9IFtd
OworCisgICAgZm9yIChpID0gMDsgaSA8IHg7ICsraSkKKyAgICAgICAgYTFbaV0gPSAwOworCisg
ICAgZm9yIChpID0gMDsgaSA8IDEwOyArK2kpIHsKKyAgICAgICAgZm9vKGEzLCBhMik7CisgICAg
ICAgIGZvbyhhMywgYTEpOworICAgIH0KK30KK25vREZHKHRlc3QpOworCithMyA9IFtdOworZm9y
ICh2YXIgaSA9IDA7IGkgPCAzOyArK2kpCisgICAgYTNbaV0gPSAwOworCitmb3IgKHZhciBpID0g
MzsgaSA8PSAxMjsgaSAqPSAyKQorICAgIHRlc3QoaSwgYTMpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q2hhbmdlTG9nCShyZXZpc2lvbiAyMzY2NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDUgQEAKKzIwMTgtMDktMzAgIFNhYW0g
YmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisKKyAgICAgICAgbG93WFlaIGluIEZUTExvd2Vy
IHNob3VsZCBhbHdheXMgZmlsdGVyIHRoZSB0eXBlIG9mIHRoZSBpbmNvbWluZyBlZGdlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODk5MzkKKyAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzQ0NDA3MDMwPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEZvciBleGFtcGxlLCB0aGUgRlRMIG1heSBrbm93IG1vcmUg
YWJvdXQgZGF0YSBmbG93IHRoYW4gQUkgaW4gY2VydGFpbiBwcm9ncmFtcywKKyAgICAgICAgYW5k
IGl0IG5lZWRzIHRvIGluZm9ybSBBSSBvZiB0aGVzZSBkYXRhIGZsb3cgcHJvcGVydGllcyB0byBh
cHBlYXNlIHRoZSBhc3NlcnRpb24KKyAgICAgICAgd2UgaGF2ZSBpbiBBSSB0aGF0IGEgbm9kZSBt
dXN0IHBlcmZvcm0gdHlwZSBjaGVja3Mgb24gaXRzIGNoaWxkIG5vZGVzLgorICAgICAgICAKKyAg
ICAgICAgRm9yIGV4YW1wbGUsIGNvbnNpZGVyIHRoaXMgcHJvZ3JhbToKKyAgICAgICAgCisgICAg
ICAgIGBgYAorICAgICAgICBiYiMxCisgICAgICAgIGE6IFBoaSAvLyBMZXQncyBzYXkgaXQgaGFz
IGFuIEludDMyIHJlc3VsdCwgc28gaXQgZ29lcyBpbnRvIHRoZSBpbnQzMiBoYXNoIHRhYmxlIGlu
IEZUTExvd2VyCisgICAgICAgIEJyYW5jaCguLi4sICAjMiwgIzMpCisgICAgICAgIAorICAgICAg
ICBiYiMyCisgICAgICAgIEFycmF5aWZ5VG9TdHJ1Y3R1cmUoQ2VsbDpAYSkgLy8gVGhpcyBtb2Rp
ZmllcyBAYSB0byBoYXZlIHRoZSBpdHMgcHJldmlvdXMgdHlwZSB1bmlvbiB0aGUgdHlwZSBvZiBz
b21lIHN0cnVjdHVyZSBzZXQuCisgICAgICAgIEp1bXAoIzMpCisgICAgICAgIAorICAgICAgICBi
YiMzCisgICAgICAgIGM6IEFkZChJbnQzMjpAc29tZXRoaW5nLCBJbnQzMjpAYSkKKyAgICAgICAg
YGBgCisgICAgICAgIAorICAgICAgICBXaGVuIHRoZSBBZGQgbm9kZSBkb2VzIGxvd0ludDMyKCkg
Zm9yIEBhLCBGVEwgbG93ZXIgdXNlZCB0byBqdXN0IGdyYWIgaXQKKyAgICAgICAgZnJvbSB0aGUg
aW50MzIgaGFzaCB0YWJsZSB3aXRob3V0IGZpbHRlcmluZyB0aGUgQWJzdHJhY3RWYWx1ZS4gSG93
ZXZlciwKKyAgICAgICAgdGhlIHBhcmVudCBub2RlIGlzIGFza2luZyBmb3IgYSB0eXBlIGNoZWNr
IHRvIGhhcHBlbiwgc28gd2UgbXVzdCBpbmZvcm0KKyAgICAgICAgQUkgb2YgdGhpcyAidHlwZSBj
aGVjayIgaWYgd2Ugd2FudCB0byBhcHBlYXNlIHRoZSBhc3NlcnRpb24gdGhhdCBhbGwgbm9kZXMK
KyAgICAgICAgcGVyZm9ybSB0eXBlIGNoZWNrcyBmb3IgdGhlaXIgZWRnZXMgdGhhdCBzZW1hbnRp
Y2FsbHkgcGVyZm9ybSB0eXBlIGNoZWNrcy4KKyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyBpdCBz
byB3ZSBmaWx0ZXIgdGhlIEFic3RyYWN0VmFsdWUgaW4gdGhlIGxvd1hZWiBldmVuCisgICAgICAg
IGlmIEZUTExvd2VyIHByb3ZlZCB0aGUgdmFsdWUgbXVzdCBiZSBYWVouCisKKyAgICAgICAgKiBm
dGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZH
VG9CMzo6Y29tcGlsZVBoaSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6
OnNpbXVsYXRlZFR5cGVDaGVjayk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1Rv
QjM6Omxvd0ludDMyKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6bG93
Q2VsbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Omxvd0Jvb2xlYW4p
OgorCiAyMDE4LTA5LTMwICBDYWlvIExpbWEgIDx0aWNhaW9saW1hQGdtYWlsLmNvbT4KIAogICAg
ICAgICBbQmlnSW50XSBCaWdJbnQucHJvcHRvdHlwZS50b1N0cmluZyBpcyBicm9rZW4gd2hlbiBy
YWRpeCBpcyBwb3dlciBvZiAyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExv
d2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyMzY2NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MTYsNyAr
MTQxNiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBzZXRKU1ZhbHVlKHBoaSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIERGR19DUkFTSChtX2dy
YXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQiKTsKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dy
YXBoLCBtX25vZGUsICJCYWQgcmVzdWx0IHR5cGUiKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgfQpAQCAtMTQ2MjcsNiArMTQ2MjcsMTEgQEAgcHJpdmF0ZToKICAgICB7CiAg
ICAgICAgIG1fc3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7CiAgICAgfQorCisgICAgdm9pZCBzaW11
bGF0ZWRUeXBlQ2hlY2soRWRnZSBoaWdoVmFsdWUsIFNwZWN1bGF0ZWRUeXBlIHR5cGVzUGFzc2Vk
VGhyb3VnaCkKKyAgICB7CisgICAgICAgIG1faW50ZXJwcmV0ZXIuZmlsdGVyKGhpZ2hWYWx1ZSwg
dHlwZXNQYXNzZWRUaHJvdWdoKTsKKyAgICB9CiAgICAgCiAgICAgdm9pZCB0eXBlQ2hlY2soCiAg
ICAgICAgIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLCBFZGdlIGhpZ2hWYWx1ZSwgU3BlY3VsYXRl
ZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoLApAQCAtMTQ2NTIsNiArMTQ2NTcsNyBAQCBwcml2YXRl
OgogICAgICAgICAKICAgICAgICAgaWYgKGVkZ2UtPmhhc0NvbnN0YW50KCkpIHsKICAgICAgICAg
ICAgIEpTVmFsdWUgdmFsdWUgPSBlZGdlLT5hc0pTVmFsdWUoKTsKKyAgICAgICAgICAgIHNpbXVs
YXRlZFR5cGVDaGVjayhlZGdlLCBTcGVjSW50MzJPbmx5KTsKICAgICAgICAgICAgIGlmICghdmFs
dWUuaXNJbnQzMigpKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1heUhhdmVUeXBlQ2hlY2soZWRn
ZS51c2VLaW5kKCkpKQogICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGUoVW5jb3VudGFibGUp
OwpAQCAtMTQ2NjMsOCArMTQ2NjksMTAgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1ZSA9IG1faW50MzJWYWx1ZXMuZ2V0KGVkZ2Uu
bm9kZSgpKTsKLSAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQorICAgICAgICBpZiAoaXNWYWxp
ZCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIHNpbXVsYXRlZFR5cGVDaGVjayhlZGdlLCBTcGVjSW50
MzJPbmx5KTsKICAgICAgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZSgpOworICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICB2YWx1ZSA9IG1fc3RyaWN0SW50NTJWYWx1ZXMuZ2V0KGVkZ2Uubm9k
ZSgpKTsKICAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQpAQCAtMTQ3NzIsNiArMTQ3ODAsNyBA
QCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgaWYgKGVkZ2UtPm9wKCkgPT0gSlNDb25zdGFu
dCkgewogICAgICAgICAgICAgRnJvemVuVmFsdWUqIHZhbHVlID0gZWRnZS0+Y29uc3RhbnQoKTsK
KyAgICAgICAgICAgIHNpbXVsYXRlZFR5cGVDaGVjayhlZGdlLCBTcGVjQ2VsbENoZWNrKTsKICAg
ICAgICAgICAgIGlmICghdmFsdWUtPnZhbHVlKCkuaXNDZWxsKCkpIHsKICAgICAgICAgICAgICAg
ICBpZiAobWF5SGF2ZVR5cGVDaGVjayhlZGdlLnVzZUtpbmQoKSkpCiAgICAgICAgICAgICAgICAg
ICAgIHRlcm1pbmF0ZShVbmNvdW50YWJsZSk7CkBAIC0xNDg5OSw2ICsxNDkwOCw3IEBAIHByaXZh
dGU6CiAgICAgICAgIAogICAgICAgICBpZiAoZWRnZS0+aGFzQ29uc3RhbnQoKSkgewogICAgICAg
ICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGVkZ2UtPmFzSlNWYWx1ZSgpOworICAgICAgICAgICAgc2lt
dWxhdGVkVHlwZUNoZWNrKGVkZ2UsIFNwZWNCb29sZWFuKTsKICAgICAgICAgICAgIGlmICghdmFs
dWUuaXNCb29sZWFuKCkpIHsKICAgICAgICAgICAgICAgICBpZiAobWF5SGF2ZVR5cGVDaGVjayhl
ZGdlLnVzZUtpbmQoKSkpCiAgICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0ZShVbmNvdW50YWJs
ZSk7CkBAIC0xNDkxMCw4ICsxNDkyMCwxMCBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICBMb3dlcmVkTm9kZVZhbHVlIHZhbHVlID0gbV9ib29sZWFuVmFsdWVzLmdldChl
ZGdlLm5vZGUoKSk7Ci0gICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkKKyAgICAgICAgaWYgKGlz
VmFsaWQodmFsdWUpKSB7CisgICAgICAgICAgICBzaW11bGF0ZWRUeXBlQ2hlY2soZWRnZSwgU3Bl
Y0Jvb2xlYW4pOwogICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlKCk7CisgICAgICAgIH0K
ICAgICAgICAgCiAgICAgICAgIHZhbHVlID0gbV9qc1ZhbHVlVmFsdWVzLmdldChlZGdlLm5vZGUo
KSk7CiAgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkgewo=
</data>

          </attachment>
      

    </bug>

</bugzilla>