<?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>99933</bug_id>
          
          <creation_ts>2012-10-21 07:38:26 -0700</creation_ts>
          <short_desc>Factor stylesheet invalidation analysis code into a class</short_desc>
          <delta_ts>2012-10-21 15:04: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="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>allan.jensen</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kling</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>747087</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-10-21 07:38:26 -0700</bug_when>
    <thetext>Currently the code is all over the place. It should be factored into a class to make further progress easier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>747089</commentid>
    <comment_count>1</comment_count>
      <attachid>169798</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-10-21 07:43:22 -0700</bug_when>
    <thetext>Created attachment 169798
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>747148</commentid>
    <comment_count>2</comment_count>
      <attachid>169798</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-10-21 14:12:43 -0700</bug_when>
    <thetext>Comment on attachment 169798
patch

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

&gt; Source/WebCore/css/StyleInvalidationAnalysis.h:30
&gt; +#include &lt;wtf/OwnPtr.h&gt;

OwnPtr is unused in the header (though PassOwnPtr is).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>747149</commentid>
    <comment_count>3</comment_count>
      <attachid>169798</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-10-21 14:13:19 -0700</bug_when>
    <thetext>Comment on attachment 169798
patch

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

&gt; Source/WebCore/dom/DocumentStyleSheetCollection.cpp:406
&gt; +    OwnPtr&lt;StyleInvalidationAnalysis&gt; invalidationAnalysis = StyleInvalidationAnalysis::create(addedSheets);
&gt; +    if (invalidationAnalysis-&gt;dirtiesAllStyle())
&gt; +        return;
&gt; +    invalidationAnalysis-&gt;invalidateStyle(m_document);

Could we create the StyleInvalidationAnalysis on the stack?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>747151</commentid>
    <comment_count>4</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-10-21 14:40:44 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Could we create the StyleInvalidationAnalysis on the stack?

We could but I was sort of considering caching it later. Doesn&apos;t make any meaningful difference in terms of performance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>747152</commentid>
    <comment_count>5</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-10-21 15:03:53 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/132009

(with stack allocated analysis object)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169798</attachid>
            <date>2012-10-21 07:43:22 -0700</date>
            <delta_ts>2012-10-21 14:13:19 -0700</delta_ts>
            <desc>patch</desc>
            <filename>stylesheet-analyzis-3.patch</filename>
            <type>text/plain</type>
            <size>37471</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMjAwMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ3IEBACisyMDEyLTEwLTIxICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBGYWN0b3Igc3R5bGVzaGVldCBp
bnZhbGlkYXRpb24gYW5hbHlzaXMgY29kZSBpbnRvIGEgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk5OTMzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3VycmVudGx5IHRoZSBzdHlsZXNoZWV0IGFu
YWx5c2lzIGNvZGUgaXMgYWxsIG92ZXIgdGhlIHBsYWNlLiBJdCBzaG91bGQgYmUgZmFjdG9yZWQg
aW50byBhIGNsYXNzIHRvIG1ha2UgZnVydGhlciBwcm9ncmVzcyBlYXNpZXIuCisKKyAgICAgICAg
VGhlIHBhdGNoIGFkZHMgU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcyBjbGFzcyAgYW5kIG1vdmVz
IGEgYnVuY2ggb2YgY29kZSBmcm9tIFNlbGVjdG9yQ2hlY2tlciwgU3R5bGVSZXNvbHZlcgorICAg
ICAgICBhbmQgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbiB0aGVyZS4gTm8gZnVuY3Rpb25h
bCBjaGFuZ2VzLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFr
ZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAgICAqIFdlYkNvcmUu
Z3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAg
KiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogY3NzL1NlbGVj
dG9yQ2hlY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBjc3MvU2VsZWN0
b3JDaGVja2VyLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBjc3MvU3R5bGVJbnZh
bGlkYXRpb25BbmFseXNpcy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzOjpTdHlsZUludmFsaWRhdGlvbkFu
YWx5c2lzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXM6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpkZXRlcm1pbmVTZWxlY3RvclNjb3Blcyk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzOjphbmFseXplU3R5bGVTaGVl
dCk6CisgICAgICAgIChXZWJDb3JlOjplbGVtZW50TWF0Y2hlc1NlbGVjdG9yU2NvcGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXM6OmludmFsaWRhdGVTdHls
ZSk6CisgICAgICAgICogY3NzL1N0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVJbnZhbGlkYXRpb25BbmFseXNpczo6ZGlydGllc0FsbFN0
eWxlKToKKyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjpjaGVja1JlZ2lvblNlbGVjdG9yKToKKyAgICAgICAgKiBjc3MvU3R5
bGVSZXNvbHZlci5oOgorICAgICAgICAoU3R5bGVSZXNvbHZlcik6CisgICAgICAgICogZG9tL0Rv
Y3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uOjphbmFseXplU3R5bGVT
aGVldENoYW5nZSk6CisgICAgICAgICogZG9tL0RvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24u
aDoKKyAgICAgICAgKERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24pOgorCiAyMDEyLTEwLTA4
ICBSb2JlcnQgSG9nYW4gIDxyb2JlcnRAd2Via2l0Lm9yZz4KIAogICAgICAgICBJbiBzb21lIGZs
b2F0IHNpdHVhdGlvbnMsIHRoZSBvcmlnaW5hbCBsYXlvdXQgaXMgd3JvbmcgYW5kIG9ubHkgY29y
cmVjdHMgaXRzZWxmIG9uIHJlcGFpbnQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lv
biAxMzE5MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMTA4MCw2ICsxMDgwLDcgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIGNzcy9TZWxl
Y3RvckNoZWNrZXIuY3BwCiAgICAgY3NzL1NoYWRvd1ZhbHVlLmNwcAogICAgIGNzcy9TdHlsZUJ1
aWxkZXIuY3BwCisgICAgY3NzL1N0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMuY3BwCiAgICAgY3Nz
L1N0eWxlTWVkaWEuY3BwCiAgICAgY3NzL1N0eWxlUHJvcGVydHlTZXQuY3BwCiAgICAgY3NzL1N0
eWxlUHJvcGVydHlTaG9ydGhhbmQuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0JKHJldmlzaW9uIDEzMTkyOCkKKysrIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0JKHdvcmtpbmcgY29weSkKQEAgLTI2NDIsNiArMjY0Miw4IEBAIHdlYmNvcmVfc291cmNlcyAr
PSBcCiAJU291cmNlL1dlYkNvcmUvY3NzL1NpYmxpbmdUcmF2ZXJzYWxTdHJhdGVnaWVzLmggXAog
CVNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9j
c3MvU3R5bGVCdWlsZGVyLmggXAorCVNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUludmFsaWRhdGlv
bkFuYWx5c2lzLmNwcCBcCisJU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlSW52YWxpZGF0aW9uQW5h
bHlzaXMuaCBcCiAJU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlTWVkaWEuY3BwIFwKIAlTb3VyY2Uv
V2ViQ29yZS9jc3MvU3R5bGVNZWRpYS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9w
ZXJ0eVNldC5jcHAgXApJbmRleDogU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCShyZXZpc2lvbiAxMzE5MjgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9UYXJnZXQucHJpCSh3b3JraW5nIGNvcHkpCkBAIC0zMTgsNiArMzE4LDcgQEAg
U09VUkNFUyArPSBcCiAgICAgY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAgXAogICAgIGNzcy9TaGFk
b3dWYWx1ZS5jcHAgXAogICAgIGNzcy9TdHlsZUJ1aWxkZXIuY3BwIFwKKyAgICBjc3MvU3R5bGVJ
bnZhbGlkYXRpb25BbmFseXNpcy5jcHAgXAogICAgIGNzcy9TdHlsZU1lZGlhLmNwcCBcCiAgICAg
Y3NzL1N0eWxlUHJvcGVydHlTZXQuY3BwIFwKICAgICBjc3MvU3R5bGVQcm9wZXJ0eVNob3J0aGFu
ZC5jcHAgXApAQCAtMTQ5MCw2ICsxNDkxLDcgQEAgSEVBREVSUyArPSBcCiAgICAgY3NzL1NpYmxp
bmdUcmF2ZXJzYWxTdHJhdGVnaWVzLmggXAogICAgIGNzcy9TdHlsZU1lZGlhLmggXAogICAgIGNz
cy9TdHlsZUJ1aWxkZXIuaCBcCisgICAgY3NzL1N0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMuaCBc
CiAgICAgY3NzL1N0eWxlUHJvcGVydHlTZXQuaCBcCiAgICAgY3NzL1N0eWxlUHJvcGVydHlTaG9y
dGhhbmQuaCBcCiAgICAgY3NzL1N0eWxlUmVzb2x2ZXIuaCBcCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CShyZXZpc2lvbiAxMzE5MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtp
bmcgY29weSkKQEAgLTI2MzcsNiArMjYzNyw4IEBACiAgICAgICAgICAgICAnY3NzL1NpYmxpbmdU
cmF2ZXJzYWxTdHJhdGVnaWVzLmgnLAogICAgICAgICAgICAgJ2Nzcy9TdHlsZUJ1aWxkZXIuY3Bw
JywKICAgICAgICAgICAgICdjc3MvU3R5bGVCdWlsZGVyLmgnLAorICAgICAgICAgICAgJ2Nzcy9T
dHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmNwcCcsCisgICAgICAgICAgICAnY3NzL1N0eWxlSW52
YWxpZGF0aW9uQW5hbHlzaXMuaCcsCiAgICAgICAgICAgICAnY3NzL1N0eWxlTWVkaWEuY3BwJywK
ICAgICAgICAgICAgICdjc3MvU3R5bGVNZWRpYS5oJywKICAgICAgICAgICAgICdjc3MvU3R5bGVQ
cm9wZXJ0eVNldC5jcHAnLApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDEzMTkyOCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNzc4Niw2ICszNzc4
NiwxNCBAQAogCQkJCVJlbGF0aXZlUGF0aD0iLi5cY3NzXFN0eWxlQnVpbGRlci5oIgogCQkJCT4K
IAkJCTwvRmlsZT4KKyAgICAgICAgICAgIDxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxjc3Nc
U3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcy5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZp
bGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGNzc1xTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmgi
CisJCQkJPgorCQkJPC9GaWxlPgogCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGNzc1xT
dHlsZU1lZGlhLmNwcCIKIAkJCQk+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMzE5MjgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTE2MzQsNiArMTYzNCw4IEBACiAJCTUyQ0NBOUU4MTVFM0Y2NEMwMDUzQzc3RiAvKiBET01E
T01OYW1lZEZsb3dDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MkNDQTlFNTE1RTNGNjRDMDA1M0M3N0YgLyogRE9NRE9NTmFtZWRGbG93
Q29sbGVjdGlvbi5oICovOyB9OwogCQk1MkNDQTlFOTE1RTNGNjRDMDA1M0M3N0YgLyogRE9NRE9N
TmFtZWRGbG93Q29sbGVjdGlvbi5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUyQ0NBOUU2MTVFM0Y2NEMwMDUzQzc3RiAvKiBET01ET01OYW1lZEZsb3dD
b2xsZWN0aW9uLm1tICovOyB9OwogCQk1MkNDQTlFQTE1RTNGNjRDMDA1M0M3N0YgLyogRE9NRE9N
TmFtZWRGbG93Q29sbGVjdGlvbkludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MkNDQTlFNzE1RTNGNjRDMDA1M0M3N0YgLyogRE9NRE9NTmFt
ZWRGbG93Q29sbGVjdGlvbkludGVybmFsLmggKi87IH07CisJCTUyRjEwODY1MTYyQjZEQTQwMDlB
QzgxRSAvKiBNaXhlZENvbnRlbnRDaGVja2VyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRjEwODYyMTYyQjZEODIwMDlBQzgxRSAvKiBNaXhlZENv
bnRlbnRDaGVja2VyLmNwcCAqLzsgfTsKKwkJNTJGMTA4NjYxNjJCNkRBODAwOUFDODFFIC8qIE1p
eGVkQ29udGVudENoZWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUyRjEwODYzMTYyQjZEODIwMDlBQzgxRSAvKiBNaXhlZENvbnRlbnRDaGVja2Vy
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJG
NTJFMTExNEEwMTM0RjAwQUNDMzk3IC8qIE5TU2Nyb2xsZXJJbXBEZXRhaWxzLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTJGNTJFMTAxNEEwMTM0RjAw
QUNDMzk3IC8qIE5TU2Nyb2xsZXJJbXBEZXRhaWxzLm1tICovOyB9OwogCQk1MzE3NjEyMjEzQzUx
NjY5MDAyNkU0NTQgLyogU3R5bGVGbGV4aWJsZUJveERhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMxNzYxMjAxM0M1MTY2OTAwMjZFNDU0IC8q
IFN0eWxlRmxleGlibGVCb3hEYXRhLmNwcCAqLzsgfTsKIAkJNTMxNzYxMjMxM0M1MTY2OTAwMjZF
NDU0IC8qIFN0eWxlRmxleGlibGVCb3hEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MzE3NjEyMTEzQzUxNjY5MDAyNkU0NTQgLyogU3R5bGVGbGV4
aWJsZUJveERhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtMTc1Niw3ICsxNzU4LDYgQEAKIAkJNjU2RDM3M0UwQURCQTVERTAwQTQ1NTREIC8q
IEZyYW1lTG9hZGVyQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA2NTZEMzcyNjBBREJBNURFMDBBNDU1NEQgLyogRnJhbWVMb2FkZXJDbGllbnQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2NTZE
MzczRjBBREJBNURFMDBBNDU1NEQgLyogUmVzb3VyY2VMb2FkZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NkQzNzI3MEFEQkE1REUwMEE0NTU0RCAv
KiBSZXNvdXJjZUxvYWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTY1NkQzNzQxMEFEQkE1REUwMEE0NTU0RCAvKiBNYWluUmVzb3VyY2VMb2Fk
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NkQz
NzI5MEFEQkE1REUwMEE0NTU0RCAvKiBNYWluUmVzb3VyY2VMb2FkZXIuaCAqLzsgfTsKLQkJNTJG
MTA4NjYxNjJCNkRBODAwOUFDODFFIC8qIE1peGVkQ29udGVudENoZWNrZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRjEwODYzMTYyQjZEODIwMDlB
QzgxRSAvKiBNaXhlZENvbnRlbnRDaGVja2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNjU2RDM3NDMwQURCQTVERTAwQTQ1NTREIC8qIE5ldHNj
YXBlUGx1Z0luU3RyZWFtTG9hZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA2NTZEMzcyQjBBREJBNURFMDBBNDU1NEQgLyogTmV0c2NhcGVQbHVnSW5T
dHJlYW1Mb2FkZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk2NTZEMzc0ODBBREJBNURFMDBBNDU1NEQgLyogU3VicmVzb3VyY2VMb2FkZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NkQzNzMwMEFE
QkE1REUwMEE0NTU0RCAvKiBTdWJyZXNvdXJjZUxvYWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTY1NzFEQ0M4MTM4NUU2QTQwMDcwMkREMCAv
KiBNZW1vcnlQcmVzc3VyZUhhbmRsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDY1N0VEQTA3MTM4NUNCOTcwMDRFMDY0NSAvKiBNZW1vcnlQcmVzc3Vy
ZUhhbmRsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtMzM0Miw3ICszMzQzLDYgQEAKIAkJOTNEOUQ1M0MwREEyN0UxODAwNzcyMTZDIC8qIFJh
bmdlQm91bmRhcnlQb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTNEOUQ1M0IwREEyN0UxODAwNzcyMTZDIC8qIFJhbmdlQm91bmRhcnlQb2ludC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzRTIy
N0UwMEFGNTg5QUQwMEQ0ODMyNCAvKiBEb2N1bWVudExvYWRlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0UyMjdEQjBBRjU4OUFEMDBENDgzMjQg
LyogRG9jdW1lbnRMb2FkZXIuY3BwICovOyB9OwogCQk5M0UyMjdFMTBBRjU4OUFEMDBENDgzMjQg
LyogTWFpblJlc291cmNlTG9hZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDkzRTIyN0RDMEFGNTg5QUQwMEQ0ODMyNCAvKiBNYWluUmVzb3VyY2VM
b2FkZXIuY3BwICovOyB9OwotCQk1MkYxMDg2NTE2MkI2REE0MDA5QUM4MUUgLyogTWl4ZWRDb250
ZW50Q2hlY2tlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MkYxMDg2MjE2MkI2RDgyMDA5QUM4MUUgLyogTWl4ZWRDb250ZW50Q2hlY2tlci5jcHAg
Ki87IH07CiAJCTkzRTIyN0UzMEFGNTg5QUQwMEQ0ODMyNCAvKiBSZXNvdXJjZUxvYWRlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5M0UyMjdERTBB
RjU4OUFEMDBENDgzMjQgLyogUmVzb3VyY2VMb2FkZXIuY3BwICovOyB9OwogCQk5M0UyMjdFNDBB
RjU4OUFEMDBENDgzMjQgLyogU3VicmVzb3VyY2VMb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTNFMjI3REYwQUY1ODlBRDAwRDQ4MzI0IC8q
IFN1YnJlc291cmNlTG9hZGVyLmNwcCAqLzsgfTsKIAkJOTNFMjQxRkYwQjJCNEU0MDAwQzczMkEx
IC8qIEhUTUxGcmFtZU93bmVyRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTNFMjQxRkUwQjJCNEU0MDAwQzczMkExIC8qIEhUTUxGcmFtZU93
bmVyRWxlbWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC02MTU3LDYgKzYxNTcsOCBAQAogCQlFNDUzMjJBQjE0MENFMjY3MDA1QTBGOTIgLyog
U2VsZWN0b3JRdWVyeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFNDUzMjJBOTE0MENFMjY3MDA1QTBGOTIgLyogU2VsZWN0b3JRdWVyeS5jcHAgKi87
IH07CiAJCUU0NTMyMkFDMTQwQ0UyNjcwMDVBMEY5MiAvKiBTZWxlY3RvclF1ZXJ5LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDUzMjJBQTE0MENFMjY3
MDA1QTBGOTIgLyogU2VsZWN0b3JRdWVyeS5oICovOyB9OwogCQlFNDYyQTRBMTExM0U3MUJFMDA0
QTQyMjAgLyogSW50UG9pbnRIYXNoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFNDYyQTRBMDExM0U3MUJFMDA0QTQyMjAgLyogSW50UG9pbnRIYXNoLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJRTQ3MTI3
Q0ExNjM0MzhBMTAwRUQ2RjVBIC8qIFN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ3QTk3Q0UxNjMwNTlG
QzAwNURDRDk5IC8qIFN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMuY3BwICovOyB9OworCQlFNDcx
MjdDQjE2MzQzOEFFMDBFRDZGNUEgLyogU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ3QTk3Q0YxNjMwNTlG
QzAwNURDRDk5IC8qIFN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMuaCAqLzsgfTsKIAkJRTQ3NzhC
N0YxMTVBNTgxQTAwQjVEMzcyIC8qIEpTQ3VzdG9tRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ3NzhCN0QxMTVBNTgxQTAwQjVEMzcyIC8q
IEpTQ3VzdG9tRXZlbnQuY3BwICovOyB9OwogCQlFNDc3OEI4MDExNUE1ODFBMDBCNUQzNzIgLyog
SlNDdXN0b21FdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTQ3NzhCN0UxMTVBNTgxQTAwQjVEMzcyIC8qIEpTQ3VzdG9tRXZlbnQuaCAqLzsgfTsK
IAkJRTQ3QjRCRTgwRTcxMjQxNjAwMDM4ODU0IC8qIENhY2hlZFJlc291cmNlSGFuZGxlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDdCNEJFNjBFNzEy
NDE2MDAwMzg4NTQgLyogQ2FjaGVkUmVzb3VyY2VIYW5kbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtODg0Miw2ICs4ODQ0LDggQEAKIAkJNTJD
Q0E5RTUxNUUzRjY0QzAwNTNDNzdGIC8qIERPTURPTU5hbWVkRmxvd0NvbGxlY3Rpb24uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkNDQTlFNjE1RTNGNjRDMDA1M0M3N0Yg
LyogRE9NRE9NTmFtZWRGbG93Q29sbGVjdGlvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IERPTURPTU5hbWVkRmxvd0NvbGxlY3Rpb24ubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUyQ0NBOUU3MTVFM0Y2NEMwMDUzQzc3RiAvKiBET01ET01OYW1l
ZEZsb3dDb2xsZWN0aW9uSW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRE9NRE9NTmFtZWRGbG93Q29sbGVjdGlvbkludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTUyRjEwODYyMTYyQjZEODIwMDlBQzgxRSAvKiBNaXhlZENvbnRlbnRDaGVj
a2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1peGVkQ29udGVu
dENoZWNrZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkYxMDg2MzE2MkI2
RDgyMDA5QUM4MUUgLyogTWl4ZWRDb250ZW50Q2hlY2tlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBNaXhlZENvbnRlbnRDaGVja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUyRjUyRTEwMTRBMDEzNEYwMEFDQzM5NyAvKiBOU1Njcm9sbGVySW1wRGV0YWls
cy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IE5TU2Nyb2xsZXJJ
bXBEZXRhaWxzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzE3NjEyMDEzQzUx
NjY5MDAyNkU0NTQgLyogU3R5bGVGbGV4aWJsZUJveERhdGEuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gU3R5bGVGbGV4aWJsZUJveERhdGEuY3BwOyBwYXRoID0gc3R5
bGUvU3R5bGVGbGV4aWJsZUJveERhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MzE3NjEyMTEzQzUxNjY5MDAyNkU0NTQgLyogU3R5bGVGbGV4aWJsZUJveERhdGEuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU3R5bGVGbGV4aWJsZUJveERhdGEuaDsgcGF0
aCA9IHN0eWxlL1N0eWxlRmxleGlibGVCb3hEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC04OTcyLDcgKzg5NzYsNiBAQAogCQk2NTZEMzcyNjBBREJBNURFMDBBNDU1NEQgLyog
RnJhbWVMb2FkZXJDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZy
YW1lTG9hZGVyQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1NkQzNzI3
MEFEQkE1REUwMEE0NTU0RCAvKiBSZXNvdXJjZUxvYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVzb3VyY2VMb2FkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNjU2RDM3MjkwQURCQTVERTAwQTQ1NTREIC8qIE1haW5SZXNvdXJjZUxvYWRlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFpblJlc291cmNlTG9hZGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUyRjEwODYzMTYyQjZEODIwMDlBQzgxRSAvKiBN
aXhlZENvbnRlbnRDaGVja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1p
eGVkQ29udGVudENoZWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjU2RDM3
MkIwQURCQTVERTAwQTQ1NTREIC8qIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXRzY2FwZVBsdWdJblN0cmVhbUxvYWRlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTZEMzczMDBBREJBNURFMDBBNDU1NEQg
LyogU3VicmVzb3VyY2VMb2FkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFN1YnJlc291cmNlTG9hZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1N0VE
QTA2MTM4NUNCOTcwMDRFMDY0NSAvKiBNZW1vcnlQcmVzc3VyZUhhbmRsZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwNTYyLDcgKzEwNTY1LDYgQEAKIAkJOTNE
OUQ1M0IwREEyN0UxODAwNzcyMTZDIC8qIFJhbmdlQm91bmRhcnlQb2ludC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSYW5nZUJvdW5kYXJ5UG9pbnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJOTNFMjI3REIwQUY1ODlBRDAwRDQ4MzI0IC8qIERvY3VtZW50TG9h
ZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERvY3VtZW50TG9h
ZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNFMjI3REMwQUY1ODlBRDAw
RDQ4MzI0IC8qIE1haW5SZXNvdXJjZUxvYWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBNYWluUmVzb3VyY2VMb2FkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk1MkYxMDg2MjE2MkI2RDgyMDA5QUM4MUUgLyogTWl4ZWRDb250ZW50Q2hlY2tl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNaXhlZENvbnRlbnRD
aGVja2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNFMjI3REQwQUY1ODlB
RDAwRDQ4MzI0IC8qIE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5ldHNjYXBlUGx1Z0luU3RyZWFtTG9hZGVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNFMjI3REUwQUY1ODlBRDAwRDQ4MzI0IC8q
IFJlc291cmNlTG9hZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlc291cmNlTG9hZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNFMjI3
REYwQUY1ODlBRDAwRDQ4MzI0IC8qIFN1YnJlc291cmNlTG9hZGVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN1YnJlc291cmNlTG9hZGVyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzNTYyLDYgKzEzNTY0LDggQEAKIAkJRTQ2MkE0QTAxMTNF
NzFCRTAwNEE0MjIwIC8qIEludFBvaW50SGFzaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJbnRQb2ludEhhc2guaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ3
NzhCN0QxMTVBNTgxQTAwQjVEMzcyIC8qIEpTQ3VzdG9tRXZlbnQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDdXN0b21FdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUU0Nzc4QjdFMTE1QTU4MUEwMEI1RDM3MiAvKiBKU0N1c3RvbUV2ZW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ3VzdG9tRXZlbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTQ3QTk3Q0UxNjMwNTlGQzAwNURDRDk5IC8qIFN0
eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUU0N0E5N0NGMTYzMDU5RkMwMDVEQ0Q5OSAvKiBTdHlsZUludmFsaWRhdGlv
bkFuYWx5c2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0eWxlSW52YWxp
ZGF0aW9uQW5hbHlzaXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQ3QjRCRTYw
RTcxMjQxNjAwMDM4ODU0IC8qIENhY2hlZFJlc291cmNlSGFuZGxlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENhY2hlZFJlc291cmNlSGFuZGxlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUU0N0I0QkU3MEU3MTI0MTYwMDAzODg1NCAvKiBDYWNoZWRSZXNvdXJj
ZUhhbmRsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWNoZWRS
ZXNvdXJjZUhhbmRsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0N0UyNzY0
MTYwMzZFRDIwMEVFMkFGQiAvKiBEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxMzEzLDYgKzIxMzE3LDggQEAKIAkJ
CQk1NzI4QkQ5RDE2MjUzNjk2MDBDNDBCNTYgLyogU2libGluZ1RyYXZlcnNhbFN0cmF0ZWdpZXMu
aCAqLywKIAkJCQlFMTAwRUU3MzE1NDZFQUMxMDBCQTExRDEgLyogU3R5bGVCdWlsZGVyLmNwcCAq
LywKIAkJCQlFMTAwRUU3NDE1NDZFQUMxMDBCQTExRDEgLyogU3R5bGVCdWlsZGVyLmggKi8sCisJ
CQkJRTQ3QTk3Q0UxNjMwNTlGQzAwNURDRDk5IC8qIFN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMu
Y3BwICovLAorCQkJCUU0N0E5N0NGMTYzMDU5RkMwMDVEQ0Q5OSAvKiBTdHlsZUludmFsaWRhdGlv
bkFuYWx5c2lzLmggKi8sCiAJCQkJMEZGNTAyNkUxMDJCQTk2NjAwNjZGMzlBIC8qIFN0eWxlTWVk
aWEuY3BwICovLAogCQkJCTBGRjUwMjZGMTAyQkE5NkEwMDY2RjM5QSAvKiBTdHlsZU1lZGlhLmgg
Ki8sCiAJCQkJMEZGNTAyNzAxMDJCQTk2QTAwNjZGMzlBIC8qIFN0eWxlTWVkaWEuaWRsICovLApA
QCAtMjU2MzUsNiArMjU2NDEsNyBAQAogCQkJCUZENTM3MzUzMTM3QjY1MTgwMDAwOERDRSAvKiBa
ZXJvUG9sZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0U1RDdBNzcxNjFEM0Y4RjAwODk2QzM0IC8q
IE9FU0VsZW1lbnRJbmRleFVpbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTdFNDZGNkZCMTYyN0Ey
Q0EwMDA2MjIyMyAvKiBKU09FU0VsZW1lbnRJbmRleFVpbnQuaCBpbiBIZWFkZXJzICovLAorCQkJ
CUU0NzEyN0NCMTYzNDM4QUUwMEVENkY1QSAvKiBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmgg
aW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNz
aW5nID0gMDsKIAkJfTsKQEAgLTI4NzQ0LDYgKzI4NzUxLDcgQEAKIAkJCQlGRDUzNzM1MjEzN0I2
NTE4MDAwMDhEQ0UgLyogWmVyb1BvbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0U1RDdBNzYx
NjFEM0Y4RjAwODk2QzM0IC8qIE9FU0VsZW1lbnRJbmRleFVpbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJN0U0NkY2RkExNjI3QTJDQTAwMDYyMjIzIC8qIEpTT0VTRWxlbWVudEluZGV4VWludC5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQlFNDcxMjdDQTE2MzQzOEExMDBFRDZGNUEgLyogU3R5bGVJ
bnZhbGlkYXRpb25BbmFseXNpcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5
Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCShyZXZpc2lvbiAxMzE5MjgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMzMywzMiAr
MTMzMyw2IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjppc0ZyYW1lRm9jdXNlZChjb24KICAgICBy
ZXR1cm4gZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSAmJiBlbGVtZW50LT5kb2N1bWVudCgp
LT5mcmFtZSgpLT5zZWxlY3Rpb24oKS0+aXNGb2N1c2VkQW5kQWN0aXZlKCk7CiB9CiAKLWJvb2wg
U2VsZWN0b3JDaGVja2VyOjpkZXRlcm1pbmVTZWxlY3RvclNjb3Blcyhjb25zdCBDU1NTZWxlY3Rv
ckxpc3QmIHNlbGVjdG9yTGlzdCwgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4mIGlkU2NvcGVz
LCBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiYgY2xhc3NTY29wZXMpCi17Ci0gICAgZm9yIChD
U1NTZWxlY3Rvciogc2VsZWN0b3IgPSBzZWxlY3Rvckxpc3QuZmlyc3QoKTsgc2VsZWN0b3I7IHNl
bGVjdG9yID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHNlbGVjdG9yKSkgewotICAgICAgICBDU1NT
ZWxlY3Rvciogc2NvcGVTZWxlY3RvciA9IDA7Ci0gICAgICAgIC8vIFRoaXMgcGlja3MgdGhlIHdp
ZGVzdCBzY29wZSwgbm90IHRoZSBuYXJyb3dlc3QsIHRvIG1pbmltaXplIHRoZSBudW1iZXIgb2Yg
Zm91bmQgc2NvcGVzLgotICAgICAgICBmb3IgKENTU1NlbGVjdG9yKiBjdXJyZW50ID0gc2VsZWN0
b3I7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT50YWdIaXN0b3J5KCkpIHsKLSAgICAgICAg
ICAgIC8vIFByZWZlciBpZHMgb3ZlciBjbGFzc2VzLgotICAgICAgICAgICAgaWYgKGN1cnJlbnQt
Pm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OklkKQotICAgICAgICAgICAgICAgIHNjb3BlU2VsZWN0
b3IgPSBjdXJyZW50OwotICAgICAgICAgICAgZWxzZSBpZiAoY3VycmVudC0+bV9tYXRjaCA9PSBD
U1NTZWxlY3Rvcjo6Q2xhc3MgJiYgKCFzY29wZVNlbGVjdG9yIHx8IHNjb3BlU2VsZWN0b3ItPm1f
bWF0Y2ggIT0gQ1NTU2VsZWN0b3I6OklkKSkKLSAgICAgICAgICAgICAgICBzY29wZVNlbGVjdG9y
ID0gY3VycmVudDsKLSAgICAgICAgICAgIENTU1NlbGVjdG9yOjpSZWxhdGlvbiByZWxhdGlvbiA9
IGN1cnJlbnQtPnJlbGF0aW9uKCk7Ci0gICAgICAgICAgICBpZiAocmVsYXRpb24gIT0gQ1NTU2Vs
ZWN0b3I6OkRlc2NlbmRhbnQgJiYgcmVsYXRpb24gIT0gQ1NTU2VsZWN0b3I6OkNoaWxkICYmIHJl
bGF0aW9uICE9IENTU1NlbGVjdG9yOjpTdWJTZWxlY3RvcikKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBpZiAoIXNjb3BlU2VsZWN0b3IpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIEFTU0VSVChzY29wZVNlbGVjdG9yLT5tX21hdGNoID09IENT
U1NlbGVjdG9yOjpDbGFzcyB8fCBzY29wZVNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9y
OjpJZCk7Ci0gICAgICAgIGlmIChzY29wZVNlbGVjdG9yLT5tX21hdGNoID09IENTU1NlbGVjdG9y
OjpJZCkKLSAgICAgICAgICAgIGlkU2NvcGVzLmFkZChzY29wZVNlbGVjdG9yLT52YWx1ZSgpLmlt
cGwoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNsYXNzU2NvcGVzLmFkZChzY29wZVNl
bGVjdG9yLT52YWx1ZSgpLmltcGwoKSk7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCiB0
ZW1wbGF0ZQogYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoY29uc3QgU2Vs
ZWN0b3JDaGVja2VyOjpTZWxlY3RvckNoZWNraW5nQ29udGV4dCYsIGNvbnN0IFNoYWRvd0RPTVNp
YmxpbmdUcmF2ZXJzYWxTdHJhdGVneSYpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
c3MvU2VsZWN0b3JDaGVja2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1Nl
bGVjdG9yQ2hlY2tlci5oCShyZXZpc2lvbiAxMzE5MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3Mv
U2VsZWN0b3JDaGVja2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTExOSwxMCArMTE5LDYgQEAgcHVi
bGljOgogICAgIGVudW0gTGlua01hdGNoTWFzayB7IE1hdGNoTGluayA9IDEsIE1hdGNoVmlzaXRl
ZCA9IDIsIE1hdGNoQWxsID0gTWF0Y2hMaW5rIHwgTWF0Y2hWaXNpdGVkIH07CiAgICAgc3RhdGlj
IHVuc2lnbmVkIGRldGVybWluZUxpbmtNYXRjaFR5cGUoY29uc3QgQ1NTU2VsZWN0b3IqKTsKIAot
ICAgIC8vIEZpbmQgdGhlIGlkcyBvciBjbGFzc2VzIHNlbGVjdG9ycyBhcmUgc2NvcGVkIHRvLiBU
aGUgc2VsZWN0b3JzIG9ubHkgYXBwbHkgdG8gZWxlbWVudHMgaW4gc3VidHJlZXMgd2hlcmUgdGhl
IHJvb3QgZWxlbWVudCBtYXRjaGVzIHRoZSBzY29wZS4KLSAgICBzdGF0aWMgYm9vbCBkZXRlcm1p
bmVTZWxlY3RvclNjb3Blcyhjb25zdCBDU1NTZWxlY3Rvckxpc3QmLCBIYXNoU2V0PEF0b21pY1N0
cmluZ0ltcGwqPiYgaWRTY29wZXMsIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+JiBjbGFzc1Nj
b3Blcyk7Ci0gICAgc3RhdGljIGJvb2wgZWxlbWVudE1hdGNoZXNTZWxlY3RvclNjb3Blcyhjb25z
dCBTdHlsZWRFbGVtZW50KiwgY29uc3QgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4mIGlkU2Nv
cGVzLCBjb25zdCBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiYgY2xhc3NTY29wZXMpOwotCiBw
cml2YXRlOgogICAgIGJvb2wgY2hlY2tTY3JvbGxiYXJQc2V1ZG9DbGFzcyhDU1NTZWxlY3Rvciop
IGNvbnN0OwogICAgIHN0YXRpYyBib29sIGlzRnJhbWVGb2N1c2VkKGNvbnN0IEVsZW1lbnQqKTsK
QEAgLTIyOSwyMCArMjI1LDYgQEAgaW5saW5lIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpmYXN0Q2hl
Y2tSaQogICAgIHJldHVybiB0cnVlOwogfQogCi1pbmxpbmUgYm9vbCBTZWxlY3RvckNoZWNrZXI6
OmVsZW1lbnRNYXRjaGVzU2VsZWN0b3JTY29wZXMoY29uc3QgU3R5bGVkRWxlbWVudCogZWxlbWVu
dCwgY29uc3QgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4mIGlkU2NvcGVzLCBjb25zdCBIYXNo
U2V0PEF0b21pY1N0cmluZ0ltcGwqPiYgY2xhc3NTY29wZXMpCi17Ci0gICAgaWYgKCFpZFNjb3Bl
cy5pc0VtcHR5KCkgJiYgZWxlbWVudC0+aGFzSUQoKSAmJiBpZFNjb3Blcy5jb250YWlucyhlbGVt
ZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSkpCi0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIGlmIChjbGFzc1Njb3Blcy5pc0VtcHR5KCkgfHwgIWVsZW1lbnQtPmhhc0NsYXNzKCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBjbGFz
c05hbWVzID0gZWxlbWVudC0+Y2xhc3NOYW1lcygpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBjbGFzc05hbWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChjbGFzc1Njb3Blcy5j
b250YWlucyhjbGFzc05hbWVzW2ldLmltcGwoKSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCiB9CiAKICNlbmRpZgpJbmRleDogU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmgiCisKKyNpbmNsdWRl
ICJDU1NTZWxlY3Rvckxpc3QuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIlN0
eWxlUnVsZUltcG9ydC5oIgorI2luY2x1ZGUgIlN0eWxlU2hlZXRDb250ZW50cy5oIgorI2luY2x1
ZGUgIlN0eWxlZEVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTdHlsZUludmFs
aWRhdGlvbkFuYWx5c2lzOjpTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzKGNvbnN0IFZlY3RvcjxT
dHlsZVNoZWV0Q29udGVudHMqPiYgc2hlZXRzKQorICAgIDogbV9kaXJ0aWVzQWxsU3R5bGUoZmFs
c2UpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNoZWV0cy5zaXplKCkgJiYgIW1f
ZGlydGllc0FsbFN0eWxlOyArK2kpCisgICAgICAgIGFuYWx5emVTdHlsZVNoZWV0KHNoZWV0c1tp
XSk7Cit9CisKK1Bhc3NPd25QdHI8U3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcz4gU3R5bGVJbnZh
bGlkYXRpb25BbmFseXNpczo6Y3JlYXRlKGNvbnN0IFZlY3RvcjxTdHlsZVNoZWV0Q29udGVudHMq
PiYgc2hlZXRzKQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgU3R5bGVJbnZhbGlkYXRpb25B
bmFseXNpcyhzaGVldHMpKTsKK30KKworc3RhdGljIGJvb2wgZGV0ZXJtaW5lU2VsZWN0b3JTY29w
ZXMoY29uc3QgQ1NTU2VsZWN0b3JMaXN0JiBzZWxlY3Rvckxpc3QsIEhhc2hTZXQ8QXRvbWljU3Ry
aW5nSW1wbCo+JiBpZFNjb3BlcywgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4mIGNsYXNzU2Nv
cGVzKQoreworICAgIGZvciAoQ1NTU2VsZWN0b3IqIHNlbGVjdG9yID0gc2VsZWN0b3JMaXN0LmZp
cnN0KCk7IHNlbGVjdG9yOyBzZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzZWxlY3Rv
cikpIHsKKyAgICAgICAgQ1NTU2VsZWN0b3IqIHNjb3BlU2VsZWN0b3IgPSAwOworICAgICAgICAv
LyBUaGlzIHBpY2tzIHRoZSB3aWRlc3Qgc2NvcGUsIG5vdCB0aGUgbmFycm93ZXN0LCB0byBtaW5p
bWl6ZSB0aGUgbnVtYmVyIG9mIGZvdW5kIHNjb3Blcy4KKyAgICAgICAgZm9yIChDU1NTZWxlY3Rv
ciogY3VycmVudCA9IHNlbGVjdG9yOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+dGFnSGlz
dG9yeSgpKSB7CisgICAgICAgICAgICAvLyBQcmVmZXIgaWRzIG92ZXIgY2xhc3Nlcy4KKyAgICAg
ICAgICAgIGlmIChjdXJyZW50LT5tX21hdGNoID09IENTU1NlbGVjdG9yOjpJZCkKKyAgICAgICAg
ICAgICAgICBzY29wZVNlbGVjdG9yID0gY3VycmVudDsKKyAgICAgICAgICAgIGVsc2UgaWYgKGN1
cnJlbnQtPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OkNsYXNzICYmICghc2NvcGVTZWxlY3RvciB8
fCBzY29wZVNlbGVjdG9yLT5tX21hdGNoICE9IENTU1NlbGVjdG9yOjpJZCkpCisgICAgICAgICAg
ICAgICAgc2NvcGVTZWxlY3RvciA9IGN1cnJlbnQ7CisgICAgICAgICAgICBDU1NTZWxlY3Rvcjo6
UmVsYXRpb24gcmVsYXRpb24gPSBjdXJyZW50LT5yZWxhdGlvbigpOworICAgICAgICAgICAgaWYg
KHJlbGF0aW9uICE9IENTU1NlbGVjdG9yOjpEZXNjZW5kYW50ICYmIHJlbGF0aW9uICE9IENTU1Nl
bGVjdG9yOjpDaGlsZCAmJiByZWxhdGlvbiAhPSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3IpCisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFzY29wZVNlbGVj
dG9yKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBBU1NFUlQoc2NvcGVTZWxl
Y3Rvci0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6Q2xhc3MgfHwgc2NvcGVTZWxlY3Rvci0+bV9t
YXRjaCA9PSBDU1NTZWxlY3Rvcjo6SWQpOworICAgICAgICBpZiAoc2NvcGVTZWxlY3Rvci0+bV9t
YXRjaCA9PSBDU1NTZWxlY3Rvcjo6SWQpCisgICAgICAgICAgICBpZFNjb3Blcy5hZGQoc2NvcGVT
ZWxlY3Rvci0+dmFsdWUoKS5pbXBsKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjbGFz
c1Njb3Blcy5hZGQoc2NvcGVTZWxlY3Rvci0+dmFsdWUoKS5pbXBsKCkpOworICAgIH0KKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzOjphbmFseXpl
U3R5bGVTaGVldChTdHlsZVNoZWV0Q29udGVudHMqIHN0eWxlU2hlZXRDb250ZW50cykKK3sKKyAg
ICBBU1NFUlQoIXN0eWxlU2hlZXRDb250ZW50cy0+aXNMb2FkaW5nKCkpOworCisgICAgLy8gU2Vl
IGlmIGFsbCBydWxlcyBvbiB0aGUgc2hlZXQgYXJlIHNjb3BlZCB0byBzb21lIHNwZWNpZmljIGlk
cyBvciBjbGFzc2VzLgorICAgIC8vIFRoZW4gdGVzdCBpZiB3ZSBhY3R1YWxseSBoYXZlIGFueSBv
ZiB0aG9zZSBpbiB0aGUgdHJlZSBhdCB0aGUgbW9tZW50LgorICAgIGNvbnN0IFZlY3RvcjxSZWZQ
dHI8U3R5bGVSdWxlSW1wb3J0PiA+JiBpbXBvcnRSdWxlcyA9IHN0eWxlU2hlZXRDb250ZW50cy0+
aW1wb3J0UnVsZXMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW1wb3J0UnVsZXMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCFpbXBvcnRSdWxlc1tpXS0+c3R5bGVTaGVldCgp
KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGFuYWx5emVTdHlsZVNoZWV0KGltcG9y
dFJ1bGVzW2ldLT5zdHlsZVNoZWV0KCkpOworICAgICAgICBpZiAobV9kaXJ0aWVzQWxsU3R5bGUp
CisgICAgICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5
bGVSdWxlQmFzZT4gPiYgcnVsZXMgPSBzdHlsZVNoZWV0Q29udGVudHMtPmNoaWxkUnVsZXMoKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcnVsZXMuc2l6ZSgpOyBpKyspIHsKKyAgICAg
ICAgU3R5bGVSdWxlQmFzZSogcnVsZSA9IHJ1bGVzW2ldLmdldCgpOworICAgICAgICBpZiAoIXJ1
bGUtPmlzU3R5bGVSdWxlKCkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBNZWRpYSBydWxlcyBh
bmQgbWF5YmUgc29tZSBvdGhlcnMgY291bGQgYmUgYWxsb3dlZC4KKyAgICAgICAgICAgIG1fZGly
dGllc0FsbFN0eWxlID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICBTdHlsZVJ1bGUqIHN0eWxlUnVsZSA9IHN0YXRpY19jYXN0PFN0eWxlUnVsZSo+KHJ1bGUp
OworICAgICAgICBpZiAoIWRldGVybWluZVNlbGVjdG9yU2NvcGVzKHN0eWxlUnVsZS0+c2VsZWN0
b3JMaXN0KCksIG1faWRTY29wZXMsIG1fY2xhc3NTY29wZXMpKSB7CisgICAgICAgICAgICBtX2Rp
cnRpZXNBbGxTdHlsZSA9IHRydWU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK3N0YXRpYyBib29sIGVsZW1lbnRNYXRjaGVzU2VsZWN0b3JTY29wZXMoY29uc3Qg
U3R5bGVkRWxlbWVudCogZWxlbWVudCwgY29uc3QgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4m
IGlkU2NvcGVzLCBjb25zdCBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiYgY2xhc3NTY29wZXMp
Cit7CisgICAgaWYgKCFpZFNjb3Blcy5pc0VtcHR5KCkgJiYgZWxlbWVudC0+aGFzSUQoKSAmJiBp
ZFNjb3Blcy5jb250YWlucyhlbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSkp
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChjbGFzc1Njb3Blcy5pc0VtcHR5KCkgfHwg
IWVsZW1lbnQtPmhhc0NsYXNzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjb25zdCBT
cGFjZVNwbGl0U3RyaW5nJiBjbGFzc05hbWVzID0gZWxlbWVudC0+Y2xhc3NOYW1lcygpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjbGFzc05hbWVzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIGlmIChjbGFzc1Njb3Blcy5jb250YWlucyhjbGFzc05hbWVzW2ldLmltcGwoKSkpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lk
IFN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXM6OmludmFsaWRhdGVTdHlsZShEb2N1bWVudCogZG9j
dW1lbnQpCit7CisgICAgQVNTRVJUKCFtX2RpcnRpZXNBbGxTdHlsZSk7CisgICAgaWYgKG1faWRT
Y29wZXMuaXNFbXB0eSgpICYmIG1fY2xhc3NTY29wZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm47CisgICAgTm9kZSogbm9kZSA9IGRvY3VtZW50LT5maXJzdENoaWxkKCk7CisgICAgd2hpbGUg
KG5vZGUpIHsKKyAgICAgICAgaWYgKCFub2RlLT5pc1N0eWxlZEVsZW1lbnQoKSkgeworICAgICAg
ICAgICAgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKTsKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICB9CisgICAgICAgIFN0eWxlZEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNf
Y2FzdDxTdHlsZWRFbGVtZW50Kj4obm9kZSk7CisgICAgICAgIGlmIChlbGVtZW50TWF0Y2hlc1Nl
bGVjdG9yU2NvcGVzKGVsZW1lbnQsIG1faWRTY29wZXMsIG1fY2xhc3NTY29wZXMpKSB7CisgICAg
ICAgICAgICBlbGVtZW50LT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgICAgICAvLyBU
aGUgd2hvbGUgc3VidHJlZSBpcyBub3cgaW52YWxpZGF0ZWQsIHdlIGNhbiBza2lwIHRvIHRoZSBu
ZXh0IHNpYmxpbmcuCisgICAgICAgICAgICBub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0U2libGlu
ZygpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgbm9kZSA9IG5v
ZGUtPnRyYXZlcnNlTmV4dE5vZGUoKTsKKyAgICB9Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXMuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU3R5bGVJbnZhbGlkYXRpb25B
bmFseXNpc19oCisjZGVmaW5lIFN0eWxlSW52YWxpZGF0aW9uQW5hbHlzaXNfaAorCisjaW5jbHVk
ZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvQXRvbWljU3RyaW5nSW1wbC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IERvY3VtZW50OworY2xhc3MgU3R5bGVTaGVldENvbnRlbnRzOworCitjbGFzcyBTdHlsZUludmFs
aWRhdGlvbkFuYWx5c2lzIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxTdHlsZUlu
dmFsaWRhdGlvbkFuYWx5c2lzPiBjcmVhdGUoY29uc3QgVmVjdG9yPFN0eWxlU2hlZXRDb250ZW50
cyo+Jik7CisKKyAgICBib29sIGRpcnRpZXNBbGxTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGly
dGllc0FsbFN0eWxlOyB9CisgICAgdm9pZCBpbnZhbGlkYXRlU3R5bGUoRG9jdW1lbnQqKTsKKwor
cHJpdmF0ZToKKyAgICBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lzKGNvbnN0IFZlY3RvcjxTdHls
ZVNoZWV0Q29udGVudHMqPiYpOworCisgICAgdm9pZCBhbmFseXplU3R5bGVTaGVldChTdHlsZVNo
ZWV0Q29udGVudHMqKTsKKworICAgIGJvb2wgbV9kaXJ0aWVzQWxsU3R5bGU7CisgICAgSGFzaFNl
dDxBdG9taWNTdHJpbmdJbXBsKj4gbV9pZFNjb3BlczsKKyAgICBIYXNoU2V0PEF0b21pY1N0cmlu
Z0ltcGwqPiBtX2NsYXNzU2NvcGVzOworfTsKKworfQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAJKHJldmlzaW9uIDEzMTkyOSkKKysrIFNvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIwOSwzMyArMjIw
OSw2IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2hlY2tSZWdpb25TZWxlY3RvcigKIAogICAgIHJl
dHVybiBmYWxzZTsKIH0KLSAgICAKLWJvb2wgU3R5bGVSZXNvbHZlcjo6ZGV0ZXJtaW5lU3R5bGVz
aGVldFNlbGVjdG9yU2NvcGVzKFN0eWxlU2hlZXRDb250ZW50cyogc3R5bGVzaGVldCwgSGFzaFNl
dDxBdG9taWNTdHJpbmdJbXBsKj4mIGlkU2NvcGVzLCBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwq
PiYgY2xhc3NTY29wZXMpCi17Ci0gICAgQVNTRVJUKCFzdHlsZXNoZWV0LT5pc0xvYWRpbmcoKSk7
Ci0KLSAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUltcG9ydD4gPiYgaW1wb3J0UnVs
ZXMgPSBzdHlsZXNoZWV0LT5pbXBvcnRSdWxlcygpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBpbXBvcnRSdWxlcy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoIWltcG9ydFJ1bGVz
W2ldLT5zdHlsZVNoZWV0KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKCFk
ZXRlcm1pbmVTdHlsZXNoZWV0U2VsZWN0b3JTY29wZXMoaW1wb3J0UnVsZXNbaV0tPnN0eWxlU2hl
ZXQoKSwgaWRTY29wZXMsIGNsYXNzU2NvcGVzKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0KLSAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4mIHJ1bGVz
ID0gc3R5bGVzaGVldC0+Y2hpbGRSdWxlcygpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBydWxlcy5zaXplKCk7IGkrKykgewotICAgICAgICBTdHlsZVJ1bGVCYXNlKiBydWxlID0gcnVs
ZXNbaV0uZ2V0KCk7Ci0gICAgICAgIGlmIChydWxlLT5pc1N0eWxlUnVsZSgpKSB7Ci0gICAgICAg
ICAgICBTdHlsZVJ1bGUqIHN0eWxlUnVsZSA9IHN0YXRpY19jYXN0PFN0eWxlUnVsZSo+KHJ1bGUp
OwotICAgICAgICAgICAgaWYgKCFTZWxlY3RvckNoZWNrZXI6OmRldGVybWluZVNlbGVjdG9yU2Nv
cGVzKHN0eWxlUnVsZS0+c2VsZWN0b3JMaXN0KCksIGlkU2NvcGVzLCBjbGFzc1Njb3BlcykpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIH0gCi0gICAgICAgIC8vIEZJWE1FOiBNZWRpYSBydWxlcyBhbmQgbWF5YmUgc29tZSBvdGhl
cnMgY291bGQgYmUgYWxsb3dlZC4KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gdGhp
cyBpcyBtb3N0bHkgYm9yaW5nIHN0dWZmIG9uIGhvdyB0byBhcHBseSBhIGNlcnRhaW4gcnVsZSB0
byB0aGUgcmVuZGVyc3R5bGUuLi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29s
dmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAko
cmV2aXNpb24gMTMxOTI5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMTY0LDkgKzE2NCw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcmVz
ZXRBdXRob3JTdHlsZSgpOwogICAgIHZvaWQgYXBwZW5kQXV0aG9yU3R5bGVTaGVldHModW5zaWdu
ZWQgZmlyc3ROZXcsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiYpOwotICAg
IAotICAgIC8vIEZpbmQgdGhlIGlkcyBvciBjbGFzc2VzIHRoZSBzZWxlY3RvcnMgb24gYSBzdHls
ZXNoZWV0IGFyZSBzY29wZWQgdG8uIFRoZSBzZWxlY3RvcnMgb25seSBhcHBseSB0byBlbGVtZW50
cyBpbiBzdWJ0cmVlcyB3aGVyZSB0aGUgcm9vdCBlbGVtZW50IG1hdGNoZXMgdGhlIHNjb3BlLgot
ICAgIHN0YXRpYyBib29sIGRldGVybWluZVN0eWxlc2hlZXRTZWxlY3RvclNjb3BlcyhTdHlsZVNo
ZWV0Q29udGVudHMqLCBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiYgaWRTY29wZXMsIEhhc2hT
ZXQ8QXRvbWljU3RyaW5nSW1wbCo+JiBjbGFzc1Njb3Blcyk7CiAKIHByaXZhdGU6CiAgICAgdm9p
ZCBpbml0Rm9yU3R5bGVSZXNvbHZlKEVsZW1lbnQqLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUg
PSAwLCBQc2V1ZG9JZCA9IE5PUFNFVURPKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5jcHAJKHJldmlzaW9uIDEzMTkyOSkK
KysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgIlNWR1N0eWxlRWxlbWVu
dC5oIgogI2luY2x1ZGUgIlNlbGVjdG9yQ2hlY2tlci5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgi
CisjaW5jbHVkZSAiU3R5bGVJbnZhbGlkYXRpb25BbmFseXNpcy5oIgogI2luY2x1ZGUgIlN0eWxl
UmVzb2x2ZXIuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0Q29udGVudHMuaCIKICNpbmNsdWRlICJT
dHlsZVNoZWV0TGlzdC5oIgpAQCAtMzQ3LDMzICszNDgsNiBAQCB2b2lkIERvY3VtZW50U3R5bGVT
aGVldENvbGxlY3Rpb246OmNvbGxlCiAgICAgfQogfQogCi1ib29sIERvY3VtZW50U3R5bGVTaGVl
dENvbGxlY3Rpb246OnRlc3RBZGRlZFN0eWxlU2hlZXRSZXF1aXJlc1N0eWxlUmVjYWxjKFN0eWxl
U2hlZXRDb250ZW50cyogc3R5bGVzaGVldCkKLXsKLSAgICAvLyBTZWUgaWYgYWxsIHJ1bGVzIG9u
IHRoZSBzaGVldCBhcmUgc2NvcGVkIHRvIHNvbWUgc3BlY2lmaWMgaWRzIG9yIGNsYXNzZXMuCi0g
ICAgLy8gVGhlbiB0ZXN0IGlmIHdlIGFjdHVhbGx5IGhhdmUgYW55IG9mIHRob3NlIGluIHRoZSB0
cmVlIGF0IHRoZSBtb21lbnQuCi0gICAgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4gaWRTY29w
ZXM7IAotICAgIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+IGNsYXNzU2NvcGVzOwotICAgIGlm
ICghU3R5bGVSZXNvbHZlcjo6ZGV0ZXJtaW5lU3R5bGVzaGVldFNlbGVjdG9yU2NvcGVzKHN0eWxl
c2hlZXQsIGlkU2NvcGVzLCBjbGFzc1Njb3BlcykpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IC8vIEludmFsaWRhdGUgdGhlIHN1YnRyZWVzIHRoYXQgbWF0Y2ggdGhlIHNjb3Blcy4KLSAgICBO
b2RlKiBub2RlID0gbV9kb2N1bWVudC0+Zmlyc3RDaGlsZCgpOwotICAgIHdoaWxlIChub2RlKSB7
Ci0gICAgICAgIGlmICghbm9kZS0+aXNTdHlsZWRFbGVtZW50KCkpIHsKLSAgICAgICAgICAgIG5v
ZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgfQotICAgICAgICBTdHlsZWRFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U3R5
bGVkRWxlbWVudCo+KG5vZGUpOwotICAgICAgICBpZiAoU2VsZWN0b3JDaGVja2VyOjplbGVtZW50
TWF0Y2hlc1NlbGVjdG9yU2NvcGVzKGVsZW1lbnQsIGlkU2NvcGVzLCBjbGFzc1Njb3BlcykpIHsK
LSAgICAgICAgICAgIGVsZW1lbnQtPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKLSAgICAgICAgICAg
IC8vIFRoZSB3aG9sZSBzdWJ0cmVlIGlzIG5vdyBpbnZhbGlkYXRlZCwgd2UgY2FuIHNraXAgdG8g
dGhlIG5leHQgc2libGluZy4KLSAgICAgICAgICAgIG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHRT
aWJsaW5nKCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBub2Rl
ID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KIHZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6YW5hbHl6ZVN0eWxlU2hlZXRD
aGFuZ2UoVXBkYXRlRmxhZyB1cGRhdGVGbGFnLCBjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxl
U2hlZXQ+ID4mIG5ld1N0eWxlc2hlZXRzLCBTdHlsZVJlc29sdmVyVXBkYXRlVHlwZSYgc3R5bGVS
ZXNvbHZlclVwZGF0ZVR5cGUsIGJvb2wmIHJlcXVpcmVzRnVsbFN0eWxlUmVjYWxjKQogewogICAg
IHN0eWxlUmVzb2x2ZXJVcGRhdGVUeXBlID0gUmVjb25zdHJ1Y3Q7CkBAIC00MDEsMTMgKzM3NSwx
MyBAQCB2b2lkIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OmFuYWx5CiAgICAgdW5zaWdu
ZWQgb2xkU3R5bGVzaGVldENvdW50ID0gbV9hY3RpdmVBdXRob3JTdHlsZVNoZWV0cy5zaXplKCk7
CiAgICAgaWYgKG5ld1N0eWxlc2hlZXRDb3VudCA8IG9sZFN0eWxlc2hlZXRDb3VudCkKICAgICAg
ICAgcmV0dXJuOwotICAgIFZlY3RvcjxDU1NTdHlsZVNoZWV0Kj4gYWRkZWRTaGVldHM7CisgICAg
VmVjdG9yPFN0eWxlU2hlZXRDb250ZW50cyo+IGFkZGVkU2hlZXRzOwogICAgIHVuc2lnbmVkIG5l
d0luZGV4ID0gMDsKICAgICBmb3IgKHVuc2lnbmVkIG9sZEluZGV4ID0gMDsgb2xkSW5kZXggPCBv
bGRTdHlsZXNoZWV0Q291bnQ7ICsrb2xkSW5kZXgpIHsKICAgICAgICAgaWYgKG5ld0luZGV4ID49
IG5ld1N0eWxlc2hlZXRDb3VudCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgd2hpbGUg
KG1fYWN0aXZlQXV0aG9yU3R5bGVTaGVldHNbb2xkSW5kZXhdICE9IG5ld1N0eWxlc2hlZXRzW25l
d0luZGV4XSkgewotICAgICAgICAgICAgYWRkZWRTaGVldHMuYXBwZW5kKG5ld1N0eWxlc2hlZXRz
W25ld0luZGV4XS5nZXQoKSk7CisgICAgICAgICAgICBhZGRlZFNoZWV0cy5hcHBlbmQobmV3U3R5
bGVzaGVldHNbbmV3SW5kZXhdLT5jb250ZW50cygpKTsKICAgICAgICAgICAgICsrbmV3SW5kZXg7
CiAgICAgICAgICAgICBpZiAobmV3SW5kZXggPT0gbmV3U3R5bGVzaGVldENvdW50KQogICAgICAg
ICAgICAgICAgIHJldHVybjsKQEAgLTQxNiw3ICszOTAsNyBAQCB2b2lkIERvY3VtZW50U3R5bGVT
aGVldENvbGxlY3Rpb246OmFuYWx5CiAgICAgfQogICAgIGJvb2wgaGFzSW5zZXJ0aW9ucyA9ICFh
ZGRlZFNoZWV0cy5pc0VtcHR5KCk7CiAgICAgd2hpbGUgKG5ld0luZGV4IDwgbmV3U3R5bGVzaGVl
dENvdW50KSB7Ci0gICAgICAgIGFkZGVkU2hlZXRzLmFwcGVuZChuZXdTdHlsZXNoZWV0c1tuZXdJ
bmRleF0uZ2V0KCkpOworICAgICAgICBhZGRlZFNoZWV0cy5hcHBlbmQobmV3U3R5bGVzaGVldHNb
bmV3SW5kZXhdLT5jb250ZW50cygpKTsKICAgICAgICAgKytuZXdJbmRleDsKICAgICB9CiAgICAg
Ly8gSWYgYWxsIG5ldyBzaGVldHMgd2VyZSBhZGRlZCBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0IHdl
IGNhbiBqdXN0IGFkZCB0aGVtIHRvIGV4aXN0aW5nIFN0eWxlUmVzb2x2ZXIuCkBAIC00MjYsMTAg
KzQwMCwxMCBAQCB2b2lkIERvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb246OmFuYWx5CiAgICAg
Ly8gSWYgd2UgYXJlIGFscmVhZHkgcGFyc2luZyB0aGUgYm9keSBhbmQgc28gbWF5IGhhdmUgc2ln
bmlmaWNhbnQgYW1vdW50IG9mIGVsZW1lbnRzLCBwdXQgc29tZSBlZmZvcnQgaW50byB0cnlpbmcg
dG8gYXZvaWQgc3R5bGUgcmVjYWxjcy4KICAgICBpZiAoIW1fZG9jdW1lbnQtPmJvZHkoKSB8fCBt
X2RvY3VtZW50LT5oYXNOb2Rlc1dpdGhQbGFjZWhvbGRlclN0eWxlKCkpCiAgICAgICAgIHJldHVy
bjsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYWRkZWRTaGVldHMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgaWYgKHRlc3RBZGRlZFN0eWxlU2hlZXRSZXF1aXJlc1N0eWxlUmVjYWxjKHN0
YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihhZGRlZFNoZWV0c1tpXSktPmNvbnRlbnRzKCkpKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBPd25QdHI8U3R5bGVJbnZhbGlkYXRpb25B
bmFseXNpcz4gaW52YWxpZGF0aW9uQW5hbHlzaXMgPSBTdHlsZUludmFsaWRhdGlvbkFuYWx5c2lz
OjpjcmVhdGUoYWRkZWRTaGVldHMpOworICAgIGlmIChpbnZhbGlkYXRpb25BbmFseXNpcy0+ZGly
dGllc0FsbFN0eWxlKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpbnZhbGlkYXRpb25BbmFseXNp
cy0+aW52YWxpZGF0ZVN0eWxlKG1fZG9jdW1lbnQpOwogICAgIHJlcXVpcmVzRnVsbFN0eWxlUmVj
YWxjID0gZmFsc2U7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudFN0eWxl
U2hlZXRDb2xsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50U3R5bGVTaGVldENvbGxlY3Rpb24uaAkocmV2aXNpb24gMTMxOTI5KQorKysgU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uaAkod29ya2luZyBjb3B5KQpA
QCAtMTAzLDcgKzEwMyw2IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICB2b2lkIGNvbGxlY3RB
Y3RpdmVTdHlsZVNoZWV0cyhWZWN0b3I8UmVmUHRyPFN0eWxlU2hlZXQ+ID4mKTsKLSAgICBib29s
IHRlc3RBZGRlZFN0eWxlU2hlZXRSZXF1aXJlc1N0eWxlUmVjYWxjKFN0eWxlU2hlZXRDb250ZW50
cyopOwogICAgIGVudW0gU3R5bGVSZXNvbHZlclVwZGF0ZVR5cGUgewogICAgICAgICBSZWNvbnN0
cnVjdCwKICAgICAgICAgUmVzZXQsCg==
</data>
<flag name="review"
          id="183209"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>