<?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>56216</bug_id>
          
          <creation_ts>2011-03-11 12:58:28 -0800</creation_ts>
          <short_desc>Rework IconDatabase disabling while allowing for a &quot;pluggable&quot; icon database</short_desc>
          <delta_ts>2011-03-11 17:40:41 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>56235</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>abarth</cc>
    
    <cc>aroben</cc>
    
    <cc>buildbot</cc>
    
    <cc>eric</cc>
    
    <cc>kling</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>366252</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-03-11 12:58:28 -0800</bug_when>
    <thetext>Rework IconDatabase disabling while allowing for a &quot;pluggable&quot; icon database.

For WebKit2, we&apos;ll want to plug-in a different IconDatabase for both WebCore and WK2 to use.
For WebKit1 mac/win, we want the current WebCore IconDatabase to keep working as it does now.
And for ports who disable the IconDatabase, we want that to keep working.

By making a virtual base &quot;IconDatabaseBase&quot; class for anyone to inherit from, we can accomplish all of the above:

-The &quot;DISABLE(IconDatabase)&quot; folks will just get IconDatabaseBase as a no-op implementation.
-The current WebCore IconDatabase users will get the current IconDatabase code, now inheriting from IconDatabaseBase
-WK2 can make its own IconDatabaseBase subclass and assign it as the current IconDatabase. That will be in a different bug.

Patch for the above refactoring is on its way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366256</commentid>
    <comment_count>1</comment_count>
      <attachid>85514</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-03-11 13:04:44 -0800</bug_when>
    <thetext>Created attachment 85514
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366257</commentid>
    <comment_count>2</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-03-11 13:05:13 -0800</bug_when>
    <thetext>In radar - &lt;rdar://problem/8648311&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366263</commentid>
    <comment_count>3</comment_count>
      <attachid>85514</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-03-11 13:10:05 -0800</bug_when>
    <thetext>Comment on attachment 85514
Patch v1

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

&gt; Source/WebCore/loader/icon/IconDatabaseBase.cpp:58
&gt; +} //namespace WebCore

Missing space.

&gt; Source/WebCore/loader/icon/IconDatabaseBase.h:87
&gt; +}; // class IconDatabaseBase

We don&apos;t put these // class comments usually.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366360</commentid>
    <comment_count>4</comment_count>
      <attachid>85546</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-03-11 15:14:30 -0800</bug_when>
    <thetext>Created attachment 85546
Patch v2 - Left out the WebKit pieces</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366364</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-11 15:17:21 -0800</bug_when>
    <thetext>Attachment 85546 did not pass style-queue:

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

Source/WebCore/loader/icon/IconDatabase.h:61:  Should only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/loader/icon/IconDatabase.h:93:  The parameter name &quot;enabled&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 2 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366402</commentid>
    <comment_count>6</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-03-11 16:17:59 -0800</bug_when>
    <thetext>Landed in r80900</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366405</commentid>
    <comment_count>7</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-03-11 16:25:37 -0800</bug_when>
    <thetext>Attachment 85546 did not build on win:
Build output: http://queues.webkit.org/results/8149477</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366410</commentid>
    <comment_count>8</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-03-11 16:29:38 -0800</bug_when>
    <thetext>Windows build fix in 80902</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366411</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-11 16:30:08 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/80900 might have broken Qt Linux Release minimal, Qt Linux ARMv7 Release, Qt Windows 32-bit Release, and Qt Windows 32-bit Debug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366421</commentid>
    <comment_count>10</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-03-11 16:45:31 -0800</bug_when>
    <thetext>Hopefully fixed Qt in r80905</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366439</commentid>
    <comment_count>11</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-11 17:11:12 -0800</bug_when>
    <thetext>Bots are still broken.

http://build.webkit.org/builders/Windows%20Release%20%28Build%29/builds/13151/steps/compile-webkit/logs/stdio
http://build.webkit.org/builders/Qt%20Linux%20Release%20minimal/builds/20433/steps/compile-webkit/logs/stdio</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366446</commentid>
    <comment_count>12</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-03-11 17:24:22 -0800</bug_when>
    <thetext>Reasonably confident fix for Windows in r80908

Complete shot in the dark fix for Qt in r80909</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366451</commentid>
    <comment_count>13</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-11 17:31:41 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; Reasonably confident fix for Windows in r80908
&gt; 
&gt; Complete shot in the dark fix for Qt in r80909

Still broken :(  At this point, I&apos;d really like you to consider rolling it out for now and re-land it later after verifying that your patch builds on all platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366452</commentid>
    <comment_count>14</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-03-11 17:33:58 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; &gt; Reasonably confident fix for Windows in r80908
&gt; &gt; 
&gt; &gt; Complete shot in the dark fix for Qt in r80909
&gt; 
&gt; Still broken :(  At this point, I&apos;d really like you to consider rolling it out for now and re-land it later after verifying that your patch builds on all platforms.

Since I&apos;m here and actively trying to fix this, perhaps it would help us both if you could help track down what Qt is complaining about?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366453</commentid>
    <comment_count>15</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-03-11 17:34:52 -0800</bug_when>
    <thetext>Ah figured out why my last attempt didn&apos;t take.  Let&apos;s go again...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366454</commentid>
    <comment_count>16</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-11 17:35:31 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; Since I&apos;m here and actively trying to fix this, perhaps it would help us both if you could help track down what Qt is complaining about?

It seems like Qt&apos;s WebSettings access it:

../../../../Source/WebCore/loader/icon/IconDatabase.h: In static member function &apos;static void QWebSettings::setIconDatabasePath(const QString&amp;)&apos;:
../../../../Source/WebCore/loader/icon/IconDatabase.h:63:17: error: &apos;static void WebCore::IconDatabase::delayDatabaseCleanup()&apos; is private
../../../../Source/WebKit/qt/Api/qwebsettings.cpp:648:49: error: within this context</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366456</commentid>
    <comment_count>17</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-03-11 17:36:49 -0800</bug_when>
    <thetext>r80910</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366457</commentid>
    <comment_count>18</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-11 17:37:31 -0800</bug_when>
    <thetext>It seems like the current Windows build failure is due to http://trac.webkit.org/changeset/80899.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366458</commentid>
    <comment_count>19</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2011-03-11 17:38:41 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #14)
&gt; &gt; Since I&apos;m here and actively trying to fix this, perhaps it would help us both if you could help track down what Qt is complaining about?
&gt; 
&gt; It seems like Qt&apos;s WebSettings access it:
&gt; 
&gt; ../../../../Source/WebCore/loader/icon/IconDatabase.h: In static member function &apos;static void QWebSettings::setIconDatabasePath(const QString&amp;)&apos;:
&gt; ../../../../Source/WebCore/loader/icon/IconDatabase.h:63:17: error: &apos;static void WebCore::IconDatabase::delayDatabaseCleanup()&apos; is private
&gt; ../../../../Source/WebKit/qt/Api/qwebsettings.cpp:648:49: error: within this context

Yah, I added that in my 2nd to last build fix, but forgot to make it public.  I did in my last build fix.

I was pretty sure this whole time - until landing the initial patch - that Qt didn&apos;t use the icon database.

Therefore I was surprised they provided any form of support for it in its API layer.

Sorry for all the troubles - I&apos;m going to keep an eye on it and make sure this one takes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366459</commentid>
    <comment_count>20</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-11 17:40:41 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; Yah, I added that in my 2nd to last build fix, but forgot to make it public.  I did in my last build fix.
&gt; I was pretty sure this whole time - until landing the initial patch - that Qt didn&apos;t use the icon database.
&gt; Therefore I was surprised they provided any form of support for it in its API layer.
&gt; Sorry for all the troubles - I&apos;m going to keep an eye on it and make sure this one takes.

No problem!  Thanks for the timely build fixes.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85514</attachid>
            <date>2011-03-11 13:04:44 -0800</date>
            <delta_ts>2011-03-11 15:14:30 -0800</delta_ts>
            <desc>Patch v1</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>29461</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0FuZHJvaWQubWsKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvQW5kcm9pZC5tawkocmV2aXNpb24gODA2NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9BbmRy
b2lkLm1rCSh3b3JraW5nIGNvcHkpCkBAIC00MDMsNiArNDAzLDcgQEAgTE9DQUxfU1JDX0ZJTEVT
IDo9ICQoTE9DQUxfU1JDX0ZJTEVTKSBcCiAJbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNwcCBc
CiAJXAogCWxvYWRlci9pY29uL0ljb25EYXRhYmFzZS5jcHAgXAorCWxvYWRlci9pY29uL0ljb25E
YXRhYmFzZUJhc2UuY3BwIFwKIAlsb2FkZXIvaWNvbi9JY29uRmV0Y2hlci5jcHAgXAogCWxvYWRl
ci9pY29uL0ljb25Mb2FkZXIuY3BwIFwKIAlsb2FkZXIvaWNvbi9JY29uUmVjb3JkLmNwcCBcCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gODA2NjUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTEyNyw2ICsxMTI3LDcgQEAgU0VU
KFdlYkNvcmVfU09VUkNFUwogICAgIGxvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5jcHAKIAogICAg
IGxvYWRlci9pY29uL0ljb25EYXRhYmFzZS5jcHAKKyAgICBsb2FkZXIvaWNvbi9JY29uRGF0YWJh
c2VCYXNlLmNwcAogICAgIGxvYWRlci9pY29uL0ljb25Mb2FkZXIuY3BwCiAgICAgbG9hZGVyL2lj
b24vSWNvblJlY29yZC5jcHAKICAgICBsb2FkZXIvaWNvbi9QYWdlVVJMUmVjb3JkLmNwcApJbmRl
eDogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9uIDgwNjY1KQorKysgU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTIxMTAsNyArMjExMCw4IEBAIHdlYmNv
cmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNl
Q2xpZW50LmggXAogCVNvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5jcHAg
XAogCVNvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5oIFwKLQlTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2VOb25lLmNwcCBcCisJU291cmNlL1dlYkNv
cmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlQmFzZS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL2xv
YWRlci9pY29uL0ljb25EYXRhYmFzZUJhc2UuaCBcCiAJU291cmNlL1dlYkNvcmUvbG9hZGVyL2lj
b24vSWNvbkxvYWRlci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25Mb2Fk
ZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvblJlY29yZC5jcHAgXApJbmRl
eDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gODA2NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTIzNjQsOCArMjM2NCw5IEBACiAgICAgICAgICAg
ICAnbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmgnLAogICAgICAgICAgICAgJ2xvYWRlci9pY29u
L0ljb25EYXRhYmFzZS5jcHAnLAogICAgICAgICAgICAgJ2xvYWRlci9pY29uL0ljb25EYXRhYmFz
ZS5oJywKKyAgICAgICAgICAgICdsb2FkZXIvaWNvbi9JY29uRGF0YWJhc2VCYXNlLmNwcCcsCisg
ICAgICAgICAgICAnbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlQmFzZS5oJywKICAgICAgICAgICAg
ICdsb2FkZXIvaWNvbi9JY29uRGF0YWJhc2VDbGllbnQuaCcsCi0gICAgICAgICAgICAnbG9hZGVy
L2ljb24vSWNvbkRhdGFiYXNlTm9uZS5jcHAnLAogICAgICAgICAgICAgJ2xvYWRlci9pY29uL0lj
b25Mb2FkZXIuY3BwJywKICAgICAgICAgICAgICdsb2FkZXIvaWNvbi9JY29uTG9hZGVyLmgnLAog
ICAgICAgICAgICAgJ2xvYWRlci9pY29uL0ljb25SZWNvcmQuY3BwJywKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
cHJvCShyZXZpc2lvbiA4MDY2NSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NDQsNiArODQ0LDcgQEAgU09VUkNFUyArPSBcCiAgICAgbG9hZGVyL0Zy
YW1lTG9hZGVyU3RhdGVNYWNoaW5lLmNwcCBcCiAgICAgbG9hZGVyL0hpc3RvcnlDb250cm9sbGVy
LmNwcCBcCiAgICAgbG9hZGVyL0ZUUERpcmVjdG9yeVBhcnNlci5jcHAgXAorICAgIGxvYWRlci9p
Y29uL0ljb25EYXRhYmFzZUJhc2UuY3BwIFwKICAgICBsb2FkZXIvaWNvbi9JY29uTG9hZGVyLmNw
cCBcCiAgICAgbG9hZGVyL0ltYWdlTG9hZGVyLmNwcCBcCiAgICAgbG9hZGVyL01haW5SZXNvdXJj
ZUxvYWRlci5jcHAgXApAQCAtMTc2Myw2ICsxNzY0LDcgQEAgSEVBREVSUyArPSBcCiAgICAgbG9h
ZGVyL0ZyYW1lTG9hZGVyU3RhdGVNYWNoaW5lLmggXAogICAgIGxvYWRlci9GVFBEaXJlY3RvcnlQ
YXJzZXIuaCBcCiAgICAgbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmggXAorICAgIGxvYWRlci9p
Y29uL0ljb25EYXRhYmFzZUJhc2UuaCBcCiAgICAgbG9hZGVyL2ljb24vSWNvbkxvYWRlci5oIFwK
ICAgICBsb2FkZXIvaWNvbi9JY29uUmVjb3JkLmggXAogICAgIGxvYWRlci9pY29uL1BhZ2VVUkxS
ZWNvcmQuaCBcCkBAIC0yODI2LDkgKzI4MjgsNiBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVf
SUNPTkRBVEFCQVNFPTEpCiAgICAgICAgIGxvYWRlci9pY29uL0ljb25EYXRhYmFzZS5jcHAgXAog
ICAgICAgICBsb2FkZXIvaWNvbi9JY29uUmVjb3JkLmNwcCBcCiAgICAgICAgIGxvYWRlci9pY29u
L1BhZ2VVUkxSZWNvcmQuY3BwCi19IGVsc2UgewotICAgIFNPVVJDRVMgKz0gXAotICAgICAgICBs
b2FkZXIvaWNvbi9JY29uRGF0YWJhc2VOb25lLmNwcAogfQogCiBjb250YWlucyhERUZJTkVTLCBF
TkFCTEVfV09SS0VSUz0xKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJD
b3JlLmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3Jl
Lmd5cAkocmV2aXNpb24gODA2NjUpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJD
b3JlLmd5cAkod29ya2luZyBjb3B5KQpAQCAtMTQ2OCw3ICsxNDY4LDcgQEAKICAgICAgICAgWydl
eGNsdWRlJywgJ2xvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmVNYWNcXC5tbSQnXSwK
ICAgICAgICAgWydleGNsdWRlJywgJ2xvYWRlci9hcmNoaXZlL0FyY2hpdmVGYWN0b3J5XFwuY3Bw
JCddLAogCi0gICAgICAgICMgVXNlIGxvYWRlci9pY29uL0ljb25EYXRhYmFzZU5vbmUuY3BwIGlu
c3RlYWQuCisgICAgICAgICMgT25seSBuZWVkcyBsb2FkZXIvaWNvbi9JY29uRGF0YWJhc2VCYXNl
LmNwcCBmb3IgZGVmYXVsdCBJY29uREIuCiAgICAgICAgIFsnZXhjbHVkZScsICdsb2FkZXIvaWNv
bi9JY29uRGF0YWJhc2VcXC5jcHAkJ10sCiAKICAgICAgICAgIyBFeGNsdWRlIHNvbWUsIGJ1dCBu
b3QgYWxsLCBvZiBwbHVnaW5zLgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gODA2NjUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTk3OSw3ICs5NzksNiBAQAogCQk0NDMxMUNEODEyRTRFMjRCMDAwQThEMTkgLyogRE9NRG9jdW1l
bnRQcml2YXRlLmggaW4gQ29weSBHZW5lcmF0ZWQgSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0NDMxMUNENTEyRTRFMjJEMDAwQThEMTkgLyogRE9NRG9jdW1lbnRQ
cml2YXRlLmggKi87IH07CiAJCTQ0MzExQ0Q5MTJFNEUyNTcwMDBBOEQxOSAvKiBET01Eb2N1bWVu
dEZyYWdtZW50UHJpdmF0ZS5oIGluIENvcHkgR2VuZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQzMTFDRDQxMkU0RTIyRDAwMEE4RDE5IC8qIERPTURv
Y3VtZW50RnJhZ21lbnRQcml2YXRlLmggKi87IH07CiAJCTQ0MzExRjgyMTJFNEU2NkMwMDBBOEQx
OSAvKiBET01Eb2N1bWVudEZyYWdtZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1RTcxMTQ1MEFDNUQ1MzQwMDUzMjcwRiAvKiBET01E
b2N1bWVudEZyYWdtZW50SW50ZXJuYWwuaCAqLzsgfTsKLQkJNDQ1QzhEQjcxMDAxNUZDOTAwMzE1
MzFBIC8qIEljb25EYXRhYmFzZU5vbmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDQ1QzhEQjYxMDAxNUZDOTAwMzE1MzFBIC8qIEljb25EYXRhYmFz
ZU5vbmUuY3BwICovOyB9OwogCQk0NDdENjkwMzBGQTYyNjgxMDAxNUNDQjEgLyogUnVudGltZUFw
cGxpY2F0aW9uQ2hlY2tzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0NDdENjkwMTBGQTYyNjgxMDAxNUNDQjEgLyogUnVudGltZUFwcGxpY2F0aW9uQ2hl
Y2tzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NDQ3RDY5MDQwRkE2MjY4MTAwMTVDQ0IxIC8qIFJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ0N0Q2OTAyMEZB
NjI2ODEwMDE1Q0NCMSAvKiBSdW50aW1lQXBwbGljYXRpb25DaGVja3MubW0gKi87IH07CiAJCTQ0
OEEyOUJGMEE0NkQ5Q0IwMDMwNzU5RiAvKiBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQ4QTI5QkQwQTQ2RDlD
QjAwMzA3NTlGIC8qIEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmggKi87IH07CkBAIC0xMjk5LDYg
KzEyOTgsOCBAQAogCQk1MTYwRjQ5ODBCMEFBNzVGMDBDMUQyQUYgLyogSGlzdG9yeUl0ZW1NYWMu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTYwRjQ5
NzBCMEFBNzVGMDBDMUQyQUYgLyogSGlzdG9yeUl0ZW1NYWMubW0gKi87IH07CiAJCTUxNjJDN0Y0
MTFGNzdFRkIwMDYxMkVGRSAvKiBTY2hlbWVSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTYyQzdGMjExRjc3RUZBMDA2MTJFRkUgLyog
U2NoZW1lUmVnaXN0cnkuY3BwICovOyB9OwogCQk1MTYyQzdGNTExRjc3RUZCMDA2MTJFRkUgLyog
U2NoZW1lUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxNjJDN0YzMTFGNzdFRkIwMDYxMkVGRSAvKiBTY2hlbWVSZWdpc3RyeS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUxNjk1Mzk3MTMy
OUEzQzgwMEI5MkQwNCAvKiBJY29uRGF0YWJhc2VCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjk1Mzk1MTMyOUEzQzgwMEI5MkQwNCAvKiBJ
Y29uRGF0YWJhc2VCYXNlLmNwcCAqLzsgfTsKKwkJNTE2OTUzOTgxMzI5QTNDODAwQjkyRDA0IC8q
IEljb25EYXRhYmFzZUJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxNjk1Mzk2MTMyOUEzQzgwMEI5MkQwNCAvKiBJY29uRGF0YWJhc2VCYXNlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTE2QkI3
OTQwQ0U5MUU2ODAwNTEyRjc5IC8qIEpTVHJlZVdhbGtlckN1c3RvbS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTZCQjc5MjBDRTkxRTY4MDA1MTJG
NzkgLyogSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcCAqLzsgfTsKIAkJNTE3MjFGQkIxMUQyNzkwNzAw
NjM4QjQyIC8qIEJlZm9yZVByb2Nlc3NFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3MjFGQjkxMUQyNzkwNzAwNjM4QjQyIC8qIEJlZm9yZVBy
b2Nlc3NFdmVudC5oICovOyB9OwogCQk1MTcyMUZEMjExRDI3RUYyMDA2MzhCNDIgLyogSlNCZWZv
cmVQcm9jZXNzRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTE3MjFGRDAxMUQyN0VGMjAwNjM4QjQyIC8qIEpTQmVmb3JlUHJvY2Vzc0V2ZW50
LmNwcCAqLzsgfTsKQEAgLTc0MDAsNyArNzQwMSw2IEBACiAJCTQ0MjlBQjA3MENCODRGODEwMDc2
NDdDNSAvKiBET01UZXh0RXZlbnRJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRE9NVGV4dEV2ZW50SW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNDQzMTFDRDQxMkU0RTIyRDAwMEE4RDE5IC8qIERPTURvY3VtZW50RnJhZ21lbnRQcml2
YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTURvY3VtZW50RnJhZ21l
bnRQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0MzExQ0Q1MTJFNEUy
MkQwMDBBOEQxOSAvKiBET01Eb2N1bWVudFByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRE9NRG9jdW1lbnRQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTQ0NUM4REI2MTAwMTVGQzkwMDMxNTMxQSAvKiBJY29uRGF0YWJhc2VOb25lLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEljb25EYXRhYmFzZU5vbmUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NDdENjkwMTBGQTYyNjgxMDAxNUNDQjEg
LyogUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk0NDdENjkwMjBGQTYyNjgxMDAxNUNDQjEgLyogUnVudGltZUFwcGxpY2F0aW9uQ2hl
Y2tzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUnVudGltZUFw
cGxpY2F0aW9uQ2hlY2tzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NDhBMjlC
RDBBNDZEOUNCMDAzMDc1OUYgLyogSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb24uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03NzYyLDYgKzc3NjIsOCBAQAogCQk1MTYwRjQ5NzBC
MEFBNzVGMDBDMUQyQUYgLyogSGlzdG9yeUl0ZW1NYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IG5hbWUgPSBIaXN0b3J5SXRlbU1hYy5tbTsgcGF0aCA9IG1hYy9IaXN0b3J5
SXRlbU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE2MkM3RjIxMUY3N0VG
QTAwNjEyRUZFIC8qIFNjaGVtZVJlZ2lzdHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFNjaGVtZVJlZ2lzdHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTE2MkM3RjMxMUY3N0VGQjAwNjEyRUZFIC8qIFNjaGVtZVJlZ2lzdHJ5LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjaGVtZVJlZ2lzdHJ5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTUxNjk1Mzk1MTMyOUEzQzgwMEI5MkQwNCAvKiBJY29uRGF0YWJh
c2VCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEljb25EYXRh
YmFzZUJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTY5NTM5NjEzMjlB
M0M4MDBCOTJEMDQgLyogSWNvbkRhdGFiYXNlQmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBJY29uRGF0YWJhc2VCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUxNkJCNzkyMENFOTFFNjgwMDUxMkY3OSAvKiBKU1RyZWVXYWxrZXJDdXN0b20uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNUcmVlV2Fsa2VyQ3VzdG9tLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE3MjFGQjkxMUQyNzkwNzAwNjM4QjQy
IC8qIEJlZm9yZVByb2Nlc3NFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBCZWZvcmVQcm9jZXNzRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE3
MjFGQkExMUQyNzkwNzAwNjM4QjQyIC8qIEJlZm9yZVByb2Nlc3NFdmVudC5pZGwgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0OyBwYXRoID0gQmVmb3JlUHJvY2Vzc0V2ZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTEzNjI0LDggKzEzNjI2LDkgQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTUx
MjZFNkI5MEEyRTNCMTIwMDVDMjlGQSAvKiBJY29uRGF0YWJhc2UuY3BwICovLAogCQkJCTUxMjZF
NkJBMEEyRTNCMTIwMDVDMjlGQSAvKiBJY29uRGF0YWJhc2UuaCAqLywKKwkJCQk1MTY5NTM5NTEz
MjlBM0M4MDBCOTJEMDQgLyogSWNvbkRhdGFiYXNlQmFzZS5jcHAgKi8sCisJCQkJNTE2OTUzOTYx
MzI5QTNDODAwQjkyRDA0IC8qIEljb25EYXRhYmFzZUJhc2UuaCAqLywKIAkJCQk1MUUxRUNCODBD
OTFDOTA0MDBEQzI1NUIgLyogSWNvbkRhdGFiYXNlQ2xpZW50LmggKi8sCi0JCQkJNDQ1QzhEQjYx
MDAxNUZDOTAwMzE1MzFBIC8qIEljb25EYXRhYmFzZU5vbmUuY3BwICovLAogCQkJCTUxM0YxNDUx
MEFCNjM0QzQwMDA5NERERiAvKiBJY29uTG9hZGVyLmNwcCAqLywKIAkJCQk1MTNGMTQ1MjBBQjYz
NEM0MDAwOTREREYgLyogSWNvbkxvYWRlci5oICovLAogCQkJCTUxRTFFQ0JBMEM5MUM5MDQwMERD
MjU1QiAvKiBJY29uUmVjb3JkLmNwcCAqLywKQEAgLTIyNTc3LDYgKzIyNTgwLDcgQEAKIAkJCQk1
OThENzdERjEzMjU0MUZBMDA3NjFCMjIgLyogSmF2YUFycmF5SlNDLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1OThENzdFMzEzMjU0MjBFMDA3NjFCMjIgLyogSmF2YUZpZWxkSlNDLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQ0QzRjk4MzEzMjZDOTM3MDAwOThBNjAgLyogVGV4dE9yaWVudGF0aW9uLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk1MTY5NTM5ODEzMjlBM0M4MDBCOTJEMDQgLyogSWNvbkRhdGFi
YXNlQmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQ
b3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yMzcyNiw3ICsyMzczMCw2IEBACiAJCQkJMzcx
QTY3Q0IxMUM2QzdEQjAwMDQ3QjhCIC8qIEh5cGhlbmF0aW9uQ0YuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMzc1Q0QyM0IxMTlENDRFQTAwQTJBODU5IC8qIEh5cGhlbmF0aW9uTWFjLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJNTEyNkU2QkIwQTJFM0IxMjAwNUMyOUZBIC8qIEljb25EYXRhYmFzZS5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQk0NDVDOERCNzEwMDE1RkM5MDAzMTUzMUEgLyogSWNvbkRh
dGFiYXNlTm9uZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTNGMTQ1MzBBQjYzNEM0MDAwOTRE
REYgLyogSWNvbkxvYWRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjc1MzU4RTBCMDUzQTY2
MDAyQ0U2NEYgLyogSWNvbk1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxRTFFQ0MwMEM5MUM5
MDQwMERDMjU1QiAvKiBJY29uUmVjb3JkLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjUyMzIsNiAr
MjUyMzUsNyBAQAogCQkJCTgxNUU2MTY3MTMyNTg3QUEwMEI2MjJCMCAvKiBEYXRhVHJhbnNmZXJJ
dGVtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTgxMDJDNTg4MTMyNUJCMTEwMERERTY3QSAvKiBT
dHJpbmdDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1RDRGNTFERjEzMjcyNTQ4MDAx
NkY1NDEgLyogSFRNTENvbnZlcnRlci5tbSBpbiBTb3VyY2VzICovLAorCQkJCTUxNjk1Mzk3MTMy
OUEzQzgwMEI5MkQwNCAvKiBJY29uRGF0YWJhc2VCYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRl
eDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuY3BwCShyZXZpc2lv
biA4MDY2NSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1zdGF0aWMgSWNvbkRhdGFiYXNlKiBzaGFyZWRJY29uRGF0YWJhc2UgPSAwOwogc3RhdGljIGlu
dCBkYXRhYmFzZUNsZWFudXBDb3VudGVyID0gMDsKIAogLy8gVGhpcyB2ZXJzaW9uIG51bWJlciBp
cyBpbiB0aGUgREIgYW5kIG1hcmtzIHRoZSBjdXJyZW50IGdlbmVyYXRpb24gb2YgdGhlIHNjaGVt
YQpAQCAtOTEsMTUgKzkwLDYgQEAgc3RhdGljIEljb25EYXRhYmFzZUNsaWVudCogZGVmYXVsdENs
aWVudAogICAgIHJldHVybiBkZWZhdWx0Q2xpZW50OwogfQogCi1JY29uRGF0YWJhc2UmIGljb25E
YXRhYmFzZSgpCi17Ci0gICAgaWYgKCFzaGFyZWRJY29uRGF0YWJhc2UpIHsKLSAgICAgICAgU2Ny
aXB0Q29udHJvbGxlcjo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwotICAgICAgICBzaGFyZWRJY29u
RGF0YWJhc2UgPSBuZXcgSWNvbkRhdGFiYXNlOwotICAgIH0KLSAgICByZXR1cm4gKnNoYXJlZElj
b25EYXRhYmFzZTsKLX0KLQogLy8gKioqKioqKioqKioqKioqKioqKioqKioqCiAvLyAqKiogTWFp
biBUaHJlYWQgT25seSAqKioKIC8vICoqKioqKioqKioqKioqKioqKioqKioqKgpJbmRleDogU291
cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmgJKHJldmlzaW9uIDgwNjY1KQor
KysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpZm5kZWYgSWNvbkRhdGFiYXNlX2gKICNkZWZpbmUgSWNv
bkRhdGFiYXNlX2gKIAorI2luY2x1ZGUgIkljb25EYXRhYmFzZUJhc2UuaCIKICNpbmNsdWRlICJU
aW1lci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQu
aD4KQEAgLTM3LDcgKzM4LDcgQEAKICNpZiBFTkFCTEUoSUNPTkRBVEFCQVNFKQogI2luY2x1ZGUg
IlNRTGl0ZURhdGFiYXNlLmgiCiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgotI2VuZGlmCisj
ZW5kaWYgLy8gRU5BQkxFKElDT05EQVRBQkFTRSkKIAogbmFtZXNwYWNlIFdlYkNvcmUgeyAKIApA
QCAtNTYsNDEgKzU3LDQzIEBAIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIGNsYXNzIFNRTFRyYW5zYWN0
aW9uOwogI2VuZGlmCiAKLWVudW0gSWNvbkxvYWREZWNpc2lvbiB7Ci0gICAgSWNvbkxvYWRZZXMs
Ci0gICAgSWNvbkxvYWRObywKLSAgICBJY29uTG9hZFVua25vd24KKyNpZiAhRU5BQkxFKElDT05E
QVRBQkFTRSkKKy8vIEZvciBidWlsZHMgd2l0aCBJY29uRGF0YWJhc2UgZGlzYWJsZWQsIHRoZXkn
bGwganVzdCB1c2UgYSBkZWZhdWx0IGRlcml2YXRpb24gb2YgSWNvbkRhdGFiYXNlQmFzZS4gIFdo
aWNoIGRvZXMgbm90aGluZy4KK2NsYXNzIEljb25EYXRhYmFzZSA6IHB1YmxpYyBJY29uRGF0YWJh
c2VCYXNlIHsKIH07CisjZWxzZSAKIAotY2xhc3MgSWNvbkRhdGFiYXNlIHsKLSAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShJY29uRGF0YWJhc2UpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK2Ns
YXNzIEljb25EYXRhYmFzZSA6IHB1YmxpYyBJY29uRGF0YWJhc2VCYXNlIHsKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKKyAgICAKIC8vICoqKiBNYWluIFRocmVhZCBPbmx5ICoqKgogcHVi
bGljOgotICAgIHZvaWQgc2V0Q2xpZW50KEljb25EYXRhYmFzZUNsaWVudCopOworICAgIHZpcnR1
YWwgdm9pZCBzZXRDbGllbnQoSWNvbkRhdGFiYXNlQ2xpZW50Kik7CiAKLSAgICBib29sIG9wZW4o
Y29uc3QgU3RyaW5nJiBwYXRoKTsKLSAgICB2b2lkIGNsb3NlKCk7CisgICAgdmlydHVhbCBib29s
IG9wZW4oY29uc3QgU3RyaW5nJiBwYXRoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKTsKICAg
ICAgICAgICAgIAotICAgIHZvaWQgcmVtb3ZlQWxsSWNvbnMoKTsKKyAgICB2aXJ0dWFsIHZvaWQg
cmVtb3ZlQWxsSWNvbnMoKTsKIAotICAgIEltYWdlKiBpY29uRm9yUGFnZVVSTChjb25zdCBTdHJp
bmcmLCBjb25zdCBJbnRTaXplJik7CiAgICAgdm9pZCByZWFkSWNvbkZvclBhZ2VVUkxGcm9tRGlz
ayhjb25zdCBTdHJpbmcmKTsKLSAgICBTdHJpbmcgaWNvblVSTEZvclBhZ2VVUkwoY29uc3QgU3Ry
aW5nJik7Ci0gICAgSW1hZ2UqIGRlZmF1bHRJY29uKGNvbnN0IEludFNpemUmKTsKIAotICAgIHZv
aWQgcmV0YWluSWNvbkZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCByZWxlYXNl
SWNvbkZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJik7CisgICAgdmlydHVhbCBJbWFnZSogZGVmYXVs
dEljb24oY29uc3QgSW50U2l6ZSYpOwogCi0gICAgdm9pZCBzZXRJY29uRGF0YUZvckljb25VUkwo
UGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEsIGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQg
c2V0SWNvblVSTEZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJiBpY29uVVJMLCBjb25zdCBTdHJpbmcm
IHBhZ2VVUkwpOworICAgIHZpcnR1YWwgdm9pZCByZXRhaW5JY29uRm9yUGFnZVVSTChjb25zdCBT
dHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZUljb25Gb3JQYWdlVVJMKGNvbnN0IFN0
cmluZyYpOwogCi0gICAgSWNvbkxvYWREZWNpc2lvbiBsb2FkRGVjaXNpb25Gb3JJY29uVVJMKGNv
bnN0IFN0cmluZyYsIERvY3VtZW50TG9hZGVyKik7Ci0gICAgYm9vbCBpY29uRGF0YUtub3duRm9y
SWNvblVSTChjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIEltYWdlKiBpY29uRm9yUGFnZVVS
TChjb25zdCBTdHJpbmcmLCBjb25zdCBJbnRTaXplJik7CisgICAgdmlydHVhbCBTdHJpbmcgaWNv
blVSTEZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJik7CisgICAgdmlydHVhbCB2b2lkIHNldEljb25V
UkxGb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYgaWNvblVSTCwgY29uc3QgU3RyaW5nJiBwYWdlVVJM
KTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRJY29uRGF0YUZvckljb25VUkwoUGFzc1JlZlB0cjxT
aGFyZWRCdWZmZXI+IGRhdGEsIGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwgYm9vbCBpY29u
RGF0YUtub3duRm9ySWNvblVSTChjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIEljb25Mb2Fk
RGVjaXNpb24gbG9hZERlY2lzaW9uRm9ySWNvblVSTChjb25zdCBTdHJpbmcmLCBEb2N1bWVudExv
YWRlciopOyAgICAKICAgICAKLSAgICB2b2lkIHNldEVuYWJsZWQoYm9vbCBlbmFibGVkKTsKLSAg
ICBib29sIGlzRW5hYmxlZCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRFbmFibGVkKGJv
b2wgZW5hYmxlZCk7CisgICAgdmlydHVhbCBib29sIGlzRW5hYmxlZCgpIGNvbnN0OwogICAgIAot
ICAgIHZvaWQgc2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChib29sIGZsYWcpOworICAgIHZpcnR1
YWwgdm9pZCBzZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKGJvb2wgZmxhZyk7CiAgICAgYm9vbCBp
c1ByaXZhdGVCcm93c2luZ0VuYWJsZWQoKSBjb25zdDsKICAgICAKICAgICBzdGF0aWMgdm9pZCBk
ZWxheURhdGFiYXNlQ2xlYW51cCgpOwpAQCAtOTgsMTcgKzEwMSwxNiBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIHZvaWQgY2hlY2tJbnRlZ3JpdHlCZWZvcmVPcGVuaW5nKCk7CiAgICAgICAgIAogICAg
IC8vIFN1cHBvcnQgZm9yIFdlYkNvcmVTdGF0aXN0aWNzIGluIFdlYktpdAotICAgIHNpemVfdCBw
YWdlVVJMTWFwcGluZ0NvdW50KCk7Ci0gICAgc2l6ZV90IHJldGFpbmVkUGFnZVVSTENvdW50KCk7
Ci0gICAgc2l6ZV90IGljb25SZWNvcmRDb3VudCgpOwotICAgIHNpemVfdCBpY29uUmVjb3JkQ291
bnRXaXRoRGF0YSgpOworICAgIHZpcnR1YWwgc2l6ZV90IHBhZ2VVUkxNYXBwaW5nQ291bnQoKTsK
KyAgICB2aXJ0dWFsIHNpemVfdCByZXRhaW5lZFBhZ2VVUkxDb3VudCgpOworICAgIHZpcnR1YWwg
c2l6ZV90IGljb25SZWNvcmRDb3VudCgpOworICAgIHZpcnR1YWwgc2l6ZV90IGljb25SZWNvcmRD
b3VudFdpdGhEYXRhKCk7CiAKIHByaXZhdGU6CiAgICAgSWNvbkRhdGFiYXNlKCk7CiAgICAgfklj
b25EYXRhYmFzZSgpOwotICAgIGZyaWVuZCBJY29uRGF0YWJhc2UmIGljb25EYXRhYmFzZSgpOwor
ICAgIGZyaWVuZCBJY29uRGF0YWJhc2VCYXNlJiBpY29uRGF0YWJhc2UoKTsKIAotI2lmIEVOQUJM
RShJQ09OREFUQUJBU0UpCiAgICAgc3RhdGljIHZvaWQgbm90aWZ5UGVuZGluZ0xvYWREZWNpc2lv
bnNPbk1haW5UaHJlYWQodm9pZCopOwogICAgIHZvaWQgbm90aWZ5UGVuZGluZ0xvYWREZWNpc2lv
bnMoKTsKIApAQCAtMTIzLDcgKzEyNSw2IEBAIHByaXZhdGU6CiAgICAgSGFzaFNldDxSZWZQdHI8
RG9jdW1lbnRMb2FkZXI+ID4gbV9sb2FkZXJzUGVuZGluZ0RlY2lzaW9uOwogCiAgICAgUmVmUHRy
PEljb25SZWNvcmQ+IG1fZGVmYXVsdEljb25SZWNvcmQ7Ci0jZW5kaWYgLy8gRU5BQkxFKElDT05E
QVRBQkFTRSkKIAogLy8gKioqIEFueSBUaHJlYWQgKioqCiBwdWJsaWM6CkBAIC0xMzEsNyArMTMy
LDYgQEAgcHVibGljOgogICAgIFN0cmluZyBkYXRhYmFzZVBhdGgoKSBjb25zdDsKICAgICBzdGF0
aWMgU3RyaW5nIGRlZmF1bHREYXRhYmFzZUZpbGVuYW1lKCk7CiAKLSNpZiBFTkFCTEUoSUNPTkRB
VEFCQVNFKQogcHJpdmF0ZToKICAgICBQYXNzUmVmUHRyPEljb25SZWNvcmQ+IGdldE9yQ3JlYXRl
SWNvblJlY29yZChjb25zdCBTdHJpbmcmIGljb25VUkwpOwogICAgIFBhZ2VVUkxSZWNvcmQqIGdl
dE9yQ3JlYXRlUGFnZVVSTFJlY29yZChjb25zdCBTdHJpbmcmIHBhZ2VVUkwpOwpAQCAtMTY2LDE3
ICsxNjYsMTUgQEAgcHJpdmF0ZToKICAgICBIYXNoU2V0PFN0cmluZz4gbV9wYWdlVVJMc1BlbmRp
bmdJbXBvcnQ7CiAgICAgSGFzaFNldDxTdHJpbmc+IG1fcGFnZVVSTHNJbnRlcmVzdGVkSW5JY29u
czsKICAgICBIYXNoU2V0PEljb25SZWNvcmQqPiBtX2ljb25zUGVuZGluZ1JlYWRpbmc7Ci0jZW5k
aWYgLy8gRU5BQkxFKElDT05EQVRBQkFTRSkKIAogLy8gKioqIFN5bmMgVGhyZWFkIE9ubHkgKioq
CiBwdWJsaWM6CiAgICAgLy8gU2hvdWxkIGJlIHVzZWQgb25seSBvbiB0aGUgc3luYyB0aHJlYWQg
YW5kIG9ubHkgYnkgdGhlIFNhZmFyaSAyIEljb25zIGltcG9ydCBwcm9jZWR1cmUKLSAgICB2b2lk
IGltcG9ydEljb25VUkxGb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYgaWNvblVSTCwgY29uc3QgU3Ry
aW5nJiBwYWdlVVJMKTsKLSAgICB2b2lkIGltcG9ydEljb25EYXRhRm9ySWNvblVSTChQYXNzUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSwgY29uc3QgU3RyaW5nJiBpY29uVVJMKTsKKyAgICB2aXJ0
dWFsIHZvaWQgaW1wb3J0SWNvblVSTEZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJiBpY29uVVJMLCBj
b25zdCBTdHJpbmcmIHBhZ2VVUkwpOworICAgIHZpcnR1YWwgdm9pZCBpbXBvcnRJY29uRGF0YUZv
ckljb25VUkwoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEsIGNvbnN0IFN0cmluZyYgaWNv
blVSTCk7CiAgICAgCi0gICAgYm9vbCBzaG91bGRTdG9wVGhyZWFkQWN0aXZpdHkoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU3RvcFRocmVhZEFjdGl2aXR5KCkgY29uc3Q7CiAKLSNp
ZiBFTkFCTEUoSUNPTkRBVEFCQVNFKQogcHJpdmF0ZTogICAgCiAgICAgc3RhdGljIHZvaWQqIGlj
b25EYXRhYmFzZVN5bmNUaHJlYWRTdGFydCh2b2lkICopOwogICAgIHZvaWQqIGljb25EYXRhYmFz
ZVN5bmNUaHJlYWQoKTsKQEAgLTIzNiwxMSArMjM0LDkgQEAgcHJpdmF0ZTogICAgCiAgICAgT3du
UHRyPFNRTGl0ZVN0YXRlbWVudD4gbV91cGRhdGVJY29uRGF0YVN0YXRlbWVudDsKICAgICBPd25Q
dHI8U1FMaXRlU3RhdGVtZW50PiBtX3NldEljb25JbmZvU3RhdGVtZW50OwogICAgIE93blB0cjxT
UUxpdGVTdGF0ZW1lbnQ+IG1fc2V0SWNvbkRhdGFTdGF0ZW1lbnQ7Ci0jZW5kaWYgLy8gRU5BQkxF
KElDT05EQVRBQkFTRSkKIH07CiAKLS8vIEZ1bmN0aW9uIHRvIG9idGFpbiB0aGUgZ2xvYmFsIGlj
b24gZGF0YWJhc2UuCi1JY29uRGF0YWJhc2UmIGljb25EYXRhYmFzZSgpOworI2VuZGlmIC8vICFF
TkFCTEUoSUNPTkRBVEFCQVNFKQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZUJhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZUJhc2UuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlQmFzZS5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiSWNvbkRhdGFiYXNlQmFzZS5oIgorCisjaW5jbHVkZSAiSWNvbkRh
dGFiYXNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworU3RyaW5nIEljb25EYXRhYmFzZUJh
c2U6Omljb25VUkxGb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYpCit7CisgICAgcmV0dXJuIFN0cmlu
ZygpOworfQorCitzdGF0aWMgSWNvbkRhdGFiYXNlQmFzZSogZ2xvYmFsRGF0YWJhc2UgPSAwOwor
CisvLyBGdW5jdGlvbnMgdG8gZ2V0L3NldCB0aGUgZ2xvYmFsIGljb24gZGF0YWJhc2UuCitJY29u
RGF0YWJhc2VCYXNlJiBpY29uRGF0YWJhc2UoKQoreworICAgIGlmIChnbG9iYWxEYXRhYmFzZSkK
KyAgICAgICAgcmV0dXJuICpnbG9iYWxEYXRhYmFzZTsKKworICAgIHN0YXRpYyBJY29uRGF0YWJh
c2VCYXNlKiBkZWZhdWx0RGF0YWJhc2UgPSAwOyAgICAgICAgCisgICAgaWYgKCFkZWZhdWx0RGF0
YWJhc2UpCisgICAgICAgIGRlZmF1bHREYXRhYmFzZSA9IG5ldyBJY29uRGF0YWJhc2U7CisKKyAg
ICByZXR1cm4gKmRlZmF1bHREYXRhYmFzZTsKK30KKwordm9pZCBzZXRHbG9iYWxJY29uRGF0YWJh
c2UoSWNvbkRhdGFiYXNlQmFzZSogbmV3R2xvYmFsRGF0YWJhc2UpCit7CisgICAgZ2xvYmFsRGF0
YWJhc2UgPSBuZXdHbG9iYWxEYXRhYmFzZTsKK30KKworfSAvL25hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2VCYXNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlQmFzZS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlQmFz
ZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyAKKyNpZm5kZWYgSWNv
bkRhdGFiYXNlQmFzZV9oCisjZGVmaW5lIEljb25EYXRhYmFzZUJhc2VfaAorCisjaW5jbHVkZSAi
UGxhdGZvcm1TdHJpbmcuaCIKKworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7IAorCitjbGFzcyBEb2N1bWVudExvYWRlcjsKK2NsYXNzIEljb25EYXRh
YmFzZUNsaWVudDsKK2NsYXNzIEltYWdlOworY2xhc3MgSW50U2l6ZTsKKworZW51bSBJY29uTG9h
ZERlY2lzaW9uIHsKKyAgICBJY29uTG9hZFllcywKKyAgICBJY29uTG9hZE5vLAorICAgIEljb25M
b2FkVW5rbm93bgorfTsKKworY2xhc3MgSWNvbkRhdGFiYXNlQmFzZSB7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoSWNvbkRhdGFiYXNlQmFzZSk7CisKK3Byb3RlY3RlZDoKKyAgICBJY29uRGF0
YWJhc2VCYXNlKCkgeyB9CisKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5JY29uRGF0YWJhc2VCYXNl
KCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RW5hYmxlZChib29sKSB7IH0KKyAgICB2aXJ0
dWFsIGJvb2wgaXNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFs
IEltYWdlKiBkZWZhdWx0SWNvbihjb25zdCBJbnRTaXplJikgeyByZXR1cm4gMDsgfQorCisgICAg
dmlydHVhbCB2b2lkIHJldGFpbkljb25Gb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYpIHsgfQorICAg
IHZpcnR1YWwgdm9pZCByZWxlYXNlSWNvbkZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJikgeyB9CisK
KyAgICB2aXJ0dWFsIEltYWdlKiBpY29uRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmLCBjb25zdCBJ
bnRTaXplJikgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgU3RyaW5nIGljb25VUkxGb3JQYWdl
VVJMKGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRJY29uVVJMRm9yUGFnZVVS
TChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBz
ZXRJY29uRGF0YUZvckljb25VUkwoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+LCBjb25zdCBTdHJp
bmcmKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaWNvbkRhdGFLbm93bkZvckljb25VUkwoY29uc3Qg
U3RyaW5nJikgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIEljb25Mb2FkRGVjaXNpb24g
bG9hZERlY2lzaW9uRm9ySWNvblVSTChjb25zdCBTdHJpbmcmLCBEb2N1bWVudExvYWRlciopIHsg
cmV0dXJuIEljb25Mb2FkTm87IH0KKworICAgIC8vIFN1cHBvcnQgZm9yIFdlYkNvcmVTdGF0aXN0
aWNzIGluIFdlYktpdAorICAgIHZpcnR1YWwgc2l6ZV90IHBhZ2VVUkxNYXBwaW5nQ291bnQoKSB7
IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBzaXplX3QgcmV0YWluZWRQYWdlVVJMQ291bnQoKSB7
IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBzaXplX3QgaWNvblJlY29yZENvdW50KCkgeyByZXR1
cm4gMDsgfQorICAgIHZpcnR1YWwgc2l6ZV90IGljb25SZWNvcmRDb3VudFdpdGhEYXRhKCkgeyBy
ZXR1cm4gMDsgfQorCisgICAgdmlydHVhbCB2b2lkIGltcG9ydEljb25VUkxGb3JQYWdlVVJMKGNv
bnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBpbXBvcnRJ
Y29uRGF0YUZvckljb25VUkwoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+LCBjb25zdCBTdHJpbmcm
KSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU3RvcFRocmVhZEFjdGl2aXR5KCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdmlydHVhbCBib29sIG9wZW4oY29uc3QgU3RyaW5nJikg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKSB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgcmVtb3ZlQWxsSWNvbnMoKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBzZXRQcml2
YXRlQnJvd3NpbmdFbmFibGVkKGJvb2wpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRDbGllbnQo
SWNvbkRhdGFiYXNlQ2xpZW50KikgeyB9CisKK307IC8vIGNsYXNzIEljb25EYXRhYmFzZUJhc2UK
KworLy8gRnVuY3Rpb25zIHRvIGdldC9zZXQgdGhlIGdsb2JhbCBpY29uIGRhdGFiYXNlLgorSWNv
bkRhdGFiYXNlQmFzZSYgaWNvbkRhdGFiYXNlKCk7Cit2b2lkIHNldEdsb2JhbEljb25EYXRhYmFz
ZShJY29uRGF0YWJhc2VCYXNlKik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEljb25EYXRhYmFzZUJhc2VfaApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24v
SWNvbkRhdGFiYXNlTm9uZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVy
L2ljb24vSWNvbkRhdGFiYXNlTm9uZS5jcHAJKHJldmlzaW9uIDgwNjY1KQorKysgU291cmNlL1dl
YkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlTm9uZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsMjE4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJJY29uRGF0YWJhc2UuaCIKLQotI2lmICFFTkFCTEUoSUNPTkRBVEFCQVNFKQot
Ci0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIK
LSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
c3RhdGljIEljb25EYXRhYmFzZSogc2hhcmVkSWNvbkRhdGFiYXNlID0gMDsKLQotLy8gVGhpcyB2
ZXJzaW9uIG51bWJlciBpcyBpbiB0aGUgREIgYW5kIG1hcmtzIHRoZSBjdXJyZW50IGdlbmVyYXRp
b24gb2YgdGhlIHNjaGVtYQotLy8gVGhlb3JldGljYWxseSBvbmNlIHRoZSBzd2l0Y2ggaXMgZmxp
cHBlZCB0aGlzIHNob3VsZCBuZXZlciBjaGFuZ2UKLS8vIEN1cnJlbnRseSwgYW4gb3V0LW9mLWRh
dGUgc2NoZW1hIGNhdXNlcyB0aGUgREIgdG8gYmUgd2lwZWQgYW5kIHJlc2V0LiAgVGhpcyBpc24n
dCAKLS8vIHNvIGJhZCBkdXJpbmcgZGV2ZWxvcG1lbnQgYnV0IGluIHRoZSBmdXR1cmUsIHdlIHdv
dWxkIG5lZWQgdG8gd3JpdGUgYSBjb252ZXJzaW9uCi0vLyBmdW5jdGlvbiB0byBhZHZhbmNlIG9s
ZGVyIHJlbGVhc2VkIHNjaGVtYXMgdG8gImN1cnJlbnQiCi1jb25zdCBpbnQgY3VycmVudERhdGFi
YXNlVmVyc2lvbiA9IDU7Ci0KLS8vIEljb25zIGV4cGlyZSBvbmNlIGEgZGF5Ci1jb25zdCBpbnQg
aWNvbkV4cGlyYXRpb25UaW1lID0gNjAqNjAqMjQ7IAotLy8gQWJzZW50IGljb25zIGFyZSByZWNo
ZWNrZWQgb25jZSBhIHdlZWsKLWNvbnN0IGludCBtaXNzaW5nSWNvbkV4cGlyYXRpb25UaW1lID0g
NjAqNjAqMjQqNzsgCi0KLWNvbnN0IGludCB1cGRhdGVUaW1lckRlbGF5ID0gNTsgCi0KLVN0cmlu
ZyBJY29uRGF0YWJhc2U6OmRlZmF1bHREYXRhYmFzZUZpbGVuYW1lKCkKLXsKLSAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKFN0cmluZywgZGVmYXVsdERhdGFiYXNlRmlsZW5hbWUsICgiSWNvbnMuZGIi
KSk7Ci0gICAgcmV0dXJuIGRlZmF1bHREYXRhYmFzZUZpbGVuYW1lLnRocmVhZHNhZmVDb3B5KCk7
Ci19Ci0KLUljb25EYXRhYmFzZSYgaWNvbkRhdGFiYXNlKCkKLXsKLSAgICBpZiAoIXNoYXJlZElj
b25EYXRhYmFzZSkKLSAgICAgICAgc2hhcmVkSWNvbkRhdGFiYXNlID0gbmV3IEljb25EYXRhYmFz
ZTsKLSAgICByZXR1cm4gKnNoYXJlZEljb25EYXRhYmFzZTsKLX0KLQotSWNvbkRhdGFiYXNlOjpJ
Y29uRGF0YWJhc2UoKQotewotfQotCi1ib29sIEljb25EYXRhYmFzZTo6b3Blbihjb25zdCBTdHJp
bmcmIC8qZGF0YWJhc2VQYXRoKi8pCi17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIElj
b25EYXRhYmFzZTo6aXNPcGVuKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZv
aWQgSWNvbkRhdGFiYXNlOjpjbG9zZSgpCi17Ci19Ci0KLVN0cmluZyBJY29uRGF0YWJhc2U6OmRh
dGFiYXNlUGF0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotCi12b2lkIElj
b25EYXRhYmFzZTo6cmVtb3ZlQWxsSWNvbnMoKQotewotfQotCi12b2lkIEljb25EYXRhYmFzZTo6
c2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChib29sIC8qZmxhZyovKQotewotfQotCi1ib29sIElj
b25EYXRhYmFzZTo6aXNQcml2YXRlQnJvd3NpbmdFbmFibGVkKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLXZvaWQgSWNvbkRhdGFiYXNlOjpyZWFkSWNvbkZvclBhZ2VVUkxGcm9t
RGlzayhjb25zdCBTdHJpbmcmKQotewotCi19Ci0KLUltYWdlKiBJY29uRGF0YWJhc2U6Omljb25G
b3JQYWdlVVJMKGNvbnN0IFN0cmluZyYgLypwYWdlVVJMKi8sIGNvbnN0IEludFNpemUmIHNpemUp
Ci17Ci0gICAgcmV0dXJuIGRlZmF1bHRJY29uKHNpemUpOwotfQotCi0KLUljb25Mb2FkRGVjaXNp
b24gSWNvbkRhdGFiYXNlOjpsb2FkRGVjaXNpb25Gb3JJY29uVVJMKGNvbnN0IFN0cmluZyYsIERv
Y3VtZW50TG9hZGVyKikKLXsKLSAgICByZXR1cm4gSWNvbkxvYWRObzsKLX0KLQotYm9vbCBJY29u
RGF0YWJhc2U6Omljb25EYXRhS25vd25Gb3JJY29uVVJMKGNvbnN0IFN0cmluZyYpCi17Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi1TdHJpbmcgSWNvbkRhdGFiYXNlOjppY29uVVJMRm9yUGFnZVVS
TChjb25zdCBTdHJpbmcmIC8qcGFnZVVSTCovKQotewotICAgIHJldHVybiBTdHJpbmcoKTsKLX0K
LQotSW1hZ2UqIEljb25EYXRhYmFzZTo6ZGVmYXVsdEljb24oY29uc3QgSW50U2l6ZSYgLypzaXpl
Ki8pCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgSWNvbkRhdGFiYXNlOjpyZXRhaW5JY29u
Rm9yUGFnZVVSTChjb25zdCBTdHJpbmcmIC8qcGFnZVVSTCovKQotewotfQotCi12b2lkIEljb25E
YXRhYmFzZTo6cmVsZWFzZUljb25Gb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYgLypwYWdlVVJMKi8p
Ci17Ci19Ci0KLXZvaWQgSWNvbkRhdGFiYXNlOjpzZXRJY29uRGF0YUZvckljb25VUkwoUGFzc1Jl
ZlB0cjxTaGFyZWRCdWZmZXI+IC8qZGF0YSovLCBjb25zdCBTdHJpbmcmIC8qaWNvblVSTCovKQot
ewotfQotCi12b2lkIEljb25EYXRhYmFzZTo6c2V0SWNvblVSTEZvclBhZ2VVUkwoY29uc3QgU3Ry
aW5nJiAvKmljb25VUkwqLywgY29uc3QgU3RyaW5nJiAvKnBhZ2VVUkwqLykKLXsKLX0KLQotdm9p
ZCBJY29uRGF0YWJhc2U6OnNldEVuYWJsZWQoYm9vbCAvKmVuYWJsZWQqLykKLXsKLX0KLQotYm9v
bCBJY29uRGF0YWJhc2U6OmlzRW5hYmxlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1JY29uRGF0YWJhc2U6On5JY29uRGF0YWJhc2UoKQotewotICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotfQotCi12b2lkIEljb25EYXRhYmFzZTo6Y2hlY2tJbnRlZ3JpdHlCZWZvcmVPcGVu
aW5nKCkKLXsKLX0KLQotdm9pZCBJY29uRGF0YWJhc2U6OmRlbGF5RGF0YWJhc2VDbGVhbnVwKCkK
LXsKLX0KLQotdm9pZCBJY29uRGF0YWJhc2U6OmFsbG93RGF0YWJhc2VDbGVhbnVwKCkKLXsKLX0K
LQotc2l6ZV90IEljb25EYXRhYmFzZTo6cGFnZVVSTE1hcHBpbmdDb3VudCgpCi17Ci0gICAgcmV0
dXJuIDA7Ci19Ci0KLXNpemVfdCBJY29uRGF0YWJhc2U6OnJldGFpbmVkUGFnZVVSTENvdW50KCkK
LXsKLSAgICByZXR1cm4gMDsKLX0KLQotc2l6ZV90IEljb25EYXRhYmFzZTo6aWNvblJlY29yZENv
dW50KCkKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotc2l6ZV90IEljb25EYXRhYmFzZTo6aWNvblJl
Y29yZENvdW50V2l0aERhdGEoKQotewotICAgIHJldHVybiAwOwotfQotCi12b2lkIEljb25EYXRh
YmFzZTo6c2V0Q2xpZW50KEljb25EYXRhYmFzZUNsaWVudCopCi17Ci19Ci0KLS8vICoqKioqKioq
KioqKioqKioqKioqKioqKgotLy8gKioqIFN5bmMgVGhyZWFkIE9ubHkgKioqCi0vLyAqKioqKioq
KioqKioqKioqKioqKioqKioKLQotdm9pZCBJY29uRGF0YWJhc2U6OmltcG9ydEljb25VUkxGb3JQ
YWdlVVJMKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCi17Ci19Ci0KLXZvaWQgSWNvbkRh
dGFiYXNlOjppbXBvcnRJY29uRGF0YUZvckljb25VUkwoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+
LCBjb25zdCBTdHJpbmcmKQotewotfQotCi1ib29sIEljb25EYXRhYmFzZTo6c2hvdWxkU3RvcFRo
cmVhZEFjdGl2aXR5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gIUVOQUJMRShJQ09OREFUQUJBU0UpCg==
</data>
<flag name="review"
          id="77650"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85546</attachid>
            <date>2011-03-11 15:14:30 -0800</date>
            <delta_ts>2011-03-11 16:13:58 -0800</delta_ts>
            <desc>Patch v2 - Left out the WebKit pieces</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>35356</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwODg5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTUgQEAKKzIwMTEtMDMtMTEgIEJyYWR5IEVp
ZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWlu
aWcuCisKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzg2NDgzMTE+IGFuZCBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTYyMTYKKyAgICAgICAgUmV3b3JrIGRpc2FibGVk
IEljb25EYXRhYmFzZSBidWlsZHMgd2hpbGUgYWxsb3dpbmcgZm9yIGEgcGx1Z2dhYmxlIGljb24g
ZGF0YWJhc2UgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgUHJvamVjdCBmaWxlIHN0dWZmOgor
ICAgICAgICAqIEFuZHJvaWQubWs6CisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAg
ICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5neXAvV2ViQ29yZS5neXA6Cisg
ICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAq
IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvajoKKworICAgICAgICAqIGxvYWRlci9pY29uL0ljb25EYXRhYmFz
ZS5jcHA6CisgICAgICAgICogbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmg6IEluaGVyaXQgZnJv
bSBJY29uRGF0YWJhc2VCYXNlLgorCisgICAgICAgICogbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNl
QmFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SWNvbkRhdGFiYXNlQmFzZTo6aWNv
blVSTEZvclBhZ2VVUkwpOgorICAgICAgICAoV2ViQ29yZTo6aWNvbkRhdGFiYXNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldEdsb2JhbEljb25EYXRhYmFzZSk6CisgICAgICAgICogbG9hZGVyL2lj
b24vSWNvbkRhdGFiYXNlQmFzZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okljb25EYXRh
YmFzZUJhc2U6Okljb25EYXRhYmFzZUJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6SWNvbkRhdGFi
YXNlQmFzZTo6fkljb25EYXRhYmFzZUJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6SWNvbkRhdGFi
YXNlQmFzZTo6c2V0RW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpJY29uRGF0YWJhc2VCYXNl
Ojppc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6SWNvbkRhdGFiYXNlQmFzZTo6ZGVmYXVs
dEljb24pOgorICAgICAgICAoV2ViQ29yZTo6SWNvbkRhdGFiYXNlQmFzZTo6cmV0YWluSWNvbkZv
clBhZ2VVUkwpOgorICAgICAgICAoV2ViQ29yZTo6SWNvbkRhdGFiYXNlQmFzZTo6cmVsZWFzZUlj
b25Gb3JQYWdlVVJMKToKKyAgICAgICAgKFdlYkNvcmU6Okljb25EYXRhYmFzZUJhc2U6Omljb25G
b3JQYWdlVVJMKToKKyAgICAgICAgKFdlYkNvcmU6Okljb25EYXRhYmFzZUJhc2U6OnNldEljb25V
UkxGb3JQYWdlVVJMKToKKyAgICAgICAgKFdlYkNvcmU6Okljb25EYXRhYmFzZUJhc2U6OnNldElj
b25EYXRhRm9ySWNvblVSTCk6CisgICAgICAgIChXZWJDb3JlOjpJY29uRGF0YWJhc2VCYXNlOjpp
Y29uRGF0YUtub3duRm9ySWNvblVSTCk6CisgICAgICAgIChXZWJDb3JlOjpJY29uRGF0YWJhc2VC
YXNlOjpsb2FkRGVjaXNpb25Gb3JJY29uVVJMKToKKyAgICAgICAgKFdlYkNvcmU6Okljb25EYXRh
YmFzZUJhc2U6OnBhZ2VVUkxNYXBwaW5nQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6SWNvbkRh
dGFiYXNlQmFzZTo6cmV0YWluZWRQYWdlVVJMQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6SWNv
bkRhdGFiYXNlQmFzZTo6aWNvblJlY29yZENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6Okljb25E
YXRhYmFzZUJhc2U6Omljb25SZWNvcmRDb3VudFdpdGhEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
Okljb25EYXRhYmFzZUJhc2U6OmltcG9ydEljb25VUkxGb3JQYWdlVVJMKToKKyAgICAgICAgKFdl
YkNvcmU6Okljb25EYXRhYmFzZUJhc2U6OmltcG9ydEljb25EYXRhRm9ySWNvblVSTCk6CisgICAg
ICAgIChXZWJDb3JlOjpJY29uRGF0YWJhc2VCYXNlOjpzaG91bGRTdG9wVGhyZWFkQWN0aXZpdHkp
OgorICAgICAgICAoV2ViQ29yZTo6SWNvbkRhdGFiYXNlQmFzZTo6b3Blbik6CisgICAgICAgIChX
ZWJDb3JlOjpJY29uRGF0YWJhc2VCYXNlOjpjbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpJY29u
RGF0YWJhc2VCYXNlOjpyZW1vdmVBbGxJY29ucyk6CisgICAgICAgIChXZWJDb3JlOjpJY29uRGF0
YWJhc2VCYXNlOjpzZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6
Okljb25EYXRhYmFzZUJhc2U6OnNldENsaWVudCk6CisKKyAgICAgICAgKiBsb2FkZXIvaWNvbi9J
Y29uRGF0YWJhc2VOb25lLmNwcDogUmVtb3ZlZC4KKwogMjAxMS0wMy0xMSAgU3RldmUgQmxvY2sg
IDxzdGV2ZWJsb2NrQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSmVyZW15IE9y
bG93LgpJbmRleDogU291cmNlL1dlYkNvcmUvQW5kcm9pZC5tawo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9BbmRyb2lkLm1rCShyZXZpc2lvbiA4MDg4OSkKKysrIFNvdXJjZS9XZWJDb3Jl
L0FuZHJvaWQubWsJKHdvcmtpbmcgY29weSkKQEAgLTQwMyw2ICs0MDMsNyBAQCBMT0NBTF9TUkNf
RklMRVMgOj0gJChMT0NBTF9TUkNfRklMRVMpIFwKIAlsb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUu
Y3BwIFwKIAlcCiAJbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcCBcCisJbG9hZGVyL2ljb24v
SWNvbkRhdGFiYXNlQmFzZS5jcHAgXAogCWxvYWRlci9pY29uL0ljb25GZXRjaGVyLmNwcCBcCiAJ
bG9hZGVyL2ljb24vSWNvbkxvYWRlci5jcHAgXAogCWxvYWRlci9pY29uL0ljb25SZWNvcmQuY3Bw
IFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiA4MDg4OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMTMzLDYgKzExMzMsNyBA
QCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNwcAog
CiAgICAgbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcAorICAgIGxvYWRlci9pY29uL0ljb25E
YXRhYmFzZUJhc2UuY3BwCiAgICAgbG9hZGVyL2ljb24vSWNvbkxvYWRlci5jcHAKICAgICBsb2Fk
ZXIvaWNvbi9JY29uUmVjb3JkLmNwcAogICAgIGxvYWRlci9pY29uL1BhZ2VVUkxSZWNvcmQuY3Bw
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gODA4ODkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMjExOSw3ICsyMTE5LDggQEAg
d2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0
YWJhc2VDbGllbnQuaCBcCiAJU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNl
LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmggXAotCVNv
dXJjZS9XZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZU5vbmUuY3BwIFwKKwlTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0YWJhc2VCYXNlLmNwcCBcCisJU291cmNlL1dlYkNv
cmUvbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlQmFzZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvaWNvbi9JY29uTG9hZGVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNv
bkxvYWRlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uUmVjb3JkLmNwcCBc
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA4MDg4OSkKKysrIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMjM3Myw4ICsyMzczLDkgQEAKICAgICAg
ICAgICAgICdsb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuaCcsCiAgICAgICAgICAgICAnbG9hZGVy
L2ljb24vSWNvbkRhdGFiYXNlLmNwcCcsCiAgICAgICAgICAgICAnbG9hZGVyL2ljb24vSWNvbkRh
dGFiYXNlLmgnLAorICAgICAgICAgICAgJ2xvYWRlci9pY29uL0ljb25EYXRhYmFzZUJhc2UuY3Bw
JywKKyAgICAgICAgICAgICdsb2FkZXIvaWNvbi9JY29uRGF0YWJhc2VCYXNlLmgnLAogICAgICAg
ICAgICAgJ2xvYWRlci9pY29uL0ljb25EYXRhYmFzZUNsaWVudC5oJywKLSAgICAgICAgICAgICds
b2FkZXIvaWNvbi9JY29uRGF0YWJhc2VOb25lLmNwcCcsCiAgICAgICAgICAgICAnbG9hZGVyL2lj
b24vSWNvbkxvYWRlci5jcHAnLAogICAgICAgICAgICAgJ2xvYWRlci9pY29uL0ljb25Mb2FkZXIu
aCcsCiAgICAgICAgICAgICAnbG9hZGVyL2ljb24vSWNvblJlY29yZC5jcHAnLApJbmRleDogU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5wcm8JKHJldmlzaW9uIDgwODg5KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8J
KHdvcmtpbmcgY29weSkKQEAgLTg0OSw2ICs4NDksNyBAQCBTT1VSQ0VTICs9IFwKICAgICBsb2Fk
ZXIvRnJhbWVMb2FkZXJTdGF0ZU1hY2hpbmUuY3BwIFwKICAgICBsb2FkZXIvSGlzdG9yeUNvbnRy
b2xsZXIuY3BwIFwKICAgICBsb2FkZXIvRlRQRGlyZWN0b3J5UGFyc2VyLmNwcCBcCisgICAgbG9h
ZGVyL2ljb24vSWNvbkRhdGFiYXNlQmFzZS5jcHAgXAogICAgIGxvYWRlci9pY29uL0ljb25Mb2Fk
ZXIuY3BwIFwKICAgICBsb2FkZXIvSW1hZ2VMb2FkZXIuY3BwIFwKICAgICBsb2FkZXIvTWFpblJl
c291cmNlTG9hZGVyLmNwcCBcCkBAIC0xNzcxLDYgKzE3NzIsNyBAQCBIRUFERVJTICs9IFwKICAg
ICBsb2FkZXIvRnJhbWVMb2FkZXJTdGF0ZU1hY2hpbmUuaCBcCiAgICAgbG9hZGVyL0ZUUERpcmVj
dG9yeVBhcnNlci5oIFwKICAgICBsb2FkZXIvaWNvbi9JY29uRGF0YWJhc2UuaCBcCisgICAgbG9h
ZGVyL2ljb24vSWNvbkRhdGFiYXNlQmFzZS5oIFwKICAgICBsb2FkZXIvaWNvbi9JY29uTG9hZGVy
LmggXAogICAgIGxvYWRlci9pY29uL0ljb25SZWNvcmQuaCBcCiAgICAgbG9hZGVyL2ljb24vUGFn
ZVVSTFJlY29yZC5oIFwKQEAgLTI4MzksOSArMjg0MSw2IEBAIGNvbnRhaW5zKERFRklORVMsIEVO
QUJMRV9JQ09OREFUQUJBU0U9MSkKICAgICAgICAgbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNw
cCBcCiAgICAgICAgIGxvYWRlci9pY29uL0ljb25SZWNvcmQuY3BwIFwKICAgICAgICAgbG9hZGVy
L2ljb24vUGFnZVVSTFJlY29yZC5jcHAKLX0gZWxzZSB7Ci0gICAgU09VUkNFUyArPSBcCi0gICAg
ICAgIGxvYWRlci9pY29uL0ljb25EYXRhYmFzZU5vbmUuY3BwCiB9CiAKIGNvbnRhaW5zKERFRklO
RVMsIEVOQUJMRV9XT1JLRVJTPTEpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
L1dlYkNvcmUuZ3lwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dl
YkNvcmUuZ3lwCShyZXZpc2lvbiA4MDg4OSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
L1dlYkNvcmUuZ3lwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDY4LDcgKzE0NjgsNyBAQAogICAgICAg
ICBbJ2V4Y2x1ZGUnLCAnbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2ZU1hY1xcLm1t
JCddLAogICAgICAgICBbJ2V4Y2x1ZGUnLCAnbG9hZGVyL2FyY2hpdmUvQXJjaGl2ZUZhY3Rvcnlc
XC5jcHAkJ10sCiAKLSAgICAgICAgIyBVc2UgbG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlTm9uZS5j
cHAgaW5zdGVhZC4KKyAgICAgICAgIyBPbmx5IG5lZWRzIGxvYWRlci9pY29uL0ljb25EYXRhYmFz
ZUJhc2UuY3BwIGZvciBkZWZhdWx0IEljb25EQi4KICAgICAgICAgWydleGNsdWRlJywgJ2xvYWRl
ci9pY29uL0ljb25EYXRhYmFzZVxcLmNwcCQnXSwKIAogICAgICAgICAjIEV4Y2x1ZGUgc29tZSwg
YnV0IG5vdCBhbGwsIG9mIHBsdWdpbnMuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gODA4ODkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMjU0NjUs
NiArMjU0NjUsMTQgQEAKIAkJCQkJPgogCQkJCTwvRmlsZT4KIAkJCQk8RmlsZQorCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXGxvYWRlclxpY29uXEljb25EYXRhYmFzZUJhc2UuY3BwIgorCQkJCQk+CisJ
CQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXGljb25c
SWNvbkRhdGFiYXNlQmFzZS5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCiAJCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cbG9hZGVyXGljb25cSWNvbkRhdGFiYXNlQ2xpZW50LmgiCiAJCQkJ
CT4KIAkJCQk8L0ZpbGU+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA4MDg4OSkKKysrIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtOTk4
LDcgKzk5OCw2IEBACiAJCTQ0MzExQ0Q4MTJFNEUyNEIwMDBBOEQxOSAvKiBET01Eb2N1bWVudFBy
aXZhdGUuaCBpbiBDb3B5IEdlbmVyYXRlZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQ0MzExQ0Q1MTJFNEUyMkQwMDBBOEQxOSAvKiBET01Eb2N1bWVudFByaXZh
dGUuaCAqLzsgfTsKIAkJNDQzMTFDRDkxMkU0RTI1NzAwMEE4RDE5IC8qIERPTURvY3VtZW50RnJh
Z21lbnRQcml2YXRlLmggaW4gQ29weSBHZW5lcmF0ZWQgSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0NDMxMUNENDEyRTRFMjJEMDAwQThEMTkgLyogRE9NRG9jdW1l
bnRGcmFnbWVudFByaXZhdGUuaCAqLzsgfTsKIAkJNDQzMTFGODIxMkU0RTY2QzAwMEE4RDE5IC8q
IERPTURvY3VtZW50RnJhZ21lbnRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gODVFNzExNDUwQUM1RDUzNDAwNTMyNzBGIC8qIERPTURvY3Vt
ZW50RnJhZ21lbnRJbnRlcm5hbC5oICovOyB9OwotCQk0NDVDOERCNzEwMDE1RkM5MDAzMTUzMUEg
LyogSWNvbkRhdGFiYXNlTm9uZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0NDVDOERCNjEwMDE1RkM5MDAzMTUzMUEgLyogSWNvbkRhdGFiYXNlTm9u
ZS5jcHAgKi87IH07CiAJCTQ0N0Q2OTAzMEZBNjI2ODEwMDE1Q0NCMSAvKiBSdW50aW1lQXBwbGlj
YXRpb25DaGVja3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQ0N0Q2OTAxMEZBNjI2ODEwMDE1Q0NCMSAvKiBSdW50aW1lQXBwbGljYXRpb25DaGVja3Mu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0NDdE
NjkwNDBGQTYyNjgxMDAxNUNDQjEgLyogUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLm1tIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDQ3RDY5MDIwRkE2MjY4
MTAwMTVDQ0IxIC8qIFJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5tbSAqLzsgfTsKIAkJNDQ4QTI5
QkYwQTQ2RDlDQjAwMzA3NTlGIC8qIEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NDhBMjlCRDBBNDZEOUNCMDAz
MDc1OUYgLyogSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb24uaCAqLzsgfTsKQEAgLTEzMTgsNiArMTMx
Nyw4IEBACiAJCTUxNjBGNDk4MEIwQUE3NUYwMEMxRDJBRiAvKiBIaXN0b3J5SXRlbU1hYy5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjBGNDk3MEIw
QUE3NUYwMEMxRDJBRiAvKiBIaXN0b3J5SXRlbU1hYy5tbSAqLzsgfTsKIAkJNTE2MkM3RjQxMUY3
N0VGQjAwNjEyRUZFIC8qIFNjaGVtZVJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjJDN0YyMTFGNzdFRkEwMDYxMkVGRSAvKiBTY2hl
bWVSZWdpc3RyeS5jcHAgKi87IH07CiAJCTUxNjJDN0Y1MTFGNzdFRkIwMDYxMkVGRSAvKiBTY2hl
bWVSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTE2MkM3RjMxMUY3N0VGQjAwNjEyRUZFIC8qIFNjaGVtZVJlZ2lzdHJ5LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTE2OTUzOTcxMzI5QTND
ODAwQjkyRDA0IC8qIEljb25EYXRhYmFzZUJhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2OTUzOTUxMzI5QTNDODAwQjkyRDA0IC8qIEljb25E
YXRhYmFzZUJhc2UuY3BwICovOyB9OworCQk1MTY5NTM5ODEzMjlBM0M4MDBCOTJEMDQgLyogSWNv
bkRhdGFiYXNlQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTE2OTUzOTYxMzI5QTNDODAwQjkyRDA0IC8qIEljb25EYXRhYmFzZUJhc2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MTZCQjc5NDBD
RTkxRTY4MDA1MTJGNzkgLyogSlNUcmVlV2Fsa2VyQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNkJCNzkyMENFOTFFNjgwMDUxMkY3OSAv
KiBKU1RyZWVXYWxrZXJDdXN0b20uY3BwICovOyB9OwogCQk1MTcyMUZCQjExRDI3OTA3MDA2MzhC
NDIgLyogQmVmb3JlUHJvY2Vzc0V2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MTcyMUZCOTExRDI3OTA3MDA2MzhCNDIgLyogQmVmb3JlUHJvY2Vz
c0V2ZW50LmggKi87IH07CiAJCTUxNzIxRkQyMTFEMjdFRjIwMDYzOEI0MiAvKiBKU0JlZm9yZVBy
b2Nlc3NFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MTcyMUZEMDExRDI3RUYyMDA2MzhCNDIgLyogSlNCZWZvcmVQcm9jZXNzRXZlbnQuY3Bw
ICovOyB9OwpAQCAtNzQ0Myw3ICs3NDQ0LDYgQEAKIAkJNDQyOUFCMDcwQ0I4NEY4MTAwNzY0N0M1
IC8qIERPTVRleHRFdmVudEludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBET01UZXh0RXZlbnRJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk0NDMxMUNENDEyRTRFMjJEMDAwQThEMTkgLyogRE9NRG9jdW1lbnRGcmFnbWVudFByaXZhdGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NRG9jdW1lbnRGcmFnbWVudFBy
aXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQzMTFDRDUxMkU0RTIyRDAw
MEE4RDE5IC8qIERPTURvY3VtZW50UHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBET01Eb2N1bWVudFByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJNDQ1QzhEQjYxMDAxNUZDOTAwMzE1MzFBIC8qIEljb25EYXRhYmFzZU5vbmUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSWNvbkRhdGFiYXNlTm9uZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0N0Q2OTAxMEZBNjI2ODEwMDE1Q0NCMSAvKiBS
dW50aW1lQXBwbGljYXRpb25DaGVja3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTQ0N0Q2OTAyMEZBNjI2ODEwMDE1Q0NCMSAvKiBSdW50aW1lQXBwbGljYXRpb25DaGVja3Mu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBSdW50aW1lQXBwbGlj
YXRpb25DaGVja3MubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0OEEyOUJEMEE0
NkQ5Q0IwMDMwNzU5RiAvKiBKU0hUTUxPcHRpb25zQ29sbGVjdGlvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc4MDUsNiArNzgwNSw4IEBACiAJCTUxNjBGNDk3MEIwQUE3
NUYwMEMxRDJBRiAvKiBIaXN0b3J5SXRlbU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgbmFtZSA9IEhpc3RvcnlJdGVtTWFjLm1tOyBwYXRoID0gbWFjL0hpc3RvcnlJdGVt
TWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTYyQzdGMjExRjc3RUZBMDA2
MTJFRkUgLyogU2NoZW1lUmVnaXN0cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU2NoZW1lUmVnaXN0cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1MTYyQzdGMzExRjc3RUZCMDA2MTJFRkUgLyogU2NoZW1lUmVnaXN0cnkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NoZW1lUmVnaXN0cnkuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNTE2OTUzOTUxMzI5QTNDODAwQjkyRDA0IC8qIEljb25EYXRhYmFzZUJh
c2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSWNvbkRhdGFiYXNl
QmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxNjk1Mzk2MTMyOUEzQzgw
MEI5MkQwNCAvKiBJY29uRGF0YWJhc2VCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEljb25EYXRhYmFzZUJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTE2QkI3OTIwQ0U5MUU2ODAwNTEyRjc5IC8qIEpTVHJlZVdhbGtlckN1c3RvbS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1RyZWVXYWxrZXJDdXN0b20uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTcyMUZCOTExRDI3OTA3MDA2MzhCNDIgLyog
QmVmb3JlUHJvY2Vzc0V2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJl
Zm9yZVByb2Nlc3NFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTcyMUZC
QTExRDI3OTA3MDA2MzhCNDIgLyogQmVmb3JlUHJvY2Vzc0V2ZW50LmlkbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IHBhdGggPSBCZWZvcmVQcm9jZXNzRXZlbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTM2ODQsOCArMTM2ODYsOSBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJNTEyNkU2
QjkwQTJFM0IxMjAwNUMyOUZBIC8qIEljb25EYXRhYmFzZS5jcHAgKi8sCiAJCQkJNTEyNkU2QkEw
QTJFM0IxMjAwNUMyOUZBIC8qIEljb25EYXRhYmFzZS5oICovLAorCQkJCTUxNjk1Mzk1MTMyOUEz
QzgwMEI5MkQwNCAvKiBJY29uRGF0YWJhc2VCYXNlLmNwcCAqLywKKwkJCQk1MTY5NTM5NjEzMjlB
M0M4MDBCOTJEMDQgLyogSWNvbkRhdGFiYXNlQmFzZS5oICovLAogCQkJCTUxRTFFQ0I4MEM5MUM5
MDQwMERDMjU1QiAvKiBJY29uRGF0YWJhc2VDbGllbnQuaCAqLywKLQkJCQk0NDVDOERCNjEwMDE1
RkM5MDAzMTUzMUEgLyogSWNvbkRhdGFiYXNlTm9uZS5jcHAgKi8sCiAJCQkJNTEzRjE0NTEwQUI2
MzRDNDAwMDk0RERGIC8qIEljb25Mb2FkZXIuY3BwICovLAogCQkJCTUxM0YxNDUyMEFCNjM0QzQw
MDA5NERERiAvKiBJY29uTG9hZGVyLmggKi8sCiAJCQkJNTFFMUVDQkEwQzkxQzkwNDAwREMyNTVC
IC8qIEljb25SZWNvcmQuY3BwICovLApAQCAtMjI2NTcsNiArMjI2NjAsNyBAQAogCQkJCTU5OEQ3
N0RGMTMyNTQxRkEwMDc2MUIyMiAvKiBKYXZhQXJyYXlKU0MuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTU5OEQ3N0UzMTMyNTQyMEUwMDc2MUIyMiAvKiBKYXZhRmllbGRKU0MuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDRDNGOTgzMTMyNkM5MzcwMDA5OEE2MCAvKiBUZXh0T3JpZW50YXRpb24uaCBpbiBI
ZWFkZXJzICovLAorCQkJCTUxNjk1Mzk4MTMyOUEzQzgwMEI5MkQwNCAvKiBJY29uRGF0YWJhc2VC
YXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkyNDVEODBBMzEzMjgwRTQwMDAzNDkyQTYgLyogU1FM
Q2FsbGJhY2tXcmFwcGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGMzE2Mzk2QzEzMjk0ODFBMDBB
NjQ5Q0IgLyogSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTk0
NjE2MzEzMDIwQjIwMDA0QkIzRjggLyogSlNXZWJLaXRBbmltYXRpb24uaCBpbiBIZWFkZXJzICov
LApAQCAtMjM4MTQsNyArMjM4MTgsNiBAQAogCQkJCTM3MUE2N0NCMTFDNkM3REIwMDA0N0I4QiAv
KiBIeXBoZW5hdGlvbkNGLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTM3NUNEMjNCMTE5RDQ0RUEw
MEEyQTg1OSAvKiBIeXBoZW5hdGlvbk1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxMjZFNkJC
MEEyRTNCMTIwMDVDMjlGQSAvKiBJY29uRGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJ
NDQ1QzhEQjcxMDAxNUZDOTAwMzE1MzFBIC8qIEljb25EYXRhYmFzZU5vbmUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNTEzRjE0NTMwQUI2MzRDNDAwMDk0RERGIC8qIEljb25Mb2FkZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQjI3NTM1OEUwQjA1M0E2NjAwMkNFNjRGIC8qIEljb25NYWMubW0g
aW4gU291cmNlcyAqLywKIAkJCQk1MUUxRUNDMDBDOTFDOTA0MDBEQzI1NUIgLyogSWNvblJlY29y
ZC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI1MzIyLDYgKzI1MzI1LDcgQEAKIAkJCQk4MTVFNjE2
NzEzMjU4N0FBMDBCNjIyQjAgLyogRGF0YVRyYW5zZmVySXRlbS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk4MTAyQzU4ODEzMjVCQjExMDBEREU2N0EgLyogU3RyaW5nQ2FsbGJhY2suY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNUQ0RjUxREYxMzI3MjU0ODAwMTZGNTQxIC8qIEhUTUxDb252ZXJ0ZXIu
bW0gaW4gU291cmNlcyAqLywKKwkJCQk1MTY5NTM5NzEzMjlBM0M4MDBCOTJEMDQgLyogSWNvbkRh
dGFiYXNlQmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGMzE2Mzk2QjEzMjk0ODFBMDBBNjQ5
Q0IgLyogSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUYzMTYz
OTZFMTMyOTQ4NzYwMEE2NDlDQiAvKiBKU0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkzMTk0NjE2MjEzMDIwQjIwMDA0QkIzRjggLyogSlNXZWJLaXRBbmltYXRp
b24uY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9J
Y29uRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29u
L0ljb25EYXRhYmFzZS5jcHAJKHJldmlzaW9uIDgwODg5KQorKysgU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2ljb24vSWNvbkRhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNiBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBJY29uRGF0YWJhc2UqIHNoYXJlZElj
b25EYXRhYmFzZSA9IDA7CiBzdGF0aWMgaW50IGRhdGFiYXNlQ2xlYW51cENvdW50ZXIgPSAwOwog
CiAvLyBUaGlzIHZlcnNpb24gbnVtYmVyIGlzIGluIHRoZSBEQiBhbmQgbWFya3MgdGhlIGN1cnJl
bnQgZ2VuZXJhdGlvbiBvZiB0aGUgc2NoZW1hCkBAIC05MSwxNSArOTAsNiBAQCBzdGF0aWMgSWNv
bkRhdGFiYXNlQ2xpZW50KiBkZWZhdWx0Q2xpZW50CiAgICAgcmV0dXJuIGRlZmF1bHRDbGllbnQ7
CiB9CiAKLUljb25EYXRhYmFzZSYgaWNvbkRhdGFiYXNlKCkKLXsKLSAgICBpZiAoIXNoYXJlZElj
b25EYXRhYmFzZSkgewotICAgICAgICBTY3JpcHRDb250cm9sbGVyOjppbml0aWFsaXplVGhyZWFk
aW5nKCk7Ci0gICAgICAgIHNoYXJlZEljb25EYXRhYmFzZSA9IG5ldyBJY29uRGF0YWJhc2U7Ci0g
ICAgfQotICAgIHJldHVybiAqc2hhcmVkSWNvbkRhdGFiYXNlOwotfQotCiAvLyAqKioqKioqKioq
KioqKioqKioqKioqKioKIC8vICoqKiBNYWluIFRocmVhZCBPbmx5ICoqKgogLy8gKioqKioqKioq
KioqKioqKioqKioqKioqCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0
YWJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9JY29uRGF0
YWJhc2UuaAkocmV2aXNpb24gODA4ODkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNvbi9J
Y29uRGF0YWJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2lmbmRlZiBJ
Y29uRGF0YWJhc2VfaAogI2RlZmluZSBJY29uRGF0YWJhc2VfaAogCisjaW5jbHVkZSAiSWNvbkRh
dGFiYXNlQmFzZS5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgpAQCAtMzcsNyArMzgsNyBAQAogI2lmIEVOQUJM
RShJQ09OREFUQUJBU0UpCiAjaW5jbHVkZSAiU1FMaXRlRGF0YWJhc2UuaCIKICNpbmNsdWRlIDx3
dGYvVGhyZWFkaW5nLmg+Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoSUNPTkRBVEFCQVNFKQog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7IAogCkBAIC01Niw0MSArNTcsNDMgQEAgY2xhc3MgU2hhcmVk
QnVmZmVyOwogY2xhc3MgU1FMVHJhbnNhY3Rpb247CiAjZW5kaWYKIAotZW51bSBJY29uTG9hZERl
Y2lzaW9uIHsKLSAgICBJY29uTG9hZFllcywKLSAgICBJY29uTG9hZE5vLAotICAgIEljb25Mb2Fk
VW5rbm93bgorI2lmICFFTkFCTEUoSUNPTkRBVEFCQVNFKQorLy8gRm9yIGJ1aWxkcyB3aXRoIElj
b25EYXRhYmFzZSBkaXNhYmxlZCwgdGhleSdsbCBqdXN0IHVzZSBhIGRlZmF1bHQgZGVyaXZhdGlv
biBvZiBJY29uRGF0YWJhc2VCYXNlLiAgV2hpY2ggZG9lcyBub3RoaW5nLgorY2xhc3MgSWNvbkRh
dGFiYXNlIDogcHVibGljIEljb25EYXRhYmFzZUJhc2UgewogfTsKKyNlbHNlIAogCi1jbGFzcyBJ
Y29uRGF0YWJhc2UgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEljb25EYXRhYmFzZSk7IFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworY2xhc3MgSWNvbkRhdGFiYXNlIDogcHVibGljIEljb25E
YXRhYmFzZUJhc2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIAogLy8gKioq
IE1haW4gVGhyZWFkIE9ubHkgKioqCiBwdWJsaWM6Ci0gICAgdm9pZCBzZXRDbGllbnQoSWNvbkRh
dGFiYXNlQ2xpZW50Kik7CisgICAgdmlydHVhbCB2b2lkIHNldENsaWVudChJY29uRGF0YWJhc2VD
bGllbnQqKTsKIAotICAgIGJvb2wgb3Blbihjb25zdCBTdHJpbmcmIHBhdGgpOwotICAgIHZvaWQg
Y2xvc2UoKTsKKyAgICB2aXJ0dWFsIGJvb2wgb3Blbihjb25zdCBTdHJpbmcmIHBhdGgpOworICAg
IHZpcnR1YWwgdm9pZCBjbG9zZSgpOwogICAgICAgICAgICAgCi0gICAgdm9pZCByZW1vdmVBbGxJ
Y29ucygpOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVBbGxJY29ucygpOwogCi0gICAgSW1hZ2Uq
IGljb25Gb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYsIGNvbnN0IEludFNpemUmKTsKICAgICB2b2lk
IHJlYWRJY29uRm9yUGFnZVVSTEZyb21EaXNrKGNvbnN0IFN0cmluZyYpOwotICAgIFN0cmluZyBp
Y29uVVJMRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmKTsKLSAgICBJbWFnZSogZGVmYXVsdEljb24o
Y29uc3QgSW50U2l6ZSYpOwogCi0gICAgdm9pZCByZXRhaW5JY29uRm9yUGFnZVVSTChjb25zdCBT
dHJpbmcmKTsKLSAgICB2b2lkIHJlbGVhc2VJY29uRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmKTsK
KyAgICB2aXJ0dWFsIEltYWdlKiBkZWZhdWx0SWNvbihjb25zdCBJbnRTaXplJik7CiAKLSAgICB2
b2lkIHNldEljb25EYXRhRm9ySWNvblVSTChQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSwg
Y29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBzZXRJY29uVVJMRm9yUGFnZVVSTChjb25zdCBTdHJp
bmcmIGljb25VUkwsIGNvbnN0IFN0cmluZyYgcGFnZVVSTCk7CisgICAgdmlydHVhbCB2b2lkIHJl
dGFpbkljb25Gb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwgdm9pZCByZWxl
YXNlSWNvbkZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJik7CiAKLSAgICBJY29uTG9hZERlY2lzaW9u
IGxvYWREZWNpc2lvbkZvckljb25VUkwoY29uc3QgU3RyaW5nJiwgRG9jdW1lbnRMb2FkZXIqKTsK
LSAgICBib29sIGljb25EYXRhS25vd25Gb3JJY29uVVJMKGNvbnN0IFN0cmluZyYpOworICAgIHZp
cnR1YWwgSW1hZ2UqIGljb25Gb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYsIGNvbnN0IEludFNpemUm
KTsKKyAgICB2aXJ0dWFsIFN0cmluZyBpY29uVVJMRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmKTsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0SWNvblVSTEZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJiBpY29u
VVJMLCBjb25zdCBTdHJpbmcmIHBhZ2VVUkwpOworCisgICAgdmlydHVhbCB2b2lkIHNldEljb25E
YXRhRm9ySWNvblVSTChQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSwgY29uc3QgU3RyaW5n
Jik7CisgICAgdmlydHVhbCBib29sIGljb25EYXRhS25vd25Gb3JJY29uVVJMKGNvbnN0IFN0cmlu
ZyYpOworICAgIHZpcnR1YWwgSWNvbkxvYWREZWNpc2lvbiBsb2FkRGVjaXNpb25Gb3JJY29uVVJM
KGNvbnN0IFN0cmluZyYsIERvY3VtZW50TG9hZGVyKik7ICAgIAogICAgIAotICAgIHZvaWQgc2V0
RW5hYmxlZChib29sIGVuYWJsZWQpOwotICAgIGJvb2wgaXNFbmFibGVkKCkgY29uc3Q7CisgICAg
dmlydHVhbCB2b2lkIHNldEVuYWJsZWQoYm9vbCBlbmFibGVkKTsKKyAgICB2aXJ0dWFsIGJvb2wg
aXNFbmFibGVkKCkgY29uc3Q7CiAgICAgCi0gICAgdm9pZCBzZXRQcml2YXRlQnJvd3NpbmdFbmFi
bGVkKGJvb2wgZmxhZyk7CisgICAgdmlydHVhbCB2b2lkIHNldFByaXZhdGVCcm93c2luZ0VuYWJs
ZWQoYm9vbCBmbGFnKTsKICAgICBib29sIGlzUHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpIGNvbnN0
OwogICAgIAogICAgIHN0YXRpYyB2b2lkIGRlbGF5RGF0YWJhc2VDbGVhbnVwKCk7CkBAIC05OCwx
NyArMTAxLDE2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBjaGVja0ludGVncml0eUJlZm9y
ZU9wZW5pbmcoKTsKICAgICAgICAgCiAgICAgLy8gU3VwcG9ydCBmb3IgV2ViQ29yZVN0YXRpc3Rp
Y3MgaW4gV2ViS2l0Ci0gICAgc2l6ZV90IHBhZ2VVUkxNYXBwaW5nQ291bnQoKTsKLSAgICBzaXpl
X3QgcmV0YWluZWRQYWdlVVJMQ291bnQoKTsKLSAgICBzaXplX3QgaWNvblJlY29yZENvdW50KCk7
Ci0gICAgc2l6ZV90IGljb25SZWNvcmRDb3VudFdpdGhEYXRhKCk7CisgICAgdmlydHVhbCBzaXpl
X3QgcGFnZVVSTE1hcHBpbmdDb3VudCgpOworICAgIHZpcnR1YWwgc2l6ZV90IHJldGFpbmVkUGFn
ZVVSTENvdW50KCk7CisgICAgdmlydHVhbCBzaXplX3QgaWNvblJlY29yZENvdW50KCk7CisgICAg
dmlydHVhbCBzaXplX3QgaWNvblJlY29yZENvdW50V2l0aERhdGEoKTsKIAogcHJpdmF0ZToKICAg
ICBJY29uRGF0YWJhc2UoKTsKICAgICB+SWNvbkRhdGFiYXNlKCk7Ci0gICAgZnJpZW5kIEljb25E
YXRhYmFzZSYgaWNvbkRhdGFiYXNlKCk7CisgICAgZnJpZW5kIEljb25EYXRhYmFzZUJhc2UmIGlj
b25EYXRhYmFzZSgpOwogCi0jaWYgRU5BQkxFKElDT05EQVRBQkFTRSkKICAgICBzdGF0aWMgdm9p
ZCBub3RpZnlQZW5kaW5nTG9hZERlY2lzaW9uc09uTWFpblRocmVhZCh2b2lkKik7CiAgICAgdm9p
ZCBub3RpZnlQZW5kaW5nTG9hZERlY2lzaW9ucygpOwogCkBAIC0xMjMsNyArMTI1LDYgQEAgcHJp
dmF0ZToKICAgICBIYXNoU2V0PFJlZlB0cjxEb2N1bWVudExvYWRlcj4gPiBtX2xvYWRlcnNQZW5k
aW5nRGVjaXNpb247CiAKICAgICBSZWZQdHI8SWNvblJlY29yZD4gbV9kZWZhdWx0SWNvblJlY29y
ZDsKLSNlbmRpZiAvLyBFTkFCTEUoSUNPTkRBVEFCQVNFKQogCiAvLyAqKiogQW55IFRocmVhZCAq
KioKIHB1YmxpYzoKQEAgLTEzMSw3ICsxMzIsNiBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIGRhdGFi
YXNlUGF0aCgpIGNvbnN0OwogICAgIHN0YXRpYyBTdHJpbmcgZGVmYXVsdERhdGFiYXNlRmlsZW5h
bWUoKTsKIAotI2lmIEVOQUJMRShJQ09OREFUQUJBU0UpCiBwcml2YXRlOgogICAgIFBhc3NSZWZQ
dHI8SWNvblJlY29yZD4gZ2V0T3JDcmVhdGVJY29uUmVjb3JkKGNvbnN0IFN0cmluZyYgaWNvblVS
TCk7CiAgICAgUGFnZVVSTFJlY29yZCogZ2V0T3JDcmVhdGVQYWdlVVJMUmVjb3JkKGNvbnN0IFN0
cmluZyYgcGFnZVVSTCk7CkBAIC0xNjYsMTcgKzE2NiwxNSBAQCBwcml2YXRlOgogICAgIEhhc2hT
ZXQ8U3RyaW5nPiBtX3BhZ2VVUkxzUGVuZGluZ0ltcG9ydDsKICAgICBIYXNoU2V0PFN0cmluZz4g
bV9wYWdlVVJMc0ludGVyZXN0ZWRJbkljb25zOwogICAgIEhhc2hTZXQ8SWNvblJlY29yZCo+IG1f
aWNvbnNQZW5kaW5nUmVhZGluZzsKLSNlbmRpZiAvLyBFTkFCTEUoSUNPTkRBVEFCQVNFKQogCiAv
LyAqKiogU3luYyBUaHJlYWQgT25seSAqKioKIHB1YmxpYzoKICAgICAvLyBTaG91bGQgYmUgdXNl
ZCBvbmx5IG9uIHRoZSBzeW5jIHRocmVhZCBhbmQgb25seSBieSB0aGUgU2FmYXJpIDIgSWNvbnMg
aW1wb3J0IHByb2NlZHVyZQotICAgIHZvaWQgaW1wb3J0SWNvblVSTEZvclBhZ2VVUkwoY29uc3Qg
U3RyaW5nJiBpY29uVVJMLCBjb25zdCBTdHJpbmcmIHBhZ2VVUkwpOwotICAgIHZvaWQgaW1wb3J0
SWNvbkRhdGFGb3JJY29uVVJMKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhLCBjb25zdCBT
dHJpbmcmIGljb25VUkwpOworICAgIHZpcnR1YWwgdm9pZCBpbXBvcnRJY29uVVJMRm9yUGFnZVVS
TChjb25zdCBTdHJpbmcmIGljb25VUkwsIGNvbnN0IFN0cmluZyYgcGFnZVVSTCk7CisgICAgdmly
dHVhbCB2b2lkIGltcG9ydEljb25EYXRhRm9ySWNvblVSTChQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4gZGF0YSwgY29uc3QgU3RyaW5nJiBpY29uVVJMKTsKICAgICAKLSAgICBib29sIHNob3VsZFN0
b3BUaHJlYWRBY3Rpdml0eSgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTdG9wVGhy
ZWFkQWN0aXZpdHkoKSBjb25zdDsKIAotI2lmIEVOQUJMRShJQ09OREFUQUJBU0UpCiBwcml2YXRl
OiAgICAKICAgICBzdGF0aWMgdm9pZCogaWNvbkRhdGFiYXNlU3luY1RocmVhZFN0YXJ0KHZvaWQg
Kik7CiAgICAgdm9pZCogaWNvbkRhdGFiYXNlU3luY1RocmVhZCgpOwpAQCAtMjM2LDExICsyMzQs
OSBAQCBwcml2YXRlOiAgICAKICAgICBPd25QdHI8U1FMaXRlU3RhdGVtZW50PiBtX3VwZGF0ZUlj
b25EYXRhU3RhdGVtZW50OwogICAgIE93blB0cjxTUUxpdGVTdGF0ZW1lbnQ+IG1fc2V0SWNvbklu
Zm9TdGF0ZW1lbnQ7CiAgICAgT3duUHRyPFNRTGl0ZVN0YXRlbWVudD4gbV9zZXRJY29uRGF0YVN0
YXRlbWVudDsKLSNlbmRpZiAvLyBFTkFCTEUoSUNPTkRBVEFCQVNFKQogfTsKIAotLy8gRnVuY3Rp
b24gdG8gb2J0YWluIHRoZSBnbG9iYWwgaWNvbiBkYXRhYmFzZS4KLUljb25EYXRhYmFzZSYgaWNv
bkRhdGFiYXNlKCk7CisjZW5kaWYgLy8gIUVOQUJMRShJQ09OREFUQUJBU0UpCiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24vSWNvbkRh
dGFiYXNlQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2ljb24v
SWNvbkRhdGFiYXNlQmFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvaWNvbi9JY29uRGF0YWJhc2VCYXNlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJY29uRGF0YWJhc2VC
YXNlLmgiCisKKyNpbmNsdWRlICJJY29uRGF0YWJhc2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitTdHJpbmcgSWNvbkRhdGFiYXNlQmFzZTo6aWNvblVSTEZvclBhZ2VVUkwoY29uc3QgU3Ry
aW5nJikKK3sKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK3N0YXRpYyBJY29uRGF0YWJhc2VC
YXNlKiBnbG9iYWxEYXRhYmFzZSA9IDA7CisKKy8vIEZ1bmN0aW9ucyB0byBnZXQvc2V0IHRoZSBn
bG9iYWwgaWNvbiBkYXRhYmFzZS4KK0ljb25EYXRhYmFzZUJhc2UmIGljb25EYXRhYmFzZSgpCit7
CisgICAgaWYgKGdsb2JhbERhdGFiYXNlKQorICAgICAgICByZXR1cm4gKmdsb2JhbERhdGFiYXNl
OworCisgICAgc3RhdGljIEljb25EYXRhYmFzZUJhc2UqIGRlZmF1bHREYXRhYmFzZSA9IDA7ICAg
ICAgICAKKyAgICBpZiAoIWRlZmF1bHREYXRhYmFzZSkKKyAgICAgICAgZGVmYXVsdERhdGFiYXNl
ID0gbmV3IEljb25EYXRhYmFzZTsKKworICAgIHJldHVybiAqZGVmYXVsdERhdGFiYXNlOworfQor
Cit2b2lkIHNldEdsb2JhbEljb25EYXRhYmFzZShJY29uRGF0YWJhc2VCYXNlKiBuZXdHbG9iYWxE
YXRhYmFzZSkKK3sKKyAgICBnbG9iYWxEYXRhYmFzZSA9IG5ld0dsb2JhbERhdGFiYXNlOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvaWNv
bi9JY29uRGF0YWJhc2VCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVy
L2ljb24vSWNvbkRhdGFiYXNlQmFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUv
bG9hZGVyL2ljb24vSWNvbkRhdGFiYXNlQmFzZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKyAKKyNpZm5kZWYgSWNvbkRhdGFiYXNlQmFzZV9oCisjZGVmaW5lIEljb25E
YXRhYmFzZUJhc2VfaAorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKworI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7IAorCitjbGFzcyBEb2N1
bWVudExvYWRlcjsKK2NsYXNzIEljb25EYXRhYmFzZUNsaWVudDsKK2NsYXNzIEltYWdlOworY2xh
c3MgSW50U2l6ZTsKKworZW51bSBJY29uTG9hZERlY2lzaW9uIHsKKyAgICBJY29uTG9hZFllcywK
KyAgICBJY29uTG9hZE5vLAorICAgIEljb25Mb2FkVW5rbm93bgorfTsKKworY2xhc3MgSWNvbkRh
dGFiYXNlQmFzZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSWNvbkRhdGFiYXNlQmFzZSk7
CisKK3Byb3RlY3RlZDoKKyAgICBJY29uRGF0YWJhc2VCYXNlKCkgeyB9CisKK3B1YmxpYzoKKyAg
ICB2aXJ0dWFsIH5JY29uRGF0YWJhc2VCYXNlKCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
RW5hYmxlZChib29sKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNFbmFibGVkKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIEltYWdlKiBkZWZhdWx0SWNvbihjb25zdCBJbnRT
aXplJikgeyByZXR1cm4gMDsgfQorCisgICAgdmlydHVhbCB2b2lkIHJldGFpbkljb25Gb3JQYWdl
VVJMKGNvbnN0IFN0cmluZyYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlSWNvbkZvclBh
Z2VVUkwoY29uc3QgU3RyaW5nJikgeyB9CisKKyAgICB2aXJ0dWFsIEltYWdlKiBpY29uRm9yUGFn
ZVVSTChjb25zdCBTdHJpbmcmLCBjb25zdCBJbnRTaXplJikgeyByZXR1cm4gMDsgfQorICAgIHZp
cnR1YWwgU3RyaW5nIGljb25VUkxGb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1
YWwgdm9pZCBzZXRJY29uVVJMRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcm
KSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBzZXRJY29uRGF0YUZvckljb25VUkwoUGFzc1JlZlB0
cjxTaGFyZWRCdWZmZXI+LCBjb25zdCBTdHJpbmcmKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaWNv
bkRhdGFLbm93bkZvckljb25VUkwoY29uc3QgU3RyaW5nJikgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICB2aXJ0dWFsIEljb25Mb2FkRGVjaXNpb24gbG9hZERlY2lzaW9uRm9ySWNvblVSTChjb25zdCBT
dHJpbmcmLCBEb2N1bWVudExvYWRlciopIHsgcmV0dXJuIEljb25Mb2FkTm87IH0KKworICAgIC8v
IFN1cHBvcnQgZm9yIFdlYkNvcmVTdGF0aXN0aWNzIGluIFdlYktpdAorICAgIHZpcnR1YWwgc2l6
ZV90IHBhZ2VVUkxNYXBwaW5nQ291bnQoKSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBzaXpl
X3QgcmV0YWluZWRQYWdlVVJMQ291bnQoKSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBzaXpl
X3QgaWNvblJlY29yZENvdW50KCkgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgc2l6ZV90IGlj
b25SZWNvcmRDb3VudFdpdGhEYXRhKCkgeyByZXR1cm4gMDsgfQorCisgICAgdmlydHVhbCB2b2lk
IGltcG9ydEljb25VUkxGb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpIHsg
fQorICAgIHZpcnR1YWwgdm9pZCBpbXBvcnRJY29uRGF0YUZvckljb25VUkwoUGFzc1JlZlB0cjxT
aGFyZWRCdWZmZXI+LCBjb25zdCBTdHJpbmcmKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxk
U3RvcFRocmVhZEFjdGl2aXR5KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdmlydHVh
bCBib29sIG9wZW4oY29uc3QgU3RyaW5nJikgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgY2xvc2UoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQWxsSWNvbnMoKSB7IH0K
KworICAgIHZpcnR1YWwgdm9pZCBzZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKGJvb2wpIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCBzZXRDbGllbnQoSWNvbkRhdGFiYXNlQ2xpZW50KikgeyB9CisKK307
CisKKy8vIEZ1bmN0aW9ucyB0byBnZXQvc2V0IHRoZSBnbG9iYWwgaWNvbiBkYXRhYmFzZS4KK0lj
b25EYXRhYmFzZUJhc2UmIGljb25EYXRhYmFzZSgpOwordm9pZCBzZXRHbG9iYWxJY29uRGF0YWJh
c2UoSWNvbkRhdGFiYXNlQmFzZSopOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBJY29uRGF0YWJhc2VCYXNlX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9pY29u
L0ljb25EYXRhYmFzZU5vbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9pY29uL0ljb25EYXRhYmFzZU5vbmUuY3BwCShyZXZpc2lvbiA4MDg4OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9pY29uL0ljb25EYXRhYmFzZU5vbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDIxOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVy
LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiSWNvbkRhdGFiYXNlLmgiCi0KLSNpZiAhRU5BQkxFKElDT05EQVRBQkFTRSkK
LQotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgi
Ci0jaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LXN0YXRpYyBJY29uRGF0YWJhc2UqIHNoYXJlZEljb25EYXRhYmFzZSA9IDA7Ci0KLS8vIFRoaXMg
dmVyc2lvbiBudW1iZXIgaXMgaW4gdGhlIERCIGFuZCBtYXJrcyB0aGUgY3VycmVudCBnZW5lcmF0
aW9uIG9mIHRoZSBzY2hlbWEKLS8vIFRoZW9yZXRpY2FsbHkgb25jZSB0aGUgc3dpdGNoIGlzIGZs
aXBwZWQgdGhpcyBzaG91bGQgbmV2ZXIgY2hhbmdlCi0vLyBDdXJyZW50bHksIGFuIG91dC1vZi1k
YXRlIHNjaGVtYSBjYXVzZXMgdGhlIERCIHRvIGJlIHdpcGVkIGFuZCByZXNldC4gIFRoaXMgaXNu
J3QgCi0vLyBzbyBiYWQgZHVyaW5nIGRldmVsb3BtZW50IGJ1dCBpbiB0aGUgZnV0dXJlLCB3ZSB3
b3VsZCBuZWVkIHRvIHdyaXRlIGEgY29udmVyc2lvbgotLy8gZnVuY3Rpb24gdG8gYWR2YW5jZSBv
bGRlciByZWxlYXNlZCBzY2hlbWFzIHRvICJjdXJyZW50IgotY29uc3QgaW50IGN1cnJlbnREYXRh
YmFzZVZlcnNpb24gPSA1OwotCi0vLyBJY29ucyBleHBpcmUgb25jZSBhIGRheQotY29uc3QgaW50
IGljb25FeHBpcmF0aW9uVGltZSA9IDYwKjYwKjI0OyAKLS8vIEFic2VudCBpY29ucyBhcmUgcmVj
aGVja2VkIG9uY2UgYSB3ZWVrCi1jb25zdCBpbnQgbWlzc2luZ0ljb25FeHBpcmF0aW9uVGltZSA9
IDYwKjYwKjI0Kjc7IAotCi1jb25zdCBpbnQgdXBkYXRlVGltZXJEZWxheSA9IDU7IAotCi1TdHJp
bmcgSWNvbkRhdGFiYXNlOjpkZWZhdWx0RGF0YWJhc2VGaWxlbmFtZSgpCi17Ci0gICAgREVGSU5F
X1NUQVRJQ19MT0NBTChTdHJpbmcsIGRlZmF1bHREYXRhYmFzZUZpbGVuYW1lLCAoIkljb25zLmRi
IikpOwotICAgIHJldHVybiBkZWZhdWx0RGF0YWJhc2VGaWxlbmFtZS50aHJlYWRzYWZlQ29weSgp
OwotfQotCi1JY29uRGF0YWJhc2UmIGljb25EYXRhYmFzZSgpCi17Ci0gICAgaWYgKCFzaGFyZWRJ
Y29uRGF0YWJhc2UpCi0gICAgICAgIHNoYXJlZEljb25EYXRhYmFzZSA9IG5ldyBJY29uRGF0YWJh
c2U7Ci0gICAgcmV0dXJuICpzaGFyZWRJY29uRGF0YWJhc2U7Ci19Ci0KLUljb25EYXRhYmFzZTo6
SWNvbkRhdGFiYXNlKCkKLXsKLX0KLQotYm9vbCBJY29uRGF0YWJhc2U6Om9wZW4oY29uc3QgU3Ry
aW5nJiAvKmRhdGFiYXNlUGF0aCovKQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBJ
Y29uRGF0YWJhc2U6OmlzT3BlbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12
b2lkIEljb25EYXRhYmFzZTo6Y2xvc2UoKQotewotfQotCi1TdHJpbmcgSWNvbkRhdGFiYXNlOjpk
YXRhYmFzZVBhdGgoKSBjb25zdAotewotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotdm9pZCBJ
Y29uRGF0YWJhc2U6OnJlbW92ZUFsbEljb25zKCkKLXsKLX0KLQotdm9pZCBJY29uRGF0YWJhc2U6
OnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoYm9vbCAvKmZsYWcqLykKLXsKLX0KLQotYm9vbCBJ
Y29uRGF0YWJhc2U6OmlzUHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi12b2lkIEljb25EYXRhYmFzZTo6cmVhZEljb25Gb3JQYWdlVVJMRnJv
bURpc2soY29uc3QgU3RyaW5nJikKLXsKLQotfQotCi1JbWFnZSogSWNvbkRhdGFiYXNlOjppY29u
Rm9yUGFnZVVSTChjb25zdCBTdHJpbmcmIC8qcGFnZVVSTCovLCBjb25zdCBJbnRTaXplJiBzaXpl
KQotewotICAgIHJldHVybiBkZWZhdWx0SWNvbihzaXplKTsKLX0KLQotCi1JY29uTG9hZERlY2lz
aW9uIEljb25EYXRhYmFzZTo6bG9hZERlY2lzaW9uRm9ySWNvblVSTChjb25zdCBTdHJpbmcmLCBE
b2N1bWVudExvYWRlciopCi17Ci0gICAgcmV0dXJuIEljb25Mb2FkTm87Ci19Ci0KLWJvb2wgSWNv
bkRhdGFiYXNlOjppY29uRGF0YUtub3duRm9ySWNvblVSTChjb25zdCBTdHJpbmcmKQotewotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotU3RyaW5nIEljb25EYXRhYmFzZTo6aWNvblVSTEZvclBhZ2VV
UkwoY29uc3QgU3RyaW5nJiAvKnBhZ2VVUkwqLykKLXsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19
Ci0KLUltYWdlKiBJY29uRGF0YWJhc2U6OmRlZmF1bHRJY29uKGNvbnN0IEludFNpemUmIC8qc2l6
ZSovKQotewotICAgIHJldHVybiAwOwotfQotCi12b2lkIEljb25EYXRhYmFzZTo6cmV0YWluSWNv
bkZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJiAvKnBhZ2VVUkwqLykKLXsKLX0KLQotdm9pZCBJY29u
RGF0YWJhc2U6OnJlbGVhc2VJY29uRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmIC8qcGFnZVVSTCov
KQotewotfQotCi12b2lkIEljb25EYXRhYmFzZTo6c2V0SWNvbkRhdGFGb3JJY29uVVJMKFBhc3NS
ZWZQdHI8U2hhcmVkQnVmZmVyPiAvKmRhdGEqLywgY29uc3QgU3RyaW5nJiAvKmljb25VUkwqLykK
LXsKLX0KLQotdm9pZCBJY29uRGF0YWJhc2U6OnNldEljb25VUkxGb3JQYWdlVVJMKGNvbnN0IFN0
cmluZyYgLyppY29uVVJMKi8sIGNvbnN0IFN0cmluZyYgLypwYWdlVVJMKi8pCi17Ci19Ci0KLXZv
aWQgSWNvbkRhdGFiYXNlOjpzZXRFbmFibGVkKGJvb2wgLyplbmFibGVkKi8pCi17Ci19Ci0KLWJv
b2wgSWNvbkRhdGFiYXNlOjppc0VuYWJsZWQoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotSWNvbkRhdGFiYXNlOjp+SWNvbkRhdGFiYXNlKCkKLXsKLSAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLX0KLQotdm9pZCBJY29uRGF0YWJhc2U6OmNoZWNrSW50ZWdyaXR5QmVmb3JlT3Bl
bmluZygpCi17Ci19Ci0KLXZvaWQgSWNvbkRhdGFiYXNlOjpkZWxheURhdGFiYXNlQ2xlYW51cCgp
Ci17Ci19Ci0KLXZvaWQgSWNvbkRhdGFiYXNlOjphbGxvd0RhdGFiYXNlQ2xlYW51cCgpCi17Ci19
Ci0KLXNpemVfdCBJY29uRGF0YWJhc2U6OnBhZ2VVUkxNYXBwaW5nQ291bnQoKQotewotICAgIHJl
dHVybiAwOwotfQotCi1zaXplX3QgSWNvbkRhdGFiYXNlOjpyZXRhaW5lZFBhZ2VVUkxDb3VudCgp
Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXNpemVfdCBJY29uRGF0YWJhc2U6Omljb25SZWNvcmRD
b3VudCgpCi17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXNpemVfdCBJY29uRGF0YWJhc2U6Omljb25S
ZWNvcmRDb3VudFdpdGhEYXRhKCkKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBJY29uRGF0
YWJhc2U6OnNldENsaWVudChJY29uRGF0YWJhc2VDbGllbnQqKQotewotfQotCi0vLyAqKioqKioq
KioqKioqKioqKioqKioqKioKLS8vICoqKiBTeW5jIFRocmVhZCBPbmx5ICoqKgotLy8gKioqKioq
KioqKioqKioqKioqKioqKioqCi0KLXZvaWQgSWNvbkRhdGFiYXNlOjppbXBvcnRJY29uVVJMRm9y
UGFnZVVSTChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKQotewotfQotCi12b2lkIEljb25E
YXRhYmFzZTo6aW1wb3J0SWNvbkRhdGFGb3JJY29uVVJMKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVy
PiwgY29uc3QgU3RyaW5nJikKLXsKLX0KLQotYm9vbCBJY29uRGF0YWJhc2U6OnNob3VsZFN0b3BU
aHJlYWRBY3Rpdml0eSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vICFFTkFCTEUoSUNPTkRBVEFCQVNFKQpJbmRleDog
U291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
bWFjL0NoYW5nZUxvZwkocmV2aXNpb24gODA4ODkpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMS0wMy0xMSAgQnJhZHkg
RWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzg2NDgzMTE+IGFuZCBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTYyMTYKKyAgICAgICAgUmV3b3JrIGRp
c2FibGVkIEljb25EYXRhYmFzZSBidWlsZHMgd2hpbGUgYWxsb3dpbmcgZm9yIGEgcGx1Z2dhYmxl
IGljb24gZGF0YWJhc2UgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgKiBNaXNjL1dlYkljb25E
YXRhYmFzZS5tbToKKyAgICAgICAgKCtbV2ViSWNvbkRhdGFiYXNlIF9jaGVja0ludGVncml0eUJl
Zm9yZU9wZW5pbmddKTogQ2FsbCB0aGVzZSBzdGF0aWMgbWV0aG9kcyBvbiBJY29uRGF0YWJhc2U6
Oiwgbm90IGljb25EYXRhYmFzZSgpLgorICAgICAgICAoLVtXZWJJY29uRGF0YWJhc2UgX3N0YXJ0
VXBJY29uRGF0YWJhc2VdKTogRGl0dG8uCisgICAgICAgIChpbXBvcnRUb1dlYkNvcmVGb3JtYXQp
OgorCiAyMDExLTAzLTEwICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFj
L01pc2MvV2ViSWNvbkRhdGFiYXNlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFj
L01pc2MvV2ViSWNvbkRhdGFiYXNlLm1tCShyZXZpc2lvbiA4MDg4MCkKKysrIFNvdXJjZS9XZWJL
aXQvbWFjL01pc2MvV2ViSWNvbkRhdGFiYXNlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNTgsNyAr
MjU4LDcgQEAgICAgIC8vIFZpYSB0aGUgSWNvbkRhdGFiYXNlQ2xpZW50IGludGVyZgogCiArICh2
b2lkKV9jaGVja0ludGVncml0eUJlZm9yZU9wZW5pbmcKIHsKLSAgICBpY29uRGF0YWJhc2UoKS5j
aGVja0ludGVncml0eUJlZm9yZU9wZW5pbmcoKTsKKyAgICBJY29uRGF0YWJhc2U6OmNoZWNrSW50
ZWdyaXR5QmVmb3JlT3BlbmluZygpOwogfQogCiBAZW5kCkBAIC0yOTYsNyArMjk2LDcgQEAgLSAo
dm9pZClfc3RhcnRVcEljb25EYXRhYmFzZQogICAgIE5TU3RyaW5nICpsZWdhY3lEQiA9IFtkYXRh
YmFzZURpcmVjdG9yeSBzdHJpbmdCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJpY29uLmRiIl07
CiAgICAgTlNGaWxlTWFuYWdlciAqZGVmYXVsdE1hbmFnZXIgPSBbTlNGaWxlTWFuYWdlciBkZWZh
dWx0TWFuYWdlcl07CiAgICAgaWYgKFtkZWZhdWx0TWFuYWdlciBmaWxlRXhpc3RzQXRQYXRoOmxl
Z2FjeURCIGlzRGlyZWN0b3J5OiZpc0RpcmVjdG9yeV0gJiYgIWlzRGlyZWN0b3J5KSB7Ci0gICAg
ICAgIE5TU3RyaW5nICpuZXdEQiA9IFtkYXRhYmFzZURpcmVjdG9yeSBzdHJpbmdCeUFwcGVuZGlu
Z1BhdGhDb21wb25lbnQ6aWNvbkRhdGFiYXNlKCkuZGVmYXVsdERhdGFiYXNlRmlsZW5hbWUoKV07
CisgICAgICAgIE5TU3RyaW5nICpuZXdEQiA9IFtkYXRhYmFzZURpcmVjdG9yeSBzdHJpbmdCeUFw
cGVuZGluZ1BhdGhDb21wb25lbnQ6SWNvbkRhdGFiYXNlOjpkZWZhdWx0RGF0YWJhc2VGaWxlbmFt
ZSgpXTsKICAgICAgICAgaWYgKCFbZGVmYXVsdE1hbmFnZXIgZmlsZUV4aXN0c0F0UGF0aDpuZXdE
Ql0pCiAgICAgICAgICAgICByZW5hbWUoW2xlZ2FjeURCIGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlv
bl0sIFtuZXdEQiBmaWxlU3lzdGVtUmVwcmVzZW50YXRpb25dKTsKICAgICB9CkBAIC02NTYsNyAr
NjU2LDcgQEAgYm9vbCBpbXBvcnRUb1dlYkNvcmVGb3JtYXQoKQogICAgIE5TRmlsZU1hbmFnZXIg
KmZpbGVNYW5hZ2VyID0gW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdOwogICAgIGVudW1l
cmF0b3IgPSBbW2ZpbGVNYW5hZ2VyIGNvbnRlbnRzT2ZEaXJlY3RvcnlBdFBhdGg6ZGF0YWJhc2VE
aXJlY3RvcnkgZXJyb3I6TlVMTF0gb2JqZWN0RW51bWVyYXRvcl07CiAKLSAgICBOU1N0cmluZyAq
ZGF0YWJhc2VGaWxlbmFtZSA9IGljb25EYXRhYmFzZSgpLmRlZmF1bHREYXRhYmFzZUZpbGVuYW1l
KCk7CisgICAgTlNTdHJpbmcgKmRhdGFiYXNlRmlsZW5hbWUgPSBJY29uRGF0YWJhc2U6OmRlZmF1
bHREYXRhYmFzZUZpbGVuYW1lKCk7CiAKICAgICBCT09MIGZvdW5kSWNvbkRCID0gTk87CiAgICAg
TlNTdHJpbmcgKmZpbGU7Cg==
</data>
<flag name="review"
          id="77688"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>