<?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>70116</bug_id>
          
          <creation_ts>2011-10-14 10:55:36 -0700</creation_ts>
          <short_desc>CSSStyleSheet should only ever contain CSSRules.</short_desc>
          <delta_ts>2011-10-14 11:43:04 -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>CSS</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="Andreas Kling">kling</reporter>
          <assigned_to name="Andreas Kling">kling</assigned_to>
          <cc>koivisto</cc>
    
    <cc>luiz</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>484062</commentid>
    <comment_count>0</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-10-14 10:55:36 -0700</bug_when>
    <thetext>SSIA.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484074</commentid>
    <comment_count>1</comment_count>
      <attachid>111029</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-10-14 11:05:29 -0700</bug_when>
    <thetext>Created attachment 111029
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484076</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-14 11:09:43 -0700</bug_when>
    <thetext>Attachment 111029 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/css/CSSStyleSelector.cpp:2005:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
Total errors found: 1 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484082</commentid>
    <comment_count>3</comment_count>
      <attachid>111029</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-10-14 11:18:00 -0700</bug_when>
    <thetext>Comment on attachment 111029
Proposed patch

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

Nice! r=me, with one change.

&gt; Source/WebCore/css/CSSStyleSheet.h:113
&gt; +    unsigned length() const { return m_children.size(); }
&gt; +    CSSRule* item(unsigned index) { return index &lt; length() ? m_children.at(index).get() : 0; }

Just go ahead and expose the vector instead here 
const Vector&lt;RefPtr&lt;CSSRule&gt; &gt;&amp; rules() const

&gt; Source/WebCore/xml/XSLStyleSheet.h:60
&gt; +    unsigned length() const { return m_children.size(); }
&gt; +    StyleBase* item(unsigned index) { return index &lt; length() ? m_children.at(index).get() : 0; }

here too</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484087</commentid>
    <comment_count>4</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-10-14 11:22:29 -0700</bug_when>
    <thetext>Actually, please land as-is, refactor the array interface separately.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484118</commentid>
    <comment_count>5</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-10-14 11:37:00 -0700</bug_when>
    <thetext>Committed r97485: &lt;http://trac.webkit.org/changeset/97485&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484126</commentid>
    <comment_count>6</comment_count>
      <attachid>111029</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-10-14 11:43:04 -0700</bug_when>
    <thetext>Comment on attachment 111029
Proposed patch

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

&gt; Source/WebCore/css/CSSRule.h:-66
&gt; +    virtual bool isRule() const { return true; }
&gt; +
&gt;  protected:
&gt;      CSSRule(CSSStyleSheet* parent)
&gt;          : StyleBase(parent)
&gt;      {
&gt;      }
&gt; -
&gt; -private:
&gt; -    virtual bool isRule() const { return true; }

Oh, no need make this public...

&gt; Source/WebCore/css/CSSStyleSheet.cpp:108
&gt; +    CSSRule* c = child.get();
&gt; +    ASSERT(c-&gt;isRule());

... as these asserts are not really necessary at all!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111029</attachid>
            <date>2011-10-14 11:05:29 -0700</date>
            <delta_ts>2011-10-14 11:43:04 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>bug-70116.diff</filename>
            <type>text/plain</type>
            <size>21805</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBlMGU3ZTdmLi5mZWRmYjBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsODUg
QEAKIDIwMTEtMTAtMTQgIEFuZHJlYXMgS2xpbmcgIDxrbGluZ0B3ZWJraXQub3JnPgogCisgICAg
ICAgIENTU1N0eWxlU2hlZXQgc2hvdWxkIG9ubHkgZXZlciBjb250YWluIENTU1J1bGVzLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzAxMTYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIGNoaWxkIG1h
bmFnZW1lbnQgZnJvbSB0aGUgU3R5bGVTaGVldCBjbGFzcyBkb3duIGludG8KKyAgICAgICAgQ1NT
U3R5bGVTaGVldCBhbmQgWFNMU3R5bGVTaGVldC4gWFNMU3R5bGVTaGVldCBjb250aW51ZXMgdG8K
KyAgICAgICAgbWFuYWdlIFN0eWxlQmFzZSBvYmplY3RzLCB3aGlsZSBDU1NTdHlsZVNoZWV0IG5v
dyBvbmx5IGNvbnRhaW5zCisgICAgICAgIENTU1J1bGUuCisKKyAgICAgICAgVGhpcyBpcyBlbmZv
cmNlZCBhdCBib3RoIGNvbXBpbGUgdGltZSBhbmQgcnVudGltZSB3aXRoIGV4cGxpY2l0CisgICAg
ICAgIHR5cGVzIGFuZCBhc3NlcnRpb25zLgorCisgICAgICAgICogY3NzL0NTU1J1bGUuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1J1bGU6OmlzUnVsZSk6CisKKyAgICAgICAgICAgIFByb21vdGVk
IHRvIGEgcHVibGljIG1ldGhvZCBzbyB3ZSBjYW4gdXNlIGl0IGluIGFzc2VydGlvbnMuCisKKyAg
ICAgICAgKiBjc3MvQ1NTUnVsZUxpc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1J1bGVMaXN0
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUnVsZUxpc3Q6OnN0eWxlU2hlZXQpOgor
ICAgICAgICAqIGNzcy9DU1NSdWxlTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NSdWxl
TGlzdDo6Q1NTUnVsZUxpc3QpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ1NTUnVsZUxpc3RD
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNDU1NSdWxlTGlzdE93bmVyOjppc1JlYWNo
YWJsZUZyb21PcGFxdWVSb290cyk6CisKKyAgICAgICAgICAgIENoYW5nZSBiYWNraW5nIHRvIGEg
Q1NTU3R5bGVTaGVldCBpbnN0ZWFkIG9mIGEgU3R5bGVTaGVldC4KKworICAgICAgICAqIGNzcy9D
U1NSdWxlTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NSdWxlTGlzdDo6aXRlbSk6CisK
KyAgICAgICAgICAgIFJlbW92ZSByZWR1bmRhbnQgYXNzZXJ0aW9ucy4KKworICAgICAgICAqIGNz
cy9DU1NTdHlsZVNoZWV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2hlZXQ6Omlz
TG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjphZGRTdWJyZXNvdXJj
ZVN0eWxlVVJMcyk6CisgICAgICAgICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JD
U1NBZ2VudDo6Y29sbGVjdFN0eWxlU2hlZXRzKToKKyAgICAgICAgKiBwYWdlL1BhZ2VTZXJpYWxp
emVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemVDU1NT
dHlsZVNoZWV0KToKKworICAgICAgICAgICAgVXNlIG1vcmUgc3BlY2lmaWMgQ1NTUnVsZSogc2lu
Y2UgdGhhdCdzIHdoYXQgd2UgZ2V0IGZyb20KKyAgICAgICAgICAgIENTU1N0eWxlU2hlZXQ6Oml0
ZW0oKSBub3cuCisKKyAgICAgICAgKiBjc3MvU3R5bGVTaGVldC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVNoZWV0Ojp+U3R5bGVTaGVldCk6CisgICAgICAgICogY3NzL0NTU1N0eWxlU2hl
ZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVldDo6fkNTU1N0eWxlU2hlZXQp
OgorICAgICAgICAqIHhtbC9YU0xTdHlsZVNoZWV0TGlieHNsdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpYU0xTdHlsZVNoZWV0Ojp+WFNMU3R5bGVTaGVldCk6CisgICAgICAgICogeG1sL1hTTFN0
eWxlU2hlZXRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYU0xTdHlsZVNoZWV0Ojp+WFNMU3R5
bGVTaGVldCk6CisKKyAgICAgICAgICAgIE9ycGhhbmluZyBsb2dpYyBmcm9tIH5TdHlsZVNoZWV0
KCkgbW92ZWQgdG8gc3ViY2xhc3MgZHRvcnMuCisKKyAgICAgICAgKiBjc3MvU3R5bGVTaGVldC5o
OgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNoZWV0Lmg6CisgICAgICAgIChXZWJDb3JlOjpDU1NT
dHlsZVNoZWV0OjpsZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVldDo6aXRl
bSk6CisgICAgICAgICogY3NzL0NTU1N0eWxlU2hlZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTU3R5bGVTaGVldDo6YXBwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2hlZXQ6
Omluc2VydCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpyZW1vdmUpOgorCisg
ICAgICAgICAgICBNb3ZlZCBmcm9tIFN0eWxlU2hlZXQgYW5kIGNoYW5nZWQgdG8gb25seSBhY2Nl
cHQgQ1NTUnVsZXMuCisKKyAgICAgICAgKiBjc3MvU3R5bGVTaGVldC5oOgorICAgICAgICAqIHht
bC9YU0xTdHlsZVNoZWV0Lmg6CisgICAgICAgIChXZWJDb3JlOjpYU0xTdHlsZVNoZWV0OjpsZW5n
dGgpOgorICAgICAgICAoV2ViQ29yZTo6WFNMU3R5bGVTaGVldDo6aXRlbSk6CisgICAgICAgIChX
ZWJDb3JlOjpYU0xTdHlsZVNoZWV0OjphcHBlbmQpOgorICAgICAgICAoV2ViQ29yZTo6WFNMU3R5
bGVTaGVldDo6aW5zZXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlhTTFN0eWxlU2hlZXQ6OnJlbW92
ZSk6CisKKyAgICAgICAgICAgIE1vdmVkIGZyb20gU3R5bGVTaGVldCB0aG91Z2ggc3RpbGwgdXNl
cyBTdHlsZUJhc2UuCisKKzIwMTEtMTAtMTQgIEFuZHJlYXMgS2xpbmcgIDxrbGluZ0B3ZWJraXQu
b3JnPgorCiAgICAgICAgIFN0cmljdGVyIG1hbmFnZW1lbnQgb2YgV2ViS2l0Q1NTS2V5ZnJhbWVS
dWxlcy4KICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcw
MTA5CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NTUnVsZUxp
c3RDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NSdWxlTGlzdEN1
c3RvbS5jcHAKaW5kZXggOTdlNjExMC4uMjhjY2IxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNDU1NSdWxlTGlzdEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNDU1NSdWxlTGlzdEN1c3RvbS5jcHAKQEAgLTI4LDggKzI4LDggQEAK
IAogI2luY2x1ZGUgIkNTU1J1bGUuaCIKICNpbmNsdWRlICJDU1NSdWxlTGlzdC5oIgorI2luY2x1
ZGUgIkNTU1N0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJKU05vZGUuaCIKLSNpbmNsdWRlICJTdHls
ZVNoZWV0LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKQEAgLTQwLDcgKzQwLDcgQEAgYm9v
bCBKU0NTU1J1bGVMaXN0T3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVJvb3RzKEpTQzo6SGFu
ZGxlPEpTQzo6VW5rbm93bj4gaGEKICAgICBKU0NTU1J1bGVMaXN0KiBqc0NTU1J1bGVMaXN0ID0g
c3RhdGljX2Nhc3Q8SlNDU1NSdWxlTGlzdCo+KGhhbmRsZS5nZXQoKS5hc0NlbGwoKSk7CiAgICAg
aWYgKCFqc0NTU1J1bGVMaXN0LT5oYXNDdXN0b21Qcm9wZXJ0aWVzKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAoU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IGpzQ1NTUnVsZUxpc3Qt
PmltcGwoKS0+c3R5bGVTaGVldCgpKQorICAgIGlmIChDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0
ID0ganNDU1NSdWxlTGlzdC0+aW1wbCgpLT5zdHlsZVNoZWV0KCkpCiAgICAgICAgIHJldHVybiB2
aXNpdG9yLmNvbnRhaW5zT3BhcXVlUm9vdChyb290KHN0eWxlU2hlZXQpKTsKICAgICBpZiAoQ1NT
UnVsZSogY3NzUnVsZSA9IGpzQ1NTUnVsZUxpc3QtPmltcGwoKS0+aXRlbSgwKSkKICAgICAgICAg
cmV0dXJuIHZpc2l0b3IuY29udGFpbnNPcGFxdWVSb290KHJvb3QoY3NzUnVsZSkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1J1bGUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NSdWxlLmgKaW5kZXggNjRhYTJlNC4uNjA0YzQ4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1J1bGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUnVsZS5oCkBAIC01
NiwxNCArNTYsMTMgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGFkZFN1YnJlc291cmNl
U3R5bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JikgeyB9CiAKKyAgICB2aXJ0dWFsIGJvb2wgaXNS
dWxlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgQ1NTUnVsZShD
U1NTdHlsZVNoZWV0KiBwYXJlbnQpCiAgICAgICAgIDogU3R5bGVCYXNlKHBhcmVudCkKICAgICB7
CiAgICAgfQotCi1wcml2YXRlOgotICAgIHZpcnR1YWwgYm9vbCBpc1J1bGUoKSBjb25zdCB7IHJl
dHVybiB0cnVlOyB9CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTUnVsZUxpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1J1bGVMaXN0LmNwcAppbmRleCAzMTU5MDc5Li4wMDcxYzZiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTUnVsZUxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NS
dWxlTGlzdC5jcHAKQEAgLTIyLDEwICsyMiw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiQ1NTUnVsZUxpc3QuaCIKIAotI2luY2x1ZGUgIkNTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uLmgiCiAjaW5jbHVkZSAiQ1NTUnVsZS5oIgotI2luY2x1ZGUgIlN0eWxlU2hlZXQuaCIKLSNp
bmNsdWRlICJXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaCIKKyNpbmNsdWRlICJDU1NTdHlsZVNoZWV0
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzMsMTUgKzMxLDE1IEBAIENTU1J1bGVM
aXN0OjpDU1NSdWxlTGlzdCgpCiB7CiB9CiAKLUNTU1J1bGVMaXN0OjpDU1NSdWxlTGlzdChTdHls
ZVNoZWV0KiBzdHlsZVNoZWV0LCBib29sIG9taXRDaGFyc2V0UnVsZXMpCitDU1NSdWxlTGlzdDo6
Q1NTUnVsZUxpc3QoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCwgYm9vbCBvbWl0Q2hhcnNldFJ1
bGVzKQogICAgIDogbV9zdHlsZVNoZWV0KHN0eWxlU2hlZXQpCiB7CiAgICAgaWYgKHN0eWxlU2hl
ZXQgJiYgb21pdENoYXJzZXRSdWxlcykgewogICAgICAgICBtX3N0eWxlU2hlZXQgPSAwOwogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3R5bGVTaGVldC0+bGVuZ3RoKCk7ICsraSkg
ewotICAgICAgICAgICAgU3R5bGVCYXNlKiBzdHlsZSA9IHN0eWxlU2hlZXQtPml0ZW0oaSk7Ci0g
ICAgICAgICAgICBpZiAoc3R5bGUtPmlzUnVsZSgpICYmICFzdHlsZS0+aXNDaGFyc2V0UnVsZSgp
KQotICAgICAgICAgICAgICAgIGFwcGVuZChzdGF0aWNfY2FzdDxDU1NSdWxlKj4oc3R5bGUpKTsK
KyAgICAgICAgICAgIENTU1J1bGUqIHJ1bGUgPSBzdHlsZVNoZWV0LT5pdGVtKGkpOworICAgICAg
ICAgICAgaWYgKCFydWxlLT5pc0NoYXJzZXRSdWxlKCkpCisgICAgICAgICAgICAgICAgYXBwZW5k
KHN0YXRpY19jYXN0PENTU1J1bGUqPihydWxlKSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC01
NywxMSArNTUsOCBAQCB1bnNpZ25lZCBDU1NSdWxlTGlzdDo6bGVuZ3RoKCkgY29uc3QKIAogQ1NT
UnVsZSogQ1NTUnVsZUxpc3Q6Oml0ZW0odW5zaWduZWQgaW5kZXgpCiB7Ci0gICAgaWYgKG1fc3R5
bGVTaGVldCkgewotICAgICAgICBTdHlsZUJhc2UqIHJ1bGUgPSBtX3N0eWxlU2hlZXQtPml0ZW0o
aW5kZXgpOwotICAgICAgICBBU1NFUlQoIXJ1bGUgfHwgcnVsZS0+aXNSdWxlKCkpOwotICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Q1NTUnVsZSo+KHJ1bGUpOwotICAgIH0KKyAgICBpZiAobV9z
dHlsZVNoZWV0KQorICAgICAgICByZXR1cm4gbV9zdHlsZVNoZWV0LT5pdGVtKGluZGV4KTsKIAog
ICAgIGlmIChpbmRleCA8IG1fbHN0Q1NTUnVsZXMuc2l6ZSgpKQogICAgICAgICByZXR1cm4gbV9s
c3RDU1NSdWxlc1tpbmRleF0uZ2V0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTUnVsZUxpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NSdWxlTGlzdC5oCmluZGV4IDA4
NmMxODMuLjY1NmQxOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NSdWxlTGlz
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NSdWxlTGlzdC5oCkBAIC0zMCwxMSArMzAs
MTEgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ1NTUnVsZTsKLWNsYXNzIFN0eWxl
U2hlZXQ7CitjbGFzcyBDU1NTdHlsZVNoZWV0OwogCiBjbGFzcyBDU1NSdWxlTGlzdCA6IHB1Ymxp
YyBSZWZDb3VudGVkPENTU1J1bGVMaXN0PiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8Q1NTUnVsZUxpc3Q+IGNyZWF0ZShTdHlsZVNoZWV0KiBzdHlsZVNoZWV0LCBib29sIG9taXRD
aGFyc2V0UnVsZXMgPSBmYWxzZSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4g
Y3JlYXRlKENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQsIGJvb2wgb21pdENoYXJzZXRSdWxlcyA9
IGZhbHNlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NSdWxlTGlzdChz
dHlsZVNoZWV0LCBvbWl0Q2hhcnNldFJ1bGVzKSk7CiAgICAgfQpAQCAtNTMsMTMgKzUzLDEzIEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgYXBwZW5kKENTU1J1bGUqKTsKIAotICAgIFN0eWxlU2hlZXQq
IHN0eWxlU2hlZXQoKSB7IHJldHVybiBtX3N0eWxlU2hlZXQuZ2V0KCk7IH0KKyAgICBDU1NTdHls
ZVNoZWV0KiBzdHlsZVNoZWV0KCkgeyByZXR1cm4gbV9zdHlsZVNoZWV0LmdldCgpOyB9CiAKIHBy
aXZhdGU6CiAgICAgQ1NTUnVsZUxpc3QoKTsKLSAgICBDU1NSdWxlTGlzdChTdHlsZVNoZWV0Kiwg
Ym9vbCBvbWl0Q2hhcnNldFJ1bGVzKTsKKyAgICBDU1NSdWxlTGlzdChDU1NTdHlsZVNoZWV0Kiwg
Ym9vbCBvbWl0Q2hhcnNldFJ1bGVzKTsKIAotICAgIFJlZlB0cjxTdHlsZVNoZWV0PiBtX3N0eWxl
U2hlZXQ7CisgICAgUmVmUHRyPENTU1N0eWxlU2hlZXQ+IG1fc3R5bGVTaGVldDsKICAgICBWZWN0
b3I8UmVmUHRyPENTU1J1bGU+ID4gbV9sc3RDU1NSdWxlczsgLy8gRklYTUU6IFdhbnQgdG8gZWxp
bWluYXRlLCBidXQgdXNlZCBieSBJRSBydWxlcygpIGV4dGVuc2lvbiBhbmQgc3RpbGwgdXNlZCBi
eSBtZWRpYSBydWxlcy4KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NT
dHlsZVNlbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNw
cAppbmRleCAzZTI0NjljLi45M2ViYzVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTU3R5bGVTZWxlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2Vs
ZWN0b3IuY3BwCkBAIC0xOTk0LDE2ICsxOTk0LDE2IEBAIHZvaWQgUnVsZVNldDo6YWRkUnVsZXNG
cm9tU2hlZXQoQ1NTU3R5bGVTaGVldCogc2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3Im
CiAgICAgaW50IGxlbiA9IHNoZWV0LT5sZW5ndGgoKTsKIAogICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbGVuOyBpKyspIHsKLSAgICAgICAgU3R5bGVCYXNlKiBpdGVtID0gc2hlZXQtPml0ZW0oaSk7
Ci0gICAgICAgIGlmIChpdGVtLT5pc1N0eWxlUnVsZSgpKQotICAgICAgICAgICAgYWRkU3R5bGVS
dWxlKHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+KGl0ZW0pKTsKLSAgICAgICAgZWxzZSBpZiAo
aXRlbS0+aXNJbXBvcnRSdWxlKCkpIHsKLSAgICAgICAgICAgIENTU0ltcG9ydFJ1bGUqIGltcG9y
dCA9IHN0YXRpY19jYXN0PENTU0ltcG9ydFJ1bGUqPihpdGVtKTsKKyAgICAgICAgQ1NTUnVsZSog
cnVsZSA9IHNoZWV0LT5pdGVtKGkpOworICAgICAgICBpZiAocnVsZS0+aXNTdHlsZVJ1bGUoKSkK
KyAgICAgICAgICAgIGFkZFN0eWxlUnVsZShzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihydWxl
KSk7CisgICAgICAgIGVsc2UgaWYgKHJ1bGUtPmlzSW1wb3J0UnVsZSgpKSB7CisgICAgICAgICAg
ICBDU1NJbXBvcnRSdWxlKiBpbXBvcnQgPSBzdGF0aWNfY2FzdDxDU1NJbXBvcnRSdWxlKj4ocnVs
ZSk7CiAgICAgICAgICAgICBpZiAoIWltcG9ydC0+bWVkaWEoKSB8fCBtZWRpdW0uZXZhbChpbXBv
cnQtPm1lZGlhKCksIHN0eWxlU2VsZWN0b3IpKQogICAgICAgICAgICAgICAgIGFkZFJ1bGVzRnJv
bVNoZWV0KGltcG9ydC0+c3R5bGVTaGVldCgpLCBtZWRpdW0sIHN0eWxlU2VsZWN0b3IpOwogICAg
ICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGl0ZW0tPmlzTWVkaWFSdWxlKCkpIHsKLSAgICAgICAg
ICAgIENTU01lZGlhUnVsZSogciA9IHN0YXRpY19jYXN0PENTU01lZGlhUnVsZSo+KGl0ZW0pOwor
ICAgICAgICBlbHNlIGlmIChydWxlLT5pc01lZGlhUnVsZSgpKSB7CisgICAgICAgICAgICBDU1NN
ZWRpYVJ1bGUqIHIgPSBzdGF0aWNfY2FzdDxDU1NNZWRpYVJ1bGUqPihydWxlKTsKICAgICAgICAg
ICAgIENTU1J1bGVMaXN0KiBydWxlcyA9IHItPmNzc1J1bGVzKCk7CiAKICAgICAgICAgICAgIGlm
ICgoIXItPm1lZGlhKCkgfHwgbWVkaXVtLmV2YWwoci0+bWVkaWEoKSwgc3R5bGVTZWxlY3Rvcikp
ICYmIHJ1bGVzKSB7CkBAIC0yMDIzLDEyICsyMDIzLDEyIEBAIHZvaWQgUnVsZVNldDo6YWRkUnVs
ZXNGcm9tU2hlZXQoQ1NTU3R5bGVTaGVldCogc2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0
b3ImCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9ICAgLy8gZm9yIHJ1
bGVzCiAgICAgICAgICAgICB9ICAgLy8gaWYgcnVsZXMKLSAgICAgICAgfSBlbHNlIGlmIChpdGVt
LT5pc0ZvbnRGYWNlUnVsZSgpICYmIHN0eWxlU2VsZWN0b3IpIHsKKyAgICAgICAgfSBlbHNlIGlm
IChydWxlLT5pc0ZvbnRGYWNlUnVsZSgpICYmIHN0eWxlU2VsZWN0b3IpIHsKICAgICAgICAgICAg
IC8vIEFkZCB0aGlzIGZvbnQgZmFjZSB0byBvdXIgc2V0LgotICAgICAgICAgICAgY29uc3QgQ1NT
Rm9udEZhY2VSdWxlKiBmb250RmFjZVJ1bGUgPSBzdGF0aWNfY2FzdDxDU1NGb250RmFjZVJ1bGUq
PihpdGVtKTsKKyAgICAgICAgICAgIGNvbnN0IENTU0ZvbnRGYWNlUnVsZSogZm9udEZhY2VSdWxl
ID0gc3RhdGljX2Nhc3Q8Q1NTRm9udEZhY2VSdWxlKj4ocnVsZSk7CiAgICAgICAgICAgICBzdHls
ZVNlbGVjdG9yLT5mb250U2VsZWN0b3IoKS0+YWRkRm9udEZhY2VSdWxlKGZvbnRGYWNlUnVsZSk7
Ci0gICAgICAgIH0gZWxzZSBpZiAoaXRlbS0+aXNLZXlmcmFtZXNSdWxlKCkpCi0gICAgICAgICAg
ICBzdHlsZVNlbGVjdG9yLT5hZGRLZXlmcmFtZVN0eWxlKHN0YXRpY19jYXN0PFdlYktpdENTU0tl
eWZyYW1lc1J1bGUqPihpdGVtKSk7CisgICAgICAgIH0gZWxzZSBpZiAocnVsZS0+aXNLZXlmcmFt
ZXNSdWxlKCkpCisgICAgICAgICAgICBzdHlsZVNlbGVjdG9yLT5hZGRLZXlmcmFtZVN0eWxlKHN0
YXRpY19jYXN0PFdlYktpdENTU0tleWZyYW1lc1J1bGUqPihydWxlKSk7CiAgICAgfQogICAgIGlm
IChtX2F1dG9TaHJpbmtUb0ZpdEVuYWJsZWQpCiAgICAgICAgIHNocmlua1RvRml0KCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTU3R5bGVTaGVldC5jcHAKaW5kZXggMjdjMDFlMy4uZTE0ZjkyYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNwcApAQCAtODUsNiArODUsMzkgQEAgQ1NTU3R5bGVT
aGVldDo6Q1NTU3R5bGVTaGVldChDU1NSdWxlKiBvd25lclJ1bGUsIGNvbnN0IFN0cmluZyYgaHJl
ZiwgY29uc3QgS1VSTCYKIAogQ1NTU3R5bGVTaGVldDo6fkNTU1N0eWxlU2hlZXQoKQogeworICAg
IC8vIEZvciBzdHlsZSBydWxlcyBvdXRzaWRlIHRoZSBkb2N1bWVudCwgLnBhcmVudFN0eWxlU2hl
ZXQgY2FuIGJlY29tZSBudWxsIGV2ZW4gaWYgdGhlIHN0eWxlIHJ1bGUKKyAgICAvLyBpcyBzdGls
bCBvYnNlcnZhYmxlIGZyb20gSmF2YVNjcmlwdC4gVGhpcyBtYXRjaGVzIHRoZSBiZWhhdmlvciBv
ZiAucGFyZW50Tm9kZSBmb3Igbm9kZXMsIGJ1dAorICAgIC8vIGl0J3Mgbm90IGlkZWFsIGJlY2F1
c2UgaXQgbWFrZXMgdGhlIENTU09NJ3MgYmVoYXZpb3IgZGVwZW5kIG9uIHRoZSB0aW1pbmcgb2Yg
Z2FyYmFnZSBjb2xsZWN0aW9uLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGgo
KTsgKytpKSB7CisgICAgICAgIEFTU0VSVChpdGVtKGkpLT5wYXJlbnQoKSA9PSB0aGlzKTsKKyAg
ICAgICAgaXRlbShpKS0+c2V0UGFyZW50KDApOworICAgIH0KK30KKwordm9pZCBDU1NTdHlsZVNo
ZWV0OjphcHBlbmQoUGFzc1JlZlB0cjxDU1NSdWxlPiBjaGlsZCkKK3sKKyAgICBDU1NSdWxlKiBj
ID0gY2hpbGQuZ2V0KCk7CisgICAgQVNTRVJUKGMtPmlzUnVsZSgpKTsKKyAgICBtX2NoaWxkcmVu
LmFwcGVuZChjaGlsZCk7CisgICAgYy0+aW5zZXJ0ZWRJbnRvUGFyZW50KCk7Cit9CisKK3ZvaWQg
Q1NTU3R5bGVTaGVldDo6aW5zZXJ0KHVuc2lnbmVkIGluZGV4LCBQYXNzUmVmUHRyPENTU1J1bGU+
IGNoaWxkKQoreworICAgIENTU1J1bGUqIGMgPSBjaGlsZC5nZXQoKTsKKyAgICBBU1NFUlQoYy0+
aXNSdWxlKCkpOworICAgIGlmIChpbmRleCA+PSBsZW5ndGgoKSkKKyAgICAgICAgbV9jaGlsZHJl
bi5hcHBlbmQoY2hpbGQpOworICAgIGVsc2UKKyAgICAgICAgbV9jaGlsZHJlbi5pbnNlcnQoaW5k
ZXgsIGNoaWxkKTsKKyAgICBjLT5pbnNlcnRlZEludG9QYXJlbnQoKTsKK30KKwordm9pZCBDU1NT
dHlsZVNoZWV0OjpyZW1vdmUodW5zaWduZWQgaW5kZXgpCit7CisgICAgaWYgKGluZGV4ID49IGxl
bmd0aCgpKQorICAgICAgICByZXR1cm47CisgICAgbV9jaGlsZHJlbi5yZW1vdmUoaW5kZXgpOwog
fQogCiBDU1NSdWxlICpDU1NTdHlsZVNoZWV0Ojpvd25lclJ1bGUoKSBjb25zdApAQCAtMjA5LDcg
KzI0Miw3IEBAIGJvb2wgQ1NTU3R5bGVTaGVldDo6aXNMb2FkaW5nKCkKIHsKICAgICB1bnNpZ25l
ZCBsZW4gPSBsZW5ndGgoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuOyArK2kp
IHsKLSAgICAgICAgU3R5bGVCYXNlKiBydWxlID0gaXRlbShpKTsKKyAgICAgICAgQ1NTUnVsZSog
cnVsZSA9IGl0ZW0oaSk7CiAgICAgICAgIGlmIChydWxlLT5pc0ltcG9ydFJ1bGUoKSAmJiBzdGF0
aWNfY2FzdDxDU1NJbXBvcnRSdWxlKj4ocnVsZSktPmlzTG9hZGluZygpKQogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMjg5LDExICszMjIsNyBAQCB2b2lkIENTU1N0eWxlU2hl
ZXQ6OmFkZFN1YnJlc291cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzKQogICAg
ICAgICBDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gc3R5bGVTaGVldFF1ZXVlLnRha2VGaXJz
dCgpOwogCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdHlsZVNoZWV0LT5sZW5n
dGgoKTsgKytpKSB7Ci0gICAgICAgICAgICBTdHlsZUJhc2UqIHN0eWxlQmFzZSA9IHN0eWxlU2hl
ZXQtPml0ZW0oaSk7Ci0gICAgICAgICAgICBpZiAoIXN0eWxlQmFzZS0+aXNSdWxlKCkpCi0gICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIENTU1J1bGUq
IHJ1bGUgPSBzdGF0aWNfY2FzdDxDU1NSdWxlKj4oc3R5bGVCYXNlKTsKKyAgICAgICAgICAgIENT
U1J1bGUqIHJ1bGUgPSBzdHlsZVNoZWV0LT5pdGVtKGkpOwogICAgICAgICAgICAgaWYgKHJ1bGUt
PmlzSW1wb3J0UnVsZSgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKENTU1N0eWxlU2hlZXQqIHJ1
bGVTdHlsZVNoZWV0ID0gc3RhdGljX2Nhc3Q8Q1NTSW1wb3J0UnVsZSo+KHJ1bGUpLT5zdHlsZVNo
ZWV0KCkpCiAgICAgICAgICAgICAgICAgICAgIHN0eWxlU2hlZXRRdWV1ZS5hcHBlbmQocnVsZVN0
eWxlU2hlZXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQu
aCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmgKaW5kZXggMzVhNDUxMC4uNmRj
YjM0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5oCkBAIC0xMDUsNiArMTA1LDEzIEBA
IHB1YmxpYzoKICAgICB2b2lkIHNldEhhc1N5bnRhY3RpY2FsbHlWYWxpZENTU0hlYWRlcihib29s
IGIpIHsgbV9oYXNTeW50YWN0aWNhbGx5VmFsaWRDU1NIZWFkZXIgPSBiOyB9CiAgICAgYm9vbCBo
YXNTeW50YWN0aWNhbGx5VmFsaWRDU1NIZWFkZXIoKSBjb25zdCB7IHJldHVybiBtX2hhc1N5bnRh
Y3RpY2FsbHlWYWxpZENTU0hlYWRlcjsgfQogCisgICAgdm9pZCBhcHBlbmQoUGFzc1JlZlB0cjxD
U1NSdWxlPik7CisgICAgdm9pZCBpbnNlcnQodW5zaWduZWQgaW5kZXgsIFBhc3NSZWZQdHI8Q1NT
UnVsZT4pOworICAgIHZvaWQgcmVtb3ZlKHVuc2lnbmVkIGluZGV4KTsKKworICAgIHVuc2lnbmVk
IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW4uc2l6ZSgpOyB9CisgICAgQ1NTUnVs
ZSogaXRlbSh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gaW5kZXggPCBsZW5ndGgoKSA/IG1fY2hp
bGRyZW4uYXQoaW5kZXgpLmdldCgpIDogMDsgfQorCiBwcml2YXRlOgogICAgIENTU1N0eWxlU2hl
ZXQoTm9kZSogb3duZXJOb2RlLCBjb25zdCBTdHJpbmcmIG9yaWdpbmFsVVJMLCBjb25zdCBLVVJM
JiBmaW5hbFVSTCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KTsKICAgICBDU1NTdHlsZVNoZWV0KENT
U1N0eWxlU2hlZXQqIHBhcmVudFNoZWV0LCBjb25zdCBTdHJpbmcmIG9yaWdpbmFsVVJMLCBjb25z
dCBLVVJMJiBmaW5hbFVSTCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KTsKQEAgLTExMyw2ICsxMjAs
NyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc0NTU1N0eWxlU2hlZXQoKSBjb25zdCB7
IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBTdHJpbmcgdHlwZSgpIGNvbnN0IHsgcmV0dXJu
ICJ0ZXh0L2NzcyI7IH0KIAorICAgIFZlY3RvcjxSZWZQdHI8Q1NTUnVsZT4gPiBtX2NoaWxkcmVu
OwogICAgIE93blB0cjxDU1NOYW1lc3BhY2U+IG1fbmFtZXNwYWNlczsKICAgICBTdHJpbmcgbV9j
aGFyc2V0OwogICAgIGJvb2wgbV9sb2FkQ29tcGxldGVkIDogMTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNo
ZWV0LmNwcAppbmRleCA4ZjQwM2E3Li4yNTJjODM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVTaGVldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXQu
Y3BwCkBAIC01NiwzOCArNTYsNiBAQCBTdHlsZVNoZWV0Ojp+U3R5bGVTaGVldCgpCiB7CiAgICAg
aWYgKG1fbWVkaWEpCiAgICAgICAgIG1fbWVkaWEtPnNldFBhcmVudCgwKTsKLQotICAgIC8vIEZv
ciBzdHlsZSBydWxlcyBvdXRzaWRlIHRoZSBkb2N1bWVudCwgLnBhcmVudFN0eWxlU2hlZXQgY2Fu
IGJlY29tZSBudWxsIGV2ZW4gaWYgdGhlIHN0eWxlIHJ1bGUKLSAgICAvLyBpcyBzdGlsbCBvYnNl
cnZhYmxlIGZyb20gSmF2YVNjcmlwdC4gVGhpcyBtYXRjaGVzIHRoZSBiZWhhdmlvciBvZiAucGFy
ZW50Tm9kZSBmb3Igbm9kZXMsIGJ1dAotICAgIC8vIGl0J3Mgbm90IGlkZWFsIGJlY2F1c2UgaXQg
bWFrZXMgdGhlIENTU09NJ3MgYmVoYXZpb3IgZGVwZW5kIG9uIHRoZSB0aW1pbmcgb2YgZ2FyYmFn
ZSBjb2xsZWN0aW9uLgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGgoKTsgKytp
KSB7Ci0gICAgICAgIEFTU0VSVChpdGVtKGkpLT5wYXJlbnQoKSA9PSB0aGlzKTsKLSAgICAgICAg
aXRlbShpKS0+c2V0UGFyZW50KDApOwotICAgIH0KLX0KLQotdm9pZCBTdHlsZVNoZWV0OjphcHBl
bmQoUGFzc1JlZlB0cjxTdHlsZUJhc2U+IGNoaWxkKQotewotICAgIFN0eWxlQmFzZSogYyA9IGNo
aWxkLmdldCgpOwotICAgIG1fY2hpbGRyZW4uYXBwZW5kKGNoaWxkKTsKLSAgICBjLT5pbnNlcnRl
ZEludG9QYXJlbnQoKTsKLX0KLQotdm9pZCBTdHlsZVNoZWV0OjppbnNlcnQodW5zaWduZWQgaW5k
ZXgsIFBhc3NSZWZQdHI8U3R5bGVCYXNlPiBjaGlsZCkKLXsKLSAgICBTdHlsZUJhc2UqIGMgPSBj
aGlsZC5nZXQoKTsKLSAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKCkpCi0gICAgICAgIG1fY2hpbGRy
ZW4uYXBwZW5kKGNoaWxkKTsKLSAgICBlbHNlCi0gICAgICAgIG1fY2hpbGRyZW4uaW5zZXJ0KGlu
ZGV4LCBjaGlsZCk7Ci0gICAgYy0+aW5zZXJ0ZWRJbnRvUGFyZW50KCk7Ci19Ci0KLXZvaWQgU3R5
bGVTaGVldDo6cmVtb3ZlKHVuc2lnbmVkIGluZGV4KQotewotICAgIGlmIChpbmRleCA+PSBsZW5n
dGgoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY2hpbGRyZW4ucmVtb3ZlKGluZGV4KTsKIH0K
IAogU3R5bGVTaGVldCogU3R5bGVTaGVldDo6cGFyZW50U3R5bGVTaGVldCgpIGNvbnN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldC5oIGIvU291cmNlL1dlYkNvcmUv
Y3NzL1N0eWxlU2hlZXQuaAppbmRleCA4MmU2YmMyLi4xNWRlYmY1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZVNoZWV0LmgKQEAgLTM2LDEzICszNiw2IEBAIGNsYXNzIFN0eWxlU2hlZXQgOiBwdWJsaWMgU3R5
bGVCYXNlIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5TdHlsZVNoZWV0KCk7CiAKLSAgICB1bnNp
Z25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2NoaWxkcmVuLnNpemUoKTsgfQotICAgIFN0
eWxlQmFzZSogaXRlbSh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gaW5kZXggPCBsZW5ndGgoKSA/
IG1fY2hpbGRyZW4uYXQoaW5kZXgpLmdldCgpIDogMDsgfQotCi0gICAgdm9pZCBhcHBlbmQoUGFz
c1JlZlB0cjxTdHlsZUJhc2U+KTsKLSAgICB2b2lkIGluc2VydCh1bnNpZ25lZCBpbmRleCwgUGFz
c1JlZlB0cjxTdHlsZUJhc2U+KTsKLSAgICB2b2lkIHJlbW92ZSh1bnNpZ25lZCBpbmRleCk7Ci0K
ICAgICBib29sIGRpc2FibGVkKCkgY29uc3QgeyByZXR1cm4gbV9kaXNhYmxlZDsgfQogICAgIHZv
aWQgc2V0RGlzYWJsZWQoYm9vbCBkaXNhYmxlZCkgeyBtX2Rpc2FibGVkID0gZGlzYWJsZWQ7IHN0
eWxlU2hlZXRDaGFuZ2VkKCk7IH0KIApAQCAtODAsNyArNzMsNiBAQCBwcm90ZWN0ZWQ6CiBwcml2
YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc1N0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiB0cnVl
OyB9CiAKLSAgICBWZWN0b3I8UmVmUHRyPFN0eWxlQmFzZT4gPiBtX2NoaWxkcmVuOwogICAgIE5v
ZGUqIG1fcGFyZW50Tm9kZTsKICAgICBTdHJpbmcgbV9vcmlnaW5hbFVSTDsKICAgICBLVVJMIG1f
ZmluYWxVUkw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q1NTQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50
LmNwcAppbmRleCBkY2RkYzExLi41YmQ3NjE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKQEAgLTQ5MCwxMSArNDkwLDExIEBAIHZvaWQgSW5z
cGVjdG9yQ1NTQWdlbnQ6OmNvbGxlY3RTdHlsZVNoZWV0cyhDU1NTdHlsZVNoZWV0KiBzdHlsZVNo
ZWV0LCBJbnNwZWN0b3JBCiAgICAgSW5zcGVjdG9yU3R5bGVTaGVldCogaW5zcGVjdG9yU3R5bGVT
aGVldCA9IGJpbmRTdHlsZVNoZWV0KHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihzdHlsZVNo
ZWV0KSk7CiAgICAgcmVzdWx0LT5wdXNoT2JqZWN0KGluc3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxk
T2JqZWN0Rm9yU3R5bGVTaGVldEluZm8oKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMCwgc2l6
ZSA9IHN0eWxlU2hlZXQtPmxlbmd0aCgpOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIFN0eWxl
QmFzZSogc3R5bGVCYXNlID0gc3R5bGVTaGVldC0+aXRlbShpKTsKLSAgICAgICAgaWYgKHN0eWxl
QmFzZS0+aXNJbXBvcnRSdWxlKCkpIHsKLSAgICAgICAgICAgIFN0eWxlQmFzZSogaW1wb3J0ZWRT
dHlsZVNoZWV0ID0gc3RhdGljX2Nhc3Q8Q1NTSW1wb3J0UnVsZSo+KHN0eWxlQmFzZSktPnN0eWxl
U2hlZXQoKTsKLSAgICAgICAgICAgIGlmIChpbXBvcnRlZFN0eWxlU2hlZXQgJiYgaW1wb3J0ZWRT
dHlsZVNoZWV0LT5pc0NTU1N0eWxlU2hlZXQoKSkKLSAgICAgICAgICAgICAgICBjb2xsZWN0U3R5
bGVTaGVldHMoc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KGltcG9ydGVkU3R5bGVTaGVldCks
IHJlc3VsdCk7CisgICAgICAgIENTU1J1bGUqIHJ1bGUgPSBzdHlsZVNoZWV0LT5pdGVtKGkpOwor
ICAgICAgICBpZiAocnVsZS0+aXNJbXBvcnRSdWxlKCkpIHsKKyAgICAgICAgICAgIENTU1N0eWxl
U2hlZXQqIGltcG9ydGVkU3R5bGVTaGVldCA9IHN0YXRpY19jYXN0PENTU0ltcG9ydFJ1bGUqPihy
dWxlKS0+c3R5bGVTaGVldCgpOworICAgICAgICAgICAgaWYgKGltcG9ydGVkU3R5bGVTaGVldCkK
KyAgICAgICAgICAgICAgICBjb2xsZWN0U3R5bGVTaGVldHMoaW1wb3J0ZWRTdHlsZVNoZWV0LCBy
ZXN1bHQpOwogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9QYWdlU2VyaWFsaXplci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxp
emVyLmNwcAppbmRleCA5YmFlMTdhLi4wZTgxN2FhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VT
ZXJpYWxpemVyLmNwcApAQCAtMjU2LDI1ICsyNTYsMjUgQEAgdm9pZCBQYWdlU2VyaWFsaXplcjo6
c2VyaWFsaXplQ1NTU3R5bGVTaGVldChDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0LCBjb25zdCBL
VVIKIHsKICAgICBTdHJpbmdCdWlsZGVyIGNzc1RleHQ7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHN0eWxlU2hlZXQtPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgU3R5bGVCYXNlKiBp
dGVtID0gc3R5bGVTaGVldC0+aXRlbShpKTsKLSAgICAgICAgU3RyaW5nIGl0ZW1UZXh0ID0gaXRl
bS0+Y3NzVGV4dCgpOworICAgICAgICBDU1NSdWxlKiBydWxlID0gc3R5bGVTaGVldC0+aXRlbShp
KTsKKyAgICAgICAgU3RyaW5nIGl0ZW1UZXh0ID0gcnVsZS0+Y3NzVGV4dCgpOwogICAgICAgICBp
ZiAoIWl0ZW1UZXh0LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgY3NzVGV4dC5hcHBlbmQoaXRl
bVRleHQpOwogICAgICAgICAgICAgaWYgKGkgPCBzdHlsZVNoZWV0LT5sZW5ndGgoKSAtIDEpCiAg
ICAgICAgICAgICAgICAgY3NzVGV4dC5hcHBlbmQoIlxuXG4iKTsKICAgICAgICAgfQogICAgICAg
ICAvLyBTb21lIHJ1bGVzIGhhdmUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGVtIHRoYXQg
d2UgbmVlZCB0byByZXRyaWV2ZS4KLSAgICAgICAgaWYgKGl0ZW0tPmlzSW1wb3J0UnVsZSgpKSB7
Ci0gICAgICAgICAgICBDU1NJbXBvcnRSdWxlKiBpbXBvcnRSdWxlID0gc3RhdGljX2Nhc3Q8Q1NT
SW1wb3J0UnVsZSo+KGl0ZW0pOworICAgICAgICBpZiAocnVsZS0+aXNJbXBvcnRSdWxlKCkpIHsK
KyAgICAgICAgICAgIENTU0ltcG9ydFJ1bGUqIGltcG9ydFJ1bGUgPSBzdGF0aWNfY2FzdDxDU1NJ
bXBvcnRSdWxlKj4ocnVsZSk7CiAgICAgICAgICAgICBLVVJMIGltcG9ydFVSTCA9IHN0eWxlU2hl
ZXQtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGltcG9ydFJ1bGUtPmhyZWYoKSk7CiAgICAgICAg
ICAgICBpZiAobV9yZXNvdXJjZVVSTHMuY29udGFpbnMoaW1wb3J0VVJMKSkKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgIHNlcmlhbGl6ZUNTU1N0eWxlU2hlZXQoaW1wb3J0
UnVsZS0+c3R5bGVTaGVldCgpLCBpbXBvcnRVUkwpOwotICAgICAgICB9IGVsc2UgaWYgKGl0ZW0t
PmlzRm9udEZhY2VSdWxlKCkpIHsKKyAgICAgICAgfSBlbHNlIGlmIChydWxlLT5pc0ZvbnRGYWNl
UnVsZSgpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIGZvbnQgZmFj
ZSBydWxlLiBJdCBpcyBub3QgY2xlYXIgdG8gbWUgYXQgdGhpcyBwb2ludCBpZiB0aGUgYWN0dWFs
IG90Zi9lb3QgZmlsZSBjYW4KICAgICAgICAgICAgIC8vIGJlIHJldHJpZXZlZCBmcm9tIHRoZSBD
U1NGb250RmFjZVJ1bGUgb2JqZWN0LgotICAgICAgICB9IGVsc2UgaWYgKGl0ZW0tPmlzU3R5bGVS
dWxlKCkpCi0gICAgICAgICAgICByZXRyaWV2ZVJlc291cmNlc0ZvckNTU1J1bGUoc3RhdGljX2Nh
c3Q8Q1NTU3R5bGVSdWxlKj4oaXRlbSkpOworICAgICAgICB9IGVsc2UgaWYgKHJ1bGUtPmlzU3R5
bGVSdWxlKCkpCisgICAgICAgICAgICByZXRyaWV2ZVJlc291cmNlc0ZvckNTU1J1bGUoc3RhdGlj
X2Nhc3Q8Q1NTU3R5bGVSdWxlKj4ocnVsZSkpOwogICAgIH0KIAogICAgIGlmICh1cmwuaXNWYWxp
ZCgpICYmICFtX3Jlc291cmNlVVJMcy5jb250YWlucyh1cmwpKSB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS94bWwvWFNMU3R5bGVTaGVldC5oIGIvU291cmNlL1dlYkNvcmUveG1sL1hTTFN0
eWxlU2hlZXQuaAppbmRleCBiMzZhYzFkLi5lNTBkMjhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS94bWwvWFNMU3R5bGVTaGVldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3htbC9YU0xTdHls
ZVNoZWV0LmgKQEAgLTU2LDYgKzU2LDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFhTTFN0eWxlU2hlZXQocGFyZW50Tm9kZSwgZmluYWxVUkwuc3RyaW5nKCksIGZpbmFs
VVJMLCB0cnVlKSk7CiAgICAgfQogCisgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1
cm4gbV9jaGlsZHJlbi5zaXplKCk7IH0KKyAgICBTdHlsZUJhc2UqIGl0ZW0odW5zaWduZWQgaW5k
ZXgpIHsgcmV0dXJuIGluZGV4IDwgbGVuZ3RoKCkgPyBtX2NoaWxkcmVuLmF0KGluZGV4KS5nZXQo
KSA6IDA7IH0KKwogICAgIC8vIFRha2luZyBhbiBhcmJpdHJhcnkgbm9kZSBpcyB1bnNhZmUsIGJl
Y2F1c2Ugb3duZXIgbm9kZSBwb2ludGVyIGNhbiBiZWNvbWUgc3RhbGUuCiAgICAgLy8gWFNMVFBy
b2Nlc3NvciBlbnN1cmVzIHRoYXQgdGhlIHN0eWxlc2hlZXQgZG9lc24ndCBvdXRsaXZlIGl0cyBw
YXJlbnQsIGluIHBhcnQgYnkgbm90IGV4cG9zaW5nIGl0IHRvIEphdmFTY3JpcHQuCiAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8WFNMU3R5bGVTaGVldD4gY3JlYXRlRm9yWFNMVFByb2Nlc3NvcihOb2Rl
KiBwYXJlbnROb2RlLCBjb25zdCBTdHJpbmcmIG9yaWdpbmFsVVJMLCBjb25zdCBLVVJMJiBmaW5h
bFVSTCkKQEAgLTk3LDExICsxMDAsMzcgQEAgcHVibGljOgogICAgIGJvb2wgcHJvY2Vzc2VkKCkg
Y29uc3QgeyByZXR1cm4gbV9wcm9jZXNzZWQ7IH0KIAogcHJpdmF0ZToKKyAgICB2b2lkIGFwcGVu
ZChQYXNzUmVmUHRyPFN0eWxlQmFzZT4gY2hpbGQpCisgICAgeworICAgICAgICBTdHlsZUJhc2Uq
IGMgPSBjaGlsZC5nZXQoKTsKKyAgICAgICAgbV9jaGlsZHJlbi5hcHBlbmQoY2hpbGQpOworICAg
ICAgICBjLT5pbnNlcnRlZEludG9QYXJlbnQoKTsKKyAgICB9CisKKyAgICB2b2lkIGluc2VydCh1
bnNpZ25lZCBpbmRleCwgUGFzc1JlZlB0cjxTdHlsZUJhc2U+IGNoaWxkKQorICAgIHsKKyAgICAg
ICAgU3R5bGVCYXNlKiBjID0gY2hpbGQuZ2V0KCk7CisgICAgICAgIGlmIChpbmRleCA+PSBsZW5n
dGgoKSkKKyAgICAgICAgICAgIG1fY2hpbGRyZW4uYXBwZW5kKGNoaWxkKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgbV9jaGlsZHJlbi5pbnNlcnQoaW5kZXgsIGNoaWxkKTsKKyAgICAgICAg
Yy0+aW5zZXJ0ZWRJbnRvUGFyZW50KCk7CisgICAgfQorCisgICAgdm9pZCByZW1vdmUodW5zaWdu
ZWQgaW5kZXgpCisgICAgeworICAgICAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKCkpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIG1fY2hpbGRyZW4ucmVtb3ZlKGluZGV4KTsKKyAgICB9CisK
ICAgICBYU0xTdHlsZVNoZWV0KE5vZGUqIHBhcmVudE5vZGUsIGNvbnN0IFN0cmluZyYgb3JpZ2lu
YWxVUkwsIGNvbnN0IEtVUkwmIGZpbmFsVVJMLCBib29sIGVtYmVkZGVkKTsKICNpZiAhVVNFKFFY
TUxRVUVSWSkKICAgICBYU0xTdHlsZVNoZWV0KFhTTEltcG9ydFJ1bGUqIHBhcmVudEltcG9ydCwg
Y29uc3QgU3RyaW5nJiBvcmlnaW5hbFVSTCwgY29uc3QgS1VSTCYgZmluYWxVUkwpOwogI2VuZGlm
CiAKKyAgICBWZWN0b3I8UmVmUHRyPFN0eWxlQmFzZT4gPiBtX2NoaWxkcmVuOworCiAgICAgRG9j
dW1lbnQqIG1fb3duZXJEb2N1bWVudDsKICAgICBib29sIG1fZW1iZWRkZWQ7CiAgICAgYm9vbCBt
X3Byb2Nlc3NlZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9YU0xTdHlsZVNoZWV0
TGlieHNsdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFNMU3R5bGVTaGVldExpYnhzbHQuY3Bw
CmluZGV4IGE1MTkwMjMuLjVmMWI2YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9Y
U0xTdHlsZVNoZWV0TGlieHNsdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL1hTTFN0eWxl
U2hlZXRMaWJ4c2x0LmNwcApAQCAtNzgsNiArNzgsMTEgQEAgWFNMU3R5bGVTaGVldDo6flhTTFN0
eWxlU2hlZXQoKQogewogICAgIGlmICghbV9zdHlsZXNoZWV0RG9jVGFrZW4pCiAgICAgICAgIHht
bEZyZWVEb2MobV9zdHlsZXNoZWV0RG9jKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGgoKTsgKytpKSB7CisgICAgICAgIEFTU0VSVChpdGVtKGkpLT5wYXJlbnQoKSA9PSB0
aGlzKTsKKyAgICAgICAgaXRlbShpKS0+c2V0UGFyZW50KDApOworICAgIH0KIH0KIAogYm9vbCBY
U0xTdHlsZVNoZWV0Ojppc0xvYWRpbmcoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1s
L1hTTFN0eWxlU2hlZXRRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFNMU3R5bGVTaGVldFF0
LmNwcAppbmRleCA2MDI2Mjg1Li4yYjc1NTc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94
bWwvWFNMU3R5bGVTaGVldFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS94bWwvWFNMU3R5bGVT
aGVldFF0LmNwcApAQCAtNDAsNiArNDAsMTAgQEAgWFNMU3R5bGVTaGVldDo6WFNMU3R5bGVTaGVl
dChOb2RlKiBwYXJlbnROb2RlLCBjb25zdCBTdHJpbmcmIG9yaWdpbmFsVVJMLCBjb25zdAogCiBY
U0xTdHlsZVNoZWV0Ojp+WFNMU3R5bGVTaGVldCgpCiB7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgQVNTRVJUKGl0ZW0oaSktPnBhcmVudCgp
ID09IHRoaXMpOworICAgICAgICBpdGVtKGkpLT5zZXRQYXJlbnQoMCk7CisgICAgfQogfQogCiBi
b29sIFhTTFN0eWxlU2hlZXQ6OmlzTG9hZGluZygpCg==
</data>
<flag name="review"
          id="108720"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>