<?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>190656</bug_id>
          
          <creation_ts>2018-10-16 18:38:09 -0700</creation_ts>
          <short_desc>useProbeOSRExit causes failures for Win64 DFG JIT</short_desc>
          <delta_ts>2018-11-01 10:42:52 -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="Ross Kirsling">ross.kirsling</reporter>
          <assigned_to name="Ross Kirsling">ross.kirsling</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>pvollan</cc>
    
    <cc>saam</cc>
    
    <cc>stephan.szabo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1469992</commentid>
    <comment_count>0</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2018-10-16 18:38:09 -0700</bug_when>
    <thetext>About three dozen JSC tests fail for WinCairo in dfg-eager mode only, but all of these pass if useProbeOSRExit is switched off.

Two-thirds appear to be failing the `!Heap::heap(value) || Heap::heap(value) == Heap::heap(this)` assert in JSObject::putDirectInternal:
https://github.com/WebKit/webkit/blob/master/Source/JavaScriptCore/runtime/JSObjectInlines.h#L270

The rest are failing isObject() assertions.

---

Here is a simple test case that reproduces the issue (distilled from stress/sparse-map-non-skip.js):

test.js
```
function checkGetter(object) {
  if (object.foo !== 0)
    throw new Error(`bad value for object.foo! expected 0, found ${object.foo}`);
}
noInline(checkGetter);

for (var i = 0; i &lt; 2305; ++i)
  checkGetter({ get foo() { return 0; } });

checkGetter({ get foo() { return 0; } });
```

dfg-whitelist.txt
```
&lt;global&gt;#Cuu2O0
```

With this as input, `jsc --useConcurrentJIT=false --useProbeOSRExit=true --dfgWhitelist=dfg-whitelist.txt test.js` suffices to repro.

Debug:
&gt; ASSERTION FAILED: getter.isObject() || setter.isObject()
&gt; ...\jit\JITOperations.cpp(1748) : JSC::operationPutGetterSetter
&gt; 1   00007FFB3E4321EA
&gt; 2   00007FFB2FC42F11
&gt; 3   00007FFB30910027
&gt; 4   000002B0398E2AE0

Release:
&gt; Exception: Error: bad value for object.foo! expected 0, found undefined
&gt; checkGetter@test.js:3:20
&gt; global code@test.js:10:12</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1471014</commentid>
    <comment_count>1</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2018-10-19 16:02:49 -0700</bug_when>
    <thetext>I&apos;ll try to list up what I know so far:

- FWIW, testmasm has no failures on WinCairo.

- If I dataLog on save and restore in DFGOSREntry.cpp, AssemblyHelpers.h, and DFGOSRExit.cpp (and use printEachOSRExit), it definitely looks like callee-save registers are saved and restored consistently whether or not the probe is used.

- If I use dumpDFGDisassembly and blot out all raw hex values (and normalize Structure identifiers), then the output is consistent with or without the probe. There is a final large codeblock which is only spit out in the non-probe case, but that&apos;s also true on Mac, which isn&apos;t broken.

- On the last run of operationPutGetterSetter (in JITOperations.cpp), the encodedGetterValue has an entirely different prefix (0x00007FFB... instead of 0x000001...) from the first 2305 times. If we look at the JSCell for the getter, there is one point of potential note...

  All cases without probe, first 2305 cases with probe:
    m_structureID             0x00000104                      unsigned int
    m_indexingTypeAndMisc     0x00 &apos;\0&apos;                       unsigned char
    m_type                    JSFunctionType (0x18 &apos;\x18&apos;)    JSC::JSType
    m_flags                   0x0e &apos;\xe&apos;                      unsigned char
    m_cellState               DefinitelyWhite (0x01 &apos;\x1&apos;)    JSC::CellState

  Final case, after DFG OSR exit, with probe:
    m_structureID             0x0000000d                      unsigned int
    m_indexingTypeAndMisc     0x18 &apos;\x18&apos;                     unsigned char
    m_type                    CellType (0x00 &apos;\0&apos;)            JSC::JSType
    m_flags                   0x00 &apos;\0&apos;                       unsigned char
    m_cellState               PossiblyBlack (0x00 &apos;\0&apos;)       JSC::CellState

...namely, that 0x18 seems like it&apos;s jumped up a slot. But then, everything after it is zeroes, so this may be a red herring...?

- One way or another, it&apos;s hard to imagine what other than Win64 calling convention could be at play here. Now, although we&apos;re saving and restoring RBX, RSI, RDI, R12, R13, R14, and R15, we&apos;re intentionally skipping over RBP and RSP -- RBP appears to be callee-save for x86_64 in general, so surely that one&apos;s a non-issue(?), but RSP is callee-save for Windows (according to MSDN, although it&apos;s not indicated as such in RegisterSet or GPRInfo) so perhaps the probe mucks with the stack pointer in a way that Win64 doesn&apos;t like?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1471683</commentid>
    <comment_count>2</comment_count>
    <who name="Stephan Szabo">stephan.szabo</who>
    <bug_when>2018-10-23 15:24:43 -0700</bug_when>
    <thetext>Adding a little bit of information from what was seen today.

The value that appears to come through for operationPutGetterSetter&apos;s encodedGetterValue seems to be the same value that was used in the prior call to operationPutByIdStrictOptimize&apos;s uid (which is also the fifth argument to that call).

The timeline with probe on seems to be:
operationNewFunction is called and seems to return in rax the value that we would want to use later as encodedGetterValue
ctiMasmProbeTrampoline is started
 - goes into executeProbe and then executeOSRExit and some more before leaving
operationPutByIdNonStrictOptimize is called and a value is placed into memory for the uid value.
operationPutGetterSetter is called and the value on the stack for the fifth argument has the same value as what was passed to the previous call as uid.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1471701</commentid>
    <comment_count>3</comment_count>
    <who name="Stephan Szabo">stephan.szabo</who>
    <bug_when>2018-10-23 16:55:23 -0700</bug_when>
    <thetext>In the case with probe on, when it goes to set up the arguments for operationPutByIdNonStrictOptimize I seem to see that rsp+20h and rbp-60h [in my test the last 4 digits of rsp were D220 and rbp was D300] are the same location, so setting the argument seems to overwrite the location that the getter was stored in. Later, when the call to operationPutGetterSetter goes to get the value, it reads the overwritten value and then puts that on the stack as the argument value and things fail.

With the probe off, at the point the argument is set up, I seem to have values like rsp ending with D2E0 and rbp ending with D3A0, so the two values are in different places. When the call to operationPutGetterSetter goes to get the value it gets the value from operationNewFunction and puts that on the stack as the argument and things work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1471703</commentid>
    <comment_count>4</comment_count>
    <who name="Stephan Szabo">stephan.szabo</who>
    <bug_when>2018-10-23 16:59:06 -0700</bug_when>
    <thetext>(In reply to Stephan Szabo from comment #3)
&gt; In the case with probe on, when it goes to set up the arguments for
&gt; operationPutByIdNonStrictOptimize I seem to see that rsp+20h and rbp-60h [in
&gt; my test the last 4 digits of rsp were D220 and rbp was D300] are the same

Correction D280 and D300</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1472514</commentid>
    <comment_count>5</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2018-10-26 11:33:44 -0700</bug_when>
    <thetext>Update:

This definitely is a stack pointer management problem.

When the probe is off, RSP always has the same value at the first line of operationPutGetterSetter in JITOperations, whether before DFG entry or after DFG exit:
https://github.com/WebKit/webkit/blob/master/Source/JavaScriptCore/jit/JITOperations.cpp#L1742

(* Technically, with or without the probe, RSP is raised by 0x10 just on the single run after calling prepareOSREntry but before actually switching out of baseline JIT. Apparently this isn&apos;t problematic though.)

When the probe is on, RSP ends up raised by 0x40 after DFG exit.

As such, if we hack in a `exitState.stackPointerOffset -= 0x40;` line right before setting RSP in executeOSRExit, the test case succeeds:
https://github.com/WebKit/webkit/blob/master/Source/JavaScriptCore/dfg/DFGOSRExit.cpp#L437</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1472583</commentid>
    <comment_count>6</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2018-10-26 14:22:30 -0700</bug_when>
    <thetext>(In reply to Ross Kirsling from comment #5)
&gt; As such, if we hack in a `exitState.stackPointerOffset -= 0x40;` line right
&gt; before setting RSP in executeOSRExit, the test case succeeds:
&gt; https://github.com/WebKit/webkit/blob/master/Source/JavaScriptCore/dfg/
&gt; DFGOSRExit.cpp#L437

To put this last part a bit more clearly, if we add 8 to the variable count returned from the DFG::VariableEventStream::reconstruct call here:
https://github.com/WebKit/webkit/blob/master/Source/JavaScriptCore/dfg/DFGOSRExit.cpp#L401

And comment out a sanity-check assert for Probe::Stack::lowWatermark here:
https://github.com/WebKit/webkit/blob/master/Source/JavaScriptCore/assembler/ProbeStack.h#L156

Then we finally have a state in which all the failing dfg-eager tests pass.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1472605</commentid>
    <comment_count>7</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-10-26 15:32:25 -0700</bug_when>
    <thetext>Seems like the probe itself is probably making mistakes on windows ABI</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1473114</commentid>
    <comment_count>8</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2018-10-29 16:40:35 -0700</bug_when>
    <thetext>A bit of progress:

The issue doesn&apos;t seem to be with the return value of DFG::VariableEventStream::reconstruct, as this is the same regardless of probe and regardless of platform.
the issue seems to be that this return value isn&apos;t appropriate as a stack pointer offset -- after all, it is simply thrown away in the non-probe path.

It appears that if we mimic this line from the non-probe path:
https://github.com/WebKit/webkit/blob/master/Source/JavaScriptCore/dfg/DFGOSRExit.cpp#L1379

That is, if we replace numVariables with `codeBlock-&gt;jitCode()-&gt;dfgCommon()-&gt;requiredRegisterCountForExit` on this line:
https://github.com/WebKit/webkit/blob/master/Source/JavaScriptCore/dfg/DFGOSRExit.cpp#L402

Then all of the relevant test cases pass (even on Mac!).

The catch is that we still need to remove the lowWatermark assert mentioned in my last comment:
https://github.com/WebKit/webkit/blob/master/Source/JavaScriptCore/assembler/ProbeStack.h#L156
Not sure at the moment what correction needs to occur here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1473141</commentid>
    <comment_count>9</comment_count>
      <attachid>353338</attachid>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2018-10-29 17:44:57 -0700</bug_when>
    <thetext>Created attachment 353338
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1473318</commentid>
    <comment_count>10</comment_count>
      <attachid>353338</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2018-10-30 11:03:58 -0700</bug_when>
    <thetext>Comment on attachment 353338
Patch

r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1473335</commentid>
    <comment_count>11</comment_count>
      <attachid>353338</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-10-30 11:32:29 -0700</bug_when>
    <thetext>Comment on attachment 353338
Patch

Clearing flags on attachment: 353338

Committed r237595: &lt;https://trac.webkit.org/changeset/237595&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1473337</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-10-30 11:32:31 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1473341</commentid>
    <comment_count>13</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-10-30 11:34:02 -0700</bug_when>
    <thetext>&lt;rdar://problem/45675298&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1474161</commentid>
    <comment_count>14</comment_count>
    <who name="Ross Kirsling">ross.kirsling</who>
    <bug_when>2018-11-01 10:42:52 -0700</bug_when>
    <thetext>Ugh, we might not be totally out of the woods yet...

While this patch fixed all dfg-eager failures in Debug, apparently four failures remain in Release only:
    stress/destructuring-assignment-accepts-iterables.js.dfg-eager
    stress/map-constructor.js.dfg-eager
    stress/set-constructor.js.dfg-eager
    stress/weak-map-constructor.js.dfg-eager

And sure enough, disabling the probe makes them pass.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>353338</attachid>
            <date>2018-10-29 17:44:57 -0700</date>
            <delta_ts>2018-10-30 11:32:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-190656-20181029174457.patch</filename>
            <type>text/plain</type>
            <size>3883</size>
            <attacher name="Ross Kirsling">ross.kirsling</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM3NTc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2
NTNlNWNkYWE1YTZkOGI2OTNlODA1OTk0NWFlZDMyNTdkYTUyMGQ4Li4yNzc5ZmI4YzU3ZjBkNTU2
OTMxNDFiNmRjYmRkZDI0NmE1NmQ1YTY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMSBAQAorMjAxOC0xMC0yOSAgUm9zcyBLaXJzbGluZyAgPHJvc3Mua2lyc2xpbmdAc29u
eS5jb20+CisKKyAgICAgICAgdXNlUHJvYmVPU1JFeGl0IGNhdXNlcyBmYWlsdXJlcyBmb3IgV2lu
NjQgREZHIEpJVAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTkwNjU2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBhc3NlbWJsZXIvUHJvYmVDb250ZXh0LmNwcDoKKyAgICAgICAgKEpTQzo6UHJvYmU6OmV4
ZWN1dGVQcm9iZSk6CisgICAgICAgIElmIGxvd1dhdGVybWFyayBpcyBleHBlY3RlZCB0byBlcXVh
bCBsb3dXYXRlcm1hcmtGcm9tVmlzaXRpbmdEaXJ0eVBhZ2VzICpyZWdhcmRsZXNzKiBvZiB0aGUg
aW5wdXQgcGFyYW0sCisgICAgICAgIHRoZW4gbGV0J3MganVzdCBjYWxsIGxvd1dhdGVybWFya0Zy
b21WaXNpdGluZ0RpcnR5UGFnZXMgaW5zdGVhZC4KKworICAgICAgICAqIGRmZy9ERkdPU1JFeGl0
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0OjpleGVjdXRlT1NSRXhpdCk6CisgICAg
ICAgIFRoZSByZXN1bHQgb2YgVmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QgYXBwZWFy
cyB0byBiZSBpbmFwcHJvcHJpYXRlIGZvciBkaXJlY3QgdXNlIGFzIGEgc3RhY2sgcG9pbnRlciBv
ZmZzZXQ7CisgICAgICAgIG1pbWljIHRoZSBub24tcHJvYmUgY2FzZSBhbmQgdXNlIHJlcXVpcmVk
UmVnaXN0ZXJDb3VudEZvckV4aXQgZnJvbSBERkdDb21tb25EYXRhIGluc3RlYWQuCisgICAgICAg
IChBbHNvLCBzdG9wIHJlZHVuZGFudGx5IHNldHRpbmcgdGhlIHN0YWNrIHBvaW50ZXIgdHdpY2Ug
aW4gYSByb3cuKQorCiAyMDE4LTEwLTI5ICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBw
bGUuY29tPgogCiAgICAgICAgIEpTQyBzaG91bGQgZXhwbGljaXRseSBsaXN0IGl0cyBtb2R1bGVt
YXAgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Qcm9i
ZUNvbnRleHQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Qcm9iZUNvbnRl
eHQuY3BwCmluZGV4IDJjYTA4NDJkODNiMGVjNWQ0YjM4ZWY3MzQzMmVlOGUyOTllMTJlNzUuLmMx
NWEyM2EyNjEwZTRjYjgyMWIxYmQ1Y2MyMzUxNDk5OWI3M2RhYjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvUHJvYmVDb250ZXh0LmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1Byb2JlQ29udGV4dC5jcHAKQEAgLTYwLDcgKzYwLDcg
QEAgdm9pZCBleGVjdXRlUHJvYmUoU3RhdGUqIHN0YXRlKQogCiAgICAgaWYgKGNvbnRleHQuaGFz
V3JpdGVzVG9GbHVzaCgpKSB7CiAgICAgICAgIGNvbnRleHQuc3RhY2soKS5zZXRTYXZlZFN0YWNr
UG9pbnRlcihzdGF0ZS0+Y3B1LnNwKCkpOwotICAgICAgICB2b2lkKiBsb3dXYXRlcm1hcmsgPSBj
b250ZXh0LnN0YWNrKCkubG93V2F0ZXJtYXJrKHN0YXRlLT5jcHUuc3AoKSk7CisgICAgICAgIHZv
aWQqIGxvd1dhdGVybWFyayA9IGNvbnRleHQuc3RhY2soKS5sb3dXYXRlcm1hcmtGcm9tVmlzaXRp
bmdEaXJ0eVBhZ2VzKCk7CiAgICAgICAgIHN0YXRlLT5jcHUuc3AoKSA9IHN0ZDo6bWluKGxvd1dh
dGVybWFyaywgc3RhdGUtPmNwdS5zcCgpKTsKIAogICAgICAgICBzdGF0ZS0+aW5pdGlhbGl6ZVN0
YWNrRnVuY3Rpb24gPSBmbHVzaERpcnR5U3RhY2tQYWdlczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkV4aXQuY3BwCmluZGV4IGIwMjQwMTZjYTRiNmUyZWM5MDgwZmZjNzUzZjQ4ZTll
ZTk0NWIzNDIuLjEyYjM0ZTJmNDFiODc5MWFkZGZhMGRhN2E2NGFmOTliMjUwMzg5ZmUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcApAQCAtMzk4LDggKzM5OCw4IEBA
IHZvaWQgT1NSRXhpdDo6ZXhlY3V0ZU9TUkV4aXQoQ29udGV4dCYgY29udGV4dCkKICAgICAgICAg
Ly8gQ29tcHV0ZSB0aGUgdmFsdWUgcmVjb3Zlcmllcy4KICAgICAgICAgT3BlcmFuZHM8VmFsdWVS
ZWNvdmVyeT4gb3BlcmFuZHM7CiAgICAgICAgIFZlY3RvcjxVbmRlZmluZWRPcGVyYW5kU3Bhbj4g
dW5kZWZpbmVkT3BlcmFuZFNwYW5zOwotICAgICAgICB1bnNpZ25lZCBudW1WYXJpYWJsZXMgPSBk
ZmdKSVRDb2RlLT52YXJpYWJsZUV2ZW50U3RyZWFtLnJlY29uc3RydWN0KGNvZGVCbG9jaywgZXhp
dC5tX2NvZGVPcmlnaW4sIGRmZ0pJVENvZGUtPm1pbmlmaWVkREZHLCBleGl0Lm1fc3RyZWFtSW5k
ZXgsIG9wZXJhbmRzLCAmdW5kZWZpbmVkT3BlcmFuZFNwYW5zKTsKLSAgICAgICAgcHRyZGlmZl90
IHN0YWNrUG9pbnRlck9mZnNldCA9IC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG51bVZhcmlhYmxl
cykgKiBzaXplb2YoUmVnaXN0ZXIpOworICAgICAgICBkZmdKSVRDb2RlLT52YXJpYWJsZUV2ZW50
U3RyZWFtLnJlY29uc3RydWN0KGNvZGVCbG9jaywgZXhpdC5tX2NvZGVPcmlnaW4sIGRmZ0pJVENv
ZGUtPm1pbmlmaWVkREZHLCBleGl0Lm1fc3RyZWFtSW5kZXgsIG9wZXJhbmRzLCAmdW5kZWZpbmVk
T3BlcmFuZFNwYW5zKTsKKyAgICAgICAgcHRyZGlmZl90IHN0YWNrUG9pbnRlck9mZnNldCA9IC1z
dGF0aWNfY2FzdDxwdHJkaWZmX3Q+KGNvZGVCbG9jay0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+
cmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yRXhpdCkgKiBzaXplb2YoUmVnaXN0ZXIpOwogCiAgICAg
ICAgIGV4aXQuZXhpdFN0YXRlID0gYWRvcHRSZWYobmV3IE9TUkV4aXRTdGF0ZShleGl0LCBjb2Rl
QmxvY2ssIGJhc2VsaW5lQ29kZUJsb2NrLCBvcGVyYW5kcywgV1RGTW92ZSh1bmRlZmluZWRPcGVy
YW5kU3BhbnMpLCByZWNvdmVyeSwgc3RhY2tQb2ludGVyT2Zmc2V0LCBhY3RpdmVUaHJlc2hvbGQs
IGFkanVzdGVkVGhyZXNob2xkLCBqdW1wVGFyZ2V0LCBhcnJheVByb2ZpbGUpKTsKIApAQCAtNDQw
LDEwICs0NDAsOCBAQCB2b2lkIE9TUkV4aXQ6OmV4ZWN1dGVPU1JFeGl0KENvbnRleHQmIGNvbnRl
eHQpCiAgICAgZG8gewogICAgICAgICBhdXRvIGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9IHN0
YXRpY19jYXN0PEV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbD4oZXhpdFN0YXRlLmV4dHJhSW5pdGlh
bGl6YXRpb25MZXZlbCk7CiAKLSAgICAgICAgaWYgKGV4dHJhSW5pdGlhbGl6YXRpb25MZXZlbCA9
PSBFeHRyYUluaXRpYWxpemF0aW9uTGV2ZWw6Ok5vbmUpIHsKLSAgICAgICAgICAgIGNvbnRleHQu
c3AoKSA9IGNvbnRleHQuZnA8dWludDhfdCo+KCkgKyBleGl0U3RhdGUuc3RhY2tQb2ludGVyT2Zm
c2V0OworICAgICAgICBpZiAoZXh0cmFJbml0aWFsaXphdGlvbkxldmVsID09IEV4dHJhSW5pdGlh
bGl6YXRpb25MZXZlbDo6Tm9uZSkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CiAKICAg
ICAgICAgLy8gQmVnaW4gZXh0cmEgaW5pdGlsaXphdGlvbiBsZXZlbDogU3BlY3VsYXRpb25SZWNv
dmVyeQogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>