<?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>71666</bug_id>
          
          <creation_ts>2011-11-07 04:41:09 -0800</creation_ts>
          <short_desc>Devirtualize CSSValue</short_desc>
          <delta_ts>2011-11-27 05:08:04 -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>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>
          <dependson>71667</dependson>
    
    <dependson>71668</dependson>
    
    <dependson>71671</dependson>
    
    <dependson>71675</dependson>
    
    <dependson>71796</dependson>
    
    <dependson>71800</dependson>
    
    <dependson>71813</dependson>
    
    <dependson>71814</dependson>
    
    <dependson>71824</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andreas Kling">kling</reporter>
          <assigned_to name="Andreas Kling">kling</assigned_to>
          <cc>koivisto</cc>
    
    <cc>macpherson</cc>
    
    <cc>mikelawther</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>497071</commentid>
    <comment_count>0</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-11-07 04:41:09 -0800</bug_when>
    <thetext>We can shrink CSSValue (and more importantly CSSPrimitiveValue) by one CPU word (4 or 8 bytes) by devirtualizing it and hoisting CSSPrimitiveValue&apos;s bitfields up into CSSValue.

Current layout:

CSSValue : public RefCounted, 8/12 bytes:
* (vptr)
* m_refCount

CSSPrimitiveValue : public CSSValue, 16/24 bytes:
* (vptr)
* m_refCount
* flags for CSSPrimitiveValue (32-bit bitfield)
* m_value

Target layout:

CSSValue : public RefCounted, 8/8 bytes:
* m_refCount
* flags for CSSValue and CSSPrimitiveValue (32-bit bitfield)

CSSPrimitiveValue : public CSSValue, 12/16 bytes:
* m_refCount
* flags for CSSValue and CSSPrimitiveValue (32-bit bitfield)
* m_value</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498156</commentid>
    <comment_count>1</comment_count>
      <attachid>114097</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-11-08 09:44:50 -0800</bug_when>
    <thetext>Created attachment 114097
Patch!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498170</commentid>
    <comment_count>2</comment_count>
      <attachid>114097</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-11-08 09:55:10 -0800</bug_when>
    <thetext>Comment on attachment 114097
Patch!

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

r=me

&gt; Source/WebCore/css/CSSValue.cpp:214
&gt; +    case InitialClass:
&gt; +    case ImplicitInitialClass:
&gt; +        delete static_cast&lt;CSSInitialValue*&gt;(this);
&gt; +        return;

This is bit strange.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498207</commentid>
    <comment_count>3</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-11-08 10:18:07 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 114097 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=114097&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/WebCore/css/CSSValue.cpp:214
&gt; &gt; +    case InitialClass:
&gt; &gt; +    case ImplicitInitialClass:
&gt; &gt; +        delete static_cast&lt;CSSInitialValue*&gt;(this);
&gt; &gt; +        return;
&gt; 
&gt; This is bit strange.

Indeed. As I said on IRC, this is a hack to avoid out-of-lining CSSValue::isImplicitInitialValue() since we can&apos;t dereference a CSSInitialValue pointer in CSSValue.h. I&apos;ll move this to a dedicated CSSValue bit in a future patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>498221</commentid>
    <comment_count>4</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-11-08 10:27:23 -0800</bug_when>
    <thetext>Committed r99592: &lt;http://trac.webkit.org/changeset/99592&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503563</commentid>
    <comment_count>5</comment_count>
    <who name="Mike Lawther">mikelawther</who>
    <bug_when>2011-11-15 21:03:25 -0800</bug_when>
    <thetext>Now that these have all landed - what has been the performance improvement? 

Apologies if this was mentioned/discussed on IRC - I&apos;m not on-channel all the time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506927</commentid>
    <comment_count>6</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-11-21 07:00:09 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Now that these have all landed - what has been the performance improvement? 
&gt; 
&gt; Apologies if this was mentioned/discussed on IRC - I&apos;m not on-channel all the time.

This was done primarily as a memory optimization, so I only verified the lack of performance regressions. As an example, it saves ~100kB on current GMail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508917</commentid>
    <comment_count>7</comment_count>
    <who name="Mike Lawther">mikelawther</who>
    <bug_when>2011-11-24 16:53:53 -0800</bug_when>
    <thetext>OK - thanks. I asked because of the comment in CSSValue.h

// NOTE: This class is non-virtual for memory and performance reasons.
// Don&apos;t go making it virtual again unless you know exactly what you&apos;re doing!

The memory benefits of devirtualising are clear, but I wanted to understand the performance reasons. 

So it sounds like there is negligible performance delta between virtual/non-virtual in this case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509132</commentid>
    <comment_count>8</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-11-25 06:11:47 -0800</bug_when>
    <thetext>Note that reducing memory usage of the core data structures can in some cases be a measurable performance win in itself due to improved locality.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509427</commentid>
    <comment_count>9</comment_count>
    <who name="Mike Lawther">mikelawther</who>
    <bug_when>2011-11-27 04:51:22 -0800</bug_when>
    <thetext>Yep - totally (improved cache coherency etc). That was why I was interested in any performance measurements that had been done so the gains could be quantified. Or whether any gains from improved memory may have been canceled out due to the increased code size and execution time of the DIY dispatch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509428</commentid>
    <comment_count>10</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-11-27 05:08:04 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; OK - thanks. I asked because of the comment in CSSValue.h
&gt; 
&gt; // NOTE: This class is non-virtual for memory and performance reasons.
&gt; // Don&apos;t go making it virtual again unless you know exactly what you&apos;re doing!
&gt; 
&gt; The memory benefits of devirtualising are clear, but I wanted to understand the performance reasons. 
&gt; 
&gt; So it sounds like there is negligible performance delta between virtual/non-virtual in this case.

That sounds about right. I discussed this with Antti, and we simply wanted a sufficiently scary-looking comment so people wouldn&apos;t accidentally make the class virtual again.

(In reply to comment #9)
&gt; Yep - totally (improved cache coherency etc). That was why I was interested in any performance measurements that had been done so the gains could be quantified. Or whether any gains from improved memory may have been canceled out due to the increased code size and execution time of the DIY dispatch.

I suspect that if anything, the DIY dispatch is actually faster than virtual calls, as it can synergize better with CPU branch prediction.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114097</attachid>
            <date>2011-11-08 09:44:50 -0800</date>
            <delta_ts>2011-11-08 09:55:10 -0800</delta_ts>
            <desc>Patch!</desc>
            <filename>bug-71666.diff</filename>
            <type>text/plain</type>
            <size>21647</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBlNWZjYmNhLi43YTBjODUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNjkg
QEAKIDIwMTEtMTEtMDggIEFuZHJlYXMgS2xpbmcgIDxrbGluZ0B3ZWJraXQub3JnPgogCisgICAg
ICAgIERldmlydHVhbGl6ZSBDU1NWYWx1ZS4KKyAgICAgICAgPGh0dHA6Ly93ZWJraXQub3JnL2Iv
NzE2NjY+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
TWFrZSB0aGUgQ1NTVmFsdWUgZGVzdHJ1Y3RvciBub24tdmlydHVhbCAoYWxvbmcgd2l0aCBhbGwg
dGhlIHN1YmNsYXNzZXMuKQorICAgICAgICBUaGlzIHJlbW92ZXMgdGhlIHZ0YWJsZXMsIGFuZCB0
aGUgcG9pbnRlcnMgdGhlcmV0byBpbiBlYWNoIHZhbHVlIGluc3RhbmNlLAorICAgICAgICBzaHJp
bmtpbmcgZWFjaCBvYmplY3QgYnkgb25lIENQVSB3b3JkICg0IG9yIDggYnl0ZXMuKQorCisgICAg
ICAgIFdlIHVzZSB0aGUgc2FtZSB0cmljayBhcyBDU1NSdWxlIHRvIGltcGxlbWVudCBkZXN0cnVj
dGlvbjsgcHJvdmlkaW5nIG91cgorICAgICAgICBvd24gZGVyZWYoKSBpbnN0ZWFkIG9mIFJlZkNv
dW50ZWQncywgYW5kIHBlcmZvcm1pbmcgYSBzdGF0aWNhbGx5IHR5cGVkCisgICAgICAgIGRlbGV0
ZSBpbiBhIGRlc3Ryb3koKSBtZXRob2QgY2FsbGVkIHdoZW4gdGhlIHJlZiBjb3VudCByZWFjaGVz
IDAuCisKKyAgICAgICAgQWxzbyBtYWRlIGFsbCB0aGUgZW1wdHkgc3ViY2xhc3MgZGVzdHJ1Y3Rv
cnMgaW5saW5lLgorCisgICAgICAgICogY3NzL0NTU0FzcGVjdFJhdGlvVmFsdWUuY3BwOgorICAg
ICAgICAqIGNzcy9DU1NBc3BlY3RSYXRpb1ZhbHVlLmg6CisgICAgICAgIChXZWJDb3JlOjpDU1NB
c3BlY3RSYXRpb1ZhbHVlOjp+Q1NTQXNwZWN0UmF0aW9WYWx1ZSk6CisgICAgICAgICogY3NzL0NT
U0JvcmRlckltYWdlU2xpY2VWYWx1ZS5jcHA6CisgICAgICAgICogY3NzL0NTU0JvcmRlckltYWdl
U2xpY2VWYWx1ZS5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQm9yZGVySW1hZ2VTbGljZVZhbHVl
Ojp+Q1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlKToKKyAgICAgICAgKiBjc3MvQ1NTQm9yZGVySW1h
Z2VWYWx1ZS5jcHA6CisgICAgICAgICogY3NzL0NTU0JvcmRlckltYWdlVmFsdWUuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0JvcmRlckltYWdlVmFsdWU6On5DU1NCb3JkZXJJbWFnZVZhbHVlKToK
KyAgICAgICAgKiBjc3MvQ1NTQ2FudmFzVmFsdWUuaDoKKyAgICAgICAgKiBjc3MvQ1NTQ3Jvc3Nm
YWRlVmFsdWUuY3BwOgorICAgICAgICAqIGNzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5oOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTQ3Jvc3NmYWRlVmFsdWU6On5DU1NDcm9zc2ZhZGVWYWx1ZSk6CisgICAg
ICAgICogY3NzL0NTU0N1cnNvckltYWdlVmFsdWUuaDoKKyAgICAgICAgKiBjc3MvQ1NTRmxleFZh
bHVlLmNwcDoKKyAgICAgICAgKiBjc3MvQ1NTRmxleFZhbHVlLmg6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NGbGV4VmFsdWU6On5DU1NGbGV4VmFsdWUpOgorICAgICAgICAqIGNzcy9DU1NGb250RmFj
ZVNyY1ZhbHVlLmNwcDoKKyAgICAgICAgKiBjc3MvQ1NTRm9udEZhY2VTcmNWYWx1ZS5oOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRm9udEZhY2VTcmNWYWx1ZTo6fkNTU0ZvbnRGYWNlU3JjVmFsdWUp
OgorICAgICAgICAqIGNzcy9DU1NGdW5jdGlvblZhbHVlLmNwcDoKKyAgICAgICAgKiBjc3MvQ1NT
RnVuY3Rpb25WYWx1ZS5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRnVuY3Rpb25WYWx1ZTo6fkNT
U0Z1bmN0aW9uVmFsdWUpOgorICAgICAgICAqIGNzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmg6
CisgICAgICAgICogY3NzL0NTU0ltYWdlVmFsdWUuaDoKKyAgICAgICAgKiBjc3MvQ1NTTXV0YWJs
ZVZhbHVlLmg6CisgICAgICAgIChXZWJDb3JlOjpDU1NNdXRhYmxlVmFsdWU6On5DU1NNdXRhYmxl
VmFsdWUpOgorICAgICAgICAqIGNzcy9DU1NQYXJzZXJWYWx1ZXMuaDoKKyAgICAgICAgKiBjc3Mv
Q1NTUHJpbWl0aXZlVmFsdWUuaDoKKyAgICAgICAgKiBjc3MvQ1NTVW5pY29kZVJhbmdlVmFsdWUu
Y3BwOgorICAgICAgICAqIGNzcy9DU1NVbmljb2RlUmFuZ2VWYWx1ZS5oOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTVW5pY29kZVJhbmdlVmFsdWU6On5DU1NVbmljb2RlUmFuZ2VWYWx1ZSk6CisgICAg
ICAgICogY3NzL0NTU1ZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1ZhbHVlOjpkZXN0
cm95KToKKyAgICAgICAgKiBjc3MvQ1NTVmFsdWUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Zh
bHVlOjpkZXJlZik6CisgICAgICAgIChXZWJDb3JlOjpDU1NWYWx1ZTo6fkNTU1ZhbHVlKToKKyAg
ICAgICAgKiBjc3MvQ1NTVmFsdWVMaXN0LmNwcDoKKyAgICAgICAgKiBjc3MvQ1NTVmFsdWVMaXN0
Lmg6CisgICAgICAgIChXZWJDb3JlOjpDU1NWYWx1ZUxpc3Q6On5DU1NWYWx1ZUxpc3QpOgorICAg
ICAgICAqIGNzcy9XZWJLaXRDU1NGaWx0ZXJWYWx1ZS5jcHA6CisgICAgICAgICogY3NzL1dlYktp
dENTU0ZpbHRlclZhbHVlLmg6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRDU1NGaWx0ZXJWYWx1
ZTo6fldlYktpdENTU0ZpbHRlclZhbHVlKToKKyAgICAgICAgKiBjc3MvV2ViS2l0Q1NTVHJhbnNm
b3JtVmFsdWUuY3BwOgorICAgICAgICAqIGNzcy9XZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5oOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6On5XZWJLaXRDU1NUcmFu
c2Zvcm1WYWx1ZSk6CisKKzIwMTEtMTEtMDggIEFuZHJlYXMgS2xpbmcgIDxrbGluZ0B3ZWJraXQu
b3JnPgorCiAgICAgICAgIENTU0ltYWdlR2VuZXJhdG9yVmFsdWU6IERldmlydHVhbGl6ZSBpbWFn
ZSgpLCBpc0ZpeGVkU2l6ZSgpIGFuZCBmaXhlZFNpemUoKS4KICAgICAgICAgPGh0dHA6Ly93ZWJr
aXQub3JnL2IvNzE4MjQ+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NBc3Bl
Y3RSYXRpb1ZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NBc3BlY3RSYXRpb1ZhbHVl
LmNwcAppbmRleCA3MTNhMTM2Li4xOGIwZGVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTQXNwZWN0UmF0aW9WYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Fz
cGVjdFJhdGlvVmFsdWUuY3BwCkBAIC0zMywxMCArMzMsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLUNTU0FzcGVjdFJhdGlvVmFsdWU6On5DU1NBc3BlY3RSYXRpb1ZhbHVlKCkKLXsKLX0K
LQogU3RyaW5nIENTU0FzcGVjdFJhdGlvVmFsdWU6OmN1c3RvbUNzc1RleHQoKSBjb25zdAogewog
ICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0FzcGVjdFJhdGlvVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NBc3BlY3RSYXRp
b1ZhbHVlLmgKaW5kZXggNWVhMTQwNC4uNzU2Nzk3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0FzcGVjdFJhdGlvVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
QXNwZWN0UmF0aW9WYWx1ZS5oCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBDU1NBc3BlY3RSYXRpb1ZhbHVlKG51bWVyYXRvclZhbHVlLCBkZW5v
bWluYXRvclZhbHVlKSk7CiAgICAgfQogCi0gICAgdmlydHVhbCB+Q1NTQXNwZWN0UmF0aW9WYWx1
ZSgpOworICAgIH5DU1NBc3BlY3RSYXRpb1ZhbHVlKCkgeyB9CiAKICAgICBTdHJpbmcgY3VzdG9t
Q3NzVGV4dCgpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQm9y
ZGVySW1hZ2VTbGljZVZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NCb3JkZXJJbWFn
ZVNsaWNlVmFsdWUuY3BwCmluZGV4IGI1NDNlMDMuLjA0ZWYyZDMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUuY3BwCkBAIC0zOCwxMCArMzgsNiBA
QCBDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWU6OkNTU0JvcmRlckltYWdlU2xpY2VWYWx1ZShQYXNz
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPgogewogfQogCi1DU1NCb3JkZXJJbWFnZVNsaWNlVmFs
dWU6On5DU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUoKQotewotfQotCiBTdHJpbmcgQ1NTQm9yZGVy
SW1hZ2VTbGljZVZhbHVlOjpjdXN0b21Dc3NUZXh0KCkgY29uc3QKIHsKICAgICAvLyBEdW1wIHRo
ZSBzbGljZXMgZmlyc3QuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQm9yZGVy
SW1hZ2VTbGljZVZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQm9yZGVySW1hZ2VTbGlj
ZVZhbHVlLmgKaW5kZXggYWYxMjBhYy4uNDVjOWY5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0JvcmRlckltYWdlU2xpY2VWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUuaApAQCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6CiAg
ICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU0JvcmRlckltYWdlU2xpY2VWYWx1
ZShzbGljZXMsIGZpbGwpKTsKICAgICB9Ci0gICAgdmlydHVhbCB+Q1NTQm9yZGVySW1hZ2VTbGlj
ZVZhbHVlKCk7CisgICAgfkNTU0JvcmRlckltYWdlU2xpY2VWYWx1ZSgpIHsgfQogCiAgICAgU3Ry
aW5nIGN1c3RvbUNzc1RleHQoKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0JvcmRlckltYWdlVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0JvcmRl
ckltYWdlVmFsdWUuY3BwCmluZGV4IDhmZjZiYzguLjg0NmVhNmQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NCb3JkZXJJbWFnZVZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTQm9yZGVySW1hZ2VWYWx1ZS5jcHAKQEAgLTM3LDEwICszNyw2IEBAIENTU0JvcmRl
ckltYWdlVmFsdWU6OkNTU0JvcmRlckltYWdlVmFsdWUoUGFzc1JlZlB0cjxDU1NWYWx1ZT4gaW1h
Z2UsIFBhc3NSZWZQdHI8CiB7CiB9CiAKLUNTU0JvcmRlckltYWdlVmFsdWU6On5DU1NCb3JkZXJJ
bWFnZVZhbHVlKCkKLXsKLX0KLQogU3RyaW5nIENTU0JvcmRlckltYWdlVmFsdWU6OmN1c3RvbUNz
c1RleHQoKSBjb25zdAogewogICAgIC8vIEltYWdlIGZpcnN0LgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0JvcmRlckltYWdlVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NCb3JkZXJJbWFnZVZhbHVlLmgKaW5kZXggMWI4MGQ2Yi4uNDA2Yzk5NCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0JvcmRlckltYWdlVmFsdWUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTQm9yZGVySW1hZ2VWYWx1ZS5oCkBAIC0zNiw3ICszNiw3IEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTQm9yZGVySW1hZ2VWYWx1ZShp
bWFnZSwgaW1hZ2VTbGljZSwgYm9yZGVyU2xpY2UsIG91dHNldCwgcmVwZWF0KSk7CiAgICAgfQot
ICAgIHZpcnR1YWwgfkNTU0JvcmRlckltYWdlVmFsdWUoKTsKKyAgICB+Q1NTQm9yZGVySW1hZ2VW
YWx1ZSgpIHsgfQogCiAgICAgU3RyaW5nIGN1c3RvbUNzc1RleHQoKSBjb25zdDsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbnZhc1ZhbHVlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTQ2FudmFzVmFsdWUuaAppbmRleCAxMDFiNTgwLi4yMzJhNTI1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FudmFzVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTQ2FudmFzVmFsdWUuaApAQCAtMzYsNyArMzYsNyBAQCBjbGFzcyBEb2N1bWVudDsK
IGNsYXNzIENTU0NhbnZhc1ZhbHVlIDogcHVibGljIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUgewog
cHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTU0NhbnZhc1ZhbHVlPiBjcmVhdGUoKSB7
IHJldHVybiBhZG9wdFJlZihuZXcgQ1NTQ2FudmFzVmFsdWUpOyB9Ci0gICAgdmlydHVhbCB+Q1NT
Q2FudmFzVmFsdWUoKTsKKyAgICB+Q1NTQ2FudmFzVmFsdWUoKTsKIAogICAgIFN0cmluZyBjdXN0
b21Dc3NUZXh0KCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1ND
cm9zc2ZhZGVWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Jvc3NmYWRlVmFsdWUu
Y3BwCmluZGV4IDE0YzI1MGMuLmI3NzA2OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NDcm9zc2ZhZGVWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Nyb3Nz
ZmFkZVZhbHVlLmNwcApAQCAtMjgsMTEgKzI4LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1DU1NDcm9zc2ZhZGVWYWx1ZTo6fkNTU0Nyb3NzZmFkZVZhbHVlKCkKLXsKLQotfQotCiBTdHJp
bmcgQ1NTQ3Jvc3NmYWRlVmFsdWU6OmN1c3RvbUNzc1RleHQoKSBjb25zdAogewogICAgIFN0cmlu
ZyByZXN1bHQgPSAiLXdlYmtpdC1jcm9zcy1mYWRlKCI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTQ3Jvc3NmYWRlVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDcm9z
c2ZhZGVWYWx1ZS5oCmluZGV4IGYyYTRhZDcuLjliYjRiYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NDcm9zc2ZhZGVWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NDcm9zc2ZhZGVWYWx1ZS5oCkBAIC0zOCw3ICszOCw3IEBAIGNsYXNzIFJlbmRlck9iamVjdDsK
IGNsYXNzIENTU0Nyb3NzZmFkZVZhbHVlIDogcHVibGljIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUg
ewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTU0Nyb3NzZmFkZVZhbHVlPiBjcmVh
dGUoUGFzc1JlZlB0cjxDU1NJbWFnZVZhbHVlPiBmcm9tSW1hZ2UsIFBhc3NSZWZQdHI8Q1NTSW1h
Z2VWYWx1ZT4gdG9JbWFnZSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IENTU0Nyb3NzZmFkZVZhbHVl
KGZyb21JbWFnZSwgdG9JbWFnZSkpOyB9Ci0gICAgdmlydHVhbCB+Q1NTQ3Jvc3NmYWRlVmFsdWUo
KTsKKyAgICB+Q1NTQ3Jvc3NmYWRlVmFsdWUoKSB7IH0KIAogICAgIFN0cmluZyBjdXN0b21Dc3NU
ZXh0KCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDdXJzb3JJ
bWFnZVZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5oCmlu
ZGV4IDNjMDM0MTMuLmNiMjY5MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1ND
dXJzb3JJbWFnZVZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0N1cnNvckltYWdl
VmFsdWUuaApAQCAtMzcsNyArMzcsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgQ1NTQ3Vyc29ySW1hZ2VWYWx1ZSh1cmwsIGhvdFNwb3QpKTsKICAgICB9CiAKLSAgICB2
aXJ0dWFsIH5DU1NDdXJzb3JJbWFnZVZhbHVlKCk7CisgICAgfkNTU0N1cnNvckltYWdlVmFsdWUo
KTsKIAogICAgIEludFBvaW50IGhvdFNwb3QoKSBjb25zdCB7IHJldHVybiBtX2hvdFNwb3Q7IH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZsZXhWYWx1ZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTRmxleFZhbHVlLmNwcAppbmRleCA2YmQzMTJjLi5jMmJjNTNjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmxleFZhbHVlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTRmxleFZhbHVlLmNwcApAQCAtMzUsMTAgKzM1LDYgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1DU1NGbGV4VmFsdWU6On5DU1NGbGV4VmFsdWUoKQotewotfQot
CiBTdHJpbmcgQ1NTRmxleFZhbHVlOjpjdXN0b21Dc3NUZXh0KCkgY29uc3QKIHsKICAgICBTdHJp
bmdCdWlsZGVyIHJlc3VsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGbGV4
VmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGbGV4VmFsdWUuaAppbmRleCA5OTA5OWQ5
Li4zZTU2OGU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmxleFZhbHVlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZsZXhWYWx1ZS5oCkBAIC00Myw3ICs0Myw3IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NGbGV4VmFsdWUocG9zaXRp
dmVGbGV4LCBuZWdhdGl2ZUZsZXgsIHByZWZlcnJlZFNpemUpKTsKICAgICB9CiAKLSAgICB2aXJ0
dWFsIH5DU1NGbGV4VmFsdWUoKTsKKyAgICB+Q1NTRmxleFZhbHVlKCkgeyB9CiAKICAgICBTdHJp
bmcgY3VzdG9tQ3NzVGV4dCgpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTRm9udEZhY2VTcmNWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZh
Y2VTcmNWYWx1ZS5jcHAKaW5kZXggMDU2N2ZmNC4uNTczMDBlZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU3JjVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NGb250RmFjZVNyY1ZhbHVlLmNwcApAQCAtMzEsMTAgKzMxLDYgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1DU1NGb250RmFjZVNyY1ZhbHVlOjp+Q1NTRm9udEZhY2VTcmNWYWx1
ZSgpCi17Ci19Ci0KICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQogYm9vbCBDU1NGb250RmFjZVNyY1Zh
bHVlOjppc1NWR0ZvbnRGYWNlU3JjKCkgY29uc3QKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NGb250RmFjZVNyY1ZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9u
dEZhY2VTcmNWYWx1ZS5oCmluZGV4IGYwMzY5NzguLjgzMDMyOTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNyY1ZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0ZvbnRGYWNlU3JjVmFsdWUuaApAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTRm9udEZhY2VTcmNWYWx1ZShyZXNvdXJjZSwgdHJ1
ZSkpOwogICAgIH0KIAotICAgIHZpcnR1YWwgfkNTU0ZvbnRGYWNlU3JjVmFsdWUoKTsKKyAgICB+
Q1NTRm9udEZhY2VTcmNWYWx1ZSgpIHsgfQogCiAgICAgY29uc3QgU3RyaW5nJiByZXNvdXJjZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVzb3VyY2U7IH0KICAgICBjb25zdCBTdHJpbmcmIGZvcm1hdCgp
IGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTRnVuY3Rpb25WYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRnVuY3Rpb25W
YWx1ZS5jcHAKaW5kZXggYzMxYWIwYS4uNTIyYWQ5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0Z1bmN0aW9uVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NG
dW5jdGlvblZhbHVlLmNwcApAQCAtNDAsMTAgKzQwLDYgQEAgQ1NTRnVuY3Rpb25WYWx1ZTo6Q1NT
RnVuY3Rpb25WYWx1ZShDU1NQYXJzZXJGdW5jdGlvbiogZnVuY3Rpb24pCiAgICAgICAgIG1fYXJn
cyA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlRnJvbVBhcnNlclZhbHVlTGlzdChmdW5jdGlvbi0+YXJn
cy5nZXQoKSk7CiB9CiAKLUNTU0Z1bmN0aW9uVmFsdWU6On5DU1NGdW5jdGlvblZhbHVlKCkKLXsK
LX0KLQogU3RyaW5nIENTU0Z1bmN0aW9uVmFsdWU6OmN1c3RvbUNzc1RleHQoKSBjb25zdAogewog
ICAgIFN0cmluZyByZXN1bHQgPSBtX25hbWU7IC8vIEluY2x1ZGVzIHRoZSAnKCcKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGdW5jdGlvblZhbHVlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTRnVuY3Rpb25WYWx1ZS5oCmluZGV4IDQ1MDUwOTMuLjZjYzU5NDcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGdW5jdGlvblZhbHVlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0Z1bmN0aW9uVmFsdWUuaApAQCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTRnVuY3Rpb25WYWx1ZShmdW5jdGlvbikpOwog
ICAgIH0KIAotICAgIHZpcnR1YWwgfkNTU0Z1bmN0aW9uVmFsdWUoKTsKKyAgICB+Q1NTRnVuY3Rp
b25WYWx1ZSgpIHsgfQogCiAgICAgU3RyaW5nIGN1c3RvbUNzc1RleHQoKSBjb25zdDsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlR2VuZXJhdG9yVmFsdWUuaCBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZUdlbmVyYXRvclZhbHVlLmgKaW5kZXggYTRjMjlhZS4u
ZDBlYjY1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdlR2VuZXJhdG9y
VmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5o
CkBAIC01Miw3ICs1Miw3IEBAIHR5cGVkZWYgSGFzaE1hcDxjb25zdCBSZW5kZXJPYmplY3QqLCBT
aXplQW5kQ291bnQ+IFJlbmRlck9iamVjdFNpemVDb3VudE1hcDsKIAogY2xhc3MgQ1NTSW1hZ2VH
ZW5lcmF0b3JWYWx1ZSA6IHB1YmxpYyBDU1NWYWx1ZSB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB+
Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSgpOworICAgIH5DU1NJbWFnZUdlbmVyYXRvclZhbHVlKCk7
CiAKICAgICB2b2lkIGFkZENsaWVudChSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRTaXplJik7CiAg
ICAgdm9pZCByZW1vdmVDbGllbnQoUmVuZGVyT2JqZWN0Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTSW1hZ2VWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltYWdl
VmFsdWUuaAppbmRleCBmZmUwMDc2Li4zMjhiNmM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTSW1hZ2VWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbWFnZVZh
bHVlLmgKQEAgLTM1LDcgKzM1LDcgQEAgY2xhc3MgQ1NTSW1hZ2VWYWx1ZSA6IHB1YmxpYyBDU1NQ
cmltaXRpdmVWYWx1ZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTSW1hZ2VW
YWx1ZT4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IENTU0ltYWdlVmFsdWUpOyB9CiAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTSW1hZ2VWYWx1ZT4gY3JlYXRlKGNvbnN0IFN0cmluZyYg
dXJsKSB7IHJldHVybiBhZG9wdFJlZihuZXcgQ1NTSW1hZ2VWYWx1ZSh1cmwpKTsgfQotICAgIHZp
cnR1YWwgfkNTU0ltYWdlVmFsdWUoKTsKKyAgICB+Q1NTSW1hZ2VWYWx1ZSgpOwogCiAgICAgU3R5
bGVDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UoQ2FjaGVkUmVzb3VyY2VMb2FkZXIqKTsKICAgICAv
LyBSZXR1cm5zIGEgU3R5bGVDYWNoZWRJbWFnZSBpZiB0aGUgaW1hZ2UgaXMgY2FjaGVkIGFscmVh
ZHksIG90aGVyd2lzZSBhIFN0eWxlUGVuZGluZ0ltYWdlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL0NTU011dGFibGVWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU011dGFi
bGVWYWx1ZS5oCmluZGV4IDc0ZWE1ZWUuLmYyNjMxYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NNdXRhYmxlVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTTXV0
YWJsZVZhbHVlLmgKQEAgLTI3LDcgKzI3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBDU1NNdXRhYmxlVmFsdWUgOiBwdWJsaWMgQ1NTVmFsdWUgewogcHVibGljOgotICAgIHZpcnR1
YWwgfkNTU011dGFibGVWYWx1ZSgpIHsgfQorICAgIH5DU1NNdXRhYmxlVmFsdWUoKSB7IH0KIAog
ICAgIE5vZGUqIG5vZGUoKSBjb25zdCB7IHJldHVybiBtX25vZGU7IH0KICAgICB2b2lkIHNldE5v
ZGUoTm9kZSogbm9kZSkgeyBtX25vZGUgPSBub2RlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTUGFyc2VyVmFsdWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2Vy
VmFsdWVzLmgKaW5kZXggY2I1YzkwMy4uOTBkMjZhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1BhcnNlclZhbHVlcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJz
ZXJWYWx1ZXMuaApAQCAtMjIsNiArMjIsNyBAQAogI2RlZmluZSBDU1NQYXJzZXJWYWx1ZXNfaAog
CiAjaW5jbHVkZSAiQ1NTU2VsZWN0b3IuaCIKKyNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKICNp
bmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuaAppbmRleCAxODBkZTZkLi5mZWRhYjhj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuaApAQCAtMTQzLDcgKzE0Myw3
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKHF1aXJrVmFsdWUpOwogICAgIH0K
IAotICAgIHZpcnR1YWwgfkNTU1ByaW1pdGl2ZVZhbHVlKCk7CisgICAgfkNTU1ByaW1pdGl2ZVZh
bHVlKCk7CiAKICAgICB2b2lkIGNsZWFudXAoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1VuaWNvZGVSYW5nZVZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NV
bmljb2RlUmFuZ2VWYWx1ZS5jcHAKaW5kZXggYTFhMmI4Mi4uMmMyYzQ0ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1VuaWNvZGVSYW5nZVZhbHVlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTVW5pY29kZVJhbmdlVmFsdWUuY3BwCkBAIC0zMCwxMCArMzAsNiBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNTU1VuaWNvZGVSYW5nZVZhbHVlOjp+Q1NTVW5pY29k
ZVJhbmdlVmFsdWUoKQotewotfQotCiBTdHJpbmcgQ1NTVW5pY29kZVJhbmdlVmFsdWU6OmN1c3Rv
bUNzc1RleHQoKSBjb25zdAogewogICAgIFN0cmluZyByZXN1bHQ7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTVW5pY29kZVJhbmdlVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NVbmljb2RlUmFuZ2VWYWx1ZS5oCmluZGV4IGE4YjRhMzguLjI4OTVkYjAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NVbmljb2RlUmFuZ2VWYWx1ZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NVbmljb2RlUmFuZ2VWYWx1ZS5oCkBAIC0zOSw3ICszOSw3IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NVbmljb2RlUmFuZ2VWYWx1ZShm
cm9tLCB0bykpOwogICAgIH0KIAotICAgIHZpcnR1YWwgfkNTU1VuaWNvZGVSYW5nZVZhbHVlKCk7
CisgICAgfkNTU1VuaWNvZGVSYW5nZVZhbHVlKCkgeyB9CiAKICAgICBVQ2hhcjMyIGZyb20oKSBj
b25zdCB7IHJldHVybiBtX2Zyb207IH0KICAgICBVQ2hhcjMyIHRvKCkgY29uc3QgeyByZXR1cm4g
bV90bzsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZS5jcHAKaW5kZXggZWE5NGUxZS4uM2M5MmJkOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTVmFsdWUuY3BwCkBAIC0xNjAsNCArMTYwLDEwOCBAQCBTdHJpbmcgQ1NTVmFs
dWU6OmNzc1RleHQoKSBjb25zdAogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAordm9pZCBDU1NW
YWx1ZTo6ZGVzdHJveSgpCit7CisgICAgc3dpdGNoIChjbGFzc1R5cGUoKSkgeworICAgIGNhc2Ug
QXNwZWN0UmF0aW9DbGFzczoKKyAgICAgICAgZGVsZXRlIHN0YXRpY19jYXN0PENTU0FzcGVjdFJh
dGlvVmFsdWUqPih0aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQm9yZGVySW1hZ2VD
bGFzczoKKyAgICAgICAgZGVsZXRlIHN0YXRpY19jYXN0PENTU0JvcmRlckltYWdlVmFsdWUqPih0
aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQm9yZGVySW1hZ2VTbGljZUNsYXNzOgor
ICAgICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8Q1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlKj4odGhp
cyk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENhbnZhc0NsYXNzOgorICAgICAgICBkZWxl
dGUgc3RhdGljX2Nhc3Q8Q1NTQ2FudmFzVmFsdWUqPih0aGlzKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgQ3Vyc29ySW1hZ2VDbGFzczoKKyAgICAgICAgZGVsZXRlIHN0YXRpY19jYXN0PENT
U0N1cnNvckltYWdlVmFsdWUqPih0aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRm9u
dENsYXNzOgorICAgICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8Rm9udFZhbHVlKj4odGhpcyk7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIEZvbnRGYWNlU3JjQ2xhc3M6CisgICAgICAgIGRlbGV0
ZSBzdGF0aWNfY2FzdDxDU1NGb250RmFjZVNyY1ZhbHVlKj4odGhpcyk7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEZvbnRGYW1pbHlDbGFzczoKKyAgICAgICAgZGVsZXRlIHN0YXRpY19jYXN0
PEZvbnRGYW1pbHlWYWx1ZSo+KHRoaXMpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBGb250
RmVhdHVyZUNsYXNzOgorICAgICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8Rm9udEZlYXR1cmVWYWx1
ZSo+KHRoaXMpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBGdW5jdGlvbkNsYXNzOgorICAg
ICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8Q1NTRnVuY3Rpb25WYWx1ZSo+KHRoaXMpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBMaW5lYXJHcmFkaWVudENsYXNzOgorICAgICAgICBkZWxldGUg
c3RhdGljX2Nhc3Q8Q1NTTGluZWFyR3JhZGllbnRWYWx1ZSo+KHRoaXMpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBSYWRpYWxHcmFkaWVudENsYXNzOgorICAgICAgICBkZWxldGUgc3RhdGlj
X2Nhc3Q8Q1NTUmFkaWFsR3JhZGllbnRWYWx1ZSo+KHRoaXMpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBDcm9zc2ZhZGVDbGFzczoKKyAgICAgICAgZGVsZXRlIHN0YXRpY19jYXN0PENTU0Ny
b3NzZmFkZVZhbHVlKj4odGhpcyk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEltYWdlQ2xh
c3M6CisgICAgICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxDU1NJbWFnZVZhbHVlKj4odGhpcyk7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluaGVyaXRlZENsYXNzOgorICAgICAgICBkZWxldGUg
c3RhdGljX2Nhc3Q8Q1NTSW5oZXJpdGVkVmFsdWUqPih0aGlzKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgSW5pdGlhbENsYXNzOgorICAgIGNhc2UgSW1wbGljaXRJbml0aWFsQ2xhc3M6Cisg
ICAgICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxDU1NJbml0aWFsVmFsdWUqPih0aGlzKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgUHJpbWl0aXZlQ2xhc3M6CisgICAgICAgIGRlbGV0ZSBzdGF0
aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHRoaXMpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBSZWZsZWN0Q2xhc3M6CisgICAgICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxDU1NSZWZsZWN0
VmFsdWUqPih0aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU2hhZG93Q2xhc3M6Cisg
ICAgICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxTaGFkb3dWYWx1ZSo+KHRoaXMpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBMaW5lYXJUaW1pbmdGdW5jdGlvbkNsYXNzOgorICAgICAgICBkZWxl
dGUgc3RhdGljX2Nhc3Q8Q1NTTGluZWFyVGltaW5nRnVuY3Rpb25WYWx1ZSo+KHRoaXMpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uQ2xhc3M6Cisg
ICAgICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxDU1NDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uVmFs
dWUqPih0aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RlcHNUaW1pbmdGdW5jdGlv
bkNsYXNzOgorICAgICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8Q1NTU3RlcHNUaW1pbmdGdW5jdGlv
blZhbHVlKj4odGhpcyk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFVuaWNvZGVSYW5nZUNs
YXNzOgorICAgICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8Q1NTVW5pY29kZVJhbmdlVmFsdWUqPih0
aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVMaXN0Q2xhc3M6CisgICAgICAg
IGRlbGV0ZSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPih0aGlzKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtQ2xhc3M6CisgICAgICAgIGRlbGV0ZSBzdGF0
aWNfY2FzdDxXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZSo+KHRoaXMpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBMaW5lQm94Q29udGFpbkNsYXNzOgorICAgICAgICBkZWxldGUgc3RhdGljX2Nh
c3Q8Q1NTTGluZUJveENvbnRhaW5WYWx1ZSo+KHRoaXMpOworICAgICAgICByZXR1cm47CisjaWYg
RU5BQkxFKENTUzNfRkxFWEJPWCkKKyAgICBjYXNlIEZsZXhDbGFzczoKKyAgICAgICAgZGVsZXRl
IHN0YXRpY19jYXN0PENTU0ZsZXhWYWx1ZSo+KHRoaXMpOworICAgICAgICByZXR1cm47CisjZW5k
aWYKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgY2FzZSBXZWJLaXRDU1NGaWx0ZXJDbGFz
czoKKyAgICAgICAgZGVsZXRlIHN0YXRpY19jYXN0PFdlYktpdENTU0ZpbHRlclZhbHVlKj4odGhp
cyk7CisgICAgICAgIHJldHVybjsKKyNlbmRpZgorI2lmIEVOQUJMRShTVkcpCisgICAgY2FzZSBT
VkdDb2xvckNsYXNzOgorICAgICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8U1ZHQ29sb3IqPih0aGlz
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU1ZHUGFpbnRDbGFzczoKKyAgICAgICAgZGVs
ZXRlIHN0YXRpY19jYXN0PFNWR1BhaW50Kj4odGhpcyk7CisgICAgICAgIHJldHVybjsKKyNlbmRp
ZgorICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFs
dWUuaAppbmRleCAyNjUzMGQxLi40MWQ1NDVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWUuaApAQCAtNDAs
OSArNDAsMTYgQEAgcHVibGljOgogICAgICAgICBDU1NfVkFMVUVfTElTVCA9IDIsCiAgICAgICAg
IENTU19DVVNUT00gPSAzLAogICAgICAgICBDU1NfSU5JVElBTCA9IDQKKwogICAgIH07CiAKLSAg
ICB2aXJ0dWFsIH5DU1NWYWx1ZSgpIHsgfQorICAgIC8vIE92ZXJyaWRlIFJlZkNvdW50ZWQncyBk
ZXJlZigpIHRvIGVuc3VyZSBvcGVyYXRvciBkZWxldGUgaXMgY2FsbGVkIG9uCisgICAgLy8gdGhl
IGFwcHJvcHJpYXRlIHN1YmNsYXNzIHR5cGUuCisgICAgdm9pZCBkZXJlZigpCisgICAgeworICAg
ICAgICBpZiAoZGVyZWZCYXNlKCkpCisgICAgICAgICAgICBkZXN0cm95KCk7CisgICAgfQogCiAg
ICAgVHlwZSBjc3NWYWx1ZVR5cGUoKSBjb25zdDsKIApAQCAtMTM2LDYgKzE0MywxMSBAQCBwcm90
ZWN0ZWQ6CiAgICAgewogICAgIH0KIAorICAgIC8vIE5PVEU6IFRoaXMgY2xhc3MgaXMgbm9uLXZp
cnR1YWwgZm9yIG1lbW9yeSBhbmQgcGVyZm9ybWFuY2UgcmVhc29ucy4KKyAgICAvLyBEb24ndCBn
byBtYWtpbmcgaXQgdmlydHVhbCBhZ2FpbiB1bmxlc3MgeW91IGtub3cgZXhhY3RseSB3aGF0IHlv
dSdyZSBkb2luZyEKKworICAgIH5DU1NWYWx1ZSgpIHsgfQorCiBwcml2YXRlOgogICAgIHN0YXRp
YyBib29sIGlzUHJpbWl0aXZlVHlwZShDbGFzc1R5cGUgdHlwZSkKICAgICB7CkBAIC0xNzUsNiAr
MTg3LDggQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHR5cGUgPT0gSW5pdGlhbENsYXNzIHx8
IHR5cGUgPT0gSW1wbGljaXRJbml0aWFsQ2xhc3M7CiAgICAgfQogCisgICAgdm9pZCBkZXN0cm95
KCk7CisKICAgICAvLyBGSVhNRTogVGhpcyBjbGFzcyBpcyBjdXJyZW50bHkgYSBsaXR0bGUgYmxv
YXRlZCwgYnV0IHRoYXQgd2lsbCBjaGFuZ2UuCiAgICAgLy8gICAgICAgIFNlZSA8aHR0cDovL3dl
YmtpdC5vcmcvYi83MTY2Nj4gZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAgICAgdW5zaWduZWQgbV9j
bGFzc1R5cGUgOiA1OyAvLyBDbGFzc1R5cGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NWYWx1ZUxpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlTGlzdC5jcHAK
aW5kZXggN2EyODhiNi4uOGI4MjFjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1ZhbHVlTGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlTGlzdC5jcHAK
QEAgLTUwLDEwICs1MCw2IEBAIENTU1ZhbHVlTGlzdDo6Q1NTVmFsdWVMaXN0KENTU1BhcnNlclZh
bHVlTGlzdCogbGlzdCkKICAgICB9CiB9CiAKLUNTU1ZhbHVlTGlzdDo6fkNTU1ZhbHVlTGlzdCgp
Ci17Ci19Ci0KIHZvaWQgQ1NTVmFsdWVMaXN0OjphcHBlbmQoUGFzc1JlZlB0cjxDU1NWYWx1ZT4g
dmFsKQogewogICAgIG1fdmFsdWVzLmFwcGVuZCh2YWwpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL0NTU1ZhbHVlTGlzdC5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlTGlz
dC5oCmluZGV4IDIyYWJmM2IuLjdmMWI5OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NWYWx1ZUxpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmgK
QEAgLTQ0LDcgKzQ0LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENT
U1ZhbHVlTGlzdChsaXN0KSk7CiAgICAgfQogCi0gICAgdmlydHVhbCB+Q1NTVmFsdWVMaXN0KCk7
CisgICAgfkNTU1ZhbHVlTGlzdCgpIHsgfQogCiAgICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fdmFsdWVzLnNpemUoKTsgfQogICAgIENTU1ZhbHVlKiBpdGVtKHNpemVfdCBpbmRl
eCkgeyByZXR1cm4gaW5kZXggPCBtX3ZhbHVlcy5zaXplKCkgPyBtX3ZhbHVlc1tpbmRleF0uZ2V0
KCkgOiAwOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTRmlsdGVy
VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU0ZpbHRlclZhbHVlLmNwcApp
bmRleCA3MWVjMzI3Li42NGZlYjhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvV2Vi
S2l0Q1NTRmlsdGVyVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NG
aWx0ZXJWYWx1ZS5jcHAKQEAgLTQwLDEwICs0MCw2IEBAIFdlYktpdENTU0ZpbHRlclZhbHVlOjpX
ZWJLaXRDU1NGaWx0ZXJWYWx1ZShGaWx0ZXJPcGVyYXRpb25UeXBlIG9wZXJhdGlvblR5cGUpCiB7
CiB9CiAKLVdlYktpdENTU0ZpbHRlclZhbHVlOjp+V2ViS2l0Q1NTRmlsdGVyVmFsdWUoKQotewot
fQotCiBTdHJpbmcgV2ViS2l0Q1NTRmlsdGVyVmFsdWU6OmN1c3RvbUNzc1RleHQoKSBjb25zdAog
ewogICAgIFN0cmluZyByZXN1bHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvV2Vi
S2l0Q1NTRmlsdGVyVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NGaWx0ZXJW
YWx1ZS5oCmluZGV4IGNmYjRjOGIuLmZiODZiZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9XZWJLaXRDU1NGaWx0ZXJWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJL
aXRDU1NGaWx0ZXJWYWx1ZS5oCkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBXZWJLaXRDU1NGaWx0ZXJWYWx1ZSh0eXBlKSk7CiAgICAgfQogCi0g
ICAgdmlydHVhbCB+V2ViS2l0Q1NTRmlsdGVyVmFsdWUoKTsKKyAgICB+V2ViS2l0Q1NTRmlsdGVy
VmFsdWUoKSB7IH0KIAogICAgIFN0cmluZyBjdXN0b21Dc3NUZXh0KCkgY29uc3Q7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuY3BwCmluZGV4IDZlMGNk
ZDUuLjZhMzkxYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NUcmFu
c2Zvcm1WYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU1RyYW5zZm9y
bVZhbHVlLmNwcApAQCAtMzgsMTAgKzM4LDYgQEAgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6Oldl
YktpdENTU1RyYW5zZm9ybVZhbHVlKFRyYW5zZm9ybU9wZXJhdGlvblR5cGUgb3ApCiB7CiB9CiAK
LVdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjp+V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUoKQotewot
fQotCiBTdHJpbmcgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OmN1c3RvbUNzc1RleHQoKSBjb25z
dAogewogICAgIFN0cmluZyByZXN1bHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NU
cmFuc2Zvcm1WYWx1ZS5oCmluZGV4IDhhNWU2ZDguLmRiMDY4OGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9XZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5oCkBAIC02NSw3ICs2NSw3IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZSh0
eXBlKSk7CiAgICAgfQogCi0gICAgdmlydHVhbCB+V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUoKTsK
KyAgICB+V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUoKSB7IH0KIAogICAgIFN0cmluZyBjdXN0b21D
c3NUZXh0KCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdDb2xv
ci5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0NvbG9yLmgKaW5kZXggOGVmM2UzYS4uNzQ2Y2Ew
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0NvbG9yLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0NvbG9yLmgKQEAgLTcxLDExICs3MSwxMiBAQCBwdWJsaWM6CiAKICAg
ICBTdHJpbmcgY3VzdG9tQ3NzVGV4dCgpIGNvbnN0OwogCisgICAgflNWR0NvbG9yKCkgeyB9CisK
IHByb3RlY3RlZDoKICAgICBmcmllbmQgY2xhc3MgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9u
OwogCiAgICAgU1ZHQ29sb3IoQ2xhc3NUeXBlLCBjb25zdCBTVkdDb2xvclR5cGUmKTsKLSAgICB2
aXJ0dWFsIH5TVkdDb2xvcigpIHsgfQogCiAgICAgdm9pZCBzZXRDb2xvcihjb25zdCBDb2xvciYg
Y29sb3IpIHsgbV9jb2xvciA9IGNvbG9yOyB9CiAgICAgdm9pZCBzZXRDb2xvclR5cGUoY29uc3Qg
U1ZHQ29sb3JUeXBlJiB0eXBlKSB7IG1fY29sb3JUeXBlID0gdHlwZTsgfQo=
</data>
<flag name="review"
          id="112650"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>