<?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>196582</bug_id>
          
          <creation_ts>2019-04-03 17:15:50 -0700</creation_ts>
          <short_desc>[JSC] OSRExit recovery for SpeculativeAdd does not consier &quot;A = A + A&quot; pattern</short_desc>
          <delta_ts>2019-04-05 18:58:17 -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="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1524066</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-04-03 17:15:50 -0700</bug_when>
    <thetext>We have a code like this.

   4297         SpeculateInt32Operand op1(this, node-&gt;child1());
   4298         SpeculateInt32Operand op2(this, node-&gt;child2());
   4299         GPRTemporary result(this, Reuse, op1, op2);
   4300
   4301         GPRReg gpr1 = op1.gpr();
   4302         GPRReg gpr2 = op2.gpr();
   4303         GPRReg gprResult = result.gpr();
   4304
   4305         if (!shouldCheckOverflow(node-&gt;arithMode()))
   4306             m_jit.add32(gpr1, gpr2, gprResult);
   4307         else {
   4308             MacroAssembler::Jump check = m_jit.branchAdd32(MacroAssembler::Overflow, gpr1, gpr2, gprResult);
   4309
   4310             if (gpr1 == gprResult)
   4311                 speculationCheck(Overflow, JSValueRegs(), 0, check, SpeculationRecovery(SpeculativeAdd, gprResult, gpr2));
   4312             else if (gpr2 == gprResult)
   4313                 speculationCheck(Overflow, JSValueRegs(), 0, check, SpeculationRecovery(SpeculativeAdd, gprResult, gpr1));
   4314             else
   4315                 speculationCheck(Overflow, JSValueRegs(), 0, check);

And recovery side code is the following.

   1114             jit.sub32(recovery-&gt;src(), recovery-&gt;dest());


If gpr1 = gpr2 = gprResult (this can happen if child1 and child2 are the same and GPRTemporary Reuse works), the result becomes zero accidentally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1524597</commentid>
    <comment_count>1</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-04-04 21:20:43 -0700</bug_when>
    <thetext>We reliably reproduce this with --useDoublePredictionFuzzerAgent=1.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1524902</commentid>
    <comment_count>2</comment_count>
      <attachid>366859</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-04-05 16:47:28 -0700</bug_when>
    <thetext>Created attachment 366859
Patch

WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1524922</commentid>
    <comment_count>3</comment_count>
      <attachid>366865</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-04-05 17:57:29 -0700</bug_when>
    <thetext>Created attachment 366865
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1524926</commentid>
    <comment_count>4</comment_count>
      <attachid>366865</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-04-05 18:08:22 -0700</bug_when>
    <thetext>Comment on attachment 366865
Patch

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

&gt; Source/JavaScriptCore/ChangeLog:18
&gt; +        We do not need to have this mechanism in FTL (because FTL handles registers and stack places better, we do not need to
&gt; +        have such a peephole optimization), so only DFG has this bug. This is found by injecting Double prediction into value
&gt; +        profiling.

I wouldn&apos;t even say this. The FTL would also benefit from this as it alleviates register pressure.

Instead, I&apos;d just say you&apos;re removing dead code.

&gt; Source/JavaScriptCore/dfg/DFGOSRExit.h:62
&gt; +    SpeculativeAddSelf,

Can&apos;t this just be detected by asking if src() == dst()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1524927</commentid>
    <comment_count>5</comment_count>
      <attachid>366865</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-04-05 18:08:51 -0700</bug_when>
    <thetext>Comment on attachment 366865
Patch

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

&gt; Source/JavaScriptCore/dfg/DFGOSRExit.cpp:1129
&gt; +            // If A + A = A (int32_t) overflows, A can be recovereted by ((static_cast&lt;int32_t&gt;(A) &gt;&gt; 1) ^ 0x8000000).

typo: &quot;recovereted&quot; =&gt; &quot;recovered&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1524933</commentid>
    <comment_count>6</comment_count>
      <attachid>366865</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-04-05 18:13:54 -0700</bug_when>
    <thetext>Comment on attachment 366865
Patch

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

&gt;&gt; Source/JavaScriptCore/ChangeLog:18
&gt;&gt; +        profiling.
&gt; 
&gt; I wouldn&apos;t even say this. The FTL would also benefit from this as it alleviates register pressure.
&gt; 
&gt; Instead, I&apos;d just say you&apos;re removing dead code.

OK, I&apos;ll rephrase this part.

&gt;&gt; Source/JavaScriptCore/dfg/DFGOSRExit.cpp:1129
&gt;&gt; +            // If A + A = A (int32_t) overflows, A can be recovereted by ((static_cast&lt;int32_t&gt;(A) &gt;&gt; 1) ^ 0x8000000).
&gt; 
&gt; typo: &quot;recovereted&quot; =&gt; &quot;recovered&quot;

Fixed.

&gt;&gt; Source/JavaScriptCore/dfg/DFGOSRExit.h:62
&gt;&gt; +    SpeculativeAddSelf,
&gt; 
&gt; Can&apos;t this just be detected by asking if src() == dst()?

We can detect it, but I think having another type seems cleaner given that we have two types SpeculativeAdd and SpeculativeAddImmediate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1524934</commentid>
    <comment_count>7</comment_count>
      <attachid>366865</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-04-05 18:28:12 -0700</bug_when>
    <thetext>Comment on attachment 366865
Patch

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

&gt;&gt;&gt; Source/JavaScriptCore/dfg/DFGOSRExit.h:62
&gt;&gt;&gt; +    SpeculativeAddSelf,
&gt;&gt; 
&gt;&gt; Can&apos;t this just be detected by asking if src() == dst()?
&gt; 
&gt; We can detect it, but I think having another type seems cleaner given that we have two types SpeculativeAdd and SpeculativeAddImmediate.

Kind of. SpeculativeAdd just means A and B are registers. It doesn&apos;t care what registers are. Immediate makes more sense because it means we don&apos;t need a register for the purposes of recovery.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1524935</commentid>
    <comment_count>8</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-04-05 18:28:39 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #7)
&gt; Comment on attachment 366865 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=366865&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/JavaScriptCore/dfg/DFGOSRExit.h:62
&gt; &gt;&gt;&gt; +    SpeculativeAddSelf,
&gt; &gt;&gt; 
&gt; &gt;&gt; Can&apos;t this just be detected by asking if src() == dst()?
&gt; &gt; 
&gt; &gt; We can detect it, but I think having another type seems cleaner given that we have two types SpeculativeAdd and SpeculativeAddImmediate.
&gt; 
&gt; Kind of. SpeculativeAdd just means A and B are registers. It doesn&apos;t care
&gt; what registers are. Immediate makes more sense because it means we don&apos;t
&gt; need a register for the purposes of recovery.

Anyways, I don&apos;t have a super strong opinion here. I&apos;ll let you decide what you prefer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1524940</commentid>
    <comment_count>9</comment_count>
      <attachid>366865</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-04-05 18:43:07 -0700</bug_when>
    <thetext>Comment on attachment 366865
Patch

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

&gt;&gt;&gt;&gt;&gt; Source/JavaScriptCore/dfg/DFGOSRExit.h:62
&gt;&gt;&gt;&gt;&gt; +    SpeculativeAddSelf,
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; Can&apos;t this just be detected by asking if src() == dst()?
&gt;&gt;&gt; 
&gt;&gt;&gt; We can detect it, but I think having another type seems cleaner given that we have two types SpeculativeAdd and SpeculativeAddImmediate.
&gt;&gt; 
&gt;&gt; Kind of. SpeculativeAdd just means A and B are registers. It doesn&apos;t care what registers are. Immediate makes more sense because it means we don&apos;t need a register for the purposes of recovery.
&gt; 
&gt; Anyways, I don&apos;t have a super strong opinion here. I&apos;ll let you decide what you prefer.

Personally, I like having a separate types here because these types are corresponding to the way how to recover the value from the given arguments.
By having separate types, I think our recovery side code can be simple, which has the `switch` on how to recover the value, and each clause maintains the recovery method corresponding to this type :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1524943</commentid>
    <comment_count>10</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-04-05 18:57:23 -0700</bug_when>
    <thetext>Committed r243959: &lt;https://trac.webkit.org/changeset/243959&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1524944</commentid>
    <comment_count>11</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-04-05 18:58:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/49664247&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>366859</attachid>
            <date>2019-04-05 16:47:28 -0700</date>
            <delta_ts>2019-04-05 17:57:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-196582-20190405164727.patch</filename>
            <type>text/plain</type>
            <size>4438</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQzOTQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
NWZlNDkyODliYjlmZjdjNjQwNDA0Nzg4MThlN2MwNTBlNTBmNmQyLi42YTA0ZGUwMGVlMmFhNTk1
NWEwODY5Yjg2ZmIxYTFiODhkMDFkOGY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOCBAQAorMjAxOS0wNC0wNSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIE9TUkV4aXQgcmVjb3ZlcnkgZm9yIFNwZWN1bGF0aXZlQWRkIGRv
ZXMgbm90IGNvbnNpZXIgIkEgPSBBICsgQSIgcGF0dGVybgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk2NTgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6T1NSRXhpdDo6ZXhlY3V0ZU9TUkV4aXQpOgorICAgICAgICAoSlNDOjpERkc6
Ok9TUkV4aXQ6OmNvbXBpbGVFeGl0KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5oOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aW9uUmVjb3Zlcnk6OlNwZWN1bGF0aW9uUmVjb3Zlcnkp
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aEFkZCk6CisKIDIwMTktMDQtMDUgIFl1c3Vr
ZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBTSUdTRUdWIGluIEpTQzo6
Qnl0ZWNvZGVHZW5lcmF0b3I6OmFkZFN0cmluZ0NvbnN0YW50CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0LmNwcAppbmRleCBhYjZmNGI5NzA5NTQxMDI1MTE1NzI3YmNlNTliOGE0
MjAzYmY0NTFhLi4xYTkyMWJiMWVlYmFhMzQzM2Y0ZDI5MjNhZTZhNDUyZjMyMWQ1YWJmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKQEAgLTQ3NSw2ICs0NzUsMTQg
QEAgdm9pZCBPU1JFeGl0OjpleGVjdXRlT1NSRXhpdChDb250ZXh0JiBjb250ZXh0KQogI2VuZGlm
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKKyAgICAgICAgICAgIGNhc2UgU3BlY3VsYXRpdmVB
ZGRTZWxmOgorICAgICAgICAgICAgICAgIGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgPSBzdGF0
aWNfY2FzdDx1aW50MzJfdD4oY3B1LmdwcjxpbnQzMl90PihyZWNvdmVyeS0+ZGVzdCgpKSA+PiAx
KSBeIDB4ODAwMDAwMDBVOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICAgICAgQVNT
RVJUKCEoY3B1LmdwcihyZWNvdmVyeS0+ZGVzdCgpKSA+PiAzMikpOworICAgICAgICAgICAgICAg
IGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgfD0gVGFnVHlwZU51bWJlcjsKKyNlbmRpZgorICAg
ICAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAgICBjYXNlIFNwZWN1bGF0aXZlQWRkSW1t
ZWRpYXRlOgogICAgICAgICAgICAgICAgIGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgPSAoY3B1
Lmdwcjx1aW50MzJfdD4ocmVjb3ZlcnktPmRlc3QoKSkgLSByZWNvdmVyeS0+aW1tZWRpYXRlKCkp
OwogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC0xMTE3LDYgKzExMjUsMTQgQEAgdm9pZCBPU1JFeGl0
Ojpjb21waWxlRXhpdChDQ2FsbEhlbHBlcnMmIGppdCwgVk0mIHZtLCBjb25zdCBPU1JFeGl0JiBl
eGl0LCBjb25zdAogI2VuZGlmCiAgICAgICAgICAgICBicmVhazsKIAorICAgICAgICBjYXNlIFNw
ZWN1bGF0aXZlQWRkU2VsZjoKKyAgICAgICAgICAgIGppdC5yc2hpZnQzMihBc3NlbWJseUhlbHBl
cnM6OlRydXN0ZWRJbW0zMigxKSwgcmVjb3ZlcnktPmRlc3QoKSk7CisgICAgICAgICAgICBqaXQu
eG9yMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMHg4MDAwMDAwMCksIHJlY292ZXJ5
LT5kZXN0KCkpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgICAgICBqaXQub3I2NChHUFJJ
bmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlY292ZXJ5LT5kZXN0KCkpOworI2VuZGlmCisg
ICAgICAgICAgICBicmVhazsKKwogICAgICAgICBjYXNlIFNwZWN1bGF0aXZlQWRkSW1tZWRpYXRl
OgogICAgICAgICAgICAgaml0LnN1YjMyKEFzc2VtYmx5SGVscGVyczo6SW1tMzIocmVjb3Zlcnkt
PmltbWVkaWF0ZSgpKSwgcmVjb3ZlcnktPmRlc3QoKSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgKaW5kZXggY2E5MTNjYWY5ZjhlZTk3MWVh
MzRjZDQyMTliNDRlMjI3NjNhYjJmZC4uZjU0MjJlYTI5MjVlODA0ZGVlOGFkODVhNTAxYmVmNmVh
NWYxYmE5ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgKQEAgLTU5LDYg
KzU5LDcgQEAgc3RydWN0IE5vZGU7CiAvLyBtYXkgbmVlZCBiZSBwZXJmb3JtZWQgc2hvdWxkIGEg
c3BlY3VsYXRpb24gY2hlY2sgZmFpbC4KIGVudW0gU3BlY3VsYXRpb25SZWNvdmVyeVR5cGUgOiB1
aW50OF90IHsKICAgICBTcGVjdWxhdGl2ZUFkZCwKKyAgICBTcGVjdWxhdGl2ZUFkZFNlbGYsCiAg
ICAgU3BlY3VsYXRpdmVBZGRJbW1lZGlhdGUsCiAgICAgQm9vbGVhblNwZWN1bGF0aW9uQ2hlY2sK
IH07CkBAIC03NCw3ICs3NSw3IEBAIGNsYXNzIFNwZWN1bGF0aW9uUmVjb3ZlcnkgewogICAgICAg
ICAsIG1fZGVzdChkZXN0KQogICAgICAgICAsIG1fdHlwZSh0eXBlKQogICAgIHsKLSAgICAgICAg
QVNTRVJUKG1fdHlwZSA9PSBTcGVjdWxhdGl2ZUFkZCB8fCBtX3R5cGUgPT0gQm9vbGVhblNwZWN1
bGF0aW9uQ2hlY2spOworICAgICAgICBBU1NFUlQobV90eXBlID09IFNwZWN1bGF0aXZlQWRkIHx8
IG1fdHlwZSA9PSBTcGVjdWxhdGl2ZUFkZFNlbGYgfHwgbV90eXBlID09IEJvb2xlYW5TcGVjdWxh
dGlvbkNoZWNrKTsKICAgICB9CiAKICAgICBTcGVjdWxhdGlvblJlY292ZXJ5KFNwZWN1bGF0aW9u
UmVjb3ZlcnlUeXBlIHR5cGUsIEdQUlJlZyBkZXN0LCBpbnQzMl90IGltbWVkaWF0ZSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKaW5kZXggYzk1
NjQwNWU1MmQ4MjhmZjE5M2NkMGJhODNkOWExNjVkMjNjM2M0Yi4uMDM2Y2I5MjY3NDFhNDVjZjll
ZTYxMTk1NWEwNWI2MDNmYTU4MjM2NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKQEAgLTQzMDYsNyArNDMwNiw5IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVBcml0aEFkZChOb2RlKiBub2RlKQogICAgICAgICBlbHNlIHsKICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGNoZWNrID0gbV9qaXQuYnJhbmNoQWRkMzIo
TWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBncHIxLCBncHIyLCBncHJSZXN1bHQpOwogICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGdwcjEgPT0gZ3ByUmVzdWx0KQorICAgICAgICAg
ICAgaWYgKGdwcjEgPT0gZ3ByUmVzdWx0ICYmIGdwcjIgPT0gZ3ByUmVzdWx0KQorICAgICAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCksIDAsIGNoZWNr
LCBTcGVjdWxhdGlvblJlY292ZXJ5KFNwZWN1bGF0aXZlQWRkU2VsZiwgZ3ByUmVzdWx0LCBncHIy
KSk7CisgICAgICAgICAgICBlbHNlIGlmIChncHIxID09IGdwclJlc3VsdCkKICAgICAgICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCAwLCBjaGVjaywg
U3BlY3VsYXRpb25SZWNvdmVyeShTcGVjdWxhdGl2ZUFkZCwgZ3ByUmVzdWx0LCBncHIyKSk7CiAg
ICAgICAgICAgICBlbHNlIGlmIChncHIyID09IGdwclJlc3VsdCkKICAgICAgICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCAwLCBjaGVjaywgU3BlY3Vs
YXRpb25SZWNvdmVyeShTcGVjdWxhdGl2ZUFkZCwgZ3ByUmVzdWx0LCBncHIxKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>366865</attachid>
            <date>2019-04-05 17:57:29 -0700</date>
            <delta_ts>2019-04-05 18:08:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-196582-20190405175729.patch</filename>
            <type>text/plain</type>
            <size>19508</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQzOTQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
NWZlNDkyODliYjlmZjdjNjQwNDA0Nzg4MThlN2MwNTBlNTBmNmQyLi5mOTI4ZGY3ZDdhYWU0NDA1
ZGNiNDk3MDVjYjE5OTk5ZGI1YzhmMTZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MyBAQAorMjAxOS0wNC0wNSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIE9TUkV4aXQgcmVjb3ZlcnkgZm9yIFNwZWN1bGF0aXZlQWRkIGRv
ZXMgbm90IGNvbnNpZXIgIkEgPSBBICsgQSIgcGF0dGVybgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk2NTgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW4gREZHLCBvdXIgQXJpdGhBZGQgd2l0aCBvdmVy
ZmxvdyBpcyBleGVjdXRlZCBzcGVjdWxhdGl2ZWx5LCBhbmQgd2UgcmVjb3ZlciB0aGUgdmFsdWUg
d2hlbiBvdmVyZmxvdyBmbGFnIGlzIHNldC4KKyAgICAgICAgVGhlIHJlY292ZXJ5IGlzIHN1YnRy
YWN0aW5nIHRoZSBvcGVyYW5kIGZyb20gdGhlIGRlc3RpbmF0aW9uIHRvIGdldCB0aGUgb3JpZ2lu
YWwgdHdvIG9wZXJhbmRzLiBPdXIgcmVjb3ZlcnkgY29kZQorICAgICAgICBoYW5kbGVzIEEgKyBC
ID0gQSwgQSArIEIgPSBCIGNhc2VzLiBCdXQgaXQgbWlzc2VzIEEgKyBBID0gQSBjYXNlIChoZXJl
LCBBIGFuZCBCIGFyZSBHUFJSZWcpLiBPdXIgcmVjb3ZlcnkgY29kZQorICAgICAgICBhdHRlbXB0
cyB0byBwcm9kdWNlIHRoZSBvcmlnaW5hbCBvcGVyYW5kIGJ5IHBlcmZvcm1pbmcgQSAtIEEsIGFu
ZCBpdCBhbHdheXMgcHJvZHVjZXMgemVybyBhY2NpZGVudGFsbHkuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBhZGRzIHRoZSByZWNvdmVyeSBjb2RlIGZvciBBICsgQSA9IEEgY2FzZS4gQmVjYXVzZSB3
ZSBrbm93IHRoYXQgdGhpcyBBcml0aEFkZCBvdmVyZmxvd3MsIGFuZCBvcGVyYW5kcyB3ZXJlCisg
ICAgICAgIHNhbWUgdmFsdWVzLCB3ZSBjYW4gY2FsY3VsYXRlIHRoZSBvcmlnaW5hbCBvcGVyYW5k
IGZyb20gdGhlIGRlc3RpbmF0aW9uIHZhbHVlIGJ5IGAoKGludDMyX3QpdmFsdWUgPj4gMSkgXiAw
eDgwMDAwMDAwYC4KKworICAgICAgICBXZSBkbyBub3QgbmVlZCB0byBoYXZlIHRoaXMgbWVjaGFu
aXNtIGluIEZUTCAoYmVjYXVzZSBGVEwgaGFuZGxlcyByZWdpc3RlcnMgYW5kIHN0YWNrIHBsYWNl
cyBiZXR0ZXIsIHdlIGRvIG5vdCBuZWVkIHRvCisgICAgICAgIGhhdmUgc3VjaCBhIHBlZXBob2xl
IG9wdGltaXphdGlvbiksIHNvIG9ubHkgREZHIGhhcyB0aGlzIGJ1Zy4gVGhpcyBpcyBmb3VuZCBi
eSBpbmplY3RpbmcgRG91YmxlIHByZWRpY3Rpb24gaW50byB2YWx1ZQorICAgICAgICBwcm9maWxp
bmcuCisKKyAgICAgICAgV2UgYWxzbyBmb3VuZCB0aGF0IEZUTCByZWNvdmVyeSBjb2RlIGlzIGNv
bXBsZXRlbHkgZGVhZC4gV2UgcmVtb3ZlIHRoZW0gdG9vLgorCisgICAgICAgICogZGZnL0RGR09T
UkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmV4ZWN1dGVPU1JFeGl0KToK
KyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpjb21waWxlRXhpdCk6CisgICAgICAgICogZGZn
L0RGR09TUkV4aXQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGlvblJlY292ZXJ5OjpT
cGVjdWxhdGlvblJlY292ZXJ5KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhBZGQpOgor
ICAgICAgICAqIGZ0bC9GVExFeGl0VmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRW
YWx1ZTo6ZGF0YUZvcm1hdCBjb25zdCk6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVlOjpk
dW1wSW5Db250ZXh0IGNvbnN0KToKKyAgICAgICAgKiBmdGwvRlRMRXhpdFZhbHVlLmg6CisgICAg
ICAgIChKU0M6OkZUTDo6RXhpdFZhbHVlOjppc0FyZ3VtZW50IGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6RlRMOjpFeGl0VmFsdWU6Omhhc0luZGV4SW5TdGFja21hcExvY2F0aW9ucyBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVlOjphZGp1c3RTdGFja21hcExvY2F0aW9uc0luZGV4
QnlPZmZzZXQpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1ZTo6cmVjb3ZlcnkpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1ZTo6aXNSZWNvdmVyeSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVlOjpsZWZ0UmVjb3ZlcnlBcmd1bWVu
dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVlOjpyaWdodFJl
Y292ZXJ5QXJndW1lbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRW
YWx1ZTo6cmVjb3ZlcnlGb3JtYXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGVEw6
OkV4aXRWYWx1ZTo6cmVjb3ZlcnlPcGNvZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGZ0
bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdU
b0IzOjpjb21waWxlTm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6
OnByZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0aW9ucyk6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OmFwcGVuZE9TUkV4aXQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjpleGl0VmFsdWVGb3JOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6YWRkQXZhaWxhYmxlUmVjb3ZlcnkpOiBEZWxldGVkLgorICAgICAgICAq
IGZ0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGVS
ZWNvdmVyeSk6CisKIDIwMTktMDQtMDUgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KIAogICAgICAgICBTSUdTRUdWIGluIEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmFkZFN0cmlu
Z0NvbnN0YW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4
aXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAppbmRleCBh
YjZmNGI5NzA5NTQxMDI1MTE1NzI3YmNlNTliOGE0MjAzYmY0NTFhLi4zOWRlYTI4NTQxY2NlOGJl
YTA2N2FlNjZlNjU2YWUwOWRhOTI1YjUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRXhpdC5jcHAKQEAgLTQ3NSw2ICs0NzUsMTQgQEAgdm9pZCBPU1JFeGl0OjpleGVjdXRlT1NS
RXhpdChDb250ZXh0JiBjb250ZXh0KQogI2VuZGlmCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAK
KyAgICAgICAgICAgIGNhc2UgU3BlY3VsYXRpdmVBZGRTZWxmOgorICAgICAgICAgICAgICAgIGNw
dS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oY3B1Lmdwcjxp
bnQzMl90PihyZWNvdmVyeS0+ZGVzdCgpKSA+PiAxKSBeIDB4ODAwMDAwMDBVOworI2lmIFVTRShK
U1ZBTFVFNjQpCisgICAgICAgICAgICAgICAgQVNTRVJUKCEoY3B1LmdwcihyZWNvdmVyeS0+ZGVz
dCgpKSA+PiAzMikpOworICAgICAgICAgICAgICAgIGNwdS5ncHIocmVjb3ZlcnktPmRlc3QoKSkg
fD0gVGFnVHlwZU51bWJlcjsKKyNlbmRpZgorICAgICAgICAgICAgICAgIGJyZWFrOworCiAgICAg
ICAgICAgICBjYXNlIFNwZWN1bGF0aXZlQWRkSW1tZWRpYXRlOgogICAgICAgICAgICAgICAgIGNw
dS5ncHIocmVjb3ZlcnktPmRlc3QoKSkgPSAoY3B1Lmdwcjx1aW50MzJfdD4ocmVjb3ZlcnktPmRl
c3QoKSkgLSByZWNvdmVyeS0+aW1tZWRpYXRlKCkpOwogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC0x
MTE3LDYgKzExMjUsMTUgQEAgdm9pZCBPU1JFeGl0Ojpjb21waWxlRXhpdChDQ2FsbEhlbHBlcnMm
IGppdCwgVk0mIHZtLCBjb25zdCBPU1JFeGl0JiBleGl0LCBjb25zdAogI2VuZGlmCiAgICAgICAg
ICAgICBicmVhazsKIAorICAgICAgICBjYXNlIFNwZWN1bGF0aXZlQWRkU2VsZjoKKyAgICAgICAg
ICAgIC8vIElmIEEgKyBBID0gQSAoaW50MzJfdCkgb3ZlcmZsb3dzLCBBIGNhbiBiZSByZWNvdmVy
ZXRlZCBieSAoKHN0YXRpY19jYXN0PGludDMyX3Q+KEEpID4+IDEpIF4gMHg4MDAwMDAwKS4KKyAg
ICAgICAgICAgIGppdC5yc2hpZnQzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwg
cmVjb3ZlcnktPmRlc3QoKSk7CisgICAgICAgICAgICBqaXQueG9yMzIoQXNzZW1ibHlIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoMHg4MDAwMDAwMCksIHJlY292ZXJ5LT5kZXN0KCkpOworI2lmIFVTRShK
U1ZBTFVFNjQpCisgICAgICAgICAgICBqaXQub3I2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVn
aXN0ZXIsIHJlY292ZXJ5LT5kZXN0KCkpOworI2VuZGlmCisgICAgICAgICAgICBicmVhazsKKwog
ICAgICAgICBjYXNlIFNwZWN1bGF0aXZlQWRkSW1tZWRpYXRlOgogICAgICAgICAgICAgaml0LnN1
YjMyKEFzc2VtYmx5SGVscGVyczo6SW1tMzIocmVjb3ZlcnktPmltbWVkaWF0ZSgpKSwgcmVjb3Zl
cnktPmRlc3QoKSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFeGl0LmgKaW5kZXggY2E5MTNjYWY5ZjhlZTk3MWVhMzRjZDQyMTliNDRlMjI3NjNhYjJm
ZC4uZjU0MjJlYTI5MjVlODA0ZGVlOGFkODVhNTAxYmVmNmVhNWYxYmE5ZiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgKQEAgLTU5LDYgKzU5LDcgQEAgc3RydWN0IE5vZGU7
CiAvLyBtYXkgbmVlZCBiZSBwZXJmb3JtZWQgc2hvdWxkIGEgc3BlY3VsYXRpb24gY2hlY2sgZmFp
bC4KIGVudW0gU3BlY3VsYXRpb25SZWNvdmVyeVR5cGUgOiB1aW50OF90IHsKICAgICBTcGVjdWxh
dGl2ZUFkZCwKKyAgICBTcGVjdWxhdGl2ZUFkZFNlbGYsCiAgICAgU3BlY3VsYXRpdmVBZGRJbW1l
ZGlhdGUsCiAgICAgQm9vbGVhblNwZWN1bGF0aW9uQ2hlY2sKIH07CkBAIC03NCw3ICs3NSw3IEBA
IGNsYXNzIFNwZWN1bGF0aW9uUmVjb3ZlcnkgewogICAgICAgICAsIG1fZGVzdChkZXN0KQogICAg
ICAgICAsIG1fdHlwZSh0eXBlKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fdHlwZSA9PSBTcGVj
dWxhdGl2ZUFkZCB8fCBtX3R5cGUgPT0gQm9vbGVhblNwZWN1bGF0aW9uQ2hlY2spOworICAgICAg
ICBBU1NFUlQobV90eXBlID09IFNwZWN1bGF0aXZlQWRkIHx8IG1fdHlwZSA9PSBTcGVjdWxhdGl2
ZUFkZFNlbGYgfHwgbV90eXBlID09IEJvb2xlYW5TcGVjdWxhdGlvbkNoZWNrKTsKICAgICB9CiAK
ICAgICBTcGVjdWxhdGlvblJlY292ZXJ5KFNwZWN1bGF0aW9uUmVjb3ZlcnlUeXBlIHR5cGUsIEdQ
UlJlZyBkZXN0LCBpbnQzMl90IGltbWVkaWF0ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKaW5kZXggYzk1NjQwNWU1MmQ4MjhmZjE5M2NkMGJh
ODNkOWExNjVkMjNjM2M0Yi4uMDM2Y2I5MjY3NDFhNDVjZjllZTYxMTk1NWEwNWI2MDNmYTU4MjM2
NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAKQEAgLTQzMDYsNyArNDMwNiw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0
aEFkZChOb2RlKiBub2RlKQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGNoZWNrID0gbV9qaXQuYnJhbmNoQWRkMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJm
bG93LCBncHIxLCBncHIyLCBncHJSZXN1bHQpOwogICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgaWYgKGdwcjEgPT0gZ3ByUmVzdWx0KQorICAgICAgICAgICAgaWYgKGdwcjEgPT0gZ3ByUmVz
dWx0ICYmIGdwcjIgPT0gZ3ByUmVzdWx0KQorICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCksIDAsIGNoZWNrLCBTcGVjdWxhdGlvblJlY292ZXJ5
KFNwZWN1bGF0aXZlQWRkU2VsZiwgZ3ByUmVzdWx0LCBncHIyKSk7CisgICAgICAgICAgICBlbHNl
IGlmIChncHIxID09IGdwclJlc3VsdCkKICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCAwLCBjaGVjaywgU3BlY3VsYXRpb25SZWNvdmVyeShT
cGVjdWxhdGl2ZUFkZCwgZ3ByUmVzdWx0LCBncHIyKSk7CiAgICAgICAgICAgICBlbHNlIGlmIChn
cHIyID09IGdwclJlc3VsdCkKICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJm
bG93LCBKU1ZhbHVlUmVncygpLCAwLCBjaGVjaywgU3BlY3VsYXRpb25SZWNvdmVyeShTcGVjdWxh
dGl2ZUFkZCwgZ3ByUmVzdWx0LCBncHIxKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEV4aXRWYWx1ZS5jcHAKaW5kZXggNzAwNGI5YmRiN2M0OWE1Mjg0NWM2ZjM1N2RjNzY1NDUwM2Vl
ZjQxNS4uYjM2ZGIwNGI1NzZjZDI4OGMwMDY3Mjk4NmM2YzlkMGYyNjZhNjIzMyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VmFsdWUuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmNwcApAQCAtNzUsOSArNzUsNiBAQCBE
YXRhRm9ybWF0IEV4aXRWYWx1ZTo6ZGF0YUZvcm1hdCgpIGNvbnN0CiAgICAgICAgICAgICAKICAg
ICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzRG91YmxlOgogICAgICAgICByZXR1cm4gRGF0YUZv
cm1hdERvdWJsZTsKLSAgICAgICAgICAgIAotICAgIGNhc2UgRXhpdFZhbHVlUmVjb3Zlcnk6Ci0g
ICAgICAgIHJldHVybiByZWNvdmVyeUZvcm1hdCgpOwogICAgIH0KICAgICAgICAgCiAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTExMCw5ICsxMDcsNiBAQCB2b2lkIEV4aXRW
YWx1ZTo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4
dCkgY29uc3QKICAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzRG91YmxlOgogICAgICAgICBv
dXQucHJpbnQoIkluSlNTdGFja0FzRG91YmxlOiIsIHZpcnR1YWxSZWdpc3RlcigpKTsKICAgICAg
ICAgcmV0dXJuOwotICAgIGNhc2UgRXhpdFZhbHVlUmVjb3Zlcnk6Ci0gICAgICAgIG91dC5wcmlu
dCgiUmVjb3ZlcnkoIiwgcmVjb3ZlcnlPcGNvZGUoKSwgIiwgYXJnIiwgbGVmdFJlY292ZXJ5QXJn
dW1lbnQoKSwgIiwgYXJnIiwgcmlnaHRSZWNvdmVyeUFyZ3VtZW50KCksICIsICIsIHJlY292ZXJ5
Rm9ybWF0KCksICIpIik7Ci0gICAgICAgIHJldHVybjsKICAgICBjYXNlIEV4aXRWYWx1ZU1hdGVy
aWFsaXplTmV3T2JqZWN0OgogICAgICAgICBvdXQucHJpbnQoIk1hdGVyaWFsaXplKCIsIFdURjo6
UmF3UG9pbnRlcihvYmplY3RNYXRlcmlhbGl6YXRpb24oKSksICIpIik7CiAgICAgICAgIHJldHVy
bjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5oCmluZGV4IGM5OTQ2YjJl
NzQ3NWMwYmU1ZDA5NTMyMTQ4YzM2YTkzZDBlOWYyNzUuLjgzOGRhNjQxODhjOWY3ZTA4NmZmMzgx
NjE4ZDc0YzllNjAwNjVhNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMRXhpdFZhbHVlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VmFs
dWUuaApAQCAtNTQsNyArNTQsNiBAQCBlbnVtIEV4aXRWYWx1ZUtpbmQgewogICAgIEV4aXRWYWx1
ZUluSlNTdGFja0FzSW50MzIsCiAgICAgRXhpdFZhbHVlSW5KU1N0YWNrQXNJbnQ1MiwKICAgICBF
eGl0VmFsdWVJbkpTU3RhY2tBc0RvdWJsZSwKLSAgICBFeGl0VmFsdWVSZWNvdmVyeSwKICAgICBF
eGl0VmFsdWVNYXRlcmlhbGl6ZU5ld09iamVjdAogfTsKIApAQCAtMTI0LDE3ICsxMjMsNiBAQCBj
bGFzcyBFeGl0VmFsdWUgewogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKLSAg
ICBzdGF0aWMgRXhpdFZhbHVlIHJlY292ZXJ5KFJlY292ZXJ5T3Bjb2RlIG9wY29kZSwgdW5zaWdu
ZWQgbGVmdEFyZ3VtZW50LCB1bnNpZ25lZCByaWdodEFyZ3VtZW50LCBEYXRhRm9ybWF0IGZvcm1h
dCkKLSAgICB7Ci0gICAgICAgIEV4aXRWYWx1ZSByZXN1bHQ7Ci0gICAgICAgIHJlc3VsdC5tX2tp
bmQgPSBFeGl0VmFsdWVSZWNvdmVyeTsKLSAgICAgICAgcmVzdWx0LnUucmVjb3Zlcnkub3Bjb2Rl
ID0gb3Bjb2RlOwotICAgICAgICByZXN1bHQudS5yZWNvdmVyeS5sZWZ0QXJndW1lbnQgPSBsZWZ0
QXJndW1lbnQ7Ci0gICAgICAgIHJlc3VsdC51LnJlY292ZXJ5LnJpZ2h0QXJndW1lbnQgPSByaWdo
dEFyZ3VtZW50OwotICAgICAgICByZXN1bHQudS5yZWNvdmVyeS5mb3JtYXQgPSBmb3JtYXQ7Ci0g
ICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIAogICAgIHN0YXRpYyBFeGl0VmFsdWUg
bWF0ZXJpYWxpemVOZXdPYmplY3QoRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qKTsKICAg
ICAKICAgICBFeGl0VmFsdWVLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KQEAg
LTE1NCw5ICsxNDIsOCBAQCBjbGFzcyBFeGl0VmFsdWUgewogICAgIH0KICAgICBib29sIGlzQ29u
c3RhbnQoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gRXhpdFZhbHVlQ29uc3RhbnQ7IH0KICAg
ICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gRXhpdFZhbHVlQXJn
dW1lbnQ7IH0KLSAgICBib29sIGlzUmVjb3ZlcnkoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0g
RXhpdFZhbHVlUmVjb3Zlcnk7IH0KICAgICBib29sIGlzT2JqZWN0TWF0ZXJpYWxpemF0aW9uKCkg
Y29uc3QgeyByZXR1cm4ga2luZCgpID09IEV4aXRWYWx1ZU1hdGVyaWFsaXplTmV3T2JqZWN0OyB9
Ci0gICAgYm9vbCBoYXNJbmRleEluU3RhY2ttYXBMb2NhdGlvbnMoKSBjb25zdCB7IHJldHVybiBp
c0FyZ3VtZW50KCkgfHwgaXNSZWNvdmVyeSgpOyB9CisgICAgYm9vbCBoYXNJbmRleEluU3RhY2tt
YXBMb2NhdGlvbnMoKSBjb25zdCB7IHJldHVybiBpc0FyZ3VtZW50KCk7IH0KICAgICAKICAgICBF
eGl0QXJndW1lbnQgZXhpdEFyZ3VtZW50KCkgY29uc3QKICAgICB7CkBAIC0xNjQsNDAgKzE1MSwx
MSBAQCBjbGFzcyBFeGl0VmFsdWUgewogICAgICAgICByZXR1cm4gRXhpdEFyZ3VtZW50KHUuYXJn
dW1lbnQpOwogICAgIH0KICAgICAKLSAgICB1bnNpZ25lZCBsZWZ0UmVjb3ZlcnlBcmd1bWVudCgp
IGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaXNSZWNvdmVyeSgpKTsKLSAgICAgICAgcmV0
dXJuIHUucmVjb3ZlcnkubGVmdEFyZ3VtZW50OwotICAgIH0KLSAgICAKLSAgICB1bnNpZ25lZCBy
aWdodFJlY292ZXJ5QXJndW1lbnQoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzUmVj
b3ZlcnkoKSk7Ci0gICAgICAgIHJldHVybiB1LnJlY292ZXJ5LnJpZ2h0QXJndW1lbnQ7Ci0gICAg
fQotCiAgICAgdm9pZCBhZGp1c3RTdGFja21hcExvY2F0aW9uc0luZGV4QnlPZmZzZXQodW5zaWdu
ZWQgb2Zmc2V0KQogICAgIHsKICAgICAgICAgQVNTRVJUKGhhc0luZGV4SW5TdGFja21hcExvY2F0
aW9ucygpKTsKLSAgICAgICAgaWYgKGlzQXJndW1lbnQoKSkKLSAgICAgICAgICAgIHUuYXJndW1l
bnQuYXJndW1lbnQgKz0gb2Zmc2V0OwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VS
VChpc1JlY292ZXJ5KCkpOwotICAgICAgICAgICAgdS5yZWNvdmVyeS5yaWdodEFyZ3VtZW50ICs9
IG9mZnNldDsKLSAgICAgICAgICAgIHUucmVjb3ZlcnkubGVmdEFyZ3VtZW50ICs9IG9mZnNldDsK
LSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBEYXRhRm9ybWF0IHJlY292ZXJ5Rm9ybWF0KCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc1JlY292ZXJ5KCkpOwotICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8RGF0YUZvcm1hdD4odS5yZWNvdmVyeS5mb3JtYXQpOwotICAgIH0KLSAg
ICAKLSAgICBSZWNvdmVyeU9wY29kZSByZWNvdmVyeU9wY29kZSgpIGNvbnN0Ci0gICAgewotICAg
ICAgICBBU1NFUlQoaXNSZWNvdmVyeSgpKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJl
Y292ZXJ5T3Bjb2RlPih1LnJlY292ZXJ5Lm9wY29kZSk7CisgICAgICAgIEFTU0VSVChpc0FyZ3Vt
ZW50KCkpOworICAgICAgICB1LmFyZ3VtZW50LmFyZ3VtZW50ICs9IG9mZnNldDsKICAgICB9CiAg
ICAgCiAgICAgSlNWYWx1ZSBjb25zdGFudCgpIGNvbnN0CkBAIC0yNDYsMTIgKzIwNCw2IEBAIGNs
YXNzIEV4aXRWYWx1ZSB7CiAgICAgICAgIEV4aXRBcmd1bWVudFJlcHJlc2VudGF0aW9uIGFyZ3Vt
ZW50OwogICAgICAgICBFbmNvZGVkSlNWYWx1ZSBjb25zdGFudDsKICAgICAgICAgaW50IHZpcnR1
YWxSZWdpc3RlcjsKLSAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIHVpbnQxNl90IGxlZnRB
cmd1bWVudDsKLSAgICAgICAgICAgIHVpbnQxNl90IHJpZ2h0QXJndW1lbnQ7Ci0gICAgICAgICAg
ICB1aW50MTZfdCBvcGNvZGU7Ci0gICAgICAgICAgICB1aW50MTZfdCBmb3JtYXQ7Ci0gICAgICAg
IH0gcmVjb3Zlcnk7CiAgICAgICAgIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKiBuZXdP
YmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOwogICAgIH0gdTsKIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKaW5kZXggOWRmZDgxMGNjYWYyZWUyMTc2
MGFkYmY0NTc2YjU5OTU5MzNkMDAwZi4uYmMwZDY3NTExNjE2MDg4ZWIxMzg2MGJiNGUyOGQwYmQ0
NjAwYzgzNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRG
R1RvQjMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0Iz
LmNwcApAQCAtNjc2LDggKzY3Niw2IEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgIGlm
ICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCiAgICAgICAgICAgICBkYXRhTG9nKCJMb3dl
cmluZyAiLCBtX25vZGUsICJcbiIpOwogICAgICAgICAKLSAgICAgICAgbV9hdmFpbGFibGVSZWNv
dmVyaWVzLnNocmluaygwKTsKLSAgICAgICAgCiAgICAgICAgIG1faW50ZXJwcmV0ZXIuc3RhcnRF
eGVjdXRpbmcoKTsKICAgICAgICAgbV9pbnRlcnByZXRlci5leGVjdXRlS25vd25FZGdlVHlwZXMo
bV9ub2RlKTsKIApAQCAtMTY3NDQsMTEgKzE2NzQyLDcgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsK
ICAgICAgICAgaWYgKCF3aWxsQ2F0Y2hFeGNlcHRpb24pCiAgICAgICAgICAgICByZXR1cm4gUGF0
Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZTo6ZGVmYXVsdEhhbmRsZShtX2Z0bFN0YXRlKTsKIAotICAg
ICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICBkYXRh
TG9nKCIgICAgUGF0Y2hwb2ludCBleGNlcHRpb24gT1NSIGV4aXQgIyIsIG1fZnRsU3RhdGUuaml0
Q29kZS0+b3NyRXhpdERlc2NyaXB0b3JzLnNpemUoKSwgIiB3aXRoIGF2YWlsYWJpbGl0eTogIiwg
YXZhaWxhYmlsaXR5TWFwKCksICJcbiIpOwotICAgICAgICAgICAgaWYgKCFtX2F2YWlsYWJsZVJl
Y292ZXJpZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgQXZh
aWxhYmxlIHJlY292ZXJpZXM6ICIsIGxpc3REdW1wKG1fYXZhaWxhYmxlUmVjb3ZlcmllcyksICJc
biIpOwotICAgICAgICB9CisgICAgICAgIGRhdGFMb2dMbklmKHZlcmJvc2VDb21waWxhdGlvbkVu
YWJsZWQoKSwgIiAgICBQYXRjaHBvaW50IGV4Y2VwdGlvbiBPU1IgZXhpdCAjIiwgbV9mdGxTdGF0
ZS5qaXRDb2RlLT5vc3JFeGl0RGVzY3JpcHRvcnMuc2l6ZSgpLCAiIHdpdGggYXZhaWxhYmlsaXR5
OiAiLCBhdmFpbGFiaWxpdHlNYXAoKSk7CiAKICAgICAgICAgYm9vbCBleGl0T0sgPSB0cnVlOwog
ICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiA9IG1fb3JpZ2luLndpdGhGb3JFeGl0QW5kRXhpdE9L
KG9wQ2F0Y2hPcmlnaW4sIGV4aXRPSyk7CkBAIC0xNjgwMiwxMSArMTY3OTYsNyBAQCBjbGFzcyBM
b3dlckRGR1RvQjMgewogICAgICAgICBFeGl0S2luZCBraW5kLCBGb3JtYXR0ZWRWYWx1ZSBsb3dW
YWx1ZSwgY29uc3QgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSYgcHJvZmlsZSwgTFZhbHVl
IGZhaWxDb25kaXRpb24sIAogICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiwgYm9vbCBpc0V4Y2Vw
dGlvbkhhbmRsZXIgPSBmYWxzZSkKICAgICB7Ci0gICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRp
b25FbmFibGVkKCkpIHsKLSAgICAgICAgICAgIGRhdGFMb2coIiAgICBPU1IgZXhpdCAjIiwgbV9m
dGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0RGVzY3JpcHRvcnMuc2l6ZSgpLCAiIHdpdGggYXZhaWxh
YmlsaXR5OiAiLCBhdmFpbGFiaWxpdHlNYXAoKSwgIlxuIik7Ci0gICAgICAgICAgICBpZiAoIW1f
YXZhaWxhYmxlUmVjb3Zlcmllcy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgZGF0YUxvZygi
ICAgICAgICBBdmFpbGFibGUgcmVjb3ZlcmllczogIiwgbGlzdER1bXAobV9hdmFpbGFibGVSZWNv
dmVyaWVzKSwgIlxuIik7Ci0gICAgICAgIH0KKyAgICAgICAgZGF0YUxvZ0xuSWYodmVyYm9zZUNv
bXBpbGF0aW9uRW5hYmxlZCgpLCAiICAgIE9TUiBleGl0ICMiLCBtX2Z0bFN0YXRlLmppdENvZGUt
Pm9zckV4aXREZXNjcmlwdG9ycy5zaXplKCksICIgd2l0aCBhdmFpbGFiaWxpdHk6ICIsIGF2YWls
YWJpbGl0eU1hcCgpKTsKIAogICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgb3Jp
Z2luLmV4aXRPSyk7CiAKQEAgLTE3MDAwLDE4ICsxNjk5MCw2IEBAIGNsYXNzIExvd2VyREZHVG9C
MyB7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX2F2YWlsYWJsZVJlY292ZXJpZXMuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgICAgIEF2YWlsYWJsZVJlY292ZXJ5IHJlY292ZXJ5ID0gbV9hdmFpbGFibGVSZWNvdmVy
aWVzW2ldOwotICAgICAgICAgICAgaWYgKHJlY292ZXJ5Lm5vZGUoKSAhPSBub2RlKQotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgRXhpdFZhbHVlIHJlc3VsdCA9IEV4aXRW
YWx1ZTo6cmVjb3ZlcnkoCi0gICAgICAgICAgICAgICAgcmVjb3Zlcnkub3Bjb2RlKCksIGFyZ3Vt
ZW50cy5zaXplKCksIGFyZ3VtZW50cy5zaXplKCkgKyAxLAotICAgICAgICAgICAgICAgIHJlY292
ZXJ5LmZvcm1hdCgpKTsKLSAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQocmVjb3ZlcnkubGVm
dCgpKTsKLSAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQocmVjb3ZlcnkucmlnaHQoKSk7Ci0g
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgICAgIAogICAgICAgICBM
b3dlcmVkTm9kZVZhbHVlIHZhbHVlID0gbV9pbnQzMlZhbHVlcy5nZXQobm9kZSk7CiAgICAgICAg
IGlmIChpc1ZhbGlkKHZhbHVlKSkKICAgICAgICAgICAgIHJldHVybiBleGl0QXJndW1lbnQoYXJn
dW1lbnRzLCBEYXRhRm9ybWF0SW50MzIsIHZhbHVlLnZhbHVlKCkpOwpAQCAtMTcwNzgsMTggKzE3
MDU2LDYgQEAgY2xhc3MgTG93ZXJERkdUb0IzIHsKICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgs
IG1fbm9kZSwgdG9DU3RyaW5nKCJDYW5ub3QgZmluZCB2YWx1ZSBmb3Igbm9kZTogIiwgbm9kZSku
ZGF0YSgpKTsKICAgICB9CiAKLSAgICB2b2lkIGFkZEF2YWlsYWJsZVJlY292ZXJ5KAotICAgICAg
ICBOb2RlKiBub2RlLCBSZWNvdmVyeU9wY29kZSBvcGNvZGUsIExWYWx1ZSBsZWZ0LCBMVmFsdWUg
cmlnaHQsIERhdGFGb3JtYXQgZm9ybWF0KQotICAgIHsKLSAgICAgICAgbV9hdmFpbGFibGVSZWNv
dmVyaWVzLmFwcGVuZChBdmFpbGFibGVSZWNvdmVyeShub2RlLCBvcGNvZGUsIGxlZnQsIHJpZ2h0
LCBmb3JtYXQpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBhZGRBdmFpbGFibGVSZWNvdmVyeSgK
LSAgICAgICAgRWRnZSBlZGdlLCBSZWNvdmVyeU9wY29kZSBvcGNvZGUsIExWYWx1ZSBsZWZ0LCBM
VmFsdWUgcmlnaHQsIERhdGFGb3JtYXQgZm9ybWF0KQotICAgIHsKLSAgICAgICAgYWRkQXZhaWxh
YmxlUmVjb3ZlcnkoZWRnZS5ub2RlKCksIG9wY29kZSwgbGVmdCwgcmlnaHQsIGZvcm1hdCk7Ci0g
ICAgfQotICAgIAogICAgIHZvaWQgc2V0SW50MzIoTm9kZSogbm9kZSwgTFZhbHVlIHZhbHVlKQog
ICAgIHsKICAgICAgICAgbV9pbnQzMlZhbHVlcy5zZXQobm9kZSwgTG93ZXJlZE5vZGVWYWx1ZSh2
YWx1ZSwgbV9oaWdoQmxvY2spKTsKQEAgLTE3MzUwLDggKzE3MzE2LDYgQEAgY2xhc3MgTG93ZXJE
RkdUb0IzIHsKICAgICAKICAgICBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3IgbV9hdmFp
bGFiaWxpdHlDYWxjdWxhdG9yOwogICAgIAotICAgIFZlY3RvcjxBdmFpbGFibGVSZWNvdmVyeSwg
Mz4gbV9hdmFpbGFibGVSZWNvdmVyaWVzOwotICAgIAogICAgIEluUGxhY2VBYnN0cmFjdFN0YXRl
IG1fc3RhdGU7CiAgICAgQWJzdHJhY3RJbnRlcnByZXRlcjxJblBsYWNlQWJzdHJhY3RTdGF0ZT4g
bV9pbnRlcnByZXRlcjsKICAgICBERkc6OkJhc2ljQmxvY2sqIG1faGlnaEJsb2NrOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCmluZGV4IDA4
YWU0NjM0ODQ3YmRmN2NhZTNkOTFkMjYzMTJkZGJkNWMxYzAxYjYuLmQ5NDM5MGYwNmEwZTJiYTc1
NGZiNGY0ZDVjMTI3OWM2OTI0MzBiZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKQEAgLTEyNCw0NCArMTI0LDYgQEAgc3RhdGljIHZv
aWQgY29tcGlsZVJlY292ZXJ5KAogICAgICAgICBqaXQubG9hZDY0KEFzc2VtYmx5SGVscGVyczo6
YWRkcmVzc0Zvcih2YWx1ZS52aXJ0dWFsUmVnaXN0ZXIoKSksIEdQUkluZm86OnJlZ1QwKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKLSAgICBjYXNlIEV4aXRWYWx1ZVJlY292ZXJ5Ogot
ICAgICAgICBMb2NhdGlvbjo6Zm9yVmFsdWVSZXAodmFsdWVSZXBzW3ZhbHVlLnJpZ2h0UmVjb3Zl
cnlBcmd1bWVudCgpXSkucmVzdG9yZUludG8oCi0gICAgICAgICAgICBqaXQsIHJlZ2lzdGVyU2Ny
YXRjaCwgR1BSSW5mbzo6cmVnVDEpOwotICAgICAgICBMb2NhdGlvbjo6Zm9yVmFsdWVSZXAodmFs
dWVSZXBzW3ZhbHVlLmxlZnRSZWNvdmVyeUFyZ3VtZW50KCldKS5yZXN0b3JlSW50bygKLSAgICAg
ICAgICAgIGppdCwgcmVnaXN0ZXJTY3JhdGNoLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgIHN3
aXRjaCAodmFsdWUucmVjb3ZlcnlPcGNvZGUoKSkgewotICAgICAgICBjYXNlIEFkZFJlY292ZXJ5
OgotICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS5yZWNvdmVyeUZvcm1hdCgpKSB7Ci0gICAgICAg
ICAgICBjYXNlIERhdGFGb3JtYXRJbnQzMjoKLSAgICAgICAgICAgICAgICBqaXQuYWRkMzIoR1BS
SW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGNhc2UgRGF0YUZvcm1hdEludDUyOgotICAgICAgICAgICAgICAgIGppdC5hZGQ2
NChHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU3ViUmVjb3Zlcnk6Ci0gICAgICAgICAgICBz
d2l0Y2ggKHZhbHVlLnJlY292ZXJ5Rm9ybWF0KCkpIHsKLSAgICAgICAgICAgIGNhc2UgRGF0YUZv
cm1hdEludDMyOgotICAgICAgICAgICAgICAgIGppdC5zdWIzMihHUFJJbmZvOjpyZWdUMSwgR1BS
SW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBE
YXRhRm9ybWF0SW50NTI6Ci0gICAgICAgICAgICAgICAgaml0LnN1YjY0KEdQUkluZm86OnJlZ1Qx
LCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICAg
ICAgCiAgICAgY2FzZSBFeGl0VmFsdWVNYXRlcmlhbGl6ZU5ld09iamVjdDoKICAgICAgICAgaml0
LmxvYWRQdHIobWF0ZXJpYWxpemF0aW9uVG9Qb2ludGVyLmdldCh2YWx1ZS5vYmplY3RNYXRlcmlh
bGl6YXRpb24oKSksIEdQUkluZm86OnJlZ1QwKTsKICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQg
YS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IDdjM2ZkNzQxNzZh
Y2NhNjYwN2Y3YmIzYzhhMzFjYjI1ZWMwZTczNTkuLjA3YmFkNmJkNGU0ZjlmNDZkNmQyNGE3NGJj
ODhhMTdkNDkyZjEyMjAgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVz
dHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTktMDQtMDUgIFl1c3VrZSBTdXp1a2kg
IDx5c3V6dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBbSlNDXSBPU1JFeGl0IHJlY292ZXJ5IGZv
ciBTcGVjdWxhdGl2ZUFkZCBkb2VzIG5vdCBjb25zaWVyICJBID0gQSArIEEiIHBhdHRlcm4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NjU4MgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3RyZXNzL2Fk
ZC1vdmVyZmxvdy1jaGVjay13aXRoLXRocmVlLXNhbWUtcmVnaXN0ZXJzLmpzOiBBZGRlZC4KKyAg
ICAgICAgKGZvbyk6CisgICAgICAgIChOdW1iZXIucHJvdG90eXBlLnZhbHVlT2YpOgorICAgICAg
ICAocnVuV2l0aE51bWJlcik6CisKIDIwMTktMDQtMDUgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtp
QGFwcGxlLmNvbT4KIAogICAgICAgICBTSUdTRUdWIGluIEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6
OmFkZFN0cmluZ0NvbnN0YW50CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9hZGQtb3ZlcmZs
b3ctY2hlY2std2l0aC10aHJlZS1zYW1lLXJlZ2lzdGVycy5qcyBiL0pTVGVzdHMvc3RyZXNzL2Fk
ZC1vdmVyZmxvdy1jaGVjay13aXRoLXRocmVlLXNhbWUtcmVnaXN0ZXJzLmpzCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjZjMTQ1ZDQ2YzRjZmZhYjNlYzZhNWU4OTBhZmEzNjc4MDBlNThiOGYKLS0tIC9kZXYvbnVsbAor
KysgYi9KU1Rlc3RzL3N0cmVzcy9hZGQtb3ZlcmZsb3ctY2hlY2std2l0aC10aHJlZS1zYW1lLXJl
Z2lzdGVycy5qcwpAQCAtMCwwICsxLDUyIEBACisvL0AgcnVuRGVmYXVsdCgiLS11c2VEb3VibGVQ
cmVkaWN0aW9uRnV6emVyQWdlbnQ9MSIsICItLXVzZUZUTEpJVD0wIiwgIi0tdXNlQ29uY3VycmVu
dEpJVD0wIikKKworZnVuY3Rpb24gZm9vKGEsIGIpIHsKKyAgICB2YXIgcmVzdWx0ID0gYSArIGI7
CisgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIChhICsgYikgKyByZXN1bHQgKyB0aGlz
OworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIHRoaXMuZjsKK30KKworbm9JbmxpbmUoZm9vKTsK
KwordmFyIHg7CitOdW1iZXIucHJvdG90eXBlLnZhbHVlT2YgPSBmdW5jdGlvbigpIHsgcmV0dXJu
IHg7IH07CisKK3ZhciBnbG9iYWxDb3VudGVyID0gMDsKK2Z1bmN0aW9uIHJ1bldpdGhOdW1iZXIo
bnVtKSB7CisgICAgdmFyIHRlc3QgPSBGdW5jdGlvbihgdGhpc18sIGEsIGIsIHhfYCwgYAorICAg
ICAgICB4ID0geF87CisgICAgICAgIHZhciByZXN1bHQgPSBmb28uY2FsbCh0aGlzXywgYSwgYik7
CisgICAgICAgIGlmIChyZXN1bHQgIT0gKGEgKyBiKSAqIDIgKyB4XykKKyAgICAgICAgICAgIHRo
cm93IG5ldyBFcnJvcigiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQpOworICAgICAgICBy
ZXR1cm4gJHtnbG9iYWxDb3VudGVyKyt9OworICAgIGApOworICAgIG5vSW5saW5lKHRlc3QpOwor
CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKQorICAgICAgICB0ZXN0KDUsIDEs
IDIsIDEwMCk7CisKKyAgICB0ZXN0KDUsIDIwMDAwMDAwMDAsIDIwMDAwMDAwMDAsIDEpOworICAg
IHRyeSB7CisgICAgICAgIHRlc3QoNSwgbnVtLCBudW0sIDEwMDApOworICAgIH0gY2F0Y2ggKGVy
cm9yKSB7CisgICAgICAgIHByaW50KFN0cmluZyhlcnJvcikpOworICAgIH0KK30KKworcnVuV2l0
aE51bWJlcig1MzY4NzA5MTEpOworcnVuV2l0aE51bWJlcig1MzY4NzA5MTIpOworcnVuV2l0aE51
bWJlcig1MzY4NzA5MTMpOworcnVuV2l0aE51bWJlcig1MzY4NzA5MTQpOworcnVuV2l0aE51bWJl
cigxMDczNzQxNzczKTsKK3J1bldpdGhOdW1iZXIoMTA3Mzc0MTc3NCk7CitydW5XaXRoTnVtYmVy
KDEwNzM3NDE3NzUpOworcnVuV2l0aE51bWJlcigxMDczNzQxNzc2KTsKK3J1bldpdGhOdW1iZXIo
LTUzNjg3MDkxMyk7CitydW5XaXRoTnVtYmVyKC01MzY4NzA5MTQpOworcnVuV2l0aE51bWJlcigt
NTM2ODcwOTE1KTsKK3J1bldpdGhOdW1iZXIoLTEwNzM3NDE4MjMpOworcnVuV2l0aE51bWJlcigt
MTA3Mzc0MTgyNCk7CitydW5XaXRoTnVtYmVyKC0xMDczNzQxODI1KTsKK3J1bldpdGhOdW1iZXIo
LTEwNzM3NDE4MjYpOwo=
</data>
<flag name="review"
          id="383238"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>