<?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>42054</bug_id>
          
          <creation_ts>2010-07-11 23:41:38 -0700</creation_ts>
          <short_desc>Implement LayoutTestController::markerTextForListItem() for Mac and Windows DRT</short_desc>
          <delta_ts>2010-07-23 21:59:27 -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>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>37929</dependson>
    
    <dependson>37930</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Daniel Bates">dbates</reporter>
          <assigned_to name="Daniel Bates">dbates</assigned_to>
          <cc>aroben</cc>
    
    <cc>bweinstein</cc>
    
    <cc>darin</cc>
    
    <cc>jwieczorek</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>249697</commentid>
    <comment_count>0</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2010-07-11 23:41:38 -0700</bug_when>
    <thetext>We should implement LayoutTestController::markerTextForListItem() for the Mac and Windows ports so that we can convert the list layout tests from render tree/pixel tests to text-based tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>249701</commentid>
    <comment_count>1</comment_count>
      <attachid>61191</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2010-07-11 23:49:49 -0700</bug_when>
    <thetext>Created attachment 61191
Patch

I was not sure where best to put these functions in the WebKit portion of the Mac and Windows ports.

I am open to suggestions on this patch, including its approach as well as where best to place the code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>249719</commentid>
    <comment_count>2</comment_count>
    <who name="Jakub Wieczorek">jwieczorek</who>
    <bug_when>2010-07-12 01:37:23 -0700</bug_when>
    <thetext>There are already two bugs filed for Mac and Win (I should have mentioned them in the Skipped list). They should be closed once this is implemented.
https://bugs.webkit.org/show_bug.cgi?id=37929
https://bugs.webkit.org/show_bug.cgi?id=37930</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>249798</commentid>
    <comment_count>3</comment_count>
      <attachid>61191</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2010-07-12 06:27:03 -0700</bug_when>
    <thetext>Comment on attachment 61191
Patch

&gt; +- (JSValueRef)_markerTextForListItem:(JSContextRef)context forElement:(JSValueRef)value
&gt; +{
&gt; +    JSLock lock(SilenceAssertionsOnly);
&gt; +    ExecState* execState = toJS(context);
&gt; +    if (!value)
&gt; +        return JSValueMakeUndefined(context);
&gt; +    JSValue jsValue = toJS(execState, value);
&gt; +    Element* element = toElement(jsValue);

I assume toElement checks that jsValue really represents an Element?

&gt; +    if (!element)
&gt; +        return JSValueMakeUndefined(context);
&gt; +    String markerText = markerTextForListItem(element);
&gt; +    JSRetainPtr&lt;JSStringRef&gt; markerTextJS(Adopt, JSStringCreateWithUTF8CString(markerText.utf8().data()));
&gt; +    return JSValueMakeString(context, markerTextJS.get());
&gt; +}

It seems strange to convert a string to a JSValue, only to convert it back to a string. It&apos;s also weird that a method that claims to return &quot;text&quot; returns a JSValueRef. Why not return an NSString on Mac and a BSTR on Windows?

&gt; +HRESULT STDMETHODCALLTYPE WebView::markerTextForListItem(
&gt; +    /* [in] */ JSContextRef context,
&gt; +    /* [in] */ JSValueRef nodeObject,
&gt; +    /* [out, retval] */ JSValueRef* markerText)
&gt; +{
&gt; +    if (!context)
&gt; +        return E_FAIL;

It&apos;s conventional to first check that markerText is non-null. If it is null, you should bail and return E_POINTER.

&gt; +++ WebKit/win/Interfaces/IWebViewPrivate.idl	(working copy)
&gt; @@ -236,5 +236,7 @@ interface IWebViewPrivate : IUnknown
&gt;  
&gt;      HRESULT paintScrollViewRectToContextAtPoint([in] RECT rect, [in] POINT pt, [in] OLE_HANDLE dc);
&gt;  
&gt; +    [local] HRESULT markerTextForListItem([in] JSContextRef context, [in] JSValueRef nodeObject, [out, retval] JSValueRef* markerText);
&gt; +
&gt;      [local] HRESULT reportException([in] JSContextRef context, [in] JSValueRef exception);
&gt;  }

Your new function must be added to the end of the interface to avoid breaking nightly builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250036</commentid>
    <comment_count>4</comment_count>
      <attachid>61191</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-07-12 14:08:38 -0700</bug_when>
    <thetext>Comment on attachment 61191
Patch

It&apos;s very strange to have this doing all the JavaScript conversion. I&apos;m not sure why _computedStyleIncludingVisitedInfo:forElement: works that way.

A logical place to put the marker text function in the Mac port would be a private function on the DOMElement class. A function to map a JSContextRef and JSValueRef to an Objective-C DOMElement* might also be useful. But I don&apos;t think that really belongs on WebView. Maybe that should be a private class method of DOMElement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250243</commentid>
    <comment_count>5</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2010-07-12 19:38:01 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 61191 [details])
&gt; &gt; +- (JSValueRef)_markerTextForListItem:(JSContextRef)context forElement:(JSValueRef)value
&gt; &gt; +{
&gt; &gt; +    JSLock lock(SilenceAssertionsOnly);
&gt; &gt; +    ExecState* execState = toJS(context);
&gt; &gt; +    if (!value)
&gt; &gt; +        return JSValueMakeUndefined(context);
&gt; &gt; +    JSValue jsValue = toJS(execState, value);
&gt; &gt; +    Element* element = toElement(jsValue);
&gt; 
&gt; I assume toElement checks that jsValue really represents an Element?

Yes.

&gt; 
&gt; &gt; +    if (!element)
&gt; &gt; +        return JSValueMakeUndefined(context);
&gt; &gt; +    String markerText = markerTextForListItem(element);
&gt; &gt; +    JSRetainPtr&lt;JSStringRef&gt; markerTextJS(Adopt, JSStringCreateWithUTF8CString(markerText.utf8().data()));
&gt; &gt; +    return JSValueMakeString(context, markerTextJS.get());
&gt; &gt; +}
&gt; 
&gt; It seems strange to convert a string to a JSValue, only to convert it back to a string. It&apos;s also weird that a method that claims to return &quot;text&quot; returns a JSValueRef. Why not return an NSString on Mac and a BSTR on Windows?

Will change.

&gt; 
&gt; &gt; +HRESULT STDMETHODCALLTYPE WebView::markerTextForListItem(
&gt; &gt; +    /* [in] */ JSContextRef context,
&gt; &gt; +    /* [in] */ JSValueRef nodeObject,
&gt; &gt; +    /* [out, retval] */ JSValueRef* markerText)
&gt; &gt; +{
&gt; &gt; +    if (!context)
&gt; &gt; +        return E_FAIL;
&gt; 
&gt; It&apos;s conventional to first check that markerText is non-null. If it is null, you should bail and return E_POINTER.

Will add this check.

&gt; 
&gt; &gt; +++ WebKit/win/Interfaces/IWebViewPrivate.idl	(working copy)
&gt; &gt; @@ -236,5 +236,7 @@ interface IWebViewPrivate : IUnknown
&gt; &gt;  
&gt; &gt;      HRESULT paintScrollViewRectToContextAtPoint([in] RECT rect, [in] POINT pt, [in] OLE_HANDLE dc);
&gt; &gt;  
&gt; &gt; +    [local] HRESULT markerTextForListItem([in] JSContextRef context, [in] JSValueRef nodeObject, [out, retval] JSValueRef* markerText);
&gt; &gt; +
&gt; &gt;      [local] HRESULT reportException([in] JSContextRef context, [in] JSValueRef exception);
&gt; &gt;  }
&gt; 
&gt; Your new function must be added to the end of the interface to avoid breaking nightly builds.

Will move IDL definition to the end of the file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250244</commentid>
    <comment_count>6</comment_count>
      <attachid>61314</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2010-07-12 19:40:15 -0700</bug_when>
    <thetext>Created attachment 61314
Patch

Updated patch based on Adam Roben&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250247</commentid>
    <comment_count>7</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2010-07-12 19:45:37 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 61191 [details])
&gt; It&apos;s very strange to have this doing all the JavaScript conversion. I&apos;m not sure why _computedStyleIncludingVisitedInfo:forElement: works that way.
&gt; 
&gt; A logical place to put the marker text function in the Mac port would be a private function on the DOMElement class. A function to map a JSContextRef and JSValueRef to an Objective-C DOMElement* might also be useful. But I don&apos;t think that really belongs on WebView. Maybe that should be a private class method of DOMElement.

I will look into this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>251664</commentid>
    <comment_count>8</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2010-07-14 21:32:23 -0700</bug_when>
    <thetext>I split up the Mac and Windows changes into separate patches and used the existing bugs Bug #37929 and Bug #37930, respectively. I thought this would make it easier to review/discuss the changes and better track the landing of these patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255653</commentid>
    <comment_count>9</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2010-07-23 21:59:27 -0700</bug_when>
    <thetext>Resolving this bug as fixed since we landed the Mac implementation in changeset 63445 &lt;http://trac.webkit.org/changeset/63445&gt; (Bug # 37929) and the Windows implementation in changeset 63710 &lt;http://trac.webkit.org/changeset/63710&gt; (Bug #37930).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>61191</attachid>
            <date>2010-07-11 23:49:49 -0700</date>
            <delta_ts>2010-07-12 19:40:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>Bug42054.patch</filename>
            <type>text/plain</type>
            <size>14009</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MzA2MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMTAtMDctMTEgIERhbmllbCBCYXRlcyAgPGRiYXRlc0ByaW0uY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxl
bWVudCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bWFya2VyVGV4dEZvckxpc3RJdGVtKCkKKyAgICAg
ICAgZm9yIE1hYyBhbmQgV2luZG93cyBEUlQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTQyMDU0CisKKyAgICAgICAgRXhwb3J0IHN5bWJvbHMgZm9yIFdl
YkNvcmU6Om1hcmtlclRleHRGb3JMaXN0SXRlbSgpIGFuZCBXZWJDb3JlOjp0b0VsZW1lbnQoKS4K
KworICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorCiAyMDEwLTA3LTExICBBZGFtIEJhcnRoICA8
YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUnViYmVyLXN0YW1wZWQgYnkgRXJpYyBTZWlk
ZWwKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9X
ZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gNjMwNjEpCisrKyBXZWJDb3JlL1dlYkNvcmUuZXhwLmlu
CSh3b3JraW5nIGNvcHkpCkBAIC00MTcsNiArNDE3LDcgQEAgX19aTjdXZWJDb3JlMTlhcHBsaWNh
dGlvbklzU2FmYXJpRXYKIF9fWk43V2ViQ29yZTIwUmVuZGVyRW1iZWRkZWRPYmplY3QzMHNldFNo
b3dzQ3Jhc2hlZFBsdWdpbkluZGljYXRvckV2CiBfX1pON1dlYkNvcmUyMFJlc291cmNlUmVzcG9u
c2VCYXNlMjRzZXRFeHBlY3RlZENvbnRlbnRMZW5ndGhFeAogX19aTjdXZWJDb3JlMjBSZXNvdXJj
ZVJlc3BvbnNlQmFzZUMyRXYKK19fWk43V2ViQ29yZTIxbWFya2VyVGV4dEZvckxpc3RJdGVtRVBO
U183RWxlbWVudEUKIF9fWk43V2ViQ29yZTIxUGxhdGZvcm1LZXlib2FyZEV2ZW50MjRkaXNhbWJp
Z3VhdGVLZXlEb3duRXZlbnRFTlMwXzRUeXBlRWIKIF9fWk43V2ViQ29yZTIxUGxhdGZvcm1LZXli
b2FyZEV2ZW50QzFFUDdOU0V2ZW50CiBfX1pON1dlYkNvcmUyMVNWR0RvY3VtZW50RXh0ZW5zaW9u
czIxc2FtcGxlQW5pbWF0aW9uQXRUaW1lRVJLTlNfNlN0cmluZ0VQTlNfMTRTVkdTTUlMRWxlbWVu
dEVkCkBAIC03NjcsNiArNzY4LDcgQEAgX19aTjdXZWJDb3JlOVRpbWVyQmFzZTRzdG9wRXYKIF9f
Wk43V2ViQ29yZTlUaW1lckJhc2U1c3RhcnRFZGQKIF9fWk43V2ViQ29yZTlUaW1lckJhc2VDMkV2
CiBfX1pON1dlYkNvcmU5VGltZXJCYXNlRDJFdgorX19aTjdXZWJDb3JlOXRvRWxlbWVudEVOM0pT
QzdKU1ZhbHVlRQogX19aTjdXZWJDb3JlOWZvbnRDYWNoZUV2CiBfX1pON1dlYkNvcmU5bWFrZVJh
bmdlRVJLTlNfMTVWaXNpYmxlUG9zaXRpb25FUzJfCiBfX1pON1dlYkNvcmU5cGFnZUNhY2hlRXYK
SW5kZXg6IFdlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvQ2hh
bmdlTG9nCShyZXZpc2lvbiA2MzA2MSkKKysrIFdlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAtMDctMTEgIERhbmllbCBCYXRlcyAgPGRiYXRl
c0ByaW0uY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEltcGxlbWVudCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bWFya2VyVGV4dEZvckxpc3RJdGVt
KCkKKyAgICAgICAgZm9yIE1hYyBhbmQgV2luZG93cyBEUlQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQyMDU0CisKKyAgICAgICAgSW1wbGVtZW50cyBz
dXBwb3J0IGZvciBtYXJrZXJUZXh0Rm9yTGlzdEl0ZW0gaW4gdGhlIE1hYyBwb3J0LgorCisgICAg
ICAgICogV2ViVmlldy9XZWJWaWV3Lm1tOgorICAgICAgICAoLVtXZWJWaWV3IF9tYXJrZXJUZXh0
Rm9yTGlzdEl0ZW06Zm9yRWxlbWVudDpdKTogQWRkZWQuCisgICAgICAgICogV2ViVmlldy9XZWJW
aWV3UHJpdmF0ZS5oOgorCiAyMDEwLTA3LTA5ICBMZW9uIENsYXJrZSAgPGxlb25jbGFya2VAZ29v
Z2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpJbmRleDogV2ViS2l0
L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJWaWV3
L1dlYlZpZXcubW0JKHJldmlzaW9uIDYzMDYxKQorKysgV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZp
ZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTEwMyw2ICsxMDMsNyBAQAogI2ltcG9ydCA8Q29yZUZv
dW5kYXRpb24vQ0ZTZXQuaD4KICNpbXBvcnQgPEZvdW5kYXRpb24vTlNVUkxDb25uZWN0aW9uLmg+
CiAjaW1wb3J0IDxKYXZhU2NyaXB0Q29yZS9BUElDYXN0Lmg+CisjaW1wb3J0IDxKYXZhU2NyaXB0
Q29yZS9KU1JldGFpblB0ci5oPgogI2ltcG9ydCA8SmF2YVNjcmlwdENvcmUvSlNWYWx1ZVJlZi5o
PgogI2ltcG9ydCA8V2ViQ29yZS9BYnN0cmFjdERhdGFiYXNlLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmg+CkBAIC0xMzcsNiArMTM4LDcgQEAKICNpbXBvcnQg
PFdlYkNvcmUvUGFnZUdyb3VwLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtTW91c2VFdmVu
dC5oPgogI2ltcG9ydCA8V2ViQ29yZS9Qcm9ncmVzc1RyYWNrZXIuaD4KKyNpbXBvcnQgPFdlYkNv
cmUvUmVuZGVyVHJlZUFzVGV4dC5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJXaWRnZXQuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvUmVzb3VyY2VIYW5kbGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvUnVu
dGltZUFwcGxpY2F0aW9uQ2hlY2tzLmg+CkBAIC01ODkwLDYgKzU4OTIsMjEgQEAgLSAoSlNWYWx1
ZVJlZilfY29tcHV0ZWRTdHlsZUluY2x1ZGluZ1ZpcwogICAgIHJldHVybiB0b1JlZihleGVjLCB0
b0pTKGV4ZWMsIGpzRWxlbWVudC0+Z2xvYmFsT2JqZWN0KCksIHN0eWxlLmdldCgpKSk7CiB9CiAK
Ky0gKEpTVmFsdWVSZWYpX21hcmtlclRleHRGb3JMaXN0SXRlbTooSlNDb250ZXh0UmVmKWNvbnRl
eHQgZm9yRWxlbWVudDooSlNWYWx1ZVJlZil2YWx1ZQoreworICAgIEpTTG9jayBsb2NrKFNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CisgICAgRXhlY1N0YXRlKiBleGVjU3RhdGUgPSB0b0pTKGNvbnRl
eHQpOworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjb250ZXh0KTsKKyAgICBKU1ZhbHVlIGpzVmFsdWUgPSB0b0pTKGV4ZWNTdGF0ZSwgdmFsdWUp
OworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1lbnQoanNWYWx1ZSk7CisgICAgaWYgKCFl
bGVtZW50KQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cisg
ICAgU3RyaW5nIG1hcmtlclRleHQgPSBtYXJrZXJUZXh0Rm9yTGlzdEl0ZW0oZWxlbWVudCk7Cisg
ICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IG1hcmtlclRleHRKUyhBZG9wdCwgSlNTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcobWFya2VyVGV4dC51dGY4KCkuZGF0YSgpKSk7CisgICAgcmV0
dXJuIEpTVmFsdWVNYWtlU3RyaW5nKGNvbnRleHQsIG1hcmtlclRleHRKUy5nZXQoKSk7Cit9CisK
IEBlbmQKIAogI2lmZGVmIEJVSUxESU5HX09OX0xFT1BBUkQKSW5kZXg6IFdlYktpdC9tYWMvV2Vi
Vmlldy9XZWJWaWV3UHJpdmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvV2ViVmlldy9X
ZWJWaWV3UHJpdmF0ZS5oCShyZXZpc2lvbiA2MzA2MSkKKysrIFdlYktpdC9tYWMvV2ViVmlldy9X
ZWJWaWV3UHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02MjAsNiArNjIwLDcgQEAgQGludGVy
ZmFjZSBXZWJWaWV3IChXZWJWaWV3R2VvbG9jYXRpb24pCiAKIEBpbnRlcmZhY2UgV2ViVmlldyAo
V2ViVmlld1ByaXZhdGVTdHlsZUluZm8pCiAtIChKU1ZhbHVlUmVmKV9jb21wdXRlZFN0eWxlSW5j
bHVkaW5nVmlzaXRlZEluZm86KEpTQ29udGV4dFJlZiljb250ZXh0IGZvckVsZW1lbnQ6KEpTVmFs
dWVSZWYpdmFsdWU7CistIChKU1ZhbHVlUmVmKV9tYXJrZXJUZXh0Rm9yTGlzdEl0ZW06KEpTQ29u
dGV4dFJlZiljb250ZXh0IGZvckVsZW1lbnQ6KEpTVmFsdWVSZWYpdmFsdWU7CiBAZW5kCiAKIEBp
bnRlcmZhY2UgTlNPYmplY3QgKFdlYkZyYW1lTG9hZERlbGVnYXRlUHJpdmF0ZSkKSW5kZXg6IFdl
YktpdC93aW4vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vQ2hhbmdlTG9nCShy
ZXZpc2lvbiA2MzA2MSkKKysrIFdlYktpdC93aW4vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTggQEAKKzIwMTAtMDctMTEgIERhbmllbCBCYXRlcyAgPGRiYXRlc0ByaW0uY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxl
bWVudCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bWFya2VyVGV4dEZvckxpc3RJdGVtKCkKKyAgICAg
ICAgZm9yIE1hYyBhbmQgV2luZG93cyBEUlQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTQyMDU0CisKKyAgICAgICAgSW1wbGVtZW50cyBzdXBwb3J0IGZv
ciBtYXJrZXJUZXh0Rm9yTGlzdEl0ZW0gaW4gdGhlIEFwcGxlIFdpbmRvd3MgcG9ydC4KKworICAg
ICAgICAqIEludGVyZmFjZXMvSVdlYlZpZXdQcml2YXRlLmlkbDogQWRkZWQgSURMIGRlZmluaXRp
b24gZm9yIG1hcmtlclRleHRGb3JMaXN0SXRlbS4KKyAgICAgICAgKiBXZWJWaWV3LmNwcDoKKyAg
ICAgICAgKFdlYlZpZXc6Om1hcmtlclRleHRGb3JMaXN0SXRlbSk6IEFkZGVkLgorICAgICAgICAq
IFdlYlZpZXcuaDoKKwogMjAxMC0wNy0wOCAgQWFyb24gQm9vZG1hbiAgPGFhQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCkluZGV4OiBXZWJLaXQv
d2luL1dlYlZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4vV2ViVmlldy5jcHAJKHJl
dmlzaW9uIDYzMDYxKQorKysgV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjEsNiArNjEsNyBAQAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0FQSUNhc3QuaD4KICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9Jbml0aWFsaXplVGhyZWFkaW5nLmg+CiAjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSlNMb2NrLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNSZXRh
aW5QdHIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1ZhbHVlLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9BYnN0cmFjdERhdGFiYXNlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9BWE9iamVjdENh
Y2hlLmg+CkBAIC05NSw2ICs5Niw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9IaXRUZXN0UmVxdWVz
dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSGl0VGVzdFJlc3VsdC5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvSW50UmVjdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSlNFbGVtZW50Lmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9LZXlib2FyZEV2ZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9MYW5ndWFnZS5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvTG9nZ2luZy5oPgpAQCAtMTEyLDYgKzExNCw3IEBACiAjaW5jbHVk
ZSA8V2ViQ29yZS9Qcm9ncmVzc1RyYWNrZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlckxh
eWVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJUaGVtZS5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvUmVuZGVyVHJlZUFzVGV4dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyVmlldy5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyV2lkZ2V0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNv
dXJjZUhhbmRsZS5oPgpAQCAtNTY2Nyw2ICs1NjcwLDM0IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgV2ViVmlldzo6cmVwb3IKICAgICByZXR1cm4gU19PSzsKIH0KIAorSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSBXZWJWaWV3OjptYXJrZXJUZXh0Rm9yTGlzdEl0ZW0oCisgICAgLyogW2lu
XSAqLyBKU0NvbnRleHRSZWYgY29udGV4dCwKKyAgICAvKiBbaW5dICovIEpTVmFsdWVSZWYgbm9k
ZU9iamVjdCwKKyAgICAvKiBbb3V0LCByZXR2YWxdICovIEpTVmFsdWVSZWYqIG1hcmtlclRleHQp
Cit7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gRV9GQUlMOworCisgICAgSlNM
b2NrIGxvY2soSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpTQzo6RXhlY1N0YXRl
KiBleGVjU3RhdGUgPSB0b0pTKGNvbnRleHQpOworICAgIGlmICghbm9kZU9iamVjdCkgeworICAg
ICAgICAqbWFya2VyVGV4dCA9IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgICAg
ICByZXR1cm4gRV9GQUlMOworICAgIH0KKyAgICBKU0M6OkpTVmFsdWUganNWYWx1ZSA9IHRvSlMo
ZXhlY1N0YXRlLCBub2RlT2JqZWN0KTsKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gdG9FbGVtZW50
KGpzVmFsdWUpOworICAgIGlmICghZWxlbWVudCkgeworICAgICAgICAqbWFya2VyVGV4dCA9IEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworICAgICAgICByZXR1cm4gRV9GQUlMOworICAg
IH0KKworICAgIFdlYkNvcmU6OlN0cmluZyBtYXJrZXJUZXh0U3RyaW5nID0gV2ViQ29yZTo6bWFy
a2VyVGV4dEZvckxpc3RJdGVtKGVsZW1lbnQpOworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBtYXJrZXJUZXh0SlMoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKG1hcmtl
clRleHRTdHJpbmcudXRmOCgpLmRhdGEoKSkpOworICAgICptYXJrZXJUZXh0ID0gSlNWYWx1ZU1h
a2VTdHJpbmcoY29udGV4dCwgbWFya2VyVGV4dEpTLmdldCgpKTsKKyAgICByZXR1cm4gU19PSzsK
K30KKworCiBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYlZpZXc6OnNldEN1c3RvbUhUTUxU
b2tlbml6ZXJUaW1lRGVsYXkoCiAgICAgLyogW2luXSAqLyBkb3VibGUgdGltZURlbGF5KQogewpJ
bmRleDogV2ViS2l0L3dpbi9XZWJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJW
aWV3LmgJKHJldmlzaW9uIDYzMDYxKQorKysgV2ViS2l0L3dpbi9XZWJWaWV3LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTcwNiw2ICs3MDYsMTEgQEAgcHVibGljOgogICAgICAgICAvKiBbaW5dICovIEpT
Q29udGV4dFJlZiBjb250ZXh0LAogICAgICAgICAvKiBbaW5dICovIEpTVmFsdWVSZWYgZXhjZXB0
aW9uKTsKIAorICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBtYXJrZXJUZXh0
Rm9yTGlzdEl0ZW0oCisgICAgICAgIC8qIFtpbl0gKi8gSlNDb250ZXh0UmVmIGNvbnRleHQsCisg
ICAgICAgIC8qIFtpbl0gKi8gSlNWYWx1ZVJlZiBub2RlT2JqZWN0LAorICAgICAgICAvKiBbb3V0
LCByZXR2YWxdICovIEpTVmFsdWVSZWYqIG1hcmtlclRleHQpOworCiAgICAgdmlydHVhbCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIHNldEN1c3RvbUhUTUxUb2tlbml6ZXJUaW1lRGVsYXkoCiAg
ICAgICAgIC8qIFtpbl0gKi8gZG91YmxlIHRpbWVEZWxheSk7CiAKSW5kZXg6IFdlYktpdC93aW4v
SW50ZXJmYWNlcy9JV2ViVmlld1ByaXZhdGUuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC93aW4v
SW50ZXJmYWNlcy9JV2ViVmlld1ByaXZhdGUuaWRsCShyZXZpc2lvbiA2MzA2MSkKKysrIFdlYktp
dC93aW4vSW50ZXJmYWNlcy9JV2ViVmlld1ByaXZhdGUuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0y
MzYsNSArMjM2LDcgQEAgaW50ZXJmYWNlIElXZWJWaWV3UHJpdmF0ZSA6IElVbmtub3duCiAKICAg
ICBIUkVTVUxUIHBhaW50U2Nyb2xsVmlld1JlY3RUb0NvbnRleHRBdFBvaW50KFtpbl0gUkVDVCBy
ZWN0LCBbaW5dIFBPSU5UIHB0LCBbaW5dIE9MRV9IQU5ETEUgZGMpOwogCisgICAgW2xvY2FsXSBI
UkVTVUxUIG1hcmtlclRleHRGb3JMaXN0SXRlbShbaW5dIEpTQ29udGV4dFJlZiBjb250ZXh0LCBb
aW5dIEpTVmFsdWVSZWYgbm9kZU9iamVjdCwgW291dCwgcmV0dmFsXSBKU1ZhbHVlUmVmKiBtYXJr
ZXJUZXh0KTsKKwogICAgIFtsb2NhbF0gSFJFU1VMVCByZXBvcnRFeGNlcHRpb24oW2luXSBKU0Nv
bnRleHRSZWYgY29udGV4dCwgW2luXSBKU1ZhbHVlUmVmIGV4Y2VwdGlvbik7CiB9CkluZGV4OiBX
ZWJLaXRUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MzA2MikKKysrIFdlYktpdFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDE5IEBACisyMDEwLTA3LTExICBEYW5pZWwgQmF0ZXMgIDxkYmF0ZXNAcmlt
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJ
bXBsZW1lbnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om1hcmtlclRleHRGb3JMaXN0SXRlbSgpCisg
ICAgICAgIGZvciBNYWMgYW5kIFdpbmRvd3MgRFJUCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MjA1NAorCisgICAgICAgIEltcGxlbWVudHMgRFJUIHN1
cHBvcnQgZm9yIG1hcmtlclRleHRGb3JMaXN0SXRlbSBpbiBib3RoIHRoZSBNYWMKKyAgICAgICAg
YW5kIEFwcGxlIFdpbmRvd3MgcG9ydHMuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMv
TGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW06CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxl
cjo6bWFya2VyVGV4dEZvckxpc3RJdGVtKTogSW1wbGVtZW50ZWQuCisgICAgICAgICogRHVtcFJl
bmRlclRyZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcDoKKyAgICAgICAgKExheW91
dFRlc3RDb250cm9sbGVyOjptYXJrZXJUZXh0Rm9yTGlzdEl0ZW0pOiBEaXR0by4KKwogMjAxMC0w
Ny0xMSAgRGFuaWVsIEJhdGVzICA8ZGJhdGVzQHJpbS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgRGF2aWQgS2lsemVyLgpJbmRleDogV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0xh
eW91dFRlc3RDb250cm9sbGVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbQkocmV2aXNpb24gNjMwNjEp
CisrKyBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENvbnRyb2xsZXJN
YWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTE5NSw5ICsxOTUsMTIgQEAgSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IExheW91dFRlc3RDb250cgogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
TGF5b3V0VGVzdENvbnRyb2xsZXI6Om1hcmtlclRleHRGb3JMaXN0SXRlbShKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNWYWx1ZVJlZiBub2RlT2JqZWN0KSBjb25zdAotewotICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgbWUuCi0gICAgcmV0dXJuIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPigpOworeyAg
ICAKKyAgICBKU1ZhbHVlUmVmIGpzVmFsdWVSZWYgPSBbW21haW5GcmFtZSB3ZWJWaWV3XSBfbWFy
a2VyVGV4dEZvckxpc3RJdGVtOmNvbnRleHQgZm9yRWxlbWVudDpub2RlT2JqZWN0XTsKKyAgICBK
U1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7CisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IG1h
cmtlclRleHQoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwganNWYWx1ZVJlZiwg
JmV4Y2VwdGlvbikpOworICAgIEFTU0VSVCghZXhjZXB0aW9uKTsKKyAgICByZXR1cm4gbWFya2Vy
VGV4dDsKIH0KIAogaW50IExheW91dFRlc3RDb250cm9sbGVyOjpwYWdlTnVtYmVyRm9yRWxlbWVu
dEJ5SWQoSlNTdHJpbmdSZWYgaWQsIGZsb2F0IHBhZ2VXaWR0aEluUGl4ZWxzLCBmbG9hdCBwYWdl
SGVpZ2h0SW5QaXhlbHMpCkluZGV4OiBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vTGF5
b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHAJKHJldmlzaW9uIDYzMDYx
KQorKysgV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVy
V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk2LDggKzE5NiwyMiBAQCBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6bWFya2VyVGV4dEZvckxpc3RJdGVtKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU1ZhbHVlUmVmIG5vZGVPYmplY3QpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IElt
cGxlbWVudCBtZS4KLSAgICByZXR1cm4gSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+KCk7CisgICAg
Q09NUHRyPElXZWJWaWV3PiB3ZWJWaWV3OworICAgIGlmIChGQUlMRUQoZnJhbWUtPndlYlZpZXco
JndlYlZpZXcpKSkKKyAgICAgICAgcmV0dXJuIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPigpOwor
CisgICAgQ09NUHRyPElXZWJWaWV3UHJpdmF0ZT4gdmlld1ByaXZhdGU7CisgICAgaWYgKEZBSUxF
RCh3ZWJWaWV3LT5RdWVyeUludGVyZmFjZSgmdmlld1ByaXZhdGUpKSkKKyAgICAgICAgcmV0dXJu
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPigpOworCisgICAgSlNWYWx1ZVJlZiBqc1ZhbHVlUmVm
OworICAgIGlmIChGQUlMRUQodmlld1ByaXZhdGUtPm1hcmtlclRleHRGb3JMaXN0SXRlbShjb250
ZXh0LCBub2RlT2JqZWN0LCAmanNWYWx1ZVJlZikpKQorICAgICAgICByZXR1cm4gSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+KCk7CisKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7CisgICAg
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IG1hcmtlclRleHQoQWRvcHQsIEpTVmFsdWVUb1N0cmlu
Z0NvcHkoY29udGV4dCwganNWYWx1ZVJlZiwgJmV4Y2VwdGlvbikpOworICAgIEFTU0VSVCghZXhj
ZXB0aW9uKTsKKyAgICByZXR1cm4gbWFya2VyVGV4dDsKIH0KIAogdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6d2FpdEZvclBvbGljeURlbGVnYXRlKCkKSW5kZXg6IExheW91dFRlc3RzL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDYzMDYx
KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcg
QEAKKzIwMTAtMDctMTEgIERhbmllbCBCYXRlcyAgPGRiYXRlc0ByaW0uY29tPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6bWFya2VyVGV4dEZvckxpc3RJdGVtKCkKKyAgICAgICAgZm9yIE1hYyBh
bmQgV2luZG93cyBEUlQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQyMDU0CisKKyAgICAgICAgUmVtb3ZlIHNraXBwZWQgbGF5b3V0IHRlc3RzIG5vdyB0
aGF0IHdlIGhhdmUgRFJUIHN1cHBvcnQKKyAgICAgICAgdG8gcnVuIHRoZW0uCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvU2tpcHBlZDoKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vU2tpcHBlZDoK
KwogMjAxMC0wNy0xMCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0v
bWFjL1NraXBwZWQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBw
ZWQJKHJldmlzaW9uIDYzMDYxKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBwZWQJ
KHdvcmtpbmcgY29weSkKQEAgLTE1NiwxNCArMTU2LDYgQEAgZmFzdC9vdmVyZmxvdy9zY3JvbGxi
YXItcmVzdG9yZWQtYW5kLXRoZQogZWRpdGluZy9wYXN0ZWJvYXJkL29ucGFzdGUtdGV4dC1odG1s
Lmh0bWwKIGZhc3QvZXZlbnRzL29uZHJvcC10ZXh0LWh0bWwuaHRtbAogCi0jIE1pc3NpbmcgYW4g
aW1wbGVtZW50YXRpb24gb2YgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om1hcmtlclRleHRGb3JMaXN0
SXRlbSgpCi1mYXN0L2xpc3RzL29sLW5lc3RlZC1pdGVtcy1keW5hbWljLWluc2VydC5odG1sCi1m
YXN0L2xpc3RzL29sLW5lc3RlZC1pdGVtcy1keW5hbWljLXJlbW92ZS5odG1sCi1mYXN0L2xpc3Rz
L29sLW5lc3RlZC1pdGVtcy5odG1sCi1mYXN0L2xpc3RzL29sLW5lc3RlZC1saXN0LWR5bmFtaWMt
aW5zZXJ0Lmh0bWwKLWZhc3QvbGlzdHMvb2wtbmVzdGVkLWxpc3QtZHluYW1pYy1yZW1vdmUuaHRt
bAotZmFzdC9saXN0cy9vbC1uZXN0ZWQtbGlzdC5odG1sCi0KICMgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTMzODEyCiBmYXN0L2RvbS9pY29uLXVybC1wcm9wZXJ0eS5o
dG1sCiAKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCShyZXZpc2lvbiA2MzA2MSkKKysr
IExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVkCSh3b3JraW5nIGNvcHkpCkBAIC04NjMs
MTQgKzg2Myw2IEBAIGZhc3QvZXZlbnRzL29uZHJvcC10ZXh0LWh0bWwuaHRtbAogIyA8aHR0cDov
L3dlYmtpdC5vcmcvYi8zNzA5Nj4gaHR0cC90ZXN0cy9zZWN1cml0eS94c3MtREVOSUVELWlmcmFt
ZS1zcmMtYWxpYXMuaHRtbCBzb21ldGltZXMgdGltZXMgb3V0IG9uIFdpbmRvd3MKIGh0dHAvdGVz
dHMvc2VjdXJpdHkveHNzLURFTklFRC1pZnJhbWUtc3JjLWFsaWFzLmh0bWwKIAotIyBNaXNzaW5n
IGFuIGltcGxlbWVudGF0aW9uIG9mIExheW91dFRlc3RDb250cm9sbGVyOjptYXJrZXJUZXh0Rm9y
TGlzdEl0ZW0oKQotZmFzdC9saXN0cy9vbC1uZXN0ZWQtaXRlbXMtZHluYW1pYy1pbnNlcnQuaHRt
bAotZmFzdC9saXN0cy9vbC1uZXN0ZWQtaXRlbXMtZHluYW1pYy1yZW1vdmUuaHRtbAotZmFzdC9s
aXN0cy9vbC1uZXN0ZWQtaXRlbXMuaHRtbAotZmFzdC9saXN0cy9vbC1uZXN0ZWQtbGlzdC1keW5h
bWljLWluc2VydC5odG1sCi1mYXN0L2xpc3RzL29sLW5lc3RlZC1saXN0LWR5bmFtaWMtcmVtb3Zl
Lmh0bWwKLWZhc3QvbGlzdHMvb2wtbmVzdGVkLWxpc3QuaHRtbAotCiAjIERvZXNuJ3Qgc3VwcG9y
dCBXT0ZGIHlldC4KIGZhc3QvY3NzL2ZvbnQtZmFjZS13b2ZmLmh0bWwKIAo=
</data>
<flag name="review"
          id="49173"
          type_id="1"
          status="-"
          setter="aroben"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>61314</attachid>
            <date>2010-07-12 19:40:15 -0700</date>
            <delta_ts>2010-07-14 21:32:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>Bug42054_1.patch</filename>
            <type>text/plain</type>
            <size>12893</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MzA5MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMTAtMDctMTIgIERhbmllbCBCYXRlcyAgPGRiYXRlc0ByaW0uY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxl
bWVudCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bWFya2VyVGV4dEZvckxpc3RJdGVtKCkKKyAgICAg
ICAgZm9yIE1hYyBhbmQgV2luZG93cyBEUlQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTQyMDU0CisKKyAgICAgICAgRXhwb3J0IHN5bWJvbHMgZm9yIFdl
YkNvcmU6Om1hcmtlclRleHRGb3JMaXN0SXRlbSgpIGFuZCBXZWJDb3JlOjp0b0VsZW1lbnQoKS4K
KworICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorCiAyMDEwLTA3LTEyICBBbmRyZWFzIEtsaW5n
ICA8YW5kcmVhcy5rbGluZ0Bub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24g
SGF1c21hbm4uCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDYzMDkwKQorKysgV2ViQ29yZS9XZWJDb3Jl
LmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtNDE3LDYgKzQxNyw3IEBAIF9fWk43V2ViQ29yZTE5
YXBwbGljYXRpb25Jc1NhZmFyaUV2CiBfX1pON1dlYkNvcmUyMFJlbmRlckVtYmVkZGVkT2JqZWN0
MzBzZXRTaG93c0NyYXNoZWRQbHVnaW5JbmRpY2F0b3JFdgogX19aTjdXZWJDb3JlMjBSZXNvdXJj
ZVJlc3BvbnNlQmFzZTI0c2V0RXhwZWN0ZWRDb250ZW50TGVuZ3RoRXgKIF9fWk43V2ViQ29yZTIw
UmVzb3VyY2VSZXNwb25zZUJhc2VDMkV2CitfX1pON1dlYkNvcmUyMW1hcmtlclRleHRGb3JMaXN0
SXRlbUVQTlNfN0VsZW1lbnRFCiBfX1pON1dlYkNvcmUyMVBsYXRmb3JtS2V5Ym9hcmRFdmVudDI0
ZGlzYW1iaWd1YXRlS2V5RG93bkV2ZW50RU5TMF80VHlwZUViCiBfX1pON1dlYkNvcmUyMVBsYXRm
b3JtS2V5Ym9hcmRFdmVudEMxRVA3TlNFdmVudAogX19aTjdXZWJDb3JlMjFTVkdEb2N1bWVudEV4
dGVuc2lvbnMyMXNhbXBsZUFuaW1hdGlvbkF0VGltZUVSS05TXzZTdHJpbmdFUE5TXzE0U1ZHU01J
TEVsZW1lbnRFZApAQCAtNzY3LDYgKzc2OCw3IEBAIF9fWk43V2ViQ29yZTlUaW1lckJhc2U0c3Rv
cEV2CiBfX1pON1dlYkNvcmU5VGltZXJCYXNlNXN0YXJ0RWRkCiBfX1pON1dlYkNvcmU5VGltZXJC
YXNlQzJFdgogX19aTjdXZWJDb3JlOVRpbWVyQmFzZUQyRXYKK19fWk43V2ViQ29yZTl0b0VsZW1l
bnRFTjNKU0M3SlNWYWx1ZUUKIF9fWk43V2ViQ29yZTlmb250Q2FjaGVFdgogX19aTjdXZWJDb3Jl
OW1ha2VSYW5nZUVSS05TXzE1VmlzaWJsZVBvc2l0aW9uRVMyXwogX19aTjdXZWJDb3JlOXBhZ2VD
YWNoZUV2CkluZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
bWFjL0NoYW5nZUxvZwkocmV2aXNpb24gNjMwOTApCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDEwLTA3LTEyICBEYW5pZWwgQmF0ZXMg
IDxkYmF0ZXNAcmltLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBJbXBsZW1lbnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om1hcmtlclRleHRGb3JM
aXN0SXRlbSgpCisgICAgICAgIGZvciBNYWMgYW5kIFdpbmRvd3MgRFJUCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MjA1NAorCisgICAgICAgIEltcGxl
bWVudHMgc3VwcG9ydCBmb3IgbWFya2VyVGV4dEZvckxpc3RJdGVtIGluIHRoZSBNYWMgcG9ydC4K
KworICAgICAgICAqIFdlYlZpZXcvV2ViVmlldy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBfbWFy
a2VyVGV4dEZvckxpc3RJdGVtOmZvckVsZW1lbnQ6XSk6IEFkZGVkLgorICAgICAgICAqIFdlYlZp
ZXcvV2ViVmlld1ByaXZhdGUuaDoKKwogMjAxMC0wNy0wOSAgTGVvbiBDbGFya2UgIDxsZW9uY2xh
cmtlQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KSW5kZXg6
IFdlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMv
V2ViVmlldy9XZWJWaWV3Lm1tCShyZXZpc2lvbiA2MzA5MCkKKysrIFdlYktpdC9tYWMvV2ViVmll
dy9XZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsNiArMTM3LDcgQEAKICNpbXBvcnQg
PFdlYkNvcmUvUGFnZUdyb3VwLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtTW91c2VFdmVu
dC5oPgogI2ltcG9ydCA8V2ViQ29yZS9Qcm9ncmVzc1RyYWNrZXIuaD4KKyNpbXBvcnQgPFdlYkNv
cmUvUmVuZGVyVHJlZUFzVGV4dC5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJXaWRnZXQuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvUmVzb3VyY2VIYW5kbGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvUnVu
dGltZUFwcGxpY2F0aW9uQ2hlY2tzLmg+CkBAIC01ODkwLDYgKzU4OTEsMTkgQEAgLSAoSlNWYWx1
ZVJlZilfY29tcHV0ZWRTdHlsZUluY2x1ZGluZ1ZpcwogICAgIHJldHVybiB0b1JlZihleGVjLCB0
b0pTKGV4ZWMsIGpzRWxlbWVudC0+Z2xvYmFsT2JqZWN0KCksIHN0eWxlLmdldCgpKSk7CiB9CiAK
Ky0gKE5TU3RyaW5nICopX21hcmtlclRleHRGb3JMaXN0SXRlbTooSlNDb250ZXh0UmVmKWNvbnRl
eHQgZm9yRWxlbWVudDooSlNWYWx1ZVJlZil2YWx1ZQoreworICAgIEpTTG9jayBsb2NrKFNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CisgICAgRXhlY1N0YXRlKiBleGVjU3RhdGUgPSB0b0pTKGNvbnRl
eHQpOworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiBAIiI7CisgICAgSlNWYWx1ZSBq
c1ZhbHVlID0gdG9KUyhleGVjU3RhdGUsIHZhbHVlKTsKKyAgICBFbGVtZW50KiBlbGVtZW50ID0g
dG9FbGVtZW50KGpzVmFsdWUpOworICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIEAi
IjsKKyAgICByZXR1cm4gbWFya2VyVGV4dEZvckxpc3RJdGVtKGVsZW1lbnQpOworfQorCiBAZW5k
CiAKICNpZmRlZiBCVUlMRElOR19PTl9MRU9QQVJECkluZGV4OiBXZWJLaXQvbWFjL1dlYlZpZXcv
V2ViVmlld1ByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmll
d1ByaXZhdGUuaAkocmV2aXNpb24gNjMwOTApCisrKyBXZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmll
d1ByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjIwLDYgKzYyMCw3IEBAIEBpbnRlcmZhY2Ug
V2ViVmlldyAoV2ViVmlld0dlb2xvY2F0aW9uKQogCiBAaW50ZXJmYWNlIFdlYlZpZXcgKFdlYlZp
ZXdQcml2YXRlU3R5bGVJbmZvKQogLSAoSlNWYWx1ZVJlZilfY29tcHV0ZWRTdHlsZUluY2x1ZGlu
Z1Zpc2l0ZWRJbmZvOihKU0NvbnRleHRSZWYpY29udGV4dCBmb3JFbGVtZW50OihKU1ZhbHVlUmVm
KXZhbHVlOworLSAoTlNTdHJpbmcgKilfbWFya2VyVGV4dEZvckxpc3RJdGVtOihKU0NvbnRleHRS
ZWYpY29udGV4dCBmb3JFbGVtZW50OihKU1ZhbHVlUmVmKXZhbHVlOwogQGVuZAogCiBAaW50ZXJm
YWNlIE5TT2JqZWN0IChXZWJGcmFtZUxvYWREZWxlZ2F0ZVByaXZhdGUpCkluZGV4OiBXZWJLaXQv
d2luL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL0NoYW5nZUxvZwkocmV2aXNp
b24gNjMwOTApCisrKyBXZWJLaXQvd2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE4IEBACisyMDEwLTA3LTEyICBEYW5pZWwgQmF0ZXMgIDxkYmF0ZXNAcmltLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6Om1hcmtlclRleHRGb3JMaXN0SXRlbSgpCisgICAgICAgIGZv
ciBNYWMgYW5kIFdpbmRvd3MgRFJUCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00MjA1NAorCisgICAgICAgIEltcGxlbWVudHMgc3VwcG9ydCBmb3IgbWFy
a2VyVGV4dEZvckxpc3RJdGVtIGluIHRoZSBBcHBsZSBXaW5kb3dzIHBvcnQuCisKKyAgICAgICAg
KiBJbnRlcmZhY2VzL0lXZWJWaWV3UHJpdmF0ZS5pZGw6IEFkZGVkIElETCBkZWZpbml0aW9uIGZv
ciBtYXJrZXJUZXh0Rm9yTGlzdEl0ZW0uCisgICAgICAgICogV2ViVmlldy5jcHA6CisgICAgICAg
IChXZWJWaWV3OjptYXJrZXJUZXh0Rm9yTGlzdEl0ZW0pOiBBZGRlZC4KKyAgICAgICAgKiBXZWJW
aWV3Lmg6CisKIDIwMTAtMDctMDggIEFhcm9uIEJvb2RtYW4gIDxhYUBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgpJbmRleDogV2ViS2l0L3dpbi9X
ZWJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYlZpZXcuY3BwCShyZXZpc2lv
biA2MzA5MCkKKysrIFdlYktpdC93aW4vV2ViVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1
LDYgKzk1LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0hpdFRlc3RSZXF1ZXN0Lmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9IaXRUZXN0UmVzdWx0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9KU0VsZW1lbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0tleWJv
YXJkRXZlbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0xhbmd1YWdlLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9Mb2dnaW5nLmg+CkBAIC0xMTIsNiArMTEzLDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1By
b2dyZXNzVHJhY2tlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyTGF5ZXIuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1JlbmRlclRoZW1lLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJUcmVl
QXNUZXh0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJWaWV3Lmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9SZW5kZXJXaWRnZXQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlLmg+
CkBAIC01NjY3LDYgKzU2NjksMzMgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJWaWV3
OjpyZXBvcgogICAgIHJldHVybiBTX09LOwogfQogCitIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IFdlYlZpZXc6Om1hcmtlclRleHRGb3JMaXN0SXRlbSgKKyAgICAvKiBbaW5dICovIEpTQ29udGV4
dFJlZiBjb250ZXh0LAorICAgIC8qIFtpbl0gKi8gSlNWYWx1ZVJlZiBub2RlT2JqZWN0LAorICAg
IC8qIFtvdXQsIHJldHZhbF0gKi8gQlNUUiogbWFya2VyVGV4dCkKK3sKKyAgICBpZiAoIW1hcmtl
clRleHQpCisgICAgICAgIHJldHVybiBFX1BPSU5URVI7CisKKyAgICAqbWFya2VyVGV4dCA9IDA7
CisKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBFX0ZBSUw7CisKKyAgICBKU0xv
Y2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgSlNDOjpFeGVjU3RhdGUq
IGV4ZWNTdGF0ZSA9IHRvSlMoY29udGV4dCk7CisgICAgaWYgKCFub2RlT2JqZWN0KQorICAgICAg
ICByZXR1cm4gRV9GQUlMOworICAgIEpTQzo6SlNWYWx1ZSBqc1ZhbHVlID0gdG9KUyhleGVjU3Rh
dGUsIG5vZGVPYmplY3QpOworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1lbnQoanNWYWx1
ZSk7CisgICAgaWYgKCFlbGVtZW50KQorICAgICAgICByZXR1cm4gRV9GQUlMOworCisgICAgKm1h
cmtlclRleHQgPSBCU3RyaW5nKFdlYkNvcmU6Om1hcmtlclRleHRGb3JMaXN0SXRlbShlbGVtZW50
KSkucmVsZWFzZSgpOworICAgIHJldHVybiBTX09LOworfQorCisKIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgV2ViVmlldzo6c2V0Q3VzdG9tSFRNTFRva2VuaXplclRpbWVEZWxheSgKICAgICAv
KiBbaW5dICovIGRvdWJsZSB0aW1lRGVsYXkpCiB7CkluZGV4OiBXZWJLaXQvd2luL1dlYlZpZXcu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvd2luL1dlYlZpZXcuaAkocmV2aXNpb24gNjMwOTApCisr
KyBXZWJLaXQvd2luL1dlYlZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtNzA2LDYgKzcwNiwxMSBA
QCBwdWJsaWM6CiAgICAgICAgIC8qIFtpbl0gKi8gSlNDb250ZXh0UmVmIGNvbnRleHQsCiAgICAg
ICAgIC8qIFtpbl0gKi8gSlNWYWx1ZVJlZiBleGNlcHRpb24pOwogCisgICAgdmlydHVhbCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIG1hcmtlclRleHRGb3JMaXN0SXRlbSgKKyAgICAgICAgLyog
W2luXSAqLyBKU0NvbnRleHRSZWYgY29udGV4dCwKKyAgICAgICAgLyogW2luXSAqLyBKU1ZhbHVl
UmVmIG5vZGVPYmplY3QsCisgICAgICAgIC8qIFtvdXQsIHJldHZhbF0gKi8gQlNUUiogbWFya2Vy
VGV4dCk7CisKICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgc2V0Q3VzdG9t
SFRNTFRva2VuaXplclRpbWVEZWxheSgKICAgICAgICAgLyogW2luXSAqLyBkb3VibGUgdGltZURl
bGF5KTsKIApJbmRleDogV2ViS2l0L3dpbi9JbnRlcmZhY2VzL0lXZWJWaWV3UHJpdmF0ZS5pZGwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9JbnRlcmZhY2VzL0lXZWJWaWV3UHJpdmF0ZS5pZGwJ
KHJldmlzaW9uIDYzMDkwKQorKysgV2ViS2l0L3dpbi9JbnRlcmZhY2VzL0lXZWJWaWV3UHJpdmF0
ZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTIzNyw0ICsyMzcsNiBAQCBpbnRlcmZhY2UgSVdlYlZp
ZXdQcml2YXRlIDogSVVua25vd24KICAgICBIUkVTVUxUIHBhaW50U2Nyb2xsVmlld1JlY3RUb0Nv
bnRleHRBdFBvaW50KFtpbl0gUkVDVCByZWN0LCBbaW5dIFBPSU5UIHB0LCBbaW5dIE9MRV9IQU5E
TEUgZGMpOwogCiAgICAgW2xvY2FsXSBIUkVTVUxUIHJlcG9ydEV4Y2VwdGlvbihbaW5dIEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBbaW5dIEpTVmFsdWVSZWYgZXhjZXB0aW9uKTsKKworICAgIFtsb2Nh
bF0gSFJFU1VMVCBtYXJrZXJUZXh0Rm9yTGlzdEl0ZW0oW2luXSBKU0NvbnRleHRSZWYgY29udGV4
dCwgW2luXSBKU1ZhbHVlUmVmIG5vZGVPYmplY3QsIFtvdXQsIHJldHZhbF0gQlNUUiogbWFya2Vy
VGV4dCk7CiB9CkluZGV4OiBXZWJLaXRUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0VG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2MzA5MCkKKysrIFdlYktpdFRvb2xzL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDEwLTA3LTEyICBEYW5pZWwg
QmF0ZXMgIDxkYmF0ZXNAcmltLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6Om1hcmtlclRl
eHRGb3JMaXN0SXRlbSgpCisgICAgICAgIGZvciBNYWMgYW5kIFdpbmRvd3MgRFJUCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MjA1NAorCisgICAgICAg
IEltcGxlbWVudHMgRFJUIHN1cHBvcnQgZm9yIG1hcmtlclRleHRGb3JMaXN0SXRlbSBpbiBib3Ro
IHRoZSBNYWMKKyAgICAgICAgYW5kIEFwcGxlIFdpbmRvd3MgcG9ydHMuCisKKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW06CisgICAgICAgIChM
YXlvdXRUZXN0Q29udHJvbGxlcjo6bWFya2VyVGV4dEZvckxpc3RJdGVtKTogSW1wbGVtZW50ZWQu
CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNw
cDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjptYXJrZXJUZXh0Rm9yTGlzdEl0ZW0p
OiBEaXR0by4KKwogMjAxMC0wNy0xMiAgQW5kcmVhcyBLbGluZyAgPGFuZHJlYXMua2xpbmdAbm9r
aWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFRvciBBcm5lIFZlc3Riw7guCkluZGV4OiBX
ZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRlc3RD
b250cm9sbGVyTWFjLm1tCShyZXZpc2lvbiA2MzA5MCkKKysrIFdlYktpdFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAt
MTk1LDkgKzE5NSw5IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29udHIK
IH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9sbGVyOjptYXJr
ZXJUZXh0Rm9yTGlzdEl0ZW0oSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgbm9kZU9i
amVjdCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IG1lLgotICAgIHJldHVybiBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4oKTsKK3sgICAgCisgICAgSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IG1hcmtlclRleHQoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKChDRlN0
cmluZ1JlZilbW21haW5GcmFtZSB3ZWJWaWV3XSBfbWFya2VyVGV4dEZvckxpc3RJdGVtOmNvbnRl
eHQgZm9yRWxlbWVudDpub2RlT2JqZWN0XSkpOworICAgIHJldHVybiBtYXJrZXJUZXh0OwogfQog
CiBpbnQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhZ2VOdW1iZXJGb3JFbGVtZW50QnlJZChKU1N0
cmluZ1JlZiBpZCwgZmxvYXQgcGFnZVdpZHRoSW5QaXhlbHMsIGZsb2F0IHBhZ2VIZWlnaHRJblBp
eGVscykKSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29u
dHJvbGxlcldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUv
d2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcAkocmV2aXNpb24gNjMwOTApCisrKyBXZWJL
aXRUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xOTYsOCArMTk2LDIyIEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBMYXlvdXRUZXN0Q29udHIKIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RD
b250cm9sbGVyOjptYXJrZXJUZXh0Rm9yTGlzdEl0ZW0oSlNDb250ZXh0UmVmIGNvbnRleHQsIEpT
VmFsdWVSZWYgbm9kZU9iamVjdCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IG1l
LgotICAgIHJldHVybiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4oKTsKKyAgICBDT01QdHI8SVdl
YlZpZXc+IHdlYlZpZXc7CisgICAgaWYgKEZBSUxFRChmcmFtZS0+d2ViVmlldygmd2ViVmlldykp
KQorICAgICAgICByZXR1cm4gSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+KCk7CisKKyAgICBDT01Q
dHI8SVdlYlZpZXdQcml2YXRlPiB2aWV3UHJpdmF0ZTsKKyAgICBpZiAoRkFJTEVEKHdlYlZpZXct
PlF1ZXJ5SW50ZXJmYWNlKCZ2aWV3UHJpdmF0ZSkpKQorICAgICAgICByZXR1cm4gSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+KCk7CisKKyAgICBCU1RSIHRleHRCU1RSID0gMDsKKyAgICBpZiAoRkFJ
TEVEKHZpZXdQcml2YXRlLT5tYXJrZXJUZXh0Rm9yTGlzdEl0ZW0oY29udGV4dCwgbm9kZU9iamVj
dCwgJnRleHRCU1RSKSkpCisgICAgICAgIHJldHVybiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4o
KTsKKworICAgIHdzdHJpbmcgdGV4dCh0ZXh0QlNUUiwgU3lzU3RyaW5nTGVuKHRleHRCU1RSKSk7
CisgICAgU3lzRnJlZVN0cmluZyh0ZXh0QlNUUik7CisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IG1hcmtlclRleHQoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnModGV4dC5k
YXRhKCksIHRleHQubGVuZ3RoKCkpKTsKKyAgICByZXR1cm4gbWFya2VyVGV4dDsKIH0KIAogdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6d2FpdEZvclBvbGljeURlbGVnYXRlKCkKSW5kZXg6IExh
eW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDYzMDkwKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAtMDctMTIgIERhbmllbCBCYXRlcyAgPGRiYXRlc0ByaW0u
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElt
cGxlbWVudCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6bWFya2VyVGV4dEZvckxpc3RJdGVtKCkKKyAg
ICAgICAgZm9yIE1hYyBhbmQgV2luZG93cyBEUlQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQyMDU0CisKKyAgICAgICAgUmVtb3ZlIHNraXBwZWQgbGF5
b3V0IHRlc3RzIG5vdyB0aGF0IHdlIGhhdmUgRFJUIHN1cHBvcnQKKyAgICAgICAgdG8gcnVuIHRo
ZW0uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU2tpcHBlZDoKKyAgICAgICAgKiBwbGF0Zm9y
bS93aW4vU2tpcHBlZDoKKwogMjAxMC0wNy0xMiAgQW5kcmVhcyBLbGluZyAgPGFuZHJlYXMua2xp
bmdAbm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhhdXNtYW5uLgpJbmRl
eDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBwZWQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBwZWQJKHJldmlzaW9uIDYzMDkwKQorKysgTGF5b3V0VGVz
dHMvcGxhdGZvcm0vbWFjL1NraXBwZWQJKHdvcmtpbmcgY29weSkKQEAgLTE1NiwxNCArMTU2LDYg
QEAgZmFzdC9vdmVyZmxvdy9zY3JvbGxiYXItcmVzdG9yZWQtYW5kLXRoZQogZWRpdGluZy9wYXN0
ZWJvYXJkL29ucGFzdGUtdGV4dC1odG1sLmh0bWwKIGZhc3QvZXZlbnRzL29uZHJvcC10ZXh0LWh0
bWwuaHRtbAogCi0jIE1pc3NpbmcgYW4gaW1wbGVtZW50YXRpb24gb2YgTGF5b3V0VGVzdENvbnRy
b2xsZXI6Om1hcmtlclRleHRGb3JMaXN0SXRlbSgpCi1mYXN0L2xpc3RzL29sLW5lc3RlZC1pdGVt
cy1keW5hbWljLWluc2VydC5odG1sCi1mYXN0L2xpc3RzL29sLW5lc3RlZC1pdGVtcy1keW5hbWlj
LXJlbW92ZS5odG1sCi1mYXN0L2xpc3RzL29sLW5lc3RlZC1pdGVtcy5odG1sCi1mYXN0L2xpc3Rz
L29sLW5lc3RlZC1saXN0LWR5bmFtaWMtaW5zZXJ0Lmh0bWwKLWZhc3QvbGlzdHMvb2wtbmVzdGVk
LWxpc3QtZHluYW1pYy1yZW1vdmUuaHRtbAotZmFzdC9saXN0cy9vbC1uZXN0ZWQtbGlzdC5odG1s
Ci0KICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMzODEyCiBmYXN0
L2RvbS9pY29uLXVybC1wcm9wZXJ0eS5odG1sCiAKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3Jt
L3dpbi9Ta2lwcGVkCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lw
cGVkCShyZXZpc2lvbiA2MzA5MCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL3dpbi9Ta2lwcGVk
CSh3b3JraW5nIGNvcHkpCkBAIC04NjMsMTQgKzg2Myw2IEBAIGZhc3QvZXZlbnRzL29uZHJvcC10
ZXh0LWh0bWwuaHRtbAogIyA8aHR0cDovL3dlYmtpdC5vcmcvYi8zNzA5Nj4gaHR0cC90ZXN0cy9z
ZWN1cml0eS94c3MtREVOSUVELWlmcmFtZS1zcmMtYWxpYXMuaHRtbCBzb21ldGltZXMgdGltZXMg
b3V0IG9uIFdpbmRvd3MKIGh0dHAvdGVzdHMvc2VjdXJpdHkveHNzLURFTklFRC1pZnJhbWUtc3Jj
LWFsaWFzLmh0bWwKIAotIyBNaXNzaW5nIGFuIGltcGxlbWVudGF0aW9uIG9mIExheW91dFRlc3RD
b250cm9sbGVyOjptYXJrZXJUZXh0Rm9yTGlzdEl0ZW0oKQotZmFzdC9saXN0cy9vbC1uZXN0ZWQt
aXRlbXMtZHluYW1pYy1pbnNlcnQuaHRtbAotZmFzdC9saXN0cy9vbC1uZXN0ZWQtaXRlbXMtZHlu
YW1pYy1yZW1vdmUuaHRtbAotZmFzdC9saXN0cy9vbC1uZXN0ZWQtaXRlbXMuaHRtbAotZmFzdC9s
aXN0cy9vbC1uZXN0ZWQtbGlzdC1keW5hbWljLWluc2VydC5odG1sCi1mYXN0L2xpc3RzL29sLW5l
c3RlZC1saXN0LWR5bmFtaWMtcmVtb3ZlLmh0bWwKLWZhc3QvbGlzdHMvb2wtbmVzdGVkLWxpc3Qu
aHRtbAotCiAjIERvZXNuJ3Qgc3VwcG9ydCBXT0ZGIHlldC4KIGZhc3QvY3NzL2ZvbnQtZmFjZS13
b2ZmLmh0bWwKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>