<?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>180852</bug_id>
          
          <creation_ts>2017-12-14 17:20:33 -0800</creation_ts>
          <short_desc>The CleanUp after LICM is erroneously removing a Check</short_desc>
          <delta_ts>2017-12-14 22:20:13 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=148544</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="Mark Lam">mark.lam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>saam</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>1381927</commentid>
    <comment_count>0</comment_count>
      <attachid>329425</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-12-14 17:20:33 -0800</bug_when>
    <thetext>Created attachment 329425
Repro test case.

This results in a subsequent node expecting a checked String object, but instead, got a non-String cell, which leads to a crash.

I ran the test as follows:
$ JSC_useConcurrentJIT=0 jsc repro1.js</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1381928</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-12-14 17:21:28 -0800</bug_when>
    <thetext>&lt;rdar://problem/36063494&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1381964</commentid>
    <comment_count>2</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-12-14 18:06:25 -0800</bug_when>
    <thetext>The bug is we&apos;re running part of AI inside LICM. This part of AI will change the proof status of a node. The bug here is:

We have two loops, L1 and L2, and two preheaders, P1 and P2. L2 is nested inside of L1. We have a Check inside a node inside L1, say in block BB, and that Check dominates all of L2. This is also a hoisting candidate, so we hoist it outside of L1 and put it inside P1. Then, when we run AI, we look at the preheader for each loop inside L1, so P1 and P2. When considering P2, we execute the Check. Inside P2, before any hoisting is done, this Check is dead code, because BB dominates P2. When we use AI to &quot;execute&quot; the Check, it&apos;ll set its proof status to proved. This is because inside P2, in the program before LICM runs, the Check is indeed proven at P2. But it is not proven inside P1. This &quot;execute&quot; call will set our proof status for the node inside *P1*, hence, we crash.

I see two easy solutions:
1. Remove the CleanUp phase after LICM
2. Run CFA before the CleanUP phase after LICM

I vote for (1) since CFA is expensive to run.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1381970</commentid>
    <comment_count>3</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-12-14 18:15:14 -0800</bug_when>
    <thetext>Yet another alternative solution:
Clear isProved() for the children of all nodes we hoist.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1381973</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-14 18:30:15 -0800</bug_when>
    <thetext>(In reply to Saam Barati from comment #2)
&gt; The bug is we&apos;re running part of AI inside LICM. 

How is that a bug?  It should generate a valid proof. 

&gt; This part of AI will change
&gt; the proof status of a node. The bug here is:
&gt; 
&gt; We have two loops, L1 and L2, and two preheaders, P1 and P2. L2 is nested
&gt; inside of L1. We have a Check inside a node inside L1, say in block BB, and
&gt; that Check dominates all of L2. This is also a hoisting candidate, so we
&gt; hoist it outside of L1 and put it inside P1. Then, when we run AI, we look
&gt; at the preheader for each loop inside L1, so P1 and P2. When considering P2,
&gt; we execute the Check. Inside P2, before any hoisting is done, this Check is
&gt; dead code, because BB dominates P2. When we use AI to &quot;execute&quot; the Check,
&gt; it&apos;ll set its proof status to proved. This is because inside P2, in the
&gt; program before LICM runs, the Check is indeed proven at P2. But it is not
&gt; proven inside P1. This &quot;execute&quot; call will set our proof status for the node
&gt; inside *P1*, hence, we crash.
&gt; 
&gt; I see two easy solutions:
&gt; 1. Remove the CleanUp phase after LICM
&gt; 2. Run CFA before the CleanUP phase after LICM
&gt; 
&gt; I vote for (1) since CFA is expensive to run.

Clean up is pretty useful. How about 3: make licm’s use of AI leave behind valid AI state.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1381974</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-14 18:33:04 -0800</bug_when>
    <thetext>Seems like we need a way of executing a node without changing its proved bits. That execution in LICM is to update another block’s state summary so it shouldn’t be changing proved bots. 

Maybe you can hook that into the existing AtTail versus InPlace template magic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1381976</commentid>
    <comment_count>6</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-12-14 18:36:13 -0800</bug_when>
    <thetext>(In reply to Saam Barati from comment #3)
&gt; Yet another alternative solution:
&gt; Clear isProved() for the children of all nodes we hoist.

I like this option the most. It also seems like Fil predicted it a few years ago:
https://bugs.webkit.org/show_bug.cgi?id=148544

I think it&apos;s ok to be conservative and just say anything we hoist no longer has valid proofs for its children. Also, it&apos;s important to note that the act of hoisting a node will never change the proof status from IsProved to NeedsCheck for anything inside the loop. It could make it go from NeedsCheck to IsProved though, but that&apos;s purely profit that we don&apos;t gain until we run AI again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1381977</commentid>
    <comment_count>7</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-12-14 18:37:39 -0800</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #5)
&gt; Seems like we need a way of executing a node without changing its proved
&gt; bits. That execution in LICM is to update another block’s state summary so
&gt; it shouldn’t be changing proved bots. 
&gt; 
&gt; Maybe you can hook that into the existing AtTail versus InPlace template
&gt; magic.

Right. Let&apos;s say I make this change to not update proved bits for AtTail. What worries me is this:
What if hoisting the node changes its proved bits?

I&apos;m not sure if this is possible, but it seems like it&apos;d be better to be conservative and say things aren&apos;t proved once hoisted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1381982</commentid>
    <comment_count>8</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-12-14 18:50:45 -0800</bug_when>
    <thetext>(In reply to Saam Barati from comment #7)
&gt; (In reply to Filip Pizlo from comment #5)
&gt; &gt; Seems like we need a way of executing a node without changing its proved
&gt; &gt; bits. That execution in LICM is to update another block’s state summary so
&gt; &gt; it shouldn’t be changing proved bots. 
&gt; &gt; 
&gt; &gt; Maybe you can hook that into the existing AtTail versus InPlace template
&gt; &gt; magic.
&gt; 
&gt; Right. Let&apos;s say I make this change to not update proved bits for AtTail.
&gt; What worries me is this:
&gt; What if hoisting the node changes its proved bits?
&gt; 
&gt; I&apos;m not sure if this is possible, but it seems like it&apos;d be better to be
&gt; conservative and say things aren&apos;t proved once hoisted.

I actually think this is necessary. The fact that we update the Proved bits probably helps us in a bunch of scenarios where we have something like this:

```
bb#1:
a: Foo: produces Heap TOP
jump #2
bb#2
b: CantBeHoisted(Check:Cell:@a)
c: CanBeHoisted(Cell:@a)
some stuff to make a loop
```

if we hoist without updating the proved bits, we&apos;re going to be sad</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1381984</commentid>
    <comment_count>9</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-12-14 18:54:09 -0800</bug_when>
    <thetext>I still like the idea of making this method as part of AbstractState though so it&apos;s a nop for LICM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1381985</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-14 18:56:31 -0800</bug_when>
    <thetext>(In reply to Saam Barati from comment #9)
&gt; I still like the idea of making this method as part of AbstractState though
&gt; so it&apos;s a nop for LICM

I’m fine with your solution, but it seems like there are two different execution modes in LICM at-tail:

- execute to update state of nested headers

- execute to establish the right state at the tail of the header we hoisted to. 

So, you could be precise if you wanted to be.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1381988</commentid>
    <comment_count>11</comment_count>
      <attachid>329435</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-12-14 19:03:13 -0800</bug_when>
    <thetext>Created attachment 329435
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1381995</commentid>
    <comment_count>12</comment_count>
      <attachid>329435</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-14 19:07:19 -0800</bug_when>
    <thetext>Comment on attachment 329435
patch

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

I think this could be simpler.

&gt; Source/JavaScriptCore/dfg/DFGAtTailAbstractState.h:67
&gt; +    void setProofStatus(Edge&amp;, ProofStatus) { }

What if this set it to NeedsCheck?  Then you don’t need more data structures.

&gt; Source/JavaScriptCore/dfg/DFGLICMPhase.cpp:313
&gt; +        m_hoistedNodes.add(node);

I don’t think you need this.

&gt; Source/JavaScriptCore/dfg/DFGLICMPhase.cpp:354
&gt; +    HashSet&lt;Node*&gt; m_hoistedNodes;

And if you did need it, it should probably be a vector. Optimizing away duplicates isn’t going to help you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1381996</commentid>
    <comment_count>13</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-12-14 19:08:40 -0800</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #10)
&gt; (In reply to Saam Barati from comment #9)
&gt; &gt; I still like the idea of making this method as part of AbstractState though
&gt; &gt; so it&apos;s a nop for LICM
&gt; 
&gt; I’m fine with your solution, but it seems like there are two different
&gt; execution modes in LICM at-tail:
&gt; 
&gt; - execute to update state of nested headers
&gt; 
&gt; - execute to establish the right state at the tail of the header we hoisted
&gt; to. 
&gt; 
&gt; So, you could be precise if you wanted to be.

I see. Yeah this makes sense. We could do it with a bit inside AtTail. The patch I uploaded is conservative and never does it, and says anything we hoist can&apos;t have proven children. I like the idea of being precise. I&apos;ll make a new patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382007</commentid>
    <comment_count>14</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-12-14 19:18:25 -0800</bug_when>
    <thetext>*** Bug 148544 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382010</commentid>
    <comment_count>15</comment_count>
      <attachid>329442</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-12-14 19:24:06 -0800</bug_when>
    <thetext>Created attachment 329442
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382018</commentid>
    <comment_count>16</comment_count>
      <attachid>329442</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-12-14 19:28:28 -0800</bug_when>
    <thetext>Comment on attachment 329442
patch

Nice!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382019</commentid>
    <comment_count>17</comment_count>
      <attachid>329442</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-12-14 19:29:15 -0800</bug_when>
    <thetext>Comment on attachment 329442
patch

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

&gt; Source/JavaScriptCore/ChangeLog:25
&gt; +        The fix I&apos;m going with is to conservatively say the proof status for the
&gt; +        children of all nodes we hoist is NeedsCheck.

This no longer reflects what I&apos;m actually doing. I&apos;ll update it to be accurate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382020</commentid>
    <comment_count>18</comment_count>
      <attachid>329445</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-12-14 19:33:41 -0800</bug_when>
    <thetext>Created attachment 329445
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382022</commentid>
    <comment_count>19</comment_count>
      <attachid>329446</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-12-14 19:36:42 -0800</bug_when>
    <thetext>Created attachment 329446
patch for landing

Fix typo</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382072</commentid>
    <comment_count>20</comment_count>
      <attachid>329446</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-12-14 22:20:11 -0800</bug_when>
    <thetext>Comment on attachment 329446
patch for landing

Clearing flags on attachment: 329446

Committed r225966: &lt;https://trac.webkit.org/changeset/225966&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382073</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-12-14 22:20:13 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>329425</attachid>
            <date>2017-12-14 17:20:33 -0800</date>
            <delta_ts>2017-12-14 17:20:33 -0800</delta_ts>
            <desc>Repro test case.</desc>
            <filename>repro.js</filename>
            <type>application/x-javascript</type>
            <size>295</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">ZnVuY3Rpb24gZm9vKHN0cmluZykgewogICAgdmFyIHJlc3VsdDEsIHJlc3VsdDI7CiAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IDEwMDA7ICsraSkgewogICAgICAgIHJlc3VsdDEgPSBzdHJpbmdbMF07
IAogICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMTA7ICsraikKICAgICAgICAgICAgcmVzdWx0
MiA9IDE7CiAgICB9CiAgIHJldHVybiBbcmVzdWx0MSwgcmVzdWx0Ml07Cn0Kbm9JbmxpbmUoZm9v
KTsKCmZvbygiICIpOwpmb3IgKHZhciBpID0gMDsgaSA8IDEwMDA7IGkrKykKICAgIGZvbyhuZXcg
RXJyb3IoKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>329435</attachid>
            <date>2017-12-14 19:03:13 -0800</date>
            <delta_ts>2017-12-14 19:24:06 -0800</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>6593</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMjU5NTQpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE0IEBACisyMDE3LTEyLTE0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFRoZSBDbGVhblVwIGFmdGVyIExJQ00gaXMgZXJyb25lb3VzbHkgcmVt
b3ZpbmcgYSBDaGVjaworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTgwODUyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zNjA2MzQ5ND4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHN0cmVzcy9kb250LXJ1
bi1jbGVhbnVwLWFmdGVyLWxpY20uanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKwogMjAxNy0x
Mi0xNCAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdS
RVNTSU9OIChyMjI1Njk1KTogUmVwcm8gY3Jhc2ggb24geWFob28gbG9naW4gcGFnZQpJbmRleDog
SlNUZXN0cy9zdHJlc3MvZG9udC1ydW4tY2xlYW51cC1hZnRlci1saWNtLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2RvbnQtcnVuLWNsZWFudXAtYWZ0ZXItbGljbS5qcwkobm9uZXhp
c3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVzcy9kb250LXJ1bi1jbGVhbnVwLWFmdGVyLWxpY20uanMJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNCBAQAorZnVuY3Rpb24gZm9vKHN0cmluZykgewor
ICAgIHZhciByZXN1bHQxLCByZXN1bHQyOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDsg
KytpKSB7CisgICAgICAgIHJlc3VsdDEgPSBzdHJpbmdbMF07IAorICAgICAgICBmb3IgKHZhciBq
ID0gMDsgaiA8IDEwOyArK2opCisgICAgICAgICAgICByZXN1bHQyID0gMTsKKyAgICB9CisgICBy
ZXR1cm4gW3Jlc3VsdDEsIHJlc3VsdDJdOworfQorbm9JbmxpbmUoZm9vKTsKKworZm9vKCIgIik7
Citmb3IgKHZhciBpID0gMDsgaSA8IDEwMDA7IGkrKykKKyAgICBmb28obmV3IEVycm9yKCkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjU4NzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzIgQEAK
KzIwMTctMTItMTQgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisKKyAgICAgICAg
VGhlIENsZWFuVXAgYWZ0ZXIgTElDTSBpcyBlcnJvbmVvdXNseSByZW1vdmluZyBhIENoZWNrCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODA4NTIKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzM2MDYzNDk0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZXJlIHdhcyBhIGJ1ZyB3aGVyZSBDbGVhblVwIHBo
YXNlIHJlbGllZCBvbiBpc1Byb3ZlZCgpIGJpdHMgYW5kIExJQ00KKyAgICAgICAgY2hhbmdlZCB0
aGVtIGluIGFuIGludmFsaWQgd2F5LiBUaGUgYnVnIGlzIGFzIGZvbGxvd3M6CisgICAgICAgIAor
ICAgICAgICBXZSBoYXZlIHR3byBsb29wcywgTDEgYW5kIEwyLCBhbmQgdHdvIHByZWhlYWRlcnMs
IFAxIGFuZCBQMi4gTDIgaXMgbmVzdGVkCisgICAgICAgIGluc2lkZSBvZiBMMS4gV2UgaGF2ZSBh
IENoZWNrIGluc2lkZSBhIG5vZGUgaW5zaWRlIEwxLCBzYXkgaW4gYmFzaWMgYmxvY2sgQkIsCisg
ICAgICAgIGFuZCB0aGF0IENoZWNrIGRvbWluYXRlcyBhbGwgb2YgTDIuIFRoaXMgaXMgYWxzbyBh
IGhvaXN0aW5nIGNhbmRpZGF0ZSwgc28gd2UKKyAgICAgICAgaG9pc3QgaXQgb3V0c2lkZSBvZiBM
MSBhbmQgcHV0IGl0IGluc2lkZSBQMS4gVGhlbiwgd2hlbiB3ZSBydW4gQUksIHdlIGxvb2sgYXQK
KyAgICAgICAgdGhlIHByZWhlYWRlciBmb3IgZWFjaCBsb29wIGluc2lkZSBMMSwgc28gUDEgYW5k
IFAyLiBXaGVuIGNvbnNpZGVyaW5nIFAyLAorICAgICAgICB3ZSBleGVjdXRlIHRoZSBDaGVjay4g
SW5zaWRlIFAyLCBiZWZvcmUgYW55IGhvaXN0aW5nIGlzIGRvbmUsIHRoaXMgQ2hlY2sKKyAgICAg
ICAgaXMgZGVhZCBjb2RlLCBiZWNhdXNlIEJCIGRvbWluYXRlcyBQMi4gV2hlbiB3ZSB1c2UgQUkg
dG8gImV4ZWN1dGUiIHRoZQorICAgICAgICBDaGVjaywgaXQnbGwgc2V0IGl0cyBwcm9vZiBzdGF0
dXMgdG8gcHJvdmVkLiBUaGlzIGlzIGJlY2F1c2UgaW5zaWRlIFAyLAorICAgICAgICBpbiB0aGUg
cHJvZ3JhbSBiZWZvcmUgTElDTSBydW5zLCB0aGUgQ2hlY2sgaXMgaW5kZWVkIHByb3ZlbiBhdCBQ
Mi4gQnV0CisgICAgICAgIGl0IGlzIG5vdCBwcm92ZW4gaW5zaWRlIFAxLiBUaGlzICJleGVjdXRl
IiBjYWxsIHdpbGwgc2V0IG91ciBwcm9vZiBzdGF0dXMKKyAgICAgICAgZm9yIHRoZSBub2RlIGlu
c2lkZSAqUDEqLCBoZW5jZSwgd2UgY3Jhc2guCisgICAgICAgIAorICAgICAgICBUaGUgZml4IEkn
bSBnb2luZyB3aXRoIGlzIHRvIGNvbnNlcnZhdGl2ZWx5IHNheSB0aGUgcHJvb2Ygc3RhdHVzIGZv
ciB0aGUKKyAgICAgICAgY2hpbGRyZW4gb2YgYWxsIG5vZGVzIHdlIGhvaXN0IGlzIE5lZWRzQ2hl
Y2suCisKKyAgICAgICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UGxh
bjo6Y29tcGlsZUluVGhyZWFkSW1wbCk6CisKIDIwMTctMTItMTMgIFNhYW0gQmFyYXRpICA8c2Jh
cmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTihyMjI1ODQ0KTogQXJvdW5kIDg1
MCBuZXcgSlNDIGZhaWx1cmVzIG9uIDMyLWJpdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVyLmgJKHJldmlzaW9uIDIyNTg3NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xODIsMTEgKzE4Miw3IEBAIHByaXZhdGU6CiAgICAgQUxXQVlTX0lO
TElORSB2b2lkIGZpbHRlckJ5VHlwZShFZGdlJiBlZGdlLCBTcGVjdWxhdGVkVHlwZSB0eXBlKQog
ICAgIHsKICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKGVkZ2UpOwotICAg
ICAgICBpZiAoIXZhbHVlLmlzVHlwZSh0eXBlKSkKLSAgICAgICAgICAgIGVkZ2Uuc2V0UHJvb2ZT
dGF0dXMoTmVlZHNDaGVjayk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGVkZ2Uuc2V0UHJv
b2ZTdGF0dXMoSXNQcm92ZWQpOwotICAgICAgICAKKyAgICAgICAgbV9zdGF0ZS5zZXRQcm9vZlN0
YXR1cyhlZGdlLCB2YWx1ZS5pc1R5cGUodHlwZSkgPyBJc1Byb3ZlZCA6IE5lZWRzQ2hlY2spOwog
ICAgICAgICBmaWx0ZXIodmFsdWUsIHR5cGUpOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oCShyZXZp
c2lvbiAyMjU4NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3Ry
YWN0U3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzZXRJc1ZhbGlkKGJvb2wgaXNWYWxpZCkgeyBtX2Jsb2NrLT5jZmFEaWRGaW5pc2ggPSBp
c1ZhbGlkOyB9CiAgICAgdm9pZCBzZXRCcmFuY2hEaXJlY3Rpb24oQnJhbmNoRGlyZWN0aW9uKSB7
IH0KICAgICB2b2lkIHNldEZvdW5kQ29uc3RhbnRzKGJvb2wpIHsgfQorICAgIHZvaWQgc2V0UHJv
b2ZTdGF0dXMoRWRnZSYsIFByb29mU3RhdHVzKSB7IH0KIAogcHJpdmF0ZToKICAgICBHcmFwaCYg
bV9ncmFwaDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3Ry
YWN0U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0lu
UGxhY2VBYnN0cmFjdFN0YXRlLmgJKHJldmlzaW9uIDIyNTg3NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MTI2LDYgKzEyNiwxMSBAQCBwdWJsaWM6CiAgICAgLy8gU28sIHdlIHNob3VsZCBwcm9iYWJseSBr
ZWVwIHRoaXMgbWV0aG9kLgogICAgIHZvaWQgc2V0Rm91bmRDb25zdGFudHMoYm9vbCBmb3VuZENv
bnN0YW50cykgeyBtX2ZvdW5kQ29uc3RhbnRzID0gZm91bmRDb25zdGFudHM7IH0KIAorICAgIHZv
aWQgc2V0UHJvb2ZTdGF0dXMoRWRnZSYgZWRnZSwgUHJvb2ZTdGF0dXMgc3RhdHVzKQorICAgIHsK
KyAgICAgICAgZWRnZS5zZXRQcm9vZlN0YXR1cyhzdGF0dXMpOworICAgIH0KKwogcHJpdmF0ZToK
ICAgICB2b2lkIG1lcmdlU3RhdGVBdFRhaWwoQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24sIEFi
c3RyYWN0VmFsdWUmIGluVmFyaWFibGUsIE5vZGUqKTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdMSUNNUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTElDTVBoYXNlLmNwcAkocmV2aXNpb24gMjI1ODc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMSUNNUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MjAsNiArMjIwLDE2IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBh
dHRlbXB0SG9pc3QoYmxvY2ssIG5vZGVSZWYsIGxvb3BTdGFja1tzdGFja0luZGV4XSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KKworICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiBtX2hvaXN0
ZWROb2RlcykgeworICAgICAgICAgICAgLy8gV2hlbiBob2lzdGluZyBhIG5vZGUsIHdlIGNhbiBu
b3QgYmUgc3VyZSB0aGF0IGl0cyBjaGlsZCBlZGdlcyBoYXZlIHByb3ZlbgorICAgICAgICAgICAg
Ly8gdHlwZSBjaGVja3MuIEZvciBleGFtcGxlLCB3ZSBtYXkgYmUgaG9pc3RpbmcgdGhlIG5vZGUg
YWJvdmUgYSBjb25ncnVlbnQgY2hlY2sKKyAgICAgICAgICAgIC8vIHRoYXQgZG9taW5hdGVkIGl0
LCBtYWtpbmcgaXQgc28gdGhhdCB0aGUgb25jZSBwcm92ZW4gY2hlY2sgaXMgbm8gbG9uZ2VyCisg
ICAgICAgICAgICAvLyBwcm92ZW4uIEhlbmNlLCB0aGUgaG9pc3RlZCBub2RlIHdvdWxkIG5lZWQg
dG8gZG8gYSB0eXBlIGNoZWNrLgorICAgICAgICAgICAgbV9ncmFwaC5kb1RvQ2hpbGRyZW4obm9k
ZSwgW10gKEVkZ2UmIGVkZ2UpIHsKKyAgICAgICAgICAgICAgICBlZGdlLnNldFByb29mU3RhdHVz
KFByb29mU3RhdHVzOjpOZWVkc0NoZWNrKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICByZXR1cm4gY2hhbmdlZDsKICAgICB9CkBAIC0zMDAsNiArMzEwLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBhZGp1c3QgdGhlIENoZWNr
OiBmbGFncyBvbiB0aGUgZWRnZXMgb2Ygbm9kZS4gVGhlcmUgYXJlIHBoYXNlcyB0aGF0IGFzc3Vt
ZQogICAgICAgICAvLyB0aGF0IHRob3NlIGZsYWdzIGFyZSBjb3JyZWN0IGV2ZW4gaWYgQUkgaXMg
c3RhbGUuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNDg1NDQKKyAgICAgICAgbV9ob2lzdGVkTm9kZXMuYWRkKG5vZGUpOwogICAgICAgICBkYXRh
LnByZUhlYWRlci0+aW5zZXJ0QmVmb3JlVGVybWluYWwobm9kZSk7CiAgICAgICAgIG5vZGUtPm93
bmVyID0gZGF0YS5wcmVIZWFkZXI7CiAgICAgICAgIE5vZGVPcmlnaW4gdGVybWluYWxPcmlnaW4g
PSBkYXRhLnByZUhlYWRlci0+dGVybWluYWwoKS0+b3JpZ2luOwpAQCAtMzQwLDYgKzM1MSw3IEBA
IHByaXZhdGU6CiAgICAgQXRUYWlsQWJzdHJhY3RTdGF0ZSBtX3N0YXRlOwogICAgIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QXRUYWlsQWJzdHJhY3RTdGF0ZT4gbV9pbnRlcnByZXRlcjsKICAgICBWZWN0
b3I8TG9vcERhdGE+IG1fZGF0YTsKKyAgICBIYXNoU2V0PE5vZGUqPiBtX2hvaXN0ZWROb2RlczsK
IH07CiAKIGJvb2wgcGVyZm9ybUxJQ00oR3JhcGgmIGdyYXBoKQo=
</data>
<flag name="review"
          id="348532"
          type_id="1"
          status="-"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>329442</attachid>
            <date>2017-12-14 19:24:06 -0800</date>
            <delta_ts>2017-12-14 19:33:41 -0800</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>8241</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMjU5NTQpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE0IEBACisyMDE3LTEyLTE0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFRoZSBDbGVhblVwIGFmdGVyIExJQ00gaXMgZXJyb25lb3VzbHkgcmVt
b3ZpbmcgYSBDaGVjaworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTgwODUyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zNjA2MzQ5ND4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHN0cmVzcy9kb250LXJ1
bi1jbGVhbnVwLWFmdGVyLWxpY20uanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKwogMjAxNy0x
Mi0xNCAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdS
RVNTSU9OIChyMjI1Njk1KTogUmVwcm8gY3Jhc2ggb24geWFob28gbG9naW4gcGFnZQpJbmRleDog
SlNUZXN0cy9zdHJlc3MvZG9udC1ydW4tY2xlYW51cC1hZnRlci1saWNtLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEpTVGVzdHMvc3RyZXNzL2RvbnQtcnVuLWNsZWFudXAtYWZ0ZXItbGljbS5qcwkobm9uZXhp
c3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVzcy9kb250LXJ1bi1jbGVhbnVwLWFmdGVyLWxpY20uanMJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNCBAQAorZnVuY3Rpb24gZm9vKHN0cmluZykgewor
ICAgIHZhciByZXN1bHQxLCByZXN1bHQyOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDsg
KytpKSB7CisgICAgICAgIHJlc3VsdDEgPSBzdHJpbmdbMF07IAorICAgICAgICBmb3IgKHZhciBq
ID0gMDsgaiA8IDEwOyArK2opCisgICAgICAgICAgICByZXN1bHQyID0gMTsKKyAgICB9CisgICBy
ZXR1cm4gW3Jlc3VsdDEsIHJlc3VsdDJdOworfQorbm9JbmxpbmUoZm9vKTsKKworZm9vKCIgIik7
Citmb3IgKHZhciBpID0gMDsgaSA8IDEwMDA7IGkrKykKKyAgICBmb28obmV3IEVycm9yKCkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjU4NzYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzIgQEAK
KzIwMTctMTItMTQgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisKKyAgICAgICAg
VGhlIENsZWFuVXAgYWZ0ZXIgTElDTSBpcyBlcnJvbmVvdXNseSByZW1vdmluZyBhIENoZWNrCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODA4NTIKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzM2MDYzNDk0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZXJlIHdhcyBhIGJ1ZyB3aGVyZSBDbGVhblVwIHBo
YXNlIHJlbGllZCBvbiBpc1Byb3ZlZCgpIGJpdHMgYW5kIExJQ00KKyAgICAgICAgY2hhbmdlZCB0
aGVtIGluIGFuIGludmFsaWQgd2F5LiBUaGUgYnVnIGlzIGFzIGZvbGxvd3M6CisgICAgICAgIAor
ICAgICAgICBXZSBoYXZlIHR3byBsb29wcywgTDEgYW5kIEwyLCBhbmQgdHdvIHByZWhlYWRlcnMs
IFAxIGFuZCBQMi4gTDIgaXMgbmVzdGVkCisgICAgICAgIGluc2lkZSBvZiBMMS4gV2UgaGF2ZSBh
IENoZWNrIGluc2lkZSBhIG5vZGUgaW5zaWRlIEwxLCBzYXkgaW4gYmFzaWMgYmxvY2sgQkIsCisg
ICAgICAgIGFuZCB0aGF0IENoZWNrIGRvbWluYXRlcyBhbGwgb2YgTDIuIFRoaXMgaXMgYWxzbyBh
IGhvaXN0aW5nIGNhbmRpZGF0ZSwgc28gd2UKKyAgICAgICAgaG9pc3QgaXQgb3V0c2lkZSBvZiBM
MSBhbmQgcHV0IGl0IGluc2lkZSBQMS4gVGhlbiwgd2hlbiB3ZSBydW4gQUksIHdlIGxvb2sgYXQK
KyAgICAgICAgdGhlIHByZWhlYWRlciBmb3IgZWFjaCBsb29wIGluc2lkZSBMMSwgc28gUDEgYW5k
IFAyLiBXaGVuIGNvbnNpZGVyaW5nIFAyLAorICAgICAgICB3ZSBleGVjdXRlIHRoZSBDaGVjay4g
SW5zaWRlIFAyLCBiZWZvcmUgYW55IGhvaXN0aW5nIGlzIGRvbmUsIHRoaXMgQ2hlY2sKKyAgICAg
ICAgaXMgZGVhZCBjb2RlLCBiZWNhdXNlIEJCIGRvbWluYXRlcyBQMi4gV2hlbiB3ZSB1c2UgQUkg
dG8gImV4ZWN1dGUiIHRoZQorICAgICAgICBDaGVjaywgaXQnbGwgc2V0IGl0cyBwcm9vZiBzdGF0
dXMgdG8gcHJvdmVkLiBUaGlzIGlzIGJlY2F1c2UgaW5zaWRlIFAyLAorICAgICAgICBpbiB0aGUg
cHJvZ3JhbSBiZWZvcmUgTElDTSBydW5zLCB0aGUgQ2hlY2sgaXMgaW5kZWVkIHByb3ZlbiBhdCBQ
Mi4gQnV0CisgICAgICAgIGl0IGlzIG5vdCBwcm92ZW4gaW5zaWRlIFAxLiBUaGlzICJleGVjdXRl
IiBjYWxsIHdpbGwgc2V0IG91ciBwcm9vZiBzdGF0dXMKKyAgICAgICAgZm9yIHRoZSBub2RlIGlu
c2lkZSAqUDEqLCBoZW5jZSwgd2UgY3Jhc2guCisgICAgICAgIAorICAgICAgICBUaGUgZml4IEkn
bSBnb2luZyB3aXRoIGlzIHRvIGNvbnNlcnZhdGl2ZWx5IHNheSB0aGUgcHJvb2Ygc3RhdHVzIGZv
ciB0aGUKKyAgICAgICAgY2hpbGRyZW4gb2YgYWxsIG5vZGVzIHdlIGhvaXN0IGlzIE5lZWRzQ2hl
Y2suCisKKyAgICAgICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UGxh
bjo6Y29tcGlsZUluVGhyZWFkSW1wbCk6CisKIDIwMTctMTItMTMgIFNhYW0gQmFyYXRpICA8c2Jh
cmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTihyMjI1ODQ0KTogQXJvdW5kIDg1
MCBuZXcgSlNDIGZhaWx1cmVzIG9uIDMyLWJpdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVyLmgJKHJldmlzaW9uIDIyNTg3NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xODIsMTEgKzE4Miw3IEBAIHByaXZhdGU6CiAgICAgQUxXQVlTX0lO
TElORSB2b2lkIGZpbHRlckJ5VHlwZShFZGdlJiBlZGdlLCBTcGVjdWxhdGVkVHlwZSB0eXBlKQog
ICAgIHsKICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKGVkZ2UpOwotICAg
ICAgICBpZiAoIXZhbHVlLmlzVHlwZSh0eXBlKSkKLSAgICAgICAgICAgIGVkZ2Uuc2V0UHJvb2ZT
dGF0dXMoTmVlZHNDaGVjayk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGVkZ2Uuc2V0UHJv
b2ZTdGF0dXMoSXNQcm92ZWQpOwotICAgICAgICAKKyAgICAgICAgbV9zdGF0ZS5zZXRQcm9vZlN0
YXR1cyhlZGdlLCB2YWx1ZS5pc1R5cGUodHlwZSkgPyBJc1Byb3ZlZCA6IE5lZWRzQ2hlY2spOwog
ICAgICAgICBmaWx0ZXIodmFsdWUsIHR5cGUpOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oCShyZXZp
c2lvbiAyMjU4NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3Ry
YWN0U3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsMTAgKzY1LDE5IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNldEJyYW5jaERpcmVjdGlvbihCcmFuY2hEaXJlY3Rpb24pIHsgfQogICAgIHZvaWQg
c2V0Rm91bmRDb25zdGFudHMoYm9vbCkgeyB9CiAKKyAgICB2b2lkIHRydXN0RWRnZVByb29mcygp
IHsgbV90cnVzdEVkZ2VQcm9vZnMgPSB0cnVlOyB9CisgICAgdm9pZCBkb250VHJ1c3RFZGdlUHJv
b2ZzKCkgeyBtX3RydXN0RWRnZVByb29mcyA9IGZhbHNlOyB9CisgICAgdm9pZCBzZXRQcm9vZlN0
YXR1cyhFZGdlJiBlZGdlLCBQcm9vZlN0YXR1cyBzdGF0dXMpCisgICAgeworICAgICAgICBpZiAo
bV90cnVzdEVkZ2VQcm9vZnMpCisgICAgICAgICAgICBlZGdlLnNldFByb29mU3RhdHVzKHN0YXR1
cyk7CisgICAgfQorCiBwcml2YXRlOgogICAgIEdyYXBoJiBtX2dyYXBoOwogICAgIEJsb2NrTWFw
PEhhc2hNYXA8Tm9kZUZsb3dQcm9qZWN0aW9uLCBBYnN0cmFjdFZhbHVlPj4gbV92YWx1ZXNBdFRh
aWxNYXA7CiAgICAgQmFzaWNCbG9jayogbV9ibG9jayB7IG51bGxwdHIgfTsKKyAgICBib29sIG1f
dHJ1c3RFZGdlUHJvb2ZzIHsgZmFsc2UgfTsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3Rh
dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VB
YnN0cmFjdFN0YXRlLmgJKHJldmlzaW9uIDIyNTg3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTI2LDYg
KzEyNiwxMSBAQCBwdWJsaWM6CiAgICAgLy8gU28sIHdlIHNob3VsZCBwcm9iYWJseSBrZWVwIHRo
aXMgbWV0aG9kLgogICAgIHZvaWQgc2V0Rm91bmRDb25zdGFudHMoYm9vbCBmb3VuZENvbnN0YW50
cykgeyBtX2ZvdW5kQ29uc3RhbnRzID0gZm91bmRDb25zdGFudHM7IH0KIAorICAgIHZvaWQgc2V0
UHJvb2ZTdGF0dXMoRWRnZSYgZWRnZSwgUHJvb2ZTdGF0dXMgc3RhdHVzKQorICAgIHsKKyAgICAg
ICAgZWRnZS5zZXRQcm9vZlN0YXR1cyhzdGF0dXMpOworICAgIH0KKwogcHJpdmF0ZToKICAgICB2
b2lkIG1lcmdlU3RhdGVBdFRhaWwoQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24sIEFic3RyYWN0
VmFsdWUmIGluVmFyaWFibGUsIE5vZGUqKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdMSUNNUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTElDTVBoYXNlLmNwcAkocmV2aXNpb24gMjI1ODc2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdMSUNNUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjAsNyAr
MjIwLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IGF0dGVtcHRI
b2lzdChibG9jaywgbm9kZVJlZiwgbG9vcFN0YWNrW3N0YWNrSW5kZXhdKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXR1cm4gY2hhbmdlZDsKICAgICB9
CiAKQEAgLTI5NywxNSArMjk3LDI4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgIlxuIik7
CiAgICAgICAgIH0KIAotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFkanVzdCB0aGUgQ2hl
Y2s6IGZsYWdzIG9uIHRoZSBlZGdlcyBvZiBub2RlLiBUaGVyZSBhcmUgcGhhc2VzIHRoYXQgYXNz
dW1lCi0gICAgICAgIC8vIHRoYXQgdGhvc2UgZmxhZ3MgYXJlIGNvcnJlY3QgZXZlbiBpZiBBSSBp
cyBzdGFsZS4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0ODU0NAogICAgICAgICBkYXRhLnByZUhlYWRlci0+aW5zZXJ0QmVmb3JlVGVybWluYWwo
bm9kZSk7CiAgICAgICAgIG5vZGUtPm93bmVyID0gZGF0YS5wcmVIZWFkZXI7CiAgICAgICAgIE5v
ZGVPcmlnaW4gdGVybWluYWxPcmlnaW4gPSBkYXRhLnByZUhlYWRlci0+dGVybWluYWwoKS0+b3Jp
Z2luOwogICAgICAgICBub2RlLT5vcmlnaW4gPSB0ZXJtaW5hbE9yaWdpbi53aXRoU2VtYW50aWMo
bm9kZS0+b3JpZ2luLnNlbWFudGljKTsKICAgICAgICAgbm9kZS0+b3JpZ2luLndhc0hvaXN0ZWQg
fD0gYWRkc0JsaW5kU3BlY3VsYXRpb247CiAgICAgICAgIAorICAgICAgICAvLyBXZSBjYW4gdHJ1
c3Qgd2hhdCBBSSBwcm92ZXMgYWJvdXQgZWRnZSBwcm9vZiBzdGF0dXNlcyB3aGVuIGhvaXN0aW5n
IHRvIHRoZSBwcmVoZWFkZXIuCisgICAgICAgIG1fc3RhdGUudHJ1c3RFZGdlUHJvb2ZzKCk7Cisg
ICAgICAgIG1fc3RhdGUuaW5pdGlhbGl6ZVRvKGRhdGEucHJlSGVhZGVyKTsKKyAgICAgICAgbV9p
bnRlcnByZXRlci5leGVjdXRlKG5vZGUpOworICAgICAgICAvLyBIb3dldmVyLCB3aGVuIHdhbGtp
bmcgdmFyaW91cyBpbm5lciBsb29wcyBiZWxvdywgdGhlIHByb29mIHN0YXR1cyBvZgorICAgICAg
ICAvLyBhbiBlZGdlIG1heSBiZSB0cml2aWFsbHkgdHJ1ZSwgZXZlbiBpZiBpdCdzIG5vdCB0cnVl
IGluIHRoZSBwcmVoZWFkZXIKKyAgICAgICAgLy8gd2UgaG9pc3QgdG8uIFdlIGRvbid0IGFsbG93
IHRoZSBiZWxvdyBub2RlIGV4ZWN1dGlvbnMgdG8gY2hhbmdlIHRoZQorICAgICAgICAvLyBzdGF0
ZSBvZiBlZGdlIHByb29mcy4gQW4gZXhhbXBsZSBvZiB3aGVyZSBhIHByb29mIGlzIHRyaXZpYWxs
eSB0cnVlCisgICAgICAgIC8vIGlzIGlmIHdlIGhhdmUgdHdvIGxvb3BzLCBMMSBhbmQgTDIsIHdo
ZXJlIEwyIGlzIG5lc3RlZCBpbnNpZGUgTDEuIFRoZQorICAgICAgICAvLyBoZWFkZXIgZm9yIEwx
IGRvbWluYXRlcyBMMi4gV2UgaG9pc3QgYSBDaGVjayBmcm9tIEwxJ3MgaGVhZGVyIGludG8gTDEn
cworICAgICAgICAvLyBwcmVoZWFkZXIuIEhvd2V2ZXIsIGluc2lkZSBMMidzIHByZWhlYWRlciwg
d2UgY2FuJ3QgdHJ1c3QgdGhhdCBBSSB3aWxsCisgICAgICAgIC8vIHRlbGwgdXMgdGhpcyBlZGdl
IGlzIHByb3Zlbi4gSXQncyBwcm92ZW4gaW4gTDIncyBwcmVoZWFkZXIgYmVjYXVzZSBMMgorICAg
ICAgICAvLyBpcyBkb21pbmF0ZWQgYnkgTDEncyBoZWFkZXIuIEhvd2V2ZXIsIHRoZSBlZGdlIGlz
IG5vZGUgcHJvdmVuIGluc2lkZQorICAgICAgICAvLyBMMSdzIHByZWhlYWRlci4KKyAgICAgICAg
bV9zdGF0ZS5kb250VHJ1c3RFZGdlUHJvb2ZzKCk7CisKICAgICAgICAgLy8gTW9kaWZ5IHRoZSBz
dGF0ZXMgYXQgdGhlIGVuZCBvZiB0aGUgcHJlSGVhZGVyIG9mIHRoZSBsb29wIHdlIGhvaXN0ZWQg
dG8sCiAgICAgICAgIC8vIGFuZCBhbGwgcHJlLWhlYWRlcnMgaW5zaWRlIHRoZSBsb29wLiBUaGlz
IGlzbid0IGEgc3RhYmlsaXR5IGJvdHRsZW5lY2sgcmlnaHQgbm93CiAgICAgICAgIC8vIGJlY2F1
c2UgbW9zdCBsb29wcyBhcmUgc21hbGwgYW5kIG1vc3QgYmxvY2tzIGJlbG9uZyB0byBmZXcgbG9v
cHMuCkBAIC0zMjMsMTAgKzMzNiwxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgLy8gVGhlIHBy
ZS1oZWFkZXIncyB0YWlsIG1heSBiZSB1bnJlYWNoYWJsZSwgaW4gd2hpY2ggY2FzZSB3ZSBoYXZl
IG5vdGhpbmcgdG8gZG8uCiAgICAgICAgICAgICBpZiAoIXN1YlByZUhlYWRlci0+Y2ZhRGlkRmlu
aXNoKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgLy8gV2UgaGFuZGxl
ZCB0aGlzIGFib3ZlLgorICAgICAgICAgICAgaWYgKHN1YlByZUhlYWRlciA9PSBkYXRhLnByZUhl
YWRlcikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIG1fc3RhdGUuaW5p
dGlhbGl6ZVRvKHN1YlByZUhlYWRlcik7CiAgICAgICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1
dGUobm9kZSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgLy8gSXQganVzdCBzbyBo
YXBwZW5zIHRoYXQgYWxsIG9mIHRoZSBub2RlcyB3ZSBjdXJyZW50bHkga25vdyBob3cgdG8gaG9p
c3QKICAgICAgICAgLy8gZG9uJ3QgaGF2ZSB2YXItYXJnIGNoaWxkcmVuLiBUaGF0IG1heSBjaGFu
Z2UgYW5kIHRoZW4gd2UgY2FuIGZpeCB0aGlzCiAgICAgICAgIC8vIGNvZGUuIEJ1dCBmb3Igbm93
IHdlIGp1c3QgYXNzZXJ0IHRoYXQncyB0aGUgY2FzZS4K
</data>
<flag name="review"
          id="348537"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>329445</attachid>
            <date>2017-12-14 19:33:41 -0800</date>
            <delta_ts>2017-12-14 19:36:42 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>8339</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMjU5NTQpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEzIEBACisyMDE3LTEyLTE0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFRoZSBDbGVhblVwIGFmdGVyIExJQ00gaXMgZXJyb25lb3VzbHkgcmVt
b3ZpbmcgYSBDaGVjaworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTgwODUyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zNjA2MzQ5ND4KKworICAgICAg
ICBSZXZpZXdlZCBieSBGaWxpcCBQaXpsby4KKworICAgICAgICAqIHN0cmVzcy9kb250LXJ1bi1j
bGVhbnVwLWFmdGVyLWxpY20uanM6IEFkZGVkLgorCiAyMDE3LTEyLTE0ICBNaWNoYWVsIFNhYm9m
ZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIyMjU2OTUpOiBS
ZXBybyBjcmFzaCBvbiB5YWhvbyBsb2dpbiBwYWdlCkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9kb250
LXJ1bi1jbGVhbnVwLWFmdGVyLWxpY20uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3Mv
ZG9udC1ydW4tY2xlYW51cC1hZnRlci1saWNtLmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMv
c3RyZXNzL2RvbnQtcnVuLWNsZWFudXAtYWZ0ZXItbGljbS5qcwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDE0IEBACitmdW5jdGlvbiBmb28oc3RyaW5nKSB7CisgICAgdmFyIHJlc3VsdDEsIHJl
c3VsdDI7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwOyArK2kpIHsKKyAgICAgICAgcmVz
dWx0MSA9IHN0cmluZ1swXTsgCisgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMTA7ICsraikK
KyAgICAgICAgICAgIHJlc3VsdDIgPSAxOworICAgIH0KKyAgIHJldHVybiBbcmVzdWx0MSwgcmVz
dWx0Ml07Cit9Citub0lubGluZShmb28pOworCitmb28oIiAiKTsKK2ZvciAodmFyIGkgPSAwOyBp
IDwgMTAwMDsgaSsrKQorICAgIGZvbyhuZXcgRXJyb3IoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
aGFuZ2VMb2cJKHJldmlzaW9uIDIyNTg3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMyBAQAorMjAxNy0xMi0xNCAgU2FhbSBC
YXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAgICBUaGUgQ2xlYW5VcCBhZnRlciBM
SUNNIGlzIGVycm9uZW91c2x5IHJlbW92aW5nIGEgQ2hlY2sKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MDg1MgorICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vMzYwNjM0OTQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRmlsaXAgUGl6bG8uCisKKyAgICAg
ICAgVGhlcmUgd2FzIGEgYnVnIHdoZXJlIENsZWFuVXAgcGhhc2UgcmVsaWVkIG9uIGlzUHJvdmVk
KCkgYml0cyBhbmQgTElDTQorICAgICAgICBjaGFuZ2VkIHRoZW0gaW4gYW4gaW52YWxpZCB3YXku
IFRoZSBidWcgaXMgYXMgZm9sbG93czoKKyAgICAgICAgCisgICAgICAgIFdlIGhhdmUgdHdvIGxv
b3BzLCBMMSBhbmQgTDIsIGFuZCB0d28gcHJlaGVhZGVycywgUDEgYW5kIFAyLiBMMiBpcyBuZXN0
ZWQKKyAgICAgICAgaW5zaWRlIG9mIEwxLiBXZSBoYXZlIGEgQ2hlY2sgaW5zaWRlIGEgbm9kZSBp
bnNpZGUgTDEsIHNheSBpbiBiYXNpYyBibG9jayBCQiwKKyAgICAgICAgYW5kIHRoYXQgQ2hlY2sg
ZG9taW5hdGVzIGFsbCBvZiBMMi4gVGhpcyBpcyBhbHNvIGEgaG9pc3RpbmcgY2FuZGlkYXRlLCBz
byB3ZQorICAgICAgICBob2lzdCBpdCBvdXRzaWRlIG9mIEwxIGFuZCBwdXQgaXQgaW5zaWRlIFAx
LiBUaGVuLCB3aGVuIHdlIHJ1biBBSSwgd2UgbG9vayBhdAorICAgICAgICB0aGUgcHJlaGVhZGVy
IGZvciBlYWNoIGxvb3AgaW5zaWRlIEwxLCBzbyBQMSBhbmQgUDIuIFdoZW4gY29uc2lkZXJpbmcg
UDIsCisgICAgICAgIHdlIGV4ZWN1dGUgdGhlIENoZWNrLiBJbnNpZGUgUDIsIGJlZm9yZSBhbnkg
aG9pc3RpbmcgaXMgZG9uZSwgdGhpcyBDaGVjaworICAgICAgICBpcyBkZWFkIGNvZGUsIGJlY2F1
c2UgQkIgZG9taW5hdGVzIFAyLiBXaGVuIHdlIHVzZSBBSSB0byAiZXhlY3V0ZSIgdGhlCisgICAg
ICAgIENoZWNrLCBpdCdsbCBzZXQgaXRzIHByb29mIHN0YXR1cyB0byBwcm92ZWQuIFRoaXMgaXMg
YmVjYXVzZSBpbnNpZGUgUDIsCisgICAgICAgIGluIHRoZSBwcm9ncmFtIGJlZm9yZSBMSUNNIHJ1
bnMsIHRoZSBDaGVjayBpcyBpbmRlZWQgcHJvdmVuIGF0IFAyLiBCdXQKKyAgICAgICAgaXQgaXMg
bm90IHByb3ZlbiBpbnNpZGUgUDEuIFRoaXMgImV4ZWN1dGUiIGNhbGwgd2lsbCBzZXQgb3VyIHBy
b29mIHN0YXR1cworICAgICAgICBmb3IgdGhlIG5vZGUgaW5zaWRlICpQMSosIGhlbmNlLCB3ZSBj
cmFzaC4KKyAgICAgICAgCisgICAgICAgIFRoZSBmaXggaGVyZSBpcyB0byBtYWtlIExJQ00gcHJl
Y2lzZSB3aGVuIHVwZGF0aW5nIHRoZSBQcm9vZlN0YXR1cyBvZiBhbiBlZGdlLgorICAgICAgICBJ
dCBjYW4gdHJ1c3QgdGhlIEFJIHN0YXRlIGF0IHRoZSBwcmVoZWFkZXIgaXQgaG9pc3RzIHRoZSBu
b2RlIHRvLCBidXQgaXQgY2FuJ3QKKyAgICAgICAgdHJ1c3QgdGhlIHN0YXRlIHdoZW4gZXhlY3V0
aW5nIGVmZmVjdHMgaW5zaWRlIGlubmVyIGxvb3BzJ3MgcHJlaGVhZGVycy4KKworICAgICAgICAq
IGRmZy9ERkdQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpjb21waWxlSW5UaHJl
YWRJbXBsKToKKwogMjAxNy0xMi0xMyAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4K
IAogICAgICAgICBSRUdSRVNTSU9OKHIyMjU4NDQpOiBBcm91bmQgODUwIG5ldyBKU0MgZmFpbHVy
ZXMgb24gMzItYml0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
SW50ZXJwcmV0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAkocmV2aXNpb24gMjI1ODc2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE4MiwxMSArMTgyLDcgQEAgcHJpdmF0ZToKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZmlsdGVy
QnlUeXBlKEVkZ2UmIGVkZ2UsIFNwZWN1bGF0ZWRUeXBlIHR5cGUpCiAgICAgewogICAgICAgICBB
YnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUoZWRnZSk7Ci0gICAgICAgIGlmICghdmFsdWUu
aXNUeXBlKHR5cGUpKQotICAgICAgICAgICAgZWRnZS5zZXRQcm9vZlN0YXR1cyhOZWVkc0NoZWNr
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZWRnZS5zZXRQcm9vZlN0YXR1cyhJc1Byb3Zl
ZCk7Ci0gICAgICAgIAorICAgICAgICBtX3N0YXRlLnNldFByb29mU3RhdHVzKGVkZ2UsIHZhbHVl
LmlzVHlwZSh0eXBlKSA/IElzUHJvdmVkIDogTmVlZHNDaGVjayk7CiAgICAgICAgIGZpbHRlcih2
YWx1ZSwgdHlwZSk7CiAgICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgJKHJldmlzaW9uIDIyNTg3NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NSwxMCArNjUsMTkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0QnJhbmNo
RGlyZWN0aW9uKEJyYW5jaERpcmVjdGlvbikgeyB9CiAgICAgdm9pZCBzZXRGb3VuZENvbnN0YW50
cyhib29sKSB7IH0KIAorICAgIHZvaWQgdHJ1c3RFZGdlUHJvb2ZzKCkgeyBtX3RydXN0RWRnZVBy
b29mcyA9IHRydWU7IH0KKyAgICB2b2lkIGRvbnRUcnVzdEVkZ2VQcm9vZnMoKSB7IG1fdHJ1c3RF
ZGdlUHJvb2ZzID0gZmFsc2U7IH0KKyAgICB2b2lkIHNldFByb29mU3RhdHVzKEVkZ2UmIGVkZ2Us
IFByb29mU3RhdHVzIHN0YXR1cykKKyAgICB7CisgICAgICAgIGlmIChtX3RydXN0RWRnZVByb29m
cykKKyAgICAgICAgICAgIGVkZ2Uuc2V0UHJvb2ZTdGF0dXMoc3RhdHVzKTsKKyAgICB9CisKIHBy
aXZhdGU6CiAgICAgR3JhcGgmIG1fZ3JhcGg7CiAgICAgQmxvY2tNYXA8SGFzaE1hcDxOb2RlRmxv
d1Byb2plY3Rpb24sIEFic3RyYWN0VmFsdWU+PiBtX3ZhbHVlc0F0VGFpbE1hcDsKICAgICBCYXNp
Y0Jsb2NrKiBtX2Jsb2NrIHsgbnVsbHB0ciB9OworICAgIGJvb2wgbV90cnVzdEVkZ2VQcm9vZnMg
eyBmYWxzZSB9OwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaAko
cmV2aXNpb24gMjI1ODc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNl
QWJzdHJhY3RTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNiArMTI2LDExIEBAIHB1Ymxp
YzoKICAgICAvLyBTbywgd2Ugc2hvdWxkIHByb2JhYmx5IGtlZXAgdGhpcyBtZXRob2QuCiAgICAg
dm9pZCBzZXRGb3VuZENvbnN0YW50cyhib29sIGZvdW5kQ29uc3RhbnRzKSB7IG1fZm91bmRDb25z
dGFudHMgPSBmb3VuZENvbnN0YW50czsgfQogCisgICAgdm9pZCBzZXRQcm9vZlN0YXR1cyhFZGdl
JiBlZGdlLCBQcm9vZlN0YXR1cyBzdGF0dXMpCisgICAgeworICAgICAgICBlZGdlLnNldFByb29m
U3RhdHVzKHN0YXR1cyk7CisgICAgfQorCiBwcml2YXRlOgogICAgIHZvaWQgbWVyZ2VTdGF0ZUF0
VGFpbChBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiwgQWJzdHJhY3RWYWx1ZSYgaW5WYXJpYWJs
ZSwgTm9kZSopOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xJQ01QaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMSUNNUGhh
c2UuY3BwCShyZXZpc2lvbiAyMjU4NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0xJQ01QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMCw3ICsyMjAsNyBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gYXR0ZW1wdEhvaXN0KGJsb2NrLCBub2Rl
UmVmLCBsb29wU3RhY2tbc3RhY2tJbmRleF0pOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0g
ICAgICAgIAorCiAgICAgICAgIHJldHVybiBjaGFuZ2VkOwogICAgIH0KIApAQCAtMjk3LDE1ICsy
OTcsMjggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAiXG4iKTsKICAgICAgICAgfQogCi0g
ICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYWRqdXN0IHRoZSBDaGVjazogZmxhZ3Mgb24gdGhl
IGVkZ2VzIG9mIG5vZGUuIFRoZXJlIGFyZSBwaGFzZXMgdGhhdCBhc3N1bWUKLSAgICAgICAgLy8g
dGhhdCB0aG9zZSBmbGFncyBhcmUgY29ycmVjdCBldmVuIGlmIEFJIGlzIHN0YWxlLgotICAgICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4NTQ0CiAgICAg
ICAgIGRhdGEucHJlSGVhZGVyLT5pbnNlcnRCZWZvcmVUZXJtaW5hbChub2RlKTsKICAgICAgICAg
bm9kZS0+b3duZXIgPSBkYXRhLnByZUhlYWRlcjsKICAgICAgICAgTm9kZU9yaWdpbiB0ZXJtaW5h
bE9yaWdpbiA9IGRhdGEucHJlSGVhZGVyLT50ZXJtaW5hbCgpLT5vcmlnaW47CiAgICAgICAgIG5v
ZGUtPm9yaWdpbiA9IHRlcm1pbmFsT3JpZ2luLndpdGhTZW1hbnRpYyhub2RlLT5vcmlnaW4uc2Vt
YW50aWMpOwogICAgICAgICBub2RlLT5vcmlnaW4ud2FzSG9pc3RlZCB8PSBhZGRzQmxpbmRTcGVj
dWxhdGlvbjsKICAgICAgICAgCisgICAgICAgIC8vIFdlIGNhbiB0cnVzdCB3aGF0IEFJIHByb3Zl
cyBhYm91dCBlZGdlIHByb29mIHN0YXR1c2VzIHdoZW4gaG9pc3RpbmcgdG8gdGhlIHByZWhlYWRl
ci4KKyAgICAgICAgbV9zdGF0ZS50cnVzdEVkZ2VQcm9vZnMoKTsKKyAgICAgICAgbV9zdGF0ZS5p
bml0aWFsaXplVG8oZGF0YS5wcmVIZWFkZXIpOworICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1
dGUobm9kZSk7CisgICAgICAgIC8vIEhvd2V2ZXIsIHdoZW4gd2Fsa2luZyB2YXJpb3VzIGlubmVy
IGxvb3BzIGJlbG93LCB0aGUgcHJvb2Ygc3RhdHVzIG9mCisgICAgICAgIC8vIGFuIGVkZ2UgbWF5
IGJlIHRyaXZpYWxseSB0cnVlLCBldmVuIGlmIGl0J3Mgbm90IHRydWUgaW4gdGhlIHByZWhlYWRl
cgorICAgICAgICAvLyB3ZSBob2lzdCB0by4gV2UgZG9uJ3QgYWxsb3cgdGhlIGJlbG93IG5vZGUg
ZXhlY3V0aW9ucyB0byBjaGFuZ2UgdGhlCisgICAgICAgIC8vIHN0YXRlIG9mIGVkZ2UgcHJvb2Zz
LiBBbiBleGFtcGxlIG9mIHdoZXJlIGEgcHJvb2YgaXMgdHJpdmlhbGx5IHRydWUKKyAgICAgICAg
Ly8gaXMgaWYgd2UgaGF2ZSB0d28gbG9vcHMsIEwxIGFuZCBMMiwgd2hlcmUgTDIgaXMgbmVzdGVk
IGluc2lkZSBMMS4gVGhlCisgICAgICAgIC8vIGhlYWRlciBmb3IgTDEgZG9taW5hdGVzIEwyLiBX
ZSBob2lzdCBhIENoZWNrIGZyb20gTDEncyBoZWFkZXIgaW50byBMMSdzCisgICAgICAgIC8vIHBy
ZWhlYWRlci4gSG93ZXZlciwgaW5zaWRlIEwyJ3MgcHJlaGVhZGVyLCB3ZSBjYW4ndCB0cnVzdCB0
aGF0IEFJIHdpbGwKKyAgICAgICAgLy8gdGVsbCB1cyB0aGlzIGVkZ2UgaXMgcHJvdmVuLiBJdCdz
IHByb3ZlbiBpbiBMMidzIHByZWhlYWRlciBiZWNhdXNlIEwyCisgICAgICAgIC8vIGlzIGRvbWlu
YXRlZCBieSBMMSdzIGhlYWRlci4gSG93ZXZlciwgdGhlIGVkZ2UgaXMgbm9kZSBwcm92ZW4gaW5z
aWRlCisgICAgICAgIC8vIEwxJ3MgcHJlaGVhZGVyLgorICAgICAgICBtX3N0YXRlLmRvbnRUcnVz
dEVkZ2VQcm9vZnMoKTsKKwogICAgICAgICAvLyBNb2RpZnkgdGhlIHN0YXRlcyBhdCB0aGUgZW5k
IG9mIHRoZSBwcmVIZWFkZXIgb2YgdGhlIGxvb3Agd2UgaG9pc3RlZCB0bywKICAgICAgICAgLy8g
YW5kIGFsbCBwcmUtaGVhZGVycyBpbnNpZGUgdGhlIGxvb3AuIFRoaXMgaXNuJ3QgYSBzdGFiaWxp
dHkgYm90dGxlbmVjayByaWdodCBub3cKICAgICAgICAgLy8gYmVjYXVzZSBtb3N0IGxvb3BzIGFy
ZSBzbWFsbCBhbmQgbW9zdCBibG9ja3MgYmVsb25nIHRvIGZldyBsb29wcy4KQEAgLTMyMywxMCAr
MzM2LDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAvLyBUaGUgcHJlLWhlYWRlcidzIHRhaWwg
bWF5IGJlIHVucmVhY2hhYmxlLCBpbiB3aGljaCBjYXNlIHdlIGhhdmUgbm90aGluZyB0byBkby4K
ICAgICAgICAgICAgIGlmICghc3ViUHJlSGVhZGVyLT5jZmFEaWRGaW5pc2gpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAvLyBXZSBoYW5kbGVkIHRoaXMgYWJvdmUuCisg
ICAgICAgICAgICBpZiAoc3ViUHJlSGVhZGVyID09IGRhdGEucHJlSGVhZGVyKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgbV9zdGF0ZS5pbml0aWFsaXplVG8oc3ViUHJl
SGVhZGVyKTsKICAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZShub2RlKTsKICAgICAg
ICAgfQotICAgICAgICAKKwogICAgICAgICAvLyBJdCBqdXN0IHNvIGhhcHBlbnMgdGhhdCBhbGwg
b2YgdGhlIG5vZGVzIHdlIGN1cnJlbnRseSBrbm93IGhvdyB0byBob2lzdAogICAgICAgICAvLyBk
b24ndCBoYXZlIHZhci1hcmcgY2hpbGRyZW4uIFRoYXQgbWF5IGNoYW5nZSBhbmQgdGhlbiB3ZSBj
YW4gZml4IHRoaXMKICAgICAgICAgLy8gY29kZS4gQnV0IGZvciBub3cgd2UganVzdCBhc3NlcnQg
dGhhdCdzIHRoZSBjYXNlLgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>329446</attachid>
            <date>2017-12-14 19:36:42 -0800</date>
            <delta_ts>2017-12-14 22:20:11 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>8355</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMjU5NTQpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEzIEBACisyMDE3LTEyLTE0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFRoZSBDbGVhblVwIGFmdGVyIExJQ00gaXMgZXJyb25lb3VzbHkgcmVt
b3ZpbmcgYSBDaGVjaworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTgwODUyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zNjA2MzQ5ND4KKworICAgICAg
ICBSZXZpZXdlZCBieSBGaWxpcCBQaXpsby4KKworICAgICAgICAqIHN0cmVzcy9kb250LXJ1bi1j
bGVhbnVwLWFmdGVyLWxpY20uanM6IEFkZGVkLgorCiAyMDE3LTEyLTE0ICBNaWNoYWVsIFNhYm9m
ZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIyMjU2OTUpOiBS
ZXBybyBjcmFzaCBvbiB5YWhvbyBsb2dpbiBwYWdlCkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9kb250
LXJ1bi1jbGVhbnVwLWFmdGVyLWxpY20uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3Mv
ZG9udC1ydW4tY2xlYW51cC1hZnRlci1saWNtLmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMv
c3RyZXNzL2RvbnQtcnVuLWNsZWFudXAtYWZ0ZXItbGljbS5qcwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDE0IEBACitmdW5jdGlvbiBmb28oc3RyaW5nKSB7CisgICAgdmFyIHJlc3VsdDEsIHJl
c3VsdDI7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwOyArK2kpIHsKKyAgICAgICAgcmVz
dWx0MSA9IHN0cmluZ1swXTsgCisgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgMTA7ICsraikK
KyAgICAgICAgICAgIHJlc3VsdDIgPSAxOworICAgIH0KKyAgIHJldHVybiBbcmVzdWx0MSwgcmVz
dWx0Ml07Cit9Citub0lubGluZShmb28pOworCitmb28oIiAiKTsKK2ZvciAodmFyIGkgPSAwOyBp
IDwgMTAwMDsgaSsrKQorICAgIGZvbyhuZXcgRXJyb3IoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
aGFuZ2VMb2cJKHJldmlzaW9uIDIyNTg3NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMyBAQAorMjAxNy0xMi0xNCAgU2FhbSBC
YXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAgICBUaGUgQ2xlYW5VcCBhZnRlciBM
SUNNIGlzIGVycm9uZW91c2x5IHJlbW92aW5nIGEgQ2hlY2sKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MDg1MgorICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vMzYwNjM0OTQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRmlsaXAgUGl6bG8uCisKKyAgICAg
ICAgVGhlcmUgd2FzIGEgYnVnIHdoZXJlIENsZWFuVXAgcGhhc2UgcmVsaWVkIG9uIGlzUHJvdmVk
KCkgYml0cyBhbmQgTElDTQorICAgICAgICBjaGFuZ2VkIHRoZW0gaW4gYW4gaW52YWxpZCB3YXku
IFRoZSBidWcgaXMgYXMgZm9sbG93czoKKyAgICAgICAgCisgICAgICAgIFdlIGhhdmUgdHdvIGxv
b3BzLCBMMSBhbmQgTDIsIGFuZCB0d28gcHJlaGVhZGVycywgUDEgYW5kIFAyLiBMMiBpcyBuZXN0
ZWQKKyAgICAgICAgaW5zaWRlIG9mIEwxLiBXZSBoYXZlIGEgQ2hlY2sgaW5zaWRlIGEgbm9kZSBp
bnNpZGUgTDEsIHNheSBpbiBiYXNpYyBibG9jayBCQiwKKyAgICAgICAgYW5kIHRoYXQgQ2hlY2sg
ZG9taW5hdGVzIGFsbCBvZiBMMi4gVGhpcyBpcyBhbHNvIGEgaG9pc3RpbmcgY2FuZGlkYXRlLCBz
byB3ZQorICAgICAgICBob2lzdCBpdCBvdXRzaWRlIG9mIEwxIGFuZCBwdXQgaXQgaW5zaWRlIFAx
LiBUaGVuLCB3aGVuIHdlIHJ1biBBSSwgd2UgbG9vayBhdAorICAgICAgICB0aGUgcHJlaGVhZGVy
IGZvciBlYWNoIGxvb3AgaW5zaWRlIEwxLCBzbyBQMSBhbmQgUDIuIFdoZW4gY29uc2lkZXJpbmcg
UDIsCisgICAgICAgIHdlIGV4ZWN1dGUgdGhlIENoZWNrLiBJbnNpZGUgUDIsIGJlZm9yZSBhbnkg
aG9pc3RpbmcgaXMgZG9uZSwgdGhpcyBDaGVjaworICAgICAgICBpcyBkZWFkIGNvZGUsIGJlY2F1
c2UgQkIgZG9taW5hdGVzIFAyLiBXaGVuIHdlIHVzZSBBSSB0byAiZXhlY3V0ZSIgdGhlCisgICAg
ICAgIENoZWNrLCBpdCdsbCBzZXQgaXRzIHByb29mIHN0YXR1cyB0byBwcm92ZWQuIFRoaXMgaXMg
YmVjYXVzZSBpbnNpZGUgUDIsCisgICAgICAgIGluIHRoZSBwcm9ncmFtIGJlZm9yZSBMSUNNIHJ1
bnMsIHRoZSBDaGVjayBpcyBpbmRlZWQgcHJvdmVuIGF0IFAyLiBCdXQKKyAgICAgICAgaXQgaXMg
bm90IHByb3ZlbiBpbnNpZGUgUDEuIFRoaXMgImV4ZWN1dGUiIGNhbGwgd2lsbCBzZXQgb3VyIHBy
b29mIHN0YXR1cworICAgICAgICBmb3IgdGhlIG5vZGUgaW5zaWRlICpQMSosIGhlbmNlLCB3ZSBj
cmFzaC4KKyAgICAgICAgCisgICAgICAgIFRoZSBmaXggaGVyZSBpcyB0byBtYWtlIExJQ00gcHJl
Y2lzZSB3aGVuIHVwZGF0aW5nIHRoZSBQcm9vZlN0YXR1cyBvZiBhbiBlZGdlLgorICAgICAgICBJ
dCBjYW4gdHJ1c3QgdGhlIEFJIHN0YXRlIGF0IHRoZSBwcmVoZWFkZXIgaXQgaG9pc3RzIHRoZSBu
b2RlIHRvLCBidXQgaXQgY2FuJ3QKKyAgICAgICAgdHJ1c3QgdGhlIHN0YXRlIHdoZW4gZXhlY3V0
aW5nIGVmZmVjdHMgaW5zaWRlIGlubmVyIGxvb3BzJ3MgcHJlaGVhZGVycy4KKworICAgICAgICAq
IGRmZy9ERkdQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpjb21waWxlSW5UaHJl
YWRJbXBsKToKKwogMjAxNy0xMi0xMyAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4K
IAogICAgICAgICBSRUdSRVNTSU9OKHIyMjU4NDQpOiBBcm91bmQgODUwIG5ldyBKU0MgZmFpbHVy
ZXMgb24gMzItYml0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
SW50ZXJwcmV0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAkocmV2aXNpb24gMjI1ODc2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE4MiwxMSArMTgyLDcgQEAgcHJpdmF0ZToKICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZmlsdGVy
QnlUeXBlKEVkZ2UmIGVkZ2UsIFNwZWN1bGF0ZWRUeXBlIHR5cGUpCiAgICAgewogICAgICAgICBB
YnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUoZWRnZSk7Ci0gICAgICAgIGlmICghdmFsdWUu
aXNUeXBlKHR5cGUpKQotICAgICAgICAgICAgZWRnZS5zZXRQcm9vZlN0YXR1cyhOZWVkc0NoZWNr
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZWRnZS5zZXRQcm9vZlN0YXR1cyhJc1Byb3Zl
ZCk7Ci0gICAgICAgIAorICAgICAgICBtX3N0YXRlLnNldFByb29mU3RhdHVzKGVkZ2UsIHZhbHVl
LmlzVHlwZSh0eXBlKSA/IElzUHJvdmVkIDogTmVlZHNDaGVjayk7CiAgICAgICAgIGZpbHRlcih2
YWx1ZSwgdHlwZSk7CiAgICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgJKHJldmlzaW9uIDIyNTg3NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NSwxMCArNjUsMTkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0QnJhbmNo
RGlyZWN0aW9uKEJyYW5jaERpcmVjdGlvbikgeyB9CiAgICAgdm9pZCBzZXRGb3VuZENvbnN0YW50
cyhib29sKSB7IH0KIAorICAgIHZvaWQgdHJ1c3RFZGdlUHJvb2ZzKCkgeyBtX3RydXN0RWRnZVBy
b29mcyA9IHRydWU7IH0KKyAgICB2b2lkIGRvbnRUcnVzdEVkZ2VQcm9vZnMoKSB7IG1fdHJ1c3RF
ZGdlUHJvb2ZzID0gZmFsc2U7IH0KKyAgICB2b2lkIHNldFByb29mU3RhdHVzKEVkZ2UmIGVkZ2Us
IFByb29mU3RhdHVzIHN0YXR1cykKKyAgICB7CisgICAgICAgIGlmIChtX3RydXN0RWRnZVByb29m
cykKKyAgICAgICAgICAgIGVkZ2Uuc2V0UHJvb2ZTdGF0dXMoc3RhdHVzKTsKKyAgICB9CisKIHBy
aXZhdGU6CiAgICAgR3JhcGgmIG1fZ3JhcGg7CiAgICAgQmxvY2tNYXA8SGFzaE1hcDxOb2RlRmxv
d1Byb2plY3Rpb24sIEFic3RyYWN0VmFsdWU+PiBtX3ZhbHVlc0F0VGFpbE1hcDsKICAgICBCYXNp
Y0Jsb2NrKiBtX2Jsb2NrIHsgbnVsbHB0ciB9OworICAgIGJvb2wgbV90cnVzdEVkZ2VQcm9vZnMg
eyBmYWxzZSB9OwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaAko
cmV2aXNpb24gMjI1ODc2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNl
QWJzdHJhY3RTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNiArMTI2LDExIEBAIHB1Ymxp
YzoKICAgICAvLyBTbywgd2Ugc2hvdWxkIHByb2JhYmx5IGtlZXAgdGhpcyBtZXRob2QuCiAgICAg
dm9pZCBzZXRGb3VuZENvbnN0YW50cyhib29sIGZvdW5kQ29uc3RhbnRzKSB7IG1fZm91bmRDb25z
dGFudHMgPSBmb3VuZENvbnN0YW50czsgfQogCisgICAgdm9pZCBzZXRQcm9vZlN0YXR1cyhFZGdl
JiBlZGdlLCBQcm9vZlN0YXR1cyBzdGF0dXMpCisgICAgeworICAgICAgICBlZGdlLnNldFByb29m
U3RhdHVzKHN0YXR1cyk7CisgICAgfQorCiBwcml2YXRlOgogICAgIHZvaWQgbWVyZ2VTdGF0ZUF0
VGFpbChBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiwgQWJzdHJhY3RWYWx1ZSYgaW5WYXJpYWJs
ZSwgTm9kZSopOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xJQ01QaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMSUNNUGhh
c2UuY3BwCShyZXZpc2lvbiAyMjU4NzYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0xJQ01QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMCw3ICsyMjAsNyBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gYXR0ZW1wdEhvaXN0KGJsb2NrLCBub2Rl
UmVmLCBsb29wU3RhY2tbc3RhY2tJbmRleF0pOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0g
ICAgICAgIAorCiAgICAgICAgIHJldHVybiBjaGFuZ2VkOwogICAgIH0KIApAQCAtMjk3LDE1ICsy
OTcsMjggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAiXG4iKTsKICAgICAgICAgfQogCi0g
ICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYWRqdXN0IHRoZSBDaGVjazogZmxhZ3Mgb24gdGhl
IGVkZ2VzIG9mIG5vZGUuIFRoZXJlIGFyZSBwaGFzZXMgdGhhdCBhc3N1bWUKLSAgICAgICAgLy8g
dGhhdCB0aG9zZSBmbGFncyBhcmUgY29ycmVjdCBldmVuIGlmIEFJIGlzIHN0YWxlLgotICAgICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4NTQ0CiAgICAg
ICAgIGRhdGEucHJlSGVhZGVyLT5pbnNlcnRCZWZvcmVUZXJtaW5hbChub2RlKTsKICAgICAgICAg
bm9kZS0+b3duZXIgPSBkYXRhLnByZUhlYWRlcjsKICAgICAgICAgTm9kZU9yaWdpbiB0ZXJtaW5h
bE9yaWdpbiA9IGRhdGEucHJlSGVhZGVyLT50ZXJtaW5hbCgpLT5vcmlnaW47CiAgICAgICAgIG5v
ZGUtPm9yaWdpbiA9IHRlcm1pbmFsT3JpZ2luLndpdGhTZW1hbnRpYyhub2RlLT5vcmlnaW4uc2Vt
YW50aWMpOwogICAgICAgICBub2RlLT5vcmlnaW4ud2FzSG9pc3RlZCB8PSBhZGRzQmxpbmRTcGVj
dWxhdGlvbjsKICAgICAgICAgCisgICAgICAgIC8vIFdlIGNhbiB0cnVzdCB3aGF0IEFJIHByb3Zl
cyBhYm91dCBlZGdlIHByb29mIHN0YXR1c2VzIHdoZW4gaG9pc3RpbmcgdG8gdGhlIHByZWhlYWRl
ci4KKyAgICAgICAgbV9zdGF0ZS50cnVzdEVkZ2VQcm9vZnMoKTsKKyAgICAgICAgbV9zdGF0ZS5p
bml0aWFsaXplVG8oZGF0YS5wcmVIZWFkZXIpOworICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1
dGUobm9kZSk7CisgICAgICAgIC8vIEhvd2V2ZXIsIHdoZW4gd2Fsa2luZyB2YXJpb3VzIGlubmVy
IGxvb3BzIGJlbG93LCB0aGUgcHJvb2Ygc3RhdHVzIG9mCisgICAgICAgIC8vIGFuIGVkZ2UgbWF5
IGJlIHRyaXZpYWxseSB0cnVlLCBldmVuIGlmIGl0J3Mgbm90IHRydWUgaW4gdGhlIHByZWhlYWRl
cgorICAgICAgICAvLyB3ZSBob2lzdCB0by4gV2UgZG9uJ3QgYWxsb3cgdGhlIGJlbG93IG5vZGUg
ZXhlY3V0aW9ucyB0byBjaGFuZ2UgdGhlCisgICAgICAgIC8vIHN0YXRlIG9mIGVkZ2UgcHJvb2Zz
LiBBbiBleGFtcGxlIG9mIHdoZXJlIGEgcHJvb2YgaXMgdHJpdmlhbGx5IHRydWUKKyAgICAgICAg
Ly8gaXMgaWYgd2UgaGF2ZSB0d28gbG9vcHMsIEwxIGFuZCBMMiwgd2hlcmUgTDIgaXMgbmVzdGVk
IGluc2lkZSBMMS4gVGhlCisgICAgICAgIC8vIGhlYWRlciBmb3IgTDEgZG9taW5hdGVzIEwyLiBX
ZSBob2lzdCBhIENoZWNrIGZyb20gTDEncyBoZWFkZXIgaW50byBMMSdzCisgICAgICAgIC8vIHBy
ZWhlYWRlci4gSG93ZXZlciwgaW5zaWRlIEwyJ3MgcHJlaGVhZGVyLCB3ZSBjYW4ndCB0cnVzdCB0
aGF0IEFJIHdpbGwKKyAgICAgICAgLy8gdGVsbCB1cyB0aGlzIGVkZ2UgaXMgcHJvdmVuLiBJdCdz
IHByb3ZlbiBpbiBMMidzIHByZWhlYWRlciBiZWNhdXNlIEwyCisgICAgICAgIC8vIGlzIGRvbWlu
YXRlZCBieSBMMSdzIGhlYWRlci4gSG93ZXZlciwgdGhlIGVkZ2UgaXMgbm90IGd1YXJhbnRlZWQg
dG8gYmUKKyAgICAgICAgLy8gcHJvdmVuIGluc2lkZSBMMSdzIHByZWhlYWRlci4KKyAgICAgICAg
bV9zdGF0ZS5kb250VHJ1c3RFZGdlUHJvb2ZzKCk7CisKICAgICAgICAgLy8gTW9kaWZ5IHRoZSBz
dGF0ZXMgYXQgdGhlIGVuZCBvZiB0aGUgcHJlSGVhZGVyIG9mIHRoZSBsb29wIHdlIGhvaXN0ZWQg
dG8sCiAgICAgICAgIC8vIGFuZCBhbGwgcHJlLWhlYWRlcnMgaW5zaWRlIHRoZSBsb29wLiBUaGlz
IGlzbid0IGEgc3RhYmlsaXR5IGJvdHRsZW5lY2sgcmlnaHQgbm93CiAgICAgICAgIC8vIGJlY2F1
c2UgbW9zdCBsb29wcyBhcmUgc21hbGwgYW5kIG1vc3QgYmxvY2tzIGJlbG9uZyB0byBmZXcgbG9v
cHMuCkBAIC0zMjMsMTAgKzMzNiwxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgLy8gVGhlIHBy
ZS1oZWFkZXIncyB0YWlsIG1heSBiZSB1bnJlYWNoYWJsZSwgaW4gd2hpY2ggY2FzZSB3ZSBoYXZl
IG5vdGhpbmcgdG8gZG8uCiAgICAgICAgICAgICBpZiAoIXN1YlByZUhlYWRlci0+Y2ZhRGlkRmlu
aXNoKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgLy8gV2UgaGFuZGxl
ZCB0aGlzIGFib3ZlLgorICAgICAgICAgICAgaWYgKHN1YlByZUhlYWRlciA9PSBkYXRhLnByZUhl
YWRlcikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIG1fc3RhdGUuaW5p
dGlhbGl6ZVRvKHN1YlByZUhlYWRlcik7CiAgICAgICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1
dGUobm9kZSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgLy8gSXQganVzdCBzbyBo
YXBwZW5zIHRoYXQgYWxsIG9mIHRoZSBub2RlcyB3ZSBjdXJyZW50bHkga25vdyBob3cgdG8gaG9p
c3QKICAgICAgICAgLy8gZG9uJ3QgaGF2ZSB2YXItYXJnIGNoaWxkcmVuLiBUaGF0IG1heSBjaGFu
Z2UgYW5kIHRoZW4gd2UgY2FuIGZpeCB0aGlzCiAgICAgICAgIC8vIGNvZGUuIEJ1dCBmb3Igbm93
IHdlIGp1c3QgYXNzZXJ0IHRoYXQncyB0aGUgY2FzZS4K
</data>

          </attachment>
      

    </bug>

</bugzilla>