<?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>74987</bug_id>
          
          <creation_ts>2011-12-20 18:41:29 -0800</creation_ts>
          <short_desc>Make calls to willModifyAttribute and attributeChanged symmetrical</short_desc>
          <delta_ts>2011-12-21 14:34:57 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Klein">adamk</reporter>
          <assigned_to name="Adam Klein">adamk</assigned_to>
          <cc>darin</cc>
    
    <cc>rniwa</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>525041</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-12-20 18:41:29 -0800</bug_when>
    <thetext>Make calls to willModifyAttribute and attributeChanged symmetrical</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525042</commentid>
    <comment_count>1</comment_count>
      <attachid>120133</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-12-20 18:47:10 -0800</bug_when>
    <thetext>Created attachment 120133
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525167</commentid>
    <comment_count>2</comment_count>
      <attachid>120133</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-21 00:31:01 -0800</bug_when>
    <thetext>Comment on attachment 120133
Patch

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

&gt; Source/WebCore/dom/Element.cpp:199
&gt; +inline void Element::removeAttributeInternal(size_t index)

We should move this function over to NamedNodeMap so that all calls to willModifyAttribute, etc... will be done inside one class.

&gt; Source/WebCore/dom/Element.cpp:218
&gt; +        AtomicString savedValue = attribute-&gt;value();
&gt; +        attribute-&gt;setValue(nullAtom);
&gt; +        attributeChanged(attribute.get());
&gt; +        attribute-&gt;setValue(savedValue);

Why do we need to do this?

&gt; Source/WebCore/dom/Element.cpp:684
&gt; +        Attribute* attributePtr = attribute.get();
&gt; +        m_attributeMap-&gt;addAttribute(attribute.release());
&gt; +        attributeChanged(attributePtr);

!? Why are you obtaining a raw pointer here? That&apos;s not safe is it? We should use attribute in both function calls.

&gt; Source/WebCore/dom/Element.cpp:1497
&gt;      String localName = shouldIgnoreAttributeCase(this) ? name.lower() : name;

We should just call getAttributeItemIndex with shouldIgnoreAttributeCase=true here and improve the implementation of getAttributeItemIndex to avoid doing useless for-loop when shouldIgnoreAttributeCase=true.

&gt; Source/WebCore/dom/NamedNodeMap.cpp:171
&gt; +    if (!attribute-&gt;isNull()) {
&gt; +        AtomicString savedValue = attribute-&gt;value();
&gt; +        attribute-&gt;setValue(nullAtom);
&gt; +        m_element-&gt;attributeChanged(attribute.get());
&gt; +        attribute-&gt;setValue(savedValue);
&gt; +    }
&gt; +
&gt; +    if (attribute-&gt;name() != styleAttr)
&gt; +        m_element-&gt;dispatchSubtreeModifiedEvent();

This code is repeated over and over. Can we add a helper function in Attribute or NamedNodeMap so that we don&apos;t have to repeat these over and over?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525281</commentid>
    <comment_count>3</comment_count>
      <attachid>120133</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-12-21 09:12:05 -0800</bug_when>
    <thetext>Comment on attachment 120133
Patch

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

&gt;&gt; Source/WebCore/dom/Element.cpp:199
&gt;&gt; +inline void Element::removeAttributeInternal(size_t index)
&gt; 
&gt; We should move this function over to NamedNodeMap so that all calls to willModifyAttribute, etc... will be done inside one class.

I was planning to do that next, would you like that in this change?

&gt;&gt; Source/WebCore/dom/Element.cpp:218
&gt;&gt; +        attribute-&gt;setValue(savedValue);
&gt; 
&gt; Why do we need to do this?

attributeChanged() expects to be called with the new value of the Attribute.  Since we just removed it, the new value is nullAtom.  We can avoid an allocation by mutating the just-removed Attribute instead of cloning it.  If you&apos;re asking why we set it back to the previous value, I suspect it&apos;s due to the refcounting: we can&apos;t be sure someone isn&apos;t holding a reference (though that would be a very strange thing to do).

&gt;&gt; Source/WebCore/dom/Element.cpp:684
&gt;&gt; +        attributeChanged(attributePtr);
&gt; 
&gt; !? Why are you obtaining a raw pointer here? That&apos;s not safe is it? We should use attribute in both function calls.

I&apos;m minimizing the refcount churn at the expense of slightly uglier code: the reference is passed to m_attributeMap, leaving attributePtr still valid.  I can simplify this by not calling release() when passing to addAttribute at the cost of refcount churn, but I&apos;d rather not take that hit if I don&apos;t have to (since half the point of this series of changes is to minimize the cost of these otherwise very simple methods).

&gt;&gt; Source/WebCore/dom/Element.cpp:1497
&gt;&gt;      String localName = shouldIgnoreAttributeCase(this) ? name.lower() : name;
&gt; 
&gt; We should just call getAttributeItemIndex with shouldIgnoreAttributeCase=true here and improve the implementation of getAttributeItemIndex to avoid doing useless for-loop when shouldIgnoreAttributeCase=true.

Which &quot;useless&quot; for loop did you have in mind? I believe the idea here is to optimize for an HTML document where all attributes are always referred to by lowercase names.  I&apos;d agree that the Element &lt;-&gt; NamedNodeMap interface could still use some work in this regard, but optimizing for this case makes sense to me, so I&apos;m not sure what could you wanted to get rid of (rather than just reorganizing, say, by putting the .lower() call inside getAttributeItemIndex()).

&gt;&gt; Source/WebCore/dom/NamedNodeMap.cpp:171
&gt;&gt; +        m_element-&gt;dispatchSubtreeModifiedEvent();
&gt; 
&gt; This code is repeated over and over. Can we add a helper function in Attribute or NamedNodeMap so that we don&apos;t have to repeat these over and over?

Which do you mean? dispatchSubtreeModifiedEvent is called twice here and twice in Element; that duplication should be eliminated once we move setAttributeInternal/removeAttributeInternal into NamedNodeMap (see question above about whether you want to see that in this patch).  Once we&apos;re down to two calls it&apos;s not clear to me it&apos;s worth a helper function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525287</commentid>
    <comment_count>4</comment_count>
      <attachid>120133</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-12-21 09:27:53 -0800</bug_when>
    <thetext>Comment on attachment 120133
Patch

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

&gt;&gt;&gt; Source/WebCore/dom/Element.cpp:1497
&gt;&gt;&gt;      String localName = shouldIgnoreAttributeCase(this) ? name.lower() : name;
&gt;&gt; 
&gt;&gt; We should just call getAttributeItemIndex with shouldIgnoreAttributeCase=true here and improve the implementation of getAttributeItemIndex to avoid doing useless for-loop when shouldIgnoreAttributeCase=true.
&gt; 
&gt; Which &quot;useless&quot; for loop did you have in mind? I believe the idea here is to optimize for an HTML document where all attributes are always referred to by lowercase names.  I&apos;d agree that the Element &lt;-&gt; NamedNodeMap interface could still use some work in this regard, but optimizing for this case makes sense to me, so I&apos;m not sure what could you wanted to get rid of (rather than just reorganizing, say, by putting the .lower() call inside getAttributeItemIndex()).

Ah, you&apos;re right. I think we should just get rid of the call to lower() here. If using lower() is faster, then we should modify getAttributeItemIndex to always lower first. If not, then we&apos;re slowing things down.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525418</commentid>
    <comment_count>5</comment_count>
      <attachid>120133</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-12-21 11:57:07 -0800</bug_when>
    <thetext>Comment on attachment 120133
Patch

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

&gt;&gt;&gt; Source/WebCore/dom/Element.cpp:199
&gt;&gt;&gt; +inline void Element::removeAttributeInternal(size_t index)
&gt;&gt; 
&gt;&gt; We should move this function over to NamedNodeMap so that all calls to willModifyAttribute, etc... will be done inside one class.
&gt; 
&gt; I was planning to do that next, would you like that in this change?

Per discussion, will do a followup to move this code into NamedNodeMap.

&gt;&gt;&gt; Source/WebCore/dom/Element.cpp:218

&gt;&gt; 
&gt;&gt; Why do we need to do this?
&gt; 
&gt; attributeChanged() expects to be called with the new value of the Attribute.  Since we just removed it, the new value is nullAtom.  We can avoid an allocation by mutating the just-removed Attribute instead of cloning it.  If you&apos;re asking why we set it back to the previous value, I suspect it&apos;s due to the refcounting: we can&apos;t be sure someone isn&apos;t holding a reference (though that would be a very strange thing to do).

I&apos;ll look into removing this resetting behavior later, but for now I want to avoid changing behavior if at all possible.

&gt;&gt;&gt; Source/WebCore/dom/Element.cpp:684
&gt;&gt;&gt; +        attributeChanged(attributePtr);
&gt;&gt; 
&gt;&gt; !? Why are you obtaining a raw pointer here? That&apos;s not safe is it? We should use attribute in both function calls.
&gt; 
&gt; I&apos;m minimizing the refcount churn at the expense of slightly uglier code: the reference is passed to m_attributeMap, leaving attributePtr still valid.  I can simplify this by not calling release() when passing to addAttribute at the cost of refcount churn, but I&apos;d rather not take that hit if I don&apos;t have to (since half the point of this series of changes is to minimize the cost of these otherwise very simple methods).

Removed the refcounting tricks.

&gt;&gt;&gt;&gt; Source/WebCore/dom/Element.cpp:1497
&gt;&gt;&gt;&gt;      String localName = shouldIgnoreAttributeCase(this) ? name.lower() : name;
&gt;&gt;&gt; 
&gt;&gt;&gt; We should just call getAttributeItemIndex with shouldIgnoreAttributeCase=true here and improve the implementation of getAttributeItemIndex to avoid doing useless for-loop when shouldIgnoreAttributeCase=true.
&gt;&gt; 
&gt;&gt; Which &quot;useless&quot; for loop did you have in mind? I believe the idea here is to optimize for an HTML document where all attributes are always referred to by lowercase names.  I&apos;d agree that the Element &lt;-&gt; NamedNodeMap interface could still use some work in this regard, but optimizing for this case makes sense to me, so I&apos;m not sure what could you wanted to get rid of (rather than just reorganizing, say, by putting the .lower() call inside getAttributeItemIndex()).
&gt; 
&gt; Ah, you&apos;re right. I think we should just get rid of the call to lower() here. If using lower() is faster, then we should modify getAttributeItemIndex to always lower first. If not, then we&apos;re slowing things down.

Sadly, the lower() call can&apos;t move into getAttributeItem, since in setAttribute may create a new QualifiedName and we depend on the fact that all QualifiedNames we create in an HTMLDocument have lowercased localNames.  So we could move it in, but then we&apos;d be double-lowering in some cases.

&gt;&gt;&gt; Source/WebCore/dom/NamedNodeMap.cpp:171
&gt;&gt;&gt; +        m_element-&gt;dispatchSubtreeModifiedEvent();
&gt;&gt; 
&gt;&gt; This code is repeated over and over. Can we add a helper function in Attribute or NamedNodeMap so that we don&apos;t have to repeat these over and over?
&gt; 
&gt; Which do you mean? dispatchSubtreeModifiedEvent is called twice here and twice in Element; that duplication should be eliminated once we move setAttributeInternal/removeAttributeInternal into NamedNodeMap (see question above about whether you want to see that in this patch).  Once we&apos;re down to two calls it&apos;s not clear to me it&apos;s worth a helper function.

Will factor this out appropriately in the next patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525419</commentid>
    <comment_count>6</comment_count>
      <attachid>120206</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-12-21 11:58:24 -0800</bug_when>
    <thetext>Created attachment 120206
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>525618</commentid>
    <comment_count>7</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-12-21 14:34:42 -0800</bug_when>
    <thetext>Committed r103452: &lt;http://trac.webkit.org/changeset/103452&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120133</attachid>
            <date>2011-12-20 18:47:10 -0800</date>
            <delta_ts>2011-12-21 11:58:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74987-20111220184709.patch</filename>
            <type>text/plain</type>
            <size>13832</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzMzczCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODFmNGVmYTMzYjMwMDZm
MGVhZjYyNzU5MTU0OGU2MTkwMjZiODAyZC4uOGFlZTk3ODk5ZTBmY2EyYmJhNjQyYjZkZTFlYTU5
MjhlOWRmM2MxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQ1IEBACiAyMDExLTEyLTIwICBBZGFt
IEtsZWluICA8YWRhbWtAY2hyb21pdW0ub3JnPgogCisgICAgICAgIE1ha2UgY2FsbHMgdG8gd2ls
bE1vZGlmeUF0dHJpYnV0ZSBhbmQgYXR0cmlidXRlQ2hhbmdlZCBzeW1tZXRyaWNhbAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ5ODcKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQcmV2aW91c2x5LCBjYWxs
cyB0byBFbGVtZW50Ojp3aWxsTW9kaWZ5QXR0cmlidXRlIHNvbWV0aW1lcyBoYXBwZW5lZAorICAg
ICAgICBpbiBvbmUgbWV0aG9kIHdoaWxlIGNhbGxzIHRvIEVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5n
ZWQgaGFwcGVuZWQgaW4KKyAgICAgICAgYW5vdGhlci4gVGhpcyBjaGFuZ2UgbWFrZXMgdGhlbSBz
eW1tZXRyaWNhbCBmb3IgYWxsIHRoZSBjYXNlcyBJIGtub3cKKyAgICAgICAgYWJvdXQ6IHNldEF0
dHJpYnV0ZSwgcmVtb3ZlQXR0cmlidXRlLCBzZXROYW1lZEl0ZW0sIHJlbW92ZU5hbWVkSXRlbS4K
KworICAgICAgICBUbyBhY2NvbXBsaXNoIHRoaXMsIE5hbWVkTm9kZU1hcDo6YWRkQXR0cmlidXRl
LCByZW1vdmVBdHRyaWJ1dGUsIGFuZAorICAgICAgICByZXBsYWNlQXR0cmlidXRlIGhhdmUgYmVl
biByZWR1Y2VkIHRvIHRoZWlyIHB1cmUgZnVuY3Rpb25hbGl0eSBvZgorICAgICAgICBtYW5pcHVs
YXRpbmcgbV9hdHRyaWJ1dGVzLCBhbmQgdGhlaXIgY2FsbGVycyBhcmUgbGVmdCByZXNwb25zaWJs
ZSBmb3IKKyAgICAgICAgcHJvcGVybHkgbm90aWZ5aW5nIHRoZSBFbGVtZW50IG9mIHRoZSB1bmRl
cmx5aW5nIGNoYW5nZXMuCisKKyAgICAgICAgT25lIG90aGVyIGJpdCBvZiByZWZhY3RvcmluZyB3
YXMgZG9uZTogdG8gc2ltcGxpZnkKKyAgICAgICAgRWxlbWVudDo6c2V0QXR0cmlidXRlLCBpdCBu
b3cgZGlzcGF0Y2hlcyB0bworICAgICAgICBFbGVtZW50OjpyZW1vdmVBdHRyaWJ1dGVJbnRlcm5h
bCBpZiB0aGUgaW5jb21pbmcgdmFsdWUgaXMgbnVsbC4KKworICAgICAgICBObyBuZXcgdGVzdHMs
IG5vIGNoYW5nZSBpbiBiZWhhdmlvci4KKworICAgICAgICAqIGRvbS9BdHRyaWJ1dGUuaDoKKyAg
ICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpyZW1v
dmVBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6cmVtb3ZlQXR0cmlidXRl
SW50ZXJuYWwpOiBBZGRlZCwgc2hhcmluZyBjb2RlCisgICAgICAgIGJldHdlZW4gdGhlIHR3byBy
ZW1vdmVBdHRyaWJ1dGUgb3ZlcmxvYWRzLgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6c2V0
QXR0cmlidXRlSW50ZXJuYWwpOgorICAgICAgICAqIGRvbS9FbGVtZW50Lmg6CisgICAgICAgICog
ZG9tL05hbWVkTm9kZU1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOYW1lZE5vZGVNYXA6OnNl
dE5hbWVkSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpOYW1lZE5vZGVNYXA6OnJlbW92ZU5hbWVk
SXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpOYW1lZE5vZGVNYXA6OmFkZEF0dHJpYnV0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpOYW1lZE5vZGVNYXA6OnJlbW92ZUF0dHJpYnV0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpOYW1lZE5vZGVNYXA6OnJlcGxhY2VBdHRyaWJ1dGUpOgorICAgICAgICAqIHN2
Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHlTeW5jaHJvbml6ZXIuaDoKKyAgICAgICAg
Q2FsbCBFbGVtZW50OjpzZXRBdHRyaWJ1dGUgdW5sZXNzIHRoZSBhdHRyaWJ1dGUgaXMgYWxyZWFk
eSBwcmVzZW50LAorICAgICAgICBhbmQgYWRkIGEgY29tbWVudCBleHBsYWluaW5nIHdoeSB0aGUg
Y29kZSBsb29rcyB0aGUgd2F5IGl0IGRvZXMuCisKKzIwMTEtMTItMjAgIEFkYW0gS2xlaW4gIDxh
ZGFta0BjaHJvbWl1bS5vcmc+CisKICAgICAgICAgQXZvaWQgdW5uZWNlc3Nhcnkgd29yayB3aGVu
IHJlbW92aW5nIGF0dHJpYnV0ZXMgZnJvbSBhbiBlbGVtZW50CiAgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDk1MwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vQXR0cmlidXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQXR0cmlidXRlLmgK
aW5kZXggY2Y4NGE2ZmRkNjU2NmU4ZTRhYzI4ZGE0NzVmMDk2N2M1YmFlZWRlZS4uNDUyMjZmOGU3
MDU4OTE5NGE0NGVlZDJmY2E2YzU2MjViOTE1YWQzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL0F0dHJpYnV0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9BdHRyaWJ1dGUuaApA
QCAtNDAsNyArNDAsNiBAQCBjbGFzcyBOYW1lZE5vZGVNYXA7CiAvLyBUaGUgYWN0dWFsIEF0dHIg
d2l0aCBpdHMgdmFsdWUgYXMgYSBUZXh0IGNoaWxkIGlzIGFsbG9jYXRlZCBvbmx5IGlmIG5lZWRl
ZC4KIGNsYXNzIEF0dHJpYnV0ZSA6IHB1YmxpYyBSZWZDb3VudGVkPEF0dHJpYnV0ZT4gewogICAg
IGZyaWVuZCBjbGFzcyBBdHRyOwotICAgIGZyaWVuZCBjbGFzcyBOYW1lZE5vZGVNYXA7CiBwdWJs
aWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8QXR0cmlidXRlPiBjcmVhdGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKICAgICB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RWxlbWVudC5jcHAKaW5kZXggMGZkYjU3N2MzYzM0NDRhNTFmZDUwMjA5NzdmMzY4ZmVkYjgxNDkw
Ny4uMTQ2N2Y3MzFiODhlMTY5MjI1ODk3Y2Q4MDEzMjdlOWIzZjdmNmYzMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmNwcApAQCAtMTkzLDEzICsxOTMsMzUgQEAgdm9pZCBFbGVtZW50OjpyZW1vdmVBdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkKICAgICBpZiAoIW1fYXR0cmlidXRlTWFw
KQogICAgICAgICByZXR1cm47CiAKLSAgICBzaXplX3QgaW5kZXggPSBtX2F0dHJpYnV0ZU1hcC0+
Z2V0QXR0cmlidXRlSXRlbUluZGV4KG5hbWUpOworICAgIHJlbW92ZUF0dHJpYnV0ZUludGVybmFs
KG1fYXR0cmlidXRlTWFwLT5nZXRBdHRyaWJ1dGVJdGVtSW5kZXgobmFtZSkpOworfQorCitpbmxp
bmUgdm9pZCBFbGVtZW50OjpyZW1vdmVBdHRyaWJ1dGVJbnRlcm5hbChzaXplX3QgaW5kZXgpCit7
CisgICAgQVNTRVJUKG1fYXR0cmlidXRlTWFwKTsKICAgICBpZiAoaW5kZXggPT0gbm90Rm91bmQp
CiAgICAgICAgIHJldHVybjsKIAotICAgIHdpbGxNb2RpZnlBdHRyaWJ1dGUobmFtZSwgbV9hdHRy
aWJ1dGVNYXAtPmF0dHJpYnV0ZUl0ZW0oaW5kZXgpLT52YWx1ZSgpLCBudWxsQXRvbSk7CisgICAg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsTW9kaWZ5RE9NQXR0cihkb2N1bWVudCgpLCB0
aGlzKTsKKworICAgIFJlZlB0cjxBdHRyaWJ1dGU+IGF0dHJpYnV0ZSA9IG1fYXR0cmlidXRlTWFw
LT5hdHRyaWJ1dGVJdGVtKGluZGV4KTsKKworICAgIGlmICghYXR0cmlidXRlLT5pc051bGwoKSkK
KyAgICAgICAgd2lsbE1vZGlmeUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUoKSwgYXR0cmlidXRl
LT52YWx1ZSgpLCBudWxsQXRvbSk7CiAKICAgICBtX2F0dHJpYnV0ZU1hcC0+cmVtb3ZlQXR0cmli
dXRlKGluZGV4KTsKKworICAgIGlmICghYXR0cmlidXRlLT5pc051bGwoKSkgeworICAgICAgICBB
dG9taWNTdHJpbmcgc2F2ZWRWYWx1ZSA9IGF0dHJpYnV0ZS0+dmFsdWUoKTsKKyAgICAgICAgYXR0
cmlidXRlLT5zZXRWYWx1ZShudWxsQXRvbSk7CisgICAgICAgIGF0dHJpYnV0ZUNoYW5nZWQoYXR0
cmlidXRlLmdldCgpKTsKKyAgICAgICAgYXR0cmlidXRlLT5zZXRWYWx1ZShzYXZlZFZhbHVlKTsK
KyAgICB9CisKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFJlbW92ZURPTUF0dHIo
ZG9jdW1lbnQoKSwgdGhpcywgYXR0cmlidXRlLT5uYW1lKCkubG9jYWxOYW1lKCkpOworCisgICAg
aWYgKCFpc1N5bmNocm9uaXppbmdTdHlsZUF0dHJpYnV0ZSgpKQorICAgICAgICBkaXNwYXRjaFN1
YnRyZWVNb2RpZmllZEV2ZW50KCk7CiB9CiAKIHZvaWQgRWxlbWVudDo6c2V0Qm9vbGVhbkF0dHJp
YnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBib29sIHZhbHVlKQpAQCAtNjQxLDIyICs2
NjMsMjYgQEAgdm9pZCBFbGVtZW50OjpzZXRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYg
bmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKIAogaW5saW5lIHZvaWQgRWxlbWVudDo6
c2V0QXR0cmlidXRlSW50ZXJuYWwoc2l6ZV90IGluZGV4LCBjb25zdCBRdWFsaWZpZWROYW1lJiBu
YW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQogeworICAgIGlmICh2YWx1ZS5pc051bGwo
KSkgeworICAgICAgICByZW1vdmVBdHRyaWJ1dGVJbnRlcm5hbChpbmRleCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKICAgICBBdHRyaWJ1dGUqIG9sZCA9IGluZGV4ICE9IG5vdEZvdW5kID8g
bV9hdHRyaWJ1dGVNYXAtPmF0dHJpYnV0ZUl0ZW0oaW5kZXgpIDogMDsKIAotI2lmIEVOQUJMRShJ
TlNQRUNUT1IpCiAgICAgaWYgKCFpc1N5bmNocm9uaXppbmdTdHlsZUF0dHJpYnV0ZSgpKQogICAg
ICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxNb2RpZnlET01BdHRyKGRvY3VtZW50
KCksIHRoaXMpOwotI2VuZGlmCiAKICAgICBkb2N1bWVudCgpLT5pbmNET01UcmVlVmVyc2lvbigp
OwogCiAgICAgd2lsbE1vZGlmeUF0dHJpYnV0ZShuYW1lLCBvbGQgPyBvbGQtPnZhbHVlKCkgOiBu
dWxsQXRvbSwgdmFsdWUpOwogCi0gICAgaWYgKG9sZCAmJiB2YWx1ZS5pc051bGwoKSkKLSAgICAg
ICAgbV9hdHRyaWJ1dGVNYXAtPnJlbW92ZUF0dHJpYnV0ZShpbmRleCk7Ci0gICAgZWxzZSBpZiAo
IW9sZCAmJiAhdmFsdWUuaXNOdWxsKCkpCi0gICAgICAgIG1fYXR0cmlidXRlTWFwLT5hZGRBdHRy
aWJ1dGUoY3JlYXRlQXR0cmlidXRlKG5hbWUsIHZhbHVlKSk7Ci0gICAgZWxzZSBpZiAob2xkKSB7
CisgICAgaWYgKCFvbGQpIHsKKyAgICAgICAgUmVmUHRyPEF0dHJpYnV0ZT4gYXR0cmlidXRlID0g
Y3JlYXRlQXR0cmlidXRlKG5hbWUsIHZhbHVlKTsKKyAgICAgICAgQXR0cmlidXRlKiBhdHRyaWJ1
dGVQdHIgPSBhdHRyaWJ1dGUuZ2V0KCk7CisgICAgICAgIG1fYXR0cmlidXRlTWFwLT5hZGRBdHRy
aWJ1dGUoYXR0cmlidXRlLnJlbGVhc2UoKSk7CisgICAgICAgIGF0dHJpYnV0ZUNoYW5nZWQoYXR0
cmlidXRlUHRyKTsKKyAgICB9IGVsc2UgewogICAgICAgICBpZiAoQXR0ciogYXR0ck5vZGUgPSBv
bGQtPmF0dHIoKSkKICAgICAgICAgICAgIGF0dHJOb2RlLT5zZXRWYWx1ZSh2YWx1ZSk7CiAgICAg
ICAgIGVsc2UKQEAgLTY2NCwxMCArNjkwLDEwIEBAIGlubGluZSB2b2lkIEVsZW1lbnQ6OnNldEF0
dHJpYnV0ZUludGVybmFsKHNpemVfdCBpbmRleCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtCiAg
ICAgICAgIGF0dHJpYnV0ZUNoYW5nZWQob2xkKTsKICAgICB9CiAKLSNpZiBFTkFCTEUoSU5TUEVD
VE9SKQotICAgIGlmICghaXNTeW5jaHJvbml6aW5nU3R5bGVBdHRyaWJ1dGUoKSkKKyAgICBpZiAo
IWlzU3luY2hyb25pemluZ1N0eWxlQXR0cmlidXRlKCkpIHsKICAgICAgICAgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpkaWRNb2RpZnlET01BdHRyKGRvY3VtZW50KCksIHRoaXMsIG5hbWUubG9j
YWxOYW1lKCksIHZhbHVlKTsKLSNlbmRpZgorICAgICAgICBkaXNwYXRjaFN1YnRyZWVNb2RpZmll
ZEV2ZW50KCk7CisgICAgfQogfQogCiBQYXNzUmVmUHRyPEF0dHJpYnV0ZT4gRWxlbWVudDo6Y3Jl
YXRlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgdmFsdWUpCkBAIC0xNDY5LDIwICsxNDk1LDcgQEAgdm9pZCBFbGVtZW50OjpyZW1vdmVBdHRy
aWJ1dGUoY29uc3QgU3RyaW5nJiBuYW1lKQogICAgICAgICByZXR1cm47CiAKICAgICBTdHJpbmcg
bG9jYWxOYW1lID0gc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSh0aGlzKSA/IG5hbWUubG93ZXIo
KSA6IG5hbWU7Ci0gICAgc2l6ZV90IGluZGV4ID0gbV9hdHRyaWJ1dGVNYXAtPmdldEF0dHJpYnV0
ZUl0ZW1JbmRleChsb2NhbE5hbWUsIGZhbHNlKTsKLSAgICBpZiAoaW5kZXggPT0gbm90Rm91bmQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEF0dHJpYnV0ZSogYXR0cmlidXRlID0gbV9hdHRyaWJ1
dGVNYXAtPmF0dHJpYnV0ZUl0ZW0oaW5kZXgpOwotCi0gICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uOjp3aWxsTW9kaWZ5RE9NQXR0cihkb2N1bWVudCgpLCB0aGlzKTsKLQotICAgIGlmICghYXR0
cmlidXRlLT5pc051bGwoKSkKLSAgICAgICAgd2lsbE1vZGlmeUF0dHJpYnV0ZShhdHRyaWJ1dGUt
Pm5hbWUoKSwgYXR0cmlidXRlLT52YWx1ZSgpLCBudWxsQXRvbSk7Ci0KLSAgICBtX2F0dHJpYnV0
ZU1hcC0+cmVtb3ZlQXR0cmlidXRlKGluZGV4KTsKLQotICAgIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbjo6ZGlkUmVtb3ZlRE9NQXR0cihkb2N1bWVudCgpLCB0aGlzLCBuYW1lKTsKKyAgICByZW1v
dmVBdHRyaWJ1dGVJbnRlcm5hbChtX2F0dHJpYnV0ZU1hcC0+Z2V0QXR0cmlidXRlSXRlbUluZGV4
KGxvY2FsTmFtZSwgZmFsc2UpKTsKIH0KIAogdm9pZCBFbGVtZW50OjpyZW1vdmVBdHRyaWJ1dGVO
Uyhjb25zdCBTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgU3RyaW5nJiBsb2NhbE5hbWUpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0VsZW1lbnQuaAppbmRleCA5MmQ1OWM5MTEyMDk1NTY3OGQ0NzE5YTM0ZTIyZWU5NjEyZDM0
NWRlLi5hNjM1ZjA2ZWJhMGVkZDBmYjFlM2YxOGQ0MWExYTA3MDgzZDZhNDI0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmgKQEAgLTM5Niw2ICszOTYsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBj
aGlsZFR5cGVBbGxvd2VkKE5vZGVUeXBlKSBjb25zdDsKIAogICAgIHZvaWQgc2V0QXR0cmlidXRl
SW50ZXJuYWwoc2l6ZV90IGluZGV4LCBjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWlj
U3RyaW5nJiB2YWx1ZSk7CisgICAgdm9pZCByZW1vdmVBdHRyaWJ1dGVJbnRlcm5hbChzaXplX3Qg
aW5kZXgpOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxBdHRyaWJ1dGU+IGNyZWF0ZUF0dHJpYnV0
ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSk7CiAgICAg
CiAjaWZuZGVmIE5ERUJVRwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05hbWVkTm9k
ZU1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTmFtZWROb2RlTWFwLmNwcAppbmRleCAwMTQ5
ZDU0NWE4ZGRmZTBlODhjYzEzYzY5YzllNTViZjNlNjZjMDY2Li44M2Q1ZjAzYjg0YzUyNTk2N2Iw
YjcwNDliODI3ODkyOTUwZDJmY2FhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTmFt
ZWROb2RlTWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTmFtZWROb2RlTWFwLmNwcApA
QCAtMTIyLDEzICsxMjIsMTggQEAgUGFzc1JlZlB0cjxOb2RlPiBOYW1lZE5vZGVNYXA6OnNldE5h
bWVkSXRlbShOb2RlKiBub2RlLCBFeGNlcHRpb25Db2RlJiBlYykKIAogICAgIG1fZWxlbWVudC0+
d2lsbE1vZGlmeUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUoKSwgb2xkQXR0cmlidXRlID8gb2xk
QXR0cmlidXRlLT52YWx1ZSgpIDogbnVsbEF0b20sIGF0dHJpYnV0ZS0+dmFsdWUoKSk7CiAKLSAg
ICAvLyAjIyMgc2xpZ2h0bHkgaW5lZmZpY2llbnQgLSByZXNpemVzIGF0dHJpYnV0ZSBhcnJheSB0
d2ljZS4KICAgICBSZWZQdHI8QXR0cj4gb2xkQXR0cjsKICAgICBpZiAob2xkQXR0cmlidXRlKSB7
CiAgICAgICAgIG9sZEF0dHIgPSBvbGRBdHRyaWJ1dGUtPmNyZWF0ZUF0dHJJZk5lZWRlZChtX2Vs
ZW1lbnQpOwogICAgICAgICByZXBsYWNlQXR0cmlidXRlKGluZGV4LCBhdHRyaWJ1dGUpOwogICAg
IH0gZWxzZQogICAgICAgICBhZGRBdHRyaWJ1dGUoYXR0cmlidXRlKTsKKworICAgIG1fZWxlbWVu
dC0+YXR0cmlidXRlQ2hhbmdlZChhdHRyaWJ1dGUpOworCisgICAgaWYgKGF0dHJpYnV0ZS0+bmFt
ZSgpICE9IHN0eWxlQXR0cikKKyAgICAgICAgbV9lbGVtZW50LT5kaXNwYXRjaFN1YnRyZWVNb2Rp
ZmllZEV2ZW50KCk7CisKICAgICByZXR1cm4gb2xkQXR0ci5yZWxlYXNlKCk7CiB9CiAKQEAgLTEz
Nyw5ICsxNDIsNiBAQCBQYXNzUmVmUHRyPE5vZGU+IE5hbWVkTm9kZU1hcDo6c2V0TmFtZWRJdGVt
TlMoTm9kZSogbm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgcmV0dXJuIHNldE5hbWVkSXRl
bShub2RlLCBlYyk7CiB9CiAKLS8vIFRoZSBET00yIHNwZWMgZG9lc24ndCBzYXkgdGhhdCByZW1v
dmVBdHRyaWJ1dGVbTlNdIHRocm93cyBOT1RfRk9VTkRfRVJSCi0vLyBpZiB0aGUgYXR0cmlidXRl
IGlzIG5vdCBmb3VuZCwgYnV0IGF0IHRoaXMgbGV2ZWwgd2UgaGF2ZSB0byB0aHJvdyBOT1RfRk9V
TkRfRVJSCi0vLyBiZWNhdXNlIG9mIHJlbW92ZU5hbWVkSXRlbSwgcmVtb3ZlTmFtZWRJdGVtTlMs
IGFuZCByZW1vdmVBdHRyaWJ1dGVOb2RlLgogUGFzc1JlZlB0cjxOb2RlPiBOYW1lZE5vZGVNYXA6
OnJlbW92ZU5hbWVkSXRlbShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKICAgICBBU1NFUlQobV9lbGVtZW50KTsKQEAgLTE1MCwxMiArMTUyLDI0IEBAIFBh
c3NSZWZQdHI8Tm9kZT4gTmFtZWROb2RlTWFwOjpyZW1vdmVOYW1lZEl0ZW0oY29uc3QgUXVhbGlm
aWVkTmFtZSYgbmFtZSwgRXhjZXB0CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIEF0
dHJpYnV0ZSogYXR0cmlidXRlID0gYXR0cmlidXRlSXRlbShpbmRleCk7CisgICAgUmVmUHRyPEF0
dHJpYnV0ZT4gYXR0cmlidXRlID0gYXR0cmlidXRlSXRlbShpbmRleCk7CiAgICAgUmVmUHRyPEF0
dHI+IGF0dHIgPSBhdHRyaWJ1dGUtPmNyZWF0ZUF0dHJJZk5lZWRlZChtX2VsZW1lbnQpOwogCi0g
ICAgbV9lbGVtZW50LT53aWxsTW9kaWZ5QXR0cmlidXRlKGF0dHJpYnV0ZS0+bmFtZSgpLCBhdHRy
aWJ1dGUtPnZhbHVlKCksIG51bGxBdG9tKTsKKyAgICBpZiAoIWF0dHJpYnV0ZS0+aXNOdWxsKCkp
CisgICAgICAgIG1fZWxlbWVudC0+d2lsbE1vZGlmeUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUo
KSwgYXR0cmlidXRlLT52YWx1ZSgpLCBudWxsQXRvbSk7CiAKICAgICByZW1vdmVBdHRyaWJ1dGUo
aW5kZXgpOworCisgICAgaWYgKCFhdHRyaWJ1dGUtPmlzTnVsbCgpKSB7CisgICAgICAgIEF0b21p
Y1N0cmluZyBzYXZlZFZhbHVlID0gYXR0cmlidXRlLT52YWx1ZSgpOworICAgICAgICBhdHRyaWJ1
dGUtPnNldFZhbHVlKG51bGxBdG9tKTsKKyAgICAgICAgbV9lbGVtZW50LT5hdHRyaWJ1dGVDaGFu
Z2VkKGF0dHJpYnV0ZS5nZXQoKSk7CisgICAgICAgIGF0dHJpYnV0ZS0+c2V0VmFsdWUoc2F2ZWRW
YWx1ZSk7CisgICAgfQorCisgICAgaWYgKGF0dHJpYnV0ZS0+bmFtZSgpICE9IHN0eWxlQXR0cikK
KyAgICAgICAgbV9lbGVtZW50LT5kaXNwYXRjaFN1YnRyZWVNb2RpZmllZEV2ZW50KCk7CisKICAg
ICByZXR1cm4gYXR0ci5yZWxlYXNlKCk7CiB9CiAKQEAgLTI0MCw0NCArMjU0LDIxIEBAIHZvaWQg
TmFtZWROb2RlTWFwOjpzZXRBdHRyaWJ1dGVzKGNvbnN0IE5hbWVkTm9kZU1hcCYgb3RoZXIpCiAg
ICAgICAgIG1fZWxlbWVudC0+YXR0cmlidXRlQ2hhbmdlZChtX2F0dHJpYnV0ZXNbaV0uZ2V0KCks
IHRydWUpOwogfQogCi12b2lkIE5hbWVkTm9kZU1hcDo6YWRkQXR0cmlidXRlKFBhc3NSZWZQdHI8
QXR0cmlidXRlPiBwcnBBdHRyaWJ1dGUpCit2b2lkIE5hbWVkTm9kZU1hcDo6YWRkQXR0cmlidXRl
KFBhc3NSZWZQdHI8QXR0cmlidXRlPiBhdHRyaWJ1dGUpCiB7Ci0gICAgUmVmUHRyPEF0dHJpYnV0
ZT4gYXR0cmlidXRlID0gcHJwQXR0cmlidXRlOwotICAgIAotICAgIC8vIEFkZCB0aGUgYXR0cmli
dXRlIHRvIHRoZSBsaXN0CiAgICAgbV9hdHRyaWJ1dGVzLmFwcGVuZChhdHRyaWJ1dGUpOwotCi0g
ICAgaWYgKEF0dHIqIGF0dHIgPSBhdHRyaWJ1dGUtPmF0dHIoKSkKKyAgICBpZiAoQXR0ciogYXR0
ciA9IG1fYXR0cmlidXRlcy5sYXN0KCktPmF0dHIoKSkKICAgICAgICAgYXR0ci0+bV9lbGVtZW50
ID0gbV9lbGVtZW50OwotCi0gICAgLy8gTm90aWZ5IHRoZSBlbGVtZW50IHRoYXQgdGhlIGF0dHJp
YnV0ZSBoYXMgYmVlbiBhZGRlZCwgYW5kIGRpc3BhdGNoIGFwcHJvcHJpYXRlIG11dGF0aW9uIGV2
ZW50cwotICAgIC8vIE5vdGUgdGhhdCBlbGVtZW50IG1heSBiZSBudWxsIGhlcmUgaWYgd2UgYXJl
IGNhbGxlZCBmcm9tIGluc2VydEF0dHJpYnV0ZSgpIGR1cmluZyBwYXJzaW5nCi0gICAgaWYgKG1f
ZWxlbWVudCkgewotICAgICAgICBtX2VsZW1lbnQtPmF0dHJpYnV0ZUNoYW5nZWQoYXR0cmlidXRl
LmdldCgpKTsKLSAgICAgICAgLy8gQmVjYXVzZSBvZiBvdXIgdXBkYXRlU3R5bGVBdHRyaWJ1dGUo
KSBzdHlsZSBtb2RpZmljYXRpb24gZXZlbnRzIGFyZSBuZXZlciBzZW50IGF0IHRoZSByaWdodCB0
aW1lLCBzbyBkb24ndCBib3RoZXIgc2VuZGluZyB0aGVtLgotICAgICAgICBpZiAoYXR0cmlidXRl
LT5uYW1lKCkgIT0gc3R5bGVBdHRyKQotICAgICAgICAgICAgbV9lbGVtZW50LT5kaXNwYXRjaFN1
YnRyZWVNb2RpZmllZEV2ZW50KCk7Ci0gICAgfQogfQogCiB2b2lkIE5hbWVkTm9kZU1hcDo6cmVt
b3ZlQXR0cmlidXRlKHNpemVfdCBpbmRleCkKIHsKICAgICBBU1NFUlQoaW5kZXggPCBsZW5ndGgo
KSk7CiAKLSAgICBSZWZQdHI8QXR0cmlidXRlPiBhdHRyaWJ1dGUgPSBtX2F0dHJpYnV0ZXNbaW5k
ZXhdOwotICAgIGlmIChBdHRyKiBhdHRyID0gYXR0cmlidXRlLT5hdHRyKCkpCisgICAgaWYgKEF0
dHIqIGF0dHIgPSBtX2F0dHJpYnV0ZXNbaW5kZXhdLT5hdHRyKCkpCiAgICAgICAgIGF0dHItPm1f
ZWxlbWVudCA9IDA7CiAKICAgICBtX2F0dHJpYnV0ZXMucmVtb3ZlKGluZGV4KTsKLQotICAgIGlm
IChtX2VsZW1lbnQgJiYgIWF0dHJpYnV0ZS0+bV92YWx1ZS5pc051bGwoKSkgewotICAgICAgICBB
dG9taWNTdHJpbmcgdmFsdWUgPSBhdHRyaWJ1dGUtPm1fdmFsdWU7Ci0gICAgICAgIGF0dHJpYnV0
ZS0+bV92YWx1ZSA9IG51bGxBdG9tOwotICAgICAgICBtX2VsZW1lbnQtPmF0dHJpYnV0ZUNoYW5n
ZWQoYXR0cmlidXRlLmdldCgpKTsKLSAgICAgICAgYXR0cmlidXRlLT5tX3ZhbHVlID0gdmFsdWU7
Ci0gICAgfQotICAgIGlmIChtX2VsZW1lbnQpCi0gICAgICAgIG1fZWxlbWVudC0+ZGlzcGF0Y2hT
dWJ0cmVlTW9kaWZpZWRFdmVudCgpOwogfQogCiB2b2lkIE5hbWVkTm9kZU1hcDo6cmVwbGFjZUF0
dHJpYnV0ZShzaXplX3QgaW5kZXgsIFBhc3NSZWZQdHI8QXR0cmlidXRlPiBhdHRyaWJ1dGUpCkBA
IC0yODksMTIgKzI4MCw2IEBAIHZvaWQgTmFtZWROb2RlTWFwOjpyZXBsYWNlQXR0cmlidXRlKHNp
emVfdCBpbmRleCwgUGFzc1JlZlB0cjxBdHRyaWJ1dGU+IGF0dHJpYnV0CiAgICAgbV9hdHRyaWJ1
dGVzW2luZGV4XSA9IGF0dHJpYnV0ZTsKICAgICBpZiAoQXR0ciogYXR0ciA9IG1fYXR0cmlidXRl
c1tpbmRleF0tPmF0dHIoKSkKICAgICAgICAgYXR0ci0+bV9lbGVtZW50ID0gbV9lbGVtZW50Owot
Ci0gICAgaWYgKG1fZWxlbWVudCkgewotICAgICAgICBtX2VsZW1lbnQtPmF0dHJpYnV0ZUNoYW5n
ZWQobV9hdHRyaWJ1dGVzW2luZGV4XS5nZXQoKSk7Ci0gICAgICAgIGlmIChtX2F0dHJpYnV0ZXNb
aW5kZXhdLT5uYW1lKCkgIT0gc3R5bGVBdHRyKQotICAgICAgICAgICAgbV9lbGVtZW50LT5kaXNw
YXRjaFN1YnRyZWVNb2RpZmllZEV2ZW50KCk7Ci0gICAgfQogfQogCiB2b2lkIE5hbWVkTm9kZU1h
cDo6c2V0Q2xhc3MoY29uc3QgU3RyaW5nJiBjbGFzc1N0cikgCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5U3luY2hyb25pemVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5U3luY2hy
b25pemVyLmgKaW5kZXggOWExNDIxNzhiM2NkN2YwZDlhZDRkNjhhN2E2MThjY2JlYWNmMmRlMC4u
MGU3ZDBjM2EzYmU5Nzg5MzlhNjUwZjQ1MjBjZGQyMjU3YWU2YzI2NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eVN5bmNocm9uaXpl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVy
dHlTeW5jaHJvbml6ZXIuaApAQCAtMzMsMTQgKzMzLDE3IEBAIHRlbXBsYXRlPD4KIHN0cnVjdCBT
VkdBbmltYXRlZFByb3BlcnR5U3luY2hyb25pemVyPHRydWU+IHsKICAgICBzdGF0aWMgdm9pZCBz
eW5jaHJvbml6ZShTVkdFbGVtZW50KiBvd25lckVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJOYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQogICAgIHsKLSAgICAgICAgTmFt
ZWROb2RlTWFwKiBuYW1lZEF0dHJNYXAgPSBvd25lckVsZW1lbnQtPmF0dHJpYnV0ZXMoZmFsc2Up
OyAKKyAgICAgICAgLy8gSWYgdGhlIGF0dHJpYnV0ZSBhbHJlYWR5IGV4aXN0cyBvbiB0aGUgZWxl
bWVudCwgd2UgY2hhbmdlIHRoZQorICAgICAgICAvLyBBdHRyaWJ1dGUgZGlyZWN0bHkgcmF0aGVy
IHRoYW4gZ29pbmcgdGhyb3VnaCBFbGVtZW50OjpzZXRBdHRyaWJ1dGUgdG8KKyAgICAgICAgLy8g
YXZvaWQgYSBjYWxsIHRvIEVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQgdGhhdCBjb3VsZCBjYXVz
ZSB0aGUKKyAgICAgICAgLy8gU1ZHRWxlbWVudCB0byBlcnJvbmVvdXNseSByZXNldCBpdHMgcHJv
cGVydGllcy4KKyAgICAgICAgLy8gc3ZnL2RvbS9TVkdTdHJpbmdMaXN0LWJhc2ljcy54aHRtbCBl
eGVyY2lzZXMgdGhpcyBiZWhhdmlvci4KKyAgICAgICAgTmFtZWROb2RlTWFwKiBuYW1lZEF0dHJN
YXAgPSBvd25lckVsZW1lbnQtPmF0dHJpYnV0ZXMoZmFsc2UpOwogICAgICAgICBBdHRyaWJ1dGUq
IG9sZCA9IG5hbWVkQXR0ck1hcC0+Z2V0QXR0cmlidXRlSXRlbShhdHRyTmFtZSk7Ci0gICAgICAg
IGlmIChvbGQgJiYgdmFsdWUuaXNOdWxsKCkpIAotICAgICAgICAgICAgbmFtZWRBdHRyTWFwLT5y
ZW1vdmVBdHRyaWJ1dGUob2xkLT5uYW1lKCkpOyAKLSAgICAgICAgZWxzZSBpZiAoIW9sZCAmJiAh
dmFsdWUuaXNOdWxsKCkpIAotICAgICAgICAgICAgbmFtZWRBdHRyTWFwLT5hZGRBdHRyaWJ1dGUo
b3duZXJFbGVtZW50LT5jcmVhdGVBdHRyaWJ1dGUoYXR0ck5hbWUsIHZhbHVlKSk7Ci0gICAgICAg
IGVsc2UgaWYgKG9sZCAmJiAhdmFsdWUuaXNOdWxsKCkpIAotICAgICAgICAgICAgb2xkLT5zZXRW
YWx1ZSh2YWx1ZSk7IAorICAgICAgICBpZiAob2xkKQorICAgICAgICAgICAgb2xkLT5zZXRWYWx1
ZSh2YWx1ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG93bmVyRWxlbWVudC0+c2V0QXR0
cmlidXRlKGF0dHJOYW1lLCB2YWx1ZSk7CiAgICAgfQogfTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120206</attachid>
            <date>2011-12-21 11:58:24 -0800</date>
            <delta_ts>2011-12-21 14:34:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74987-20111221115823.patch</filename>
            <type>text/plain</type>
            <size>13773</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAzMzczCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODFmNGVmYTMzYjMwMDZm
MGVhZjYyNzU5MTU0OGU2MTkwMjZiODAyZC4uOGFlZTk3ODk5ZTBmY2EyYmJhNjQyYjZkZTFlYTU5
MjhlOWRmM2MxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQ1IEBACiAyMDExLTEyLTIwICBBZGFt
IEtsZWluICA8YWRhbWtAY2hyb21pdW0ub3JnPgogCisgICAgICAgIE1ha2UgY2FsbHMgdG8gd2ls
bE1vZGlmeUF0dHJpYnV0ZSBhbmQgYXR0cmlidXRlQ2hhbmdlZCBzeW1tZXRyaWNhbAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ5ODcKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQcmV2aW91c2x5LCBjYWxs
cyB0byBFbGVtZW50Ojp3aWxsTW9kaWZ5QXR0cmlidXRlIHNvbWV0aW1lcyBoYXBwZW5lZAorICAg
ICAgICBpbiBvbmUgbWV0aG9kIHdoaWxlIGNhbGxzIHRvIEVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5n
ZWQgaGFwcGVuZWQgaW4KKyAgICAgICAgYW5vdGhlci4gVGhpcyBjaGFuZ2UgbWFrZXMgdGhlbSBz
eW1tZXRyaWNhbCBmb3IgYWxsIHRoZSBjYXNlcyBJIGtub3cKKyAgICAgICAgYWJvdXQ6IHNldEF0
dHJpYnV0ZSwgcmVtb3ZlQXR0cmlidXRlLCBzZXROYW1lZEl0ZW0sIHJlbW92ZU5hbWVkSXRlbS4K
KworICAgICAgICBUbyBhY2NvbXBsaXNoIHRoaXMsIE5hbWVkTm9kZU1hcDo6YWRkQXR0cmlidXRl
LCByZW1vdmVBdHRyaWJ1dGUsIGFuZAorICAgICAgICByZXBsYWNlQXR0cmlidXRlIGhhdmUgYmVl
biByZWR1Y2VkIHRvIHRoZWlyIHB1cmUgZnVuY3Rpb25hbGl0eSBvZgorICAgICAgICBtYW5pcHVs
YXRpbmcgbV9hdHRyaWJ1dGVzLCBhbmQgdGhlaXIgY2FsbGVycyBhcmUgbGVmdCByZXNwb25zaWJs
ZSBmb3IKKyAgICAgICAgcHJvcGVybHkgbm90aWZ5aW5nIHRoZSBFbGVtZW50IG9mIHRoZSB1bmRl
cmx5aW5nIGNoYW5nZXMuCisKKyAgICAgICAgT25lIG90aGVyIGJpdCBvZiByZWZhY3RvcmluZyB3
YXMgZG9uZTogdG8gc2ltcGxpZnkKKyAgICAgICAgRWxlbWVudDo6c2V0QXR0cmlidXRlLCBpdCBu
b3cgZGlzcGF0Y2hlcyB0bworICAgICAgICBFbGVtZW50OjpyZW1vdmVBdHRyaWJ1dGVJbnRlcm5h
bCBpZiB0aGUgaW5jb21pbmcgdmFsdWUgaXMgbnVsbC4KKworICAgICAgICBObyBuZXcgdGVzdHMs
IG5vIGNoYW5nZSBpbiBiZWhhdmlvci4KKworICAgICAgICAqIGRvbS9BdHRyaWJ1dGUuaDoKKyAg
ICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpyZW1v
dmVBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6cmVtb3ZlQXR0cmlidXRl
SW50ZXJuYWwpOiBBZGRlZCwgc2hhcmluZyBjb2RlCisgICAgICAgIGJldHdlZW4gdGhlIHR3byBy
ZW1vdmVBdHRyaWJ1dGUgb3ZlcmxvYWRzLgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6c2V0
QXR0cmlidXRlSW50ZXJuYWwpOgorICAgICAgICAqIGRvbS9FbGVtZW50Lmg6CisgICAgICAgICog
ZG9tL05hbWVkTm9kZU1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOYW1lZE5vZGVNYXA6OnNl
dE5hbWVkSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpOYW1lZE5vZGVNYXA6OnJlbW92ZU5hbWVk
SXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpOYW1lZE5vZGVNYXA6OmFkZEF0dHJpYnV0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpOYW1lZE5vZGVNYXA6OnJlbW92ZUF0dHJpYnV0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpOYW1lZE5vZGVNYXA6OnJlcGxhY2VBdHRyaWJ1dGUpOgorICAgICAgICAqIHN2
Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHlTeW5jaHJvbml6ZXIuaDoKKyAgICAgICAg
Q2FsbCBFbGVtZW50OjpzZXRBdHRyaWJ1dGUgdW5sZXNzIHRoZSBhdHRyaWJ1dGUgaXMgYWxyZWFk
eSBwcmVzZW50LAorICAgICAgICBhbmQgYWRkIGEgY29tbWVudCBleHBsYWluaW5nIHdoeSB0aGUg
Y29kZSBsb29rcyB0aGUgd2F5IGl0IGRvZXMuCisKKzIwMTEtMTItMjAgIEFkYW0gS2xlaW4gIDxh
ZGFta0BjaHJvbWl1bS5vcmc+CisKICAgICAgICAgQXZvaWQgdW5uZWNlc3Nhcnkgd29yayB3aGVu
IHJlbW92aW5nIGF0dHJpYnV0ZXMgZnJvbSBhbiBlbGVtZW50CiAgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDk1MwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vQXR0cmlidXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQXR0cmlidXRlLmgK
aW5kZXggY2Y4NGE2ZmRkNjU2NmU4ZTRhYzI4ZGE0NzVmMDk2N2M1YmFlZWRlZS4uNDUyMjZmOGU3
MDU4OTE5NGE0NGVlZDJmY2E2YzU2MjViOTE1YWQzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL0F0dHJpYnV0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9BdHRyaWJ1dGUuaApA
QCAtNDAsNyArNDAsNiBAQCBjbGFzcyBOYW1lZE5vZGVNYXA7CiAvLyBUaGUgYWN0dWFsIEF0dHIg
d2l0aCBpdHMgdmFsdWUgYXMgYSBUZXh0IGNoaWxkIGlzIGFsbG9jYXRlZCBvbmx5IGlmIG5lZWRl
ZC4KIGNsYXNzIEF0dHJpYnV0ZSA6IHB1YmxpYyBSZWZDb3VudGVkPEF0dHJpYnV0ZT4gewogICAg
IGZyaWVuZCBjbGFzcyBBdHRyOwotICAgIGZyaWVuZCBjbGFzcyBOYW1lZE5vZGVNYXA7CiBwdWJs
aWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8QXR0cmlidXRlPiBjcmVhdGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKICAgICB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RWxlbWVudC5jcHAKaW5kZXggMGZkYjU3N2MzYzM0NDRhNTFmZDUwMjA5NzdmMzY4ZmVkYjgxNDkw
Ny4uMjUwNTMxZmEyNDVhZDEwNDZmYjc1YmYxMmNjY2ZiZTZiNTA5ZjI3YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmNwcApAQCAtMTkzLDEzICsxOTMsMzUgQEAgdm9pZCBFbGVtZW50OjpyZW1vdmVBdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkKICAgICBpZiAoIW1fYXR0cmlidXRlTWFw
KQogICAgICAgICByZXR1cm47CiAKLSAgICBzaXplX3QgaW5kZXggPSBtX2F0dHJpYnV0ZU1hcC0+
Z2V0QXR0cmlidXRlSXRlbUluZGV4KG5hbWUpOworICAgIHJlbW92ZUF0dHJpYnV0ZUludGVybmFs
KG1fYXR0cmlidXRlTWFwLT5nZXRBdHRyaWJ1dGVJdGVtSW5kZXgobmFtZSkpOworfQorCitpbmxp
bmUgdm9pZCBFbGVtZW50OjpyZW1vdmVBdHRyaWJ1dGVJbnRlcm5hbChzaXplX3QgaW5kZXgpCit7
CisgICAgQVNTRVJUKG1fYXR0cmlidXRlTWFwKTsKICAgICBpZiAoaW5kZXggPT0gbm90Rm91bmQp
CiAgICAgICAgIHJldHVybjsKIAotICAgIHdpbGxNb2RpZnlBdHRyaWJ1dGUobmFtZSwgbV9hdHRy
aWJ1dGVNYXAtPmF0dHJpYnV0ZUl0ZW0oaW5kZXgpLT52YWx1ZSgpLCBudWxsQXRvbSk7CisgICAg
SW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsTW9kaWZ5RE9NQXR0cihkb2N1bWVudCgpLCB0
aGlzKTsKKworICAgIFJlZlB0cjxBdHRyaWJ1dGU+IGF0dHJpYnV0ZSA9IG1fYXR0cmlidXRlTWFw
LT5hdHRyaWJ1dGVJdGVtKGluZGV4KTsKKworICAgIGlmICghYXR0cmlidXRlLT5pc051bGwoKSkK
KyAgICAgICAgd2lsbE1vZGlmeUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUoKSwgYXR0cmlidXRl
LT52YWx1ZSgpLCBudWxsQXRvbSk7CiAKICAgICBtX2F0dHJpYnV0ZU1hcC0+cmVtb3ZlQXR0cmli
dXRlKGluZGV4KTsKKworICAgIGlmICghYXR0cmlidXRlLT5pc051bGwoKSkgeworICAgICAgICBB
dG9taWNTdHJpbmcgc2F2ZWRWYWx1ZSA9IGF0dHJpYnV0ZS0+dmFsdWUoKTsKKyAgICAgICAgYXR0
cmlidXRlLT5zZXRWYWx1ZShudWxsQXRvbSk7CisgICAgICAgIGF0dHJpYnV0ZUNoYW5nZWQoYXR0
cmlidXRlLmdldCgpKTsKKyAgICAgICAgYXR0cmlidXRlLT5zZXRWYWx1ZShzYXZlZFZhbHVlKTsK
KyAgICB9CisKKyAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFJlbW92ZURPTUF0dHIo
ZG9jdW1lbnQoKSwgdGhpcywgYXR0cmlidXRlLT5uYW1lKCkubG9jYWxOYW1lKCkpOworCisgICAg
aWYgKCFpc1N5bmNocm9uaXppbmdTdHlsZUF0dHJpYnV0ZSgpKQorICAgICAgICBkaXNwYXRjaFN1
YnRyZWVNb2RpZmllZEV2ZW50KCk7CiB9CiAKIHZvaWQgRWxlbWVudDo6c2V0Qm9vbGVhbkF0dHJp
YnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBib29sIHZhbHVlKQpAQCAtNjQxLDIyICs2
NjMsMjUgQEAgdm9pZCBFbGVtZW50OjpzZXRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYg
bmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKIAogaW5saW5lIHZvaWQgRWxlbWVudDo6
c2V0QXR0cmlidXRlSW50ZXJuYWwoc2l6ZV90IGluZGV4LCBjb25zdCBRdWFsaWZpZWROYW1lJiBu
YW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQogeworICAgIGlmICh2YWx1ZS5pc051bGwo
KSkgeworICAgICAgICByZW1vdmVBdHRyaWJ1dGVJbnRlcm5hbChpbmRleCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKICAgICBBdHRyaWJ1dGUqIG9sZCA9IGluZGV4ICE9IG5vdEZvdW5kID8g
bV9hdHRyaWJ1dGVNYXAtPmF0dHJpYnV0ZUl0ZW0oaW5kZXgpIDogMDsKIAotI2lmIEVOQUJMRShJ
TlNQRUNUT1IpCiAgICAgaWYgKCFpc1N5bmNocm9uaXppbmdTdHlsZUF0dHJpYnV0ZSgpKQogICAg
ICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxNb2RpZnlET01BdHRyKGRvY3VtZW50
KCksIHRoaXMpOwotI2VuZGlmCiAKICAgICBkb2N1bWVudCgpLT5pbmNET01UcmVlVmVyc2lvbigp
OwogCiAgICAgd2lsbE1vZGlmeUF0dHJpYnV0ZShuYW1lLCBvbGQgPyBvbGQtPnZhbHVlKCkgOiBu
dWxsQXRvbSwgdmFsdWUpOwogCi0gICAgaWYgKG9sZCAmJiB2YWx1ZS5pc051bGwoKSkKLSAgICAg
ICAgbV9hdHRyaWJ1dGVNYXAtPnJlbW92ZUF0dHJpYnV0ZShpbmRleCk7Ci0gICAgZWxzZSBpZiAo
IW9sZCAmJiAhdmFsdWUuaXNOdWxsKCkpCi0gICAgICAgIG1fYXR0cmlidXRlTWFwLT5hZGRBdHRy
aWJ1dGUoY3JlYXRlQXR0cmlidXRlKG5hbWUsIHZhbHVlKSk7Ci0gICAgZWxzZSBpZiAob2xkKSB7
CisgICAgaWYgKCFvbGQpIHsKKyAgICAgICAgUmVmUHRyPEF0dHJpYnV0ZT4gYXR0cmlidXRlID0g
Y3JlYXRlQXR0cmlidXRlKG5hbWUsIHZhbHVlKTsKKyAgICAgICAgbV9hdHRyaWJ1dGVNYXAtPmFk
ZEF0dHJpYnV0ZShhdHRyaWJ1dGUpOworICAgICAgICBhdHRyaWJ1dGVDaGFuZ2VkKGF0dHJpYnV0
ZS5nZXQoKSk7CisgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKEF0dHIqIGF0dHJOb2RlID0gb2xk
LT5hdHRyKCkpCiAgICAgICAgICAgICBhdHRyTm9kZS0+c2V0VmFsdWUodmFsdWUpOwogICAgICAg
ICBlbHNlCkBAIC02NjQsMTAgKzY4OSwxMCBAQCBpbmxpbmUgdm9pZCBFbGVtZW50OjpzZXRBdHRy
aWJ1dGVJbnRlcm5hbChzaXplX3QgaW5kZXgsIGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbQogICAg
ICAgICBhdHRyaWJ1dGVDaGFuZ2VkKG9sZCk7CiAgICAgfQogCi0jaWYgRU5BQkxFKElOU1BFQ1RP
UikKLSAgICBpZiAoIWlzU3luY2hyb25pemluZ1N0eWxlQXR0cmlidXRlKCkpCisgICAgaWYgKCFp
c1N5bmNocm9uaXppbmdTdHlsZUF0dHJpYnV0ZSgpKSB7CiAgICAgICAgIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6ZGlkTW9kaWZ5RE9NQXR0cihkb2N1bWVudCgpLCB0aGlzLCBuYW1lLmxvY2Fs
TmFtZSgpLCB2YWx1ZSk7Ci0jZW5kaWYKKyAgICAgICAgZGlzcGF0Y2hTdWJ0cmVlTW9kaWZpZWRF
dmVudCgpOworICAgIH0KIH0KIAogUGFzc1JlZlB0cjxBdHRyaWJ1dGU+IEVsZW1lbnQ6OmNyZWF0
ZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcm
IHZhbHVlKQpAQCAtMTQ2OSwyMCArMTQ5NCw3IEBAIHZvaWQgRWxlbWVudDo6cmVtb3ZlQXR0cmli
dXRlKGNvbnN0IFN0cmluZyYgbmFtZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nIGxv
Y2FsTmFtZSA9IHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UodGhpcykgPyBuYW1lLmxvd2VyKCkg
OiBuYW1lOwotICAgIHNpemVfdCBpbmRleCA9IG1fYXR0cmlidXRlTWFwLT5nZXRBdHRyaWJ1dGVJ
dGVtSW5kZXgobG9jYWxOYW1lLCBmYWxzZSk7Ci0gICAgaWYgKGluZGV4ID09IG5vdEZvdW5kKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IG1fYXR0cmlidXRl
TWFwLT5hdHRyaWJ1dGVJdGVtKGluZGV4KTsKLQotICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bjo6d2lsbE1vZGlmeURPTUF0dHIoZG9jdW1lbnQoKSwgdGhpcyk7Ci0KLSAgICBpZiAoIWF0dHJp
YnV0ZS0+aXNOdWxsKCkpCi0gICAgICAgIHdpbGxNb2RpZnlBdHRyaWJ1dGUoYXR0cmlidXRlLT5u
YW1lKCksIGF0dHJpYnV0ZS0+dmFsdWUoKSwgbnVsbEF0b20pOwotCi0gICAgbV9hdHRyaWJ1dGVN
YXAtPnJlbW92ZUF0dHJpYnV0ZShpbmRleCk7Ci0KLSAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b246OmRpZFJlbW92ZURPTUF0dHIoZG9jdW1lbnQoKSwgdGhpcywgbmFtZSk7CisgICAgcmVtb3Zl
QXR0cmlidXRlSW50ZXJuYWwobV9hdHRyaWJ1dGVNYXAtPmdldEF0dHJpYnV0ZUl0ZW1JbmRleChs
b2NhbE5hbWUsIGZhbHNlKSk7CiB9CiAKIHZvaWQgRWxlbWVudDo6cmVtb3ZlQXR0cmlidXRlTlMo
Y29uc3QgU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IFN0cmluZyYgbG9jYWxOYW1lKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FbGVtZW50LmgKaW5kZXggOTJkNTljOTExMjA5NTU2NzhkNDcxOWEzNGUyMmVlOTYxMmQzNDVk
ZS4uYTYzNWYwNmViYTBlZGQwZmIxZTNmMThkNDFhMWEwNzA4M2Q2YTQyNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudC5oCkBAIC0zOTYsNiArMzk2LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgY2hp
bGRUeXBlQWxsb3dlZChOb2RlVHlwZSkgY29uc3Q7CiAKICAgICB2b2lkIHNldEF0dHJpYnV0ZUlu
dGVybmFsKHNpemVfdCBpbmRleCwgY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0
cmluZyYgdmFsdWUpOworICAgIHZvaWQgcmVtb3ZlQXR0cmlidXRlSW50ZXJuYWwoc2l6ZV90IGlu
ZGV4KTsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8QXR0cmlidXRlPiBjcmVhdGVBdHRyaWJ1dGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpOwogICAgIAog
I2lmbmRlZiBOREVCVUcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9OYW1lZE5vZGVN
YXAuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL05hbWVkTm9kZU1hcC5jcHAKaW5kZXggMDE0OWQ1
NDVhOGRkZmUwZTg4Y2MxM2M2OWM5ZTU1YmYzZTY2YzA2Ni4uODNkNWYwM2I4NGM1MjU5NjdiMGI3
MDQ5YjgyNzg5Mjk1MGQyZmNhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05hbWVk
Tm9kZU1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05hbWVkTm9kZU1hcC5jcHAKQEAg
LTEyMiwxMyArMTIyLDE4IEBAIFBhc3NSZWZQdHI8Tm9kZT4gTmFtZWROb2RlTWFwOjpzZXROYW1l
ZEl0ZW0oTm9kZSogbm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAKICAgICBtX2VsZW1lbnQtPndp
bGxNb2RpZnlBdHRyaWJ1dGUoYXR0cmlidXRlLT5uYW1lKCksIG9sZEF0dHJpYnV0ZSA/IG9sZEF0
dHJpYnV0ZS0+dmFsdWUoKSA6IG51bGxBdG9tLCBhdHRyaWJ1dGUtPnZhbHVlKCkpOwogCi0gICAg
Ly8gIyMjIHNsaWdodGx5IGluZWZmaWNpZW50IC0gcmVzaXplcyBhdHRyaWJ1dGUgYXJyYXkgdHdp
Y2UuCiAgICAgUmVmUHRyPEF0dHI+IG9sZEF0dHI7CiAgICAgaWYgKG9sZEF0dHJpYnV0ZSkgewog
ICAgICAgICBvbGRBdHRyID0gb2xkQXR0cmlidXRlLT5jcmVhdGVBdHRySWZOZWVkZWQobV9lbGVt
ZW50KTsKICAgICAgICAgcmVwbGFjZUF0dHJpYnV0ZShpbmRleCwgYXR0cmlidXRlKTsKICAgICB9
IGVsc2UKICAgICAgICAgYWRkQXR0cmlidXRlKGF0dHJpYnV0ZSk7CisKKyAgICBtX2VsZW1lbnQt
PmF0dHJpYnV0ZUNoYW5nZWQoYXR0cmlidXRlKTsKKworICAgIGlmIChhdHRyaWJ1dGUtPm5hbWUo
KSAhPSBzdHlsZUF0dHIpCisgICAgICAgIG1fZWxlbWVudC0+ZGlzcGF0Y2hTdWJ0cmVlTW9kaWZp
ZWRFdmVudCgpOworCiAgICAgcmV0dXJuIG9sZEF0dHIucmVsZWFzZSgpOwogfQogCkBAIC0xMzcs
OSArMTQyLDYgQEAgUGFzc1JlZlB0cjxOb2RlPiBOYW1lZE5vZGVNYXA6OnNldE5hbWVkSXRlbU5T
KE5vZGUqIG5vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIHJldHVybiBzZXROYW1lZEl0ZW0o
bm9kZSwgZWMpOwogfQogCi0vLyBUaGUgRE9NMiBzcGVjIGRvZXNuJ3Qgc2F5IHRoYXQgcmVtb3Zl
QXR0cmlidXRlW05TXSB0aHJvd3MgTk9UX0ZPVU5EX0VSUgotLy8gaWYgdGhlIGF0dHJpYnV0ZSBp
cyBub3QgZm91bmQsIGJ1dCBhdCB0aGlzIGxldmVsIHdlIGhhdmUgdG8gdGhyb3cgTk9UX0ZPVU5E
X0VSUgotLy8gYmVjYXVzZSBvZiByZW1vdmVOYW1lZEl0ZW0sIHJlbW92ZU5hbWVkSXRlbU5TLCBh
bmQgcmVtb3ZlQXR0cmlidXRlTm9kZS4KIFBhc3NSZWZQdHI8Tm9kZT4gTmFtZWROb2RlTWFwOjpy
ZW1vdmVOYW1lZEl0ZW0oY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7CiAgICAgQVNTRVJUKG1fZWxlbWVudCk7CkBAIC0xNTAsMTIgKzE1MiwyNCBAQCBQYXNz
UmVmUHRyPE5vZGU+IE5hbWVkTm9kZU1hcDo6cmVtb3ZlTmFtZWRJdGVtKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIG5hbWUsIEV4Y2VwdAogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBBdHRy
aWJ1dGUqIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZUl0ZW0oaW5kZXgpOworICAgIFJlZlB0cjxBdHRy
aWJ1dGU+IGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZUl0ZW0oaW5kZXgpOwogICAgIFJlZlB0cjxBdHRy
PiBhdHRyID0gYXR0cmlidXRlLT5jcmVhdGVBdHRySWZOZWVkZWQobV9lbGVtZW50KTsKIAotICAg
IG1fZWxlbWVudC0+d2lsbE1vZGlmeUF0dHJpYnV0ZShhdHRyaWJ1dGUtPm5hbWUoKSwgYXR0cmli
dXRlLT52YWx1ZSgpLCBudWxsQXRvbSk7CisgICAgaWYgKCFhdHRyaWJ1dGUtPmlzTnVsbCgpKQor
ICAgICAgICBtX2VsZW1lbnQtPndpbGxNb2RpZnlBdHRyaWJ1dGUoYXR0cmlidXRlLT5uYW1lKCks
IGF0dHJpYnV0ZS0+dmFsdWUoKSwgbnVsbEF0b20pOwogCiAgICAgcmVtb3ZlQXR0cmlidXRlKGlu
ZGV4KTsKKworICAgIGlmICghYXR0cmlidXRlLT5pc051bGwoKSkgeworICAgICAgICBBdG9taWNT
dHJpbmcgc2F2ZWRWYWx1ZSA9IGF0dHJpYnV0ZS0+dmFsdWUoKTsKKyAgICAgICAgYXR0cmlidXRl
LT5zZXRWYWx1ZShudWxsQXRvbSk7CisgICAgICAgIG1fZWxlbWVudC0+YXR0cmlidXRlQ2hhbmdl
ZChhdHRyaWJ1dGUuZ2V0KCkpOworICAgICAgICBhdHRyaWJ1dGUtPnNldFZhbHVlKHNhdmVkVmFs
dWUpOworICAgIH0KKworICAgIGlmIChhdHRyaWJ1dGUtPm5hbWUoKSAhPSBzdHlsZUF0dHIpCisg
ICAgICAgIG1fZWxlbWVudC0+ZGlzcGF0Y2hTdWJ0cmVlTW9kaWZpZWRFdmVudCgpOworCiAgICAg
cmV0dXJuIGF0dHIucmVsZWFzZSgpOwogfQogCkBAIC0yNDAsNDQgKzI1NCwyMSBAQCB2b2lkIE5h
bWVkTm9kZU1hcDo6c2V0QXR0cmlidXRlcyhjb25zdCBOYW1lZE5vZGVNYXAmIG90aGVyKQogICAg
ICAgICBtX2VsZW1lbnQtPmF0dHJpYnV0ZUNoYW5nZWQobV9hdHRyaWJ1dGVzW2ldLmdldCgpLCB0
cnVlKTsKIH0KIAotdm9pZCBOYW1lZE5vZGVNYXA6OmFkZEF0dHJpYnV0ZShQYXNzUmVmUHRyPEF0
dHJpYnV0ZT4gcHJwQXR0cmlidXRlKQordm9pZCBOYW1lZE5vZGVNYXA6OmFkZEF0dHJpYnV0ZShQ
YXNzUmVmUHRyPEF0dHJpYnV0ZT4gYXR0cmlidXRlKQogewotICAgIFJlZlB0cjxBdHRyaWJ1dGU+
IGF0dHJpYnV0ZSA9IHBycEF0dHJpYnV0ZTsKLSAgICAKLSAgICAvLyBBZGQgdGhlIGF0dHJpYnV0
ZSB0byB0aGUgbGlzdAogICAgIG1fYXR0cmlidXRlcy5hcHBlbmQoYXR0cmlidXRlKTsKLQotICAg
IGlmIChBdHRyKiBhdHRyID0gYXR0cmlidXRlLT5hdHRyKCkpCisgICAgaWYgKEF0dHIqIGF0dHIg
PSBtX2F0dHJpYnV0ZXMubGFzdCgpLT5hdHRyKCkpCiAgICAgICAgIGF0dHItPm1fZWxlbWVudCA9
IG1fZWxlbWVudDsKLQotICAgIC8vIE5vdGlmeSB0aGUgZWxlbWVudCB0aGF0IHRoZSBhdHRyaWJ1
dGUgaGFzIGJlZW4gYWRkZWQsIGFuZCBkaXNwYXRjaCBhcHByb3ByaWF0ZSBtdXRhdGlvbiBldmVu
dHMKLSAgICAvLyBOb3RlIHRoYXQgZWxlbWVudCBtYXkgYmUgbnVsbCBoZXJlIGlmIHdlIGFyZSBj
YWxsZWQgZnJvbSBpbnNlcnRBdHRyaWJ1dGUoKSBkdXJpbmcgcGFyc2luZwotICAgIGlmIChtX2Vs
ZW1lbnQpIHsKLSAgICAgICAgbV9lbGVtZW50LT5hdHRyaWJ1dGVDaGFuZ2VkKGF0dHJpYnV0ZS5n
ZXQoKSk7Ci0gICAgICAgIC8vIEJlY2F1c2Ugb2Ygb3VyIHVwZGF0ZVN0eWxlQXR0cmlidXRlKCkg
c3R5bGUgbW9kaWZpY2F0aW9uIGV2ZW50cyBhcmUgbmV2ZXIgc2VudCBhdCB0aGUgcmlnaHQgdGlt
ZSwgc28gZG9uJ3QgYm90aGVyIHNlbmRpbmcgdGhlbS4KLSAgICAgICAgaWYgKGF0dHJpYnV0ZS0+
bmFtZSgpICE9IHN0eWxlQXR0cikKLSAgICAgICAgICAgIG1fZWxlbWVudC0+ZGlzcGF0Y2hTdWJ0
cmVlTW9kaWZpZWRFdmVudCgpOwotICAgIH0KIH0KIAogdm9pZCBOYW1lZE5vZGVNYXA6OnJlbW92
ZUF0dHJpYnV0ZShzaXplX3QgaW5kZXgpCiB7CiAgICAgQVNTRVJUKGluZGV4IDwgbGVuZ3RoKCkp
OwogCi0gICAgUmVmUHRyPEF0dHJpYnV0ZT4gYXR0cmlidXRlID0gbV9hdHRyaWJ1dGVzW2luZGV4
XTsKLSAgICBpZiAoQXR0ciogYXR0ciA9IGF0dHJpYnV0ZS0+YXR0cigpKQorICAgIGlmIChBdHRy
KiBhdHRyID0gbV9hdHRyaWJ1dGVzW2luZGV4XS0+YXR0cigpKQogICAgICAgICBhdHRyLT5tX2Vs
ZW1lbnQgPSAwOwogCiAgICAgbV9hdHRyaWJ1dGVzLnJlbW92ZShpbmRleCk7Ci0KLSAgICBpZiAo
bV9lbGVtZW50ICYmICFhdHRyaWJ1dGUtPm1fdmFsdWUuaXNOdWxsKCkpIHsKLSAgICAgICAgQXRv
bWljU3RyaW5nIHZhbHVlID0gYXR0cmlidXRlLT5tX3ZhbHVlOwotICAgICAgICBhdHRyaWJ1dGUt
Pm1fdmFsdWUgPSBudWxsQXRvbTsKLSAgICAgICAgbV9lbGVtZW50LT5hdHRyaWJ1dGVDaGFuZ2Vk
KGF0dHJpYnV0ZS5nZXQoKSk7Ci0gICAgICAgIGF0dHJpYnV0ZS0+bV92YWx1ZSA9IHZhbHVlOwot
ICAgIH0KLSAgICBpZiAobV9lbGVtZW50KQotICAgICAgICBtX2VsZW1lbnQtPmRpc3BhdGNoU3Vi
dHJlZU1vZGlmaWVkRXZlbnQoKTsKIH0KIAogdm9pZCBOYW1lZE5vZGVNYXA6OnJlcGxhY2VBdHRy
aWJ1dGUoc2l6ZV90IGluZGV4LCBQYXNzUmVmUHRyPEF0dHJpYnV0ZT4gYXR0cmlidXRlKQpAQCAt
Mjg5LDEyICsyODAsNiBAQCB2b2lkIE5hbWVkTm9kZU1hcDo6cmVwbGFjZUF0dHJpYnV0ZShzaXpl
X3QgaW5kZXgsIFBhc3NSZWZQdHI8QXR0cmlidXRlPiBhdHRyaWJ1dAogICAgIG1fYXR0cmlidXRl
c1tpbmRleF0gPSBhdHRyaWJ1dGU7CiAgICAgaWYgKEF0dHIqIGF0dHIgPSBtX2F0dHJpYnV0ZXNb
aW5kZXhdLT5hdHRyKCkpCiAgICAgICAgIGF0dHItPm1fZWxlbWVudCA9IG1fZWxlbWVudDsKLQot
ICAgIGlmIChtX2VsZW1lbnQpIHsKLSAgICAgICAgbV9lbGVtZW50LT5hdHRyaWJ1dGVDaGFuZ2Vk
KG1fYXR0cmlidXRlc1tpbmRleF0uZ2V0KCkpOwotICAgICAgICBpZiAobV9hdHRyaWJ1dGVzW2lu
ZGV4XS0+bmFtZSgpICE9IHN0eWxlQXR0cikKLSAgICAgICAgICAgIG1fZWxlbWVudC0+ZGlzcGF0
Y2hTdWJ0cmVlTW9kaWZpZWRFdmVudCgpOwotICAgIH0KIH0KIAogdm9pZCBOYW1lZE5vZGVNYXA6
OnNldENsYXNzKGNvbnN0IFN0cmluZyYgY2xhc3NTdHIpIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eVN5bmNocm9uaXplci5oIGIv
U291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eVN5bmNocm9u
aXplci5oCmluZGV4IDlhMTQyMTc4YjNjZDdmMGQ5YWQ0ZDY4YTdhNjE4Y2NiZWFjZjJkZTAuLjBl
N2QwYzNhM2JlOTc4OTM5YTY1MGY0NTIwY2RkMjI1N2FlNmMyNjcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHlTeW5jaHJvbml6ZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5
U3luY2hyb25pemVyLmgKQEAgLTMzLDE0ICszMywxNyBAQCB0ZW1wbGF0ZTw+CiBzdHJ1Y3QgU1ZH
QW5pbWF0ZWRQcm9wZXJ0eVN5bmNocm9uaXplcjx0cnVlPiB7CiAgICAgc3RhdGljIHZvaWQgc3lu
Y2hyb25pemUoU1ZHRWxlbWVudCogb3duZXJFbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyTmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIE5hbWVk
Tm9kZU1hcCogbmFtZWRBdHRyTWFwID0gb3duZXJFbGVtZW50LT5hdHRyaWJ1dGVzKGZhbHNlKTsg
CisgICAgICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUgYWxyZWFkeSBleGlzdHMgb24gdGhlIGVsZW1l
bnQsIHdlIGNoYW5nZSB0aGUKKyAgICAgICAgLy8gQXR0cmlidXRlIGRpcmVjdGx5IHJhdGhlciB0
aGFuIGdvaW5nIHRocm91Z2ggRWxlbWVudDo6c2V0QXR0cmlidXRlIHRvCisgICAgICAgIC8vIGF2
b2lkIGEgY2FsbCB0byBFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkIHRoYXQgY291bGQgY2F1c2Ug
dGhlCisgICAgICAgIC8vIFNWR0VsZW1lbnQgdG8gZXJyb25lb3VzbHkgcmVzZXQgaXRzIHByb3Bl
cnRpZXMuCisgICAgICAgIC8vIHN2Zy9kb20vU1ZHU3RyaW5nTGlzdC1iYXNpY3MueGh0bWwgZXhl
cmNpc2VzIHRoaXMgYmVoYXZpb3IuCisgICAgICAgIE5hbWVkTm9kZU1hcCogbmFtZWRBdHRyTWFw
ID0gb3duZXJFbGVtZW50LT5hdHRyaWJ1dGVzKGZhbHNlKTsKICAgICAgICAgQXR0cmlidXRlKiBv
bGQgPSBuYW1lZEF0dHJNYXAtPmdldEF0dHJpYnV0ZUl0ZW0oYXR0ck5hbWUpOwotICAgICAgICBp
ZiAob2xkICYmIHZhbHVlLmlzTnVsbCgpKSAKLSAgICAgICAgICAgIG5hbWVkQXR0ck1hcC0+cmVt
b3ZlQXR0cmlidXRlKG9sZC0+bmFtZSgpKTsgCi0gICAgICAgIGVsc2UgaWYgKCFvbGQgJiYgIXZh
bHVlLmlzTnVsbCgpKSAKLSAgICAgICAgICAgIG5hbWVkQXR0ck1hcC0+YWRkQXR0cmlidXRlKG93
bmVyRWxlbWVudC0+Y3JlYXRlQXR0cmlidXRlKGF0dHJOYW1lLCB2YWx1ZSkpOwotICAgICAgICBl
bHNlIGlmIChvbGQgJiYgIXZhbHVlLmlzTnVsbCgpKSAKLSAgICAgICAgICAgIG9sZC0+c2V0VmFs
dWUodmFsdWUpOyAKKyAgICAgICAgaWYgKG9sZCkKKyAgICAgICAgICAgIG9sZC0+c2V0VmFsdWUo
dmFsdWUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvd25lckVsZW1lbnQtPnNldEF0dHJp
YnV0ZShhdHRyTmFtZSwgdmFsdWUpOwogICAgIH0KIH07CiAK
</data>
<flag name="review"
          id="120398"
          type_id="1"
          status="+"
          setter="rniwa"
    />
          </attachment>
      

    </bug>

</bugzilla>