<?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>47386</bug_id>
          
          <creation_ts>2010-10-07 17:43:12 -0700</creation_ts>
          <short_desc>Need implementation of ChromeClient windowRect related functions.</short_desc>
          <delta_ts>2010-10-10 18:00:12 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>291354</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-10-07 17:43:12 -0700</bug_when>
    <thetext>Need implementation of ChromeClient windowRect related functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292036</commentid>
    <comment_count>1</comment_count>
      <attachid>70336</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-10-08 21:05:55 -0700</bug_when>
    <thetext>Created attachment 70336
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292037</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-08 21:13:34 -0700</bug_when>
    <thetext>Attachment 70336 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit2/UIProcess/WebUIClient.cpp:32:  Alphabetical sorting problem.  [build/include_order] [4]
WebKit2/Shared/API/c/WKGeometry.h:49:  Tab found; better to use spaces  [whitespace/tab] [1]
WebKit2/Shared/API/c/WKGeometry.h:49:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebKit2/UIProcess/API/C/WKPage.h:158:  Extra space between WKPageGetWindowRectCallback and getWindowRect  [whitespace/declaration] [3]
WebKit2/UIProcess/API/C/WKPage.h:159:  Extra space between WKPageSetWindowRectCallback and setWindowRect  [whitespace/declaration] [3]
WebKit2/UIProcess/win/WebView.cpp:37:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 6 in 29 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>292038</commentid>
    <comment_count>3</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-10-08 21:15:00 -0700</bug_when>
    <thetext>Attachment 70336 did not build on qt:
Build output: http://queues.webkit.org/results/4350004</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292041</commentid>
    <comment_count>4</comment_count>
      <attachid>70338</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-10-08 21:29:34 -0700</bug_when>
    <thetext>Created attachment 70338
Updated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292042</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-08 21:31:22 -0700</bug_when>
    <thetext>Attachment 70338 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit2/UIProcess/WebUIClient.cpp:32:  Alphabetical sorting problem.  [build/include_order] [4]
WebKit2/Shared/API/c/WKGeometry.h:49:  Tab found; better to use spaces  [whitespace/tab] [1]
WebKit2/Shared/API/c/WKGeometry.h:49:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebKit2/UIProcess/API/C/WKPage.h:158:  Extra space between WKPageGetWindowRectCallback and getWindowRect  [whitespace/declaration] [3]
WebKit2/UIProcess/API/C/WKPage.h:159:  Extra space between WKPageSetWindowRectCallback and setWindowRect  [whitespace/declaration] [3]
WebKitTools/WebKitTestRunner/win/PlatformWebViewWin.cpp:1:  Missing spaces around /  [whitespace/operators] [3]
WebKit2/UIProcess/win/WebView.cpp:37:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 7 in 32 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>292043</commentid>
    <comment_count>6</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-10-08 21:38:13 -0700</bug_when>
    <thetext>Attachment 70338 did not build on qt:
Build output: http://queues.webkit.org/results/4285004</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292047</commentid>
    <comment_count>7</comment_count>
      <attachid>70340</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-10-08 21:46:58 -0700</bug_when>
    <thetext>Created attachment 70340
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292048</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-08 21:49:19 -0700</bug_when>
    <thetext>Attachment 70340 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit2/Shared/API/c/WKGeometry.h:49:  Tab found; better to use spaces  [whitespace/tab] [1]
WebKit2/Shared/API/c/WKGeometry.h:49:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebKit2/UIProcess/API/C/WKPage.h:158:  Extra space between WKPageGetWindowRectCallback and getWindowRect  [whitespace/declaration] [3]
WebKit2/UIProcess/API/C/WKPage.h:159:  Extra space between WKPageSetWindowRectCallback and setWindowRect  [whitespace/declaration] [3]
WebKitTools/WebKitTestRunner/win/PlatformWebViewWin.cpp:1:  Missing spaces around /  [whitespace/operators] [3]
Total errors found: 5 in 32 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>292166</commentid>
    <comment_count>9</comment_count>
      <attachid>70336</attachid>
    <who name="">mitz</who>
    <bug_when>2010-10-09 12:54:50 -0700</bug_when>
    <thetext>Comment on attachment 70336
Patch

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

I’d prefer “window frame” to “window rect”. The latter doesn’t mean much.

&gt; WebKit2/Shared/API/c/WKGeometry.h:49
&gt; +  	WKSize size;

Not enough indentation

&gt; WebKit2/UIProcess/PageClient.h:57
&gt; +    virtual WebCore::FloatRect transformRectToDeviceSpace(const WebCore::FloatRect&amp;) = 0;
&gt; +    virtual WebCore::FloatRect transformRectToUserSpace(const WebCore::FloatRect&amp;) = 0;

Is “rect” necessary in these methods’ names?

&gt; WebKit2/UIProcess/WebPageProxy.cpp:54
&gt; +#include &lt;WebCore/FloatRect.h&gt;
&gt;  
&gt;  #include &quot;WKContextPrivate.h&quot;

Not sure why the #includes are separated like this.

&gt; WebKit2/UIProcess/WebPageProxy.h:283
&gt; +    void windowRect(WebCore::FloatRect&amp;);

getWindowRect would be a better name.

&gt; WebKit2/UIProcess/WebUIClient.cpp:32
&gt;  #include &lt;WebCore/IntSize.h&gt;
&gt; +#include &lt;WebCore/FloatRect.h&gt;

F &lt; I

&gt; WebKit2/UIProcess/win/WebView.cpp:37
&gt;  #include &lt;WebCore/IntRect.h&gt;
&gt; +#include &lt;WebCore/FloatRect.h&gt;

F &lt; I</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292171</commentid>
    <comment_count>10</comment_count>
      <attachid>70367</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-10-09 13:18:45 -0700</bug_when>
    <thetext>Created attachment 70367
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292172</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-09 13:20:21 -0700</bug_when>
    <thetext>Attachment 70367 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit2/UIProcess/API/C/WKPage.h:158:  Extra space between WKPageGetWindowFrameCallback and getWindowFrame  [whitespace/declaration] [3]
WebKit2/UIProcess/API/C/WKPage.h:159:  Extra space between WKPageSetWindowFrameCallback and setWindowFrame  [whitespace/declaration] [3]
Total errors found: 2 in 32 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>292181</commentid>
    <comment_count>12</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-10-09 13:30:06 -0700</bug_when>
    <thetext>Attachment 70367 did not build on qt:
Build output: http://queues.webkit.org/results/4276008</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292182</commentid>
    <comment_count>13</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-10-09 13:32:55 -0700</bug_when>
    <thetext>Landed in 69457.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292396</commentid>
    <comment_count>14</comment_count>
      <attachid>70367</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-10-10 18:00:12 -0700</bug_when>
    <thetext>Comment on attachment 70367
Patch

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

&gt; WebKit2/UIProcess/PageClient.h:57
&gt; +    virtual WebCore::FloatRect transformToDeviceSpace(const WebCore::FloatRect&amp;) = 0;
&gt; +    virtual WebCore::FloatRect transformToUserSpace(const WebCore::FloatRect&amp;) = 0;

I&apos;d prefer these use the term &apos;convert&apos;, rather than &apos;transform&apos;, since we use that elsewhere for similar things.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70336</attachid>
            <date>2010-10-08 21:05:55 -0700</date>
            <delta_ts>2010-10-09 12:54:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>33320</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2OTQ0MCkKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTAyIEBACisyMDEwLTEwLTA4ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmVlZCBp
bXBsZW1lbnRhdGlvbiBvZiBDaHJvbWVDbGllbnQgd2luZG93UmVjdCByZWxhdGVkIGZ1bmN0aW9u
cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3Mzg2
CisKKyAgICAgICAgKiBTaGFyZWQvQVBJL2MvV0tHZW9tZXRyeS5oOiBBZGRlZC4KKyAgICAgICAg
QWRkcyBXS1BvaW50LCBXS1NpemUgYW5kIFdLUmVjdCBzdHJ1Y3RzLgorCisgICAgICAgICogU2hh
cmVkL0FQSS9jL1dLU2hhcmVkQVBJQ2FzdC5oOgorICAgICAgICAoV2ViS2l0Ojp0b0ltcGwpOgor
ICAgICAgICAoV2ViS2l0Ojp0b0FQSSk6CisgICAgICAgIEFkZCBjb252ZXJzaW9uIGZ1bmN0aW9u
cyBmb3IgV0tSZWN0LgorCisgICAgICAgICogU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5o
OgorICAgICAgICBBZGQgZW5jb2RpbmcgZm9yIEZsb2F0UG9pbnQsIEZsb2F0U2l6ZSBhbmQgRmxv
YXRSZWN0LgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLmg6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9tYWMvUGFnZUNsaWVudEltcGwubW06CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJ
bXBsOjp0cmFuc2Zvcm1SZWN0VG9EZXZpY2VTcGFjZSk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VD
bGllbnRJbXBsOjp0cmFuc2Zvcm1SZWN0VG9Vc2VyU3BhY2UpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvbWFjL1dLVmlldy5tbToKKyAgICAgICAgKC1bV0tWaWV3IF90cmFuc2Zvcm1SZWN0VG9E
ZXZpY2VTcGFjZTpdKToKKyAgICAgICAgKC1bV0tWaWV3IF90cmFuc2Zvcm1SZWN0VG9Vc2VyU3Bh
Y2U6XSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3SW50ZXJuYWwuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3F3a3BhZ2UuY3BwOgorICAgICAgICAoUVdLUGFnZVBy
aXZhdGU6OnRyYW5zZm9ybVJlY3RUb0RldmljZVNwYWNlKToKKyAgICAgICAgKFFXS1BhZ2VQcml2
YXRlOjp0cmFuc2Zvcm1SZWN0VG9Vc2VyU3BhY2UpOgorICAgICAgICAoUVdLUGFnZTo6UVdLUGFn
ZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xd2twYWdlX3AuaDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvUGFnZUNsaWVudC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHku
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldFdpbmRvd1JlY3QpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OndpbmRvd1JlY3QpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1l
c3NhZ2VzLmluOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJVSUNsaWVudC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYlVJQ2xpZW50OjpzZXRXaW5kb3dSZWN0KToKKyAgICAgICAgKFdlYktpdDo6
V2ViVUlDbGllbnQ6OndpbmRvd1JlY3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJVSUNsaWVu
dC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZXc6OnNldEVkaXRDb21tYW5kU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3Ojp0cmFuc2Zvcm1SZWN0VG9EZXZpY2VTcGFjZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZXc6OnRyYW5zZm9ybVJlY3RUb1VzZXJTcGFjZSk6CisgICAgICAgICogVUlQcm9jZXNzL3dpbi9X
ZWJWaWV3Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVD
bGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OnNldFdpbmRvd1Jl
Y3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OndpbmRvd1JlY3QpOgorICAg
ICAgICBQaXBlIGNhbGxzIHRocm91Z2ggdG8gdGhlIFVJUHJvY2VzcywgYW5kIGdpdmUgcG9ydHMg
YSBjaGFuY2UgdG8gdHJhbnNmb3JtCisgICAgICAgIHRoZSByZWN0ICh2aWEgdGhlIFBhZ2VDbGll
bnQpIGJlZm9yZSBpdCBpcyBwYXNzZWQgb24uCisKKyAgICAgICAgKiBXZWJLaXQyLnBybzoKKyAg
ICAgICAgKiBXZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd2lu
L1dlYktpdDIudmNwcm9qOgorICAgICAgICAqIHdpbi9XZWJLaXQyR2VuZXJhdGVkLm1ha2U6Cisg
ICAgICAgIEFkZCBuZXcgZmlsZXMuCisKKzIwMTAtMTAtMDcgIFNhbSBXZWluaWcgIDxzYW1Ad2Vi
a2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBOZWVkIGltcGxlbWVudGF0aW9uIG9mIENocm9tZUNsaWVudCB3aW5kb3dSZWN0IHJlbGF0ZWQg
ZnVuY3Rpb25zLgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vODQ2OTQ3Nj4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3Mzg2CisKKyAgICAgICAgKiBT
aGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmg6CisgICAgICAgIEFkZCBGbG9hdFJlY3QvU2l6
ZS9Qb2ludCBjb2RlcnMuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50
SW1wbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLm1tOgor
ICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6c2V0V2luZG93UmVjdCk6CisgICAgICAg
IChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjp3aW5kb3dSZWN0KToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL21hYy9XS1ZpZXcubW06CisgICAgICAgICgtW1dLVmlldyBfc2V0V2luZG93UmVjdDpd
KToKKyAgICAgICAgKC1bV0tWaWV3IF93aW5kb3dSZWN0XSk6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9tYWMvV0tWaWV3SW50ZXJuYWwuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3F3
a3BhZ2UuY3BwOgorICAgICAgICAoUVdLUGFnZVByaXZhdGU6OnNldEVkaXRDb21tYW5kU3RhdGUp
OgorICAgICAgICAoUVdLUGFnZVByaXZhdGU6OnNldFdpbmRvd1JlY3QpOgorICAgICAgICAoUVdL
UGFnZVByaXZhdGU6OndpbmRvd1JlY3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXdr
cGFnZV9wLmg6CisgICAgICAgICogVUlQcm9jZXNzL1BhZ2VDbGllbnQuaDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpzZXRXaW5kb3dSZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojp3aW5kb3dS
ZWN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBVSVByb2Nlc3Mvd2lu
L1dlYlZpZXcuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpzZXRFZGl0Q29tbWFuZFN0
YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6c2V0V2luZG93UmVjdCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlZpZXc6OndpbmRvd1JlY3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy93aW4v
V2ViVmlldy5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21l
Q2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjpzZXRXaW5kb3dS
ZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50Ojp3aW5kb3dSZWN0KToKKyAg
ICAgICAgUGlwZSB3aW5kb3dSZWN0IGluZm8gYmV0d2VlbiB0aGUgcHJvY2Vzcy4gVGhpcyBpcyBv
bmx5IGUKKwogMjAxMC0xMC0wNyAgSmVzc2llIEJlcmxpbiAgPGpiZXJsaW5AYXBwbGUuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCkluZGV4OiBXZWJLaXQyL1dlYktpdDIu
cHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViS2l0Mi5wcm8JKHJldmlzaW9uIDY5NDE4KQor
KysgV2ViS2l0Mi9XZWJLaXQyLnBybwkod29ya2luZyBjb3B5KQpAQCAtMTY5LDYgKzE2OSw3IEBA
IEhFQURFUlMgKz0gXAogICAgIFBsYXRmb3JtL1dvcmtRdWV1ZS5oIFwKICAgICBTaGFyZWQvQVBJ
L2MvV0tCYXNlLmggXAogICAgIFNoYXJlZC9BUEkvYy9XS0NlcnRpZmljYXRlSW5mby5oIFwKKyAg
ICBTaGFyZWQvQVBJL2MvV0tHZW9tZXRyeS5oIFwKICAgICBTaGFyZWQvQVBJL2MvV0tOdW1iZXIu
aCBcCiAgICAgU2hhcmVkL0FQSS9jL1dLU2VyaWFsaXplZFNjcmlwdFZhbHVlLmggXAogICAgIFNo
YXJlZC9BUEkvYy9XS1NoYXJlZEFQSUNhc3QuaCBcCkluZGV4OiBXZWJLaXQyL1NoYXJlZC9XZWJD
b3JlQXJndW1lbnRDb2RlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1NoYXJlZC9XZWJDb3Jl
QXJndW1lbnRDb2RlcnMuaAkocmV2aXNpb24gNjk0MTgpCisrKyBXZWJLaXQyL1NoYXJlZC9XZWJD
b3JlQXJndW1lbnRDb2RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsMTAgQEAgdGVt
cGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOgogdGVtcGxhdGU8PiBzdHJ1Y3Qg
QXJndW1lbnRDb2RlcjxXZWJDb3JlOjpJbnRTaXplPiA6IFNpbXBsZUFyZ3VtZW50Q29kZXI8V2Vi
Q29yZTo6SW50U2l6ZT4geyB9OwogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJD
b3JlOjpJbnRSZWN0PiA6IFNpbXBsZUFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6SW50UmVjdD4geyB9
OwogCit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkZsb2F0UG9pbnQ+
IDogU2ltcGxlQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpGbG9hdFBvaW50PiB7IH07Cit0ZW1wbGF0
ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkZsb2F0U2l6ZT4gOiBTaW1wbGVBcmd1
bWVudENvZGVyPFdlYkNvcmU6OkZsb2F0U2l6ZT4geyB9OwordGVtcGxhdGU8PiBzdHJ1Y3QgQXJn
dW1lbnRDb2RlcjxXZWJDb3JlOjpGbG9hdFJlY3Q+IDogU2ltcGxlQXJndW1lbnRDb2RlcjxXZWJD
b3JlOjpGbG9hdFJlY3Q+IHsgfTsKKwogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxX
ZWJDb3JlOjpNaW1lQ2xhc3NJbmZvPiB7CiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50
RW5jb2RlciogZW5jb2RlciwgY29uc3QgV2ViQ29yZTo6TWltZUNsYXNzSW5mbyYgbWltZUNsYXNz
SW5mbykKICAgICB7CkluZGV4OiBXZWJLaXQyL1NoYXJlZC9BUEkvYy9XS0dlb21ldHJ5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tHZW9tZXRyeS5oCShyZXZpc2lvbiAw
KQorKysgV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tHZW9tZXRyeS5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXS0dlb21ldHJ5X2gKKyNkZWZpbmUg
V0tHZW9tZXRyeV9oCisKKyNpbmNsdWRlIDxXZWJLaXQyL1dLQmFzZS5oPgorCisjaWZkZWYgX19j
cGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK3N0cnVjdCBXS1BvaW50IHsKKyAgICBk
b3VibGUgeDsKKyAgICBkb3VibGUgeTsKK307Cit0eXBlZGVmIHN0cnVjdCBXS1BvaW50IFdLUG9p
bnQ7CisKK3N0cnVjdCBXS1NpemUgeworICAgIGRvdWJsZSB3aWR0aDsKKyAgICBkb3VibGUgaGVp
Z2h0OworfTsKK3R5cGVkZWYgc3RydWN0IFdLU2l6ZSBXS1NpemU7CisKK3N0cnVjdCBXS1JlY3Qg
eworICAgIFdLUG9pbnQgb3JpZ2luOworICAJV0tTaXplIHNpemU7Cit9OwordHlwZWRlZiBzdHJ1
Y3QgV0tSZWN0IFdLUmVjdDsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2Vu
ZGlmIC8qIFdLR2VvbWV0cnlfaCAqLwpJbmRleDogV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tTaGFy
ZWRBUElDYXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tTaGFyZWRB
UElDYXN0LmgJKHJldmlzaW9uIDY5NDE4KQorKysgV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tTaGFy
ZWRBUElDYXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDEwICsyOCwxMiBAQAogCiAjaW5jbHVk
ZSAiV0tCYXNlLmgiCiAjaW5jbHVkZSAiV0tFdmVudC5oIgorI2luY2x1ZGUgIldLR2VvbWV0cnku
aCIKICNpbmNsdWRlICJXZWJFdmVudC5oIgogI2luY2x1ZGUgIldlYk51bWJlci5oIgogI2luY2x1
ZGUgIldlYlN0cmluZy5oIgogI2luY2x1ZGUgIldlYlVSTC5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
RmxvYXRSZWN0Lmg+CiAjaW5jbHVkZSA8d3RmL1R5cGVUcmFpdHMuaD4KIAogbmFtZXNwYWNlIFdl
YktpdCB7CkBAIC0xNDcsNiArMTQ5LDI1IEBAIGlubGluZSBTdHJpbmcgdG9XVEZTdHJpbmcoV0tV
UkxSZWYgdXJsUmUKICAgICByZXR1cm4gdG9JbXBsKHVybFJlZiktPnN0cmluZygpOwogfQogCisK
Ky8qIEdlb21ldHJ5IGNvbnZlcnNpb25zICovCisKK2lubGluZSBXZWJDb3JlOjpGbG9hdFJlY3Qg
dG9JbXBsKGNvbnN0IFdLUmVjdCYgd2tSZWN0KQoreworICAgIHJldHVybiBXZWJDb3JlOjpGbG9h
dFJlY3Qoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHdrUmVjdC5vcmlnaW4ueCksIHN0YXRpY19jYXN0PGZs
b2F0Pih3a1JlY3Qub3JpZ2luLnkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KHdrUmVjdC5zaXplLndpZHRoKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHdr
UmVjdC5zaXplLmhlaWdodCkpOworfQorCitpbmxpbmUgV0tSZWN0IHRvQVBJKGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBXS1JlY3Qgd2tSZWN0OworICAgIHdrUmVjdC5v
cmlnaW4ueCA9IHJlY3QueCgpOworICAgIHdrUmVjdC5vcmlnaW4ueSA9IHJlY3QueSgpOworICAg
IHdrUmVjdC5zaXplLndpZHRoID0gcmVjdC53aWR0aCgpOworICAgIHdrUmVjdC5zaXplLmhlaWdo
dCA9IHJlY3QuaGVpZ2h0KCk7CisgICAgcmV0dXJuIHdrUmVjdDsKK30KKwogLyogRW51bSBjb252
ZXJzaW9ucyAqLwogCiBpbmxpbmUgV0tUeXBlSUQgdG9BUEkoQVBJT2JqZWN0OjpUeXBlIHR5cGUp
CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCShyZXZpc2lvbiA2OTQxOCkKKysrIFdlYktpdDIv
VUlQcm9jZXNzL1BhZ2VDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsOSBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyQWxsRWRpdENvbW1hbmRzKCkgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCBzZXRFZGl0Q29tbWFuZFN0YXRlKGNvbnN0IFN0cmluZyYgY29tbWFuZE5h
bWUsIGJvb2wgaXNFbmFibGVkLCBpbnQgc3RhdGUpID0gMDsKIAorICAgIHZpcnR1YWwgV2ViQ29y
ZTo6RmxvYXRSZWN0IHRyYW5zZm9ybVJlY3RUb0RldmljZVNwYWNlKGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYpID0gMDsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCB0cmFuc2Zvcm1S
ZWN0VG9Vc2VyU3BhY2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgPSAwOworCiAjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIHZpcnR1YWwgdm9pZCBwYWdlRGlkRW50ZXJB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBwYWdlRGlkTGVh
dmVBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkgPSAwOwpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuY3BwCShyZXZpc2lvbiA2OTQxOCkKKysrIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDcgQEAKICNpbmNsdWRlICJXZWJQ
cm9jZXNzTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRl
ICJXZWJVUkxSZXF1ZXN0LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KIAogI2lu
Y2x1ZGUgIldLQ29udGV4dFByaXZhdGUuaCIKICNpbmNsdWRlIDxzdGRpby5oPgpAQCAtOTcyLDYg
Kzk3MywxNiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkVmFsaWRhdGVNZW51SXRlbShjCiAgICAg
bV9wYWdlQ2xpZW50LT5zZXRFZGl0Q29tbWFuZFN0YXRlKGNvbW1hbmROYW1lLCBpc0VuYWJsZWQs
IHN0YXRlKTsKIH0KIAordm9pZCBXZWJQYWdlUHJveHk6OnNldFdpbmRvd1JlY3QoY29uc3QgRmxv
YXRSZWN0JiBuZXdXaW5kb3dSZWN0KQoreworICAgIG1fdWlDbGllbnQuc2V0V2luZG93UmVjdCh0
aGlzLCBtX3BhZ2VDbGllbnQtPnRyYW5zZm9ybVJlY3RUb0RldmljZVNwYWNlKG5ld1dpbmRvd1Jl
Y3QpKTsKK30KKwordm9pZCBXZWJQYWdlUHJveHk6OndpbmRvd1JlY3QoRmxvYXRSZWN0JiBuZXdX
aW5kb3dSZWN0KQoreworICAgIG5ld1dpbmRvd1JlY3QgPSBtX3BhZ2VDbGllbnQtPnRyYW5zZm9y
bVJlY3RUb1VzZXJTcGFjZShtX3VpQ2xpZW50LndpbmRvd1JlY3QodGhpcykpOworfQorCiB2b2lk
IFdlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZUV2ZW50KHVpbnQzMl90IG9wYXF1ZVR5cGUsIGJvb2wg
aGFuZGxlZCkKIHsKICAgICBXZWJFdmVudDo6VHlwZSB0eXBlID0gc3RhdGljX2Nhc3Q8V2ViRXZl
bnQ6OlR5cGU+KG9wYXF1ZVR5cGUpOwpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJl
dmlzaW9uIDY5NDE4KQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTU2LDggKzU2LDkgQEAgbmFtZXNwYWNlIENvcmVJUEMgewogfQogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xhc3MgSW50U2l6ZTsKICAgICBjbGFzcyBDdXJzb3I7Cisg
ICAgY2xhc3MgRmxvYXRSZWN0OworICAgIGNsYXNzIEludFNpemU7CiB9CiAKIHN0cnVjdCBXS0Nv
bnRleHRTdGF0aXN0aWNzOwpAQCAtMjc4LDYgKzI3OSw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBz
ZXRDdXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29yJik7CiAgICAgdm9pZCBkaWRWYWxpZGF0ZU1l
bnVJdGVtKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGJvb2wgaXNFbmFibGVkLCBpbnQzMl90
IHN0YXRlKTsKIAorICAgIHZvaWQgc2V0V2luZG93UmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJl
Y3QmKTsKKyAgICB2b2lkIHdpbmRvd1JlY3QoV2ViQ29yZTo6RmxvYXRSZWN0Jik7CisKICAgICB2
b2lkIGRpZFJlY2VpdmVFdmVudCh1aW50MzJfdCBvcGFxdWVUeXBlLCBib29sIGhhbmRsZWQpOwog
CiAgICAgdm9pZCBkaWRSdW5KYXZhU2NyaXB0SW5NYWluRnJhbWUoY29uc3QgU3RyaW5nJiwgdWlu
dDY0X3QpOwpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmlu
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5p
bgkocmV2aXNpb24gNjk0MTgpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVz
c2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDggQEAgbWVzc2FnZXMgLT4gV2Vi
UGFnZVByb3h5IHsKICAgICBTZXRTdGF0dXNUZXh0KFdURjo6U3RyaW5nIHN0YXR1c1RleHQpCiAg
ICAgU2V0VG9vbFRpcChXVEY6OlN0cmluZyB0b29sVGlwKQogICAgIFRha2VGb2N1cyhib29sIGRp
cmVjdGlvbikKKyAgICBTZXRXaW5kb3dSZWN0KFdlYkNvcmU6OkZsb2F0UmVjdCB3aW5kb3dSZWN0
KQorICAgIFdpbmRvd1JlY3QoKSAtPiAoV2ViQ29yZTo6RmxvYXRSZWN0IHdpbmRvd1JlY3QpCiAK
ICAgICAjIFBvbGljeSBtZXNzYWdlcy4KICAgICBEZWNpZGVQb2xpY3lGb3JNSU1FVHlwZSh1aW50
NjRfdCBmcmFtZUlELCBXVEY6OlN0cmluZyBNSU1FVHlwZSwgV1RGOjpTdHJpbmcgdXJsLCB1aW50
NjRfdCBsaXN0ZW5lcklEKQpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvV2ViVUlDbGllbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL1dlYlVJQ2xpZW50LmNwcAkocmV2aXNp
b24gNjk0MTgpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJVSUNsaWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJXS0FQSUNhc3QuaCIKICNpbmNsdWRl
ICJXZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0ludFNpemUuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC0xMzYsNCArMTM3LDIwIEBAIHZvaWQgV2ViVUlDbGll
bnQ6OmRpZE5vdEhhbmRsZUtleUV2ZW50KFcKICAgICBtX3BhZ2VVSUNsaWVudC5kaWROb3RIYW5k
bGVLZXlFdmVudCh0b0FQSShwYWdlKSwgZXZlbnQubmF0aXZlRXZlbnQoKSwgbV9wYWdlVUlDbGll
bnQuY2xpZW50SW5mbyk7CiB9CiAKK3ZvaWQgV2ViVUlDbGllbnQ6OnNldFdpbmRvd1JlY3QoV2Vi
UGFnZVByb3h5KiBwYWdlLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgaWYgKCFtX3Bh
Z2VVSUNsaWVudC5zZXRXaW5kb3dSZWN0KQorICAgICAgICByZXR1cm47CisKKyAgICBtX3BhZ2VV
SUNsaWVudC5zZXRXaW5kb3dSZWN0KHRvQVBJKHBhZ2UpLCB0b0FQSShyZWN0KSwgbV9wYWdlVUlD
bGllbnQuY2xpZW50SW5mbyk7Cit9CisKK0Zsb2F0UmVjdCBXZWJVSUNsaWVudDo6d2luZG93UmVj
dChXZWJQYWdlUHJveHkqIHBhZ2UpCit7CisgICAgaWYgKCFtX3BhZ2VVSUNsaWVudC5nZXRXaW5k
b3dSZWN0KQorICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisKKyAgICByZXR1cm4gdG9JbXBs
KG1fcGFnZVVJQ2xpZW50LmdldFdpbmRvd1JlY3QodG9BUEkocGFnZSksIG1fcGFnZVVJQ2xpZW50
LmNsaWVudEluZm8pKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBXZWJLaXQy
L1VJUHJvY2Vzcy9XZWJVSUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNz
L1dlYlVJQ2xpZW50LmgJKHJldmlzaW9uIDY5NDE4KQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
VUlDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgsOSBAQCBwdWJsaWM6CiAgICAg
dm9pZCBjb250ZW50c1NpemVDaGFuZ2VkKFdlYlBhZ2VQcm94eSosIGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmLCBXZWJGcmFtZVByb3h5Kik7CiAgICAgdm9pZCBkaWROb3RIYW5kbGVLZXlFdmVudChX
ZWJQYWdlUHJveHkqLCBjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50Jik7CiAKKyAgICB2b2lk
IHNldFdpbmRvd1JlY3QoV2ViUGFnZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7
CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IHdpbmRvd1JlY3QoV2ViUGFnZVByb3h5Kik7CisKIHBy
aXZhdGU6CiAgICAgV0tQYWdlVUlDbGllbnQgbV9wYWdlVUlDbGllbnQ7CiB9OwpJbmRleDogV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0MvV0tQYWdlLmgJKHJldmlzaW9uIDY5NDE4KQorKysgV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0MvV0tQYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lu
Y2x1ZGUgPFdlYktpdDIvV0tCYXNlLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XS0V2ZW50Lmg+Cisj
aW5jbHVkZSA8V2ViS2l0Mi9XS0dlb21ldHJ5Lmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XS05hdGl2
ZUV2ZW50Lmg+CiAKICNpZm5kZWYgX19jcGx1c3BsdXMKQEAgLTEzOCw2ICsxMzksOCBAQCB0eXBl
ZGVmIHZvaWQgKCpXS1BhZ2VTZXRTdGF0dXNUZXh0Q2FsbGJhCiB0eXBlZGVmIHZvaWQgKCpXS1Bh
Z2VNb3VzZURpZE1vdmVPdmVyRWxlbWVudENhbGxiYWNrKShXS1BhZ2VSZWYgcGFnZSwgV0tFdmVu
dE1vZGlmaWVycyBtb2RpZmllcnMsIFdLVHlwZVJlZiB1c2VyRGF0YSwgY29uc3Qgdm9pZCAqY2xp
ZW50SW5mbyk7CiB0eXBlZGVmIHZvaWQgKCpXS1BhZ2VDb250ZW50c1NpemVDaGFuZ2VkQ2FsbGJh
Y2spKFdLUGFnZVJlZiBwYWdlLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIFdLRnJhbWVSZWYgZnJh
bWUsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pOwogdHlwZWRlZiB2b2lkICgqV0tQYWdlRGlkTm90
SGFuZGxlS2V5RXZlbnRDYWxsYmFjaykoV0tQYWdlUmVmIHBhZ2UsIFdLTmF0aXZlRXZlbnRQdHIg
ZXZlbnQsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pOwordHlwZWRlZiBXS1JlY3QgKCpXS1BhZ2VH
ZXRXaW5kb3dSZWN0Q2FsbGJhY2spKFdLUGFnZVJlZiBwYWdlLCBjb25zdCB2b2lkICpjbGllbnRJ
bmZvKTsKK3R5cGVkZWYgdm9pZCAoKldLUGFnZVNldFdpbmRvd1JlY3RDYWxsYmFjaykoV0tQYWdl
UmVmIHBhZ2UsIFdLUmVjdCByZWN0LCBjb25zdCB2b2lkICpjbGllbnRJbmZvKTsKIAogc3RydWN0
IFdLUGFnZVVJQ2xpZW50IHsKICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb247CkBAIC0xNTIsNiArMTU1
LDggQEAgc3RydWN0IFdLUGFnZVVJQ2xpZW50IHsKICAgICBXS1BhZ2VNb3VzZURpZE1vdmVPdmVy
RWxlbWVudENhbGxiYWNrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdXNlRGlkTW92
ZU92ZXJFbGVtZW50OwogICAgIFdLUGFnZUNvbnRlbnRzU2l6ZUNoYW5nZWRDYWxsYmFjayAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudHNTaXplQ2hhbmdlZDsKICAgICBX
S1BhZ2VEaWROb3RIYW5kbGVLZXlFdmVudENhbGxiYWNrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRpZE5vdEhhbmRsZUtleUV2ZW50OworICAgIFdLUGFnZUdldFdpbmRvd1JlY3RD
YWxsYmFjayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0V2luZG93
UmVjdDsKKyAgICBXS1BhZ2VTZXRXaW5kb3dSZWN0Q2FsbGJhY2sgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNldFdpbmRvd1JlY3Q7CiB9OwogdHlwZWRlZiBzdHJ1Y3Qg
V0tQYWdlVUlDbGllbnQgV0tQYWdlVUlDbGllbnQ7CiAKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNz
L0FQSS9tYWMvUGFnZUNsaWVudEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLmgJKHJldmlzaW9uIDY5NDE4KQorKysgV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2
ICs1Niw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjbGVhckFsbEVkaXRDb21tYW5kcygpOwogICAg
IHZvaWQgc2V0RWRpdENvbW1hbmRTdGF0ZShjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCBib29s
IGlzRW5hYmxlZCwgaW50IHN0YXRlKTsKIAorICAgIFdlYkNvcmU6OkZsb2F0UmVjdCB0cmFuc2Zv
cm1SZWN0VG9EZXZpY2VTcGFjZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKKyAgICBXZWJD
b3JlOjpGbG9hdFJlY3QgdHJhbnNmb3JtUmVjdFRvVXNlclNwYWNlKGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYpOworCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIHZvaWQg
cGFnZURpZEVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpOwogICAgIHZvaWQgcGFnZURpZExl
YXZlQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpOwpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L21hYy9QYWdlQ2xpZW50SW1wbC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvbWFjL1BhZ2VDbGllbnRJbXBsLm1tCShyZXZpc2lvbiA2OTQxOCkKKysrIFdlYktpdDIvVUlQ
cm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwubW0JKHdvcmtpbmcgY29weSkKQEAgLTMwLDYg
KzMwLDcgQEAKICNpbXBvcnQgIldLVmlld0ludGVybmFsLmgiCiAjaW1wb3J0ICJXZWJFZGl0Q29t
bWFuZFByb3h5LmgiCiAjaW1wb3J0IDxXZWJDb3JlL0N1cnNvci5oPgorI2ltcG9ydCA8V2ViQ29y
ZS9GbG9hdFJlY3QuaD4KICNpbXBvcnQgPFdlYkNvcmUvRm91bmRhdGlvbkV4dHJhcy5oPgogI2lt
cG9ydCA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpA
QCAtODgsNyArODksNiBAQCAtICh2b2lkKXJlZG9FZGl0aW5nOihpZClzZW5kZXIKIAogQGVuZAog
Ci0KIG5hbWVzcGFjZSBXZWJLaXQgewogCiBOU1N0cmluZyogbnNTdHJpbmdGcm9tV2ViQ29yZVN0
cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKQEAgLTIwNiw2ICsyMDYsMTYgQEAgdm9pZCBQYWdl
Q2xpZW50SW1wbDo6c2V0RWRpdENvbW1hbmRTdGF0ZQogICAgIFttX3drVmlldyBfc2V0VXNlcklu
dGVyZmFjZUl0ZW1TdGF0ZTpuc1N0cmluZ0Zyb21XZWJDb3JlU3RyaW5nKGNvbW1hbmROYW1lKSBl
bmFibGVkOmlzRW5hYmxlZCBzdGF0ZTpuZXdTdGF0ZV07CiB9CiAKK0Zsb2F0UmVjdCBQYWdlQ2xp
ZW50SW1wbDo6dHJhbnNmb3JtUmVjdFRvRGV2aWNlU3BhY2UoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQoreworICAgIHJldHVybiBbbV93a1ZpZXcgX3RyYW5zZm9ybVJlY3RUb0RldmljZVNwYWNlOnJl
Y3RdOworfQorCitGbG9hdFJlY3QgUGFnZUNsaWVudEltcGw6OnRyYW5zZm9ybVJlY3RUb1VzZXJT
cGFjZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgcmV0dXJuIFttX3drVmlldyBfdHJh
bnNmb3JtUmVjdFRvVXNlclNwYWNlOnJlY3RdOworfQorCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQogdm9pZCBQYWdlQ2xpZW50SW1wbDo6cGFnZURpZEVudGVyQWNjZWxlcmF0ZWRD
b21wb3NpdGluZygpCiB7CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQkocmV2
aXNpb24gNjk0MTgpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQkod29y
a2luZyBjb3B5KQpAQCAtNDIsNyArNDIsOSBAQAogI2ltcG9ydCAiV2ViUHJvY2Vzc01hbmFnZXIu
aCIKICNpbXBvcnQgIldlYlByb2Nlc3NQcm94eS5oIgogI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFy
dHpDb3JlLmg+CisjaW1wb3J0IDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9JbnRSZWN0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtU2NyZWVuLmg+CiAjaW1wb3J0
IDx3dGYvUmVmUHRyLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKQEAgLTUzMiw2ICs1
MzQsMTYgQEAgLSAodm9pZClfc2V0VXNlckludGVyZmFjZUl0ZW1TdGF0ZTooTlNTdAogICAgIF9k
YXRhLT5fbWVudUxpc3QuY2xlYXIoKTsKIH0KIAorLSAoQ0dSZWN0KV90cmFuc2Zvcm1SZWN0VG9E
ZXZpY2VTcGFjZTooQ0dSZWN0KXJlY3QKK3sKKyAgICByZXR1cm4gdG9EZXZpY2VTcGFjZShyZWN0
LCBbc2VsZiB3aW5kb3ddKTsKK30KKworLSAoQ0dSZWN0KV90cmFuc2Zvcm1SZWN0VG9Vc2VyU3Bh
Y2U6KENHUmVjdClyZWN0Cit7CisgICAgcmV0dXJuIHRvVXNlclNwYWNlKHJlY3QsIFtzZWxmIHdp
bmRvd10pOworfQorCiAvLyBBbnkgbm9uLXplcm8gdmFsdWUgd2lsbCBkbywgYnV0IHVzaW5nIHNv
bWV0aGluZyByZWNvZ25pemFibGUgbWlnaHQgaGVscCB1cyBkZWJ1ZyBzb21lIGRheS4KICNkZWZp
bmUgVFJBQ0tJTkdfUkVDVF9UQUcgMHhCQURGQUNFCiAKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNz
L0FQSS9tYWMvV0tWaWV3SW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvbWFjL1dLVmlld0ludGVybmFsLmgJKHJldmlzaW9uIDY5NDE4KQorKysgV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL21hYy9XS1ZpZXdJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2
ICszMyw5IEBAIEBpbnRlcmZhY2UgV0tWaWV3IChJbnRlcm5hbCkKIC0gKHZvaWQpX3NldEN1cnNv
cjooTlNDdXJzb3IgKiljdXJzb3I7CiAtICh2b2lkKV9zZXRVc2VySW50ZXJmYWNlSXRlbVN0YXRl
OihOU1N0cmluZyAqKWNvbW1hbmROYW1lIGVuYWJsZWQ6KEJPT0wpaXNFbmFibGVkIHN0YXRlOihp
bnQpbmV3U3RhdGU7CiAKKy0gKENHUmVjdClfdHJhbnNmb3JtUmVjdFRvRGV2aWNlU3BhY2U6KENH
UmVjdClyZWN0OworLSAoQ0dSZWN0KV90cmFuc2Zvcm1SZWN0VG9Vc2VyU3BhY2U6KENHUmVjdCly
ZWN0OworCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogLSAodm9pZClfc3RhcnRB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nOihDQUxheWVyICopcm9vdExheWVyOwogLSAodm9pZClfc3Rv
cEFjY2VsZXJhdGVkQ29tcG9zaXRpbmc7CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQv
cXdrcGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3a3Bh
Z2UuY3BwCShyZXZpc2lvbiA2OTQxOCkKKysrIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2tw
YWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgPFFTdHls
ZT4KICNpbmNsdWRlIDxRVG91Y2hFdmVudD4KICNpbmNsdWRlIDxRdERlYnVnPgorI2luY2x1ZGUg
PFdlYkNvcmUvRmxvYXRSZWN0Lmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XS0ZyYW1lLmg+CiAjaW5j
bHVkZSA8V2ViS2l0Mi9XS1JldGFpblB0ci5oPgogCkBAIC05MSw2ICs5MiwxNiBAQCB2b2lkIFFX
S1BhZ2VQcml2YXRlOjpjbGVhckFsbEVkaXRDb21tYW5kCiB7CiB9CiAKK0Zsb2F0UmVjdCBRV0tQ
YWdlUHJpdmF0ZTo6dHJhbnNmb3JtUmVjdFRvRGV2aWNlU3BhY2UoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQoreworICAgIHJldHVybiByZWN0OworfQorCitGbG9hdFJlY3QgUVdLUGFnZVByaXZhdGU6
OnRyYW5zZm9ybVJlY3RUb1VzZXJTcGFjZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAg
cmV0dXJuIHJlY3Q7Cit9CisKIHZvaWQgUVdLUGFnZVByaXZhdGU6OnBhaW50KFFQYWludGVyKiBw
YWludGVyLCBRUmVjdCBhcmVhKQogewogICAgIHBhaW50ZXItPnNhdmUoKTsKQEAgLTI3MSw3ICsy
ODIsOSBAQCBRV0tQYWdlOjpRV0tQYWdlKFdLUGFnZU5hbWVzcGFjZVJlZiBuYW1lCiAgICAgICAg
IDAsICAvKiBzZXRTdGF0dXNUZXh0ICovCiAgICAgICAgIDAsICAvKiBtb3VzZURpZE1vdmVPdmVy
RWxlbWVudCAqLwogICAgICAgICAwLCAgLyogY29udGVudHNTaXplQ2hhbmdlZCAqLwotICAgICAg
ICAwICAgLyogZGlkTm90SGFuZGxlS2V5RXZlbnQgKi8KKyAgICAgICAgMCwgIC8qIGRpZE5vdEhh
bmRsZUtleUV2ZW50ICovCisgICAgICAgIDAsICAvKiBnZXRXaW5kb3dSZWN0ICovCisgICAgICAg
IDAgICAvKiBzZXRXaW5kb3dSZWN0ICovCiAgICAgfTsKICAgICBXS1BhZ2VTZXRQYWdlVUlDbGll
bnQocGFnZVJlZigpLCAmdWlDbGllbnQpOwogfQpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L3F0L3F3a3BhZ2VfcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9x
d2twYWdlX3AuaAkocmV2aXNpb24gNjk0MTgpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQv
cXdrcGFnZV9wLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDggQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCB0b29sVGlwQ2hhbmdlZChjb25zdCBXVEY6OlN0cmluZyYsIGNvbnN0IFdU
Rjo6U3RyaW5nJik7CiAgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyRWRpdENvbW1hbmQoUGFzc1Jl
ZlB0cjxXZWJLaXQ6OldlYkVkaXRDb21tYW5kUHJveHk+LCBXZWJLaXQ6OldlYlBhZ2VQcm94eTo6
VW5kb09yUmVkbyk7CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyQWxsRWRpdENvbW1hbmRzKCk7Cisg
ICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgdHJhbnNmb3JtUmVjdFRvRGV2aWNlU3BhY2Uo
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJl
Y3QgdHJhbnNmb3JtUmVjdFRvVXNlclNwYWNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwog
CiAgICAgdm9pZCBwYWludChRUGFpbnRlciogcGFpbnRlciwgUVJlY3QpOwogCkluZGV4OiBXZWJL
aXQyL1VJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVBy
b2Nlc3Mvd2luL1dlYlZpZXcuY3BwCShyZXZpc2lvbiA2OTQxOCkKKysrIFdlYktpdDIvVUlQcm9j
ZXNzL3dpbi9XZWJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2lu
Y2x1ZGUgIldlYlBhZ2VQcm94eS5oIgogI2luY2x1ZGUgPENvbW1jdHJsLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9JbnRSZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1dlYkNvcmVJbnN0YW5jZUhhbmRsZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
V2luZG93TWVzc2FnZUJyb2FkY2FzdGVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CkBAIC01ODAsMTAgKzU4MSwyMCBAQCB2b2lkIFdlYlZpZXc6OmNsZWFyQWxsRWRpdENvbW1h
bmRzKCkKIHsKIH0KIAotdm9pZCBXZWJWaWV3OjpzZXRFZGl0Q29tbWFuZFN0YXRlKGNvbnN0IFdU
Rjo6U3RyaW5nJiwgYm9vbCwgaW50KQordm9pZCBXZWJWaWV3OjpzZXRFZGl0Q29tbWFuZFN0YXRl
KGNvbnN0IFN0cmluZyYsIGJvb2wsIGludCkKIHsKIH0KIAorRmxvYXRSZWN0IFdlYlZpZXc6OnRy
YW5zZm9ybVJlY3RUb0RldmljZVNwYWNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBy
ZXR1cm4gcmVjdDsKK30KKworRmxvYXRSZWN0IFdlYlZpZXc6OnRyYW5zZm9ybVJlY3RUb1VzZXJT
cGFjZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgcmV0dXJuIHJlY3Q7Cit9CisKICNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiB2b2lkIFdlYlZpZXc6OnBhZ2VEaWRFbnRl
ckFjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKQogewpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3Mvd2lu
L1dlYlZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVmlldy5o
CShyZXZpc2lvbiA2OTQxOCkKKysrIFdlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmgJKHdv
cmtpbmcgY29weSkKQEAgLTk4LDYgKzk4LDggQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQg
cmVnaXN0ZXJFZGl0Q29tbWFuZChQYXNzUmVmUHRyPFdlYkVkaXRDb21tYW5kUHJveHk+LCBXZWJQ
YWdlUHJveHk6OlVuZG9PclJlZG8pOwogICAgIHZpcnR1YWwgdm9pZCBjbGVhckFsbEVkaXRDb21t
YW5kcygpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRFZGl0Q29tbWFuZFN0YXRlKGNvbnN0IFdURjo6
U3RyaW5nJiwgYm9vbCwgaW50KTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCB0cmFu
c2Zvcm1SZWN0VG9EZXZpY2VTcGFjZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKKyAgICB2
aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCB0cmFuc2Zvcm1SZWN0VG9Vc2VyU3BhY2UoY29uc3Qg
V2ViQ29yZTo6RmxvYXRSZWN0Jik7CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CiAgICAgdmlydHVhbCB2b2lkIHBhZ2VEaWRFbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKTsK
SW5kZXg6IFdlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biA2OTQxOCkKKysrIFdlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0zNjEsNiArMzYxLDcgQEAKIAkJQkNDNTcxNUIxMTVBREFFRjAwMUND
QUY5IC8qIFdlYlN5c3RlbUludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkNDNTcxNTkxMTVBREFFRjAwMUNDQUY5IC8qIFdlYlN5c3RlbUlu
dGVyZmFjZS5oICovOyB9OwogCQlCQ0M1NzE1QzExNUFEQUVGMDAxQ0NBRjkgLyogV2ViU3lzdGVt
SW50ZXJmYWNlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkNDNTcxNUExMTVBREFFRjAwMUNDQUY5IC8qIFdlYlN5c3RlbUludGVyZmFjZS5tbSAqLzsg
fTsKIAkJQkNDNTcxNjIxMTVBREI0MjAwMUNDQUY5IC8qIE5vdEltcGxlbWVudGVkLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0M1NzE2MTExNUFEQjQy
MDAxQ0NBRjkgLyogTm90SW1wbGVtZW50ZWQuaCAqLzsgfTsKKwkJQkNDOEIzNzQxMjVGQjY5MDAw
REU0NkE0IC8qIFdLR2VvbWV0cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDQzhCMzczMTI1RkI2OTAwMERFNDZBNCAvKiBXS0dlb21ldHJ5LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwogCQlCQ0M5MzhFMTEx
ODBERTQ0MDA4NUU1RkUgLyogV0tDb250ZXh0UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNDOTM4RTAxMTgwREU0NDAwODVFNUZFIC8qIFdL
Q29udGV4dFByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlCQ0NCNzVDNjEyMDNBMUNFMDAyMjJEMUIgLyogV2ViQ29udGV4dE1lc3NhZ2VL
aW5kcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkND
Qjc1QzUxMjAzQTFDRTAwMjIyRDFCIC8qIFdlYkNvbnRleHRNZXNzYWdlS2luZHMuaCAqLzsgfTsK
IAkJQkNEMDA0MkQxMTBDMUUyNzAwM0I4QTY3IC8qIENvcmVTZXJ2aWNlcy5mcmFtZXdvcmsgaW4g
RnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0QwMDQyQzEx
MEMxRTI3MDAzQjhBNjcgLyogQ29yZVNlcnZpY2VzLmZyYW1ld29yayAqLzsgfTsKQEAgLTgyMyw2
ICs4MjQsNyBAQAogCQlCQ0M1NzE2MTExNUFEQjQyMDAxQ0NBRjkgLyogTm90SW1wbGVtZW50ZWQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTm90SW1wbGVtZW50ZWQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNDODA0OUQxMjJGMEQ2QjAwMTAzNTI5IC8qIE11
dGFibGVBcnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNdXRh
YmxlQXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0M4MDQ5RTEyMkYw
RDZCMDAxMDM1MjkgLyogTXV0YWJsZUFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE11dGFibGVBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0M4
QjM3MzEyNUZCNjkwMDBERTQ2QTQgLyogV0tHZW9tZXRyeS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXS0dlb21ldHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUJDQzkzOEUwMTE4MERFNDQwMDg1RTVGRSAvKiBXS0NvbnRleHRQcml2YXRlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLQ29udGV4dFByaXZhdGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQkNDQjc1QzUxMjAzQTFDRTAwMjIyRDFCIC8qIFdlYkNvbnRleHRN
ZXNzYWdlS2luZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29udGV4
dE1lc3NhZ2VLaW5kcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0QwMDQyQzEx
MEMxRTI3MDAzQjhBNjcgLyogQ29yZVNlcnZpY2VzLmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1l
ID0gQ29yZVNlcnZpY2VzLmZyYW1ld29yazsgcGF0aCA9IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdv
cmtzL0NvcmVTZXJ2aWNlcy5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSAiPGFic29sdXRlPiI7IH07
CkBAIC0xNjg1LDYgKzE2ODcsNyBAQAogCQkJCUJDNDA3NURGMTI0RkYwMjcwMDY4RjIwQSAvKiBX
S0Vycm9yLmNwcCAqLywKIAkJCQlCQzQwNzVFMDEyNEZGMDI3MDA2OEYyMEEgLyogV0tFcnJvci5o
ICovLAogCQkJCUJDNDA3ODNDMTI1MEZBREQwMDY4RjIwQSAvKiBXS0V2ZW50LmggKi8sCisJCQkJ
QkNDOEIzNzMxMjVGQjY5MDAwREU0NkE0IC8qIFdLR2VvbWV0cnkuaCAqLywKIAkJCQlCQzQwNzVF
MTEyNEZGMDI3MDA2OEYyMEEgLyogV0tNdXRhYmxlQXJyYXkuY3BwICovLAogCQkJCUJDNDA3NUUy
MTI0RkYwMjcwMDY4RjIwQSAvKiBXS011dGFibGVBcnJheS5oICovLAogCQkJCUJDNDA3NUUzMTI0
RkYwMjcwMDY4RjIwQSAvKiBXS011dGFibGVEaWN0aW9uYXJ5LmNwcCAqLywKQEAgLTE5NjUsNiAr
MTk2OCw3IEBACiAJCQkJQkNCRDNDM0IxMjVCRkE3QTAwRDJDMjlGIC8qIFN0cmluZ1BhaXJWZWN0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBM0REMjAyMTI1RTVBMUYwMDQ1MTVFNiAvKiBXZWJG
aW5kQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTNERDIwNjEyNUU1QTJGMDA0NTE1RTYg
LyogQVBJQ2xpZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQlCQ0M4QjM3NDEyNUZCNjkwMDBERTQ2
QTQgLyogV0tHZW9tZXRyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRl
cGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBXZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAkocmV2aXNp
b24gNjk0MTgpCisrKyBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21l
Q2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksMTMgKzU5LDE5IEBAIHZvaWQgV2ViQ2hy
b21lQ2xpZW50OjpjaHJvbWVEZXN0cm95ZWQoKQogCiB2b2lkIFdlYkNocm9tZUNsaWVudDo6c2V0
V2luZG93UmVjdChjb25zdCBGbG9hdFJlY3QmIHdpbmRvd1JlY3QpCiB7Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoTWVz
c2FnZXM6OldlYlBhZ2VQcm94eTo6U2V0V2luZG93UmVjdCh3aW5kb3dSZWN0KSwgbV9wYWdlLT5w
YWdlSUQoKSk7CiB9CiAKIEZsb2F0UmVjdCBXZWJDaHJvbWVDbGllbnQ6OndpbmRvd1JlY3QoKQog
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEZsb2F0UmVjdCgpOworICAgIEZs
b2F0UmVjdCBuZXdXaW5kb3dSZWN0OworCisgICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFyZWQoKS5j
b25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OldpbmRvd1JlY3Qo
KSwKKyAgICAgICAgICAgIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OldpbmRvd1JlY3Q6OlJlcGx5
KG5ld1dpbmRvd1JlY3QpLAorICAgICAgICAgICAgbV9wYWdlLT5wYWdlSUQoKSwgQ29yZUlQQzo6
Q29ubmVjdGlvbjo6Tm9UaW1lb3V0KSkKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworCisg
ICAgcmV0dXJuIG5ld1dpbmRvd1JlY3Q7CiB9CiAKIEZsb2F0UmVjdCBXZWJDaHJvbWVDbGllbnQ6
OnBhZ2VSZWN0KCkKSW5kZXg6IFdlYktpdDIvd2luL1dlYktpdDIudmNwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdDIvd2luL1dlYktpdDIudmNwcm9qCShyZXZpc2lvbiA2OTQxOCkKKysrIFdlYktp
dDIvd2luL1dlYktpdDIudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02MDgsNiArNjA4LDEwIEBA
CiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIu
LlxTaGFyZWRcQVBJXGNcV0tHZW9tZXRyeS5oIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQorCQkJ
CTxGaWxlDQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFNoYXJlZFxBUElcY1xXS011dGFibGVBcnJh
eS5jcHAiDQogCQkJCQk+DQogCQkJCTwvRmlsZT4NCkluZGV4OiBXZWJLaXQyL3dpbi9XZWJLaXQy
R2VuZXJhdGVkLm1ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi93aW4vV2ViS2l0MkdlbmVyYXRl
ZC5tYWtlCShyZXZpc2lvbiA2OTQxOCkKKysrIFdlYktpdDIvd2luL1dlYktpdDJHZW5lcmF0ZWQu
bWFrZQkod29ya2luZyBjb3B5KQpAQCAtMTQsNiArMTQsNyBAQCBhbGw6CiAgICAgeGNvcHkgL3kg
L2QgIi4uXFNoYXJlZFxBUElcY1xXS0RpY3Rpb25hcnkuaCIgIiQoV0VCS0lUT1VUUFVURElSKVxp
bmNsdWRlXFdlYktpdDIiCiAgICAgeGNvcHkgL3kgL2QgIi4uXFNoYXJlZFxBUElcY1xXS0Vycm9y
LmgiICIkKFdFQktJVE9VVFBVVERJUilcaW5jbHVkZVxXZWJLaXQyIgogICAgIHhjb3B5IC95IC9k
ICIuLlxTaGFyZWRcQVBJXGNcV0tFdmVudC5oIiAiJChXRUJLSVRPVVRQVVRESVIpXGluY2x1ZGVc
V2ViS2l0MiIKKyAgICB4Y29weSAveSAvZCAiLi5cU2hhcmVkXEFQSVxjXFdLR2VvbWV0cnkuaCIg
IiQoV0VCS0lUT1VUUFVURElSKVxpbmNsdWRlXFdlYktpdDIiCiAgICAgeGNvcHkgL3kgL2QgIi4u
XFNoYXJlZFxBUElcY1xXS011dGFibGVBcnJheS5oIiAiJChXRUJLSVRPVVRQVVRESVIpXGluY2x1
ZGVcV2ViS2l0MiIKICAgICB4Y29weSAveSAvZCAiLi5cU2hhcmVkXEFQSVxjXFdLTXV0YWJsZURp
Y3Rpb25hcnkuaCIgIiQoV0VCS0lUT1VUUFVURElSKVxpbmNsdWRlXFdlYktpdDIiCiAgICAgeGNv
cHkgL3kgL2QgIi4uXFNoYXJlZFxBUElcY1xXS051bWJlci5oIiAiJChXRUJLSVRPVVRQVVRESVIp
XGluY2x1ZGVcV2ViS2l0MiIKSW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXRUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDY5NDQwKQorKysgV2ViS2l0VG9v
bHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTAtMTAtMDgg
IFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBOZWVkIGltcGxlbWVudGF0aW9uIG9mIENocm9tZUNsaWVu
dCB3aW5kb3dSZWN0IHJlbGF0ZWQgZnVuY3Rpb25zLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDczODYKKworICAgICAgICAqIE1pbmlCcm93c2VyL21h
Yy9Ccm93c2VyV2luZG93Q29udHJvbGxlci5tOgorICAgICAgICAoZ2V0V2luZG93UmVjdCk6Cisg
ICAgICAgIChzZXRXaW5kb3dSZWN0KToKKyAgICAgICAgKC1bQnJvd3NlcldpbmRvd0NvbnRyb2xs
ZXIgYXdha2VGcm9tTmliXSk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdl
YlZpZXcuaDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcDoK
KyAgICAgICAgKFdUUjo6Z2V0V2luZG93UmVjdCk6CisgICAgICAgIChXVFI6OnNldFdpbmRvd1Jl
Y3QpOgorICAgICAgICAoV1RSOjpjcmVhdGVPdGhlclBhZ2UpOgorICAgICAgICAoV1RSOjpUZXN0
Q29udHJvbGxlcjo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9XZWJL
aXRUZXN0UnVubmVyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViS2l0
VGVzdFJ1bm5lci9tYWMvUGxhdGZvcm1XZWJWaWV3TWFjLm1tOgorICAgICAgICAoV1RSOjpQbGF0
Zm9ybVdlYlZpZXc6OndpbmRvd1JlY3QpOgorICAgICAgICAoV1RSOjpQbGF0Zm9ybVdlYlZpZXc6
OnNldFdpbmRvd1JlY3QpOgorCiAyMDEwLTEwLTA4ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCAoRXJpYyBpcyBvbiB2YWNhdGlvbiBpbiB0aGlz
IGNoYW5nZSBpcyB0cml2aWFsKS4KSW5kZXg6IFdlYktpdFRvb2xzL01pbmlCcm93c2VyL21hYy9C
cm93c2VyV2luZG93Q29udHJvbGxlci5tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL01pbmlC
cm93c2VyL21hYy9Ccm93c2VyV2luZG93Q29udHJvbGxlci5tCShyZXZpc2lvbiA2OTQxOCkKKysr
IFdlYktpdFRvb2xzL01pbmlCcm93c2VyL21hYy9Ccm93c2VyV2luZG93Q29udHJvbGxlci5tCSh3
b3JraW5nIGNvcHkpCkBAIC00ODQsNiArNDg0LDIyIEBAIHN0YXRpYyB2b2lkIGNvbnRlbnRzU2l6
ZUNoYW5nZWQoV0tQYWdlUmUKICAgICBMT0coQCJjb250ZW50c1NpemVDaGFuZ2VkIik7CiB9CiAK
K3N0YXRpYyBXS1JlY3QgZ2V0V2luZG93UmVjdChXS1BhZ2VSZWYgcGFnZSwgY29uc3Qgdm9pZCog
Y2xpZW50SW5mbykKK3sKKyAgICBDR1JlY3QgcmVjdCA9IFtbKEJyb3dzZXJXaW5kb3dDb250cm9s
bGVyICopY2xpZW50SW5mbyB3aW5kb3ddIGZyYW1lXTsKKyAgICBXS1JlY3Qgd2tSZWN0OworICAg
IHdrUmVjdC5vcmlnaW4ueCA9IHJlY3Qub3JpZ2luLng7CisgICAgd2tSZWN0Lm9yaWdpbi55ID0g
cmVjdC5vcmlnaW4ueTsKKyAgICB3a1JlY3Quc2l6ZS53aWR0aCA9IHJlY3Quc2l6ZS53aWR0aDsK
KyAgICB3a1JlY3Quc2l6ZS5oZWlnaHQgPSByZWN0LnNpemUuaGVpZ2h0OworICAgIHJldHVybiB3
a1JlY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHNldFdpbmRvd1JlY3QoV0tQYWdlUmVmIHBhZ2UsIFdL
UmVjdCByZWN0LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIFtbKEJyb3dzZXJXaW5k
b3dDb250cm9sbGVyICopY2xpZW50SW5mbyB3aW5kb3ddIHNldEZyYW1lOkNHUmVjdE1ha2UocmVj
dC5vcmlnaW4ueCwgcmVjdC5vcmlnaW4ueSwgcmVjdC5zaXplLndpZHRoLCByZWN0LnNpemUuaGVp
Z2h0KSBkaXNwbGF5OllFU107Cit9CisKIC0gKHZvaWQpYXdha2VGcm9tTmliCiB7CiAgICAgX3dl
YlZpZXcgPSBbW1dLVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpbY29udGFpbmVyVmlldyBmcmFt
ZV0gcGFnZU5hbWVzcGFjZVJlZjpfcGFnZU5hbWVzcGFjZV07CkBAIC01MzgsNyArNTU0LDkgQEAg
LSAodm9pZClhd2FrZUZyb21OaWIKICAgICAgICAgc2V0U3RhdHVzVGV4dCwKICAgICAgICAgbW91
c2VEaWRNb3ZlT3ZlckVsZW1lbnQsCiAgICAgICAgIGNvbnRlbnRzU2l6ZUNoYW5nZWQsCi0gICAg
ICAgIDAgICAgICAgICAgIC8qIGRpZE5vdEhhbmRsZUtleUV2ZW50ICovCisgICAgICAgIDAsICAg
ICAgICAgIC8qIGRpZE5vdEhhbmRsZUtleUV2ZW50ICovCisgICAgICAgIGdldFdpbmRvd1JlY3Qs
CisgICAgICAgIHNldFdpbmRvd1JlY3QKICAgICB9OwogICAgIFdLUGFnZVNldFBhZ2VVSUNsaWVu
dChfd2ViVmlldy5wYWdlUmVmLCAmdWlDbGllbnQpOwogfQpJbmRleDogV2ViS2l0VG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29s
cy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oCShyZXZpc2lvbiA2OTQxOCkKKysr
IFdlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTYwLDYgKzYwLDkgQEAgcHVibGljOgogICAgIHZvaWQgcmVzaXplVG8odW5zaWdu
ZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCk7CiAgICAgdm9pZCBmb2N1cygpOwogCisgICAgV0tS
ZWN0IHdpbmRvd1JlY3QoKTsKKyAgICB2b2lkIHNldFdpbmRvd1JlY3QoV0tSZWN0KTsKKwogcHJp
dmF0ZToKICAgICBQbGF0Zm9ybVdLVmlldyBtX3ZpZXc7CiAgICAgUGxhdGZvcm1XaW5kb3cgbV93
aW5kb3c7CkluZGV4OiBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250
cm9sbGVyLmNwcAkocmV2aXNpb24gNjk0MTgpCisrKyBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVu
bmVyL1Rlc3RDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsNiArNjcsMTggQEAg
VGVzdENvbnRyb2xsZXI6On5UZXN0Q29udHJvbGxlcigpCiB7CiB9CiAKK3N0YXRpYyBXS1JlY3Qg
Z2V0V2luZG93UmVjdChXS1BhZ2VSZWYgcGFnZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sK
KyAgICBQbGF0Zm9ybVdlYlZpZXcqIHZpZXcgPSBzdGF0aWNfY2FzdDxQbGF0Zm9ybVdlYlZpZXcq
Pihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSk7CisgICAgcmV0dXJuIHZpZXctPndpbmRv
d1JlY3QoKTsKK30KKworc3RhdGljIHZvaWQgc2V0V2luZG93UmVjdChXS1BhZ2VSZWYgcGFnZSwg
V0tSZWN0IHJlY3QsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgUGxhdGZvcm1XZWJW
aWV3KiB2aWV3ID0gc3RhdGljX2Nhc3Q8UGxhdGZvcm1XZWJWaWV3Kj4oY29uc3RfY2FzdDx2b2lk
Kj4oY2xpZW50SW5mbykpOworICAgIHZpZXctPnNldFdpbmRvd1JlY3QocmVjdCk7Cit9CisKIHN0
YXRpYyB2b2lkIGNsb3NlT3RoZXJQYWdlKFdLUGFnZVJlZiBwYWdlLCBjb25zdCB2b2lkKiBjbGll
bnRJbmZvKQogewogICAgIFdLUGFnZUNsb3NlKHBhZ2UpOwpAQCAtOTMsNyArMTA1LDkgQEAgc3Rh
dGljIFdLUGFnZVJlZiBjcmVhdGVPdGhlclBhZ2UoV0tQYWdlUgogICAgICAgICAwLAogICAgICAg
ICAwLAogICAgICAgICAwLAotICAgICAgICAwCisgICAgICAgIDAsCisgICAgICAgIGdldFdpbmRv
d1JlY3QsCisgICAgICAgIHNldFdpbmRvd1JlY3QKICAgICB9OwogICAgIFdLUGFnZVNldFBhZ2VV
SUNsaWVudChuZXdQYWdlLCAmb3RoZXJQYWdlVUlDbGllbnQpOwogCkBAIC0xNzQsNyArMTg4LDkg
QEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6aW5pdGlhbGl6ZShpbnQgYXJnYwogICAgICAgICAwLAog
ICAgICAgICAwLAogICAgICAgICAwLAotICAgICAgICAwCisgICAgICAgIDAsCisgICAgICAgIGdl
dFdpbmRvd1JlY3QsCisgICAgICAgIHNldFdpbmRvd1JlY3QKICAgICB9OwogICAgIFdLUGFnZVNl
dFBhZ2VVSUNsaWVudChtX21haW5XZWJWaWV3LT5wYWdlKCksICZwYWdlVUlDbGllbnQpOwogCklu
ZGV4OiBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9QbGF0Zm9ybVdlYlZpZXdNYWMu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvUGxhdGZv
cm1XZWJWaWV3TWFjLm1tCShyZXZpc2lvbiA2OTQxOCkKKysrIFdlYktpdFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvbWFjL1BsYXRmb3JtV2ViVmlld01hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNjMs
NCArNjMsMjEgQEAgdm9pZCBQbGF0Zm9ybVdlYlZpZXc6OmZvY3VzKCkKICAgICAvLyBJbXBsZW1l
bnQuCiB9CiAKK1dLUmVjdCBQbGF0Zm9ybVdlYlZpZXc6OndpbmRvd1JlY3QoKQoreworICAgIENH
UmVjdCByZWN0ID0gW21fd2luZG93IGZyYW1lXTsKKworICAgIFdLUmVjdCB3a1JlY3Q7CisgICAg
d2tSZWN0Lm9yaWdpbi54ID0gcmVjdC5vcmlnaW4ueDsKKyAgICB3a1JlY3Qub3JpZ2luLnkgPSBy
ZWN0Lm9yaWdpbi55OworICAgIHdrUmVjdC5zaXplLndpZHRoID0gcmVjdC5zaXplLndpZHRoOwor
ICAgIHdrUmVjdC5zaXplLmhlaWdodCA9IHJlY3Quc2l6ZS5oZWlnaHQ7CisgICAgcmV0dXJuIHdr
UmVjdDsKK30KKwordm9pZCBQbGF0Zm9ybVdlYlZpZXc6OnNldFdpbmRvd1JlY3QoV0tSZWN0IHJl
Y3QpCit7CisgICAgW21fd2luZG93IHNldEZyYW1lOkNHUmVjdE1ha2UocmVjdC5vcmlnaW4ueCwg
cmVjdC5vcmlnaW4ueSwgcmVjdC5zaXplLndpZHRoLCByZWN0LnNpemUuaGVpZ2h0KSBkaXNwbGF5
OllFU107Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdUUgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70338</attachid>
            <date>2010-10-08 21:29:34 -0700</date>
            <delta_ts>2010-10-08 21:46:58 -0700</delta_ts>
            <desc>Updated.</desc>
            <filename>patch2.diff</filename>
            <type>text/plain</type>
            <size>36004</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2OTQ0MCkKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTAzIEBACisyMDEwLTEwLTA4ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmVlZCBp
bXBsZW1lbnRhdGlvbiBvZiBDaHJvbWVDbGllbnQgd2luZG93UmVjdCByZWxhdGVkIGZ1bmN0aW9u
cy4KKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzg0Njk0NzY+CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzM4NgorCisgICAgICAgICogU2hhcmVkL0FQ
SS9jL1dLR2VvbWV0cnkuaDogQWRkZWQuCisgICAgICAgIEFkZHMgV0tQb2ludCwgV0tTaXplIGFu
ZCBXS1JlY3Qgc3RydWN0cy4KKworICAgICAgICAqIFNoYXJlZC9BUEkvYy9XS1NoYXJlZEFQSUNh
c3QuaDoKKyAgICAgICAgKFdlYktpdDo6dG9JbXBsKToKKyAgICAgICAgKFdlYktpdDo6dG9BUEkp
OgorICAgICAgICBBZGQgY29udmVyc2lvbiBmdW5jdGlvbnMgZm9yIFdLUmVjdC4KKworICAgICAg
ICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaDoKKyAgICAgICAgQWRkIGVuY29kaW5n
IGZvciBGbG9hdFBvaW50LCBGbG9hdFNpemUgYW5kIEZsb2F0UmVjdC4KKworICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQy9XS1BhZ2UuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9QYWdl
Q2xpZW50SW1wbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBs
Lm1tOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6dHJhbnNmb3JtUmVjdFRvRGV2
aWNlU3BhY2UpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6dHJhbnNmb3JtUmVj
dFRvVXNlclNwYWNlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW06Cisg
ICAgICAgICgtW1dLVmlldyBfdHJhbnNmb3JtUmVjdFRvRGV2aWNlU3BhY2U6XSk6CisgICAgICAg
ICgtW1dLVmlldyBfdHJhbnNmb3JtUmVjdFRvVXNlclNwYWNlOl0pOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvbWFjL1dLVmlld0ludGVybmFsLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9x
dC9xd2twYWdlLmNwcDoKKyAgICAgICAgKFFXS1BhZ2VQcml2YXRlOjp0cmFuc2Zvcm1SZWN0VG9E
ZXZpY2VTcGFjZSk6CisgICAgICAgIChRV0tQYWdlUHJpdmF0ZTo6dHJhbnNmb3JtUmVjdFRvVXNl
clNwYWNlKToKKyAgICAgICAgKFFXS1BhZ2U6OlFXS1BhZ2UpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvcXQvcXdrcGFnZV9wLmg6CisgICAgICAgICogVUlQcm9jZXNzL1BhZ2VDbGllbnQuaDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZVByb3h5OjpzZXRXaW5kb3dSZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBy
b3h5Ojp3aW5kb3dSZWN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6Cisg
ICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBV
SVByb2Nlc3MvV2ViVUlDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJVSUNsaWVudDo6
c2V0V2luZG93UmVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVJQ2xpZW50Ojp3aW5kb3dSZWN0
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViVUlDbGllbnQuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3Mvd2luL1dlYlZpZXcuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpzZXRFZGl0Q29t
bWFuZFN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6dHJhbnNmb3JtUmVjdFRvRGV2
aWNlU3BhY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojp0cmFuc2Zvcm1SZWN0VG9Vc2Vy
U3BhY2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy93aW4vV2ViVmlldy5oOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViQ2hyb21lQ2xpZW50OjpzZXRXaW5kb3dSZWN0KToKKyAgICAgICAgKFdlYktpdDo6
V2ViQ2hyb21lQ2xpZW50Ojp3aW5kb3dSZWN0KToKKyAgICAgICAgUGlwZSBjYWxscyB0aHJvdWdo
IHRvIHRoZSBVSVByb2Nlc3MsIGFuZCBnaXZlIHBvcnRzIGEgY2hhbmNlIHRvIHRyYW5zZm9ybQor
ICAgICAgICB0aGUgcmVjdCAodmlhIHRoZSBQYWdlQ2xpZW50KSBiZWZvcmUgaXQgaXMgcGFzc2Vk
IG9uLgorCisgICAgICAgICogV2ViS2l0Mi5wcm86CisgICAgICAgICogV2ViS2l0Mi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHdpbi9XZWJLaXQyLnZjcHJvajoKKyAgICAg
ICAgKiB3aW4vV2ViS2l0MkdlbmVyYXRlZC5tYWtlOgorICAgICAgICBBZGQgbmV3IGZpbGVzLgor
CisyMDEwLTEwLTA3ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmVlZCBpbXBsZW1lbnRhdGlvbiBv
ZiBDaHJvbWVDbGllbnQgd2luZG93UmVjdCByZWxhdGVkIGZ1bmN0aW9ucy4KKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzg0Njk0NzY+CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00NzM4NgorCisgICAgICAgICogU2hhcmVkL1dlYkNvcmVBcmd1bWVudENv
ZGVycy5oOgorICAgICAgICBBZGQgRmxvYXRSZWN0L1NpemUvUG9pbnQgY29kZXJzLgorCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5tbToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNs
aWVudEltcGw6OnNldFdpbmRvd1JlY3QpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1w
bDo6d2luZG93UmVjdCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tOgor
ICAgICAgICAoLVtXS1ZpZXcgX3NldFdpbmRvd1JlY3Q6XSk6CisgICAgICAgICgtW1dLVmlldyBf
d2luZG93UmVjdF0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmlld0ludGVybmFs
Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xd2twYWdlLmNwcDoKKyAgICAgICAgKFFX
S1BhZ2VQcml2YXRlOjpzZXRFZGl0Q29tbWFuZFN0YXRlKToKKyAgICAgICAgKFFXS1BhZ2VQcml2
YXRlOjpzZXRXaW5kb3dSZWN0KToKKyAgICAgICAgKFFXS1BhZ2VQcml2YXRlOjp3aW5kb3dSZWN0
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3F3a3BhZ2VfcC5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9QYWdlQ2xpZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0V2luZG93UmVjdCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6d2luZG93UmVjdCk6CisgICAgICAgICogVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVz
c2FnZXMuaW46CisgICAgICAgICogVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlldzo6c2V0RWRpdENvbW1hbmRTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYlZpZXc6OnNldFdpbmRvd1JlY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojp3aW5k
b3dSZWN0KToKKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL1dlYlZpZXcuaDoKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6c2V0V2luZG93UmVjdCk6CisgICAgICAgIChXZWJLaXQ6
OldlYkNocm9tZUNsaWVudDo6d2luZG93UmVjdCk6CisgICAgICAgIFBpcGUgd2luZG93UmVjdCBp
bmZvIGJldHdlZW4gdGhlIHByb2Nlc3MuIFRoaXMgaXMgb25seSBlCisKIDIwMTAtMTAtMDcgIEpl
c3NpZSBCZXJsaW4gIDxqYmVybGluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBT
YW0gV2VpbmlnLgpJbmRleDogV2ViS2l0Mi9XZWJLaXQyLnBybwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQyL1dlYktpdDIucHJvCShyZXZpc2lvbiA2OTQxOCkKKysrIFdlYktpdDIvV2ViS2l0Mi5wcm8J
KHdvcmtpbmcgY29weSkKQEAgLTE2OSw2ICsxNjksNyBAQCBIRUFERVJTICs9IFwKICAgICBQbGF0
Zm9ybS9Xb3JrUXVldWUuaCBcCiAgICAgU2hhcmVkL0FQSS9jL1dLQmFzZS5oIFwKICAgICBTaGFy
ZWQvQVBJL2MvV0tDZXJ0aWZpY2F0ZUluZm8uaCBcCisgICAgU2hhcmVkL0FQSS9jL1dLR2VvbWV0
cnkuaCBcCiAgICAgU2hhcmVkL0FQSS9jL1dLTnVtYmVyLmggXAogICAgIFNoYXJlZC9BUEkvYy9X
S1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIFwKICAgICBTaGFyZWQvQVBJL2MvV0tTaGFyZWRBUElD
YXN0LmggXApJbmRleDogV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgJKHJldmlz
aW9uIDY5NDE4KQorKysgV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDEwIEBAIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50
Q29kZXI8V2ViQ29yZToKIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6
SW50U2l6ZT4gOiBTaW1wbGVBcmd1bWVudENvZGVyPFdlYkNvcmU6OkludFNpemU+IHsgfTsKIHRl
bXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6SW50UmVjdD4gOiBTaW1wbGVB
cmd1bWVudENvZGVyPFdlYkNvcmU6OkludFJlY3Q+IHsgfTsKIAordGVtcGxhdGU8PiBzdHJ1Y3Qg
QXJndW1lbnRDb2RlcjxXZWJDb3JlOjpGbG9hdFBvaW50PiA6IFNpbXBsZUFyZ3VtZW50Q29kZXI8
V2ViQ29yZTo6RmxvYXRQb2ludD4geyB9OwordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2Rl
cjxXZWJDb3JlOjpGbG9hdFNpemU+IDogU2ltcGxlQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpGbG9h
dFNpemU+IHsgfTsKK3RlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6Rmxv
YXRSZWN0PiA6IFNpbXBsZUFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6RmxvYXRSZWN0PiB7IH07CisK
IHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6TWltZUNsYXNzSW5mbz4g
ewogICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0
IFdlYkNvcmU6Ok1pbWVDbGFzc0luZm8mIG1pbWVDbGFzc0luZm8pCiAgICAgewpJbmRleDogV2Vi
S2l0Mi9TaGFyZWQvQVBJL2MvV0tHZW9tZXRyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvU2hh
cmVkL0FQSS9jL1dLR2VvbWV0cnkuaAkocmV2aXNpb24gMCkKKysrIFdlYktpdDIvU2hhcmVkL0FQ
SS9jL1dLR2VvbWV0cnkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgV0tHZW9tZXRyeV9oCisjZGVmaW5lIFdLR2VvbWV0cnlfaAorCisjaW5jbHVk
ZSA8V2ViS2l0Mi9XS0Jhc2UuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsK
KyNlbmRpZgorCitzdHJ1Y3QgV0tQb2ludCB7CisgICAgZG91YmxlIHg7CisgICAgZG91YmxlIHk7
Cit9OwordHlwZWRlZiBzdHJ1Y3QgV0tQb2ludCBXS1BvaW50OworCitzdHJ1Y3QgV0tTaXplIHsK
KyAgICBkb3VibGUgd2lkdGg7CisgICAgZG91YmxlIGhlaWdodDsKK307Cit0eXBlZGVmIHN0cnVj
dCBXS1NpemUgV0tTaXplOworCitzdHJ1Y3QgV0tSZWN0IHsKKyAgICBXS1BvaW50IG9yaWdpbjsK
KyAgCVdLU2l6ZSBzaXplOworfTsKK3R5cGVkZWYgc3RydWN0IFdLUmVjdCBXS1JlY3Q7CisKKyNp
ZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBXS0dlb21ldHJ5X2ggKi8K
SW5kZXg6IFdlYktpdDIvU2hhcmVkL0FQSS9jL1dLU2hhcmVkQVBJQ2FzdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdDIvU2hhcmVkL0FQSS9jL1dLU2hhcmVkQVBJQ2FzdC5oCShyZXZpc2lvbiA2OTQx
OCkKKysrIFdlYktpdDIvU2hhcmVkL0FQSS9jL1dLU2hhcmVkQVBJQ2FzdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCwxMCArMjgsMTIgQEAKIAogI2luY2x1ZGUgIldLQmFzZS5oIgogI2luY2x1ZGUg
IldLRXZlbnQuaCIKKyNpbmNsdWRlICJXS0dlb21ldHJ5LmgiCiAjaW5jbHVkZSAiV2ViRXZlbnQu
aCIKICNpbmNsdWRlICJXZWJOdW1iZXIuaCIKICNpbmNsdWRlICJXZWJTdHJpbmcuaCIKICNpbmNs
dWRlICJXZWJVUkwuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgogI2luY2x1ZGUg
PHd0Zi9UeXBlVHJhaXRzLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtMTQ3LDYgKzE0OSwy
NSBAQCBpbmxpbmUgU3RyaW5nIHRvV1RGU3RyaW5nKFdLVVJMUmVmIHVybFJlCiAgICAgcmV0dXJu
IHRvSW1wbCh1cmxSZWYpLT5zdHJpbmcoKTsKIH0KIAorCisvKiBHZW9tZXRyeSBjb252ZXJzaW9u
cyAqLworCitpbmxpbmUgV2ViQ29yZTo6RmxvYXRSZWN0IHRvSW1wbChjb25zdCBXS1JlY3QmIHdr
UmVjdCkKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6RmxvYXRSZWN0KHN0YXRpY19jYXN0PGZsb2F0
Pih3a1JlY3Qub3JpZ2luLngpLCBzdGF0aWNfY2FzdDxmbG9hdD4od2tSZWN0Lm9yaWdpbi55KSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGZsb2F0Pih3a1JlY3Qu
c2l6ZS53aWR0aCksIHN0YXRpY19jYXN0PGZsb2F0Pih3a1JlY3Quc2l6ZS5oZWlnaHQpKTsKK30K
KworaW5saW5lIFdLUmVjdCB0b0FQSShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHJlY3QpCit7
CisgICAgV0tSZWN0IHdrUmVjdDsKKyAgICB3a1JlY3Qub3JpZ2luLnggPSByZWN0LngoKTsKKyAg
ICB3a1JlY3Qub3JpZ2luLnkgPSByZWN0LnkoKTsKKyAgICB3a1JlY3Quc2l6ZS53aWR0aCA9IHJl
Y3Qud2lkdGgoKTsKKyAgICB3a1JlY3Quc2l6ZS5oZWlnaHQgPSByZWN0LmhlaWdodCgpOworICAg
IHJldHVybiB3a1JlY3Q7Cit9CisKIC8qIEVudW0gY29udmVyc2lvbnMgKi8KIAogaW5saW5lIFdL
VHlwZUlEIHRvQVBJKEFQSU9iamVjdDo6VHlwZSB0eXBlKQpJbmRleDogV2ViS2l0Mi9VSVByb2Nl
c3MvUGFnZUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGll
bnQuaAkocmV2aXNpb24gNjk0MTgpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUzLDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBjbGVhckFsbEVkaXRDb21tYW5kcygpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RWRpdENv
bW1hbmRTdGF0ZShjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCBib29sIGlzRW5hYmxlZCwgaW50
IHN0YXRlKSA9IDA7CiAKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCB0cmFuc2Zvcm1S
ZWN0VG9EZXZpY2VTcGFjZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSA9IDA7CisgICAgdmly
dHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgdHJhbnNmb3JtUmVjdFRvVXNlclNwYWNlKGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYpID0gMDsKKwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKICAgICB2aXJ0dWFsIHZvaWQgcGFnZURpZEVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZygp
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcGFnZURpZExlYXZlQWNjZWxlcmF0ZWRDb21wb3NpdGlu
ZygpID0gMDsKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkocmV2aXNpb24gNjk0
MTgpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSAiV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCiAjaW5j
bHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCiAjaW5jbHVkZSAiV2ViVVJMUmVxdWVzdC5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CiAKICNpbmNsdWRlICJXS0NvbnRleHRQcml2YXRl
LmgiCiAjaW5jbHVkZSA8c3RkaW8uaD4KQEAgLTk3Miw2ICs5NzMsMTYgQEAgdm9pZCBXZWJQYWdl
UHJveHk6OmRpZFZhbGlkYXRlTWVudUl0ZW0oYwogICAgIG1fcGFnZUNsaWVudC0+c2V0RWRpdENv
bW1hbmRTdGF0ZShjb21tYW5kTmFtZSwgaXNFbmFibGVkLCBzdGF0ZSk7CiB9CiAKK3ZvaWQgV2Vi
UGFnZVByb3h5OjpzZXRXaW5kb3dSZWN0KGNvbnN0IEZsb2F0UmVjdCYgbmV3V2luZG93UmVjdCkK
K3sKKyAgICBtX3VpQ2xpZW50LnNldFdpbmRvd1JlY3QodGhpcywgbV9wYWdlQ2xpZW50LT50cmFu
c2Zvcm1SZWN0VG9EZXZpY2VTcGFjZShuZXdXaW5kb3dSZWN0KSk7Cit9CisKK3ZvaWQgV2ViUGFn
ZVByb3h5Ojp3aW5kb3dSZWN0KEZsb2F0UmVjdCYgbmV3V2luZG93UmVjdCkKK3sKKyAgICBuZXdX
aW5kb3dSZWN0ID0gbV9wYWdlQ2xpZW50LT50cmFuc2Zvcm1SZWN0VG9Vc2VyU3BhY2UobV91aUNs
aWVudC53aW5kb3dSZWN0KHRoaXMpKTsKK30KKwogdm9pZCBXZWJQYWdlUHJveHk6OmRpZFJlY2Vp
dmVFdmVudCh1aW50MzJfdCBvcGFxdWVUeXBlLCBib29sIGhhbmRsZWQpCiB7CiAgICAgV2ViRXZl
bnQ6OlR5cGUgdHlwZSA9IHN0YXRpY19jYXN0PFdlYkV2ZW50OjpUeXBlPihvcGFxdWVUeXBlKTsK
SW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiA2OTQxOCkKKysrIFdlYktp
dDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw4ICs1Niw5
IEBAIG5hbWVzcGFjZSBDb3JlSVBDIHsKIH0KIAogbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIGNs
YXNzIEludFNpemU7CiAgICAgY2xhc3MgQ3Vyc29yOworICAgIGNsYXNzIEZsb2F0UmVjdDsKKyAg
ICBjbGFzcyBJbnRTaXplOwogfQogCiBzdHJ1Y3QgV0tDb250ZXh0U3RhdGlzdGljczsKQEAgLTI3
OCw2ICsyNzksOSBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6
OkN1cnNvciYpOwogICAgIHZvaWQgZGlkVmFsaWRhdGVNZW51SXRlbShjb25zdCBTdHJpbmcmIGNv
bW1hbmROYW1lLCBib29sIGlzRW5hYmxlZCwgaW50MzJfdCBzdGF0ZSk7CiAKKyAgICB2b2lkIHNl
dFdpbmRvd1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CisgICAgdm9pZCB3aW5kb3dS
ZWN0KFdlYkNvcmU6OkZsb2F0UmVjdCYpOworCiAgICAgdm9pZCBkaWRSZWNlaXZlRXZlbnQodWlu
dDMyX3Qgb3BhcXVlVHlwZSwgYm9vbCBoYW5kbGVkKTsKIAogICAgIHZvaWQgZGlkUnVuSmF2YVNj
cmlwdEluTWFpbkZyYW1lKGNvbnN0IFN0cmluZyYsIHVpbnQ2NF90KTsKSW5kZXg6IFdlYktpdDIv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQy
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHJldmlzaW9uIDY5NDE4KQorKysg
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkp
CkBAIC0zNiw2ICszNiw4IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAgICAgU2V0U3Rh
dHVzVGV4dChXVEY6OlN0cmluZyBzdGF0dXNUZXh0KQogICAgIFNldFRvb2xUaXAoV1RGOjpTdHJp
bmcgdG9vbFRpcCkKICAgICBUYWtlRm9jdXMoYm9vbCBkaXJlY3Rpb24pCisgICAgU2V0V2luZG93
UmVjdChXZWJDb3JlOjpGbG9hdFJlY3Qgd2luZG93UmVjdCkKKyAgICBXaW5kb3dSZWN0KCkgLT4g
KFdlYkNvcmU6OkZsb2F0UmVjdCB3aW5kb3dSZWN0KQogCiAgICAgIyBQb2xpY3kgbWVzc2FnZXMu
CiAgICAgRGVjaWRlUG9saWN5Rm9yTUlNRVR5cGUodWludDY0X3QgZnJhbWVJRCwgV1RGOjpTdHJp
bmcgTUlNRVR5cGUsIFdURjo6U3RyaW5nIHVybCwgdWludDY0X3QgbGlzdGVuZXJJRCkKSW5kZXg6
IFdlYktpdDIvVUlQcm9jZXNzL1dlYlVJQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQy
L1VJUHJvY2Vzcy9XZWJVSUNsaWVudC5jcHAJKHJldmlzaW9uIDY5NDE4KQorKysgV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViVUlDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBA
CiAjaW5jbHVkZSAiV0tBUElDYXN0LmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5j
bHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFJlY3QuaD4K
ICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApA
QCAtMTM2LDQgKzEzNywyMCBAQCB2b2lkIFdlYlVJQ2xpZW50OjpkaWROb3RIYW5kbGVLZXlFdmVu
dChXCiAgICAgbV9wYWdlVUlDbGllbnQuZGlkTm90SGFuZGxlS2V5RXZlbnQodG9BUEkocGFnZSks
IGV2ZW50Lm5hdGl2ZUV2ZW50KCksIG1fcGFnZVVJQ2xpZW50LmNsaWVudEluZm8pOwogfQogCit2
b2lkIFdlYlVJQ2xpZW50OjpzZXRXaW5kb3dSZWN0KFdlYlBhZ2VQcm94eSogcGFnZSwgY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQoreworICAgIGlmICghbV9wYWdlVUlDbGllbnQuc2V0V2luZG93UmVj
dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9wYWdlVUlDbGllbnQuc2V0V2luZG93UmVjdCh0
b0FQSShwYWdlKSwgdG9BUEkocmVjdCksIG1fcGFnZVVJQ2xpZW50LmNsaWVudEluZm8pOworfQor
CitGbG9hdFJlY3QgV2ViVUlDbGllbnQ6OndpbmRvd1JlY3QoV2ViUGFnZVByb3h5KiBwYWdlKQor
eworICAgIGlmICghbV9wYWdlVUlDbGllbnQuZ2V0V2luZG93UmVjdCkKKyAgICAgICAgcmV0dXJu
IEZsb2F0UmVjdCgpOworCisgICAgcmV0dXJuIHRvSW1wbChtX3BhZ2VVSUNsaWVudC5nZXRXaW5k
b3dSZWN0KHRvQVBJKHBhZ2UpLCBtX3BhZ2VVSUNsaWVudC5jbGllbnRJbmZvKSk7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvV2ViVUlDbGllbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJVSUNsaWVudC5oCShyZXZpc2lv
biA2OTQxOCkKKysrIFdlYktpdDIvVUlQcm9jZXNzL1dlYlVJQ2xpZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU4LDYgKzU4LDkgQEAgcHVibGljOgogICAgIHZvaWQgY29udGVudHNTaXplQ2hhbmdl
ZChXZWJQYWdlUHJveHkqLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgV2ViRnJhbWVQcm94eSop
OwogICAgIHZvaWQgZGlkTm90SGFuZGxlS2V5RXZlbnQoV2ViUGFnZVByb3h5KiwgY29uc3QgTmF0
aXZlV2ViS2V5Ym9hcmRFdmVudCYpOwogCisgICAgdm9pZCBzZXRXaW5kb3dSZWN0KFdlYlBhZ2VQ
cm94eSosIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOworICAgIFdlYkNvcmU6OkZsb2F0UmVj
dCB3aW5kb3dSZWN0KFdlYlBhZ2VQcm94eSopOworCiBwcml2YXRlOgogICAgIFdLUGFnZVVJQ2xp
ZW50IG1fcGFnZVVJQ2xpZW50OwogfTsKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dL
UGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5oCShy
ZXZpc2lvbiA2OTQxOCkKKysrIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlIDxXZWJLaXQyL1dLQmFzZS5o
PgogI2luY2x1ZGUgPFdlYktpdDIvV0tFdmVudC5oPgorI2luY2x1ZGUgPFdlYktpdDIvV0tHZW9t
ZXRyeS5oPgogI2luY2x1ZGUgPFdlYktpdDIvV0tOYXRpdmVFdmVudC5oPgogCiAjaWZuZGVmIF9f
Y3BsdXNwbHVzCkBAIC0xMzgsNiArMTM5LDggQEAgdHlwZWRlZiB2b2lkICgqV0tQYWdlU2V0U3Rh
dHVzVGV4dENhbGxiYQogdHlwZWRlZiB2b2lkICgqV0tQYWdlTW91c2VEaWRNb3ZlT3ZlckVsZW1l
bnRDYWxsYmFjaykoV0tQYWdlUmVmIHBhZ2UsIFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzLCBX
S1R5cGVSZWYgdXNlckRhdGEsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pOwogdHlwZWRlZiB2b2lk
ICgqV0tQYWdlQ29udGVudHNTaXplQ2hhbmdlZENhbGxiYWNrKShXS1BhZ2VSZWYgcGFnZSwgaW50
IHdpZHRoLCBpbnQgaGVpZ2h0LCBXS0ZyYW1lUmVmIGZyYW1lLCBjb25zdCB2b2lkICpjbGllbnRJ
bmZvKTsKIHR5cGVkZWYgdm9pZCAoKldLUGFnZURpZE5vdEhhbmRsZUtleUV2ZW50Q2FsbGJhY2sp
KFdLUGFnZVJlZiBwYWdlLCBXS05hdGl2ZUV2ZW50UHRyIGV2ZW50LCBjb25zdCB2b2lkICpjbGll
bnRJbmZvKTsKK3R5cGVkZWYgV0tSZWN0ICgqV0tQYWdlR2V0V2luZG93UmVjdENhbGxiYWNrKShX
S1BhZ2VSZWYgcGFnZSwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbyk7Cit0eXBlZGVmIHZvaWQgKCpX
S1BhZ2VTZXRXaW5kb3dSZWN0Q2FsbGJhY2spKFdLUGFnZVJlZiBwYWdlLCBXS1JlY3QgcmVjdCwg
Y29uc3Qgdm9pZCAqY2xpZW50SW5mbyk7CiAKIHN0cnVjdCBXS1BhZ2VVSUNsaWVudCB7CiAgICAg
aW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2ZXJzaW9uOwpAQCAtMTUyLDYgKzE1NSw4IEBAIHN0cnVjdCBXS1BhZ2VVSUNs
aWVudCB7CiAgICAgV0tQYWdlTW91c2VEaWRNb3ZlT3ZlckVsZW1lbnRDYWxsYmFjayAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtb3VzZURpZE1vdmVPdmVyRWxlbWVudDsKICAgICBXS1Bh
Z2VDb250ZW50c1NpemVDaGFuZ2VkQ2FsbGJhY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRlbnRzU2l6ZUNoYW5nZWQ7CiAgICAgV0tQYWdlRGlkTm90SGFuZGxlS2V5RXZl
bnRDYWxsYmFjayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWROb3RIYW5kbGVL
ZXlFdmVudDsKKyAgICBXS1BhZ2VHZXRXaW5kb3dSZWN0Q2FsbGJhY2sgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdldFdpbmRvd1JlY3Q7CisgICAgV0tQYWdlU2V0V2lu
ZG93UmVjdENhbGxiYWNrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZXRXaW5kb3dSZWN0OwogfTsKIHR5cGVkZWYgc3RydWN0IFdLUGFnZVVJQ2xpZW50IFdLUGFnZVVJ
Q2xpZW50OwogCkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1w
bC5oCShyZXZpc2lvbiA2OTQxOCkKKysrIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNs
aWVudEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsOSBAQCBwcml2YXRlOgogICAg
IHZvaWQgY2xlYXJBbGxFZGl0Q29tbWFuZHMoKTsKICAgICB2b2lkIHNldEVkaXRDb21tYW5kU3Rh
dGUoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgYm9vbCBpc0VuYWJsZWQsIGludCBzdGF0ZSk7
CiAKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgdHJhbnNmb3JtUmVjdFRvRGV2aWNlU3BhY2UoY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IHRyYW5zZm9y
bVJlY3RUb1VzZXJTcGFjZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKKwogI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICB2b2lkIHBhZ2VEaWRFbnRlckFjY2VsZXJhdGVk
Q29tcG9zaXRpbmcoKTsKICAgICB2b2lkIHBhZ2VEaWRMZWF2ZUFjY2VsZXJhdGVkQ29tcG9zaXRp
bmcoKTsKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5t
bQkocmV2aXNpb24gNjk0MTgpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGll
bnRJbXBsLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW1wb3J0ICJXS1Zp
ZXdJbnRlcm5hbC5oIgogI2ltcG9ydCAiV2ViRWRpdENvbW1hbmRQcm94eS5oIgogI2ltcG9ydCA8
V2ViQ29yZS9DdXJzb3IuaD4KKyNpbXBvcnQgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CiAjaW1wb3J0
IDxXZWJDb3JlL0ZvdW5kYXRpb25FeHRyYXMuaD4KICNpbXBvcnQgPHd0Zi9QYXNzT3duUHRyLmg+
CiAjaW1wb3J0IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTg4LDcgKzg5LDYgQEAgLSAodm9p
ZClyZWRvRWRpdGluZzooaWQpc2VuZGVyCiAKIEBlbmQKIAotCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IAogTlNTdHJpbmcqIG5zU3RyaW5nRnJvbVdlYkNvcmVTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJp
bmcpCkBAIC0yMDYsNiArMjA2LDE2IEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OnNldEVkaXRDb21t
YW5kU3RhdGUKICAgICBbbV93a1ZpZXcgX3NldFVzZXJJbnRlcmZhY2VJdGVtU3RhdGU6bnNTdHJp
bmdGcm9tV2ViQ29yZVN0cmluZyhjb21tYW5kTmFtZSkgZW5hYmxlZDppc0VuYWJsZWQgc3RhdGU6
bmV3U3RhdGVdOwogfQogCitGbG9hdFJlY3QgUGFnZUNsaWVudEltcGw6OnRyYW5zZm9ybVJlY3RU
b0RldmljZVNwYWNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICByZXR1cm4gW21fd2tW
aWV3IF90cmFuc2Zvcm1SZWN0VG9EZXZpY2VTcGFjZTpyZWN0XTsKK30KKworRmxvYXRSZWN0IFBh
Z2VDbGllbnRJbXBsOjp0cmFuc2Zvcm1SZWN0VG9Vc2VyU3BhY2UoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQoreworICAgIHJldHVybiBbbV93a1ZpZXcgX3RyYW5zZm9ybVJlY3RUb1VzZXJTcGFjZTpy
ZWN0XTsKK30KKwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIHZvaWQgUGFnZUNs
aWVudEltcGw6OnBhZ2VEaWRFbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKQogewpJbmRleDog
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0JKHJldmlzaW9uIDY5NDE4KQorKysgV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQy
LDkgQEAKICNpbXBvcnQgIldlYlByb2Nlc3NNYW5hZ2VyLmgiCiAjaW1wb3J0ICJXZWJQcm9jZXNz
UHJveHkuaCIKICNpbXBvcnQgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgorI2ltcG9ydCA8V2Vi
Q29yZS9GbG9hdFJlY3QuaD4KICNpbXBvcnQgPFdlYkNvcmUvSW50UmVjdC5oPgorI2ltcG9ydCA8
V2ViQ29yZS9QbGF0Zm9ybVNjcmVlbi5oPgogI2ltcG9ydCA8d3RmL1JlZlB0ci5oPgogI2ltcG9y
dCA8d3RmL1JldGFpblB0ci5oPgogCkBAIC01MzIsNiArNTM0LDE2IEBAIC0gKHZvaWQpX3NldFVz
ZXJJbnRlcmZhY2VJdGVtU3RhdGU6KE5TU3QKICAgICBfZGF0YS0+X21lbnVMaXN0LmNsZWFyKCk7
CiB9CiAKKy0gKENHUmVjdClfdHJhbnNmb3JtUmVjdFRvRGV2aWNlU3BhY2U6KENHUmVjdClyZWN0
Cit7CisgICAgcmV0dXJuIHRvRGV2aWNlU3BhY2UocmVjdCwgW3NlbGYgd2luZG93XSk7Cit9CisK
Ky0gKENHUmVjdClfdHJhbnNmb3JtUmVjdFRvVXNlclNwYWNlOihDR1JlY3QpcmVjdAoreworICAg
IHJldHVybiB0b1VzZXJTcGFjZShyZWN0LCBbc2VsZiB3aW5kb3ddKTsKK30KKwogLy8gQW55IG5v
bi16ZXJvIHZhbHVlIHdpbGwgZG8sIGJ1dCB1c2luZyBzb21ldGhpbmcgcmVjb2duaXphYmxlIG1p
Z2h0IGhlbHAgdXMgZGVidWcgc29tZSBkYXkuCiAjZGVmaW5lIFRSQUNLSU5HX1JFQ1RfVEFHIDB4
QkFERkFDRQogCkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlld0ludGVybmFs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXdJbnRlcm5h
bC5oCShyZXZpc2lvbiA2OTQxOCkKKysrIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3
SW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsOSBAQCBAaW50ZXJmYWNlIFdL
VmlldyAoSW50ZXJuYWwpCiAtICh2b2lkKV9zZXRDdXJzb3I6KE5TQ3Vyc29yICopY3Vyc29yOwog
LSAodm9pZClfc2V0VXNlckludGVyZmFjZUl0ZW1TdGF0ZTooTlNTdHJpbmcgKiljb21tYW5kTmFt
ZSBlbmFibGVkOihCT09MKWlzRW5hYmxlZCBzdGF0ZTooaW50KW5ld1N0YXRlOwogCistIChDR1Jl
Y3QpX3RyYW5zZm9ybVJlY3RUb0RldmljZVNwYWNlOihDR1JlY3QpcmVjdDsKKy0gKENHUmVjdClf
dHJhbnNmb3JtUmVjdFRvVXNlclNwYWNlOihDR1JlY3QpcmVjdDsKKwogI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKIC0gKHZvaWQpX3N0YXJ0QWNjZWxlcmF0ZWRDb21wb3NpdGluZzoo
Q0FMYXllciAqKXJvb3RMYXllcjsKIC0gKHZvaWQpX3N0b3BBY2NlbGVyYXRlZENvbXBvc2l0aW5n
OwpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3a3BhZ2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2twYWdlLmNwcAkocmV2aXNpb24gNjk0MTgp
CisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdrcGFnZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlIDxRU3R5bGU+CiAjaW5jbHVkZSA8UVRvdWNoRXZl
bnQ+CiAjaW5jbHVkZSA8UXREZWJ1Zz4KKyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgog
I2luY2x1ZGUgPFdlYktpdDIvV0tGcmFtZS5oPgogI2luY2x1ZGUgPFdlYktpdDIvV0tSZXRhaW5Q
dHIuaD4KIApAQCAtOTEsNiArOTIsMTYgQEAgdm9pZCBRV0tQYWdlUHJpdmF0ZTo6Y2xlYXJBbGxF
ZGl0Q29tbWFuZAogewogfQogCitGbG9hdFJlY3QgUVdLUGFnZVByaXZhdGU6OnRyYW5zZm9ybVJl
Y3RUb0RldmljZVNwYWNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICByZXR1cm4gcmVj
dDsKK30KKworRmxvYXRSZWN0IFFXS1BhZ2VQcml2YXRlOjp0cmFuc2Zvcm1SZWN0VG9Vc2VyU3Bh
Y2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIHJldHVybiByZWN0OworfQorCiB2b2lk
IFFXS1BhZ2VQcml2YXRlOjpwYWludChRUGFpbnRlciogcGFpbnRlciwgUVJlY3QgYXJlYSkKIHsK
ICAgICBwYWludGVyLT5zYXZlKCk7CkBAIC0yNzEsNyArMjgyLDkgQEAgUVdLUGFnZTo6UVdLUGFn
ZShXS1BhZ2VOYW1lc3BhY2VSZWYgbmFtZQogICAgICAgICAwLCAgLyogc2V0U3RhdHVzVGV4dCAq
LwogICAgICAgICAwLCAgLyogbW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQgKi8KICAgICAgICAgMCwg
IC8qIGNvbnRlbnRzU2l6ZUNoYW5nZWQgKi8KLSAgICAgICAgMCAgIC8qIGRpZE5vdEhhbmRsZUtl
eUV2ZW50ICovCisgICAgICAgIDAsICAvKiBkaWROb3RIYW5kbGVLZXlFdmVudCAqLworICAgICAg
ICAwLCAgLyogZ2V0V2luZG93UmVjdCAqLworICAgICAgICAwICAgLyogc2V0V2luZG93UmVjdCAq
LwogICAgIH07CiAgICAgV0tQYWdlU2V0UGFnZVVJQ2xpZW50KHBhZ2VSZWYoKSwgJnVpQ2xpZW50
KTsKIH0KSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2twYWdlX3AuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdrcGFnZV9wLmgJKHJldmlzaW9uIDY5
NDE4KQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3a3BhZ2VfcC5oCSh3b3JraW5nIGNv
cHkpCkBAIC01NSw2ICs1NSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgdG9vbFRpcENo
YW5nZWQoY29uc3QgV1RGOjpTdHJpbmcmLCBjb25zdCBXVEY6OlN0cmluZyYpOwogICAgIHZpcnR1
YWwgdm9pZCByZWdpc3RlckVkaXRDb21tYW5kKFBhc3NSZWZQdHI8V2ViS2l0OjpXZWJFZGl0Q29t
bWFuZFByb3h5PiwgV2ViS2l0OjpXZWJQYWdlUHJveHk6OlVuZG9PclJlZG8pOwogICAgIHZpcnR1
YWwgdm9pZCBjbGVhckFsbEVkaXRDb21tYW5kcygpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6Rmxv
YXRSZWN0IHRyYW5zZm9ybVJlY3RUb0RldmljZVNwYWNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0IHRyYW5zZm9ybVJlY3RUb1VzZXJT
cGFjZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKIAogICAgIHZvaWQgcGFpbnQoUVBhaW50
ZXIqIHBhaW50ZXIsIFFSZWN0KTsKIApJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlZp
ZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmNwcAko
cmV2aXNpb24gNjk0MTgpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIK
ICNpbmNsdWRlIDxDb21tY3RybC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9XZWJDb3JlSW5z
dGFuY2VIYW5kbGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1dpbmRvd01lc3NhZ2VCcm9hZGNhc3Rl
ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNTgwLDEwICs1ODEsMjAg
QEAgdm9pZCBXZWJWaWV3OjpjbGVhckFsbEVkaXRDb21tYW5kcygpCiB7CiB9CiAKLXZvaWQgV2Vi
Vmlldzo6c2V0RWRpdENvbW1hbmRTdGF0ZShjb25zdCBXVEY6OlN0cmluZyYsIGJvb2wsIGludCkK
K3ZvaWQgV2ViVmlldzo6c2V0RWRpdENvbW1hbmRTdGF0ZShjb25zdCBTdHJpbmcmLCBib29sLCBp
bnQpCiB7CiB9CiAKK0Zsb2F0UmVjdCBXZWJWaWV3Ojp0cmFuc2Zvcm1SZWN0VG9EZXZpY2VTcGFj
ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgcmV0dXJuIHJlY3Q7Cit9CisKK0Zsb2F0
UmVjdCBXZWJWaWV3Ojp0cmFuc2Zvcm1SZWN0VG9Vc2VyU3BhY2UoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQoreworICAgIHJldHVybiByZWN0OworfQorCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQogdm9pZCBXZWJWaWV3OjpwYWdlRGlkRW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5n
KCkKIHsKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuaAkocmV2aXNpb24gNjk0MTgpCisrKyBX
ZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC05OCw2ICs5
OCw4IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyRWRpdENvbW1hbmQoUGFz
c1JlZlB0cjxXZWJFZGl0Q29tbWFuZFByb3h5PiwgV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvKTsK
ICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJBbGxFZGl0Q29tbWFuZHMoKTsKICAgICB2aXJ0dWFsIHZv
aWQgc2V0RWRpdENvbW1hbmRTdGF0ZShjb25zdCBXVEY6OlN0cmluZyYsIGJvb2wsIGludCk7Cisg
ICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgdHJhbnNmb3JtUmVjdFRvRGV2aWNlU3BhY2Uo
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJl
Y3QgdHJhbnNmb3JtUmVjdFRvVXNlclNwYWNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwog
CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIHZpcnR1YWwgdm9pZCBwYWdl
RGlkRW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCk7CkluZGV4OiBXZWJLaXQyL1dlYktpdDIu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYktpdDIu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNjk0MTgpCisrKyBXZWJLaXQyL1dl
YktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzYxLDYg
KzM2MSw3IEBACiAJCUJDQzU3MTVCMTE1QURBRUYwMDFDQ0FGOSAvKiBXZWJTeXN0ZW1JbnRlcmZh
Y2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQzU3
MTU5MTE1QURBRUYwMDFDQ0FGOSAvKiBXZWJTeXN0ZW1JbnRlcmZhY2UuaCAqLzsgfTsKIAkJQkND
NTcxNUMxMTVBREFFRjAwMUNDQUY5IC8qIFdlYlN5c3RlbUludGVyZmFjZS5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQzU3MTVBMTE1QURBRUYwMDFD
Q0FGOSAvKiBXZWJTeXN0ZW1JbnRlcmZhY2UubW0gKi87IH07CiAJCUJDQzU3MTYyMTE1QURCNDIw
MDFDQ0FGOSAvKiBOb3RJbXBsZW1lbnRlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkNDNTcxNjExMTVBREI0MjAwMUNDQUY5IC8qIE5vdEltcGxlbWVu
dGVkLmggKi87IH07CisJCUJDQzhCMzc0MTI1RkI2OTAwMERFNDZBNCAvKiBXS0dlb21ldHJ5Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0M4QjM3MzEy
NUZCNjkwMDBERTQ2QTQgLyogV0tHZW9tZXRyeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFB1YmxpYywgKTsgfTsgfTsKIAkJQkNDOTM4RTExMTgwREU0NDAwODVFNUZFIC8qIFdLQ29u
dGV4dFByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEJDQzkzOEUwMTE4MERFNDQwMDg1RTVGRSAvKiBXS0NvbnRleHRQcml2YXRlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkNDQjc1QzYxMjAz
QTFDRTAwMjIyRDFCIC8qIFdlYkNvbnRleHRNZXNzYWdlS2luZHMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQ0I3NUM1MTIwM0ExQ0UwMDIyMkQxQiAv
KiBXZWJDb250ZXh0TWVzc2FnZUtpbmRzLmggKi87IH07CiAJCUJDRDAwNDJEMTEwQzFFMjcwMDNC
OEE2NyAvKiBDb3JlU2VydmljZXMuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNEMDA0MkMxMTBDMUUyNzAwM0I4QTY3IC8qIENvcmVT
ZXJ2aWNlcy5mcmFtZXdvcmsgKi87IH07CkBAIC04MjMsNiArODI0LDcgQEAKIAkJQkNDNTcxNjEx
MTVBREI0MjAwMUNDQUY5IC8qIE5vdEltcGxlbWVudGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IE5vdEltcGxlbWVudGVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUJDQzgwNDlEMTIyRjBENkIwMDEwMzUyOSAvKiBNdXRhYmxlQXJyYXkuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTXV0YWJsZUFycmF5LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNDODA0OUUxMjJGMEQ2QjAwMTAzNTI5IC8qIE11dGFibGVB
cnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNdXRhYmxlQXJyYXkuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNDOEIzNzMxMjVGQjY5MDAwREU0NkE0IC8q
IFdLR2VvbWV0cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tHZW9tZXRy
eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0M5MzhFMDExODBERTQ0MDA4NUU1
RkUgLyogV0tDb250ZXh0UHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXS0NvbnRleHRQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDQ0I3
NUM1MTIwM0ExQ0UwMDIyMkQxQiAvKiBXZWJDb250ZXh0TWVzc2FnZUtpbmRzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvbnRleHRNZXNzYWdlS2luZHMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNEMDA0MkMxMTBDMUUyNzAwM0I4QTY3IC8qIENvcmVT
ZXJ2aWNlcy5mcmFtZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IENvcmVTZXJ2aWNlcy5mcmFtZXdv
cms7IHBhdGggPSAvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9Db3JlU2VydmljZXMuZnJhbWV3
b3JrOyBzb3VyY2VUcmVlID0gIjxhYnNvbHV0ZT4iOyB9OwpAQCAtMTY4NSw2ICsxNjg3LDcgQEAK
IAkJCQlCQzQwNzVERjEyNEZGMDI3MDA2OEYyMEEgLyogV0tFcnJvci5jcHAgKi8sCiAJCQkJQkM0
MDc1RTAxMjRGRjAyNzAwNjhGMjBBIC8qIFdLRXJyb3IuaCAqLywKIAkJCQlCQzQwNzgzQzEyNTBG
QUREMDA2OEYyMEEgLyogV0tFdmVudC5oICovLAorCQkJCUJDQzhCMzczMTI1RkI2OTAwMERFNDZB
NCAvKiBXS0dlb21ldHJ5LmggKi8sCiAJCQkJQkM0MDc1RTExMjRGRjAyNzAwNjhGMjBBIC8qIFdL
TXV0YWJsZUFycmF5LmNwcCAqLywKIAkJCQlCQzQwNzVFMjEyNEZGMDI3MDA2OEYyMEEgLyogV0tN
dXRhYmxlQXJyYXkuaCAqLywKIAkJCQlCQzQwNzVFMzEyNEZGMDI3MDA2OEYyMEEgLyogV0tNdXRh
YmxlRGljdGlvbmFyeS5jcHAgKi8sCkBAIC0xOTY1LDYgKzE5NjgsNyBAQAogCQkJCUJDQkQzQzNC
MTI1QkZBN0EwMEQyQzI5RiAvKiBTdHJpbmdQYWlyVmVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxQTNERDIwMjEyNUU1QTFGMDA0NTE1RTYgLyogV2ViRmluZENsaWVudC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMUEzREQyMDYxMjVFNUEyRjAwNDUxNUU2IC8qIEFQSUNsaWVudC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJQkNDOEIzNzQxMjVGQjY5MDAwREU0NkE0IC8qIFdLR2VvbWV0cnkuaCBpbiBI
ZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOwogCQl9OwpJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNo
cm9tZUNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAJKHJldmlzaW9uIDY5NDE4KQorKysgV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU5LDEzICs1OSwxOSBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6Y2hyb21lRGVzdHJv
eWVkKCkKIAogdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnNldFdpbmRvd1JlY3QoY29uc3QgRmxvYXRS
ZWN0JiB3aW5kb3dSZWN0KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgV2ViUHJvY2Vz
czo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNl
dFdpbmRvd1JlY3Qod2luZG93UmVjdCksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCiBGbG9hdFJl
Y3QgV2ViQ2hyb21lQ2xpZW50Ojp3aW5kb3dSZWN0KCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICBGbG9hdFJlY3QgbmV3V2luZG93UmVjdDsK
KworICAgIGlmICghV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kU3luYyhN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpXaW5kb3dSZWN0KCksCisgICAgICAgICAgICBNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpXaW5kb3dSZWN0OjpSZXBseShuZXdXaW5kb3dSZWN0KSwKKyAgICAg
ICAgICAgIG1fcGFnZS0+cGFnZUlEKCksIENvcmVJUEM6OkNvbm5lY3Rpb246Ok5vVGltZW91dCkp
CisgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKworICAgIHJldHVybiBuZXdXaW5kb3dSZWN0
OwogfQogCiBGbG9hdFJlY3QgV2ViQ2hyb21lQ2xpZW50OjpwYWdlUmVjdCgpCkluZGV4OiBXZWJL
aXQyL3dpbi9XZWJLaXQyLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL3dpbi9XZWJLaXQy
LnZjcHJvagkocmV2aXNpb24gNjk0MTgpCisrKyBXZWJLaXQyL3dpbi9XZWJLaXQyLnZjcHJvagko
d29ya2luZyBjb3B5KQpAQCAtNjA4LDYgKzYwOCwxMCBAQAogCQkJCQk+DQogCQkJCTwvRmlsZT4N
CiAJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cU2hhcmVkXEFQSVxjXFdLR2VvbWV0
cnkuaCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxTaGFyZWRcQVBJXGNcV0tNdXRhYmxlQXJyYXkuY3BwIg0KIAkJCQkJPg0KIAkJCQk8
L0ZpbGU+DQpJbmRleDogV2ViS2l0Mi93aW4vV2ViS2l0MkdlbmVyYXRlZC5tYWtlCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdDIvd2luL1dlYktpdDJHZW5lcmF0ZWQubWFrZQkocmV2aXNpb24gNjk0MTgp
CisrKyBXZWJLaXQyL3dpbi9XZWJLaXQyR2VuZXJhdGVkLm1ha2UJKHdvcmtpbmcgY29weSkKQEAg
LTE0LDYgKzE0LDcgQEAgYWxsOgogICAgIHhjb3B5IC95IC9kICIuLlxTaGFyZWRcQVBJXGNcV0tE
aWN0aW9uYXJ5LmgiICIkKFdFQktJVE9VVFBVVERJUilcaW5jbHVkZVxXZWJLaXQyIgogICAgIHhj
b3B5IC95IC9kICIuLlxTaGFyZWRcQVBJXGNcV0tFcnJvci5oIiAiJChXRUJLSVRPVVRQVVRESVIp
XGluY2x1ZGVcV2ViS2l0MiIKICAgICB4Y29weSAveSAvZCAiLi5cU2hhcmVkXEFQSVxjXFdLRXZl
bnQuaCIgIiQoV0VCS0lUT1VUUFVURElSKVxpbmNsdWRlXFdlYktpdDIiCisgICAgeGNvcHkgL3kg
L2QgIi4uXFNoYXJlZFxBUElcY1xXS0dlb21ldHJ5LmgiICIkKFdFQktJVE9VVFBVVERJUilcaW5j
bHVkZVxXZWJLaXQyIgogICAgIHhjb3B5IC95IC9kICIuLlxTaGFyZWRcQVBJXGNcV0tNdXRhYmxl
QXJyYXkuaCIgIiQoV0VCS0lUT1VUUFVURElSKVxpbmNsdWRlXFdlYktpdDIiCiAgICAgeGNvcHkg
L3kgL2QgIi4uXFNoYXJlZFxBUElcY1xXS011dGFibGVEaWN0aW9uYXJ5LmgiICIkKFdFQktJVE9V
VFBVVERJUilcaW5jbHVkZVxXZWJLaXQyIgogICAgIHhjb3B5IC95IC9kICIuLlxTaGFyZWRcQVBJ
XGNcV0tOdW1iZXIuaCIgIiQoV0VCS0lUT1VUUFVURElSKVxpbmNsdWRlXFdlYktpdDIiCkluZGV4
OiBXZWJLaXRUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvQ2hhbmdl
TG9nCShyZXZpc2lvbiA2OTQ0MCkKKysrIFdlYktpdFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDEwLTEwLTA4ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
TmVlZCBpbXBsZW1lbnRhdGlvbiBvZiBDaHJvbWVDbGllbnQgd2luZG93UmVjdCByZWxhdGVkIGZ1
bmN0aW9ucy4KKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzg0Njk0NzY+CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzM4NgorCisgICAgICAgICogTWlu
aUJyb3dzZXIvbWFjL0Jyb3dzZXJXaW5kb3dDb250cm9sbGVyLm06CisgICAgICAgIChnZXRXaW5k
b3dSZWN0KToKKyAgICAgICAgKHNldFdpbmRvd1JlY3QpOgorICAgICAgICAoLVtCcm93c2VyV2lu
ZG93Q29udHJvbGxlciBhd2FrZUZyb21OaWJdKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVy
L1BsYXRmb3JtV2ViVmlldy5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpnZXRXaW5kb3dSZWN0KToKKyAgICAgICAgKFdUUjo6
c2V0V2luZG93UmVjdCk6CisgICAgICAgIChXVFI6OmNyZWF0ZU90aGVyUGFnZSk6CisgICAgICAg
IChXVFI6OlRlc3RDb250cm9sbGVyOjppbml0aWFsaXplKToKKyAgICAgICAgKiBXZWJLaXRUZXN0
UnVubmVyL1dlYktpdFRlc3RSdW5uZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBXZWJLaXRUZXN0UnVubmVyL21hYy9QbGF0Zm9ybVdlYlZpZXdNYWMubW06CisgICAgICAg
IChXVFI6OlBsYXRmb3JtV2ViVmlldzo6d2luZG93UmVjdCk6CisgICAgICAgIChXVFI6OlBsYXRm
b3JtV2ViVmlldzo6c2V0V2luZG93UmVjdCk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9x
dC9QbGF0Zm9ybVdlYlZpZXdRdC5jcHA6CisgICAgICAgIChXVFI6OlBsYXRmb3JtV2ViVmlldzo6
d2luZG93UmVjdCk6CisgICAgICAgIChXVFI6OlBsYXRmb3JtV2ViVmlldzo6c2V0V2luZG93UmVj
dCk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci93aW4vUGxhdGZvcm1XZWJWaWV3V2luLmNw
cDoKKyAgICAgICAgKFdUUjo6UGxhdGZvcm1XZWJWaWV3Ojp3aW5kb3dSZWN0KToKKyAgICAgICAg
KFdUUjo6UGxhdGZvcm1XZWJWaWV3OjpzZXRXaW5kb3dSZWN0KToKKwogMjAxMC0xMC0wOCAgQWRh
bSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgKEVyaWMg
aXMgb24gdmFjYXRpb24gaW4gdGhpcyBjaGFuZ2UgaXMgdHJpdmlhbCkuCkluZGV4OiBXZWJLaXRU
b29scy9NaW5pQnJvd3Nlci9tYWMvQnJvd3NlcldpbmRvd0NvbnRyb2xsZXIubQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXRUb29scy9NaW5pQnJvd3Nlci9tYWMvQnJvd3NlcldpbmRvd0NvbnRyb2xsZXIu
bQkocmV2aXNpb24gNjk0MTgpCisrKyBXZWJLaXRUb29scy9NaW5pQnJvd3Nlci9tYWMvQnJvd3Nl
cldpbmRvd0NvbnRyb2xsZXIubQkod29ya2luZyBjb3B5KQpAQCAtNDg0LDYgKzQ4NCwyMiBAQCBz
dGF0aWMgdm9pZCBjb250ZW50c1NpemVDaGFuZ2VkKFdLUGFnZVJlCiAgICAgTE9HKEAiY29udGVu
dHNTaXplQ2hhbmdlZCIpOwogfQogCitzdGF0aWMgV0tSZWN0IGdldFdpbmRvd1JlY3QoV0tQYWdl
UmVmIHBhZ2UsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgQ0dSZWN0IHJlY3QgPSBb
WyhCcm93c2VyV2luZG93Q29udHJvbGxlciAqKWNsaWVudEluZm8gd2luZG93XSBmcmFtZV07Cisg
ICAgV0tSZWN0IHdrUmVjdDsKKyAgICB3a1JlY3Qub3JpZ2luLnggPSByZWN0Lm9yaWdpbi54Owor
ICAgIHdrUmVjdC5vcmlnaW4ueSA9IHJlY3Qub3JpZ2luLnk7CisgICAgd2tSZWN0LnNpemUud2lk
dGggPSByZWN0LnNpemUud2lkdGg7CisgICAgd2tSZWN0LnNpemUuaGVpZ2h0ID0gcmVjdC5zaXpl
LmhlaWdodDsKKyAgICByZXR1cm4gd2tSZWN0OworfQorCitzdGF0aWMgdm9pZCBzZXRXaW5kb3dS
ZWN0KFdLUGFnZVJlZiBwYWdlLCBXS1JlY3QgcmVjdCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykK
K3sKKyAgICBbWyhCcm93c2VyV2luZG93Q29udHJvbGxlciAqKWNsaWVudEluZm8gd2luZG93XSBz
ZXRGcmFtZTpDR1JlY3RNYWtlKHJlY3Qub3JpZ2luLngsIHJlY3Qub3JpZ2luLnksIHJlY3Quc2l6
ZS53aWR0aCwgcmVjdC5zaXplLmhlaWdodCkgZGlzcGxheTpZRVNdOworfQorCiAtICh2b2lkKWF3
YWtlRnJvbU5pYgogewogICAgIF93ZWJWaWV3ID0gW1tXS1ZpZXcgYWxsb2NdIGluaXRXaXRoRnJh
bWU6W2NvbnRhaW5lclZpZXcgZnJhbWVdIHBhZ2VOYW1lc3BhY2VSZWY6X3BhZ2VOYW1lc3BhY2Vd
OwpAQCAtNTM4LDcgKzU1NCw5IEBAIC0gKHZvaWQpYXdha2VGcm9tTmliCiAgICAgICAgIHNldFN0
YXR1c1RleHQsCiAgICAgICAgIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50LAogICAgICAgICBjb250
ZW50c1NpemVDaGFuZ2VkLAotICAgICAgICAwICAgICAgICAgICAvKiBkaWROb3RIYW5kbGVLZXlF
dmVudCAqLworICAgICAgICAwLCAgICAgICAgICAvKiBkaWROb3RIYW5kbGVLZXlFdmVudCAqLwor
ICAgICAgICBnZXRXaW5kb3dSZWN0LAorICAgICAgICBzZXRXaW5kb3dSZWN0CiAgICAgfTsKICAg
ICBXS1BhZ2VTZXRQYWdlVUlDbGllbnQoX3dlYlZpZXcucGFnZVJlZiwgJnVpQ2xpZW50KTsKIH0K
SW5kZXg6IFdlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZpZXcu
aAkocmV2aXNpb24gNjk0MTgpCisrKyBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRm
b3JtV2ViVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw2ICs2MCw5IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHJlc2l6ZVRvKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpOwogICAgIHZv
aWQgZm9jdXMoKTsKIAorICAgIFdLUmVjdCB3aW5kb3dSZWN0KCk7CisgICAgdm9pZCBzZXRXaW5k
b3dSZWN0KFdLUmVjdCk7CisKIHByaXZhdGU6CiAgICAgUGxhdGZvcm1XS1ZpZXcgbV92aWV3Owog
ICAgIFBsYXRmb3JtV2luZG93IG1fd2luZG93OwpJbmRleDogV2ViS2l0VG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDY5NDE4KQorKysgV2Vi
S2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY3LDYgKzY3LDE4IEBAIFRlc3RDb250cm9sbGVyOjp+VGVzdENvbnRyb2xsZXIoKQog
ewogfQogCitzdGF0aWMgV0tSZWN0IGdldFdpbmRvd1JlY3QoV0tQYWdlUmVmIHBhZ2UsIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgUGxhdGZvcm1XZWJWaWV3KiB2aWV3ID0gc3RhdGlj
X2Nhc3Q8UGxhdGZvcm1XZWJWaWV3Kj4oY29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpOwor
ICAgIHJldHVybiB2aWV3LT53aW5kb3dSZWN0KCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldFdpbmRv
d1JlY3QoV0tQYWdlUmVmIHBhZ2UsIFdLUmVjdCByZWN0LCBjb25zdCB2b2lkKiBjbGllbnRJbmZv
KQoreworICAgIFBsYXRmb3JtV2ViVmlldyogdmlldyA9IHN0YXRpY19jYXN0PFBsYXRmb3JtV2Vi
Vmlldyo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKTsKKyAgICB2aWV3LT5zZXRXaW5k
b3dSZWN0KHJlY3QpOworfQorCiBzdGF0aWMgdm9pZCBjbG9zZU90aGVyUGFnZShXS1BhZ2VSZWYg
cGFnZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKIHsKICAgICBXS1BhZ2VDbG9zZShwYWdlKTsK
QEAgLTkzLDcgKzEwNSw5IEBAIHN0YXRpYyBXS1BhZ2VSZWYgY3JlYXRlT3RoZXJQYWdlKFdLUGFn
ZVIKICAgICAgICAgMCwKICAgICAgICAgMCwKICAgICAgICAgMCwKLSAgICAgICAgMAorICAgICAg
ICAwLAorICAgICAgICBnZXRXaW5kb3dSZWN0LAorICAgICAgICBzZXRXaW5kb3dSZWN0CiAgICAg
fTsKICAgICBXS1BhZ2VTZXRQYWdlVUlDbGllbnQobmV3UGFnZSwgJm90aGVyUGFnZVVJQ2xpZW50
KTsKIApAQCAtMTc0LDcgKzE4OCw5IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmluaXRpYWxpemUo
aW50IGFyZ2MKICAgICAgICAgMCwKICAgICAgICAgMCwKICAgICAgICAgMCwKLSAgICAgICAgMAor
ICAgICAgICAwLAorICAgICAgICBnZXRXaW5kb3dSZWN0LAorICAgICAgICBzZXRXaW5kb3dSZWN0
CiAgICAgfTsKICAgICBXS1BhZ2VTZXRQYWdlVUlDbGllbnQobV9tYWluV2ViVmlldy0+cGFnZSgp
LCAmcGFnZVVJQ2xpZW50KTsKIApJbmRleDogV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9X
ZWJLaXRUZXN0UnVubmVyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9XZWJLaXRUZXN0UnVubmVyLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDY5NDE4KQorKysgV2ViS2l0VG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9XZWJLaXRUZXN0UnVubmVyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTM2OCw3ICszNjgsMTQgQEAKIAkJCWlzYSA9IFBCWFByb2plY3Q7CiAJCQli
dWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMURFQjkyNzgwODczM0RENDAwMTBFOUNEIC8qIEJ1aWxk
IGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAiV2ViS2l0VGVzdFJ1bm5lciIgKi87
CiAJCQljb21wYXRpYmlsaXR5VmVyc2lvbiA9ICJYY29kZSAzLjEiOworCQkJZGV2ZWxvcG1lbnRS
ZWdpb24gPSBFbmdsaXNoOwogCQkJaGFzU2Nhbm5lZEZvckVuY29kaW5ncyA9IDE7CisJCQlrbm93
blJlZ2lvbnMgPSAoCisJCQkJRW5nbGlzaCwKKwkJCQlKYXBhbmVzZSwKKwkJCQlGcmVuY2gsCisJ
CQkJR2VybWFuLAorCQkJKTsKIAkJCW1haW5Hcm91cCA9IDA4RkI3Nzk0RkU4NDE1NURDMDJBQUMw
NyAvKiBXZWJLaXRUZXN0UnVubmVyICovOwogCQkJcHJvamVjdERpclBhdGggPSAiIjsKIAkJCXBy
b2plY3RSb290ID0gIiI7CkluZGV4OiBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9Q
bGF0Zm9ybVdlYlZpZXdNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9tYWMvUGxhdGZvcm1XZWJWaWV3TWFjLm1tCShyZXZpc2lvbiA2OTQxOCkKKysrIFdl
YktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1BsYXRmb3JtV2ViVmlld01hYy5tbQkod29y
a2luZyBjb3B5KQpAQCAtNjMsNCArNjMsMjEgQEAgdm9pZCBQbGF0Zm9ybVdlYlZpZXc6OmZvY3Vz
KCkKICAgICAvLyBJbXBsZW1lbnQuCiB9CiAKK1dLUmVjdCBQbGF0Zm9ybVdlYlZpZXc6OndpbmRv
d1JlY3QoKQoreworICAgIENHUmVjdCByZWN0ID0gW21fd2luZG93IGZyYW1lXTsKKworICAgIFdL
UmVjdCB3a1JlY3Q7CisgICAgd2tSZWN0Lm9yaWdpbi54ID0gcmVjdC5vcmlnaW4ueDsKKyAgICB3
a1JlY3Qub3JpZ2luLnkgPSByZWN0Lm9yaWdpbi55OworICAgIHdrUmVjdC5zaXplLndpZHRoID0g
cmVjdC5zaXplLndpZHRoOworICAgIHdrUmVjdC5zaXplLmhlaWdodCA9IHJlY3Quc2l6ZS5oZWln
aHQ7CisgICAgcmV0dXJuIHdrUmVjdDsKK30KKwordm9pZCBQbGF0Zm9ybVdlYlZpZXc6OnNldFdp
bmRvd1JlY3QoV0tSZWN0IHJlY3QpCit7CisgICAgW21fd2luZG93IHNldEZyYW1lOkNHUmVjdE1h
a2UocmVjdC5vcmlnaW4ueCwgcmVjdC5vcmlnaW4ueSwgcmVjdC5zaXplLndpZHRoLCByZWN0LnNp
emUuaGVpZ2h0KSBkaXNwbGF5OllFU107Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdUUgpJbmRleDog
V2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9xdC9QbGF0Zm9ybVdlYlZpZXdRdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9xdC9QbGF0Zm9ybVdlYlZp
ZXdRdC5jcHAJKHJldmlzaW9uIDY5NDE4KQorKysgV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9xdC9QbGF0Zm9ybVdlYlZpZXdRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDQgKzc5LDIx
IEBAIHZvaWQgUGxhdGZvcm1XZWJWaWV3Ojpmb2N1cygpCiAgICAgbV92aWV3LT5zZXRGb2N1cyhR
dDo6T3RoZXJGb2N1c1JlYXNvbik7CiB9CiAKK1dLUmVjdCBQbGF0Zm9ybVdlYlZpZXc6OndpbmRv
d1JlY3QoKQoreworICAgIC8vIEltcGxlbWVudC4KKworICAgIFdLUmVjdCB3a1JlY3Q7CisgICAg
d2tSZWN0Lm9yaWdpbi54ID0gMAorICAgIHdrUmVjdC5vcmlnaW4ueSA9IDA7CisgICAgd2tSZWN0
LnNpemUud2lkdGggPSAwOworICAgIHdrUmVjdC5zaXplLmhlaWdodCA9IDA7CisgICAgcmV0dXJu
IHdrUmVjdDsKK30KKwordm9pZCBQbGF0Zm9ybVdlYlZpZXc6OnNldFdpbmRvd1JlY3QoV0tSZWN0
KQoreworICAgIC8vIEltcGxlbWVudC4KK30KKwogfSAvLyBuYW1lc3BhY2UgV1RSCkluZGV4OiBX
ZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL3dpbi9QbGF0Zm9ybVdlYlZpZXdXaW4uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvd2luL1BsYXRmb3JtV2Vi
Vmlld1dpbi5jcHAJKHJldmlzaW9uIDY5NDE4KQorKysgV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci93aW4vUGxhdGZvcm1XZWJWaWV3V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsx
LDQgQEAKLS8qCit4LyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC03OCw0ICs3OCwyMSBAQCB2b2lkIFBs
YXRmb3JtV2ViVmlldzo6Zm9jdXMoKQogICAgIDo6U2V0Rm9jdXMoOjpXS1ZpZXdHZXRXaW5kb3co
bV92aWV3KSk7CiB9CiAKK1dLUmVjdCBQbGF0Zm9ybVdlYlZpZXc6OndpbmRvd1JlY3QoKQorewor
ICAgIC8vIEltcGxlbWVudC4KKworICAgIFdLUmVjdCB3a1JlY3Q7CisgICAgd2tSZWN0Lm9yaWdp
bi54ID0gMAorICAgIHdrUmVjdC5vcmlnaW4ueSA9IDA7CisgICAgd2tSZWN0LnNpemUud2lkdGgg
PSAwOworICAgIHdrUmVjdC5zaXplLmhlaWdodCA9IDA7CisgICAgcmV0dXJuIHdrUmVjdDsKK30K
Kwordm9pZCBQbGF0Zm9ybVdlYlZpZXc6OnNldFdpbmRvd1JlY3QoV0tSZWN0KQoreworICAgIC8v
IEltcGxlbWVudC4KK30KKwogfSAvLyBuYW1lc3BhY2UgV1RSCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70340</attachid>
            <date>2010-10-08 21:46:58 -0700</date>
            <delta_ts>2010-10-09 13:18:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch3.diff</filename>
            <type>text/plain</type>
            <size>36039</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2OTQ0MCkKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTAzIEBACisyMDEwLTEwLTA4ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmVlZCBp
bXBsZW1lbnRhdGlvbiBvZiBDaHJvbWVDbGllbnQgd2luZG93UmVjdCByZWxhdGVkIGZ1bmN0aW9u
cy4KKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzg0Njk0NzY+CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzM4NgorCisgICAgICAgICogU2hhcmVkL0FQ
SS9jL1dLR2VvbWV0cnkuaDogQWRkZWQuCisgICAgICAgIEFkZHMgV0tQb2ludCwgV0tTaXplIGFu
ZCBXS1JlY3Qgc3RydWN0cy4KKworICAgICAgICAqIFNoYXJlZC9BUEkvYy9XS1NoYXJlZEFQSUNh
c3QuaDoKKyAgICAgICAgKFdlYktpdDo6dG9JbXBsKToKKyAgICAgICAgKFdlYktpdDo6dG9BUEkp
OgorICAgICAgICBBZGQgY29udmVyc2lvbiBmdW5jdGlvbnMgZm9yIFdLUmVjdC4KKworICAgICAg
ICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaDoKKyAgICAgICAgQWRkIGVuY29kaW5n
IGZvciBGbG9hdFBvaW50LCBGbG9hdFNpemUgYW5kIEZsb2F0UmVjdC4KKworICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQy9XS1BhZ2UuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9QYWdl
Q2xpZW50SW1wbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBs
Lm1tOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6dHJhbnNmb3JtUmVjdFRvRGV2
aWNlU3BhY2UpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6dHJhbnNmb3JtUmVj
dFRvVXNlclNwYWNlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW06Cisg
ICAgICAgICgtW1dLVmlldyBfdHJhbnNmb3JtUmVjdFRvRGV2aWNlU3BhY2U6XSk6CisgICAgICAg
ICgtW1dLVmlldyBfdHJhbnNmb3JtUmVjdFRvVXNlclNwYWNlOl0pOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvbWFjL1dLVmlld0ludGVybmFsLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9x
dC9xd2twYWdlLmNwcDoKKyAgICAgICAgKFFXS1BhZ2VQcml2YXRlOjp0cmFuc2Zvcm1SZWN0VG9E
ZXZpY2VTcGFjZSk6CisgICAgICAgIChRV0tQYWdlUHJpdmF0ZTo6dHJhbnNmb3JtUmVjdFRvVXNl
clNwYWNlKToKKyAgICAgICAgKFFXS1BhZ2U6OlFXS1BhZ2UpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvcXQvcXdrcGFnZV9wLmg6CisgICAgICAgICogVUlQcm9jZXNzL1BhZ2VDbGllbnQuaDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZVByb3h5OjpzZXRXaW5kb3dSZWN0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBy
b3h5Ojp3aW5kb3dSZWN0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6Cisg
ICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBV
SVByb2Nlc3MvV2ViVUlDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJVSUNsaWVudDo6
c2V0V2luZG93UmVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVJQ2xpZW50Ojp3aW5kb3dSZWN0
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViVUlDbGllbnQuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3Mvd2luL1dlYlZpZXcuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpzZXRFZGl0Q29t
bWFuZFN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlldzo6dHJhbnNmb3JtUmVjdFRvRGV2
aWNlU3BhY2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojp0cmFuc2Zvcm1SZWN0VG9Vc2Vy
U3BhY2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy93aW4vV2ViVmlldy5oOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViQ2hyb21lQ2xpZW50OjpzZXRXaW5kb3dSZWN0KToKKyAgICAgICAgKFdlYktpdDo6
V2ViQ2hyb21lQ2xpZW50Ojp3aW5kb3dSZWN0KToKKyAgICAgICAgUGlwZSBjYWxscyB0aHJvdWdo
IHRvIHRoZSBVSVByb2Nlc3MsIGFuZCBnaXZlIHBvcnRzIGEgY2hhbmNlIHRvIHRyYW5zZm9ybQor
ICAgICAgICB0aGUgcmVjdCAodmlhIHRoZSBQYWdlQ2xpZW50KSBiZWZvcmUgaXQgaXMgcGFzc2Vk
IG9uLgorCisgICAgICAgICogV2ViS2l0Mi5wcm86CisgICAgICAgICogV2ViS2l0Mi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHdpbi9XZWJLaXQyLnZjcHJvajoKKyAgICAg
ICAgKiB3aW4vV2ViS2l0MkdlbmVyYXRlZC5tYWtlOgorICAgICAgICBBZGQgbmV3IGZpbGVzLgor
CisyMDEwLTEwLTA3ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmVlZCBpbXBsZW1lbnRhdGlvbiBv
ZiBDaHJvbWVDbGllbnQgd2luZG93UmVjdCByZWxhdGVkIGZ1bmN0aW9ucy4KKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzg0Njk0NzY+CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00NzM4NgorCisgICAgICAgICogU2hhcmVkL1dlYkNvcmVBcmd1bWVudENv
ZGVycy5oOgorICAgICAgICBBZGQgRmxvYXRSZWN0L1NpemUvUG9pbnQgY29kZXJzLgorCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5tbToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNs
aWVudEltcGw6OnNldFdpbmRvd1JlY3QpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1w
bDo6d2luZG93UmVjdCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tOgor
ICAgICAgICAoLVtXS1ZpZXcgX3NldFdpbmRvd1JlY3Q6XSk6CisgICAgICAgICgtW1dLVmlldyBf
d2luZG93UmVjdF0pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmlld0ludGVybmFs
Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xd2twYWdlLmNwcDoKKyAgICAgICAgKFFX
S1BhZ2VQcml2YXRlOjpzZXRFZGl0Q29tbWFuZFN0YXRlKToKKyAgICAgICAgKFFXS1BhZ2VQcml2
YXRlOjpzZXRXaW5kb3dSZWN0KToKKyAgICAgICAgKFFXS1BhZ2VQcml2YXRlOjp3aW5kb3dSZWN0
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3F0L3F3a3BhZ2VfcC5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9QYWdlQ2xpZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c2V0V2luZG93UmVjdCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6d2luZG93UmVjdCk6CisgICAgICAgICogVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVz
c2FnZXMuaW46CisgICAgICAgICogVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlldzo6c2V0RWRpdENvbW1hbmRTdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYlZpZXc6OnNldFdpbmRvd1JlY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3Ojp3aW5k
b3dSZWN0KToKKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL1dlYlZpZXcuaDoKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6c2V0V2luZG93UmVjdCk6CisgICAgICAgIChXZWJLaXQ6
OldlYkNocm9tZUNsaWVudDo6d2luZG93UmVjdCk6CisgICAgICAgIFBpcGUgd2luZG93UmVjdCBp
bmZvIGJldHdlZW4gdGhlIHByb2Nlc3MuIFRoaXMgaXMgb25seSBlCisKIDIwMTAtMTAtMDcgIEpl
c3NpZSBCZXJsaW4gIDxqYmVybGluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBT
YW0gV2VpbmlnLgpJbmRleDogV2ViS2l0Mi9XZWJLaXQyLnBybwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQyL1dlYktpdDIucHJvCShyZXZpc2lvbiA2OTQxOCkKKysrIFdlYktpdDIvV2ViS2l0Mi5wcm8J
KHdvcmtpbmcgY29weSkKQEAgLTE2OSw2ICsxNjksNyBAQCBIRUFERVJTICs9IFwKICAgICBQbGF0
Zm9ybS9Xb3JrUXVldWUuaCBcCiAgICAgU2hhcmVkL0FQSS9jL1dLQmFzZS5oIFwKICAgICBTaGFy
ZWQvQVBJL2MvV0tDZXJ0aWZpY2F0ZUluZm8uaCBcCisgICAgU2hhcmVkL0FQSS9jL1dLR2VvbWV0
cnkuaCBcCiAgICAgU2hhcmVkL0FQSS9jL1dLTnVtYmVyLmggXAogICAgIFNoYXJlZC9BUEkvYy9X
S1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIFwKICAgICBTaGFyZWQvQVBJL2MvV0tTaGFyZWRBUElD
YXN0LmggXApJbmRleDogV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgJKHJldmlz
aW9uIDY5NDE4KQorKysgV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDEwIEBAIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50
Q29kZXI8V2ViQ29yZToKIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6
SW50U2l6ZT4gOiBTaW1wbGVBcmd1bWVudENvZGVyPFdlYkNvcmU6OkludFNpemU+IHsgfTsKIHRl
bXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6SW50UmVjdD4gOiBTaW1wbGVB
cmd1bWVudENvZGVyPFdlYkNvcmU6OkludFJlY3Q+IHsgfTsKIAordGVtcGxhdGU8PiBzdHJ1Y3Qg
QXJndW1lbnRDb2RlcjxXZWJDb3JlOjpGbG9hdFBvaW50PiA6IFNpbXBsZUFyZ3VtZW50Q29kZXI8
V2ViQ29yZTo6RmxvYXRQb2ludD4geyB9OwordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2Rl
cjxXZWJDb3JlOjpGbG9hdFNpemU+IDogU2ltcGxlQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpGbG9h
dFNpemU+IHsgfTsKK3RlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6Rmxv
YXRSZWN0PiA6IFNpbXBsZUFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6RmxvYXRSZWN0PiB7IH07CisK
IHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6TWltZUNsYXNzSW5mbz4g
ewogICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0
IFdlYkNvcmU6Ok1pbWVDbGFzc0luZm8mIG1pbWVDbGFzc0luZm8pCiAgICAgewpJbmRleDogV2Vi
S2l0Mi9TaGFyZWQvQVBJL2MvV0tHZW9tZXRyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvU2hh
cmVkL0FQSS9jL1dLR2VvbWV0cnkuaAkocmV2aXNpb24gMCkKKysrIFdlYktpdDIvU2hhcmVkL0FQ
SS9jL1dLR2VvbWV0cnkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgV0tHZW9tZXRyeV9oCisjZGVmaW5lIFdLR2VvbWV0cnlfaAorCisjaW5jbHVk
ZSA8V2ViS2l0Mi9XS0Jhc2UuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsK
KyNlbmRpZgorCitzdHJ1Y3QgV0tQb2ludCB7CisgICAgZG91YmxlIHg7CisgICAgZG91YmxlIHk7
Cit9OwordHlwZWRlZiBzdHJ1Y3QgV0tQb2ludCBXS1BvaW50OworCitzdHJ1Y3QgV0tTaXplIHsK
KyAgICBkb3VibGUgd2lkdGg7CisgICAgZG91YmxlIGhlaWdodDsKK307Cit0eXBlZGVmIHN0cnVj
dCBXS1NpemUgV0tTaXplOworCitzdHJ1Y3QgV0tSZWN0IHsKKyAgICBXS1BvaW50IG9yaWdpbjsK
KyAgCVdLU2l6ZSBzaXplOworfTsKK3R5cGVkZWYgc3RydWN0IFdLUmVjdCBXS1JlY3Q7CisKKyNp
ZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBXS0dlb21ldHJ5X2ggKi8K
SW5kZXg6IFdlYktpdDIvU2hhcmVkL0FQSS9jL1dLU2hhcmVkQVBJQ2FzdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdDIvU2hhcmVkL0FQSS9jL1dLU2hhcmVkQVBJQ2FzdC5oCShyZXZpc2lvbiA2OTQx
OCkKKysrIFdlYktpdDIvU2hhcmVkL0FQSS9jL1dLU2hhcmVkQVBJQ2FzdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCwxMCArMjgsMTIgQEAKIAogI2luY2x1ZGUgIldLQmFzZS5oIgogI2luY2x1ZGUg
IldLRXZlbnQuaCIKKyNpbmNsdWRlICJXS0dlb21ldHJ5LmgiCiAjaW5jbHVkZSAiV2ViRXZlbnQu
aCIKICNpbmNsdWRlICJXZWJOdW1iZXIuaCIKICNpbmNsdWRlICJXZWJTdHJpbmcuaCIKICNpbmNs
dWRlICJXZWJVUkwuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgogI2luY2x1ZGUg
PHd0Zi9UeXBlVHJhaXRzLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtMTQ3LDYgKzE0OSwy
NSBAQCBpbmxpbmUgU3RyaW5nIHRvV1RGU3RyaW5nKFdLVVJMUmVmIHVybFJlCiAgICAgcmV0dXJu
IHRvSW1wbCh1cmxSZWYpLT5zdHJpbmcoKTsKIH0KIAorCisvKiBHZW9tZXRyeSBjb252ZXJzaW9u
cyAqLworCitpbmxpbmUgV2ViQ29yZTo6RmxvYXRSZWN0IHRvSW1wbChjb25zdCBXS1JlY3QmIHdr
UmVjdCkKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6RmxvYXRSZWN0KHN0YXRpY19jYXN0PGZsb2F0
Pih3a1JlY3Qub3JpZ2luLngpLCBzdGF0aWNfY2FzdDxmbG9hdD4od2tSZWN0Lm9yaWdpbi55KSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGZsb2F0Pih3a1JlY3Qu
c2l6ZS53aWR0aCksIHN0YXRpY19jYXN0PGZsb2F0Pih3a1JlY3Quc2l6ZS5oZWlnaHQpKTsKK30K
KworaW5saW5lIFdLUmVjdCB0b0FQSShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHJlY3QpCit7
CisgICAgV0tSZWN0IHdrUmVjdDsKKyAgICB3a1JlY3Qub3JpZ2luLnggPSByZWN0LngoKTsKKyAg
ICB3a1JlY3Qub3JpZ2luLnkgPSByZWN0LnkoKTsKKyAgICB3a1JlY3Quc2l6ZS53aWR0aCA9IHJl
Y3Qud2lkdGgoKTsKKyAgICB3a1JlY3Quc2l6ZS5oZWlnaHQgPSByZWN0LmhlaWdodCgpOworICAg
IHJldHVybiB3a1JlY3Q7Cit9CisKIC8qIEVudW0gY29udmVyc2lvbnMgKi8KIAogaW5saW5lIFdL
VHlwZUlEIHRvQVBJKEFQSU9iamVjdDo6VHlwZSB0eXBlKQpJbmRleDogV2ViS2l0Mi9VSVByb2Nl
c3MvUGFnZUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGll
bnQuaAkocmV2aXNpb24gNjk0MTgpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUzLDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBjbGVhckFsbEVkaXRDb21tYW5kcygpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RWRpdENv
bW1hbmRTdGF0ZShjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCBib29sIGlzRW5hYmxlZCwgaW50
IHN0YXRlKSA9IDA7CiAKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCB0cmFuc2Zvcm1S
ZWN0VG9EZXZpY2VTcGFjZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSA9IDA7CisgICAgdmly
dHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgdHJhbnNmb3JtUmVjdFRvVXNlclNwYWNlKGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYpID0gMDsKKwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKICAgICB2aXJ0dWFsIHZvaWQgcGFnZURpZEVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZygp
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcGFnZURpZExlYXZlQWNjZWxlcmF0ZWRDb21wb3NpdGlu
ZygpID0gMDsKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkocmV2aXNpb24gNjk0
MTgpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00OSw2ICs0OSw3IEBACiAjaW5jbHVkZSAiV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCiAjaW5j
bHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCiAjaW5jbHVkZSAiV2ViVVJMUmVxdWVzdC5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CiAKICNpbmNsdWRlICJXS0NvbnRleHRQcml2YXRl
LmgiCiAjaW5jbHVkZSA8c3RkaW8uaD4KQEAgLTk3Miw2ICs5NzMsMTYgQEAgdm9pZCBXZWJQYWdl
UHJveHk6OmRpZFZhbGlkYXRlTWVudUl0ZW0oYwogICAgIG1fcGFnZUNsaWVudC0+c2V0RWRpdENv
bW1hbmRTdGF0ZShjb21tYW5kTmFtZSwgaXNFbmFibGVkLCBzdGF0ZSk7CiB9CiAKK3ZvaWQgV2Vi
UGFnZVByb3h5OjpzZXRXaW5kb3dSZWN0KGNvbnN0IEZsb2F0UmVjdCYgbmV3V2luZG93UmVjdCkK
K3sKKyAgICBtX3VpQ2xpZW50LnNldFdpbmRvd1JlY3QodGhpcywgbV9wYWdlQ2xpZW50LT50cmFu
c2Zvcm1SZWN0VG9EZXZpY2VTcGFjZShuZXdXaW5kb3dSZWN0KSk7Cit9CisKK3ZvaWQgV2ViUGFn
ZVByb3h5Ojp3aW5kb3dSZWN0KEZsb2F0UmVjdCYgbmV3V2luZG93UmVjdCkKK3sKKyAgICBuZXdX
aW5kb3dSZWN0ID0gbV9wYWdlQ2xpZW50LT50cmFuc2Zvcm1SZWN0VG9Vc2VyU3BhY2UobV91aUNs
aWVudC53aW5kb3dSZWN0KHRoaXMpKTsKK30KKwogdm9pZCBXZWJQYWdlUHJveHk6OmRpZFJlY2Vp
dmVFdmVudCh1aW50MzJfdCBvcGFxdWVUeXBlLCBib29sIGhhbmRsZWQpCiB7CiAgICAgV2ViRXZl
bnQ6OlR5cGUgdHlwZSA9IHN0YXRpY19jYXN0PFdlYkV2ZW50OjpUeXBlPihvcGFxdWVUeXBlKTsK
SW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiA2OTQxOCkKKysrIFdlYktp
dDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Niw4ICs1Niw5
IEBAIG5hbWVzcGFjZSBDb3JlSVBDIHsKIH0KIAogbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIGNs
YXNzIEludFNpemU7CiAgICAgY2xhc3MgQ3Vyc29yOworICAgIGNsYXNzIEZsb2F0UmVjdDsKKyAg
ICBjbGFzcyBJbnRTaXplOwogfQogCiBzdHJ1Y3QgV0tDb250ZXh0U3RhdGlzdGljczsKQEAgLTI3
OCw2ICsyNzksOSBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6
OkN1cnNvciYpOwogICAgIHZvaWQgZGlkVmFsaWRhdGVNZW51SXRlbShjb25zdCBTdHJpbmcmIGNv
bW1hbmROYW1lLCBib29sIGlzRW5hYmxlZCwgaW50MzJfdCBzdGF0ZSk7CiAKKyAgICB2b2lkIHNl
dFdpbmRvd1JlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CisgICAgdm9pZCB3aW5kb3dS
ZWN0KFdlYkNvcmU6OkZsb2F0UmVjdCYpOworCiAgICAgdm9pZCBkaWRSZWNlaXZlRXZlbnQodWlu
dDMyX3Qgb3BhcXVlVHlwZSwgYm9vbCBoYW5kbGVkKTsKIAogICAgIHZvaWQgZGlkUnVuSmF2YVNj
cmlwdEluTWFpbkZyYW1lKGNvbnN0IFN0cmluZyYsIHVpbnQ2NF90KTsKSW5kZXg6IFdlYktpdDIv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQy
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHJldmlzaW9uIDY5NDE4KQorKysg
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkp
CkBAIC0zNiw2ICszNiw4IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAgICAgU2V0U3Rh
dHVzVGV4dChXVEY6OlN0cmluZyBzdGF0dXNUZXh0KQogICAgIFNldFRvb2xUaXAoV1RGOjpTdHJp
bmcgdG9vbFRpcCkKICAgICBUYWtlRm9jdXMoYm9vbCBkaXJlY3Rpb24pCisgICAgU2V0V2luZG93
UmVjdChXZWJDb3JlOjpGbG9hdFJlY3Qgd2luZG93UmVjdCkKKyAgICBXaW5kb3dSZWN0KCkgLT4g
KFdlYkNvcmU6OkZsb2F0UmVjdCB3aW5kb3dSZWN0KQogCiAgICAgIyBQb2xpY3kgbWVzc2FnZXMu
CiAgICAgRGVjaWRlUG9saWN5Rm9yTUlNRVR5cGUodWludDY0X3QgZnJhbWVJRCwgV1RGOjpTdHJp
bmcgTUlNRVR5cGUsIFdURjo6U3RyaW5nIHVybCwgdWludDY0X3QgbGlzdGVuZXJJRCkKSW5kZXg6
IFdlYktpdDIvVUlQcm9jZXNzL1dlYlVJQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQy
L1VJUHJvY2Vzcy9XZWJVSUNsaWVudC5jcHAJKHJldmlzaW9uIDY5NDE4KQorKysgV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViVUlDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBA
CiAjaW5jbHVkZSAiTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIldLQVBJQ2Fz
dC5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRS
ZWN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC0xMzYsNCArMTM3LDIwIEBAIHZv
aWQgV2ViVUlDbGllbnQ6OmRpZE5vdEhhbmRsZUtleUV2ZW50KFcKICAgICBtX3BhZ2VVSUNsaWVu
dC5kaWROb3RIYW5kbGVLZXlFdmVudCh0b0FQSShwYWdlKSwgZXZlbnQubmF0aXZlRXZlbnQoKSwg
bV9wYWdlVUlDbGllbnQuY2xpZW50SW5mbyk7CiB9CiAKK3ZvaWQgV2ViVUlDbGllbnQ6OnNldFdp
bmRvd1JlY3QoV2ViUGFnZVByb3h5KiBwYWdlLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7Cisg
ICAgaWYgKCFtX3BhZ2VVSUNsaWVudC5zZXRXaW5kb3dSZWN0KQorICAgICAgICByZXR1cm47CisK
KyAgICBtX3BhZ2VVSUNsaWVudC5zZXRXaW5kb3dSZWN0KHRvQVBJKHBhZ2UpLCB0b0FQSShyZWN0
KSwgbV9wYWdlVUlDbGllbnQuY2xpZW50SW5mbyk7Cit9CisKK0Zsb2F0UmVjdCBXZWJVSUNsaWVu
dDo6d2luZG93UmVjdChXZWJQYWdlUHJveHkqIHBhZ2UpCit7CisgICAgaWYgKCFtX3BhZ2VVSUNs
aWVudC5nZXRXaW5kb3dSZWN0KQorICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisKKyAgICBy
ZXR1cm4gdG9JbXBsKG1fcGFnZVVJQ2xpZW50LmdldFdpbmRvd1JlY3QodG9BUEkocGFnZSksIG1f
cGFnZVVJQ2xpZW50LmNsaWVudEluZm8pKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cklu
ZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJVSUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dDIvVUlQcm9jZXNzL1dlYlVJQ2xpZW50LmgJKHJldmlzaW9uIDY5NDE4KQorKysgV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViVUlDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgsOSBAQCBw
dWJsaWM6CiAgICAgdm9pZCBjb250ZW50c1NpemVDaGFuZ2VkKFdlYlBhZ2VQcm94eSosIGNvbnN0
IFdlYkNvcmU6OkludFNpemUmLCBXZWJGcmFtZVByb3h5Kik7CiAgICAgdm9pZCBkaWROb3RIYW5k
bGVLZXlFdmVudChXZWJQYWdlUHJveHkqLCBjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50Jik7
CiAKKyAgICB2b2lkIHNldFdpbmRvd1JlY3QoV2ViUGFnZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0Jik7CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IHdpbmRvd1JlY3QoV2ViUGFnZVBy
b3h5Kik7CisKIHByaXZhdGU6CiAgICAgV0tQYWdlVUlDbGllbnQgbV9wYWdlVUlDbGllbnQ7CiB9
OwpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmgJKHJldmlzaW9uIDY5NDE4KQorKysgV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4
LDcgQEAKIAogI2luY2x1ZGUgPFdlYktpdDIvV0tCYXNlLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9X
S0V2ZW50Lmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9XS0dlb21ldHJ5Lmg+CiAjaW5jbHVkZSA8V2Vi
S2l0Mi9XS05hdGl2ZUV2ZW50Lmg+CiAKICNpZm5kZWYgX19jcGx1c3BsdXMKQEAgLTEzOCw2ICsx
MzksOCBAQCB0eXBlZGVmIHZvaWQgKCpXS1BhZ2VTZXRTdGF0dXNUZXh0Q2FsbGJhCiB0eXBlZGVm
IHZvaWQgKCpXS1BhZ2VNb3VzZURpZE1vdmVPdmVyRWxlbWVudENhbGxiYWNrKShXS1BhZ2VSZWYg
cGFnZSwgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMsIFdLVHlwZVJlZiB1c2VyRGF0YSwgY29u
c3Qgdm9pZCAqY2xpZW50SW5mbyk7CiB0eXBlZGVmIHZvaWQgKCpXS1BhZ2VDb250ZW50c1NpemVD
aGFuZ2VkQ2FsbGJhY2spKFdLUGFnZVJlZiBwYWdlLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIFdL
RnJhbWVSZWYgZnJhbWUsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pOwogdHlwZWRlZiB2b2lkICgq
V0tQYWdlRGlkTm90SGFuZGxlS2V5RXZlbnRDYWxsYmFjaykoV0tQYWdlUmVmIHBhZ2UsIFdLTmF0
aXZlRXZlbnRQdHIgZXZlbnQsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pOwordHlwZWRlZiBXS1Jl
Y3QgKCpXS1BhZ2VHZXRXaW5kb3dSZWN0Q2FsbGJhY2spKFdLUGFnZVJlZiBwYWdlLCBjb25zdCB2
b2lkICpjbGllbnRJbmZvKTsKK3R5cGVkZWYgdm9pZCAoKldLUGFnZVNldFdpbmRvd1JlY3RDYWxs
YmFjaykoV0tQYWdlUmVmIHBhZ2UsIFdLUmVjdCByZWN0LCBjb25zdCB2b2lkICpjbGllbnRJbmZv
KTsKIAogc3RydWN0IFdLUGFnZVVJQ2xpZW50IHsKICAgICBpbnQgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb247CkBA
IC0xNTIsNiArMTU1LDggQEAgc3RydWN0IFdLUGFnZVVJQ2xpZW50IHsKICAgICBXS1BhZ2VNb3Vz
ZURpZE1vdmVPdmVyRWxlbWVudENhbGxiYWNrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50OwogICAgIFdLUGFnZUNvbnRlbnRzU2l6ZUNoYW5nZWRD
YWxsYmFjayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudHNTaXplQ2hh
bmdlZDsKICAgICBXS1BhZ2VEaWROb3RIYW5kbGVLZXlFdmVudENhbGxiYWNrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRpZE5vdEhhbmRsZUtleUV2ZW50OworICAgIFdLUGFnZUdl
dFdpbmRvd1JlY3RDYWxsYmFjayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2V0V2luZG93UmVjdDsKKyAgICBXS1BhZ2VTZXRXaW5kb3dSZWN0Q2FsbGJhY2sgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFdpbmRvd1JlY3Q7CiB9OwogdHlw
ZWRlZiBzdHJ1Y3QgV0tQYWdlVUlDbGllbnQgV0tQYWdlVUlDbGllbnQ7CiAKSW5kZXg6IFdlYktp
dDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLmgJKHJldmlzaW9uIDY5NDE4KQor
KysgV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC01Niw2ICs1Niw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjbGVhckFsbEVkaXRDb21t
YW5kcygpOwogICAgIHZvaWQgc2V0RWRpdENvbW1hbmRTdGF0ZShjb25zdCBTdHJpbmcmIGNvbW1h
bmROYW1lLCBib29sIGlzRW5hYmxlZCwgaW50IHN0YXRlKTsKIAorICAgIFdlYkNvcmU6OkZsb2F0
UmVjdCB0cmFuc2Zvcm1SZWN0VG9EZXZpY2VTcGFjZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3Qm
KTsKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgdHJhbnNmb3JtUmVjdFRvVXNlclNwYWNlKGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYpOworCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQogICAgIHZvaWQgcGFnZURpZEVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpOwogICAgIHZv
aWQgcGFnZURpZExlYXZlQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpOwpJbmRleDogV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLm1tCShyZXZpc2lvbiA2OTQxOCkKKysr
IFdlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbXBvcnQgIldLVmlld0ludGVybmFsLmgiCiAjaW1wb3J0
ICJXZWJFZGl0Q29tbWFuZFByb3h5LmgiCiAjaW1wb3J0IDxXZWJDb3JlL0N1cnNvci5oPgorI2lt
cG9ydCA8V2ViQ29yZS9GbG9hdFJlY3QuaD4KICNpbXBvcnQgPFdlYkNvcmUvRm91bmRhdGlvbkV4
dHJhcy5oPgogI2ltcG9ydCA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbXBvcnQgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgpAQCAtODgsNyArODksNiBAQCAtICh2b2lkKXJlZG9FZGl0aW5nOihpZClzZW5k
ZXIKIAogQGVuZAogCi0KIG5hbWVzcGFjZSBXZWJLaXQgewogCiBOU1N0cmluZyogbnNTdHJpbmdG
cm9tV2ViQ29yZVN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKQEAgLTIwNiw2ICsyMDYsMTYg
QEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0RWRpdENvbW1hbmRTdGF0ZQogICAgIFttX3drVmll
dyBfc2V0VXNlckludGVyZmFjZUl0ZW1TdGF0ZTpuc1N0cmluZ0Zyb21XZWJDb3JlU3RyaW5nKGNv
bW1hbmROYW1lKSBlbmFibGVkOmlzRW5hYmxlZCBzdGF0ZTpuZXdTdGF0ZV07CiB9CiAKK0Zsb2F0
UmVjdCBQYWdlQ2xpZW50SW1wbDo6dHJhbnNmb3JtUmVjdFRvRGV2aWNlU3BhY2UoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQoreworICAgIHJldHVybiBbbV93a1ZpZXcgX3RyYW5zZm9ybVJlY3RUb0Rl
dmljZVNwYWNlOnJlY3RdOworfQorCitGbG9hdFJlY3QgUGFnZUNsaWVudEltcGw6OnRyYW5zZm9y
bVJlY3RUb1VzZXJTcGFjZShjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgcmV0dXJuIFtt
X3drVmlldyBfdHJhbnNmb3JtUmVjdFRvVXNlclNwYWNlOnJlY3RdOworfQorCiAjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogdm9pZCBQYWdlQ2xpZW50SW1wbDo6cGFnZURpZEVudGVy
QWNjZWxlcmF0ZWRDb21wb3NpdGluZygpCiB7CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
bWFjL1dLVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dL
Vmlldy5tbQkocmV2aXNpb24gNjk0MTgpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dL
Vmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsOSBAQAogI2ltcG9ydCAiV2ViUHJv
Y2Vzc01hbmFnZXIuaCIKICNpbXBvcnQgIldlYlByb2Nlc3NQcm94eS5oIgogI2ltcG9ydCA8UXVh
cnR6Q29yZS9RdWFydHpDb3JlLmg+CisjaW1wb3J0IDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgogI2lt
cG9ydCA8V2ViQ29yZS9JbnRSZWN0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtU2NyZWVu
Lmg+CiAjaW1wb3J0IDx3dGYvUmVmUHRyLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAK
QEAgLTUzMiw2ICs1MzQsMTYgQEAgLSAodm9pZClfc2V0VXNlckludGVyZmFjZUl0ZW1TdGF0ZToo
TlNTdAogICAgIF9kYXRhLT5fbWVudUxpc3QuY2xlYXIoKTsKIH0KIAorLSAoQ0dSZWN0KV90cmFu
c2Zvcm1SZWN0VG9EZXZpY2VTcGFjZTooQ0dSZWN0KXJlY3QKK3sKKyAgICByZXR1cm4gdG9EZXZp
Y2VTcGFjZShyZWN0LCBbc2VsZiB3aW5kb3ddKTsKK30KKworLSAoQ0dSZWN0KV90cmFuc2Zvcm1S
ZWN0VG9Vc2VyU3BhY2U6KENHUmVjdClyZWN0Cit7CisgICAgcmV0dXJuIHRvVXNlclNwYWNlKHJl
Y3QsIFtzZWxmIHdpbmRvd10pOworfQorCiAvLyBBbnkgbm9uLXplcm8gdmFsdWUgd2lsbCBkbywg
YnV0IHVzaW5nIHNvbWV0aGluZyByZWNvZ25pemFibGUgbWlnaHQgaGVscCB1cyBkZWJ1ZyBzb21l
IGRheS4KICNkZWZpbmUgVFJBQ0tJTkdfUkVDVF9UQUcgMHhCQURGQUNFCiAKSW5kZXg6IFdlYktp
dDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3SW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlld0ludGVybmFsLmgJKHJldmlzaW9uIDY5NDE4KQor
KysgV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXdJbnRlcm5hbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMyw2ICszMyw5IEBAIEBpbnRlcmZhY2UgV0tWaWV3IChJbnRlcm5hbCkKIC0gKHZv
aWQpX3NldEN1cnNvcjooTlNDdXJzb3IgKiljdXJzb3I7CiAtICh2b2lkKV9zZXRVc2VySW50ZXJm
YWNlSXRlbVN0YXRlOihOU1N0cmluZyAqKWNvbW1hbmROYW1lIGVuYWJsZWQ6KEJPT0wpaXNFbmFi
bGVkIHN0YXRlOihpbnQpbmV3U3RhdGU7CiAKKy0gKENHUmVjdClfdHJhbnNmb3JtUmVjdFRvRGV2
aWNlU3BhY2U6KENHUmVjdClyZWN0OworLSAoQ0dSZWN0KV90cmFuc2Zvcm1SZWN0VG9Vc2VyU3Bh
Y2U6KENHUmVjdClyZWN0OworCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogLSAo
dm9pZClfc3RhcnRBY2NlbGVyYXRlZENvbXBvc2l0aW5nOihDQUxheWVyICopcm9vdExheWVyOwog
LSAodm9pZClfc3RvcEFjY2VsZXJhdGVkQ29tcG9zaXRpbmc7CkluZGV4OiBXZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvcXdrcGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL3F0L3F3a3BhZ2UuY3BwCShyZXZpc2lvbiA2OTQxOCkKKysrIFdlYktpdDIvVUlQcm9jZXNz
L0FQSS9xdC9xd2twYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2lu
Y2x1ZGUgPFFTdHlsZT4KICNpbmNsdWRlIDxRVG91Y2hFdmVudD4KICNpbmNsdWRlIDxRdERlYnVn
PgorI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XS0Zy
YW1lLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XS1JldGFpblB0ci5oPgogCkBAIC05MSw2ICs5Miwx
NiBAQCB2b2lkIFFXS1BhZ2VQcml2YXRlOjpjbGVhckFsbEVkaXRDb21tYW5kCiB7CiB9CiAKK0Zs
b2F0UmVjdCBRV0tQYWdlUHJpdmF0ZTo6dHJhbnNmb3JtUmVjdFRvRGV2aWNlU3BhY2UoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQoreworICAgIHJldHVybiByZWN0OworfQorCitGbG9hdFJlY3QgUVdL
UGFnZVByaXZhdGU6OnRyYW5zZm9ybVJlY3RUb1VzZXJTcGFjZShjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCit7CisgICAgcmV0dXJuIHJlY3Q7Cit9CisKIHZvaWQgUVdLUGFnZVByaXZhdGU6OnBhaW50
KFFQYWludGVyKiBwYWludGVyLCBRUmVjdCBhcmVhKQogewogICAgIHBhaW50ZXItPnNhdmUoKTsK
QEAgLTI3MSw3ICsyODIsOSBAQCBRV0tQYWdlOjpRV0tQYWdlKFdLUGFnZU5hbWVzcGFjZVJlZiBu
YW1lCiAgICAgICAgIDAsICAvKiBzZXRTdGF0dXNUZXh0ICovCiAgICAgICAgIDAsICAvKiBtb3Vz
ZURpZE1vdmVPdmVyRWxlbWVudCAqLwogICAgICAgICAwLCAgLyogY29udGVudHNTaXplQ2hhbmdl
ZCAqLwotICAgICAgICAwICAgLyogZGlkTm90SGFuZGxlS2V5RXZlbnQgKi8KKyAgICAgICAgMCwg
IC8qIGRpZE5vdEhhbmRsZUtleUV2ZW50ICovCisgICAgICAgIDAsICAvKiBnZXRXaW5kb3dSZWN0
ICovCisgICAgICAgIDAgICAvKiBzZXRXaW5kb3dSZWN0ICovCiAgICAgfTsKICAgICBXS1BhZ2VT
ZXRQYWdlVUlDbGllbnQocGFnZVJlZigpLCAmdWlDbGllbnQpOwogfQpJbmRleDogV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL3F0L3F3a3BhZ2VfcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9j
ZXNzL0FQSS9xdC9xd2twYWdlX3AuaAkocmV2aXNpb24gNjk0MTgpCisrKyBXZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvcXQvcXdrcGFnZV9wLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDggQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB0b29sVGlwQ2hhbmdlZChjb25zdCBXVEY6OlN0cmlu
ZyYsIGNvbnN0IFdURjo6U3RyaW5nJik7CiAgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyRWRpdENv
bW1hbmQoUGFzc1JlZlB0cjxXZWJLaXQ6OldlYkVkaXRDb21tYW5kUHJveHk+LCBXZWJLaXQ6Oldl
YlBhZ2VQcm94eTo6VW5kb09yUmVkbyk7CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyQWxsRWRpdENv
bW1hbmRzKCk7CisgICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgdHJhbnNmb3JtUmVjdFRv
RGV2aWNlU3BhY2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCBXZWJD
b3JlOjpGbG9hdFJlY3QgdHJhbnNmb3JtUmVjdFRvVXNlclNwYWNlKGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYpOwogCiAgICAgdm9pZCBwYWludChRUGFpbnRlciogcGFpbnRlciwgUVJlY3QpOwog
CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwCShyZXZpc2lvbiA2OTQxOCkKKysrIFdl
YktpdDIvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiAr
MzMsNyBAQAogI2luY2x1ZGUgIldlYlBhZ2VOYW1lc3BhY2UuaCIKICNpbmNsdWRlICJXZWJQYWdl
UHJveHkuaCIKICNpbmNsdWRlIDxDb21tY3RybC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRS
ZWN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9X
ZWJDb3JlSW5zdGFuY2VIYW5kbGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1dpbmRvd01lc3NhZ2VC
cm9hZGNhc3Rlci5oPgpAQCAtNTgwLDEwICs1ODEsMjAgQEAgdm9pZCBXZWJWaWV3OjpjbGVhckFs
bEVkaXRDb21tYW5kcygpCiB7CiB9CiAKLXZvaWQgV2ViVmlldzo6c2V0RWRpdENvbW1hbmRTdGF0
ZShjb25zdCBXVEY6OlN0cmluZyYsIGJvb2wsIGludCkKK3ZvaWQgV2ViVmlldzo6c2V0RWRpdENv
bW1hbmRTdGF0ZShjb25zdCBTdHJpbmcmLCBib29sLCBpbnQpCiB7CiB9CiAKK0Zsb2F0UmVjdCBX
ZWJWaWV3Ojp0cmFuc2Zvcm1SZWN0VG9EZXZpY2VTcGFjZShjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
Cit7CisgICAgcmV0dXJuIHJlY3Q7Cit9CisKK0Zsb2F0UmVjdCBXZWJWaWV3Ojp0cmFuc2Zvcm1S
ZWN0VG9Vc2VyU3BhY2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIHJldHVybiByZWN0
OworfQorCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogdm9pZCBXZWJWaWV3Ojpw
YWdlRGlkRW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkKIHsKSW5kZXg6IFdlYktpdDIvVUlQ
cm9jZXNzL3dpbi9XZWJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3Mvd2lu
L1dlYlZpZXcuaAkocmV2aXNpb24gNjk0MTgpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2Vi
Vmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC05OCw2ICs5OCw4IEBAIHByaXZhdGU6CiAgICAgdmly
dHVhbCB2b2lkIHJlZ2lzdGVyRWRpdENvbW1hbmQoUGFzc1JlZlB0cjxXZWJFZGl0Q29tbWFuZFBy
b3h5PiwgV2ViUGFnZVByb3h5OjpVbmRvT3JSZWRvKTsKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJB
bGxFZGl0Q29tbWFuZHMoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RWRpdENvbW1hbmRTdGF0ZShj
b25zdCBXVEY6OlN0cmluZyYsIGJvb2wsIGludCk7CisgICAgdmlydHVhbCBXZWJDb3JlOjpGbG9h
dFJlY3QgdHJhbnNmb3JtUmVjdFRvRGV2aWNlU3BhY2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0
Jik7CisgICAgdmlydHVhbCBXZWJDb3JlOjpGbG9hdFJlY3QgdHJhbnNmb3JtUmVjdFRvVXNlclNw
YWNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQogICAgIHZpcnR1YWwgdm9pZCBwYWdlRGlkRW50ZXJBY2NlbGVyYXRlZENvbXBv
c2l0aW5nKCk7CkluZGV4OiBXZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gNjk0MTgpCisrKyBXZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzYxLDYgKzM2MSw3IEBACiAJCUJDQzU3MTVCMTE1
QURBRUYwMDFDQ0FGOSAvKiBXZWJTeXN0ZW1JbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQzU3MTU5MTE1QURBRUYwMDFDQ0FGOSAvKiBX
ZWJTeXN0ZW1JbnRlcmZhY2UuaCAqLzsgfTsKIAkJQkNDNTcxNUMxMTVBREFFRjAwMUNDQUY5IC8q
IFdlYlN5c3RlbUludGVyZmFjZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDQzU3MTVBMTE1QURBRUYwMDFDQ0FGOSAvKiBXZWJTeXN0ZW1JbnRlcmZh
Y2UubW0gKi87IH07CiAJCUJDQzU3MTYyMTE1QURCNDIwMDFDQ0FGOSAvKiBOb3RJbXBsZW1lbnRl
ZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNDNTcx
NjExMTVBREI0MjAwMUNDQUY5IC8qIE5vdEltcGxlbWVudGVkLmggKi87IH07CisJCUJDQzhCMzc0
MTI1RkI2OTAwMERFNDZBNCAvKiBXS0dlb21ldHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0M4QjM3MzEyNUZCNjkwMDBERTQ2QTQgLyogV0tHZW9t
ZXRyeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKIAkJ
QkNDOTM4RTExMTgwREU0NDAwODVFNUZFIC8qIFdLQ29udGV4dFByaXZhdGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQzkzOEUwMTE4MERFNDQwMDg1
RTVGRSAvKiBXS0NvbnRleHRQcml2YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkNDQjc1QzYxMjAzQTFDRTAwMjIyRDFCIC8qIFdlYkNvbnRl
eHRNZXNzYWdlS2luZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEJDQ0I3NUM1MTIwM0ExQ0UwMDIyMkQxQiAvKiBXZWJDb250ZXh0TWVzc2FnZUtpbmRz
LmggKi87IH07CiAJCUJDRDAwNDJEMTEwQzFFMjcwMDNCOEE2NyAvKiBDb3JlU2VydmljZXMuZnJh
bWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QkNEMDA0MkMxMTBDMUUyNzAwM0I4QTY3IC8qIENvcmVTZXJ2aWNlcy5mcmFtZXdvcmsgKi87IH07
CkBAIC04MjMsNiArODI0LDcgQEAKIAkJQkNDNTcxNjExMTVBREI0MjAwMUNDQUY5IC8qIE5vdElt
cGxlbWVudGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5vdEltcGxlbWVu
dGVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDQzgwNDlEMTIyRjBENkIwMDEw
MzUyOSAvKiBNdXRhYmxlQXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gTXV0YWJsZUFycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkND
ODA0OUUxMjJGMEQ2QjAwMTAzNTI5IC8qIE11dGFibGVBcnJheS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBNdXRhYmxlQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQkNDOEIzNzMxMjVGQjY5MDAwREU0NkE0IC8qIFdLR2VvbWV0cnkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tHZW9tZXRyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCQ0M5MzhFMDExODBERTQ0MDA4NUU1RkUgLyogV0tDb250ZXh0UHJpdmF0ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0NvbnRleHRQcml2YXRlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDQ0I3NUM1MTIwM0ExQ0UwMDIyMkQxQiAvKiBX
ZWJDb250ZXh0TWVzc2FnZUtpbmRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdlYkNvbnRleHRNZXNzYWdlS2luZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QkNEMDA0MkMxMTBDMUUyNzAwM0I4QTY3IC8qIENvcmVTZXJ2aWNlcy5mcmFtZXdvcmsgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1l
d29yazsgbmFtZSA9IENvcmVTZXJ2aWNlcy5mcmFtZXdvcms7IHBhdGggPSAvU3lzdGVtL0xpYnJh
cnkvRnJhbWV3b3Jrcy9Db3JlU2VydmljZXMuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gIjxhYnNv
bHV0ZT4iOyB9OwpAQCAtMTY4NSw2ICsxNjg3LDcgQEAKIAkJCQlCQzQwNzVERjEyNEZGMDI3MDA2
OEYyMEEgLyogV0tFcnJvci5jcHAgKi8sCiAJCQkJQkM0MDc1RTAxMjRGRjAyNzAwNjhGMjBBIC8q
IFdLRXJyb3IuaCAqLywKIAkJCQlCQzQwNzgzQzEyNTBGQUREMDA2OEYyMEEgLyogV0tFdmVudC5o
ICovLAorCQkJCUJDQzhCMzczMTI1RkI2OTAwMERFNDZBNCAvKiBXS0dlb21ldHJ5LmggKi8sCiAJ
CQkJQkM0MDc1RTExMjRGRjAyNzAwNjhGMjBBIC8qIFdLTXV0YWJsZUFycmF5LmNwcCAqLywKIAkJ
CQlCQzQwNzVFMjEyNEZGMDI3MDA2OEYyMEEgLyogV0tNdXRhYmxlQXJyYXkuaCAqLywKIAkJCQlC
QzQwNzVFMzEyNEZGMDI3MDA2OEYyMEEgLyogV0tNdXRhYmxlRGljdGlvbmFyeS5jcHAgKi8sCkBA
IC0xOTY1LDYgKzE5NjgsNyBAQAogCQkJCUJDQkQzQzNCMTI1QkZBN0EwMEQyQzI5RiAvKiBTdHJp
bmdQYWlyVmVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTNERDIwMjEyNUU1QTFGMDA0NTE1
RTYgLyogV2ViRmluZENsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUEzREQyMDYxMjVFNUEy
RjAwNDUxNUU2IC8qIEFQSUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNDOEIzNzQxMjVG
QjY5MDAwREU0NkE0IC8qIFdLR2VvbWV0cnkuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1
bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5j
cHAJKHJldmlzaW9uIDY5NDE4KQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDEzICs1OSwxOSBAQCB2
b2lkIFdlYkNocm9tZUNsaWVudDo6Y2hyb21lRGVzdHJveWVkKCkKIAogdm9pZCBXZWJDaHJvbWVD
bGllbnQ6OnNldFdpbmRvd1JlY3QoY29uc3QgRmxvYXRSZWN0JiB3aW5kb3dSZWN0KQogewotICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigp
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNldFdpbmRvd1JlY3Qod2luZG93UmVjdCks
IG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCiBGbG9hdFJlY3QgV2ViQ2hyb21lQ2xpZW50Ojp3aW5k
b3dSZWN0KCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBGbG9hdFJlY3Qo
KTsKKyAgICBGbG9hdFJlY3QgbmV3V2luZG93UmVjdDsKKworICAgIGlmICghV2ViUHJvY2Vzczo6
c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpX
aW5kb3dSZWN0KCksCisgICAgICAgICAgICBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpXaW5kb3dS
ZWN0OjpSZXBseShuZXdXaW5kb3dSZWN0KSwKKyAgICAgICAgICAgIG1fcGFnZS0+cGFnZUlEKCks
IENvcmVJUEM6OkNvbm5lY3Rpb246Ok5vVGltZW91dCkpCisgICAgICAgIHJldHVybiBGbG9hdFJl
Y3QoKTsKKworICAgIHJldHVybiBuZXdXaW5kb3dSZWN0OwogfQogCiBGbG9hdFJlY3QgV2ViQ2hy
b21lQ2xpZW50OjpwYWdlUmVjdCgpCkluZGV4OiBXZWJLaXQyL3dpbi9XZWJLaXQyLnZjcHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQyL3dpbi9XZWJLaXQyLnZjcHJvagkocmV2aXNpb24gNjk0MTgp
CisrKyBXZWJLaXQyL3dpbi9XZWJLaXQyLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtNjA4LDYg
KzYwOCwxMCBAQAogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJCQkJPEZpbGUNCisJCQkJCVJlbGF0
aXZlUGF0aD0iLi5cU2hhcmVkXEFQSVxjXFdLR2VvbWV0cnkuaCINCisJCQkJCT4NCisJCQkJPC9G
aWxlPg0KKwkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxTaGFyZWRcQVBJXGNcV0tN
dXRhYmxlQXJyYXkuY3BwIg0KIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQpJbmRleDogV2ViS2l0Mi93
aW4vV2ViS2l0MkdlbmVyYXRlZC5tYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvd2luL1dlYktp
dDJHZW5lcmF0ZWQubWFrZQkocmV2aXNpb24gNjk0MTgpCisrKyBXZWJLaXQyL3dpbi9XZWJLaXQy
R2VuZXJhdGVkLm1ha2UJKHdvcmtpbmcgY29weSkKQEAgLTE0LDYgKzE0LDcgQEAgYWxsOgogICAg
IHhjb3B5IC95IC9kICIuLlxTaGFyZWRcQVBJXGNcV0tEaWN0aW9uYXJ5LmgiICIkKFdFQktJVE9V
VFBVVERJUilcaW5jbHVkZVxXZWJLaXQyIgogICAgIHhjb3B5IC95IC9kICIuLlxTaGFyZWRcQVBJ
XGNcV0tFcnJvci5oIiAiJChXRUJLSVRPVVRQVVRESVIpXGluY2x1ZGVcV2ViS2l0MiIKICAgICB4
Y29weSAveSAvZCAiLi5cU2hhcmVkXEFQSVxjXFdLRXZlbnQuaCIgIiQoV0VCS0lUT1VUUFVURElS
KVxpbmNsdWRlXFdlYktpdDIiCisgICAgeGNvcHkgL3kgL2QgIi4uXFNoYXJlZFxBUElcY1xXS0dl
b21ldHJ5LmgiICIkKFdFQktJVE9VVFBVVERJUilcaW5jbHVkZVxXZWJLaXQyIgogICAgIHhjb3B5
IC95IC9kICIuLlxTaGFyZWRcQVBJXGNcV0tNdXRhYmxlQXJyYXkuaCIgIiQoV0VCS0lUT1VUUFVU
RElSKVxpbmNsdWRlXFdlYktpdDIiCiAgICAgeGNvcHkgL3kgL2QgIi4uXFNoYXJlZFxBUElcY1xX
S011dGFibGVEaWN0aW9uYXJ5LmgiICIkKFdFQktJVE9VVFBVVERJUilcaW5jbHVkZVxXZWJLaXQy
IgogICAgIHhjb3B5IC95IC9kICIuLlxTaGFyZWRcQVBJXGNcV0tOdW1iZXIuaCIgIiQoV0VCS0lU
T1VUUFVURElSKVxpbmNsdWRlXFdlYktpdDIiCkluZGV4OiBXZWJLaXRUb29scy9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2OTQ0MCkKKysr
IFdlYktpdFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisy
MDEwLTEwLTA4ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmVlZCBpbXBsZW1lbnRhdGlvbiBvZiBD
aHJvbWVDbGllbnQgd2luZG93UmVjdCByZWxhdGVkIGZ1bmN0aW9ucy4KKyAgICAgICAgPHJkYXI6
Ly9wcm9ibGVtLzg0Njk0NzY+CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD00NzM4NgorCisgICAgICAgICogTWluaUJyb3dzZXIvbWFjL0Jyb3dzZXJXaW5k
b3dDb250cm9sbGVyLm06CisgICAgICAgIChnZXRXaW5kb3dSZWN0KToKKyAgICAgICAgKHNldFdp
bmRvd1JlY3QpOgorICAgICAgICAoLVtCcm93c2VyV2luZG93Q29udHJvbGxlciBhd2FrZUZyb21O
aWJdKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oOgorICAg
ICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV1RS
OjpnZXRXaW5kb3dSZWN0KToKKyAgICAgICAgKFdUUjo6c2V0V2luZG93UmVjdCk6CisgICAgICAg
IChXVFI6OmNyZWF0ZU90aGVyUGFnZSk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpp
bml0aWFsaXplKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXIu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL21h
Yy9QbGF0Zm9ybVdlYlZpZXdNYWMubW06CisgICAgICAgIChXVFI6OlBsYXRmb3JtV2ViVmlldzo6
d2luZG93UmVjdCk6CisgICAgICAgIChXVFI6OlBsYXRmb3JtV2ViVmlldzo6c2V0V2luZG93UmVj
dCk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9xdC9QbGF0Zm9ybVdlYlZpZXdRdC5jcHA6
CisgICAgICAgIChXVFI6OlBsYXRmb3JtV2ViVmlldzo6d2luZG93UmVjdCk6CisgICAgICAgIChX
VFI6OlBsYXRmb3JtV2ViVmlldzo6c2V0V2luZG93UmVjdCk6CisgICAgICAgICogV2ViS2l0VGVz
dFJ1bm5lci93aW4vUGxhdGZvcm1XZWJWaWV3V2luLmNwcDoKKyAgICAgICAgKFdUUjo6UGxhdGZv
cm1XZWJWaWV3Ojp3aW5kb3dSZWN0KToKKyAgICAgICAgKFdUUjo6UGxhdGZvcm1XZWJWaWV3Ojpz
ZXRXaW5kb3dSZWN0KToKKwogMjAxMC0xMC0wOCAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgKEVyaWMgaXMgb24gdmFjYXRpb24gaW4gdGhpcyBj
aGFuZ2UgaXMgdHJpdmlhbCkuCkluZGV4OiBXZWJLaXRUb29scy9NaW5pQnJvd3Nlci9tYWMvQnJv
d3NlcldpbmRvd0NvbnRyb2xsZXIubQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9NaW5pQnJv
d3Nlci9tYWMvQnJvd3NlcldpbmRvd0NvbnRyb2xsZXIubQkocmV2aXNpb24gNjk0MTgpCisrKyBX
ZWJLaXRUb29scy9NaW5pQnJvd3Nlci9tYWMvQnJvd3NlcldpbmRvd0NvbnRyb2xsZXIubQkod29y
a2luZyBjb3B5KQpAQCAtNDg0LDYgKzQ4NCwyMiBAQCBzdGF0aWMgdm9pZCBjb250ZW50c1NpemVD
aGFuZ2VkKFdLUGFnZVJlCiAgICAgTE9HKEAiY29udGVudHNTaXplQ2hhbmdlZCIpOwogfQogCitz
dGF0aWMgV0tSZWN0IGdldFdpbmRvd1JlY3QoV0tQYWdlUmVmIHBhZ2UsIGNvbnN0IHZvaWQqIGNs
aWVudEluZm8pCit7CisgICAgQ0dSZWN0IHJlY3QgPSBbWyhCcm93c2VyV2luZG93Q29udHJvbGxl
ciAqKWNsaWVudEluZm8gd2luZG93XSBmcmFtZV07CisgICAgV0tSZWN0IHdrUmVjdDsKKyAgICB3
a1JlY3Qub3JpZ2luLnggPSByZWN0Lm9yaWdpbi54OworICAgIHdrUmVjdC5vcmlnaW4ueSA9IHJl
Y3Qub3JpZ2luLnk7CisgICAgd2tSZWN0LnNpemUud2lkdGggPSByZWN0LnNpemUud2lkdGg7Cisg
ICAgd2tSZWN0LnNpemUuaGVpZ2h0ID0gcmVjdC5zaXplLmhlaWdodDsKKyAgICByZXR1cm4gd2tS
ZWN0OworfQorCitzdGF0aWMgdm9pZCBzZXRXaW5kb3dSZWN0KFdLUGFnZVJlZiBwYWdlLCBXS1Jl
Y3QgcmVjdCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBbWyhCcm93c2VyV2luZG93
Q29udHJvbGxlciAqKWNsaWVudEluZm8gd2luZG93XSBzZXRGcmFtZTpDR1JlY3RNYWtlKHJlY3Qu
b3JpZ2luLngsIHJlY3Qub3JpZ2luLnksIHJlY3Quc2l6ZS53aWR0aCwgcmVjdC5zaXplLmhlaWdo
dCkgZGlzcGxheTpZRVNdOworfQorCiAtICh2b2lkKWF3YWtlRnJvbU5pYgogewogICAgIF93ZWJW
aWV3ID0gW1tXS1ZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6W2NvbnRhaW5lclZpZXcgZnJhbWVd
IHBhZ2VOYW1lc3BhY2VSZWY6X3BhZ2VOYW1lc3BhY2VdOwpAQCAtNTM4LDcgKzU1NCw5IEBAIC0g
KHZvaWQpYXdha2VGcm9tTmliCiAgICAgICAgIHNldFN0YXR1c1RleHQsCiAgICAgICAgIG1vdXNl
RGlkTW92ZU92ZXJFbGVtZW50LAogICAgICAgICBjb250ZW50c1NpemVDaGFuZ2VkLAotICAgICAg
ICAwICAgICAgICAgICAvKiBkaWROb3RIYW5kbGVLZXlFdmVudCAqLworICAgICAgICAwLCAgICAg
ICAgICAvKiBkaWROb3RIYW5kbGVLZXlFdmVudCAqLworICAgICAgICBnZXRXaW5kb3dSZWN0LAor
ICAgICAgICBzZXRXaW5kb3dSZWN0CiAgICAgfTsKICAgICBXS1BhZ2VTZXRQYWdlVUlDbGllbnQo
X3dlYlZpZXcucGFnZVJlZiwgJnVpQ2xpZW50KTsKIH0KSW5kZXg6IFdlYktpdFRvb2xzL1dlYktp
dFRlc3RSdW5uZXIvUGxhdGZvcm1XZWJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdlYlZpZXcuaAkocmV2aXNpb24gNjk0MTgpCisrKyBX
ZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV2ViVmlldy5oCSh3b3JraW5nIGNv
cHkpCkBAIC02MCw2ICs2MCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlc2l6ZVRvKHVuc2lnbmVk
IHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpOwogICAgIHZvaWQgZm9jdXMoKTsKIAorICAgIFdLUmVj
dCB3aW5kb3dSZWN0KCk7CisgICAgdm9pZCBzZXRXaW5kb3dSZWN0KFdLUmVjdCk7CisKIHByaXZh
dGU6CiAgICAgUGxhdGZvcm1XS1ZpZXcgbV92aWV3OwogICAgIFBsYXRmb3JtV2luZG93IG1fd2lu
ZG93OwpJbmRleDogV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJv
bGxlci5jcHAJKHJldmlzaW9uIDY5NDE4KQorKysgV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9UZXN0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDE4IEBAIFRl
c3RDb250cm9sbGVyOjp+VGVzdENvbnRyb2xsZXIoKQogewogfQogCitzdGF0aWMgV0tSZWN0IGdl
dFdpbmRvd1JlY3QoV0tQYWdlUmVmIHBhZ2UsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7Cisg
ICAgUGxhdGZvcm1XZWJWaWV3KiB2aWV3ID0gc3RhdGljX2Nhc3Q8UGxhdGZvcm1XZWJWaWV3Kj4o
Y29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpOworICAgIHJldHVybiB2aWV3LT53aW5kb3dS
ZWN0KCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldFdpbmRvd1JlY3QoV0tQYWdlUmVmIHBhZ2UsIFdL
UmVjdCByZWN0LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIFBsYXRmb3JtV2ViVmll
dyogdmlldyA9IHN0YXRpY19jYXN0PFBsYXRmb3JtV2ViVmlldyo+KGNvbnN0X2Nhc3Q8dm9pZCo+
KGNsaWVudEluZm8pKTsKKyAgICB2aWV3LT5zZXRXaW5kb3dSZWN0KHJlY3QpOworfQorCiBzdGF0
aWMgdm9pZCBjbG9zZU90aGVyUGFnZShXS1BhZ2VSZWYgcGFnZSwgY29uc3Qgdm9pZCogY2xpZW50
SW5mbykKIHsKICAgICBXS1BhZ2VDbG9zZShwYWdlKTsKQEAgLTkzLDcgKzEwNSw5IEBAIHN0YXRp
YyBXS1BhZ2VSZWYgY3JlYXRlT3RoZXJQYWdlKFdLUGFnZVIKICAgICAgICAgMCwKICAgICAgICAg
MCwKICAgICAgICAgMCwKLSAgICAgICAgMAorICAgICAgICAwLAorICAgICAgICBnZXRXaW5kb3dS
ZWN0LAorICAgICAgICBzZXRXaW5kb3dSZWN0CiAgICAgfTsKICAgICBXS1BhZ2VTZXRQYWdlVUlD
bGllbnQobmV3UGFnZSwgJm90aGVyUGFnZVVJQ2xpZW50KTsKIApAQCAtMTc0LDcgKzE4OCw5IEBA
IHZvaWQgVGVzdENvbnRyb2xsZXI6OmluaXRpYWxpemUoaW50IGFyZ2MKICAgICAgICAgMCwKICAg
ICAgICAgMCwKICAgICAgICAgMCwKLSAgICAgICAgMAorICAgICAgICAwLAorICAgICAgICBnZXRX
aW5kb3dSZWN0LAorICAgICAgICBzZXRXaW5kb3dSZWN0CiAgICAgfTsKICAgICBXS1BhZ2VTZXRQ
YWdlVUlDbGllbnQobV9tYWluV2ViVmlldy0+cGFnZSgpLCAmcGFnZVVJQ2xpZW50KTsKIApJbmRl
eDogV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9XZWJLaXRUZXN0UnVubmVyLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9XZWJLaXRUZXN0UnVubmVyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDY5NDE4KQorKysgV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9XZWJLaXRUZXN0UnVubmVy
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM2OCw3ICszNjgs
MTQgQEAKIAkJCWlzYSA9IFBCWFByb2plY3Q7CiAJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0g
MURFQjkyNzgwODczM0RENDAwMTBFOUNEIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3Ig
UEJYUHJvamVjdCAiV2ViS2l0VGVzdFJ1bm5lciIgKi87CiAJCQljb21wYXRpYmlsaXR5VmVyc2lv
biA9ICJYY29kZSAzLjEiOworCQkJZGV2ZWxvcG1lbnRSZWdpb24gPSBFbmdsaXNoOwogCQkJaGFz
U2Nhbm5lZEZvckVuY29kaW5ncyA9IDE7CisJCQlrbm93blJlZ2lvbnMgPSAoCisJCQkJRW5nbGlz
aCwKKwkJCQlKYXBhbmVzZSwKKwkJCQlGcmVuY2gsCisJCQkJR2VybWFuLAorCQkJKTsKIAkJCW1h
aW5Hcm91cCA9IDA4RkI3Nzk0RkU4NDE1NURDMDJBQUMwNyAvKiBXZWJLaXRUZXN0UnVubmVyICov
OwogCQkJcHJvamVjdERpclBhdGggPSAiIjsKIAkJCXByb2plY3RSb290ID0gIiI7CkluZGV4OiBX
ZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9QbGF0Zm9ybVdlYlZpZXdNYWMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvUGxhdGZvcm1XZWJW
aWV3TWFjLm1tCShyZXZpc2lvbiA2OTQxOCkKKysrIFdlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvbWFjL1BsYXRmb3JtV2ViVmlld01hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNjMsNCArNjMs
MjEgQEAgdm9pZCBQbGF0Zm9ybVdlYlZpZXc6OmZvY3VzKCkKICAgICAvLyBJbXBsZW1lbnQuCiB9
CiAKK1dLUmVjdCBQbGF0Zm9ybVdlYlZpZXc6OndpbmRvd1JlY3QoKQoreworICAgIENHUmVjdCBy
ZWN0ID0gW21fd2luZG93IGZyYW1lXTsKKworICAgIFdLUmVjdCB3a1JlY3Q7CisgICAgd2tSZWN0
Lm9yaWdpbi54ID0gcmVjdC5vcmlnaW4ueDsKKyAgICB3a1JlY3Qub3JpZ2luLnkgPSByZWN0Lm9y
aWdpbi55OworICAgIHdrUmVjdC5zaXplLndpZHRoID0gcmVjdC5zaXplLndpZHRoOworICAgIHdr
UmVjdC5zaXplLmhlaWdodCA9IHJlY3Quc2l6ZS5oZWlnaHQ7CisgICAgcmV0dXJuIHdrUmVjdDsK
K30KKwordm9pZCBQbGF0Zm9ybVdlYlZpZXc6OnNldFdpbmRvd1JlY3QoV0tSZWN0IHJlY3QpCit7
CisgICAgW21fd2luZG93IHNldEZyYW1lOkNHUmVjdE1ha2UocmVjdC5vcmlnaW4ueCwgcmVjdC5v
cmlnaW4ueSwgcmVjdC5zaXplLndpZHRoLCByZWN0LnNpemUuaGVpZ2h0KSBkaXNwbGF5OllFU107
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdUUgpJbmRleDogV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9xdC9QbGF0Zm9ybVdlYlZpZXdRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9xdC9QbGF0Zm9ybVdlYlZpZXdRdC5jcHAJKHJldmlzaW9uIDY5NDE4
KQorKysgV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9xdC9QbGF0Zm9ybVdlYlZpZXdRdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDQgKzc5LDIxIEBAIHZvaWQgUGxhdGZvcm1XZWJWaWV3
Ojpmb2N1cygpCiAgICAgbV92aWV3LT5zZXRGb2N1cyhRdDo6T3RoZXJGb2N1c1JlYXNvbik7CiB9
CiAKK1dLUmVjdCBQbGF0Zm9ybVdlYlZpZXc6OndpbmRvd1JlY3QoKQoreworICAgIC8vIEltcGxl
bWVudC4KKworICAgIFdLUmVjdCB3a1JlY3Q7CisgICAgd2tSZWN0Lm9yaWdpbi54ID0gMDsKKyAg
ICB3a1JlY3Qub3JpZ2luLnkgPSAwOworICAgIHdrUmVjdC5zaXplLndpZHRoID0gMDsKKyAgICB3
a1JlY3Quc2l6ZS5oZWlnaHQgPSAwOworICAgIHJldHVybiB3a1JlY3Q7Cit9CisKK3ZvaWQgUGxh
dGZvcm1XZWJWaWV3OjpzZXRXaW5kb3dSZWN0KFdLUmVjdCkKK3sKKyAgICAvLyBJbXBsZW1lbnQu
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdUUgpJbmRleDogV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci93aW4vUGxhdGZvcm1XZWJWaWV3V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29s
cy9XZWJLaXRUZXN0UnVubmVyL3dpbi9QbGF0Zm9ybVdlYlZpZXdXaW4uY3BwCShyZXZpc2lvbiA2
OTQxOCkKKysrIFdlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvd2luL1BsYXRmb3JtV2ViVmll
d1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi0vKgoreC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dApAQCAtNzgsNCArNzgsMjEgQEAgdm9pZCBQbGF0Zm9ybVdlYlZpZXc6OmZvY3VzKCkK
ICAgICA6OlNldEZvY3VzKDo6V0tWaWV3R2V0V2luZG93KG1fdmlldykpOwogfQogCitXS1JlY3Qg
UGxhdGZvcm1XZWJWaWV3Ojp3aW5kb3dSZWN0KCkKK3sKKyAgICAvLyBJbXBsZW1lbnQuCisKKyAg
ICBXS1JlY3Qgd2tSZWN0OworICAgIHdrUmVjdC5vcmlnaW4ueCA9IDA7CisgICAgd2tSZWN0Lm9y
aWdpbi55ID0gMDsKKyAgICB3a1JlY3Quc2l6ZS53aWR0aCA9IDA7CisgICAgd2tSZWN0LnNpemUu
aGVpZ2h0ID0gMDsKKyAgICByZXR1cm4gd2tSZWN0OworfQorCit2b2lkIFBsYXRmb3JtV2ViVmll
dzo6c2V0V2luZG93UmVjdChXS1JlY3QpCit7CisgICAgLy8gSW1wbGVtZW50LgorfQorCiB9IC8v
IG5hbWVzcGFjZSBXVFIK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70367</attachid>
            <date>2010-10-09 13:18:45 -0700</date>
            <delta_ts>2010-10-10 18:00:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patcher.diff</filename>
            <type>text/plain</type>
            <size>36584</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2OTQ0MCkKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjMgQEAKKzIwMTAtMTAtMDggIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZWVkIGlt
cGxlbWVudGF0aW9uIG9mIENocm9tZUNsaWVudCB3aW5kb3dSZWN0IHJlbGF0ZWQgZnVuY3Rpb25z
LgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vODQ2OTQ3Nj4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3Mzg2CisKKyAgICAgICAgKiBTaGFyZWQvQVBJ
L2MvV0tHZW9tZXRyeS5oOiBBZGRlZC4KKyAgICAgICAgQWRkcyBXS1BvaW50LCBXS1NpemUgYW5k
IFdLUmVjdCBzdHJ1Y3RzLgorCisgICAgICAgICogU2hhcmVkL0FQSS9jL1dLU2hhcmVkQVBJQ2Fz
dC5oOgorICAgICAgICAoV2ViS2l0Ojp0b0ltcGwpOgorICAgICAgICAoV2ViS2l0Ojp0b0FQSSk6
CisgICAgICAgIEFkZCBjb252ZXJzaW9uIGZ1bmN0aW9ucyBmb3IgV0tSZWN0LgorCisgICAgICAg
ICogU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oOgorICAgICAgICBBZGQgZW5jb2Rpbmcg
Zm9yIEZsb2F0UG9pbnQsIEZsb2F0U2l6ZSBhbmQgRmxvYXRSZWN0LgorCisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9DL1dLUGFnZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VD
bGllbnRJbXBsLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwu
bW06CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjp0cmFuc2Zvcm1Ub0RldmljZVNw
YWNlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnRyYW5zZm9ybVRvVXNlclNw
YWNlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW06CisgICAgICAgICgt
W1dLVmlldyBfdHJhbnNmb3JtVG9EZXZpY2VTcGFjZTpdKToKKyAgICAgICAgKC1bV0tWaWV3IF90
cmFuc2Zvcm1Ub1VzZXJTcGFjZTpdKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL21hYy9XS1Zp
ZXdJbnRlcm5hbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvcXdrcGFnZS5jcHA6Cisg
ICAgICAgIChRV0tQYWdlUHJpdmF0ZTo6dHJhbnNmb3JtVG9EZXZpY2VTcGFjZSk6CisgICAgICAg
IChRV0tQYWdlUHJpdmF0ZTo6dHJhbnNmb3JtVG9Vc2VyU3BhY2UpOgorICAgICAgICAoUVdLUGFn
ZTo6UVdLUGFnZSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9xdC9xd2twYWdlX3AuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvUGFnZUNsaWVudC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNldFdpbmRvd0Zy
YW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpnZXRXaW5kb3dGcmFtZSk6Cisg
ICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogVUlQcm9jZXNzL1dlYlVJQ2xpZW50
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVUlDbGllbnQ6OnNldFdpbmRvd0ZyYW1lKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVUlDbGllbnQ6OndpbmRvd0ZyYW1lKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvV2ViVUlDbGllbnQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL1dlYlZpZXcuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3OjpzZXRFZGl0Q29tbWFuZFN0YXRlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlldzo6dHJhbnNmb3JtVG9EZXZpY2VTcGFjZSk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlZpZXc6OnRyYW5zZm9ybVRvVXNlclNwYWNlKToKKyAgICAgICAgKiBVSVByb2Nl
c3Mvd2luL1dlYlZpZXcuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkNocm9tZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6c2V0
V2luZG93RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OndpbmRvd0Zy
YW1lKToKKyAgICAgICAgUGlwZSBjYWxscyB0aHJvdWdoIHRvIHRoZSBVSVByb2Nlc3MsIGFuZCBn
aXZlIHBvcnRzIGEgY2hhbmNlIHRvIHRyYW5zZm9ybQorICAgICAgICB0aGUgcmVjdCAodmlhIHRo
ZSBQYWdlQ2xpZW50KSBiZWZvcmUgaXQgaXMgcGFzc2VkIG9uLgorCisgICAgICAgICogV2ViS2l0
Mi5wcm86CisgICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIHdpbi9XZWJLaXQyLnZjcHJvajoKKyAgICAgICAgKiB3aW4vV2ViS2l0MkdlbmVyYXRl
ZC5tYWtlOgorICAgICAgICBBZGQgbmV3IGZpbGVzLgorCiAyMDEwLTEwLTA3ICBKZXNzaWUgQmVy
bGluICA8amJlcmxpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5p
Zy4KSW5kZXg6IFdlYktpdDIvV2ViS2l0Mi5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJL
aXQyLnBybwkocmV2aXNpb24gNjk0MTgpCisrKyBXZWJLaXQyL1dlYktpdDIucHJvCSh3b3JraW5n
IGNvcHkpCkBAIC0xNjksNiArMTY5LDcgQEAgSEVBREVSUyArPSBcCiAgICAgUGxhdGZvcm0vV29y
a1F1ZXVlLmggXAogICAgIFNoYXJlZC9BUEkvYy9XS0Jhc2UuaCBcCiAgICAgU2hhcmVkL0FQSS9j
L1dLQ2VydGlmaWNhdGVJbmZvLmggXAorICAgIFNoYXJlZC9BUEkvYy9XS0dlb21ldHJ5LmggXAog
ICAgIFNoYXJlZC9BUEkvYy9XS051bWJlci5oIFwKICAgICBTaGFyZWQvQVBJL2MvV0tTZXJpYWxp
emVkU2NyaXB0VmFsdWUuaCBcCiAgICAgU2hhcmVkL0FQSS9jL1dLU2hhcmVkQVBJQ2FzdC5oIFwK
SW5kZXg6IFdlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCShyZXZpc2lvbiA2OTQx
OCkKKysrIFdlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Myw2ICs0MywxMCBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdl
YkNvcmU6CiB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkludFNpemU+
IDogU2ltcGxlQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpJbnRTaXplPiB7IH07CiB0ZW1wbGF0ZTw+
IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkludFJlY3Q+IDogU2ltcGxlQXJndW1lbnRD
b2RlcjxXZWJDb3JlOjpJbnRSZWN0PiB7IH07CiAKK3RlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50
Q29kZXI8V2ViQ29yZTo6RmxvYXRQb2ludD4gOiBTaW1wbGVBcmd1bWVudENvZGVyPFdlYkNvcmU6
OkZsb2F0UG9pbnQ+IHsgfTsKK3RlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29y
ZTo6RmxvYXRTaXplPiA6IFNpbXBsZUFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6RmxvYXRTaXplPiB7
IH07Cit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkZsb2F0UmVjdD4g
OiBTaW1wbGVBcmd1bWVudENvZGVyPFdlYkNvcmU6OkZsb2F0UmVjdD4geyB9OworCiB0ZW1wbGF0
ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6Ok1pbWVDbGFzc0luZm8+IHsKICAgICBz
dGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBXZWJDb3Jl
OjpNaW1lQ2xhc3NJbmZvJiBtaW1lQ2xhc3NJbmZvKQogICAgIHsKSW5kZXg6IFdlYktpdDIvU2hh
cmVkL0FQSS9jL1dLR2VvbWV0cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1NoYXJlZC9BUEkv
Yy9XS0dlb21ldHJ5LmgJKHJldmlzaW9uIDApCisrKyBXZWJLaXQyL1NoYXJlZC9BUEkvYy9XS0dl
b21ldHJ5LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIFdLR2VvbWV0cnlfaAorI2RlZmluZSBXS0dlb21ldHJ5X2gKKworI2luY2x1ZGUgPFdlYktp
dDIvV0tCYXNlLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYK
Kworc3RydWN0IFdLUG9pbnQgeworICAgIGRvdWJsZSB4OworICAgIGRvdWJsZSB5OworfTsKK3R5
cGVkZWYgc3RydWN0IFdLUG9pbnQgV0tQb2ludDsKKworc3RydWN0IFdLU2l6ZSB7CisgICAgZG91
YmxlIHdpZHRoOworICAgIGRvdWJsZSBoZWlnaHQ7Cit9OwordHlwZWRlZiBzdHJ1Y3QgV0tTaXpl
IFdLU2l6ZTsKKworc3RydWN0IFdLUmVjdCB7CisgICAgV0tQb2ludCBvcmlnaW47CisgICAgV0tT
aXplIHNpemU7Cit9OwordHlwZWRlZiBzdHJ1Y3QgV0tSZWN0IFdLUmVjdDsKKworI2lmZGVmIF9f
Y3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIFdLR2VvbWV0cnlfaCAqLwpJbmRleDog
V2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tTaGFyZWRBUElDYXN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0Mi9TaGFyZWQvQVBJL2MvV0tTaGFyZWRBUElDYXN0LmgJKHJldmlzaW9uIDY5NDE4KQorKysg
V2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tTaGFyZWRBUElDYXN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDEwICsyOCwxMiBAQAogCiAjaW5jbHVkZSAiV0tCYXNlLmgiCiAjaW5jbHVkZSAiV0tFdmVu
dC5oIgorI2luY2x1ZGUgIldLR2VvbWV0cnkuaCIKICNpbmNsdWRlICJXZWJFdmVudC5oIgogI2lu
Y2x1ZGUgIldlYk51bWJlci5oIgogI2luY2x1ZGUgIldlYlN0cmluZy5oIgogI2luY2x1ZGUgIldl
YlVSTC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CiAjaW5jbHVkZSA8d3RmL1R5
cGVUcmFpdHMuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC0xNDcsNiArMTQ5LDI1IEBAIGlu
bGluZSBTdHJpbmcgdG9XVEZTdHJpbmcoV0tVUkxSZWYgdXJsUmUKICAgICByZXR1cm4gdG9JbXBs
KHVybFJlZiktPnN0cmluZygpOwogfQogCisKKy8qIEdlb21ldHJ5IGNvbnZlcnNpb25zICovCisK
K2lubGluZSBXZWJDb3JlOjpGbG9hdFJlY3QgdG9JbXBsKGNvbnN0IFdLUmVjdCYgd2tSZWN0KQor
eworICAgIHJldHVybiBXZWJDb3JlOjpGbG9hdFJlY3Qoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHdrUmVj
dC5vcmlnaW4ueCksIHN0YXRpY19jYXN0PGZsb2F0Pih3a1JlY3Qub3JpZ2luLnkpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHdrUmVjdC5zaXplLndp
ZHRoKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHdrUmVjdC5zaXplLmhlaWdodCkpOworfQorCitpbmxp
bmUgV0tSZWN0IHRvQVBJKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBX
S1JlY3Qgd2tSZWN0OworICAgIHdrUmVjdC5vcmlnaW4ueCA9IHJlY3QueCgpOworICAgIHdrUmVj
dC5vcmlnaW4ueSA9IHJlY3QueSgpOworICAgIHdrUmVjdC5zaXplLndpZHRoID0gcmVjdC53aWR0
aCgpOworICAgIHdrUmVjdC5zaXplLmhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7CisgICAgcmV0dXJu
IHdrUmVjdDsKK30KKwogLyogRW51bSBjb252ZXJzaW9ucyAqLwogCiBpbmxpbmUgV0tUeXBlSUQg
dG9BUEkoQVBJT2JqZWN0OjpUeXBlIHR5cGUpCkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9QYWdl
Q2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCShy
ZXZpc2lvbiA2OTQxOCkKKysrIFdlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTMsNiArNTMsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGNsZWFy
QWxsRWRpdENvbW1hbmRzKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRFZGl0Q29tbWFuZFN0
YXRlKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGJvb2wgaXNFbmFibGVkLCBpbnQgc3RhdGUp
ID0gMDsKIAorICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0IHRyYW5zZm9ybVRvRGV2aWNl
U3BhY2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgPSAwOworICAgIHZpcnR1YWwgV2ViQ29y
ZTo6RmxvYXRSZWN0IHRyYW5zZm9ybVRvVXNlclNwYWNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYpID0gMDsKKwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICB2aXJ0dWFs
IHZvaWQgcGFnZURpZEVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgcGFnZURpZExlYXZlQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpID0gMDsKSW5kZXg6
IFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkocmV2aXNpb24gNjk0MTgpCisrKyBXZWJLaXQy
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3
IEBACiAjaW5jbHVkZSAiTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIlBhZ2VD
bGllbnQuaCIKICNpbmNsdWRlICJTdHJpbmdQYWlyVmVjdG9yLmgiCisjaW5jbHVkZSAiV0tDb250
ZXh0UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYkJhY2tGb3J3YXJkTGlzdC5oIgogI2luY2x1ZGUg
IldlYkJhY2tGb3J3YXJkTGlzdEl0ZW0uaCIKICNpbmNsdWRlICJXZWJDZXJ0aWZpY2F0ZUluZm8u
aCIKQEAgLTQ5LDggKzUwLDcgQEAKICNpbmNsdWRlICJXZWJQcm9jZXNzTWVzc2FnZXMuaCIKICNp
bmNsdWRlICJXZWJQcm9jZXNzUHJveHkuaCIKICNpbmNsdWRlICJXZWJVUkxSZXF1ZXN0LmgiCi0K
LSNpbmNsdWRlICJXS0NvbnRleHRQcml2YXRlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFJl
Y3QuaD4KICNpbmNsdWRlIDxzdGRpby5oPgogCiAjaWZuZGVmIE5ERUJVRwpAQCAtMzcxLDIwICsz
NzEsMTkgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldElzSW5XaW5kb3coYm9vbCBpcwogfQogCiAj
aWYgUExBVEZPUk0oTUFDKQotdm9pZCBXZWJQYWdlUHJveHk6OnNldFdpbmRvd0lzVmlzaWJsZShi
b29sIHdpbmRvd0lzVmlzaWJsZSkKK3ZvaWQgV2ViUGFnZVByb3h5Ojp1cGRhdGVXaW5kb3dJc1Zp
c2libGUoYm9vbCB3aW5kb3dJc1Zpc2libGUpCiB7CiAgICAgaWYgKCFpc1ZhbGlkKCkpCiAgICAg
ICAgIHJldHVybjsKICAgICBwcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldFdp
bmRvd0lzVmlzaWJsZSh3aW5kb3dJc1Zpc2libGUpLCBtX3BhZ2VJRCk7CiB9CiAKLXZvaWQgV2Vi
UGFnZVByb3h5OjpzZXRXaW5kb3dGcmFtZShjb25zdCBJbnRSZWN0JiB3aW5kb3dGcmFtZSkKK3Zv
aWQgV2ViUGFnZVByb3h5Ojp1cGRhdGVXaW5kb3dGcmFtZShjb25zdCBJbnRSZWN0JiB3aW5kb3dG
cmFtZSkKIHsKICAgICBpZiAoIWlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIHByb2Nl
c3MoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0V2luZG93RnJhbWUod2luZG93RnJhbWUp
LCBtX3BhZ2VJRCk7CiB9Ci0KICNlbmRpZgogCiB2b2lkIFdlYlBhZ2VQcm94eTo6aGFuZGxlTW91
c2VFdmVudChjb25zdCBXZWJNb3VzZUV2ZW50JiBldmVudCkKQEAgLTk3Miw2ICs5NzEsMTYgQEAg
dm9pZCBXZWJQYWdlUHJveHk6OmRpZFZhbGlkYXRlTWVudUl0ZW0oYwogICAgIG1fcGFnZUNsaWVu
dC0+c2V0RWRpdENvbW1hbmRTdGF0ZShjb21tYW5kTmFtZSwgaXNFbmFibGVkLCBzdGF0ZSk7CiB9
CiAKK3ZvaWQgV2ViUGFnZVByb3h5OjpzZXRXaW5kb3dGcmFtZShjb25zdCBGbG9hdFJlY3QmIG5l
d1dpbmRvd0ZyYW1lKQoreworICAgIG1fdWlDbGllbnQuc2V0V2luZG93RnJhbWUodGhpcywgbV9w
YWdlQ2xpZW50LT50cmFuc2Zvcm1Ub0RldmljZVNwYWNlKG5ld1dpbmRvd0ZyYW1lKSk7Cit9CisK
K3ZvaWQgV2ViUGFnZVByb3h5OjpnZXRXaW5kb3dGcmFtZShGbG9hdFJlY3QmIG5ld1dpbmRvd0Zy
YW1lKQoreworICAgIG5ld1dpbmRvd0ZyYW1lID0gbV9wYWdlQ2xpZW50LT50cmFuc2Zvcm1Ub1Vz
ZXJTcGFjZShtX3VpQ2xpZW50LndpbmRvd0ZyYW1lKHRoaXMpKTsKK30KKwogdm9pZCBXZWJQYWdl
UHJveHk6OmRpZFJlY2VpdmVFdmVudCh1aW50MzJfdCBvcGFxdWVUeXBlLCBib29sIGhhbmRsZWQp
CiB7CiAgICAgV2ViRXZlbnQ6OlR5cGUgdHlwZSA9IHN0YXRpY19jYXN0PFdlYkV2ZW50OjpUeXBl
PihvcGFxdWVUeXBlKTsKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiA2
OTQxOCkKKysrIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkp
CkBAIC01Niw4ICs1Niw5IEBAIG5hbWVzcGFjZSBDb3JlSVBDIHsKIH0KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewotICAgIGNsYXNzIEludFNpemU7CiAgICAgY2xhc3MgQ3Vyc29yOworICAgIGNsYXNz
IEZsb2F0UmVjdDsKKyAgICBjbGFzcyBJbnRTaXplOwogfQogCiBzdHJ1Y3QgV0tDb250ZXh0U3Rh
dGlzdGljczsKQEAgLTE0Myw4ICsxNDQsOCBAQCBwdWJsaWM6CiAKIC8vIFRoZXNlIGFyZSBvbmx5
IHVzZWQgb24gTWFjIGN1cnJlbnRseS4KICNpZiBQTEFURk9STShNQUMpCi0gICAgdm9pZCBzZXRX
aW5kb3dJc1Zpc2libGUoYm9vbCB3aW5kb3dJc1Zpc2libGUpOwotICAgIHZvaWQgc2V0V2luZG93
RnJhbWUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOworICAgIHZvaWQgdXBkYXRlV2luZG93SXNW
aXNpYmxlKGJvb2wgd2luZG93SXNWaXNpYmxlKTsKKyAgICB2b2lkIHVwZGF0ZVdpbmRvd0ZyYW1l
KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKICNlbmRpZgogCiAgICAgdm9pZCBoYW5kbGVNb3Vz
ZUV2ZW50KGNvbnN0IFdlYk1vdXNlRXZlbnQmKTsKQEAgLTI3OCw2ICsyNzksOSBAQCBwcml2YXRl
OgogICAgIHZvaWQgc2V0Q3Vyc29yKGNvbnN0IFdlYkNvcmU6OkN1cnNvciYpOwogICAgIHZvaWQg
ZGlkVmFsaWRhdGVNZW51SXRlbShjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCBib29sIGlzRW5h
YmxlZCwgaW50MzJfdCBzdGF0ZSk7CiAKKyAgICB2b2lkIHNldFdpbmRvd0ZyYW1lKGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYpOworICAgIHZvaWQgZ2V0V2luZG93RnJhbWUoV2ViQ29yZTo6Rmxv
YXRSZWN0Jik7CisKICAgICB2b2lkIGRpZFJlY2VpdmVFdmVudCh1aW50MzJfdCBvcGFxdWVUeXBl
LCBib29sIGhhbmRsZWQpOwogCiAgICAgdm9pZCBkaWRSdW5KYXZhU2NyaXB0SW5NYWluRnJhbWUo
Y29uc3QgU3RyaW5nJiwgdWludDY0X3QpOwpJbmRleDogV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5Lm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5tZXNzYWdlcy5pbgkocmV2aXNpb24gNjk0MTgpCisrKyBXZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDgg
QEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICAgICBTZXRTdGF0dXNUZXh0KFdURjo6U3Ry
aW5nIHN0YXR1c1RleHQpCiAgICAgU2V0VG9vbFRpcChXVEY6OlN0cmluZyB0b29sVGlwKQogICAg
IFRha2VGb2N1cyhib29sIGRpcmVjdGlvbikKKyAgICBTZXRXaW5kb3dGcmFtZShXZWJDb3JlOjpG
bG9hdFJlY3Qgd2luZG93RnJhbWUpCisgICAgR2V0V2luZG93RnJhbWUoKSAtPiAoV2ViQ29yZTo6
RmxvYXRSZWN0IHdpbmRvd0ZyYW1lKQogCiAgICAgIyBQb2xpY3kgbWVzc2FnZXMuCiAgICAgRGVj
aWRlUG9saWN5Rm9yTUlNRVR5cGUodWludDY0X3QgZnJhbWVJRCwgV1RGOjpTdHJpbmcgTUlNRVR5
cGUsIFdURjo6U3RyaW5nIHVybCwgdWludDY0X3QgbGlzdGVuZXJJRCkKSW5kZXg6IFdlYktpdDIv
VUlQcm9jZXNzL1dlYlVJQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vz
cy9XZWJVSUNsaWVudC5jcHAJKHJldmlzaW9uIDY5NDE4KQorKysgV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViVUlDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVk
ZSAiTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgogI2lu
Y2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC0xMzYsNCArMTM3LDIwIEBAIHZvaWQgV2ViVUlD
bGllbnQ6OmRpZE5vdEhhbmRsZUtleUV2ZW50KFcKICAgICBtX3BhZ2VVSUNsaWVudC5kaWROb3RI
YW5kbGVLZXlFdmVudCh0b0FQSShwYWdlKSwgZXZlbnQubmF0aXZlRXZlbnQoKSwgbV9wYWdlVUlD
bGllbnQuY2xpZW50SW5mbyk7CiB9CiAKK3ZvaWQgV2ViVUlDbGllbnQ6OnNldFdpbmRvd0ZyYW1l
KFdlYlBhZ2VQcm94eSogcGFnZSwgY29uc3QgRmxvYXRSZWN0JiBmcmFtZSkKK3sKKyAgICBpZiAo
IW1fcGFnZVVJQ2xpZW50LnNldFdpbmRvd0ZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X3BhZ2VVSUNsaWVudC5zZXRXaW5kb3dGcmFtZSh0b0FQSShwYWdlKSwgdG9BUEkoZnJhbWUpLCBt
X3BhZ2VVSUNsaWVudC5jbGllbnRJbmZvKTsKK30KKworRmxvYXRSZWN0IFdlYlVJQ2xpZW50Ojp3
aW5kb3dGcmFtZShXZWJQYWdlUHJveHkqIHBhZ2UpCit7CisgICAgaWYgKCFtX3BhZ2VVSUNsaWVu
dC5nZXRXaW5kb3dGcmFtZSkKKyAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOworCisgICAgcmV0
dXJuIHRvSW1wbChtX3BhZ2VVSUNsaWVudC5nZXRXaW5kb3dGcmFtZSh0b0FQSShwYWdlKSwgbV9w
YWdlVUlDbGllbnQuY2xpZW50SW5mbykpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5k
ZXg6IFdlYktpdDIvVUlQcm9jZXNzL1dlYlVJQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViVUlDbGllbnQuaAkocmV2aXNpb24gNjk0MTgpCisrKyBXZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJVSUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1OCw5IEBAIHB1
YmxpYzoKICAgICB2b2lkIGNvbnRlbnRzU2l6ZUNoYW5nZWQoV2ViUGFnZVByb3h5KiwgY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYsIFdlYkZyYW1lUHJveHkqKTsKICAgICB2b2lkIGRpZE5vdEhhbmRs
ZUtleUV2ZW50KFdlYlBhZ2VQcm94eSosIGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmKTsK
IAorICAgIHZvaWQgc2V0V2luZG93RnJhbWUoV2ViUGFnZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0Jik7CisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IHdpbmRvd0ZyYW1lKFdlYlBhZ2VQ
cm94eSopOworCiBwcml2YXRlOgogICAgIFdLUGFnZVVJQ2xpZW50IG1fcGFnZVVJQ2xpZW50Owog
fTsKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5oCShyZXZpc2lvbiA2OTQxOCkKKysrIFdl
YktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsy
OCw3IEBACiAKICNpbmNsdWRlIDxXZWJLaXQyL1dLQmFzZS5oPgogI2luY2x1ZGUgPFdlYktpdDIv
V0tFdmVudC5oPgorI2luY2x1ZGUgPFdlYktpdDIvV0tHZW9tZXRyeS5oPgogI2luY2x1ZGUgPFdl
YktpdDIvV0tOYXRpdmVFdmVudC5oPgogCiAjaWZuZGVmIF9fY3BsdXNwbHVzCkBAIC0xMzgsNiAr
MTM5LDggQEAgdHlwZWRlZiB2b2lkICgqV0tQYWdlU2V0U3RhdHVzVGV4dENhbGxiYQogdHlwZWRl
ZiB2b2lkICgqV0tQYWdlTW91c2VEaWRNb3ZlT3ZlckVsZW1lbnRDYWxsYmFjaykoV0tQYWdlUmVm
IHBhZ2UsIFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzLCBXS1R5cGVSZWYgdXNlckRhdGEsIGNv
bnN0IHZvaWQgKmNsaWVudEluZm8pOwogdHlwZWRlZiB2b2lkICgqV0tQYWdlQ29udGVudHNTaXpl
Q2hhbmdlZENhbGxiYWNrKShXS1BhZ2VSZWYgcGFnZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBX
S0ZyYW1lUmVmIGZyYW1lLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKTsKIHR5cGVkZWYgdm9pZCAo
KldLUGFnZURpZE5vdEhhbmRsZUtleUV2ZW50Q2FsbGJhY2spKFdLUGFnZVJlZiBwYWdlLCBXS05h
dGl2ZUV2ZW50UHRyIGV2ZW50LCBjb25zdCB2b2lkICpjbGllbnRJbmZvKTsKK3R5cGVkZWYgV0tS
ZWN0ICgqV0tQYWdlR2V0V2luZG93RnJhbWVDYWxsYmFjaykoV0tQYWdlUmVmIHBhZ2UsIGNvbnN0
IHZvaWQgKmNsaWVudEluZm8pOwordHlwZWRlZiB2b2lkICgqV0tQYWdlU2V0V2luZG93RnJhbWVD
YWxsYmFjaykoV0tQYWdlUmVmIHBhZ2UsIFdLUmVjdCBmcmFtZSwgY29uc3Qgdm9pZCAqY2xpZW50
SW5mbyk7CiAKIHN0cnVjdCBXS1BhZ2VVSUNsaWVudCB7CiAgICAgaW50ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9u
OwpAQCAtMTUyLDYgKzE1NSw4IEBAIHN0cnVjdCBXS1BhZ2VVSUNsaWVudCB7CiAgICAgV0tQYWdl
TW91c2VEaWRNb3ZlT3ZlckVsZW1lbnRDYWxsYmFjayAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtb3VzZURpZE1vdmVPdmVyRWxlbWVudDsKICAgICBXS1BhZ2VDb250ZW50c1NpemVDaGFu
Z2VkQ2FsbGJhY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzU2l6
ZUNoYW5nZWQ7CiAgICAgV0tQYWdlRGlkTm90SGFuZGxlS2V5RXZlbnRDYWxsYmFjayAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkaWROb3RIYW5kbGVLZXlFdmVudDsKKyAgICBXS1Bh
Z2VHZXRXaW5kb3dGcmFtZUNhbGxiYWNrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdldFdpbmRvd0ZyYW1lOworICAgIFdLUGFnZVNldFdpbmRvd0ZyYW1lQ2FsbGJhY2sg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0V2luZG93RnJhbWU7CiB9
OwogdHlwZWRlZiBzdHJ1Y3QgV0tQYWdlVUlDbGllbnQgV0tQYWdlVUlDbGllbnQ7CiAKSW5kZXg6
IFdlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLmgJKHJldmlzaW9uIDY5
NDE4KQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Niw2ICs1Niw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjbGVhckFsbEVk
aXRDb21tYW5kcygpOwogICAgIHZvaWQgc2V0RWRpdENvbW1hbmRTdGF0ZShjb25zdCBTdHJpbmcm
IGNvbW1hbmROYW1lLCBib29sIGlzRW5hYmxlZCwgaW50IHN0YXRlKTsKIAorICAgIFdlYkNvcmU6
OkZsb2F0UmVjdCB0cmFuc2Zvcm1Ub0RldmljZVNwYWNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYpOworICAgIFdlYkNvcmU6OkZsb2F0UmVjdCB0cmFuc2Zvcm1Ub1VzZXJTcGFjZShjb25zdCBX
ZWJDb3JlOjpGbG9hdFJlY3QmKTsKKwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
ICAgICB2b2lkIHBhZ2VEaWRFbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKTsKICAgICB2b2lk
IHBhZ2VEaWRMZWF2ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKTsKSW5kZXg6IFdlYktpdDIvVUlQ
cm9jZXNzL0FQSS9tYWMvUGFnZUNsaWVudEltcGwubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL21hYy9QYWdlQ2xpZW50SW1wbC5tbQkocmV2aXNpb24gNjk0MTgpCisrKyBX
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1BhZ2VDbGllbnRJbXBsLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCw2ICszMCw3IEBACiAjaW1wb3J0ICJXS1ZpZXdJbnRlcm5hbC5oIgogI2ltcG9ydCAi
V2ViRWRpdENvbW1hbmRQcm94eS5oIgogI2ltcG9ydCA8V2ViQ29yZS9DdXJzb3IuaD4KKyNpbXBv
cnQgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZvdW5kYXRpb25FeHRy
YXMuaD4KICNpbXBvcnQgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KQEAgLTg4LDcgKzg5LDYgQEAgLSAodm9pZClyZWRvRWRpdGluZzooaWQpc2VuZGVy
CiAKIEBlbmQKIAotCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogTlNTdHJpbmcqIG5zU3RyaW5nRnJv
bVdlYkNvcmVTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCkBAIC0yMDYsNiArMjA2LDE2IEBA
IHZvaWQgUGFnZUNsaWVudEltcGw6OnNldEVkaXRDb21tYW5kU3RhdGUKICAgICBbbV93a1ZpZXcg
X3NldFVzZXJJbnRlcmZhY2VJdGVtU3RhdGU6bnNTdHJpbmdGcm9tV2ViQ29yZVN0cmluZyhjb21t
YW5kTmFtZSkgZW5hYmxlZDppc0VuYWJsZWQgc3RhdGU6bmV3U3RhdGVdOwogfQogCitGbG9hdFJl
Y3QgUGFnZUNsaWVudEltcGw6OnRyYW5zZm9ybVRvRGV2aWNlU3BhY2UoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQoreworICAgIHJldHVybiBbbV93a1ZpZXcgX3RyYW5zZm9ybVRvRGV2aWNlU3BhY2U6
cmVjdF07Cit9CisKK0Zsb2F0UmVjdCBQYWdlQ2xpZW50SW1wbDo6dHJhbnNmb3JtVG9Vc2VyU3Bh
Y2UoY29uc3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIHJldHVybiBbbV93a1ZpZXcgX3RyYW5z
Zm9ybVRvVXNlclNwYWNlOnJlY3RdOworfQorCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQogdm9pZCBQYWdlQ2xpZW50SW1wbDo6cGFnZURpZEVudGVyQWNjZWxlcmF0ZWRDb21wb3Np
dGluZygpCiB7CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQkocmV2aXNpb24g
Njk0MTgpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQkod29ya2luZyBj
b3B5KQpAQCAtNDIsNyArNDIsOSBAQAogI2ltcG9ydCAiV2ViUHJvY2Vzc01hbmFnZXIuaCIKICNp
bXBvcnQgIldlYlByb2Nlc3NQcm94eS5oIgogI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3Jl
Lmg+CisjaW1wb3J0IDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgogI2ltcG9ydCA8V2ViQ29yZS9JbnRS
ZWN0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1BsYXRmb3JtU2NyZWVuLmg+CiAjaW1wb3J0IDx3dGYv
UmVmUHRyLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKQEAgLTI5OCw3ICszMDAsNyBA
QCAtICh2b2lkKV91cGRhdGVBY3RpdmVTdGF0ZQogCiAtICh2b2lkKV91cGRhdGVXaW5kb3dWaXNp
YmlsaXR5CiB7Ci0gICAgX2RhdGEtPl9wYWdlLT5zZXRXaW5kb3dJc1Zpc2libGUoIVtbc2VsZiB3
aW5kb3ddIGlzTWluaWF0dXJpemVkXSk7CisgICAgX2RhdGEtPl9wYWdlLT51cGRhdGVXaW5kb3dJ
c1Zpc2libGUoIVtbc2VsZiB3aW5kb3ddIGlzTWluaWF0dXJpemVkXSk7CiB9CiAKIC0gKEJPT0wp
X293bnNXaW5kb3dHcm93Qm94CkBAIC0zOTcsNyArMzk5LDcgQEAgLSAodm9pZClfdXBkYXRlV2lu
ZG93RnJhbWUKIHsKICAgICBBU1NFUlQoW3NlbGYgd2luZG93XSk7CiAKLSAgICBfZGF0YS0+X3Bh
Z2UtPnNldFdpbmRvd0ZyYW1lKGVuY2xvc2luZ0ludFJlY3QoW1tzZWxmIHdpbmRvd10gZnJhbWVd
KSk7CisgICAgX2RhdGEtPl9wYWdlLT51cGRhdGVXaW5kb3dGcmFtZShlbmNsb3NpbmdJbnRSZWN0
KFtbc2VsZiB3aW5kb3ddIGZyYW1lXSkpOwogfQogCiAtICh2b2lkKXZpZXdXaWxsTW92ZVRvV2lu
ZG93OihOU1dpbmRvdyAqKXdpbmRvdwpAQCAtNTMyLDYgKzUzNCwxNiBAQCAtICh2b2lkKV9zZXRV
c2VySW50ZXJmYWNlSXRlbVN0YXRlOihOU1N0CiAgICAgX2RhdGEtPl9tZW51TGlzdC5jbGVhcigp
OwogfQogCistIChDR1JlY3QpX3RyYW5zZm9ybVRvRGV2aWNlU3BhY2U6KENHUmVjdClyZWN0Cit7
CisgICAgcmV0dXJuIHRvRGV2aWNlU3BhY2UocmVjdCwgW3NlbGYgd2luZG93XSk7Cit9CisKKy0g
KENHUmVjdClfdHJhbnNmb3JtVG9Vc2VyU3BhY2U6KENHUmVjdClyZWN0Cit7CisgICAgcmV0dXJu
IHRvVXNlclNwYWNlKHJlY3QsIFtzZWxmIHdpbmRvd10pOworfQorCiAvLyBBbnkgbm9uLXplcm8g
dmFsdWUgd2lsbCBkbywgYnV0IHVzaW5nIHNvbWV0aGluZyByZWNvZ25pemFibGUgbWlnaHQgaGVs
cCB1cyBkZWJ1ZyBzb21lIGRheS4KICNkZWZpbmUgVFJBQ0tJTkdfUkVDVF9UQUcgMHhCQURGQUNF
CiAKSW5kZXg6IFdlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3SW50ZXJuYWwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlld0ludGVybmFsLmgJKHJl
dmlzaW9uIDY5NDE4KQorKysgV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXdJbnRlcm5h
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw5IEBAIEBpbnRlcmZhY2UgV0tWaWV3IChJ
bnRlcm5hbCkKIC0gKHZvaWQpX3NldEN1cnNvcjooTlNDdXJzb3IgKiljdXJzb3I7CiAtICh2b2lk
KV9zZXRVc2VySW50ZXJmYWNlSXRlbVN0YXRlOihOU1N0cmluZyAqKWNvbW1hbmROYW1lIGVuYWJs
ZWQ6KEJPT0wpaXNFbmFibGVkIHN0YXRlOihpbnQpbmV3U3RhdGU7CiAKKy0gKENHUmVjdClfdHJh
bnNmb3JtVG9EZXZpY2VTcGFjZTooQ0dSZWN0KXJlY3Q7CistIChDR1JlY3QpX3RyYW5zZm9ybVRv
VXNlclNwYWNlOihDR1JlY3QpcmVjdDsKKwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKIC0gKHZvaWQpX3N0YXJ0QWNjZWxlcmF0ZWRDb21wb3NpdGluZzooQ0FMYXllciAqKXJvb3RM
YXllcjsKIC0gKHZvaWQpX3N0b3BBY2NlbGVyYXRlZENvbXBvc2l0aW5nOwpJbmRleDogV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL3F0L3F3a3BhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQ
cm9jZXNzL0FQSS9xdC9xd2twYWdlLmNwcAkocmV2aXNpb24gNjk0MTgpCisrKyBXZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvcXQvcXdrcGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcg
QEAKICNpbmNsdWRlIDxRU3R5bGU+CiAjaW5jbHVkZSA8UVRvdWNoRXZlbnQ+CiAjaW5jbHVkZSA8
UXREZWJ1Zz4KKyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0UmVjdC5oPgogI2luY2x1ZGUgPFdlYktp
dDIvV0tGcmFtZS5oPgogI2luY2x1ZGUgPFdlYktpdDIvV0tSZXRhaW5QdHIuaD4KIApAQCAtOTEs
NiArOTIsMTYgQEAgdm9pZCBRV0tQYWdlUHJpdmF0ZTo6Y2xlYXJBbGxFZGl0Q29tbWFuZAogewog
fQogCitGbG9hdFJlY3QgUVdLUGFnZVByaXZhdGU6OnRyYW5zZm9ybVRvRGV2aWNlU3BhY2UoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIHJldHVybiByZWN0OworfQorCitGbG9hdFJlY3Qg
UVdLUGFnZVByaXZhdGU6OnRyYW5zZm9ybVRvVXNlclNwYWNlKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKK3sKKyAgICByZXR1cm4gcmVjdDsKK30KKwogdm9pZCBRV0tQYWdlUHJpdmF0ZTo6cGFpbnQo
UVBhaW50ZXIqIHBhaW50ZXIsIFFSZWN0IGFyZWEpCiB7CiAgICAgcGFpbnRlci0+c2F2ZSgpOwpA
QCAtMjcxLDcgKzI4Miw5IEBAIFFXS1BhZ2U6OlFXS1BhZ2UoV0tQYWdlTmFtZXNwYWNlUmVmIG5h
bWUKICAgICAgICAgMCwgIC8qIHNldFN0YXR1c1RleHQgKi8KICAgICAgICAgMCwgIC8qIG1vdXNl
RGlkTW92ZU92ZXJFbGVtZW50ICovCiAgICAgICAgIDAsICAvKiBjb250ZW50c1NpemVDaGFuZ2Vk
ICovCi0gICAgICAgIDAgICAvKiBkaWROb3RIYW5kbGVLZXlFdmVudCAqLworICAgICAgICAwLCAg
LyogZGlkTm90SGFuZGxlS2V5RXZlbnQgKi8KKyAgICAgICAgMCwgIC8qIGdldFdpbmRvd1JlY3Qg
Ki8KKyAgICAgICAgMCAgIC8qIHNldFdpbmRvd1JlY3QgKi8KICAgICB9OwogICAgIFdLUGFnZVNl
dFBhZ2VVSUNsaWVudChwYWdlUmVmKCksICZ1aUNsaWVudCk7CiB9CkluZGV4OiBXZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvcXQvcXdrcGFnZV9wLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL3F0L3F3a3BhZ2VfcC5oCShyZXZpc2lvbiA2OTQxOCkKKysrIFdlYktpdDIvVUlQcm9j
ZXNzL0FQSS9xdC9xd2twYWdlX3AuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsOCBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHRvb2xUaXBDaGFuZ2VkKGNvbnN0IFdURjo6U3RyaW5n
JiwgY29uc3QgV1RGOjpTdHJpbmcmKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJFZGl0Q29t
bWFuZChQYXNzUmVmUHRyPFdlYktpdDo6V2ViRWRpdENvbW1hbmRQcm94eT4sIFdlYktpdDo6V2Vi
UGFnZVByb3h5OjpVbmRvT3JSZWRvKTsKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJBbGxFZGl0Q29t
bWFuZHMoKTsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCB0cmFuc2Zvcm1Ub0Rldmlj
ZVNwYWNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6
RmxvYXRSZWN0IHRyYW5zZm9ybVRvVXNlclNwYWNlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYp
OwogCiAgICAgdm9pZCBwYWludChRUGFpbnRlciogcGFpbnRlciwgUVJlY3QpOwogCkluZGV4OiBX
ZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9V
SVByb2Nlc3Mvd2luL1dlYlZpZXcuY3BwCShyZXZpc2lvbiA2OTQxOCkKKysrIFdlYktpdDIvVUlQ
cm9jZXNzL3dpbi9XZWJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAog
I2luY2x1ZGUgIldlYlBhZ2VOYW1lc3BhY2UuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIK
ICNpbmNsdWRlIDxDb21tY3RybC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRmxvYXRSZWN0Lmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9XZWJDb3JlSW5z
dGFuY2VIYW5kbGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1dpbmRvd01lc3NhZ2VCcm9hZGNhc3Rl
ci5oPgpAQCAtNTgwLDEwICs1ODEsMjAgQEAgdm9pZCBXZWJWaWV3OjpjbGVhckFsbEVkaXRDb21t
YW5kcygpCiB7CiB9CiAKLXZvaWQgV2ViVmlldzo6c2V0RWRpdENvbW1hbmRTdGF0ZShjb25zdCBX
VEY6OlN0cmluZyYsIGJvb2wsIGludCkKK3ZvaWQgV2ViVmlldzo6c2V0RWRpdENvbW1hbmRTdGF0
ZShjb25zdCBTdHJpbmcmLCBib29sLCBpbnQpCiB7CiB9CiAKK0Zsb2F0UmVjdCBXZWJWaWV3Ojp0
cmFuc2Zvcm1Ub0RldmljZVNwYWNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICByZXR1
cm4gcmVjdDsKK30KKworRmxvYXRSZWN0IFdlYlZpZXc6OnRyYW5zZm9ybVRvVXNlclNwYWNlKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICByZXR1cm4gcmVjdDsKK30KKwogI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKIHZvaWQgV2ViVmlldzo6cGFnZURpZEVudGVyQWNjZWxl
cmF0ZWRDb21wb3NpdGluZygpCiB7CkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVmll
dy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJWaWV3LmgJKHJldmlz
aW9uIDY5NDE4KQorKysgV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlZpZXcuaAkod29ya2luZyBj
b3B5KQpAQCAtOTgsNiArOTgsOCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCByZWdpc3Rl
ckVkaXRDb21tYW5kKFBhc3NSZWZQdHI8V2ViRWRpdENvbW1hbmRQcm94eT4sIFdlYlBhZ2VQcm94
eTo6VW5kb09yUmVkbyk7CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyQWxsRWRpdENvbW1hbmRzKCk7
CiAgICAgdmlydHVhbCB2b2lkIHNldEVkaXRDb21tYW5kU3RhdGUoY29uc3QgV1RGOjpTdHJpbmcm
LCBib29sLCBpbnQpOworICAgIHZpcnR1YWwgV2ViQ29yZTo6RmxvYXRSZWN0IHRyYW5zZm9ybVRv
RGV2aWNlU3BhY2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCBXZWJD
b3JlOjpGbG9hdFJlY3QgdHJhbnNmb3JtVG9Vc2VyU3BhY2UoY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0Jik7CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgdmlydHVhbCB2
b2lkIHBhZ2VEaWRFbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKTsKSW5kZXg6IFdlYktpdDIv
V2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIv
V2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA2OTQxOCkKKysrIFdl
YktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0zNjEsNiArMzYxLDcgQEAKIAkJQkNDNTcxNUIxMTVBREFFRjAwMUNDQUY5IC8qIFdlYlN5c3Rl
bUludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkNDNTcxNTkxMTVBREFFRjAwMUNDQUY5IC8qIFdlYlN5c3RlbUludGVyZmFjZS5oICovOyB9
OwogCQlCQ0M1NzE1QzExNUFEQUVGMDAxQ0NBRjkgLyogV2ViU3lzdGVtSW50ZXJmYWNlLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNDNTcxNUExMTVB
REFFRjAwMUNDQUY5IC8qIFdlYlN5c3RlbUludGVyZmFjZS5tbSAqLzsgfTsKIAkJQkNDNTcxNjIx
MTVBREI0MjAwMUNDQUY5IC8qIE5vdEltcGxlbWVudGVkLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0M1NzE2MTExNUFEQjQyMDAxQ0NBRjkgLyogTm90
SW1wbGVtZW50ZWQuaCAqLzsgfTsKKwkJQkNDOEIzNzQxMjVGQjY5MDAwREU0NkE0IC8qIFdLR2Vv
bWV0cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJD
QzhCMzczMTI1RkI2OTAwMERFNDZBNCAvKiBXS0dlb21ldHJ5LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwogCQlCQ0M5MzhFMTExODBERTQ0MDA4NUU1RkUg
LyogV0tDb250ZXh0UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQkNDOTM4RTAxMTgwREU0NDAwODVFNUZFIC8qIFdLQ29udGV4dFByaXZhdGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQ0NC
NzVDNjEyMDNBMUNFMDAyMjJEMUIgLyogV2ViQ29udGV4dE1lc3NhZ2VLaW5kcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNDQjc1QzUxMjAzQTFDRTAw
MjIyRDFCIC8qIFdlYkNvbnRleHRNZXNzYWdlS2luZHMuaCAqLzsgfTsKIAkJQkNEMDA0MkQxMTBD
MUUyNzAwM0I4QTY3IC8qIENvcmVTZXJ2aWNlcy5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0QwMDQyQzExMEMxRTI3MDAzQjhBNjcg
LyogQ29yZVNlcnZpY2VzLmZyYW1ld29yayAqLzsgfTsKQEAgLTgyMyw2ICs4MjQsNyBAQAogCQlC
Q0M1NzE2MTExNUFEQjQyMDAxQ0NBRjkgLyogTm90SW1wbGVtZW50ZWQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTm90SW1wbGVtZW50ZWQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQkNDODA0OUQxMjJGMEQ2QjAwMTAzNTI5IC8qIE11dGFibGVBcnJheS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNdXRhYmxlQXJyYXkuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0M4MDQ5RTEyMkYwRDZCMDAxMDM1MjkgLyog
TXV0YWJsZUFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE11dGFibGVB
cnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0M4QjM3MzEyNUZCNjkwMDBE
RTQ2QTQgLyogV0tHZW9tZXRyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
S0dlb21ldHJ5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDQzkzOEUwMTE4MERF
NDQwMDg1RTVGRSAvKiBXS0NvbnRleHRQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdLQ29udGV4dFByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQkNDQjc1QzUxMjAzQTFDRTAwMjIyRDFCIC8qIFdlYkNvbnRleHRNZXNzYWdlS2luZHMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29udGV4dE1lc3NhZ2VLaW5kcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0QwMDQyQzExMEMxRTI3MDAzQjhBNjcg
LyogQ29yZVNlcnZpY2VzLmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJhbWV3b3JrOyBuYW1lID0gQ29yZVNlcnZpY2Vz
LmZyYW1ld29yazsgcGF0aCA9IC9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0NvcmVTZXJ2aWNl
cy5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSAiPGFic29sdXRlPiI7IH07CkBAIC0xNjg1LDYgKzE2
ODcsNyBAQAogCQkJCUJDNDA3NURGMTI0RkYwMjcwMDY4RjIwQSAvKiBXS0Vycm9yLmNwcCAqLywK
IAkJCQlCQzQwNzVFMDEyNEZGMDI3MDA2OEYyMEEgLyogV0tFcnJvci5oICovLAogCQkJCUJDNDA3
ODNDMTI1MEZBREQwMDY4RjIwQSAvKiBXS0V2ZW50LmggKi8sCisJCQkJQkNDOEIzNzMxMjVGQjY5
MDAwREU0NkE0IC8qIFdLR2VvbWV0cnkuaCAqLywKIAkJCQlCQzQwNzVFMTEyNEZGMDI3MDA2OEYy
MEEgLyogV0tNdXRhYmxlQXJyYXkuY3BwICovLAogCQkJCUJDNDA3NUUyMTI0RkYwMjcwMDY4RjIw
QSAvKiBXS011dGFibGVBcnJheS5oICovLAogCQkJCUJDNDA3NUUzMTI0RkYwMjcwMDY4RjIwQSAv
KiBXS011dGFibGVEaWN0aW9uYXJ5LmNwcCAqLywKQEAgLTE5NjUsNiArMTk2OCw3IEBACiAJCQkJ
QkNCRDNDM0IxMjVCRkE3QTAwRDJDMjlGIC8qIFN0cmluZ1BhaXJWZWN0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTFBM0REMjAyMTI1RTVBMUYwMDQ1MTVFNiAvKiBXZWJGaW5kQ2xpZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQkxQTNERDIwNjEyNUU1QTJGMDA0NTE1RTYgLyogQVBJQ2xpZW50Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQlCQ0M4QjM3NDEyNUZCNjkwMDBERTQ2QTQgLyogV0tHZW9tZXRy
eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJv
Y2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViQ2hyb21lQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAkocmV2aXNpb24gNjk0MTgpCisrKyBX
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTcsMTUgKzU3LDIxIEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpjaHJv
bWVEZXN0cm95ZWQoKQogICAgIGRlbGV0ZSB0aGlzOwogfQogCi12b2lkIFdlYkNocm9tZUNsaWVu
dDo6c2V0V2luZG93UmVjdChjb25zdCBGbG9hdFJlY3QmIHdpbmRvd1JlY3QpCit2b2lkIFdlYkNo
cm9tZUNsaWVudDo6c2V0V2luZG93UmVjdChjb25zdCBGbG9hdFJlY3QmIHdpbmRvd0ZyYW1lKQog
ewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVj
dGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNldFdpbmRvd0ZyYW1lKHdpbmRv
d0ZyYW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKIEZsb2F0UmVjdCBXZWJDaHJvbWVDbGll
bnQ6OndpbmRvd1JlY3QoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEZs
b2F0UmVjdCgpOworICAgIEZsb2F0UmVjdCBuZXdXaW5kb3dGcmFtZTsKKworICAgIGlmICghV2Vi
UHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpHZXRXaW5kb3dGcmFtZSgpLAorICAgICAgICAgICAgTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6R2V0V2luZG93RnJhbWU6OlJlcGx5KG5ld1dpbmRvd0ZyYW1lKSwKKyAgICAgICAgICAg
IG1fcGFnZS0+cGFnZUlEKCksIENvcmVJUEM6OkNvbm5lY3Rpb246Ok5vVGltZW91dCkpCisgICAg
ICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKworICAgIHJldHVybiBuZXdXaW5kb3dGcmFtZTsKIH0K
IAogRmxvYXRSZWN0IFdlYkNocm9tZUNsaWVudDo6cGFnZVJlY3QoKQpJbmRleDogV2ViS2l0Mi93
aW4vV2ViS2l0Mi52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi93aW4vV2ViS2l0Mi52Y3By
b2oJKHJldmlzaW9uIDY5NDE4KQorKysgV2ViS2l0Mi93aW4vV2ViS2l0Mi52Y3Byb2oJKHdvcmtp
bmcgY29weSkKQEAgLTYwOCw2ICs2MDgsMTAgQEAKIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJ
CTxGaWxlDQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFNoYXJlZFxBUElcY1xXS0dlb21ldHJ5Lmgi
DQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0i
Li5cU2hhcmVkXEFQSVxjXFdLTXV0YWJsZUFycmF5LmNwcCINCiAJCQkJCT4NCiAJCQkJPC9GaWxl
Pg0KSW5kZXg6IFdlYktpdDIvd2luL1dlYktpdDJHZW5lcmF0ZWQubWFrZQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQyL3dpbi9XZWJLaXQyR2VuZXJhdGVkLm1ha2UJKHJldmlzaW9uIDY5NDE4KQorKysg
V2ViS2l0Mi93aW4vV2ViS2l0MkdlbmVyYXRlZC5tYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0xNCw2
ICsxNCw3IEBAIGFsbDoKICAgICB4Y29weSAveSAvZCAiLi5cU2hhcmVkXEFQSVxjXFdLRGljdGlv
bmFyeS5oIiAiJChXRUJLSVRPVVRQVVRESVIpXGluY2x1ZGVcV2ViS2l0MiIKICAgICB4Y29weSAv
eSAvZCAiLi5cU2hhcmVkXEFQSVxjXFdLRXJyb3IuaCIgIiQoV0VCS0lUT1VUUFVURElSKVxpbmNs
dWRlXFdlYktpdDIiCiAgICAgeGNvcHkgL3kgL2QgIi4uXFNoYXJlZFxBUElcY1xXS0V2ZW50Lmgi
ICIkKFdFQktJVE9VVFBVVERJUilcaW5jbHVkZVxXZWJLaXQyIgorICAgIHhjb3B5IC95IC9kICIu
LlxTaGFyZWRcQVBJXGNcV0tHZW9tZXRyeS5oIiAiJChXRUJLSVRPVVRQVVRESVIpXGluY2x1ZGVc
V2ViS2l0MiIKICAgICB4Y29weSAveSAvZCAiLi5cU2hhcmVkXEFQSVxjXFdLTXV0YWJsZUFycmF5
LmgiICIkKFdFQktJVE9VVFBVVERJUilcaW5jbHVkZVxXZWJLaXQyIgogICAgIHhjb3B5IC95IC9k
ICIuLlxTaGFyZWRcQVBJXGNcV0tNdXRhYmxlRGljdGlvbmFyeS5oIiAiJChXRUJLSVRPVVRQVVRE
SVIpXGluY2x1ZGVcV2ViS2l0MiIKICAgICB4Y29weSAveSAvZCAiLi5cU2hhcmVkXEFQSVxjXFdL
TnVtYmVyLmgiICIkKFdFQktJVE9VVFBVVERJUilcaW5jbHVkZVxXZWJLaXQyIgpJbmRleDogV2Vi
S2l0VG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0NoYW5nZUxvZwko
cmV2aXNpb24gNjk0NDApCisrKyBXZWJLaXRUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwyOCBAQAorMjAxMC0xMC0wOSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5lZWQg
aW1wbGVtZW50YXRpb24gb2YgQ2hyb21lQ2xpZW50IHdpbmRvd1JlY3QgcmVsYXRlZCBmdW5jdGlv
bnMuCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS84NDY5NDc2PgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDczODYKKworICAgICAgICAqIE1pbmlCcm93
c2VyL21hYy9Ccm93c2VyV2luZG93Q29udHJvbGxlci5tOgorICAgICAgICAoZ2V0V2luZG93RnJh
bWUpOgorICAgICAgICAoc2V0V2luZG93RnJhbWUpOgorICAgICAgICAoLVtCcm93c2VyV2luZG93
Q29udHJvbGxlciBhd2FrZUZyb21OaWJdKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Bs
YXRmb3JtV2ViVmlldy5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xs
ZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6aW5pdGlhbGl6ZSk6CisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9tYWMvUGxhdGZvcm1XZWJWaWV3TWFjLm1tOgorICAgICAg
ICAoV1RSOjpQbGF0Zm9ybVdlYlZpZXc6OndpbmRvd0ZyYW1lKToKKyAgICAgICAgKFdUUjo6UGxh
dGZvcm1XZWJWaWV3OjpzZXRXaW5kb3dGcmFtZSk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5l
ci9xdC9QbGF0Zm9ybVdlYlZpZXdRdC5jcHA6CisgICAgICAgIChXVFI6OlBsYXRmb3JtV2ViVmll
dzo6d2luZG93RnJhbWUpOgorICAgICAgICAoV1RSOjpQbGF0Zm9ybVdlYlZpZXc6OnNldFdpbmRv
d0ZyYW1lKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL3dpbi9QbGF0Zm9ybVdlYlZpZXdX
aW4uY3BwOgorICAgICAgICAoV1RSOjpQbGF0Zm9ybVdlYlZpZXc6OndpbmRvd0ZyYW1lKToKKyAg
ICAgICAgKFdUUjo6UGxhdGZvcm1XZWJWaWV3OjpzZXRXaW5kb3dGcmFtZSk6CisKIDIwMTAtMTAt
MDggIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2Vk
IChFcmljIGlzIG9uIHZhY2F0aW9uIGluIHRoaXMgY2hhbmdlIGlzIHRyaXZpYWwpLgpJbmRleDog
V2ViS2l0VG9vbHMvTWluaUJyb3dzZXIvbWFjL0Jyb3dzZXJXaW5kb3dDb250cm9sbGVyLm0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0VG9vbHMvTWluaUJyb3dzZXIvbWFjL0Jyb3dzZXJXaW5kb3dDb250
cm9sbGVyLm0JKHJldmlzaW9uIDY5NDE4KQorKysgV2ViS2l0VG9vbHMvTWluaUJyb3dzZXIvbWFj
L0Jyb3dzZXJXaW5kb3dDb250cm9sbGVyLm0JKHdvcmtpbmcgY29weSkKQEAgLTQ4NCw2ICs0ODQs
MjIgQEAgc3RhdGljIHZvaWQgY29udGVudHNTaXplQ2hhbmdlZChXS1BhZ2VSZQogICAgIExPRyhA
ImNvbnRlbnRzU2l6ZUNoYW5nZWQiKTsKIH0KIAorc3RhdGljIFdLUmVjdCBnZXRXaW5kb3dGcmFt
ZShXS1BhZ2VSZWYgcGFnZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBDR1JlY3Qg
cmVjdCA9IFtbKEJyb3dzZXJXaW5kb3dDb250cm9sbGVyICopY2xpZW50SW5mbyB3aW5kb3ddIGZy
YW1lXTsKKyAgICBXS1JlY3Qgd2tSZWN0OworICAgIHdrUmVjdC5vcmlnaW4ueCA9IHJlY3Qub3Jp
Z2luLng7CisgICAgd2tSZWN0Lm9yaWdpbi55ID0gcmVjdC5vcmlnaW4ueTsKKyAgICB3a1JlY3Qu
c2l6ZS53aWR0aCA9IHJlY3Quc2l6ZS53aWR0aDsKKyAgICB3a1JlY3Quc2l6ZS5oZWlnaHQgPSBy
ZWN0LnNpemUuaGVpZ2h0OworICAgIHJldHVybiB3a1JlY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHNl
dFdpbmRvd0ZyYW1lKFdLUGFnZVJlZiBwYWdlLCBXS1JlY3QgcmVjdCwgY29uc3Qgdm9pZCogY2xp
ZW50SW5mbykKK3sKKyAgICBbWyhCcm93c2VyV2luZG93Q29udHJvbGxlciAqKWNsaWVudEluZm8g
d2luZG93XSBzZXRGcmFtZTpDR1JlY3RNYWtlKHJlY3Qub3JpZ2luLngsIHJlY3Qub3JpZ2luLnks
IHJlY3Quc2l6ZS53aWR0aCwgcmVjdC5zaXplLmhlaWdodCkgZGlzcGxheTpZRVNdOworfQorCiAt
ICh2b2lkKWF3YWtlRnJvbU5pYgogewogICAgIF93ZWJWaWV3ID0gW1tXS1ZpZXcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6W2NvbnRhaW5lclZpZXcgZnJhbWVdIHBhZ2VOYW1lc3BhY2VSZWY6X3BhZ2VO
YW1lc3BhY2VdOwpAQCAtNTM4LDcgKzU1NCw5IEBAIC0gKHZvaWQpYXdha2VGcm9tTmliCiAgICAg
ICAgIHNldFN0YXR1c1RleHQsCiAgICAgICAgIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50LAogICAg
ICAgICBjb250ZW50c1NpemVDaGFuZ2VkLAotICAgICAgICAwICAgICAgICAgICAvKiBkaWROb3RI
YW5kbGVLZXlFdmVudCAqLworICAgICAgICAwLCAgICAgICAgICAvKiBkaWROb3RIYW5kbGVLZXlF
dmVudCAqLworICAgICAgICBnZXRXaW5kb3dGcmFtZSwKKyAgICAgICAgc2V0V2luZG93RnJhbWUK
ICAgICB9OwogICAgIFdLUGFnZVNldFBhZ2VVSUNsaWVudChfd2ViVmlldy5wYWdlUmVmLCAmdWlD
bGllbnQpOwogfQpJbmRleDogV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdl
YlZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRm
b3JtV2ViVmlldy5oCShyZXZpc2lvbiA2OTQxOCkKKysrIFdlYktpdFRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvUGxhdGZvcm1XZWJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDYgKzYwLDkgQEAg
cHVibGljOgogICAgIHZvaWQgcmVzaXplVG8odW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdo
dCk7CiAgICAgdm9pZCBmb2N1cygpOwogCisgICAgV0tSZWN0IHdpbmRvd0ZyYW1lKCk7CisgICAg
dm9pZCBzZXRXaW5kb3dGcmFtZShXS1JlY3QpOworCiBwcml2YXRlOgogICAgIFBsYXRmb3JtV0tW
aWV3IG1fdmlldzsKICAgICBQbGF0Zm9ybVdpbmRvdyBtX3dpbmRvdzsKSW5kZXg6IFdlYktpdFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiA2
OTQxOCkKKysrIFdlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2NywzMCBAQCBUZXN0Q29udHJvbGxlcjo6flRlc3RD
b250cm9sbGVyKCkKIHsKIH0KIAorc3RhdGljIFdLUmVjdCBnZXRXaW5kb3dGcmFtZU1haW5QYWdl
KFdLUGFnZVJlZiBwYWdlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIFBsYXRmb3Jt
V2ViVmlldyogdmlldyA9IHN0YXRpY19jYXN0PFRlc3RDb250cm9sbGVyKj4oY29uc3RfY2FzdDx2
b2lkKj4oY2xpZW50SW5mbykpLT5tYWluV2ViVmlldygpOworICAgIHJldHVybiB2aWV3LT53aW5k
b3dGcmFtZSgpOworfQorCitzdGF0aWMgdm9pZCBzZXRXaW5kb3dGcmFtZU1haW5QYWdlKFdLUGFn
ZVJlZiBwYWdlLCBXS1JlY3QgZnJhbWUsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAg
UGxhdGZvcm1XZWJWaWV3KiB2aWV3ID0gc3RhdGljX2Nhc3Q8VGVzdENvbnRyb2xsZXIqPihjb25z
dF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSktPm1haW5XZWJWaWV3KCk7CisgICAgdmlldy0+c2V0
V2luZG93RnJhbWUoZnJhbWUpOworfQorCitzdGF0aWMgV0tSZWN0IGdldFdpbmRvd0ZyYW1lT3Ro
ZXJQYWdlKFdLUGFnZVJlZiBwYWdlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIFBs
YXRmb3JtV2ViVmlldyogdmlldyA9IHN0YXRpY19jYXN0PFBsYXRmb3JtV2ViVmlldyo+KGNvbnN0
X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKTsKKyAgICByZXR1cm4gdmlldy0+d2luZG93RnJhbWUo
KTsKK30KKworc3RhdGljIHZvaWQgc2V0V2luZG93RnJhbWVPdGhlclBhZ2UoV0tQYWdlUmVmIHBh
Z2UsIFdLUmVjdCBmcmFtZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBQbGF0Zm9y
bVdlYlZpZXcqIHZpZXcgPSBzdGF0aWNfY2FzdDxQbGF0Zm9ybVdlYlZpZXcqPihjb25zdF9jYXN0
PHZvaWQqPihjbGllbnRJbmZvKSk7CisgICAgdmlldy0+c2V0V2luZG93RnJhbWUoZnJhbWUpOwor
fQorCiBzdGF0aWMgdm9pZCBjbG9zZU90aGVyUGFnZShXS1BhZ2VSZWYgcGFnZSwgY29uc3Qgdm9p
ZCogY2xpZW50SW5mbykKIHsKICAgICBXS1BhZ2VDbG9zZShwYWdlKTsKQEAgLTkzLDcgKzExNyw5
IEBAIHN0YXRpYyBXS1BhZ2VSZWYgY3JlYXRlT3RoZXJQYWdlKFdLUGFnZVIKICAgICAgICAgMCwK
ICAgICAgICAgMCwKICAgICAgICAgMCwKLSAgICAgICAgMAorICAgICAgICAwLAorICAgICAgICBn
ZXRXaW5kb3dGcmFtZU90aGVyUGFnZSwKKyAgICAgICAgc2V0V2luZG93RnJhbWVPdGhlclBhZ2UK
ICAgICB9OwogICAgIFdLUGFnZVNldFBhZ2VVSUNsaWVudChuZXdQYWdlLCAmb3RoZXJQYWdlVUlD
bGllbnQpOwogCkBAIC0xNzQsNyArMjAwLDkgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6aW5pdGlh
bGl6ZShpbnQgYXJnYwogICAgICAgICAwLAogICAgICAgICAwLAogICAgICAgICAwLAotICAgICAg
ICAwCisgICAgICAgIDAsCisgICAgICAgIGdldFdpbmRvd0ZyYW1lTWFpblBhZ2UsCisgICAgICAg
IHNldFdpbmRvd0ZyYW1lTWFpblBhZ2UKICAgICB9OwogICAgIFdLUGFnZVNldFBhZ2VVSUNsaWVu
dChtX21haW5XZWJWaWV3LT5wYWdlKCksICZwYWdlVUlDbGllbnQpOwogCkluZGV4OiBXZWJLaXRU
b29scy9XZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXIueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL1dlYktp
dFRlc3RSdW5uZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNjk0MTgpCisr
KyBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXIueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzY4LDcgKzM2OCwxNCBAQAogCQkJ
aXNhID0gUEJYUHJvamVjdDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAxREVCOTI3ODA4
NzMzREQ0MDAxMEU5Q0QgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0
ICJXZWJLaXRUZXN0UnVubmVyIiAqLzsKIAkJCWNvbXBhdGliaWxpdHlWZXJzaW9uID0gIlhjb2Rl
IDMuMSI7CisJCQlkZXZlbG9wbWVudFJlZ2lvbiA9IEVuZ2xpc2g7CiAJCQloYXNTY2FubmVkRm9y
RW5jb2RpbmdzID0gMTsKKwkJCWtub3duUmVnaW9ucyA9ICgKKwkJCQlFbmdsaXNoLAorCQkJCUph
cGFuZXNlLAorCQkJCUZyZW5jaCwKKwkJCQlHZXJtYW4sCisJCQkpOwogCQkJbWFpbkdyb3VwID0g
MDhGQjc3OTRGRTg0MTU1REMwMkFBQzA3IC8qIFdlYktpdFRlc3RSdW5uZXIgKi87CiAJCQlwcm9q
ZWN0RGlyUGF0aCA9ICIiOwogCQkJcHJvamVjdFJvb3QgPSAiIjsKSW5kZXg6IFdlYktpdFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvbWFjL1BsYXRmb3JtV2ViVmlld01hYy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9QbGF0Zm9ybVdlYlZpZXdNYWMubW0J
KHJldmlzaW9uIDY5NDE4KQorKysgV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvUGxh
dGZvcm1XZWJWaWV3TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02Myw0ICs2MywyMSBAQCB2b2lk
IFBsYXRmb3JtV2ViVmlldzo6Zm9jdXMoKQogICAgIC8vIEltcGxlbWVudC4KIH0KIAorV0tSZWN0
IFBsYXRmb3JtV2ViVmlldzo6d2luZG93RnJhbWUoKQoreworICAgIE5TUmVjdCBmcmFtZSA9IFtt
X3dpbmRvdyBmcmFtZV07CisKKyAgICBXS1JlY3Qgd2tGcmFtZTsKKyAgICB3a0ZyYW1lLm9yaWdp
bi54ID0gZnJhbWUub3JpZ2luLng7CisgICAgd2tGcmFtZS5vcmlnaW4ueSA9IGZyYW1lLm9yaWdp
bi55OworICAgIHdrRnJhbWUuc2l6ZS53aWR0aCA9IGZyYW1lLnNpemUud2lkdGg7CisgICAgd2tG
cmFtZS5zaXplLmhlaWdodCA9IGZyYW1lLnNpemUuaGVpZ2h0OworICAgIHJldHVybiB3a0ZyYW1l
OworfQorCit2b2lkIFBsYXRmb3JtV2ViVmlldzo6c2V0V2luZG93RnJhbWUoV0tSZWN0IGZyYW1l
KQoreworICAgIFttX3dpbmRvdyBzZXRGcmFtZTpOU01ha2VSZWN0KGZyYW1lLm9yaWdpbi54LCBm
cmFtZS5vcmlnaW4ueSwgZnJhbWUuc2l6ZS53aWR0aCwgZnJhbWUuc2l6ZS5oZWlnaHQpIGRpc3Bs
YXk6WUVTXTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RSCkluZGV4OiBXZWJLaXRUb29scy9XZWJL
aXRUZXN0UnVubmVyL3F0L1BsYXRmb3JtV2ViVmlld1F0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXRUb29scy9XZWJLaXRUZXN0UnVubmVyL3F0L1BsYXRmb3JtV2ViVmlld1F0LmNwcAkocmV2aXNp
b24gNjk0MTgpCisrKyBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL3F0L1BsYXRmb3JtV2Vi
Vmlld1F0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNCArNzksMjEgQEAgdm9pZCBQbGF0Zm9y
bVdlYlZpZXc6OmZvY3VzKCkKICAgICBtX3ZpZXctPnNldEZvY3VzKFF0OjpPdGhlckZvY3VzUmVh
c29uKTsKIH0KIAorV0tSZWN0IFBsYXRmb3JtV2ViVmlldzo6d2luZG93UmVjdCgpCit7CisgICAg
Ly8gSW1wbGVtZW50LgorCisgICAgV0tSZWN0IHdrUmVjdDsKKyAgICB3a1JlY3Qub3JpZ2luLngg
PSAwOworICAgIHdrUmVjdC5vcmlnaW4ueSA9IDA7CisgICAgd2tSZWN0LnNpemUud2lkdGggPSAw
OworICAgIHdrUmVjdC5zaXplLmhlaWdodCA9IDA7CisgICAgcmV0dXJuIHdrUmVjdDsKK30KKwor
dm9pZCBQbGF0Zm9ybVdlYlZpZXc6OnNldFdpbmRvd1JlY3QoV0tSZWN0KQoreworICAgIC8vIElt
cGxlbWVudC4KK30KKwogfSAvLyBuYW1lc3BhY2UgV1RSCkluZGV4OiBXZWJLaXRUb29scy9XZWJL
aXRUZXN0UnVubmVyL3dpbi9QbGF0Zm9ybVdlYlZpZXdXaW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvd2luL1BsYXRmb3JtV2ViVmlld1dpbi5jcHAJKHJl
dmlzaW9uIDY5NDE4KQorKysgV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci93aW4vUGxhdGZv
cm1XZWJWaWV3V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsNCArNzgsMjEgQEAgdm9pZCBQ
bGF0Zm9ybVdlYlZpZXc6OmZvY3VzKCkKICAgICA6OlNldEZvY3VzKDo6V0tWaWV3R2V0V2luZG93
KG1fdmlldykpOwogfQogCitXS1JlY3QgUGxhdGZvcm1XZWJWaWV3Ojp3aW5kb3dGcmFtZSgpCit7
CisgICAgLy8gSW1wbGVtZW50LgorCisgICAgV0tSZWN0IHdrRnJhbWU7CisgICAgd2tGcmFtZS5v
cmlnaW4ueCA9IDA7CisgICAgd2tGcmFtZS5vcmlnaW4ueSA9IDA7CisgICAgd2tGcmFtZS5zaXpl
LndpZHRoID0gMDsKKyAgICB3a0ZyYW1lLnNpemUuaGVpZ2h0ID0gMDsKKyAgICByZXR1cm4gd2tG
cmFtZTsKK30KKwordm9pZCBQbGF0Zm9ybVdlYlZpZXc6OnNldFdpbmRvd0ZyYW1lKFdLUmVjdCkK
K3sKKyAgICAvLyBJbXBsZW1lbnQuCit9CisKIH0gLy8gbmFtZXNwYWNlIFdUUgo=
</data>
<flag name="review"
          id="60208"
          type_id="1"
          status="+"
          setter="mitz"
    />
          </attachment>
      

    </bug>

</bugzilla>